diff --git a/.github/workflows/continuous.yml b/.github/workflows/continuous.yml new file mode 100644 index 000000000..b9a7dcee5 --- /dev/null +++ b/.github/workflows/continuous.yml @@ -0,0 +1,48 @@ +# This is a basic workflow to help you get started with Actions + +name: Continuous + +# Controls when the action will run. Triggers the workflow on push or pull request +# events but only for the development branch +on: + push: + branches: + - development + schedule: + # * is a special character in YAML so you have to quote this string + - cron: '0 0 * * *' + +jobs: + build: + runs-on: ubuntu-latest + env: + PROJECT_NAME: ${{ matrix.smalltalk }}-Moose + strategy: + matrix: + smalltalk: [ Pharo64-9.0, Pharo64-8.0 ] + name: ${{ matrix.smalltalk }} + steps: + - uses: actions/checkout@v2 + - uses: hpi-swa/setup-smalltalkCI@v1 + with: + smalltalk-version: ${{ matrix.smalltalk }} + - run: smalltalkci -s ${{ matrix.smalltalk }} + shell: bash + timeout-minutes: 15 + + - name: package + run: | + mv /home/runner/.smalltalkCI/_builds/* . + mv TravisCI.image $PROJECT_NAME.image + mv TravisCI.changes $PROJECT_NAME.changes + zip -r $PROJECT_NAME.zip $PROJECT_NAME.image $PROJECT_NAME.changes *.sources pharo.version + ls + + - name: Update Release + # You may pin to the exact commit or the version. + # uses: johnwbyrd/update-release@1d5ec4791e40507e5eca3b4dbf90f0b27e7e4979 + uses: johnwbyrd/update-release@v1.0.0 + with: + release: 'continuous' + token: ${{ secrets.GITHUB_TOKEN }} + files: ${{ env.PROJECT_NAME }}.zip diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..11e2aa9ca --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,48 @@ +name: Release + +on: + release: + types: [created] + +jobs: + build: + runs-on: ubuntu-latest + env: + PROJECT_NAME: ${{ matrix.smalltalk }}-Moose + strategy: + matrix: + smalltalk: [ Pharo64-9.0, Pharo64-8.0 ] + name: ${{ matrix.smalltalk }} + steps: + - uses: actions/checkout@v2 + - uses: hpi-swa/setup-smalltalkCI@v1 + with: + smalltalk-version: ${{ matrix.smalltalk }} + - run: smalltalkci -s ${{ matrix.smalltalk }} + shell: bash + timeout-minutes: 15 + + - name: package + run: | + mv /home/runner/.smalltalkCI/_builds/* . + mv TravisCI.image $PROJECT_NAME.image + mv TravisCI.changes $PROJECT_NAME.changes + zip -r $PROJECT_NAME.zip $PROJECT_NAME.image $PROJECT_NAME.changes *.sources pharo.version + ls + + - name: Get release + id: get_release + uses: bruceadams/get-release@v1.2.2 + env: + GITHUB_TOKEN: ${{ github.token }} + + - name: Upload Release Asset + id: upload-release-asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.get_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps + asset_path: ./${{ env.PROJECT_NAME }}.zip + asset_name: ${{ env.PROJECT_NAME }}.zip + asset_content_type: application/zip diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 000000000..9eab8f346 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,27 @@ +# This is a basic workflow to help you get started with Actions + +name: CI + +# Controls when the action will run. Triggers the workflow on push or pull request +# events but only for the development branch +on: + pull_request: + types: [assigned, opened, synchronize, reopened] + +jobs: + build: + runs-on: ubuntu-latest + env: + PROJECT_NAME: ${{ matrix.smalltalk }}-Moose + strategy: + matrix: + smalltalk: [ Pharo64-9.0, Pharo64-8.0 ] + name: ${{ matrix.smalltalk }} + steps: + - uses: actions/checkout@v2 + - uses: hpi-swa/setup-smalltalkCI@v1 + with: + smalltalk-version: ${{ matrix.smalltalk }} + - run: smalltalkci -s ${{ matrix.smalltalk }} + shell: bash + timeout-minutes: 15 diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..e8cfb822c --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +**/.DS_Store +.DS_Store \ No newline at end of file diff --git a/.smalltalk.ston b/.smalltalk.ston index ac49b8235..ca3b5aecb 100644 --- a/.smalltalk.ston +++ b/.smalltalk.ston @@ -4,5 +4,10 @@ SmalltalkCISpec { #baseline : 'Moose', #directory : 'src' } - ] + ], + #testing : { + #include : { + #packages : [ 'Fame.*', 'Famix.*', 'Moose.*' ] + } + } } diff --git a/.travis.yml b/.travis.yml index b2a71f15b..f3e6bcf63 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,12 +5,17 @@ os: - linux smalltalk: - - Pharo64-7.0 - -smalltalk_config: - - .smalltalk.ston - - .withPharoTests.ston + - Pharo64-9.0 + - Pharo64-8.0 matrix: - allow_failures: - - smalltalk_config: .withPharoTests.ston + fast_finish: true + +after_success: + - wget -c https://github.com/probonopd/uploadtool/raw/master/upload.sh + - bash upload.sh Pharo.image Pharo.changes + +branches: + except: + - /^(?i:continuous)$/ + diff --git a/.withPharoTests.ston b/.withPharoTests.ston deleted file mode 100644 index 6c088f027..000000000 --- a/.withPharoTests.ston +++ /dev/null @@ -1,16 +0,0 @@ -SmalltalkCISpec { - #loading : [ - SCIMetacelloLoadSpec { - #baseline : 'Moose', - #directory : 'src' - } - ], - #testing : { - #exclude : { - #classes : [ #GTUnprintableObjectTest, #RTLabelTest, #RTExampleTestCase, #OmDeferrerTest, #SystemDependenciesTest, #STONWriterTests, #STONReaderTests, #FLContextSerializationTest, #STONLargeWriteReadTests, #DateAndTimeTest, #STONWriteAsciiOnlyReadTests, #ProperMethodCategorizationTest, #FAMIXExtensionMetricTest, #STONWritePrettyPrinterReadTests, #ProperlyImplementedClassesTest, #STONWriteReadCommentsTests, #STONWriteReadTests, #TraitFileOutTest, #ReleaseTest, #DiskFileSystemTest, #TestValueWithinFix, #RPackageWithDoTest, #OrderedCollectionTest, #LocalRecursionStopperTest ] - }, - #allTestCases : true, - #hidePassingTests : true, - #serializeError: false - } -} diff --git a/README.md b/README.md index 74c412af8..f22355ede 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,21 @@ -[![Build Status](https://travis-ci.org/moosetechnology/Moose.svg?branch=development)](https://travis-ci.org/moosetechnology/Moose) - +[![Build Status](https://travis-ci.com/moosetechnology/Moose.svg?branch=development)](https://travis-ci.com/moosetechnology/Moose) + +![Continuous](https://github.com/moosetechnology/Moose/workflows/Continuous/badge.svg?branch=development) + Moose is an extensive platform for software and data analysis. Moose is an open source software. It was started at the Software Composition Group from the University of Bern in 1996 and is currently contributed to and used by multiple partners. It offers multiple services ranging from importing and parsing data, to modeling, to measuring, querying, mining, and to building interactive and visual analysis tools. +## Documentation + +Please refer to the [moose wiki](https://moosetechnology.github.io/moose-wiki/) for the documentation. + +## Installation + +### Get a built Moose Image + +![Download Moose gif](https://moosetechnology.github.io/moose-wiki/Beginners/res/downloadMoose.gif) + ### How to load **Moose v7** @@ -24,6 +36,35 @@ Metacello new load. ``` +### From Github Release + +The previous build comes from our jenkins. +You wan also use the releases of github. + + +To add this project into the pharo launcher: + +1. Download the PharoLauncher +2. Open PharoLauncher +3. Open a playground (Ctrl + O, Ctrl + W) +4. Execute the following piece of code + +```Smalltalk +| sources | +sources := { + PhLTemplateSource new + type: #HttpListing; + name: 'Moose'; + url: 'https://github.com/moosetechnology/Moose/releases'; + filterPattern: 'href="([^"]*/Pharo[0-9][^"]*.zip)"'; + templateNameFormat: '{6} ({5})' }. +PhLUserTemplateSources sourcesFile writeStreamDo: [ :s | + (STON writer on: s) + newLine: String lf; + prettyPrint: true; + nextPut: sources ] +``` + ### Learn more Check out [the official webpage of the Moose project](http://moosetechnology.org). diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index 6585ef6c1..000000000 --- a/appveyor.yml +++ /dev/null @@ -1,26 +0,0 @@ -environment: - CYG_ROOT: C:\cygwin - CYG_BASH: C:\cygwin\bin\bash - CYG_CACHE: C:\cygwin\var\cache\setup - CYG_EXE: C:\cygwin\setup-x86.exe - CYG_MIRROR: http://cygwin.mirror.constant.com - SCI_RUN: /cygdrive/c/smalltalkCI-master/run.sh - matrix: - - SMALLTALK: Pharo-5.0 - -branches: - only: - - never-build-branch-automatically - -platform: - - x86 - -install: - - '%CYG_EXE% -qnNdO -R "%CYG_ROOT%" -s "%CYG_MIRROR%" -l "%CYG_CACHE%" -P unzip' - - ps: Start-FileDownload "https://github.com/hpi-swa/smalltalkCI/archive/master.zip" "C:\smalltalkCI.zip" - - 7z x C:\smalltalkCI.zip -oC:\ -y > NULL - -build: false - -test_script: - - '%CYG_BASH% -lc "cd $APPVEYOR_BUILD_FOLDER; exec 0> announcementIn: aComposite [ - - "Not such a nice way to reuse the code" - GTObjectVariablesBrowser new variablesIn: aComposite. - aComposite presentations last - title: 'Announcement'; - display: [ :aSession | aSession announcement gtInspectorVariableValuePairs ]; - selectionAct: [ :aPresentation | aPresentation selection explore] on: $i entitled: 'Explore' -] - -{ #category : #building } -ACDAnnouncerBrowser >> announcerIn: aComposite [ - - "Not such a nice way to reuse the code" - GTObjectVariablesBrowser new variablesIn: aComposite. - aComposite presentations last - title: 'Announcer'; - display: [ :aSession | aSession announcer gtInspectorVariableValuePairs ]; - selectionAct: [ :aPresentation | aPresentation selection explore] on: $i entitled: 'Explore' - - -] - -{ #category : #accessing } -ACDAnnouncerBrowser >> browser [ - - ^ self presentations first -] - -{ #category : #building } -ACDAnnouncerBrowser >> componentsIn: aComposite [ - - self - subscriptionsIn: aComposite; - announcementIn: aComposite; - announcerIn: aComposite -] - -{ #category : #building } -ACDAnnouncerBrowser >> compose [ - - self tabulator with: [:browser | - browser row: #components. - browser transmit to: #components; andShow: [:aComposite | - self componentsIn: aComposite ]. - - browser transmit from: #components port: #strongSelection; toOutsidePort: #selection ] -] - -{ #category : #accessing } -ACDAnnouncerBrowser >> debugger [ - - ^ debugger -] - -{ #category : #accessing } -ACDAnnouncerBrowser >> debugger: anObject [ - - debugger := anObject -] - -{ #category : #'building actions' } -ACDAnnouncerBrowser >> installSubscriptionsActionsIn: aPresentation [ - - self debugger installActionsForRootPragmas: { #ACDSubscriptionDebuggingAction } in: aPresentation -] - -{ #category : #private } -ACDAnnouncerBrowser >> printAnnouncementTypeFor: anAnnouncementType [ - - ^ anAnnouncementType isCollection - ifTrue: [ - String streamContents: [:s | anAnnouncementType printElementsOn: s]] - ifFalse: [ - anAnnouncementType printString] -] - -{ #category : #accessing } -ACDAnnouncerBrowser >> selectedSubscription [ - - ^ ((self browser paneNamed: #components) port: #selection) value -] - -{ #category : #accessing } -ACDAnnouncerBrowser >> session [ - - ^ self debugger session -] - -{ #category : #building } -ACDAnnouncerBrowser >> subscriptionsIn: aComposite [ - - aComposite table - title: 'Subscriptions'; - showOnly: 100; - display: [ :aSession | aSession activeSubscriptions ]; - column: 'Announcement Type' evaluated: [ :aSubscription | - Text - string: (self printAnnouncementTypeFor: aSubscription announcementClass ) - attributes: (self textAttributesForSubscription: aSubscription) ]; - column: 'Action' evaluated: [ :aSubscription | - Text - string: (aSubscription action printString ) - attributes: (self textAttributesForSubscription: aSubscription) ]; - selectionAct: [:each | each selection explore] on: $i entitled: 'Explore'; - with: [ :presentation | - self installSubscriptionsActionsIn: presentation ] -] - -{ #category : #private } -ACDAnnouncerBrowser >> textAttributesForSubscription: aSubscription [ - - (self session executingSubscription == aSubscription) - ifTrue: [ ^ {TextEmphasis bold} ]. - - (self session hasSubscriptionExecuted: aSubscription ) - ifTrue: [ ^ {TextColor color: Color lightGray. TextEmphasis italic} ]. - - ^ {TextColor black} -] diff --git a/src-archive/ACD-Glamour-Interface/ACDStackSetReceiver.class.st b/src-archive/ACD-Glamour-Interface/ACDStackSetReceiver.class.st deleted file mode 100644 index 47ab49aa0..000000000 --- a/src-archive/ACD-Glamour-Interface/ACDStackSetReceiver.class.st +++ /dev/null @@ -1,37 +0,0 @@ -Class { - #name : #ACDStackSetReceiver, - #superclass : #DebugAction, - #category : #'ACD-Glamour-Interface' -} - -{ #category : #testing } -ACDStackSetReceiver >> appliesToDebugger: aDebugger [ - "Only a context above the sender context can be selected as the receiver" - - ^ (aDebugger selectedStackContext findContextSuchThat: [ :aContext | - (aContext == aDebugger session senderContext) ]) isNil -] - -{ #category : #accessing } -ACDStackSetReceiver >> defaultLabel [ - - ^ 'Set as receiver' -] - -{ #category : #accessing } -ACDStackSetReceiver >> defaultOrder [ - - ^ 200 -] - -{ #category : #actions } -ACDStackSetReceiver >> executeAction [ - - self session updateReceiverFrom: self debugger selectedStackContext -] - -{ #category : #accessing } -ACDStackSetReceiver >> id [ - - ^ #gtSetAsReceiverDebuggerAction -] diff --git a/src-archive/ACD-Glamour-Interface/ACDStackSetSender.class.st b/src-archive/ACD-Glamour-Interface/ACDStackSetSender.class.st deleted file mode 100644 index ed002cf9e..000000000 --- a/src-archive/ACD-Glamour-Interface/ACDStackSetSender.class.st +++ /dev/null @@ -1,42 +0,0 @@ -Class { - #name : #ACDStackSetSender, - #superclass : #DebugAction, - #category : #'ACD-Glamour-Interface' -} - -{ #category : #'as yet unclassified' } -ACDStackSetSender class >> gtACDSenderActionFor: aDebugger [ - -] - -{ #category : #testing } -ACDStackSetSender >> appliesToDebugger: aDebugger [ - "Only a context bellow the receiver context can be selected as the sender" - - ^ (aDebugger selectedStackContext findContextSuchThat: [ :aSenderContext | - (aSenderContext == aDebugger session receiverContext) ]) isNil -] - -{ #category : #accessing } -ACDStackSetSender >> defaultLabel [ - - ^ 'Set as sender' -] - -{ #category : #accessing } -ACDStackSetSender >> defaultOrder [ - - ^ 205 -] - -{ #category : #actions } -ACDStackSetSender >> executeAction [ - - self session updateSenderFrom: self debugger selectedStackContext -] - -{ #category : #accessing } -ACDStackSetSender >> id [ - - ^ #gtSetAsSenderDebuggerAction -] diff --git a/src-archive/ACD-Glamour-Interface/ACGlamourDebugger.class.st b/src-archive/ACD-Glamour-Interface/ACGlamourDebugger.class.st deleted file mode 100644 index 7a96b8028..000000000 --- a/src-archive/ACD-Glamour-Interface/ACGlamourDebugger.class.st +++ /dev/null @@ -1,258 +0,0 @@ -Class { - #name : #ACGlamourDebugger, - #superclass : #GTGenericStackDebugger, - #category : #'ACD-Glamour-Interface' -} - -{ #category : #accessing } -ACGlamourDebugger class >> defaultTitle [ - - ^ 'Announcement Centric Debugger' -] - -{ #category : #testing } -ACGlamourDebugger class >> handlesContext: aContext [ - - ^ (self sessionClass stackFilterFor: aContext) locateAnnouncerEntryPoint notNil -] - -{ #category : #'tools registry' } -ACGlamourDebugger class >> register [ - - self registerToolsOn: Smalltalk tools. -] - -{ #category : #'tools registry' } -ACGlamourDebugger class >> registerToolsOn: registry [ - - "Add ourselves to registry. See [Smalltalk tools]" - registry registerDebugger: self withRank: 10. -] - -{ #category : #private } -ACGlamourDebugger class >> sessionClass [ - - ^ ACDDebugSession -] - -{ #category : #'building presentations' } -ACGlamourDebugger >> announcerIn: composite [ - - composite custom: - (GTInspector new first - fixedSizePanes: 1; "Only one" - noTitle; - noActions; - showFirst: [ :a | a custom: (ACDAnnouncerBrowser new debugger: self) ]; - yourself) - -] - -{ #category : #accessing } -ACGlamourDebugger >> announcersBrowser [ - - ^ ((self browser paneNamed: #announcer) presentations first panes first presentations first) -] - -{ #category : #accessing } -ACGlamourDebugger >> codePresentation [ - ^ self receiverCodePresentation -] - -{ #category : #'building presentations' } -ACGlamourDebugger >> codePresentationIn: aComposite forContext: aContext [ - - ^ (self methodCodeWidgetIn: aComposite forContext: aContext) - title: [ GTInspector new printObjectAsAnItem: aContext receiver ]; - act: [:each | each entity receiver explore] on: $e entitled: 'Explore' -] - -{ #category : #'accessing context' } -ACGlamourDebugger >> currentContext [ - - ^ self interruptedContext -] - -{ #category : #building } -ACGlamourDebugger >> debuggerStructureIn: browser [ - - browser - column: [ :column | - column - row: #receiver; - row: #announcer; - row: #sender]; - column: #stack. -] - -{ #category : #building } -ACGlamourDebugger >> debuggerTransmissionsIn: browser [ - - browser transmit - to: #stack; - andShow: [ :composite | self stackIn: composite ]. - browser transmit - from: #stack port: #entity; - to: #stack port: #currentContext; - transformed: [ self currentContext ]. - - browser transmit - from: #stack port: #currentContext; - to: #receiver; - when: [ :session | session notNil ]; - andShow: [ :composite | self receiverIn: composite ]. - browser transmit - to: #announcer; - andShow: [ :composite | self announcerIn: composite ]. - browser transmit - to: #sender; - andShow: [ :composite | self senderIn: composite ] -] - -{ #category : #'building actions' } -ACGlamourDebugger >> installReceiverActionsFor: aPresentation [ - - self installActionsForRootPragmas: self receiverActionsPragmas in: aPresentation -] - -{ #category : #'building actions' } -ACGlamourDebugger >> installSenderActionsFor: aPresentation [ - - self installActionsForRootPragmas: self senderDebuggingActionsPragmas in: aPresentation -] - -{ #category : #'building actions' } -ACGlamourDebugger >> receiverActionsPragmas [ - - ^ #(debuggingAction receiverDebuggingAction), self codeActionsPragmas -] - -{ #category : #accessing } -ACGlamourDebugger >> receiverCodePresentation [ - - ^ self receiverPane presentations first -] - -{ #category : #'building presentations' } -ACGlamourDebugger >> receiverIn: composite [ - - (self codePresentationIn: composite forContext: self session context) - initialize: [ :code | code selectionInterval: (self session selectedCodeRangeForContext: self currentContext) ]; - with: [ :code | self installReceiverActionsFor: code ]. - - "composite custom: - ((GTInspector new first - fixedSizePanes: 1; - showFirst: [ :a | a custom: (GTDebuggerVariablesBrowser new noActions; noTitle) ]; - yourself) - title: 'State')" -] - -{ #category : #accessing } -ACGlamourDebugger >> receiverPane [ - - ^ self browser paneNamed: #receiver -] - -{ #category : #accessing } -ACGlamourDebugger >> receiverSelectionInterval [ - - ^ self selectionIntervalForPane: #receiver -] - -{ #category : #'accessing context' } -ACGlamourDebugger >> selectedContext [ - - ^ self interruptedContext -] - -{ #category : #accessing } -ACGlamourDebugger >> selectedStackContext [ - - ^ ((self browser paneNamed: #stack) port: #selection) value -] - -{ #category : #accessing } -ACGlamourDebugger >> selectedSubscription [ - - ^ self announcersBrowser selectedSubscription -] - -{ #category : #accessing } -ACGlamourDebugger >> senderCodePresentation [ - - ^ self senderPane presentations first -] - -{ #category : #'building actions' } -ACGlamourDebugger >> senderDebuggingActionsPragmas [ - - ^ { #ACDSenderDebuggingAction } -] - -{ #category : #'building presentations' } -ACGlamourDebugger >> senderIn: composite [ - - (self codePresentationIn: composite forContext: self session senderContext) - initialize: [ :code | code selectionInterval: (self session selectedCodeRangeForContext: self session senderContext) ]; - with: [ :code | self installSenderActionsFor: code ] -] - -{ #category : #accessing } -ACGlamourDebugger >> senderPane [ - - ^ self browser paneNamed: #sender -] - -{ #category : #'building actions' } -ACGlamourDebugger >> stackDebuggingActionsPragmas [ - - ^ #( stackDebuggingAction ) -] - -{ #category : #'building presentations' } -ACGlamourDebugger >> stackIn: composite [ - - (super stackIn: composite) - selectionAct: [:each| each selection explore] on: $i entitled: 'Explore' - -] - -{ #category : #'printing/formatting' } -ACGlamourDebugger >> textAttributesForStackEntry: aContext [ - | ctxt | - (self session receiverContext == aContext ) - ifTrue: [ ^ {TextEmphasis bold} ]. - - (self session senderContext == aContext) - ifTrue: [ ^ {TextEmphasis bold} ]. - - ctxt := aContext findContextSuchThat: [ :aSenderContext | - (aSenderContext == self session receiverContext) or: [ aSenderContext == self session senderContext ] ]. - ctxt == self session receiverContext ifTrue: [ ^ {TextColor black} ]. - ctxt == self session senderContext ifTrue: [ ^ {TextColor gray} ]. - - ^ {TextColor black} -] - -{ #category : #updating } -ACGlamourDebugger >> updateReceiverCodeSelection [ - - ((self browser paneNamed: #receiver) - port: #selectionInterval) - value: (self session selectedCodeRangeForContext: self currentContext) -] - -{ #category : #updating } -ACGlamourDebugger >> updateSelectionInterval [ - self updateReceiverCodeSelection - -] - -{ #category : #updating } -ACGlamourDebugger >> updateSenderCodeSelection [ - - ((self browser paneNamed: #sender) - port: #selectionInterval) - value: (self session selectedCodeRangeForContext: self session senderContext) -] diff --git a/src-archive/ACD-Glamour-Interface/GTClearEditorDebugAction.extension.st b/src-archive/ACD-Glamour-Interface/GTClearEditorDebugAction.extension.st deleted file mode 100644 index 50f0c2c24..000000000 --- a/src-archive/ACD-Glamour-Interface/GTClearEditorDebugAction.extension.st +++ /dev/null @@ -1,8 +0,0 @@ -Extension { #name : #GTClearEditorDebugAction } - -{ #category : #'*ACD-Glamour-Interface' } -GTClearEditorDebugAction class >> gtACDSenderActionFor: aDebugger [ - - - ^ self gtActionFor: aDebugger -] diff --git a/src-archive/ACD-Glamour-Interface/GTDebugSelectionDebugAction.extension.st b/src-archive/ACD-Glamour-Interface/GTDebugSelectionDebugAction.extension.st deleted file mode 100644 index 8108bcb07..000000000 --- a/src-archive/ACD-Glamour-Interface/GTDebugSelectionDebugAction.extension.st +++ /dev/null @@ -1,9 +0,0 @@ -Extension { #name : #GTDebugSelectionDebugAction } - -{ #category : #'*ACD-Glamour-Interface' } -GTDebugSelectionDebugAction class >> gtACDSenderActionFor: aDebugger [ - - - ^ (self gtActionFor: aDebugger) - codePresentationSelector: #senderCodePresentation -] diff --git a/src-archive/ACD-Glamour-Interface/GTExecuteSelectionDebugAction.extension.st b/src-archive/ACD-Glamour-Interface/GTExecuteSelectionDebugAction.extension.st deleted file mode 100644 index 39fd17653..000000000 --- a/src-archive/ACD-Glamour-Interface/GTExecuteSelectionDebugAction.extension.st +++ /dev/null @@ -1,9 +0,0 @@ -Extension { #name : #GTExecuteSelectionDebugAction } - -{ #category : #'*ACD-Glamour-Interface' } -GTExecuteSelectionDebugAction class >> gtACDSenderActionFor: aDebugger [ - - - ^ (self gtActionFor: aDebugger) - codePresentationSelector: #senderCodePresentation -] diff --git a/src-archive/ACD-Glamour-Interface/GTInspectSelectionDebugAction.extension.st b/src-archive/ACD-Glamour-Interface/GTInspectSelectionDebugAction.extension.st deleted file mode 100644 index 34ed6264a..000000000 --- a/src-archive/ACD-Glamour-Interface/GTInspectSelectionDebugAction.extension.st +++ /dev/null @@ -1,9 +0,0 @@ -Extension { #name : #GTInspectSelectionDebugAction } - -{ #category : #'*ACD-Glamour-Interface' } -GTInspectSelectionDebugAction class >> gtACDSenderActionFor: aDebugger [ - - - ^ (self gtActionFor: aDebugger) - codePresentationSelector: #senderCodePresentation -] diff --git a/src-archive/ACD-Glamour-Interface/GTPrintSelectionDebugAction.extension.st b/src-archive/ACD-Glamour-Interface/GTPrintSelectionDebugAction.extension.st deleted file mode 100644 index e0471cab1..000000000 --- a/src-archive/ACD-Glamour-Interface/GTPrintSelectionDebugAction.extension.st +++ /dev/null @@ -1,9 +0,0 @@ -Extension { #name : #GTPrintSelectionDebugAction } - -{ #category : #'*ACD-Glamour-Interface' } -GTPrintSelectionDebugAction class >> gtACDSenderActionFor: aDebugger [ - - - ^ (self gtActionFor: aDebugger) - codePresentationSelector: #senderCodePresentation -] diff --git a/src-archive/ACD-Glamour-Interface/GTProfileSelectionDebugAction.extension.st b/src-archive/ACD-Glamour-Interface/GTProfileSelectionDebugAction.extension.st deleted file mode 100644 index d9834d2e8..000000000 --- a/src-archive/ACD-Glamour-Interface/GTProfileSelectionDebugAction.extension.st +++ /dev/null @@ -1,9 +0,0 @@ -Extension { #name : #GTProfileSelectionDebugAction } - -{ #category : #'*ACD-Glamour-Interface' } -GTProfileSelectionDebugAction class >> gtACDSenderActionFor: aDebugger [ - - - ^ (self gtActionFor: aDebugger) - codePresentationSelector: #senderCodePresentation -] diff --git a/src-archive/ACD-Glamour-Interface/package.st b/src-archive/ACD-Glamour-Interface/package.st deleted file mode 100644 index 251a149e1..000000000 --- a/src-archive/ACD-Glamour-Interface/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'ACD-Glamour-Interface' } diff --git a/src-archive/ACD-Model/ACDAnnouncerModel.class.st b/src-archive/ACD-Model/ACDAnnouncerModel.class.st deleted file mode 100644 index e20a9b38c..000000000 --- a/src-archive/ACD-Model/ACDAnnouncerModel.class.st +++ /dev/null @@ -1,120 +0,0 @@ -" -ACDAnnouncerModel models an executing announcer and its subscriptions. - -Instance Variables: - context - announcement - currentSubscription - pendingSubscriptions - deliveredSubscriptions - idleSubscriptions -" -Class { - #name : #ACDAnnouncerModel, - #superclass : #Object, - #instVars : [ - 'announcerContext', - 'announcement', - 'executingSubscriptionIndex', - 'activeSubscriptions' - ], - #category : #'ACD-Model' -} - -{ #category : #'instance creation' } -ACDAnnouncerModel class >> forAnnouncerContext: announcerContext receiverContext: receiverContext [ - - ^ self new forAnnouncerContext: announcerContext receiverContext: receiverContext -] - -{ #category : #accessing } -ACDAnnouncerModel >> activeSubscriptions [ - - ^ OrderedCollection new - addAll: activeSubscriptions; - yourself - -] - -{ #category : #accessing } -ACDAnnouncerModel >> announcement [ - - ^ announcement -] - -{ #category : #accessing } -ACDAnnouncerModel >> announcer [ - - ^ self context receiver -] - -{ #category : #accessing } -ACDAnnouncerModel >> context [ - - ^ announcerContext -] - -{ #category : #accessing } -ACDAnnouncerModel >> executingSubscription [ - - ^ activeSubscriptions at: executingSubscriptionIndex -] - -{ #category : #initialization } -ACDAnnouncerModel >> forAnnouncerContext: anAnnouncerContext receiverContext: aReceiverContext [ - |stackFilter| - - self reset. - - announcerContext := anAnnouncerContext. - - stackFilter := self stackFilterFor: aReceiverContext. - (stackFilter locateAnnouncementDelivery) isNil ifTrue: [ ^ self ]. "aContext was not created as direct result of an announcemnt." - - announcement := stackFilter extractAnnouncement. - executingSubscriptionIndex := stackFilter extractExecutingSubscriptionIndex. - activeSubscriptions := Array withAll: stackFilter extractActiveSubscriptions. - - - - - - -] - -{ #category : #testing } -ACDAnnouncerModel >> hasMoreActiveSubscriptions [ - - ^ executingSubscriptionIndex < activeSubscriptions size -] - -{ #category : #testing } -ACDAnnouncerModel >> hasSubscriptionExecuted: aSubscription [ - - ^ (self activeSubscriptions indexOf: aSubscription ifAbsent: [ 0 ]) < executingSubscriptionIndex -] - -{ #category : #initialization } -ACDAnnouncerModel >> reset [ - - announcerContext := nil. - announcement := nil. - self resetSubscriptions. - - - - -] - -{ #category : #initialization } -ACDAnnouncerModel >> resetSubscriptions [ - - executingSubscriptionIndex := 0. - activeSubscriptions := Array new. -] - -{ #category : #private } -ACDAnnouncerModel >> stackFilterFor: aContext [ - - ^ ACDContextLocator forContext: aContext -] diff --git a/src-archive/ACD-Model/ACDContextLocator.class.st b/src-archive/ACD-Model/ACDContextLocator.class.st deleted file mode 100644 index 575117f15..000000000 --- a/src-archive/ACD-Model/ACDContextLocator.class.st +++ /dev/null @@ -1,121 +0,0 @@ -Class { - #name : #ACDContextLocator, - #superclass : #Object, - #instVars : [ - 'context' - ], - #category : #'ACD-Model' -} - -{ #category : #'as yet unclassified' } -ACDContextLocator class >> forContext: aContext [ - - ^ self new forContext: aContext -] - -{ #category : #'accessing actions' } -ACDContextLocator >> extractActiveSubscriptions [ - - ^ context ifNotNilDo: [:aContext| aContext tempNamed: 'subs'] -] - -{ #category : #'accessing actions' } -ACDContextLocator >> extractAnnouncement [ - - ^ context ifNotNilDo: [:aContext| aContext tempNamed: 'anAnnouncement'] -] - -{ #category : #'accessing actions' } -ACDContextLocator >> extractExecutingSubscription [ - - ^ context ifNotNilDo: [:aContext| - (aContext tempNamed: 'subs') at: (aContext tempNamed: 'index') ] -] - -{ #category : #'accessing actions' } -ACDContextLocator >> extractExecutingSubscriptionIndex [ - - ^ context ifNotNilDo: [:aContext| aContext tempNamed: 'index' ] -] - -{ #category : #private } -ACDContextLocator >> filterFailed [ - - context := nil -] - -{ #category : #private } -ACDContextLocator >> findContextSuchThat: testBlock [ - - ^ context - ifNil: [ nil ] - ifNotNil: [ context := context findContextSuchThat: testBlock ] - -] - -{ #category : #initialization } -ACDContextLocator >> forContext: aContext [ - - context := aContext -] - -{ #category : #actions } -ACDContextLocator >> locateAnnouncementDelivery [ - "Locate the context responsible with initiating the delivery of a subscription. - From this context the active subscriptions and the current executing subscription, - should be extracted." - - ^ self - skipUntilSubscriptionDeliveryContext; - result -] - -{ #category : #actions } -ACDContextLocator >> locateAnnouncerEntryPoint [ - "Locate the initial context that triggered the delivery of - a subscription. The initial context is the first that send - the message announce:" - - ^ self - skipAllInternalAnnouncerContexts; - skipAnnounceContexts; - result -] - -{ #category : #accessing } -ACDContextLocator >> result [ - - ^ context -] - -{ #category : #private } -ACDContextLocator >> sender [ - - ^ context isNil ifFalse: [ context := context sender ] -] - -{ #category : #'filtering actions' } -ACDContextLocator >> skipAllInternalAnnouncerContexts [ - "Filter all contexts until the one that triggered the announcer is found." - - self findContextSuchThat: [ :ctxt | - (ctxt methodSelector = #announce:) and: [ - ctxt methodClass = Announcer ] ] -] - -{ #category : #'filtering actions' } -ACDContextLocator >> skipAnnounceContexts [ - - self findContextSuchThat: [ :ctxt | - (ctxt methodSelector = #announce:) and: [ - ctxt sender methodSelector ~= #announce: ] ] -] - -{ #category : #'filtering actions' } -ACDContextLocator >> skipUntilSubscriptionDeliveryContext [ - - self findContextSuchThat: [ :aContext | - aContext receiver class = SubscriptionRegistry and: [ - aContext selector = #deliver:to:startingAt: and: [ - aContext closure isNil ] ] ] -] diff --git a/src-archive/ACD-Model/ACDDebugSession.class.st b/src-archive/ACD-Model/ACDDebugSession.class.st deleted file mode 100644 index 9c089c193..000000000 --- a/src-archive/ACD-Model/ACDDebugSession.class.st +++ /dev/null @@ -1,174 +0,0 @@ -Class { - #name : #ACDDebugSession, - #superclass : #DebugSession, - #instVars : [ - 'senderContext', - 'announcerModel', - 'receiverContext' - ], - #category : #'ACD-Model' -} - -{ #category : #accessing } -ACDDebugSession class >> stackFilterFor: aContext [ - - ^ ACDContextLocator forContext: aContext -] - -{ #category : #accessing } -ACDDebugSession >> activeSubscriptions [ - - ^ announcerModel activeSubscriptions -] - -{ #category : #accessing } -ACDDebugSession >> announcement [ - - ^ announcerModel announcement -] - -{ #category : #accessing } -ACDDebugSession >> announcementLoopContext [ - - ^ (self stackFilterFor: receiverContext) locateAnnouncementDelivery -] - -{ #category : #accessing } -ACDDebugSession >> announcer [ - - ^ announcerModel announcer -] - -{ #category : #accessing } -ACDDebugSession >> announcerContext [ - - ^ announcerModel context -] - -{ #category : #'predicates creation' } -ACDDebugSession >> createStepPredicateForPredicate: aPredicate [ - - ^ self createStepPredicateForPredicate: aPredicate fromContext: self announcerContext -] - -{ #category : #accessing } -ACDDebugSession >> executingSubscription [ - - ^ announcerModel executingSubscription -] - -{ #category : #testing } -ACDDebugSession >> hasMoreActiveSubscriptions [ - - ^ announcerModel hasMoreActiveSubscriptions -] - -{ #category : #testing } -ACDDebugSession >> hasSubscriptionExecuted: aSubscription [ - - ^ announcerModel hasSubscriptionExecuted: aSubscription -] - -{ #category : #initialization } -ACDDebugSession >> initializeSenderContext: aSenderContext announcerContext: anAnnouncerContext receiverContext: aReceiverContext [ - - senderContext := aSenderContext. - announcerModel := ACDAnnouncerModel forAnnouncerContext: anAnnouncerContext receiverContext: aReceiverContext. - receiverContext := aReceiverContext -] - -{ #category : #initialization } -ACDDebugSession >> process: aProcess context: aContext [ - | announcerContext | - super process: aProcess context: aContext. - - announcerContext := (ACDContextLocator forContext: aContext sender) locateAnnouncerEntryPoint. - self - initializeSenderContext: announcerContext sender - announcerContext: announcerContext - receiverContext: aContext - - -] - -{ #category : #accessing } -ACDDebugSession >> receiver [ - - ^ receiverContext receiver -] - -{ #category : #accessing } -ACDDebugSession >> receiverContext [ - - ^ receiverContext -] - -{ #category : #accessing } -ACDDebugSession >> sender [ - - ^ senderContext receiver -] - -{ #category : #accessing } -ACDDebugSession >> senderContext [ - - ^ senderContext -] - -{ #category : #private } -ACDDebugSession >> stackFilterFor: aContext [ - - ^ self class stackFilterFor: aContext -] - -{ #category : #'debugging actions' } -ACDDebugSession >> stepUntil: aPredicate [ - - ^ self stepUntil: aPredicate from: self interruptedContext. -] - -{ #category : #'debugging actions' } -ACDDebugSession >> stepUntil: aPredicate from: aContext [ - - self process stepUntil: (self createStepPredicateForPredicate: aPredicate) from: aContext. - self - updateWithContext: (self stepToFirstInterestingBytecodeIn: self process) - fromProcess: self process. -] - -{ #category : #predicates } -ACDDebugSession >> subscriptionDelivery [ - | aSubscription | - aSubscription := self interruptedContext receiver. - ^ self createPredicateForBlock: [ :aContext | - aContext receiver == aSubscription subscriber and: [ - aContext method selector = aSubscription action selector] ]. -] - -{ #category : #predicates } -ACDDebugSession >> subscriptionDeliveryFor: aSubscription. [ - - ^ self createPredicateForBlock: [ :aContext | - aContext receiver == aSubscription subscriber and: [ - aContext method selector = aSubscription action selector] ]. -] - -{ #category : #updating } -ACDDebugSession >> updateFromReceiverContext: aContext [ - |announcerContext| - - announcerContext := (self stackFilterFor: aContext sender) locateAnnouncerEntryPoint. - self initializeSenderContext: announcerContext sender announcerContext: announcerContext receiverContext: aContext -] - -{ #category : #updating } -ACDDebugSession >> updateReceiver [ - - ^ self updateFromReceiverContext: self interruptedContext -] - -{ #category : #updating } -ACDDebugSession >> updateSenderFrom: aContext [ - - senderContext := aContext -] diff --git a/src-archive/ACD-Model/ACDSenderCalleeAction.class.st b/src-archive/ACD-Model/ACDSenderCalleeAction.class.st deleted file mode 100644 index ce604475b..000000000 --- a/src-archive/ACD-Model/ACDSenderCalleeAction.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #ACDSenderCalleeAction, - #superclass : #DebugAction, - #category : #'ACD-Model' -} - -{ #category : #registration } -ACDSenderCalleeAction class >> gtACDSenderActionFor: aDebugger [ - -] - -{ #category : #accessing } -ACDSenderCalleeAction >> defaultIcon [ - - ^ GLMUIThemeExtraIcons glamorousRight -] - -{ #category : #accessing } -ACDSenderCalleeAction >> defaultLabel [ - - ^ 'Next Context' -] - -{ #category : #actions } -ACDSenderCalleeAction >> executeAction [ - - self session updateSenderFrom: (self session process calleeOf: self session senderContext) -] diff --git a/src-archive/ACD-Model/ACDSenderCallerAction.class.st b/src-archive/ACD-Model/ACDSenderCallerAction.class.st deleted file mode 100644 index 960605f7e..000000000 --- a/src-archive/ACD-Model/ACDSenderCallerAction.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #ACDSenderCallerAction, - #superclass : #DebugAction, - #category : #'ACD-Model' -} - -{ #category : #registration } -ACDSenderCallerAction class >> gtACDSenderActionFor: aDebugger [ - -] - -{ #category : #accessing } -ACDSenderCallerAction >> defaultIcon [ - - ^ GLMUIThemeExtraIcons glamorousLeft -] - -{ #category : #accessing } -ACDSenderCallerAction >> defaultLabel [ - - ^ 'Previous Context' -] - -{ #category : #actions } -ACDSenderCallerAction >> executeAction [ - - self session updateSenderFrom: self session senderContext sender -] diff --git a/src-archive/ACD-Model/ACDSenderWhereIsDebugAction.class.st b/src-archive/ACD-Model/ACDSenderWhereIsDebugAction.class.st deleted file mode 100644 index ecb6102ce..000000000 --- a/src-archive/ACD-Model/ACDSenderWhereIsDebugAction.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #ACDSenderWhereIsDebugAction, - #superclass : #WhereIsDebugAction, - #category : #'ACD-Model' -} - -{ #category : #registration } -ACDSenderWhereIsDebugAction class >> gtActionFor: aDebugger [ - - - ^ (self forDebugger: aDebugger) - icon: GLMUIThemeExtraIcons glamorousSearch -] - -{ #category : #actions } -ACDSenderWhereIsDebugAction >> executeAction [ - - self debugger updateSenderCodeSelection -] - -{ #category : #accessing } -ACDSenderWhereIsDebugAction >> id [ - - ^ #acdSenderWhereIs -] diff --git a/src-archive/ACD-Model/ACDStepToNextSubscriptionDebugAction.class.st b/src-archive/ACD-Model/ACDStepToNextSubscriptionDebugAction.class.st deleted file mode 100644 index 4baa60e05..000000000 --- a/src-archive/ACD-Model/ACDStepToNextSubscriptionDebugAction.class.st +++ /dev/null @@ -1,60 +0,0 @@ -Class { - #name : #ACDStepToNextSubscriptionDebugAction, - #superclass : #DebugAction, - #category : #'ACD-Model' -} - -{ #category : #registration } -ACDStepToNextSubscriptionDebugAction class >> acdActionType [ - -] - -{ #category : #testing } -ACDStepToNextSubscriptionDebugAction >> appliesToContext: aContext [ - - ^ self session hasMoreActiveSubscriptions -] - -{ #category : #testing } -ACDStepToNextSubscriptionDebugAction >> appliesToDebugger: aDebugger [ - - ^ aDebugger session hasMoreActiveSubscriptions -] - -{ #category : #actions } -ACDStepToNextSubscriptionDebugAction >> executeAction [ - "Step over the delivery of the current announcement." - | receiverSender | - receiverSender := self session receiverContext sender. - - self session stepOver: receiverSender. - (self interruptedContext == receiverSender) - ifFalse: [ self session contextChanged. ^ self ]. - - self session stepOver: (self session stackFilterFor: receiverSender) locateAnnouncementDelivery. - self session stepUntil: self nextDeliveryStart. - - (self nextDeliveryStart matches: self interruptedContext) ifTrue: [ - self session stepUntil: (self session subscriptionDelivery). - self session updateReceiver ] - - - - -] - -{ #category : #initialization } -ACDStepToNextSubscriptionDebugAction >> initialize [ - - self label: 'Next subscription'. - self icon: GLMUIThemeExtraIcons glamorousOver. -] - -{ #category : #predicates } -ACDStepToNextSubscriptionDebugAction >> nextDeliveryStart [ - - ^ self session createPredicateForBlock: [ :aContext | - aContext receiver isSubscription and: [ - aContext selector = #deliver: and: [ - aContext closure notNil ] ] ] -] diff --git a/src-archive/ACD-Model/ACDStepToSubscriptionDebugAction.class.st b/src-archive/ACD-Model/ACDStepToSubscriptionDebugAction.class.st deleted file mode 100644 index 75e074cf0..000000000 --- a/src-archive/ACD-Model/ACDStepToSubscriptionDebugAction.class.st +++ /dev/null @@ -1,65 +0,0 @@ -Class { - #name : #ACDStepToSubscriptionDebugAction, - #superclass : #DebugAction, - #instVars : [ - 'targetSubscription' - ], - #category : #'ACD-Model' -} - -{ #category : #'as yet unclassified' } -ACDStepToSubscriptionDebugAction class >> acdActionTypeForDebugger: aDebugger [ - - - ^ (self forDebugger: aDebugger) - targetSubscription: aDebugger selectedSubscription - -] - -{ #category : #testing } -ACDStepToSubscriptionDebugAction >> appliesToContext: aContext [ - - ^ (self session hasSubscriptionExecuted: targetSubscription) not -] - -{ #category : #accessing } -ACDStepToSubscriptionDebugAction >> defaultLabel [ - - ^ 'Step to subscription' -] - -{ #category : #actions } -ACDStepToSubscriptionDebugAction >> executeAction [ - | receiverSender | - - receiverSender := self session receiverContext sender. - [ self interruptedContext receiver == targetSubscription ] - whileFalse: [ - self session stepOver: receiverSender. - (self interruptedContext == receiverSender) - ifFalse: [ self session contextChanged. ^ self ]. - - self session stepOver: (self session stackFilterFor: receiverSender) locateAnnouncementDelivery. - self session stepUntil: self nextDeliveryStart. - receiverSender := self interruptedContext ]. - - (self nextDeliveryStart matches: self interruptedContext) - ifTrue: [ - self session stepUntil: (self session subscriptionDelivery). - self session updateReceiver ] -] - -{ #category : #predicates } -ACDStepToSubscriptionDebugAction >> nextDeliveryStart [ - - ^ self session createPredicateForBlock: [ :aContext | - aContext receiver isSubscription and: [ - aContext selector = #deliver: and: [ - aContext closure notNil ] ] ] -] - -{ #category : #accessing } -ACDStepToSubscriptionDebugAction >> targetSubscription: aSubscription [ - - targetSubscription := aSubscription -] diff --git a/src-archive/ACD-Model/Announcement.extension.st b/src-archive/ACD-Model/Announcement.extension.st deleted file mode 100644 index ca1b4e6fe..000000000 --- a/src-archive/ACD-Model/Announcement.extension.st +++ /dev/null @@ -1,13 +0,0 @@ -Extension { #name : #Announcement } - -{ #category : #'*ACD-Model' } -Announcement >> announcementType [ - - ^ self class announcementType -] - -{ #category : #'*ACD-Model' } -Announcement class >> announcementType [ - - ^ self -] diff --git a/src-archive/ACD-Model/AnnouncementSubscription.extension.st b/src-archive/ACD-Model/AnnouncementSubscription.extension.st deleted file mode 100644 index 3c1037575..000000000 --- a/src-archive/ACD-Model/AnnouncementSubscription.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #AnnouncementSubscription } - -{ #category : #'*ACD-Model' } -AnnouncementSubscription >> isSubscription [ - - ^ true -] diff --git a/src-archive/ACD-Model/Object.extension.st b/src-archive/ACD-Model/Object.extension.st deleted file mode 100644 index 903e293db..000000000 --- a/src-archive/ACD-Model/Object.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #Object } - -{ #category : #'*ACD-Model' } -Object >> isSubscription [ - - ^ false -] diff --git a/src-archive/ACD-Model/SubscriptionRegistry.extension.st b/src-archive/ACD-Model/SubscriptionRegistry.extension.st deleted file mode 100644 index 78f735bd1..000000000 --- a/src-archive/ACD-Model/SubscriptionRegistry.extension.st +++ /dev/null @@ -1,10 +0,0 @@ -Extension { #name : #SubscriptionRegistry } - -{ #category : #'*ACD-Model' } -SubscriptionRegistry >> acdSubscriptions [ - |subsCopy| - - self protected: [ subsCopy := subscriptions as: OrderedCollection ]. - - ^ subsCopy -] diff --git a/src-archive/ACD-Model/WeakAnnouncementSubscription.extension.st b/src-archive/ACD-Model/WeakAnnouncementSubscription.extension.st deleted file mode 100644 index 393cd67b2..000000000 --- a/src-archive/ACD-Model/WeakAnnouncementSubscription.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #WeakAnnouncementSubscription } - -{ #category : #'*ACD-Model' } -WeakAnnouncementSubscription >> isSubscription [ - - ^ true -] diff --git a/src-archive/ACD-Model/package.st b/src-archive/ACD-Model/package.st deleted file mode 100644 index 558fd4bf0..000000000 --- a/src-archive/ACD-Model/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'ACD-Model' } diff --git a/src-archive/Arki-Reporter-Browser/MooseModel.extension.st b/src-archive/Arki-Reporter-Browser/MooseModel.extension.st deleted file mode 100644 index a4e563654..000000000 --- a/src-archive/Arki-Reporter-Browser/MooseModel.extension.st +++ /dev/null @@ -1,28 +0,0 @@ -Extension { #name : #MooseModel } - -{ #category : #'*Arki-Reporter-Browser' } -MooseModel >> gtInspectorReportConcernsIn: composite [ - - composite tree - title: 'Report'; - titleIcon: MooseIcons mooseSourceText; - display: [ :concern | self report spec root children ]; - children: #children; - format: [ :concern | concern status label ]; - selectionAct: [ :list | list selection class browse ] entitled: 'Browse implementation'; - selectionAct: [ :list | - list selection update. - list update ] entitled: 'Update'; - selectionAct: [ :list | list selection result inspect ] entitled: 'Inspect result'; - when: [ self report notNil ] -] - -{ #category : #'*Arki-Reporter-Browser' } -MooseModel >> report [ - ^ self privateState attributeAt: #report ifAbsent: [ nil ] -] - -{ #category : #'*Arki-Reporter-Browser' } -MooseModel >> report: aReport [ - ^ self privateState attributeAt: #report put: aReport -] diff --git a/src-archive/Arki-Reporter-Browser/REPCompositeConcern.extension.st b/src-archive/Arki-Reporter-Browser/REPCompositeConcern.extension.st deleted file mode 100644 index fb201185b..000000000 --- a/src-archive/Arki-Reporter-Browser/REPCompositeConcern.extension.st +++ /dev/null @@ -1,17 +0,0 @@ -Extension { #name : #REPCompositeConcern } - -{ #category : #'*Arki-Reporter-Browser' } -REPCompositeConcern >> gtInspectorConcernListIn: a [ - - ^ a table - title: 'Index'; - display: [ self children ]; - children: #children; - column: 'Label' evaluated: [ :concern | concern status label ]; - column: 'Stakeholder' evaluated: [''] tags: [:concern | concern stakeholder asStrings ]; - selectionAct: [ :list | list selection class browse ] entitled: 'Browse implementation'; - selectionAct: [ :list | - list selection update. - list update ] entitled: 'Update'; - selectionAct: [ :list | list selection result inspect ] entitled: 'Inspect result' -] diff --git a/src-archive/Arki-Reporter-Browser/REPComputedConcern.extension.st b/src-archive/Arki-Reporter-Browser/REPComputedConcern.extension.st deleted file mode 100644 index 8ca2bd65c..000000000 --- a/src-archive/Arki-Reporter-Browser/REPComputedConcern.extension.st +++ /dev/null @@ -1,10 +0,0 @@ -Extension { #name : #REPComputedConcern } - -{ #category : #'*Arki-Reporter-Browser' } -REPComputedConcern >> gtActionSpawnResult [ - - ^ GLMGenericAction new - action: [ :composite | composite selection: self result ]; - icon: GLMUIThemeExtraIcons glamorousPlay; - title: 'Result' -] diff --git a/src-archive/Arki-Reporter-Browser/REPConcern.extension.st b/src-archive/Arki-Reporter-Browser/REPConcern.extension.st deleted file mode 100644 index c45d6136d..000000000 --- a/src-archive/Arki-Reporter-Browser/REPConcern.extension.st +++ /dev/null @@ -1,34 +0,0 @@ -Extension { #name : #REPConcern } - -{ #category : #'*Arki-Reporter-Browser' } -REPConcern >> browser [ - | browser | - browser := GLMTabulator new. - browser title: #label. - browser column: #explanation. - browser transmit to: #explanation; andShow: [:a | - a text - display: #explanation ]. - ^ browser -] - -{ #category : #'*Arki-Reporter-Browser' } -REPConcern >> gtInspectorExplanationIn: composite [ - - composite text - title: 'Explanation'; - display: [ self explanation ] -] - -{ #category : #'*Arki-Reporter-Browser' } -REPConcern >> open [ - | spec | - spec := REPConcernSpecification on: self model. - spec concern: self. - spec open -] - -{ #category : #'*arki-reporter-browser' } -REPConcern class >> openOn: aModel [ - ^ (self on: aModel) open -] diff --git a/src-archive/Arki-Reporter-Browser/REPConcernBrowser.class.st b/src-archive/Arki-Reporter-Browser/REPConcernBrowser.class.st deleted file mode 100644 index 3027ed043..000000000 --- a/src-archive/Arki-Reporter-Browser/REPConcernBrowser.class.st +++ /dev/null @@ -1,62 +0,0 @@ -Class { - #name : #REPConcernBrowser, - #superclass : #GLMBrowserTemplate, - #instVars : [ - 'root' - ], - #category : #'Arki-Reporter-Browser' -} - -{ #category : #'as yet unclassified' } -REPConcernBrowser class >> openOn: aConcern [ - ^ self new openOn: aConcern -] - -{ #category : #building } -REPConcernBrowser >> buildBrowser [ - browser := GLMTabulator new. - browser title: [ :concern | concern label ]. - browser - column: [ :c | c row: #list span: 4; row: #explanation ]; - column: #results span: 4. - browser transmit - to: #list; - andShow: [ :a | self concernListIn: a ]. - browser transmit - to: #results; - from: #list; - andShow: [ :a | self concernResultsIn: a]. - browser transmit - to: #explanation; - from: #list; - andShow: [ :a | a text display: #explanation ]. - ^ browser -] - -{ #category : #private } -REPConcernBrowser >> concernListIn: a [ - ^ a tree - title: 'Index'; - display: [ :concern | concern children ]; - children: #children; - format: [ :concern | concern status label ]; - selectionAct: [ :list | list selection class browse ] entitled: 'Browse implementation'; - selectionAct: [ :list | - list selection update. - list update ] entitled: 'Update'; - selectionAct: [ :list | list selection result inspect ] entitled: 'Inspect result' -] - -{ #category : #private } -REPConcernBrowser >> concernResultsIn: a [ - ^ a dynamic - title: #label; - display: [ :each | [ each browser noTitle ] - on: Error - do: [ :err | GLMRubricTextPresentation new display: 'There was an error computing this concern' ]]; - updateOn: REPConcernResultAnnouncement from: [ :concern | concern announcer ] - "a magritte - title: 'Editor'; - updateOn: REPConcernResultAnnouncement from: [:concern | concern announcer ]; - description: #description" -] diff --git a/src-archive/Arki-Reporter-Browser/REPConcernSpecification.extension.st b/src-archive/Arki-Reporter-Browser/REPConcernSpecification.extension.st deleted file mode 100644 index ccf86dbf2..000000000 --- a/src-archive/Arki-Reporter-Browser/REPConcernSpecification.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #REPConcernSpecification } - -{ #category : #'*arki-reporter-browser' } -REPConcernSpecification >> open [ - ^ REPConcernBrowser openOn: self root -] diff --git a/src-archive/Arki-Reporter-Browser/REPMooseQueryConcern.extension.st b/src-archive/Arki-Reporter-Browser/REPMooseQueryConcern.extension.st deleted file mode 100644 index ee5b86a73..000000000 --- a/src-archive/Arki-Reporter-Browser/REPMooseQueryConcern.extension.st +++ /dev/null @@ -1,16 +0,0 @@ -Extension { #name : #REPMooseQueryConcern } - -{ #category : #'*arki-reporter-browser' } -REPMooseQueryConcern >> browser [ - ^ (MooseFinder new first noTitle startOn: self result) -] - -{ #category : #'*arki-reporter-browser' } -REPMooseQueryConcern >> gtInspectorResultIn: composite [ - - composite list - title: 'Result'; - display: [ self result ]; - format: [ :each | each gtDisplayString ]; - when: [ self result notNil ] -] diff --git a/src-archive/Arki-Reporter-Browser/REPReport.class.st b/src-archive/Arki-Reporter-Browser/REPReport.class.st deleted file mode 100644 index 6bdbfdb62..000000000 --- a/src-archive/Arki-Reporter-Browser/REPReport.class.st +++ /dev/null @@ -1,76 +0,0 @@ -Class { - #name : #REPReport, - #superclass : #Object, - #instVars : [ - 'model' - ], - #category : #'Arki-Reporter-Browser' -} - -{ #category : #opening } -REPReport class >> exportAsHudsonTestsOn: aModel [ - ^ self new - model: aModel; - exportAsHudsonTests -] - -{ #category : #initialization } -REPReport class >> on: aModel [ - ^ self new - model: aModel; - yourself -] - -{ #category : #opening } -REPReport class >> open [ - "This works only if the specific report provides a model" - ^ self new open -] - -{ #category : #opening } -REPReport class >> openOn: aModel [ - ^ self new - model: aModel; - open -] - -{ #category : #private } -REPReport >> build: spec [ - "override this method to build your spec" - ^ self subclassResponsibility -] - -{ #category : #opening } -REPReport >> exportAsHudsonTests [ - REPHudson runOn: self spec -] - -{ #category : #'as yet unclassified' } -REPReport >> gtInspectorConcernListIn: a [ - - ^ self spec root gtInspectorConcernListIn: a -] - -{ #category : #private } -REPReport >> model [ - "override this method to point to the model of the specification" - ^ model -] - -{ #category : #private } -REPReport >> model: aModel [ - model := aModel -] - -{ #category : #opening } -REPReport >> open [ - ^ self spec open -] - -{ #category : #accessing } -REPReport >> spec [ - | spec | - spec := REPConcernSpecification on: self model. - self build: spec. - ^ spec -] diff --git a/src-archive/Arki-Reporter-Browser/package.st b/src-archive/Arki-Reporter-Browser/package.st deleted file mode 100644 index e274bdccf..000000000 --- a/src-archive/Arki-Reporter-Browser/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Arki-Reporter-Browser' } diff --git a/src-archive/Arki-Reporter-Core/REPCompositeConcern.class.st b/src-archive/Arki-Reporter-Core/REPCompositeConcern.class.st deleted file mode 100644 index c99719392..000000000 --- a/src-archive/Arki-Reporter-Core/REPCompositeConcern.class.st +++ /dev/null @@ -1,79 +0,0 @@ -Class { - #name : #REPCompositeConcern, - #superclass : #REPConcern, - #instVars : [ - 'children', - 'label', - 'explanation' - ], - #category : #'Arki-Reporter-Core' -} - -{ #category : #accessing } -REPCompositeConcern >> addChild: aConcern [ - ^ self children add: aConcern -] - -{ #category : #accessing } -REPCompositeConcern >> children [ - ^ children -] - -{ #category : #accessing } -REPCompositeConcern >> children: anObject [ - children := anObject -] - -{ #category : #updating } -REPCompositeConcern >> doUpdate [ - ^ self children do: [:each | each update] -] - -{ #category : #accessing } -REPCompositeConcern >> explanation [ - ^ explanation -] - -{ #category : #accessing } -REPCompositeConcern >> explanation: anObject [ - explanation := anObject -] - -{ #category : #'initialize-release' } -REPCompositeConcern >> initialize [ - super initialize. - children := OrderedCollection new -] - -{ #category : #testing } -REPCompositeConcern >> isComposite [ - ^ true -] - -{ #category : #accessing } -REPCompositeConcern >> label [ - ^ label -] - -{ #category : #accessing } -REPCompositeConcern >> label: anObject [ - label := anObject -] - -{ #category : #accessing } -REPCompositeConcern >> leafChildrenDo: aBlock [ - self children do: [:each | - each isComposite - ifFalse: [aBlock value: each ] - ifTrue: [each leafChildrenDo: aBlock ]] -] - -{ #category : #accessing } -REPCompositeConcern >> status [ - | status | - self children isEmpty ifTrue: [^ REPConcernNeutralStatus new concern: self ]. - status := self children first status. - self children allButFirstDo: [:each | - status := status union: each status ]. - ^ status concern: self -] diff --git a/src-archive/Arki-Reporter-Core/REPComputedConcern.class.st b/src-archive/Arki-Reporter-Core/REPComputedConcern.class.st deleted file mode 100644 index 81c06b7a0..000000000 --- a/src-archive/Arki-Reporter-Core/REPComputedConcern.class.st +++ /dev/null @@ -1,44 +0,0 @@ -Class { - #name : #REPComputedConcern, - #superclass : #REPConcern, - #instVars : [ - 'result', - 'status', - 'computationTime' - ], - #category : #'Arki-Reporter-Core' -} - -{ #category : #accessing } -REPComputedConcern >> computeAndProfileResult [ - | computedResult | - computationTime := Time millisecondsToRun: [ - computedResult := self computeResult ]. - ^ computedResult -] - -{ #category : #accessing } -REPComputedConcern >> computeAndStoreResult [ - ^ result := [ self computeAndProfileResult ] - on: Error - do: [ :error | - status := REPConcernErrorStatus new - errorInstance: error; - concern: self. - nil ] -] - -{ #category : #accessing } -REPComputedConcern >> computeResult [ - ^ nil -] - -{ #category : #updating } -REPComputedConcern >> doUpdate [ - ^ self computeAndStoreResult -] - -{ #category : #accessing } -REPComputedConcern >> result [ - ^ result ifNil: [ self computeAndStoreResult ] -] diff --git a/src-archive/Arki-Reporter-Core/REPConcern.class.st b/src-archive/Arki-Reporter-Core/REPConcern.class.st deleted file mode 100644 index b1abb8352..000000000 --- a/src-archive/Arki-Reporter-Core/REPConcern.class.st +++ /dev/null @@ -1,103 +0,0 @@ -Class { - #name : #REPConcern, - #superclass : #Object, - #instVars : [ - 'model', - 'announcer' - ], - #category : #'Arki-Reporter-Core' -} - -{ #category : #'instance creation' } -REPConcern class >> on: aModel [ - ^ self new - model: aModel; - yourself -] - -{ #category : #accessing } -REPConcern >> allLeafConcerns [ - | leafs | - leafs := OrderedCollection new. - self withAllChildrenDo: [:each | - each isComposite ifFalse: [ - leafs add: each ]]. - ^ leafs -] - -{ #category : #announcements } -REPConcern >> announcer [ - ^ announcer ifNil: [ announcer := Announcer new ] -] - -{ #category : #accessing } -REPConcern >> children [ - ^ OrderedCollection new -] - -{ #category : #updating } -REPConcern >> doUpdate [ - self subclassResponsibility -] - -{ #category : #accessing } -REPConcern >> explanation [ - ^ self label -] - -{ #category : #testing } -REPConcern >> isComposite [ - ^ false -] - -{ #category : #accessing } -REPConcern >> label [ - ^ String space join: self class name piecesCutWhereCamelCase -] - -{ #category : #accessing } -REPConcern >> model [ - ^ model -] - -{ #category : #accessing } -REPConcern >> model: anObject [ - model := anObject -] - -{ #category : #accessing } -REPConcern >> result [ - ^ self subclassResponsibility -] - -{ #category : #accessing } -REPConcern >> stakeholder [ - ^ REPStakeholder everyone -] - -{ #category : #accessing } -REPConcern >> status [ - ^ REPConcernStatus new concern: self -] - -{ #category : #accessing } -REPConcern >> stringResult [ - | r | - r := self result. - r isCollection ifTrue: [ - ^ (String with: Character cr) join: (r collect: #gtDisplayString) ]. - ^ r gtDisplayString -] - -{ #category : #updating } -REPConcern >> update [ - self doUpdate. - self announcer announce: REPConcernResultAnnouncement new -] - -{ #category : #enumerating } -REPConcern >> withAllChildrenDo: aBlock [ - aBlock value: self. - self children do: [:each | - each withAllChildrenDo: aBlock ] -] diff --git a/src-archive/Arki-Reporter-Core/REPConcernErrorStatus.class.st b/src-archive/Arki-Reporter-Core/REPConcernErrorStatus.class.st deleted file mode 100644 index 9e25260e3..000000000 --- a/src-archive/Arki-Reporter-Core/REPConcernErrorStatus.class.st +++ /dev/null @@ -1,35 +0,0 @@ -Class { - #name : #REPConcernErrorStatus, - #superclass : #REPConcernStatus, - #instVars : [ - 'errorInstance' - ], - #category : #'Arki-Reporter-Core' -} - -{ #category : #accessing } -REPConcernErrorStatus >> color [ - ^ Color gray -] - -{ #category : #accessing } -REPConcernErrorStatus >> errorInstance [ - ^ errorInstance -] - -{ #category : #accessing } -REPConcernErrorStatus >> errorInstance: anObject [ - errorInstance := anObject -] - -{ #category : #testing } -REPConcernErrorStatus >> isErrorStatus [ - ^ true -] - -{ #category : #accessing } -REPConcernErrorStatus >> union: aStatus [ - ^ (aStatus isSuccessStatus or: [ aStatus isFailureStatus ]) - ifTrue: [ aStatus species new ] - ifFalse: [ REPConcernNeutralStatus new ] -] diff --git a/src-archive/Arki-Reporter-Core/REPConcernFailureStatus.class.st b/src-archive/Arki-Reporter-Core/REPConcernFailureStatus.class.st deleted file mode 100644 index 993bf0ecf..000000000 --- a/src-archive/Arki-Reporter-Core/REPConcernFailureStatus.class.st +++ /dev/null @@ -1,20 +0,0 @@ -Class { - #name : #REPConcernFailureStatus, - #superclass : #REPConcernStatus, - #category : #'Arki-Reporter-Core' -} - -{ #category : #accessing } -REPConcernFailureStatus >> color [ - ^ Color red darker -] - -{ #category : #testing } -REPConcernFailureStatus >> isFailureStatus [ - ^ true -] - -{ #category : #accessing } -REPConcernFailureStatus >> union: aStatus [ - ^ self species new -] diff --git a/src-archive/Arki-Reporter-Core/REPConcernNeutralStatus.class.st b/src-archive/Arki-Reporter-Core/REPConcernNeutralStatus.class.st deleted file mode 100644 index 646d83c76..000000000 --- a/src-archive/Arki-Reporter-Core/REPConcernNeutralStatus.class.st +++ /dev/null @@ -1,22 +0,0 @@ -Class { - #name : #REPConcernNeutralStatus, - #superclass : #REPConcernStatus, - #category : #'Arki-Reporter-Core' -} - -{ #category : #accessing } -REPConcernNeutralStatus >> color [ - ^ Color black -] - -{ #category : #testing } -REPConcernNeutralStatus >> isNeutralStatus [ - ^ true -] - -{ #category : #accessing } -REPConcernNeutralStatus >> union: aStatus [ - ^ aStatus isErrorStatus - ifTrue: [self species new] - ifFalse: [aStatus species new] -] diff --git a/src-archive/Arki-Reporter-Core/REPConcernResultAnnouncement.class.st b/src-archive/Arki-Reporter-Core/REPConcernResultAnnouncement.class.st deleted file mode 100644 index 81579b3a3..000000000 --- a/src-archive/Arki-Reporter-Core/REPConcernResultAnnouncement.class.st +++ /dev/null @@ -1,8 +0,0 @@ -Class { - #name : #REPConcernResultAnnouncement, - #superclass : #Announcement, - #instVars : [ - 'concern' - ], - #category : #'Arki-Reporter-Core' -} diff --git a/src-archive/Arki-Reporter-Core/REPConcernSpecification.class.st b/src-archive/Arki-Reporter-Core/REPConcernSpecification.class.st deleted file mode 100644 index 21230bdf5..000000000 --- a/src-archive/Arki-Reporter-Core/REPConcernSpecification.class.st +++ /dev/null @@ -1,95 +0,0 @@ -Class { - #name : #REPConcernSpecification, - #superclass : #Object, - #instVars : [ - 'root', - 'model' - ], - #category : #'Arki-Reporter-Core' -} - -{ #category : #'instance creation' } -REPConcernSpecification class >> on: aModel [ - ^ self new - model: aModel; - yourself -] - -{ #category : #'concern building' } -REPConcernSpecification >> composite: aString meaning: anExplanationString with: aBlock [ - | state | - state := self shallowCopy. - self root: (self concern: (( - REPCompositeConcern on: self model) - label: aString; - explanation: anExplanationString; - yourself)). - aBlock ensure: [ self copyFrom: state ] -] - -{ #category : #'concern building' } -REPConcernSpecification >> composite: aString with: aBlock [ - ^ self composite: aString meaning: aString with: aBlock -] - -{ #category : #'concern building' } -REPConcernSpecification >> concern: aConcern [ - ^ self root addChild: (aConcern model: self model; yourself) -] - -{ #category : #opening } -REPConcernSpecification >> exportToHudson [ - self root -] - -{ #category : #'initialize-release' } -REPConcernSpecification >> initialize [ - root := REPCompositeConcern new label: 'Concerns' -] - -{ #category : #accessing } -REPConcernSpecification >> label: aString [ - self root label: aString -] - -{ #category : #accessing } -REPConcernSpecification >> model [ - ^ model -] - -{ #category : #accessing } -REPConcernSpecification >> model: anObject [ - model := anObject. - self root withAllChildrenDo: [:each | each model: anObject ] -] - -{ #category : #'concern building' } -REPConcernSpecification >> query: aLabelString by: aStakeholderString meaning: aMeaningString as: aBlock [ - ^ self root addChild: - ((REPCustomQueryConcern on: self model) - computation: aBlock; - label: aLabelString; - stakeholderString: aStakeholderString; - explanation: aMeaningString; - yourself ) -] - -{ #category : #'concern building' } -REPConcernSpecification >> query: aLabelString meaning: aMeaningString as: aBlock [ - ^ self root addChild: - ((REPCustomQueryConcern on: self model) - computation: aBlock; - label: aLabelString; - explanation: aMeaningString; - yourself ) -] - -{ #category : #accessing } -REPConcernSpecification >> root [ - ^ root -] - -{ #category : #accessing } -REPConcernSpecification >> root: anObject [ - root := anObject -] diff --git a/src-archive/Arki-Reporter-Core/REPConcernStatus.class.st b/src-archive/Arki-Reporter-Core/REPConcernStatus.class.st deleted file mode 100644 index 4585f769c..000000000 --- a/src-archive/Arki-Reporter-Core/REPConcernStatus.class.st +++ /dev/null @@ -1,66 +0,0 @@ -Class { - #name : #REPConcernStatus, - #superclass : #Object, - #instVars : [ - 'value', - 'concern' - ], - #category : #'Arki-Reporter-Core' -} - -{ #category : #accessing } -REPConcernStatus >> color [ - ^ Color black -] - -{ #category : #accessing } -REPConcernStatus >> concern [ - ^ concern -] - -{ #category : #accessing } -REPConcernStatus >> concern: anObject [ - concern := anObject -] - -{ #category : #testing } -REPConcernStatus >> isErrorStatus [ - ^ false -] - -{ #category : #testing } -REPConcernStatus >> isFailureStatus [ - ^ false -] - -{ #category : #testing } -REPConcernStatus >> isNeutralStatus [ - ^ false -] - -{ #category : #testing } -REPConcernStatus >> isSuccessStatus [ - ^ false -] - -{ #category : #accessing } -REPConcernStatus >> label [ - ^ Text - string: self concern label - attribute: (TextColor new color: self color) -] - -{ #category : #accessing } -REPConcernStatus >> union: aStatus [ - ^ aStatus species new -] - -{ #category : #accessing } -REPConcernStatus >> value [ - ^ value -] - -{ #category : #accessing } -REPConcernStatus >> value: anObject [ - value := anObject -] diff --git a/src-archive/Arki-Reporter-Core/REPConcernSuccessStatus.class.st b/src-archive/Arki-Reporter-Core/REPConcernSuccessStatus.class.st deleted file mode 100644 index 51cce09c0..000000000 --- a/src-archive/Arki-Reporter-Core/REPConcernSuccessStatus.class.st +++ /dev/null @@ -1,22 +0,0 @@ -Class { - #name : #REPConcernSuccessStatus, - #superclass : #REPConcernStatus, - #category : #'Arki-Reporter-Core' -} - -{ #category : #accessing } -REPConcernSuccessStatus >> color [ - ^ Color green muchDarker -] - -{ #category : #testing } -REPConcernSuccessStatus >> isSuccessStatus [ - ^ true -] - -{ #category : #accessing } -REPConcernSuccessStatus >> union: aStatus [ - ^ aStatus isFailureStatus - ifTrue: [ aStatus species new ] - ifFalse: [ self species new ] -] diff --git a/src-archive/Arki-Reporter-Core/REPCustomQueryConcern.class.st b/src-archive/Arki-Reporter-Core/REPCustomQueryConcern.class.st deleted file mode 100644 index ce539b08d..000000000 --- a/src-archive/Arki-Reporter-Core/REPCustomQueryConcern.class.st +++ /dev/null @@ -1,61 +0,0 @@ -Class { - #name : #REPCustomQueryConcern, - #superclass : #REPMooseQueryConcern, - #instVars : [ - 'stakeholder', - 'computation', - 'label', - 'explanation' - ], - #category : #'Arki-Reporter-Core' -} - -{ #category : #accessing } -REPCustomQueryConcern >> computation [ - ^ computation -] - -{ #category : #accessing } -REPCustomQueryConcern >> computation: anObject [ - computation := anObject -] - -{ #category : #accessing } -REPCustomQueryConcern >> computeResult [ - ^ self computation glamourValue: self model asGlamorousMultiValue -] - -{ #category : #accessing } -REPCustomQueryConcern >> explanation [ - ^ explanation -] - -{ #category : #accessing } -REPCustomQueryConcern >> explanation: anObject [ - explanation := anObject -] - -{ #category : #accessing } -REPCustomQueryConcern >> label [ - ^ label -] - -{ #category : #accessing } -REPCustomQueryConcern >> label: anObject [ - label := anObject -] - -{ #category : #accessing } -REPCustomQueryConcern >> stakeholder [ - ^ stakeholder ifNil: [REPStakeholder everyone] -] - -{ #category : #accessing } -REPCustomQueryConcern >> stakeholder: anObject [ - stakeholder := anObject -] - -{ #category : #accessing } -REPCustomQueryConcern >> stakeholderString: aString [ - self stakeholder: (REPStakeholder named: aString) -] diff --git a/src-archive/Arki-Reporter-Core/REPGroupStakeholder.class.st b/src-archive/Arki-Reporter-Core/REPGroupStakeholder.class.st deleted file mode 100644 index 1114930f0..000000000 --- a/src-archive/Arki-Reporter-Core/REPGroupStakeholder.class.st +++ /dev/null @@ -1,45 +0,0 @@ -Class { - #name : #REPGroupStakeholder, - #superclass : #REPStakeholder, - #instVars : [ - 'stakeholders' - ], - #category : #'Arki-Reporter-Core' -} - -{ #category : #'instance creation' } -REPGroupStakeholder class >> with: aStakeholder with: anotherStakeholder [ - ^ self new - addAll: (OrderedCollection with: aStakeholder with: anotherStakeholder); - yourself -] - -{ #category : #accessing } -REPGroupStakeholder >> addAll: aCollection [ - self stakeholders addAll: aCollection -] - -{ #category : #accessing } -REPGroupStakeholder >> asString [ - ^ ', ' join: (stakeholders collect: [:each | each asString]) -] - -{ #category : #accessing } -REPGroupStakeholder >> asStrings [ - ^ stakeholders flatCollect: [:each | each asStrings] -] - -{ #category : #initialize } -REPGroupStakeholder >> initialize [ - stakeholders := OrderedCollection new -] - -{ #category : #accessing } -REPGroupStakeholder >> stakeholders [ - ^ stakeholders -] - -{ #category : #accessing } -REPGroupStakeholder >> stakeholders: anObject [ - stakeholders := anObject -] diff --git a/src-archive/Arki-Reporter-Core/REPHtml.class.st b/src-archive/Arki-Reporter-Core/REPHtml.class.st deleted file mode 100644 index 066f12053..000000000 --- a/src-archive/Arki-Reporter-Core/REPHtml.class.st +++ /dev/null @@ -1,61 +0,0 @@ -Class { - #name : #REPHtml, - #superclass : #REPReporter, - #category : #'Arki-Reporter-Core' -} - -{ #category : #private } -REPHtml >> end [ - stream - nextPutAll: ''; - nextPutAll: ''; - close -] - -{ #category : #private } -REPHtml >> printConcern: aConcern [ - stream - nextPutAll: '

'; - nextPutAll: (self encode: aConcern label); - nextPutAll: '

'; - lf; - nextPutAll: '
';
-		nextPutAll: (aConcern class methodNamed: #'computeResult') sourceCode;
-		nextPutAll: '
'; - lf. - aConcern status isNeutralStatus ifTrue: [ - stream - nextPutAll: '
    '; - nextPutAll: '
  • '; - nextPutAll: (('
  • ') join: (aConcern result asOrderedCollection collect: #gtDisplayString)); - nextPutAll: '
  • '; -" nextPutAll: (self encode: aConcern stringResult); - nextPutAll: ''; - lf - ]. - -] - -{ #category : #private } -REPHtml >> start [ - stream := StandardFileStream forceNewFileNamed: spec root label, '.html'. - stream ascii. - stream nextPutAll: ''; lf. - stream nextPutAll: ' - -'. - stream - nextPutAll: ''; - nextPutAll: '

    '; - nextPutAll: (self encode: spec root label); - nextPutAll: '

    '; - lf -] diff --git a/src-archive/Arki-Reporter-Core/REPHudson.class.st b/src-archive/Arki-Reporter-Core/REPHudson.class.st deleted file mode 100644 index 2e1f93213..000000000 --- a/src-archive/Arki-Reporter-Core/REPHudson.class.st +++ /dev/null @@ -1,5 +0,0 @@ -Class { - #name : #REPHudson, - #superclass : #REPReporter, - #category : #'Arki-Reporter-Core' -} diff --git a/src-archive/Arki-Reporter-Core/REPMooseQueryConcern.class.st b/src-archive/Arki-Reporter-Core/REPMooseQueryConcern.class.st deleted file mode 100644 index f940e88dc..000000000 --- a/src-archive/Arki-Reporter-Core/REPMooseQueryConcern.class.st +++ /dev/null @@ -1,35 +0,0 @@ -Class { - #name : #REPMooseQueryConcern, - #superclass : #REPComputedConcern, - #category : #'Arki-Reporter-Core' -} - -{ #category : #accessing } -REPMooseQueryConcern >> computeStatus [ - self result. - ^ status isNil - ifFalse: [ status ] - ifTrue: [ - self result isNil - ifTrue: [REPConcernNeutralStatus new concern: self] - ifFalse: [ - self result isEmpty - ifTrue: [REPConcernSuccessStatus new concern: self ] - ifFalse: [REPConcernFailureStatus new concern: self ] ] ] -] - -{ #category : #'as yet unclassified' } -REPMooseQueryConcern >> gtDisplayOn: stream [ - stream nextPutAll: self explanation. - self status isFailureStatus ifTrue: [ - stream - space; - nextPutAll: self result size asString; - nextPutAll: ' violations' ] -] - -{ #category : #accessing } -REPMooseQueryConcern >> status [ - ^ [ self computeStatus ] on: Error do: [:error | - REPConcernErrorStatus new concern: self; errorInstance: error ] -] diff --git a/src-archive/Arki-Reporter-Core/REPReporter.class.st b/src-archive/Arki-Reporter-Core/REPReporter.class.st deleted file mode 100644 index 82321871b..000000000 --- a/src-archive/Arki-Reporter-Core/REPReporter.class.st +++ /dev/null @@ -1,134 +0,0 @@ -Class { - #name : #REPReporter, - #superclass : #Object, - #instVars : [ - 'stream', - 'spec' - ], - #category : #'Arki-Reporter-Core' -} - -{ #category : #'instance creation' } -REPReporter class >> runOn: spec [ - ^ self new - spec: spec; - run; - yourself -] - -{ #category : #private } -REPReporter >> convert: aString [ - ^ (aString asString - copyReplaceAll: (String with: Character cr with: Character lf) with: (String with: Character lf)) - copyReplaceAll: (String with: Character cr) with: (String with: Character lf) -] - -{ #category : #private } -REPReporter >> encode: aString [ - | result | - result := aString asString. - result := result copyReplaceAll: '&' with: '&'. - result := result copyReplaceAll: '£' with: 'POUND'. - result := result copyReplaceAll: '"' with: '"'. - result := result copyReplaceAll: '<' with: '<'. - result := result copyReplaceAll: 'Ä' with: 'AE'. - result := result copyReplaceAll: 'Ï' with: 'I'. - result := result copyReplaceAll: 'Ü' with: 'UE'. - result := result copyReplaceAll: 'Ö' with: 'OE'. - result := result copyReplaceAll: 'ï' with: 'i'. - result := result copyReplaceAll: 'ö' with: 'oe'. - result := result copyReplaceAll: 'ä' with: 'ae'. - result := result copyReplaceAll: 'ü' with: 'ue'. - result := result copyReplaceAll: 'é' with: 'e'. - result := result copyReplaceAll: 'è' with: 'e'. - result := result copyReplaceAll: 'à' with: 'a'. - result := result copyReplaceAll: 'â' with: 'a'. - ^ result -] - -{ #category : #private } -REPReporter >> end [ - stream tab; nextPutAll: ''; lf. - stream tab; nextPutAll: ''; lf. - stream nextPutAll: ''. - stream close -] - -{ #category : #private } -REPReporter >> printConcern: aConcern [ - self printConcernStart: aConcern. - aConcern status isFailureStatus ifTrue: [ - stream - tab; tab; - nextPutAll: ''; - lf; - nextPutAll: (self encode: aConcern stringResult); - nextPutAll: ''; - lf - ]. - aConcern status isNeutralStatus ifTrue: [ - stream - tab; tab; - nextPutAll: ''; - nextPutAll: (self encode: aConcern stringResult); - nextPutAll: ''; - lf - ]. - self printConcernEnd: aConcern -] - -{ #category : #private } -REPReporter >> printConcernEnd: aConcern [ - stream - tab; - nextPutAll: ''; - lf -] - -{ #category : #private } -REPReporter >> printConcernStart: aConcern [ - stream - tab; - nextPutAll: ''; - lf -] - -{ #category : #running } -REPReporter >> run [ - self start. - spec root allLeafConcerns do: [:each | - self printConcern: each - ]. - self end -] - -{ #category : #accessing } -REPReporter >> spec: aSpec [ - spec := aSpec -] - -{ #category : #private } -REPReporter >> start [ - | leafs | - stream := StandardFileStream forceNewFileNamed: spec root label, '.xml'. - stream ascii. - stream nextPutAll: ''; lf. - leafs := spec root allLeafConcerns. - stream - nextPutAll: ''; - lf -] diff --git a/src-archive/Arki-Reporter-Core/REPStakeholder.class.st b/src-archive/Arki-Reporter-Core/REPStakeholder.class.st deleted file mode 100644 index cd97ae29f..000000000 --- a/src-archive/Arki-Reporter-Core/REPStakeholder.class.st +++ /dev/null @@ -1,57 +0,0 @@ -Class { - #name : #REPStakeholder, - #superclass : #Object, - #instVars : [ - 'name' - ], - #classInstVars : [ - 'byName' - ], - #category : #'Arki-Reporter-Core' -} - -{ #category : #'instance creation' } -REPStakeholder class >> byName [ - byName isNil ifTrue: [ self reset ]. - ^ byName -] - -{ #category : #'instance creation' } -REPStakeholder class >> everyone [ - ^ self named: 'everyone' -] - -{ #category : #'instance creation' } -REPStakeholder class >> named: aString [ - ^ self byName at: aString ifAbsentPut: [self new name: aString] -] - -{ #category : #'instance creation' } -REPStakeholder class >> reset [ - byName := Dictionary new. -] - -{ #category : #accessing } -REPStakeholder >> , aStakeholder [ - ^ REPGroupStakeholder with: self with: aStakeholder -] - -{ #category : #accessing } -REPStakeholder >> asString [ - ^ self name -] - -{ #category : #accessing } -REPStakeholder >> asStrings [ - ^ {self asString} -] - -{ #category : #accessing } -REPStakeholder >> name [ - ^ name -] - -{ #category : #accessing } -REPStakeholder >> name: anObject [ - name := anObject -] diff --git a/src-archive/Arki-Reporter-Core/package.st b/src-archive/Arki-Reporter-Core/package.st deleted file mode 100644 index c23746c93..000000000 --- a/src-archive/Arki-Reporter-Core/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Arki-Reporter-Core' } diff --git a/src-archive/Arki-Tests-Reporter/REPCompositeConcernTest.class.st b/src-archive/Arki-Tests-Reporter/REPCompositeConcernTest.class.st deleted file mode 100644 index 7c44ae24b..000000000 --- a/src-archive/Arki-Tests-Reporter/REPCompositeConcernTest.class.st +++ /dev/null @@ -1,16 +0,0 @@ -Class { - #name : #REPCompositeConcernTest, - #superclass : #TestCase, - #category : #'Arki-Tests-Reporter' -} - -{ #category : #'as yet unclassified' } -REPCompositeConcernTest >> testStatusBackpointer [ - | spec | - spec := REPConcernSpecification on: #(). - spec composite: 'composite' meaning: 'something' with: [ - spec query: 'success1' meaning: '' as: [:input | #()]. - spec query: 'success2' meaning: '' as: [:input | #()]. - ]. - self assert: spec root children first status concern = spec root children first -] diff --git a/src-archive/Arki-Tests-Reporter/REPConcernBuilderTest.class.st b/src-archive/Arki-Tests-Reporter/REPConcernBuilderTest.class.st deleted file mode 100644 index 9503a6029..000000000 --- a/src-archive/Arki-Tests-Reporter/REPConcernBuilderTest.class.st +++ /dev/null @@ -1,61 +0,0 @@ -Class { - #name : #REPConcernBuilderTest, - #superclass : #TestCase, - #category : #'Arki-Tests-Reporter' -} - -{ #category : #'as yet unclassified' } -REPConcernBuilderTest >> testBasicQueryCreation [ - | spec | - spec := REPConcernSpecification on: 42. - spec query: 'Label' meaning: 'Explanation' as: [:x | x + 1]. - self assert: spec root children size = 1. - self assert: spec root children first label = 'Label'. - self assert: spec root children first explanation = 'Explanation'. - self assert: spec root children first model = 42. - self assert: spec root children first result = 43 -] - -{ #category : #'as yet unclassified' } -REPConcernBuilderTest >> testComposition [ - | spec | - - spec := REPConcernSpecification on: 42. - - spec composite: 'One' with: [ - spec concern: (REPConcern new)]. - spec composite: 'Two' with: [ - spec concern: (REPConcern new). - spec concern: (REPConcern new)]. - - self assert: spec root children size = 2. - self assert: spec root children first children size = 1. - self assert: spec root children last children size = 2. - self assert: spec root children first label = 'One' - -] - -{ #category : #'as yet unclassified' } -REPConcernBuilderTest >> testCustomConcern [ - | spec | - spec := REPConcernSpecification on: 42. - spec concern: REPConcern new. - self assert: spec root children first model = 42 -] - -{ #category : #'as yet unclassified' } -REPConcernBuilderTest >> testErroredQuery [ - | spec | - spec := REPConcernSpecification on: 42. - spec query: 'Label' meaning: 'Explanation' as: [:x | 1 // 0]. - self assert: spec root children size = 1. - self assert: spec root children first label = 'Label'. - self assert: spec root children first explanation = 'Explanation'. - self assert: spec root children first model = 42. - self assert: spec root children first result isNil -] - -{ #category : #'as yet unclassified' } -REPConcernBuilderTest >> testRoot [ - self assert: (REPConcernSpecification on: 42) root model = 42 -] diff --git a/src-archive/Arki-Tests-Reporter/REPConcernStatusTest.class.st b/src-archive/Arki-Tests-Reporter/REPConcernStatusTest.class.st deleted file mode 100644 index 346d117a9..000000000 --- a/src-archive/Arki-Tests-Reporter/REPConcernStatusTest.class.st +++ /dev/null @@ -1,29 +0,0 @@ -Class { - #name : #REPConcernStatusTest, - #superclass : #TestCase, - #category : #'Arki-Tests-Reporter' -} - -{ #category : #testing } -REPConcernStatusTest >> testUnion [ - self assert: (REPConcernSuccessStatus new union: REPConcernSuccessStatus new) isSuccessStatus. - self assert: (REPConcernSuccessStatus new union: REPConcernFailureStatus new) isFailureStatus. - self assert: (REPConcernSuccessStatus new union: REPConcernErrorStatus new) isSuccessStatus. - self assert: (REPConcernSuccessStatus new union: REPConcernNeutralStatus new) isSuccessStatus. - - self assert: (REPConcernNeutralStatus new union: REPConcernErrorStatus new) isNeutralStatus. - self assert: (REPConcernNeutralStatus new union: REPConcernSuccessStatus new) isSuccessStatus. - self assert: (REPConcernNeutralStatus new union: REPConcernFailureStatus new) isFailureStatus. - self assert: (REPConcernNeutralStatus new union: REPConcernNeutralStatus new) isNeutralStatus. - - self assert: (REPConcernErrorStatus new union: REPConcernErrorStatus new) isNeutralStatus. - self assert: (REPConcernErrorStatus new union: REPConcernSuccessStatus new) isSuccessStatus. - self assert: (REPConcernErrorStatus new union: REPConcernFailureStatus new) isFailureStatus. - self assert: (REPConcernErrorStatus new union: REPConcernNeutralStatus new) isNeutralStatus. - - self assert: (REPConcernFailureStatus new union: REPConcernSuccessStatus new) isFailureStatus. - self assert: (REPConcernFailureStatus new union: REPConcernFailureStatus new) isFailureStatus. - self assert: (REPConcernFailureStatus new union: REPConcernErrorStatus new) isFailureStatus. - self assert: (REPConcernFailureStatus new union: REPConcernNeutralStatus new) isFailureStatus. - -] diff --git a/src-archive/Arki-Tests-Reporter/REPConcernTest.class.st b/src-archive/Arki-Tests-Reporter/REPConcernTest.class.st deleted file mode 100644 index 9a3de04c2..000000000 --- a/src-archive/Arki-Tests-Reporter/REPConcernTest.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #REPConcernTest, - #superclass : #TestCase, - #category : #'Arki-Tests-Reporter' -} - -{ #category : #'as yet unclassified' } -REPConcernTest >> testAnnouncer [ - | concern | - concern := REPConcern new . - self assert: concern announcer == concern announcer -] - -{ #category : #'as yet unclassified' } -REPConcernTest >> testDefaultStatus [ - self assert: REPComputedConcern new status notNil. - self assert: REPComputedConcern new status color = Color black. - self assert: REPComputedConcern new status label notNil -] - -{ #category : #'as yet unclassified' } -REPConcernTest >> testDefaults [ - self assert: REPConcern new label = 'REP Concern'. - self assert: REPConcern new explanation = 'REP Concern' -] diff --git a/src-archive/Arki-Tests-Reporter/REPStakeholderTest.class.st b/src-archive/Arki-Tests-Reporter/REPStakeholderTest.class.st deleted file mode 100644 index ffee6a80e..000000000 --- a/src-archive/Arki-Tests-Reporter/REPStakeholderTest.class.st +++ /dev/null @@ -1,29 +0,0 @@ -Class { - #name : #REPStakeholderTest, - #superclass : #TestCase, - #category : #'Arki-Tests-Reporter' -} - -{ #category : #tests } -REPStakeholderTest >> testByName [ - self assert: (REPStakeholder named: 'a') == (REPStakeholder named: 'a'). - self assert: (REPStakeholder named: 'a') name = 'a' -] - -{ #category : #tests } -REPStakeholderTest >> testByNameInitialization [ - self assert: REPStakeholder byName notNil. -] - -{ #category : #tests } -REPStakeholderTest >> testByNameReset [ - REPStakeholder reset. - self assert: REPStakeholder byName isEmpty -] - -{ #category : #tests } -REPStakeholderTest >> testGroup [ - | group | - group := (REPStakeholder named: 'a'), (REPStakeholder named: 'b'). - self assert: group asString = 'a, b' -] diff --git a/src-archive/Arki-Tests-Reporter/package.st b/src-archive/Arki-Tests-Reporter/package.st deleted file mode 100644 index c18126cd2..000000000 --- a/src-archive/Arki-Tests-Reporter/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Arki-Tests-Reporter' } diff --git a/src-archive/BaselineOfFmxNGCompatibility/BaselineOfFmxNGCompatibility.class.st b/src-archive/BaselineOfFmxNGCompatibility/BaselineOfFmxNGCompatibility.class.st deleted file mode 100644 index a7b6a46fb..000000000 --- a/src-archive/BaselineOfFmxNGCompatibility/BaselineOfFmxNGCompatibility.class.st +++ /dev/null @@ -1,60 +0,0 @@ -Class { - #name : #BaselineOfFamixCompatibility, - #superclass : #BaselineOf, - #category : #BaselineOfFamixCompatibility -} - -{ #category : #accessing } -BaselineOfFamixCompatibility >> baseline: spec [ - - - - | repository | - - repository := self packageRepositoryURL. - - spec for: #common do: [ - spec package: 'FamixCompatibility-Generator'. - spec package: 'FamixCompatibility-Entities'. - ]. - -] - -{ #category : #accessing } -BaselineOfFamixCompatibility >> packageRepository [ - - " Tries to determine a repository from which the baseline is being loaded. Useful for - refering other baselines in the same repository. " - - ^ (self class package mcWorkingCopy repositoryGroup repositories reject: [:each | each = MCCacheRepository uniqueInstance]) - ifNotEmpty: [ :repositories | repositories anyOne ] - ifEmpty: [ nil ] - - - -] - -{ #category : #accessing } -BaselineOfFamixCompatibility >> packageRepositoryURL [ - - " Tries to determine a repository URL from which the baseline is being loaded. Useful for - refering other baselines in the same repository. " - - ^ self packageRepository - ifNotNil: [ :aRepository | aRepository description ] - ifNil: [ '' ] - - - -] - -{ #category : #accessing } -BaselineOfFamixCompatibility >> project [ - - | aProject | - - aProject := super project. - aProject loadType: #atomic. - ^ aProject. - -] diff --git a/src-archive/BaselineOfFmxNGCompatibility/package.st b/src-archive/BaselineOfFmxNGCompatibility/package.st deleted file mode 100644 index 49528bbcf..000000000 --- a/src-archive/BaselineOfFmxNGCompatibility/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #BaselineOfFamixCompatibility } diff --git a/src-archive/CMetamodelGenerator/CMetamodelGenerator.class.st b/src-archive/CMetamodelGenerator/CMetamodelGenerator.class.st deleted file mode 100644 index a04d8e2fa..000000000 --- a/src-archive/CMetamodelGenerator/CMetamodelGenerator.class.st +++ /dev/null @@ -1,119 +0,0 @@ -" -generate the general traits: - -| g | -g := FamixGenerator new. -g builder traitsFlattening: false. -g generateWithoutCleaning. - -generate C metamodel - -| g | -g := CMetamodelGenerator new. -g builder traitsFlattening: true. -g generateWithoutCleaning. -CMetamodelGenerator resetMetamodel. - - -generate PlantText graphs - -| b v | -b := CMetamodelGenerator builderWithDefinitions. -v := FamixMetamodelBuilderPlantTextVisitor new. -b acceptVisitor: v. -v contents -" -Class { - #name : #CMetamodelGenerator, - #superclass : #FamixMetamodelGenerator, - #instVars : [ - 'function', - 'entity', - 'type', - 'macro', - 'module', - 'file', - 'cFile', - 'hFile', - 'tEntity', - 'tFile', - 'invocation' - ], - #category : #CMetamodelGenerator -} - -{ #category : #accessing } -CMetamodelGenerator class >> packageName [ - - ^ #'FmxC-Generated' -] - -{ #category : #accessing } -CMetamodelGenerator class >> prefix [ - - ^ #'FmxC' -] - -{ #category : #definition } -CMetamodelGenerator >> defineClasses [ - - entity := builder newClassNamed: #Entity. - function := builder newClassNamed: #Function. - type := builder newClassNamed: #Type. - macro := builder newClassNamed: #Macro. - module := builder newClassNamed: #Module. - file := builder newClassNamed: #File. - cFile := builder newClassNamed: #CFile. - hFile := builder newClassNamed: #HFile. - - invocation := builder newClassNamed: #Invocation. - - tEntity := (entity as: #TEntity) trait. - tFile := (file as: #TFile) trait. - - self defineHierarchy. -] - -{ #category : #definition } -CMetamodelGenerator >> defineHierarchy [ - - entity <|-- function. - entity <|-- type. - entity <|-- macro. - entity --|> #TNamed. - - module --|> #TNamed. - file --|> #TNamed. - - file <|-- cFile. - file <|-- hFile. - - invocation --|> #TInvocation. - function --|> #TWithInvocations. - function --|> #TInvocable. - - -] - -{ #category : #'instance creation' } -CMetamodelGenerator >> defineRelations [ - - module <>- cFile. - module <>- hFile. - - (tEntity property: #definedIn) *- (tFile property: #definedEntities). - -] - -{ #category : #'instance creation' } -CMetamodelGenerator >> newBuilder [ - - ^ (FamixGenerator builderWithDefinitions) - doNotGenerateCurrent; - generator: self; - yourself. - - - - -] diff --git a/src-archive/CMetamodelGenerator/package.st b/src-archive/CMetamodelGenerator/package.st deleted file mode 100644 index 0fa389df6..000000000 --- a/src-archive/CMetamodelGenerator/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #CMetamodelGenerator } diff --git a/src-archive/Collections-OrderPreservingDictionary-GTExtensions/package.st b/src-archive/Collections-OrderPreservingDictionary-GTExtensions/package.st deleted file mode 100644 index 2eb0d0e56..000000000 --- a/src-archive/Collections-OrderPreservingDictionary-GTExtensions/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Collections-OrderPreservingDictionary-GTExtensions' } diff --git a/src-archive/Collections-Tests-OrderPreservingDictionary/OrderPreservingDictionaryTest.class.st b/src-archive/Collections-Tests-OrderPreservingDictionary/OrderPreservingDictionaryTest.class.st deleted file mode 100644 index d42339fa9..000000000 --- a/src-archive/Collections-Tests-OrderPreservingDictionary/OrderPreservingDictionaryTest.class.st +++ /dev/null @@ -1,225 +0,0 @@ -Class { - #name : #OrderPreservingDictionaryTest, - #superclass : #StandardOrderedDictionaryTest, - #category : #'Collections-Tests-OrderPreservingDictionary' -} - -{ #category : #accessing } -OrderPreservingDictionaryTest >> defaultValue [ - ^ 'defaultValue' -] - -{ #category : #accessing } -OrderPreservingDictionaryTest >> dictionaryClass [ - ^ OrderPreservingDictionary -] - -{ #category : #accessing } -OrderPreservingDictionaryTest >> newDefaultValue [ - ^ 'newDefaultValue' -] - -{ #category : #tests } -OrderPreservingDictionaryTest >> testAssociationAt [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations do: [:each | - self assert: (dictionary associationAt: each key) isNil. - - dictionary add: each. - self assert: (dictionary associationAt: each key) = each]. -] - -{ #category : #tests } -OrderPreservingDictionaryTest >> testAssociationsSelect [ - super testAssociationsSelect. - - self assert: - (self dictionaryWithOrderedAssociations - defaultValue: self defaultValue; - associationsSelect: [:each | true]) defaultValue = self defaultValue. -] - -{ #category : #tests } -OrderPreservingDictionaryTest >> testAt [ - | dictionary | - - dictionary := self emptyDictionary. - dictionary defaultValue: self defaultValue. - self orderedAssociations do: [:each | - self assert: (dictionary at: each key) = self defaultValue. - - dictionary add: each. - self assert: (dictionary at: each key) = each value]. -] - -{ #category : #tests } -OrderPreservingDictionaryTest >> testCapacity [ - | defaultCapacity dictionary | - - super testCapacity. - - defaultCapacity := self defaultCapacity. - dictionary := self dictionaryClass defaultValue: nil. - self assert: dictionary capacity >= defaultCapacity. - - dictionary := - self dictionaryClass - new: defaultCapacity * 2 - withDefaultValue: nil. - self assert: dictionary capacity >= (defaultCapacity * 2). -] - -{ #category : #tests } -OrderPreservingDictionaryTest >> testCollect [ - super testCollect. - - self assert: - (self dictionaryWithOrderedAssociations - defaultValue: self defaultValue; - collect: [:each | each]) defaultValue = self defaultValue. -] - -{ #category : #tests } -OrderPreservingDictionaryTest >> testCopy [ - | dictionary copy | - - super testCopy. - - dictionary := self dictionaryWithOrderedAssociations. - dictionary defaultValue: self defaultValue. - copy := dictionary copy. - self assert: copy defaultValue = dictionary defaultValue. -] - -{ #category : #tests } -OrderPreservingDictionaryTest >> testCopyEmpty [ - | dictionary copy | - - super testCopyEmpty. - - dictionary := self dictionaryWithOrderedAssociations. - dictionary defaultValue: self defaultValue. - copy := dictionary copyEmpty. - self assert: copy defaultValue = dictionary defaultValue. -] - -{ #category : #tests } -OrderPreservingDictionaryTest >> testDefaultValue [ - | dictionary | - - dictionary := self dictionaryClass defaultValue: self defaultValue. - self - assert: dictionary defaultValue = self defaultValue; - assert: (dictionary defaultValue: self newDefaultValue) == dictionary; - assert: dictionary defaultValue = self newDefaultValue. -] - -{ #category : #tests } -OrderPreservingDictionaryTest >> testKeyAtIdentityValue [ - | dictionary | - - dictionary := self emptyDictionary. - dictionary defaultValue: self defaultValue. - self orderedAssociations do: [:each | - self assert: - (dictionary keyAtIdentityValue: each value) = self defaultValue. - - dictionary add: each. - self assert: - (dictionary keyAtIdentityValue: each value) = each key. - self assert: - (dictionary keyAtIdentityValue: each value copy) = self defaultValue]. -] - -{ #category : #tests } -OrderPreservingDictionaryTest >> testKeyAtIndex [ - | dictionary | - - dictionary := self emptyDictionary. - dictionary defaultValue: self defaultValue. - self assert: (dictionary keyAtIndex: 0) = self defaultValue. - self orderedAssociations withIndexDo: [:each :i | - self assert: (dictionary keyAtIndex: i) = self defaultValue. - - dictionary add: each. - self assert: (dictionary keyAtIndex: i) = each key]. -] - -{ #category : #tests } -OrderPreservingDictionaryTest >> testKeyAtValue [ - | dictionary | - - dictionary := self emptyDictionary. - dictionary defaultValue: self defaultValue. - self orderedAssociations do: [:each | - self assert: (dictionary keyAtValue: each value) = self defaultValue. - - dictionary add: each. - self assert: (dictionary keyAtValue: each value) = each key]. -] - -{ #category : #tests } -OrderPreservingDictionaryTest >> testNewFrom [ - | dictionary copy | - - super testNewFrom. - - dictionary := self dictionaryClass newFrom: self orderedAssociations. - dictionary defaultValue: self defaultValue. - copy := self dictionaryClass newFrom: dictionary. - self assert: copy defaultValue = dictionary defaultValue. -] - -{ #category : #tests } -OrderPreservingDictionaryTest >> testNewWithDefaultValue [ - | dictionary | - - dictionary := - self dictionaryClass - new: 10 - withDefaultValue: self defaultValue. - self assert: dictionary defaultValue = self defaultValue. -] - -{ #category : #tests } -OrderPreservingDictionaryTest >> testRemoveAll [ - | dictionary | - - super testRemoveAll. - - dictionary := self dictionaryWithOrderedAssociations. - dictionary - defaultValue: self defaultValue; - removeAll. - self assert: dictionary defaultValue = self defaultValue. -] - -{ #category : #tests } -OrderPreservingDictionaryTest >> testRemoveKey [ - | dictionary | - - dictionary := self dictionaryWithOrderedAssociations. - dictionary defaultValue: self defaultValue. - self orderedAssociations withIndexDo: [:each :i | - self assert: (dictionary removeKey: each key) = each value. - self - assertKey: each key - wasRemovedfrom: dictionary. - self - assertIsDictionary: dictionary - withOrderedAssociations: (self orderedAssociationsAllButFirst: i). - - self assert: (dictionary removeKey: each key) = self defaultValue] -] - -{ #category : #tests } -OrderPreservingDictionaryTest >> testSelect [ - super testSelect. - - self assert: - (self dictionaryWithOrderedAssociations - defaultValue: self defaultValue; - select: [:each | true]) defaultValue = self defaultValue. -] diff --git a/src-archive/Collections-Tests-OrderPreservingDictionary/OrderPreservingIdentityDictionaryTest.class.st b/src-archive/Collections-Tests-OrderPreservingDictionary/OrderPreservingIdentityDictionaryTest.class.st deleted file mode 100644 index 3c81fd787..000000000 --- a/src-archive/Collections-Tests-OrderPreservingDictionary/OrderPreservingIdentityDictionaryTest.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #OrderPreservingIdentityDictionaryTest, - #superclass : #OrderPreservingDictionaryTest, - #category : #'Collections-Tests-OrderPreservingDictionary' -} - -{ #category : #accessing } -OrderPreservingIdentityDictionaryTest >> dictionaryClass [ - ^ OrderPreservingIdentityDictionary -] - -{ #category : #testing } -OrderPreservingIdentityDictionaryTest >> isTestingIdentityDictionary [ - ^ true -] diff --git a/src-archive/Collections-Tests-OrderPreservingDictionary/OrderPreservingIdentityStringDictionaryTest.class.st b/src-archive/Collections-Tests-OrderPreservingDictionary/OrderPreservingIdentityStringDictionaryTest.class.st deleted file mode 100644 index 41f2e727c..000000000 --- a/src-archive/Collections-Tests-OrderPreservingDictionary/OrderPreservingIdentityStringDictionaryTest.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #OrderPreservingIdentityStringDictionaryTest, - #superclass : #OrderPreservingStringDictionaryTest, - #category : #'Collections-Tests-OrderPreservingDictionary' -} - -{ #category : #accessing } -OrderPreservingIdentityStringDictionaryTest >> dictionaryClass [ - ^ OrderPreservingIdentityStringDictionary -] - -{ #category : #testing } -OrderPreservingIdentityStringDictionaryTest >> isTestingIdentityDictionary [ - ^ true -] diff --git a/src-archive/Collections-Tests-OrderPreservingDictionary/OrderPreservingStringDictionaryTest.class.st b/src-archive/Collections-Tests-OrderPreservingDictionary/OrderPreservingStringDictionaryTest.class.st deleted file mode 100644 index ac7f57d5f..000000000 --- a/src-archive/Collections-Tests-OrderPreservingDictionary/OrderPreservingStringDictionaryTest.class.st +++ /dev/null @@ -1,90 +0,0 @@ -Class { - #name : #OrderPreservingStringDictionaryTest, - #superclass : #StandardOrderedDictionaryTest, - #category : #'Collections-Tests-OrderPreservingDictionary' -} - -{ #category : #accessing } -OrderPreservingStringDictionaryTest >> dictionaryClass [ - ^ OrderPreservingStringDictionary -] - -{ #category : #tests } -OrderPreservingStringDictionaryTest >> testAssociationAt [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations do: [:each | - self assert: (dictionary associationAt: each key) isNil. - - dictionary add: each. - self assert: (dictionary associationAt: each key) = each]. -] - -{ #category : #tests } -OrderPreservingStringDictionaryTest >> testAt [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations do: [:each | - self assert: (dictionary at: each key) = ''. - - dictionary add: each. - self assert: (dictionary at: each key) = each value]. -] - -{ #category : #tests } -OrderPreservingStringDictionaryTest >> testKeyAtIdentityValue [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations do: [:each | - self assert: (dictionary keyAtIdentityValue: each value) = ''. - - dictionary add: each. - self - assert: (dictionary keyAtIdentityValue: each value) = each key; - assert: (dictionary keyAtIdentityValue: each value copy) = '']. -] - -{ #category : #tests } -OrderPreservingStringDictionaryTest >> testKeyAtIndex [ - | dictionary | - - dictionary := self emptyDictionary. - self assert: (dictionary keyAtIndex: 0) = ''. - self orderedAssociations withIndexDo: [:each :i | - self assert: (dictionary keyAtIndex: i) = ''. - - dictionary add: each. - self assert: (dictionary keyAtIndex: i) = each key]. -] - -{ #category : #tests } -OrderPreservingStringDictionaryTest >> testKeyAtValue [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations do: [:each | - self assert: (dictionary keyAtValue: each value) = ''. - - dictionary add: each. - self assert: (dictionary keyAtValue: each value) = each key]. -] - -{ #category : #tests } -OrderPreservingStringDictionaryTest >> testRemoveKey [ - | dictionary | - - dictionary := self dictionaryWithOrderedAssociations. - self orderedAssociations withIndexDo: [:each :i | - self assert: (dictionary removeKey: each key) = each value. - self - assertKey: each key - wasRemovedfrom: dictionary. - self - assertIsDictionary: dictionary - withOrderedAssociations: (self orderedAssociationsAllButFirst: i). - - self assert: (dictionary removeKey: each key) = ''] -] diff --git a/src-archive/Collections-Tests-OrderPreservingDictionary/StandardOrderedDictionaryTest.class.st b/src-archive/Collections-Tests-OrderPreservingDictionary/StandardOrderedDictionaryTest.class.st deleted file mode 100644 index bdeb428fb..000000000 --- a/src-archive/Collections-Tests-OrderPreservingDictionary/StandardOrderedDictionaryTest.class.st +++ /dev/null @@ -1,1345 +0,0 @@ -Class { - #name : #StandardOrderedDictionaryTest, - #superclass : #TestCase, - #instVars : [ - 'nonIdentityOrderedAssociations', - 'identityOrderedAssociations' - ], - #category : #'Collections-Tests-OrderPreservingDictionary' -} - -{ #category : #testing } -StandardOrderedDictionaryTest class >> shouldInheritSelectors [ - ^ true -] - -{ #category : #accessing } -StandardOrderedDictionaryTest >> absentKey [ - self isTestingIdentityDictionary - ifTrue: [^ self identityAbsentKey] - ifFalse: [^ self nonIdentityAbsentKey] -] - -{ #category : #accessing } -StandardOrderedDictionaryTest >> absentValue [ - ^ 'absentValue' -] - -{ #category : #assertions } -StandardOrderedDictionaryTest >> assertDictionary: aFirstDictionary doesNotEqual: aSecondDictionary [ - "test symmetric inequality" - self - deny: aFirstDictionary = aSecondDictionary; - deny: aSecondDictionary = aFirstDictionary -] - -{ #category : #assertions } -StandardOrderedDictionaryTest >> assertDictionary: aFirstDictionary equals: aSecondDictionary [ - "test reflixive and symmetric equality" - self - assert: aFirstDictionary = aFirstDictionary; - assert: aFirstDictionary = aSecondDictionary; - assert: aSecondDictionary = aSecondDictionary; - assert: aSecondDictionary = aFirstDictionary -] - -{ #category : #assertions } -StandardOrderedDictionaryTest >> assertIsArray: anArray withElements: aCollection [ - self - assert: anArray isArray; - assert: anArray = aCollection asArray -] - -{ #category : #assertions } -StandardOrderedDictionaryTest >> assertIsDictionary: aFirstDictionary copiedFrom: aSecondDictionary withOrderedAssociations: anAssociationCollection [ - self - deny: aFirstDictionary == aSecondDictionary; - deny: aFirstDictionary dictionary == aSecondDictionary dictionary; - deny: aFirstDictionary orderedKeys == aSecondDictionary orderedKeys. - - "esnure the associations were copied (the keys and values can be shared)" - aFirstDictionary associations do: [:each | - self deny: (aSecondDictionary associations identityIncludes: each)]. - - self - assertIsDictionary: aFirstDictionary - withOrderedAssociations: anAssociationCollection. -] - -{ #category : #assertions } -StandardOrderedDictionaryTest >> assertIsDictionary: anObject withOrderedAssociations: anAssociationCollection [ - "tests that anObject is an instance of the correct dictionary class - with the specified ordered associations" - self - assert: anObject class == self dictionaryClass; - assert: anObject orderedKeys size >= anAssociationCollection size; - assert: anObject associations size = anAssociationCollection size. - - anAssociationCollection withIndexDo: [:each :i | - self isTestingIdentityDictionary - ifTrue: [ - self - assert: (anObject orderedKeys at: i) == each key; - assert: (anObject associations at: i) key == each key] - ifFalse: [ - self - assert: (anObject orderedKeys at: i) = each key; - assert: (anObject associations at: i) key = each key]. - self assert: (anObject associations at: i) value = each value]. -] - -{ #category : #assertions } -StandardOrderedDictionaryTest >> assertIsDictionary: anObject withUnorderedAssociations: anAssociationCollection [ - "tests that anObject is an instance of the correct dictionary class - with the specified associations, but ignoring the order" - self - assert: anObject class == self dictionaryClass; - assert: anObject size = anAssociationCollection size. - anAssociationCollection do: [:each | - self assert: (anObject includesAssociation: each)]. -] - -{ #category : #assertions } -StandardOrderedDictionaryTest >> assertKey: aKey wasRemovedfrom: aDictionary [ - self deny: (aDictionary includesKey: aKey). - aDictionary keys asArray, aDictionary orderedKeys asArray do: [:each | - self deny: - (self isTestingIdentityDictionary - ifTrue: [each == aKey] - ifFalse: [each = aKey])]. -] - -{ #category : #accessing } -StandardOrderedDictionaryTest >> changedOrderedAssociations [ - ^ self orderedAssociations collect: [:each | each key -> self newValue] -] - -{ #category : #accessing } -StandardOrderedDictionaryTest >> changedOrderedAssociationsFirst: anInteger [ - "GS does not have #first:" - ^ self changedOrderedAssociations - copyFrom: 1 - to: anInteger -] - -{ #category : #accessing } -StandardOrderedDictionaryTest >> collectClass [ - ^ Array -] - -{ #category : #accessing } -StandardOrderedDictionaryTest >> defaultCapacity [ - ^ self emptyInternalDictionary capacity -] - -{ #category : #accessing } -StandardOrderedDictionaryTest >> dictionaryClass [ - ^ StandardOrderedDictionary -] - -{ #category : #accessing } -StandardOrderedDictionaryTest >> dictionaryWithOrderedAssociations [ - ^ self dictionaryClass newFrom: self orderedAssociations -] - -{ #category : #accessing } -StandardOrderedDictionaryTest >> emptyDictionary [ - ^ self dictionaryClass new -] - -{ #category : #accessing } -StandardOrderedDictionaryTest >> emptyInternalDictionary [ - ^ self internalDictionaryClass new -] - -{ #category : #accessing } -StandardOrderedDictionaryTest >> identityAbsentKey [ - ^ self orderedKeys first copy -] - -{ #category : #accessing } -StandardOrderedDictionaryTest >> identityOrderedAssociations [ - "Returns ordered associations to use for identity dictionaries. - The keys are all #= equal but #== different, so only an - identity dictionary will be able to distinguish them." - identityOrderedAssociations - ifNil: [| key | - key := 'testKey'. - identityOrderedAssociations := - Array - with: (key := key copy) -> 'testValue' - with: (key := key copy) -> 'testValue3' - with: (key := key copy) -> 'testValue2' - with: (key := key copy) -> 'testValue4']. - "return copies of the associations so they can be safely modified - in one test without affecting another, but do not copy the keys - and values" - ^ identityOrderedAssociations collect: [:each | each copy]. -] - -{ #category : #accessing } -StandardOrderedDictionaryTest >> internalDictionaryClass [ - self isTestingIdentityDictionary - ifTrue: [^ IdentityDictionary] - ifFalse: [^ Dictionary] -] - -{ #category : #accessing } -StandardOrderedDictionaryTest >> internalDictionaryWithAssociations [ - ^ self internalDictionaryClass newFrom: self orderedAssociations -] - -{ #category : #testing } -StandardOrderedDictionaryTest >> isTestingIdentityDictionary [ - ^ false -] - -{ #category : #accessing } -StandardOrderedDictionaryTest >> newValue [ - ^ 'newValue' -] - -{ #category : #accessing } -StandardOrderedDictionaryTest >> nonIdentityAbsentKey [ - ^ 'absentKey' -] - -{ #category : #accessing } -StandardOrderedDictionaryTest >> nonIdentityOrderedAssociations [ - "Returns ordered associations to use for non-identity dictionaries. - The keys are all #= and #== different and are returned out of their - natural sort order." - nonIdentityOrderedAssociations - ifNil: [ - nonIdentityOrderedAssociations := - Array - with: 'testKey' -> 'testValue' - with: 'testKey3' -> 'testValue3' - with: 'testKey2' -> 'testValue2' - with: 'testKey4' -> 'testValue4']. - "return copies of the associations so they can be safely modified - in one test without affecting another, but do not copy the keys - and values" - ^ nonIdentityOrderedAssociations collect: [:each | each copy]. -] - -{ #category : #accessing } -StandardOrderedDictionaryTest >> orderedAssociations [ - self isTestingIdentityDictionary - ifTrue: [^ self identityOrderedAssociations] - ifFalse: [^ self nonIdentityOrderedAssociations] -] - -{ #category : #accessing } -StandardOrderedDictionaryTest >> orderedAssociationsAllButFirst: anInteger [ - ^ self orderedAssociations allButFirst: anInteger -] - -{ #category : #accessing } -StandardOrderedDictionaryTest >> orderedAssociationsFirst: anInteger [ - "GS does not have #first:" - ^ self orderedAssociations - copyFrom: 1 - to: anInteger -] - -{ #category : #accessing } -StandardOrderedDictionaryTest >> orderedKeys [ - ^ self orderedAssociations collect: [:each | each key] -] - -{ #category : #accessing } -StandardOrderedDictionaryTest >> orderedKeysFirst: anInteger [ - "GS does not have #first:" - ^ self orderedKeys - copyFrom: 1 - to: anInteger -] - -{ #category : #accessing } -StandardOrderedDictionaryTest >> orderedValues [ - ^ self orderedAssociations collect: [:each | each value] -] - -{ #category : #accessing } -StandardOrderedDictionaryTest >> orderedValuesFirst: anInteger [ - "GS does not have #first:" - ^ self orderedValues - copyFrom: 1 - to: anInteger -] - -{ #category : #accessing } -StandardOrderedDictionaryTest >> otherOrderPreservingDictionaryClasses [ - ^ StandardOrderedDictionary withAllSubclasses copyWithout: self dictionaryClass -] - -{ #category : #assertions } -StandardOrderedDictionaryTest >> should: aBlock enumerate: aCollection [ - | enumerated | - - enumerated := OrderedCollection new. - aBlock value: [:each | enumerated add: each]. - self assert: enumerated = aCollection asOrderedCollection. -] - -{ #category : #assertions } -StandardOrderedDictionaryTest >> should: aBlock enumerate: aFirstCollection and: aSecondCollection [ - | firstEnumerated secondEnumerated | - - firstEnumerated := OrderedCollection new. - secondEnumerated := OrderedCollection new. - aBlock value: [:first :second | - firstEnumerated addLast: first. - secondEnumerated addLast: second]. - self - assert: firstEnumerated = aFirstCollection asOrderedCollection; - assert: secondEnumerated = aSecondCollection asOrderedCollection. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testAdd [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations withIndexDo: [:each :i | - self - deny: (dictionary includesAssociation: each); - assert: (dictionary add: each) == each; - assert: (dictionary includesAssociation: each). - self - assertIsDictionary: dictionary - withOrderedAssociations: (self orderedAssociationsFirst: i)]. - - "ensure adding the same associations doesn't change the order" - self orderedAssociations reverseDo: [:each | - self assert: (dictionary add: each) == each. - self - assertIsDictionary: dictionary - withOrderedAssociations: self orderedAssociations]. - - self changedOrderedAssociations withIndexDo: [:each :i | | old | - old := self orderedAssociations at: i. - self - assert: (dictionary add: each) == each; - assert: (dictionary includesAssociation: each); - deny: (dictionary includesAssociation: old). - self - assertIsDictionary: dictionary - withOrderedAssociations: - (self changedOrderedAssociationsFirst: i), - (self orderedAssociationsAllButFirst: i)]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testAddAll [ - | dictionary addedAssociations | - - dictionary := self emptyDictionary. - self orderedAssociations do: [:each | - self deny: (dictionary includesAssociation: each)]. - - addedAssociations := self orderedAssociations. - self assert: (dictionary addAll: addedAssociations) == addedAssociations. - self - assertIsDictionary: dictionary - withOrderedAssociations: self orderedAssociations. - - "ensure adding the same associations doesn't change the order" - addedAssociations := self orderedAssociations reversed. - self assert: (dictionary addAll: addedAssociations) == addedAssociations. - self - assertIsDictionary: dictionary - withOrderedAssociations: self orderedAssociations. - - addedAssociations := self changedOrderedAssociations. - self assert: (dictionary addAll: addedAssociations) == addedAssociations. - self - assertIsDictionary: dictionary - withOrderedAssociations: self changedOrderedAssociations. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testAssociationAt [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations do: [:each | - self - should: [dictionary associationAt: each key] - raise: Error. - - dictionary add: each. - self assert: (dictionary associationAt: each key) = each]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testAssociationAtIfAbsent [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations do: [:each | - self assert: - (dictionary - associationAt: each key - ifAbsent: [self absentValue]) = self absentValue. - - dictionary add: each. - self assert: - (dictionary - associationAt: each key - ifAbsent: [self fail]) = each]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testAssociationAtIfPresent [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations do: [:each | - self assert: - (dictionary - associationAt: each key - ifPresent: [self fail]) isNil. - - dictionary add: each. - self assert: - (dictionary - associationAt: each key - ifPresent: [:assoc | self newValue -> assoc]) = (self newValue -> each). - "ensure cull: is used" - self assert: - (dictionary - associationAt: each key - ifPresent: [self newValue]) = self newValue]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testAssociations [ - | dictionary | - - dictionary := self emptyDictionary. - self - assertIsArray: dictionary associations - withElements: #(). - self orderedAssociations withIndexDo: [:each :i | - dictionary add: each. - self - assertIsArray: dictionary associations - withElements: (self orderedAssociationsFirst: i)]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testAssociationsDo [ - | dictionary | - - dictionary := self emptyDictionary. - self - should: [:block | dictionary associationsDo: block] - enumerate: #(). - self orderedAssociations withIndexDo: [:each :i | - dictionary add: each. - self - should: [:block | dictionary associationsDo: block] - enumerate: (self orderedAssociationsFirst: i)]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testAssociationsSelect [ - | dictionary | - - dictionary := self dictionaryWithOrderedAssociations. - self orderedAssociations do: [:assoc | | selectedAssociations | - selectedAssociations := self orderedAssociations copyWithout: assoc. - self - assertIsDictionary: - (dictionary associationsSelect: [:each | - selectedAssociations includes: each]) - copiedFrom: dictionary - withOrderedAssociations: - (self orderedAssociations select: [:each | - selectedAssociations includes: each])]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testAt [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations do: [:each | - self - should: [dictionary at: each key] - raise: Error. - - dictionary add: each. - self assert: (dictionary at: each key) = each value]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testAtIfAbsent [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations do: [:each | - self assert: - (dictionary - at: each key - ifAbsent: [self absentValue]) = self absentValue. - - dictionary add: each. - self assert: - (dictionary - at: each key - ifAbsent: [self fail]) = each value]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testAtIfAbsentPut [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations do: [:each | - self assert: - (dictionary - at: each key - ifAbsentPut: [each value]) = each value. - self assert: - (dictionary - at: each key - ifAbsentPut: [self fail]) = each value]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testAtIfPresent [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations do: [:each | - self assert: - (dictionary - at: each key - ifPresent: [self fail]) isNil. - - dictionary add: each. - self assert: - (dictionary - at: each key - ifPresent: [:value | self newValue -> value]) = - (self newValue -> each value). - "ensure cull: is used" - self assert: - (dictionary - at: each key - ifPresent: [self newValue]) = self newValue]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testAtIfPresentIfAbsent [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations do: [:each | - self assert: - (dictionary - at: each key - ifPresent: [self fail] - ifAbsent: [self absentValue]) = self absentValue. - - dictionary add: each. - self assert: - (dictionary - at: each key - ifPresent: [:value | self newValue -> value] - ifAbsent: [self fail]) = (self newValue -> each value). - "ensure cull: is used" - self assert: - (dictionary - at: each key - ifPresent: [self newValue] - ifAbsent: [self fail]) = self newValue]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testAtPut [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations withIndexDo: [:each :i | - self assert: - (dictionary - at: each key - put: each value) = each value. - self - assertIsDictionary: dictionary - withOrderedAssociations: (self orderedAssociationsFirst: i)]. - - self changedOrderedAssociations withIndexDo: [:each :i | - self assert: - (dictionary - at: each key - put: each value) = each value. - self - assertIsDictionary: dictionary - withOrderedAssociations: - (self changedOrderedAssociationsFirst: i), - (self orderedAssociationsAllButFirst: i)]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testCapacity [ - "The current Dictionary implementation allocates more than specified. - The amount allocated may change in the future but it likely won't ever - be less than specified, so a >= test is used throughout." - - | defaultCapacity dictionary | - - defaultCapacity := self defaultCapacity. - dictionary := self dictionaryClass new. - self assert: dictionary capacity >= defaultCapacity. - - dictionary := self dictionaryClass new: (defaultCapacity / 2) asInteger. - self assert: dictionary capacity >= (defaultCapacity / 2) asInteger. - - dictionary := self dictionaryClass newFrom: self orderedAssociations. - self assert: dictionary capacity >= self orderedAssociations size. - - self orderedAssociations size to: 0 by: -1 do: [:i | - self - shouldnt: [ - dictionary := self dictionaryClass new: i. - dictionary addAll: self orderedAssociations] - raise: Error]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testCollect [ - | dictionary | - - dictionary := self dictionaryWithOrderedAssociations. - self - assertIsDictionary: - (dictionary collect: [:each | each hash]) - copiedFrom: dictionary - withOrderedAssociations: - (self orderedAssociations collect: [:each | each key -> each value hash]). -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testCopy [ - | dictionary copy | - - dictionary := self dictionaryWithOrderedAssociations. - copy := dictionary copy. - self - assertIsDictionary: dictionary - withOrderedAssociations: self orderedAssociations. - self - assertIsDictionary: copy - copiedFrom: dictionary - withOrderedAssociations: self orderedAssociations. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testCopyEmpty [ - | dictionary copy | - - dictionary := self dictionaryWithOrderedAssociations. - copy := dictionary copyEmpty. - self - assertIsDictionary: dictionary - withOrderedAssociations: self orderedAssociations. - self - assertIsDictionary: copy - copiedFrom: dictionary - withOrderedAssociations: #(). -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testDictionary [ - | dictionary | - - dictionary := self emptyDictionary. - self - assert: dictionary dictionary class == self internalDictionaryClass; - assert: dictionary dictionary = self emptyInternalDictionary. - - dictionary := self dictionaryWithOrderedAssociations. - self - assert: dictionary dictionary class == self internalDictionaryClass; - assert: dictionary dictionary = self internalDictionaryWithAssociations. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testDo [ - | dictionary | - - dictionary := self emptyDictionary. - self - should: [:block | dictionary do: block] - enumerate: #(). - self orderedAssociations withIndexDo: [:each :i | - dictionary add: each. - self - should: [:block | dictionary do: block] - enumerate: (self orderedValuesFirst: i)]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testEquals [ - | dictionaryOne dictionaryTwo | - - dictionaryOne := self emptyDictionary. - dictionaryTwo := self emptyDictionary. - self - assertDictionary: dictionaryOne - equals: dictionaryTwo. - - "For equality, order will not matter" - self orderedAssociations - with: self orderedAssociations reversed - do: [:firstAssociation :secondAssociation | - dictionaryOne add: firstAssociation. - dictionaryTwo add: secondAssociation. - self - assertDictionary: dictionaryOne - doesNotEqual: self emptyDictionary. - self - assertDictionary: dictionaryTwo - doesNotEqual: self emptyDictionary. - dictionaryOne size < self orderedAssociations size - ifTrue: [ - self - assertDictionary: dictionaryOne - doesNotEqual: dictionaryTwo]]. - - self - assertDictionary: dictionaryOne - equals: dictionaryTwo. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testEqualsDictionary [ - "cannot use assertDictionary:doesNotEqual: for backwards compatibility with - older Pharo images where Dictionary>>= uses #isDictionary to test the argument - because these classes also implement isDictionary" - self - deny: self emptyDictionary = self emptyInternalDictionary; - deny: self dictionaryWithOrderedAssociations = self internalDictionaryWithAssociations -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testEqualsOtherOrderPreservingDictionaries [ - self otherOrderPreservingDictionaryClasses do: [:otherClass | - | dictionary otherDictionary | - dictionary := self dictionaryClass new. - otherDictionary := otherClass new. - dictionary isIdentityDictionary = otherDictionary isIdentityDictionary - ifTrue: [ - self - assertDictionary: dictionary - equals: otherDictionary. - self orderedAssociations do: [:each | - dictionary add: each. - self - assertDictionary: dictionary - doesNotEqual: otherDictionary. - otherDictionary add: each copy. - self - assertDictionary: dictionary - equals: otherDictionary]] - ifFalse: [ - self - assertDictionary: dictionary - doesNotEqual: otherDictionary. - self orderedAssociations do: [:each | - dictionary add: each. - otherDictionary add: each copy. - self - assertDictionary: dictionary - doesNotEqual: otherDictionary]]] -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testHash [ - | dictionary otherDictionary internalDictionary otherInternalDictionary | - - dictionary := self emptyDictionary. - otherDictionary := self emptyDictionary. - internalDictionary := self emptyInternalDictionary. - otherInternalDictionary := self emptyInternalDictionary. - self assert: dictionary hash = otherDictionary hash. - self orderedAssociations do: [:each | - dictionary add: each. - internalDictionary add: each copy. - "if the internal hashes differ after adding to one, the external should too" - internalDictionary hash = otherInternalDictionary hash - ifFalse: [self deny: dictionary hash = otherDictionary hash]. - - otherDictionary add: each copy. - otherInternalDictionary add: each copy. - "should be equal regardless now" - self assert: dictionary hash = otherDictionary hash]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testHashOtherOrderPreservingDictionaries [ - self otherOrderPreservingDictionaryClasses do: [:otherClass | - | dictionary otherDictionary | - dictionary := self dictionaryClass new. - otherDictionary := otherClass new. - dictionary isIdentityDictionary = otherDictionary isIdentityDictionary - ifTrue: [ - self assert: dictionary hash = otherDictionary hash. - self orderedAssociations do: [:each | - dictionary add: each. - otherDictionary add: each copy. - self assert: dictionary hash = otherDictionary hash]]] -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testIdentityIndexOfKey [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations withIndexDo: [:each :i | - self assert: (dictionary identityIndexOfKey: each key) = 0. - - dictionary add: each. - self - assert: (dictionary identityIndexOfKey: each key) = i; - assert: (dictionary identityIndexOfKey: each key copy) = 0]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testIdentityIndexOfKeyIfAbsent [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations withIndexDo: [:each :i | - self assert: - (dictionary - identityIndexOfKey: each key - ifAbsent: [self absentValue]) = self absentValue. - - dictionary add: each. - self assert: - (dictionary - identityIndexOfKey: each key - ifAbsent: [self fail]) = i. - self assert: - (dictionary - identityIndexOfKey: each key copy - ifAbsent: [self absentValue]) = self absentValue]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testIncludes [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations do: [:each | - self deny: (dictionary includes: each value). - - dictionary add: each. - self assert: (dictionary includes: each value)]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testIncludesAssociation [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations do: [:each | - self - deny: (dictionary includesAssociation: each); - deny: (dictionary includesAssociation: each key -> each value). - - dictionary add: each. - self - assert: (dictionary includesAssociation: each); - assert: (dictionary includesAssociation: each key -> each value)]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testIncludesIdentity [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations do: [:each | - self deny: (dictionary includesIdentity: each value). - - dictionary add: each. - self - assert: (dictionary includesIdentity: each value); - deny: (dictionary includesIdentity: each value copy)]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testIncludesKey [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations do: [:each | - self deny: (dictionary includesKey: each key). - - dictionary add: each. - self assert: (dictionary includesKey: each key)]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testIndexOfKey [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations withIndexDo: [:each :i | - self assert: (dictionary indexOfKey: each key) = 0. - - dictionary add: each. - self assert: (dictionary indexOfKey: each key) = i]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testIndexOfKeyIfAbsent [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations withIndexDo: [:each :i | - self assert: - (dictionary - indexOfKey: each key - ifAbsent: [self absentValue]) = self absentValue. - - dictionary add: each. - self assert: - (dictionary - indexOfKey: each key - ifAbsent: [self fail]) = i]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testIsDictionary [ - self assert: self dictionaryClass new isDictionary -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testIsIdentityDictionary [ - self assert: self emptyDictionary isIdentityDictionary = self isTestingIdentityDictionary -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testIsOrderPreservingDictionary [ - self - assert: self dictionaryWithOrderedAssociations isOrderPreservingDictionary; - deny: self internalDictionaryWithAssociations isOrderPreservingDictionary; - deny: self orderedAssociations isOrderPreservingDictionary -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testKeyAtIdentityValue [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations do: [:each | - self - should: [dictionary keyAtIdentityValue: each value] - raise: Error. - - dictionary add: each. - self assert: (dictionary keyAtIdentityValue: each value) = each key. - self - should: [dictionary keyAtIdentityValue: each value copy] - raise: Error]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testKeyAtIdentityValueIfAbsent [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations do: [:each | - self assert: - (dictionary - keyAtIdentityValue: each value - ifAbsent: [self absentKey]) = self absentKey. - - dictionary add: each. - self assert: - (dictionary - keyAtIdentityValue: each value - ifAbsent: [self fail]) = each key. - self assert: - (dictionary - keyAtIdentityValue: each value copy - ifAbsent: [self absentKey]) = self absentKey]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testKeyAtIndex [ - | dictionary | - - dictionary := self emptyDictionary. - self - should: [dictionary keyAtIndex: 0] - raise: Error. - self orderedAssociations withIndexDo: [:each :i | - self - should: [dictionary keyAtIndex: i] - raise: Error. - - dictionary add: each. - self assert: (dictionary keyAtIndex: i) = each key]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testKeyAtIndexIfAbsent [ - | dictionary | - - dictionary := self emptyDictionary. - self assert: - (dictionary - keyAtIndex: 0 - ifAbsent: [self absentKey]) = self absentKey. - self orderedAssociations withIndexDo: [:each :i | - self assert: - (dictionary - keyAtIndex: i - ifAbsent: [self absentKey]) = self absentKey. - - dictionary add: each. - self assert: - (dictionary - keyAtIndex: i - ifAbsent: [self fail]) = each key]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testKeyAtValue [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations do: [:each | - self - should: [dictionary keyAtValue: each value] - raise: Error. - - dictionary add: each. - self assert: (dictionary keyAtValue: each value) = each key]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testKeyAtValueIfAbsent [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations do: [:each | - self assert: - (dictionary - keyAtValue: each value - ifAbsent: [self absentKey]) = self absentKey. - - dictionary add: each. - self assert: - (dictionary - keyAtValue: each value - ifAbsent: [self fail]) = each key]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testKeyForIdentity [ - | dictionary | - - dictionary := self emptyDictionary. - self orderedAssociations do: [:each | - self assert: (dictionary keyForIdentity: each value) isNil. - - dictionary add: each. - self - assert: (dictionary keyForIdentity: each value) = each key; - assert: (dictionary keyForIdentity: each value copy) isNil]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testKeys [ - | dictionary | - - dictionary := self emptyDictionary. - self - assertIsArray: dictionary keys - withElements: #(). - self orderedAssociations withIndexDo: [:each :i | - dictionary add: each. - self - assertIsArray: dictionary keys - withElements: (self orderedKeysFirst: i)]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testKeysAndValuesDo [ - | dictionary | - - dictionary := self emptyDictionary. - self - should: [:block | dictionary keysAndValuesDo: block] - enumerate: #() - and: #(). - self orderedAssociations withIndexDo: [:each :i | - dictionary add: each. - self - should: [:block | dictionary keysAndValuesDo: block] - enumerate: (self orderedKeysFirst: i) - and: (self orderedValuesFirst: i)]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testKeysAndValuesRemove [ - | dictionary | - - dictionary := self dictionaryWithOrderedAssociations. - self orderedAssociations withIndexDo: [:removedAssociation :i | - | unremovedAssociations | - unremovedAssociations := - (self orderedAssociationsAllButFirst: i) asOrderedCollection. - dictionary keysAndValuesRemove: [:key :value | - (self isTestingIdentityDictionary - ifTrue: [key == removedAssociation key] - ifFalse: [key = removedAssociation key]) - ifTrue: [ - self assert: value = removedAssociation value. - true] - ifFalse: [| unremovedAssociation | - unremovedAssociation := unremovedAssociations removeFirst. - self isTestingIdentityDictionary - ifTrue: [self assert: key == unremovedAssociation key] - ifFalse: [self assert: key = unremovedAssociation key]. - self assert: value = unremovedAssociation value. - false]]. - self assert: unremovedAssociations isEmpty. - self - assertKey: removedAssociation key - wasRemovedfrom: dictionary]. - self assert: dictionary isEmpty. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testKeysDo [ - | dictionary | - - dictionary := self emptyDictionary. - self - should: [:block | dictionary keysDo: block] - enumerate: #(). - self orderedAssociations withIndexDo: [:each :i | - dictionary add: each. - self - should: [:block | dictionary keysDo: block] - enumerate: (self orderedKeysFirst: i)]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testKeysSortedSafely [ - | dictionary | - - dictionary := self emptyDictionary. - self - assertIsArray: dictionary keysSortedSafely - withElements: #(). - self orderedAssociations withIndexDo: [:each :i | - dictionary add: each. - "The keys are all strings, so the default #sorted implementation is OK." - self - assertIsArray: dictionary keysSortedSafely - withElements: (self orderedKeysFirst: i) sorted]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testNewFrom [ - | dictionary | - - dictionary := self dictionaryClass newFrom: self orderedAssociations. - self - assertIsDictionary: dictionary - withOrderedAssociations: self orderedAssociations. - self - assertIsDictionary: (self dictionaryClass newFrom: dictionary) - copiedFrom: dictionary - withOrderedAssociations: self orderedAssociations. - self - assertIsDictionary: - (self dictionaryClass newFrom: self internalDictionaryWithAssociations) - withUnorderedAssociations: self orderedAssociations. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testNewFromPairs [ - | pairs | - - pairs := OrderedCollection new. - self orderedAssociations do: [:each | - pairs - addLast: each key; - addLast: each value]. - - 0 to: pairs size do: [:i | - self - assertIsDictionary: - (self dictionaryClass newFromPairs: (pairs copyFrom: 1 to: i)) - withOrderedAssociations: - (self orderedAssociationsFirst: (i / 2) floor)]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testOccurancesOf [ - | dictionary | - - dictionary := self emptyDictionary. - self assert: (dictionary occurrencesOf: self newValue) = 0. - self orderedKeys withIndexDo: [:each :i | - dictionary - at: each - put: self newValue. - self assert: (dictionary occurrencesOf: self newValue) = i] -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testRemoveAll [ - | dictionary removedKeys | - - dictionary := self dictionaryWithOrderedAssociations. - removedKeys := dictionary keys. - self - deny: dictionary isEmpty; - assert: dictionary removeAll == dictionary; - assert: dictionary isEmpty. - removedKeys do: [:each | - self - assertKey: each - wasRemovedfrom: dictionary]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testRemoveKey [ - | dictionary | - - dictionary := self dictionaryWithOrderedAssociations. - self orderedAssociations withIndexDo: [:each :i | - self assert: (dictionary removeKey: each key) = each value. - self - assertKey: each key - wasRemovedfrom: dictionary. - self - assertIsDictionary: dictionary - withOrderedAssociations: (self orderedAssociationsAllButFirst: i). - - self - should: [dictionary removeKey: each key] - raise: Error] -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testRemoveKeyIfAbsent [ - | dictionary | - - dictionary := self dictionaryWithOrderedAssociations. - self orderedAssociations withIndexDo: [:each :i | - self assert: - (dictionary - removeKey: each key - ifAbsent: [self fail]) = each value. - self - assertKey: each key - wasRemovedfrom: dictionary. - self - assertIsDictionary: dictionary - withOrderedAssociations: (self orderedAssociationsAllButFirst: i). - - self assert: - (dictionary - removeKey: each key - ifAbsent: [self absentValue]) = self absentValue] -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testRemoveKeys [ - 0 to: self orderedAssociations size do: [:i | | dictionary keysToRemove | - dictionary := self dictionaryWithOrderedAssociations. - - "make it a set to ensure it supports non-Sequenceable collections" - keysToRemove := - (self isTestingIdentityDictionary - ifTrue: [IdentitySet] - ifFalse: [Set]) - "avoid #newFrom: for GS portability" - withAll: (self orderedKeysFirst: i). - self assert: (dictionary removeKeys: keysToRemove) == dictionary. - keysToRemove do: [:each | - self - assertKey: each - wasRemovedfrom: dictionary]. - - self - assertIsDictionary: dictionary - withOrderedAssociations: (self orderedAssociationsAllButFirst: i)] -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testSelect [ - | dictionary | - - dictionary := self dictionaryWithOrderedAssociations. - self orderedValues do: [:value | | selectedValues | - selectedValues := self orderedValues copyWithout: value. - self - assertIsDictionary: - (dictionary select: [:each | - selectedValues includes: each]) - copiedFrom: dictionary - withOrderedAssociations: - (self orderedAssociations select: [:each | - selectedValues includes: each value])]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testSize [ - | dictionary | - - dictionary := self emptyDictionary. - self assert: dictionary size = 0. - - self orderedAssociations withIndexDo: [:each :i | - dictionary add: each. - self assert: dictionary size = i]. - - self orderedAssociations size to: 1 by: -1 do: [:i | - dictionary removeKey: (self orderedKeys at: i). - self assert: dictionary size = (i - 1)]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testValues [ - | dictionary | - - dictionary := self emptyDictionary. - self - assertIsArray: dictionary values - withElements: #(). - self orderedAssociations withIndexDo: [:each :i | - dictionary add: each. - self - assertIsArray: dictionary values - withElements: (self orderedValuesFirst: i)]. -] - -{ #category : #tests } -StandardOrderedDictionaryTest >> testValuesDo [ - | dictionary | - - dictionary := self emptyDictionary. - self - should: [:block | dictionary valuesDo: block] - enumerate: #(). - self orderedAssociations withIndexDo: [:each :i | - dictionary add: each. - self - should: [:block | dictionary valuesDo: block] - enumerate: (self orderedValuesFirst: i)]. -] diff --git a/src-archive/Collections-Tests-OrderPreservingDictionary/StandardOrderedIdentityDictionaryTest.class.st b/src-archive/Collections-Tests-OrderPreservingDictionary/StandardOrderedIdentityDictionaryTest.class.st deleted file mode 100644 index a077731f2..000000000 --- a/src-archive/Collections-Tests-OrderPreservingDictionary/StandardOrderedIdentityDictionaryTest.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #StandardOrderedIdentityDictionaryTest, - #superclass : #StandardOrderedDictionaryTest, - #category : #'Collections-Tests-OrderPreservingDictionary' -} - -{ #category : #accessing } -StandardOrderedIdentityDictionaryTest >> dictionaryClass [ - ^ StandardOrderedIdentityDictionary -] - -{ #category : #testing } -StandardOrderedIdentityDictionaryTest >> isTestingIdentityDictionary [ - ^ true -] diff --git a/src-archive/Collections-Tests-OrderPreservingDictionary/package.st b/src-archive/Collections-Tests-OrderPreservingDictionary/package.st deleted file mode 100644 index 6f6308ac9..000000000 --- a/src-archive/Collections-Tests-OrderPreservingDictionary/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Collections-Tests-OrderPreservingDictionary' } diff --git a/src-archive/DeepTraverser-Examples/DeepTraverserExamples.class.st b/src-archive/DeepTraverser-Examples/DeepTraverserExamples.class.st deleted file mode 100644 index 941b9ce68..000000000 --- a/src-archive/DeepTraverser-Examples/DeepTraverserExamples.class.st +++ /dev/null @@ -1,1059 +0,0 @@ -Class { - #name : #DeepTraverserExamples, - #superclass : #Object, - #category : #'DeepTraverser-Examples' -} - -{ #category : #'examples-difference' } -DeepTraverserExamples >> allMethodsArray [ - - | resultByRaw resultByTraverser | - - resultByRaw := Array allSubclasses - flatCollect: [ :each | each methods ]. - - resultByTraverser := Array - deep: #subclasses - flatCollect: [ :each | each methods ]. - - self assert: resultByRaw size = resultByTraverser size. - self assert: resultByRaw asSet = resultByTraverser asSet. - -] - -{ #category : #'examples-difference' } -DeepTraverserExamples >> allSuperclassesNumber [ - - | resultByRaw resultByTraverser | - resultByRaw := Number allSuperclasses. - resultByTraverser := Number deepCollect: #superclass. - - self assert: resultByRaw size = resultByTraverser size. - self assert: resultByRaw asSet = resultByTraverser asSet. - -] - -{ #category : #'examples-start-object' } -DeepTraverserExamples >> collectionAsStartOnObject [ - - | result1 result2 | - - result1 := { Object } - deep: #subclasses - flatCollect: [ :each | each methods ]. - - result2 := Object - deep: #subclasses - flatCollect: [ :each | each methods ]. - - self assert: result1 = result2. -] - -{ #category : #'examples-start-object' } -DeepTraverserExamples >> collectionAsWithStartOnObject [ - - | result1 result2 | - - result1 := { Object } - withDeep: #subclasses - flatCollect: [ :each | each methods ]. - - result2 := Object - withDeep: #subclasses - flatCollect: [ :each | each methods ]. - - self assert: result1 = result2. -] - -{ #category : #'examples-relations' } -DeepTraverserExamples >> collectionRelations [ - - | relations graph | - graph := self graph1. - relations := OrderedCollection new. - - (DeepTraverser new - onNodeTraverse: [ :each | self nextElementsFor: each inGraph: graph ]; - onEdgeAction: [ :from :to | relations add: from->to ]; - on: graph startWith: 0; - yourself) run. - - self assert: relations size = 4. - self assert: relations = { 0->1 . 1->2 . 1->3 . 2->3 } asOrderedCollection. - - ^ relations -] - -{ #category : #'examples-extensions' } -DeepTraverserExamples >> deepCollect [ - - - | result graph | - graph := self graph1. - result := 1 - deep: [ :each | self nextElementsFor: each inGraph: graph ] - collect: [ :each | each * 10 ]. - self assert: result = #( 20 30 ) asOrderedCollection -] - -{ #category : #'examples-extensions' } -DeepTraverserExamples >> deepCollectAs [ - - - | result graph | - graph := self graph1. - result := 1 - deep: [ :each | self nextElementsFor: each inGraph: graph ] - collect: [ :each | each * 10 ] - as: Set. - self assert: result = #( 20 30 ) asSet -] - -{ #category : #'examples-extensions' } -DeepTraverserExamples >> deepCollectAsSet [ - - - | result graph | - graph := self graph1. - result := 1 - deepCollectAsSet: [ :each | self nextElementsFor: each inGraph: graph ]. - self assert: result = #( 2 3 ) asSet -] - -{ #category : #'examples-extensions' } -DeepTraverserExamples >> deepCollectSimple [ - - - | result graph | - graph := self graph1. - result := 1 - deepCollect: [ :each | self nextElementsFor: each inGraph: graph ]. - self assert: result = #( 2 3 ) asOrderedCollection -] - -{ #category : #'examples-extensions' } -DeepTraverserExamples >> deepDo [ - - - | trace graph | - graph := self graph1. - trace := OrderedCollection new. - 1 - deep: [ :each | self nextElementsFor: each inGraph: graph ] - do: [ :each | trace add: each ]. - self assert: trace = #( 2 3 ) asOrderedCollection -] - -{ #category : #'examples-extensions' } -DeepTraverserExamples >> deepDoRelationDo [ - - - | trace relationTrace graph | - graph := self graph1. - trace := OrderedCollection new. - relationTrace := OrderedCollection new. - 1 - deep: [ :each | self nextElementsFor: each inGraph: graph ] - do: [ :each | trace add: each ] - relationDo: [ :from :to | relationTrace add: from->to ]. - self assert: trace = #( 2 3 ) asOrderedCollection. - self assert: relationTrace = { 1->2 . 1->3 . 2->3 } asOrderedCollection - -] - -{ #category : #'examples-extensions' } -DeepTraverserExamples >> deepEdgesDo [ - - - | trace graph | - graph := self graph1. - trace := OrderedCollection new. - 1 - deep: [ :each | self nextElementsFor: each inGraph: graph ] - edgesDo: [ :from :to | trace add: (from -> to) ]. - self assert: trace = { 1->2. 1->3. 2->3 } asOrderedCollection -] - -{ #category : #'examples-extensions' } -DeepTraverserExamples >> deepFlatCollect [ - - - | result graph | - graph := self graph1. - result := 1 - deep: [ :each | self nextElementsFor: each inGraph: graph ] - flatCollect: [ :each | 1 to: each ]. - self assert: result = #( 1 2 1 2 3 ) asOrderedCollection -] - -{ #category : #'examples-extensions' } -DeepTraverserExamples >> deepFlatCollectAs [ - - - | result graph | - graph := self graph1. - result := 1 - deep: [ :each | self nextElementsFor: each inGraph: graph ] - flatCollect: [ :each | 1 to: each ] - as: Set. - self assert: result = #( 1 2 3 ) asSet -] - -{ #category : #'examples-extensions' } -DeepTraverserExamples >> deepRelationDo [ - - - - | relationTrace graph | - graph := self graph1. - relationTrace := OrderedCollection new. - 1 - deep: [ :each | self nextElementsFor: each inGraph: graph ] - relationDo: [ :from :to | relationTrace add: from->to ]. - self assert: relationTrace = { 1->2 . 1->3 . 2->3 } asOrderedCollection - -] - -{ #category : #'examples-extensions' } -DeepTraverserExamples >> deepSelect [ - - - | result graph | - graph := self graph1. - result := 1 - deep: [ :each | self nextElementsFor: each inGraph: graph ] - select: [ :each | each < 3 ]. - self assert: result = #( 2 ) asOrderedCollection -] - -{ #category : #'examples-extensions' } -DeepTraverserExamples >> deepSelectCollectAs [ - - - | result graph | - graph := self graph1. - result := 1 - deep: [ :each | self nextElementsFor: each inGraph: graph ] - select: [ :each | each odd ] - collect: [ :each | each ] - as: Set. - self assert: result = #( 3 ) asSet -] - -{ #category : #utils } -DeepTraverserExamples >> deepTraverserOnGraph1 [ - - - | graph | - graph := self graph1. - ^ DeepTraverser new - onNodeTraverse: [ :each | self nextElementsFor: each inGraph: graph ]; - on: graph startWith: 0; - yourself -] - -{ #category : #utils } -DeepTraverserExamples >> deepTraverserWithoutActionOnGraph1 [ - - - | graph | - graph := self graph1. - ^ DeepTraverserWithoutAction new - onNodeTraverse: [ :each | self nextElementsFor: each inGraph: graph ]; - on: graph startWith: 0; - yourself -] - -{ #category : #utils } -DeepTraverserExamples >> deepTraverserWithoutEdgesOnGraph1 [ - - - | graph | - graph := self graph1. - ^ DeepTraverserWithoutEdges new - onNodeTraverse: [ :each | self nextElementsFor: each inGraph: graph ]; - on: graph startWith: 0; - yourself -] - -{ #category : #'as yet unclassified' } -DeepTraverserExamples >> extensionVSFullDeclaration [ - - | result1 result2 result3 result4 graph | - - graph := self graph1. - " traverser shortcuts " - result1 := $a - withDeep: [ :item | self nextElementsFor: item inGraph: graph ] - collect: [ :item | item ]. - - " traverser specs " - result2 := OrderedCollection new. - (DeepTraverser new - onNodeTraverse: [ :item | self nextElementsFor: item inGraph: graph ]; - onNodeAction: [ :item | result2 add: item ]; - on: graph startWith: $a; - yourself) run. - self assert: result1 = result2. - - " collection interface " - result3 := OrderedCollection new. - (DeepTraverser new - onNodeTraverse: [ :item | self nextElementsFor: item inGraph: graph ]; - on: graph startWith: $a; - yourself) do: [ :item | result3 add: item ]. - self assert: result1 = result3. - - " streaming interface " - result4 := (DeepTraverser new - onNodeTraverse: [ :item | self nextElementsFor: item inGraph: graph ]; - on: graph startWith: $a; - yourself) upToEnd. - self assert: result1 = result4. -] - -{ #category : #utils } -DeepTraverserExamples >> graph1 [ - - | graph | - graph := Dictionary new. - graph at: 0 put: { 1 }. - graph at: 1 put: { 2 . 3 }. - graph at: 2 put: { 3 }. - graph at: 4 put: { 3 }. - graph at: 10 put: { 11 }. - ^ graph -] - -{ #category : #utils } -DeepTraverserExamples >> graph2 [ - - | graph | - graph := Dictionary new. - graph at: 0 put: { 4. 1 }. - graph at: 1 put: { 4. 2 }. - graph at: 2 put: { 4. 3 }. - graph at: 3 put: { 4. }. - graph at: 4 put: { 4. 5 }. - ^ graph -] - -{ #category : #utils } -DeepTraverserExamples >> graph3 [ - - | graph | - graph := Dictionary new. - graph at: 0 put: { 4. 1 }. - graph at: 1 put: { 2 }. - graph at: 2 put: { 3 }. - graph at: 3 put: { 4. }. - graph at: 4 put: { 5 }. - ^ graph -] - -{ #category : #utils } -DeepTraverserExamples >> graph4 [ - - | graph | - graph := Dictionary new. - graph at: 0 put: #( 1 2 3 4 ). - graph at: 1 put: #( 5 6 ). - graph at: 2 put: #( 7 8 ). - graph at: 3 put: #( 9 10 ). - graph at: 4 put: #( 10 ). - graph at: 5 put: #( 6 ). - graph at: 6 put: #( 5 7 ). - graph at: 7 put: #( 8 9 ). - graph at: 8 put: #( 8 9 ). - graph at: 9 put: #( 10 ). - graph at: 10 put: #( 9 ). - ^ graph -] - -{ #category : #utils } -DeepTraverserExamples >> graph5 [ - - ^ Dictionary new - at: $a put: #( $b $c $d ); - at: $b put: #( $e $f ); - at: $c put: #( $g $f ); - at: $g put: #( $f ); - at: $d put: #( $h $i ); - at: $f put: #( $j $k ); - at: $k put: #( $b $c ); - yourself -] - -{ #category : #utils } -DeepTraverserExamples >> graph6 [ - - ^ Dictionary new - at: 0 put: #( 3 4 ); - at: 1 put: #( 5 ); - at: 2 put: #( 6 ); - at: 3 put: #( 4 7 8 ); - at: 4 put: #( 9 1 0 ); - at: 5 put: #( 4 9 10 11 6 2 ); - at: 6 put: #( 12 13 ); - at: 7 put: #( ); - at: 8 put: #( 8 9 7 ); - at: 9 put: #( 9 ); - at: 10 put: #( 9 5 0 1 2 ); - at: 11 put: #( 6 ); - at: 12 put: #( ); - at: 13 put: #( ); - yourself -] - -{ #category : #utils } -DeepTraverserExamples >> nextElementsFor: each inGraph: graph [ - ^ graph at: each ifAbsent: [ #() ] -] - -{ #category : #'examples-difference' } -DeepTraverserExamples >> plainTraverserAndWithActionWithoutEdgesAndWithActionWithEdges [ - - - - | result1 result2 result3 t1 t2 t3 | - t1 := self deepTraverserOnGraph1. - t2 := self deepTraverserWithoutActionOnGraph1. - t3 := self deepTraverserWithoutEdgesOnGraph1. - result1 := t1 upToEnd. - result2 := t2 upToEnd. - result3 := t3 upToEnd. - - self assert: result1 = result2. - self assert: result2 = result3. - self assert: result3 = result1. - - ^ { t1 . t2 . t3 } -] - -{ #category : #'examples-streaming' } -DeepTraverserExamples >> streamingAtEnd [ - - - | traverser | - traverser := self streamingNext. - self assert: traverser hasNext not. - self assert: traverser current isNil not. - self assert: traverser current equals: $k. - self assert: traverser atEnd. - - [ - traverser next. " oups " - ] on: CollectionIsEmpty do: [ - self assert: true. - ^ traverser ]. - self assert: false -] - -{ #category : #'examples-streaming' } -DeepTraverserExamples >> streamingNext [ - - | traverser | - traverser := self streamingTraverser. - - self assert: traverser hasNext. - self assert: traverser current isNil. - self assert: traverser position = 0. - - self assert: traverser next = $a. - self assert: traverser current = $a. - self assert: traverser previous isNil. - self assert: traverser position = 1. - - self assert: traverser next = $b. - self assert: traverser current = $b. - self assert: traverser previous = $a. - self assert: traverser position = 2. - - self assert: traverser next = $c. - self assert: traverser next = $d. - self assert: traverser next = $e. - self assert: traverser next = $f. - self assert: traverser next = $g. - self assert: traverser next = $h. - self assert: traverser next = $i. - self assert: traverser next = $j. - self assert: traverser next = $k. - - self assert: traverser atEnd. - - ^ traverser -] - -{ #category : #'examples-streaming' } -DeepTraverserExamples >> streamingNextElements [ - - | traverser | - traverser := self streamingTraverser. - - self assert: traverser hasNext. - self assert: traverser current isNil. - self assert: traverser position = 0. - self assert: traverser atEnd not. - - self assert: (traverser next: 1) = { $a }. - self assert: traverser atEnd not. - - self assert: (traverser next: 3) = { $b. $c. $d }. - self assert: traverser atEnd not. - - self assert: (traverser next: 4) = { $e. $f. $g. $h }. - self assert: traverser atEnd not. - - self assert: (traverser next: 100) = { $i. $j. $k. }. - self assert: traverser atEnd. - - self assert: (traverser next: 100) = {}. - self assert: traverser atEnd. - - self assert: (traverser next: 100) = {}. - self assert: traverser atEnd. - - ^ traverser -] - -{ #category : #'examples-streaming' } -DeepTraverserExamples >> streamingRestart [ - - | traverser | - traverser := self streamingNext. - - traverser reset. - - self assert: traverser hasNext. - self assert: traverser current isNil. - self assert: traverser position = 0. - - self assert: traverser atEnd not. -] - -{ #category : #'examples-streaming' } -DeepTraverserExamples >> streamingTraverser [ - - | graph | - graph := self graph5. - ^ DeepTraverserWithoutAction new - on: graph startWith: $a; - onNodeTraverse: [ :each | self nextElementsFor: each inGraph: graph ]; - yourself -] - -{ #category : #'examples-streaming' } -DeepTraverserExamples >> streamingUpToAnyExistingElement [ - - | traverser result | - traverser := self streamingUpToExistingElement. - - result := traverser upToAny: { $k. $i }. - self assert: result asArray = { $g. $h }. - self assert: traverser atEnd not. - - result := traverser upToAny: { $z. $y. $k }. - self assert: result asArray = { $j }. - - self assert: traverser current = $k. - self assert: traverser atEnd. - - ^ traverser -] - -{ #category : #'examples-streaming' } -DeepTraverserExamples >> streamingUpToAnyMatching [ - - | result traverser | - traverser := self streamingTraverser. - result := traverser upToAnyMatching: [ :node | node = $c ]. - self assert: result asArray = { $a. $b }. - self assert: traverser current = $c. - - result := traverser upToAnyMatching: [ :node | node asInteger > 102 and: [ node asInteger < 105 ] ]. - self assert: result asArray = { $d. $e. $f. }. - - ^ traverser -] - -{ #category : #'examples-streaming' } -DeepTraverserExamples >> streamingUpToEnd [ - - | result traverser | - traverser := self streamingTraverser. - result := traverser upToEnd. - self assert: result asArray = { $a. $b. $c. $d. $e. $f. $g. $h. $i. $j. $k }. - self assert: traverser atEnd. - - ^ traverser -] - -{ #category : #'examples-streaming' } -DeepTraverserExamples >> streamingUpToExistingElement [ - - | result traverser | - traverser := self streamingTraverser. - self assert: (traverser next: 2) = { $a. $b }. - - result := traverser upTo: $f. - self assert: result asArray = { $c. $d. $e }. - self assert: traverser current = $f. - - ^ traverser -] - -{ #category : #'examples-streaming' } -DeepTraverserExamples >> streamingUpToNonExistingElement [ - - - | result traverser | - - traverser := self streamingUpToExistingElement. - result := traverser upTo: $b. - self assert: result asArray = { $g. $h. $i. $j. $k }. - self assert: traverser atEnd. - - ^ traverser -] - -{ #category : #'examples-relations' } -DeepTraverserExamples >> subclassesOfNumber [ - - | relations traverser | - relations := OrderedCollection new. - - traverser := (DeepTraverser new - onNodeTraverse: #subclasses; - onEdgeAction: [ :from :to | - self assert: to superclass == from. - relations add: (from -> to) ]; - on: Number startWith: Number; - yourself) run. - - self assert: relations size = Number allSubclasses size. - - ^ relations -] - -{ #category : #'examples-relations' } -DeepTraverserExamples >> superclassOfSmallInteger [ - - | relations traverser | - relations := OrderedCollection new. - - traverser := (DeepTraverser new - onNodeTraverse: #superclass; - onEdgeAction: [ :from :to | - self assert: to == from superclass. - relations add: (from -> to) ]; - on: Number startWith: SmallInteger; - yourself) run. - - self assert: relations size = SmallInteger allSuperclasses size. - - ^ relations -] - -{ #category : #'examples-relations' } -DeepTraverserExamples >> testCyclesAndEdgesInGraph2 [ - - - | nodes edges traverser graph | - graph := self graph2. - nodes := OrderedCollection new. - edges := OrderedCollection new. - - traverser := DeepTraverser new - onNodeAction: [ :node | nodes add: node ]; - onEdgeAction: [ :from :to | edges add: (from -> to) ]; - onNodeTraverse: [ :each | self nextElementsFor: each inGraph: graph ]; - on: graph startWith: 0; - run. - - self assert: nodes = { 0. 4. 1. 5. 2. 3 } asOrderedCollection. - self assert: edges = { 0->4. 4->4. 0->1. 1->4. 4->5. 1->2. 2->4. 2->3. 3->4. } asOrderedCollection. - - ^ traverser -] - -{ #category : #'examples-relations' } -DeepTraverserExamples >> testCyclesAndEdgesInGraph3 [ - - | nodes edges traverser graph | - graph := self graph3. - - nodes := OrderedCollection new. - edges := OrderedCollection new. - - traverser := DeepTraverser new - onNodeAction: [ :node | nodes add: node ]; - onEdgeAction: [ :from :to | edges add: (from -> to) ]; - onNodeTraverse: [ :each | self nextElementsFor: each inGraph: graph ]; - on: graph startWith: 0; - run. - - self assert: nodes = { 0. 4. 1. 5. 2. 3 } asOrderedCollection. - self assert: edges = { 0->4. 0->1. 4->5. 1->2. 2->3. 3->4. } asOrderedCollection. - - ^ traverser -] - -{ #category : #'examples-relations' } -DeepTraverserExamples >> testTraversedNodesInGraph4WithStartAndWithoutStart [ - - - | resultWithStart resultWithoutStart | - resultWithStart := self testTraversedNodesWithStartInGraph4. - resultWithoutStart := self testTraversedNodesWithoutStartInGraph4. - self assert: resultWithStart = resultWithoutStart -] - -{ #category : #'examples-relations' } -DeepTraverserExamples >> testTraversedNodesInGraph4WithoutStartActionAndWithoutStart [ - - - | resultWithStartAction resultWithoutStart | - resultWithStartAction := self testTraversedNodesWithoutStartActionInGraph4. - resultWithoutStart := self testTraversedNodesWithoutStartInGraph4. - self assert: resultWithStartAction = resultWithoutStart -] - -{ #category : #'examples-relations' } -DeepTraverserExamples >> testTraversedNodesWithStartInGraph4 [ - - - | traverser traversedNodes graph | - graph := self graph4. - traverser := DeepTraverserWithoutAction new - onNodeTraverse: [ :each | self nextElementsFor: each inGraph: graph ]; - on: graph startWith: 0; - yourself. - - traversedNodes := traverser upToEnd. - self assert: traversedNodes = #( 0 1 2 3 4 5 6 7 8 9 10 ) asOrderedCollection. - - ^ traversedNodes -] - -{ #category : #'examples-relations' } -DeepTraverserExamples >> testTraversedNodesWithStartInGraph6 [ - - - | traverser traversedNodes nodesWithAction edgesWithAction graph | - graph := self graph6. - nodesWithAction := OrderedCollection new. - edgesWithAction := OrderedCollection new. - - traverser := DeepTraverser new - onNodeTraverse: [ :each | self nextElementsFor: each inGraph: graph ]; - onNodeAction: [ :node | nodesWithAction add: node ]; - onEdgeAction: [ :from :to | edgesWithAction add: (from -> to) ]; - on: graph startWithAll: #( 0 1 2 ); - yourself. - - traversedNodes := traverser upToEnd. - - self assert: traversedNodes = nodesWithAction. - self assert: traversedNodes = { 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. } asOrderedCollection. - - self assert: edgesWithAction = { 0->3. 0->4. 3->4. 4->1. 4->0. 1->5. 5->4. 5->2. 2->6. 5->6. 3->7. 3->8. 8->8. 8->7. 4->9. 5->9. 8->9. 9->9. 5->10. 10->9. 10->5. 10->0. 10->1. 10->2. 5->11. 11->6. 6->12. 6->13 } asOrderedCollection. - ^ traverser - -] - -{ #category : #'examples-relations' } -DeepTraverserExamples >> testTraversedNodesWithoutAllInGraph4 [ - - - - | traverser traversedNodes nodesWithAction graph | - graph := self graph4. - nodesWithAction := OrderedCollection new. - traverser := DeepTraverserWithoutAction new - onNodeTraverse: [ :each | self nextElementsFor: each inGraph: graph ]; - on: graph startWithoutAll: #( 0 1 2 3 4 ); - yourself. - - traversedNodes := traverser upToEnd. - self assert: traversedNodes = #( 0 1 2 3 4 5 6 7 8 9 10 ) asOrderedCollection. - nodesWithAction = #( 5 6 7 8 9 10 ) asOrderedCollection. - - ^ traversedNodes -] - -{ #category : #'examples-relations' } -DeepTraverserExamples >> testTraversedNodesWithoutStartActionInGraph4 [ - - - | nodesByAction traverser traversedNodes graph | - graph := self graph4. - - nodesByAction := OrderedCollection new. - traverser := DeepTraverserWithoutEdges new - onNodeTraverse: [ :each | self nextElementsFor: each inGraph: graph ]; - onNodeAction: [ :each | nodesByAction add: each ]; - on: graph startWithout: 0; - yourself. - traversedNodes := traverser upToEnd. - - self assert: traversedNodes = #( 0 1 2 3 4 5 6 7 8 9 10 ) asOrderedCollection. - self assert: nodesByAction = #( 1 2 3 4 5 6 7 8 9 10 ) asOrderedCollection. - - ^ traversedNodes - -] - -{ #category : #'examples-relations' } -DeepTraverserExamples >> testTraversedNodesWithoutStartInGraph4 [ - - - | traverser traversedNodes graph | - graph := self graph4. - traverser := DeepTraverserWithoutAction new - onNodeTraverse: [ :each | self nextElementsFor: each inGraph: graph ]; - on: graph startWithout: 0; - yourself. - - traversedNodes := traverser upToEnd. - self assert: traversedNodes = #( 0 1 2 3 4 5 6 7 8 9 10 ) asOrderedCollection. - - ^ traversedNodes -] - -{ #category : #'examples-start-object' } -DeepTraverserExamples >> variationsOfDeepCollect [ - - | result1 result2 result3 | - - result1 := { Collection } deepCollect: #subclasses as: Set. - result2 := Collection deepCollect: #subclasses as: Set. - result3 := Collection allSubclasses asSet. - - self assert: result1 = result2. - self assert: result2 = result3. - self assert: result3 = result1. -] - -{ #category : #'examples-start-object' } -DeepTraverserExamples >> variationsOfDeepCollectOfMultipleClasses [ - - | result1 result2 result3 result4 | - - result1 := { Collection . Exception } deepCollect: #subclasses as: Set. - result2 := (Collection deepCollect: #subclasses as: Set) , (Exception deepCollect: #subclasses as: Set). - result3 := ({ Collection } deepCollect: #subclasses as: Set) , ({ Exception } deepCollect: #subclasses as: Set). - result4 := (Collection allSubclasses , Exception allSubclasses) asSet. - - self assert: result1 = result2. - self assert: result2 = result3. - self assert: result3 = result4. - self assert: result4 = result1. -] - -{ #category : #'examples-start-object' } -DeepTraverserExamples >> variationsOfWithDeepCollect [ - - | result1 result2 result3 | - - result1 := { Collection } withDeepCollect: #subclasses as: Set. - result2 := Collection withDeepCollect: #subclasses as: Set. - result3 := Collection withAllSubclasses asSet. - - self assert: result1 = result2. - self assert: result2 = result3. - self assert: result3 = result1. -] - -{ #category : #'examples-start-object' } -DeepTraverserExamples >> variationsOfWithDeepCollectOfMultipleClasses [ - - | result1 result2 result3 result4 | - - result1 := { Collection . Exception } withDeepCollect: #subclasses as: Set. - result2 := (Collection withDeepCollect: #subclasses as: Set) , (Exception withDeepCollect: #subclasses as: Set). - result3 := ({ Collection } withDeepCollect: #subclasses as: Set) , ({ Exception } withDeepCollect: #subclasses as: Set). - result4 := (Collection withAllSubclasses , Exception withAllSubclasses) asSet. - - self assert: result1 = result2. - self assert: result2 = result3. - self assert: result3 = result4. - self assert: result4 = result1. -] - -{ #category : #'examples-difference' } -DeepTraverserExamples >> withAllSubclassesCollection [ - - | resultByRaw resultByTraverser | - resultByRaw := Collection withAllSubclasses. - resultByTraverser := Collection withDeepCollect: #subclasses. - - self assert: resultByRaw size = resultByTraverser size. - self assert: resultByRaw asSet = resultByTraverser asSet. - -] - -{ #category : #'examples-difference' } -DeepTraverserExamples >> withAllSubclassesNumber [ - - | resultByRaw resultByTraverser | - resultByRaw := Number withAllSubclasses. - resultByTraverser := Number withDeepCollect: #subclasses. - - self assert: resultByRaw size = resultByTraverser size. - self assert: resultByRaw asSet = resultByTraverser asSet. - -] - -{ #category : #'examples-extensions' } -DeepTraverserExamples >> withDeepCollect [ - - - | result graph | - graph := self graph1. - result := 1 - withDeepCollect: [ :each | self nextElementsFor: each inGraph: graph ]. - self assert: result = #( 1 2 3 ) asOrderedCollection -] - -{ #category : #'examples-extensions' } -DeepTraverserExamples >> withDeepCollectAs [ - - - | result graph | - graph := self graph1. - result := 1 - withDeepCollect: [ :each | self nextElementsFor: each inGraph: graph ] - as: Set. - self assert: result asSet = #( 1 2 3 ) asSet -] - -{ #category : #'examples-extensions' } -DeepTraverserExamples >> withDeepDo [ - - - | trace graph | - graph := self graph1. - trace := OrderedCollection new. - 1 - withDeep: [ :each | self nextElementsFor: each inGraph: graph ] - do: [ :each | trace add: each ]. - self assert: trace = #( 1 2 3 ) asOrderedCollection -] - -{ #category : #'examples-extensions' } -DeepTraverserExamples >> withDeepDoRelationDo [ - - - | trace relationTrace graph | - graph := self graph1. - trace := OrderedCollection new. - relationTrace := OrderedCollection new. - - 1 - withDeep: [ :each | self nextElementsFor: each inGraph: graph ] - do: [ :each | trace add: each ] - relationDo: [ :from :to | relationTrace add: from->to ]. - self assert: trace = #( 1 2 3 ) asOrderedCollection. - self assert: relationTrace = { 1->2 . 1->3 . 2->3 } asOrderedCollection -] - -{ #category : #'examples-extensions' } -DeepTraverserExamples >> withDeepEdgesDo [ - - - | trace graph | - graph := self graph1. - trace := OrderedCollection new. - 0 - withDeep: [ :each | self nextElementsFor: each inGraph: graph ] - edgesDo: [ :from :to | trace add: (from -> to) ]. - self assert: trace = { 0->1. 1->2. 1->3. 2->3 } asOrderedCollection -] - -{ #category : #'examples-extensions' } -DeepTraverserExamples >> withDeepFlatCollect [ - - - | result graph | - graph := self graph1. result := 1 - withDeep: [ :each | self nextElementsFor: each inGraph: graph ] - flatCollect: [ :each | each to: 4 ]. - self assert: result = #( 1 2 3 4 2 3 4 3 4 ) asOrderedCollection -] - -{ #category : #'examples-extensions' } -DeepTraverserExamples >> withDeepFlatCollectAs [ - - - | result graph | - graph := self graph1. - result := 1 - withDeep: [ :each | self nextElementsFor: each inGraph: graph ] - flatCollect: [ :each | each to: 4 ] - as: Set. - self assert: result = #( 1 2 3 4 2 3 4 3 4 ) asSet -] - -{ #category : #'examples-extensions' } -DeepTraverserExamples >> withDeepRelationDo [ - - - | relationTrace graph | - graph := self graph1. - relationTrace := OrderedCollection new. - - 1 - withDeep: [ :each | self nextElementsFor: each inGraph: graph ] - relationDo: [ :from :to | relationTrace add: from->to ]. - self assert: relationTrace = { 1->2 . 1->3 . 2->3 } asOrderedCollection. -] - -{ #category : #'examples-extensions' } -DeepTraverserExamples >> withDeepSelectCollect [ - - - | result graph | - graph := self graph1. - result := 1 - withDeep: [ :each | self nextElementsFor: each inGraph: graph ] - select: [ :each | each odd ] - collect: [ :each | each * 10 ]. - self assert: result = #( 10 30 ) asOrderedCollection -] - -{ #category : #'examples-extensions' } -DeepTraverserExamples >> withDeepSelectCollectAs [ - - - | result graph | - graph := self graph1. - result := 1 - withDeep: [ :each | self nextElementsFor: each inGraph: graph ] - select: [ :each | each odd ] - collect: [ :each | each ] - as: Set. - self assert: result = #( 1 3 ) asSet -] - -{ #category : #'examples-specs' } -DeepTraverserExamples >> withVSwithout [ - - | result1 result2 diff21 diff12 | - - result1 := { Collection } - deep: #subclasses - flatCollect: [ :each | each methods ]. - - result2 := Collection - withDeep: #subclasses - flatCollect: [ :each | each methods ]. - - self assert: result1 ~= result2. - self assert: result1 asSet ~= result2 asSet. - - self assert: (diff21 := result2 asSet difference: result1 asSet) notEmpty. - self assert: (diff12 := result1 asSet difference: result2 asSet) isEmpty. - - self assert: (diff21 allSatisfy: [ :cm | cm methodClass = Collection ]). - self assert: diff21 asSet = Collection methods asSet -] diff --git a/src-archive/DeepTraverser-Examples/package.st b/src-archive/DeepTraverser-Examples/package.st deleted file mode 100644 index 8f6eab89e..000000000 --- a/src-archive/DeepTraverser-Examples/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'DeepTraverser-Examples' } diff --git a/src-archive/Dynamix-Core/DynamixActivation.class.st b/src-archive/Dynamix-Core/DynamixActivation.class.st deleted file mode 100644 index 801ed3638..000000000 --- a/src-archive/Dynamix-Core/DynamixActivation.class.st +++ /dev/null @@ -1,417 +0,0 @@ -" -DynamixActivation represents one execution of a behavioural entity. For example, in the case of object-oriented systems, the behaviour is a FAMIXMethod and an activation represents one execution of this method, typically within the context of a larger execution trace. Multiple executions of the same behaviour is represented with multiple activation objects that will be linked to the same behaviour. - -An activation also holds information regarding the objects involved in the execution, namely: -- receiver points to the reference of the object whithin whose context the activation happens -- arguments holds the actual exeuction values corresponding to the parameters of the behavioural entity -- return points to the reference of the object that is returned by the execution -" -Class { - #name : #DynamixActivation, - #superclass : #DynamixEvent, - #instVars : [ - 'receiver', - 'behaviour', - 'arguments', - 'return' - ], - #category : #'Dynamix-Core' -} - -{ #category : #meta } -DynamixActivation class >> annotation [ - - -] - -{ #category : #accessing } -DynamixActivation >> aliases [ - | aliases | - aliases := self arguments select: [:each | each isAlias]. - self receiver isAlias ifTrue: [aliases add: self receiver]. - self return isAlias ifTrue: [aliases add: self return]. - ^ aliases -] - -{ #category : #accessing } -DynamixActivation >> arguments [ - - - - ^ arguments -] - -{ #category : #accessing } -DynamixActivation >> arguments: anObject [ - arguments value: anObject -] - -{ #category : #accessing } -DynamixActivation >> behaviour [ - - - - ^ behaviour -] - -{ #category : #accessing } -DynamixActivation >> behaviour: aBehaviouralEntity [ - behaviour := FMMultivalueLink - on: self - update: #activations - from: self behaviour - to: aBehaviouralEntity -] - -{ #category : #compressing } -DynamixActivation >> checkChildrenForNonContiguousSequence: aList [ -"This is the algoritm" - | maxlen i checkpos len found candidateSequence | - found := false. - len := aList size. - i := 1. - maxlen := (len/2) asInteger. - [i < (len - 1 )] whileTrue:[ - checkpos := i + 1. "start checking by comparing with element offset by one" - candidateSequence := OrderedCollection new. - candidateSequence addLast: (aList at: i). " set the first element of a candidate sequence" - [ checkpos < ( i + maxlen) and: [found not ] ] whileTrue: [ - ((aList at: i ) isSameMethodAs: (aList at: checkpos)) - ifTrue: [ found := true.] - ifFalse: [ candidateSequence addLast: (aList at:checkpos). - checkpos := checkpos + 1]. - ]. - found - ifTrue: [ (aList at: i) sequence: 1. "Mark the first occurance" - (aList at: i) seqitemsAddList: candidateSequence. - i := self checkForMoreMatchesFrom: candidateSequence to: aList at: checkpos. - maxlen := ((len + 1 ) / 2) asInteger. ] - ifFalse: [ i := i + 1. - maxlen := ((len - 1) / 2 ) asInteger.]. - ] -] - -{ #category : #compressing } -DynamixActivation >> checkChildrenForSequence: aList [ - | length i j startpos | - length := aList size. - length < 2 ifTrue: [^self]. - i := 1. - j := 2. - startpos := i. - [j <= length] whileTrue: - [((aList at: i) isSameMethodAs: (aList at: j)) - ifFalse: - [j - startpos > 1 - ifTrue: - [(aList at: startpos) sequence: j - i. - startpos := j. - i := startpos] - ifFalse: - [i := i + 1. - startpos := i]] - ifTrue: [ (aList at: j ) sequence: 1. - (aList at: j) setSubtreeNotDisplayable ]. - j := j + 1]. - - j - i > 1 ifTrue: [(aList at: startpos) sequence: j - i] -] - -{ #category : #compressing } -DynamixActivation >> checkForMoreMatchesFrom: aCandidateSequence to: aOriginalList at: checkPosition [ - | currentPosition originalStartPosInList | - originalStartPosInList := checkPosition - ( aCandidateSequence size). - currentPosition := checkPosition. - "While not finished checking original sequence " - [ currentPosition - 1 + aCandidateSequence size < aOriginalList size ] - whileTrue: [( self compare: aCandidateSequence with: aOriginalList from: currentPosition ) - ifTrue: [ (aOriginalList at: originalStartPosInList) sequence: (((aOriginalList at: originalStartPosInList) sequence) + 1 ). - (currentPosition = originalStartPosInList) - ifFalse: [(aOriginalList at: currentPosition) setNotdisplayable.]. - currentPosition := currentPosition + aCandidateSequence size. - ] - ]. - ^currentPosition -] - -{ #category : #compressing } -DynamixActivation >> checkForNonContiguousSequence [ - self allChildrenDo: [:each | each checkChildrenForNonContiguousSequence: (each children) ]. -] - -{ #category : #compressing } -DynamixActivation >> checkForSequence [ - self allChildrenDo: [:each | self checkChildrenForSequence: (each children) ]. -] - -{ #category : #'accessing-derived' } -DynamixActivation >> classOfMethod [ - ^ self method belongsTo -] - -{ #category : #'accessing-derived' } -DynamixActivation >> classOfReceiver [ - "If receiver is nil, fallback to the class of the method, which may be a superclass" - - ^ self receiver isNil - ifFalse: [ self receiver type ] - ifTrue: [ self classOfMethod ] -] - -{ #category : #compressing } -DynamixActivation >> compare: aCandidateSequence with: aList from: startpos [ - | i j | - i := startpos. - j := 1. - [ (j <= aCandidateSequence size) and: [ (aList at: i) isSameMethodAs: (aCandidateSequence at: j)]] - whileTrue: [ i := i + 1. - j := j + 1 ]. - ^(j - 1 = aCandidateSequence size) -] - -{ #category : #printing } -DynamixActivation >> gtDisplayOn: stream [ - self behaviour isNil - ifTrue: [stream nextPutAll: 'Unknown activation'] - ifFalse: [self behaviour gtDisplayOn: stream ]. - stream - nextPutAll: ' ('; - nextPutAll: self duration asString; - nextPut: $) -] - -{ #category : #testing } -DynamixActivation >> hasReturnValue [ - ^self return notNil and: [ self return ~= self receiver ] -] - -{ #category : #testing } -DynamixActivation >> hasSideEffect [ - ^ self exported notEmpty -] - -{ #category : #initialize } -DynamixActivation >> initialize [ - super initialize. - arguments := FMMultiMultivalueLink on: self opposite: #activationsWithArgument -] - -{ #category : #testing } -DynamixActivation >> isActivation [ - ^ true -] - -{ #category : #testing } -DynamixActivation >> isDelegatingMethod [ - ^ self hasSideEffect not - and: [ self imported isEmpty ] - and: [ self children size = 1 ] -] - -{ #category : #testing } -DynamixActivation >> isSameMethodAs: aActivation [ - ^ self method = aActivation method and: [ self parent = aActivation parent ] -] - -{ #category : #testing } -DynamixActivation >> isSelfMessage [ - "Test whether the current receiver reference is the same as the one which sent the message" - - ^self sender = self receiver -] - -{ #category : #testing } -DynamixActivation >> isStartOfSequence [ - - ^self sequence > 1 -] - -{ #category : #'accessing-derived' } -DynamixActivation >> leaves [ - "returns an ordered Collection of all the leaf nodes of a tree" - | stream | - stream := Array new writeStream. - self allLeavesDo: [ :each | stream nextPut: each ]. - ^stream contents -] - -{ #category : #'accessing-derived' } -DynamixActivation >> level [ - - self parent ifNil: [^0]. - ^self parent level + 1. - - "self parent ifNil: [^0]. - ^self parent isSelfMessage - ifFalse: [ 1 ] - ifTrue: [ self parent level + 1 ]" -] - -{ #category : #'accessing-derived' } -DynamixActivation >> maxDepth [ - | maxLevel max | - maxDepth := 0. - self children notEmpty - ifTrue: [ - maxLevel := 0. - self allChildren do: [:ea | (ea level > maxLevel) ifTrue: [maxLevel := ea level]]. - max := maxLevel - self level ]. - ^ max -] - -{ #category : #'accessing-derived' } -DynamixActivation >> method [ - ^ self behaviour -] - -{ #category : #'accessing-derived' } -DynamixActivation >> nodesAtLevel: aLevel [ - "returns an ordered Collection of all the nodes of a tree at a given level" - - ^self sortedChildren select: [ :each | each level = aLevel ]. -] - -{ #category : #'accessing-derived' } -DynamixActivation >> nonleaves [ - "returns an ordered Collection of all the non leaf nodes of a tree" - | stream | - stream := Array new writeStream. - self allNonleavesDo: [ :each | stream nextPut: each ]. - ^stream contents -] - -{ #category : #'accessing-derived' } -DynamixActivation >> notdisplayable [ - - ^ (self properties includesKey: #notdisplayable ) -] - -{ #category : #printing } -DynamixActivation >> printOn: aStream [ - aStream - nextPutAll: 'an '; - nextPutAll: self class name; - space. - self method - ifNotNil: [ - aStream - nextPut: ${; - nextPutAll: self method name; - nextPut: $} ] -] - -{ #category : #accessing } -DynamixActivation >> receiver [ - - - - ^ receiver -] - -{ #category : #accessing } -DynamixActivation >> receiver: aReference [ - receiver := FMMultivalueLink - on: self - update: #activationsWithReceiver - from: self receiver - to: aReference -] - -{ #category : #accessing } -DynamixActivation >> return [ - - - - ^ return -] - -{ #category : #accessing } -DynamixActivation >> return: aReference [ - return := FMMultivalueLink - on: self - update: #activationsWithReturn - from: self return - to: aReference -] - -{ #category : #'accessing-derived' } -DynamixActivation >> returnAliases [ - "Aliases of object returned to this activation, not to be confused with the alias returned from this activation (#return)" - - ^ self aliases select: [ :each | each isReturnAlias] -] - -{ #category : #testing } -DynamixActivation >> returnsPureObject [ - | root | - "self hasReturnValue ifFalse: [ ^ false ]. - (self return isKindOf: Alias) ifFalse: [ ^ false ]. - root := self return rootAlias. - root isNil ifTrue: [ ^ false ]." - ^ self withAllChildren includes: root creator -] - -{ #category : #'accessing-derived' } -DynamixActivation >> sender [ - "The reference which sent the message" - - ^ self parent notNil ifTrue: [ self parent receiver ] -] - -{ #category : #'accessing-derived' } -DynamixActivation >> seqitemsAddList: anItemList [ - "saves nodes belonging to the sequence" - - self propertyNamed: #seqitems put: (self seqitems addAll: anItemList). -] - -{ #category : #'accessing-derived' } -DynamixActivation >> sequence [ - "comment stating purpose of message" - self propertyNamed: #seqsize - ifNil:[^0]. - ^self propertyNamed: #seqsize -] - -{ #category : #'accessing-derived' } -DynamixActivation >> sequence: aLength [ - "comment stating purpose of message" - self propertyNamed: #seqsize put: aLength. - "self propertyNamed: #seqsize ifAbsentPut: [ aLength ]." -] - -{ #category : #'accessing-derived' } -DynamixActivation >> setNotdisplayable [ - "comment stating purpose of message" - ^(self propertyNamed: #notdisplayable ifAbsentPut: [1] ) -] - -{ #category : #displaying } -DynamixActivation >> setSubtreeNotDisplayable [ - self allChildren do: [:each | each setNotdisplayable]. -] - -{ #category : #'accessing-derived' } -DynamixActivation >> signature [ - "lazy evaluation (recursive) of signatures for nodes" - | aSignature | - self propertyNamed: #signature - ifNil: [ aSignature := self method printString. - self children do: [:each | aSignature := aSignature, each signature ]. - self signature: aSignature. - ]. - ^self propertyNamed: #signature -] - -{ #category : #'accessing-derived' } -DynamixActivation >> signature: aSignature [ - "sets the signature for a name" - self propertyNamed: #signature put: aSignature. -] - -{ #category : #'accessing-derived' } -DynamixActivation >> stack [ - ^self parent isNil - ifFalse: [ self parent stack copyWith: self ] - ifTrue: [ Array with: self ] -] diff --git a/src-archive/Dynamix-Core/DynamixAlias.class.st b/src-archive/Dynamix-Core/DynamixAlias.class.st deleted file mode 100644 index 305e4ff83..000000000 --- a/src-archive/Dynamix-Core/DynamixAlias.class.st +++ /dev/null @@ -1,179 +0,0 @@ -" -The Alias models the usage of an instance in an event. -" -Class { - #name : #DynamixAlias, - #superclass : #DynamixReference, - #instVars : [ - 'subject', - 'ancestor', - 'descendants', - 'creator', - 'timestamp' - ], - #category : #'Dynamix-Core' -} - -{ #category : #meta } -DynamixAlias class >> annotation [ - - -] - -{ #category : #'accessing-derived' } -DynamixAlias >> allDescendants [ - | collection result | - collection := self descendants. - result := collection isEmpty - ifTrue: [ collection ] - ifFalse: [ (collection flatCollect: [ :each | each allDescendants ]) , collection ]. - (result size > self subject aliases size) ifTrue: [ self error: 'Sanity check... this is impossible' ]. - ^ result -] - -{ #category : #accessing } -DynamixAlias >> ancestor [ - ^ ancestor -] - -{ #category : #accessing } -DynamixAlias >> ancestor: anObject [ - ancestor := anObject -] - -{ #category : #'accessing-derived' } -DynamixAlias >> ancestorFoundIn: aCollection [ - self isRoot ifTrue: [ ^nil ]. - ^ (aCollection includes: self ancestor) - ifTrue: [ self ancestor ] - ifFalse: [ self ancestor ancestorFoundIn: aCollection ] -] - -{ #category : #'accessing-derived' } -DynamixAlias >> ancestoryChain [ - "Including self" - - self isRoot ifTrue: [ ^ Array with: self ]. - ^ (Array with: self) , self ancestor ancestoryChain -] - -{ #category : #'accessing-derived' } -DynamixAlias >> cachedAllDescendants [ - ^ self - propertyNamed: #allDescendants - ifAbsentPut: [ self allDescendants ] -] - -{ #category : #'accessing-derived' } -DynamixAlias >> clientAlias [ - ^ self creator ifNotNil: [ :each | each receiver ] -] - -{ #category : #'accessing-derived' } -DynamixAlias >> clientClass [ - "following code could be used alternatively in case clientInstance isNil, but it may return a superclass: - self creator ifNotNil: [ self creator method belongsTo ]." - - ^ self clientInstance ifNotNil: [ :object | object type ] -] - -{ #category : #'accessing-derived' } -DynamixAlias >> clientClassId [ - ^ self clientClass isNil - ifTrue: [ 'unknown' ] - ifFalse: [ self clientClass name ] -] - -{ #category : #'accessing-derived' } -DynamixAlias >> clientInstance [ - ^ self clientAlias ifNotNil: [ :each | each subject ] -] - -{ #category : #'accessing-derived' } -DynamixAlias >> clientName [ - | clientClassName clientClassMethod activationReturnedFrom | - self creator ifNil: [ ^'n/a' ]. - activationReturnedFrom := self creator children detect: [ :each | each return = self ] ifNone: [ nil ]. - clientClassName := activationReturnedFrom - ifNotNil: [ :activation | activation classOfReceiver name ] ifNil: [ '?' ]. - clientClassMethod := activationReturnedFrom - ifNotNil: [ :activation | activation method name ] ifNil: [ '?' ]. - ^ clientClassName , '>>' , clientClassMethod -] - -{ #category : #accessing } -DynamixAlias >> creator [ - ^ creator -] - -{ #category : #accessing } -DynamixAlias >> creator: anObject [ - creator := anObject -] - -{ #category : #'accessing-derived' } -DynamixAlias >> definingClass [ - "Note, in contrast to #clientMethod we get the class in which the variable is statically defined, which may be a superclass of the subject instance!" - ^ self variable isNil - ifFalse: [ self variable definingClass ] - ifTrue: [ self clientClass ] -] - -{ #category : #'accessing-derived' } -DynamixAlias >> depth [ - ^self ancestor ifNil: [ 1 ] ifNotNil: [ 1 + self ancestor depth ] -] - -{ #category : #'accessing-derived' } -DynamixAlias >> descendants [ - descendants ifNil: [ - descendants := OrderedCollection new - "descendants := self subject aliases select: [ :each | each ancestor == self ]" ]. - descendants asSet size = descendants size ifFalse: [ self error: 'Sanity check: how is this possible?!' ]. - ^ descendants -] - -{ #category : #accessing } -DynamixAlias >> descendants: anObject [ - descendants := anObject -] - -{ #category : #'accessing-derived' } -DynamixAlias >> externalActivations [ - ^ self activations reject: [ :each | - each isSelfMessage ] -] - -{ #category : #'accessing-derived' } -DynamixAlias >> feature [ - ^ self trace -] - -{ #category : #testing } -DynamixAlias >> isAlias [ - ^ true -] - -{ #category : #accessing } -DynamixAlias >> subject [ - ^ subject -] - -{ #category : #accessing } -DynamixAlias >> subject: anObject [ - subject := anObject -] - -{ #category : #accessing } -DynamixAlias >> timestamp [ - "Work around wiretab missing timestamp" - - ^timestamp - ifNotNil: [ timestamp asNumber ] - ifNil: [ self creator start + 1 ] -] - -{ #category : #accessing } -DynamixAlias >> timestamp: anObject [ - timestamp := anObject -] diff --git a/src-archive/Dynamix-Core/DynamixEntity.class.st b/src-archive/Dynamix-Core/DynamixEntity.class.st deleted file mode 100644 index 13df42198..000000000 --- a/src-archive/Dynamix-Core/DynamixEntity.class.st +++ /dev/null @@ -1,44 +0,0 @@ -" -The root entity. -" -Class { - #name : #DynamixEntity, - #superclass : #MooseEntity, - #category : #'Dynamix-Core' -} - -{ #category : #meta } -DynamixEntity class >> annotation [ - - -] - -{ #category : #testing } -DynamixEntity >> isActivation [ - ^ false -] - -{ #category : #testing } -DynamixEntity >> isAlias [ - ^ false -] - -{ #category : #testing } -DynamixEntity >> isInstance [ - ^ false -] - -{ #category : #testing } -DynamixEntity >> isReference [ - ^ false -] - -{ #category : #testing } -DynamixEntity >> isReturn [ - ^ false -] - -{ #category : #testing } -DynamixEntity >> isTrace [ - ^ false -] diff --git a/src-archive/Dynamix-Core/DynamixEvent.class.st b/src-archive/Dynamix-Core/DynamixEvent.class.st deleted file mode 100644 index a86ac56a0..000000000 --- a/src-archive/Dynamix-Core/DynamixEvent.class.st +++ /dev/null @@ -1,350 +0,0 @@ -" -DMXEvent is an abstract representation of a dynamic event. - -In its abstract form, it holds children events and a reference to the parent event. This structure models an execution tree. - -As an extra piece of information, it also provides information regarding the duration of the execution: -- the duration can be encoded as a number in the duration instance variable or, -- as start and stop timestamps in the respective instance variables. - -The source instance variable can hold a reference to possible information source. For example, the source can point to a log entry or a raw event. -" -Class { - #name : #DynamixEvent, - #superclass : #DynamixEntity, - #instVars : [ - 'parent', - 'children', - 'start', - 'stop', - 'duration', - 'source' - ], - #category : #'Dynamix-Core' -} - -{ #category : #meta } -DynamixEvent class >> annotation [ - - -] - -{ #category : #'accessing-derived' } -DynamixEvent >> accumulatedLeavesDuration [ - - - | sum | - sum := 0. - self withAllChildrenDo: [:each | - each isLeaf ifTrue: [ sum := sum + each duration ]]. - ^ sum -] - -{ #category : #accessing } -DynamixEvent >> activations [ - ^ self children -] - -{ #category : #accessing } -DynamixEvent >> addChild: event [ - - children := self children copyWith: event. - ^self lastChild. -] - -{ #category : #accessing } -DynamixEvent >> allActivations [ - - | stream | - stream := OrderedCollection new writeStream. - self allChildrenDo: [ :each | (each isActivation and: [each method notNil] ) ifTrue: [ stream nextPut: each ]]. - ^stream contents -] - -{ #category : #accessing } -DynamixEvent >> allChildren [ - - | stream | - stream := OrderedCollection new writeStream. - self allChildrenDo: [ :each | stream nextPut: each ]. - ^stream contents -] - -{ #category : #enumerating } -DynamixEvent >> allChildrenDo: aBlock [ - - self childrenDo: [ :each | - aBlock value: each. - each allChildrenDo: aBlock ] -] - -{ #category : #enumerating } -DynamixEvent >> allLeavesDo: aBlock [ - self withAllChildrenDo: [:each | each isLeaf ifTrue: [aBlock value: each] ]. - -] - -{ #category : #enumerating } -DynamixEvent >> allNonleavesDo: aBlock [ - self withAllChildrenDo: [:each | each isLeaf ifFalse: [aBlock value: each] ]. -] - -{ #category : #enumerating } -DynamixEvent >> allParentsDo: aBlock [ - self parent isNil ifTrue: [^ self]. - aBlock value: self parent. - self parent allParentsDo: aBlock -] - -{ #category : #accessing } -DynamixEvent >> behaviour [ - ^ nil -] - -{ #category : #accessing } -DynamixEvent >> children [ - - - - ^ children -] - -{ #category : #accessing } -DynamixEvent >> children: anObject [ - children value: anObject. -] - -{ #category : #enumerating } -DynamixEvent >> childrenDo: aBlock [ - children notNil ifTrue: [ children do: aBlock ] -] - -{ #category : #private } -DynamixEvent >> compact [ - - self children isEmpty - ifTrue: [ children := nil ] - ifFalse: [ children := self children asArray ] -] - -{ #category : #converting } -DynamixEvent >> copyChildrenFilterSelect: aBlock parent: newParent [ - - ^children ifNotNil: [ - | stream | - stream := (OrderedCollection new: children size * 2) writeStream. - children do: [ :each | - (aBlock value: each) - ifTrue: [ - | newEvent | - newEvent := each copy. - newEvent children: (each copyChildrenFilterSelect: aBlock parent: newEvent). - newEvent parent: newParent. - stream nextPut: newEvent ] - ifFalse: [ - | newChildren | - newChildren := each copyChildrenFilterSelect: aBlock parent: newParent. - newChildren ifNotNil: [ stream nextPutAll: newChildren ]. - ]]. - stream contents ]. -] - -{ #category : #'accessing-derived' } -DynamixEvent >> depth [ - ^ self isRoot - ifTrue: [ 0 ] - ifFalse: [ self parent depth + 1 ] -] - -{ #category : #accessing } -DynamixEvent >> duration [ - "the duration between the start and stop of the activation. - we are checking for the duration first, because some importers - can possibly only set the duration instead of populating - the start and stop time" - - ^ duration ifNil: [ - duration := (self start notNil and: [self stop notNil]) - ifTrue: [self stop - self start] - ifFalse: [-1] ] -] - -{ #category : #accessing } -DynamixEvent >> duration: anObject [ - duration := anObject -] - -{ #category : #initialize } -DynamixEvent >> initialize [ - super initialize. - children := FMMultivalueLink - on: self - opposite: #parent: -] - -{ #category : #testing } -DynamixEvent >> isActivation [ - ^self subclassResponsibility -] - -{ #category : #testing } -DynamixEvent >> isLeaf [ - ^ self children isEmpty -] - -{ #category : #testing } -DynamixEvent >> isReturn [ - ^ false -] - -{ #category : #testing } -DynamixEvent >> isRoot [ - ^ self parent isNil -] - -{ #category : #testing } -DynamixEvent >> isSelfMessage [ - ^ false -] - -{ #category : #testing } -DynamixEvent >> isTrace [ - ^ false -] - -{ #category : #accessing } -DynamixEvent >> lastChild [ - "gets the last message event before the return" - self children isEmpty ifTrue: [^self]. - ^(self children last). -] - -{ #category : #ui } -DynamixEvent >> mooseFinderChildrenTreeIn: composite [ - - composite tree - titleIcon: MooseIcons mooseTree; - title: 'Children tree'; - rootsExpanded; - display: [:entity | {entity mooseInterestingEntity}]; - format: [:each | each gtDisplayString]; - children: [ :each | each children ]; - icon: #mooseIcon -] - -{ #category : #accessing } -DynamixEvent >> nestingLevel [ - - ^ self isRoot - ifTrue: [ 0 ] - ifFalse: [ self parent nestingLevel + 1 ] -] - -{ #category : #checking } -DynamixEvent >> numberOfMessageSends [ - | aNum | - aNum := 0. - ^aNum. -] - -{ #category : #checking } -DynamixEvent >> numberOfReturns [ - | aNum | - aNum := 0. -" self children do: [ - :eachChild | (eachChild isKindOf: Return ) ifTrue: [aNum := aNum + 1]]." - ^aNum. -] - -{ #category : #accessing } -DynamixEvent >> parent [ - - - - ^ parent -] - -{ #category : #accessing } -DynamixEvent >> parent: anEvent [ - parent := FMMultivalueLink - on: self - update: #children - from: self parent - to: anEvent -] - -{ #category : #enumerating } -DynamixEvent >> parentsDetect: aBlock ifNone: anotherBlock [ - "This traverses the parents and stops when the first one matches aBlock. - If none is found, we return the result of anotherBlock" - - self allParentsDo: [:each | - (aBlock value: each) ifTrue: [^ each] ]. - ^ anotherBlock value -] - -{ #category : #accessing } -DynamixEvent >> source [ - ^ source -] - -{ #category : #accessing } -DynamixEvent >> source: anObject [ - source := anObject -] - -{ #category : #accessing } -DynamixEvent >> start [ - ^ start -] - -{ #category : #accessing } -DynamixEvent >> start: anObject [ - start := anObject -] - -{ #category : #accessing } -DynamixEvent >> stop [ - ^ stop -] - -{ #category : #accessing } -DynamixEvent >> stop: anObject [ - stop := anObject -] - -{ #category : #'accessing-derived' } -DynamixEvent >> trace [ - "the assumption is that the root of an event tree is a trace entity" - - ^ self parent notNil - ifTrue: [ self parent trace ] - ifFalse: [ nil ] -] - -{ #category : #'accessing-derived' } -DynamixEvent >> withAllChildren [ - ^ self allChildren copyWith: self -] - -{ #category : #enumerating } -DynamixEvent >> withAllChildrenDo: aBlock [ - aBlock value: self. - self allChildrenDo: aBlock -] - -{ #category : #enumerating } -DynamixEvent >> withAllParentsDo: aBlock [ - aBlock value: self. - self allParentsDo: aBlock -] - -{ #category : #enumerating } -DynamixEvent >> withParentsDetect: aBlock ifNone: anotherBlock [ - "This traverses the parents including myself and stops when the first one matches aBlock. - If none is found, we return the result of anotherBlock" - - self withAllParentsDo: [:each | - (aBlock value: each) ifTrue: [^ each] ]. - ^ anotherBlock value -] diff --git a/src-archive/Dynamix-Core/DynamixFieldAlias.class.st b/src-archive/Dynamix-Core/DynamixFieldAlias.class.st deleted file mode 100644 index 37fd5479e..000000000 --- a/src-archive/Dynamix-Core/DynamixFieldAlias.class.st +++ /dev/null @@ -1,32 +0,0 @@ -" -An alias dedicated to the use of a field variable. -" -Class { - #name : #DynamixFieldAlias, - #superclass : #DynamixAlias, - #instVars : [ - 'attribute' - ], - #category : #'Dynamix-Core' -} - -{ #category : #meta } -DynamixFieldAlias class >> annotation [ - - -] - -{ #category : #accessing } -DynamixFieldAlias >> attribute [ - ^ attribute -] - -{ #category : #accessing } -DynamixFieldAlias >> attribute: anObject [ - attribute := anObject -] - -{ #category : #testing } -DynamixFieldAlias >> isFieldAlias [ - ^ true -] diff --git a/src-archive/Dynamix-Core/DynamixHistoricalAlias.class.st b/src-archive/Dynamix-Core/DynamixHistoricalAlias.class.st deleted file mode 100644 index 4d97f2db2..000000000 --- a/src-archive/Dynamix-Core/DynamixHistoricalAlias.class.st +++ /dev/null @@ -1,52 +0,0 @@ -Class { - #name : #DynamixHistoricalAlias, - #superclass : #DynamixAlias, - #instVars : [ - 'predecessor', - 'successor' - ], - #category : #'Dynamix-Core' -} - -{ #category : #meta } -DynamixHistoricalAlias class >> annotation [ - - -] - -{ #category : #testing } -DynamixHistoricalAlias >> isRootAlias [ - ^ false -] - -{ #category : #accessing } -DynamixHistoricalAlias >> predecessor [ - ^ predecessor -] - -{ #category : #accessing } -DynamixHistoricalAlias >> predecessor: anObject [ - predecessor := anObject -] - -{ #category : #accessing } -DynamixHistoricalAlias >> roleId [ - self subclassResponsibility -] - -{ #category : #'accessing-derived' } -DynamixHistoricalAlias >> stopTimestamp [ - ^ self successor - ifNotNil: [ :alias | alias timestamp - 1 ] - ifNil: [ MalUnlimited positive ] -] - -{ #category : #accessing } -DynamixHistoricalAlias >> successor [ - ^ successor -] - -{ #category : #accessing } -DynamixHistoricalAlias >> successor: anObject [ - successor := anObject -] diff --git a/src-archive/Dynamix-Core/DynamixInstance.class.st b/src-archive/Dynamix-Core/DynamixInstance.class.st deleted file mode 100644 index 90fddbdbc..000000000 --- a/src-archive/Dynamix-Core/DynamixInstance.class.st +++ /dev/null @@ -1,136 +0,0 @@ -" -DynamixInstance represents an instance of a type (e.g., a class). - -It is created by an Activation and maintains a list of references to all Activations that hold a ref- erence to this object (i.e., Activations reference the receiver instance of a message, Activations that hold a reference to the Instance in the return value of a message send). The Instance is associated with its defining Class entity of the structural model. -" -Class { - #name : #DynamixInstance, - #superclass : #DynamixReference, - #instVars : [ - 'aliases', - 'type' - ], - #category : #'Dynamix-Core' -} - -{ #category : #meta } -DynamixInstance class >> annotation [ - - -] - -{ #category : #'accessing-aliases' } -DynamixInstance >> aliases [ - ^aliases ifNil: [ aliases := OrderedCollection new ] -] - -{ #category : #'accessing-aliases' } -DynamixInstance >> aliases: anObject [ - aliases := anObject -] - -{ #category : #'accessing-aliases' } -DynamixInstance >> argumentAliases [ - ^self aliases select: [ :each | each isArgumentAlias ] -] - -{ #category : #'accessing-derived' } -DynamixInstance >> clientInstance [ - ^ self -] - -{ #category : #'accessing-aliases' } -DynamixInstance >> fieldAliases [ - ^self aliases select: [ :each | each isFieldAlias] -] - -{ #category : #'instance characterization' } -DynamixInstance >> instanceCharacterization [ - ^((self aliases - select: [ :each | each creator notNil ]) - collect: [ :each | each creator trace ]) asSet size -] - -{ #category : #'instance characterization' } -DynamixInstance >> instanceCreator [ - ^self rootAlias ifNotNil: [ :alias | - alias creator ifNotNil: [ :activation | activation trace ] ] -] - -{ #category : #'accessing-derived' } -DynamixInstance >> instantiationTimestamp [ - ^self rootAlias - ifNotNil: [ :alias | alias timestamp ] - ifNil: [ -1 ] -] - -{ #category : #testing } -DynamixInstance >> isInstance [ - ^ true -] - -{ #category : #'accessing-aliases' } -DynamixInstance >> namedAliases [ - ^self fieldAliases, self tempAliases, self argumentAliases -] - -{ #category : #properties } -DynamixInstance >> numberOfReferencingFeatures [ -" " - ^self - lookUpPropertyNamed: #NORF - computedAs: [ - ((self aliases - select: [ :each | each creator notNil ]) - collect: [ :each | each creator trace ]) asSet size ] -] - -{ #category : #printing } -DynamixInstance >> printOn: aStream [ - (self type notNil) ifTrue: [ - aStream - nextPutAll: (self type name first isVowel ifTrue: [ 'an ' ] ifFalse: [ 'a ' ]); - nextPutAll: self type name; - space; - nextPut: ${; - nextPutAll: self name; - nextPut: $}] - ifFalse: [ aStream nextPutAll: 'Class not in Model']. -] - -{ #category : #'accessing-aliases' } -DynamixInstance >> rootAlias [ - self aliases isEmpty ifTrue: [ ^nil ]. - ^ self aliases detect: [ :each | each ancestor isNil ]. -] - -{ #category : #'accessing-aliases' } -DynamixInstance >> tempAliases [ - ^self aliases select: [ :each | each isTempAlias] -] - -{ #category : #properties } -DynamixInstance >> traceOrigin [ - ^ self rootAlias creator - ifNotNil: [ :activation | activation trace ifNil: [ 'n/a' ] ] - ifNil: [ 'n/a' ] -] - -{ #category : #accessing } -DynamixInstance >> type [ - - - ^ type -] - -{ #category : #accessing } -DynamixInstance >> type: aType [ - type := FMMultivalueLink - on: self - update: #instances - from: self type - to: aType -] diff --git a/src-archive/Dynamix-Core/DynamixReference.class.st b/src-archive/Dynamix-Core/DynamixReference.class.st deleted file mode 100644 index 0f998f033..000000000 --- a/src-archive/Dynamix-Core/DynamixReference.class.st +++ /dev/null @@ -1,64 +0,0 @@ -" -DynamixReference is an abstract class that models a reference to some value in the system. In an object-oriented system, a typical reference is the instance of a class (see DynamixInstance). -" -Class { - #name : #DynamixReference, - #superclass : #DynamixEntity, - #instVars : [ - 'activationsWithArgument', - 'activationsWithReceiver', - 'activationsWithReturn' - ], - #category : #'Dynamix-Core' -} - -{ #category : #meta } -DynamixReference class >> annotation [ - - -] - -{ #category : #accessing } -DynamixReference >> activationsWithArgument [ - - - - ^ activationsWithArgument -] - -{ #category : #accessing } -DynamixReference >> activationsWithArgument: aCollection [ - activationsWithArgument value: aCollection -] - -{ #category : #accessing } -DynamixReference >> activationsWithReceiver [ - - - ^ activationsWithReceiver -] - -{ #category : #accessing } -DynamixReference >> activationsWithReceiver: aCollection [ - activationsWithReceiver value: aCollection -] - -{ #category : #accessing } -DynamixReference >> activationsWithReturn [ - - - ^ activationsWithReturn -] - -{ #category : #accessing } -DynamixReference >> activationsWithReturn: aCollection [ - activationsWithReturn value: aCollection -] - -{ #category : #'initialize-release' } -DynamixReference >> initialize [ - super initialize. - activationsWithReceiver := FMMultivalueLink on: self opposite: #receiver:. - activationsWithReturn := FMMultivalueLink on: self opposite: #return:. - activationsWithArgument := FMMultiMultivalueLink on: self opposite: #arguments -] diff --git a/src-archive/Dynamix-Core/DynamixTrace.class.st b/src-archive/Dynamix-Core/DynamixTrace.class.st deleted file mode 100644 index 44a2d9aee..000000000 --- a/src-archive/Dynamix-Core/DynamixTrace.class.st +++ /dev/null @@ -1,38 +0,0 @@ -" -DynamixTrace is an event that has a name. Typically, a trace is the root of an event tree. -A trace entity can be used to model a feature or a use case. -" -Class { - #name : #DynamixTrace, - #superclass : #DynamixEvent, - #instVars : [ - 'name' - ], - #category : #'Dynamix-Core' -} - -{ #category : #meta } -DynamixTrace class >> annotation [ - - -] - -{ #category : #testing } -DynamixTrace >> isTrace [ - ^ true -] - -{ #category : #accessing } -DynamixTrace >> name [ - ^name ifNil: [ 'n/a' ] -] - -{ #category : #accessing } -DynamixTrace >> name: anObject [ - name := anObject -] - -{ #category : #'accessing-derived' } -DynamixTrace >> trace [ - ^ self -] diff --git a/src-archive/Dynamix-Core/DynamixTraceGroup.class.st b/src-archive/Dynamix-Core/DynamixTraceGroup.class.st deleted file mode 100644 index 6c0f0201a..000000000 --- a/src-archive/Dynamix-Core/DynamixTraceGroup.class.st +++ /dev/null @@ -1,71 +0,0 @@ -" -A DynamixTraceGroup is a group containing traces of execution - -" -Class { - #name : #DynamixTraceGroup, - #superclass : #MooseGroup, - #category : #'Dynamix-Core' -} - -{ #category : #meta } -DynamixTraceGroup class >> annotation [ - - -] - -{ #category : #coverage } -DynamixTraceGroup >> classCoverage [ - "Returns percentage coverage of all feature-trace classes in the current model" - - | aCurrentClassesSize aPercentage aModelClassesSize | - aModelClassesSize := (self mooseModel allClasses - select: [:aClass | (aClass isStub not ) and: [aClass isMetaclass not]] ) size. - aCurrentClassesSize := self getAllClasses size. - aPercentage := ((aCurrentClassesSize / aModelClassesSize) asFloat * 100) - rounded. - ^aPercentage. -] - -{ #category : #'all-getters' } -DynamixTraceGroup >> getAllClasses [ - - "Get all classes associated with a group of TestCaseTraces and include in a set" - | aClassesSet| - - ^self entityGroups at: #allTraceGroupClasses ifAbsentPut: [ - aClassesSet := Set new. - self entities do: [:each | aClassesSet := (aClassesSet) union: (each uniqueClasses)]. - aClassesSet]. -] - -{ #category : #'all-getters' } -DynamixTraceGroup >> getAllMethods [ - - "Get all methods associated with a group of TestCaseTraces and include in a set" - | aMethodsSet| - - ^self entityGroups at: #allTraceGroupMethods ifAbsentPut: [ - aMethodsSet := Set new. - self entities do: [:each | aMethodsSet := (aMethodsSet) union: (each uniqueMethods)]. - aMethodsSet]. -] - -{ #category : #coverage } -DynamixTraceGroup >> methodCoverage [ - "Returns method coverage for all feature-traces in the model" - - | aMethodsSize aCurrentMethodsSize aPercentage | - aMethodsSize := (self mooseModel allMethods reject: [ :aMethod | aMethod isTestMethod ]) size. - aCurrentMethodsSize := self getAllMethods size. - aPercentage := ((aCurrentMethodsSize / aMethodsSize) asFloat * 100) rounded. - ^ aPercentage -] - -{ #category : #helpers } -DynamixTraceGroup >> numberOfEvents [ - | nom | - nom := 0. - self entities do: [:eachTrace | nom := nom + ( eachTrace activations size) ]. - ^nom. -] diff --git a/src-archive/Dynamix-Core/FAMIXBehaviouralEntity.extension.st b/src-archive/Dynamix-Core/FAMIXBehaviouralEntity.extension.st deleted file mode 100644 index b982d25ed..000000000 --- a/src-archive/Dynamix-Core/FAMIXBehaviouralEntity.extension.st +++ /dev/null @@ -1,19 +0,0 @@ -Extension { #name : #FAMIXBehaviouralEntity } - -{ #category : #'*Dynamix-Core' } -FAMIXBehaviouralEntity >> activations [ - - - - - ^ self privateState - attributeAt: #activations - ifAbsentPut: [FMMultivalueLink - on: self - opposite: #behaviour:.] -] - -{ #category : #'*Dynamix-Core' } -FAMIXBehaviouralEntity >> activations: aCollection [ - ^ (self privateState attributeAt: #activations ifAbsent: [nil]) value: aCollection -] diff --git a/src-archive/Dynamix-Core/FAMIXType.extension.st b/src-archive/Dynamix-Core/FAMIXType.extension.st deleted file mode 100644 index ca5f651df..000000000 --- a/src-archive/Dynamix-Core/FAMIXType.extension.st +++ /dev/null @@ -1,22 +0,0 @@ -Extension { #name : #FAMIXType } - -{ #category : #'*Dynamix-Core' } -FAMIXType >> instances [ - - - - - - ^ self privateState - attributeAt: #instances - ifAbsentPut: [ - FMMultivalueLink - on: self - opposite: #type: ] - -] - -{ #category : #'*Dynamix-Core' } -FAMIXType >> instances: aCollectionOfInstances [ - self instances value: aCollectionOfInstances -] diff --git a/src-archive/Dynamix-Core/MooseAbstractGroup.extension.st b/src-archive/Dynamix-Core/MooseAbstractGroup.extension.st deleted file mode 100644 index b6205093e..000000000 --- a/src-archive/Dynamix-Core/MooseAbstractGroup.extension.st +++ /dev/null @@ -1,12 +0,0 @@ -Extension { #name : #MooseAbstractGroup } - -{ #category : #'*Dynamix-Core' } -MooseAbstractGroup >> allActivations [ - ^self allWithType: DynamixActivation -] - -{ #category : #'*Dynamix-Core' } -MooseAbstractGroup >> allTraces [ - - ^self allWithType: DynamixTrace -] diff --git a/src-archive/Dynamix-Core/package.st b/src-archive/Dynamix-Core/package.st deleted file mode 100644 index 1825a10f4..000000000 --- a/src-archive/Dynamix-Core/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Dynamix-Core' } diff --git a/src-archive/Dynamix-Tests-Core/DynamixActivationTest.class.st b/src-archive/Dynamix-Tests-Core/DynamixActivationTest.class.st deleted file mode 100644 index 8c868bde1..000000000 --- a/src-archive/Dynamix-Tests-Core/DynamixActivationTest.class.st +++ /dev/null @@ -1,87 +0,0 @@ -Class { - #name : #DynamixActivationTest, - #superclass : #TestCase, - #category : #'Dynamix-Tests-Core' -} - -{ #category : #tests } -DynamixActivationTest >> testArguments [ - | activation argument1 argument2 | - activation := DynamixActivation new. - argument1 := DynamixReference new. - argument2 := DynamixReference new. - activation arguments: {argument1}. - activation arguments add: argument2. - self assert: (activation arguments includes: argument1). - self assert: (activation arguments includes: argument2). - self assert: (argument1 activationsWithArgument includes: activation). - self assert: (argument2 activationsWithArgument includes: activation) -] - -{ #category : #tests } -DynamixActivationTest >> testBehaviour [ - | activation behaviour | - activation := DynamixActivation new. - behaviour := FamixBehaviouralEntity new. - activation behaviour: behaviour. - self assert: behaviour activations size = 1. - self assert: behaviour activations first = activation -] - -{ #category : #tests } -DynamixActivationTest >> testDurationExplicitlySet [ - | activation | - activation := DynamixActivation new. - activation duration: 123. - self assert: activation duration = 123 -] - -{ #category : #tests } -DynamixActivationTest >> testDurationExplicitlySetEvenIfStartAndStopIsPresent [ - | activation | - activation := DynamixActivation new. - activation start: Time now. - activation stop: Time now. - activation duration: 123. - self assert: activation duration = 123 -] - -{ #category : #tests } -DynamixActivationTest >> testDurationFromStartAndStop [ - | activation | - activation := DynamixActivation new. - activation start: 1. - activation stop: 2. - self assert: activation duration = 1 -] - -{ #category : #tests } -DynamixActivationTest >> testReceiver [ - | activation receiver | - activation := DynamixActivation new. - receiver := DynamixReference new. - activation receiver: receiver. - self assert: activation receiver = receiver. - self assert: (receiver activationsWithReceiver includes: activation) -] - -{ #category : #tests } -DynamixActivationTest >> testReturn [ - | activation return | - activation := DynamixActivation new. - return := DynamixReference new. - activation return: return. - self assert: activation return = return. - self assert: (return activationsWithReturn includes: activation) -] - -{ #category : #tests } -DynamixActivationTest >> testTrace [ - | activation leafActivation trace | - trace := DynamixTrace new. - activation := DynamixActivation new. - activation parent: trace. - leafActivation := DynamixActivation new. - leafActivation parent: activation. - self assert: leafActivation trace = trace -] diff --git a/src-archive/Dynamix-Tests-Core/DynamixEventTest.class.st b/src-archive/Dynamix-Tests-Core/DynamixEventTest.class.st deleted file mode 100644 index a47104a12..000000000 --- a/src-archive/Dynamix-Tests-Core/DynamixEventTest.class.st +++ /dev/null @@ -1,55 +0,0 @@ -Class { - #name : #DynamixEventTest, - #superclass : #TestCase, - #category : #'Dynamix-Tests-Core' -} - -{ #category : #tests } -DynamixEventTest >> testChildrenParent [ - - | event1 event11 event12 | - event1 := DynamixEvent new. - event11 := DynamixEvent new. - event12 := DynamixEvent new. - event1 children: {event11}. - event1 children add: event12. - self assert: event11 parent = event1. - self assert: event12 parent = event1 -] - -{ #category : #tests } -DynamixEventTest >> testParentChildren [ - - | event1 event11 event12 | - event1 := DynamixEvent new. - event11 := DynamixEvent new. - event12 := DynamixEvent new. - event11 parent: event1. - event12 parent: event1. - self assert: event1 children size = 2 -] - -{ #category : #tests } -DynamixEventTest >> testParentsDetectIfNone [ - | event1 event11 event12 event121 | - event1 := DynamixEvent new. - event11 := DynamixEvent new. - event12 := DynamixEvent new. - event121 := DynamixEvent new. - event11 parent: event1. - event12 parent: event1. - event121 parent: event12. - self assert: (event121 parentsDetect: [:each | each = event1] ifNone: [nil]) = event1 -] - -{ #category : #tests } -DynamixEventTest >> testTrace [ - | trace event1 event11 | - trace := DynamixTrace new. - event1 := DynamixEvent new. - event1 parent: trace. - event11 := DynamixEvent new. - event11 parent: event1. - self assert: event11 trace = trace. - self assert: event1 trace = trace -] diff --git a/src-archive/Dynamix-Tests-Core/DynamixInstanceTest.class.st b/src-archive/Dynamix-Tests-Core/DynamixInstanceTest.class.st deleted file mode 100644 index fc78d5647..000000000 --- a/src-archive/Dynamix-Tests-Core/DynamixInstanceTest.class.st +++ /dev/null @@ -1,33 +0,0 @@ -Class { - #name : #DynamixInstanceTest, - #superclass : #TestCase, - #category : #'Dynamix-Tests-Core' -} - -{ #category : #tests } -DynamixInstanceTest >> testInstanceType [ - | instance1 instance2 type | - instance1 := DynamixInstance new. - instance2 := DynamixInstance new. - type := FamixType new. - type instances: {instance1}. - type instances add: instance2. - self assert: instance1 type = type. - self assert: instance2 type = type. - self assert: type instances size = 2. - self assert: type instances first = instance1. - self assert: type instances last = instance2 -] - -{ #category : #tests } -DynamixInstanceTest >> testTypeInstance [ - | instance1 instance2 type | - instance1 := DynamixInstance new. - instance2 := DynamixInstance new. - type := FamixType new. - instance1 type: type. - instance2 type: type. - self assert: type instances size = 2. - self assert: type instances first = instance1. - self assert: type instances last = instance2 -] diff --git a/src-archive/Dynamix-Tests-Core/DynamixReferenceTest.class.st b/src-archive/Dynamix-Tests-Core/DynamixReferenceTest.class.st deleted file mode 100644 index 45c53a202..000000000 --- a/src-archive/Dynamix-Tests-Core/DynamixReferenceTest.class.st +++ /dev/null @@ -1,47 +0,0 @@ -Class { - #name : #DynamixReferenceTest, - #superclass : #TestCase, - #category : #'Dynamix-Tests-Core' -} - -{ #category : #tests } -DynamixReferenceTest >> testActivationsWithArguments [ - | activation1 activation2 argument | - activation1 := DynamixActivation new. - activation2 := DynamixActivation new. - argument := DynamixReference new. - argument activationsWithArgument: {activation1}. - argument activationsWithArgument add: activation2. - self assert: (activation1 arguments includes: argument). - self assert: (activation2 arguments includes: argument). - self assert: (argument activationsWithArgument includes: activation1). - self assert: (argument activationsWithArgument includes: activation2) -] - -{ #category : #tests } -DynamixReferenceTest >> testActivationsWithReceiver [ - | activation1 activation2 receiver | - activation1 := DynamixActivation new. - activation2 := DynamixActivation new. - receiver := DynamixReference new. - receiver activationsWithReceiver: {activation1}. - receiver activationsWithReceiver add: activation2. - self assert: activation1 receiver = receiver. - self assert: activation2 receiver = receiver. - self assert: (receiver activationsWithReceiver includes: activation1). - self assert: (receiver activationsWithReceiver includes: activation2) -] - -{ #category : #tests } -DynamixReferenceTest >> testActivationsWithReturn [ - | activation1 activation2 return | - activation1 := DynamixActivation new. - activation2 := DynamixActivation new. - return := DynamixReference new. - return activationsWithReturn: {activation1}. - return activationsWithReturn add: activation2. - self assert: activation1 return = return. - self assert: activation2 return = return. - self assert: (return activationsWithReturn includes: activation1). - self assert: (return activationsWithReturn includes: activation2) -] diff --git a/src-archive/Dynamix-Tests-Core/DynamixTraceTest.class.st b/src-archive/Dynamix-Tests-Core/DynamixTraceTest.class.st deleted file mode 100644 index 973176ea7..000000000 --- a/src-archive/Dynamix-Tests-Core/DynamixTraceTest.class.st +++ /dev/null @@ -1,12 +0,0 @@ -Class { - #name : #DynamixTraceTest, - #superclass : #TestCase, - #category : #'Dynamix-Tests-Core' -} - -{ #category : #tests } -DynamixTraceTest >> testTrace [ - | trace | - trace := DynamixTrace new. - self assert: trace trace = trace -] diff --git a/src-archive/Dynamix-Tests-Core/package.st b/src-archive/Dynamix-Tests-Core/package.st deleted file mode 100644 index 493f5a763..000000000 --- a/src-archive/Dynamix-Tests-Core/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Dynamix-Tests-Core' } diff --git a/src-archive/Factorial-Language/FLFactorialCompiler.class.st b/src-archive/Factorial-Language/FLFactorialCompiler.class.st deleted file mode 100644 index dff3aee23..000000000 --- a/src-archive/Factorial-Language/FLFactorialCompiler.class.st +++ /dev/null @@ -1,86 +0,0 @@ -" -I define productions to create a Smalltalk AST from the FL source. The Smalltalk AST can be trivially transformed to Smalltalk bytecodes and executed using the infrastructure of the development environment. -" -Class { - #name : #FLFactorialCompiler, - #superclass : #FLFactorialGrammar, - #category : #'Factorial-Language' -} - -{ #category : #grammar } -FLFactorialCompiler >> apply [ - ^ super apply ==> [ :node | - RBMessageNode - receiver: (RBVariableNode named: 'self') - selector: (self - selector: node second - count: node third size) - arguments: node third ] -] - -{ #category : #grammar } -FLFactorialCompiler >> binary [ - ^ super binary ==> [ :node | - RBMessageNode - receiver: node second - selector: node third asSymbol - arguments: (Array with: node fourth) ] -] - -{ #category : #grammar } -FLFactorialCompiler >> condition [ - ^ super condition ==> [ :node | - RBMessageNode - receiver: node second - selector: #ifTrue:ifFalse: - arguments: (Array - with: (RBBlockNode - arguments: #() - body: (RBSequenceNode - statements: (Array with: node fourth))) - with: (RBBlockNode - arguments: #() - body: (RBSequenceNode - statements: (Array with: node sixth)))) ] -] - -{ #category : #grammar } -FLFactorialCompiler >> function [ - ^ super function ==> [ :node | - RBMethodNode - selector: (self - selector: node first - count: node second size) - arguments: node second - body: ((RBSequenceNode statements: (Array - with: node fourth)) - addReturn; - yourself) ] -] - -{ #category : #grammar } -FLFactorialCompiler >> literal [ - ^ super literal ==> [ :node | RBLiteralNode value: node asNumber ] -] - -{ #category : #grammar } -FLFactorialCompiler >> operation [ - ^ super operation ==> [ :node | node = '==' ifTrue: [ #= ] ifFalse: [ node asSymbol ] ] -] - -{ #category : #private } -FLFactorialCompiler >> selector: aString count: anInteger [ - | stream | - stream := WriteStream on: String new. - stream nextPutAll: aString. - 1 to: anInteger do: [ :index | - index > 1 - ifTrue: [ stream nextPutAll: 'with' ]. - stream nextPut: $: ]. - ^ stream contents asSymbol -] - -{ #category : #grammar } -FLFactorialCompiler >> variable [ - ^ super variable ==> [ :node | RBVariableNode named: node ] -] diff --git a/src-archive/Factorial-Language/FLFactorialExample.class.st b/src-archive/Factorial-Language/FLFactorialExample.class.st deleted file mode 100644 index d4646265b..000000000 --- a/src-archive/Factorial-Language/FLFactorialExample.class.st +++ /dev/null @@ -1,74 +0,0 @@ -" -I implement the example given in ""factorial.txt"". The code can be edited directly in the Smalltalk code browser and is automatically parsed, transformed and eventually compiled down to Smalltalk bytecodes. -" -Class { - #name : #FLFactorialExample, - #superclass : #TestCase, - #category : #'Factorial-Language' -} - -{ #category : #accessing } -FLFactorialExample >> ack [ - ^ 'ack m n = if (m == 0) then (n + 1) else if (n == 0) then (ack (m - 1) 1) else (ack (m - 1) (ack m (n - 1)))' -] - -{ #category : #accessing } -FLFactorialExample >> fac [ - ^ 'fac n = if (n == 0) then 1 else (mult n (fac (n - 1)))' -] - -{ #category : #accessing } -FLFactorialExample >> fib [ - ^ 'fib n = if (n == 0) then 0 else if (n == 1) then 1 else ((fib (n - 1)) + (fib (n - 2)))' -] - -{ #category : #accessing } -FLFactorialExample >> mul [ - ^ 'mult n m = if (n == 0) then 0 else (m + (mult (n - 1) m))' -] - -{ #category : #testing } -FLFactorialExample >> testAck [ - self assert: (FLFactorialGrammar parse: self ack) = #('ack' #('m' 'n') '=' #('if' #('(' 'm' '==' '0' ')') 'then' #('(' 'n' '+' '1' ')') 'else' #('if' #('(' 'n' '==' '0' ')') 'then' #('(' 'ack' #(#('(' 'm' '-' '1' ')') '1') ')') 'else' #('(' 'ack' #(#('(' 'm' '-' '1' ')') #('(' 'ack' #('m' #('(' 'n' '-' '1' ')')) ')')) ')')))). - self assert: (FLFactorialPrinter parse: self ack) = self ack. - self assert: (FLFactorialCompiler parse: self ack) = (RBParser parseMethod: 'ack: m with: n - ^ m = 0 - ifTrue: [ n + 1 ] - ifFalse: [ - n = 0 - ifTrue: [ self ack: m - 1 with: 1 ] - ifFalse: [ self ack: m - 1 with: (self ack: m with: n - 1) ] ]') -] - -{ #category : #testing } -FLFactorialExample >> testFac [ - self assert: (FLFactorialGrammar parse: self fac) = #('fac' #('n') '=' #('if' #('(' 'n' '==' '0' ')') 'then' '1' 'else' #('(' 'mult' #('n' #('(' 'fac' #(#('(' 'n' '-' '1' ')')) ')')) ')'))). - self assert: (FLFactorialPrinter parse: self fac) = self fac. - self assert: (FLFactorialCompiler parse: self fac) = (RBParser parseMethod: 'fac: n - ^ n = 0 - ifTrue: [ 1 ] - ifFalse: [ self mult: n with: (self fac: n - 1) ]') -] - -{ #category : #testing } -FLFactorialExample >> testFib [ - self assert: (FLFactorialGrammar parse: self fib) = #('fib' #('n') '=' #('if' #('(' 'n' '==' '0' ')') 'then' '0' 'else' #('if' #('(' 'n' '==' '1' ')') 'then' '1' 'else' #('(' #('(' 'fib' #(#('(' 'n' '-' '1' ')')) ')') '+' #('(' 'fib' #(#('(' 'n' '-' '2' ')')) ')') ')')))). - self assert: (FLFactorialPrinter parse: self fib) = self fib. - self assert: (FLFactorialCompiler parse: self fib) = (RBParser parseMethod: 'fib: n - ^ n = 0 - ifTrue: [ 0 ] - ifFalse: [ - n = 1 - ifTrue: [ 1 ] - ifFalse: [ (self fib: n - 1) + (self fib: n - 2) ] ]') -] - -{ #category : #testing } -FLFactorialExample >> testMul [ - self assert: (FLFactorialGrammar parse: self mul) = #('mult' #('n' 'm') '=' #('if' #('(' 'n' '==' '0' ')') 'then' '0' 'else' #('(' 'm' '+' #('(' 'mult' #(#('(' 'n' '-' '1' ')') 'm') ')') ')'))). - self assert: (FLFactorialPrinter parse: self mul) = self mul. - self assert: (FLFactorialCompiler parse: self mul) = (RBParser parseMethod: 'mult: n with: m - ^ n = 0 - ifTrue: [ 0 ] - ifFalse: [ m + (self mult: n - 1 with: m) ]') -] diff --git a/src-archive/Factorial-Language/FLFactorialGrammar.class.st b/src-archive/Factorial-Language/FLFactorialGrammar.class.st deleted file mode 100644 index 4a2b046bb..000000000 --- a/src-archive/Factorial-Language/FLFactorialGrammar.class.st +++ /dev/null @@ -1,129 +0,0 @@ -" -I define the scanner and parser for the FL programming language using the parser combinator framework PetitParser. -" -Class { - #name : #FLFactorialGrammar, - #superclass : #PPCompositeParser, - #instVars : [ - 'apply', - 'binary', - 'condition', - 'expression', - 'function', - 'literal', - 'operation', - 'variable', - 'add', - 'close', - 'cmp', - 'else', - 'equal', - 'id', - 'if', - 'num', - 'open', - 'sub', - 'then' - ], - #category : #'Factorial-Language' -} - -{ #category : #token } -FLFactorialGrammar >> add [ - ^ $+ asParser flatten trim -] - -{ #category : #grammar } -FLFactorialGrammar >> apply [ - ^ open , id , expression star , close -] - -{ #category : #grammar } -FLFactorialGrammar >> binary [ - ^ open , expression , operation , expression , close -] - -{ #category : #token } -FLFactorialGrammar >> close [ - ^ $) asParser flatten trim -] - -{ #category : #token } -FLFactorialGrammar >> cmp [ - ^ '==' asParser flatten trim -] - -{ #category : #grammar } -FLFactorialGrammar >> condition [ - ^ if , expression , then , expression , else , expression -] - -{ #category : #token } -FLFactorialGrammar >> else [ - ^ 'else' asParser flatten trim -] - -{ #category : #token } -FLFactorialGrammar >> equal [ - ^ $= asParser flatten trim -] - -{ #category : #grammar } -FLFactorialGrammar >> expression [ - ^ apply / condition / binary / variable / literal -] - -{ #category : #grammar } -FLFactorialGrammar >> function [ - ^ id , variable star , equal , expression -] - -{ #category : #token } -FLFactorialGrammar >> id [ - ^ #letter asParser plus flatten trim -] - -{ #category : #token } -FLFactorialGrammar >> if [ - ^ 'if' asParser flatten trim -] - -{ #category : #grammar } -FLFactorialGrammar >> literal [ - ^ num -] - -{ #category : #token } -FLFactorialGrammar >> num [ - ^ #digit asParser plus flatten trim -] - -{ #category : #token } -FLFactorialGrammar >> open [ - ^ $( asParser flatten trim -] - -{ #category : #grammar } -FLFactorialGrammar >> operation [ - ^ cmp / add / sub -] - -{ #category : #accessing } -FLFactorialGrammar >> start [ - ^ function end -] - -{ #category : #token } -FLFactorialGrammar >> sub [ - ^ $- asParser flatten trim -] - -{ #category : #token } -FLFactorialGrammar >> then [ - ^ 'then' asParser flatten trim -] - -{ #category : #grammar } -FLFactorialGrammar >> variable [ - ^ id -] diff --git a/src-archive/Factorial-Language/FLFactorialPrinter.class.st b/src-archive/Factorial-Language/FLFactorialPrinter.class.st deleted file mode 100644 index 0dc4c335a..000000000 --- a/src-archive/Factorial-Language/FLFactorialPrinter.class.st +++ /dev/null @@ -1,28 +0,0 @@ -" -I implement the pretty printer of the FL language. -" -Class { - #name : #FLFactorialPrinter, - #superclass : #FLFactorialGrammar, - #category : #'Factorial-Language' -} - -{ #category : #grammar } -FLFactorialPrinter >> apply [ - ^ super apply ==> [ :nodes | nodes first , nodes second , (nodes third inject: String new into: [ :r :e | r , ' ' , e ]) , nodes fourth ] -] - -{ #category : #grammar } -FLFactorialPrinter >> binary [ - ^ super binary ==> [ :nodes | nodes first , nodes second , ' ' , nodes third , ' ' , nodes fourth , nodes fifth ] -] - -{ #category : #grammar } -FLFactorialPrinter >> condition [ - ^ super condition ==> [ :nodes | nodes first , ' ' , nodes second , ' ' , nodes third , ' ' , nodes fourth , ' ' , nodes fifth , ' ' , nodes sixth ] -] - -{ #category : #grammar } -FLFactorialPrinter >> function [ - ^ super function ==> [ :nodes | nodes first , (nodes second inject: String new into: [ :r :e | r , ' ' , e ]) , ' ' , nodes third , ' ' , nodes fourth ] -] diff --git a/src-archive/Factorial-Language/package.st b/src-archive/Factorial-Language/package.st deleted file mode 100644 index 05706bb8b..000000000 --- a/src-archive/Factorial-Language/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Factorial-Language' } diff --git a/src-archive/Famix-C/FAMIXCFile.class.st b/src-archive/Famix-C/FAMIXCFile.class.st deleted file mode 100644 index 6245a16f5..000000000 --- a/src-archive/Famix-C/FAMIXCFile.class.st +++ /dev/null @@ -1,101 +0,0 @@ -" -Abstract super class for Header files and Compilation units (.c files) -" -Class { - #name : #FAMIXCFile, - #superclass : #FAMIXFile, - #instVars : [ - 'incomingIncludeRelations', - 'outgoingIncludeRelations' - ], - #category : #'Famix-C' -} - -{ #category : #meta } -FAMIXCFile class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXCFile >> allIncomingIncludeRelations [ - | answer | - answer := OrderedCollection new. - self allIncomingIncludeRelations: answer. - ^ answer -] - -{ #category : #accessing } -FAMIXCFile >> allIncomingIncludeRelations: visitedPath [ - (self incomingIncludeRelations collect: #source) do: [ :f | - (visitedPath includes: f) ifFalse: [ - visitedPath add: f. - f allIncomingIncludeRelations: visitedPath - ] - ] -] - -{ #category : #accessing } -FAMIXCFile >> includedFiles [ - - - - ^ outgoingIncludeRelations collect: [ :each | each target ] -] - -{ #category : #accessing } -FAMIXCFile >> includingFiles [ - - - - ^ incomingIncludeRelations collect: [ :each | each source ] -] - -{ #category : #accessing } -FAMIXCFile >> incomingIncludeRelations [ - - - - ^ incomingIncludeRelations -] - -{ #category : #accessing } -FAMIXCFile >> incomingIncludeRelations: aFile [ - incomingIncludeRelations value: aFile -] - -{ #category : #'initialize-release' } -FAMIXCFile >> initialize [ - super initialize. - incomingIncludeRelations := FMNullMultivalueLink on: self opposite: #target: selector: #incomingIncludeRelations. - outgoingIncludeRelations := FMNullMultivalueLink on: self opposite: #source: selector: #outgoingIncludeRelations. -] - -{ #category : #testing } -FAMIXCFile >> isCompilationUnit [ - ^ false -] - -{ #category : #testing } -FAMIXCFile >> isHeader [ - ^ false -] - -{ #category : #queries } -FAMIXCFile >> numberOfIncludes [ - "Return the number of files I include" - ^ outgoingIncludeRelations size -] - -{ #category : #accessing } -FAMIXCFile >> outgoingIncludeRelations [ - - - - ^ outgoingIncludeRelations -] - -{ #category : #accessing } -FAMIXCFile >> outgoingIncludeRelations: aFile [ - outgoingIncludeRelations value: aFile -] diff --git a/src-archive/Famix-C/FAMIXCSourceLanguage.class.st b/src-archive/Famix-C/FAMIXCSourceLanguage.class.st deleted file mode 100644 index bfe96d0c1..000000000 --- a/src-archive/Famix-C/FAMIXCSourceLanguage.class.st +++ /dev/null @@ -1,19 +0,0 @@ -" -FAMIXCSourceLanguage represents the C language. -" -Class { - #name : #FAMIXCSourceLanguage, - #superclass : #FAMIXSourceLanguage, - #category : #'Famix-C' -} - -{ #category : #meta } -FAMIXCSourceLanguage class >> annotation [ - - -] - -{ #category : #testing } -FAMIXCSourceLanguage >> isC [ - ^ true -] diff --git a/src-archive/Famix-C/FAMIXCompilationUnit.class.st b/src-archive/Famix-C/FAMIXCompilationUnit.class.st deleted file mode 100644 index 3c6cbad36..000000000 --- a/src-archive/Famix-C/FAMIXCompilationUnit.class.st +++ /dev/null @@ -1,41 +0,0 @@ -" -I represent a compilation unit file. Typically a .c or .cpp file -" -Class { - #name : #FAMIXCompilationUnit, - #superclass : #FAMIXCFile, - #instVars : [ - 'module', - 'headers' - ], - #category : #'Famix-C' -} - -{ #category : #meta } -FAMIXCompilationUnit class >> annotation [ - - -] - -{ #category : #'initialize-release' } -FAMIXCompilationUnit >> initialize [ - super initialize. - headers := OrderedCollection new. -] - -{ #category : #testing } -FAMIXCompilationUnit >> isCompilationUnit [ - ^ true -] - -{ #category : #accessing } -FAMIXCompilationUnit >> module [ - - - ^ module -] - -{ #category : #accessing } -FAMIXCompilationUnit >> module: aFAMIXModule [ - module := aFAMIXModule -] diff --git a/src-archive/Famix-C/FAMIXCppSourceLanguage.class.st b/src-archive/Famix-C/FAMIXCppSourceLanguage.class.st deleted file mode 100644 index a958e0923..000000000 --- a/src-archive/Famix-C/FAMIXCppSourceLanguage.class.st +++ /dev/null @@ -1,16 +0,0 @@ -" -FAMIXCppSourceLanguage represents the C++ language. - -Inherits from FAMIXCSourceLanguage because C++ can be seen as a superset of C -" -Class { - #name : #FAMIXCppSourceLanguage, - #superclass : #FAMIXCSourceLanguage, - #category : #'Famix-C' -} - -{ #category : #meta } -FAMIXCppSourceLanguage class >> annotation [ - - -] diff --git a/src-archive/Famix-C/FAMIXDereferencedInvocation.class.st b/src-archive/Famix-C/FAMIXDereferencedInvocation.class.st deleted file mode 100644 index 31fbeab38..000000000 --- a/src-archive/Famix-C/FAMIXDereferencedInvocation.class.st +++ /dev/null @@ -1,33 +0,0 @@ -" -Represents an invocation which function is contained in a pointer. - -The function itself is typically unknown (referenced by the pointer). - -It has a referencer which is the pointer variable -" -Class { - #name : #FAMIXDereferencedInvocation, - #superclass : #FAMIXInvocation, - #instVars : [ - 'referencer' - ], - #category : #'Famix-C' -} - -{ #category : #meta } -FAMIXDereferencedInvocation class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXDereferencedInvocation >> referencer [ - - - ^ referencer -] - -{ #category : #accessing } -FAMIXDereferencedInvocation >> referencer: anObject [ - referencer := anObject -] diff --git a/src-archive/Famix-C/FAMIXFile.extension.st b/src-archive/Famix-C/FAMIXFile.extension.st deleted file mode 100644 index 14c8e7e08..000000000 --- a/src-archive/Famix-C/FAMIXFile.extension.st +++ /dev/null @@ -1,11 +0,0 @@ -Extension { #name : #FAMIXFile } - -{ #category : #'*Famix-C-testing' } -FAMIXFile >> isCompilationUnit [ - ^ false -] - -{ #category : #'*Famix-C-testing' } -FAMIXFile >> isHeader [ - ^ false -] diff --git a/src-archive/Famix-C/FAMIXFunction.extension.st b/src-archive/Famix-C/FAMIXFunction.extension.st deleted file mode 100644 index 7d39cdd76..000000000 --- a/src-archive/Famix-C/FAMIXFunction.extension.st +++ /dev/null @@ -1,23 +0,0 @@ -Extension { #name : #FAMIXFunction } - -{ #category : #'*Famix-C' } -FAMIXFunction >> parentModule [ - - - ^ self privateState - attributeAt: #parentModule - ifAbsentPut: [ nil ] -] - -{ #category : #'*Famix-C' } -FAMIXFunction >> parentModule: aModule [ - ^ self privateState - attributeAt: #parentModule - put: ( - FMMultivalueLink - on: self - update: #functions - from: self parentModule - to: aModule - ) -] diff --git a/src-archive/Famix-C/FAMIXGlobalVariable.extension.st b/src-archive/Famix-C/FAMIXGlobalVariable.extension.st deleted file mode 100644 index 5840d45c4..000000000 --- a/src-archive/Famix-C/FAMIXGlobalVariable.extension.st +++ /dev/null @@ -1,21 +0,0 @@ -Extension { #name : #FAMIXGlobalVariable } - -{ #category : #'*Famix-C' } -FAMIXGlobalVariable >> parentModule [ - - - ^ self privateState - attributeAt: #parentModule - ifAbsentPut: [ nil ] -] - -{ #category : #'*Famix-C' } -FAMIXGlobalVariable >> parentModule: aModule [ - ^ self privateState - attributeAt: #parentModule - put: (FMMultivalueLink - on: self - update: #globalVariables - from: self parentModule - to: aModule) -] diff --git a/src-archive/Famix-C/FAMIXHeader.class.st b/src-archive/Famix-C/FAMIXHeader.class.st deleted file mode 100644 index edc88065a..000000000 --- a/src-archive/Famix-C/FAMIXHeader.class.st +++ /dev/null @@ -1,34 +0,0 @@ -" -I represent a header file. Typically a .h or .hpp -" -Class { - #name : #FAMIXHeader, - #superclass : #FAMIXCFile, - #instVars : [ - 'module' - ], - #category : #'Famix-C' -} - -{ #category : #meta } -FAMIXHeader class >> annotation [ - - -] - -{ #category : #testing } -FAMIXHeader >> isHeader [ - ^ true -] - -{ #category : #accessing } -FAMIXHeader >> module [ - - - ^ module -] - -{ #category : #accessing } -FAMIXHeader >> module: anObject [ - module := anObject -] diff --git a/src-archive/Famix-C/FAMIXInclude.class.st b/src-archive/Famix-C/FAMIXInclude.class.st deleted file mode 100644 index 7fc25f7d6..000000000 --- a/src-archive/Famix-C/FAMIXInclude.class.st +++ /dev/null @@ -1,63 +0,0 @@ -" -An association to represent include relationships between .c and .h files -" -Class { - #name : #FAMIXInclude, - #superclass : #FAMIXAssociation, - #instVars : [ - 'source', - 'target' - ], - #category : #'Famix-C' -} - -{ #category : #meta } -FAMIXInclude class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXInclude >> from [ - ^ self source -] - -{ #category : #accessing } -FAMIXInclude >> source [ - - - - ^ source -] - -{ #category : #accessing } -FAMIXInclude >> source: aFile [ - - source := FMMultivalueLink on: self - update: #outgoingIncludeRelations - from: self source - to: aFile - -] - -{ #category : #accessing } -FAMIXInclude >> target [ - - - - ^ target -] - -{ #category : #accessing } -FAMIXInclude >> target: aFile [ - target := FMMultivalueLink on: self - update: #incomingIncludeRelations - from: self target - to: aFile - -] - -{ #category : #accessing } -FAMIXInclude >> to [ - ^ self target -] diff --git a/src-archive/Famix-C/FAMIXModule.class.st b/src-archive/Famix-C/FAMIXModule.class.st deleted file mode 100644 index e0f924316..000000000 --- a/src-archive/Famix-C/FAMIXModule.class.st +++ /dev/null @@ -1,50 +0,0 @@ -" -FAMIXModule represents a that basically provides a simple scoping abstraction for a .C/.CPP/.H files. - -" -Class { - #name : #FAMIXModule, - #superclass : #FAMIXScopingEntity, - #instVars : [ - 'compilationUnit', - 'header' - ], - #category : #'Famix-C' -} - -{ #category : #meta } -FAMIXModule class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXModule >> classes [ - ^ #() -] - -{ #category : #accessing } -FAMIXModule >> compilationUnit [ - - - - ^ compilationUnit -] - -{ #category : #accessing } -FAMIXModule >> compilationUnit: aCompilationUnit [ - compilationUnit := aCompilationUnit -] - -{ #category : #accessing } -FAMIXModule >> header [ - - - - ^ header -] - -{ #category : #accessing } -FAMIXModule >> header: anObject [ - header := anObject -] diff --git a/src-archive/Famix-C/FAMIXPreprocessorDefine.class.st b/src-archive/Famix-C/FAMIXPreprocessorDefine.class.st deleted file mode 100644 index 48e434bed..000000000 --- a/src-archive/Famix-C/FAMIXPreprocessorDefine.class.st +++ /dev/null @@ -1,31 +0,0 @@ -" -Represent a preprocessor #define statement - -Knows the name of the macro defined -" -Class { - #name : #FAMIXPreprocessorDefine, - #superclass : #FAMIXPreprocessorStatement, - #instVars : [ - 'macro' - ], - #category : #'Famix-C' -} - -{ #category : #meta } -FAMIXPreprocessorDefine class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXPreprocessorDefine >> macro [ - - - ^ macro -] - -{ #category : #accessing } -FAMIXPreprocessorDefine >> macro: anObject [ - macro := anObject -] diff --git a/src-archive/Famix-C/FAMIXPreprocessorIfdef.class.st b/src-archive/Famix-C/FAMIXPreprocessorIfdef.class.st deleted file mode 100644 index 98067f810..000000000 --- a/src-archive/Famix-C/FAMIXPreprocessorIfdef.class.st +++ /dev/null @@ -1,44 +0,0 @@ -" -Represent a preprocessor #ifdef/#ifndef statement - -Knows the name of the macro tested and whether it is ""negated"" (#ifndef) or not (#ifdef) -" -Class { - #name : #FAMIXPreprocessorIfdef, - #superclass : #FAMIXPreprocessorStatement, - #instVars : [ - 'macro', - 'negated' - ], - #category : #'Famix-C' -} - -{ #category : #meta } -FAMIXPreprocessorIfdef class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXPreprocessorIfdef >> isNegated [ - - - ^ negated -] - -{ #category : #accessing } -FAMIXPreprocessorIfdef >> isNegated: aBoolean [ - negated := aBoolean -] - -{ #category : #accessing } -FAMIXPreprocessorIfdef >> macro [ - - - ^ macro -] - -{ #category : #accessing } -FAMIXPreprocessorIfdef >> macro: anObject [ - macro := anObject -] diff --git a/src-archive/Famix-C/FAMIXPreprocessorStatement.class.st b/src-archive/Famix-C/FAMIXPreprocessorStatement.class.st deleted file mode 100644 index a5bb8398e..000000000 --- a/src-archive/Famix-C/FAMIXPreprocessorStatement.class.st +++ /dev/null @@ -1,16 +0,0 @@ -" -Represents some preprocessor statements of interest: #ifdef, #define, ... - -Notable exception: #include which is represented as an Association -" -Class { - #name : #FAMIXPreprocessorStatement, - #superclass : #FAMIXSourcedEntity, - #category : #'Famix-C' -} - -{ #category : #meta } -FAMIXPreprocessorStatement class >> annotation [ - - -] diff --git a/src-archive/Famix-C/FAMIXSourceLanguage.extension.st b/src-archive/Famix-C/FAMIXSourceLanguage.extension.st deleted file mode 100644 index f9c72c6ef..000000000 --- a/src-archive/Famix-C/FAMIXSourceLanguage.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #FAMIXSourceLanguage } - -{ #category : #'*Famix-C' } -FAMIXSourceLanguage >> isC [ - ^ false -] diff --git a/src-archive/Famix-C/FAMIXStructuralEntity.extension.st b/src-archive/Famix-C/FAMIXStructuralEntity.extension.st deleted file mode 100644 index 0f034e31d..000000000 --- a/src-archive/Famix-C/FAMIXStructuralEntity.extension.st +++ /dev/null @@ -1,11 +0,0 @@ -Extension { #name : #FAMIXStructuralEntity } - -{ #category : #'*Famix-C' } -FAMIXStructuralEntity >> dereferencedInvocations [ - - - - - ^self privateState attributeAt: #dereferencedInvocations - ifAbsent: [ FMMultivalueLink on: self opposite: #referencer: ] -] diff --git a/src-archive/Famix-C/FAMIXType.extension.st b/src-archive/Famix-C/FAMIXType.extension.st deleted file mode 100644 index a6ab31448..000000000 --- a/src-archive/Famix-C/FAMIXType.extension.st +++ /dev/null @@ -1,11 +0,0 @@ -Extension { #name : #FAMIXType } - -{ #category : #'*Famix-C' } -FAMIXType >> typeAliases [ - - - - ^ self privateState - attributeAt: #typeAliases - ifAbsentPut: [FMMultivalueLink on: self opposite: #aliasedType:] -] diff --git a/src-archive/Famix-C/MooseAbstractGroup.extension.st b/src-archive/Famix-C/MooseAbstractGroup.extension.st deleted file mode 100644 index ab8048b88..000000000 --- a/src-archive/Famix-C/MooseAbstractGroup.extension.st +++ /dev/null @@ -1,19 +0,0 @@ -Extension { #name : #MooseAbstractGroup } - -{ #category : #'*Famix-C' } -MooseAbstractGroup >> allHeaders [ - - ^ self allWithType: FamixHeader -] - -{ #category : #'*Famix-C' } -MooseAbstractGroup >> allModules [ - - ^ self allWithType: FamixModule -] - -{ #category : #'*Famix-C' } -MooseAbstractGroup >> allTypeAliases [ - - ^ self allWithType: FamixTypeAlias -] diff --git a/src-archive/Famix-C/package.st b/src-archive/Famix-C/package.st deleted file mode 100644 index 06959aec5..000000000 --- a/src-archive/Famix-C/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Famix-C' } diff --git a/src-archive/Famix-Core/FAMIXAccess.class.st b/src-archive/Famix-Core/FAMIXAccess.class.st deleted file mode 100644 index 9211ac642..000000000 --- a/src-archive/Famix-Core/FAMIXAccess.class.st +++ /dev/null @@ -1,116 +0,0 @@ -" -FAMIXAccess represents an access to a variable by a behavioural entity (for example, a function or a method). - -For example if the method foo accesses the instance variable x, there is an access with the following information: - (i) From: aFAMIXMethod (foo) - (ii) To: aFAMIXAttribute (x) - -aFAMIXMethod (foo) can be accessed using the message accessor (and from) -aFAMIXAttribute (x) can be accessed using the message variable (and to). - -Furthermore it can be tagged as read or write using isWrite: aBoolean. - -For each access in the source code, there is one famix access created even if it is from the same behavioral entity towards the same variable. - - -" -Class { - #name : #FAMIXAccess, - #superclass : #FAMIXAssociation, - #instVars : [ - 'isWrite', - 'accessor', - 'variable' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXAccess class >> annotation [ - - - ^self -] - -{ #category : #accessing } -FAMIXAccess >> accessor [ - - - - ^ accessor -] - -{ #category : #accessing } -FAMIXAccess >> accessor: aBehaviouralEntity [ - accessor := FMMultivalueLink - on: self - update: #accesses - from: self accessor - to: aBehaviouralEntity -] - -{ #category : #accessing } -FAMIXAccess >> from [ - ^ self accessor -] - -{ #category : #accessing } -FAMIXAccess >> from: anAccessor [ - self accessor: anAccessor -] - -{ #category : #accessing } -FAMIXAccess >> isRead [ - - - - ^ isWrite isNil ifTrue: [ false ] ifFalse: [ isWrite not ] -] - -{ #category : #accessing } -FAMIXAccess >> isReadWriteUnknown [ - - - - ^ isWrite isNil -] - -{ #category : #accessing } -FAMIXAccess >> isWrite [ - - - - ^ isWrite ifNil: [ false ] -] - -{ #category : #accessing } -FAMIXAccess >> isWrite: aBoolean [ - isWrite := aBoolean -] - -{ #category : #accessing } -FAMIXAccess >> to [ - ^ self variable -] - -{ #category : #accessing } -FAMIXAccess >> to: aVariable [ - self variable: aVariable -] - -{ #category : #accessing } -FAMIXAccess >> variable [ - - - - ^ variable -] - -{ #category : #accessing } -FAMIXAccess >> variable: aStructuralEntity [ - (aStructuralEntity isKindOf: FAMIXAnnotationInstanceAttribute) ifFalse: [ - variable := FMMultivalueLink on: self - update: #incomingAccesses - from: self variable - to: aStructuralEntity] -] diff --git a/src-archive/Famix-Core/FAMIXAnnotationInstance.class.st b/src-archive/Famix-Core/FAMIXAnnotationInstance.class.st deleted file mode 100644 index a23527683..000000000 --- a/src-archive/Famix-Core/FAMIXAnnotationInstance.class.st +++ /dev/null @@ -1,143 +0,0 @@ -" -AnnotationInstance is an instance of an AnnotationType. It links an AnnotationType to an actual entity. - -For example, the following is an annotation instance in Smalltalk. -. - -And the following is an AnnotationInstance in Java: -@Test(timeout = 500) - -Instance Variables: - annotatedEntity - annotationType -" -Class { - #name : #FAMIXAnnotationInstance, - #superclass : #FAMIXSourcedEntity, - #traits : 'TEntityMetaLevelDependency + TDependencyQueries', - #classTraits : 'TEntityMetaLevelDependency classTrait + TDependencyQueries classTrait', - #instVars : [ - 'annotatedEntity', - 'annotationType', - 'attributes' - ], - #classInstVars : [ - 'childrenSelectors', - 'allParentTypes', - 'allChildrenTypes', - 'parentSelectors' - ], - #category : #'Famix-Core' -} - -{ #category : #accessing } -FAMIXAnnotationInstance class >> allIncomingAssociationTypes [ - ^ self privateAllIncomingAssociationTypes -] - -{ #category : #accessing } -FAMIXAnnotationInstance class >> allOutgoingAssociationTypes [ - ^ self privateAllOutgoingAssociationTypes -] - -{ #category : #meta } -FAMIXAnnotationInstance class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXAnnotationInstance >> annotatedEntity [ - - - - ^ annotatedEntity -] - -{ #category : #accessing } -FAMIXAnnotationInstance >> annotatedEntity: anEntity [ - annotatedEntity := FMMultivalueLink on: self - update: #annotationInstances - from: self annotatedEntity - to: anEntity -] - -{ #category : #accessing } -FAMIXAnnotationInstance >> annotationType [ - - - - ^ annotationType -] - -{ #category : #accessing } -FAMIXAnnotationInstance >> annotationType: anAnnotationType [ - annotationType := FMMultivalueLink on: self - update: #instances - from: self annotationType - to: anAnnotationType -] - -{ #category : #accessing } -FAMIXAnnotationInstance >> attributes [ - - - ^ attributes -] - -{ #category : #accessing } -FAMIXAnnotationInstance >> attributes: anAnnotationInstanceAttribute [ - attributes value: anAnnotationInstanceAttribute -] - -{ #category : #accessing } -FAMIXAnnotationInstance >> belongsTo [ - ^ self annotatedEntity -] - -{ #category : #'moosequery-queries-incoming' } -FAMIXAnnotationInstance >> incomingTypeDeclarations [ - "Should return the incoming type declarations of the entity as MooseChefTypeDeclarationAssociation. - - typeDeclaration is a virtual association that relates a structural entity (i.e. a variable) to its type." - - ^ {} -] - -{ #category : #'initialize-release' } -FAMIXAnnotationInstance >> initialize [ - super initialize. - attributes := FMNullMultivalueLink on: self opposite: #parentAnnotationInstance: selector: #attributes -] - -{ #category : #accessing } -FAMIXAnnotationInstance >> mooseNameOn: aStream [ - self annotationType notNil ifTrue: [ - self annotationType mooseNameOn: aStream ]. - aStream nextPut: $(. - self attributes - do: [:each | aStream nextPutAll: each value asString ] - separatedBy: [aStream nextPut: $,]. - aStream nextPut: $). - aStream nextPut: $-. - self annotatedEntity notNil ifTrue: [ - self annotatedEntity mooseNameOn: aStream ] -] - -{ #category : #accessing } -FAMIXAnnotationInstance >> name [ - ^ String - streamContents: [ :stream | - stream << '@' - << (self annotationType ifNil: [ super name ] ifNotNil: [ :type | type name ]) - << ' on ' << (self annotatedEntity ifNotNil: #name ifNil: [ 'undefined' ]) ] -] - -{ #category : #'moosequery-queries-outgoing' } -FAMIXAnnotationInstance >> outgoingTypeDeclarations [ - "Should return the outgoing type declarations of the entity as MooseChefTypeDeclarationAssociation. - - typeDeclaration is a virtual association that relates a structural entity (i.e. a variable) to its type." - - ^ {} -] diff --git a/src-archive/Famix-Core/FAMIXAnnotationInstanceAttribute.class.st b/src-archive/Famix-Core/FAMIXAnnotationInstanceAttribute.class.st deleted file mode 100644 index 1a60308b9..000000000 --- a/src-archive/Famix-Core/FAMIXAnnotationInstanceAttribute.class.st +++ /dev/null @@ -1,113 +0,0 @@ -" -This models the actual value of an attribute in an AnnotationInstance. - -In the following AnnotationInstance of Java, timeout is an annotation instance attribute : -@Test(timeout = 500) - -Instance Variables: - parentAnnotationInstance - annotationTypeAttribute - value -" -Class { - #name : #FAMIXAnnotationInstanceAttribute, - #superclass : #FAMIXSourcedEntity, - #traits : 'TEntityMetaLevelDependency + TDependencyQueries', - #classTraits : 'TEntityMetaLevelDependency classTrait + TDependencyQueries classTrait', - #instVars : [ - 'parentAnnotationInstance', - 'annotationTypeAttribute', - 'value' - ], - #classInstVars : [ - 'childrenSelectors', - 'allParentTypes', - 'allChildrenTypes', - 'parentSelectors' - ], - #category : #'Famix-Core' -} - -{ #category : #accessing } -FAMIXAnnotationInstanceAttribute class >> allIncomingAssociationTypes [ - ^ self privateAllIncomingAssociationTypes -] - -{ #category : #accessing } -FAMIXAnnotationInstanceAttribute class >> allOutgoingAssociationTypes [ - ^ self privateAllOutgoingAssociationTypes -] - -{ #category : #meta } -FAMIXAnnotationInstanceAttribute class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXAnnotationInstanceAttribute >> annotationTypeAttribute [ - - - ^ annotationTypeAttribute -] - -{ #category : #accessing } -FAMIXAnnotationInstanceAttribute >> annotationTypeAttribute: anAnnotationTypeAttribute [ - annotationTypeAttribute := FMMultivalueLink on: self - update: #annotationAttributeInstances - from: self annotationTypeAttribute - to: anAnnotationTypeAttribute -] - -{ #category : #'moosequery-queries-incoming' } -FAMIXAnnotationInstanceAttribute >> incomingTypeDeclarations [ - "Should return the incoming type declarations of the entity as MooseChefTypeDeclarationAssociation. - - typeDeclaration is a virtual association that relates a structural entity (i.e. a variable) to its type." - - ^ {} -] - -{ #category : #accessing } -FAMIXAnnotationInstanceAttribute >> name [ - ^ self annotationTypeAttribute notNil - ifTrue: [ self annotationTypeAttribute name ] - ifFalse: [ nil ] -] - -{ #category : #'moosequery-queries-outgoing' } -FAMIXAnnotationInstanceAttribute >> outgoingTypeDeclarations [ - "Should return the outgoing type declarations of the entity as MooseChefTypeDeclarationAssociation. - - typeDeclaration is a virtual association that relates a structural entity (i.e. a variable) to its type." - - ^ {} -] - -{ #category : #accessing } -FAMIXAnnotationInstanceAttribute >> parentAnnotationInstance [ - - - - ^ parentAnnotationInstance -] - -{ #category : #accessing } -FAMIXAnnotationInstanceAttribute >> parentAnnotationInstance: anAnnotationInstance [ - parentAnnotationInstance := FMMultivalueLink on: self - update: #attributes - from: self parentAnnotationInstance - to: anAnnotationInstance -] - -{ #category : #accessing } -FAMIXAnnotationInstanceAttribute >> value [ - - - ^ value -] - -{ #category : #accessing } -FAMIXAnnotationInstanceAttribute >> value: anObject [ - value := anObject -] diff --git a/src-archive/Famix-Core/FAMIXAnnotationType.class.st b/src-archive/Famix-Core/FAMIXAnnotationType.class.st deleted file mode 100644 index c849ee2bf..000000000 --- a/src-archive/Famix-Core/FAMIXAnnotationType.class.st +++ /dev/null @@ -1,83 +0,0 @@ -" -FAMIXAnnotationType represents the type of an annotation. In some languages, Java and C#, an annotation as an explicit type. An AnnotationType can have a container in which it resides. - -Instance Variables: - instances <(FMMultivalueLink of: FAMIXAnnotationInstance)> - container -" -Class { - #name : #FAMIXAnnotationType, - #superclass : #FAMIXType, - #instVars : [ - 'instances' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXAnnotationType class >> annotation [ - - -] - -{ #category : #'accessing-query' } -FAMIXAnnotationType >> annotatedEntities [ - ^ self instances collect: [:each | each annotatedEntity ] -] - -{ #category : #'accessing-query' } -FAMIXAnnotationType >> annotatedEntitiesGroup [ - - ^ self annotatedEntities asMooseGroup -] - -{ #category : #accessing } -FAMIXAnnotationType >> belongsTo [ - ^ container -] - -{ #category : #accessing } -FAMIXAnnotationType >> container [ - - - - - ^ container -] - -{ #category : #accessing } -FAMIXAnnotationType >> container: aContainer [ - container := FMMultivalueLink - on: self - update: #definedAnnotationTypes - from: self container - to: aContainer. - self resetMooseName -] - -{ #category : #'initialize-release' } -FAMIXAnnotationType >> initialize [ - super initialize. - instances := FMNullMultivalueLink - on: self - opposite: #annotationType: - selector: #instances. - attributes := FMNullMultivalueLink - on: self - opposite: #parentAnnotationType: - selector: #attributes. - - -] - -{ #category : #accessing } -FAMIXAnnotationType >> instances [ - - - ^ instances -] - -{ #category : #accessing } -FAMIXAnnotationType >> instances: anAnnotationInstance [ - instances value: anAnnotationInstance -] diff --git a/src-archive/Famix-Core/FAMIXAnnotationTypeAttribute.class.st b/src-archive/Famix-Core/FAMIXAnnotationTypeAttribute.class.st deleted file mode 100644 index 816dee8e6..000000000 --- a/src-archive/Famix-Core/FAMIXAnnotationTypeAttribute.class.st +++ /dev/null @@ -1,63 +0,0 @@ -" -This models the attribute defined in a Java AnnotationType. In Java, annotation type attributes have specific syntax and use. - -For example, in Java the following AnnotationType has four AnnotationTypeAttributes (id, synopsis, engineer and date are attributes). - -public @interface MyAnno { - int id(); - String synopsis(); - String engineer() default ""[unassigned]""; - String date() default ""[unimplemented]""; -} - -When using an annotation, an annotation instance is created that points back to the annotation type. The annotation instance has attributes that are annontation instance attributes and point back to their annotation type attributes. - -Instance Variables: - parentAnnotationType - annotationAttributeInstances <(FMMultivalueLink of: FAMIXAnnotationInstanceAttribute)> -" -Class { - #name : #FAMIXAnnotationTypeAttribute, - #superclass : #FAMIXAttribute, - #instVars : [ - 'annotationAttributeInstances' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXAnnotationTypeAttribute class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXAnnotationTypeAttribute >> annotationAttributeInstances [ - - - ^ annotationAttributeInstances -] - -{ #category : #accessing } -FAMIXAnnotationTypeAttribute >> annotationAttributeInstances: anObject [ - annotationAttributeInstances value: anObject -] - -{ #category : #'initialize-release' } -FAMIXAnnotationTypeAttribute >> initialize [ - super initialize. - annotationAttributeInstances := FMNullMultivalueLink on: self opposite: #annotationTypeAttribute: selector: #annotationAttributeInstances -] - -{ #category : #accessing } -FAMIXAnnotationTypeAttribute >> parentAnnotationType [ - - - - ^ self parentType -] - -{ #category : #accessing } -FAMIXAnnotationTypeAttribute >> parentAnnotationType: anAnnotationType [ - self parentType: anAnnotationType -] diff --git a/src-archive/Famix-Core/FAMIXAssociation.class.st b/src-archive/Famix-Core/FAMIXAssociation.class.st deleted file mode 100644 index a1090b416..000000000 --- a/src-archive/Famix-Core/FAMIXAssociation.class.st +++ /dev/null @@ -1,140 +0,0 @@ -" -FAMIXAssociation is an abstract superclass for relationships between Famix named entities. It defines a polymorphic API refined by subclasses: essentially from, to, next and previous. - -From and To properties are abstract at this level, but specific implementations can have multiple ends and properties. -For example, FAMIXInheritance has: - (i) From mapped to the subclass; - (ii) To mapped to the superclass. - -To adapt your code to MooseQuery, you have also to add the and pragmas in the selectors definition for each class inheriting FAMIXAssociation - -Next and Previous properties provide an order of the appearence of these associations in code. The order is calculated within a particular relationship for example, method invocation order within a calling method (from). -For example in java, the following code - method a() { b(); c(); } -will produce two invocation associations first from method a to method b, and second from method a to method c. These associations are bound together and can be navigated with previous and next. - - - - -" -Class { - #name : #FAMIXAssociation, - #superclass : #FAMIXSourcedEntity, - #traits : 'TAssociationMetaLevelDependency', - #classTraits : 'TAssociationMetaLevelDependency classTrait', - #instVars : [ - 'previous', - 'next' - ], - #classInstVars : [ - 'targetTypes', - 'sourceTypes' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXAssociation class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXAssociation class >> possibleSourceClasses [ - self - deprecated: 'Use sourceTypes instead' - on: '23 January 2018' - in: 'Moose6.1' - transformWith: '`@receiver possibleSourceClasses' -> '`@receiver sourceTypes'. - ^ self sourceTypes -] - -{ #category : #accessing } -FAMIXAssociation class >> possibleTargetClasses [ - self - deprecated: 'Use targetTypes instead' - on: '23 January 2018' - in: 'Moose6.1' - transformWith: '`@receiver possibleTargetClasses' -> '`@receiver targetTypes'. - ^ self targetTypes -] - -{ #category : #accessing } -FAMIXAssociation class >> sourceTypes [ - ^ sourceTypes - ifNil: [ sourceTypes := self privateSourceTypes ] -] - -{ #category : #accessing } -FAMIXAssociation class >> targetTypes [ - ^ targetTypes - ifNil: [ targetTypes := self privateTargetTypes ] -] - -{ #category : #accessing } -FAMIXAssociation >> anyTo [ - "This is a utility method that could be used polymorphically to obtain exactly one - target entity even when the internal implementation stores these as a collection" - ^ self to asOrderedCollection anyOne -] - -{ #category : #accessing } -FAMIXAssociation >> from [ - "Polymorphic accessor to the entity originating the association. - It should be refined by subclasses by delegating to a concrete property. - This property should always remain derived." - - - - ^ self subclassResponsibility -] - -{ #category : #printing } -FAMIXAssociation >> gtDisplayOn: aStream [ - self from gtDisplayOn: aStream. - aStream nextPutAll: ' -> '. - self to gtDisplayOn: aStream -] - -{ #category : #accessing } -FAMIXAssociation >> next [ - - - - ^ next -] - -{ #category : #accessing } -FAMIXAssociation >> next: anAssociation [ - next := anAssociation -] - -{ #category : #accessing } -FAMIXAssociation >> previous [ - - - - ^ previous -] - -{ #category : #accessing } -FAMIXAssociation >> previous: anAssociation [ - | old | - previous = anAssociation - ifTrue: [ ^ self ]. - old := previous. - previous := anAssociation. - old ifNotNil: [ old next: nil ]. - anAssociation ifNotNil: [ anAssociation next: self ] -] - -{ #category : #accessing } -FAMIXAssociation >> to [ - "Polymorphic accessor to the target entity of the association. - It should be refined by subclasses by delegating to a concrete property. - This property should always remain derived." - - - - ^ self subclassResponsibility -] diff --git a/src-archive/Famix-Core/FAMIXAttribute.class.st b/src-archive/Famix-Core/FAMIXAttribute.class.st deleted file mode 100644 index 90924bf64..000000000 --- a/src-archive/Famix-Core/FAMIXAttribute.class.st +++ /dev/null @@ -1,84 +0,0 @@ -" -FAMIXAttribute represents a field of a class. It is an attribute of the parent type. - -" -Class { - #name : #FAMIXAttribute, - #superclass : #FAMIXStructuralEntity, - #instVars : [ - 'hasClassScope', - 'parentType' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXAttribute class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXAttribute >> belongsTo [ - - ^ self parentType -] - -{ #category : #accessing } -FAMIXAttribute >> belongsTo: aType [ - self parentType -] - -{ #category : #accessing } -FAMIXAttribute >> hasClassScope [ - - - - ^ hasClassScope -] - -{ #category : #accessing } -FAMIXAttribute >> hasClassScope: aBoolean [ - - hasClassScope := aBoolean -] - -{ #category : #'initialize-release' } -FAMIXAttribute >> initialize [ - super initialize. - hasClassScope := false. - -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXAttribute >> namespaceScope [ - ^ self parentType namespaceScope -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXAttribute >> packageScope [ - ^ self parentType packageScope -] - -{ #category : #accessing } -FAMIXAttribute >> parentType [ - - - - ^ parentType -] - -{ #category : #accessing } -FAMIXAttribute >> parentType: aType [ - parentType := FMMultivalueLink - on: self - update: #attributes - from: self parentType - to: aType. - self resetMooseName -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXAttribute >> typeScope [ - ^ self parentType -] diff --git a/src-archive/Famix-Core/FAMIXBehaviouralEntity.class.st b/src-archive/Famix-Core/FAMIXBehaviouralEntity.class.st deleted file mode 100644 index 247f7c857..000000000 --- a/src-archive/Famix-Core/FAMIXBehaviouralEntity.class.st +++ /dev/null @@ -1,211 +0,0 @@ -" -FAMIXBehaviouralEntity is an abstract superclass for any kind of behavior. For example, functions and methods. It has a name because it is a named entity but it also has a signature in the format: methodName(paramType1, paramType2). The signature property is necessary for a behavioral entity. An external parser should provide a few metrics that cannot be derived from the model such as cyclomatic complexity, numberOfStatements and numberOfConditionals. Other metrics can be computed from the model if enough information is provided such as numberOfLinesOfCode (from source anchor) and numberOfComments (from FAMIXComment). - -It provides properties to manage: -(i) parameters -(ii) local variables -(iii) accesses to variables, and -(iv) invocations to and from other behavioural entities. - -Optionally, it can also specify a declaredType (e.g. return types for functions). This is useful for modeling behaviours from statically typed languages. -" -Class { - #name : #FAMIXBehaviouralEntity, - #superclass : #FAMIXContainerEntity, - #instVars : [ - 'outgoingReferences', - 'outgoingInvocations', - 'incomingInvocations', - 'localVariables', - 'implicitVariables', - 'parameters', - 'signature', - 'accesses', - 'declaredType' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXBehaviouralEntity class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXBehaviouralEntity >> accesses [ - - - - ^ accesses -] - -{ #category : #accessing } -FAMIXBehaviouralEntity >> accesses: anAccess [ - accesses value: anAccess -] - -{ #category : #accessing } -FAMIXBehaviouralEntity >> addAccess: anAccess [ - accesses add: anAccess -] - -{ #category : #accessing } -FAMIXBehaviouralEntity >> addImplicitVariable: anImplicitVariable [ - implicitVariables add: anImplicitVariable -] - -{ #category : #accessing } -FAMIXBehaviouralEntity >> addIncomingInvocation: anInvocation [ - incomingInvocations add: anInvocation -] - -{ #category : #accessing } -FAMIXBehaviouralEntity >> addLocalVariable: aLocalVariable [ - localVariables add: aLocalVariable -] - -{ #category : #accessing } -FAMIXBehaviouralEntity >> addOutgoingInvocation: anInvocation [ - outgoingInvocations add: anInvocation -] - -{ #category : #accessing } -FAMIXBehaviouralEntity >> addOutgoingReference: aReference [ - outgoingReferences add: aReference -] - -{ #category : #accessing } -FAMIXBehaviouralEntity >> addParameter: aParameter [ - parameters add: aParameter -] - -{ #category : #accessing } -FAMIXBehaviouralEntity >> declaredType [ - - - ^ declaredType -] - -{ #category : #accessing } -FAMIXBehaviouralEntity >> declaredType: aType [ - declaredType := FMMultivalueLink on: self - update: #behavioursWithDeclaredType - from: self declaredType - to: aType -] - -{ #category : #accessing } -FAMIXBehaviouralEntity >> implicitVariables [ - - - - ^ implicitVariables -] - -{ #category : #accessing } -FAMIXBehaviouralEntity >> implicitVariables: aCollectionOfImplicitVariables [ - implicitVariables value: aCollectionOfImplicitVariables -] - -{ #category : #accessing } -FAMIXBehaviouralEntity >> incomingInvocations [ - - - - ^incomingInvocations -] - -{ #category : #accessing } -FAMIXBehaviouralEntity >> incomingInvocations: anInvocation [ - incomingInvocations value: anInvocation -] - -{ #category : #'moosequery-queries-incoming' } -FAMIXBehaviouralEntity >> incomingTypeDeclarations [ - ^ {} -] - -{ #category : #'initialize-release' } -FAMIXBehaviouralEntity >> initialize [ - super initialize. - outgoingInvocations := FMNullMultivalueLink on: self opposite: #sender: selector: #outgoingInvocations. - incomingInvocations := FMMultiMultivalueLink on: self opposite: #candidates. - localVariables := FMNullMultivalueLink on: self opposite: #parentBehaviouralEntity: selector: #localVariables. - implicitVariables := FMNullMultivalueLink on: self opposite: #parentBehaviouralEntity: selector: #implicitVariables. - parameters := FMNullMultivalueLink on: self opposite: #parentBehaviouralEntity: selector: #parameters. - accesses := FMNullMultivalueLink on: self opposite: #accessor: selector: #accesses. - outgoingReferences := FMNullMultivalueLink on: self opposite: #source: selector: #outgoingReferences -] - -{ #category : #accessing } -FAMIXBehaviouralEntity >> localVariables [ - - - - ^localVariables -] - -{ #category : #accessing } -FAMIXBehaviouralEntity >> localVariables: aLocalVariable [ - localVariables value: aLocalVariable -] - -{ #category : #accessing } -FAMIXBehaviouralEntity >> outgoingInvocations [ - - - - ^outgoingInvocations -] - -{ #category : #accessing } -FAMIXBehaviouralEntity >> outgoingInvocations: outgoing [ - outgoingInvocations value: outgoing -] - -{ #category : #accessing } -FAMIXBehaviouralEntity >> outgoingReferences [ - - - - ^outgoingReferences -] - -{ #category : #accessing } -FAMIXBehaviouralEntity >> outgoingReferences: aReference [ - outgoingReferences value: aReference -] - -{ #category : #'moosequery-queries-outgoing' } -FAMIXBehaviouralEntity >> outgoingTypeDeclarations [ - ^ self declaredType ifNil: [ {} ] ifNotNil: [ :dt | {(MooseChefTypeDeclarationAssociation newFrom: self to: dt)} ] -] - -{ #category : #accessing } -FAMIXBehaviouralEntity >> parameters [ - - - - ^parameters -] - -{ #category : #accessing } -FAMIXBehaviouralEntity >> parameters: param [ - parameters value: param -] - -{ #category : #accessing } -FAMIXBehaviouralEntity >> signature [ - - - - ^signature -] - -{ #category : #accessing } -FAMIXBehaviouralEntity >> signature: aString [ - - signature := aString. - self resetMooseName -] diff --git a/src-archive/Famix-Core/FAMIXClass.class.st b/src-archive/Famix-Core/FAMIXClass.class.st deleted file mode 100644 index 030ec7291..000000000 --- a/src-archive/Famix-Core/FAMIXClass.class.st +++ /dev/null @@ -1,52 +0,0 @@ -" -FAMIXClass represents an entity which can build new instances. A FAMIXClass is a FAMIXType, therefore it is involved in super/sub types relationships (depending on the language) and it holds attributes, methods. - -FAMIX does not model explicitly interfaces, but a FAMIXClass can represent a Java interface by setting the isInterface property. - -A class is typically scoped in a namespace. To model nested or anonymous classes, extractors can set the container of classes to classes or methods, respectively. -" -Class { - #name : #FAMIXClass, - #superclass : #FAMIXType, - #instVars : [ - 'isInterface' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXClass class >> annotation [ - - -] - -{ #category : #'initialize-release' } -FAMIXClass >> initialize [ - - super initialize. - isInterface := false -] - -{ #category : #accessing } -FAMIXClass >> isInterface [ - - - ^ isInterface ifNil: [ false ] -] - -{ #category : #accessing } -FAMIXClass >> isInterface: boolean [ - isInterface := boolean -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXClass >> selectWithinYourScope: aMooseQueryResult [ - ^ aMooseQueryResult withinClass: self -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXClass >> yourScope [ - - ^ #typeScope -] - diff --git a/src-archive/Famix-Core/FAMIXComment.class.st b/src-archive/Famix-Core/FAMIXComment.class.st deleted file mode 100644 index 6ae984b90..000000000 --- a/src-archive/Famix-Core/FAMIXComment.class.st +++ /dev/null @@ -1,81 +0,0 @@ -" -FAMIXComment represents one instance of a comment (in the sense of programming language comments) for any Famix sourced entity. The commented sourced entity is called the container in the FAMIX model. -" -Class { - #name : #FAMIXComment, - #superclass : #FAMIXSourcedEntity, - #instVars : [ - 'container' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXComment class >> annotation [ - - -] - -{ #category : #'instance creation' } -FAMIXComment class >> content: aString [ - ^ self new - content: aString; - yourself -] - -{ #category : #converting } -FAMIXComment >> asFAMIXComment [ - ^ self -] - -{ #category : #accessing } -FAMIXComment >> container [ - " -> add this make 127 test failing becase we expect that I understand the moose queries basic elements - But it should be added to have a complete metamodel" - - - - self flag: #FIXME. - ^ container -] - -{ #category : #accessing } -FAMIXComment >> container: aContainer [ - container := FMMultivalueLink on: self - update: #comments - from: self container - to: aContainer -] - -{ #category : #accessing } -FAMIXComment >> content [ - "Be careful. Do not get my content via this method because it is possible that I don't have my content in this property but I can have it via a sourceAnchor." - - - - ^ self privateState attributeAt: #content ifAbsent: [ ] -] - -{ #category : #accessing } -FAMIXComment >> content: aString [ - self privateState attributeAt: #content put: aString -] - -{ #category : #accessing } -FAMIXComment >> gtDisplayOn: aStream [ - | preview | - preview := self sourceText truncate: 10. - preview := preview copyReplaceAll: (String with: Character cr with: Character lf) with: ' '. - preview := preview copyReplaceAll: (String with: Character cr) with: ' '. - preview := preview copyReplaceAll: (String with: Character lf) with: ' '. - aStream - nextPut: $"; - nextPutAll: preview; - nextPutAll: '" in '. - self belongsTo notNil ifTrue: [ - self belongsTo gtDisplayOn: aStream ] -] - -{ #category : #accessing } -FAMIXComment >> sourceText [ - ^ self content ifNil: [ self sourceAnchor ifNil: [ '' ] ifNotNil: [ :sa | sa sourceText ] ] -] diff --git a/src-archive/Famix-Core/FAMIXContainerEntity.class.st b/src-archive/Famix-Core/FAMIXContainerEntity.class.st deleted file mode 100644 index 515c0b7f5..000000000 --- a/src-archive/Famix-Core/FAMIXContainerEntity.class.st +++ /dev/null @@ -1,75 +0,0 @@ -" -FAMIXContainerEntity is the abstract superclass for source code entities containing other entities. Types, methods, and packages are examples of FAMIXContainerEntity. - - -" -Class { - #name : #FAMIXContainerEntity, - #superclass : #FAMIXNamedEntity, - #traits : 'TOODependencyQueries - {#incomingTypeDeclarations. #outgoingTypeDeclarations}', - #classTraits : 'TOODependencyQueries classTrait', - #instVars : [ - 'types', - 'functions' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXContainerEntity class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXContainerEntity >> addFunction: aFunction [ - functions add: aFunction -] - -{ #category : #accessing } -FAMIXContainerEntity >> addType: aType [ - types add: aType -] - -{ #category : #accessing } -FAMIXContainerEntity >> functions [ - - - - ^ functions -] - -{ #category : #accessing } -FAMIXContainerEntity >> functions: aCollectionOfFunctions [ - functions value: aCollectionOfFunctions -] - -{ #category : #'initialize-release' } -FAMIXContainerEntity >> initialize [ - super initialize. - types := FMNullMultivalueLink on: self opposite: #container: selector: #types. - functions := FMNullMultivalueLink on: self opposite: #container: selector: #functions -] - -{ #category : #accessing } -FAMIXContainerEntity >> numberOfChildren [ - - - - - ^ self children size -] - -{ #category : #accessing } -FAMIXContainerEntity >> types [ - - - - ^types -] - -{ #category : #accessing } -FAMIXContainerEntity >> types: aCollection [ - types value: aCollection -] diff --git a/src-archive/Famix-Core/FAMIXCustomSourceLanguage.class.st b/src-archive/Famix-Core/FAMIXCustomSourceLanguage.class.st deleted file mode 100644 index 0ca2d3d89..000000000 --- a/src-archive/Famix-Core/FAMIXCustomSourceLanguage.class.st +++ /dev/null @@ -1,37 +0,0 @@ -" -FAMIXCustomSourceLanguage represents any source language that is not supported by default in moose. So, the CustomSourceLanguage is simply a possibility to specify -some language from an outside parser without for which there are no specific tools defined. Actually, it just represents the name of the language with a string. - - - - - - -" -Class { - #name : #FAMIXCustomSourceLanguage, - #superclass : #FAMIXSourceLanguage, - #instVars : [ - 'name' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXCustomSourceLanguage class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXCustomSourceLanguage >> name [ - - - - ^name -] - -{ #category : #accessing } -FAMIXCustomSourceLanguage >> name: aString [ - name := aString -] diff --git a/src-archive/Famix-Core/FAMIXEntity.class.st b/src-archive/Famix-Core/FAMIXEntity.class.st deleted file mode 100644 index 60b927ed7..000000000 --- a/src-archive/Famix-Core/FAMIXEntity.class.st +++ /dev/null @@ -1,37 +0,0 @@ -" -FAMIXEntity is the abstract root class of the FAMIX meta-model entities. - -## Adaptation of your Famix entity to MooseQuery -To adapt your Famix entity to this new API, you just need to add the pragma container in the accessor method enabling to access the parent in the containment tree. - - FAMIXAttribute >> parentType - ... - - ^ parentType - - -" -Class { - #name : #FAMIXEntity, - #superclass : #MooseEntity, - #classInstVars : [ - 'childrenAccessors', - 'parentSelectors', - 'allChildrenTypes', - 'allParentTypes' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXEntity class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXEntity >> belongsTo [ - "Return the primary container of the entity if it exist" - - ^ self subclassResponsibility -] diff --git a/src-archive/Famix-Core/FAMIXFunction.class.st b/src-archive/Famix-Core/FAMIXFunction.class.st deleted file mode 100644 index 4e06fdd35..000000000 --- a/src-archive/Famix-Core/FAMIXFunction.class.st +++ /dev/null @@ -1,77 +0,0 @@ -" -FAMIXFunction represents a behavioural entity in a procedural language. -" -Class { - #name : #FAMIXFunction, - #superclass : #FAMIXBehaviouralEntity, - #instVars : [ - 'container' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXFunction class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXFunction >> belongsTo [ - - ^ self container -] - -{ #category : #accessing } -FAMIXFunction >> container [ - - - - ^ container -] - -{ #category : #accessing } -FAMIXFunction >> container: aContainer [ - container := FMMultivalueLink - on: self - update: #functions - from: self container - to: aContainer -] - -{ #category : #testing } -FAMIXFunction >> isPrivate [ - ^ self isPublic not -] - -{ #category : #testing } -FAMIXFunction >> isPublic [ - "checker whether I am called outside the module in which I am defined" - ^ self receivingInvocations anySatisfy: [:inv | - inv sender container ~~ self container] -] - -{ #category : #'moose-chef-scoping-filtering' } -FAMIXFunction >> namespaceScope [ - ^ self container - ifNotNil: [ self container namespaceScope ] -] - -{ #category : #testing } -FAMIXFunction >> packageScope [ - "No package scope for functions" - - ^ nil -] - -{ #category : #accessing } -FAMIXFunction >> parentScope [ - ^ self container -] - -{ #category : #accessing } -FAMIXFunction >> parentScope: aScopingEntity [ - self deprecated: 'Please use container: instead of parentScope:'. - self container: aScopingEntity -] diff --git a/src-archive/Famix-Core/FAMIXGlobalVariable.class.st b/src-archive/Famix-Core/FAMIXGlobalVariable.class.st deleted file mode 100644 index 24fcebdf8..000000000 --- a/src-archive/Famix-Core/FAMIXGlobalVariable.class.st +++ /dev/null @@ -1,60 +0,0 @@ -" -FAMIXGlobalVariable represents a global variable in the source code. - -" -Class { - #name : #FAMIXGlobalVariable, - #superclass : #FAMIXStructuralEntity, - #instVars : [ - 'parentScope' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXGlobalVariable class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXGlobalVariable >> belongsTo [ - - ^ self parentScope -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXGlobalVariable >> namespaceScope [ - ^ self parentScope -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXGlobalVariable >> packageScope [ - ^ self parentPackage -] - -{ #category : #accessing } -FAMIXGlobalVariable >> parentScope [ - - - - - ^ parentScope -] - -{ #category : #accessing } -FAMIXGlobalVariable >> parentScope: aScopingEntity [ - parentScope := FMMultivalueLink - on: self - update: #globalVariables - from: self parentScope - to: aScopingEntity -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXGlobalVariable >> typeScope [ - "typeScope does not make sense for a global variable, - so we return nil" - - ^ nil -] diff --git a/src-archive/Famix-Core/FAMIXImplicitVariable.class.st b/src-archive/Famix-Core/FAMIXImplicitVariable.class.st deleted file mode 100644 index f1ea81845..000000000 --- a/src-archive/Famix-Core/FAMIXImplicitVariable.class.st +++ /dev/null @@ -1,73 +0,0 @@ -" -FAMIXImplicitVariable represents a variable defined by the compiler in a context, such as self, super, thisContext. -" -Class { - #name : #FAMIXImplicitVariable, - #superclass : #FAMIXStructuralEntity, - #instVars : [ - 'parentBehaviouralEntity' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXImplicitVariable class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXImplicitVariable >> belongsTo [ - ^ self parentBehaviouralEntity -] - -{ #category : #accessing } -FAMIXImplicitVariable >> belongsTo: aBehaviouralEntity [ - self parentBehaviouralEntity: aBehaviouralEntity -] - -{ #category : #accessing } -FAMIXImplicitVariable >> container [ - self deprecated: 'Please use parentBehaviouralEntity instead'. - ^ self parentBehaviouralEntity -] - -{ #category : #accessing } -FAMIXImplicitVariable >> container: aBehaviouralEntity [ - self deprecated: 'Please use #parentBehaviouralEntity: instead'. - ^ self parentBehaviouralEntity: aBehaviouralEntity -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXImplicitVariable >> namespaceScope [ - ^ self parentBehaviouralEntity namespaceScope -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXImplicitVariable >> packageScope [ - ^ self parentBehaviouralEntity packageScope -] - -{ #category : #accessing } -FAMIXImplicitVariable >> parentBehaviouralEntity [ - - - - - - ^ parentBehaviouralEntity -] - -{ #category : #accessing } -FAMIXImplicitVariable >> parentBehaviouralEntity: aBehaviouralEntity [ - parentBehaviouralEntity := FMMultivalueLink on: self - update: #implicitVariables - from: self parentBehaviouralEntity - to: aBehaviouralEntity. - self resetMooseName -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXImplicitVariable >> typeScope [ - ^ self parentBehaviouralEntity typeScope -] diff --git a/src-archive/Famix-Core/FAMIXInheritance.class.st b/src-archive/Famix-Core/FAMIXInheritance.class.st deleted file mode 100644 index 572f37738..000000000 --- a/src-archive/Famix-Core/FAMIXInheritance.class.st +++ /dev/null @@ -1,73 +0,0 @@ -" -FAMIXInheritance represents an inheritance relationship between one subtype (e.g. a subclass) and one supertype (e.g. a superclass). - -To represent multiple inheritance, multiple instances of FAMIXInheritance should be created. -FAMIXInheritance puts in relation two types, this way inheritance, for example, between classes and between interfaces can be modelled. -" -Class { - #name : #FAMIXInheritance, - #superclass : #FAMIXAssociation, - #instVars : [ - 'superclass', - 'subclass' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXInheritance class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXInheritance >> from [ - ^ self subclass -] - -{ #category : #accessing } -FAMIXInheritance >> from: aSubclass [ - self subclass: aSubclass -] - -{ #category : #accessing } -FAMIXInheritance >> subclass [ - - - - ^subclass -] - -{ #category : #accessing } -FAMIXInheritance >> subclass: aType [ - subclass := FMMultivalueLink on: self - update: #superInheritances - from: self subclass - to: aType -] - -{ #category : #accessing } -FAMIXInheritance >> superclass [ - - - - ^superclass -] - -{ #category : #accessing } -FAMIXInheritance >> superclass: aType [ - superclass := FMMultivalueLink on: self - update: #subInheritances - from: self superclass - to: aType -] - -{ #category : #accessing } -FAMIXInheritance >> to [ - ^ self superclass -] - -{ #category : #accessing } -FAMIXInheritance >> to: aSuperclass [ - self superclass: aSuperclass -] diff --git a/src-archive/Famix-Core/FAMIXInvocation.class.st b/src-archive/Famix-Core/FAMIXInvocation.class.st deleted file mode 100644 index c7db2eee3..000000000 --- a/src-archive/Famix-Core/FAMIXInvocation.class.st +++ /dev/null @@ -1,135 +0,0 @@ -" -FAMIXInvocation represents the invocation of a message (signature) on a receiver by a behavioural entity. -FAMIXInvocation has: - (i) sender: the behavioral entity that sends the message; - (ii) receiver: the structural entity (variable) that receives the message; - (iii) candidates: the list of potential behavioral entities that are actually being invoked. This is particularly useful for dynamic languages. - -In an invocation, From is the sender of the message and To is the list of candidates. For each invocation in the source code, there is one famix invocation created even if it is from the same behavioral entity towards the same variable and the same message. For example in smalltalk, the following code -anObject aSelector. -will produce one invocation association from current method to a variable anObject with candidate aSelector. The list of candidates will also contain all the methods defining a similar signature as aSelector. - -" -Class { - #name : #FAMIXInvocation, - #superclass : #FAMIXAssociation, - #instVars : [ - 'sender', - 'receiver', - 'signature', - 'candidates' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXInvocation class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXInvocation >> addCandidate: aBehaviouralEntity [ - candidates add: aBehaviouralEntity -] - -{ #category : #accessing } -FAMIXInvocation >> candidates [ - - - - - ^ candidates -] - -{ #category : #accessing } -FAMIXInvocation >> candidates: aCollection [ - candidates nocheckValue: aCollection -] - -{ #category : #accessing } -FAMIXInvocation >> from [ - ^ self sender -] - -{ #category : #accessing } -FAMIXInvocation >> from: aSender [ - self sender: aSender -] - -{ #category : #'initialize-release' } -FAMIXInvocation >> initialize [ - super initialize. - signature := 'nosignature'. - candidates := FMMultiMultivalueLink on: self opposite: #incomingInvocations -] - -{ #category : #accessing } -FAMIXInvocation >> receiver [ - - - - ^receiver -] - -{ #category : #accessing } -FAMIXInvocation >> receiver: aNamedEntity [ - receiver := FMMultivalueLink on: self - update: #receivingInvocations - from: self receiver - to: aNamedEntity -] - -{ #category : #accessing } -FAMIXInvocation >> receiverSourceCode [ - ^ self receiver sourceText -] - -{ #category : #accessing } -FAMIXInvocation >> receiverSourceCode: aString [ - "CyrilFerlicot: Deprecated the 19 sept 2017" - - self - deprecated: - 'The source code of the receiver should not be saved as a property. Instead access it via the receiver entity and it should be created as a sourceAnchor in the receiver.' -] - -{ #category : #accessing } -FAMIXInvocation >> sender [ - - - - ^sender -] - -{ #category : #accessing } -FAMIXInvocation >> sender: aBehaviouralEntity [ - sender := FMMultivalueLink on: self - update: #outgoingInvocations - from: self sender - to: aBehaviouralEntity -] - -{ #category : #accessing } -FAMIXInvocation >> signature [ - - - - ^signature -] - -{ #category : #accessing } -FAMIXInvocation >> signature: aString [ - - signature := aString -] - -{ #category : #accessing } -FAMIXInvocation >> to [ - ^ self candidates -] - -{ #category : #accessing } -FAMIXInvocation >> to: aCollCandidates [ - self candidates: aCollCandidates -] diff --git a/src-archive/Famix-Core/FAMIXLeafEntity.class.st b/src-archive/Famix-Core/FAMIXLeafEntity.class.st deleted file mode 100644 index 20b94e6b1..000000000 --- a/src-archive/Famix-Core/FAMIXLeafEntity.class.st +++ /dev/null @@ -1,16 +0,0 @@ -" -FAMIXLeafEntity is the abstract superclass for source code entities that do not have children in Abstract syntax tree. For example, it represents variables of programming languages. - - -" -Class { - #name : #FAMIXLeafEntity, - #superclass : #FAMIXNamedEntity, - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXLeafEntity class >> annotation [ - - -] diff --git a/src-archive/Famix-Core/FAMIXLocalVariable.class.st b/src-archive/Famix-Core/FAMIXLocalVariable.class.st deleted file mode 100644 index e569dd12e..000000000 --- a/src-archive/Famix-Core/FAMIXLocalVariable.class.st +++ /dev/null @@ -1,55 +0,0 @@ -" -FAMIXLocalVariable represents a local variable in the scope of a behavioural entity. -" -Class { - #name : #FAMIXLocalVariable, - #superclass : #FAMIXStructuralEntity, - #instVars : [ - 'parentBehaviouralEntity' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXLocalVariable class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXLocalVariable >> belongsTo [ - - ^ self parentBehaviouralEntity -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXLocalVariable >> namespaceScope [ - ^ self parentBehaviouralEntity namespaceScope -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXLocalVariable >> packageScope [ - ^ self parentBehaviouralEntity packageScope -] - -{ #category : #accessing } -FAMIXLocalVariable >> parentBehaviouralEntity [ - - - - ^parentBehaviouralEntity -] - -{ #category : #accessing } -FAMIXLocalVariable >> parentBehaviouralEntity: aBehaviouralEntity [ - parentBehaviouralEntity := FMMultivalueLink on: self - update: #localVariables - from: self parentBehaviouralEntity - to: aBehaviouralEntity. - self resetMooseName -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXLocalVariable >> typeScope [ - ^ self parentBehaviouralEntity typeScope -] diff --git a/src-archive/Famix-Core/FAMIXMethod.class.st b/src-archive/Famix-Core/FAMIXMethod.class.st deleted file mode 100644 index 871b27619..000000000 --- a/src-archive/Famix-Core/FAMIXMethod.class.st +++ /dev/null @@ -1,158 +0,0 @@ -" -FAMIXMethod represents a behaviour in an object-oriented language. - -A FAMIXMethod is always contained in a parentType. -" -Class { - #name : #FAMIXMethod, - #superclass : #FAMIXBehaviouralEntity, - #instVars : [ - 'kind', - 'parentType', - 'hasClassScope' - ], - #classVars : [ - 'ShouldSearchForSmalltalkCodeInImage' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXMethod class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXMethod class >> shouldSearchForSmalltalkCodeInImage [ - ^ ShouldSearchForSmalltalkCodeInImage ifNil: [ ShouldSearchForSmalltalkCodeInImage := true ] -] - -{ #category : #accessing } -FAMIXMethod class >> shouldSearchForSmalltalkCodeInImage: anObject [ - ShouldSearchForSmalltalkCodeInImage := anObject -] - -{ #category : #accessing } -FAMIXMethod >> allRecursiveTypes [ - "Retrieves all nested types recursively" - - | result | - result := Set new. - self allRecursiveTypesDo: [:each | result add: each ]. - ^ result -] - -{ #category : #accessing } -FAMIXMethod >> allRecursiveTypesDo: aBlock [ - "Traverses all nested types recursively" - - self types do: [ :each | - aBlock value: each. - each allRecursiveTypesDo: aBlock ] -] - -{ #category : #accessing } -FAMIXMethod >> belongsTo [ - ^ self parentType -] - -{ #category : #accessing } -FAMIXMethod >> belongsTo: aType [ - self parentType -] - -{ #category : #accessing } -FAMIXMethod >> hasClassScope [ - - - - ^ hasClassScope - - -] - -{ #category : #accessing } -FAMIXMethod >> hasClassScope: aBoolean [ - hasClassScope := aBoolean -] - -{ #category : #'initialize-release' } -FAMIXMethod >> initialize [ - super initialize. - hasClassScope := false -] - -{ #category : #accessing } -FAMIXMethod >> kind [ - - - - ^ kind -] - -{ #category : #accessing } -FAMIXMethod >> kind: aSymbol [ - "Set the kind of method, one of #getter #setter ot nil" - - | kindSymbol | - kindSymbol := aSymbol ifNotNil: [aSymbol asSymbol]. -" [#(nil #setter #getter #constant #constructor) - includes: kindSymbol] assert." - ^kind := kindSymbol -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXMethod >> methodScope [ -"This is a special case, only meaningful when using #withoutSelfLoops. Rejecting self loops with a method means rejecting recursive calls." - - ^ self -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXMethod >> namespaceScope [ - ^ self parentType namespaceScope -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXMethod >> packageScope [ - - ^ self parentPackage ifNil:[ - |cl| - cl := self parentType. - cl isNil - ifTrue:[nil] - ifFalse:[cl packageScope] - ] -] - -{ #category : #accessing } -FAMIXMethod >> parentType [ - - - - - ^ parentType -] - -{ #category : #accessing } -FAMIXMethod >> parentType: aType [ - parentType := FMMultivalueLink - on: self - update: #methods - from: self parentType - to: aType. - self resetMooseName -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXMethod >> typeScope [ - - ^ self parentType -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXMethod >> yourScope [ - - ^ #methodScope -] diff --git a/src-archive/Famix-Core/FAMIXNamedEntity.class.st b/src-archive/Famix-Core/FAMIXNamedEntity.class.st deleted file mode 100644 index c6eeca4c0..000000000 --- a/src-archive/Famix-Core/FAMIXNamedEntity.class.st +++ /dev/null @@ -1,299 +0,0 @@ -" -FAMIXNamedEntity is an abstract class, root of the hierarchy modeling source code entities. FAMIXNamedEntity has a name and it is physically present in source code. For example, methods, variables, types, namespaces. The name of the entity only contains the basic name and not the ""fully qualified name"". Apart from the name, it also has modifiers (e.g. public, protected, final, etc.) and it can be marked as a stub. A stub is a FAMIXNamedEntity that is used in the source code but its source is not available. - -When applicable, a FAMIXNamedEntity also points to its containing package accessible via parentPackage. - -Any of its subclasses must define the meaning of the belongsTo property, an abstract property that provides polymorphic traversal. For example, FAMIXClass defines belongsTo as being the container, while the FAMIXMethod defines belongsTo to point to the parentType. belongsTo can be used to calculate the ""full qualified name"" of a named entity. belongsTo is a derived property, which means that it is always computed from the information of other properties. - -It can also return the list of invocations performed on this entity (considered as the receiver) (receivingInvocations). -" -Class { - #name : #FAMIXNamedEntity, - #superclass : #FAMIXSourcedEntity, - #traits : 'TDependencyQueries + TEntityMetaLevelDependency', - #classTraits : 'TDependencyQueries classTrait + TEntityMetaLevelDependency classTrait', - #instVars : [ - 'name', - 'isStub', - 'receivingInvocations', - 'modifiers', - 'parentPackage', - 'annotationInstances' - ], - #classInstVars : [ - 'childrenSelectors', - 'allParentTypes', - 'allChildrenTypes', - 'parentSelectors', - 'outgoingMSEProperties', - 'incomingMSEProperties', - 'outgoingAssociationTypes', - 'incomingAssociationTypes', - 'allIncomingAssociationTypes', - 'allOutgoingAssociationTypes' - ], - #category : #'Famix-Core' -} - -{ #category : #accessing } -FAMIXNamedEntity class >> allIncomingAssociationTypes [ - "Here we add a cache because this is heavely used in MooseQuery for the navigations." - - ^ allIncomingAssociationTypes - ifNil: [ allIncomingAssociationTypes := self privateAllIncomingAssociationTypes ] -] - -{ #category : #accessing } -FAMIXNamedEntity class >> allOutgoingAssociationTypes [ - "Here we add a cache because this is heavely used in MooseQuery for the navigations." - - ^ allOutgoingAssociationTypes - ifNil: [ allOutgoingAssociationTypes := self privateAllOutgoingAssociationTypes ] -] - -{ #category : #meta } -FAMIXNamedEntity class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXNamedEntity class >> incomingAssociationTypes [ - "Here we add a cache because this is heavely used in MooseQuery for the navigations." - - ^ incomingAssociationTypes - ifNil: [ incomingAssociationTypes := self privateIncomingAssociationTypes ] -] - -{ #category : #accessing } -FAMIXNamedEntity class >> incomingMSEProperties [ - ^ incomingMSEProperties ifNil: [ incomingMSEProperties := self privateIncomingMSEProperties ] -] - -{ #category : #accessing } -FAMIXNamedEntity class >> incomingMSEPropertiesCache: aValue [ - incomingMSEProperties := aValue -] - -{ #category : #'instance creation' } -FAMIXNamedEntity class >> named: aString [ - ^ self new - name: aString; - yourself -] - -{ #category : #accessing } -FAMIXNamedEntity class >> outgoingAssociationTypes [ - "Here we add a cache because this is heavely used in MooseQuery for the navigations." - - ^ outgoingAssociationTypes - ifNil: [ outgoingAssociationTypes := self privateOutgoingAssociationTypes ] -] - -{ #category : #accessing } -FAMIXNamedEntity class >> outgoingMSEProperties [ - ^ outgoingMSEProperties ifNil: [ outgoingMSEProperties := self privateOutgoingMSEProperties ] -] - -{ #category : #accessing } -FAMIXNamedEntity class >> outgoingMSEPropertiesCache: aValue [ - outgoingMSEProperties := aValue. -] - -{ #category : #accessing } -FAMIXNamedEntity class >> parentMetaclass [ - ^((self class >> #annotation) pragmas select: [ :p | p keyword = 'parentMetaClass:' ]) collect: [:p | p arguments first ] -] - -{ #category : #accessing } -FAMIXNamedEntity >> annotationInstances [ - - - ^ annotationInstances -] - -{ #category : #accessing } -FAMIXNamedEntity >> annotationTypes [ - ^ self annotationInstances collectAsSet: [:each | each annotationType ] -] - -{ #category : #accessing } -FAMIXNamedEntity >> belongsTo [ - - ^self subclassResponsibility -] - -{ #category : #testing } -FAMIXNamedEntity >> hasUniqueMooseNameInModel [ - " all subclasses should call the method: 'resetMooseName' if a change causes the moosename to change " - ^true -] - -{ #category : #'moosequery-queries-incoming' } -FAMIXNamedEntity >> incomingTypeDeclarations [ - "Should return the incoming type declarations of the entity as MooseChefTypeDeclarationAssociation. - - typeDeclaration is a virtual association that relates a structural entity (i.e. a variable) to its type." - - "Most of the time it will return nothing. Overide me if it need to return something" - - ^ {} -] - -{ #category : #initialization } -FAMIXNamedEntity >> initialize [ - super initialize. - isStub := false. - receivingInvocations := FMNullMultivalueLink on: self opposite: #receiver: selector: #receivingInvocations. - modifiers := Set new. - annotationInstances := FMNullMultivalueLink on: self opposite: #annotatedEntity: selector: #annotationInstances -] - -{ #category : #accessing } -FAMIXNamedEntity >> isStub [ - "Flag true if the entity attributes are incomplete, either because the entity is missing or not imported." - - - - ^isStub -] - -{ #category : #accessing } -FAMIXNamedEntity >> isStub: aBoolean [ - isStub := aBoolean -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXNamedEntity >> methodScope [ - "Empty default scope" - ^ nil -] - -{ #category : #accessing } -FAMIXNamedEntity >> modifiers [ - - - - ^modifiers -] - -{ #category : #accessing } -FAMIXNamedEntity >> modifiers: aSet [ - modifiers := aSet -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXNamedEntity >> moosechefEqualsTo: anEntity moduloScope: aScope [ - "checks whether receiver is equal to anEntity at the given scope. - For example, a class could be equal to a method at the packageScope, i.e. they belong to the same package. - When changing scopes, we might get collections and then we check whether it includes the receiver" - - | entityRescoped myselfRescoped | - myselfRescoped := self atScope: aScope. - (myselfRescoped size = 1) ifTrue: [ myselfRescoped := myselfRescoped anyOne ]. - myselfRescoped isCollection - ifTrue: [ ^ myselfRescoped anySatisfy: [ :myElt | myElt moosechefEqualsTo: anEntity moduloScope: aScope ] ] - ifFalse: [ entityRescoped := anEntity atScope: aScope. - entityRescoped isCollection - ifTrue: [ ^ entityRescoped includes: myselfRescoped ] - ifFalse: [ ^ entityRescoped == myselfRescoped ] ] -] - -{ #category : #accessing } -FAMIXNamedEntity >> name [ - - - - ^name -] - -{ #category : #accessing } -FAMIXNamedEntity >> name: aString [ - name := aString. - self resetMooseName -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXNamedEntity >> namespaceScope [ - "Empty default scope" - ^ nil -] - -{ #category : #'moosequery-queries-outgoing' } -FAMIXNamedEntity >> outgoingTypeDeclarations [ - "Should return the incoming type declarations of the entity as MooseChefTypeDeclarationAssociation. - - typeDeclaration is a virtual association that relates a structural entity (i.e. a variable) to its type." - - "Most of the time it will return nothing. Overide me if it need to return something" - - ^ {} -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXNamedEntity >> packageScope [ - "Empty default scope" - ^ nil -] - -{ #category : #accessing } -FAMIXNamedEntity >> parentPackage [ - "Package containing the entity in the code structure (if applicable)" - - - - - - ^ parentPackage -] - -{ #category : #accessing } -FAMIXNamedEntity >> parentPackage: aPackage [ - parentPackage := FMMultivalueLink on: self - update: #childNamedEntities - from: self parentPackage - to: aPackage -] - -{ #category : #accessing } -FAMIXNamedEntity >> receivingInvocations [ - "Returns the list of invocations performed on this entity (considered as the receiver)" - - - - ^receivingInvocations -] - -{ #category : #accessing } -FAMIXNamedEntity >> receivingInvocations: anInvocation [ - receivingInvocations value: anInvocation -] - -{ #category : #'meta information' } -FAMIXNamedEntity >> resetMooseName [ - super resetMooseName. - self children do: [ :entity | entity resetMooseName ] -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXNamedEntity >> selectWithinYourScope: aMooseQueryResult [ - self subclassResponsibility -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXNamedEntity >> typeScope [ - "Empty default scope" - ^ nil -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXNamedEntity >> yourScope [ - "Empty default scope" - - self - deprecated: - '#yourScope was used by MooseChef for queries. Now, MooseQuery does not need it anymore. Example of code update: "myEntity queryAllIncoming perform: mySecondEntity yourScope" => "myEntity queryAllIncoming withScope: mySecondEntity class"' - on: '12 january 2018' - in: 'Moose6.1'. - ^ nil -] diff --git a/src-archive/Famix-Core/FAMIXNamespace.class.st b/src-archive/Famix-Core/FAMIXNamespace.class.st deleted file mode 100644 index 51d03d703..000000000 --- a/src-archive/Famix-Core/FAMIXNamespace.class.st +++ /dev/null @@ -1,42 +0,0 @@ -" -FAMIXNamespace represents a namespace from the source language. Namespaces have semantic meaning in the language so they influence the unique name of the entity. - -A namespace denotes an entity that has meaning from a language point of view. For example, in C++, there exist a concept with the same name that has no other responsibility beside providing a lexical scope for the contained classes and funcions. - -When an entity is placed inside a namespace, the fully qualified name (mooseName) is affected. -" -Class { - #name : #FAMIXNamespace, - #superclass : #FAMIXScopingEntity, - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXNamespace class >> annotation [ - - -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXNamespace >> namespaceScope [ - - ^ self -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXNamespace >> packageScope [ - - self shouldNotImplement -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXNamespace >> selectWithinYourScope: aMooseQueryResult [ - ^ aMooseQueryResult withinNamespace: self -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXNamespace >> yourScope [ - - ^ #namespaceScope - -] diff --git a/src-archive/Famix-Core/FAMIXPackage.class.st b/src-archive/Famix-Core/FAMIXPackage.class.st deleted file mode 100644 index f1d17c5b5..000000000 --- a/src-archive/Famix-Core/FAMIXPackage.class.st +++ /dev/null @@ -1,67 +0,0 @@ -" -FAMIXPackage represents a package in the source language, meaning that it provides a means to group entities without any baring on lexical scoping. - -Java extractors map Java packages to FAMIXNamespaces. They can also mirror the same information in terms of FAMIXPackage instances. -" -Class { - #name : #FAMIXPackage, - #superclass : #FAMIXScopingEntity, - #instVars : [ - 'childNamedEntities' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXPackage class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXPackage >> addChildNamedEntity: aNamedEntity [ - childNamedEntities add: aNamedEntity -] - -{ #category : #accessing } -FAMIXPackage >> childNamedEntities [ - - - - ^childNamedEntities -] - -{ #category : #accessing } -FAMIXPackage >> childNamedEntities: aNamedEntity [ - childNamedEntities value: aNamedEntity -] - -{ #category : #'initialize-release' } -FAMIXPackage >> initialize [ - super initialize. - self isPackage: true. - childNamedEntities := FMNullMultivalueLink on: self opposite: #parentPackage: selector: #childNamedEntities. -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXPackage >> namespaceScope [ - - self shouldNotImplement -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXPackage >> packageScope [ - - ^ self -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXPackage >> selectWithinYourScope: aMooseQueryResult [ - ^ aMooseQueryResult withinPackage: self -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXPackage >> yourScope [ - - ^ #packageScope -] diff --git a/src-archive/Famix-Core/FAMIXParameter.class.st b/src-archive/Famix-Core/FAMIXParameter.class.st deleted file mode 100644 index 1e29f096c..000000000 --- a/src-archive/Famix-Core/FAMIXParameter.class.st +++ /dev/null @@ -1,61 +0,0 @@ -" -FAMIXParameter represents one parameter in a method declaration. -" -Class { - #name : #FAMIXParameter, - #superclass : #FAMIXStructuralEntity, - #instVars : [ - 'parentBehaviouralEntity' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXParameter class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXParameter >> belongsTo [ - - ^ self parentBehaviouralEntity -] - -{ #category : #accessing } -FAMIXParameter >> belongsTo: aBehaviouralEntity [ - self parentBehaviouralEntity: aBehaviouralEntity -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXParameter >> namespaceScope [ - ^ self parentBehaviouralEntity namespaceScope -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXParameter >> packageScope [ - ^ self parentBehaviouralEntity packageScope -] - -{ #category : #accessing } -FAMIXParameter >> parentBehaviouralEntity [ - - - - - ^parentBehaviouralEntity -] - -{ #category : #accessing } -FAMIXParameter >> parentBehaviouralEntity: aBehaviouralEntity [ - parentBehaviouralEntity := FMMultivalueLink on: self - update: #parameters - from: self parentBehaviouralEntity - to: aBehaviouralEntity. - self resetMooseName -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXParameter >> typeScope [ - ^ self parentBehaviouralEntity typeScope -] diff --git a/src-archive/Famix-Core/FAMIXPrimitiveType.class.st b/src-archive/Famix-Core/FAMIXPrimitiveType.class.st deleted file mode 100644 index 244be1945..000000000 --- a/src-archive/Famix-Core/FAMIXPrimitiveType.class.st +++ /dev/null @@ -1,14 +0,0 @@ -" -It represents a primitive type. For example, int or char are modeled using PrimitiveType entities. Void is also considered a primitive type. -" -Class { - #name : #FAMIXPrimitiveType, - #superclass : #FAMIXType, - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXPrimitiveType class >> annotation [ - - -] diff --git a/src-archive/Famix-Core/FAMIXReference.class.st b/src-archive/Famix-Core/FAMIXReference.class.st deleted file mode 100644 index d7f8b4b7a..000000000 --- a/src-archive/Famix-Core/FAMIXReference.class.st +++ /dev/null @@ -1,85 +0,0 @@ -" -A FAMIXReference entity is created whenever one manipulates a class name as a variable. For example: -(i) if the class is passed as a parameter to a method, or -(ii) if a static method is invoked on a class. - -For example, in the following Java code -method a() -{B bObject = new B(); B.aStaticMethod(); } -There is only one reference which is created when the static method aStaticMethod is invoked on class variable B. In the declaration of B objects, the class B is the type of variable b but not a FAMIXReference. And instantiation new B() is an invocation of the default constructor, and not a FAMIXReference. - - -Note that FAMIXReference was defined between two FAMIXContainerEntity entities. So, it used to represent dependencies between container entities that are computed from the dependencies of contained entities. For example, references between two packages can be computed from dependencies between classes of the packages. -" -Class { - #name : #FAMIXReference, - #superclass : #FAMIXAssociation, - #instVars : [ - 'source', - 'target' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXReference class >> annotation [ - - -] - -{ #category : #'initialize-release' } -FAMIXReference class >> source: source target: target [ - ^ self new source: source; target: target -] - -{ #category : #accessing } -FAMIXReference >> from [ - ^ self source. -] - -{ #category : #accessing } -FAMIXReference >> from: aSource [ - self source: aSource . -] - -{ #category : #accessing } -FAMIXReference >> source [ - - - - ^source -] - -{ #category : #accessing } -FAMIXReference >> source: aContainerEntity [ - source := FMMultivalueLink on: self - update: #outgoingReferences - from: self source - to: aContainerEntity -] - -{ #category : #accessing } -FAMIXReference >> target [ - - - - ^target -] - -{ #category : #accessing } -FAMIXReference >> target: aContainerEntity [ - target := FMMultivalueLink on: self - update: #incomingReferences - from: self target - to: aContainerEntity -] - -{ #category : #accessing } -FAMIXReference >> to [ - ^ self target -] - -{ #category : #accessing } -FAMIXReference >> to: aTarget [ - self target: aTarget -] diff --git a/src-archive/Famix-Core/FAMIXScopingEntity.class.st b/src-archive/Famix-Core/FAMIXScopingEntity.class.st deleted file mode 100644 index f5df50e84..000000000 --- a/src-archive/Famix-Core/FAMIXScopingEntity.class.st +++ /dev/null @@ -1,100 +0,0 @@ -" -FAMIXScopingEntity represents an entity defining a scope at a global level. - -Packages and Namespaces are two different concept in terms of scoping entity. Namespaces have semantic meaning in the language so they influence the unique name of the entity, while Packages are physical entities for packaging. In Smalltalk the two are explicitly different. In C++ we have explicit Namespaces, but not so explicit Packages. In Java, we have both Namespace (what you define in your Java source), and Package (the folder structure), but they happen to overlap in naming (although one is with . and the other one is with /) so people tend to see them as packages only. -" -Class { - #name : #FAMIXScopingEntity, - #superclass : #FAMIXContainerEntity, - #instVars : [ - 'globalVariables', - 'parentScope', - 'childScopes' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXScopingEntity class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXScopingEntity >> addChildScope: aScopingEntity [ - childScopes add: aScopingEntity -] - -{ #category : #accessing } -FAMIXScopingEntity >> addGlobalVariable: aGlobalVariable [ - globalVariables add: aGlobalVariable -] - -{ #category : #accessing } -FAMIXScopingEntity >> belongsTo [ - ^ self parentScope ifNil: [ self parentPackage ] -] - -{ #category : #accessing } -FAMIXScopingEntity >> childScopes [ - - - - ^ childScopes -] - -{ #category : #accessing } -FAMIXScopingEntity >> childScopes: aCollectionOfScopingEntity [ - childScopes value: aCollectionOfScopingEntity -] - -{ #category : #accessing } -FAMIXScopingEntity >> globalVariables [ - - - - ^globalVariables -] - -{ #category : #accessing } -FAMIXScopingEntity >> globalVariables: aGlobalVariable [ - globalVariables value: aGlobalVariable -] - -{ #category : #'initialize-release' } -FAMIXScopingEntity >> initialize [ - super initialize. - childScopes := FMNullMultivalueLink on: self opposite: #parentScope: selector: #childScopes. - globalVariables := FMNullMultivalueLink on: self opposite: #parentScope: selector: #globalVariables. -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXScopingEntity >> methodScope [ - "This only makes sense to reject self loops in #collectAtScope:" - - ^ self classes collectAsSet: [:c | c methods] -] - -{ #category : #accessing } -FAMIXScopingEntity >> parentScope [ - - - - ^ parentScope -] - -{ #category : #accessing } -FAMIXScopingEntity >> parentScope: aScopingEntity [ - parentScope := FMMultivalueLink - on: self - update: #childScopes - from: self parentScope - to: aScopingEntity. - self resetMooseName -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXScopingEntity >> typeScope [ - "This only makes sense to reject self loops in #collectAtScope:" - ^ self classes -] diff --git a/src-archive/Famix-Core/FAMIXSourceAnchor.class.st b/src-archive/Famix-Core/FAMIXSourceAnchor.class.st deleted file mode 100644 index 46c4b486c..000000000 --- a/src-archive/Famix-Core/FAMIXSourceAnchor.class.st +++ /dev/null @@ -1,155 +0,0 @@ -" -FAMIXSourceAnchor is an abstract class representing a pointer to a source. The source can be identified in multiple ways as specified by the subclasses. The famix entity that this class is a source pointer for, is accessible via element property. -" -Class { - #name : #FAMIXSourceAnchor, - #superclass : #FAMIXEntity, - #traits : 'TEntityMetaLevelDependency + TDependencyQueries', - #classTraits : 'TDependencyQueries classTrait + TEntityMetaLevelDependency classTrait', - #instVars : [ - 'element' - ], - #category : #'Famix-Core' -} - -{ #category : #accessing } -FAMIXSourceAnchor class >> allIncomingAssociationTypes [ - ^ Set new -] - -{ #category : #accessing } -FAMIXSourceAnchor class >> allOutgoingAssociationTypes [ - ^ Set new -] - -{ #category : #meta } -FAMIXSourceAnchor class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXSourceAnchor class >> incomingMSEProperties [ - ^ #() -] - -{ #category : #accessing } -FAMIXSourceAnchor class >> outgoingMSEProperties [ - ^ #() -] - -{ #category : #accessing } -FAMIXSourceAnchor >> completeText [ - "The complete text of a FileAnchor contains all the code of the file pointed by the source anchor. On the contrary the #sourceText return only the pant of the file concerned by the entity. For example a FAMIXFileAnchon knows the start line and end line of the source anchor into the file." - - "By default I return the sourceText because most of my subclasses will only do that." - - ^ self sourceText -] - -{ #category : #accessing } -FAMIXSourceAnchor >> element [ - - - - ^ element -] - -{ #category : #accessing } -FAMIXSourceAnchor >> element: anElement [ - element := anElement . - element sourceAnchor = self ifFalse: [ element sourceAnchor: self ] -] - -{ #category : #'moosequery-queries-incoming' } -FAMIXSourceAnchor >> incomingTypeDeclarations [ - "Should return the incoming type declarations of the entity as MooseChefTypeDeclarationAssociation. - - typeDeclaration is a virtual association that relates a structural entity (i.e. a variable) to its type." - - ^ {} -] - -{ #category : #testing } -FAMIXSourceAnchor >> isFile [ - ^ false -] - -{ #category : #testing } -FAMIXSourceAnchor >> isMultiple [ - ^ false -] - -{ #category : #accessing } -FAMIXSourceAnchor >> lineCount [ - "I should return the number of line in the source text of the entity." - - - - - ^ self subclassResponsibility -] - -{ #category : #'moosequery-queries-outgoing' } -FAMIXSourceAnchor >> outgoingTypeDeclarations [ - "Should return the outgoing type declarations of the entity as MooseChefTypeDeclarationAssociation. - - typeDeclaration is a virtual association that relates a structural entity (i.e. a variable) to its type." - - ^ {} -] - -{ #category : #'moosequery-queries-incoming' } -FAMIXSourceAnchor >> queryAllIncomingInvocations [ - ^ MooseQueryResult new -] - -{ #category : #'moosequery-queries-outgoing' } -FAMIXSourceAnchor >> queryAllOutgoingInvocations [ - ^ MooseQueryResult new -] - -{ #category : #'moosequery-queries-incoming' } -FAMIXSourceAnchor >> queryIncomingAccesses [ - ^ MooseQueryResult new -] - -{ #category : #'moosequery-queries-incoming' } -FAMIXSourceAnchor >> queryIncomingReferences [ - ^ MooseQueryResult new -] - -{ #category : #'moosequery-queries-incoming' } -FAMIXSourceAnchor >> queryIncomingTypeDeclarations [ - ^ MooseQueryResult new -] - -{ #category : #'moosequery-queries-outgoing' } -FAMIXSourceAnchor >> queryOutgoingAccesses [ - ^ MooseQueryResult new -] - -{ #category : #'moosequery-queries-outgoing' } -FAMIXSourceAnchor >> queryOutgoingReferences [ - ^ MooseQueryResult new -] - -{ #category : #'moosequery-queries-outgoing' } -FAMIXSourceAnchor >> queryOutgoingTypeDeclarations [ - ^ MooseQueryResult new -] - -{ #category : #'moosequery-queries-incoming' } -FAMIXSourceAnchor >> querySureIncomingInvocations [ - ^ MooseQueryResult new -] - -{ #category : #'moosequery-queries-outgoing' } -FAMIXSourceAnchor >> querySureOutgoingInvocations [ - ^ MooseQueryResult new -] - -{ #category : #accessing } -FAMIXSourceAnchor >> sourceText [ - ^ self subclassResponsibility -] diff --git a/src-archive/Famix-Core/FAMIXSourceLanguage.class.st b/src-archive/Famix-Core/FAMIXSourceLanguage.class.st deleted file mode 100644 index cc5da13ef..000000000 --- a/src-archive/Famix-Core/FAMIXSourceLanguage.class.st +++ /dev/null @@ -1,75 +0,0 @@ -" -FAMIXSourceLanguage represents the programming language in which an entity is written. It is used for dispatching entity actions for specific languages. For example, formatting a source text will be performed according to the language. A project may have multiple languages. - -A source language has a name and entities that are written in this language. -One can create a default source language for a project by not associating any entities to it. In this case, all entities that do not have specific source langauge, belong to the default source language. One can attach entities to a sourceLanguage using addSourceEntity:. -" -Class { - #name : #FAMIXSourceLanguage, - #superclass : #FAMIXEntity, - #instVars : [ - 'sourcedEntities' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXSourceLanguage class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXSourceLanguage >> addSourcedEntity: aSourcedEntity [ - ^ sourcedEntities add: aSourcedEntity -] - -{ #category : #utility } -FAMIXSourceLanguage >> format: aSourceString from: anEntity [ - ^ aSourceString - - -] - -{ #category : #'initialize-release' } -FAMIXSourceLanguage >> initialize [ - super initialize. - sourcedEntities := FMNullMultivalueLink on: self opposite: #declaredSourceLanguage: selector: #sourcedEntities -] - -{ #category : #testing } -FAMIXSourceLanguage >> isAttached [ - "Returns whether the receiver (a language) has some entities associated with it. By default, if there are no entities attached, it means that all of them are of this language." - - ^ self sourcedEntities notEmpty -] - -{ #category : #testing } -FAMIXSourceLanguage >> isUnknown [ - ^ false -] - -{ #category : #accessing } -FAMIXSourceLanguage >> name [ - "The name of the language that is not modeled explicitly" - - - - - ^ (self class name removePrefix: 'FAMIX') removeSuffix: 'SourceLanguage' -] - -{ #category : #accessing } -FAMIXSourceLanguage >> sourcedEntities [ - "Returns the list of entities associated to the source language. Useful when you have multiple languages projects and need to query them." - - - - - ^ sourcedEntities -] - -{ #category : #accessing } -FAMIXSourceLanguage >> sourcedEntities: aCollection [ - sourcedEntities := aCollection -] diff --git a/src-archive/Famix-Core/FAMIXSourcedEntity.class.st b/src-archive/Famix-Core/FAMIXSourcedEntity.class.st deleted file mode 100644 index ca6304f25..000000000 --- a/src-archive/Famix-Core/FAMIXSourcedEntity.class.st +++ /dev/null @@ -1,90 +0,0 @@ -" -FAMIXSourcedEntity models any fact in a program source and it is the superclass (root class) of all source code entities and their relationships. It is a FAMIXEntity and it can hold comments, a source anchor and a source language. -" -Class { - #name : #FAMIXSourcedEntity, - #superclass : #FAMIXEntity, - #instVars : [ - 'sourceAnchor' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXSourcedEntity class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXSourcedEntity >> addComment: aComment [ - self comments add: aComment asFAMIXComment -] - -{ #category : #accessing } -FAMIXSourcedEntity >> comments [ - "VBU - Put in private state because it is not used and so take place in the memory" - - - - - - ^ self privateState - attributeAt: #comments - ifAbsentPut: [ FMMultivalueLink on: self opposite: #container: ] -] - -{ #category : #accessing } -FAMIXSourcedEntity >> comments: aCollection [ - self comments value: aCollection -] - -{ #category : #accessing } -FAMIXSourcedEntity >> declaredSourceLanguage [ - "VBU - Put in private state because it is not used and so take place in the memory" - - - - ^ self privateState attributeAt: #declaredSourceLanguage ifAbsent: [ ] -] - -{ #category : #accessing } -FAMIXSourcedEntity >> declaredSourceLanguage: aSourceLanguage [ - self privateState - attributeAt: #declaredSourceLanguage - put: - (FMMultivalueLink - on: self - update: #sourcedEntities - from: self declaredSourceLanguage - to: aSourceLanguage) -] - -{ #category : #accessing } -FAMIXSourcedEntity >> removeComment: aComment [ - self comments remove: aComment -] - -{ #category : #accessing } -FAMIXSourcedEntity >> sourceAnchor [ - - - - ^sourceAnchor -] - -{ #category : #accessing } -FAMIXSourcedEntity >> sourceAnchor: aSourceAnchor [ - sourceAnchor := aSourceAnchor. - - sourceAnchor ifNil: [ ^ self ]. - aSourceAnchor element = self ifFalse: [ aSourceAnchor element: self ] -] - -{ #category : #accessing } -FAMIXSourcedEntity >> sourceLanguage [ - ^ self declaredSourceLanguage ifNil: [ - self mooseModel - ifNil: [ FamixUNKNOWNSourceLanguage new ] - ifNotNil: [ self mooseModel sourceLanguage ] ] -] diff --git a/src-archive/Famix-Core/FAMIXStructuralEntity.class.st b/src-archive/Famix-Core/FAMIXStructuralEntity.class.st deleted file mode 100644 index ed08fae1b..000000000 --- a/src-archive/Famix-Core/FAMIXStructuralEntity.class.st +++ /dev/null @@ -1,89 +0,0 @@ -" -FAMIXStructuralEntity is the abstract superclass for basic data structure in the source code. A structural entity has a declaredType that points to the type of the variable. -" -Class { - #name : #FAMIXStructuralEntity, - #superclass : #FAMIXLeafEntity, - #instVars : [ - 'declaredType', - 'incomingAccesses' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXStructuralEntity class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXStructuralEntity >> accessors [ - - ^ (self incomingAccesses collectAsSet: [ :each | each accessor ]) asMooseGroup -] - -{ #category : #accessing } -FAMIXStructuralEntity >> addIncomingAccess: anAccess [ - incomingAccesses add: anAccess -] - -{ #category : #accessing } -FAMIXStructuralEntity >> declaredType [ - - - - ^declaredType -] - -{ #category : #accessing } -FAMIXStructuralEntity >> declaredType: aType [ - declaredType := FMMultivalueLink on: self - update: #structuresWithDeclaredType - from: self declaredType - to: aType -] - -{ #category : #accessing } -FAMIXStructuralEntity >> incomingAccesses [ - - - - ^incomingAccesses -] - -{ #category : #accessing } -FAMIXStructuralEntity >> incomingAccesses: anAccess [ - incomingAccesses value: anAccess -] - -{ #category : #'initialize-release' } -FAMIXStructuralEntity >> initialize [ - super initialize. - incomingAccesses := FMNullMultivalueLink on: self opposite: #variable: selector: #incomingAccesses. -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXStructuralEntity >> namespaceScope [ - ^ self parentType namespaceScope -] - -{ #category : #'moosequery-queries-outgoing' } -FAMIXStructuralEntity >> outgoingTypeDeclarations [ - ^ self declaredType ifNil: [ {} ] ifNotNil: [ :dt | {(MooseChefTypeDeclarationAssociation newFrom: self to: dt)} ] -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXStructuralEntity >> packageScope [ - - | cs | - cs := self typeScope. - - ^ (cs isNil) ifTrue: [nil] ifFalse: [cs packageScope] -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXStructuralEntity >> typeScope [ - - ^ self belongsTo typeScope -] diff --git a/src-archive/Famix-Core/FAMIXTrait.class.st b/src-archive/Famix-Core/FAMIXTrait.class.st deleted file mode 100644 index 9369e8bfc..000000000 --- a/src-archive/Famix-Core/FAMIXTrait.class.st +++ /dev/null @@ -1,34 +0,0 @@ -" -FAMIXTrait models a trait as it can be found in Pharo or PHP. -" -Class { - #name : #FAMIXTrait, - #superclass : #FAMIXType, - #instVars : [ - 'incomingTraitUsages' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXTrait class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXTrait >> incomingTraitUsages [ - - ^ incomingTraitUsages -] - -{ #category : #accessing } -FAMIXTrait >> incomingTraitUsages: aCollection [ - incomingTraitUsages value: aCollection -] - -{ #category : #initialize } -FAMIXTrait >> initialize [ - super initialize. - incomingTraitUsages := FMNullMultivalueLink on: self opposite: #trait: selector: #incomingTraitUsages -] diff --git a/src-archive/Famix-Core/FAMIXTraitUsage.class.st b/src-archive/Famix-Core/FAMIXTraitUsage.class.st deleted file mode 100644 index 35f97cab4..000000000 --- a/src-archive/Famix-Core/FAMIXTraitUsage.class.st +++ /dev/null @@ -1,65 +0,0 @@ -Class { - #name : #FAMIXTraitUsage, - #superclass : #FAMIXAssociation, - #instVars : [ - 'user', - 'trait' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXTraitUsage class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXTraitUsage >> from [ - ^ self user -] - -{ #category : #accessing } -FAMIXTraitUsage >> from: anObject [ - self user: anObject -] - -{ #category : #accessing } -FAMIXTraitUsage >> to [ - ^ self trait -] - -{ #category : #accessing } -FAMIXTraitUsage >> to: anObject [ - self trait: anObject -] - -{ #category : #accessing } -FAMIXTraitUsage >> trait [ - - - ^ trait -] - -{ #category : #accessing } -FAMIXTraitUsage >> trait: aTrait [ - trait := FMMultivalueLink on: self - update: #incomingTraitUsages - from: self trait - to: aTrait -] - -{ #category : #accessing } -FAMIXTraitUsage >> user [ - - - ^ user -] - -{ #category : #accessing } -FAMIXTraitUsage >> user: aType [ - user := FMMultivalueLink on: self - update: #outgoingTraitUsages - from: self user - to: aType -] diff --git a/src-archive/Famix-Core/FAMIXType.class.st b/src-archive/Famix-Core/FAMIXType.class.st deleted file mode 100644 index d06d3428f..000000000 --- a/src-archive/Famix-Core/FAMIXType.class.st +++ /dev/null @@ -1,272 +0,0 @@ -" -FAMIXType is a generic class representing a type. It has several specializations for specific kinds of types, the typical one being FAMIXClass. -A type is defined in a container (instance of FAMIXContainer). -The container is typically a namespace (instance of FAMIXNamespace), but may also be a class (in the case of nested classes), or a method (in the case of anonymous classes). - -A type can have multiple subtypes or supertypes. These are modelled by means of FAMIXInheritance instances. -" -Class { - #name : #FAMIXType, - #superclass : #FAMIXContainerEntity, - #instVars : [ - 'incomingReferences', - 'subInheritances', - 'methods', - 'container', - 'superInheritances', - 'attributes', - 'behavioursWithDeclaredType', - 'structuresWithDeclaredType', - 'outgoingTraitUsages' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXType class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXType >> addAttribute: anAttribute [ - attributes add: anAttribute -] - -{ #category : #accessing } -FAMIXType >> addBehaviourWithDeclaredType: aBehaviour [ - behavioursWithDeclaredType add: aBehaviour -] - -{ #category : #accessing } -FAMIXType >> addIncomingReference: aReference [ - incomingReferences add: aReference -] - -{ #category : #accessing } -FAMIXType >> addMethod: aMethod [ - methods add: aMethod -] - -{ #category : #accessing } -FAMIXType >> addOutgoingTraitUsage: aTraitUsage [ - self outgoingTraitUsages add: aTraitUsage -] - -{ #category : #accessing } -FAMIXType >> addStructureWithDeclaredType: aStructuralEntity [ - structuresWithDeclaredType add: aStructuralEntity -] - -{ #category : #accessing } -FAMIXType >> addSubInheritance: anInheritance [ - subInheritances add: anInheritance -] - -{ #category : #accessing } -FAMIXType >> addSuperInheritance: anInheritance [ - superInheritances add: anInheritance -] - -{ #category : #accessing } -FAMIXType >> addTraitUsage: aTraitUsage [ - -] - -{ #category : #accessing } -FAMIXType >> allRecursiveTypes [ - "Retrieves all nested types recursively (including directly nested types and those nested in methods)" - - | result | - result := Set new. - self allRecursiveTypesDo: [:each | result add: each ]. - ^ result -] - -{ #category : #accessing } -FAMIXType >> allRecursiveTypesDo: aBlock [ - "Traverses all nested types recursively (including directly nested types and those nested in methods)" - - self types do: [ :each | - aBlock value: each. - each allRecursiveTypesDo: aBlock ]. - self methods do: [ :each | each allRecursiveTypesDo: aBlock ] -] - -{ #category : #accessing } -FAMIXType >> attributes [ - - - - ^attributes -] - -{ #category : #accessing } -FAMIXType >> attributes: anAttribute [ - attributes value: anAttribute -] - -{ #category : #accessing } -FAMIXType >> behavioursWithDeclaredType [ - - - - ^ behavioursWithDeclaredType -] - -{ #category : #accessing } -FAMIXType >> behavioursWithDeclaredType: aCollectionOfBehaviours [ - behavioursWithDeclaredType value: aCollectionOfBehaviours -] - -{ #category : #accessing } -FAMIXType >> belongsTo [ - ^ self container ifNil: [ self parentPackage ] -] - -{ #category : #accessing } -FAMIXType >> belongsTo: aContainer [ - self container: aContainer -] - -{ #category : #accessing } -FAMIXType >> container [ - - - - - ^container -] - -{ #category : #accessing } -FAMIXType >> container: aContainerEntity [ - container := FMMultivalueLink on: self - update: #types - from: self container - to: aContainerEntity. - self resetMooseName -] - -{ #category : #accessing } -FAMIXType >> incomingReferences [ - - - - ^incomingReferences -] - -{ #category : #accessing } -FAMIXType >> incomingReferences: aReference [ - incomingReferences value: aReference -] - -{ #category : #'moosequery-queries-incoming' } -FAMIXType >> incomingTypeDeclarations [ - ^ self structuresWithDeclaredType , self behavioursWithDeclaredType collect: [ :var | MooseChefTypeDeclarationAssociation newFrom: var to: self ] -] - -{ #category : #'initialize-release' } -FAMIXType >> initialize [ - super initialize. - subInheritances := FMNullMultivalueLink on: self opposite: #superclass: selector: #subInheritances. - methods := FMNullMultivalueLink on: self opposite: #parentType: selector: #methods. - superInheritances := FMNullMultivalueLink on: self opposite: #subclass: selector: #superInheritances. - attributes := FMNullMultivalueLink on: self opposite: #parentType: selector: #attributes. - behavioursWithDeclaredType := FMNullMultivalueLink on: self opposite: #declaredType: selector: #behavioursWithDeclaredType. - structuresWithDeclaredType := FMNullMultivalueLink on: self opposite: #declaredType: selector: #structuresWithDeclaredType. - incomingReferences := FMNullMultivalueLink on: self opposite: #target: selector: #incomingReferences. - outgoingTraitUsages := FMNullMultivalueLink on: self opposite: #user: selector: #outgoingTraitUsages -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXType >> methodScope [ - "This only makes sense to reject self loops in #collectAtScope:" - - ^ self methods -] - -{ #category : #accessing } -FAMIXType >> methods [ - - - - ^methods -] - -{ #category : #accessing } -FAMIXType >> methods: aMethod [ - methods value: aMethod -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXType >> namespaceScope [ - "we ask the container for the namespaceScope - because we can have classes in methods or in other classes. - Thus, we need to traverse recursively until we reach a namespace" - - ^ self container - ifNotNil: [ self container namespaceScope ] -] - -{ #category : #accessing } -FAMIXType >> outgoingTraitUsages [ - - ^ outgoingTraitUsages -] - -{ #category : #accessing } -FAMIXType >> outgoingTraitUsages: aCollectionOfTraitUsages [ - outgoingTraitUsages value: aCollectionOfTraitUsages -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXType >> packageScope [ - - ^ self parentPackage -] - -{ #category : #accessing } -FAMIXType >> structuresWithDeclaredType [ - - - - ^ structuresWithDeclaredType -] - -{ #category : #accessing } -FAMIXType >> structuresWithDeclaredType: aCollectionOfStructuralEntities [ - structuresWithDeclaredType value: aCollectionOfStructuralEntities -] - -{ #category : #accessing } -FAMIXType >> subInheritances [ - - - - ^subInheritances -] - -{ #category : #accessing } -FAMIXType >> subInheritances: anInheritance [ - subInheritances value: anInheritance -] - -{ #category : #accessing } -FAMIXType >> superInheritances [ - - - - ^superInheritances -] - -{ #category : #accessing } -FAMIXType >> superInheritances: anInheritance [ - superInheritances value: anInheritance -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXType >> typeScope [ - "all types are not classes. Redefined in FamixClass" - - ^ self -] diff --git a/src-archive/Famix-Core/FAMIXTypeAlias.class.st b/src-archive/Famix-Core/FAMIXTypeAlias.class.st deleted file mode 100644 index 0476366b1..000000000 --- a/src-archive/Famix-Core/FAMIXTypeAlias.class.st +++ /dev/null @@ -1,35 +0,0 @@ -" -This entity models a typedef in C. - -Instance Variables: - aliasedType -" -Class { - #name : #FAMIXTypeAlias, - #superclass : #FAMIXType, - #instVars : [ - 'aliasedType' - ], - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXTypeAlias class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXTypeAlias >> aliasedType [ - - - ^ aliasedType -] - -{ #category : #accessing } -FAMIXTypeAlias >> aliasedType: aType [ - aliasedType := FMMultivalueLink on: self - update: #typeAliases - from: self aliasedType - to: aType -] diff --git a/src-archive/Famix-Core/FAMIXUnknownSourceLanguage.class.st b/src-archive/Famix-Core/FAMIXUnknownSourceLanguage.class.st deleted file mode 100644 index 95d4078a8..000000000 --- a/src-archive/Famix-Core/FAMIXUnknownSourceLanguage.class.st +++ /dev/null @@ -1,24 +0,0 @@ -" -FAMIXUnknownSourceLanguage represents source language that has not been specified by the user. - -The difference with CustomSourceLanguage is that people can export from outside a CustomSourceLanguage with a string representing the language, while the UnknownSourceLanguage is provided by default (null object pattern). - - - -" -Class { - #name : #FAMIXUnknownSourceLanguage, - #superclass : #FAMIXSourceLanguage, - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXUnknownSourceLanguage class >> annotation [ - - -] - -{ #category : #testing } -FAMIXUnknownSourceLanguage >> isUnknown [ - ^ true -] diff --git a/src-archive/Famix-Core/FAMIXUnknownVariable.class.st b/src-archive/Famix-Core/FAMIXUnknownVariable.class.st deleted file mode 100644 index b56da0a7a..000000000 --- a/src-archive/Famix-Core/FAMIXUnknownVariable.class.st +++ /dev/null @@ -1,40 +0,0 @@ -" -FAMIXUnknownVariable represents some unknown entity encountered while importing the project, possibly due to a syntax error in the source code. -" -Class { - #name : #FAMIXUnknownVariable, - #superclass : #FAMIXStructuralEntity, - #category : #'Famix-Core' -} - -{ #category : #meta } -FAMIXUnknownVariable class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXUnknownVariable >> belongsTo [ - ^ nil -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXUnknownVariable >> namespaceScope [ - "namespaceScope does not make sense for an unknown variable, - so we return nil" - ^ nil -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXUnknownVariable >> packageScope [ - "packageScope does not make sense for an unknown variable, - so we return nil" - ^ nil -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXUnknownVariable >> typeScope [ - "typeScope does not make sense for an unknown variable, - so we return nil" - ^ nil -] diff --git a/src-archive/Famix-Core/package.st b/src-archive/Famix-Core/package.st deleted file mode 100644 index 0949774d1..000000000 --- a/src-archive/Famix-Core/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Famix-Core' } diff --git a/src-archive/Famix-File/FAMIXAbstractFile.class.st b/src-archive/Famix-File/FAMIXAbstractFile.class.st deleted file mode 100644 index 9aa7f591f..000000000 --- a/src-archive/Famix-File/FAMIXAbstractFile.class.st +++ /dev/null @@ -1,145 +0,0 @@ -" -The abstract file system class. It is subclassed by File and Folder. - -Defines an attribute parent folder to point to its container. -" -Class { - #name : #FAMIXAbstractFile, - #superclass : #FAMIXNamedEntity, - #category : #'Famix-File' -} - -{ #category : #meta } -FAMIXAbstractFile class >> annotation [ - - -] - -{ #category : #constants } -FAMIXAbstractFile class >> famixFolderSeparatorString [ - ^'/' -] - -{ #category : #'instance creation' } -FAMIXAbstractFile class >> named: aName filedIn: aFolder [ - - ^self basicNew - initialize; - name: (aName copyReplaceAll: self systemFolderSeparatorString with: self famixFolderSeparatorString) asSymbol; - parentFolder: aFolder; - yourself. -] - -{ #category : #constants } -FAMIXAbstractFile class >> systemFolderSeparatorString [ - ^ DiskStore delimiter asString -] - -{ #category : #accessing } -FAMIXAbstractFile >> belongsTo [ - - ^ self parentFolder -] - -{ #category : #accessing } -FAMIXAbstractFile >> fileReference [ - ^ (FileSystem disk referenceTo: (self mooseName copyReplaceAll: self class famixFolderSeparatorString with: FileSystem disk delimiter asString)) -] - -{ #category : #accessing } -FAMIXAbstractFile >> fullName [ - ^ self mooseName -] - -{ #category : #testing } -FAMIXAbstractFile >> ifFolder: aBlock [ - ^ self isFolder ifTrue: [ aBlock value ] -] - -{ #category : #testing } -FAMIXAbstractFile >> ifFolder: aBlock1 ifNotFolder: aBlock2 [ - ^ self isFolder ifTrue: [ aBlock1 value ] ifFalse: [ aBlock2 value ] -] - -{ #category : #testing } -FAMIXAbstractFile >> ifNotFolder: aBlock [ - ^ self isFolder ifFalse: [ aBlock value ] -] - -{ #category : #testing } -FAMIXAbstractFile >> ifNotFolder: aBlock1 ifFolder: aBlock2 [ - ^ self isFolder ifFalse: [ aBlock1 value ] ifTrue: [ aBlock2 value ] -] - -{ #category : #testing } -FAMIXAbstractFile >> isFolder [ - self subclassResponsibility -] - -{ #category : #testing } -FAMIXAbstractFile >> isRoot [ - ^ self belongsTo isNil -] - -{ #category : #printing } -FAMIXAbstractFile >> mooseNameOn: aStream [ - self belongsTo - ifNotNil: [ :parent | - parent mooseNameOn: aStream. - aStream nextPutAll: self class famixFolderSeparatorString ]. - self name ifNotNil: [ aStream nextPutAll: self name ] -] - -{ #category : #accessing } -FAMIXAbstractFile >> name [ - - - - ^name -] - -{ #category : #accessing } -FAMIXAbstractFile >> name: anObject [ - name := anObject -] - -{ #category : #properties } -FAMIXAbstractFile >> numberOfEmptyLinesOfText [ - ^ self subclassResponsibility -] - -{ #category : #properties } -FAMIXAbstractFile >> numberOfLinesOfText [ - - - - ^ self lookUpPropertyNamed: #numberOfLinesOfText computedAs: [ self totalNumberOfLinesOfText - self numberOfEmptyLinesOfText ] -] - -{ #category : #accessing } -FAMIXAbstractFile >> parentFolder [ - "lazy initialization to reduce memory foot print if possible" - - - - - ^ self privateState attributeAt: #parentFolder ifAbsent: [ nil ] -] - -{ #category : #accessing } -FAMIXAbstractFile >> parentFolder: aFolder [ - self privateState - attributeAt: #parentFolder - put: - (FMMultivalueLink - on: self - update: #childrenFileSystemEntities - from: self parentFolder - to: aFolder). - self resetMooseName -] - -{ #category : #properties } -FAMIXAbstractFile >> totalNumberOfLinesOfText [ - ^ self subclassResponsibility -] diff --git a/src-archive/Famix-File/FAMIXAbstractFileAnchor.extension.st b/src-archive/Famix-File/FAMIXAbstractFileAnchor.extension.st deleted file mode 100644 index f11845344..000000000 --- a/src-archive/Famix-File/FAMIXAbstractFileAnchor.extension.st +++ /dev/null @@ -1,32 +0,0 @@ -Extension { #name : #FAMIXAbstractFileAnchor } - -{ #category : #'*Famix-File' } -FAMIXAbstractFileAnchor >> addToFile: entity [ - ^ self correspondingFile addEntity: entity -] - -{ #category : #'*Famix-File' } -FAMIXAbstractFileAnchor >> containerFiles [ - ^ self correspondingFile ifNil: [ {} ] ifNotNil: [ :file | {file} ] -] - -{ #category : #'*Famix-File' } -FAMIXAbstractFileAnchor >> correspondingFile [ - "file pointed to by this source anchor, ideally this value should never be nil for file-based systems" - - - ^ self privateState attributeAt: #correspondingFile ifAbsent: [ nil ] -] - -{ #category : #'*Famix-File' } -FAMIXAbstractFileAnchor >> correspondingFile: aFAMIXFile [ - self privateState attributeAt: #correspondingFile put: aFAMIXFile -] - -{ #category : #'*Famix-File' } -FAMIXAbstractFileAnchor >> setCorrespondingFile [ - "files have already been added to the model" - ^ self mooseModel allFiles asOrderedCollection - detect: [ :file | file mooseName = self fileName ] - ifFound: [ :aFile | self correspondingFile: aFile ] -] diff --git a/src-archive/Famix-File/FAMIXFile.class.st b/src-archive/Famix-File/FAMIXFile.class.st deleted file mode 100644 index a210c89e5..000000000 --- a/src-archive/Famix-File/FAMIXFile.class.st +++ /dev/null @@ -1,176 +0,0 @@ -" -It represents a file in the file system. -" -Class { - #name : #FAMIXFile, - #superclass : #FAMIXAbstractFile, - #instVars : [ - 'entities' - ], - #category : #'Famix-File' -} - -{ #category : #meta } -FAMIXFile class >> annotation [ - - -] - -{ #category : #'add-entities' } -FAMIXFile >> addEntity: famixEntity [ - self entities add: famixEntity -] - -{ #category : #properties } -FAMIXFile >> averageNumberOfCharactersPerLine [ - - - - ^ self - lookUpPropertyNamed: #averageNumberOfCharactersPerLine - computedAs: [ - self numberOfLinesOfText isZero - ifFalse: [ (self numberOfCharacters / self numberOfLinesOfText) asFloat ] - ifTrue: [ 0 ] ] -] - -{ #category : #accessing } -FAMIXFile >> entities [ - "a file such as a C file or a Java file contain one or more conceptual entities. - For a C file the entity will be an implementation entity containing all the C functions. - For a Java file, the entities are classes defined in a file. - any container entity can be added to the list of entities -" - - - - - ^ entities -] - -{ #category : #accessing } -FAMIXFile >> entities: aCollectionOfEntities [ - entities := aCollectionOfEntities -] - -{ #category : #accessing } -FAMIXFile >> entitiesGroup [ - - - ^ MooseGroup withAll: self entities withDescription: 'Entities defined in a file' -] - -{ #category : #testing } -FAMIXFile >> exists [ - ^ self fileExists -] - -{ #category : #testing } -FAMIXFile >> fileExists [ - name ifNil: [ ^ false ]. - ^ self fileReference exists -] - -{ #category : #testing } -FAMIXFile >> ifFileExistsDo: aBlock [ - name ifNil: [ ^ aBlock value ]. - ^ self fileExists ifTrue: [ aBlock value ] -] - -{ #category : #'initialize-release' } -FAMIXFile >> initialize [ - super initialize. - entities := OrderedCollection new -] - -{ #category : #testing } -FAMIXFile >> isFolder [ - ^ false -] - -{ #category : #accessing } -FAMIXFile >> isSourceCodeLoaded [ - self propertyNamed: #sourceText ifAbsentPut: [ ^ false]. - ^ true -] - -{ #category : #properties } -FAMIXFile >> numberOfBytes [ - - - - ^ self - lookUpPropertyNamed: #numberOfBytes - computedAs: [ self fileExists - ifTrue: [ self fileReference size ] - ifFalse: [ 0 ] ] -] - -{ #category : #properties } -FAMIXFile >> numberOfCharacters [ - - - - ^ self lookUpPropertyNamed: #numberOfCharacters computedAs: [ self sourceText size ] -] - -{ #category : #properties } -FAMIXFile >> numberOfEmptyLinesOfText [ - - - - ^ self - lookUpPropertyNamed: #numberOfEmptyLinesOfText - computedAs: [ self fileExists - ifTrue: [ (self sourceText lines select: #isEmpty) size ] - ifFalse: [ 0 ] ] -] - -{ #category : #properties } -FAMIXFile >> numberOfKiloBytes [ - - - - ^ self lookUpPropertyNamed: #numberOfKiloBytes computedAs: [ (self numberOfBytes / 1024) asFloat ] -] - -{ #category : #accessing } -FAMIXFile >> readStream [ - ^ self fileReference readStream -] - -{ #category : #accessing } -FAMIXFile >> sourceText [ - ^ self - lookUpPropertyNamed: #sourceText - computedAs: [ self fileExists - ifTrue: [ | stream source | - stream := self readStream. - source := [ stream contents asString ] - ensure: [ stream ifNotNil: [ stream close ] ]. - source ] - ifFalse: [ '' ] ] -] - -{ #category : #accessing } -FAMIXFile >> sourceText: aString [ - ^self - propertyNamed: #sourceText - put: aString -] - -{ #category : #properties } -FAMIXFile >> totalNumberOfLinesOfText [ - - - - ^ self - lookUpPropertyNamed: #totalNumberOfLinesOfText - computedAs: [ - self sourceText isEmpty - ifFalse: [ self sourceText lineCount ] - ifTrue: [ - (name notNil and: [ self exists ]) - ifTrue: [ (self sourceText select: [ :each | each = Character cr ]) size + 1 ] - ifFalse: [ 0 ] ] ] -] diff --git a/src-archive/Famix-File/FAMIXFileGroup.class.st b/src-archive/Famix-File/FAMIXFileGroup.class.st deleted file mode 100644 index 1fbf3d68a..000000000 --- a/src-archive/Famix-File/FAMIXFileGroup.class.st +++ /dev/null @@ -1,14 +0,0 @@ -" -FAMIXFileGroup is a MooseGroup containing only FAMIX enities of type FAMIXFile. -" -Class { - #name : #FAMIXFileGroup, - #superclass : #MooseGroup, - #category : #'Famix-File' -} - -{ #category : #meta } -FAMIXFileGroup class >> annotation [ - - -] diff --git a/src-archive/Famix-File/FAMIXFolder.class.st b/src-archive/Famix-File/FAMIXFolder.class.st deleted file mode 100644 index e542d4f71..000000000 --- a/src-archive/Famix-File/FAMIXFolder.class.st +++ /dev/null @@ -1,127 +0,0 @@ -" -It represents a folder in the file system. It can contain other files or folders. -" -Class { - #name : #FAMIXFolder, - #superclass : #FAMIXAbstractFile, - #category : #'Famix-File' -} - -{ #category : #meta } -FAMIXFolder class >> annotation [ - - -] - -{ #category : #'add/remove' } -FAMIXFolder >> addChildFileSystemEntity: aFileOrFolder [ - self childrenFileSystemEntities add: aFileOrFolder -] - -{ #category : #'computed accessing' } -FAMIXFolder >> allRecursiveFiles [ - | result | - result := MooseGroup withAll: self files withDescription: 'All recursive files in ', self mooseName. - self folders do: [:each | result := result addAll: each allRecursiveFiles]. - ^result. -] - -{ #category : #'computed accessing' } -FAMIXFolder >> allRecursiveFolders [ - | result | - result := MooseGroup withAll: self folders withDescription: 'All recursive folders in ', self mooseName. - self folders do: [:each | result := result addAll: each allRecursiveFolders]. - ^result. -] - -{ #category : #accessing } -FAMIXFolder >> childrenFileSystemEntities [ - - - - - ^ self privateState - attributeAt: #childrenFileSystemEntities - ifAbsentPut: [ FMMultivalueLink on: self opposite: #parentFolder: ] -] - -{ #category : #accessing } -FAMIXFolder >> childrenFileSystemEntities: aFAMIXAbstractFile [ - self childrenFileSystemEntities value: aFAMIXAbstractFile -] - -{ #category : #accessing } -FAMIXFolder >> files [ - ^ self childrenFileSystemEntities reject: #isFolder -] - -{ #category : #accessing } -FAMIXFolder >> filesGroup [ - - ^FAMIXFileGroup withAll: self files withDescription: 'Files' -] - -{ #category : #accessing } -FAMIXFolder >> folders [ - ^ self childrenFileSystemEntities select: #isFolder -] - -{ #category : #accessing } -FAMIXFolder >> foldersGroup [ - - ^FAMIXFolderGroup withAll: self folders withDescription: 'Folders' -] - -{ #category : #testing } -FAMIXFolder >> isFolder [ - ^ true -] - -{ #category : #properties } -FAMIXFolder >> numberOfEmptyLinesOfText [ - - - - ^ self lookUpPropertyNamed: #numberOfEmptyLinesOfText computedAs: [ - self files, self folders sumNumbers: #numberOfEmptyLinesOfText - ] -] - -{ #category : #properties } -FAMIXFolder >> numberOfFiles [ - - - - ^self - lookUpPropertyNamed: #numberOfFiles - computedAs: [self files size] -] - -{ #category : #properties } -FAMIXFolder >> numberOfFolders [ - - - - ^self - lookUpPropertyNamed: #numberOfFolders - computedAs: [self folders size] -] - -{ #category : #properties } -FAMIXFolder >> totalNumberOfLinesOfText [ - - - - ^ self - lookUpPropertyNamed: #totalNumberOfLinesOfText - computedAs: [ self files , self folders sumNumbers: #totalNumberOfLinesOfText ] -] - -{ #category : #'computed accessing' } -FAMIXFolder >> withAllRecursiveFolders [ - | result | - result := MooseGroup with: self withDescription: 'All recursive folders in ', self mooseName. - result addAll: self folders. - self folders do: [:each | result := result addAll: each allRecursiveFolders]. - ^result. -] diff --git a/src-archive/Famix-File/FAMIXFolderGroup.class.st b/src-archive/Famix-File/FAMIXFolderGroup.class.st deleted file mode 100644 index abc9dd6b5..000000000 --- a/src-archive/Famix-File/FAMIXFolderGroup.class.st +++ /dev/null @@ -1,23 +0,0 @@ -" -FAMIXFolderGroup is a MooseGroup containing only FAMIX enities of type FAMIXFolder. -" -Class { - #name : #FAMIXFolderGroup, - #superclass : #MooseGroup, - #category : #'Famix-File' -} - -{ #category : #meta } -FAMIXFolderGroup class >> annotation [ - - -] - -{ #category : #'accessing computed' } -FAMIXFolderGroup >> allFiles [ - | files | - - files := OrderedCollection new. - self do: [:folder | files addAll: folder files]. - ^ files -] diff --git a/src-archive/Famix-File/FAMIXMultipleFileAnchor.extension.st b/src-archive/Famix-File/FAMIXMultipleFileAnchor.extension.st deleted file mode 100644 index ad58c7f0f..000000000 --- a/src-archive/Famix-File/FAMIXMultipleFileAnchor.extension.st +++ /dev/null @@ -1,11 +0,0 @@ -Extension { #name : #FAMIXMultipleFileAnchor } - -{ #category : #'*Famix-File' } -FAMIXMultipleFileAnchor >> addToFile: entity [ - ^ self allFiles do: [ :each | each addToFile: entity ] -] - -{ #category : #'*Famix-File' } -FAMIXMultipleFileAnchor >> containerFiles [ - ^ self propertyNamed: #containerFiles ifAbsentPut: [ self allFiles collect: #correspondingFile thenReject: #isNil ] -] diff --git a/src-archive/Famix-File/FAMIXPharoAnchor.extension.st b/src-archive/Famix-File/FAMIXPharoAnchor.extension.st deleted file mode 100644 index 46f8a855a..000000000 --- a/src-archive/Famix-File/FAMIXPharoAnchor.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #FAMIXPharoAnchor } - -{ #category : #'*Famix-File' } -FAMIXPharoAnchor >> containerFiles [ - ^ { } -] diff --git a/src-archive/Famix-File/FAMIXSourceAnchor.extension.st b/src-archive/Famix-File/FAMIXSourceAnchor.extension.st deleted file mode 100644 index 75d44eb0d..000000000 --- a/src-archive/Famix-File/FAMIXSourceAnchor.extension.st +++ /dev/null @@ -1,8 +0,0 @@ -Extension { #name : #FAMIXSourceAnchor } - -{ #category : #'*Famix-File' } -FAMIXSourceAnchor >> containerFiles [ - "I should return a collection of files corresponding to the source anchor. If there is no file just return an empty collection." - - ^ self subclassResponsibility -] diff --git a/src-archive/Famix-File/FAMIXSourceTextAnchor.extension.st b/src-archive/Famix-File/FAMIXSourceTextAnchor.extension.st deleted file mode 100644 index db09abc8c..000000000 --- a/src-archive/Famix-File/FAMIXSourceTextAnchor.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #FAMIXSourceTextAnchor } - -{ #category : #'*Famix-File' } -FAMIXSourceTextAnchor >> containerFiles [ - ^ {} -] diff --git a/src-archive/Famix-File/FAMIXSourcedEntity.extension.st b/src-archive/Famix-File/FAMIXSourcedEntity.extension.st deleted file mode 100644 index 11daa22a4..000000000 --- a/src-archive/Famix-File/FAMIXSourcedEntity.extension.st +++ /dev/null @@ -1,20 +0,0 @@ -Extension { #name : #FAMIXSourcedEntity } - -{ #category : #'*Famix-File' } -FAMIXSourcedEntity >> containerFiles [ - "this method returns a collection because a source entity can be defined in single as well as multiple files. Hence we support the language that allow the separation of declaration and definition" - - - - - " -> should not be on this side..." - - ^ self sourceAnchor ifNotNil: [ self sourceAnchor containerFiles ] ifNil: [ #() ] -] - -{ #category : #'*Famix-File' } -FAMIXSourcedEntity >> containerFiles: aColl [ - "This method is a hack for now because we need an opposite to the files." - - -] diff --git a/src-archive/Famix-File/MooseAbstractGroup.extension.st b/src-archive/Famix-File/MooseAbstractGroup.extension.st deleted file mode 100644 index 5790ff7fe..000000000 --- a/src-archive/Famix-File/MooseAbstractGroup.extension.st +++ /dev/null @@ -1,13 +0,0 @@ -Extension { #name : #MooseAbstractGroup } - -{ #category : #'*Famix-File' } -MooseAbstractGroup >> allFiles [ - - ^ self allWithSubTypesOf: FAMIXFile -] - -{ #category : #'*Famix-File' } -MooseAbstractGroup >> allFolders [ - - ^ self allWithSubTypesOf: FAMIXFolder -] diff --git a/src-archive/Famix-File/package.st b/src-archive/Famix-File/package.st deleted file mode 100644 index 1fffe0d4f..000000000 --- a/src-archive/Famix-File/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Famix-File' } diff --git a/src-archive/Famix-Implementation/CompiledMethod.extension.st b/src-archive/Famix-Implementation/CompiledMethod.extension.st deleted file mode 100644 index aa3c8a7a4..000000000 --- a/src-archive/Famix-Implementation/CompiledMethod.extension.st +++ /dev/null @@ -1,43 +0,0 @@ -Extension { #name : #CompiledMethod } - -{ #category : #'*famix-implementation' } -CompiledMethod >> mooseName [ - ^ self mooseNameWithScope: false -] - -{ #category : #'*famix-implementation' } -CompiledMethod >> mooseNameWithScope: aboolean [ - - | string | - string := String streamContents: [:str | - str nextPutAll: self methodClass mooseName. - str nextPut: $.. - str nextPutAll: self selector. - self signatureFromSmalltalkSelectorOn: str]. - ^ string asSymbol -] - -{ #category : #'*famix-implementation' } -CompiledMethod >> signature [ - - | ws | - ws := WriteStream on: (String new: 150). - ws nextPutAll: self selector. - self signatureFromSmalltalkSelectorOn: ws. - ^ws contents asSymbol -] - -{ #category : #'*famix-implementation' } -CompiledMethod >> signatureFromSmalltalkSelectorOn: aStream [ - - | sym numArgs | - sym := self selector. - numArgs := sym numArgs. - aStream nextPut: $(. - 1 - to: numArgs - do: [:inx | aStream nextPutAll: 'Object,']. - numArgs > 0 ifTrue: [aStream skip: -1 "remove last space"]. - aStream nextPut: $). - -] diff --git a/src-archive/Famix-Implementation/FAMIXAccess.extension.st b/src-archive/Famix-Implementation/FAMIXAccess.extension.st deleted file mode 100644 index 1a7823407..000000000 --- a/src-archive/Famix-Implementation/FAMIXAccess.extension.st +++ /dev/null @@ -1,12 +0,0 @@ -Extension { #name : #FAMIXAccess } - -{ #category : #'*Famix-Implementation' } -FAMIXAccess >> isAccess [ - ^true -] - -{ #category : #'*Famix-Implementation' } -FAMIXAccess >> printOn: aStream [ - super printOn: aStream. - aStream nextPutAll: ' (Access)' -] diff --git a/src-archive/Famix-Implementation/FAMIXAssociation.extension.st b/src-archive/Famix-Implementation/FAMIXAssociation.extension.st deleted file mode 100644 index d3599d76a..000000000 --- a/src-archive/Famix-Implementation/FAMIXAssociation.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #FAMIXAssociation } - -{ #category : #'*Famix-Implementation' } -FAMIXAssociation >> isAssociation [ - ^true -] diff --git a/src-archive/Famix-Implementation/FAMIXAttribute.extension.st b/src-archive/Famix-Implementation/FAMIXAttribute.extension.st deleted file mode 100644 index 2be39d504..000000000 --- a/src-archive/Famix-Implementation/FAMIXAttribute.extension.st +++ /dev/null @@ -1,46 +0,0 @@ -Extension { #name : #FAMIXAttribute } - -{ #category : #'*Famix-Implementation' } -FAMIXAttribute >> accessingClasses [ - - ^(self accessingMethods collectAsSet: [:each | each belongsTo]) asOrderedCollection -] - -{ #category : #'*Famix-Implementation' } -FAMIXAttribute >> accessingMethods [ - - ^ self incomingAccesses collectAsSet: [:anAccess | anAccess accessor]. - -] - -{ #category : #'*Famix-Implementation' } -FAMIXAttribute >> isAttribute [ - ^ true -] - -{ #category : #'*Famix-Implementation' } -FAMIXAttribute >> mooseNameOn: aStream [ - | parent | - parent := self belongsTo. - parent ifNotNil: - [ parent mooseNameOn: aStream. - aStream nextPut: $. ]. - self name ifNotNil: [ aStream nextPutAll: self name ]. -] - -{ #category : #'*Famix-Implementation' } -FAMIXAttribute >> printOn: aStream [ - | parent | - parent := self belongsTo. - parent ifNotNil: - [ aStream nextPutAll: parent name. - aStream nextPut: $. ]. - self name ifNotNil: [ aStream nextPutAll: self name ]. - aStream nextPutAll: ' (Attribute)' -] - -{ #category : #'*Famix-Implementation' } -FAMIXAttribute >> readAccesses [ - - ^self incomingAccesses select: [:each | each isRead] -] diff --git a/src-archive/Famix-Implementation/FAMIXBehaviouralEntity.extension.st b/src-archive/Famix-Implementation/FAMIXBehaviouralEntity.extension.st deleted file mode 100644 index 41d9cd554..000000000 --- a/src-archive/Famix-Implementation/FAMIXBehaviouralEntity.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #FAMIXBehaviouralEntity } - -{ #category : #'*Famix-Implementation' } -FAMIXBehaviouralEntity >> isBehaviouralEntity [ - ^ true -] diff --git a/src-archive/Famix-Implementation/FAMIXClass.extension.st b/src-archive/Famix-Implementation/FAMIXClass.extension.st deleted file mode 100644 index e752592e9..000000000 --- a/src-archive/Famix-Implementation/FAMIXClass.extension.st +++ /dev/null @@ -1,14 +0,0 @@ -Extension { #name : #FAMIXClass } - -{ #category : #'*famix-implementation-testing' } -FAMIXClass >> isClass [ - ^ true -] - -{ #category : #'*Famix-Implementation' } -FAMIXClass >> smalltalkClass [ - "Returns the associated smalltalk class if it exist in the system." - - ^ FAMIXNameResolver smalltalkClassFromFamixClassName: - self name ifAbsent: [nil] -] diff --git a/src-archive/Famix-Implementation/FAMIXComment.extension.st b/src-archive/Famix-Implementation/FAMIXComment.extension.st deleted file mode 100644 index 291e9e6c0..000000000 --- a/src-archive/Famix-Implementation/FAMIXComment.extension.st +++ /dev/null @@ -1,15 +0,0 @@ -Extension { #name : #FAMIXComment } - -{ #category : #'*Famix-Implementation' } -FAMIXComment >> belongsTo [ - - ^ self container -] - -{ #category : #'*Famix-Implementation' } -FAMIXComment >> printOn: aStream [ - self sourceText ifNotNil: [ :sourceText | aStream nextPutAll: (sourceText contractTo: 50) ]. - aStream nextPutAll: ' (comment on '. - self container printOn: aStream. - aStream nextPut: $) -] diff --git a/src-archive/Famix-Implementation/FAMIXContainerEntity.extension.st b/src-archive/Famix-Implementation/FAMIXContainerEntity.extension.st deleted file mode 100644 index f01bab962..000000000 --- a/src-archive/Famix-Implementation/FAMIXContainerEntity.extension.st +++ /dev/null @@ -1,22 +0,0 @@ -Extension { #name : #FAMIXContainerEntity } - -{ #category : #'*Famix-Implementation' } -FAMIXContainerEntity >> addClass: aClass [ - - types add: aClass -] - -{ #category : #'*Famix-Implementation' } -FAMIXContainerEntity >> classes [ - "Classes are usually seen as types from the point of view of a Container. However, there may other types (e.g. aspects) which we dont want to see as classes and are rejected by this method." - - - ^ self privateState - cacheAt: #classes - ifAbsentPut: [self types select: [:type| type isClass ]] -] - -{ #category : #'*Famix-Implementation' } -FAMIXContainerEntity >> isContainerEntity [ - ^ true -] diff --git a/src-archive/Famix-Implementation/FAMIXEntity.extension.st b/src-archive/Famix-Implementation/FAMIXEntity.extension.st deleted file mode 100644 index a95aa3c6f..000000000 --- a/src-archive/Famix-Implementation/FAMIXEntity.extension.st +++ /dev/null @@ -1,76 +0,0 @@ -Extension { #name : #FAMIXEntity } - -{ #category : #'*Famix-Implementation' } -FAMIXEntity >> isAccess [ - ^ false -] - -{ #category : #'*Famix-Implementation' } -FAMIXEntity >> isAssociation [ - ^false -] - -{ #category : #'*Famix-Implementation' } -FAMIXEntity >> isAttribute [ - ^ false -] - -{ #category : #'*Famix-Implementation' } -FAMIXEntity >> isBehaviouralEntity [ - ^ false -] - -{ #category : #'*Famix-Implementation' } -FAMIXEntity >> isClass [ - ^ false -] - -{ #category : #'*Famix-Implementation' } -FAMIXEntity >> isContainerEntity [ - ^ false -] - -{ #category : #'*Famix-Implementation' } -FAMIXEntity >> isFunction [ - ^false -] - -{ #category : #'*Famix-Implementation' } -FAMIXEntity >> isInheritance [ - ^ false -] - -{ #category : #'*Famix-Implementation' } -FAMIXEntity >> isInvocation [ - ^ false -] - -{ #category : #'*Famix-Implementation' } -FAMIXEntity >> isMethod [ - ^ false -] - -{ #category : #'*Famix-Implementation' } -FAMIXEntity >> isNamespace [ - ^ false -] - -{ #category : #'*Famix-Implementation' } -FAMIXEntity >> isPackage [ - ^ false -] - -{ #category : #'*Famix-Implementation' } -FAMIXEntity >> isPrimitiveType [ - ^ false -] - -{ #category : #'*Famix-Implementation' } -FAMIXEntity >> isReference [ - ^ false -] - -{ #category : #'*Famix-Implementation' } -FAMIXEntity >> isType [ - ^ false -] diff --git a/src-archive/Famix-Implementation/FAMIXFunction.extension.st b/src-archive/Famix-Implementation/FAMIXFunction.extension.st deleted file mode 100644 index 9d53134d7..000000000 --- a/src-archive/Famix-Implementation/FAMIXFunction.extension.st +++ /dev/null @@ -1,18 +0,0 @@ -Extension { #name : #FAMIXFunction } - -{ #category : #'*Famix-Implementation' } -FAMIXFunction >> isFunction [ - ^true. -] - -{ #category : #'*Famix-Implementation' } -FAMIXFunction >> mooseNameOn: stream [ - | parent | - parent := self container. - parent ifNotNil: - [ parent mooseNameOn: stream. - stream nextPut: $. ]. - self signature - ifNotNil: [ stream nextPutAll: self signature ] - ifNil: [ self name ifNotNil: [ stream nextPutAll: self name] ] -] diff --git a/src-archive/Famix-Implementation/FAMIXGlobalVariable.extension.st b/src-archive/Famix-Implementation/FAMIXGlobalVariable.extension.st deleted file mode 100644 index 8113e8829..000000000 --- a/src-archive/Famix-Implementation/FAMIXGlobalVariable.extension.st +++ /dev/null @@ -1,12 +0,0 @@ -Extension { #name : #FAMIXGlobalVariable } - -{ #category : #'*Famix-Implementation' } -FAMIXGlobalVariable >> printOn: aStream [ - | parent | - parent := self belongsTo. - parent ifNotNil: - [ aStream nextPutAll: parent name. - aStream nextPut: $. ]. - self name ifNotNil: [ aStream nextPutAll: self name ]. - aStream nextPutAll: ' (Global Variable)' -] diff --git a/src-archive/Famix-Implementation/FAMIXImplicitVariable.extension.st b/src-archive/Famix-Implementation/FAMIXImplicitVariable.extension.st deleted file mode 100644 index 7877f1729..000000000 --- a/src-archive/Famix-Implementation/FAMIXImplicitVariable.extension.st +++ /dev/null @@ -1,38 +0,0 @@ -Extension { #name : #FAMIXImplicitVariable } - -{ #category : #'*Famix-Implementation' } -FAMIXImplicitVariable >> isImplicitVariable [ - ^true -] - -{ #category : #'*Famix-Implementation' } -FAMIXImplicitVariable >> isSelf [ - ^ self name = #self -] - -{ #category : #'*Famix-Implementation' } -FAMIXImplicitVariable >> isSuper [ - ^ self name == #super -] - -{ #category : #'*Famix-Implementation' } -FAMIXImplicitVariable >> mooseNameOn: stream [ - | parent | - parent := self parentBehaviouralEntity. - parent ifNotNil: - [ parent mooseNameOn: stream. - stream nextPut: $. ]. - - self name ifNotNil: [ stream nextPutAll: self name ] -] - -{ #category : #'*Famix-Implementation' } -FAMIXImplicitVariable >> printOn: aStream [ - | parent | - parent := self parentBehaviouralEntity. - parent ifNotNil: - [ aStream nextPutAll: parent name. - aStream nextPut: $. ]. - self name ifNotNil: [ aStream nextPutAll: self name ]. - aStream nextPutAll: ' (ImplicitVariable)' -] diff --git a/src-archive/Famix-Implementation/FAMIXInheritance.extension.st b/src-archive/Famix-Implementation/FAMIXInheritance.extension.st deleted file mode 100644 index 41b9d4884..000000000 --- a/src-archive/Famix-Implementation/FAMIXInheritance.extension.st +++ /dev/null @@ -1,19 +0,0 @@ -Extension { #name : #FAMIXInheritance } - -{ #category : #'*Famix-Implementation' } -FAMIXInheritance >> isInheritance [ - ^true -] - -{ #category : #'*Famix-Implementation' } -FAMIXInheritance >> mooseNameOn: aStream [ - self subclass ifNotNil: [ aStream nextPutAll: self subclass name ]. - aStream nextPutAll: ' -> '. - self superclass ifNotNil: [ aStream nextPutAll: self superclass name ] -] - -{ #category : #'*Famix-Implementation' } -FAMIXInheritance >> printOn: aStream [ - super printOn: aStream. - aStream nextPutAll: ' (Inheritance)' -] diff --git a/src-archive/Famix-Implementation/FAMIXInvocation.extension.st b/src-archive/Famix-Implementation/FAMIXInvocation.extension.st deleted file mode 100644 index 0e78c6c05..000000000 --- a/src-archive/Famix-Implementation/FAMIXInvocation.extension.st +++ /dev/null @@ -1,26 +0,0 @@ -Extension { #name : #FAMIXInvocation } - -{ #category : #'*Famix-Implementation' } -FAMIXInvocation >> gtDisplayOn: aStream [ - self from ifNotNil: [ self from gtDisplayOn: aStream ]. - aStream nextPutAll: ' -> '. - self receiver ifNotNil: [ aStream nextPutAll: self receiver name ]. - aStream nextPut: $#. - aStream nextPutAll: self signature. - aStream nextPutAll: ' -> '. - self candidates size = 1 - ifTrue: [ self anyCandidate gtDisplayOn: aStream ] -] - -{ #category : #'*Famix-Implementation' } -FAMIXInvocation >> isInvocation [ - ^true -] - -{ #category : #'*Famix-Implementation' } -FAMIXInvocation >> printOn: aStream [ - super printOn: aStream. - aStream nextPut: $#. - aStream << self signature. - aStream << ' (Invocation)' -] diff --git a/src-archive/Famix-Implementation/FAMIXLocalVariable.extension.st b/src-archive/Famix-Implementation/FAMIXLocalVariable.extension.st deleted file mode 100644 index e7367c7ad..000000000 --- a/src-archive/Famix-Implementation/FAMIXLocalVariable.extension.st +++ /dev/null @@ -1,24 +0,0 @@ -Extension { #name : #FAMIXLocalVariable } - -{ #category : #'*Famix-Implementation' } -FAMIXLocalVariable >> mooseNameOn: stream [ - | parent | - parent := self parentBehaviouralEntity. - parent ifNotNil: - [ parent mooseNameOn: stream. - stream nextPut: $. ]. - self name ifNotNil: [stream nextPutAll: self name] -] - -{ #category : #'*Famix-Implementation' } -FAMIXLocalVariable >> printOn: stream [ - | parent | - self name ifNotNil: [ stream nextPutAll: self name ]. - stream nextPutAll: ' (local variable'. - parent := self parentBehaviouralEntity. - parent ifNotNil: [ - stream nextPutAll: ' in '. - parent printOn: stream ]. - stream nextPut: $) - -] diff --git a/src-archive/Famix-Implementation/FAMIXMethod.extension.st b/src-archive/Famix-Implementation/FAMIXMethod.extension.st deleted file mode 100644 index c689bceeb..000000000 --- a/src-archive/Famix-Implementation/FAMIXMethod.extension.st +++ /dev/null @@ -1,120 +0,0 @@ -Extension { #name : #FAMIXMethod } - -{ #category : #'*Famix-Implementation' } -FAMIXMethod >> compiledMethod [ - "Return the compiled method associated to the receiver or nil" - - ^ self smalltalkClass compiledMethodAt: self name asSymbol - - -] - -{ #category : #'*Famix-Implementation' } -FAMIXMethod >> isClassInitializer [ - - - - ^ #initializer = self kind - or: [ self privateState propertyAt: #isClassInitializer ifAbsent: [ false ] ] -] - -{ #category : #'*Famix-Implementation' } -FAMIXMethod >> isConstant [ - - - - ^#constant = self kind -] - -{ #category : #'*Famix-Implementation' } -FAMIXMethod >> isConstructor [ - - - - - ^ #constructor = self kind or: [ - self privateState propertyAt: #isConstructor ifAbsent: [false] ] -] - -{ #category : #'*Famix-Implementation' } -FAMIXMethod >> isConstructor: aBoolean [ - aBoolean - ifTrue: [ self kind: #constructor ] - ifFalse: [ - self isConstructor ifTrue: [ self kind: nil ] ] -] - -{ #category : #'*Famix-Implementation' } -FAMIXMethod >> isGetter [ - - - - - ^#getter = self kind -] - -{ #category : #'*Famix-Implementation' } -FAMIXMethod >> isMethod [ - - ^ true -] - -{ #category : #'*Famix-Implementation' } -FAMIXMethod >> isPureAccessor [ - ^self isGetter - or: [self isSetter - or: [self privateState propertyAt: #isPureAccessor ifAbsent: [false]]] -] - -{ #category : #'*Famix-Implementation' } -FAMIXMethod >> isSetter [ - - - - - ^#setter = self kind -] - -{ #category : #'*Famix-Implementation' } -FAMIXMethod >> mooseNameOn: stream [ - | parent | - parent := self belongsTo. - parent ifNotNil: - [ parent mooseNameOn: stream. - stream nextPut: $. ]. - self signature - ifNotNil: [ stream nextPutAll: self signature ] - ifNil: [ - self name ifNotNil: [ stream nextPutAll: self name] ] -] - -{ #category : #'*Famix-Implementation' } -FAMIXMethod >> overridesMethod [ - ^ self belongsTo superclassHierarchy collect: [ :each | each implementationOf: self signature ] thenSelect: #isNotNil -] - -{ #category : #'*Famix-Implementation' } -FAMIXMethod >> parentScope [ - "Polymorphic alias to mimic GlobalVariable#parentScope and similar" - - ^ self parentType parentScope -] - -{ #category : #'*Famix-Implementation' } -FAMIXMethod >> printOn: aStream [ - parentType ifNotNil: [ aStream nextPutAll: parentType name ]. - aStream nextPutAll: '>>'. - signature ifNotNil: [ aStream nextPutAll: signature ]. - aStream nextPutAll: ' (Method)' -] - -{ #category : #'*Famix-Implementation' } -FAMIXMethod >> smalltalkClass [ - "Return the smalltalk class associated with the receiver. Note that it may be different than doing self parentType because the class and metaclass can be merged." - - ^ ('*_class' match: self parentType name) - ifTrue: [self parentType smalltalkClass] - ifFalse: [self hasClassScope - ifTrue: [self parentType smalltalkClass class] - ifFalse: [self parentType smalltalkClass]] -] diff --git a/src-archive/Famix-Implementation/FAMIXNamedEntity.extension.st b/src-archive/Famix-Implementation/FAMIXNamedEntity.extension.st deleted file mode 100644 index 4430b0f79..000000000 --- a/src-archive/Famix-Implementation/FAMIXNamedEntity.extension.st +++ /dev/null @@ -1,26 +0,0 @@ -Extension { #name : #FAMIXNamedEntity } - -{ #category : #'*Famix-Implementation' } -FAMIXNamedEntity >> addModifier: aString [ - modifiers add: aString -] - -{ #category : #'*Famix-Implementation' } -FAMIXNamedEntity >> addReceivingInvocation: anInvocation [ - receivingInvocations add: anInvocation -] - -{ #category : #'*Famix-Implementation' } -FAMIXNamedEntity >> modifierSet: aBoolean for: aSymbol [ - ^ aBoolean ifTrue: [self addModifier: aSymbol] ifFalse: [self removeModifier: aSymbol] -] - -{ #category : #'*Famix-Implementation' } -FAMIXNamedEntity >> mooseNameOn: stream [ - self name ifNotNil: [ :n | stream nextPutAll: n ] -] - -{ #category : #'*Famix-Implementation' } -FAMIXNamedEntity >> removeModifier: aString [ - modifiers remove: aString ifAbsent: [] -] diff --git a/src-archive/Famix-Implementation/FAMIXNamespace.extension.st b/src-archive/Famix-Implementation/FAMIXNamespace.extension.st deleted file mode 100644 index 0387d43e2..000000000 --- a/src-archive/Famix-Implementation/FAMIXNamespace.extension.st +++ /dev/null @@ -1,37 +0,0 @@ -Extension { #name : #FAMIXNamespace } - -{ #category : #'*Famix-Implementation' } -FAMIXNamespace >> isNamespace [ - ^ true -] - -{ #category : #'*Famix-Implementation' } -FAMIXNamespace >> methods [ - ^ self privateState - cacheAt: #methods - ifAbsentPut: [ - self classes flatCollect: #methods ] -] - -{ #category : #'*Famix-Implementation' } -FAMIXNamespace >> mooseNameOn: aStream [ - | parent | - parent := self belongsTo. - parent ifNotNil: - [ parent mooseNameOn: aStream. - aStream - nextPut: $:; - nextPut: $: ]. - self name ifNotNil: [aStream nextPutAll: self name] -] - -{ #category : #'*Famix-Implementation' } -FAMIXNamespace >> printOn: aStream [ - self belongsTo ifNotNil: [:parent | - parent printOn: aStream. - aStream - nextPut: $:; - nextPut: $: ]. - self name ifNotNil: [ aStream nextPutAll: self name ]. - aStream nextPutAll: ' (Namespace)' -] diff --git a/src-archive/Famix-Implementation/FAMIXPackage.extension.st b/src-archive/Famix-Implementation/FAMIXPackage.extension.st deleted file mode 100644 index c79cb3a4c..000000000 --- a/src-archive/Famix-Implementation/FAMIXPackage.extension.st +++ /dev/null @@ -1,31 +0,0 @@ -Extension { #name : #FAMIXPackage } - -{ #category : #'*Famix-Implementation' } -FAMIXPackage >> abstractClasses [ - - ^ self classes select: [:c | c isAbstract] -] - -{ #category : #'*Famix-Implementation' } -FAMIXPackage >> classes [ - - ^ self privateState cacheAt: #classes - ifAbsentPut: [ childNamedEntities select: [ :child | child isClass ]] -] - -{ #category : #'*Famix-Implementation' } -FAMIXPackage >> methods [ - ^ self localMethods union: self extensionMethods -] - -{ #category : #'*Famix-Implementation' } -FAMIXPackage >> printOn: aStream [ - | parent | - parent := self parentPackage. - parent ifNotNil: - [ parent printOn: aStream. - aStream - nextPut: $. ]. - self name ifNotNil: [ aStream nextPutAll: self name ]. - aStream nextPutAll: ' (Package)' -] diff --git a/src-archive/Famix-Implementation/FAMIXParameter.extension.st b/src-archive/Famix-Implementation/FAMIXParameter.extension.st deleted file mode 100644 index 6a6f8c7aa..000000000 --- a/src-archive/Famix-Implementation/FAMIXParameter.extension.st +++ /dev/null @@ -1,24 +0,0 @@ -Extension { #name : #FAMIXParameter } - -{ #category : #'*Famix-Implementation' } -FAMIXParameter >> mooseNameOn: stream [ - | parent | - parent := self parentBehaviouralEntity. - parent ifNotNil: - [ parent mooseNameOn: stream. - stream nextPut: $. ]. - self name ifNotNil: [stream nextPutAll: self name] -] - -{ #category : #'*Famix-Implementation' } -FAMIXParameter >> printOn: stream [ - | parent | - self name ifNotNil: [ stream nextPutAll: self name ]. - stream nextPutAll: ' (parameter'. - parent := self parentBehaviouralEntity. - parent ifNotNil: [ - stream nextPutAll: ' in '. - parent printOn: stream ]. - stream nextPut: $) - -] diff --git a/src-archive/Famix-Implementation/FAMIXPrimitiveType.extension.st b/src-archive/Famix-Implementation/FAMIXPrimitiveType.extension.st deleted file mode 100644 index b63b7cbd7..000000000 --- a/src-archive/Famix-Implementation/FAMIXPrimitiveType.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #FAMIXPrimitiveType } - -{ #category : #'*Famix-Implementation' } -FAMIXPrimitiveType >> isPrimitiveType [ - ^true -] diff --git a/src-archive/Famix-Implementation/FAMIXReference.extension.st b/src-archive/Famix-Implementation/FAMIXReference.extension.st deleted file mode 100644 index 7a873f4c6..000000000 --- a/src-archive/Famix-Implementation/FAMIXReference.extension.st +++ /dev/null @@ -1,21 +0,0 @@ -Extension { #name : #FAMIXReference } - -{ #category : #'*Famix-Implementation' } -FAMIXReference >> isReference [ - ^true -] - -{ #category : #'*Famix-Implementation' } -FAMIXReference >> mooseNameOn: aStream [ - "aStream nextPutAll: 'Reference'." - - self from ifNotNil: [ aStream nextPutAll: self from name ]. - aStream nextPutAll: ' refers to '. - self to ifNotNil: [ aStream nextPutAll: self to name ] -] - -{ #category : #'*Famix-Implementation' } -FAMIXReference >> printOn: aStream [ - super printOn: aStream. - aStream nextPutAll: ' (Reference)' -] diff --git a/src-archive/Famix-Implementation/FAMIXSourcedEntity.extension.st b/src-archive/Famix-Implementation/FAMIXSourcedEntity.extension.st deleted file mode 100644 index aa23ed5cb..000000000 --- a/src-archive/Famix-Implementation/FAMIXSourcedEntity.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #FAMIXSourcedEntity } - -{ #category : #'*Famix-Implementation' } -FAMIXSourcedEntity >> isImplicitVariable [ - ^false -] diff --git a/src-archive/Famix-Implementation/FAMIXStructuralEntity.extension.st b/src-archive/Famix-Implementation/FAMIXStructuralEntity.extension.st deleted file mode 100644 index 3ff6346d7..000000000 --- a/src-archive/Famix-Implementation/FAMIXStructuralEntity.extension.st +++ /dev/null @@ -1,29 +0,0 @@ -Extension { #name : #FAMIXStructuralEntity } - -{ #category : #'*Famix-Implementation' } -FAMIXStructuralEntity >> globalAccesses [ - | attrclass globalAccesses | - attrclass := self belongsTo. - globalAccesses := Set new. - self - incomingAccesses do: - [:anAccess | - | ent | - ent := anAccess accessor. - ent belongsTo = attrclass ifFalse: [globalAccesses add: anAccess]]. - ^globalAccesses -] - -{ #category : #'*Famix-Implementation' } -FAMIXStructuralEntity >> localAccesses [ - | attrclass localAccesses | - attrclass := self belongsTo. - localAccesses := Set new. - self - incomingAccesses do: - [:anAccess | - | ent | - ent := anAccess accessor. - ent belongsTo = attrclass ifTrue: [localAccesses add: anAccess]]. - ^localAccesses -] diff --git a/src-archive/Famix-Implementation/FAMIXType.extension.st b/src-archive/Famix-Implementation/FAMIXType.extension.st deleted file mode 100644 index 5c1522894..000000000 --- a/src-archive/Famix-Implementation/FAMIXType.extension.st +++ /dev/null @@ -1,276 +0,0 @@ -Extension { #name : #FAMIXType } - -{ #category : #'*Famix-Implementation' } -FAMIXType >> addedMethods [ - | inheritedMethodNames | - inheritedMethodNames := self inheritedMethods - collect: [:each | each signature]. - ^self methods - reject: [:each | inheritedMethodNames includes: each signature] -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> allSubclassesDo: aBlock [ - self allSubclassesWithoutAliasesDo: aBlock. - self typeAliases do: [ :each | each allSubclassesWithoutAliasesDo: aBlock ] -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> allSubclassesWithoutAliasesDo: aBlock [ - self subInheritances do: [ :each | aBlock value: each subclass ]. - self subInheritances do: [ :each | each subclass allSubclassesDo: aBlock ] -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> allSuperclassesDo: aBlock [ - self allSuperclassesWithoutAliasesDo: aBlock. - self mooseModel sourceLanguage isC - ifTrue: [ self typeAliases do: [ :each | each allSuperclassesWithoutAliasesDo: aBlock ] ] -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> allSuperclassesWithoutAliasesDo: aBlock [ - superInheritances do: [:each | aBlock value: each superclass]. - superInheritances do: [:each | each superclass allSuperclassesDo: aBlock] -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> allTypeAliases [ - | all | - all := OrderedCollection withAll: self typeAliases. - self typeAliases do: [:each | all addAll: each allTypeAliases ]. - ^ all -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> anySuperclass [ - "Mircea: this used to return interfaces too. fixed now. - also added superclass that does the same thing" - - self - allSuperclassesDo: [ :each | - each isInterface - ifFalse: [ ^ each ] ]. - ^ nil -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> directSubclasses [ - "returns a collection with all subclasses of this class" - - ^ self subInheritances collect: [:each | each subclass] -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> directSuperclasses [ - "returns a collection with all superclasses of this class" - - ^ self superInheritances collect: [:each | each superclass] -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> implementationOf: signature [ - self withSuperclassesDo: [ :class | | found | - found := class methods - detect: [ :method | method signature = signature ] - ifNone: [ nil ]. - found ifNotNil: [ ^found ] ]. - ^ nil -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> implements: aString [ - ^ self methods - anySatisfy: [ :each | aString = each signature "was changed from match: for performances and because signature is case sensitive" ] -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> inheritedAttributes [ - | inheritedAttrs | - inheritedAttrs := OrderedCollection new. - self allSuperclassesDo: [:each | - each attributes do: [:attr | - attr isPrivate not ifTrue: [inheritedAttrs add: attr]]]. - ^ inheritedAttrs -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> inheritedMethods [ - | inheritedMethods | - inheritedMethods := OrderedCollection new. - self allSuperclassesDo: [:each | - each methodsDo: [:method | - method isPrivate not ifTrue: [inheritedMethods add: method]]]. - ^inheritedMethods -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> inheritedSignatures [ - | inheritedSignatures | - inheritedSignatures := Set new. - self superclassHierarchy do: [:each | - each methodsDo: [:method | - method isPrivate not ifTrue: [inheritedSignatures add: method signature]]]. - ^ inheritedSignatures -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> inheritedSignaturesToMethod [ - | inheritedSignaturesToMethod | - inheritedSignaturesToMethod := Dictionary new. - self allSuperclassesDo: [:each | - each methodsDo: [:method | - method isPrivate ifFalse: [ - inheritedSignaturesToMethod at: method signature ifAbsentPut: [method]]]]. - ^ inheritedSignaturesToMethod -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> inheritsFrom: aClass [ - self allSuperclassesDo: [:each | each = aClass ifTrue: [^true]]. - ^ false -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> isType [ - ^ true -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> methodsDo: aBlock [ - self methods do: aBlock -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> methodsGroup [ - - ^MooseGroup - withAll: self methods - withDescription: 'Methods from ' , self mooseName -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> mooseNameOn: aStream [ - | parent | - parent := self container. - parent ifNotNil: - [ - parent mooseNameOn: aStream. - aStream - nextPut: $:; - nextPut: $: ]. - self name ifNotNil: [aStream nextPutAll: self name] -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> parentScope [ - "Polymorphic alias to mimic GlobalVariable#parentScope and similar" - - ^ self container -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> printOn: aStream [ - | parent | - - self name ifNotNil: [ aStream nextPutAll: self name ]. - parent := self container. - parent ifNotNil: [ - aStream nextPutAll: ' in '. - parent mooseNameOn: aStream ]. - aStream - nextPutAll: ' ('; - nextPutAll: (self class name removePrefix: 'FAMIX'); - nextPutAll: ')' -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> realType [ - "All types except the alias ones are real" - ^ self -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> subclassHierarchy [ - | subclasses | - subclasses := OrderedCollection new. - self allSubclassesDo: [:each | subclasses add: each]. - ^ subclasses -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> subclassHierarchyGroup [ - - ^ MooseGroup - withAll: self subclassHierarchy asSet - withDescription: 'All subclasses of ' , self mooseName -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> superclassHierarchy [ - | superclasses | - superclasses := OrderedCollection new. - self allSuperclassesDo: [:each | superclasses add: each]. - ^ superclasses -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> superclassHierarchyGroup [ - - ^ MooseGroup - withAll: self superclassHierarchy asSet - withDescription: 'All superclasses of ' , self mooseName -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> understands: signature [ - "returns true if a class is able to respond to an invocation to aSignature on itself; false otherwise" - - self withSuperclassesDo: [:each | - (each implements: signature) ifTrue: [^true]]. - ^false -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> withSubclassHierarchy [ - ^ self subclassHierarchy - addFirst: self realType; - addAll: self realType allTypeAliases; - yourself -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> withSubclassHierarchyGroup [ - - ^ MooseGroup - withAll: (self subclassHierarchy asSet; addFirst: self; yourself) - withDescription: 'With all subclasses of ' , self mooseName -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> withSubclassesDo: aBlock [ - aBlock value: self. - self allSubclassesDo: aBlock -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> withSuperclassHierarchy [ - ^ self realType superclassHierarchy - addFirst: self realType; - addAll: self realType allTypeAliases; - yourself -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> withSuperclassHierarchyGroup [ - - ^ MooseGroup - withAll: self withSuperclassHierarchy asSet - withDescription: 'With all superclasses of ' , self mooseName -] - -{ #category : #'*Famix-Implementation' } -FAMIXType >> withSuperclassesDo: aBlock [ - aBlock value: self. - self allSuperclassesDo: aBlock -] diff --git a/src-archive/Famix-Implementation/FAMIXTypeAlias.extension.st b/src-archive/Famix-Implementation/FAMIXTypeAlias.extension.st deleted file mode 100644 index fc8591720..000000000 --- a/src-archive/Famix-Implementation/FAMIXTypeAlias.extension.st +++ /dev/null @@ -1,25 +0,0 @@ -Extension { #name : #FAMIXTypeAlias } - -{ #category : #'*Famix-Implementation' } -FAMIXTypeAlias >> allSubclassesDo: aBlock [ - "we override this traversal because we want to - traverse the real type as well" - self realType ifNotNil: [:a | a allSubclassesDo: aBlock]. - -] - -{ #category : #'*Famix-Implementation' } -FAMIXTypeAlias >> allSuperclassesDo: aBlock [ - "we override this traversal because we want to - traverse the aliased type as well" - self realType ifNotNil: [:a | a allSuperclassesDo: aBlock] -] - -{ #category : #'*Famix-Implementation' } -FAMIXTypeAlias >> realType [ - "The alias type is just an alias. - The real type is the one provided by the aliasedType " - ^ self aliasedType isNil - ifTrue: [nil] - ifFalse: [self aliasedType realType] -] diff --git a/src-archive/Famix-Implementation/package.st b/src-archive/Famix-Implementation/package.st deleted file mode 100644 index ee608087c..000000000 --- a/src-archive/Famix-Implementation/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Famix-Implementation' } diff --git a/src-archive/Famix-Java/FAMIXCaughtException.class.st b/src-archive/Famix-Java/FAMIXCaughtException.class.st deleted file mode 100644 index eca283c6d..000000000 --- a/src-archive/Famix-Java/FAMIXCaughtException.class.st +++ /dev/null @@ -1,30 +0,0 @@ -" -This is an exception that is explicitly handled by a method. For example, in Java it is an exception that appears in a catch statement. -" -Class { - #name : #FAMIXCaughtException, - #superclass : #FAMIXException, - #category : #'Famix-Java' -} - -{ #category : #meta } -FAMIXCaughtException class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXCaughtException >> definingMethod [ - - - ^ definingMethod -] - -{ #category : #accessing } -FAMIXCaughtException >> definingMethod: aMethod [ - definingMethod := FMMultivalueLink - on: self - update: #caughtExceptions - from: self definingMethod - to: aMethod -] diff --git a/src-archive/Famix-Java/FAMIXClass.extension.st b/src-archive/Famix-Java/FAMIXClass.extension.st deleted file mode 100644 index cfa66b644..000000000 --- a/src-archive/Famix-Java/FAMIXClass.extension.st +++ /dev/null @@ -1,27 +0,0 @@ -Extension { #name : #FAMIXClass } - -{ #category : #'*Famix-Java' } -FAMIXClass >> exceptions [ - - - - - ^ self privateState - attributeAt: #exceptions - ifAbsentPut: [ FMMultivalueLink on: self opposite: #exceptionClass: ] -] - -{ #category : #'*Famix-Java' } -FAMIXClass >> exceptions: values [ - (self privateState at: #exceptions) value: values -] - -{ #category : #'*Famix-Java' } -FAMIXClass >> isIgnored [ - - - - - ^ (self isAnnotatedWith: 'Ignore') -] diff --git a/src-archive/Famix-Java/FAMIXContainerEntity.extension.st b/src-archive/Famix-Java/FAMIXContainerEntity.extension.st deleted file mode 100644 index 082c04c57..000000000 --- a/src-archive/Famix-Java/FAMIXContainerEntity.extension.st +++ /dev/null @@ -1,23 +0,0 @@ -Extension { #name : #FAMIXContainerEntity } - -{ #category : #'*Famix-Java' } -FAMIXContainerEntity >> definedAnnotationTypes [ - - - - - - - ^ self privateState attributeAt: #definedAnnotationTypes ifAbsentPut: [ FMMultivalueLink on: self opposite: #container: ] -] - -{ #category : #'*Famix-Java' } -FAMIXContainerEntity >> definedAnnotationTypes: aValue [ - Halt if: [ aValue class = OrderedCollection ]. - self privateState attributeAt: #definedAnnotationTypes put: aValue -] - -{ #category : #'*Famix-Java' } -FAMIXContainerEntity >> mooseNameWithDots [ - ^ self mooseName ifNotNil: [ '.' join: (self mooseName substrings: '::') ] -] diff --git a/src-archive/Famix-Java/FAMIXDeclaredException.class.st b/src-archive/Famix-Java/FAMIXDeclaredException.class.st deleted file mode 100644 index 8ee6f1826..000000000 --- a/src-archive/Famix-Java/FAMIXDeclaredException.class.st +++ /dev/null @@ -1,30 +0,0 @@ -" -This is an exception explicitly declared as being thrown by a method. -" -Class { - #name : #FAMIXDeclaredException, - #superclass : #FAMIXException, - #category : #'Famix-Java' -} - -{ #category : #meta } -FAMIXDeclaredException class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXDeclaredException >> definingMethod [ - - - ^ definingMethod -] - -{ #category : #accessing } -FAMIXDeclaredException >> definingMethod: aMethod [ - definingMethod := FMMultivalueLink - on: self - update: #declaredExceptions - from: self definingMethod - to: aMethod -] diff --git a/src-archive/Famix-Java/FAMIXEnum.class.st b/src-archive/Famix-Java/FAMIXEnum.class.st deleted file mode 100644 index 549754638..000000000 --- a/src-archive/Famix-Java/FAMIXEnum.class.st +++ /dev/null @@ -1,49 +0,0 @@ -" -This models an enum in Java. - -For example, the following Java code defines an Enum with seven EnumValues. - -public enum Day { - SUNDAY, MONDAY, TUESDAY, WEDNESDAY, - THURSDAY, FRIDAY, SATURDAY -} - -Instance Variables: - values <(MultivalueLink of: FAMIXEnumValue)> -" -Class { - #name : #FAMIXEnum, - #superclass : #FAMIXType, - #instVars : [ - 'values' - ], - #category : #'Famix-Java' -} - -{ #category : #meta } -FAMIXEnum class >> annotation [ - - -] - -{ #category : #'initialize-release' } -FAMIXEnum >> initialize [ - super initialize. - values := FMNullMultivalueLink - on: self - opposite: #parentEnum: - selector: #values - -] - -{ #category : #accessing } -FAMIXEnum >> values [ - - - ^ values -] - -{ #category : #accessing } -FAMIXEnum >> values: anObject [ - values value: anObject -] diff --git a/src-archive/Famix-Java/FAMIXEnumValue.class.st b/src-archive/Famix-Java/FAMIXEnumValue.class.st deleted file mode 100644 index 3961b08c6..000000000 --- a/src-archive/Famix-Java/FAMIXEnumValue.class.st +++ /dev/null @@ -1,70 +0,0 @@ -" -It models the values defined in an FAMIXEnum. These are attributes of enums with default values. - -For example, the following Java code defines an Enum with seven EnumValues. - -public enum Day { - SUNDAY, MONDAY, TUESDAY, WEDNESDAY, - THURSDAY, FRIDAY, SATURDAY -} - -Instance Variables: - parentEnum <(MultivalueLink of: FAMIXEnum)> -" -Class { - #name : #FAMIXEnumValue, - #superclass : #FAMIXStructuralEntity, - #instVars : [ - 'parentEnum' - ], - #category : #'Famix-Java' -} - -{ #category : #meta } -FAMIXEnumValue class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXEnumValue >> belongsTo [ - - ^ self parentEnum -] - -{ #category : #printing } -FAMIXEnumValue >> mooseNameOn: aStream [ - (self belongsTo isNotNil and: [ self belongsTo name isNotNil ]) - ifTrue: [ self belongsTo mooseNameOn: aStream. - aStream << self mooseNameSeparator ]. - super mooseNameOn: aStream -] - -{ #category : #printing } -FAMIXEnumValue >> mooseNameSeparator [ - ^ '::' -] - -{ #category : #accessing } -FAMIXEnumValue >> parentEnum [ - - - - - ^ parentEnum -] - -{ #category : #accessing } -FAMIXEnumValue >> parentEnum: anEnum [ - parentEnum := FMMultivalueLink - on: self - update: #values - from: self parentEnum - to: anEnum -] - -{ #category : #accessing } -FAMIXEnumValue >> parentType [ - - ^ self parentEnum -] diff --git a/src-archive/Famix-Java/FAMIXException.class.st b/src-archive/Famix-Java/FAMIXException.class.st deleted file mode 100644 index 6e78dc389..000000000 --- a/src-archive/Famix-Java/FAMIXException.class.st +++ /dev/null @@ -1,41 +0,0 @@ -" -This is the abstract representation of an Exception. It is specific to Java. It points to an exceptionClass. The class of a FAMIXException is a normal FAMIXClass. -" -Class { - #name : #FAMIXException, - #superclass : #FAMIXEntity, - #instVars : [ - 'exceptionClass', - 'definingMethod' - ], - #category : #'Famix-Java' -} - -{ #category : #meta } -FAMIXException class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXException >> exceptionClass [ - - - ^ exceptionClass -] - -{ #category : #accessing } -FAMIXException >> exceptionClass: anObject [ - exceptionClass := FMMultivalueLink - on: self - update: #exceptions - from: self exceptionClass - to: anObject -] - -{ #category : #accessing } -FAMIXException >> mooseNameOn: aStream [ - aStream nextPutAll: (self class name removePrefix: 'FAMIX'). - aStream nextPut: $-. - self exceptionClass notNil ifTrue: [self exceptionClass mooseNameOn: aStream] -] diff --git a/src-archive/Famix-Java/FAMIXJavaSourceLanguage.class.st b/src-archive/Famix-Java/FAMIXJavaSourceLanguage.class.st deleted file mode 100644 index 7677490cb..000000000 --- a/src-archive/Famix-Java/FAMIXJavaSourceLanguage.class.st +++ /dev/null @@ -1,19 +0,0 @@ -" -FAMIXJavaSourceLanguage represents the Java programming language in which an entity is written. -" -Class { - #name : #FAMIXJavaSourceLanguage, - #superclass : #FAMIXSourceLanguage, - #category : #'Famix-Java' -} - -{ #category : #meta } -FAMIXJavaSourceLanguage class >> annotation [ - - -] - -{ #category : #testing } -FAMIXJavaSourceLanguage >> isJava [ - ^ true -] diff --git a/src-archive/Famix-Java/FAMIXMethod.extension.st b/src-archive/Famix-Java/FAMIXMethod.extension.st deleted file mode 100644 index c4a68574b..000000000 --- a/src-archive/Famix-Java/FAMIXMethod.extension.st +++ /dev/null @@ -1,61 +0,0 @@ -Extension { #name : #FAMIXMethod } - -{ #category : #'*Famix-Java' } -FAMIXMethod >> caughtExceptions [ - - - - ^ self privateState attributeAt: #caughtExceptions - ifAbsentPut: [FMMultivalueLink on: self opposite: #definingMethod:] -] - -{ #category : #'*Famix-Java' } -FAMIXMethod >> declaredExceptions [ - - - - ^ self privateState attributeAt: #declaredExceptions - ifAbsentPut: [FMMultivalueLink on: self opposite: #definingMethod:] -] - -{ #category : #'*Famix-Java' } -FAMIXMethod >> hasInnerClassImplementingMethods [ - ^ self innerClassesImplementingMethods isNotEmpty -] - -{ #category : #'*Famix-Java' } -FAMIXMethod >> implementMethod [ - ^ self belongsTo implementedInterfaces - collect: [ :each | each implementationOf: self signature ] -] - -{ #category : #'*Famix-Java' } -FAMIXMethod >> innerClassesImplementingMethods [ - ^ self types select: [ :el | el methods anySatisfy: [ :m | m isStub not ] ] -] - -{ #category : #'*Famix-Java' } -FAMIXMethod >> isImplementing [ - - - - ^ self belongsTo directSuperclasses - anySatisfy: [ :each | each isInterface and: [ each understands: self signature ] ] -] - -{ #category : #'*Famix-Java' } -FAMIXMethod >> isJUnit4Test [ - - - - ^ self isAnnotatedWith: 'Test' -] - -{ #category : #'*Famix-Java' } -FAMIXMethod >> thrownExceptions [ - - - - ^ self privateState attributeAt: #thrownExceptions - ifAbsentPut: [FMMultivalueLink on: self opposite: #definingMethod:] -] diff --git a/src-archive/Famix-Java/FAMIXNamedEntity.extension.st b/src-archive/Famix-Java/FAMIXNamedEntity.extension.st deleted file mode 100644 index 0115a1cff..000000000 --- a/src-archive/Famix-Java/FAMIXNamedEntity.extension.st +++ /dev/null @@ -1,25 +0,0 @@ -Extension { #name : #FAMIXNamedEntity } - -{ #category : #'*Famix-Java' } -FAMIXNamedEntity >> annotationInstanceNamed: anAnnotationName [ - ^ self - annotationInstanceNamed: anAnnotationName - ifAbsent: [ ] -] - -{ #category : #'*Famix-Java' } -FAMIXNamedEntity >> annotationInstanceNamed: anAnnotationName ifAbsent: aBlock [ - ^ self annotationInstances - detect: [ :each | each annotationType name asSymbol = anAnnotationName asSymbol ] - ifNone: aBlock -] - -{ #category : #'*Famix-Java' } -FAMIXNamedEntity >> isAnnotated [ - ^ self annotationInstances notEmpty -] - -{ #category : #'*Famix-Java' } -FAMIXNamedEntity >> isAnnotatedWith: anAnnotationName [ - ^ self annotationInstances contains: [ :each | each annotationType name asSymbol = anAnnotationName asSymbol ] -] diff --git a/src-archive/Famix-Java/FAMIXParameterType.class.st b/src-archive/Famix-Java/FAMIXParameterType.class.st deleted file mode 100644 index 813cfbe37..000000000 --- a/src-archive/Famix-Java/FAMIXParameterType.class.st +++ /dev/null @@ -1,26 +0,0 @@ -" -ParameterType represents the symbolic type used in parameterizable classes. This is a FAMIXType. - -Example: -public class AClass { -... -} - -Where AClass is a ParameterizableClass. A, B and C are ParameterType of AClass. -" -Class { - #name : #FAMIXParameterType, - #superclass : #FAMIXType, - #category : #'Famix-Java' -} - -{ #category : #meta } -FAMIXParameterType class >> annotation [ - - -] - -{ #category : #testing } -FAMIXParameterType >> isParameterType [ - ^ true -] diff --git a/src-archive/Famix-Java/FAMIXParameterizableClass.class.st b/src-archive/Famix-Java/FAMIXParameterizableClass.class.st deleted file mode 100644 index e220b4546..000000000 --- a/src-archive/Famix-Java/FAMIXParameterizableClass.class.st +++ /dev/null @@ -1,65 +0,0 @@ -" -ParameterizableClass represents the definition of a generic class with parameters. The parameters of the entity are modeled as ParameterType. - -Example: -public class AClass { -... -} - -Where AClass is a ParameterizableClass. A, B and C are ParameterType of AClass. -" -Class { - #name : #FAMIXParameterizableClass, - #superclass : #FAMIXClass, - #instVars : [ - 'parameterizedTypes' - ], - #category : #'Famix-Java' -} - -{ #category : #meta } -FAMIXParameterizableClass class >> annotation [ - - -] - -{ #category : #initialization } -FAMIXParameterizableClass >> initialize [ - super initialize. - parameterizedTypes := FMMultivalueLink - on: self - opposite: #parameterizableClass: -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXParameterizableClass >> parameterizedTypes [ - - - ^ parameterizedTypes -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXParameterizableClass >> parameterizedTypes: aCollection [ - parameterizedTypes value: aCollection -] - -{ #category : #accessing } -FAMIXParameterizableClass >> parameters [ - - - - ^self types select: [:each | each isParameterType] -] - -{ #category : #accessing } -FAMIXParameterizableClass >> parameters: aCollection [ - - self privateState attributeAt: #parameters put: aCollection -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXParameterizableClass >> yourScope [ - - ^ #typeScope -] - diff --git a/src-archive/Famix-Java/FAMIXParameterizedType.class.st b/src-archive/Famix-Java/FAMIXParameterizedType.class.st deleted file mode 100644 index fe55faccf..000000000 --- a/src-archive/Famix-Java/FAMIXParameterizedType.class.st +++ /dev/null @@ -1,111 +0,0 @@ -" -FAMIXParameterizedType represents a type with arguments. So, it is an instantiation for the use of FAMIXParameterizableClass. It can appear as a type of an attribute, a type of a local variable, a parameter of a method, a return of a method, etc. -Example: - -... -public Map anAttribute; -... - -Where Map is the FAMIXParameterizedType of anAttribute. String and Collection are arguments. Map is the parameterizableClass. -" -Class { - #name : #FAMIXParameterizedType, - #superclass : #FAMIXType, - #instVars : [ - 'arguments', - 'parameterizableClass' - ], - #category : #'Famix-Java' -} - -{ #category : #meta } -FAMIXParameterizedType class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXParameterizedType >> allSubclassesDo: aBlock [ - "we override this traversal because we want to - traverse the parameter type" - - self parameterizableClass ifNotNil: [ :a | a withSubclassesDo: aBlock ] -] - -{ #category : #accessing } -FAMIXParameterizedType >> allSuperclassesDo: aBlock [ - "we override this traversal because we want to - traverse the parameter type" - - self parameterizableClass ifNotNil: [ :a | a withSuperclassesDo: aBlock ] -] - -{ #category : #accessing } -FAMIXParameterizedType >> arguments [ - - - - ^ arguments -] - -{ #category : #accessing } -FAMIXParameterizedType >> arguments: aCollection [ - arguments value: aCollection. - self resetMooseName -] - -{ #category : #'initialize-release' } -FAMIXParameterizedType >> initialize [ - super initialize. - arguments := FMMultiMultivalueLink on: self opposite: #argumentsInParameterizedTypes -] - -{ #category : #testing } -FAMIXParameterizedType >> isParameterizedType [ - ^ true -] - -{ #category : #printing } -FAMIXParameterizedType >> mooseNameOn: aStream [ - self parameterizableClass notNil - ifTrue: [self parameterizableClass mooseNameOn: aStream]. - aStream nextPut: $<. - self arguments - do: [:each | each mooseNameOn: aStream] - separatedBy: [aStream nextPut: $,]. - aStream nextPut: $>. - -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXParameterizedType >> namespaceScope [ - "we ask the namespaceScope of the parameterizable class" - - ^ self parameterizableClass ifNotNil: [ - self parameterizableClass namespaceScope ] -] - -{ #category : #accessing } -FAMIXParameterizedType >> parameterizableClass [ - - - - ^ parameterizableClass -] - -{ #category : #accessing } -FAMIXParameterizedType >> parameterizableClass: aParameterizableClass [ - - parameterizableClass := FMMultivalueLink - on: self - update: #parameterizedTypes - from: self parameterizableClass - to: aParameterizableClass. - self resetMooseName -] - -{ #category : #'moosechef-scoping-filtering' } -FAMIXParameterizedType >> yourScope [ - - ^ #typeScope -] diff --git a/src-archive/Famix-Java/FAMIXSourceLanguage.extension.st b/src-archive/Famix-Java/FAMIXSourceLanguage.extension.st deleted file mode 100644 index 3b49eb2fa..000000000 --- a/src-archive/Famix-Java/FAMIXSourceLanguage.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #FAMIXSourceLanguage } - -{ #category : #'*Famix-Java' } -FAMIXSourceLanguage >> isJava [ - ^ false -] diff --git a/src-archive/Famix-Java/FAMIXThrownException.class.st b/src-archive/Famix-Java/FAMIXThrownException.class.st deleted file mode 100644 index 9620f28f6..000000000 --- a/src-archive/Famix-Java/FAMIXThrownException.class.st +++ /dev/null @@ -1,30 +0,0 @@ -" -This is an exception explicitly thrown by a method. -" -Class { - #name : #FAMIXThrownException, - #superclass : #FAMIXException, - #category : #'Famix-Java' -} - -{ #category : #meta } -FAMIXThrownException class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXThrownException >> definingMethod [ - - - ^ definingMethod -] - -{ #category : #accessing } -FAMIXThrownException >> definingMethod: aMethod [ - definingMethod := FMMultivalueLink - on: self - update: #thrownExceptions - from: self definingMethod - to: aMethod -] diff --git a/src-archive/Famix-Java/FAMIXType.extension.st b/src-archive/Famix-Java/FAMIXType.extension.st deleted file mode 100644 index ee4d01fbf..000000000 --- a/src-archive/Famix-Java/FAMIXType.extension.st +++ /dev/null @@ -1,72 +0,0 @@ -Extension { #name : #FAMIXType } - -{ #category : #'*Famix-Java' } -FAMIXType >> argumentsInParameterizedTypes [ - - - - - ^ self privateState - attributeAt: #argumentsInParameterizedTypes - ifAbsentPut: [ - FMMultiMultivalueLink on: self opposite: #arguments ] -] - -{ #category : #'*Famix-Java' } -FAMIXType >> argumentsInParameterizedTypes: aCollection [ - ^ self argumentsInParameterizedTypes value: aCollection -] - -{ #category : #'*Famix-Java' } -FAMIXType >> implementedInterfaces [ - - ^ self directSuperclasses select: #isInterface -] - -{ #category : #'*Famix-Java' } -FAMIXType >> isAnonymousClass [ - ^ self container notNil and: [ - self container isMethod or: [ - self name isAllDigits or: [ - '*_anonymous_*' match: self name ]] ] -] - -{ #category : #'*Famix-Java' } -FAMIXType >> isInnerClass [ - - - - ^ self container ifNotNil: [ :c | c isNamespace not ] ifNil: [ false ] -] - -{ #category : #'*Famix-Java' } -FAMIXType >> isJUnit3TestCase [ - ^ self superclassHierarchy anySatisfy: [:each | each mooseName = #'junit::framework::TestCase'] -] - -{ #category : #'*Famix-Java' } -FAMIXType >> isJUnit4TestCase [ - - - - ^ self methods anySatisfy: [ :m | m isJUnit4Test ] -] - -{ #category : #'*Famix-Java' } -FAMIXType >> isParameterType [ - ^ false -] - -{ #category : #'*Famix-Java' } -FAMIXType >> isParameterizedType [ - ^ false -] - -{ #category : #'*Famix-Java' } -FAMIXType >> isTestCase [ - - - - ^ self isJUnit3TestCase or: [ self isJUnit4TestCase ] -] diff --git a/src-archive/Famix-Java/MooseAbstractGroup.extension.st b/src-archive/Famix-Java/MooseAbstractGroup.extension.st deleted file mode 100644 index f19c35e7d..000000000 --- a/src-archive/Famix-Java/MooseAbstractGroup.extension.st +++ /dev/null @@ -1,93 +0,0 @@ -Extension { #name : #MooseAbstractGroup } - -{ #category : #'*Famix-Java' } -MooseAbstractGroup >> allAnnotationInstances [ - - - ^ self allWithType: FamixAnnotationInstance -] - -{ #category : #'*Famix-Java' } -MooseAbstractGroup >> allAnnotationTypes [ - - - ^ self allWithType: FamixAnnotationType -] - -{ #category : #'*Famix-Java' } -MooseAbstractGroup >> allCaughtExceptions [ - - - ^ self allWithType: FamixCaughtException -] - -{ #category : #'*Famix-Java' } -MooseAbstractGroup >> allDeclaredExceptions [ - - - ^ self allWithType: FAMIXDeclaredException -] - -{ #category : #'*Famix-Java' } -MooseAbstractGroup >> allEnumValues [ - - - ^ self allWithType: FAMIXEnumValue -] - -{ #category : #'*Famix-Java' } -MooseAbstractGroup >> allEnums [ - - - ^ self allWithType: FAMIXEnum -] - -{ #category : #'*Famix-Java' } -MooseAbstractGroup >> allParameterTypes [ - - - ^ self allWithType: FamixParameterType -] - -{ #category : #'*Famix-Java' } -MooseAbstractGroup >> allParameterizableClasses [ - - - ^ self allWithType: FamixParameterizableClass -] - -{ #category : #'*Famix-Java' } -MooseAbstractGroup >> allParameterizedTypes [ - - - ^ self allWithType: FamixParameterizedType -] - -{ #category : #'*Famix-Java' } -MooseAbstractGroup >> allTestClasses [ - - - ^ self allModelClasses select: #isTestCase -] - -{ #category : #'*Famix-Java' } -MooseAbstractGroup >> allThrownExceptions [ - - - ^ self allWithType: FamixThrownException -] - -{ #category : #'*Famix-Java' } -MooseAbstractGroup >> javaEntityNamed: aSymbol [ - - ^self - javaEntityNamed: aSymbol - ifAbsent: [nil] -] - -{ #category : #'*Famix-Java' } -MooseAbstractGroup >> javaEntityNamed: aMooseName ifAbsent: aBlock [ - ^ self entityStorage - at: aMooseName - ifAbsent: [ self entityStorage at: '::' , aMooseName ifAbsent: aBlock ] -] diff --git a/src-archive/Famix-Java/MooseModel.extension.st b/src-archive/Famix-Java/MooseModel.extension.st deleted file mode 100644 index a276ec1cb..000000000 --- a/src-archive/Famix-Java/MooseModel.extension.st +++ /dev/null @@ -1,38 +0,0 @@ -Extension { #name : #MooseModel } - -{ #category : #'*Famix-Java' } -MooseModel >> inferNamespaceParentsBasedOnNames [ - - | parent parentNameSize currentPosition parentName namespaces | - namespaces := self allNamespaces. - MooseCustomTask new with: [:task | - namespaces do: [ :each | - currentPosition := 1. - each name: (each name copyReplaceAll: '.' with: '::'). - [ currentPosition := each name indexOf: $: startingAt: currentPosition. - currentPosition isZero not ] whileTrue: [ - parentName := (each name copyFrom: 1 to: currentPosition - 1) asSymbol. - namespaces - detect: [ :x | parentName = x mooseName ] - ifNone: [ - | newNamespace | - newNamespace := FamixNamespace new name: parentName. - namespaces add: newNamespace. - self add: newNamespace ]. - currentPosition := currentPosition + 2 ]. - task increment]. - namespaces do: [ :each | - each belongsTo ifNil: [ - parentNameSize := (each name lastIndexOf: $:) - 2. - parentNameSize > 0 ifTrue: [ - parent := namespaces detect: [ :x | - (each name copyFrom: 1 to: parentNameSize) asSymbol = x mooseName ] - ifNone: [ nil ]. - parent ifNotNil: [ - each name: (each name copyFrom: parentNameSize + 3 to: each name size) asSymbol. - each parentScope: parent ] ] ]. - task increment] - ] description: 'Infer namespace parents based on names' length: (namespaces size * 2); - runWithProgress. - ^ self allNamespaces -] diff --git a/src-archive/Famix-Java/package.st b/src-archive/Famix-Java/package.st deleted file mode 100644 index aba981f9f..000000000 --- a/src-archive/Famix-Java/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Famix-Java' } diff --git a/src-archive/Famix-Smalltalk/FAMIXAttribute.extension.st b/src-archive/Famix-Smalltalk/FAMIXAttribute.extension.st deleted file mode 100644 index 1f9697a75..000000000 --- a/src-archive/Famix-Smalltalk/FAMIXAttribute.extension.st +++ /dev/null @@ -1,25 +0,0 @@ -Extension { #name : #FAMIXAttribute } - -{ #category : #'*Famix-Smalltalk' } -FAMIXAttribute >> beInstanceVariable [ - - self propertyNamed: #sharedVariable put: false -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXAttribute >> beProtected [ - ^ self isProtected: true -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXAttribute >> beSharedVariable [ - - self propertyNamed: #sharedVariable put: true -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXAttribute >> isSharedVariable [ - - "^ self propertyNamed: #sharedVariable ifAbsent: [false] " - ^ self propertyNamed: #sharedVariable ifNil: [false] -] diff --git a/src-archive/Famix-Smalltalk/FAMIXClass.extension.st b/src-archive/Famix-Smalltalk/FAMIXClass.extension.st deleted file mode 100644 index 1338423c9..000000000 --- a/src-archive/Famix-Smalltalk/FAMIXClass.extension.st +++ /dev/null @@ -1,14 +0,0 @@ -Extension { #name : #FAMIXClass } - -{ #category : #'*Famix-Smalltalk' } -FAMIXClass >> sourceText [ - self flag: 'This code should be delegated to the FAMIXPharoAnchor'. - ^ self sourceLanguage isSmalltalk - ifTrue: [ - self mooseName, - Character cr asSymbol asString, - (Character cr asSymbol asString join: (self attributes collect: #name)), - Character cr asSymbol asString, - (Character cr asSymbol asString join: (self methods collect: [:each | Character cr asSymbol asString, each sourceText])). - ] ifFalse: [ super sourceText ] -] diff --git a/src-archive/Famix-Smalltalk/FAMIXMethod.extension.st b/src-archive/Famix-Smalltalk/FAMIXMethod.extension.st deleted file mode 100644 index 35ab305a1..000000000 --- a/src-archive/Famix-Smalltalk/FAMIXMethod.extension.st +++ /dev/null @@ -1,77 +0,0 @@ -Extension { #name : #FAMIXMethod } - -{ #category : #'*Famix-Smalltalk' } -FAMIXMethod >> category [ - - - - - ^ self privateState attributeAt: #category ifAbsentPut: [ nil ] -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXMethod >> category: aString [ - - self privateState attributeAt: #category put: aString - - -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXMethod >> isCalledInternally [ - ^self incomingInvocations - anySatisfy: - [:each | each sender isMethod and: [each sender belongsTo == self belongsTo]] -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXMethod >> isExtension [ - ^self belongsTo packageScope ~~ self packageScope. -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXMethod >> isInitializer [ - ^ self mooseModel isSmalltalk - ifTrue: [ (('*initialize*' match: self category) or: [ '*initialize*' match: self name ]) or: [ self isConstructor ] ] - ifFalse: [ self isConstructor ] -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXMethod >> isInternalImplementation [ - - - - - ^ (self isInitializer not and: [ self isCalledInternally ]) - and: [ self isPureAccessor not ] -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXMethod >> sourceText [ - self flag: 'This code should be delegated to the FAMIXPharoAnchor'. - ^ (self sourceLanguage isSmalltalk and: [ self class shouldSearchForSmalltalkCodeInImage ]) - ifTrue: [ [ | class | - "take the normal class" - class := Smalltalk at: self parentType instanceSide name asSymbol. - self hasClassScope - ifFalse: [ class sourceCodeAt: self name asSymbol ] - ifTrue: [ class class sourceCodeAt: self name asSymbol ] "dispatch on class or metaclass depending on method scope" ] - on: Error - do: [ super sourceText ] "probably class is not in the system" ] - ifFalse: [ super sourceText ] -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXMethod >> timeStamp [ - - - - - ^ self privateState attributeAt: #timeStamp ifAbsentPut: [''] -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXMethod >> timeStamp: aTimeStamp [ - - self privateState attributeAt: #timeStamp put: aTimeStamp -] diff --git a/src-archive/Famix-Smalltalk/FAMIXPackage.extension.st b/src-archive/Famix-Smalltalk/FAMIXPackage.extension.st deleted file mode 100644 index aa71b0c6e..000000000 --- a/src-archive/Famix-Smalltalk/FAMIXPackage.extension.st +++ /dev/null @@ -1,100 +0,0 @@ -Extension { #name : #FAMIXPackage } - -{ #category : #'*Famix-Smalltalk' } -FAMIXPackage >> createPackagesFromCategories [ - - "Inspired by the Moose Smalltalk Category importer" - | cat famixCat | - - self localClasses do:[ :class | - cat := (Smalltalk at: class instanceSide name) category. - famixCat := self mooseModel allPackages detect: [:each | each mooseName = cat] ifNone: [nil]. - famixCat ifNil: [ - famixCat := self mooseModel add: (FamixPackage new name: cat; isStub: true) - ]. - class isStub - ifFalse: [ famixCat isStub: false ]. - class localMethods do:[:aMethod | - aMethod parentPackage: famixCat ]. - class parentPackage: famixCat. - ]. - self privateState flushGroups. - self mooseModel cacheMooseGroups -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXPackage >> definedMethods [ - "alias" - - ^ self localMethods -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXPackage >> extendedClasses [ - "select all classes extended in this package" - - ^ self privateState cacheAt: #extendedClasses - ifAbsentPut: [ self classes select: [ :c| c isExtended ] ] - -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXPackage >> extendedClassesGroup [ - - - ^ FAMIXClassGroup - withAll: self extendedClasses - withDescription: 'Extended classes in package ', self name -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXPackage >> extensionClasses [ - "select all classes extended by this package" - - ^ self privateState - cacheAt: #extensionClasses - ifAbsentPut: [ self extensionMethods collectAsSet: [ :method | method parentType ] ] -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXPackage >> extensionClassesGroup [ - - - ^ FAMIXClassGroup - withAll: self extensionClasses - withDescription: 'Classes extended by package', self name -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXPackage >> extensionMethods [ - "select all class extensions made by this package" - - ^ self privateState - cacheAt: #extensionMethods - ifAbsentPut: [ childNamedEntities select: [ :child | child isMethod ]] -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXPackage >> localClasses [ - "select all local classes. Just an alias" - - ^ self classes -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXPackage >> localClassesGroup [ - - - ^ FAMIXClassGroup - withAll: self localClasses - withDescription: 'Local classes' -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXPackage >> localMethods [ - "select all local methods" - - ^ self privateState - cacheAt: #localMethods - ifAbsentPut: [ self classes flatCollect: [:c | c localMethods ]] -] diff --git a/src-archive/Famix-Smalltalk/FAMIXSmalltalkMonticelloSourceLanguage.class.st b/src-archive/Famix-Smalltalk/FAMIXSmalltalkMonticelloSourceLanguage.class.st deleted file mode 100644 index bc0788892..000000000 --- a/src-archive/Famix-Smalltalk/FAMIXSmalltalkMonticelloSourceLanguage.class.st +++ /dev/null @@ -1,14 +0,0 @@ -" -FAMIXSmalltalkMonticelloSourceLanguage represents the fact that the language is Smalltalk (extracted from Monticello). -" -Class { - #name : #FAMIXSmalltalkMonticelloSourceLanguage, - #superclass : #FAMIXSourceLanguage, - #category : #'Famix-Smalltalk' -} - -{ #category : #meta } -FAMIXSmalltalkMonticelloSourceLanguage class >> annotation [ - - -] diff --git a/src-archive/Famix-Smalltalk/FAMIXSmalltalkSourceLanguage.class.st b/src-archive/Famix-Smalltalk/FAMIXSmalltalkSourceLanguage.class.st deleted file mode 100644 index 3934bbfe0..000000000 --- a/src-archive/Famix-Smalltalk/FAMIXSmalltalkSourceLanguage.class.st +++ /dev/null @@ -1,19 +0,0 @@ -" -FAMIXSmalltalkSourceLanguage represents the Smalltalk language. -" -Class { - #name : #FAMIXSmalltalkSourceLanguage, - #superclass : #FAMIXSourceLanguage, - #category : #'Famix-Smalltalk' -} - -{ #category : #meta } -FAMIXSmalltalkSourceLanguage class >> annotation [ - - -] - -{ #category : #testing } -FAMIXSmalltalkSourceLanguage >> isSmalltalk [ - ^ true -] diff --git a/src-archive/Famix-Smalltalk/FAMIXSourceLanguage.extension.st b/src-archive/Famix-Smalltalk/FAMIXSourceLanguage.extension.st deleted file mode 100644 index 359905d22..000000000 --- a/src-archive/Famix-Smalltalk/FAMIXSourceLanguage.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #FAMIXSourceLanguage } - -{ #category : #'*famix-smalltalk' } -FAMIXSourceLanguage >> isSmalltalk [ - ^ false -] diff --git a/src-archive/Famix-Smalltalk/FAMIXType.extension.st b/src-archive/Famix-Smalltalk/FAMIXType.extension.st deleted file mode 100644 index be53549cc..000000000 --- a/src-archive/Famix-Smalltalk/FAMIXType.extension.st +++ /dev/null @@ -1,91 +0,0 @@ -Extension { #name : #FAMIXType } - -{ #category : #'*Famix-Smalltalk' } -FAMIXType >> classSide [ - ^self isClassSide - ifFalse: - [self mooseModel allClasses - entityNamed: (self mooseName , '_class') asSymbol] - ifTrue: [self] -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXType >> extendedInPackages [ - - ^ self privateState cacheAt: #extendedInPackages - ifAbsentPut: [ self extendedMethods collectAsSet: [ :m| m packageScope ] ] - - -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXType >> extendedMethods [ - "select methods which are class extensions in this class" - - ^ self privateState cacheAt: #extendedMethods - ifAbsentPut: [ self methods select: [ :m| m isExtension ] ] -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXType >> instanceSide [ - ^self isClassSide - ifTrue: - [self mooseModel allClasses - entityNamed: (self mooseName removeSuffix: '_class') asSymbol] - ifFalse: [self] -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXType >> isClassSide [ - "Kind of a hack. Uses the FAMIX2 Smalltalk naming convention that every Smalltalk - metaclass has _class appended to the classname of the class it is a metaclass of." - - ^'*_class' match: self name -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXType >> isExtended [ - - ^ self methods anySatisfy: [ :m| m isExtension ] -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXType >> isInstanceSide [ - ^self isClassSide not -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXType >> isSUnitTestCase [ - self allSuperclassesDo: [:each | each name = 'TestCase' ifTrue: [^ true] ]. - ^ false -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXType >> localMethods [ - "select all locally defined methods" - - ^ self privateState cacheAt: #localMethods - ifAbsentPut: [ self methods reject: [ :m| m isExtension ] ] -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXType >> numberOfMethodProtocols [ - - - - - ^self - lookUpPropertyNamed: #numberOfMethodProtocols - computedAs: [((self methods collect: [:each | each category]) reject: #isNil) asSet size] -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXType >> numberOfMethodProtocols: aNumber [ - - self privateState propertyAt: #numberOfMethodProtocols put: aNumber -] - -{ #category : #'*Famix-Smalltalk' } -FAMIXType >> superclass [ - ^self anySuperclass -] diff --git a/src-archive/Famix-Smalltalk/FamixSmalltalkReadme.class.st b/src-archive/Famix-Smalltalk/FamixSmalltalkReadme.class.st deleted file mode 100644 index c59916c26..000000000 --- a/src-archive/Famix-Smalltalk/FamixSmalltalkReadme.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -This package holds the Smalltalk specific extensions of FAMIX -" -Class { - #name : #FamixSmalltalkReadme, - #superclass : #Object, - #category : #'Famix-Smalltalk' -} diff --git a/src-archive/Famix-Smalltalk/FmxNGPackage.extension.st b/src-archive/Famix-Smalltalk/FmxNGPackage.extension.st deleted file mode 100644 index fbd0ab331..000000000 --- a/src-archive/Famix-Smalltalk/FmxNGPackage.extension.st +++ /dev/null @@ -1,100 +0,0 @@ -Extension { #name : #FamixPackage } - -{ #category : #'*Famix-Smalltalk' } -FamixPackage >> createPackagesFromCategories [ - - "Inspired by the Moose Smalltalk Category importer" - | cat famixCat | - - self localClasses do:[ :class | - cat := (Smalltalk at: class instanceSide name) category. - famixCat := self mooseModel allPackages detect: [:each | each mooseName = cat] ifNone: [nil]. - famixCat ifNil: [ - famixCat := self mooseModel add: (FamixPackage new name: cat; stub: true) - ]. - class isStub - ifFalse: [ famixCat stub: false ]. - class localMethods do:[:aMethod | - aMethod parentPackage: famixCat ]. - class parentPackage: famixCat. - ]. - self privateState flushGroups. - self mooseModel cacheMooseGroups -] - -{ #category : #'*Famix-Smalltalk' } -FamixPackage >> definedMethods [ - "alias" - - ^ self localMethods -] - -{ #category : #'*Famix-Smalltalk' } -FamixPackage >> extendedClasses [ - "select all classes extended in this package" - - ^ self privateState cacheAt: #extendedClasses - ifAbsentPut: [ self classes select: [ :c| c isExtended ] ] - -] - -{ #category : #'*Famix-Smalltalk' } -FamixPackage >> extendedClassesGroup [ - - - ^ FAMIXClassGroup - withAll: self extendedClasses - withDescription: 'Extended classes in package ', self name -] - -{ #category : #'*Famix-Smalltalk' } -FamixPackage >> extensionClasses [ - "select all classes extended by this package" - - ^ self privateState - cacheAt: #extensionClasses - ifAbsentPut: [ self extensionMethods collectAsSet: [ :method | method parentType ] ] -] - -{ #category : #'*Famix-Smalltalk' } -FamixPackage >> extensionClassesGroup [ - - - ^ FAMIXClassGroup - withAll: self extensionClasses - withDescription: 'Classes extended by package', self name -] - -{ #category : #'*Famix-Smalltalk' } -FamixPackage >> extensionMethods [ - "select all class extensions made by this package" - - ^ self privateState - cacheAt: #extensionMethods - ifAbsentPut: [ self childEntities select: [ :child | child isMethod ]] -] - -{ #category : #'*Famix-Smalltalk' } -FamixPackage >> localClasses [ - "select all local classes. Just an alias" - - ^ self classes -] - -{ #category : #'*Famix-Smalltalk' } -FamixPackage >> localClassesGroup [ - - - ^ FAMIXClassGroup - withAll: self localClasses - withDescription: 'Local classes' -] - -{ #category : #'*Famix-Smalltalk' } -FamixPackage >> localMethods [ - "select all local methods" - - ^ self privateState - cacheAt: #localMethods - ifAbsentPut: [ self classes flatCollect: [:c | c localMethods ]] -] diff --git a/src-archive/Famix-Smalltalk/package.st b/src-archive/Famix-Smalltalk/package.st deleted file mode 100644 index 1914a5eca..000000000 --- a/src-archive/Famix-Smalltalk/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Famix-Smalltalk' } diff --git a/src-archive/Famix-SourceAnchor/Character.extension.st b/src-archive/Famix-SourceAnchor/Character.extension.st deleted file mode 100644 index c6a442544..000000000 --- a/src-archive/Famix-SourceAnchor/Character.extension.st +++ /dev/null @@ -1,11 +0,0 @@ -Extension { #name : #Character } - -{ #category : #'*Famix-SourceAnchor' } -Character >> isCr [ - ^ self asInteger = 13 -] - -{ #category : #'*Famix-SourceAnchor' } -Character >> isLf [ - ^ self asInteger = 10 -] diff --git a/src-archive/Famix-SourceAnchor/FAMIXAbstractFileAnchor.class.st b/src-archive/Famix-SourceAnchor/FAMIXAbstractFileAnchor.class.st deleted file mode 100644 index a7f01b0be..000000000 --- a/src-archive/Famix-SourceAnchor/FAMIXAbstractFileAnchor.class.st +++ /dev/null @@ -1,115 +0,0 @@ -" -This offers a source anchor that connects a sourced entity to a file through a relative path stored in the fileName. -Subclasses are responsible for recording the start and end positions in the file -" -Class { - #name : #FAMIXAbstractFileAnchor, - #superclass : #FAMIXSourceAnchor, - #instVars : [ - 'fileName', - 'encoding' - ], - #category : #'Famix-SourceAnchor' -} - -{ #category : #meta } -FAMIXAbstractFileAnchor class >> annotation [ - - -] - -{ #category : #comparing } -FAMIXAbstractFileAnchor >> <= aFileAnchor [ - ^ self fileName <= aFileAnchor fileName -] - -{ #category : #accessing } -FAMIXAbstractFileAnchor >> completeText [ - self sourcesAreReadable ifFalse: [ ^ '' ]. - - ^ self fileReference - binaryReadStreamDo: - [ :in | (ZnCharacterReadStream on: in encoding: self encoding) upToEnd ] -] - -{ #category : #encoding } -FAMIXAbstractFileAnchor >> detectEncoding [ - self fileReference exists - ifFalse: [ ^ nil ]. - ^ [ self fileReference binaryReadStreamDo: [ :in | (ZnCharacterEncoder detectEncoding: in upToEnd) identifier ] ] - on: ZnCharacterEncodingError - do: [ nil ] -] - -{ #category : #accessing } -FAMIXAbstractFileAnchor >> encoding [ - - - ^ encoding ifNil: [ encoding := self detectEncoding ] -] - -{ #category : #accessing } -FAMIXAbstractFileAnchor >> encoding: aString [ - encoding := aString -] - -{ #category : #accessing } -FAMIXAbstractFileAnchor >> fileName [ - - - ^ fileName -] - -{ #category : #accessing } -FAMIXAbstractFileAnchor >> fileName: aFileName [ - fileName := aFileName copyReplaceAll: '\' with: '/'. -] - -{ #category : #accessing } -FAMIXAbstractFileAnchor >> fileReference [ - ^ self rootFolder asFileReference resolve: self fileName -] - -{ #category : #testing } -FAMIXAbstractFileAnchor >> hasSourceText [ - ^ self completeText notEmpty -] - -{ #category : #testing } -FAMIXAbstractFileAnchor >> isFile [ - ^ true -] - -{ #category : #accessing } -FAMIXAbstractFileAnchor >> lineCount [ - ^ self hasSourceText - ifTrue: [ self sourceText lineCount ] - ifFalse: [ self notExistentMetricValue ] - -] - -{ #category : #printing } -FAMIXAbstractFileAnchor >> mooseNameOn: aStream [ - aStream nextPutAll: self fileName asString -] - -{ #category : #private } -FAMIXAbstractFileAnchor >> privateHasEncoding [ - ^ encoding isNotNil -] - -{ #category : #accessing } -FAMIXAbstractFileAnchor >> rootFolder [ - ^ self mooseModel rootFolder -] - -{ #category : #accessing } -FAMIXAbstractFileAnchor >> sourceText [ - self subclassResponsibility -] - -{ #category : #testing } -FAMIXAbstractFileAnchor >> sourcesAreReadable [ - | file | - ^ (file := self fileReference) exists and: [ file size > 0 ] -] diff --git a/src-archive/Famix-SourceAnchor/FAMIXFileAnchor.class.st b/src-archive/Famix-SourceAnchor/FAMIXFileAnchor.class.st deleted file mode 100644 index 0afbfd3b7..000000000 --- a/src-archive/Famix-SourceAnchor/FAMIXFileAnchor.class.st +++ /dev/null @@ -1,153 +0,0 @@ -" -This offers a source anchor that connects a sourced entity to a file through a relative path stored in the fileName. In addition, the source can be further specified with a startLine and an endLine number in the file. -" -Class { - #name : #FAMIXFileAnchor, - #superclass : #FAMIXAbstractFileAnchor, - #instVars : [ - 'startLine', - 'startColumn', - 'endLine', - 'endColumn' - ], - #category : #'Famix-SourceAnchor' -} - -{ #category : #meta } -FAMIXFileAnchor class >> annotation [ - - -] - -{ #category : #'instance creation' } -FAMIXFileAnchor class >> fileName: aString startLine: anInteger startColumn: anInteger2 endLine: anInteger3 endColumn: anInteger4 [ - ^ self - fileName: aString - startLine: anInteger - startColumn: anInteger2 - endLine: anInteger3 - endColumn: anInteger4 - model: nil -] - -{ #category : #'instance creation' } -FAMIXFileAnchor class >> fileName: aString startLine: anInteger startColumn: anInteger2 endLine: anInteger3 endColumn: anInteger4 model: aMooseModel [ - ^ self new - mooseModel: aMooseModel; - fileName: aString; - startLine: anInteger; - startColumn: anInteger2; - endLine: anInteger3; - endColumn: anInteger4; - yourself -] - -{ #category : #accessing } -FAMIXFileAnchor >> endColumn [ - - - ^ endColumn -] - -{ #category : #accessing } -FAMIXFileAnchor >> endColumn: anObject [ - endColumn := anObject -] - -{ #category : #accessing } -FAMIXFileAnchor >> endLine [ - - - ^ endLine -] - -{ #category : #accessing } -FAMIXFileAnchor >> endLine: anObject [ - endLine := anObject -] - -{ #category : #accessing } -FAMIXFileAnchor >> includeLine: anInteger [ - ^ anInteger between: startLine and: endLine -] - -{ #category : #accessing } -FAMIXFileAnchor >> interval [ - | start end index | - index := 0. - start := 1. - end := 0. - self completeText lineIndicesDo: [:lineStart :lineEnd :y | - index := index + 1. - self startLine = index ifTrue: [ start := lineStart ]. - self endLine = index ifTrue: [end := lineEnd ] ]. - ^ start to: end -] - -{ #category : #accessing } -FAMIXFileAnchor >> lineCount [ - (endLine notNil and: [ startLine notNil ]) - ifTrue: [ ^ endLine - startLine + 1 ]. - - "if no start/end position, use the comple text ..." - ^ self hasSourceText - ifTrue: [ self completeText lineCount ] - ifFalse: [ self notExistentMetricValue ] - -] - -{ #category : #printing } -FAMIXFileAnchor >> mooseNameOn: aStream [ - super mooseNameOn: aStream. - aStream - nextPut: $(; - nextPutAll: self startLine asString; - nextPut: $@; - nextPutAll: self startColumn asString; - nextPut: $-; - nextPutAll: self endLine asString; - nextPut: $@; - nextPutAll: self endColumn asString; - nextPut: $). - -] - -{ #category : #accessing } -FAMIXFileAnchor >> sourceText [ - (self startLine isNil and: [ self endLine isNil ]) ifTrue: [ ^ self completeText ]. - - self sourcesAreReadable ifFalse: [ ^ '' ]. - - ^ self fileReference - binaryReadStreamDo: [ :in | - String - streamContents: [ :s | - [ FAMIXFileAnchorReader readStream: ((ZnCharacterReadStream on: (ZnBufferedReadStream on: in) encoding: self encoding)) for: self into: s ] - on: MessageNotUnderstood - do: [ self endLine: nil. - s ] ] ] -] - -{ #category : #accessing } -FAMIXFileAnchor >> startColumn [ - - - ^ startColumn -] - -{ #category : #accessing } -FAMIXFileAnchor >> startColumn: anObject [ - startColumn := anObject -] - -{ #category : #accessing } -FAMIXFileAnchor >> startLine [ - - - ^ startLine -] - -{ #category : #accessing } -FAMIXFileAnchor >> startLine: anObject [ - startLine := anObject -] diff --git a/src-archive/Famix-SourceAnchor/FAMIXFileAnchorReader.class.st b/src-archive/Famix-SourceAnchor/FAMIXFileAnchorReader.class.st deleted file mode 100644 index b85a78f6f..000000000 --- a/src-archive/Famix-SourceAnchor/FAMIXFileAnchorReader.class.st +++ /dev/null @@ -1,149 +0,0 @@ -" -Description --------------------- - -For now I am a simple class to read the source text of a FAMIXFileAnchor. Maybe later I will do more. -" -Class { - #name : #FAMIXFileAnchorReader, - #superclass : #Object, - #instVars : [ - 'readStream', - 'writeStream', - 'lineCount', - 'fileAnchor', - 'char', - 'startLine' - ], - #category : #'Famix-SourceAnchor' -} - -{ #category : #reading } -FAMIXFileAnchorReader class >> readStream: aReadStream for: aFAMIXFileAnchor into: aWriteStream [ - ^ self new - readStream: aReadStream; - writeStream: aWriteStream; - fileAnchor: aFAMIXFileAnchor; - read -] - -{ #category : #accessing } -FAMIXFileAnchorReader >> fileAnchor: anObject [ - fileAnchor := anObject -] - -{ #category : #reading } -FAMIXFileAnchorReader >> increment [ - lineCount := lineCount + 1 -] - -{ #category : #initialization } -FAMIXFileAnchorReader >> initialize [ - super initialize. - lineCount := 1 -] - -{ #category : #reading } -FAMIXFileAnchorReader >> manageNewLineReturnBeforeStartFromCr: aBoolean [ - self increment. - lineCount = self startLine ifFalse: [ ^ self ]. - - aBoolean - ifTrue: [ "For CRLF" self skipNextIfLf ]. - self readUntilStartColumn -] - -{ #category : #reading } -FAMIXFileAnchorReader >> read [ - [ [ self tryToRead ] - on: ZnCharacterEncodingError - do: - [ "Sometime while reading characters one by one it fail, so we try to read the full file and the just the part we want." - self reset. - readStream := readStream contents readStream. - self tryToRead ] ] - on: Error - do: - [ "If the model is wrong, the file can be smaller than the model think. In that case we just stop the reading" ] -] - -{ #category : #accessing } -FAMIXFileAnchorReader >> readStream: anObject [ - readStream := anObject -] - -{ #category : #reading } -FAMIXFileAnchorReader >> readUntil: endLine [ - [ lineCount < endLine ] - whileTrue: [ (char := readStream next) isCr - ifTrue: [ self increment. - writeStream nextPut: char. - readStream peek - ifNotNil: [ :char2 | - char2 isLf - ifTrue: [ writeStream nextPut: readStream next ] ] ] - ifFalse: [ char isLf - ifTrue: [ self increment ]. - writeStream nextPut: char ] ]. - self readUntilEndColumn -] - -{ #category : #reading } -FAMIXFileAnchorReader >> readUntilEndColumn [ - fileAnchor endColumn - ifNil: [ readStream peek ifNotNil: [ [ (char := readStream next) isCr or: [ char isLf ] ] whileFalse: [ writeStream nextPut: char ] ] ] - ifNotNil: [ :ec | - | numberOfCharToRead | - numberOfCharToRead := self startLine = fileAnchor endLine - ifTrue: [ ec - (fileAnchor startColumn ifNil: [ 1 ]) ] - ifFalse: [ ec - 1 ]. - writeStream nextPutAll: (readStream next: numberOfCharToRead) ] -] - -{ #category : #reading } -FAMIXFileAnchorReader >> readUntilStart [ - [ lineCount < self startLine ] - whileTrue: [ (char := readStream next) isCr - ifTrue: [ self manageNewLineReturnBeforeStartFromCr: true. - readStream peek isLf - ifTrue: [ readStream next ] ] - ifFalse: [ char isLf - ifTrue: [ self manageNewLineReturnBeforeStartFromCr: false ] ] ] -] - -{ #category : #reading } -FAMIXFileAnchorReader >> readUntilStartColumn [ - readStream skip: (fileAnchor startColumn ifNil: [ 1 ]) - 1 -] - -{ #category : #reading } -FAMIXFileAnchorReader >> reset [ - self initialize. - readStream reset. - writeStream reset -] - -{ #category : #reading } -FAMIXFileAnchorReader >> skipNextIfLf [ - "I will probably be called after a CR to remove a possible CRLF" - - readStream peek isLf ifTrue: [ readStream next ] -] - -{ #category : #accessing } -FAMIXFileAnchorReader >> startLine [ - ^ startLine ifNil: [ startLine := fileAnchor startLine ifNil: [ 1 ] ] -] - -{ #category : #reading } -FAMIXFileAnchorReader >> tryToRead [ - self readUntilStart. - fileAnchor endLine - ifNil: [ writeStream nextPutAll: readStream upToEnd ] - ifNotNil: [ :endLine | self readUntil: endLine ] -] - -{ #category : #accessing } -FAMIXFileAnchorReader >> writeStream: anObject [ - writeStream := anObject -] diff --git a/src-archive/Famix-SourceAnchor/FAMIXIndexedFileAnchor.class.st b/src-archive/Famix-SourceAnchor/FAMIXIndexedFileAnchor.class.st deleted file mode 100644 index 1fefecdfb..000000000 --- a/src-archive/Famix-SourceAnchor/FAMIXIndexedFileAnchor.class.st +++ /dev/null @@ -1,123 +0,0 @@ -" -This offers a source anchor that connects a sourced entity to a file through a relative path stored in the fileName. -Contrary to FAMIXFileAnchor positions in the file are recorded as number of characters from the begining -" -Class { - #name : #FAMIXIndexedFileAnchor, - #superclass : #FAMIXAbstractFileAnchor, - #instVars : [ - 'startPos', - 'endPos' - ], - #category : #'Famix-SourceAnchor' -} - -{ #category : #meta } -FAMIXIndexedFileAnchor class >> annotation [ - - -] - -{ #category : #'instance creation' } -FAMIXIndexedFileAnchor class >> fileName: aString startPos: anInteger endPos: anotherInteger [ - ^ self - fileName: aString - startPos: anInteger - endPos: anotherInteger - model: nil -] - -{ #category : #'instance creation' } -FAMIXIndexedFileAnchor class >> fileName: aString startPos: anInteger endPos: anotherInteger model: aMooseModel [ - ^ self new - mooseModel: aMooseModel; - fileName: aString; - startPos: anInteger; - endPos: anotherInteger; - yourself -] - -{ #category : #private } -FAMIXIndexedFileAnchor >> countNumberOfLinesRuturnsFrom: aStream from: start to: end [ - "Here is a speedup version of the #lineCount method for the IndexedFileAnchors. - If we have the file of the entity, instead of reading the full file we can jump directly to the startPos in the stream of the file and read the characters until the endPos. - If it is a cr we increment a counter and we ignore a potential lf to manage crlf. If this is a lf, we increment." - - | count char | - count := 1. - "Go to the start position in the stream" - 1 to: start - 1 do: [ :i | aStream next ]. - [ aStream position < end ] - whileTrue: [ (char := aStream next) isCr - ifTrue: [ "We increment the counter if it is a CR and we ignore a potential LF to manage CRLF" - count := count + 1. - (char := aStream next) isLf - ifFalse: [ aStream oneBack ] ] - ifFalse: [ char isLf - ifTrue: [ "Since we manage CRLF before we can just increment the counter" count := count + 1 ] ] ]. - ^ count -] - -{ #category : #accessing } -FAMIXIndexedFileAnchor >> endPos [ - - - ^ endPos -] - -{ #category : #accessing } -FAMIXIndexedFileAnchor >> endPos: aNumber [ - endPos := aNumber -] - -{ #category : #accessing } -FAMIXIndexedFileAnchor >> lineCount [ - | file | - ^ (file := self fileReference) exists - ifTrue: [ file - binaryReadStreamDo: [ :in | - | stream | - stream := ZnCharacterReadStream on: in encoding: self encoding. - self countNumberOfLinesRuturnsFrom: stream from: (startPos ifNil: [ 1 ]) to: (self endPos ifNil: [ in size ]) ] ] - ifFalse: [ super lineCount ] -] - -{ #category : #accessing } -FAMIXIndexedFileAnchor >> mooseNameOn: aStream [ - super mooseNameOn: aStream. - aStream - nextPut: $(; - nextPut: $(; - nextPutAll: self startPos asString; - nextPut: $-; - nextPutAll: self endPos asString; - nextPut: $). - -] - -{ #category : #accessing } -FAMIXIndexedFileAnchor >> sourceText [ - | start | - self sourcesAreReadable ifFalse: [ ^ '' ]. - - start := startPos ifNil: [ 1 ]. - - ^ self fileReference - binaryReadStreamDo: [ :in | - | stream | - stream := ZnCharacterReadStream on: in encoding: self encoding. - 1 to: start - 1 do: [ :i | stream next ]. - stream next: (endPos ifNil: [ in size + 1 ]) - start + 1 ] -] - -{ #category : #accessing } -FAMIXIndexedFileAnchor >> startPos [ - - - ^ startPos -] - -{ #category : #accessing } -FAMIXIndexedFileAnchor >> startPos: aNumber [ - startPos := aNumber -] diff --git a/src-archive/Famix-SourceAnchor/FAMIXMultipleFileAnchor.class.st b/src-archive/Famix-SourceAnchor/FAMIXMultipleFileAnchor.class.st deleted file mode 100644 index 65821eb2b..000000000 --- a/src-archive/Famix-SourceAnchor/FAMIXMultipleFileAnchor.class.st +++ /dev/null @@ -1,86 +0,0 @@ -" -A FAMIXMultipleFileAnchor is source anchor that connects a sourced entity to several source files anchors like in the case of .c and .h files -" -Class { - #name : #FAMIXMultipleFileAnchor, - #superclass : #FAMIXSourceAnchor, - #instVars : [ - 'allFiles' - ], - #category : #'Famix-SourceAnchor' -} - -{ #category : #meta } -FAMIXMultipleFileAnchor class >> annotation [ - - -] - -{ #category : #public } -FAMIXMultipleFileAnchor >> addFileAnchorWithPath: aPath [ - self allFiles detect: [ :each | each fileName = aPath ] ifNone: [ self createAnchorWithPath: aPath ] -] - -{ #category : #adding } -FAMIXMultipleFileAnchor >> addSourceAnchor: aSourceAnchor [ - self allFiles add: aSourceAnchor -] - -{ #category : #accessing } -FAMIXMultipleFileAnchor >> allFiles [ - - - - ^ allFiles -] - -{ #category : #accessing } -FAMIXMultipleFileAnchor >> allFiles: aCollection [ - allFiles := aCollection -] - -{ #category : #adding } -FAMIXMultipleFileAnchor >> createAnchorWithPath: aPath [ - self - addSourceAnchor: - (FamixFileAnchor new - fileName: aPath; - mooseModel: self mooseModel; - yourself) -] - -{ #category : #accessing } -FAMIXMultipleFileAnchor >> fileName [ - "for compatibility with FAMIXFileAnchor, guard condition not needed: it has atleast one file anchor" - ^ self allFiles anyOne fileName -] - -{ #category : #initialization } -FAMIXMultipleFileAnchor >> initialize [ - super initialize. - allFiles := OrderedCollection new. -] - -{ #category : #testing } -FAMIXMultipleFileAnchor >> isMultiple [ - ^ true -] - -{ #category : #accessing } -FAMIXMultipleFileAnchor >> lineCount [ - ^ self allFiles inject: 0 into: [ :sum :each | sum + each lineCount ] -] - -{ #category : #accessing } -FAMIXMultipleFileAnchor >> sourceText [ - ^ String - streamContents: [ :s | - self allFiles - do: [ :file | - s - << '======================='; - << file fileName; - << '===================='; - lf; - << file sourceText ] ] -] diff --git a/src-archive/Famix-SourceAnchor/FAMIXPharoAnchor.class.st b/src-archive/Famix-SourceAnchor/FAMIXPharoAnchor.class.st deleted file mode 100644 index 1b5b48570..000000000 --- a/src-archive/Famix-SourceAnchor/FAMIXPharoAnchor.class.st +++ /dev/null @@ -1,48 +0,0 @@ -" -A source anchors for Pharo models i.e. ttheir source is in the image. - -" -Class { - #name : #FAMIXPharoAnchor, - #superclass : #FAMIXSourceAnchor, - #instVars : [ - 'pharoEntity' - ], - #category : #'Famix-SourceAnchor' -} - -{ #category : #meta } -FAMIXPharoAnchor class >> annotation [ - - -] - -{ #category : #initialization } -FAMIXPharoAnchor >> initialize [ - super initialize. - pharoEntity := WeakArray new: 1. -] - -{ #category : #accessing } -FAMIXPharoAnchor >> lineCount [ - ^ self sourceText ifNotNil: #lineCount ifNil: [ self notExistentMetricValue ] -] - -{ #category : #accessing } -FAMIXPharoAnchor >> pharoEntity [ - "pharoEntity var is a 1-element weak array" - - ^ pharoEntity at: 1 -] - -{ #category : #accessing } -FAMIXPharoAnchor >> pharoEntity: anObject [ - "point to object weakly" - - pharoEntity at: 1 put: anObject -] - -{ #category : #accessing } -FAMIXPharoAnchor >> sourceText [ - ^ self pharoEntity ifNotNil: #definition -] diff --git a/src-archive/Famix-SourceAnchor/FAMIXSourceTextAnchor.class.st b/src-archive/Famix-SourceAnchor/FAMIXSourceTextAnchor.class.st deleted file mode 100644 index b303ac64c..000000000 --- a/src-archive/Famix-SourceAnchor/FAMIXSourceTextAnchor.class.st +++ /dev/null @@ -1,39 +0,0 @@ -" -This stores the source as an actual string variable. It is to be used when it is not possible to link to the actual source. -" -Class { - #name : #FAMIXSourceTextAnchor, - #superclass : #FAMIXSourceAnchor, - #instVars : [ - 'source' - ], - #category : #'Famix-SourceAnchor' -} - -{ #category : #meta } -FAMIXSourceTextAnchor class >> annotation [ - - -] - -{ #category : #accessing } -FAMIXSourceTextAnchor >> lineCount [ - ^ self sourceText ifNotNil: #lineCount ifNil: [ self notExistentMetricValue ] -] - -{ #category : #accessing } -FAMIXSourceTextAnchor >> source [ - - - ^ source -] - -{ #category : #accessing } -FAMIXSourceTextAnchor >> source: anObject [ - source := anObject -] - -{ #category : #accessing } -FAMIXSourceTextAnchor >> sourceText [ - ^ self source -] diff --git a/src-archive/Famix-SourceAnchor/FAMIXSourcedEntity.extension.st b/src-archive/Famix-SourceAnchor/FAMIXSourcedEntity.extension.st deleted file mode 100644 index 2832ad222..000000000 --- a/src-archive/Famix-SourceAnchor/FAMIXSourcedEntity.extension.st +++ /dev/null @@ -1,49 +0,0 @@ -Extension { #name : #FAMIXSourcedEntity } - -{ #category : #'*Famix-SourceAnchor' } -FAMIXSourcedEntity >> defineMultiSourceAnchorWithPath: aPath [ - - self ensureMultiSourceAnchor addFileAnchorWithPath: aPath -] - -{ #category : #'*Famix-SourceAnchor' } -FAMIXSourcedEntity >> ensureMultiSourceAnchor [ - "This method is also used by other packages" - ^self sourceAnchor - ifNil: [ - self - sourceAnchor: - (FamixMultipleFileAnchor new - element: self; - mooseModel: self mooseModel; - yourself); - sourceAnchor] -] - -{ #category : #'*Famix-SourceAnchor' } -FAMIXSourcedEntity >> fileAnchorPath: aString startLine: anInteger startColumn: anInteger2 endLine: anInteger3 endColumn: anInteger4 [ - "I need to be called after the mooseModel is set." - - self - sourceAnchor: - (FamixFileAnchor - fileName: aString - startLine: anInteger - startColumn: anInteger2 - endLine: anInteger3 - endColumn: anInteger4 - model: self mooseModel) -] - -{ #category : #'*Famix-SourceAnchor' } -FAMIXSourcedEntity >> fileAnchorPath: aString startPos: anInteger endPos: anotherInteger [ - "I need to be called after the mooseModel is set." - - self - sourceAnchor: - (FamixIndexedFileAnchor - fileName: aString - startPos: anInteger - endPos: anotherInteger - model: self mooseModel) -] diff --git a/src-archive/Famix-SourceAnchor/MooseAbstractGroup.extension.st b/src-archive/Famix-SourceAnchor/MooseAbstractGroup.extension.st deleted file mode 100644 index e70369824..000000000 --- a/src-archive/Famix-SourceAnchor/MooseAbstractGroup.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #MooseAbstractGroup } - -{ #category : #'*Famix-SourceAnchor' } -MooseAbstractGroup >> allFileAnchors [ - ^self allWithSubTypesOf: FamixFileAnchor -] diff --git a/src-archive/Famix-SourceAnchor/ReadStream.extension.st b/src-archive/Famix-SourceAnchor/ReadStream.extension.st deleted file mode 100644 index 6a9e7c95a..000000000 --- a/src-archive/Famix-SourceAnchor/ReadStream.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #ReadStream } - -{ #category : #'*Famix-SourceAnchor' } -ReadStream >> oneBack [ - self skip: -1 -] diff --git a/src-archive/Famix-SourceAnchor/ZnCharacterReadStream.extension.st b/src-archive/Famix-SourceAnchor/ZnCharacterReadStream.extension.st deleted file mode 100644 index 11ed44b35..000000000 --- a/src-archive/Famix-SourceAnchor/ZnCharacterReadStream.extension.st +++ /dev/null @@ -1,22 +0,0 @@ -Extension { #name : #ZnCharacterReadStream } - -{ #category : #'*Famix-SourceAnchor' } -ZnCharacterReadStream >> oneBack [ - "This will only work on stream knowing all its content. " - - ^ self wrappedStream skip: -1 -] - -{ #category : #'*Famix-SourceAnchor' } -ZnCharacterReadStream >> position [ - "This will only work on stream knowing all its content. " - - ^ self wrappedStream position -] - -{ #category : #'*Famix-SourceAnchor' } -ZnCharacterReadStream >> reset [ - "This will only work on stream knowing all its content. " - - ^ self wrappedStream reset -] diff --git a/src-archive/Famix-SourceAnchor/package.st b/src-archive/Famix-SourceAnchor/package.st deleted file mode 100644 index 8ec043de6..000000000 --- a/src-archive/Famix-SourceAnchor/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Famix-SourceAnchor' } diff --git a/src-archive/FmxC-Entities/FmxCEntity.class.st b/src-archive/FmxC-Entities/FmxCEntity.class.st deleted file mode 100644 index 4269cbdd1..000000000 --- a/src-archive/FmxC-Entities/FmxCEntity.class.st +++ /dev/null @@ -1,13 +0,0 @@ -Class { - #name : #FmxCEntity, - #superclass : #FmxCEntityGenerated, - #category : #'FmxC-Entities-Entities' -} - -{ #category : #meta } -FmxCEntity class >> annotation [ - - - - ^self -] diff --git a/src-archive/FmxC-Entities/FmxCFile.class.st b/src-archive/FmxC-Entities/FmxCFile.class.st deleted file mode 100644 index d1f5fec51..000000000 --- a/src-archive/FmxC-Entities/FmxCFile.class.st +++ /dev/null @@ -1,13 +0,0 @@ -Class { - #name : #FmxCFile, - #superclass : #FmxCFileGenerated, - #category : #'FmxC-Entities-Entities' -} - -{ #category : #meta } -FmxCFile class >> annotation [ - - - - ^self -] diff --git a/src-archive/FmxC-Entities/FmxCInvocation.class.st b/src-archive/FmxC-Entities/FmxCInvocation.class.st deleted file mode 100644 index e12681713..000000000 --- a/src-archive/FmxC-Entities/FmxCInvocation.class.st +++ /dev/null @@ -1,13 +0,0 @@ -Class { - #name : #FmxCInvocation, - #superclass : #FmxCInvocationGenerated, - #category : #'FmxC-Entities-Entities' -} - -{ #category : #meta } -FmxCInvocation class >> annotation [ - - - - ^self -] diff --git a/src-archive/FmxC-Entities/FmxCModule.class.st b/src-archive/FmxC-Entities/FmxCModule.class.st deleted file mode 100644 index a7e9abdde..000000000 --- a/src-archive/FmxC-Entities/FmxCModule.class.st +++ /dev/null @@ -1,13 +0,0 @@ -Class { - #name : #FmxCModule, - #superclass : #FmxCModuleGenerated, - #category : #'FmxC-Entities-Entities' -} - -{ #category : #meta } -FmxCModule class >> annotation [ - - - - ^self -] diff --git a/src-archive/FmxC-Entities/FmxCTEntity.class.st b/src-archive/FmxC-Entities/FmxCTEntity.class.st deleted file mode 100644 index 1f3d4aa9f..000000000 --- a/src-archive/FmxC-Entities/FmxCTEntity.class.st +++ /dev/null @@ -1,17 +0,0 @@ -Class { - #name : #FmxCTEntity, - #superclass : #FmxTraitEntity, - #instVars : [ - '#definedIn => FMOne type: #FmxCTFile opposite: #definedEntities' - ], - #category : #'FmxC-Entities' -} - -{ #category : #meta } -FmxCTEntity class >> annotation [ - - - - - ^self -] diff --git a/src-archive/FmxC-Entities/FmxCTFile.class.st b/src-archive/FmxC-Entities/FmxCTFile.class.st deleted file mode 100644 index f24b96a16..000000000 --- a/src-archive/FmxC-Entities/FmxCTFile.class.st +++ /dev/null @@ -1,17 +0,0 @@ -Class { - #name : #FmxCTFile, - #superclass : #FmxTraitEntity, - #instVars : [ - '#definedEntities => FMMany type: #FmxCTEntity opposite: #definedIn' - ], - #category : #'FmxC-Entities' -} - -{ #category : #meta } -FmxCTFile class >> annotation [ - - - - - ^self -] diff --git a/src-archive/FmxC-Entities/package.st b/src-archive/FmxC-Entities/package.st deleted file mode 100644 index 26c023438..000000000 --- a/src-archive/FmxC-Entities/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'FmxC-Entities' } diff --git a/src-archive/FmxC-Generated/FmxCEntityGenerated.class.st b/src-archive/FmxC-Generated/FmxCEntityGenerated.class.st deleted file mode 100644 index 0954d2de3..000000000 --- a/src-archive/FmxC-Generated/FmxCEntityGenerated.class.st +++ /dev/null @@ -1,37 +0,0 @@ -Class { - #name : #FmxCEntityGenerated, - #superclass : #MooseEntity, - #instVars : [ - '#isStub', - '#name', - '#definedIn => FMOne type: #FmxCTFile opposite: #definedEntities' - ], - #category : #'FmxC-Generated-Entities' -} - -{ #category : #meta } -FmxCEntityGenerated class >> annotation [ - - - - ^self -] - -{ #category : #meta } -FmxCEntityGenerated class >> metamodel [ - - ^ CMetamodelGenerator metamodel -] - -{ #category : #meta } -FmxCEntityGenerated class >> requirements [ - - ^ { } -] - -{ #category : #meta } -FmxCEntityGenerated class >> statefulTraits [ - - - ^ {FmxCTEntity. FamixTNamed} -] diff --git a/src-archive/FmxC-Generated/FmxCFileGenerated.class.st b/src-archive/FmxC-Generated/FmxCFileGenerated.class.st deleted file mode 100644 index 236b72fde..000000000 --- a/src-archive/FmxC-Generated/FmxCFileGenerated.class.st +++ /dev/null @@ -1,37 +0,0 @@ -Class { - #name : #FmxCFileGenerated, - #superclass : #MooseEntity, - #instVars : [ - '#isStub', - '#name', - '#definedEntities => FMMany type: #FmxCTEntity opposite: #definedIn' - ], - #category : #'FmxC-Generated-Entities' -} - -{ #category : #meta } -FmxCFileGenerated class >> annotation [ - - - - ^self -] - -{ #category : #meta } -FmxCFileGenerated class >> metamodel [ - - ^ CMetamodelGenerator metamodel -] - -{ #category : #meta } -FmxCFileGenerated class >> requirements [ - - ^ { } -] - -{ #category : #meta } -FmxCFileGenerated class >> statefulTraits [ - - - ^ {FmxCTFile. FamixTNamed} -] diff --git a/src-archive/FmxC-Generated/FmxCImportingContext.class.st b/src-archive/FmxC-Generated/FmxCImportingContext.class.st deleted file mode 100644 index 010f4c68e..000000000 --- a/src-archive/FmxC-Generated/FmxCImportingContext.class.st +++ /dev/null @@ -1,113 +0,0 @@ -Class { - #name : #FmxCImportingContext, - #superclass : #FamixImportingContext, - #category : #'FmxC-Generated' -} - -{ #category : #testing } -FmxCImportingContext >> importCFile [ - - ^ self import: FmxCCFile -] - -{ #category : #testing } -FmxCImportingContext >> importEntity [ - - ^ self import: FmxCEntity -] - -{ #category : #testing } -FmxCImportingContext >> importFile [ - - ^ self import: FmxCFile -] - -{ #category : #testing } -FmxCImportingContext >> importFunction [ - - ^ self import: FmxCFunction -] - -{ #category : #testing } -FmxCImportingContext >> importHFile [ - - ^ self import: FmxCHFile -] - -{ #category : #testing } -FmxCImportingContext >> importInvocation [ - - ^ self import: FmxCInvocation -] - -{ #category : #testing } -FmxCImportingContext >> importMacro [ - - ^ self import: FmxCMacro -] - -{ #category : #testing } -FmxCImportingContext >> importModule [ - - ^ self import: FmxCModule -] - -{ #category : #testing } -FmxCImportingContext >> importType [ - - ^ self import: FmxCType -] - -{ #category : #testing } -FmxCImportingContext >> shouldImportCFile [ - - ^ self shouldImport: FmxCCFile -] - -{ #category : #testing } -FmxCImportingContext >> shouldImportEntity [ - - ^ self shouldImport: FmxCEntity -] - -{ #category : #testing } -FmxCImportingContext >> shouldImportFile [ - - ^ self shouldImport: FmxCFile -] - -{ #category : #testing } -FmxCImportingContext >> shouldImportFunction [ - - ^ self shouldImport: FmxCFunction -] - -{ #category : #testing } -FmxCImportingContext >> shouldImportHFile [ - - ^ self shouldImport: FmxCHFile -] - -{ #category : #testing } -FmxCImportingContext >> shouldImportInvocation [ - - ^ self shouldImport: FmxCInvocation -] - -{ #category : #testing } -FmxCImportingContext >> shouldImportMacro [ - - ^ self shouldImport: FmxCMacro -] - -{ #category : #testing } -FmxCImportingContext >> shouldImportModule [ - - ^ self shouldImport: FmxCModule -] - -{ #category : #testing } -FmxCImportingContext >> shouldImportType [ - - ^ self shouldImport: FmxCType -] diff --git a/src-archive/FmxC-Generated/FmxCInvocationGenerated.class.st b/src-archive/FmxC-Generated/FmxCInvocationGenerated.class.st deleted file mode 100644 index 9df44aa95..000000000 --- a/src-archive/FmxC-Generated/FmxCInvocationGenerated.class.st +++ /dev/null @@ -1,37 +0,0 @@ -Class { - #name : #FmxCInvocationGenerated, - #superclass : #MooseEntity, - #instVars : [ - '#sender => FMOne type: #FamixTWithInvocations opposite: #outgoingInvocations', - '#candidates => FMMany type: #FamixTInvocable opposite: #incomingInvocations', - '#receiver => FMOne type: #FamixTInvocationsReceiver opposite: #receivingInvocations' - ], - #category : #'FmxC-Generated-Entities' -} - -{ #category : #meta } -FmxCInvocationGenerated class >> annotation [ - - - - ^self -] - -{ #category : #meta } -FmxCInvocationGenerated class >> metamodel [ - - ^ CMetamodelGenerator metamodel -] - -{ #category : #meta } -FmxCInvocationGenerated class >> requirements [ - - ^ { } -] - -{ #category : #meta } -FmxCInvocationGenerated class >> statefulTraits [ - - - ^ {FamixTInvocation} -] diff --git a/src-archive/FmxC-Generated/FmxCModuleGenerated.class.st b/src-archive/FmxC-Generated/FmxCModuleGenerated.class.st deleted file mode 100644 index ad046e6c2..000000000 --- a/src-archive/FmxC-Generated/FmxCModuleGenerated.class.st +++ /dev/null @@ -1,64 +0,0 @@ -Class { - #name : #FmxCModuleGenerated, - #superclass : #MooseEntity, - #instVars : [ - '#cFile => FMOne type: #FmxCCFile opposite: #module', - '#hFile => FMOne type: #FmxCHFile opposite: #module', - '#isStub', - '#name' - ], - #category : #'FmxC-Generated-Entities' -} - -{ #category : #meta } -FmxCModuleGenerated class >> annotation [ - - - - ^self -] - -{ #category : #meta } -FmxCModuleGenerated class >> metamodel [ - - ^ CMetamodelGenerator metamodel -] - -{ #category : #meta } -FmxCModuleGenerated class >> requirements [ - - ^ { } -] - -{ #category : #meta } -FmxCModuleGenerated class >> statefulTraits [ - - - ^ {FamixTNamed} -] - -{ #category : #accessing } -FmxCModuleGenerated >> cFile [ - - ^ cFile -] - -{ #category : #accessing } -FmxCModuleGenerated >> cFile: anObject [ - - cFile := anObject - -] - -{ #category : #accessing } -FmxCModuleGenerated >> hFile [ - - ^ hFile -] - -{ #category : #accessing } -FmxCModuleGenerated >> hFile: anObject [ - - hFile := anObject - -] diff --git a/src-archive/FmxC-Generated/FmxCTEntityGenerated.class.st b/src-archive/FmxC-Generated/FmxCTEntityGenerated.class.st deleted file mode 100644 index 331be562d..000000000 --- a/src-archive/FmxC-Generated/FmxCTEntityGenerated.class.st +++ /dev/null @@ -1,30 +0,0 @@ -Class { - #name : #FmxCTEntityGenerated, - #superclass : #FmxTraitEntity, - #instVars : [ - '#definedIn => FMOne type: #FmxCTFile opposite: #definedEntities' - ], - #category : #'FmxC-Generated-Traits' -} - -{ #category : #meta } -FmxCTEntityGenerated class >> annotation [ - - - - - ^self -] - -{ #category : #accessing } -FmxCTEntityGenerated >> definedIn [ - - ^ definedIn -] - -{ #category : #accessing } -FmxCTEntityGenerated >> definedIn: anObject [ - - definedIn := anObject - -] diff --git a/src-archive/FmxC-Generated/FmxCTFileGenerated.class.st b/src-archive/FmxC-Generated/FmxCTFileGenerated.class.st deleted file mode 100644 index d0f247a01..000000000 --- a/src-archive/FmxC-Generated/FmxCTFileGenerated.class.st +++ /dev/null @@ -1,30 +0,0 @@ -Class { - #name : #FmxCTFileGenerated, - #superclass : #FmxTraitEntity, - #instVars : [ - '#definedEntities => FMMany type: #FmxCTEntity opposite: #definedIn' - ], - #category : #'FmxC-Generated-Traits' -} - -{ #category : #meta } -FmxCTFileGenerated class >> annotation [ - - - - - ^self -] - -{ #category : #accessing } -FmxCTFileGenerated >> definedEntities [ - - ^ definedEntities -] - -{ #category : #accessing } -FmxCTFileGenerated >> definedEntities: anObject [ - - definedEntities value: anObject - -] diff --git a/src-archive/FmxC-Generated/package.st b/src-archive/FmxC-Generated/package.st deleted file mode 100644 index e13a7697e..000000000 --- a/src-archive/FmxC-Generated/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'FmxC-Generated' } diff --git a/src-archive/FmxC/FmxCCFile.class.st b/src-archive/FmxC/FmxCCFile.class.st deleted file mode 100644 index bb925364f..000000000 --- a/src-archive/FmxC/FmxCCFile.class.st +++ /dev/null @@ -1,5 +0,0 @@ -Class { - #name : #FmxCCFile, - #superclass : #FmxCCFileGenerated, - #category : #FmxC -} diff --git a/src-archive/FmxC/FmxCCFileGenerated.class.st b/src-archive/FmxC/FmxCCFileGenerated.class.st deleted file mode 100644 index e43d994f8..000000000 --- a/src-archive/FmxC/FmxCCFileGenerated.class.st +++ /dev/null @@ -1,44 +0,0 @@ -Class { - #name : #FmxCCFileGenerated, - #superclass : #FmxCFileGenerated, - #instVars : [ - '#module => FMOne type: #FmxCModule opposite: #cFile' - ], - #category : #'FmxC-Entities' -} - -{ #category : #meta } -FmxCCFileGenerated class >> annotation [ - - - - ^self -] - -{ #category : #meta } -FmxCCFileGenerated class >> requirements [ - - ^ { } -] - -{ #category : #meta } -FmxCCFileGenerated class >> statefulTraits [ - - - ^ {} -] - -{ #category : #accessing } -FmxCCFileGenerated >> module [ - - - - ^ module -] - -{ #category : #accessing } -FmxCCFileGenerated >> module: anObject [ - - module := anObject - -] diff --git a/src-archive/FmxC/FmxCEntity.class.st b/src-archive/FmxC/FmxCEntity.class.st deleted file mode 100644 index 653f43993..000000000 --- a/src-archive/FmxC/FmxCEntity.class.st +++ /dev/null @@ -1,5 +0,0 @@ -Class { - #name : #FmxCEntity, - #superclass : #FmxCEntityGenerated, - #category : #FmxC -} diff --git a/src-archive/FmxC/FmxCEntityGenerated.class.st b/src-archive/FmxC/FmxCEntityGenerated.class.st deleted file mode 100644 index 476df6941..000000000 --- a/src-archive/FmxC/FmxCEntityGenerated.class.st +++ /dev/null @@ -1,80 +0,0 @@ -Class { - #name : #FmxCEntityGenerated, - #superclass : #MooseEntity, - #instVars : [ - '#definedIn => FMOne type: #FmxCTFile opposite: #definedEntities', - '#isStub', - '#name' - ], - #category : #'FmxC-Entities' -} - -{ #category : #meta } -FmxCEntityGenerated class >> annotation [ - - - - ^self -] - -{ #category : #meta } -FmxCEntityGenerated class >> metamodel [ - - ^ CMetamodelGenerator metamodel -] - -{ #category : #meta } -FmxCEntityGenerated class >> requirements [ - - ^ { } -] - -{ #category : #meta } -FmxCEntityGenerated class >> statefulTraits [ - - - ^ {FmxCTEntity. FamixTNamed} -] - -{ #category : #'_fromTrait_FmxCTEntityGenerated' } -FmxCEntityGenerated >> definedIn [ - - ^ definedIn -] - -{ #category : #'_fromTrait_FmxCTEntityGenerated' } -FmxCEntityGenerated >> definedIn: anObject [ - - definedIn := anObject - -] - -{ #category : #'_fromTrait_FamixTNamedGenerated' } -FmxCEntityGenerated >> isStub [ - - - - ^ isStub -] - -{ #category : #'_fromTrait_FamixTNamedGenerated' } -FmxCEntityGenerated >> isStub: anObject [ - - isStub := anObject - -] - -{ #category : #'_fromTrait_FamixTNamedGenerated' } -FmxCEntityGenerated >> name [ - - - - ^ name -] - -{ #category : #'_fromTrait_FamixTNamedGenerated' } -FmxCEntityGenerated >> name: anObject [ - - name := anObject - -] diff --git a/src-archive/FmxC/FmxCFile.class.st b/src-archive/FmxC/FmxCFile.class.st deleted file mode 100644 index 9ca39cf95..000000000 --- a/src-archive/FmxC/FmxCFile.class.st +++ /dev/null @@ -1,5 +0,0 @@ -Class { - #name : #FmxCFile, - #superclass : #FmxCFileGenerated, - #category : #FmxC -} diff --git a/src-archive/FmxC/FmxCFileGenerated.class.st b/src-archive/FmxC/FmxCFileGenerated.class.st deleted file mode 100644 index 3b6831671..000000000 --- a/src-archive/FmxC/FmxCFileGenerated.class.st +++ /dev/null @@ -1,80 +0,0 @@ -Class { - #name : #FmxCFileGenerated, - #superclass : #MooseEntity, - #instVars : [ - '#definedEntities => FMMany type: #FmxCTEntity opposite: #definedIn', - '#isStub', - '#name' - ], - #category : #'FmxC-Entities' -} - -{ #category : #meta } -FmxCFileGenerated class >> annotation [ - - - - ^self -] - -{ #category : #meta } -FmxCFileGenerated class >> metamodel [ - - ^ CMetamodelGenerator metamodel -] - -{ #category : #meta } -FmxCFileGenerated class >> requirements [ - - ^ { } -] - -{ #category : #meta } -FmxCFileGenerated class >> statefulTraits [ - - - ^ {FmxCTFile. FamixTNamed} -] - -{ #category : #'_fromTrait_FmxCTFileGenerated' } -FmxCFileGenerated >> definedEntities [ - - ^ definedEntities -] - -{ #category : #'_fromTrait_FmxCTFileGenerated' } -FmxCFileGenerated >> definedEntities: anObject [ - - definedEntities value: anObject - -] - -{ #category : #'_fromTrait_FamixTNamedGenerated' } -FmxCFileGenerated >> isStub [ - - - - ^ isStub -] - -{ #category : #'_fromTrait_FamixTNamedGenerated' } -FmxCFileGenerated >> isStub: anObject [ - - isStub := anObject - -] - -{ #category : #'_fromTrait_FamixTNamedGenerated' } -FmxCFileGenerated >> name [ - - - - ^ name -] - -{ #category : #'_fromTrait_FamixTNamedGenerated' } -FmxCFileGenerated >> name: anObject [ - - name := anObject - -] diff --git a/src-archive/FmxC/FmxCFunction.class.st b/src-archive/FmxC/FmxCFunction.class.st deleted file mode 100644 index ec8628373..000000000 --- a/src-archive/FmxC/FmxCFunction.class.st +++ /dev/null @@ -1,5 +0,0 @@ -Class { - #name : #FmxCFunction, - #superclass : #FmxCFunctionGenerated, - #category : #FmxC -} diff --git a/src-archive/FmxC/FmxCFunctionGenerated.class.st b/src-archive/FmxC/FmxCFunctionGenerated.class.st deleted file mode 100644 index ce33adbef..000000000 --- a/src-archive/FmxC/FmxCFunctionGenerated.class.st +++ /dev/null @@ -1,57 +0,0 @@ -Class { - #name : #FmxCFunctionGenerated, - #superclass : #FmxCEntityGenerated, - #instVars : [ - '#incomingInvocations => FMOne type: #FamixTInvocation opposite: #candidates', - '#outgoingInvocations => FMMany type: #FamixTInvocation opposite: #sender' - ], - #category : #'FmxC-Entities' -} - -{ #category : #meta } -FmxCFunctionGenerated class >> annotation [ - - - - ^self -] - -{ #category : #meta } -FmxCFunctionGenerated class >> requirements [ - - ^ { } -] - -{ #category : #meta } -FmxCFunctionGenerated class >> statefulTraits [ - - - ^ {FamixTInvocable. FamixTWithInvocations} -] - -{ #category : #'_fromTrait_FamixTInvocableGenerated' } -FmxCFunctionGenerated >> incomingInvocations [ - - ^ incomingInvocations -] - -{ #category : #'_fromTrait_FamixTInvocableGenerated' } -FmxCFunctionGenerated >> incomingInvocations: anObject [ - - incomingInvocations := anObject - -] - -{ #category : #'_fromTrait_FamixTWithInvocationsGenerated' } -FmxCFunctionGenerated >> outgoingInvocations [ - - - ^ outgoingInvocations -] - -{ #category : #'_fromTrait_FamixTWithInvocationsGenerated' } -FmxCFunctionGenerated >> outgoingInvocations: anObject [ - - outgoingInvocations value: anObject - -] diff --git a/src-archive/FmxC/FmxCHFile.class.st b/src-archive/FmxC/FmxCHFile.class.st deleted file mode 100644 index 441ba63ef..000000000 --- a/src-archive/FmxC/FmxCHFile.class.st +++ /dev/null @@ -1,5 +0,0 @@ -Class { - #name : #FmxCHFile, - #superclass : #FmxCHFileGenerated, - #category : #FmxC -} diff --git a/src-archive/FmxC/FmxCHFileGenerated.class.st b/src-archive/FmxC/FmxCHFileGenerated.class.st deleted file mode 100644 index 972ae7fb6..000000000 --- a/src-archive/FmxC/FmxCHFileGenerated.class.st +++ /dev/null @@ -1,44 +0,0 @@ -Class { - #name : #FmxCHFileGenerated, - #superclass : #FmxCFileGenerated, - #instVars : [ - '#module => FMOne type: #FmxCModule opposite: #hFile' - ], - #category : #'FmxC-Entities' -} - -{ #category : #meta } -FmxCHFileGenerated class >> annotation [ - - - - ^self -] - -{ #category : #meta } -FmxCHFileGenerated class >> requirements [ - - ^ { } -] - -{ #category : #meta } -FmxCHFileGenerated class >> statefulTraits [ - - - ^ {} -] - -{ #category : #accessing } -FmxCHFileGenerated >> module [ - - - - ^ module -] - -{ #category : #accessing } -FmxCHFileGenerated >> module: anObject [ - - module := anObject - -] diff --git a/src-archive/FmxC/FmxCImportingContext.class.st b/src-archive/FmxC/FmxCImportingContext.class.st deleted file mode 100644 index e4db3eb9a..000000000 --- a/src-archive/FmxC/FmxCImportingContext.class.st +++ /dev/null @@ -1,113 +0,0 @@ -Class { - #name : #FmxCImportingContext, - #superclass : #FamixImportingContext, - #category : #FmxC -} - -{ #category : #testing } -FmxCImportingContext >> importCFile [ - - ^ self import: FmxCCFile -] - -{ #category : #testing } -FmxCImportingContext >> importEntity [ - - ^ self import: FmxCEntity -] - -{ #category : #testing } -FmxCImportingContext >> importFile [ - - ^ self import: FmxCFile -] - -{ #category : #testing } -FmxCImportingContext >> importFunction [ - - ^ self import: FmxCFunction -] - -{ #category : #testing } -FmxCImportingContext >> importHFile [ - - ^ self import: FmxCHFile -] - -{ #category : #testing } -FmxCImportingContext >> importInvocation [ - - ^ self import: FmxCInvocation -] - -{ #category : #testing } -FmxCImportingContext >> importMacro [ - - ^ self import: FmxCMacro -] - -{ #category : #testing } -FmxCImportingContext >> importModule [ - - ^ self import: FmxCModule -] - -{ #category : #testing } -FmxCImportingContext >> importType [ - - ^ self import: FmxCType -] - -{ #category : #testing } -FmxCImportingContext >> shouldImportCFile [ - - ^ self shouldImport: FmxCCFile -] - -{ #category : #testing } -FmxCImportingContext >> shouldImportEntity [ - - ^ self shouldImport: FmxCEntity -] - -{ #category : #testing } -FmxCImportingContext >> shouldImportFile [ - - ^ self shouldImport: FmxCFile -] - -{ #category : #testing } -FmxCImportingContext >> shouldImportFunction [ - - ^ self shouldImport: FmxCFunction -] - -{ #category : #testing } -FmxCImportingContext >> shouldImportHFile [ - - ^ self shouldImport: FmxCHFile -] - -{ #category : #testing } -FmxCImportingContext >> shouldImportInvocation [ - - ^ self shouldImport: FmxCInvocation -] - -{ #category : #testing } -FmxCImportingContext >> shouldImportMacro [ - - ^ self shouldImport: FmxCMacro -] - -{ #category : #testing } -FmxCImportingContext >> shouldImportModule [ - - ^ self shouldImport: FmxCModule -] - -{ #category : #testing } -FmxCImportingContext >> shouldImportType [ - - ^ self shouldImport: FmxCType -] diff --git a/src-archive/FmxC/FmxCInvocation.class.st b/src-archive/FmxC/FmxCInvocation.class.st deleted file mode 100644 index 816e6270f..000000000 --- a/src-archive/FmxC/FmxCInvocation.class.st +++ /dev/null @@ -1,5 +0,0 @@ -Class { - #name : #FmxCInvocation, - #superclass : #FmxCInvocationGenerated, - #category : #FmxC -} diff --git a/src-archive/FmxC/FmxCInvocationGenerated.class.st b/src-archive/FmxC/FmxCInvocationGenerated.class.st deleted file mode 100644 index 53d86cc49..000000000 --- a/src-archive/FmxC/FmxCInvocationGenerated.class.st +++ /dev/null @@ -1,82 +0,0 @@ -Class { - #name : #FmxCInvocationGenerated, - #superclass : #MooseEntity, - #instVars : [ - '#sender => FMOne type: #FamixTWithInvocations opposite: #outgoingInvocations', - '#candidates => FMMany type: #FamixTInvocable opposite: #incomingInvocations', - '#receiver => FMOne type: #FamixTInvocationsReceiver opposite: #receivingInvocations' - ], - #category : #'FmxC-Entities' -} - -{ #category : #meta } -FmxCInvocationGenerated class >> annotation [ - - - - ^self -] - -{ #category : #meta } -FmxCInvocationGenerated class >> metamodel [ - - ^ CMetamodelGenerator metamodel -] - -{ #category : #meta } -FmxCInvocationGenerated class >> requirements [ - - ^ { } -] - -{ #category : #meta } -FmxCInvocationGenerated class >> statefulTraits [ - - - ^ {FamixTInvocation} -] - -{ #category : #'_fromTrait_FamixTInvocationGenerated' } -FmxCInvocationGenerated >> candidates [ - - - - ^ candidates -] - -{ #category : #'_fromTrait_FamixTInvocationGenerated' } -FmxCInvocationGenerated >> candidates: anObject [ - - candidates value: anObject - -] - -{ #category : #'_fromTrait_FamixTInvocationGenerated' } -FmxCInvocationGenerated >> receiver [ - - - ^ receiver -] - -{ #category : #'_fromTrait_FamixTInvocationGenerated' } -FmxCInvocationGenerated >> receiver: anObject [ - - receiver := anObject - -] - -{ #category : #'_fromTrait_FamixTInvocationGenerated' } -FmxCInvocationGenerated >> sender [ - - - - - ^ sender -] - -{ #category : #'_fromTrait_FamixTInvocationGenerated' } -FmxCInvocationGenerated >> sender: anObject [ - - sender := anObject - -] diff --git a/src-archive/FmxC/FmxCMacro.class.st b/src-archive/FmxC/FmxCMacro.class.st deleted file mode 100644 index 91df02d6d..000000000 --- a/src-archive/FmxC/FmxCMacro.class.st +++ /dev/null @@ -1,5 +0,0 @@ -Class { - #name : #FmxCMacro, - #superclass : #FmxCMacroGenerated, - #category : #FmxC -} diff --git a/src-archive/FmxC/FmxCMacroGenerated.class.st b/src-archive/FmxC/FmxCMacroGenerated.class.st deleted file mode 100644 index 22775fc6c..000000000 --- a/src-archive/FmxC/FmxCMacroGenerated.class.st +++ /dev/null @@ -1,26 +0,0 @@ -Class { - #name : #FmxCMacroGenerated, - #superclass : #FmxCEntityGenerated, - #category : #'FmxC-Entities' -} - -{ #category : #meta } -FmxCMacroGenerated class >> annotation [ - - - - ^self -] - -{ #category : #meta } -FmxCMacroGenerated class >> requirements [ - - ^ { } -] - -{ #category : #meta } -FmxCMacroGenerated class >> statefulTraits [ - - - ^ {} -] diff --git a/src-archive/FmxC/FmxCModule.class.st b/src-archive/FmxC/FmxCModule.class.st deleted file mode 100644 index a95b82456..000000000 --- a/src-archive/FmxC/FmxCModule.class.st +++ /dev/null @@ -1,5 +0,0 @@ -Class { - #name : #FmxCModule, - #superclass : #FmxCModuleGenerated, - #category : #FmxC -} diff --git a/src-archive/FmxC/FmxCModuleGenerated.class.st b/src-archive/FmxC/FmxCModuleGenerated.class.st deleted file mode 100644 index 82ad495d1..000000000 --- a/src-archive/FmxC/FmxCModuleGenerated.class.st +++ /dev/null @@ -1,94 +0,0 @@ -Class { - #name : #FmxCModuleGenerated, - #superclass : #MooseEntity, - #instVars : [ - '#cFile => FMOne type: #FmxCCFile opposite: #module', - '#hFile => FMOne type: #FmxCHFile opposite: #module', - '#isStub', - '#name' - ], - #category : #'FmxC-Entities' -} - -{ #category : #meta } -FmxCModuleGenerated class >> annotation [ - - - - ^self -] - -{ #category : #meta } -FmxCModuleGenerated class >> metamodel [ - - ^ CMetamodelGenerator metamodel -] - -{ #category : #meta } -FmxCModuleGenerated class >> requirements [ - - ^ { } -] - -{ #category : #meta } -FmxCModuleGenerated class >> statefulTraits [ - - - ^ {FamixTNamed} -] - -{ #category : #accessing } -FmxCModuleGenerated >> cFile [ - - ^ cFile -] - -{ #category : #accessing } -FmxCModuleGenerated >> cFile: anObject [ - - cFile := anObject - -] - -{ #category : #accessing } -FmxCModuleGenerated >> hFile [ - - ^ hFile -] - -{ #category : #accessing } -FmxCModuleGenerated >> hFile: anObject [ - - hFile := anObject - -] - -{ #category : #'_fromTrait_FamixTNamedGenerated' } -FmxCModuleGenerated >> isStub [ - - - - ^ isStub -] - -{ #category : #'_fromTrait_FamixTNamedGenerated' } -FmxCModuleGenerated >> isStub: anObject [ - - isStub := anObject - -] - -{ #category : #'_fromTrait_FamixTNamedGenerated' } -FmxCModuleGenerated >> name [ - - - - ^ name -] - -{ #category : #'_fromTrait_FamixTNamedGenerated' } -FmxCModuleGenerated >> name: anObject [ - - name := anObject - -] diff --git a/src-archive/FmxC/FmxCTEntity.class.st b/src-archive/FmxC/FmxCTEntity.class.st deleted file mode 100644 index 5ad79c9bf..000000000 --- a/src-archive/FmxC/FmxCTEntity.class.st +++ /dev/null @@ -1,5 +0,0 @@ -Class { - #name : #FmxCTEntity, - #superclass : #FmxCTEntityGenerated, - #category : #FmxC -} diff --git a/src-archive/FmxC/FmxCTEntityGenerated.class.st b/src-archive/FmxC/FmxCTEntityGenerated.class.st deleted file mode 100644 index 8641f428d..000000000 --- a/src-archive/FmxC/FmxCTEntityGenerated.class.st +++ /dev/null @@ -1,30 +0,0 @@ -Class { - #name : #FmxCTEntityGenerated, - #superclass : #FmxTraitEntity, - #instVars : [ - '#definedIn => FMOne type: #FmxCTFile opposite: #definedEntities' - ], - #category : #'FmxC-Traits' -} - -{ #category : #meta } -FmxCTEntityGenerated class >> annotation [ - - - - - ^self -] - -{ #category : #accessing } -FmxCTEntityGenerated >> definedIn [ - - ^ definedIn -] - -{ #category : #accessing } -FmxCTEntityGenerated >> definedIn: anObject [ - - definedIn := anObject - -] diff --git a/src-archive/FmxC/FmxCTFile.class.st b/src-archive/FmxC/FmxCTFile.class.st deleted file mode 100644 index 0631ab40f..000000000 --- a/src-archive/FmxC/FmxCTFile.class.st +++ /dev/null @@ -1,5 +0,0 @@ -Class { - #name : #FmxCTFile, - #superclass : #FmxCTFileGenerated, - #category : #FmxC -} diff --git a/src-archive/FmxC/FmxCTFileGenerated.class.st b/src-archive/FmxC/FmxCTFileGenerated.class.st deleted file mode 100644 index 6dc6092cd..000000000 --- a/src-archive/FmxC/FmxCTFileGenerated.class.st +++ /dev/null @@ -1,30 +0,0 @@ -Class { - #name : #FmxCTFileGenerated, - #superclass : #FmxTraitEntity, - #instVars : [ - '#definedEntities => FMMany type: #FmxCTEntity opposite: #definedIn' - ], - #category : #'FmxC-Traits' -} - -{ #category : #meta } -FmxCTFileGenerated class >> annotation [ - - - - - ^self -] - -{ #category : #accessing } -FmxCTFileGenerated >> definedEntities [ - - ^ definedEntities -] - -{ #category : #accessing } -FmxCTFileGenerated >> definedEntities: anObject [ - - definedEntities value: anObject - -] diff --git a/src-archive/FmxC/FmxCType.class.st b/src-archive/FmxC/FmxCType.class.st deleted file mode 100644 index b0e8fedde..000000000 --- a/src-archive/FmxC/FmxCType.class.st +++ /dev/null @@ -1,5 +0,0 @@ -Class { - #name : #FmxCType, - #superclass : #FmxCTypeGenerated, - #category : #FmxC -} diff --git a/src-archive/FmxC/FmxCTypeGenerated.class.st b/src-archive/FmxC/FmxCTypeGenerated.class.st deleted file mode 100644 index f65e42fa9..000000000 --- a/src-archive/FmxC/FmxCTypeGenerated.class.st +++ /dev/null @@ -1,26 +0,0 @@ -Class { - #name : #FmxCTypeGenerated, - #superclass : #FmxCEntityGenerated, - #category : #'FmxC-Entities' -} - -{ #category : #meta } -FmxCTypeGenerated class >> annotation [ - - - - ^self -] - -{ #category : #meta } -FmxCTypeGenerated class >> requirements [ - - ^ { } -] - -{ #category : #meta } -FmxCTypeGenerated class >> statefulTraits [ - - - ^ {} -] diff --git a/src-archive/FmxC/package.st b/src-archive/FmxC/package.st deleted file mode 100644 index d155334f5..000000000 --- a/src-archive/FmxC/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #FmxC } diff --git a/src-archive/FmxNGCompatibility-JavaParsing/FmxNGJAVASourceLanguage.extension.st b/src-archive/FmxNGCompatibility-JavaParsing/FmxNGJAVASourceLanguage.extension.st deleted file mode 100644 index 14603fe13..000000000 --- a/src-archive/FmxNGCompatibility-JavaParsing/FmxNGJAVASourceLanguage.extension.st +++ /dev/null @@ -1,16 +0,0 @@ -Extension { #name : #FamixJAVASourceLanguage } - -{ #category : #'*FamixCompatibility-JavaParsing' } -FamixJAVASourceLanguage >> format: aSourceString from: anEntity [ - ^ PP2TextHighlighter new - parser: self parser; - color: 'keyword' with: Color red muchDarker; - color: 'comment' with: Color gray; -" bold: 'keyword';" - highlight: aSourceString asText -] - -{ #category : #'*FamixCompatibility-JavaParsing' } -FamixJAVASourceLanguage >> parser [ - ^ self privateState attributeAt: #parser ifAbsentPut: [PPJavaLexicon new] -] diff --git a/src-archive/FmxNGCompatibility-JavaParsing/package.st b/src-archive/FmxNGCompatibility-JavaParsing/package.st deleted file mode 100644 index 61f939589..000000000 --- a/src-archive/FmxNGCompatibility-JavaParsing/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'FamixCompatibility-JavaParsing' } diff --git a/src-archive/FmxNGCompatibility-PPExtensions/FAMIXJavaSourceLanguage.extension.st b/src-archive/FmxNGCompatibility-PPExtensions/FAMIXJavaSourceLanguage.extension.st deleted file mode 100644 index 26ec085d0..000000000 --- a/src-archive/FmxNGCompatibility-PPExtensions/FAMIXJavaSourceLanguage.extension.st +++ /dev/null @@ -1,16 +0,0 @@ -Extension { #name : #FAMIXJavaSourceLanguage } - -{ #category : #'*FamixCompatibility-PPExtensions' } -FAMIXJavaSourceLanguage >> format: aSourceString from: anEntity [ - ^ PP2TextHighlighter new - parser: self parser; - color: 'keyword' with: Color red muchDarker; - color: 'comment' with: Color gray; -" bold: 'keyword';" - highlight: aSourceString asText -] - -{ #category : #'*FamixCompatibility-PPExtensions' } -FAMIXJavaSourceLanguage >> parser [ - ^ self privateState attributeAt: #parser ifAbsentPut: [PPJavaLexicon new] -] diff --git a/src-archive/FmxNGCompatibility-PPExtensions/FAMIXSmalltalkSourceLanguage.extension.st b/src-archive/FmxNGCompatibility-PPExtensions/FAMIXSmalltalkSourceLanguage.extension.st deleted file mode 100644 index 9a7941cc0..000000000 --- a/src-archive/FmxNGCompatibility-PPExtensions/FAMIXSmalltalkSourceLanguage.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #FAMIXSmalltalkSourceLanguage } - -{ #category : #'*FamixCompatibility-PPExtensions' } -FAMIXSmalltalkSourceLanguage >> parser [ - ^ self privateState attributeAt: #parser ifAbsentPut: [PPSmalltalkGrammar new] -] diff --git a/src-archive/FmxNGCompatibility-PPExtensions/MooseMSEFilesExplorer.class.st b/src-archive/FmxNGCompatibility-PPExtensions/MooseMSEFilesExplorer.class.st deleted file mode 100644 index 1e37b5f14..000000000 --- a/src-archive/FmxNGCompatibility-PPExtensions/MooseMSEFilesExplorer.class.st +++ /dev/null @@ -1,92 +0,0 @@ -" -""This class provides a browser for exploring MSE files from a local folder"" - -self openOn: FSDiskStore currentFilesystem workingDirectory / 'metamodels'. -" -Class { - #name : #MooseMSEFilesExplorer, - #superclass : #GLMBrowserTemplate, - #category : #'FamixCompatibility-PPExtensions' -} - -{ #category : #'instance creation' } -MooseMSEFilesExplorer class >> open [ - self openOn: FileLocator imageDirectory -] - -{ #category : #building } -MooseMSEFilesExplorer >> browserActions [ - browser - populate: #entity - icon: MooseIcons mooseAdd - entitled: 'Open' - with: [ - | directory | - directory := UITheme builder chooseDirectory: 'Import file structure from folder'. - DiskStore currentFileSystem / directory fullName ] -] - -{ #category : #building } -MooseMSEFilesExplorer >> buildBrowser [ - browser := GLMTabulator new. - browser title: 'MSE metamodels explorer'. - browser - column: #metamodels; - column: #details span: 4. - self browserActions. - browser transmit - to: #metamodels; - andShow: [ :a | self metamodelsOn: a ]. - browser transmit - from: #metamodels; - to: #details; - andShow: [ :a | self detailsOn: a ]. - ^ browser -] - -{ #category : #building } -MooseMSEFilesExplorer >> detailsOn: a [ - a dynamic - display: [:file | | repo string importer stacker | - repo := [ - string := file readStream contents asString. - importer := FMImporter new repository: (FMMetaRepository with: FMMetaRepository fm3). - importer fromString: string. - importer run. - importer repository asMetarepository ] on: Error do: [:err | nil ]. - stacker := GLMStacker new. - repo notNil ifTrue: [ - stacker aPane: #metaBrowser. - stacker transmit to: #metaBrowser; andShow: [:some | - some title: 'Explorer'. - some custom: (MooseMetaBrowser new computeChildrenHierarchy: repo; browser)] ]. - stacker aPane: #mse. - stacker transmit to: #mse; andShow: [:some | - some title: file path basename"(file path printWithDelimiter: $/)". - some text - display: [:x | self highlight: string ]]. - repo notNil ifTrue: [stacker startOn: repo] ifFalse: [stacker startOn: file] - ]. - -] - -{ #category : #building } -MooseMSEFilesExplorer >> highlight: text [ - ^ PPTextHighlighter new - parser: PPMSEGrammar new; - color: 'elementName' with: Color blue muchDarker; - bold: 'elementName'; - color: 'simpleName' with: Color blue muchDarker; - color: 'string' with: Color gray muchDarker; - color: 'number' with: Color gray muchDarker; - color: 'boolean' with: Color gray muchDarker; - highlight: text asText -] - -{ #category : #building } -MooseMSEFilesExplorer >> metamodelsOn: a [ - ^ (a list) - title: 'Meta-models'; - display: [ :folder | (folder entries select: [ :file | '*.mse' match: file basename ]) collect: #reference ]; - format: #basename -] diff --git a/src-archive/FmxNGCompatibility-PPExtensions/package.st b/src-archive/FmxNGCompatibility-PPExtensions/package.st deleted file mode 100644 index 0e4ac0786..000000000 --- a/src-archive/FmxNGCompatibility-PPExtensions/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'FamixCompatibility-PPExtensions' } diff --git a/src-archive/FmxStImporter/EntityClassFactory.class.st b/src-archive/FmxStImporter/EntityClassFactory.class.st deleted file mode 100644 index 65c34f5e6..000000000 --- a/src-archive/FmxStImporter/EntityClassFactory.class.st +++ /dev/null @@ -1,47 +0,0 @@ -Class { - #name : #EntityClassFactory, - #superclass : #Object, - #category : #FmxStImporter -} - -{ #category : #'as yet unclassified' } -EntityClassFactory >> classEntity [ - - ^ MiniStClass -] - -{ #category : #'as yet unclassified' } -EntityClassFactory >> comment [ - - ^ MiniStComment -] - -{ #category : #'as yet unclassified' } -EntityClassFactory >> inheritance [ - - ^ MiniStInheritance -] - -{ #category : #'as yet unclassified' } -EntityClassFactory >> method [ - - ^ MiniStMethod -] - -{ #category : #'as yet unclassified' } -EntityClassFactory >> namespace [ - - ^ MiniStNamespace -] - -{ #category : #'as yet unclassified' } -EntityClassFactory >> package [ - - ^ MiniStPackage -] - -{ #category : #'as yet unclassified' } -EntityClassFactory >> sourceAnchor [ - - ^ MiniStSourceAnchor -] diff --git a/src-archive/FmxStImporter/FmxStImporter.class.st b/src-archive/FmxStImporter/FmxStImporter.class.st deleted file mode 100644 index 8a586427f..000000000 --- a/src-archive/FmxStImporter/FmxStImporter.class.st +++ /dev/null @@ -1,252 +0,0 @@ -Class { - #name : #FmxStImporter, - #superclass : #SmalltalkImporter, - #instVars : [ - 'factory' - ], - #category : #FmxStImporter -} - -{ #category : #'private-entity-creation' } -FmxStImporter >> basicClassCreation: aClass [ - | class anchor | - class := classes at: aClass put: self factory classEntity new. - class name: (aClass name replaceAll: Character space with: $_). - class isStub: true. - importingContext shouldImportNamespace - ifTrue: [ class typeContainer: (self ensureNamespace: aClass environment) ]. - anchor := self factory sourceAnchor new - element: class; - pharoEntity: aClass; - yourself. - class sourceAnchor: anchor. - self addEntity: anchor. - ^ class -] - -{ #category : #'private-entity-creation' } -FmxStImporter >> createAttribute: name for: aClass [ - | attribute realName possibleTypes | - realName := self - nameForInstanceVariable: name - class: aClass. - attribute := (self scopeOfClass: aClass) - at: realName - bind: FmxStAttribute new. - attribute isStub: true. - attribute name: realName asSymbol. - importingContext shouldMergeClassAndMetaclass - ifTrue: [ attribute parentType: (self ensureClass: aClass instanceSide) ] - ifFalse: [ attribute parentType: (self ensureClass: aClass) ]. - attribute hasClassScope: aClass isMeta. - attribute beProtected. - "now we use RoelTyper to see a unique type can be retrieve for this attribute: " - importingContext shouldComputeTypeOfAttributes - ifTrue: [ - possibleTypes := (TypeCollector typeInstvar: name asSymbol ofClassWithLookup: aClass ) types. - possibleTypes size = 1 - ifTrue: [attribute declaredType: (self ensureClass: possibleTypes first theNonMetaClass) ]. - ]. - ^ attribute -] - -{ #category : #'private-entity-creation' } -FmxStImporter >> createClass: aClass [ - | class inheritance | - - importingContext shouldMergeClassAndMetaclass - ifFalse: [ class := self basicClassCreation: aClass ] - ifTrue: - [ aClass isMeta - ifTrue: [ class := self ensureClass: aClass soleInstance. classes at: aClass put: class ] - ifFalse: [ class := self basicClassCreation: aClass ] ]. - importingContext shouldImportPackage ifTrue: - [ class parentPackage: (self ensurePackage: (aClass package)) ]. - importingContext shouldImportInheritance ifTrue: - [ (aClass superclass ~~ nil and: - [ importingContext shouldMergeClassAndMetaclass - ifFalse: [ true ] - ifTrue: [ aClass isMeta not ] ]) - ifTrue: [ inheritance := self addEntity: self factory inheritance new. - inheritance superclass: (self ensureClass: aClass superclass). - inheritance subclass: class ] - ]. - aClass isMeta ifFalse: [ self ensureClass: aClass class ]. - importingContext shouldImportAttribute - ifTrue: - [aClass instVarNames - do: [:eachName | self ensureAttribute: eachName for: aClass]. - "since the classVar of a class are not the same as the classVar of the class class" - - "with latest pharo class classVar = class class classVar so we should not need that anymore" - aClass isMeta - ifTrue: [aClass soleInstance classVarNames - do: [:eachClassVarName | self ensureClassVarAttribute: eachClassVarName for: aClass soleInstance]] - ifFalse: [ aClass classVarNames - do: [:eachClassVarName | self ensureClassVarAttribute: eachClassVarName for: aClass]]]. - ^ class -] - -{ #category : #'private-entity-creation' } -FmxStImporter >> createClassVarAttribute: name for: aClass [ - "a classVar always belongs to the base class" - | attribute | - - attribute := FmxStAttribute new. - (self scopeOfClass: aClass) - at: name - bind: attribute. - (self scopeOfClass: aClass class) - at: name - bind: attribute. - attribute isStub: true. - attribute name: name asSymbol. - attribute parentType: (self ensureClass: aClass theNonMetaClass). - attribute hasClassScope: true. - attribute beSharedVariable. - attribute beProtected. - ^ attribute -] - -{ #category : #'private-entity-creation' } -FmxStImporter >> createGlobalVariable: name value: value [ - - | global declaredType | - global := globals - at: name - put: FmxStGlobalVariable new. - global name: name. - global declaredType: (self ensureClass: value class ). - ^ global -] - -{ #category : #'private-entity-creation' } -FmxStImporter >> createMethod: aCompiledMethod [ - | method thisClass anchor | - method := methods at: aCompiledMethod put: self factory method new. - method name: aCompiledMethod selector. - method isAbstract: false. - thisClass := aCompiledMethod methodClass. - method parentType: (self ensureClass: thisClass). - method signature: aCompiledMethod signature. - "here we have two possibilities for the parentPackage of the method: - => the method belong to a package extension, we should refer to this extending packages - => if not, we should not refer to package of the class" - "parentPackage := aCompiledMethod methodClass package." - aCompiledMethod methodClass extendingPackages - do: [ :aRPackage | - (aCompiledMethod isExtensionInPackage: aRPackage) - ifTrue: [ method parentPackage: (self ensurePackage: aRPackage) ] ]. - method hasClassScope: aCompiledMethod methodClass isMeta. - method - category: - (aCompiledMethod methodClass organization - categoryOfElement: aCompiledMethod selector). - method isPublic: true. - method timeStamp: aCompiledMethod timeStamp. - importingContext shouldImportMethodBody - ifTrue: [ | visitor | - visitor := FmxStMethodVisitor on: self. - visitor runWith: aCompiledMethod and: method ]. - anchor := self factory sourceAnchor new - element: method; - pharoEntity: aCompiledMethod; - yourself. - method sourceAnchor: anchor. - self addEntity: anchor. - ^ method -] - -{ #category : #'private-entity-creation' } -FmxStImporter >> createNamespace: aNamespace [ - - | namespace | - namespace := namespaces - at: aNamespace asString asSymbol - put: self factory namespace new. - namespace name: 'Smalltalk'. - ^namespace -] - -{ #category : #'private-entity-creation' } -FmxStImporter >> createPackage: aPackageModel [ - - | package | - package := packages - at: aPackageModel - put: self factory package new. - package name: aPackageModel name. - package isStub: true. - ^package -] - -{ #category : #'private-entity-creation' } -FmxStImporter >> createSpecialVariable: name forClass: aClass [ - - | attribute | - attribute := (self scopeOfClass: aClass) at: name bind: FmxStImplicitVariable new. - attribute name: name. - attribute container: (self ensureClass: aClass). - ^attribute -] - -{ #category : #'private-entity-creation' } -FmxStImporter >> createSpecialVariable: name forFamixMethod: aFamixMethod [ - - | attribute | - attribute := "(self scopeOfClass: aClass) at: name bind:" FmxStImplicitVariable new. - attribute name: name. - attribute parentBehaviouralEntity: aFamixMethod. - ^attribute -] - -{ #category : #'private-entity-creation' } -FmxStImporter >> createUnknownVariable: name [ - - | unknown | - unknown := globals - at: name - put: FmxStUnknownVariable new. - unknown name: name. - ^unknown -] - -{ #category : #'private-entity-creation' } -FmxStImporter >> factory [ - - ^ factory -] - -{ #category : #'private-entity-creation' } -FmxStImporter >> importClass: aClass [ - - | class comment | - importingContext shouldImportClass - ifTrue: - [class := self ensureClass: aClass. - class isStub: false. - importingContext shouldImportAttribute - ifTrue: [ class attributes do: [ :each | each isStub: false ] ]. - importingContext shouldImportPackage ifTrue: [ - class parentPackage isStub: false ]. - importingContext shouldImportSubclasses ifTrue: [aClass subclasses do: [:each | self ensureClass: each]]. - importingContext shouldImportMethod - ifTrue: - [aClass methods do: [:each | self ensureMethod: each]. - self checkAbstractClass: class]. - importingContext shouldImportComment - ifTrue: - [aClass hasComment - ifTrue: - [comment := self addEntity: self factory comment new. - comment content: aClass comment asString. - comment container: class]]. - aClass isMeta ifFalse: [self importClass: aClass class]] -] - -{ #category : #'private-entity-creation' } -FmxStImporter >> initialize [ - - super initialize. - factory := EntityClassFactory new. -] diff --git a/src-archive/FmxStImporter/FmxStImportingTest.class.st b/src-archive/FmxStImporter/FmxStImportingTest.class.st deleted file mode 100644 index a8b091c7f..000000000 --- a/src-archive/FmxStImporter/FmxStImportingTest.class.st +++ /dev/null @@ -1,39 +0,0 @@ -Class { - #name : #FmxStImportingTest, - #superclass : #TestCase, - #instVars : [ - 'importerTask', - 'model' - ], - #category : #FmxStImporter -} - -{ #category : #initialization } -FmxStImportingTest >> setUp [ - - super setUp. - - model := MooseModel new. - model metamodel: MiniSmalltalkGenerator metamodel. - importerTask := MoosePharoImporterTask new. - importerTask importingContext: (MooseImportingContext new - importPackage; - importClass; - importNamespace; - importMethod; - importInheritance; - yourself). - importerTask importerClass: FmxStImporter. - importerTask - model: model; - addFromPackagesNamed: #('AST-Core'); - runWithProgress. - model. - -] - -{ #category : #tests } -FmxStImportingTest >> testBasicImport [ - - self assert: model entities notEmpty -] diff --git a/src-archive/FmxStImporter/FmxStMethodVisitor.class.st b/src-archive/FmxStImporter/FmxStMethodVisitor.class.st deleted file mode 100644 index 5b30202f8..000000000 --- a/src-archive/FmxStImporter/FmxStMethodVisitor.class.st +++ /dev/null @@ -1,254 +0,0 @@ -Class { - #name : #FmxStMethodVisitor, - #superclass : #SmalltalkMethodVisitor, - #category : #FmxStImporter -} - -{ #category : #'visitor-double dispatching' } -FmxStMethodVisitor >> createAccessTo: aNamedEntity writing: isWriteAccess [ - | access | - - access := FmxStAccess new. - access isWrite: isWriteAccess ; variable: aNamedEntity ; accessor: self methodEntity. - ^ access -] - -{ #category : #'visitor-double dispatching' } -FmxStMethodVisitor >> createReferenceTo: aNamedEntity [ - | ref | - - ref := FmxStReference new. - ref source: self methodEntity ; target: (self resolveInstanceSide: aNamedEntity). - ^ ref -] - -{ #category : #'visitor-double dispatching' } -FmxStMethodVisitor >> extractCommentsFromNode: aSequenceNode [ - - | comment | - importer importingContext shouldImportComment - ifTrue: - [aSequenceNode comments - do: - [:eachComment | - comment := FmxStComment new. - comment content: (aSequenceNode source - copyFrom: eachComment start - to: eachComment stop) asString. - comment container: self methodEntity. - importer addEntity: comment]] -] - -{ #category : #'visitor-double dispatching' } -FmxStMethodVisitor >> matchGetter: aMethodNode [ - - | return attribute | - aMethodNode arguments isEmpty - ifTrue: - [aMethodNode body isSequence - ifTrue: - [aMethodNode body statements size = 1 - ifTrue: - [return := aMethodNode body statements first. - return isReturn - ifTrue: - [return value isVariable - ifTrue: - [attribute := methodScope - resolve: return value name - ifAbsent: nil. - attribute notNil - ifTrue: - [attribute class = FmxStAttribute ifTrue: [famixMethod kind: #getter]]]]]]] -] - -{ #category : #'visitor-double dispatching' } -FmxStMethodVisitor >> matchSetter: aMethodNode [ - - | assignment attribute | - aMethodNode arguments size = 1 - ifTrue: - [aMethodNode body isSequence - ifTrue: - [aMethodNode body statements size = 1 - ifTrue: - [assignment := aMethodNode body statements first. - assignment isReturn ifTrue: [assignment := assignment value]. - assignment isAssignment - ifTrue: - [attribute := methodScope - resolve: assignment variable name - ifAbsent: nil. - attribute notNil - ifTrue: - [attribute class = FmxStAttribute - ifTrue: - [assignment value isVariable - ifTrue: - [assignment value name = aMethodNode arguments first name - ifTrue: [famixMethod kind: #setter]]]]]]]] -] - -{ #category : #'visitor-double dispatching' } -FmxStMethodVisitor >> resolveInstanceSide: aNamedEntity [ - "We ensure that a reference to a metaclass is considered as a reference to the class itself" - - ((aNamedEntity isKindOf: FmxStClass) and: ['*_class' match: aNamedEntity name]) - ifTrue: [| className | - className := aNamedEntity name removeSuffix: '_class'. - ^ importer ensureClass: (Smalltalk at: className asSymbol) ] - ifFalse: [ ^ aNamedEntity ] -] - -{ #category : #'visitor-double dispatching' } -FmxStMethodVisitor >> visitAssignmentNode: anAssignmentNode [ - - | access | - importer importingContext shouldImportAccess - ifTrue: - [access := FmxStAccess new. - access isWrite: true. - access variable: (self resolve: anAssignmentNode variable name). - access accessor: self methodEntity. - importer addEntity: access]. - self extractCommentsFromNode: anAssignmentNode. - self visitNode: anAssignmentNode value -] - -{ #category : #'visitor-double dispatching' } -FmxStMethodVisitor >> visitBlockNode: aBlockNode [ - - | local | - importer importingContext shouldImportLocalVariable - ifTrue: - [aBlockNode arguments - do: - [:aVariableNode | - local := FmxStLocalVariable new. - local name: aVariableNode name asSymbol. - local parentBehaviouralEntity: self methodEntity. - importer addEntity: local. - methodScope - at: aVariableNode name - bind: local]]. - self extractCommentsFromNode: aBlockNode. "self visitArguments: aBlockNode arguments." - self visitNode: aBlockNode body -] - -{ #category : #'visitor-double dispatching' } -FmxStMethodVisitor >> visitMessageNode: aMessageNode [ - - | invocation | - importer importingContext shouldImportInvocation - ifTrue: - [invocation := FmxStInvocation new. - invocation sender: self methodEntity. - - invocation signature: (FAMIXNameResolver signatureFromSmalltalkSelectorOn: aMessageNode selector). - "invocation - setInvokes: - (FAMIXNameResolver signatureFromSmalltalkSelector: aMessageNode selector)." - aMessageNode receiver isVariable - ifTrue: - [invocation - receiver: (self resolve: aMessageNode receiver name)]. - "aMessageNode receiver isVariable - ifTrue: - [invocation - setReceivingVariable: (self resolve: aMessageNode receiver name)]. " - aMessageNode selector == #subclassResponsibility - ifTrue: [self methodEntity isAbstract: true]. - importer addEntity: invocation]. - (aMessageNode isCascaded not or: [aMessageNode isFirstCascaded]) - ifTrue: [self visitNode: aMessageNode receiver]. - importer importingContext shouldImportArgument - ifTrue: [aMessageNode arguments do: [:each | self visitNode: each]]. - self extractCommentsFromNode: aMessageNode -] - -{ #category : #'visitor-double dispatching' } -FmxStMethodVisitor >> visitMethodNode: aMethodNode [ - - importer importingContext shouldImportArgument - ifTrue: - [aMethodNode arguments - do: - [:aVariableNode | | argument | - argument := FmxStParameter new. - argument name: aVariableNode name asSymbol. - argument parentBehaviouralEntity: self methodEntity. - importer addEntity: argument. - methodScope - at: aVariableNode name - bind: argument]]. - self extractCommentsFromNode: aMethodNode. - self visitNode: aMethodNode body. - aMethodNode pragmas - do: [ :each | self visitNode: each ]. - - "recognize getters/setters/constructors/..." - self classifyMethodNode: aMethodNode -] - -{ #category : #'visitor-double dispatching' } -FmxStMethodVisitor >> visitPragmaNode: aPragmaNode [ - - - - | annotationInstance annotationType | - annotationType := self importer ensureAnnotationType: aPragmaNode. - annotationInstance := FmxStAnnotationInstance new. - "annotationInstance annotationType: annotationType." - self importer addEntity: annotationInstance. - annotationInstance annotatedEntity: self methodEntity. - aPragmaNode arguments doWithIndex: [:each :i | - | attribute | - attribute := FmxStAnnotationInstanceAttribute new. - attribute value: each value. - attribute parentAnnotationInstance: annotationInstance. - "attribute annotationTypeAttribute: (annotationInstance annotationType attributes at: i)." - self importer addEntity: attribute ] -] - -{ #category : #'visitor-double dispatching' } -FmxStMethodVisitor >> visitSequenceNode: aSequenceNode [ - "self visitArguments: aSequenceNode temporaries." - - | local | - importer importingContext shouldImportLocalVariable - ifTrue: - [aSequenceNode temporaries - do: - [:aVariableNode | - local := FmxStLocalVariable new. - local name: aVariableNode name asSymbol. - local parentBehaviouralEntity: self methodEntity. - importer addEntity: local. - methodScope - at: aVariableNode name - bind: local]]. - self extractCommentsFromNode: aSequenceNode. - aSequenceNode statements do: [:each | self visitNode: each] -] - -{ #category : #'visitor-double dispatching' } -FmxStMethodVisitor >> visitVariableNode: aVariableNode [ - | access namedEntity global | - - importer importingContext shouldImportAccess ifTrue: - [ - "Warning! Smalltalk is both a Namespace and a GlobalVariable. - By default the importer resolves Smalltalk to the namespace (for class and namespace creation). - When we access Smalltalk as a variable, we create an access to the SmalltalkGlobalVariable instead" - aVariableNode name = 'Smalltalk' - ifTrue: [ - global := importer ensureGlobalVariable: #SmalltalkGlobalVariable value: Smalltalk. - access := self createAccessTo: global writing: false] - ifFalse: [ - namedEntity := self resolve: aVariableNode name. - access := (namedEntity isKindOf: FmxStBehavior) - ifTrue: [ self createReferenceTo: namedEntity ] - ifFalse: [ self createAccessTo: namedEntity writing: false ] ]. - importer addEntity: access ]. - self extractCommentsFromNode: aVariableNode -] diff --git a/src-archive/FmxStImporter/package.st b/src-archive/FmxStImporter/package.st deleted file mode 100644 index 170dd5605..000000000 --- a/src-archive/FmxStImporter/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #FmxStImporter } diff --git a/src-archive/GT-Debugger-EventRecorder/DebugAction.extension.st b/src-archive/GT-Debugger-EventRecorder/DebugAction.extension.st deleted file mode 100644 index f3c6c90bc..000000000 --- a/src-archive/GT-Debugger-EventRecorder/DebugAction.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #DebugAction } - -{ #category : #'*GT-Debugger-EventRecorder' } -DebugAction >> asRecorderEvent [ - - ^ GTDebuggerRecorderDebugActionEvent fromDebugAction: self -] diff --git a/src-archive/GT-Debugger-EventRecorder/DebugActionAboutToExecute.extension.st b/src-archive/GT-Debugger-EventRecorder/DebugActionAboutToExecute.extension.st deleted file mode 100644 index 83e17b5e3..000000000 --- a/src-archive/GT-Debugger-EventRecorder/DebugActionAboutToExecute.extension.st +++ /dev/null @@ -1,9 +0,0 @@ -Extension { #name : #DebugActionAboutToExecute } - -{ #category : #'*GT-Debugger-EventRecorder' } -DebugActionAboutToExecute >> asRecorderEvent [ - - ^ (debuggingAction asRecorderEvent fromAnnouncement: self) - isExecuted: false; - yourself -] diff --git a/src-archive/GT-Debugger-EventRecorder/DebugActionExecuted.extension.st b/src-archive/GT-Debugger-EventRecorder/DebugActionExecuted.extension.st deleted file mode 100644 index ab746acc6..000000000 --- a/src-archive/GT-Debugger-EventRecorder/DebugActionExecuted.extension.st +++ /dev/null @@ -1,9 +0,0 @@ -Extension { #name : #DebugActionExecuted } - -{ #category : #'*GT-Debugger-EventRecorder' } -DebugActionExecuted >> asRecorderEvent [ - - ^ (debuggingAction asRecorderEvent fromAnnouncement: self) - isExecuted: true; - yourself -] diff --git a/src-archive/GT-Debugger-EventRecorder/GLMBrowserClosing.extension.st b/src-archive/GT-Debugger-EventRecorder/GLMBrowserClosing.extension.st deleted file mode 100644 index cf8555976..000000000 --- a/src-archive/GT-Debugger-EventRecorder/GLMBrowserClosing.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #GLMBrowserClosing } - -{ #category : #'*GT-Debugger-EventRecorder' } -GLMBrowserClosing >> asRecorderEvent [ - - ^ GTDebuggerRecorderClosingEvent fromAnnouncement: self -] diff --git a/src-archive/GT-Debugger-EventRecorder/GTChangeDebuggerAction.extension.st b/src-archive/GT-Debugger-EventRecorder/GTChangeDebuggerAction.extension.st deleted file mode 100644 index 215c15ae1..000000000 --- a/src-archive/GT-Debugger-EventRecorder/GTChangeDebuggerAction.extension.st +++ /dev/null @@ -1,13 +0,0 @@ -Extension { #name : #GTChangeDebuggerAction } - -{ #category : #'*GT-Debugger-EventRecorder' } -GTChangeDebuggerAction >> asRecorderEvent [ - - ^ GTDebuggerRecorderChangeDebuggerEvent fromDebugAction: self -] - -{ #category : #'*GT-Debugger-EventRecorder' } -GTChangeDebuggerAction >> debuggerClass [ - - ^ debuggerClass -] diff --git a/src-archive/GT-Debugger-EventRecorder/GTCodeDebugAction.extension.st b/src-archive/GT-Debugger-EventRecorder/GTCodeDebugAction.extension.st deleted file mode 100644 index 17b6e4d15..000000000 --- a/src-archive/GT-Debugger-EventRecorder/GTCodeDebugAction.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #GTCodeDebugAction } - -{ #category : #'*GT-Debugger-EventRecorder' } -GTCodeDebugAction >> asRecorderEvent [ - - ^ GTDebuggerRecorderCodeDebugActionEvent fromDebugAction: self -] diff --git a/src-archive/GT-Debugger-EventRecorder/GTDebuggerBrowserUpdateRequest.extension.st b/src-archive/GT-Debugger-EventRecorder/GTDebuggerBrowserUpdateRequest.extension.st deleted file mode 100644 index 28e32dea8..000000000 --- a/src-archive/GT-Debugger-EventRecorder/GTDebuggerBrowserUpdateRequest.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #GTDebuggerBrowserUpdateRequest } - -{ #category : #'*GT-Debugger-EventRecorder' } -GTDebuggerBrowserUpdateRequest >> asRecorderEvent [ - - ^ debugActionExecutedAnnouncement asRecorderEvent -] diff --git a/src-archive/GT-Debugger-EventRecorder/GTDebuggerEventCollector.class.st b/src-archive/GT-Debugger-EventRecorder/GTDebuggerEventCollector.class.st deleted file mode 100644 index 93ccfe607..000000000 --- a/src-archive/GT-Debugger-EventRecorder/GTDebuggerEventCollector.class.st +++ /dev/null @@ -1,49 +0,0 @@ -" -I represent a GTEventCollector for GTDebugger application. -" -Class { - #name : #GTDebuggerEventCollector, - #superclass : #GTEventCollector, - #category : #'GT-Debugger-EventRecorder-Base' -} - -{ #category : #initialization } -GTDebuggerEventCollector >> collectDataFrom: aDebugger [ - self occupant: aDebugger; - category: #gtdebugger; - register; - linkToDebugger: aDebugger; - recordDebuggerOpenEventFor: aDebugger. - - aDebugger announcer announce: (GTGenericStackDebuggerSelectionChanged forDebugger: aDebugger). -] - -{ #category : #initialization } -GTDebuggerEventCollector >> linkToDebugger: aDebugger [ - - aDebugger announcer when: Announcement send: #recordAnnouncementIgnoreExecuted: to: self -] - -{ #category : #events } -GTDebuggerEventCollector >> recordAnnouncement: anAnnouncement [ - | event | - Privacy sendDiagnosticsAndUsageData ifFalse: [ ^ self ]. - (anAnnouncement respondsTo: #asRecorderEvent) ifTrue: [ - event := anAnnouncement asRecorderEvent. - self add: event. - GTEventRecorder uniqueInstance announcer announce: (GTDebuggerRecorderEventRecorded forEvent: event). ] -] - -{ #category : #events } -GTDebuggerEventCollector >> recordAnnouncementIgnoreExecuted: anAnnouncement [ - (anAnnouncement class ~= DebugActionExecuted) ifTrue: [ self recordAnnouncement: anAnnouncement ] -] - -{ #category : #events } -GTDebuggerEventCollector >> recordDebuggerOpenEventFor: aDebugger [ - | event | - Privacy sendDiagnosticsAndUsageData ifFalse: [ ^ self ]. - event := GTDebuggerRecorderOpenEvent new fromDebugger: aDebugger. - self add: event. - GTEventRecorder uniqueInstance announcer announce: (GTDebuggerRecorderEventRecorded forEvent: event). -] diff --git a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderChangeDebuggerEvent.class.st b/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderChangeDebuggerEvent.class.st deleted file mode 100644 index 9fbbd1a5b..000000000 --- a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderChangeDebuggerEvent.class.st +++ /dev/null @@ -1,46 +0,0 @@ -" -I model the debugging action of changing the debugger (e.g. stack debugger <-> bytecode debugger). - -Corresponding debug action: -GTChangeDebuggerAction -" -Class { - #name : #GTDebuggerRecorderChangeDebuggerEvent, - #superclass : #GTDebuggerRecorderDebugActionEvent, - #category : #'GT-Debugger-EventRecorder-Events' -} - -{ #category : #private } -GTDebuggerRecorderChangeDebuggerEvent >> addNewWindowHashFor: aPresentation [ - - aPresentation window ifNotNil: [ :aWindow | - self infoAt: #newWindowHash put: aWindow identityHash ] -] - -{ #category : #accessing } -GTDebuggerRecorderChangeDebuggerEvent >> debuggerClass [ - ^ self infoAt: #debuggerClass -] - -{ #category : #initialization } -GTDebuggerRecorderChangeDebuggerEvent >> fromDebugAction: aDebugAction [ - super fromDebugAction: aDebugAction. - self infoAt: #debuggerClass put: aDebugAction debuggerClass name. - aDebugAction newDebugger isNotNil ifTrue: [ self addNewWindowHashFor: aDebugAction newDebugger ] -] - -{ #category : #testing } -GTDebuggerRecorderChangeDebuggerEvent >> isChangeDebugger [ - ^ true -] - -{ #category : #accessing } -GTDebuggerRecorderChangeDebuggerEvent >> newWindowHash [ - ^ self infoAt: #newWindowHash -] - -{ #category : #printing } -GTDebuggerRecorderChangeDebuggerEvent >> printOn: aStream [ - aStream nextPutAll: 'Change to '. - aStream nextPutAll: self debuggerClass asString -] diff --git a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderClosingEvent.class.st b/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderClosingEvent.class.st deleted file mode 100644 index 36216ea0a..000000000 --- a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderClosingEvent.class.st +++ /dev/null @@ -1,30 +0,0 @@ -" -I model the action of closing the debugger. -" -Class { - #name : #GTDebuggerRecorderClosingEvent, - #superclass : #GTDebuggerRecorderEvent, - #category : #'GT-Debugger-EventRecorder-Events' -} - -{ #category : #initialization } -GTDebuggerRecorderClosingEvent >> fromAnnouncement: anAnnouncement [ - super fromAnnouncement: anAnnouncement. - - self addWindowHashFor: anAnnouncement presentation. -] - -{ #category : #testing } -GTDebuggerRecorderClosingEvent >> isCloseDebugger [ - ^ true -] - -{ #category : #printing } -GTDebuggerRecorderClosingEvent >> printOn: stream [ - stream nextPutAll: 'Close debugger' -] - -{ #category : #accessing } -GTDebuggerRecorderClosingEvent >> windowHash [ - ^ self infoAt: #windowHash ifAbsent: [ nil ] -] diff --git a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderCodeDebugActionEvent.class.st b/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderCodeDebugActionEvent.class.st deleted file mode 100644 index 73d978235..000000000 --- a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderCodeDebugActionEvent.class.st +++ /dev/null @@ -1,22 +0,0 @@ -" -I model the debugging action of selecting an action in the code pane of the debugger. - -Corresponding debug action: -GTCodeDebugAction -" -Class { - #name : #GTDebuggerRecorderCodeDebugActionEvent, - #superclass : #GTDebuggerRecorderDebugActionEvent, - #category : #'GT-Debugger-EventRecorder-Events' -} - -{ #category : #initialization } -GTDebuggerRecorderCodeDebugActionEvent >> fromDebugAction: aDebugAction [ - super fromDebugAction: aDebugAction. - self infoAt: #selectionInterval put: aDebugAction codePresentation selectionInterval. -] - -{ #category : #accessing } -GTDebuggerRecorderCodeDebugActionEvent >> selectionInterval [ - ^ self infoAt: #selectionInterval -] diff --git a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderDebugActionEvent.class.st b/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderDebugActionEvent.class.st deleted file mode 100644 index fa5c7cda2..000000000 --- a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderDebugActionEvent.class.st +++ /dev/null @@ -1,100 +0,0 @@ -" -I model the debugging actions in the debugger. -" -Class { - #name : #GTDebuggerRecorderDebugActionEvent, - #superclass : #GTDebuggerRecorderEvent, - #instVars : [ - 'isExecuted' - ], - #category : #'GT-Debugger-EventRecorder-Events' -} - -{ #category : #'instance creation' } -GTDebuggerRecorderDebugActionEvent class >> fromDebugAction: aDebugAction [ - - ^ self new fromDebugAction: aDebugAction -] - -{ #category : #comparing } -GTDebuggerRecorderDebugActionEvent >> = otherGTDebuggerRecorderDebugActionEvent [ - ^ (super = otherGTDebuggerRecorderDebugActionEvent) - and: [ self isExecuted = otherGTDebuggerRecorderDebugActionEvent isExecuted ] -] - -{ #category : #accessing } -GTDebuggerRecorderDebugActionEvent >> debugActionClass [ - ^ self infoAt: #debugActionClass -] - -{ #category : #initialization } -GTDebuggerRecorderDebugActionEvent >> fromDebugAction: aDebugAction [ - self infoAt: #debugActionClass put: aDebugAction class name. - self infoAt: #methodClass putHashForText: aDebugAction currentContext methodClass name. - self infoAt: #methodSelector putHashForText: aDebugAction currentContext methodSelector. - self infoAt: #pc put: aDebugAction currentContext pc. - self infoAt: #nextInstruction putHashForText: aDebugAction currentContext peekInstruction asString. - self addWindowHashFor: aDebugAction debugger. -] - -{ #category : #comparing } -GTDebuggerRecorderDebugActionEvent >> hash [ - ^ super hash bitXor: self isExecuted hash -] - -{ #category : #testing } -GTDebuggerRecorderDebugActionEvent >> isAboutToExecute [ - ^ self isExecuted not -] - -{ #category : #testing } -GTDebuggerRecorderDebugActionEvent >> isDebugAction [ - ^ true -] - -{ #category : #testing } -GTDebuggerRecorderDebugActionEvent >> isExecuted [ - ^ isExecuted -] - -{ #category : #testing } -GTDebuggerRecorderDebugActionEvent >> isExecuted: aBoolean [ - isExecuted := aBoolean -] - -{ #category : #accessing } -GTDebuggerRecorderDebugActionEvent >> methodClass [ - ^ self infoAt: #methodClass -] - -{ #category : #accessing } -GTDebuggerRecorderDebugActionEvent >> methodSelector [ - ^ self infoAt: #methodSelector -] - -{ #category : #accessing } -GTDebuggerRecorderDebugActionEvent >> nextInstruction [ - ^ self infoAt: #nextInstruction -] - -{ #category : #accessing } -GTDebuggerRecorderDebugActionEvent >> pc [ - ^ self infoAt: #pc -] - -{ #category : #printing } -GTDebuggerRecorderDebugActionEvent >> printOn: aStream [ - | actionClass label | - - actionClass := self debugActionClass asSymbol asClass. - label := actionClass new label. - label ifNotEmpty: [ aStream nextPutAll: label ] ifEmpty: [ super printOn: aStream ]. - self isExecuted - ifTrue: [ aStream nextPutAll: ' (executed)' ] - ifFalse: [ aStream nextPutAll: ' (about to execute)' ] -] - -{ #category : #accessing } -GTDebuggerRecorderDebugActionEvent >> windowHash [ - ^ self infoAt: #windowHash ifAbsent: [ nil ] -] diff --git a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderEvent.class.st b/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderEvent.class.st deleted file mode 100644 index 3cfc5b7f1..000000000 --- a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderEvent.class.st +++ /dev/null @@ -1,62 +0,0 @@ -" -I am the root class for representing usage data generated by GTDebugger. -All events have a timestamp. -" -Class { - #name : #GTDebuggerRecorderEvent, - #superclass : #GTBasicRecorderEvent, - #category : #'GT-Debugger-EventRecorder-Events' -} - -{ #category : #'instance creation' } -GTDebuggerRecorderEvent class >> fromAnnouncement: anAnnouncement [ - - ^ self new fromAnnouncement: anAnnouncement -] - -{ #category : #accessing } -GTDebuggerRecorderEvent >> addWindowHashFor: aPresentation [ - - aPresentation window ifNotNil: [ :aWindow | - self infoAt: #windowHash put: aWindow identityHash ] -] - -{ #category : #initialization } -GTDebuggerRecorderEvent >> fromAnnouncement: anAnnouncement [ - -] - -{ #category : #testing } -GTDebuggerRecorderEvent >> isChangeDebugger [ - ^ false -] - -{ #category : #testing } -GTDebuggerRecorderEvent >> isCloseDebugger [ - ^ false -] - -{ #category : #testing } -GTDebuggerRecorderEvent >> isDebugAction [ - ^ false -] - -{ #category : #testing } -GTDebuggerRecorderEvent >> isInspectorSelectionChange [ - ^ false -] - -{ #category : #testing } -GTDebuggerRecorderEvent >> isOpenDebugger [ - ^ false -] - -{ #category : #testing } -GTDebuggerRecorderEvent >> isOpenOrCloseDebugger [ - ^ self isOpenDebugger or: [ self isCloseDebugger ] -] - -{ #category : #testing } -GTDebuggerRecorderEvent >> isStackSelectionChange [ - ^ false -] diff --git a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderEventRecorded.class.st b/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderEventRecorded.class.st deleted file mode 100644 index 511f61d30..000000000 --- a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderEventRecorded.class.st +++ /dev/null @@ -1,28 +0,0 @@ -" -I am an event that is sent after an action in the debugger was recorded. -" -Class { - #name : #GTDebuggerRecorderEventRecorded, - #superclass : #Announcement, - #instVars : [ - 'recordedEvent' - ], - #category : #'GT-Debugger-EventRecorder-Base' -} - -{ #category : #'instance creation' } -GTDebuggerRecorderEventRecorded class >> forEvent: aRecorderEvent [ - ^ self new - recordedEvent: aRecorderEvent; - yourself. -] - -{ #category : #accessing } -GTDebuggerRecorderEventRecorded >> recordedEvent [ - ^ recordedEvent -] - -{ #category : #accessing } -GTDebuggerRecorderEventRecorded >> recordedEvent: aRecorderEvent [ - recordedEvent := aRecorderEvent -] diff --git a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderGTRunToSelectionEvent.class.st b/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderGTRunToSelectionEvent.class.st deleted file mode 100644 index 246341d0d..000000000 --- a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderGTRunToSelectionEvent.class.st +++ /dev/null @@ -1,22 +0,0 @@ -" -I model the Run To Selection debugging action in a GTDebugger. - -Corresponding debug action: -GTRunToSelectionDebugAction -" -Class { - #name : #GTDebuggerRecorderGTRunToSelectionEvent, - #superclass : #GTDebuggerRecorderDebugActionEvent, - #category : #'GT-Debugger-EventRecorder-Events' -} - -{ #category : #initialization } -GTDebuggerRecorderGTRunToSelectionEvent >> fromDebugAction: aDebugAction [ - super fromDebugAction: aDebugAction. - self infoAt: #selectionInterval put: aDebugAction debugger selectionInterval. -] - -{ #category : #accessing } -GTDebuggerRecorderGTRunToSelectionEvent >> selectionInterval [ - ^ self infoAt: #selectionInterval -] diff --git a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderGlamourWrapperEvent.class.st b/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderGlamourWrapperEvent.class.st deleted file mode 100644 index fd52487b1..000000000 --- a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderGlamourWrapperEvent.class.st +++ /dev/null @@ -1,34 +0,0 @@ -" -I model the wrapped glamour actions in a GTDebugger. - -Corresponding debug action: -GTGlamourWrapperDebuggingAction -" -Class { - #name : #GTDebuggerRecorderGlamourWrapperEvent, - #superclass : #GTDebuggerRecorderDebugActionEvent, - #category : #'GT-Debugger-EventRecorder-Events' -} - -{ #category : #initialization } -GTDebuggerRecorderGlamourWrapperEvent >> fromDebugAction: aDebugAction [ - self flag: 'Find a better way to get type of action'. - super fromDebugAction: aDebugAction. - self infoAt: #glamourActionTitle put: aDebugAction asGlamourAction title. - self infoAt: #selectionInterval put: aDebugAction debugger selectionInterval. -] - -{ #category : #accessing } -GTDebuggerRecorderGlamourWrapperEvent >> glamourActionTitle [ - ^ self infoAt: #glamourActionTitle -] - -{ #category : #printing } -GTDebuggerRecorderGlamourWrapperEvent >> printOn: aStream [ - aStream nextPutAll: self glamourActionTitle asString -] - -{ #category : #accessing } -GTDebuggerRecorderGlamourWrapperEvent >> selectionInterval [ - ^ self infoAt: #selectionInterval -] diff --git a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderGoAndInspectBytecodeEvent.class.st b/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderGoAndInspectBytecodeEvent.class.st deleted file mode 100644 index 0cb6ff984..000000000 --- a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderGoAndInspectBytecodeEvent.class.st +++ /dev/null @@ -1,29 +0,0 @@ -" -I model the Go and Inspect debugging action in a GTBytecodeDebugger. - -Corresponding debug action: -GTGoAndInspectBytecodeDebugAction -" -Class { - #name : #GTDebuggerRecorderGoAndInspectBytecodeEvent, - #superclass : #GTDebuggerRecorderDebugActionEvent, - #category : #'GT-Debugger-EventRecorder-Events' -} - -{ #category : #accessing } -GTDebuggerRecorderGoAndInspectBytecodeEvent >> bytecodePosition [ - ^ self infoAt: #bytecodePosition -] - -{ #category : #initialization } -GTDebuggerRecorderGoAndInspectBytecodeEvent >> fromDebugAction: aDebugAction [ - super fromDebugAction: aDebugAction. - self infoAt: #selectionInterval put: aDebugAction debugger bytecodePresentation selection sourceInterval. - self infoAt: #bytecodePosition put: (aDebugAction debugger currentContext method symbolicBytecodes - indexOf: aDebugAction debugger bytecodePresentation selection ifAbsent: [-1]). -] - -{ #category : #accessing } -GTDebuggerRecorderGoAndInspectBytecodeEvent >> selectionInterval [ - ^ self infoAt: #selectionInterval -] diff --git a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderInspectorSelectionChangedEvent.class.st b/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderInspectorSelectionChangedEvent.class.st deleted file mode 100644 index 557d5229f..000000000 --- a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderInspectorSelectionChangedEvent.class.st +++ /dev/null @@ -1,43 +0,0 @@ -" -I model the action of changing the selection in the inspector pane of the debugger. -" -Class { - #name : #GTDebuggerRecorderInspectorSelectionChangedEvent, - #superclass : #GTDebuggerRecorderEvent, - #category : #'GT-Debugger-EventRecorder-Events' -} - -{ #category : #initialization } -GTDebuggerRecorderInspectorSelectionChangedEvent >> fromAnnouncement: anAnnouncement [ - super fromAnnouncement: anAnnouncement. - - anAnnouncement selection ifNotNil: [ - self infoAt: #variableName putHashForText: anAnnouncement selection key asString. - self infoAt: #variableValueClass putHashForText: anAnnouncement selection value class name ]. - self addWindowHashFor: anAnnouncement debugger. -] - -{ #category : #testing } -GTDebuggerRecorderInspectorSelectionChangedEvent >> isInspectorSelectionChange [ - ^ true -] - -{ #category : #printing } -GTDebuggerRecorderInspectorSelectionChangedEvent >> printOn: aStream [ - aStream nextPutAll: 'Inspector selection change' -] - -{ #category : #accessing } -GTDebuggerRecorderInspectorSelectionChangedEvent >> variableName [ - ^ self infoAt: #variableName ifAbsent: [ nil ] -] - -{ #category : #accessing } -GTDebuggerRecorderInspectorSelectionChangedEvent >> variableValueClass [ - ^ self infoAt: #variableValueClass ifAbsent: [ nil ] -] - -{ #category : #accessing } -GTDebuggerRecorderInspectorSelectionChangedEvent >> windowHash [ - ^ self infoAt: #windowHash ifAbsent: [ nil ] -] diff --git a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderMessageSendEvent.class.st b/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderMessageSendEvent.class.st deleted file mode 100644 index 99f4ff422..000000000 --- a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderMessageSendEvent.class.st +++ /dev/null @@ -1,28 +0,0 @@ -" -I model the debugging actions that send a message to a receiver in the debugger. - -Corresponding debug action: -MessageSendDebugAction -" -Class { - #name : #GTDebuggerRecorderMessageSendEvent, - #superclass : #GTDebuggerRecorderDebugActionEvent, - #category : #'GT-Debugger-EventRecorder-Events' -} - -{ #category : #initialization } -GTDebuggerRecorderMessageSendEvent >> fromDebugAction: aDebugAction [ - super fromDebugAction: aDebugAction. - self infoAt: #selector put: aDebugAction selector. -] - -{ #category : #printing } -GTDebuggerRecorderMessageSendEvent >> printOn: stream [ - stream nextPutAll: 'Message send: '. - stream nextPutAll: self selector. -] - -{ #category : #accessing } -GTDebuggerRecorderMessageSendEvent >> selector [ - ^ self infoAt: #selector -] diff --git a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderOpenEvent.class.st b/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderOpenEvent.class.st deleted file mode 100644 index ef272ef1c..000000000 --- a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderOpenEvent.class.st +++ /dev/null @@ -1,74 +0,0 @@ -" -I model the action of opening the debugger. -" -Class { - #name : #GTDebuggerRecorderOpenEvent, - #superclass : #GTDebuggerRecorderEvent, - #category : #'GT-Debugger-EventRecorder-Events' -} - -{ #category : #'instance creation' } -GTDebuggerRecorderOpenEvent class >> fromDebugger: aDebugger [ - - ^ self new fromDebugger: aDebugger -] - -{ #category : #accessing } -GTDebuggerRecorderOpenEvent >> addSourceFor: aDebugger [ - (Privacy sendSourceCode and: [ self isTitleAKernelException: aDebugger title ]) ifTrue: [ self infoAt: #source put: aDebugger currentContext sourceCode ]. -] - -{ #category : #accessing } -GTDebuggerRecorderOpenEvent >> addTitleFor: aDebugger [ - (Privacy sendEntityNames or: [ self isTitleAKernelException: aDebugger title ]) ifTrue: [ self infoAt: #title put: aDebugger title ]. -] - -{ #category : #accessing } -GTDebuggerRecorderOpenEvent >> debuggerClass [ - ^ self infoAt: #debuggerClass -] - -{ #category : #initialization } -GTDebuggerRecorderOpenEvent >> fromDebugger: aDebugger [ - - self infoAt: #debuggerClass put: aDebugger class name. - self addWindowHashFor: aDebugger. - self addTitleFor: aDebugger. - self addSourceFor: aDebugger. -] - -{ #category : #initialization } -GTDebuggerRecorderOpenEvent >> initialize [ - super initialize. - self initializeObfuscated. -] - -{ #category : #testing } -GTDebuggerRecorderOpenEvent >> isOpenDebugger [ - ^ true -] - -{ #category : #private } -GTDebuggerRecorderOpenEvent >> isTitleAKernelException: aString [ - ^ (#Kernel asPackage classTagNamed: #Exceptions) classes anySatisfy: [ :e | e name == aString asSymbol ] -] - -{ #category : #printing } -GTDebuggerRecorderOpenEvent >> printOn: stream [ - stream nextPutAll: 'Open debugger' -] - -{ #category : #accessing } -GTDebuggerRecorderOpenEvent >> source [ - ^ self infoAt: #source ifAbsent: [ nil ] -] - -{ #category : #accessing } -GTDebuggerRecorderOpenEvent >> title [ - ^ self infoAt: #title ifAbsent: [ nil ] -] - -{ #category : #accessing } -GTDebuggerRecorderOpenEvent >> windowHash [ - ^ self infoAt: #windowHash ifAbsent: [ nil ] -] diff --git a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderResumeEvent.class.st b/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderResumeEvent.class.st deleted file mode 100644 index 19c0e1d34..000000000 --- a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderResumeEvent.class.st +++ /dev/null @@ -1,42 +0,0 @@ -" -I model the Proceed debugging action in a debugger. - -Corresponding debug action: -ResumeDebugAction -" -Class { - #name : #GTDebuggerRecorderResumeEvent, - #superclass : #GTDebuggerRecorderDebugActionEvent, - #category : #'GT-Debugger-EventRecorder-Events' -} - -{ #category : #initialization } -GTDebuggerRecorderResumeEvent >> fromDebugAction: aDebugAction [ - self infoAt: #debugActionClass put: aDebugAction class name. - aDebugAction currentContext isDead ifFalse: [ - self infoAt: #methodClass putHashForText: aDebugAction currentContext methodClass name. - self infoAt: #methodSelector putHashForText: aDebugAction currentContext methodSelector. - self infoAt: #pc put: aDebugAction currentContext pc. - self infoAt: #nextInstruction putHashForText: aDebugAction currentContext peekInstruction asString ]. - self addWindowHashFor: aDebugAction debugger. -] - -{ #category : #accessing } -GTDebuggerRecorderResumeEvent >> methodClass [ - ^ self infoAt: #methodClass ifAbsent: [ nil ] -] - -{ #category : #accessing } -GTDebuggerRecorderResumeEvent >> methodSelector [ - ^ self infoAt: #methodSelector ifAbsent: [ nil ] -] - -{ #category : #accessing } -GTDebuggerRecorderResumeEvent >> nextInstruction [ - ^ self infoAt: #nextInstruction ifAbsent: [ nil ] -] - -{ #category : #accessing } -GTDebuggerRecorderResumeEvent >> pc [ - ^ self infoAt: #pc ifAbsent: [ nil ] -] diff --git a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderRunToSelectionEvent.class.st b/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderRunToSelectionEvent.class.st deleted file mode 100644 index b04571aa2..000000000 --- a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderRunToSelectionEvent.class.st +++ /dev/null @@ -1,22 +0,0 @@ -" -I model the Run To Selection debugging action in a debugger. - -Corresponding debug action: -RunToSelectionDebugAction -" -Class { - #name : #GTDebuggerRecorderRunToSelectionEvent, - #superclass : #GTDebuggerRecorderDebugActionEvent, - #category : #'GT-Debugger-EventRecorder-Events' -} - -{ #category : #initialization } -GTDebuggerRecorderRunToSelectionEvent >> fromDebugAction: aDebugAction [ - super fromDebugAction: aDebugAction. - self infoAt: #selectionInterval put: aDebugAction debugger code getSelection. -] - -{ #category : #accessing } -GTDebuggerRecorderRunToSelectionEvent >> selectionInterval [ - ^ self infoAt: #selectionInterval -] diff --git a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderStackSelectionChangedEvent.class.st b/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderStackSelectionChangedEvent.class.st deleted file mode 100644 index c6c3564f3..000000000 --- a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderStackSelectionChangedEvent.class.st +++ /dev/null @@ -1,55 +0,0 @@ -" -I model the action of changing the selection in the stack pane of the debugger. -" -Class { - #name : #GTDebuggerRecorderStackSelectionChangedEvent, - #superclass : #GTDebuggerRecorderEvent, - #category : #'GT-Debugger-EventRecorder-Events' -} - -{ #category : #initialization } -GTDebuggerRecorderStackSelectionChangedEvent >> fromAnnouncement: anAnnouncement [ - super fromAnnouncement: anAnnouncement. - - self infoAt: #methodClass putHashForText: anAnnouncement newContext methodClass name. - self infoAt: #methodSelector putHashForText: anAnnouncement newContext methodSelector. - self infoAt: #pc put: anAnnouncement newContext pc. - self infoAt: #stackPosition put: (anAnnouncement debugger session stack indexOf: anAnnouncement newContext ifAbsent: [-1]). - "self infoAt: #nextInstruction putHashForText: anAnnouncement newContext peekInstruction asString." - self addWindowHashFor: anAnnouncement debugger. -] - -{ #category : #testing } -GTDebuggerRecorderStackSelectionChangedEvent >> isStackSelectionChange [ - ^ true -] - -{ #category : #accessing } -GTDebuggerRecorderStackSelectionChangedEvent >> methodClass [ - ^ self infoAt: #methodClass -] - -{ #category : #accessing } -GTDebuggerRecorderStackSelectionChangedEvent >> methodSelector [ - ^ self infoAt: #methodSelector -] - -{ #category : #accessing } -GTDebuggerRecorderStackSelectionChangedEvent >> pc [ - ^ self infoAt: #pc -] - -{ #category : #printing } -GTDebuggerRecorderStackSelectionChangedEvent >> printOn: aStream [ - aStream nextPutAll: 'Stack selection change' -] - -{ #category : #accessing } -GTDebuggerRecorderStackSelectionChangedEvent >> stackPosition [ - ^ self infoAt: #stackPosition -] - -{ #category : #accessing } -GTDebuggerRecorderStackSelectionChangedEvent >> windowHash [ - ^ self infoAt: #windowHash ifAbsent: [ nil ] -] diff --git a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderStepToBytecodeEvent.class.st b/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderStepToBytecodeEvent.class.st deleted file mode 100644 index 5be83a949..000000000 --- a/src-archive/GT-Debugger-EventRecorder/GTDebuggerRecorderStepToBytecodeEvent.class.st +++ /dev/null @@ -1,29 +0,0 @@ -" -I model the Step to bytecode debugging action in a GTBytecodeDebugger. - -Corresponding debug action: -GTStepToBytecodeDebugAction -" -Class { - #name : #GTDebuggerRecorderStepToBytecodeEvent, - #superclass : #GTDebuggerRecorderDebugActionEvent, - #category : #'GT-Debugger-EventRecorder-Events' -} - -{ #category : #accessing } -GTDebuggerRecorderStepToBytecodeEvent >> bytecodePosition [ - ^ self infoAt: #bytecodePosition -] - -{ #category : #initialization } -GTDebuggerRecorderStepToBytecodeEvent >> fromDebugAction: aDebugAction [ - super fromDebugAction: aDebugAction. - self infoAt: #selectionInterval put: aDebugAction debugger bytecodePresentation selection sourceInterval. - self infoAt: #bytecodePosition put: (aDebugAction debugger currentContext method symbolicBytecodes - indexOf: aDebugAction debugger bytecodePresentation selection ifAbsent: [-1]). -] - -{ #category : #accessing } -GTDebuggerRecorderStepToBytecodeEvent >> selectionInterval [ - ^ self infoAt: #selectionInterval -] diff --git a/src-archive/GT-Debugger-EventRecorder/GTGenericStackDebuggerSelectionChanged.extension.st b/src-archive/GT-Debugger-EventRecorder/GTGenericStackDebuggerSelectionChanged.extension.st deleted file mode 100644 index 6d9ebb35f..000000000 --- a/src-archive/GT-Debugger-EventRecorder/GTGenericStackDebuggerSelectionChanged.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #GTGenericStackDebuggerSelectionChanged } - -{ #category : #'*GT-Debugger-EventRecorder' } -GTGenericStackDebuggerSelectionChanged >> asRecorderEvent [ - - ^ GTDebuggerRecorderStackSelectionChangedEvent fromAnnouncement: self -] diff --git a/src-archive/GT-Debugger-EventRecorder/GTGlamourWrapperDebuggingAction.extension.st b/src-archive/GT-Debugger-EventRecorder/GTGlamourWrapperDebuggingAction.extension.st deleted file mode 100644 index be8a986be..000000000 --- a/src-archive/GT-Debugger-EventRecorder/GTGlamourWrapperDebuggingAction.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #GTGlamourWrapperDebuggingAction } - -{ #category : #'*GT-Debugger-EventRecorder' } -GTGlamourWrapperDebuggingAction >> asRecorderEvent [ - - ^ GTDebuggerRecorderGlamourWrapperEvent fromDebugAction: self -] diff --git a/src-archive/GT-Debugger-EventRecorder/GTGoAndInspectBytecodeDebugAction.extension.st b/src-archive/GT-Debugger-EventRecorder/GTGoAndInspectBytecodeDebugAction.extension.st deleted file mode 100644 index 683deb136..000000000 --- a/src-archive/GT-Debugger-EventRecorder/GTGoAndInspectBytecodeDebugAction.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #GTGoAndInspectBytecodeDebugAction } - -{ #category : #'*GT-Debugger-EventRecorder' } -GTGoAndInspectBytecodeDebugAction >> asRecorderEvent [ - - ^ GTDebuggerRecorderGoAndInspectBytecodeEvent fromDebugAction: self -] diff --git a/src-archive/GT-Debugger-EventRecorder/GTRunToSelectionDebugAction.extension.st b/src-archive/GT-Debugger-EventRecorder/GTRunToSelectionDebugAction.extension.st deleted file mode 100644 index a4cf4725c..000000000 --- a/src-archive/GT-Debugger-EventRecorder/GTRunToSelectionDebugAction.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #GTRunToSelectionDebugAction } - -{ #category : #'*GT-Debugger-EventRecorder' } -GTRunToSelectionDebugAction >> asRecorderEvent [ - - ^ GTDebuggerRecorderGTRunToSelectionEvent fromDebugAction: self -] diff --git a/src-archive/GT-Debugger-EventRecorder/GTStepToBytecodeDebugAction.extension.st b/src-archive/GT-Debugger-EventRecorder/GTStepToBytecodeDebugAction.extension.st deleted file mode 100644 index bce5e8573..000000000 --- a/src-archive/GT-Debugger-EventRecorder/GTStepToBytecodeDebugAction.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #GTStepToBytecodeDebugAction } - -{ #category : #'*GT-Debugger-EventRecorder' } -GTStepToBytecodeDebugAction >> asRecorderEvent [ - - ^ GTDebuggerRecorderStepToBytecodeEvent fromDebugAction: self -] diff --git a/src-archive/GT-Debugger-EventRecorder/MessageSendDebugAction.extension.st b/src-archive/GT-Debugger-EventRecorder/MessageSendDebugAction.extension.st deleted file mode 100644 index 671451a65..000000000 --- a/src-archive/GT-Debugger-EventRecorder/MessageSendDebugAction.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #MessageSendDebugAction } - -{ #category : #'*GT-Debugger-EventRecorder' } -MessageSendDebugAction >> asRecorderEvent [ - - ^ GTDebuggerRecorderMessageSendEvent fromDebugAction: self -] diff --git a/src-archive/GT-Debugger-EventRecorder/ResumeDebugAction.extension.st b/src-archive/GT-Debugger-EventRecorder/ResumeDebugAction.extension.st deleted file mode 100644 index 7fcb67db6..000000000 --- a/src-archive/GT-Debugger-EventRecorder/ResumeDebugAction.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #ResumeDebugAction } - -{ #category : #'*GT-Debugger-EventRecorder' } -ResumeDebugAction >> asRecorderEvent [ - - ^ GTDebuggerRecorderResumeEvent fromDebugAction: self -] diff --git a/src-archive/GT-Debugger-EventRecorder/RunToSelectionDebugAction.extension.st b/src-archive/GT-Debugger-EventRecorder/RunToSelectionDebugAction.extension.st deleted file mode 100644 index 123999f34..000000000 --- a/src-archive/GT-Debugger-EventRecorder/RunToSelectionDebugAction.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #RunToSelectionDebugAction } - -{ #category : #'*GT-Debugger-EventRecorder' } -RunToSelectionDebugAction >> asRecorderEvent [ - - ^ GTDebuggerRecorderRunToSelectionEvent fromDebugAction: self -] diff --git a/src-archive/GT-Debugger-EventRecorder/package.st b/src-archive/GT-Debugger-EventRecorder/package.st deleted file mode 100644 index 9dff22821..000000000 --- a/src-archive/GT-Debugger-EventRecorder/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'GT-Debugger-EventRecorder' } diff --git a/src-archive/GT-DebuggerExtensions/AndContextPredicate.class.st b/src-archive/GT-DebuggerExtensions/AndContextPredicate.class.st deleted file mode 100644 index 153924245..000000000 --- a/src-archive/GT-DebuggerExtensions/AndContextPredicate.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #AndContextPredicate, - #superclass : #GTDebuggerContextPredicate, - #instVars : [ - 'left', - 'right' - ], - #category : #'GT-DebuggerExtensions' -} - -{ #category : #'instance creation' } -AndContextPredicate class >> with: aPredicate with: anotherPredicate [ - - ^ self new with: aPredicate with: anotherPredicate -] - -{ #category : #testing } -AndContextPredicate >> matchContext: aContext [ - - ^ (left matches: aContext ) and: [ right matches: aContext ] -] - -{ #category : #'instance creation' } -AndContextPredicate >> with: aPredicate with: anotherPredicate [ - - left := aPredicate. - right := anotherPredicate -] diff --git a/src-archive/GT-DebuggerExtensions/BlockContextPredicate.class.st b/src-archive/GT-DebuggerExtensions/BlockContextPredicate.class.st deleted file mode 100644 index 07688f9f5..000000000 --- a/src-archive/GT-DebuggerExtensions/BlockContextPredicate.class.st +++ /dev/null @@ -1,34 +0,0 @@ -" -I encapsulate a condition that can be verified against a MethodContext as a block. -The block can have at least one parameter, representing the context that should be verified and -should return a boolean value. - -" -Class { - #name : #BlockContextPredicate, - #superclass : #GTDebuggerContextPredicate, - #instVars : [ - 'blockCondition' - ], - #category : #'GT-DebuggerExtensions' -} - -{ #category : #'instance creation' } -BlockContextPredicate class >> for: aBlock [ - - ^ self new for: aBlock -] - -{ #category : #'instance creation' } -BlockContextPredicate >> for: aBlock [ - - blockCondition := aBlock -] - -{ #category : #testing } -BlockContextPredicate >> matchContext: aContext [ - - ^ blockCondition isNil - ifFalse: [ blockCondition cull: aContext ] - ifTrue: [ false ] -] diff --git a/src-archive/GT-DebuggerExtensions/CommandLineUIManager.extension.st b/src-archive/GT-DebuggerExtensions/CommandLineUIManager.extension.st deleted file mode 100644 index 2faceca64..000000000 --- a/src-archive/GT-DebuggerExtensions/CommandLineUIManager.extension.st +++ /dev/null @@ -1,9 +0,0 @@ -Extension { #name : #CommandLineUIManager } - -{ #category : #'*GT-DebuggerExtensions' } -CommandLineUIManager >> handleMoldableHalt: anException [ - - self unhandledErrorDefaultAction: anException - - -] diff --git a/src-archive/GT-DebuggerExtensions/Context.extension.st b/src-archive/GT-DebuggerExtensions/Context.extension.st deleted file mode 100644 index a0b1e5798..000000000 --- a/src-archive/GT-DebuggerExtensions/Context.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #Context } - -{ #category : #'*GT-DebuggerExtensions' } -Context >> isHaltContext [ - - ^ self method selector = #halt -] diff --git a/src-archive/GT-DebuggerExtensions/DebugSession.extension.st b/src-archive/GT-DebuggerExtensions/DebugSession.extension.st deleted file mode 100644 index e7c366059..000000000 --- a/src-archive/GT-DebuggerExtensions/DebugSession.extension.st +++ /dev/null @@ -1,39 +0,0 @@ -Extension { #name : #DebugSession } - -{ #category : #'*GT-DebuggerExtensions' } -DebugSession >> createPredicateForBlock: aBlock [ - - ^ BlockContextPredicate for: aBlock -] - -{ #category : #'*GT-DebuggerExtensions' } -DebugSession >> createStepPredicateForBlock: aBlock [ - - ^ self createStepPredicatForPredicate: (self createPredicatForBlock: aBlock) - -] - -{ #category : #'*GT-DebuggerExtensions' } -DebugSession >> createStepPredicateForPredicate: aPredicate [ - " Subclasses should specialize this method if needed. " - ^ aPredicate -] - -{ #category : #'*GT-DebuggerExtensions' } -DebugSession >> createStepPredicateForPredicate: aPredicate fromContext: targetContext [ - - ^ (self createPredicateForBlock: [ :currentContext | - (self isActive: targetContext) not or: [ currentContext isHaltContext ] ]) - or: aPredicate - -] - -{ #category : #'*GT-DebuggerExtensions' } -DebugSession >> stepUntil: aPredicate from: aContext [ - | ctxt | - - ctxt := self process stepUntil: (self createStepPredicateForPredicate: aPredicate) from: aContext. - self - updateWithContext: ctxt - fromProcess: self process. -] diff --git a/src-archive/GT-DebuggerExtensions/DummyUIManager.extension.st b/src-archive/GT-DebuggerExtensions/DummyUIManager.extension.st deleted file mode 100644 index b531d5ccf..000000000 --- a/src-archive/GT-DebuggerExtensions/DummyUIManager.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #DummyUIManager } - -{ #category : #'*GT-DebuggerExtensions' } -DummyUIManager >> handleMoldableHalt: anException [ - - self unhandledErrorDefaultAction: anException -] diff --git a/src-archive/GT-DebuggerExtensions/GTDebuggerBrekpoint.class.st b/src-archive/GT-DebuggerExtensions/GTDebuggerBrekpoint.class.st deleted file mode 100644 index 500606ff2..000000000 --- a/src-archive/GT-DebuggerExtensions/GTDebuggerBrekpoint.class.st +++ /dev/null @@ -1,79 +0,0 @@ -Class { - #name : #GTDebuggerBrekpoint, - #superclass : #Object, - #instVars : [ - 'metaLink', - 'condition', - 'conditionArguments', - 'targetAction' - ], - #category : #'GT-DebuggerExtensions' -} - -{ #category : #actions } -GTDebuggerBrekpoint >> breakpointReached [ - "I am called when the breakpoint is reached. If there is an - associated condition with the breakpoint I am only called if - the conditions holds." - - self targetAction breakpointReachedFrom: self -] - -{ #category : #'adding/removing methods' } -GTDebuggerBrekpoint >> detachFromAction [ - self targetAction: nil -] - -{ #category : #actions } -GTDebuggerBrekpoint >> install [ - self subclassResponsibility -] - -{ #category : #accessing } -GTDebuggerBrekpoint >> instrumentationContextFrom: aContext [ - "The action of opening the debugger will be called from the debugging action. - Hence the top context will not be the one where the metalink was declared, - but the one were the debugger was opened. To avoid that we give the breakpoint a - chance to return the correct context that contains the metalink instrumentation." - - ^ aContext -] - -{ #category : #accessing } -GTDebuggerBrekpoint >> metaLink [ - ^ metaLink -] - -{ #category : #accessing } -GTDebuggerBrekpoint >> metaLink: anObject [ - metaLink := anObject -] - -{ #category : #accessing } -GTDebuggerBrekpoint >> targetAction [ - ^ targetAction -] - -{ #category : #accessing } -GTDebuggerBrekpoint >> targetAction: anObject [ - targetAction := anObject -] - -{ #category : #actions } -GTDebuggerBrekpoint >> uninstall [ - self metaLink uninstall -] - -{ #category : #actions } -GTDebuggerBrekpoint >> updateDebuggingSession: aSession [ - "I am a callback that is called before the debugger is opened. - I can be used to remove the instrumentation from the displayed methods. - At this point the debugger process is suspended." -] - -{ #category : #conditions } -GTDebuggerBrekpoint >> whenReceiver: aBlock [ - - condition := aBlock. - conditionArguments := #(receiver) -] diff --git a/src-archive/GT-DebuggerExtensions/GTDebuggerContextPredicate.extension.st b/src-archive/GT-DebuggerExtensions/GTDebuggerContextPredicate.extension.st deleted file mode 100644 index 5c887bae7..000000000 --- a/src-archive/GT-DebuggerExtensions/GTDebuggerContextPredicate.extension.st +++ /dev/null @@ -1,17 +0,0 @@ -Extension { #name : #GTDebuggerContextPredicate } - -{ #category : #'*GT-DebuggerExtensions' } -GTDebuggerContextPredicate >> and: aPredicate [ - - ^ AndContextPredicate - with: self - with: aPredicate -] - -{ #category : #'*GT-DebuggerExtensions' } -GTDebuggerContextPredicate >> or: aPredicate [ - - ^ OrContextPredicate - with: self - with: aPredicate -] diff --git a/src-archive/GT-DebuggerExtensions/GTDebuggerMethodAfterBreakpoint.class.st b/src-archive/GT-DebuggerExtensions/GTDebuggerMethodAfterBreakpoint.class.st deleted file mode 100644 index 465cfe595..000000000 --- a/src-archive/GT-DebuggerExtensions/GTDebuggerMethodAfterBreakpoint.class.st +++ /dev/null @@ -1,50 +0,0 @@ -Class { - #name : #GTDebuggerMethodAfterBreakpoint, - #superclass : #GTDebuggerBrekpoint, - #instVars : [ - 'targetMethod' - ], - #category : #'GT-DebuggerExtensions' -} - -{ #category : #actions } -GTDebuggerMethodAfterBreakpoint >> install [ - - self metaLink: (MetaLink new - metaObject: self; - selector: #breakpointReached; - condition: condition arguments: conditionArguments; - control: #after). - targetMethod ast link: self metaLink. - -] - -{ #category : #accessing } -GTDebuggerMethodAfterBreakpoint >> instrumentationContextFrom: aContext [ - - ^ aContext "--(GTReflectivityDebugAction)>>openDebuggerForBreakpoint:" - sender "--(GTReflectivityDebugAction)>>breakpointReachedFrom:" - sender "--(GTDebuggerBrekpoint)>>breakpointReached" - sender "instrumented method -> ensure block calling breakpointReached" - sender "Context>>#resume:through:" - sender "Context>>ensure:" - sender "instrumented method -> before exiting" -] - -{ #category : #accessing } -GTDebuggerMethodAfterBreakpoint >> targetMethod [ - ^ targetMethod -] - -{ #category : #accessing } -GTDebuggerMethodAfterBreakpoint >> targetMethod: anObject [ - targetMethod := anObject -] - -{ #category : #actions } -GTDebuggerMethodAfterBreakpoint >> updateDebuggingSession: aSession [ - super updateDebuggingSession: aSession. - - aSession stepOver. "instrumented method -> ensure block calling breakpointReached" - aSession stepOver. "ReflectiveMethod>>run:with:in:" -] diff --git a/src-archive/GT-DebuggerExtensions/GTDebuggerMethodBeforeBreakpoint.class.st b/src-archive/GT-DebuggerExtensions/GTDebuggerMethodBeforeBreakpoint.class.st deleted file mode 100644 index e478bc692..000000000 --- a/src-archive/GT-DebuggerExtensions/GTDebuggerMethodBeforeBreakpoint.class.st +++ /dev/null @@ -1,70 +0,0 @@ -Class { - #name : #GTDebuggerMethodBeforeBreakpoint, - #superclass : #GTDebuggerBrekpoint, - #instVars : [ - 'targetMethod' - ], - #category : #'GT-DebuggerExtensions' -} - -{ #category : #actions } -GTDebuggerMethodBeforeBreakpoint >> install [ - - self metaLink: (MetaLink new - metaObject: self; - selector: #breakpointReached; - condition: condition arguments: conditionArguments; - control: #before). - targetMethod ast link: self metaLink. - -] - -{ #category : #accessing } -GTDebuggerMethodBeforeBreakpoint >> instrumentationContextFrom: aContext [ - - ^ aContext "GTPPStepToNextProductionReflectivityAction(GTReflectivityDebugAction)>>openDebuggerForBreakpoint:" - sender "GTPPStepToNextProductionReflectivityAction(GTReflectivityDebugAction)>>breakpointReachedFrom:" - sender "GTDebuggerMethodEntryBreakpoint(GTDebuggerBrekpoint)>>breakpointReached" - sender "Instrumented method -> at the beginning after sending breakpointReached" -] - -{ #category : #accessing } -GTDebuggerMethodBeforeBreakpoint >> targetMethod [ - ^ targetMethod -] - -{ #category : #accessing } -GTDebuggerMethodBeforeBreakpoint >> targetMethod: anObject [ - targetMethod := anObject -] - -{ #category : #actions } -GTDebuggerMethodBeforeBreakpoint >> updateDebuggingSession: aSession [ - "I remove the reflectivity instrumentation from the top of the stack. - The at this point the stack in the from the has this shape: - [1] suspended: MorphicUIManager>>debugProcess:context:label:fullView:notification:usingDebugger:initializedWith: - [2] sender: GTPPStepToNextProductionReflectivityAction(GTReflectivityDebugAction)>>openDebuggerForBreakpoint: - [3] sender: GTPPStepToNextProductionReflectivityAction(GTReflectivityDebugAction)>>breakpointReachedFrom: - [4] sender: GTDebuggerMethodEntryBreakpoint(GTDebuggerBrekpoint)>>breakpointReached - [5] sender: called from the reflective method; this contains the reflectivity metalink. - -> [6] sender: ReflectiveMethod>>run:with:in: -> [this is the context that needs to be removed] - [7] sender: method calling the reflective method -> [this needs to call directly ]. - - At this point the from the session has at the context [5]." - super updateDebuggingSession: aSession. - - "Step over to ensure that the context that opened the debugger is no longer on the stack" - aSession stepOver. - "After this call both the interrupted context and suspended context point to [5]" - - "Remote the sender containing the reflectivity method calling the target methodd" - "The current interrupted context is the target method" - "The sender is the reflectivity method that calls the method" - "The sender of the sender is the context calling the method" - aSession interruptedContext - swapSender: aSession interruptedContext sender sender. - - aSession interruptedProcess restartTopWith: self targetMethod. "Restart the top context to remove the instrumented code" - aSession interruptedProcess stepToSendOrReturn. "Find the first sender to simulate how the debugger actions work" - aSession updateContextTo: aSession interruptedProcess suspendedContext. "Update the session as a normal debugging action" -] diff --git a/src-archive/GT-DebuggerExtensions/GTMoldableDebugger.extension.st b/src-archive/GT-DebuggerExtensions/GTMoldableDebugger.extension.st deleted file mode 100644 index 6b1c94f0f..000000000 --- a/src-archive/GT-DebuggerExtensions/GTMoldableDebugger.extension.st +++ /dev/null @@ -1,14 +0,0 @@ -Extension { #name : #GTMoldableDebugger } - -{ #category : #'*GT-DebuggerExtensions' } -GTMoldableDebugger class >> openOn: aDebugSession withFullView: aBool notification: aString initializedWith: aBlock [ - - | debugger | - - debugger := self on: aDebugSession. - - aBool | self alwaysOpenFullDebugger - ifTrue: [ debugger openWithFullView ] - ifFalse: [ debugger openWithNotification: aString]. - aBlock value: debugger. -] diff --git a/src-archive/GT-DebuggerExtensions/GTReflectivityDebugAction.class.st b/src-archive/GT-DebuggerExtensions/GTReflectivityDebugAction.class.st deleted file mode 100644 index 96074c7d3..000000000 --- a/src-archive/GT-DebuggerExtensions/GTReflectivityDebugAction.class.st +++ /dev/null @@ -1,132 +0,0 @@ -Class { - #name : #GTReflectivityDebugAction, - #superclass : #DebugAction, - #instVars : [ - 'breakpoints', - 'debuggerData' - ], - #category : #'GT-DebuggerExtensions' -} - -{ #category : #adding } -GTReflectivityDebugAction >> addBreakpoint: aBreakpoint [ - - aBreakpoint targetAction: self. - self breakpoints add: aBreakpoint. - ^ aBreakpoint -] - -{ #category : #scripting } -GTReflectivityDebugAction >> afterMethodBreakpoint [ - ^ self addBreakpoint: GTDebuggerMethodAfterBreakpoint new -] - -{ #category : #callbacks } -GTReflectivityDebugAction >> attachBreakpoints [ - "I am a callback used to add breakpoints to this debugging action." - -] - -{ #category : #scripting } -GTReflectivityDebugAction >> beforeMethodBreakpoint [ - ^ self addBreakpoint: GTDebuggerMethodBeforeBreakpoint new -] - -{ #category : #callbacks } -GTReflectivityDebugAction >> breakpointReachedFrom: aBreakpoint [ - "Callback method called when any one of the breakpoints installed - by this action is reached." - - self uninstallBreakpoints. - self openDebuggerForBreakpoint: aBreakpoint -] - -{ #category : #accessing } -GTReflectivityDebugAction >> breakpoints [ - - ^ breakpoints ifNil: [ breakpoints := OrderedCollection new ] -] - -{ #category : #accessing } -GTReflectivityDebugAction >> debuggerClass [ - "I return the debugger class that this action will open when - one of its breakpoints is reached. Subclasses should override - me if they need to open a specific debugger." - ^ Smalltalk tools debugger -] - -{ #category : #accessing } -GTReflectivityDebugAction >> debuggerData [ - - ^ debuggerData ifNil: [ debuggerData := Dictionary new ] -] - -{ #category : #actions } -GTReflectivityDebugAction >> executeAction [ - - self attachBreakpoints. - self installBreakpoints. - self resumeDebugger. -] - -{ #category : #initialization } -GTReflectivityDebugAction >> initialize [ - super initialize. - self needsUpdate: false -] - -{ #category : #actions } -GTReflectivityDebugAction >> installBreakpoints [ - self breakpoints do: #install. -] - -{ #category : #opening } -GTReflectivityDebugAction >> openDebuggerForBreakpoint: aBreakpoint [ - "FIX ME: consider moving this method to the actual breakpoint - so that actions become more lighweight" - |ctxt| - ctxt := thisContext. - - UIManager default - debugProcess: Processor activeProcess - context: (aBreakpoint instrumentationContextFrom: ctxt) - label: (self debuggerData at: #title) - usingDebuggerClass: self debuggerClass - initializedSessionWith: [ :aSession | - self updateDebuggingSession: aSession forBreakpoint: aBreakpoint. ] - initializedDebuggerWith: [ :aDebugger | - aDebugger window - position: (self debuggerData at: #position); - extent: (self debuggerData at: #extent) ] -] - -{ #category : #actions } -GTReflectivityDebugAction >> resumeDebugger [ - - self saveDebuggerData. - self session - resume; - clear. - self debugger close. -] - -{ #category : #actions } -GTReflectivityDebugAction >> saveDebuggerData [ - - self debuggerData at: #title put: self debugger title. - self debuggerData at: #position put: self debugger window position. - self debuggerData at: #extent put: self debugger window extent. -] - -{ #category : #actions } -GTReflectivityDebugAction >> uninstallBreakpoints [ - self breakpoints do: #uninstall. -] - -{ #category : #callbacks } -GTReflectivityDebugAction >> updateDebuggingSession: aSession forBreakpoint: aBreakpoint [ - "I update the session based on the breakpoint that was reached. - Subclasses that want to provide custom update for the session - should override me." - aBreakpoint updateDebuggingSession: aSession -] diff --git a/src-archive/GT-DebuggerExtensions/InstructionStream.extension.st b/src-archive/GT-DebuggerExtensions/InstructionStream.extension.st deleted file mode 100644 index b8eff84cd..000000000 --- a/src-archive/GT-DebuggerExtensions/InstructionStream.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #InstructionStream } - -{ #category : #'*GT-DebuggerExtensions' } -InstructionStream >> isInitialnstruction [ - - ^ self pc = self method initialPC -] diff --git a/src-archive/GT-DebuggerExtensions/MoldableHalt.class.st b/src-archive/GT-DebuggerExtensions/MoldableHalt.class.st deleted file mode 100644 index 8bd650394..000000000 --- a/src-archive/GT-DebuggerExtensions/MoldableHalt.class.st +++ /dev/null @@ -1,11 +0,0 @@ -Class { - #name : #MoldableHalt, - #superclass : #Halt, - #category : #'GT-DebuggerExtensions' -} - -{ #category : #'priv handling' } -MoldableHalt >> defaultAction [ - - ^ UIManager default handleMoldableHalt: self. -] diff --git a/src-archive/GT-DebuggerExtensions/MorphicUIManager.extension.st b/src-archive/GT-DebuggerExtensions/MorphicUIManager.extension.st deleted file mode 100644 index d9041cf25..000000000 --- a/src-archive/GT-DebuggerExtensions/MorphicUIManager.extension.st +++ /dev/null @@ -1,100 +0,0 @@ -Extension { #name : #MorphicUIManager } - -{ #category : #'*GT-DebuggerExtensions' } -MorphicUIManager >> debugProcess: process context: context label: title usingDebuggerClass: debuggerClass initializedSessionWith: aSessionBlock initializedDebuggerWith: aDebuggerBlock [ - "Open a notifier in response to an error, halt, or notify. A notifier view - just shows a short view of the sender stack and provides a menu that - lets the user open a full debugger." - - | debugSession | - - debugSession := debuggerClass sessionClass named: title on: process startedAt: context. - - debugSession logStackToFileIfNeeded. - debugSession isAboutUIProcess ifTrue: [ self spawnNewProcess ]. - - self defer: [ - "schedule debugger in deferred UI message to address - redraw problems after opening a debugger e.g. from - the testrunner." - [ - aSessionBlock value: debugSession. - debuggerClass - openOn: debugSession withFullView: false notification: nil initializedWith: aDebuggerBlock. - ] on: Error do: [ :ex | debugSession signalDebuggerError: ex] - ]. - - process suspend. - -] - -{ #category : #'*GT-DebuggerExtensions' } -MorphicUIManager >> debugProcess: process context: context label: title usingDebuggerInstance: aDebugger initializedSessionWith: aSessionBlock initializedDebuggerWith: aDebuggerBlock [ - "Open a notifier in response to an error, halt, or notify. A notifier view - just shows a short view of the sender stack and provides a menu that - lets the user open a full debugger." - - | debugSession | - - debugSession := aDebugger class sessionClass named: title on: process startedAt: context. - - debugSession logStackToFileIfNeeded. - debugSession isAboutUIProcess ifTrue: [ self spawnNewProcess ]. - - self defer: [ - "schedule debugger in deferred UI message to address - redraw problems after opening a debugger e.g. from - the testrunner." - [ - aSessionBlock value: debugSession. - (aDebugger session: debugSession). - aDebuggerBlock value: aDebugger. - ] on: Error do: [ :ex | debugSession signalDebuggerError: ex] - ]. - - process suspend. - -] - -{ #category : #'*GT-DebuggerExtensions' } -MorphicUIManager >> handleMoldableHalt: anException [ - - ^ Smalltalk tools debugMoldableHalt: anException. -] - -{ #category : #'*GT-DebuggerExtensions' } -MorphicUIManager >> openDebugger: debuggerClass initializedWith: aBlock on: process context: context label: title contents: contentsStringOrNil fullView: bool [ - "Open a notifier in response to an error, halt, or notify. A notifier view - just shows a short view of the sender stack and provides a menu that - lets the user open a full debugger." - | errorWasInUIProcess debugger | - errorWasInUIProcess := self spawnNewProcessIfThisIsUI: process. - [Smalltalk tools debugger logDebuggerStackToFile - ifTrue: [Smalltalk - logError: title - inContext: context ]] on: Error do: []. - debugger := debuggerClass new. - self defer: [[ - debugger - process: process - controller: nil - context: context. - aBlock cull: debugger. - "schedule debugger in deferred UI message to address - redraw problems after opening a debugger e.g. from - the testrunner." - "self defer: [" - bool - ifTrue: [debugger openFullNoSuspendLabel: title] - ifFalse: [debugger openNotifierContents: contentsStringOrNil label: title]. - debugger errorWasInUIProcess: errorWasInUIProcess.] - on: Error - do: [:ex | Smalltalk tools debugger primitiveError: 'Orginal error: ' , title asString , '. - Smalltalk tools debugger error: ' - , ([ex description] - on: Error - do: ['a ' , ex class printString]) , ':']]. - - process suspend. - ^ debugger -] diff --git a/src-archive/GT-DebuggerExtensions/Object.extension.st b/src-archive/GT-DebuggerExtensions/Object.extension.st deleted file mode 100644 index fa6d0eb61..000000000 --- a/src-archive/GT-DebuggerExtensions/Object.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #Object } - -{ #category : #'*GT-DebuggerExtensions' } -Object >> moldableHalt [ - - MoldableHalt now -] diff --git a/src-archive/GT-DebuggerExtensions/OrContextPredicate.class.st b/src-archive/GT-DebuggerExtensions/OrContextPredicate.class.st deleted file mode 100644 index 5640acf85..000000000 --- a/src-archive/GT-DebuggerExtensions/OrContextPredicate.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #OrContextPredicate, - #superclass : #GTDebuggerContextPredicate, - #instVars : [ - 'left', - 'right' - ], - #category : #'GT-DebuggerExtensions' -} - -{ #category : #'instance creation' } -OrContextPredicate class >> with: aPredicate with: anotherPredicate [ - - ^ self new with: aPredicate with: anotherPredicate -] - -{ #category : #testing } -OrContextPredicate >> matchContext: aContext [ - - ^ (left matches: aContext ) or: [ right matches: aContext ] -] - -{ #category : #'instance creation' } -OrContextPredicate >> with: aPredicate with: anotherPredicate [ - - left := aPredicate. - right := anotherPredicate -] diff --git a/src-archive/GT-DebuggerExtensions/Process.extension.st b/src-archive/GT-DebuggerExtensions/Process.extension.st deleted file mode 100644 index 1c331f24e..000000000 --- a/src-archive/GT-DebuggerExtensions/Process.extension.st +++ /dev/null @@ -1,30 +0,0 @@ -Extension { #name : #Process } - -{ #category : #'*GT-DebuggerExtensions' } -Process >> debugMoldableHalt: context title: title [ - - ^ (Smalltalk tools debuggerDispatcherFor: context) ifNotNilDo: [ :aDebugger | - UIManager default - openDebugger: aDebugger - initializedWith: [ ] - on: self - context: context - label: title - contents: nil - fullView: true ] -] - -{ #category : #'*GT-DebuggerExtensions' } -Process >> stepUntil: aPredicate from: aContext [ - "Resume self until the top context safisfy the given condition." - - | ctxt | - - ctxt := aContext. - [ - ctxt notNil and: [aPredicate matches: ctxt] - ] whileFalse: [ - ctxt := self step: ctxt. - ]. - ^ ctxt -] diff --git a/src-archive/GT-DebuggerExtensions/ToolRegistry.extension.st b/src-archive/GT-DebuggerExtensions/ToolRegistry.extension.st deleted file mode 100644 index 3c9293186..000000000 --- a/src-archive/GT-DebuggerExtensions/ToolRegistry.extension.st +++ /dev/null @@ -1,14 +0,0 @@ -Extension { #name : #ToolRegistry } - -{ #category : #'*GT-DebuggerExtensions' } -ToolRegistry >> debugMoldableHalt: anException [ - ^Processor activeProcess - debugMoldableHalt: anException signalerContext sender "TODO: calling 'sender' might not be the best indea " - title: anException description -] - -{ #category : #'*GT-DebuggerExtensions' } -ToolRegistry >> debuggerDispatcherFor: context [ - ^ self debuggerDispatcherFor: context matching: [ :aDebugger | true ]. - -] diff --git a/src-archive/GT-DebuggerExtensions/UIManager.extension.st b/src-archive/GT-DebuggerExtensions/UIManager.extension.st deleted file mode 100644 index 763a14a35..000000000 --- a/src-archive/GT-DebuggerExtensions/UIManager.extension.st +++ /dev/null @@ -1,9 +0,0 @@ -Extension { #name : #UIManager } - -{ #category : #'*GT-DebuggerExtensions' } -UIManager >> handleMoldableHalt: anException [ - - "See UIManager>>unhandledErrorDefaultAction:" - - Smalltalk snapshot: false andQuit: true. -] diff --git a/src-archive/GT-DebuggerExtensions/package.st b/src-archive/GT-DebuggerExtensions/package.st deleted file mode 100644 index 54d2c6784..000000000 --- a/src-archive/GT-DebuggerExtensions/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'GT-DebuggerExtensions' } diff --git a/src-archive/GT-GlamourDebugger/Context.extension.st b/src-archive/GT-GlamourDebugger/Context.extension.st deleted file mode 100644 index a998a71a8..000000000 --- a/src-archive/GT-GlamourDebugger/Context.extension.st +++ /dev/null @@ -1,8 +0,0 @@ -Extension { #name : #Context } - -{ #category : #'*GT-GlamourDebugger' } -Context >> locateBrowserContext [ - - ^ (self findContextSuchThat: [ :ctx | - (ctx receiver class inheritsFrom: GLMPresentation) " and: [ ctx selector = #startOn: ]" ]) -] diff --git a/src-archive/GT-GlamourDebugger/GTDebuggingStone.class.st b/src-archive/GT-GlamourDebugger/GTDebuggingStone.class.st deleted file mode 100644 index 753511d8d..000000000 --- a/src-archive/GT-GlamourDebugger/GTDebuggingStone.class.st +++ /dev/null @@ -1,68 +0,0 @@ -Class { - #name : #GTDebuggingStone, - #superclass : #Object, - #instVars : [ - 'pragma', - 'session' - ], - #category : #'GT-GlamourDebugger' -} - -{ #category : #'instance creation' } -GTDebuggingStone class >> forPragma: aPragma forSession: aSession [ - - ^ self new forPragma: aPragma forSession: aSession -] - -{ #category : #selectors } -GTDebuggingStone >> actionSelector [ - - ^ ('stepTo', (pragma argumentAt: 1) capitalized) asSymbol -] - -{ #category : #selectors } -GTDebuggingStone >> activeSelector [ - - ^ ('is', (pragma argumentAt: 1) capitalized, 'Valid') asSymbol -] - -{ #category : #actions } -GTDebuggingStone >> completeAction [ - - ^ self perform: self actionSelector withEnoughArguments: (Array with: self session context) -] - -{ #category : #initialization } -GTDebuggingStone >> forPragma: aPragma forSession: aSession [ - - pragma := aPragma. - session := aSession -] - -{ #category : #testing } -GTDebuggingStone >> isActive [ - - ^ (self class canUnderstand: self activeSelector) - ifFalse: [ true ] - ifTrue: [ self perform: self activeSelector ] -] - -{ #category : #testing } -GTDebuggingStone >> reachedTarget [ - - ^ (self class canUnderstand: self tagetSelector) - ifFalse: [ true ] - ifTrue: [ self perform: self tagetSelector ] -] - -{ #category : #accessing } -GTDebuggingStone >> session [ - - ^ session -] - -{ #category : #selectors } -GTDebuggingStone >> tagetSelector [ - - ^ ('has', (pragma argumentAt: 1) capitalized, 'ReachedTarget') asSymbol -] diff --git a/src-archive/GT-GlamourDebugger/GTGlamourDebugSession.class.st b/src-archive/GT-GlamourDebugger/GTGlamourDebugSession.class.st deleted file mode 100644 index ce2064778..000000000 --- a/src-archive/GT-GlamourDebugger/GTGlamourDebugSession.class.st +++ /dev/null @@ -1,50 +0,0 @@ -Class { - #name : #GTGlamourDebugSession, - #superclass : #DebugSession, - #instVars : [ - 'rootBrowserContext' - ], - #category : #'GT-GlamourDebugger' -} - -{ #category : #'predicates creation' } -GTGlamourDebugSession >> createStepPredicateForPredicate: aPredicate [ - - ^ (self createPredicateForBlock: [ self isActive not ]) or: aPredicate - -] - -{ #category : #testing } -GTGlamourDebugSession >> isActive [ - - ^ rootBrowserContext - ifNil: [ false ] - ifNotNil: [ - rootBrowserContext isDead not and: [ - - rootBrowserContext ~= self process suspendedContext or: [rootBrowserContext willReturn not ] - - ] ] -] - -{ #category : #initialization } -GTGlamourDebugSession >> process: aProcess context: aContext [ - - super process: aProcess context: aContext. - - self flag: 'Have a method that is only called when the session is created and put this there'. - rootBrowserContext ifNil: [ - rootBrowserContext := aContext locateBrowserContext ] -] - -{ #category : #accessing } -GTGlamourDebugSession >> rootBrowser [ - - ^ rootBrowserContext receiver -] - -{ #category : #accessing } -GTGlamourDebugSession >> rootBrowserContext [ - - ^ rootBrowserContext -] diff --git a/src-archive/GT-GlamourDebugger/GTGlamourDebugger.class.st b/src-archive/GT-GlamourDebugger/GTGlamourDebugger.class.st deleted file mode 100644 index a850a9aad..000000000 --- a/src-archive/GT-GlamourDebugger/GTGlamourDebugger.class.st +++ /dev/null @@ -1,76 +0,0 @@ -Class { - #name : #GTGlamourDebugger, - #superclass : #GTGenericStackDebugger, - #category : #'GT-GlamourDebugger' -} - -{ #category : #accessing } -GTGlamourDebugger class >> defaultTitle [ - - ^ 'Glamour' -] - -{ #category : #testing } -GTGlamourDebugger class >> handlesContext: aContext [ - - ^ aContext locateBrowserContext notNil -] - -{ #category : #'tools registry' } -GTGlamourDebugger class >> register [ - - self registerToolsOn: Smalltalk tools. -] - -{ #category : #'tools registry' } -GTGlamourDebugger class >> registerToolsOn: registry [ - - "Add ourselves to registry. See [Smalltalk tools]" - registry registerDebugger: self withRank: 50. -] - -{ #category : #private } -GTGlamourDebugger class >> sessionClass [ - - ^ GTGlamourDebugSession -] - -{ #category : #building } -GTGlamourDebugger >> browserStructureFor: aGlmBrowser in: aComposite [ - - aComposite roassal2 - title: 'Browser structure'; - painting: [:view :b | - aGlmBrowser viewTreeOn: view ] -] - -{ #category : #building } -GTGlamourDebugger >> debuggerStructureIn: browser [ - - browser - row: [ :row | - row - column: [ :c | - c - row: #stack; - row: #code ]; - column: #browser ] span: 4; - row: #inspector span: 3. -] - -{ #category : #building } -GTGlamourDebugger >> debuggerTransmissionsIn: browser. [ - - super debuggerTransmissionsIn: browser. - - browser transmit - from: #stack port: #selection; - to: #browser; - andShow: [ :composite | self browserStructureFor: self session rootBrowser in: composite ] -] - -{ #category : #'building actions' } -GTGlamourDebugger >> debuggingActionsPragmas [ - - ^ super debuggingActionsPragmas, { #glamourDebuggingAction } -] diff --git a/src-archive/GT-GlamourDebugger/GTGlamourDebuggerSmokeTest.class.st b/src-archive/GT-GlamourDebugger/GTGlamourDebuggerSmokeTest.class.st deleted file mode 100644 index 8c24ec690..000000000 --- a/src-archive/GT-GlamourDebugger/GTGlamourDebuggerSmokeTest.class.st +++ /dev/null @@ -1,47 +0,0 @@ -Class { - #name : #GTGlamourDebuggerSmokeTest, - #superclass : #GTDebuggerSmokeTest, - #category : #'GT-GlamourDebugger' -} - -{ #category : #accessing } -GTGlamourDebuggerSmokeTest >> debuggerToTest [ - - ^ GTGlamourDebugger -] - -{ #category : #utils } -GTGlamourDebuggerSmokeTest >> stepToStartOnContext [ - - ^ [:aProcess | - aProcess - step; - step; - completeStep: aProcess suspendedContext; - completeStep: aProcess suspendedContext; - completeStep: aProcess suspendedContext; - completeStep: aProcess suspendedContext; - completeStep: aProcess suspendedContext; - completeStep: aProcess suspendedContext; - completeStep: aProcess suspendedContext; - completeStep: aProcess suspendedContext; - step; "send openOn:" - completeStep: aProcess suspendedContext; - completeStep: aProcess suspendedContext; - completeStep: aProcess suspendedContext; - completeStep: aProcess suspendedContext; - step; "send openOn:with:" - completeStep: aProcess suspendedContext; - completeStep: aProcess suspendedContext; - step "send startOn:" ] -] - -{ #category : #tests } -GTGlamourDebuggerSmokeTest >> testDebugger [ - - self - assertDebuggerInitializationForContext: [GLMBasicExamples open] asContext - andStepBlock: self stepToStartOnContext. - - self assertDebuggerClosing. -] diff --git a/src-archive/GT-GlamourDebugger/GTGlamourDebuggingStone.class.st b/src-archive/GT-GlamourDebugger/GTGlamourDebuggingStone.class.st deleted file mode 100644 index 3a630b70d..000000000 --- a/src-archive/GT-GlamourDebugger/GTGlamourDebuggingStone.class.st +++ /dev/null @@ -1,92 +0,0 @@ -Class { - #name : #GTGlamourDebuggingStone, - #superclass : #GTDebuggingStone, - #category : #'GT-GlamourDebugger' -} - -{ #category : #private } -GTGlamourDebuggingStone >> glamourValueDeliveryPredicate [ - ^ self session - createPredicateForBlock: [ :aContext | - aContext selector = #glamourValueWithArgs: - and: [ - aContext peekInstruction arguments notEmpty - and: [ #(#value #valueWithArguments:) includes: aContext peekInstruction argument ] ] ] -] - -{ #category : #'testing context' } -GTGlamourDebuggingStone >> hasPresentationConditionReachedTarget [ - - ^ true - "^ self session context peekInstruction arguments size = 1 and: [ - self session context peekInstruction argument = #condition ]" -] - -{ #category : #'testing receiver' } -GTGlamourDebuggingStone >> isPresentationConditionValid [ - - ^ (self session context receiver condition - ifNil: [ false ] - ifNotNil: [ :aBlock | aBlock printString ~= [true] printString ]) -] - -{ #category : #'testing receiver' } -GTGlamourDebuggingStone >> isPresentationCreationValid [ - - ^ self session context receiver presentationsFactory notNil - -] - -{ #category : #'testing receiver' } -GTGlamourDebuggingStone >> isTransmissionConditionValid [ - - ^ self session context receiver condition isBlock -] - -{ #category : #'testing receiver' } -GTGlamourDebuggingStone >> isTransmissionTransformationValid [ - - ^ self session context receiver transformation notNil -] - -{ #category : #actions } -GTGlamourDebuggingStone >> stepToGlamourValueBlock [ - - self session stepUntil: self glamourValueDeliveryPredicate from: self session context. - self session isActive ifTrue: [ - self session stepInto ]. - ^ true -] - -{ #category : #actions } -GTGlamourDebuggingStone >> stepToPresentationCondition [ - | ctxt | - - ctxt := self session context. - self session - stepUntil: ((self session createPredicateForBlock: [ ctxt isDead ]) or: self glamourValueDeliveryPredicate) - from: self session context. - - ctxt isDead not ifTrue: [ - self session stepInto ]. - - ^ ctxt isDead not -] - -{ #category : #actions } -GTGlamourDebuggingStone >> stepToPresentationCreation [ - - ^ self stepToGlamourValueBlock -] - -{ #category : #actions } -GTGlamourDebuggingStone >> stepToTransmissionCondition [ - - ^ self stepToGlamourValueBlock -] - -{ #category : #actions } -GTGlamourDebuggingStone >> stepToTransmissionTransformation [ - - ^ self stepToGlamourValueBlock -] diff --git a/src-archive/GT-GlamourDebugger/GTGlamourStepToNextStoneAction.class.st b/src-archive/GT-GlamourDebugger/GTGlamourStepToNextStoneAction.class.st deleted file mode 100644 index 9e0110df7..000000000 --- a/src-archive/GT-GlamourDebugger/GTGlamourStepToNextStoneAction.class.st +++ /dev/null @@ -1,108 +0,0 @@ -Class { - #name : #GTGlamourStepToNextStoneAction, - #superclass : #DebugAction, - #instVars : [ - 'debugStoneType' - ], - #category : #'GT-GlamourDebugger' -} - -{ #category : #accessing } -GTGlamourStepToNextStoneAction class >> debuggingStonePragma [ - - ^ #debuggingStone:label: -] - -{ #category : #registration } -GTGlamourStepToNextStoneAction class >> gtActionFor: aDebugger [ - - - - - ^ (self forDebugger: aDebugger) - label: 'Any action' - - -] - -{ #category : #registration } -GTGlamourStepToNextStoneAction class >> gtGoToDebugingStoneActionsFor: aDebugger [ - - - - ^(PragmaCollector filter: [:prag | - prag keyword = self debuggingStonePragma ]) reset collected collect: [ :aPragma | - (self forDebugger: aDebugger) - label: (aPragma argumentAt: 2); - "category: 'Debugging Stone';" - debugStoneType: (aPragma argumentAt: 1) ] - - -] - -{ #category : #testing } -GTGlamourStepToNextStoneAction >> appliesToContext: aContext [ - - ^ aContext locateBrowserContext notNil -] - -{ #category : #accessing } -GTGlamourStepToNextStoneAction >> debugStoneType [ - - ^ debugStoneType -] - -{ #category : #accessing } -GTGlamourStepToNextStoneAction >> debugStoneType: anObject [ - - debugStoneType := anObject -] - -{ #category : #predicates } -GTGlamourStepToNextStoneAction >> debuggingStonePredicate [ - - ^ self session createPredicateForBlock: [ :aContext | - aContext isInitialnstruction and: [ | pragma | - pragma := aContext method pragmaAt: self class debuggingStonePragma. - pragma notNil and: [ - self debugStoneType isNil or: [ (pragma argumentAt: 1) = self debugStoneType ] ] ] ] -] - -{ #category : #actions } -GTGlamourStepToNextStoneAction >> executeAction [ - | debugingStone | - - "The first time start searching for a debuging stone from the context selected by the user." - debugingStone := self stepToDebuggingStoneFrom: self currentContext. - - [ debugingStone notNil ] - whileTrue: [ - (debugingStone reachedTarget and: [ - debugingStone isActive and: [ - debugingStone completeAction ] ]) - "After the first time use the interruptedContext (start the search from where it was left of). - Here the interruptedContext it is the same as the suspended context of the process." - ifFalse: [ debugingStone := self stepToDebuggingStoneFrom: self interruptedContext ] - "If a debuging stone reached its destination stop the search." - ifTrue: [ ^ self ] ] - -] - -{ #category : #actions } -GTGlamourStepToNextStoneAction >> stepToDebuggingStoneFrom: aContext [ - - "Make sure the execution advances, and does not check the same context." - self session stepInto: aContext. - - self session - stepUntil: self debuggingStonePredicate - from: self interruptedContext. - - ^ self session isActive - ifTrue: [ - GTGlamourDebuggingStone - "Here interruptedContext is the same as the suspended context of the process." - forPragma: (self interruptedContext method pragmaAt: self class debuggingStonePragma) - forSession: self session ] - ifFalse: [ nil ] -] diff --git a/src-archive/GT-GlamourDebugger/GTGlamourStepToPresentationBuildAction.class.st b/src-archive/GT-GlamourDebugger/GTGlamourStepToPresentationBuildAction.class.st deleted file mode 100644 index ff53fb018..000000000 --- a/src-archive/GT-GlamourDebugger/GTGlamourStepToPresentationBuildAction.class.st +++ /dev/null @@ -1,58 +0,0 @@ -Class { - #name : #GTGlamourStepToPresentationBuildAction, - #superclass : #DebugAction, - #category : #'GT-GlamourDebugger' -} - -{ #category : #registration } -GTGlamourStepToPresentationBuildAction class >> gtActionType [ - "" -] - -{ #category : #testing } -GTGlamourStepToPresentationBuildAction >> appliesToContext: aContext [ - - ^ aContext locateBrowserContext notNil -] - -{ #category : #actions } -GTGlamourStepToPresentationBuildAction >> executeAction [ - | presentationCreation presentationCode | - presentationCreation := self presentationCreationPredicate. - presentationCode := self presentationCodePredicate. - - self session stepUntil: presentationCreation from: self currentContext. - self session stepUntil: presentationCode from: self interruptedContext. - self session isActive ifTrue: [ - self session stepInto ] - - -] - -{ #category : #'initialize-release' } -GTGlamourStepToPresentationBuildAction >> initialize [ - - self label: 'Next presentation build'. - self icon: GLMUIThemeExtraIcons glamorousPlay. -] - -{ #category : #predicates } -GTGlamourStepToPresentationBuildAction >> presentationCodePredicate [ - ^ self session - createPredicateForBlock: [ :aContext | - aContext selector = #glamourValueWithArgs: - and: [ - aContext peekInstruction arguments notEmpty - and: [ #(#value #valueWithArguments:) includes: aContext peekInstruction argument ] ] ] -] - -{ #category : #predicates } -GTGlamourStepToPresentationBuildAction >> presentationCreationPredicate [ - - ^ self session createPredicateForBlock: [ :aContext | - aContext methodClass = GLMPresentStrategy and: [ - aContext selector = #presentations and: [ - aContext isInitialnstruction ] ] ] - - -] diff --git a/src-archive/GT-GlamourDebugger/GTPPStepToGlamourDebugger.class.st b/src-archive/GT-GlamourDebugger/GTPPStepToGlamourDebugger.class.st deleted file mode 100644 index e4bd0fa50..000000000 --- a/src-archive/GT-GlamourDebugger/GTPPStepToGlamourDebugger.class.st +++ /dev/null @@ -1,61 +0,0 @@ -Class { - #name : #GTPPStepToGlamourDebugger, - #superclass : #DebugAction, - #category : #'GT-GlamourDebugger' -} - -{ #category : #registration } -GTPPStepToGlamourDebugger class >> gtActionType [ - -] - -{ #category : #testing } -GTPPStepToGlamourDebugger >> appliesToContext: aContext [ - - ^ self debugger class ~= self debuggerClass -] - -{ #category : #accessing } -GTPPStepToGlamourDebugger >> debuggerClass [ - - ^ GTGlamourDebugger -] - -{ #category : #accessing } -GTPPStepToGlamourDebugger >> defaultCategory [ - - ^ 'Step to debugger' -] - -{ #category : #accessing } -GTPPStepToGlamourDebugger >> defaultLabel [ - - ^ self debuggerClass defaultTitle -] - -{ #category : #accessing } -GTPPStepToGlamourDebugger >> defaultOrder [ - - ^ 150 -] - -{ #category : #actions } -GTPPStepToGlamourDebugger >> executeAction [ - - self session - stepUntil: (self session - createStepPredicateForPredicate: self isGlamourDebuggerActivePredicate - fromContext: self currentContext ) - from: self currentContext. - - (self isGlamourDebuggerActivePredicate matches: self interruptedContext) ifTrue: [ - self debugger debug: self interruptedContext using: self debuggerClass ] - -] - -{ #category : #testing } -GTPPStepToGlamourDebugger >> isGlamourDebuggerActivePredicate [ - - ^ self session createPredicateForBlock: [ :aContext | - (aContext receiver class inheritsFrom: GLMPresentation) and: [ aContext selector = #startOn: ] ] -] diff --git a/src-archive/GT-GlamourDebugger/package.st b/src-archive/GT-GlamourDebugger/package.st deleted file mode 100644 index ce8080357..000000000 --- a/src-archive/GT-GlamourDebugger/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'GT-GlamourDebugger' } diff --git a/src-archive/GT-InspectorExtensions-CoreRoassal/FileReference.extension.st b/src-archive/GT-InspectorExtensions-CoreRoassal/FileReference.extension.st deleted file mode 100644 index 67ffe914e..000000000 --- a/src-archive/GT-InspectorExtensions-CoreRoassal/FileReference.extension.st +++ /dev/null @@ -1,47 +0,0 @@ -Extension { #name : #FileReference } - -{ #category : #'*GT-InspectorExtensions-CoreRoassal' } -FileReference >> gtInspectorGroupedFilesIn: composite [ - - ^ composite roassal2 - title: 'Grouped files'; - initializeView: [ RTDoubleBarBuilder new ]; - painting: [ :builder :presentation | - | metric all grouped | - metric := #size. - all := self allFiles. - grouped := (all groupedBy: [ :each | each extension ]) - associations sorted: [:a :b | - (a value sumNumbers: metric) > - (b value sumNumbers: metric) ]. - grouped := (grouped first: (20 min: grouped size)) select: [:each | - (each value sumNumbers: metric) > 0]. - builder pointName: [ :each | each key ]. - builder points: grouped. - builder bottomValue: [ :each | each value size ] titled: 'Number of files'. - builder - topValue: [ :each | (each value sumNumbers: metric) / 1000000 ] - titled: 'Total size in MB']; - send: #value; - when: [self isDirectory and: [self hasChildren]] -] - -{ #category : #'*GT-InspectorExtensions-CoreRoassal' } -FileReference >> gtInspectorNestingIn: composite [ - - ^ composite roassal2 - title: 'Nesting'; - initializeView: [ RTCircularTreeMapBuilder new ]; - painting: [ :b :presentation | - b shape - color: Color transparent; - borderColor: Color lightGray; - if: [ :f | f isFile ] color: (RTNIdentityNormalizer withCommand: [:f | f extension]). - b - leafWeight: [:f | f size sqrt ]; - explore: self - nesting: #directories - leaves: #files. ]; - send: #value; - when: [self isDirectory and: [self hasChildren]] -] diff --git a/src-archive/GT-InspectorExtensions-CoreRoassal/GLMBrowser.extension.st b/src-archive/GT-InspectorExtensions-CoreRoassal/GLMBrowser.extension.st deleted file mode 100644 index 5fa8f5eb6..000000000 --- a/src-archive/GT-InspectorExtensions-CoreRoassal/GLMBrowser.extension.st +++ /dev/null @@ -1,129 +0,0 @@ -Extension { #name : #GLMBrowser } - -{ #category : #'*GT-InspectorExtensions-CoreRoassal' } -GLMBrowser >> gtInspectorOpenTreeIn: composite [ - - ^ composite roassal2 - title: 'Tree'; - painting: [:view :b | - self viewTreeOn: view ] -] - -{ #category : #'*GT-InspectorExtensions-CoreRoassal' } -GLMBrowser >> openTree [ - | composer | - composer := GLMCompositePresentation new. - composer - act: [:b | b update] - icon: GLMUIThemeExtraIcons glamorousRefresh - entitled: 'Update'. - composer tabulator with: [:t | - t column: #theOne. - t transmit to: #theOne; andShow: [:a | - a roassal2 - updateOn: GLMTransmissionTriggered from: [ self announcer ]; - painting: [:view :b | self viewTreeOn: view ] ]]. - composer openOn: self -] - -{ #category : #'*GT-InspectorExtensions-CoreRoassal' } -GLMBrowser >> screenshot: aFilenameString on: anObject after: aBlock [ - - | window | - window := self openOn: anObject. - aBlock glamourValue: self asGlamorousMultiValue. - World doOneCycle. - PNGReadWriter putForm: window imageForm onFileNamed: aFilenameString. - ^ window -] - -{ #category : #'*GT-InspectorExtensions-CoreRoassal' } -GLMBrowser >> viewAnnouncementsOn: view [ - "view shape rectangle withoutBorder. - view node: 'Glamour' forIt: [ - self viewTreeOn: view ]. - self umlClassWithTitle: #yourself view: view nodes: (Array with: 'Announced objects') forEach: [ :eachNode | - view interaction - nodraggable; - forward: ROAbstractMouseDragging. - view shape label text: [:p | (p class name removePrefix: 'GLM') removeSuffix: 'Renderer' ]. - view nodes: - (self pane withAllPanes flatCollect: [:each | - each glmSubscriptions collect: [:eachSub | eachSub subscriber]]) asSet. - view interaction - nodraggable; - forward: ROAbstractMouseDragging. - view shape label text: [:p | (p class name removePrefix: 'GLM') removeSuffix: 'Renderer' ]. - view nodes: - (self pane withAllPresentations flatCollect: [:each | - each glmSubscriptions collect: [:eachSub | eachSub subscriber]]) asIdentitySet. - view verticalLineLayout ]. - - view shape line - color: Color red twiceLighter; - attachPoint: (ROHorizontalAttachPoint new). - view edges: self pane withAllPanes from: #yourself toAll: [:each | - each glmSubscriptions collect: [:eachSub | eachSub subscriber]]. - view shape line - color: Color red twiceLighter; - attachPoint: (ROHorizontalAttachPoint new). - view edges: self pane withAllPresentations from: #yourself toAll: [:each | - each glmSubscriptions collect: [:eachSub | eachSub subscriber]]. - view horizontalLineLayout horizontalGap: 50" -] - -{ #category : #'*GT-InspectorExtensions-CoreRoassal' } -GLMBrowser >> viewTree [ - - | view | - view := RTView new. - view @ RTDraggableView. - self viewTreeOn: view. - ^ view open. -] - -{ #category : #'*GT-InspectorExtensions-CoreRoassal' } -GLMBrowser >> viewTreeOn: view [ - | b label line elements | - - b := RTUMLClassBuilder new. - b - addObjects: self pane withAllPanes; - classname: #name; - instanceVariables: nil; - methodsNames: #ports; - methodselector: #name; - attributeselector: nil; - buildSchema: view. - elements := RTGroup new. - elements addAll: b classesGroup. - - label := RTLabel new height: 10; text: [:p | (p class name removePrefix: 'GLM') removeSuffix: 'Presentation' ]. - - self pane withAllPresentations do: [ :p | | e | - view add: (e:= (label elementOn: p ) @ RTDraggable). - elements add: e ]. - - line := RTMultiLine new orthoVertical attachPoint: RTVerticalAttachPoint instance. - - RTEdge buildEdgesFromObjects: self pane withAllPanes - from: #yourself to: [ :each | each presentations ] using: line inView: view. - - RTEdge buildEdgesFromObjects: self pane withAllPanes - from: #browser to: #yourself using: line inView: view. - - RTEdge buildEdgesFromObjects: (self pane withAllPresentations select: [:each | each isKindOf: GLMDynamicPresentation]) - from: #yourself to: #cachedPresentation using: line inView: view scope: elements. - - RTEdge buildEdgesFromObjects: (self pane withAllPresentations select: [:each | each isKindOf: GLMCompositePresentation]) - from: #yourself toAll: #presentations using: line inView: view scope: elements. - - - - line := RTArrowedLine new color: Color blue; attachPoint: RTShorterDistanceAttachPoint instance. - RTEdge buildEdgesFromObjects: ((self pane withAllPresentations select: [:each | each isKindOf: GLMBrowser]) flatCollect: [:each | each transmissions]) - from: #destination toAll: #origins using: line inView: view. - - RTTreeLayout new on: elements. - -] diff --git a/src-archive/GT-InspectorExtensions-CoreRoassal/GLMCompositePresentation.extension.st b/src-archive/GT-InspectorExtensions-CoreRoassal/GLMCompositePresentation.extension.st deleted file mode 100644 index b46d27fe1..000000000 --- a/src-archive/GT-InspectorExtensions-CoreRoassal/GLMCompositePresentation.extension.st +++ /dev/null @@ -1,54 +0,0 @@ -Extension { #name : #GLMCompositePresentation } - -{ #category : #'*GT-InspectorExtensions-CoreRoassal' } -GLMCompositePresentation >> gtInspectorOpenTreeIn: composite [ - - ^ composite roassal2 - title: 'Tree'; - painting: [:view :b | - self viewTreeOn: view ] -] - -{ #category : #'*GT-InspectorExtensions-CoreRoassal' } -GLMCompositePresentation >> viewTreeOn: view [ - | b label line elements | - - b := RTUMLClassBuilder new. - b - addObjects: self pane withAllPanes; - classname: #name; - instanceVariables: nil; - methodsNames: #ports; - methodselector: #name; - attributeselector: nil; - buildSchema: view. - elements := RTGroup new. - elements addAll: b classesGroup. - - label := RTLabel new height: 10; text: [:p | (p class name removePrefix: 'GLM') removeSuffix: 'Presentation' ]. - - self pane withAllPresentations do: [ :p | | e | - view add: (e:= (label elementOn: p ) @ RTDraggable). - elements add: e ]. - - line := RTMultiLine new orthoVertical attachPoint: RTVerticalAttachPoint instance. - - RTEdge buildEdgesFromObjects: self pane withAllPanes - from: #yourself to: [ :each | each presentations ] using: line inView: view. - - RTEdge buildEdgesFromObjects: self pane withAllPanes - from: #browser to: #yourself using: line inView: view. - - RTEdge buildEdgesFromObjects: (self pane withAllPresentations select: [:each | each isKindOf: GLMDynamicPresentation]) - from: #yourself to: #cachedPresentation using: line inView: view scope: elements. - - RTEdge buildEdgesFromObjects: (self pane withAllPresentations select: [:each | each isKindOf: GLMCompositePresentation]) - from: #yourself toAll: #presentations using: line inView: view scope: elements. - - RTTreeLayout new on: elements. - - line := RTLine new color: Color blue; attachPoint: RTShorterDistanceAttachPoint instance. - RTEdge buildEdgesFromObjects: ((self pane withAllPresentations select: [:each | each isKindOf: GLMBrowser]) flatCollect: [:each | each transmissions]) - from: #destination toAll: #origins using: line inView: view. - -] diff --git a/src-archive/GT-InspectorExtensions-CoreRoassal/GLMSystemWindow.extension.st b/src-archive/GT-InspectorExtensions-CoreRoassal/GLMSystemWindow.extension.st deleted file mode 100644 index 2a00c6958..000000000 --- a/src-archive/GT-InspectorExtensions-CoreRoassal/GLMSystemWindow.extension.st +++ /dev/null @@ -1,9 +0,0 @@ -Extension { #name : #GLMSystemWindow } - -{ #category : #'*GT-InspectorExtensions-CoreRoassal' } -GLMSystemWindow >> gtInspectorOpenTreeIn: composite [ - - ^ (self model - gtInspectorOpenTreeIn: composite) - title: 'Browser tree' -] diff --git a/src-archive/GT-InspectorExtensions-CoreRoassal/GTInspector.extension.st b/src-archive/GT-InspectorExtensions-CoreRoassal/GTInspector.extension.st deleted file mode 100644 index ad7c1ae95..000000000 --- a/src-archive/GT-InspectorExtensions-CoreRoassal/GTInspector.extension.st +++ /dev/null @@ -1,40 +0,0 @@ -Extension { #name : #GTInspector } - -{ #category : #'*GT-InspectorExtensions-CoreRoassal' } -GTInspector class >> gtInspectorExtensionsMapIn: composite [ - - composite roassal2 - title: 'Extensions map'; - initializeView: [ RTCircularTreeMapBuilder new ]; - painting: [ :b | - b - color: [ : each | - each isClassOrTrait - ifTrue: [ - (each withAllSuperclasses \ { Object . ProtoObject } anySatisfy: [ :class | - (Pragma allNamed: #gtInspectorPresentationOrder: in: class) notEmpty - or: [ (Pragma allNamed: #spotterOrder: in: class) notEmpty ] ]) - ifFalse: [ Color veryLightGray alpha: 0.5 ] - ifTrue: [ Color red ] ] - ifFalse: [ Color transparent ]]; - borderColor: Color veryLightGray; - baseradius: 500; - leafWeight: [ :each | each methods size ]. - b - explore: RPackageOrganizer default packages - nesting: [ :each | - (each isKindOf: Collection) - ifTrue: [ each ] - ifFalse: [ - (each isKindOf: RPackage) - ifTrue: [ each classTags ] - ifFalse: [ { } ] ] ] - leaves: [ :each | - (each isKindOf: Collection) - ifTrue: [ { } ] - ifFalse: [ (each isKindOf: RPackage) - ifTrue: [ { } ] - ifFalse: [ each classes ] ] ]. - b build view canvas camera focusOnCenterScaled. - b ] -] diff --git a/src-archive/GT-InspectorExtensions-CoreRoassal/GTInspectorMessageTallyCharter.class.st b/src-archive/GT-InspectorExtensions-CoreRoassal/GTInspectorMessageTallyCharter.class.st deleted file mode 100644 index e383c9dc6..000000000 --- a/src-archive/GT-InspectorExtensions-CoreRoassal/GTInspectorMessageTallyCharter.class.st +++ /dev/null @@ -1,29 +0,0 @@ -" -Helper class for displaying charts specific for a MessageTally. -" -Class { - #name : #GTInspectorMessageTallyCharter, - #superclass : #GLMCompositePresentation, - #category : #'GT-InspectorExtensions-CoreRoassal' -} - -{ #category : #visualization } -GTInspectorMessageTallyCharter >> performanceOf: aMessageTally with: builder in: presentation [ - "Displays a double chart showing the top 20 most costly methods within a MessageTally. - For each method it sows the number of occurences of a method and the - total amount of local tallies for that method. Useful for identifying outliers - within one execution." - - | all grouped metric | - metric := #localTally. - all := aMessageTally deepCollect: [ :each | each sonsOver: 1 ]. - grouped := (all groupedBy: [ :each | String streamContents: [:s | each gtDisplayIdentifierOn: s] ]) - associations sorted: [:a :b | - (a value sumNumbers: metric) > - (b value sumNumbers: metric) ]. - grouped := (grouped first: (20 min: grouped size)) select: [:each | (each value sumNumbers: metric) > 0]. - builder pointName: [ :each | each key ]. - builder points: grouped. - builder bottomValue: [ :each | each key size ] titled: 'Locations'. - builder topValue: [ :each | each value sumNumbers: metric ] titled: 'Tallies' -] diff --git a/src-archive/GT-InspectorExtensions-CoreRoassal/MessageTally.extension.st b/src-archive/GT-InspectorExtensions-CoreRoassal/MessageTally.extension.st deleted file mode 100644 index c62effcf4..000000000 --- a/src-archive/GT-InspectorExtensions-CoreRoassal/MessageTally.extension.st +++ /dev/null @@ -1,68 +0,0 @@ -Extension { #name : #MessageTally } - -{ #category : #'*GT-InspectorExtensions-CoreRoassal' } -MessageTally >> gtInspectorMessageTreeIn: composite [ - - | methods normalizer | - methods := self withDeepCollect: #children. - normalizer := RTNColorLinearNormalizer - inContext: methods - withCommand: #tally - lowColor: Color gray - highColor: Color red. - ^ (composite tree) - title: 'Tree'; - children: [ :each | each children ]; - "rootsExpanded;" - format: [ :each | - Text - string: each gtDisplayString - attributes: { TextColor color: (normalizer rtValue: each)}]; - when: [ self children notEmpty ]; - filterOn: [ :text :each | each gtDisplayString includesSubstring: text caseSensitive: false ]; - morphicSelectionAct: [ :list | list selection method browse ] - icon: GLMUIThemeExtraIcons glamorousBrowse - on: $b - entitled: 'Browse (b)' - -] - -{ #category : #'*GT-InspectorExtensions-CoreRoassal' } -MessageTally >> gtInspectorPerformanceChartIn: composite [ - - | metric | - metric := #localTally. - ^ composite roassal2 - title: 'Top tallies'; - initializeView: [ RTDoubleBarBuilder new ]; - painting: [ :builder :presentation | - GTInspectorMessageTallyCharter new - performanceOf: self - with: builder - in: presentation ]; - when: [ self children notEmpty ] -] - -{ #category : #'*GT-InspectorExtensions-CoreRoassal' } -MessageTally >> gtInspectorSunburstIn: composite [ - - | methods normalizer | - methods := self withDeepCollect: #children. - normalizer := RTNColorLinearNormalizer - inContext: methods - withCommand: #tally - lowColor: Color veryLightGray - highColor: Color red. - ^ composite roassal2 - title: 'Sunburst'; - initializeView: [ RTSunburstBuilder new ]; - painting: [ :b :presentation | - b strategy radialSpacing: 1. - b shape current - color: normalizer. - b - leafWeight: #tally; - angularSpacing: 1; - from: (Array with: self) using: #children ]; - when: [ self children notEmpty ] -] diff --git a/src-archive/GT-InspectorExtensions-CoreRoassal/MetacelloMCVersion.extension.st b/src-archive/GT-InspectorExtensions-CoreRoassal/MetacelloMCVersion.extension.st deleted file mode 100644 index 34311cb31..000000000 --- a/src-archive/GT-InspectorExtensions-CoreRoassal/MetacelloMCVersion.extension.st +++ /dev/null @@ -1,9 +0,0 @@ -Extension { #name : #MetacelloMCVersion } - -{ #category : #'*GT-InspectorExtensions-CoreRoassal' } -MetacelloMCVersion >> = aMetacelloVersion [ - "needed because the super implementation only checks the version number, - and we also need to ensure that we have the same configuration class" - ^ (super = aMetacelloVersion) and: [ - self spec project configuration class = aMetacelloVersion spec project configuration class ] -] diff --git a/src-archive/GT-InspectorExtensions-CoreRoassal/MetacelloVersion.extension.st b/src-archive/GT-InspectorExtensions-CoreRoassal/MetacelloVersion.extension.st deleted file mode 100644 index 1b4ea1a25..000000000 --- a/src-archive/GT-InspectorExtensions-CoreRoassal/MetacelloVersion.extension.st +++ /dev/null @@ -1,22 +0,0 @@ -Extension { #name : #MetacelloVersion } - -{ #category : #'*GT-InspectorExtensions-CoreRoassal' } -MetacelloVersion >> gtInspectorProjectMapIn: composite [ - - composite roassal2 - title: 'Project map'; - when: [ self projects notEmpty ]; - initializeView: [ RTMondrian new ]; - painting: [ :view | - view shape label text: [:each | (each asString copyReplaceAll: 'ConfigurationOf' with: '') copyReplaceAll: ' ' with: String cr]; color: Color black. - view nodes: ((self - withDeepCollect: [ :each | each projects collect: #version ] - as: Set) reject: #isNil). - view shape line color: (Color lightGray alpha: 0.2). - view edges - connectFrom: #yourself toAll: [:each | each projects collect: #version]. - view layout horizontalDominanceTree layered verticalGap: 20. - view view pushBackEdges ] - - -] diff --git a/src-archive/GT-InspectorExtensions-CoreRoassal/package.st b/src-archive/GT-InspectorExtensions-CoreRoassal/package.st deleted file mode 100644 index 4fb2ce41c..000000000 --- a/src-archive/GT-InspectorExtensions-CoreRoassal/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'GT-InspectorExtensions-CoreRoassal' } diff --git a/src-archive/GT-PetitParserDebugger/Context.extension.st b/src-archive/GT-PetitParserDebugger/Context.extension.st deleted file mode 100644 index dcc9a05e2..000000000 --- a/src-archive/GT-PetitParserDebugger/Context.extension.st +++ /dev/null @@ -1,61 +0,0 @@ -Extension { #name : #Context } - -{ #category : #'*GT-PetitParserDebugger' } -Context >> isPPParseMethodContext [ - - ^ (self receiver class inheritsFrom: PPParser) and: [ - self selector = #parseOn: ] - - - -] - -{ #category : #'*GT-PetitParserDebugger' } -Context >> isPPParseRootMethodContext [ - - ^ (self receiver class inheritsFrom: PPParser) and: [ - self selector = #parse: ] - - - -] - -{ #category : #'*GT-PetitParserDebugger' } -Context >> locateRootPPParser [ - "Find the last context starting from the top of the stack (or the first starting from the bottom of the stack) - that was created by a PPParser" - | parserContext currentContext | - - parserContext := nil. - currentContext := self. - [ - (currentContext := currentContext locateTopPPParser) notNil - ] whileTrue: [ - parserContext := currentContext. - currentContext := currentContext sender ]. - - ^ parserContext -] - -{ #category : #'*GT-PetitParserDebugger' } -Context >> locateTopNamedPPParser [ - - ^ self findContextSuchThat: [ :ctx | - ctx isPPParseMethodContext and: [ - (ctx receiver class includesBehavior: PPDelegateParser) and: [ - ctx receiver name notNil ] ] ] - - - -] - -{ #category : #'*GT-PetitParserDebugger' } -Context >> locateTopPPParser [ - "Find the first context, starting from the top the stack that was created by a PPParser. " - - ^ self findContextSuchThat: [ :ctx | - ctx isPPParseMethodContext ] - - - -] diff --git a/src-archive/GT-PetitParserDebugger/GTPPDebugAction.class.st b/src-archive/GT-PetitParserDebugger/GTPPDebugAction.class.st deleted file mode 100644 index 6fd335aba..000000000 --- a/src-archive/GT-PetitParserDebugger/GTPPDebugAction.class.st +++ /dev/null @@ -1,27 +0,0 @@ -Class { - #name : #GTPPDebugAction, - #superclass : #DebugAction, - #instVars : [ - 'startContext' - ], - #category : #'GT-PetitParserDebugger' -} - -{ #category : #testing } -GTPPDebugAction >> appliesToContext: aContext [ - - ^ self session isActive and: [ - aContext locateTopPPParser notNil ] -] - -{ #category : #accessing } -GTPPDebugAction >> startContext [ - - ^ startContext ifNil: [ self currentContext ] -] - -{ #category : #accessing } -GTPPDebugAction >> startContext: aContext [ - - startContext := aContext -] diff --git a/src-archive/GT-PetitParserDebugger/GTPPDebugSession.class.st b/src-archive/GT-PetitParserDebugger/GTPPDebugSession.class.st deleted file mode 100644 index d1ef54fd4..000000000 --- a/src-archive/GT-PetitParserDebugger/GTPPDebugSession.class.st +++ /dev/null @@ -1,155 +0,0 @@ -Class { - #name : #GTPPDebugSession, - #superclass : #DebugSession, - #instVars : [ - 'rootParserContext' - ], - #category : #'GT-PetitParserDebugger' -} - -{ #category : #'predicates creation' } -GTPPDebugSession >> createStepPredicateForPredicate: aPredicate [ - - ^ self createStepPredicateForPredicate: aPredicate fromContext: rootParserContext - -] - -{ #category : #testing } -GTPPDebugSession >> isActive [ - - ^ self isActive: rootParserContext -] - -{ #category : #testing } -GTPPDebugSession >> isActive: aContext [ - - ^ aContext - ifNil: [ false ] - ifNotNil: [ - aContext isDead not and: [ - aContext ~= self process suspendedContext or: [aContext willReturn not ] ] ] -] - -{ #category : #testing } -GTPPDebugSession >> isPPParser: anObject [ - - ^ self isPPParserClass: anObject class - -] - -{ #category : #testing } -GTPPDebugSession >> isPPParserClass: aClass [ - - ^ aClass inheritsFrom: PPParser - - -] - -{ #category : #testing } -GTPPDebugSession >> isPPProduction: anObject [ - - ^ (anObject class includesBehavior: PPDelegateParser ) and: [ - anObject name notNil ] - -] - -{ #category : #predicates } -GTPPDebugSession >> namedProductionPredicate: anObject [ - "" - - ^ self createPredicateForBlock: [ :aContext | - (self isPPProduction: aContext receiver) and: [ - anObject isNil or: [ - aContext receiver name = anObject ] ] ] -] - -{ #category : #predicates } -GTPPDebugSession >> notDelegateParserClassPredicate [ - - ^ self createPredicateForBlock: [ :aContext | - (self isPPParser: aContext receiver) and: [ - aContext receiver class ~= PPDelegateParser ] ] -] - -{ #category : #predicates } -GTPPDebugSession >> parseMethodEntryPredicate [ - - ^ self createPredicateForBlock: [ :aContext | - (self isPPParser: aContext receiver) and: [ - aContext selector = #parseOn: and: [ - aContext isInitialnstruction ] ] ] -] - -{ #category : #predicates } -GTPPDebugSession >> parseMethodPredicate [ - - ^ self createPredicateForBlock: [ :aContext | - (self isPPParser: aContext receiver) and: [ - aContext selector = #parseOn: ] ] -] - -{ #category : #initialization } -GTPPDebugSession >> process: aProcess context: aContext [ - - super process: aProcess context: aContext. - - self flag: 'Have a method that is only called when the session is created and put this there'. - rootParserContext ifNil: [ - rootParserContext := aContext locateRootPPParser] -] - -{ #category : #accessing } -GTPPDebugSession >> rootParser [ - ^ (rootParserContext tempAt: 1) debugRoot -] - -{ #category : #accessing } -GTPPDebugSession >> rootParserContext [ - - ^ rootParserContext -] - -{ #category : #'debugging actions' } -GTPPDebugSession >> stepOverInitialInstructionForContext: aContext [ - - (self isActive and: [ - self parseMethodEntryPredicate matches: aContext ]) - ifTrue: [ self stepInto ] - -] - -{ #category : #'debugging actions' } -GTPPDebugSession >> stepToNextNonDelegateParserFromContext: aContext [ - - self - stepUntil: (self parseMethodEntryPredicate and: self notDelegateParserClassPredicate) - from: aContext -] - -{ #category : #'debugging actions' } -GTPPDebugSession >> stepToNextParserFromContext: aContext [ - - self - stepUntil: self parseMethodEntryPredicate - from: aContext -] - -{ #category : #'debugging actions' } -GTPPDebugSession >> stepToNextProduction: aProduction fromContext: aContext [ - - self - stepUntil: (self parseMethodEntryPredicate and: (self namedProductionPredicate: aProduction)) - from: aContext -] - -{ #category : #accessing } -GTPPDebugSession >> stream [ - - ^ self streamFromContext: rootParserContext -] - -{ #category : #accessing } -GTPPDebugSession >> streamFromContext: aContext [ - - ^ aContext tempAt: 1 -] diff --git a/src-archive/GT-PetitParserDebugger/GTPPDebugger.class.st b/src-archive/GT-PetitParserDebugger/GTPPDebugger.class.st deleted file mode 100644 index dbe38f302..000000000 --- a/src-archive/GT-PetitParserDebugger/GTPPDebugger.class.st +++ /dev/null @@ -1,344 +0,0 @@ -Class { - #name : #GTPPDebugger, - #superclass : #GTGenericStackDebugger, - #category : #'GT-PetitParserDebugger' -} - -{ #category : #accessing } -GTPPDebugger class >> defaultTitle [ - - ^ 'PetitParser Debugger' -] - -{ #category : #testing } -GTPPDebugger class >> handlesContext: aContext [ - - ^ (aContext findContextSuchThat: [ :ctx | - ctx isPPParseRootMethodContext ]) notNil -] - -{ #category : #'tools registry' } -GTPPDebugger class >> register [ - - self registerToolsOn: Smalltalk tools. -] - -{ #category : #'tools registry' } -GTPPDebugger class >> registerToolsOn: registry [ - - "Add ourselves to registry. See [Smalltalk tools]" - registry registerDebugger: self withRank: 55. -] - -{ #category : #private } -GTPPDebugger class >> sessionClass [ - - ^ GTPPDebugSession -] - -{ #category : #'building presentations' } -GTPPDebugger >> debugViewIn: composite [ - (self session stream root respondsTo: #root) - ifFalse: [ ^ self ]. - (composite dynamic - title: 'Result'; - display: [|resultPresentation| - resultPresentation := GLMCompositePresentation new. - self session stream root root gtDebugView: resultPresentation. - resultPresentation last noTitle. - resultPresentation ]) -] - -{ #category : #building } -GTPPDebugger >> debuggerStructureIn: browser [ - - browser - row: #stack; - row: [ :row | - row - column: #code; - column: #stream ]; - row: #inspector. -] - -{ #category : #building } -GTPPDebugger >> debuggerTransmissionsIn: browser [ - - super debuggerTransmissionsIn: browser. - - browser transmit - from: #stack port: #entity; - to: #stream; - when: [ :aSession | aSession notNil ]; - andShow: [ :aComposite | self streamIn: aComposite ]. - -] - -{ #category : #'building presentations' } -GTPPDebugger >> exampleIn: aComposite forSession: aSession forParser: parser [ - - aComposite text - title: 'Example'; - useExplicitNotNil; - display: [ - parser example. - ]; - act: [:text | text update] icon: GLMUIThemeExtraIcons glamorousRefresh entitled: 'Generate another one' -] - -{ #category : #'building presentations' } -GTPPDebugger >> firstIn: aComposite forSession: aSession forParser: parser [ - - aComposite list - title: 'First'; - useExplicitNotNil; - display: [ - parser firstSet. - ]; - format: [ :p | p displayName ] -] - -{ #category : #'building presentations' } -GTPPDebugger >> followIn: aComposite forSession: aSession forParser: parser [ - - aComposite list - title: 'Follow'; - useExplicitNotNil; - format: #displayName; - display: [ - | rootParser | - rootParser := aSession rootParser. - rootParser followSets at: parser ifAbsent: [ #() ]. - ] -] - -{ #category : #'building presentations' } -GTPPDebugger >> graphIn: aComposite forSession: aSession forParser: parser [ - - aComposite morph - title: 'Graph'; - useExplicitNotNil; - display: [ - | morph | - morph := ScrollPane new. - morph color: Color white. - morph scroller addMorph: parser morphicProduction. - (morph allMorphs select: [ :each | - each class = StringMorph and: [ each color = Color blue ] ]) do: [ :each | - each on: #click send: #execute to: - ((GTPPStepToNextNamedProductionAction forDebugger: self) - production: each contents) ]. - morph ] -] - -{ #category : #'building presentations' } -GTPPDebugger >> inspectorIn: aComposite on: anObject [ - - super inspectorIn: aComposite on: anObject. - - "aComposite last title: 'Inspector'. - self progressIn: aComposite. - self tallyIn: aComposite. - self debugViewIn: aComposite." - ^ aComposite -] - -{ #category : #'building actions' } -GTPPDebugger >> installStreamActionsFor: aPresentation [ - - self installActionsForRootPragmas: { #PPStreamDebuggingAction } in: aPresentation -] - -{ #category : #'building presentations' } -GTPPDebugger >> mapIn: aComposite forSession: aSession forParser: parser [ - ((parser isKindOf: PPDelegateParser) - and: [parser name isNil not]) ifFalse: [ ^ self ]. - self class environment at: #GLMRoassalPresentation ifPresent: [ :cls | - aComposite roassal - title: 'Map'; - useExplicitNotNil; - painting: [ :view | - (self production: #start from: aSession rootParser class) - viewAllNamedParsersWithSelection: (Array with: parser name) - previewing: [:eachParser | self sourceCodeFrom: aSession rootParser class selector: eachParser name ] - on: view ] ] - -] - -{ #category : #'building presentations' } -GTPPDebugger >> methodCodeIn: aComposite forContext: aContext [ - - super methodCodeIn: aComposite forContext: aContext. - aContext ifNotNil: [ - self workspaceIn: aComposite forSession: self session forContext: aContext ] - -] - -{ #category : #'printing/formatting' } -GTPPDebugger >> printStackClassColumnForContext: aContext [ - - ^ (self session isPPParser: aContext receiver) - ifTrue: [ - String streamContents: [:stream | - - stream nextPutAll: aContext receiver class name. - aContext methodClass == aContext receiver class - ifFalse: [ - stream nextPut: $(. - stream nextPutAll: aContext methodClass name. - stream nextPut: $) ]. - stream nextPut: $(. - aContext receiver printNameOn: stream. - stream nextPut: $). - "stream nextPutAll: '>>'. - - str := super printStackClassColumnForContext: aContext. - str := str allButFirst: (str indexOf: $> ifAbsent: [ -1 ]) + 1. - stream nextPutAll: str" ] ] - ifFalse: [ super printStackClassColumnForContext: aContext ] - -] - -{ #category : #'private utilities' } -GTPPDebugger >> production: selector from: class [ - | parser | - - parser := class new. - ^ selector isNil - ifTrue: [ parser ] - ifFalse: [ parser productionAt: selector ] -] - -{ #category : #'private utilities' } -GTPPDebugger >> productionSelectorsFrom: class [ - - ^ class productionSelectors -] - -{ #category : #'building presentations' } -GTPPDebugger >> progressIn: aComposite [ - (self session stream stream respondsTo: #asPositionMorph) - ifFalse: [ ^ self ]. - aComposite morph - title: 'Progress'; - display: [ - | morph | - morph := ScrollPane new. - morph color: Color white. - morph scroller addMorph: self session stream stream asPositionMorph. - morph ]. -] - -{ #category : #accessing } -GTPPDebugger >> selectedObject [ - - ^ self selectedContext receiver -] - -{ #category : #'private utilities' } -GTPPDebugger >> sourceCodeFrom: parser inContext: aPPContext [ - | name root | - - name := parser name. - root := aPPContext root. - (root isKindOf: PPCompositeParser) ifTrue: [ - name ifNotNil: [ - ^ root class ultimateSourceCodeAt: (name ifNil: [ #start ]) ifAbsent: [ String new ] - ] - ]. - ^ '' -] - -{ #category : #'building presentations' } -GTPPDebugger >> sourceIn: aComposite forSession: aSession forParser: selectedParser [ - - aComposite pharoMethod - title: 'Production'; - useExplicitNotNil; - display: [ self sourceCodeFrom: selectedParser inContext: self session stream ]; - smalltalkClass: [ aSession rootParser class ] -] - -{ #category : #'building actions' } -GTPPDebugger >> stackDebuggingActionsPragmas [ - - ^ super stackDebuggingActionsPragmas, { #PPDebuggingAction } -] - -{ #category : #'building presentations' } -GTPPDebugger >> streamIn: composite [ - - composite text - title: 'Stream'; - when: [ :aSession | aSession stream notNil ]; - format: [ :aSession | aSession stream collection ]; - initialize: [ :aPresentation | aPresentation - selectionInterval: (1 to: (self session stream ifNil: [ 0 ] ifNotNil: [ :aStream | aStream position ])) ]; - with: [ :aPresentation | self installStreamActionsFor: aPresentation ] -] - -{ #category : #accessing } -GTPPDebugger >> streamPane [ - - ^ self browser paneNamed: #stream -] - -{ #category : #accessing } -GTPPDebugger >> streamSelectionInterval [ - - ^ self selectionIntervalForPane: #stream -] - -{ #category : #'building presentations' } -GTPPDebugger >> tallyIn: composite [ - (self session stream stream respondsTo: #asFrequencyTable) - ifFalse: [ ^ self ]. - composite table - title: 'Tally'; - column: 'Parser' evaluated: [ :each | each first displayName ]; - column: 'Count' evaluated: [ :each | each second printString ]; - column: 'Percentage (%)' evaluated: [ :each | each third printString ]; - display: [ self session stream stream asFrequencyTable ]; - noSelection; - showOnly: 50 -] - -{ #category : #'printing/formatting' } -GTPPDebugger >> textAttributesForStackEntry: aContext [ - - (self session isPPProduction: aContext receiver) - ifTrue: [ ^ {TextEmphasis bold} ]. - - (self session rootParserContext == aContext ) - ifTrue: [ ^ {TextEmphasis italic} ]. - - ^ {TextColor gray} -] - -{ #category : #updating } -GTPPDebugger >> updateBrowser [ - super updateBrowser. - self updateStreamSelectionInterval. -] - -{ #category : #updating } -GTPPDebugger >> updateStreamSelectionInterval [ - - (self streamPane port: #selectionInterval) value: (1 to: self session stream position) -] - -{ #category : #'building presentations' } -GTPPDebugger >> workspaceIn: aComposite forSession: aSession forContext: aContext [ - | targetParser | - targetParser := (aContext locateTopNamedPPParser) - ifNil: [ aSession rootParser ] - ifNotNil: [ :parserContext | parserContext receiver ]. - - - self sourceIn: aComposite forSession: aSession forParser: targetParser. - self graphIn: aComposite forSession: aSession forParser: targetParser. - self mapIn: aComposite forSession: aSession forParser: targetParser. - self exampleIn: aComposite forSession: aSession forParser: targetParser. - self firstIn: aComposite forSession: aSession forParser: targetParser. - self followIn: aComposite forSession: aSession forParser: targetParser. -] diff --git a/src-archive/GT-PetitParserDebugger/GTPPDebuggerSmokeTest.class.st b/src-archive/GT-PetitParserDebugger/GTPPDebuggerSmokeTest.class.st deleted file mode 100644 index b4fe87dca..000000000 --- a/src-archive/GT-PetitParserDebugger/GTPPDebuggerSmokeTest.class.st +++ /dev/null @@ -1,49 +0,0 @@ -Class { - #name : #GTPPDebuggerSmokeTest, - #superclass : #GTDebuggerSmokeTest, - #category : #'GT-PetitParserDebugger' -} - -{ #category : #accessing } -GTPPDebuggerSmokeTest >> debuggerToTest [ - - ^ GTPPDebugger -] - -{ #category : #tests } -GTPPDebuggerSmokeTest >> expectedFailures [ - ^ #(testDebugger) -] - -{ #category : #utils } -GTPPDebuggerSmokeTest >> stepToParseOnContext [ - "Step through the execution until the process reaches a context - that can be handles using the PetitParser debugger" - - ^ [ :aProcess | - aProcess - step; - step; - completeStep: aProcess suspendedContext; - completeStep: aProcess suspendedContext; - completeStep: aProcess suspendedContext; - completeStep: aProcess suspendedContext; - step; - step; - step; "send the message 'parse:' " - completeStep: aProcess suspendedContext; - completeStep: aProcess suspendedContext; - completeStep: aProcess suspendedContext; - step. "send the message parseOn: " - aProcess stepToSendOrReturn ] -] - -{ #category : #tests } -GTPPDebuggerSmokeTest >> testDebugger [ - - self - assertDebuggerInitializationForContext: [PPArithmeticParser new parse: '1+1'] asContext - andStepBlock: self stepToParseOnContext. - - self assertDebuggerClosing. -] diff --git a/src-archive/GT-PetitParserDebugger/GTPPReflectivityStepDebugAction.class.st b/src-archive/GT-PetitParserDebugger/GTPPReflectivityStepDebugAction.class.st deleted file mode 100644 index 7768ec42e..000000000 --- a/src-archive/GT-PetitParserDebugger/GTPPReflectivityStepDebugAction.class.st +++ /dev/null @@ -1,17 +0,0 @@ -Class { - #name : #GTPPReflectivityStepDebugAction, - #superclass : #GTReflectivityDebugAction, - #category : #'GT-PetitParserDebugger' -} - -{ #category : #testing } -GTPPReflectivityStepDebugAction >> appliesToContext: aContext [ - - ^ self session isActive and: [ - aContext locateTopPPParser notNil ] -] - -{ #category : #accessing } -GTPPReflectivityStepDebugAction >> debuggerClass [ - ^ GTPPDebugger -] diff --git a/src-archive/GT-PetitParserDebugger/GTPPStepToNextFailureAction.class.st b/src-archive/GT-PetitParserDebugger/GTPPStepToNextFailureAction.class.st deleted file mode 100644 index c0ca9575b..000000000 --- a/src-archive/GT-PetitParserDebugger/GTPPStepToNextFailureAction.class.st +++ /dev/null @@ -1,49 +0,0 @@ -Class { - #name : #GTPPStepToNextFailureAction, - #superclass : #GTPPDebugAction, - #category : #'GT-PetitParserDebugger' -} - -{ #category : #registration } -GTPPStepToNextFailureAction class >> gtActionType [ - - -] - -{ #category : #accessing } -GTPPStepToNextFailureAction >> defaultIcon [ - - ^ GLMUIThemeExtraIcons glamourousNextFailure -] - -{ #category : #accessing } -GTPPStepToNextFailureAction >> defaultLabel [ - - ^ 'Next failure' -] - -{ #category : #accessing } -GTPPStepToNextFailureAction >> defaultOrder [ - ^ 200 -] - -{ #category : #actions } -GTPPStepToNextFailureAction >> executeAction [ - - self session - stepUntil: (self isPPFailureFollowingPredicate) from: self startContext. - (self session isActive and: [ - self isPPFailureFollowingPredicate matches: self session context ]) ifTrue: [ - self session - stepOver; - stepOver; - stepOver ] -] - -{ #category : #predicates } -GTPPStepToNextFailureAction >> isPPFailureFollowingPredicate [ - - ^ self session createPredicateForBlock: [ :aContext | - aContext methodClass = PPFailure class and: [ - aContext selector = #message:context: ] ] -] diff --git a/src-archive/GT-PetitParserDebugger/GTPPStepToNextNamedProductionAction.class.st b/src-archive/GT-PetitParserDebugger/GTPPStepToNextNamedProductionAction.class.st deleted file mode 100644 index 0c5a9175d..000000000 --- a/src-archive/GT-PetitParserDebugger/GTPPStepToNextNamedProductionAction.class.st +++ /dev/null @@ -1,82 +0,0 @@ -Class { - #name : #GTPPStepToNextNamedProductionAction, - #superclass : #GTPPDebugAction, - #instVars : [ - 'production' - ], - #category : #'GT-PetitParserDebugger' -} - -{ #category : #private } -GTPPStepToNextNamedProductionAction class >> allParserSuperclassesFor: aClass [ - | allSuperclasses | - - allSuperclasses := aClass withAllSuperclasses. - "Return 2 in the ifAbsent: block so that if PPCompositeParser is not a superclass only the current class is returned" - ^ allSuperclasses copyFrom: 1 to: (allSuperclasses indexOf: PPCompositeParser ifAbsent: [ 2 ]) - 1 - -] - -{ #category : #registration } -GTPPStepToNextNamedProductionAction class >> gtToNextProductionActionFor: aDebugger [ - - - - ^ (self forDebugger: aDebugger) - production: nil; - label: 'Next production'; - category: 'Next parser invocation'; - icon: GLMUIThemeExtraIcons glamourousNextProduction; - order: 195 -] - -{ #category : #registration } -GTPPStepToNextNamedProductionAction class >> gtToProductionActionFor: aDebugger [ - - - | order allParserSuperclasses showedProductions actions | - - order := 500. - actions := OrderedCollection new. - showedProductions := OrderedCollection new. - - (allParserSuperclasses := self allParserSuperclassesFor: aDebugger session rootParser class) do: [ :each | - | productions | - productions := (aDebugger productionSelectorsFrom: each) copyWithoutAll: showedProductions. - showedProductions addAll: productions. - - actions addAll: (productions collect: [ :aProduction | - (self forDebugger: aDebugger) - production: aProduction; - label: aProduction asString; - category: 'Next production', (allParserSuperclasses size = 1 ifTrue:[ '' ] ifFalse:[ ' [', each name, ']']); - order: (order := order + 1) ]) ]. - - ^ actions -] - -{ #category : #accessing } -GTPPStepToNextNamedProductionAction >> defaultProduction [ - - ^ nil -] - -{ #category : #actions } -GTPPStepToNextNamedProductionAction >> executeAction [ - - self session - stepOverInitialInstructionForContext: self startContext; - stepToNextProduction: self production fromContext: self startContext -] - -{ #category : #accessing } -GTPPStepToNextNamedProductionAction >> production [ - - ^ production ifNil: [ self defaultProduction ] -] - -{ #category : #accessing } -GTPPStepToNextNamedProductionAction >> production: anObject [ - - production := anObject -] diff --git a/src-archive/GT-PetitParserDebugger/GTPPStepToNextNonDelegateParserAction.class.st b/src-archive/GT-PetitParserDebugger/GTPPStepToNextNonDelegateParserAction.class.st deleted file mode 100644 index f10fdb24d..000000000 --- a/src-archive/GT-PetitParserDebugger/GTPPStepToNextNonDelegateParserAction.class.st +++ /dev/null @@ -1,38 +0,0 @@ -Class { - #name : #GTPPStepToNextNonDelegateParserAction, - #superclass : #GTPPDebugAction, - #category : #'GT-PetitParserDebugger' -} - -{ #category : #registration } -GTPPStepToNextNonDelegateParserAction class >> gtActionType [ - - -] - -{ #category : #accessing } -GTPPStepToNextNonDelegateParserAction >> defaultCategory [ - - ^ 'Next parser invocation' -] - -{ #category : #accessing } -GTPPStepToNextNonDelegateParserAction >> defaultLabel [ - - ^ 'any primitive parser' -] - -{ #category : #accessing } -GTPPStepToNextNonDelegateParserAction >> defaultOrder [ - - ^ 201 -] - -{ #category : #actions } -GTPPStepToNextNonDelegateParserAction >> executeAction [ - - self session - stepOverInitialInstructionForContext: self startContext; - stepToNextNonDelegateParserFromContext: self startContext - -] diff --git a/src-archive/GT-PetitParserDebugger/GTPPStepToNextParserAction.class.st b/src-archive/GT-PetitParserDebugger/GTPPStepToNextParserAction.class.st deleted file mode 100644 index 77baa0a27..000000000 --- a/src-archive/GT-PetitParserDebugger/GTPPStepToNextParserAction.class.st +++ /dev/null @@ -1,43 +0,0 @@ -Class { - #name : #GTPPStepToNextParserAction, - #superclass : #GTPPDebugAction, - #category : #'GT-PetitParserDebugger' -} - -{ #category : #registration } -GTPPStepToNextParserAction class >> gtActionType [ - - -] - -{ #category : #accessing } -GTPPStepToNextParserAction >> defaultCategory [ - - ^ 'Next parser invocation' -] - -{ #category : #accessing } -GTPPStepToNextParserAction >> defaultIcon [ - - ^ GLMUIThemeExtraIcons glamourousNextParser -] - -{ #category : #accessing } -GTPPStepToNextParserAction >> defaultLabel [ - - ^ 'Next parser' -] - -{ #category : #accessing } -GTPPStepToNextParserAction >> defaultOrder [ - - ^ 190 -] - -{ #category : #actions } -GTPPStepToNextParserAction >> executeAction [ - - self session - stepOverInitialInstructionForContext: self startContext; - stepToNextParserFromContext: self startContext -] diff --git a/src-archive/GT-PetitParserDebugger/GTPPStepToNextProductionReflectivityAction.class.st b/src-archive/GT-PetitParserDebugger/GTPPStepToNextProductionReflectivityAction.class.st deleted file mode 100644 index ec2235983..000000000 --- a/src-archive/GT-PetitParserDebugger/GTPPStepToNextProductionReflectivityAction.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #GTPPStepToNextProductionReflectivityAction, - #superclass : #GTPPReflectivityStepDebugAction, - #category : #'GT-PetitParserDebugger' -} - -{ #category : #registration } -GTPPStepToNextProductionReflectivityAction class >> gtToNextProductionAction [ - " - " -] - -{ #category : #accessing } -GTPPStepToNextProductionReflectivityAction >> attachBreakpoints [ - - self beforeMethodBreakpoint - targetMethod: PPDelegateParser>>#parseOn: -] - -{ #category : #initialization } -GTPPStepToNextProductionReflectivityAction >> initialize [ - super initialize. - self - label: 'Next production'; - category: 'Next parser invocation (fast)'; - "icon: GLMUIThemeExtraIcons glamourousNextProduction;" - order: 195 -] diff --git a/src-archive/GT-PetitParserDebugger/GTPPStepToNextStreamPositionAction.class.st b/src-archive/GT-PetitParserDebugger/GTPPStepToNextStreamPositionAction.class.st deleted file mode 100644 index c11a5f8a7..000000000 --- a/src-archive/GT-PetitParserDebugger/GTPPStepToNextStreamPositionAction.class.st +++ /dev/null @@ -1,31 +0,0 @@ -Class { - #name : #GTPPStepToNextStreamPositionAction, - #superclass : #GTPPDebugAction, - #category : #'GT-PetitParserDebugger' -} - -{ #category : #registration } -GTPPStepToNextStreamPositionAction class >> gtNextStreamUpdateActionFor: aDebugger [ - - - - ^ (self forDebugger: aDebugger) - label: 'Run to next update'; - icon: GLMUIThemeExtraIcons glamorousInto -] - -{ #category : #actions } -GTPPStepToNextStreamPositionAction >> executeAction [ - | currentPosition | - - currentPosition := self session stream position. - self session - stepUntil: (self streamToDifferentPositionThan: currentPosition) from: self startContext. -] - -{ #category : #predicates } -GTPPStepToNextStreamPositionAction >> streamToDifferentPositionThan: anInteger [ - - ^ self session createPredicateForBlock: [ - self session stream position ~= anInteger ] -] diff --git a/src-archive/GT-PetitParserDebugger/GTPPStepToPPDebugger.class.st b/src-archive/GT-PetitParserDebugger/GTPPStepToPPDebugger.class.st deleted file mode 100644 index a150760ea..000000000 --- a/src-archive/GT-PetitParserDebugger/GTPPStepToPPDebugger.class.st +++ /dev/null @@ -1,69 +0,0 @@ -Class { - #name : #GTPPStepToPPDebugger, - #superclass : #DebugAction, - #category : #'GT-PetitParserDebugger' -} - -{ #category : #registration } -GTPPStepToPPDebugger class >> gtActionType [ - -] - -{ #category : #testing } -GTPPStepToPPDebugger >> appliesToContext: aContext [ - self flag: 'A better mechanism for determining if an action is active or not is needed.'. - - ^ self debugger class ~= self debuggerClass -] - -{ #category : #accessing } -GTPPStepToPPDebugger >> debuggerClass [ - - ^ GTPPDebugger -] - -{ #category : #accessing } -GTPPStepToPPDebugger >> defaultCategory [ - - ^ 'Step to debugger' -] - -{ #category : #accessing } -GTPPStepToPPDebugger >> defaultLabel [ - - ^ self debuggerClass defaultTitle -] - -{ #category : #accessing } -GTPPStepToPPDebugger >> defaultOrder [ - - ^ 150 -] - -{ #category : #actions } -GTPPStepToPPDebugger >> executeAction [ - - self session - stepUntil: (self session - createStepPredicateForPredicate: self isPPDebuggerActivePredicate - fromContext: self currentContext ) - from: self currentContext. - - (self isPPDebuggerActivePredicate matches: self interruptedContext) ifTrue: [ - self debugger debug: self interruptedContext using: self debuggerClass ] - -] - -{ #category : #'as yet unclassified' } -GTPPStepToPPDebugger >> initialize [ - super initialize. - - self needsUpdate: false -] - -{ #category : #testing } -GTPPStepToPPDebugger >> isPPDebuggerActivePredicate [ - - ^ self session createPredicateForBlock: [ :aContext | - aContext isPPParseMethodContext ] -] diff --git a/src-archive/GT-PetitParserDebugger/GTPPStepToParserTypeAction.class.st b/src-archive/GT-PetitParserDebugger/GTPPStepToParserTypeAction.class.st deleted file mode 100644 index 0b8d2044e..000000000 --- a/src-archive/GT-PetitParserDebugger/GTPPStepToParserTypeAction.class.st +++ /dev/null @@ -1,92 +0,0 @@ -Class { - #name : #GTPPStepToParserTypeAction, - #superclass : #GTPPDebugAction, - #instVars : [ - 'parserClass' - ], - #category : #'GT-PetitParserDebugger' -} - -{ #category : #registration } -GTPPStepToParserTypeAction class >> gtActionFor: aDebugger [ - - - |order| - - order := 300. - ^ self parserTypes collect: [ :each | - (self forDebugger: aDebugger) - parserClass: each; - label: each name; - category: 'Next parser type'; - order: (order := order + 1) ] -] - -{ #category : #private } -GTPPStepToParserTypeAction class >> parserTypes [ - - ^ { - PPDelegateParser. - PPActionParser. - PPWrappingParser. - PPAndParser. - PPEndOfInputParser. - PPFlattenParser. - PPTokenParser. - PPMemoizedParser. - PPNotParser. - PPOptionalParser. - PPGreedyRepeatingParser. - PPLazyRepeatingParser. - PPPossessiveRepeatingParser. - PPTrimmingParser. - PPEpsilonParser. - PPFailingParser. - PPChoiceParser. - PPSequenceParser. - PPLiteralObjectParser. - PPLiteralSequenceParser. - PPPluggableParser. - PPPredicateObjectParser. - PPPredicateSequenceParser - } -] - -{ #category : #accessing } -GTPPStepToParserTypeAction >> defaultParserClass [ - - ^ nil -] - -{ #category : #actions } -GTPPStepToParserTypeAction >> executeAction [ - - self session - stepOverInitialInstructionForContext: self startContext; - stepUntil: self sameParserTypePredicate from: self startContext. -] - -{ #category : #accessing } -GTPPStepToParserTypeAction >> parserClass [ - - ^ parserClass ifNil: [ self defaultParserClass ] -] - -{ #category : #accessing } -GTPPStepToParserTypeAction >> parserClass: aClass [ - - parserClass := aClass -] - -{ #category : #predicates } -GTPPStepToParserTypeAction >> sameParserClassPredicate [ - - ^ self session createPredicateForBlock: [ :aContext | - aContext receiver class == self parserClass ] -] - -{ #category : #predicates } -GTPPStepToParserTypeAction >> sameParserTypePredicate [ - - ^ self session parseMethodEntryPredicate and: self sameParserClassPredicate -] diff --git a/src-archive/GT-PetitParserDebugger/GTPPStepToSameNamedProductionAction.class.st b/src-archive/GT-PetitParserDebugger/GTPPStepToSameNamedProductionAction.class.st deleted file mode 100644 index 29b00461d..000000000 --- a/src-archive/GT-PetitParserDebugger/GTPPStepToSameNamedProductionAction.class.st +++ /dev/null @@ -1,44 +0,0 @@ -Class { - #name : #GTPPStepToSameNamedProductionAction, - #superclass : #GTPPStepToNextNamedProductionAction, - #category : #'GT-PetitParserDebugger' -} - -{ #category : #registration } -GTPPStepToSameNamedProductionAction class >> gtActionType [ - - - - -] - -{ #category : #testing } -GTPPStepToSameNamedProductionAction >> appliesToContext: aContext [ - - ^ (super appliesToContext: aContext) and: [ - self session isPPProduction: aContext receiver ] -] - -{ #category : #accessing } -GTPPStepToSameNamedProductionAction >> defaultCategory [ - - ^ 'Next parser invocation' -] - -{ #category : #accessing } -GTPPStepToSameNamedProductionAction >> defaultLabel [ - - ^ 'same production' -] - -{ #category : #accessing } -GTPPStepToSameNamedProductionAction >> defaultOrder [ - - ^ 204 -] - -{ #category : #accessing } -GTPPStepToSameNamedProductionAction >> defaultProduction [ - - ^ self currentContext receiver name -] diff --git a/src-archive/GT-PetitParserDebugger/GTPPStepToSameParserAction.class.st b/src-archive/GT-PetitParserDebugger/GTPPStepToSameParserAction.class.st deleted file mode 100644 index 2ed96af91..000000000 --- a/src-archive/GT-PetitParserDebugger/GTPPStepToSameParserAction.class.st +++ /dev/null @@ -1,75 +0,0 @@ -Class { - #name : #GTPPStepToSameParserAction, - #superclass : #GTPPDebugAction, - #instVars : [ - 'parser' - ], - #category : #'GT-PetitParserDebugger' -} - -{ #category : #registration } -GTPPStepToSameParserAction class >> gtActionFor: aDebugger [ -" - - " - ^ (self forDebugger: aDebugger) - parser: aDebugger currentContext receiver -] - -{ #category : #testing } -GTPPStepToSameParserAction >> appliesToContext: aContext [ - - ^ (super appliesToContext: aContext) and: [ - aContext receiver class inheritsFrom: PPParser ] -] - -{ #category : #accessing } -GTPPStepToSameParserAction >> defaultCategory [ - - ^ 'Next parser invocation' -] - -{ #category : #accessing } -GTPPStepToSameParserAction >> defaultLabel [ - - ^ 'same parser' -] - -{ #category : #accessing } -GTPPStepToSameParserAction >> defaultOrder [ - - ^ 30 -] - -{ #category : #actions } -GTPPStepToSameParserAction >> executeAction [ - - self session - stepOverInitialInstructionForContext: self startContext; - stepUntil: self sameParserPredicate from: self startContext. -] - -{ #category : #accessing } -GTPPStepToSameParserAction >> parser [ - - ^ parser -] - -{ #category : #accessing } -GTPPStepToSameParserAction >> parser: anObject [ - - parser := anObject -] - -{ #category : #predicates } -GTPPStepToSameParserAction >> sameParserObjectPredicate [ - - ^ self session createPredicateForBlock: [ :aContext | - aContext receiver == self parser ] -] - -{ #category : #predicates } -GTPPStepToSameParserAction >> sameParserPredicate [ - - ^ self session parseMethodEntryPredicate and: self sameParserObjectPredicate -] diff --git a/src-archive/GT-PetitParserDebugger/GTPPStepToSameParserTypeAction.class.st b/src-archive/GT-PetitParserDebugger/GTPPStepToSameParserTypeAction.class.st deleted file mode 100644 index 40e85a65c..000000000 --- a/src-archive/GT-PetitParserDebugger/GTPPStepToSameParserTypeAction.class.st +++ /dev/null @@ -1,42 +0,0 @@ -Class { - #name : #GTPPStepToSameParserTypeAction, - #superclass : #GTPPStepToParserTypeAction, - #category : #'GT-PetitParserDebugger' -} - -{ #category : #registration } -GTPPStepToSameParserTypeAction class >> gtActionType [ - - -] - -{ #category : #testing } -GTPPStepToSameParserTypeAction >> appliesToContext: aContext [ - - ^ (super appliesToContext: aContext) and: [ - aContext receiver class inheritsFrom: PPParser ] -] - -{ #category : #accessing } -GTPPStepToSameParserTypeAction >> defaultCategory [ - - ^ 'Next parser invocation' -] - -{ #category : #accessing } -GTPPStepToSameParserTypeAction >> defaultLabel [ - - ^ 'same parser type' -] - -{ #category : #accessing } -GTPPStepToSameParserTypeAction >> defaultOrder [ - - ^ 205 -] - -{ #category : #accessing } -GTPPStepToSameParserTypeAction >> defaultParserClass [ - - ^ self currentContext receiver class -] diff --git a/src-archive/GT-PetitParserDebugger/GTPPStepToStreamPositionAction.class.st b/src-archive/GT-PetitParserDebugger/GTPPStepToStreamPositionAction.class.st deleted file mode 100644 index 86bfcf238..000000000 --- a/src-archive/GT-PetitParserDebugger/GTPPStepToStreamPositionAction.class.st +++ /dev/null @@ -1,50 +0,0 @@ -Class { - #name : #GTPPStepToStreamPositionAction, - #superclass : #GTPPDebugAction, - #instVars : [ - 'position' - ], - #category : #'GT-PetitParserDebugger' -} - -{ #category : #registration } -GTPPStepToStreamPositionAction class >> gtSelectedStreamPositionActionFor: aDebugger [ - - - - ^ (self forDebugger: aDebugger) - position: aDebugger streamSelectionInterval last; - label: 'Run to here' -] - -{ #category : #actions } -GTPPStepToStreamPositionAction >> executeAction [ - | currentPosition targetPosition | - - currentPosition := self session stream position. - targetPosition := self position - ifNil: [ currentPosition + 1 ] - ifNotNil: [ :anInteger | anInteger ]. - - self session - stepUntil: (self streamToPosition: targetPosition) from: self startContext. -] - -{ #category : #accessing } -GTPPStepToStreamPositionAction >> position [ - - ^ position -] - -{ #category : #accessing } -GTPPStepToStreamPositionAction >> position: anInteger [ - - position := anInteger -] - -{ #category : #predicates } -GTPPStepToStreamPositionAction >> streamToPosition: anInteger [ - - ^ self session createPredicateForBlock: [ - self session stream position = anInteger ] -] diff --git a/src-archive/GT-PetitParserDebugger/GTPPStepToStreamPositionChangedReflectivityAction.class.st b/src-archive/GT-PetitParserDebugger/GTPPStepToStreamPositionChangedReflectivityAction.class.st deleted file mode 100644 index b59cb9950..000000000 --- a/src-archive/GT-PetitParserDebugger/GTPPStepToStreamPositionChangedReflectivityAction.class.st +++ /dev/null @@ -1,39 +0,0 @@ -Class { - #name : #GTPPStepToStreamPositionChangedReflectivityAction, - #superclass : #GTPPReflectivityStepDebugAction, - #instVars : [ - 'initialPosition' - ], - #category : #'GT-PetitParserDebugger' -} - -{ #category : #registration } -GTPPStepToStreamPositionChangedReflectivityAction class >> gtStreamPositionChangedActionFor: aDebugger [ - " - " - - ^ (self forDebugger: aDebugger) - label: 'Run to next update (fast)'; - icon: GLMUIThemeExtraIcons glamorousInto; - initialPosition: aDebugger session stream position -] - -{ #category : #actions } -GTPPStepToStreamPositionChangedReflectivityAction >> attachBreakpoints [ - - self afterMethodBreakpoint - targetMethod: PPContext>>#next; - whenReceiver: [ :aPPContext | aPPContext position ~= self initialPosition ] -] - -{ #category : #accessing } -GTPPStepToStreamPositionChangedReflectivityAction >> initialPosition [ - - ^ initialPosition -] - -{ #category : #accessing } -GTPPStepToStreamPositionChangedReflectivityAction >> initialPosition: anInteger [ - - initialPosition := anInteger -] diff --git a/src-archive/GT-PetitParserDebugger/GTPPStepToStreamPositionReflectivityAction.class.st b/src-archive/GT-PetitParserDebugger/GTPPStepToStreamPositionReflectivityAction.class.st deleted file mode 100644 index aa7f84542..000000000 --- a/src-archive/GT-PetitParserDebugger/GTPPStepToStreamPositionReflectivityAction.class.st +++ /dev/null @@ -1,38 +0,0 @@ -Class { - #name : #GTPPStepToStreamPositionReflectivityAction, - #superclass : #GTPPReflectivityStepDebugAction, - #instVars : [ - 'position' - ], - #category : #'GT-PetitParserDebugger' -} - -{ #category : #registration } -GTPPStepToStreamPositionReflectivityAction class >> gtSelectedStreamPositionActionFor: aDebugger [ - " - " - - ^ (self forDebugger: aDebugger) - position: aDebugger streamSelectionInterval last; - label: 'Run to here (fast)' -] - -{ #category : #actions } -GTPPStepToStreamPositionReflectivityAction >> attachBreakpoints [ - - self afterMethodBreakpoint - targetMethod: PPContext>>#next; - whenReceiver: [ :aPPContext | aPPContext position = self position ] -] - -{ #category : #accessing } -GTPPStepToStreamPositionReflectivityAction >> position [ - - ^ position -] - -{ #category : #accessing } -GTPPStepToStreamPositionReflectivityAction >> position: anInteger [ - - position := anInteger -] diff --git a/src-archive/GT-PetitParserDebugger/GTPPWhereIsStreamAction.class.st b/src-archive/GT-PetitParserDebugger/GTPPWhereIsStreamAction.class.st deleted file mode 100644 index 8ce3ba84d..000000000 --- a/src-archive/GT-PetitParserDebugger/GTPPWhereIsStreamAction.class.st +++ /dev/null @@ -1,34 +0,0 @@ -Class { - #name : #GTPPWhereIsStreamAction, - #superclass : #GTPPDebugAction, - #category : #'GT-PetitParserDebugger' -} - -{ #category : #registration } -GTPPWhereIsStreamAction class >> gtActionType [ - -] - -{ #category : #accessing } -GTPPWhereIsStreamAction >> defaultIcon [ - - ^ GLMUIThemeExtraIcons glamorousSearch -] - -{ #category : #accessing } -GTPPWhereIsStreamAction >> defaultLabel [ - - ^ 'Where is stream?' -] - -{ #category : #actions } -GTPPWhereIsStreamAction >> executeAction [ - - self debugger updateStreamSelectionInterval -] - -{ #category : #initialization } -GTPPWhereIsStreamAction >> initialize [ - super initialize. - self needsUpdate: false -] diff --git a/src-archive/GT-PetitParserDebugger/PPCompositeParser.extension.st b/src-archive/GT-PetitParserDebugger/PPCompositeParser.extension.st deleted file mode 100644 index 029c8c068..000000000 --- a/src-archive/GT-PetitParserDebugger/PPCompositeParser.extension.st +++ /dev/null @@ -1,9 +0,0 @@ -Extension { #name : #PPCompositeParser } - -{ #category : #'*GT-PetitParserDebugger' } -PPCompositeParser class >> productionSelectors [ - - ^ (((self allInstVarNames copyWithoutAll: self ignoredNames) - collect: [ :each | each asSymbol ]) - select: [ :each | self includesSelector: each ]) asSortedCollection add: #start; yourself -] diff --git a/src-archive/GT-PetitParserDebugger/PPContext.extension.st b/src-archive/GT-PetitParserDebugger/PPContext.extension.st deleted file mode 100644 index b40cf2694..000000000 --- a/src-archive/GT-PetitParserDebugger/PPContext.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #PPContext } - -{ #category : #'*GT-PetitParserDebugger' } -PPContext >> debugRoot [ - - ^ self root debugRoot -] diff --git a/src-archive/GT-PetitParserDebugger/PPDebugParser.extension.st b/src-archive/GT-PetitParserDebugger/PPDebugParser.extension.st deleted file mode 100644 index e1af2e383..000000000 --- a/src-archive/GT-PetitParserDebugger/PPDebugParser.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #PPDebugParser } - -{ #category : #'*GT-PetitParserDebugger' } -PPDebugParser >> debugRoot [ - "Assume PPDebugParser contains a wrapping parser." - ^ self children first children first -] diff --git a/src-archive/GT-PetitParserDebugger/PPParser.extension.st b/src-archive/GT-PetitParserDebugger/PPParser.extension.st deleted file mode 100644 index b78c43ae1..000000000 --- a/src-archive/GT-PetitParserDebugger/PPParser.extension.st +++ /dev/null @@ -1,19 +0,0 @@ -Extension { #name : #PPParser } - -{ #category : #'*GT-PetitParserDebugger' } -PPParser >> debugRoot [ - - ^ self -] - -{ #category : #'*GT-PetitParserDebugger' } -PPParser >> fullDebug: anObject [ - - ^ self debug: (PPBrowserStream on: anObject) -] - -{ #category : #'*GT-PetitParserDebugger' } -PPParser class >> productionSelectors [ - - ^ #() -] diff --git a/src-archive/GT-PetitParserDebugger/package.st b/src-archive/GT-PetitParserDebugger/package.st deleted file mode 100644 index 82b1ddee1..000000000 --- a/src-archive/GT-PetitParserDebugger/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'GT-PetitParserDebugger' } diff --git a/src-archive/GT-Setup/GTImageSetupCommandLineHandler.class.st b/src-archive/GT-Setup/GTImageSetupCommandLineHandler.class.st deleted file mode 100644 index 95ce39940..000000000 --- a/src-archive/GT-Setup/GTImageSetupCommandLineHandler.class.st +++ /dev/null @@ -1,103 +0,0 @@ -" -The command that can be triggered to setup a image right after the GToolkit configuration is loaded in a fresh Pharo image. - -Example usage in a Jenkins: -./pharo $JOB_NAME.image gtimagesetup - -To use from inside the image, run: -[ [ [ - self new activateWithoutSaving -] ] ] -" -Class { - #name : #GTImageSetupCommandLineHandler, - #superclass : #CommandLineHandler, - #category : #'GT-Setup' -} - -{ #category : #accessing } -GTImageSetupCommandLineHandler class >> commandName [ - ^ 'gtimagesetup' -] - -{ #category : #accessing } -GTImageSetupCommandLineHandler class >> description [ - ^ 'Sets up the image with GToolkit specific tools and settings' -] - -{ #category : #activation } -GTImageSetupCommandLineHandler >> activate [ - "self new activate" - self activateWithoutSaving. - Smalltalk snapshot: true andQuit: true -] - -{ #category : #activation } -GTImageSetupCommandLineHandler >> activateWithoutSaving [ - self cleanupWorld. -" self installGLMWhitespaceTheme." - self installFonts. - self installGTDebuggers. - self flushMCCache. - self setPreferredSettings -] - -{ #category : #utilities } -GTImageSetupCommandLineHandler >> cleanupWorld [ - (World submorphs select: [ :each | each isSystemWindow ]) do: #delete. -] - -{ #category : #utilities } -GTImageSetupCommandLineHandler >> flushMCCache [ - MCFileBasedRepository flushAllCaches -] - -{ #category : #utilities } -GTImageSetupCommandLineHandler >> installDemoFonts [ - StandardFonts - setAllStandardFontsTo: (LogicalFont familyName: 'Source Sans Pro' pointSize: 12); - haloFont: (LogicalFont familyName: 'Source Sans Pro' pointSize: 12); - windowTitleFont: (LogicalFont familyName: 'Source Sans Pro' pointSize: 18); - balloonFont: (LogicalFont familyName: 'Source Sans Pro' pointSize: 12); - codeFont: (LogicalFont familyName: 'Source Code Pro' pointSize: 14) -] - -{ #category : #utilities } -GTImageSetupCommandLineHandler >> installFonts [ - StandardFonts - setAllStandardFontsTo: (LogicalFont familyName: 'Source Sans Pro' pointSize: 10); - haloFont: (LogicalFont familyName: 'Source Sans Pro' pointSize: 10); - windowTitleFont: (LogicalFont familyName: 'Source Sans Pro' pointSize: 14); - balloonFont: (LogicalFont familyName: 'Source Sans Pro' pointSize: 10); - codeFont: (LogicalFont familyName: 'Source Code Pro' pointSize: 10) -] - -{ #category : #utilities } -GTImageSetupCommandLineHandler >> installGLMWhitespaceTheme [ - GLMWhitespaceTheme - defaultSettings: nil; - beCurrent -] - -{ #category : #utilities } -GTImageSetupCommandLineHandler >> installGTDebuggers [ - GTGenericStackDebugger registerToolsOn: Smalltalk tools. - GTGenericStackDebugger registerExtraToolsOn: Smalltalk tools. - GTGlamourDebugger registerToolsOn: Smalltalk tools. - #GTPPDebugger asClassIfPresent: [ :ppDebugger | ppDebugger registerToolsOn: Smalltalk tools ]. - #ACGlamourDebugger asClassIfPresent: [ :acdDebugger | acdDebugger register ]. - #GTBytecodeDebugger asClassIfPresent: [ :bytecodeDebugger | bytecodeDebugger registerToolsOn: Smalltalk tools ]. - GTSUnitDebugger registerToolsOn: Smalltalk tools. - GTMoldableDebugger enableDebuggerWindowDistinctColor: true -] - -{ #category : #utilities } -GTImageSetupCommandLineHandler >> setPreferredSettings [ - NECPreferences - popupShowAutomatic: false; - expandPrefixes: true; - popupShowWithShortcut: Character tab asShortcut. - GTGenericStackDebugger enableStackColoring: true. - KMRepository reset. - "ThemeIcons current: GLMThemeIcons new" -] diff --git a/src-archive/GT-Setup/package.st b/src-archive/GT-Setup/package.st deleted file mode 100644 index 1afc42736..000000000 --- a/src-archive/GT-Setup/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'GT-Setup' } diff --git a/src-archive/GT-Tests-Release/GTFinalReleaseTest.class.st b/src-archive/GT-Tests-Release/GTFinalReleaseTest.class.st deleted file mode 100644 index 580d27f09..000000000 --- a/src-archive/GT-Tests-Release/GTFinalReleaseTest.class.st +++ /dev/null @@ -1,52 +0,0 @@ -" -I contain tests that should be executed last as they check for various memory leaks. -" -Class { - #name : #GTFinalReleaseTest, - #superclass : #TestCase, - #category : #'GT-Tests-Release' -} - -{ #category : #tests } -GTFinalReleaseTest >> expectedFailures [ - ^ #(testNoGLMWindowInstances) -] - -{ #category : #tests } -GTFinalReleaseTest >> setUp [ - super setUp. - - Smalltalk garbageCollect -] - -{ #category : #tests } -GTFinalReleaseTest >> tearDown [ - super tearDown. - - Smalltalk garbageCollect -] - -{ #category : #tests } -GTFinalReleaseTest >> testNoGLMWindowInstances [ - - self assert: GLMSystemWindow allInstances size equals: 0. -] - -{ #category : #tests } -GTFinalReleaseTest >> testNoInspectorInstances [ - - self assert: GTInspector allInstances size equals: 0 -] - -{ #category : #tests } -GTFinalReleaseTest >> testNoPlaygroundInstances [ - - self assert: GTPlayground allInstances size equals: 0 -] - -{ #category : #tests } -GTFinalReleaseTest >> testNoSpotterInstances [ - - self assert: GTSpotter allInstances size equals: 0. - self assert: GTSpotterMorph allInstances size equals: 0 -] diff --git a/src-archive/GT-Tests-Release/package.st b/src-archive/GT-Tests-Release/package.st deleted file mode 100644 index 092d8bc5e..000000000 --- a/src-archive/GT-Tests-Release/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'GT-Tests-Release' } diff --git a/src-archive/GT-Window-EventRecorder/GTWindowEventCollector.class.st b/src-archive/GT-Window-EventRecorder/GTWindowEventCollector.class.st deleted file mode 100644 index b98079b39..000000000 --- a/src-archive/GT-Window-EventRecorder/GTWindowEventCollector.class.st +++ /dev/null @@ -1,201 +0,0 @@ -" -I represent a GTEventCollector for windows. -" -Class { - #name : #GTWindowEventCollector, - #superclass : #GTEventCollector, - #classInstVars : [ - 'uniqueInstance' - ], - #category : #'GT-Window-EventRecorder-Base' -} - -{ #category : #cleanup } -GTWindowEventCollector class >> cleanUp [ - self reset -] - -{ #category : #accessing } -GTWindowEventCollector class >> commonWindowTypes [ - - ^ #( NautilusUI - GTPlayground - TestRunner - MCWorkingCopyBrowser - FinderUI - VersionnerSpecBrowser - DAPackageDependenciesWelcome - ThreadSafeTranscript - TimeProfiler - SelectPackageBrowser - ProcessBrowser - FileList - MessageBrowser - DualChangeSorterApplication - ExternalChangesBrowser - PPBrowser - CommandShellTranscript - AboutDialogWindow - SettingBrowser - GTSpecPreDebugWindow - GTGenericStackDebugger - GTInspector - SystemReporter - KeymapBrowser - TimeProfiler - HelpBrowser - FileDialogWindow ). -] - -{ #category : #'class initialization' } -GTWindowEventCollector class >> initialize [ - - self uniqueInstance -] - -{ #category : #'instance creation' } -GTWindowEventCollector class >> reset [ - uniqueInstance ifNotNil: [ - uniqueInstance unregisterToWorldAnnouncements. - uniqueInstance unregisterToSystemAnnouncer. - uniqueInstance := nil ]. - self initialize. -] - -{ #category : #'instance creation' } -GTWindowEventCollector class >> uniqueInstance [ - ^ uniqueInstance ifNil: [ - uniqueInstance := self new ] -] - -{ #category : #initialization } -GTWindowEventCollector >> initialize [ - super initialize. - recordedEvents := WaitfreeQueue new. - - self category: #windows; - register. - - self registerToSystemAnnouncer. - - Privacy sendDiagnosticsAndUsageData - ifTrue: [ self registerToWorldAnnouncements ] -] - -{ #category : #'announcement registration' } -GTWindowEventCollector >> privacyChanged [ - Privacy sendDiagnosticsAndUsageData - ifTrue: [ self registerToWorldAnnouncements ] - ifFalse: [ self unregisterToWorldAnnouncements ] -] - -{ #category : #initialization } -GTWindowEventCollector >> recordAnnouncement: anAnnouncement [ - | event | - Privacy sendDiagnosticsAndUsageData ifFalse: [ ^ self ]. - (anAnnouncement respondsTo: #asRecorderEvent) ifTrue: [ - event := anAnnouncement asRecorderEvent. - self add: event. - GTEventRecorder uniqueInstance announcer announce: (GTWindowRecorderEventRecorded forEvent: event). ] -] - -{ #category : #'announcement registration' } -GTWindowEventCollector >> registerToSystemAnnouncer [ - - SystemAnnouncer uniqueInstance unsubscribe: self. - - SystemAnnouncer uniqueInstance weak - when: PrivacyChangedAnnoucement - send: #privacyChanged - to: self. -] - -{ #category : #'announcement registration' } -GTWindowEventCollector >> registerToWindowAnnouncementsFor: aWindow [ - - ^ aWindow announcer - when: WindowActivated send: #windowActivated: to: self; - when: WindowDeActivated send: #windowDeActivated: to: self; - when: WindowCollapsed send: #windowCollapsed: to: self; - when: WindowExpanded send: #windowExpanded: to: self; - when: WindowLabelled send: #windowLabelled: to: self; - when: WindowMoved send: #windowMoved: to: self. -] - -{ #category : #'announcement registration' } -GTWindowEventCollector >> registerToWorldAnnouncements [ - - World announcer unsubscribe: self. - - World announcer weak - when: WindowOpened send: #windowOpened: to: self; - when: WindowClosed send: #windowClosed: to: self. -] - -{ #category : #'announcement registration' } -GTWindowEventCollector >> unregisterToSystemAnnouncer [ - - SystemAnnouncer uniqueInstance unsubscribe: self -] - -{ #category : #'announcement registration' } -GTWindowEventCollector >> unregisterToWindowAnnouncementsFor: aWindow [ - - ^ aWindow announcer unsubscribe: self. -] - -{ #category : #'announcement registration' } -GTWindowEventCollector >> unregisterToWorldAnnouncements [ - - World announcer unsubscribe: self -] - -{ #category : #annuncements } -GTWindowEventCollector >> windowActivated: anAnnouncement [ - - self recordAnnouncement: anAnnouncement -] - -{ #category : #annuncements } -GTWindowEventCollector >> windowClosed: anAnnouncement [ - - self recordAnnouncement: anAnnouncement. - self unregisterToWindowAnnouncementsFor: anAnnouncement window -] - -{ #category : #annuncements } -GTWindowEventCollector >> windowCollapsed: anAnnouncement [ - - self recordAnnouncement: anAnnouncement -] - -{ #category : #annuncements } -GTWindowEventCollector >> windowDeActivated: anAnnouncement [ - - self recordAnnouncement: anAnnouncement -] - -{ #category : #annuncements } -GTWindowEventCollector >> windowExpanded: anAnnouncement [ - - self recordAnnouncement: anAnnouncement -] - -{ #category : #annuncements } -GTWindowEventCollector >> windowLabelled: anAnnouncement [ - - self recordAnnouncement: anAnnouncement -] - -{ #category : #annuncements } -GTWindowEventCollector >> windowMoved: anAnnouncement [ - - self recordAnnouncement: anAnnouncement -] - -{ #category : #annuncements } -GTWindowEventCollector >> windowOpened: anAnnouncement [ - - self recordAnnouncement: anAnnouncement. - self registerToWindowAnnouncementsFor: anAnnouncement window -] diff --git a/src-archive/GT-Window-EventRecorder/GTWindowRecorderEvent.class.st b/src-archive/GT-Window-EventRecorder/GTWindowRecorderEvent.class.st deleted file mode 100644 index ae8898bed..000000000 --- a/src-archive/GT-Window-EventRecorder/GTWindowRecorderEvent.class.st +++ /dev/null @@ -1,88 +0,0 @@ -" -I represent usage data generated by windows. -All events have a timestamp. -" -Class { - #name : #GTWindowRecorderEvent, - #superclass : #GTBasicRecorderEvent, - #category : #'GT-Window-EventRecorder-Events' -} - -{ #category : #'instance creation' } -GTWindowRecorderEvent class >> fromAnnouncement: anAnnouncement [ - - ^ self new fromAnnouncement: anAnnouncement -] - -{ #category : #initialization } -GTWindowRecorderEvent >> addTypeFor: anAnnouncement [ - | type | - - type := anAnnouncement window eventRecorderWindowType class name. - - (GTWindowEventCollector commonWindowTypes includes: type) - ifTrue: [ self infoAt: #type put: type ] - ifFalse: [ self infoAt: #type putHashForText: type ] -] - -{ #category : #initialization } -GTWindowRecorderEvent >> fromAnnouncement: anAnnouncement [ - - self addTypeFor: anAnnouncement. - self infoAt: #label putHashForText: anAnnouncement window label. - self infoAt: #windowHash put: anAnnouncement window identityHash. -] - -{ #category : #testing } -GTWindowRecorderEvent >> isWindowActivated [ - - ^ false -] - -{ #category : #testing } -GTWindowRecorderEvent >> isWindowClosed [ - ^ false -] - -{ #category : #testing } -GTWindowRecorderEvent >> isWindowCollapsed [ - ^ false -] - -{ #category : #testing } -GTWindowRecorderEvent >> isWindowDeActivated [ - ^ false -] - -{ #category : #testing } -GTWindowRecorderEvent >> isWindowExpanded [ - ^ false -] - -{ #category : #testing } -GTWindowRecorderEvent >> isWindowLabelled [ - ^ false -] - -{ #category : #testing } -GTWindowRecorderEvent >> isWindowOpened [ - ^ false -] - -{ #category : #accessing } -GTWindowRecorderEvent >> label [ - - ^ self infoAt: #label -] - -{ #category : #accessing } -GTWindowRecorderEvent >> windowHash [ - - ^ self infoAt: #windowHash -] - -{ #category : #accessing } -GTWindowRecorderEvent >> windowType [ - - ^ self infoAt: #type -] diff --git a/src-archive/GT-Window-EventRecorder/GTWindowRecorderEventRecorded.class.st b/src-archive/GT-Window-EventRecorder/GTWindowRecorderEventRecorded.class.st deleted file mode 100644 index a1c222213..000000000 --- a/src-archive/GT-Window-EventRecorder/GTWindowRecorderEventRecorded.class.st +++ /dev/null @@ -1,28 +0,0 @@ -" -I am an event that is sent after a window action was recorded. -" -Class { - #name : #GTWindowRecorderEventRecorded, - #superclass : #Announcement, - #instVars : [ - 'recordedEvent' - ], - #category : #'GT-Window-EventRecorder-Base' -} - -{ #category : #'instance creation' } -GTWindowRecorderEventRecorded class >> forEvent: aRecorderEvent [ - ^ self new - recordedEvent: aRecorderEvent; - yourself. -] - -{ #category : #accessing } -GTWindowRecorderEventRecorded >> recordedEvent [ - ^ recordedEvent -] - -{ #category : #accessing } -GTWindowRecorderEventRecorded >> recordedEvent: aRecorderEvent [ - recordedEvent := aRecorderEvent -] diff --git a/src-archive/GT-Window-EventRecorder/GTWindowRecorderWindowActivatedEvent.class.st b/src-archive/GT-Window-EventRecorder/GTWindowRecorderWindowActivatedEvent.class.st deleted file mode 100644 index de5d4178a..000000000 --- a/src-archive/GT-Window-EventRecorder/GTWindowRecorderWindowActivatedEvent.class.st +++ /dev/null @@ -1,16 +0,0 @@ -" -I represent the action when a window is activated. - -Corresponding window announcement: -WindowActivated -" -Class { - #name : #GTWindowRecorderWindowActivatedEvent, - #superclass : #GTWindowRecorderEvent, - #category : #'GT-Window-EventRecorder-Events' -} - -{ #category : #testing } -GTWindowRecorderWindowActivatedEvent >> isWindowActivated [ - ^ true -] diff --git a/src-archive/GT-Window-EventRecorder/GTWindowRecorderWindowClosedEvent.class.st b/src-archive/GT-Window-EventRecorder/GTWindowRecorderWindowClosedEvent.class.st deleted file mode 100644 index d7b711bd9..000000000 --- a/src-archive/GT-Window-EventRecorder/GTWindowRecorderWindowClosedEvent.class.st +++ /dev/null @@ -1,16 +0,0 @@ -" -I represent the action when a window is closed. - -Corresponding window announcement: -WindowClosed -" -Class { - #name : #GTWindowRecorderWindowClosedEvent, - #superclass : #GTWindowRecorderEvent, - #category : #'GT-Window-EventRecorder-Events' -} - -{ #category : #testing } -GTWindowRecorderWindowClosedEvent >> isWindowClosed [ - ^ true -] diff --git a/src-archive/GT-Window-EventRecorder/GTWindowRecorderWindowCollapsedEvent.class.st b/src-archive/GT-Window-EventRecorder/GTWindowRecorderWindowCollapsedEvent.class.st deleted file mode 100644 index e199370c6..000000000 --- a/src-archive/GT-Window-EventRecorder/GTWindowRecorderWindowCollapsedEvent.class.st +++ /dev/null @@ -1,16 +0,0 @@ -" -I represent the action when a window is collapsed. - -Corresponding window announcement: -WindowCollapsed -" -Class { - #name : #GTWindowRecorderWindowCollapsedEvent, - #superclass : #GTWindowRecorderEvent, - #category : #'GT-Window-EventRecorder-Events' -} - -{ #category : #testing } -GTWindowRecorderWindowCollapsedEvent >> isWindowCollapsed [ - ^ true -] diff --git a/src-archive/GT-Window-EventRecorder/GTWindowRecorderWindowDeActivatedEvent.class.st b/src-archive/GT-Window-EventRecorder/GTWindowRecorderWindowDeActivatedEvent.class.st deleted file mode 100644 index fb390c13d..000000000 --- a/src-archive/GT-Window-EventRecorder/GTWindowRecorderWindowDeActivatedEvent.class.st +++ /dev/null @@ -1,16 +0,0 @@ -" -I represent the action when a window is deactivated. - -Corresponding window announcement: -WindowDeActivated -" -Class { - #name : #GTWindowRecorderWindowDeActivatedEvent, - #superclass : #GTWindowRecorderEvent, - #category : #'GT-Window-EventRecorder-Events' -} - -{ #category : #testing } -GTWindowRecorderWindowDeActivatedEvent >> isWindowDeActivated [ - ^ true -] diff --git a/src-archive/GT-Window-EventRecorder/GTWindowRecorderWindowExpandedEvent.class.st b/src-archive/GT-Window-EventRecorder/GTWindowRecorderWindowExpandedEvent.class.st deleted file mode 100644 index 2f4ec1563..000000000 --- a/src-archive/GT-Window-EventRecorder/GTWindowRecorderWindowExpandedEvent.class.st +++ /dev/null @@ -1,16 +0,0 @@ -" -I represent the action when a window is expanded. - -Corresponding window announcement: -WindowExpanded -" -Class { - #name : #GTWindowRecorderWindowExpandedEvent, - #superclass : #GTWindowRecorderEvent, - #category : #'GT-Window-EventRecorder-Events' -} - -{ #category : #testing } -GTWindowRecorderWindowExpandedEvent >> isWindowExpanded [ - ^ true -] diff --git a/src-archive/GT-Window-EventRecorder/GTWindowRecorderWindowLabelledEvent.class.st b/src-archive/GT-Window-EventRecorder/GTWindowRecorderWindowLabelledEvent.class.st deleted file mode 100644 index fbb1a7033..000000000 --- a/src-archive/GT-Window-EventRecorder/GTWindowRecorderWindowLabelledEvent.class.st +++ /dev/null @@ -1,29 +0,0 @@ -" -I represent the action when a window is labelled. - -Corresponding window announcement: -WindowLabelled -" -Class { - #name : #GTWindowRecorderWindowLabelledEvent, - #superclass : #GTWindowRecorderEvent, - #category : #'GT-Window-EventRecorder-Events' -} - -{ #category : #initialization } -GTWindowRecorderWindowLabelledEvent >> fromAnnouncement: anAnnouncement [ - - super fromAnnouncement: anAnnouncement. - self infoAt: #newLabel putHashForText: anAnnouncement label. -] - -{ #category : #testing } -GTWindowRecorderWindowLabelledEvent >> isWindowLabelled [ - ^ true -] - -{ #category : #accessing } -GTWindowRecorderWindowLabelledEvent >> newLabel [ - - ^ self infoAt: #newLabel -] diff --git a/src-archive/GT-Window-EventRecorder/GTWindowRecorderWindowMovedEvent.class.st b/src-archive/GT-Window-EventRecorder/GTWindowRecorderWindowMovedEvent.class.st deleted file mode 100644 index c0df28052..000000000 --- a/src-archive/GT-Window-EventRecorder/GTWindowRecorderWindowMovedEvent.class.st +++ /dev/null @@ -1,34 +0,0 @@ -" -I represent the action when a window is moved. - -Corresponding window announcement: -WindowMoved -" -Class { - #name : #GTWindowRecorderWindowMovedEvent, - #superclass : #GTWindowRecorderEvent, - #category : #'GT-Window-EventRecorder-Events' -} - -{ #category : #initialization } -GTWindowRecorderWindowMovedEvent >> fromAnnouncement: anAnnouncement [ - - super fromAnnouncement: anAnnouncement. - self infoAt: #oldPosition put: anAnnouncement oldPosition. - self infoAt: #newPosition put: anAnnouncement newPosition. -] - -{ #category : #testing } -GTWindowRecorderWindowMovedEvent >> isWindowMoved [ - ^ true -] - -{ #category : #accessing } -GTWindowRecorderWindowMovedEvent >> newPosition [ - ^ self infoAt: #newPosition -] - -{ #category : #accessing } -GTWindowRecorderWindowMovedEvent >> oldPosition [ - ^ self infoAt: #oldPosition -] diff --git a/src-archive/GT-Window-EventRecorder/GTWindowRecorderWindowOpenedEvent.class.st b/src-archive/GT-Window-EventRecorder/GTWindowRecorderWindowOpenedEvent.class.st deleted file mode 100644 index 87f75f293..000000000 --- a/src-archive/GT-Window-EventRecorder/GTWindowRecorderWindowOpenedEvent.class.st +++ /dev/null @@ -1,16 +0,0 @@ -" -I represent the action when a window is opened. - -Corresponding window announcement: -WindowOpened -" -Class { - #name : #GTWindowRecorderWindowOpenedEvent, - #superclass : #GTWindowRecorderEvent, - #category : #'GT-Window-EventRecorder-Events' -} - -{ #category : #testing } -GTWindowRecorderWindowOpenedEvent >> isWindowOpened [ - ^ true -] diff --git a/src-archive/GT-Window-EventRecorder/SpecWindow.extension.st b/src-archive/GT-Window-EventRecorder/SpecWindow.extension.st deleted file mode 100644 index 55be13200..000000000 --- a/src-archive/GT-Window-EventRecorder/SpecWindow.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #SpecWindow } - -{ #category : #'*GT-Window-EventRecorder' } -SpecWindow >> eventRecorderWindowType [ - - ^ super eventRecorderWindowType model ifNil: [ self ] -] diff --git a/src-archive/GT-Window-EventRecorder/SystemWindow.extension.st b/src-archive/GT-Window-EventRecorder/SystemWindow.extension.st deleted file mode 100644 index 8f0bc0e46..000000000 --- a/src-archive/GT-Window-EventRecorder/SystemWindow.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #SystemWindow } - -{ #category : #'*GT-Window-EventRecorder' } -SystemWindow >> eventRecorderWindowType [ - - ^ model ifNil: [ self ] -] diff --git a/src-archive/GT-Window-EventRecorder/TickingSpecWindow.extension.st b/src-archive/GT-Window-EventRecorder/TickingSpecWindow.extension.st deleted file mode 100644 index 5e86b0c87..000000000 --- a/src-archive/GT-Window-EventRecorder/TickingSpecWindow.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #TickingSpecWindow } - -{ #category : #'*GT-Window-EventRecorder' } -TickingSpecWindow >> eventRecorderWindowType [ - - ^ super eventRecorderWindowType model ifNil: [ self ] -] diff --git a/src-archive/GT-Window-EventRecorder/WindowActivated.extension.st b/src-archive/GT-Window-EventRecorder/WindowActivated.extension.st deleted file mode 100644 index 978ae276c..000000000 --- a/src-archive/GT-Window-EventRecorder/WindowActivated.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #WindowActivated } - -{ #category : #'*GT-Window-EventRecorder' } -WindowActivated >> asRecorderEvent [ - - ^ GTWindowRecorderWindowActivatedEvent fromAnnouncement: self -] diff --git a/src-archive/GT-Window-EventRecorder/WindowAnnouncement.extension.st b/src-archive/GT-Window-EventRecorder/WindowAnnouncement.extension.st deleted file mode 100644 index 9c55248bf..000000000 --- a/src-archive/GT-Window-EventRecorder/WindowAnnouncement.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #WindowAnnouncement } - -{ #category : #'*GT-Window-EventRecorder' } -WindowAnnouncement >> asRecorderEvent [ - - ^ GTWindowRecorderEvent fromAnnouncement: self -] diff --git a/src-archive/GT-Window-EventRecorder/WindowClosed.extension.st b/src-archive/GT-Window-EventRecorder/WindowClosed.extension.st deleted file mode 100644 index ab78108f1..000000000 --- a/src-archive/GT-Window-EventRecorder/WindowClosed.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #WindowClosed } - -{ #category : #'*GT-Window-EventRecorder' } -WindowClosed >> asRecorderEvent [ - - ^ GTWindowRecorderWindowClosedEvent fromAnnouncement: self -] diff --git a/src-archive/GT-Window-EventRecorder/WindowCollapsed.extension.st b/src-archive/GT-Window-EventRecorder/WindowCollapsed.extension.st deleted file mode 100644 index 97361a64d..000000000 --- a/src-archive/GT-Window-EventRecorder/WindowCollapsed.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #WindowCollapsed } - -{ #category : #'*GT-Window-EventRecorder' } -WindowCollapsed >> asRecorderEvent [ - - ^ GTWindowRecorderWindowCollapsedEvent fromAnnouncement: self -] diff --git a/src-archive/GT-Window-EventRecorder/WindowDeActivated.extension.st b/src-archive/GT-Window-EventRecorder/WindowDeActivated.extension.st deleted file mode 100644 index 2a3a73e46..000000000 --- a/src-archive/GT-Window-EventRecorder/WindowDeActivated.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #WindowDeActivated } - -{ #category : #'*GT-Window-EventRecorder' } -WindowDeActivated >> asRecorderEvent [ - - ^ GTWindowRecorderWindowDeActivatedEvent fromAnnouncement: self -] diff --git a/src-archive/GT-Window-EventRecorder/WindowExpanded.extension.st b/src-archive/GT-Window-EventRecorder/WindowExpanded.extension.st deleted file mode 100644 index 9af60a88b..000000000 --- a/src-archive/GT-Window-EventRecorder/WindowExpanded.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #WindowExpanded } - -{ #category : #'*GT-Window-EventRecorder' } -WindowExpanded >> asRecorderEvent [ - - ^ GTWindowRecorderWindowExpandedEvent fromAnnouncement: self -] diff --git a/src-archive/GT-Window-EventRecorder/WindowLabelled.extension.st b/src-archive/GT-Window-EventRecorder/WindowLabelled.extension.st deleted file mode 100644 index 7742142af..000000000 --- a/src-archive/GT-Window-EventRecorder/WindowLabelled.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #WindowLabelled } - -{ #category : #'*GT-Window-EventRecorder' } -WindowLabelled >> asRecorderEvent [ - - ^ GTWindowRecorderWindowLabelledEvent fromAnnouncement: self -] diff --git a/src-archive/GT-Window-EventRecorder/WindowMoved.extension.st b/src-archive/GT-Window-EventRecorder/WindowMoved.extension.st deleted file mode 100644 index 9224b8f8a..000000000 --- a/src-archive/GT-Window-EventRecorder/WindowMoved.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #WindowMoved } - -{ #category : #'*GT-Window-EventRecorder' } -WindowMoved >> asRecorderEvent [ - - ^ GTWindowRecorderWindowMovedEvent fromAnnouncement: self -] diff --git a/src-archive/GT-Window-EventRecorder/WindowOpened.extension.st b/src-archive/GT-Window-EventRecorder/WindowOpened.extension.st deleted file mode 100644 index 00ebf511b..000000000 --- a/src-archive/GT-Window-EventRecorder/WindowOpened.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #WindowOpened } - -{ #category : #'*GT-Window-EventRecorder' } -WindowOpened >> asRecorderEvent [ - - ^ GTWindowRecorderWindowOpenedEvent fromAnnouncement: self -] diff --git a/src-archive/GT-Window-EventRecorder/package.st b/src-archive/GT-Window-EventRecorder/package.st deleted file mode 100644 index 37270f3b7..000000000 --- a/src-archive/GT-Window-EventRecorder/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'GT-Window-EventRecorder' } diff --git a/src-archive/Glamour-Examples-Extras/GLMBasicExamples.extension.st b/src-archive/Glamour-Examples-Extras/GLMBasicExamples.extension.st deleted file mode 100644 index df2fda2c9..000000000 --- a/src-archive/Glamour-Examples-Extras/GLMBasicExamples.extension.st +++ /dev/null @@ -1,44 +0,0 @@ -Extension { #name : #GLMBasicExamples } - -{ #category : #'*Glamour-Examples-Extras' } -GLMBasicExamples >> magritte [ - - "self new magritte openOn: GLMMagrittePersonExample sampleData" - "GLMMagrittePersonExample sampleReset" - "note, sampleData is aGLMAnnouncingCollection" - - | browser | - - browser := GLMTabulator new initialExtent: 600@300. - browser column: #list; column: #detail. - browser transmit to: #list ; andShow: [ :a | - a list - title: 'Contacts'; - format: [ :person | person name ] ; - updateOn: GLMItemAdded from: [ GLMMagrittePersonExample sampleData ] ; - updateOn: GLMItemRemoved from: [ GLMMagrittePersonExample sampleData ] ; - updateOn: GLMItemChanged from: [ GLMMagrittePersonExample sampleData ] ; - act: [ :listPresentation :glmAC | - | newItem | - newItem := GLMMagrittePersonExample new name: 'New...' . - glmAC add: newItem beforeOrLast: listPresentation selection. - listPresentation selection: newItem. - ] icon: GLMUIThemeExtraIcons glamorousAdd - entitled: 'Add' ; - act: [ :listPresentation :glmAC | - glmAC remove: listPresentation selection ifAbsent: [] - ] icon: GLMUIThemeExtraIcons glamorousRemove - entitled: 'Remove' . - ]. - - browser transmit from: #list ; to: #detail ; andShow: [ :a | - a magritte - title: 'Details'; - description: [:person | person magritteDescription] ; - onAnswer: [ :person :presentation | - "browser update -- this works only if the current broser is not embedded in any other browser." - GLMMagrittePersonExample sampleData announce: GLMItemChanged ] . - ]. - - ^ browser -] diff --git a/src-archive/Glamour-Examples-Extras/GLMMagrittePersonExample.class.st b/src-archive/Glamour-Examples-Extras/GLMMagrittePersonExample.class.st deleted file mode 100644 index 24b8a0ee2..000000000 --- a/src-archive/Glamour-Examples-Extras/GLMMagrittePersonExample.class.st +++ /dev/null @@ -1,115 +0,0 @@ -Class { - #name : #GLMMagrittePersonExample, - #superclass : #Object, - #instVars : [ - 'name', - 'address' - ], - #classVars : [ - 'SampleData' - ], - #category : #'Glamour-Examples-Extras' -} - -{ #category : #'examples-utils' } -GLMMagrittePersonExample class >> gtExampleShakespeare [ - - ^ self new - name: 'William Shakespeare'; - address: 'Stratford-upon-Avon' -] - -{ #category : #'examples-utils' } -GLMMagrittePersonExample class >> sampleData [ - "self new magritteAddressBook openOn: self new magritteAddressBookModel " - SampleData ifNil: - [ - SampleData := GLMAnnouncingCollection new. - SampleData add: (GLMMagrittePersonExample new name: 'William Shakespeare' ; address: 'Stratford-upon-Avon' ). - SampleData add: (GLMMagrittePersonExample new name: 'Victor Hugo' ; address: 'Besançon' ). - SampleData add: (GLMMagrittePersonExample new name: 'Mark Twain' ; address: 'Florida' ). - SampleData add: (GLMMagrittePersonExample new name: 'Banjo Paterson' ; address: 'Narrambla' ). - ]. - ^SampleData - - -] - -{ #category : #'examples-utils' } -GLMMagrittePersonExample class >> sampleReset [ - SampleData := nil. - -] - -{ #category : #'as yet unclassified' } -GLMMagrittePersonExample >> address [ - ^ address -] - -{ #category : #'as yet unclassified' } -GLMMagrittePersonExample >> address: aString [ - address := aString -] - -{ #category : #'as yet unclassified' } -GLMMagrittePersonExample >> descriptionAddress [ - - ^ MAStringDescription new - accessor: #address; - label: 'Address'; - yourself -] - -{ #category : #'as yet unclassified' } -GLMMagrittePersonExample >> descriptionContainer [ - - ^ super descriptionContainer - propertyAt: #containerBase put: nil; - yourself -] - -{ #category : #'as yet unclassified' } -GLMMagrittePersonExample >> descriptionName [ - - ^ MAStringDescription new - accessor: #name; - label: 'Name'; - yourself -] - -{ #category : #'as yet unclassified' } -GLMMagrittePersonExample >> exampleSupportIdentityInSample [ - ^ self class sampleData includes: self. - -] - -{ #category : #'as yet unclassified' } -GLMMagrittePersonExample >> gtInspectorMagritteIn: composite [ - - composite magritte - title: 'Form'; - display: [ self ] -] - -{ #category : #'as yet unclassified' } -GLMMagrittePersonExample >> name [ - ^ name -] - -{ #category : #'as yet unclassified' } -GLMMagrittePersonExample >> name: aString [ - name := aString -] - -{ #category : #'as yet unclassified' } -GLMMagrittePersonExample >> printOn: aStream [ - aStream nextPutAll: '('. - self name printOn: aStream. - aStream nextPutAll: ','. - self address printOn: aStream. - aStream nextPutAll: ')'. - self exampleSupportIdentityInSample - ifTrue: [ aStream nextPutAll: ' #original# '] - ifFalse: [ aStream nextPutAll: ' #copy# ']. - super printOn: aStream. -] diff --git a/src-archive/Glamour-Examples-Extras/GLMOtherExamples.class.st b/src-archive/Glamour-Examples-Extras/GLMOtherExamples.class.st deleted file mode 100644 index 936830dc7..000000000 --- a/src-archive/Glamour-Examples-Extras/GLMOtherExamples.class.st +++ /dev/null @@ -1,74 +0,0 @@ -" -self open -" -Class { - #name : #GLMOtherExamples, - #superclass : #GLMExamples, - #category : #'Glamour-Examples-Extras' -} - -{ #category : #'other examples' } -GLMOtherExamples >> expander [ - "self new expander openOn: Collection withAllSubclasses" - | browser expander | - browser := GLMTabulator new. - browser title: 'Example'. - expander := GLMExpander new. - expander title: 'Methods'. - expander display: [:class | class methods ]. - expander show: [ :a | - a title: [:x | x selector ]. - a text - display: #getSource]. - browser column: #classes; column: #methods. - browser transmit to: #classes; andShow: [:a | - a list title: 'Classes' ]. - browser transmit to: #methods; from: #classes; andShow: [:a | - a custom: expander ]. - ^ browser - -] - -{ #category : #'file examples' } -GLMOtherExamples >> fileExplorer [ - - "self new fileExplorer openOn: FileDirectory default" - | browser | - browser := GLMTabulator new. - browser - column: #folders; - column: [ :col | col row: #files span: 2; row: #preview ] span: 2. - browser transmit to: #folders; andShow: [ :a | - a tree - title: 'Folders'; - children: [ :fd | fd directoryNames collect: [ :each | FileSystem / fd pathName, fd pathNameDelimiter asString, each ] ]; - format: [ :folder | folder localName ] ]. - browser transmit to: #files; from: #folders; andShow: [ :a | - a list - format: [ :fd | fd localName ]; - display: [ :fd | fd fileNames collect: [:each | FileSystem / fd pathName, fd pathNameDelimiter asString, each ] ] ]. - browser transmit to: #preview; from: #files; andShow: [ :a | - a text - display: [ :file | file fullName ] ]. - ^ browser -] - -{ #category : #'file examples' } -GLMOtherExamples >> fileFinder [ - - "self new fileFinder openOn: FileDirectory default" - - | browser | - browser := GLMFinder new. - browser show: [ :a | - a list - display: [ :fd | fd entries collect: [:each | - FileSystem / fd pathName, fd pathNameDelimiter asString, each name]]; - format: [ :fd | fd localName ]; - when: [ :fd | fd directoryEntry isDirectory ]]. - browser show: [ :a | - a text - display: [ :fd | fd fullName ]; - when: [ :fd | fd directoryEntry isDirectory not ] ]. - ^ browser -] diff --git a/src-archive/Glamour-Examples-Extras/GLMParameterizableExamplesBrowser.class.st b/src-archive/Glamour-Examples-Extras/GLMParameterizableExamplesBrowser.class.st deleted file mode 100644 index b9c7f0d75..000000000 --- a/src-archive/Glamour-Examples-Extras/GLMParameterizableExamplesBrowser.class.st +++ /dev/null @@ -1,79 +0,0 @@ -" -This is an abstract class that provides the infrastructure for an example browser. It is meant to work with classes that hold examples in methods. -" -Class { - #name : #GLMParameterizableExamplesBrowser, - #superclass : #GLMBrowserTemplate, - #category : #'Glamour-Examples-Extras' -} - -{ #category : #building } -GLMParameterizableExamplesBrowser >> buildBrowser [ - browser := GLMTabulator new. - self installTitle. - browser - column: #titles; - column: #example span: 4. - browser transmit - to: #titles; - andShow: [ :a | self exampleListIn: a ]. - browser transmit - to: #example; - fromOutsidePort: #entity; - from: #titles; - andShow: [ :a | self exampleIn: a ]. - ^ browser -] - -{ #category : #building } -GLMParameterizableExamplesBrowser >> compose [ - self tabulator with: [ :browser | - browser - column: #titles; - column: #example span: 4. - browser transmit - to: #titles; - andShow: [ :a | self exampleListIn: a ]. - browser transmit - to: #example; - fromOutsidePort: #entity; - from: #titles; - andShow: [ :a | self exampleIn: a ] ] -] - -{ #category : #building } -GLMParameterizableExamplesBrowser >> exampleIn: composer [ - self renderedExampleIn: composer. - composer pharoMethod - title: 'Source code'; - act: [ :text :exampleClass :exampleSelector | Smalltalk tools browser openOnClass: exampleClass selector: exampleSelector ] - icon: GLMUIThemeExtraIcons glamorousBrowse - entitled: 'Browse'; - smalltalkClass: [ :exampleClass | exampleClass ]; - doItReceiver: [ :exampleClass | exampleClass ]; - display: [ :exampleClass :exampleSelector | exampleClass sourceCodeAt: exampleSelector ] -] - -{ #category : #building } -GLMParameterizableExamplesBrowser >> exampleListIn: a [ - ^ a list - title: 'Examples'; - display: [ :exampleClass | self exampleSelectorsFromClass: exampleClass ]; - sorted: [ :x :y | x < y ]; - format: [ :selector | ' ' join: ((selector piecesCutWhereCamelCase reject: [:each | each endsWith: ':']) collect: #capitalized) ] -] - -{ #category : #hooks } -GLMParameterizableExamplesBrowser >> exampleSelectorsFromClass: exampleClass [ - self subclassResponsibility -] - -{ #category : #building } -GLMParameterizableExamplesBrowser >> installTitle [ - "Override this method for specific title" -] - -{ #category : #hooks } -GLMParameterizableExamplesBrowser >> renderedExampleIn: composer [ - self subclassResponsibility -] diff --git a/src-archive/Glamour-Examples-Extras/GLMSTBrowserExample.class.st b/src-archive/Glamour-Examples-Extras/GLMSTBrowserExample.class.st deleted file mode 100644 index 8ebaf3b13..000000000 --- a/src-archive/Glamour-Examples-Extras/GLMSTBrowserExample.class.st +++ /dev/null @@ -1,131 +0,0 @@ -" -self new browser openOn: (RBBrowserEnvironment new forPackageNames: #('Glamour')) -" -Class { - #name : #GLMSTBrowserExample, - #superclass : #Object, - #category : #'Glamour-Examples-Extras' -} - -{ #category : #accessing } -GLMSTBrowserExample >> browser [ - " - self new browser openOn: (BrowserEnvironment new forPackageNames: #('Glamour')) - " - - | browser | - browser := GLMTabulator new. - browser - row: [ :row | - row - column: #category; - column: #class; - column: #protocol; - column: #selector ]. - browser row: #source. " categories " - browser transmit - to: #category; - andShow: [ :a | self categoriesIn: a ]. - browser transmit - to: #class; - from: #outer port: #entity; - from: #category; - andShow: [ :a | self classesIn: a ]. - browser transmit - to: #protocol; - from: #outer port: #entity; - from: #class; - andShow: [ :a | self protocolsIn: a ]. - browser transmit - to: #selector; - from: #outer port: #entity; - from: #class; - from: #protocol; - andShow: [ :a | self methodsIn: a ]. - browser transmit - to: #source; - from: #category; - from: #class; - from: #selector; - andShow: [ :a | self sourceIn: a ]. - ^ browser -] - -{ #category : #accessing } -GLMSTBrowserExample >> categoriesIn: a [ - ^ a list display: [ :environment | environment categories ] -] - -{ #category : #accessing } -GLMSTBrowserExample >> classesIn: a [ - a list - title: 'Instance'; - display: [ :environment :category | (environment classes reject: [ :each | each isMeta ]) select: [ :each | each category = category ] ]; - sorted: [ :a1 :b | a1 name < b name ]; - format: [ :class | class name ]. - ^ a list - title: 'Class'; - display: [ :environment :category | (environment classes select: [ :each | each isMeta ]) select: [ :each | each theNonMetaClass category = category ] ]; - sorted: [ :a1 :b | a1 name < b name ]; - format: [ :class | class theNonMetaClass name ] -] - -{ #category : #accessing } -GLMSTBrowserExample >> complexityIn: a [ - ^ a roassal2 - title: 'Complexity'; - useExplicitNotNil; - initializeView: [ RTMondrian new ]; - painting: [ :view :category :class :selector | - view nodeShape - height: [ :model | model linesOfCode min: 50 max: 5 ]; - width: [ :model | model instVarNames size + 5 ]; - fillColor: [ :model | - model = class - ifTrue: [ Color red ] - ifFalse: [ Color white ] ]. - view - nodes: - (((Smalltalk organization listAtCategoryNamed: category) collect: [ :each | Smalltalk classNamed: each ]) - reject: [ :each | each isTrait ]). - view edges connectFrom: [ :each | each superclass ]. - view treeLayout ]; - when: [ :category :class :selector | category notNil ] -] - -{ #category : #accessing } -GLMSTBrowserExample >> methodsIn: a [ - a list - useExplicitNotNil; - when: [ :environment :class :protocol | class notNil and: [ protocol notNil ] ]; - display: [ :environment :class :protocol | environment selectorsFor: protocol in: class ]; - sorted. - ^ a list - useExplicitNotNil; - when: [ :environment :class :protocol | class notNil and: [ protocol isNil ] ]; - display: [ :environment :class :protocol | environment selectorsForClass: class ]; - sorted -] - -{ #category : #accessing } -GLMSTBrowserExample >> protocolsIn: a [ - ^ a list - when: [ :environment :class | class notNil ]; - display: [ :environment :class | environment protocolsFor: class ]; - sorted -] - -{ #category : #accessing } -GLMSTBrowserExample >> sourceIn: a [ - a text - title: 'Source'; - useExplicitNotNil; - when: [ :category :class :selector | class notNil and: [ selector notNil ] ]; - display: [ :category :class :selector | class sourceCodeAt: selector ifAbsent: [ String new ] ]. - a text - title: 'Source'; - useExplicitNotNil; - when: [ :category :class :selector | class notNil and: [ selector isNil ] ]; - display: [ :category :class :selector | class definition ]. - ^ self complexityIn: a -] diff --git a/src-archive/Glamour-Examples-Extras/package.st b/src-archive/Glamour-Examples-Extras/package.st deleted file mode 100644 index 39c8e2b69..000000000 --- a/src-archive/Glamour-Examples-Extras/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Glamour-Examples-Extras' } diff --git a/src-archive/Merlin/BlockClosure.extension.st b/src-archive/Merlin/BlockClosure.extension.st deleted file mode 100644 index 836c62a06..000000000 --- a/src-archive/Merlin/BlockClosure.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #BlockClosure } - -{ #category : #'*Merlin' } -BlockClosure >> meValue: argument [ - - ^ self value: argument -] diff --git a/src-archive/Merlin/ButtonPart.class.st b/src-archive/Merlin/ButtonPart.class.st deleted file mode 100644 index 2ff9c084b..000000000 --- a/src-archive/Merlin/ButtonPart.class.st +++ /dev/null @@ -1,70 +0,0 @@ -Class { - #name : #ButtonPart, - #superclass : #WizardPart, - #instVars : [ - 'buttonLabel', - 'buttonEnabled' - ], - #category : #'Merlin-Parts' -} - -{ #category : #accessing } -ButtonPart >> buttonEnabled [ - - ^ buttonEnabled -] - -{ #category : #accessing } -ButtonPart >> disable [ - - buttonEnabled := false. -] - -{ #category : #accessing } -ButtonPart >> enable [ - - buttonEnabled := true. -] - -{ #category : #'initialize-release' } -ButtonPart >> initialize [ - - super initialize. - buttonLabel := 'Default name'. - buttonEnabled := true. -] - -{ #category : #accessing } -ButtonPart >> label [ - - ^ buttonLabel -] - -{ #category : #accessing } -ButtonPart >> label: aString [ - - buttonLabel := aString. -] - -{ #category : #accessing } -ButtonPart >> latePopulateContents [ - - |default| - default := defaultValue meValue: self requiredInputs. - default ifNotNil: [:aString | - self label: aString - ]. - -] - -{ #category : #'*Merlin-Rendering' } -ButtonPart >> merlinRendering [ - - ^ self renderer merlinButtonRenderingFor: self -] - -{ #category : #'accessing - wizard management' } -ButtonPart >> outputValue [ - - ^ nil -] diff --git a/src-archive/Merlin/ButtonPart.extension.st b/src-archive/Merlin/ButtonPart.extension.st deleted file mode 100644 index 1dee6f6eb..000000000 --- a/src-archive/Merlin/ButtonPart.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #ButtonPart } - -{ #category : #'*Merlin-Rendering' } -ButtonPart >> merlinRendering [ - - ^ self renderer merlinButtonRenderingFor: self -] diff --git a/src-archive/Merlin/ButtonPartTest.class.st b/src-archive/Merlin/ButtonPartTest.class.st deleted file mode 100644 index eb4e20624..000000000 --- a/src-archive/Merlin/ButtonPartTest.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #ButtonPartTest, - #superclass : #WizardPartTest, - #category : #'Merlin-Tests' -} - -{ #category : #'as yet unclassified' } -ButtonPartTest >> testEnableAndDisable [ - - | buttonPart | - buttonPart := ButtonPart new. - buttonPart enable. - self assert: buttonPart buttonEnabled. - buttonPart disable. - self deny: buttonPart buttonEnabled. -] - -{ #category : #'as yet unclassified' } -ButtonPartTest >> testLabel [ - - | buttonPart | - buttonPart := ButtonPart new. - buttonPart label: 'something'. - self assert: buttonPart label = 'something'. -] diff --git a/src-archive/Merlin/CheckboxPart.class.st b/src-archive/Merlin/CheckboxPart.class.st deleted file mode 100644 index 9af523b54..000000000 --- a/src-archive/Merlin/CheckboxPart.class.st +++ /dev/null @@ -1,167 +0,0 @@ -Class { - #name : #CheckboxPart, - #superclass : #WizardPart, - #instVars : [ - 'label', - 'model', - 'checkbox', - 'contents', - 'actionSelector', - 'actionArguments', - 'actionModel', - 'parentComposite' - ], - #category : #'Merlin-Parts' -} - -{ #category : #accessing } -CheckboxPart >> actionArguments [ - - "return a collection of arguments that should be passed when performing the action selector" - ^ actionArguments -] - -{ #category : #accessing } -CheckboxPart >> actionArguments: aCollectionOfObjects [ - - actionArguments := aCollectionOfObjects -] - -{ #category : #accessing } -CheckboxPart >> actionModel [ - - "return the model on which we should perform the action when clicking on a checkbox" - ^ actionModel -] - -{ #category : #accessing } -CheckboxPart >> actionModel: anObject [ - - actionModel := anObject. -] - -{ #category : #accessing } -CheckboxPart >> actionSelector [ - - "return the selector that should be performed when clicking on a checkbox" - ^ actionSelector -] - -{ #category : #accessing } -CheckboxPart >> actionSelector: aSymbol [ - - actionSelector := aSymbol -] - -{ #category : #accessing } -CheckboxPart >> children [ - - ^ #() -] - -{ #category : #'checkbox control' } -CheckboxPart >> contents [ - - ^contents -] - -{ #category : #'checkbox control' } -CheckboxPart >> contents: newContents [ - - contents := newContents. -" self contentsChanged." - self hasChanged. - self parentComposite ifNotNil: [ - self parentComposite contentsChanged . - self parentComposite hasChanged. - - ] -] - -{ #category : #'initialize-release' } -CheckboxPart >> initialize [ - - super initialize. - self label: ''. - self actionModel: self. - contents := true. - -] - -{ #category : #accessing } -CheckboxPart >> label [ - - ^ label -] - -{ #category : #accessing } -CheckboxPart >> label: aLabel [ - - label := aLabel -] - -{ #category : #accessing } -CheckboxPart >> latePopulateContents [ - - |default| - default := defaultValue meValue: self requiredInputs. - default ifNotNil: [:aBoolean | - self selected: aBoolean. - ]. - - "groupBoxName - ifNotNilDo: [:aStringOrABlock |self populateContents: {self newGroupboxNamed: (aStringOrABlock meValue: self requiredInputs) With: checkbox}] - ifNil: [self populateContents: {checkbox }]." - -] - -{ #category : #'*merlin-rendering' } -CheckboxPart >> merlinRendering [ - - ^ self renderer merlinCheckboxRenderingFor: self -] - -{ #category : #'accessing - wizard mangement' } -CheckboxPart >> outputValue [ - "this method is an abstract method as only the subclass itself know what is the information to send to the WizardPane which will send it to the wizarControl " - "return true or false according the checkbox is selected or not" - ^ self contents -] - -{ #category : #accessing } -CheckboxPart >> parentComposite [ - - ^ parentComposite -] - -{ #category : #accessing } -CheckboxPart >> parentComposite: aMultiCheckboxesPart [ - - parentComposite := aMultiCheckboxesPart -] - -{ #category : #'checkbox control' } -CheckboxPart >> safeContents: newContents [ - - contents := newContents. - self contentsChanged. -] - -{ #category : #accessing } -CheckboxPart >> selected [ - "return true if the checkBox button morph is selected " - - ^ self contents - - -] - -{ #category : #accessing } -CheckboxPart >> selected: trueOrFalse [ - "select or unselect the checkbox according the value of trueOrFalse " - - self contents: trueOrFalse. - "checkbox updateSelection" - - -] diff --git a/src-archive/Merlin/CheckboxPart.extension.st b/src-archive/Merlin/CheckboxPart.extension.st deleted file mode 100644 index 040728a58..000000000 --- a/src-archive/Merlin/CheckboxPart.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #CheckboxPart } - -{ #category : #'*merlin-rendering' } -CheckboxPart >> merlinRendering [ - - ^ self renderer merlinCheckboxRenderingFor: self -] diff --git a/src-archive/Merlin/CheckboxPartTest.class.st b/src-archive/Merlin/CheckboxPartTest.class.st deleted file mode 100644 index 0439f4502..000000000 --- a/src-archive/Merlin/CheckboxPartTest.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #CheckboxPartTest, - #superclass : #WizardPartTest, - #category : #'Merlin-Tests' -} - -{ #category : #'as yet unclassified' } -CheckboxPartTest >> testSelectedAndNotSelected [ - - | checkboxPart | - checkboxPart := CheckboxPart new. - self assert: checkboxPart contents. - checkboxPart contents: false. - self deny: checkboxPart contents. -] diff --git a/src-archive/Merlin/ChooseFilePart.class.st b/src-archive/Merlin/ChooseFilePart.class.st deleted file mode 100644 index 0cfaa4d83..000000000 --- a/src-archive/Merlin/ChooseFilePart.class.st +++ /dev/null @@ -1,90 +0,0 @@ -Class { - #name : #ChooseFilePart, - #superclass : #WizardPart, - #instVars : [ - 'fileDialog', - 'fileDialogMorph', - 'dialogLabel', - 'validExtensions', - 'selectedPathName' - ], - #category : #'Merlin-Parts' -} - -{ #category : #accessing } -ChooseFilePart >> dialogLabel [ - - ^ dialogLabel -] - -{ #category : #accessing } -ChooseFilePart >> dialogLabel: aString [ - - dialogLabel := aString -] - -{ #category : #'initialize-release' } -ChooseFilePart >> initialize [ - - super initialize. - self selectedPathName: FileSystem disk workingDirectory fullName. -] - -{ #category : #accessing } -ChooseFilePart >> latePopulateContents [ - - - - - -] - -{ #category : #'*Merlin-Rendering' } -ChooseFilePart >> merlinRendering [ - - ^ self renderer merlinChooseFileRenderingFor: self -] - -{ #category : #accessing } -ChooseFilePart >> mightHasChanged [ - "The contents of a part might has changed without the part itself know it (This is the case for a textField). This method will be called by the parent wizard pane to be sure all has been corretly done before opening the next pane. By default does nothing. If you have to make something special before opening the next pane, it 's the good place to do it'" - - self hasChanged -] - -{ #category : #'accessing - wizard mangement' } -ChooseFilePart >> outputValue [ - "this method is an abstract method as only the subclass itself know what is the information to send to the WizardPane which will send it to the wizarControl " - "" - ^ output -] - -{ #category : #accessing } -ChooseFilePart >> selectPathName: aPathString [ - - self selectedPathName: aPathString. -] - -{ #category : #accessing } -ChooseFilePart >> selectedPathName [ - - ^ selectedPathName -] - -{ #category : #accessing } -ChooseFilePart >> selectedPathName: aString [ - - selectedPathName := aString -] - -{ #category : #accessing } -ChooseFilePart >> validExtensions [ - - ^ validExtensions -] - -{ #category : #accessing } -ChooseFilePart >> validExtensions: aCollectionOfStrings [ - - validExtensions := aCollectionOfStrings -] diff --git a/src-archive/Merlin/ChooseFilePart.extension.st b/src-archive/Merlin/ChooseFilePart.extension.st deleted file mode 100644 index a69f8adf1..000000000 --- a/src-archive/Merlin/ChooseFilePart.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #ChooseFilePart } - -{ #category : #'*Merlin-Rendering' } -ChooseFilePart >> merlinRendering [ - - ^ self renderer merlinChooseFileRenderingFor: self -] diff --git a/src-archive/Merlin/CompositePart.class.st b/src-archive/Merlin/CompositePart.class.st deleted file mode 100644 index 05d83980f..000000000 --- a/src-archive/Merlin/CompositePart.class.st +++ /dev/null @@ -1,90 +0,0 @@ -Class { - #name : #CompositePart, - #superclass : #WizardPart, - #instVars : [ - 'titlesAndParts', - 'selectedPageIndex' - ], - #category : #'Merlin-Parts' -} - -{ #category : #'accessing - titlesAndParts' } -CompositePart >> addPart: aWizardPart [ - - titlesAndParts add: (aWizardPart asString -> aWizardPart ). -] - -{ #category : #'accessing - titlesAndParts' } -CompositePart >> addTitleAndPart: anAssociation [ - - titlesAndParts add: anAssociation. -] - -{ #category : #accessing } -CompositePart >> latePopulateContents [ - - - self titlesAndParts do: [:anAssoc | - anAssoc value wizardPane: self wizardPane. - anAssoc value latePopulateContents]. -] - -{ #category : #'*Merlin-Rendering' } -CompositePart >> merlinRendering [ - - ^ self renderer merlinMultiPartsRenderingFor: self -] - -{ #category : #'accessing - wizard management' } -CompositePart >> outputValue [ - - ^ self selectedPart value transformedOutputValue -] - -{ #category : #'accessing - page selection' } -CompositePart >> selectedPageIndex [ - - ^ selectedPageIndex ifNil: [selectedPageIndex := 1] -] - -{ #category : #'accessing - page selection' } -CompositePart >> selectedPageIndex: anIndex [ - - selectedPageIndex := anIndex. -] - -{ #category : #'accessing - page selection' } -CompositePart >> selectedPart [ - - ^ self titlesAndParts at: self selectedPageIndex -] - -{ #category : #'accessing - titlesAndParts' } -CompositePart >> titlesAndParts [ - - ^ titlesAndParts -] - -{ #category : #'accessing - titlesAndParts' } -CompositePart >> withParts: aCollectionOfWizardParts [ - - titlesAndParts := aCollectionOfWizardParts collect: [:aWizardPart | (aWizardPart asString -> aWizardPart) ]. -] - -{ #category : #'accessing - titlesAndParts' } -CompositePart >> withTitlesAndParts: aCollectionOfAssociations [ - - titlesAndParts := aCollectionOfAssociations. -] - -{ #category : #'accessing - titlesAndParts' } -CompositePart >> wizardParts [ - - ^ self titlesAndParts collect: [:each | each value] -] - -{ #category : #'accessing - titlesAndParts' } -CompositePart >> wizardParts: aCollectionOfWizardParts [ - - titlesAndParts := aCollectionOfWizardParts collect: [:aWizardPart | (aWizardPart asString -> aWizardPart) ]. -] diff --git a/src-archive/Merlin/CompositePart.extension.st b/src-archive/Merlin/CompositePart.extension.st deleted file mode 100644 index 29b6b7d27..000000000 --- a/src-archive/Merlin/CompositePart.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #CompositePart } - -{ #category : #'*Merlin-Rendering' } -CompositePart >> merlinRendering [ - - ^ self renderer merlinMultiPartsRenderingFor: self -] diff --git a/src-archive/Merlin/DirectoryChoosePart.class.st b/src-archive/Merlin/DirectoryChoosePart.class.st deleted file mode 100644 index 8c4ffea91..000000000 --- a/src-archive/Merlin/DirectoryChoosePart.class.st +++ /dev/null @@ -1,11 +0,0 @@ -Class { - #name : #DirectoryChoosePart, - #superclass : #ChooseFilePart, - #category : #'Merlin-Parts' -} - -{ #category : #'as yet unclassified' } -DirectoryChoosePart >> merlinRendering [ - - ^ self renderer merlinDirectoryChooseRenderingFor: self -] diff --git a/src-archive/Merlin/DropListPart.class.st b/src-archive/Merlin/DropListPart.class.st deleted file mode 100644 index ee2187c09..000000000 --- a/src-archive/Merlin/DropListPart.class.st +++ /dev/null @@ -1,184 +0,0 @@ -Class { - #name : #DropListPart, - #superclass : #WizardPart, - #instVars : [ - 'list', - 'selectionIndex', - 'useRequiredInputAsDefault', - 'defaultBlock', - 'horizontalSize', - 'formatBlock' - ], - #category : #'Merlin-Parts' -} - -{ #category : #'instance creation' } -DropListPart class >> on: aCollectionOfItems [ - ^ self new - initialize; listContents: aCollectionOfItems ; yourself -] - -{ #category : #'instance creation' } -DropListPart class >> on: aCollectionOfItems inGroupboxNamed: aString defaultSelected: anIndex [ - "the drop list will be put into a groupbox named aString. by default it is put into a groupbox named 'Choose an item'" - ^ self new - initialize; - list: aCollectionOfItems - inGroupboxNamed: aString ; defaultIndexSelected: anIndex ; yourself -] - -{ #category : #'accessing - morph' } -DropListPart >> defaultIndexSelected: anIndex [ - - self selectionIndex: anIndex -] - -{ #category : #'accessing - morph' } -DropListPart >> defaultItemSelected: anItem [ - - self selectionIndex: (self list indexOf: anItem) -] - -{ #category : #accessing } -DropListPart >> format: aBlock [ - - "use this method the string representationof the options. aBlock is a one argument block (representing the current option to format). It should return a string that will be the representation of the option" - formatBlock := aBlock -] - -{ #category : #accessing } -DropListPart >> formatBlock [ - - ^ formatBlock ifNil: [formatBlock := [:option | option ]] -] - -{ #category : #accessing } -DropListPart >> formatedList [ - - ^ self list collect: [:each | - each isNil - ifTrue: [''] - ifFalse: [self formatBlock meValue: each] - ] -] - -{ #category : #accessing } -DropListPart >> horizontalSize [ - - ^ horizontalSize -] - -{ #category : #accessing } -DropListPart >> horizontalSize: anInteger [ - - "if the default size (computed according your wizard global size) doesn't correspond to what you were expecting, you this method to fix yourself the length of the dropListMorph" - horizontalSize := anInteger. -] - -{ #category : #'initialize-release' } -DropListPart >> initialize [ - - super initialize. - self list: #(default). - self selectionIndex: 0. - -] - -{ #category : #accessing } -DropListPart >> latePopulateContents [ - - |default| - default := defaultValue meValue: self requiredInputs. - default ifNotNil: [:anIndexOrAnObject | - anIndexOrAnObject isNumber - ifTrue: [self selectionIndex: anIndexOrAnObject ] - ifFalse: [self selectionIndex: (self list indexOf: anIndexOrAnObject)]. - ]. - - -] - -{ #category : #'list control' } -DropListPart >> list [ - "Answer the value of list" - - ^ list ifEmpty: [list := {}] -] - -{ #category : #'list control' } -DropListPart >> list: anObject [ - "Set the value of list" - - list := anObject. - self changed: #list. - self changed: #formatedList. - anObject ifNotEmpty: [ - self selectionIndex: 1 - ]. - self selectionIndex ifNotNil: [self hasChanged]. -] - -{ #category : #'*merlin-rendering' } -DropListPart >> merlinRendering [ - - ^ self renderer merlinDropListRenderingFor: self -] - -{ #category : #'accessing - wizard mangement' } -DropListPart >> outputValue [ - - "this method is an abstract method as only the subclass itself know what is the information to send to the WizardPane which will send it to the wizarControl " - (self list isNil not and: [self list isEmpty not]) - ifTrue: [^ self selectedItem] - ifFalse: [^ nil]. - - -] - -{ #category : #'accessing - wizard mangement' } -DropListPart >> retrieveInputRequired [ - "this method is an abstract method as only the subclass itself know what to do with the input that it needs to make its work " - "by default do nothing" - "make here all the thing required to build or make run this wizard part. This method will be clalled by wizardPane before opening the 'page'" - -] - -{ #category : #'list control' } -DropListPart >> safeSelectionIndex: anObject [ - "Set the value of selectionIndex" - - selectionIndex := anObject. -] - -{ #category : #'list control' } -DropListPart >> selectedItem [ - "Answer the currently selected item or nil if none." - - ^self selectionIndex = 0 - ifTrue: [nil] - ifFalse: [self list at: self selectionIndex] -] - -{ #category : #'list control' } -DropListPart >> selectedItem: anItem [ - - (self list includes: anItem) ifTrue: [ - self selectionIndex: (self list indexOf: anItem) - ] -] - -{ #category : #'list control' } -DropListPart >> selectionIndex [ - "Answer the value of selectionIndex" - - ^ selectionIndex -] - -{ #category : #'list control' } -DropListPart >> selectionIndex: anObject [ - "Set the value of selectionIndex" - - selectionIndex := anObject. - self hasChanged . - self changed: #selectionIndex -] diff --git a/src-archive/Merlin/DropListPart.extension.st b/src-archive/Merlin/DropListPart.extension.st deleted file mode 100644 index 2664005a2..000000000 --- a/src-archive/Merlin/DropListPart.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #DropListPart } - -{ #category : #'*merlin-rendering' } -DropListPart >> merlinRendering [ - - ^ self renderer merlinDropListRenderingFor: self -] diff --git a/src-archive/Merlin/DropListPartTest.class.st b/src-archive/Merlin/DropListPartTest.class.st deleted file mode 100644 index b012c69c6..000000000 --- a/src-archive/Merlin/DropListPartTest.class.st +++ /dev/null @@ -1,18 +0,0 @@ -Class { - #name : #DropListPartTest, - #superclass : #WizardPartTest, - #category : #'Merlin-Tests' -} - -{ #category : #'as yet unclassified' } -DropListPartTest >> testSelectedIndex [ - - |dropListPart| - dropListPart := DropListPart new. - self assert: dropListPart selectionIndex = 0. - self should: [dropListPart selectionIndex: 'test'] raise: Error. - self should: [dropListPart selectionIndex: 2] raise: Error. - dropListPart list: {'a'. 'b'}. - dropListPart selectionIndex: 2. - -] diff --git a/src-archive/Merlin/ItemSelectorPart.class.st b/src-archive/Merlin/ItemSelectorPart.class.st deleted file mode 100644 index 08bc2b7ca..000000000 --- a/src-archive/Merlin/ItemSelectorPart.class.st +++ /dev/null @@ -1,251 +0,0 @@ -Class { - #name : #ItemSelectorPart, - #superclass : #WizardPart, - #instVars : [ - 'addButton', - 'selectionList', - 'removeButton', - 'initialList', - 'initialListIndex', - 'selectionListIndex', - 'textEntryContents', - 'textEntryMessage' - ], - #category : #'Merlin-Parts' -} - -{ #category : #'instance creation' } -ItemSelectorPart class >> on: initialList [ - ^ self new - initialize; - initialList: initialList; - boxInitialization ; yourself -] - -{ #category : #'control - text entry' } -ItemSelectorPart >> evaluateTextEntryContents [ - "make a selection by evaluating the text entry content" - | selectionCollection | - - selectionCollection := Smalltalk compiler - evaluate: self smalltalkExpressionToEvaluate - for: self - logged: false. - - selectionCollection do: - [ :each | - (self selectionList includes: each) ifFalse: [ - self updateSelectionListByAdding: each. - self updateInitialListByRemoving: each - ] - ]. -] - -{ #category : #'control - initial list ' } -ItemSelectorPart >> initialList [ - - ^initialList -] - -{ #category : #'control - initial list ' } -ItemSelectorPart >> initialList: anObject [ - "Set the value of list" - - initialList := anObject. - self changed: #initialList. - - "Here we check that the selectionIndex is updated according the new list size " - self initialListIndex > self initialList size ifFalse: [^self]. - self initialListIndex: self initialList size. - self changed: #initialListIndex -] - -{ #category : #'control - initial list ' } -ItemSelectorPart >> initialListIndex [ - ^initialListIndex -] - -{ #category : #'control - initial list ' } -ItemSelectorPart >> initialListIndex: anIndex [ - - initialListIndex := anIndex. - self changed: #initialListIndex. -] - -{ #category : #'initialize-release' } -ItemSelectorPart >> initialize [ - - super initialize. - initialListIndex := 0. - selectionListIndex := 0. - self textEntryMessage: 'Select items with a Smalltalk condition'. - selectionList := SortedCollection new. - - - -] - -{ #category : #'control - initial list ' } -ItemSelectorPart >> listSelectedItem [ - "Answer the currently selected item or nil if none." - - ^self initialListIndex = 0 - ifTrue: [nil] - ifFalse: [self initialList at: self initialListIndex] -] - -{ #category : #'*merlin-rendering' } -ItemSelectorPart >> merlinRendering [ - - ^ self renderer merlinItemsSelectorRenderingFor: self -] - -{ #category : #'accessing - wizard management' } -ItemSelectorPart >> outputValue [ - "this method is an abstract method as only the subclass itself know what is the information to send to the WizardPane which will send it to the wizarControl " - ^ self selectionList -] - -{ #category : #'control - selection list' } -ItemSelectorPart >> selectionList [ - ^ selectionList - -] - -{ #category : #'control - selection list' } -ItemSelectorPart >> selectionList: anObject [ - "Set the value of selectionList" - - selectionList := anObject. - self changed: #selectionList. - - "we check the new size of the selection list. If nothing is selected, we can't go to the next 'page'" - "self enableNextButton: (self selectionList isEmpty not)." - - "Here we check that the selectionIndex is updated according the new list size " - self selectionListIndex > self selectionList size - ifFalse: [^self ]. - - self selectionListIndex: self selectionList size. - self changed: #selectionListIndex . - - - -] - -{ #category : #'control - selection list' } -ItemSelectorPart >> selectionListIndex [ - - ^ selectionListIndex. -] - -{ #category : #'control - selection list' } -ItemSelectorPart >> selectionListIndex: anIndex [ - - selectionListIndex := anIndex. - self changed: #selectionListIndex. - - - - - -] - -{ #category : #'control - selection list' } -ItemSelectorPart >> selectionListSelectedItem [ - "Answer the currently selected item in the selection list or nil if none." - - ^self selectionListIndex = 0 - ifTrue: [nil] - ifFalse: [self selectionList at: self selectionListIndex] -] - -{ #category : #'control - text entry' } -ItemSelectorPart >> smalltalkExpressionToEvaluate [ - - ^ 'initialList select: [ :each |' , textEntryContents , ']' -] - -{ #category : #'control - text entry' } -ItemSelectorPart >> textEntryContents [ - "return the contents of the text entry used to evaluate smalltalk expressions" - ^ textEntryContents -] - -{ #category : #'control - text entry' } -ItemSelectorPart >> textEntryContents: newContents [ - "set the content of the text entry " - textEntryContents := newContents. - self contentsChanged -] - -{ #category : #'control - text entry' } -ItemSelectorPart >> textEntryMessage [ - - ^ textEntryMessage -] - -{ #category : #'control - text entry' } -ItemSelectorPart >> textEntryMessage: aString [ - - textEntryMessage := aString -] - -{ #category : #'control - text entry' } -ItemSelectorPart >> updateInitialListByRemoving: anItem [ - - | tmpInitialList | - tmpInitialList := self initialList asOrderedCollection. - tmpInitialList remove: anItem . - self initialList: tmpInitialList. - -] - -{ #category : #'control - text entry' } -ItemSelectorPart >> updateSelectionListByAdding: anItem [ - - | tmpSelectionList | - tmpSelectionList := self selectionList asOrderedCollection. - tmpSelectionList add: anItem. - self selectionList: (tmpSelectionList asSortedCollection: [:a :b | a < b]). -] - -{ #category : #actions } -ItemSelectorPart >> updateWhenAddingItem [ - | tmpItemsList item initialPackages | - item := self listSelectedItem asString. - tmpItemsList := OrderedCollection withAll: self selectionList. - tmpItemsList add: item. - - " we remove the selected item from the initial list :" - initialPackages := self initialList asOrderedCollection. - initialPackages remove: item. - self initialList: initialPackages. - - " we update the list of items of the selection morph list :" - "listModel item list." - self selectionList: tmpItemsList. - -] - -{ #category : #actions } -ItemSelectorPart >> updateWhenRemovingItem [ - "we remove the selected item from the selection list : " - | list item tmpInitialList | - item := self selectionListSelectedItem. - list := self selectionList asOrderedCollection. - list remove: item. - self selectionList: list. - - "we move the removed item into the items list :" - tmpInitialList := self initialList asOrderedCollection. - tmpInitialList add: item. - self initialList: tmpInitialList. - -] - -{ #category : #actions } -ItemSelectorPart >> validateButtonAction [ - - self evaluateTextEntryContents. -] diff --git a/src-archive/Merlin/ItemSelectorPart.extension.st b/src-archive/Merlin/ItemSelectorPart.extension.st deleted file mode 100644 index c8eb16f7f..000000000 --- a/src-archive/Merlin/ItemSelectorPart.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #ItemSelectorPart } - -{ #category : #'*merlin-rendering' } -ItemSelectorPart >> merlinRendering [ - - ^ self renderer merlinItemsSelectorRenderingFor: self -] diff --git a/src-archive/Merlin/LabelPart.class.st b/src-archive/Merlin/LabelPart.class.st deleted file mode 100644 index 5bf91106b..000000000 --- a/src-archive/Merlin/LabelPart.class.st +++ /dev/null @@ -1,38 +0,0 @@ -Class { - #name : #LabelPart, - #superclass : #WizardPart, - #category : #'Merlin-ToBeRemoved' -} - -{ #category : #'instance creation' } -LabelPart class >> on: stringText [ - - ^ super new initializeWith: stringText . -] - -{ #category : #'instance creation' } -LabelPart class >> on: stringText inGroupBoxNamed: groupBoxName [ - - ^ super new initializeWith: stringText inGroupBoxNamed: groupBoxName ; yourself . -] - -{ #category : #'initialize-release' } -LabelPart >> initializeWith: stringText [ - - "self contents: {self newLabel: stringText }" - self populateContents: {self newLabel: stringText } -] - -{ #category : #'initialize-release' } -LabelPart >> initializeWith: stringText inGroupBoxNamed: groupBoxName [ - - self populateContents: {self newGroupboxNamed: groupBoxName With: (self newLabel: stringText) } -] - -{ #category : #'accessing - wizard mangement' } -LabelPart >> outputValue [ - - ^ nil - - -] diff --git a/src-archive/Merlin/ListPart.class.st b/src-archive/Merlin/ListPart.class.st deleted file mode 100644 index 1ba86ac7a..000000000 --- a/src-archive/Merlin/ListPart.class.st +++ /dev/null @@ -1,151 +0,0 @@ -Class { - #name : #ListPart, - #superclass : #WizardPart, - #instVars : [ - 'list', - 'selectionIndex', - 'listHeight', - 'listWidth' - ], - #category : #'Merlin-Parts' -} - -{ #category : #accessing } -ListPart >> horizontalSize [ - - ^ self listWidth -] - -{ #category : #accessing } -ListPart >> horizontalSize: anInteger [ - - self listWidth: anInteger. -] - -{ #category : #listControl } -ListPart >> initialList: anObject [ - "Set the value of list" - - list := anObject. -] - -{ #category : #'initialize-release' } -ListPart >> initialize [ - - super initialize. - self list: #(). - -] - -{ #category : #accessing } -ListPart >> latePopulateContents [ - - (self valueOf: self defaultValue) ifNotNil: [:anIndex | - self selectionIndex: anIndex - ] -] - -{ #category : #listControl } -ListPart >> list [ - "Answer the value of list" - - ^ self valueOf: list -] - -{ #category : #listControl } -ListPart >> list: anObject [ - "Set the value of list" - - list := anObject. - self changed: #list -] - -{ #category : #accessing } -ListPart >> listHeight [ - - ^ listHeight -] - -{ #category : #accessing } -ListPart >> listHeight: anInteger [ - - listHeight := anInteger. -] - -{ #category : #accessing } -ListPart >> listWidth [ - - ^ listWidth -] - -{ #category : #accessing } -ListPart >> listWidth: anInteger [ - - listWidth := anInteger. -] - -{ #category : #'*Merlin-Rendering' } -ListPart >> merlinRendering [ - - ^ self renderer merlinListRenderingFor: self -] - -{ #category : #'accessing - Wizard Management' } -ListPart >> outputValue [ - "this method is an abstract method as only the subclass itself know what is the information to send to the WizardPane which will send it to the wizarControl " - self list ifNotNil: [:tmpList | - - ^ "tmpList at:" self selectionIndex] -] - -{ #category : #listControl } -ListPart >> safeSelectionIndex: anObject [ - "Set the value of selectionIndex" - - selectionIndex := anObject. -] - -{ #category : #listControl } -ListPart >> selectedItem [ - "Answer the currently selected item or nil if none." - - ^self selectionIndex = 0 - ifTrue: [nil] - ifFalse: [self list at: self selectionIndex] -] - -{ #category : #listControl } -ListPart >> selectedItem: anItem [ - - (self list includes: anItem) ifTrue: [ - self selectionIndex: (self list indexOf: anItem) - ] -] - -{ #category : #listControl } -ListPart >> selectionIndex [ - "Answer the value of selectionIndex" - - ^ selectionIndex ifNil: [0] "if selectionIndex has not been yet initialized, we return 0 to avoid erros". -] - -{ #category : #listControl } -ListPart >> selectionIndex: anObject [ - "Set the value of selectionIndex" - - selectionIndex := anObject. - self changed: #selectionIndex. - self hasChanged . -] - -{ #category : #accessing } -ListPart >> verticalSize [ - - ^ self listHeight -] - -{ #category : #accessing } -ListPart >> verticalSize: anInteger [ - - self listHeight: anInteger. -] diff --git a/src-archive/Merlin/ListPart.extension.st b/src-archive/Merlin/ListPart.extension.st deleted file mode 100644 index eb039b0f2..000000000 --- a/src-archive/Merlin/ListPart.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #ListPart } - -{ #category : #'*Merlin-Rendering' } -ListPart >> merlinRendering [ - - ^ self renderer merlinListRenderingFor: self -] diff --git a/src-archive/Merlin/ListSelector.class.st b/src-archive/Merlin/ListSelector.class.st deleted file mode 100644 index cc1bdb1ef..000000000 --- a/src-archive/Merlin/ListSelector.class.st +++ /dev/null @@ -1,337 +0,0 @@ -Class { - #name : #ListSelector, - #superclass : #WizardPart, - #instVars : [ - 'addButton', - 'selectionList', - 'selectionListSelectionIndex', - 'removeButton', - 'initialList', - 'initialListSelectionIndex' - ], - #category : #'Merlin-ToBeRemoved' -} - -{ #category : #'instance creation' } -ListSelector class >> on: initialList [ - ^ self new - initialize; - initialList: initialList; - boxInitialization ; yourself -] - -{ #category : #'private - customization' } -ListSelector >> addRowWithAll: collectionOfMorphElements withTitle: aString [ - "enable the customization of this PackageSelector. Add a new row under the packages list with all elements contained in collectionOfMorphElements " - | tmpBuilderMainContent | - tmpBuilderMainContent := self contents submorphs asOrderedCollection . - tmpBuilderMainContent add: - (self newRowWith: { - (self - newGroupboxNamed: aString - WithAll: { (self newRowWith: collectionOfMorphElements ) }). - (self newColumnWith: { }). - (self newColumnWith: { }) - }). - - self contents:( - tmpBuilderMainContent asArray - ). - -] - -{ #category : #'private - customization' } -ListSelector >> addStringMessage: aString ForRowIndexedBy: anIndex [ - "allow the user to dynamically add a message (wich can be for example an error message or informations missing) to the new row he created before at the anIndex position (the index one is attributed to the packageSelector stuff) " - | initialBuilderMainContent tmpBuilderMainContent | - - initialBuilderMainContent := self contents submorphs asOrderedCollection . - "tmpBuilderMainContent represent the new content of main window (in wich we will add the message)" - tmpBuilderMainContent := initialBuilderMainContent copy. - - "We add the message to the row number anIndex" - tmpBuilderMainContent at: anIndex put: ( - self newRowWith: { - (initialBuilderMainContent at: anIndex) submorphs first. - self newColumnWith: { self newGroupboxNamed: 'Information' With: (self newLabel: aString)}. - }). - - "we set the new content of the window" - self contents:( - tmpBuilderMainContent - ). - self wizardPane buildDialogWindow . - - -] - -{ #category : #'morph initialization' } -ListSelector >> boxInitialization [ - | morphPackagesList morphSelectionList | - (morphSelectionList := self newSelectionList). - (morphPackagesList := self newInitialList). - self contents:{ self newRowWith: { - ((self - newGroupboxNamed: 'Packages' translated - With: morphPackagesList)). - (self newColumnWith: { - (self newRowWith: { }). - (self newRowWith: { }). - (self newRowWith: { }). - (self newAddButton). - (self newRowWith: { }). - (self newRemoveButton) - }). - (self newColumnWith: { - (self - newGroupboxNamed: 'Selection' translated - With: morphSelectionList) - }) - }} -] - -{ #category : #'private - customization' } -ListSelector >> deleteStringMessageFromRowIndexedBy: anIndex [ - "allow the user to dynamically delete a message he put before at the row number anIndex (the index 1 is attributed to the PackageSelectorStuff) " - | initialBuilderMainContent tmpBuilderMainContent | - - initialBuilderMainContent := self contents submorphs asOrderedCollection . - "tmpBuilderMainContent represent the new content of main window (in wich we will delete the message)" - tmpBuilderMainContent := initialBuilderMainContent copy. - - "We delete the message from the row number anIndex" - tmpBuilderMainContent at: anIndex put: ( - self newRowWith: { - (initialBuilderMainContent at: anIndex) submorphs first "detect: [:component | (component isKindOf: GroupboxMorph) ]". - self newColumnWith: { }. - }). - "we set the new content of the window" - self contents:( - tmpBuilderMainContent asArray - ). - self wizardPane buildDialogWindow . - -] - -{ #category : #'initialize-release' } -ListSelector >> initialList: aCollectionOfString [ - " enable this PackageSelector to use aCollectionOfString as initial packages list" - initialList := aCollectionOfString asSortedCollection: [ :a :b | a < b ] -] - -{ #category : #'initialize-release' } -ListSelector >> initialize [ - - super initialize. - initialListSelectionIndex := 0. - - selectionListSelectionIndex := 0. - selectionList := SortedCollection new. - - self disableNextButton - - -] - -{ #category : #'initial list control' } -ListSelector >> list [ - ^initialList -] - -{ #category : #'initial list control' } -ListSelector >> list: anObject [ - "Set the value of list" - - initialList := anObject. - self changed: #list. - - "Here we check that the selectionIndex is updated according the new list size " - self listSelectionIndex > self list size ifFalse: [^self]. - self packagesListSelectionIndex: self list size. - self changed: #listSelectionIndex -] - -{ #category : #'initial list control' } -ListSelector >> listSelectedItem [ - "Answer the currently selected item or nil if none." - - ^self listSelectionIndex = 0 - ifTrue: [nil] - ifFalse: [self list at: self listSelectionIndex] -] - -{ #category : #'initial list control' } -ListSelector >> listSelectionIndex [ - ^initialListSelectionIndex -] - -{ #category : #'morph initialization' } -ListSelector >> newAddButton [ - "return the button that will be used to add a package from the packagesList to the selectionList. While no item is selected in the packagesList, this button is disable " - - - addButton := PluggableButtonMorphPlus - on: self getState: nil action: #updateWhenAddingItem. - addButton label: '>>>'. - addButton disable. - ^addButton -] - -{ #category : #'morph initialization' } -ListSelector >> newInitialList [ - "return a new list (PluggableListMorph) that will contain the initial list of items that can be selected by the user" - - ^ (self newListFor: self list: #list selected: #listSelectionIndex changeSelected: #packagesListSelectionIndex: ) - minWidth: 250; - minHeight: 350; yourself -] - -{ #category : #'morph initialization' } -ListSelector >> newRemoveButton [ - "return the button that will be used to remove a package from the selectionList to the packagesList. While no item is selected in the selectionList, this button is disable " - - - removeButton := PluggableButtonMorphPlus - on: self getState: nil action: #updateWhenRemovingItem. - removeButton label: '<<<'. - removeButton disable. - ^removeButton -] - -{ #category : #'morph initialization' } -ListSelector >> newSelectionList [ - "return a new list (PluggableListMorph) that will contain all the packages selected by the user" - ^( self newListFor: self - list: #selectionList - selected: #selectionListSelectionIndex - changeSelected: #selectionListSelectionIndex:) - minWidth: 250; - minHeight: 350; - yourself -] - -{ #category : #'initial list control' } -ListSelector >> packagesListSelectionIndex: anIndex [ - - initialListSelectionIndex := anIndex. - - initialListSelectionIndex > 0 - "when a package is selected in the packagesList, .." - ifTrue: [ - - "we make sure that the addButton can be clicked on : " - addButton enable. - "we disable the selection of the selection list : " - self selectionListSelectionIndex: 0. - self changed: #selectionListSelectionIndex] - - ifFalse: [ - addButton disable - ]. - - self changed: #packagesListSelectionIndex. -] - -{ #category : #'selection list control' } -ListSelector >> selectionList [ - ^ selectionList - -] - -{ #category : #'selection list control' } -ListSelector >> selectionList: anObject [ - "Set the value of selectionList" - - selectionList := anObject. - self changed: #selectionList. - - "we check the new size of the selection list. If nothing is selected, we can't go to the next 'page'" - - self enableNextButton: (self selectionList isEmpty not). - - "Here we check that the selectionIndex is updated according the new list size " - self selectionListSelectionIndex > self selectionList size - ifFalse: [^self ]. - - self selectionListSelectionIndex: self selectionList size. - self changed: #selectionListSelectionIndex . - - - -] - -{ #category : #'selection list control' } -ListSelector >> selectionListSelectedItem [ - "Answer the currently selected item in the selection list or nil if none." - - ^self selectionListSelectionIndex = 0 - ifTrue: [nil] - ifFalse: [self selectionList at: self selectionListSelectionIndex] -] - -{ #category : #'selection list control' } -ListSelector >> selectionListSelectionIndex [ - - ^ selectionListSelectionIndex. -] - -{ #category : #'selection list control' } -ListSelector >> selectionListSelectionIndex: anIndex [ - - selectionListSelectionIndex := anIndex. - self changed: #selectionListSelectionIndex. - - - self selectionListSelectionIndex > 0 - ifTrue: [ - "we make sure that the removeButton is enabled when a package is selected :" - removeButton enable. - "we disable the selection of the packages list : " - self packagesListSelectionIndex: 0. - self changed: #packagesListSelectionIndex - ] - ifFalse: [ - removeButton disable - - ]. - - -] - -{ #category : #actions } -ListSelector >> updateWhenAddingItem [ - | tmpPackagesList package initialPackages | - package := self listSelectedItem asString. - tmpPackagesList := OrderedCollection withAll: self selectionList. - tmpPackagesList add: package. - - " we remove the selected package from the initial list :" - initialPackages := self list. - initialPackages remove: package. - self list: initialPackages. - "if the initial become empty, we disable de add button" - initialPackages isEmpty ifTrue: [addButton disable]. - - " we update the list of packages of the selection morph list :" - "listModel packagesList: list." - self selectionList: tmpPackagesList. - -] - -{ #category : #actions } -ListSelector >> updateWhenRemovingItem [ - "we remove the selected item from the selection list : " - | list package tmpPackagesList | - package := self selectionListSelectedItem. - list := self selectionList. - list remove: package. - self selectionList: list. - "if the selection become empty, we disable the remove button :" - list isEmpty ifTrue: [removeButton disable]. - - "we move the removed package into the packages list :" - tmpPackagesList := self list. - tmpPackagesList add: package. - self list: tmpPackagesList. - -] diff --git a/src-archive/Merlin/ListSelectorWithSelectionBySmalltalkExpression.class.st b/src-archive/Merlin/ListSelectorWithSelectionBySmalltalkExpression.class.st deleted file mode 100644 index ec376d993..000000000 --- a/src-archive/Merlin/ListSelectorWithSelectionBySmalltalkExpression.class.st +++ /dev/null @@ -1,157 +0,0 @@ -Class { - #name : #ListSelectorWithSelectionBySmalltalkExpression, - #superclass : #ListSelector, - #instVars : [ - 'textEntry', - 'textEntryContents' - ], - #category : #'Merlin-ToBeRemoved' -} - -{ #category : #'instance creation' } -ListSelectorWithSelectionBySmalltalkExpression class >> on: collectionOfItems [ - - ^ (super on: collectionOfItems ) addSmalltalkExpressionRowToPackageSelector ; yourself -] - -{ #category : #'initialize-release' } -ListSelectorWithSelectionBySmalltalkExpression >> addSmalltalkExpressionRowToPackageSelector [ - self - addRowWithAll: { - ((self newLabel: 'select: [ :each |') disable). - (self newTextEntry). - ((self newLabel: ']') disable). - (self newValidateButton) - } - withTitle: 'Select packages with a Smalltalk condition' -] - -{ #category : #'text entry control' } -ListSelectorWithSelectionBySmalltalkExpression >> evaluateTextEntryContents [ - "make a package selection by evaluating the text entry content" - | selectionCollection | - - [selectionCollection := Smalltalk compiler - evaluate: self smalltalkExpressionToEvaluate - for: self - logged: false. - - selectionCollection do: - [ :each | - (self selectionList includes: each) ifFalse: - [ self updateSelectionListByAdding: each. - self updatePackagesListByRemoving: each ] ]. - self deleteStringMessageFromRowIndexedBy: 2.] - - on: Error - do: [ - self setTitleMessage: 'Select packages with a Smalltalk condition - INVALID EXPRESSION' toGroupboxInRowIndexedBy:2 - ] -] - -{ #category : #'morph content setup tools' } -ListSelectorWithSelectionBySmalltalkExpression >> newLabel: aString [ - - ^LabelMorph contents: aString font: TextStyle defaultFont -] - -{ #category : #'morph content setup tools' } -ListSelectorWithSelectionBySmalltalkExpression >> newTextEntry [ - - "^textEntry := PluggableTextFieldMorph new - on: self - text: #textEntryContents - accept: #textEntryContents: - readSelection: nil - menu: nil." - - | pt | - pt := PluggableTextFieldMorph new - convertTo: String; - alwaysAccept: true; - on: self - text: #textEntryContents - accept: #textEntryContents: - readSelection: nil - menu: nil; - acceptOnCR: true; - "getEnabledSelector: enabledSel;" - font: TextStyle defaultFont; - cornerStyle: #rounded; - hResizing: #spaceFill; - vResizing: #rigid; - borderStyle: (BorderStyle inset width: 1); - color: Color white; - "selectionColor: self selectionColor;" - hideScrollBarsIndefinitely; - extent: 24@(TextStyle defaultFont height + 8); - "setBalloonText: helpText." - yourself. - - pt textMorph - autoFit: true; - wrapFlag: false; - margins: (2@1 corner: 2@1). - ^textEntry := pt - - -] - -{ #category : #'morph content setup tools' } -ListSelectorWithSelectionBySmalltalkExpression >> newValidateButton [ - - "return a button opening the context frame when clicked" - ^ self newButtonNamed: 'Validate' withAction: #validateButtonAction - -] - -{ #category : #'accessing - wizard mangement' } -ListSelectorWithSelectionBySmalltalkExpression >> outputValue [ - "this method is an abstract method as only the subclass itself know what is the information to send to the WizardPane which will send it to the wizarControl " - ^ selectionList -] - -{ #category : #'text entry control' } -ListSelectorWithSelectionBySmalltalkExpression >> smalltalkExpressionToEvaluate [ - - ^ 'initialList select: [ :each |' , textEntryContents , ']' -] - -{ #category : #'text entry control' } -ListSelectorWithSelectionBySmalltalkExpression >> textEntryContents [ - "return the contents of the text entry used to evaluate smalltalk expressions" - ^ textEntryContents -] - -{ #category : #'text entry control' } -ListSelectorWithSelectionBySmalltalkExpression >> textEntryContents: newContents [ - "set the content of the text entry " - textEntryContents := newContents. - self contentsChanged -] - -{ #category : #'text entry control' } -ListSelectorWithSelectionBySmalltalkExpression >> updatePackagesListByRemoving: aPackageName [ - - | tmpPackagesList | - tmpPackagesList := self list. - tmpPackagesList remove: aPackageName . - self list: tmpPackagesList. - -] - -{ #category : #'text entry control' } -ListSelectorWithSelectionBySmalltalkExpression >> updateSelectionListByAdding: aPackageName [ - - | tmpSelectionList | - tmpSelectionList := self selectionList. - tmpSelectionList add: aPackageName. - self selectionList: (tmpSelectionList asSortedCollection: [:a :b | a < b]). -] - -{ #category : #actions } -ListSelectorWithSelectionBySmalltalkExpression >> validateButtonAction [ - - textEntry acceptTextInModel. - self evaluateTextEntryContents. -] diff --git a/src-archive/Merlin/MerlinExamples.class.st b/src-archive/Merlin/MerlinExamples.class.st deleted file mode 100644 index b4b3b96eb..000000000 --- a/src-archive/Merlin/MerlinExamples.class.st +++ /dev/null @@ -1,1357 +0,0 @@ -Class { - #name : #MerlinExamples, - #superclass : #Object, - #category : #'Merlin-Examples' -} - -{ #category : #'basic morphic examples' } -MerlinExamples class >> branchesExample [ - "self branchesExample" - - ^ self branchesExampleUsing: MerlinMorphicWizardRenderer new - -] - -{ #category : #'basic examples' } -MerlinExamples class >> branchesExampleUsing: aMerlinRenderer [ - "self branchesExample" - | wizardControl wizardPane1 dropListPart textFieldPart wizardPane2 wizardPane3 dropListPart2 | - wizardControl := WizardControl new. - wizardControl renderer: aMerlinRenderer. - - wizardPane1 := WizardSinglePane new. - wizardPane2 := WizardFirstPane new. - wizardPane3 := WizardLastPane new. - - dropListPart := DropListPart new - list: #(a b c d e f); - callback: [:value :tmpPart | - (#(a b c d e) includes: value) ifTrue: [ - wizardControl selectBranch: 2. - dropListPart2 defaultItemSelected: value. - tmpPart wizardPane refresh. - ] - ifFalse: [ - tmpPart wizardPane refresh - ] - ]; - yourself. - - dropListPart2 := DropListPart new - list: #(a b c d e f); - callback: [:value :tmpPart | - (#(a b c d e) includes: value) ifFalse: [ - wizardControl selectBranch: 1. - dropListPart defaultItemSelected: value. - tmpPart wizardPane refresh. - ] - ]; - yourself. - - textFieldPart := TextFieldPart new - inGroupboxNamed: 'Enter your own value'; - defaultValue: 'g'; - yourself. - - wizardPane1 row: dropListPart. - wizardPane2 row: dropListPart2. - wizardPane3 row: textFieldPart. - - wizardControl addPane: wizardPane1. - wizardControl addBranch. - wizardControl selectBranch: 2. - wizardControl addPane: wizardPane2. - wizardControl addPane: wizardPane3. - wizardControl selectBranch: 1. - - - wizardControl open. - - -] - -{ #category : #'basic examples' } -MerlinExamples class >> buttonPartUsing: aMerlinRenderer [ - - | wizardControl wizardPane1 dropListPart listPart buttonPart | - wizardControl := WizardControl new. - wizardControl renderer: aMerlinRenderer. - wizardPane1 := WizardSinglePane new. - - buttonPart := ButtonPart new - label: 'display selection'; - callback: [:requiredInputs :part | - part wizardPane refresh. - UIManager default inform: ('selection : ', (#(a b c d e f g) at: (part requiredInputs at: #selection)))]; - yourself. - - listPart := ListPart new - list: #(a b c d e f g); - defaultValue: 1; - useLatePopulateContents: false; - yourself. - - wizardPane1 column: listPart associatedTo: #selection. - wizardPane1 column: buttonPart requiring: {#selection}. - - wizardControl - addPane: wizardPane1. - - wizardControl open. - - -] - -{ #category : #'basic morphic examples' } -MerlinExamples class >> chooseFilePart [ - "self chooseFilePart" - - ^ self chooseFilePartUsing: MerlinMorphicWizardRenderer new - -] - -{ #category : #'basic examples' } -MerlinExamples class >> chooseFilePartUsing: aMerlinRenderer [ - "self chooseFilePart" - - | wizardControl wizardPane1 dropListPart checkboxPart textFieldPart compositePart | - wizardControl := WizardControl new. - wizardControl renderer: aMerlinRenderer. - wizardPane1 := WizardSinglePane new. - - checkboxPart := ChooseFilePart new - validExtensions: 'mse'; - yourself. - - wizardPane1 row: checkboxPart. - - wizardControl - addPane: wizardPane1. - - wizardControl open. - - -] - -{ #category : #'basic morphic examples' } -MerlinExamples class >> compositePart [ - "self compositePart" - - ^ self compositePartUsing: MerlinMorphicWizardRenderer new - - -] - -{ #category : #'basic examples' } -MerlinExamples class >> compositePartUsing: aMerlinRenderer [ - "self compositePart" - - | wizardControl wizardPane1 dropListPart checkboxPart textFieldPart compositePart | - wizardControl := WizardControl new. - wizardControl renderer: aMerlinRenderer. - wizardPane1 := WizardSinglePane new. - - checkboxPart := CheckboxPart new - label: 'select / unselect'; - defaultValue: true - yourself. - - dropListPart := DropListPart new - list: #(1 2 3 4); - defaultValue: 2; - yourself. - - textFieldPart := TextFieldPart new - defaultValue: 'hey'; - "textFieldHorizontalSize: 100" - yourself. - - compositePart := CompositePart new - withTitlesAndParts: {'with checkbox' -> checkboxPart . 'with dropList' -> dropListPart . 'with textField' -> textFieldPart}. - - - wizardPane1 row: compositePart. - - - wizardControl - addPane: wizardPane1. - - wizardControl open. - - -] - -{ #category : #'basic morphic examples' } -MerlinExamples class >> compositePartWithoutSpecifyingTabTitles [ - "self compositePartWithoutSpecifyingTabTitles" - - ^ self compositePartWithoutSpecifyingTabTitlesUsing: MerlinMorphicWizardRenderer new - -] - -{ #category : #'basic examples' } -MerlinExamples class >> compositePartWithoutSpecifyingTabTitlesUsing: aMerlinRenderer [ - "self compositePartWithoutSpecifyingTabTitles" - - | wizardControl wizardPane1 dropListPart checkboxPart textFieldPart compositePart | - wizardControl := WizardControl new. - wizardControl renderer: aMerlinRenderer. - wizardPane1 := WizardSinglePane new. - - checkboxPart := CheckboxPart new - label: 'select / unselect'; - defaultValue: true - yourself. - - dropListPart := DropListPart new - list: #(1 2 3 4); - defaultValue: 2; - yourself. - - textFieldPart := TextFieldPart new - defaultValue: 'hey'; - "textFieldHorizontalSize: 100" - yourself. - - compositePart := CompositePart new - withParts: {checkboxPart . dropListPart . textFieldPart}. - - - wizardPane1 row: compositePart. - - - wizardControl - addPane: wizardPane1. - - wizardControl open. - - -] - -{ #category : #'basic morphic examples' } -MerlinExamples class >> compositeWithParametrizedParts [ - "self compositeWithParametrizedParts" - - ^ self compositeWithParametrizedPartsUsing: MerlinMorphicWizardRenderer new - -] - -{ #category : #'basic examples' } -MerlinExamples class >> compositeWithParametrizedPartsUsing: aMerlinRenderer [ - "self compositeWithParametrizedParts" - - | wizardControl wizardPane1 dropListPart checkboxPart textFieldPart compositePart mainPart | - - wizardControl := WizardControl new. - wizardControl renderer: aMerlinRenderer. - wizardPane1 := WizardSinglePane new. - mainPart := DropListPart new - list: #(true false); - inGroupboxNamed: 'the selection will be propagated to all parts'; - defaultValue: 1; - callback: [ :outputValue | - checkboxPart selected: outputValue. - dropListPart selectionIndex: (dropListPart list indexOf: outputValue). - textFieldPart textEntryContents: outputValue asString. - ]; - yourself. - - checkboxPart := CheckboxPart new - label: 'select / unselect'; - defaultValue: true; - yourself. - - dropListPart := DropListPart new - list: #(true false); - defaultValue: 2; - yourself. - - textFieldPart := TextFieldPart new - defaultValue: 'hey'; - "textFieldHorizontalSize: 100" - yourself. - - compositePart := CompositePart new - withTitlesAndParts: {'with checkbox' -> checkboxPart . 'with dropList' -> dropListPart . 'with textField' -> textFieldPart}. - - wizardPane1 row: mainPart. - wizardPane1 row: compositePart. - - - wizardControl - addPane: wizardPane1. - - wizardControl open. - - -] - -{ #category : #'basic morphic examples' } -MerlinExamples class >> dropListsWithCondition [ - "self dropListsWithCondition" - ^ self dropListsWithConditionUsing: MerlinMorphicWizardRenderer new. -] - -{ #category : #'basic examples' } -MerlinExamples class >> dropListsWithConditionUsing: aRenderer [ - "self dropListsWithCondition" - - | wizardControl wizardPane1 firstDropListPartPart secondDropListPart textPart wizardPane2 | - wizardControl := WizardControl new. - wizardControl renderer: aRenderer. - wizardPane1 := WizardFirstPane new. - wizardPane2 := WizardLastPane new. - - firstDropListPartPart := DropListPart new - inGroupboxNamed: 'First number'; - list: #(1 2 3 4 5 6 7 8 9); - defaultValue: 1; - yourself. - - secondDropListPart := DropListPart new - inGroupboxNamed: 'Second number'; - list: #(1 2 3 4 5 6 7 8 9); - defaultValue: 1; - yourself. - - textPart := TextPart new - defaultValue: [:requiredInput | - (requiredInput at: #firstNumber) asString , ' and ', (requiredInput at: #secondNumber) asString - ]; - yourself. - - - wizardPane1 column: firstDropListPartPart associatedTo: #firstNumber. - wizardPane1 column: secondDropListPart associatedTo: #secondNumber. - wizardPane2 row: textPart associatedTo: #result requiring: #(firstNumber secondNumber). - - wizardPane1 - name: 'Sum should be 10'; - condition: [:wizardInformations | - ((wizardInformations at: #firstNumber) + (wizardInformations at: #secondNumber)) = 10] - named: 'The sum of the two number has to be equal to 10'. - wizardControl - addPane: wizardPane1; - addPane: wizardPane2; - yourself. - - wizardControl open. - - -] - -{ #category : #'basic morphic examples' } -MerlinExamples class >> itemsSelectorPart [ - "self itemsSelectorPart" - - ^ self itemsSelectorPartUsing: MerlinMorphicWizardRenderer new -] - -{ #category : #'basic examples' } -MerlinExamples class >> itemsSelectorPartUsing: aMerlinRenderer [ - "self itemsSelectorPart" - - | wizardControl wizardPane1 wizardPane2 itemsSelectorsPart listPart | - wizardControl := WizardControl new. - wizardControl renderer: aMerlinRenderer. - wizardPane1 := WizardFirstPane new. - wizardPane2 := WizardLastPane new. - - itemsSelectorsPart := ItemSelectorPart new - initialList: #(item1 item2 item3 item4); - yourself. - - listPart := ListPart new - initialList: [:requiredInputs | - (requiredInputs at: #selectedItems) - ]; - yourself. - - wizardPane1 row: itemsSelectorsPart associatedTo: #selectedItems. - wizardPane2 row: listPart requiring: {#selectedItems}. - - wizardControl - addPane: wizardPane1; - addPane: wizardPane2. - - wizardControl open. - - -] - -{ #category : #'basic morphic examples' } -MerlinExamples class >> modifyingWizardStructureInCallbacks [ - - "self modifyingWizardStructureInCallbacks" - ^ self modifyingWizardStructureInCallbacksUsing: MerlinMorphicWizardRenderer new -] - -{ #category : #'basic examples' } -MerlinExamples class >> modifyingWizardStructureInCallbacksUsing: aMerlinRenderer [ - - "self modifyingWizardStructureInCallbacks" - |wizard| - wizard := WizardControl new. - wizard renderer: aMerlinRenderer. - wizard addPane: ( - WizardFirstPane new - row: ( - DropListPart new - inGroupboxNamed: 'How many checkboxes to you want to see ?'; - list: #(1 2 3 4 5); - callback: [:number | - |secondPane| - wizard wizardPanes size > 1 ifTrue: [ - wizard removePaneAt: 2 - ]. - secondPane := WizardLastPane new. - (1 to: number) do: [:index | - secondPane row: CheckboxPart new. - ]. - wizard addPane: secondPane. - ]; - yourself - ) - ). - wizard open. -] - -{ #category : #'basic morphic examples' } -MerlinExamples class >> modifyingWizardStructureInChooseFilePartCallbacks [ - - "self modifyingWizardStructureInChooseFilePartCallbacks" - ^ self modifyingWizardStructureInChooseFilePartCallbacksUsing: MerlinMorphicWizardRenderer new -] - -{ #category : #'basic morphic examples' } -MerlinExamples class >> modifyingWizardStructureInChooseFilePartCallbacks2 [ - - "self modifyingWizardStructureInChooseFilePartCallbacks2" - ^ self modifyingWizardStructureInChooseFilePartCallbacks2Using: MerlinMorphicWizardRenderer new - -] - -{ #category : #'basic examples' } -MerlinExamples class >> modifyingWizardStructureInChooseFilePartCallbacks2Using: aRenderer [ - - "self modifyingWizardStructureInChooseFilePartCallbacks2" - |wizard filePart| - wizard := WizardControl new. - wizard renderer: aRenderer. - filePart := ChooseFilePart new - yourself. - - wizard addPane: ( - WizardFirstPane new - row: filePart associatedTo: #path - ). - wizard addPane: ( - WizardLastPane new - row: (TextPart new - defaultValue: [:requiredInputs | - (requiredInputs at: #path) asString - ] - ) requiring: {#path} - ). - - wizard open. -] - -{ #category : #'basic examples' } -MerlinExamples class >> modifyingWizardStructureInChooseFilePartCallbacksUsing: aRenderer [ - - "self modifyingWizardStructureInChooseFilePartCallbacks" - |wizard filePart| - wizard := WizardControl new. - wizard renderer: aRenderer. - filePart := ChooseFilePart new - callback: [:filepath :part| - |secondPane| - wizard wizardPanes size > 1 ifTrue: [ - wizard removePaneAt: 2 - ]. - secondPane := WizardLastPane new. - secondPane row: (TextPart new text: filepath asString; yourself). - wizard addPane: secondPane. - ]; - yourself. - - wizard addPane: ( - WizardFirstPane new - row: filePart associatedTo: #path - ). - - wizard open. -] - -{ #category : #'basic morphic examples' } -MerlinExamples class >> multiCheckBoxesPart [ - "self multiCheckBoxesPart" - - ^ self multiCheckBoxesPartUsing: MerlinMorphicWizardRenderer new -] - -{ #category : #'basic examples' } -MerlinExamples class >> multiCheckBoxesPartUsing: aRendrer [ - "self multiCheckBoxesPart" - - | wizardControl wizardPane1 wizardPane2 checkboxesPart textFieldPart textPart | - wizardControl := WizardControl new. - wizardControl renderer: aRendrer. - wizardPane1 := WizardFirstPane new. - wizardPane2 := WizardLastPane new. - - checkboxesPart := MultiCheckboxesPart new - labels: {'first checkbox'. 'second checkbox'. 'third checkbox'. 'fourth checkbox'}; - yourself. - - textPart := TextPart new - defaultValue: [:requiredInputs | - |string| - string := ''. - (requiredInputs at: #selectedLabels) do: [:anAssoc | - anAssoc value ifTrue: [ - string := string, ' ',anAssoc key - ]. - ]. - string - ]. - - wizardPane1 column: checkboxesPart associatedTo: #selectedLabels. - wizardPane2 column: textPart requiring: {#selectedLabels}. - - wizardControl - addPane: wizardPane1; - addPane: wizardPane2. - - wizardControl open. - - -] - -{ #category : #'basic morphic examples' } -MerlinExamples class >> multiCheckBoxesPartWithCallback [ - "self multiCheckBoxesPartWithCallback" - - self multiCheckBoxesPartWithCallbackUsing: MerlinMorphicWizardRenderer new - -] - -{ #category : #'basic examples' } -MerlinExamples class >> multiCheckBoxesPartWithCallbackUsing: aRenderer [ - "self multiCheckBoxesPartWithCallback" - - | wizardControl wizardPane1 wizardPane2 checkboxesPart textFieldPart textPart | - wizardControl := WizardControl new. - wizardPane1 := WizardSinglePane new. - - checkboxesPart := MultiCheckboxesPart new - labels: {'select/deselect all other checkboxes'. 'normal checkbox'. 'normal checkbox'. 'normal checkbox'}; - callback: [:output :wizardPart | - (output key = 'select/deselect all other checkboxes') ifTrue: [ - wizardPart options do: [:anOption | - anOption = 'select/deselect all other checkboxes' ifFalse: [ - wizardPart setOption: anOption to: output value - ] - ] - ]. - - ]; - yourself. - - - wizardPane1 row: checkboxesPart associatedTo: #selectedLabels. - - wizardControl - addPane: wizardPane1. - - wizardControl open. - - -] - -{ #category : #'basic morphic examples' } -MerlinExamples class >> multiDependentCheckboxesPart [ - "self multiDependentCheckboxesPart" - - ^ self multiDependentCheckboxesPartUsing: MerlinMorphicWizardRenderer new - - -] - -{ #category : #'basic examples' } -MerlinExamples class >> multiDependentCheckboxesPartUsing: aRenderer [ - "self multiDependentCheckboxesPart" - - | wizardControl wizardPane1 wizardPane2 checkboxesPart textFieldPart textPart | - wizardControl := WizardControl new. - wizardControl renderer: aRenderer. - wizardPane1 := WizardSinglePane new. - - checkboxesPart := MultiDependentCheckboxesPart new - labelsAndDependencies: (Dictionary new - at: #label1 put: {#label2. #label3}; - at: #label2 put: {#label3}; - at: #label3 put: #(); - yourself - ); - yourself. - - wizardPane1 row: checkboxesPart associatedTo: #selectedLabels. - - wizardControl - addPane: wizardPane1. - - wizardControl open. - - -] - -{ #category : #'basic examples' } -MerlinExamples class >> multiDependentCheckboxesWithCallbackPart [ - - "self multiDependentCheckboxesWithCallbackPart" - ^ self multiDependentCheckboxesWithCallbackPartUsing: MerlinMorphicWizardRenderer new -] - -{ #category : #'basic examples' } -MerlinExamples class >> multiDependentCheckboxesWithCallbackPartUsing: aRenderer [ - "self multiDependentCheckboxesWithCallbackPart" - - | wizardControl wizardPane1 wizardPane2 checkboxesPart textFieldPart textPart listPart | - wizardControl := WizardControl new. - wizardControl renderer: aRenderer. - wizardPane1 := WizardFirstPane new. - wizardPane2 := WizardLastPane new. - - listPart := ListPart new - inGroupboxNamed: 'Selected options'; - list: #(); - yourself. - - checkboxesPart := MultiDependentCheckboxesPart new - labelsAndDependencies: (Dictionary new - at: #label1 put: {#label2. #label3}; - at: #label2 put: {#label3}; - at: #label3 put: #(); - yourself - ); - callback: [:outputValue | - listPart list: (outputValue select: [:each | each value = true] thenCollect: [:each | each key]) - ] - yourself. - - - - wizardPane1 row: checkboxesPart associatedTo: #selectedLabels. - wizardPane2 row: listPart associatedTo: #selectedOptions. - - wizardControl - addPane: wizardPane1; - addPane: wizardPane2. - - wizardControl open. - - -] - -{ #category : #'basic morphic examples' } -MerlinExamples class >> multiSelectionItemsSelectorPart [ - "self multiSelectionItemsSelectorPart" - - ^ self multiSelectionItemsSelectorPartUsing: MerlinMorphicWizardRenderer new -] - -{ #category : #'basic examples' } -MerlinExamples class >> multiSelectionItemsSelectorPartUsing: aRenderer [ - "self multiSelectionItemsSelectorPart" - - | wizardControl wizardPane1 wizardPane2 itemsSelectorsPart listPart | - wizardControl := WizardControl new. - wizardControl renderer: aRenderer. - wizardPane1 := WizardFirstPane new. - wizardPane2 := WizardLastPane new. - - itemsSelectorsPart := MultiSelectionItemSelectorPart new - initialList: #(item1 item2 item3 item4); - yourself. - - listPart := ListPart new - initialList: [:requiredInputs | - (requiredInputs at: #selectedItems) - ]; - yourself. - - wizardPane1 row: itemsSelectorsPart associatedTo: #selectedItems. - wizardPane2 row: listPart requiring: {#selectedItems}. - - wizardControl - addPane: wizardPane1; - addPane: wizardPane2. - - wizardControl open. - - -] - -{ #category : #'complete examples' } -MerlinExamples class >> numericalOperationsExample [ - "self numericalOperationsExample" - | wizardControl firstPane middlePane lastPane firstNumberDropList operatorDropList secondNumberDropList | - - wizardControl := WizardControl new. - firstPane := WizardFirstPane new. - middlePane := WizardMiddlePane new. - lastPane := WizardLastPane new. - - wizardControl addPane: firstPane. - wizardControl addPane: middlePane. - wizardControl addPane: lastPane. - - firstNumberDropList := DropListPart new - list: #(1 2 3 4 5 6 7 8 9); - useLatePopulateContents: false. - operatorDropList := DropListPart new - list: #(+ - * / ); - useLatePopulateContents: false. - secondNumberDropList := DropListPart new - list: #(1 2 3 4 5 6 7 8 9); - useLatePopulateContents: false. - - firstPane - row: firstNumberDropList - associatedTo: #firstNumber. - middlePane - row: operatorDropList - associatedTo: #operator. - lastPane - row: secondNumberDropList - associatedTo: #secondNumber. - wizardControl atEndDo: [:aDictionaryOfOutputs | - |result| - result := Smalltalk evaluate: - (aDictionaryOfOutputs at: #firstNumber) asString, - (aDictionaryOfOutputs at: #operator) asString, - (aDictionaryOfOutputs at: #secondNumber) asString. - UIManager inform: 'The result is: ', result asString. - ]. - wizardControl open -] - -{ #category : #'basic morphic examples' } -MerlinExamples class >> parametrizedChexboxes [ - "self parametrizedChexboxes" - - ^ self parametrizedChexboxesUsing: MerlinMorphicWizardRenderer new -] - -{ #category : #'basic examples' } -MerlinExamples class >> parametrizedChexboxesUsing: aRenderer [ - "self parametrizedChexboxes" - - | wizardControl wizardPane1 wizardPane2 firstCheckBoxPart secondCheckBoxPart | - wizardControl := WizardControl new. - wizardControl renderer: aRenderer. - wizardPane1 := WizardFirstPane new. - wizardPane2 := WizardLastPane new. - - firstCheckBoxPart := CheckboxPart new - label: 'if selected, next one not selected'; - inGroupboxNamed: 'Test'; - defaultValue: true; - useLatePopulateContents: false; - yourself. - - secondCheckBoxPart := CheckboxPart new - label: 'selected if previous one not selected'; - inGroupboxNamed: 'Test'; - defaultValue: [:inputs | (inputs at: #firstCheckbocValue) not]; - yourself. - - - wizardPane1 row: firstCheckBoxPart associatedTo: #firstCheckbocValue. - wizardPane2 row: secondCheckBoxPart associatedTo: #secondCheckbocValue requiring: {#firstCheckbocValue}. - - wizardControl - addPane: wizardPane1 ; - addPane: wizardPane2. - - wizardControl open. - - -] - -{ #category : #'basic morphic examples' } -MerlinExamples class >> parametrizedDropLists [ - "self parametrizedDropLists" - - ^ self parametrizedDropListsUsing: MerlinMorphicWizardRenderer new - - -] - -{ #category : #'basic examples' } -MerlinExamples class >> parametrizedDropListsUsing: aRenderer [ - "self parametrizedDropLists" - - | wizardControl wizardPane1 wizardPane2 firstDropListPartPart secondDropListPart | - wizardControl := WizardControl new. - wizardControl renderer: aRenderer. - wizardPane1 := WizardFirstPane new. - wizardPane2 := WizardLastPane new. - - firstDropListPartPart := DropListPart new - inGroupboxNamed: 'Select an item'; - list: #('un' 'deux' 'trois' 'quatre'); - defaultValue: 'trois'; - useLatePopulateContents: false; - yourself. - - secondDropListPart := DropListPart new - inGroupboxNamed: 'Same selection than previous dropList'; - defaultValue: [:inputs | (inputs at: #firstDropListValue) ]; - list: #('un' 'deux' 'trois' 'quatre'); - yourself. - - - wizardPane1 row: firstDropListPartPart associatedTo: #firstDropListValue. - wizardPane2 row: secondDropListPart associatedTo: #secondDropListValue requiring: {#firstDropListValue}. - - wizardControl - addPane: wizardPane1 ; - addPane: wizardPane2. - - wizardControl open. - - -] - -{ #category : #'basic morphic examples' } -MerlinExamples class >> parametrizedLists [ - "self parametrizedLists" - - self parametrizedListsUsing: MerlinMorphicWizardRenderer new - -] - -{ #category : #'basic examples' } -MerlinExamples class >> parametrizedListsUsing: aRenderer [ - "self parametrizedLists" - - | wizardControl wizardPane1 wizardPane2 firstListPartPart secondListPart | - wizardControl := WizardControl new. - wizardControl renderer: aRenderer. - wizardPane1 := WizardFirstPane new. - wizardPane2 := WizardLastPane new. - - firstListPartPart := ListPart new - inGroupboxNamed: 'Select an item'; - list: #('un' 'deux' 'trois' 'quatre'); - defaultValue: 1; - useLatePopulateContents: false; - yourself. - - secondListPart := ListPart new - inGroupboxNamed: 'Same selection than previous dropList'; - defaultValue: [:inputs | (inputs at: #firstListValue) ]; - list: #('un' 'deux' 'trois' 'quatre'); - yourself. - - - wizardPane1 row: firstListPartPart associatedTo: #firstListValue. - wizardPane2 row: secondListPart associatedTo: #secondListValue requiring: {#firstListValue}. - - wizardControl - addPane: wizardPane1 ; - addPane: wizardPane2. - - wizardControl open. - - -] - -{ #category : #'basic morphic examples' } -MerlinExamples class >> parametrizedListsUsingRefresh [ - "self parametrizedListsUsingRefresh" - - ^ self parametrizedListsUsingRefreshUsing: MerlinMorphicWizardRenderer new -] - -{ #category : #'basic examples' } -MerlinExamples class >> parametrizedListsUsingRefreshUsing: aRenderer [ - "self parametrizedListsUsingRefresh" - - | wizardControl wizardPane1 wizardPane2 firstListPartPart secondListPart | - wizardControl := WizardControl new. - wizardControl renderer: aRenderer. - wizardPane1 := WizardFirstPane new. - wizardPane2 := WizardLastPane new. - - firstListPartPart := ListPart new - inGroupboxNamed: 'Select an item'; - list: #('un' 'deux' 'trois' 'quatre'); - defaultValue: 1; - useLatePopulateContents: false; - callback: [:outputValue :thisPart | - thisPart wizardPane refresh - ] - yourself. - - secondListPart := ListPart new - inGroupboxNamed: 'Same selection than previous dropList'; - defaultValue: [:inputs | (inputs at: #firstListValue) ]; - list: #('un' 'deux' 'trois' 'quatre'); - yourself. - - - wizardPane1 row: firstListPartPart associatedTo: #firstListValue. - wizardPane2 row: secondListPart associatedTo: #secondListValue requiring: {#firstListValue}. - - wizardControl - addPane: wizardPane1 ; - addPane: wizardPane2. - - wizardControl open. - - -] - -{ #category : #'basic morphic examples' } -MerlinExamples class >> parametrizedMorphDropLists [ - "self parametrizedMorphDropLists" - - ^ self parametrizedMorphDropListsUsing: MerlinMorphicWizardRenderer new -] - -{ #category : #'basic examples' } -MerlinExamples class >> parametrizedMorphDropListsUsing: aRenderer [ - "self parametrizedMorphDropLists" - - | wizardControl wizardPane1 wizardPane2 firstDropListPartPart secondDropListPart | - wizardControl := WizardControl new. - wizardControl renderer: aRenderer. - wizardPane1 := WizardFirstPane new. - wizardPane2 := WizardLastPane new. - - firstDropListPartPart := MorphDropListPart new - inGroupboxNamed: 'Select an item'; - list: ({Color red . Color yellow . Color blue } collect: [:c | Morph new extent: 80@12; color: c]); - defaultValue: 2; - useLatePopulateContents: false; - yourself. - - secondDropListPart := MorphDropListPart new - inGroupboxNamed: 'Same selection than previous dropList'; - defaultValue: [:inputs | (inputs at: #firstDropListValue) ]; - list: ({Color red . Color yellow . Color blue } collect: [:c | Morph new extent: 80@12; color: c]); - yourself. - - - wizardPane1 row: firstDropListPartPart associatedTo: #firstDropListValue. - wizardPane2 row: secondDropListPart associatedTo: #secondDropListValue requiring: {#firstDropListValue}. - - wizardControl - addPane: wizardPane1 ; - addPane: wizardPane2. - - wizardControl open. - - -] - -{ #category : #'basic morphic examples' } -MerlinExamples class >> parametrizedPrefixedSuffixedTextFields [ - "self parametrizedPrefixedSuffixedTextFields" - - ^ self parametrizedPrefixedSuffixedTextFieldsUsing: MerlinMorphicWizardRenderer new -] - -{ #category : #'basic examples' } -MerlinExamples class >> parametrizedPrefixedSuffixedTextFieldsUsing: aRenderer [ - "self parametrizedPrefixedSuffixedTextFields" - - | wizardControl wizardPane1 wizardPane2 firstTextFieldPart secondTextFieldPart | - wizardControl := WizardControl new. - wizardControl renderer: aRenderer. - wizardPane1 := WizardFirstPane new. - wizardPane2 := WizardLastPane new. - - firstTextFieldPart := TextFieldPart new - inGroupboxNamed: 'yop'; - textEntryContents: 'default text'; - prefix: 'Enter text here : '; - textFieldHorizontalSize: 100; - yourself. - - secondTextFieldPart := TextFieldPart new - inGroupboxNamed: 'Same text than previous textField'; - suffix: ' is what you entered before'; - textFieldHorizontalSize: 100; - defaultValue: [:inputs | (inputs at: #firstTextFieldValue) ]; - yourself. - - - wizardPane1 row: firstTextFieldPart associatedTo: #firstTextFieldValue. - wizardPane2 row: secondTextFieldPart associatedTo: #secondTextFieldValue requiring: {#firstTextFieldValue}. - - wizardControl - addPane: wizardPane1 ; - addPane: wizardPane2. - - wizardControl open. - - -] - -{ #category : #'basic examples' } -MerlinExamples class >> parametrizedTextEditorsUsing: aRenderer [ - "self parametrizedTextFields" - - | wizardControl wizardPane1 wizardPane2 firstTextFieldPart secondTextFieldPart | - wizardControl := WizardControl new. - wizardControl renderer: aRenderer. - wizardPane1 := WizardFirstPane new. - wizardPane2 := WizardLastPane new. - - firstTextFieldPart := TextEditorPart new - inGroupboxNamed: 'yop'; - defaultValue: 'default text'; - useLatePopulateContents: false; - yourself. - - secondTextFieldPart := TextEditorPart new - inGroupboxNamed: 'Same text than previous textEditor'; - defaultValue: [:inputs | (inputs at: #firstTextFieldValue) ]; - yourself. - - - wizardPane1 row: firstTextFieldPart associatedTo: #firstTextFieldValue. - wizardPane2 row: secondTextFieldPart associatedTo: #secondTextFieldValue requiring: {#firstTextFieldValue}. - - wizardControl - addPane: wizardPane1 ; - addPane: wizardPane2. - - wizardControl open. - - -] - -{ #category : #'basic morphic examples' } -MerlinExamples class >> parametrizedTextFields [ - "self parametrizedTextFields" - - ^ self parametrizedTextFieldsUsing: MerlinMorphicWizardRenderer new - -] - -{ #category : #'basic examples' } -MerlinExamples class >> parametrizedTextFieldsUsing: aRenderer [ - "self parametrizedTextFields" - - | wizardControl wizardPane1 wizardPane2 firstTextFieldPart secondTextFieldPart | - wizardControl := WizardControl new. - wizardControl renderer: aRenderer. - wizardPane1 := WizardFirstPane new. - wizardPane2 := WizardLastPane new. - - firstTextFieldPart := TextFieldPart new - inGroupboxNamed: 'yop'; - defaultValue: 'default'; - useLatePopulateContents: false; - yourself. - - secondTextFieldPart := TextFieldPart new - inGroupboxNamed: 'Same text than previous textField'; - defaultValue: [:inputs | (inputs at: #firstTextFieldValue) ]; - yourself. - - - wizardPane1 row: firstTextFieldPart associatedTo: #firstTextFieldValue. - wizardPane2 row: secondTextFieldPart associatedTo: #secondTextFieldValue requiring: {#firstTextFieldValue}. - - wizardControl - addPane: wizardPane1 ; - addPane: wizardPane2. - - wizardControl open. - - -] - -{ #category : #'basic morphic examples' } -MerlinExamples class >> radioButtonsPart [ - "self radioButtonsPart" - - ^ self radioButtonsPartUsing: MerlinMorphicWizardRenderer new - -] - -{ #category : #'basic examples' } -MerlinExamples class >> radioButtonsPartUsing: aRenderer [ - "self radioButtonsPart" - - | wizardControl wizardPane1 wizardPane2 radioButtonsPart textPart | - wizardControl := WizardControl new. - wizardControl renderer: aRenderer. - wizardPane1 := WizardFirstPane new. - wizardPane2 := WizardLastPane new. - - radioButtonsPart := RadioButtonsPart new - options: {#a. #b. #c}; - yourself. - - textPart := TextPart new - defaultValue: [:requiredInputs | - requiredInputs at: #optionSelected - ]; - yourself. - - wizardPane1 row: radioButtonsPart associatedTo: #optionSelected. - wizardPane2 row: textPart requiring: {#optionSelected}. - - wizardControl - addPane: wizardPane1; - addPane: wizardPane2. - - wizardControl open. - - -] - -{ #category : #'basic examples' } -MerlinExamples class >> textEditorUsing: aMerlinRenderer [ - "self itemsSelectorPart" - - | wizardControl wizardPane1 wizardPane2 textEditorPart | - wizardControl := WizardControl new. - wizardControl renderer: aMerlinRenderer. - wizardPane1 := WizardSinglePane new. - - textEditorPart := TextEditorPart new - defaultValue: 'type some text'; - yourself. - - - wizardPane1 row: textEditorPart. - - wizardControl - addPane: wizardPane1. - - wizardControl open. - - -] - -{ #category : #'basic morphic examples' } -MerlinExamples class >> usingCallbackAndRefresh [ - "self usingCallbackAndRefresh" - - ^ self usingCallbackAndRefreshUsing: MerlinMorphicWizardRenderer new -] - -{ #category : #'basic morphic examples' } -MerlinExamples class >> usingCallbackAndRefreshAndBlockAsDefaultValue [ - "self usingCallbackAndRefreshAndBlockAsDefaultValue" - - ^ self usingCallbackAndRefreshAndBlockAsDefaultValueUsing: MerlinMorphicWizardRenderer new - -] - -{ #category : #'basic examples' } -MerlinExamples class >> usingCallbackAndRefreshAndBlockAsDefaultValueUsing: aRenderer [ - "self usingCallbackAndRefreshAndBlockAsDefaultValue" - - | wizardControl wizardPane1 firstDropListPartPart secondDropListPart | - wizardControl := WizardControl new. - wizardControl renderer: aRenderer. - wizardPane1 := WizardSinglePane new. - - firstDropListPartPart := DropListPart new - inGroupboxNamed: 'Select number of dropLists you want'; - list: #(1 2 3 4); - defaultValue: 1; - callback: [:outputValue | - wizardPane1 removeAllParts. - wizardPane1 row: firstDropListPartPart associatedTo: #firstDropListValue. - 1 to: outputValue do: [:index | - wizardPane1 row: (DropListPart new list: #(1 2 3 4); defaultValue: [:requiredInputs | requiredInputs at: #firstDropListValue] ; inGroupboxNamed: index asString ; yourself) associatedTo: #doesntMatter requiring: {#firstDropListValue}. - ]. - wizardPane1 refresh. - ]; - yourself. - - wizardPane1 row: firstDropListPartPart associatedTo: #firstDropListValue. - - wizardControl - addPane: wizardPane1. - - wizardControl open. - - -] - -{ #category : #'basic examples' } -MerlinExamples class >> usingCallbackAndRefreshUsing: aRenderer [ - "self usingCallbackAndRefresh" - - | wizardControl wizardPane1 firstDropListPartPart secondDropListPart | - wizardControl := WizardControl new. - wizardControl renderer: aRenderer. - wizardPane1 := WizardSinglePane new. - - firstDropListPartPart := DropListPart new - inGroupboxNamed: 'Select number of dropLists you want'; - list: #(1 2 3 4); - defaultValue: 1; - callback: [:outputValue | - wizardPane1 removeAllParts. - wizardPane1 row: firstDropListPartPart. - 1 to: outputValue do: [:index | - wizardPane1 row: (DropListPart new list: #('hey' 'ho'); defaultValue: 1 ; inGroupboxNamed: index asString ; yourself). - ]. - wizardPane1 refresh. - ]; - yourself. - - wizardPane1 row: firstDropListPartPart associatedTo: #firstDropListValue. - - wizardControl - addPane: wizardPane1. - - wizardControl open. - - -] - -{ #category : #'basic morphic examples' } -MerlinExamples class >> usingCallbackOnCheckBox [ - "self usingCallbackOnCheckBox" - - ^ self usingCallbackOnCheckBoxUsing: MerlinMorphicWizardRenderer new - - -] - -{ #category : #'basic examples' } -MerlinExamples class >> usingCallbackOnCheckBoxUsing: aRenderer [ - "self usingCallbackOnCheckBox" - - | wizardControl wizardPane1 firstDropCheckboxPart secondCheckboxPart | - wizardControl := WizardControl new. - wizardControl renderer: aRenderer. - wizardPane1 := WizardSinglePane new. - - secondCheckboxPart := CheckboxPart new - inGroupboxNamed: 'Same selection than checkbox on top'; - label: 'is selected according the checkbox on top' - yourself. - - firstDropCheckboxPart := CheckboxPart new - inGroupboxNamed: 'Select or unselect'; - defaultValue: true; - label: 'will select the checkbox below'; - callback: [:outputValue | secondCheckboxPart selected: outputValue. ]; - yourself. - - - - - wizardPane1 row: firstDropCheckboxPart associatedTo: #firstCheckboxValue. - wizardPane1 row: secondCheckboxPart associatedTo: #secondCheckValue. - - wizardControl - addPane: wizardPane1. - - wizardControl open. - - -] - -{ #category : #'basic morphic examples' } -MerlinExamples class >> usingCallbackOnDropList [ - "self usingCallbackOnDropList" - - ^ self usingCallbackOnDropListUsing: MerlinMorphicWizardRenderer new -] - -{ #category : #'basic examples' } -MerlinExamples class >> usingCallbackOnDropListUsing: aRenderer [ - "self usingCallbackOnDropList" - - | wizardControl wizardPane1 firstDropListPartPart secondDropListPart | - wizardControl := WizardControl new. - wizardControl renderer: aRenderer. - wizardPane1 := WizardSinglePane new. - - firstDropListPartPart := DropListPart new - inGroupboxNamed: 'Select an item'; - list: #('un' 'deux' 'trois' 'quatre'); - defaultValue: 'trois'; - callback: [:outputValue :part| - secondDropListPart selectionIndex: (secondDropListPart list indexOf: outputValue). - part wizardPane refresh. - ]; - yourself. - - secondDropListPart := DropListPart new - inGroupboxNamed: 'Same selection than dropList on top'; - list: #('un' 'deux' 'trois' 'quatre'); - yourself. - - - wizardPane1 row: firstDropListPartPart associatedTo: #firstDropListValue. - wizardPane1 row: secondDropListPart associatedTo: #secondDropListValue. - - wizardControl - addPane: wizardPane1. - - wizardControl open. - - -] - -{ #category : #'basic morphic examples' } -MerlinExamples class >> usingRowsAndColumns [ - "self usingRowsAndColumns" - - ^ self usingRowsAndColumnsUsing: MerlinMorphicWizardRenderer new - -] - -{ #category : #'basic examples' } -MerlinExamples class >> usingRowsAndColumnsUsing: aRenderer [ - "self usingRowsAndColumns" - - | wizardControl wizardPane1 wizardPane2 | - wizardControl := WizardControl new. - wizardControl renderer: aRenderer. - wizardPane1 := WizardFirstPane new. - wizardPane2 := WizardLastPane new. - - wizardPane1 - row: [:r | - r column: (TextFieldPart inGroupboxNamed: 'On my right: a DropList') ; column: (DropListPart new list: #(1 2 3 4 5); inGroupboxNamed: 'on my left: a textField') - ]; - row: (TextPart new - text: 'I should be alone in the second row'; - inGroupboxNamed: 'yep'; - yourself - ). - - wizardPane2 - column: (TextPart new text: 'I should be alone in the first column'; - inGroupboxNamed: 'yep'; - yourself); - column: [:r | - r row: (TextFieldPart inGroupboxNamed: 'Below me: a DropList') ; row: (DropListPart new list: #(1 2 3 4 5); inGroupboxNamed: 'On top of me: a textField') - ]. - - wizardControl - addPane: wizardPane1 ; - addPane: wizardPane2. - - wizardControl open. - - -] diff --git a/src-archive/Merlin/MerlinItemsSelectorWidget.class.st b/src-archive/Merlin/MerlinItemsSelectorWidget.class.st deleted file mode 100644 index 23fb9cf44..000000000 --- a/src-archive/Merlin/MerlinItemsSelectorWidget.class.st +++ /dev/null @@ -1,249 +0,0 @@ -Class { - #name : #MerlinItemsSelectorWidget, - #superclass : #MerlinMorphPartWidget, - #instVars : [ - 'initialListMorph', - 'addButtonMorph', - 'removeButtonMorph', - 'selectionListMorph', - 'widgetMorph', - 'textFieldMorph', - 'validateButtonMorph' - ], - #category : #'Merlin-Rendering' -} - -{ #category : #'accessing - morphs' } -MerlinItemsSelectorWidget >> addButtonMorph [ - "return the button that will be used to add a package from the packagesList to the selectionList. While no item is selected in the packagesList, this button is disable " - - ^ addButtonMorph ifNil: [ - addButtonMorph := (PluggableButtonMorph - on: self getState: nil action: #updateWhenAddingItem) - label: '>>>'; - disable; - yourself - ] -] - -{ #category : #actions } -MerlinItemsSelectorWidget >> checkForEnablingAddRemoveButtons [ - - self wizardPart initialList isEmpty ifTrue: [self addButtonMorph disable]. - self wizardPart selectionList isEmpty ifTrue: [self removeButtonMorph disable] -] - -{ #category : #'control - initial list ' } -MerlinItemsSelectorWidget >> initialList [ - - ^ self wizardPart initialList. -] - -{ #category : #'control - initial list ' } -MerlinItemsSelectorWidget >> initialListIndex [ - - ^ self wizardPart initialListIndex. -] - -{ #category : #'control - initial list ' } -MerlinItemsSelectorWidget >> initialListIndex: anInteger [ - - anInteger > 0 - ifTrue: [ - self addButtonMorph enable. - self selectionListIndex: 0. - ] - ifFalse: [ - self addButtonMorph disable. - ]. - - self wizardPart initialListIndex: anInteger. - self widgetStateChanged -] - -{ #category : #'accessing - morphs' } -MerlinItemsSelectorWidget >> initialListMorph [ - - "return a new list (PluggableListMorph) that will contain the initial list of items that can be selected by the user" - ^ initialListMorph ifNil: [ - initialListMorph := (self newListFor: self list: #initialList selected: #initialListIndex changeSelected: #initialListIndex: ) - minWidth: 250; - minHeight: 350; yourself - ] -] - -{ #category : #'accessing - morphs' } -MerlinItemsSelectorWidget >> initializeWidgetMorphWithMessage: aString [ - - widgetMorph := - self newColumnWith:{ - self newRowWith: { - ((self newGroupBoxNamed: 'Initial list' translated - with: self initialListMorph)). - (self newColumnWith: { - (self newRowWith: { }). - (self newRowWith: { }). - (self newRowWith: { }). - (self addButtonMorph). - (self newRowWith: { }). - (self removeButtonMorph) - }). - (self newColumnWith: { - (self - newGroupBoxNamed: 'Selection' translated - with: self selectionListMorph ) - }) - }. - self smalltalkExpressionSelectorMorphNamed: aString . - } - - -] - -{ #category : #'accessing - morphs' } -MerlinItemsSelectorWidget >> removeButtonMorph [ - "return the button that will be used to remove a package from the selectionList to the packagesList. While no item is selected in the selectionList, this button is disable " - - ^ removeButtonMorph ifNil: [ - removeButtonMorph := (PluggableButtonMorph - on: self getState: nil action: #updateWhenRemovingItem) - label: '<<<'; - disable; - yourself - ] -] - -{ #category : #'control - selection list' } -MerlinItemsSelectorWidget >> selectionList [ - - ^ self wizardPart selectionList -] - -{ #category : #'control - selection list' } -MerlinItemsSelectorWidget >> selectionListIndex [ - - ^ self wizardPart selectionListIndex -] - -{ #category : #'control - selection list' } -MerlinItemsSelectorWidget >> selectionListIndex: anInteger [ - - anInteger > 0 - ifTrue: [ - self removeButtonMorph enable. - self initialListIndex: 0. - ] - ifFalse: [ - self removeButtonMorph disable - ]. - self wizardPart selectionListIndex: anInteger. - self widgetStateChanged -] - -{ #category : #'accessing - morphs' } -MerlinItemsSelectorWidget >> selectionListMorph [ - "return a new list (PluggableListMorph) that will contain all the packages selected by the user" - ^selectionListMorph ifNil: [ - selectionListMorph := ( self newListFor: self - list: #selectionList - selected: #selectionListIndex - changeSelected: #selectionListIndex:) - minWidth: 250; - minHeight: 350; - yourself] -] - -{ #category : #'accessing - morphs' } -MerlinItemsSelectorWidget >> smalltalkExpressionSelectorMorphNamed: aString [ - - ^ self newRowWith: { - self newGroupBoxNamed: aString with: - (self newRowWith: { - ((self newLabel: 'select: [ :each |') disable). - (self textFieldMorph setText: '''*'' match: each '; yourself). - ((self newLabel: ']') disable). - (self validateButtonMorph)}). - (self newColumnWith: { }). - (self newColumnWith: { }) - } -] - -{ #category : #rendering } -MerlinItemsSelectorWidget >> specificMorphContents [ - - ^ self widgetMorph -] - -{ #category : #'accessing - morphs' } -MerlinItemsSelectorWidget >> textFieldMorph [ - - ^ textFieldMorph ifNil: [ - textFieldMorph := self newTextEntryFor: self wizardPart getText: #textEntryContents setText: #textEntryContents:. - ] -] - -{ #category : #actions } -MerlinItemsSelectorWidget >> updateWhenAddingItem [ - - self wizardPart initialList isEmpty - ifTrue: [ self addButtonMorph disable ]. - self wizardPart updateWhenAddingItem. - self checkForEnablingAddRemoveButtons. - self widgetStateChanged. -] - -{ #category : #actions } -MerlinItemsSelectorWidget >> updateWhenRemovingItem [ - - self wizardPart selectionList isEmpty ifTrue: [self removeButtonMorph disable]. - self wizardPart updateWhenRemovingItem. - self checkForEnablingAddRemoveButtons. - self widgetStateChanged. - - -] - -{ #category : #actions } -MerlinItemsSelectorWidget >> validateButtonAction [ - - self textFieldMorph acceptTextInModel. - [self wizardPart validateButtonAction] on: Error do: [ - self wizardPart textEntryMessage: 'Select items with a Smalltalk condition - INVALID EXPRESSION'. - self wizardPart wizardPane renderer refresh. - ^ self. - ]. - self wizardPart textEntryMessage: 'Select items with a Smalltalk condition'. - self wizardPart wizardPane renderer refresh. - self checkForEnablingAddRemoveButtons. - self widgetStateChanged -] - -{ #category : #'accessing - morphs' } -MerlinItemsSelectorWidget >> validateButtonMorph [ - "return a button opening the context frame when clicked" - - ^ validateButtonMorph ifNil: [ - validateButtonMorph := (PluggableButtonMorph - on: self getState: nil action: #validateButtonAction) - label: 'Validate'; - enable; - yourself - ] -] - -{ #category : #'accessing - morphs' } -MerlinItemsSelectorWidget >> widgetMorph [ - - ^ widgetMorph ifNil:[ - self initializeWidgetMorphWithMessage: self wizardPart textEntryMessage. - widgetMorph - ] -] - -{ #category : #actions } -MerlinItemsSelectorWidget >> widgetStateChanged [ - self changed: #initialList. - self changed: #selectionList. - self changed: #initialListIndex. - self changed: #selectionListIndex -] diff --git a/src-archive/Merlin/MerlinMorphButtonWidget.class.st b/src-archive/Merlin/MerlinMorphButtonWidget.class.st deleted file mode 100644 index 747cd99a9..000000000 --- a/src-archive/Merlin/MerlinMorphButtonWidget.class.st +++ /dev/null @@ -1,22 +0,0 @@ -Class { - #name : #MerlinMorphButtonWidget, - #superclass : #MerlinMorphPartWidget, - #instVars : [ - 'buttonMorph' - ], - #category : #'Merlin-Rendering' -} - -{ #category : #'accessing - morph contents' } -MerlinMorphButtonWidget >> buttonMorph [ - - ^ buttonMorph ifNil: [buttonMorph := self newButtonOn: self wizardPart named: self wizardPart label withAction: #hasChanged.] - -] - -{ #category : #'accessing - morph contents' } -MerlinMorphButtonWidget >> specificMorphContents [ - - ^ self buttonMorph enabled: self wizardPart buttonEnabled; yourself - . -] diff --git a/src-archive/Merlin/MerlinMorphCellWidget.class.st b/src-archive/Merlin/MerlinMorphCellWidget.class.st deleted file mode 100644 index d0325bc3e..000000000 --- a/src-archive/Merlin/MerlinMorphCellWidget.class.st +++ /dev/null @@ -1,35 +0,0 @@ -Class { - #name : #MerlinMorphCellWidget, - #superclass : #MerlinMorphWidget, - #instVars : [ - 'wizardCell' - ], - #category : #'Merlin-Rendering' -} - -{ #category : #'accessing - morph contents' } -MerlinMorphCellWidget >> morphContents [ - self wizardCell groupBoxName - ifNotNil: - [ :aString | ^ self newGroupBoxNamed: aString with: self specificMorphContents ] - ifNil: [ ^ self specificMorphContents ] -] - -{ #category : #'accessing - morph contents' } -MerlinMorphCellWidget >> specificMorphContents [ - - "each subclass should implement this method to return its morph contents. This is the hook used by the abstract class to generically iniatilzed some shared parameters" - ^ self subclassResponsability -] - -{ #category : #accessing } -MerlinMorphCellWidget >> wizardCell [ - - ^ wizardCell -] - -{ #category : #accessing } -MerlinMorphCellWidget >> wizardCell: aPaneLine [ - - wizardCell := aPaneLine -] diff --git a/src-archive/Merlin/MerlinMorphCheckboxWidget.class.st b/src-archive/Merlin/MerlinMorphCheckboxWidget.class.st deleted file mode 100644 index f28d17703..000000000 --- a/src-archive/Merlin/MerlinMorphCheckboxWidget.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #MerlinMorphCheckboxWidget, - #superclass : #MerlinMorphPartWidget, - #instVars : [ - 'checkboxMorph' - ], - #category : #'Merlin-Rendering' -} - -{ #category : #'accessing - morph contents' } -MerlinMorphCheckboxWidget >> checkboxMorph [ - - ^ checkboxMorph ifNil: [ - checkboxMorph := (self newCheckboxFor: (self wizardPart) - getSelected: #contents - setSelected: #contents: - label: (self wizardPart label)). - ] -] - -{ #category : #'accessing - morph contents' } -MerlinMorphCheckboxWidget >> specificMorphContents [ - - ^ self newRowWith: { self checkboxMorph } -] diff --git a/src-archive/Merlin/MerlinMorphChooseFileWidget.class.st b/src-archive/Merlin/MerlinMorphChooseFileWidget.class.st deleted file mode 100644 index f3d34425b..000000000 --- a/src-archive/Merlin/MerlinMorphChooseFileWidget.class.st +++ /dev/null @@ -1,56 +0,0 @@ -Class { - #name : #MerlinMorphChooseFileWidget, - #superclass : #MerlinMorphPartWidget, - #instVars : [ - 'fileDialog' - ], - #category : #'Merlin-Rendering' -} - -{ #category : #accessing } -MerlinMorphChooseFileWidget >> fileDialog [ - - ^ fileDialog ifNil: [ fileDialog := self newFileDialogNamed: self wizardPart selectedPathName ] -] - -{ #category : #accessing } -MerlinMorphChooseFileWidget >> fileDialog: aFileDialog [ - - fileDialog := aFileDialog -] - -{ #category : #'accessing - wizard management' } -MerlinMorphChooseFileWidget >> populateWizardPartOutput [ - - self wizardPart outputValue: self fileDialog selectedPathName -] - -{ #category : #'accessing - morph contents' } -MerlinMorphChooseFileWidget >> setDefaultSelectedPath [ - - self wizardPart selectedPathName ifNotNil: [ - self fileDialog selectPathName: self wizardPart selectedPathName asFileReference parent fullName ] - -] - -{ #category : #'accessing - morph contents' } -MerlinMorphChooseFileWidget >> setValidExtensions [ - - self wizardPart validExtensions ifNotNil: [ - self fileDialog validExtensions: self wizardPart validExtensions - ]. - -] - -{ #category : #'accessing - morph contents' } -MerlinMorphChooseFileWidget >> specificMorphContents [ - - |tmpMorph| - tmpMorph := self fileDialog newContentMorph. - self setValidExtensions. - self setDefaultSelectedPath. - ^ tmpMorph - - - -] diff --git a/src-archive/Merlin/MerlinMorphColumnWidget.class.st b/src-archive/Merlin/MerlinMorphColumnWidget.class.st deleted file mode 100644 index c1fb83187..000000000 --- a/src-archive/Merlin/MerlinMorphColumnWidget.class.st +++ /dev/null @@ -1,11 +0,0 @@ -Class { - #name : #MerlinMorphColumnWidget, - #superclass : #MerlinMorphCellWidget, - #category : #'Merlin-Rendering' -} - -{ #category : #'accessing - morph contents' } -MerlinMorphColumnWidget >> specificMorphContents [ - - ^ self newColumnWith: (self wizardCell subComponents collect: [:aPaneLineOrAWizardPart | aPaneLineOrAWizardPart merlinRendering morphContents]). -] diff --git a/src-archive/Merlin/MerlinMorphDirectoryChooseWidget.class.st b/src-archive/Merlin/MerlinMorphDirectoryChooseWidget.class.st deleted file mode 100644 index dc37148f5..000000000 --- a/src-archive/Merlin/MerlinMorphDirectoryChooseWidget.class.st +++ /dev/null @@ -1,17 +0,0 @@ -Class { - #name : #MerlinMorphDirectoryChooseWidget, - #superclass : #MerlinMorphChooseFileWidget, - #category : #'Merlin-Rendering' -} - -{ #category : #accessing } -MerlinMorphDirectoryChooseWidget >> fileDialog [ - - ^ fileDialog ifNil: [fileDialog := ((self newDirectoryDialogNamed: self wizardPart selectedPathName)).] -] - -{ #category : #'accessing - wizard management' } -MerlinMorphDirectoryChooseWidget >> populateWizardPartOutput [ - - self wizardPart outputValue: self fileDialog selectedAnyFileDirectory -] diff --git a/src-archive/Merlin/MerlinMorphDroplListWidget.class.st b/src-archive/Merlin/MerlinMorphDroplListWidget.class.st deleted file mode 100644 index 384870f3e..000000000 --- a/src-archive/Merlin/MerlinMorphDroplListWidget.class.st +++ /dev/null @@ -1,38 +0,0 @@ -Class { - #name : #MerlinMorphDroplListWidget, - #superclass : #MerlinMorphPartWidget, - #instVars : [ - 'dropList', - 'formatDictionary' - ], - #category : #'Merlin-Rendering' -} - -{ #category : #'accessing - morph contents' } -MerlinMorphDroplListWidget >> dropList [ - - ^ dropList ifNil: [dropList := self newDropListOn: self wizardPart list: #formatedList ] -] - -{ #category : #accessing } -MerlinMorphDroplListWidget >> formatDictionary [ - - ^ formatDictionary ifNil: [formatDictionary := IdentityDictionary new] -] - -{ #category : #'accessing - morph contents' } -MerlinMorphDroplListWidget >> setMorphSize [ - self wizardPart horizontalSize - ifNotNil: [ - self dropList - hResizing: #rigid; - vResizing: #shrinkWrap; - width: self wizardPart horizontalSize ] -] - -{ #category : #'accessing - morph contents' } -MerlinMorphDroplListWidget >> specificMorphContents [ - - self setMorphSize. - ^ self dropList -] diff --git a/src-archive/Merlin/MerlinMorphListWidget.class.st b/src-archive/Merlin/MerlinMorphListWidget.class.st deleted file mode 100644 index da9033a66..000000000 --- a/src-archive/Merlin/MerlinMorphListWidget.class.st +++ /dev/null @@ -1,29 +0,0 @@ -Class { - #name : #MerlinMorphListWidget, - #superclass : #MerlinMorphPartWidget, - #instVars : [ - 'list', - 'listMorph' - ], - #category : #'Merlin-Rendering' -} - -{ #category : #'accessing - morph contents' } -MerlinMorphListWidget >> listMorph [ - - ^ listMorph ifNil: [listMorph := self newNormalListFor: self wizardPart list: #list selected: #selectionIndex changeSelected: #selectionIndex:] -] - -{ #category : #'accessing - morph contents' } -MerlinMorphListWidget >> setMorphSize [ - self wizardPart horizontalSize ifNotNil: [ self listMorph minWidth: self wizardPart horizontalSize ]. - self wizardPart verticalSize ifNotNil: [ self listMorph minHeight: self wizardPart verticalSize ] -] - -{ #category : #'accessing - morph contents' } -MerlinMorphListWidget >> specificMorphContents [ - - self setMorphSize. - ^ self listMorph - -] diff --git a/src-archive/Merlin/MerlinMorphMorphDroplListWidget.class.st b/src-archive/Merlin/MerlinMorphMorphDroplListWidget.class.st deleted file mode 100644 index ca7dfc5ef..000000000 --- a/src-archive/Merlin/MerlinMorphMorphDroplListWidget.class.st +++ /dev/null @@ -1,11 +0,0 @@ -Class { - #name : #MerlinMorphMorphDroplListWidget, - #superclass : #MerlinMorphDroplListWidget, - #category : #'Merlin-Rendering' -} - -{ #category : #'accessing - morph contents' } -MerlinMorphMorphDroplListWidget >> dropList [ - - ^ self newMorphDropListOn: self wizardPart -] diff --git a/src-archive/Merlin/MerlinMorphMultiCheckboxesWidget.class.st b/src-archive/Merlin/MerlinMorphMultiCheckboxesWidget.class.st deleted file mode 100644 index 507be7397..000000000 --- a/src-archive/Merlin/MerlinMorphMultiCheckboxesWidget.class.st +++ /dev/null @@ -1,80 +0,0 @@ -Class { - #name : #MerlinMorphMultiCheckboxesWidget, - #superclass : #MerlinMorphPartWidget, - #instVars : [ - 'allCheckboxes' - ], - #category : #'Merlin-Rendering' -} - -{ #category : #private } -MerlinMorphMultiCheckboxesWidget >> addVerticalSeparatorAtTheMiddleOf: aCollectionOfElements [ - - "return a collection containing all initials morph elements from aCollectionOfElements including a vertical separator at the middle" - | index result result1 result2 collectionSize | - collectionSize := aCollectionOfElements size. - collectionSize even - ifTrue: [index := collectionSize // 2.] - ifFalse: [index := collectionSize // 2 + 1.]. - - result := OrderedCollection new. - result1 := OrderedCollection new. - result2 := OrderedCollection new. - 1 to: (index ) do: [:i | result1 add: (self newRowWith: {(aCollectionOfElements at: i)})]. - (index + 1) to: aCollectionOfElements size do: [:i | result2 add: (self newRowWith: {(aCollectionOfElements at: i)})]. - - result2 isEmpty - ifFalse: [ - result add: (self newColumnWith: result1 ); add: (self newVerticalSeparator) ; add: (self newColumnWith: result2 ). - ] - ifTrue: [ - result add: (self newColumnWith: result1 ). - ]. - ^ result. -] - -{ #category : #'accessing - morph contents' } -MerlinMorphMultiCheckboxesWidget >> allCheckboxes [ - - ^ allCheckboxes ifNil: [ - self computeAllCheckboxes. - allCheckboxes - ] -] - -{ #category : #'accessing - morph contents' } -MerlinMorphMultiCheckboxesWidget >> allCheckboxes: aCollectionOfMorphCheckboxes [ - - allCheckboxes := aCollectionOfMorphCheckboxes -] - -{ #category : #'accessing - morph contents' } -MerlinMorphMultiCheckboxesWidget >> computeAllCheckboxes [ - - self allCheckboxes: (self wizardPart options collect: [:aLabel | - (self newCheckboxFor: (self wizardPart modelOfOption: aLabel ) - getSelected: #contents - setSelected: #contents: - label: (self wizardPart formatBlock meValue: aLabel)). - ]). -] - -{ #category : #'accessing - morph contents' } -MerlinMorphMultiCheckboxesWidget >> setActionToCheckboxes [ - - "initialize the action to do when clicking on a checkbox" - self allCheckboxes do: [ :each | - each buttonMorph target: self wizardPart actionModel. - self wizardPart actionSelector ifNotNil: [each actionSelector: self wizardPart actionSelector]. - self wizardPart actionArguments ifNotNil: [each actionArguments: self wizardPart actionArguments]. - ]. -] - -{ #category : #'accessing - morph contents' } -MerlinMorphMultiCheckboxesWidget >> specificMorphContents [ - - |tmpMorphs| - "self setActionToCheckboxes." - tmpMorphs := self addVerticalSeparatorAtTheMiddleOf: self allCheckboxes. - ^ self newRowWith: tmpMorphs -] diff --git a/src-archive/Merlin/MerlinMorphMultiPartsWidget.class.st b/src-archive/Merlin/MerlinMorphMultiPartsWidget.class.st deleted file mode 100644 index 0b24844f3..000000000 --- a/src-archive/Merlin/MerlinMorphMultiPartsWidget.class.st +++ /dev/null @@ -1,51 +0,0 @@ -Class { - #name : #MerlinMorphMultiPartsWidget, - #superclass : #MerlinMorphPartWidget, - #instVars : [ - 'tabGroup', - 'partsMerlinWidgets' - ], - #category : #'Merlin-Rendering' -} - -{ #category : #'accessing - wizard management' } -MerlinMorphMultiPartsWidget >> populateWizardPartOutput [ - - "we first pay attention to populate output of each sub-part" - self subpartsMerlinWidgets do: [:aMerlinMorphWidget | - aMerlinMorphWidget populateWizardPartOutput. - ]. - self wizardPart selectedPageIndex: self tabGroup selectedPageIndex. - self wizardPart outputValue: self selectedPart outputValue -] - -{ #category : #'accessing - wizard management' } -MerlinMorphMultiPartsWidget >> selectedPart [ - - ^ (self wizardPart titlesAndParts at: self tabGroup selectedPageIndex) value. - - -] - -{ #category : #'accessing - morph contents' } -MerlinMorphMultiPartsWidget >> specificMorphContents [ - - self tabGroup selectedPageIndex: self wizardPart selectedPageIndex. - ^ self tabGroup -] - -{ #category : #'accessing - morph contents' } -MerlinMorphMultiPartsWidget >> subpartsMerlinWidgets [ - - ^ partsMerlinWidgets ifNil: [partsMerlinWidgets := OrderedCollection new] -] - -{ #category : #'accessing - morph contents' } -MerlinMorphMultiPartsWidget >> tabGroup [ - - ^ tabGroup ifNil: [ - tabGroup := self newTabGroupBoxFor: (self wizardPart titlesAndParts collect: [:anAssoc | - anAssoc key -> (self subpartsMerlinWidgets add: anAssoc value merlinRendering) morphContents - ]) - ]. -] diff --git a/src-archive/Merlin/MerlinMorphPartWidget.class.st b/src-archive/Merlin/MerlinMorphPartWidget.class.st deleted file mode 100644 index a9f4233f8..000000000 --- a/src-archive/Merlin/MerlinMorphPartWidget.class.st +++ /dev/null @@ -1,60 +0,0 @@ -Class { - #name : #MerlinMorphPartWidget, - #superclass : #MerlinMorphWidget, - #instVars : [ - 'wizardPart', - 'defaultValue' - ], - #category : #'Merlin-Rendering' -} - -{ #category : #accessing } -MerlinMorphPartWidget >> defaultValue [ - - ^ defaultValue -] - -{ #category : #accessing } -MerlinMorphPartWidget >> defaultValue: anObject [ - - defaultValue := anObject -] - -{ #category : #'accessing - morph contents' } -MerlinMorphPartWidget >> morphContents [ - self - defaultValue: (self wizardPart defaultValue meValue: self wizardPart requiredInputs). - self wizardPart groupBoxName - ifNotNil: - [ :aString | ^ self newGroupBoxNamed: aString with: self specificMorphContents ] - ifNil: [ ^ self specificMorphContents ] -] - -{ #category : #'accessing - wizard management' } -MerlinMorphPartWidget >> populateWizardPartOutput [ - - "a subclass could implement this method to set the value entered by the user to the corresponding wizardPart output. It can be usefull if a wizard does not totally contain the model of the morph displayed. In this case, the wizard part should be updated at least each time we jump to a new window" - -] - -{ #category : #'accessing - morph contents' } -MerlinMorphPartWidget >> specificMorphContents [ - - "each subclass should implement this method to return its morph contents. This is the hook used by the abstract class to generically iniatilzed some shared parameters" - ^ self subclassResponsability -] - -{ #category : #accessing } -MerlinMorphPartWidget >> wizardPart [ - - ^ wizardPart -] - -{ #category : #accessing } -MerlinMorphPartWidget >> wizardPart: aWizardPart [ - - "We want to keep a hook to act when the next button (or the terminate button) of a pane is pressed. Looks a bit hacky but usefull. By default we just execute the 'populateWizardPartOutput' method, but you can reuse this hook in any other place of this MerlinMorphPartWidget" - aWizardPart wizardPane renderer whenNextIsPressedDo: [self populateWizardPartOutput]. - aWizardPart wizardPane renderer whenTerminateIsPressedDo: [self populateWizardPartOutput]. - wizardPart := aWizardPart -] diff --git a/src-archive/Merlin/MerlinMorphRadioButtonsWidget.class.st b/src-archive/Merlin/MerlinMorphRadioButtonsWidget.class.st deleted file mode 100644 index e389dc618..000000000 --- a/src-archive/Merlin/MerlinMorphRadioButtonsWidget.class.st +++ /dev/null @@ -1,38 +0,0 @@ -Class { - #name : #MerlinMorphRadioButtonsWidget, - #superclass : #MerlinMorphPartWidget, - #instVars : [ - 'radioButtons', - 'labelsAndModels' - ], - #category : #'Merlin-Rendering' -} - -{ #category : #'accessing - morph' } -MerlinMorphRadioButtonsWidget >> initializeRadioButtons [ - - radioButtons := - self wizardPart options collect: [:aSymbol | - |radioButton| - radioButton := (self newRadionButtonFor: (self wizardPart modelOfOption: aSymbol) getSelected: #contents setSelected: #contents: label: (self wizardPart formatBlock meValue: aSymbol)). - radioButton - ]. - - ^ radioButtons - -] - -{ #category : #'accessing - morph' } -MerlinMorphRadioButtonsWidget >> radioButtons [ - - ^ radioButtons ifNil: [ - self initializeRadioButtons. - ] -] - -{ #category : #rendering } -MerlinMorphRadioButtonsWidget >> specificMorphContents [ - - ^ self newColumnWith: self radioButtons - -] diff --git a/src-archive/Merlin/MerlinMorphRowWidget.class.st b/src-archive/Merlin/MerlinMorphRowWidget.class.st deleted file mode 100644 index c03a03b9d..000000000 --- a/src-archive/Merlin/MerlinMorphRowWidget.class.st +++ /dev/null @@ -1,11 +0,0 @@ -Class { - #name : #MerlinMorphRowWidget, - #superclass : #MerlinMorphCellWidget, - #category : #'Merlin-Rendering' -} - -{ #category : #'accessing - morph contents' } -MerlinMorphRowWidget >> specificMorphContents [ - - ^ self newRowWith: (self wizardCell subComponents collect: [:aPaneLineOrAWizardPart | aPaneLineOrAWizardPart merlinRendering morphContents]). -] diff --git a/src-archive/Merlin/MerlinMorphSaveChooseFileWidget.class.st b/src-archive/Merlin/MerlinMorphSaveChooseFileWidget.class.st deleted file mode 100644 index 4f3a6f0a9..000000000 --- a/src-archive/Merlin/MerlinMorphSaveChooseFileWidget.class.st +++ /dev/null @@ -1,17 +0,0 @@ -Class { - #name : #MerlinMorphSaveChooseFileWidget, - #superclass : #MerlinMorphChooseFileWidget, - #category : #'Merlin-Rendering' -} - -{ #category : #accessing } -MerlinMorphSaveChooseFileWidget >> fileDialog [ - - ^ fileDialog ifNil: [fileDialog := ((self newSaveFileDialogNamed: self wizardPart selectedPathName)).] -] - -{ #category : #'accessing - wizard management' } -MerlinMorphSaveChooseFileWidget >> populateWizardPartOutput [ - - self wizardPart outputValue: self fileDialog saveSelectedFile -] diff --git a/src-archive/Merlin/MerlinMorphTextEditorWidget.class.st b/src-archive/Merlin/MerlinMorphTextEditorWidget.class.st deleted file mode 100644 index b7c7e2928..000000000 --- a/src-archive/Merlin/MerlinMorphTextEditorWidget.class.st +++ /dev/null @@ -1,56 +0,0 @@ -Class { - #name : #MerlinMorphTextEditorWidget, - #superclass : #MerlinMorphPartWidget, - #instVars : [ - 'textEditor' - ], - #category : #'Merlin-Rendering' -} - -{ #category : #'accessing - wizard management' } -MerlinMorphTextEditorWidget >> populateWizardPartOutput [ - - self wizardPart outputValue: ((ObjectStringConverter forClass: String) stringAsObject: textEditor textMorph asText asString ).. - -] - -{ #category : #'accessing - morph contents' } -MerlinMorphTextEditorWidget >> setMorphContents [ - - self wizardPart textEditorContents ifNotNil: [ - - ] -] - -{ #category : #'accessing - morph contents' } -MerlinMorphTextEditorWidget >> setMorphSize [ - self wizardPart horizontalSize - ifNotNil: [ - self textEditor - hResizing: #rigid; - width: self wizardPart horizontalSize ]. - self wizardPart verticalSize - ifNotNil: [ - self textEditor - vResizing: #rigid; - height: self wizardPart verticalSize ] -] - -{ #category : #'accessing - morph contents' } -MerlinMorphTextEditorWidget >> specificMorphContents [ - - self setMorphSize. - self setMorphContents. - ^ self textEditor -] - -{ #category : #'accessing - morph contents' } -MerlinMorphTextEditorWidget >> textEditor [ - - ^ textEditor ifNil: [ - textEditor := (self newTextEditorFor: self wizardPart getText: #textEditorContents setText: #textEditorContents:) - hResizing: #spaceFill; - vResizing: #spaceFill; - yourself - ] -] diff --git a/src-archive/Merlin/MerlinMorphTextFieldWidget.class.st b/src-archive/Merlin/MerlinMorphTextFieldWidget.class.st deleted file mode 100644 index ac12ff3da..000000000 --- a/src-archive/Merlin/MerlinMorphTextFieldWidget.class.st +++ /dev/null @@ -1,41 +0,0 @@ -Class { - #name : #MerlinMorphTextFieldWidget, - #superclass : #MerlinMorphPartWidget, - #instVars : [ - 'textField' - ], - #category : #'Merlin-Rendering' -} - -{ #category : #'accessing - wizard management' } -MerlinMorphTextFieldWidget >> populateWizardPartOutput [ - - self wizardPart textEntryContents: ((ObjectStringConverter forClass: String) stringAsObject: textField textMorph asText asString) - -] - -{ #category : #'accessing - morph contents' } -MerlinMorphTextFieldWidget >> setMorphSize [ - self wizardPart horizontalSize - ifNotNil: [ - self textField - hResizing: #rigid; - width: self wizardPart horizontalSize ] -] - -{ #category : #'accessing - morph contents' } -MerlinMorphTextFieldWidget >> specificMorphContents [ - - self setMorphSize. - ^ self newRowWith: {(self newLabel: self wizardPart prefix) disable; yourself . self textField . (self newLabel: self wizardPart suffix) disable; yourself } - - -] - -{ #category : #'accessing - morph contents' } -MerlinMorphTextFieldWidget >> textField [ - - ^ textField ifNil: [ - textField := self newTextEntryFor: self wizardPart getText: #textEntryContents setText: #textEntryContents: - ] -] diff --git a/src-archive/Merlin/MerlinMorphTextWidget.class.st b/src-archive/Merlin/MerlinMorphTextWidget.class.st deleted file mode 100644 index cdeb3217c..000000000 --- a/src-archive/Merlin/MerlinMorphTextWidget.class.st +++ /dev/null @@ -1,29 +0,0 @@ -Class { - #name : #MerlinMorphTextWidget, - #superclass : #MerlinMorphPartWidget, - #instVars : [ - 'textField', - 'textMorph' - ], - #category : #'Merlin-Rendering' -} - -{ #category : #'accessing - wizard management' } -MerlinMorphTextWidget >> populateWizardPartOutput [ - - self wizardPart outputValue: self textMorph contents -] - -{ #category : #'accessing - morph contents' } -MerlinMorphTextWidget >> specificMorphContents [ - - ^ self textMorph contents: (self wizardPart formatBlock meValue: self wizardPart text) - - -] - -{ #category : #'accessing - morph contents' } -MerlinMorphTextWidget >> textMorph [ - - ^ textMorph ifNil: [textMorph := self newEmptyText] -] diff --git a/src-archive/Merlin/MerlinMorphWidget.class.st b/src-archive/Merlin/MerlinMorphWidget.class.st deleted file mode 100644 index 727154dba..000000000 --- a/src-archive/Merlin/MerlinMorphWidget.class.st +++ /dev/null @@ -1,395 +0,0 @@ -Class { - #name : #MerlinMorphWidget, - #superclass : #Object, - #category : #'Merlin-Rendering' -} - -{ #category : #'accessing - morph contents' } -MerlinMorphWidget >> morphContents [ - - "should return the concrete morph to use to display this Merlin widget" - ^ self subclassResponsability -] - -{ #category : #'utils - morph creation' } -MerlinMorphWidget >> newButtonNamed: aString withAction: selector [ - "use this method to create a new classic button that will execute the method designed by selector when clicked. The method selector must be defined and implemented in the subclass" - - | button | - button := PluggableButtonMorph on: self getState: nil action: selector. - button label: aString. - ^button -] - -{ #category : #'utils - morph creation' } -MerlinMorphWidget >> newButtonOn: aModel named: aString withAction: selector [ - "use this method to create a new classic button that will execute the method designed by selector when clicked. The method selector must be defined and implemented in the subclass" - - | button | - button := PluggableButtonMorph on: aModel getState: nil action: selector. - button label: aString. - ^button -] - -{ #category : #'utils - morph creation' } -MerlinMorphWidget >> newCheckboxFor: aModel getSelected: getSel setSelected: setSel label: label [ - "return a checkbox with the label label. the value of the checkbox will be accessed by the selector getSel (send to aModel) and set by the selector setSel (send to aModel)." - - - ^(CheckboxMorph - on: aModel selected: getSel changeSelected: setSel) - font: StandardFonts defaultFont; - label: label; - hResizing: #shrinkWrap; - vResizing: #shrinkWrap; - yourself -] - -{ #category : #'utils - morph creation' } -MerlinMorphWidget >> newColumnWith: aCollectionOfMorphElements [ - "use this method to create a new column in your block" - - |answer| - answer := PanelMorph new - hResizing: #spaceFill; - vResizing: #spaceFill; - fillStyle: Color transparent; "non pane color tracking" - changeTableLayout; - cellInset: 8; yourself. - aCollectionOfMorphElements do: [:m | answer addMorphBack: m]. - ^answer -] - -{ #category : #'utils - morph creation' } -MerlinMorphWidget >> newDirectoryDialogNamed: title [ - - "Answer a morph representing a directory open dialog with the given title" - - |tmpFileDialog| - tmpFileDialog := FileDialogWindow basicNew - initialize; - title: title; - answerDirectory. - tmpFileDialog answerDirectory. - ^ tmpFileDialog - -] - -{ #category : #'utils - morph creation' } -MerlinMorphWidget >> newDropListOn: aModel [ - - | morph | - morph := (DropListMorph - on: (aModel) - list: #list - selected: #selectionIndex - changeSelected: #selectionIndex: - useIndex: true) - "cornerStyle: #rounded;" - hResizing: #spaceFill; - vResizing: #shrinkWrap; - yourself. - - - ^ morph. -] - -{ #category : #'utils - morph creation' } -MerlinMorphWidget >> newDropListOn: aModel list: aSelector [ - - | morph | - morph := (DropListMorph - on: (aModel) - list: aSelector - selected: #selectionIndex - changeSelected: #selectionIndex: - useIndex: true) - "cornerStyle: #rounded;" - hResizing: #spaceFill; - vResizing: #shrinkWrap; - yourself. - - - ^ morph. -] - -{ #category : #'utils - morph creation' } -MerlinMorphWidget >> newEmptyText [ - "Answer a new text." - - ^TextMorph new - wrapFlag: true; - "font: self textFont;" - autoFit: true; - lock; - hResizing: #shrinkWrap; - vResizing: #shrinkWrap -] - -{ #category : #'utils - morph creation' } -MerlinMorphWidget >> newFileDialogNamed: title [ - -"Answer a morph representing a file open dialog with the given title" - - |tmpFileDialog| - tmpFileDialog := FileDialogWindow basicNew - initialize; - title: title; - answerOpenFile. - "exts ifNotNil: [fd validExtensions: exts]. - path ifNotNil: [fd selectPathName: path]." - tmpFileDialog answerOpenFile . - ^ tmpFileDialog - -] - -{ #category : #'utils - morph creation' } -MerlinMorphWidget >> newGroupBoxNamed: aString with: aMorph [ - "Answer a groupbox with the given label and control." - ^ (self newGroupboxNamed: aString) - addContentMorph: aMorph; - yourself -] - -{ #category : #'utils - morph creation' } -MerlinMorphWidget >> newGroupboxNamed: aString [ - "Answer a groupbox with the given label." - ^ GroupboxMorph new - "cornerStyle: #rounded;" - hResizing: #spaceFill; - vResizing: #spaceFill; - label: aString; - yourself - - -] - -{ #category : #'utils - morph creation' } -MerlinMorphWidget >> newLabel: aString [ - "return a simple label displaying the text aString" - ^LabelMorph contents: aString font: TextStyle defaultFont -] - -{ #category : #'utils - morph creation' } -MerlinMorphWidget >> newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector [ - "return a PluggableListMorph. the value of the list will be accessed by the selector listSelector (send to aModel). the index of the current item selected will be accessed by getSelector (send to aModel) and set by the selector setSelector (send to aModel)." - ^PluggableListMorph new - "selectionColor: self selectionColor;" - font: TextStyle defaultFont; - on: aModel - list: listSelector - selected: getSelector - changeSelected: setSelector - menu: nil - keystroke: nil; - autoDeselect: false; - "cornerStyle: #rounded;" - color: Color white; - borderStyle: (BorderStyle inset width: 1); - hResizing: #spaceFill; - vResizing: #spaceFill; yourself. - "getEnabledSelector: enabledSel; - setBalloonText: helpText" -] - -{ #category : #'utils - morph creation' } -MerlinMorphWidget >> newMorphDropListOn: aModel [ - - | tmpDropList | - tmpDropList := (MorphDropListMorph - on: aModel - list: #list - selected: #selectionIndex - changeSelected: #selectionIndex: - useIndex: true) - "selectionColor: self selectionColor; - getEnabledSelector: enabledSel;" - "cornerStyle: #rounded;" - hResizing: #spaceFill; - vResizing: #shrinkWrap. - "setBalloonText: helpText" - - - ^ tmpDropList. - -] - -{ #category : #'utils - morph creation' } -MerlinMorphWidget >> newMultiSelectionListFor: aModel list: listSelector primarySelection: primarySelectionSelector changePrimarySelection: changePrimarySelectionSelector listSelection: listSelectionSelector changeListSelection: changeListSelectionSelector [ - -^ (PluggableListMorph - on: aModel - list: listSelector - primarySelection: primarySelectionSelector - changePrimarySelection: changePrimarySelectionSelector - listSelection: listSelectionSelector - changeListSelection: changeListSelectionSelector - menu: nil ) - font: StandardFonts defaultFont; - autoDeselect: false; - "cornerStyle: #rounded;" - color: Color white; - borderStyle: (BorderStyle inset width: 1); - hResizing: #spaceFill; - vResizing: #spaceFill; yourself. -] - -{ #category : #'utils - morph creation' } -MerlinMorphWidget >> newNormalListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector [ - - ^(PluggableListMorph - "selectionColor: self selectionColor; - font: self listFont;" - on: aModel - list: listSelector - selected: getSelector - changeSelected: setSelector) - "menu: nil - keystroke: nil; - autoDeselect: false;" - "cornerStyle: #rounded;" - color: Color white; - borderStyle: (BorderStyle inset width: 1); - hResizing: #spaceFill; - vResizing: #spaceFill; - yourself -] - -{ #category : #'utils - morph creation' } -MerlinMorphWidget >> newRadionButtonFor: aModel getSelected: getSel setSelected: setSel label: aString [ - - - ^(CheckboxMorph - on: aModel selected: getSel changeSelected: setSel) - "getEnabledSelector: enabledSel;" - "font: self labelFont;" - label: aString; - hResizing: #shrinkWrap; - vResizing: #shrinkWrap; - "setBalloonText: helpText;" - beRadioButton -] - -{ #category : #'utils - morph creation' } -MerlinMorphWidget >> newRowWith: aCollectionOfMorphElements [ - - "use this method to create a new row in your block" - - |answer| - answer := PanelMorph new - hResizing: #spaceFill; - vResizing: #shrinkWrap; - fillStyle: Color transparent; "non pane color tracking" - changeTableLayout; - listDirection: #leftToRight; - cellInset: 8; yourself. - aCollectionOfMorphElements do: [:m | answer addMorphBack: m]. - ^answer -] - -{ #category : #'utils - morph creation' } -MerlinMorphWidget >> newSaveFileDialogNamed: title [ - - "Answer a morph representing a save file dialog with the given title" - - |tmpFileDialog| - tmpFileDialog := FileDialogWindow basicNew - initialize; - title: title; - answerSaveFile. - tmpFileDialog answerSaveFile. - ^ tmpFileDialog - -] - -{ #category : #'utils - morph creation' } -MerlinMorphWidget >> newTabGroupBoxFor: labelsAndControls [ - - ^(TabGroupMorph new - "font: self labelFont;" - "cornerStyle: #rounded;" - hResizing: #spaceFill; - vResizing: #spaceFill; - labelsAndPages: labelsAndControls) - selectedPageIndex: (labelsAndControls isEmpty ifTrue: [0] ifFalse: [1]) -] - -{ #category : #'utils - morph creation' } -MerlinMorphWidget >> newText: aStringOrText [ - "Answer a new text." - - ^TextMorph new - wrapFlag: true; - contents: aStringOrText; - "font: self textFont;" - autoFit: true; - lock; - hResizing: #shrinkWrap; - vResizing: #shrinkWrap -] - -{ #category : #'utils - morph creation' } -MerlinMorphWidget >> newTextEditorFor: aModel getText: getSel setText: setSel [ - "Answer a text editor for the given model." - - ^ (PluggableTextEditorMorph new) - on: aModel - text: getSel - accept: setSel - readSelection: nil - menu: nil; - "font: self textFont;" - "cornerStyle: #rounded;" - hResizing: #rigid; - vResizing: #spaceFill - "borderStyle: (BorderStyle inset width: 1);" - "extent: 800@(Preferences standardDefaultTextFont height + 8);" -" color: Color white." - "selectionColor: self selectionColor" - "getEnabledSelector: enabledSel;" -] - -{ #category : #'utils - morph creation' } -MerlinMorphWidget >> newTextEntryFor: aModel getText: getTextSelector setText: setTextSelector [ - - - | pt | - pt := PluggableTextFieldMorph new - convertTo: String; - alwaysAccept: true; - on: aModel - text: getTextSelector - accept: setTextSelector - readSelection: nil - menu: nil; - acceptOnCR: true; - "getEnabledSelector: enabledSel;" - "font: StandardFonts defaultFont;" - "cornerStyle: #rounded;" - hResizing: #spaceFill"#rigid"; - vResizing: #rigid; - "borderStyle: (BorderStyle inset width: 1); - color: Color white;" - "selectionColor: self selectionColor;" - hideScrollBarsIndefinitely; - extent: 24@ (StandardFonts defaultFont height + 8); - "setBalloonText: helpText." - yourself. - pt textMorph - autoFit: true; - wrapFlag: false; - margins: (2@1 corner: 2@1). - - ^ pt. -] - -{ #category : #'utils - morph creation' } -MerlinMorphWidget >> newVerticalSeparator [ - "Answer a new vertical separator." - - ^SeparatorMorph new - fillStyle: Color transparent; - borderStyle: (BorderStyle inset baseColor: Color blue; width: 1); - extent: 2@2; - vResizing: #spaceFill -] diff --git a/src-archive/Merlin/MerlinMorphicCellRenderer.class.st b/src-archive/Merlin/MerlinMorphicCellRenderer.class.st deleted file mode 100644 index 621902766..000000000 --- a/src-archive/Merlin/MerlinMorphicCellRenderer.class.st +++ /dev/null @@ -1,43 +0,0 @@ -Class { - #name : #MerlinMorphicCellRenderer, - #superclass : #MerlinMorphicRenderer, - #instVars : [ - 'wizardCell' - ], - #category : #'Merlin-Rendering' -} - -{ #category : #rendering } -MerlinMorphicCellRenderer >> cellContentsOf: aPaneLine [ - - ^ self subclassResponsability -] - -{ #category : #rendering } -MerlinMorphicCellRenderer >> render: aPaneLine [ - - |morphContents| - self wizardCell: aPaneLine. - morphContents := self cellContentsOf: self wizardCell. - ^ morphContents - "^ self dialogWindow contentMorph: morphContents." - -] - -{ #category : #accessing } -MerlinMorphicCellRenderer >> subComponents [ - - ^ self wizardCell subComponents -] - -{ #category : #accessing } -MerlinMorphicCellRenderer >> wizardCell [ - - ^ wizardCell -] - -{ #category : #accessing } -MerlinMorphicCellRenderer >> wizardCell: aPaneColumnOrAPaneRow [ - - wizardCell := aPaneColumnOrAPaneRow -] diff --git a/src-archive/Merlin/MerlinMorphicColumnRenderer.class.st b/src-archive/Merlin/MerlinMorphicColumnRenderer.class.st deleted file mode 100644 index 608fd1f34..000000000 --- a/src-archive/Merlin/MerlinMorphicColumnRenderer.class.st +++ /dev/null @@ -1,12 +0,0 @@ -Class { - #name : #MerlinMorphicColumnRenderer, - #superclass : #MerlinMorphicCellRenderer, - #category : #'Merlin-Rendering' -} - -{ #category : #rendering } -MerlinMorphicColumnRenderer >> cellContentsOf: aPaneColumn [ - - ^ aPaneColumn merlinRendering morphContents - -] diff --git a/src-archive/Merlin/MerlinMorphicFirstPaneRenderer.class.st b/src-archive/Merlin/MerlinMorphicFirstPaneRenderer.class.st deleted file mode 100644 index 82b363707..000000000 --- a/src-archive/Merlin/MerlinMorphicFirstPaneRenderer.class.st +++ /dev/null @@ -1,13 +0,0 @@ -Class { - #name : #MerlinMorphicFirstPaneRenderer, - #superclass : #MerlinMorphicPaneRenderer, - #category : #'Merlin-Rendering' -} - -{ #category : #rendering } -MerlinMorphicFirstPaneRenderer >> displayButtons [ - "add buttons to the dialogWindow. each subclass now which buttons have to be added to their dialogWindow" - - - self buttons: {self newCancelButton . self newNextButton} -] diff --git a/src-archive/Merlin/MerlinMorphicLastPaneRenderer.class.st b/src-archive/Merlin/MerlinMorphicLastPaneRenderer.class.st deleted file mode 100644 index 628638f83..000000000 --- a/src-archive/Merlin/MerlinMorphicLastPaneRenderer.class.st +++ /dev/null @@ -1,12 +0,0 @@ -Class { - #name : #MerlinMorphicLastPaneRenderer, - #superclass : #MerlinMorphicPaneRenderer, - #category : #'Merlin-Rendering' -} - -{ #category : #rendering } -MerlinMorphicLastPaneRenderer >> displayButtons [ - - - self buttons: {self newCancelButton. self newPreviousButton. self newFinishButton}. -] diff --git a/src-archive/Merlin/MerlinMorphicMiddlePaneRenderer.class.st b/src-archive/Merlin/MerlinMorphicMiddlePaneRenderer.class.st deleted file mode 100644 index 842e85b79..000000000 --- a/src-archive/Merlin/MerlinMorphicMiddlePaneRenderer.class.st +++ /dev/null @@ -1,11 +0,0 @@ -Class { - #name : #MerlinMorphicMiddlePaneRenderer, - #superclass : #MerlinMorphicPaneRenderer, - #category : #'Merlin-Rendering' -} - -{ #category : #rendering } -MerlinMorphicMiddlePaneRenderer >> displayButtons [ - - self buttons: {self newCancelButton . self newPreviousButton . self newNextButton}. -] diff --git a/src-archive/Merlin/MerlinMorphicPaneRenderer.class.st b/src-archive/Merlin/MerlinMorphicPaneRenderer.class.st deleted file mode 100644 index 8bc0f48b2..000000000 --- a/src-archive/Merlin/MerlinMorphicPaneRenderer.class.st +++ /dev/null @@ -1,225 +0,0 @@ -Class { - #name : #MerlinMorphicPaneRenderer, - #superclass : #MerlinMorphicRenderer, - #instVars : [ - 'wizardPane', - 'wizardRenderer', - 'nextButtonActions', - 'terminateButtonActions' - ], - #category : #'Merlin-Rendering' -} - -{ #category : #updating } -MerlinMorphicPaneRenderer >> adaptSize [ - "Adapt the size of the window to its contents. Usefull when you dynamically add elements to your window. (In fact simply re-open the window)" - - self builder openModal: self dialogWindow. -] - -{ #category : #updating } -MerlinMorphicPaneRenderer >> applyChanges [ - "make sure that all changes become visible in the frame" - - | contentMorph | - contentMorph := self dialogWindow contentMorph. - contentMorph notNil - ifTrue: [self dialogWindow contentMorph: contentMorph; model: nil]. -] - -{ #category : #'accessing - buttons' } -MerlinMorphicPaneRenderer >> backSign [ - ^ '<< Back' -] - -{ #category : #rendering } -MerlinMorphicPaneRenderer >> buttons: aCollectionOfButtons [ - "set the value of the buttons that will be visible at the right end of the WizardPane " - - self dialogWindow buttons: aCollectionOfButtons. - self applyChanges. -] - -{ #category : #'buttons actions' } -MerlinMorphicPaneRenderer >> cancelButtonAction [ - "represent the action to execute when the cancel button is pressed" - self wizardPane cancelButtonAction. - self wizardRenderer performCancelButtonAction -] - -{ #category : #rendering } -MerlinMorphicPaneRenderer >> displayButtons [ - - "each subclass should know which kind of buttons should be displayed in the dialog and what are the corresponding actions" - ^ self subclassResponsability -] - -{ #category : #'accessing - buttons' } -MerlinMorphicPaneRenderer >> forwardSign [ - ^ 'Next >>' -] - -{ #category : #'initialize-release' } -MerlinMorphicPaneRenderer >> initialize [ - - super initialize. - self nextButtonActions: OrderedCollection new. - self terminateButtonActions: OrderedCollection new. -] - -{ #category : #'util - morph creation' } -MerlinMorphicPaneRenderer >> newButtonNamed: aString withAction: selector [ - "use this method to create a new classic button that will execute the method designed by selector when clicked. The method selector must be defined and implemented." - - | button | - button := PluggableButtonMorph on: self getState: nil action: selector. - button label: aString. - ^button -] - -{ #category : #'accessing - buttons' } -MerlinMorphicPaneRenderer >> newCancelButton [ - "Each kind of pane contain a cancel button that enable to close the dialog window" - - ^ self newButtonNamed: 'Cancel' withAction: #cancelButtonAction. - -] - -{ #category : #'accessing - buttons' } -MerlinMorphicPaneRenderer >> newFinishButton [ - - ^ self newButtonNamed: 'Finish' withAction: #terminateButtonAction. -] - -{ #category : #'accessing - buttons' } -MerlinMorphicPaneRenderer >> newNextButton [ - ^ self newButtonNamed: self forwardSign withAction: #nextButtonAction -] - -{ #category : #'accessing - buttons' } -MerlinMorphicPaneRenderer >> newPreviousButton [ - ^ self newButtonNamed: self backSign withAction: #previousButtonAction -] - -{ #category : #'buttons actions' } -MerlinMorphicPaneRenderer >> nextButtonAction [ - "action executed when the next button is pressed" - - self nextButtonActions do: [:aBlock | aBlock value]. - self wizardPane nextButtonAction. - self wizardRenderer performNextButtonAction. -] - -{ #category : #'next button - actions' } -MerlinMorphicPaneRenderer >> nextButtonActions [ - - ^ nextButtonActions -] - -{ #category : #'next button - actions' } -MerlinMorphicPaneRenderer >> nextButtonActions: aCollectionOfBlocks [ - - nextButtonActions := aCollectionOfBlocks -] - -{ #category : #'buttons actions' } -MerlinMorphicPaneRenderer >> previousButtonAction [ - "action executed when the previous button is pressed" - self wizardPane previousButtonAction. - self wizardRenderer performPreviousButtonAction. -] - -{ #category : #updating } -MerlinMorphicPaneRenderer >> refresh [ - - ^ self wizardRenderer refresh -] - -{ #category : #rendering } -MerlinMorphicPaneRenderer >> render: aWizardPane [ - - |tmpPanelMorph tmpCellMorph| - tmpPanelMorph := PanelMorph new - hResizing: #spaceFill; - vResizing: #spaceFill; - fillStyle: Color transparent; - changeTableLayout; - yourself. - self wizardPane: aWizardPane. - self wizardPane failingConditions do: [:aString | - |tmpText| - tmpText := ('*',aString) asText. - tmpText addAttribute: (TextColor new color: Color red; yourself) from: 1 to: tmpText size. - tmpPanelMorph addMorphBack: tmpText asMorph - ]. - tmpCellMorph := self wizardPane mainPaneLine renderOnMerlinRenderer: self. - tmpPanelMorph addMorphBack: tmpCellMorph. - self dialogWindow contentMorph: tmpPanelMorph. - self applyChanges. - self displayButtons. - self setName. - ^ self dialogWindow. -] - -{ #category : #rendering } -MerlinMorphicPaneRenderer >> setName [ - - self dialogWindow title: self wizardPane name -] - -{ #category : #'buttons actions' } -MerlinMorphicPaneRenderer >> terminateButtonAction [ - "action executed when the terminate button is pressed" - self terminateButtonActions do: [:aBlock | aBlock value]. - self wizardPane terminateButtonAction. - self wizardRenderer performTerminateButtonAction. -] - -{ #category : #'next button - actions' } -MerlinMorphicPaneRenderer >> terminateButtonActions [ - - ^ terminateButtonActions -] - -{ #category : #'next button - actions' } -MerlinMorphicPaneRenderer >> terminateButtonActions: aCollectionOfBlocks [ - - terminateButtonActions := aCollectionOfBlocks -] - -{ #category : #'next button - actions' } -MerlinMorphicPaneRenderer >> whenNextIsPressedDo: aBlock [ - - self nextButtonActions add: aBlock -] - -{ #category : #'next button - actions' } -MerlinMorphicPaneRenderer >> whenTerminateIsPressedDo: aBlock [ - - self terminateButtonActions add: aBlock -] - -{ #category : #accessing } -MerlinMorphicPaneRenderer >> wizardPane [ - - ^ wizardPane -] - -{ #category : #accessing } -MerlinMorphicPaneRenderer >> wizardPane: aWizardPane [ - - wizardPane := aWizardPane -] - -{ #category : #accessing } -MerlinMorphicPaneRenderer >> wizardRenderer [ - - ^ wizardRenderer -] - -{ #category : #accessing } -MerlinMorphicPaneRenderer >> wizardRenderer: aMerlinMorphicWizardRenderer [ - - self dialogWindow: aMerlinMorphicWizardRenderer dialogWindow. - wizardRenderer := aMerlinMorphicWizardRenderer -] diff --git a/src-archive/Merlin/MerlinMorphicPartRenderer.class.st b/src-archive/Merlin/MerlinMorphicPartRenderer.class.st deleted file mode 100644 index 5daf154f3..000000000 --- a/src-archive/Merlin/MerlinMorphicPartRenderer.class.st +++ /dev/null @@ -1,5 +0,0 @@ -Class { - #name : #MerlinMorphicPartRenderer, - #superclass : #MerlinMorphicRenderer, - #category : #'Merlin-Rendering' -} diff --git a/src-archive/Merlin/MerlinMorphicRenderer.class.st b/src-archive/Merlin/MerlinMorphicRenderer.class.st deleted file mode 100644 index 555bfb0aa..000000000 --- a/src-archive/Merlin/MerlinMorphicRenderer.class.st +++ /dev/null @@ -1,202 +0,0 @@ -Class { - #name : #MerlinMorphicRenderer, - #superclass : #MerlinRenderer, - #instVars : [ - 'dialogWindow', - 'builder' - ], - #category : #'Merlin-Rendering' -} - -{ #category : #accessing } -MerlinMorphicRenderer >> builder [ - - ^ builder -] - -{ #category : #accessing } -MerlinMorphicRenderer >> dialogWindow [ - - ^ dialogWindow -] - -{ #category : #accessing } -MerlinMorphicRenderer >> dialogWindow: aDialogWindow [ - - dialogWindow := aDialogWindow -] - -{ #category : #rendering } -MerlinMorphicRenderer >> doOpen: aDialogWindow [ - - self builder openModal: aDialogWindow. -] - -{ #category : #'initialize-release' } -MerlinMorphicRenderer >> initialize [ - - super initialize. - builder := StandardWindow new. - dialogWindow := PluggableDialogWindow new beResizeable; yourself. - dialogWindow contentMorph: (dialogWindow newColumn: { }). -] - -{ #category : #'parts rendering' } -MerlinMorphicRenderer >> merlinButtonRenderingFor: aButtonPart [ - - ^ MerlinMorphButtonWidget new wizardPart: aButtonPart; yourself -] - -{ #category : #'parts rendering' } -MerlinMorphicRenderer >> merlinCheckboxRenderingFor: aCheckboxePart [ - - ^ MerlinMorphCheckboxWidget new wizardPart: aCheckboxePart; yourself -] - -{ #category : #'parts rendering' } -MerlinMorphicRenderer >> merlinChooseFileRenderingFor: aChooseFilePart [ - - ^ MerlinMorphChooseFileWidget new wizardPart: aChooseFilePart; yourself -] - -{ #category : #'parts rendering' } -MerlinMorphicRenderer >> merlinColumnRenderingFor: aPaneColumn [ - - ^ MerlinMorphColumnWidget new wizardCell: aPaneColumn; yourself. -] - -{ #category : #'parts rendering' } -MerlinMorphicRenderer >> merlinDirectoryChooseRenderingFor: aChooseFilePart [ - - ^ MerlinMorphDirectoryChooseWidget new wizardPart: aChooseFilePart; yourself -] - -{ #category : #'parts rendering' } -MerlinMorphicRenderer >> merlinDropListRenderingFor: aDroplListPart [ - - ^ MerlinMorphDroplListWidget new wizardPart: aDroplListPart; yourself. -] - -{ #category : #'parts rendering' } -MerlinMorphicRenderer >> merlinItemsSelectorRenderingFor: anItemSelectorPart [ - - - ^ MerlinItemsSelectorWidget new wizardPart: anItemSelectorPart; yourself. - -] - -{ #category : #'parts rendering' } -MerlinMorphicRenderer >> merlinListRenderingFor: aListPart [ - - ^ MerlinMorphListWidget new wizardPart: aListPart; yourself. -] - -{ #category : #'parts rendering' } -MerlinMorphicRenderer >> merlinMorphDropListRenderingFor: aMorphDroplListPart [ - - ^ MerlinMorphMorphDroplListWidget new wizardPart: aMorphDroplListPart; yourself. -] - -{ #category : #'parts rendering' } -MerlinMorphicRenderer >> merlinMultiCheckboxesRenderingFor: aMulticheckboxesPart [ - - ^ MerlinMorphMultiCheckboxesWidget new wizardPart: aMulticheckboxesPart; yourself -] - -{ #category : #'parts rendering' } -MerlinMorphicRenderer >> merlinMultiPartsRenderingFor: aCompositePart [ - - ^ MerlinMorphMultiPartsWidget new wizardPart: aCompositePart; yourself. -] - -{ #category : #'parts rendering' } -MerlinMorphicRenderer >> merlinMultiSelectionItemsSelectorRenderingFor: aMultiSelectionItemSelectorPart [ - - - ^ MerlinMultiSelectionItemsSelectorWidget new wizardPart: aMultiSelectionItemSelectorPart; yourself. - -] - -{ #category : #'parts rendering' } -MerlinMorphicRenderer >> merlinRadioButtonsRenderingFor: aRadioButtonsPart [ - - ^ MerlinMorphRadioButtonsWidget new wizardPart: aRadioButtonsPart ; yourself. -] - -{ #category : #'parts rendering' } -MerlinMorphicRenderer >> merlinRowRenderingFor: aPaneRow [ - - ^ MerlinMorphRowWidget new wizardCell: aPaneRow; yourself. -] - -{ #category : #'parts rendering' } -MerlinMorphicRenderer >> merlinSaveChooseFileRenderingFor: aChooseFilePart [ - - ^ MerlinMorphSaveChooseFileWidget new wizardPart: aChooseFilePart; yourself -] - -{ #category : #'parts rendering' } -MerlinMorphicRenderer >> merlinTextEditorRenderingFor: aTextEditorPart [ - - ^ MerlinMorphTextEditorWidget new wizardPart: aTextEditorPart ; yourself. -] - -{ #category : #'parts rendering' } -MerlinMorphicRenderer >> merlinTextFieldRenderingFor: aTextFieldPart [ - - ^ MerlinMorphTextFieldWidget new wizardPart: aTextFieldPart ; yourself. -] - -{ #category : #'parts rendering' } -MerlinMorphicRenderer >> merlinTextRenderingFor: aTextPart [ - - ^ MerlinMorphTextWidget new wizardPart: aTextPart ; yourself. -] - -{ #category : #rendering } -MerlinMorphicRenderer >> renderColumn: aPaneRow [ - - ^ MerlinMorphicColumnRenderer new dialogWindow: self dialogWindow ; render: aPaneRow -] - -{ #category : #rendering } -MerlinMorphicRenderer >> renderMerlinFirstPane: aWizardFirstPane [ - - | tmpRenderer | - tmpRenderer := MerlinMorphicFirstPaneRenderer new dialogWindow: self dialogWindow ; wizardRenderer: self; yourself. - aWizardFirstPane renderer: tmpRenderer. - ^ tmpRenderer render: aWizardFirstPane -] - -{ #category : #rendering } -MerlinMorphicRenderer >> renderMerlinLastPane: aWizardLastPane [ - - |tmpRenderer| - tmpRenderer := MerlinMorphicLastPaneRenderer new dialogWindow: self dialogWindow ;wizardRenderer: self;yourself. - aWizardLastPane renderer: tmpRenderer. - ^ tmpRenderer render: aWizardLastPane -] - -{ #category : #rendering } -MerlinMorphicRenderer >> renderMerlinMiddlePane: aWizardMiddlePane [ - - | tmpRenderer | - tmpRenderer := MerlinMorphicMiddlePaneRenderer new dialogWindow: self dialogWindow ; wizardRenderer: self; yourself. - aWizardMiddlePane renderer: tmpRenderer. - ^ tmpRenderer render: aWizardMiddlePane -] - -{ #category : #rendering } -MerlinMorphicRenderer >> renderMerlinSinglePane: aWizardSinglePane [ - - |tmpRenderer| - tmpRenderer := MerlinMorphicSinglePaneRenderer new dialogWindow: self dialogWindow ; wizardRenderer: self; yourself. - aWizardSinglePane renderer: tmpRenderer. - ^ tmpRenderer render: aWizardSinglePane -] - -{ #category : #rendering } -MerlinMorphicRenderer >> renderRow: aPaneRow [ - - ^ MerlinMorphicRowRenderer new dialogWindow: self dialogWindow ; render: aPaneRow -] diff --git a/src-archive/Merlin/MerlinMorphicRowRenderer.class.st b/src-archive/Merlin/MerlinMorphicRowRenderer.class.st deleted file mode 100644 index 95b4aa950..000000000 --- a/src-archive/Merlin/MerlinMorphicRowRenderer.class.st +++ /dev/null @@ -1,12 +0,0 @@ -Class { - #name : #MerlinMorphicRowRenderer, - #superclass : #MerlinMorphicCellRenderer, - #category : #'Merlin-Rendering' -} - -{ #category : #rendering } -MerlinMorphicRowRenderer >> cellContentsOf: aPaneRow [ - - ^ aPaneRow merlinRendering morphContents - -] diff --git a/src-archive/Merlin/MerlinMorphicSinglePaneRenderer.class.st b/src-archive/Merlin/MerlinMorphicSinglePaneRenderer.class.st deleted file mode 100644 index 23a57047e..000000000 --- a/src-archive/Merlin/MerlinMorphicSinglePaneRenderer.class.st +++ /dev/null @@ -1,11 +0,0 @@ -Class { - #name : #MerlinMorphicSinglePaneRenderer, - #superclass : #MerlinMorphicPaneRenderer, - #category : #'Merlin-Rendering' -} - -{ #category : #rendering } -MerlinMorphicSinglePaneRenderer >> displayButtons [ - - self buttons: {self newCancelButton. self newFinishButton}. -] diff --git a/src-archive/Merlin/MerlinMorphicWizardRenderer.class.st b/src-archive/Merlin/MerlinMorphicWizardRenderer.class.st deleted file mode 100644 index bdf717224..000000000 --- a/src-archive/Merlin/MerlinMorphicWizardRenderer.class.st +++ /dev/null @@ -1,100 +0,0 @@ -Class { - #name : #MerlinMorphicWizardRenderer, - #superclass : #MerlinMorphicRenderer, - #instVars : [ - 'currentIndex', - 'wizardControl' - ], - #category : #'Merlin-Rendering' -} - -{ #category : #accessing } -MerlinMorphicWizardRenderer >> currentIndex [ - - ^ currentIndex -] - -{ #category : #accessing } -MerlinMorphicWizardRenderer >> currentIndex: aNumber [ - - currentIndex := aNumber -] - -{ #category : #accessing } -MerlinMorphicWizardRenderer >> currentPane [ - - "return the wizardPane that is currently opened " - "^ self wizardPanes at: currentIndex" - ^ self wizardControl currentPane -] - -{ #category : #accessing } -MerlinMorphicWizardRenderer >> dialogWindow [ - - ^ dialogWindow -] - -{ #category : #buttonsActions } -MerlinMorphicWizardRenderer >> performCancelButtonAction [ - - self dialogWindow close. -] - -{ #category : #buttonsActions } -MerlinMorphicWizardRenderer >> performNextButtonAction [ - "this method is run when a next button is pressed" - - self dialogWindow close. - "self currentIndex: (self currentIndex + 1)." - ^self doOpen: (self currentPane renderOnMerlinRenderer: self) -] - -{ #category : #buttonsActions } -MerlinMorphicWizardRenderer >> performPreviousButtonAction [ - "this method is run when a previous button is pressed" - - self dialogWindow close. - "self currentIndex: (self currentIndex - 1)." - ^ self doOpen: (self currentPane renderOnMerlinRenderer: self) -] - -{ #category : #buttonsActions } -MerlinMorphicWizardRenderer >> performTerminateButtonAction [ - - self dialogWindow close. - self wizardControl hasFinished ifFalse: [ - self doOpen: (self currentPane renderOnMerlinRenderer: self) - ] -] - -{ #category : #updating } -MerlinMorphicWizardRenderer >> refresh [ - - self doOpen: (self currentPane renderOnMerlinRenderer: self) -] - -{ #category : #rendering } -MerlinMorphicWizardRenderer >> render: aWizardControl [ - - self wizardControl: aWizardControl. - self currentIndex: 1. - ^ self currentPane renderOnMerlinRenderer: self -] - -{ #category : #accessing } -MerlinMorphicWizardRenderer >> wizardControl [ - - ^ wizardControl -] - -{ #category : #accessing } -MerlinMorphicWizardRenderer >> wizardControl: aWizardControl [ - - wizardControl := aWizardControl -] - -{ #category : #accessing } -MerlinMorphicWizardRenderer >> wizardPanes [ - - ^ self wizardControl wizardPanes -] diff --git a/src-archive/Merlin/MerlinMultiSelectionItemsSelectorWidget.class.st b/src-archive/Merlin/MerlinMultiSelectionItemsSelectorWidget.class.st deleted file mode 100644 index 8f278a267..000000000 --- a/src-archive/Merlin/MerlinMultiSelectionItemsSelectorWidget.class.st +++ /dev/null @@ -1,111 +0,0 @@ -Class { - #name : #MerlinMultiSelectionItemsSelectorWidget, - #superclass : #MerlinItemsSelectorWidget, - #category : #'Merlin-Rendering' -} - -{ #category : #'control - initial list ' } -MerlinMultiSelectionItemsSelectorWidget >> changeInitialListIndex: newListIndex [ - - self wizardPart deselectAllInSelectionList. - self wizardPart changeInitialListIndex: newListIndex . - self checkForEnablingAddRemoveButtons. - "self widgetStateChanged." -] - -{ #category : #'control - selection list' } -MerlinMultiSelectionItemsSelectorWidget >> changeSelectionListIndex: newListIndex [ - - self wizardPart deselectAllInInitialList. - self wizardPart changeSelectionListIndex: newListIndex. - self checkForEnablingAddRemoveButtons. - "self widgetStateChanged." -] - -{ #category : #'accessing - morphs' } -MerlinMultiSelectionItemsSelectorWidget >> checkForEnablingAddRemoveButtons [ - - "we disable or enable the addButton according the selection list has selected items or not. " - self wizardPart nothingSelectedInSelectionList - ifTrue: [self removeButtonMorph disable] - ifFalse: [self removeButtonMorph enable]. - - self wizardPart nothingSelectedInInitialList - ifTrue: [ self addButtonMorph disable] - ifFalse: [self addButtonMorph enable] - - - - -] - -{ #category : #'control - initial list ' } -MerlinMultiSelectionItemsSelectorWidget >> initialListIndex [ - - ^ self wizardPart initialListIndex -] - -{ #category : #'accessing - morphs' } -MerlinMultiSelectionItemsSelectorWidget >> initialListMorph [ - - ^ initialListMorph ifNil: [ - initialListMorph := (self newMultiSelectionListFor: self - list: #initialList - primarySelection: #initialListIndex - changePrimarySelection: #changeInitialListIndex: - listSelection: #initialListSelectionAt: - changeListSelection: #initialListSelectionAt:put:) - minWidth: 250; - minHeight: 350; - yourself. - ] -] - -{ #category : #'control - initial list ' } -MerlinMultiSelectionItemsSelectorWidget >> initialListSelectionAt: anIndex [ - - ^ self wizardPart initialListSelectionAt: anIndex -] - -{ #category : #'control - initial list ' } -MerlinMultiSelectionItemsSelectorWidget >> initialListSelectionAt: anIndex put: value [ - - self wizardPart initialListSelectionAt: anIndex put: value. - "self widgetStateChanged." -] - -{ #category : #'control - selection list' } -MerlinMultiSelectionItemsSelectorWidget >> selectionListIndex [ - - ^ self wizardPart selectionListIndex -] - -{ #category : #'accessing - morphs' } -MerlinMultiSelectionItemsSelectorWidget >> selectionListMorph [ - - ^ selectionListMorph ifNil: [ - selectionListMorph := (self newMultiSelectionListFor: self - list: #selectionList - primarySelection: #selectionListIndex - changePrimarySelection: #changeSelectionListIndex: - listSelection: #selectionListSelectionAt: - changeListSelection: #selectionListSelectionAt:put:) - minWidth: 250; - minHeight: 350; - yourself. - ] -] - -{ #category : #'control - selection list' } -MerlinMultiSelectionItemsSelectorWidget >> selectionListSelectionAt: anIndex [ - - ^ self wizardPart selectionListSelectionAt: anIndex - -] - -{ #category : #'control - selection list' } -MerlinMultiSelectionItemsSelectorWidget >> selectionListSelectionAt: anIndex put: value [ - - self wizardPart selectionListSelectionAt: anIndex put: value. - "self widgetStateChanged." -] diff --git a/src-archive/Merlin/MerlinOptionValueHolder.class.st b/src-archive/Merlin/MerlinOptionValueHolder.class.st deleted file mode 100644 index 67f8541ae..000000000 --- a/src-archive/Merlin/MerlinOptionValueHolder.class.st +++ /dev/null @@ -1,44 +0,0 @@ -Class { - #name : #MerlinOptionValueHolder, - #superclass : #Model, - #instVars : [ - 'contents', - 'option' - ], - #category : #'Merlin-Parts' -} - -{ #category : #accessing } -MerlinOptionValueHolder >> contents [ - ^contents -] - -{ #category : #accessing } -MerlinOptionValueHolder >> contents: newContents [ - contents := newContents. -" self contentsChanged." - self changed: self option -] - -{ #category : #accessing } -MerlinOptionValueHolder >> contentsChanged [ - self changed: #contents -] - -{ #category : #accessing } -MerlinOptionValueHolder >> option [ - - ^ option -] - -{ #category : #accessing } -MerlinOptionValueHolder >> option: anObject [ - - option := anObject -] - -{ #category : #accessing } -MerlinOptionValueHolder >> safeContents: newContents [ - contents := newContents. - self contentsChanged. -] diff --git a/src-archive/Merlin/MerlinRenderer.class.st b/src-archive/Merlin/MerlinRenderer.class.st deleted file mode 100644 index 947b0b228..000000000 --- a/src-archive/Merlin/MerlinRenderer.class.st +++ /dev/null @@ -1,24 +0,0 @@ -Class { - #name : #MerlinRenderer, - #superclass : #Object, - #category : #'Merlin-Rendering' -} - -{ #category : #rendering } -MerlinRenderer >> doOpen: aUI [ - - ^ self subclassResponsability -] - -{ #category : #rendering } -MerlinRenderer >> open: aWizardControl [ - - ^ self doOpen: (self render: aWizardControl) -] - -{ #category : #rendering } -MerlinRenderer >> render: aWizardControl [ - - "Each concrete renderer should now how to display a WizardControl instance. " - ^ self subclassResponsability -] diff --git a/src-archive/Merlin/MockWizardControl.class.st b/src-archive/Merlin/MockWizardControl.class.st deleted file mode 100644 index 5d80f39a8..000000000 --- a/src-archive/Merlin/MockWizardControl.class.st +++ /dev/null @@ -1,43 +0,0 @@ -Class { - #name : #MockWizardControl, - #superclass : #WizardControl, - #category : #'Merlin-Tests' -} - -{ #category : #open } -MockWizardControl >> open [ - "launch the wizard system by opening the first wizard pane." - - wizardPanes isEmpty ifTrue: [ ^ self ]. - currentPane := 1. - (wizardPanes at: currentPane) testOpen -] - -{ #category : #'wizard panes transition' } -MockWizardControl >> performNextButtonAction [ - "this method is run when a next button is pressed" - - (wizardPanes at: currentPane) doClose. - currentPane := currentPane + 1. - (wizardPanes at: currentPane) testOpen. -] - -{ #category : #'wizard panes transition' } -MockWizardControl >> performPreviousButtonAction [ - "this method is run when a previous button is pressed" - - (wizardPanes at: currentPane) doClose. - currentPane := currentPane - 1. - (wizardPanes at: currentPane) testOpen. -] - -{ #category : #'wizard panes transition' } -MockWizardControl >> performTerminateButtonAction [ - "by default, just close the last current pane. Override this method if you want to create a subclass of WizardControl making a specific action" - - (wizardPanes at: currentPane) doClose. - self finalActionBlock ifNotNil: [ - self finalActionBlock value: self wizardInformations - ]. - -] diff --git a/src-archive/Merlin/MorphDropListPart.class.st b/src-archive/Merlin/MorphDropListPart.class.st deleted file mode 100644 index eec9b5941..000000000 --- a/src-archive/Merlin/MorphDropListPart.class.st +++ /dev/null @@ -1,17 +0,0 @@ -Class { - #name : #MorphDropListPart, - #superclass : #DropListPart, - #category : #'Merlin-Parts' -} - -{ #category : #'*merlin-rendering' } -MorphDropListPart >> merlinRendering [ - - ^ self renderer merlinMorphDropListRenderingFor: self -] - -{ #category : #'accessing - wizard mangement' } -MorphDropListPart >> outputValue [ - - ^self selectionIndex -] diff --git a/src-archive/Merlin/MorphDropListPart.extension.st b/src-archive/Merlin/MorphDropListPart.extension.st deleted file mode 100644 index fe154fe79..000000000 --- a/src-archive/Merlin/MorphDropListPart.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #MorphDropListPart } - -{ #category : #'*merlin-rendering' } -MorphDropListPart >> merlinRendering [ - - ^ self renderer merlinMorphDropListRenderingFor: self -] diff --git a/src-archive/Merlin/MultiCheckboxesPart.class.st b/src-archive/Merlin/MultiCheckboxesPart.class.st deleted file mode 100644 index 0b79fd6c3..000000000 --- a/src-archive/Merlin/MultiCheckboxesPart.class.st +++ /dev/null @@ -1,81 +0,0 @@ -Class { - #name : #MultiCheckboxesPart, - #superclass : #MultipleOptionPart, - #instVars : [ - 'checkboxParts', - 'answer', - 'labels', - 'formatBlock' - ], - #category : #'Merlin-Parts' -} - -{ #category : #'instance creation' } -MultiCheckboxesPart class >> withAll: aCollectionOfLabels [ - - ^ super new initialize: aCollectionOfLabels . -] - -{ #category : #accessing } -MultiCheckboxesPart >> format: aBlock [ - - "use this method the string representationof the options. aBlock is a one argument block (representing the current option to format). It should return a string that will be the representation of the option" - formatBlock := aBlock -] - -{ #category : #accessing } -MultiCheckboxesPart >> formatBlock [ - - ^ formatBlock ifNil: [formatBlock := [:option | option ]] -] - -{ #category : #accessing } -MultiCheckboxesPart >> initializeFromLabels: aCollectionOfString [ - - self labels: aCollectionOfString -] - -{ #category : #accessing } -MultiCheckboxesPart >> labels [ - - ^ self options -] - -{ #category : #accessing } -MultiCheckboxesPart >> labels: aCollectionOfString [ - - self options: aCollectionOfString -] - -{ #category : #accessing } -MultiCheckboxesPart >> latePopulateContents [ - - -] - -{ #category : #'*merlin-rendering' } -MultiCheckboxesPart >> merlinRendering [ - - ^ self renderer merlinMultiCheckboxesRenderingFor: self -] - -{ #category : #'accessing - wizard mangement' } -MultiCheckboxesPart >> outputValue [ - - |tmpResult| - tmpResult := OrderedCollection new. - self optionsAndModels keysAndValuesDo: [:aLabel :aModel | - tmpResult add: (aLabel ->aModel contents) - ]. - ^ tmpResult -] - -{ #category : #'accessing - wizard mangement' } -MultiCheckboxesPart >> selectedItems [ - - "return a collection containing symbols corresponding to the checkboxes selected" - | result | - result := OrderedCollection new. - self optionsAndModels keysAndValuesDo: [ :anOption :aModel | aModel contents ifTrue: [ result add: anOption asSymbol ] ]. - ^ result -] diff --git a/src-archive/Merlin/MultiCheckboxesPart.extension.st b/src-archive/Merlin/MultiCheckboxesPart.extension.st deleted file mode 100644 index 7a9cd51a8..000000000 --- a/src-archive/Merlin/MultiCheckboxesPart.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #MultiCheckboxesPart } - -{ #category : #'*merlin-rendering' } -MultiCheckboxesPart >> merlinRendering [ - - ^ self renderer merlinMultiCheckboxesRenderingFor: self -] diff --git a/src-archive/Merlin/MultiCheckboxesPartOld.class.st b/src-archive/Merlin/MultiCheckboxesPartOld.class.st deleted file mode 100644 index a334d950e..000000000 --- a/src-archive/Merlin/MultiCheckboxesPartOld.class.st +++ /dev/null @@ -1,208 +0,0 @@ -Class { - #name : #MultiCheckboxesPartOld, - #superclass : #WizardPart, - #instVars : [ - 'allCheckboxes', - 'allCheckboxLabels', - 'allCheckboxContents', - 'actionSelector', - 'actionArguments', - 'actionModel' - ], - #category : #'Merlin-ToBeRemoved' -} - -{ #category : #'instance creation' } -MultiCheckboxesPartOld class >> withAll: aCollectionOfLabels [ - - ^ super new initialize: aCollectionOfLabels . -] - -{ #category : #accessing } -MultiCheckboxesPartOld >> actionArguments [ - - "return a collection of arguments that should be passed when performing the action selector" - ^ actionArguments -] - -{ #category : #accessing } -MultiCheckboxesPartOld >> actionArguments: aCollectionOfObjects [ - - actionArguments := aCollectionOfObjects -] - -{ #category : #accessing } -MultiCheckboxesPartOld >> actionModel [ - - "return the model on which we should perform the action when clicking on a checkbox" - ^ actionModel -] - -{ #category : #accessing } -MultiCheckboxesPartOld >> actionModel: anObject [ - - actionModel := anObject. -] - -{ #category : #accessing } -MultiCheckboxesPartOld >> actionSelector [ - - "return the selector that should be performed when clicking on a checkbox" - ^ actionSelector -] - -{ #category : #accessing } -MultiCheckboxesPartOld >> actionSelector: aSymbol [ - - actionSelector := aSymbol -] - -{ #category : #'morph content setup tools' } -MultiCheckboxesPartOld >> addVerticalSeparatorAtTheMiddleOf: aCollectionOfElements [ - - "return a collection containing all initials morph elements from aCollectionOfElements including a vertical separator at the middle" - | index result result1 result2 collectionSize | - collectionSize := aCollectionOfElements size. - collectionSize even - ifTrue: [index := collectionSize // 2.] - ifFalse: [index := collectionSize // 2 + 1.]. - - result := OrderedCollection new. - result1 := OrderedCollection new. - result2 := OrderedCollection new. - 1 to: (index ) do: [:i | result1 add: (aCollectionOfElements at: i)]. - - (index + 1) to: aCollectionOfElements size do: [:i | result2 add: (aCollectionOfElements at: i)]. - result add: (self newColumnWith: result1 ); add: (self newVerticalSeparator) ; add: (self newColumnWith: result2 ). - ^ result. -] - -{ #category : #accessing } -MultiCheckboxesPartOld >> allCheckboxContents [ - - "return a collection for each checkbox content (which can be true or false)" - ^ allCheckboxContents -] - -{ #category : #accessing } -MultiCheckboxesPartOld >> allCheckboxContents: aCollectionOfBoolean [ - - allCheckboxContents := aCollectionOfBoolean -] - -{ #category : #accessing } -MultiCheckboxesPartOld >> allCheckboxLabels [ - - ^ allCheckboxLabels -] - -{ #category : #accessing } -MultiCheckboxesPartOld >> allCheckboxLabels: aCollectionOfString [ - - ^ allCheckboxLabels -] - -{ #category : #'initialize-release' } -MultiCheckboxesPartOld >> initialize: aCollectionOfLabels [ - - | elements | - self actionModel: self. - - self allCheckboxContents: (aCollectionOfLabels collect: [:each | true]). - allCheckboxes := OrderedCollection new. - allCheckboxLabels := aCollectionOfLabels. - aCollectionOfLabels do: [:each | - allCheckboxes add: - (self - newCheckboxFor: (ValueHolder new contents: true) - getSelected: #contents - setSelected: #contents: - label: each). - ]. - - elements := self addVerticalSeparatorAtTheMiddleOf: allCheckboxes . - - self contents: {self newRowWith: elements} . - -] - -{ #category : #'initialize-release' } -MultiCheckboxesPartOld >> initialize: aCollectionOfLabels inGroupBoxNamed: aName [ - - | elements | - self actionModel: self. - self allCheckboxContents: (aCollectionOfLabels collect: [:each | true]). - allCheckboxes := OrderedCollection new. - allCheckboxLabels := aCollectionOfLabels. - aCollectionOfLabels do: [:each | - self - newCheckboxFor: (ValueHolder new contents: true) - getSelected: #contents - setSelected: #contents: - label: each. - ]. - - elements := self addVerticalSeparatorAtTheMiddleOf: allCheckboxes . - - self contents: {self newGroupboxNamed: aName WithAll: elements} - -] - -{ #category : #'*Merlin-Rendering' } -MultiCheckboxesPartOld >> merlinRendering [ - - ^ self renderer merlinMultiCheckboxesRenderingFor: self -] - -{ #category : #'morph content setup tools' } -MultiCheckboxesPartOld >> newVerticalSeparator [ - "Answer a new vertical separator." - - ^SeparatorMorph new - fillStyle: Color transparent; - borderStyle: (BorderStyle inset baseColor: Color blue; width: 1); - extent: 2@2; - vResizing: #spaceFill -] - -{ #category : #'accessing - wizard mangement' } -MultiCheckboxesPartOld >> outputValue [ - "this method is an abstract method as only the subclass itself know what is the information to send to the WizardPane which will send it to the wizarControl " - - ^ self selectedItems -] - -{ #category : #'accessing - wizard mangement' } -MultiCheckboxesPartOld >> selectedItems [ - - "return a collection containing symbols corresponding to the checkboxes selected" - | result | - result := OrderedCollection new. - allCheckboxes do: [ :each | each buttonMorph selected ifTrue: [ result add: each label asSymbol ] ]. - ^ result -] - -{ #category : #'accessing - morph' } -MultiCheckboxesPartOld >> setActionFromModel: aModel toCheckboxes: anActionSelector withArguments: aCollectionOfArguments [ - "initialize the action to do when clicking on a checkbox. actionSelector must be implemented in this class or its subclasses" - self actionModel: aModel. - self actionSelector: anActionSelector. - self actionArguments: aCollectionOfArguments. - allCheckboxes do: [ :each | - each buttonMorph - target: self model; - actionSelector: anActionSelector ; - arguments: aCollectionOfArguments ]. -] - -{ #category : #'accessing - morph' } -MultiCheckboxesPartOld >> setActionToCheckboxes: anActionSelector withArguments: aCollectionOfArguments [ - "initialize the action to do when clicking on a checkbox. actionSelector must be implemented in this class or its subclasses" - self actionSelector: anActionSelector. - self actionArguments: aCollectionOfArguments. - allCheckboxes do: [ :each | - each buttonMorph - target: self; - actionSelector: anActionSelector ; - arguments: aCollectionOfArguments ]. -] diff --git a/src-archive/Merlin/MultiCheckboxesPartOld.extension.st b/src-archive/Merlin/MultiCheckboxesPartOld.extension.st deleted file mode 100644 index 459ba302f..000000000 --- a/src-archive/Merlin/MultiCheckboxesPartOld.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #MultiCheckboxesPartOld } - -{ #category : #'*Merlin-Rendering' } -MultiCheckboxesPartOld >> merlinRendering [ - - ^ self renderer merlinMultiCheckboxesRenderingFor: self -] diff --git a/src-archive/Merlin/MultiDependentCheckboxesPart.class.st b/src-archive/Merlin/MultiDependentCheckboxesPart.class.st deleted file mode 100644 index 3eb2d5001..000000000 --- a/src-archive/Merlin/MultiDependentCheckboxesPart.class.st +++ /dev/null @@ -1,113 +0,0 @@ -" -Instead of specifying a collection of labels as starting point (like in the superclass), here you have to specify aDictionary of dependencies. This dictionary should contains all labels mapped to the other labels they are dependent on. -It could look like: - #( - label1 -> #(label2 label3) - label2 -> #(label3) - label3 -> #() - ) - -At the end, each time you select a label, all dependents will be updated accordingly, and each time you unselect a label, all labels having it s dependent are unselected. - -Example: MerlinExamples multiDependentCheckboxesPart -" -Class { - #name : #MultiDependentCheckboxesPart, - #superclass : #MultiCheckboxesPart, - #instVars : [ - 'entityDependencies' - ], - #category : #'Merlin-Parts' -} - -{ #category : #private } -MultiDependentCheckboxesPart >> checkboxForContextNamed: aContextName [ - - ^ self modelOfOption: aContextName. -] - -{ #category : #accessing } -MultiDependentCheckboxesPart >> dependenciesFor: aCollectionOfContexts [ - "return all contexts depending of contexts in aCollectionOfContexts" - | dependenciesForContext | - - dependenciesForContext := Set new. - aCollectionOfContexts do: [:each | dependenciesForContext addAll: ( entityDependencies at: each)]. - - dependenciesForContext size == aCollectionOfContexts size - ifTrue: [^ dependenciesForContext ] - ifFalse: [^ self dependenciesFor: dependenciesForContext ]. -] - -{ #category : #'initialize-release' } -MultiDependentCheckboxesPart >> initializeFromLabelsAndDependencies: aDictionaryWithDependencies [ - - self labels: (aDictionaryWithDependencies keys collect: [:each | each asString]). - entityDependencies := aDictionaryWithDependencies. -] - -{ #category : #accessing } -MultiDependentCheckboxesPart >> labelsAndDependencies [ - - ^ entityDependencies -] - -{ #category : #accessing } -MultiDependentCheckboxesPart >> labelsAndDependencies: aDictionary [ - - "aDictionary should contains all labels mapped to the other labels they are dependent on. At the end, each time you select a label, all dependents will be updated accordingly, and each time you unselect a label, all labels having it s dependent are unselected " - self initializeFromLabelsAndDependencies: aDictionary -] - -{ #category : #accessing } -MultiDependentCheckboxesPart >> revertDependenciesFor: aCollectionOfContexts [ - "return all the contexts from wich aCollectionOfContexts depends" - | revertDependenciesForContext | - - revertDependenciesForContext := Set new. - entityDependencies. - aCollectionOfContexts do: [:each | - entityDependencies associationsDo: [:assoc | - (assoc value includes: each ) ifTrue: [revertDependenciesForContext add: assoc key] ] ]. - - revertDependenciesForContext size == aCollectionOfContexts size - ifTrue: [ ^ revertDependenciesForContext ] - ifFalse: [^ self revertDependenciesFor: revertDependenciesForContext ]. -] - -{ #category : #'initialize-release' } -MultiDependentCheckboxesPart >> update: aChange [ - - (self options includes: aChange) ifTrue: [ - self updateCheckboxesWhenChangesOn: aChange. - self hasChanged. - self wizardPane refresh. - ] -] - -{ #category : #private } -MultiDependentCheckboxesPart >> updateCheckboxesNamed: aCollectionOfLabels withState: aStateSelector [ - - self optionsAndModels keysAndValuesDo: [:anOption :aModel | - (aCollectionOfLabels includes: anOption) ifTrue: [ aModel safeContents: aStateSelector ] - ] -] - -{ #category : #actions } -MultiDependentCheckboxesPart >> updateCheckboxesWhenChangesOn: contextName [ - " when the context contextName has been selected or deselected, update all the others contexts checkboxes that are linked to this context " - | dependenciesForContext contextCheckBox | - contextCheckBox := self checkboxForContextNamed: contextName . - - (contextCheckBox contents) - ifTrue: - [ - dependenciesForContext := self dependenciesFor: { (contextName asSymbol)}. - self updateCheckboxesNamed: dependenciesForContext withState: true. - ] - ifFalse: - [ - dependenciesForContext := self revertDependenciesFor: {(contextName asSymbol)}. - self updateCheckboxesNamed: dependenciesForContext withState: false. - ]. -] diff --git a/src-archive/Merlin/MultiFixedSelectionItemSelectorPart.class.st b/src-archive/Merlin/MultiFixedSelectionItemSelectorPart.class.st deleted file mode 100644 index d51175ff6..000000000 --- a/src-archive/Merlin/MultiFixedSelectionItemSelectorPart.class.st +++ /dev/null @@ -1,23 +0,0 @@ -Class { - #name : #MultiFixedSelectionItemSelectorPart, - #superclass : #MultiSelectionItemSelectorPart, - #category : #'Merlin-Parts' -} - -{ #category : #actions } -MultiFixedSelectionItemSelectorPart >> updateWhenAddingItem [ - | selectedItemsInInitialList tmpList initialListOfItems | - - selectedItemsInInitialList := self initialListSelectedItems. - tmpList := OrderedCollection new. - tmpList addAll: self selectionList. - tmpList addAll: selectedItemsInInitialList. - - " we remove the selected package from the initial list :" - initialListOfItems := self initialList asOrderedCollection. - initialListOfItems removeAll: selectedItemsInInitialList. - self initialList: initialListOfItems. - - " we update the list of packages of the selection morph list :" - self selectionList: tmpList. -] diff --git a/src-archive/Merlin/MultiSelectionItemSelectorPart.class.st b/src-archive/Merlin/MultiSelectionItemSelectorPart.class.st deleted file mode 100644 index 59506b737..000000000 --- a/src-archive/Merlin/MultiSelectionItemSelectorPart.class.st +++ /dev/null @@ -1,195 +0,0 @@ -Class { - #name : #MultiSelectionItemSelectorPart, - #superclass : #ItemSelectorPart, - #instVars : [ - 'initialListSelections', - 'selectionListSelections' - ], - #category : #'Merlin-Parts' -} - -{ #category : #'control - initial list' } -MultiSelectionItemSelectorPart >> changeInitialListIndex: newListIndex [ - - initialListIndex ~= 0 - ifTrue: [initialListSelections at: initialListIndex put: false]. - newListIndex ~= 0 - ifTrue: [ - initialListSelections at: newListIndex put: true. - - ]. - - initialListIndex := newListIndex. - -" self contentsChanged. " - -] - -{ #category : #'control - selection list' } -MultiSelectionItemSelectorPart >> changeSelectionListIndex: newListIndex [ - selectionListIndex ~= 0 - ifTrue: [selectionListSelections at: selectionListIndex put: false]. - newListIndex ~= 0 - ifTrue: [selectionListSelections at: newListIndex put: true]. - selectionListIndex := newListIndex. - - self contentsChanged. - - -] - -{ #category : #actions } -MultiSelectionItemSelectorPart >> deselectAllInInitialList [ - - initialListIndex := 0. - self initialList: self initialList. - - - -] - -{ #category : #actions } -MultiSelectionItemSelectorPart >> deselectAllInSelectionList [ - - selectionListIndex := 0. - self selectionList: self selectionList. -] - -{ #category : #'control - initial list' } -MultiSelectionItemSelectorPart >> initialList: aCollection [ - - initialList := aCollection. - initialListSelections := Dictionary new. - 1 to: initialList size do: [:index | initialListSelections at: index put: false]. - - "Here we check that the initialListIndex is updated according the new list size " - self initialListIndex > self initialList size ifFalse: [^self]. - self changeInitialListIndex: self initialList size. -] - -{ #category : #'control - initial list' } -MultiSelectionItemSelectorPart >> initialListSelectedItems [ - |indexesSelected result | - - indexesSelected := OrderedCollection new. - initialListSelections keysAndValuesDo: [:key :value | value ifTrue: [indexesSelected add: key]]. - - result := OrderedCollection new. - indexesSelected do: [:each | result add: (initialList at: each) asString]. - -^result -] - -{ #category : #'control - initial list' } -MultiSelectionItemSelectorPart >> initialListSelectionAt: anIndex [ - - ^ initialListSelections at: anIndex -] - -{ #category : #'control - initial list' } -MultiSelectionItemSelectorPart >> initialListSelectionAt: anIndex put: value [ - - ^ initialListSelections at: anIndex put: value -] - -{ #category : #'initialize-release' } -MultiSelectionItemSelectorPart >> initialize [ - - super initialize. - "initialList := OrderedCollection new." - initialListIndex := 0. - selectionListSelections := Dictionary new. - initialListSelections := Dictionary new. - selectionListIndex := 0. -] - -{ #category : #'*merlin-rendering' } -MultiSelectionItemSelectorPart >> merlinRendering [ - - ^ self renderer merlinMultiSelectionItemsSelectorRenderingFor: self -] - -{ #category : #'control - initial list' } -MultiSelectionItemSelectorPart >> nothingSelectedInInitialList [ - - initialListSelections values detect: [:each | each = true] ifNone: [^true]. - - ^false - -] - -{ #category : #'control - selection list' } -MultiSelectionItemSelectorPart >> nothingSelectedInSelectionList [ - - selectionListSelections values detect: [:each | each = true] ifNone: [^true]. - ^ false. -] - -{ #category : #'control - selection list' } -MultiSelectionItemSelectorPart >> selectionList: aCollection [ - - selectionList := aCollection. - selectionListSelections := Dictionary new. - 1 to: selectionList size do: [:index | selectionListSelections at: index put: false]. - - self changed: #selectionList. - - "Here we check that the selectionListIndex is updated according the new list size " - self selectionListIndex > self selectionList size ifFalse: [^self]. - self changeSelectionListIndex: self selectionList size. - -] - -{ #category : #'control - selection list' } -MultiSelectionItemSelectorPart >> selectionListSelectedItems [ - |indexesSelected| - - indexesSelected := OrderedCollection new. - selectionListSelections keysAndValuesDo: [:key :value | value ifTrue: [indexesSelected add: key]]. - - ^indexesSelected collect: [:each | selectionList at: each]. -] - -{ #category : #'control - selection list' } -MultiSelectionItemSelectorPart >> selectionListSelectionAt: anIndex [ - ^ selectionListSelections at: anIndex -] - -{ #category : #'control - selection list' } -MultiSelectionItemSelectorPart >> selectionListSelectionAt: anIndex put: value [ - - ^ selectionListSelections at: anIndex put: value -] - -{ #category : #actions } -MultiSelectionItemSelectorPart >> updateWhenAddingItem [ - | selectedItemsInInitialList tmpList initialListOfItems | - selectedItemsInInitialList := self initialListSelectedItems . - tmpList := SortedCollection withAll: self selectionList. - tmpList addAll: selectedItemsInInitialList. - - " we remove the selected package from the initial list :" - initialListOfItems := self initialList asOrderedCollection. - initialListOfItems removeAll: selectedItemsInInitialList. - self initialList: initialListOfItems. - - " we update the list of packages of the selection morph list :" - self selectionList: tmpList. -] - -{ #category : #actions } -MultiSelectionItemSelectorPart >> updateWhenRemovingItem [ - - "we remove the selected item from the selection list : " - | list package tmpPackagesList selectedItems tmpSelectionList tmpList | - selectedItems := self selectionListSelectedItems. - tmpSelectionList := self selectionList. - tmpSelectionList removeAll: selectedItems. - self selectionList: tmpSelectionList. - - "we move the removed package into the initial list :" - tmpList := self initialList asSortedCollection: [:a :b | a> merlinRendering [ - - ^ self renderer merlinMultiSelectionItemsSelectorRenderingFor: self -] diff --git a/src-archive/Merlin/MultiSelectionListSelector.class.st b/src-archive/Merlin/MultiSelectionListSelector.class.st deleted file mode 100644 index a3805dbe2..000000000 --- a/src-archive/Merlin/MultiSelectionListSelector.class.st +++ /dev/null @@ -1,484 +0,0 @@ -Class { - #name : #MultiSelectionListSelector, - #superclass : #WizardPart, - #instVars : [ - 'addButton', - 'selectionList', - 'removeButton', - 'initialList', - 'initialListIndex', - 'initialListSelections', - 'selectionListIndex', - 'selectionListSelections' - ], - #category : #'Merlin-ToBeRemoved' -} - -{ #category : #'instance creation' } -MultiSelectionListSelector class >> on: initialList [ - - ^ super new initialize: initialList ; yourself. -] - -{ #category : #'private - customization' } -MultiSelectionListSelector >> addRowWithAll: collectionOfMorphElements withTitle: aString [ - "enable the customization of this PackageSelector. Add a new row under the packages list with all elements contained in collectionOfMorphElements " - | tmpBuilderMainContent | - tmpBuilderMainContent := self contents submorphs asOrderedCollection . - tmpBuilderMainContent add: - (self newRowWith: { - (self - newGroupboxNamed: aString - WithAll: { (self newRowWith: collectionOfMorphElements ) }). - (self newColumnWith: { }). - (self newColumnWith: { }) - }). - - self populateContents:( - tmpBuilderMainContent asArray - ). - -] - -{ #category : #'private - customization' } -MultiSelectionListSelector >> addStringMessage: aString ForRowIndexedBy: anIndex [ - "allow the user to dynamically add a message (wich can be for example an error message or informations missing) to the new row he created before at the anIndex position (the index one is attributed to the packageSelector stuff) " - | initialBuilderMainContent tmpBuilderMainContent | - - initialBuilderMainContent := self contents submorphs asOrderedCollection . - "tmpBuilderMainContent represent the new content of main window (in wich we will add the message)" - tmpBuilderMainContent := initialBuilderMainContent copy. - - "We add the message to the row number anIndex" - tmpBuilderMainContent at: anIndex put: ( - self newRowWith: { - (initialBuilderMainContent at: anIndex) submorphs first. - self newColumnWith: { self newGroupboxNamed: 'Information' With: (self newLabel: aString)}. - }). - - "we set the new content of the window" - self contents:( - tmpBuilderMainContent - ). - self wizardPane buildDialogWindow . - self wizardPane adaptSize. - -] - -{ #category : #'private - customization' } -MultiSelectionListSelector >> addTitleMessage: aString toGroupboxInRowIndexedBy: anIndex [ - - | initialBuilderMainContent tmpBuilderMainContent groupBox | - - initialBuilderMainContent := self contents submorphs asOrderedCollection . - "tmpBuilderMainContent represent the new content of main window (in wich we will add the message)" - tmpBuilderMainContent := initialBuilderMainContent copy. - - "We add the message to the row number anIndex" - groupBox := (tmpBuilderMainContent at: anIndex) submorphs first. - groupBox label: groupBox label ,' - ',aString. - - self wizardPane buildDialogWindow . - self wizardPane adaptSize. - -] - -{ #category : #'initial list control' } -MultiSelectionListSelector >> changeInitialListIndex: newListIndex [ - initialListIndex ~= 0 - ifTrue: [initialListSelections at: initialListIndex put: false]. - newListIndex ~= 0 - ifTrue: [ - initialListSelections at: newListIndex put: true. - - ]. - - initialListIndex := newListIndex. - - - - "if we disable or enable the addButton according the initial has selected items or not. " - (self nothingSelectedInInitialList ) - ifTrue: [addButton disable] - ifFalse: [addButton enable]. - - "when clicking on the initialList, we deselect all in the selection list" - self deselectAllInSelectionList . - - self changed: #initialListIndex. - self contentsChanged. - -] - -{ #category : #'selection list control' } -MultiSelectionListSelector >> changeSelectionListIndex: newListIndex [ - selectionListIndex ~= 0 - ifTrue: [selectionListSelections at: selectionListIndex put: false]. - newListIndex ~= 0 - ifTrue: [selectionListSelections at: newListIndex put: true]. - selectionListIndex := newListIndex. - self changed: #selectionListIndex. - self contentsChanged. - - "if we disable or enable the addButton according the selection list has selected items or not. " - self nothingSelectedInSelectionList - ifTrue: [removeButton disable] - ifFalse: [removeButton enable]. - - "when clicking on the selectionList, we deselect all in the initial list" - self deselectAllInInitialList - - -] - -{ #category : #'private - customization' } -MultiSelectionListSelector >> deleteStringMessageFromRowIndexedBy: anIndex [ - "allow the user to dynamically delete a message he put before at the row number anIndex (the index 1 is attributed to the PackageSelectorStuff) " - | initialBuilderMainContent tmpBuilderMainContent | - - initialBuilderMainContent := self contents submorphs asOrderedCollection . - "tmpBuilderMainContent represent the new content of main window (in wich we will delete the message)" - tmpBuilderMainContent := initialBuilderMainContent copy. - - "We delete the message from the row number anIndex" - tmpBuilderMainContent at: anIndex put: ( - self newRowWith: { - (initialBuilderMainContent at: anIndex) submorphs first "detect: [:component | (component isKindOf: GroupboxMorph) ]". - self newColumnWith: { }. - }). - "we set the new content of the window" - self contents:( - tmpBuilderMainContent asArray - ). - self wizardPane buildDialogWindow . - - -] - -{ #category : #actions } -MultiSelectionListSelector >> deselectAllInInitialList [ - initialListIndex := 0. - self initialList: self initialList. - - addButton disable. - -] - -{ #category : #actions } -MultiSelectionListSelector >> deselectAllInSelectionList [ - selectionListIndex := 0. - self selectionList: self selectionList. - removeButton disable. - -] - -{ #category : #'initial list control' } -MultiSelectionListSelector >> initialList [ - - ^initialList -] - -{ #category : #'initial list control' } -MultiSelectionListSelector >> initialList: aCollection [ - - initialList := aCollection. - initialListSelections := Dictionary new. - 1 to: initialList size do: [:index | initialListSelections at: index put: false]. - self changed: #initialList. - - "Here we check that the initialListIndex is updated according the new list size " - self initialListIndex > self initialList size ifFalse: [^self]. - self changeInitialListIndex: self initialList size. - "initialListIndex := 0." - - - -] - -{ #category : #'initial list control' } -MultiSelectionListSelector >> initialListIndex [ - ^initialListIndex -] - -{ #category : #'initial list control' } -MultiSelectionListSelector >> initialListSelectedItems [ - |indexesSelected result | - - indexesSelected := OrderedCollection new. - initialListSelections keysAndValuesDo: [:key :value | value ifTrue: [indexesSelected add: key]]. - - result := OrderedCollection new. - indexesSelected do: [:each | result add: (initialList at: each) asString]. - -^result -] - -{ #category : #'initial list control' } -MultiSelectionListSelector >> initialListSelectionAt: anIndex [ - ^ initialListSelections at: anIndex -] - -{ #category : #'initial list control' } -MultiSelectionListSelector >> initialListSelectionAt: anIndex put: value [ - - ^ initialListSelections at: anIndex put: value -] - -{ #category : #'initialize-release' } -MultiSelectionListSelector >> initialize [ - - super initialize. - "initialList := OrderedCollection new." - initialListIndex := 0. - - selectionList := OrderedCollection new. - selectionListSelections := Dictionary new. - selectionListIndex := 0. - - "while no item has been selected and put into the selectionList, the nextButton doesn't have to be enabled'" - "self enableNextButton: false." -] - -{ #category : #'initialize-release' } -MultiSelectionListSelector >> initialize: aCollectionOfItems [ -"initialize the initial list with aCollectionOfItems and then fill in the contents of this WizardPart" - | morphPackagesList morphSelectionList | - self initialize. - initialList := aCollectionOfItems. - initialListSelections := Dictionary new. - 1 to: initialList size do: [:index | initialListSelections at: index put: false]. - - - (morphSelectionList := self newSelectionMultiSelectionList). - (morphPackagesList := self newInitialMultiSelectionList). - self populateContents:{ self newRowWith: { - ((self - newGroupboxNamed: 'Packages' translated - With: morphPackagesList)). - (self newColumnWith: { - (self newRowWith: { }). - (self newRowWith: { }). - (self newRowWith: { }). - (self newAddButton). - (self newRowWith: { }). - (self newRemoveButton) - }). - (self newColumnWith: { - (self - newGroupboxNamed: 'Selection' translated - With: morphSelectionList) - }) - }} -] - -{ #category : #'private - customization' } -MultiSelectionListSelector >> modifyTitleWith: aString ForRowIndexedBy: anIndex [ - - | initialBuilderMainContent tmpBuilderMainContent groupBox | - - initialBuilderMainContent := self contents submorphs asOrderedCollection . - "tmpBuilderMainContent represent the new content of main window (in wich we will add the message)" - tmpBuilderMainContent := initialBuilderMainContent copy. - - "We add the message to the row number anIndex" - groupBox := (tmpBuilderMainContent at: anIndex) submorphs first. - groupBox label: aString. - - self wizardPane buildDialogWindow . - self wizardPane adaptSize. - -] - -{ #category : #'morph content setup tools' } -MultiSelectionListSelector >> newAddButton [ - "return the button that will be used to add a package from the packagesList to the selectionList. While no item is selected in the packagesList, this button is disable " - - - addButton := self newButtonNamed: '>>>' withAction: #updateWhenAddingItem. - addButton disable. - ^addButton -] - -{ #category : #'morph content setup tools' } -MultiSelectionListSelector >> newInitialMultiSelectionList [ - -^ (self newMultiSelectionListFor: self - list: #initialList - primarySelection: #initialListIndex - changePrimarySelection: #changeInitialListIndex: - listSelection: #initialListSelectionAt: - changeListSelection: #initialListSelectionAt:put:) - minWidth: 250; - minHeight: 350; - yourself. -] - -{ #category : #'morph content setup tools' } -MultiSelectionListSelector >> newMultiSelectionList [ - -^ PluggableListMorph - on: self - list: #list - primarySelection: #selectionSymbol - changePrimarySelection: (#selectionSymbol, ':') asSymbol - listSelection: #listSelectionSymbol - changeListSelection: (#listSelectionSymbol, 'put:') asSymbol - menu: nil. -] - -{ #category : #'morph content setup tools' } -MultiSelectionListSelector >> newRemoveButton [ - "return the button that will be used to add a package from the packagesList to the selectionList. While no item is selected in the packagesList, this button is disable " - - - removeButton := self newButtonNamed: '<<<' withAction: #updateWhenRemovingItem. - removeButton disable. - ^removeButton -] - -{ #category : #'morph content setup tools' } -MultiSelectionListSelector >> newSelectionMultiSelectionList [ - -^( self newMultiSelectionListFor: self - list: #selectionList - primarySelection: #selectionListIndex - changePrimarySelection: #changeSelectionListIndex: - listSelection: #selectionListSelectionAt: - changeListSelection: #selectionListSelectionAt:put:) - minWidth: 250; - minHeight: 350; - yourself. -] - -{ #category : #'initial list control' } -MultiSelectionListSelector >> nothingSelectedInInitialList [ - - initialListSelections values detect: [:each | each = true] ifNone: [^true]. - - ^false - -" 1 to: initialList size do: [:index | - (initialListSelections at: index) = true ifTrue: [^false]. - ]. - ^ true. " -] - -{ #category : #'selection list control' } -MultiSelectionListSelector >> nothingSelectedInSelectionList [ - - selectionListSelections values detect: [:each | each = true] ifNone: [^true]. - ^ false. -] - -{ #category : #'selection list control' } -MultiSelectionListSelector >> selectionList [ - - ^ selectionList -] - -{ #category : #'selection list control' } -MultiSelectionListSelector >> selectionList: aCollection [ - - selectionList := aCollection. - selectionListSelections := Dictionary new. - 1 to: selectionList size do: [:index | selectionListSelections at: index put: false]. - - self changed: #selectionList. - - "Here we check that the selectionListIndex is updated according the new list size " - self selectionListIndex > self selectionList size ifFalse: [^self]. - self changeSelectionListIndex: self selectionList size. - - "if the list has become empty, we disable the next button" - "self selectionList isEmpty - ifTrue: [ self enableNextButton: false] - ifFalse: [ self enableNextButton: true]." - - - -] - -{ #category : #'selection list control' } -MultiSelectionListSelector >> selectionListIndex [ - - ^selectionListIndex -] - -{ #category : #'selection list control' } -MultiSelectionListSelector >> selectionListSelectedItems [ - |indexesSelected| - - indexesSelected := OrderedCollection new. - selectionListSelections keysAndValuesDo: [:key :value | value ifTrue: [indexesSelected add: key]]. - - ^indexesSelected collect: [:each | selectionList at: each]. -] - -{ #category : #'selection list control' } -MultiSelectionListSelector >> selectionListSelectionAt: anIndex [ - ^ selectionListSelections at: anIndex -] - -{ #category : #'selection list control' } -MultiSelectionListSelector >> selectionListSelectionAt: anIndex put: value [ - - ^ selectionListSelections at: anIndex put: value -] - -{ #category : #'private - customization' } -MultiSelectionListSelector >> setTitleMessage: aString toGroupboxInRowIndexedBy: anIndex [ - - | initialBuilderMainContent tmpBuilderMainContent groupBox | - - initialBuilderMainContent := self contents submorphs asOrderedCollection . - "tmpBuilderMainContent represent the new content of main window (in wich we will add the message)" - tmpBuilderMainContent := initialBuilderMainContent copy. - - "We add the message to the row number anIndex" - groupBox := (tmpBuilderMainContent at: anIndex) submorphs first. - groupBox label: aString. - - self wizardPane buildDialogWindow . - self wizardPane adaptSize. - -] - -{ #category : #actions } -MultiSelectionListSelector >> updateWhenAddingItem [ - | selectedItemsInInitialList tmpList initialListOfItems | - selectedItemsInInitialList := self initialListSelectedItems . - tmpList := SortedCollection withAll: self selectionList. - tmpList addAll: selectedItemsInInitialList. - - " we remove the selected package from the initial list :" - initialListOfItems := self initialList asOrderedCollection. - initialListOfItems removeAll: selectedItemsInInitialList. - self initialList: initialListOfItems. - - "if the initial become empty, we disable de add button" - initialListOfItems isEmpty ifTrue: [addButton disable]. - - " we update the list of packages of the selection morph list :" - self selectionList: tmpList. - -] - -{ #category : #actions } -MultiSelectionListSelector >> updateWhenRemovingItem [ - - "we remove the selected item from the selection list : " - | list package tmpPackagesList selectedItems tmpSelectionList tmpList | - selectedItems := self selectionListSelectedItems. - tmpSelectionList := self selectionList. - tmpSelectionList removeAll: selectedItems. - self selectionList: tmpSelectionList. - - "if the selection become empty, we disable the remove button :" - tmpSelectionList isEmpty ifTrue: [removeButton disable]. - - "we move the removed package into the initial list :" - tmpList := self initialList asSortedCollection: [:a :b | a> addSmalltalkExpressionRowToPackageSelector [ - self - addRowWithAll: { - ((self newLabel: 'select: [ :packageName |') disable). - (self newTextEntry). - ((self newLabel: ']') disable). - (self newValidateButton) - } - withTitle: 'Select packages with a Smalltalk condition' -] - -{ #category : #'text entry control' } -MultiSelectionListSelectorWithSmalltalkExpression >> evaluateTextEntryContents [ - "make a package selection by evaluating the text entry content" - | selectionCollection | - - [selectionCollection := Smalltalk compiler - evaluate: self smalltalkExpressionToEvaluate - for: self - logged: false. - - selectionCollection do: - [ :each | - (self selectionList includes: each) ifFalse: - [ self updateSelectionListByAdding: each. - self updatePackagesListByRemoving: each ] ]. - self modifyTitleWith: 'Select packages with a Smalltalk condition' ForRowIndexedBy: 2.] - - on: Error - do: [ - self setTitleMessage: 'Select packages with a Smalltalk condition - INVALID EXPRESSION' toGroupboxInRowIndexedBy:2 - "self addStringMessage: 'Invalid expression' ForRowIndexedBy: 2." - ] -] - -{ #category : #'initialize-release' } -MultiSelectionListSelectorWithSmalltalkExpression >> initialize: aCollectionOfItems [ - - super initialize: aCollectionOfItems. - self addSmalltalkExpressionRowToPackageSelector -] - -{ #category : #'morph content setup tools' } -MultiSelectionListSelectorWithSmalltalkExpression >> newLabel: aString [ - - ^LabelMorph contents: aString font: StandardFonts defaultFont -] - -{ #category : #'morph content setup tools' } -MultiSelectionListSelectorWithSmalltalkExpression >> newTextEntry [ - - "^textEntry := PluggableTextFieldMorph new - on: self - text: #textEntryContents - accept: #textEntryContents: - readSelection: nil - menu: nil." - - | pt | - pt := PluggableTextFieldMorph new - convertTo: String; - alwaysAccept: true; - on: self - text: #textEntryContents - accept: #textEntryContents: - readSelection: nil - menu: nil; - acceptOnCR: true; - "getEnabledSelector: enabledSel;" - font: StandardFonts defaultFont; - cornerStyle: #rounded; - hResizing: #rigid"#spaceFill"; - vResizing: #rigid; - borderStyle: (BorderStyle inset width: 1); - color: Color white; - "selectionColor: self selectionColor;" - hideScrollBarsIndefinitely; - extent: 280@(StandardFonts defaultFont height + 8); - "setBalloonText: helpText." - yourself. - - pt textMorph - autoFit: true; - wrapFlag: false; - margins: (2@1 corner: 2@1). - ^textEntry := pt - -] - -{ #category : #'morph content setup tools' } -MultiSelectionListSelectorWithSmalltalkExpression >> newValidateButton [ - - "return a button opening the context frame when clicked" - ^ self newButtonNamed: 'Validate' withAction: #validateButtonAction - -] - -{ #category : #'accessing - wizard mangement' } -MultiSelectionListSelectorWithSmalltalkExpression >> outputValue [ - "this method is an abstract method as only the subclass itself know what is the information to send to the WizardPane which will send it to the wizarControl " - ^ selectionList -] - -{ #category : #'text entry control' } -MultiSelectionListSelectorWithSmalltalkExpression >> smalltalkExpressionToEvaluate [ - - ^ 'initialList select: [ :packageName |' , textEntryContents , ']' -] - -{ #category : #'text entry control' } -MultiSelectionListSelectorWithSmalltalkExpression >> textEntryContents [ - "return the contents of the text entry used to evaluate smalltalk expressions" - - ^ textEntryContents -] - -{ #category : #'text entry control' } -MultiSelectionListSelectorWithSmalltalkExpression >> textEntryContents: newContents [ - "set the content of the text entry " - textEntryContents := newContents. - self contentsChanged -] - -{ #category : #'text entry control' } -MultiSelectionListSelectorWithSmalltalkExpression >> updatePackagesListByRemoving: aPackageName [ - - | tmpPackagesList | - tmpPackagesList := self initialList. - tmpPackagesList remove: aPackageName . - self initialList: tmpPackagesList. - -] - -{ #category : #'text entry control' } -MultiSelectionListSelectorWithSmalltalkExpression >> updateSelectionListByAdding: aPackageName [ - - | tmpSelectionList | - tmpSelectionList := self selectionList. - tmpSelectionList add: aPackageName. - self selectionList: (tmpSelectionList asSortedCollection: [:a :b | a < b]). -] - -{ #category : #actions } -MultiSelectionListSelectorWithSmalltalkExpression >> validateButtonAction [ - - textEntry acceptTextInModel. - self evaluateTextEntryContents. -] diff --git a/src-archive/Merlin/MultipleOptionPart.class.st b/src-archive/Merlin/MultipleOptionPart.class.st deleted file mode 100644 index 846458365..000000000 --- a/src-archive/Merlin/MultipleOptionPart.class.st +++ /dev/null @@ -1,100 +0,0 @@ -Class { - #name : #MultipleOptionPart, - #superclass : #OptionPart, - #instVars : [ - 'selectedOptions' - ], - #category : #'Merlin-Parts' -} - -{ #category : #accessing } -MultipleOptionPart >> basicSelectedOptions [ - - ^ selectedOptions ifNil: [selectedOptions := OrderedCollection withAll: self selectedOptions] -] - -{ #category : #accessing } -MultipleOptionPart >> basicSelectedOptions: aCollectionOfSelectedOptions [ - - - "self optionsAndModels keysAndValuesDo: [:anOption :aModel | - aModel contents = (aCollectionOfSelectedOptions includes: anOption) - ifTrue: [ - aModel safeContents: aModel contents not - ] - ]." - selectedOptions := aCollectionOfSelectedOptions. - self selectedOptions: aCollectionOfSelectedOptions -] - -{ #category : #accessing } -MultipleOptionPart >> deselectAllOptions [ - - self optionsAndModels valuesDo: [:aModel | - aModel contents: false - ] -] - -{ #category : #accessing } -MultipleOptionPart >> deselectOption: anOption [ - - self setOption: anOption to: false -] - -{ #category : #accessing } -MultipleOptionPart >> selectAllOptions [ - - self optionsAndModels valuesDo: [:aModel | - aModel contents: true - ] -] - -{ #category : #accessing } -MultipleOptionPart >> selectOption: anOption [ - - self setOption: anOption to: true -] - -{ #category : #accessing } -MultipleOptionPart >> selectedOptions [ - - |tmpResult| - tmpResult := OrderedCollection new. - self optionsAndModels keysAndValuesDo: [:anOption :aModel | - (aModel contents = true) ifTrue: [tmpResult add: anOption] - ] . - ^ tmpResult -] - -{ #category : #accessing } -MultipleOptionPart >> selectedOptions: aCollectionOfOptions [ - - - self optionsAndModels keysAndValuesDo: [:anOption :aModel | - (aCollectionOfOptions includes: anOption) - ifTrue: [aModel safeContents: true ] - ifFalse: [aModel safeContents: false ] - ] . -] - -{ #category : #accessing } -MultipleOptionPart >> setOption: anOption to: trueOrFalse [ - - (self optionsAndModels at: anOption) contents: trueOrFalse -] - -{ #category : #accessing } -MultipleOptionPart >> setOptions: aCollectionOfOptions to: trueOrFalse [ - - aCollectionOfOptions do: [:anOption | - self setOption: anOption to: trueOrFalse - ] -] - -{ #category : #updating } -MultipleOptionPart >> update: aChange [ - - (self options includes: aChange) ifTrue: [ - self hasChanged: (aChange -> (self modelOfOption: aChange) contents) - ] -] diff --git a/src-archive/Merlin/Object.extension.st b/src-archive/Merlin/Object.extension.st deleted file mode 100644 index e18ef8b06..000000000 --- a/src-archive/Merlin/Object.extension.st +++ /dev/null @@ -1,13 +0,0 @@ -Extension { #name : #Object } - -{ #category : #'*Merlin' } -Object >> meValue [ - - ^ self -] - -{ #category : #'*Merlin' } -Object >> meValue: anArgument [ - - ^ self -] diff --git a/src-archive/Merlin/OptionPart.class.st b/src-archive/Merlin/OptionPart.class.st deleted file mode 100644 index 9724320cc..000000000 --- a/src-archive/Merlin/OptionPart.class.st +++ /dev/null @@ -1,45 +0,0 @@ -Class { - #name : #OptionPart, - #superclass : #WizardPart, - #instVars : [ - 'options', - 'optionsAndModels' - ], - #category : #'Merlin-Parts' -} - -{ #category : #accessing } -OptionPart >> modelOfOption: anOption [ - - ^ self optionsAndModels at: anOption -] - -{ #category : #accessing } -OptionPart >> options [ - - ^ options -] - -{ #category : #accessing } -OptionPart >> options: aCollection [ - - |tmpDictionary| - tmpDictionary := IdentityDictionary new. - options := (aCollection collect: [:each | each copy]). - self options do: [:anObject | - tmpDictionary at: anObject put: (MerlinOptionValueHolder new option: anObject; contents: true; addDependent: self; yourself) - ]. - self optionsAndModels: tmpDictionary -] - -{ #category : #accessing } -OptionPart >> optionsAndModels [ - - ^ optionsAndModels -] - -{ #category : #accessing } -OptionPart >> optionsAndModels: aDictionary [ - - optionsAndModels := aDictionary -] diff --git a/src-archive/Merlin/PaneAbstractLine.class.st b/src-archive/Merlin/PaneAbstractLine.class.st deleted file mode 100644 index a2e96a0a7..000000000 --- a/src-archive/Merlin/PaneAbstractLine.class.st +++ /dev/null @@ -1,175 +0,0 @@ -Class { - #name : #PaneAbstractLine, - #superclass : #Object, - #instVars : [ - 'parts', - 'pane', - 'subComponents', - 'groupBoxName' - ], - #category : #'Merlin-PartsLayout' -} - -{ #category : #'instance creation' } -PaneAbstractLine class >> fromPane: aWizardPane [ - - ^ super new pane: aWizardPane -] - -{ #category : #customizing } -PaneAbstractLine >> groupBoxName [ - - ^ groupBoxName -] - -{ #category : #customizing } -PaneAbstractLine >> inGroupboxNamed: aString [ - - "to display all elements of this PaneLine in a same groubBox named aString" - groupBoxName := aString. -] - -{ #category : #'initialize-release' } -PaneAbstractLine >> initialize [ - - subComponents := OrderedCollection new. -] - -{ #category : #'accessing - morph contents' } -PaneAbstractLine >> morphContents [ - - self groupBoxName isNil - ifTrue: [ - ^ self specificMorphContents - ] - ifFalse: [ - ^ self newGroupboxNamed: self groupBoxName With: self specificMorphContents - ]. -] - -{ #category : #'morph tools' } -PaneAbstractLine >> newColumnWith: aCollectionOfMorphElements [ - "use this method to create a new column in your block" - - - |answer| - answer := PanelMorph new - hResizing: #spaceFill; - vResizing: #spaceFill; - fillStyle: Color transparent; "non pane color tracking" - changeTableLayout; - cellInset: 8; yourself. - aCollectionOfMorphElements do: [:m | answer addMorphBack: m]. - ^answer -] - -{ #category : #'morph tools' } -PaneAbstractLine >> newGroupboxNamed: aString [ - - "Answer a groupbox with the given label." - ^ GroupboxMorph new - cornerStyle: #rounded; - hResizing: #spaceFill; - vResizing: #spaceFill; - label: aString; - yourself - - -] - -{ #category : #'morph tools' } -PaneAbstractLine >> newGroupboxNamed: aString With: aMorph [ - "Answer a groupbox with the given label and control." - ^ (self newGroupboxNamed: aString) - addContentMorph: aMorph; - yourself -] - -{ #category : #'morph tools' } -PaneAbstractLine >> newRowWith: aCollectionOfMorphElements [ - - "use this method to create a new row in your block" - - |answer| - answer := PanelMorph new - hResizing: #spaceFill; - vResizing: #shrinkWrap; - fillStyle: Color transparent; "non pane color tracking" - changeTableLayout; - listDirection: #leftToRight; - cellInset: 8; yourself. - aCollectionOfMorphElements do: [:m | answer addMorphBack: m]. - ^answer -] - -{ #category : #accessing } -PaneAbstractLine >> numberOfSubComponents [ - - ^ self subComponents size -] - -{ #category : #accessing } -PaneAbstractLine >> pane [ - - ^ pane -] - -{ #category : #accessing } -PaneAbstractLine >> pane: aWizardPane [ - - pane := aWizardPane -] - -{ #category : #accessing } -PaneAbstractLine >> removeSubComponentAt: anInteger [ - "remove the subComponent of this this 'AbstractLine' located at the position an integer " - "when we want to remove a complete row or column, we have to also un-associat the removed wizardParts with their information" - | componentToRemove | - componentToRemove := subComponents at: anInteger ifAbsent: [^ nil]. - componentToRemove unassociatePartsFromTheirPanes. - subComponents remove: componentToRemove. -] - -{ #category : #accessing } -PaneAbstractLine >> removeWithouUnassociateSubComponentAt: anInteger [ - "remove the subComponent of this this 'AbstractLine' located at the position an integer " - "using this method, the sucomponent will only be remove from the Morphic pane, in other words it will just become non visible, but will still be associated and registred in the wizard pane" - | componentToRemove | - componentToRemove := subComponents at: anInteger ifAbsent: [^ nil]. - subComponents remove: componentToRemove. -] - -{ #category : #accessing } -PaneAbstractLine >> renderer [ - - ^ self pane renderer -] - -{ #category : #'accessing - morph contents' } -PaneAbstractLine >> specificMorphContents [ - - "Each subclass has to return here a specific morphContents to return. (A row will have to dispatch its subComponents one beside the other, a Column: one under the other) " - - ^ self subclassResponsibility -] - -{ #category : #accessing } -PaneAbstractLine >> subComponentAt: anInteger [ - "return the subComponent of this this 'AbstractLine' located at the position an integer " - ^ subComponents at: anInteger -] - -{ #category : #accessing } -PaneAbstractLine >> subComponents [ - "return the subComponents of this this 'AbstractLine'. For a row, it will be a collection of PaneColumns composing this row. For a column. it will be a collection of PaneRows composing this row " - ^ subComponents -] - -{ #category : #accessing } -PaneAbstractLine >> unassociatePartsFromTheirPanes [ - - "when we want to remove a complete row or column, we have to also un-associat the removed wizardParts with their information" - self subComponents do: [:aPartOrAPaneLine | - aPartOrAPaneLine unassociatePartsFromTheirPanes. - ] -] diff --git a/src-archive/Merlin/PaneColumn.class.st b/src-archive/Merlin/PaneColumn.class.st deleted file mode 100644 index bc6ee646f..000000000 --- a/src-archive/Merlin/PaneColumn.class.st +++ /dev/null @@ -1,82 +0,0 @@ -Class { - #name : #PaneColumn, - #superclass : #PaneAbstractLine, - #category : #'Merlin-PartsLayout' -} - -{ #category : #'*Merlin-Rendering' } -PaneColumn >> merlinMorphWidget [ - - ^ nil -] - -{ #category : #'*Merlin-Rendering' } -PaneColumn >> merlinRendering [ - - ^ self renderer merlinColumnRenderingFor: self -] - -{ #category : #accessing } -PaneColumn >> removeRowAt: anInteger [ - - ^ self removeSubComponentAt: anInteger -] - -{ #category : #'*Merlin-Rendering' } -PaneColumn >> renderOnMerlinRenderer: aMerlinRenderer [ - - ^ aMerlinRenderer renderColumn: self -] - -{ #category : #'accessing - parts' } -PaneColumn >> row: aBlockOrAPart [ - - - (aBlockOrAPart isKindOf: WizardPart) - ifTrue: [ - subComponents add: aBlockOrAPart. - self pane setPart: aBlockOrAPart. - aBlockOrAPart paneLine: self - ]. - (aBlockOrAPart isKindOf: BlockClosure) - ifTrue: [ - |row| - row := (PaneRow fromPane: self pane). - "partGroups add: (aBlockOrAPart value: (PaneRow fromPane: self pane))" - aBlockOrAPart value: row. - subComponents add: row - - ]. - -] - -{ #category : #'accessing - parts' } -PaneColumn >> row: aWizardPart associatedTo: aSymbol [ - - subComponents add: aWizardPart. - self pane setPart: aWizardPart associatedTo: aSymbol. - aWizardPart paneLine: self. - -] - -{ #category : #'accessing - parts' } -PaneColumn >> row: aWizardPart associatedTo: aSymbol requiring: aCollectionOfSymbol [ - - subComponents add: aWizardPart. - self pane setPart: aWizardPart associatedTo: aSymbol requiring: aCollectionOfSymbol. - aWizardPart paneLine: self - -] - -{ #category : #accessing } -PaneColumn >> rowAt: anInteger [ - - ^ self subComponentAt: anInteger -] - -{ #category : #'accessing - morph contents' } -PaneColumn >> specificMorphContents [ - - ^ self newColumnWith: (self subComponents collect: [:aPaneLine | self newRowWith: {aPaneLine morphContents}]) - -] diff --git a/src-archive/Merlin/PaneColumn.extension.st b/src-archive/Merlin/PaneColumn.extension.st deleted file mode 100644 index a8508bfe3..000000000 --- a/src-archive/Merlin/PaneColumn.extension.st +++ /dev/null @@ -1,19 +0,0 @@ -Extension { #name : #PaneColumn } - -{ #category : #'*Merlin-Rendering' } -PaneColumn >> merlinMorphWidget [ - - ^ nil -] - -{ #category : #'*Merlin-Rendering' } -PaneColumn >> merlinRendering [ - - ^ self renderer merlinColumnRenderingFor: self -] - -{ #category : #'*Merlin-Rendering' } -PaneColumn >> renderOnMerlinRenderer: aMerlinRenderer [ - - ^ aMerlinRenderer renderColumn: self -] diff --git a/src-archive/Merlin/PaneRow.class.st b/src-archive/Merlin/PaneRow.class.st deleted file mode 100644 index 2feb411b8..000000000 --- a/src-archive/Merlin/PaneRow.class.st +++ /dev/null @@ -1,72 +0,0 @@ -Class { - #name : #PaneRow, - #superclass : #PaneAbstractLine, - #category : #'Merlin-PartsLayout' -} - -{ #category : #'accessing - parts' } -PaneRow >> column: aBlockOrAPart [ - - (aBlockOrAPart isKindOf: WizardPart) - ifTrue: [ - subComponents add: aBlockOrAPart. - self pane setPart: aBlockOrAPart. - aBlockOrAPart paneLine: self. - ]. - (aBlockOrAPart isKindOf: BlockClosure) - ifTrue: [ - |column| - column := PaneColumn fromPane: self pane. - aBlockOrAPart value: column. - subComponents add: column. - "partGroups add: (aBlockOrAPart value: (PaneColumn fromPane: self pane))" - ] -] - -{ #category : #'accessing - parts' } -PaneRow >> column: aWizardPart associatedTo: aSymbol [ - - subComponents add: aWizardPart. - self pane setPart: aWizardPart associatedTo: aSymbol. - aWizardPart paneLine: self. - -] - -{ #category : #'accessing - parts' } -PaneRow >> column: aWizardPart associatedTo: aSymbol requiring: aCollectionOfSymbols [ - - subComponents add: aWizardPart. - self pane setPart: aWizardPart associatedTo: aSymbol requiring: aCollectionOfSymbols. - aWizardPart paneLine: self. - -] - -{ #category : #accessing } -PaneRow >> columnAt: anInteger [ - - ^ self subComponentAt: anInteger -] - -{ #category : #'*Merlin-Rendering' } -PaneRow >> merlinRendering [ - - ^ self renderer merlinRowRenderingFor: self -] - -{ #category : #accessing } -PaneRow >> removeColumnAt: anInteger [ - - ^ self removeSubComponentAt: anInteger -] - -{ #category : #'*Merlin-Rendering' } -PaneRow >> renderOnMerlinRenderer: aMerlinRenderer [ - - ^ aMerlinRenderer renderRow: self -] - -{ #category : #'accessing - morph contents' } -PaneRow >> specificMorphContents [ - - ^ self newRowWith: (self subComponents collect: [:aPaneLine | self newColumnWith: {aPaneLine morphContents}]) -] diff --git a/src-archive/Merlin/PaneRow.extension.st b/src-archive/Merlin/PaneRow.extension.st deleted file mode 100644 index 60e737203..000000000 --- a/src-archive/Merlin/PaneRow.extension.st +++ /dev/null @@ -1,13 +0,0 @@ -Extension { #name : #PaneRow } - -{ #category : #'*Merlin-Rendering' } -PaneRow >> merlinRendering [ - - ^ self renderer merlinRowRenderingFor: self -] - -{ #category : #'*Merlin-Rendering' } -PaneRow >> renderOnMerlinRenderer: aMerlinRenderer [ - - ^ aMerlinRenderer renderRow: self -] diff --git a/src-archive/Merlin/RadioButtonsPart.class.st b/src-archive/Merlin/RadioButtonsPart.class.st deleted file mode 100644 index 8789e05c4..000000000 --- a/src-archive/Merlin/RadioButtonsPart.class.st +++ /dev/null @@ -1,23 +0,0 @@ -Class { - #name : #RadioButtonsPart, - #superclass : #SingleOptionAtLeastOneSelectionPart, - #instVars : [ - 'option' - ], - #category : #'Merlin-Parts' -} - -{ #category : #accessing } -RadioButtonsPart >> latePopulateContents [ - - (self valueOf: self defaultValue) - ifNotNil: [:aSymbol | - self selectOption: aSymbol - ] -] - -{ #category : #'*merlin-rendering' } -RadioButtonsPart >> merlinRendering [ - - ^ self renderer merlinRadioButtonsRenderingFor: self -] diff --git a/src-archive/Merlin/RadioButtonsPart.extension.st b/src-archive/Merlin/RadioButtonsPart.extension.st deleted file mode 100644 index 13aae6675..000000000 --- a/src-archive/Merlin/RadioButtonsPart.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #RadioButtonsPart } - -{ #category : #'*merlin-rendering' } -RadioButtonsPart >> merlinRendering [ - - ^ self renderer merlinRadioButtonsRenderingFor: self -] diff --git a/src-archive/Merlin/SaveChooseFilePart.class.st b/src-archive/Merlin/SaveChooseFilePart.class.st deleted file mode 100644 index 0fa17ed28..000000000 --- a/src-archive/Merlin/SaveChooseFilePart.class.st +++ /dev/null @@ -1,11 +0,0 @@ -Class { - #name : #SaveChooseFilePart, - #superclass : #ChooseFilePart, - #category : #'Merlin-Parts' -} - -{ #category : #'*Merlin-Rendering' } -SaveChooseFilePart >> merlinRendering [ - - ^ self renderer merlinSaveChooseFileRenderingFor: self -] diff --git a/src-archive/Merlin/SaveChooseFilePart.extension.st b/src-archive/Merlin/SaveChooseFilePart.extension.st deleted file mode 100644 index 1d240e55b..000000000 --- a/src-archive/Merlin/SaveChooseFilePart.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #SaveChooseFilePart } - -{ #category : #'*Merlin-Rendering' } -SaveChooseFilePart >> merlinRendering [ - - ^ self renderer merlinSaveChooseFileRenderingFor: self -] diff --git a/src-archive/Merlin/SingleOptionAtLeastOneSelectionPart.class.st b/src-archive/Merlin/SingleOptionAtLeastOneSelectionPart.class.st deleted file mode 100644 index 210716187..000000000 --- a/src-archive/Merlin/SingleOptionAtLeastOneSelectionPart.class.st +++ /dev/null @@ -1,24 +0,0 @@ -Class { - #name : #SingleOptionAtLeastOneSelectionPart, - #superclass : #SingleOptionPart, - #category : #'Merlin-Parts' -} - -{ #category : #accessing } -SingleOptionAtLeastOneSelectionPart >> options: aCollectionOfOptions [ - - super options: aCollectionOfOptions. - self selectOption: aCollectionOfOptions anyOne -] - -{ #category : #updating } -SingleOptionAtLeastOneSelectionPart >> update: aChange [ - - (self options includes: aChange) ifTrue: [ - "(self modelOf: aChange) contents - ifTrue: [self selectOption: aChange] - ifFalse: []." - self selectOption: aChange - - ] -] diff --git a/src-archive/Merlin/SingleOptionPart.class.st b/src-archive/Merlin/SingleOptionPart.class.st deleted file mode 100644 index b917014ee..000000000 --- a/src-archive/Merlin/SingleOptionPart.class.st +++ /dev/null @@ -1,73 +0,0 @@ -Class { - #name : #SingleOptionPart, - #superclass : #OptionPart, - #instVars : [ - 'selectedOption', - 'formatBlock' - ], - #category : #'Merlin-Parts' -} - -{ #category : #'accessing - wizard management' } -SingleOptionPart >> format: aBlock [ - - "use this method the string representationof the options. aBlock is a one argument block (representing the current option to format). It should return a string that will be the representation of the option" - formatBlock := aBlock -] - -{ #category : #'accessing - wizard management' } -SingleOptionPart >> formatBlock [ - - ^ formatBlock ifNil: [formatBlock := [:option | option ]] -] - -{ #category : #'accessing - wizard management' } -SingleOptionPart >> outputValue [ - - ^ self selectedOption -] - -{ #category : #accessing } -SingleOptionPart >> selectOption: anOption [ - - self optionsAndModels keysAndValuesDo: [:tmpOption :aModel | - tmpOption = anOption - ifTrue: [ - aModel safeContents: true. - self selectedOption: anOption - ] - ifFalse: [ - aModel safeContents: false - ] - ] -] - -{ #category : #accessing } -SingleOptionPart >> selectedOption [ - - ^ selectedOption -] - -{ #category : #accessing } -SingleOptionPart >> selectedOption: anOption [ - - selectedOption := anOption. - self hasChanged -] - -{ #category : #accessing } -SingleOptionPart >> unselectOption: anOption [ - - self selectedOption: nil. - self hasChanged. -] - -{ #category : #updating } -SingleOptionPart >> update: aChange [ - - (self options includes: aChange) ifTrue: [ - (self modelOfOption: aChange) contents - ifTrue: [self selectOption: aChange] - ifFalse: [self unselectOption: aChange] - ] -] diff --git a/src-archive/Merlin/TextEditorPart.class.st b/src-archive/Merlin/TextEditorPart.class.st deleted file mode 100644 index a57700486..000000000 --- a/src-archive/Merlin/TextEditorPart.class.st +++ /dev/null @@ -1,90 +0,0 @@ -Class { - #name : #TextEditorPart, - #superclass : #WizardPart, - #instVars : [ - 'contents', - 'textEditorContents', - 'horizontalSize', - 'verticalSize' - ], - #category : #'Merlin-Parts' -} - -{ #category : #'instance creation' } -TextEditorPart class >> inGroupboxNamed: aString [ - - ^ super new initializeInGroupboxNamed: aString; yourself. -] - -{ #category : #'instance creation' } -TextEditorPart class >> inGroupboxNamed: aString defaultText: anotherString [ - - ^ super new initializeInGroupboxNamed: aString withDefaultText: anotherString ; yourself. -] - -{ #category : #accessing } -TextEditorPart >> horizontalSize [ - - ^ horizontalSize -] - -{ #category : #accessing } -TextEditorPart >> horizontalSize: anInteger [ - - horizontalSize := anInteger -] - -{ #category : #accessing } -TextEditorPart >> latePopulateContents [ - | default | - default := self valueOf: self defaultValue. - default ifNotNil: [ :aString | self textEditorContents: aString ] -] - -{ #category : #'*Merlin-Rendering' } -TextEditorPart >> merlinRendering [ - - ^ self renderer merlinTextEditorRenderingFor: self -] - -{ #category : #'accessing - wizard mangement' } -TextEditorPart >> outputValue [ - - "^ self textEditorContents." - ^ textEditorContents -] - -{ #category : #'text editor control' } -TextEditorPart >> textEditorContents [ - ^textEditorContents -] - -{ #category : #'text editor control' } -TextEditorPart >> textEditorContents: newContents [ - textEditorContents := newContents. - self changed: #textEditorContents -] - -{ #category : #accessing } -TextEditorPart >> textEditorHorizontalSize: anInteger [ - - self horizontalSize: anInteger. -] - -{ #category : #accessing } -TextEditorPart >> textEditorVerticalSize: anInteger [ - - self verticalSize: anInteger. -] - -{ #category : #accessing } -TextEditorPart >> verticalSize [ - - ^ verticalSize -] - -{ #category : #accessing } -TextEditorPart >> verticalSize: anInteger [ - - verticalSize := anInteger -] diff --git a/src-archive/Merlin/TextEditorPart.extension.st b/src-archive/Merlin/TextEditorPart.extension.st deleted file mode 100644 index a3103df6b..000000000 --- a/src-archive/Merlin/TextEditorPart.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #TextEditorPart } - -{ #category : #'*Merlin-Rendering' } -TextEditorPart >> merlinRendering [ - - ^ self renderer merlinTextEditorRenderingFor: self -] diff --git a/src-archive/Merlin/TextFieldPart.class.st b/src-archive/Merlin/TextFieldPart.class.st deleted file mode 100644 index b87704e08..000000000 --- a/src-archive/Merlin/TextFieldPart.class.st +++ /dev/null @@ -1,164 +0,0 @@ -Class { - #name : #TextFieldPart, - #superclass : #WizardPart, - #instVars : [ - 'textEntryContents', - 'useRequiredInputAsDefault', - 'defaultBlock', - 'prefix', - 'suffix', - 'returnSuffixAndPrefix', - 'horizontalSize' - ], - #category : #'Merlin-Parts' -} - -{ #category : #'instance creation' } -TextFieldPart class >> inGroupboxNamed: aString [ - - ^ super new inGroupboxNamed: aString. -] - -{ #category : #accessing } -TextFieldPart >> defaultBlock: aBlock [ - - "this method enable to compute the default text by computing the value of a block. Using a block is usefull, for example, to specify required value in its contents. Since this block will only be evaluated when this part will retrieve its required inputs, all will works well" - defaultBlock := aBlock. -] - -{ #category : #accessing } -TextFieldPart >> horizontalSize [ - - ^ horizontalSize -] - -{ #category : #accessing } -TextFieldPart >> horizontalSize: anInteger [ - - horizontalSize := anInteger -] - -{ #category : #'initialize-release' } -TextFieldPart >> initialize [ - - super initialize. - prefix := ''. - suffix := ''. - returnSuffixAndPrefix := false. - -] - -{ #category : #'initialize-release' } -TextFieldPart >> initialize: defaultText [ - - self initialize. - self textEntryContents: defaultText - -] - -{ #category : #accessing } -TextFieldPart >> initializeDefault [ - | default | - default := self valueOf: self defaultValue. - default ifNotNil: [ :aString | self textEntryContents: aString ] -] - -{ #category : #accessing } -TextFieldPart >> latePopulateContents [ - - self initializeDefault - - -] - -{ #category : #'*Merlin-Rendering' } -TextFieldPart >> merlinRendering [ - - ^ self renderer merlinTextFieldRenderingFor: self -] - -{ #category : #'accessing - wizard mangement' } -TextFieldPart >> outputValue [ - - "this method is an abstract method as only the subclass itself know what is the information to send to the WizardPane which will send it to the wizarControl " - "textField acceptTextInModel." - "^ textEntryContents ." - "^textField textMorph asText" - - returnSuffixAndPrefix - ifTrue: [ - ^ prefix, self textEntryContents , suffix. - ] - ifFalse: [ - ^ self textEntryContents - ] - -] - -{ #category : #accessing } -TextFieldPart >> prefix [ - - ^ prefix -] - -{ #category : #accessing } -TextFieldPart >> prefix: aString [ - - prefix := aString. -] - -{ #category : #'accessing - wizard mangement' } -TextFieldPart >> retrieveInputRequired [ - "this method is an abstract method as only the subclass itself know what to do with the input that it needs to make its work " - "by default do nothing" - "make here all the thing required to build or make run this wizard part. This method will be clalled by wizardPane before opening the 'page'" - - - -] - -{ #category : #accessing } -TextFieldPart >> returnSuffixAndPrefix: trueOrFalse [ - - returnSuffixAndPrefix := trueOrFalse. -] - -{ #category : #accessing } -TextFieldPart >> suffix [ - - ^ suffix -] - -{ #category : #accessing } -TextFieldPart >> suffix: aString [ - - suffix := aString. -] - -{ #category : #'text entry control' } -TextFieldPart >> textEntryContents [ - "return the contents of the text entry " - ^ textEntryContents -] - -{ #category : #'text entry control' } -TextFieldPart >> textEntryContents: newContents [ - "set the content of the text entry " - textEntryContents := newContents. - wizardPane ifNotNil: - [self hasChanged ]. - self changed: #textEntryContents. - -] - -{ #category : #accessing } -TextFieldPart >> textFieldHorizontalSize: anInteger [ - - self horizontalSize: anInteger. . -] - -{ #category : #accessing } -TextFieldPart >> useRequiredInputAsDefault: trueOrFalse [ - - useRequiredInputAsDefault := trueOrFalse. -] diff --git a/src-archive/Merlin/TextFieldPart.extension.st b/src-archive/Merlin/TextFieldPart.extension.st deleted file mode 100644 index 423a1babc..000000000 --- a/src-archive/Merlin/TextFieldPart.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #TextFieldPart } - -{ #category : #'*Merlin-Rendering' } -TextFieldPart >> merlinRendering [ - - ^ self renderer merlinTextFieldRenderingFor: self -] diff --git a/src-archive/Merlin/TextPart.class.st b/src-archive/Merlin/TextPart.class.st deleted file mode 100644 index be3357436..000000000 --- a/src-archive/Merlin/TextPart.class.st +++ /dev/null @@ -1,73 +0,0 @@ -Class { - #name : #TextPart, - #superclass : #WizardPart, - #instVars : [ - 'text', - 'partValue', - 'formatBlock' - ], - #category : #'Merlin-Parts' -} - -{ #category : #'instance creation' } -TextPart class >> on: blockOrStringText inGroupBoxNamed: groupBoxName [ - - ^ super new defaultValue: blockOrStringText; inGroupboxNamed: groupBoxName;yourself. -] - -{ #category : #accessing } -TextPart >> format: aBlock [ - "set to a block to make the input object more presentable" - formatBlock := aBlock -] - -{ #category : #accessing } -TextPart >> formatBlock [ - ^ formatBlock ifNil: [formatBlock := [:option | option ]] -] - -{ #category : #private } -TextPart >> latePopulateContents [ - - - partValue isNil - ifFalse: [ - partValue isBlock - ifTrue: [ - self text: (partValue value: self requiredInputs). - ] - ifFalse: [ - self text: partValue - ]. - ] - ifTrue: [ - |default| - default := defaultValue meValue: self requiredInputs. - default ifNotNil: [self text: default.] - ] - -] - -{ #category : #'*Merlin-Rendering' } -TextPart >> merlinRendering [ - - ^ self renderer merlinTextRenderingFor: self. -] - -{ #category : #'accessing - wizard mangement' } -TextPart >> outputValue [ - - ^ self text -] - -{ #category : #accessing } -TextPart >> text [ - - ^ text ifNil: [''] -] - -{ #category : #accessing } -TextPart >> text: aString [ - - text := aString. -] diff --git a/src-archive/Merlin/TextPart.extension.st b/src-archive/Merlin/TextPart.extension.st deleted file mode 100644 index 3688b42dc..000000000 --- a/src-archive/Merlin/TextPart.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #TextPart } - -{ #category : #'*Merlin-Rendering' } -TextPart >> merlinRendering [ - - ^ self renderer merlinTextRenderingFor: self. -] diff --git a/src-archive/Merlin/WizardControl.class.st b/src-archive/Merlin/WizardControl.class.st deleted file mode 100644 index 91f6cb739..000000000 --- a/src-archive/Merlin/WizardControl.class.st +++ /dev/null @@ -1,274 +0,0 @@ -" -A WizardControl is the object controling the differents panes (WizardPane) that will be displayed in a Wizard. It make all the transition between those panes when button like 'next' or 'previous' are pressed. Those transitions are composed by opening and closing the panes but also by managing their inputs and outputs. Values of those outputs (representing the information you want to retrieve at the end of the wizard operation) are all stored in the WizardControl. - -Instance Variables - builder: - currentPane: - dialogWindow: - - wizardInformations: - wizardPanes: - -builder - - the main window (common to all panes) in which we plugg a dialogWindow - -currentPane - - an index pointing on the current displayed pane. - -dialogWindow - - in which panes will position their elements (WizardPart). The dialog window is also common to all panes so that the wizard panes windows stay at the same position. (Create a new dialog window for each pane open a window at different positions each times) - - - -wizardInformations - - A dictionary to memorize output from the different panes. The keys of this dictionary are define when you create a WizardPart (object that composed a WizardPane). - -wizardPanes - - the different panes that composed a wizard. Those panes will be displayed in the order specify by this OrderedCollection. - -" -Class { - #name : #WizardControl, - #superclass : #Object, - #instVars : [ - 'currentPane', - 'wizardPanes', - 'wizardInformations', - 'branches', - 'finalActionBlock', - 'renderer' - ], - #category : #'Merlin-Core' -} - -{ #category : #'addition / removal' } -WizardControl >> addBranch [ - - self branches add: OrderedCollection new -] - -{ #category : #'addition / removal' } -WizardControl >> addPane: aWizardPane [ - "add the WizardPane aWizardPane at the end of the panes list of this wizard control. Therefore, this pane will be the last one to be displayed" - - aWizardPane wizardControl: self. - wizardPanes add: aWizardPane. - ^ aWizardPane - -] - -{ #category : #accessing } -WizardControl >> atEndDo: aBlock [ - - "this is the way to programatically set an action to execute at the end of the wizard panes transitions. aBlock has to be a 'one-argument' block, refering to the wizardInformations dictionary (linking each output of the wizard to its key)." - finalActionBlock := aBlock. -] - -{ #category : #accessing } -WizardControl >> branches [ - - ^ branches -] - -{ #category : #accessing } -WizardControl >> currentPane [ - - ^ self wizardPanes at: currentPane. -] - -{ #category : #accessing } -WizardControl >> currentPaneIndex [ - - ^ currentPane -] - -{ #category : #accessing } -WizardControl >> finalActionBlock [ - - ^ finalActionBlock -] - -{ #category : #testing } -WizardControl >> hasFinished [ - - ^ self currentPaneIndex > self size -] - -{ #category : #accessing } -WizardControl >> information: aSymbol withValue: value [ - "set the value of the information designed by aSymbol. It is used by a pane when a next button or a terminate button is clicked to spread its output information" - - wizardInformations - at: aSymbol - put: value -] - -{ #category : #'initialize-release' } -WizardControl >> initialize [ - - super initialize. - wizardInformations := Dictionary new. - branches := OrderedCollection new add: OrderedCollection new; yourself. - wizardPanes := branches at: 1. - currentPane :=1. - - - -] - -{ #category : #open } -WizardControl >> open [ - "launch the wizard system by opening the first wizard pane." - - wizardPanes isEmpty ifTrue: [ ^ self ]. - currentPane := 1. - (wizardPanes at: currentPane) doOpen. - self renderer open: self. -] - -{ #category : #obsolete } -WizardControl >> openFirstWizardPane [ - "launch the wizard system by opening the first wizard pane." - self deprecated: 'Use open instead'. - self open. -] - -{ #category : #'wizard panes transition' } -WizardControl >> performNextButtonAction [ - "this method is run when a next button is pressed" - - |tmpCurrentPane tmpProblems| - tmpCurrentPane := wizardPanes at: currentPane. - tmpProblems := OrderedCollection new. - tmpCurrentPane conditions keysAndValuesDo: [:aString :aBlock | - (aBlock value: self wizardInformations) ifFalse: [ - tmpProblems add: aString - ] - ]. - tmpProblems isEmpty - ifTrue: [ - tmpCurrentPane failingConditions: #(). - (wizardPanes at: currentPane) doClose. - currentPane := currentPane + 1. - (wizardPanes at: currentPane ) doOpen. - ] - ifFalse: [ - tmpCurrentPane failingConditions: tmpProblems - ]. - -] - -{ #category : #'wizard panes transition' } -WizardControl >> performPreviousButtonAction [ - "this method is run when a previous button is pressed" - - (wizardPanes at: currentPane) doClose. - currentPane := currentPane - 1. - (wizardPanes at: currentPane ) doOpen. -] - -{ #category : #'wizard panes transition' } -WizardControl >> performTerminateButtonAction [ - "by default, just close the last current pane. Override this method if you want to create a subclass of WizardControl making a specific action" - |tmpCurrentPane tmpProblems| - tmpCurrentPane := wizardPanes at: currentPane. - tmpProblems := OrderedCollection new. - tmpCurrentPane conditions keysAndValuesDo: [:aString :aBlock | - (aBlock value: self wizardInformations) ifFalse: [ - tmpProblems add: aString - ] - ]. - tmpProblems isEmpty - ifTrue: [ - (wizardPanes at: currentPane) doClose. - currentPane := currentPane + 1. - self finalActionBlock ifNotNil: [ - self finalActionBlock value: self wizardInformations - ]. - ] - ifFalse: [ - tmpCurrentPane failingConditions: tmpProblems - ]. - - -] - -{ #category : #'addition / removal' } -WizardControl >> removePaneAt: anIndex [ - - |tmpPane| - self wizardPanes size < anIndex ifTrue: [ - ^ Error signal: 'Trying to remove a non-existant pane' - ]. - tmpPane := self wizardPanes at: anIndex. - ^ self wizardPanes remove: tmpPane. - - -] - -{ #category : #accessing } -WizardControl >> renderer [ - - ^ renderer ifNil: [^ renderer := MerlinMorphicWizardRenderer new]. -] - -{ #category : #accessing } -WizardControl >> renderer: aMerlinRenderer [ - - renderer := aMerlinRenderer -] - -{ #category : #'addition / removal' } -WizardControl >> selectBranch: anInteger [ - - self wizardPanes: (self branches at: anInteger ) -] - -{ #category : #accessing } -WizardControl >> selectedBranch [ - - ^ self branches indexOf: self wizardPanes. -] - -{ #category : #accessing } -WizardControl >> size [ - - ^ self wizardPanes size -] - -{ #category : #open } -WizardControl >> start [ - "launch the wizard system but does not open any UI window" - - wizardPanes isEmpty ifTrue: [ ^ self ]. - currentPane := 1. - (wizardPanes at: currentPane) doOpen. -] - -{ #category : #accessing } -WizardControl >> valueOfInformation: aSymbol [ - "return the value of the output information named aSymbol" - - ^ wizardInformations at: aSymbol. -] - -{ #category : #accessing } -WizardControl >> wizardInformations [ - - "return a Dictionary containing the ids of the informations retrieved by the wizard and their values" - - ^ wizardInformations -] - -{ #category : #accessing } -WizardControl >> wizardPanes [ - - ^ wizardPanes -] - -{ #category : #accessing } -WizardControl >> wizardPanes: anOrderedCollection [ - - "set all the wizard panes controled by this wizard control. Those panes will be display in the same order than the one of anOrderedCollection" - ^wizardPanes := anOrderedCollection -] diff --git a/src-archive/Merlin/WizardFirstPane.class.st b/src-archive/Merlin/WizardFirstPane.class.st deleted file mode 100644 index e6df597bc..000000000 --- a/src-archive/Merlin/WizardFirstPane.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #WizardFirstPane, - #superclass : #WizardPane, - #instVars : [ - 'nextButton' - ], - #category : #'Merlin-Panes' -} - -{ #category : #'initialize-release' } -WizardFirstPane >> initialize [ - - super initialize. - - -] - -{ #category : #'*merlin-rendering' } -WizardFirstPane >> merlinSpecificRenderer [ - - ^ MerlinMorphicFirstPaneRenderer new -] - -{ #category : #'*merlin-rendering' } -WizardFirstPane >> renderOnMerlinRenderer: aMerlinRenderer [ - - ^ aMerlinRenderer renderMerlinFirstPane: self -] diff --git a/src-archive/Merlin/WizardFirstPane.extension.st b/src-archive/Merlin/WizardFirstPane.extension.st deleted file mode 100644 index 2940f9077..000000000 --- a/src-archive/Merlin/WizardFirstPane.extension.st +++ /dev/null @@ -1,13 +0,0 @@ -Extension { #name : #WizardFirstPane } - -{ #category : #'*merlin-rendering' } -WizardFirstPane >> merlinSpecificRenderer [ - - ^ MerlinMorphicFirstPaneRenderer new -] - -{ #category : #'*merlin-rendering' } -WizardFirstPane >> renderOnMerlinRenderer: aMerlinRenderer [ - - ^ aMerlinRenderer renderMerlinFirstPane: self -] diff --git a/src-archive/Merlin/WizardLastPane.class.st b/src-archive/Merlin/WizardLastPane.class.st deleted file mode 100644 index e2ba0dd70..000000000 --- a/src-archive/Merlin/WizardLastPane.class.st +++ /dev/null @@ -1,27 +0,0 @@ -Class { - #name : #WizardLastPane, - #superclass : #WizardPane, - #instVars : [ - 'terminateButton' - ], - #category : #'Merlin-Panes' -} - -{ #category : #'*merlin-rendering' } -WizardLastPane >> merlinSpecificRenderer [ - ^ MerlinMorphicLastPaneRenderer new -] - -{ #category : #'*merlin-rendering' } -WizardLastPane >> renderOnMerlinRenderer: aMerlinRenderer [ - - ^ aMerlinRenderer renderMerlinLastPane: self -] - -{ #category : #actions } -WizardLastPane >> terminateButtonAction [ - "action executed when the terminate button is pressed" - - self retrievePartsOutputs. - self wizardControl performTerminateButtonAction -] diff --git a/src-archive/Merlin/WizardLastPane.extension.st b/src-archive/Merlin/WizardLastPane.extension.st deleted file mode 100644 index 46b0abd7f..000000000 --- a/src-archive/Merlin/WizardLastPane.extension.st +++ /dev/null @@ -1,12 +0,0 @@ -Extension { #name : #WizardLastPane } - -{ #category : #'*merlin-rendering' } -WizardLastPane >> merlinSpecificRenderer [ - ^ MerlinMorphicLastPaneRenderer new -] - -{ #category : #'*merlin-rendering' } -WizardLastPane >> renderOnMerlinRenderer: aMerlinRenderer [ - - ^ aMerlinRenderer renderMerlinLastPane: self -] diff --git a/src-archive/Merlin/WizardMessagePane.class.st b/src-archive/Merlin/WizardMessagePane.class.st deleted file mode 100644 index 11abd3082..000000000 --- a/src-archive/Merlin/WizardMessagePane.class.st +++ /dev/null @@ -1,12 +0,0 @@ -Class { - #name : #WizardMessagePane, - #superclass : #WizardPane, - #category : #'Merlin-Panes' -} - -{ #category : #'private - accessing' } -WizardMessagePane >> displayButtons [ - "add buttons to the dialogWindow. each subclass now which buttons have to be added to their dialogWindow" - - self buttons: {self newButtonNamed: 'Ok' withAction: #close} -] diff --git a/src-archive/Merlin/WizardMiddlePane.class.st b/src-archive/Merlin/WizardMiddlePane.class.st deleted file mode 100644 index ff03d950e..000000000 --- a/src-archive/Merlin/WizardMiddlePane.class.st +++ /dev/null @@ -1,20 +0,0 @@ -Class { - #name : #WizardMiddlePane, - #superclass : #WizardPane, - #instVars : [ - 'nextButton' - ], - #category : #'Merlin-Panes' -} - -{ #category : #'*merlin-rendering' } -WizardMiddlePane >> merlinSpecificRenderer [ - - ^ MerlinMorphicMiddlePaneRenderer new . -] - -{ #category : #'*merlin-rendering' } -WizardMiddlePane >> renderOnMerlinRenderer: aMerlinRenderer [ - - ^ aMerlinRenderer renderMerlinMiddlePane: self -] diff --git a/src-archive/Merlin/WizardMiddlePane.extension.st b/src-archive/Merlin/WizardMiddlePane.extension.st deleted file mode 100644 index f1aece06f..000000000 --- a/src-archive/Merlin/WizardMiddlePane.extension.st +++ /dev/null @@ -1,13 +0,0 @@ -Extension { #name : #WizardMiddlePane } - -{ #category : #'*merlin-rendering' } -WizardMiddlePane >> merlinSpecificRenderer [ - - ^ MerlinMorphicMiddlePaneRenderer new . -] - -{ #category : #'*merlin-rendering' } -WizardMiddlePane >> renderOnMerlinRenderer: aMerlinRenderer [ - - ^ aMerlinRenderer renderMerlinMiddlePane: self -] diff --git a/src-archive/Merlin/WizardPane.class.st b/src-archive/Merlin/WizardPane.class.st deleted file mode 100644 index c5e1181cf..000000000 --- a/src-archive/Merlin/WizardPane.class.st +++ /dev/null @@ -1,742 +0,0 @@ -" -A WizardPane is an abstract class which represents a 'page' that will be displayed in a Wizard. A wizardPane doesn't contain any morph imformation itself: It is composed by several WizardParts, each one containing a specific morph contents. A wizardpane only provide the common set of buttons to naviguate between the panes ('next', 'previous' , 'cancel' , 'terminate' ). It also make the transmission between the wizardParts input and outputs and the WizardControl in which the values are stored. - -Instance Variables - partsAndInformationsAssociated: - partsAndRequiredInformations: - cancelButton: - contents: - wizardParts: - wizardControl: - -partsAndInformationsAssociated - - a dictionary to store the differents wizardParts and the SINGLE output identifiant associated. - -partsAndRequiredInformations - - a dictionary to store the differents wizardParts and the inputs identifiants required by this WizardPart . - -wizardParts - - the differents WizardParts that composed this WizardPane - -wizardControl - - the WizardControl controlling this pane. - -" -Class { - #name : #WizardPane, - #superclass : #Object, - #instVars : [ - 'wizardControl', - 'cancelButton', - 'partsAndInformationsAssociated', - 'partsAndRequiredInformations', - 'wizardParts', - 'name', - 'displayLayout', - 'mainPaneLine', - 'isOpen', - 'renderer', - 'conditions', - 'failingConditions' - ], - #category : #'Merlin-Core' -} - -{ #category : #'instance creation' } -WizardPane class >> named: aString [ - - ^ super new initialize ; name: aString ;yourself . -] - -{ #category : #updating } -WizardPane >> adaptSize [ - "Adapt the size of the window to its contents. Usefull when you dynamically add elements to your window. (In fact simply re-open the window)" - - "self builder openModal: self dialogWindow." -] - -{ #category : #'addition-removal' } -WizardPane >> addPart: aWizardPart associatedTo: aSymbol [ - "when a wizard part is added to a WizardPane, an output is associated to it. Each part is associate to only one output" - - wizardParts add: aWizardPart. - aWizardPart wizardPane: self. - (mainPaneLine ifNil: [mainPaneLine := PaneColumn fromPane: self]) - row: aWizardPart. - partsAndInformationsAssociated - at: aWizardPart - put: aSymbol. -] - -{ #category : #'addition-removal' } -WizardPane >> addPart: aWizardPart associatedTo: aSymbol requiring: aCollectionOfSymbols [ - "when a wizard part is added to a WizardPane, an output is associated to it. Each part is associate to only one output but can require several inputs specified by aCollectionOfSymbols" - - wizardParts add: aWizardPart. - aWizardPart wizardPane: self. - (mainPaneLine ifNil: [mainPaneLine := PaneColumn fromPane: self]) - row: aWizardPart. - partsAndInformationsAssociated - at: aWizardPart - put: aSymbol. - partsAndRequiredInformations - at: aWizardPart - put: aCollectionOfSymbols. - -] - -{ #category : #actions } -WizardPane >> cancelButtonAction [ - "represent the action to execute when the cancel button is pressed" - - -] - -{ #category : #actions } -WizardPane >> checkForEnablingNextButton [ - "this method is called each time a wizard part change is state about enabling or not the next button. Just look if all wizard parts are 'ok'" - - wizardParts detect: [:each | each enableNextButtonValue = false ] ifNone: [^ self enableNextButton ]. - self disableNextButton. -] - -{ #category : #'addition-removal' } -WizardPane >> column: aBlockOrAPart [ - mainPaneLine - ifNotNil: [ :aPaneRow | aPaneRow column: aBlockOrAPart ] - ifNil: [ mainPaneLine := PaneRow fromPane: self. - mainPaneLine column: aBlockOrAPart ] -] - -{ #category : #'addition-removal' } -WizardPane >> column: aWizardPart associatedTo: aSymbol [ - - "use this method to add a part (using aBlockOrAPart as a WizardPart) or several parts (using aBlockOrAPart as a block ([:row | row column: aPart ; column: anotherPart]) ) to the pane, in a new row. You should always manage the layout of the pane in the same way: you decide to divide the pane in rows and for each row you can add several columns. In this case you will always use a method begining with 'way'. If you decide to divide you pane in columns, you will always use a method begining with: 'column:'. If you try another way to dispatch the parts, the order you might want will not be guaranteed " - - mainPaneLine - ifNotNil: [:aPaneRow | - aPaneRow column: aWizardPart - ] - ifNil: [ - mainPaneLine := PaneRow fromPane: self. - mainPaneLine column: aWizardPart - ]. - - "we now focus on the information management (made by the is wizardPane itself): " - self setPart: aWizardPart associatedTo: aSymbol - - -] - -{ #category : #'addition-removal' } -WizardPane >> column: aWizardPart associatedTo: aSymbol requiring: aCollectionOfSymbols [ - - "use this method to add a part (using aBlockOrAPart as a WizardPart) or several parts (using aBlockOrAPart as a block ([:row | row column: aPart ; column: anotherPart]) ) to the pane, in a new row. You should always manage the layout of the pane in the same way: you decide to divide the pane in rows and for each row you can add several columns. In this case you will always use a method begining with 'way'. If you decide to divide you pane in columns, you will always use a method begining with: 'column:'. If you try another way to dispatch the parts, the order you might want will not be guaranteed " - - mainPaneLine - ifNotNil: [:aPaneRow | - aPaneRow column: aWizardPart - ] - ifNil: [ - mainPaneLine := PaneRow fromPane: self. - mainPaneLine column: aWizardPart - ]. - - "we now focus on the information management (made by the is wizardPane itself): " - self setPart: aWizardPart associatedTo: aSymbol requiring: aCollectionOfSymbols - - -] - -{ #category : #'addition-removal' } -WizardPane >> column: aWizardPart requiring: aCollectionOfSymbols [ - - "use this method to add a part (using aBlockOrAPart as a WizardPart) or several parts (using aBlockOrAPart as a block ([:row | row column: aPart ; column: anotherPart]) ) to the pane, in a new row. You should always manage the layout of the pane in the same way: you decide to divide the pane in rows and for each row you can add several columns. In this case you will always use a method begining with 'way'. If you decide to divide you pane in columns, you will always use a method begining with: 'column:'. If you try another way to dispatch the parts, the order you might want will not be guaranteed " - - mainPaneLine - ifNotNil: [:aPaneRow | - aPaneRow column: aWizardPart - ] - ifNil: [ - mainPaneLine := PaneRow fromPane: self. - mainPaneLine column: aWizardPart - ]. - - "we now focus on the information management (made by the is wizardPane itself): " - self setPart: aWizardPart requiring: aCollectionOfSymbols - - -] - -{ #category : #accessing } -WizardPane >> condition: aBlock named: aString [ - - "User should use this method to specify a one argument block (pointing on the outputValues dictionary of the wizard), to specify a boolean condition that should return true to enable the next/finish button " - self conditions at: aString put: aBlock -] - -{ #category : #accessing } -WizardPane >> conditions [ - - ^ conditions ifNil: [conditions := Dictionary new]. -] - -{ #category : #'private - accessing' } -WizardPane >> contents: aCollectionOfMorphElements [ - "fill in the morph contents of the dialog window with morphs from aCollectionOfMorpElements. aCollectionOfMorpElements represent the morph contents of all wizard parts composing this wizardPane. Used in the method open. Each element will be diplayed one under the other" - - "|contents| - contents := PanelMorph new - hResizing: #spaceFill; - vResizing: #spaceFill; - fillStyle: Color transparent; - changeTableLayout; - cellInset: 8; yourself. - - aCollectionOfMorphElements do: [:each | contents addMorphBack: each]. - self dialogWindow contentMorph: contents." - |contents| - (displayLayout = #column) - ifTrue: [ - contents := self newRowWith: aCollectionOfMorphElements . - ] - ifFalse: [ - contents := self newColumnWith: aCollectionOfMorphElements . - ]. - self dialogWindow contentMorph: contents. - ^contents - - -] - -{ #category : #actions } -WizardPane >> disableNextButton [ - "by default (if no next button is defined, do nothing)" -] - -{ #category : #actions } -WizardPane >> distributeRequiredInputs [ - wizardParts do: [:wizardPart | - (partsAndRequiredInformations at: wizardPart ifAbsent: [nil]) ifNotNil: [ :collOfSymbols | - collOfSymbols do: [:symbol | - self retrieveOutput: symbol. - wizardPart requiredInputsAt: symbol put: (wizardControl wizardInformations at: symbol ifAbsent: [nil])]. - wizardPart retrieveInputRequired]]. - -] - -{ #category : #actions } -WizardPane >> distributeRequiredInputsOf: aWizardPart [ - - - (partsAndRequiredInformations at: aWizardPart ifAbsent: [ ^self ]) do: [:symbol | - "in a first time, we make sure that the part associated to the required input transmit its outputValue. Like that, we are sure that the information is present at the moment we want to acceed it. " - self retrieveOutput: symbol. - "then we can distribute this value. An error can occure if you have not set your parts to the pane in a right order" - aWizardPart requiredInputsAt: symbol put: (wizardControl wizardInformations at: symbol) - ]. - aWizardPart retrieveInputRequired . - -] - -{ #category : #'window control' } -WizardPane >> doClose [ - - isOpen := false. - self doCloseWizardParts. -] - -{ #category : #'window control' } -WizardPane >> doCloseWizardParts [ - - self wizardParts do: [:aWizardPart | - aWizardPart isOpen: false. - ] - - - -] - -{ #category : #'window control' } -WizardPane >> doOpen [ - "open this pane. To do that, we make sure that all the WizardParts retrieve the inputs they require" - - - self distributeRequiredInputs. - "now we populate the morph contents of each wizard part. To do that, we work on a copy of wizardPart. Indeed, populate the morph content pf a part can lauch a callback, which can add some parts to this pane. To avoid loosing informations (by iterating an a growing collection), we first iterate on a copy, and then do the job for the remaining parts " - wizardParts copy do: [ :each | - self distributeRequiredInputsOf: each. - each retrieveInputRequired. - self populateContentsOf: each. - "self retrieveOutputOf: each" - ]. - self populatePartsRemaining. - "self buildDialogWindow. - self displayButtons. - self checkForEnablingNextButton." - "wizardControl dialogWindowName: name." - isOpen := true. - self doOpenWizardParts - "self builder openModal: self dialogWindow." - - - - -] - -{ #category : #'window control' } -WizardPane >> doOpenWithoutPopulatingNonEmptyPartContents [ - "open this pane. To do that, we make sure that all the WizardParts retrieve the inputs they require and then" - - self distributeRequiredInputs . - wizardParts do: [ :each | - each retrieveInputRequired. - each hasBeenOpen ifFalse: [ - self populateContentsOf: each. - each isOpen: true. - ]. - "each morphContents isNil ifTrue: [self populateContentsOf: each]" - ]. - self populatePartsRemaining. - "self buildDialogWindow. - self displayButtons. - self checkForEnablingNextButton. - wizardControl dialogWindowName: name. - self builder openModal: self dialogWindow." - -] - -{ #category : #'window control' } -WizardPane >> doOpenWizardParts [ - - self wizardParts do: [:aWizardPart | - aWizardPart isOpen: true. - aWizardPart hasBeenOpen: true. - ] - - - -] - -{ #category : #actions } -WizardPane >> enableNextButton [ -] - -{ #category : #accessing } -WizardPane >> failingConditions [ - - ^ failingConditions ifNil: [failingConditions := OrderedCollection new]. -] - -{ #category : #accessing } -WizardPane >> failingConditions: aCollectionOfStrings [ - - failingConditions := aCollectionOfStrings. -] - -{ #category : #actions } -WizardPane >> hasChanged: aWizardPart [ - "this method is used by the sub parts to inform this pane that their output value has changed. Here , we push this value to parts requiring this information" - - | informationValue informationSymbol | - informationValue := aWizardPart transformedOutputValue. - informationSymbol := partsAndInformationsAssociated at: aWizardPart ifAbsent: [nil]. - - informationSymbol ifNotNil: [ - wizardControl information: informationSymbol withValue: informationValue. - partsAndRequiredInformations keysAndValuesDo: [:key :value | - (value includes: informationSymbol) - ifTrue: [ aWizardPart requiredInputsAt: informationSymbol put: informationValue]] - ] -] - -{ #category : #'initialize-release' } -WizardPane >> initialize [ - "by default, the dialog window is a new empty pluggable dialog window " - - super initialize. - name := ''. - partsAndInformationsAssociated := Dictionary new. - partsAndRequiredInformations := Dictionary new. - wizardParts := OrderedCollection new. - -] - -{ #category : #accessing } -WizardPane >> inputRequiredBy: aWizarPart [ - "enable a WizardPart to retrieve from the wizard control an input required to perform its tasks." - - | informationsRequired | - informationsRequired := partsAndRequiredInformations at: aWizarPart. - ^ informationsRequired collect: [ :each | self wizardControl valueOfInformation: each ] -] - -{ #category : #'accessing - main pane line' } -WizardPane >> mainPaneLine [ - - ^ mainPaneLine -] - -{ #category : #'*merlin-rendering' } -WizardPane >> merlinSpecificRenderer [ - - ^ self subclassResponsability -] - -{ #category : #accessing } -WizardPane >> name [ - - ^ name -] - -{ #category : #accessing } -WizardPane >> name: aString [ - - name := aString -] - -{ #category : #actions } -WizardPane >> nextButtonAction [ - "action executed when the next button is pressed" - - self retrievePartsOutputs. - self wizardControl performNextButtonAction -] - -{ #category : #actions } -WizardPane >> notifyPartsMightHaveChanged [ - - "this method will iterate over all the parts in the pane and notify them that their contents might have been changed" - wizardParts do: [:each | - each mightHasChanged - ] -] - -{ #category : #'accessing - main pane line' } -WizardPane >> numberOfSubComponents [ - - ^ self mainPaneLine numberOfSubComponents -] - -{ #category : #'window control' } -WizardPane >> openWithoutPopulatingNonEmptyPartContents [ - "open this pane. To do that, we make sure that all the WizardParts retrieve the inputs they require and then, we display their morph contents" - - self distributeRequiredInputs . - wizardParts do: [ :each | - each retrieveInputRequired. - each morphContents isNil ifTrue: [self populateContentsOf: each] - ]. - self populatePartsRemaining. - self buildDialogWindow. - self displayButtons. - self checkForEnablingNextButton. - wizardControl dialogWindowName: name. - self builder openModal: self dialogWindow. - -] - -{ #category : #'window control' } -WizardPane >> populateContentsOf: aWizardPart [ - - aWizardPart useLatePopulateContents - ifTrue: [aWizardPart latePopulateContents] - ifFalse: [ - aWizardPart numberOfPopulateContents > 1 - ifFalse: [aWizardPart latePopulateContents] - ]. - aWizardPart numberOfPopulateContents: (aWizardPart numberOfPopulateContents +1). - - -] - -{ #category : #'window control' } -WizardPane >> populatePartsRemaining [ - - "Populating a first time all parts may launch some callbacks. Those callbacks can add several parts to the pane, and some of those parts can still have an empty contents. Here we populate all thos remaining empty parts " - self distributeRequiredInputs. - wizardParts do: [:aWizardPart | - aWizardPart hasBeenOpen - ifFalse: [ - self distributeRequiredInputsOf: aWizardPart . - aWizardPart latePopulateContents. - ] - ]. - - - -] - -{ #category : #actions } -WizardPane >> previousButtonAction [ - "action executed when the previous button is pressed" - - self wizardControl performPreviousButtonAction -] - -{ #category : #updating } -WizardPane >> refresh [ - - (isOpen = true) ifTrue: [ - self doOpenWithoutPopulatingNonEmptyPartContents. - self renderer refresh. - ]. - - -] - -{ #category : #'addition-removal' } -WizardPane >> removeAllParts [ - - - wizardParts removeAll. - mainPaneLine := nil. - partsAndInformationsAssociated := Dictionary new. - partsAndRequiredInformations := Dictionary new. - -] - -{ #category : #'accessing - main pane line' } -WizardPane >> removeSubComponentAt: anInteger [ - - "when we want to remove a complete row or column, we have to also un-associat the removed wizardParts with their information" - ^ self mainPaneLine removeSubComponentAt: anInteger. -] - -{ #category : #'accessing - main pane line' } -WizardPane >> removeWithouUnassociateSubComponentAt: anInteger [ - "remove the subComponent of this this 'AbstractLine' located at the position an integer " - "using this method, the sucomponent will only be remove from the Morphic pane, in other words it will just become non visible, but will still be associated and registred in the wizard pane" - self mainPaneLine removeWithouUnassociateSubComponentAt: anInteger. -] - -{ #category : #'*merlin-rendering' } -WizardPane >> renderOnMerlinRenderer: aMerlinRenderer [ - - self renderer: self merlinSpecificRenderer. - ^ self renderer wizardRenderer: aMerlinRenderer; render: self. - - -] - -{ #category : #'*merlin-rendering' } -WizardPane >> renderer [ - - ^ renderer ifNil: [renderer := self wizardControl renderer] -] - -{ #category : #'*merlin-rendering' } -WizardPane >> renderer: aMerlinRenderer [ - - renderer := aMerlinRenderer -] - -{ #category : #actions } -WizardPane >> retrieveOutput: anInformationSymbol [ - - partsAndInformationsAssociated keysAndValuesDo: [:aPart :aSymbol | - aSymbol = anInformationSymbol ifTrue: [self retrieveOutputOf: aPart] - ]. - -] - -{ #category : #actions } -WizardPane >> retrieveOutputOf: aWizardPart [ - - | informationSymbol | - informationSymbol := partsAndInformationsAssociated at: aWizardPart ifAbsent: [nil]. - informationSymbol ifNotNil: [ - wizardControl information: informationSymbol withValue: aWizardPart transformedOutputValue. - ]. -] - -{ #category : #actions } -WizardPane >> retrievePartsOutputs [ - "action executed when the next button is pressed" - - "The contents of a part might have been changed without the part itself know it (This is the case for a textField). So we first notify each of them that their contents mihgt have changed" - self notifyPartsMightHaveChanged. - partsAndInformationsAssociated keysAndValuesDo: - [ :key :value | - self wizardControl - information: value - withValue: key transformedOutputValue ]. - -] - -{ #category : #'addition-removal' } -WizardPane >> row: aBlockOrAPart [ - - "use this method to add a part (using aBlockOrAPart as a WizardPart) or several parts (using aBlockOrAPart as a block ([:row | row column: aPart ; column: anotherPart]) ) to the pane, in a new row. You should always manage the layout of the pane in the same way: you decide to divide the pane in rows and for each row you can add several columns. In this case you will always use methods begining with 'row'. If you decide to divide your pane in columns, you will always use methods begining with: 'column:'. If you try another way to dispatch the parts, the order you want might not be guaranteed " - mainPaneLine - ifNotNil: [:aPaneColumn | - aPaneColumn row: aBlockOrAPart - ] - ifNil: [ - mainPaneLine := PaneColumn fromPane: self. - mainPaneLine row: aBlockOrAPart - ]. - - - - - -] - -{ #category : #'addition-removal' } -WizardPane >> row: aWizardPart associatedTo: aSymbol [ - "use this method to add a part (using aBlockOrAPart as a WizardPart) or several parts (using aBlockOrAPart as a block ([:row | row column: aPart ; column: anotherPart]) ) to the pane, in a new row. You should always manage the layout of the pane in the same way: you decide to divide the pane in rows and for each row you can add several columns. In this case you will always use a method begining with 'way'. If you decide to divide you pane in columns, you will always use a method begining with: 'column:'. If you try another way to dispatch the parts, the order you might want will not be guaranteed " - - mainPaneLine - ifNotNil: [ :aPaneColumn | aPaneColumn row: aWizardPart ] - ifNil: [ mainPaneLine := PaneColumn fromPane: self. - mainPaneLine row: aWizardPart ]. - - "we now focus on the information management (made by the is wizardPane itself): " - self setPart: aWizardPart associatedTo: aSymbol -] - -{ #category : #'addition-removal' } -WizardPane >> row: aWizardPart associatedTo: aSymbol requiring: aCollectionOfSymbols [ - - "use this method to add a part (using aBlockOrAPart as a WizardPart) or several parts (using aBlockOrAPart as a block ([:row | row column: aPart ; column: anotherPart]) ) to the pane, in a new row. You should always manage the layout of the pane in the same way: you decide to divide the pane in rows and for each row you can add several columns. In this case you will always use a method begining with 'way'. If you decide to divide you pane in columns, you will always use a method begining with: 'column:'. If you try another way to dispatch the parts, the order you might want will not be guaranteed " - - mainPaneLine - ifNotNil: [:aPaneColumn | - aPaneColumn row: aWizardPart - ] - ifNil: [ - mainPaneLine := PaneColumn fromPane: self. - mainPaneLine row: aWizardPart - ]. - - "we now focus on the information management (made by the is wizardPane itself): " - self setPart: aWizardPart associatedTo: aSymbol requiring: aCollectionOfSymbols - - -] - -{ #category : #'addition-removal' } -WizardPane >> row: aWizardPart requiring: aCollectionOfSymbols [ - - "use this method to add a part (using aBlockOrAPart as a WizardPart) or several parts (using aBlockOrAPart as a block ([:row | row column: aPart ; column: anotherPart]) ) to the pane, in a new row. You should always manage the layout of the pane in the same way: you decide to divide the pane in rows and for each row you can add several columns. In this case you will always use a method begining with 'way'. If you decide to divide you pane in columns, you will always use a method begining with: 'column:'. If you try another way to dispatch the parts, the order you might want will not be guaranteed " - - mainPaneLine - ifNotNil: [:aPaneColumn | - aPaneColumn row: aWizardPart - ] - ifNil: [ - mainPaneLine := PaneColumn fromPane: self. - mainPaneLine row: aWizardPart - ]. - - "we now focus on the information management (made by the is wizardPane itself): " - self setPart: aWizardPart requiring: aCollectionOfSymbols - - -] - -{ #category : #'addition-removal' } -WizardPane >> setPart: aWizardPart [ - - wizardParts add: aWizardPart. - aWizardPart wizardPane: self. - - - -] - -{ #category : #'addition-removal' } -WizardPane >> setPart: aWizardPart associatedTo: aSymbol [ - - self setPart: aWizardPart. - partsAndInformationsAssociated - at: aWizardPart - put: aSymbol. - - - -] - -{ #category : #'addition-removal' } -WizardPane >> setPart: aWizardPart associatedTo: aSymbol requiring: aCollectionOfSymbols [ - - self setPart: aWizardPart associatedTo: aSymbol. - partsAndRequiredInformations - at: aWizardPart - put: aCollectionOfSymbols. - - -] - -{ #category : #'addition-removal' } -WizardPane >> setPart: aWizardPart requiring: aCollectionOfSymbols [ - - self setPart: aWizardPart. - partsAndRequiredInformations - at: aWizardPart - put: aCollectionOfSymbols. - - -] - -{ #category : #'accessing - main pane line' } -WizardPane >> subComponentAt: anInteger [ - - ^ self mainPaneLine subComponentAt: anInteger. -] - -{ #category : #'*Merlin-Tests' } -WizardPane >> testOpen [ - "open this pane. To do that, we make sure that all the WizardParts retrieve the inputs they require and then, we display their morph contents" - - - self distributeRequiredInputs. - "now we populate the morph contents of each wizard part. To do that, we work on a copy of wizardPart. Indeed, populate the morph content pf a part can lauch a callback, which can add some parts to this pane. To avoid loosing informations (by iterating an a growing collection), we first iterate on a copy, and then do the job for the remaining parts " - wizardParts copy do: [ :each | - self distributeRequiredInputsOf: each. - each retrieveInputRequired. - self populateContentsOf: each. - "self retrieveOutputOf: each" - ]. - self populatePartsRemaining. - "self buildDialogWindow." - "self displayButtons. - self checkForEnablingNextButton. - wizardControl dialogWindowName: name." - isOpen := true. -" self builder openModal: self dialogWindow." - - - - -] - -{ #category : #'accessing - main pane line' } -WizardPane >> unassociatePart: aWizardPart [ - - |associatedInformation requiredInformation| - associatedInformation := partsAndInformationsAssociated at: aWizardPart. - partsAndRequiredInformations removeKey: aWizardPart ifAbsent: []. - partsAndInformationsAssociated removeKey: aWizardPart. - "when unassociating a part, the outputValue might not have been yet transmit to the wizardControl (as the next button might not have been pressed):" - self wizardControl wizardInformations removeKey: associatedInformation ifAbsent: []. -] - -{ #category : #accessing } -WizardPane >> wizardControl [ - "return the WizardControl controling this pane" - ^ wizardControl -] - -{ #category : #accessing } -WizardPane >> wizardControl: aWizardControl [ - "set the WizardControl controling this pane" - ^ wizardControl := aWizardControl. -] - -{ #category : #accessing } -WizardPane >> wizardParts [ - - ^ wizardParts -] diff --git a/src-archive/Merlin/WizardPane.extension.st b/src-archive/Merlin/WizardPane.extension.st deleted file mode 100644 index f966d2d19..000000000 --- a/src-archive/Merlin/WizardPane.extension.st +++ /dev/null @@ -1,54 +0,0 @@ -Extension { #name : #WizardPane } - -{ #category : #'*merlin-rendering' } -WizardPane >> merlinSpecificRenderer [ - - ^ self subclassResponsability -] - -{ #category : #'*merlin-rendering' } -WizardPane >> renderOnMerlinRenderer: aMerlinRenderer [ - - self renderer: self merlinSpecificRenderer. - ^ self renderer wizardRenderer: aMerlinRenderer; render: self. - - -] - -{ #category : #'*merlin-rendering' } -WizardPane >> renderer [ - - ^ renderer ifNil: [renderer := self wizardControl renderer] -] - -{ #category : #'*merlin-rendering' } -WizardPane >> renderer: aMerlinRenderer [ - - renderer := aMerlinRenderer -] - -{ #category : #'*Merlin-Tests' } -WizardPane >> testOpen [ - "open this pane. To do that, we make sure that all the WizardParts retrieve the inputs they require and then, we display their morph contents" - - - self distributeRequiredInputs. - "now we populate the morph contents of each wizard part. To do that, we work on a copy of wizardPart. Indeed, populate the morph content pf a part can lauch a callback, which can add some parts to this pane. To avoid loosing informations (by iterating an a growing collection), we first iterate on a copy, and then do the job for the remaining parts " - wizardParts copy do: [ :each | - self distributeRequiredInputsOf: each. - each retrieveInputRequired. - self populateContentsOf: each. - "self retrieveOutputOf: each" - ]. - self populatePartsRemaining. - "self buildDialogWindow." - "self displayButtons. - self checkForEnablingNextButton. - wizardControl dialogWindowName: name." - isOpen := true. -" self builder openModal: self dialogWindow." - - - - -] diff --git a/src-archive/Merlin/WizardPaneFlowTest.class.st b/src-archive/Merlin/WizardPaneFlowTest.class.st deleted file mode 100644 index e75be98de..000000000 --- a/src-archive/Merlin/WizardPaneFlowTest.class.st +++ /dev/null @@ -1,158 +0,0 @@ -Class { - #name : #WizardPaneFlowTest, - #superclass : #TestCase, - #instVars : [ - 'dropListSelectedValue' - ], - #category : #'Merlin-Tests' -} - -{ #category : #tests } -WizardPaneFlowTest >> testWizardMiddlePaneFlow [ - - |wizardControl wizardPane1 wizardPane2 wizardPane3 firstDropListPart wizardText wizardLabel firstListPart listPartSelectedValue| - wizardControl := MockWizardControl new. - wizardPane1 := WizardFirstPane new. - wizardPane2 := WizardMiddlePane new. - wizardPane3 := WizardLastPane new. - - firstDropListPart := DropListPart new - inGroupboxNamed: 'Select a number'; - list: #(1 2 3 4); - defaultValue: 1; - callback: [:outputValue | - dropListSelectedValue := outputValue.]; - yourself. - - firstListPart := ListPart new - inGroupboxNamed: 'Same selection than previous dropList'; - defaultValue: 2; - list: #('un' 'deux' 'trois' 'quatre'); - callback: [:outputValue | - listPartSelectedValue := outputValue.]; - yourself. - - wizardPane1 row: firstDropListPart associatedTo: #firstDropListValue. - wizardPane2 row: firstListPart associatedTo: #secondDropListValue. - - - wizardControl - addPane: wizardPane1; - addPane: wizardPane2; - addPane: wizardPane3. - - wizardControl atEndDo: [:aDictionaryOfOutputs | - self assert: (aDictionaryOfOutputs at: #firstDropListValue) = 1. - self assert: (aDictionaryOfOutputs at: #secondDropListValue) = 2. - ]. - - wizardControl open. - wizardControl performNextButtonAction. - wizardControl performNextButtonAction. - wizardControl performTerminateButtonAction. - -] - -{ #category : #tests } -WizardPaneFlowTest >> testWizardPanesFlow [ - - |wizardControl wizardPane1 wizardPane2 firstDropListPartPart wizardText wizardLabel | - wizardControl := MockWizardControl new. - wizardPane1 := WizardFirstPane new. - wizardPane2 := WizardLastPane new. - - firstDropListPartPart := DropListPart new - inGroupboxNamed: 'Select a number'; - list: #(1 2 3 4); - defaultValue: 4; - callback: [:outputValue | - dropListSelectedValue := outputValue. - wizardPane2 removeAllParts. - wizardLabel := TextPart new text: 'You selected ',(outputValue asString); yourself. - wizardPane2 row: wizardLabel. - wizardPane2 refresh]; - yourself. - - wizardPane1 row: firstDropListPartPart associatedTo: #firstDropListValue. - - wizardControl - addPane: wizardPane1; - addPane: wizardPane2. - - wizardControl atEndDo: [:aDictionaryOfOutputs | - self assert: (aDictionaryOfOutputs at: #firstDropListValue) = 4. - ]. - wizardControl open. - wizardControl performNextButtonAction. - wizardControl performTerminateButtonAction. - -] - -{ #category : #tests } -WizardPaneFlowTest >> testWizardPanesSecondValueFlow [ - - |wizardControl wizardPane1 wizardPane2 firstDropListPartPart wizardText wizardLabel secondDropListPart| - wizardControl := MockWizardControl new. - wizardPane1 := WizardFirstPane new. - wizardPane2 := WizardLastPane new. - - firstDropListPartPart := DropListPart new - inGroupboxNamed: 'Select a number'; - list: #(1 2 3 4); - defaultValue: 1; - callback: [:outputValue | - dropListSelectedValue := outputValue. - wizardPane2 removeAllParts. - wizardLabel := TextPart new text: 'In the second DropList you selected ',(outputValue asString); yourself. - wizardPane2 row: wizardLabel. - wizardPane2 refresh]; - yourself. - secondDropListPart := DropListPart new - inGroupboxNamed: 'Select a number'; - list: #(1 2 3 4); - defaultValue: 2; - yourself. - - - wizardPane1 row: secondDropListPart associatedTo: #firstDropListValue. - wizardPane1 row: firstDropListPartPart associatedTo: #firstDropListValue. - - - wizardControl - addPane: wizardPane1; - addPane: wizardPane2. - - wizardControl atEndDo: [:aDictionaryOfOutputs | - self assert: (aDictionaryOfOutputs at: #firstDropListValue) = 1. - ]. - wizardControl open. - wizardControl performNextButtonAction. - wizardControl performTerminateButtonAction. - -] - -{ #category : #tests } -WizardPaneFlowTest >> testWizardSinglePaneFlow [ - - |wizardControl wizardPane1 textFieldPart| - wizardControl := MockWizardControl new. - wizardPane1 := WizardSinglePane new. - - textFieldPart := TextFieldPart new - defaultValue: 'hey'; - callback: [:outputValue | - dropListSelectedValue := outputValue.]; - yourself. - - wizardPane1 row: textFieldPart associatedTo: #firstDropListValue. - - wizardControl - addPane: wizardPane1. - - wizardControl atEndDo: [:aDictionaryOfOutputs | - self assert: (aDictionaryOfOutputs at: #firstDropListValue) = 'hey'. - ]. - wizardControl open. - wizardControl performTerminateButtonAction. - -] diff --git a/src-archive/Merlin/WizardPaneTest.class.st b/src-archive/Merlin/WizardPaneTest.class.st deleted file mode 100644 index c3e2fa4ac..000000000 --- a/src-archive/Merlin/WizardPaneTest.class.st +++ /dev/null @@ -1,154 +0,0 @@ -Class { - #name : #WizardPaneTest, - #superclass : #TestCase, - #instVars : [ - 'wizardControl' - ], - #classInstVars : [ - 'wizardPane1', - 'firstCheckBoxPart', - 'secondCheckBoxPart' - ], - #category : #'Merlin-Tests' -} - -{ #category : #running } -WizardPaneTest >> setUp [ - | wizardPane1 wizardPane2 firstCheckBoxPart secondCheckBoxPart | - wizardControl := MockWizardControl new. - wizardPane1 := WizardFirstPane new. - wizardPane2 := WizardLastPane new. - - firstCheckBoxPart := CheckboxPart new - label: 'if selected, next one not selected'; - inGroupboxNamed: 'Test'; - defaultValue: true; - useLatePopulateContents: false; - yourself. - - secondCheckBoxPart := CheckboxPart new - label: 'selected if previous one not selected'; - inGroupboxNamed: 'Test'; - defaultValue: [:inputs | (inputs at: #firstCheckbocValue) not]; - yourself. - - - wizardPane1 row: firstCheckBoxPart associatedTo: #firstCheckbocValue. - wizardPane2 row: secondCheckBoxPart associatedTo: #secondCheckbocValue requiring: {#firstCheckbocValue}. - - wizardControl - addPane: wizardPane1 ; - addPane: wizardPane2. - -] - -{ #category : #tests } -WizardPaneTest >> testWizardPaneNextBack [ - - wizardControl open. - self assert: wizardControl currentPane == wizardControl wizardPanes first. - wizardControl performNextButtonAction. - self assert: wizardControl currentPane == wizardControl wizardPanes second. - wizardControl performPreviousButtonAction. - self assert: wizardControl currentPane == wizardControl wizardPanes first. -] - -{ #category : #tests } -WizardPaneTest >> testWizardPaneNumberOfSubcomponents [ - - | wizardPane1 firstCheckBoxPart secondCheckBoxPart | - wizardControl := WizardControl new. - wizardPane1 := WizardSinglePane new. - - firstCheckBoxPart := CheckboxPart new - label: 'if selected, next one not selected'; - inGroupboxNamed: 'Test'; - defaultValue: true; - useLatePopulateContents: false; - yourself. - - secondCheckBoxPart := CheckboxPart new - label: 'selected if previous one not selected'; - inGroupboxNamed: 'Test'; - defaultValue: false; - yourself. - - - wizardPane1 row: firstCheckBoxPart associatedTo: #firstCheckbocValue. - self assert: wizardPane1 numberOfSubComponents = 1. - wizardPane1 row: secondCheckBoxPart associatedTo: #secondCheckbocValue requiring: {#firstCheckbocValue}. - self assert: wizardPane1 numberOfSubComponents = 2. - "wizardPane1 removeAllParts. - self assert: wizardPane1 numberOfSubComponents = 0. - " - wizardControl - addPane: wizardPane1. -] - -{ #category : #tests } -WizardPaneTest >> testWizardPaneRemoveSubcomponentAt [ - - | wizardPane1 firstCheckBoxPart secondCheckBoxPart | - wizardControl := MockWizardControl new. - wizardPane1 := WizardSinglePane new. - - firstCheckBoxPart := CheckboxPart new - label: 'if selected, next one not selected'; - inGroupboxNamed: 'Test'; - defaultValue: true; - useLatePopulateContents: false; - yourself. - - secondCheckBoxPart := CheckboxPart new - label: 'selected if previous one not selected'; - inGroupboxNamed: 'Test'; - defaultValue: false; - yourself. - - - wizardPane1 row: firstCheckBoxPart associatedTo: #firstCheckbocValue. - self assert: wizardPane1 numberOfSubComponents = 1. - wizardPane1 row: secondCheckBoxPart associatedTo: #secondCheckbocValue requiring: {#firstCheckbocValue}. - self assert: wizardPane1 numberOfSubComponents = 2. - - wizardControl - addPane: wizardPane1. - wizardControl open. - self assert: (wizardPane1 subComponentAt: 1) = firstCheckBoxPart. - self assert: (wizardPane1 subComponentAt: 2) = secondCheckBoxPart. - wizardPane1 removeSubComponentAt: 1. - self deny: (wizardPane1 subComponentAt: 1) = firstCheckBoxPart. - self assert: (wizardPane1 subComponentAt: 1) = secondCheckBoxPart. -] - -{ #category : #tests } -WizardPaneTest >> testWizardPaneSubcomponentAt [ - - | wizardPane1 firstCheckBoxPart secondCheckBoxPart | - wizardControl := WizardControl new. - wizardPane1 := WizardSinglePane new. - - firstCheckBoxPart := CheckboxPart new - label: 'if selected, next one not selected'; - inGroupboxNamed: 'Test'; - defaultValue: true; - useLatePopulateContents: false; - yourself. - - secondCheckBoxPart := CheckboxPart new - label: 'selected if previous one not selected'; - inGroupboxNamed: 'Test'; - defaultValue: false; - yourself. - - - wizardPane1 row: firstCheckBoxPart associatedTo: #firstCheckbocValue. - self assert: (wizardPane1 subComponentAt: 1) = firstCheckBoxPart. - wizardPane1 row: secondCheckBoxPart associatedTo: #secondCheckbocValue requiring: {#firstCheckbocValue}. - self assert: (wizardPane1 subComponentAt: 2) = secondCheckBoxPart. - self deny: (wizardPane1 subComponentAt: 1) = secondCheckBoxPart. - - - wizardControl - addPane: wizardPane1. -] diff --git a/src-archive/Merlin/WizardPart.class.st b/src-archive/Merlin/WizardPart.class.st deleted file mode 100644 index 9664e01f0..000000000 --- a/src-archive/Merlin/WizardPart.class.st +++ /dev/null @@ -1,579 +0,0 @@ -" -A WizardPart is an abstract class which represents a part of a WizardPane. It only provides one output (information), in other words, it deals with a maximum of one information to retrieve.However, a wizardPane can maybe deal with several output informations and should therefore be composed by several WizardPart.On the other hand, a WizardPart can require several input informations. - -WizardPart is an abstract class that you should subclass to create your own component in the pane. It's up to you to build the morph contents of a WizardPart (even if some tools to create basic elements are provided by the abstract class). And it's up to you to specify what is the information you want to retrieve from this interface: to do that, you only have to implement the abstrat method 'outputValue' and put into the value you want to transmit (for example, if your wizardpart is composed by a simple drop list you may want to transmit the value of the item selected). -You may also want to override the method 'retrieveRequiredInput' to retrieve some informations and make what you want with it(by default it does nothing). This method is called by the wizardPane before each pane opening. - -Instance Variables - blockContents: - enableNextButton: - - wizardPane: - -blockContents - - is the morph contents of this wizard part. It will be added by wizardPane to the main dialog window contents . - -enableNextButton: - - is telling wether this wizard part authorize the wizardPane next button to be enable or not. By default, its value is true . But sometimes an information is required before going to the next wizard pane. In this case, override the initialize method and call the method 'enableNextButton: false'. Then, just call 'self enableNextButton: true' in your code when the next button has to enabled (for example, you can look at the class ListSelector) - - - -wizardPane - - the wizard pane controling this wizard part - -" -Class { - #name : #WizardPart, - #superclass : #Object, - #instVars : [ - 'blockContents', - 'wizardPane', - 'enableNextButton', - 'requiredInputs', - 'callbackBlock', - 'defaultValue', - 'groupBoxName', - 'useLatePopulateContents', - 'numberOfContentCalls', - 'numberOfPopulateContents', - 'paneLine', - 'output', - 'isOpen', - 'hasBeenOpen', - 'transformationBlock' - ], - #category : #'Merlin-Core' -} - -{ #category : #accessing } -WizardPart >> callback: aBlock [ - - callbackBlock := aBlock. -] - -{ #category : #accessing } -WizardPart >> contents [ - "return the morph contents of this WizardPart." - - "here, we create the morph representing this part. By doing this here, we enable the morph content to be parametrize by a value from another pane (for example, if we want the default value of a textField to depends on an output from the previous pane). " - - ^ blockContents. - -] - -{ #category : #actions } -WizardPart >> contents: aCollectionOfMorphElements [ - - self deprecated: 'use populateContents: instead'. - self populateContents: aCollectionOfMorphElements . -] - -{ #category : #'as yet unclassified' } -WizardPart >> contentsChanged [ - self changed: #contents -] - -{ #category : #'initialize-release' } -WizardPart >> defaultValue [ - - ^ defaultValue. -] - -{ #category : #'initialize-release' } -WizardPart >> defaultValue: aBlockOrObject [ - - defaultValue := aBlockOrObject. -] - -{ #category : #buttons } -WizardPart >> disableNextButton [ - "enableNextButton and update the next button in the wizard pane (if the wizard pane is yet initialized)" - - self enableNextButton: false -] - -{ #category : #buttons } -WizardPart >> enableNextButton [ - "enableNextButton and update the next button in the wizard pane (if the wizard pane is yet initialized)" - - self enableNextButton: true -] - -{ #category : #protected } -WizardPart >> enableNextButton: trueOrFalse [ - "Set the value of enableNextButton and update the next button in the wizard pane (if the wizard pane is yet initialized)" - - enableNextButton := trueOrFalse. - self wizardPane ifNotNil: [self wizardPane checkForEnablingNextButton ] - - - -] - -{ #category : #buttons } -WizardPart >> enableNextButtonValue [ - " return true if the next button in the wizard pane should be enable" - ^ enableNextButton. - - - - -] - -{ #category : #accessing } -WizardPart >> groupBoxName [ - - groupBoxName - ifNotNil: [:aStringOrABlock | ^ aStringOrABlock meValue: self requiredInputs ]. - ^ groupBoxName -] - -{ #category : #accessing } -WizardPart >> hasBeenOpen [ - - ^ hasBeenOpen -] - -{ #category : #accessing } -WizardPart >> hasBeenOpen: trueOrFalse [ - - hasBeenOpen := trueOrFalse -] - -{ #category : #actions } -WizardPart >> hasChanged [ - "when the output value of this wizardPart has changed, we first perform the callbak and then inform the wizardPane that a new value has been set" - "before executing action, we make a pane refresh, to be sure that all parts composing the pane transmit their current value " - "pay attention that here we use the NON TRANSFORMED output value" - "self wizardPane ifNotNilDo: [:aPane | aPane refresh]." - callbackBlock valueWithEnoughArguments: {self outputValue. self }. - wizardPane ifNotNil: [ wizardPane hasChanged: self]. -] - -{ #category : #actions } -WizardPart >> hasChanged: aValue [ - "when the output value of this wizardPart has changed, we first perform the callbak and then inform the wizardPane that a new value has been set" - callbackBlock valueWithEnoughArguments: {aValue. self }. - wizardPane ifNotNil: [ wizardPane hasChanged: self]. -] - -{ #category : #'initialize-release' } -WizardPart >> inGroupboxNamed: aString [ - - groupBoxName := aString. -] - -{ #category : #'initialize-release' } -WizardPart >> initialize [ - - super initialize. - requiredInputs := Dictionary new. - "by default, a wizard part doesn't require anything to enable the next button of the wizard pane" - self enableNextButton. - self isOpen: false. - self hasBeenOpen: false. - callbackBlock := [:outputValue | ]. - useLatePopulateContents := true. - numberOfPopulateContents := 0. -] - -{ #category : #'initialize-release' } -WizardPart >> initializeDefault [ - - "implement this method to initialize you part according the default value specified by 'defaultValue:'. This method will be executed only one time when opening the wizard. After that, your defaultValue will not be taken into account anyMore" -] - -{ #category : #accessing } -WizardPart >> isOpen [ - - ^ isOpen -] - -{ #category : #accessing } -WizardPart >> isOpen: trueOrFalse [ - - isOpen := trueOrFalse -] - -{ #category : #accessing } -WizardPart >> latePopulateContents [ - - "here, you have to set the morph contents of this wizardPart. To do that, use 'populateContents:' with all the mrophs you want. This method will be called only when the pane will be opened. Therefore, this the good time to retrieve information from previous pane and use them (if necessary)" - -] - -{ #category : #actions } -WizardPart >> mightHasChanged [ - "The contents of a part might has changed without the part itself know it (This is the case for a textField). This method will be called by the parent wizard pane to be sure all has been corretly done before opening the next pane. By default does nothing. If you have to make something special before opening the next pane, it 's the good place to do it'" -] - -{ #category : #accessing } -WizardPart >> morphContents [ - "return the morph contents of this WizardPart." - - "useLatePopulateContents - ifTrue: [self latePopulateContents] - ifFalse: [ - numberOfContentCalls < 1 ifTrue: [self latePopulateContents ] - ]. - - numberOfContentCalls := numberOfContentCalls + 1." - ^ blockContents. - -] - -{ #category : #'morph content setup tools' } -WizardPart >> newButtonNamed: aString withAction: selector [ - "use this method to create a new classic button that will execute the method designed by selector when clicked. The method selector must be defined and implemented in the subclass" - - | button | - button := PluggableButtonMorphPlus on: self getState: nil action: selector. - button label: aString. - ^button -] - -{ #category : #'morph content setup tools' } -WizardPart >> newButtonNamed: aString withAction: selector andArguments: aCollectionOfArguments [ - "use this method to create a new classic button that will execute the method designed by selector when pressed with the arguments aCollectionOfArguments. The method selector must define and implemented in the subclass" - - - - | button | - button := PluggableButtonMorphPlus on: self getState: nil action: selector. - button label: aString. - button arguments: aCollectionOfArguments . - ^button -] - -{ #category : #'morph content setup tools' } -WizardPart >> newCheckboxFor: aModel getSelected: getSel setSelected: setSel label: label [ - "return a checkbox with the label label. the value of the checkbox will be accessed by the selector getSel (send to aModel) and set by the selector setSel (send to aModel)." - - - ^(CheckboxMorph - on: aModel selected: getSel changeSelected: setSel) - font: StandardFonts defaultFont; - label: label; - hResizing: #shrinkWrap; - vResizing: #shrinkWrap; - yourself -] - -{ #category : #'morph content setup tools' } -WizardPart >> newColumnWith: aCollectionOfMorphElements [ - "use this method to create a new column in your block" - - - |answer| - answer := PanelMorph new - hResizing: #spaceFill; - vResizing: #spaceFill; - fillStyle: Color transparent; "non pane color tracking" - changeTableLayout; - cellInset: 8; yourself. - aCollectionOfMorphElements do: [:m | answer addMorphBack: m]. - ^answer -] - -{ #category : #'morph content setup tools' } -WizardPart >> newGroupboxNamed: aString [ - - "Answer a groupbox with the given label." - ^ GroupboxMorph new - cornerStyle: #rounded; - hResizing: #spaceFill; - vResizing: #spaceFill; - label: aString; - yourself - - -] - -{ #category : #'morph content setup tools' } -WizardPart >> newGroupboxNamed: aString With: aMorph [ - "Answer a groupbox with the given label and control." - ^ (self newGroupboxNamed: aString) - addContentMorph: aMorph; - yourself -] - -{ #category : #'morph content setup tools' } -WizardPart >> newGroupboxNamed: aString WithAll: aCollectionOfMorph [ - "Answer a groupbox with the given label and controls." - ^ (self newGroupboxNamed: aString) - addContentMorph: (self newColumnWith: aCollectionOfMorph); - yourself -] - -{ #category : #'morph content setup tools' } -WizardPart >> newLabel: aString [ - "return a simple label displaying the text aString" - ^LabelMorph contents: aString font: TextStyle defaultFont -] - -{ #category : #'morph content setup tools' } -WizardPart >> newListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector [ - - "return a PluggableListMorph. the value of the list will be accessed by the selector listSelector (send to aModel). the index of the current item selected will be accessed by getSelector (send to aModel) and set by the selector setSelector (send to aModel)." - ^PluggableListMorph new - "selectionColor: self selectionColor;" - font: TextStyle defaultFont; - on: aModel - list: listSelector - selected: getSelector - changeSelected: setSelector - menu: nil - keystroke: nil; - autoDeselect: false; - cornerStyle: #rounded; - color: Color white; - borderStyle: (BorderStyle inset width: 1); - hResizing: #spaceFill; - vResizing: #spaceFill; yourself. - "getEnabledSelector: enabledSel; - setBalloonText: helpText" -] - -{ #category : #'morph content setup tools' } -WizardPart >> newMultiSelectionListFor: aModel list: listSelector primarySelection: primarySelectionSelector changePrimarySelection: changePrimarySelectionSelector listSelection: listSelectionSelector changeListSelection: changeListSelectionSelector [ - -^ (PluggableListMorph - on: aModel - list: listSelector - primarySelection: primarySelectionSelector - changePrimarySelection: changePrimarySelectionSelector - listSelection: listSelectionSelector - changeListSelection: changeListSelectionSelector - menu: nil ) - font: StandardFonts defaultFont; - autoDeselect: false; - cornerStyle: #rounded; - color: Color white; - borderStyle: (BorderStyle inset width: 1); - hResizing: #spaceFill; - vResizing: #spaceFill; yourself. -] - -{ #category : #'morph content setup tools' } -WizardPart >> newNormalListFor: aModel list: listSelector selected: getSelector changeSelected: setSelector [ - - ^(PluggableListMorph - "selectionColor: self selectionColor; - font: self listFont;" - on: aModel - list: listSelector - selected: getSelector - changeSelected: setSelector) - "menu: nil - keystroke: nil; - autoDeselect: false;" - cornerStyle: #rounded; - color: Color white; - borderStyle: (BorderStyle inset width: 1); - hResizing: #spaceFill; - vResizing: #spaceFill; - yourself -] - -{ #category : #'morph content setup tools' } -WizardPart >> newRadionButtonFor: aModel getSelected: getSel setSelected: setSel label: aString [ - - - ^(CheckboxMorph - on: aModel selected: getSel changeSelected: setSel) - "getEnabledSelector: enabledSel;" - "font: self labelFont;" - label: aString; - hResizing: #shrinkWrap; - vResizing: #shrinkWrap; - "setBalloonText: helpText;" - beRadioButton -] - -{ #category : #'morph content setup tools' } -WizardPart >> newRowWith: aCollectionOfMorphElements [ - - "use this method to create a new row in your block" - - |answer| - answer := PanelMorph new - hResizing: #spaceFill; - vResizing: #shrinkWrap; - fillStyle: Color transparent; "non pane color tracking" - changeTableLayout; - listDirection: #leftToRight; - cellInset: 8; yourself. - aCollectionOfMorphElements do: [:m | answer addMorphBack: m]. - ^answer -] - -{ #category : #'morph content setup tools' } -WizardPart >> newText: aStringOrText [ - "Answer a new text." - - ^TextMorph new - wrapFlag: true; - contents: aStringOrText; - "font: self textFont;" - autoFit: true; - lock; - hResizing: #shrinkWrap; - vResizing: #shrinkWrap -] - -{ #category : #'morph content setup tools' } -WizardPart >> newTextEditorFor: aModel getText: getSel setText: setSel [ - "Answer a text editor for the given model." - - ^ (PluggableTextEditorMorph new) - on: aModel - text: getSel - accept: setSel - readSelection: nil - menu: nil; - "font: self textFont;" - cornerStyle: #rounded; - hResizing: #rigid; - vResizing: #spaceFill; - borderStyle: (BorderStyle inset width: 1); - "extent: 800@(Preferences standardDefaultTextFont height + 8);" - color: Color white. - "selectionColor: self selectionColor" - "getEnabledSelector: enabledSel;" -] - -{ #category : #accessing } -WizardPart >> numberOfPopulateContents [ - - ^ numberOfPopulateContents -] - -{ #category : #accessing } -WizardPart >> numberOfPopulateContents: anInteger [ - - numberOfPopulateContents := anInteger -] - -{ #category : #actions } -WizardPart >> outputValue [ - "this method is an abstract method as only the subclass itself know what is the information to send to the WizardPane which will send it to the wizarControl " - self subclassResponsibility -] - -{ #category : #'*Merlin-Rendering' } -WizardPart >> outputValue: anObject [ - - "populate the output value of a wizardPart with aObject. Will be used by the rendering package" - output := anObject -] - -{ #category : #accessing } -WizardPart >> paneLine [ - "return the paneLine in which this part has been defines" - ^ paneLine -] - -{ #category : #accessing } -WizardPart >> paneLine: aPaneLine [ - "set the paneLine in which this part has been defines" - paneLine := aPaneLine -] - -{ #category : #actions } -WizardPart >> populateContents: aCollectionOfMorphElement [ - "Set the morph contents of this WizardPart. Create a panel morph containing all the elements in aCollectionOfMorphElements one under the other" - - blockContents := PanelMorph new - hResizing: #spaceFill; - vResizing: #spaceFill; - fillStyle: Color transparent; "non pane color tracking" - changeTableLayout; - cellInset: 8; yourself. - - aCollectionOfMorphElement do: [:each | blockContents addMorphBack: each ]. - ^blockContents -] - -{ #category : #accessing } -WizardPart >> renderer [ - - ^ self wizardPane renderer -] - -{ #category : #actions } -WizardPart >> requiredInputs [ - - ^ requiredInputs -] - -{ #category : #actions } -WizardPart >> requiredInputsAt: aSymbol put: aValue [ - - requiredInputs at: aSymbol put: aValue -] - -{ #category : #actions } -WizardPart >> retrieveInputRequired [ - "this method is an abstract method as only the subclass itself know what to do with the input that it needs to make its work " - "by default do nothing" - "make here all the thing required to build or make run this wizard part. This method will be clalled by wizardPane before opening the 'page'" - -] - -{ #category : #accessing } -WizardPart >> transformationBlock [ - - ^ transformationBlock ifNil: [transformationBlock := [:outputValue | outputValue]] -] - -{ #category : #accessing } -WizardPart >> transformed: aBlock [ - - "use this method to transform the output value of a part. aBlock is one argument block, with the value originally returned bu the part as argument. This block should return the transformed value" - transformationBlock := aBlock -] - -{ #category : #actions } -WizardPart >> transformedOutputValue [ - - ^ self transformationBlock meValue: self outputValue -] - -{ #category : #'parts layout - compatibility' } -WizardPart >> unassociatePartsFromTheirPanes [ - - "when we want to remove a complete row or column, we have to also un-associat the removed wizardParts with their information" - self wizardPane unassociatePart: self. -] - -{ #category : #accessing } -WizardPart >> useLatePopulateContents [ - - "by default, the morph contents of the part will always be re-computedt every time the pane call it, ie when the pane open. If you want to set this contents only once (and always memorize the state of your pane), use this method with 'false' " - ^ useLatePopulateContents. -] - -{ #category : #accessing } -WizardPart >> useLatePopulateContents: trueOrFalse [ - - "by default, the morph contents of the part will always be re-computedt every time the pane call it, ie when the pane open. If you want to set this contents only once (and always memorize the state of your pane), use this method with 'false' " - useLatePopulateContents := trueOrFalse. -] - -{ #category : #accessing } -WizardPart >> valueOf: anObject [ - - ^ anObject meValue: self requiredInputs -] - -{ #category : #accessing } -WizardPart >> wizardPane [ - "return the wizard pane controling this wizard part" - ^wizardPane -] - -{ #category : #accessing } -WizardPart >> wizardPane: aWizardPane [ - "set the wizard pane controling this wizard part" - ^wizardPane := aWizardPane -] diff --git a/src-archive/Merlin/WizardPart.extension.st b/src-archive/Merlin/WizardPart.extension.st deleted file mode 100644 index aefca3c72..000000000 --- a/src-archive/Merlin/WizardPart.extension.st +++ /dev/null @@ -1,8 +0,0 @@ -Extension { #name : #WizardPart } - -{ #category : #'*Merlin-Rendering' } -WizardPart >> outputValue: anObject [ - - "populate the output value of a wizardPart with aObject. Will be used by the rendering package" - output := anObject -] diff --git a/src-archive/Merlin/WizardPartTest.class.st b/src-archive/Merlin/WizardPartTest.class.st deleted file mode 100644 index eb30e2a04..000000000 --- a/src-archive/Merlin/WizardPartTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #WizardPartTest, - #superclass : #TestCase, - #category : #'Merlin-Tests' -} - -{ #category : #'as yet unclassified' } -WizardPartTest class >> packageNamesUnderTest [ - ^#('Merlin') -] diff --git a/src-archive/Merlin/WizardSinglePane.class.st b/src-archive/Merlin/WizardSinglePane.class.st deleted file mode 100644 index f9192c259..000000000 --- a/src-archive/Merlin/WizardSinglePane.class.st +++ /dev/null @@ -1,32 +0,0 @@ -Class { - #name : #WizardSinglePane, - #superclass : #WizardPane, - #instVars : [ - 'terminateButton' - ], - #category : #'Merlin-Panes' -} - -{ #category : #'*merlin-rendering' } -WizardSinglePane >> merlinSpecificRenderer [ - - ^ MerlinMorphicSinglePaneRenderer new. -] - -{ #category : #'*merlin-rendering' } -WizardSinglePane >> renderOnMerlinRenderer: aMerlinRenderer [ - - ^ aMerlinRenderer renderMerlinSinglePane: self -] - -{ #category : #actions } -WizardSinglePane >> terminateButtonAction [ - "action executed when the terminate button is pressed" - - partsAndInformationsAssociated keysAndValuesDo: - [ :key :value | - self wizardControl - information: value - withValue: key transformedOutputValue ]. - self wizardControl performTerminateButtonAction -] diff --git a/src-archive/Merlin/WizardSinglePane.extension.st b/src-archive/Merlin/WizardSinglePane.extension.st deleted file mode 100644 index 4d1906b1d..000000000 --- a/src-archive/Merlin/WizardSinglePane.extension.st +++ /dev/null @@ -1,13 +0,0 @@ -Extension { #name : #WizardSinglePane } - -{ #category : #'*merlin-rendering' } -WizardSinglePane >> merlinSpecificRenderer [ - - ^ MerlinMorphicSinglePaneRenderer new. -] - -{ #category : #'*merlin-rendering' } -WizardSinglePane >> renderOnMerlinRenderer: aMerlinRenderer [ - - ^ aMerlinRenderer renderMerlinSinglePane: self -] diff --git a/src-archive/Merlin/package.st b/src-archive/Merlin/package.st deleted file mode 100644 index a9e72ed41..000000000 --- a/src-archive/Merlin/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #Merlin } diff --git a/src-archive/Moose-Algos-Clustering/Collection.extension.st b/src-archive/Moose-Algos-Clustering/Collection.extension.st deleted file mode 100644 index b6edbdd66..000000000 --- a/src-archive/Moose-Algos-Clustering/Collection.extension.st +++ /dev/null @@ -1,11 +0,0 @@ -Extension { #name : #Collection } - -{ #category : #'*Moose-Algos-Clustering' } -Collection >> cross: aCollection do: aBlock [ - - self do: [:each | - aCollection do: [:another | - aBlock value: each value: another. - ] - ] -] diff --git a/src-archive/Moose-Algos-Clustering/MalClusterEngine.class.st b/src-archive/Moose-Algos-Clustering/MalClusterEngine.class.st deleted file mode 100644 index 82749d702..000000000 --- a/src-archive/Moose-Algos-Clustering/MalClusterEngine.class.st +++ /dev/null @@ -1,87 +0,0 @@ -" -Copyright (c), 2004-2007 Adrian Kuhn. This class is part of Hapax. Hapax is distributed under BSD License, see package comment. -" -Class { - #name : #MalClusterEngine, - #superclass : #Object, - #instVars : [ - 'distanceMatrix', - 'dendrogram' - ], - #category : #'Moose-Algos-Clustering' -} - -{ #category : #examples } -MalClusterEngine class >> numbers: aCollection [ - "MalClusterEngine numbers: #(1 2 9 0 7 2 4 3)" - - ^ (self with: aCollection using: [ :a :b | (a - b) * (a - b) ]) averageLinkage elements -] - -{ #category : #'instance creation' } -MalClusterEngine class >> with: aCollection [ - ^ self withDistanceMatrix: (MalDistanceSquare on: aCollection) -] - -{ #category : #'instance creation' } -MalClusterEngine class >> with: aCollection using: aDistanceBlock [ - ^ self withDistanceMatrix: (MalDistanceSquare on: aCollection using: aDistanceBlock) -] - -{ #category : #'instance creation' } -MalClusterEngine class >> withDistanceMatrix: distanceMatrix [ - ^ self new - distanceMatrix: distanceMatrix; - yourself -] - -{ #category : #clustering } -MalClusterEngine >> averageLinkage [ - ^ self performClustering: #averageLinkage -] - -{ #category : #clustering } -MalClusterEngine >> completeLinkage [ - ^ self performClustering: #completeLinkage -] - -{ #category : #accessing } -MalClusterEngine >> dendrogram [ - ^ dendrogram ifNil: [ dendrogram := self averageLinkage ] -] - -{ #category : #accessing } -MalClusterEngine >> distanceMatrix [ - ^ distanceMatrix -] - -{ #category : #accessing } -MalClusterEngine >> distanceMatrix: anObject [ - distanceMatrix := anObject -] - -{ #category : #'private - deprecated' } -MalClusterEngine >> hierarchicalClusteringShowProgressUsing: selector [ - self deprecated: 'Uses #hierarchicalClusteringUsing: instead'. - ^ self hierarchicalClusteringUsing: selector -] - -{ #category : #'private - deprecated' } -MalClusterEngine >> hierarchicalClusteringUsing: selector [ - ^ self performClustering: selector -] - -{ #category : #accessing } -MalClusterEngine >> items [ - ^ distanceMatrix items -] - -{ #category : #clustering } -MalClusterEngine >> performClustering: linkageSelector [ - ^ dendrogram := (MalClusteringData onDistanceSquare: distanceMatrix) performClustering: linkageSelector -] - -{ #category : #clustering } -MalClusterEngine >> singleLinkage [ - ^ self performClustering: #singleLinkage -] diff --git a/src-archive/Moose-Algos-Clustering/MalClusteringData.class.st b/src-archive/Moose-Algos-Clustering/MalClusteringData.class.st deleted file mode 100644 index 732d32828..000000000 --- a/src-archive/Moose-Algos-Clustering/MalClusteringData.class.st +++ /dev/null @@ -1,225 +0,0 @@ -" -Copyright (c), 2004-2007 Adrian Kuhn. This class is part of Hapax. Hapax is distributed under BSD License, see package comment. -" -Class { - #name : #MalClusteringData, - #superclass : #MalSymetricMatrix, - #instVars : [ - 'indices', - 'value', - 'clusters', - 'foundA0', - 'foundB0' - ], - #category : #'Moose-Algos-Clustering' -} - -{ #category : #'instance creation' } -MalClusteringData class >> onDistanceSquare: distanceSquare [ - - ^(self basicNew) - initialize: distanceSquare; - yourself -] - -{ #category : #private } -MalClusteringData class >> vectorSpecies [ - - ^Array -] - -{ #category : #'linkage functions' } -MalClusteringData >> averageLinkage [ - - | weightA weightB sizeA sizeB | - sizeA := (clusters at: foundA0) size "asDouble"asFloat. - sizeB := (clusters at: foundB0) size "asDouble"asFloat. - weightA := sizeA / (sizeA + sizeB). - weightB := sizeB / (sizeA + sizeB). - self - privateLinkage: - [:index0 :valueA :valueB | valueA * weightA + (valueB * weightB)] -] - -{ #category : #'linkage functions' } -MalClusteringData >> centroid [ - - | weightA weightB sizeA sizeB valueC | - sizeA := (clusters at: foundA0) size asFloat. - sizeB := (clusters at: foundB0) size asFloat. - weightA := sizeA / (sizeA + sizeB). - weightB := sizeB / (sizeA + sizeB). - valueC := (self at: foundA0 and: foundB0) - - (sizeA * sizeB / (sizeA + sizeB) squared). - self - privateLinkage: - [:index0 :valueA :valueB | valueA * weightA + (valueB * weightB) - valueC] -] - -{ #category : #'linkage functions' } -MalClusteringData >> completeLinkage [ - - self privateLinkage: [:index0 :valueA :valueB | valueA max: valueB] -] - -{ #category : #accessing } -MalClusteringData >> dendrogram [ - self assert: indices size = 1. - ^ clusters at: indices anyOne -] - -{ #category : #private } -MalClusteringData >> findMinimum [ - "This method is written such that it uses primitives only." - - | columnVector | - value := MalUnlimited positive. - 2 - to: indices size - do: - [:column | - columnVector := partialColumns at: (indices at: column). - columnVector min < value - ifTrue: - [value := columnVector min. - foundB0 := indices at: column. - foundA0 := columnVector found]] -] - -{ #category : #'initialize-release' } -MalClusteringData >> initialize: distanceMatrix [ - - partialColumns := distanceMatrix copyClusteringData - collect: [:each | MalClusteringVector withAll: each]. - value := foundA0 := foundB0 := nil. - clusters := distanceMatrix items - collect: [:item | MalDendrogram with: item]. - indices := (1 to: partialColumns size) asArray. - 1 - to: partialColumns size - do: [:n | (partialColumns at: n) unsetAt: n] -] - -{ #category : #'initialize-release' } -MalClusteringData >> initializeRows: m columns: n [ - - ^self shouldNotImplement -] - -{ #category : #'linkage functions' } -MalClusteringData >> meanLinkage [ - - self privateLinkage: [:index0 :valueA :valueB | (valueA + valueB) / 2] -] - -{ #category : #clustering } -MalClusteringData >> performClustering: linkageSelector [ - - indices size - 1 - timesRepeat: - ["IncrementNotification signalWith: indices size." - self findMinimum. - self perform: linkageSelector]. - ^self dendrogram -] - -{ #category : #private } -MalClusteringData >> privateLinkage: aBlock [ - - indices := indices copyRemoveAtIndex: (indices indexOf: foundB0). - indices - do: - [:index0 | - index0 = foundA0 - ifFalse: - [self - at: foundA0 - and: index0 - put: - (aBlock - value: index0 - value: (self at: foundA0 and: index0) - value: (self at: foundB0 and: index0))]. - self unsetAt: foundB0 and: index0]. - clusters - at: foundA0 - put: - ((clusters at: foundA0) - merge: (clusters at: foundB0) - at: value). - clusters at: foundB0 put: nil -] - -{ #category : #'linkage functions' } -MalClusteringData >> singleLinkage [ - - self privateLinkage: [:index0 :valueA :valueB | valueA min: valueB] -] - -{ #category : #private } -MalClusteringData >> testFindMinimum [ - | pValue pFoundA0 pFoundB0 column0 temp row0 | - self findMinimum. - pValue := value. - pFoundA0 := foundA0. - pFoundB0 := foundB0. - value := MalUnlimited positive. - - 2 -to: indices size -do: -[:column | - - column0 := indices at: column. - - 1 -to: column - 1 -do: -[:row | - - temp := (partialColumns at: column0) at: (row0 := indices at: row). - temp < value -ifTrue: -[value := temp. -foundA0 := row0. -foundB0 := column0]] - ]. - [pValue = value & pFoundA0 = foundA0 & pFoundB0 = foundB0] assert. - - value := pValue. - foundA0 := pFoundA0. - foundB0 := pFoundB0 -] - -{ #category : #private } -MalClusteringData >> testPerformClustering: linkageSelector [ - indices size - 1 - timesRepeat: [ self testFindMinimum. - self perform: linkageSelector ]. - ^ self dendrogram -] - -{ #category : #private } -MalClusteringData >> unsetAt: row and: column [ - - ^row < column - ifTrue: [(partialColumns at: column) unsetAt: row] - ifFalse: [(partialColumns at: row) unsetAt: column] -] - -{ #category : #'linkage functions' } -MalClusteringData >> wardsMethod [ - - | sizeA sizeB valueC sizeC weightA weightB weightC | - sizeA := (clusters at: foundA0) size asFloat. - sizeB := (clusters at: foundB0) size asFloat. - valueC := self at: foundA0 and: foundB0. - self - privateLinkage: - [:index0 :valueA :valueB | - sizeC := (clusters at: index0) size. - weightA := (sizeA + sizeC) / (sizeA + sizeB + sizeC). - weightB := (sizeB + sizeC) / (sizeA + sizeB + sizeC). - weightC := sizeC / (sizeA + sizeB + sizeC). - valueA * weightA + (valueB * weightB) - (valueC * weightC)] -] diff --git a/src-archive/Moose-Algos-Clustering/MalClusteringVector.class.st b/src-archive/Moose-Algos-Clustering/MalClusteringVector.class.st deleted file mode 100644 index a7c9df4e2..000000000 --- a/src-archive/Moose-Algos-Clustering/MalClusteringVector.class.st +++ /dev/null @@ -1,62 +0,0 @@ -" -Copyright (c), 2004-2007 Adrian Kuhn. This class is part of Hapax. Hapax is distributed under BSD License, see package comment. -" -Class { - #name : #MalClusteringVector, - #superclass : #MalArrayVector, - #type : #variable, - #instVars : [ - 'min', - 'found' - ], - #category : #'Moose-Algos-Clustering' -} - -{ #category : #accessing } -MalClusteringVector >> at: index put: aNumber [ - super at: index put: aNumber. - (found isNotNil and: [ found = index or: [ aNumber < min ] ]) - ifTrue: [ found := nil ]. - ^ aNumber -] - -{ #category : #accessing } -MalClusteringVector >> found [ - - ^found -] - -{ #category : #accessing } -MalClusteringVector >> min [ - "| min0 found0 |" - - found ifNil: [ self update ]. "min0 := Unlimited positive. - 1 to: self size do: [ :index | - (self at: index) < min0 - ifTrue: [ min0 := (self at: index). found0 := index ]]. - [ found0 = found ] assert." - ^ min -] - -{ #category : #accessing } -MalClusteringVector >> unsetAt: index [ - - super - at: index - put: MalUnlimited positive. - found = index ifTrue: [found := nil] -] - -{ #category : #private } -MalClusteringVector >> update [ - - min := MalUnlimited positive. - 1 - to: self size - do: - [:tmpIndex | - (self at: tmpIndex) < min - ifTrue: - [min := self at: tmpIndex. - found := tmpIndex]] -] diff --git a/src-archive/Moose-Algos-Clustering/MalCollectionItem.class.st b/src-archive/Moose-Algos-Clustering/MalCollectionItem.class.st deleted file mode 100644 index aa946f570..000000000 --- a/src-archive/Moose-Algos-Clustering/MalCollectionItem.class.st +++ /dev/null @@ -1,60 +0,0 @@ -" -Copyright (c), 2004-2007 Adrian Kuhn. This class is part of Hapax. Hapax is distributed under BSD License, see package comment. -" -Class { - #name : #MalCollectionItem, - #superclass : #Collection, - #instVars : [ - 'item', - 'collection' - ], - #category : #'Moose-Algos-Clustering' -} - -{ #category : #adding } -MalCollectionItem >> add: newObject [ - " *** This method was defined by Collection as a subclass responsibility. - Replace its body with a proper implementation. *** " - - self error: 'Subclass responsibility stub not reimplemented' -] - -{ #category : #accessing } -MalCollectionItem >> collection [ - - ^collection -] - -{ #category : #accessing } -MalCollectionItem >> collection: anObject [ - - collection := anObject -] - -{ #category : #enumerating } -MalCollectionItem >> do: aBlock [ - " *** This method was defined by Collection as a subclass responsibility. - Replace its body with a proper implementation. *** " - - self error: 'Subclass responsibility stub not reimplemented' -] - -{ #category : #accessing } -MalCollectionItem >> item [ - - ^item -] - -{ #category : #accessing } -MalCollectionItem >> item: anObject [ - - item := anObject -] - -{ #category : #removing } -MalCollectionItem >> remove: oldObject ifAbsent: anExceptionBlock [ - " *** This method was defined by Collection as a subclass responsibility. - Replace its body with a proper implementation. *** " - - self error: 'Subclass responsibility stub not reimplemented' -] diff --git a/src-archive/Moose-Algos-Clustering/MalCorrelationSquare.class.st b/src-archive/Moose-Algos-Clustering/MalCorrelationSquare.class.st deleted file mode 100644 index ef2f6986d..000000000 --- a/src-archive/Moose-Algos-Clustering/MalCorrelationSquare.class.st +++ /dev/null @@ -1,26 +0,0 @@ -" -Copyright (c), 2004-2007 Adrian Kuhn. This class is part of Hapax. Hapax is distributed under BSD License, see package comment. -" -Class { - #name : #MalCorrelationSquare, - #superclass : #MalDistanceSquare, - #category : #'Moose-Algos-Clustering' -} - -{ #category : #constants } -MalCorrelationSquare class >> defaultDistanceBlock [ - - ^[:a :b | a similarity: b] -] - -{ #category : #private } -MalCorrelationSquare class >> vectorSpecies [ - - ^MalCorrelationVector -] - -{ #category : #private } -MalCorrelationSquare >> copyClusteringData [ - - ^partialColumns collect: [:each | each negated] -] diff --git a/src-archive/Moose-Algos-Clustering/MalCorrelationVector.class.st b/src-archive/Moose-Algos-Clustering/MalCorrelationVector.class.st deleted file mode 100644 index 041668911..000000000 --- a/src-archive/Moose-Algos-Clustering/MalCorrelationVector.class.st +++ /dev/null @@ -1,75 +0,0 @@ -" -Copyright (c), 2004-2007 Adrian Kuhn. This class is part of Hapax. Hapax is distributed under BSD License, see package comment. -" -Class { - #name : #MalCorrelationVector, - #superclass : #MalVector, - #type : #bytes, - #category : #'Moose-Algos-Clustering' -} - -{ #category : #'instance creation' } -MalCorrelationVector class >> new: size [ - - ^self basicNew: size << 1 -] - -{ #category : #accessing } -MalCorrelationVector >> at: anIndex [ - "Answer a number between 1.0 and -1.0 at the given index. - The numbers are internally stored as 16-bit integer; and nil as zero." - - | short | - short := self unsignedShortAt: (anIndex << 1) - 1. - ^0 == short - ifTrue: [nil] - ifFalse: [(short - 16r8000) asFloat / 16r7FFF] -] - -{ #category : #accessing } -MalCorrelationVector >> at: anIndex put: aNumber [ - "Store a number between 1.0 and -1.0 at the given index. - The number is stores as 16-bit integer; nil is stored as zero." - - self - unsignedShortAt: (anIndex << 1) - 1 - put: - (nil == aNumber - ifTrue: [0] - ifFalse: [(aNumber * 16r7FFF + 16r8000) truncated]). - ^aNumber -] - -{ #category : #private } -MalCorrelationVector >> defaultElement [ - - ^nil -] - -{ #category : #'As yet unclassified' } -MalCorrelationVector >> min [ - - ^(self reject: #isNil) - inject: MalUnlimited positive - into: [:each :min | min min: each] -] - -{ #category : #accessing } -MalCorrelationVector >> size [ - - ^self basicSize >> 1 -] - -{ #category : #private } -MalCorrelationVector >> unsignedShortAt: byteIndex [ - - - ^self primitiveFailed -] - -{ #category : #private } -MalCorrelationVector >> unsignedShortAt: byteIndex put: anUnsignedShort [ - - - ^self primitiveFailed -] diff --git a/src-archive/Moose-Algos-Clustering/MalDendrogram.class.st b/src-archive/Moose-Algos-Clustering/MalDendrogram.class.st deleted file mode 100644 index 7179ddb4c..000000000 --- a/src-archive/Moose-Algos-Clustering/MalDendrogram.class.st +++ /dev/null @@ -1,199 +0,0 @@ -" -Copyright (c), 2004-2007 Adrian Kuhn. This class is part of Hapax. Hapax is distributed under BSD License, see package comment. -" -Class { - #name : #MalDendrogram, - #superclass : #Collection, - #instVars : [ - 'parent' - ], - #category : #'Moose-Algos-Clustering' -} - -{ #category : #'instance creation' } -MalDendrogram class >> with: anElement [ - - ^MalDendrogramLeaf with: anElement -] - -{ #category : #adding } -MalDendrogram >> add: newObject [ - - self shouldNotImplement -] - -{ #category : #'break into clusters' } -MalDendrogram >> breakAtThreshold: aNumber [ - - | candidates | - candidates := (self nodes select: [:each | each threshold < aNumber]) - , self leaves. - ^candidates reject: [:each | candidates includes: each parent] -] - -{ #category : #'break into clusters' } -MalDendrogram >> breakInto: numberOfClusters [ - - | all candidates | - "all := self nodes reverseSort: #threshold." - all := self nodes sort: [:a :b | b threshold <= a threshold]. - candidates := IdentitySet with: all first. - all - do: - [:each | - candidates remove: each. - candidates add: each left. - candidates add: each right. - candidates size >= numberOfClusters ifTrue: [^candidates asArray]] -] - -{ #category : #seriation } -MalDendrogram >> dist: dendrogram [ - - | sum | - sum := MalAccumulator sum. - self elements - cross: dendrogram elements - do: [:a :b | sum add: (a dist: b)]. - ^sum average -] - -{ #category : #enumerating } -MalDendrogram >> do: aBlock [ - - self elementsDo: aBlock -] - -{ #category : #accessing } -MalDendrogram >> elements [ - - | stream | - stream := Array new writeStream. - self elementsDo: [:each | stream nextPut: each]. - ^stream contents -] - -{ #category : #enumerating } -MalDendrogram >> elementsDo: aBlock [ - - ^self subclassResponsibility -] - -{ #category : #accessing } -MalDendrogram >> index [ - - ^self isRoot - ifTrue: [1] - ifFalse: - [self isLeft - ifTrue: [self parent index] - ifFalse: [self parent index + self parent left size]] -] - -{ #category : #testing } -MalDendrogram >> isLeft [ - - ^self parent left == self -] - -{ #category : #testing } -MalDendrogram >> isRight [ - - ^self parent right == self -] - -{ #category : #testing } -MalDendrogram >> isRoot [ - - ^parent == nil -] - -{ #category : #accessing } -MalDendrogram >> leaves [ - - | stream | - stream := Array new writeStream. - self leavesDo: [:each | stream nextPut: each]. - ^stream contents -] - -{ #category : #enumerating } -MalDendrogram >> leavesDo: aBlock [ - - ^self subclassResponsibility -] - -{ #category : #accessing } -MalDendrogram >> left [ - - ^self subclassResponsibility -] - -{ #category : #'instance creation' } -MalDendrogram >> merge: dendrogram at: threshold [ - - ^MalDendrogramNode with: self with: dendrogram at: threshold -] - -{ #category : #accessing } -MalDendrogram >> nodes [ - - | stream | - stream := Array new writeStream. - self nodesDo: [:each | stream nextPut: each]. - ^stream contents -] - -{ #category : #enumerating } -MalDendrogram >> nodesDo: aBlock [ - - ^self subclassResponsibility -] - -{ #category : #seriation } -MalDendrogram >> orderLeafs [ - - ^self subclassResponsibility -] - -{ #category : #accessing } -MalDendrogram >> parent [ - - ^parent -] - -{ #category : #removing } -MalDendrogram >> remove: oldObject ifAbsent: anExceptionBlock [ - - self shouldNotImplement -] - -{ #category : #accessing } -MalDendrogram >> right [ - - ^self subclassResponsibility -] - -{ #category : #accessing } -MalDendrogram >> size [ - - ^self subclassResponsibility -] - -{ #category : #private } -MalDendrogram >> species [ - - ^OrderedCollection -] - -{ #category : #seriation } -MalDendrogram >> swap [ - - ^self subclassResponsibility -] - -{ #category : #accessing } -MalDendrogram >> threshold [ - - ^self subclassResponsibility -] diff --git a/src-archive/Moose-Algos-Clustering/MalDendrogramLeaf.class.st b/src-archive/Moose-Algos-Clustering/MalDendrogramLeaf.class.st deleted file mode 100644 index 4f9aab5f5..000000000 --- a/src-archive/Moose-Algos-Clustering/MalDendrogramLeaf.class.st +++ /dev/null @@ -1,82 +0,0 @@ -" -Copyright (c), 2004-2007 Adrian Kuhn. This class is part of Hapax. Hapax is distributed under BSD License, see package comment. -" -Class { - #name : #MalDendrogramLeaf, - #superclass : #MalDendrogram, - #instVars : [ - 'element' - ], - #category : #'Moose-Algos-Clustering' -} - -{ #category : #'instance creation' } -MalDendrogramLeaf class >> with: anElement [ - - ^(self new) - instVarNamed: 'element' put: anElement; - yourself -] - -{ #category : #accessing } -MalDendrogramLeaf >> element [ - - ^element -] - -{ #category : #enumerating } -MalDendrogramLeaf >> elementsDo: aBlock [ - - aBlock value: element -] - -{ #category : #enumerating } -MalDendrogramLeaf >> leavesDo: aBlock [ - - aBlock value: self -] - -{ #category : #accessing } -MalDendrogramLeaf >> left [ - - ^self -] - -{ #category : #enumerating } -MalDendrogramLeaf >> nodesDo: aBlock [ - "does nothing" - - -] - -{ #category : #seriation } -MalDendrogramLeaf >> orderLeafs [ - "do nothing" - - -] - -{ #category : #accessing } -MalDendrogramLeaf >> right [ - - ^self -] - -{ #category : #accessing } -MalDendrogramLeaf >> size [ - - ^1 -] - -{ #category : #seriation } -MalDendrogramLeaf >> swap [ - "does nothing" - - -] - -{ #category : #accessing } -MalDendrogramLeaf >> threshold [ - - ^ Number zero -] diff --git a/src-archive/Moose-Algos-Clustering/MalDendrogramNode.class.st b/src-archive/Moose-Algos-Clustering/MalDendrogramNode.class.st deleted file mode 100644 index 6b045d381..000000000 --- a/src-archive/Moose-Algos-Clustering/MalDendrogramNode.class.st +++ /dev/null @@ -1,105 +0,0 @@ -" -Copyright (c), 2004-2007 Adrian Kuhn. This class is part of Hapax. Hapax is distributed under BSD License, see package comment. -" -Class { - #name : #MalDendrogramNode, - #superclass : #MalDendrogram, - #instVars : [ - 'left', - 'right', - 'threshold' - ], - #category : #'Moose-Algos-Clustering' -} - -{ #category : #'instance creation' } -MalDendrogramNode class >> with: left with: right at: threshold [ - - | new | - new := (self new) - instVarNamed: 'left' put: left; - instVarNamed: 'right' put: right; - instVarNamed: 'threshold' put: threshold; - yourself. - left instVarNamed: 'parent' put: new. - right instVarNamed: 'parent' put: new. - ^new -] - -{ #category : #enumerating } -MalDendrogramNode >> elementsDo: aBlock [ - - left elementsDo: aBlock. - right elementsDo: aBlock -] - -{ #category : #enumerating } -MalDendrogramNode >> leavesDo: aBlock [ - - left leavesDo: aBlock. - right leavesDo: aBlock -] - -{ #category : #accessing } -MalDendrogramNode >> left [ - - ^left -] - -{ #category : #enumerating } -MalDendrogramNode >> nodesDo: aBlock [ - - aBlock value: self. - left nodesDo: aBlock. - right nodesDo: aBlock -] - -{ #category : #seriation } -MalDendrogramNode >> orderLeafs [ - - | a b c d array | - a := self left left. - b := self left right. - c := self right left. - d := self right right. - array := Array - with: (a dist: c) -> [self left swap] - with: - (a dist: d) - -> - [self left swap. - self right swap] - with: (b dist: c) -> [] - with: (b dist: d) -> [self right swap]. - - (array copy sort: [:el1 :el2 | el1 key < el2 key]) first value value. - self left orderLeafs. - self right orderLeafs -] - -{ #category : #accessing } -MalDendrogramNode >> right [ - - ^right -] - -{ #category : #accessing } -MalDendrogramNode >> size [ - - ^left size + right size -] - -{ #category : #seriation } -MalDendrogramNode >> swap [ - - | swap | - swap := left. - left := right. - right := swap -] - -{ #category : #accessing } -MalDendrogramNode >> threshold [ - - ^threshold -] diff --git a/src-archive/Moose-Algos-Clustering/MalDistanceSquare.class.st b/src-archive/Moose-Algos-Clustering/MalDistanceSquare.class.st deleted file mode 100644 index 7664a4173..000000000 --- a/src-archive/Moose-Algos-Clustering/MalDistanceSquare.class.st +++ /dev/null @@ -1,156 +0,0 @@ -" -Copyright (c), 2004-2007 Adrian Kuhn. This class is part of Hapax. Hapax is distributed under BSD License, see package comment. -" -Class { - #name : #MalDistanceSquare, - #superclass : #MalSymetricMatrix, - #instVars : [ - 'distanceBlock', - 'columnVector', - 'items', - 'dendrogram' - ], - #category : #'Moose-Algos-Clustering' -} - -{ #category : #constants } -MalDistanceSquare class >> defaultDistanceBlock [ - - ^[:a :b | a dist: b] -] - -{ #category : #'instance creation' } -MalDistanceSquare class >> on: items [ - - ^self - on: items - using: self defaultDistanceBlock -] - -{ #category : #'instance creation' } -MalDistanceSquare class >> on: vectorA and: vectorB using: distanceBlock [ - - [vectorA size = vectorB size] assert. - ^(self new: vectorA size) - initialize: vectorA and: vectorB using: distanceBlock; - yourself -] - -{ #category : #'instance creation' } -MalDistanceSquare class >> on: items using: distanceBlock [ - - ^(self new: items size) - initialize: items using: distanceBlock; - yourself -] - -{ #category : #private } -MalDistanceSquare class >> vectorSpecies [ - - ^MalArrayVector "FloatVector" -] - -{ #category : #accessing } -MalDistanceSquare >> at: row and: column put: aNumber [ - - ^self noModificationError -] - -{ #category : #private } -MalDistanceSquare >> checkInvariant [ - - ^super checkInvariant - and: - [(distanceBlock respondsTo: #value:value:) and: [items isCollection]] -] - -{ #category : #private } -MalDistanceSquare >> copyClusteringData [ - - ^partialColumns collect: [:each | each copy] -] - -{ #category : #accessing } -MalDistanceSquare >> dendrogram [ - dendrogram ifNil: [ self performSeriation ]. - ^ dendrogram -] - -{ #category : #accessing } -MalDistanceSquare >> distanceBlock [ - - ^distanceBlock -] - -{ #category : #accessing } -MalDistanceSquare >> distanceBlock: anObject [ - - distanceBlock := anObject -] - -{ #category : #'initialize-release' } -MalDistanceSquare >> initialize: vectorA and: vectorB using: aDistanceBlock [ - - items := nil. - distanceBlock := aDistanceBlock. - partialColumns - doWithIndex: - [:vector :column | - vector - putWithIndex: - [:row | - distanceBlock - value: (vectorA at: column) - value: (vectorB at: row)]] -] - -{ #category : #'initialize-release' } -MalDistanceSquare >> initialize: someItems using: aDistanceBlock [ - - items := someItems. - distanceBlock := aDistanceBlock. - partialColumns - doWithIndex: - [:vector :column | - vector - putWithIndex: - [:row | - distanceBlock - value: (items at: column) - value: (items at: row)]] -] - -{ #category : #accessing } -MalDistanceSquare >> items [ - - ^items -] - -{ #category : #actions } -MalDistanceSquare >> performSeriation [ - | newOrder | - dendrogram := (MalClusterEngine withDistanceMatrix: self) averageLinkage. - newOrder := self dendrogram orderLeafs asArray. - self rearrange: newOrder -] - -{ #category : #private } -MalDistanceSquare >> rearrange: newItems [ - - | newColumns indices | - [items equalsTo: newItems] assert. "create new column vectors." - newColumns := partialColumns collect: [:each | each copyEmpty: each size]. "get the new order of indices." - indices := newItems collect: [:each | items indexOf: each]. "map the distances into to the new vectors." - newColumns - doWithIndex: - [:vector :column | - vector - putWithIndex: - [:row | - self - at: (indices at: column) - and: (indices at: row)]]. "update state of object and check invariant" - partialColumns := newColumns. - items := newItems. "items := newItems." - [self checkInvariant] assert -] diff --git a/src-archive/Moose-Algos-Clustering/MalFeatureCollection.class.st b/src-archive/Moose-Algos-Clustering/MalFeatureCollection.class.st deleted file mode 100644 index a3d23c2c7..000000000 --- a/src-archive/Moose-Algos-Clustering/MalFeatureCollection.class.st +++ /dev/null @@ -1,88 +0,0 @@ -" -Copyright (c), 2004-2007 Adrian Kuhn. This class is part of Hapax. Hapax is distributed under BSD License, see package comment. -" -Class { - #name : #MalFeatureCollection, - #superclass : #OrderedCollection, - #type : #variable, - #instVars : [ - 'item' - ], - #category : #'Moose-Algos-Clustering' -} - -{ #category : #'instance creation' } -MalFeatureCollection class >> item: anItem features: aCollection [ - - ^((self withAll: aCollection) sorted) - setItem: anItem; - yourself -] - -{ #category : #distance } -MalFeatureCollection >> chroniaHausdorffDistance: aFeatureCollection [ - "Answer a modified hausdorff distance between myself and aFeatureCollection. - Further information see 'How Developers Drive Software Evolution' (to be published at IWPSE 2005). - Limitations of the implementation see FeatureCollection>>hausdorffMinima:." - - | distance | - distance := MalAccumulator squaredSum. - distance enumerate: (self hausdorffMinima: aFeatureCollection). - distance enumerate: (aFeatureCollection hausdorffMinima: self). - ^distance value -] - -{ #category : #distance } -MalFeatureCollection >> dist: aFeatureCollection [ - - ^self hausdorffDistance: aFeatureCollection -] - -{ #category : #distance } -MalFeatureCollection >> hausdorffDistance: aFeatureCollection [ - "Answer the hausdorff distance between myself and aFeatureCollection. - Limitations of the implementation see FeatureCollection>>hausdorffMinima:." - - | distance | - distance := MalAccumulator maximum. - distance enumerate: (self hausdorffMinima: aFeatureCollection). - distance enumerate: (aFeatureCollection hausdorffMinima: self). - ^distance value -] - -{ #category : #private } -MalFeatureCollection >> hausdorffMinima: aFeatureCollection [ - "Answer for each element in myself the distance to the nearest element in aFeatureCollection. - Assumes that the elements of both collections are sorted using an ordering that is compatible - with the distance metric defined between these elements. Thus this implementation works fine - with any arithemtic values, except points and complex numbers." - - | minima current stream | - stream := aFeatureCollection readStream. - current := stream next. - minima := self - collect: - [:a | - [stream atEnd not and: [(current dist: a) >= (stream peek dist: a)]] - whileTrue: [current := stream next]. - current dist: a]. - ^minima -] - -{ #category : #accessing } -MalFeatureCollection >> item [ - - ^item -] - -{ #category : #accessing } -MalFeatureCollection >> setItem: anObject [ - - item := anObject -] - -{ #category : #distance } -MalFeatureCollection >> sizeDistance: aFeatureCollection [ - - ^self size dist: aFeatureCollection size -] diff --git a/src-archive/Moose-Algos-Clustering/MalSeriationEngine.class.st b/src-archive/Moose-Algos-Clustering/MalSeriationEngine.class.st deleted file mode 100644 index 240ec83a3..000000000 --- a/src-archive/Moose-Algos-Clustering/MalSeriationEngine.class.st +++ /dev/null @@ -1,52 +0,0 @@ -" -Copyright (c), 2004-2007 Adrian Kuhn. This class is part of Hapax. Hapax is distributed under BSD License, see package comment. -" -Class { - #name : #MalSeriationEngine, - #superclass : #Object, - #instVars : [ - 'elements' - ], - #category : #'Moose-Algos-Clustering' -} - -{ #category : #'instance creation' } -MalSeriationEngine class >> applyOn: elements [ - - ^(self with: elements) defaultAlgorithm -] - -{ #category : #'instance creation' } -MalSeriationEngine class >> with: elements [ - - ^(self new) - elements: elements; - yourself -] - -{ #category : #algorithm } -MalSeriationEngine >> defaultAlgorithm [ - - ^self orderDendrogramLeaves -] - -{ #category : #accessing } -MalSeriationEngine >> elements [ - - ^elements -] - -{ #category : #accessing } -MalSeriationEngine >> elements: anObject [ - - elements := anObject -] - -{ #category : #algorithm } -MalSeriationEngine >> orderDendrogramLeaves [ - - | clusty | - clusty := MalClusterEngine with: elements. - clusty hierarchicalClusteringUsing: #averageLinkage. - ^clusty dendrogram orderLeafs asArray -] diff --git a/src-archive/Moose-Algos-Clustering/MalSimilarityItem.class.st b/src-archive/Moose-Algos-Clustering/MalSimilarityItem.class.st deleted file mode 100644 index 24b033b0f..000000000 --- a/src-archive/Moose-Algos-Clustering/MalSimilarityItem.class.st +++ /dev/null @@ -1,20 +0,0 @@ -" -Copyright (c), 2004-2007 Adrian Kuhn. This class is part of Hapax. Hapax is distributed under BSD License, see package comment. -" -Class { - #name : #MalSimilarityItem, - #superclass : #MalVectorItem, - #category : #'Moose-Algos-Clustering' -} - -{ #category : #'distance functions' } -MalSimilarityItem >> dist: anItem [ - - ^1 - (self vector cosine: anItem vector) -] - -{ #category : #'distance functions' } -MalSimilarityItem >> similarity: anItem [ - - ^self vector cosine: anItem vector -] diff --git a/src-archive/Moose-Algos-Clustering/MalTimeWarpingEngine.class.st b/src-archive/Moose-Algos-Clustering/MalTimeWarpingEngine.class.st deleted file mode 100644 index 15a01682c..000000000 --- a/src-archive/Moose-Algos-Clustering/MalTimeWarpingEngine.class.st +++ /dev/null @@ -1,119 +0,0 @@ -" -Copyright (c), 2004-2007 Adrian Kuhn. This class is part of Hapax. Hapax is distributed under BSD License, see package comment. -" -Class { - #name : #MalTimeWarpingEngine, - #superclass : #Object, - #instVars : [ - 'vectorA', - 'vectorB', - 'matrix', - 'cost', - 'distanceBlock' - ], - #category : #'Moose-Algos-Clustering' -} - -{ #category : #accessing } -MalTimeWarpingEngine >> distanceBlock [ - - ^distanceBlock -] - -{ #category : #accessing } -MalTimeWarpingEngine >> distanceBlock: anObject [ - - distanceBlock := anObject -] - -{ #category : #accessing } -MalTimeWarpingEngine >> getCost [ - - ^self getCostMatrix last -] - -{ #category : #private } -MalTimeWarpingEngine >> getCostMatrix [ - - matrix := MalDistanceSquare - on: vectorA - and: vectorB - using: self distanceBlock. - cost := MalArrayMatrix new: matrix dimension. - cost - at: 1 - and: 1 - put: (matrix at: 1 and: 1). - 2 - to: cost rowSize - do: - [:x | - cost - at: x - and: 1 - put: - (cost - at: x - 1 - and: 1) + (matrix at: x and: 1)]. - 2 - to: cost columnSize - do: - [:y | - cost - at: 1 - and: y - put: - (cost - at: 1 - and: y - 1) + (matrix at: 1 and: y)]. - 2 - to: cost rowSize - do: - [:x | - 2 - to: cost columnSize - do: - [:y | - cost - at: x - and: y - put: - (matrix at: x and: y) - + - ((cost - at: x - 1 - and: y - 1) - min: - ((cost - at: x - and: y - 1) - min: - (cost - at: x - 1 - and: y)))]]. - ^cost -] - -{ #category : #accessing } -MalTimeWarpingEngine >> vectorA [ - - ^vectorA -] - -{ #category : #accessing } -MalTimeWarpingEngine >> vectorA: anObject [ - - vectorA := anObject -] - -{ #category : #accessing } -MalTimeWarpingEngine >> vectorB [ - - ^vectorB -] - -{ #category : #accessing } -MalTimeWarpingEngine >> vectorB: anObject [ - - vectorB := anObject -] diff --git a/src-archive/Moose-Algos-Clustering/MalValueItem.class.st b/src-archive/Moose-Algos-Clustering/MalValueItem.class.st deleted file mode 100644 index 823a1a632..000000000 --- a/src-archive/Moose-Algos-Clustering/MalValueItem.class.st +++ /dev/null @@ -1,32 +0,0 @@ -" -Copyright (c), 2004-2007 Adrian Kuhn. This class is part of Hapax. Hapax is distributed under BSD License, see package comment. -" -Class { - #name : #MalValueItem, - #superclass : #Association, - #category : #'Moose-Algos-Clustering' -} - -{ #category : #'distance functions' } -MalValueItem >> dist: anItem [ - - ^self value dist: anItem value -] - -{ #category : #accessing } -MalValueItem >> item [ - - ^self key -] - -{ #category : #accessing } -MalValueItem >> item: anObject [ - - ^self key: anObject -] - -{ #category : #'distance functions' } -MalValueItem >> similarity: anItem [ - - ^self value similarity: anItem value -] diff --git a/src-archive/Moose-Algos-Clustering/MalVectorItem.class.st b/src-archive/Moose-Algos-Clustering/MalVectorItem.class.st deleted file mode 100644 index 7969e5ae2..000000000 --- a/src-archive/Moose-Algos-Clustering/MalVectorItem.class.st +++ /dev/null @@ -1,70 +0,0 @@ -" -Copyright (c), 2004-2007 Adrian Kuhn. This class is part of Hapax. Hapax is distributed under BSD License, see package comment. -" -Class { - #name : #MalVectorItem, - #superclass : #MalVectorDecorator, - #instVars : [ - 'item' - ], - #category : #'Moose-Algos-Clustering' -} - -{ #category : #'instance creation' } -MalVectorItem class >> with: anElement and: aVector [ - - ^(self on: aVector) - item: anElement; - yourself -] - -{ #category : #'instance creation' } -MalVectorItem class >> with: anElement andAll: aCollection [ - - ^(self on: (MalArrayVector withAll: aCollection)) - item: anElement; - yourself -] - -{ #category : #accessing } -MalVectorItem >> = anObject [ - - ^super = anObject - or: [(anObject isKindOf: MalVectorItem) and: [self item = anObject item]] -] - -{ #category : #'distance functions' } -MalVectorItem >> dist: anItem [ - - ^self vector dist: anItem vector -] - -{ #category : #accessing } -MalVectorItem >> item [ - - ^item -] - -{ #category : #accessing } -MalVectorItem >> item: anObject [ - - item := anObject -] - -{ #category : #printing } -MalVectorItem >> printOn: aStream [ - - item printOn: aStream -] - -{ #category : #accessing } -MalVectorItem >> vector [ - - ^vector -] - -{ #category : #accessing } -MalVectorItem >> vector: anObject [ - - vector := anObject -] diff --git a/src-archive/Moose-Algos-Clustering/SequenceableCollection.extension.st b/src-archive/Moose-Algos-Clustering/SequenceableCollection.extension.st deleted file mode 100644 index 80905fb0a..000000000 --- a/src-archive/Moose-Algos-Clustering/SequenceableCollection.extension.st +++ /dev/null @@ -1,36 +0,0 @@ -Extension { #name : #SequenceableCollection } - -{ #category : #'*Moose-Algos-Clustering' } -SequenceableCollection >> copyRemoveAtIndex: index [ - "Return a copt of the receiver without the element at index." - - | newSequenceableCollection | - newSequenceableCollection := self species withSize: self size - 1. - newSequenceableCollection - replaceFrom: 1 - to: index - 1 - with: self - startingAt: 1. - newSequenceableCollection - replaceFrom: index - to: self size - 1 - with: self - startingAt: index +1. - ^newSequenceableCollection -] - -{ #category : #'*Moose-Algos-Clustering' } -SequenceableCollection >> reverseSort: aSortBlock [ - "-- yet another selector for #sortReverse: --" - "-- not deprecated, since both writings are reasonable --" - - self sortReverse: aSortBlock. -] - -{ #category : #'*Moose-Algos-Clustering' } -SequenceableCollection >> sortReverse: aSortBlock [ - "Sort the receiver in-place in reversed order using aSortBlock, which can be one - of: a closure with two agrument, a closure with one argument or a symbol." - - self sort: [:a :b | aSortBlock value: b. aSortBlock value: a] -] diff --git a/src-archive/Moose-Algos-Clustering/package.st b/src-archive/Moose-Algos-Clustering/package.st deleted file mode 100644 index 11e9e0061..000000000 --- a/src-archive/Moose-Algos-Clustering/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Moose-Algos-Clustering' } diff --git a/src-archive/Moose-Algos-HierarchicalGraph/MalHgNode.class.st b/src-archive/Moose-Algos-HierarchicalGraph/MalHgNode.class.st deleted file mode 100644 index 07a7fd349..000000000 --- a/src-archive/Moose-Algos-HierarchicalGraph/MalHgNode.class.st +++ /dev/null @@ -1,529 +0,0 @@ -" -A MalHgNode is a node inside a hierarchical graph. It knows the graph it belongs to, its children and its parent, on which level in the graph it resides and its outgoing ind incoming edges. One can also store arbitrary informaition as attributes to a node. - -Instance Variables - attributes: - children: - hiGraph: - incoming: - level: - outgoing: - parent: - -attributes - - Dictionary to attach arbitrary information to a node - -children - - This nodes children. Empty collection if the node is a leaf in the hierarchy. - -hiGraph - - The MalHierarchicalGraph this node belongs to. - -incoming - - All incoming edges to this node. - -level - - The level this node is on in the hierachy where 0 is the top level (root nodes). The larger the number, the deeper down in the hierarchy the node is located. - -outgoing - - All outgoing edges from this node. - -parent - - This nodes parent - -" -Class { - #name : #MalHgNode, - #superclass : #MalGraphNode, - #instVars : [ - 'hiGraph', - 'parent', - 'children', - 'outgoing', - 'incoming', - 'level', - 'attributes' - ], - #category : #'Moose-Algos-HierarchicalGraph' -} - -{ #category : #creation } -MalHgNode class >> in: hiGraph with: aModel [ - "Creates a new instance of a MalHgNode for given hiGraph, with given object as model." - | node | - node := MalHgNode new. - node hiGraph: hiGraph. - node model: aModel. - ^ node. -] - -{ #category : #creation } -MalHgNode class >> in: hiGraph with: aModel level: level [ - "Creates a new instance of a MalHgNode for given hiGraph, with given object as model, on given level." - | node | - node := MalHgNode new. - node model: aModel. - node hiGraph: hiGraph. - node level: level. - ^ node. -] - -{ #category : #creation } -MalHgNode class >> with: aModel [ - "Creates a new instance of a MalHgNode with given object as model" - | node | - node := MalHgNode new. - node model: aModel. - ^ node. -] - -{ #category : #adding } -MalHgNode >> addChild: aNode [ - "Adds a child node." - (children includes: aNode) ifFalse: [ - children add: aNode. - ] -] - -{ #category : #adding } -MalHgNode >> addChildren: aCollection [ - "Add multiple children to this node." - aCollection do: [ :each | - self addChild: each. - ]. -] - -{ #category : #adding } -MalHgNode >> addIncoming: anEdge [ - "Add an incoming edge to this node." - incoming add: anEdge. - -] - -{ #category : #adding } -MalHgNode >> addOutgoing: anEdge [ - "Add an outgoing edge to this node." - outgoing add: anEdge. - -] - -{ #category : #accessing } -MalHgNode >> attributeAt: aKey [ - "Returns attribute with given key, nil if attribute is absent." - ^ attributes at: aKey ifAbsent: [ nil ]. -] - -{ #category : #accessing } -MalHgNode >> attributeAt: aKey ifAbsent: aBlock [ - "Returns attribute with given key, given block is run if there is no element with given key." - ^ attributes at: aKey ifAbsent: aBlock. -] - -{ #category : #accessing } -MalHgNode >> attributeAt: aKey ifAbsentPut: aBlock [ - "Returns attribute with given key, if no attribute exists with given key, use given block to put an attribute. " - ^ attributes at: aKey ifAbsentPut: aBlock. -] - -{ #category : #accessing } -MalHgNode >> attributeAt: aKey put: anObject [ - "Puts given object as attribute at given key." - attributes at: aKey put: anObject. -] - -{ #category : #accessing } -MalHgNode >> attributes [ - "Returns all attributes of this MalHgNode." - ^ attributes -] - -{ #category : #accessing } -MalHgNode >> children [ - "Returns this nodes children." - ^ children. -] - -{ #category : #printing } -MalHgNode >> description [ - "Returns a description of this node, based on its name and its models class" - ^ model name , ' (' , model class name , ')'. -] - -{ #category : #accessing } -MalHgNode >> edges [ - "Return all edges, incoming and outgoing, as a set." - ^ (Set newFrom: incoming) addAll: outgoing. - -] - -{ #category : #accessing } -MalHgNode >> edges: aLevel [ - "Return all edges, incoming and outgoing, on given level as a Set." - ^ (Set newFrom: (self incomingEdges: aLevel)) addAll: (self outgoingEdges: aLevel). - -] - -{ #category : #accessing } -MalHgNode >> hiGraph [ - "Returns the hiGraph this node belongs to." - ^ hiGraph -] - -{ #category : #accessing } -MalHgNode >> hiGraph: anObject [ - "Sets the hiGraph this nodes belongs to." - hiGraph := anObject -] - -{ #category : #accessing } -MalHgNode >> incoming [ - "Returns all incoming edges." - ^ incoming. - -] - -{ #category : #enumerating } -MalHgNode >> incomingEdges: aLevel [ - "Returns a collection of of all incoming edges that are on given level. - Returns an empty collection if there are no incoming edges. - Returns all incoming edges if given level is nil" - | incomingEdges | - incomingEdges := Set new. - self incoming do: [ :rel | - aLevel isNil ifTrue: [ - incomingEdges add: rel. - ] - ifFalse: [ - rel from level = level ifTrue: [ - incomingEdges add: rel. - ]. - ]. - - ]. - ^ incomingEdges. -] - -{ #category : #enumerating } -MalHgNode >> incomingFrom: aNode [ - "Returns all edges that are incoming from given node, nil if no such edge was found." - | result | - result := nil. - self incoming do: [:rel | - (rel from == aNode) ifTrue: [ - (result isNil) ifTrue: [ - result := Set new. - ]. - result add: rel. - ]. - ]. - ^ result. -] - -{ #category : #enumerating } -MalHgNode >> incomingFromThese: aNodeCollection [ - "Returns all edges that are incoming from given node collection, empty collection if no such edge was found." - | result | - result := Set new. - aNodeCollection do: [ :node | - result addAll: (self incomingFrom: node). - ]. - ^ result. -] - -{ #category : #enumerating } -MalHgNode >> incomingNotPropagated [ - "Returns all incoming edges that were not propagated." - ^ incoming reject: [ :rel | rel class = MalHgPropagatedEdge ]. - -] - -{ #category : #enumerating } -MalHgNode >> incomingPropagated [ - "Returns all incoming edges that were propagated." - ^ incoming select: [ :rel | rel class = MalHgPropagatedEdge ]. - -] - -{ #category : #enumerating } -MalHgNode >> incomingSources [ - "Returns a set of all source nodes of all incoming edges to this node. - Returns an empty set if there are no incoming edges." - ^ self incomingSources: nil. -] - -{ #category : #enumerating } -MalHgNode >> incomingSources: aLevel [ - "Returns a collection of all source nodes of all incoming edges that are on given level. - Returns an empty collection if there are no incoming edges. - Returns all incoming sources if given level is nil." - | incomingSources | - incomingSources := Set new. - self incoming do: [ :rel | - aLevel isNil ifTrue: [ - incomingSources add: rel from. - ] - ifFalse: [ - rel from level = level ifTrue: [ - incomingSources add: rel from. - ]. - ]. - - ]. - ^ incomingSources. -] - -{ #category : #initialization } -MalHgNode >> initialize [ - "Initializes this node by resetting it." - self resetHierarchy. - self resetEdges. - self resetAttributes. -] - -{ #category : #testing } -MalHgNode >> isLeafNode [ - ^ children isEmpty. - -] - -{ #category : #testing } -MalHgNode >> isRootNode [ - "Return whether this node is a root node or not." - ^ parent isNil. - -] - -{ #category : #accessing } -MalHgNode >> level [ - "Returns the level this node is on in the hiGraph." - ^ level. -] - -{ #category : #accessing } -MalHgNode >> level: aLevel [ - "Sets the level this node is on in the hiGraph." - level := aLevel. -] - -{ #category : #testing } -MalHgNode >> notLeafNode [ - "Return whether this node is not a leaf node, false if it is." - ^ children notEmpty. - -] - -{ #category : #testing } -MalHgNode >> notRootNode [ - "Return whether this node is not a root node, false if it is." - ^ parent notNil. - -] - -{ #category : #accessing } -MalHgNode >> outgoing [ - "Returns all outgoing relationships." - ^ outgoing. - -] - -{ #category : #enumerating } -MalHgNode >> outgoingDestinations [ - "Returns a set of all destination nodes of all outgoing edge target nodes. - Returns an empty set if there are no such nodes." - ^ self outgoingDestinations: nil. -] - -{ #category : #enumerating } -MalHgNode >> outgoingDestinations: aLevel [ - "Returns a collection of all destination nodes of all outgoing relationship that are on given level. - Returns an empty collection if there are no such nodes. - Returns all outgoing destinations if given level is nil." - | outgoingDestinations | - outgoingDestinations := Set new. - self outgoing do: [ :rel | - aLevel isNil ifTrue: [ - outgoingDestinations add: rel destination. - ] - ifFalse: [ - rel destination level = level ifTrue: [ - outgoingDestinations add: rel destination. - ]. - ]. - ]. - ^ outgoingDestinations. -] - -{ #category : #enumerating } -MalHgNode >> outgoingEdges: aLevel [ - "Returns a collection of all of all outgoing relationship that are on given level. - Returns an empty collection if there are no such relationships. - Returns all outgoing relationships if given level is nil." - | outgoingRelationships | - outgoingRelationships := Set new. - self outgoing do: [ :rel | - aLevel isNil ifTrue: [ - outgoingRelationships add: rel. - ] - ifFalse: [ - rel to level = level ifTrue: [ - outgoingRelationships add: rel. - ]. - ]. - ]. - ^ outgoingRelationships. -] - -{ #category : #enumerating } -MalHgNode >> outgoingNotPropagated [ - "Returns all outgoing relationships that were not propagated." - ^ outgoing reject: [ :rel | rel class = MalHgPropagatedEdge ]. - -] - -{ #category : #enumerating } -MalHgNode >> outgoingPropagated [ - "Returns all outgoing relationships that were propagated." - ^ outgoing select: [ :rel | rel class = MalHgPropagatedEdge ]. - -] - -{ #category : #enumerating } -MalHgNode >> outgoingTo: aNode [ - "Returns all relationships that are outgoing to given node, empty collection if no such relationship was found." - | resultSet | - resultSet := Set new. - self outgoing do: [:rel | - (rel to == aNode) ifTrue: [ - resultSet add: rel. - ]. - ]. - ^ resultSet. -] - -{ #category : #enumerating } -MalHgNode >> outgoingToThese: aNodeCollection [ - "Returns all relationships that are outgoing to given one or more of given node collection, empty collection if no such relationship was found." - | resultSet | - resultSet := Set new. - aNodeCollection do: [ :node | - resultSet addAll: (self outgoingTo: node). - ]. - ^ resultSet. - -] - -{ #category : #accessing } -MalHgNode >> parent [ - "Returns the parent of this node. If node returns nil, it is a root node." - ^ parent. - -] - -{ #category : #accessing } -MalHgNode >> parent: aNode [ - "Sets parent of this node" - parent := aNode. - -] - -{ #category : #accessing } -MalHgNode >> parentOnLevel: aLevel [ - "Returns the node that is on given level in this nodes ancestry. - Returns nil if this node is on the same or on a deeper level than given one - or if given level does not exist in the graph (i.e. greater level than leaf nodes)." - | levelDifference currentNode | - - self assert: aLevel >= 0 description: 'Smalles possible level is 0 (root nodes), negative levels do not exists. Given level was: ', aLevel asString. - - self level <= aLevel ifTrue: [ ^ nil ]. - - levelDifference := self level - aLevel. - currentNode := self. - - [levelDifference ~= 0] whileTrue: [ - currentNode := currentNode parent. - levelDifference := levelDifference - 1. - ]. - - ^ currentNode. - - -] - -{ #category : #enumerating } -MalHgNode >> recursiveChildren [ - "Returns the whole family tree below myself (excluding myself)." - ^ self recursiveChildren: false. - -] - -{ #category : #enumerating } -MalHgNode >> recursiveChildren: withMyself [ - "Returns the whole family tree below myself. - If withMyself is true, also add myself to the returning collection." - | result | - result := Set new. - - withMyself ifTrue: [ - result add: self. - ]. - - self isLeafNode ifTrue: [ - ^ result. - ]. - - result addAll: children. - - children do: [ :each | - result addAll: (each recursiveChildren: true). - ]. - - ^ result. -] - -{ #category : #resetting } -MalHgNode >> resetAttributes [ - "Resets this nodes attributes." - attributes := Dictionary new. -] - -{ #category : #resetting } -MalHgNode >> resetEdges [ - "Resets this nodes edges" - outgoing := OrderedCollection new. "Outgoing Edges" - incoming := OrderedCollection new. "Incoming Edges" -] - -{ #category : #resetting } -MalHgNode >> resetHierarchy [ - "Resets this nodes children" - children := OrderedCollection new. "My direct children" -] - -{ #category : #ordering } -MalHgNode >> setLevels [ - "Set levels of all my children if I have any. I have to have a level set for this to work." - | currLevelCollection | - - self assert: (level notNil) description: 'This node must have a level set to set its childrens level'. - currLevelCollection := hiGraph levels at: level ifAbsentPut: [ OrderedCollection new ]. - - "We have already added the root nodes in the process. No need to add them again." - self notRootNode ifTrue: [ - currLevelCollection add: self. - ]. - - "Recurse if this node has children." - self notLeafNode ifTrue: [ - children do: [ :childNode | - childNode level: level + 1. - childNode setLevels. - ]. - ]. -] - -{ #category : #printing } -MalHgNode >> shortName [ - "Returns a short name of this node." - ^ model name. -] diff --git a/src-archive/Moose-Algos-HierarchicalGraph/MalHgPropagatedEdge.class.st b/src-archive/Moose-Algos-HierarchicalGraph/MalHgPropagatedEdge.class.st deleted file mode 100644 index 4c6b31774..000000000 --- a/src-archive/Moose-Algos-HierarchicalGraph/MalHgPropagatedEdge.class.st +++ /dev/null @@ -1,11 +0,0 @@ -" -A MalHgPropagatedEdge is an edge that represents another edge, propagated up in hierarchy - -Instance Variables - -" -Class { - #name : #MalHgPropagatedEdge, - #superclass : #MalGraphEdge, - #category : #'Moose-Algos-HierarchicalGraph' -} diff --git a/src-archive/Moose-Algos-HierarchicalGraph/MalHierarchicalGraph.class.st b/src-archive/Moose-Algos-HierarchicalGraph/MalHierarchicalGraph.class.st deleted file mode 100644 index 1e354d7aa..000000000 --- a/src-archive/Moose-Algos-HierarchicalGraph/MalHierarchicalGraph.class.st +++ /dev/null @@ -1,698 +0,0 @@ -" -A MalHierarchicalGraph is composed of a collection of nodes situated in a hierarchy and two types of edges: edges between the base nodes and edges that are propagated up in the hierarchy. - -Instance Variables - levels: - -levels - - dict keys: level, values: all nodes on that level as a Collection. - -" -Class { - #name : #MalHierarchicalGraph, - #superclass : #MalGraphAlgorithm, - #instVars : [ - 'levels' - ], - #category : #'Moose-Algos-HierarchicalGraph' -} - -{ #category : #creation } -MalHierarchicalGraph class >> basicCreate: baseEntities [ - | hiGraph | - hiGraph := self new. - "TODO: refactor this" - ((baseEntities isKindOf: Collection) and: ((baseEntities isKindOf: String) not)) - ifTrue: [ hiGraph nodes: baseEntities. ] - ifFalse: [ hiGraph node: baseEntities ]. - ^ hiGraph. -] - -{ #category : #creation } -MalHierarchicalGraph class >> with: baseModels [ - "Building a HiGraph from base models (collection of root or leaf nodes)." - - ^ self basicCreate: baseModels - -] - -{ #category : #api } -MalHierarchicalGraph >> addEdge: aModel from: source to: target [ - "Imperative method to add a single edge to the graph." - self addEdges: (OrderedCollection with: aModel) from: source to: target. -] - -{ #category : #api } -MalHierarchicalGraph >> addEdges: aCollection from: source to: destination [ - "Imperative method to add edges. Can be called multiple times, before #propagateEdges is called (must be done manually)." - self addEdges: aCollection source: source destination: destination. -] - -{ #category : #building } -MalHierarchicalGraph >> addEdges: aCollection source: source destination: destination [ - | foundClasses | - self addEdges: aCollection - sourceBlock: [ :e | - (source isKindOf: Array) - ifTrue: [ - foundClasses := (source select: [ :asso | e isKindOf: asso key ]). - foundClasses ifEmpty: [ nil ] ifNotEmpty: [ foundClasses last value value: e ]. - ] - "Symbol (method) or block based way" - ifFalse: [ - source value: e. - ]. - ] - destinationBlock: [ :e | - (destination isKindOf: Array) - ifTrue: [ - foundClasses := (destination select: [ :asso | e isKindOf: asso key ]). - foundClasses ifEmpty: [ nil ] ifNotEmpty: [ foundClasses last value value: e ]. - ] - "Symbol (method) or block based way" - ifFalse: [ - destination value: e. - ]. - ]. -] - -{ #category : #building } -MalHierarchicalGraph >> addEdges: aCollection sourceBlock: srcBlock destinationBlock: dstBlock [ - "Add given edges to the higraph. - If through given edges new nodes are found, they are NOT added to the graph." - | srcEntity dstEntity srcNode dstNode edge | - aCollection do: [ :e | - - "Get source and destination models." - srcEntity := srcBlock value: e. - dstEntity := dstBlock value: e. - - "Models should not be nil" - self assert: (srcEntity notNil and: dstEntity notNil) description: 'Models should never be nil. Check correctness of srcBlock and dstBlock.'. - - "Get nodes from entities" - (nodes includesKey: srcEntity) - ifTrue: [ - srcNode := nodes at: srcEntity. - ]. - - (nodes includesKey: dstEntity) - ifTrue: [ - dstNode := nodes at: dstEntity. - ]. - - "Only create edge if nodes were found." - (srcNode isNil or: dstNode isNil) ifFalse: [ - - "Create an edge between the nodes and add it to the graph." - edge := MalGraphEdge with: e from: srcNode to: dstNode. - - "Adding edge to the graphs edge collection" - self edges add: edge. - - "Add edge references to the node themselves" - srcNode addOutgoing: edge. - dstNode addIncoming: edge. - ]. - ]. -] - -{ #category : #api } -MalHierarchicalGraph >> aggregation: howToGetParent [ - | foundClasses | - (howToGetParent isKindOf: Array) - "Class based" - ifTrue: [ - self blockToGetParent: [ :e | - foundClasses := (howToGetParent select: [ :asso | e isKindOf: asso key ]). - foundClasses ifEmpty: [ nil ] ifNotEmpty: [ foundClasses last value value: e ]. - ] - ] - "Symbol (method) or block based way" - ifFalse: [ - self blockToGetParent: [ :e | howToGetParent value: e ]. - ]. -] - -{ #category : #building } -MalHierarchicalGraph >> blockToGetChildren: aBuildingBlock [ - "Builds the hierarchical graph based on root entities and given block" - | rootNodes nodesToProcess | - - "Make sure base entities are set before calling this method." - self assert: (nodes notEmpty) description: 'Base nodes have to be set before calling this method.'. - - "If this method is called we know that we are in top down building mode, - this means all given base nodes are root nodes (level 0)." - rootNodes := self nodes asOrderedCollection. - rootNodes do: [ :n | n level: 0 ]. - levels at: 0 put: rootNodes. - - nodesToProcess := Stack new. - nodesToProcess addAll: rootNodes. - - [nodesToProcess notEmpty] whileTrue: [ - | node childrenNodes | - - node := nodesToProcess pop. - - childrenNodes := self setChildrenOfNode: node builder: aBuildingBlock. - - (childrenNodes notEmpty) ifTrue: [ - - "Need to re-evaluate found children" - childrenNodes do: [ :childNode | - nodesToProcess push: childNode. - ]. - ] - ]. -] - -{ #category : #building } -MalHierarchicalGraph >> blockToGetParent: aBuildingBlock [ - "Builds the hierarchical graph based on the leaf entities and given block" - | nodesToProcess | - - "Make sure leafs are set before calling this method." - self assert: (nodes notEmpty) description: 'Base nodes have to be set before calling this method.'. - - nodesToProcess := Stack new. - nodesToProcess addAll: nodes values. - - [nodesToProcess notEmpty] whileTrue: [ - | node parentNode | - - node := nodesToProcess pop. - - parentNode := self setParentOfNode: node builder: aBuildingBlock. - - (parentNode notNil) ifTrue: [ - "Need to re-evaluate found parent" - nodesToProcess push: parentNode. - ] - ]. - - "After we have set up the hierarchy, we have to set the levels of the node(s), - so we can use this information when propagating relationships." - self setLevels. -] - -{ #category : #api } -MalHierarchicalGraph >> bottomUp: howToGetParent [ - "Build the hiGraph bottom up from given leaf nodes." - self aggregation: howToGetParent. -] - -{ #category : #api } -MalHierarchicalGraph >> containment: howToGetChildren [ - | foundClasses | - (howToGetChildren isKindOf: Array) - "Class based" - ifTrue: [ - self blockToGetChildren: [ :e | - foundClasses := (howToGetChildren select: [ :asso | e isKindOf: asso key ]). - foundClasses ifEmpty: [ nil ] ifNotEmpty: [ foundClasses last value value: e ]. - ] - ] - - "Symbol (method) or block based way" - ifFalse: [ - self blockToGetChildren: [ :e | howToGetChildren value: e ]. - ]. -] - -{ #category : #testing } -MalHierarchicalGraph >> deepestLevel [ - "Returns the deepest level in the hierarchy, i.e. the level the leaf nodes reside on." - ^ levels keys asSortedCollection last - -] - -{ #category : #accessing } -MalHierarchicalGraph >> edges [ - "Returns a Collection of all edges in this hiGraph." - ^ edges. -] - -{ #category : #api } -MalHierarchicalGraph >> edges: aCollection from: source to: destination [ - "Declerative method to add and propagate edges in one go." - self addEdges: aCollection source: source destination: destination. - self propagateEdges. -] - -{ #category : #api } -MalHierarchicalGraph >> edges: aCollection from: source to: target weight: weightFunction [ - ShouldNotImplement signal. "There are no weights in a hierarchical graph." -] - -{ #category : #enumerating } -MalHierarchicalGraph >> edgesNotPropagated [ - "Returns a Collection of all edges that were not propagated in this hiGraph." - ^ edges reject: [ :rel | rel class = MalHgPropagatedEdge ]. -] - -{ #category : #enumerating } -MalHierarchicalGraph >> edgesPropagated [ - "Returns a Collection of all edges that were propagated in this hiGraph." - ^ edges select: [ :rel | rel class = MalHgPropagatedEdge ]. -] - -{ #category : #enumerating } -MalHierarchicalGraph >> findNode: aModel [ - "Returns the node wrapping the given model or nil if such a node does not exists in the graph." - ^ self nodeWrapping: aModel. -] - -{ #category : #enumerating } -MalHierarchicalGraph >> findNode: aModel ifAbsent: aBlock [ - "Returns the node wrapping the given model, runs given block if such a node does not exists in the graph." - ^ self nodeWrapping: aModel ifAbsent: aBlock. -] - -{ #category : #'initialize-release' } -MalHierarchicalGraph >> initialize [ - self reset. - -] - -{ #category : #enumerating } -MalHierarchicalGraph >> leafNodes [ - "Returns a Collection of all leaf nodes of this hiGraph." - ^ levels at: self deepestLevel. -] - -{ #category : #api } -MalHierarchicalGraph >> leaves: entities [ - self nodes: entities. -] - -{ #category : #enumerating } -MalHierarchicalGraph >> level: aLevel [ - "Returns a collection of all nodes on given level." - ^ self nodesOnLevel: aLevel. -] - -{ #category : #accessing } -MalHierarchicalGraph >> levels [ - ^ levels. -] - -{ #category : #api } -MalHierarchicalGraph >> node: anEntity [ - "Convenience method to add a single base entity e.g. a single root node." - self nodes: (OrderedCollection with: anEntity ). -] - -{ #category : #configuration } -MalHierarchicalGraph >> nodeClass [ - ^ MalHgNode. -] - -{ #category : #accessing } -MalHierarchicalGraph >> nodeModels [ - "Returns a Collection of all wrapped models in the nodes of this HiGraph." - ^ nodes keys -] - -{ #category : #enumerating } -MalHierarchicalGraph >> nodeWrapping: aModel [ - "Returns the node wrapping the given model or nil if such a node does not exists in the graph." - ^ self nodeWrapping: aModel ifAbsent: [ nil ]. -] - -{ #category : #enumerating } -MalHierarchicalGraph >> nodeWrapping: aModel ifAbsent: aBlock [ - "Returns the node wrapping the given model." - ^ nodes at: aModel ifAbsent: aBlock . -] - -{ #category : #accessing } -MalHierarchicalGraph >> nodes [ - "Returns an Array of all nodes in this hiGraph." - ^ nodes values -] - -{ #category : #api } -MalHierarchicalGraph >> nodes: aCollection [ - "Adds base entites (can be root or leaf nodes) to the graph from which we will start building the complete graph. - This has to be done before calling blockToGetChildren or blockToGetParent." - - "Adding given entites as MalHgNode to the nodesDict." - aCollection do: [ :anEntity | - nodes at: anEntity put: (MalHgNode in: self with: anEntity). - ] -] - -{ #category : #accessing } -MalHierarchicalGraph >> nodesDict [ - "Returns a Dictionary with keys: models and values: nodes" - ^ nodes -] - -{ #category : #enumerating } -MalHierarchicalGraph >> nodesDownFromLevel: aLevel [ - "Returns a Collection of all nodes on given and on deeper levels (deeper meaning farer away from the root nodes)." - | result currLevel | - - result := OrderedCollection new. - currLevel := aLevel. - - [ levels includesKey: currLevel ] whileTrue: [ - result addAll: (levels at: currLevel). - currLevel := currLevel + 1. - ]. - - ^ result. -] - -{ #category : #enumerating } -MalHierarchicalGraph >> nodesFor: aCollectionOfModels [ - "Returns the nodes wrapping the given models or an empty collection if no such nodes could be found in the graph." - ^ self nodesWrapping: aCollectionOfModels -] - -{ #category : #enumerating } -MalHierarchicalGraph >> nodesOnLevel: aLevel [ - "Returns a collection of all nodes on a certain level (a cross cut of the higraph)" - ^ levels at: aLevel ifAbsent: [ OrderedCollection new ]. -] - -{ #category : #enumerating } -MalHierarchicalGraph >> nodesUpFromLevel: aLevel [ - "Returns a collection of all nodes on given and on higher levels (higher means nearer to the root node" - | result currLevel | - result := OrderedCollection new. - currLevel := aLevel. - [ aLevel >= 0 ] whileTrue: [ - result addAll: (levels at: currLevel). - currLevel := currLevel - 1. - ]. - - ^ result. -] - -{ #category : #enumerating } -MalHierarchicalGraph >> nodesWrapping: aModelCollection [ - "Returns the nodes wrapping the given models or an empty collection if no such nodes could be found in the graph." - | result | - result := OrderedCollection new. - - nodes do: [ :node | - aModelCollection do: [ :model | (node model = model) ifTrue: [ result add: node ]]. - ]. - - ^ result. -] - -{ #category : #printing } -MalHierarchicalGraph >> printOn: aStream [ - aStream - nextPutAll: 'HiGraph: (n: '; - nextPutAll: self nodesDict size printString; - nextPutAll: ', e: '; - nextPutAll: self edges size printString; - nextPutAll: ')'. -] - -{ #category : #private } -MalHierarchicalGraph >> privateEdges: aCollection [ - self edges: aCollection. -] - -{ #category : #private } -MalHierarchicalGraph >> privateNodes: aCollection [ - ShouldNotImplement signal. -] - -{ #category : #api } -MalHierarchicalGraph >> propagateEdges [ - "Propagates relationships up in the hiGraph from the leaf nodes." - self propagateEdges: OrderedCollection new. -] - -{ #category : #api } -MalHierarchicalGraph >> propagateEdges: classCollection [ - "Propagates relationships up in the hiGraph from the leaf nodes. - If a collection with classes is provied, only relationships between given classes are propagated." - | nodesToProcess propagatedRelationship srcNode dstNode srcAncestry dstAncestry srcAncestorNodeIsAllowedClass dstAncestorNodeIsAllowedClass | - - nodesToProcess := Stack new. - nodesToProcess addAll: self nodes. - - [nodesToProcess notEmpty] whileTrue: [ - srcNode := nodesToProcess pop. - - "Only check non-root nodes." - (srcNode isRootNode) ifFalse: [ - - "If there are outgoing relationships from this node..." - (srcNode outgoing notEmpty) - ifTrue: [ - - "Go through all original relations." - srcNode outgoingNotPropagated do: [ :outgoingRelationship | - - "Get destination node of relationship" - dstNode := outgoingRelationship to. - - srcAncestry := LinkedList new. - dstAncestry := LinkedList new. - - "Initialize ancestries with src and dest nodes." - srcAncestry add: srcNode. - dstAncestry add: dstNode. - - "Have to bring ancestries to the same level." - [srcAncestry last level = dstAncestry last level] whileFalse: [ - srcAncestry last level > dstAncestry last level ifTrue: [ - srcAncestry add: (srcAncestry last parent). - ] - ifFalse: [ - dstAncestry add: (dstAncestry last parent). - ]. - ]. - - "Fill up ancestry chains by searching for either common ancestor or two separate parents that are root nodes." - [(srcAncestry last parent == dstAncestry last parent) - or: - ((srcAncestry last isRootNode) or: (dstAncestry last isRootNode))] - whileFalse: [ - srcAncestry add: (srcAncestry last parent). - dstAncestry add: (dstAncestry last parent). - ]. - - "Now add outgoing relations from source node and its ancestry to destination node and its ancestry." - srcAncestry do: [ :srcAncestorNode | - - "Relationships from all source ancestry nodes to all destination ancestry nodes." - dstAncestry do: [ :dstAncestorNode | - - "Reset class restrictions. Assuming not allowed." - srcAncestorNodeIsAllowedClass := false. - dstAncestorNodeIsAllowedClass := false. - - "Add all connections in the ancestries as new relations. Except : - - the original relation - - If they are the same node - - if a given class restriction is not satisfied" - ((srcAncestorNode = srcNode and: (dstAncestorNode = dstNode)) - or: - (srcAncestorNode = dstAncestorNode)) - ifFalse: [ - - classCollection isEmpty ifTrue: [ - srcAncestorNodeIsAllowedClass := true. - dstAncestorNodeIsAllowedClass := true. - ] ifFalse: [ - "Are the classes of both nodes in the collection of allowed classes?" - classCollection do: [ :class | - - srcAncestorNode model class == class ifTrue: [srcAncestorNodeIsAllowedClass := true ]. - dstAncestorNode model class == class ifTrue: [dstAncestorNodeIsAllowedClass := true ]. - ]. - ]. - - "Only add the propoagated relationships if it satisfied the class restrictions." - (srcAncestorNodeIsAllowedClass and: dstAncestorNodeIsAllowedClass) ifTrue: [ - - "And finally, create and add a new propagated relationship." - propagatedRelationship := MalHgPropagatedEdge - with: outgoingRelationship model - from: srcAncestorNode - to: dstAncestorNode. - edges add: propagatedRelationship. - srcAncestorNode addOutgoing: propagatedRelationship. - dstAncestorNode addIncoming: propagatedRelationship. - ]. - ]. - ]. - ]. - ]. - ]. - ]. - ]. -] - -{ #category : #resetting } -MalHierarchicalGraph >> reset [ - self resetNodes. -] - -{ #category : #resetting } -MalHierarchicalGraph >> resetEdges [ - "Collection of all relationships in the graph." - edges := OrderedCollection new. - - "Remove edge reference form nodes." - self nodes ifNotEmpty: [ - self nodes do: [ :n | n resetEdges ]. - ]. -] - -{ #category : #resetting } -MalHierarchicalGraph >> resetNodes [ - "dict keys: models, values: nodes" - nodes := Dictionary new. - - "dict keys: level, values: all nodes on that level as a Collection." - levels := Dictionary new. - - "If nodes are reset, we have to reset edges as well, since there can't be edges without nodes." - self resetEdges. -] - -{ #category : #api } -MalHierarchicalGraph >> root: entity [ - self node: entity. -] - -{ #category : #enumerating } -MalHierarchicalGraph >> rootNodes [ - "Returns a Collection of all root nodes of this hiGraph." - ^ levels at: 0 ifAbsentPut: [ OrderedCollection new ]. -] - -{ #category : #enumerating } -MalHierarchicalGraph >> searchForModelsNamed: aSearchString [ - | matcher | - "Returns a collection of nodes whose model names match the given RegEx string" - matcher := RxMatcher forString: aSearchString. - ^ self nodes select: [ :node | matcher search: node model name ]. -] - -{ #category : #enumerating } -MalHierarchicalGraph >> searchForModelsNamed: aSearchString onLevel: level [ - | matcher | - "Returns a collection of nodes on given level whose model names match the given RegEx string" - matcher := RxMatcher forString: aSearchString. - ^ (self level: level) select: [ :node | matcher search: node model name ]. -] - -{ #category : #building } -MalHierarchicalGraph >> setChildrenOfNode: aNode builder: buildingBlock [ - "Gets children of given node via buildingBlock and sets them. - Returns a collection with found children or an empty one if no children were found." - | children currentLevel childrenEntities childNode | - - self assert: (self rootNodes notEmpty) description: 'There must be at least one root node set before calling this method.'. - - "Get children entities via blockToGetChildren" - childrenEntities := buildingBlock value: aNode model. - children := OrderedCollection new. - - "If the entity has no children it is a leaf and we return an empty collection." - (childrenEntities isNil) - ifTrue: [ ^ children. ] - - "Else we add found children to the graph." - ifFalse: [ - - currentLevel := aNode level. - - "Go through all found children..." - childrenEntities do: [ :childEntity | - - "Check if we already have the child stored in the graph, if yes retrieve it, else store it." - (nodes includesKey: childEntity) - ifTrue: [ - childNode := nodes at: childEntity. - ] - "Else ceate new child node." - ifFalse: [ - childNode := MalHgNode in: self with: childEntity level: currentLevel + 1. - nodes at: childEntity put: childNode. - ]. - - "Add given node as parent to child." - childNode parent: aNode. - - "Add child to given node." - aNode addChild: childNode. - - "Add node to found children." - children add: childNode. - ]. - - "Need to add children to correct level in the higraph." - levels at: (currentLevel + 1) - ifPresent: [ :collection | collection addAll: children ] - ifAbsent: [ levels at: (currentLevel + 1) put: children ]. - - ^ children. - ]. -] - -{ #category : #building } -MalHierarchicalGraph >> setLevels [ - "Goes through all nodes in the graph and sets their levels relative to the root (level 0)" - self rootNodes do: [ :rootNode | - rootNode level: 0. - rootNode setLevels. "Sets levels on all his children" - ]. -] - -{ #category : #building } -MalHierarchicalGraph >> setParentOfNode: aNode builder: buildingBlock [ - "Gets parent of given node via blockToGetParent, and sets it - or adds node to root nodes, if there is no parent. - Returns parent if one was found, nil else" - | parentNode parentEntity rootNodes | - - "Get parent entity through blockToGetParent" - parentEntity := buildingBlock value: aNode model. - - "If the entity has no parent, it is a rootNode" - (parentEntity isNil) - ifTrue: [ - rootNodes := levels at: 0 ifAbsentPut: [ OrderedCollection new ]. - (rootNodes includes: aNode) ifFalse: [ rootNodes add: aNode ]. - ^ nil. - ] - ifFalse: [ - - "Check if we already have the parent stored in the graph, if yes retrieve it, else store it." - (nodes includesKey: parentEntity) - ifTrue: [ - parentNode := nodes at: parentEntity. - ] - ifFalse: [ - parentNode := MalHgNode in: self with: parentEntity. - nodes at: parentEntity put: parentNode. - ]. - - "Add current node as child to parent" - parentNode addChild: aNode. - - "Add parent to current node as parent" - aNode parent: parentNode. - - "Return parent." - ^ parentNode. - ]. -] - -{ #category : #api } -MalHierarchicalGraph >> topDown: howToGetChildren [ - "Build the hiGraph top down from given root nodes." - self containment: howToGetChildren. -] diff --git a/src-archive/Moose-Algos-HierarchicalGraph/package.st b/src-archive/Moose-Algos-HierarchicalGraph/package.st deleted file mode 100644 index 5c17063da..000000000 --- a/src-archive/Moose-Algos-HierarchicalGraph/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Moose-Algos-HierarchicalGraph' } diff --git a/src-archive/Moose-Algos-Kontractor/MalKontractor.class.st b/src-archive/Moose-Algos-Kontractor/MalKontractor.class.st deleted file mode 100644 index d5ca12d64..000000000 --- a/src-archive/Moose-Algos-Kontractor/MalKontractor.class.st +++ /dev/null @@ -1,304 +0,0 @@ -" -I'm a word compacting class. I remove the most used letters from a word to compact it to a given size. - - (MalKontractor reduce: 'Hello' upTo: 3) - 'Hlo' - - You can also remove some elements using cut: - - (MalKontractor new - wordsToBeRemoved: #( 'Sea' 'WA' ) ; - upTo: 3) - reduce: 'WASeaSideba' - - returns 'idb' -" -Class { - #name : #MalKontractor, - #superclass : #Object, - #instVars : [ - 'sizeTo', - 'wordsToBeRemoved', - 'pairs' - ], - #classVars : [ - 'LetterFrequency' - ], - #category : #'Moose-Algos-Kontractor' -} - -{ #category : #benchs } -MalKontractor class >> bench [ -" - MessageTally spyOn: - MessageTally spyOn: [1000 timesRepeat: [ (Kontract new: 3 ) removeOne: 'hllo']] - -" - Time millisecondsToRun: [10000 timesRepeat: [ (self new: 3 ) removeOne: 'hllo']] -] - -{ #category : #initialize } -MalKontractor class >> initialize [ - "self initialize" - - - LetterFrequency := Dictionary new. - #( - #('e' 14.715) - #('s' 7.948) - #('a' 7.636) - #('i' 7.529) - #('t' 7.244) - #('n' 7.095) - #('r' 6.553) - #('u' 6.311) - #('l' 5.456) - #('o' 5.378) - #('d' 3.669) - #('c' 3.260) - #('p' 3.021) - #('m' 2.968) - #('é' 1.904) - #('v' 1.628) - #('q' 1.362) - #('f' 1.066) - #('b' 0.901) - #('g' 0.866) - #('j' 0.866) - #('h' 0.737) - #('i' 0.545) - #('à' 0.486) - #('x' 0.387) - #('y' 0.308) - #('è' 0.271) - #('ê' 0.225) - #('z' 0.136) - #('w' 0.114) - #('ç' 0.085) - #('ù' 0.058) - #('k' 0.049) - #('î' 0.045) - #('ï' 0.005) - #('ë' 0.000) - - #('E' 7.948*0.01) - #('S' 7.948*0.01) - #('A' 7.636*0.01) - #('I' 7.529*0.01) - #('T' 7.244*0.01) - #('N' 7.095*0.01) - #('R' 6.553*0.01) - #('U' 6.311*0.01) - #('L' 5.456*0.01) - #('O' 5.378*0.01) - #('D' 3.669*0.01) - #('C' 3.260*0.01) - #('P' 3.021*0.01) - #('M' 2.968*0.01) - #('V' 1.628*0.01) - #('Q' 1.362*0.01) - #('F' 1.066*0.01) - #('B' 0.901*0.01) - #('G' 0.866*0.01) - #('H' 0.737*0.01) - #('I' 0.545*0.01) - #('X' 0.387*0.01) - #('Y' 0.308*0.01) - #('Z' 0.136*0.01) - #('W' 0.114*0.01) - #('K' 0.049*0.01) - - #('1' 8.9) - #('2' 8.8) - #('3' 8.7) - #('4' 8.6) - #('5' 8.5) - #('6' 8.4) - #('7' 8.3) - #('8' 8.2) - #('9' 8.1) - #('0' 8) - #('_' 10) - #('-' 9) - #( ' ' 16) - #('!' 11) - #('@' 11) - #('#' 11) - #('$' 11) - #('%' 11) - #('^' 11) - #('&' 11) - #('*' 11) - #('(' 11) - #(')' 11) - #('+' 11) - #('=' 11) - #('{' 11) - #('}' 11) - #('[' 11) - #(']' 11) - #('|' 11) - #('\' 11) - #(';' 11) - #(':' 11) - #('"' 11) - #(',' 11) - #('<' 11) - #('>' 11) - #('.' 11) - #('?' 11) - #('/' 11) ) do: [:each | LetterFrequency at: (each first) put: each second]. - - - - - - - -] - -{ #category : #'instance creation' } -MalKontractor class >> new: anInteger [ - - ^self new upTo: anInteger -] - -{ #category : #'instance creation' } -MalKontractor class >> reduce: aString upTo: anInteger [ - "self reduce: 'hello world' upTo: 6" - - ^ (self new upTo: anInteger) reduce: aString -] - -{ #category : #'instance creation' } -MalKontractor class >> toSize: anInteger [ - "self upToCharacterNumber: 3" - - ^self new upTo: anInteger -] - -{ #category : #'instance creation' } -MalKontractor class >> upTo: anInteger [ - "self upTo: 3" - - ^self new upTo: anInteger -] - -{ #category : #deprecated } -MalKontractor >> chopWords: aString [ - - self deprecated: 'Use removeWordsIn: instead.'. - self removeWordsIn: aString. - -] - -{ #category : #deprecated } -MalKontractor >> cut: aCollectionOfRoots contractUpTo: anInteger [ - - self deprecated: 'Use wordsToBeRemoved: and toSize: instead.'. - wordsToBeRemoved := aCollectionOfRoots. - self upTo: anInteger. - - -] - -{ #category : #'initialize-release' } -MalKontractor >> initialize [ - - super initialize. - wordsToBeRemoved := #(). - pairs := {}. - self upTo: 5 -] - -{ #category : #computing } -MalKontractor >> letterFrequency: aString [ - - ^ LetterFrequency at: aString ifAbsent: [12] -] - -{ #category : #public } -MalKontractor >> reduce: aString [ - - |reducedString| - reducedString := self removeWordsIn: aString. - [reducedString size > self upTo] whileTrue: [ - reducedString := self removeOne: reducedString]. - ^reducedString - - -] - -{ #category : #computing } -MalKontractor >> removeOne: aString [ - - | comp note currentNote value | - comp := 1. - note := 0. - [ comp <= aString size ] whileTrue: [ - currentNote := self letterFrequency: (aString copyFrom: comp to: comp). - (currentNote > note ) ifTrue: [ - note := currentNote. - value := comp]. - comp := comp + 1]. - ^ aString copyWithoutIndex: value. -] - -{ #category : #computing } -MalKontractor >> removeWords: aString [ - "Remove all the words from the arguments based on the specification done using wordsToBeRemoved:" - - | t | - t := aString. - wordsToBeRemoved do: [:each | - t := t copyReplaceAll: each with: '']. - ^ t - - - - -] - -{ #category : #computing } -MalKontractor >> removeWordsIn: aString [ - "Remove all the words from the arguments based on the specification done using wordsToBeRemoved:" - - | t | - t := aString. - wordsToBeRemoved do: [:each | - t := t copyReplaceAll: each with: '']. - ^ t - - - - -] - -{ #category : #deprecated } -MalKontractor >> sizeTo [ - self deprecated: 'Use upTo instead'. - ^ sizeTo -] - -{ #category : #deprecated } -MalKontractor >> sizeTo: anInteger [ - self deprecated: 'Use upTo: instead'. - sizeTo := anInteger -] - -{ #category : #accessing } -MalKontractor >> upTo [ - ^ sizeTo -] - -{ #category : #accessing } -MalKontractor >> upTo: anInteger [ - sizeTo := anInteger -] - -{ #category : #configuration } -MalKontractor >> wordsToBeRemoved: aCollectionOfRoots [ - - wordsToBeRemoved := aCollectionOfRoots. - -] diff --git a/src-archive/Moose-Algos-Kontractor/package.st b/src-archive/Moose-Algos-Kontractor/package.st deleted file mode 100644 index f9ab17018..000000000 --- a/src-archive/Moose-Algos-Kontractor/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Moose-Algos-Kontractor' } diff --git a/src-archive/Moose-Development-Tools/MetacelloToolBox.extension.st b/src-archive/Moose-Development-Tools/MetacelloToolBox.extension.st deleted file mode 100644 index 190f6748e..000000000 --- a/src-archive/Moose-Development-Tools/MetacelloToolBox.extension.st +++ /dev/null @@ -1,56 +0,0 @@ -Extension { #name : #MetacelloToolBox } - -{ #category : #'*Moose-Development-Tools' } -MetacelloToolBox class >> mooseCreateFixedDevelopment: developmentVersionString for: configurationBasename importFromBaseline: baselineVersionString description: aString [ - - - | toolbox versionSpec | - (toolbox := self configurationNamed: configurationBasename) - createVersionMethod: 'version' , (self stripVersionStringForSelector: developmentVersionString) , ':' - inCategory: 'versions' - forVersion: developmentVersionString; - fixedImportFrom: baselineVersionString - updateProjects: false - updatePackages: true - versionSpecsDo: [ :anAttribute :aVersionSpec | - anAttribute == #common - ifTrue: [ - "update the author, blessing, description and timeStamp" - aVersionSpec - author: MetacelloPlatform current authorName; - blessing: #stable; - description: aString; - timestamp: MetacelloPlatform current timestamp ]. - true ]. - - versionSpec := toolbox methodSpec methodSections first versionSpec. - (versionSpec packages list collect: #spec) do: [ :spec | - spec - projectDo: [ :projectSpec | projectSpec versionString: #'stable' ] - packageDo: [ :ignore| ] - groupDo: [ :ignore| ] ]. - versionSpec packages clearMemberMap. - - toolbox commitMethod. - - ^ toolbox -] - -{ #category : #'*Moose-Development-Tools' } -MetacelloToolBox class >> mooseCreateFixedVersion: targetVersionString for: configurationBasename from: sourceVersionString description: aString [ - - - | toolbox sourceVersion | - toolbox := self configurationNamed: configurationBasename. - sourceVersion := toolbox project version: sourceVersionString. - (targetVersionString indexOfSubCollection: 'baseline') > 0 - ifTrue: [ self error: '' ]. - - "create development version version from development version" - self - mooseCreateFixedDevelopment: targetVersionString - for: configurationBasename - importFromBaseline: sourceVersion versionString - description: aString. - -] diff --git a/src-archive/Moose-Development-Tools/MooseAbstractZeroConfImageScript.class.st b/src-archive/Moose-Development-Tools/MooseAbstractZeroConfImageScript.class.st deleted file mode 100644 index 7389756a5..000000000 --- a/src-archive/Moose-Development-Tools/MooseAbstractZeroConfImageScript.class.st +++ /dev/null @@ -1,57 +0,0 @@ -" -I generate a downloader script in bash for a Moose image for the given release -" -Class { - #name : #MooseAbstractZeroConfImageScript, - #superclass : #ZeroConfImageScript, - #instVars : [ - 'imageName', - 'projectId' - ], - #category : #'Moose-Development-Tools' -} - -{ #category : #accessing } -MooseAbstractZeroConfImageScript class >> baseUrl [ - ^ 'http://get.moosetechnology.org' asZnUrl -] - -{ #category : #accessing } -MooseAbstractZeroConfImageScript >> defaultBasename [ - ^ self imageName, self release, 'Image' -] - -{ #category : #accessing } -MooseAbstractZeroConfImageScript >> defaultCombiningScript [ - ^ MooseZeroConfCombinedScript -] - -{ #category : #accessing } -MooseAbstractZeroConfImageScript >> htmlTitle [ - ^ self imageName, ' Zeroconf Script' -] - -{ #category : #accessing } -MooseAbstractZeroConfImageScript >> imageName [ - ^ imageName ifNil: [ 'Moose' ] -] - -{ #category : #accessing } -MooseAbstractZeroConfImageScript >> imageName: aString [ - imageName := aString -] - -{ #category : #accessing } -MooseAbstractZeroConfImageScript >> imageUrl [ - self subclassResponsibility -] - -{ #category : #accessing } -MooseAbstractZeroConfImageScript >> projectId [ - ^ projectId -] - -{ #category : #accessing } -MooseAbstractZeroConfImageScript >> projectId: aString [ - projectId := aString -] diff --git a/src-archive/Moose-Development-Tools/MooseImageSetupCommandLineHandler.class.st b/src-archive/Moose-Development-Tools/MooseImageSetupCommandLineHandler.class.st deleted file mode 100644 index 5619b95f4..000000000 --- a/src-archive/Moose-Development-Tools/MooseImageSetupCommandLineHandler.class.st +++ /dev/null @@ -1,58 +0,0 @@ -" -The command that is triggered to setup a Moose image right after the configuration is loaded in a fresh Pharo image. -" -Class { - #name : #MooseImageSetupCommandLineHandler, - #superclass : #CommandLineHandler, - #category : #'Moose-Development-Tools' -} - -{ #category : #accessing } -MooseImageSetupCommandLineHandler class >> commandName [ - ^ 'mooseimagesetup' -] - -{ #category : #accessing } -MooseImageSetupCommandLineHandler class >> description [ - ^ 'Sets up the image with Moose specific settings and logo' -] - -{ #category : #activation } -MooseImageSetupCommandLineHandler >> activate [ - self activateWithoutSaving. - Smalltalk snapshot: true andQuit: true -] - -{ #category : #activation } -MooseImageSetupCommandLineHandler >> activateWithoutSaving [ - GTImageSetupCommandLineHandler new activateWithoutSaving. - self installLogo. - self installImageDescription. - self flushMCCache. - IceRepository reset -] - -{ #category : #'moose utilities' } -MooseImageSetupCommandLineHandler >> flushMCCache [ - MCFileBasedRepository flushAllCaches -] - -{ #category : #'moose utilities' } -MooseImageSetupCommandLineHandler >> installImageDescription [ - MooseImage current timeStamp: DateAndTime now. - (self hasOption: 'signature') ifTrue: [ - MooseImage current signature: (self optionAt: 'signature') ] -] - -{ #category : #'moose utilities' } -MooseImageSetupCommandLineHandler >> installLogo [ - | file morph | - file := ZnClient new - systemPolicy; - accept: ZnMimeType imagePng; - get: 'http://www.moosetechnology.org/pictures/moose-icon-small.png'. - morph := ImageMorph fromStream: file readStream binary. - - PolymorphSystemSettings setDesktopLogoWith: morph. - morph top: 10; left: 10 -] diff --git a/src-archive/Moose-Development-Tools/MooseReleaser.class.st b/src-archive/Moose-Development-Tools/MooseReleaser.class.st deleted file mode 100644 index ebdef1944..000000000 --- a/src-archive/Moose-Development-Tools/MooseReleaser.class.st +++ /dev/null @@ -1,36 +0,0 @@ -Class { - #name : #MooseReleaser, - #superclass : #Object, - #category : #'Moose-Development-Tools' -} - -{ #category : #release } -MooseReleaser class >> createStableVersioFor: aConfigurationClass withDescription: aString [ -| developmentVersion project newVersionName devVersionString | -developmentVersion := aConfigurationClass project version: #development. -project := MTProject - newFromVersion: developmentVersion - inConfiguration: aConfigurationClass. - -newVersionName := VSCommitVersion major nextVersionOf: project. -devVersionString := developmentVersion versionString. - -MetacelloToolBox - mooseCreateFixedVersion: newVersionName - for: project name - from: devVersionString - description: (aString ifNil: [ 'version ' , newVersionName]). - -project devWorkflow setStableBlessingFor: newVersionName. - -MetacelloToolBox - stableVersion: newVersionName - for: project name - platformAttribute: #'pharo5.x'. "versioner uses $common" - -"needed because the versioner script modified #development" -"project devWorkflow developmentVersion: devVersionString platformAttribute: #common." - -project devWorkflow developmentVersion: #stable platformAttribute: #'pharo5.x'. - -] diff --git a/src-archive/Moose-Development-Tools/MooseTestCommandLineHandler.class.st b/src-archive/Moose-Development-Tools/MooseTestCommandLineHandler.class.st deleted file mode 100644 index 21e3e9e18..000000000 --- a/src-archive/Moose-Development-Tools/MooseTestCommandLineHandler.class.st +++ /dev/null @@ -1,40 +0,0 @@ -" -MooseTestCommandLineHandler activateWith: (CommandLineArguments withArguments: {'--junit-xml-output'}) -" -Class { - #name : #MooseTestCommandLineHandler, - #superclass : #TestCommandLineHandler, - #category : #'Moose-Development-Tools' -} - -{ #category : #accessing } -MooseTestCommandLineHandler class >> commandName [ - ^ 'moosetest' -] - -{ #category : #accessing } -MooseTestCommandLineHandler class >> description [ - ^ 'A command line test runner specific for Moose' -] - -{ #category : #private } -MooseTestCommandLineHandler >> addTestPackagesFrom: configVersion to: packages [ - (configVersion packagesForSpecNamed: 'Tests') do: [ :spec | - self addPackagesMatching: (spec name, '.*') to: packages ] -] - -{ #category : #private } -MooseTestCommandLineHandler >> mooseDevelopmentVersion [ - ^ ConfigurationOfMoose new project version: #development -] - -{ #category : #private } -MooseTestCommandLineHandler >> packages [ - | packages | - packages := Set new. - self addTestPackagesFrom: self mooseDevelopmentVersion to: packages. - (self mooseDevelopmentVersion projects reject: [:each | each name = 'OSProcess']) - do: [ :each | - self addTestPackagesFrom: each version to: packages ]. - ^ packages -] diff --git a/src-archive/Moose-Development-Tools/MooseZeroCommandLineHandler.class.st b/src-archive/Moose-Development-Tools/MooseZeroCommandLineHandler.class.st deleted file mode 100644 index 01a8d5824..000000000 --- a/src-archive/Moose-Development-Tools/MooseZeroCommandLineHandler.class.st +++ /dev/null @@ -1,84 +0,0 @@ -" -I generate zeroconf commandline scripts for loading Moose next to the current image. -" -Class { - #name : #MooseZeroCommandLineHandler, - #superclass : #ZeroConfCommandLineHandler, - #instVars : [ - 'imageName', - 'projectId' - ], - #category : #'Moose-Development-Tools' -} - -{ #category : #accessing } -MooseZeroCommandLineHandler class >> commandName [ - ^ 'moosezeroconf' -] - -{ #category : #accessing } -MooseZeroCommandLineHandler class >> description [ - ^ 'Generate Moose zeroconf bash scripts' -] - -{ #category : #accessing } -MooseZeroCommandLineHandler >> defaultImage [ - ^ MooseZeroConfCurrentImageScript mooseLatestImage - -] - -{ #category : #accessing } -MooseZeroCommandLineHandler >> defaultScript [ - ^ self defaultImage, self defaultVM - - -] - -{ #category : #accessing } -MooseZeroCommandLineHandler >> defaultVM [ - ^ ZeroConfVMScript latestPharo combiningScript: MooseZeroConfCombinedScript - - -] - -{ #category : #accessing } -MooseZeroCommandLineHandler >> imageScripts [ - ^ { - MooseZeroConfCurrentImageScript mooseLatestImage. - MooseZeroConfCurrentImageScript moose50Image. - MooseZeroConfSuiteImageScript moose49Image - "MooseZeroConfImageScript glamour25Image. - MooseZeroConfImageScript petitparser16Image" - } -] - -{ #category : #accessing } -MooseZeroCommandLineHandler >> indexScriptExamplesHtml [ - ^ '' -] - -{ #category : #'as yet unclassified' } -MooseZeroCommandLineHandler >> releaseScripts [ - - ^ { - MooseZeroConfSuiteScript moose43Suite. - MooseZeroConfSuiteScript moose44Suite. - MooseZeroConfSuiteScript moose45Suite. - MooseZeroConfSuiteScript moose46Suite. - MooseZeroConfSuiteScript moose47Suite. - MooseZeroConfSuiteScript moose48Suite. - MooseZeroConfSuiteScript moose49Suite } -] - -{ #category : #'as yet unclassified' } -MooseZeroCommandLineHandler >> scripts [ - ^ super scripts, self releaseScripts -] - -{ #category : #accessing } -MooseZeroCommandLineHandler >> vmScripts [ - ^ { - ZeroConfVMScript latestPharo combiningScript: MooseZeroConfCombinedScript. - ZeroConfVMScript pharo combiningScript: MooseZeroConfCombinedScript - } -] diff --git a/src-archive/Moose-Development-Tools/MooseZeroConfCombinedScript.class.st b/src-archive/Moose-Development-Tools/MooseZeroConfCombinedScript.class.st deleted file mode 100644 index 9f608fbfb..000000000 --- a/src-archive/Moose-Development-Tools/MooseZeroConfCombinedScript.class.st +++ /dev/null @@ -1,26 +0,0 @@ -" -I combine several ZeroConf scripts for Moose. -" -Class { - #name : #MooseZeroConfCombinedScript, - #superclass : #ZeroConfCombinedScript, - #instVars : [ - 'title' - ], - #category : #'Moose-Development-Tools' -} - -{ #category : #accessing } -MooseZeroConfCombinedScript class >> baseUrl [ - ^ 'http://get.moosetechnology.org' asZnUrl -] - -{ #category : #accessing } -MooseZeroConfCombinedScript >> defaultCombiningScript [ - ^ self class -] - -{ #category : #accessing } -MooseZeroConfCombinedScript >> htmlTitle [ - ^ self scripts first htmlTitle -] diff --git a/src-archive/Moose-Development-Tools/MooseZeroConfCurrentImageScript.class.st b/src-archive/Moose-Development-Tools/MooseZeroConfCurrentImageScript.class.st deleted file mode 100644 index c73e85218..000000000 --- a/src-archive/Moose-Development-Tools/MooseZeroConfCurrentImageScript.class.st +++ /dev/null @@ -1,55 +0,0 @@ -Class { - #name : #MooseZeroConfCurrentImageScript, - #superclass : #MooseAbstractZeroConfImageScript, - #category : #'Moose-Development-Tools' -} - -{ #category : #accessing } -MooseZeroConfCurrentImageScript class >> fileBaseUrl [ - ^ 'https://ci.inria.fr/moose/job' asZnUrl -] - -{ #category : #'instance creation' } -MooseZeroConfCurrentImageScript class >> glamour25Image [ - ^ (self latestProject: 'glamour' release: '25') - imageName: 'Glamour'; - yourself -] - -{ #category : #'instance creation' } -MooseZeroConfCurrentImageScript class >> latestProject: aProjectId release: releaseString [ - "Create a new zeroconf script exporter for latest version of the given release and project" - ^ self new - projectId: aProjectId; - release: releaseString; - version: 'lastSuccessfulBuild'; - yourself -] - -{ #category : #'instance creation' } -MooseZeroConfCurrentImageScript class >> moose50Image [ - ^ self latestProject: 'moose-5.0' release: '50' -] - -{ #category : #'instance creation' } -MooseZeroConfCurrentImageScript class >> mooseLatestImage [ - ^ self moose50Image - basename: 'MooseLatestImage' -] - -{ #category : #'instance creation' } -MooseZeroConfCurrentImageScript class >> petitparser16Image [ - ^ (self latestProject: 'petitparser' release: '16') - imageName: 'PetitParser'; - yourself -] - -{ #category : #accessing } -MooseZeroConfCurrentImageScript >> imageUrl [ - ^ self fileBaseUrl / self projectId / self version asString / 'artifact' / self imageZip -] - -{ #category : #accessing } -MooseZeroConfCurrentImageScript >> imageZip [ - ^ self projectId, '.zip' -] diff --git a/src-archive/Moose-Development-Tools/MooseZeroConfSuiteImageScript.class.st b/src-archive/Moose-Development-Tools/MooseZeroConfSuiteImageScript.class.st deleted file mode 100644 index 809725956..000000000 --- a/src-archive/Moose-Development-Tools/MooseZeroConfSuiteImageScript.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #MooseZeroConfSuiteImageScript, - #superclass : #MooseAbstractZeroConfImageScript, - #category : #'Moose-Development-Tools' -} - -{ #category : #accessing } -MooseZeroConfSuiteImageScript class >> fileBaseUrl [ - ^ 'https://dl.dropboxusercontent.com/u/18323746' asZnUrl -] - -{ #category : #'instance creation' } -MooseZeroConfSuiteImageScript class >> moose49Image [ - ^ self new - projectId: 'moose_suite_4_9'; - release: '49'; - yourself -] - -{ #category : #accessing } -MooseZeroConfSuiteImageScript >> imageUrl [ - ^ self fileBaseUrl / self imageName / self imageZip -] - -{ #category : #accessing } -MooseZeroConfSuiteImageScript >> imageZip [ - ^ self projectId, '-image.zip' -] diff --git a/src-archive/Moose-Development-Tools/MooseZeroConfSuiteScript.class.st b/src-archive/Moose-Development-Tools/MooseZeroConfSuiteScript.class.st deleted file mode 100644 index e780c4ea4..000000000 --- a/src-archive/Moose-Development-Tools/MooseZeroConfSuiteScript.class.st +++ /dev/null @@ -1,234 +0,0 @@ -" -I generate a downloader script in bash for a an entire Moose Suite. The script will download and extract the the archive containing the suite. - -Instance Variables - distinctOperatingSystems: - isOneClick: - suiteDownloadArtifact: - suiteVersion: - -distinctOperatingSystems - - xxxxx - -isOneClick - - xxxxx - -suiteDownloadArtifact - - xxxxx - -suiteVersion - - xxxxx - -" -Class { - #name : #MooseZeroConfSuiteScript, - #superclass : #ZeroConfImageScript, - #instVars : [ - 'suiteVersion', - 'suiteDownloadArtifact', - 'distinctOperatingSystems', - 'isOneClick' - ], - #category : #'Moose-Development-Tools' -} - -{ #category : #accessing } -MooseZeroConfSuiteScript class >> baseUrl [ - ^ 'http://get.moosetechnology.org' asZnUrl -] - -{ #category : #accessing } -MooseZeroConfSuiteScript class >> fileBaseUrl [ - ^ 'https://dl.dropboxusercontent.com/u/18323746/' asZnUrl -] - -{ #category : #'instance creation' } -MooseZeroConfSuiteScript class >> moose43Suite [ - - ^ self new - suiteVersion: '43'; - suiteDownloadArtifact: 'moose_suite_4_3'; - makeOneClickDownload - -] - -{ #category : #'instance creation' } -MooseZeroConfSuiteScript class >> moose44Suite [ - - ^ self new - suiteVersion: '44'; - suiteDownloadArtifact: 'moose_suite_4_4'; - makeOneClickDownload - -] - -{ #category : #'instance creation' } -MooseZeroConfSuiteScript class >> moose45Suite [ - - ^ self new - suiteVersion: '45'; - suiteDownloadArtifact: 'moose_suite_4_5'; - makeOneClickDownload - -] - -{ #category : #'instance creation' } -MooseZeroConfSuiteScript class >> moose46Suite [ - - ^ self new - suiteVersion: '46'; - suiteDownloadArtifact: 'moose_suite_4_6'; - makeOneClickDownload - -] - -{ #category : #'instance creation' } -MooseZeroConfSuiteScript class >> moose47Suite [ - - ^ self new - suiteVersion: '47'; - suiteDownloadArtifact: 'moose_suite_4_7'; - makeOneClickDownload - -] - -{ #category : #'instance creation' } -MooseZeroConfSuiteScript class >> moose48Suite [ - - ^ self new - suiteVersion: '48'; - suiteDownloadArtifact: 'moose_suite_4_8' - -] - -{ #category : #'instance creation' } -MooseZeroConfSuiteScript class >> moose49Suite [ - - ^ self new - suiteVersion: '49'; - suiteDownloadArtifact: 'moose_suite_4_9' - -] - -{ #category : #accessing } -MooseZeroConfSuiteScript >> defaultBasename [ - ^ self suiteName copyReplaceAll: ' ' with: '' -] - -{ #category : #accessing } -MooseZeroConfSuiteScript >> description [ - ^ 'This script downloads the latest ', self suiteName, '.'. -] - -{ #category : #'script generation' } -MooseZeroConfSuiteScript >> generateBody [ - - self - generateDowloadSuiteProperties; - generateDetectSystemProperties; - generateDownloadSuite -] - -{ #category : #'script generation' } -MooseZeroConfSuiteScript >> generateDetectSystemProperties [ - self - <<== 'DETECT SYSTEM PROPERTIES'; - generatePlatformTest; cr -] - -{ #category : #'script generation' } -MooseZeroConfSuiteScript >> generateDowloadSuiteProperties [ - self - <<== (self suiteProjectName asUppercase , ' DOWNLOAD SUITE PROPERTIES'); - << 'SUITE_NAME="'; << self suiteProjectName; << '"'; cr; - << 'SUITE_FULL_NAME="'; << (self suiteName) ; << '"'; cr; - << 'SUITE_DOWNLOAD_ID="'; << self suiteDownloadArtifact; << '"'; cr; cr -] - -{ #category : #'script generation' } -MooseZeroConfSuiteScript >> generateDownloadSuite [ - self - <<== ('DOWNLOAD ', self suiteName asUppercase) - << 'SUITE_URL="' << self suiteUrl << '" -SUITE_ARCHIVE="' << 'suite.zip' <<'" - - -echoerr "Downloading ${SUITE_FULL_NAME}:" -echoerr " $SUITE_URL" - - -$DOWNLOAD_TO$SUITE_ARCHIVE $SUITE_URL - -unzip -q $SUITE_ARCHIVE -d . -rm -rf $SUITE_ARCHIVE -'; cr -] - -{ #category : #'script generation html' } -MooseZeroConfSuiteScript >> generateHtmlArtifactDescription [ - - self << ('The latest ', self suiteName, '.') -] - -{ #category : #accessing } -MooseZeroConfSuiteScript >> htmlTitle [ - ^ self suiteProjectName, ' Zeroconf Script' -] - -{ #category : #accessing } -MooseZeroConfSuiteScript >> isOneClick [ - - ^ isOneClick ifNil: [ false ] -] - -{ #category : #accessing } -MooseZeroConfSuiteScript >> makeOneClickDownload [ - "Mark this suite as being one click. A one click suite has only one main archive - containing the releases for all operating systems. A non one click suite has a - distinct archive for each operating system. " - - isOneClick := true -] - -{ #category : #accessing } -MooseZeroConfSuiteScript >> suiteDownloadArtifact [ - - ^ suiteDownloadArtifact -] - -{ #category : #accessing } -MooseZeroConfSuiteScript >> suiteDownloadArtifact: aString [ - - suiteDownloadArtifact := aString -] - -{ #category : #accessing } -MooseZeroConfSuiteScript >> suiteName [ - ^ self suiteProjectName, ' ', self suiteVersion , ' Suite' -] - -{ #category : #accessing } -MooseZeroConfSuiteScript >> suiteProjectName [ - ^ 'Moose' -] - -{ #category : #accessing } -MooseZeroConfSuiteScript >> suiteUrl [ - - ^ self isOneClick - ifFalse: [ self fileBaseUrl asString, '${SUITE_NAME}/' , self suiteDownloadArtifact , '-${OS}.zip' ] - ifTrue: [ self fileBaseUrl asString, '${SUITE_NAME}/' , self suiteDownloadArtifact , '.zip' ] - -] - -{ #category : #accessing } -MooseZeroConfSuiteScript >> suiteVersion [ - - ^ suiteVersion -] - -{ #category : #accessing } -MooseZeroConfSuiteScript >> suiteVersion: aString [ - - suiteVersion := aString -] diff --git a/src-archive/Moose-Development-Tools/package.st b/src-archive/Moose-Development-Tools/package.st deleted file mode 100644 index 9caaab2f6..000000000 --- a/src-archive/Moose-Development-Tools/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Moose-Development-Tools' } diff --git a/src-archive/Moose-DistributionMap/AbstractDistributionMap.class.st b/src-archive/Moose-DistributionMap/AbstractDistributionMap.class.st deleted file mode 100644 index f2c83ed7a..000000000 --- a/src-archive/Moose-DistributionMap/AbstractDistributionMap.class.st +++ /dev/null @@ -1,162 +0,0 @@ -Class { - #name : #AbstractDistributionMap, - #superclass : #Object, - #instVars : [ - 'partsAndElements', - 'elementsAndPropertyValue', - 'title', - 'elementTitleBlock' - ], - #category : #'Moose-DistributionMap' -} - -{ #category : #'instance creation' } -AbstractDistributionMap class >> onContainers: aGroup elements: aBlockOrSelector properties: blockOrSelector [ - - ^ self new onContainers: aGroup elements: aBlockOrSelector properties: blockOrSelector -] - -{ #category : #'instance creation' } -AbstractDistributionMap class >> onElements: aGroup containers: aBlockOrSelector properties: blockOrSelector [ - - ^ self new onElements: aGroup containers: aBlockOrSelector properties: blockOrSelector -] - -{ #category : #'element-titles' } -AbstractDistributionMap >> defaultElementTitleFormattingBlock [ - ^ #yourself -] - -{ #category : #rendering } -AbstractDistributionMap >> defaultTitle [ - ^ 'Distribution Map' -] - -{ #category : #'element-titles' } -AbstractDistributionMap >> elementTitleBlock [ - "by default the title is just the title" - ^ elementTitleBlock isNil - ifTrue: [self defaultElementTitleFormattingBlock] - ifFalse: [elementTitleBlock] -] - -{ #category : #'element-titles' } -AbstractDistributionMap >> elementTitleBlock: anUnaryBlock [ - "Specify the block that will be applied to the default title to generate a displayed title" - - elementTitleBlock := anUnaryBlock -] - -{ #category : #accessing } -AbstractDistributionMap >> elementsFor: aPart [ - - ^ partsAndElements at: aPart -] - -{ #category : #'initialize-release' } -AbstractDistributionMap >> initialize [ - - super initialize. - partsAndElements := Dictionary new. - elementsAndPropertyValue := Dictionary new. - -] - -{ #category : #'initialize-release' } -AbstractDistributionMap >> onContainers: aGroup elements: elementsBlockOrSelector properties: propertyBlockOrSelector [ - - aGroup do: [:part | |elementsCollection| - elementsCollection := partsAndElements at: part put: OrderedCollection new. - (elementsBlockOrSelector rtValue: part) do: [:element | - |propertyValue| - propertyValue := propertyBlockOrSelector rtValue: element. - elementsCollection add: element. - elementsAndPropertyValue at: element put: propertyValue . - ]. - ]. - -] - -{ #category : #'initialize-release' } -AbstractDistributionMap >> onElements: aGroup containers: containersBlockOrSelector properties: propertyBlockOrSelector [ - - aGroup do: [ :element | - | part propertyValue | - part := containersBlockOrSelector rtValue: element. - propertyValue := propertyBlockOrSelector rtValue: element. - (partsAndElements at: part ifAbsentPut: [OrderedCollection new]) - add: element. - elementsAndPropertyValue at: element put: propertyValue - ]. - -] - -{ #category : #rendering } -AbstractDistributionMap >> open [ - "Opening the distribution map, and returns the window" - - | view | - view := RTView new. - view @ RTDraggableView. - self renderOn: view. - self renderLegendOn: view. - ^ view openWithToolbarEntitled: self title -] - -{ #category : #accessing } -AbstractDistributionMap >> orderParts: aCollection [ - - self subclassResponsibility -] - -{ #category : #accessing } -AbstractDistributionMap >> parts [ - - ^ partsAndElements keys asArray. -] - -{ #category : #rendering } -AbstractDistributionMap >> renderElementsFrom: node on: view [ - - self subclassResponsibility -] - -{ #category : #rendering } -AbstractDistributionMap >> renderLegendOn: view [ - - self subclassResponsibility -] - -{ #category : #rendering } -AbstractDistributionMap >> renderOn: view [ - | parts partElements shape | - parts := self orderParts: self parts. - shape := RTCompositeShape new. - shape add: (RTLabel new text: #mooseName; height: 10). - shape add: (RTBox new color: Color transparent; borderColor: Color gray). - partElements := shape elementsOn: parts. - partElements do: [ :each | - | elements | - view add: each. - elements := self renderElementsFrom: each model on: view. - view addAll: elements. - RTGridLayout on: elements. - RTNest new - on: each - inShape: #second - nest: elements. ]. - RTGridLayout on: partElements. - partElements @ RTDraggable -] - -{ #category : #rendering } -AbstractDistributionMap >> title [ - - ^ title ifNil: [self defaultTitle] -] - -{ #category : #rendering } -AbstractDistributionMap >> title: aString [ - - title := aString -] diff --git a/src-archive/Moose-DistributionMap/DistributionMap.class.st b/src-archive/Moose-DistributionMap/DistributionMap.class.st deleted file mode 100644 index 912167092..000000000 --- a/src-archive/Moose-DistributionMap/DistributionMap.class.st +++ /dev/null @@ -1,260 +0,0 @@ -" -DistributionMap is a nice visualization to render container and their elements based on properties. - -See Stéphane Ducasse, Tudor Gîrba and Adrian Kuhn, Distribution Map, Proceedings of 22nd IEEE International Conference on Software Maintenance (ICSM '06), 203–212, IEEE Computer Society, 2006, 28%, PDF, DOI. - -The title of a distribution map can be changed as well as the colors used. -There are different ways to specific the parts and their containers. - -Here we define the containers and how the elements are omputed based on such containers. - - |dm | - dm := self - onContainers: Collection withAllSubclasses - elements: #allInstVarNames - properties: [:element | element size > 5]. - dm title: 'Collection subclasses and their instance variables'. - dm render. - dm open. - -The default colors can be changed to. However, the colors: message should be send before the element description. -Here is a non executable illustration. - | dm | - dm := DistributionMap new. - dm colors: {(Color r: 0.6 g: 0.0 b: 0.0). (Color r: 0.0 g: 0.0 b: 0.6). (Color r: 1.0 g: 0.6 b: 0.0). (Color r: 0.0 g: 1.0 b: 1.0). (Color r: 0.0 g: 1.0 b: 0.0). (Color r: 1.0 g: 0.753 b: 0.796). (Color r: 0.6 g: 0.2 b: 0.0). (Color r: 0.4 g: 0.0 b: 0.6). (Color r: 1.0 g: 1.0 b: 0.0). (Color r: 0.8 g: 0.8 b: 0.8)}. - dm onContainers: (model allModelPackages) - elements: #classes - properties: [ :cl | (cl authors sortedCounts) ifNotEmpty: [ (cl authors sortedCounts) first value name]]. - dm title: 'Authors Map of ', model name. - dm render. - dm open. -" -Class { - #name : #DistributionMap, - #superclass : #AbstractDistributionMap, - #instVars : [ - 'colorMap', - 'colors', - 'propertyValuesMap', - 'properties', - 'defaultColors' - ], - #category : #'Moose-DistributionMap' -} - -{ #category : #examples } -DistributionMap class >> example2 [ - - "self example2" - ^ (self - onElements: (Collection withAllSubclasses flatCollect: [:class | class methods]) - containers: #methodClass - properties: [:element | element isAbstract]) - open. - - -] - -{ #category : #examples } -DistributionMap class >> example3 [ - - "self example3" - ^ (self - onContainers: DistributionMap withAllSubclasses - elements: #methods - properties: #isAbstract ) - open. - - -] - -{ #category : #examples } -DistributionMap class >> exampleShowingAContainerBasedDefinition [ - "self exampleShowingAContainerBasedDefinition" - - "Here we define the containers and how the elements are computed based on such containers" - |dm | - dm := self - onContainers: Collection withAllSubclasses - elements: #allInstVarNames - properties: [:element | element size > 5]. - dm title: 'Collection subclasses and their instance variables'. - dm open. - - -] - -{ #category : #accessing } -DistributionMap >> colors [ - ^ colors ifNil: [colors := defaultColors] -] - -{ #category : #accessing } -DistributionMap >> colors: aCollection [ - "To specify the color scheme that we want to use in a Distribution map." - colors := aCollection -] - -{ #category : #'initialize-release' } -DistributionMap >> defaultColors [ - "The colors that are used when nobody ever mentioned any color scheme." - ^ defaultColors -] - -{ #category : #private } -DistributionMap >> elementsWithProperty: aPropertySelector inPart: aPart [ - - ^ (partsAndElements at: aPart) select: [: element | - (elementsAndPropertyValue at: element) = aPropertySelector - ]. -] - -{ #category : #'initialize-release' } -DistributionMap >> initialize [ - - super initialize. - colorMap := Dictionary new. - defaultColors := Color distinctTenStrongColors. - properties := #() -] - -{ #category : #private } -DistributionMap >> numberOfElementsWithProperty: aPropertySelector inPart: aPart [ - - ^ (self elementsWithProperty: aPropertySelector inPart: aPart) size. -] - -{ #category : #'initialize-release' } -DistributionMap >> onContainers: aGroup elements: elementsBlockOrSelector properties: propertyBlockOrSelector [ - - super onContainers: aGroup elements: elementsBlockOrSelector properties: propertyBlockOrSelector. - self orderColorMap. -] - -{ #category : #'initialize-release' } -DistributionMap >> onElements: aGroup containers: containersBlockOrSelector properties: propertyBlockOrSelector [ - - super onElements: aGroup containers: containersBlockOrSelector properties: propertyBlockOrSelector. - self orderColorMap -] - -{ #category : #'initialize-release' } -DistributionMap >> orderColorMap [ - - | propertiesAndNumberOfOccurrences result | - propertiesAndNumberOfOccurrences := OrderedCollection new. - result := Dictionary new. - "We first compute the number of occurrences for each property value" - elementsAndPropertyValue values do: [ :aPropertyValue | - |propAndNbOfOcc| - propAndNbOfOcc := propertiesAndNumberOfOccurrences detect: [:assoc | assoc key = aPropertyValue] ifNone: [propertiesAndNumberOfOccurrences add: (aPropertyValue -> 0)]. - propAndNbOfOcc value: (propAndNbOfOcc value + 1). - ]. - "Once the number of occurences computed for each property value, we sort them in a decroissant order, and we keep as many property values as their is available colors" - propertiesAndNumberOfOccurrences := (propertiesAndNumberOfOccurrences asArray sort: [:a :b | a value > b value]). - propertiesAndNumberOfOccurrences size > self colors size ifTrue: [propertiesAndNumberOfOccurrences := propertiesAndNumberOfOccurrences copyFrom: 1 to:self colors size]. - properties := propertiesAndNumberOfOccurrences collect: [:anAssoc | anAssoc key]. - - "Then we follow the colors order, and set a color to each property value" - (1 to: propertiesAndNumberOfOccurrences size) do: [:index | - result at: (propertiesAndNumberOfOccurrences at: index) key put: (self colors at: index). - ]. - - ^ colorMap := result. - - -] - -{ #category : #'dendrogram clustering' } -DistributionMap >> orderParts: aCollectionOfParts [ - - | vectors engine clusters partVectors | - aCollectionOfParts ifEmpty: [^aCollectionOfParts]. - partVectors := aCollectionOfParts collect: [:eachPart | - MalSimilarityItem with: eachPart - andAll: (self properties collect: [:eachProp | self numberOfElementsWithProperty: eachProp inPart: eachPart]) ]. - engine := MalClusterEngine with: partVectors. - engine hierarchicalClusteringUsing: #averageLinkage. - partVectors := engine dendrogram orderLeafs collect: [:each | each item]. - ^ partVectors - -] - -{ #category : #accessing } -DistributionMap >> properties [ - - ^ properties - -] - -{ #category : #accessing } -DistributionMap >> properties: aCollection [ - - properties := aCollection - -] - -{ #category : #accessing } -DistributionMap >> propertyColorMap [ - - ^ colorMap -] - -{ #category : #accessing } -DistributionMap >> propertyColorMap: aDictionary [ - - colorMap := aDictionary at: #notBetweenBounds put: Color black ; yourself -] - -{ #category : #accessing } -DistributionMap >> propertyValuesMap [ - - "return a Dictionary, mapping each different property value to a block that compute if an element 'belongs to' this property. For example, if the property you are using is based on distinct values (authors of a file for example), you could have: {#propertyValue1 -> [:val | val = 'cyrille delaunay'] . {#propertyValue2 -> [:val | val = 'stephane ducasse'] } " - ^ propertyValuesMap ifNil: [ propertyValuesMap := Dictionary new] -] - -{ #category : #accessing } -DistributionMap >> propertyValuesMap: aDictionary [ - - |result| - result := Dictionary new. - elementsAndPropertyValue keysAndValuesDo: [:element :propertyValue | - aDictionary keysAndValuesDo: [:key :value | - (value rtValue: propertyValue) ifTrue: [result at: element put: key]. - ]. - "a property value may not be between the bounds defined by the user. In this case, we set a default value" - (result keys includes: element) ifFalse: [result at: element put: #notBetweenBounds]. - ]. - self properties: aDictionary keys asArray. - elementsAndPropertyValue := result. - - - -] - -{ #category : #rendering } -DistributionMap >> renderElementsFrom: node on: view [ - | elements | - elements := RTGroup new. - self properties - do: [ :property | - | color borderColor propertyElements | - color := self propertyColorMap at: property. - borderColor := color blacker. - "view interaction menu: [ :element | element mooseMenuMorph ]." - propertyElements := RTBox new - borderColor: borderColor; - color: color; - elementsOn: (self elementsWithProperty: property inPart: node). - elements addAll: propertyElements ]. - ^ elements -] - -{ #category : #rendering } -DistributionMap >> renderLegendOn: view [ - | lb | - lb := RTLegendBuilder new. - lb view: view. - self properties do: [ :each | lb addColor: (self propertyColorMap at: each) text: each mooseName ]. - lb build -] diff --git a/src-archive/Moose-DistributionMap/DistributionMapBooleanPropertyInfo.class.st b/src-archive/Moose-DistributionMap/DistributionMapBooleanPropertyInfo.class.st deleted file mode 100644 index 6d1cc31b0..000000000 --- a/src-archive/Moose-DistributionMap/DistributionMapBooleanPropertyInfo.class.st +++ /dev/null @@ -1,23 +0,0 @@ -Class { - #name : #DistributionMapBooleanPropertyInfo, - #superclass : #DistributionMapPropertyInfo, - #category : #'Moose-DistributionMap' -} - -{ #category : #accessing } -DistributionMapBooleanPropertyInfo >> firstDefaultText [ - - ^ 'propVal = true' -] - -{ #category : #accessing } -DistributionMapBooleanPropertyInfo >> secondDefaultText [ - - ^ 'propVal = false' -] - -{ #category : #accessing } -DistributionMapBooleanPropertyInfo >> type [ - - ^ #boolean -] diff --git a/src-archive/Moose-DistributionMap/DistributionMapCollectionPropertyInfo.class.st b/src-archive/Moose-DistributionMap/DistributionMapCollectionPropertyInfo.class.st deleted file mode 100644 index 64b8af4ac..000000000 --- a/src-archive/Moose-DistributionMap/DistributionMapCollectionPropertyInfo.class.st +++ /dev/null @@ -1,23 +0,0 @@ -Class { - #name : #DistributionMapCollectionPropertyInfo, - #superclass : #DistributionMapPropertyInfo, - #category : #'Moose-DistributionMap' -} - -{ #category : #accessing } -DistributionMapCollectionPropertyInfo >> firstDefaultText [ - - ^ 'propVal size <= 5' -] - -{ #category : #accessing } -DistributionMapCollectionPropertyInfo >> secondDefaultText [ - - ^ 'propVal size > 5' -] - -{ #category : #accessing } -DistributionMapCollectionPropertyInfo >> type [ - - ^ #collection -] diff --git a/src-archive/Moose-DistributionMap/DistributionMapExample.class.st b/src-archive/Moose-DistributionMap/DistributionMapExample.class.st deleted file mode 100644 index ef3f6ecc9..000000000 --- a/src-archive/Moose-DistributionMap/DistributionMapExample.class.st +++ /dev/null @@ -1,162 +0,0 @@ -Class { - #name : #DistributionMapExample, - #superclass : #Object, - #instVars : [ - 'propertiesMap', - 'propertyBlock', - 'elements' - ], - #category : #'Moose-DistributionMap' -} - -{ #category : #public } -DistributionMapExample class >> openOn: classes [ - - ^ (self new render: classes) open -] - -{ #category : #example } -DistributionMapExample class >> sample [ - - (self new properties: self sampleProperties; - propertiesMap: self sampleMap; - propertyBlock: self sampleBlock; - elements: self sampleOrderedElements; - render: Collection withAllSubclasses - ) - open -] - -{ #category : #example } -DistributionMapExample class >> sampleBlock [ - "should extend Dictionary to make a switch control structure" - - ^ [ :method ||numArgs| - numArgs := method numArgs. - (numArgs = 0) ifTrue: [ #unary ] - ifFalse: [ - (numArgs = 1) ifTrue: [ #binary ] - ifFalse: [ #keywords ] - ]] -] - -{ #category : #example } -DistributionMapExample class >> sampleElements [ - - ^ #methods -] - -{ #category : #example } -DistributionMapExample class >> sampleMap [ - - ^ Dictionary with: (#unary -> Color white) with: (#binary -> Color gray) with: (#keywords -> Color black) -] - -{ #category : #example } -DistributionMapExample class >> sampleOrderedElements [ - - ^ [:class ||dic orderedMethods| - orderedMethods := OrderedCollection new. - dic := Dictionary new. - self sampleProperties do: [:prop | dic at: prop put: OrderedCollection new]. - class methods do: [ :mth| - (dic at: (self sampleBlock value: mth)) add: mth - ]. - self sampleProperties do: [:prop | - orderedMethods addAll: (dic at: prop) - ]. - orderedMethods - ] -] - -{ #category : #example } -DistributionMapExample class >> sampleProperties [ - - ^ #(#unary #binary #keywords) -] - -{ #category : #accessing } -DistributionMapExample >> colorAtIndex: anInteger [ - - ^ (anInteger <= Color distinctTenStrongColors size) - ifTrue: [ Color distinctTenStrongColors at: anInteger ] - ifFalse: [ Color gray ] - -] - -{ #category : #accessing } -DistributionMapExample >> colorForElement: element [ - - ^ self propertiesMap at: (self propertyBlock value: element) -] - -{ #category : #accessing } -DistributionMapExample >> elements: aSymbolOrBlock [ - - elements := aSymbolOrBlock -] - -{ #category : #accessing } -DistributionMapExample >> elementsFor: aContainer [ - - ^ elements rtValue: aContainer -] - -{ #category : #accessing } -DistributionMapExample >> properties: aCollectionOfProperties [ - - | map | - map := self propertiesMap. - 1 to:aCollectionOfProperties size do: [ :i | - map add: ((aCollectionOfProperties at: i) -> (self colorAtIndex: i + 1)) - ]. - ^ map -] - -{ #category : #accessing } -DistributionMapExample >> propertiesMap [ - - ^ propertiesMap ifNil: [ propertiesMap := Dictionary new] -] - -{ #category : #accessing } -DistributionMapExample >> propertiesMap: aDictionary [ - - propertiesMap := aDictionary -] - -{ #category : #accessing } -DistributionMapExample >> propertyBlock [ - - ^ propertyBlock -] - -{ #category : #accessing } -DistributionMapExample >> propertyBlock: oneParameterBlock [ - - propertyBlock := oneParameterBlock -] - -{ #category : #'public-view rendering' } -DistributionMapExample >> render: classes [ - "(DistributionMapExample new render: Collection withAllSubclasses) open" - "broken: should call #elements: before calling #render:. See test DistributionMapExampleTest>>testSample." - | nodes view | - nodes := classes. - - view := RTMondrian new. - "view interaction nodraggable." - view interaction popupText. - view nodes: nodes forEach: [ :node | - "view interaction nodraggable." - view interaction popupText: [:el| el selector]. - view shape rectangle - size: 10 ; - fillColor: [:el | self colorForElement: el]. - view nodes: (self elementsFor: node). - view layout grid gapSize: 1. - ]. - view layout flow. - - ^ view -] diff --git a/src-archive/Moose-DistributionMap/DistributionMapNumberPropertyInfo.class.st b/src-archive/Moose-DistributionMap/DistributionMapNumberPropertyInfo.class.st deleted file mode 100644 index 9545a7c52..000000000 --- a/src-archive/Moose-DistributionMap/DistributionMapNumberPropertyInfo.class.st +++ /dev/null @@ -1,23 +0,0 @@ -Class { - #name : #DistributionMapNumberPropertyInfo, - #superclass : #DistributionMapPropertyInfo, - #category : #'Moose-DistributionMap' -} - -{ #category : #accessing } -DistributionMapNumberPropertyInfo >> firstDefaultText [ - - ^ 'propVal <= 5' -] - -{ #category : #accessing } -DistributionMapNumberPropertyInfo >> secondDefaultText [ - - ^ 'propVal > 5' -] - -{ #category : #accessing } -DistributionMapNumberPropertyInfo >> type [ - - ^ #number -] diff --git a/src-archive/Moose-DistributionMap/DistributionMapPropertyInfo.class.st b/src-archive/Moose-DistributionMap/DistributionMapPropertyInfo.class.st deleted file mode 100644 index d395d0967..000000000 --- a/src-archive/Moose-DistributionMap/DistributionMapPropertyInfo.class.st +++ /dev/null @@ -1,35 +0,0 @@ -Class { - #name : #DistributionMapPropertyInfo, - #superclass : #Object, - #category : #'Moose-DistributionMap' -} - -{ #category : #'instance creation' } -DistributionMapPropertyInfo class >> fromComputationBlock: aOneArgumentBlock andElements: aCollectionOfElements [ - - |tmpPropertyResult| - tmpPropertyResult := (aOneArgumentBlock rtValue: aCollectionOfElements anyOne). - tmpPropertyResult isString ifTrue: [^ DistributionMapStringPropertyInfo new]. - tmpPropertyResult isCollection ifTrue: [^ DistributionMapCollectionPropertyInfo new]. - tmpPropertyResult isNumber ifTrue: [^ DistributionMapNumberPropertyInfo new]. - (tmpPropertyResult isKindOf: Boolean) ifTrue: [^ DistributionMapBooleanPropertyInfo new]. - ^ DistributionMapUnknownPropertyInfo new -] - -{ #category : #accessing } -DistributionMapPropertyInfo >> firstDefaultText [ - - ^ self subclassResponsability -] - -{ #category : #accessing } -DistributionMapPropertyInfo >> secondDefaultText [ - - ^ self subclassResponsibility -] - -{ #category : #accessing } -DistributionMapPropertyInfo >> type [ - - ^ self subclassResponsability -] diff --git a/src-archive/Moose-DistributionMap/DistributionMapStringPropertyInfo.class.st b/src-archive/Moose-DistributionMap/DistributionMapStringPropertyInfo.class.st deleted file mode 100644 index 4efc0961b..000000000 --- a/src-archive/Moose-DistributionMap/DistributionMapStringPropertyInfo.class.st +++ /dev/null @@ -1,23 +0,0 @@ -Class { - #name : #DistributionMapStringPropertyInfo, - #superclass : #DistributionMapPropertyInfo, - #category : #'Moose-DistributionMap' -} - -{ #category : #accessing } -DistributionMapStringPropertyInfo >> firstDefaultText [ - - ^ 'propVal size <= 5' -] - -{ #category : #accessing } -DistributionMapStringPropertyInfo >> secondDefaultText [ - - ^ 'propVal size > 5' -] - -{ #category : #accessing } -DistributionMapStringPropertyInfo >> type [ - - ^ #string -] diff --git a/src-archive/Moose-DistributionMap/DistributionMapUnknownPropertyInfo.class.st b/src-archive/Moose-DistributionMap/DistributionMapUnknownPropertyInfo.class.st deleted file mode 100644 index 186891552..000000000 --- a/src-archive/Moose-DistributionMap/DistributionMapUnknownPropertyInfo.class.st +++ /dev/null @@ -1,23 +0,0 @@ -Class { - #name : #DistributionMapUnknownPropertyInfo, - #superclass : #DistributionMapPropertyInfo, - #category : #'Moose-DistributionMap' -} - -{ #category : #accessing } -DistributionMapUnknownPropertyInfo >> firstDefaultText [ - - ^ 'propVal isNil' -] - -{ #category : #accessing } -DistributionMapUnknownPropertyInfo >> secondDefaultText [ - - ^ 'propVal isNil not' -] - -{ #category : #accessing } -DistributionMapUnknownPropertyInfo >> type [ - - ^ #unknown -] diff --git a/src-archive/Moose-DistributionMap/LinearDistributionMap.class.st b/src-archive/Moose-DistributionMap/LinearDistributionMap.class.st deleted file mode 100644 index 01041e564..000000000 --- a/src-archive/Moose-DistributionMap/LinearDistributionMap.class.st +++ /dev/null @@ -1,65 +0,0 @@ -" -LinearDistributionMap displays the elements based on linear shades of color. -" -Class { - #name : #LinearDistributionMap, - #superclass : #AbstractDistributionMap, - #instVars : [ - 'baseColor' - ], - #category : #'Moose-DistributionMap' -} - -{ #category : #rendering } -LinearDistributionMap >> baseColor [ - - ^ baseColor ifNil: [ self defaultBaseColor] - -] - -{ #category : #rendering } -LinearDistributionMap >> baseColor: aColor [ - "To set the color to be used for the linear color computation. When we specify Color red, we will have shade of red" - - baseColor := aColor - -] - -{ #category : #rendering } -LinearDistributionMap >> defaultBaseColor [ - - ^ Color gray -] - -{ #category : #rendering } -LinearDistributionMap >> orderElementsFor: aContainer [ - - ^ (self elementsFor: aContainer) sorted: [ :a :b | - (elementsAndPropertyValue at: a) >= (elementsAndPropertyValue at: b) ] -] - -{ #category : #'as yet unclassified' } -LinearDistributionMap >> orderParts: aCollection [ - - ^ aCollection sorted: [ :a :b | | sizea sizeb| - sizea := (self elementsFor: a) sum: [ :e | elementsAndPropertyValue at: e ]. - sizeb := (self elementsFor: b) sum: [ :e | elementsAndPropertyValue at: e ]. - sizea >= sizeb ] -] - -{ #category : #rendering } -LinearDistributionMap >> renderElementsFrom: node on: view [ - - view interaction menuMorphBlock: [ :element | element mooseMenuMorph ]. - view interaction nodraggable. - view interaction forward: ROAbstractMouseDragging. - view shape rectangle - size: 10; - linearRedFillColor: [ :e | elementsAndPropertyValue at: e ] within: elementsAndPropertyValue keys; - borderColor: self baseColor. - view nodes: (self orderElementsFor: node) -] - -{ #category : #rendering } -LinearDistributionMap >> renderLegendOn: view [ -] diff --git a/src-archive/Moose-DistributionMap/LinkedTabGroupMorph.class.st b/src-archive/Moose-DistributionMap/LinkedTabGroupMorph.class.st deleted file mode 100644 index 78f5cc660..000000000 --- a/src-archive/Moose-DistributionMap/LinkedTabGroupMorph.class.st +++ /dev/null @@ -1,33 +0,0 @@ -" -This class represent a tabGroupMorph 'linked' to a ListOrTextFielfPart: when the selected page change, it also update the selected page of the listOrTextFieldPart - -" -Class { - #name : #LinkedTabGroupMorph, - #superclass : #TabGroupMorph, - #instVars : [ - 'listOrTextFieldPart' - ], - #category : #'Moose-DistributionMap' -} - -{ #category : #accessing } -LinkedTabGroupMorph >> basicSelectedPageIndex: index [ - - ^ tabSelectorMorph basicSelectedIndex: index. -] - -{ #category : #initialization } -LinkedTabGroupMorph >> newTabSelectorMorph [ - "Answer a new tab selector morph" - - ^ LinkedTabSelectorMorph new - vResizing: #shrinkWrap; - hResizing: #spaceFill -] - -{ #category : #accessing } -LinkedTabGroupMorph >> secondSideLink: aListOrTextFieldPart [ - - tabSelectorMorph secondSideLink: aListOrTextFieldPart . -] diff --git a/src-archive/Moose-DistributionMap/LinkedTabSelectorMorph.class.st b/src-archive/Moose-DistributionMap/LinkedTabSelectorMorph.class.st deleted file mode 100644 index ec0044e9e..000000000 --- a/src-archive/Moose-DistributionMap/LinkedTabSelectorMorph.class.st +++ /dev/null @@ -1,48 +0,0 @@ -" -This class represent a tabSelectorMorph 'linked' to a ListOrTextFielfPart: when the selected page change, it also update the selected page of the listOrTextFieldPart - -" -Class { - #name : #LinkedTabSelectorMorph, - #superclass : #TabSelectorMorph, - #instVars : [ - 'listOrTextFieldPart', - 'firstSideLink', - 'secondSideLink' - ], - #category : #'Moose-DistributionMap' -} - -{ #category : #accessing } -LinkedTabSelectorMorph >> basicSelectedIndex: index [ - - "Set the value of selectedIndex" - selectedIndex == index ifTrue: [^self]. - selectedIndex := index. - self adoptPaneColor: self paneColor. - self changed: #selectedIndex -] - -{ #category : #accessing } -LinkedTabSelectorMorph >> linkedTo: aListOrTextFieldPart [ - - firstSideLink := aListOrTextFieldPart. -] - -{ #category : #accessing } -LinkedTabSelectorMorph >> secondSideLink: aDropListOrTextfieldPart [ - - secondSideLink := aDropListOrTextfieldPart -] - -{ #category : #accessing } -LinkedTabSelectorMorph >> selectedIndex: index [ - - "Set the value of selectedIndex" - firstSideLink ifNotNil: [firstSideLink basicSelectedPageIndex: index]. - secondSideLink ifNotNil: [secondSideLink basicSelectedPageIndex: index] . - selectedIndex == index ifTrue: [^self]. - selectedIndex := index. - self adoptPaneColor: self paneColor. - self changed: #selectedIndex -] diff --git a/src-archive/Moose-DistributionMap/MooseGroup.extension.st b/src-archive/Moose-DistributionMap/MooseGroup.extension.st deleted file mode 100644 index 1eec32132..000000000 --- a/src-archive/Moose-DistributionMap/MooseGroup.extension.st +++ /dev/null @@ -1,17 +0,0 @@ -Extension { #name : #MooseGroup } - -{ #category : #'*Moose-DistributionMap' } -MooseGroup >> viewDistributionMapFromElements [ - - - (OpenDistributionMapBasedOnElementsWizard onGroup: self) open. - -] - -{ #category : #'*Moose-DistributionMap' } -MooseGroup >> viewDistributionMapFromParts [ - - - (OpenDistributionMapBasedOnPartsWizard onGroup: self) open. - -] diff --git a/src-archive/Moose-DistributionMap/MooseModel.extension.st b/src-archive/Moose-DistributionMap/MooseModel.extension.st deleted file mode 100644 index 0f7f65af3..000000000 --- a/src-archive/Moose-DistributionMap/MooseModel.extension.st +++ /dev/null @@ -1,68 +0,0 @@ -Extension { #name : #MooseModel } - -{ #category : #'*Moose-DistributionMap' } -MooseModel >> allWithSmalltalkType: aClass [ - - "return all entities of type aClass" - "^ self entities select: [:each | each class = aClass ]." - ^ self allWithType: aClass - -] - -{ #category : #'*Moose-DistributionMap' } -MooseModel >> classConcernedByProperty: aSelector appliedTo: aClass [ - - | concernedEntities type propertyResult | - concernedEntities := self allWithSmalltalkType: aClass. - concernedEntities do: [:each | - [propertyResult := (each perform: aSelector)] on: Error do: [:er | ^ nil]. - propertyResult isNil - ifTrue: [^ nil] - ifFalse: [ - propertyResult isCollection - ifFalse: [^ nil] - ifTrue: [ - propertyResult ifNotEmpty: [ - type ifNil: [type := propertyResult anyOne class]. - (propertyResult anyOne class = type) - ifFalse: [^ nil] - ] - ] - ] - ]. - ^ type. - - - -] - -{ #category : #'*Moose-DistributionMap' } -MooseModel >> includesElementsOfType: aClass [ - - "self entities detect: [:each | each class = aClass] ifNone: [^ false]. - ^true" - ^ (self allWithType: aClass) isEmpty not -] - -{ #category : #'*Moose-DistributionMap' } -MooseModel >> resultOfProperty: aSelectorOrAblock appliedTo: aClass [ - - | concernedEntities | - concernedEntities := self allWithSmalltalkType: aClass. - concernedEntities isEmpty ifFalse: [ - |result| - result := concernedEntities detect: [:each | - |propertyResult| - propertyResult := (aSelectorOrAblock rtValue: each). - propertyResult isNil not] ifNone: [nil]. - - result ifNotNil: [ - |propertyResult| - propertyResult := aSelectorOrAblock rtValue: result. - ^ propertyResult - ]. - ]. - - ^ nil - -] diff --git a/src-archive/Moose-DistributionMap/OpenDistributionMapBasedOnElementsWizard.class.st b/src-archive/Moose-DistributionMap/OpenDistributionMapBasedOnElementsWizard.class.st deleted file mode 100644 index b8bdccf76..000000000 --- a/src-archive/Moose-DistributionMap/OpenDistributionMapBasedOnElementsWizard.class.st +++ /dev/null @@ -1,217 +0,0 @@ -Class { - #name : #OpenDistributionMapBasedOnElementsWizard, - #superclass : #OpenDistributionMapWizard, - #instVars : [ - 'properties' - ], - #category : #'Moose-DistributionMap' -} - -{ #category : #'instance creation' } -OpenDistributionMapBasedOnElementsWizard class >> onGroup: aMooseGroup [ - - ^super new initializeWithElementGroup: aMooseGroup ; yourself. -] - -{ #category : #accessing } -OpenDistributionMapBasedOnElementsWizard >> computeAndReturnDistributionMapElements [ - - ^ self mooseGroup -] - -{ #category : #'accessing map parameters' } -OpenDistributionMapBasedOnElementsWizard >> containersBlock [ - - ^ Smalltalk evaluate: (self wizardInformations at: #entitiesToComputeSelector). - -] - -{ #category : #'initialize - containers parts' } -OpenDistributionMapBasedOnElementsWizard >> containersCompositePart [ - - ^ (CompositePart new) - inGroupboxNamed: 'Select type of parts'; - useLatePopulateContents: false; - withTitlesAndParts: - {('Using pre-initialized list' -> self containersListPart ). - ('Entering a block' -> self containersTextFieldPart )}; - yourself. -] - -{ #category : #'initialize - containers parts' } -OpenDistributionMapBasedOnElementsWizard >> containersListPart [ - ^ (DropListPart new) - list: self possibleContainerTypes; - defaultValue: 1; - useLatePopulateContents: false; - format: [:aFM3Property | aFM3Property type name, ' ( using ', aFM3Property name, ' )' ]; - transformed: [:aFM3Property | ('[:element | element ' , aFM3Property name , ']')] - yourself -] - -{ #category : #'initialize - containers parts' } -OpenDistributionMapBasedOnElementsWizard >> containersTextFieldPart [ - ^ (TextFieldPart new) - prefix: '[:element | '; - suffix: ']'; - useLatePopulateContents: false; - returnSuffixAndPrefix: true; - transformed: [:outPutValue | outPutValue]; - defaultValue: 'element belongsTo' -] - -{ #category : #'initialize - elements parts' } -OpenDistributionMapBasedOnElementsWizard >> elementsPart [ - ^ (TextPart new) - text: - self groupClass asString asText allBold , Character cr asString - , '=> launch distributionMap from corresponding groups to visualize from other type of elements'; - inGroupboxNamed: 'Type of elements'; - yourself -] - -{ #category : #'initialize-release' } -OpenDistributionMapBasedOnElementsWizard >> initializeFirstPane: aWizardPane [ - - "compositeParts - add: partTypesCompositePart; - add: propertyCompositePart." - aWizardPane addPart: self containersCompositePart associatedTo: #entitiesToComputeSelector. - aWizardPane addPart: self elementsPart associatedTo: #groupClass. - aWizardPane addPart: self propertyCompositePart associatedTo: #propertySelector. - self setConditionsTo: aWizardPane -] - -{ #category : #'initialize-release' } -OpenDistributionMapBasedOnElementsWizard >> initializeWithElementGroup: aMooseGroup [ - "DistributionMapWizard new open" - - | lastPane propertyTextFieldPart propertiyValuesPane textEditorPart partsAndElementsPane | - "When using a compositePart, we don't at the end which part has been selected, and therefore which kind of value will be returned. For that, I store each compositePart in a collection, to ask them at the end which part is selected" - compositeParts := OrderedCollection new. - self mooseGroup: aMooseGroup . - - partsAndElementsPane := WizardFirstPane named: 'Parts and elements'. - self initializeFirstPane: partsAndElementsPane. - propertiyValuesPane := WizardLastPane named: 'Property values'. - - - self addPane: partsAndElementsPane . - self addPane: propertiyValuesPane . - - - self initializePropertyValuesPane: propertiyValuesPane . - - - - - -] - -{ #category : #'wizard panes transition' } -OpenDistributionMapBasedOnElementsWizard >> performTerminateButtonAction [ - "by default, just close the last current pane. Override this method if you want to create a subclass of WizardControl making a specific action" - - |tmpDistributionMap| - super performTerminateButtonAction. - tmpDistributionMap := DistributionMap - onElements: self mooseGroup - containers: self containersBlock - properties: self propertyBlockOrSelector. - - (self wizardInformations at: #useDefaultColors) - ifFalse: [ - tmpDistributionMap - propertyColorMap: self propertyColorMap; - propertyValuesMap: self propertyValuesMap. - ]. - tmpDistributionMap open -] - -{ #category : #'computing possible parts' } -OpenDistributionMapBasedOnElementsWizard >> possibleContainerTypes [ - - "return the list of string to be displayed as possible part types, (when basing the wizard on elements)" - "| allMetaClasses result | - result := OrderedCollection new. - allMetaClasses := MooseModel meta elements select: [:each | each isFM3Class]. - allMetaClasses do: [:aFM3Class | - |possibleAttributes| - (self mooseModel includesElementsOfType: aFM3Class implementingClass) ifTrue: [ - possibleAttributes := aFM3Class allAttributesReturningType: self groupMetaClass inModel: self mooseModel. - possibleAttributes do: [:each | - (self mooseModel includesElementsOfType: aFM3Class implementingClass) - ifTrue: [ - each opposite ifNotNil: [ - result add: each opposite - ]. - ]. - ]. - ]. - ]. - ^ result asSet asOrderedCollection." - - ^ self groupMetaClass allComplexAttributes select: [:aFM3Property | - aFM3Property isMultivalued not - "aFM3Property hasOpposite and: [aFM3Property opposite isMultivalued]" - ]. -] - -{ #category : #'initialize - property parts' } -OpenDistributionMapBasedOnElementsWizard >> propertyCompositePart [ - . - ^ (CompositePart new) - inGroupboxNamed: 'Select propertySelector to use'; - useLatePopulateContents: false; - withTitlesAndParts: - {('Using pre-initialized list' -> ( self propertyListPart)). - ('Entering a block' -> self propertyTextFieldPart)} -] - -{ #category : #'initialize - property parts' } -OpenDistributionMapBasedOnElementsWizard >> propertyListPart [ - - ^ (DropListPart new) - list: (self allPropertySelectorsForElementOfType: self groupClass); - useLatePopulateContents: false; - defaultValue: 1; - "callback: [ :outputValue | propertyTextFieldPart textEntryContents: 'element ' , outputValue ];" - transformed: [ :outputValue | '[:element | element ' , outputValue , ']' ]; - yourself -] - -{ #category : #'initialize - property parts' } -OpenDistributionMapBasedOnElementsWizard >> propertyTextFieldPart [ - - ^TextFieldPart new - prefix: '[:element | '; - suffix: ']' ; - useLatePopulateContents: false; - returnSuffixAndPrefix: true; - defaultValue: ('element ' , (self allPropertySelectorsForElementOfType: self groupClass) first); - transformed: [:outputValue | outputValue]; - yourself. -] - -{ #category : #'initialize-release' } -OpenDistributionMapBasedOnElementsWizard >> setConditionsTo: aWizardPane [ - - aWizardPane - condition: [ :wizardInfos | - | isOk | - isOk := true. - [ - (self containersBlock rtValue: self mooseGroup anyOne) ifNil: [ isOk := false ] . - ] on: Exception do: [ isOk := false ]. - isOk ] - named: 'Invalid containers selector (the choosen selector might return nil for some elements)'. - aWizardPane - condition: [ :wizardInfos | - | isOk | - isOk := true. - [ - (self propertyBlockOrSelector rtValue: self distributionMapElements anyOne) ifNil: [ isOk := false ] - ] on: Exception do: [ isOk := false ]. - isOk ] - named: 'Not able to compute properties. (the choosen selector might return nil for some elements)' -] diff --git a/src-archive/Moose-DistributionMap/OpenDistributionMapBasedOnPartsWizard.class.st b/src-archive/Moose-DistributionMap/OpenDistributionMapBasedOnPartsWizard.class.st deleted file mode 100644 index 861322824..000000000 --- a/src-archive/Moose-DistributionMap/OpenDistributionMapBasedOnPartsWizard.class.st +++ /dev/null @@ -1,267 +0,0 @@ -Class { - #name : #OpenDistributionMapBasedOnPartsWizard, - #superclass : #OpenDistributionMapWizard, - #instVars : [ - 'properties', - 'propertyListPart', - 'propertyTextFieldPart' - ], - #category : #'Moose-DistributionMap' -} - -{ #category : #'instance creation' } -OpenDistributionMapBasedOnPartsWizard class >> onGroup: aMooseGroup [ - - ^super new initializeWithPartGroup: aMooseGroup ; yourself. -] - -{ #category : #accessing } -OpenDistributionMapBasedOnPartsWizard >> computeAndReturnDistributionMapElements [ - - ^ self mooseGroup flatCollect: [:anEntity | self elementsBlockOrSelector rtValue: anEntity] -] - -{ #category : #'initialize - containers parts' } -OpenDistributionMapBasedOnPartsWizard >> containersPart [ - ^ (TextPart new) - text: - self groupClass asString asText allBold , Character cr asString - , '=> launch distributionMap from corresponding groups to visualize on other types'; - inGroupboxNamed: 'Type of parts'; - yourself -] - -{ #category : #'accessing - map parameters' } -OpenDistributionMapBasedOnPartsWizard >> elementsBlockOrSelector [ - - ^ Smalltalk evaluate: (self wizardInformations at: #entitiesToComputeSelector). -] - -{ #category : #'initialize - elements parts' } -OpenDistributionMapBasedOnPartsWizard >> elementsCompositePart [ - - ^ (CompositePart new) - inGroupboxNamed: 'Select type of elements'; - useLatePopulateContents: false; - withTitlesAndParts: - {('Using a pre-initialized list' -> (self elementsListPart)). - ('Entering a block' -> self elementsTextFieldPart)}; - yourself. - - -] - -{ #category : #'initialize - elements parts' } -OpenDistributionMapBasedOnPartsWizard >> elementsListPart [ - ^ (DropListPart new) - list: self possibleElementSelectors; - defaultValue: 1; - useLatePopulateContents: false; - callback: [ :aFM3Property :thisPart| - self updatePopertySelectorPart: self propertyListPart withType: aFM3Property. - thisPart wizardPane refresh - ]; - transformed: [:aFM3Property | - ('[:container | container ', aFM3Property name , ']')]; - format: [:aFM3Property | aFM3Property name asString ,' ( ', aFM3Property type fullName asString,' )']; - yourself -] - -{ #category : #'initialize - elements parts' } -OpenDistributionMapBasedOnPartsWizard >> elementsTextFieldPart [ - ^ (TextFieldPart new) - prefix: '[:container | '; - suffix: ' ]'; - useLatePopulateContents: false; - returnSuffixAndPrefix: true; - defaultValue: - (self possibleElementSelectors isEmpty - ifTrue: [''] - ifFalse: ['container ' , (self possibleElementSelectors anyOne name)]); - - transformed: [:aString | aString]; - yourself -] - -{ #category : #'initialize-release' } -OpenDistributionMapBasedOnPartsWizard >> initializeFirstPane: aWizardPane [ - aWizardPane addPart: self containersPart associatedTo: #groupClass. - aWizardPane addPart: self elementsCompositePart associatedTo: #entitiesToComputeSelector. - aWizardPane addPart: self propertyCompositePart associatedTo: #propertySelector. - self setConditionsTo: aWizardPane -] - -{ #category : #'initialize-release' } -OpenDistributionMapBasedOnPartsWizard >> initializeWithPartGroup: aMooseGroup [ - "DistributionMapWizard new open" - - | lastPane propertyTextFieldPart propertiyValuesPane textEditorPart partsAndElementsPane | - "When using a compositePart, we don't at the end which part has been selected, and therefore which kind of value will be returned. For that, I store each compositePart in a collection, to ask them at the end which part is selected" - compositeParts := OrderedCollection new. - self mooseGroup: aMooseGroup . - partsAndElementsPane := WizardFirstPane named: 'Parts and elements'. - self initializeFirstPane: partsAndElementsPane. - propertiyValuesPane := WizardLastPane named: 'Property values'. - self addPane: partsAndElementsPane . - self addPane: propertiyValuesPane . - - self initializePropertyValuesPane: propertiyValuesPane . - - - - -] - -{ #category : #'wizard panes transition' } -OpenDistributionMapBasedOnPartsWizard >> openDefaultColorsDistributionMapUsingGroupAsParts [ - (DistributionMap - onContainers: self mooseGroup - elements: self elementsBlockOrSelector - properties: self propertyBlockOrSelector) - open -] - -{ #category : #'wizard panes transition' } -OpenDistributionMapBasedOnPartsWizard >> openDistributionMapUsingGroupAsParts [ - (DistributionMap - onContainers: self mooseGroup - elements: self elementsBlockOrSelector - properties: self propertyBlockOrSelector) - propertyColorMap: self propertyColorMap; - propertyValuesMap: self propertyValuesMap; - open -] - -{ #category : #'wizard panes transition' } -OpenDistributionMapBasedOnPartsWizard >> performTerminateButtonAction [ - "by default, just close the last current pane. Override this method if you want to create a subclass of WizardControl making a specific action" - - super performTerminateButtonAction. - - (self wizardInformations at: #useDefaultColors) - ifTrue: [ - self openDefaultColorsDistributionMapUsingGroupAsParts . - ] - ifFalse: [ - self openDistributionMapUsingGroupAsParts. - ]. - -] - -{ #category : #'computing possible elements' } -OpenDistributionMapBasedOnPartsWizard >> possibleElementSelectors [ - - "here we compute types of elements that can be displayed. Given the type of the parts, all type 'contained' in this one can be used as elements. Return a string list of selectors that can be applied to parts to compute elements. This list is ready to be set to the elements-dropListWizardPart " - | partsMetaClass result | - partsMetaClass := self groupMetaClass . - result := OrderedCollection new. - result addAll: partsMetaClass allComplexAttributes. - result := result select: [:each | each isMultivalued]. - result := self removeAllNonComputableAttributesFrom: result. - ^ result. - -] - -{ #category : #'initialize - property parts' } -OpenDistributionMapBasedOnPartsWizard >> propertyCompositePart [ - - ^(CompositePart new) - inGroupboxNamed: 'Select propertySelector to use'; - useLatePopulateContents: false; - withTitlesAndParts: - {('Using a pre-initialized list' -> self propertyListPart). - ('Entering a block' -> self propertyTextFieldPart)}; - yourself. - -] - -{ #category : #'initialize - property parts' } -OpenDistributionMapBasedOnPartsWizard >> propertyListPart [ - ^ propertyListPart - ifNil: [ - propertyListPart := DropListPart new - callback: [ :outputValue | outputValue ifNotNil: [ self propertyTextFieldPart textEntryContents: 'element ' , outputValue ] ]; - useLatePopulateContents: false; - transformed: [ :aSelector | '[:element | element ' , aSelector asString , ' ]' ] yourself ] -] - -{ #category : #'initialize - property parts' } -OpenDistributionMapBasedOnPartsWizard >> propertyTextFieldPart [ - ^ propertyTextFieldPart ifNil: - [propertyTextFieldPart := (TextFieldPart new) - prefix: '[:element | '; - suffix: ' ]'; - returnSuffixAndPrefix: true; - useLatePopulateContents: false; - yourself] -] - -{ #category : #'computing possible elements' } -OpenDistributionMapBasedOnPartsWizard >> removeAllNonComputableAttributesFrom: aCollectionOfFM3Attributes [ - - - | result | - result := OrderedCollection new. - "aCollectionOfFM3Attributes do: [:aFM3Attribute | - |concernedClass| - concernedClass := self mooseModel classConcernedByProperty: aFM3Attribute name asSymbol appliedTo: self groupClass. - concernedClass ifNotNil: [" - "if no elements of this type is present in the mooseModel, we will not be able to compute possible properties" - " (self mooseModel includesElementsOfType: self groupClass) - ifTrue: [result add: aFM3Attribute] . - ] - ]." - aCollectionOfFM3Attributes do: [:aFM3Attribute | - [ - (self mooseGroup flatCollect: [:anEntity | anEntity perform: aFM3Attribute implementingSelector]) isEmpty - ifFalse: [ - "we make sure that the property does not return an empty collection for each element of the group" - result add: aFM3Attribute - ]. - ] on: Error do: [:error | - "if it raises un error, we don't add to the result" - ] - ]. - ^ result. - -] - -{ #category : #'initialize-release' } -OpenDistributionMapBasedOnPartsWizard >> setConditionsTo: aWizardPane [ - aWizardPane - condition: [ :wizardInfos | - | isOk | - isOk := true. - [ - (self elementsBlockOrSelector rtValue: self mooseGroup anyOne) ifNil: [ isOk := false ] . - ] on: Exception do: [ isOk := false ]. - isOk ] - named: 'Invalid elements selector (the choosen selector might return nil for some elements)'. - aWizardPane - condition: [ :wizardInfos | - | isOk | - isOk := true. - [ - (self propertyBlockOrSelector rtValue: self distributionMapElements anyOne) ifNil: [ isOk := false ]. - ] on: Exception do: [ :ex | - isOk := false ]. - isOk ] - named: 'Not able to compute properties (the choosen selector might return nil for some elements)' -] - -{ #category : #actions } -OpenDistributionMapBasedOnPartsWizard >> updatePopertySelectorPart: aWizardPart withType: aFM3Property [ - - | elementsClass | - aFM3Property isNil - ifTrue: [ - (aWizardPart) - list: {} - ] - ifFalse: [ - elementsClass := aFM3Property type implementingClass. - (aWizardPart) - list: (self allPropertySelectorsForElementOfType: elementsClass) - ] - -] diff --git a/src-archive/Moose-DistributionMap/OpenDistributionMapWizard.class.st b/src-archive/Moose-DistributionMap/OpenDistributionMapWizard.class.st deleted file mode 100644 index 4fdc3196b..000000000 --- a/src-archive/Moose-DistributionMap/OpenDistributionMapWizard.class.st +++ /dev/null @@ -1,221 +0,0 @@ -Class { - #name : #OpenDistributionMapWizard, - #superclass : #WizardControl, - #instVars : [ - 'colorCollection', - 'mooseGroup', - 'mooseModel', - 'compositeParts', - 'distributionMapElements' - ], - #category : #'Moose-DistributionMap' -} - -{ #category : #'computing - possible properties' } -OpenDistributionMapWizard >> allPropertySelectorsForElementOfType: aClass [ - - "return a list of property selectors that can be applied to instances of aClass." -" |result| - self halt. - result := (aClass allPropertySelectorsComputableForAtLeastOneElementIn: self mooseModel). - ^ result" - ^ aClass allPropertySelectors values -] - -{ #category : #accessing } -OpenDistributionMapWizard >> colorCollection [ - - "return the collection of all the colors that can be selected to display a property value" - ^ colorCollection ifNil: [ colorCollection := OrderedCollection withAll: {Color blue. Color red . Color green . Color brown. Color yellow . Color orange . Color magenta . Color cyan . Color purple . Color pink }] -] - -{ #category : #accessing } -OpenDistributionMapWizard >> computeAndReturnDistributionMapElements [ - - "both subclasses have a different way compute that. One directly have the corresponding group to return, the other need to compute that from a block parameter" - ^ self subclassResponsibility -] - -{ #category : #accessing } -OpenDistributionMapWizard >> distributionMapElements [ - - ^ self computeAndReturnDistributionMapElements -] - -{ #category : #accessing } -OpenDistributionMapWizard >> groupClass [ - - ^ self mooseGroup anyOne class -] - -{ #category : #accessing } -OpenDistributionMapWizard >> groupMetaClass [ - - ^ MooseModel meta elements detect: [:each | each isFM3Class and: [each implementingClass = self groupClass ] ] ifNone: []. -] - -{ #category : #'initialize-release' } -OpenDistributionMapWizard >> initializePropertyValuesPane: aWizardPane [ - | dropListPart | - dropListPart := (DropListPart new) - list: #(1 2 3 4 5 6 7 8 9 10); - inGroupboxNamed: 'How many values do you want to display from your property: '; - defaultValue: 2; - useLatePopulateContents: false; - callback: [ :outputValue | - aWizardPane removeAllParts. - aWizardPane row: dropListPart associatedTo: #numberOfProperties. - self initializePropertyValuesPane: aWizardPane numberOfProp: outputValue]. - aWizardPane row: dropListPart associatedTo: #numberOfProperties -] - -{ #category : #'initialize-release' } -OpenDistributionMapWizard >> initializePropertyValuesPane: aWizardPane numberOfProp: outputValue [ - - 1 to: outputValue do: [ :index | - aWizardPane - row: [ :r | - r - column: (self propertyNamePartWithDefault: 'property' , index asString) - associatedTo: ('property' , index asString , 'Name') asSymbol. - r - column: (self propertyValueMapperPartFromIndex: index) - associatedTo: ('property' , index asString , 'Mapper') asSymbol - requiring: - {#propertySelector. - #entitiesToComputeSelector}. - r column: (self propertyColorPartWithDefault: index) associatedTo: ('property' , index asString , 'Color') asSymbol ] ]. - aWizardPane row: self useDefaultColorsPart associatedTo: #useDefaultColors. - ^ aWizardPane refresh -] - -{ #category : #accessing } -OpenDistributionMapWizard >> mooseGroup [ - - "return the mooseGroup concerned by the visualization" - ^mooseGroup -] - -{ #category : #accessing } -OpenDistributionMapWizard >> mooseGroup: aMooseGroup [ - - "set the mooseGroup concerned by the visualization" - mooseGroup := aMooseGroup -] - -{ #category : #accessing } -OpenDistributionMapWizard >> mooseModel [ - - "return the mooseGroup concerned by the visualization" - ^mooseModel ifNil: [mooseModel := self mooseGroup mooseModel] -] - -{ #category : #'accessing - map parameters' } -OpenDistributionMapWizard >> properties [ - - ^ (1 to: (self wizardInformations at: #numberOfProperties)) collect: [:int | self wizardInformations at: {'property',int asString, 'Name'} asSymbol] -] - -{ #category : #'accessing - map parameters' } -OpenDistributionMapWizard >> propertyBlockOrSelector [ - - ^ Smalltalk evaluate: (self wizardInformations at: #propertySelector). -] - -{ #category : #'accessing - map parameters' } -OpenDistributionMapWizard >> propertyColorMap [ - - | result | - result := Dictionary new. - 1 to: (self wizardInformations at: #numberOfProperties) do: [ :number | - |propertyValueId| - propertyValueId := self wizardInformations at: ('property', number asString,'Name') asSymbol. - result - at: propertyValueId - put: (self colorCollection at: (self wizardInformations at: ('property',number asString,'Color') asSymbol)). - ]. - - ^ result -] - -{ #category : #'initialize-release' } -OpenDistributionMapWizard >> propertyColorPartWithDefault: index [ - ^ (MorphDropListPart new) - inGroupboxNamed: 'Color'; - useLatePopulateContents: false; - list: - (self colorCollection - collect: [ :c | - (Morph new) - extent: 80 @ 12; - color: c ]); - defaultValue: index; - yourself -] - -{ #category : #'initialize-release' } -OpenDistributionMapWizard >> propertyMapperDefaultTextFromIndex: aNumber [ - - aNumber = 1 - ifTrue: [^ self propertyMapperFirstDefaultText] - ifFalse: [^ self propertyMapperSecondDefaultText] -] - -{ #category : #'initialize-release' } -OpenDistributionMapWizard >> propertyMapperFirstDefaultText [ - - ^ (DistributionMapPropertyInfo fromComputationBlock: self propertyBlockOrSelector andElements: self distributionMapElements) firstDefaultText -] - -{ #category : #'initialize-release' } -OpenDistributionMapWizard >> propertyMapperSecondDefaultText [ - - ^ (DistributionMapPropertyInfo fromComputationBlock: (self propertyBlockOrSelector) andElements: self distributionMapElements) secondDefaultText -] - -{ #category : #'initialize-release' } -OpenDistributionMapWizard >> propertyNamePartWithDefault: aString [ - ^ (TextFieldPart new) - inGroupboxNamed: 'Property name'; - useLatePopulateContents: false; - defaultValue: aString; - yourself -] - -{ #category : #'initialize-release' } -OpenDistributionMapWizard >> propertyValueMapperPartFromIndex: index [ - - ^ (TextFieldPart new) - inGroupboxNamed: 'Value mapper'; - useLatePopulateContents: false; - prefix: '[:propVal | '; - suffix: ' ]'; - defaultValue: [ :requiredInputs | - self propertyMapperDefaultTextFromIndex: index ]; - textFieldHorizontalSize: 200; - yourself -] - -{ #category : #'accessing - map parameters' } -OpenDistributionMapWizard >> propertyValuesMap [ - - | block result prop | - result := Dictionary new. - 1 to: (self wizardInformations at: #numberOfProperties) do: [:int | - |blockString propertyValueId| - propertyValueId := self wizardInformations at: ('property',int asString,'Name') asSymbol. - blockString := '[:propVal | ',(self wizardInformations at: ('property',int asString ,'Mapper') asSymbol), ']'. - result at: propertyValueId put: (Smalltalk evaluate:blockString ) - ]. - ^ result. - -] - -{ #category : #'initialize-release' } -OpenDistributionMapWizard >> useDefaultColorsPart [ - ^ (CheckboxPart new) - label: 'Use a default color for each disctinct value (will only diplay the first ten)'; - defaultValue: false; - useLatePopulateContents: false; - yourself -] diff --git a/src-archive/Moose-DistributionMap/package.st b/src-archive/Moose-DistributionMap/package.st deleted file mode 100644 index b27812280..000000000 --- a/src-archive/Moose-DistributionMap/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Moose-DistributionMap' } diff --git a/src-archive/Moose-Hismo/FAMIXInheritance.extension.st b/src-archive/Moose-Hismo/FAMIXInheritance.extension.st deleted file mode 100644 index 996704c4a..000000000 --- a/src-archive/Moose-Hismo/FAMIXInheritance.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #FAMIXInheritance } - -{ #category : #'*moose-hismo' } -FAMIXInheritance >> historicalUniqueName [ - - ^(self subclass mooseName , '->' , self superclass mooseName) asSymbol -] diff --git a/src-archive/Moose-Hismo/FAMIXPackage.extension.st b/src-archive/Moose-Hismo/FAMIXPackage.extension.st deleted file mode 100644 index c9e0adb4c..000000000 --- a/src-archive/Moose-Hismo/FAMIXPackage.extension.st +++ /dev/null @@ -1,8 +0,0 @@ -Extension { #name : #FAMIXPackage } - -{ #category : #'*moose-hismo' } -FAMIXPackage >> historicalUniqueName [ - ^ (self parentPackage isNil - ifTrue: [ self name ] - ifFalse: [ self parentPackage historicalUniqueName , '.' , self name ]) asSymbol -] diff --git a/src-archive/Moose-Hismo/HismoAbstractHistory.class.st b/src-archive/Moose-Hismo/HismoAbstractHistory.class.st deleted file mode 100644 index 90197eb04..000000000 --- a/src-archive/Moose-Hismo/HismoAbstractHistory.class.st +++ /dev/null @@ -1,828 +0,0 @@ -" -AbstractHistory represents the core concept in the Hismo meta-model. - -A history is defined as a sequence of versions of a certain kind (e.g. we can have class history, system history, etc.) - -Instance Variables: - properties this dictionary is used for annotations. It is also used for caching the properties computed in Operators. - versions a sequence versions - - -" -Class { - #name : #HismoAbstractHistory, - #superclass : #FAMIXEntity, - #instVars : [ - 'versions', - 'referenceHistory', - 'parentHistory' - ], - #category : #'Moose-Hismo' -} - -{ #category : #meta } -HismoAbstractHistory class >> annotation [ - - - -] - -{ #category : #'instance creation' } -HismoAbstractHistory class >> new [ - - ^super new initialize -] - -{ #category : #'public interface' } -HismoAbstractHistory >> addAll: aCollection [ - - versions addAll: aCollection. - self resetMooseName -] - -{ #category : #'public interface' } -HismoAbstractHistory >> addLast: aVersion [ - - versions addLast: aVersion. - self resetMooseName -] - -{ #category : #properties } -HismoAbstractHistory >> addedPropertyNamed: aPropertyName [ - - | totalAdded current previous | - totalAdded := 0. - self - versionsIndexFrom2Do: - [:i | - current := (self versions at: i) propertyNamed: aPropertyName. - previous := (self versions at: i - 1) propertyNamed: aPropertyName. - current - previous > 0 - ifTrue: [totalAdded := totalAdded + (current - previous) abs]]. - ^totalAdded -] - -{ #category : #properties } -HismoAbstractHistory >> age [ - - - - ^self - lookUpPropertyNamed: #age - computedAs: [self size] -] - -{ #category : #properties } -HismoAbstractHistory >> allEarliestEvolutionOfPropertyNamed: aPropertyName [ - - | ene currentValue previousValue | - ene := self first propertyNamed: aPropertyName. - self - versionsIndexFrom2Do: - [:i | - currentValue := (self versions at: i) propertyNamed: aPropertyName. - previousValue := (self versions at: i - 1) propertyNamed: aPropertyName. - [ene := ene + ((currentValue - previousValue) abs * (2 raisedTo: 1 - i))] - on: ArithmeticError - do: [:exc | ene := ene + 0]]. - ^ene asFloat -] - -{ #category : #properties } -HismoAbstractHistory >> allEvolutionOfPropertyNamed: aPropertyName [ - - | ene current previous | - ene := self first propertyNamed: aPropertyName. - self - versionsIndexFrom2Do: - [:i | - current := (self versions at: i) propertyNamed: aPropertyName. - previous := (self versions at: i - 1) propertyNamed: aPropertyName. - ene := ene + (current - previous) abs]. - ^ene -] - -{ #category : #properties } -HismoAbstractHistory >> allLatestEvolutionOfPropertyNamed: aPropertyName [ - - | ene currentValue previousValue | - ene := (self first propertyNamed: aPropertyName) - * (2 raisedTo: 1 - self size). - self - versionsIndexFrom2Do: - [:i | - currentValue := (self versions at: i) propertyNamed: aPropertyName. - previousValue := (self versions at: i - 1) propertyNamed: aPropertyName. - [ene := ene - + ((currentValue - previousValue) abs * (2 raisedTo: i - self size))] - on: Error - do: [:exc | ene := ene + 0]]. - ^ene asFloat -] - -{ #category : #enumerating } -HismoAbstractHistory >> anySatisfy: aBlock [ - - ^self versions anySatisfy: aBlock -] - -{ #category : #'public interface' } -HismoAbstractHistory >> at: anIndex [ - "returns the anIndex version" - - ^self versions at: anIndex -] - -{ #category : #versions } -HismoAbstractHistory >> atReferenceVersion: aReferenceVersion [ - "returns the version in the current history that corresponds to aReferenceVersion" - - ^self versions - detect: [:each | each referenceVersion = aReferenceVersion] - ifNone: [nil] -] - -{ #category : #enumerating } -HismoAbstractHistory >> collect: aBlock [ - "traverses the versions and collects by aBlock" - - ^self versions collect: aBlock -] - -{ #category : #enumerating } -HismoAbstractHistory >> completeHistoryCollect: aBlock ifNotPresent: anotherBlock [ - "traverses the referenceHistory and collects by aBlock. If the current history does not exist anotherBlock is collected" - - | data | - data := OrderedCollection new. - self referenceHistory versions - do: - [:eachReferenceVersion | - (self existsInReferenceVersion: eachReferenceVersion) - ifTrue: - [data - addLast: - (aBlock value: (self atReferenceVersion: eachReferenceVersion))] - ifFalse: [data addLast: (anotherBlock value: eachReferenceVersion)]]. - ^data -] - -{ #category : #enumerating } -HismoAbstractHistory >> completeHistoryDo: aBlock ifNotPresent: anotherBlock [ - "traverses the referenceHistory and collects by aBlock. If the current - history does not exist anotherBlock is collected" - - self referenceHistory versions - do: [:eachReferenceVersion | (self existsInReferenceVersion: eachReferenceVersion) - ifTrue: [aBlock - value: (self atReferenceVersion: eachReferenceVersion)] - ifFalse: [anotherBlock value: eachReferenceVersion]] -] - -{ #category : #private } -HismoAbstractHistory >> computeSubHistoriesWithType: aHistoryClass computedForEachVersionAs: aBlock withDescription: aDescription [ - "generic method to compute sub histories" - | histories histDict | - histories := OrderedCollection new. - histDict := Dictionary new. - - versions do: - [ :eachVersion | - (aBlock value: eachVersion) do: - [ :each | - | wantedHistory | - wantedHistory := histDict - at: each historicalUniqueName - ifAbsentPut: [ aHistoryClass new ]. - (wantedHistory isEmpty not and: [ wantedHistory last referenceVersion = eachVersion referenceVersion ]) ifFalse: - [ | newVersion | - newVersion := HismoEntityVersion - with: each - inHistory: wantedHistory - withReferenceVersion: eachVersion referenceVersion. - wantedHistory addLast: newVersion ] ] ]. - histDict values do: [ :each | each referenceHistory: self referenceHistory ]. - histories addAll: histDict values. - ^ HismoHistoryGroup - withAll: histories - withDescription: aDescription -] - -{ #category : #statistics } -HismoAbstractHistory >> correlationOf: aBlockOrSymbol1 and: aBlockOrSymbol2 [ - "This method calculates the Pearson correlation for two metrics between all the values obtained from the history versions" - |setValue1 setValue2 result sum_sq_x sum_sq_y sum_coproduct mean_x mean_y sweep delta_x delta_y pop_sd_x pop_sd_y cov_x_y| - setValue1:=OrderedCollection new. - setValue2:=OrderedCollection new. - - self versions do:[:currentHistoryVersion| - setValue1 add: (aBlockOrSymbol1 value: currentHistoryVersion). - setValue2 add: (aBlockOrSymbol2 value: currentHistoryVersion). - ]. - - (setValue1 size ~= setValue2 size) ifTrue:[self error: 'The arrays lenghts are different']. - (setValue1 asSet size= 1 or: setValue2 asSet size= 1 ) ifTrue:[ self error: 'An array containts only one value']. - result:=0. - sum_sq_x:=0. - sum_sq_y:=0. - sum_coproduct:=0. - mean_x:=setValue1 at: 1. - mean_y:=setValue2 at: 1. - 3 to: (setValue1 size +1) do:[:i| - sweep:=(i-2)/(i-1). - delta_x:=(setValue1 at: (i-1))-mean_x. - delta_y:=(setValue2 at: (i-1))-mean_y. - sum_sq_x := (sum_sq_x + ((delta_x * delta_x)*sweep )). - sum_sq_y := (sum_sq_y +(delta_y * delta_y * sweep)). - sum_coproduct := (sum_coproduct +(delta_x * delta_y * sweep)). - mean_x := (mean_x +(delta_x / (i-1))). - mean_y := (mean_y +(delta_y / (i-1))). - ]. - pop_sd_x:=(sum_sq_x/(setValue1 size)) sqrt. - pop_sd_y:=(sum_sq_y/(setValue1 size)) sqrt. - cov_x_y := (sum_coproduct / (setValue1 size)). - result := (cov_x_y / (pop_sd_x*pop_sd_y)). - ^result. -] - -{ #category : #private } -HismoAbstractHistory >> createEmptyHistory [ - - | history | - history := self class new. - history parentHistory: self. - history referenceHistory: self referenceHistory. - ^history -] - -{ #category : #enumerating } -HismoAbstractHistory >> do: aBlock [ - "traverses the versions and executes aBlock for each version" - - ^self versions do: aBlock -] - -{ #category : #properties } -HismoAbstractHistory >> earliestEvolutionOfPropertyNamed: aPropertyName [ - - | ene currentValue previousValue | - ene := 0. - self - versionsIndexFrom2Do: - [:i | - currentValue := (self versions at: i) propertyNamed: aPropertyName. - previousValue := (self versions at: i - 1) propertyNamed: aPropertyName. - [ene := ene + ((currentValue - previousValue) abs * (2 raisedTo: 2 - i))] - on: Error - do: [:exc | ene := ene + 0]]. - ^ene asFloat -] - -{ #category : #enumerating } -HismoAbstractHistory >> every2VersionsDo: aBlock [ - "traverses the history and executes aBlock that takes 2 parameters: the previous version and the current version" - - | previousVersion currentVersion | - self - versionsIndexFrom2Do: - [:i | - previousVersion := self versions at: i - 1. - currentVersion := self versions at: i. - aBlock value: previousVersion value: currentVersion] -] - -{ #category : #enumerating } -HismoAbstractHistory >> every2VersionsHistoryDo: aBlock [ - "traverses the history and executes aBlock that takes 1 parameter: the history formed by the previous version and the current version" - - | previousVersion currentVersion currentHistory | - self - versionsIndexFrom2Do: - [:i | - previousVersion := (self versions at: i - 1) copy. - currentVersion := (self versions at: i) copy. - currentHistory := self createEmptyHistory. - currentHistory - addLast: previousVersion; - addLast: currentVersion. - previousVersion history: currentHistory. - currentVersion history: currentHistory. - aBlock value: currentHistory] -] - -{ #category : #properties } -HismoAbstractHistory >> evolutionCountOfPropertyNamed: aPropertyName [ - - | count current previous | - count := 0. - self - versionsIndexFrom2Do: - [:i | - current := (self versions at: i) propertyNamed: aPropertyName. - previous := (self versions at: i - 1) propertyNamed: aPropertyName. - current - previous ~= 0 ifTrue: [count := count + 1]]. - ^count -] - -{ #category : #properties } -HismoAbstractHistory >> evolutionOfPropertyNamed: aPropertyName [ - - | ene current previous | - ene := 0. - self versionsIndexFrom2Do: [:i | - current := aPropertyName value: (self versions at: i) . - previous := aPropertyName value: (self versions at: i - 1). - ene := ene + (current - previous) abs]. - ^ene -] - -{ #category : #versions } -HismoAbstractHistory >> existsInReferenceVersion: aReferenceVersion [ - "answers if the history has a version in aReferenceVersion" - - ^(self versions - select: [:each | each referenceVersion = aReferenceVersion]) isEmpty not -] - -{ #category : #'public interface' } -HismoAbstractHistory >> first [ - "answers the first version" - - ^versions first -] - -{ #category : #properties } -HismoAbstractHistory >> firstVersionOfPropertyNamed: aPropertyName [ - - ^self first propertyNamed: aPropertyName -] - -{ #category : #'public interface' } -HismoAbstractHistory >> hasName: aSymbol [ - "answers whether any of the versions has the name given by aSymbol" - - ^(self versions collect: [:each | each versionEntity name]) includes: - aSymbol -] - -{ #category : #'public interface' } -HismoAbstractHistory >> hasUniqueMooseNameInModel [ - ^true -] - -{ #category : #'public interface' } -HismoAbstractHistory >> hasUniqueName: aSymbol [ - "answers whether any of the versions has the unique name given by aSymbol" - - ^(self versions collect: [:each | each versionEntity historicalUniqueName]) - includes: aSymbol -] - -{ #category : #properties } -HismoAbstractHistory >> historyAverageOfPropertyNamed: aPropertyName [ - - | sum | - self isEmpty ifTrue: [^0]. - sum := self versions - inject: 0 - into: [:s :each | s + (each propertyNamed: aPropertyName)]. - ^(sum / self size) asFloat -] - -{ #category : #enumerating } -HismoAbstractHistory >> indexOf: aVersion [ - - ^self versions identityIndexOf: aVersion -] - -{ #category : #initialize } -HismoAbstractHistory >> initialize [ - - super initialize. - versions := OrderedCollection new. - parentHistory := self -] - -{ #category : #properties } -HismoAbstractHistory >> instabilityOfPropertyNamed: aPropertyName [ - - | stab current previous | - stab := 0. - self size = 1 ifTrue: [^1.0]. - self - versionsIndexFrom2Do: - [:i | - current := (self versions at: i) propertyNamed: aPropertyName. - previous := (self versions at: i - 1) propertyNamed: aPropertyName. - current - previous = 0 ifTrue: [stab := stab + 1]]. - ^100 - (stab / (self size - 1) * 100 asFloat) -] - -{ #category : #'lifespan testing' } -HismoAbstractHistory >> isBornInReferenceVersion: aReferenceVersion [ - "answers whether the first version of the history is present in the aReferenceVersion" - - ^self first referenceVersion = aReferenceVersion -] - -{ #category : #'lifespan testing' } -HismoAbstractHistory >> isBornLaterThanOrInReferenceVersion: aReferenceVersion [ - "answers whether the first version of the history is present later than the aReferenceVersion" - - ^self first referenceVersion >= aReferenceVersion -] - -{ #category : #'lifespan testing' } -HismoAbstractHistory >> isBornLaterThanReferenceVersion: aReferenceVersion [ - "answers whether the first version of the history is present later than the aReferenceVersion" - - ^self first referenceVersion > aReferenceVersion -] - -{ #category : #'lifespan testing' } -HismoAbstractHistory >> isBornPriorToOrInReferenceVersion: aReferenceVersion [ - "answers whether the first version of the history is present earlier than the aReferenceVersion" - - ^self first referenceVersion <= aReferenceVersion -] - -{ #category : #'lifespan testing' } -HismoAbstractHistory >> isBornPriorToReferenceVersion: aReferenceVersion [ - "answers whether the first version of the history is present earlier than the aReferenceVersion" - - ^self first referenceVersion < aReferenceVersion -] - -{ #category : #'lifespan testing' } -HismoAbstractHistory >> isDayFly [ - "answers whether the history existed only in one version" - - ^self size = 1 -] - -{ #category : #'lifespan testing' } -HismoAbstractHistory >> isDeadInReferenceVersion: aReferenceVersion [ - "answers whether the last version of the history is present in the aReferenceVersion" - - ^self last referenceVersion = aReferenceVersion -] - -{ #category : #'lifespan testing' } -HismoAbstractHistory >> isDeadLaterThanOrInReferenceVersion: aReferenceVersion [ - "answers whether the last version of the history is present later than the aReferenceVersion" - - ^self last referenceVersion >= aReferenceVersion -] - -{ #category : #'lifespan testing' } -HismoAbstractHistory >> isDeadLaterThanReferenceVersion: aReferenceVersion [ - "answers whether the last version of the history is present later than the aReferenceVersion" - - ^self last referenceVersion > aReferenceVersion -] - -{ #category : #'lifespan testing' } -HismoAbstractHistory >> isDeadPriorToOrInReferenceVersion: aReferenceVersion [ - "answers whether the last version of the history is present prior to the aReferenceVersion" - - ^self last referenceVersion <= aReferenceVersion -] - -{ #category : #'lifespan testing' } -HismoAbstractHistory >> isDeadPriorToReferenceVersion: aReferenceVersion [ - "answers whether the last version of the history is present prior to the aReferenceVersion" - - ^self last referenceVersion < aReferenceVersion -] - -{ #category : #'lifespan testing' } -HismoAbstractHistory >> isEmpty [ - "answers whether the history does not have versions" - - ^self size = 0 -] - -{ #category : #'lifespan testing' } -HismoAbstractHistory >> isLateBorn [ - "answers whether the first version of the history is not present in the first reference version" - - ^self first referenceVersion - > self referenceHistory first referenceVersion -] - -{ #category : #'lifespan testing' } -HismoAbstractHistory >> isPersistent [ - "answers whether the history existed in the entire referenceHistory" - - ^self size = self referenceHistory size -] - -{ #category : #'lifespan testing' } -HismoAbstractHistory >> isRemoved [ - "answers whether the last version of the history is not present in the last reference version" - - ^self last referenceVersion < self referenceHistory last referenceVersion -] - -{ #category : #'public interface' } -HismoAbstractHistory >> last [ - "answers the last version" - - ^versions last -] - -{ #category : #properties } -HismoAbstractHistory >> lastVersionOfPropertyNamed: aPropertyName [ - - ^self last propertyNamed: aPropertyName -] - -{ #category : #properties } -HismoAbstractHistory >> latestEvolutionOfPropertyNamed: aPropertyName [ - - | ene currentValue previousValue | - ene := 0. - self - versionsIndexFrom2Do: - [:i | - currentValue := (self versions at: i) propertyNamed: aPropertyName. - previousValue := (self versions at: i - 1) propertyNamed: aPropertyName. - [ene := ene - + ((currentValue - previousValue) abs * (2 raisedTo: i - self size))] - on: Error - do: [:exc | ene := ene + 0]]. - ^ene asFloat -] - -{ #category : #printing } -HismoAbstractHistory >> mooseDisplayStringOn: stream [ - - stream nextPutAll: (self mooseName asString , ' (' , self versions size printString , ')') -] - -{ #category : #'public interface' } -HismoAbstractHistory >> mooseNameOn: stream [ - "returns the unique name of the history" - - ^ (self isEmpty not and: [ self first versionUniqueName notNil ]) - ifTrue: [ stream nextPutAll: self first versionUniqueName ] - ifFalse: [ super mooseNameOn: stream ] -] - -{ #category : #'public interface' } -HismoAbstractHistory >> name [ - "answers the name of the history" - - ^self isEmpty - ifFalse: [self first versionEntity name] - ifTrue: [''] -] - -{ #category : #'public interface' } -HismoAbstractHistory >> originalParentHistory [ - - ^self = self parentHistory - ifTrue: [self] - ifFalse: [self parentHistory parentHistory] -] - -{ #category : #'public interface' } -HismoAbstractHistory >> parentHistory [ - - ^parentHistory -] - -{ #category : #'public interface' } -HismoAbstractHistory >> parentHistory: aHistory [ - - parentHistory := aHistory -] - -{ #category : #printing } -HismoAbstractHistory >> printOn: aStream [ - - aStream - nextPutAll: self mooseName asString; - space; - nextPutAll: '(' , self versions size printString , ')' -] - -{ #category : #'public interface' } -HismoAbstractHistory >> referenceHistory [ - "returns the reference history. The reference history is normally the system history" - - ^referenceHistory -] - -{ #category : #'public interface' } -HismoAbstractHistory >> referenceHistory: aSystemHistory [ - "The reference history is normally the system history" - - referenceHistory := aSystemHistory -] - -{ #category : #versions } -HismoAbstractHistory >> referenceVersions [ - "returns the reference versions" - - ^versions collect: [:each | each referenceVersion] -] - -{ #category : #versions } -HismoAbstractHistory >> referenceVersionsInWhichChangeOccured: aBlock [ - - ^(self select: [:each | each changedFromPrevious: aBlock]) - collect: [:each | each referenceVersion] -] - -{ #category : #versions } -HismoAbstractHistory >> referenceVersionsThatChangedPropertyNamed: aProperty [ - - ^(self select: [:each | each changedPropertyNamed: aProperty]) - collect: [:each | each referenceVersion] -] - -{ #category : #properties } -HismoAbstractHistory >> removedPropertyNamed: aPropertyName [ - - | totalRemoved current previous | - totalRemoved := 0. - self - versionsIndexFrom2Do: - [:i | - current := (self versions at: i) propertyNamed: aPropertyName. - previous := (self versions at: i - 1) propertyNamed: aPropertyName. - current - previous < 0 - ifTrue: [totalRemoved := totalRemoved + (current - previous) abs]]. - ^totalRemoved -] - -{ #category : #enumerating } -HismoAbstractHistory >> select: aBlock [ - "returns a sub history formed by the versions that satisfy aBlock" - - | selectedVersions selectedHistory | - selectedVersions := self versions select: aBlock. - selectedHistory := self createEmptyHistory. - selectedHistory referenceHistory: self referenceHistory. - selectedVersions - do: - [:each | - | newVersion | - newVersion := each copy. - selectedHistory addLast: newVersion. - newVersion history: selectedHistory]. - ^selectedHistory -] - -{ #category : #enumerating } -HismoAbstractHistory >> selectFromReferenceVersionCollection: aCollection [ - "returns the history made by the specified versions" - - ^self - select: - [:eachVersion | aCollection includes: eachVersion referenceVersion] -] - -{ #category : #enumerating } -HismoAbstractHistory >> selectFromVersionIndexCollection: aCollection [ - "returns the history made by the specified versions" - - | selectedVersions selectedHistory | - selectedVersions := OrderedCollection new. - aCollection - do: [:eachIndex | selectedVersions add: (self versions at: eachIndex)]. - selectedHistory := self createEmptyHistory. - selectedVersions - do: - [:each | - | newVersion | - newVersion := each copy. - selectedHistory addLast: newVersion. - newVersion history: selectedHistory]. - ^selectedHistory -] - -{ #category : #'public interface' } -HismoAbstractHistory >> size [ - "returns the size of the history (or the age)" - - ^versions size -] - -{ #category : #properties } -HismoAbstractHistory >> stabilityOfPropertyNamed: aPropertyName [ - - | stab current previous | - stab := 0. - self size = 1 ifTrue: [ ^ 1.0 ]. - self - versionsIndexFrom2Do: - [:i | - current := (self versions at: i) propertyNamed: aPropertyName. - previous := (self versions at: i - 1) propertyNamed: aPropertyName. - current - previous = 0 ifTrue: [stab := stab + 1]]. - ^stab / (self size - 1) * 100 asFloat -] - -{ #category : #properties } -HismoAbstractHistory >> timeWarpingSimilarityAsComparedWith: aHistory relatedToVersionProperty: aVersionProperty [ - "returns the Dynamic Time Warping distance of the time series formed by collecting aVersionProperty from both the current history and aHistory" - - | vector1 vector2 computer | - vector1 := self versions - collect: [:each | each propertyNamed: aVersionProperty]. - vector2 := aHistory versions - collect: [:each | each propertyNamed: aVersionProperty]. - computer := (MalTimeWarpingEngine new) - vectorA: vector1; - vectorB: vector2; - distanceBlock: [:a :b | (a - b) * (a - b)]; - yourself. - ^computer getCost -] - -{ #category : #versions } -HismoAbstractHistory >> versionAfterReferenceVersion: aReferenceVersion [ - "returns the version of the current history that comes after the version present in aReferenceVersion" - - 1 - to: versions size - 1 - do: - [:index | - (self versions at: index) referenceVersion = aReferenceVersion - ifTrue: [^self versions at: index + 1]]. - ^nil -] - -{ #category : #versions } -HismoAbstractHistory >> versionPriorToReferenceVersion: aReferenceVersion [ - "returns the version of the current history that comes before the version present in aReferenceVersion" - - 1 - to: versions size - do: - [:index | - (self versions at: index) referenceVersion = aReferenceVersion - ifTrue: - [index = 1 - ifTrue: [^nil] - ifFalse: [^self versions at: index - 1]]]. - ^nil -] - -{ #category : #versions } -HismoAbstractHistory >> versions [ - "returns the versions" - - ^versions -] - -{ #category : #enumerating } -HismoAbstractHistory >> versionsIndexDo: aBlock [ - "traverses the versions and executes aBlock by providing the index of the version" - - 1 - to: versions size - do: [:i | aBlock value: i] -] - -{ #category : #enumerating } -HismoAbstractHistory >> versionsIndexFrom2Do: aBlock [ - "traverses the versions starting from the second version and executes aBlock by providing the index of the version" - - 2 - to: versions size - do: [:i | aBlock value: i] -] - -{ #category : #versions } -HismoAbstractHistory >> versionsThatChangedPropertyNamed: aProperty [ - - ^(self select: [:each | each changedPropertyNamed: aProperty]) - collect: [:each | each] -] - -{ #category : #view } -HismoAbstractHistory >> viewSimpleEvolutionMatrix [ - - | view | - - view := RTMondrian new. - self viewSimpleEvolutionMatrixIn: view. - ^ view openWithToolbarEntitled: 'Simple Evolution matrix' -] - -{ #category : #view } -HismoAbstractHistory >> viewSimpleEvolutionMatrixIn: aView [ - - aView shape rectangle color: [ :x | Color lightGray ]. - aView - node: self - forIt: [ - aView shape rectangle - color: [:each | each == each referenceVersion ifTrue: [Color lightGray] ifFalse: [Color white] ]. - aView nodes: (self completeHistoryCollect: [:each | each] - ifNotPresent: [:eachRefVersion | eachRefVersion]). - ] -] diff --git a/src-archive/Moose-Hismo/HismoAbstractVersion.class.st b/src-archive/Moose-Hismo/HismoAbstractVersion.class.st deleted file mode 100644 index 9061a9f46..000000000 --- a/src-archive/Moose-Hismo/HismoAbstractVersion.class.st +++ /dev/null @@ -1,51 +0,0 @@ -" -This is the abstract representation of a version entity. There are at least two subclasses: -- EntityVersion points to a structural entity -- CoChangeVersion is a purely time entity, and has no representation at the structural level. -" -Class { - #name : #HismoAbstractVersion, - #superclass : #FAMIXEntity, - #instVars : [ - 'history' - ], - #category : #'Moose-Hismo' -} - -{ #category : #meta } -HismoAbstractVersion class >> annotation [ - - -] - -{ #category : #accessing } -HismoAbstractVersion >> history [ - - ^history -] - -{ #category : #accessing } -HismoAbstractVersion >> history: anObject [ - - history := anObject -] - -{ #category : #'public interface' } -HismoAbstractVersion >> nextVersion [ - - | index | - index := self history versions indexOf: self. - index = self history versions size - ifTrue: [^nil] - ifFalse: [^self history versions at: index + 1] -] - -{ #category : #'public interface' } -HismoAbstractVersion >> previousVersion [ - - | index | - index := self history versions indexOf: self. - index = 1 - ifTrue: [^nil] - ifFalse: [^self history versions at: index - 1] -] diff --git a/src-archive/Moose-Hismo/HismoAccessHistory.class.st b/src-archive/Moose-Hismo/HismoAccessHistory.class.st deleted file mode 100644 index 8493ab4d2..000000000 --- a/src-archive/Moose-Hismo/HismoAccessHistory.class.st +++ /dev/null @@ -1,41 +0,0 @@ -Class { - #name : #HismoAccessHistory, - #superclass : #HismoAbstractHistory, - #instVars : [ - 'accessesHistory', - 'accessedInHistory' - ], - #category : #'Moose-Hismo' -} - -{ #category : #meta } -HismoAccessHistory class >> annotation [ - - - -] - -{ #category : #'public interface' } -HismoAccessHistory >> accessedInHistory [ - - accessedInHistory isNil - ifTrue: - [accessedInHistory := (self referenceHistory allMethodHistories - select: [:each | each mooseName = self first accessedIn mooseName]) - first]. - ^accessedInHistory -] - -{ #category : #'public interface' } -HismoAccessHistory >> accessesHistory [ - - accessesHistory isNil - ifTrue: - [| candidateList | - candidateList := self referenceHistory allAttributeHistories - select: [:each | each mooseName = self first accesses mooseName]. - accessesHistory := candidateList isEmpty - ifFalse: [candidateList first] - ifTrue: [nil]]. - ^accessesHistory -] diff --git a/src-archive/Moose-Hismo/HismoAttributeHistory.class.st b/src-archive/Moose-Hismo/HismoAttributeHistory.class.st deleted file mode 100644 index 938a1f2a5..000000000 --- a/src-archive/Moose-Hismo/HismoAttributeHistory.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #HismoAttributeHistory, - #superclass : #HismoAbstractHistory, - #instVars : [ - 'containingClassHistory' - ], - #category : #'Moose-Hismo' -} - -{ #category : #meta } -HismoAttributeHistory class >> annotation [ - - - -] - -{ #category : #accessing } -HismoAttributeHistory >> belongsTo [ - "return the classhistory it belongs to" - - containingClassHistory isNil - ifTrue: - [containingClassHistory := (self referenceHistory allClassHistories - select: - [:eachClass | eachClass hasUniqueName: self first versionEntity belongsTo mooseName]) - first]. - ^containingClassHistory -] diff --git a/src-archive/Moose-Hismo/HismoClassHierarchyHistory.class.st b/src-archive/Moose-Hismo/HismoClassHierarchyHistory.class.st deleted file mode 100644 index 11bde208a..000000000 --- a/src-archive/Moose-Hismo/HismoClassHierarchyHistory.class.st +++ /dev/null @@ -1,16 +0,0 @@ -Class { - #name : #HismoClassHierarchyHistory, - #superclass : #HismoAbstractHistory, - #instVars : [ - 'classHistories', - 'inheritanceDefinitionHistories' - ], - #category : #'Moose-Hismo' -} - -{ #category : #meta } -HismoClassHierarchyHistory class >> annotation [ - - - -] diff --git a/src-archive/Moose-Hismo/HismoClassHistory.class.st b/src-archive/Moose-Hismo/HismoClassHistory.class.st deleted file mode 100644 index 97da8fac9..000000000 --- a/src-archive/Moose-Hismo/HismoClassHistory.class.st +++ /dev/null @@ -1,359 +0,0 @@ -Class { - #name : #HismoClassHistory, - #superclass : #HismoAbstractHistory, - #instVars : [ - 'methodHistories', - 'attributeHistories', - 'containingNamespaceHistory', - 'containingPackageHistory' - ], - #category : #'Moose-Hismo' -} - -{ #category : #meta } -HismoClassHistory class >> annotation [ - - - -] - -{ #category : #initialize } -HismoClassHistory class >> new [ - - ^super new initialize -] - -{ #category : #properties } -HismoClassHistory >> addedNumberOfLinesOfCode [ - - - - ^self - lookUpPropertyNamed: #addedNumberOfLinesOfCode - computedAs: [self addedPropertyNamed: #numberOfLinesOfCode] -] - -{ #category : #properties } -HismoClassHistory >> addedNumberOfStatements [ - - - - ^self - lookUpPropertyNamed: #addedNumberOfStatements - computedAs: [self addedPropertyNamed: #numberOfStatements] -] - -{ #category : #properties } -HismoClassHistory >> allEarliestEvolutionOfNumberOfMethods [ - - - - ^self - lookUpPropertyNamed: #allEarliestEvolutionOfNumberOfMethods - computedAs: [self allEarliestEvolutionOfPropertyNamed: #numberOfMethods] -] - -{ #category : #properties } -HismoClassHistory >> allEvolutionOfNumberOfMethods [ - - - - ^self - lookUpPropertyNamed: #allEvolutionOfNumberOfMethods - computedAs: [self allEvolutionOfPropertyNamed: #numberOfMethods] -] - -{ #category : #properties } -HismoClassHistory >> allLatestEvolutionOfNumberOfMethods [ - - - - ^self - lookUpPropertyNamed: #allLatestEvolutionOfNumberOfMethods - computedAs: [self allLatestEvolutionOfPropertyNamed: #numberOfMethods] -] - -{ #category : #accessing } -HismoClassHistory >> attributeHistories [ - - attributeHistories isNil - ifTrue: - [" attributeHistories := self computeSubHistories: AttributeHistory new computedForEachVersionAs: [:version | version allAttributes] withDescription: 'Attribute Histores from ', self uniqueName, ' Class History'." - attributeHistories := self referenceHistory allAttributeHistories - select: [:each | each belongsTo = self]]. - ^attributeHistories -] - -{ #category : #accessing } -HismoClassHistory >> belongsTo [ - "return the namespacehistory it belongs to" - - containingNamespaceHistory isNil - ifTrue: - [containingNamespaceHistory := (self referenceHistory allNamespaceHistories - select: - [:eachClass | eachClass hasUniqueName: self first versionEntity belongsTo mooseName]) - first]. - ^containingNamespaceHistory -] - -{ #category : #'public interface' } -HismoClassHistory >> directSubHistories [ - - | subs | - subs := MooseGroup new. - (self referenceHistory allInheritanceDefinitionHistories - select: [:each | each superHistory = self]) - collect: [:each | subs add: each subHistory]. - ^subs -] - -{ #category : #'public interface' } -HismoClassHistory >> directSuperHistories [ - - | supers | - supers := MooseGroup new. - (self referenceHistory allInheritanceDefinitionHistories - select: [:each | each subHistory = self]) - collect: [:each | supers add: each superHistory]. - ^supers -] - -{ #category : #properties } -HismoClassHistory >> earliestEvolutionOfNumberOfAttributes [ - - - - ^self - lookUpPropertyNamed: #earliestEvolutionOfNumberOfAttributes - computedAs: [self earliestEvolutionOfPropertyNamed: #numberOfAttributes] -] - -{ #category : #properties } -HismoClassHistory >> earliestEvolutionOfNumberOfLinesOfCode [ - - - - ^self - lookUpPropertyNamed: #earliestEvolutionOfNumberOfLinesOfCode - computedAs: [self earliestEvolutionOfPropertyNamed: #numberOfLinesOfCode] -] - -{ #category : #properties } -HismoClassHistory >> earliestEvolutionOfNumberOfMethods [ - - - - ^self - lookUpPropertyNamed: #earliestEvolutionOfNumberOfMethods - computedAs: [self earliestEvolutionOfPropertyNamed: #numberOfMethods] -] - -{ #category : #properties } -HismoClassHistory >> earliestEvolutionOfNumberOfStatements [ - - - - ^self - lookUpPropertyNamed: #earliestEvolutionOfNumberOfMethods - computedAs: [self earliestEvolutionOfPropertyNamed: #numberOfStatements] -] - -{ #category : #properties } -HismoClassHistory >> evolutionOfNumberOfAttributes [ - - - - ^self - lookUpPropertyNamed: #evolutionOfNumberOfAttributes - computedAs: [self evolutionOfPropertyNamed: #numberOfAttributes] -] - -{ #category : #properties } -HismoClassHistory >> evolutionOfNumberOfLinesOfCode [ - - - - ^self - lookUpPropertyNamed: #evolutionOfNumberOfLinesOfCode - computedAs: [self evolutionOfPropertyNamed: #numberOfLinesOfCode] -] - -{ #category : #properties } -HismoClassHistory >> evolutionOfNumberOfMethods [ - - - - ^self - lookUpPropertyNamed: #evolutionOfNumberOfMethods - computedAs: [self evolutionOfPropertyNamed: #numberOfMethods] -] - -{ #category : #properties } -HismoClassHistory >> evolutionOfNumberOfStatements [ - - - - ^self - lookUpPropertyNamed: #evolutionOfNumberOfStatements - computedAs: [self evolutionOfPropertyNamed: #numberOfStatements] -] - -{ #category : #properties } -HismoClassHistory >> evolutionOfNumberOfStatementsPer5 [ - - - - ^self - lookUpPropertyNamed: #evolutionOfNumberOfStatementsPer5 - computedAs: [(self evolutionOfPropertyNamed: #numberOfStatements) / 5] -] - -{ #category : #properties } -HismoClassHistory >> lastOfNumberOfMethods [ - - - - ^self - lookUpPropertyNamed: #lastOfNumberOfMethods - computedAs: [self last numberOfMethods] -] - -{ #category : #properties } -HismoClassHistory >> latestEvolutionOfNumberOfAttributes [ - - - - ^self - lookUpPropertyNamed: #latestEvolutionOfNumberOfAttributes - computedAs: [self latestEvolutionOfPropertyNamed: #numberOfAttributes] -] - -{ #category : #properties } -HismoClassHistory >> latestEvolutionOfNumberOfLinesOfCode [ - - - - ^self - lookUpPropertyNamed: #latestEvolutionOfNumberOfLinesOfCode - computedAs: [self latestEvolutionOfPropertyNamed: #numberOfLinesOfCode] -] - -{ #category : #properties } -HismoClassHistory >> latestEvolutionOfNumberOfMethods [ - - - - ^self - lookUpPropertyNamed: #latestEvolutionOfNumberOfMethods - computedAs: [self latestEvolutionOfPropertyNamed: #numberOfMethods] -] - -{ #category : #properties } -HismoClassHistory >> latestEvolutionOfNumberOfStatements [ - - - - ^self - lookUpPropertyNamed: #latestEvolutionOfNumberOfStatements - computedAs: [self latestEvolutionOfPropertyNamed: #numberOfStatements] -] - -{ #category : #accessing } -HismoClassHistory >> methodHistories [ - - methodHistories isNil - ifTrue: - [" methodHistories := self computeSubHistories: MethodHistory new computedForEachVersionAs: [:version | version methodDict] withDescription: 'Method Histores from ', self uniqueName, ' Class History'." - methodHistories := self referenceHistory allMethodHistories - select: [:each | each belongsTo = self]]. - ^methodHistories -] - -{ #category : #accessing } -HismoClassHistory >> packagedIn [ - - self deprecated: 'Call parentPackage instead of packagedIn'. - ^ self parentPackage -] - -{ #category : #accessing } -HismoClassHistory >> parentPackage [ - "return the packagehistory it is packaged in" - containingPackageHistory isNil ifTrue: - [ containingPackageHistory := (self referenceHistory allPackageHistories select: - [ :each | - each hasUniqueName: self first versionEntity parentPackage historicalUniqueName ]) first ]. - ^ containingPackageHistory -] - -{ #category : #properties } -HismoClassHistory >> removedNumberOfLinesOfCode [ - - - - ^self - lookUpPropertyNamed: #removedNumberOfLinesOfCode - computedAs: [self removedPropertyNamed: #numberOfLinesOfCode] -] - -{ #category : #properties } -HismoClassHistory >> removedNumberOfStatements [ - - - - ^self - lookUpPropertyNamed: #removedNumberOfStatements - computedAs: [self removedPropertyNamed: #numberOfStatements] -] - -{ #category : #properties } -HismoClassHistory >> stabilityOfNumberOfAttributes [ - - - - ^self - lookUpPropertyNamed: #stabilityOfNumberOfAttributes - computedAs: [self stabilityOfPropertyNamed: #numberOfAttributes] -] - -{ #category : #properties } -HismoClassHistory >> stabilityOfNumberOfMethods [ - - - - ^self - lookUpPropertyNamed: #stabilityOfNumberOfMethods - computedAs: [self stabilityOfPropertyNamed: #numberOfMethods] -] - -{ #category : #'public interface' } -HismoClassHistory >> subHierarchy [ - - | hierarchy | - hierarchy := IdentitySet new. - self directSubHistories - do: - [:each | - hierarchy add: each. - hierarchy addAll: each subHierarchy]. - ^hierarchy -] - -{ #category : #view } -HismoClassHistory >> viewEvolution [ - - | view | - view := RTMondrian new. - self viewEvolutionOn: view. - ^ view open -] - -{ #category : #view } -HismoClassHistory >> viewEvolutionOn: mondrian [ - mondrian shape rectangle - width: #numberOfAttributes; - height: #numberOfMethods; - linearFillColor: #numberOfLinesOfCode within: (self versions collect: #versionEntity). - mondrian nodes: (self versions collect: #versionEntity). -] diff --git a/src-archive/Moose-Hismo/HismoClassHistoryGroup.class.st b/src-archive/Moose-Hismo/HismoClassHistoryGroup.class.st deleted file mode 100644 index 8c7042064..000000000 --- a/src-archive/Moose-Hismo/HismoClassHistoryGroup.class.st +++ /dev/null @@ -1,152 +0,0 @@ -Class { - #name : #HismoClassHistoryGroup, - #superclass : #HismoHistoryGroup, - #category : #'Moose-Hismo' -} - -{ #category : #meta } -HismoClassHistoryGroup class >> annotation [ - - -] - -{ #category : #'ui support' } -HismoClassHistoryGroup >> emptyNodeOn: aView [ - - aView shape rectangle color: Color transparent; size: 5. - ^ aView node: ''. -] - -{ #category : #cochange } -HismoClassHistoryGroup >> historiesThatChangedLOCTogether [ - - | fca | - fca := MalFormalContext new. - fca - with: self - using: #yourself - using: [:each | each referenceVersionsThatChangedPropertyNamed: #WLOC]. - ^fca concepts -] - -{ #category : #cochange } -HismoClassHistoryGroup >> parallelInheritancePatterns [ - - | patterns toRemove | - patterns := self - coChangePatternsUsing: - [:each | each referenceVersionsThatChangedPropertyNamed: #WNOC]. - patterns - do: - [:each | - toRemove := OrderedCollection new. - each histories - do: - [:eachHistory | - (each histories - anySatisfy: - [:eachOtherHistory | eachHistory subHierarchy includes: eachOtherHistory]) - ifTrue: [toRemove addLast: eachHistory]]. - each histories removeAll: toRemove]. - ^patterns select: [:each | each histories size > 2] -] - -{ #category : #cochange } -HismoClassHistoryGroup >> parallelSemantics [ - - ^self - coChangePatternsUsing: - [:eachHistory | - (eachHistory select: [:each | each additionOfNumberOfMethods > 0]) - collect: [:each | each referenceVersion]] -] - -{ #category : #cochange } -HismoClassHistoryGroup >> shotgunSurgeryPatterns [ - - ^self - coChangePatternsUsing: - [:eachHistory | - (eachHistory - select: - [:each | - each evolutionOfNumberOfMethods isZero - and: [each evolutionOfNumberOfStatements > 0]]) - collect: [:each | each referenceVersion]] -] - -{ #category : #view } -HismoClassHistoryGroup >> viewEvolutionMatrix [ - | view | - view := RTMondrian new. - self viewEvolutionMatrixOn: view. - ^ view openWithToolbarEntitled: 'Evolution Matrix' -] - -{ #category : #view } -HismoClassHistoryGroup >> viewEvolutionMatrixOn: view [ - | temp y x matrix | - - matrix := Matrix rows: self size columns: self referenceHistory size. - temp := self sorted: [:a :b | a first referenceVersion < b first referenceVersion]. - y := 1. - temp - do: [ :eachHistory | - x := 1. - eachHistory - completeHistoryDo: [ :eachVersion | - view shape rectangle - width: #numberOfLinesOfCode; - height: #numberOfMethods. - matrix at: y at: x put: (view node: eachVersion). - x := x + 1 ] - ifNotPresent: [ :zzz | - matrix at: y at: x put: (self emptyNodeOn: view). - x := x + 1 ]. - y := y + 1 ]. - view layout cell lineItemsCount: matrix columnCount; gapSize: 3; leftCentered. -] - -{ #category : #view } -HismoClassHistoryGroup >> viewHierarchyEvolution [ - - - | view | - - view := RTMondrian new. - self viewHierarchyEvolutionOn: view. - ^ view open setLabel: 'Hierarchy evolution' -] - -{ #category : #view } -HismoClassHistoryGroup >> viewHierarchyEvolutionOn: view [ - - view shape rectangle - width: #evolutionOfNumberOfMethods; - height: [ :each | each evolutionOfNumberOfLinesOfCode / 8 ]; - fillColor: [ :each | each isRemoved - ifTrue: [Color cyan] - ifFalse: [(RTNColorLinearNormalizer - inContext: [ :x | self ] - withCommand: [ :entity | entity age ]) - lowColor: Color veryVeryLightGray; - highColor: Color black; - rtValue: each ] ]. - view nodes: self. - - view shape line - color: [ :each | each value isRemoved - ifTrue: [ Color cyan ] - ifFalse: [ (RTNColorLinearNormalizer - inContext: [ :x | self ] - withCommand: [ :entity | entity value age ]) - lowColor: Color veryVeryLightGray; - highColor: Color black; - rtValue: each ] ]. - view - edges - source: self referenceHistory allInheritanceDefinitionHistories - connectFrom: #superHistory - to: #subHistory. - view layout tree. -] diff --git a/src-archive/Moose-Hismo/HismoClassVersion.class.st b/src-archive/Moose-Hismo/HismoClassVersion.class.st deleted file mode 100644 index 609259918..000000000 --- a/src-archive/Moose-Hismo/HismoClassVersion.class.st +++ /dev/null @@ -1,57 +0,0 @@ -Class { - #name : #HismoClassVersion, - #superclass : #HismoEntityVersion, - #category : #'Moose-Hismo' -} - -{ #category : #meta } -HismoClassVersion class >> annotation [ - - -] - -{ #category : #properties } -HismoClassVersion >> additionOfNumberOfMethods [ - -" " - - - - - ^self additionOfPropertyNamed: #additionOfNumberOfMethods -] - -{ #category : #properties } -HismoClassVersion >> evolutionOfCyclomaticComplexity [ - - - - "Check: CyclomaticComplexity is not applied to classes, just to methods" - - ^self evolutionOfPropertyNamed: #evolutionOfCyclomaticComplexity -] - -{ #category : #properties } -HismoClassVersion >> evolutionOfNumberOfMethods [ - -" " - - - - - ^self evolutionOfPropertyNamed: #evolutionOfNumberOfMethods -] - -{ #category : #properties } -HismoClassVersion >> evolutionOfNumberOfStatements [ - -" " - - - - - ^self evolutionOfPropertyNamed: #evolutionOfNumberOfStatements -] diff --git a/src-archive/Moose-Hismo/HismoCoChangeHistory.class.st b/src-archive/Moose-Hismo/HismoCoChangeHistory.class.st deleted file mode 100644 index a8f62d687..000000000 --- a/src-archive/Moose-Hismo/HismoCoChangeHistory.class.st +++ /dev/null @@ -1,55 +0,0 @@ -Class { - #name : #HismoCoChangeHistory, - #superclass : #HismoAbstractHistory, - #instVars : [ - 'history1', - 'history2' - ], - #category : #'Moose-Hismo' -} - -{ #category : #meta } -HismoCoChangeHistory class >> annotation [ - - - -] - -{ #category : #'instance creation' } -HismoCoChangeHistory class >> withHistory: aHistory withAnotherHistory: anotherHistory [ - - ^(self new) - history1: aHistory; - history2: anotherHistory; - yourself -] - -{ #category : #accessing } -HismoCoChangeHistory >> history1 [ - - ^history1 -] - -{ #category : #accessing } -HismoCoChangeHistory >> history1: anObject [ - - history1 := anObject -] - -{ #category : #accessing } -HismoCoChangeHistory >> history2 [ - - ^history2 -] - -{ #category : #accessing } -HismoCoChangeHistory >> history2: anObject [ - - history2 := anObject -] - -{ #category : #'public interface' } -HismoCoChangeHistory >> isRelatedToHistory: aHistory [ - - ^self history1 = aHistory or: [self history2 = aHistory] -] diff --git a/src-archive/Moose-Hismo/HismoCoChangePattern.class.st b/src-archive/Moose-Hismo/HismoCoChangePattern.class.st deleted file mode 100644 index d27c2b63f..000000000 --- a/src-archive/Moose-Hismo/HismoCoChangePattern.class.st +++ /dev/null @@ -1,68 +0,0 @@ -Class { - #name : #HismoCoChangePattern, - #superclass : #MooseGroup, - #instVars : [ - 'concept', - 'histories', - 'versions' - ], - #category : #'Moose-Hismo' -} - -{ #category : #meta } -HismoCoChangePattern class >> annotation [ - - -] - -{ #category : #accessing } -HismoCoChangePattern >> concept [ - - ^concept -] - -{ #category : #accessing } -HismoCoChangePattern >> concept: anObject [ - - concept := anObject -] - -{ #category : #accessing } -HismoCoChangePattern >> histories [ - - ^histories -] - -{ #category : #accessing } -HismoCoChangePattern >> histories: anObject [ - - histories := anObject -] - -{ #category : #printing } -HismoCoChangePattern >> printOn: aStream [ - - histories ifNotNil: - [ histories - do: [ :aHistory | aStream nextPutAll: aHistory mooseName ] - separatedBy: [ aStream nextPut: $, ] ]. - - versions ifNil: [ ^ super printOn: aStream ]. - - versions - do: - [:each | (each history indexOf: each) gtDisplayOn: aStream] - separatedBy: [aStream nextPutAll: ','] -] - -{ #category : #accessing } -HismoCoChangePattern >> versions [ - - ^versions -] - -{ #category : #accessing } -HismoCoChangePattern >> versions: anObject [ - - versions := anObject -] diff --git a/src-archive/Moose-Hismo/HismoCoChangeVersion.class.st b/src-archive/Moose-Hismo/HismoCoChangeVersion.class.st deleted file mode 100644 index e38307d07..000000000 --- a/src-archive/Moose-Hismo/HismoCoChangeVersion.class.st +++ /dev/null @@ -1,49 +0,0 @@ -Class { - #name : #HismoCoChangeVersion, - #superclass : #HismoAbstractVersion, - #instVars : [ - 'history1', - 'history2' - ], - #category : #'Moose-Hismo' -} - -{ #category : #meta } -HismoCoChangeVersion class >> annotation [ - - -] - -{ #category : #'instance creation' } -HismoCoChangeVersion class >> atReferenceVersion: aVersion [ - - ^(self new) - referenceVersion: aVersion; - yourself -] - -{ #category : #'instance creation' } -HismoCoChangeVersion class >> atReferenceVersion: aVersion withHistory: aHistory [ - - ^(self new) - referenceVersion: aVersion; - history: aHistory; - yourself -] - -{ #category : #'instance creation' } -HismoCoChangeVersion class >> withHistory: aHistory1 withAnotherHistory: aHistory2 withRespectToVersion: aVersion [ - - ^(self new) - referenceVersion: aVersion; - history1: aHistory1; - history2: aHistory2; - yourself -] - -{ #category : #printing } -HismoCoChangeVersion >> versionUniqueName [ - - ^(self history history1 mooseName , '-' , self history history2 mooseName) - asSymbol -] diff --git a/src-archive/Moose-Hismo/HismoEntityVersion.class.st b/src-archive/Moose-Hismo/HismoEntityVersion.class.st deleted file mode 100644 index f115b7f46..000000000 --- a/src-archive/Moose-Hismo/HismoEntityVersion.class.st +++ /dev/null @@ -1,254 +0,0 @@ -Class { - #name : #HismoEntityVersion, - #superclass : #HismoAbstractVersion, - #instVars : [ - 'versionEntity', - 'referenceVersion' - ], - #category : #'Moose-Hismo' -} - -{ #category : #meta } -HismoEntityVersion class >> annotation [ - - -] - -{ #category : #'instance creation' } -HismoEntityVersion class >> with: aVersionEntity inHistory: aHistory [ - - ^self with: aVersionEntity inHistory: aHistory withReferenceVersion: nil -] - -{ #category : #'instance creation' } -HismoEntityVersion class >> with: aVersionEntity inHistory: aHistory withReferenceVersion: aReferenceVersion [ - | classes res wantedTypeName | - - wantedTypeName := (aVersionEntity mooseDescription name , 'Version') asSymbol. - classes := HismoEntityVersion allSubclasses select: [ :each | ((each name) removePrefix: 'Hismo') asSymbol = wantedTypeName ]. - res := classes size = 1 - ifFalse: [ HismoEntityVersion new ] - ifTrue: [ classes asArray first new ]. - ^ res initialize - versionEntity: aVersionEntity; - history: aHistory; - referenceVersion: aReferenceVersion; - yourself -] - -{ #category : #comparing } -HismoEntityVersion >> < aVersion [ - - ^(self history indexOf: self) < (self history indexOf: aVersion) -] - -{ #category : #comparing } -HismoEntityVersion >> <= aVersion [ - - ^(self history indexOf: self) <= (self history indexOf: aVersion) -] - -{ #category : #comparing } -HismoEntityVersion >> = aMooseModelOrVersion [ - - ^self versionEntity == aMooseModelOrVersion versionEntity -] - -{ #category : #comparing } -HismoEntityVersion >> > aVersion [ - - ^(self history indexOf: self) > (self history indexOf: aVersion) -] - -{ #category : #comparing } -HismoEntityVersion >> >= aVersion [ - - ^(self history indexOf: self) >= (self history indexOf: aVersion) -] - -{ #category : #properties } -HismoEntityVersion >> addedToLastVersionPropertyNamed: aPropertyName [ - - | current previous | - self previousVersion ifNil: [^0]. - current := self propertyNamed: aPropertyName. - previous := self previousVersion propertyNamed: aPropertyName. - ^0 max: current - previous -] - -{ #category : #properties } -HismoEntityVersion >> additionOfPropertyNamed: aPropertyName [ - - | current previous | - self previousVersion ifNil: [^0]. - current := self propertyNamed: aPropertyName. - previous := self previousVersion propertyNamed: aPropertyName. - ^0 max: current - previous -] - -{ #category : #'public interface' } -HismoEntityVersion >> allDeclaredProperties [ - - | ownProperties | - ownProperties := super allDeclaredProperties copy. - ownProperties addAll: self versionEntity allDeclaredProperties. - ^ownProperties -] - -{ #category : #properties } -HismoEntityVersion >> changeSizeFromLastVersionPropertyNamed: aPropertyName [ - - | current previous | - self previousVersion ifNil: [^0]. - current := self propertyNamed: aPropertyName. - previous := self previousVersion propertyNamed: aPropertyName. - ^current - previous -] - -{ #category : #'public interface' } -HismoEntityVersion >> changedFromPrevious: aBlock [ - "returns true if the block returns different results when compared with the previous version" - - ^self previousVersion isNil not - and: [(aBlock value: self previousVersion) ~= (aBlock value: self)] -] - -{ #category : #'public interface' } -HismoEntityVersion >> changedPropertyNamed: aVersionProperty [ - "returns true is aVersionProperty changed as compared with the previous version" - - ^self previousVersion isNil not - and: - [(self previousVersion propertyNamed: aVersionProperty) - ~= (self propertyNamed: aVersionProperty)] -] - -{ #category : #'error handling' } -HismoEntityVersion >> doesNotUnderstand: aMessage [ - - ^self versionEntity - perform: aMessage selector - withArguments: aMessage arguments -] - -{ #category : #properties } -HismoEntityVersion >> evolutionOfPropertyNamed: aPropertyName [ - - ^(self changeSizeFromLastVersionPropertyNamed: aPropertyName) abs -] - -{ #category : #printing } -HismoEntityVersion >> gtDisplayOn: stream [ - - ((self referenceVersion isNil or: [ self referenceVersion versionEntity isNil ]) - or: [ self versionEntity isNil ]) - ifTrue: [ ^ super gtDisplayOn: stream ]. - - stream - nextPutAll: self referenceVersion versionEntity name; - nextPutAll: ' - '. - self versionEntity gtDisplayOn: stream -] - -{ #category : #comparing } -HismoEntityVersion >> hash [ - - ^self versionEntity hash -] - -{ #category : #testing } -HismoEntityVersion >> isStub [ - ^ self versionEntity isStub -] - -{ #category : #'public interface' } -HismoEntityVersion >> menu [ - - | menu | - menu := super menu. - menu addItemLabel: self versionEntity mooseDescription name. - menu menuItems last submenu: self versionEntity menu. - ^menu -] - -{ #category : #'public interface' } -HismoEntityVersion >> mooseNameOn: stream [ - - (self referenceVersion isNil or: [ self versionEntity ]) - ifTrue: [ ^ super mooseNameOn: stream ]. - stream nextPutAll: (self referenceVersion name , ' - ' , self versionEntity mooseName) -] - -{ #category : #'public interface' } -HismoEntityVersion >> name [ - self referenceVersion ifNil: [ ^ nil ]. - - ^self referenceVersion versionEntity name , ' - ' - , self versionEntity name -] - -{ #category : #printing } -HismoEntityVersion >> printOn: aStream [ - aStream - nextPutAll: self class name; - nextPutAll: ' with '; - nextPutAll: self versionEntity printString. - self referenceVersion ifNotNil: [ :rv | aStream - nextPutAll: ' ('; - nextPutAll: rv name; - nextPutAll: ')'] -] - -{ #category : #'public interface' } -HismoEntityVersion >> propertyNamed: aPropertyName [ - - | versionEntityProperty | - versionEntityProperty := self versionEntity propertyNamed: aPropertyName. - ^versionEntityProperty isNil - ifFalse: [versionEntityProperty] - ifTrue: [super propertyNamed: aPropertyName] -] - -{ #category : #'public interface' } -HismoEntityVersion >> referenceVersion [ - - ^referenceVersion -] - -{ #category : #'public interface' } -HismoEntityVersion >> referenceVersion: aReferenceVersion [ - - referenceVersion := aReferenceVersion. - self resetMooseName -] - -{ #category : #'public interface' } -HismoEntityVersion >> size [ - - ^versionEntity size -] - -{ #category : #accessing } -HismoEntityVersion >> versionEntity [ - - ^versionEntity -] - -{ #category : #accessing } -HismoEntityVersion >> versionEntity: anObject [ - - versionEntity := anObject. - self resetMooseName -] - -{ #category : #'public interface' } -HismoEntityVersion >> versionName [ - - ^self versionEntity name -] - -{ #category : #'public interface' } -HismoEntityVersion >> versionUniqueName [ - - ^self versionEntity historicalUniqueName -] diff --git a/src-archive/Moose-Hismo/HismoFileHistory.class.st b/src-archive/Moose-Hismo/HismoFileHistory.class.st deleted file mode 100644 index 4cc95dcdc..000000000 --- a/src-archive/Moose-Hismo/HismoFileHistory.class.st +++ /dev/null @@ -1,12 +0,0 @@ -Class { - #name : #HismoFileHistory, - #superclass : #HismoAbstractHistory, - #category : #'Moose-Hismo' -} - -{ #category : #meta } -HismoFileHistory class >> annotation [ - - - -] diff --git a/src-archive/Moose-Hismo/HismoFolderHistory.class.st b/src-archive/Moose-Hismo/HismoFolderHistory.class.st deleted file mode 100644 index 05c536550..000000000 --- a/src-archive/Moose-Hismo/HismoFolderHistory.class.st +++ /dev/null @@ -1,12 +0,0 @@ -Class { - #name : #HismoFolderHistory, - #superclass : #HismoAbstractHistory, - #category : #'Moose-Hismo' -} - -{ #category : #meta } -HismoFolderHistory class >> annotation [ - - - -] diff --git a/src-archive/Moose-Hismo/HismoHistoryGroup.class.st b/src-archive/Moose-Hismo/HismoHistoryGroup.class.st deleted file mode 100644 index fa4aef390..000000000 --- a/src-archive/Moose-Hismo/HismoHistoryGroup.class.st +++ /dev/null @@ -1,544 +0,0 @@ -" -A HistoryGroup is a collection of histories. It offers different traversals and special selections. It also behaves as a history (i.e., a HistoryGroup is a History of a Group). - -Instance Variables: - versions description of versions - - -" -Class { - #name : #HismoHistoryGroup, - #superclass : #MooseGroup, - #instVars : [ - 'versions' - ], - #category : #'Moose-Hismo' -} - -{ #category : #meta } -HismoHistoryGroup class >> annotation [ - - -] - -{ #category : #'instance creation' } -HismoHistoryGroup class >> withAll: collection [ - - | common wantedClass wantedType | - ^ self = HismoHistoryGroup - ifTrue: [ - common := collection commonSuperclass. - wantedType := (common name, 'Group') asSymbol. - wantedClass := self allSubclasses detect: [:each | each name = wantedType ] ifNone: [HismoHistoryGroup]. - self withKnownType: wantedClass withAll: collection ] - ifFalse: [ self withKnownType: self withAll: collection ] -] - -{ #category : #'public interface' } -HismoHistoryGroup >> = aHistoryGroup [ - - | aHistoryCollection anotherHistoryCollection | - (self class = aHistoryGroup class) ifFalse: [^ false]. - aHistoryCollection := self referenceVersions. - anotherHistoryCollection := aHistoryGroup referenceVersions. - aHistoryCollection size = anotherHistoryCollection size ifFalse: [^false]. - aHistoryCollection - do: [:each | (anotherHistoryCollection includes: each) ifFalse: [^false]]. - ^true -] - -{ #category : #'public interface' } -HismoHistoryGroup >> at: aHistoryName ifAbsentPut: aBlock [ - - | wantedHistory matchingHistories | - matchingHistories := self entities - select: [:each | each mooseName = aHistoryName]. - matchingHistories isEmpty - ifTrue: - [wantedHistory := aBlock value. - self add: wantedHistory. - self resetVersions] - ifFalse: [wantedHistory := matchingHistories first]. - ^wantedHistory -] - -{ #category : #'public interface' } -HismoHistoryGroup >> atReferenceVersion: aReferenceVersion [ - - ^(self versions - select: [:each | each referenceVersion = aReferenceVersion]) first -] - -{ #category : #private } -HismoHistoryGroup >> changeTypeToDefaultType [ - self changeTypeTo: HismoHistoryGroup -] - -{ #category : #'co-change' } -HismoHistoryGroup >> coChangeConceptsUsing: aBlock [ - - | fca | - fca := MalFormalContext new. - fca with: self using: #yourself using: aBlock. - ^fca concepts -] - -{ #category : #'co-change' } -HismoHistoryGroup >> coChangePatternsUsing: aBlock [ - | concepts patterns | - concepts := self coChangeConceptsUsing: aBlock. - patterns := concepts select: [ :each | each relevantObjects size > 1 and: [ each attributes size > 2 ] ]. - ^ patterns collect: - [ :each | - HismoCoChangePattern new - histories: (each relevantObjects collect: #value); - versions: (each attributes collect: #value); - concept: each; - yourself ] -] - -{ #category : #'public interface' } -HismoHistoryGroup >> completeHistoryCollect: aBlock ifNotPresent: anotherBlock [ - - | data | - data := OrderedCollection new. - self first referenceHistory versions - do: - [:eachReferenceVersion | - (self existsInReferenceVersion: eachReferenceVersion) - ifTrue: - [data - addLast: - (aBlock value: (self atReferenceVersion: eachReferenceVersion))] - ifFalse: [data addLast: anotherBlock value]]. - ^data -] - -{ #category : #'public interface' } -HismoHistoryGroup >> createEmptyGroup [ - - ^self class new -] - -{ #category : #private } -HismoHistoryGroup >> createEmptyHistory [ - ^ HismoAbstractHistory new -] - -{ #category : #'yesterday weather' } -HismoHistoryGroup >> detailedYWForYesterday: yesterdayExpression forTomorrow: tomorrowExpression [ - - ^ ( 3 to: self versions size ) collect: [:index | | yesterday tomorrow | - yesterday := self - selectByExpression: yesterdayExpression - appliedFromVersionIndex: 1 - toVersionIndexAndPresentInIt: index - 1. - tomorrow := self - selectByExpression: tomorrowExpression - appliedFromVersionIndexAndPresentInIt: index - 1 - toVersionIndex: self versions size. - yesterday intersectWith: tomorrow] -] - -{ #category : #'public interface' } -HismoHistoryGroup >> entityType [ - - | types | - self isEmpty ifTrue: [^#EmptyHistoryGroup]. - types := (self entities collect: [:each | each entityType]) asSet asOrderedCollection. - ^types size = 1 - ifTrue: [(types first asString , 'Group') asSymbol] - ifFalse: [#HeterogeneousHistoryGroup] -] - -{ #category : #'public interface' } -HismoHistoryGroup >> existsInReferenceVersion: aReferenceVersion [ - - ^(self versions - select: [:each | each referenceVersion = aReferenceVersion]) isEmpty not -] - -{ #category : #'public interface' } -HismoHistoryGroup >> historyNamed: aName [ - - ^self - at: aName - ifAbsentPut: [self createEmptyHistory] -] - -{ #category : #'public interface' } -HismoHistoryGroup >> intersectWith: aGroup [ - - ^self select: [:each | aGroup includes: each] -] - -{ #category : #'public interface' } -HismoHistoryGroup >> referenceHistory [ - - ^self isEmpty - ifTrue: [nil] - ifFalse: [self first referenceHistory] -] - -{ #category : #'public interface' } -HismoHistoryGroup >> referenceVersions [ - - | versionsNamesSet | - versionsNamesSet := Set new. - self entities - do: - [:eachHistory | - | tempVersionsNames | - tempVersionsNames := eachHistory versions - collect: [:eachVersion | eachVersion referenceVersion]. - versionsNamesSet addAll: tempVersionsNames]. - ^versionsNamesSet asSortedCollection -] - -{ #category : #'public interface' } -HismoHistoryGroup >> resetVersions [ - - versions := nil -] - -{ #category : #'enumerating by reference version' } -HismoHistoryGroup >> select: aBlock appliedForReferenceVersionCollection: aReferenceVersionCollection [ - - | selectedGroup selectedGroupItemNames | - selectedGroup := (self selectFromReferenceVersionCollection: - aReferenceVersionCollection) select: aBlock. - selectedGroupItemNames := selectedGroup collect: [:each | each mooseName]. - ^self select: [:each | selectedGroupItemNames includes: each mooseName] -] - -{ #category : #'enumerating by reference version' } -HismoHistoryGroup >> selectBornIn: aVersion [ - - ^self - select: [:eachHistory | eachHistory first referenceVersion = aVersion] -] - -{ #category : #'enumerating by reference version' } -HismoHistoryGroup >> selectBornIn: birthVersion where: birthRelationBlock andLastSeenIn: deathVersion where: deathRelationBlock [ - "This is a complicated message... and probably needs renaming" - - ^self - select: - [:eachHistory | - (birthRelationBlock - value: eachHistory first referenceVersion - value: birthVersion) - and: - [deathRelationBlock - value: eachHistory last referenceVersion - value: deathVersion]] -] - -{ #category : #'enumerating by reference version' } -HismoHistoryGroup >> selectBornLaterThan: aVersion [ - - ^self - select: [:eachHistory | eachHistory first referenceVersion > aVersion] -] - -{ #category : #'enumerating by reference version' } -HismoHistoryGroup >> selectBornLaterThanOrIn: aVersion [ - - ^self - selectBornIn: aVersion - where: [:v1 :v2 | v1 >= v2] - andLastSeenIn: aVersion - where: [:v1 :v2 | v1 >= v2] -] - -{ #category : #'enumerating by reference version' } -HismoHistoryGroup >> selectBornPriorTo: aVersion [ - - ^self - select: [:eachHistory | eachHistory first referenceVersion < aVersion] -] - -{ #category : #'enumerating by reference version' } -HismoHistoryGroup >> selectBornPriorToOrIn: aVersion [ - - ^self - select: [:eachHistory | eachHistory first referenceVersion <= aVersion] -] - -{ #category : #'enumerating by version index' } -HismoHistoryGroup >> selectByExpression: anExpression appliedFromFirstVersionIndexToVersionIndex: anEndIndex [ - - | selectedGroup selectedGroupItemNames | - selectedGroup := (self - selectFromVersionIndexCollection: (1 to: anEndIndex) asOrderedCollection) - selectByExpression: anExpression. - selectedGroupItemNames := selectedGroup collect: [:each | each mooseName]. - ^self select: [:each | selectedGroupItemNames includes: each mooseName] -] - -{ #category : #'enumerating by version index' } -HismoHistoryGroup >> selectByExpression: anExpression appliedFromVersionIndex: aStartIndex [ - - | selectedGroup selectedGroupItemNames | - selectedGroup := (self - selectFromVersionIndexCollection: - (aStartIndex to: self versions size) asOrderedCollection) - selectByExpression: anExpression. - selectedGroupItemNames := selectedGroup collect: [:each | each mooseName]. - ^self select: [:each | selectedGroupItemNames includes: each mooseName] -] - -{ #category : #'enumerating by version index' } -HismoHistoryGroup >> selectByExpression: anExpression appliedFromVersionIndex: aStartIndex toVersionIndex: anEndIndex [ - - | selectedGroup selectedGroupItemNames targetGroup | - targetGroup := self - selectFromVersionIndexCollection: - (aStartIndex to: anEndIndex) asOrderedCollection. - selectedGroup := targetGroup selectByExpression: anExpression. - selectedGroupItemNames := selectedGroup collect: [:each | each mooseName]. - ^self select: [:each | selectedGroupItemNames includes: each mooseName] -] - -{ #category : #'enumerating by version index' } -HismoHistoryGroup >> selectByExpression: anExpression appliedFromVersionIndex: aStartIndex toVersionIndexAndPresentInIt: anEndIndex [ - - | selectedGroup selectedGroupItemNames targetGroup | - targetGroup := self selectFromVersionIndexCollectionAndPresentInTheLastSpecifiedVersion: - (aStartIndex to: anEndIndex) asOrderedCollection. - selectedGroup := anExpression value: targetGroup. - selectedGroupItemNames := selectedGroup collect: [:each | each mooseName]. - ^self select: [:each | selectedGroupItemNames includes: each mooseName] -] - -{ #category : #'enumerating by version index' } -HismoHistoryGroup >> selectByExpression: anExpression appliedFromVersionIndexAndPresentInIt: aStartIndex toVersionIndex: anEndIndex [ - - | selectedGroup selectedGroupItemNames targetGroup | - targetGroup := self - selectFromVersionIndexCollectionAndPresentInTheFirstSpecifiedVersion: - (aStartIndex to: anEndIndex) asOrderedCollection. - selectedGroup := anExpression value: targetGroup. - selectedGroupItemNames := selectedGroup collect: [:each | each mooseName]. - ^self select: [:each | selectedGroupItemNames includes: each mooseName] -] - -{ #category : #'enumerating by version index' } -HismoHistoryGroup >> selectByExpression: anExpression forVersionIndex: anIndex [ - - | selectedGroup selectedGroupItemNames | - selectedGroup := (self - selectFromVersionIndexCollection: (1 to: anIndex) asOrderedCollection) - selectByExpression: anExpression. - selectedGroupItemNames := selectedGroup collect: [:each | each mooseName]. - ^self select: [:each | selectedGroupItemNames includes: each mooseName] -] - -{ #category : #'enumerating by reference version' } -HismoHistoryGroup >> selectFromReferenceVersionCollection: aCollection [ - "returns the history made by the specified versions" - - | selectedHistories selectedHistory | - selectedHistories := self createEmptyGroup. - self entities - do: - [:each | - selectedHistory := each selectFromReferenceVersionCollection: aCollection. - selectedHistory isEmpty - ifFalse: - [selectedHistories - at: each mooseName - ifAbsentPut: [selectedHistory]]]. - ^selectedHistories -] - -{ #category : #'enumerating by reference version' } -HismoHistoryGroup >> selectFromReferenceVersionCollection: aCollection andPresentInReferenceVersion: aReferenceVersion [ - "returns the history made by the specified versions" - - | selectedHistories selectedHistory entitiesPresentInTheLastSpecifiedVersion | - selectedHistories := self createEmptyGroup. - entitiesPresentInTheLastSpecifiedVersion := self entities - select: [:each | each referenceVersions includes: aReferenceVersion]. - entitiesPresentInTheLastSpecifiedVersion - do: - [:each | - selectedHistory := each selectFromReferenceVersionCollection: aCollection. - selectedHistory isEmpty - ifFalse: - [selectedHistories - at: each mooseName - ifAbsentPut: [selectedHistory]]]. - ^selectedHistories -] - -{ #category : #'enumerating by reference version' } -HismoHistoryGroup >> selectFromReferenceVersionCollectionAndPresentInTheFirstSpecifiedVersion: aCollection [ - "returns the history made by the specified versions" - - ^self - selectFromReferenceVersionCollection: aCollection - andPresentInReferenceVersion: aCollection first -] - -{ #category : #'enumerating by reference version' } -HismoHistoryGroup >> selectFromReferenceVersionCollectionAndPresentInTheLastSpecifiedVersion: aCollection [ - "returns the history made by the specified versions" - - ^self - selectFromReferenceVersionCollection: aCollection - andPresentInReferenceVersion: aCollection last -] - -{ #category : #'enumerating by version index' } -HismoHistoryGroup >> selectFromVersionIndexCollection: aCollection [ - "returns the history made by the specified range of versions" - - | versionCollection | - versionCollection := OrderedCollection new. - aCollection - do: - [:eachIndex | versionCollection add: (self versions at: eachIndex) referenceVersion]. - ^self selectFromReferenceVersionCollection: versionCollection -] - -{ #category : #'enumerating by version index' } -HismoHistoryGroup >> selectFromVersionIndexCollectionAndPresentInTheFirstSpecifiedVersion: aCollection [ - "returns the history made by the specified range of versions" - - | versionCollection | - versionCollection := OrderedCollection new. - aCollection - do: - [:eachIndex | versionCollection add: (self versions at: eachIndex) referenceVersion]. - ^self - selectFromReferenceVersionCollectionAndPresentInTheFirstSpecifiedVersion: - versionCollection -] - -{ #category : #'enumerating by version index' } -HismoHistoryGroup >> selectFromVersionIndexCollectionAndPresentInTheLastSpecifiedVersion: aCollection [ - "returns the history made by the specified range of versions" - - | versionCollection | - versionCollection := OrderedCollection new. - aCollection do: [:eachIndex | versionCollection add: (self versions at: eachIndex) referenceVersion]. - ^ self selectFromReferenceVersionCollectionAndPresentInTheLastSpecifiedVersion: versionCollection -] - -{ #category : #'enumerating by reference version' } -HismoHistoryGroup >> selectLastSeenIn: aVersion [ - - ^self - select: [:eachHistory | eachHistory last referenceVersion = aVersion] -] - -{ #category : #'enumerating by reference version' } -HismoHistoryGroup >> selectLastSeenLaterThan: aVersion [ - - ^self - select: [:eachHistory | eachHistory last referenceVersion > aVersion] -] - -{ #category : #'enumerating by reference version' } -HismoHistoryGroup >> selectLastSeenLaterThanOrIn: aVersion [ - - ^self - select: [:eachHistory | eachHistory last referenceVersion >= aVersion] -] - -{ #category : #'enumerating by reference version' } -HismoHistoryGroup >> selectLastSeenPriorTo: aVersion [ - - ^self - select: [:eachHistory | eachHistory last referenceVersion < aVersion] -] - -{ #category : #'enumerating by reference version' } -HismoHistoryGroup >> selectLastSeenPriorToOrIn: aVersion [ - - ^self - select: [:eachHistory | eachHistory last referenceVersion <= aVersion] -] - -{ #category : #private } -HismoHistoryGroup >> sourceLanguage [ - - ^self isEmpty not - ifTrue: [self first first referenceModel sourceLanguage asSymbol] - ifFalse: [#''] -] - -{ #category : #'public interface' } -HismoHistoryGroup >> versionAfterReferenceVersion: aReferenceVersion [ - - 1 - to: self versions size - 1 - do: - [:index | - (self versions at: index) referenceVersion = aReferenceVersion - ifTrue: [^self versions at: index + 1]]. - ^nil -] - -{ #category : #'public interface' } -HismoHistoryGroup >> versionPriorToReferenceVersion: aReferenceVersion [ - - 2 - to: self versions size - do: - [:index | - (self versions at: index) referenceVersion = aReferenceVersion - ifTrue: [^self versions at: index - 1]]. - ^nil -] - -{ #category : #'public interface' } -HismoHistoryGroup >> versions [ - versions ifNotNil: [ ^ versions ]. - versions := Dictionary new. - self entities - do: [ :eachHistory | - eachHistory - do: [ :eachVersion | - versions - at: eachVersion referenceVersion - ifAbsentPut: [ HismoEntityVersion with: MooseGroup new inHistory: self withReferenceVersion: eachVersion referenceVersion ]. - (versions at: eachVersion referenceVersion) versionEntity add: eachVersion versionEntity ] ]. - versions := versions keys asSortedCollection collect: [ :eachKey | versions at: eachKey ]. - ^ versions -] - -{ #category : #'enumerating by version index' } -HismoHistoryGroup >> versionsIndexFrom2Do: aBlock [ - - ^2 - to: versions size - do: [:i | aBlock value: i] -] - -{ #category : #view } -HismoHistoryGroup >> viewSimpleEvolutionMatrix [ - | view | - - view := RTMondrian new. - self - do: [:each | each viewSimpleEvolutionMatrixIn: view]. - view layout verticalLine. - ^ view open "setLabel: 'Simple Evolution Matrix'" -] - -{ #category : #'yesterday weather' } -HismoHistoryGroup >> ywForYesterday: yesterdayExpression forTomorrow: tomorrowExpression [ - - | hitsCount | - self versions isEmpty ifTrue: [^0]. - hitsCount := (self detailedYWForYesterday: yesterdayExpression forTomorrow: tomorrowExpression) - inject: 0 - into: - [:sum :each | - each notEmpty - ifTrue: [sum + 1] - ifFalse: [sum]]. - ^hitsCount / (self versions size - 2) -] diff --git a/src-archive/Moose-Hismo/HismoInheritanceDefinitionHistory.class.st b/src-archive/Moose-Hismo/HismoInheritanceDefinitionHistory.class.st deleted file mode 100644 index 9ea07fbfd..000000000 --- a/src-archive/Moose-Hismo/HismoInheritanceDefinitionHistory.class.st +++ /dev/null @@ -1,38 +0,0 @@ -Class { - #name : #HismoInheritanceDefinitionHistory, - #superclass : #HismoAbstractHistory, - #instVars : [ - 'subHistory', - 'superHistory' - ], - #category : #'Moose-Hismo' -} - -{ #category : #meta } -HismoInheritanceDefinitionHistory class >> annotation [ - - - -] - -{ #category : #'public interface' } -HismoInheritanceDefinitionHistory >> subHistory [ - - subHistory isNil - ifTrue: - [subHistory := self referenceHistory allClassHistories - detect: [:each | each mooseName = self first subclass mooseName] - ifNone: [nil]]. - ^subHistory -] - -{ #category : #'public interface' } -HismoInheritanceDefinitionHistory >> superHistory [ - - superHistory isNil - ifTrue: - [superHistory := self referenceHistory allClassHistories - detect: [:each | each mooseName = self first superclass mooseName] - ifNone: [nil]]. - ^superHistory -] diff --git a/src-archive/Moose-Hismo/HismoInvocationHistory.class.st b/src-archive/Moose-Hismo/HismoInvocationHistory.class.st deleted file mode 100644 index d099903ca..000000000 --- a/src-archive/Moose-Hismo/HismoInvocationHistory.class.st +++ /dev/null @@ -1,61 +0,0 @@ -Class { - #name : #HismoInvocationHistory, - #superclass : #HismoAbstractHistory, - #instVars : [ - 'candidateHistories', - 'invokedByHistory', - 'receivingClassHistory' - ], - #category : #'Moose-Hismo' -} - -{ #category : #meta } -HismoInvocationHistory class >> annotation [ - - - -] - -{ #category : #'public interface' } -HismoInvocationHistory >> candidateHistories [ - - candidateHistories isNil - ifTrue: - [candidateHistories := self first candidates - collect: - [:eachCandidate | - (self referenceHistory allMethodHistories - select: [:each | each mooseName = eachCandidate mooseName]) first]]. - ^candidateHistories -] - -{ #category : #'public interface' } -HismoInvocationHistory >> invokedByHistory [ - - invokedByHistory isNil - ifTrue: - [invokedByHistory := (self referenceHistory allMethodHistories - select: [:each | each mooseName = self first invokedBy mooseName]) - first]. - ^invokedByHistory -] - -{ #category : #'public interface' } -HismoInvocationHistory >> invokes [ - - ^self first invokes -] - -{ #category : #'public interface' } -HismoInvocationHistory >> receivingClassHistory [ - - receivingClassHistory isNil - ifTrue: - [receivingClassHistory := self first receivingClass isNil - ifTrue: [nil] - ifFalse: - [(self referenceHistory allClassHistories - select: [:each | each mooseName = self first receivingClass asSymbol]) - first]]. - ^receivingClassHistory -] diff --git a/src-archive/Moose-Hismo/HismoMethodHistory.class.st b/src-archive/Moose-Hismo/HismoMethodHistory.class.st deleted file mode 100644 index 027fbf236..000000000 --- a/src-archive/Moose-Hismo/HismoMethodHistory.class.st +++ /dev/null @@ -1,51 +0,0 @@ -Class { - #name : #HismoMethodHistory, - #superclass : #HismoAbstractHistory, - #instVars : [ - 'containingClassHistory' - ], - #category : #'Moose-Hismo' -} - -{ #category : #meta } -HismoMethodHistory class >> annotation [ - - - -] - -{ #category : #'public interface' } -HismoMethodHistory >> accessControlQualifierVersions [ - - ^self collect: [:each | each accessControlQualifier] -] - -{ #category : #'public interface' } -HismoMethodHistory >> becamePublic [ - - ^self accessControlQualifierVersions first ~= #public - & (self accessControlQualifierVersions last = #public) -] - -{ #category : #accessing } -HismoMethodHistory >> belongsTo [ - "return the classhistory it belongs to" - - containingClassHistory isNil - ifTrue: - [containingClassHistory := (self referenceHistory allClassHistories - select: - [:eachClass | eachClass hasUniqueName: self first versionEntity belongsTo mooseName]) - first]. - ^containingClassHistory -] - -{ #category : #'public interface' } -HismoMethodHistory >> signature [ - "returns the unique name of the history" - - | uName | - uName := #''. - self isEmpty ifFalse: [uName := self first signature]. - ^uName -] diff --git a/src-archive/Moose-Hismo/HismoMethodHistoryGroup.class.st b/src-archive/Moose-Hismo/HismoMethodHistoryGroup.class.st deleted file mode 100644 index b3a060cb4..000000000 --- a/src-archive/Moose-Hismo/HismoMethodHistoryGroup.class.st +++ /dev/null @@ -1,35 +0,0 @@ -Class { - #name : #HismoMethodHistoryGroup, - #superclass : #HismoHistoryGroup, - #category : #'Moose-Hismo' -} - -{ #category : #meta } -HismoMethodHistoryGroup class >> annotation [ - - -] - -{ #category : #'co-change' } -HismoMethodHistoryGroup >> dispersedLogic [ - - ^self - coChangePatternsUsing: - [:eachHistory | - (eachHistory - select: - [:each | - each evolutionOfCyclomaticComplexity isZero - and: [each evolutionOfNumberOfStatements > 0]]) - collect: [:each | each referenceVersion]] -] - -{ #category : #'co-change' } -HismoMethodHistoryGroup >> parallelComplexity [ - - ^self - coChangePatternsUsing: - [:eachHistory | - (eachHistory select: [:each | each additionOfCyclomaticComplexity > 0]) - collect: [:each | each referenceVersion]] -] diff --git a/src-archive/Moose-Hismo/HismoMethodVersion.class.st b/src-archive/Moose-Hismo/HismoMethodVersion.class.st deleted file mode 100644 index 76ae0bd6c..000000000 --- a/src-archive/Moose-Hismo/HismoMethodVersion.class.st +++ /dev/null @@ -1,35 +0,0 @@ -Class { - #name : #HismoMethodVersion, - #superclass : #HismoEntityVersion, - #category : #'Moose-Hismo' -} - -{ #category : #meta } -HismoMethodVersion class >> annotation [ - - -] - -{ #category : #versions } -HismoMethodVersion >> additionOfCyclomaticComplexity [ - - - - ^self additionOfPropertyNamed: #additionOfCyclomaticComplexity -] - -{ #category : #versions } -HismoMethodVersion >> evolutionOfCyclomaticComplexity [ - - - - ^self evolutionOfPropertyNamed: #evolutionOfCyclomaticComplexity -] - -{ #category : #versions } -HismoMethodVersion >> evolutionOfNumberOfStatements [ - - - - ^self evolutionOfPropertyNamed: #evolutionOfNumberOfStatements -] diff --git a/src-archive/Moose-Hismo/HismoModelHistory.class.st b/src-archive/Moose-Hismo/HismoModelHistory.class.st deleted file mode 100644 index 745a05329..000000000 --- a/src-archive/Moose-Hismo/HismoModelHistory.class.st +++ /dev/null @@ -1,265 +0,0 @@ -Class { - #name : #HismoModelHistory, - #superclass : #HismoAbstractHistory, - #instVars : [ - 'name' - ], - #category : #'Moose-Hismo' -} - -{ #category : #meta } -HismoModelHistory class >> annotation [ - - - -] - -{ #category : #'instance creation' } -HismoModelHistory class >> withModels: aCollection [ - - | result | - result := self new. - aCollection do: [:each | result addLastVersionForMooseModel: each]. - ^result -] - -{ #category : #initialize } -HismoModelHistory >> addLastVersionForMooseModel: aMooseModel [ - | version | - - version := HismoEntityVersion - with: aMooseModel - inHistory: self. - version referenceVersion: version. - self addLast: version -] - -{ #category : #groups } -HismoModelHistory >> allAttributeHistories [ - - ^ self - allWithType: HismoAttributeHistory - ifAbsentPut: - [ self - computeSubHistoriesWithType: HismoAttributeHistory - computedForEachVersionAs: [ :version | version allAttributes ] - withDescription: 'All Attribute Histories' ] -] - -{ #category : #groups } -HismoModelHistory >> allClassGroups [ - - ^ MooseGroup withAll: - (FAMIXTypeGroup withAll: - ((self versions collect: #versionEntity) "we get the moosemodel" - collect: #allClasses)) -] - -{ #category : #groups } -HismoModelHistory >> allClassHistories [ - - ^ self - allWithType: HismoClassHistory - ifAbsentPut: - [ self - computeSubHistoriesWithType: HismoClassHistory - computedForEachVersionAs: [ :version | version allClasses ] - withDescription: 'All Class Histories' ] -] - -{ #category : #groups } -HismoModelHistory >> allInheritanceDefinitionHistories [ - - ^ self - allWithType: HismoInheritanceDefinitionHistory - ifAbsentPut: - [ self - computeSubHistoriesWithType: HismoInheritanceDefinitionHistory - computedForEachVersionAs: [ :version | version allInheritanceDefinitions ] - withDescription: 'All Inheritance Definition Histories' ] -] - -{ #category : #groups } -HismoModelHistory >> allMethodHistories [ - - ^ self - allWithType: HismoMethodHistory - ifAbsentPut: - [ self - computeSubHistoriesWithType: HismoMethodHistory - computedForEachVersionAs: [ :version | version allMethods ] - withDescription: 'All Method Histories' ] -] - -{ #category : #groups } -HismoModelHistory >> allModels [ - - ^ MooseGroup - withAll: (self versions collect: #versionEntity) - withDescription: 'All models' -] - -{ #category : #groups } -HismoModelHistory >> allNamespaceHistories [ - - ^ self - allWithType: HismoNamespaceHistory - ifAbsentPut: - [ self - computeSubHistoriesWithType: HismoNamespaceHistory - computedForEachVersionAs: [ :version | version allNamespaces ] - withDescription: 'All Namespace Histories' ] -] - -{ #category : #groups } -HismoModelHistory >> allPackageHistories [ - - ^ self - allWithType: HismoPackageHistory - ifAbsentPut: - [ self - computeSubHistoriesWithType: HismoPackageHistory - computedForEachVersionAs: [ :version | version allPackages ] - withDescription: 'All Package Histories' ] -] - -{ #category : #groups } -HismoModelHistory >> allWithType: aSmalltalkClass [ - ^ self allWithType: aSmalltalkClass ofGroupClass: HismoHistoryGroup -] - -{ #category : #groups } -HismoModelHistory >> allWithType: aMetaDesription ifAbsentPut: aBlock [ - - ^self historyDictionary - at: aMetaDesription name - ifAbsentPut: aBlock -] - -{ #category : #actions } -HismoModelHistory >> delete [ - "Actions to delete a model. This is accessible from the Moose Panel" - - - | wantsToDelete | - wantsToDelete := UIManager default confirm: 'Are you sure to want to delete ', self mooseName printString, '?'. - wantsToDelete ifFalse: [ ^ self ]. - - self remove -] - -{ #category : #properties } -HismoModelHistory >> earliestEvolutionOfNumberOfAttributes [ - - ^ self allClassHistories sumNumbers: #earliestEvolutionOfNumberOfAttributes -] - -{ #category : #properties } -HismoModelHistory >> earliestEvolutionOfNumberOfLinesOfCode [ - - ^ self allClassHistories sumNumbers: #earliestEvolutionOfNumberOfLinesOfCode -] - -{ #category : #properties } -HismoModelHistory >> earliestEvolutionOfNumberOfMethods [ - - ^ self allClassHistories sumNumbers: #earliestEvolutionOfNumberOfMethods -] - -{ #category : #properties } -HismoModelHistory >> earliestEvolutionOfNumberOfStatements [ - - ^ self allClassHistories sumNumbers: #earliestEvolutionOfNumberOfStatements -] - -{ #category : #properties } -HismoModelHistory >> evolutionOfNumberOfAttributes [ - - ^ self allClassHistories sumNumbers: #evolutionOfNumberOfAttributes -] - -{ #category : #properties } -HismoModelHistory >> evolutionOfNumberOfLinesOfCode [ - - ^ self allClassHistories sumNumbers: #evolutionOfNumberOfLinesOfCode -] - -{ #category : #properties } -HismoModelHistory >> evolutionOfNumberOfMethods [ - - ^ self allClassHistories sumNumbers: #evolutionOfNumberOfMethods -] - -{ #category : #properties } -HismoModelHistory >> evolutionOfNumberOfStatements [ - - ^ self allClassHistories sumNumbers: #evolutionOfNumberOfStatements -] - -{ #category : #accessing } -HismoModelHistory >> historyDictionary [ - - ^self entityCache -] - -{ #category : #initialize } -HismoModelHistory >> initialize [ - - super initialize. - referenceHistory := self. - name := #'Model History' -] - -{ #category : #'public interface' } -HismoModelHistory >> install [ - - ^MooseModel root add: self -] - -{ #category : #properties } -HismoModelHistory >> latestEvolutionOfNumberOfAttributes [ - - ^ self allClassHistories sumNumbers: #latestEvolutionOfNumberOfAttributes -] - -{ #category : #properties } -HismoModelHistory >> latestEvolutionOfNumberOfLinesOfCode [ - - ^ self allClassHistories sumNumbers: #latestEvolutionOfNumberOfLinesOfCode -] - -{ #category : #properties } -HismoModelHistory >> latestEvolutionOfNumberOfMethods [ - - ^ self allClassHistories sumNumbers: #latestEvolutionOfNumberOfMethods -] - -{ #category : #properties } -HismoModelHistory >> latestEvolutionOfNumberOfStatements [ - - ^ self allClassHistories sumNumbers: #latestEvolutionOfNumberOfStatements -] - -{ #category : #'public interface' } -HismoModelHistory >> mooseNameOn: aStream [ - - aStream nextPutAll: self name -] - -{ #category : #'public interface' } -HismoModelHistory >> name [ - - ^name -] - -{ #category : #accessing } -HismoModelHistory >> name: aName [ - - name := aName. - self resetMooseName -] - -{ #category : #'public interface' } -HismoModelHistory >> remove [ - MooseModel root remove: self -] diff --git a/src-archive/Moose-Hismo/HismoNamespaceHistory.class.st b/src-archive/Moose-Hismo/HismoNamespaceHistory.class.st deleted file mode 100644 index 9e33c0eb9..000000000 --- a/src-archive/Moose-Hismo/HismoNamespaceHistory.class.st +++ /dev/null @@ -1,92 +0,0 @@ -Class { - #name : #HismoNamespaceHistory, - #superclass : #HismoAbstractHistory, - #instVars : [ - 'classHistories', - 'containingNamespaceHistory', - 'namespaceHistories' - ], - #category : #'Moose-Hismo' -} - -{ #category : #meta } -HismoNamespaceHistory class >> annotation [ - - - -] - -{ #category : #accessing } -HismoNamespaceHistory >> belongsTo [ - "return the namespacehistory it belongs to" - - ^containingNamespaceHistory - ifNil: - [self first versionEntity belongsTo isNil - ifFalse: - [containingNamespaceHistory := (self referenceHistory allNamespaceHistories - select: - [:eachClass | eachClass hasUniqueName: self first versionEntity belongsTo mooseName]) - first] - ifTrue: [nil]] -] - -{ #category : #accessing } -HismoNamespaceHistory >> classHistories [ - - classHistories isNil - ifTrue: - [classHistories := self referenceHistory allClassHistories - select: [:each | each belongsTo = self]]. - ^classHistories -] - -{ #category : #accessing } -HismoNamespaceHistory >> classHistoriesPresentInTheLastVersion [ - - ^self computeClassHistoriesPresentInTheLastVersion -] - -{ #category : #private } -HismoNamespaceHistory >> computeClassHistories [ - "self computeClassHistories" - | theClassHistories | - theClassHistories := HismoClassHistoryGroup new. - versions do: - [ :eachVersion | - eachVersion classesDo: [ :eachClass | (theClassHistories at: eachClass mooseName) addLast: eachClass ] ]. - ^ theClassHistories -] - -{ #category : #private } -HismoNamespaceHistory >> computeClassHistoriesPresentInTheLastVersion [ - "self computeClassHistories" - - ^self computeClassHistories - select: - [:each | each versions last referenceVersion = self versions last referenceVersion] -] - -{ #category : #properties } -HismoNamespaceHistory >> evolutionOfNumberOfClasses [ - -" " - - - - - ^self - lookUpPropertyNamed: #evolutionOfNumberOfClasses - computedAs: [self evolutionOfPropertyNamed: #numberOfClasses] -] - -{ #category : #accessing } -HismoNamespaceHistory >> namespaceHistories [ - - ^namespaceHistories - ifNil: - [namespaceHistories := self referenceHistory allNamespaceHistories - select: [:each | each belongsTo = self]] -] diff --git a/src-archive/Moose-Hismo/HismoNamespaceHistoryGroup.class.st b/src-archive/Moose-Hismo/HismoNamespaceHistoryGroup.class.st deleted file mode 100644 index 961e75d6a..000000000 --- a/src-archive/Moose-Hismo/HismoNamespaceHistoryGroup.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #HismoNamespaceHistoryGroup, - #superclass : #HismoHistoryGroup, - #category : #'Moose-Hismo' -} - -{ #category : #meta } -HismoNamespaceHistoryGroup class >> annotation [ - - -] - -{ #category : #'co-change' } -HismoNamespaceHistoryGroup >> parallelSemantics [ - - ^self - coChangePatternsUsing: - [:eachHistory | - (eachHistory - select: - [:each | - each additionOfNumberOfMethods > 0 - and: [each evolutionOfNumberOfClasses isZero]]) - collect: [:each | each referenceVersion]] -] diff --git a/src-archive/Moose-Hismo/HismoNamespaceVersion.class.st b/src-archive/Moose-Hismo/HismoNamespaceVersion.class.st deleted file mode 100644 index 3dcce2a69..000000000 --- a/src-archive/Moose-Hismo/HismoNamespaceVersion.class.st +++ /dev/null @@ -1,27 +0,0 @@ -Class { - #name : #HismoNamespaceVersion, - #superclass : #HismoEntityVersion, - #category : #'Moose-Hismo' -} - -{ #category : #meta } -HismoNamespaceVersion class >> annotation [ - - -] - -{ #category : #properties } -HismoNamespaceVersion >> additionOfNumberOfMethods [ - - - - ^self additionOfPropertyNamed: #NOM -] - -{ #category : #properties } -HismoNamespaceVersion >> evolutionOfNumberOfClasses [ - - - - ^self evolutionOfPropertyNamed: #NOCls -] diff --git a/src-archive/Moose-Hismo/HismoPackageHistory.class.st b/src-archive/Moose-Hismo/HismoPackageHistory.class.st deleted file mode 100644 index 5e4392875..000000000 --- a/src-archive/Moose-Hismo/HismoPackageHistory.class.st +++ /dev/null @@ -1,50 +0,0 @@ -Class { - #name : #HismoPackageHistory, - #superclass : #HismoAbstractHistory, - #instVars : [ - 'classHistories', - 'packageHistories', - 'containingPackageHistory' - ], - #category : #'Moose-Hismo' -} - -{ #category : #meta } -HismoPackageHistory class >> annotation [ - - - -] - -{ #category : #accessing } -HismoPackageHistory >> classHistories [ - classHistories isNil ifTrue: - [ classHistories := self referenceHistory allClassHistories select: [ :each | each parentPackage = self ] ]. - ^ classHistories -] - -{ #category : #accessing } -HismoPackageHistory >> packageHistories [ - packageHistories isNil ifTrue: - [ packageHistories := self referenceHistory allPackageHistories select: [ :each | each parentPackage = self ] ]. - ^ packageHistories -] - -{ #category : #accessing } -HismoPackageHistory >> packagedIn [ - - self deprecated: 'Call parentPackage instead of packagedIn'. - ^ self parentPackage -] - -{ #category : #accessing } -HismoPackageHistory >> parentPackage [ - "return the packagehistory it is packaged in" - ^ containingPackageHistory ifNil: - [ self first versionEntity parentPackage isNil - ifFalse: - [ containingPackageHistory := (self referenceHistory allPackageHistories select: - [ :eachClass | - eachClass hasUniqueName: self first versionEntity parentPackage historicalUniqueName ]) first ] - ifTrue: [ nil ] ] -] diff --git a/src-archive/Moose-Hismo/MooseAbstractGroup.extension.st b/src-archive/Moose-Hismo/MooseAbstractGroup.extension.st deleted file mode 100644 index 595b6ce93..000000000 --- a/src-archive/Moose-Hismo/MooseAbstractGroup.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #MooseAbstractGroup } - -{ #category : #'*Moose-Hismo' } -MooseAbstractGroup >> allModelHistories [ - - ^ self allWithType: HismoModelHistory -] diff --git a/src-archive/Moose-Hismo/MooseEntity.extension.st b/src-archive/Moose-Hismo/MooseEntity.extension.st deleted file mode 100644 index f9dcc1cff..000000000 --- a/src-archive/Moose-Hismo/MooseEntity.extension.st +++ /dev/null @@ -1,12 +0,0 @@ -Extension { #name : #MooseEntity } - -{ #category : #'*Moose-Hismo' } -MooseEntity >> historicalUniqueName [ - - ^self mooseName -] - -{ #category : #'*Moose-Hismo' } -MooseEntity >> versionEntity [ - ^ self -] diff --git a/src-archive/Moose-Hismo/package.st b/src-archive/Moose-Hismo/package.st deleted file mode 100644 index 3caf0006f..000000000 --- a/src-archive/Moose-Hismo/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Moose-Hismo' } diff --git a/src-archive/Moose-HismoImporter/MooseHismoAllStrategy.class.st b/src-archive/Moose-HismoImporter/MooseHismoAllStrategy.class.st deleted file mode 100644 index 537895a17..000000000 --- a/src-archive/Moose-HismoImporter/MooseHismoAllStrategy.class.st +++ /dev/null @@ -1,14 +0,0 @@ -Class { - #name : #MooseHismoAllStrategy, - #superclass : #MooseHismoImportingStrategy, - #instVars : [ - 'days' - ], - #category : #'Moose-HismoImporter' -} - -{ #category : #hook } -MooseHismoAllStrategy >> selectVersion: aVersion [ - - ^ true -] diff --git a/src-archive/Moose-HismoImporter/MooseHismoDayStrategy.class.st b/src-archive/Moose-HismoImporter/MooseHismoDayStrategy.class.st deleted file mode 100644 index f135948a6..000000000 --- a/src-archive/Moose-HismoImporter/MooseHismoDayStrategy.class.st +++ /dev/null @@ -1,26 +0,0 @@ -Class { - #name : #MooseHismoDayStrategy, - #superclass : #MooseHismoImportingStrategy, - #instVars : [ - 'days' - ], - #category : #'Moose-HismoImporter' -} - -{ #category : #accessing } -MooseHismoDayStrategy >> days [ - - ^ days -] - -{ #category : #accessing } -MooseHismoDayStrategy >> days: nDays [ - - days := nDays -] - -{ #category : #hook } -MooseHismoDayStrategy >> selectVersion: aVersion [ - - ^ (aVersion - lastSelectedVersion) days >= self days -] diff --git a/src-archive/Moose-HismoImporter/MooseHismoEveryDayStrategy.class.st b/src-archive/Moose-HismoImporter/MooseHismoEveryDayStrategy.class.st deleted file mode 100644 index a795cba98..000000000 --- a/src-archive/Moose-HismoImporter/MooseHismoEveryDayStrategy.class.st +++ /dev/null @@ -1,11 +0,0 @@ -Class { - #name : #MooseHismoEveryDayStrategy, - #superclass : #MooseHismoDayStrategy, - #category : #'Moose-HismoImporter' -} - -{ #category : #accessing } -MooseHismoEveryDayStrategy >> days [ - - ^ 1 -] diff --git a/src-archive/Moose-HismoImporter/MooseHismoEveryMonthStrategy.class.st b/src-archive/Moose-HismoImporter/MooseHismoEveryMonthStrategy.class.st deleted file mode 100644 index da500d29b..000000000 --- a/src-archive/Moose-HismoImporter/MooseHismoEveryMonthStrategy.class.st +++ /dev/null @@ -1,11 +0,0 @@ -Class { - #name : #MooseHismoEveryMonthStrategy, - #superclass : #MooseHismoMonthStrategy, - #category : #'Moose-HismoImporter' -} - -{ #category : #accessing } -MooseHismoEveryMonthStrategy >> months [ - - ^ 1 -] diff --git a/src-archive/Moose-HismoImporter/MooseHismoEveryYearStrategy.class.st b/src-archive/Moose-HismoImporter/MooseHismoEveryYearStrategy.class.st deleted file mode 100644 index c47fef106..000000000 --- a/src-archive/Moose-HismoImporter/MooseHismoEveryYearStrategy.class.st +++ /dev/null @@ -1,11 +0,0 @@ -Class { - #name : #MooseHismoEveryYearStrategy, - #superclass : #MooseHismoYearStrategy, - #category : #'Moose-HismoImporter' -} - -{ #category : #accessing } -MooseHismoEveryYearStrategy >> years [ - - ^ 1 -] diff --git a/src-archive/Moose-HismoImporter/MooseHismoImporter.class.st b/src-archive/Moose-HismoImporter/MooseHismoImporter.class.st deleted file mode 100644 index ded621d60..000000000 --- a/src-archive/Moose-HismoImporter/MooseHismoImporter.class.st +++ /dev/null @@ -1,170 +0,0 @@ -Class { - #name : #MooseHismoImporter, - #superclass : #Object, - #instVars : [ - 'hismoModelName', - 'hismoModel', - 'importingStrategy', - 'versions', - 'selectedVersions', - 'datePattern', - 'importingContext' - ], - #category : #'Moose-HismoImporter' -} - -{ #category : #'as yet unclassified' } -MooseHismoImporter class >> strategyMethods [ - - ^ (MooseHismoImporter methods - select: [ :each | each selector beginsWith: 'every'] - thenCollect: [ :each | each selector asString ]) sorted: [ :a :b | a < b] -] - -{ #category : #creating } -MooseHismoImporter >> createHismoModel [ - - "versions is a dictionary with version name and version fullName" - - hismoModel := HismoModelHistory new. - - self selectedVersions do: [ :aVersion | - - | stream mooseModel | - - stream := StandardFileStream readOnlyFileNamed: aVersion. - mooseModel := self createMooseModelFrom: stream. - mooseModel name: aVersion. - hismoModel addLastVersionForMooseModel: mooseModel ]. - - hismoModel name: hismoModelName. - ^ hismoModel -] - -{ #category : #creating } -MooseHismoImporter >> createMooseModelFrom: stream [ - - self importingContext ifNotNil: [ - ^ MooseModel new - importFromMSEStream: stream - filteredBy: self importingContext ]. - ^ MooseModel new importFromMSEStream: stream -] - -{ #category : #accessing } -MooseHismoImporter >> datePattern [ - - ^ datePattern -] - -{ #category : #accessing } -MooseHismoImporter >> datePattern: aDatePattern [ - - datePattern := aDatePattern -] - -{ #category : #strategies } -MooseHismoImporter >> everyDay [ - - ^ self importingStrategy: MooseHismoEveryDayStrategy new -] - -{ #category : #strategies } -MooseHismoImporter >> everyMonth [ - - ^ self importingStrategy: MooseHismoEveryMonthStrategy new -] - -{ #category : #strategies } -MooseHismoImporter >> everyNDays: nDays [ - - ^ self importingStrategy: (MooseHismoDayStrategy new days: nDays) -] - -{ #category : #strategies } -MooseHismoImporter >> everyNMonths: nMonths [ - - ^ self importingStrategy: (MooseHismoMonthStrategy new months: nMonths) -] - -{ #category : #strategies } -MooseHismoImporter >> everyNYears: nYears [ - - ^ self importingStrategy: (MooseHismoYearStrategy new years: nYears) -] - -{ #category : #strategies } -MooseHismoImporter >> everyYear [ - - ^ self importingStrategy: MooseHismoEveryYearStrategy new -] - -{ #category : #accessing } -MooseHismoImporter >> hismoModelName [ - - ^ hismoModelName -] - -{ #category : #accessing } -MooseHismoImporter >> hismoModelName: aString [ - - hismoModelName := aString -] - -{ #category : #strategies } -MooseHismoImporter >> importAll [ - - ^ self importingStrategy: MooseHismoAllStrategy new -] - -{ #category : #accessing } -MooseHismoImporter >> importingContext [ - - ^ importingContext -] - -{ #category : #accessing } -MooseHismoImporter >> importingContext: anImportingContext [ - - importingContext := anImportingContext -] - -{ #category : #accessing } -MooseHismoImporter >> importingStrategy [ - - ^ importingStrategy ifNil: [ importingStrategy := MooseHismoEveryMonthStrategy new ] -] - -{ #category : #accessing } -MooseHismoImporter >> importingStrategy: anImportingStrategy [ - - importingStrategy := anImportingStrategy -] - -{ #category : #creating } -MooseHismoImporter >> installHismoModel [ - - hismoModel install -] - -{ #category : #accessing } -MooseHismoImporter >> selectedVersions [ - "versions is a dictionary with version name and version fullName" - - ^ importingStrategy - versions: versions; - datePattern: datePattern; - selectedVersions -] - -{ #category : #accessing } -MooseHismoImporter >> versions [ - - ^ versions -] - -{ #category : #accessing } -MooseHismoImporter >> versions: aListOfVersions [ - - versions := aListOfVersions -] diff --git a/src-archive/Moose-HismoImporter/MooseHismoImportingStrategy.class.st b/src-archive/Moose-HismoImporter/MooseHismoImportingStrategy.class.st deleted file mode 100644 index 6a24c89d9..000000000 --- a/src-archive/Moose-HismoImporter/MooseHismoImportingStrategy.class.st +++ /dev/null @@ -1,88 +0,0 @@ -Class { - #name : #MooseHismoImportingStrategy, - #superclass : #Object, - #instVars : [ - 'versions', - 'selectedVersions', - 'lastSelectedVersion', - 'datePattern' - ], - #category : #'Moose-HismoImporter' -} - -{ #category : #private } -MooseHismoImportingStrategy >> colllectDateInString: aString [ - - ^ (aString - regex: self datePatternAsRegex - matchesCollect: #yourself) first -] - -{ #category : #accessing } -MooseHismoImportingStrategy >> datePattern [ - - ^ datePattern -] - -{ #category : #accessing } -MooseHismoImportingStrategy >> datePattern: aPattern [ - - datePattern := aPattern -] - -{ #category : #private } -MooseHismoImportingStrategy >> datePatternAsRegex [ - "Check this!!!" - "example: for the pattern 'dd-mm-yyyy' or 'd-m-yyyy' we want the regex '\d?\d-\d?\d-\d\d\d\d' " - ^ ((self datePattern replaceAllRegex: 'dd|d|mm|m' with: 'x') replaceAllRegex: 'x' with: '\d?\d') replaceAllRegex: 'y' with: '\d' -] - -{ #category : #private } -MooseHismoImportingStrategy >> filterDate: aString [ - - self datePattern isEmptyOrNil - ifTrue: [ ^ aString ]. - ^ (self colllectDateInString: aString) asDateWithPattern: self datePattern -] - -{ #category : #hook } -MooseHismoImportingStrategy >> selectVersion: aDate [ - - ^ self subclassResponsibility -] - -{ #category : #accessing } -MooseHismoImportingStrategy >> selectVersions [ - - lastSelectedVersion := '01/01/1001' asDateWithPattern: 'dd/mm/yyyy'. - - "sort the versions by date" - versions := versions sorted: [ :a :b | (self filterDate: a) < (self filterDate: b) ]. - - ^ versions select: [ :each | - - | version shouldSelectCurrent | - - version := self filterDate: each. - shouldSelectCurrent := self selectVersion: version. - shouldSelectCurrent ifTrue: [ lastSelectedVersion := version ]. - shouldSelectCurrent ] -] - -{ #category : #accessing } -MooseHismoImportingStrategy >> selectedVersions [ - - ^ selectedVersions ifNil: [ selectedVersions := self selectVersions ] -] - -{ #category : #accessing } -MooseHismoImportingStrategy >> versions [ - - ^ versions -] - -{ #category : #accessing } -MooseHismoImportingStrategy >> versions: aListOfVersions [ - - versions := aListOfVersions -] diff --git a/src-archive/Moose-HismoImporter/MooseHismoMonthStrategy.class.st b/src-archive/Moose-HismoImporter/MooseHismoMonthStrategy.class.st deleted file mode 100644 index 544404934..000000000 --- a/src-archive/Moose-HismoImporter/MooseHismoMonthStrategy.class.st +++ /dev/null @@ -1,26 +0,0 @@ -Class { - #name : #MooseHismoMonthStrategy, - #superclass : #MooseHismoImportingStrategy, - #instVars : [ - 'months' - ], - #category : #'Moose-HismoImporter' -} - -{ #category : #accessing } -MooseHismoMonthStrategy >> months [ - - ^ months -] - -{ #category : #accessing } -MooseHismoMonthStrategy >> months: nMonths [ - - months := nMonths -] - -{ #category : #hook } -MooseHismoMonthStrategy >> selectVersion: aVersion [ - - ^ aVersion month >= (lastSelectedVersion month next: self months) -] diff --git a/src-archive/Moose-HismoImporter/MooseHismoYearStrategy.class.st b/src-archive/Moose-HismoImporter/MooseHismoYearStrategy.class.st deleted file mode 100644 index f5e54da42..000000000 --- a/src-archive/Moose-HismoImporter/MooseHismoYearStrategy.class.st +++ /dev/null @@ -1,26 +0,0 @@ -Class { - #name : #MooseHismoYearStrategy, - #superclass : #MooseHismoImportingStrategy, - #instVars : [ - 'years' - ], - #category : #'Moose-HismoImporter' -} - -{ #category : #hook } -MooseHismoYearStrategy >> selectVersion: aVersion [ - - ^ (aVersion year - lastSelectedVersion year) >= self years -] - -{ #category : #accessing } -MooseHismoYearStrategy >> years [ - - ^ years -] - -{ #category : #accessing } -MooseHismoYearStrategy >> years: aNumber [ - - years := aNumber -] diff --git a/src-archive/Moose-HismoImporter/String.extension.st b/src-archive/Moose-HismoImporter/String.extension.st deleted file mode 100644 index f60c3e995..000000000 --- a/src-archive/Moose-HismoImporter/String.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #String } - -{ #category : #'*moose-hismoimporter' } -String >> asDateWithPattern: aPattern [ - - ^ Date readFrom: self readStream readStream pattern: aPattern -] diff --git a/src-archive/Moose-HismoImporter/Timespan.extension.st b/src-archive/Moose-HismoImporter/Timespan.extension.st deleted file mode 100644 index da83f3e8f..000000000 --- a/src-archive/Moose-HismoImporter/Timespan.extension.st +++ /dev/null @@ -1,12 +0,0 @@ -Extension { #name : #Timespan } - -{ #category : #'*moose-hismoimporter' } -Timespan >> next: aNumber [ - - | timespan | - timespan := self. - 1 to: aNumber do: [ :each | - timespan := timespan next ]. - - ^ timespan -] diff --git a/src-archive/Moose-HismoImporter/package.st b/src-archive/Moose-HismoImporter/package.st deleted file mode 100644 index 1da07b114..000000000 --- a/src-archive/Moose-HismoImporter/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Moose-HismoImporter' } diff --git a/src-archive/Moose-Settings/Jdt2FamixSettings.class.st b/src-archive/Moose-Settings/Jdt2FamixSettings.class.st deleted file mode 100644 index 5e488477d..000000000 --- a/src-archive/Moose-Settings/Jdt2FamixSettings.class.st +++ /dev/null @@ -1,43 +0,0 @@ -Class { - #name : #Jdt2FamixSettings, - #superclass : #Object, - #classInstVars : [ - 'jdt2famixPath' - ], - #category : #'Moose-Settings' -} - -{ #category : #'accessing settings' } -Jdt2FamixSettings class >> defaultJdt2FamixPath [ - ^ 'jdt2famix' -] - -{ #category : #'accessing settings' } -Jdt2FamixSettings class >> jdt2famixPath [ - - ^ jdt2famixPath ifNil: [jdt2famixPath := 'jdt2famix'] - -] - -{ #category : #'accessing settings' } -Jdt2FamixSettings class >> jdt2famixPath: aString [ - - jdt2famixPath := aString - -] - -{ #category : #verveinej } -Jdt2FamixSettings class >> settingsOn: aBuilder [ - - - (aBuilder group: #jdt2famix) - label: 'jdt2famix' translated; - description: 'Path of folder where to look for jdt2famix.sh ' translated; - parent: #moose; - with: [ - (aBuilder setting: #jdt2famixPath) - label: 'jdt2famix.sh path' translated; - target: self; - default: Jdt2FamixSettings defaultJdt2FamixPath. - ]. -] diff --git a/src-archive/Moose-Settings/MPOpenSettingsCommand.class.st b/src-archive/Moose-Settings/MPOpenSettingsCommand.class.st deleted file mode 100644 index 43da5690a..000000000 --- a/src-archive/Moose-Settings/MPOpenSettingsCommand.class.st +++ /dev/null @@ -1,16 +0,0 @@ -Class { - #name : #MPOpenSettingsCommand, - #superclass : #MoosePanelCommand, - #category : #'Moose-Settings' -} - -{ #category : #hooks } -MPOpenSettingsCommand >> execute [ - - SettingBrowser browse: #('moosesettings') -] - -{ #category : #hooks } -MPOpenSettingsCommand >> label [ - ^ 'Moose settings' -] diff --git a/src-archive/Moose-Settings/MooseSettings.class.st b/src-archive/Moose-Settings/MooseSettings.class.st deleted file mode 100644 index d80de14dd..000000000 --- a/src-archive/Moose-Settings/MooseSettings.class.st +++ /dev/null @@ -1,14 +0,0 @@ -Class { - #name : #MooseSettings, - #superclass : #Object, - #category : #'Moose-Settings' -} - -{ #category : #settings } -MooseSettings class >> mooseSettingsOn: aBuilder [ - - (aBuilder group: #moose) - label: 'Moose' translated; - description: 'All Moose settings' translated; - noOrdering -] diff --git a/src-archive/Moose-Settings/SettingTreeBuilder.extension.st b/src-archive/Moose-Settings/SettingTreeBuilder.extension.st deleted file mode 100644 index bb0f7ae59..000000000 --- a/src-archive/Moose-Settings/SettingTreeBuilder.extension.st +++ /dev/null @@ -1,9 +0,0 @@ -Extension { #name : #SettingTreeBuilder } - -{ #category : #'*Moose-Settings' } -SettingTreeBuilder >> moosesettings [ - - currentPragma methodClass theNonMetaClass - perform: currentPragma methodSelector - with: self -] diff --git a/src-archive/Moose-Settings/package.st b/src-archive/Moose-Settings/package.st deleted file mode 100644 index 1cfe6bba6..000000000 --- a/src-archive/Moose-Settings/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Moose-Settings' } diff --git a/src-archive/Moose-Test-HismoImporter/MooseHismoImporterTest.class.st b/src-archive/Moose-Test-HismoImporter/MooseHismoImporterTest.class.st deleted file mode 100644 index 60b7dd4e9..000000000 --- a/src-archive/Moose-Test-HismoImporter/MooseHismoImporterTest.class.st +++ /dev/null @@ -1,247 +0,0 @@ -Class { - #name : #MooseHismoImporterTest, - #superclass : #TestCase, - #instVars : [ - 'hismoImporter', - 'datePattern' - ], - #category : #'Moose-Test-HismoImporter' -} - -{ #category : #private } -MooseHismoImporterTest >> colllectDateInString: aString [ - - ^ (hismoImporter importingStrategy colllectDateInString: aString) asDateWithPattern: datePattern -] - -{ #category : #running } -MooseHismoImporterTest >> setUp [ - - | systemVersions versionsAndDates dateTemp ddmmyyyy | - - datePattern := 'dd-mm-yyyy'. - versionsAndDates := OrderedCollection new. - dateTemp := '01-01-2000' asDateWithPattern: datePattern. - - 1 to: 4000 do: [ :version | - versionsAndDates add: (version -> dateTemp). - dateTemp := dateTemp next ]. - - "See Date>>printOn:format: Ex: version2459#12-03-2004" - ddmmyyyy := #(1 2 3 $- 1 1 2). - systemVersions := versionsAndDates collect: [ :each | 'version',each key asString, '#', (each value printFormat: ddmmyyyy) ]. - - hismoImporter := MooseHismoImporter new - versions: systemVersions; - datePattern: datePattern. -] - -{ #category : #tests } -MooseHismoImporterTest >> testEvery15Days [ - - | date1 date2 selectedVersions | - - hismoImporter everyNDays: 15. - selectedVersions := hismoImporter selectedVersions. - - self assert: selectedVersions size = 267. - - "compare the date of the two first selections" - date1 := self colllectDateInString: selectedVersions first. - date2 := self colllectDateInString: selectedVersions second. - - self assert: (date2 - date1) days >= 15. - - "compare the date of the two last selections" - date1 := self colllectDateInString: (selectedVersions at: selectedVersions size - 1). - date2 := self colllectDateInString: selectedVersions last. - - self assert: (date2 - date1) days >= 15. -] - -{ #category : #tests } -MooseHismoImporterTest >> testEvery2Years [ - - | date1 date2 selectedVersions | - - hismoImporter everyNYears: 2. - selectedVersions := hismoImporter selectedVersions. - - self assert: selectedVersions size = 6. - - "compare the date of the two first selections" - date1 := self colllectDateInString: selectedVersions first. - date2 := self colllectDateInString: selectedVersions second. - - self assert: (date2 year - date1 year) >= 2. - - "compare the date of the two last selections" - date1 := self colllectDateInString: (selectedVersions at: selectedVersions size - 1). - date2 := self colllectDateInString: selectedVersions last. - - self assert: (date2 year - date1 year) >= 2. -] - -{ #category : #tests } -MooseHismoImporterTest >> testEvery6Months [ - - | date1 date2 selectedVersions | - - hismoImporter everyNMonths: 6. - selectedVersions := hismoImporter selectedVersions. - - self assert: selectedVersions size = 22. - - "compare the date of the two first selections" - date1 := self colllectDateInString: selectedVersions first. - date2 := self colllectDateInString: selectedVersions second. - - self assert: date2 month >= (date1 month next: 6). - - "compare the date of the two last selections" - date1 := self colllectDateInString: (selectedVersions at: selectedVersions size - 1). - date2 := self colllectDateInString: selectedVersions last. - - self assert: date2 month >= (date1 month next: 6). -] - -{ #category : #tests } -MooseHismoImporterTest >> testEveryDay [ - - | date1 date2 selectedVersions | - - hismoImporter everyDay. - selectedVersions := hismoImporter selectedVersions. - - self assert: selectedVersions size = 4000. - - "compare the date of the two first selections" - date1 := self colllectDateInString: selectedVersions first. - date2 := self colllectDateInString: selectedVersions second. - - self assert: (date2 - date1) days >= 1. - - "compare the date of the two last selections" - date1 := self colllectDateInString: (selectedVersions at: selectedVersions size - 1). - date2 := self colllectDateInString: selectedVersions last. - - self assert: (date2 - date1) days >= 1. -] - -{ #category : #tests } -MooseHismoImporterTest >> testEveryMonth [ - - | date1 date2 selectedVersions | - - hismoImporter everyMonth. - selectedVersions := hismoImporter selectedVersions. - - self assert: selectedVersions size = 132. - - "compare the date of the two first selections" - date1 := self colllectDateInString: selectedVersions first. - date2 := self colllectDateInString: selectedVersions second. - - self assert: date2 month >= (date1 month next: 1). - - "compare the date of the two last selections" - date1 := self colllectDateInString: (selectedVersions at: selectedVersions size - 1). - date2 := self colllectDateInString: selectedVersions last. - - self assert: date2 month >= (date1 month next: 1). -] - -{ #category : #tests } -MooseHismoImporterTest >> testEveryNDays [ - - | date1 date2 selectedVersions | - - "N = 20" - hismoImporter everyNDays: 20. - selectedVersions := hismoImporter selectedVersions. - - self assert: selectedVersions size = 200. - - "compare the date of the two first selections" - date1 := self colllectDateInString: selectedVersions first. - date2 := self colllectDateInString: selectedVersions second. - - self assert: (date2 - date1) days >= 20. - - "compare the date of the two last selections" - date1 := self colllectDateInString: (selectedVersions at: selectedVersions size - 1). - date2 := self colllectDateInString: selectedVersions last. - - self assert: (date2 - date1) days >= 20. -] - -{ #category : #tests } -MooseHismoImporterTest >> testEveryNMonths [ - - | date1 date2 selectedVersions | - - "N = 18" - hismoImporter everyNMonths: 18. - selectedVersions := hismoImporter selectedVersions. - - self assert: selectedVersions size = 8. - - "compare the date of the two first selections" - date1 := self colllectDateInString: selectedVersions first. - date2 := self colllectDateInString: selectedVersions second. - - self assert: date2 month >= (date1 month next: 18). - - "compare the date of the two last selections" - date1 := self colllectDateInString: (selectedVersions at: selectedVersions size - 1). - date2 := self colllectDateInString: selectedVersions last. - - self assert: date2 month >= (date1 month next: 18). -] - -{ #category : #tests } -MooseHismoImporterTest >> testEveryNYears [ - - | date1 date2 selectedVersions | - - "N = 3" - hismoImporter everyNYears: 3. - selectedVersions := hismoImporter selectedVersions. - - self assert: selectedVersions size = 4. - - "compare the date of the two first selections" - date1 := self colllectDateInString: selectedVersions first. - date2 := self colllectDateInString: selectedVersions second. - - self assert: (date2 year - date1 year) >= 3. - - "compare the date of the two last selections" - date1 := self colllectDateInString: (selectedVersions at: selectedVersions size - 1). - date2 := self colllectDateInString: selectedVersions last. - - self assert: (date2 year - date1 year) >= 3. -] - -{ #category : #tests } -MooseHismoImporterTest >> testEveryYear [ - - | date1 date2 selectedVersions | - - hismoImporter everyYear. - selectedVersions := hismoImporter selectedVersions. - - self assert: selectedVersions size = 11. - - "compare the date of the two first selections" - date1 := self colllectDateInString: selectedVersions first. - date2 := self colllectDateInString: selectedVersions second. - - self assert: (date2 year - date1 year) >= 1. - - "compare the date of the two last selections" - date1 := self colllectDateInString: (selectedVersions at: selectedVersions size - 1). - date2 := self colllectDateInString: selectedVersions last. - - self assert: (date2 year - date1 year) >= 1. -] diff --git a/src-archive/Moose-Test-HismoImporter/MooseHismoImportingStrategyTest.class.st b/src-archive/Moose-Test-HismoImporter/MooseHismoImportingStrategyTest.class.st deleted file mode 100644 index 2c338e80a..000000000 --- a/src-archive/Moose-Test-HismoImporter/MooseHismoImportingStrategyTest.class.st +++ /dev/null @@ -1,150 +0,0 @@ -Class { - #name : #MooseHismoImportingStrategyTest, - #superclass : #TestCase, - #category : #'Moose-Test-HismoImporter' -} - -{ #category : #tests } -MooseHismoImportingStrategyTest >> testDatePatternAsRegex [ - - | importing | - - importing := MooseHismoImportingStrategy new. - - importing datePattern: 'dd-mm-yyyy'. - self assert: importing datePatternAsRegex = '\d?\d-\d?\d-\d\d\d\d'. - importing datePattern: 'dd-m-yyyy'. - self assert: importing datePatternAsRegex = '\d?\d-\d?\d-\d\d\d\d'. - importing datePattern: 'd-mm-yyyy'. - self assert: importing datePatternAsRegex = '\d?\d-\d?\d-\d\d\d\d'. - importing datePattern: 'd-m-yyyy'. - self assert: importing datePatternAsRegex = '\d?\d-\d?\d-\d\d\d\d'. - importing datePattern: 'dd-mm-yy'. - self assert: importing datePatternAsRegex = '\d?\d-\d?\d-\d\d'. - importing datePattern: 'dd-m-yy'. - self assert: importing datePatternAsRegex = '\d?\d-\d?\d-\d\d'. - importing datePattern: 'd-mm-yy'. - self assert: importing datePatternAsRegex = '\d?\d-\d?\d-\d\d'. - importing datePattern: 'd-m-yy'. - self assert: importing datePatternAsRegex = '\d?\d-\d?\d-\d\d'. - - importing datePattern: 'mm-dd-yyyy'. - self assert: importing datePatternAsRegex = '\d?\d-\d?\d-\d\d\d\d'. - importing datePattern: 'm-dd-yyyy'. - self assert: importing datePatternAsRegex = '\d?\d-\d?\d-\d\d\d\d'. - importing datePattern: 'mm-d-yyyy'. - self assert: importing datePatternAsRegex = '\d?\d-\d?\d-\d\d\d\d'. - importing datePattern: 'm-d-yyyy'. - self assert: importing datePatternAsRegex = '\d?\d-\d?\d-\d\d\d\d'. - importing datePattern: 'mm-dd-yy'. - self assert: importing datePatternAsRegex = '\d?\d-\d?\d-\d\d'. - importing datePattern: 'm-dd-yy'. - self assert: importing datePatternAsRegex = '\d?\d-\d?\d-\d\d'. - importing datePattern: 'mm-d-yy'. - self assert: importing datePatternAsRegex = '\d?\d-\d?\d-\d\d'. - importing datePattern: 'm-d-yy'. - self assert: importing datePatternAsRegex = '\d?\d-\d?\d-\d\d'. - - importing datePattern: 'yyyy-mm-dd'. - self assert: importing datePatternAsRegex = '\d\d\d\d-\d?\d-\d?\d'. - importing datePattern: 'yyyy-mm-d'. - self assert: importing datePatternAsRegex = '\d\d\d\d-\d?\d-\d?\d'. - importing datePattern: 'yyyy-m-dd'. - self assert: importing datePatternAsRegex = '\d\d\d\d-\d?\d-\d?\d'. - importing datePattern: 'yyyy-m-d'. - self assert: importing datePatternAsRegex = '\d\d\d\d-\d?\d-\d?\d'. - importing datePattern: 'yy-mm-dd'. - self assert: importing datePatternAsRegex = '\d\d-\d?\d-\d?\d'. - importing datePattern: 'yy-mm-d'. - self assert: importing datePatternAsRegex = '\d\d-\d?\d-\d?\d'. - importing datePattern: 'yy-mm-dd'. - self assert: importing datePatternAsRegex = '\d\d-\d?\d-\d?\d'. - importing datePattern: 'yy-m-d'. - self assert: importing datePatternAsRegex = '\d\d-\d?\d-\d?\d'. -] - -{ #category : #tests } -MooseHismoImportingStrategyTest >> testfilterDate [ - - | importing datePattern date dateString | - - importing := MooseHismoImportingStrategy new. - - dateString := '07-09-1985'. - - datePattern := 'dd-mm-yyyy'. - importing datePattern: datePattern. - date := dateString asDateWithPattern: datePattern. - self assert: (importing filterDate: 'sytemXversionY07-09-1985') = date. - self assert: (importing filterDate: 'sytemX07-09-1985versionY') = date. - self assert: (importing filterDate: '07-09-1985sytemXversionY') = date. - - datePattern := 'dd-m-yyyy'. - importing datePattern: datePattern. - date := dateString asDateWithPattern: datePattern. - self assert: (importing filterDate: 'sytemXversionY07-9-1985') = date. - self assert: (importing filterDate: 'sytemX07-9-1985versionY') = date. - self assert: (importing filterDate: '07-9-1985sytemXversionY') = date. - self assert: (importing filterDate: 'sytemXversionY07-09-1985') = date. - self assert: (importing filterDate: 'sytemX107-09-1985versionY') = date. - self assert: (importing filterDate: '07-09-1985sytemXversionY') = date. - - datePattern := 'd-mm-yyyy'. - importing datePattern: datePattern. - date := dateString asDateWithPattern: datePattern. - self assert: (importing filterDate: 'sytemXversionY7-09-1985') = date. - self assert: (importing filterDate: 'sytemX7-09-1985versionY') = date. - self assert: (importing filterDate: '7-09-1985sytemXversionY') = date. - self assert: (importing filterDate: 'sytemXversionY07-09-1985') = date. - self assert: (importing filterDate: 'sytemX107-09-1985versionY') = date. - self assert: (importing filterDate: '07-09-1985sytemXversionY') = date. - - datePattern := 'd-m-yyyy'. - importing datePattern: datePattern. - date := dateString asDateWithPattern: datePattern. - self assert: (importing filterDate: 'sytemXversionY7-9-1985') = date. - self assert: (importing filterDate: 'sytemX7-9-1985versionY') = date. - self assert: (importing filterDate: '7-9-1985sytemXversionY') = date. - self assert: (importing filterDate: 'sytemXversionY07-09-1985') = date. - self assert: (importing filterDate: 'sytemX107-09-1985versionY') = date. - self assert: (importing filterDate: '07-09-1985sytemXversionY') = date. - - dateString := '07-09-85'. - - datePattern := 'dd-mm-yy'. - importing datePattern: datePattern. - date := dateString asDateWithPattern: datePattern. - self assert: (importing filterDate: 'sytemXversionY07-09-85') = date. - self assert: (importing filterDate: 'sytemX07-09-85versionY') = date. - self assert: (importing filterDate: '07-09-85sytemXversionY') = date. - - datePattern := 'dd-m-yy'. - importing datePattern: datePattern. - date := dateString asDateWithPattern: datePattern. - self assert: (importing filterDate: 'sytemXversionY07-9-85') = date. - self assert: (importing filterDate: 'sytemX07-9-85versionY') = date. - self assert: (importing filterDate: '07-9-85sytemXversionY') = date. - self assert: (importing filterDate: 'sytemXversionY07-09-85') = date. - self assert: (importing filterDate: 'sytemX107-09-85versionY') = date. - self assert: (importing filterDate: '07-09-85sytemXversionY') = date. - - datePattern := 'd-mm-yy'. - importing datePattern: datePattern. - date := dateString asDateWithPattern: datePattern. - self assert: (importing filterDate: 'sytemXversionY7-09-85') = date. - self assert: (importing filterDate: 'sytemX7-09-85versionY') = date. - self assert: (importing filterDate: '7-09-85sytemXversionY') = date. - self assert: (importing filterDate: 'sytemXversionY07-09-85') = date. - self assert: (importing filterDate: 'sytemX107-09-85versionY') = date. - self assert: (importing filterDate: '07-09-85sytemXversionY') = date. - - datePattern := 'd-m-yy'. - importing datePattern: datePattern. - date := dateString asDateWithPattern: datePattern. - self assert: (importing filterDate: 'sytemXversionY7-9-85') = date. - self assert: (importing filterDate: 'sytemX7-9-85versionY') = date. - self assert: (importing filterDate: '7-9-85sytemXversionY') = date. - self assert: (importing filterDate: 'sytemXversionY07-09-85') = date. - self assert: (importing filterDate: 'sytemX107-09-85versionY') = date. - self assert: (importing filterDate: '07-09-85sytemXversionY') = date. -] diff --git a/src-archive/Moose-Test-HismoImporter/package.st b/src-archive/Moose-Test-HismoImporter/package.st deleted file mode 100644 index 61484f2ba..000000000 --- a/src-archive/Moose-Test-HismoImporter/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Moose-Test-HismoImporter' } diff --git a/src-archive/Moose-Tests-Algos-Clustering/MalClusterEngineTest.class.st b/src-archive/Moose-Tests-Algos-Clustering/MalClusterEngineTest.class.st deleted file mode 100644 index fcaf3372e..000000000 --- a/src-archive/Moose-Tests-Algos-Clustering/MalClusterEngineTest.class.st +++ /dev/null @@ -1,103 +0,0 @@ -" -Copyright (c), 2004-2007 Adrian Kuhn. This class is part of Hapax. Hapax is distributed under BSD License, see package comment. -" -Class { - #name : #MalClusterEngineTest, - #superclass : #TestCase, - #category : #'Moose-Tests-Algos-Clustering' -} - -{ #category : #testing } -MalClusterEngineTest >> testCentroid [ - | input clusty clusters | - input := #(#(1 2 3 5) #(11 12 15) #(21 22 23 25) #(31 32 35) #(41 42 43 45 47)). - clusty := MalClusterEngine with: input flatten shuffle. - clusty hierarchicalClusteringUsing: #centroid. - clusters := clusty dendrogram breakInto: 5. - self assert: clusters size equals: 5. - self assert: (clusters contains: [ :each | each equalsTo: (input at: 1) ]). - self assert: (clusters contains: [ :each | each equalsTo: (input at: 2) ]). - self assert: (clusters contains: [ :each | each equalsTo: (input at: 3) ]). - self assert: (clusters contains: [ :each | each equalsTo: (input at: 4) ]). - self assert: (clusters contains: [ :each | each equalsTo: (input at: 5) ]). - ^ clusters -] - -{ #category : #testing } -MalClusterEngineTest >> testClustering [ - | input clusty clusters | - input := #(#(1 2 3 5) #(11 12 15) #(21 22 23 25) #(31 32 35) #(41 42 43 45 47)). - clusty := MalClusterEngine with: input flatten shuffle. - clusty hierarchicalClusteringUsing: #averageLinkage. - clusters := clusty dendrogram breakInto: 5. - self assert: clusters size equals: 5. - self assert: (clusters contains: [ :each | each equalsTo: (input at: 1) ]). - self assert: (clusters contains: [ :each | each equalsTo: (input at: 2) ]). - self assert: (clusters contains: [ :each | each equalsTo: (input at: 3) ]). - self assert: (clusters contains: [ :each | each equalsTo: (input at: 4) ]). - self assert: (clusters contains: [ :each | each equalsTo: (input at: 5) ]). - ^ clusters -] - -{ #category : #testing } -MalClusterEngineTest >> testClustering2 [ - | input clusty clusters | - input := #(#(1 2 3 5) #(11 12 15) #(21 22 23 25) #(31 32 35) #(41 42 43 45 47)). - clusty := MalClusterEngine with: input flatten shuffle. - clusty hierarchicalClusteringUsing: #centroid. - clusters := clusty dendrogram breakInto: 5. - self assert: clusters size equals: 5. - self assert: (clusters contains: [ :each | each equalsTo: (input at: 1) ]). - self assert: (clusters contains: [ :each | each equalsTo: (input at: 2) ]). - self assert: (clusters contains: [ :each | each equalsTo: (input at: 3) ]). - self assert: (clusters contains: [ :each | each equalsTo: (input at: 4) ]). - self assert: (clusters contains: [ :each | each equalsTo: (input at: 5) ]). - ^ clusters -] - -{ #category : #testing } -MalClusterEngineTest >> testClustering300Elements [ - - | input clusty clusters | - input := Random new next: 300. - clusty := MalClusterEngine with: input. - 1 - to: 1 - do: [:n | clusty averageLinkage]. - clusters := clusty dendrogram breakInto: 10. - ^clusters -] - -{ #category : #testing } -MalClusterEngineTest >> testClusteringOptimization [ - - | input clusty | - input := Random new next: 200. - clusty := MalClusteringData onDistanceSquare: (MalDistanceSquare on: input). "internally compares the optimzed and the unoptimized code." - clusty testPerformClustering: #averageLinkage -] - -{ #category : #testing } -MalClusterEngineTest >> testSeriationEngine [ - - | input output | - input := #(1 2 3 5 11 12 15 21 22 23 25 31 32 35 41 42 43 45 47). - output := MalSeriationEngine applyOn: input copy asArray shuffle. - self assert: output = input | (output reverse = input) -] - -{ #category : #testing } -MalClusterEngineTest >> testWardsMethod [ - | input clusty clusters | - input := #(#(1 2 3 5) #(11 12 15) #(21 22 23 25) #(31 32 35) #(41 42 43 45 47)). - clusty := MalClusterEngine with: input flatten shuffle. - clusty hierarchicalClusteringUsing: #wardsMethod. - clusters := clusty dendrogram breakInto: 5. - self assert: clusters size equals: 5. - self assert: (clusters contains: [ :each | each equalsTo: (input at: 1) ]). - self assert: (clusters contains: [ :each | each equalsTo: (input at: 2) ]). - self assert: (clusters contains: [ :each | each equalsTo: (input at: 3) ]). - self assert: (clusters contains: [ :each | each equalsTo: (input at: 4) ]). - self assert: (clusters contains: [ :each | each equalsTo: (input at: 5) ]). - ^ clusters -] diff --git a/src-archive/Moose-Tests-Algos-Clustering/MalDendrogramTest.class.st b/src-archive/Moose-Tests-Algos-Clustering/MalDendrogramTest.class.st deleted file mode 100644 index 8684d7f58..000000000 --- a/src-archive/Moose-Tests-Algos-Clustering/MalDendrogramTest.class.st +++ /dev/null @@ -1,60 +0,0 @@ -" -Copyright (c), 2004-2007 Adrian Kuhn. This class is part of Hapax. Hapax is distributed under BSD License, see package comment. -" -Class { - #name : #MalDendrogramTest, - #superclass : #TestCase, - #instVars : [ - 'dendrogram' - ], - #category : #'Moose-Tests-Algos-Clustering' -} - -{ #category : #running } -MalDendrogramTest >> setUp [ - - | ab cd ef abcd efg | - super setUp. - ab := (MalDendrogram with: #a) - merge: (MalDendrogram with: #b) - at: 1. - cd := (MalDendrogram with: #c) - merge: (MalDendrogram with: #d) - at: 2. - ef := (MalDendrogram with: #e) - merge: (MalDendrogram with: #f) - at: 3. - abcd := ab merge: cd at: 4. - efg := ef - merge: (MalDendrogram with: #g) - at: 5. - dendrogram := abcd merge: efg at: 7 "#(((a 1 b) 4 (c 2 d)) 7 ((e 3 f) 5 g))" -] - -{ #category : #test } -MalDendrogramTest >> testAllLeaves [ - self assert: dendrogram elements size equals: 7. - self assert: (dendrogram elements equalsTo: #(#a #b #c #d #e #f #g)) -] - -{ #category : #test } -MalDendrogramTest >> testIndex [ - self assert: dendrogram index equals: 1. - self assert: dendrogram left index equals: 1. - self assert: dendrogram right index equals: 5. - self assert: dendrogram left left index equals: 1. - self assert: dendrogram left right index equals: 3. - self assert: dendrogram right left index equals: 5. - self assert: dendrogram right right index equals: 7 -] - -{ #category : #test } -MalDendrogramTest >> testSize [ - self assert: dendrogram size equals: 7. - self assert: dendrogram left size equals: 4. - self assert: dendrogram right size equals: 3. - self assert: dendrogram left left size equals: 2. - self assert: dendrogram left right size equals: 2. - self assert: dendrogram right left size equals: 2. - self assert: dendrogram right right size equals: 1 -] diff --git a/src-archive/Moose-Tests-Algos-Clustering/MalSimilarityItemTest.class.st b/src-archive/Moose-Tests-Algos-Clustering/MalSimilarityItemTest.class.st deleted file mode 100644 index 36130b6db..000000000 --- a/src-archive/Moose-Tests-Algos-Clustering/MalSimilarityItemTest.class.st +++ /dev/null @@ -1,44 +0,0 @@ -" -Copyright (c), 2004-2007 Adrian Kuhn. This class is part of Hapax. Hapax is distributed under BSD License, see package comment. -" -Class { - #name : #MalSimilarityItemTest, - #superclass : #TestCase, - #category : #'Moose-Tests-Algos-Clustering' -} - -{ #category : #'As yet unclassified' } -MalSimilarityItemTest >> testDistance [ - | a b c elements engine clusters | - a := MalVectorItem with: #a and: #(1 0). - b := MalVectorItem with: #b and: #(0 1). - c := MalVectorItem with: #c and: #(0 7). - elements := Array with: a with: b with: c. - engine := MalClusterEngine with: elements. - engine hierarchicalClusteringUsing: #averageLinkage. - clusters := engine dendrogram breakInto: 2. - self assert: clusters size equals: 2. - self assert: (clusters select: [ :each | each size = 1 ]) size equals: 1. - self assert: (clusters select: [ :each | each size = 2 ]) size equals: 1. - self assert: ((clusters select: [ :each | each size = 1 ]) first includes: c). - self assert: ((clusters select: [ :each | each size = 2 ]) first includes: a). - self assert: ((clusters select: [ :each | each size = 2 ]) first includes: b) -] - -{ #category : #'As yet unclassified' } -MalSimilarityItemTest >> testSimilarity [ - | a b c elements engine clusters | - a := MalSimilarityItem with: #a and: #(1 0). - b := MalSimilarityItem with: #b and: #(0 1). - c := MalSimilarityItem with: #c and: #(0 7). - elements := Array with: a with: b with: c. - engine := MalClusterEngine with: elements. - engine hierarchicalClusteringUsing: #averageLinkage. - clusters := engine dendrogram breakInto: 2. - self assert: clusters size equals: 2. - self assert: (clusters select: [ :each | each size = 1 ]) size equals: 1. - self assert: (clusters select: [ :each | each size = 2 ]) size equals: 1. - self assert: ((clusters select: [ :each | each size = 1 ]) first includes: a). - self assert: ((clusters select: [ :each | each size = 2 ]) first includes: b). - self assert: ((clusters select: [ :each | each size = 2 ]) first includes: c) -] diff --git a/src-archive/Moose-Tests-Algos-Clustering/package.st b/src-archive/Moose-Tests-Algos-Clustering/package.st deleted file mode 100644 index a67e192ea..000000000 --- a/src-archive/Moose-Tests-Algos-Clustering/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Moose-Tests-Algos-Clustering' } diff --git a/src-archive/Moose-Tests-Algos-HierarchicalGraph/FILOStack.class.st b/src-archive/Moose-Tests-Algos-HierarchicalGraph/FILOStack.class.st deleted file mode 100644 index 01cd01671..000000000 --- a/src-archive/Moose-Tests-Algos-HierarchicalGraph/FILOStack.class.st +++ /dev/null @@ -1,11 +0,0 @@ -Class { - #name : #FILOStack, - #superclass : #Stack, - #category : #'Moose-Tests-Algos-HierarchicalGraph' -} - -{ #category : #adding } -FILOStack >> push: anObject [ - self addLast: anObject. - ^ anObject. -] diff --git a/src-archive/Moose-Tests-Algos-HierarchicalGraph/MalHgNodeTests.class.st b/src-archive/Moose-Tests-Algos-HierarchicalGraph/MalHgNodeTests.class.st deleted file mode 100644 index da59b138d..000000000 --- a/src-archive/Moose-Tests-Algos-HierarchicalGraph/MalHgNodeTests.class.st +++ /dev/null @@ -1,34 +0,0 @@ -Class { - #name : #MalHgNodeTests, - #superclass : #TestCase, - #category : #'Moose-Tests-Algos-HierarchicalGraph' -} - -{ #category : #tests } -MalHgNodeTests >> testParentOnLevel [ - | hg rootNodes | - rootNodes := OrderedCollection new. - rootNodes - add: 'a'; - add: 'b'; - add: 'c'. - hg := MalHierarchicalGraph with: rootNodes. - hg - topDown: [ :entity | - entity size < 4 - ifTrue: [ - | result | - result := Set new. - result add: entity , 'a'. - result add: entity , 'b'. - result add: entity , 'c'. - result ] ]. - self should: [ ((hg nodeWrapping: 'aba') parentOnLevel: -1) = (hg nodeWrapping: 'a') ] raise: AssertionFailure. - self assert: ((hg nodeWrapping: 'aba') parentOnLevel: 10) equals: nil. - self assert: ((hg nodeWrapping: 'aba') parentOnLevel: 0) equals: (hg nodeWrapping: 'a'). - self assert: ((hg nodeWrapping: 'aba') parentOnLevel: 1) equals: (hg nodeWrapping: 'ab'). - self assert: ((hg nodeWrapping: 'cabc') parentOnLevel: 1) equals: (hg nodeWrapping: 'ca'). - self assert: ((hg nodeWrapping: 'baac') parentOnLevel: 3) equals: nil. - self assert: ((hg nodeWrapping: 'baac') parentOnLevel: 2) equals: (hg nodeWrapping: 'baa'). - self assert: ((hg nodeWrapping: 'bbbc') parentOnLevel: 0) equals: (hg nodeWrapping: 'b') -] diff --git a/src-archive/Moose-Tests-Algos-HierarchicalGraph/MalHgPerformanceTests.class.st b/src-archive/Moose-Tests-Algos-HierarchicalGraph/MalHgPerformanceTests.class.st deleted file mode 100644 index 9f33f6141..000000000 --- a/src-archive/Moose-Tests-Algos-HierarchicalGraph/MalHgPerformanceTests.class.st +++ /dev/null @@ -1,74 +0,0 @@ -Class { - #name : #MalHgPerformanceTests, - #superclass : #TestCase, - #category : #'Moose-Tests-Algos-HierarchicalGraph' -} - -{ #category : #tests } -MalHgPerformanceTests >> testConstructingLargeHiGraphBottomUp [ - | hg rootNodes levels leafNodes profiler result | - - "(1 to: 1) do: [ :i |" - - rootNodes := OrderedCollection new. - leafNodes := OrderedCollection new. - levels := 11. - - rootNodes add: 'a'; add: 'b'; add: 'c'. - rootNodes do: [ :model | MalHierarchicalGraphTests new recursiveStringFactory: model in: leafNodes to: levels ]. - - profiler := TimeProfiler new. - result := profiler runBlock: [ - - hg := MalHierarchicalGraph with: leafNodes. - - hg aggregation: [ :model | - (model size > 1) - ifTrue: [ model truncateTo: (model size - 1). ] - ifFalse: [ nil ]. - ]. - ]. - - "Transcript show: '#propEdges: ', hg edgesPropagated size asString, '; '. - - profiler rootTallyItems do: [ :t | - Transcript show: t method selector, ' ', t tally asString, '; '. - ]. - - Transcript show: 'total: ', profiler tally asString, ';'; cr." - - "profiler open. - profiler showResult: result." - "hg explore." - "]." -] - -{ #category : #tests } -MalHgPerformanceTests >> testConstructingLargeHiGraphTopDown [ - | hg rootNodes profiler children levels result | - - rootNodes := OrderedCollection new. - rootNodes add: 'a'; add: 'b'; add: 'c'. - levels := 11. - - profiler := TimeProfiler new. - result := profiler runBlock: [ - - hg := MalHierarchicalGraph with: rootNodes. - hg topDown: [ :model | - (model size < levels) - ifTrue: [ - children := OrderedCollection new. - children add: (model, 'a'). - children add: (model, 'b'). - children add: (model, 'c'). - children. - ] - ]. - ]. - - "profiler open. - profiler showResult: result." - "hg explore." - "]." -] diff --git a/src-archive/Moose-Tests-Algos-HierarchicalGraph/MalHgTestEdge.class.st b/src-archive/Moose-Tests-Algos-HierarchicalGraph/MalHgTestEdge.class.st deleted file mode 100644 index 009feeecd..000000000 --- a/src-archive/Moose-Tests-Algos-HierarchicalGraph/MalHgTestEdge.class.st +++ /dev/null @@ -1,34 +0,0 @@ -Class { - #name : #MalHgTestEdge, - #superclass : #Object, - #instVars : [ - 'from', - 'to' - ], - #category : #'Moose-Tests-Algos-HierarchicalGraph' -} - -{ #category : #'instance creation' } -MalHgTestEdge class >> from: from to: to [ - ^ self new from: from; to: to; yourself. -] - -{ #category : #accessing } -MalHgTestEdge >> from [ - ^ from -] - -{ #category : #accessing } -MalHgTestEdge >> from: anObject [ - from := anObject -] - -{ #category : #accessing } -MalHgTestEdge >> to [ - ^ to -] - -{ #category : #accessing } -MalHgTestEdge >> to: anObject [ - to := anObject -] diff --git a/src-archive/Moose-Tests-Algos-HierarchicalGraph/MalHgTestModelSimple.class.st b/src-archive/Moose-Tests-Algos-HierarchicalGraph/MalHgTestModelSimple.class.st deleted file mode 100644 index 57e97fa7a..000000000 --- a/src-archive/Moose-Tests-Algos-HierarchicalGraph/MalHgTestModelSimple.class.st +++ /dev/null @@ -1,104 +0,0 @@ -Class { - #name : #MalHgTestModelSimple, - #superclass : #Object, - #instVars : [ - 'model', - 'parent', - 'children', - 'level' - ], - #category : #'Moose-Tests-Algos-HierarchicalGraph' -} - -{ #category : #accessing } -MalHgTestModelSimple >> children [ - ^ children -] - -{ #category : #accessing } -MalHgTestModelSimple >> children: anObject [ - children := anObject -] - -{ #category : #'initialize-release' } -MalHgTestModelSimple >> initialize [ - children := OrderedCollection new. -] - -{ #category : #testing } -MalHgTestModelSimple >> isLeaf [ - ^ children isEmpty. -] - -{ #category : #accessing } -MalHgTestModelSimple >> level [ - ^ level -] - -{ #category : #accessing } -MalHgTestModelSimple >> level: aNumber [ - level := aNumber. -] - -{ #category : #accessing } -MalHgTestModelSimple >> model [ - ^ model -] - -{ #category : #accessing } -MalHgTestModelSimple >> model: anObject [ - model := anObject -] - -{ #category : #testing } -MalHgTestModelSimple >> notLeaf [ - ^ children notEmpty. -] - -{ #category : #accessing } -MalHgTestModelSimple >> parent [ - ^ parent -] - -{ #category : #accessing } -MalHgTestModelSimple >> parent: anObject [ - parent := anObject -] - -{ #category : #accessing } -MalHgTestModelSimple >> printOn: aStream [ - aStream - nextPutAll: 'Test: '; - nextPutAll: model asString. -] - -{ #category : #'as yet unclassified' } -MalHgTestModelSimple >> recursiveChildren [ - "Returns the whole family tree below myself (excluding myself). " - ^ self recursiveChildren: false. - -] - -{ #category : #'as yet unclassified' } -MalHgTestModelSimple >> recursiveChildren: withMyself [ - "Returns the whole family tree below myself. - If withMyself is true, also add myself to the returning set." - | result | - result := Set new. - - withMyself ifTrue: [ - result add: self. - ]. - - self isLeaf ifTrue: [ - ^ result. - ]. - - result addAll: children. - - children do: [ :each | - result addAll: (each recursiveChildren: true). - ]. - - ^ result. -] diff --git a/src-archive/Moose-Tests-Algos-HierarchicalGraph/MalHierarchicalGraphTests.class.st b/src-archive/Moose-Tests-Algos-HierarchicalGraph/MalHierarchicalGraphTests.class.st deleted file mode 100644 index 00cefb469..000000000 --- a/src-archive/Moose-Tests-Algos-HierarchicalGraph/MalHierarchicalGraphTests.class.st +++ /dev/null @@ -1,859 +0,0 @@ -Class { - #name : #MalHierarchicalGraphTests, - #superclass : #TestCase, - #classInstVars : [ - 'repository' - ], - #category : #'Moose-Tests-Algos-HierarchicalGraph' -} - -{ #category : #util } -MalHierarchicalGraphTests >> recursiveStringFactory: aString in: aSet to: aLevel. [ - aString size < aLevel - ifTrue: [ - | childA childB childC | - childA := aString , 'a'. - aSet add: childA. - self recursiveStringFactory: childA in: aSet to: aLevel. - childB := aString , 'b'. - aSet add: childB. - self recursiveStringFactory: childB in: aSet to: aLevel. - childC := aString , 'c'. - aSet add: childC. - self recursiveStringFactory: childC in: aSet to: aLevel. - ]. - - -] - -{ #category : #setup } -MalHierarchicalGraphTests >> setupSimpleBottomUpModel [ - | hg result | - result := OrderedCollection new. - hg := MalHierarchicalGraph with: (self setupSimpleTopDownModel). - hg topDown: #children. - (hg nodesOnLevel: 4) do: [ :e | result add: e model ]. - ^ result. -] - -{ #category : #setup } -MalHierarchicalGraphTests >> setupSimpleBottomUpModelHiGraph [ - | hg | - - hg := MalHierarchicalGraph with: (self setupSimpleBottomUpModel). - hg bottomUp: #parent. - - ^ hg. -] - -{ #category : #setup } -MalHierarchicalGraphTests >> setupSimpleNumbersHiGraph [ - | hg leafs relationships | - - "Creates a very simple hiGraph with intergers as nodes. - It has 3 root nodes (1,2 and 3), some children and various relationships between them." - - leafs := OrderedCollection new. - leafs add: 12; add: 19; add:24; add: 25; add:27; add: 28; add: 31; add: 34; add: 36. - - hg := MalHierarchicalGraph with: leafs. - - hg bottomUp: [ :n | - (n / 10 < 1) ifTrue: [ nil ] ifFalse: [(n / (10 raisedTo: (n floorLog: 10))) floor asInteger. ] - ]. - - relationships := OrderedCollection new. - - relationships add: (12->19). - relationships add: (19->24). - relationships add: (19->31). - relationships add: (19->27). - - relationships add: (25->12). - relationships add: (25->19). - relationships add: (25->19). - relationships add: (25->34). - - relationships add: (34->12). - relationships add: (34->31). - relationships add: (36->25). - relationships add: (36->24). - - hg addEdges: relationships - sourceBlock: [ :e | e key ] - destinationBlock: [ :e | e value ]. - - hg propagateEdges. - - ^ hg -] - -{ #category : #setup } -MalHierarchicalGraphTests >> setupSimpleTopDownModel [ - | parent randomizer nodesToProcess numberOfChildrenAdded child root levelsToCreate childrenToCreate | - - "If these values get changed, tests have to be adapted." - levelsToCreate := 4. - childrenToCreate := 3. - - numberOfChildrenAdded := 0. - randomizer := Random new. - root := MalHgTestModelSimple new. - root model: 0. - root level: 0. - nodesToProcess := FILOStack new. - nodesToProcess add: root. - - [nodesToProcess notEmpty] whileTrue: [ - parent := nodesToProcess pop. - (parent level < levelsToCreate ) ifTrue: [ - [ numberOfChildrenAdded < childrenToCreate ] whileTrue: [ - child := MalHgTestModelSimple new. - child parent: parent. - child level: (parent level + 1). - child model: ((randomizer next * 10) + (10 raisedTo: (child level))) asInteger. - parent children add: child. - numberOfChildrenAdded := numberOfChildrenAdded + 1. - nodesToProcess add: child. - ]. - numberOfChildrenAdded := 0. - ]. - ]. - - ^ root. -] - -{ #category : #setup } -MalHierarchicalGraphTests >> setupSimpleTopDownModelHiGraph [ - | hg | - - hg := MalHierarchicalGraph with: (self setupSimpleTopDownModel). - hg topDown: #children. - - ^ hg. -] - -{ #category : #setup } -MalHierarchicalGraphTests >> setupVerySimpleHierarchicalGraph [ - | hg | - hg := MalHierarchicalGraph with: 'aBaseEntity'. - self assert: hg nodes size equals: 1 -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testBaseEntity [ - | hg | - hg := MalHierarchicalGraph with: (OrderedCollection with: 2). - self assert: hg nodes notEmpty. - self assert: hg nodes size equals: 1. - self assert: hg nodes first model equals: 2 -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testBlockBasedApiBottomUp [ - | hg | - hg := MalHierarchicalGraph with: self setupSimpleBottomUpModel. - hg bottomUp: [ :e | e parent ]. - self assert: hg nodes size equals: 121. - self assert: hg rootNodes size equals: 1. - self assert: hg rootNodes anyOne level equals: 0. - self assert: hg rootNodes anyOne children size equals: 3. - self assert: hg rootNodes anyOne children anyOne level equals: 1. - self assert: hg rootNodes anyOne children anyOne children size equals: 3. - self assert: hg rootNodes anyOne children anyOne children anyOne level equals: 2. - self assert: hg rootNodes anyOne children anyOne children anyOne children size equals: 3. - self assert: hg rootNodes anyOne children anyOne children anyOne children anyOne level equals: 3. - self assert: hg rootNodes anyOne children anyOne children anyOne children anyOne children size equals: 3. - self assert: hg rootNodes anyOne children anyOne children anyOne children anyOne children anyOne level equals: 4. - self assert: hg rootNodes anyOne children anyOne children anyOne children anyOne children anyOne isLeafNode -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testBottomUpDeepGraphBuilding [ - | hg rootNodes leafNodes | - - rootNodes := OrderedCollection new. - leafNodes := OrderedCollection new. - - rootNodes add: 'a'; add: 'b'; add: 'c'. - rootNodes do: [ :model | self recursiveStringFactory: model in: leafNodes to: 7 ]. - - hg := MalHierarchicalGraph with: leafNodes. - - hg aggregation: [ :model | - (model size > 1) - ifTrue: [ model truncateTo: (model size - 1). ] - ifFalse: [ nil ]. - ]. - - self assert: (hg rootNodes size = 3) description: 'Should be exactly 3 root nodes in this graph'. - self assert: (hg nodes size = 3279) description: 'Should be exactly 3279 nodes in total in this graph'. - self assert: (hg rootNodes anyOne children size = 3) description: 'Any rootNode should have exactly 3 children'. - self assert: ((hg nodesFor: (Set with: 'aa')) anyOne parent model = 'a') description: 'Parent of aa should be a'. - self assert: ((hg nodesFor: (Set with: 'ca')) anyOne parent model = 'c') description: 'Parent of ca should be c'. - self assert: ((hg nodesFor: (Set with: 'aca')) anyOne parent model = 'ac') description: 'Parent of ac should be aca'. - self assert: ((hg nodesFor: (Set with: 'aaaaaa')) anyOne parent model = 'aaaaa') description: 'Parent of aaaaaa should be aaaaa'. - self assert: ((hg nodesFor: (Set with: 'abacac')) anyOne parent model = 'abaca') description: 'Parent of abacac should be abaca'. - self assert: ((hg nodesFor: (Set with: 'caabc')) anyOne parent model = 'caab') description: 'Parent of caabc should be caab'. - self assert: ((hg nodesFor: (Set with: 'aaaaaaa')) anyOne isLeafNode) description: 'Node aaaaaaa should be a leaf node'. - self assert: ((hg nodesFor: (Set with: 'aaaaaaa')) anyOne level = 6) description: 'Node aaaaaaa should be on level 6'. - self assert: ((hg nodesFor: (Set with: 'c')) anyOne level = 0) description: 'Node c should be on level 0'. - self assert: ((hg nodesFor: (Set with: 'c')) anyOne isRootNode) description: 'Node c should be a root node'. - self assert: ((hg nodesFor: (Set with: 'bc')) anyOne level = 1) description: 'Node bc should be on level 1'. - self assert: ((hg nodesFor: (Set with: 'acb')) anyOne level = 2) description: 'Node acb should be on level 2'. - self assert: ((hg nodesFor: (Set with: 'caba')) anyOne level = 3) description: 'Node caba should be on level 3'. - self assert: ((hg nodesFor: (Set with: 'bccab')) anyOne level = 4) description: 'Node bccab should be on level 4'. - self assert: ((hg nodesFor: (Set with: 'bcabca')) anyOne level = 5) description: 'Node bcabca should be on level 5'. - self assert: ((hg nodesFor: (Set with: 'caabccc')) anyOne level = 6) description: 'Node caabccc should be on level 6'. -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testBottomUpGraphBuilding [ - | hg rootNodes otherNodes | - - rootNodes := OrderedCollection new. - otherNodes := OrderedCollection new. - - rootNodes add: 1; add: 2; add:3. - otherNodes add: 11; add: 12; add: 13; add: 21; add:22; add: 23; add: 31; add: 32; add: 33. - - hg := MalHierarchicalGraph with: otherNodes. - - hg blockToGetParent: [ :n | - (n / 10 < 1) ifTrue: [ nil ] ifFalse: [(n / (10 raisedTo: (n floorLog: 10))) floor asInteger. ] - ]. - - self assert: (hg rootNodes size = 3) description: 'Should be exactly 3 root nodes in this graph'. - self assert: (hg nodes size = 12) description: 'Should be exactly 12 nodes in total in this graph'. - self assert: (hg rootNodes anyOne children size = 3) description: 'Any rootNode should have exactly 3 children'. - self assert: ((hg nodesFor: (Set with: 11)) anyOne parent model = 1) description: 'Parent of 11 should be 1'. - self assert: ((hg nodesFor: (Set with: 12)) anyOne parent model = 1) description: 'Parent of 12 should be 1'. - self assert: ((hg nodesFor: (Set with: 13)) anyOne parent model = 1) description: 'Parent of 13 should be 1'. - self assert: ((hg nodesFor: (Set with: 21)) anyOne parent model = 2) description: 'Parent of 13 should be 2'. - self assert: ((hg nodesFor: (Set with: 22)) anyOne parent model = 2) description: 'Parent of 13 should be 2'. - self assert: ((hg nodesFor: (Set with: 23)) anyOne parent model = 2) description: 'Parent of 13 should be 2'. - self assert: ((hg nodesFor: (Set with: 31)) anyOne parent model = 3) description: 'Parent of 13 should be 3'. - self assert: ((hg nodesFor: (Set with: 32)) anyOne parent model = 3) description: 'Parent of 13 should be 3'. - self assert: ((hg nodesFor: (Set with: 33)) anyOne parent model = 3) description: 'Parent of 13 should be 3'. - -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testClassBasedApiBottomUp [ - | hg | - hg := MalHierarchicalGraph with: self setupSimpleBottomUpModel. - hg bottomUp: {(MalHgTestModelSimple -> #parent)}. - self assert: hg nodes size equals: 121. - self assert: hg rootNodes size equals: 1. - self assert: hg rootNodes anyOne level equals: 0. - self assert: hg rootNodes anyOne children size equals: 3. - self assert: hg rootNodes anyOne children anyOne level equals: 1. - self assert: hg rootNodes anyOne children anyOne children size equals: 3. - self assert: hg rootNodes anyOne children anyOne children anyOne level equals: 2. - self assert: hg rootNodes anyOne children anyOne children anyOne children size equals: 3. - self assert: hg rootNodes anyOne children anyOne children anyOne children anyOne level equals: 3. - self assert: hg rootNodes anyOne children anyOne children anyOne children anyOne children size equals: 3. - self assert: hg rootNodes anyOne children anyOne children anyOne children anyOne children anyOne level equals: 4. - self assert: hg rootNodes anyOne children anyOne children anyOne children anyOne children anyOne isLeafNode "QsVisualizer show: hg withWeightBlock: [ :e | e entity ]." -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testClassBasedApiTopDown [ - | hg | - hg := MalHierarchicalGraph with: self setupSimpleTopDownModel. - hg topDown: {(MalHgTestModelSimple -> #children)}. - self assert: hg nodes size equals: 121. - self assert: hg rootNodes size equals: 1. - self assert: hg rootNodes anyOne level equals: 0. - self assert: hg rootNodes anyOne children size equals: 3. - self assert: hg rootNodes anyOne children anyOne level equals: 1. - self assert: hg rootNodes anyOne children anyOne children size equals: 3. - self assert: hg rootNodes anyOne children anyOne children anyOne level equals: 2. - self assert: hg rootNodes anyOne children anyOne children anyOne children size equals: 3. - self assert: hg rootNodes anyOne children anyOne children anyOne children anyOne level equals: 3. - self assert: hg rootNodes anyOne children anyOne children anyOne children anyOne children size equals: 3. - self assert: hg rootNodes anyOne children anyOne children anyOne children anyOne children anyOne level equals: 4. - self assert: hg rootNodes anyOne children anyOne children anyOne children anyOne children anyOne isLeafNode "QsVisualizer show: hg withWeightBlock: [ :e | e entity ]." -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testClassBasedBlockApiBottomUp [ - | hg | - hg := MalHierarchicalGraph with: self setupSimpleBottomUpModel. - hg bottomUp: {(MalHgTestModelSimple -> [ :e | e parent ])}. - self assert: hg nodes size equals: 121. - self assert: hg rootNodes size equals: 1. - self assert: hg rootNodes anyOne level equals: 0. - self assert: hg rootNodes anyOne children size equals: 3. - self assert: hg rootNodes anyOne children anyOne level equals: 1. - self assert: hg rootNodes anyOne children anyOne children size equals: 3. - self assert: hg rootNodes anyOne children anyOne children anyOne level equals: 2. - self assert: hg rootNodes anyOne children anyOne children anyOne children size equals: 3. - self assert: hg rootNodes anyOne children anyOne children anyOne children anyOne level equals: 3. - self assert: hg rootNodes anyOne children anyOne children anyOne children anyOne children size equals: 3. - self assert: hg rootNodes anyOne children anyOne children anyOne children anyOne children anyOne level equals: 4. - self assert: hg rootNodes anyOne children anyOne children anyOne children anyOne children anyOne isLeafNode "vis := QsVisualizer with: hg weightBlock: [ :e | e entity ]. - vis averageNodeSize: 100. - vis relativeNodeSizeExtrema: 0.05@1.5. - vis edgeThicknessRange: 0@10. - vis layout: QsLayout. - vis showSplitOn: 2." -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testDeepestLevel [ - | hg rootNodes | - rootNodes := OrderedCollection new. - rootNodes add: 'a'. - hg := MalHierarchicalGraph with: rootNodes. - hg - topDown: [ :entity | - entity size < 3 - ifTrue: [ - | result | - result := Set new. - result add: entity , 'a'. - result add: entity , 'b'. - result ] ]. - self assert: hg deepestLevel equals: 2 -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testEdgePropagationAsymetrical [ - | hg rootNodes relationships | - rootNodes := OrderedCollection new. - rootNodes add: 'a'. - hg := MalHierarchicalGraph with: rootNodes. - hg - blockToGetChildren: [ :entity | - entity size < 3 - ifTrue: [ - | result | - result := Set new. - result add: entity , 'a'. - result add: entity , 'b'. - result ] ]. - relationships := OrderedCollection new. - relationships add: 'abb' -> 'aa'. - hg addEdges: relationships from: [ :r | r key ] to: [ :r | r value ]. - hg propagateEdges. "Testing relationships and their propagandation." - self assert: (hg nodeWrapping: 'ab') outgoing size equals: 1. - self assert: (hg nodeWrapping: 'abb') outgoing size equals: 1. - self assert: (hg nodeWrapping: 'aa') incoming size equals: 2. - self assert: hg edgesPropagated size equals: 1. - self assert: hg edgesNotPropagated size equals: 1 -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testEdgePropagationMultipleRootNodes [ - | hg rootNodes visualizer relationships | - rootNodes := OrderedCollection new. - rootNodes - add: 'a'; - add: 'b'; - add: 'c'. - hg := MalHierarchicalGraph with: rootNodes. - hg - blockToGetChildren: [ :entity | - entity size < 6 - ifTrue: [ - | result | - result := Set new. - result add: entity , 'a'. - result add: entity , 'b'. - result add: entity , 'c'. - result ] ]. - relationships := OrderedCollection new. - relationships add: 'ab' -> 'ba'. "relationships add: ('ab'->'bb'). - relationships add: ('ab'->'bca')." - hg addEdges: relationships sourceBlock: [ :r | r key ] destinationBlock: [ :r | r value ]. - hg propagateEdges. "Testing relationships and their propagandation." - self assert: (hg nodeWrapping: 'a') outgoing size equals: 2. - self assert: (hg nodeWrapping: 'ab') outgoing size equals: 2. - self assert: hg edgesPropagated size equals: 3. - self assert: hg edgesNotPropagated size equals: 1. - self assert: (hg nodeWrapping: 'b') incoming size equals: 2 -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testEdgePropagationMultipleRootNodesAsymetric [ - | hg rootNodes relationships | - rootNodes := OrderedCollection new. - rootNodes - add: 'a'; - add: 'b'; - add: 'c'. - hg := MalHierarchicalGraph with: rootNodes. - hg - blockToGetChildren: [ :entity | - entity size < 6 - ifTrue: [ - | result | - result := Set new. - result add: entity , 'a'. - result add: entity , 'b'. - result add: entity , 'c'. - result ] ]. - relationships := OrderedCollection new. - relationships add: 'ab' -> 'baa'. - hg addEdges: relationships sourceBlock: [ :r | r key ] destinationBlock: [ :r | r value ]. - hg propagateEdges. "Testing relationships and their propagandation." - self assert: (hg nodeWrapping: 'a') outgoing size equals: 3. - self assert: (hg nodeWrapping: 'ab') outgoing size equals: 3. - self assert: hg edgesPropagated size equals: 5. - self assert: hg edgesNotPropagated size equals: 1. - self assert: (hg nodeWrapping: 'b') incoming size equals: 2. - self assert: (hg nodeWrapping: 'baa') incoming size equals: 2. - self assert: (hg nodeWrapping: 'ba') incoming size equals: 2 -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testEdgePropagationSimple [ - | hg rootNodes visualizer relationships | - rootNodes := OrderedCollection new. - rootNodes add: 'a'. - hg := MalHierarchicalGraph with: rootNodes. - hg - blockToGetChildren: [ :entity | - entity size < 3 - ifTrue: [ - | result | - result := Set new. - result add: entity , 'a'. - result add: entity , 'b'. - result ] ]. - relationships := OrderedCollection new. - relationships add: 'abb' -> 'aab'. - hg addEdges: relationships sourceBlock: [ :r | r key ] destinationBlock: [ :r | r value ]. - hg propagateEdges. "Testing relationships and their propagandation." - self assert: (hg nodeWrapping: 'ab') outgoing size equals: 2. - self assert: (hg nodeWrapping: 'abb') outgoing size equals: 2. - self assert: (hg nodeWrapping: 'aa') incoming size equals: 2. - self assert: hg edgesPropagated size equals: 3. - self assert: hg edgesNotPropagated size equals: 1 "hg explore." "visualizer := SnVisualizer show: hg withWeightBlock: [ :e | e size ]." "visualizer := SnVisualizer with: hg weightBlock: [ :e | e size ]." "visualizer showAsTree." "visualizer showSplitOn: 2." "visualizer show: (hg nodesFor: ((Set with: 'a') add: 'b'; add: 'ca'; add: 'cb'; add: 'cc'; yourself))." -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testEmptyHiGraph [ - | hg | - hg := MalHierarchicalGraph with: OrderedCollection new. - self assert: hg nodes isEmpty. - self assert: hg rootNodes isEmpty. - self assert: hg edges isEmpty. -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testGraphAsTuple [ - | hg rootNodes edges hierarchy | - "leafs := #(1 2 3 4 5)." - rootNodes := #(6 7). - hg := MalHierarchicalGraph with: rootNodes. - edges := OrderedCollection new. - edges - add: 1 -> 2; - add: 1 -> 3; - add: 3 -> 4; - add: 2 -> 5. - hierarchy := Dictionary new. - hierarchy - at: 6 put: #(1 2 3); - at: 7 put: #(4 5). - hg topDown: [ :m | hierarchy at: m ifAbsent: [ nil ] ]. - hg addEdges: edges from: [ :e | e key ] to: [ :e | e value ]. - self assert: (hg graph at: 1) size equals: 7. - self assert: (hg graph at: 2) size equals: 4 -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testLevels [ - | hg | - hg := self setupSimpleNumbersHiGraph. - self assert: (hg nodeWrapping: 1) level equals: 0. - self assert: (hg nodeWrapping: 1) isRootNode. - self assert: (hg nodeWrapping: 2) level equals: 0. - self assert: (hg nodeWrapping: 3) level equals: 0. - self assert: (hg nodeWrapping: 34) level equals: 1. - self assert: (hg nodeWrapping: 25) level equals: 1. - self assert: (hg nodeWrapping: 36) level equals: 1. - self assert: (hg nodeWrapping: 12) level equals: 1 -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testNodeWrapping [ - | hg | - hg := self setupSimpleNumbersHiGraph. - self assert: (hg nodeWrapping: 999) equals: nil. - self assert: (hg nodesDict at: 1) equals: (hg nodeWrapping: 1). - self assert: (hg nodesDict at: 24) equals: (hg nodeWrapping: 24) -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testNodesForEntities [ - | hg | - hg := self setupSimpleNumbersHiGraph. - self assert: (hg nodesFor: Set new) isEmpty. - self assert: (hg nodesFor: (Set with: 1)) size equals: 1. - self assert: (hg nodesFor: (Set with: 1)) anyOne model equals: 1. - self - assert: - (hg - nodesFor: - (Set new - add: 1; - add: 2; - yourself)) size - equals: 2. - self - assert: - (hg - nodesFor: - (Set new - add: 1; - add: 2; - add: 999; - yourself)) size - equals: 2. - self - assert: - (hg - nodesFor: - (Set new - add: 1; - add: 2; - add: 34; - yourself)) size - equals: 3. - self - assert: - (hg - nodesFor: - (Set new - add: 1; - add: 12; - add: 34; - add: 19; - yourself)) size - equals: 4 -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testRecursiveChildren [ - | hg | - hg := self setupSimpleTopDownModelHiGraph. - - "Assert that there are more nodes in the highraph in total than some rootNodes sub graph." - self assert: hg nodes size > hg rootNodes anyOne recursiveChildren size. - - "Assert that the total size of nodes in the higraph is equal to all rootNodes and their recursive children." - self - assert: hg nodes size - equals: hg rootNodes size + (hg rootNodes inject: 0 into: [ :sum :each | sum + each recursiveChildren size ]) -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testSimpleApiBottomUp [ - | hg | - hg := MalHierarchicalGraph with: self setupSimpleBottomUpModel. - hg bottomUp: #parent. - self assert: hg nodes size equals: 121. - self assert: hg rootNodes size equals: 1. - self assert: hg rootNodes anyOne level equals: 0. - self assert: hg rootNodes anyOne children size equals: 3. - self assert: hg rootNodes anyOne children anyOne level equals: 1. - self assert: hg rootNodes anyOne children anyOne children size equals: 3. - self assert: hg rootNodes anyOne children anyOne children anyOne level equals: 2. - self assert: hg rootNodes anyOne children anyOne children anyOne children size equals: 3. - self assert: hg rootNodes anyOne children anyOne children anyOne children anyOne level equals: 3. - self assert: hg rootNodes anyOne children anyOne children anyOne children anyOne children size equals: 3. - self assert: hg rootNodes anyOne children anyOne children anyOne children anyOne children anyOne level equals: 4. - self assert: hg rootNodes anyOne children anyOne children anyOne children anyOne children anyOne isLeafNode -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testSimpleApiTopDown [ - | hg | - hg := MalHierarchicalGraph with: self setupSimpleTopDownModel. - hg topDown: #children. - self assert: hg nodes size equals: 121. - self assert: hg rootNodes size equals: 1. - self assert: hg rootNodes anyOne level equals: 0. - self assert: hg rootNodes anyOne children size equals: 3. - self assert: hg rootNodes anyOne children anyOne level equals: 1. - self assert: hg rootNodes anyOne children anyOne children size equals: 3. - self assert: hg rootNodes anyOne children anyOne children anyOne level equals: 2. - self assert: hg rootNodes anyOne children anyOne children anyOne children size equals: 3. - self assert: hg rootNodes anyOne children anyOne children anyOne children anyOne level equals: 3. - self assert: hg rootNodes anyOne children anyOne children anyOne children anyOne children size equals: 3. - self assert: hg rootNodes anyOne children anyOne children anyOne children anyOne children anyOne level equals: 4. - self assert: hg rootNodes anyOne children anyOne children anyOne children anyOne children anyOne isLeafNode -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testSimpleEdgeApi [ - | hg rootNodes edges | - rootNodes := OrderedCollection new. - rootNodes - add: 'a'; - add: 'b'; - add: 'c'. - hg := MalHierarchicalGraph with: rootNodes. - hg - topDown: [ :entity | - entity size < 6 - ifTrue: [ - | result | - result := Set new. - result add: entity , 'a'. - result add: entity , 'b'. - result add: entity , 'c'. - result ] ]. - edges := OrderedCollection new. - edges add: 'ab' -> 'ba'. - edges add: 'ab' -> 'bb'. - edges add: 'a' -> 'b'. - edges add: 'a' -> 'c'. - edges add: 'a' -> 'ab'. - hg addEdges: edges from: #key to: #value. - self assert: (hg nodeWrapping: 'a') outgoing size equals: 3. - self assert: (hg nodeWrapping: 'ab') outgoing size equals: 2. - self assert: (hg nodeWrapping: 'ba') outgoing isEmpty. - self assert: (hg nodeWrapping: 'ba') incoming size equals: 1. - self assert: (hg nodeWrapping: 'b') incoming size equals: 1. - self assert: (hg nodeWrapping: 'c') incoming size equals: 1. - self assert: (hg nodeWrapping: 'ab') incoming size equals: 1. - self assert: (hg nodeWrapping: 'cb') incoming isEmpty -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testSimpleEdgeApiWithModel [ - | hg rootNodes edges | - rootNodes := OrderedCollection new. - rootNodes - add: 'a'; - add: 'b'; - add: 'c'. - hg := MalHierarchicalGraph with: rootNodes. - hg - topDown: [ :entity | - entity size < 6 - ifTrue: [ - | result | - result := Set new. - result add: entity , 'a'. - result add: entity , 'b'. - result add: entity , 'c'. - result ] ]. - edges := OrderedCollection new. - edges add: (MalHgTestEdge from: 'ab' to: 'ba'). - edges add: (MalHgTestEdge from: 'ab' to: 'bb'). - edges add: (MalHgTestEdge from: 'a' to: 'b'). - edges add: (MalHgTestEdge from: 'a' to: 'c'). - edges add: (MalHgTestEdge from: 'a' to: 'ab'). - hg addEdges: edges from: {(MalHgTestEdge -> #from)} to: {(MalHgTestEdge -> #to)}. - self assert: (hg nodeWrapping: 'a') outgoing size equals: 3. - self assert: (hg nodeWrapping: 'ab') outgoing size equals: 2. - self assert: (hg nodeWrapping: 'ba') outgoing isEmpty. - self assert: (hg nodeWrapping: 'ba') incoming size equals: 1. - self assert: (hg nodeWrapping: 'b') incoming size equals: 1. - self assert: (hg nodeWrapping: 'c') incoming size equals: 1. - self assert: (hg nodeWrapping: 'ab') incoming size equals: 1. - self assert: (hg nodeWrapping: 'cb') incoming isEmpty. - hg resetEdges. - hg addEdges: edges from: {(MalHgTestEdge -> [ :e | e from ])} to: {(MalHgTestEdge -> [ :e | e to ])}. - self assert: (hg nodeWrapping: 'a') outgoing size equals: 3. - self assert: (hg nodeWrapping: 'ab') outgoing size equals: 2. - self assert: (hg nodeWrapping: 'ba') outgoing isEmpty. - self assert: (hg nodeWrapping: 'ba') incoming size equals: 1. - self assert: (hg nodeWrapping: 'b') incoming size equals: 1. - self assert: (hg nodeWrapping: 'c') incoming size equals: 1. - self assert: (hg nodeWrapping: 'ab') incoming size equals: 1. - self assert: (hg nodeWrapping: 'cb') incoming isEmpty. - hg resetEdges. "This is not elegant, but it has to work anyway." - hg - addEdges: edges - from: - {(MalHgTestEdge -> #from). - (MalHgTestEdge -> #from)} - to: - {(MalHgTestEdge -> #to). - (MalHgTestEdge -> #to)}. - self assert: (hg nodeWrapping: 'a') outgoing size equals: 3. - self assert: (hg nodeWrapping: 'ab') outgoing size equals: 2. - self assert: (hg nodeWrapping: 'ba') outgoing isEmpty. - self assert: (hg nodeWrapping: 'ba') incoming size equals: 1. - self assert: (hg nodeWrapping: 'b') incoming size equals: 1. - self assert: (hg nodeWrapping: 'c') incoming size equals: 1. - self assert: (hg nodeWrapping: 'ab') incoming size equals: 1. - self assert: (hg nodeWrapping: 'cb') incoming isEmpty -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testSimpleModel [ - | root | - root := self setupSimpleTopDownModel. "We have four levels" - self assert: root children size equals: 3. - self assert: root children anyOne children size equals: 3. - self assert: root children anyOne children anyOne children size equals: 3. - self assert: root children anyOne children anyOne children anyOne children size equals: 3. - self assert: root children anyOne children anyOne children anyOne children anyOne children size equals: 0. "We have a hierarchy chain" - self assert: root children anyOne children anyOne children anyOne parent parent parent equals: root. "root is root" - self assert: root parent equals: nil -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testSingleNodeHiGraph [ - | hg | - hg := MalHierarchicalGraph with: (OrderedCollection with: 'someBaseEntity'). - self assert: hg nodes size equals: 1 -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testTopDownDeepGraphBuilding [ - | hg rootNodes | - - rootNodes := OrderedCollection new. - rootNodes add: 'a'; add: 'b'; add: 'c'. - - hg := MalHierarchicalGraph with: rootNodes. - - hg topDown: [ :model | - (model size < 7) - ifTrue: [ - | result | - result := OrderedCollection new. - result add: (model, 'a'). - result add: (model, 'b'). - result add: (model, 'c'). - result. - ] - ]. - - "Testing nodes and hierarchy." - self assert: (hg rootNodes size = 3) description: 'Should be exactly 3 root nodes in this graph'. - self assert: (hg nodes size = 3279) description: 'Should be exactly 3279 nodes in total in this graph'. - self assert: (hg rootNodes anyOne children size = 3) description: 'Any rootNode should have exactly 3 children'. - self assert: ((hg nodesFor: (Set with: 'aa')) anyOne parent model = 'a') description: 'Parent of aa should be a'. - self assert: ((hg nodesFor: (Set with: 'ca')) anyOne parent model = 'c') description: 'Parent of ca should be c'. - self assert: ((hg nodesFor: (Set with: 'aca')) anyOne parent model = 'ac') description: 'Parent of ac should be aca'. - self assert: ((hg nodesFor: (Set with: 'aaaaaa')) anyOne parent model = 'aaaaa') description: 'Parent of aaaaaa should be aaaaa'. - self assert: ((hg nodesFor: (Set with: 'abacac')) anyOne parent model = 'abaca') description: 'Parent of abacac should be abaca'. - self assert: ((hg nodesFor: (Set with: 'caabc')) anyOne parent model = 'caab') description: 'Parent of caabc should be caab'. - self assert: ((hg nodesFor: (Set with: 'aaaaaaa')) anyOne isLeafNode) description: 'Node aaaaaaa should be a leaf node'. - self assert: ((hg nodesFor: (Set with: 'aaaaaaa')) anyOne level = 6) description: 'Node aaaaaaa should be on level 6'. - self assert: ((hg nodesFor: (Set with: 'c')) anyOne level = 0) description: 'Node c should be on level 0'. - self assert: ((hg nodesFor: (Set with: 'c')) anyOne isRootNode) description: 'Node c should be a root node'. - self assert: ((hg nodesFor: (Set with: 'bc')) anyOne level = 1) description: 'Node bc should be on level 1'. - self assert: ((hg nodesFor: (Set with: 'acb')) anyOne level = 2) description: 'Node acb should be on level 2'. - self assert: ((hg nodesFor: (Set with: 'caba')) anyOne level = 3) description: 'Node caba should be on level 3'. - self assert: ((hg nodesFor: (Set with: 'bccab')) anyOne level = 4) description: 'Node bccab should be on level 4'. - self assert: ((hg nodesFor: (Set with: 'bcabca')) anyOne level = 5) description: 'Node bcabca should be on level 5'. - self assert: ((hg nodesFor: (Set with: 'caabccc')) anyOne level = 6) description: 'Node caabccc should be on level 6'. - -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testTopDownGraphBuilding [ - | hg rootNodes | - - rootNodes := OrderedCollection new. - - rootNodes add: 1; add: 2; add:3. - - hg := MalHierarchicalGraph with: rootNodes. - - hg topDown: [ :n | - (n = 1 or: (n = 2 or: n = 3)) - ifTrue: [ - | result | - result := Set new. - result add: ((n asString , '1') asInteger). - result add: ((n asString , '2') asInteger). - result add: ((n asString , '3') asInteger). - result. - ] - ]. - - self assert: (hg rootNodes size = 3) description: 'Should be exactly 3 root nodes in this graph'. - self assert: (hg nodes size = 12) description: 'Should be exactly 12 nodes in total in this graph'. - self assert: (hg rootNodes anyOne children size = 3) description: 'Any rootNode should have exactly 3 children'. - self assert: ((hg nodesFor: (Set with: 11)) anyOne parent model = 1) description: 'Parent of 11 should be 1'. - self assert: ((hg nodesFor: (Set with: 12)) anyOne parent model = 1) description: 'Parent of 12 should be 1'. - self assert: ((hg nodesFor: (Set with: 13)) anyOne parent model = 1) description: 'Parent of 13 should be 1'. - self assert: ((hg nodesFor: (Set with: 21)) anyOne parent model = 2) description: 'Parent of 13 should be 2'. - self assert: ((hg nodesFor: (Set with: 22)) anyOne parent model = 2) description: 'Parent of 13 should be 2'. - self assert: ((hg nodesFor: (Set with: 23)) anyOne parent model = 2) description: 'Parent of 13 should be 2'. - self assert: ((hg nodesFor: (Set with: 31)) anyOne parent model = 3) description: 'Parent of 13 should be 3'. - self assert: ((hg nodesFor: (Set with: 32)) anyOne parent model = 3) description: 'Parent of 13 should be 3'. - self assert: ((hg nodesFor: (Set with: 33)) anyOne parent model = 3) description: 'Parent of 13 should be 3'. - -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testVerySimpleHierarchicalGraph [ - | hg rootNodes edges hierarchy | - "leafs := #(1 2 3 4 5)." - rootNodes := #(6 7). - hg := MalHierarchicalGraph with: rootNodes. - edges := OrderedCollection new. - edges - add: 1 -> 2; - add: 1 -> 3; - add: 3 -> 4; - add: 2 -> 5. - hierarchy := Dictionary new. - hierarchy - at: 6 put: #(1 2 3); - at: 7 put: #(4 5). - hg topDown: [ :m | hierarchy at: m ifAbsent: [ nil ] ]. - hg addEdges: edges from: [ :e | e key ] to: [ :e | e value ]. - self assert: hg edges size equals: 4. - hg propagateEdges. - self assert: hg edges size > 0. - self assert: hg edges size equals: 10. - self assert: (hg edges contains: [ :rel | rel from model = 6 and: [ rel to model = 7 ] ]) -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testfindEdge [ - | hg rootNodes edges hierarchy | - - "leafs := #(1 2 3 4 5)." - rootNodes := #(6 7). - - hg := MalHierarchicalGraph with: rootNodes. - - edges := OrderedCollection new. - edges - add: (1 -> 2); - add: (1 -> 3); - add: (3 -> 4); - add: (2 -> 5). - - hierarchy := Dictionary new. - hierarchy - at: 6 put: #(1 2 3); - at: 7 put: #(4 5). - - hg topDown: [ :m | - hierarchy at: m ifAbsent: [ nil ]. - ]. - - hg addEdges: edges - from: [:e | e key] - to: [:e | e value]. - - hg propagateEdges. - - self assert: (hg edges contains: [ :e | e = (hg findEdge: (1 -> 2)) ]). - - -] - -{ #category : #tests } -MalHierarchicalGraphTests >> testfindNode [ - | hg | - hg := MalHierarchicalGraph with: self setupSimpleTopDownModel. - hg topDown: {(MalHgTestModelSimple -> #children)}. - self assert: hg rootNodes size equals: 1. - self assert: (hg findNode: hg rootNodes anyOne model) equals: hg rootNodes anyOne -] diff --git a/src-archive/Moose-Tests-Algos-HierarchicalGraph/package.st b/src-archive/Moose-Tests-Algos-HierarchicalGraph/package.st deleted file mode 100644 index eed52626f..000000000 --- a/src-archive/Moose-Tests-Algos-HierarchicalGraph/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Moose-Tests-Algos-HierarchicalGraph' } diff --git a/src-archive/Moose-Tests-Algos-Kontractor/MalKontractorTest.class.st b/src-archive/Moose-Tests-Algos-Kontractor/MalKontractorTest.class.st deleted file mode 100644 index ba25a26d0..000000000 --- a/src-archive/Moose-Tests-Algos-Kontractor/MalKontractorTest.class.st +++ /dev/null @@ -1,76 +0,0 @@ -Class { - #name : #MalKontractorTest, - #superclass : #TestCase, - #category : #'Moose-Tests-Algos-Kontractor' -} - -{ #category : #testing } -MalKontractorTest >> testCutAndContract [ - "self debug: #testCutAndContract" - - self - assert: (MalKontractor new - wordsToBeRemoved: #('Seaside' 'Citezen') ; - removeWordsIn: 'Citezen-hello') - equals: '-hello'. - - self - assert: (MalKontractor new - wordsToBeRemoved: #('Seaside' 'Citezen') ; - removeWordsIn: 'Citezen-hello-Seaside') - equals: '-hello-' - -] - -{ #category : #testing } -MalKontractorTest >> testFrequency [ - self assert: ((MalKontractor toSize: 3) letterFrequency: 'h') equals: 0.737 -] - -{ #category : #testing } -MalKontractorTest >> testNew [ - | k | - k := MalKontractor upTo: 3. - self assert: k upTo equals: 3 -] - -{ #category : #testing } -MalKontractorTest >> testReduce [ - "self debug: #testReduce" - - self assert: ((MalKontractor upTo: 4) reduce: 'hello') equals: 'hllo'. - self assert: ((MalKontractor upTo: 3) reduce: 'hello') equals: 'hlo'. - self assert: ((MalKontractor upTo: 3) reduce: 'hell!-o') equals: 'hlo' -] - -{ #category : #testing } -MalKontractorTest >> testReduceInPresenceOfChop [ - "self debug: #testReduceInPresenceOfChop" - - self assert: ((MalKontractor new wordsToBeRemoved: #('Seaside') ; upTo: 4) reduce: 'SeasidehelloSeaside') equals: 'hllo' -] - -{ #category : #testing } -MalKontractorTest >> testReduceInPresenceOfSpace [ - "self debug: #testReduceInPresenceOfSpace" - - self assert: (MalKontractor reduce: 'hello world' upTo: 6) equals: 'howold'. - self assert: (MalKontractor reduce: 'hello world' upTo: 5) equals: 'howod' -] - -{ #category : #testing } -MalKontractorTest >> testReduceUnknownCharacter [ - "self debug: #testReduce" - - "J is not in the map." - - self assert: ((MalKontractor upTo: 4) reduce: 'Jieiei') equals: 'Jiii'. - self assert: ((MalKontractor upTo: 4) reduce: 'Jieieriz') equals: 'iiiz'. - self assert: ((MalKontractor upTo: 4) reduce: 'Jieierjg') equals: 'iijg' -] - -{ #category : #testing } -MalKontractorTest >> testRemoveOne [ - self assert: ((MalKontractor upTo: 3) removeOne: 'hello') equals: 'hllo'. - self assert: ((MalKontractor upTo: 3) removeOne: 'hllo') equals: 'hlo' -] diff --git a/src-archive/Moose-Tests-Algos-Kontractor/package.st b/src-archive/Moose-Tests-Algos-Kontractor/package.st deleted file mode 100644 index a32436e0c..000000000 --- a/src-archive/Moose-Tests-Algos-Kontractor/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Moose-Tests-Algos-Kontractor' } diff --git a/src-archive/Moose-Tests-DistributionMap/DistributionMapExampleTest.class.st b/src-archive/Moose-Tests-DistributionMap/DistributionMapExampleTest.class.st deleted file mode 100644 index cdf899572..000000000 --- a/src-archive/Moose-Tests-DistributionMap/DistributionMapExampleTest.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #DistributionMapExampleTest, - #superclass : #TestCase, - #category : #'Moose-Tests-DistributionMap' -} - -{ #category : #history } -DistributionMapExampleTest class >> lastStoredRun [ - ^ ((Dictionary new) add: (#errors->((Set new))); add: (#passed->((Set new) add: #testSample; yourself)); add: (#failures->((Set new))); add: (#timeStamp->(DateAndTime basicNew instVarAt: 1 put: 623; instVarAt: 2 put: (Duration seconds: 28800 nanoSeconds: 0); instVarAt: 3 put: 2456089; instVarAt: 4 put: 919000001; yourself)); yourself) -] - -{ #category : #tests } -DistributionMapExampleTest >> testSample [ - - | viewRenderer | - viewRenderer := (DistributionMapExample new properties: DistributionMapExample sampleProperties; - propertiesMap: DistributionMapExample sampleMap; - propertyBlock: DistributionMapExample sampleBlock; - elements: DistributionMapExample sampleOrderedElements; - render: Collection withAllSubclasses). - - self assert: (viewRenderer class == RTMondrian). - "self shouldnt: [ viewRenderer getRenderedForm ] raise: Error." - self shouldnt: [ viewRenderer open delete ] raise: Error. -] diff --git a/src-archive/Moose-Tests-DistributionMap/MooseModelDistributionMapExtensionsTest.class.st b/src-archive/Moose-Tests-DistributionMap/MooseModelDistributionMapExtensionsTest.class.st deleted file mode 100644 index 4ec64ddfa..000000000 --- a/src-archive/Moose-Tests-DistributionMap/MooseModelDistributionMapExtensionsTest.class.st +++ /dev/null @@ -1,37 +0,0 @@ -Class { - #name : #MooseModelDistributionMapExtensionsTest, - #superclass : #TestCase, - #category : #'Moose-Tests-DistributionMap' -} - -{ #category : #util } -MooseModelDistributionMapExtensionsTest >> model [ - " to debug and avoid caching behavior: LANPackageTestResource reset." - ^ LANPackageTestResource current model -] - -{ #category : #tests } -MooseModelDistributionMapExtensionsTest >> testPropertiesForDistributionMap [ - | model | - model := self model. - self assert: (model resultOfProperty: #numberOfLinesOfCode appliedTo: model allClasses first class) isNumber. - self assert: (model resultOfProperty: #numberOfLinesOfCode appliedTo: model allClasses first) isNil. - - self assert: (model classConcernedByProperty: #numberOfLinesOfCode appliedTo: FamixClass) isNil. - -] - -{ #category : #tests } -MooseModelDistributionMapExtensionsTest >> testPropertiesOnEmpty [ - - self assert: DistributionMap new properties isEmpty -] - -{ #category : #tests } -MooseModelDistributionMapExtensionsTest >> testTitleBlock [ - | dm | - dm := DistributionMap new. - self assert: (dm elementTitleBlock value: 'My default name') equals: 'My default name'. - dm elementTitleBlock: [ :each | 'My new element name' ]. - self assert: (dm elementTitleBlock value: 'asd') equals: 'My new element name' -] diff --git a/src-archive/Moose-Tests-DistributionMap/MooseModelDistributionMapRenderingTest.class.st b/src-archive/Moose-Tests-DistributionMap/MooseModelDistributionMapRenderingTest.class.st deleted file mode 100644 index 9cce2968f..000000000 --- a/src-archive/Moose-Tests-DistributionMap/MooseModelDistributionMapRenderingTest.class.st +++ /dev/null @@ -1,55 +0,0 @@ -Class { - #name : #MooseModelDistributionMapRenderingTest, - #superclass : #TestCase, - #instVars : [ - 'window' - ], - #category : #'Moose-Tests-DistributionMap' -} - -{ #category : #running } -MooseModelDistributionMapRenderingTest >> tearDown [ - window ifNotNil: [ window delete. window := nil ] -] - -{ #category : #tests } -MooseModelDistributionMapRenderingTest >> testRenderEmpty [ - - | dm | - dm := DistributionMap new. - self shouldnt: [ window := dm open ] raise: Error -] - -{ #category : #tests } -MooseModelDistributionMapRenderingTest >> testRenderingFromExample [ - - self shouldnt: - [ window := - (DistributionMap - onContainers: DistributionMap withAllSubclasses - elements: #methods - properties: #isAbstract) open ] raise: Error -] - -{ #category : #tests } -MooseModelDistributionMapRenderingTest >> testRenderingFromExample3ShowingContainer [ - - self shouldnt: - [ window := (DistributionMap - onContainers: Collection withAllSubclasses - elements: #allInstVarNames - properties: [:element | element size > 5]) - title: 'Collection subclasses and their instance variables'; - open ] raise: Error -] - -{ #category : #tests } -MooseModelDistributionMapRenderingTest >> testRenderingFromExampleOpening [ - - self shouldnt: - [ window := (DistributionMap - onContainers: DistributionMap withAllSubclasses - elements: #methods - properties: #isAbstract) open ] raise: Error. - -] diff --git a/src-archive/Moose-Tests-DistributionMap/package.st b/src-archive/Moose-Tests-DistributionMap/package.st deleted file mode 100644 index 9157ebf00..000000000 --- a/src-archive/Moose-Tests-DistributionMap/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Moose-Tests-DistributionMap' } diff --git a/src-archive/Moose-Tests-Hismo/HismoEntityVersionTest.class.st b/src-archive/Moose-Tests-Hismo/HismoEntityVersionTest.class.st deleted file mode 100644 index 63f601f52..000000000 --- a/src-archive/Moose-Tests-Hismo/HismoEntityVersionTest.class.st +++ /dev/null @@ -1,17 +0,0 @@ -Class { - #name : #HismoEntityVersionTest, - #superclass : #TestCase, - #category : #'Moose-Tests-Hismo' -} - -{ #category : #tests } -HismoEntityVersionTest >> testIsStub [ - | versionEntity version | - versionEntity := FamixClass new. - version := HismoEntityVersion new. - version versionEntity: versionEntity. - self assert: version isStub not. - - versionEntity isStub: true. - self assert: version isStub -] diff --git a/src-archive/Moose-Tests-Hismo/HismoTest.class.st b/src-archive/Moose-Tests-Hismo/HismoTest.class.st deleted file mode 100644 index 904126585..000000000 --- a/src-archive/Moose-Tests-Hismo/HismoTest.class.st +++ /dev/null @@ -1,522 +0,0 @@ -Class { - #name : #HismoTest, - #superclass : #TestCase, - #instVars : [ - 'testData' - ], - #category : #'Moose-Tests-Hismo' -} - -{ #category : #resources } -HismoTest class >> resources [ - ^ Array with: MooseHismoSampleData -] - -{ #category : #setup } -HismoTest >> expectedFailures [ - ^ #(testYesterdaysWeather) -] - -{ #category : #'testing - simple scenario' } -HismoTest >> readme [ - "These tests were added by Alexandre.Bergel 3/27/2009 21:55 - They may be trivial, but they provide simple scenarios" -] - -{ #category : #setup } -HismoTest >> setUp [ - MooseModel resetMeta. - testData := MooseHismoSampleData current -] - -{ #category : #'testing - model history' } -HismoTest >> testAttributeAndMethodHistoriesBelongsTo [ - testData simpleHistory allClassHistories - do: [ :eachHistory | - eachHistory attributeHistories do: [ :each | self assert: each belongsTo equals: eachHistory ]. - eachHistory methodHistories do: [ :each | self assert: each belongsTo equals: eachHistory ] ] -] - -{ #category : #'testing - model history' } -HismoTest >> testAttributeHistoriesCreation [ - self assert: testData simpleHistory allAttributeHistories size equals: 8. - self - assert: - (testData simpleHistory allAttributeHistories entityNamed: #'aNamespace::ClassC.attributeC1') first versionEntity - mooseModel - equals: testData simpleModel3. - self - assert: - (testData simpleHistory allAttributeHistories entityNamed: #'aNamespace::ClassC.attributeC1') last versionEntity - mooseModel - equals: testData simpleModel4 -] - -{ #category : #'testing - history group' } -HismoTest >> testBasicGroupEquality [ - self assert: HismoHistoryGroup new equals: HismoHistoryGroup new. - self deny: HismoHistoryGroup new = MooseGroup new -] - -{ #category : #'testing - class history' } -HismoTest >> testClassEvery2VersionsHistoryDo [ - (testData simpleHistory allClassHistories entityNamed: #aNamespace::ClassA) - every2VersionsHistoryDo: [ :each | - self assert: each size equals: 2. - self assert: each first < each last ] -] - -{ #category : #'testing - model history' } -HismoTest >> testClassHistoriesCreation [ - self assert: testData simpleHistory allClassHistories size equals: 6. - self - assert: (testData simpleHistory allClassHistories entityNamed: #aNamespace::ClassA) first versionEntity mooseModel - equals: testData simpleModel1. - self - assert: (testData simpleHistory allClassHistories entityNamed: #aNamespace::ClassA) last versionEntity mooseModel - equals: testData simpleModel5 -] - -{ #category : #'testing - namespace history' } -HismoTest >> testClassInNamespaceHistories [ - self assert: (testData simpleHistory allNamespaceHistories entityNamed: #aNamespace) classHistories size equals: 5. - (testData simpleHistory allNamespaceHistories entityNamed: #aNamespace) classHistories - do: [ :each | self assert: each belongsTo equals: (testData simpleHistory allNamespaceHistories entityNamed: #aNamespace) ] -] - -{ #category : #'testing - package history' } -HismoTest >> testClassInPackageHistories [ - self assert: (testData simpleHistory allPackageHistories entityNamed: #aPackage) classHistories size equals: 2. - (testData simpleHistory allPackageHistories entityNamed: #aPackage) classHistories - do: [ :each | self assert: each parentPackage equals: (testData simpleHistory allPackageHistories entityNamed: #aPackage) ] -] - -{ #category : #'testing - statistics' } -HismoTest >> testCorrelation [ - - | classHistories v classHistoryA | - classHistories := testData simpleHistory allClassHistories. - classHistoryA := classHistories entityNamed: #'aNamespace::ClassC'. - self assert: ((v := classHistoryA correlationOf: #numberOfLinesOfCode and: #numberOfMethods) closeTo: 0.9948). - - self assert: ((classHistoryA correlationOf: #numberOfMethods and: #numberOfLinesOfCode) closeTo: v). - - self assert: ((classHistoryA correlationOf: #numberOfMethods and: #numberOfMethods) closeTo: 1). - - self assert: ((classHistoryA correlationOf: #numberOfMethods and: [ :c | c numberOfMethods negated ]) closeTo: -1) -] - -{ #category : #'testing - statistics' } -HismoTest >> testCorrelation2 [ - - | packageHistories | - packageHistories := testData simpleHistory allPackageHistories. - - "Raise en error since the number of classes and methods are 0" - self - should: [(packageHistories at: 1) correlationOf: #numberOfClasses and: #numberOfMethods] - raise: Error. -] - -{ #category : #'testing - model history' } -HismoTest >> testDayFly [ - - self - assert: - (testData simpleHistory allClassHistories entityNamed: - #'aNamespace::anotherNamespace::ClassA') isDayFly. - self - assert: - (testData simpleHistory allAttributeHistories entityNamed: - #'aNamespace::ClassC.attributeC2') isDayFly. - self - assert: - (testData simpleHistory allMethodHistories entityNamed: - #'aNamespace::ClassC.methodC3()') isDayFly. - self - assert: - (testData simpleHistory allNamespaceHistories entityNamed: - #'aNamespace::anotherNamespace') isDayFly. - ^testData simpleHistory -] - -{ #category : #'testing - model history' } -HismoTest >> testEvery2VersionsHistoryDo [ - testData simpleHistory - every2VersionsHistoryDo: [ :each | - self assert: each size equals: 2. - self assert: each first < each last. - self assert: each last > each first ] -] - -{ #category : #'testing - history group' } -HismoTest >> testGroupHistory [ - "This test checks that all the group are from the right type of group" - - self assert: testData simpleHistory allClassHistories class equals: HismoClassHistoryGroup. - self assert: testData simpleHistory allMethodHistories class equals: HismoMethodHistoryGroup. - self assert: testData simpleHistory allNamespaceHistories class equals: HismoNamespaceHistoryGroup. - self assert: testData simpleHistory allPackageHistories class equals: HismoHistoryGroup. - self assert: testData simpleHistory allAttributeHistories class equals: HismoHistoryGroup -] - -{ #category : #'testing - model history' } -HismoTest >> testInheritanceHistoriesCreation [ - self assert: testData simpleHistory allInheritanceDefinitionHistories size equals: 5. - self - assert: testData simpleHistory allInheritanceDefinitionHistories printString - equals: 'All Inheritance Definition Histories (5 HismoInheritanceDefinitionHistories)'. - testData simpleHistory allInheritanceDefinitionHistories - do: [ :each | - self assert: (testData simpleHistory allClassHistories includes: each superHistory). - self assert: (testData simpleHistory allClassHistories includes: each subHistory) ] -] - -{ #category : #'testing - class history' } -HismoTest >> testMethodInClassHistories [ - self assert: (testData simpleHistory allClassHistories entityNamed: #aNamespace::ClassA) methodHistories size equals: 2 -] - -{ #category : #'testing - model history' } -HismoTest >> testMethodsHistoriesCreation [ - self assert: testData simpleHistory allMethodHistories size equals: 8. - self - assert: - (testData simpleHistory allMethodHistories entityNamed: #'aNamespace::ClassA.methodA1()') first versionEntity mooseModel - equals: testData simpleModel1. - self - assert: - (testData simpleHistory allMethodHistories entityNamed: #'aNamespace::ClassA.methodA1()') last versionEntity mooseModel - equals: testData simpleModel5 -] - -{ #category : #'testing - model history' } -HismoTest >> testModelHistoryCreation [ - self assert: testData simpleHistory versions size equals: 5. - self assert: testData simpleHistory versions first versionEntity == testData simpleModel1. - self assert: testData simpleHistory versions first referenceVersion == testData simpleHistory versions first. - self assert: testData simpleHistory versions last versionEntity == testData simpleModel5. - self assert: testData simpleHistory versions last referenceVersion == testData simpleHistory versions last. - ^ testData simpleHistory -] - -{ #category : #'testing - model history' } -HismoTest >> testNamespaceHistoriesCreation [ - self assert: testData simpleHistory allNamespaceHistories size equals: 2. - self - assert: (testData simpleHistory allNamespaceHistories entityNamed: #aNamespace) first versionEntity mooseModel - equals: testData simpleModel1. - self - assert: (testData simpleHistory allNamespaceHistories entityNamed: #aNamespace) last versionEntity mooseModel - equals: testData simpleModel5. - self - assert: - (testData simpleHistory allNamespaceHistories entityNamed: #aNamespace::anotherNamespace) first versionEntity mooseModel - equals: testData simpleModel4. - self - assert: - (testData simpleHistory allNamespaceHistories entityNamed: #aNamespace::anotherNamespace) last versionEntity mooseModel - equals: testData simpleModel4 -] - -{ #category : #'testing - namespace history' } -HismoTest >> testNamespaceInNamespaceHistories [ - self assert: (testData simpleHistory allNamespaceHistories entityNamed: #aNamespace) namespaceHistories size equals: 1. - self assert: (testData simpleHistory allNamespaceHistories entityNamed: #aNamespace) belongsTo isNil. - self - assert: (testData simpleHistory allNamespaceHistories entityNamed: #aNamespace::anotherNamespace) belongsTo - equals: (testData simpleHistory allNamespaceHistories entityNamed: #aNamespace) -] - -{ #category : #'testing - model history' } -HismoTest >> testPackageHistoriesCreation [ - self assert: testData simpleHistory allPackageHistories size equals: 4. - self - assert: testData simpleHistory allPackageHistories printString - equals: 'All Package Histories (4 HismoPackageHistories)'. - self - assert: (testData simpleHistory allPackageHistories entityNamed: #aPackage) first versionEntity mooseModel - equals: testData simpleModel1. - self - assert: (testData simpleHistory allPackageHistories entityNamed: #aPackage) last versionEntity mooseModel - equals: testData simpleModel5. - self - assert: (testData simpleHistory allPackageHistories entityNamed: #anotherPackage) first versionEntity mooseModel - equals: testData simpleModel2. - self - assert: (testData simpleHistory allPackageHistories entityNamed: #anotherPackage) last versionEntity mooseModel - equals: testData simpleModel3 -] - -{ #category : #'testing - package history' } -HismoTest >> testPackageInPackageHistories [ - self assert: (testData simpleHistory allPackageHistories entityNamed: #aPackage) packageHistories size equals: 2. - self - assert: (testData simpleHistory allPackageHistories entityNamed: #'aPackage.yetAnotherPackage') parentPackage - equals: (testData simpleHistory allPackageHistories entityNamed: #aPackage) -] - -{ #category : #'testing - model history' } -HismoTest >> testPersistent [ - - self - assert: - (testData simpleHistory allClassHistories entityNamed: - #'aNamespace::ClassA') isPersistent. - self - assert: - (testData simpleHistory allMethodHistories entityNamed: - #'aNamespace::ClassA.methodA1()') isPersistent. - self - assert: - (testData simpleHistory allAttributeHistories entityNamed: - #'aNamespace::ClassA.attributeA1') isPersistent. - self - assert: - (testData simpleHistory allNamespaceHistories entityNamed: #aNamespace) - isPersistent -] - -{ #category : #'testing - history group' } -HismoTest >> testPrintOn [ - self assert: HismoHistoryGroup new printString equals: 'Group (0 entities)' -] - -{ #category : #'testing - model history' } -HismoTest >> testReferenceHistory [ - self assert: testData simpleHistory referenceHistory == testData simpleHistory. - self assert: testData simpleHistory referenceHistory printString equals: 'Sample history (5)'. - testData simpleHistory allClassHistories - do: [ :each | self assert: each referenceHistory equals: testData simpleHistory ] -] - -{ #category : #'testing - model history' } -HismoTest >> testReferenceVersion [ - self - assert: (testData simpleHistory atReferenceVersion: testData simpleModel1) versionEntity - equals: testData simpleModel1 -] - -{ #category : #'testing - class history' } -HismoTest >> testSelectBornIn [ - self assert: (testData simpleHistory allClassHistories selectBornIn: testData simpleHistory first) size equals: 2. - self assert: (testData simpleHistory allClassHistories selectBornIn: testData simpleHistory last) size equals: 1 -] - -{ #category : #'testing - class history' } -HismoTest >> testSelectBornLaterThan [ - self - assert: (testData simpleHistory allClassHistories selectBornLaterThan: testData simpleHistory first) size - equals: 4. - self assert: (testData simpleHistory allClassHistories selectBornLaterThan: testData simpleHistory last) size equals: 0 -] - -{ #category : #'testing - class history' } -HismoTest >> testSelectBornLaterThanOrIn [ - self - assert: (testData simpleHistory allClassHistories selectBornLaterThanOrIn: testData simpleHistory first) size - equals: 6. - self - assert: (testData simpleHistory allClassHistories selectBornLaterThanOrIn: testData simpleHistory last) size - equals: 1 -] - -{ #category : #'testing - class history' } -HismoTest >> testSelectBornPriorTo [ - self assert: (testData simpleHistory allClassHistories selectBornPriorTo: testData simpleHistory first) size equals: 0. - self assert: (testData simpleHistory allClassHistories selectBornPriorTo: testData simpleHistory last) size equals: 5 -] - -{ #category : #'testing - class history' } -HismoTest >> testSelectBornPriorToOrIn [ - self - assert: (testData simpleHistory allClassHistories selectBornPriorToOrIn: testData simpleHistory first) size - equals: 2. - self - assert: (testData simpleHistory allClassHistories selectBornPriorToOrIn: testData simpleHistory last) size - equals: 6 -] - -{ #category : #'testing - class history' } -HismoTest >> testSelectByExpression [ - self - assert: (testData simpleHistory allClassHistories select: [ :each | each evolutionOfNumberOfMethods > 0 ]) size - equals: 3 -] - -{ #category : #'testing - class history' } -HismoTest >> testSelectLastSeenIn [ - self assert: (testData simpleHistory allClassHistories selectLastSeenIn: testData simpleHistory first) size equals: 0. - self assert: (testData simpleHistory allClassHistories selectLastSeenIn: testData simpleHistory last) size equals: 4 -] - -{ #category : #'testing - class history' } -HismoTest >> testSelectLastSeenLaterThan [ - self - assert: (testData simpleHistory allClassHistories selectLastSeenLaterThan: testData simpleHistory first) size - equals: 6. - self - assert: (testData simpleHistory allClassHistories selectLastSeenLaterThan: testData simpleHistory last) size - equals: 0 -] - -{ #category : #'testing - class history' } -HismoTest >> testSelectLastSeenLaterThanOrIn [ - self - assert: (testData simpleHistory allClassHistories selectLastSeenLaterThanOrIn: testData simpleHistory first) size - equals: 6. - self - assert: (testData simpleHistory allClassHistories selectLastSeenLaterThanOrIn: testData simpleHistory last) size - equals: 4 -] - -{ #category : #'testing - class history' } -HismoTest >> testSelectLastSeenPriorTo [ - self - assert: (testData simpleHistory allClassHistories selectLastSeenPriorTo: testData simpleHistory first) size - equals: 0. - self - assert: (testData simpleHistory allClassHistories selectLastSeenPriorTo: testData simpleHistory last) size - equals: 2 -] - -{ #category : #'testing - class history' } -HismoTest >> testSelectLastSeenPriorToOrIn [ - self - assert: (testData simpleHistory allClassHistories selectLastSeenPriorToOrIn: testData simpleHistory first) size - equals: 0. - self - assert: (testData simpleHistory allClassHistories selectLastSeenPriorToOrIn: testData simpleHistory last) size - equals: 6 -] - -{ #category : #'testing - simple scenario' } -HismoTest >> testSimple1 [ - | history entityVersion1 entityVersion2 model1 model2 classHistories classAHistory | - history := testData simpleHistory. "We deal here with an history of models" - self assert: history class == HismoModelHistory. - self assert: history printString equals: 'Sample history (5)'. "The number between () in the history names says the number of versions it contains" - self assert: history size equals: 5. - self assert: history versions size equals: 5. - self assert: history age equals: 5. "Test of firstVersionOfPropertyNamed:" - self assert: (history versions first propertyNamed: #NOM) equals: (history firstVersionOfPropertyNamed: #NOM). - entityVersion1 := history versions first. - entityVersion2 := history versions second. - model1 := entityVersion1 versionEntity. - model2 := entityVersion2 versionEntity. - self assert: (model1 entityNamed: 'aNamespace::ClassA') methods size equals: 1. - self assert: (model2 entityNamed: 'aNamespace::ClassA') methods size equals: 2. - classHistories := history allClassHistories. - classAHistory := classHistories entityNamed: #aNamespace::ClassA. - self assert: classAHistory stabilityOfNumberOfMethods equals: 75.0 -] - -{ #category : #'testing - simple scenario' } -HismoTest >> testSimple2 [ - | model1 cls1 model2 | - model1 := MooseModel new. - cls1 := FamixClass new name: #ClassA. - cls1 addMethod: (FamixMethod new name: 'method1()'). - cls1 addMethod: (FamixMethod new name: 'method2()'). - model1 add: cls1. - - model2 := MooseModel new. - cls1 := FamixClass new name: #ClassA. - cls1 addMethod: (FamixMethod new name: 'method1()'). - cls1 addMethod: (FamixMethod new name: 'method2()'). - cls1 addMethod: (FamixMethod new name: 'method3()'). - model2 add: cls1. -] - -{ #category : #'testing - class history' } -HismoTest >> testSubHistories [ - self - assert: (testData simpleHistory allClassHistories entityNamed: #aNamespace::ClassA) directSubHistories size - equals: 3 -] - -{ #category : #'testing - class history' } -HismoTest >> testVersionsThatChanged [ - self - assert: - ((testData simpleHistory allClassHistories entityNamed: #aNamespace::ClassA) - select: [ :each | each changedFromPrevious: #numberOfMethods ]) size - equals: 1. - self - assert: - ((testData simpleHistory allClassHistories entityNamed: #aNamespace::ClassC) - select: [ :each | each changedFromPrevious: #numberOfMethods ]) size - equals: 2. - self - assert: - ((testData simpleHistory allClassHistories entityNamed: #aNamespace::ClassA) - versionsThatChangedPropertyNamed: #numberOfMethods) size - equals: 1. - self - assert: - ((testData simpleHistory allClassHistories entityNamed: #aNamespace::ClassC) - versionsThatChangedPropertyNamed: #numberOfMethods) size - equals: 2. - self - assert: - ((testData simpleHistory allClassHistories entityNamed: #aNamespace::ClassA) - referenceVersionsInWhichChangeOccured: #numberOfMethods) size - equals: 1. - self - assert: - ((testData simpleHistory allClassHistories entityNamed: #aNamespace::ClassC) - referenceVersionsInWhichChangeOccured: #numberOfMethods) size - equals: 2 -] - -{ #category : #'testing - class history' } -HismoTest >> testViewEvolution [ - - self shouldnt: [ testData simpleHistory allClassHistories do: [:each | each viewEvolution delete ]] raise: Error. - -] - -{ #category : #'testing - class history' } -HismoTest >> testViewEvolution2 [ - testData simpleHistory allClassHistories - do: [ :each | - | view | - view := RTMondrian new. - self assert: view view numberOfElements equals: 0. - self shouldnt: [ each viewEvolutionOn: view ] raise: Error. - self assert: view view numberOfElements > 0 ] -] - -{ #category : #'testing - ui' } -HismoTest >> testViewEvolutionMatrix [ - - | classHistories history | - history := testData simpleHistory. - classHistories := history allClassHistories. - self shouldnt: [ classHistories viewEvolutionMatrix delete ] raise: Error -] - -{ #category : #'testing - ui' } -HismoTest >> testViewHierarchyEvolution [ - - | classHistories history | - history := testData simpleHistory. - classHistories := history allClassHistories. - self shouldnt: [ classHistories viewHierarchyEvolution delete ] raise: Error -] - -{ #category : #'testing - class history' } -HismoTest >> testViewSimpleEvolutionMatrix [ - - self shouldnt: [ testData simpleHistory viewSimpleEvolutionMatrix delete ] raise: Error. - -] - -{ #category : #'testing - class history' } -HismoTest >> testViewSimpleEvolutionMatrix2 [ - | view | - view := RTMondrian new. - self assert: view view numberOfElements equals: 0. - self shouldnt: [ testData simpleHistory viewSimpleEvolutionMatrixIn: view ] raise: Error. - self assert: view view numberOfElements > 0 -] diff --git a/src-archive/Moose-Tests-Hismo/MooseHismoSampleData.class.st b/src-archive/Moose-Tests-Hismo/MooseHismoSampleData.class.st deleted file mode 100644 index eb6cec6f9..000000000 --- a/src-archive/Moose-Tests-Hismo/MooseHismoSampleData.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #MooseHismoSampleData, - #superclass : #MooseSampleData, - #instVars : [ - 'history' - ], - #category : #'Moose-Tests-Hismo' -} - -{ #category : #initialization } -MooseHismoSampleData >> initialize [ - super initialize. - history := HismoModelHistory new. - history addLastVersionForMooseModel: moosemodel1. - history addLastVersionForMooseModel: moosemodel2. - history addLastVersionForMooseModel: moosemodel3. - history addLastVersionForMooseModel: moosemodel4. - history addLastVersionForMooseModel: moosemodel5. - history name: #'Sample history' -] - -{ #category : #accessing } -MooseHismoSampleData >> simpleHistory [ - ^history -] diff --git a/src-archive/Moose-Tests-Hismo/package.st b/src-archive/Moose-Tests-Hismo/package.st deleted file mode 100644 index 92ae45c2b..000000000 --- a/src-archive/Moose-Tests-Hismo/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Moose-Tests-Hismo' } diff --git a/src-archive/Moose-Wizard/MCWorkingCopy.extension.st b/src-archive/Moose-Wizard/MCWorkingCopy.extension.st deleted file mode 100644 index 0e74d353b..000000000 --- a/src-archive/Moose-Wizard/MCWorkingCopy.extension.st +++ /dev/null @@ -1,9 +0,0 @@ -Extension { #name : #MCWorkingCopy } - -{ #category : #'*Moose-Wizard' } -MCWorkingCopy >> shortDescription [ - - ^ self modified - ifTrue: ['*', ancestry ancestorString] - ifFalse: [ancestry ancestorString] -] diff --git a/src-archive/Moose-Wizard/MPImportHismoCommand.class.st b/src-archive/Moose-Wizard/MPImportHismoCommand.class.st deleted file mode 100644 index fbddf4e1b..000000000 --- a/src-archive/Moose-Wizard/MPImportHismoCommand.class.st +++ /dev/null @@ -1,17 +0,0 @@ -Class { - #name : #MPImportHismoCommand, - #superclass : #MPImportCommand, - #category : #'Moose-Wizard' -} - -{ #category : #hooks } -MPImportHismoCommand >> execute [ - - MooseHismoImportFromMSEWizard new open -] - -{ #category : #hooks } -MPImportHismoCommand >> label [ - - ^ 'Import Hismo model from MSE files' -] diff --git a/src-archive/Moose-Wizard/MPImportJavaSourceFilesWithJdt2FamixCommand.class.st b/src-archive/Moose-Wizard/MPImportJavaSourceFilesWithJdt2FamixCommand.class.st deleted file mode 100644 index b67d00886..000000000 --- a/src-archive/Moose-Wizard/MPImportJavaSourceFilesWithJdt2FamixCommand.class.st +++ /dev/null @@ -1,18 +0,0 @@ -Class { - #name : #MPImportJavaSourceFilesWithJdt2FamixCommand, - #superclass : #MPImportCommand, - #category : #'Moose-Wizard' -} - -{ #category : #hooks } -MPImportJavaSourceFilesWithJdt2FamixCommand >> execute [ - - MooseImportFromJdt2FamixWizard new open. - self updateModelList . - -] - -{ #category : #hooks } -MPImportJavaSourceFilesWithJdt2FamixCommand >> label [ - ^ 'Import FAMIX Java model from file sources with jdt2famix' -] diff --git a/src-archive/Moose-Wizard/MPImportSTCommand.class.st b/src-archive/Moose-Wizard/MPImportSTCommand.class.st deleted file mode 100644 index d278a18a1..000000000 --- a/src-archive/Moose-Wizard/MPImportSTCommand.class.st +++ /dev/null @@ -1,23 +0,0 @@ -Class { - #name : #MPImportSTCommand, - #superclass : #MPImportCommand, - #category : #'Moose-Wizard' -} - -{ #category : #hooks } -MPImportSTCommand >> execute [ - (MooseImportFromSmalltalkImageWizard new - open; - mooseModel) ifNotNil: [ :model | self addModel: model ] -] - -{ #category : #hooks } -MPImportSTCommand >> icon [ - - ^ MooseIcons mooseImportSmalltalk -] - -{ #category : #hooks } -MPImportSTCommand >> label [ - ^ 'Import FAMIX Smalltalk model from the current image' -] diff --git a/src-archive/Moose-Wizard/MerlinExamples.extension.st b/src-archive/Moose-Wizard/MerlinExamples.extension.st deleted file mode 100644 index 80017ee83..000000000 --- a/src-archive/Moose-Wizard/MerlinExamples.extension.st +++ /dev/null @@ -1,25 +0,0 @@ -Extension { #name : #MerlinExamples } - -{ #category : #'*moose-wizard' } -MerlinExamples class >> mooseContextCheckboxesPartPart [ - "self mooseContextCheckboxesPartPart" - - | wizardControl wizardPane1 wizardPane2 checkboxesPart textFieldPart textPart | - wizardControl := WizardControl new. - wizardPane1 := WizardSinglePane new. - - checkboxesPart := MultiDependentCheckboxesPart new - labelsAndDependencies: MooseImportingContext entityDependencies; - yourself. - - - - wizardPane1 row: checkboxesPart associatedTo: #selectedLabels. - - wizardControl - addPane: wizardPane1. - - wizardControl open. - - -] diff --git a/src-archive/Moose-Wizard/MooseAbstractImportingContext.extension.st b/src-archive/Moose-Wizard/MooseAbstractImportingContext.extension.st deleted file mode 100644 index fb4a3cc6c..000000000 --- a/src-archive/Moose-Wizard/MooseAbstractImportingContext.extension.st +++ /dev/null @@ -1,9 +0,0 @@ -Extension { #name : #MooseAbstractImportingContext } - -{ #category : #'*moose-wizard' } -MooseAbstractImportingContext class >> contextFromIndex: anIndex [ - - anIndex = 2 ifTrue: [^FAMIXStandardImportingContext]. - anIndex = 3 ifTrue: [^AllMooseMetamodelImportingContext]. - ^ nil -] diff --git a/src-archive/Moose-Wizard/MooseContextCheckboxesPart.class.st b/src-archive/Moose-Wizard/MooseContextCheckboxesPart.class.st deleted file mode 100644 index a34d2e88e..000000000 --- a/src-archive/Moose-Wizard/MooseContextCheckboxesPart.class.st +++ /dev/null @@ -1,89 +0,0 @@ -Class { - #name : #MooseContextCheckboxesPart, - #superclass : #MultiCheckboxesPartOld, - #instVars : [ - 'entityDependencies' - ], - #category : #'Moose-Wizard' -} - -{ #category : #'private - utilities' } -MooseContextCheckboxesPart >> checkboxForContextNamed: aContextName [ - ^ allCheckboxes detect: [ :each | each label asString == aContextName ]. -] - -{ #category : #accessing } -MooseContextCheckboxesPart >> dependenciesFor: aCollectionOfContexts [ - "return all contexts depending of contexts in aCollectionOfContexts" - | dependenciesForContext | - - dependenciesForContext := Set new. - aCollectionOfContexts do: [:each | dependenciesForContext addAll: ( entityDependencies at: each)]. - - dependenciesForContext size == aCollectionOfContexts size - ifTrue: [^ dependenciesForContext ] - ifFalse: [^ self dependenciesFor: dependenciesForContext ]. -] - -{ #category : #'initialize-release' } -MooseContextCheckboxesPart >> initialize: aDictionaryWithEntityDependencies [ - - super initialize: (aDictionaryWithEntityDependencies keys collect: [:each | each asString]). - entityDependencies := aDictionaryWithEntityDependencies. - self setActionToCheckboxes . - -] - -{ #category : #accessing } -MooseContextCheckboxesPart >> revertDependenciesFor: aCollectionOfContexts [ - "return all the contexts from wich aCollectionOfContexts depends" - | revertDependenciesForContext | - - revertDependenciesForContext := Set new. - entityDependencies. - aCollectionOfContexts do: [:each | - entityDependencies associationsDo: [:assoc | - (assoc value includes: each ) ifTrue: [revertDependenciesForContext add: assoc key] ] ]. - - revertDependenciesForContext size == aCollectionOfContexts size - ifTrue: [ ^ revertDependenciesForContext ] - ifFalse: [^ self revertDependenciesFor: revertDependenciesForContext ]. -] - -{ #category : #'morph content setup tools' } -MooseContextCheckboxesPart >> setActionToCheckboxes [ - "initialize the action to do when clicking on a checkbox" - allCheckboxes do: [ :each | - each buttonMorph - target: self; - actionSelector: #updateCheckboxesWhenChangesOn:; - arguments: { (each label) } ]. -] - -{ #category : #'private - utilities' } -MooseContextCheckboxesPart >> updateCheckboxesNamed: aCollectionOfLabels withState: aStateSelector [ - - allCheckboxes do: - [ :each | (aCollectionOfLabels includes: each label asSymbol) ifTrue: [ each buttonMorph state: aStateSelector ] ]. -] - -{ #category : #actions } -MooseContextCheckboxesPart >> updateCheckboxesWhenChangesOn: contextName [ - " when the context contextName has been selected or deselected, update all the others contexts checkboxes that are linked to this context " - | dependenciesForContext contextCheckBox | - contextCheckBox := self checkboxForContextNamed: contextName . - - ({#pressed. #on} includes: contextCheckBox buttonMorph state) - ifTrue: - [ - dependenciesForContext := self dependenciesFor: { (contextName asSymbol)}. - self updateCheckboxesNamed: dependenciesForContext withState: #on. - ] - ifFalse: - [ - dependenciesForContext := self revertDependenciesFor: {(contextName asSymbol)}. - self updateCheckboxesNamed: dependenciesForContext withState: #off . - ]. - - "self updateSelectedContext ". -] diff --git a/src-archive/Moose-Wizard/MooseHismoImportFromMSEWizard.class.st b/src-archive/Moose-Wizard/MooseHismoImportFromMSEWizard.class.st deleted file mode 100644 index c612b5c3b..000000000 --- a/src-archive/Moose-Wizard/MooseHismoImportFromMSEWizard.class.st +++ /dev/null @@ -1,260 +0,0 @@ -Class { - #name : #MooseHismoImportFromMSEWizard, - #superclass : #WizardControl, - #instVars : [ - 'selectedDirectory', - 'versions', - 'selectedImporting', - 'hismoImporter', - 'importWithFilter' - ], - #category : #'Moose-Wizard' -} - -{ #category : #creating } -MooseHismoImportFromMSEWizard >> createAutomaticImportingPane [ - - | wizardPane listPart datePatternPart strategyPart numberPart | - - wizardPane := WizardLastPane named: 'Automatic Importing (2/3)'. - - listPart := ListPart new - inGroupboxNamed: 'MSE files found in selected folder'; - initialList: versions keys sorted; - yourself. - - datePatternPart := TextFieldPart new - inGroupboxNamed: 'Type the date pattern in the MSE files (for example: ''dd-mm-yyyy'')'; - defaultValue: 'dd-mm-yyyy'; - yourself. - - strategyPart := DropListPart new - inGroupboxNamed: 'Select the strategy to import the MSE files'; - list: (MooseHismoImporter strategyMethods); - defaultValue: 1; - yourself. - - numberPart := TextFieldPart new - inGroupboxNamed: 'Type the number of days, months or years if you selected either everyNDays:, everyNMonths: or everyNYears:'; - yourself. - - wizardPane row: listPart. - wizardPane addPart: datePatternPart associatedTo: #datePattern. - wizardPane addPart: strategyPart associatedTo: #strategy. - wizardPane addPart: numberPart associatedTo: #n. - - self addPane: wizardPane -] - -{ #category : #creating } -MooseHismoImportFromMSEWizard >> createFirstPane [ - - | wizardPane directoryPart hismoNamePart | - - wizardPane := WizardFirstPane named: 'Hismo importer (1/3)'. - - hismoNamePart := TextFieldPart new - inGroupboxNamed: 'Type the name of the Hismo model'. - - directoryPart := DirectoryChoosePart new - inGroupboxNamed: 'Select the directory with the MSE files'; - callback: [ :returnedValue | - selectedDirectory := returnedValue. - self createLastPane ]; - yourself. - - wizardPane addPart: hismoNamePart associatedTo: #hismoModelName. - wizardPane row: directoryPart. - self addPane: wizardPane. - self validateInput: wizardPane -] - -{ #category : #private } -MooseHismoImportFromMSEWizard >> createHismoModel [ - - hismoImporter createHismoModel. - hismoImporter installHismoModel -] - -{ #category : #creating } -MooseHismoImportFromMSEWizard >> createLastPane [ - - self wizardPanes size >= 3 - ifTrue: [ self removePaneAt: 3 ]. - - versions := ((selectedDirectory entries select: [ :each | each name endsWith: '.mse' ]) collect: [ :each | each basename -> each fullName ]) asDictionary. - - (selectedImporting = #manually) - ifTrue: [self createManualImportingPane] - ifFalse: [self createAutomaticImportingPane] -] - -{ #category : #creating } -MooseHismoImportFromMSEWizard >> createManualImportingPane [ - - | wizardPane selectedVersionsPart | - - wizardPane := WizardLastPane named: 'Manual Importing (3/3)'. - selectedVersionsPart := MultiSelectionItemSelectorPart new - inGroupboxNamed: 'Select the MSEs'; - initialList: versions keys sorted; - yourself. - - wizardPane addPart: selectedVersionsPart associatedTo: #selectedVersions. - self addPane: wizardPane. -] - -{ #category : #creating } -MooseHismoImportFromMSEWizard >> createMiddlePane [ - - | wizardPane selectedImportingPart useFilterPart | - - self wizardPanes size >= 2 - ifTrue: [ self removePaneAt: 2 ]. - - wizardPane := WizardMiddlePane named: 'Set how to import the Hismo Model (2/3)'. - - selectedImportingPart := RadioButtonsPart new - inGroupboxNamed: 'Select how to import the MSE files'; - options: #(#manually #automatically); - callback: [ :returnedValue | - selectedImporting := returnedValue. - self createLastPane ]. - - useFilterPart := MultiCheckboxesPart new - inGroupboxNamed: 'Import entities using a filter?'; - labels: #('use filter'); - deselectAllOptions; - callback: [ :outputValue | - self setFilterPartForPane: wizardPane whenFilterIsSelected: outputValue value ] - yourself. - - wizardPane row: selectedImportingPart. - wizardPane addPart: useFilterPart associatedTo: #useFilter. - self addPane: wizardPane -] - -{ #category : #private } -MooseHismoImportFromMSEWizard >> fullNameForVersion: aVersion [ - - ^ versions at: aVersion -] - -{ #category : #private } -MooseHismoImportFromMSEWizard >> hismoModelName [ - - | hismoModelName | - - hismoModelName := wizardInformations at: #hismoModelName. - hismoModelName isEmptyOrNil ifTrue: [^ 'HismoModel']. - ^ hismoModelName -] - -{ #category : #private } -MooseHismoImportFromMSEWizard >> importingContext [ - - | importingContext contextSelected useFilter | - - useFilter := wizardInformations at: #useFilter. - useFilter first value ifFalse: [ ^ nil ]. - - contextSelected := (wizardInformations at: #contextSelected) - select: [ :each | each value ] thenCollect: [ :each | each key asSymbol ]. - - "importingContext := FAMIXStandardImportingContext new. - importingContext importAll: contextSelected." - - importingContext := MooseImportingContext new. - importingContext entityKindsToBeExtracted: contextSelected. - - ^ importingContext -] - -{ #category : #initialization } -MooseHismoImportFromMSEWizard >> initialize [ - - super initialize. - - selectedDirectory := FileSystem workingDirectory. - selectedImporting := #manually. - importWithFilter := true. - hismoImporter := MooseHismoImporter new. - - self createFirstPane. - self createMiddlePane. - self createLastPane -] - -{ #category : #'wizard panes transition' } -MooseHismoImportFromMSEWizard >> performTerminateButtonAction [ - - super performTerminateButtonAction. - - hismoImporter hismoModelName: self hismoModelName. - hismoImporter importingContext: self importingContext. - - (selectedImporting = #manually) - ifTrue: [self terminateManualImporting ] - ifFalse: [self terminateAutomaticImporting ] -] - -{ #category : #creating } -MooseHismoImportFromMSEWizard >> setFilterPartForPane: wizardPane whenFilterIsSelected: filterIsSelected [ - - | filterPart | - - wizardPane removeSubComponentAt: 3. - filterIsSelected - ifTrue: [ - - filterPart := MultiCheckboxesPart new - inGroupboxNamed: 'Select the entities to be imported'; - labels: MooseImportingContext entityDependencies keys sorted; - "labels: FAMIXStandardImportingContext new entityDependencies keys;" - deselectAllOptions. - - wizardPane addPart: filterPart associatedTo: #contextSelected]. - - wizardPane refresh -] - -{ #category : #'wizard panes transition' } -MooseHismoImportFromMSEWizard >> terminateAutomaticImporting [ - - | n datePattern strategySymbol | - - strategySymbol := (wizardInformations at: #strategy) asSymbol. - datePattern := wizardInformations at: #datePattern. - n := wizardInformations at: #n. - - "Include all the mses. They will be selected based on the stategy" - hismoImporter versions: versions. - hismoImporter datePattern: datePattern. - "Setting the strategy. If it contains argument, set it too" - (strategySymbol numArgs = 0) - ifTrue: [hismoImporter perform: strategySymbol ] - ifFalse: [hismoImporter perform: strategySymbol with: n ]. - - self createHismoModel -] - -{ #category : #'wizard panes transition' } -MooseHismoImportFromMSEWizard >> terminateManualImporting [ - - | selectedVersions | - - selectedVersions := wizardInformations at: #selectedVersions. - "versions is a dictionary with version name and version fullName" - hismoImporter versions: (selectedVersions collect: [ :each | each -> (self fullNameForVersion: each)]) asDictionary. - hismoImporter importAll. - self createHismoModel -] - -{ #category : #private } -MooseHismoImportFromMSEWizard >> validateInput: wizardPane [ - - wizardPane - condition: [ :wi | - (selectedDirectory entries select: [ :each | each fullName endsWith: '.mse' ]) notEmpty ] - named: 'You have to select a directory with MSE files' -] diff --git a/src-archive/Moose-Wizard/MooseImportFromJdt2FamixWizard.class.st b/src-archive/Moose-Wizard/MooseImportFromJdt2FamixWizard.class.st deleted file mode 100644 index 357870a8e..000000000 --- a/src-archive/Moose-Wizard/MooseImportFromJdt2FamixWizard.class.st +++ /dev/null @@ -1,124 +0,0 @@ -Class { - #name : #MooseImportFromJdt2FamixWizard, - #superclass : #WizardControl, - #classVars : [ - 'JavaProjectPath' - ], - #category : #'Moose-Wizard' -} - -{ #category : #'class initialization' } -MooseImportFromJdt2FamixWizard class >> reinitialize [ - - "self reinitialize" - VerveineJPath := nil -] - -{ #category : #actions } -MooseImportFromJdt2FamixWizard >> doImport [ - - | mseFile javaProjectPath model| - javaProjectPath := wizardInformations at: #javaFolderPath. ",'/'" - self - generateMseFile: '' - forProject: javaProjectPath - usingJdt2FamixPath: self jdt2famixPath. - - mseFile := javaProjectPath asFileReference / (javaProjectPath asFileReference basename , '.mse'). - - model := (MooseModel new - importFromMSEStream: (StandardFileStream readOnlyFileNamed: mseFile fullName); - name: javaProjectPath asFileReference basename). - model rootFolder: javaProjectPath. - model install. - - JavaProjectPath := javaProjectPath -] - -{ #category : #actions } -MooseImportFromJdt2FamixWizard >> generateMseFile: mseFileName forProject: javaProjectPath usingJdt2FamixPath: verveineJPath [ - self system: - ('cd ''{1}'' ; sh -c "''{2}''"' - format: - {javaProjectPath. - (verveineJPath asFileReference / 'jdt2famix.sh') fullName}) -] - -{ #category : #'initialize-release' } -MooseImportFromJdt2FamixWizard >> initialize [ - - | wizardPane1 wizardPart1 wizardPane2 wizardPart2 | - - super initialize. - - wizardPane1 := WizardFirstPane named: 'Select the file "jdt2famix.sh"'. - wizardPart1 := self selectJdt2FamixPart. - wizardPane1 addPart: wizardPart1 associatedTo: #jdt2famixPath. - - wizardPane2 := WizardLastPane named: 'Select the root sources folder of the project you want to import'. - wizardPart2 := self selectJavaProjectPart . - wizardPane2 addPart: wizardPart2 associatedTo: #javaFolderPath. - - self addPane: wizardPane1. - self addPane: wizardPane2. - - wizardPane1 condition: [:tmpWizardInformations | - (tmpWizardInformations at: #jdt2famixPath) endsWith: 'jdt2famix.sh' - ] named: 'You have to select the file named jdt2famix.sh'. - - self javaProjectPath asString asFileReference exists - ifTrue: [ wizardPart2 selectPathName: self javaProjectPath ] -] - -{ #category : #accessing } -MooseImportFromJdt2FamixWizard >> javaProjectPath [ - - ^ JavaProjectPath -] - -{ #category : #accessing } -MooseImportFromJdt2FamixWizard >> jdt2famixPath [ - - ^ Jdt2FamixSettings jdt2famixPath -] - -{ #category : #'wizard panes transition' } -MooseImportFromJdt2FamixWizard >> performTerminateButtonAction [ - MooseCustomTask - runWithProgress: - [:bar | - super performTerminateButtonAction . - self doImport. - bar increment. - ] - description: 'generating mse file with jdt2famix' - length: 1. - - -] - -{ #category : #accessing } -MooseImportFromJdt2FamixWizard >> selectJavaProjectPart [ - - ^ ChooseFilePart new - yourself. -] - -{ #category : #accessing } -MooseImportFromJdt2FamixWizard >> selectJdt2FamixPart [ - - |tmpDefaultPath| - tmpDefaultPath := FileSystem disk workingDirectory. - (self jdt2famixPath asFileReference / 'jdt2famix.sh') exists - ifTrue: [ tmpDefaultPath := self jdt2famixPath asFileReference / 'jdt2famix.sh' ]. - ^ ChooseFilePart new - selectedPathName: tmpDefaultPath fullName; - validExtensions: #('sh'); yourself. -] - -{ #category : #actions } -MooseImportFromJdt2FamixWizard >> system: command [ - "Perform OS system() call." - - ^ self ffiCall: #(int system #(char * command)) module: LibC -] diff --git a/src-archive/Moose-Wizard/MooseImportFromMseWizard.class.st b/src-archive/Moose-Wizard/MooseImportFromMseWizard.class.st deleted file mode 100644 index b09b17876..000000000 --- a/src-archive/Moose-Wizard/MooseImportFromMseWizard.class.st +++ /dev/null @@ -1,100 +0,0 @@ -Class { - #name : #MooseImportFromMseWizard, - #superclass : #WizardControl, - #category : #'Moose-Wizard' -} - -{ #category : #example } -MooseImportFromMseWizard class >> example [ - - "self example" - self new open. -] - -{ #category : #'private-utilities' } -MooseImportFromMseWizard >> createImportingContext [ - - "return an object ImportingContext coorresponding to the context selected by the user and the choice of merging or not classes and metaclasses " - | tmpImportingContext importingContextClass contextSelected | - importingContextClass := wizardInformations at: #importingContextClass. - tmpImportingContext := importingContextClass new. - contextSelected := (wizardInformations at: #contextSelected). - - tmpImportingContext importAll: contextSelected . - - ^ tmpImportingContext -] - -{ #category : #'initialize-release' } -MooseImportFromMseWizard >> initialize [ - - | wizardPane1 wizardPart1 wizardPane2 wizardPart2 wizardPart3 wizardPart3Collection | - super initialize. - wizardPane1 := WizardFirstPane named: 'Select a MSE file'. - wizardPane2 := WizardLastPane named: 'Select the context to import'. - - wizardPart1 := ChooseFilePart new. - - "wizardPart2 := MooseContextCheckboxesPart withAll: Dictionary new." - - wizardPart3Collection := #('import all' 'use standard FAMIX context' 'use context from all Moose metaModel'). - wizardPart3 := DropListPart new - list: wizardPart3Collection ; - inGroupboxNamed: 'Context strategy'; - defaultValue: 1; - callback: [:outputValue | - |importingContextClass| - importingContextClass := (MooseAbstractImportingContext contextFromIndex: (wizardPart3Collection indexOf: outputValue)). - wizardPane2 removeSubComponentAt: 2. - importingContextClass ifNotNil: [ - wizardPane2 addPart: (MultiDependentCheckboxesPart new labelsAndDependencies: importingContextClass new entityDependencies) associatedTo: #contextSelected. - ]. - wizardPane2 refresh. - ]; - yourself. - "wizardPart3 := MooseListOfContextsAvailablePart updatingCorrespondingContextCheckboxesFrom: wizardPart2" . - - - wizardPane1 addPart: wizardPart1 associatedTo: #mseFilePath. - - - "wizardPart2 := MooseImportingContextAllCheckboxesDisplayedPart new." - wizardPane2 addPart: wizardPart3 associatedTo: #importingContextClass. - - self addPane: wizardPane1. - self addPane: wizardPane2 - - - -] - -{ #category : #'wizard panes transition' } -MooseImportFromMseWizard >> performTerminateButtonAction [ - "by default, just close the last current pane. Override this method if you want to create a subclass of WizardControl making a specific action" - "^self subclassResponsibility" - super performTerminateButtonAction . - self validateImportation. - -] - -{ #category : #actions } -MooseImportFromMseWizard >> validateImportation [ - - | mooseModel wizardMessagePane | - "[" - mooseModel := MooseModel new - importFromMSEStream: - (StandardFileStream readOnlyFileNamed: (wizardInformations at: #mseFilePath)) - filteredBy: ( self createImportingContext). - mooseModel install. - - "] - - on: Error - do: [:ex | - wizardMessagePane:= WizardMessagePane new. - wizardMessagePane addPart: (TextDisplayPart forText:'Invalid MSE file caued Error: ', ex description) associatedTo: nil. - self addPane: wizardMessagePane . - wizardMessagePane open. - ]." -] diff --git a/src-archive/Moose-Wizard/MooseImportFromSmalltalkImageWizard.class.st b/src-archive/Moose-Wizard/MooseImportFromSmalltalkImageWizard.class.st deleted file mode 100644 index 029207fbe..000000000 --- a/src-archive/Moose-Wizard/MooseImportFromSmalltalkImageWizard.class.st +++ /dev/null @@ -1,276 +0,0 @@ -" -A MooseWizardControl is the Wizard control of the moose wizard. It subclass the generic class WizardControl to make a specific action when the terminate button is pressed: open the moose finder. This class initialize itself its components (WizarPanes and WizardPart). Therefore, to use the moose wizard you just have to evaluate: 'MooseWizardControl new openFirstFrame'. - -Instance Variables - -" -Class { - #name : #MooseImportFromSmalltalkImageWizard, - #superclass : #WizardControl, - #instVars : [ - 'mooseModel' - ], - #category : #'Moose-Wizard' -} - -{ #category : #'initialize-release' } -MooseImportFromSmalltalkImageWizard >> buildMooseWizardControl [ - - self buildMooseWizardPackageControl. - self buildMooseWizardModelAttributes. -] - -{ #category : #'initialize-release' } -MooseImportFromSmalltalkImageWizard >> buildMooseWizardModelAttributes [ - - | lastPane modelNameTextField mergeClassesCheckbox importSubclassesCheckbox computeAttributesCheckbox importerList importerAttributes strategyDropList | - lastPane := WizardLastPane new. - - modelNameTextField := TextFieldPart new - inGroupboxNamed: 'Type the name of the model'; - defaultValue: 'MooseModel'. - - mergeClassesCheckbox := CheckboxPart new - label: 'Merge classes and metaclasses'"; - inGroupboxNamed: 'Class / Metaclass'". - importSubclassesCheckbox := CheckboxPart new - label: 'Import subclasses'"; - inGroupboxNamed: 'Class / Subclasses'". - computeAttributesCheckbox := CheckboxPart new - label: 'Compute type of attributes (using RoelTyper)'; - defaultValue: false; - "inGroupboxNamed: 'Attributes declared type';" - yourself. - - " IMPORTER " - importerList := DropListPart new - list: { MoosePharoImporterTask name }; - defaultValue: 1; - inGroupboxNamed: 'Choose an importer'; - yourself. - importerAttributes := MultiDependentCheckboxesPart new - labelsAndDependencies: MooseImportingContext entityDependencies; - inGroupboxNamed: 'Importing Context'; - yourself. - - strategyDropList := DropListPart new - list: self listOfInvocationStrategies; - inGroupboxNamed: 'Select a strategy to compute invocation candidates'; - defaultValue: 2; - yourself. - - lastPane - addPart: modelNameTextField - associatedTo: #modelName. - lastPane - addPart: mergeClassesCheckbox - associatedTo: #mergeClassMetaclass. - lastPane - addPart: importSubclassesCheckbox - associatedTo: #importSubclasses. - lastPane - addPart: computeAttributesCheckbox - associatedTo: #computeTypeOfAttributes. - lastPane - addPart: importerList - associatedTo: #importer. - lastPane - addPart: importerAttributes - associatedTo: #contextToImport. - lastPane - addPart: strategyDropList - associatedTo: #candidateInvocationStrategy. - - self addPane: lastPane. -] - -{ #category : #'initialize-release' } -MooseImportFromSmalltalkImageWizard >> buildMooseWizardPackageControl [ - "Here we initialize the first wizard panel, which is related to selecting the packages - that will be added to the model" - - | firstPane packageList packagePanel scriptCheckbox | - firstPane := WizardFirstPane new. - - packageList := RPackage organizer packageNames asSortedCollection: [ :a :b | a < b ]. - packagePanel := MultiSelectionItemSelectorPart new - initialList: packageList; - yourself. - - scriptCheckbox := CheckboxPart new - label: 'Create a script before importing the model'; - defaultValue: false. - - firstPane - addPart: packagePanel - associatedTo: #packagesSelected. - firstPane - addPart: scriptCheckbox - associatedTo: #createScript. - - self addPane: firstPane -] - -{ #category : #'private - utilities' } -MooseImportFromSmalltalkImageWizard >> candidateListOperatorClass [ - "return the class corresponding to the strategy selected to compute candidates for invocations" - - | strategy | - strategy := wizardInformations at: #candidateInvocationStrategy. - strategy = 'Do not compute any candidate' - ifTrue: [^ CandidateListOperatorNotAcceptingAnyReceiver ]. - strategy = 'Use the standard CandidateListOperator' - ifTrue: [^ CandidateListOperator ]. - strategy = 'Compute for simple receivers ("self" "super" or a Class ) ' - ifTrue: [^ CandidateListOperatorAcceptingSimpleKindsOfReceiver ]. - strategy = 'Compute for simple receivers and variables' - ifTrue: [^ CandidateListOperatorAcceptingBasicAndVariableReceivers ]. - strategy = 'Compute for any kind of receiver' - ifTrue: [^ CandidateListOperatorAcceptingAnyKindOfReceiver ]. - -] - -{ #category : #'private - utilities' } -MooseImportFromSmalltalkImageWizard >> createImportingContext [ - - "return an object ImportingContext coorresponding to the context selected by the user and the choice of merging or not classes and metaclasses " - | tmpImportingContext | - tmpImportingContext := MooseImportingContext new. - ((wizardInformations at: #contextToImport) select: [:anAssoc | anAssoc value = true] thenCollect: [:each | each key]) do: [ :each | tmpImportingContext perform: (#import , each) asSymbol ]. - (wizardInformations at: #mergeClassMetaclass) ifTrue: [ tmpImportingContext mergeClassAndMetaclass ]. - (wizardInformations at: #importSubclasses) - ifTrue: [ tmpImportingContext importSubclasses ] - ifFalse: [ tmpImportingContext doNotImportSubclasses]. - (wizardInformations at: #computeTypeOfAttributes) ifTrue: [tmpImportingContext computeTypeOfAttributes]. - ^ tmpImportingContext -] - -{ #category : #actions } -MooseImportFromSmalltalkImageWizard >> generateScriptForPackages: aCollectionOfPackageNames [ - - | className scriptClass modelName packageNames methodSourceString contextItems | - className := UIManager default - request: 'Enter class where to install the script' - initialAnswer: 'MooseScripts'. - scriptClass := Smalltalk at: className asSymbol ifAbsent: [ ^ self ]. - modelName := UIManager default - request: 'Enter name of the selector created class-side' - initialAnswer: 'NewModel'. - (modelName isNil or: [ modelName size = 0 ]) ifTrue: [ ^ self ]. - - packageNames := '. ' join: (aCollectionOfPackageNames collect: [ :each | each surroundedBySingleQuotes ] ). - contextItems := '. ' join: ((wizardInformations at: #contextToImport) collect: [ :each | each asString ] ) . - - methodSourceString := String new: 200 streamContents: [:str | - str nextPutAll: 'create'; nextPutAll: modelName capitalized; cr. - str tab. - - str nextPutAll: '^ MooseScripts createModelNamed: '. - str nextPutAll: modelName surroundedBySingleQuotes. - str cr ; tab ; tab. - str nextPutAll: ' withPackages: {'. - str nextPutAll: packageNames; nextPut: $}. - str cr ; tab ; tab. - str nextPutAll: ' importer: '. - str nextPutAll: self importerSelected asString. - str cr ; tab ; tab. - str nextPutAll: ' candidateClass: '. - str nextPutAll: self candidateListOperatorClass asString. - str cr ; tab ; tab. - str nextPutAll: ' mergeClassMetaClass: '. - str nextPutAll: (wizardInformations at: #mergeClassMetaclass) asString. - str cr ; tab ; tab. - str nextPutAll: ' contextItems: {'. - str nextPutAll: contextItems ; nextPut: $}. - str cr. - ]. - - scriptClass class - compile: methodSourceString - classified: 'model'. -] - -{ #category : #'private - utilities' } -MooseImportFromSmalltalkImageWizard >> importerSelected [ - "return the class of the importer selected by tthe user" - ^ Smalltalk at: (wizardInformations at: #importer) -] - -{ #category : #'initialize-release' } -MooseImportFromSmalltalkImageWizard >> initialize [ - - super initialize. - self buildMooseWizardControl . - -] - -{ #category : #accessing } -MooseImportFromSmalltalkImageWizard >> listOfInvocationStrategies [ - - ^ { 'Do not compute any candidate'. - 'Use the standard CandidateListOperator'. - 'Compute for simple receivers ("self" "super" or a Class ) '. - 'Compute for simple receivers and variables'. - 'Compute for any kind of receiver' } -] - -{ #category : #accessing } -MooseImportFromSmalltalkImageWizard >> mooseModel [ - - ^ mooseModel -] - -{ #category : #'private - utilities' } -MooseImportFromSmalltalkImageWizard >> mooseModelNameFor: aCollectionOfPackageNames [ - "return the name that will be give to the moose model" - | stream | - stream := WriteStream on: ''. - stream nextPutAll: 'Moose model for '. - aCollectionOfPackageNames do: - [ :each | - (aCollectionOfPackageNames indexOf: each) = aCollectionOfPackageNames size - ifTrue: [ stream nextPutAll: each ] - ifFalse: - [ stream - nextPutAll: each; - nextPutAll: ' - ' ] ]. - ^ stream contents -] - -{ #category : #'wizard panes transition' } -MooseImportFromSmalltalkImageWizard >> performTerminateButtonAction [ - "by default, just close the last current pane. Override this method if you want to create a subclass of WizardControl making a specific action" - "^self subclassResponsibility" - super performTerminateButtonAction . - self validateImportation. - -] - -{ #category : #actions } -MooseImportFromSmalltalkImageWizard >> validateImportation [ - "final action when the user click on the button ok: - open a corresponding mooseFinder" - | importer selectedPackages | - - - selectedPackages := wizardInformations at: #packagesSelected. - - (wizardInformations at: #createScript) - ifTrue: [self generateScriptForPackages: selectedPackages ]. - "we create the moose model with an appopriate name" - mooseModel := MooseModel new. - "mooseModel name: (self mooseModelNameFor: selectedPackages)." - mooseModel name: (wizardInformations at: #modelName). - "we create the importer" - importer := self importerSelected new. - "we set all the inportation parameters to the importer" - importer - importingContext: self createImportingContext; - model: mooseModel; - addFromPackagesNamed: selectedPackages; - candidateClass: self candidateListOperatorClass ; - runWithProgress. - - mooseModel install. - -] diff --git a/src-archive/Moose-Wizard/MooseImportingContextAllCheckboxesDisplayedPart.class.st b/src-archive/Moose-Wizard/MooseImportingContextAllCheckboxesDisplayedPart.class.st deleted file mode 100644 index 3d632dfc7..000000000 --- a/src-archive/Moose-Wizard/MooseImportingContextAllCheckboxesDisplayedPart.class.st +++ /dev/null @@ -1,13 +0,0 @@ -Class { - #name : #MooseImportingContextAllCheckboxesDisplayedPart, - #superclass : #MooseImportingContextPart, - #category : #'Moose-Wizard' -} - -{ #category : #'initialize-release' } -MooseImportingContextAllCheckboxesDisplayedPart >> initialize [ - - super initialize. - self contents: { self newGroupboxNamed: 'Context' With: contextFrame dialogWindow contentMorph .} - -] diff --git a/src-archive/Moose-Wizard/MooseImportingContextPart.class.st b/src-archive/Moose-Wizard/MooseImportingContextPart.class.st deleted file mode 100644 index 5cc4f8fa4..000000000 --- a/src-archive/Moose-Wizard/MooseImportingContextPart.class.st +++ /dev/null @@ -1,126 +0,0 @@ -" -A MooseImportingContextPart is the part concerning the context to import in the second 'page' of the moose wizard. - -Instance Variables - centralCheckbox: - contextFrame: - detailContextButton: - -centralCheckbox - - xxxxx - -contextFrame - - xxxxx - -detailContextButton - - xxxxx - -" -Class { - #name : #MooseImportingContextPart, - #superclass : #WizardPart, - #instVars : [ - 'centralCheckbox', - 'detailContextButton', - 'contextFrame' - ], - #category : #'Moose-Wizard' -} - -{ #category : #actions } -MooseImportingContextPart >> contextFrameOkButtonActions [ - "make all the things that have to be done when the user click on the context frames ok button." - - contextFrame allSelected - ifTrue: [ - centralCheckbox disable. - centralCheckbox buttonMorph state: #on. - ] - ifFalse: [ - centralCheckbox enable. - centralCheckbox buttonMorph state: #off. - ]. - - contextFrame close. - detailContextButton enable. - -] - -{ #category : #actions } -MooseImportingContextPart >> displayContextFrameInsideTheContextBox [ - | contentMorph groupBox | - contentMorph := contextFrame dialogWindow contentMorph . - groupBox := self contents submorphs first. - - groupBox addContentMorph: contentMorph . - self wizardPane buildDialogWindow . - "groupBox addContentMorph: (self newRowWith:{ self newReduceContextButton} )" -] - -{ #category : #'initialize-release' } -MooseImportingContextPart >> initialize [ - - super initialize. - contextFrame := MooseContextFrame new. - self populateContents: {self - newGroupboxNamed: 'Context' WithAll: { - self newRowWith:{ - (self newCentralCheckbox). - (self newDetailContextButton)} - }.} -] - -{ #category : #'morph content setup tools' } -MooseImportingContextPart >> newCentralCheckbox [ - "Return a checkbox telling if all the context or not has to be imported. By default, all the context is imported and this check is selected and disabled. - It is enabled when you click on the detail button and make change on the selected items." - centralCheckbox := (self - newCheckboxFor: (ValueHolder new contents: true) - getSelected: #contents - setSelected: #contents: - label: 'All') disable. - "This checkbox has to be update if all contexts are selected : " - centralCheckbox buttonMorph - target: self; - actionSelector: #updateContextCheckbox; - arguments: { }. - ^ centralCheckbox -] - -{ #category : #'morph content setup tools' } -MooseImportingContextPart >> newDetailContextButton [ - - "return a button opening the context frame when clicked" - - ^ detailContextButton := self - newButtonNamed: 'Details' - withAction: #openContextFrame. -] - -{ #category : #actions } -MooseImportingContextPart >> openContextFrame [ - detailContextButton disable. - - "version with context frame outside the pane :" - "contextFrame open." - - "version with context frame inside the pane" - self displayContextFrameInsideTheContextBox. - self wizardPane adaptSize -] - -{ #category : #'accessing - wizard mangement' } -MooseImportingContextPart >> outputValue [ - "this method is an abstract method as only the subclass itself know what is the information to send to the WizardPane which will send it to the wizarControl " - ^ contextFrame contextSelected -] - -{ #category : #actions } -MooseImportingContextPart >> updateContextCheckbox [ - "make all the things that have to be done when the user click on the context checkbox:" - "-> make it disabled and on selected" - centralCheckbox disable. - centralCheckbox buttonMorph state: #on. - "-> select all checkboxes in the context Frame" - ^ contextFrame selectAllContext . -] diff --git a/src-archive/Moose-Wizard/MooseMetacelloRadioButtonsPart.class.st b/src-archive/Moose-Wizard/MooseMetacelloRadioButtonsPart.class.st deleted file mode 100644 index df78df983..000000000 --- a/src-archive/Moose-Wizard/MooseMetacelloRadioButtonsPart.class.st +++ /dev/null @@ -1,138 +0,0 @@ -Class { - #name : #MooseMetacelloRadioButtonsPart, - #superclass : #WizardPart, - #instVars : [ - 'option' - ], - #category : #'Moose-Wizard' -} - -{ #category : #'radio buttons model' } -MooseMetacelloRadioButtonsPart >> beBranchDev [ - - self option: #branchDev -] - -{ #category : #'radio buttons model' } -MooseMetacelloRadioButtonsPart >> beMainDev [ - - self option: #mainDev -] - -{ #category : #'radio buttons model' } -MooseMetacelloRadioButtonsPart >> beRelease [ - - self option: #release -] - -{ #category : #accessing } -MooseMetacelloRadioButtonsPart >> defaultSelection: aSymbol [ - - aSymbol = #branchDev - ifTrue: [ self beBranchDev ] - ifFalse: [ self beMainDev ] -] - -{ #category : #'initialize-release' } -MooseMetacelloRadioButtonsPart >> initialize [ - - super initialize. - self populateContents: { - self newGroupboxNamed: 'Commit type' With: - (self newColumnWith: { - self newMainDevRadioButton. - self newBranchDevRadioButton. - self newReleaseRadioButton - })} -] - -{ #category : #'radio buttons model' } -MooseMetacelloRadioButtonsPart >> isBranchDev [ - - ^ option = #branchDev -] - -{ #category : #'radio buttons model' } -MooseMetacelloRadioButtonsPart >> isMainDev [ - - ^ option = #mainDev -] - -{ #category : #'radio buttons model' } -MooseMetacelloRadioButtonsPart >> isRelease [ - - ^ option = #release -] - -{ #category : #'morph content setup tools' } -MooseMetacelloRadioButtonsPart >> newBranchDevRadioButton [ - - ^ self newRadionButtonFor: self - getSelected: #isBranchDev - setSelected: #beBranchDev - label: 'Branch developement' - - - -] - -{ #category : #'morph content setup tools' } -MooseMetacelloRadioButtonsPart >> newMainDevRadioButton [ - - ^ self newRadionButtonFor: self - getSelected: #isMainDev - setSelected: #beMainDev - label: 'Main developement' - - - -] - -{ #category : #'morph content setup tools' } -MooseMetacelloRadioButtonsPart >> newRadionButtonFor: aModel getSelected: getSel setSelected: setSel label: aString [ - - - ^(CheckboxMorph - on: aModel selected: getSel changeSelected: setSel) - "getEnabledSelector: enabledSel;" - "font: self labelFont;" - label: aString; - hResizing: #shrinkWrap; - vResizing: #shrinkWrap; - "setBalloonText: helpText;" - beRadioButton -] - -{ #category : #'morph content setup tools' } -MooseMetacelloRadioButtonsPart >> newReleaseRadioButton [ - - ^ self newRadionButtonFor: self - getSelected: #isRelease - setSelected: #beRelease - label: 'Release' - - - -] - -{ #category : #'radio buttons model' } -MooseMetacelloRadioButtonsPart >> option [ - ^ option -] - -{ #category : #'radio buttons model' } -MooseMetacelloRadioButtonsPart >> option: aSymbol [ - "Set the value of option" - - option := aSymbol. - self - changed: #isBranchDev; - changed: #isMainDev; - changed: #isRelease -] - -{ #category : #'accessing - wizard mangement' } -MooseMetacelloRadioButtonsPart >> outputValue [ - - ^ option -] diff --git a/src-archive/Moose-Wizard/MooseMetacelloWizard.class.st b/src-archive/Moose-Wizard/MooseMetacelloWizard.class.st deleted file mode 100644 index 4b8c48b0e..000000000 --- a/src-archive/Moose-Wizard/MooseMetacelloWizard.class.st +++ /dev/null @@ -1,279 +0,0 @@ -Class { - #name : #MooseMetacelloWizard, - #superclass : #WizardControl, - #instVars : [ - 'configuration' - ], - #category : #'Moose-Wizard' -} - -{ #category : #'instance creation' } -MooseMetacelloWizard class >> onConfiguration: aClass [ - "self onConfiguration: ConfigurationOfMoose" - - ^ self onConfiguration: aClass updateProject: true -] - -{ #category : #'instance creation' } -MooseMetacelloWizard class >> onConfiguration: aClass updateProject: trueOrFalse [ - "self onConfiguration: ConfigurationOfMoose updateProject: false" - - - ^ super new configuration: aClass; initializeContent: trueOrFalse ; open -] - -{ #category : #private } -MooseMetacelloWizard >> commitPackageSpec: packageSpec into: repositoryList with: message [ - - | gofer | - gofer := Gofer new. - gofer disablePackageCache. - repositoryList do: [:repository | gofer repository: repository]. - gofer package: packageSpec name. - gofer commit: message - -] - -{ #category : #accessing } -MooseMetacelloWizard >> configuration: aClass [ - - configuration := aClass. -] - -{ #category : #private } -MooseMetacelloWizard >> defaultVersionNumberFromSource: sourceVersionNumber within: versions commitType: commitType [ - "1.2.2 main -> 1.2.3 - 1.2.2 branch -> 1.2.2.1 - 1.2.2.1 branch -> 1.2.2.2 - 1.2.2.1 main -> 1.2.3 - In practice, always get the max minor number + 1" - - | versionBranches prefix lineVersions | - prefix := self prefixMatching: sourceVersionNumber commitType: commitType. - lineVersions := (versions reject: [:v| v blessing = #baseline ]) select: [:version| version versionNumber match: prefix ]. - ^ lineVersions - ifEmpty: [ sourceVersionNumber , '.1' ] - ifNotEmpty: [ (lineVersions detectMax: [ :version | version ]) versionNumber copy incrementMinorVersionNumber printString ] - -] - -{ #category : #private } -MooseMetacelloWizard >> defaultVersionSelector: aVersionNumberString commitType: aSymbol [ - "Inspired by Metacello default selector template" - | selectorPrefix | - aSymbol = #branchDev - ifTrue: [ selectorPrefix := 'branch' ] - ifFalse: [ selectorPrefix := 'version' ]. - ^ String streamContents: [:str| - str nextPutAll: selectorPrefix; - nextPutAll: ((aVersionNumberString copyWithout: $.) copyWithout: $-); - nextPut: $: ] -] - -{ #category : #'initialize-release' } -MooseMetacelloWizard >> initializeContent: shouldUpdateProject [ - - | versions | - "1) update project" - shouldUpdateProject - ifTrue: [ self selectedProjectInstance updateProject ]. - - versions := self selectedProjectInstance versions. - self addPane: (self initializeSourcePaneWith: versions). - self addPane: (self initializeVersionPaneWith: versions). - -] - -{ #category : #'initialize-release' } -MooseMetacelloWizard >> initializeSourcePaneWith: versions [ - - | sourcePane part1 part2 currentVersion | - sourcePane := WizardFirstPane named: 'New version for ', configuration asString. - currentVersion := self selectedProjectInstance currentVersion. - - "part1 := MooseMetacelloRadioButtonsPart new." - part1 := RadioButtonsPart new - options: {#branchDev. #mainDev. #release}; - yourself. - "lastDevelopmentVersion is specific to ConfigurationOfMoose" - configuration lastDevelopmentVersion = currentVersion - ifTrue: [part1 defaultValue: #mainDev] - ifFalse: [part1 defaultValue: #branchDev]. - - part2 := DropListPart new - list: (versions collect: [:each | each versionString ]); - inGroupboxNamed: 'Source Version'; - defaultValue: (versions indexOf: currentVersion); - yourself. - - sourcePane addPart: part1 associatedTo: #commitType . - sourcePane addPart: part2 associatedTo: #sourceVersionNumber. - - ^ sourcePane -] - -{ #category : #'initialize-release' } -MooseMetacelloWizard >> initializeVersionPaneWith: versions [ - - | wizardControl firstPane part1 part2 lastPane part3 part4 part5 part6 secondPane part7 | - - lastPane := WizardLastPane named: 'New version for ' , configuration asString. - - part7 := TextPart - on: [:requiredInputs | self packagesNeedSavingAsStringForVersion: (requiredInputs at: #sourceVersionNumber)] - inGroupBoxNamed: 'Packages that will be saved'. - part3 := TextFieldPart new - inGroupboxNamed: 'Target Version Number'; - defaultValue: [:requiredInputs| - self - defaultVersionNumberFromSource: ( requiredInputs at: #sourceVersionNumber) - within: versions - commitType: ( requiredInputs at: #commitType) ]. - - part4 := TextFieldPart new - inGroupboxNamed: 'Version Selector'; - defaultValue: [:requiredInputs| - self - defaultVersionSelector: (requiredInputs at: #targetVersionNumber) - commitType: (requiredInputs at: #commitType) ]. - - - part5 := DropListPart new - list: #('stable' 'beta' 'development' 'broken'); - inGroupboxNamed: 'Blessing'; - defaultValue: [:requiredInputs| - (#(mainDev branchDev) includes: (requiredInputs at: #commitType)) - ifTrue: ['development'] - ifFalse: ['beta']]. - - part6 := (TextEditorPart inGroupboxNamed: 'Commit Message') textEditorVerticalSize: 175 ; textEditorHorizontalSize: 300; yourself. - - - lastPane - column: [:c | - c row: part3 associatedTo: #targetVersionNumber requiring: #(sourceVersionNumber commitType). - c row: part4 associatedTo: #versionSelector requiring: #(targetVersionNumber commitType). - c row: part5 associatedTo: #blessing requiring: #(commitType). - c row: part6 associatedTo: #message. - ]; - column: part7 associatedTo: #packagesToBeSaved requiring: #(#sourceVersionNumber). - - ^ lastPane -] - -{ #category : #actions } -MooseMetacelloWizard >> packagesNeedSavingAsStringForVersion: aString [ - - |project version dirtyPackages| - project := self selectedProjectInstance. - version := project version: aString. - version ifNotNil: [ - dirtyPackages := project packagesNeedSaving: version versionString. - dirtyPackages - ifEmpty: [ - ^ 'None'. - ] - ifNotEmpty: [ - ^ (self stringForPackages: dirtyPackages). - - ]. - ]. - ^ 'not computable' - -] - -{ #category : #'wizard panes transition' } -MooseMetacelloWizard >> performTerminateButtonAction [ - - | sourceVersion targetVersion versionSelector blessing commitMessage project version dirtyPackages category projectMessage | - - super performTerminateButtonAction. - sourceVersion := wizardInformations at: #sourceVersionNumber. - targetVersion := wizardInformations at: #targetVersionNumber. - versionSelector:= wizardInformations at: #versionSelector asSymbol. - blessing := wizardInformations at: #blessing. - commitMessage := wizardInformations at: #message. - projectMessage := versionSelector, ' ', commitMessage. - category := ((wizardInformations at: #commitType) = #branchDev) - ifTrue: [ 'branches' ] - ifFalse: [ 'versions' ]. - - "spawn new version" - MetacelloVersionConstructor - spawnPackageMethodIn: self selectedClass new - category: category - named: versionSelector - sourceVersion: sourceVersion - targetVersion: targetVersion - blessing: blessing. - - "retrieve dirty packages" - project := self selectedProjectInstance. - version := project version: targetVersion. - dirtyPackages := project packagesNeedSaving: version versionString. - - dirtyPackages ifEmpty: [ "save config directly if no dirty packages" - self saveProject: project with: projectMessage. - ^ self ]. - - "save packages" - dirtyPackages do: [:assoc | - assoc key goferCommitPackage: commitMessage ]. - "update version number" - MetacelloVersionConstructor - updatePackageMethodIn: self selectedClass new - sourceVersion: targetVersion. - - "save configuration" - self saveProject: project with: projectMessage -] - -{ #category : #private } -MooseMetacelloWizard >> prefixMatching: sourceVersionNumber commitType: commitType [ - "1.2.2 main -> 1.2.* - 1.2.2.1 main -> 1.2.* - 1.2.2 branch -> 1.2.2.* - 1.2.2.1 branch -> 1.2.2.* - " - - | index | - commitType = #branchDev - ifTrue: [ index := 3 ] - ifFalse: [ index := 2 ]. - ^ (sourceVersionNumber asMetacelloVersionNumber copyFrom: 1 to: index) printString, '.*' -] - -{ #category : #private } -MooseMetacelloWizard >> saveProject: project with: message [ - - (project projectPackage goferCommitPackage: message) - ifTrue: [ OBInformRequest message: project label, ' saved' ] - ifFalse: [ OBInformRequest message: project label, ' not saved' ] -] - -{ #category : #accessing } -MooseMetacelloWizard >> selectedClass [ - - ^configuration theNonMetaClass -] - -{ #category : #accessing } -MooseMetacelloWizard >> selectedProjectInstance [ - - ^ self selectedClass new project -] - -{ #category : #private } -MooseMetacelloWizard >> stringForPackages: aSetOfPackagesAndrepositories [ - - ^ String streamContents: [:str | - aSetOfPackagesAndrepositories do: [ :assoc | - str - nextPutAll: '*'; - nextPutAll: assoc key name; - nextPutAll: ' => '; - nextPutAll: assoc value description; - cr ] - ] - -] diff --git a/src-archive/Moose-Wizard/MooseVersionWizard.class.st b/src-archive/Moose-Wizard/MooseVersionWizard.class.st deleted file mode 100644 index ca416fe6e..000000000 --- a/src-archive/Moose-Wizard/MooseVersionWizard.class.st +++ /dev/null @@ -1,211 +0,0 @@ -Class { - #name : #MooseVersionWizard, - #superclass : #WizardControl, - #instVars : [ - 'configuration' - ], - #category : #'Moose-Wizard' -} - -{ #category : #'instance creation' } -MooseVersionWizard class >> onConfiguration: aClass [ - "self onConfiguration: ConfigurationOfMoose" - - ^ self onConfiguration: aClass updateProject: true -] - -{ #category : #'instance creation' } -MooseVersionWizard class >> onConfiguration: aClass updateProject: trueOrFalse [ - "self onConfiguration: ConfigurationOfMoose updateProject: false" - - - ^ super new configuration: aClass; initializeContent: trueOrFalse ; open -] - -{ #category : #accessing } -MooseVersionWizard >> configuration: aClass [ - - configuration := aClass. -] - -{ #category : #private } -MooseVersionWizard >> defaultVersionNumberFromSource: sourceVersionNumber within: versions commitType: commitType [ - "1.2.2 main -> 1.2.3 - 1.2.2 branch -> 1.2.2.1 - 1.2.2.1 branch -> 1.2.2.2 - 1.2.2.1 main -> 1.2.3 - In practice, always get the max minor number + 1" - - | versionBranches prefix lineVersions | - prefix := self prefixMatching: sourceVersionNumber commitType: commitType. - lineVersions := (versions reject: [:v| v blessing = #baseline ]) select: [:version| version versionNumber match: prefix ]. - ^ lineVersions - ifEmpty: [ sourceVersionNumber , '.1' ] - ifNotEmpty: [ (lineVersions detectMax: [ :version | version ]) versionNumber copy incrementMinorVersionNumber printString ] - -] - -{ #category : #private } -MooseVersionWizard >> defaultVersionSelector: aVersionNumberString commitType: aSymbol [ - "Inspired by Metacello default selector template" - | selectorPrefix | - aSymbol = #branchDev - ifTrue: [ selectorPrefix := 'branch' ] - ifFalse: [ selectorPrefix := 'version' ]. - ^ String streamContents: [:str| - str nextPutAll: selectorPrefix; - nextPutAll: ((aVersionNumberString copyWithout: $.) copyWithout: $-); - nextPut: $: ] -] - -{ #category : #'initialize-release' } -MooseVersionWizard >> initializeContent: shouldUpdateProject [ - - | versions | - "1) update project" - shouldUpdateProject - ifTrue: [ self selectedProjectInstance updateProject ]. - - versions := self selectedProjectInstance versions. - self addPane: (self initializeSourcePaneWith: versions). - self addPane: (self initializeVersionPaneWith: versions). - -] - -{ #category : #'initialize-release' } -MooseVersionWizard >> initializeSourcePaneWith: versions [ - - | sourcePane part1 part2 currentVersion | - sourcePane := WizardFirstPane named: 'New version for ', configuration asString. - currentVersion := self selectedProjectInstance currentVersion. - - "part1 := MooseMetacelloRadioButtonsPart new." - part1 := RadioButtonsPart new - options: {#branchDev. #mainDev. #release}; - yourself. - "lastDevelopmentVersion is specific to ConfigurationOfMoose" - configuration lastDevelopmentVersion = currentVersion - ifTrue: [part1 defaultValue: #mainDev] - ifFalse: [part1 defaultValue: #branchDev]. - - part2 := DropListPart new - list: (versions collect: [:each | each versionString ]); - inGroupboxNamed: 'Source Version'; - defaultValue: (versions indexOf: currentVersion); - yourself. - - sourcePane addPart: part1 associatedTo: #commitType . - sourcePane addPart: part2 associatedTo: #sourceVersionNumber. - - ^ sourcePane -] - -{ #category : #'initialize-release' } -MooseVersionWizard >> initializeVersionPaneWith: versions [ - - | lastPane part3 part4 part5 part6 | - lastPane := WizardLastPane named: 'New version for ' , configuration asString. - - part3 := TextFieldPart new - inGroupboxNamed: 'Target Version Number'; - defaultValue: [:requiredInputs| - self - defaultVersionNumberFromSource: ( requiredInputs at: #sourceVersionNumber) - within: versions - commitType: ( requiredInputs at: #commitType) ]. - - part4 := TextFieldPart new - inGroupboxNamed: 'Version Selector'; - defaultValue: [:requiredInputs| - self - defaultVersionSelector: (requiredInputs at: #targetVersionNumber) - commitType: (requiredInputs at: #commitType) ]. - - - part5 := DropListPart new - list: #('stable' 'beta' 'development' 'broken'); - inGroupboxNamed: 'Blessing'; - defaultValue: [:requiredInputs| - (#(mainDev branchDev) includes: (requiredInputs at: #commitType)) - ifTrue: [ 'development' ] - ifFalse: [ 'beta' ] ]; - yourself. - - part6 := (TextEditorPart inGroupboxNamed: 'Commit Message') textEditorVerticalSize: 175 ; textEditorHorizontalSize: 300; yourself. - - - lastPane addPart: part3 associatedTo: #targetVersionNumber requiring: #(sourceVersionNumber commitType). - lastPane addPart: part4 associatedTo: #versionSelector requiring: #(targetVersionNumber commitType). - lastPane addPart: part5 associatedTo: #blessing requiring: #(commitType). - lastPane addPart: part6 associatedTo: #message. - - ^ lastPane -] - -{ #category : #'wizard panes transition' } -MooseVersionWizard >> performTerminateButtonAction [ - - - | sourceVersion targetVersion versionSelector blessing projectMessage category project | - super performTerminateButtonAction. - sourceVersion := wizardInformations at: #sourceVersionNumber. - targetVersion := wizardInformations at: #targetVersionNumber. - versionSelector:= wizardInformations at: #versionSelector asSymbol. - blessing := wizardInformations at: #blessing. - projectMessage := versionSelector, ' ', (wizardInformations at: #message). - category := ((wizardInformations at: #commitType) = #branchDev) - ifTrue: [ 'branches' ] - ifFalse: [ 'versions' ]. - - "spawn new version" - MetacelloVersionConstructor - spawnPackageMethodIn: self selectedClass new - category: category - named: versionSelector - sourceVersion: sourceVersion - targetVersion: targetVersion - blessing: blessing asSymbol. - - "update version number" - MetacelloVersionConstructor - updatePackageMethodIn: self selectedClass new - sourceVersion: targetVersion. - - "save configuration" - self saveProject: self selectedProjectInstance with: projectMessage -] - -{ #category : #private } -MooseVersionWizard >> prefixMatching: sourceVersionNumber commitType: commitType [ - "1.2.2 main -> 1.2.* - 1.2.2.1 main -> 1.2.* - 1.2.2 branch -> 1.2.2.* - 1.2.2.1 branch -> 1.2.2.* - " - - | index | - commitType = #branchDev - ifTrue: [ index := 3 ] - ifFalse: [ index := 2 ]. - ^ (sourceVersionNumber asMetacelloVersionNumber copyFrom: 1 to: index) printString, '.*' -] - -{ #category : #private } -MooseVersionWizard >> saveProject: project with: message [ - - (project projectPackage goferCommitPackage: message) - ifTrue: [ OBInformRequest message: project label, ' saved' ] - ifFalse: [ OBInformRequest message: project label, ' not saved' ] -] - -{ #category : #accessing } -MooseVersionWizard >> selectedClass [ - - ^configuration theNonMetaClass -] - -{ #category : #accessing } -MooseVersionWizard >> selectedProjectInstance [ - - ^ self selectedClass new project -] diff --git a/src-archive/Moose-Wizard/PackageCommitWizard.class.st b/src-archive/Moose-Wizard/PackageCommitWizard.class.st deleted file mode 100644 index 4de053839..000000000 --- a/src-archive/Moose-Wizard/PackageCommitWizard.class.st +++ /dev/null @@ -1,104 +0,0 @@ -Class { - #name : #PackageCommitWizard, - #superclass : #WizardControl, - #instVars : [ - 'packages' - ], - #category : #'Moose-Wizard' -} - -{ #category : #'instance creation' } -PackageCommitWizard class >> openWith: workingCopies [ - - ^ (self with: workingCopies) open -] - -{ #category : #'instance creation' } -PackageCommitWizard class >> with: workingCopies [ - - ^ self new initializeContent: workingCopies -] - -{ #category : #private } -PackageCommitWizard >> commitPackageSpec: packageSpec into: repositoryList with: message [ - - | gofer | - gofer := Gofer new. - gofer disablePackageCache. - repositoryList do: [:repository | gofer repository: repository]. - gofer package: packageSpec name. - gofer commit: message - -] - -{ #category : #private } -PackageCommitWizard >> goferCommitPackage: wCopy with: commitMessage [ - - | gofer | - gofer := Gofer new. - gofer repository: (self repositoryFor: wCopy). - gofer package: wCopy packageName. - gofer commit: commitMessage - -] - -{ #category : #'initialize-release' } -PackageCommitWizard >> initializeContent: workingCopies [ - - | lastPane messagePart packagesPart | - packages := workingCopies. - - messagePart := (TextEditorPart inGroupboxNamed: 'Commit Message') - textEditorVerticalSize: 175; - textEditorHorizontalSize: 300; - yourself. - packagesPart := TextPart - on: [:requiredInputs | self stringForPackages: workingCopies] - inGroupBoxNamed: 'Packages'. - - lastPane := WizardLastPane named: 'Save dirty packages'. - - lastPane - column: [:c | - c row: messagePart associatedTo: #message. - ]; - column: packagesPart associatedTo: #packages. - self addPane: lastPane - -] - -{ #category : #'wizard panes transition' } -PackageCommitWizard >> performTerminateButtonAction [ - - | sourceVersion targetVersion versionSelector blessing commitMessage project version dirtyPackages category projectMessage | - - super performTerminateButtonAction. - commitMessage := wizardInformations at: #message. - - "save packages" - packages do: [:wCopy | - self goferCommitPackage: wCopy with: commitMessage ]. - -] - -{ #category : #private } -PackageCommitWizard >> repositoryFor: workingCopy [ - - ^ workingCopy repositoryGroup disableCache repositories first - -] - -{ #category : #private } -PackageCommitWizard >> stringForPackages: workingCopies [ - - | assoc | - ^ String streamContents: [:str | - workingCopies do: [:workingCopy | - str - nextPutAll: workingCopy packageName; - nextPutAll: ' -> '; - nextPutAll: (self repositoryFor: workingCopy) description; - cr ] - ] - -] diff --git a/src-archive/Moose-Wizard/ProjectVersionWizard.class.st b/src-archive/Moose-Wizard/ProjectVersionWizard.class.st deleted file mode 100644 index 111d37ef2..000000000 --- a/src-archive/Moose-Wizard/ProjectVersionWizard.class.st +++ /dev/null @@ -1,150 +0,0 @@ -Class { - #name : #ProjectVersionWizard, - #superclass : #WizardControl, - #instVars : [ - 'configuration' - ], - #category : #'Moose-Wizard' -} - -{ #category : #'instance creation' } -ProjectVersionWizard class >> onConfiguration: aClass [ - "self onConfiguration: ConfigurationOfMoose" - - ^ self onConfiguration: aClass updateProject: true -] - -{ #category : #'instance creation' } -ProjectVersionWizard class >> onConfiguration: aClass updateProject: trueOrFalse [ - "self onConfiguration: ConfigurationOfMoose updateProject: false" - - - ^ super new configuration: aClass; initializeContent: trueOrFalse ; open -] - -{ #category : #accessing } -ProjectVersionWizard >> configuration: aClass [ - - configuration := aClass. -] - -{ #category : #'initialize-release' } -ProjectVersionWizard >> initializeContent: shouldUpdateProject [ - - | versions | - "1) update project" - shouldUpdateProject - ifTrue: [ self selectedProjectInstance updateProject ]. - - versions := self selectedProjectInstance versions. - self addPane: (self initializeSourcePaneWith: versions). - self addPane: (self initializeVersionPaneWith: versions). - -] - -{ #category : #'initialize-release' } -ProjectVersionWizard >> initializeSourcePaneWith: versions [ - - | sourcePane part1 part2 currentVersion | - sourcePane := WizardFirstPane named: 'New version for ', configuration asString. - currentVersion := self selectedProjectInstance currentVersion. - - part2 := DropListPart new - list: (versions collect: [:each | each versionString ]); - inGroupboxNamed: 'Source Version'; - defaultValue: (versions indexOf: currentVersion); - yourself. - - sourcePane addPart: part2 associatedTo: #sourceVersionNumber. - - ^ sourcePane -] - -{ #category : #'initialize-release' } -ProjectVersionWizard >> initializeVersionPaneWith: versions [ - - | lastPane part3 part4 part5 part6 | - lastPane := WizardLastPane named: 'New version for ' , configuration asString. - - part3 := TextFieldPart new - inGroupboxNamed: 'Target Version Number'; - defaultValue: [:requiredInputs| - (requiredInputs at: #sourceVersionNumber) asMetacelloVersionNumber copy incrementMinorVersionNumber ]. - - part4 := TextFieldPart new - inGroupboxNamed: 'Version Selector'; - defaultValue: [:requiredInputs| - ('version', ((requiredInputs at: #targetVersionNumber) asString copyWithout: $.) copyWithout: $-), ':' ]. - - part5 := DropListPart new - list: #('stable' 'beta' 'development' 'broken'); - inGroupboxNamed: 'Blessing'; - defaultValue: [:dropListPart| - part5 list indexOf: 'development' ]; - yourself. - - part6 := (TextEditorPart new) - inGroupboxNamed: 'Commit Message'; - textEditorVerticalSize: 175 ; - textEditorHorizontalSize: 300; - yourself. - - - lastPane addPart: part3 associatedTo: #targetVersionNumber requiring: #(sourceVersionNumber). - lastPane addPart: part4 associatedTo: #versionSelector requiring: #(targetVersionNumber). - lastPane addPart: part5 associatedTo: #blessing. - lastPane addPart: part6 associatedTo: #message. - - ^ lastPane -] - -{ #category : #'wizard panes transition' } -ProjectVersionWizard >> performTerminateButtonAction [ - - - | sourceVersion targetVersion versionSelector blessing projectMessage category project | - super performTerminateButtonAction. - sourceVersion := wizardInformations at: #sourceVersionNumber. - targetVersion := wizardInformations at: #targetVersionNumber. - versionSelector:= wizardInformations at: #versionSelector asSymbol. - blessing := wizardInformations at: #blessing. - projectMessage := versionSelector, ' ', (wizardInformations at: #message). - category := 'versions'. - - "spawn new version" - MetacelloVersionConstructor - spawnPackageMethodIn: self selectedClass new - category: category - named: versionSelector - sourceVersion: sourceVersion - targetVersion: targetVersion - blessing: blessing asSymbol. - - "update version number" - MetacelloVersionConstructor - updatePackageMethodIn: self selectedClass new - sourceVersion: targetVersion. - - "save configuration" - self saveProject: self selectedProjectInstance with: projectMessage -] - -{ #category : #private } -ProjectVersionWizard >> saveProject: project with: message [ - - (project projectPackage goferCommitPackage: message) - ifTrue: [ OBInformRequest message: project label, ' saved' ] - ifFalse: [ OBInformRequest message: project label, ' not saved' ] -] - -{ #category : #accessing } -ProjectVersionWizard >> selectedClass [ - - ^configuration theNonMetaClass -] - -{ #category : #accessing } -ProjectVersionWizard >> selectedProjectInstance [ - - ^ self selectedClass new project -] diff --git a/src-archive/Moose-Wizard/SimpleHierarchicalListMorph.extension.st b/src-archive/Moose-Wizard/SimpleHierarchicalListMorph.extension.st deleted file mode 100644 index 1b54257c4..000000000 --- a/src-archive/Moose-Wizard/SimpleHierarchicalListMorph.extension.st +++ /dev/null @@ -1,17 +0,0 @@ -Extension { #name : #SimpleHierarchicalListMorph } - -{ #category : #'*Moose-Wizard' } -SimpleHierarchicalListMorph >> expandFirstLevel: aMorph [ - | oldState | - "self setSelectedMorph: aMorph." - - "oldState := aMorph isExpanded. - scroller submorphs copy do: [ :each | - (each canExpand and: [each isExpanded = oldState]) ifTrue: [ - each toggleExpandedState. - ]. - ]." - aMorph toggleExpandedState. - self adjustSubmorphPositions. - -] diff --git a/src-archive/Moose-Wizard/package.st b/src-archive/Moose-Wizard/package.st deleted file mode 100644 index 48ff53240..000000000 --- a/src-archive/Moose-Wizard/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'Moose-Wizard' } diff --git a/src-archive/OnMoose-Report/OnMooseHardcodedViewRenderer.class.st b/src-archive/OnMoose-Report/OnMooseHardcodedViewRenderer.class.st deleted file mode 100644 index 98f9243c3..000000000 --- a/src-archive/OnMoose-Report/OnMooseHardcodedViewRenderer.class.st +++ /dev/null @@ -1,39 +0,0 @@ -Class { - #name : #OnMooseHardcodedViewRenderer, - #superclass : #REPMooseQueryConcern, - #category : #'OnMoose-Report' -} - -{ #category : #accessing } -OnMooseHardcodedViewRenderer >> computeResult [ - | viewRenderer referencingMethods | - viewRenderer := self model allModelClasses entityNamed: #'Smalltalk::MOViewRenderer'. - referencingMethods := viewRenderer incomingReferences collect: [:each | each from]. - ^ (referencingMethods select: [ :each | - each parentType isSUnitTestCase not and: [ - each outgoingInvocations anySatisfy: [:inv | inv signature beginsWith: 'nodes:']]]) asMooseGroup -] - -{ #category : #accessing } -OnMooseHardcodedViewRenderer >> explanation [ - ^ 'MOViewRenderer should not be instantiated in the same method where the visualization is defined. The pattern should be along the following lines: - -viewSomething - | view | - view := MOViewRenderer new. - self viewSomethingOn: view. - view open. - -viewSomethingOn: view - view nodes: ... ' -] - -{ #category : #accessing } -OnMooseHardcodedViewRenderer >> label [ - ^ 'Hardcoded MOViewRenderer' -] - -{ #category : #accessing } -OnMooseHardcodedViewRenderer >> stakeholder [ - ^ OnMoosePeople tudorGirba -] diff --git a/src-archive/OnMoose-Report/OnMooseMetaModelClassesWithoutComments.class.st b/src-archive/OnMoose-Report/OnMooseMetaModelClassesWithoutComments.class.st deleted file mode 100644 index 380c747ec..000000000 --- a/src-archive/OnMoose-Report/OnMooseMetaModelClassesWithoutComments.class.st +++ /dev/null @@ -1,36 +0,0 @@ -Class { - #name : #OnMooseMetaModelClassesWithoutComments, - #superclass : #REPMooseQueryConcern, - #category : #'OnMoose-Report' -} - -{ #category : #accessing } -OnMooseMetaModelClassesWithoutComments >> computeResult [ - | uncommentedClasses | - uncommentedClasses := self interestingClasses select: [:each | each comments isEmpty ]. - ^ uncommentedClasses sorted: [:a :b | a name < b name ] -] - -{ #category : #accessing } -OnMooseMetaModelClassesWithoutComments >> explanation [ - ^ 'All subclasses of MooseEntity should have an explicit comment' -] - -{ #category : #private } -OnMooseMetaModelClassesWithoutComments >> interestingClasses [ - ^ (self model allModelClasses entityNamed: #'Smalltalk::MooseEntity') withSubclassHierarchyGroup -" select: [:each | - each isSUnitTestCase not and: [ - #(Moose MO GLM FAMIX) anySatisfy: [:prefix | - each name beginsWith: prefix ]]]" -] - -{ #category : #accessing } -OnMooseMetaModelClassesWithoutComments >> label [ - ^ 'Uncommented meta-model classes' -] - -{ #category : #accessing } -OnMooseMetaModelClassesWithoutComments >> stakeholder [ - ^ OnMoosePeople tudorGirba -] diff --git a/src-archive/OnMoose-Report/OnMooseMetaPropertiesWithoutComments.class.st b/src-archive/OnMoose-Report/OnMooseMetaPropertiesWithoutComments.class.st deleted file mode 100644 index eab60dbf1..000000000 --- a/src-archive/OnMoose-Report/OnMooseMetaPropertiesWithoutComments.class.st +++ /dev/null @@ -1,32 +0,0 @@ -Class { - #name : #OnMooseMetaPropertiesWithoutComments, - #superclass : #REPMooseQueryConcern, - #category : #'OnMoose-Report' -} - -{ #category : #accessing } -OnMooseMetaPropertiesWithoutComments >> computeResult [ - | propertyMethods simplePropertyMethods propertyMethodsWithOpposite uncommented | - simplePropertyMethods := (self model allAnnotationTypes entityNamed: 'MSEProperty:type:') annotatedEntities. - propertyMethodsWithOpposite := (self model allAnnotationTypes entityNamed: 'MSEProperty:type:opposite:') annotatedEntities. - propertyMethods := simplePropertyMethods, propertyMethodsWithOpposite. - uncommented := propertyMethods select: [:each | - (each parentType withSuperclassHierarchy anySatisfy: [:x | x name = 'MooseEntity']) and: [ - (each isAnnotatedWith: 'MSEComment:') not] ]. - ^ uncommented asMooseGroup sorted: [:a :b | a name < b name ] -] - -{ #category : #accessing } -OnMooseMetaPropertiesWithoutComments >> explanation [ - ^ 'All meta decribed properties should have a comment defined via a pragma' -] - -{ #category : #accessing } -OnMooseMetaPropertiesWithoutComments >> label [ - ^ 'Uncommented meta properties' -] - -{ #category : #accessing } -OnMooseMetaPropertiesWithoutComments >> stakeholder [ - ^ OnMoosePeople tudorGirba -] diff --git a/src-archive/OnMoose-Report/OnMooseModelConsistencyReport.class.st b/src-archive/OnMoose-Report/OnMooseModelConsistencyReport.class.st deleted file mode 100644 index d168ad921..000000000 --- a/src-archive/OnMoose-Report/OnMooseModelConsistencyReport.class.st +++ /dev/null @@ -1,14 +0,0 @@ -" -self openOn: MooseModel root allModels last. -" -Class { - #name : #OnMooseModelConsistencyReport, - #superclass : #REPReport, - #category : #'OnMoose-Report' -} - -{ #category : #private } -OnMooseModelConsistencyReport >> build: spec [ - spec label: 'Moose Model Consistency Report'. - spec concern: OnMooseModelNoNilForImportantAttributes new -] diff --git a/src-archive/OnMoose-Report/OnMooseModelNoNilForImportantAttributes.class.st b/src-archive/OnMoose-Report/OnMooseModelNoNilForImportantAttributes.class.st deleted file mode 100644 index a6d90258f..000000000 --- a/src-archive/OnMoose-Report/OnMooseModelNoNilForImportantAttributes.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #OnMooseModelNoNilForImportantAttributes, - #superclass : #REPMooseQueryConcern, - #category : #'OnMoose-Report' -} - -{ #category : #accessing } -OnMooseModelNoNilForImportantAttributes >> computeResult [ - ^ self model allMethods select: [:each | each belongsTo isNil] -] diff --git a/src-archive/OnMoose-Report/OnMooseNoSpacesInMetaDescriptions.class.st b/src-archive/OnMoose-Report/OnMooseNoSpacesInMetaDescriptions.class.st deleted file mode 100644 index cf6fe81fc..000000000 --- a/src-archive/OnMoose-Report/OnMooseNoSpacesInMetaDescriptions.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #OnMooseNoSpacesInMetaDescriptions, - #superclass : #REPMooseQueryConcern, - #category : #'OnMoose-Report' -} - -{ #category : #accessing } -OnMooseNoSpacesInMetaDescriptions >> computeResult [ - | interestingAnnotations | - interestingAnnotations := (self model allAnnotationTypes select: [ :each | each name beginsWith: #MSEProperty:type:]) flatCollect: #instances. - ^ interestingAnnotations select: [ :each | - each attributes first value anySatisfy: [ :c | c = Character space ] ] -] - -{ #category : #accessing } -OnMooseNoSpacesInMetaDescriptions >> explanation [ - ^ 'Properties with spaces in names cause problems when loading the MSE file. Thus, no spaces are allowed in the names of properties' -] - -{ #category : #accessing } -OnMooseNoSpacesInMetaDescriptions >> label [ - ^ 'Annotation instances with spaces in name' -] - -{ #category : #accessing } -OnMooseNoSpacesInMetaDescriptions >> stakeholder [ - ^ OnMoosePeople tudorGirba -] diff --git a/src-archive/OnMoose-Report/OnMoosePeople.class.st b/src-archive/OnMoose-Report/OnMoosePeople.class.st deleted file mode 100644 index a4be5ac4c..000000000 --- a/src-archive/OnMoose-Report/OnMoosePeople.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #OnMoosePeople, - #superclass : #Object, - #category : #'OnMoose-Report' -} - -{ #category : #accessing } -OnMoosePeople class >> tudorGirba [ - ^ REPStakeholder named: 'Tudor Girba' -] diff --git a/src-archive/OnMoose-Report/OnMooseReport.class.st b/src-archive/OnMoose-Report/OnMooseReport.class.st deleted file mode 100644 index c0af5a9e3..000000000 --- a/src-archive/OnMoose-Report/OnMooseReport.class.st +++ /dev/null @@ -1,58 +0,0 @@ -" -self importAndOpen. - -self openOn: MooseModel root allModels first. -" -Class { - #name : #OnMooseReport, - #superclass : #REPReport, - #category : #'OnMoose-Report' -} - -{ #category : #opening } -OnMooseReport class >> importAndExportAsHudsonTests [ - | model | - model := MooseScripts createModelForConfigurationOfMoose. - (self on: model) exportAsHudsonTests -] - -{ #category : #opening } -OnMooseReport class >> importAndOpen [ - | model | - model := MooseScripts createModelForConfigurationOfMoose. - (self on: model) open -] - -{ #category : #opening } -OnMooseReport class >> open [ - | model | - model := MooseModel root allModels anyOne. - (self on: model) open -] - -{ #category : #private } -OnMooseReport >> build: spec [ - spec label: 'Moose On Moose Report'. - - spec composite: 'Development patterns' meaning: 'Moose development patterns' with: [ - spec concern: OnMooseHardcodedViewRenderer new. - spec concern: OnMooseTestClassInTestPackage new. - spec concern: OnMooseTranscriptUsages new. - spec concern: OnMooseUsagesOfObsoleteShowOnAPI new ]. - - spec composite: 'Refactoring todos' meaning: 'Wished refactorings' with: [ - spec concern: OnMooseUsagesOfMOViewRenderer new]. - - spec composite: 'Meta-model' meaning: 'Meta-model related patterns' with: [ - spec concern: OnMooseMetaModelClassesWithoutComments new. - spec concern: OnMooseMetaPropertiesWithoutComments new ]. - - spec composite: 'Annotations' meaning: 'Use of Fame annotations' with: [ - spec concern: OnMooseUsageOfObsoletePropertyAnnotation new. - spec concern: OnMooseUsagesOfStringsInsteadOfSymbolsInMetaAnnotations new. - spec concern: OnMooseUsagesOfPackagePrefixInMSEClassInMetaAnnotations new. - spec concern: OnMooseNoSpacesInMetaDescriptions new ]. - - spec composite: 'Naming conventions' meaning: 'Moose naming conventions' with: [ - spec concern: OnMooseTestClassNaming new ] -] diff --git a/src-archive/OnMoose-Report/OnMooseTestClassInTestPackage.class.st b/src-archive/OnMoose-Report/OnMooseTestClassInTestPackage.class.st deleted file mode 100644 index 1cef83e3c..000000000 --- a/src-archive/OnMoose-Report/OnMooseTestClassInTestPackage.class.st +++ /dev/null @@ -1,35 +0,0 @@ -Class { - #name : #OnMooseTestClassInTestPackage, - #superclass : #REPMooseQueryConcern, - #category : #'OnMoose-Report' -} - -{ #category : #accessing } -OnMooseTestClassInTestPackage >> computeResult [ - | testCaseClass phexampleClass | - testCaseClass := self model allClasses entityNamed: TestCase mooseName. - ^ testCaseClass subclassHierarchyGroup reject: [:each | - (self isException: each) or: [ - '*-Tests*' match: each parentPackage name ] ] -] - -{ #category : #accessing } -OnMooseTestClassInTestPackage >> explanation [ - ^'Test classes should be placed in a package named "*-Tests-*"' -] - -{ #category : #private } -OnMooseTestClassInTestPackage >> isException: aClass [ - "we reject the Phexample classes" - ^ aClass superclassHierarchy anySatisfy: [:each | each name = 'Phexample'] -] - -{ #category : #accessing } -OnMooseTestClassInTestPackage >> label [ - ^'Test classes not in test package' -] - -{ #category : #accessing } -OnMooseTestClassInTestPackage >> stakeholder [ - ^ OnMoosePeople tudorGirba -] diff --git a/src-archive/OnMoose-Report/OnMooseTestClassNaming.class.st b/src-archive/OnMoose-Report/OnMooseTestClassNaming.class.st deleted file mode 100644 index 3abf0f497..000000000 --- a/src-archive/OnMoose-Report/OnMooseTestClassNaming.class.st +++ /dev/null @@ -1,43 +0,0 @@ -" -self openOn: MooseModel root allModels last -" -Class { - #name : #OnMooseTestClassNaming, - #superclass : #REPMooseQueryConcern, - #category : #'OnMoose-Report' -} - -{ #category : #accessing } -OnMooseTestClassNaming >> computeResult [ - | testCaseClass phexampleClass | - testCaseClass := self model allClasses entityNamed: TestCase mooseName. - ^ testCaseClass subclassHierarchyGroup reject: [ :each | self isException: each ] -] - -{ #category : #private } -OnMooseTestClassNaming >> exceptionCases [ - ^ #() "(self model allClasses entityNamed: #'Smalltalk::Phexample') withSubclassHierarchy" -] - -{ #category : #accessing } -OnMooseTestClassNaming >> explanation [ - ^'Test classes should be named "*Test"' -] - -{ #category : #accessing } -OnMooseTestClassNaming >> isException: each [ - ^ "each isStub" false or: [ - ('*Test' match: each name) or: [ - ('*Example' match: each name) or: [ - ('*TestCase' match: each name) and: [ each directSubclasses notEmpty ] ] ] ] -] - -{ #category : #accessing } -OnMooseTestClassNaming >> label [ - ^'Test Class Naming' -] - -{ #category : #accessing } -OnMooseTestClassNaming >> stakeholder [ - ^ OnMoosePeople tudorGirba -] diff --git a/src-archive/OnMoose-Report/OnMooseTranscriptUsages.class.st b/src-archive/OnMoose-Report/OnMooseTranscriptUsages.class.st deleted file mode 100644 index 9c2d5f57c..000000000 --- a/src-archive/OnMoose-Report/OnMooseTranscriptUsages.class.st +++ /dev/null @@ -1,53 +0,0 @@ -Class { - #name : #OnMooseTranscriptUsages, - #superclass : #REPMooseQueryConcern, - #category : #'OnMoose-Report' -} - -{ #category : #'as yet unclassified' } -OnMooseTranscriptUsages >> classesToIgnore [ - ^ #(#OSProcess - #UnixProcess - #AioEventHandlerExample - #UnixOSProcessAccessor - #LANNode - #WorkStation - #TheRoot - #DictionarySpeedTest - #ObjectTester - #FileServer - #DudeAClass - #DudeAnotherClass - 'LAN*') -] - -{ #category : #'as yet unclassified' } -OnMooseTranscriptUsages >> computeResult [ - | transcript allTranscriptAccessors | - transcript := self model allGlobalVariables entityNamed: #Transcript. - allTranscriptAccessors := transcript incomingAccesses collectAsSet: [ :anAccess | anAccess accessor ]. - ^ (allTranscriptAccessors - reject: [ :each | each parentType isStub or: [ - self classesToIgnore anySatisfy: [ :toIgnore | - toIgnore match: each parentType name ] ] ]) asMooseGroup -] - -{ #category : #'as yet unclassified' } -OnMooseTranscriptUsages >> explanation [ - ^'Transcript should not be used in the code' -] - -{ #category : #'as yet unclassified' } -OnMooseTranscriptUsages >> label [ - ^'Transcript usages' -] - -{ #category : #accessing } -OnMooseTranscriptUsages >> stakeholder [ - ^ OnMoosePeople tudorGirba -] - -{ #category : #'as yet unclassified' } -OnMooseTranscriptUsages >> statusValue [ - ^ nil -] diff --git a/src-archive/OnMoose-Report/OnMooseUsageOfObsoletePropertyAnnotation.class.st b/src-archive/OnMoose-Report/OnMooseUsageOfObsoletePropertyAnnotation.class.st deleted file mode 100644 index a4ff0397f..000000000 --- a/src-archive/OnMoose-Report/OnMooseUsageOfObsoletePropertyAnnotation.class.st +++ /dev/null @@ -1,44 +0,0 @@ -Class { - #name : #OnMooseUsageOfObsoletePropertyAnnotation, - #superclass : #REPMooseQueryConcern, - #category : #'OnMoose-Report' -} - -{ #category : #accessing } -OnMooseUsageOfObsoletePropertyAnnotation >> computeResult [ - | tmp | - tmp := OrderedCollection new. - self obsoletePragmaNames do: [:each | - self model allAnnotationTypes - entityNamed: each - ifAbsent: [ OrderedCollection new ] - ifPresent: [:ann | tmp addAll: ann annotatedEntities ] ]. - - ^ FAMIXMethodGroup withAll: tmp -] - -{ #category : #accessing } -OnMooseUsageOfObsoletePropertyAnnotation >> explanation [ - ^ 'All pragmas should be replaced with ones. - -See: -http://code.google.com/p/moose-technology/issues/detail?id=706' -] - -{ #category : #accessing } -OnMooseUsageOfObsoletePropertyAnnotation >> label [ - ^ 'Use of obsolete pragmas' -] - -{ #category : #accessing } -OnMooseUsageOfObsoletePropertyAnnotation >> obsoletePragmaNames [ - ^ #( - property:longName:description: - property: - ) -] - -{ #category : #accessing } -OnMooseUsageOfObsoletePropertyAnnotation >> stakeholder [ - ^ OnMoosePeople tudorGirba -] diff --git a/src-archive/OnMoose-Report/OnMooseUsagesOfMOViewRenderer.class.st b/src-archive/OnMoose-Report/OnMooseUsagesOfMOViewRenderer.class.st deleted file mode 100644 index 6855f4082..000000000 --- a/src-archive/OnMoose-Report/OnMooseUsagesOfMOViewRenderer.class.st +++ /dev/null @@ -1,39 +0,0 @@ -" -OnMooseUsagesOfMOViewRenderer openOn: MooseModel root allModels last -" -Class { - #name : #OnMooseUsagesOfMOViewRenderer, - #superclass : #REPMooseQueryConcern, - #category : #'OnMoose-Report' -} - -{ #category : #private } -OnMooseUsagesOfMOViewRenderer >> allowedClassNamePatterns [ - ^ #('Smalltalk::MO*') -] - -{ #category : #accessing } -OnMooseUsagesOfMOViewRenderer >> computeResult [ - | viewRenderer unwantedReferences | - viewRenderer := self model allClasses entityNamed: 'Smalltalk::MOViewRenderer'. - unwantedReferences := viewRenderer incomingReferences - select: [ :each | self allowedClassNamePatterns noneSatisfy: [ :allowedPattern | allowedPattern match: each from mooseName ] ]. - ^ ((unwantedReferences collect: [:each | each from ]) sorted: [:a :b | a mooseName < b mooseName ]) asMooseGroup -] - -{ #category : #accessing } -OnMooseUsagesOfMOViewRenderer >> explanation [ - ^ 'Mondrian should be replaced with Roassal inside the Moose distribution. The references to MOViewRenderer indicate places that need to be refactored. - -The only allowed patterns are ', (', ' join: self allowedClassNamePatterns) -] - -{ #category : #accessing } -OnMooseUsagesOfMOViewRenderer >> label [ - ^ 'Usages of MOViewRenderer' -] - -{ #category : #accessing } -OnMooseUsagesOfMOViewRenderer >> stakeholder [ - ^ OnMoosePeople tudorGirba -] diff --git a/src-archive/OnMoose-Report/OnMooseUsagesOfObsoleteShowOnAPI.class.st b/src-archive/OnMoose-Report/OnMooseUsagesOfObsoleteShowOnAPI.class.st deleted file mode 100644 index 5badbeb33..000000000 --- a/src-archive/OnMoose-Report/OnMooseUsagesOfObsoleteShowOnAPI.class.st +++ /dev/null @@ -1,29 +0,0 @@ -Class { - #name : #OnMooseUsagesOfObsoleteShowOnAPI, - #superclass : #REPMooseQueryConcern, - #category : #'OnMoose-Report' -} - -{ #category : #accessing } -OnMooseUsagesOfObsoleteShowOnAPI >> computeResult [ - | explicitBrowser referencingMethods showOn a | - explicitBrowser := self model allModelClasses entityNamed: #'Smalltalk::GLMExplicitBrowser'. - showOn := explicitBrowser methods detect: [:each | each name = #'showOn:']. - referencingMethods := showOn incomingInvocations collectAsSet: [:each | each from]. - ^ referencingMethods asMooseGroup -] - -{ #category : #accessing } -OnMooseUsagesOfObsoleteShowOnAPI >> explanation [ - ^ 'GLMTabulator>>showOn: should not be used anymore. Please use the transmit ... andShow: API' -] - -{ #category : #accessing } -OnMooseUsagesOfObsoleteShowOnAPI >> label [ - ^ 'Usages of obsolete GLMTabulator>>showOn:' -] - -{ #category : #accessing } -OnMooseUsagesOfObsoleteShowOnAPI >> stakeholder [ - ^ OnMoosePeople tudorGirba -] diff --git a/src-archive/OnMoose-Report/OnMooseUsagesOfPackagePrefixInMSEClassInMetaAnnotations.class.st b/src-archive/OnMoose-Report/OnMooseUsagesOfPackagePrefixInMSEClassInMetaAnnotations.class.st deleted file mode 100644 index 913a0b44c..000000000 --- a/src-archive/OnMoose-Report/OnMooseUsagesOfPackagePrefixInMSEClassInMetaAnnotations.class.st +++ /dev/null @@ -1,42 +0,0 @@ -Class { - #name : #OnMooseUsagesOfPackagePrefixInMSEClassInMetaAnnotations, - #superclass : #REPMooseQueryConcern, - #category : #'OnMoose-Report' -} - -{ #category : #accessing } -OnMooseUsagesOfPackagePrefixInMSEClassInMetaAnnotations >> computeResult [ - - ^ self model allAnnotationTypes - entityNamed: #'MSEClass:super:' - ifAbsent: [#()] - ifPresent: [ :ann | - (ann instances select: [ :each | - | annInstances packageInstance | - annInstances := each annotatedEntity annotationInstances. - packageInstance := annInstances detect: [ :inst | inst name = #package: ] ifNone: [ nil ]. - packageInstance - ifNil: [false] - ifNotNil: [ - | packageName | - packageName := packageInstance attributes first value. - each attributes first value prefixMatchesRegex: packageName ]]) asMooseGroup ] -] - -{ #category : #accessing } -OnMooseUsagesOfPackagePrefixInMSEClassInMetaAnnotations >> explanation [ - - ^ ' should use the fame name to point to the mse class' -] - -{ #category : #accessing } -OnMooseUsagesOfPackagePrefixInMSEClassInMetaAnnotations >> label [ - - ^ 'Use of the package and fame name instead of fame name to denote mse class' -] - -{ #category : #accessing } -OnMooseUsagesOfPackagePrefixInMSEClassInMetaAnnotations >> stakeholder [ - - ^ OnMoosePeople tudorGirba -] diff --git a/src-archive/OnMoose-Report/OnMooseUsagesOfStringsInsteadOfSymbolsInMetaAnnotations.class.st b/src-archive/OnMoose-Report/OnMooseUsagesOfStringsInsteadOfSymbolsInMetaAnnotations.class.st deleted file mode 100644 index 310bc4d1b..000000000 --- a/src-archive/OnMoose-Report/OnMooseUsagesOfStringsInsteadOfSymbolsInMetaAnnotations.class.st +++ /dev/null @@ -1,30 +0,0 @@ -Class { - #name : #OnMooseUsagesOfStringsInsteadOfSymbolsInMetaAnnotations, - #superclass : #REPMooseQueryConcern, - #category : #'OnMoose-Report' -} - -{ #category : #accessing } -OnMooseUsagesOfStringsInsteadOfSymbolsInMetaAnnotations >> computeResult [ - - ^ self model allAnnotationTypes - entityNamed: #'MSEClass:super:' - ifAbsent: [#()] - ifPresent: [:ann | - (ann instances select: [:each | each attributes second value isSymbol not]) asMooseGroup ] -] - -{ #category : #accessing } -OnMooseUsagesOfStringsInsteadOfSymbolsInMetaAnnotations >> explanation [ - ^ ' should use a symbol to point to the superclass' -] - -{ #category : #accessing } -OnMooseUsagesOfStringsInsteadOfSymbolsInMetaAnnotations >> label [ - ^ 'Use of string instead of symbol to denote superclass' -] - -{ #category : #accessing } -OnMooseUsagesOfStringsInsteadOfSymbolsInMetaAnnotations >> stakeholder [ - ^ OnMoosePeople tudorGirba -] diff --git a/src-archive/OnMoose-Report/package.st b/src-archive/OnMoose-Report/package.st deleted file mode 100644 index 9f1376ddf..000000000 --- a/src-archive/OnMoose-Report/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'OnMoose-Report' } diff --git a/src-archive/PetitAnalyzer/PPActionParser.extension.st b/src-archive/PetitAnalyzer/PPActionParser.extension.st deleted file mode 100644 index 676514969..000000000 --- a/src-archive/PetitAnalyzer/PPActionParser.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #PPActionParser } - -{ #category : #'*petitanalyzer-matching' } -PPActionParser >> match: aParser inContext: aDictionary seen: anIdentitySet [ - ^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self block = aParser block ] -] diff --git a/src-archive/PetitAnalyzer/PPAnalyzerTest.class.st b/src-archive/PetitAnalyzer/PPAnalyzerTest.class.st deleted file mode 100644 index 118bc0926..000000000 --- a/src-archive/PetitAnalyzer/PPAnalyzerTest.class.st +++ /dev/null @@ -1,541 +0,0 @@ -Class { - #name : #PPAnalyzerTest, - #superclass : #PPAbstractParserTest, - #category : #'PetitAnalyzer-Tests' -} - -{ #category : #accessing } -PPAnalyzerTest class >> packageNamesUnderTest [ - ^ #('PetitAnalyzer') -] - -{ #category : #utilities } -PPAnalyzerTest >> assert: aCollection includes: aString epsilon: aBoolean [ - | parsers checker stream | - parsers := aCollection - collect: [ :each | each end ]. - checker := [ :string | - parsers anySatisfy: [ :parser | - (parser parse: string asPetitStream) - isPetitFailure not ] ]. - stream := WriteStream on: String new. - 32 to: 127 do: [ :index | - (checker value: (String with: (Character value: index))) - ifTrue: [ stream nextPut: (Character value: index) ] ]. - self - assert: stream contents = aString - description: 'Expected ' , aString printString , ', but got ' , stream contents printString. - self - assert: (checker value: '') = aBoolean - description: 'Expected epsilon to ' , (aBoolean ifTrue: [ 'be' ] ifFalse: [ 'not be' ]) , ' included' -] - -{ #category : #accessing } -PPAnalyzerTest >> grammarA [ - "Güting, Erwig, Übersetzerbau, Springer (p.63)" - - | grammar | - grammar := Dictionary new. - - " terminals " - grammar at: #a put: $a asParser. - grammar at: #b put: $b asParser. - grammar at: #c put: $c asParser. - grammar at: #d put: $d asParser. - grammar at: #e put: nil asParser. - - " non terminals " - grammar at: #B put: (grammar at: #b) / (grammar at: #e). - grammar at: #A put: (grammar at: #a) / (grammar at: #B). - grammar at: #S put: (grammar at: #A) , (grammar at: #B) , (grammar at: #c) , (grammar at: #d). - - ^ grammar -] - -{ #category : #accessing } -PPAnalyzerTest >> grammarB [ - "The canonical grammar to exercise first- and follow-set calculation, probably originally from the dragon-book." - - | grammar | - grammar := Dictionary new. - #(E Ep T Tp F) do: [ :each | grammar at: each put: (PPUnresolvedParser named: each) ]. - - (grammar at: #E) def: (grammar at: #T) , (grammar at: #Ep). - (grammar at: #Ep) def: ($+ asParser , (grammar at: #T) , (grammar at: #Ep)) optional. - - (grammar at: #T) def: (grammar at: #F) , (grammar at: #Tp). - (grammar at: #Tp) def: ($* asParser , (grammar at: #F) , (grammar at: #Tp)) optional. - - (grammar at: #F) def: ($( asParser , (grammar at: #E) , $) asParser) / $i asParser. - - #(E Ep T Tp F) do: [ :each | (grammar at: each) name: each ]. - - ^ grammar -] - -{ #category : #accessing } -PPAnalyzerTest >> grammarC [ - "A highly recrusive grammar." - - | grammar | - grammar := PPUnresolvedParser new. - grammar def: (grammar , $+ asParser , grammar) / $1 asParser. - ^grammar -] - -{ #category : #accessing } -PPAnalyzerTest >> grammarD [ - "A highly ambiguous grammar from: Saichaitanya Jampana. Exploring the problem of ambiguity in context-free grammars. Master's thesis, Oklahoma State University, July 2005." - - | grammar | - grammar := Dictionary new. - #(S A a B b) do: [ :each | grammar at: each put: (PPUnresolvedParser named: each) ]. - - (grammar at: #a) def: $a asParser. - (grammar at: #b) def: $b asParser. - - (grammar at: #S) def: (grammar at: #A) , (grammar at: #B) / (grammar at: #a). - (grammar at: #A) def: (grammar at: #S) , (grammar at: #B) / (grammar at: #b). - (grammar at: #B) def: (grammar at: #B) , (grammar at: #A) / (grammar at: #a). - - ^ grammar -] - -{ #category : #accessing } -PPAnalyzerTest >> grammarE [ - "The most stupid parser, it just references itself and never consumes anything. All algorithms should survive such an attack." - - | parser | - parser := PPDelegateParser new. - parser setParser: parser. - ^ parser -] - -{ #category : #testing } -PPAnalyzerTest >> testAllNamedParsers [ - | p1 p2 p3 | - p1 := #digit asParser name: 'a'. - p2 := (#digit asParser name: 'b') star. - p3 := (#digit asParser name: 'c') token end. - self assert: p1 allNamedParsers size equals: 1. - self assert: p1 allNamedParsers first name equals: 'a'. - self assert: p2 allNamedParsers size equals: 1. - self assert: p2 allNamedParsers first name equals: 'b'. - self assert: p3 allNamedParsers size equals: 1. - self assert: p3 allNamedParsers first name equals: 'c' -] - -{ #category : #testing } -PPAnalyzerTest >> testAllParsers [ - | p1 p2 p3 | - p1 := #lowercase asParser. - p2 := p1 ==> #asUppercase. - p3 := PPUnresolvedParser new. - p3 def: p2 / p3. - self assert: p1 allParsers size equals: 1. - self assert: p2 allParsers size equals: 2. - self assert: p3 allParsers size equals: 3 -] - -{ #category : #'testing-cycleset' } -PPAnalyzerTest >> testCycleSetGrammarA [ - self grammarA do: [ :each | self assert: each cycleSet isEmpty ] -] - -{ #category : #'testing-cycleset' } -PPAnalyzerTest >> testCycleSetGrammarB [ - self grammarB do: [ :each | self assert: each cycleSet isEmpty ] -] - -{ #category : #'testing-cycleset' } -PPAnalyzerTest >> testCycleSetGrammarC [ - | grammar cycleSet | - grammar := self grammarC. - cycleSet := grammar cycleSet. - self assert: cycleSet size equals: 2. - self assert: (cycleSet includes: grammar) -] - -{ #category : #'testing-cycleset' } -PPAnalyzerTest >> testCycleSetGrammarD [ - | grammar cycleSet | - grammar := self grammarD. - cycleSet := (grammar at: #S) cycleSet. - self assert: cycleSet size equals: 4. - self assert: (cycleSet includes: (grammar at: #A)). - self assert: (cycleSet includes: (grammar at: #S)). - cycleSet := (grammar at: #A) cycleSet. - self assert: cycleSet size equals: 4. - self assert: (cycleSet includes: (grammar at: #A)). - self assert: (cycleSet includes: (grammar at: #S)). - cycleSet := (grammar at: #B) cycleSet. - self assert: cycleSet size equals: 2. - self assert: (cycleSet includes: (grammar at: #B)) -] - -{ #category : #'testing-cycleset' } -PPAnalyzerTest >> testCycleSetGrammarE [ - | grammar cycleSet | - grammar := self grammarE. - cycleSet := grammar cycleSet. - self assert: cycleSet size equals: 1. - self assert: (cycleSet includes: grammar) -] - -{ #category : #'testing-cycleset' } -PPAnalyzerTest >> testCycleSetInChoice [ - | parser cycleSet | - parser := PPUnresolvedParser new. - parser def: parser / $a asParser. - cycleSet := parser cycleSet. - self assert: cycleSet size equals: 1. - self assert: (cycleSet includes: parser). - parser := PPUnresolvedParser new. - parser def: $a asParser / parser. - cycleSet := parser cycleSet. - self assert: cycleSet size equals: 1. - self assert: (cycleSet includes: parser) -] - -{ #category : #'testing-cycleset' } -PPAnalyzerTest >> testCycleSetInSequence [ - | parser cycleSet | - parser := PPUnresolvedParser new. - parser def: parser , $a asParser. - cycleSet := parser cycleSet. - self assert: cycleSet size equals: 1. - self assert: (cycleSet includes: parser). - parser := PPUnresolvedParser new. - parser def: nil asParser , parser. - cycleSet := parser cycleSet. - self assert: cycleSet size equals: 1. - self assert: (cycleSet includes: parser). - parser := PPUnresolvedParser new. - parser def: $a asParser , parser. - cycleSet := parser cycleSet. - self assert: cycleSet isEmpty -] - -{ #category : #'testing-transform' } -PPAnalyzerTest >> testDelegateReplace [ - | one other delegate | - one := $a asParser. - other := $b asParser. - delegate := one token. - self assert: delegate children first == one. - self deny: delegate children first == other. - - delegate replace: other with: one. - self assert: delegate children first == one. - self deny: delegate children first == other. - - delegate replace: one with: other. - self deny: delegate children first == one. - self assert: delegate children first == other -] - -{ #category : #'testing-firstset' } -PPAnalyzerTest >> testFirstSetExpression [ - | grammar | - grammar := PPArithmeticParser new. - self assert: grammar start firstSet includes: '(-0123456789' epsilon: false. - self assert: grammar addition firstSet includes: '(-0123456789' epsilon: false. - self assert: grammar factors firstSet includes: '(-0123456789' epsilon: false. - self assert: grammar multiplication firstSet includes: '(-0123456789' epsilon: false. - self assert: grammar number firstSet includes: '-0123456789' epsilon: false. - self assert: grammar parentheses firstSet includes: '(' epsilon: false. - self assert: grammar power firstSet includes: '(-0123456789' epsilon: false. - self assert: grammar primary firstSet includes: '(-0123456789' epsilon: false. - self assert: grammar terms firstSet includes: '(-0123456789' epsilon: false -] - -{ #category : #'testing-firstset' } -PPAnalyzerTest >> testFirstSetGrammarA [ - | grammar | - grammar := self grammarA. - self assert: (grammar at: #a) firstSet includes: 'a' epsilon: false. - self assert: (grammar at: #b) firstSet includes: 'b' epsilon: false. - self assert: (grammar at: #c) firstSet includes: 'c' epsilon: false. - self assert: (grammar at: #d) firstSet includes: 'd' epsilon: false. - self assert: (grammar at: #e) firstSet includes: '' epsilon: true. - self assert: (grammar at: #S) firstSet includes: 'abc' epsilon: false. - self assert: (grammar at: #A) firstSet includes: 'ab' epsilon: true. - self assert: (grammar at: #B) firstSet includes: 'b' epsilon: true -] - -{ #category : #'testing-firstset' } -PPAnalyzerTest >> testFirstSetGrammarB [ - | grammar | - grammar := self grammarB. - self assert: (grammar at: #E) firstSet includes: '(i' epsilon: false. - self assert: (grammar at: #Ep) firstSet includes: '+' epsilon: true. - self assert: (grammar at: #T) firstSet includes: '(i' epsilon: false. - self assert: (grammar at: #Tp) firstSet includes: '*' epsilon: true. - self assert: (grammar at: #F) firstSet includes: '(i' epsilon: false -] - -{ #category : #'testing-firstset' } -PPAnalyzerTest >> testFirstSetGrammarC [ - | grammar | - grammar := self grammarC. - self assert: grammar firstSet includes: '1' epsilon: false -] - -{ #category : #'testing-firstset' } -PPAnalyzerTest >> testFirstSetGrammarD [ - | grammar | - grammar := self grammarD. - self assert: (grammar at: #S) firstSet includes: 'ab' epsilon: false. - self assert: (grammar at: #A) firstSet includes: 'ab' epsilon: false. - self assert: (grammar at: #B) firstSet includes: 'a' epsilon: false. - self assert: (grammar at: #a) firstSet includes: 'a' epsilon: false. - self assert: (grammar at: #b) firstSet includes: 'b' epsilon: false -] - -{ #category : #'testing-firstset' } -PPAnalyzerTest >> testFirstSetGrammarE [ - self assert: self grammarE firstSet includes: '' epsilon: false -] - -{ #category : #'testing-firstset' } -PPAnalyzerTest >> testFirstSetLambda [ - | grammar | - grammar := PPLambdaParser new. - self assert: grammar start firstSet includes: '(ABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyz' epsilon: false. - self assert: grammar abstraction firstSet includes: '\' epsilon: false. - self assert: grammar application firstSet includes: '(' epsilon: false. - self assert: grammar expression firstSet includes: '(ABCDEFGHIJKLMNOPQRSTUVWXYZ\abcdefghijklmnopqrstuvwxyz' epsilon: false. - self assert: grammar variable firstSet includes: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' epsilon: false -] - -{ #category : #'testing-followset' } -PPAnalyzerTest >> testFollowSetExampleA [ - | grammar followSets | - grammar := self grammarA. - followSets := (grammar at: #S) followSets. - self assert: (followSets at: (grammar at: #a)) includes: 'bc' epsilon: false. - self assert: (followSets at: (grammar at: #b)) includes: 'bc' epsilon: false. - self assert: (followSets at: (grammar at: #c)) includes: 'd' epsilon: false. - self assert: (followSets at: (grammar at: #d)) includes: '' epsilon: true. - self assert: (followSets at: (grammar at: #e)) includes: 'bc' epsilon: false. - self assert: (followSets at: (grammar at: #S)) includes: '' epsilon: true. - self assert: (followSets at: (grammar at: #A)) includes: 'bc' epsilon: false. - self assert: (followSets at: (grammar at: #B)) includes: 'bc' epsilon: false -] - -{ #category : #'testing-followset' } -PPAnalyzerTest >> testFollowSetExampleB [ - | grammar followSets | - grammar := self grammarB. - followSets := (grammar at: #E) followSets. - self assert: (followSets at: (grammar at: #E)) includes: ')' epsilon: true. - self assert: (followSets at: (grammar at: #Ep)) includes: ')' epsilon: true. - self assert: (followSets at: (grammar at: #T)) includes: ')+' epsilon: true. - self assert: (followSets at: (grammar at: #Tp)) includes: ')+' epsilon: true. - self assert: (followSets at: (grammar at: #F)) includes: ')*+' epsilon: true -] - -{ #category : #'testing-followset' } -PPAnalyzerTest >> testFollowSetExampleC [ - self assert: self grammarC followSet includes: '+' epsilon: true -] - -{ #category : #'testing-followset' } -PPAnalyzerTest >> testFollowSetExampleD [ - | grammar followSets | - grammar := self grammarD. - followSets := (grammar at: #S) followSets. - self assert: (followSets at: (grammar at: #S)) includes: 'a' epsilon: true. - self assert: (followSets at: (grammar at: #A)) includes: 'ab' epsilon: true. - self assert: (followSets at: (grammar at: #B)) includes: 'ab' epsilon: true. - self assert: (followSets at: (grammar at: #a)) includes: 'ab' epsilon: true. - self assert: (followSets at: (grammar at: #b)) includes: 'ab' epsilon: true -] - -{ #category : #'testing-followset' } -PPAnalyzerTest >> testFollowSetExampleE [ - self assert: self grammarE followSet includes: '' epsilon: true -] - -{ #category : #testing } -PPAnalyzerTest >> testInnerChildren [ - | p1 p2 p3 | - p1 := #digit asParser name: 'a'. - p2 := #digit asParser star name: 'b'. - p3 := (#digit asParser name: 'c') token star end. - self assert: p1 innerChildren isEmpty. - self assert: p2 innerChildren size equals: 1. - self assert: (p2 innerChildren allSatisfy: [ :each | each name isNil ]). - self assert: p3 innerChildren size equals: 2. - self assert: (p3 innerChildren allSatisfy: [ :each | each name isNil ]) -] - -{ #category : #testing } -PPAnalyzerTest >> testIsNullable [ - self assert: $a asParser star isNullable. - self assert: nil asParser isNullable. - - self deny: $a asParser plus isNullable. - self deny: PPLiteralSequenceParser new isNullable. - self deny: PPLiteralObjectParser new isNullable. - self deny: PPPredicateParser new isNullable. - self deny: PPChoiceParser new isNullable. - self deny: PPSequenceParser new isNullable. - self deny: PPAndParser new isNullable. - self deny: PPTokenParser new isNullable -] - -{ #category : #testing } -PPAnalyzerTest >> testIsTerminal [ - self assert: PPEpsilonParser new isTerminal. - self assert: PPFailingParser new isTerminal. - self assert: PPPluggableParser new isTerminal. - self assert: PPLiteralObjectParser new isTerminal. - self assert: PPLiteralSequenceParser new isTerminal. - self assert: PPPredicateObjectParser new isTerminal. - self assert: PPPredicateSequenceParser new isTerminal. - - self deny: ($a asParser / $b asParser) isTerminal. - self deny: ($a asParser , $b asParser) isTerminal. - self deny: ($a asParser and) isTerminal. - self deny: ($a asParser not) isTerminal -] - -{ #category : #'testing-transform' } -PPAnalyzerTest >> testListReplace [ - | one other another list | - one := $a asParser. - other := $b asParser. - another := $c asParser. - list := one , another , one. - self assert: list children first == one. - self assert: list children second == another. - self assert: list children last == one. - - list replace: other with: one. - self assert: list children first == one. - self assert: list children second == another. - self assert: list children last == one. - - list replace: one with: other. - self assert: list children first == other. - self assert: list children second == another. - self assert: list children last == other. - - list replace: another with: one. - self assert: list children first == other. - self assert: list children second == one. - self assert: list children last == other -] - -{ #category : #testing } -PPAnalyzerTest >> testNamedChildren [ - | p1 p2 p3 p4 | - p1 := #digit asParser name: 'a'. - p2 := (#digit asParser name: 'b') star. - p3 := (#digit asParser name: 'c') token end. - p4 := ((#digit asParser name: 'c') token name: 'd') end. - self assert: p1 namedChildren isEmpty. - self assert: p2 namedChildren size equals: 1. - self assert: p2 namedChildren first name equals: 'b'. - self assert: p3 namedChildren size equals: 1. - self assert: p3 namedChildren first name equals: 'c'. - self assert: p4 namedChildren size equals: 1. - self assert: p4 namedChildren first name equals: 'd' -] - -{ #category : #'testing-transform' } -PPAnalyzerTest >> testRepetitionReplace [ - | one two otherone othertwo repetition | - one := $a asParser. - two := $b asParser. - otherone := $1 asParser. - othertwo := $2 asParser. - - repetition := one starLazy: two. - self assert: repetition children first == one. - self assert: repetition children second == two. - - repetition replace: one with: otherone. - self assert: repetition children first == otherone. - self assert: repetition children second == two. - - repetition replace: two with: othertwo. - self assert: repetition children first == otherone. - self assert: repetition children second == othertwo -] - -{ #category : #'testing-transform' } -PPAnalyzerTest >> testTransformIdentityGrammarC [ - | orig tran | - orig := self grammarC. - tran := orig transform: [ :each | each ]. - self deny: orig == tran. - self deny: orig children first == tran children first. - self deny: orig children first children first == tran children first children first. - self deny: orig children first children last == tran children first children last. - self deny: orig children last == tran children last. - - self assert: orig class == PPChoiceParser. - self assert: orig children first class == PPSequenceParser. - self assert: orig children first children first == orig. - self assert: orig children first children last == orig. - self assert: orig children last class == PPLiteralObjectParser. - - self assert: tran class == PPChoiceParser. - self assert: tran children first class == PPSequenceParser. - self assert: tran children first children first == tran. - self assert: tran children first children last == tran. - self assert: tran children last class == PPLiteralObjectParser -] - -{ #category : #'testing-transform' } -PPAnalyzerTest >> testTransformIdentityGrammarE [ - | orig tran | - orig := self grammarE. - tran := orig transform: [ :each | each ]. - self deny: orig == tran. - self deny: orig children first = tran children first. - - self assert: orig class == PPDelegateParser. - self assert: orig children first == orig. - - self assert: tran class == PPDelegateParser. - self assert: tran children first == tran -] - -{ #category : #'testing-transform' } -PPAnalyzerTest >> testTransformWrapGrammarC [ - | orig tran | - orig := self grammarC. - tran := orig transform: [ :each | each memoized ]. - - self assert: orig class == PPChoiceParser. - self assert: orig children first class == PPSequenceParser. - self assert: orig children first children first == orig. - self assert: orig children first children last == orig. - self assert: orig children last class == PPLiteralObjectParser. - - self assert: tran class == PPMemoizedParser. - self assert: tran children first class == PPChoiceParser. - self assert: tran children first children first class == PPMemoizedParser. - self assert: tran children first children first children first class == PPSequenceParser. - self assert: tran children first children first children first children first == tran. - self assert: tran children first children first children first children last == tran. - self assert: tran children first children last class == PPMemoizedParser. - self assert: tran children first children last children first class == PPLiteralObjectParser -] - -{ #category : #'testing-transform' } -PPAnalyzerTest >> testTransformWrapGrammarE [ - | orig tran | - orig := self grammarE. - tran := orig transform: [ :each | each memoized ]. - - self assert: orig class == PPDelegateParser. - self assert: orig children first == orig. - - self assert: tran class == PPMemoizedParser. - self assert: tran children first class == PPDelegateParser. - self assert: tran children first children first == tran -] diff --git a/src-archive/PetitAnalyzer/PPBlockReplaceRule.class.st b/src-archive/PetitAnalyzer/PPBlockReplaceRule.class.st deleted file mode 100644 index 75a3ad3a4..000000000 --- a/src-archive/PetitAnalyzer/PPBlockReplaceRule.class.st +++ /dev/null @@ -1,33 +0,0 @@ -" -PPBlockReplaceRule replaces the matching node by the result of evaluating replaceBlock. This allows arbitrary computation to come up with a replacement. - -Instance Variables: - replaceBlock The block that returns the parer to replace to matching parser with. - -" -Class { - #name : #PPBlockReplaceRule, - #superclass : #PPReplaceRule, - #instVars : [ - 'replaceBlock' - ], - #category : #'PetitAnalyzer-Core' -} - -{ #category : #'instance creation' } -PPBlockReplaceRule class >> searchFor: aSearchParser replaceWith: aReplaceBlock when: aVerificationBlock [ - ^ (self searchFor: aSearchParser) - setReplaceBlock: aReplaceBlock; - setVerificationBlock: aVerificationBlock; - yourself -] - -{ #category : #matching } -PPBlockReplaceRule >> foundMatchFor: aParser [ - ^ replaceBlock cull: aParser -] - -{ #category : #initialization } -PPBlockReplaceRule >> setReplaceBlock: aBlock [ - replaceBlock := aBlock -] diff --git a/src-archive/PetitAnalyzer/PPDelegateParser.extension.st b/src-archive/PetitAnalyzer/PPDelegateParser.extension.st deleted file mode 100644 index 93b5ab689..000000000 --- a/src-archive/PetitAnalyzer/PPDelegateParser.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #PPDelegateParser } - -{ #category : #'*petitanalyzer-transforming' } -PPDelegateParser >> replace: aParser with: anotherParser [ - super replace: aParser with: anotherParser. - parser == aParser ifTrue: [ parser := anotherParser ] -] diff --git a/src-archive/PetitAnalyzer/PPEndOfFileParser.extension.st b/src-archive/PetitAnalyzer/PPEndOfFileParser.extension.st deleted file mode 100644 index 6c9ae8afc..000000000 --- a/src-archive/PetitAnalyzer/PPEndOfFileParser.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #PPEndOfFileParser } - -{ #category : #'*petitanalyzer-testing' } -PPEndOfFileParser >> isNullable [ - ^ true -] diff --git a/src-archive/PetitAnalyzer/PPEpsilonParser.extension.st b/src-archive/PetitAnalyzer/PPEpsilonParser.extension.st deleted file mode 100644 index a8fe8a763..000000000 --- a/src-archive/PetitAnalyzer/PPEpsilonParser.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #PPEpsilonParser } - -{ #category : #'*petitanalyzer-testing' } -PPEpsilonParser >> isNullable [ - ^ true -] diff --git a/src-archive/PetitAnalyzer/PPFailingParser.extension.st b/src-archive/PetitAnalyzer/PPFailingParser.extension.st deleted file mode 100644 index 2f6fec0cb..000000000 --- a/src-archive/PetitAnalyzer/PPFailingParser.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #PPFailingParser } - -{ #category : #'*petitanalyzer-matching' } -PPFailingParser >> match: aParser inContext: aDictionary seen: anIdentitySet [ - ^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self message = aParser message ] -] diff --git a/src-archive/PetitAnalyzer/PPLimitedRepeatingParser.extension.st b/src-archive/PetitAnalyzer/PPLimitedRepeatingParser.extension.st deleted file mode 100644 index 532d5982c..000000000 --- a/src-archive/PetitAnalyzer/PPLimitedRepeatingParser.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #PPLimitedRepeatingParser } - -{ #category : #'*petitanalyzer-transforming' } -PPLimitedRepeatingParser >> replace: aParser with: anotherParser [ - super replace: aParser with: anotherParser. - limit == aParser ifTrue: [ limit := anotherParser ] -] diff --git a/src-archive/PetitAnalyzer/PPListParser.extension.st b/src-archive/PetitAnalyzer/PPListParser.extension.st deleted file mode 100644 index deea44a56..000000000 --- a/src-archive/PetitAnalyzer/PPListParser.extension.st +++ /dev/null @@ -1,28 +0,0 @@ -Extension { #name : #PPListParser } - -{ #category : #'*petitanalyzer-matching' } -PPListParser >> copyInContext: aDictionary seen: aSeenDictionary [ - | copy copies | - aSeenDictionary at: self ifPresent: [ :value | ^ value ]. - copy := aSeenDictionary at: self put: self copy. - copies := OrderedCollection new. - parsers do: [ :each | - | result | - result := each - copyInContext: aDictionary - seen: aSeenDictionary. - result isCollection - ifTrue: [ copies addAll: result ] - ifFalse: [ copies add: result ] ]. - ^ copy - setParsers: copies; - yourself -] - -{ #category : #'*petitanalyzer-transforming' } -PPListParser >> replace: aParser with: anotherParser [ - super replace: aParser with: anotherParser. - parsers keysAndValuesDo: [ :index :parser | - parser == aParser - ifTrue: [ parsers at: index put: anotherParser ] ] -] diff --git a/src-archive/PetitAnalyzer/PPListPattern.class.st b/src-archive/PetitAnalyzer/PPListPattern.class.st deleted file mode 100644 index fd90c7927..000000000 --- a/src-archive/PetitAnalyzer/PPListPattern.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -PPListPattern that is used to match any number of parsers. As its superclass, it cannot be used for actually parsing something. -" -Class { - #name : #PPListPattern, - #superclass : #PPPattern, - #category : #'PetitAnalyzer-Core' -} diff --git a/src-archive/PetitAnalyzer/PPLiteralParser.extension.st b/src-archive/PetitAnalyzer/PPLiteralParser.extension.st deleted file mode 100644 index 9ef2faa89..000000000 --- a/src-archive/PetitAnalyzer/PPLiteralParser.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #PPLiteralParser } - -{ #category : #'*petitanalyzer-matching' } -PPLiteralParser >> match: aParser inContext: aDictionary seen: anIdentitySet [ - ^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self literal = aParser literal and: [ self message = aParser message ] ] -] diff --git a/src-archive/PetitAnalyzer/PPNotParser.extension.st b/src-archive/PetitAnalyzer/PPNotParser.extension.st deleted file mode 100644 index 2b56668c2..000000000 --- a/src-archive/PetitAnalyzer/PPNotParser.extension.st +++ /dev/null @@ -1,11 +0,0 @@ -Extension { #name : #PPNotParser } - -{ #category : #'*petitanalyzer-private' } -PPNotParser >> firstSets: aFirstDictionary into: aSet [ - -] - -{ #category : #'*petitanalyzer-testing' } -PPNotParser >> isFirstSetTerminal [ - ^ true -] diff --git a/src-archive/PetitAnalyzer/PPOptionalParser.extension.st b/src-archive/PetitAnalyzer/PPOptionalParser.extension.st deleted file mode 100644 index 002bb731c..000000000 --- a/src-archive/PetitAnalyzer/PPOptionalParser.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #PPOptionalParser } - -{ #category : #'*petitanalyzer-testing' } -PPOptionalParser >> isNullable [ - ^ true -] diff --git a/src-archive/PetitAnalyzer/PPParser.extension.st b/src-archive/PetitAnalyzer/PPParser.extension.st deleted file mode 100644 index bc143a41f..000000000 --- a/src-archive/PetitAnalyzer/PPParser.extension.st +++ /dev/null @@ -1,313 +0,0 @@ -Extension { #name : #PPParser } - -{ #category : #'*petitanalyzer-named' } -PPParser >> allNamedParsers [ - "Answer all the named parse nodes of the receiver." - - | result | - result := OrderedCollection new. - self allNamedParsersDo: [ :parser | result addLast: parser ]. - ^ result -] - -{ #category : #'*petitanalyzer-named' } -PPParser >> allNamedParsersDo: aBlock [ - "Iterate over all the named parse nodes of the receiver." - - self allParsersDo: [ :each | - each name notNil - ifTrue: [ aBlock value: each ] ] -] - -{ #category : #'*petitanalyzer-matching' } -PPParser >> copyInContext: aDictionary [ - ^ self copyInContext: aDictionary seen: IdentityDictionary new -] - -{ #category : #'*petitanalyzer-matching' } -PPParser >> copyInContext: aDictionary seen: aSeenDictionary [ - | copy | - aSeenDictionary - at: self - ifPresent: [ :value | ^ value ]. - copy := aSeenDictionary - at: self - put: self copy. - copy children do: [ :each | - copy - replace: each - with: (each copyInContext: aDictionary seen: aSeenDictionary) ]. - ^ copy -] - -{ #category : #'*petitanalyzer-querying' } -PPParser >> cycleSet [ - "Answer a set of all nodes that are within one or more cycles of left-recursion. This is generally not a problem if at least one of the nodes is memoized, but it might make the grammar very inefficient and should be avoided if possible." - - | cycles | - cycles := IdentitySet new. - self cycleSet: OrderedCollection new firstSets: self firstSets into: cycles. - ^ cycles -] - -{ #category : #'*petitanalyzer-private' } -PPParser >> cycleSet: aDictionary [ - "PRIVATE: Answer the children that could be part of a cycle-set with the receiver, subclasses might restrict the number of children returned. aDictionary is pre-calcualted first-sets." - - ^ self children -] - -{ #category : #'*petitanalyzer-private' } -PPParser >> cycleSet: aStack firstSets: aDictionary into: aSet [ - "PRIVATE: Try to find a cycle, where aStack contains the previously visited parsers. The method returns quickly when the receiver is a terminal, terminals cannot be part of a cycle. If aStack already contains the receiver, then we are in a cycle. In this case we don't process the children further and add the nodes to aSet." - - | index | - self isTerminal - ifTrue: [ ^ self ]. - (index := aStack indexOf: self) > 0 - ifTrue: [ ^ aSet addAll: (aStack copyFrom: index to: aStack size) ]. - aStack addLast: self. - (self cycleSet: aDictionary) - do: [ :each | each cycleSet: aStack firstSets: aDictionary into: aSet ]. - aStack removeLast -] - -{ #category : #'*petitanalyzer-querying' } -PPParser >> firstSet [ - "Answer the first-set of the receiver. Note, this implementation is inefficient when called on different receivers of the same grammar, instead use #firstSets to calculate the first-sets at once." - - ^ self firstSets at: self -] - -{ #category : #'*petitanalyzer-querying' } -PPParser >> firstSets [ - "Answer a dictionary with all the parsers reachable from the receiver as key and their first-set as value. The first-set of a parser is the list of terminal parsers that begin the parser derivable from that parser." - - | firstSets | - firstSets := IdentityDictionary new. - self allParsersDo: [ :each | - firstSets at: each put: (each isFirstSetTerminal - ifTrue: [ IdentitySet with: each ] - ifFalse: [ IdentitySet new ]). - each isNullable - ifTrue: [ (firstSets at: each) add: PPSentinel instance ] ]. - [ | changed tally | - changed := false. - firstSets keysAndValuesDo: [ :parser :first | - tally := first size. - parser firstSets: firstSets into: first. - changed := changed or: [ tally ~= first size ] ]. - changed ] whileTrue. - ^ firstSets -] - -{ #category : #'*petitanalyzer-private' } -PPParser >> firstSets: aFirstDictionary into: aSet [ - "PRIVATE: Try to add additional elements to the first-set aSet of the receiver, use the incomplete aFirstDictionary." - - self children do: [ :parser | aSet addAll: (aFirstDictionary at: parser) ] -] - -{ #category : #'*petitanalyzer-querying' } -PPParser >> followSet [ - "Answer the follow-set of the receiver starting at the receiver. Note, this implementation is inefficient when called on different receivers of the same grammar, instead use #followSets to calculate the follow-sets at once." - - ^ self followSets at: self -] - -{ #category : #'*petitanalyzer-querying' } -PPParser >> followSets [ - "Answer a dictionary with all the parsers reachable from the receiver as key and their follow-set as value. The follow-set of a parser is the list of terminal parsers that can appear immediately to the right of that parser." - - | current previous continue firstSets followSets | - current := previous := 0. - firstSets := self firstSets. - followSets := IdentityDictionary new. - self allParsersDo: [ :each | followSets at: each put: IdentitySet new ]. - (followSets at: self) add: PPSentinel instance. - [ followSets keysAndValuesDo: [ :parser :follow | - parser - followSets: followSets - firstSets: firstSets - into: follow ]. - current := followSets - inject: 0 - into: [ :result :each | result + each size ]. - continue := previous < current. - previous := current. - continue ] whileTrue. - ^ followSets -] - -{ #category : #'*petitanalyzer-private' } -PPParser >> followSets: aFollowDictionary firstSets: aFirstDictionary into: aSet [ - "PRIVATE: Try to add additional elements to the follow-set aSet of the receiver, use the incomplete aFollowDictionary and the complete aFirstDictionary." - - self children do: [ :parser | (aFollowDictionary at: parser) addAll: aSet ] -] - -{ #category : #'*petitanalyzer-named' } -PPParser >> innerChildren [ - "Answer the inner children of the receiver." - - | result | - result := OrderedCollection new. - self innerChildrenDo: [ :parser | result addLast: parser ]. - ^ result -] - -{ #category : #'*petitanalyzer-named' } -PPParser >> innerChildrenDo: aBlock [ - "Iterate over the inner children of the receiver." - - self innerChildrenDo: aBlock seen: IdentitySet new -] - -{ #category : #'*petitanalyzer-named' } -PPParser >> innerChildrenDo: aBlock seen: aSet [ - "Iterate over the inner children of the receiver." - - self children do: [ :each | - (aSet includes: each) - ifTrue: [ ^ self ]. - aSet add: each. - each name isNil ifTrue: [ - aBlock value: each. - each innerChildrenDo: aBlock seen: aSet ] ] -] - -{ #category : #'*petitanalyzer-testing' } -PPParser >> isFirstSetTerminal [ - "Answer true if the receiver is a terminal or leaf parser, that means it does not delegate to any other parser." - - ^ self children isEmpty -] - -{ #category : #'*petitanalyzer-testing' } -PPParser >> isNullable [ - "Answer true if the receiver is a nullable parser, e.g. it can successfully parse nothing." - - ^ false -] - -{ #category : #'*petitanalyzer-testing' } -PPParser >> isTerminal [ - "Answer true if the receiver is a terminal or leaf parser, that means it does not delegate to any other parser." - - ^ self children isEmpty -] - -{ #category : #'*petitanalyzer-matching' } -PPParser >> match: aParser inContext: aDictionary [ - ^ self match: aParser inContext: aDictionary seen: IdentitySet new -] - -{ #category : #'*petitanalyzer-matching' } -PPParser >> match: aParser inContext: aDictionary seen: anIdentitySet [ - "This is the default implementation to match two parsers. This code can properly handle recursion. This is code is supposed to be overridden in subclasses that add new state." - - (self == aParser or: [ anIdentitySet includes: self ]) - ifTrue: [ ^ true ]. - anIdentitySet add: self. - ^ self class = aParser class and: [ self matchList: self children against: aParser children inContext: aDictionary seen: anIdentitySet ] -] - -{ #category : #'*petitanalyzer-matching' } -PPParser >> matchList: matchList against: parserList inContext: aDictionary seen: aSet [ - ^ self matchList: matchList index: 1 against: parserList index: 1 inContext: aDictionary seen: aSet -] - -{ #category : #'*petitanalyzer-matching' } -PPParser >> matchList: matchList index: matchIndex against: parserList index: parserIndex inContext: aDictionary seen: aSet [ - | parser currentIndex currentDictionary currentSeen parsers | - matchList size < matchIndex - ifTrue: [ ^ parserList size < parserIndex ]. - parser := matchList at: matchIndex. - parser class = PPListPattern ifTrue: [ - currentIndex := parserIndex - 1. - [ currentDictionary := aDictionary copy. - currentSeen := aSet copy. - parserList size < currentIndex or: [ - parsers := parserList copyFrom: parserIndex to: currentIndex. - (currentDictionary at: parser ifAbsentPut: [ parsers ]) = parsers and: [ - (self - matchList: matchList - index: matchIndex + 1 - against: parserList - index: currentIndex + 1 - inContext: currentDictionary - seen: currentSeen) - ifTrue: [ - currentDictionary keysAndValuesDo: [ :key :value | aDictionary at: key put: value ]. - ^ true ]. - false ] ] ] whileFalse: [ currentIndex := currentIndex + 1 ]. - ^ false ]. - parserList size < parserIndex - ifTrue: [ ^ false ]. - (parser match: (parserList at: parserIndex) inContext: aDictionary seen: aSet) - ifFalse: [ ^ false ]. - ^ self - matchList: matchList - index: matchIndex + 1 - against: parserList - index: parserIndex + 1 - inContext: aDictionary - seen: aSet -] - -{ #category : #'*petitanalyzer-named' } -PPParser >> namedChildren [ - "Answer the named children of the receiver." - - | result | - result := OrderedCollection new. - self namedChildrenDo: [ :parser | result addLast: parser ]. - ^ result -] - -{ #category : #'*petitanalyzer-named' } -PPParser >> namedChildrenDo: aBlock [ - "Iterate over the named children of the receiver." - - self namedChildrenDo: aBlock seen: IdentitySet new -] - -{ #category : #'*petitanalyzer-named' } -PPParser >> namedChildrenDo: aBlock seen: aSet [ - "Iterate over the named children of the receiver." - - self children do: [ :each | - (aSet includes: each) - ifTrue: [ ^ self ]. - aSet add: each. - each name isNil - ifTrue: [ each namedChildrenDo: aBlock seen: aSet ] - ifFalse: [ aBlock value: each ] ] -] - -{ #category : #'*petitanalyzer-transforming' } -PPParser >> replace: aParser with: anotherParser [ - "Replace the references of the receiver pointing to aParser with anotherParser." -] - -{ #category : #'*petitanalyzer-transforming' } -PPParser >> transform: aBlock [ - "Answer a copy of all parsers reachable from the receiver transformed using aBlock." - - | mapping root | - mapping := IdentityDictionary new. - self allParsersDo: [ :each | - mapping - at: each - put: (aBlock value: each copy) ]. - root := mapping at: self. - [ | changed | - changed := false. - root allParsersDo: [ :each | - each children do: [ :old | - mapping at: old ifPresent: [ :new | - each replace: old with: new. - changed := true ] ] ]. - changed ] whileTrue. - ^ root -] diff --git a/src-archive/PetitAnalyzer/PPParserReplaceRule.class.st b/src-archive/PetitAnalyzer/PPParserReplaceRule.class.st deleted file mode 100644 index da01f1c4d..000000000 --- a/src-archive/PetitAnalyzer/PPParserReplaceRule.class.st +++ /dev/null @@ -1,32 +0,0 @@ -" -PPParserReplaceRule replaces a matched grammar with another grammar, which may include patterns from the matching grammar. - -Instance Variables: - replaceParser The parser to replace the matched parser with. -" -Class { - #name : #PPParserReplaceRule, - #superclass : #PPReplaceRule, - #instVars : [ - 'replaceParser' - ], - #category : #'PetitAnalyzer-Core' -} - -{ #category : #'instance creation' } -PPParserReplaceRule class >> searchFor: aSearchParser replaceWith: aReplaceParser when: aVerificationBlock [ - ^ (self searchFor: aSearchParser) - setReplaceParser: aReplaceParser; - setVerificationBlock: aVerificationBlock; - yourself -] - -{ #category : #matching } -PPParserReplaceRule >> foundMatchFor: aParser [ - ^ replaceParser copyInContext: owner context -] - -{ #category : #initialization } -PPParserReplaceRule >> setReplaceParser: aParser [ - replaceParser := aParser -] diff --git a/src-archive/PetitAnalyzer/PPPattern.class.st b/src-archive/PetitAnalyzer/PPPattern.class.st deleted file mode 100644 index c398bcab5..000000000 --- a/src-archive/PetitAnalyzer/PPPattern.class.st +++ /dev/null @@ -1,86 +0,0 @@ -" -PPPattern is meta-parser that is solely used to match other types of parsers. It cannot be used for actually parsing something. The constructor method determines what can be matched. -" -Class { - #name : #PPPattern, - #superclass : #PPParser, - #instVars : [ - 'verificationBlock' - ], - #category : #'PetitAnalyzer-Core' -} - -{ #category : #'instance creation' } -PPPattern class >> any [ - "Matches all parsers." - - ^ self on: [ :parser :context | true ] -] - -{ #category : #'instance creation' } -PPPattern class >> class: aBehavior [ - "Matches parsers that are of the class aBehavior." - - ^ self on: [ :parser :context | parser class = aBehavior ] -] - -{ #category : #'instance creation' } -PPPattern class >> kind: aBehavior [ - "Matches parsers that are of the class aBehavior or one of its subclasses." - - ^ self on: [ :parser :context | parser isKindOf: aBehavior ] -] - -{ #category : #'instance creation' } -PPPattern class >> name: aString [ - "Matches parsers with the name aString." - - ^ self on: [ :parser :context | parser name = aString ] -] - -{ #category : #'instance creation' } -PPPattern class >> new [ - self error: 'Use an explicit constructur on ' , self name -] - -{ #category : #'instance creation' } -PPPattern class >> on: aBlock [ - "Matches parsers that satisfy an arbitrary condition in aBlock." - - ^ self basicNew initializeOn: aBlock -] - -{ #category : #comparing } -PPPattern >> = aParser [ - ^ self == aParser or: [ self name notNil and: [ self name = aParser name ] ] -] - -{ #category : #matching } -PPPattern >> copyInContext: aDictionary seen: aSeenDictionary [ - ^ aDictionary at: self -] - -{ #category : #comparing } -PPPattern >> hash [ - ^ self identityHash -] - -{ #category : #initialization } -PPPattern >> initializeOn: aBlock [ - verificationBlock := aBlock -] - -{ #category : #matching } -PPPattern >> match: aParser inContext: aDictionary seen: anIdentitySet [ - (verificationBlock value: aParser value: aDictionary) - ifFalse: [ ^ false ]. - ^ (aDictionary at: self ifAbsentPut: [ aParser ]) - match: aParser inContext: aDictionary seen: anIdentitySet -] - -{ #category : #parsing } -PPPattern >> parseOn: aStream [ - "This is just a pattern used for matching. It should not be used in actual grammars." - - self shouldNotImplement -] diff --git a/src-archive/PetitAnalyzer/PPPluggableParser.extension.st b/src-archive/PetitAnalyzer/PPPluggableParser.extension.st deleted file mode 100644 index 8e68c555d..000000000 --- a/src-archive/PetitAnalyzer/PPPluggableParser.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #PPPluggableParser } - -{ #category : #'*petitanalyzer-matching' } -PPPluggableParser >> match: aParser inContext: aDictionary seen: anIdentitySet [ - ^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self block = aParser block ] -] diff --git a/src-archive/PetitAnalyzer/PPPredicateParser.extension.st b/src-archive/PetitAnalyzer/PPPredicateParser.extension.st deleted file mode 100644 index 111addd46..000000000 --- a/src-archive/PetitAnalyzer/PPPredicateParser.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #PPPredicateParser } - -{ #category : #'*petitanalyzer-matching' } -PPPredicateParser >> match: aParser inContext: aDictionary seen: anIdentitySet [ - ^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self block = aParser block and: [ self message = aParser message ] ] -] diff --git a/src-archive/PetitAnalyzer/PPPredicateSequenceParser.extension.st b/src-archive/PetitAnalyzer/PPPredicateSequenceParser.extension.st deleted file mode 100644 index 069d7febb..000000000 --- a/src-archive/PetitAnalyzer/PPPredicateSequenceParser.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #PPPredicateSequenceParser } - -{ #category : #'*petitanalyzer-matching' } -PPPredicateSequenceParser >> match: aParser inContext: aDictionary seen: anIdentitySet [ - ^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self size = aParser size ] -] diff --git a/src-archive/PetitAnalyzer/PPProcessor.class.st b/src-archive/PetitAnalyzer/PPProcessor.class.st deleted file mode 100644 index 54a373856..000000000 --- a/src-archive/PetitAnalyzer/PPProcessor.class.st +++ /dev/null @@ -1,55 +0,0 @@ -" -PPProcessor is an abstract superclass to PPRewriter and PPSearcher. It implements common functionality to search and transform grammars. - -The implementation of these matching algorithms is inspired from the refactoring engine by Don Roberts and John Brant. Contrary to the original implementation that worked on syntax trees, this implementation was generalized and works on possibly cyclic search patterns and grammar graphs. - -Instance Variables: - searches The rules to be processed. - context The current search context. -" -Class { - #name : #PPProcessor, - #superclass : #Object, - #instVars : [ - 'searches', - 'context' - ], - #category : #'PetitAnalyzer-Core' -} - -{ #category : #'instance creation' } -PPProcessor class >> new [ - ^ self basicNew initialize -] - -{ #category : #rules } -PPProcessor >> addRule: aGrammarRule [ - searches add: (aGrammarRule setOwner: self) -] - -{ #category : #private } -PPProcessor >> context [ - ^ context -] - -{ #category : #initialization } -PPProcessor >> initialize [ - super initialize. - searches := OrderedCollection new. - context := Dictionary new -] - -{ #category : #private } -PPProcessor >> performRule: aRule on: aParser [ - context := Dictionary new. - ^ aRule performOn: aParser -] - -{ #category : #private } -PPProcessor >> performRulesOn: aParser [ - | result | - searches do: [ :rule | - result := self performRule: rule on: aParser. - result notNil ifTrue: [ ^ result ] ]. - ^ nil -] diff --git a/src-archive/PetitAnalyzer/PPRepeatingParser.extension.st b/src-archive/PetitAnalyzer/PPRepeatingParser.extension.st deleted file mode 100644 index 24fdbf05c..000000000 --- a/src-archive/PetitAnalyzer/PPRepeatingParser.extension.st +++ /dev/null @@ -1,20 +0,0 @@ -Extension { #name : #PPRepeatingParser } - -{ #category : #'*petitanalyzer-private' } -PPRepeatingParser >> followSets: aFollowDictionary firstSets: aFirstDictionary into: aSet [ - | firstSet | - super followSets: aFollowDictionary firstSets: aFirstDictionary into: aSet. - - firstSet := aFirstDictionary at: self. - self children do: [:p | (aFollowDictionary at: p) addAll: (firstSet reject: [:each | each isNullable]) ] -] - -{ #category : #'*petitanalyzer-testing' } -PPRepeatingParser >> isNullable [ - ^ min = 0 -] - -{ #category : #'*petitanalyzer-matching' } -PPRepeatingParser >> match: aParser inContext: aDictionary seen: anIdentitySet [ - ^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self min = aParser min and: [ self max = aParser max ] ] -] diff --git a/src-archive/PetitAnalyzer/PPReplaceRule.class.st b/src-archive/PetitAnalyzer/PPReplaceRule.class.st deleted file mode 100644 index e6e9eccc0..000000000 --- a/src-archive/PetitAnalyzer/PPReplaceRule.class.st +++ /dev/null @@ -1,30 +0,0 @@ -" -PPReplaceRule is the abstract superclass of all of the transforming rules. The rules change the grammar by replacing the node that matches the rule. Subclasses implement different strategies for this replacement. - -Instance Variables: - verificationBlock Is evaluated with the matching parser and allows for further verification of a match. -" -Class { - #name : #PPReplaceRule, - #superclass : #PPRule, - #instVars : [ - 'verificationBlock' - ], - #category : #'PetitAnalyzer-Core' -} - -{ #category : #matching } -PPReplaceRule >> canMatch: aParser [ - ^ verificationBlock cull: aParser -] - -{ #category : #initialization } -PPReplaceRule >> initialize [ - super initialize. - verificationBlock := [ :parser | true ] -] - -{ #category : #initialization } -PPReplaceRule >> setVerificationBlock: aBlock [ - verificationBlock := aBlock -] diff --git a/src-archive/PetitAnalyzer/PPRewriter.class.st b/src-archive/PetitAnalyzer/PPRewriter.class.st deleted file mode 100644 index 320b7d62f..000000000 --- a/src-archive/PetitAnalyzer/PPRewriter.class.st +++ /dev/null @@ -1,65 +0,0 @@ -" -PPRewriter walks over a grammar graph and transforms its parsers. If the grammar is modified, #hasChanged returns true. - -Instance Variables: - changed Indicates if the last operation has changed anything. -" -Class { - #name : #PPRewriter, - #superclass : #PPProcessor, - #instVars : [ - 'changed' - ], - #category : #'PetitAnalyzer-Core' -} - -{ #category : #public } -PPRewriter >> execute: aParser [ - "Perform the replace rules of the receiver on aParser, answer the resulting parser." - - | previous result | - previous := context. - changed := false. - context := Dictionary new. - result := aParser transform: [ :each | - | transformed | - transformed := self performRulesOn: each. - transformed isNil - ifTrue: [ each ] - ifFalse: [ changed := true. transformed ] ]. - context := previous. - ^ result -] - -{ #category : #testing } -PPRewriter >> hasChanged [ - "Answer if the last operation has changed anything." - - ^ changed -] - -{ #category : #initialization } -PPRewriter >> initialize [ - super initialize. - changed := false -] - -{ #category : #accessing } -PPRewriter >> replace: aSearchParser with: aReplaceParser [ - self replace: aSearchParser with: aReplaceParser when: [ :node | true ] -] - -{ #category : #accessing } -PPRewriter >> replace: aSearchParser with: aReplaceParser when: aValidationBlock [ - self addRule: (PPParserReplaceRule searchFor: aSearchParser replaceWith: aReplaceParser when: aValidationBlock) -] - -{ #category : #accessing } -PPRewriter >> replace: aSearchParser withValueFrom: aReplaceBlock [ - self replace: aSearchParser withValueFrom: aReplaceBlock when: [ :node | true ] -] - -{ #category : #accessing } -PPRewriter >> replace: aSearchParser withValueFrom: aReplaceBlock when: aValidationBlock [ - self addRule: (PPBlockReplaceRule searchFor: aSearchParser replaceWith: aReplaceBlock when: aValidationBlock) -] diff --git a/src-archive/PetitAnalyzer/PPRewriterTest.class.st b/src-archive/PetitAnalyzer/PPRewriterTest.class.st deleted file mode 100644 index 90f0cccc3..000000000 --- a/src-archive/PetitAnalyzer/PPRewriterTest.class.st +++ /dev/null @@ -1,124 +0,0 @@ -Class { - #name : #PPRewriterTest, - #superclass : #PPAbstractParserTest, - #instVars : [ - 'rewriter' - ], - #category : #'PetitAnalyzer-Tests' -} - -{ #category : #running } -PPRewriterTest >> setUp [ - rewriter := PPRewriter new -] - -{ #category : #testing } -PPRewriterTest >> testDuplicationRemoval [ - | duplicate before between after result | - duplicate := PPPattern any. - before := PPListPattern any. - between := PPListPattern any. - after := PPListPattern any. - rewriter replace: before / duplicate / between / duplicate / after with: before / duplicate / between / after. - result := rewriter execute: $a asParser / $a asParser. - self assert: rewriter hasChanged. - self assert: result children size equals: 1. - self assert: result children first literal equals: $a. - result := rewriter execute: $b asParser / $a asParser / $a asParser. - self assert: rewriter hasChanged. - self assert: result children size equals: 2. - self assert: result children first literal equals: $b. - self assert: result children last literal equals: $a. - result := rewriter execute: $a asParser / $b asParser / $a asParser. - self assert: rewriter hasChanged. - self assert: result children size equals: 2. - self assert: result children first literal equals: $a. - self assert: result children last literal equals: $b. - result := rewriter execute: $a asParser / $a asParser / $b asParser. - self assert: rewriter hasChanged. - self assert: result children size equals: 2. - self assert: result children first literal equals: $a. - self assert: result children last literal equals: $b -] - -{ #category : #testing } -PPRewriterTest >> testPatternRemoval [ - | pattern result | - pattern := PPPattern class: PPLiteralObjectParser. - rewriter replace: pattern / pattern with: pattern. - result := rewriter execute: $a asParser / $a asParser. - self assert: rewriter hasChanged. - self assert: result class equals: PPLiteralObjectParser. - self assert: result literal equals: $a. - result := rewriter execute: $a asParser / $a asParser / $a asParser. - self deny: rewriter hasChanged. - self assert: result class equals: PPChoiceParser. - self assert: result children size equals: 3 -] - -{ #category : #testing } -PPRewriterTest >> testPatternReplacement [ - | pattern result | - pattern := PPPattern class: PPLiteralObjectParser. - rewriter replace: pattern with: pattern , pattern. - result := rewriter execute: $a asParser. - self assert: rewriter hasChanged. - self assert: result class equals: PPSequenceParser. - self assert: result children first literal equals: $a. - self assert: result children last literal equals: $a. - result := rewriter execute: #any asParser. - self deny: rewriter hasChanged. - self assert: result class equals: PPPredicateObjectParser -] - -{ #category : #testing } -PPRewriterTest >> testReplaceLiteral [ - | result | - rewriter replace: $a asParser with: $b asParser. - result := rewriter execute: $a asParser. - self assert: rewriter hasChanged. - self assert: result literal equals: $b. - result := rewriter execute: $c asParser. - self deny: rewriter hasChanged. - self assert: result literal equals: $c. - result := rewriter execute: $a asParser , $b asParser , $c asParser. - self assert: rewriter hasChanged. - self assert: result children size equals: 3. - self assert: result children first literal equals: $b. - self assert: result children last literal equals: $c -] - -{ #category : #testing } -PPRewriterTest >> testSwapTwoPattern [ - | first second result | - first := PPPattern any. - second := PPPattern any. - rewriter replace: first , second with: second , first. - result := rewriter execute: $a asParser , $b asParser. - self assert: rewriter hasChanged. - self assert: result children first literal equals: $b. - self assert: result children last literal equals: $a. - result := rewriter execute: $a asParser / $b asParser. - self deny: rewriter hasChanged. - self assert: result children first literal equals: $a. - self assert: result children last literal equals: $b -] - -{ #category : #testing } -PPRewriterTest >> testWrapLiteral [ - | result | - rewriter replace: $a asParser withValueFrom: [ :parser | parser token ]. - result := rewriter execute: $a asParser. - self assert: rewriter hasChanged. - self assert: result class equals: PPTokenParser. - self assert: result children first literal equals: $a. - result := rewriter execute: $c asParser. - self deny: rewriter hasChanged. - self assert: result literal equals: $c. - result := rewriter execute: $a asParser , $b asParser. - self assert: rewriter hasChanged. - self assert: result children first class equals: PPTokenParser. - self assert: result children first children first literal equals: $a. - self assert: result children last class equals: PPLiteralObjectParser. - self assert: result children last literal equals: $b -] diff --git a/src-archive/PetitAnalyzer/PPRule.class.st b/src-archive/PetitAnalyzer/PPRule.class.st deleted file mode 100644 index 3e6085691..000000000 --- a/src-archive/PetitAnalyzer/PPRule.class.st +++ /dev/null @@ -1,60 +0,0 @@ -" -PPRule is the abstract superclass of all of the grammar search rules. A rule is the first class representation of a particular pattern to search for. The owner of the rule is the algorithms that actually executes the search. This arrangement allows multiple searches to be conducted by a single processor. - -Instance Variables: - owner The processor that is actually performing the search. - search The parse pattern to be searched. - -" -Class { - #name : #PPRule, - #superclass : #Object, - #instVars : [ - 'owner', - 'search' - ], - #category : #'PetitAnalyzer-Core' -} - -{ #category : #'instance creation' } -PPRule class >> new [ - ^ self basicNew initialize -] - -{ #category : #'instance creation' } -PPRule class >> searchFor: aParser [ - ^ self new setSearch: aParser -] - -{ #category : #matching } -PPRule >> canMatch: aParser [ - ^ true -] - -{ #category : #matching } -PPRule >> foundMatchFor: aParser [ - self subclassResponsibility -] - -{ #category : #initialization } -PPRule >> initialize [ -] - -{ #category : #matching } -PPRule >> performOn: aParser [ - (search match: aParser inContext: owner context) - ifFalse: [ ^ nil ]. - (self canMatch: aParser) - ifFalse: [ ^ nil ]. - ^ self foundMatchFor: aParser -] - -{ #category : #initialization } -PPRule >> setOwner: aGrammarSearcher [ - owner := aGrammarSearcher -] - -{ #category : #initialization } -PPRule >> setSearch: aParser [ - search := aParser -] diff --git a/src-archive/PetitAnalyzer/PPSearchRule.class.st b/src-archive/PetitAnalyzer/PPSearchRule.class.st deleted file mode 100644 index d89dc9cba..000000000 --- a/src-archive/PetitAnalyzer/PPSearchRule.class.st +++ /dev/null @@ -1,36 +0,0 @@ -" -PPSearchRule is a rule that simply searches for matches to the rule. Every time a match is found, answerBlock is evaluated with the parser that matches and the current answer. This two-argument approach allows a collection to be formed from all of the matches, like with #inject:into:. - -Instance Variables: - answerBlock Block to evaluate with the matching node and the current answer. - -" -Class { - #name : #PPSearchRule, - #superclass : #PPRule, - #instVars : [ - 'answerBlock' - ], - #category : #'PetitAnalyzer-Core' -} - -{ #category : #'instance creation' } -PPSearchRule class >> searchFor: aParser thenDo: aBlock [ - ^ (self searchFor: aParser) setAnswerBlock: aBlock -] - -{ #category : #matching } -PPSearchRule >> canMatch: aParser [ - owner setAnswer: (answerBlock cull: aParser cull: owner answer). - ^ super canMatch: aParser -] - -{ #category : #matching } -PPSearchRule >> foundMatchFor: aParser [ - ^ aParser -] - -{ #category : #initialization } -PPSearchRule >> setAnswerBlock: aBlock [ - answerBlock := aBlock -] diff --git a/src-archive/PetitAnalyzer/PPSearcher.class.st b/src-archive/PetitAnalyzer/PPSearcher.class.st deleted file mode 100644 index 239e58fcd..000000000 --- a/src-archive/PetitAnalyzer/PPSearcher.class.st +++ /dev/null @@ -1,60 +0,0 @@ -" -PPSearcher walks over a grammar specification and matches its parsers against the patterns using #match:inContext:. - -Instance Variables: - answer The answer propagated between matches. -" -Class { - #name : #PPSearcher, - #superclass : #PPProcessor, - #instVars : [ - 'answer' - ], - #category : #'PetitAnalyzer-Core' -} - -{ #category : #private } -PPSearcher >> answer [ - ^ answer -] - -{ #category : #public } -PPSearcher >> execute: aParser [ - "Perform the search rules of the receiver on aParser. Answer the result of the search." - - ^ self execute: aParser initialAnswer: nil -] - -{ #category : #public } -PPSearcher >> execute: aParser initialAnswer: anObject [ - "Perform the search rules of the receiver on aParser. Inject anObject into the matches and answer the result." - - | previous | - previous := context. - answer := anObject. - context := Dictionary new. - aParser allParsersDo: [ :each | - self performRulesOn: each ]. - context := previous. - ^ answer -] - -{ #category : #rules } -PPSearcher >> matches: aParser do: anAnswerBlock [ - "Add a search expression aParser, evaluate anAnswerBlock with the matched node and the previous answer." - - self addRule: (PPSearchRule searchFor: aParser thenDo: anAnswerBlock) -] - -{ #category : #rules } -PPSearcher >> matchesAnyOf: aCollectionOfParsers do: anAnswerBlock [ - "Add a collection of search expressions aCollectionOfParsers, evaluate anAnswerBlock with the matched node and the previous answer." - - aCollectionOfParsers - do: [ :each | self matches: each do: anAnswerBlock ] -] - -{ #category : #initialization } -PPSearcher >> setAnswer: anObject [ - answer := anObject -] diff --git a/src-archive/PetitAnalyzer/PPSearcherTest.class.st b/src-archive/PetitAnalyzer/PPSearcherTest.class.st deleted file mode 100644 index f397490fb..000000000 --- a/src-archive/PetitAnalyzer/PPSearcherTest.class.st +++ /dev/null @@ -1,526 +0,0 @@ -Class { - #name : #PPSearcherTest, - #superclass : #PPAbstractParserTest, - #instVars : [ - 'searcher' - ], - #category : #'PetitAnalyzer-Tests' -} - -{ #category : #running } -PPSearcherTest >> setUp [ - searcher := PPSearcher new -] - -{ #category : #testing } -PPSearcherTest >> testAnyPattern [ - | result | - searcher - matches: PPPattern any - do: [ :parser :answer | - answer - add: parser; - yourself ]. - result := searcher execute: $a asParser initialAnswer: OrderedCollection new. - self assert: result size equals: 1. - result := searcher execute: $a asParser star initialAnswer: OrderedCollection new. - self assert: result size equals: 2. - result := searcher execute: $a asParser , $b asParser initialAnswer: OrderedCollection new. - self assert: result size equals: 3 -] - -{ #category : #testing } -PPSearcherTest >> testClassPattern [ - | result | - searcher - matches: (PPPattern class: PPLiteralObjectParser) - do: [ :parser :answer | - answer - add: parser; - yourself ]. - result := searcher execute: $a asParser initialAnswer: OrderedCollection new. - self assert: result size equals: 1. - self assert: (result allSatisfy: [ :each | each class = PPLiteralObjectParser ]). - result := searcher execute: 'abc' asParser initialAnswer: OrderedCollection new. - self assert: result isEmpty. - result := searcher execute: #any asParser initialAnswer: OrderedCollection new. - self assert: result isEmpty. - result := searcher execute: $a asParser / #any asParser , $b asParser initialAnswer: OrderedCollection new. - self assert: result size equals: 2. - self assert: (result allSatisfy: [ :each | each class = PPLiteralObjectParser ]) -] - -{ #category : #'testing-copy' } -PPSearcherTest >> testCopyMatchAction [ - | old new | - old := $a asParser ==> [ :token | $b ]. - new := old copyInContext: Dictionary new. - self assert: (old match: old inContext: Dictionary new). - self assert: (old match: new inContext: Dictionary new). - self deny: (old == new). -] - -{ #category : #'testing-copy' } -PPSearcherTest >> testCopyMatchDelegate [ - | old new | - old := $a asParser token trim. - new := old copyInContext: Dictionary new. - self assert: (old match: old inContext: Dictionary new). - self assert: (old match: new inContext: Dictionary new). - self deny: (old == new). -] - -{ #category : #'testing-copy' } -PPSearcherTest >> testCopyMatchEpsilon [ - | old new | - old := nil asParser. - new := old copyInContext: Dictionary new. - self assert: (old match: old inContext: Dictionary new). - self assert: (old match: new inContext: Dictionary new). - self deny: (old == new). -] - -{ #category : #'testing-copy' } -PPSearcherTest >> testCopyMatchFailure [ - | old new | - old := PPFailingParser message: 'problem'. - new := old copyInContext: Dictionary new. - self assert: (old match: old inContext: Dictionary new). - self assert: (old match: new inContext: Dictionary new). - self deny: (old == new). -] - -{ #category : #'testing-copy' } -PPSearcherTest >> testCopyMatchList [ - | old new | - old := $a asParser , $b asParser , $c asParser. - new := old copyInContext: Dictionary new. - self assert: (old match: old inContext: Dictionary new). - self assert: (old match: new inContext: Dictionary new). - self deny: (old == new). -] - -{ #category : #'testing-copy' } -PPSearcherTest >> testCopyMatchLiteral [ - | old new | - old := $a asParser. - new := old copyInContext: Dictionary new. - self assert: (old match: old inContext: Dictionary new). - self assert: (old match: new inContext: Dictionary new). - self deny: (old == new). -] - -{ #category : #'testing-copy' } -PPSearcherTest >> testCopyMatchPluggable [ - | old new | - old := [ :stream | ] asParser. - new := old copyInContext: Dictionary new. - self assert: (old match: old inContext: Dictionary new). - self assert: (old match: new inContext: Dictionary new). - self deny: (old == new). -] - -{ #category : #'testing-copy' } -PPSearcherTest >> testCopyMatchPredicate [ - | old new | - old := #word asParser. - new := old copyInContext: Dictionary new. - self assert: (old match: old inContext: Dictionary new). - self assert: (old match: new inContext: Dictionary new). - self deny: (old == new). -] - -{ #category : #'testing-copy' } -PPSearcherTest >> testCopyMatchPredicateSequence [ - | old new | - old := 'foo' asParser caseInsensitive. - new := old copyInContext: Dictionary new. - self assert: (old match: old inContext: Dictionary new). - self assert: (old match: new inContext: Dictionary new). - self deny: (old == new). -] - -{ #category : #'testing-copy' } -PPSearcherTest >> testCopyMatchRecursiveDelegate [ - | old new | - old := PPDelegateParser new. - old setParser: old. - new := old copyInContext: Dictionary new. - self assert: (old match: old inContext: Dictionary new). - self assert: (old match: new inContext: Dictionary new). - self deny: (old == new). -] - -{ #category : #'testing-copy' } -PPSearcherTest >> testCopyMatchRecursiveList [ - | old new | - old := PPChoiceParser new. - old setParsers: (Array with: old). - new := old copyInContext: Dictionary new. - self assert: (old match: old inContext: Dictionary new). - self assert: (old match: new inContext: Dictionary new). - self deny: (old == new). -] - -{ #category : #'testing-copy' } -PPSearcherTest >> testCopyMatchRepetition [ - | old new | - old := #word asParser star. - new := old copyInContext: Dictionary new. - self assert: (old match: old inContext: Dictionary new). - self assert: (old match: new inContext: Dictionary new). - self deny: (old == new). -] - -{ #category : #'testing-copy' } -PPSearcherTest >> testCopyMatchRepetitionGreedy [ - | old new | - old := #word asParser starGreedy: #digit asParser. - new := old copyInContext: Dictionary new. - self assert: (old match: old inContext: Dictionary new). - self assert: (old match: new inContext: Dictionary new). - self deny: (old == new). -] - -{ #category : #'testing-copy' } -PPSearcherTest >> testCopyMatchRepetitionLazy [ - | old new | - old := #word asParser starLazy: #digit asParser. - new := old copyInContext: Dictionary new. - self assert: (old match: old inContext: Dictionary new). - self assert: (old match: new inContext: Dictionary new). - self deny: (old == new). -] - -{ #category : #'testing-copy' } -PPSearcherTest >> testCopyMatchRepetitionMinMax [ - | old new | - old := #word asParser min: 5 max: 10. - new := old copyInContext: Dictionary new. - self assert: (old match: old inContext: Dictionary new). - self assert: (old match: new inContext: Dictionary new). - self deny: (old == new). -] - -{ #category : #testing } -PPSearcherTest >> testKindPattern [ - | result | - searcher - matches: (PPPattern kind: PPLiteralParser) - do: [ :parser :answer | - answer - add: parser; - yourself ]. - result := searcher execute: $a asParser initialAnswer: OrderedCollection new. - self assert: result size equals: 1. - self assert: (result allSatisfy: [ :each | each class = PPLiteralObjectParser ]). - result := searcher execute: 'abc' asParser initialAnswer: OrderedCollection new. - self assert: result size equals: 1. - self assert: (result allSatisfy: [ :each | each class = PPLiteralSequenceParser ]). - result := searcher execute: #any asParser initialAnswer: OrderedCollection new. - self assert: result isEmpty. - result := searcher execute: $a asParser / #any asParser , $b asParser initialAnswer: OrderedCollection new. - self assert: result size equals: 2. - self assert: (result allSatisfy: [ :each | each class = PPLiteralObjectParser ]) -] - -{ #category : #'testing-lists' } -PPSearcherTest >> testListInfix [ - | result | - searcher - matches: PPListPattern any , $a asParser , PPListPattern any - do: [ :parser :answer | true ]. - - result := searcher - execute: $a asParser , $a asParser - initialAnswer: false. - self assert: result. - - result := searcher - execute: $a asParser , $b asParser - initialAnswer: false. - self assert: result. - - result := searcher - execute: $b asParser , $a asParser - initialAnswer: false. - self assert: result. - - result := searcher - execute: $b asParser , $b asParser - initialAnswer: false. - self deny: result. - - result := searcher - execute: $a asParser , $a asParser , $a asParser - initialAnswer: false. - self assert: result. - - result := searcher - execute: $b asParser , $a asParser , $a asParser - initialAnswer: false. - self assert: result. - - result := searcher - execute: $a asParser , $b asParser , $a asParser - initialAnswer: false. - self assert: result. - - result := searcher - execute: $a asParser , $a asParser , $b asParser - initialAnswer: false. - self assert: result. - - result := searcher - execute: $b asParser , $b asParser , $a asParser - initialAnswer: false. - self assert: result. - - result := searcher - execute: $a asParser , $b asParser , $b asParser - initialAnswer: false. - self assert: result. - - result := searcher - execute: $b asParser , $a asParser , $b asParser - initialAnswer: false. - self assert: result. - - result := searcher - execute: $b asParser , $b asParser , $b asParser - initialAnswer: false. - self deny: result -] - -{ #category : #'testing-lists' } -PPSearcherTest >> testListPostfix [ - | result | - searcher - matches: PPListPattern any , $b asParser - do: [ :parser :answer | true ]. - - result := searcher - execute: $a asParser , $a asParser - initialAnswer: false. - self deny: result. - - result := searcher - execute: $a asParser , $b asParser - initialAnswer: false. - self assert: result. - - result := searcher - execute: $b asParser , $a asParser - initialAnswer: false. - self deny: result. - - result := searcher - execute: $b asParser , $b asParser - initialAnswer: false. - self assert: result. - - result := searcher - execute: $a asParser , $a asParser , $a asParser - initialAnswer: false. - self deny: result. - - result := searcher - execute: $b asParser , $a asParser , $a asParser - initialAnswer: false. - self deny: result. - - result := searcher - execute: $a asParser , $b asParser , $a asParser - initialAnswer: false. - self deny: result. - - result := searcher - execute: $a asParser , $a asParser , $b asParser - initialAnswer: false. - self assert: result. - - result := searcher - execute: $b asParser , $b asParser , $a asParser - initialAnswer: false. - self deny: result. - - result := searcher - execute: $a asParser , $b asParser , $b asParser - initialAnswer: false. - self assert: result. - - result := searcher - execute: $b asParser , $a asParser , $b asParser - initialAnswer: false. - self assert: result. - - result := searcher - execute: $b asParser , $b asParser , $b asParser - initialAnswer: false. - self assert: result -] - -{ #category : #'testing-lists' } -PPSearcherTest >> testListPrefix [ - | result | - searcher - matches: $a asParser , PPListPattern any - do: [ :parser :answer | true ]. - - result := searcher - execute: $a asParser , $a asParser - initialAnswer: false. - self assert: result. - - result := searcher - execute: $a asParser , $b asParser - initialAnswer: false. - self assert: result. - - result := searcher - execute: $b asParser , $a asParser - initialAnswer: false. - self deny: result. - - result := searcher - execute: $b asParser , $b asParser - initialAnswer: false. - self deny: result. - - - - result := searcher - execute: $a asParser , $a asParser , $a asParser - initialAnswer: false. - self assert: result. - - result := searcher - execute: $b asParser , $a asParser , $a asParser - initialAnswer: false. - self deny: result. - - result := searcher - execute: $a asParser , $b asParser , $a asParser - initialAnswer: false. - self assert: result. - - result := searcher - execute: $a asParser , $a asParser , $b asParser - initialAnswer: false. - self assert: result. - - result := searcher - execute: $b asParser , $b asParser , $a asParser - initialAnswer: false. - self deny: result. - - result := searcher - execute: $a asParser , $b asParser , $b asParser - initialAnswer: false. - self assert: result. - - result := searcher - execute: $b asParser , $a asParser , $b asParser - initialAnswer: false. - self deny: result. - - result := searcher - execute: $b asParser , $b asParser , $b asParser - initialAnswer: false. - self deny: result -] - -{ #category : #testing } -PPSearcherTest >> testMatchesAny [ - | result | - searcher - matchesAnyOf: (Array with: $a asParser with: $b asParser) - do: [ :parser :answer | - answer - add: parser; - yourself ]. - result := searcher execute: $a asParser , $b asParser , $c asParser initialAnswer: OrderedCollection new. - self assert: result size equals: 2. - self assert: result first literal equals: $a. - self assert: result last literal equals: $b -] - -{ #category : #testing } -PPSearcherTest >> testMultiplePattern [ - | result | - searcher - matches: $a asParser - do: [ :parser :answer | - answer first add: parser. - answer ]. - searcher - matches: PPPattern any - do: [ :parser :answer | - answer second add: parser. - answer ]. - result := searcher - execute: $a asParser , $a asParser , $b asParser - initialAnswer: (Array with: OrderedCollection new with: OrderedCollection new). - self assert: result first size equals: 2. - self assert: result first first literal equals: $a. - self assert: result first last literal equals: $a. - self assert: result last size equals: 2. - self assert: result last first class equals: PPSequenceParser. - self assert: result last last literal equals: $b -] - -{ #category : #testing } -PPSearcherTest >> testNamePattern [ - | result | - searcher - matches: (PPPattern name: 'foo') - do: [ :parser :answer | - answer - add: parser; - yourself ]. - result := searcher execute: $a asParser initialAnswer: OrderedCollection new. - self assert: result isEmpty. - result := searcher execute: ($a asParser name: 'foo') initialAnswer: OrderedCollection new. - self assert: result size equals: 1. - self assert: result first name equals: 'foo'. - result := searcher execute: ($a asParser name: 'bar') , ($b asParser name: 'foo') initialAnswer: OrderedCollection new. - self assert: result size equals: 1. - self assert: result first name equals: 'foo' -] - -{ #category : #testing } -PPSearcherTest >> testNewPattern [ - self - should: [ PPPattern new ] - raise: Error -] - -{ #category : #testing } -PPSearcherTest >> testRecursivePattern [ - | recursive | - recursive := PPDelegateParser new. - recursive setParser: recursive. - searcher matches: recursive do: [ :parser :answer | parser ]. - self assert: (searcher execute: recursive) equals: recursive. - self assert: (searcher execute: $a asParser) isNil. - self assert: (searcher execute: $a asParser / $b asParser star) isNil -] - -{ #category : #testing } -PPSearcherTest >> testRepeatedPattern [ - | pattern result | - searcher - matches: (pattern := PPPattern any) , pattern - do: [ :parser :answer | - answer - add: parser; - yourself ]. - result := searcher execute: $a asParser , $b asParser initialAnswer: OrderedCollection new. - self assert: result isEmpty. - result := searcher execute: $a asParser , $a asParser initialAnswer: OrderedCollection new. - self assert: result size equals: 1. - result := searcher execute: $a asParser , ($a asParser , $b asParser) initialAnswer: OrderedCollection new. - self assert: result isEmpty. - result := searcher execute: $b asParser , ($a asParser , $a asParser) initialAnswer: OrderedCollection new. - self assert: result size equals: 1 -] diff --git a/src-archive/PetitAnalyzer/PPSentinel.class.st b/src-archive/PetitAnalyzer/PPSentinel.class.st deleted file mode 100644 index fe16b7e3f..000000000 --- a/src-archive/PetitAnalyzer/PPSentinel.class.st +++ /dev/null @@ -1,13 +0,0 @@ -Class { - #name : #PPSentinel, - #superclass : #PPEpsilonParser, - #classInstVars : [ - 'instance' - ], - #category : #'PetitAnalyzer-Core' -} - -{ #category : #'instance creation' } -PPSentinel class >> instance [ - ^ instance ifNil: [ instance := self new ] -] diff --git a/src-archive/PetitAnalyzer/PPSequenceParser.extension.st b/src-archive/PetitAnalyzer/PPSequenceParser.extension.st deleted file mode 100644 index 055a56939..000000000 --- a/src-archive/PetitAnalyzer/PPSequenceParser.extension.st +++ /dev/null @@ -1,43 +0,0 @@ -Extension { #name : #PPSequenceParser } - -{ #category : #'*petitanalyzer-private' } -PPSequenceParser >> cycleSet: aDictionary [ - | firstSet | - 1 to: parsers size do: [ :index | - firstSet := aDictionary at: (parsers at: index). - (firstSet anySatisfy: [ :each | each isNullable ]) - ifFalse: [ ^ parsers copyFrom: 1 to: index ] ]. - ^ parsers -] - -{ #category : #'*petitanalyzer-private' } -PPSequenceParser >> firstSets: aFirstDictionary into: aSet [ - | nullable | - parsers do: [ :parser | - nullable := false. - (aFirstDictionary at: parser) do: [ :each | - each isNullable - ifTrue: [ nullable := true ] - ifFalse: [ aSet add: each ] ]. - nullable - ifFalse: [ ^ self ] ]. - aSet add: PPSentinel instance -] - -{ #category : #'*petitanalyzer-private' } -PPSequenceParser >> followSets: aFollowDictionary firstSets: aFirstDictionary into: aSet [ - parsers keysAndValuesDo: [ :index :parser | - | followSet firstSet | - followSet := aFollowDictionary at: parser. - index = parsers size - ifTrue: [ followSet addAll: aSet ] - ifFalse: [ - (self class withAll: (parsers - copyFrom: index + 1 to: parsers size)) - firstSets: aFirstDictionary - into: (firstSet := IdentitySet new). - (firstSet anySatisfy: [ :each | each isNullable ]) - ifTrue: [ followSet addAll: aSet ]. - followSet addAll: (firstSet - reject: [ :each | each isNullable ]) ] ] -] diff --git a/src-archive/PetitAnalyzer/PPTokenParser.extension.st b/src-archive/PetitAnalyzer/PPTokenParser.extension.st deleted file mode 100644 index 69c4ac165..000000000 --- a/src-archive/PetitAnalyzer/PPTokenParser.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #PPTokenParser } - -{ #category : #'*petitanalyzer-matching' } -PPTokenParser >> match: aParser inContext: aDictionary seen: anIdentitySet [ - ^ (super match: aParser inContext: aDictionary seen: anIdentitySet) and: [ self tokenClass = aParser tokenClass ] -] diff --git a/src-archive/PetitAnalyzer/package.st b/src-archive/PetitAnalyzer/package.st deleted file mode 100644 index 13dd5c0bd..000000000 --- a/src-archive/PetitAnalyzer/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #PetitAnalyzer } diff --git a/src-archive/PetitCSV/PPCommaSeparatedParser.class.st b/src-archive/PetitCSV/PPCommaSeparatedParser.class.st deleted file mode 100644 index eb90c4eb1..000000000 --- a/src-archive/PetitCSV/PPCommaSeparatedParser.class.st +++ /dev/null @@ -1,55 +0,0 @@ -Class { - #name : #PPCommaSeparatedParser, - #superclass : #PPCompositeParser, - #instVars : [ - 'row', - 'cell', - 'rows', - 'endOfLine', - 'whitespace', - 'nonComma' - ], - #category : #PetitCSV -} - -{ #category : #'as yet unclassified' } -PPCommaSeparatedParser >> cell [ - ^ whitespace star , nonComma star flatten , whitespace star - ==> [ :nodes | nodes second value ] -] - -{ #category : #'as yet unclassified' } -PPCommaSeparatedParser >> endOfLine [ - ^ #newline asParser token -] - -{ #category : #'as yet unclassified' } -PPCommaSeparatedParser >> nonComma [ - ^ PPPredicateObjectParser anyExceptAnyOf: {Character space . Character tab . Character cr . Character lf . $, } -] - -{ #category : #'as yet unclassified' } -PPCommaSeparatedParser >> number [ - ^ ($- asParser optional , #digit asParser plus , ($. asParser , #digit asParser plus) optional) token - ==> [ :nodes | nodes first value asNumber ] -] - -{ #category : #'as yet unclassified' } -PPCommaSeparatedParser >> row [ - ^ (cell delimitedBy: $, asParser token) ==> [ :nodes | nodes reject: [ :each | each class = PPToken ] ] -] - -{ #category : #'as yet unclassified' } -PPCommaSeparatedParser >> rows [ - ^ (row delimitedBy: endOfLine) ==> [ :nodes | nodes reject: [ :each | each class = PPToken ] ] -] - -{ #category : #'as yet unclassified' } -PPCommaSeparatedParser >> start [ - ^ rows end -] - -{ #category : #'as yet unclassified' } -PPCommaSeparatedParser >> whitespace [ - ^ PPPredicateObjectParser anyOf: (Array with: Character space with: Character tab) -] diff --git a/src-archive/PetitCSV/PPCommaSeparatedParserTest.class.st b/src-archive/PetitCSV/PPCommaSeparatedParserTest.class.st deleted file mode 100644 index be65044e0..000000000 --- a/src-archive/PetitCSV/PPCommaSeparatedParserTest.class.st +++ /dev/null @@ -1,37 +0,0 @@ -Class { - #name : #PPCommaSeparatedParserTest, - #superclass : #PPCompositeParserTest, - #instVars : [ - 'row', - 'cell', - 'rows' - ], - #category : #PetitCSV -} - -{ #category : #'as yet unclassified' } -PPCommaSeparatedParserTest >> parserClass [ - ^ PPCommaSeparatedParser -] - -{ #category : #'as yet unclassified' } -PPCommaSeparatedParserTest >> testCell [ - self assert: '123' is: #(('123')). - self assert: 'abc' is: #(('abc')). - self assert: 'ASDASD123' is: #(('ASDASD123')). - -] - -{ #category : #'as yet unclassified' } -PPCommaSeparatedParserTest >> testSingleLine [ - self assert: '1 , 2, 3' is: #(('1' '2' '3')). - self assert: 'a1 , 2, 3' is: #(('a1' '2' '3')). - self assert: 'a , 2, 3' is: #(('a' '2' '3')). - -] - -{ #category : #'as yet unclassified' } -PPCommaSeparatedParserTest >> testTwoLines [ - self assert: '1 -2' is: {{'1'} .{'2'}} -] diff --git a/src-archive/PetitCSV/package.st b/src-archive/PetitCSV/package.st deleted file mode 100644 index c71f4a81f..000000000 --- a/src-archive/PetitCSV/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #PetitCSV } diff --git a/src-archive/PetitGui/PPActionParser.extension.st b/src-archive/PetitGui/PPActionParser.extension.st deleted file mode 100644 index 78d8dae31..000000000 --- a/src-archive/PetitGui/PPActionParser.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #PPActionParser } - -{ #category : #'*petitgui-mondrian' } -PPActionParser >> visualizationGraphType [ - ^ '[]' -] diff --git a/src-archive/PetitGui/PPAddParserRefactoring.class.st b/src-archive/PetitGui/PPAddParserRefactoring.class.st deleted file mode 100644 index d4dadb781..000000000 --- a/src-archive/PetitGui/PPAddParserRefactoring.class.st +++ /dev/null @@ -1,66 +0,0 @@ -" -PetitParser Refactoring: addition of a parser -" -Class { - #name : #PPAddParserRefactoring, - #superclass : #RBRefactoring, - #instVars : [ - 'superclass', - 'name', - 'cateogry' - ], - #category : #'PetitGui-Refactoring' -} - -{ #category : #'instance creation' } -PPAddParserRefactoring class >> name: aString category: aSymbol [ - ^ self name: aString category: aSymbol superclass: PPCompositeParser -] - -{ #category : #'instance creation' } -PPAddParserRefactoring class >> name: aString category: aSymbol superclass: aClass [ - ^ self new - setName: aString; - setCategory: aSymbol; - setSuperclass: aClass; - yourself -] - -{ #category : #preconditions } -PPAddParserRefactoring >> preconditions [ - ^ self checkCompositeParser: superclass -] - -{ #category : #initialization } -PPAddParserRefactoring >> setCategory: aSymbol [ - cateogry := aSymbol asSymbol -] - -{ #category : #initialization } -PPAddParserRefactoring >> setName: aString [ - name := aString -] - -{ #category : #initialization } -PPAddParserRefactoring >> setSuperclass: aClass [ - superclass := self classObjectFor: aClass -] - -{ #category : #accessing } -PPAddParserRefactoring >> startProductionSource [ - ^ 'start - ^ self shouldBeImplemented' -] - -{ #category : #transforming } -PPAddParserRefactoring >> transform [ - self performComponentRefactoring: (RBAddClassRefactoring - model: self model - addClass: name - superclass: superclass - subclasses: #() - category: cateogry). - (self classObjectFor: name) - compile: self startProductionSource - classified: #(accessing) -] diff --git a/src-archive/PetitGui/PPAndParser.extension.st b/src-archive/PetitGui/PPAndParser.extension.st deleted file mode 100644 index deab42297..000000000 --- a/src-archive/PetitGui/PPAndParser.extension.st +++ /dev/null @@ -1,10 +0,0 @@ -Extension { #name : #PPAndParser } - -{ #category : #'*petitgui-accessing' } -PPAndParser >> displayDescription [ - ^ 'and' -] - -{ #category : #'*petitgui-accessing' } -PPAndParser >> exampleOn: aStream [ -] diff --git a/src-archive/PetitGui/PPBrowser.class.st b/src-archive/PetitGui/PPBrowser.class.st deleted file mode 100644 index d5f593265..000000000 --- a/src-archive/PetitGui/PPBrowser.class.st +++ /dev/null @@ -1,105 +0,0 @@ -" -I provide the ability to browse composite parsers. - -One can select a parser from a list and see all of the production rules of the grammar. - -When a production rule is selected, on can test it by inputting a sample and clicking a ""play"" button to get results. - -I also allow one to see the source of a production rule, see the graph or rules, a map of the ruleset, create examples of tokens for matching a given rule, see first and follow. - -Based on the parsing of the content provided, there is some support for debugging. - - -self open -" -Class { - #name : #PPBrowser, - #superclass : #GLMCompositePresentation, - #category : #'PetitGui-Core' -} - -{ #category : #accessing } -PPBrowser class >> icon [ - ^ (Form - extent: 16@16 - depth: 32 - fromArray: #( 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1069534679 2139069360 2139069360 2139069360 2139069360 1551866800 1199545264 1451203504 2139069360 2139069360 2139069360 2139069360 2139069360 260021168 8362928 16777215 2139069360 14177 67123041 620771169 1224750945 1845507937 3372234593 3087021921 4278204257 4278204257 4278204257 4278204257 4278204257 3405789025 452999009 16777215 2139069360 14177 117454689 704657249 1325414241 1728067425 2197829473 3288348513 4278204257 4278204257 3758110561 3691001697 4278204257 4278204257 654325601 16777215 2139069360 14177 201340769 822097761 1409300321 1543518049 1811953505 3523229537 4278204257 4278204257 2231383905 3019913057 4278204257 4278204257 620771169 16777215 2139069360 14177 318781281 939538273 1509963617 1862285153 2717923169 3573561185 4278204257 4278204257 3238016865 3640670049 4278204257 4060100449 452999009 16777215 2139069360 1593849697 1862285153 2248161121 2281715553 2751477601 3003135841 3825219425 4278204257 4278204257 4278204257 4278204257 4278204257 1476409185 100677473 16777215 2139069360 33568609 536885089 1157642081 1644181345 1946171233 2214606689 4278204257 4278204257 3389011809 2281715553 2130720609 268449633 16791393 14177 16777215 2139069360 83900257 637548385 1258305377 1543518049 1543518049 1543518049 4278204257 4278204257 2466264929 201340769 14177 14177 14177 14177 16777215 2139069360 151009121 754988897 1375745889 1543518049 1543518049 1543518049 4278204257 4278204257 2298492769 125803440 16777215 16777215 16777215 16777215 16777215 2139069360 234895201 872429409 1426077537 1543518049 1543518049 2902472545 4278204257 4278204257 603993953 75471792 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215) - offset: 0@0) -] - -{ #category : #accessing } -PPBrowser class >> label [ - ^ 'PetitParser' -] - -{ #category : #private } -PPBrowser class >> menuCommandOn: aBuilder [ - - - (aBuilder item: self label) - parent: #Tools; - icon: self icon; - action: [ self open ] -] - -{ #category : #'instance creation' } -PPBrowser class >> open [ - - - - -'. -] - -{ #category : #helpers } -RTHTML5Exporter >> addStart: aView [ - self writeText: -' - - - ',self title, ' - - - - - - - - - - -
    -
    -
      '. - - (aCollection sorted: [ :a :b| a selector <= b selector ]) do: [ :met | - text := met methodClass name,'-', met selector asString. - stream nextPutAll: ' -
    • -

      ',text,'

      '. - stream nextPutAll: ' - -
    • '. - ]. - stream nextPutAll: -'
    -
    - - -
    -'. ] ensure: [ stream close ]. - ^ index. - - -] - -{ #category : #examples } -RTHTML5ExporterExample >> example01 [ - " - self new example01 - " - - | e view | - e := RTHTML5Exporter new. - view := RTView new. - view canvas color: Color gray. - RTShape withAllSubclasses - do: - [ :cls | view add: (RTBox elementOn: cls) @ RTPopup @ RTDraggable ]. - view @ RTDraggableView. - RTEdgeBuilder new - view: view; - objects: RTShape withAllSubclasses; - connectFrom: #superclass to: #yourself. - RTTreeLayout on: view elements. - e export: view. - ^ view -] - -{ #category : #examples } -RTHTML5ExporterExample >> exportAll [ - " - self new exportAll - " - | examples index stream views name exporter st blacklist v view | - (self confirm: 'Are you sure to run this example? Warning: Several files are created') ifFalse: [ ^ self ]. -blacklist := OrderedCollection new - add: RTOpenStreetMapExample; - add: RTAnimatedScatterPlotExample; - add: RTAnimationExample; - add: RTConstraintExample; - add: RTExploraBuilderExample; - add: RTLineDecorationExample; - add: RTDynamicStackerGrapherExample. -examples := ((RTAbstractExample subclasses select: [ :cls | (blacklist includes: cls) not ] )collect: #new) sortedAs: #label. -index := TRPlatform current workingDirectory / 'index.html'. -index exists ifTrue: [ index delete ]. -stream := index writeStream. -views := Dictionary new. -examples doWithIndex: [ :ex :i | | link | - v := RTView new. - v @ RTDraggableView @ RTZoomableView . - ex gtOpenOn: v. - name := views size printStringHex. - views at: ex put: name. - - v elements copy do: [ :e| |n | - n := views size printStringHex. - views at: e model put: n. - (e model method = (RTSpectrographExample >> #exampleRoassalVisualization)) ifTrue: [ - v canvas removeShape: (e attributes at: #RTLabelledLabel). - v removeElement: e. ] - ifFalse: [ - view := e model returnValue. - [ (view isKindOf: RTBuilder) ifTrue: [ view build. view := view view ]. - view @ RTDraggableView @ RTZoomableView. - exporter := RTHTML5Exporter new - fileName: n, '.html'; - shouldCreateJS: false. - exporter createStream. - st := exporter stream. - exporter export: view toStream: st ] on: Error do: [ - st close. - v canvas removeShape: (e attributes at: #RTLabelledLabel). - v removeElement: e ]. - ]. - ]. - - RTGridLayout new - gapSize: 50; - on: v elements. - link := RTLinkView new name: [:e | views at: e ]. - v elements @ link. - - RTHTML5Exporter new - fileName: name, '.html'; - shouldCreateJS: i = 1; - export: v. - ]. - -[ - stream - nextPutAll: ' - - - - - - Example Browser - - - - - - - - - - - - - - - - -
    - -
    -
    - - - - - -' - ] ensure: [ stream close ]. -views -] - -{ #category : #examples } -RTHTML5ExporterExample >> exportExampleCircleLayoutAndEdges [ - | e view| - e := RTHTML5Exporter new. - view := RTRoassalExample new perform: #exampleCircleLayoutAndEdges. - - e export: view. -] - -{ #category : #examples } -RTHTML5ExporterExample >> exportExampleClusterLayout [ - | e view| - e := RTHTML5Exporter new. - view := RTRoassalExample new perform: #exampleClusterLayout. - - e export: view. -] - -{ #category : #examples } -RTHTML5ExporterExample >> exportExampleColoredAndInteractionLabel [ - | e view| - e := RTHTML5Exporter new. - view := RTGrapherExample new perform: #exampleColoredAndInteractionLabel. - - e export: view. -] - -{ #category : #examples } -RTHTML5ExporterExample >> exportExampleHappyNewYear [ - | e view| - e := RTHTML5Exporter new. - view := RTAnimationExample new perform: #exampleHappy2014. - - e export: view. -] - -{ #category : #examples } -RTHTML5ExporterExample >> exportExampleLabels [ - | e view| - e := RTHTML5Exporter new. - view := RTRoassalExample new perform: #exampleLabels. - - e export: view. -] - -{ #category : #examples } -RTHTML5ExporterExample >> exportExampleLazyFormLoading [ - | e view| - e := RTHTML5Exporter new. - view := RTRoassalExample new perform: #exampleLazyFormLoading. - - e export: view. -] diff --git a/src/Roassal2/RTHTML5ExporterTest.class.st b/src/Roassal2/RTHTML5ExporterTest.class.st deleted file mode 100644 index df7ab4728..000000000 --- a/src/Roassal2/RTHTML5ExporterTest.class.st +++ /dev/null @@ -1,21 +0,0 @@ -Class { - #name : #RTHTML5ExporterTest, - #superclass : #RTTest, - #category : #'Roassal2-Exporter-HTML5' -} - -{ #category : #tests } -RTHTML5ExporterTest >> testBasic [ - | view stream | - view := RTView new. - view add: RTBox element. - stream := WriteStream on: String new. - [RTHTML5Exporter new - export: view toStream: stream; - insert: view named: 'foo' inPillarStream: stream. - ] ensure: [ - 'roassal.js' asFileReference ensureDelete. - 'foo.html' asFileReference ensureDelete. ] - - -] diff --git a/src/Roassal2/RTHighlightElementsInView.class.st b/src/Roassal2/RTHighlightElementsInView.class.st deleted file mode 100644 index 96ce1c97b..000000000 --- a/src/Roassal2/RTHighlightElementsInView.class.st +++ /dev/null @@ -1,127 +0,0 @@ -" -Add a menu entry to easily allow for selection - -[[[ -| v | -v := RTView new. -v addAll: (RTBox elementsOn: (Collection withAllSubclasses)). -RTGridLayout on: v elements. -v elements @ RTPopup. -v @ RTHighlightElementsInView. -]]] - -[[[ -| b | -b := RTMondrian new. -b node: 4 forIt: [ - b node: 4 ]. -b view @ RTHighlightElementsInView new transparent. -b -]]] -" -Class { - #name : #RTHighlightElementsInView, - #superclass : #RTAbstractHighlightElementsInView, - #instVars : [ - 'colorIndex', - 'transparency' - ], - #category : #'Roassal2-Interactions' -} - -{ #category : #initialization } -RTHighlightElementsInView >> currentColor [ - | rawColor | - rawColor := self palette at: colorIndex + 1. - self isNotTransparent - ifTrue: [ ^ rawColor ]. - ^ rawColor alpha: self transparency -] - -{ #category : #initialization } -RTHighlightElementsInView >> getColorIndex [ - ^ view attributeAt: #RTHighlightElementsInView ifAbsentPut: [ 1 ] -] - -{ #category : #initialization } -RTHighlightElementsInView >> highlightElementsUsing: string [ - "Highlight some elements depending on the entered string. - String has to be a regular expression" - string ifEmpty: [ ^ self processEmptyString ]. - (self getRelevantElementsFor: string) - do: [ :e | - self rememberPreviousColorIfNecessaryFor: e. - e trachelShape color: self currentColor ]. - self increaseColorIndex. - view signalUpdate -] - -{ #category : #initialization } -RTHighlightElementsInView >> increaseColorIndex [ - colorIndex := colorIndex + 1 \\ self palette size -] - -{ #category : #initialization } -RTHighlightElementsInView >> initialize [ - super initialize. - colorIndex := 0. - transparency := 1.0 -] - -{ #category : #initialization } -RTHighlightElementsInView >> initializeElement: aView [ - | string | - super initializeElement: aView. - view - addMenu: 'Highlight' - callback: [ string := self askForPattern. - string ifNotNil: - [ self highlightElementsUsing: string ] ] -] - -{ #category : #testing } -RTHighlightElementsInView >> isNotTransparent [ - ^ self transparency = 1.0 -] - -{ #category : #initialization } -RTHighlightElementsInView >> palette [ - ^ Array with: Color blue with: Color green with: Color orange -] - -{ #category : #initialization } -RTHighlightElementsInView >> processEmptyString [ - view attributeAt: #RTHighlightElementsInView ifAbsentPut: [ 1 ]. - "Should remove the color previously set" - view elements - do: [ :e | - (e hasAttribute: #prevousColorRTHighlightElementsInView) - ifTrue: [ e trachelShape - color: (e attributeAt: #prevousColorRTHighlightElementsInView). - e removeAttributeAt: #prevousColorRTHighlightElementsInView ] ]. - ^ self -] - -{ #category : #initialization } -RTHighlightElementsInView >> rememberPreviousColorIfNecessaryFor: e [ - (e hasAttribute: #prevousColorRTHighlightElementsInView) - ifFalse: [ e - attributeAt: #prevousColorRTHighlightElementsInView - put: e trachelShape color ] -] - -{ #category : #accessing } -RTHighlightElementsInView >> transparency [ - ^ transparency -] - -{ #category : #accessing } -RTHighlightElementsInView >> transparency: aFloatBetweenZeroAndOne [ - "Transparency is useful in case objects are nested" - transparency := aFloatBetweenZeroAndOne -] - -{ #category : #configuration } -RTHighlightElementsInView >> transparent [ - transparency := 0.4 -] diff --git a/src/Roassal2/RTHighlightElementsInViewTest.class.st b/src/Roassal2/RTHighlightElementsInViewTest.class.st deleted file mode 100644 index 14c4b6df7..000000000 --- a/src/Roassal2/RTHighlightElementsInViewTest.class.st +++ /dev/null @@ -1,67 +0,0 @@ -Class { - #name : #RTHighlightElementsInViewTest, - #superclass : #RTTest, - #category : #'Roassal2-Interactions' -} - -{ #category : #tests } -RTHighlightElementsInViewTest >> testBasic [ - - | v cs i | - cs := Collection withAllSubclasses. - v := RTView new. - v addAll: (RTBox elementsOn: cs). - RTGridLayout on: v elements. - v elements @ RTPopup. - i := RTHighlightElementsInView new. - v @ i. - - self assert: (v elements collect: [ :e | e trachelShape color ] as: Set) size equals: 1. - - i highlightElementsUsing: '*Collection*'. - self assert: (v elements collect: [ :e | e trachelShape color ] as: Set) size equals: 2. - - i highlightElementsUsing: 'Hash'. - self assert: (v elements collect: [ :e | e trachelShape color ] as: Set) size equals: 2. - - i highlightElementsUsing: '*Array*'. - self assert: (v elements collect: [ :e | e trachelShape color ] as: Set) size equals: 3. - - i highlightElementsUsing: ''. - self assert: (v elements collect: [ :e | e trachelShape color ] as: Set) size equals: 1. -] - -{ #category : #tests } -RTHighlightElementsInViewTest >> testBasic02 [ - - | v cs i | - cs := Collection withAllSubclasses. - v := RTView new. - v addAll: (RTBox elementsOn: cs). - RTGridLayout on: v elements. - v elements @ RTPopup. - i := RTHighlightElementsInView new. - v @ i. - - self assert: (v elements collect: [ :e | e trachelShape color ] as: Set) size equals: 1. - - i highlightElementsUsing: 'Collection'. - self assert: (v elements collect: [ :e | e trachelShape color ] as: Set) size equals: 2. - - i highlightElementsUsing: 'Collection'. - self assert: (v elements collect: [ :e | e trachelShape color ] as: Set) size equals: 2. - - "We make sure that if we select twice the same element, we should not forget it" - i highlightElementsUsing: ''. - self assert: (v elements collect: [ :e | e trachelShape color ] as: Set) size equals: 1. -] - -{ #category : #tests } -RTHighlightElementsInViewTest >> testBasic3 [ - - | i | - i := RTHighlightElementsInView new. - self assert: i isNotTransparent. - i transparent. - self deny: i isNotTransparent. -] diff --git a/src/Roassal2/RTHighlightable.class.st b/src/Roassal2/RTHighlightable.class.st deleted file mode 100644 index 37ccd80bb..000000000 --- a/src/Roassal2/RTHighlightable.class.st +++ /dev/null @@ -1,263 +0,0 @@ -" -A RTHighlightable changes color of elements which should be highlighted. - -Example using Mondrian: --=-=-=-=-=-=-=-=-= -b := RTMondrian new. -b view @ RTZoomableView . -b interaction highlightEdges: #dependentClasses. -b shape circle. -b nodes: (Collection withAllSubclasses). -b edges moveBehind; connectToAll: #dependentClasses. -b normalizer normalizeSize: #numberOfMethods; normalizeColor: #numberOfMethods. -b layout force. - -b --=-=-=-=-=-=-=-=-= -" -Class { - #name : #RTHighlightable, - #superclass : #RTAbstractHighlightable, - #instVars : [ - 'color', - 'edgeColor', - 'getConnectedEdgesBlock', - 'getConnectedElementBlock', - 'shouldPushFrontEdges' - ], - #category : #'Roassal2-Interactions' -} - -{ #category : #'reset shape' } -RTHighlightable class >> highlightedColor [ - "Default color for highlighting" - ^ Color blue -] - -{ #category : #visitor } -RTHighlightable >> accept: aVisitor with: args [ - aVisitor visitHightlightableInteraction: self with: args. -] - -{ #category : #accessing } -RTHighlightable >> color [ - "Return the color used for the highlighting" - ^ color -] - -{ #category : #accessing } -RTHighlightable >> color: aColor [ - "Set the color used for the highlighting for the elements" - color := aColor -] - -{ #category : #actions } -RTHighlightable >> doHighlightEdge: anEdge [ - "Highlight a particular element." - "There is duplication of code with #doHighlightElement: Maybe we can avoid this in the future" - self recordElement: anEdge. - anEdge trachelShape allColor: (self highlightEdgeColorFor: anEdge). - shouldPushFrontEdges ifTrue: [ anEdge pushFront ]. - anEdge view ifNotNil: [ anEdge view signalUpdate ]. -] - -{ #category : #actions } -RTHighlightable >> doHighlightElement: anElement [ - "Highlight a particular element." - self recordElement: anElement. - anElement trachelShape color: (self highlightColorFor: anElement). - anElement view ifNotNil: [ anElement view signalUpdate ]. - - "Highlight edges if necessary" - self shouldHighlightEdges ifTrue: [ (getConnectedEdgesBlock rtValue: anElement) do: [ :anEdge | self doHighlightEdge: anEdge ] ] -] - -{ #category : #actions } -RTHighlightable >> doUnhighlightEdge: anEdge [ - "Unhighlight an Edge. - This method works only for edges" - (anEdge attributes includesKey: #originalColor) - ifFalse: [ ^ self ]. - anEdge trachelShape allColor: (anEdge attributes at: #originalColor). - anEdge attributes removeKey: #originalColor. - anEdge view ifNotNil: [ anEdge view signalUpdate ]. - shouldPushFrontEdges ifTrue: [ anEdge pushBack ]. - -] - -{ #category : #actions } -RTHighlightable >> doUnhighlightElement: anElementOrEdge [ - "Unhighlight a particular element. - This method also works for edges" - (anElementOrEdge attributes includesKey: #originalColor) - ifFalse: [ ^ self ]. - anElementOrEdge trachelShape color: (anElementOrEdge attributes at: #originalColor). - anElementOrEdge attributes removeKey: #originalColor. - anElementOrEdge view ifNotNil: [ anElementOrEdge view signalUpdate ]. - - "Highlight edges if necessary" - anElementOrEdge isEdge ifTrue: [ ^ self ]. - self shouldHighlightEdges ifTrue: [ (getConnectedEdgesBlock rtValue: anElementOrEdge) do: [ :anEdge | self doUnhighlightEdge: anEdge ] ] -] - -{ #category : #accessing } -RTHighlightable >> edgeColor [ - "Return a color, or a one-arg block that takes as argument an edge" - ^ edgeColor -] - -{ #category : #accessing } -RTHighlightable >> edgeColor: aColorOrOneArgBlock [ - "Argument can either be a color, or a one argument block, which will take the edge as argument when evaluated. In that case, the block should return a color" - edgeColor := aColorOrOneArgBlock -] - -{ #category : #'public - configuration' } -RTHighlightable >> focusOnIncomingAndOutgoingElements [ - "Recursively highlights elements reaching out incoming edges - - Here is an example: --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -v := RTView new. -es := RTEllipse elementsOn: (1 to: 4). -es @ RTDraggable. -es do: [ :e | e color: Color red ]. -v addAll: es. - -RTEdgeBuilder new - view: v; - shape: (RTArrowedLine new - head: (RTFilledNarrowArrow asHead size: 4; width: 0.5); - width: 0.5; - attachPoint: (RTBorderAttachPoint new offset: 9); - yourself); - moveBehind; - connectFrom: [ :vv | vv - 1 ]. - -es do: [ :anElement | - anElement @ (RTHighlightable new focusOnIncomingAndOutgoingElements; - edgeColor: [ :edge | (edge from == anElement) - ifTrue: [ Color blue ] - ifFalse: [ Color green ] ]; yourself) ]. - - -RTOptimizedForceBasedLayout new on: es. - -v --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - " - - getConnectedEdgesBlock := [ :anElement | anElement outgoingEdges , anElement incomingEdges ]. - self getConnectedElementBlock: [ :e | (getConnectedEdgesBlock rtValue: e) collect: #from ]. - -] - -{ #category : #'public - configuration' } -RTHighlightable >> focusOnIncomingElements [ - "Recursively highlights elements reaching out incoming edges" - getConnectedEdgesBlock := #incomingEdges. - self getConnectedElementBlock: [ :e | (getConnectedEdgesBlock rtValue: e) collect: #from ]. - -] - -{ #category : #'public - configuration' } -RTHighlightable >> focusOnOutgoingElements [ - "Recursively highlights elements reaching out outgoing edges" - getConnectedEdgesBlock := #outgoingEdges. - self getConnectedElementBlock: [ :e | (getConnectedEdgesBlock rtValue: e) collect: #to ]. - -] - -{ #category : #accessing } -RTHighlightable >> getConnectedEdgesBlock [ - ^ getConnectedEdgesBlock -] - -{ #category : #accessing } -RTHighlightable >> getConnectedEdgesBlock: aOneArgBlockOrSymbol [ - "Indicates how to get edges from a particular element, provided as argument to the block or symbol" - getConnectedEdgesBlock := aOneArgBlockOrSymbol -] - -{ #category : #'public - configuration' } -RTHighlightable >> getConnectedElementBlock [ - "Return the one-arg block that is useful to obtained relevant connected nodes" - ^ getConnectedElementBlock -] - -{ #category : #'public - configuration' } -RTHighlightable >> getConnectedElementBlock: aBlockOrSymbol [ - "Set the way connected elements must be obtained. The argument takes one argument, which is the - element from which connected element should be considered." - getConnectedElementBlock := aBlockOrSymbol -] - -{ #category : #actions } -RTHighlightable >> getConnectedElementsFrom: anElement [ - "Return the elements to consider while recursing for a given element" - ^ getConnectedElementBlock rtValue: anElement -] - -{ #category : #utility } -RTHighlightable >> highlightColorFor: anElement [ - "Return the highlight color" - ^ self highlightedColor rtValue: anElement model -] - -{ #category : #actions } -RTHighlightable >> highlightEdgeColorFor: anEdge [ - "Return the highlight color" - ^ edgeColor rtValue: anEdge -] - -{ #category : #'public - configuration' } -RTHighlightable >> highlightedColor [ - ^ color -] - -{ #category : #'public - configuration' } -RTHighlightable >> highlightedColor: aColorOrABlock [ - "Set the Color used to highlight" - color := aColorOrABlock -] - -{ #category : #initialize } -RTHighlightable >> initialize [ - super initialize. - color := self class highlightedColor. - - "Per default, edges should not be highlighted" - edgeColor := nil. - self focusOnOutgoingElements. - shouldPushFrontEdges := false. -] - -{ #category : #'public - configuration' } -RTHighlightable >> pushFrontEdges [ - "Make highlighted edges pushed to front" - shouldPushFrontEdges := true. -] - -{ #category : #actions } -RTHighlightable >> recordElement: anElement [ - (anElement attributes includesKey: #originalColor) ifTrue: [ ^ self ]. - anElement attributes at: #originalColor put: (anElement trachelShape color) - -] - -{ #category : #'public - testing' } -RTHighlightable >> shouldHighlightEdges [ - "Return true if edges should be highlighted" - ^ edgeColor notNil -] - -{ #category : #'public - testing' } -RTHighlightable >> shouldNotHighlightEdges [ - "Return true if edges should not be highlighted" - ^ self shouldHighlightEdges not -] - -{ #category : #'public - testing' } -RTHighlightable >> shouldPushFrontEdges [ - shouldPushFrontEdges := true. -] diff --git a/src/Roassal2/RTHighlightableTest.class.st b/src/Roassal2/RTHighlightableTest.class.st deleted file mode 100644 index f808fb9c0..000000000 --- a/src/Roassal2/RTHighlightableTest.class.st +++ /dev/null @@ -1,235 +0,0 @@ -Class { - #name : #RTHighlightableTest, - #superclass : #RTTest, - #instVars : [ - 'box' - ], - #category : #'Roassal2-Core-Tests' -} - -{ #category : #tests } -RTHighlightableTest >> testArrowedLine [ - | v es previousColor trachelShape head line | - v := RTView new. - es := RTEllipse elementsOn: (1 to: 2). - es @ RTDraggable. - es do: [ :e | e color: Color red ]. - v addAll: es. - RTEdgeBuilder new - view: v; - shape: - (RTArrowedLine new - head: - (RTFilledArrow asHead - size: 60; - width: 1); - width: 1; - attachPoint: (RTBorderAttachPoint new offset: 9); - yourself); - moveBehind; - connectFrom: [ :vv | vv // 2 ]. - es - @ - (RTHighlightable new - edgeColor: Color blue; - yourself). - RTOptimizedForceBasedLayout new on: es. - - trachelShape := v edges anyOne trachelShape. - previousColor := trachelShape color. - head := trachelShape shapes second. - line := trachelShape shapes first. - es first announce: TRMouseEnter new. - self assert: trachelShape color equals: Color blue. - self assert: head color equals: Color blue. - self assert: line color equals: Color blue. - es first announce: TRMouseLeave new. - self assert: trachelShape color equals: previousColor. - self assert: head color equals: previousColor. - self assert: line color equals: previousColor. - - -] - -{ #category : #tests } -RTHighlightableTest >> testBasic [ - box := (RTBox new color: Color green) element. - self assert: (box shape colorFor: box) = Color green. - self assert: box trachelShape color = Color green. - - box @ RTHighlightable. - self assert: (box shape colorFor: box) = Color green. - self assert: box trachelShape color = Color green. - - box announce: TRMouseEnter. - "The Roassal shape remains the same" - self assert: (box shape colorFor: box) = Color green. - self assert: box trachelShape color = RTHighlightable highlightedColor. - - box announce: TRMouseLeave. - self assert: (box shape colorFor: box) = Color green. - self assert: box trachelShape color = Color green. - -] - -{ #category : #tests } -RTHighlightableTest >> testBasicWithSVGShape [ - box := (RTSVGPath new path: 'M 100 100 L 300 100 L 200 300 z'; color: Color green) element. - self assert: (box shape colorFor: box) = Color green. - self assert: box trachelShape color = Color green. - - box @ RTHighlightable. - self assert: (box shape colorFor: box) = Color green. - self assert: box trachelShape color = Color green. - - box announce: TRMouseEnter. - "The Roassal shape remains the same" - self assert: (box shape colorFor: box) = Color green. - self assert: box trachelShape color = RTHighlightable highlightedColor. - - box announce: TRMouseLeave. - self assert: (box shape colorFor: box) = Color green. - self assert: box trachelShape color = Color green. - -] - -{ #category : #tests } -RTHighlightableTest >> testDefaultColor [ - - self assert: RTHighlightable new color equals: RTHighlightable highlightedColor -] - -{ #category : #tests } -RTHighlightableTest >> testHighlightAllSibblings [ - - | v e1 e2 e3 | - v := RTView new. - e1 := (RTBox new color: Color gray) elementOn: 1. - e2 := (RTEllipse new color: Color gray) elementOn: 1. - e3 := (RTBox new color: Color gray) elementOn: 2. - - v add: e1; add: e2; add: e3. - - e1 @ RTHighlightable allSibblings. - self assert: e1 trachelShape color == Color gray. - self assert: e2 trachelShape color == Color gray. - self assert: e3 trachelShape color == Color gray. - - e1 announce: TRMouseEnter. - self assert: e1 trachelShape color ~~ Color gray. - self assert: e2 trachelShape color ~~ Color gray. - self assert: e3 trachelShape color == Color gray. -] - -{ #category : #tests } -RTHighlightableTest >> testHighlightAllSibblings02 [ - - | v e1 e2 e3 | - v := RTView new. - e1 := (RTBox new color: Color gray) element. - e2 := (RTEllipse new color: Color gray) element. - e3 := (RTBox new color: Color gray) element. - - v add: e1; add: e2; add: e3. - - e1 @ RTHighlightable allSibblings. - self assert: e1 trachelShape color == Color gray. - self assert: e2 trachelShape color == Color gray. - self assert: e3 trachelShape color == Color gray. - - e1 announce: TRMouseEnter. - self assert: e1 trachelShape color == Color gray. - self assert: e2 trachelShape color == Color gray. - self assert: e3 trachelShape color == Color gray. -] - -{ #category : #tests } -RTHighlightableTest >> testHighlightMultipleObjects [ - - | elements view originalColor | - elements := RTBox elementsOn: (Array with: 1 with: 2 with: 2). - view := RTView new. - view addAll: elements. - - originalColor := elements first color. - - "Not necessary, but useful when debugging the test" - RTHorizontalLineLayout on: elements. - - elements @ (RTHighlightable highlight: [ :v | Array with: v + 1 ]). - self assert: (elements allSatisfy: [ :e | e trachelShape color = originalColor ]). - - elements first announce: TRMouseEnter new. - self assert: (elements first trachelShape color = originalColor ). - self assert: (elements second trachelShape color = RTHighlightable highlightedColor). - self assert: (elements third trachelShape color = RTHighlightable highlightedColor). - - elements first announce: TRMouseLeave new. - self assert: (elements allSatisfy: [ :e | e trachelShape color = originalColor ]). -] - -{ #category : #tests } -RTHighlightableTest >> testMultipleElements [ - | box1 box2 | - box1 := (RTBox new color: Color green) element. - box2 := (RTBox new color: Color red) element. - - box1 @ (RTHighlightable highlightElements: [ :e | Array with: box2 ]). - box1 announce: TRMouseEnter. - - "The Roassal shape remains the same" - self assert: (box1 shape colorFor: box1) = Color green. - self assert: box1 trachelShape color = Color green. - self assert: box2 trachelShape color = RTHighlightable highlightedColor. - - box1 announce: TRMouseLeave. - self assert: box1 trachelShape color = Color green. - self assert: box2 trachelShape color = Color red -] - -{ #category : #tests } -RTHighlightableTest >> testMultipleElementsDoHighlight [ - | box1 box2 h | - box1 := (RTBox new color: Color green) elementOn: 1. - box2 := (RTBox new color: Color red) elementOn: 2. - - h := RTHighlightable new highlightElements: [ :e | Array with: box2 ]. - h doHighlight: box1. - - "The Roassal shape remains the same" - self assert: (box1 shape colorFor: box1) = Color green. - self assert: box1 trachelShape color = Color green. - self assert: box2 trachelShape color = RTHighlightable highlightedColor. - - h doUnhighlight: box1. - self assert: box1 trachelShape color = Color green. - self assert: box2 trachelShape color = Color red -] - -{ #category : #'tests push edges front' } -RTHighlightableTest >> testPushEdgeFront [ - | b | - b := RTMondrian new. - b interaction highlightEdges: #dependentClasses. - b shape circle. - b nodes: (Collection withAllSubclasses). - b edges moveBehind; connectToAll: #dependentClasses. -" b normalizer normalizeSize: #numberOfMethods; normalizeColor: #numberOfMethods." - b layout force. - b build -] - -{ #category : #tests } -RTHighlightableTest >> testSetColor [ - - | i | - i := RTHighlightable new. - i color: Color red. - self assert: Color red equals: i color -] - -{ #category : #tests } -RTHighlightableTest >> testhighlightElements [ - - self assert: RTHighlightable new highlightElements notNil -] diff --git a/src/Roassal2/RTHighlightableWithCursor.class.st b/src/Roassal2/RTHighlightableWithCursor.class.st deleted file mode 100644 index 9a58b6fa4..000000000 --- a/src/Roassal2/RTHighlightableWithCursor.class.st +++ /dev/null @@ -1,59 +0,0 @@ -" -Highlight to indicates that some interaction be can done. It changes the cursor aspect - -E.g., - --=-=-= -| b | -b := RTUMLClassBuilder new - instanceVariables: #instVarNames; - methodselector: #selector; - methodsNames: #rtmethods; - attributeselector: #yourself. -b attributeShape color: Color black. -b methodShape color: Color black. -b classNameShape color: Color black. -b lineShape color: Color black. -b boxShape borderColor: Color black. - -b addObjects: (Collection withAllSubclasses ). -b layout tree. - -b build. - -b view elements @ RTHighlightableWithCursor. -^b view --=-=-= - --=-=-= -b := RTMondrian new. -b shape circle size: 10. -b interaction showEdge - connectToAll: #subclasses. - -b interaction showLabel - highlightObjects: #subclasses. - - -nodes := b nodes: (Collection withAllSubclasses). -nodes @ RTHighlightableWithCursor. -b edges moveBehind; connectFrom: #superclass. -b layout radial. -b --=-=-= -" -Class { - #name : #RTHighlightableWithCursor, - #superclass : #RTAbstractHighlightable, - #category : #'Roassal2-Interactions' -} - -{ #category : #actions } -RTHighlightableWithCursor >> doHighlightElement: anElement [ - TRPlatform current showTemporaryCursor: Cursor webLink -] - -{ #category : #actions } -RTHighlightableWithCursor >> doUnhighlightElement: anElement [ - TRPlatform current showTemporaryCursor: nil -] diff --git a/src/Roassal2/RTHighlighterBuilder.class.st b/src/Roassal2/RTHighlighterBuilder.class.st deleted file mode 100644 index 0fc1adbe5..000000000 --- a/src/Roassal2/RTHighlighterBuilder.class.st +++ /dev/null @@ -1,230 +0,0 @@ -" -I am a builder that add a widget to a view. The widget can be configured to give names and conditions. When the mouse goes above a name, elements contained in the view that match the condition are highlighted. - -Here is an example: --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -b := RTMondrian new. -b shape circle. -b nodes: Collection withAllSubclasses. -b edges connectFrom: #superclass. -b layout tree. -b normalizer normalizeSize: #numberOfMethods using: #sqrt. -b build. - - hb := RTHighlighterBuilder new. - hb view: b view. - hb filter: [ :obj | obj isBehavior ]. - hb addEntry: [ :cls | '*Array*' match: cls name ] named: 'Array'. - hb addEntry: [ :cls | '*Set*' match: cls name ] named: 'Set'. - hb addEntry: [ :cls | '*Hash*' match: cls name ] named: 'Hash'. - hb addEntry: [ :cls | '*Dictionary*' match: cls name ] named: 'Dictionary'. - hb build. - -b view --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - -Another example: --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -b := RTMondrian new. -b shape circle. -b nodes: Collection withAllSubclasses. -b edges connectFrom: #superclass. -b layout tree. -b normalizer normalizeSize: #numberOfMethods using: #sqrt. -b build. - - hb := RTHighlighterBuilder new. - hb view: b view. - hb highlightColor: Color white. - hb filter: [ :obj | obj isBehavior ]. - hb addEntry: [ :cls | '*Array*' match: cls name ] named: 'Hide Array'. - hb build. - -b view --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - -Fading is also supported: --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -b := RTMondrian new. -b nodes: (1 to: 10). -b normalizer normalizeSize: #yourself. -b build. - - hb := RTHighlighterBuilder new. - hb view: b view. - hb highlightColor: [ :nb | Color r: nb / 10 g: 0 b: 0 ]. - hb filter: [ :obj | obj isNumber ]. - hb addEntry: [ :number | true ] named: 'Red' highlightColor: [ :nb | Color r: nb / 10 g: 0 b: 0 ]. - hb addEntry: [ :number | true ] named: 'Green' highlightColor: [ :nb | Color r: 0 g: nb / 10 b: 0 ]. - - hb build. - -b view. --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -" -Class { - #name : #RTHighlighterBuilder, - #superclass : #RTBuilder, - #instVars : [ - 'entries', - 'fontSize', - 'filterModel', - 'filterElement', - 'highlightColor' - ], - #category : #'Roassal2-Builder-Highlighter' -} - -{ #category : #public } -RTHighlighterBuilder >> addEntry: aOneArgBlock named: aName [ - "Add an entry to the highlihter. The first argument is a condition, applied on each element of a view (after been filtered). - aName is the name that appears in the widget" - self addEntry: aOneArgBlock named: aName highlightColor: highlightColor -] - -{ #category : #public } -RTHighlighterBuilder >> addEntry: aOneArgBlock named: aName highlightColor: anotherOneArgBlock [ - "Add an entry to the highlihter. The first argument is a condition, applied on each element of a view (after been filtered). - aName is the name that appears in the widget" - self addEntry: aOneArgBlock named: aName highlightColor: anotherOneArgBlock defaultColor: nil -] - -{ #category : #public } -RTHighlighterBuilder >> addEntry: aOneArgBlock named: aName highlightColor: anotherOneArgBlock defaultColor: aThirdOneArgBlock [ - "Add an entry to the highlihter. - The first argument is a condition, applied on each element of a view (after been filtered). - aName is the name that appears in the widget - anotherOneArgBlock is used to get the color for each element that has to be highlighted - aThirdOneArgBlock is used to color the elements that do not match the condiction (first argument). Could be nil - " - entries add: (Array with: aOneArgBlock with: aName with: anotherOneArgBlock with: aThirdOneArgBlock) -] - -{ #category : #private } -RTHighlighterBuilder >> createLabelFor: entry in: aView [ - "entry is { aBlock . label . colorBlock} and aView is the view where elements have to be searched" - - | h el hMenuEntry | - - hMenuEntry := RTHighlightable new. - - h := RTHighlightable new. - h color: highlightColor. - h edgeColor: highlightColor. - - "We create the text name entry in the widget" - el := RTLabel new height: fontSize; elementOn: entry second. - el @ hMenuEntry. - el - when: TRMouseEnter - do: [ :evt | - (self selectElements: entry first in: aView) - do: [ :anElementToHighlight | h color: (entry third rtValue: anElementToHighlight model); doHighlightElement: anElementToHighlight ]. - - entry fourth ifNotNil: [ - (self selectElements: [:ee | (entry first rtValue: ee) not ] in: aView) - do: [ :anElementToHighlight | h color: (entry fourth rtValue: anElementToHighlight model); doHighlightElement: anElementToHighlight ] ] - ]. - el - when: TRMouseLeave - do: [ :evt | - (self selectElements: entry first in: aView) - do: - [ :anElementToHighlight | h doUnhighlightElement: anElementToHighlight ]. - - entry fourth ifNotNil: [ - (self selectElements: [:ee | (entry first rtValue: ee) not ] in: aView) - do: [ :anElementToHighlight | h doUnhighlightElement: anElementToHighlight ] ] - ]. - ^ el -] - -{ #category : #accessing } -RTHighlighterBuilder >> filter [ - "Return the filter used to apply the entries for the models. Initialized to true per default" - ^ filterModel -] - -{ #category : #accessing } -RTHighlighterBuilder >> filter: aOneArgBlock [ - "Set the filter of the highlighter for the models. Could be for example [ :obj | obj class == Color ]. - In that case, all the entries will be applied to the Color contained in the view" - filterModel := aOneArgBlock -] - -{ #category : #accessing } -RTHighlighterBuilder >> filterElement [ - "Return the filter of the highlighter for elements. Could be for example [ :roassalElement | roassalElement shape class == RTLabel ]." - ^ filterElement -] - -{ #category : #accessing } -RTHighlighterBuilder >> filterElement: aOneArgBlock [ - "Set the filter of the highlighter for the elements. Could be for example [ :roassalElement | roassalElement shape class == RTLabel ]." - filterElement := aOneArgBlock -] - -{ #category : #accessing } -RTHighlighterBuilder >> fontSize [ - "Return the font size used in the builder to add labels" - ^ fontSize -] - -{ #category : #accessing } -RTHighlighterBuilder >> fontSize: fontSizeAsInteger [ - "Set the font size used in the builder for the label" - fontSize := fontSizeAsInteger -] - -{ #category : #accessing } -RTHighlighterBuilder >> highlightColor [ - "Return the color to use for the highlight" - ^ highlightColor -] - -{ #category : #accessing } -RTHighlighterBuilder >> highlightColor: aValueOrOneArgBlock [ - "Set the color to use for the highlight" - highlightColor := aValueOrOneArgBlock -] - -{ #category : #initialization } -RTHighlighterBuilder >> initialize [ - super initialize. - entries := OrderedCollection new. - filterModel := true. - filterElement := true. - fontSize := RTLabel defaultFontSize. - highlightColor := Color red. -] - -{ #category : #initialization } -RTHighlighterBuilder >> numberOfEntries [ - "Return the number of entries" - ^ entries size -] - -{ #category : #hooks } -RTHighlighterBuilder >> renderIn: aView [ - | g el | - g := RTGroup new. - entries - do: [ :entry | - "entry is aBlock->label" - el := self createLabelFor: entry in: aView. - g add: el ]. - RTHorizontalLineLayout new - alignCenter; - on: g. - TRConstraint move: g below: aView elements. - aView addAll: g. - ^ g -] - -{ #category : #private } -RTHighlighterBuilder >> selectElements: condition in: aView [ - "Return a list of elements based on the entry" - ^ aView elements - select: - [ :ee | (filterModel rtValue: ee model) and: [ (filterElement rtValue: ee) and: [ condition rtValue: ee model ] ] ] -] diff --git a/src/Roassal2/RTHighlighterBuilderTest.class.st b/src/Roassal2/RTHighlighterBuilderTest.class.st deleted file mode 100644 index b01ad72d4..000000000 --- a/src/Roassal2/RTHighlighterBuilderTest.class.st +++ /dev/null @@ -1,173 +0,0 @@ -" -Test the class RTHighlitherBuilder -" -Class { - #name : #RTHighlighterBuilderTest, - #superclass : #RTTest, - #category : #'Roassal2-Builder-Highlighter' -} - -{ #category : #tests } -RTHighlighterBuilderTest >> testBasic [ - - | hb | - hb := RTHighlighterBuilder new. - self assert: hb view notNil. - self assert: hb numberOfEntries equals: 0. - self assert: hb filter equals: true. - self assert: hb fontSize equals: RTLabel defaultFontSize -] - -{ #category : #tests } -RTHighlighterBuilderTest >> testFading [ - -| b hb el | -b := RTMondrian new. -b nodes: (1 to: 10). -b normalizer normalizeSize: #yourself. -b build. - - hb := RTHighlighterBuilder new. - hb view: b view. - hb highlightColor: [ :nb | Color r: nb / 10 g: 0 b: 0 ]. - hb filter: [ :obj | obj isNumber ]. - hb addEntry: [ :number | true ] named: 'Highlight'. - - hb build. - -b view. - - el := b view elementFromModel: 'Highlight'. - el announce: TRMouseEnter. -] - -{ #category : #tests } -RTHighlighterBuilderTest >> testFading2 [ - -| b hb el | -b := RTMondrian new. -b nodes: (1 to: 10). -b normalizer normalizeSize: #yourself. -b build. - - hb := RTHighlighterBuilder new. - hb view: b view. - hb filter: [ :obj | obj isNumber ]. - hb addEntry: [ :number | true ] named: 'Highlight' highlightColor: [ :nb | Color r: nb / 10 g: 0 b: 0 ]. - - hb build. - -b view. - - el := b view elementFromModel: 'Highlight'. - el announce: TRMouseEnter. -] - -{ #category : #tests } -RTHighlighterBuilderTest >> testFadingAndDefaultColor [ - -| b hb el | -b := RTMondrian new. -b nodes: (1 to: 10). -b normalizer normalizeSize: #yourself. -b build. - - hb := RTHighlighterBuilder new. - hb view: b view. - hb filter: [ :obj | obj isNumber ]. - hb addEntry: [ :number | number < 5 ] named: '<5' highlightColor: [ :nb | Color r: nb / 10 g: 0.8 b: 0.8 ]. - - hb addEntry: [ :number | number > 5 ] named: '>5' highlightColor: [ :nb | Color r: nb / 10 g: 0.8 b: 0.8 ] defaultColor: Color black. - - hb build. - -b view. - - el := b view elementFromModel: '<5'. - el announce: TRMouseEnter. - - el := b view elementFromModel: '>5'. - el announce: TRMouseEnter. -] - -{ #category : #tests } -RTHighlighterBuilderTest >> testHighlightCompositeShape [ - - | v s e hb originalColorLabel originalColorBox | - v := RTView new. - s := RTCompositeShape new. - s add: RTLabel new. - s add: RTBox new. - e := s element. - v add: e. - - hb := RTHighlighterBuilder new. - hb view: v. - hb addEntry: #isNil named: 'isNil'. - hb build. - - originalColorLabel := e trachelShape shapes first color. - originalColorBox := e trachelShape shapes second color. - - (v elementFromModel: 'isNil') announce: TRMouseEnter. - self assert: e trachelShape shapes first color ~= originalColorLabel. - self assert: e trachelShape shapes second color == originalColorBox. -] - -{ #category : #tests } -RTHighlighterBuilderTest >> testHighlightCompositeShape2 [ - - | v s e hb originalColorLabel originalColorBox | - v := RTView new. - s := RTCompositeShape new. - s add: RTBox new. - s add: RTLabel new. - e := s element. - v add: e. - - hb := RTHighlighterBuilder new. - hb view: v. - hb addEntry: #isNil named: 'isNil'. - hb build. - - originalColorBox := e trachelShape shapes first color. - originalColorLabel := e trachelShape shapes second color. - - (v elementFromModel: 'isNil') announce: TRMouseEnter. - self assert: e trachelShape shapes first color ~= originalColorBox. - self assert: e trachelShape shapes second color == originalColorLabel. -] - -{ #category : #tests } -RTHighlighterBuilderTest >> testSmallExample [ - | b hb highlighterElement el originalColor | - b := RTMondrian new. - b shape circle. - b nodes: Collection withAllSubclasses. - b edges connectFrom: #superclass. - b layout tree. - b normalizer normalizeSize: #numberOfMethods using: #sqrt. - b build. - - hb := RTHighlighterBuilder new. - hb filter: [ :obj | obj isBehavior ]. - hb view: b view. - hb addEntry: [ :cls | '*Array*' match: cls name ] named: 'Array'. - hb addEntry: [ :cls | '*Set*' match: cls name ] named: 'Set'. - hb addEntry: [ :cls | '*Hash*' match: cls name ] named: 'Hash'. - hb addEntry: [ :cls | '*Dictionary*' match: cls name ] named: 'Dictionary'. - hb build. - - "Check the number of entries" - self assert: hb numberOfEntries equals: 4. - - "Check whether the highlight works properly" - highlighterElement := b view elementFromModel: 'Array'. - el := b view elementFromModel: Array. - originalColor := el trachelShape color. - highlighterElement announce: TRMouseEnter. - self assert: originalColor ~= el trachelShape color. - highlighterElement announce: TRMouseLeave. - self assert: originalColor equals: el trachelShape color. - -] diff --git a/src/Roassal2/RTHistogramSet.class.st b/src/Roassal2/RTHistogramSet.class.st deleted file mode 100644 index 8e3bc2a07..000000000 --- a/src/Roassal2/RTHistogramSet.class.st +++ /dev/null @@ -1,92 +0,0 @@ -" -The histogram gives you a distribution frequency over the points given. Frequency on y and a collection of values per bars on x. -" -Class { - #name : #RTHistogramSet, - #superclass : #RTAbstractStackedDataSet, - #instVars : [ - 'metric', - 'nbOfIntervals', - 'distribution' - ], - #category : #'Roassal2-Builder-Grapher-Core' -} - -{ #category : #hooks } -RTHistogramSet >> addedInBuilder: aBuilder [ - "Really ugly method. This will be fixed soon!" - - super addedInBuilder: aBuilder. - - distribution on: self points; metric: x. - - ((self points first isKindOf: Number) not & (x = #yourself )) ifTrue: [ - distribution metric: nil. - ]. - - self points: (distribution annotatedFrequencyWithAmountOfIntervals: (self nbOfIntervals rtValue: points)). - - self y: #first. - - self barShape width: builder extent x / self points size. - - builder axisX noTick; noLabel. - - -] - -{ #category : #public } -RTHistogramSet >> barShape [ - ^ histogramBuilder -] - -{ #category : #initialization } -RTHistogramSet >> defaultDistribution [ - self distribution: RTDistribution new. -] - -{ #category : #initialization } -RTHistogramSet >> defaultNbOfIntervals [ - self nbOfIntervals: [ :vls | (vls size) log * 3.3 + 1 ]. -] - -{ #category : #initialization } -RTHistogramSet >> distribution [ - ^ distribution. -] - -{ #category : #initialization } -RTHistogramSet >> distribution: aDistributionInstance [ - distribution := aDistributionInstance. -] - -{ #category : #initialization } -RTHistogramSet >> initialize [ - super initialize. - self metric: #yourself. - self defaultNbOfIntervals. - self defaultDistribution -] - -{ #category : #accessing } -RTHistogramSet >> metric: aMetricAsBlockOrSymbol [ - - metric := aMetricAsBlockOrSymbol. -] - -{ #category : #hooks } -RTHistogramSet >> nbOfIntervals [ - ^ nbOfIntervals -] - -{ #category : #hooks } -RTHistogramSet >> nbOfIntervals: aNumberOfBlock [ - nbOfIntervals := aNumberOfBlock - -] - -{ #category : #hooks } -RTHistogramSet >> renderIn: aView [ - self adjustMinAndMaxValues. - self renderBarChartIn: aView -] diff --git a/src/Roassal2/RTHorizontalAllValuesDecorator.class.st b/src/Roassal2/RTHorizontalAllValuesDecorator.class.st deleted file mode 100644 index 34647f785..000000000 --- a/src/Roassal2/RTHorizontalAllValuesDecorator.class.st +++ /dev/null @@ -1,12 +0,0 @@ -Class { - #name : #RTHorizontalAllValuesDecorator, - #superclass : #RTAbstractHorizontalValuesDecorator, - #category : #'Roassal2-Builder-Grapher-Decorators' -} - -{ #category : #rendering } -RTHorizontalAllValuesDecorator >> render [ - self addAll: self datasetValuesX asSet. - super render. - -] diff --git a/src/Roassal2/RTHorizontalAttachPoint.class.st b/src/Roassal2/RTHorizontalAttachPoint.class.st deleted file mode 100644 index 5c75bd3a0..000000000 --- a/src/Roassal2/RTHorizontalAttachPoint.class.st +++ /dev/null @@ -1,37 +0,0 @@ -" -Horizontal attach points between elements when drawing lines. Useful for horizontal tree layout. - --=-=-= -v := RTView new. - -e1 := (RTBox new size: 50) elementOn: 1. -e2 := (RTEllipse new size: 50) elementOn: 2. -v add: e1; add: e2. -e2 translateBy: 30 @ 60. - -e1 @ RTDraggable. -e2 @ RTDraggable. - -s := RTArrowedLine new color: Color black. -s attachPoint: RTHorizontalAttachPoint new. -l := s edgeFrom: e1 to: e2. -v add: l. - -v --=-=-= -" -Class { - #name : #RTHorizontalAttachPoint, - #superclass : #RTAttachPoint, - #category : #'Roassal2-AttachPoint' -} - -{ #category : #'public - hooks' } -RTHorizontalAttachPoint >> basicEndingPointOf: aRTEdge [ - ^ aRTEdge to encompassingRectangle leftCenter -] - -{ #category : #'public - hooks' } -RTHorizontalAttachPoint >> basicStartingPointOf: aRTEdge [ - ^ aRTEdge from encompassingRectangle rightCenter -] diff --git a/src/Roassal2/RTHorizontalAverageDecorator.class.st b/src/Roassal2/RTHorizontalAverageDecorator.class.st deleted file mode 100644 index 76f2b5536..000000000 --- a/src/Roassal2/RTHorizontalAverageDecorator.class.st +++ /dev/null @@ -1,34 +0,0 @@ -" -RTHorizontalAverageDecorator is a decorator that indicates the average of a set of values. - -Consider the following example: - --=-=-=-= -b := RTGrapher new. -ds := RTDataSet new. -ds dotShape color: Color red. -ds points: #(5 1 20 8). -b add: ds. -b addDecorator: (RTHorizontalAverageDecorator new withLabel; labelConvertion: [ :aValue | 'average = ', aValue asFloat asString ]). -b. --=-=-=-= -" -Class { - #name : #RTHorizontalAverageDecorator, - #superclass : #RTAbstractAverageDecorator, - #category : #'Roassal2-Builder-Grapher-Decorators' -} - -{ #category : #'drawing-hooks' } -RTHorizontalAverageDecorator >> render [ - | values average from to | - values := self datasetValuesX. - average := values average. - from := builder getPixelPositionOf: average @ builder minY. - to := builder getPixelPositionOf: average @ builder maxY. - self lineFrom: from to: to. - - shouldHaveLabel ifTrue: [ - self label: ((labelBlock rtValue: average) asString) above: to. - ] -] diff --git a/src/Roassal2/RTHorizontalData.class.st b/src/Roassal2/RTHorizontalData.class.st deleted file mode 100644 index 3f4dc0ad8..000000000 --- a/src/Roassal2/RTHorizontalData.class.st +++ /dev/null @@ -1,117 +0,0 @@ -" -RTData renders bars and dots in vertical way -" -Class { - #name : #RTHorizontalData, - #superclass : #RTData, - #category : #'Roassal2-Builder-Grapher-Core' -} - -{ #category : #hooks } -RTHorizontalData >> addedInBuilder: aBuilder [ - self builder: aBuilder. - builder shouldUseNiceLabelsForY: false. -] - -{ #category : #initialization } -RTHorizontalData >> initialize [ - super initialize. - self stack. - self x: #yourself. -] - -{ #category : #testing } -RTHorizontalData >> isStacked [ - "Return true if the data is stacked" - ^ self getValuesY = (1 to: self numberOfPoints) -] - -{ #category : #rendering } -RTHorizontalData >> renderBarChartIn: aView [ - | centralDot positiveElements negativeElements | - centralDot := self centralDot. - elements := barBuilder elementsOn: self points. - aView addAll: elements. - interaction setUpElements: elements. - RTMetricNormalizer new - elements: elements; - normalizeElementY: [ :anElement | y rtValue: anElement ] - min: 0 - max: builder extent y negated - minValue: (yScale rtValue: minY) - maxValue: (yScale rtValue: maxY) - using: xScale. - positiveElements := OrderedCollection new. - negativeElements := OrderedCollection new. - elements do: [ :el | - ((x rtValue: el) >= 0 - ifTrue: [ positiveElements ] - ifFalse: [ negativeElements ]) add: el ]. - "positive elements" - positiveElements ifNotEmpty: [ - RTMetricNormalizer new - elements: positiveElements; - normalizeElementWidth: [ :el | x rtValue: el ] - min: 0 - max: builder extent x - centralDot position x - minValue: 0 - maxValue: (xScale rtValue: maxX) - using: xScale. - RTAlignment new elements: positiveElements; fixedElement: centralDot; left]. - - "negative elements" - negativeElements ifNotEmpty: [ - RTMetricNormalizer new - elements: negativeElements; - normalizeElementWidth: [ :el | x rtValue: el ] - min: centralDot position x - max: 0 - minValue: (xScale rtValue: minX) - maxValue: 0 - using: xScale. - RTAlignment new elements: negativeElements; fixedElement: centralDot; right ]. - - self executeUserDeclaredActions. - -] - -{ #category : #rendering } -RTHorizontalData >> renderDotAndLinesIn: aView [ - - aView addAll: elements. - interaction setUpElements: elements. - RTMetricNormalizer new - elements: elements; - normalizeElementY: [ :el | y rtValue: el ] - min: 0 - max: builder extent y negated - minValue: (yScale rtValue: minY) - maxValue: (yScale rtValue: maxY) - using: yScale. - RTMetricNormalizer new - elements: elements; - normalizeElementX: [ :el | x rtValue: el ] - min: 0 - max: builder extent x - minValue: (xScale rtValue: minX) - maxValue: (xScale rtValue: maxX) - using: yScale. - self renderLinesFor: elements in: aView. - self executeUserDeclaredActions. -] - -{ #category : #hooks } -RTHorizontalData >> resetShapeBuilderForBar [ - barBuilder := RTShapeBuilder new. - barBuilder rectangle. - - "Default height that compute an appropriate height" - barBuilder height: [ :object | - (builder extent y / (self numberOfPoints * 2)) asFloat ] -] - -{ #category : #'public - configuration' } -RTHorizontalData >> stack [ - "Make all the elements from bottom to top" - self yElement: [ :anElement | elements indexOf: anElement ] -] diff --git a/src/Roassal2/RTHorizontalDominanceTreeLayout.class.st b/src/Roassal2/RTHorizontalDominanceTreeLayout.class.st deleted file mode 100644 index d51652f39..000000000 --- a/src/Roassal2/RTHorizontalDominanceTreeLayout.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #RTHorizontalDominanceTreeLayout, - #superclass : #RTAbstractHorizontalTreeLayout, - #category : #'Roassal2-Layouts' -} - -{ #category : #'hook-private' } -RTHorizontalDominanceTreeLayout >> computeChildrenFor: aNode [ - ^ self childrenWithHighestNestingLevelFor: aNode -] diff --git a/src/Roassal2/RTHorizontalDraggableView.class.st b/src/Roassal2/RTHorizontalDraggableView.class.st deleted file mode 100644 index 1dedaf56e..000000000 --- a/src/Roassal2/RTHorizontalDraggableView.class.st +++ /dev/null @@ -1,31 +0,0 @@ -" -I am an interaction to translate the view as my parent. -The difference is that I only allow horizontal translations -" -Class { - #name : #RTHorizontalDraggableView, - #superclass : #RTConstrainedDraggableView, - #category : #'Roassal2-Interactions' -} - -{ #category : #initialize } -RTHorizontalDraggableView >> initialize [ - - super initialize. - self constraint: [ :aView :point | - | p | - p := aView canvas camera position. - "We go to the right" - (point x > 0) - ifTrue: [ - (aView elements anySatisfy: [ :e | - e position x > p x ]) - ifTrue: [ point x @ 0 ] ifFalse: [ 0 @ 0 ] ] - ifFalse: [ - (aView elements anySatisfy: [ :e | - e position x < p x ]) - ifTrue: [ point x @ 0 ] ifFalse: [ 0 @ 0 ] ] - - - ] -] diff --git a/src/Roassal2/RTHorizontalFlowLayout.class.st b/src/Roassal2/RTHorizontalFlowLayout.class.st deleted file mode 100644 index bb7cf3a00..000000000 --- a/src/Roassal2/RTHorizontalFlowLayout.class.st +++ /dev/null @@ -1,79 +0,0 @@ -" -A RTHorizontalFlowLayout is a FlowLayout horizontaly arranged, right queued at default. - -" -Class { - #name : #RTHorizontalFlowLayout, - #superclass : #RTAbstractFlowLayout, - #category : #'Roassal2-Layouts' -} - -{ #category : #hook } -RTHorizontalFlowLayout >> doExecute: elements [ - | x y maxLastLineWidth nextElement maxNextLineWidth| - x := self gapSize. - y := self gapSize. - maxLastLineWidth := 0. - maxNextLineWidth := 0. - - elements do: - [ :anElement | - - (anElement = elements last) ifFalse: [nextElement := (elements after: anElement)] ifTrue: [nextElement := anElement]. - - self isAlignBottom ifTrue: [ - translator translate: anElement to: ((x @ y) + ((anElement width / -2) @ (anElement height / 2))). - y := y + anElement height + (self gapSize). - ((y > (self maxWidth rtValue: elements)) | ((y + nextElement height) > (self maxWidth rtValue: elements) ))ifTrue: - [ y := self gapSize. - maxNextLineWidth := self maxNextLineWidthFrom: nextElement for: elements. - x := x + (1 * self gapSize) + maxNextLineWidth. - maxNextLineWidth := 0. - maxLastLineWidth := 0. - ] - ]. - - self isAlignCenter ifTrue: [ - translator translate: anElement to: ((x @ y) + (0 @ (anElement width / 2))). - y := y + anElement height + (self gapSize). - maxLastLineWidth := maxLastLineWidth max: (anElement width). - ((y > (self maxWidth rtValue: elements)) | ((y + nextElement height) > (self maxWidth rtValue: elements) ))ifTrue: - [ y := self gapSize. - maxNextLineWidth := self maxNextLineWidthFrom: nextElement for: elements. - x := x + (self gapSize) + (maxNextLineWidth /2) + (maxLastLineWidth /2). - maxNextLineWidth := 0. - maxLastLineWidth := 0. - ] - ]. - - self isAlignTop ifTrue: [ - translator translateTopLeftOf: anElement to: x @ y. - y := y + anElement height + (self gapSize). - maxLastLineWidth := maxLastLineWidth max: (anElement width ). - ((y > (self maxWidth rtValue: elements)) | ((y + nextElement height) > (self maxWidth rtValue: elements) ))ifTrue: - [ y := self gapSize. - x := x + (self gapSize) + maxLastLineWidth. - maxLastLineWidth := 0 ] - ]. - ]. -] - -{ #category : #'initialize-release' } -RTHorizontalFlowLayout >> initialize [ - super initialize. - self alignTop. -] - -{ #category : #utility } -RTHorizontalFlowLayout >> maxNextLineWidthFrom: ele for: elements [ - | nextLineY maxNextLineWidth anElement | - anElement := ele. - maxNextLineWidth := 0. - nextLineY := self gapSize. - [ nextLineY < (self maxWidth rtValue: elements) ] whileTrue: [ - nextLineY := nextLineY + (self gapSize) + (anElement height). - maxNextLineWidth := maxNextLineWidth max: (anElement width). - (anElement = elements last) ifFalse: [anElement := (elements after: anElement)] - ]. - ^ maxNextLineWidth -] diff --git a/src/Roassal2/RTHorizontalLineDecorator.class.st b/src/Roassal2/RTHorizontalLineDecorator.class.st deleted file mode 100644 index a3f13c57e..000000000 --- a/src/Roassal2/RTHorizontalLineDecorator.class.st +++ /dev/null @@ -1,44 +0,0 @@ -" -Add horizontal lines for some values - --=-=-=-=-= - | b ds p | - b := RTGrapher new. - - ds := RTDataSet new. - ds points: #( 0 1 2 10). - - b add: ds. - - b minY: -3.33. - - p := RTHorizontalLineDecorator new. - p add: 5; add: 7; add: 3.34. - p shape line color: (Color red alpha: 0.3). - b addDecorator: p. - - p := RTVerticalLineDecorator new. - p add: 5. - p shape line color: (Color blue alpha: 0.3). - b addDecorator: p. - - b build. - ^ b view --=-=-=-=-= -" -Class { - #name : #RTHorizontalLineDecorator, - #superclass : #RTAbstractLineDecorator, - #category : #'Roassal2-Builder-Grapher-Decorators' -} - -{ #category : #drawing } -RTHorizontalLineDecorator >> render [ - | from to | - values do: [ :aValue | - from := builder getPixelPositionOf: builder minX @ aValue. - to := builder getPixelPositionOf: builder maxX @ aValue. - self lineFrom: from to: to ] - - -] diff --git a/src/Roassal2/RTHorizontalLineLayout.class.st b/src/Roassal2/RTHorizontalLineLayout.class.st deleted file mode 100644 index bc3ce2d53..000000000 --- a/src/Roassal2/RTHorizontalLineLayout.class.st +++ /dev/null @@ -1,100 +0,0 @@ -" -A RTHorizontalLineLayout locates all the elements horizontally -" -Class { - #name : #RTHorizontalLineLayout, - #superclass : #RTAbstractLineLayout, - #category : #'Roassal2-Layouts' -} - -{ #category : #hook } -RTHorizontalLineLayout >> deltaFor: aNodeFigure [ - - | delta | - delta := 0. - self alignment == #bottom ifTrue: [delta := aNodeFigure height]. - self alignment == #center ifTrue: [delta := aNodeFigure height / 2.0]. - ^0 @ delta -] - -{ #category : #hook } -RTHorizontalLineLayout >> doCenter: elements [ - - | midTallest step | - midTallest := 0. - midTallest := elements nodes - inject: 0 - into: [ :m :el | m max: (el bounds height )]. - midTallest := midTallest / 2. - elements nodes do: [ :node | - step := 0 @ (midTallest - (node bounds height / 2)) asInteger. - node bounds origin: (node bounds origin + step). - node bounds corner: (node bounds corner + step). - ] - -] - -{ #category : #hook } -RTHorizontalLineLayout >> doStretchHorizontal: aCollectionOfElements [ - - | parent parentBounds addedWidth parentBoundsWidth runningIndex newWidth | - - aCollectionOfElements isEmpty ifTrue: [ ^ self "nothing to do" ]. - parent := aCollectionOfElements anyOne parent. - parent isView ifTrue: [ ^ self "ROView does not have bounds" ]. - parentBounds := parent bounds. - - addedWidth := aCollectionOfElements - inject: 0 - into: [ :m :el | m + el width ]. - - parentBoundsWidth := parentBounds width. -" parentBoundsWidth := parentBoundsWidth - ((aCollectionOfElements size - 1) * horizontalGap) - (2 * horizontalOutGap)." - - - runningIndex := 0. - parentBounds width > addedWidth - ifTrue: [ aCollectionOfElements do: [ :element | - newWidth := (element width * parentBoundsWidth / addedWidth) asInteger. - element width: newWidth. - runningIndex := runningIndex + newWidth + horizontalGap ] ] -] - -{ #category : #hook } -RTHorizontalLineLayout >> doStretchVertical: aCollectionOfElements [ - - | parent parentBounds | - aCollectionOfElements isEmpty ifTrue: [ ^ self "nothing to do" ]. - parent := aCollectionOfElements anyOne parent. - parent isView ifTrue: [ ^ self "ROView does not have bounds" ]. - parentBounds := parent bounds. - - aCollectionOfElements do: [ :element | - element height: (parentBounds height) ] -] - -{ #category : #'initialize-release' } -RTHorizontalLineLayout >> initialize [ - - super initialize. - self alignTop -] - -{ #category : #hook } -RTHorizontalLineLayout >> movePointer: pointer accordingToFigure: element [ - - ^ (pointer x + element width + self horizontalGap) @ pointer y -] - -{ #category : #hook } -RTHorizontalLineLayout >> positionOriginalPointer: elements [ - | maxHeight delta | - delta := 0. - self alignment == #bottom ifTrue: - [ maxHeight := elements maxValue: #height. - delta := maxHeight ]. - self alignment == #center ifTrue: - [ maxHeight := elements maxValue: #height. - delta := maxHeight / 2.0 ]. - ^ (0) @ ((0) + delta) -] diff --git a/src/Roassal2/RTHorizontalMultipleData.class.st b/src/Roassal2/RTHorizontalMultipleData.class.st deleted file mode 100644 index 75aad7433..000000000 --- a/src/Roassal2/RTHorizontalMultipleData.class.st +++ /dev/null @@ -1,82 +0,0 @@ -" -RTHorizontalMultipleData handles multiple metrics per data points. It is rendered using bar chart. - -[[[ -| b d | -b := RTGrapher new. - -d := RTHorizontalMultipleData new. -d barShape color: Color blue. -d points: #( #('hello' 1 2 1) #('world' 2 4 2) #('bonjour' 3 5 4) #('Gutten Morgen' -1 4 -5)). -d addMetric: #second. -d addMetric: #third. -d addMetric: #fourth. - -""d barChartWithBarCenteredTitle: #first."" -d barChartWithBarTitle: #first rotation: -30. - -b add: d. - -b - ]]] -" -Class { - #name : #RTHorizontalMultipleData, - #superclass : #RTAbstractMultipleData, - #category : #'Roassal2-Builder-Grapher-Core' -} - -{ #category : #rendering } -RTHorizontalMultipleData >> renderIn: aView [ - - "We need to do the layout here" - - | centralDot positiveElements negativeElements | - centralDot := self centralDot. - - RTMetricNormalizer new - elements: elements; - normalizeElementX: [ :anElement | x rtValue: anElement ] - min: 0 - max: builder extent x - minValue: minX - maxValue: maxX + 1. - "We have 'maxX + 1' because we do not want the last bar on the extremity of the X-Axis" - - "We treat the element with a positive value" - positiveElements := elements select: [ :el | (y rtValue: el) >= 0 ]. - positiveElements - ifNotEmpty: [ - RTMetricNormalizer new - elements: positiveElements; - normalizeElementHeight: [ :anElement | y rtValue: anElement ] - min: 0 - max: builder extent y + centralDot position y - minValue: 0 - maxValue: maxY ]. - - RTAlignment new elements: positiveElements; fixedElement: centralDot; bottom. - "TRConstraint use: centralDot alignFromBottom: positiveElements. " - - "We treat the element with a negative value" - negativeElements := elements copyWithoutAll: positiveElements. - negativeElements - ifNotEmpty: [ - RTMetricNormalizer new - elements: negativeElements; - normalizeElementHeight: [ :anElement | y rtValue: anElement ] - min: centralDot position y negated - max: 0 - minValue: minY - maxValue: 0. - RTAlignment new elements: negativeElements; fixedElement: centralDot; top. - "TRConstraint use: centralDot alignFromTop: negativeElements "]. "We set the actions, if any" - elementActions do: [ :act | act rtValue: elements ] -] - -{ #category : #hooks } -RTHorizontalMultipleData >> selectElementsForAddingBarTitle [ - "Return the collection of principal element for each element group. - This principal element is used to position the title label" - ^ groupedElements collect: [ :es | es at: (es size / 2) asInteger + 1 ] -] diff --git a/src/Roassal2/RTHorizontalTickLineDecorator.class.st b/src/Roassal2/RTHorizontalTickLineDecorator.class.st deleted file mode 100644 index b4e5eaa63..000000000 --- a/src/Roassal2/RTHorizontalTickLineDecorator.class.st +++ /dev/null @@ -1,55 +0,0 @@ -" -Add some horizontal lines, one line per tick. - - b := RTGrapher new. - - b extent: 300 @ 200. - - ds := RTData new. - ds points: (-50 to: 100 by: 0.1). - ds y: [ :x | (0.1 * x) sin ]. - ds noDot. - ds interaction popupText: 'sinus'. - ds connectColor: Color blue. - b add: ds. - - ds := RTData new. - ds points: (-50 to: 100 by: 0.1). - ds y: [ :x | (0.1 * x) cos ]. - ds noDot. - ds interaction popupText: 'cosinus'. - ds connectColor: Color red. - b add: ds. - - b addDecorator: RTHorizontalTickLineDecorator new. - b addDecorator: RTVerticalTickLineDecorator new. - - ^ b - -" -Class { - #name : #RTHorizontalTickLineDecorator, - #superclass : #RTAbstractTickLineDecorator, - #category : #'Roassal2-Builder-Grapher-Decorators' -} - -{ #category : #hooks } -RTHorizontalTickLineDecorator >> axis [ - ^ builder getAxisY -] - -{ #category : #drawing } -RTHorizontalTickLineDecorator >> render [ - | axis yLine mm | - axis := builder getAxisY. - mm := RTMetricNormalizer new. - (self minValue to: self maxValue by: self step) do: [ :y | - yLine := mm - getValue: y - min: self fromPoint y - max: self toPoint y - minValue: self minValue - maxValue: self maxValue. - self lineFrom: builder getAxisX fromPoint x @ yLine to: builder getAxisX toPoint x @ yLine. - ] -] diff --git a/src/Roassal2/RTHorizontalTickLinePluginTest.class.st b/src/Roassal2/RTHorizontalTickLinePluginTest.class.st deleted file mode 100644 index 12be81d87..000000000 --- a/src/Roassal2/RTHorizontalTickLinePluginTest.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #RTHorizontalTickLinePluginTest, - #superclass : #RTTest, - #category : #'Roassal2-Builder-Grapher-Tests' -} - -{ #category : #tests } -RTHorizontalTickLinePluginTest >> testDefault [ - - | b p | - b := RTGrapher new. - p := RTHorizontalTickLineDecorator new. - p builder: b. - p lineFrom: 10 @ 10 to: 20 @ 20. -] diff --git a/src/Roassal2/RTHorizontalTimelineDecorator.class.st b/src/Roassal2/RTHorizontalTimelineDecorator.class.st deleted file mode 100644 index 8cd379b40..000000000 --- a/src/Roassal2/RTHorizontalTimelineDecorator.class.st +++ /dev/null @@ -1,72 +0,0 @@ -" -RTHorizontalTimelineDecorator defines a separation between lined up group of events. Such a decoration simply needs to have a particular identifier. - -[[[ - data := #(#(c1 0 5) #(c1 6 8) #(c2 0 5) #(c2 8 10) #(c3 0 10) #(c4 5 10) #(c5 5 8)). - - b := RTTimeline new. - - s := RTTimelineSet new. - s objects: data. - s lineIdentifier: #first. - s start: #second. - s end: #third. - b add: s. - - b axisX - numberOfLabels: 5; - labelRotation: -45; - labelConversion: [ :v | Date year: 2015 day: v ]. - - p := RTHorizontalTimelineDecorator new. - p addLineAboveIdentifier: 'c3'. - p addLineAboveIdentifier: 'c2'. - p shape line width: 3; color: (Color red). - b addDecorator: p. - - b -]]] -" -Class { - #name : #RTHorizontalTimelineDecorator, - #superclass : #RTAbstractLineDecorator, - #instVars : [ - 'identifiers' - ], - #category : #'Roassal2-Builder-Timeline' -} - -{ #category : #adding } -RTHorizontalTimelineDecorator >> addLineAboveIdentifier: anIdentifier [ - "anIdentifier could be any object, not only a string" - - identifiers add: anIdentifier -] - -{ #category : #initialization } -RTHorizontalTimelineDecorator >> gapBetweenTimeLines [ - ^ 3 -] - -{ #category : #initialization } -RTHorizontalTimelineDecorator >> initialize [ - super initialize. - identifiers := OrderedCollection new. -] - -{ #category : #hooks } -RTHorizontalTimelineDecorator >> render [ - | from to lineIdentifiers offset | - lineIdentifiers := builder lineIdentifiers. - identifiers do: [ :id | - values add: (lineIdentifiers indexOf: id) - ]. - - values do: [ :aValue | - from := builder getPixelPositionOf: builder minX @ aValue. - to := builder getPixelPositionOf: builder maxX @ aValue. - offset := 0 @ (self gapBetweenTimeLines / 2). - self lineFrom: from - offset to: to - offset ] - - -] diff --git a/src/Roassal2/RTHorizontalTimelineDecoratorTest.class.st b/src/Roassal2/RTHorizontalTimelineDecoratorTest.class.st deleted file mode 100644 index 5c41a0de9..000000000 --- a/src/Roassal2/RTHorizontalTimelineDecoratorTest.class.st +++ /dev/null @@ -1,42 +0,0 @@ -" -A RTHorizontalTimelineDecoratorTest is a test class for testing the behavior of RTHorizontalTimelineDecorator -" -Class { - #name : #RTHorizontalTimelineDecoratorTest, - #superclass : #RTTest, - #category : #'Roassal2-Builder-Timeline-Tests' -} - -{ #category : #tests } -RTHorizontalTimelineDecoratorTest >> testBasic [ - - - - | data b s p | - data := #(#(c1 0 5) #(c1 6 8) #(c2 0 5) #(c2 8 10) #(c3 0 10) #(c4 5 10) #(c5 5 8)). - - b := RTTimeline new. - - s := RTTimelineSet new. - s objects: data. - s lineIdentifier: #first. - s start: #second. - s end: #third. - b add: s. - - b axisX - numberOfLabels: 5; - labelRotation: -45; - labelConversion: [ :v | Date year: 2015 day: v ]. - - p := RTHorizontalTimelineDecorator new. - p addLineAboveIdentifier: #c3. - p addLineAboveIdentifier: #c2. - p shape line width: 5; color: (Color red alpha: 0.3). - b addDecorator: p. - - b build. - - self assert: b view edges last from position equals: 0 @ (-163 / 2). - self assert: b view edges last to position equals: 300 @ (-163 / 2). -] diff --git a/src/Roassal2/RTHorizontalTreeLayout.class.st b/src/Roassal2/RTHorizontalTreeLayout.class.st deleted file mode 100644 index b4a53a1ea..000000000 --- a/src/Roassal2/RTHorizontalTreeLayout.class.st +++ /dev/null @@ -1,14 +0,0 @@ -" -A ROHorizontalTreeLayout is xxxxxxxxx. - -" -Class { - #name : #RTHorizontalTreeLayout, - #superclass : #RTAbstractHorizontalTreeLayout, - #category : #'Roassal2-Layouts' -} - -{ #category : #'hook-private' } -RTHorizontalTreeLayout >> computeChildrenFor: aNode [ - ^ self childrenFor: aNode except: alreadyLayoutedNodes -] diff --git a/src/Roassal2/RTHorizontalTreeLayoutTest.class.st b/src/Roassal2/RTHorizontalTreeLayoutTest.class.st deleted file mode 100644 index bc87f4b21..000000000 --- a/src/Roassal2/RTHorizontalTreeLayoutTest.class.st +++ /dev/null @@ -1,120 +0,0 @@ -Class { - #name : #RTHorizontalTreeLayoutTest, - #superclass : #RTTest, - #category : #'Roassal2-Layouts-Tests' -} - -{ #category : #tests } -RTHorizontalTreeLayoutTest >> testAddingAttachPoint [ - | v es lineShape l | - v := RTView new. - es := RTBox elementsOn: (1 to: 2). - v addAll: es. - lineShape := RTLine new. - l := lineShape edgeFrom: es first to: es second. - v add: l. - - self assert: lineShape attachPoint class equals: RTCenteredAttachPoint. - RTHorizontalTreeLayout on: es. - self assert: lineShape attachPoint class equals: RTHorizontalAttachPoint. -] - -{ #category : #'tests - reversed' } -RTHorizontalTreeLayoutTest >> testHorizontallyReversed [ - | layout v edge lineShape elements from to | - - v := RTView new. - elements := RTBox elementsOn: (1 to: 3). - v addAll: elements. - lineShape := RTLine new. - edge := lineShape edgeFrom: elements first to: elements second. - v add: edge. - edge := lineShape edgeFrom: elements first to: elements third. - v add: edge. - layout := RTHorizontalTreeLayout new. - - "NO REVERSE" - layout on: elements. - self assert: elements second position x > elements first position x. - self assert: elements second position y < elements first position y. - self assert: elements second position x equals: elements third position x. - from := v edges first trachelShape from. - to := v edges first trachelShape to. - self assert: from class equals: Point. - self assert: to class equals: Point. - - "REVERSE" - layout horizontallyReverse. - layout on: elements. - self assert: elements second position x < elements first position x. - self assert: elements second position y < elements first position y. - self assert: elements second position x equals: elements third position x. - - "ATTACHPOINT" - self assert: (v edges collect: [ :ed | ed shape attachPoint ]) asSet size equals: 1. - - "ATTACHPOINT FROM AND TO" - self assert: (0 @ 7) equals: v edges first trachelShape to. - self assert: (20 @ 11) equals: v edges first trachelShape from. - - -] - -{ #category : #'tests - reversed' } -RTHorizontalTreeLayoutTest >> testHorizontallyReversedSetting [ - | l | - l := RTHorizontalTreeLayout new. - self deny: l shouldBeHorizontallyReversed. - self deny: l shouldBeVerticallyReversed. - l horizontallyReverse. - self assert: l shouldBeHorizontallyReversed. - self deny: l shouldBeVerticallyReversed. -] - -{ #category : #'tests - reversed' } -RTHorizontalTreeLayoutTest >> testVerticallyReversed [ - | layout v edge lineShape elements | - - v := RTView new. - elements := RTBox elementsOn: (1 to: 3). - v addAll: elements. - lineShape := RTLine new. - edge := lineShape edgeFrom: elements first to: elements second. - v add: edge. - edge := lineShape edgeFrom: elements first to: elements third. - v add: edge. - layout := RTHorizontalTreeLayout new. - self assert: (v edges noneSatisfy: [ :ed | ed shape attachPoint isInverted ]). - self assert: (v edges collect: [ :ed | ed shape attachPoint ]) asSet size equals: 1. - - "NO REVERSE" - layout on: elements. - self assert: elements second position x > elements first position x. - self assert: elements second position y < elements first position y. - self assert: elements second position x equals: elements third position x. - - self assert: (v edges noneSatisfy: [ :ed | ed shape attachPoint isInverted ]). - self assert: (v edges collect: [ :ed | ed shape attachPoint ]) asSet size equals: 1. - - "REVERSE" - layout verticallyReverse. - layout on: elements. - self assert: elements second position x > elements first position x. - self assert: elements second position y > elements first position y. - self assert: elements second position x equals: elements third position x. - - "ATTACHPOINT" - self assert: (v edges noneSatisfy: [ :ed | ed shape attachPoint isInverted ]). - self assert: (v edges collect: [ :ed | ed shape attachPoint ]) asSet size equals: 1. -] - -{ #category : #'tests - reversed' } -RTHorizontalTreeLayoutTest >> testVerticallyReversedSetting [ - | l | - l := RTHorizontalTreeLayout new. - self deny: l shouldBeVerticallyReversed. - self deny: l shouldBeHorizontallyReversed. - l verticallyReverse. - self assert: l shouldBeVerticallyReversed. - self deny: l shouldBeHorizontallyReversed. -] diff --git a/src/Roassal2/RTHorizontalValuesDecorator.class.st b/src/Roassal2/RTHorizontalValuesDecorator.class.st deleted file mode 100644 index 6eb53514d..000000000 --- a/src/Roassal2/RTHorizontalValuesDecorator.class.st +++ /dev/null @@ -1,25 +0,0 @@ -" -Add ticks at particular values: - --=-=-=-=-=-=-=-=-=-=-=-= -c := (1 to: 100) collect: [ :i | 50 atRandom @ 50 atRandom ]. - -g := RTGrapher new. -d := RTData new. -d points: c. -d x: #x. -d y: #y. -g add: d. -g axisX noTick. -g axisY noTick. - -g addDecorator: (RTVerticalValuesDecorator new addAll: #(10 25)). -g addDecorator: (RTHorizontalValuesDecorator new addAll: #(10 25)). -g --=-=-=-=-=-=-=-=-=-=-=-= -" -Class { - #name : #RTHorizontalValuesDecorator, - #superclass : #RTAbstractHorizontalValuesDecorator, - #category : #'Roassal2-Builder-Grapher-Decorators' -} diff --git a/src/Roassal2/RTHowToContribute.class.st b/src/Roassal2/RTHowToContribute.class.st deleted file mode 100644 index d3bf917e1..000000000 --- a/src/Roassal2/RTHowToContribute.class.st +++ /dev/null @@ -1,1408 +0,0 @@ -" -I am a class that display general information about Roassal contributions -" -Class { - #name : #RTHowToContribute, - #superclass : #RTAbstractWorldMenu, - #category : #'Roassal2-MorphSpecific-Menu' -} - -{ #category : #'world menu' } -RTHowToContribute class >> menuCommandOn: aBuilder [ - - (aBuilder item: ('Make ', self projectName, ' Better') asSymbol) - order: 0.002; - parent: #Roassal; - label: 'Make ', self projectName, ' Better'; - help: 'How to contribute to ', self projectName; - icon: (Smalltalk ui icons iconNamed: #thumbsUp); - action: [ self new open. WebBrowser openOn: 'http://www.lulu.com/shop/http://www.lulu.com/shop/alexandre-bergel/agile-visualization/paperback/product-22853677.html' ] -] - -{ #category : #'instance creation' } -RTHowToContribute >> addAnimationTo: v [ - | e | - v when: TRMouseClick do: [ :event | v clean ]. - v - when: TRMouseMove - do: [ :event | - e := (RTEllipse new - color: "(Color blue alpha: 0.2)" (RTPalette c1 atRandom alpha: 0.2); - size: 20 atRandom + 5) element. - e translateTo: event position. - v add: e. - v - addAnimation: - (RTAccelerationMove - to: event position + ((150 atRandom - 75) @ (150 atRandom - 75)) - during: 5 - on: e) ] -] - -{ #category : #'instance creation' } -RTHowToContribute >> open [ - " - self new open - " - | v labels | - v := RTView new. - v add: (RTBitmap new form: self picAsForm) element. - labels := RTLabel - elementsOn: - #('You can help us making Roassal better by:' - ' - Sharing your cool visualizations' - ' - Submitting bug fixes' - ' - Saying hello on Slack' - ' - Buying a printed version of AgileVisualization' - '' - 'More information on: '). - labels - add: - ((RTLabel new color: Color veryVeryDarkGray) - elementOn: 'http://AgileVisualization.com'). - - - "labels - addAll: - (RTLabel - elementsOn: - #('A printed version and an eBook are available for sale.' '' '' 'We are deeply thankful to all of you involved' 'in the development of Roassal'))." - v add: labels. - RTVerticalLineLayout on: labels. - TRConstraint move: v elements first onTheLeftOf: labels. - - - "Adding animation" - self addAnimationTo: v. - v openInWindowSized: 600 @ 400 titled: 'Roassal Visualization Engine' -] - -{ #category : #data } -RTHowToContribute >> pic [ ^ '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 -+tSEX8C/6C/QzwJNWt+1/AAAAZ1pVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1l -dGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4K -ICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJk -Zi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAg -ICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgog -ICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MjIxPC9leGlmOlBpeGVsWERpbWVuc2lv -bj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjE2NTwvZXhpZjpQaXhlbFlEaW1l -bnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBt -ZXRhPgrdkQh+AABAAElEQVR4AWTdB7Re13Uf+Iv30AsBgmAFSAJgFUVRbCpUpbpVbClukjVx -mUniuESSx8mKkziT4ZqJJ8lkZc1kuWisOLbk7khWtQolsUikKJLq7B0gCbAB7EQHHub/2/sd -gJM54Mfvfveeu8/ue599zr1vwde+9rXDq1evnl544YVpdnZ2Wrhw4TQzMzPNzc1NCxYsqO8l -S5bUsd+aa/qMdvjw4clnZmY231P65trh7rt48ZKCezi/wV+0aFHdBoa2YGZB9Z8JbGMvyP0H -DhzI8UyNAe6hQ4e6b/occl9gHTp0MGMdmjJyjR2scm5uOniw+xbs9IfPobkD09zhA3UN3j5o -AXfgfvDgwRrDOcczC2bzmSmc4Lpv375p8eLF6XM41w/Ufc4PesBBK9rdX7RkDGMVjsGvedS8 -de9s+LUwPHE88HLs/oFX8yJ8CSyfhbMLp4OhfdCnr/PwwH888LvGDU7oXzCT7zB23959NRbY -ZFE4TIsz3qG6Z+5weJjjoiniWzDPJ7DwxaeuBebh4Ak3zTmwRh/n8MoYmn7kT6bGXrpsybR1 -65bp/T/3M9OlF18y/Yf/8O+npUuXT0899cy0e/euae/e/VOozf0Lp0WL8wn82dmZaf/+fTUG -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' -] - -{ #category : #'instance creation' } -RTHowToContribute >> picAsForm [ - - ^ Form fromBinaryStream: RTHowToContribute new pic base64Decoded readStream -] diff --git a/src/Roassal2/RTHowToReportABug.class.st b/src/Roassal2/RTHowToReportABug.class.st deleted file mode 100644 index a7834376f..000000000 --- a/src/Roassal2/RTHowToReportABug.class.st +++ /dev/null @@ -1,1409 +0,0 @@ -" -I am a class that display general information about how to report a bug -" -Class { - #name : #RTHowToReportABug, - #superclass : #RTAbstractWorldMenu, - #category : #'Roassal2-MorphSpecific-Menu' -} - -{ #category : #'world menu' } -RTHowToReportABug class >> menuCommandOn: aBuilder [ - - (aBuilder item: #'How To Contribute') - order: 0.002; - parent: self projectName asSymbol; - label: 'How To report a bug'; - help: 'How to report a Roassal related bug'; - icon: (Smalltalk ui icons iconNamed: #smallDebug); - action: [ self new open. "WebBrowser openOn: 'https://github.com/moosetechnology/Moose/issues'" ] -] - -{ #category : #'instance creation' } -RTHowToReportABug >> addAnimationTo: v [ - | e | - v when: TRMouseClick do: [ :event | v clean ]. - v - when: TRMouseMove - do: [ :event | - e := (RTEllipse new - color: (RTPalette c4 atRandom alpha: 0.2); - size: 20 atRandom + 5) element. - e translateTo: event position. - v add: e. - v - addAnimation: - (RTAccelerationMove - to: event position + ((150 atRandom - 75) @ (150 atRandom - 75)) - during: 5 - on: e) ] -] - -{ #category : #'instance creation' } -RTHowToReportABug >> open [ - " - self new open - " - | v labels | - v := RTView new. - labels := RTGroup new. - labels - add: - (RTLabel - elementOn: 'Problems and bugs can be reported on:'). - - - labels - add: - ((RTLabel new color: Color veryVeryDarkGray) - elementOn: 'https://github.com/moosetechnology/Moose/issues'). - - labels - add: - (RTLabel - elementOn: 'After inserting the bug, please send an email to '). - labels - add: - (RTLabel - elementOn: 'the moose mailing list or to the Slack #roassal channel'). - - - - v add: labels. - RTVerticalLineLayout on: labels. - - - "Adding animation" - self addAnimationTo: v. - v openInWindowSized: 600 @ 400 titled: 'Roassal Visualization Engine' -] - -{ #category : #data } -RTHowToReportABug >> pic [ ^ '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 -+tSEX8C/6C/QzwJNWt+1/AAAAZ1pVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1l -dGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4K -ICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJk -Zi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAg -ICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgog -ICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MjIxPC9leGlmOlBpeGVsWERpbWVuc2lv -bj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjE2NTwvZXhpZjpQaXhlbFlEaW1l -bnNpb24+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBt -ZXRhPgrdkQh+AABAAElEQVR4AWTdB7Re13Uf+Iv30AsBgmAFSAJgFUVRbCpUpbpVbClukjVx -mUniuESSx8mKkziT4ZqJJ8lkZc1kuWisOLbk7khWtQolsUikKJLq7B0gCbAB7EQHHub/2/sd -gJM54Mfvfveeu8/ue599zr1vwde+9rXDq1evnl544YVpdnZ2Wrhw4TQzMzPNzc1NCxYsqO8l -S5bUsd+aa/qMdvjw4clnZmY231P65trh7rt48ZKCezi/wV+0aFHdBoa2YGZB9Z8JbGMvyP0H -DhzI8UyNAe6hQ4e6b/occl9gHTp0MGMdmjJyjR2scm5uOniw+xbs9IfPobkD09zhA3UN3j5o -AXfgfvDgwRrDOcczC2bzmSmc4Lpv375p8eLF6XM41w/Ufc4PesBBK9rdX7RkDGMVjsGvedS8 -de9s+LUwPHE88HLs/oFX8yJ8CSyfhbMLp4OhfdCnr/PwwH888LvGDU7oXzCT7zB23959NRbY -ZFE4TIsz3qG6Z+5weJjjoiniWzDPJ7DwxaeuBebh4Ak3zTmwRh/n8MoYmn7kT6bGXrpsybR1 -65bp/T/3M9OlF18y/Yf/8O+npUuXT0899cy0e/euae/e/VOozf0Lp0WL8wn82dmZaf/+fTUG -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' -] - -{ #category : #'instance creation' } -RTHowToReportABug >> picAsForm [ - - ^ Form fromBinaryStream: RTHowToContribute new pic base64Decoded readStream -] diff --git a/src/Roassal2/RTIcon.class.st b/src/Roassal2/RTIcon.class.st deleted file mode 100644 index 20eaa49df..000000000 --- a/src/Roassal2/RTIcon.class.st +++ /dev/null @@ -1,545 +0,0 @@ -Class { - #name : #RTIcon, - #superclass : #RTObject, - #category : #'Roassal2-Utility' -} - -{ #category : #icons } -RTIcon class >> objectprofile [ - ^ TRPlatform current formFromStream: (self objectprofileContents readStream) -] - -{ #category : #icons } -RTIcon class >> objectprofileContents [ - "Private - Method generated with the content of the file /Users/alexandrebergel/Documents/ObjectProfile/Logos//ObjectProfileLogo.png" - ^ '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 -dL+f7bOl3sEWiKYT5mvt1Is+nD8b6fv8N5Gw9E45PgU9AAABnWlUWHRYTUw6Y29tLmFkb2Jl -LnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0i -WE1QIENvcmUgNS4xLjIiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMu -b3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9u -IHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUu -Y29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4xNzI8L2V4 -aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MTg5 -PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwv -cmRmOlJERj4KPC94OnhtcG1ldGE+CgyyweUAADj6SURBVHgB7Z15mCRHdeArj7q6qu97eu57 -JI2kGd3IEqfEisU2lzG2Ob61DSy7GNYYf+tdY4zPlY/18dkf5g/sNRZe28AasV6wQAiMBJIl -dI+kue/p6emruqu67spjf1Gpzs6uIzOrunqmpt3J0IqKePHixYsXL168uCTTNAPr379tDsj/ -tqu/XnvBgXUhWJeDdSFYl4FAQF17TMDKkSRRLZP/iT9YPcRIpmmUK+tpA0lkAj4QkETGgAjw -T2AQoTLqtcW1tSYEupk1jLxuFA2zFJBKJX3BNEu6mdf1omamaDv+utvCqtQhS+GAJIeULikQ -lOWIEogqcocUUBQ5zE9Vjq8tGVhzmmAu+8x87umiPkc7GaYpBxT6cLlnC7XA59mVbUVSBhd6 -xAwY4DBMQ5Wj8dCuse53SdKasqXWmiZQpe68llCkIE2o2Jq7HLB/Wa1b7295IFhKFMNA2XJS -ZQntwpiyxiSAql4VEm3CfU3PaPqCGONdv3hkqypFXEGaTCwPIlI8ssszvxnQTVPzJNUTz2UD -aF9NUDbKGM8zJWM+r03kSxdD6mBf9BZZCrlwR5YikeDGTPGULCkuYM0lMS50BLd45p3PPp8t -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 -YII=' -] - -{ #category : #icons } -RTIcon class >> roassal [ - ^ TRPlatform current roassalIcon -] - -{ #category : #icons } -RTIcon class >> roassalContents [ - - ^ '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 -TQAAAABJRU5ErkJggg==' -] - -{ #category : #'license and info' } -RTIcon class >> roassalDescription [ - ^ -'Roassal graphically renders objects using short and expressive Smalltalk expressions. -A large set of interaction are offered for a better user experience. Painting, brushing, interconnecting, -zooming, drag and dropping will just make you more intimate with any arbitrary object model. - -Information about Roassal may be found online: http://objectprofile.com - -Follow us on Twitter: @ObjectProfile - -Facebook page: http://facebook.com/ObjectProfile -' - - -] - -{ #category : #icons } -RTIcon class >> robowo [ - ^ TRPlatform current formFromStream: self robowoContents readStream. -] - -{ #category : #icons } -RTIcon class >> robowoContents [ - ^ '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' - -] - -{ #category : #icons } -RTIcon class >> smallRoassal [ - "Private - Generated method" - ^ TRPlatform current formFromStream: (self smallRoassalContents readStream) -] - -{ #category : #icons } -RTIcon class >> smallRoassalContents [ - "Private - Method generated with the content of the file C:\Users\azazael\Documents\smalltalk\inti\moose\roassalWithTransparent.png" - ^ 'iVBORw0KGgoAAAANSUhEUgAAAAoAAAASCAYAAABit09LAAABLElEQVR4XmP4//8/w38iMFGK -aK1wWo/Z/8Tgiv86UhP+a0vX/9eRbvuvLbnyv57U1P8zek2givoFgArmAvFSoKKS/1N7pf5P -6xX7P7XHCaj4zv/EiEKIQh2pLqCgNxCHACX+/58xkQtuk7bkGaB4JYQztVfh//nzjECBnP/a -Umf+z+oTAooZ/teTbgA6J+//qaPSCDeePsYJFGwFmj7jv4F0E1DDrP9W8oX/Tx0TRfeMzn8d -yTVAT3j/15WqBiq8+j80lBnT11N7goHuOf1/2kTu//Nni/031egCalz1//Rx9v9XTjEiKwS6 -T/ICmH3lCsP/7CQHoKlf/ieGRP/PCndCKNSRnAzE+1ACWk/GAyh28r+udAFC0EwvDBheYYRj -ZsEC5v+nTjENwtQDAHm03ZBoT2X8AAAAAElFTkSuQmCC' -] diff --git a/src/Roassal2/RTIdentityGroup.class.st b/src/Roassal2/RTIdentityGroup.class.st deleted file mode 100644 index c1f3bbd94..000000000 --- a/src/Roassal2/RTIdentityGroup.class.st +++ /dev/null @@ -1,14 +0,0 @@ -" -This class is useful to contains objects for which their class have overriden #= (e.g., AST Nodes) -" -Class { - #name : #RTIdentityGroup, - #superclass : #RTGroup, - #category : #'Roassal2-Core' -} - -{ #category : #public } -RTIdentityGroup >> elementFromModel: anObject [ - "Return an element that corresponds to the object provided as parameter. If none is found, then return nil" - ^ self detect: [ :el | el model == anObject ] ifNone: [ nil ] -] diff --git a/src/Roassal2/RTIdentityLineDecorator.class.st b/src/Roassal2/RTIdentityLineDecorator.class.st deleted file mode 100644 index e27721972..000000000 --- a/src/Roassal2/RTIdentityLineDecorator.class.st +++ /dev/null @@ -1,14 +0,0 @@ -Class { - #name : #RTIdentityLineDecorator, - #superclass : #RTAbstractLineDecorator, - #category : #'Roassal2-Builder-Grapher-Decorators' -} - -{ #category : #drawing } -RTIdentityLineDecorator >> render [ - | min max | - min := builder getPixelPositionOf: builder minX @ builder minY. - max := builder getPixelPositionOf: builder maxX @ builder maxY. - - self lineFrom: min to: max -] diff --git a/src/Roassal2/RTIdentityMatrix.class.st b/src/Roassal2/RTIdentityMatrix.class.st deleted file mode 100644 index 57fca8012..000000000 --- a/src/Roassal2/RTIdentityMatrix.class.st +++ /dev/null @@ -1,51 +0,0 @@ -Class { - #name : #RTIdentityMatrix, - #superclass : #RTObject, - #instVars : [ - 'rows' - ], - #category : #'Roassal2-Layouts' -} - -{ #category : #accessing } -RTIdentityMatrix >> at: u [ - - | row | - row := rows - at: u - ifAbsentPut: [IdentityDictionary new]. - ^row keys -] - -{ #category : #accessing } -RTIdentityMatrix >> at: u at: v [ - - | row | - row := rows - at: u - ifAbsentPut: [IdentityDictionary new]. - ^row - at: v - ifAbsent: [false] -] - -{ #category : #accessing } -RTIdentityMatrix >> at: u at: v put: aBoolean [ - - | row | - "u -> v" - row := rows - at: u - ifAbsentPut: [IdentityDictionary new]. - row at: v put: aBoolean. "v -> u" - row := rows - at: v - ifAbsentPut: [IdentityDictionary new]. - row at: u put: aBoolean -] - -{ #category : #'initialize-release' } -RTIdentityMatrix >> initialize [ - - rows := IdentityDictionary new -] diff --git a/src/Roassal2/RTInspectorScript.class.st b/src/Roassal2/RTInspectorScript.class.st deleted file mode 100644 index 22ac89a72..000000000 --- a/src/Roassal2/RTInspectorScript.class.st +++ /dev/null @@ -1,71 +0,0 @@ -Class { - #name : #RTInspectorScript, - #superclass : #RTUsefulScript, - #category : #'Roassal2-Plugins' -} - -{ #category : #accessing } -RTInspectorScript >> description [ - ^ -'Simple visual object inspector' -] - -{ #category : #hooks } -RTInspectorScript >> execute [ - "This is the initial object you would like to inspect" - | initialObject v b block nodes outterBox | - initialObject := RTView new. - - initialObject := RPackageOrganizer default packageNamed: 'Roassal2'. - - v := RTView new. - v @ RTDraggableView. - - nodes := Dictionary new. - - block := [ :anObject | - - b := RTMondrian new. - b shape box color: Color gray trans; withTextAbove. - - b node: anObject class name forIt: [ - b shape label text: #key; - if: [:assoc | assoc value isNil ] color: Color brown. - b interaction - noInteractions; - highlight; - when: TRMouseClick do: [ :evt | - | obj | - "When we click on a label, we add the nodes, and create a link" - obj := evt element model value. - (nodes keys includes: obj) ifFalse: [ - block value: evt element model value ]. - - v add: (RTArrowedLine new withShorterDistanceAttachPoint; edgeFrom: evt element to: (nodes at: obj)). - v signalUpdate. - ]; - popupText: [ :ass | ass value asString ]. - - b nodes: (anObject class allInstVarNames collect: [ :n | n -> (anObject instVarNamed: n) ]). - b layout verticalLine. - ]. - b build. - "The elements we have just built are added to the view" - v addAll: b view elements. - - "We refresh the view" - v signalUpdate. - - outterBox := b view elements first. - nodes at: anObject put: outterBox. - ]. - - block value: initialObject. - - v inspect -] - -{ #category : #accessing } -RTInspectorScript >> label [ - ^ 'Simple Object Inspector' -] diff --git a/src/Roassal2/RTInteraction.class.st b/src/Roassal2/RTInteraction.class.st deleted file mode 100644 index 7ed7a5707..000000000 --- a/src/Roassal2/RTInteraction.class.st +++ /dev/null @@ -1,24 +0,0 @@ -" -A ROInteraction is xxxxxxxxx. - -" -Class { - #name : #RTInteraction, - #superclass : #RTObject, - #category : #'Roassal2-Interactions' -} - -{ #category : #public } -RTInteraction class >> initializeElement: element [ - ^ self new initializeElement: element; yourself -] - -{ #category : #visitor } -RTInteraction >> accept: aVisitor with: args [ - aVisitor visitInteraction: self with: args -] - -{ #category : #hooks } -RTInteraction >> initializeElement: element [ - self subclassResponsibility -] diff --git a/src/Roassal2/RTInteractionBuilder.class.st b/src/Roassal2/RTInteractionBuilder.class.st deleted file mode 100644 index 7814f95fc..000000000 --- a/src/Roassal2/RTInteractionBuilder.class.st +++ /dev/null @@ -1,469 +0,0 @@ -" --=-=-=-= -b := RTMondrian new. - -b interaction snapToGrid. -b shape rectangle size: 20. -b nodes: (1 to: 9). -b layout grid. -b --=-=-=-= -" -Class { - #name : #RTInteractionBuilder, - #superclass : #RTAbstractBuilder, - #instVars : [ - 'interactions' - ], - #category : #'Roassal2-Builder-Common' -} - -{ #category : #public } -RTInteractionBuilder >> action: aBlockOrSymbol [ - "Add a new action, the argument is taken from the argument" - ^ self item: aBlockOrSymbol action: aBlockOrSymbol -] - -{ #category : #'private-adding' } -RTInteractionBuilder >> addExclusiveInteraction: anInteraction [ - "We only keep all the interaction that have a different class" - interactions := interactions select: [ :i | i class ~~ anInteraction class ]. - self addInteraction: anInteraction -] - -{ #category : #'private-adding' } -RTInteractionBuilder >> addInteraction: anInteraction [ - interactions add: anInteraction -] - -{ #category : #public } -RTInteractionBuilder >> constrainedDraggable [ - "Make sure that the inner elements cannot escape the encompassing element" - | i | - self removeInteractionOfType: RTAbstractDraggable. - i := RTConstrainedDraggable new. - i withinParent. - interactions add: i. - ^ i -] - -{ #category : #public } -RTInteractionBuilder >> decoration [ - | i | - i := RTDecoration new. - interactions add: i. - ^ i -] - -{ #category : #public } -RTInteractionBuilder >> draggable [ - | i | - self removeInteractionOfType: RTAbstractDraggable. - i := RTDraggable new. - self addInteraction: i. - ^ i -] - -{ #category : #'public - events-registering' } -RTInteractionBuilder >> fixedPopupText: aBlock [ - self removeInteractionOfType: RTAbstractPopup. - self addExclusiveInteraction: (RTFixedPopup new text: aBlock) -] - -{ #category : #public } -RTInteractionBuilder >> hasInteractionOfType: cls [ - ^ interactions - anySatisfy: [ :anInt | anInt class == cls or: [ anInt class inheritsFrom: cls ] ] -] - -{ #category : #public } -RTInteractionBuilder >> highlight [ - "Make elements highlighted when the mouse goes over. Blue is the default color - -For example: --=-=-= -b := RTMondrian new. -b interaction highlight. -b shape label. -b nodes: (1 to: 9). -b layout grid. -b --=-=-= - " - self highlightColored: Color blue -] - -{ #category : #public } -RTInteractionBuilder >> highlightColored: aColorOrAOneArgBlockOrSymbol [ - "Make elements highlighted when the mouse goes over. The color is provided as argument - -For example: --=-=-= -b := RTMondrian new. -b interaction highlightColored: Color red. -b shape label. -b nodes: (1 to: 9). -b layout grid. -b --=-=-= - " - self when: TRMouseEnter do: [ :event | - RTBlink - highlight: event element - color: (aColorOrAOneArgBlockOrSymbol rtValue: event element model) ]. - - self when: TRMouseLeave do: [ :event | - RTBlink - unhighlight: event element ]. -] - -{ #category : #'public - events-registering' } -RTInteractionBuilder >> highlightEdges: aBlock [ - "Highlight the elements for which the model is given by 'aBlock rtValue: element model', where 'element' is the current element - - aBlock takes as input an object and return a collection of objects. - " - - " - Example: -b := RTMondrian new. -b interaction highlightEdges: [ :v | Array with: v - 1 with: v with: v + 1 ]. -b nodes: (1 to: 11). -b layout grid. -b edges connectToAll: [ :v | Array with: v - 1 with: v with: v + 1 ]. -b - - " - interactions add: [ :element | element @ (RTHighlightable new shouldHighlightEdges; pushFrontEdges; edgeColor: Color red) ] -] - -{ #category : #'public - events-registering' } -RTInteractionBuilder >> highlightEdges: aBlock color: aColor [ - "Highlight the elements for which the model is given by 'aBlock rtValue: element model', where 'element' is the current element - - aBlock takes as input an object and return a collection of objects. - " - - " - Example: -b := RTMondrian new. -b interaction highlightEdges: [ :v | Array with: v - 1 with: v with: v + 1 ]. -b nodes: (1 to: 11). -b layout grid. -b edges connectToAll: [ :v | Array with: v - 1 with: v with: v + 1 ]. -b - - " - interactions add: [ :element | element @ (RTHighlightable new shouldHighlightEdges; edgeColor: aColor) ] -] - -{ #category : #'public - events-registering' } -RTInteractionBuilder >> highlightElements: elementsOrABlock [ - "Highlight the elements, elementsOrABlock may either be a block (which takes as argument the selected element and return a list of elements" - interactions add: [ :element | element @ (RTHighlightable highlightElements: (elementsOrABlock rtValue: element model)) ] -] - -{ #category : #'public - events-registering' } -RTInteractionBuilder >> highlightNeighbors: aBlock [ - "Highlight the elements for which the model is given by 'aBlock rtValue: element model', where 'element' is the current element - - aBlock takes as input an object and return a collection of objects. - " - - " - Example: -b := RTMondrian new. -b interaction highlightNeighbour: [ :v | Array with: v - 1 with: v with: v + 1 ]. -b nodes: (1 to: 11). -b layout grid. -b - - " - interactions add: [ :element | element @ (RTHighlightable highlight: aBlock) ] -] - -{ #category : #'public - events-registering' } -RTInteractionBuilder >> highlightNeighbors: aBlock color: aColorOrABlock [ - "Highlight the elements for which the model is given by 'aBlock rtValue: element', where 'element' is the current element" - interactions add: [ :element | element @ (RTHighlightable new - highlightedColor: aColorOrABlock; - highlight: aBlock) ] -] - -{ #category : #'public - events-registering' } -RTInteractionBuilder >> highlightNeighbour: aBlock [ - self deprecated: 'Use #highlightNeighbors: instead'. - - "Highlight the elements for which the model is given by 'aBlock rtValue: element model', where 'element' is the current element - - aBlock takes as input an object and return a collection of objects. - " - - " - Example: -| b | -b := RTMondrian new. -b interaction highlightNeighbors: [ :v | Array with: v - 1 with: v with: v + 1 ]. -b nodes: (1 to: 11). -b layout grid. -b - - " - interactions add: [ :element | element @ (RTHighlightable highlight: aBlock) ] -] - -{ #category : #'public - events-registering' } -RTInteractionBuilder >> highlightNeighbour: aBlock color: aColorOrABlock [ - self deprecated: 'Use #highlightNeighbors:color: instead'. - "Highlight the elements for which the model is given by 'aBlock rtValue: element', where 'element' is the current element" - interactions add: [ :element | element @ (RTHighlightable new - highlightedColor: aColorOrABlock; - highlight: aBlock) ] -] - -{ #category : #initialization } -RTInteractionBuilder >> initialize [ - super initialize. - self initializeInteractions. -] - -{ #category : #initialization } -RTInteractionBuilder >> initializeInteractions [ - interactions := OrderedCollection new -] - -{ #category : #'accessing - computed' } -RTInteractionBuilder >> interactionOfType: cls [ - ^ interactions - detect: [ :anInt | anInt class == cls or: [ anInt class inheritsFrom: cls ] ] - ifNone: [ nil ] -] - -{ #category : #public } -RTInteractionBuilder >> item: aTitle action: aBlockOrSymbol [ - "Run on an element" - interactions add: [ :element | element @ (RTMenuActivable new item: aTitle asString action: [ aBlockOrSymbol rtValue: element model ]) ] -] - -{ #category : #public } -RTInteractionBuilder >> item: aTitle actionElement: aBlockOrSymbol [ - "Run on an element" - interactions add: [ :element | element @ (RTMenuActivable new item: aTitle asString action: [ aBlockOrSymbol rtValue: element ]) ] -] - -{ #category : #public } -RTInteractionBuilder >> menu [ - | i | - i := RTMenuActivable new. - interactions add: i. - ^ i -] - -{ #category : #'morphic specific' } -RTInteractionBuilder >> menu: aSymbolOrBlockOrMenu [ - "the argument has to return a menu morph, when evaluated against the object" - interactions add: [ :element | element when: TRMouseRightClick do: [ :evt | (aSymbolOrBlockOrMenu rtValue: evt element model) popUpInWorld ] ] - -] - -{ #category : #public } -RTInteractionBuilder >> noInteractions [ - self initializeInteractions. -] - -{ #category : #'accessing - computed' } -RTInteractionBuilder >> numberOfInteractions [ - ^ interactions size -] - -{ #category : #public } -RTInteractionBuilder >> popup [ - "Return a new popup, which is set in the builder" - | i | - i := RTPopup new. - self addExclusiveInteraction: i. - ^ i -] - -{ #category : #'public - events-registering' } -RTInteractionBuilder >> popupText [ - self popupText: #yourself -] - -{ #category : #'public - events-registering' } -RTInteractionBuilder >> popupText: aBlock [ - ^ self popup text: aBlock -] - -{ #category : #'public - events-registering' } -RTInteractionBuilder >> popupText: aBlock backgroundColor: aColorBlock [ - "Define a popup with a color background, no alpha color is used" - self addExclusiveInteraction: (RTPopup new text: aBlock; alphaPopupBackground: 1.0; backgroundColor: aColorBlock) -] - -{ #category : #'public - events-registering' } -RTInteractionBuilder >> popupText: aBlock color: aColorBlock [ - "Define a popup, with a color as the text" - self addExclusiveInteraction: (RTPopup new text: aBlock; textColor: aColorBlock) -] - -{ #category : #'public - events-registering' } -RTInteractionBuilder >> popupTextColor: aColorBlock [ - self popupText: #yourself color: aColorBlock -] - -{ #category : #'public - events-registering' } -RTInteractionBuilder >> popupView: aTwoArgBlock [ - "aTwoArgBlock has to follow the pattern [ :group :element | ... ] - group is an empty group. You need to add what you want to be displayed in the popup. el is the element on which the mouse is above." - ^ self popupView: aTwoArgBlock backgroundColor: (Color blue alpha: 0.6) -] - -{ #category : #'public - events-registering' } -RTInteractionBuilder >> popupView: aTwoArgBlock backgroundColor: aBackgroundColor [ - "aTwoArgBlock has to follow the pattern [ :group :element | ... ] - group is an empty group. You need to add what you want to be displayed in the popup. el is the element on which the mouse is above." - self addExclusiveInteraction: (RTPopup new background: aBackgroundColor group: aTwoArgBlock) -] - -{ #category : #'public - events-registering' } -RTInteractionBuilder >> popupView: aTwoArgBlock backgroundColor: aBackgroundColor borderColor: aBorderColor [ - "aTwoArgBlock has to follow the pattern [ :group :element | ... ] - group is an empty group. You need to add what you want to be displayed in the popup. el is the element on which the mouse is above." - self addExclusiveInteraction: (RTPopup new borderColor: aBorderColor; background: aBackgroundColor group: aTwoArgBlock) -] - -{ #category : #'public - events-registering' } -RTInteractionBuilder >> popupViewWithName: aTwoArgBlock [ - "aTwoArgBlock has to follow the pattern [ :group :element | ... ] - group is an empty group. You need to add what you want to be displayed in the popup. el is the element on which the mouse is above." - ^ self popupViewWithName: aTwoArgBlock backgroundColor: (Color blue alpha: 0.6) - -] - -{ #category : #'public - events-registering' } -RTInteractionBuilder >> popupViewWithName: aTwoArgBlock backgroundColor: aBackgroundColor [ - "aTwoArgBlock has to follow the pattern [ :group :element | ... ] - group is an empty group. You need to add what you want to be displayed in the popup. el is the element on which the mouse is above." - self addExclusiveInteraction: (RTPopup new namedBackground: aBackgroundColor group: aTwoArgBlock) -] - -{ #category : #public } -RTInteractionBuilder >> removeInteractionOfType: cls [ - "Remove the interaction of type cls if present" - interactions - detect: [ :anInt | anInt class == cls or: [ anInt class inheritsFrom: cls ] ] - ifFound: [ :int | interactions := interactions copyWithout: int ] - -" | int | - (interactions anySatisfy: [ :anInt | anInt class == cls or: [ anInt class inheritsFrom: cls ] ]) - ifTrue: [ - int := interactions detect: [ :anInt | anInt class == cls ]. - interactions := interactions copyWithout: int ]" -] - -{ #category : #building } -RTInteractionBuilder >> setUpElement: elementOrGroup [ - "elements is an RTGroup, that contains RTElement or RTEdges" - - interactions do: [ :int | elementOrGroup @ int ] -] - -{ #category : #building } -RTInteractionBuilder >> setUpElements: elements [ - "elements is an RTGroup, that contains RTElement or RTEdges" - interactions do: [ :int | elements @ int ] -] - -{ #category : #public } -RTInteractionBuilder >> showEdge [ - "Public method - - | b | - b := RTMondrian new. - b interaction showEdge connectToAll: [ :v | Array with: v + 1 ]. - b nodes: #(1 2 2 3). - - b layout circle initialRadius: 10. - b - " - - " - slighly more elaborated example: -classes := Collection withAllSubclasses. -b := RTMondrian new. -b shape circle. -b interaction showEdge - shape: (RTArrowedLine new color: Color green); - connectToAll: #dependentClasses. -b nodes: classes. -b edges moveBehind; connectFrom: #superclass. -b normalizer normalizeSize: #numberOfLinesOfCode; normalizeColor: #numberOfLinesOfCode. -b layout cluster. -b - " - - - - | i | - i := RTShowEdge new. - interactions add: i. - ^ i -] - -{ #category : #public } -RTInteractionBuilder >> showLabel [ - "Public method - - | b | - b := RTMondrian new. - b interaction showEdge connectToAll: [ :v | Array with: v + 1 ]. - b interaction showLabel highlightObject: [ :v | v + 1 ]. - b nodes: #(1 2 2 3). - - b layout circle initialRadius: 10. - b - " - - " - slighly more elaborated example: -classes := Collection withAllSubclasses. -b := RTMondrian new. -b shape circle. -b interaction showEdge - shape: (RTArrowedLine new color: Color green); - connectToAll: #dependentClasses. - -b interaction showLabel - highlightObjects: #dependentClasses. - -b nodes: classes. -b edges moveBehind; connectFrom: #superclass. -b normalizer normalizeSize: #numberOfLinesOfCode; normalizeColor: #numberOfLinesOfCode. -b layout cluster. -b - " - - - - | i | - i := RTShowLabel new. - interactions add: i. - ^ i -] - -{ #category : #public } -RTInteractionBuilder >> snapToGrid [ - "Make the elements draggable and positioned on a grid" - | i cls | - cls := RTDraggable. - self removeInteractionOfType: cls. - i := RTDraggableSnapToGrid new. - interactions add: i. - ^ i -] - -{ #category : #'public - events-registering' } -RTInteractionBuilder >> when: event do: block [ - self addInteraction: [ :element | element when: event do: block ] -] diff --git a/src/Roassal2/RTInteractionBuilderTest.class.st b/src/Roassal2/RTInteractionBuilderTest.class.st deleted file mode 100644 index 735dca3b9..000000000 --- a/src/Roassal2/RTInteractionBuilderTest.class.st +++ /dev/null @@ -1,79 +0,0 @@ -Class { - #name : #RTInteractionBuilderTest, - #superclass : #RTTest, - #instVars : [ - 'builder' - ], - #category : #'Roassal2-Builder-Common' -} - -{ #category : #running } -RTInteractionBuilderTest >> setUp [ - super setUp. - builder := RTInteractionBuilder new -] - -{ #category : #tests } -RTInteractionBuilderTest >> testAddingAndRemovingInteraction [ - builder addInteraction: RTDraggable new. - self assert: builder numberOfInteractions equals: 1. - - builder removeInteractionOfType: RTAbstractDraggable. - self assert: builder numberOfInteractions equals: 0. - - builder addInteraction: RTConstrainedDraggable new. - self assert: builder numberOfInteractions equals: 1. - - builder removeInteractionOfType: RTAbstractDraggable. - self assert: builder numberOfInteractions equals: 0. - -] - -{ #category : #tests } -RTInteractionBuilderTest >> testAddingOneAction [ - builder action: #inspect. - self assert: builder numberOfInteractions equals: 1 -] - -{ #category : #tests } -RTInteractionBuilderTest >> testAddingTwoActions [ - | e | - builder action: #inspect; action: #browse. - self assert: builder numberOfInteractions equals: 2. - - e := RTElement new. - builder setUpElements: (Array with: e) asGroup. - self assert: e announcer numberOfSubscriptions equals: 1. - -] - -{ #category : #tests } -RTInteractionBuilderTest >> testDefault [ - self assert: builder numberOfInteractions equals: 0 -] - -{ #category : #tests } -RTInteractionBuilderTest >> testDraggableAndSnapToGrid [ - builder snapToGrid. - self assert: builder numberOfInteractions equals: 1 -] - -{ #category : #tests } -RTInteractionBuilderTest >> testDraggableAndSnapToGrid02 [ - builder draggable. - builder snapToGrid. - self assert: builder numberOfInteractions equals: 1 -] - -{ #category : #tests } -RTInteractionBuilderTest >> testMultipleDraggable [ - - builder draggable; draggable. - self assert: builder numberOfInteractions equals: 1. -] - -{ #category : #tests } -RTInteractionBuilderTest >> testPopupTextColor [ - builder popupText: [ :v | 'My number is ', v printString ] color: Color blue. - builder setUpElement: RTBox element. -] diff --git a/src/Roassal2/RTInteractionExample.class.st b/src/Roassal2/RTInteractionExample.class.st deleted file mode 100644 index f7e2f2628..000000000 --- a/src/Roassal2/RTInteractionExample.class.st +++ /dev/null @@ -1,342 +0,0 @@ -" -self new installTitle: 'GroupOfGroups' - code: - ' -^ v' - -" -Class { - #name : #RTInteractionExample, - #superclass : #RTAbstractExample, - #category : #'Roassal2-ExampleBrowser' -} - -{ #category : #sources } -RTInteractionExample >> exampleDragAndDrop01 [ - -| v e1 e2 | -v := RTView new. - -e1 := (RTBox new size: 10; color: Color gray) element. -e2 := (RTEllipse new size: 30; color: Color blue) element. -e1 @ RTDraggable. - -e1 translateTo: 50 @ 50. -v add: e1. -v add: e2. - -e2 @ (RTDragAndDroppable new - host: e1; - do: [ :fromElement :toElement | - | newElement alreadyNested | - newElement := (RTBox new size: 20) element. - v add: newElement. - alreadyNested := toElement nestedElements. - toElement unbindNestedElements. - RTNest new - layout: RTGridLayout new; - on: toElement nest: alreadyNested, (Array with: newElement) ]). - - ^ v -] - -{ #category : #icons } -RTInteractionExample >> exampleDragAndDrop01Icon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAABU0lEQVR4XuXWwQmDMBiG4dz0 -5kDiTVxLL26mE7jPZysUWtoB1D4v5B7ykD8p++53pYp/BD6Inw/ig/j5ID6Inw/ig/j5ID6I -nw/i54P4IH4+iA/i54P4IH4+iA/i54P4+SA+iJ8P4oP4+SA+iJ8P4oP4+SB+PogP4ueD+CB+ -PogP4ueD+CB+PoifD+KD+PkgPoifCrKuSdclTZPMc+KDnNiyJOW548/V9/+FciuQtv0FKcW/ -Iad1jCkf5EIdb8Y3Rl37I+vUhuGNUlXJtvkgfj6ID+Lng/j5ID6IHw0yjmOmadqT+3yN/xrk -wPBBLlRe+SPLzwfxQfx8EB/EzwfxQfx8ED8fxAfx80F8ED8fxAfx80F8ED8fxM8H8UH8fBAf -xM8H8UH8fBAfxM8H8fNBfBA/H8QH8fNBfBA/H8QH8fNB/HwQH8TPB/FB/HwQH8TPBxF7ALBq -biDM8YpuAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTInteractionExample >> exampleDraggingChildren [ - -| v es | -v := RTView new. -v @ RTDraggableView. - -es := RTLabel elementsOn: (1 to: 40). -v addAll: es. -RTEdgeBuilder new - view: v; - elements: es; - connectFrom: [ :aValue | aValue // 2 ]. -RTClusterLayout on: es. -es @ RTDraggableChildren. -^ v -] - -{ #category : #icons } -RTInteractionExample >> exampleDraggingChildrenIcon [ - ^ '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 -AAAASUVORK5CYII=' -] - -{ #category : #sources } -RTInteractionExample >> exampleExpandable [ - -| v s es expand methods | -v := RTView new. - -s := RTShapeBuilder new - rectangle; - width: [ :c | c numberOfVariables * 5 ]; height: #numberOfMethods. - -es := s elementsOn: RTShape withAllSubclasses. -v add: es. - -es @ RTPopup @ (RTLabeled new setAsHighlightable). - -expand := (RTExpandable new - group: [ :group :element | - methods := (RTBox new color: Color red) - elementsOn: element model rtmethods. - RTGridLayout on: methods. - methods @ RTPopup. - group addAll: methods]; - afterBlock: [ RTGridLayout on: es] ). -es @ expand. - -RTGridLayout on: es. -^ v - -] - -{ #category : #icons } -RTInteractionExample >> exampleExpandableIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAEi0lEQVR4XuWc6U7kMBAGef+H -HM7hvob7NFBWvshEmYUfu0tCtWT5iJ0MXU63Z0T3xtubX6YkG34V+IH4xQ/ED8QvfiB+IH7x -A/ED8YsfiB+IX/xA/OIH4gfiFz8QPxC/+IH4gfjFD8QPxC9+IH75GSCXl5fl+vq6XFxclIeH -h7K/v1/7FPop9/f35eDgoI4z5/DwsGxvb5fz8/PaPjk5Kbu7u+X09LTO29nZKavVquzt7dV5 -jNFmDus3NzdrvVwu67P5HFdXV+Xo6Kjej3HuzT1ubm5qzee4u7ur5enpqf9cXHt5eantXwOE -P+719bU8Pj7WPn9cV/q5KBuFMrdV4vHxca1RYJSOwmkDinW0gUTZ2toqi8WiAgEUNSCouQeF -ezLGM1iP0il8Np718fz6mRijBhqgfq3JAg6SNnXbz1j67ND2WtunjSJzDXl+fq47P/1cy31Z -gwzXtZ9nWOt9CDuVXZ1CP2Nte+z6d+e0436n/oVgNj5MU1/oZ6xtj12nYJqGc8bGMq4HguNk -Z2KbMS/4lLSpO+fcKw27j0OmnZ3dXsdR41PSxzewxg/km3J7e1uVnz72HCWiVEB9OORPSsNB -47BpUwNgoNje4bMWGHH0UzNNk31DOHW1/ZxyeEPOzs4+2XlA5WTEKQyF52ibkxRrqJnLPO7T -PsP/xfAvQMt3g9ac5btCSjufOXOCMCsgY/a+deI5NQ3nT8Un6ICsm+8H4gfiB+IH4gfiB+IH -MnMg/HrM+P/4ZdYP5BtA5i5+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+ -IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiB+IH4gfiA/KYRDE6xJ -EGdyk1ATqkYE7TogzCewk8J67rUuypaIX55D2g4/kC+E0AGiaAFB6DNBm4Q9U/4EJIlkyHNC -YT1rSEbDOv4DPjlVAEIhyjeBo0Tq0vcDGRF2brIEoUAgoXBqIFFQYBf4X4P/83Z0GRxKgkBp -p04WIiAwRjIZInQT3Tu1aN3J5zoZlrGcJ5k7h8QAkweSmPLkrcoupk1Wh2R3SK6r+A7elDh2 -3qg2B8pQki1o7K30AxkIqTCw9ygYxeMD8AvU7PgkKCNdRlfeyIXVtrt0G30OLe6HecPMxc9w -LQnJgEsNWD+QgXCaQmlJVIZy4+S5RmlynNTEZAGSMYClAIRx3pQcCrgva+LkOZHxBgJNCQST -gVnK6SaZf6jjXNm9SFLtxS/EITMn2eko9Nu5Ee6X5GZ+H7JGOG7GN6BMdij9JIpJtp602eW8 -JTFbncnqj7sxczFlzMHcsYZdz/Pin9okNH4gDZCUHEdRILY9CStRchJdJrsP1zFX9AHQmaqa -hilAgJZjcXIwAppo3GQWAtRcktFM5ti7TmFtxp9h9p+5ZvyZ9W9Zw+8hSeP3W2V2iZT9QPxA -/ED8QGYkw5R+fiB+8QPxA/GLH4hf/ED8QPziB+IH4hc/ED8Qv/iB+IH4xQ/EL34gfiB+8QPx -A/GLH4gfiF/+kbwDIevKLIeDipEAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTInteractionExample >> exampleGhostDraggable [ - | v e e2 | - v := RTView new. - e := RTBox new - color: Color blue muchDarker; - width: 150; - height: 200; - elementOn: 'drag me'. - e2 := RTBox new elementOn: 'I am here just so the view isnt zoomed too much'. - e2 translateTo: 200 @ 300. - v add: e. - v add: e2. - e @ RTGhostDraggable. - e - @ - (RTLabeled new - center; - color: Color white). - v @ RTGridView. - ^ v -] - -{ #category : #icons } -RTInteractionExample >> exampleGhostDraggableIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAADgAAABACAYAAABP97SyAAABm0lEQVR4XuVZu07DMBQ1qAu/ -wtCJX2BKBz4AWFqQmPgCEjYWNiZmxMJUiQG1E3/QD4Ad9bUUV8iK40ud1CpSjBrTVFg+kY58 -c61c6+ocHccyk1IqWj5yGUtLbt28LZdlWW11TC3XOixNU6VfNExsy62b32adn3Ctw2ToDEp8 -iQYoUT05Hs9zDIefpbhqbjTi+ShEsbg3DE4mXDGWUIGYyrFbrtd784vB6XS+aPCaCiRUjt1y -/f678spkNm8w9qfB+iV6tcBl6BKNQ5doErJE8V0Un0F8BvFNBl+ivzPY2LsLm8Hz41c6bd7Q -0ckzdTpdujh8oYPols7aT4GYzM5qbO7fr+Z38U0G32Tw90F8BvH/ZPAlii9RfIn+R4OmgImL -BhOqC1qitnU2yVX9xsrgbPalWq3HHFH0UIqr5gwGgw+FfzeBf32Gf32GL9FwJVqnLftWB99k -8E0G32TwTWb7JoPvovgSxWcQfx90bVC/CyHC3Qd1c5xz/H0Q/08G32TwJYovUXwG8RnENxl8 -ieIfl/BP9PjnQXyT+VudbwqnpsQOME32AAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTInteractionExample >> exampleGridDraggable [ - | v es | - v := RTView new. - v @ RTDraggableView. - v - @ - (RTGridView new - color: Color gray; - gridSize: 20). - v @ RTZoomableView. - es := RTBox new - borderColor: Color black; - color: (Color green alpha: 0.6); - size: 30; - elementsOn: #(#topLeft #center). - v addAll: es. - es first @ (RTDraggableSnapToGrid new gridSize: 40). - es second @ (RTDraggableSnapToGrid new center gridSize: 40). - es @ RTResizable. - es @ RTLabeled. - es first translateTo: 70 negated @ 90 negated. - es second translateTo: 70 @ 110. - ^ v -] - -{ #category : #icons } -RTInteractionExample >> exampleGridDraggableIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABeCAYAAADVA7GfAAABwUlEQVR4XuXbTQqCQACAUc9t -RNeKpJ3HEG/gvnFo+tlEY5vBwIleIkMLFfl8+IM2McYUQkixYFzOpcutXf+W29piX0qWbW6P -3/NPybj8lS63dv1bbmuLfSlZ1g/iB/GD+EH8IH6Q1UGif5XlX2X5QnwhvhBfiC/EF+IL8YX4 -QnwhvhBfiC/EF+IL8YX4QnwhvhBfiC/EF+IL8YX4Qnwh1Y+qOc7Z7AupeFQ9AzS3fPKFVDyq -LuHyEcQX4gvxhWRCFpMvxL/K8l+U84P4QfwgfhA/iB/ED+IH8YP4QfzH7/6NoS/EF+IL8YX4 -QnwhvhBfiC/EF5KPwzD4Qn5FyDiOqe/7NE2TL8Q/h/hC/HOIL8QX4gvxhfhCfCG+EF+IL8QX -4gvxhfhCfCG+EF+I/xqQH8QP4gfxg/hB/CB+ED+IH8S/D/lyPF/P6fA2neaTfx9SU8jhMb1/ -hr2LO19ITSH76z77Nr6dW1+IL8QX8hq72KU2tq/5GI6+EP8qyxfiP+31hfhCfCG+EF+IL8QX -4gvxhfhCfCG+EF+IL8QX4gvxhfhCfCG+EF+IL8QX4gvxhfhC/Bfl/CB+ED+IH8QP4gf5wyB3 -CTnGiKMrhLsAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTInteractionExample >> exampleResizable [ - - | v g | - v := RTView new. - g := RTGroup new. - g - add: (RTBox new - size: 100; - borderColor: Color black; - borderWidth: 1; - element); - add: ( RTRoundedBox new - size: 50; - borderRadius: 20; - borderColor: Color black; - borderWidth: 1; - element); - add: (RTEllipse new - width: 100; - height: 30; - borderColor: Color black; - element). - - v addAll: g. - - RTGridLayout on: g. - - g @ RTDraggable. - g @ RTResizable. - - v @ RTZoomableView. - -^ v -] - -{ #category : #icons } -RTInteractionExample >> exampleResizableIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABeCAYAAADVA7GfAAACDElEQVR4XuXaQYsBUQDA8f3G -voK7D6EcuKGUi6McjRSRwkEphNx5s/u2dtut1WyZJru/f70Lr3eYXzMPz0ua+j1TL/4l8EH8 -fBAfxM8H8UH8fBAfxM8H8UH8fBA/H8QH8fNBfBA/H8QH8fNBfBA/H8TPB/FB/HwQH8TPB/FB -/HwQH8TPB/HzQXwQPx/EB8mjy+USttttbqPdboev6zebzbBer9OP92ezWdrv94MPcqfj8fh+ -wfIapVLpc+1Op3N37VqtFnyQAkGq1WrmunGOD1IQSJIkmXPjHB+kIJDfzg9v+SBPBHK73XwQ -/w4BQZbLZebcOMffQwoCqdfrmes2Gg3/U1ZRIPv9PrRarbtrDwaDcDgcfJAivxjG/aHX64Vy -uRzi63FUKpXQ7XbDs+wdFIj/W5YP4oP4ID6ID+KD+CA+iA/ig/ggPogP4oP4/SOQ3W4Xzudz -Oh6Pw2q1yrwbRqNRiD8ibjab4IPk2Nu5RFgsFg8/uiLQs5wA/lmQ0+mU5rmHDIdDH+SR5vN5 -rpt6vNt8kBweWfFx8wjEdDp9/2fi9Xr1QfIqnuDFTT2OyWQSkiQJP52Nx00/An7M9Td1Px/E -B/HzQXwQPx/EzwfxQfx8EB/EzwfxQfx8EB/Ezwfx80F8ED8fxAfx80F8ED8fxAfx80H8fBAf -xM8H8UH8fBAfxM8H8UH8fBC/b70C+18/bEtmoXgAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTInteractionExample >> exampleSelectableElements [ - -| b label labelShape | -b := RTMondrian new. -b nodes: Collection withAllSubclasses. -b layout flow. -b normalizer - normalizeSize: #numberOfMethods. - -b build. - -"Adding a label" -labelShape := RTLabel new text: 'Nothing selected'. -label := labelShape element. -b view add: label. -TRConstraint move: label below: b view elements. - -"Changing the label according to the selection" -b view elements @ (RTSelectable new selectionCallback: [ :es | label trachelShape text: es size asString, ' selected elements']). - -^ b view -] - -{ #category : #icons } -RTInteractionExample >> exampleSelectableElementsIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAD30lEQVR4XuWcW0tqQRTH+3B9 -oF76HkpPEb4E+VAQBXZ9SC1CUImIhKAo6EJQESjaBXJ5zhpYMmfO3rnNLjt/fxiWe/ZsH+bn -zFprXDrR6/GVJk3wp4APhC8+ED4QvvhA+ED44gPhA+GLD4QPhC8+EL74QPhA+OID4QPhiw+E -D4QvPhA+EL74QPjiA+ED4YsPhA/kC9VoNKRarcrFxYUsLS2J9qm1pvfDMf44s1HvYVaf5wNJ -qJubm55O5P39vdTrddc3Ozvbb9qnY87Pz+Xk5ESsX+WP39nZ+ec9zG5tbcnZ2RkfyCgKgZhs -wv0+/pb1g0D4PoQvHhBdAeYTfGtbk9/XbDZlYWGhv22p3zC/Ej4fjk3TSks1kE6nIw8PDxJC -UkeubdBEPj8///c8f4WMGGWFkZFvfThxTSOwMMJ6eXmRo6MjSaMP+jVbVggkDH2j2unpqZv4 -6+tr2dzclHDLsvfmA/nEaOujn/LHx0e3cvhA+BqfKKtYLA6MnKLuJbF8IAmjLNtW1AeoP4ga -p2Pe3t6kXC73fQV/hXyBdJ9P2u7u7qTVan3I8oEklEZJSZolghpNWVQ1jOUD4ev3OvWwRTl2 -c+j+cYn/Oo1HJGO1QvRIJMwh1I+oT/CBWEKo2xp/hfA1vnlI2KJOe+PyEn9seBLsWz6QEYH4 -OUrS9+H7kC8Ewt+y+ED4QPhA+ED4QPj6ZSvEMvPQRoWucUfzcZZf5PADGXycdJyGzvwVMoSs -dtev332vTndY2263ZX193Vk+kATST7A2q/HVFaDnVX4Via2IQTYcb9UnegamX27xgSTQoBKf -JM3KgKLKgXzLB/INQKwMyID4Tp8PhK/xCHvDFiaJFsLa6e4gG1f7ywfySZk7f4XwgfCB8IGk -OOoKfQofyA8A+Ix8ZFDjAxlii/oOKHwgQ64Qfh6Sskz9vV9S2S+i4o5Lklg+kCGARP2Syqrc -1eoBZKlU6tf6+sclfCB8MY5O/NxDvzXkA0lRQsgHwgfCB8IHwhcfSKjp6Wk5PDyUtbU1mZqa -kpWVFdnf35e9vT1ZXV11q2JmZsb+AECurq7k+PhYlpeXJZfLye3trXvm74py15eXl5LNZvl/ -rfFR6SROTk66yc9kMm6it7e3JZ/P918XCgU3wfPz87KxsSEHBwcyNzcnu7u7UqlU3D39fxO9 -rtVqrqqED2REaVmOKux/fX2VxcVF168VKGq73a5LDPWeXmsFydPTU/+av2XxxQfCB8IXHwgf -CF98IHzxgfCB8MUHwgfCFx8IHwhffCB8IHzxgfCB8KeAD4QvPhA+EL74QPhA+OID4QPhiw+E -rT/v5CT+ky0riwAAAABJRU5ErkJggg==' -] - -{ #category : #accessing } -RTInteractionExample >> label [ - ^ 'Interaction' -] diff --git a/src/Roassal2/RTInteractionTest.class.st b/src/Roassal2/RTInteractionTest.class.st deleted file mode 100644 index 253bfc586..000000000 --- a/src/Roassal2/RTInteractionTest.class.st +++ /dev/null @@ -1,45 +0,0 @@ -Class { - #name : #RTInteractionTest, - #superclass : #RTTest, - #instVars : [ - 'view', - 'ui' - ], - #category : #'Roassal2-Core-Tests' -} - -{ #category : #running } -RTInteractionTest >> setUp [ - super setUp. - view := RTView new. -] - -{ #category : #running } -RTInteractionTest >> tearDown [ - ui ifNotNil: [ :aUI | ui := nil. aUI delete. ]. - super tearDown -] - -{ #category : #tests } -RTInteractionTest >> testBlockAsInteraction [ - - | e | - e := RTBox element. - e @ ([ :ee | ee ]) -] - -{ #category : #tests } -RTInteractionTest >> testMouseHoverZoom [ - | element interaction | - element := RTBox new size: #yourself; elementOn: 30. - interaction := RTMouseHoverZoom new. - interaction desiredExtent: 60 @ 60; simple. - element @ interaction. - view add: element. - self assert: element extent equals: 30 @ 30. - element testCaseAnnounce: TRMouseEnter. - self assert: element extent equals: 60 @ 60. - element testCaseAnnounce: TRMouseLeave. - self assert: element extent equals: 30 @ 30. - -] diff --git a/src/Roassal2/RTInteractiveComposer.class.st b/src/Roassal2/RTInteractiveComposer.class.st deleted file mode 100644 index e8b7b62a3..000000000 --- a/src/Roassal2/RTInteractiveComposer.class.st +++ /dev/null @@ -1,67 +0,0 @@ -Class { - #name : #RTInteractiveComposer, - #superclass : #RTObject, - #instVars : [ - 'rules', - 'nextWindow' - ], - #category : #'Roassal2-InteractiveComposer' -} - -{ #category : #'as yet unclassified' } -RTInteractiveComposer >> for: aClass do: oneArgBlock [ - self if: [ :obj | obj class == aClass or: [ obj class inheritsFrom: aClass ] ] do: oneArgBlock -] - -{ #category : #'as yet unclassified' } -RTInteractiveComposer >> forCollectionOf: aClass do: oneArgBlock [ - self if: [ :obj | (obj isCollection and: [ obj notEmpty ]) and: [ obj anyOne class inheritsFrom: aClass ] ] do: oneArgBlock -] - -{ #category : #'as yet unclassified' } -RTInteractiveComposer >> if: aPredicateAsOneArgBlock do: oneArgBlock [ - rules add: (aPredicateAsOneArgBlock -> oneArgBlock). -] - -{ #category : #'as yet unclassified' } -RTInteractiveComposer >> initialize [ - super initialize. - rules := OrderedCollection new -] - -{ #category : #'as yet unclassified' } -RTInteractiveComposer >> openOn: anObject [ - "Return the window that was open" - | r builderOrView window | - r := (self ruleFor: anObject). - r ifNil: [ ^ nil ]. - builderOrView := (r value rtValue: anObject). - self prepareForInteraction: builderOrView. - window := builderOrView view open. - builderOrView view canvas camera focusOnCenterScaled. - ^ window -] - -{ #category : #'as yet unclassified' } -RTInteractiveComposer >> prepareForInteraction: aViewOrBuilder [ - | view | - aViewOrBuilder build. - view := aViewOrBuilder view. - - view elements when: TRMouseClick do: [ :evt | - | w | - - w := self openOn: evt element model. - (nextWindow notNil and: [ w notNil ]) ifTrue: [ - w position: nextWindow position. - w extent: nextWindow extent. - nextWindow delete. - ]. - nextWindow := w. - ] -] - -{ #category : #'as yet unclassified' } -RTInteractiveComposer >> ruleFor: anObject [ - ^ rules detect: [ :assoc | assoc key value: anObject ] ifNone: [ ^ nil ] -] diff --git a/src/Roassal2/RTInteractiveComposerExample.class.st b/src/Roassal2/RTInteractiveComposerExample.class.st deleted file mode 100644 index 7642bb791..000000000 --- a/src/Roassal2/RTInteractiveComposerExample.class.st +++ /dev/null @@ -1,66 +0,0 @@ -Class { - #name : #RTInteractiveComposerExample, - #superclass : #RTObject, - #category : #'Roassal2-InteractiveComposer' -} - -{ #category : #examples } -RTInteractiveComposerExample >> example01 [ - - -| i b | -i := RTInteractiveComposer new. - -i forCollectionOf: Class do: [ :someClasses | - b := RTMondrian new. - b nodes: someClasses. - b normalizer normalizeSize: #numberOfMethods; normalizeColor: #numberOfLinesOfCode. - b layout flow. - b ]. - -i for: Class do: [ :aClass | - b := RTMondrian new. - b shape label text: #selector. - b nodes: aClass methods. - b edges connectToAll: #dependentMethods. - b layout force. - b -]. - -i openOn: Collection withAllSubclasses. - -] - -{ #category : #examples } -RTInteractiveComposerExample >> example02 [ - - -| i b | -i := RTInteractiveComposer new. - -i forCollectionOf: Class do: [ :someClasses | - b := RTMondrian new. - b nodes: someClasses. - b normalizer normalizeSize: #numberOfMethods; normalizeColor: #numberOfLinesOfCode. - b layout flow. - b ]. - -i for: Class do: [ :aClass | - b := RTMondrian new. - b nodes: aClass methods. - b edges connectToAll: #dependentMethods. - b layout tree. - b normalizer normalizeSize: #numberOfLinesOfCode. - b -]. - -i for: CompiledMethod do: [ :aMethod | - b := RTMondrian new. - b shape label. - b node: aMethod. - b -]. - -i openOn: Collection withAllSubclasses. - -] diff --git a/src/Roassal2/RTInteractiveComposerTest.class.st b/src/Roassal2/RTInteractiveComposerTest.class.st deleted file mode 100644 index 7b965b500..000000000 --- a/src/Roassal2/RTInteractiveComposerTest.class.st +++ /dev/null @@ -1,84 +0,0 @@ -Class { - #name : #RTInteractiveComposerTest, - #superclass : #TestCase, - #instVars : [ - 'i' - ], - #category : #'Roassal2-InteractiveComposer' -} - -{ #category : #running } -RTInteractiveComposerTest >> setUp [ - super setUp. - i := RTInteractiveComposer new. -] - -{ #category : #tests } -RTInteractiveComposerTest >> testBasic [ - | b window | - i - forCollectionOf: Class - do: [ :someClasses | - b := RTMondrian new. - b nodes: someClasses. - b normalizer - normalizeSize: #numberOfMethods; - normalizeColor: #numberOfLinesOfCode. - b layout flow. - b ]. - i - for: Class - do: [ :aClass | - b := RTMondrian new. - b shape label text: #selector. - b nodes: aClass rtmethods. - b edges connectToAll: #dependentMethods. - b layout grid. - b ]. - window := i openOn: Collection withAllSubclasses. - window delete. - - (i openOn: Collection) delete. - (i openOn: Array) delete. - i openOn: 'hello world' -] - -{ #category : #tests } -RTInteractiveComposerTest >> testBasic2 [ - | b w1 w2 w3 | - i - forCollectionOf: Class - do: [ :someClasses | - b := RTMondrian new. - b nodes: someClasses. - b normalizer - normalizeSize: #numberOfMethods; - normalizeColor: #numberOfLinesOfCode. - b layout flow. - b ]. - i - for: Class - do: [ :aClass | - b := RTMondrian new. - b nodes: aClass rtmethods. - b edges connectToAll: #dependentMethods. - b layout tree. - b normalizer normalizeSize: #numberOfLinesOfCode. - b ]. - i - for: CompiledMethod - do: [ :aMethod | - b := RTMondrian new. - b shape label. - b node: aMethod sourceCode. - b ]. - - self assert: (i ruleFor: Array methods first) notNil. - - w1 := i openOn: Collection withAllSubclasses. - w2 := i openOn: Array. - w3 := i openOn: Array rtmethods first. - w1 delete. - w2 delete. - w3 delete. -] diff --git a/src/Roassal2/RTInteractiveSVGExporter.class.st b/src/Roassal2/RTInteractiveSVGExporter.class.st deleted file mode 100644 index 42963e7ab..000000000 --- a/src/Roassal2/RTInteractiveSVGExporter.class.st +++ /dev/null @@ -1,189 +0,0 @@ -" -RTInteractiveSVGExporter exists for the sole porpouse of adding interactions, coming from the RTHTMLExporter, smoothly -" -Class { - #name : #RTInteractiveSVGExporter, - #superclass : #RTSVGExporter, - #instVars : [ - 'interactions', - 'marginX', - 'marginY', - 'paddingX', - 'paddingY', - 'functions', - 'globals', - 'buttons', - 'buttonStart' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #svg } -RTInteractiveSVGExporter >> addButtons [ - self interactions - do: [ :l | - l - do: [ :i | - (i type beginsWith: 'button') - ifTrue: [ - (buttons includes: i fixedName) - ifFalse: [ - buttonStart := i addSelf: stream startingPoint: buttonStart. - buttons add: i fixedName ] ] ] ]. - stream nextPutAll: String cr -] - -{ #category : #svg } -RTInteractiveSVGExporter >> addMarginsAndGlobals: bounds [ - | notChecked | - notChecked := true. - self interactions - do: [ :l | - l - do: [ :i | - i type = 'popup' - ifTrue: [ - i bounds: bounds. - marginX := marginX max: i xBound. - marginY := marginY max: i yBound ]. - ((i type beginsWith: 'button') and: [ notChecked ]) - ifTrue: [ - | val | - val := (TRLabelShape new - text: i getName; - encompassingRectangle) height. - paddingY := paddingY max: val. - notChecked := false ]. - (globals includes: i class) - ifFalse: [ - i addGlobalHandlers: stream. - globals add: i class ] ] ]. -] - -{ #category : #adding } -RTInteractiveSVGExporter >> addScript [ - stream - nextPutAll: ' ' -] - -{ #category : #svg } -RTInteractiveSVGExporter >> addStart: bounds [ - self - addVersion; - addMarginsAndGlobals: bounds; - addCanvasSize: bounds; - addCanvasColor; - addXLinkVersion; - addScript; - selfAddHelperElements; - addButtons; - addCode. -] - -{ #category : #svg } -RTInteractiveSVGExporter >> addVersion [ - stream nextPutAll: '> exportOnStream: fileStream [ - |bounds| - bounds := self fixedEncompassingRectangle. - self stream: fileStream. - self addStart: bounds. - self setInteractions. - RTSVGVisitor visit: view on: stream with: self interactions canvas: bounds center: (marginX+paddingX)@(marginY + paddingY). - self addEnd. -] - -{ #category : #svg } -RTInteractiveSVGExporter >> getFinalBounds: bounds [ - canvasWidth := (bounds width + 1 + marginX + paddingX) rounded. - canvasHeight := (bounds height + 1 + marginY + paddingY) rounded. - finalWidth := canvasWidth. - finalHeight := canvasHeight. - code = nil - ifFalse: [ | maxW line w h| - maxW := 0. - line := ''. - code lines do: [ :l | - maxW := maxW max: l size. - maxW = l size - ifTrue: [ line := l ]. - ]. - w := (TRLabelShape new - text: line; - width). - h := (TRLabelShape new - text: line; - height). - finalWidth := canvasWidth + w. - finalHeight := canvasHeight max: (h * code lines size) - ]. - ^ Array with: finalWidth with: finalHeight -] - -{ #category : #initialization } -RTInteractiveSVGExporter >> initialize [ - super initialize. - interactions := Dictionary new. - marginX := 0. - marginY := 0. - paddingX := 0. - paddingY := 0. - functions := OrderedCollection new. - globals := OrderedCollection new. - buttons := OrderedCollection new. - buttonStart := 0@0. -] - -{ #category : #accessing } -RTInteractiveSVGExporter >> interactions [ - ^ interactions -] - -{ #category : #accessing } -RTInteractiveSVGExporter >> interactions: anObject [ - interactions := anObject -] - -{ #category : #svg } -RTInteractiveSVGExporter >> selfAddHelperElements [ - stream - nextPutAll: String cr; - nextPutAll: - '' , String cr; - nextPutAll: '' , String cr -] - -{ #category : #accessing } -RTInteractiveSVGExporter >> setInteractions [ - view canvas shapes do: [ :s | | list | - list := TRPlatform current validInteractionsOf: s oklist: (Array with: #RTPopup). - list do: [:pop | | interaction elements group | - [ - interaction := RTSVGGroupPopup new. - elements := pop createPopupFor: s element. - interaction group: elements. - group := interactions at: s ifAbsentPut: [ OrderedCollection new ]. - group add: interaction. - ] on: Error do: [ :ex| ] ] ]. -] diff --git a/src/Roassal2/RTInteractiveTreeBuilder.class.st b/src/Roassal2/RTInteractiveTreeBuilder.class.st deleted file mode 100644 index d1355a743..000000000 --- a/src/Roassal2/RTInteractiveTreeBuilder.class.st +++ /dev/null @@ -1,278 +0,0 @@ -" -This is a new builder to create a visualization of nodes with text -" -Class { - #name : #RTInteractiveTreeBuilder, - #superclass : #RTAbstractTreeBuilder, - #instVars : [ - 'labelShape', - 'lineShape', - 'layout', - 'gap', - 'padding', - 'afterClose', - 'afterOpen' - ], - #category : #'Roassal2-Experimental' -} - -{ #category : #accessing } -RTInteractiveTreeBuilder >> afterClose: aBlock [ - afterClose := aBlock -] - -{ #category : #accessing } -RTInteractiveTreeBuilder >> afterOpen: aBlock [ - afterOpen := aBlock -] - -{ #category : #interactions } -RTInteractiveTreeBuilder >> clickOnElement: e [ - | translator | - translator := RTSmoothLayoutTranslator new. - translator nbCycles: 1. - - (self isElementOpened: e) - ifTrue: [ self closeElement: e ] - ifFalse: [ self openElement: e ]. - - layoutBuilder layout - translator: translator; - on: (e view elements select: [ :el | el shape class = self shape shape class ]). - layoutBuilder layout - translator: translator; - on: (e view elements select: [ :el | el shape class = self shape shape class ]). -] - -{ #category : #interactions } -RTInteractiveTreeBuilder >> closeElement: e [ - | children | - - children := e attributes at: self childrenKey. - self closeNodes: children. - e attributes at: #open put: false. - afterClose ifNotNil: [ afterClose rtValue: e ]. -] - -{ #category : #interactions } -RTInteractiveTreeBuilder >> closeNodes: arr [ - arr do: [ :e | - self removeIfPossible: e . - self removeIfPossible: (e attributes at: #label). - e connectedEdges do: #remove. - self closeNodes: (e attributes at: self childrenKey) - ]. -] - -{ #category : #private } -RTInteractiveTreeBuilder >> controlPointsFor: anEdge [ - | x1 y1 x2 y2 | - (layout = #leftward or: [ layout = #rightward ]) - ifTrue: [ - x1 := x2 := (anEdge from position x + anEdge to position x) / 2. - y1 := anEdge from position y. - y2 := anEdge to position y ] - ifFalse: [ - y1 := y2 := (anEdge from position y + anEdge to position y) / 2. - x1 := anEdge from position x. - x2 := anEdge to position x] . - - ^ Array with: x1@y1 with: x2@y2. -] - -{ #category : #private } -RTInteractiveTreeBuilder >> createEdges: arr [ - | edges | - edges := RTGroup new. - arr do: [ :e | | children | - children := e attributes at: self childrenKey. - children do: [ :child | - edges add: (self lineShape edgeFrom: e to: child) ]. - edges addAll: (self createEdges: children) ]. - ^ edges. -] - -{ #category : #private } -RTInteractiveTreeBuilder >> createLabels [ - ^ elements collect: [ :e | | lbl const isLeaf | - lbl := self labelShape elementOn: e model. - e attributes at: #label put: lbl. - const := RTConstraint movable: lbl fix: e. - const - horizontalPadding: padding x; - verticalPadding: padding y; - outer. - isLeaf := (e attributes at: self childrenKey) isEmpty. - layout = #rightward ifTrue: [ const left. - isLeaf ifTrue: [ const right ] ]. - layout = #leftward ifTrue: [ const right. - isLeaf ifTrue: [ const left ] ]. - layout = #upward - ifTrue: [ const right; top ]. - layout = #downward - ifTrue: [ const right; top ]. - const stick. - lbl - ]. -] - -{ #category : #hooks } -RTInteractiveTreeBuilder >> createView [ - ^ RTView new @ RTDraggableView @ RTZoomableView -] - -{ #category : #layout } -RTInteractiveTreeBuilder >> downward [ - layout := #downward. - layoutBuilder tree. -] - -{ #category : #'accessing - gaps' } -RTInteractiveTreeBuilder >> gap [ - ^ gap -] - -{ #category : #'accessing - gaps' } -RTInteractiveTreeBuilder >> gap: aPoint [ - gap := aPoint -] - -{ #category : #'accessing - gaps' } -RTInteractiveTreeBuilder >> horizontalGap: aNumber [ - gap := aNumber @ gap y. -] - -{ #category : #'accessing - gaps' } -RTInteractiveTreeBuilder >> horizontalPadding: aNumber [ - padding := aNumber @ padding y -] - -{ #category : #initialization } -RTInteractiveTreeBuilder >> initialize [ - super initialize. - self shape circle size: 15; color: Color white; - borderColor: (Color colorFrom: '#4682B4'); borderWidth: 2. - - labelShape := RTShapeBuilder new. - labelShape shape: (RTRotatedLabel new). - labelShape color: Color black; text: #yourself. - self afterClose: [ :e | e trachelShape color: Color blue ]. - self afterOpen: [ :e | e trachelShape color: Color white ]. - self interaction draggable; popup; - when: TRMouseClick do: [:evt | self clickOnElement: evt element ]. - - layoutBuilder := RTLayoutBuilder new. - lineShape := RTShapeBuilder new. - lineShape shape: (RTBezier4Line new - controllingElements: [:e | self controlPointsFor: e ] ) . - self paddingText: 10@0. - self gap: 100@100. - self rightward. - -] - -{ #category : #interactions } -RTInteractiveTreeBuilder >> isElementOpened: e [ - ^ e attributes at: #open ifAbsentPut: [ true ]. -] - -{ #category : #accessing } -RTInteractiveTreeBuilder >> labelShape [ - ^ labelShape -] - -{ #category : #layout } -RTInteractiveTreeBuilder >> leftward [ - layout := #leftward. - layoutBuilder horizontalTree horizontallyReverse. - -] - -{ #category : #accessing } -RTInteractiveTreeBuilder >> lineShape [ - ^ lineShape -] - -{ #category : #interactions } -RTInteractiveTreeBuilder >> openChildren: arr parent: p [ - | temp | - temp := OrderedCollection new. - arr do: [ :e | - (self isElementOpened: e) - ifFalse: [ - e attributes at: #open put: true. - afterOpen ifNotNil: [ afterOpen rtValue: e ] ]. - temp add: e. - e translateTo: p position. - temp add: (e attributes at: #label). - temp add: (self lineShape edgeFrom: p to: e). - temp addAll: (self openChildren: (e attributes at: self childrenKey) parent: e) - ]. - ^ temp - -] - -{ #category : #interactions } -RTInteractiveTreeBuilder >> openElement: e [ - | children | - - children := e attributes at: self childrenKey. - e view addAll: (self openChildren: children parent: e). - e attributes at: #open put: true. - afterOpen ifNotNil: [ afterOpen rtValue: e ]. -] - -{ #category : #'accessing - gaps' } -RTInteractiveTreeBuilder >> paddingText [ - ^ padding -] - -{ #category : #'accessing - gaps' } -RTInteractiveTreeBuilder >> paddingText: aPoint [ - padding := aPoint -] - -{ #category : #interactions } -RTInteractiveTreeBuilder >> removeIfPossible: e [ - e view ifNotNil: [ e remove ]. -] - -{ #category : #hooks } -RTInteractiveTreeBuilder >> renderIn: aView [ - | edges labels | - aView addAll: elements. - edges := self createEdges: self rootNodes. - aView addAll: edges. - edges pushBack. - - layoutBuilder layout - horizontalGap: gap x; - verticalGap: gap y; - on: elements. - - labels := self createLabels. - aView addAll: labels. - -] - -{ #category : #layout } -RTInteractiveTreeBuilder >> rightward [ - layout := #rightward. - layoutBuilder horizontalTree -] - -{ #category : #layout } -RTInteractiveTreeBuilder >> upward [ - layout := #upward. - layoutBuilder tree verticallyReverse. -] - -{ #category : #'accessing - gaps' } -RTInteractiveTreeBuilder >> verticalGap: aNumber [ - gap := gap x @ aNumber. -] - -{ #category : #'accessing - gaps' } -RTInteractiveTreeBuilder >> verticalPadding: aNumber [ - padding := padding x @ aNumber -] diff --git a/src/Roassal2/RTInteractiveTreeBuilderTest.class.st b/src/Roassal2/RTInteractiveTreeBuilderTest.class.st deleted file mode 100644 index 78e5fa7a5..000000000 --- a/src/Roassal2/RTInteractiveTreeBuilderTest.class.st +++ /dev/null @@ -1,45 +0,0 @@ -" -A RTInteractiveTreeBuilderTest is a test class for testing the behavior of RTInteractiveTreeBuilder -" -Class { - #name : #RTInteractiveTreeBuilderTest, - #superclass : #TestCase, - #category : #'Roassal2-Tests' -} - -{ #category : #tests } -RTInteractiveTreeBuilderTest >> test01 [ - "the basic test" - | b | - b := RTInteractiveTreeBuilder new. - b explore: String using: #subclasses. - b build. -] - -{ #category : #tests } -RTInteractiveTreeBuilderTest >> test02 [ - "the setters and getters" - | b | - b := RTInteractiveTreeBuilder new. - b shape box color: Color red. - b labelShape text: [ :model | model name asUppercase ]. - b lineShape color: Color red. - b horizontalGap: 250. - b verticalGap: 10. - b horizontalPadding: 10. - self assert: b interaction numberOfInteractions equals: 3. - - b explore: Collection using: #subclasses. - b build -] - -{ #category : #tests } -RTInteractiveTreeBuilderTest >> test03 [ - "the layout" - | b | - b := RTInteractiveTreeBuilder new. - b rightward. - b leftward. - b upward. - b downward. -] diff --git a/src/Roassal2/RTInterpolator.class.st b/src/Roassal2/RTInterpolator.class.st deleted file mode 100644 index 92ad206e9..000000000 --- a/src/Roassal2/RTInterpolator.class.st +++ /dev/null @@ -1,46 +0,0 @@ -" -I am a base Interpolator, my sbuclasses are - RTColorInterpolator, and RTNumberInterpolator - -" -Class { - #name : #RTInterpolator, - #superclass : #RTObject, - #instVars : [ - 'start', - 'stop' - ], - #category : #'Roassal2-Builder-Grapher-Scaling' -} - -{ #category : #'as yet unclassified' } -RTInterpolator class >> interpolate: a and: b [ - | clazz | - clazz := self interpolatorFor: b. - - ^ clazz new start: a; stop: b . - -] - -{ #category : #interpolation } -RTInterpolator class >> interpolatorFor: b [ - (b isString or: [ b isColor ]) ifTrue: [ ^ RTColorInterpolator ]. - b isNumber ifTrue: [ ^ RTNumberInterpolator ]. - - self error: 'Invalid value for interpolator' -] - -{ #category : #accessing } -RTInterpolator >> interpolate: anObject [ - self subclassResponsibility -] - -{ #category : #accessing } -RTInterpolator >> start: anObject [ - start := anObject -] - -{ #category : #accessing } -RTInterpolator >> stop: anObject [ - stop := anObject -] diff --git a/src/Roassal2/RTIntrospectionTest.class.st b/src/Roassal2/RTIntrospectionTest.class.st deleted file mode 100644 index dceb9cbbb..000000000 --- a/src/Roassal2/RTIntrospectionTest.class.st +++ /dev/null @@ -1,35 +0,0 @@ -Class { - #name : #RTIntrospectionTest, - #superclass : #RTTest, - #category : #'Roassal2-Exporter-HTML5' -} - -{ #category : #tests } -RTIntrospectionTest >> testHighlightable [ - - | e | - e := RTElement new. - self deny: (e hasInteraction: RTHighlightable). - e @ RTHighlightable. - self assert: (e hasInteraction: RTHighlightable). -] - -{ #category : #tests } -RTIntrospectionTest >> testPopup [ - - | e | - e := RTElement new. - self deny: (e hasInteraction: RTPopup). - e @ RTPopup. - self assert: (e hasInteraction: RTPopup). -] - -{ #category : #tests } -RTIntrospectionTest >> testPopup2 [ - - | e aPopup | - e := RTElement new. - aPopup := RTPopup text: 'zork'. - e @ aPopup. - self assert: (e getInteractionForClass: RTPopup) == aPopup. -] diff --git a/src/Roassal2/RTJavascriptVisitor.class.st b/src/Roassal2/RTJavascriptVisitor.class.st deleted file mode 100644 index ace5790ea..000000000 --- a/src/Roassal2/RTJavascriptVisitor.class.st +++ /dev/null @@ -1,769 +0,0 @@ -" -I am a class to visit all the nodes of one RTView -" -Class { - #name : #RTJavascriptVisitor, - #superclass : #RTVisitor, - #instVars : [ - 'view', - 'stream', - 'validInteractions', - 'exportFixedShapes', - 'maxSize' - ], - #category : #'Roassal2-Exporter-HTML5' -} - -{ #category : #helpers } -RTJavascriptVisitor >> addBorderColor: c [ - c ifNil: [ ^ self]. - - stream nextPutAll: ('bordercolor: {r: <1p>, g: <2p>, b:<3p>' expandMacrosWith: (c red*255) rounded with: (c green*255) rounded with: (c blue*255) rounded ). - c alpha = 1 ifTrue: [ stream nextPutAll: '}, ' ] - ifFalse: [ stream nextPutAll: (', a: <1p>}, ' expandMacrosWith: c alpha) ] - -] - -{ #category : #helpers } -RTJavascriptVisitor >> addBorderWidth: aShape [ - (aShape strokePaint isNil or: [ aShape strokeWidth < 0 ]) ifTrue: [ ^ self ]. - stream - nextPutAll: 'sw: '; - nextPutAll: (self number: aShape strokeWidth); - nextPutAll: ','. -] - -{ #category : #helpers } -RTJavascriptVisitor >> addColor: c [ - stream nextPutAll: 'color: '. - self addColorBase: c. - stream nextPutAll: ', '. - -] - -{ #category : #helpers } -RTJavascriptVisitor >> addColorBase: c [ - stream - nextPutAll: '{r:'; - nextPutAll: (self number: (c red*255) rounded); - nextPutAll: ',g:'; - nextPutAll: (self number: (c green*255) rounded); - nextPutAll: ',b:'; - nextPutAll: (self number: (c blue*255) rounded). - c alpha = 1 ifTrue: [ stream nextPutAll: '}' ] - ifFalse: [ stream - nextPutAll: ',a:'; - nextPutAll: (self number: c alpha); - nextPutAll: '}' ] -] - -{ #category : #helpers } -RTJavascriptVisitor >> addInteractions: aShape [ - aShape isNil ifTrue: [ ^ self ]. - (aShape isKindOf: RTAnnounceableObject) ifFalse: [ ^ self ]. - stream nextPutAll: 'ints: '. - self visitInteractions: aShape. - stream nextPutAll: ', ' -] - -{ #category : #helpers } -RTJavascriptVisitor >> addMatrix: m [ - stream - nextPutAll: 'matrix:{shx: '; - nextPutAll: (self number: m shx); - nextPutAll: ',shy: '; - nextPutAll: (self number: m shy); - nextPutAll: ',sx: '; - nextPutAll: (self number: m sx); - nextPutAll: ',sy: '; - nextPutAll: (self number: m sy); - nextPutAll: ',x: '; - nextPutAll: (self number: m x); - nextPutAll: ',y: '; - nextPutAll: (self number: m y); - nextPutAll: '}}, '. - -] - -{ #category : #helpers } -RTJavascriptVisitor >> addStringWithFont: aLabel [ - | converter fn | - converter := RTSVGStringConverter new. - fn := aLabel fontName. - fn = 'Source Sans Pro' ifTrue: [ fn := 'Verdana, Geneva, sans-serif' ]. - stream nextPutAll: ' text: "'; - nextPutAll: (converter convertString: (aLabel text truncateTo: maxSize)); - nextPutAll: '", font: {n: "'; - nextPutAll: fn; - nextPutAll: '", s: '; - nextPutAll: (self number: aLabel fontSize); - nextPutAll: '},' -] - -{ #category : #accessing } -RTJavascriptVisitor >> exportFixedShapes [ - ^ exportFixedShapes -] - -{ #category : #accessing } -RTJavascriptVisitor >> exportFixedShapes: aBool [ - exportFixedShapes := aBool -] - -{ #category : #initialization } -RTJavascriptVisitor >> initialize [ - names := Dictionary new. - validInteractions := #(#RTDraggableView #RTDraggable #RTPopup - #RTHighlightable #RTLabeled #RTShowEdge #RTShowLabel #RTZoomableView - #RTFocusElement #RTLinkView). - self exportFixedShapes: true. - self stream: (WriteStream on: String new). - self maxSize: 500. -] - -{ #category : #accessing } -RTJavascriptVisitor >> maxSize [ - ^ maxSize -] - -{ #category : #accessing } -RTJavascriptVisitor >> maxSize: size [ - maxSize := size. -] - -{ #category : #helpers } -RTJavascriptVisitor >> pointToString: point [ - ^ '{x:', (self number: point x), ',y:', (self number: point y),'}' -] - -{ #category : #accessing } -RTJavascriptVisitor >> stream [ - - ^stream -] - -{ #category : #accessing } -RTJavascriptVisitor >> stream: aStream [ - - stream := aStream. -] - -{ #category : #helpers } -RTJavascriptVisitor >> validInteractions [ - ^ validInteractions -] - -{ #category : #accessing } -RTJavascriptVisitor >> view [ - - ^view -] - -{ #category : #accessing } -RTJavascriptVisitor >> view: aView [ - - view := aView. -] - -{ #category : #visitor } -RTJavascriptVisitor >> visitAbstractLine: anAbstractLine [ - "anAbstractLine accept: anAbstractLine - " - "TODO" -] - -{ #category : #visitor } -RTJavascriptVisitor >> visitArcShape: aShape [ - aShape topLeft ifNil: [ aShape computeRectangle ]. - stream nextPutAll: ' - {type: "arc", id: "'; - nextPutAll: (self nameFor: aShape); - nextPutAll: '", ir: '; - nextPutAll: (self number: aShape innerRadius); - nextPutAll: ', er: '; - nextPutAll: (self number: aShape externalRadius); - nextPutAll:', aAngle: '; - nextPutAll: (self number: aShape alphaAngle); - nextPutAll: ', bAngle: '; - nextPutAll: (self number: aShape betaAngle); - nextPutAll: ', o: {x: '; - nextPutAll: (self number: aShape topLeft x); - nextPutAll: ', y: '; - nextPutAll: (self number: aShape topLeft y); - nextPutAll: '}, c: {x: '; - nextPutAll: (self number: aShape bottomRight x); - nextPutAll: ', y: '; - nextPutAll: (self number: aShape bottomRight y ); - nextPutAll: '},'. - self addColor: aShape color. - self addInteractions: aShape element. - self addMatrix: aShape matrix. - -] - -{ #category : #visitor } -RTJavascriptVisitor >> visitArrowHeadShape: arrowShape [ - | e | - e := arrowShape element. - stream nextPutAll: ' - {type: "headarrow", id: "'; - nextPutAll: (self nameFor: arrowShape); - nextPutAll: ('", fromid: <1p>, toid: <2p>,' - expandMacrosWith: (self nameFor: e from trachelShape) with: (self nameFor: e to trachelShape) ). - self addColor: arrowShape color. - self addBorderColor: arrowShape strokePaint. - - stream - nextPutAll: ' width: '; - nextPutAll: (self number: arrowShape width); - nextPutAll: ', size: '; - nextPutAll: (self number: arrowShape mySize). - self visitAttachPoint: e trShape: arrowShape. - stream - nextPutAll: ', base: '; - nextPutAll: (self number: arrowShape baseSize); - nextPutAll: '},'. - - -] - -{ #category : #visitor } -RTJavascriptVisitor >> visitArrowShape: arrowShape [ - | e | - e := arrowShape element. - stream nextPutAll: ' - {type: "simplearrow", id: "'; - nextPutAll: (self nameFor: arrowShape). - stream - nextPutAll: '", fromid: '''; - nextPutAll: (self nameFor: e from trachelShape); - nextPutAll: ''', toid: '''; - nextPutAll: (self nameFor: e to trachelShape); - nextPutAll: ''','. - - self addColor: arrowShape strokePaint. - stream - nextPutAll: ' width: '; - nextPutAll: (self number: arrowShape width); - nextPutAll: ', size: '; - nextPutAll: (self number: arrowShape mySize); - nextPutAll: ', percentage: '; - nextPutAll: (self number: arrowShape percentage). - self visitAttachPoint: e trShape: arrowShape. - stream - nextPutAll: ', base: '; - nextPutAll: (self number: arrowShape baseSize); - nextPutAll: '},'. -] - -{ #category : #visitor } -RTJavascriptVisitor >> visitAttachPoint: element [ - self visitAttachPoint: element index: 1 -] - -{ #category : #visitor } -RTJavascriptVisitor >> visitAttachPoint: element index: index [ - | ap | - element ifNil: [ - ^ stream nextPutAll: ',ap:RTCenteredAttachPoint' ]. - ap := element shape class = RTCompositeShape - ifTrue: [ element shape allShapes at: index ] - ifFalse: [ "Too ugly but work for this special case" - (element shape class = RTDoubleArrowedLine and: [index = 3]) - ifTrue: [ element shape headEnd ] - ifFalse: [ element shape ] ]. - stream nextPutAll: ',ap: new '; - nextPutAll: ap attachPoint class name; - nextPutAll: '('; - nextPutAll: ap attachPoint isInverted asString; - nextPutAll: ')'. - -] - -{ #category : #visitor } -RTJavascriptVisitor >> visitAttachPoint: element trShape: shape [ - self visitAttachPoint: element index: (element trachelShape shapes indexOf: shape) -] - -{ #category : #visitor } -RTJavascriptVisitor >> visitBezierShape: aBezierShape [ - | e shape | - e := aBezierShape element. - shape := (e shape class = RTCompositeShape) ifTrue: [ shape := e shape allShapes first ] ifFalse: [ e shape ]. - stream nextPutAll: ' - {type: "bezier", id: "'; - nextPutAll: (self nameFor: aBezierShape); - nextPutAll: ('", fromid: <1p>, toid: <2p>,' - expandMacrosWith: (self nameFor: e from trachelShape) with: (self nameFor: e to trachelShape) ). - self addColor: aBezierShape strokePaint. - - shape class = RTBezierLine ifTrue: [ - stream - nextPutAll: 'tension: '; - nextPutAll: (self number: shape tension); - nextPutAll: ', ides: ['. - shape follow ifNotNil: [ shape setControllingElementsFromFollowFor: e ]. - (shape controllingElements rtValue: e) do: [ :el | - stream - nextPutAll: '"'; - nextPutAll: (self nameFor: el trachelShape); - nextPutAll: '", '] ]. - - stream nextPutAll: '], width: '; - nextPutAll: (self number: aBezierShape width). - self visitAttachPoint: e. - stream nextPutAll: '},'. - -] - -{ #category : #visitor } -RTJavascriptVisitor >> visitBitMapShape: aBitmapShape [ - | s icon64 | - s := WriteStream on: ByteArray new. - - TRPlatform current pngReadWriterClass putForm: (aBitmapShape form) onStream: s. - - icon64 := (TRPlatform current mimeEncode: s contents readStream multiLine: false). - stream nextPutAll: ' - {type: "bitmap", id: "'; - nextPutAll: (self nameFor: aBitmapShape); - nextPutAll: '", base64: "'; - nextPutAll: icon64; - nextPutAll: '", w: '; - nextPutAll: (self number: aBitmapShape width); - nextPutAll: ', h: '; - nextPutAll: (self number: aBitmapShape height); - nextPutAll: ', '. - self addInteractions: aBitmapShape element. - self addMatrix: aBitmapShape matrix. - s close. -] - -{ #category : #visitor } -RTJavascriptVisitor >> visitBoxShape: aBox [ - - | box | - box := aBox basicEncompassingRectangle. - stream nextPutAll: ' - {type: "box", id: "'; - nextPutAll: (self nameFor: aBox); - nextPutAll: '", w: '; - nextPutAll: (self number: box width); - nextPutAll: ', h: '; - nextPutAll: (self number: box height); - nextPutAll: ', '. - self addBorderColor: aBox strokePaint. - self addBorderWidth: aBox. - self addColor: aBox color. - self addInteractions: aBox element. - self addMatrix: aBox matrix. -] - -{ #category : #visitor } -RTJavascriptVisitor >> visitCanvas: aCanvas [ - self exportFixedShapes ifFalse: [ ^ self ]. - aCanvas fixedShapes ifEmpty: [ ^ self ]. - stream nextPutAll:' shapes = ['. - aCanvas fixedShapes do: [ :s | s accept: self ]. - stream nextPutAll: ' - ]; - mamani.addFixedShapes(shapes); -' - - - -] - -{ #category : #visitor } -RTJavascriptVisitor >> visitDiamondShape: diamondShape [ - "TODO" - -] - -{ #category : #'visitor-interactions' } -RTJavascriptVisitor >> visitDraggableInteraction: anInteraction with: anObject [ - | list nest | - list := OrderedCollection new. - (anObject attributes includesKey: #RTLabelledLabel) ifTrue: [ - list add: (anObject attributes at: #RTLabelledLabel). - ]. - ((anObject shape class = RTCompositeShape) - and: [ anObject shape automaticallyUpdateLayout ]) ifTrue: [ - list addAll: anObject trachelShape shapes ]. - nest := nil. - nest := [ :ob | - (ob attributes includesKey: #nestedElements) ifTrue: [ - (ob attributes at: #nestedElements) do: [ :e| - e isCollection - ifTrue: [ list addAll: (e collect: [:x | nest value: x. x trachelShape ]) ] - ifFalse: [ nest value: e. list add: e trachelShape ] ] ]. - ]. - nest value: anObject. - - list addAll: (anInteraction groupToDrag collect: [ :e| - (e isKindOf: TRShape) - ifTrue: [ e ] - ifFalse: [ e trachelShape ] ] ). - list isEmpty - ifTrue: [ self visitInteraction: anInteraction with: anObject ] - ifFalse: [ - stream nextPutAll: 'new RTDraggable(['. - list do: [ :e | - stream nextPutAll: '"'; - nextPutAll: (self nameFor:e); - nextPutAll: '", ' ]. - stream nextPutAll: '])' ] - -] - -{ #category : #visitor } -RTJavascriptVisitor >> visitEdge: edge [ - edge trachelShape accept: self. - -] - -{ #category : #visitor } -RTJavascriptVisitor >> visitElement: e [ - e trachelShape accept: self -] - -{ #category : #visitor } -RTJavascriptVisitor >> visitEllipseShape: anEllipse [ - | box | - box := anEllipse basicEncompassingRectangle. - stream nextPutAll: ' - {type: "ellipse", id: "'; - nextPutAll: (self nameFor: anEllipse); - nextPutAll: '", rx: '; - nextPutAll: (self number: box width / 2); - nextPutAll: ', ry: '; - nextPutAll: (self number: box height/2); - nextPutAll: ','. - self addBorderColor: anEllipse strokePaint. - self addBorderWidth: anEllipse. - self addColor: anEllipse color. - self addInteractions: anEllipse element. - self addMatrix: anEllipse matrix. -] - -{ #category : #visitor } -RTJavascriptVisitor >> visitGroup: aRTGroup [ - aRTGroup accept: self. -] - -{ #category : #'visitor-interactions' } -RTJavascriptVisitor >> visitHightlightableInteraction: anInt with: el [ - | add | - stream nextPutAll: 'new RTHighlightable({'. - self addColor: anInt highlightedColor. - add := [ :list | - list do: [ :e | - stream - nextPutAll: '"'; - nextPutAll: (self nameFor: e trachelShape); - nextPutAll: '",' ] ]. - stream nextPutAll: 'ides: ['. - add value: ((anInt highlightElements) rtValue: el). - stream nextPutAll: ']'. - anInt shouldHighlightEdges ifTrue: [ - stream nextPutAll: ', ecolor: '. - self addColorBase: anInt edgeColor. - stream nextPutAll: ', edges: ['. - add value: ((anInt getConnectedEdgesBlock) rtValue: el). - stream nextPutAll: ']'. ]. - stream nextPutAll: '})'. - - - -] - -{ #category : #'visitor-interactions' } -RTJavascriptVisitor >> visitInteraction: interaction with: anObject [ - stream nextPutAll: interaction class name. - -] - -{ #category : #'visitor-interactions' } -RTJavascriptVisitor >> visitInteractions: anObject [ - TRPlatform current visitInteractionsFor: self and: anObject. - -] - -{ #category : #visitor } -RTJavascriptVisitor >> visitLabelShape: aLabel [ - | box | - box := aLabel basicEncompassingRectangle. - stream nextPutAll: ' - {type: "label", id: "'; - nextPutAll: (self nameFor: aLabel); - nextPutAll: '",o: {x: '; - nextPutAll: (self number: box origin x); - nextPutAll: ', y: '; - nextPutAll: (self number: box origin y); - nextPutAll: '},c: {x: '; - nextPutAll: (self number: box corner x); - nextPutAll: ', y: '; - nextPutAll: (self number: box corner y); - nextPutAll: '},'. - self addColor: aLabel color. - self addStringWithFont: aLabel. - self addInteractions: aLabel element. - self addMatrix: aLabel matrix. - -] - -{ #category : #'visitor-interactions' } -RTJavascriptVisitor >> visitLabelledInteraction: anInt with: el [ - stream nextPutAll: 'new RTLabelled({'. - self addColor: anInt color. - stream nextPutAll: 'low'. - self addColor: anInt lowColor. - stream - nextPutAll: 'lbl: '; - nextPutAll: '"'; - nextPutAll: (self nameFor: anInt lbl); - nextPutAll: '"})'. -] - -{ #category : #visitor } -RTJavascriptVisitor >> visitLineShape: aLine [ - - | e fromTo | - e := aLine element. - fromTo := e - ifNil: [ '", fromid: ',(self pointToString: aLine from),',toid:',(self pointToString: aLine to),',' ] - ifNotNil: [ '",fromid:<1p>,toid:<2p>,' - expandMacrosWith: (self nameFor: e from trachelShape) - with: (self nameFor: e to trachelShape) ]. - - stream nextPutAll: ' - {type: "line", id: "'; - nextPutAll: (self nameFor: aLine); - nextPutAll: fromTo. - self addColor: aLine color. - stream nextPutAll: ' width: '; - nextPutAll: (self number: aLine width). - self visitAttachPoint: e. - stream nextPutAll: '},'. - -] - -{ #category : #'visitor-interactions' } -RTJavascriptVisitor >> visitLinkView: anInt with: el [ - | eview name st exporter | - eview := anInt viewFor: el. - name := anInt nameFor: el. - name ifNil: [ name := self nameFor: el ]. - - [ - eview ifNotNil: [ - exporter := RTHTML5Exporter new - fileName: name, '.html'; - shouldCreateJS: false. - exporter createStream. - st := exporter stream. - exporter export: eview toStream: st] - ] on: Error do: [ :ex | - st close. - exporter export: anInt errorView ]. - stream - nextPutAll: 'new RTLinkView("'; - nextPutAll: name; - nextPutAll: '")'. -] - -{ #category : #visitor } -RTJavascriptVisitor >> visitMultiCompositeShape: aShape [ - stream nextPutAll: ' - {id: "'; - nextPutAll: (self nameFor: aShape); - nextPutAll: '", type:"multi", shapes:['. - "aShape element ifNotNil: [ - aShape element shape automaticallyUpdateLayout ifTrue: [ - (aShape element attributes includesKey: #nestedElements) ifTrue: [ - self halt. - (aShape element attributes at: #nestedElements) addAll: aShape shapes ] ] ]." - aShape shapes do: [ :s| - s element: aShape element. - s accept: self]. - stream nextPutAll: '], offsets: ['. - aShape offsets do: [ :o | - stream nextPutAll: '{x: '; - nextPutAll: (self number: o x); - nextPutAll: ', y: '; - nextPutAll: (self number: o y); - nextPutAll: '},' ]. - - stream nextPutAll: ']'. - - (aShape element isNil not and: [aShape element shape isKindOf: RTMultiColoredLine]) ifTrue: [ - self visitAttachPoint: aShape element. ]. - stream nextPutAll: '},'. -] - -{ #category : #visitor } -RTJavascriptVisitor >> visitNoShape: aNoShape [ - "Do nothing" -] - -{ #category : #visitor } -RTJavascriptVisitor >> visitPolygonShape: aPolygon [ - | r c | - r := aPolygon encompassingRectangle. - c := aPolygon color. - c ifNil: [ c:= Color transparent ]. - - stream nextPutAll: ' - {type: "polygon", id: "'; - nextPutAll: (self nameFor: aPolygon); - nextPutAll: ('", o: {x: ',(self number: r origin x),', y: ',(self number: r origin y),'}'); - nextPutAll: (', c: {x: ',(self number: r corner x),', y: ',(self number: r corner y),'}, p: "'). - - aPolygon vertices do: [ :p | - stream nextPutAll: (self number: p x),',',(self number: p y),' '. ]. - stream nextPutAll: '",'. - self addBorderColor: aPolygon strokePaint. - self addBorderWidth: aPolygon. - self addColor: c. - self addInteractions: aPolygon element. - self addMatrix: aPolygon matrix. -] - -{ #category : #'visitor-interactions' } -RTJavascriptVisitor >> visitPopupInteraction: anInt with: el [ - | elements | - [elements := anInt createPopupFor: el] - on: Error do: [ ^ self ]. - - stream nextPutAll: 'new RTPopup(['. - elements do: [ :e | - e trachelShape element: e. - e trachelShape accept: self ]. - stream nextPutAll: ']) '. -] - -{ #category : #visitor } -RTJavascriptVisitor >> visitRotatedLabelShape: aLabel [ - | box matrix | - box := aLabel basicEncompassingRectangle. - stream nextPutAll: ' - {type: "label", id: "'; - nextPutAll: (self nameFor: aLabel); - nextPutAll: ('",o: {x: <1p>, y: <2p>},' expandMacrosWith: box origin x with: box origin y); - nextPutAll: ('c: {x: <1p>, y: <2p>},' expandMacrosWith: box corner x with: box corner y). - self addColor: aLabel color. - self addStringWithFont: aLabel. - self addInteractions: aLabel element. - matrix := aLabel matrix copy. - matrix rotateByDegrees: aLabel angle. - self addMatrix: matrix. - -] - -{ #category : #visitor } -RTJavascriptVisitor >> visitSVGPath: aSVGPath [ - | r c | - r := aSVGPath basicEncompassingRectangle. - c := aSVGPath color. - c ifNil: [ c:= Color transparent ]. - stream nextPutAll: ' - {type: "path", id: "'; - nextPutAll: (self nameFor: aSVGPath); - nextPutAll: '", d:"'; - nextPutAll: aSVGPath pathString; - nextPutAll: '", o: {x: ',(self number: r origin x),', y: ',(self number: r origin y),'}' ; - nextPutAll: ', c: {x: ',(self number: r corner x),', y: ',(self number: r corner y),'},'. - - self addBorderColor: aSVGPath strokePaint. - self addBorderWidth: aSVGPath. - - self addColor: c. - self addInteractions: aSVGPath element. - self addMatrix: aSVGPath matrix. -] - -{ #category : #visitor } -RTJavascriptVisitor >> visitSVGPathLine: shape [ - | e f t| - e := shape element. - e ifNil: [ - f := self pointToString: shape from. - t := self pointToString: shape to - ] ifNotNil: [ - f := '"',(self nameFor: e from trachelShape),'"'. - t := '"',(self nameFor: e to trachelShape),'"' ]. - stream - nextPutAll: '{type:"svgline", id: "'; - nextPutAll: (self nameFor: shape); - nextPutAll: '", fromid: '; - nextPutAll: f; - nextPutAll: ', toid: '; - nextPutAll: t; - nextPutAll: ', '. - self addColor: shape color. - (e notNil and: [e shape class = RTLineDualWidth]) ifTrue: [ - stream - nextPutAll: ' widthFrom: '; - nextPutAll: (self number: (e shape widthFrom rtValue: e)); - nextPutAll: ', widthTo: '; - nextPutAll: (self number: (e shape widthTo rtValue: e)) ]. - self visitAttachPoint: e. - stream nextPutAll: '},' - -] - -{ #category : #visitor } -RTJavascriptVisitor >> visitShape: aShape [ - aShape accept: self -] - -{ #category : #'visitor-interactions' } -RTJavascriptVisitor >> visitShowEdgeInteraction: anInt with: el [ - |edges t | - t := (anInt connectToElements rtValue: el). - t := t copyWithout: nil. - edges := (anInt shape rtValue: el) edgesFrom: el toAll: t. - stream nextPutAll: 'new RTShowEdge(['. - edges do: [ :e | - e trachelShape element: e. - e trachelShape accept: self ]. - stream nextPutAll: ']) '. -] - -{ #category : #'visitor-interactions' } -RTJavascriptVisitor >> visitShowLabelInteraction: anInt with: el [ - - stream nextPutAll: 'new RTShowLabel(['. - ((anInt highlightElements) rtValue: el) do: [:ele | - (anInt labelledInteraction initializeElement: ele) accept: self. - ]. - stream nextPutAll: ']) '. - anInt doUnhighlightElement: el -] - -{ #category : #visitor } -RTJavascriptVisitor >> visitView: aView [ - | elements | - stream nextPutAll: 'mamani.color('. - self addColorBase: aView canvas color. - stream nextPutAll:('); - mamani.camera.setScale(<1p>);' - expandMacrosWith: aView canvas camera scale). - - aView announcer subscriptions trSubscriptions isEmpty ifFalse: [ - stream nextPutAll: 'mamani.addInteractions('. - self visitInteractions: aView. - stream nextPutAll: '); - ']. - elements := (aView canvas shapes collect: [ :s | - s element isNil ifTrue: [ s ] ifFalse: [ s element ] ]) asOrderedCollection removeDuplicates. - - stream nextPutAll:' - var shapes = ['. - elements do: [ :e | e accept: self ]. - stream nextPutAll:' - ]; - mamani.addShapes(shapes); -'. - aView canvas accept: self -] diff --git a/src/Roassal2/RTKendrickPlugin.class.st b/src/Roassal2/RTKendrickPlugin.class.st deleted file mode 100644 index a3eca9298..000000000 --- a/src/Roassal2/RTKendrickPlugin.class.st +++ /dev/null @@ -1,30 +0,0 @@ -Class { - #name : #RTKendrickPlugin, - #superclass : #RTAbstractPlugin, - #category : #'Roassal2-Plugins' -} - -{ #category : #hooks } -RTKendrickPlugin >> description [ - ^ -'Kendrick is a modeling language and simulation platform, with an emphasis -on Epidemiological models. Kendrick has been used to model propagation of -diseases, and in particular Ebola. - -This plugin may cause problem when loaded directly in Pharo. -We recommand to use the Moose distribution of Pharo.' -] - -{ #category : #hooks } -RTKendrickPlugin >> execute [ - Metacello new - repository: 'http://smalltalkhub.com/mc/UMMISCO/Kendrick/main'; - configuration: 'Kendrick'; - version: '0.46'; - load -] - -{ #category : #hooks } -RTKendrickPlugin >> label [ - ^ 'Kendrick (epidemiological platform)' -] diff --git a/src/Roassal2/RTKiviatBuilder.class.st b/src/Roassal2/RTKiviatBuilder.class.st deleted file mode 100644 index 5d5ca90a9..000000000 --- a/src/Roassal2/RTKiviatBuilder.class.st +++ /dev/null @@ -1,448 +0,0 @@ -" -A RTKiviatBuilder is a builder for Kiviat Chart, comparing objects considering metrics. - -Instance Variables - axisSize: - highlight: - kiviatMetrics: - kiviatNodes: - metrics: - objects: - shapes: - -axisSize - - xxxxx - -highlight - - xxxxx - -kiviatMetrics - - xxxxx - -kiviatNodes - - xxxxx - -metrics - - xxxxx - -objects - - xxxxx - -shapes - - xxxxx - -" -Class { - #name : #RTKiviatBuilder, - #superclass : #RTBuilder, - #instVars : [ - 'kiviatMetrics', - 'kiviatNodes', - 'objects', - 'axisSize', - 'highlight', - 'polygons', - 'shapes', - 'axisTitle', - 'axisTitles', - 'axisBuilt' - ], - #category : #'Roassal2-Builder-Kiviat' -} - -{ #category : #'as yet unclassified' } -RTKiviatBuilder >> activateAxisTitle [ -"activate the axis titles in the view to identify metrics axis" - axisTitle := #activated. - -] - -{ #category : #'as yet unclassified' } -RTKiviatBuilder >> activateHighlight [ -"activate the Highlight of a chart node when mouse is over and reduce alpha of ther chart nodes." - highlight := #activated. - -] - -{ #category : #'as yet unclassified' } -RTKiviatBuilder >> activatePolygons [ -"activate the polygons in the view to identify chart nodes" - polygons := #activated. - -] - -{ #category : #adding } -RTKiviatBuilder >> addDynamicObject: anObject [ - - (objects includes: anObject) ifFalse: [ - objects add: anObject. - self build. - self view signalUpdate. - ] -] - -{ #category : #adding } -RTKiviatBuilder >> addDynamicObjects: anObjectCollection [ - - anObjectCollection do: [ :o | - self addDynamicObject: o - ]. - -] - -{ #category : #adding } -RTKiviatBuilder >> addMetric: blockOrSymbol [ - self addMetric: blockOrSymbol title: (blockOrSymbol asString). -] - -{ #category : #adding } -RTKiviatBuilder >> addMetric: blockOrSymbol max: kiviatMetricMaxValue [ - self addMetric: blockOrSymbol max: kiviatMetricMaxValue title: (blockOrSymbol asString). -] - -{ #category : #adding } -RTKiviatBuilder >> addMetric: blockOrSymbol max: kiviatMetricMaxValue title: aString [ - kiviatMetrics add: (RTKiviatMetric new block: blockOrSymbol; named: aString; maxValue:kiviatMetricMaxValue ). -] - -{ #category : #adding } -RTKiviatBuilder >> addMetric: blockOrSymbol title: aString [ - self addMetric: blockOrSymbol max: nil title: aString . -] - -{ #category : #adding } -RTKiviatBuilder >> addNodesAndEdgesToView [ -"add to the view the chart nodes created" - kiviatNodes do: [ :kn | - view addAll: kn nodeKiviatElements. - view addAll: kn edgeKiviatElements. - ( polygons = #activated ) ifTrue: [ view add: kn polygonElement ]. - ] -] - -{ #category : #adding } -RTKiviatBuilder >> addNodesAndEdgesToView: aKiviatNode [ -"add to the view the chart nodes created" - ( polygons = #activated ) ifTrue: [ view add: aKiviatNode polygonElement ]. - view addAll: aKiviatNode edgeKiviatElements. - view addAll: aKiviatNode nodeKiviatElements. - - -] - -{ #category : #adding } -RTKiviatBuilder >> addObject: anObject [ - objects add: anObject. -] - -{ #category : #'as yet unclassified' } -RTKiviatBuilder >> axis: aRTKiviatMetric [ -"creation of a metric axis" - | config centralPoint allValues | - - allValues := (objects collect: [ :p | (aRTKiviatMetric block) rtValue: p ]). - aRTKiviatMetric maxValue ifNil: [ aRTKiviatMetric maxValue: ( (allValues isEmpty) ifTrue: [ 0 ] ifFalse: [ allValues max ])]. - aRTKiviatMetric minValue: ( (allValues isEmpty) ifTrue: [ 0 ] ifFalse: [ allValues min ]). - - config := RTAxisConfiguration new - builder: self; - numberOfTicks: 4; - numberOfLabels: 4; - minValue: 0; - maxValue: aRTKiviatMetric maxValue; - ticksCentered: true; - labelConversion: [ :number | number asFloat round: 2 ]; - positionLabel: [ :aLabel :aTick | aLabel translateTo: aTick position + (0 @ 15) ]. - (axisTitle = #activated) ifTrue: [ config title: (aRTKiviatMetric named)]. - - - centralPoint := (0@0). - - config axisFrom: 0@0 to: (aRTKiviatMetric modelBlock value: (self getNormalizedValue:(aRTKiviatMetric maxValue) min:0 max:(aRTKiviatMetric maxSize) minValue:(aRTKiviatMetric minValue) maxValue: (aRTKiviatMetric maxValue))). - -] - -{ #category : #accessing } -RTKiviatBuilder >> axisSize [ - ^ axisSize -] - -{ #category : #accessing } -RTKiviatBuilder >> axisSize: aSizeInPixels [ -"define the size in pixel of all the axis" - axisSize := aSizeInPixels -] - -{ #category : #accessing } -RTKiviatBuilder >> axisTitles [ - ^ axisTitles. -] - -{ #category : #'as yet unclassified' } -RTKiviatBuilder >> buildAxis [ -"define the blocks of the metrics, divise 360° by the number of total metrics, and call the axis creation according to metrics" - | angle | - angle := 0. - - kiviatMetrics doWithIndex: [ :m :i | - self axis: (m modelBlock: [ :v | (v*(((i-1) * ((2 * Float pi) / (kiviatMetrics size)))cos))@(v*(((i-1) * ((2 * Float pi) / (kiviatMetrics size)))sin))]; maxSize: axisSize) ]. - - axisBuilt := true. -] - -{ #category : #actions } -RTKiviatBuilder >> clean [ - self removeDynamicObjects: objects copy -] - -{ #category : #view } -RTKiviatBuilder >> configureView: aView [ - aView @ RTDraggableView. -] - -{ #category : #hooks } -RTKiviatBuilder >> createShapeBuilder [ -"redefinition for default shape" - | sb | - sb := super createShapeBuilder. - sb shape: (RTEllipse new color: (Color blue alpha: 0.3); size: 10). - ^ sb -] - -{ #category : #initialization } -RTKiviatBuilder >> createView [ - ^ super createView @ RTDraggableView -] - -{ #category : #'as yet unclassified' } -RTKiviatBuilder >> defaultAxisSize [ - axisSize := 200 -] - -{ #category : #'as yet unclassified' } -RTKiviatBuilder >> desactivateAxisTitle [ -"desactivate the axis titles in the view to identify metrics axis" - axisTitle := #desactivated. - -] - -{ #category : #'as yet unclassified' } -RTKiviatBuilder >> desactivateHighlight [ - highlight := #desactivated. - -] - -{ #category : #'as yet unclassified' } -RTKiviatBuilder >> desactivatePolygons [ - polygons := #desactivated. - -] - -{ #category : #accessing } -RTKiviatBuilder >> executeHighlight [ - - self executeHighlightLowColor: 0.2 highColor: 1.0 - -] - -{ #category : #'as yet unclassified' } -RTKiviatBuilder >> executeHighlightLowColor: lowColor highColor: highColor [ -| titles | -"define the alpha values of the highlighted and others chart nodes to the view" - - ( axisTitle = #activated ) ifTrue: [ - "for now this way to recover the axis Titles elements in the view is not really clean, but because of using RTAxisRenderer to create the axis and titles in the same time I did not found a way to get only the title element from it." - titles := OrderedCollection new. - self kiviatMetrics do: [ :m | titles add: (view elements detect: [ :e | (e shape isKindOf: RTLabel) and: [ (e trachelShape text) = (m named) ] ])]. - ]. - - ((kiviatNodes flatCollect: [ :kn | kn nodeKiviatElements]) asGroup) do: [ :e | - e @ (RTShowLabel new labelledInteraction: (RTLabeled new text: [ :el | el kiviatNode named])). - ]. - - ((kiviatNodes flatCollect: [ :kn | kn nodeKiviatElements]) asGroup) when: TRMouseEnter do: [ :evt | - (kiviatNodes select: [ :kn | kn named = evt element model kiviatNode named ]) do: [ :kn | - - kn nodeKiviatElements do: [ :e | self recordElement: e. e trachelShape color: (e trachelShape color alpha: highColor)]. - kn edgeKiviatElements do: [ :e | self recordElement: e. e trachelShape color: (e trachelShape color alpha: highColor)]. - ]. - (kiviatNodes select: [ :kn | kn named ~= evt element model kiviatNode named ]) do: [ :kn | - kn nodeKiviatElements do: [ :e | self recordElement: e. e trachelShape color: (e trachelShape color alpha: lowColor)]. - kn edgeKiviatElements do: [ :e | self recordElement: e. e trachelShape color: (e trachelShape color alpha: lowColor)] - ]. - ( axisTitle = #activated ) ifTrue: [ titles do: [ :t | t trachelShape color: (t trachelShape color alpha: 0)]]. - view signalUpdate. - ]. - - ((kiviatNodes flatCollect: [ :kn | kn nodeKiviatElements]) asGroup) when: TRMouseLeave do: [ :evt | - kiviatNodes do: [ :kn | - kn nodeKiviatElements do: [ :e | e trachelShape color: (e attributes at: #originalColor)]. - kn edgeKiviatElements do: [ :e | e trachelShape color: (e attributes at: #originalColor)]. - view signalUpdate]. - ( axisTitle = #activated ) ifTrue: [ titles do: [ :t | t trachelShape color: (t trachelShape color alpha: 1)]]. - view signalUpdate. - ]. -] - -{ #category : #'as yet unclassified' } -RTKiviatBuilder >> executePolygonNode: aKiviatNode [ - - self executePolygonsColor: 0.2 node: aKiviatNode -] - -{ #category : #'as yet unclassified' } -RTKiviatBuilder >> executePolygons [ - - self executePolygonsColor: 0.2. -] - -{ #category : #'as yet unclassified' } -RTKiviatBuilder >> executePolygonsColor: alpha [ -"define the alpha value and create polygons" - kiviatNodes do: [ :kn | - kn polygonElement: ((RTPolygon new borderColor: ((kn nodeKiviatElements first color) alpha: alpha); color: ((kn nodeKiviatElements first color)alpha: alpha); vertices: ((kn nodeKiviatElements collect: [ :ne | ne position ]) asArray)) elementOn: kn). - ] - -] - -{ #category : #'as yet unclassified' } -RTKiviatBuilder >> executePolygonsColor: alpha node: aKiviatNode [ -"define the alpha value and create polygon" - aKiviatNode polygonElement: ((RTPolygon new borderColor: ((aKiviatNode nodeKiviatElements first color) alpha: alpha); color: ((aKiviatNode nodeKiviatElements first color)alpha: alpha); vertices: ((aKiviatNode nodeKiviatElements collect: [ :ne | ne position ]) asArray)) elementOn: aKiviatNode). -] - -{ #category : #'as yet unclassified' } -RTKiviatBuilder >> getNormalizedValue: val min: min max: max minValue: minValue maxValue: maxValue [ -"obtain a normalized value from the original value given by a metric calculation according to the size of the axis" - (val = min) ifTrue: [ ^ min]. - (maxValue = minValue) ifTrue: [ ^ max]. - - ^ (min + ((max - min) * ( (val - minValue) / (maxValue - minValue)))). -] - -{ #category : #initialization } -RTKiviatBuilder >> initialize [ - super initialize. - - self configureView: view. - self defaultAxisSize. - - highlight := #activated. - polygons := #desactivated. - axisTitle := #desactivated. - - axisBuilt := false. - - axisTitles := OrderedCollection new. - - objects := OrderedCollection new. - - kiviatNodes := OrderedCollection new. - kiviatMetrics := OrderedCollection new. - - -] - -{ #category : #accessing } -RTKiviatBuilder >> kiviatMetrics [ - ^ kiviatMetrics -] - -{ #category : #accessing } -RTKiviatBuilder >> kiviatNodes [ - ^ kiviatNodes -] - -{ #category : #accessing } -RTKiviatBuilder >> node: anRTKiviatNode [ -"a chart node is represented by a set of elements according to the metrics values and connected by edges. - Finish the creation of a chart node, creating elements in the view and edges." -| nodeElems edgeElems shapeNode shapeEdge | - - kiviatNodes add: anRTKiviatNode. - nodeElems := OrderedCollection new. - edgeElems := OrderedCollection new. - - shapeNode := (shapes isNil) ifFalse: [ RTEllipse new color:(shapes at: (kiviatNodes indexOf: anRTKiviatNode)); size: 10 ] ifTrue: [ anRTKiviatNode shapeNode ] . - shapeEdge := anRTKiviatNode shapeEdge. - - kiviatMetrics do: [ :m | - nodeElems add: ((shapeNode) elementOn: ( RTKiviatElement new metric:(m block); position: (m modelBlock value: (self getNormalizedValue: (anRTKiviatNode arrayValues at: (kiviatMetrics indexOf: m)) min: 0 max: (m maxSize) minValue: 0 maxValue:(m maxValue))); kiviatNode: anRTKiviatNode; value: (anRTKiviatNode arrayValues at: (kiviatMetrics indexOf: m))) ). - ]. - - anRTKiviatNode addNodeElements: nodeElems. - - nodeElems allButLast do: [ :e | edgeElems add: ((RTEdge from: e to: (nodeElems after:e)) + (shapeEdge color: (e trachelShape color)))]. - edgeElems add: ((RTEdge from: (nodeElems last) to: (nodeElems first)) + (shapeEdge color: (nodeElems first trachelShape color))). - - anRTKiviatNode addEdgeElements: edgeElems. - - nodeElems do: [ :e | e translateBy: (e model position) ]. -] - -{ #category : #accessing } -RTKiviatBuilder >> objects [ - ^ objects -] - -{ #category : #accessing } -RTKiviatBuilder >> objects: anObjectsCollection [ -"Define the number of objects to be evaluated by the metrics" - objects := anObjectsCollection -] - -{ #category : #actions } -RTKiviatBuilder >> recordElement: anElement [ - anElement attributes at: #originalColor put: (anElement trachelShape color) -] - -{ #category : #adding } -RTKiviatBuilder >> removeDynamicObject: anObject [ - - (objects includes: anObject) ifTrue: [ - | kn | - objects remove: anObject. - kn := (kiviatNodes detect: [ :k| k named = anObject ]). - view removeElements: kn edgeKiviatElements. - view removeElements: kn nodeKiviatElements. - (kn polygonElement) ifNotNil: [view removeElement: kn polygonElement]. - kiviatNodes remove: kn. - - self view signalUpdate. - ] -] - -{ #category : #adding } -RTKiviatBuilder >> removeDynamicObjects: anObjectCollection [ - anObjectCollection do: [ :o | - self removeDynamicObject: o ] -] - -{ #category : #hooks } -RTKiviatBuilder >> renderIn: aView [ - - ((kiviatMetrics size = 0) | (axisBuilt = true)) ifFalse: [ self buildAxis ]. - self resetCreatedElements. - - "a chart node is represented by a set of elements according to the metrics values and connected by edges." - objects do: [ :p | kiviatNodes detect: [:k | k named = p] ifNone: [ - | kn | - kn := (RTKiviatNode new values:(kiviatMetrics collect: [ :m | m block rtValue: p ]); named: p; shapeNode: self shape). - self node: kn. - ( polygons = #activated ) ifTrue: [ self executePolygonNode: kn]. - self addNodesAndEdgesToView: kn. - ] - ]. - - ( highlight = #activated ) ifTrue: [ self executeHighlight ]. - - "globalBuilder executeOn: self createdElements." - - -] - -{ #category : #accessing } -RTKiviatBuilder >> shapes: aColorArray [ -"shapes: takes in argument a collection of colors, at least of the size of the numbers of objects" - shapes := aColorArray. -] diff --git a/src/Roassal2/RTKiviatBuilderExample.class.st b/src/Roassal2/RTKiviatBuilderExample.class.st deleted file mode 100644 index 1e27f9ac9..000000000 --- a/src/Roassal2/RTKiviatBuilderExample.class.st +++ /dev/null @@ -1,803 +0,0 @@ -" -RTKiviatBuilderExample new installTitle: 'Colored3' - code: - ' - | b myKiviatNodesElems m col | - b := RTKiviatBuilder new. - b objects: RTAbstractCircleLayout withAllSubclasses. - b addMetric: #numberOfLinesOfCode. - b addMetric: #numberOfMethods. - b addMetric: #numberOfVariables. - b open. - myKiviatNodesElems := (b view elements select: [ :e | (e model isKindOf: RTKiviatElement)]). - b objects do: [:o | m:= myKiviatNodesElems select: [ :e | (e model named name= o name)]. col := (Color random alpha: 0.6). m do: [:e | e color: col]]. - b build. - b ' -" -Class { - #name : #RTKiviatBuilderExample, - #superclass : #RTAbstractExample, - #category : #'Roassal2-Builder-Kiviat' -} - -{ #category : #sources } -RTKiviatBuilderExample >> exampleAOB [ - - | b lb fruits | - b := RTKiviatBuilder new. - fruits := RTKiviatFruitExample fruits. - b objects: fruits. - b shape circle color: [ :f | f kiviatNode named color ]; size: 10. - RTKiviatFruitExample rtmethods do: [ :met | - met protocol = #metrics ifTrue: [ - b addMetric: met selector ] ]. - b activateAxisTitle. - b activatePolygons. - b build. - - lb := RTLegendBuilder new. - lb view: b view. - lb right. - lb addText: 'Fruit example '. - fruits do: [ :f | lb addColor: f color text: f name ]. - lb build. - - ^ b view -] - -{ #category : #icons } -RTKiviatBuilderExample >> exampleAOBIcon [ - ^ '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' -] - -{ #category : #sources } -RTKiviatBuilderExample >> exampleBudgetChart [ -| b n | - b := RTKiviatBuilder new. - b objects: (Array with: ('Allocated Budget' -> #(60 15 25 8 40 20)) with: ('Actual Spending' -> #( 20 20 25 20 50 145) )). - n := RTMultiLinearColorForIdentity new objects: (b objects). - b shape circle color: [ :value | n rtValue: value kiviatNode named]; size: 10. - - b addMetric: [:e | e value at:1] title: 'Development'. - b addMetric: [:e | e value at:2] title: 'Customer Support'. - b addMetric: [:e | e value at:3] title: 'Information Technology'. - b addMetric: [:e | e value at:4] title: 'Administration'. - b addMetric: [:e | e value at:5] title: 'Sales'. - b addMetric: [:e | e value at:6] title: 'Marketing'. - b activateAxisTitle. - b activatePolygons. - - b build. - ^ b view -] - -{ #category : #icons } -RTKiviatBuilderExample >> exampleBudgetChartIcon [ - ^ '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' -] - -{ #category : #sources } -RTKiviatBuilderExample >> exampleColored [ - | b n | - b := RTKiviatBuilder new. - b objects: RTAbstractCircleLayout withAllSubclasses. - - n := RTMultiLinearColorForIdentity new objects: (b objects). - b shape circle color: [ :value | n rtValue: value kiviatNode named]; size: 10. - - b addMetric: #numberOfLinesOfCode. - b addMetric: #numberOfMethods. - b addMetric: #numberOfVariables. - b build. - ^ b -] - -{ #category : #sources } -RTKiviatBuilderExample >> exampleColored2 [ - | b | - b := RTKiviatBuilder new. - "shapes: takes in argument a collection of colors, at least of the size of the numbers of objects" - b shapes: ((RTColorPalette qualitative colors: 12 scheme:'Paired') do: [:c | c alpha: 0.3]). - b objects: RTAbstractCircleLayout withAllSubclasses. - b addMetric: #numberOfLinesOfCode. - b addMetric: #numberOfMethods. - b addMetric: #numberOfVariables. - - b activateAxisTitle. - - b build. - ^ b view -] - -{ #category : #icons } -RTKiviatBuilderExample >> exampleColored2Icon [ - ^ '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' -] - -{ #category : #sources } -RTKiviatBuilderExample >> exampleColored3 [ -| b myKiviatNodesElems m col | - b := RTKiviatBuilder new. - b objects: RTAbstractCircleLayout withAllSubclasses. - b addMetric: #numberOfLinesOfCode. - b addMetric: #numberOfMethods. - b addMetric: #numberOfVariables. - - b activateAxisTitle. - - b build. - - myKiviatNodesElems := (b view elements select: [ :e | (e model isKindOf: RTKiviatElement)]). - b objects do: [:o | m:= myKiviatNodesElems select: [ :e | (e model kiviatNode named name= o name)]. col := (Color random alpha: 0.6). m do: [:e | e color: col]]. - - ^ b view -] - -{ #category : #icons } -RTKiviatBuilderExample >> exampleColored3Icon [ - ^ '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' -] - -{ #category : #icons } -RTKiviatBuilderExample >> exampleColoredIcon [ - ^ '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 -AAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTKiviatBuilderExample >> exampleDynamicChart [ -| b n | - b := RTKiviatBuilder new. - - n := RTMultiLinearColorForIdentity new objects: (b objects). - b shape circle color: [ :value | n rtValue: value kiviatNode named]; size: 10. - - - b addMetric: [ :v | v first ] max: 100. - b addMetric: [ :v | v second ] max: 100. - b addMetric: [ :v | v third ] max: 100. - b addMetric: [ :v | v fourth ] max: 100. - b addMetric: [ :v | v fifth ] max: 100. - - b activatePolygons. - b build. - - b view addMenu: '+1' callback: [ - b addDynamicObject: ((1 to: 5) collect: [ :i | 100 atRandom ]) ]. - b view addMenu: 'clean' callback: [ b clean ]. - ^ b view -] - -{ #category : #icons } -RTKiviatBuilderExample >> exampleDynamicChartIcon [ - ^ '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 -SUVORK5CYII=' -] - -{ #category : #sources } -RTKiviatBuilderExample >> exampleRandomValues [ - | b | - b := RTKiviatBuilder new. - b objects: (Array with: ('object1' -> ((1 to: 25) collect: [:i | i atRandom])) with: ('object2' -> ((1 to: 25) collect: [:i | i atRandom]))). - - b shapes: ((Array with: Color blue with: Color red) do: [:c | c alpha: 0.3]). - - (1 to: 25) doWithIndex: [ :ei :i | - b addMetric: [:e | e value atWrap: i] - ]. - b build. - ^ b view -] - -{ #category : #icons } -RTKiviatBuilderExample >> exampleRandomValuesIcon [ - ^ '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' -] - -{ #category : #sources } -RTKiviatBuilderExample >> exampleSimple01 [ - -| b | - b := RTKiviatBuilder new. - b objects: #('ABCDEF' ' 123' ' 1'). - b addMetric: #size. - b addMetric: [ :str | (str select: #isAlphaNumeric) size ]. - b addMetric: [ :str | (str select: [ :c | c = $ ]) size ]. - b build. - ^ b view -] - -{ #category : #icons } -RTKiviatBuilderExample >> exampleSimple01Icon [ - ^ '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' -] - -{ #category : #sources } -RTKiviatBuilderExample >> exampleWithArea [ - - | b n | - b := RTKiviatBuilder new. - b objects: RTAbstractCircleLayout withAllSubclasses. - n := RTMultiLinearColorForIdentity new objects: (b objects). - b shape circle color: [ :value | n rtValue: value kiviatNode named]; size: 10. - - b addMetric: #numberOfLinesOfCode. - b addMetric: #numberOfMethods. - b addMetric: #numberOfVariables. - - b activatePolygons. - - b build. - ^ b view -] - -{ #category : #icons } -RTKiviatBuilderExample >> exampleWithAreaIcon [ - ^ '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 -QOgDoW+nsP8DRe4gRSmBD8QAAAAASUVORK5CYII=' -] - -{ #category : #accessing } -RTKiviatBuilderExample >> label [ - ^ 'Kiviat (Radar)' -] diff --git a/src/Roassal2/RTKiviatBuilderTest.class.st b/src/Roassal2/RTKiviatBuilderTest.class.st deleted file mode 100644 index 15c8e4ea3..000000000 --- a/src/Roassal2/RTKiviatBuilderTest.class.st +++ /dev/null @@ -1,23 +0,0 @@ -Class { - #name : #RTKiviatBuilderTest, - #superclass : #RTTest, - #category : #'Roassal2-Builder-Kiviat' -} - -{ #category : #tests } -RTKiviatBuilderTest >> testBasic [ - | b | - b := RTKiviatBuilder new. - b shapes: ((RTColorPalette qualitative colors: 12 scheme:'Paired') do: [:c | c alpha: 0.3]). - b objects: RTAbstractCircleLayout withAllSubclasses. - b addMetric: #numberOfLinesOfCode. - b addMetric: #numberOfMethods. - b addMetric: #numberOfVariables. - - b activateAxisTitle. - - b build. - - b recordElement: (b view elements detect: [ :e | e shape class == RTEllipse ]). - -] diff --git a/src/Roassal2/RTKiviatElement.class.st b/src/Roassal2/RTKiviatElement.class.st deleted file mode 100644 index dd3dd4c1e..000000000 --- a/src/Roassal2/RTKiviatElement.class.st +++ /dev/null @@ -1,78 +0,0 @@ -" -A RTKiviatElement is one element in the view. It has a reference on its kiviatNode, the name of the metric, its value and it position. - -Instance Variables - kiviatNode: - metric: - position: - value: - -kiviatNode - - xxxxx - -metric - - xxxxx - -position - - xxxxx - -value - - xxxxx - -" -Class { - #name : #RTKiviatElement, - #superclass : #RTObject, - #instVars : [ - 'kiviatNode', - 'metric', - 'value', - 'position' - ], - #category : #'Roassal2-Builder-Kiviat' -} - -{ #category : #initialization } -RTKiviatElement >> initialize [ - super initialize. -] - -{ #category : #accessing } -RTKiviatElement >> kiviatNode [ - ^ kiviatNode -] - -{ #category : #accessing } -RTKiviatElement >> kiviatNode: anRTKiviatNode [ - kiviatNode := anRTKiviatNode -] - -{ #category : #accessing } -RTKiviatElement >> metric [ - ^ metric -] - -{ #category : #accessing } -RTKiviatElement >> metric: aBlockOrSymbol [ - metric:= aBlockOrSymbol -] - -{ #category : #accessing } -RTKiviatElement >> position [ - ^ position -] - -{ #category : #accessing } -RTKiviatElement >> position: aPoint [ - position:= aPoint -] - -{ #category : #accessing } -RTKiviatElement >> value [ - ^ value -] - -{ #category : #accessing } -RTKiviatElement >> value: anObject [ - value := anObject -] diff --git a/src/Roassal2/RTKiviatFruitExample.class.st b/src/Roassal2/RTKiviatFruitExample.class.st deleted file mode 100644 index 03f6c048f..000000000 --- a/src/Roassal2/RTKiviatFruitExample.class.st +++ /dev/null @@ -1,91 +0,0 @@ -" -I am a utility class for and example of KiviatBuilder -" -Class { - #name : #RTKiviatFruitExample, - #superclass : #RTObject, - #instVars : [ - 'arr', - 'color', - 'name' - ], - #category : #'Roassal2-Builder-Kiviat' -} - -{ #category : #public } -RTKiviatFruitExample class >> fruits [ - ^ Array with: (self new values: #(6 8 5 2 6 5 7 9); color: Color red; name: 'apple') - with: (self new values: #(5 7 3 7 7 7 6 5); color: Color green; name: 'orange') - with: (self new values: #(4 3 5 9 5 5 4 4); color: Color blue; name: 'banana') -] - -{ #category : #accessing } -RTKiviatFruitExample >> color [ - ^ color -] - -{ #category : #accessing } -RTKiviatFruitExample >> color: aColor [ - color := aColor -] - -{ #category : #accessing } -RTKiviatFruitExample >> name [ - ^ name -] - -{ #category : #accessing } -RTKiviatFruitExample >> name: aString [ - name := aString - -] - -{ #category : #printing } -RTKiviatFruitExample >> printString [ - ^ name -] - -{ #category : #accessing } -RTKiviatFruitExample >> values: anArray [ - arr := anArray. -] - -{ #category : #metrics } -RTKiviatFruitExample >> w1 [ - ^ arr at: 1 -] - -{ #category : #metrics } -RTKiviatFruitExample >> w2 [ - ^ arr at: 2 -] - -{ #category : #metrics } -RTKiviatFruitExample >> w3 [ - ^ arr at: 3 -] - -{ #category : #metrics } -RTKiviatFruitExample >> w4 [ - ^ arr at: 4 -] - -{ #category : #metrics } -RTKiviatFruitExample >> w5 [ - ^ arr at: 5 -] - -{ #category : #metrics } -RTKiviatFruitExample >> w6 [ - ^ arr at: 6 -] - -{ #category : #metrics } -RTKiviatFruitExample >> w7 [ - ^ arr at: 7 -] - -{ #category : #metrics } -RTKiviatFruitExample >> w8 [ - ^ arr at: 8 -] diff --git a/src/Roassal2/RTKiviatMetric.class.st b/src/Roassal2/RTKiviatMetric.class.st deleted file mode 100644 index ca2f223d6..000000000 --- a/src/Roassal2/RTKiviatMetric.class.st +++ /dev/null @@ -1,119 +0,0 @@ -" -A RTKiviatMetric represent an axis in the view and is used to know where to place an element in the view according to a value. - -Instance Variables - maxSize: - maxValue: - minValue: - modelBlock: - -maxSize - - xxxxx - -maxValue - - xxxxx - -minValue - - xxxxx - -modelBlock - - xxxxx - -" -Class { - #name : #RTKiviatMetric, - #superclass : #RTObject, - #instVars : [ - 'maxSize', - 'modelBlock', - 'minValue', - 'maxValue', - 'named', - 'block', - 'angle' - ], - #category : #'Roassal2-Builder-Kiviat' -} - -{ #category : #accessing } -RTKiviatMetric >> block [ -"This block is about values of metric" - ^ block -] - -{ #category : #accessing } -RTKiviatMetric >> block: aOneArgBlock [ -"This block is about values of metric" - block := aOneArgBlock -] - -{ #category : #private } -RTKiviatMetric >> defaultMaxSize [ - maxSize := 200 -] - -{ #category : #default } -RTKiviatMetric >> defaultModelBlock [ - self block: [ :v | (v@0) ]. -] - -{ #category : #initialization } -RTKiviatMetric >> initialize [ - super initialize. - self defaultModelBlock. - self defaultMaxSize. - maxValue := 0. - minValue := 0. -] - -{ #category : #accessing } -RTKiviatMetric >> maxSize [ - ^ maxSize -] - -{ #category : #accessing } -RTKiviatMetric >> maxSize: aNumber [ - maxSize := aNumber. -] - -{ #category : #accessing } -RTKiviatMetric >> maxValue [ - ^ maxValue. -] - -{ #category : #accessing } -RTKiviatMetric >> maxValue: aNumber [ - maxValue := aNumber. -] - -{ #category : #accessing } -RTKiviatMetric >> minValue [ - ^ minValue. -] - -{ #category : #accessing } -RTKiviatMetric >> minValue: aNumber [ - minValue := aNumber. -] - -{ #category : #accessing } -RTKiviatMetric >> modelBlock [ -"this block is about axis rotation, size..." - ^ modelBlock -] - -{ #category : #accessing } -RTKiviatMetric >> modelBlock: aBlockOrSymbol [ -"this block is about axis rotation, size..." - modelBlock := aBlockOrSymbol -] - -{ #category : #accessing } -RTKiviatMetric >> named [ - ^ named -] - -{ #category : #accessing } -RTKiviatMetric >> named: aString [ - named := aString -] diff --git a/src/Roassal2/RTKiviatNode.class.st b/src/Roassal2/RTKiviatNode.class.st deleted file mode 100644 index 7befd907b..000000000 --- a/src/Roassal2/RTKiviatNode.class.st +++ /dev/null @@ -1,149 +0,0 @@ -" -A RTKiviatNode represent a polygon in the view, it represent one objects that is studied. It is composed by as many kiviatElement as the umber of metrics, connected by edges. - -Instance Variables - arrayValues: - edgeElements: - named: - nodeElements: - shapeEdge: - shapeNode: - -arrayValues - - xxxxx - -edgeElements - - xxxxx - -named - - xxxxx - -nodeElements - - xxxxx - -shapeEdge - - xxxxx - -shapeNode - - xxxxx - -" -Class { - #name : #RTKiviatNode, - #superclass : #RTObject, - #instVars : [ - 'named', - 'arrayValues', - 'nodeKiviatElements', - 'edgeKiviatElements', - 'shapeNode', - 'shapeEdge', - 'polygonElement' - ], - #category : #'Roassal2-Builder-Kiviat' -} - -{ #category : #adding } -RTKiviatNode >> addEdgeElement: anElement [ - edgeKiviatElements add: anElement. -] - -{ #category : #adding } -RTKiviatNode >> addEdgeElements: anElementsCollection [ - anElementsCollection do: [ :e | edgeKiviatElements add: e]. -] - -{ #category : #adding } -RTKiviatNode >> addNodeElement: anElement [ - nodeKiviatElements add: anElement. -] - -{ #category : #adding } -RTKiviatNode >> addNodeElements: anElementsCollection [ - anElementsCollection do: [ :e | nodeKiviatElements add: e]. -] - -{ #category : #accessing } -RTKiviatNode >> arrayValues [ - ^ arrayValues. -] - -{ #category : #default } -RTKiviatNode >> defaultArrayValues [ - arrayValues := Array new. -] - -{ #category : #default } -RTKiviatNode >> defaultShapeEdge [ - shapeEdge := RTLine new. -] - -{ #category : #default } -RTKiviatNode >> defaultShapeNode [ - shapeNode := RTEllipse new color: (Color blue alpha: 0.3); size: 10. -] - -{ #category : #accessing } -RTKiviatNode >> edgeKiviatElements [ - ^ edgeKiviatElements -] - -{ #category : #initialization } -RTKiviatNode >> initialize [ - super initialize. - self defaultArrayValues. - self defaultShapeNode. - self defaultShapeEdge. - nodeKiviatElements := OrderedCollection new. - edgeKiviatElements := OrderedCollection new. -] - -{ #category : #accessing } -RTKiviatNode >> named [ - ^ named -] - -{ #category : #accessing } -RTKiviatNode >> named: aString [ - named := aString -] - -{ #category : #accessing } -RTKiviatNode >> nodeKiviatElements [ - ^ nodeKiviatElements -] - -{ #category : #accessing } -RTKiviatNode >> polygonElement [ - ^ polygonElement. -] - -{ #category : #accessing } -RTKiviatNode >> polygonElement: anRTElement [ - polygonElement := anRTElement. -] - -{ #category : #accessing } -RTKiviatNode >> shapeEdge [ - ^ shapeEdge. -] - -{ #category : #accessing } -RTKiviatNode >> shapeEdge: aShape [ - shapeEdge := aShape. -] - -{ #category : #accessing } -RTKiviatNode >> shapeNode [ - ^ shapeNode. -] - -{ #category : #accessing } -RTKiviatNode >> shapeNode: aShape [ - shapeNode := aShape. -] - -{ #category : #accessing } -RTKiviatNode >> values: anArrayValue [ - arrayValues := anArrayValue. -] diff --git a/src/Roassal2/RTLabel.class.st b/src/Roassal2/RTLabel.class.st deleted file mode 100644 index cc81e6aef..000000000 --- a/src/Roassal2/RTLabel.class.st +++ /dev/null @@ -1,248 +0,0 @@ -" -A RTLabel is a shape to describe textual shape. --=-=-=-= -| v shape es | -v := RTView new. -shape := RTLabel new text: [ :c | 'Class ', c name ]. -es := shape elementsOn: Collection withAllSubclasses. -RTGridLayout on: es. -v addAll: es. -v open --=-=-=-= - -Raw font may also be provided: --=-=-=-= -v := RTView new. - -('/Library/Fonts/' asFileReference children first: 15) do: [ :fr | - rawFont := FreeTypeFont fromFile: fr fullName pointSize: 10 index: 0. - v add: (RTLabel new height: 4; rawFont: rawFont; elementOn: fr basename) ]. - -RTVerticalLineLayout on: v elements. -v @ RTDraggableView. -v --=-=-=-= -" -Class { - #name : #RTLabel, - #superclass : #RTShape, - #instVars : [ - 'text', - 'height', - 'fontName', - 'rawFont' - ], - #category : #'Roassal2-Shapes' -} - -{ #category : #configuration } -RTLabel class >> defaultColor [ - "Set the default color of RTLabel" - ^ Color gray -] - -{ #category : #public } -RTLabel class >> defaultFontName [ - "Return the default font name in Roassal" - ^ TRLabelShape defaultFamilyFontName - -] - -{ #category : #public } -RTLabel class >> defaultFontSize [ - "Return the default font size in Roassal" - ^ TRLabelShape defaultFontSize -] - -{ #category : #public } -RTLabel class >> text: aBlockOrValueOrSymbol [ - ^ self new text: aBlockOrValueOrSymbol -] - -{ #category : #configuration } -RTLabel >> defaultColor [ - - ^ self class defaultColor -] - -{ #category : #'instance creation' } -RTLabel >> defaultText [ - ^ [ :e | e model asString ] -] - -{ #category : #accessing } -RTLabel >> fontName: aValueOrAOneArgBlock [ - "aValueOrAOneArgBlock is applied on the object model" - "Set the font name used by the label. You can check the expression - FontChooser new fontListStrings. - to know the different font installed on the system" - self fontNameElement: [ :anElement | aValueOrAOneArgBlock rtValue: anElement model ] -] - -{ #category : #accessing } -RTLabel >> fontNameElement: aValueOrABlock [ - fontName := aValueOrABlock -] - -{ #category : #rendering } -RTLabel >> fontNameFor: element [ - ^ (fontName rtValue: element) asString -] - -{ #category : #accessing } -RTLabel >> height: aValueOrAOneArgBlock [ - "Set the height of the label" - "aValueOrAOneArgBlock is applied on the object model" - self heightElement: [ :anElement | aValueOrAOneArgBlock rtValue: anElement model ] -] - -{ #category : #accessing } -RTLabel >> heightElement: aValueOrABlock [ - height := aValueOrABlock -] - -{ #category : #rendering } -RTLabel >> heightFor: element [ - ^ height rtValue: element -] - -{ #category : #initialization } -RTLabel >> initialize [ - super initialize. - text := self defaultText. - height := self class defaultFontSize. - fontName := self class defaultFontName -] - -{ #category : #accessing } -RTLabel >> rawFont [ - "Return the raw font used by the label. If not explictely set, then it returns null" - ^ rawFont -] - -{ #category : #accessing } -RTLabel >> rawFont: aRawFont [ - "Set the raw font. In such a case, the lookup does not happen. For example: - --=-=-=-= -v := RTView new. - -('/Library/Fonts/' asFileReference children first: 15) do: [ :fr | - rawFont := FreeTypeFont fromFile: fr fullName pointSize: 10 index: 0. - v add: (RTLabel new height: 4; rawFont: rawFont; elementOn: fr basename) ]. - -RTVerticalLineLayout on: v elements. -v @ RTDraggableView. -v --=-=-=-= - " - rawFont := aRawFont -] - -{ #category : #accessing } -RTLabel >> text: aValueOrAOneArgBlock [ - "aValueOrAOneArgBlock is applied on the object model" - self textElement: [ :anElement | aValueOrAOneArgBlock rtValue: anElement model ] -] - -{ #category : #accessing } -RTLabel >> textElement: aStringOrABlock [ - - text := aStringOrABlock -] - -{ #category : #rendering } -RTLabel >> textFor: element [ - ^ (text rtValue: element) asString -] - -{ #category : #hooks } -RTLabel >> trachelShapeClass [ - "cancelled methods. Please check #trachelShapeForMultiLine: and #trachelShapeForOneLine:" -] - -{ #category : #hooks } -RTLabel >> trachelShapeFor: anElement [ - | c txt lines | - - c := self colorFor: anElement. - txt := self textFor: anElement. - lines := txt lines. - ^ lines size <= 1 - ifTrue: [ self trachelShapeForOneLine: anElement ] - ifFalse: [ self trachelShapeForMultiLine: anElement ] - -] - -{ #category : #'trachel shape production' } -RTLabel >> trachelShapeForMultiLine: anElement [ - | lines s lbl txt aColor fontSize | - aColor := self colorFor: anElement. - fontSize := self heightFor: anElement. - - txt := self textFor: anElement. - txt := txt copyReplaceAll: String tab with: ' '. - lines := txt lines. - - s := TRCompositeShape new. - lines doWithIndex: [ :l :index | - lbl := TRLabelShape new text: l. - lbl color: aColor. - lbl fontSize: fontSize. - s addShape: lbl " translateBy: 0 @ (index * fontSize)." - ]. - s verticalAndLeft. -" s := TRCompositeShape new. - lines reverse do: [ :l | - lbl := TRLabelShape new text: l. - lbl color: aColor. - lbl fontSize: fontSize. - - s shape1: lbl offset: lbl width / 2 @ 0. - - n := TRCompositeShape new. - n shape2: s offset: 0 @ 20. - s := n ]." - - "s offset2: s encompassingRectangle extent negated / 2." - - ^ s -] - -{ #category : #'trachel shape production' } -RTLabel >> trachelShapeForOneLine: anElement [ - | shape | - shape := TRLabelShape new. - shape text: (self textFor: anElement); - color: (self colorFor: anElement); - position: anElement position. - rawFont ifNil: [ - shape - fontSize: (self heightFor: anElement); - fontName: (self fontNameFor: anElement) ]. - rawFont ifNotNil: [ - shape font: rawFont - ]. - ^ shape -] - -{ #category : #rendering } -RTLabel >> updateFor: anElement trachelShape: trachelShape [ - | c s txt | - trachelShape isNil ifTrue: [ ^ self ]. - s := nil. - c := self colorFor: anElement. - trachelShape - color: c; - position: anElement position. - txt := self textFor: anElement. - trachelShape - text: txt on: anElement position; - rotateByDegrees: (self rotationFor: anElement); - scaleBy: (self scaleFor: anElement) -] - -{ #category : #rendering } -RTLabel >> widthFor: anElement [ - ^ TRLabelShape widthOfText: (self textFor: anElement) fontName: fontName fontSize: (self heightFor: anElement) -] diff --git a/src/Roassal2/RTLabelGenerator.class.st b/src/Roassal2/RTLabelGenerator.class.st deleted file mode 100644 index 03a720730..000000000 --- a/src/Roassal2/RTLabelGenerator.class.st +++ /dev/null @@ -1,229 +0,0 @@ -" -Reference: - [1] An Extension of Wilkinson's Algorithm for positioning Tick Labels on Axes (Justin Talbot, Sharon Lin, Pat Hanrahan) -" -Class { - #name : #RTLabelGenerator, - #superclass : #RTObject, - #instVars : [ - 'nice', - 'loose', - 'n', - 'w', - 'epsilon' - ], - #category : #'Roassal2-Builder-Grapher-Labeling' -} - -{ #category : #'instance creation' } -RTLabelGenerator class >> nice: aNiceGenerator [ - ^ self new nice: aNiceGenerator -] - -{ #category : #private } -RTLabelGenerator >> coverageMin: dmin max: dmax lmin: lmin lmax: lmax [ - | a b c| - a := dmax - lmax. - b := dmin - lmin. - c := 0.1 * (dmax - dmin). - ^ 1 - ( 0.5 * (((a * a) + (b * b))/ (c * c)) ) - -] - -{ #category : #private } -RTLabelGenerator >> coverageMin: dmin max: dmax span: span [ - | range r half| - range := dmax - dmin. - (span > range) ifTrue: [ - half := (span - range)/2. - r := 0.1*range. - ^ 1 - (half * half / (r * r) )]. - ^ 1.0 -] - -{ #category : #private } -RTLabelGenerator >> density: k m: m dmin: dmin dmax: dmax lmin: lmin lmax: lmax [ - "* k number of labels - * m number of desired labels - * dmin data range minimum - * dmax data range maximum - * lmin label range minimum - * lmax label range maximum - * ^ density - - k-1 number of intervals between labels - m-1 number of intervals between desired number of labels - r label interval length/label range - rt desired label interval length/actual range" - | r rt | - r := (k -1)/(lmax - lmin). - rt := (m - 1)/((lmax max: dmax) - (lmin min: dmin) ). - ^ 2 - ( (r/rt) max: (rt/r) ). -] - -{ #category : #private } -RTLabelGenerator >> densityMax: k m: m [ - (k >= m) ifTrue: [ ^ 2 - ((k-1)/(m-1)) ]. - ^ 1 -] - -{ #category : #private } -RTLabelGenerator >> epsilon [ - " Compute the machine epsilon for the float type, the largest positive - floating-point value that, when added to 1, results in a value equal to 1 due to - roundoff." - | temp | - epsilon ifNotNil: [ ^ epsilon ]. - temp := 0.5. - [ (1 + temp) > 1 ] whileTrue: [ temp := temp / 2 ]. - epsilon := temp. - ^ epsilon. - -] - -{ #category : #private } -RTLabelGenerator >> flooredMod: a n: num [ - ^ a - (num * (a / num) floor). -] - -{ #category : #initialization } -RTLabelGenerator >> initialize [ - super initialize. - nice := nil. - loose := false. - w := #(0.25 0.2 0.5 0.05) -] - -{ #category : #private } -RTLabelGenerator >> legibility: min max: max step: step [ - ^ 1 -] - -{ #category : #public } -RTLabelGenerator >> nice: aNiceGenerator [ - nice := aNiceGenerator -] - -{ #category : #public } -RTLabelGenerator >> searchMin: dmin max: dmax desired: desiredNumberOfTicks [ - | best sm dm cm delta bestScore k | - best := RTGrapherLabel new. - bestScore := -2. - desiredNumberOfTicks <= 0 ifTrue: [ self error: 'The minimun value of desiredNumberOfTicks is 1' ]. - - "In case of a particular situation" - (dmin = 0 and: [ dmax = 0 ]) ifTrue: [ - best - min: 0; - max: 1; - step: 1; - score: bestScore. - ^ best ]. - - [ :break | - [ true ] whileTrue: [ - n := nice next. - sm := self simplicityMax. - ((self w: sm c: 1 d: 1 l: 1) < bestScore) - ifTrue: [ break value ]. - k := 2. - [ :break2 | - [ true ] whileTrue: [ | z | - dm := [ self densityMax: k m: desiredNumberOfTicks ] on: ZeroDivide do: [ :ex | self error: 'Please increase the value of desiredNumberOfTicks/labels' ]. - ((self w: sm c: 1 d: dm l: 1) < bestScore) - ifTrue: [ break2 value ]. - delta := (dmax - dmin)/(k+1)/ n j/ (nice qat: n i). - z := (nice logB: delta) ceiling. - [ :break3| - [ true ] whileTrue: [ - [ :continue | | minStart maxStart step | - step := n j * (nice qat: n i) * (nice base raisedTo: z). - cm := self coverageMin: dmin max: dmax span: step * (k-1). - ((self w: sm c: cm d: dm l: 1) < bestScore) - ifTrue: [ break3 value ]. - minStart := ((dmax / step) floor - (k-1)) * n j. - maxStart := (dmin / step) ceiling * n j. - (minStart > maxStart) ifTrue: [ - z := z +1. - continue value. ]. - - (minStart to: maxStart) do: [ :start | - | lmin lmax lstep c s d l score | - lmin := start * step / n j. - lmax := lmin + (step * (k -1)). - lstep := step. - c := self coverageMin: dmin max: dmax lmin: lmin lmax: lmax. - s := self simplicity: lmin max: lmax step: lstep. - d := self density: k m: desiredNumberOfTicks dmin: dmin dmax: dmax lmin: lmin lmax: lmax. - l := self legibility: lmin max: lmax step: lstep. - score := self w: s c: c d: d l: l. - - ((score > bestScore) and: - [ loose not or: [ (lmin <= dmin) and: - [ lmax >= dmax ] ] ]) ifTrue: [ - best - min: lmin; - max: lmax; - step: lstep; - score: score. - bestScore := score. - ]. - ]. - z := z +1. - ] valueWithExit. - ]. - ] valueWithExit. - k := k +1. - ]. - ] valueWithExit. - ] - ] valueWithExit. - - nice reset. - - ^ best. -] - -{ #category : #public } -RTLabelGenerator >> setLooseFlag: aBool [ - "Configuration to 'loose' labelings. - The extreme labels can be placement both inside(setLooseFlag: false) and outside (setLooseFlag: true) of the range of the data. - - Example - .=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.= - lg setLooseFlag: true. - label := lg searchMin: -98.0 max: 18.0 desired: 3. - self assert: label asString = '(Score: 0.14) -100.00 -60.00 -20.00 20.00 '. - lg setLooseFlag: false. - label := lg searchMin: -98.0 max: 18.0 desired: 3. - self assert: label asString = '(Score: 0.62) -100.00 -50.00 0.00 '. - .=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.=.= - " - loose := aBool. - nice reset. -] - -{ #category : #private } -RTLabelGenerator >> simplicity: min max: max step: step [ - (nice qvar size > 1) ifTrue: [ - ^ 1 - (n i/ (nice qvar size - 1)) - n j + (self vMin: min max: max step: step) ]. - ^ 1 - n j + (self vMin: min max: max step: step) - -] - -{ #category : #private } -RTLabelGenerator >> simplicityMax [ - (nice qvar size > 1) ifTrue: [ ^ 1 - ((n i )/(nice qvar size -1)) - n j + 1.0 ]. - ^ 1 - n j + 1.0 -] - -{ #category : #private } -RTLabelGenerator >> vMin: min max: max step: step [ - ^ ((self flooredMod: min n: step) < (self epsilon) - and: [ min <= 0 and: [ max >= 0 ] ]) ifTrue: [ 1 ] ifFalse: [ 0 ] -] - -{ #category : #private } -RTLabelGenerator >> w: s c: c d: d l: l [ - ^ (w first * s) + (w second * c) + (w third * d) + (w fourth * l) -] diff --git a/src/Roassal2/RTLabelGeneratorTest.class.st b/src/Roassal2/RTLabelGeneratorTest.class.st deleted file mode 100644 index ddca62766..000000000 --- a/src/Roassal2/RTLabelGeneratorTest.class.st +++ /dev/null @@ -1,95 +0,0 @@ -" -A RTLabelGeneratorTest is a test class for testing the behavior of RTLabelGenerator -" -Class { - #name : #RTLabelGeneratorTest, - #superclass : #RTTest, - #instVars : [ - 'nice', - 'lg' - ], - #category : #'Roassal2-Tests' -} - -{ #category : #running } -RTLabelGeneratorTest >> setUp [ - super setUp. - nice := RTNiceStepSizeGenerator new. - lg := RTLabelGenerator nice: nice. - -] - -{ #category : #tests } -RTLabelGeneratorTest >> testError [ - | label | - self should: [ label := lg searchMin: -98.0 max: 18.0 desired: 1. ] raise: Error description: 'entry to short'. - self should: [ label := lg searchMin: -98.0 max: 18.0 desired: 0. ] raise: Error description: 'entry to short' -] - -{ #category : #tests } -RTLabelGeneratorTest >> testSearch [ - | label | - lg setLooseFlag: true. - label := lg searchMin: -98.0 max: 18.0 desired: 3. - self assert: label asString = '(Score: 0.14) -100.00 -60.00 -20.00 20.00 '. - lg setLooseFlag: false. - label := lg searchMin: -98.0 max: 18.0 desired: 3. - self assert: label asString = '(Score: 0.62) -100.00 -50.00 0.00 '. - - lg setLooseFlag: true. - label := lg searchMin: -1 max: 3.5 desired: 4. - self assert: label asString = '(Score: 0.54) -1.00 0.00 1.00 2.00 3.00 4.00 '. - lg setLooseFlag: false. - label := lg searchMin: -1 max: 3.5 desired: 4. - self assert: label asString = '(Score: 0.63) -1.00 0.00 1.00 2.00 3.00 '. - - lg setLooseFlag: true. - label := lg searchMin: -1 max: 200 desired: 3. - self assert: label asString = '(Score: -0.29) -25.00 50.00 125.00 200.00 '. - lg setLooseFlag: false. - label := lg searchMin: -1 max: 200 desired: 3. - self assert: label asString = '(Score: 1.00) 0.00 100.00 200.00 '. - - lg setLooseFlag: true. - label := lg searchMin: 119 max: 178 desired: 3. - self assert: (label asString = '(Score: -0.65) 110.00 150.00 190.00 ' or: - [label asString = '(Score: -0.65) 110.00 130.00 150.00 170.00 190.00 ']). - lg setLooseFlag: false. - label := lg searchMin: 119 max: 178 desired: 3. - self assert: label asString = '(Score: 0.48) 120.00 150.00 180.00 '. - - lg setLooseFlag: true. - label := lg searchMin: -31 max: 27 desired: 4. - self assert: label asString = '(Score: 0.07) -40.00 -30.00 -20.00 -10.00 0.00 10.00 20.00 30.00 '. - lg setLooseFlag: false. - label := lg searchMin: -31 max: 27 desired: 3. - self assert: label asString = '(Score: 0.71) -30.00 0.00 30.00 '. - - lg setLooseFlag: true. - label := lg searchMin: -55.45 max: -49.99 desired: 2. - self assert: label asString = '(Score: -1.13) -56.00 -48.00 '. - lg setLooseFlag: false. - label := lg searchMin: -55.45 max: -49.99 desired: 3. - self assert: label asString = '(Score: 0.49) -55.00 -52.50 -50.00 '. - - lg setLooseFlag: false. - label := lg searchMin: 0 max: 100 desired: 2. - self assert: label asString = '(Score: 1.00) 0.00 100.00 '. - label := lg searchMin: 0 max: 100 desired: 3. - self assert: label asString = '(Score: 0.95) 0.00 50.00 100.00 '. - label := lg searchMin: 0 max: 100 desired: 4. - self assert: label asString = '(Score: 0.70) 0.00 50.00 100.00 '. - label := lg searchMin: 0 max: 100 desired: 5. - self assert: label asString = '(Score: 0.85) 0.00 25.00 50.00 75.00 100.00 '. - label := lg searchMin: 0 max: 100 desired: 6. - self assert: label asString = '(Score: 0.90) 0.00 20.00 40.00 60.00 80.00 100.00 '. - label := lg searchMin: 0 max: 100 desired: 7. - self assert: label asString = '(Score: 0.80) 0.00 20.00 40.00 60.00 80.00 100.00 '. - label := lg searchMin: 0 max: 100 desired: 8. - self assert: label asString = '(Score: 0.79) 0.00 10.00 20.00 30.00 40.00 50.00 60.00 70.00 80.00 90.00 100.00 '. - label := lg searchMin: 0 max: 100 desired: 9. - self assert: label asString = '(Score: 0.88) 0.00 10.00 20.00 30.00 40.00 50.00 60.00 70.00 80.00 90.00 100.00 '. - label := lg searchMin: 0 max: 100 desired: 10. - self assert: label asString = '(Score: 0.94) 0.00 10.00 20.00 30.00 40.00 50.00 60.00 70.00 80.00 90.00 100.00 '. - -] diff --git a/src/Roassal2/RTLabelLegendItem.class.st b/src/Roassal2/RTLabelLegendItem.class.st deleted file mode 100644 index edb857d70..000000000 --- a/src/Roassal2/RTLabelLegendItem.class.st +++ /dev/null @@ -1,52 +0,0 @@ -Class { - #name : #RTLabelLegendItem, - #superclass : #RTLegendItem, - #instVars : [ - 'text', - 'model', - 'color' - ], - #category : #'Roassal2-Builder-Legend' -} - -{ #category : #accessing } -RTLabelLegendItem >> color [ - ^ color -] - -{ #category : #accessing } -RTLabelLegendItem >> color: aColor [ - color := aColor -] - -{ #category : #hooks } -RTLabelLegendItem >> execute [ - - ^ RTGroup new add: - ((self newLabelShape: text) elementOn: model); yourself -] - -{ #category : #accessing } -RTLabelLegendItem >> model [ - ^ model -] - -{ #category : #accessing } -RTLabelLegendItem >> model: anObject [ - model := anObject -] - -{ #category : #accessing } -RTLabelLegendItem >> text [ - ^ text -] - -{ #category : #accessing } -RTLabelLegendItem >> text: aTextOrSymbolOrBlock [ - text := aTextOrSymbolOrBlock -] - -{ #category : #accessing } -RTLabelLegendItem >> textColor [ - ^ color -] diff --git a/src/Roassal2/RTLabelTest.class.st b/src/Roassal2/RTLabelTest.class.st deleted file mode 100644 index 107f0e2a5..000000000 --- a/src/Roassal2/RTLabelTest.class.st +++ /dev/null @@ -1,166 +0,0 @@ -Class { - #name : #RTLabelTest, - #superclass : #RTTest, - #category : #'Roassal2-Core-Tests' -} - -{ #category : #font } -RTLabelTest >> DOESNOTWORKtestFont [ - | v shape es firstShape fontList | - v := RTView new. - fontList := TRPlatform current fontListStrings. - shape := RTLabel new - fontName: [ :i | fontList at: i ]; - text: 'The quick brown fox jumps over the lazy dog'. - - es := shape elementsOn: (1 to: fontList size). - es @ RTPopup. - - v addAll: es. - RTVerticalLineLayout on: v elements. - - firstShape := v canvas shapes first. - self assert: firstShape fontName equals: fontList first. -] - -{ #category : #tests } -RTLabelTest >> rotated45gridLayout [ - - " - self new rotated45gridLayout. - " - | v shape | - v := RTView new. - 1 to: 20 do: [ :i | - shape := RTRotatedLabel new. - shape text: 'Hello World'. - shape angleInDegree: 45. - v add: shape element. - ]. - RTGridLayout on: v elements. - ^ v -] - -{ #category : #tests } -RTLabelTest >> rotated90gridLayout [ - - " - self new rotated90gridLayout. - " - | v shape | - v := RTView new. - 1 to: 20 do: [ :i | - shape := RTRotatedLabel new. - shape text: 'Hello World'. - shape angleInDegree: 90. - v add: shape element. - ]. - RTGridLayout on: v elements. - ^ v -] - -{ #category : #tests } -RTLabelTest >> testDefault [ - self assert: (RTLabel new heightFor: RTElement new) = TRLabelShape new defaultFontSize. -] - -{ #category : #tests } -RTLabelTest >> testEncompassing [ - - | lbl rec | - lbl := (RTLabel elementOn: 'hello world'). - rec := lbl encompassingRectangle. - self assert: rec class == Rectangle. - self assert: rec center = (0 @ 0). - self assert: rec extent > (10 @ 10) -] - -{ #category : #tests } -RTLabelTest >> testHeight2 [ - | v label els | - v := RTView new. - label := RTLabel new. - label height: #yourself. - els := label elementsOn: (1 to: 3). - self assert: els first trachelShape text = '1'. - self assert: els first trachelShape fontSize = 1. - - self assert: els second trachelShape text = '2'. - self assert: els second trachelShape fontSize = 2. - - self assert: els third trachelShape text = '3'. - self assert: els third trachelShape fontSize = 3. -] - -{ #category : #tests } -RTLabelTest >> testLabel [ - | label1 label2 el | - label1 := RTLabel new. - label2 := RTLabel new textElement: [ :e | e model, '2' ]. - el := RTElement on: 'hello'. - self assert: (label1 textFor: el) = 'hello'. - self assert: (label2 textFor: el) = 'hello2'. -] - -{ #category : #tests } -RTLabelTest >> testLabelAndElement [ - | label el | - label := RTLabel new textElement: [ :e | e model ]. - el := label elementOn: 'hello'. - self assert: el width = (label widthFor: el) -] - -{ #category : #tests } -RTLabelTest >> testLabelHeight [ - | label1 label2 el | - label1 := RTLabel new text: 'hello'. - label2 := RTLabel new text: 'hello world'. - el := RTElement new. - self assert: (label1 heightFor: el) = (label2 heightFor: el) -] - -{ #category : #tests } -RTLabelTest >> testLabelWidth [ - | label1 label2 el | - label1 := RTLabel new text: 'hello'. - label2 := RTLabel new text: 'hello world'. - el := RTElement new. - self assert: (label1 widthFor: el) < (label2 widthFor: el) -] - -{ #category : #'test multilines' } -RTLabelTest >> testMultiline01 [ - - | v lbl | - v := RTView new. - lbl := RTLabel elementOn: 'Hello', String cr, 'World'. - v add: lbl. - - lbl trachelShape setAsFixed. - self assert: lbl trachelShape class == TRCompositeShape -] - -{ #category : #tests } -RTLabelTest >> testText [ - | v label els | - v := RTView new. - label := RTLabel new. - els := label elementsOn: (1 to: 30). - self assert: els first trachelShape text = '1'. - self assert: els second trachelShape text = '2'. -] - -{ #category : #tests } -RTLabelTest >> testUpdatingShape [ - | view el | - view := RTView new. - el := (RTLabel new text: 'Hello') element. - view add: el. - - self assert: el trachelShape class == TRLabelShape. - self assert: el trachelShape text = 'Hello'. - - el shape text: 'Change'; color: Color red. el update. - self assert: el trachelShape class == TRLabelShape. - self assert: el trachelShape text = 'Change'. -] diff --git a/src/Roassal2/RTLabeled.class.st b/src/Roassal2/RTLabeled.class.st deleted file mode 100644 index a1d5aea66..000000000 --- a/src/Roassal2/RTLabeled.class.st +++ /dev/null @@ -1,139 +0,0 @@ -" -A RTLabeled adds a label above an element. The label may be particularized using #text: in the default string representation is not sufficient. Consider: - -E.g., -v := RTView new. -e := (RTEllipse new size: 30) elementOn: 42. -v add: e. -e @ (RTLabeled new text: [ :value | 'My value is ', value asString ]). -v - -Instance Variables - canvas: - color: - highlightable: - lowColor: - offsetOnEdge: - position: - text: - -canvas - - xxxxx - -color - - xxxxx - -highlightable - - xxxxx - -lowColor - - xxxxx - -offsetOnEdge - - xxxxx - -position - - xxxxx - -text - - xxxxx - -" -Class { - #name : #RTLabeled, - #superclass : #RTAbstractLabeled, - #category : #'Roassal2-Interactions' -} - -{ #category : #public } -RTLabeled class >> above [ - "Default behavior" - ^ self new -] - -{ #category : #public } -RTLabeled class >> below [ - ^ self new below -] - -{ #category : #public } -RTLabeled class >> center [ - ^ self new center -] - -{ #category : #initialization } -RTLabeled >> initialize [ - super initialize. - text := #model. - self top. - color := Color gray. - lowColor := Color veryVeryLightGray. - - highlightable := false. - offsetOnEdge := 0.5. - - fontSize := TRLabelShape defaultFontSize. - - canvas := [ :el | - el view ifNil: [ self error: 'You are trying to use RTLabelled on an element before adding the element to the view. Two solutions: (i) specify the view to the RTLabelled (using #view:) or (ii) use RTLabelled after having added the element' ]. - el view canvas ] -] - -{ #category : #hooks } -RTLabeled >> initializeElement: element [ - | s t | - "We first get a reference to the canvas, and then we add the shape in it" - "We are using the variable canvas to let the user specificy the canvas (or the view) before - adding the element into it" - "Make sure that if we remove the element, the trachel shape is also removed" - "Not really nice. Maybe a different solution could be to have a double dispatch" - t := text rtValue: element. - t isNil - ifTrue: [ ^ self ]. - s := element trachelShape. - labelTrachel := TRLabelShape new text: t asString. - labelTrachel color: (color rtValue: element). - labelTrachel fontSize: (fontSize rtValue: element model). - canvas := canvas rtValue: element. - canvas addShape: labelTrachel. - self pushBackLabelIfNecessary. - self makeLabelHighlightableIfNecessaryBy: element. - self registerRemoveCallbackForElement: element. - (element isKindOf: RTEdge) - ifTrue: [ TRConstraint - stick: labelTrachel - between: element from trachelShape - and: element to trachelShape - offset: offsetOnEdge. - ^ labelTrachel ]. - self positionLabelAgainst: s. - ^ labelTrachel -] - -{ #category : #hooks } -RTLabeled >> positionLabelAgainst: s [ - "Argument is a trachel shape" - self isTop - ifTrue: [ TRConstraint stick: labelTrachel above: s ]. - self isBelow - ifTrue: [ TRConstraint stick: labelTrachel below: s ]. - self isLeft - ifTrue: [ TRConstraint stick: labelTrachel onTheLeftOf: s ]. - self isRight - ifTrue: [ TRConstraint stick: labelTrachel onTheRightOf: s ]. - self isCenter - ifTrue: [ TRConstraint stick: labelTrachel onTheCenterOf: s ]. - self isBottomLeft - ifTrue: [ TRConstraint stick: labelTrachel onTheBottomLeftOf: s ] -] - -{ #category : #hooks } -RTLabeled >> registerRemoveCallbackForElement: element [ - | callback | - callback := TRRemoveCallback new - block: [ :shape | labelTrachel remove ]. "Make sure that if we remove the element, the trachel shape is also removed" - element trachelShape addCallback: callback. - element - attributeAt: #RTLabelledCallback put: callback; - attributeAt: #RTLabelledLabel put: labelTrachel -] diff --git a/src/Roassal2/RTLabeledTest.class.st b/src/Roassal2/RTLabeledTest.class.st deleted file mode 100644 index 041759837..000000000 --- a/src/Roassal2/RTLabeledTest.class.st +++ /dev/null @@ -1,111 +0,0 @@ -Class { - #name : #RTLabeledTest, - #superclass : #RTTest, - #category : #'Roassal2-Core-Tests' -} - -{ #category : #tests } -RTLabeledTest >> testAddAndRemoveLabel [ - - | v e | - e := RTEllipse elementOn: 'hello'. - v := RTView new. - v add: e. - self deny: (RTLabeled hasLabel: e). - - e @ RTLabeled. - self assert: (RTLabeled hasLabel: e). - - RTLabeled removeLabelFrom: e. - self deny: (RTLabeled hasLabel: e). -] - -{ #category : #tests } -RTLabeledTest >> testConstruction [ - - RTLabeled above; below; center -] - -{ #category : #tests } -RTLabeledTest >> testDefault [ - - | v el | - v := RTView new. - el := (RTBox new size: 30) elementOn: 'hello world'. - v add: el. - - el @ RTLabeled. - self assert: v numberOfElements = 1. - self assert: v canvas numberOfShapes = 2. - - self assert: v canvas shapes first class == TRLabelShape. - self assert: v canvas shapes first position x = 0. - self assert: v canvas shapes first position y < 10 -] - -{ #category : #tests } -RTLabeledTest >> testDefaultFromNumber [ - - | v el | - v := RTView new. - el := (RTBox new size: 30) elementOn: 5. - v add: el. - - el @ RTLabeled. - self assert: v numberOfElements = 1. - self assert: v canvas numberOfShapes = 2. - - self assert: v canvas shapes first class == TRLabelShape. - self assert: v canvas shapes first position x = 0. - self assert: v canvas shapes first position y < 10. - self assert: v canvas shapes first text = '5'. -] - -{ #category : #tests } -RTLabeledTest >> testDefaultWithNoLabel [ - - | v el | - v := RTView new. - el := (RTBox new size: 30) element. - v add: el. - - el @ RTLabeled. - self assert: v numberOfElements = 1. - - "No label since there is no object behind the el" - self assert: v canvas numberOfShapes = 1. - -] - -{ #category : #tests } -RTLabeledTest >> testRemovingLabelledElement [ - - | v el | - v := RTView new. - el := (RTBox new size: 30) elementOn: 'hello world'. - v add: el. - - el @ RTLabeled. - self assert: v numberOfElements = 1. - self assert: v canvas numberOfShapes = 2. - - el remove. - self assert: v numberOfElements equals: 0. - self assert: v canvas numberOfShapes equals: 0. - -] - -{ #category : #tests } -RTLabeledTest >> testremoveFromElements [ - | v es | - es := RTEllipse elementsOn: #(1 2 3). - v := RTView new. - v addAll: es. - self deny: (RTLabeled hasLabel: es anyOne). - - es @ RTLabeled. - self assert: (RTLabeled hasLabel: es anyOne). - - RTLabeled removeLabelFromElements: es. - self deny: (RTLabeled hasLabel: es anyOne). -] diff --git a/src/Roassal2/RTLabelled.class.st b/src/Roassal2/RTLabelled.class.st deleted file mode 100644 index ad74ec015..000000000 --- a/src/Roassal2/RTLabelled.class.st +++ /dev/null @@ -1,19 +0,0 @@ -" -THIS CLASS IS OBSOLETE. PLEASE REFER TO RTLabeled -" -Class { - #name : #RTLabelled, - #superclass : #RTLabeled, - #category : #'Roassal2-Interactions' -} - -{ #category : #'instance creation' } -RTLabelled class >> new [ - self deprecated: 'RTLabelled is deprecated. Please use RTLabeled'. - ^ super new -] - -{ #category : #'obsolete class' } -RTLabelled >> OBSOLETECLASS [ - "THIS CLASS IS OBSOLETE. PLEASE REFER TO RTLabeled" -] diff --git a/src/Roassal2/RTLayout.class.st b/src/Roassal2/RTLayout.class.st deleted file mode 100644 index 36d59ec84..000000000 --- a/src/Roassal2/RTLayout.class.st +++ /dev/null @@ -1,254 +0,0 @@ -" -A ROLayout is the superclass of all. - -Instance Variables - affectedNodes: - currentIteraction: - eventHandler: - maxInterations: - translator: - -affectedNodes - - xxxxx - -currentIteraction - - xxxxx - -eventHandler - - xxxxx - -maxInterations - - xxxxx - -translator - - xxxxx - -" -Class { - #name : #RTLayout, - #superclass : #RTObject, - #instVars : [ - 'affectedNodes', - 'translator', - 'eventHandler', - 'currentIteraction' - ], - #category : #'Roassal2-Layouts' -} - -{ #category : #public } -RTLayout class >> isAbstract [ - ^ self name = #RTLayout -] - -{ #category : #public } -RTLayout class >> isNotAbstract [ - ^ self isAbstract not -] - -{ #category : #public } -RTLayout class >> on: aCollection [ - "main entry point of the class" - - "If aCollection is empty, then there is not much to do" - aCollection isEmpty ifTrue: [ ^ aCollection ]. - self new applyOn: aCollection. - ^ aCollection -] - -{ #category : #public } -RTLayout class >> on: elements edges: edges [ - "To make all the layout polymorphic" - - ^ self on: elements -] - -{ #category : #public } -RTLayout class >> onElement: aRoassalViewOrRoassalElement [ - - ^ self on: aRoassalViewOrRoassalElement elements -] - -{ #category : #public } -RTLayout class >> onView: aRoassalView [ - - ^ self on: aRoassalView elements -] - -{ #category : #hook } -RTLayout >> applyOn: elements [ - "Return quickly if there is nothing to do" - elements isEmpty ifTrue: [ ^ self ]. - self executeOnElements: elements -] - -{ #category : #hook } -RTLayout >> doExecute: elements [ - "Performs the layout" - - self subclassResponsibility -] - -{ #category : #hook } -RTLayout >> doInitialize: elements [ - "Method executed before beginning the layout. Useful when the graph to be ordered need to be prepared" - "self announce: (ROLayoutBegin new elements: elements)." -] - -{ #category : #hook } -RTLayout >> doPost: elements [ - "Method executed after performing the layout" - -] - -{ #category : #accessing } -RTLayout >> executeOnElements: elements [ - "Execute the layout, myself, on the elements" - - self doInitialize: elements. - self doExecute: elements asOrderedCollection. - self doPost: elements. - -] - -{ #category : #utils } -RTLayout >> fatherOf: aNode [ - ^ aNode attributes at: #father ifAbsent: [ nil ] -] - -{ #category : #utils } -RTLayout >> fatherOf: aNode put: aValue [ - aNode attributes at: #father put: aValue -] - -{ #category : #'initialize-release' } -RTLayout >> initialize [ - super initialize. - translator := RTLayoutTranslator default. - -] - -{ #category : #testing } -RTLayout >> isEdgeDrivenLayout [ - ^ false -] - -{ #category : #utils } -RTLayout >> layerOf: aNode [ - ^ aNode attributes at: #layout -] - -{ #category : #utils } -RTLayout >> layerOf: aNode put: aValue [ - aNode attributes at: #layout put: aValue -] - -{ #category : #utils } -RTLayout >> leftContourOf: aNode [ - ^ aNode attributes at: #leftContour ifAbsent: [ ^ nil ] -] - -{ #category : #utils } -RTLayout >> leftContourOf: aNode put: aValue [ - aNode attributes at: #leftContour put: aValue -] - -{ #category : #utils } -RTLayout >> modOf: aNode [ - ^ aNode attributes at: #mod ifAbsent: [ ^ 0 ] - -] - -{ #category : #utils } -RTLayout >> modOf: aNode put: aFloat [ - aNode attributes at: #mod put: aFloat - -] - -{ #category : #hook } -RTLayout >> on: elements [ - self applyOn: elements -] - -{ #category : #hook } -RTLayout >> on: elements edges: edges [ - self applyOn: elements -] - -{ #category : #utils } -RTLayout >> pointerOf: aNode [ - - ^ aNode attributes at: #pointer ifAbsent: [ ^ nil ] -] - -{ #category : #utils } -RTLayout >> pointerOf: aNode put: aValue [ - - ^ aNode attributes at: #pointer put: aValue -] - -{ #category : #utils } -RTLayout >> rOf: aNode [ - ^ aNode attributes at: #r ifAbsent: [ 0 ] - -] - -{ #category : #utils } -RTLayout >> rOf: aNode put: aValue [ - ^ aNode attributes at: #r put: aValue -] - -{ #category : #utils } -RTLayout >> rightContourOf: aNode [ - ^ aNode attributes at: #rightContour ifAbsent: [ ^ nil ] -] - -{ #category : #utils } -RTLayout >> rightContourOf: aNode put: aValue [ - aNode attributes at: #rightContour put: aValue -] - -{ #category : #events } -RTLayout >> step [ -" currentIteraction := currentIteraction + 1. - (currentIteraction \\ self iterationsToSendEvent) = 0 - ifTrue: [ self announce: (ROLayoutStep new - currentIteration: currentIteraction; - maxInterations: maxInterations) ]. - " -] - -{ #category : #utils } -RTLayout >> thetaOf: aNode [ - ^ aNode attributes at: #theta ifAbsent: [ ^ 0 ] -] - -{ #category : #utils } -RTLayout >> thetaOf: aNode put: aValue [ - ^ aNode attributes at: #theta put: aValue -] - -{ #category : #accessing } -RTLayout >> translator [ - ^ translator -] - -{ #category : #accessing } -RTLayout >> translator: t [ - translator := t -] - -{ #category : #hook } -RTLayout >> userDefinedEdges: edges [ - "Do nothing" -] - -{ #category : #utils } -RTLayout >> xOf: aNode [ - ^ aNode attributes at: #x ifAbsent: [ 0 ] -] - -{ #category : #utils } -RTLayout >> xOf: aNode put: aValue [ - aNode attributes at: #x put: aValue -] diff --git a/src/Roassal2/RTLayoutAnimation.class.st b/src/Roassal2/RTLayoutAnimation.class.st deleted file mode 100644 index a190ae4e5..000000000 --- a/src/Roassal2/RTLayoutAnimation.class.st +++ /dev/null @@ -1,46 +0,0 @@ -Class { - #name : #RTLayoutAnimation, - #superclass : #RTAnimation, - #instVars : [ - 'layout', - 'elements' - ], - #category : #'Roassal2-Animation' -} - -{ #category : #accessing } -RTLayoutAnimation >> elements [ - ^ elements -] - -{ #category : #accessing } -RTLayoutAnimation >> elements: anObject [ - elements := anObject -] - -{ #category : #testing } -RTLayoutAnimation >> hasCompleted [ - ^ false -] - -{ #category : #initialization } -RTLayoutAnimation >> initialize [ - super initialize. - layout := RTGridLayout new -] - -{ #category : #accessing } -RTLayoutAnimation >> layout [ - ^ layout -] - -{ #category : #accessing } -RTLayoutAnimation >> layout: anObject [ - layout := anObject -] - -{ #category : #refreshing } -RTLayoutAnimation >> refresh [ - layout on: elements. - -] diff --git a/src/Roassal2/RTLayoutBuilder.class.st b/src/Roassal2/RTLayoutBuilder.class.st deleted file mode 100644 index 1fd35473f..000000000 --- a/src/Roassal2/RTLayoutBuilder.class.st +++ /dev/null @@ -1,403 +0,0 @@ -" -RTLayoutBuilder is a higher abstract to manage layout. Most builder use it as it significantly shorten the use of layouts. - -Consider the following example: --=-=-=-=-=-=-=-=-=-=-=-= -v := RTView new. - -es := (RTBox new size: 8) elementsOn: (1 to: 100). -v addAll: es. - -lb := RTLayoutBuilder new. -lb horizontalFlow. -lb setUpElements: es. - -v --=-=-=-=-=-=-=-=-=-=-=-= - -Another example using conditional layout: --=-=-=-=-=-=-=-=-=-=-=-= -b := RTMondrian new. -b nodes: self. -b edges connectToAll: [ :c | c queryAllOutgoingInvocations atTypeScope ]. -b layout - forceWithCharge: -300; - ifElement: #isNotConnected then: RTNullLayout new. -b --=-=-=-=-=-=-=-=-=-=-=-= -" -Class { - #name : #RTLayoutBuilder, - #superclass : #RTObject, - #instVars : [ - 'layout', - 'actionOnEdges', - 'partitions', - 'dynamicForceBasedLayout' - ], - #category : #'Roassal2-Builder-Common' -} - -{ #category : #'public - layout' } -RTLayoutBuilder >> cell [ - layout := RTCellLayout new. - ^ layout -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> circle [ - layout := RTCircleLayout new. - ^ layout -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> circleWithRadius: aRadiusInPixels [ - layout := RTCircleLayout new. - layout radius: aRadiusInPixels. - ^ layout -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> clean [ - "Move non connected elements to a side - - Here is an example: --=-=-=-=-= -b := RTMondrian new. -b nodes: Collection allSubclasses. -b normalizer normalizeSize: #numberOfMethods. - -b edges connectFrom: #superclass. -b layout - tree; - clean. -b --=-=-=-=-= - " - self ifNotConnectedThen: RTGridLayout new. -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> cluster [ - - layout := RTClusterLayout new. - ^ layout -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> date [ - "Used by RTCalendarBuilder" - layout := RTDateLayout new. - ^ layout -] - -{ #category : #building } -RTLayoutBuilder >> doActionsOnEdgesFor: elements [ - | allEdges asSet | - actionOnEdges ifEmpty: [ ^ self ]. - allEdges := OrderedCollection new. - elements do: [ :e | allEdges addAll: e connectedEdges ]. - asSet := allEdges asSet. - actionOnEdges - do: [ :act | - asSet - do: [ :e | - e isUsedInLayout - ifTrue: [ act rtValue: e ] ] ] -] - -{ #category : #building } -RTLayoutBuilder >> doDynamicForceBasedLayoutOn: elements [ - | v | - v := elements anyOne view. - v addAnimation: (RTForceLayoutStepping new view: v) -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> dominanceTree [ - actionOnEdges add: [ :edge | edge shape withVerticallAttachPoint ]. - layout := RTDominanceTreeLayout new. - ^ layout -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> dynamicForce [ - "This flag is used in setUpElements to add an animation to the view. This is a bit hackish, yes. We will see in the future" - dynamicForceBasedLayout := true -] - -{ #category : #'public - condition' } -RTLayoutBuilder >> else: elseLayout [ - self assert: [ layout class == RTConditionalLayout ]. - layout elseLayout: elseLayout -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> flow [ - layout := RTFlowLayout new. - ^ layout -] - -{ #category : #'public - partition' } -RTLayoutBuilder >> for: aBlockCondition use: aLayout [ - - partitions add: (Array with: aBlockCondition with: aLayout) -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> force [ - layout := RTOptimizedForceBasedLayout new. - ^ layout -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> forceWithCharge: aBlockOrANumber [ - "E.g -300" - layout := RTOptimizedForceBasedLayout new. - layout charge: aBlockOrANumber. - ^ layout -] - -{ #category : #configuring } -RTLayoutBuilder >> gapSize: aValue [ - layout gapSize: aValue -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> grid [ - layout := RTGridLayout new. - ^ layout -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> gridWithPerRow: aNumber [ - layout := RTGridLayout new. - layout lineItemsCount: aNumber. - ^ layout -] - -{ #category : #'public - partition' } -RTLayoutBuilder >> hasPartition [ - ^ partitions notEmpty -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> horizontalDominanceTree [ - actionOnEdges add: [ :edge | edge shape withHorizontalAttachPoint ]. - layout := RTHorizontalDominanceTreeLayout new. - ^ layout -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> horizontalFlow [ - layout := RTHorizontalFlowLayout new. - ^ layout -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> horizontalLine [ - layout := RTHorizontalLineLayout new. - ^ layout -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> horizontalReversedTree [ - actionOnEdges add: [ :edge | edge shape withShorterHorizontalAttachPoint ]. - layout := RTHorizontalTreeLayout new. - layout horizontallyReverse. - ^ layout -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> horizontalTree [ - "The layout to use is the horizontal tree" - layout := RTHorizontalTreeLayout new. - ^ layout -] - -{ #category : #'public - condition' } -RTLayoutBuilder >> if: blockCondition then: thenLayout [ - ^ self ifElement: [ :anElement | blockCondition rtValue: anElement model ] then: thenLayout -] - -{ #category : #'public - condition' } -RTLayoutBuilder >> ifConnectedThen: thenLayout [ -" -b := RTMondrian new. -b nodes: (1 to: 100). -b layout - force; - ifConnectedThen: RTGridLayout new. -b edges connectTo: [ :v | v \\ 4 ]. -b -" - ^ self ifElement: #isConnected then: thenLayout -] - -{ #category : #'public - condition' } -RTLayoutBuilder >> ifElement: blockCondition then: thenLayout [ - -" -Here is an example: -b := RTMondrian new. -b nodes: (1 to: 100). -b layout - force; - ifElement: #isNotConnected then: RTGridLayout new. -b edges connectTo: [ :v | v \\ 4 ]. -b. -" - - | oldLayout | - oldLayout := layout. - layout := RTConditionalLayout new. - layout condition: blockCondition. - layout thenLayout: thenLayout. - layout elseLayout: oldLayout. - ^ layout -] - -{ #category : #'public - condition' } -RTLayoutBuilder >> ifNotConnectedThen: thenLayout [ - "Apply a layout on the set of elements that are not connected. - - - b := RTMondrian new. - b nodes: Collection allSubclasses. - b edges connectFrom: #superclass. - b layout tree; ifNotConnectedThen: RTGridLayout new. - b - " - - ^ self ifElement: #isNotConnected then: thenLayout -] - -{ #category : #initialization } -RTLayoutBuilder >> initialize [ - super initialize. - layout := RTFlowLayout new. - actionOnEdges := OrderedCollection new. - partitions := OrderedCollection new. - dynamicForceBasedLayout := false -] - -{ #category : #accessing } -RTLayoutBuilder >> layout [ - ^ layout -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> month [ - "Used by RTCalendarBuilder" - layout := RTMonthLayout new. - ^ layout -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> none [ - layout := RTNoLayout new. - ^ layout -] - -{ #category : #'public - condition' } -RTLayoutBuilder >> overall: overallLayout [ - self assert: [ layout class == RTConditionalLayout ]. - layout overallLayout: overallLayout -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> packed [ - "Rectangle packed layout" - layout := RTRectanglePackLayout new. - ^ layout -] - -{ #category : #'public - partition' } -RTLayoutBuilder >> processPartitions: elements [ - - | groupOfElements els | - groupOfElements := OrderedCollection new. - partitions do: [ :tupple | - "tupple = { conditionblock . layout }" - els := elements select: [ :el | tupple first rtValue: el model ]. - tupple second on: els. - groupOfElements add: els asGroup. - ]. - - layout on: groupOfElements -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> radial [ - - layout := RTRadialTreeLayout new. - ^ layout -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> radialTree [ - layout := RTRadialTreeLayout new. - ^ layout -] - -{ #category : #building } -RTLayoutBuilder >> setUpElements: elements [ - "Perform the layout on the provided elements" - self doActionsOnEdgesFor: elements. - - dynamicForceBasedLayout ifTrue: [ ^ self doDynamicForceBasedLayoutOn: elements ]. - - elements do: #updateEdgesOFF. - self hasPartition - ifTrue: [ self processPartitions: elements ] - ifFalse: [ layout on: elements ]. - elements do: #updateEdgesON. - elements do: #updateConnectedEdges. - -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> sugiyama [ - actionOnEdges add: [ :edge | edge shape withVerticallAttachPoint ]. - layout := RTSugiyamaLayout new. - ^ layout -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> sunburstWithArcWidth: aNumber [ - layout := RTSunburstConstantWidthLayout new. - layout arcWidth: aNumber. - ^ layout -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> sunburstWithRadius [ - ^ self sunburstWithRadius: 200. - -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> sunburstWithRadius: radius [ - layout := RTSunburstExtentLayout new. - layout extent: radius asPoint * 2. - ^ layout -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> tree [ - "The layout to use is the vertical tree" - layout := RTTreeLayout new. - ^ layout -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> verticalLine [ - layout := RTVerticalLineLayout new. - ^ layout -] - -{ #category : #'public - layout' } -RTLayoutBuilder >> weightedCircle [ - layout := RTWeightedCircleLayout new. - ^ layout -] diff --git a/src/Roassal2/RTLayoutBuilderTest.class.st b/src/Roassal2/RTLayoutBuilderTest.class.st deleted file mode 100644 index cddad4f39..000000000 --- a/src/Roassal2/RTLayoutBuilderTest.class.st +++ /dev/null @@ -1,215 +0,0 @@ -Class { - #name : #RTLayoutBuilderTest, - #superclass : #RTTest, - #instVars : [ - 'builder' - ], - #category : #'Roassal2-Builder-Common' -} - -{ #category : #running } -RTLayoutBuilderTest >> setUp [ - super setUp. - builder := RTLayoutBuilder new -] - -{ #category : #tests } -RTLayoutBuilderTest >> testAddingPartition [ - builder for: #odd use: RTGridLayout new. - self assert: builder hasPartition -] - -{ #category : #tests } -RTLayoutBuilderTest >> testConditional [ - | v es eb lb | - v := RTView new. - es := RTBox elementsOn: (1 to: 20). - v addAll: es. - - eb := RTEdgeBuilder new - view: v; - elements: (es copyFrom: 1 to: 10); - connectTo: [ :aValue | aValue + 1 ]. - - lb := RTLayoutBuilder new - ifElement: #isConnected then: RTGridLayout new; - else: RTTreeLayout new; - overall: RTHorizontalLineLayout new. - lb setUpElements: es. - - self assert: (es collect: #position) asArray equals: (((Array new: 20) at: 1 put: ((3.0@3.0)); at: 2 put: ((13.0@3.0)); at: 3 put: ((23.0@3.0)); at: 4 put: ((33.0@3.0)); at: 5 put: ((3.0@13.0)); at: 6 put: ((13.0@13.0)); at: 7 put: ((23.0@13.0)); at: 8 put: ((33.0@13.0)); at: 9 put: ((3.0@23.0)); at: 10 put: ((13.0@23.0)); at: 11 put: ((48.0@3.0)); at: 12 put: ((56.0@3.0)); at: 13 put: ((64.0@3.0)); at: 14 put: ((72.0@3.0)); at: 15 put: ((80.0@3.0)); at: 16 put: ((88.0@3.0)); at: 17 put: ((96.0@3.0)); at: 18 put: ((104.0@3.0)); at: 19 put: ((112.0@3.0)); at: 20 put: ((120.0@3.0)); yourself)) -] - -{ #category : #tests } -RTLayoutBuilderTest >> testDefault [ - self deny: builder hasPartition -] - -{ #category : #tests } -RTLayoutBuilderTest >> testFlowOnEmpty [ - - "Juraj had a problem on some point. This tests describes the problematic situation" - RTMondrian new layout flow -] - -{ #category : #tests } -RTLayoutBuilderTest >> testFlowOnEmpty02 [ - - "Juraj had a problem on some point. This tests describes the problematic situation" - | b | - b := RTMondrian new. - b layout flow. - b build. -] - -{ #category : #'tests - attach point' } -RTLayoutBuilderTest >> testHorizontalTreeAndAttachPoint [ - - | b edges allEdges lastTwoEdges firstEdges | - b := RTMondrian new. - b shape label. - b nodes: (1 to: 10). - edges := b edges connectFrom: [ :x | x//2 ]. - - b shape arrowedLine color: Color red; centeredAttachPoint. - b edges source: (Array with: 3->2 with: 9->7) connectFrom: #key to: #value. - - "We test the attachpoints" - allEdges := b view edges. - firstEdges := allEdges copyFrom: 1 to: (allEdges size - 2). - lastTwoEdges := allEdges copyFrom: (allEdges size - 1) to: allEdges size. - self assert: (firstEdges allSatisfy: [ :e | e shape attachPoint class == RTCenteredAttachPoint ] ). - self assert: (lastTwoEdges allSatisfy: [ :e | e shape attachPoint class == RTCenteredAttachPoint ]). - - "We set a tree layout" - b layout tree userDefinedEdges: edges. - b build. - - "We test the attachpoints" - allEdges := b view edges. - lastTwoEdges := allEdges copyFrom: (allEdges size - 1) to: allEdges size. - self assert: (firstEdges allSatisfy: [ :e | e shape attachPoint class == RTVerticalAttachPoint ] ). - self assert: (lastTwoEdges allSatisfy: [ :e | e shape attachPoint class == RTCenteredAttachPoint ]) - -] - -{ #category : #'tests - attach point' } -RTLayoutBuilderTest >> testHorizontalTreeAndNoAttachPoint [ - - | b edges allEdges lastTwoEdges firstEdges | - b := RTMondrian new. - b shape label. - b nodes: (1 to: 10). - edges := b edges connectFrom: [ :x | x//2 ]. - - b shape arrowedLine color: Color red; centeredAttachPoint. - b edges source: (Array with: 3->2 with: 9->7) connectFrom: #key to: #value. - - "We test the attachpoints" - allEdges := b view edges. - firstEdges := allEdges copyFrom: 1 to: (allEdges size - 3). - lastTwoEdges := allEdges copyFrom: (allEdges size - 2) to: allEdges size. - self assert: (firstEdges allSatisfy: [ :e | e shape attachPoint class == RTCenteredAttachPoint ] ). - self assert: (lastTwoEdges allSatisfy: [ :e | e shape attachPoint class == RTCenteredAttachPoint ]). - - - "We set a tree layout" - b layout horizontalTree doNotAttachPoint; userDefinedEdges: edges. - b build. - - "We test the attachpoints" - allEdges := b view edges. - lastTwoEdges := allEdges copyFrom: (allEdges size - 2) to: allEdges size. - self assert: (firstEdges allSatisfy: [ :e | e shape attachPoint class == RTCenteredAttachPoint ] ). - self assert: (lastTwoEdges allSatisfy: [ :e | e shape attachPoint class == RTCenteredAttachPoint ]) - -] - -{ #category : #'tests - attach point' } -RTLayoutBuilderTest >> testSugiyamaAndVerticalAttach [ - - | e1 e2 edge | - builder sugiyama. - e1 := RTBox element. - e2 := RTBox element. - edge := RTLine edgeFrom: e1 to: e2. - builder setUpElements: (Array with: e1 with: e2). - - self assert: edge shape attachPoint class equals: RTVerticalAttachPoint -] - -{ #category : #'tests - attach point' } -RTLayoutBuilderTest >> testTreeAndVerticalAttach [ - - | e1 e2 edge | - builder tree. - e1 := RTBox element. - e2 := RTBox element. - edge := RTLine edgeFrom: e1 to: e2. - builder setUpElements: (Array with: e1 with: e2). - - self assert: edge shape attachPoint class equals: RTVerticalAttachPoint -] - -{ #category : #'tests - attach point' } -RTLayoutBuilderTest >> testVerticalTreeAndAttachPoint [ - - | b edges allEdges lastTwoEdges firstEdges | - b := RTMondrian new. - b shape label. - b nodes: (1 to: 10). - edges := b edges connectFrom: [ :x | x//2 ]. - - b shape arrowedLine color: Color red; centeredAttachPoint. - b edges source: (Array with: 3->2 with: 9->7) connectFrom: #key to: #value. - - "We test the attachpoints" - allEdges := b view edges. - firstEdges := allEdges copyFrom: 1 to: (allEdges size - 2). - lastTwoEdges := allEdges copyFrom: (allEdges size - 1) to: allEdges size. - self assert: (firstEdges allSatisfy: [ :e | e shape attachPoint class == RTCenteredAttachPoint ] ). - self assert: (lastTwoEdges allSatisfy: [ :e | e shape attachPoint class == RTCenteredAttachPoint ]). - - "We set a tree layout" - b layout tree userDefinedEdges: edges. - b build. - - "We test the attachpoints" - allEdges := b view edges. - lastTwoEdges := allEdges copyFrom: (allEdges size - 1) to: allEdges size. - self assert: (firstEdges allSatisfy: [ :e | e shape attachPoint class == RTVerticalAttachPoint ] ). - self assert: (lastTwoEdges allSatisfy: [ :e | e shape attachPoint class == RTCenteredAttachPoint ]) - -] - -{ #category : #'tests - attach point' } -RTLayoutBuilderTest >> testVerticalTreeAndNoAttachPoint [ - - | b edges allEdges lastTwoEdges firstEdges | - b := RTMondrian new. - b shape label. - b nodes: (1 to: 10). - edges := b edges connectFrom: [ :x | x//2 ]. - - b shape arrowedLine color: Color red; centeredAttachPoint. - b edges source: (Array with: 3->2 with: 9->7) connectFrom: #key to: #value. - - "We test the attachpoints" - allEdges := b view edges. - firstEdges := allEdges copyFrom: 1 to: (allEdges size - 3). - lastTwoEdges := allEdges copyFrom: (allEdges size - 2) to: allEdges size. - self assert: (firstEdges allSatisfy: [ :e | e shape attachPoint class == RTCenteredAttachPoint ] ). - self assert: (lastTwoEdges allSatisfy: [ :e | e shape attachPoint class == RTCenteredAttachPoint ]). - - - "We set a tree layout" - b layout tree doNotAttachPoint; userDefinedEdges: edges. - b build. - - "We test the attachpoints" - allEdges := b view edges. - lastTwoEdges := allEdges copyFrom: (allEdges size - 2) to: allEdges size. - self assert: (firstEdges allSatisfy: [ :e | e shape attachPoint class == RTCenteredAttachPoint ] ). - self assert: (lastTwoEdges allSatisfy: [ :e | e shape attachPoint class == RTCenteredAttachPoint ]) - -] diff --git a/src/Roassal2/RTLayoutExample.class.st b/src/Roassal2/RTLayoutExample.class.st deleted file mode 100644 index 1d3f05167..000000000 --- a/src/Roassal2/RTLayoutExample.class.st +++ /dev/null @@ -1,844 +0,0 @@ -" -Example about layouts - -RTLayoutExample new installTitle: 'ConditionaLayoutInMondrian' - code: - ' -b := RTMondrian new. -b shape rectangle - fillColor: Color white; - borderColor: Color lightGray; - withTextAbove: #name. -b nodes: Collection withAllSubclasses forEach: [ :cls | - b nodes: cls methods. - b edges connectToAll: #dependentMethods. - b layout - ifElement: #isConnected then: RTTreeLayout new; - else: RTGridLayout new. - ]. - -b edges connectFrom: #superclass. -b layout tree. -b build. -^ b view' - -" -Class { - #name : #RTLayoutExample, - #superclass : #RTAbstractExample, - #category : #'Roassal2-ExampleBrowser' -} - -{ #category : #sources } -RTLayoutExample >> exampleCircle [ - -| v es | -v := RTView new. - -es := (RTEllipse new size: 12) elementsOn: (1 to: 20). -v addAll: es. - -RTEdgeBuilder new - view: v; - elements: es; - connectFrom: [ :value | value // 2 ]. - -RTCircleLayout new on: es. -^ v -] - -{ #category : #sources } -RTLayoutExample >> exampleCircle02 [ - -| v es | -v := RTView new. - -es := (RTEllipse new size: #yourself) elementsOn: (1 to: 130 by: 10). -v addAll: es. - -RTEdgeBuilder new - view: v; - elements: es; - connectFrom: [ :value | value // 2 ]. - -RTCircleLayout new on: es. -^ v -] - -{ #category : #icons } -RTLayoutExample >> exampleCircle02Icon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAEbElEQVR4XuWcV27DMBBEdf9D -uvfeu6lkDCsQFFkmKVbNAATykeLwicvdWVJJmvIrJCX8U8APhF/8QPiB8IsfCD8QfvED4QfC -L34g/ED4xQ+EX/xA+IHwix8IPxB+8QPhB8IvfiAaej6fYrvdivV6nWIcDgfBD8SDfidftFot -0W6307LR7XZFTHCCAoInfD6fY3JfEzwYDMRqtRK32+3fhF4ul7/vkxnD4VBA/EAktNlsvk5s -v9//A3M+n1NZEIUhENr4gVRoNBoJlUnFKtKE8RqdTocfiCkYpgbCIv4+QhhWJ5IAhMYsISgL -kY0HIhOmbA5s9t++B5BogPiEoTKQwf3uWaLRQHa7nYgFSDZcpc5egMxms+iAYJxOJxEtENQJ -ZRM/nU6V6gdDYcfY77Jdy1gBMh6Po1wBKhlaNEBQwDUVRjaiASJbV5gMIT4GkpLggby9pZRh -2KxPjAGZTCaNBpJf1QjL9/tdBA2EZXUUR6/Xe/VhaIHA8lgsFiGuRmGiTokKCJKGfO8kxBWD -OqsRQKqeeoSF4/H47x9FHEfjKTQoqMO8A6ljpaMzmP0eNJD2+/0rLsuaeqie0coFVHwOTAgy -IaSnvpIN3X3FGBA8wbofvuzpN6Xr9eptBT0eD+EUCELGO9QYWR225MvKwep0BuRtEtbOTFwd -PEDrNgabJfHVesXKcHkKBHuTDyjojFoFUre5hCrX5zkp1318VXc4cZHe+jw0UCYUcK5cadVT -LkpAMLGhmXF19T6YF8w+ogQEub7OB0LxFioQhM+YgWjvG6ECQa1gE4bqw5i4eJpQq6QByyYQ -PMTBbeqwQkIGYnODh1NgFYhGQRj8iXM8MLYseSeFoYpV4vLUX82wZRyKTmRIdD0smX/Apmlo -ozYxCUPXo6tlLi6XS/GpH6DjdPqWqU4kzgPr2kJJHbu96A3hIAAgpRHLgGkq6jgTWkC+NX3Q -4YsZiu4mb8IwtWYuhlydy7rDsofCESlMpfZW6xAcnksbILRjsb/kLvm8WsU2blspAUEKqwIk -9v3Eh6x6WS7as+xARFNc3kzYhPHghGLvJBoFoTVjzYey0zKhXJdW3tRV+tKhX9LPZ46hFLLK -QGQ3dts3jfj3EAXfp+75Vn4gmpth0ftBBd+U2iM6IFVFVP51Sfha9WwSPxBDqjrzlL9KwC8H -QGTua/CvFIdAZBpWCF/8U+4OiPc73p+K2ZjewdhoIChMYwuZTkOW6xMoRTM0hsZZYtJ+0Lnm -hX4C/CQbVxOK3lsM7QBvae/bghGmLktWuQqwceBUUxaG75WSn2hRfDdI1Xnab/UKNme0VvG0 -q54KpAQio29XAD65xGU/5+KlYo0H8i0B+HSlOMbXvkYBBNmO6qv0qsIcPxDLNotKrRPy3ZNo -gECfXolRtSeU3U8J7f5itEAgVM7ZWSf0UmSypswKiSWNjQoIv/iB8APhFz8QfiD84gfCD4Rf -/ED4gfCLHwi/+IHwA+EXPxB+IPziB8IPhF/8QPiB8MuzfgBBCe/nMYeS2gAAAABJRU5ErkJg -gg==' -] - -{ #category : #icons } -RTLayoutExample >> exampleCircleIcon [ - ^ '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 -gg==' -] - -{ #category : #sources } -RTLayoutExample >> exampleCluster [ - -| v es | -v := RTView new. - -es := (RTEllipse new size: 12) elementsOn: (1 to: 100). -v addAll: es. - -RTEdgeBuilder new - view: v; - elements: es; - connectFrom: [ :value | value // 3 ]. - -RTClusterLayout new on: es. -^ v -] - -{ #category : #icons } -RTLayoutExample >> exampleClusterIcon [ - ^ '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 -TkSuQmCC' -] - -{ #category : #sources } -RTLayoutExample >> exampleConditionaLayoutInMondrian [ -| b | -b := RTMondrian new. -b shape rectangle - fillColor: Color white; - borderColor: Color lightGray; - withTextAbove: #name. -b nodes: Collection withAllSubclasses forEach: [ :cls | - b nodes: cls rtmethods. - b edges connectToAll: #dependentMethods. - b layout - ifElement: #isConnected then: RTTreeLayout new; - else: RTGridLayout new. - ]. - -b edges connectFrom: #superclass. -b layout tree. -b build. -^ b view -] - -{ #category : #icons } -RTLayoutExample >> exampleConditionaLayoutInMondrianIcon [ - ^ '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 -YII=' -] - -{ #category : #sources } -RTLayoutExample >> exampleEquidistantCircle [ - -| v es | -v := RTView new. - -es := (RTEllipse new size: #yourself) elementsOn: (1 to: 130 by: 10). -v addAll: es. - -RTEdgeBuilder new - view: v; - elements: es; - connectFrom: [ :value | value // 2 ]. - -RTEquidistantCircleLayout new on: es. -^ v -] - -{ #category : #icons } -RTLayoutExample >> exampleEquidistantCircleIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAFXUlEQVR4XuWd6XLkIAyE/f4P -mfu+7zvMplOjLS/rsTkEiGlV8SOVzSTmM0JqCXZYrfjNkg38U8APhN/4gfAD4Td+IPxA+I0f -CD8QfuMHwg+E3/iB8Bs/EH4g7ez19dXd3t6uxuPh4cHxA6lo7scuLy/d7u7uam4cHx+79/d3 -xw+koD0+Pi6C8MfZ2ZnjB1LAzs/Po2HIODo6cvxAFO3m5iYZxtiF8QMZuRpM6unpqTs5Ofnd -A/D119fX4iS9vb1lw5Dxs+k7aiBXV1eLk3lwcOAQLW36DHxfCwgGJRBENz8PHzWRFxcX/0H5 -+PhQhYGBlUkFZA0jabLgzrT3Dn/s7e1xAYldGf64u7v7O2GYPG0gVtxWFSBwOxoThuRvDXfF -DyRvdagMBAMlgYREd90DQUip/Rbzr5BGmfQmt8W/hzTczP3x8vLiakVZSFzXOdM/vw+JLFa+ -7Gm9AVEdmKTPz091IONs/fr62sWE5Ph7ugGi7V4gmeBzDw8P1femtRyT9Ln39/euCyAhMkmK -n89JNKdyHLjC3M+BKzMPJKVWMTP+eWBMZO5nwuVowpXQnCIPGWfrGkmnSO/agcecKGoCCPyr -9uoY2/Pzc/TnIxy3qItV07LwNpZ860Jr6uKiSkWBMp6enpwZIJDHEbH4cXpqZBT7cJhwv+tk -6jOU9zeVSuSgXE51m6IPeSvxhsYmgr1EgBqZfzYQuJKdnR0X0+mBn1laLUjOelMRmgNJid39 -YhM2ZHEriKJqKq4lYWDAdVcDklNGtdITVRqIqApVgORKFxa6B0sD+f7+rgNEI7P1XVcLiw0w -zO4hMWqo5fqDdvFMIzkcWiq4rUumyJNKAUltvhta+t6SOUaoIUeyVH1sCiRHhNMyrFIrqyMZ -SK4u5bf1tDYl8VOlo35ouRlaMuRGGop07ks2tNoMa0gjNbUtrAyNFZ+cGOZ2I1o17GuxUaTm -cYYsLWt/f9/1Gl0tGeT6ub0S0EqcKxly4/hYKKmFm9YmNZ4UOaR6PSTEfQFcithm1UpFiIPm -HwgJ3TvZ9FtW7cFFWTH+mxwSDJcQQO3uopUUBSeEjxKpYMWgvKvZbtna5NnwrGaBYH9YChch -d1vJznPlllJXdagAiSzlOgsHY7Z2D0kpVlk5YJmyMsQLlCqwZQNJPS9uUTqJDe+1Ot7VgOSW -cnsz/zSYOSC5fbEpbTKts3XpQSt1cU0WkNwmAUt3jGzFpp7bCoTMvgfDi4NnRc2ktPyTBSSk -23xu9HDt3pQXKFl6HnLfnG0o4c6FuZtuKjKbh6TCgAuwvjrmDgKZBZLqtnqR4kOvjDIlnSAE -rHkwsqahoObXdUq62qHk5jeXocM/A8z4bAketmUojBNVojyMIypUCfF34fvmtSz/gTYdgsEq -ko73pYQSkGo30W16oUpI7NWAiGFJ40EQ1vp7RUy3Si0ovltqKfFUrRhigmP2GqyUFhpVyPn4 -rQCSktnXmIyloKSmojC0DiFDrovVWJl+mQDheqhIWvO019A6642V6VGdnKrBbLrmFfvYXKFM -zMp15NWA5NxxJbbUe+uvppDfKZW/qauZWlxDbt5lSbk39D6T8SSGNk+PEz3UPBC+l+5QNAEk -5SicuKLQywnGvcOhFwNYam8damfCKYpw7Jl42bD5gShKLHK/In4mVuYXN5fisuiAhEIZNxDE -HjmTzT1mU6cGIu5r6iiDf5+ViHupLUYhYS8/kAnta+nfxJxD8btZlhJDfiAFdTCr/9nX1gGR -LL30Na38QCIN+4lfNoa8UbtuwQ+ExPiB8APhN34g/ED4jR8IPxB+4wfCD4Tf+IHwA+E3fiD8 -xg+kF/sDDCKXPG3LMWwAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTLayoutExample >> exampleFlow [ - -| v es | -v := RTView new. - -es := (RTEllipse new size: #yourself) elementsOn: (1 to: 100). -v addAll: es. - -RTFlowLayout on: es. -^ v -] - -{ #category : #icons } -RTLayoutExample >> exampleFlowIcon [ - ^ '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' -] - -{ #category : #sources } -RTLayoutExample >> exampleForce [ - -| v es | -v := RTView new. - -es := (RTEllipse new size: 12) elementsOn: (1 to: 50). -v addAll: es. - -RTEdgeBuilder new - view: v; - elements: es; - connectFrom: [ :value | value // 2 ]. - -RTOptimizedForceBasedLayout new on: es. -^ v -] - -{ #category : #icons } -RTLayoutExample >> exampleForceIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAEzklEQVR4XuWbh04rMRRE8/8f -SSf03pt5nNVOZIy9DT3WyYwUJSSLgXt8q5fF56e/atLC3wT+QPzlD8QfiL/8gfgD8Zc/EH8g -/vIH4g/EX/5A/OUPxB+Iv/yB+APxlz8QfyD+8gfiD8Rf/kD85Q/EH4i//IH4A/GXPxB/IP7y -B+IPxF/+QPy1wUDOz8/D9vb25+PjY/AH8sc6PDxsjP/w8LAy/t7eXvPe1dWVv4f8tWT8u7u7 -FRDgfMEI/iFrJn18fITn5+dvQPxzyB/o5eUlvL29FY19cnLSeMvT05M/kP+t9/f3xtg8StrZ -2dmI3LEWQMKXWiChC9rl5WWYur4/kIkaG5Jub2/Dzc1NkOHjfIOur68b2MvlMvgDGRiuCEPx -Lqa6Sg1YSuYKdSR/PIzXQNLnwOK9o6MjfyBjeo3T09OAUe/v71f55PX1NbDDldDPzs5+GBVw -rBGvlXqZYCpX6Xp/IBlhrNaI38JM7BEXFxdFIAhwPJe6d/Ux+lldxYN/DhkJr5RHpNxngMJr -KKtZo6u8tgOCYaaWrvKEXNgif6RA6G1q8YhqgchAU0tYxibp6ERrph7UltOhhpxRLRBAYCQS -7G+Axomb1+SdMSU0BQSeWvK6jQfCro7/+CmGwAMoXymL+/oVvIOQVfpcY/yDgwM/IMBIYznG -pcQd4BGhFI7UBKa5g+/Z2tr69h6l8+7ubgOSJM+D6+Y6V5kViJIrRsEz4vIz7axLIaoU4mj8 -2O0yLBVUnFOosuINoa7eP4ckIlSow/5N6Glz0goAAkoaEgHGtYjr6E0YWM41Pa6yD8E4Q5J7 -PArJdPnNY2zV1pbKxWbTtjEkj/R5CUAIS3H11OaA1Yhl7MEV30OVNbXa21ggCl25sjXNIzEU -hSFCj0LQOk0dFnP2HbGxSOJq7PAOhY7U2HE1pgFjn6ex4/u8zRpIPLnlNaFHX+duVFAoYpgI -xDEJ9/j4uFmb57TkTsMZldZcoWp2D6GRi3c/X5OESwM+VU00f2N+Dl5E76HQB0xNibUB+Iwx -f9/ppFUO6WvECGltJz4KRpxr4oZzf38/4DXaAKxfw4HVooYSd2iMH9LBUyWlO10FQq5v4T28 -ZsjaFkAUKnjuuzbXTQOA0McOJ/7TP+RG6xi81P2zIeacX1UFROOSvn6h1FMIaGxMQlWanFXR -8YxXxB6p32HIprDtQ0o9RzowJNwAI85BuXykrp7raz2cWhsg7U0IYUgFhHfkoKns1ZCReZU/ -kBHCcMR2drsGgn2JV7kgLY1Lp5F9E2V/IJnRSdqpdxlRc6x0MMga9CJpj9NWeKGm21CrAdIm -1qYTx7B4A0ZM8wGJtzROKUkJPdd05noUfyBf4tQuDSu5weCUhCyouWSPN9V0s0M1QChF01tH -c3MtvIPRx5B7qFiLjlwDSA0sa8wd1ecQGa90KkjlRPXV1eHjYbFH6Ry+a6TvD6Tcd/y4QboU -5rrOPPA6NZTAq/18pFogGC+N+fp/EZW1qsQ25d/Z1qpTj5u6WrtsOyDKHXPdVegPxFD+QPyB -+MsfiD8Qf/kD8QfiL38g/kD85Q/EH4i//IH4yx+IPxB/+QPxB+IvfyD+QPzlD8QfiL/8gfjL -H4g/EH/5A/EH4i9/IP5A/OUPxB+Iv+rQP4A1SZDsnBpJAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTLayoutExample >> exampleGrid01 [ - -| v es | -v := RTView new. - -es := (RTEllipse new size: 12) elementsOn: (1 to: 100). -v addAll: es. - -RTGridLayout on: es. -^ v -] - -{ #category : #icons } -RTLayoutExample >> exampleGrid01Icon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAACSUlEQVR4XuXZiWrbQBRG4bz/ -Q3rBeMV4xbstp//QCSEpoRuq6++A0Gy5QTr2nSv55X73eSRe/FvgC/HxhfhCfHwhvhAfX4gv -xMcX4gvx8YX4+EJ8IT6+EF+Ijy/EF+LjC/GF+PhCfHwhvhAfX4gvxMcX4gvx8YX4Qnx8IT6+ -EF+Ijy/EF+LjC/GF+PhCfCFtcLvdmm6324zH4yb9nNPP+H6/T/u+2WzK3GAwaHKknbHMZU3b -MZ5ayHq9LhebI9R2xpfLZWn3+/3m/VzIWNpZ03aMp09Z3y64ORwO5WJzTv/d3P16vZb+drtt -cqR9uVzKjfrZGFn/t2L4QnwhfspiU5a/qftlr1/2fsXpdCqfvvqpzTn9jCfXpz2dTj+lm4yl -nTVtx3hqIbvdrubucrGdTuctjSwWi9IejUafbuZwOCxzWVNj5G9/JUbGaoyalj7GSOwaI/+T -SFnn87kJaeecfp07Ho9v7VRbteL6ONdmjKcXMpvNmrph5px+LUsnk0lK0bJuPp83Ob6XpffM -1VK0zRhPLWS1Wv2w3Mx4LTd7vd6ndJOxWrK2HcP/hvjfEH8PYfeQ362Q/CrLfw4xnkN8/HdZ -/rss/23vf5ay/N9DfCG+ED9l+Zu6v6n7+A+Gf/Rg6Av54tXJv/iByhfygC8XfSE+vhBfiI8v -xBfi4wvxhfj4Qnx8Ib4QH1+IL8THF+IL8fGF+EJ8fCE+vhBfiI8vxBfi4wvxhfj4QnwhPr4Q -H1+IL8THF+IL8fGF+EJ8fCG+EB9fiI8v5BF5BaOO+xyllGGcAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTLayoutExample >> exampleGrid02 [ - -| v es | -v := RTView new. - -es := (RTEllipse new size: #yourself) elementsOn: (1 to: 100). -v addAll: es. - -RTGridLayout on: es. -^ v -] - -{ #category : #icons } -RTLayoutExample >> exampleGrid02Icon [ - ^ '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' -] - -{ #category : #sources } -RTLayoutExample >> exampleHorizontalTree [ - -| v es | -v := RTView new. - -es := (RTEllipse new size: 12) elementsOn: (1 to: 100). -v addAll: es. - -RTEdgeBuilder new - view: v; - elements: es; - connectFrom: [ :value | value // 3 ]. - -RTHorizontalTreeLayout new on: es. -^ v -] - -{ #category : #icons } -RTLayoutExample >> exampleHorizontalTreeIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAD6UlEQVR4XuWdbU8yMRBF+f9/ -Eg0RIxJEVFCQ5fFu0qTPZl9att3O5txkI1HYDx3mzpx2hMXtZlff39/V2Hu8v79X0uVyqY7H -Y/3Y3TvF/VNrYTget8PhUKV4jq/r9VoH5uHhob74AYnQ7+/v4IKdz+e7FnW5XNYXPyCBksWk -yqIuO+RbVoQ+Pz+zLhbfsiL19fVVpXju29vbf9n28fFRyeb4lhWpn5+fauxzFQwtujJBgeBb -1p1SJzS2G5Pl/QWkzgT9XVmioKjDUiD4lhVRzJ+fn6MWSousxXf2FZJdfMsK1OPjY/2ult3E -trD7/b7id1kZYFCLezqdghdLGfX3mtqSZFXKEBG6Hute2+22us1Ei7kSepcUSAeUrqivVit+ -QMa2vM2uKJbwXYa5vSx+QEZICzgmIE673Y5vWSmDMvYefMtKKLWyKbKEb1mJ5LqksUHlW1ZC -QBz7zn55ean4lpWw09LPe2xLr+V3WZlYJMS21ut1nQkKhH9gxbeshHIbjCEbjW7rRBalzHDX -6+sr37JyaMi2lEUuk5Ql/vkI37ISyu3a9h1AdQVLduX2xfiWlUhu97bLtoY2IPlgmClDujIh -ZEeYb1kJ5Z9XyIJi6gq/y8poWZI/oxV6VrLZbPhdVko1h+CUFQrM0ACdMoMPhhNspejd/vT0 -VPHBsKBcNig7HAD68KfL/V4WxQfDzJLltAFgM3t8MPQbAL5lJVazu5JCztz5YJixdtwDhXww -nKD1jQ2Iez3fshKqb+GH4JDfZRkLGB8MM6nPctpA0QdDvmVl0NCpoWCRD4YTaqhW8MGwEK33 -tcYuaE0w5FtWgQzhg6GxGsIHQ0NdFh8MZyR+l1UIAPlgWEAx/z/IB8MJ1PdRG/wTw0L1gA+G -huSfHLa1xXwwNELr/FHSGXVefDDMrOacVkgrzLesiVpf/iipAblZX/4oqRFpGj52lJRvWRnB -kD9Kakj8UVKjQekaJeWDYUHxR0lnCIV8MDQYEL5lFagpfDCcUabwwbCA+KOkBsUfJTUmPhga -3Fbhg6Fx8cHQoPhgaFB8yzJmW3zLMiQ+GBrKDD4YFhT/xJAPhvyA9ElQyAdDQ8Hgg6ER8UdJ -ZxYQvmUZsCo+GBrNDD4YTqSQUVK/0+JbViaFjpL6n4bNt6zMNYM/SmpMsp+2Yu6fGGrU1P82 -Bb5lZZQbIQ0ZJVVQ9I+ifMsy1GnxwTCjmlPv/FHSwmr7jnT+KKmB+hFjXXwwzKgu22kDRT4Y -Zpb/TTtt8kdJ+WA4gfo+eEbig2EBSh/aVuGD4YQa2kzkg6HxYPDBsKBd8cHQWEHng6GxlrdP -fDCcCAZDCvpcwfAfVog6NLjaUcUAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTLayoutExample >> exampleRadial [ - -| v es | -v := RTView new. - -es := (RTEllipse new size: 12) elementsOn: (1 to: 50). -v addAll: es. - -RTEdgeBuilder new - view: v; - elements: es; - connectFrom: [ :value | value // 2 ]. - -RTRadialTreeLayout new on: es. -^ v -] - -{ #category : #icons } -RTLayoutExample >> exampleRadialIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAEyUlEQVR4XuWbiVIqMRBF+f+P -dEVQQMF9JciZol/FqfQs4DMZ7q2ixNnQPun0kjDabPRVkkb6JtAHoi99IPpA9KUPRB+IvvSB -6APRlz4QfSD60geiL30g+kD0pQ9EH4i+9IHoA9GXPhB9IPrSB6IvfSD6QPSlD0QfiL70gegD -0Zc+EH0g+tIHoq8jBjIej8N8Pg+8f3x8DJ+fn0EfyB/o9PQ0YPz4GAC2xzn3470+kP+k29vb -MJ1Oq1HvGXu5XP7zDM5PJhN9D9lXz8/P4fLyMnx8fATHK6rXw8NDwOivr6/J6zjvTVVXV1cV -KD5LH0iLTk5OKmMxylN6enoKeMnb21ujMe/u7gLXps5dXFxUn3F/f190fCkCCCMeYzLCm65b -r9dhC626tn4OQzfFjvf398oD7To8Uh9IB2FwDLZarRqnLwxbh0XAJ9ak7jPvwtNKjjHFAVks -FpXBbm5ukgabzWaB6Qd53lY/dn5+XmVmXuzRB7IVNcP19bUbnBnx+zy3HkOYpoaUBo8y1hPV -yxu13vE2UNv7qiIRMGRUiPcvLy9BH0iDiAHM514aChDiScp7mp5r2RTP1q9DerQ5zs7OQpyu -YsR4FDPvc4yYARyyJAvITRkSdQpxSL91ssd0RSaFFwDIArkFazN+DAlvsgyp7lnc11an6ANx -hJHj4LurLzZe5uQJAJaV8XNzBBp8t9eAWKdXH0gBqheJ+kAyq+9Upw8kknVdfzMLIsgP4ZlF -AokzLNJZAjw9qEPaGvHi1CEA6Bwgap3feOYggHx9ff1IWakpDi3kGMWpIrKrdo3JH+0VnvnX -MLIAIRsyDwEMBR8pL0bhd3pPeEtbRZ5KpfsAtG5y9DcEWysxr42L16MFYkWgtxgVT0EYqmvq -i6d1De4Ye7sotkmtq1iSkKshmSXLapsKCPyMTkYvxZ8FVkZ17AkYjlGNcXmxFhIvA3PevM8+ -lxexAmM3Vfacy1H5j0pMYVOZjfW7bHEqNjzgYo8zULRiuJ6+WMp7SuwAFwfE8x4Mitf0Wenb -xYKNt87ubaqQBMI0EnuCrXW37Qrpmx63PS+1zytnpzj7ApVlNlYwtqW/3mjfNwW3v4P3eKet -p/TN8o4BSPWP29zuLUgdMs10ydIAzMsCeO79W1ljCAZjAapPc5BA3aVgw+vIurqmwgDBO3MU -g8UAsSyoa6BOVdSe+nYAbPEr92aIrECYppgivEC9S2dDPLUQgLmnq4Ft6ykes5sW3XuoT3Iv -dBXdfrcRW5/Pu2RaqRrDnndI30sWCEYnBqQ2NJARdYkJqRYLyUSuDGpwQAjwttPEM6oViTQp -vfNMS57R7R6A81ls9NYH0jCHYyTaJBjOMyoG57pUN9b2BjcFZ2JRnwRBesqy4NtkLM5b8zGV -idG78jY92PYi4HNtacu/RcYQ+xaUtyGu7TuExBjOp4xtq4Glbhsa1CYHC8oGwxvd1l4hRS71 -eyBHASROW631Ug/sdpwugF0/pB2NgwISF3bEkJSx7ThA8JSSa47BA1GQPhB9IPrSB6IPRF/6 -QPSB6EsfiD4QfekD0QeiL30g+tIHog9EX/pA9IHoSx+IPhB96QPRB6IvfSD60geiD0Rf+kD0 -gehLH4g+EH3pA9EHoi99IPpK6BtiI0rnb2P9YgAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTLayoutExample >> exampleRectanglePack [ - -| v es | -v := RTView new. - -es := (RTEllipse new size: #yourself) elementsOn: (1 to: 50). -v addAll: es. - -RTRectanglePackLayout on: es. -^ v -] - -{ #category : #icons } -RTLayoutExample >> exampleRectanglePackIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAG00lEQVR4XuVc13IbMQzM/3+k -e++9m0rWo9VAEAhSeTjJXMxonOigk40l2hK8P7OZvmyT/NE3gT4g+qIPiD4g+qIPiD4g+qIP -iD4g+qIPiD4g+qIPiL7oA6IPiL7oA6IPiL7oA6IPiL7oA6IPiL7oA6Iv+oDoA6Iv+oDoA/If -8v7+Xg4PD8vu7u6Mr+Pj4/L5+Vm87svLC/SWdK+urlb03t7eyv7+/pLe7e3tkt7397f/3vL6 -+rrQeXh4WFyDngQgcwPPai+ARd2np6eq7snJSbFg1PTOz88Xeh5Yvr6+vgrEv399fV2GByQD -A6+9vb3Sq4sVDb2Dg4MUZHiGXf2R4T8+Plauw2uHBiQziveSu7u7pi6A6AHu5uam/Atfs5a3 -+ffv7+/HBiQziov93bo9gOBez8/PJQMM90EOg1cgtGFBDJ9Deo0MYyAht/SQxHHfnZ2drrzk -Cwm+kD8kq6ws+fqYHyXZWkjJkr/PA2dnZwvdo6OjpcrOhklbNAyd1GGEzMinp6cLQ8DgvYaO -cs46STlaAMPnEP7hvl/IDBitflvKeoERERqjniYT6Ee5R6ZTx4pmTAcQLGEzIBHKMh2UriwI -bMNX08G/7TWU3BaQdUHVp06MINT5FY7waHUuLy9TbwPoqLjABNgGdXhAkNx9xQPDRNXOPGSl -lAiM2OoxMoYA16wHec9Rpk6WQIlWdFQF9fQqWPW16xcXFz/3wj032aVvJXVCQ0dUhn/Be3ru -CY+EB2aVHfJTxqsNCUhWxvoVDX6ppccc0dPXZFQMQmAEyCZC11Z26qhuWv2KBS9K6BFZGXXq -5MN8yJJoDHsBQR5BXO9lhudNXamFK/s7zD3v5xXR6/AU0PESSb0nL3DVPz4+lg7SsGbsn4Kg -1bdso0ye1G1YyBJ1i2axoahX0CxaT7I0ja/EEMo24Skb6UNqoJAGb+kiF9jVT3CQuPE+cpD3 -Dhg3o2siisbml+E7daxWAIBcgdySrUZcQ3iK6I5eyao2gFfreaSoE4Dik26tmST/lPFLuF9N -z9LuUade6/YlAImatKjigWdEzLAvSVFlRSWtzREZvULi0r8fTbcMB0jWMyBsuK6+9Oyb1HYC -LS1Su58lFwEKFgY+Y4sL6bKXXFbPFi48aF45NctoehL7GxQC0QYU7rkppncrG0MOF2SeZPuQ -nnv2Gng+4LAgOoffD+kxHnfpWv3KOtMpLIO5AUUOjF5Y80i/nzIcID3dN8vaHkNDN9p67aHf -2eXTC2pUjQL9XjWgnadtTZ3Y1ZuFNyyCGiDIP8wjkh5iEnuJZqz8jmEtYaOD9rrRCreVUhSy -8LvY3UIXJnWoE9IcMCJK3da4DVYvylPotoYhGMb+9/eSqrI8zQ0PyKYGMx1PoUAXzR/CF3qJ -yKgwNnXw03sA7onPIrz1MAhDABKc0VjZv4ah/ES7bQTZ6ROUf6ClJXQW/hiyoh6pNko0FCB+ -9ilKoLXEDz6KALgOvFm1ZfO/NfIxG8gbApDWcQSEmZaO9SLmokwfhm6VxgxVcoC0eoueRg+g -kbntuSd08ZnWVEqkM3zIahkP3tHisJDgYUDmh5ZHcdOrx+twX4RCeMYmwJgckIjijgzTagZh -ONs/ZM0mdw5rLEGrjB4+qdfOciBRZxWRbRznVVZpNZsWNAj+z+oNP/11SUBsvV/rB2zziDDX -uzcBL4D+Js51/PrGEEk0awp5bKBmXILlwcQ9kYeiz1nOC72Q7ej9RMqmvGdyQHws96M4ES+F -HoL9xHx6pER5wE+W2FEht9exuG9GZA7PZdV2DO34T61EJRNc2yeJGF1261kxkR0wHf4EVVL2 -lp7SOKvAWLJGRs0Om+J6rbmM5sQkAOHxZkg2HQKpPbUBYSeqzpinWod1tuW49Fb0IbYXqMVz -cleR0W0egoHRnYOqt4xwFJbsOJF5aMBPeJQ50gaDWaIvmsfyFY/nlGBoGBwG5Y6gldp+CL4b -wALAbS2Nf+WhT3haNNnuiwbrIR4kPgHIV2EsHph3pj7aNjkg+ANRjpIrYs5g2GInz2YQ4Qf6 -LEFtjvHPI/HzuQxzhvJf4b+i01X4DqNTJJI6e4SsirL/ZwmaTYX4spd5xL6Hh9BYqh1hzBOU -nEhp7Wj+ekDsH24eiVRspcXka6dBEPNpGNuHcMPKhjLrDQxrNh9RD5+1s7uk9Fkg4PsA3NSs -7+Qha06xrxCOa3pa8aenWgLPWGe1MzROPQqk/xDMRoidethBHxD9sldf9AHRB0Rf9AHRB0Rf -9AHRB0Rf9AHRB0Rf9AHRF31A9AHRF31A9AHRF31A9AHRF31A9AHRF31A9EUfEH1A9EUfkF8v -fwG1s65SxN0mrAAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTLayoutExample >> exampleReversedHorizontalTreeLayout [ - -"The mondrian version is: -| b | -b := RTMondrian new. -b shape box size: 20; color: Color red trans. -b nodes: (1 to: 128). -b edges connectFrom: [ :v | v // 2 ]. -b layout horizontalReversedTree. -b -" - | v es eb | - v := RTView new. - es := RTBox new size: 10; elementsOn: (1 to: 100). - v addAll: es. - - eb := RTEdgeBuilder new. - eb view: v. - eb objects: (1 to: 100). - eb connectFrom: [ :value | value // 2 ]. - - RTHorizontalTreeLayout new horizontallyReverse; on: es. - ^ v -] - -{ #category : #icons } -RTLayoutExample >> exampleReversedHorizontalTreeLayoutIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAFf0lEQVR4XuVd2W7cMAzM/3/k -5i15y30fdjuLZUG4kixK8nq4JGCgaB2l0JgckhpJV/O8n93f3x+fGnt/f5+ur69nPPhz6d2v -r69pdmpXe/5ymeAaME6AHJ+19z8+PuID0gMIJvDz83N6fn4+TuTd3d2EByZ/Z7Hv7+/4gLTY -29vbhEdPpA5NAKl17JeXlyk+II0eAlD0BP7llQlPz9jxAWmw29vbCc/WgCP0xQekwm5ubiY8 -W4z9+/v7L/Q9Pj7GB8QaskDe8iVb0uESP3kk+V0BkXR2GcZq641aQOJ7iNFDQMCY/J+fn/88 -BBNr/cI1GBK+4gMysDDEhL6+vk6WQjI1RnxABrZOnp6eqkk6NflewhZNpa7D0nQy+dqXIajU -HsnVH16IncpDMMl4BCh4RckLUpV8DpD4HmIs3DCR0rc6HA4THitXlLwgvocMJPWSAURpRq6l -yR4qdqrmYoshVRZgJW0ugRcfkMpKvXUMcI54yNq7Pd3jEIDoXhZIWnikNpRZidpDB5gGEMmw -sPyq10NyvNCyKtjTiokfspShSocHSZoM0Dy1Qy6S1PGeLiR7fmd8QDrTXsR+2Oi2fHxACoCA -zBHjUcBpTxgd99l5hKp1AlAsWVaLsWdaNOsh56yidfMyPiAFDzn3h7BW2ccn9TOZNC8ZO8BU -ykWJ77WtkBbTul/GDjC1cnELAtZeEd9DCpW6nnztIaNTX+0hjCp5N0K5Uekw+8qhC0CQDVn2 -h5Rs2QNjq9zplYv4t1QjsbTeXgI25XnxAcmQOsyiXLR6SipcsWVa9MrFNYK2FHepyWfjFPeF -oZYNtXgIW7XuvnViqVsYWyW0lXpOuVgyvKN5pETQpfGYOsDUysU1lUgqZc0VeyWuwBJxfEDm -vHJxuXCV+tlc2pvLvEpVOZM8yNU+9RqFYi6NLdUtTJmWG5GDJu+1HlSKE0pewKRgoZcBIZxJ -jK/NylpImmUFkVq5KKKHlrH1V18DUEsr5qIBSSkXe+sTS4uFRY3iXmxdmmAJcTVpbXxA5jHb -EWoAr0lrWbq+FytyANDiIbVVf3xAVpSLvYBYfwZKlL3PRqFWLgKg1nXvltoiPCA1ykVpq1jG -9bB1zYWHbFmpxwdkIKmrMxdXl3ZbC0mWtRJK5aLOjnJfey4stdYTLF7l+szFVMHXmgQ8PDzE -B6Rw5mIVtyxXDHu+8viV+jzmiL9RWmCWFrx7QCyqk9GF5EWHrJYzF626rPgcYiR12JbKxfge -YqjUtXJRb0fQf79lNR6fQ2bbmYv4gmUrmocjMi6+dbLldmmmHbmUysVU20QmbovJY/I4auXi -ubq2LBkWjYeUlIvnsPjaXiOpb21MqviLFjnUWnxtb6JS3/P/EV/be7LeMxdHGdOSr9szF0ca -08ZPV2cubnkGSnxA5vbtCPFbJzunvfAQWE3T0XO4ogJEKxelibh28Myy6eid0OlaJy1nLupQ -1pK+xj84IOEhS+WidVu0ft96pi/befCuDw5IJQS5i148tE1oSb0mZJVivyULY5OdUgOSUzTW -TDgAq9kfwtR63x2Q2vpkqWisVSfK+6UtbWx3r1MC0qtolNpF3m89AyU+ICcbIaBbFnzxL5bc -EZBUiPJy+yd9yNKKxprmIt5NpbIpQBivrnBB6rBaRWOJwJdjsmVY9B5SUjRicpeeAO8ohaEl -IPE9pLM+SXEAPEKai2snNiwzqvgcskFLxdqM1Gk047oKPannek36FmmLolEDEp9DGj1kuQu3 -9yglFrWLOw/ZQtGIMfX48QEZSOotxn7KAyUgWvEeHxAyUh89Nvud6vS9LGRZ4BEQeW8oi3+f -eqOhTYIHfx6paIx/W/TGIQuec7pF+visjct4K5sLQLa4RZr9UmKxP57mDHmPaisXAAAAAElF -TkSuQmCC' -] - -{ #category : #sources } -RTLayoutExample >> exampleTree [ - -| v es | -v := RTView new. - -es := (RTEllipse new size: 12) elementsOn: (1 to: 100). -v addAll: es. - -RTEdgeBuilder new - view: v; - elements: es; - connectFrom: [ :value | value // 3 ]. - -RTTreeLayout new on: es. -^ v -] - -{ #category : #icons } -RTLayoutExample >> exampleTreeIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAADN0lEQVR4XuWaiY7iMBBE/f8f -ySEECIS478PZrUi98jKOEwEOMK8khIFO7PSzu9uecUXB1yfJ8V3AB8IXHwgfCF98IHwgfPGB -8IHwxQfCB8IXHwhffCB8IHzxgfCB8MUHwgfCFx8IHwhffCB88YHwgfDFB8IHwhcfCB8IX3wg -fCB88YHwxQfCB8IXHwgfCF98IHwgfH0IkMvl4vv9vl+v157vrjcDuV6vfjwe+263W+i12Wy8 -XhLfdS0AOZ/Pfrvdli+17fvFYlHs9/vys1aKQTkcDn61WnmtIv2utiDy3foEEDlVTn7EkbpO -8G63249rBXS5XPrj8ehPp1PZ1jvf5dXSJH9ZUhec3W7XCKwAmr1Wl1aWrUCS9OyKNvKDTdYs -VZY6kYMfWXWaJRqgrVqtQN0vtgq/TYpGdREpe9lrcDQbwlnx6P0UAhX+FBLDHJaagW3O9vtn -18zXGJsWQq3uQzTAsGLL4RQ9vEDJETn7upf1pcnyzBbBtR0zh8Nh6SiFopx9KSRYX7mBhH09 -+1yuzfhpcdMSeC5HfXNfrq1QFX4OKypLdPy+WgBSNahYifvs0cxv6cvZRapa9P6qY5HUQKr2 -HHrIqoqJ0perurHKS9u8KVnpTKvuZk0Sm9lUDTBMkKmHaJKwR6PRS/qy+7TRV23I+nuOZeWj -b1r6pQbOt0nbNMohqq2blHNaTZPJxNfZTKdTrE2df1wTJ1tFUVc1KA8p3Nk1MWnDxrfZPb5C -lEvM2TpPqop/1kmqQ75NvY1rsjrC6sIAVVUY9h7rlG9Tb+MSybxM6CEcfSfN5/N/7TB2hm2d -Kb3DRg9l34ftb7Fx+iEGwyqC+wpB9uFB2qe0O53O19nE2i62EVSe6PV6/51azmYzPxgMyo0j -v52v7aqStO3eC75alUuVYLmPyPmKANEyuf/zqIFIweIrE5DYoZiFKv5/ibwBiPYVSuDK8qk2 -31V8INyQxRcfCF98IHwgfPGB8IHwxQfCB8IXHwgfCF98IHzxgfCB8MUHwgfCFx8IHwhffCB8 -IHzxgfDFB8IHwhcfCB8IX3wgfCB88YHwgfDFB8IXHwgfCF98IHwgfPGB8IHwxQeC0x8XSjit -yN/MVAAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTLayoutExample >> exampleWeightedCircle [ - -| v es | -v := RTView new. - -es := (RTEllipse new size: #yourself) elementsOn: (1 to: 130 by: 10). -v addAll: es. - -RTEdgeBuilder new - view: v; - elements: es; - connectFrom: [ :value | value // 2 ]. - -RTWeightedCircleLayout new on: es. -^ v -] - -{ #category : #icons } -RTLayoutExample >> exampleWeightedCircleIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAFgklEQVR4XuWdCY/rKgyF8/9/ -5Oz7vu9D75yqSHl5pICxE6fHErq6I7Wd8sVgHxumW634zZN1/FPAD4Tf+IHwA+E3fiD8QPiN -Hwg/EH7jB8IPhN/4gfAbPxB+INNb+LOHh4dwe3sbzs7O1uPm5ibc39+Hn5+fwA9kIvv4+Agn -Jydhf39/tW0cHh6Gt7e3wA/E0C4vL7MghgOeww/EwDCxtTDiODo6CvxAFO38/FwMIw4sc/xA -FOz19bUZRhx3d3eBH0ij/U2kGhAMaiDf39/rsDQxqeuf58LTl5cXVRgYCIvpgPz+/obT09Oi -ycT+AEu9z9XVlToQhMNUQN7f36sncW9vLyC/SCxXJoMGCCa1ZaK+vr4CPxBHG/DBwQE/EC3b -bN7NkwV9ih+IjneoT5h2yEsDBCKe5oTFcFjL6/oD0d/Y93h6egpIHiHTILPHv/g/fr4oIH+x -vUmugE1eG8hwcgG/VLREiI7cyj0Q7ScZgKMdHx9rvvd/JhNPv+R9rq+vg2sgKAxZAdH0kn59 -pEU91pL1l7Rk/W9tb31PLEua6rEGFDMgz8/Pqh7y+fkZEtDFn3FxcRE04fYHlmuasDcVzUFm -qXkvPCzx9dDMLMJoaQ3fFIiWEFjyxG28JeTeZyhaWoTRw+XQDRCtp6/2M7EEYc/BQJa/7Wm1 -yvylyaa5ltWaIEIptvrdAMoSiKTDZRL5XVpUsm7ZaQkKJJGhqwIVnnQot6UdIamoyntorhFt -ddrLE74kst24hg9lBUQ4Y5k2NCV401QPiTUQSfbeTSGTwDPQKbJyZtZAJB0tTUBQJ0c9uvQX -RDbsCcjj4+Pu7CGbkHbRbZxWSWEcEhVYDKS0gyRXAZzbSgMN13mIRuegF9PWsVo7IkVANOoR -nprTtL0E2tqk4qLGL+2p0bm1VUkzoe3m3Ag9mVaLaqvnVwNB5LCLQDT2Ro1ghd9DBgbJBtJN -bTOflgg62x6yrfXGyxKWC14Arl/smg1IyQHLJeUiJZs+9oao01mq0N0cNQ6vy1XtXuoGCKyl -ZQYa0pJhxDYkC22uScuSJFSejyTXbPxW36VrFedqsvZ+682SLdZ9oHa7AhING3QuGvF+g4JU -+xo7ejcrkL4rx0rhZgSLp2hOG9Z/tDU5/tuAKm3Ys6wdbXWWGx9Ku72NP6BxTjuRmsPieRGL -ZVgdSOHx52DZb2XsHWsYqRPCLveQmhDYY+PDmKX0LQsoqkAkNfYp+q9abUwFtgjj1YCgB2mX -rknq21iHo8UNEJ2id6ie/fBk2BenuklIBYjk6ozW/qW5E0Kr8kGn5NJNHuJRUoHXbs63BIiI -2EdgEEYtPdoFEG+C41h9XXoIx52WZXkmT9tyJWrr/Kmb4kssqT6SOzOC5NA9kLHEaYnVw9zy -a90wrgZEGmkNQ0es3321eOobqXOtQNYRYWeg9Yg2821LBZoqtFVVhLH9iicivXhZ2rYjFtr1 -D3NxsfSukL7rl9bntTbUbeInPASJYGIJNhMUTYHEGH5skvFF+6Ji7VXhrQWvkrPz0RvhMfDc -KZVp8wIVvhwApJ4uybHkVBIJSAktLaR6v6a82cclEI3lbVtUlusRQxNGXPdrygOUQGrOJ6bE -yNLG73j0oSYSpAQizVtiGbjmWF18jXcpZ1Yg0pNLcT+SHBAqiejmbFmaFYj0Jp4YAUlet6lt -BK9Ht2cFIpnUuJxIgUTtLXWDnAdNbfa+rNqr9fpSSs3rEG2lPh8eY519LwoIrPS8yXBtrzmn -YnXP7k4CyWXQ2PxTiWVpXjHmHfxAMoalA1IFNvvN3x/M6le5xBC5jqclaVFApIZ9BZKK978v -RQNkl4wfCD8QfuMHwg+E3/iB8APhN34g/ED4jR8IPxB+4wfCb/xAlmL/ANDxmACJVISBAAAA -AElFTkSuQmCC' -] - -{ #category : #accessing } -RTLayoutExample >> label [ - ^ 'Layout' -] diff --git a/src/Roassal2/RTLayoutTest.class.st b/src/Roassal2/RTLayoutTest.class.st deleted file mode 100644 index fd9b73cb1..000000000 --- a/src/Roassal2/RTLayoutTest.class.st +++ /dev/null @@ -1,519 +0,0 @@ -Class { - #name : #RTLayoutTest, - #superclass : #RTTest, - #instVars : [ - 'view' - ], - #category : #'Roassal2-Core-Tests' -} - -{ #category : #running } -RTLayoutTest >> setUp [ - super setUp. - view := RTView new. - - 1 to: 20 do: [ :i | view add: (RTBox elementOn: i) ] -] - -{ #category : #tests } -RTLayoutTest >> testCellLayout [ - | v els el30 el50 el80 | - v := RTView new. - els := RTBox new size: #yourself; color: (Color green alpha: 0.3); elementsOn: #(30 50 80). - els @ RTDraggable. - v addAll: els. - - RTEdgeBuilder new - view: v; - useAssociations: (Array with: 30 -> 50 with: 30 -> 80). - - RTCellLayout new - gapSize: 0; on: els. - el30 := els first. - el50 := els second. - el80 := els third. - - self assert: el30 encompassingRectangle bottom + 10 equals: el80 encompassingRectangle top. - self assert: el30 encompassingRectangle right + 25 equals: el50 encompassingRectangle left. - self assert: el50 encompassingRectangle bottom equals: el80 encompassingRectangle top. - -] - -{ #category : #tests } -RTLayoutTest >> testCircleLayout [ - - | answer | - RTCircleLayout on: view elements. - answer := OrderedCollection new. - answer add: (442@222); - add: (431@290); - add: (400@351); - add: (351@400); - add: (290@431); - add: (222@442); - add: (154@431); - add: (93@400); - add: (44@351); - add: (13@290); - add: (2@222); - add: (13@154); - add: (44@93); - add: (93@44); - add: (154@13); - add: (222@2); - add: (290@13); - add: (351@44); - add: (400@93); - add: (431@154). - self assert: ((view elements collect: #position) collect: #asIntegerPoint) asArray = answer asArray - -] - -{ #category : #tests } -RTLayoutTest >> testCircleLayoutOnEmpty [ - - RTCircleLayout new applyOn: #() - -] - -{ #category : #tests } -RTLayoutTest >> testCluster [ - view := RTView new. - view - addAll: - ((RTEllipse new size: 10) elementsOn: Collection withAllSubclasses). - RTEdgeBuilder new - view: view; - objects: Collection withAllSubclasses; - connectFrom: #superclass to: #yourself. - RTClusterLayout on: view elements edges: view edges -] - -{ #category : #tests } -RTLayoutTest >> testFlowLayoutAlignment [ - | l | - l := RTFlowLayout new. - self assert: l isAlignTop. - self deny: l isAlignBottom. - - l alignBottom. - self deny: l isAlignTop. - self assert: l isAlignBottom. - -] - -{ #category : #tests } -RTLayoutTest >> testFlowLayoutAlignmentLayoutBottom [ - | l es | - es := (RTBox new size: [ :v | v * 10 ]) elementsOn: #(1 2 3). - l := RTFlowLayout new. - l alignBottom. - l on: es. - -" RTView new - addAll: es; - open. -" - self assert: (es collect: #position) asArray = (Array with: (10.0@0.0) with: (30.0@ -5.0) with: (60.0@ -10.0)) - -] - -{ #category : #tests } -RTLayoutTest >> testFlowLayoutAlignmentLayoutCenter [ - | l es | - es := (RTBox new size: [ :v | v * 10 ]) elementsOn: #(1 2 3). - l := RTFlowLayout new. - l alignCenter. - l on: es. - -" RTView new - addAll: es; - open. - -" self assert: (es collect: #position) asArray = (Array with: (10.0@5) with: (30.0@5) with: (60.0@5)) - -] - -{ #category : #tests } -RTLayoutTest >> testFlowLayoutAlignmentLayoutTop [ - | l es | - es := (RTBox new size: [ :v | v * 10 ]) elementsOn: #(1 2 3). - l := RTFlowLayout new. - l on: es. - -" RTView new - addAll: es; - open. -" - self assert: (es collect: #position) asArray = (Array with: (10.0@10.0) with: (30.0@15.0) with: (60.0@20.0)) -] - -{ #category : #tests } -RTLayoutTest >> testForce [ - | v es layout | - v := RTView new. - es := RTBox elementsOn: (1 to: 2). - v addAll: es. - RTEdgeBuilder new - view: v; - objects: (1 to: 2); - connectFrom: #yourself - toAll: - [ :value | Array with: value - 1 with: value + 1 with: value + 2 ]. - layout := RTForceBasedLayout new. - layout on: es edges: #(). - self assert: layout userDefinedEdges isEmpty -] - -{ #category : #tests } -RTLayoutTest >> testForceDefault [ - - | l | - l := RTForceBasedLayout new. - self assert: l edges isEmpty. - self assert: l nodes isEmpty. -] - -{ #category : #tests } -RTLayoutTest >> testForceWithForeinEdges [ - | v es layout edges | - v := RTView new. - es := RTBox elementsOn: (1 to: 3). - v addAll: (es copyFrom: 1 to: 3). - edges := RTEdgeBuilder new - view: v; - objects: (1 to: 3); - connectFrom: #yourself - toAll: [ :value | Array with: value - 1 with: value + 1 ]. - - "We give to the layout node 1 and 2, and some edges that refer to 3" - layout := RTForceBasedLayout new. - "No error should be raised" - layout on: es allButLast edges: edges allButFirst -] - -{ #category : #'flow layout' } -RTLayoutTest >> testHorizontalFlowLayoutAlignment [ - | l | - l := RTHorizontalFlowLayout new. - self assert: l isAlignTop. - self deny: l isAlignBottom. - - l alignBottom. - self deny: l isAlignTop. - self assert: l isAlignBottom. -] - -{ #category : #'flow layout' } -RTLayoutTest >> testHorizontalFlowLayoutAlignmentLayoutBottom [ - | l es | - es := (RTBox new size: [ :v | v * 10 ]) elementsOn: #(1 2 3). - l := RTHorizontalFlowLayout new. - l alignBottom. - l on: es. - -" RTView new - addAll: es; - open. -" - self assert: (es collect: #position) asArray = (Array with: (0@10.0) with: (-5@30.0) with: (-10.0@ 60.0)) - -] - -{ #category : #'flow layout' } -RTLayoutTest >> testHorizontalFlowLayoutAlignmentLayoutCenter [ - | l es | - es := (RTBox new size: [ :v | v * 10 ]) elementsOn: #(1 2 3). - l := RTHorizontalFlowLayout new. - l alignCenter. - l on: es. - -" RTView new - addAll: es; - open. - -" self assert: (es collect: #position) asArray = (Array with: (5@10.0) with: (5@30.0) with: (5@60.0)) - -] - -{ #category : #'flow layout' } -RTLayoutTest >> testHorizontalFlowLayoutAlignmentLayoutTop [ - | l es | - es := (RTBox new size: [ :v | v * 10 ]) elementsOn: #(1 2 3). - l := RTHorizontalFlowLayout new. - l on: es. - -" RTView new - addAll: es; - open. -" - self assert: (es collect: #position) asArray = (Array with: (10.0@10.0) with: (15.0@30.0) with: (20.0@60.0)) -] - -{ #category : #tests } -RTLayoutTest >> testHorizontalLineLayout [ - - | answer | - RTHorizontalLineLayout on: view elements. - answer := (((Array new: 20) at: 1 put: (((5/2)@(5/2))); at: 2 put: (((35/2)@(5/2))); at: 3 put: (((65/2)@(5/2))); at: 4 put: (((95/2)@(5/2))); at: 5 put: (((125/2)@(5/2))); at: 6 put: (((155/2)@(5/2))); at: 7 put: (((185/2)@(5/2))); at: 8 put: (((215/2)@(5/2))); at: 9 put: (((245/2)@(5/2))); at: 10 put: (((275/2)@(5/2))); at: 11 put: (((305/2)@(5/2))); at: 12 put: (((335/2)@(5/2))); at: 13 put: (((365/2)@(5/2))); at: 14 put: (((395/2)@(5/2))); at: 15 put: (((425/2)@(5/2))); at: 16 put: (((455/2)@(5/2))); at: 17 put: (((485/2)@(5/2))); at: 18 put: (((515/2)@(5/2))); at: 19 put: (((545/2)@(5/2))); at: 20 put: (((575/2)@(5/2))); yourself)). - self assert: (view elements collect: #position) asArray = answer - -] - -{ #category : #tests } -RTLayoutTest >> testHorizontalLineLayoutWithBox [ - | models elHello elWorld elHelloWidth elWorldWidth | - view := RTView new. - models := #(50 150 ). - view addAll: (RTBox new color: (Color blue alpha: 0.2); size: #yourself; elementsOn: models). - self assert: view elements size = 2. - elHello := view elementFromModel: models first. - elWorld := view elementFromModel: models second. - elHelloWidth := elHello width. - elWorldWidth := elWorld width. - RTHorizontalLineLayout new gapSize: 0; on: view elements. - "view open." - - self assert: elHello width = elHelloWidth. - self assert: elWorld width = elWorldWidth. - self assert: elHello encompassingRectangle width = elHelloWidth. - self assert: elWorld encompassingRectangle width = elWorldWidth. - - self assert: elHello encompassingRectangle top = elWorld encompassingRectangle top. - self assert: elHello encompassingRectangle right <= elWorld encompassingRectangle left. - -] - -{ #category : #tests } -RTLayoutTest >> testHorizontalLineLayoutWithText [ - | elHello elWorld elHelloWidth elWorldWidth | - view := RTView new. - view addAll: (RTLabel elementsOn: #('hola ' 'mundo') ). - self assert: view elements size = 2. - elHello := view elementFromModel: 'hola '. - elWorld := view elementFromModel: 'mundo'. - elHelloWidth := elHello width. - elWorldWidth := elWorld width. - RTHorizontalLineLayout new gapSize: 0; on: view elements. - "view open." - - self assert: elHello width = elHelloWidth. - self assert: elWorld width = elWorldWidth. - self assert: elHello encompassingRectangle width = elHelloWidth. - self assert: elWorld encompassingRectangle width = elWorldWidth. - - self assert: elHello encompassingRectangle top = elWorld encompassingRectangle top. - self assert: elHello encompassingRectangle bottom = elWorld encompassingRectangle bottom. - self deny: elHello encompassingRectangle right > elWorld encompassingRectangle left. - -] - -{ #category : #tests } -RTLayoutTest >> testHorizontalTreeLayout [ - | v els el30 el50 el80 | - v := RTView new. - els := RTBox new size: #yourself; color: (Color green alpha: 0.3); elementsOn: #(30 50 80). - els @ RTDraggable. - v addAll: els. - - RTEdgeBuilder new - view: v; - useAssociations: (Array with: 30 -> 50 with: 30 -> 80). - - RTHorizontalTreeLayout new - isLayered: false; leftGap: 0; topGap: 0; verticalGap: 0; horizontalGap: 0; on: els. - el30 := els first. - el50 := els second. - el80 := els third. - self assert: el30 encompassingRectangle right equals: el50 encompassingRectangle left. - self assert: el30 encompassingRectangle right equals: el80 encompassingRectangle left. - self assert: el50 encompassingRectangle bottom equals: el80 encompassingRectangle top. - -] - -{ #category : #tests } -RTLayoutTest >> testRadialTreelLayout [ - | answer | - RTEdgeBuilder new - view: view; - objects: (1 to: 20); - connectFrom: [ :v | v // 2 ] to: #yourself. - RTRadialTreeLayout on: view elements edges: view edges. - answer := OrderedCollection new. - answer - add: 202 @ 202; - add: 216 @ 217; - add: 187 @ 215; - add: 239 @ 217; - add: 213 @ 240; - add: 184 @ 238; - add: 165 @ 216; - add: 262 @ 208; - add: 250 @ 239; - add: 226 @ 257; - add: 212 @ 261; - add: 182 @ 259; - add: 169 @ 252; - add: 149 @ 230; - add: 144 @ 216; - add: 282 @ 202; - add: 281 @ 217; - add: 270 @ 245; - add: 261 @ 257; - add: 234 @ 275. - self - assert: - ((view elements collect: #position) collect: #asIntegerPoint) asArray - = answer asArray -] - -{ #category : #sugiyama } -RTLayoutTest >> testSugiyamaLayout [ - | result elements | - elements := (RTBox new size: 50) elementsOn: (1 to: 20). - view := RTView new. - view addAll: elements. - elements allButFirst do: [:e | - view add: (RTLine edgeFrom: elements first to: e) ]. - - RTSugiyamaLayout on: elements. - - result := (((RTGroup new) add: ((522.0@28.0)); add: ((999.0@98.0)); add: ((946.0@98.0)); add: ((893.0@98.0)); add: ((840.0@98.0)); add: ((787.0@98.0)); add: ((734.0@98.0)); add: ((681.0@98.0)); add: ((628.0@98.0)); add: ((575.0@98.0)); add: ((522.0@98.0)); add: ((469.0@98.0)); add: ((416.0@98.0)); add: ((363.0@98.0)); add: ((310.0@98.0)); add: ((257.0@98.0)); add: ((204.0@98.0)); add: ((151.0@98.0)); add: ((98.0@98.0)); add: ((45.0@98.0)); yourself)). - self assert: (result includesAll: (elements collect: #position)) -] - -{ #category : #tests } -RTLayoutTest >> testTreeLayoutWithoutSpecificingEdges [ - | v answer | - v := RTView new. - v addAll: (RTBox elementsOn: (1 to: 20)). - RTEdgeBuilder new - view: v; - objects: (1 to: 20); - connectFrom: [ :value | value // 2 ] to: #yourself. - RTTreeLayout on: v elements. - answer := OrderedCollection new. - answer - add: 43.5 @ (15 / 2); - add: 27.5 @ (65 / 2); - add: 67.5 @ (65 / 2); - add: 19.5 @ (115 / 2); - add: 43.5 @ (115 / 2); - add: 59.5 @ (115 / 2); - add: 75.5 @ (115 / 2); - add: 11.5 @ (165 / 2); - add: 27.5 @ (165 / 2); - add: 39.5 @ (165 / 2); - add: 47.5 @ (165 / 2); - add: 55.5 @ (165 / 2); - add: 63.5 @ (165 / 2); - add: 71.5 @ (165 / 2); - add: 79.5 @ (165 / 2); - add: 7.5 @ (215 / 2); - add: 15.5 @ (215 / 2); - add: 23.5 @ (215 / 2); - add: 31.5 @ (215 / 2); - add: 39.5 @ (215 / 2). - self - assert: (v elements collect: #position) asArray - equals: answer asArray -] - -{ #category : #tests } -RTLayoutTest >> testTreelLayout [ - | answer | - RTEdgeBuilder new - view: view; - objects: (1 to: 20); - connectFrom: [ :v | v // 2 ] to: #yourself. - RTTreeLayout on: view elements edges: view edges. - answer := OrderedCollection new. - answer - add: 43.5 @ (15 / 2); - add: 27.5 @ (65 / 2); - add: 67.5 @ (65 / 2); - add: 19.5 @ (115 / 2); - add: 43.5 @ (115 / 2); - add: 59.5 @ (115 / 2); - add: 75.5 @ (115 / 2); - add: 11.5 @ (165 / 2); - add: 27.5 @ (165 / 2); - add: 39.5 @ (165 / 2); - add: 47.5 @ (165 / 2); - add: 55.5 @ (165 / 2); - add: 63.5 @ (165 / 2); - add: 71.5 @ (165 / 2); - add: 79.5 @ (165 / 2); - add: 7.5 @ (215 / 2); - add: 15.5 @ (215 / 2); - add: 23.5 @ (215 / 2); - add: 31.5 @ (215 / 2); - add: 39.5 @ (215 / 2). - self - assert: - (view elements collect: #position) asArray = answer asArray -] - -{ #category : #tests } -RTLayoutTest >> testVerticalLineLayoutOnElements [ - | el1 el2 | - view := RTView new. - el1 := RTBox new size: #yourself; elementOn: 30. - el2 := RTBox new size: #yourself; elementOn: 50. - view add: el1; add: el2. - self assert: view elements size equals: 2. - RTVerticalLineLayout new - gapSize: 0; - on: view elements. - self assert: el1 height equals: 30. - self assert: el2 height equals: 50. - self assert: el1 position equals: 15 @ 15. - self assert: el2 position equals: 25 @ 55. - self assert: el1 encompassingRectangle left equals: el2 encompassingRectangle left. - self assert: el1 encompassingRectangle bottom <= el2 encompassingRectangle top. -] - -{ #category : #tests } -RTLayoutTest >> testVerticalLineLayoutOnGroups [ - | line1 line2 el1 el2 | - view := RTView new. - line1 := RTBox new size: #yourself; elementsOn: #(30). - line2 := RTBox new size: #yourself; elementsOn: #(50). - view addAll: line1; addAll: line2. - self assert: view elements size equals: 2. - RTVerticalLineLayout new - gapSize: 0; - on: (Array with: line1 with: line2). - el1 := line1 first. - el2 := line2 first. - - self assert: el1 height equals: 30. - self assert: el2 height equals: 50. - self assert: el1 position equals: 15 @ 15. - self assert: el2 position equals: 25 @ 55. - self assert: el1 encompassingRectangle left equals: el2 encompassingRectangle left. - self assert: el1 encompassingRectangle bottom <= el2 encompassingRectangle top. -] - -{ #category : #tests } -RTLayoutTest >> testVerticalTreeLayout [ - | v els el30 el50 el80 | - v := RTView new. - els := RTBox new size: #yourself; color: (Color green alpha: 0.3); elementsOn: #(30 50 80). - els @ RTDraggable. - v addAll: els. - - RTEdgeBuilder new - view: v; - useAssociations: (Array with: 30 -> 50 with: 30 -> 80). - - RTTreeLayout new - isLayered: false; leftGap: 0; topGap: 0; verticalGap: 0; horizontalGap: 0; on: els. - el30 := els first. - el50 := els second. - el80 := els third. - self assert: el30 encompassingRectangle bottom equals: el50 encompassingRectangle top. - self assert: el30 encompassingRectangle bottom equals: el80 encompassingRectangle top. - self assert: el50 encompassingRectangle right equals: el80 encompassingRectangle left. - -] diff --git a/src/Roassal2/RTLayoutTranslator.class.st b/src/Roassal2/RTLayoutTranslator.class.st deleted file mode 100644 index 8d64d3183..000000000 --- a/src/Roassal2/RTLayoutTranslator.class.st +++ /dev/null @@ -1,126 +0,0 @@ -Class { - #name : #RTLayoutTranslator, - #superclass : #RTObject, - #instVars : [ - 'view' - ], - #classInstVars : [ - 'defaultTranslator' - ], - #category : #'Roassal2-Layouts' -} - -{ #category : #accessing } -RTLayoutTranslator class >> default [ - "Return the default translator, the one used in the layouts" - - defaultTranslator ifNotNil: [ ^ defaultTranslator ]. - ^ defaultTranslator := self defaultClass new -] - -{ #category : #accessing } -RTLayoutTranslator class >> defaultClass [ - ^ self allSubclasses detect: #isDefault -] - -{ #category : #'as yet unclassified' } -RTLayoutTranslator class >> isDefault [ - ^ false -] - -{ #category : #accessing } -RTLayoutTranslator >> nbCycles: anInteger [ - "Do nothing" -] - -{ #category : #hook } -RTLayoutTranslator >> translate: element by: deltaPosition [ - "Translate of the center of the element by a step" - self translate: element to: element position + deltaPosition -] - -{ #category : #hook } -RTLayoutTranslator >> translate: element to: newPosition [ - "Translate of the center of the element" - self subclassResponsibility -] - -{ #category : #'public - translating' } -RTLayoutTranslator >> translate: element to: newPosition direction: aDirection [ - "Translate the bottom left corner of the element" - - self translate: element to: newPosition + (element extent / 2 * aDirection) -] - -{ #category : #'public - translating' } -RTLayoutTranslator >> translateBottomLeftOf: element to: newPosition [ - "Translate the bottom left corner of the element" - - self translate: element to: newPosition direction: 1 @ -1. -] - -{ #category : #'public - translating' } -RTLayoutTranslator >> translateBottomOf: element to: newPosition [ - "Translate the bottom side of the element" - - self translate: element to: element position x @ newPosition direction: 0 @ -1 -] - -{ #category : #'public - translating' } -RTLayoutTranslator >> translateBottomRightOf: element to: newPosition [ - "Translate the bottom right corner of the element" - - self translate: element to: newPosition direction: -1 @ -1 -] - -{ #category : #'public - translating' } -RTLayoutTranslator >> translateCenterLeftOf: element to: newPosition [ - "Translate the left center of the element to newPosition" - - self translate: element to: newPosition direction: 1 @ 0 -] - -{ #category : #'public - translating' } -RTLayoutTranslator >> translateLeftOf: element to: newPosition [ - "Translate the left side of the element" - - self translate: element to: newPosition @ element position y direction: 1 @ 0. -] - -{ #category : #'public - translating' } -RTLayoutTranslator >> translateRightOf: element to: newPosition [ - "Translate the right side of the element" - - self translate: element to: newPosition @ element position y direction: -1 @ 0. -] - -{ #category : #'public - translating' } -RTLayoutTranslator >> translateTopLeftOf: element to: newPosition [ - "Translate the top right corner of the element" - - self translate: element to: newPosition direction: 1 @ 1 -] - -{ #category : #'public - translating' } -RTLayoutTranslator >> translateTopOf: element to: newPosition [ - "Translate the top side of the element" - - self translate: element to: element position x @ newPosition direction: 0 @ 1. -] - -{ #category : #'public - translating' } -RTLayoutTranslator >> translateTopRightOf: element to: newPosition [ - "Translate the top right corner of the element" - - self translate: element to: newPosition direction: -1 @ 1 -] - -{ #category : #accessing } -RTLayoutTranslator >> view [ - ^ view -] - -{ #category : #accessing } -RTLayoutTranslator >> view: aView [ - view := aView -] diff --git a/src/Roassal2/RTLayoutTranslatorTest.class.st b/src/Roassal2/RTLayoutTranslatorTest.class.st deleted file mode 100644 index 7f066b1f8..000000000 --- a/src/Roassal2/RTLayoutTranslatorTest.class.st +++ /dev/null @@ -1,18 +0,0 @@ -Class { - #name : #RTLayoutTranslatorTest, - #superclass : #RTTest, - #category : #'Roassal2-Layouts-Tests' -} - -{ #category : #tests } -RTLayoutTranslatorTest >> testDefault [ - - RTLayoutTranslator allSubclasses detect: #isDefault. - RTLayoutTranslator allSubclasses reverse detect: #isDefault. -] - -{ #category : #tests } -RTLayoutTranslatorTest >> testIsDefault [ - - self deny: RTLayoutTranslator isDefault -] diff --git a/src/Roassal2/RTLazyInteraction.class.st b/src/Roassal2/RTLazyInteraction.class.st deleted file mode 100644 index ef891e210..000000000 --- a/src/Roassal2/RTLazyInteraction.class.st +++ /dev/null @@ -1,23 +0,0 @@ -" -I am an abstract interaction that postpones the element initialization until it is already connected to the view. -" -Class { - #name : #RTLazyInteraction, - #superclass : #RTInteraction, - #category : #'Roassal2-Interactions' -} - -{ #category : #hooks } -RTLazyInteraction >> initializeElement: anElement [ - "postpone initialization if the element is not yet added to the view" - - anElement view - ifNil: [ anElement - addCallback: (TRAddedCallback block: [ :evt | self lazyInitializeElement: anElement ]) ] - ifNotNil: [ self lazyInitializeElement: anElement ] -] - -{ #category : #initialization } -RTLazyInteraction >> lazyInitializeElement: anElement [ - self subclassResponsibility -] diff --git a/src/Roassal2/RTLazyMetricNormalizer.class.st b/src/Roassal2/RTLazyMetricNormalizer.class.st deleted file mode 100644 index d131fa6b7..000000000 --- a/src/Roassal2/RTLazyMetricNormalizer.class.st +++ /dev/null @@ -1,41 +0,0 @@ -Class { - #name : #RTLazyMetricNormalizer, - #superclass : #RTObject, - #instVars : [ - 'messages', - 'realNormalizer' - ], - #category : #'Roassal2-ColorNormalizer' -} - -{ #category : #building } -RTLazyMetricNormalizer >> build [ - messages do: [ :m | m sendTo: realNormalizer ]. -] - -{ #category : #'reflective operations' } -RTLazyMetricNormalizer >> doesNotUnderstand: message [ - messages add: message -] - -{ #category : #accessing } -RTLazyMetricNormalizer >> elements: someElements [ - realNormalizer elements: someElements -] - -{ #category : #initialization } -RTLazyMetricNormalizer >> initialize [ - super initialize. - realNormalizer := RTMetricNormalizer new. - self resetMessages -] - -{ #category : #metrics } -RTLazyMetricNormalizer >> numberOfReceivedMessages [ - ^ messages size -] - -{ #category : #actions } -RTLazyMetricNormalizer >> resetMessages [ - messages := OrderedCollection new -] diff --git a/src/Roassal2/RTLazyMetricNormalizerTest.class.st b/src/Roassal2/RTLazyMetricNormalizerTest.class.st deleted file mode 100644 index 32e744122..000000000 --- a/src/Roassal2/RTLazyMetricNormalizerTest.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #RTLazyMetricNormalizerTest, - #superclass : #RTTest, - #instVars : [ - 'n' - ], - #category : #'Roassal2-ColorNormalizer-Tests' -} - -{ #category : #running } -RTLazyMetricNormalizerTest >> setUp [ - super setUp. - n := RTLazyMetricNormalizer new. -] - -{ #category : #tests } -RTLazyMetricNormalizerTest >> testBasic [ - n foo. - n bar. - self assert: n numberOfReceivedMessages equals: 2. - - n resetMessages. - self assert: n numberOfReceivedMessages equals: 0. -] - -{ #category : #tests } -RTLazyMetricNormalizerTest >> testBasic02 [ - | es | - es := RTBox elementsOn: (1 to: 5). - n elements: es. - n normalizeSize: #yourself. - - self assert: es last trachelShape extent equals: 5 @ 5. - - n build. - self assert: es last trachelShape extent equals: 30 @ 30. -] - -{ #category : #tests } -RTLazyMetricNormalizerTest >> testBasic03ReuseOfMetrics [ - | es es2 | - es := RTBox elementsOn: (1 to: 5). - n elements: es. - n normalizeSize: #yourself. - n build. - - es2 := RTBox elementsOn: (1 to: 5). - n elements: es2. - n build. - - self assert: es2 last trachelShape extent equals: 30 @ 30. -] - -{ #category : #tests } -RTLazyMetricNormalizerTest >> testDefault [ - - self assert: n numberOfReceivedMessages equals: 0. - n build. -] diff --git a/src/Roassal2/RTLegendBuilder.class.st b/src/Roassal2/RTLegendBuilder.class.st deleted file mode 100644 index 644bf7a67..000000000 --- a/src/Roassal2/RTLegendBuilder.class.st +++ /dev/null @@ -1,348 +0,0 @@ -" -I am an handy class to build legend in a visualization - --=-=-=-=-=-=-=-= -b := RTMondrian new. -b shape rectangle - width: [ :c | c numberOfVariables * 5 ]; - height: #numberOfMethods. -b nodes: RTShape withAllSubclasses. -b edges connectFrom: #superclass. -b layout tree. -b build. - -lb := RTLegendBuilder new. -lb view: b view. -lb addRectanglePolymetricWidth: 'number of methods' height: 'Line of code'. -lb build. - -b --=-=-=-=-=-=-=-= - -" -Class { - #name : #RTLegendBuilder, - #superclass : #RTBuilder, - #instVars : [ - 'items', - 'group', - 'legendElement', - 'offset', - 'position', - 'isOnDemand', - 'textSize', - 'gapSize', - 'isFixed', - 'onDemandText', - 'boxShape', - 'nestBlock' - ], - #category : #'Roassal2-Builder-Legend' -} - -{ #category : #'instance creation' } -RTLegendBuilder class >> on: aView [ - | i | - i := self new. - i view: aView. - ^ i. -] - -{ #category : #'public - convenient' } -RTLegendBuilder >> addColor: aColor object: anObject text: aBlockOrSelector [ - "Associate a color with a text" - items add: (RTColorLegendItem new color: aColor; model: anObject; text: aBlockOrSelector; - textSize: self textSize) -] - -{ #category : #'public - convenient' } -RTLegendBuilder >> addColor: aColor text: aText [ - "Associate a color with a text" - ^ self addColor: aColor object: aText text: #yourself -] - -{ #category : #'public - convenient' } -RTLegendBuilder >> addColorFadingFrom: startColor to: endColor text: textualDescription [ - "Add a fading between startColor and endColor. A textualDescription is provided" - self addColorFadingUsing: (Array with: startColor with: endColor) text: textualDescription -] - -{ #category : #'public - convenient' } -RTLegendBuilder >> addColorFadingUsing: colors text: textualDescription [ - "Specify a description of a fading using a provided set of colors" - items - add: - (RTColorFadingLegendItem new - colors: colors; - description: textualDescription) -] - -{ #category : #'public - convenient' } -RTLegendBuilder >> addColoredObject: anObject text: aTextOrSymbolOrBlock color: aColor [ - items add: (RTLabelLegendItem new model: anObject; text: aTextOrSymbolOrBlock; color: aColor; textSize: self textSize) -] - -{ #category : #'public - convenient' } -RTLegendBuilder >> addColoredText: aText color: aColor [ - ^ self addColoredObject: nil text: aText color: aColor - -] - -{ #category : #'public - convenient' } -RTLegendBuilder >> addLineColor: aColor text: aText [ - "Associate a color with a text" - items add: (RTLineLegendItem new color: aColor; text: aText; textSize: self textSize) -] - -{ #category : #'public - convenient' } -RTLegendBuilder >> addObject: anObject text: aTextOrASymbolOrBlock [ - ^ self addColoredObject: anObject text: aTextOrASymbolOrBlock color: Color lightGray -] - -{ #category : #'public - convenient' } -RTLegendBuilder >> addRectanglePolymetricWidth: widthDescription height: heightDescription box: boxDescription [ - "Associate a color with a text" - - items add: (RTPolymorphicBoxLegendItem new - widthDescription: widthDescription; - heightDescription: heightDescription; - boxDescription: boxDescription; - textSize: self textSize) -] - -{ #category : #'public - convenient' } -RTLegendBuilder >> addText: aText [ - "Add a text to the legend, simply" - self addColoredText: aText color: self textColor -] - -{ #category : #hooks } -RTLegendBuilder >> backgroundBoxElement [ - | e | - e := self backgroundShape elementOn: nil. - self interaction setUpElement: e. - ^ e -] - -{ #category : #accessing } -RTLegendBuilder >> backgroundShape [ - ^ boxShape -] - -{ #category : #configuration } -RTLegendBuilder >> backgroundTransparencyOnDemand [ - ^ 0.9 -] - -{ #category : #'public - positioning' } -RTLegendBuilder >> below [ - self positionDo: [ :p | - p - outer; - verticalPadding: offset; - bottom; - center; - move. - ]. -] - -{ #category : #initialization } -RTLegendBuilder >> defaultOffset [ - ^ 20 -] - -{ #category : #accessing } -RTLegendBuilder >> gapSize [ - ^ gapSize -] - -{ #category : #accessing } -RTLegendBuilder >> gapSize: aNumber [ - gapSize := aNumber -] - -{ #category : #accessing } -RTLegendBuilder >> group [ - "Return all the elements" - | myGroup | - myGroup := RTGroup new. - items do: [ :item | myGroup add: item execute ]. - RTVerticalLineLayout new - gapSize: gapSize; - on: myGroup. - ^ myGroup -] - -{ #category : #initialization } -RTLegendBuilder >> initialize [ - super initialize. - "Thisi group variable should be removed" - group := RTGroup new. - - offset := self defaultOffset. - self below. - self nestDo: [ :n :e :g | n on: e nest: g ]. - self interaction draggable. - isOnDemand := false. - textSize := 12. - gapSize := 10. - items := OrderedCollection new. - boxShape := RTShapeBuilder new. - boxShape box; - borderColor: Color lightGray; - fillColor: Color transparent. - isFixed := false -] - -{ #category : #'public - positioning' } -RTLegendBuilder >> left [ - self positionDo: [ :p | - p - outer; - left; - horizontalPadding: offset; - middle; - move. - ]. -] - -{ #category : #accessing } -RTLegendBuilder >> legendElement [ - ^ legendElement -] - -{ #category : #'public - positioning' } -RTLegendBuilder >> nestDo: aBlockThreeArg [ - "read documentation of RTNest to position elements in the legend" - nestBlock := aBlockThreeArg -] - -{ #category : #'private - utility' } -RTLegendBuilder >> newLabelShape: widthDescription [ - "Return a new label with the argument as the content of the label" - ^ RTLabel new color: self textColor; text: widthDescription; yourself -] - -{ #category : #initialization } -RTLegendBuilder >> offset [ - ^ offset -] - -{ #category : #initialization } -RTLegendBuilder >> offset: aDistanceInPixel [ - offset := aDistanceInPixel -] - -{ #category : #accessing } -RTLegendBuilder >> onDemand [ - "Make the legend appear if the user move the mouse on a particular icon in the visualization" - isOnDemand := true. - onDemandText := '?'. -] - -{ #category : #accessing } -RTLegendBuilder >> onDemand: text [ - self onDemand. - onDemandText := text -] - -{ #category : #'public - positioning' } -RTLegendBuilder >> positionDo: aBlockOneArg [ - position := aBlockOneArg -] - -{ #category : #hooks } -RTLegendBuilder >> renderIn: aView [ - | myGroup elementsInTheViewWithoutTheLegend | - super renderIn: aView. - isOnDemand - ifTrue: [ ^ self renderOnDemandIn: aView ]. - elementsInTheViewWithoutTheLegend := aView elements. - myGroup := self group. - legendElement := self backgroundBoxElement. - aView add: legendElement. - myGroup do: [ :g | aView addAll: g ]. - nestBlock value: RTNest new value: legendElement value: myGroup. - - position value: (RTConstraint - movable: legendElement - fix: (RTGroup withAll: elementsInTheViewWithoutTheLegend)). - - isFixed - ifTrue: [ | els | - els := aView elements - copyWithoutAll: elementsInTheViewWithoutTheLegend. - - "We need to consider the edges as well" - els := els, (els flatCollect: #outgoingEdges). - els do: [ :e | e trachelShape setAsFixed ]. - TRConstraint - stickAtTheBottomOfTheWindow: legendElement trachelShape ] -] - -{ #category : #hooks } -RTLegendBuilder >> renderOnDemandIn: aView [ - | label myGroup | - super renderIn: aView. - RTVerticalLineLayout on: group. - label := (RTLabel new color: Color red) elementOn: onDemandText. - label setAsFixed. - label @ RTHighlightable. - aView add: label. - label translateTo: label extent / 2. - label - @ - (RTPopup new - alphaPopupBackground: self backgroundTransparencyOnDemand; - background: Color white - group: [ :gg :el | - myGroup := self group. - gg addAll: (myGroup flatCollect: #yourself) ]) -] - -{ #category : #'public - positioning' } -RTLegendBuilder >> right [ - self positionDo: [ :p | - p - outer; - right; - middle; - horizontalPadding: offset; - move. - ]. -] - -{ #category : #configuration } -RTLegendBuilder >> setAsFixed [ - - "The legend is fixed, therefore not subject to the camera movement. - This is handy if the visualization is very large (ie. if not fixed, then the legend may appear very small" - isFixed := true -] - -{ #category : #configuration } -RTLegendBuilder >> textColor [ - ^ Color lightGray -] - -{ #category : #accessing } -RTLegendBuilder >> textSize [ - ^ textSize -] - -{ #category : #accessing } -RTLegendBuilder >> textSize: aSizeAsInteger [ - textSize := aSizeAsInteger -] - -{ #category : #'public - positioning' } -RTLegendBuilder >> top [ - self positionDo: [ :p | - p - outer; - verticalPadding: offset; - top; - center; - move. - ]. -] diff --git a/src/Roassal2/RTLegendBuilderExample.class.st b/src/Roassal2/RTLegendBuilderExample.class.st deleted file mode 100644 index 5e6862f6c..000000000 --- a/src/Roassal2/RTLegendBuilderExample.class.st +++ /dev/null @@ -1,244 +0,0 @@ -" -RTLegendBuilderExample new installTitle: 'OnDemand' - code: - ' -| l lb | -b := RTMondrian new. -b shape rectangle - width: [ :c | c numberOfVariables * 5 ]; - height: #numberOfMethods. -b nodes: RTShape withAllSubclasses. -b edges connectFrom: #superclass. -b layout tree. -b normalizer - normalizeColor: #numberOfLinesOfCode using: { Color black. Color red }. -b build. - -lb := RTLegendBuilder new. -lb onDemand. -lb view: b view. - -lb addText: ''System complexity view''. -lb addRectanglePolymetricWidth: ''number of methods'' height: ''Line of code'' box: ''a Pharo class''. -lb build. - -^ b view' - -" -Class { - #name : #RTLegendBuilderExample, - #superclass : #RTAbstractExample, - #category : #'Roassal2-Builder-Legend' -} - -{ #category : #sources } -RTLegendBuilderExample >> exampleBackgroundNPosition [ - - | lb b | - b := RTMondrian new. - b shape rectangle - width: [ :c | c numberOfVariables * 5 ]; - height: #numberOfMethods. - b nodes: RTShape withAllSubclasses. - b edges connectFrom: #superclass. - b layout tree. - b normalizer - normalizeColor: #numberOfLinesOfCode using: (Array with: Color black with: Color red ) using: [:vv | (vv + 1) ln * 5 ] . - b build. - - lb := RTLegendBuilder new. - lb view: b view. - lb right. - lb nestDo: [ :n :e :g | - n padding:10. - n on: e nest: g. - n resizeWithoutRecursion: e for: g ]. - lb backgroundShape box; - borderColor: Color red; - color: Color transparent; - borderWidth: 2. - lb backgroundShape shape borderStyle dash. - lb addText: 'System complexity view'. - lb addRectanglePolymetricWidth: 'number of methods' height: 'Line of code' box: 'a Pharo class'. - lb addColorFadingFrom: Color black to: Color red text: 'number of lines of code'. - lb build. - - ^ b view -] - -{ #category : #icons } -RTLegendBuilderExample >> exampleBackgroundNPositionIcon [ - ^ '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 -AElFTkSuQmCC' -] - -{ #category : #sources } -RTLegendBuilderExample >> exampleBelow [ - - | lb b | - b := RTMondrian new. - b shape rectangle - width: [ :c | c numberOfVariables * 5 ]; - height: #numberOfMethods. - b nodes: RTShape withAllSubclasses. - b edges connectFrom: #superclass. - b layout tree. - b normalizer - normalizeColor: #numberOfLinesOfCode using: (Array with: Color black with: Color red ) using: [:vv | (vv + 1) ln * 5 ] . - b build. - - lb := RTLegendBuilder new. - lb view: b view. - - lb addText: 'System complexity view'. - lb addRectanglePolymetricWidth: 'number of methods' height: 'Line of code' box: 'a Pharo class'. - lb addColorFadingFrom: Color black to: Color red text: 'number of lines of code'. - lb build. - - ^ b view -] - -{ #category : #icons } -RTLegendBuilderExample >> exampleBelowIcon [ - ^ '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 -6Bcj/wHPMRRbfIEHkQAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTLegendBuilderExample >> exampleOnDemand [ - - | lb b | - b := RTMondrian new. - b shape rectangle - width: [ :c | c numberOfVariables * 5 ]; - height: #numberOfMethods. - b nodes: RTShape withAllSubclasses. - b edges connectFrom: #superclass. - b layout tree. - b normalizer - normalizeColor: #numberOfLinesOfCode using: (Array with: Color black with: Color red). - b build. - - lb := RTLegendBuilder new. - lb onDemand: '+Info'. - lb view: b view. - - lb addText: 'System complexity view'. - lb addRectanglePolymetricWidth: 'number of methods' height: 'Line of code' box: 'a Pharo class'. - lb build. - - ^ b view -] - -{ #category : #icons } -RTLegendBuilderExample >> exampleOnDemandIcon [ - ^ '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' -] - -{ #category : #accessing } -RTLegendBuilderExample >> label [ - ^ 'Legend' -] diff --git a/src/Roassal2/RTLegendBuilderTest.class.st b/src/Roassal2/RTLegendBuilderTest.class.st deleted file mode 100644 index b878f3521..000000000 --- a/src/Roassal2/RTLegendBuilderTest.class.st +++ /dev/null @@ -1,207 +0,0 @@ -Class { - #name : #RTLegendBuilderTest, - #superclass : #RTTest, - #instVars : [ - 'b' - ], - #category : #'Roassal2-Builder-Legend' -} - -{ #category : #running } -RTLegendBuilderTest >> setUp [ - super setUp. - b := RTLegendBuilder new. - b addText: 'Hapao show the coverage on which you have run it'. - b addText: 'Big box = classes. Green classes are unit tests'. - b addText: 'Inner box = method'. - b addText: 'height = number of lines of code of '. - b addText: 'width = number of methods that call it'. - b addText: 'edge = static call between methods. Above calls below'. - b addColor: Color black text: 'Method well tested'. - b addColor: Color gray text: 'Method tested'. - b addColor: Color red text: 'Method not tested'. - b build -] - -{ #category : #tests } -RTLegendBuilderTest >> testAddObjectText [ - - | lb | - lb := RTLegendBuilder new. - lb addObject: 'hello world' text: [ :str | str substrings first ]. - lb build. - - self assert: lb view numberOfElements equals: 2. - self assert: lb view elements second model equals: 'hello world'. - self assert: (lb view elements second shape textFor: lb view elements second) equals: 'hello'. -] - -{ #category : #tests } -RTLegendBuilderTest >> testBelow [ - - | view element lb | - view := RTView new. - element := (RTEllipse new size: 30) element. - view add: element. - - lb := RTLegendBuilder new. - lb view: view. - lb below. - lb addText: 'Hello world'. - lb build. - - self assert: view numberOfElements equals: 3. - self assert: view elements first shape class == RTEllipse. - self assert: view elements third shape class == RTLabel. - self assert: view elements first position y < view elements third position y. -] - -{ #category : #tests } -RTLegendBuilderTest >> testColorNotNil [ - - self should: [ RTColorLegendItem new color: nil ] raise: Error. - self shouldnt: [ RTColorLegendItem new color: Color red ] raise: Error -] - -{ #category : #tests } -RTLegendBuilderTest >> testEdgesWhenOnDemand [ - - | v lb lbl allElements edges | - v := RTView new. - v @ RTDraggableView. - - lb := RTLegendBuilder new. - lb view: v. - lb onDemand. - - lb addRectanglePolymetricWidth: 'number of methods' height: 'Line of code' box: 'a Pharo class'. - - lb build. - - self assert: v canvas fixedShapes size equals: 1. - - lbl := v canvas fixedShapes first. - allElements := lb group flatCollect: #yourself. - edges := allElements select: [ :e | e class == RTEdge ]. - self assert: edges size equals: 2. - self assert: (allElements includes: edges first from). - self assert: (allElements includes: edges first to). -] - -{ #category : #tests } -RTLegendBuilderTest >> testLayout [ - - | firstInnerElement secondInnerElement | - firstInnerElement := b view elements second. - secondInnerElement := b view elements third. - "First element is above second element" - self assert: firstInnerElement position y < secondInnerElement position y -] - -{ #category : #tests } -RTLegendBuilderTest >> testLegendElement [ - - | lb | - lb := RTLegendBuilder new. - lb addLineColor: Color red text: 'Meaning of this great red line'. - lb build. - - self assert: lb view elements first equals: lb legendElement - -] - -{ #category : #tests } -RTLegendBuilderTest >> testNumberOfElements [ - - self assert: b view numberOfElements equals: 13 -] - -{ #category : #tests } -RTLegendBuilderTest >> testPolymorphicViewArrows [ - - - | lb view canvas | - lb := RTLegendBuilder new. - lb setAsFixed. - lb addText: 'System complexity view'. - lb addRectanglePolymetricWidth: 'number of methods' height: 'Line of code' box: 'a Pharo class'. - lb addColorFadingFrom: Color black to: Color red text: 'number of lines of code'. - lb build. - - view := lb view. - self assert: (view elements select: [ :el | el trachelShape isNotFixed ]) isEmpty. - self assert: (view edges select: [ :el | el trachelShape isNotFixed ]) isEmpty. - - canvas := view canvas. - self assert: canvas numberOfShapes equals: 0 -] - -{ #category : #tests } -RTLegendBuilderTest >> testRight [ - - | view element lb | - view := RTView new. - element := (RTEllipse new size: 30) element. - view add: element. - - lb := RTLegendBuilder new. - lb view: view. - lb right. - lb addText: 'Hello world'. - lb build. - - self assert: view numberOfElements equals: 3. - self assert: view elements first shape class == RTEllipse. - self assert: view elements third shape class == RTLabel. - self assert: view elements first position x < view elements third position x. -] - -{ #category : #tests } -RTLegendBuilderTest >> testaddColorFading [ - - | lb | - lb := RTLegendBuilder new. - lb addColorFadingFrom: Color green to: Color black text: 'this is a test'. - lb build. - - self assert: lb view numberOfElements equals: 52. - -] - -{ #category : #tests } -RTLegendBuilderTest >> testaddColorFading02 [ - - | lb | - lb := RTLegendBuilder new. - lb addColorFadingUsing: RTPalette c1 text: 'this is a test'. - lb build. - - self assert: lb view numberOfElements equals: 52. - -] - -{ #category : #tests } -RTLegendBuilderTest >> testaddColoredtext [ - - | lb | - lb := RTLegendBuilder new. - lb addColoredText: 'hello' color: Color red. - lb build. - - self assert: lb view numberOfElements equals: 2. - self assert: lb view canvas shapes first class equals: TRBoxShape. - self assert: lb view canvas shapes second class equals: TRLabelShape. - self assert: lb view canvas shapes second color equals: Color red. -] - -{ #category : #tests } -RTLegendBuilderTest >> testaddLineColortext [ - - | lb | - lb := RTLegendBuilder new. - lb addLineColor: Color red text: 'Meaning of this great red line'. - lb build. - - self assert: lb view numberOfElements equals: 3. - -] diff --git a/src/Roassal2/RTLegendItem.class.st b/src/Roassal2/RTLegendItem.class.st deleted file mode 100644 index 65f4e4ea9..000000000 --- a/src/Roassal2/RTLegendItem.class.st +++ /dev/null @@ -1,40 +0,0 @@ -Class { - #name : #RTLegendItem, - #superclass : #RTObject, - #instVars : [ - 'textSize' - ], - #category : #'Roassal2-Builder-Legend' -} - -{ #category : #hooks } -RTLegendItem >> execute [ - self subclassResponsibility -] - -{ #category : #initialization } -RTLegendItem >> initialize [ - super initialize. - self textSize: TRLabelShape defaultFontSize. -] - -{ #category : #utility } -RTLegendItem >> newLabelShape: widthDescription [ - "Return a new label with the argument as the content of the label" - ^ RTLabel new color: self textColor; text: widthDescription; height: textSize; yourself -] - -{ #category : #utility } -RTLegendItem >> textColor [ - ^ Color lightGray -] - -{ #category : #accessing } -RTLegendItem >> textSize [ - ^ textSize -] - -{ #category : #accessing } -RTLegendItem >> textSize: anObject [ - textSize := anObject -] diff --git a/src/Roassal2/RTLine.class.st b/src/Roassal2/RTLine.class.st deleted file mode 100644 index 0502f31b1..000000000 --- a/src/Roassal2/RTLine.class.st +++ /dev/null @@ -1,73 +0,0 @@ -" -RTLine describes a line between two elements. --=-=-=-=-=-=-=-=-=-=-=-= -v := RTView new. - -s := RTEllipse new color: (Color red alpha: 0.4); size: 30. -e1 := s elementOn: 'Begin'. -e2 := s elementOn: 'End'. -edge := RTLine edgeFrom: e1 to: e2. - -v add: e1; add: e2; add: edge. - -e1 @ RTDraggable. -e2 @ RTDraggable. - -e2 translateBy: 80 @ 50. - -v --=-=-=-=-=-=-=-=-=-=-=-= - -Using an attach point: --=-=-=-=-=-=-=-=-=-=-=-= -v := RTView new. - -s := RTEllipse new color: (Color red alpha: 0.4); size: 30. -e1 := s elementOn: 'Begin'. -e2 := s elementOn: 'End'. - -lineShape := RTLine new. -lineShape attachPoint: (RTShorterDistanceAttachPoint instance). -edge := lineShape edgeFrom: e1 to: e2. - -v add: e1; add: e2; add: edge. - -e1 @ RTDraggable. -e2 @ RTDraggable. - -e2 translateBy: 80 @ 50. - -v --=-=-=-=-=-=-=-=-=-=-=-= - -Slightly more sophisticated example: --=-=--=-=-=--=-=-=--= - | view elements | - view := RTView new. - elements := RTBox elementsOn: (1 to: 100). - elements @ RTDraggable. - view addAll: elements. - RTEdge - buildEdgesFromObjects: (1 to: 100) - from: [ :v | v // 2 ] to: #yourself - using: (RTLine new color: Color purple) inView: view. - RTTreeLayout on: view elements edges: view edges. - - view edges do: [ :e | e trachelShape pushBack ]. - - view @ RTDraggableView. - - ^ view --=-=--=-=-=--=-=-=--= -" -Class { - #name : #RTLine, - #superclass : #RTAbstractLine, - #category : #'Roassal2-Shapes' -} - -{ #category : #hooks } -RTLine >> trachelShapeClass [ - ^ TRLineShape - -] diff --git a/src/Roassal2/RTLineDecoration.class.st b/src/Roassal2/RTLineDecoration.class.st deleted file mode 100644 index 74a7c73f7..000000000 --- a/src/Roassal2/RTLineDecoration.class.st +++ /dev/null @@ -1,144 +0,0 @@ -" -A RTLineDecoration is a shape decoration, intended to be combined with a line. -" -Class { - #name : #RTLineDecoration, - #superclass : #RTShape, - #instVars : [ - 'width', - 'size', - 'attachPoint', - 'line', - 'baseSize', - 'percentage' - ], - #category : #'Roassal2-LineDecorations' -} - -{ #category : #accessing } -RTLineDecoration >> attachPoint [ - ^ attachPoint -] - -{ #category : #accessing } -RTLineDecoration >> attachPoint: anObject [ - attachPoint := anObject -] - -{ #category : #accessing } -RTLineDecoration >> baseSize: aNumberOrBlockOrIdentifier [ - baseSize := [ :e | aNumberOrBlockOrIdentifier rtValue: e]. - -] - -{ #category : #configuration } -RTLineDecoration >> defaultBaseSize [ - "Set the size of the base size of the line head decoration" - ^ 10 -] - -{ #category : #initialization } -RTLineDecoration >> initialize [ - super initialize. - attachPoint := RTCenteredAttachPoint new. - baseSize := self defaultBaseSize. - self percentage: 1. -] - -{ #category : #accessing } -RTLineDecoration >> line: aRTLine [ - line := aRTLine -] - -{ #category : #accessing } -RTLineDecoration >> mid [ - self percentage: 0.5. -] - -{ #category : #accessing } -RTLineDecoration >> mySize [ - ^size -] - -{ #category : #accessing } -RTLineDecoration >> percentage: aNumberOrBlockOrIdentifier [ - percentage := [ :e | aNumberOrBlockOrIdentifier rtValue: e ]. - -] - -{ #category : #hooks } -RTLineDecoration >> percentageFor: anElement [ - ^ percentage rtValue: anElement -] - -{ #category : #accessing } -RTLineDecoration >> size: aNumberOrBlockOrIdentifier [ - size := [ :e | aNumberOrBlockOrIdentifier rtValue: e ]. - -] - -{ #category : #hooks } -RTLineDecoration >> trachelShapeClass [ - ^ TRAbstractLineDecoratorShape -] - -{ #category : #public } -RTLineDecoration >> trachelShapeFor: anEdge [ - | f shape | - f := attachPoint startingPointOf: anEdge. - anEdge shape class = RTArcLine & (attachPoint class = RTBorderAttachPoint) - ifTrue: - [ f := attachPoint - attachPointFor: anEdge - from: (anEdge to encompassingRectangle expandBy: 1) - to: anEdge to encompassingRectangle ]. - line ~= nil - ifTrue: - [ | tShape | - tShape := line trachelShapeFor: anEdge. - (tShape class = TRBezierShape or: [ tShape class = TRBezier3Shape ]) - ifTrue: [ f := tShape points allButLast last ] ]. - shape := self trachelShapeClass - from: f - to: (attachPoint endingPointOf: anEdge) - width: (self widthFor: anEdge) - size: (self mySize rtValue: anEdge) - color: (self colorFor: anEdge) - stroke: (self colorFor: anEdge). - shape - baseSize: (baseSize rtValue: anEdge); - percentage: (self percentageFor: anEdge). - ^ shape -] - -{ #category : #hooks } -RTLineDecoration >> updateFor: edge trachelShape: trachelShape [ - | f | - f := attachPoint startingPointOf: edge. - (edge shape class = RTArcLine and: [ attachPoint class = RTBorderAttachPoint ]) - ifTrue: - [ f := attachPoint - attachPointFor: edge - from: (edge to encompassingRectangle expandBy: 1) - to: edge to encompassingRectangle ]. - line ~= nil ifTrue: [ | tShape | - tShape := edge trachelShape shapes first. - (tShape class = TRBezierShape or: [ tShape class = TRBezier3Shape ]) - ifTrue: [ f := tShape points at: tShape points size - 1 ] ]. - trachelShape from: f. - trachelShape to: (attachPoint endingPointOf: edge). - trachelShape color: (self colorFor: edge). - trachelShape width: (self widthFor: edge). - trachelShape percentage: (self percentageFor: edge). - trachelShape resetPath. -] - -{ #category : #accessing } -RTLineDecoration >> width: aBlockOrValue [ - width := aBlockOrValue -] - -{ #category : #hooks } -RTLineDecoration >> widthFor: anElement [ - ^ width rtValue: anElement -] diff --git a/src/Roassal2/RTLineDecorationExample.class.st b/src/Roassal2/RTLineDecorationExample.class.st deleted file mode 100644 index 402ec8d4c..000000000 --- a/src/Roassal2/RTLineDecorationExample.class.st +++ /dev/null @@ -1,196 +0,0 @@ -" -RTLineDecorationExample new installTitle: 'Cool' - code: - ' - | v b1 b2 edges | - b1 := (RTBox new - size: 100; - element) - translateTo: 0 @ 0; - @ RTDraggable. - b2 := (RTBox new - size: 100; - element) - translateTo: 400 @ 0; - @ RTDraggable. - edges := OrderedCollection new. - edges add: ((RTArrowedLine new head: RTFilledDiamond asHead; color: Color black; width: 2; attachPoint: (RTRectangleAttachPoint new offset: 15)) edgeFrom: b1 to: b2). - edges add: ((RTDecoratedLine new color: Color blue; width: 2; attachPoint: (RTRectangleAttachPoint new offset: 15)) edgeFrom: b1 to: b2). - edges add: ((RTDecoratedLine new filledDiamondHead; color: Color green; width: 2; attachPoint: (RTRectangleAttachPoint new offset: 15)) edgeFrom: b1 to: b2). - edges add: ((RTDecoratedLine new filledDiamondHead; emptyCircleTail; color: Color red; width: 2; attachPoint: (RTRectangleAttachPoint new offset: 15)) edgeFrom: b1 to: b2). - - -v := RTView new - add: b1; - add: b2; - addAll: edges. -edges do: [ :each | each update ]. -v -' - -" -Class { - #name : #RTLineDecorationExample, - #superclass : #RTAbstractExample, - #category : #'Roassal2-ExampleBrowser' -} - -{ #category : #sources } -RTLineDecorationExample >> exampleCool [ - - | v b1 b2 edges | - b1 := (RTBox new - size: 100; - element) - translateTo: 0 @ 0; - @ RTDraggable. - b2 := (RTBox new - size: 100; - element) - translateTo: 400 @ 0; - @ RTDraggable. - edges := OrderedCollection new. - edges add: ((RTArrowedLine new head: RTFilledDiamond asHead; color: Color black; width: 2; attachPoint: (RTBorderAttachPoint new offset: 15)) edgeFrom: b1 to: b2). - edges add: ((RTDecoratedLine new color: Color blue; width: 2; attachPoint: (RTBorderAttachPoint new offset: 15)) edgeFrom: b1 to: b2). - edges add: ((RTDecoratedLine new filledDiamondHead; color: Color green; width: 2; attachPoint: (RTBorderAttachPoint new offset: 15)) edgeFrom: b1 to: b2). - edges add: ((RTDecoratedLine new filledDiamondHead; emptyCircleTail; color: Color red; width: 2; attachPoint: (RTBorderAttachPoint new offset: 15)) edgeFrom: b1 to: b2). - - -v := RTView new - add: b1; - add: b2; - addAll: edges. -edges do: [ :each | each update ]. -^ v - -] - -{ #category : #icons } -RTLineDecorationExample >> exampleCoolIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAByElEQVR4XuXau43CQBSGURdC -BdCZG4BgBSEZJUACvZgCCHmInBL4vQObbbDBConB5xtNAz72cEei6Xu/mmr8R+CD+PkgPoif -D+KD+PkgPoifD+KD+Pkgfj6ID+Lng/ggfj6ID+Lng/ggfj6Inw/ig/j5ID6Inw/ig/j5ID6I -nw/i54P4IH4+iA/i54P4IH4+iA/i54P4+SCVg5zP5/6VW+t0OuWVz88H8UGG0e12iw9SQdfr -NaPRKE3T9Ov1OtWDLJfLDHm3bfvEeOzJZJLD4eB/Ie9uv99nNpv5R5b/o/6PvVj01D4e/S+k -jikr/pRVx5SVMmWV1ZS1Kav+I2vgq02ZsvqfNc44h4s/Zb29Ll2+bu1nHFlZrZLdLrnfM0SM -lIthuRmmXEaSzQccWdlunxCZzzPEsarcDFNuhf1jZzzOpfaL4ePLeLxFQz6y0nXJdOpPWf7F -0AfxQXwQH8QH8UH+AMmL00Be/fz8f51Ulg/ig/j5ID6Inw/ig/j5ID6Inw/ig/j5IH4+iA/i -54P4IH4+iA/i54P4IH4+iJ8P4oP4+SA+iJ8P4oP4+SA+iJ8P4ueD+CB+PogP4ueD+CB+PogP -4ueD+P3uG69wVbQ1PZxEAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTLineDecorationExample >> exampleCoolWithJump [ - | v b1 b2 edges | - b1 := (RTBox new - size: 150; - element) - translateTo: 0 @ 0; - @ RTDraggable. - b2 := (RTBox new - size: 150; - element) - translateTo: 400 @ 0; - @ RTDraggable. - edges := OrderedCollection new. - edges add: ((RTArrowedLine new head: RTFilledDiamond asHead; color: Color black; width: 2; attachPoint: (RTShorterDistanceWithOffsetAttachPoint new offset: 15)) edgeFrom: b1 to: b2). - edges add: ((RTDecoratedLine new color: Color blue; width: 2; attachPoint: (RTShorterDistanceWithOffsetAttachPoint new offset: 15)) edgeFrom: b1 to: b2). - edges add: ((RTDecoratedLine new filledDiamondHead; color: Color green; width: 2; attachPoint: (RTShorterDistanceWithOffsetAttachPoint new offset: 15)) edgeFrom: b1 to: b2). - edges add: ((RTDecoratedLine new filledDiamondHead; emptyCircleTail; color: Color red; width: 2; attachPoint: (RTShorterDistanceWithOffsetAttachPoint new offset: 15)) edgeFrom: b1 to: b2). - v := RTView new - add: b1; - add: b2; - addAll: edges. - edges do: [ :each | each update ]. - ^ v -] - -{ #category : #icons } -RTLineDecorationExample >> exampleCoolWithJumpIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAByElEQVR4XuXbsXHCMBiGYQ/C -BLAZWYAiByUlG0ADu8AAlOA7eo/A58jJCgFsPa9OC/ixhf6Cpu/9xlTjPwIfxM8H8UH8fBAf -xM8H8UH8fBAfxM8H8fNBfBA/H8QH8fNBfBA/H8QH8fNB/HwQH8TPB/FB/HwQH8TPB/FB/HwQ -Px/EB/HzQXwQPx+kXpC2bftX71q63+959bPyQXwQH8QH8UF8EB/EB/FBfJAP1XVdfJAR9Hg8 -MpvN0jRNv9/vUw3IdrvNFPdyufzFGPZiscj1evW/kE93uVyyWq38I8v/UX/h3mz6Kvbt5n8h -47hlxb9ljeOWlXLLKqsp61BWPUfWRNcy5ZbV/6155rm2/i3r451zznf3VdeRld0uOZ2S5zNT -wkgZDMtkmDKMJIeKjqwcj78QWa8zpWtVmQxTpsJ+2JnP09YyGA5fxvC2TfHIyvmc+IOhPxj6 -ID6ID+KD+CA+iA/ig/ggPogP4oP4ICpI3lAtIO94Vv7/Q0aWD+KD+PkgPoifD+KD+PkgPoif -D+KD+Pkgfj6ID+Lng/ggfj6ID+Lng/ggfj6Inw/ig/j5ID6Inw/ig/j5ID6Inw/i54P4IH4+ -iA/i94/9AObDevK8Tn8bAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTLineDecorationExample >> exampleStyledMultiLineHeads [ -|view addHead heads offset| -view := RTView new. -addHead := [ :aHeadName :anOffset | - | e1 e2 l1 | - e1 := RTBox new element. - e2 := RTBox new element. - l1 := RTStyledMultiLine new - color: Color black; - perform: aHeadName asSymbol; - edgeFrom: e1 to: e2. - l1 model: aHeadName. - view addAll: (Array with: e1 with: e2 with: l1). - - e1 translateBy: -110 @ anOffset. - e2 translateBy: 110 @ anOffset. - - l1 @ (RTLabeled new color: Color black) ]. - -heads := (RTStyledMultiLine rtmethods collect: [ :m | m selector ]) select: [ :m | m endsWith: 'Head' ]. -offset := 0. -heads do: [ :id | - addHead value: id value: offset. - offset := offset + 40 ]. - -^ view - -] - -{ #category : #sources } -RTLineDecorationExample >> exampleStyledMultiLineHeadsIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGEAAABCCAAAAABiVefnAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQffCAMOAQeAmGmdAAAEs0lEQVRYw+1YXWhbVRw/aVrwRSg4YeCgsAfZg/UDnxVBnwQFEZE9jIHIcJtuSqcjw1qpi42OpEljtV2lrevarluXzZXaD1aossHK2lHaabRN2jQftZqEpWmaNLn33L/39n7k3pN7czNvJir9PyX3/M7/d875f56D4EELIj8wWHcOpnUhDM1oMpTEIVOgKSIE8ToFoWkYGKKAUZmPaQFDgeMiFIfkYMB9T4SwDLmsbHGQutB0E1NZYj1bst/wInphGOMtJYTJ5DkpaDp3umMNtj8hBpLT3/0wOiLKxI2+t14ZTIJijZmfe6+NCYDhn55FFabas1ElA+W/NDguQiaPxODWSWsYCwxTZz3fXxVlaOLyO8+d21AypOc7L14TAJ7xZ5AZ7bZHledE+c73SpDRQ1Hw1n0YwvwpZdMK5Mjp4TSVIRa4mVdHw0uotjuF00oITuUdhAKb53O7D7Zn8b6EJVNDX29K3YxYsvQnrTk9S3dZQzJLExYrxRVL8VYs91bFZKw7Gd/XEpAe1rDsMPxLGfQzcymC8+FXuAd9by1JNL01N7gFhikwXJ+TDoNkYB45YnwXbGLZ7xcpSAa6Bn1gmIIGx/RHvwgUPAMjClB7EHpf7ZwYpagplgYpsK7Fj3sBCwybsWR+At6DqtB760nl3GxsnfCxdDxBrDueyOX3YAtC5NhsSqxAPza43Ly0uF3VyFSFLBmixt2x2r9y56WltaF/jTj7BUdTaws/7Gp/Mw6w+LpPrKILt/zLvCwFfLtRJaq9QVbRpanfAkvLkiwFZubIKhq6fXdFgPiillUAR1tUqHGKQ2VPCT0VJONOpcEp+CT7z3YCQbB18lqQwkQYqBr0dBBUOiZG39TSWA5sfzR3CVoK4uHRfWHDmYOCL4/3acVD9uCi8dREg/0bzZguqaksRSQtBQy4zAT/zwq0wyCKrGdTqaJYtzwwNF3U4zgF2t7KaWeKU3DDxaKGhkyvl+hbGVlmmunoCauUIDkk0tEe1ISw/bvv1PnGAbEZIHIrhrH62esnQsR8+Yox+Pci9Ng8mR7zfy9ZloHq+vR3Ibdy9eH2SigY4iQYWbRsAkw15sj6MO0P85BQIHEAVVWhV1PEHSg08ysLCYYXHN05YO10p96zJta4yfpmFy/Orz+2QBoSJzbIGvfZmRYnj2lufxxVVqIn4wTDgt3qdrqa2w4dZmsAsBcZz8sB4Q60GVuXgRtnAbo7iVPKxhJSwqXhDDKb0UkigdHxezneUybr5jljO21/JnChpTGsnGr7wqmSv2W1Z+vdXbveTmmZGsNqfQ/crRsG9VsWO3/Or9P1MbAaKQJhF95fx97jaK17HKPbunKeVQzCbSMj+ZZK1iih49MJSVY7ftD3ONkK/rO5dYfBIAMuUzejxbCdpUt4FfnbDGzO7X/NC3RZtyF7X6JpSB42oepvdUP2fhnENzIGbj6BzJUm9EaEfAAzxMC987VfvnrlimfoaAUym5DJjKo7NoxfquUM0z0jY6OjIxMND3MMFWa090KyjAz591YGvM+zp4RMx9bJx1SDDOKbMWvpbMNDqGaoXE8bMgZR2FZn/OhqmQNCJeLKHNQFWaPMEf1PZL6/AAR+8n9Npcr0AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE1LTA4LTAzVDE2OjAwOjMwKzAyOjAwCPXwuwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNS0wOC0wM1QxNjowMDozMCswMjowMHmoSAcAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTLineDecorationExample >> exampleStyledMultiLineStyles [ -|view addStyle styles| -view := RTView new. - -addStyle := [ :aStyleName | - | e1 e2 l1 | - e1 := RTBox new element. - e2 := RTBox new element. - l1 := RTStyledMultiLine new - color: Color black; - perform: aStyleName asSymbol; - edgeFrom: e1 to: e2. - l1 model: aStyleName. - view addAll: (Array with: e1 with: e2 with: l1). - - l1 @ (RTLabeled new color: Color black). -]. - -styles := (RTStyledMultiLine rtmethods collect: [ :m | m selector ]) select: [ :m | m endsWith: 'Line' ]. -styles do: [ :id | addStyle value: id ]. - -RTGridLayout new - gapSize: 50; - lineItemsCount: 2; on: view elements. - -view elements pairsDo: [ :a :b | b translateBy: 100 @ 0 ]. - -^ view -] - -{ #category : #sources } -RTLineDecorationExample >> exampleStyledMultiLineStylesIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAHQAAAAsCAIAAAA7JQvqAAAAA3NCSVQICAjb4U/gAAABxklEQVRoQ+2ZUYqFMAxFpzr/4hZ0/1vSHSguQJ0MHYokNR1o87B435c0Nsk7vZRcdOd5fuFnQ6CxSYusvwQA11AHgAu4hgQMU0O5hnC/We51XbdtC4td1/V9b1i/5tRJVlCu4fFy5fpSNPwOw8DKhon4OI62be+itO6ce0h03/em+ROQ7CozmjyWOFzqY55n2hy9Fqhd3Xq8LXpHGdfCHZkC605XWYEKL04B5RoePuACriEBw9RQriFcPoolXYdhL7WlTrKCcg2PlCvXl1IcmrdnfoDTrRo5kTDnSXd0DZV9LfguWfQayn9tWRb9ZOJwFYd2tWe6VbtO0Mo0Xe9rdC3ocHEt6HyyonBoWfj0zVCuzicrCrhZ+PTNgKvzyYoCbhY+fTMfxZKuQ0/3qmiSFZRrqAeuXF8q6tAMu6g89TRN0g3Sf4rDVRxa5RxKts+uBZka14JkUmwFDq0YSpkIypVMiq0AbjGUMhHgSibFVgC3GEqZiI9iSdchU7x2JckKyjXURhzu1aF570Gfy/7/QP0Gx/LhB+rTV//Agz+WcRzvPmLxOTcpdcODri11klVcubX9zYf2y5X70DbrbAvKNTw3wDWE+wOKyj7o41vluQAAAABJRU5ErkJggg==' -] - -{ #category : #accessing } -RTLineDecorationExample >> label [ - ^ 'Line decoration' -] diff --git a/src/Roassal2/RTLineDecorationShape.class.st b/src/Roassal2/RTLineDecorationShape.class.st deleted file mode 100644 index 396cfe783..000000000 --- a/src/Roassal2/RTLineDecorationShape.class.st +++ /dev/null @@ -1,28 +0,0 @@ -" -A DCRTLineDecorationShape contains information about trachel shape used as line heads or tails with DCRTAbstractLineDecoration - -Usage: - DCRTLineHead shape: DCRTEmptyArrow - or - DCRTEmptyArrow asHead -" -Class { - #name : #RTLineDecorationShape, - #superclass : #RTObject, - #category : #'Roassal2-LineDecorations' -} - -{ #category : #converting } -RTLineDecorationShape class >> asHead [ - ^ RTLineHead shape: self -] - -{ #category : #converting } -RTLineDecorationShape class >> asTail [ - ^ RTLineTail shape: self -] - -{ #category : #hooks } -RTLineDecorationShape class >> trachelShapeClass [ - ^ TRAbstractLineDecoratorShape -] diff --git a/src/Roassal2/RTLineDualWidth.class.st b/src/Roassal2/RTLineDualWidth.class.st deleted file mode 100644 index 68eae84b1..000000000 --- a/src/Roassal2/RTLineDualWidth.class.st +++ /dev/null @@ -1,182 +0,0 @@ -" -I am a line with different sizes in each side. - -Here is an example: --=-=-= - | view box e1 e2 l | - view := RTView new. - view @ RTDraggableView. - box := RTBox new size: 20. - e1 := box element. - e2 := box element. - e2 translateTo: 40 @ 20. - l := RTLineDualWidth new - widthFrom: [:edge | 2]; - widthTo: [:edge | 1]; - color: Color red; - withShorterDistanceAttachPoint; - yourself. - e1 @ RTDraggable. - e2 @ RTDraggable. - view - add: e1; - add: e2; - add: (l edgeFrom: e1 to: e2). - view --=-=-= - -Another example: --=-=-=-= -""This visualization shows dependencies between Monticello packages"" -pak := RPackageOrganizer default packages select: [ :p | 'Metacell*' match: p name ]. - -b := RTMondrian new. -b shape circle withTextAbove: #packageName. -b nodes: pak. - -b shape lineDualWidth - color: Color blue trans; - withShorterDistanceAttachPoint; - widthFrom: [ :anEdge | (anEdge from model numberOfDependenciesToward: anEdge to model) sqrt * 4]; - widthTo: [ :anEdge | (anEdge to model numberOfDependenciesToward: anEdge from model) sqrt * 4]. - -b edges - noRepetition; noBidirectional; - connectToAll: #dependentPackages. -b layout circle. - -b normalizer normalizeSize: #numberOfClasses using: #sqrt. -b --=-=-=-= -" -Class { - #name : #RTLineDualWidth, - #superclass : #RTSVGPathLine, - #instVars : [ - 'widthFrom', - 'widthTo' - ], - #category : #'Roassal2-Shapes' -} - -{ #category : #examples } -RTLineDualWidth class >> example01 [ - - | view box e1 e2 l | - view := RTView new. - view @ RTDraggableView. - box := RTBox new size: 20. - e1 := box element. - e2 := box element. - e2 translateTo: 40 @ 20. - l := RTLineDualWidth new - widthFrom: 10; - widthTo: 5; - color: Color red; - withShorterDistanceAttachPoint; - yourself. - e1 @ RTDraggable. - e2 @ RTDraggable. - view - add: e1; - add: e2; - add: (l edgeFrom: e1 to: e2). - view inspect -] - -{ #category : #initialization } -RTLineDualWidth >> initialize [ - super initialize. - self widthFrom: 1; widthTo: 1. -] - -{ #category : #initialization } -RTLineDualWidth >> pathFor: anEdge and: trachelShape [ - "this methods is just to avoid recalculate ending point and starting point" - - | from to point side w1 w2 e dist sc z first | - e := 0.001. - ^ String - streamContents: [ :s | - "Setting values" - from := trachelShape from. - to := trachelShape to. - w1 := widthTo rtValue: anEdge. - w2 := widthFrom rtValue: anEdge. - w1 := w1 max: e. - w2 := w2 max: e. - dist := from distanceTo: to. - dist := dist max: e. - z := (w1 + w2) / 2. - z > dist - ifTrue: [ sc := RTScale linear - domain: (Array with: 0 with: z + (z * 0.1)); - range: (Array with: 0 with: dist). - w1 := sc scale: w1. - w2 := sc scale: w2 ]. - "creating utility blocks" - point := [ :p | - s - nextPutAll: p x asFloat asString; - space; - nextPutAll: p y asFloat asString; - space ]. - side := [ :vector :end :size | - | left right u unit middle l r | - u := vector normal. - unit := vector / (vector r max: 0.001). - middle := end - (unit * size). - left := middle - (u * size). - l := end - (u * size). - right := middle + (u * size). - r := end + (u * size). - s nextPutAll: (first ifTrue: [ 'M ' ] ifFalse: [ 'L' ]). - point value: left. - s nextPutAll: 'C '. - point value: left. - point value: l. - point value: end. - s nextPutAll: 'C '. - point value: end. - point value: r. - point value: right. ]. - "this creates the line" - first := true. - side value: to - from value: to value: w1 / 2. - first := false. - side value: from - to value: from value: w2 / 2. - s nextPutAll: 'Z' ] -] - -{ #category : #rendering } -RTLineDualWidth >> updateFor: edge trachelShape: trachelShape [ - trachelShape - from: (attachPoint startingPointOf: edge) to: (attachPoint endingPointOf: edge); - resetPath; - strokePaint: Color transparent; - color: (self colorFor: edge); - width: 0; - svgPath: (self pathFor: edge and: trachelShape). -] - -{ #category : #initialization } -RTLineDualWidth >> widthFrom [ - ^ widthFrom -] - -{ #category : #initialization } -RTLineDualWidth >> widthFrom: aNumber [ - widthFrom := aNumber - -] - -{ #category : #initialization } -RTLineDualWidth >> widthTo [ - ^ widthTo -] - -{ #category : #initialization } -RTLineDualWidth >> widthTo: aNumber [ - widthTo := aNumber - -] diff --git a/src/Roassal2/RTLineDualWidthTest.class.st b/src/Roassal2/RTLineDualWidthTest.class.st deleted file mode 100644 index 5c6544332..000000000 --- a/src/Roassal2/RTLineDualWidthTest.class.st +++ /dev/null @@ -1,32 +0,0 @@ -Class { - #name : #RTLineDualWidthTest, - #superclass : #RTTest, - #category : #'Roassal2-Shapes' -} - -{ #category : #tests } -RTLineDualWidthTest >> testBasic [ - - | view box e1 e2 l | - view := RTView new. - view @ RTDraggableView. - box := RTBox new size: 20. - e1 := box element. - e2 := box element. - e2 translateTo: 40 @ 20. - l := RTLineDualWidth new - widthFrom: [:edge | 2]; - widthTo: [:edge | 1]; - color: Color red trans; - withShorterDistanceAttachPoint; - yourself. - e1 @ RTDraggable. - e2 @ RTDraggable. - view - add: e1; - add: e2; - add: (l edgeFrom: e1 to: e2). - view canvas buildMorph drawOnMockCanvas. - - e1 translateBy: 5 @ 5 -] diff --git a/src/Roassal2/RTLineHead.class.st b/src/Roassal2/RTLineHead.class.st deleted file mode 100644 index e7ad74e11..000000000 --- a/src/Roassal2/RTLineHead.class.st +++ /dev/null @@ -1,57 +0,0 @@ -" -A DCRTLineHead is a handler of head of a line -" -Class { - #name : #RTLineHead, - #superclass : #RTExtremityLineDecoration, - #category : #'Roassal2-LineDecorations' -} - -{ #category : #converting } -RTLineHead >> asHead [ - ^ self -] - -{ #category : #public } -RTLineHead >> trachelShapeFor: anEdge [ - | fromPoint | - fromPoint := attachPoint startingPointOf: anEdge. - line ifNotNil: [ | lineShape | - lineShape := line trachelShapeFor: anEdge. - lineShape class = TRBezierShape ifTrue: [ - fromPoint := lineShape points allButLast last ] ]. - - anEdge shape class = RTArcLine & (attachPoint class = RTBorderAttachPoint) ifTrue: [ - fromPoint := (TRArcLineShape new - line: (RTLineSegment from: fromPoint to: (attachPoint endingPointOf: anEdge)); - distance: (anEdge shape distanceFor: anEdge)) normal to. - ]. - ^ self trachelShapeFor: anEdge from: fromPoint -] - -{ #category : #public } -RTLineHead >> trachelShapeFor: anEdge from: aPoint [ - ^ self trachelShapeFor: anEdge from: aPoint to: (attachPoint endingPointOf: anEdge) -] - -{ #category : #hooks } -RTLineHead >> updateFor: edge trachelShape: trachelShape [ - | fromPoint | - fromPoint := attachPoint startingPointOf: edge. - line ifNotNil: [ | lineShape | - lineShape := edge trachelShape. - lineShape class = TRBezierShape - ifTrue: [ fromPoint := lineShape points allButLast last ] ]. - edge shape class = RTArcLine & (attachPoint class = RTBorderAttachPoint) ifTrue:[ - fromPoint := edge trachelShape shapes first normal to ]. - self updateFor: edge trachelShape: trachelShape from: fromPoint -] - -{ #category : #hooks } -RTLineHead >> updateFor: anEdge trachelShape: trachelShape from: aPoint [ - self - updateFor: anEdge - trachelShape: trachelShape - from: aPoint - to: (attachPoint endingPointOf: anEdge) -] diff --git a/src/Roassal2/RTLineLegendItem.class.st b/src/Roassal2/RTLineLegendItem.class.st deleted file mode 100644 index e67307bf5..000000000 --- a/src/Roassal2/RTLineLegendItem.class.st +++ /dev/null @@ -1,40 +0,0 @@ -Class { - #name : #RTLineLegendItem, - #superclass : #RTLegendItem, - #instVars : [ - 'color', - 'text' - ], - #category : #'Roassal2-Builder-Legend' -} - -{ #category : #accessing } -RTLineLegendItem >> color [ - ^ color -] - -{ #category : #accessing } -RTLineLegendItem >> color: anObject [ - color := anObject -] - -{ #category : #hooks } -RTLineLegendItem >> execute [ - "Associate a color with a text" - | g | - g := RTGroup new. - g add: (RTBox new height: textSize * 0.3; width: textSize; color: color) element. - g add: ((self newLabelShape: text) elementOn: text). - RTHorizontalLineLayout new alignCenter; on: g. - ^ g -] - -{ #category : #accessing } -RTLineLegendItem >> text [ - ^ text -] - -{ #category : #accessing } -RTLineLegendItem >> text: anObject [ - text := anObject -] diff --git a/src/Roassal2/RTLinePathBuilder.class.st b/src/Roassal2/RTLinePathBuilder.class.st deleted file mode 100644 index b7d6dd935..000000000 --- a/src/Roassal2/RTLinePathBuilder.class.st +++ /dev/null @@ -1,43 +0,0 @@ -" -An interpolator a way to create lines in SVG -" -Class { - #name : #RTLinePathBuilder, - #superclass : #RTObject, - #instVars : [ - 'tension' - ], - #category : #'Roassal2-Experimental' -} - -{ #category : #testing } -RTLinePathBuilder >> closed [ - ^ false. -] - -{ #category : #public } -RTLinePathBuilder >> interpolate: points [ - -] - -{ #category : #converting } -RTLinePathBuilder >> reverse [ - ^ self. -] - -{ #category : #'*Roassal2' } -RTLinePathBuilder >> rtValue: anArgument [ - | value | - value := anArgument. - (anArgument isKindOf: Association) - ifTrue: [ - self tension: anArgument value. - value := anArgument key. ]. - - ^ self interpolate: value. -] - -{ #category : #public } -RTLinePathBuilder >> tension: aNumber [ - tension := aNumber -] diff --git a/src/Roassal2/RTLinePathBuilder.extension.st b/src/Roassal2/RTLinePathBuilder.extension.st deleted file mode 100644 index fa3e85b38..000000000 --- a/src/Roassal2/RTLinePathBuilder.extension.st +++ /dev/null @@ -1,13 +0,0 @@ -Extension { #name : #RTLinePathBuilder } - -{ #category : #'*Roassal2' } -RTLinePathBuilder >> rtValue: anArgument [ - | value | - value := anArgument. - (anArgument isKindOf: Association) - ifTrue: [ - self tension: anArgument value. - value := anArgument key. ]. - - ^ self interpolate: value. -] diff --git a/src/Roassal2/RTLineSegment.class.st b/src/Roassal2/RTLineSegment.class.st deleted file mode 100644 index 49dde5163..000000000 Binary files a/src/Roassal2/RTLineSegment.class.st and /dev/null differ diff --git a/src/Roassal2/RTLineSegmentTest.class.st b/src/Roassal2/RTLineSegmentTest.class.st deleted file mode 100644 index 57a64ef72..000000000 --- a/src/Roassal2/RTLineSegmentTest.class.st +++ /dev/null @@ -1,136 +0,0 @@ -" -A RTLineSegmentTest is a test class for testing the behavior of RTLineSegment -" -Class { - #name : #RTLineSegmentTest, - #superclass : #RTTest, - #instVars : [ - 'lineX', - 'lineY', - 'lineDiagonal', - 'lineX0' - ], - #category : #'Roassal2-AttachPoint-Tests' -} - -{ #category : #running } -RTLineSegmentTest >> setUp [ - super setUp. - lineX := RTLineSegment from: 10 @ -10 to: 110 @ -10. - lineY := RTLineSegment from: 10 @ -10 to: 10 @ 90. - lineDiagonal := RTLineSegment from: 10 @ -10 to: -90 @ -110. - lineX0 := RTLineSegment from: 0 @ 0 to: 100 @ 0 -] - -{ #category : #tests } -RTLineSegmentTest >> testAngles [ - self assert: lineX angleInDeg = 0. - self assert: lineY angleInDeg = 90. - self assert: lineDiagonal angleInDeg = 225. - self assert: lineX angleInRad = 0. - self assert: (lineY angleInRad closeTo: 1.5707963268) -] - -{ #category : #tests } -RTLineSegmentTest >> testEquals [ - | anotherX | - anotherX := RTLineSegment from: lineX from to: lineX to. - self assert: anotherX equals: lineX. - self assert: anotherX = lineX. - self assert: anotherX hash equals: lineX hash. - - self deny: lineX = lineY -] - -{ #category : #tests } -RTLineSegmentTest >> testIntersectHorizontal [ - "assumes intersection: method is tested elsewhere" - - self assert: (lineX intersectHorizontal: lineY) = (lineX intersection: lineY). - self assert: (lineX0 intersectHorizontal: lineY) = (lineX0 intersection: lineY). - self assert: (lineX intersectHorizontal: lineDiagonal) = (lineX intersection: lineDiagonal). - self assert: (lineX0 intersectHorizontal: lineDiagonal) = (lineX0 intersection: lineDiagonal). - self assert: (lineX0 intersectHorizontal: lineX) = (lineX0 intersection: lineX). - self assert: (lineX intersectHorizontal: lineX) = (lineX intersection: lineX) -] - -{ #category : #tests } -RTLineSegmentTest >> testIntersectLines [ - self assert: (lineX intersectLines: lineY) = (10 @ -10). - self assert: (lineX intersectLines: lineDiagonal) = (10 @ -10). - self assert: (lineY intersectLines: lineDiagonal) = (10 @ -10). - self assert: (lineX intersectLines: lineX0) isNil. - self assert: (lineY intersectLines: lineX0) = (10 @ 0). - self assert: (lineDiagonal intersectLines: lineX0) = (20 @ 0) -] - -{ #category : #tests } -RTLineSegmentTest >> testIntersectVertical [ - self assert: (lineY intersectVertical: lineX0) = (lineY intersection: lineX0). - self assert: (lineY intersectVertical: lineX) = (lineY intersection: lineX). - self assert: (lineY intersectVertical: lineDiagonal) = (lineY intersection: lineDiagonal). - self assert: (lineY intersectVertical: lineY) = (lineY intersection: lineY) -] - -{ #category : #tests } -RTLineSegmentTest >> testIntersection [ - self assert: (lineX intersection: lineY) = (10 @ -10). - self assert: (lineX intersection: lineDiagonal) = (10 @ -10). - self assert: (lineY intersection: lineDiagonal) = (10 @ -10). - self assert: (lineX intersection: lineX0) isNil. - self assert: (lineY intersection: lineX0) = (10 @ 0). - self assert: (lineDiagonal intersection: lineX0) isNil -] - -{ #category : #tests } -RTLineSegmentTest >> testLength [ - self assert: lineX length = 100. - self assert: lineY length = 100. - self assert: (lineDiagonal length closeTo: 141.4213562) -] - -{ #category : #tests } -RTLineSegmentTest >> testNormalForm [ - self assert: lineX a = 0. - self assert: lineY a = 100. - self assert: lineDiagonal a = -100. - self assert: lineX b = -100. - self assert: lineY b = 0. - self assert: lineDiagonal b = 100. - self assert: lineX c = -1000. - self assert: lineY c = -1000. - self assert: lineDiagonal c = 2000 -] - -{ #category : #tests } -RTLineSegmentTest >> testPointForBalance [ - self assert: (lineX pointForBalance: 0) equals: lineX from. - self assert: (lineX pointForBalance: 0.5) equals: (lineX from + lineX to) / 2. - self assert: (lineX pointForBalance: 1) equals: lineX to. - - self assert: (lineX pointForBalance: 10) equals: lineX from + (10 @ 0). - self assert: (lineX pointForBalance: 90) equals: lineX to - (10 @ 0). - self assert: (lineX pointForBalance: -10) equals: lineX to - (10 @ 0) -] - -{ #category : #tests } -RTLineSegmentTest >> testSideOfPoint [ - self assert: (lineX sideOfPoint: 20 @ -20) equals: 1. - self assert: (lineX sideOfPoint: 20 @ -10) equals: 0. - self assert: (lineX sideOfPoint: 20 @ 0) equals: -1. - - self assert: (lineY sideOfPoint: 0 @ 0) equals: -1. - self assert: (lineY sideOfPoint: 10 @ 0) equals: 0. - self assert: (lineY sideOfPoint: 20 @ 0) equals: 1. - - self assert: (lineDiagonal sideOfPoint: -40 @ -30) equals: 1. - self assert: (lineDiagonal sideOfPoint: 10 @ -10) equals: 0. - self assert: (lineDiagonal sideOfPoint: -30 @ -70) equals: -1 -] - -{ #category : #tests } -RTLineSegmentTest >> testVector [ - self assert: lineX vector = (100 @ 0). - self assert: lineY vector = (0 @ 100). - self assert: lineDiagonal vector = (-100 @ -100) -] diff --git a/src/Roassal2/RTLineTail.class.st b/src/Roassal2/RTLineTail.class.st deleted file mode 100644 index 35372eab5..000000000 --- a/src/Roassal2/RTLineTail.class.st +++ /dev/null @@ -1,53 +0,0 @@ -" -A DCRTLineTail is a handler of tail of a line -" -Class { - #name : #RTLineTail, - #superclass : #RTExtremityLineDecoration, - #category : #'Roassal2-LineDecorations' -} - -{ #category : #converting } -RTLineTail >> asTail [ - ^ self -] - -{ #category : #public } -RTLineTail >> trachelShapeFor: anEdge [ - | fromPoint | - fromPoint := attachPoint endingPointOf: anEdge. - line - ifNotNil: [ - | lineShape | - lineShape := line trachelShapeFor: anEdge. - lineShape class = TRBezierShape - ifTrue: [ fromPoint := lineShape points second ] ]. - ^ self trachelShapeFor: anEdge from: fromPoint -] - -{ #category : #public } -RTLineTail >> trachelShapeFor: anEdge from: aPoint [ - ^ self trachelShapeFor: anEdge from: aPoint to: (attachPoint startingPointOf: anEdge) -] - -{ #category : #hooks } -RTLineTail >> updateFor: edge trachelShape: trachelShape [ - | fromPoint | - fromPoint := attachPoint endingPointOf: edge. - line - ifNotNil: [ - | lineShape | - lineShape := edge trachelShape shapes first. - lineShape class = TRBezierShape - ifTrue: [ fromPoint := lineShape points second ] ]. - self updateFor: edge trachelShape: trachelShape from: fromPoint -] - -{ #category : #hooks } -RTLineTail >> updateFor: anEdge trachelShape: trachelShape from: aPoint [ - self - updateFor: anEdge - trachelShape: trachelShape - from: aPoint - to: (attachPoint startingPointOf: anEdge) -] diff --git a/src/Roassal2/RTLineTest.class.st b/src/Roassal2/RTLineTest.class.st deleted file mode 100644 index 9db5e7627..000000000 --- a/src/Roassal2/RTLineTest.class.st +++ /dev/null @@ -1,30 +0,0 @@ -Class { - #name : #RTLineTest, - #superclass : #RTTest, - #category : #'Roassal2-Core-Tests' -} - -{ #category : #tests } -RTLineTest >> testBasic [ - - | e1 e2 l edge | - e1 := RTBox elementOn: 5. - e2 := RTBox elementOn: 10. - - l := RTLine new. - l widthElement: [ :anEdge | anEdge from model ]. - edge := l edgeFrom: e1 to: e2. - - self assert: edge trachelShape width equals: 5 -] - -{ #category : #tests } -RTLineTest >> testBasicError [ - - | arrow | - arrow := RTArrowedLine new - color: Color red; - edgeFrom: RTElement new to: RTElement new; - withOffsetIfMultiple. - self should: [ arrow element ] raise: Error -] diff --git a/src/Roassal2/RTLinearClosedPathBuilder.class.st b/src/Roassal2/RTLinearClosedPathBuilder.class.st deleted file mode 100644 index adc003b95..000000000 --- a/src/Roassal2/RTLinearClosedPathBuilder.class.st +++ /dev/null @@ -1,18 +0,0 @@ -" -a Builder for points that return points with Z command -" -Class { - #name : #RTLinearClosedPathBuilder, - #superclass : #RTLinePathBuilder, - #category : #'Roassal2-Experimental' -} - -{ #category : #testing } -RTLinearClosedPathBuilder >> closed [ - ^ true -] - -{ #category : #public } -RTLinearClosedPathBuilder >> interpolate: points [ - ^ (RTLinearPathBuilder new interpolate: points),'Z'. -] diff --git a/src/Roassal2/RTLinearMove.class.st b/src/Roassal2/RTLinearMove.class.st deleted file mode 100644 index c0123db9f..000000000 --- a/src/Roassal2/RTLinearMove.class.st +++ /dev/null @@ -1,70 +0,0 @@ -" -A RTLinearMove linearly and at a regular speed move the element on which the animation is invoked on -" -Class { - #name : #RTLinearMove, - #superclass : #RTAnimation, - #instVars : [ - 'animatedValue' - ], - #category : #'Roassal2-Animation' -} - -{ #category : #'as yet unclassified' } -RTLinearMove class >> to: endPoint during: seconds on: shape [ - ^ self new to: endPoint during: seconds on: shape -] - -{ #category : #accessing } -RTLinearMove >> after: aBlock [ - animatedValue finishCallback: aBlock -] - -{ #category : #public } -RTLinearMove >> by: aDeltaPoint during: seconds on: anElement [ - - ^ self to: anElement position + aDeltaPoint during: seconds on: anElement - -] - -{ #category : #public } -RTLinearMove >> by: aDeltaPoint during: seconds on: anElement in: aView [ - - ^ self to: anElement position + aDeltaPoint during: seconds on: anElement in: aView -] - -{ #category : #testing } -RTLinearMove >> hasCompleted [ - ^ animatedValue hasCompleted -] - -{ #category : #refreshing } -RTLinearMove >> refresh [ - element translateTo: animatedValue value. - element signalUpdate -] - -{ #category : #accessing } -RTLinearMove >> start [ - animatedValue start -] - -{ #category : #public } -RTLinearMove >> to: anEndPoint during: seconds on: anElement [ - | position | - element := anElement. - - position := anElement position. - animatedValue := TRVIAnimatedValue new - evaluator: [ :t | position interpolateTo: anEndPoint at: t ]; - timer: (TRVITimer new cycleLength: seconds); - yourself. - -] - -{ #category : #public } -RTLinearMove >> to: anEndPoint during: seconds on: anElement in: aView [ - | anim | - anim := self to: anEndPoint during: seconds on: anElement. - aView addAnimation: anim -] diff --git a/src/Roassal2/RTLinearPathBuilder.class.st b/src/Roassal2/RTLinearPathBuilder.class.st deleted file mode 100644 index 784007975..000000000 --- a/src/Roassal2/RTLinearPathBuilder.class.st +++ /dev/null @@ -1,21 +0,0 @@ -" -A simple clase for create Lines in SVG -" -Class { - #name : #RTLinearPathBuilder, - #superclass : #RTLinePathBuilder, - #category : #'Roassal2-Experimental' -} - -{ #category : #public } -RTLinearPathBuilder >> interpolate: points [ - | first str point | - first := true. - str := nil. - point := [ :p | p x asFloat asString, ' ', p y asFloat asString ]. - points do: [ :p | - first ifTrue: [ str := point value: p. first := false ] - ifFalse: [ str := str, 'L', (point value: p) ] - ]. - ^ str. -] diff --git a/src/Roassal2/RTLinearTransformation.class.st b/src/Roassal2/RTLinearTransformation.class.st deleted file mode 100644 index 97c8eeb59..000000000 --- a/src/Roassal2/RTLinearTransformation.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #RTLinearTransformation, - #superclass : #RTScaleTransformation, - #category : #'Roassal2-Builder-Grapher-Scaling' -} - -{ #category : #hooks } -RTLinearTransformation >> invTrans: value [ - ^ value -] - -{ #category : #hooks } -RTLinearTransformation >> trans: value [ - ^ value -] diff --git a/src/Roassal2/RTLinkView.class.st b/src/Roassal2/RTLinkView.class.st deleted file mode 100644 index 9a892b234..000000000 --- a/src/Roassal2/RTLinkView.class.st +++ /dev/null @@ -1,111 +0,0 @@ -" -I allow to export several views - -for instance if in your visualization RTView, you have elements that have visualizalitations you can use it to explore it in a web browser - -RTLinkView works with RTHTML5Exporter and -RTSVGExporter -" -Class { - #name : #RTLinkView, - #superclass : #RTInteraction, - #instVars : [ - 'showView', - 'viewBlock', - 'nameBlock', - 'titleBlock' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #visitor } -RTLinkView >> accept: aVisitor with: args [ - aVisitor visitLinkView: self with: args -] - -{ #category : #accessing } -RTLinkView >> errorView [ - | v | - v := RTView new. - v add: (RTLabel elementOn: 'Error exporting this view'). - ^ v -] - -{ #category : #initialization } -RTLinkView >> initialize [ - super initialize. - showView := false. -] - -{ #category : #hooks } -RTLinkView >> initializeElement: element [ - element when: TRMouseLeftClick do: [ - showView ifTrue: [ (self viewFor: element) inspect ]. ]. -] - -{ #category : #accessing } -RTLinkView >> name: aBlock [ - self nameElement: [ :e | aBlock rtValue: e model ]. -] - -{ #category : #accessing } -RTLinkView >> nameBlock [ - ^ nameBlock -] - -{ #category : #accessing } -RTLinkView >> nameElement: block [ - nameBlock := block -] - -{ #category : #accessing } -RTLinkView >> nameFor: e [ - ^ nameBlock rtValue: e -] - -{ #category : #accessing } -RTLinkView >> showView [ - showView := true. -] - -{ #category : #accessing } -RTLinkView >> title: aBlock [ - self titleElement: [ :e | aBlock rtValue: e model ]. -] - -{ #category : #accessing } -RTLinkView >> titleElement [ - ^ titleBlock -] - -{ #category : #accessing } -RTLinkView >> titleElement: aBlock [ - ^ titleBlock := aBlock -] - -{ #category : #accessing } -RTLinkView >> titleFor: element [ - ^ titleBlock rtValue: element - -] - -{ #category : #accessing } -RTLinkView >> view: aBlock [ - self viewElement: [ :e | aBlock rtValue: e model ]. -] - -{ #category : #accessing } -RTLinkView >> viewBlock [ - ^ viewBlock -] - -{ #category : #accessing } -RTLinkView >> viewElement: aBlock [ - ^ viewBlock := aBlock -] - -{ #category : #accessing } -RTLinkView >> viewFor: element [ - ^ viewBlock rtValue: element - -] diff --git a/src/Roassal2/RTLogTransformation.class.st b/src/Roassal2/RTLogTransformation.class.st deleted file mode 100644 index 276b88b52..000000000 --- a/src/Roassal2/RTLogTransformation.class.st +++ /dev/null @@ -1,16 +0,0 @@ -Class { - #name : #RTLogTransformation, - #superclass : #RTScaleTransformation, - #category : #'Roassal2-Builder-Grapher-Scaling' -} - -{ #category : #hooks } -RTLogTransformation >> invTrans: aValue [ - ^ (10 raisedTo: aValue) - 1 - -] - -{ #category : #hooks } -RTLogTransformation >> trans: aValue [ - ^ (aValue + 1) log -] diff --git a/src/Roassal2/RTMakeEdgeNotUpdatable.class.st b/src/Roassal2/RTMakeEdgeNotUpdatable.class.st deleted file mode 100644 index 56cd16732..000000000 --- a/src/Roassal2/RTMakeEdgeNotUpdatable.class.st +++ /dev/null @@ -1,39 +0,0 @@ -" -This class is a bit of a hack. The problem is drag-and-droping an element updates the edges connected to that element. However, the edge update also refresh the color and the width. And this is problematic when you try to change the color and the width of the edge. Dragging an element makes the edge use the width and color set in the RTLine shape. - -In the future, maybe in Roassal3, which mechanism will be removed. - --=-=-=-=-=-=-=-=-=-=-=-= -v := RTView new. - -e1 := RTBox element. -e2 := RTBox element. -e1 @ RTDraggable. -e2 @ RTDraggable. -v add: e1; add: e2. -e1 translateBy: 10 @ 8. - -v add: (RTLine edgeFrom: e1 to: e2). - -v addMenu: 'do' callback: [ - v edges first @ RTMakeEdgeNotUpdatable. - v edges first trachelShape color: Color red; width: 3. - - v signalUpdate ]. - -v --=-=-=-=-=-=-=-=-=-=-=-= -" -Class { - #name : #RTMakeEdgeNotUpdatable, - #superclass : #RTInteraction, - #category : #'Roassal2-Interactions-MorphingView' -} - -{ #category : #hooks } -RTMakeEdgeNotUpdatable >> initializeElement: edge [ - edge shape - colorElement: [ :l | l trachelShape color ]; - width: [ :l | l trachelShape width ] - -] diff --git a/src/Roassal2/RTMapBuilder.class.st b/src/Roassal2/RTMapBuilder.class.st deleted file mode 100644 index 340cefb09..000000000 --- a/src/Roassal2/RTMapBuilder.class.st +++ /dev/null @@ -1,318 +0,0 @@ -" -A RTMapBuilder is xxxxxxxxx. - -Instance Variables - cities: - cityBuilder: - cityElements: - cityNames: - color: - countries: - countryNames: - mapPing: - periodLabel: - popup: - routeBuilder: - scale: - -cities - - xxxxx - -cityBuilder - - xxxxx - -cityElements - - xxxxx - -cityNames - - xxxxx - -color - - xxxxx - -countries - - xxxxx - -countryNames - - xxxxx - -mapPing - - xxxxx - -periodLabel - - xxxxx - -popup - - xxxxx - -routeBuilder - - xxxxx - -scale - - xxxxx - -" -Class { - #name : #RTMapBuilder, - #superclass : #RTBuilder, - #instVars : [ - 'color', - 'scale', - 'countries', - 'popup', - 'cities', - 'cityBuilder', - 'countryNames', - 'cityNames', - 'routeBuilder', - 'periodLabel', - 'cityElements' - ], - #category : #'Roassal2-Builder-Map' -} - -{ #category : #population } -RTMapBuilder class >> africanPopulation [ - - ^ RTMapBuilder countriesPopulation select: [ :c | RTSVGPath africa includes: (c at: 1) ]. -] - -{ #category : #'list of countries' } -RTMapBuilder class >> countries [ - ^ #(#Afghanistan #Albania #Algeria #Angola #Argentina #Armenia #Australia #Austria #Azerbaijan #Bangladesh #Belarus #Belgium #Belize #Benin #Bhutan #Bolivia #BosniaandHerzegovina #Botswana #Brazil #BruneiDarussalam #Bulgaria #BurkinaFaso #Burundi #Cambodia #Cameroon #Canada #CentralAfricanRepublic #Chad #Chile #China #Colombia #Congo #CostaRica #Croatia #Cuba #Cyprus #CzechRepublic #DemocraticRepublicCongo #Denmark #Djibouti #DominicanRepublic #Ecuador #Egypt #ElSalvador #EquatorialGuinea #Eritrea #Estonia #Ethiopia #FalklandIslandsMalvinas #Fiji #Finland #France #FrenchGuyana #GM #Gabon #Georgia #Germany #Ghana #GreatBritian #Greece #Greenland #Guatemala #Guinea #GuineaBissau #Guyana #Haiti #Honduras #Hungary #Iceland #India #Indonesia #Iran #Iraq #Ireland #Israel #Italy #IvoryCoast #Jamaica #Japan #Jordan #Kazakhstan #Kenya #Kuwait #Kyrgyzstan #Laos #Latvia #Lebanon #Liberia #Libya #Lithuania #Luxembourg #Madagascar #Malawi #Malaysia #Mali #Mauritania #Mexico #Moldova #Mongolia #Morocco #Mozambique #MyanmarBurma #Namibia #Nepal #Netherlands #NewZealand #Nicaragua #Niger #Nigeria #NorthKorea #Norway #NewCaledonia #Oman #Pakistan #Palestine #Panama #PapuaNewGuinea #Paraguay #Peru #Philippines #Poland #Portugal #PuertoRico #Qatar #RepublicofMacedonia #RepublicofTurkey #Romania #Russia #Rwanda #SaudiArabia #Senegal #Serbia #SierraLeone #Slovakia #SolomonIslands #Somalia #SouthAfrica #Lesotho #SouthKorea #Spain #SriLanka #Sudan #Suriname #SvalbardJanMayen #Swaziland #Sweden #Switzerland #Syria #Taiwan #Tajikistan #Tanzania #Thailand #TimorLeste #Togo #Tunisia #Turkmenistan #Uganda #Ukraine #UnitedArabEmirates #UnitedStates #Uruguay #Uzbekistan #Vanuatu #Venezuela #Vietnam #WesternSahara #Yemen #Zambia #Zimbabwe) -] - -{ #category : #population } -RTMapBuilder class >> countriesPopulation [ - ^ #(#(#Aruba 102384) #(#Andorra 78360) #(#Afghanistan 29824536) #(#Angola 20820525) #(#Albania 3162083) #(#ArabWorld 362466629) #(#UnitedArabEmirates 9205651) #(#Argentina 41086927) #(#Armenia 2969081) #(#AmericanSamoa 55128) #(#AntiguaandBarbuda 89069) #(#Australia 22683600) #(#Austria 8462446) #(#Azerbaijan 9297507) #(#Burundi 9849569) #(#Belgium 11142157) #(#Benin 10050702) #(#BurkinaFaso 16460141) #(#Bangladesh 154695368) #(#Bulgaria 7304632) #(#Bahrain 1317827) #(#'Bahamas,The' 371960) #(#BosniaandHerzegovina 3833916) #(#Belarus 9464000) #(#Belize 324060) #(#Bermuda 64806) #(#Bolivia 10496285) #(#Brazil 198656019) #(#Barbados 283221) #(#BruneiDarussalam 412238) #(#Bhutan 741822) #(#Botswana 2003910) #(#CentralAfricanRepublic 4525209) #(#Canada 34880491) #(#Switzerland 7997152) #(#ChannelIslands 161235) #(#Chile 17464814) #(#China 1350695000) #(#IvoryCoast 19839750) #(#Cameroon 21699631) #(#Congo 4337051) #(#Colombia 47704427) #(#Comoros 717503) #(#CapeVerde 494401) #(#CostaRica 4805295) #(#Caribbeansmallstates 6968753) #(#Cuba 11270957) #(#Curacao 151892) #(#CaymanIslands 57570) #(#Cyprus 1128994) #(#CzechRepublic 10514810) #(#Germany 81889839) #(#Djibouti 859652) #(#Dominica 71684) #(#Denmark 5590478) #(#DominicanRepublic 10276621) #(#Algeria 38481705) #(#'EastAsia&Pacific(developingonly)' 1991619000) #(#'EastAsia&Pacific(allincomelevels)' 2233747260) #(#'Europe&CentralAsia(developingonly)' 272058887) #(#'Europe&CentralAsia(allincomelevels)' 899507888) #(#Ecuador 15492264) #(#Egypt 80721874) #(#Euroarea 333791352) #(#Eritrea 6130922) #(#Spain 46217961) #(#Estonia 1339396) #(#Ethiopia 91728849) #(#EuropeanUnion 509036794) #(#Finland 5414293) #(#Fiji 874742) #(#France 65696689) #(#FaeroeIslands 49506) #(#'Micronesia,Fed.Sts.' 103395) #(#Gabon 1632572) #(#GreatBritian 63227526) #(#Georgia 4511800) #(#Ghana 25366462) #(#Guinea 11451273) #(#GM 1791225) #(#GuineaBissau 1663558) #(#EquatorialGuinea 736296) #(#Greece 11280167) #(#Grenada 105483) #(#Greenland 56840) #(#Guatemala 15082831) #(#Guam 162810) #(#Guyana 795369) #(#Highincome 1302107523) #(#'HongKongSAR,China' 7154600) #(#Honduras 7935846) #(#'Heavilyindebtedpoorcountries(HIPC)' 655971763) #(#Croatia 4267000) #(#Haiti 10173775) #(#Hungary 9943755) #(#Indonesia 246864191) #(#IsleofMan 85284) #(#India 1236686732) #(#Ireland 4588798) #(#Iran 76424443) #(#Iraq 32578209) #(#Iceland 320137) #(#Israel 7907900) #(#Italy 60917978) #(#Jamaica 2712100) #(#Jordan 6318000) #(#Japan 127561489) #(#Kazakhstan 16797459) #(#Kenya 43178141) #(#Kyrgyzstan 5582100) #(#Cambodia 14864646) #(#Kiribati 100786) #(#'St.KittsandNevis' 53584) #(#SouthKorea 50004000) #(#Kosovo 1806366) #(#Kuwait 3250496) #(#'LatinAmerica&Caribbean(developingonly)' 581383555) #(#Laos 6645827) #(#Lebanon 4424888) #(#Liberia 4190435) #(#Libya 6154623) #(#'St.Lucia' 180870) #(#'LatinAmerica&Caribbean(allincomelevels)' 608565574) #(#'Leastdevelopedcountries:UNclassification' 878193577) #(#Lowincome 846454901) #(#Liechtenstein 36656) #(#SriLanka 20328000) #(#Lowermiddleincome 2507011903) #(#'Low&middleincome' 5744261290) #(#Lesotho 2051545) #(#Lithuania 2985509) #(#Luxembourg 531441) #(#Latvia 2025473) #(#'MacaoSAR,China' 556783) #(#'St.Martin(Frenchpart)' 30959) #(#Morocco 32521143) #(#Monaco 37579) #(#Moldova 3559541) #(#Madagascar 22293914) #(#Maldives 338442) #(#'MiddleEast&NorthAfrica(allincomelevels)' 395313211) #(#Mexico 120847477) #(#MarshallIslands 52555) #(#Middleincome 4897806389) #(#RepublicofMacedonia 2105575) #(#Mali 14853572) #(#Malta 418366) #(#MyanmarBurma 52797319) #(#'MiddleEast&NorthAfrica(developingonly)' 339560601) #(#Montenegro 621081) #(#Mongolia 2796484) #(#NorthernMarianaIslands 53305) #(#Mozambique 25203395) #(#Mauritania 3796141) #(#Mauritius 1291456) #(#Malawi 15906483) #(#Malaysia 29239927) #(#NorthAmerica 348859337) #(#Namibia 2259393) #(#NewCaledonia 258121) #(#Niger 17157042) #(#Nigeria 168833776) #(#Nicaragua 5991733) #(#Netherlands 16767705) #(#'Highincome:nonOECD' 250285771) #(#Norway 5018869) #(#Nepal 27474377) #(#NewZealand 4433100) #(#'Highincome:OECD' 1051821752) #(#OECDmembers 1256610112) #(#Oman 3314001) #(#Othersmallstates 1.991995691e7) #(#Pakistan 179160111) #(#Panama 3802281) #(#Peru 29987800) #(#Philippines 96706764) #(#Palau 20754) #(#PapuaNewGuinea 7167010) #(#Poland 38542737) #(#PuertoRico 3667084) #(#NorthKorea 24763188) #(#Portugal 10526703) #(#Paraguay 6687361) #(#Pacificislandsmallstates 2252782) #(#FrenchPolynesia 273814) #(#Qatar 2050514) #(#Romania 21326905) #(#Russia 143533000) #(#Rwanda 11457801) #(#SouthAsia 1649249388) #(#SaudiArabia 28287855) #(#Sudan 37195349) #(#Senegal 13726021) #(#Singapore 5312400) #(#SolomonIslands 549598) #(#SierraLeone 5978727) #(#ElSalvador 6297394) #(#SanMarino 31247) #(#Somalia 10195134) #(#Serbia 7223887) #(#'Sub-SaharanAfrica(developingonly)' 9.103898585e8) #(#SouthSudan 10837527) #(#'Sub-SaharanAfrica(allincomelevels)' 9.111261545e8) #(#Smallstates 2.914149191e7) #(#SaoTomeandPrincipe 188098) #(#Suriname 534541) #(#Slovakia 5410267) #(#Slovenia 2058152) #(#Sweden 9516617) #(#Swaziland 1230985) #(#'SintMaarten(Dutchpart)' 39088) #(#Seychelles 87784.90752) #(#Syria 22399254) #(#TurksandCaicosIslands 32427) #(#Chad 12448175) #(#Togo 6642928) #(#Thailand 66785001) #(#Tajikistan 8008990) #(#Turkmenistan 5172931) #(#TimorLeste 1210233) #(#Tonga 104941) #(#TrinidadandTobago 1337439) #(#Tunisia 10777500) #(#RepublicofTurkey 73997128) #(#Tuvalu 9860) #(#Tanzania 47783107) #(#Uganda 36345860) #(#Ukraine 45593300) #(#Uppermiddleincome 2390794486) #(#Uruguay 3395253) #(#UnitedStates 313914040) #(#Uzbekistan 29776850) #(#'St.VincentandtheGrenadines' 109373) #(#Venezuela 29954782) #(#'VirginIslands(U.S.)' 105275) #(#Vietnam 88775500) #(#Vanuatu 247262) #(#Palestine 4046901) #(WesternSahara 513000) #(#World 7046368813) #(#Samoa 188889) #(#Yemen 23852409) #(#SouthAfrica 5.118930661e7) #(#DemocraticRepublicCongo 65705093) #(#Zambia 14075099) #(#Zimbabwe 13724317) #(#SvalbardJanMayen 2642) #(#FrenchGuyana 239450) #(#Taiwan 23340136) #(#FalklandIslandsMalvinas 2932)) -] - -{ #category : #population } -RTMapBuilder class >> publicationPerPopulation [ - -^ #(#('Switzerland' 0.04948049) #('Sweden' 0.03949838) #('Denmark' 0.03724673) #('Finland' 0.03512776) #('Iceland' 0.03384176) #('Netherlands' 0.03266005) #('Norway' 0.0323559) #('Monaco' 0.03153357) #('United Kingdom' 0.03034517) #('Australia' 0.03013565) #('New Zealand' 0.0292847) #('Canada' 0.02848185) #('Israel' 0.02841134) #('Singapore' 0.0281434) #('Belgium' 0.02684193) #('Austria' 0.02538793) #('Slovenia' 0.02456816) #('Liechtenstein' 0.02302488) #('Ireland' 0.02280205) #('United States' 0.02250084) #('Germany' 0.02177218) #('France' 0.01953477) #('Spain' 0.01643973) #('Greece' 0.0160182) #('Italy' 0.01575377) #('Czech Republic' 0.01557232) #('Estonia' 0.01429077) #('Japan' 0.01392641) #('Croatia' 0.01346473) #('Portugal' 0.01319425) #('Luxembourg' 0.01267497) #('Korea' 0.01157157) #('Hungary' 0.01128115) #('Greenland' 0.01071429) #('Cyprus' 0.00913291) #('Poland' 0.0089929) #('Lithuania' 0.00829172) #('Bermuda' 0.00745301) #('Faeroe Islands' 0.00668606) #('Bulgaria' 0.00620812) #('New Caledonia' 0.00605143) #('Malta' 0.00601626) #('Grenada' 0.00528995) #('Palau' 0.00510745) #('Latvia' 0.0049776) #('Romania' 0.00432618) #('Kuwait' 0.00423781) #('Barbados' 0.00421932) #('Turkey' 0.00414781) #('Russian Federation' 0.00408719) #('Serbia' 0.00399812) #('Chile' 0.00394931) #('San Marino' 0.00374436) #('Seychelles' 0.0037364) #('Guam' 0.00360543) #('Tunisia' 0.00355685) #('French Polynesia' 0.00341107) #('Malaysia' 0.00339218) #('Brunei Darussalam' 0.00326268) #('Armenia' 0.00315417) #('Jordan' 0.00314134) #('Lebanon' 0.00309093) #('Puerto Rico' 0.00305665) #('Cayman Islands' 0.0029703) #('Argentina' 0.00288041) #('Qatar' 0.00282271) #('Uruguay' 0.00281334) #('Trinidad and Tobago' 0.00279863) #('Macedonia' 0.00273227) #('Iran' 0.00265369) #('Belarus' 0.00262056) #('Oman' 0.00247495) #('Bahrain' 0.00247073) #('South Africa' 0.00244784) #('Ukraine' 0.00241902) #('Brazil' 0.00232119) #('Cuba' 0.00218313) #('Dominica' 0.00216227) #('Saudi Arabia' 0.00208004) #('United Arab Emirates' 0.00206949) #('American Samoa' 0.00204978) #('China' 0.00198446) #('Montenegro' 0.00175661) #('Fiji' 0.00174223) #('Botswana' 0.00172363) #('Georgia' 0.00166009) #('Virgin Islands (U.S.)' 0.00164332) #('Tuvalu' 0.0015213) #('Mexico' 0.00137863) #('Costa Rica' 0.0013508) #('Andorra' 0.00132721) #('Jamaica' 0.00128646) #('Moldova' 0.0012791) #('Thailand' 0.00123095) #('Marshall Islands' 0.00119874) #('Bosnia and Herzegovina' 0.00116017) #('Egypt' 0.00110861) #('Mauritius' 0.00110573) #('Samoa' 0.00093706) #('Panama' 0.00093654) #('Northern Mariana Islands' 0.00091924) #('Gabon' 0.00091696) #('Venezuela' 0.00090597) #('Turks and Caicos Islands' 0.00089432) #('Vanuatu' 0.00086952) #('Antigua and Barbuda' 0.00084204) #('Gambia' 0.00084188) #('Morocco' 0.00083801) #('Azerbaijan' 0.00080366) #('Tonga' 0.00077186) #('Mongolia' 0.00076525) #('Colombia' 0.00075234) #('Belize' 0.00069432) #('Bahamas' 0.00069362) #('Algeria' 0.00066821) #('Namibia' 0.00064132) #('India' 0.00060709) #('Swaziland' 0.00056459) #('Guyana' 0.00053183) #('Albania' 0.00048797) #('Congo' 0.0004729) #('Sri Lanka' 0.0004053) #('Solomon Islands' 0.00040393) #('Maldives' 0.00039889) #('Bhutan' 0.00039767) #('Aruba' 0.00039069) #('Kenya' 0.0003874) #('Zimbabwe' 0.00038282) #('Senegal' 0.00036806) #('Suriname' 0.00035732) #('Cameroon' 0.00034761) #('Kazakhstan' 0.0003366) #('Pakistan' 0.00032448) #('Peru' 0.00029889) #('Ecuador' 0.00029486) #('Ghana' 0.00026906) #('Uzbekistan' 0.00025359) #('Benin' 0.00025232) #('Bolivia' 0.00024428) #('Nigeria' 0.00024256) #('Papua New Guinea' 0.00023985) #('Nepal' 0.00022093) #('Malawi' 0.00021098) #('Burkina Faso' 0.00020486) #('Uganda' 0.0002033) #('Sao Tome and Principe' 0.00020202) #('Guinea-Bissau' 0.00019536) #('Vietnam' 0.00018557) #('Zambia' 0.00018529) #('Iraq' 0.00017914) #('Syrian Arab Republic' 0.00017648) #('Tanzania' 0.00016707) #('Nicaragua' 0.00016106) #('Lesotho' 0.00015549) #('Djibouti' 0.00015471) #('Togo' 0.00015159) #('Equatorial Guinea' 0.00014804) #('Paraguay' 0.00014026) #('Philippines' 0.00013611) #('El Salvador' 0.00012751) #('Bangladesh' 0.00012593) #('Mali' 0.0001191) #('Kiribati' 0.00011906) #('Tajikistan' 0.00010988) #('Sudan' 0.000107) #('Cambodia' 0.00010468) #('Guatemala' 0.00010131) #('Madagascar' 0.00010097) #('Mauritania' 9.194e-5) #('Central African Republic' 8.817e-5) #('Ethiopia' 8.738e-5) #('Honduras' 8.72e-5) #('Comoros' 8.223e-5) #('Indonesia' 8.169e-5) #('Rwanda' 7.864e-5) #('Yemen' 7.203e-5) #('Niger' 6.895e-5) #('Dominican Republic' 6.86e-5) #('Eritrea' 6.035e-5) #('Mozambique' 5.971e-5) #('Sierra Leone' 5.72e-5) #('Haiti' 4.305e-5) #('Turkmenistan' 4.156e-5) #('Timor-Leste' 4.131e-5) #('Guinea' 3.336e-5) #('Burundi' 2.853e-5) #('Liberia' 2.792e-5) #('Chad' 2.249e-5) #('Angola' 2.123e-5) #('Myanmar' 2.04e-5) #('Afghanistan' 1.626e-5) #('Somalia' 5.89e-6)) -] - -{ #category : #'list of countries' } -RTMapBuilder class >> southAmerica [ - ^ #(#Argentina #Brazil #Bolivia #Chile #Colombia #Ecuador #Guyana #FrenchGuyana #Paraguay #Peru #Suriname #Uruguay #Venezuela) -] - -{ #category : #adding } -RTMapBuilder >> cities [ - ^ cityBuilder -] - -{ #category : #adding } -RTMapBuilder >> cities: strings [ - ^ self cities: strings named: #yourself -] - -{ #category : #adding } -RTMapBuilder >> cities: objects named: aBlockOrSymbol [ - - "Not sure why we need to copy each object" - cities addAll: (objects collect: [ :o | o copy ]). - cityBuilder name: aBlockOrSymbol. - ^ cityBuilder -] - -{ #category : #accessing } -RTMapBuilder >> cityBuilder [ - ^ cityBuilder -] - -{ #category : #adding } -RTMapBuilder >> cityObjects [ - ^ cities -] - -{ #category : #accessing } -RTMapBuilder >> color: aColorOrBlock [ - color := aColorOrBlock. - -] - -{ #category : #adding } -RTMapBuilder >> countries: strings [ - ^ self countries: strings named: #yourself -] - -{ #category : #adding } -RTMapBuilder >> countries: objects named: aBlockOrSymbol [ - countries := OrderedCollection new. - objects do: [ :o | countries add: o ]. - countryNames := aBlockOrSymbol. - -] - -{ #category : #utility } -RTMapBuilder >> geoDistanceBetween: aPoint and: anotherPoint [ - "http://www.movable-type.co.uk/scripts/latlong.html" - | r lat1 lat2 lon1 lon2 dLat dLon a c | - r := 6371. - lat1 := aPoint x degreesToRadians. - lat2 := anotherPoint x degreesToRadians. - lon1 := aPoint y degreesToRadians. - lon2 := anotherPoint y degreesToRadians. - dLat := (lat2 - lat1). - dLon := (lon2 - lon1). - - a := ((dLat / 2) sin squared) + (((dLon / 2) sin squared) * (lat1 cos) * (lat2 cos)). - c := 2 * (a sqrt arcTan: (1 - a) sqrt). - - ^ r * c -] - -{ #category : #initialization } -RTMapBuilder >> initialize [ - super initialize. - countries := #(). - cities := OrderedCollection new. - cityBuilder := RTCityBuilder new. - cityBuilder mapBuilder: self. - routeBuilder := RTRouteBuilder new. - routeBuilder mapBuilder: self. - scale := 1. -] - -{ #category : #'public-ui' } -RTMapBuilder >> open [ - super open. - cityBuilder evolutionPeriod isEmpty ifFalse: [ - - self view addMenu: '<-' callback: [ - cityBuilder stepBack. - self refreshView. - ]. - - self view addMenu: '->' callback: [ - cityBuilder stepForward. - self refreshView. - ]. - - periodLabel := TRLabelShape new - translateLeftTo: 30@20; - text: (cityBuilder evolutionPeriod at: cityBuilder step) asString; - color: Color black. - self view canvas addFixedShape: periodLabel. - ] -] - -{ #category : #utility } -RTMapBuilder >> refreshView [ - cityElements do: [ :c | - |w h| - w := cityBuilder shape width rtValue: c. - h := cityBuilder shape height rtValue: c. - self view addAnimation: (RTColorTransitionAnimation new - toColor: (cityBuilder shape color rtValue: c) - during: 0.4 on: c). - self view addAnimation: (RTResizeMove new toExtent: w @ h during: 0.4 on: c). - ]. - periodLabel text: (cityBuilder evolutionPeriod at: cityBuilder step) asString. - self view canvas signalUpdate. -] - -{ #category : #hooks } -RTMapBuilder >> renderCities: aView [ - |elems| - elems := cityBuilder buildCities: cities. - aView addAll: elems. - ^ elems -] - -{ #category : #hooks } -RTMapBuilder >> renderCountries: aView [ - | el name countryElems | - countryElems := OrderedCollection new. - countries do: [ :o | - name := countryNames rtValue: o. - el := (RTSVGPath new - path: (RTSVGPath perform: name asSymbol); - fillColor: (color isNil ifTrue: [nil] - ifFalse: [ color rtValue: o ]); - borderWidth: 0.5; - scale: scale) - element model: o. - popup isNotNil ifTrue: [ el @ (RTPopup text: popup) ]. - countryElems add: el. - aView add: el. - ]. - ^ countryElems -] - -{ #category : #hooks } -RTMapBuilder >> renderIn: aView [ - |countryElems routeElems| - countryElems := self renderCountries: aView. - cityElements := self renderCities: aView. - routeElems := self renderRoutes: aView. - routeElems do: [ :e | e trachelShape pushBack ]. - countryElems do: [ :e | e trachelShape pushBack ]. - aView @ RTDraggableView. -] - -{ #category : #hooks } -RTMapBuilder >> renderRoutes: aView [ - |routes| - routes := routeBuilder buildRoutesUsingNames: cityBuilder names. - aView addAll: routes. - ^ routes -] - -{ #category : #accessing } -RTMapBuilder >> routes [ - ^ routeBuilder -] - -{ #category : #accessing } -RTMapBuilder >> scale [ - ^ scale -] - -{ #category : #accessing } -RTMapBuilder >> scale: aNumber [ - scale := aNumber. -] - -{ #category : #utility } -RTMapBuilder >> translateGeoPositionToPixels: point [ - "From https://github.com/thebyrd/world-news" - - | longitud latitud xFactor xoffset yFactor yoffset | - latitud := point x. - longitud := point y. - - xFactor := 2.6938. - xoffset := 465.4. - - yFactor := -2.6938. - yoffset := 227.066. - ^ ((longitud * xFactor) + xoffset) @ ((latitud * yFactor) + yoffset) -] - -{ #category : #utility } -RTMapBuilder >> translatePixelsToGeoPosition: point [ - "From https://github.com/thebyrd/world-news" - - | xFactor xoffset yFactor yoffset | - - xFactor := 2.6938. - xoffset := 465.4. - - yFactor := -2.6938. - yoffset := 227.066. - - ^ (point y - yoffset / yFactor) @ (point x - xoffset / xFactor) -] - -{ #category : #accessing } -RTMapBuilder >> withPopup [ - self withPopup: [ :e | e asString ] -] - -{ #category : #accessing } -RTMapBuilder >> withPopup: aBlockOrSymbol [ - popup := aBlockOrSymbol -] diff --git a/src/Roassal2/RTMapBuilderExample.class.st b/src/Roassal2/RTMapBuilderExample.class.st deleted file mode 100644 index abaefcd97..000000000 --- a/src/Roassal2/RTMapBuilderExample.class.st +++ /dev/null @@ -1,285 +0,0 @@ -Class { - #name : #RTMapBuilderExample, - #superclass : #RTObject, - #category : #'Roassal2-Builder-Map' -} - -{ #category : #'as yet unclassified' } -RTMapBuilderExample >> citiesExample1 [ - - "self new citiesExample1" - | b | - b := RTMapBuilder new. - - b countries: RTMapBuilder southAmerica. - b cities: #( " (name, population) pairs " - #('Santiago' 6027000) - #('Bogota' 6763000) - #('Buenos Aires' 12801365) - #('Brasilia' 2481000) - #('Montevideo' 1338000) - #('Lima' 8473000) - #('La Paz' 789585) - #('Quito' 1608000) - #('Sao Paulo' 19889559) - #('Caracas' 2104000)) - named: [ :c | c at: 1 ]. - - " Cities' pop-ups show their population " - b cities - withPopup: [ :c | (c at: 1), ': ', (((c at: 2) / 1000000 roundTo: 0.01) asString), 'M']. - - " Cities' size and color depend on the population " - b cities shape - size: [ :c | (c at: 2)/300000 + 10 ]; - if: [ :c | (c at: 2) < 1000000 ] fillColor: (Color green alpha: 0.5); - if: [ :c | (c at: 2) >= 1000000 and: (c at: 2) < 5000000 ] fillColor: (Color yellow alpha: 0.5); - if: [ :c | (c at: 2) >= 5000000 ] fillColor: (Color red alpha: 0.5). - - " We define some routes and color them, then we set the pop-ups to show each route's length " - b routes - from: 'Santiago' toAll: #('Buenos Aires' 'Lima' 'Sao Paulo'); - from: 'Bogota' toAll: #('Sao Paulo' 'Brasilia' 'Quito'); - ifRoute: [ :r | r fromCityName = 'Bogota' ] lineColor: (Color brown); - ifRoute: [ :r | r fromCityName = 'Santiago' ] lineColor: (Color blue); - withPopup: #lengthString. - - " We set the countries' colors, scale, and pop-up " - b color: Color veryVeryLightGray. - b scale: 3. - b withPopup. - - ^ b -] - -{ #category : #'as yet unclassified' } -RTMapBuilderExample >> citiesExample2 [ - - "self new citiesExample2" - | b | - b := RTMapBuilder new. - - b countries: RTMapBuilder countries. - b cities: #( - #('New York City' 8337000) - #('Washington, D.C.' 632323) - #('Paris' 2211000) - #('Santiago' 6027000) - #('Shanghai' 23710000)) - named: [ :c | c at: 1 ]. - - b cities withPopup. - b cities shape - size: [ :c | (c at: 2)/300000 + 10 ]; - color: (Color red alpha: 0.5). - - b routes - from: 'Paris' toAll: #('Santiago' 'New York City' 'Washington, D.C.' 'Shanghai'); - color: Color blue; - withPopup: #lengthString. - - b color: Color veryVeryLightGray. - ^ b -] - -{ #category : #'as yet unclassified' } -RTMapBuilderExample >> cityEvolution [ - - "self new cityEvolution" - | b | - b := RTMapBuilder new. - - b countries: RTMapBuilder southAmerica. - b cities: #( - #('Santiago' #(332724 507296 696231 952075 1353400 1907378 2436398 3650541 4679900 5822316)) - #('Buenos Aires' #(950891 1800000 2200000 2700000 2970000 2966634 2972453 2922829 2965403 2776138)) - #('Sao Paulo' #(240000 400000 900000 1300000 2000000 3700000 5800000 8400000 9500000 10300000)) - #('Lima' #(120000 198875 400000 661508 1200000 1901927 3418452 4835793 6386308 7000000)) - #('Bogota' #(0 0 0 325650 715250 1697311 2855065 4000000 5200000 7000000)) - ) named: [ :c | c at: 1 ]. - - b cities evolveAt: 2 - through: #(1910 1920 1930 1940 1950 1960 1970 1980 1990 2000). " This list is only used for changing a label " - - " Cities' pop-ups show their population " - b cities withPopup: [ :c | - |population| - population := (c at: 2) currentValue. - (c at: 1), ': ', (population = 0 ifTrue: ['no data'] ifFalse: [((population / 1000000 roundTo: 0.01) asString), 'M']) - ]. - - " Cities' size and color depend on the population " - b cities shape - size: [ :c | (c at: 2) currentValue /50000 + 10 ]; - if: [ :c | (c at: 2) currentValue < 1000000 ] fillColor: (Color green alpha: 0.5); - if: [ :c | (c at: 2) currentValue >= 1000000 and: (c at: 2) currentValue < 5000000 ] fillColor: (Color yellow alpha: 0.5); - if: [ :c | (c at: 2) currentValue >= 5000000 ] fillColor: (Color red alpha: 0.5); - if: [ :c | (c at: 2) currentValue = 0 ] fillColor: (Color black alpha: 0.5). - - " We set the countries' colors, scale, and pop-up " - b color: Color veryVeryLightGray. - b scale: 3. - b withPopup. - - ^ b -] - -{ #category : #dbPedia } -RTMapBuilderExample >> queryDBPediaAboutUniversitiesInEurope [ - -" -| map locations rawData rawData2 rawData3 | -map := RTMapBuilder new. - -map countries: #('France' 'Spain' 'Italy'). -map color: Color veryVeryLightGray. - -rawData := DBPediaSearch universitiesIn: 'France'. -rawData2 := ((NeoJSONReader fromString: rawData) at: #results) at: #bindings. -rawData3 := rawData2 select: [ :d | d keys includesAll: #('label' 'long' 'lat') ] thenCollect: [ :d | { (Float readFrom: ((d at: 'long') at: 'value')) . (Float readFrom: ((d at: 'lat') at: 'value')) . (d at: 'label' ) at: 'value' } ]. -locations := rawData3. -locations do: [ :array | - map cities addCityNamed: array third location: array second @ array first ]. -map cities shape size: 8; color: (Color blue alpha: 0.03). -map cities: (locations collect: #third). - - - -rawData := DBPediaSearch universitiesIn: 'Italy'. -rawData2 := ((NeoJSONReader fromString: rawData) at: #results) at: #bindings. -rawData3 := rawData2 select: [ :d | d keys includesAll: #('label' 'long' 'lat') ] thenCollect: [ :d | { (Float readFrom: ((d at: 'long') at: 'value')) . (Float readFrom: ((d at: 'lat') at: 'value')) . (d at: 'label' ) at: 'value' } ]. -locations := rawData3. -locations do: [ :array | - map cities addCityNamed: array third location: array second @ array first ]. -map cities shape size: 8; color: (Color blue alpha: 0.03). -map cities: (locations collect: #third). - -rawData := DBPediaSearch universitiesIn: 'Spain'. -rawData2 := ((NeoJSONReader fromString: rawData) at: #results) at: #bindings. -rawData3 := rawData2 select: [ :d | d keys includesAll: #('label' 'long' 'lat') ] thenCollect: [ :d | { (Float readFrom: ((d at: 'long') at: 'value')) . (Float readFrom: ((d at: 'lat') at: 'value')) . (d at: 'label' ) at: 'value' } ]. -locations := rawData3. -locations do: [ :array | - map cities addCityNamed: array third location: array second @ array first ]. -map cities shape size: 8; color: (Color blue alpha: 0.03). -map cities: (locations collect: #third). - - -map scale: 5. - -map render. -map view openInWindowSized: 1000 @ 500. -" -] - -{ #category : #dbPedia } -RTMapBuilderExample >> queryingDBPedia [ -" -Below I describe a small example that fetches some data about the US Universities from DBPedia and visualize them using Roassal2. - -Pick a fresh 3.0 image. - -First, you need to load Hernán work, Sven’s NeoJSON, and Roassal 2 (If you are using a Moose Image, there is no need to load Roassal2 since it is already in): --=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -Gofer it - smalltalkhubUser: 'SvenVanCaekenberghe' project: 'Neo'; - package: 'ConfigurationOfNeoJSON'; - load. -((Smalltalk at: #ConfigurationOfNeoJSON) load). - -Gofer it - smalltalkhubUser: 'hernan' project: 'DBPedia'; - package: 'DBPedia'; - load. - -Gofer it - smalltalkhubUser: 'ObjectProfile' project: 'Roassal2'; - package: 'ConfigurationOfRoassal2'; - load. -((Smalltalk at: #ConfigurationOfRoassal2) loadBleedingEdge). - --=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - -Using Roassal2, I was able to render some data extracted from dbpedia: - --=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -| map locations rawData rawData2 rawData3 | -map := RTMapBuilder new. - -map countries: #('UnitedStates' 'Canada' 'Mexico'). -map color: Color veryVeryLightGray. - -rawData := DBPediaSearch universitiesInUS. -rawData2 := ((NeoJSONReader fromString: rawData) at: #results) at: #bindings. -rawData3 := rawData2 select: [ :d | d keys includesAll: #('label' 'long' 'lat') ] thenCollect: [ :d | { (Float readFrom: ((d at: 'long') at: 'value')) . (Float readFrom: ((d at: 'lat') at: 'value')) . (d at: 'label' ) at: 'value' } ]. - - -locations := rawData3. -locations do: [ :array | - map cities addCityNamed: array third location: array second @ array first ]. -map cities shape size: 8; color: (Color blue alpha: 0.03). -map cities: (locations collect: #third). - -map scale: 2. - -map render. -map view openInWindowSized: 1000 @ 500. --=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -" -] - -{ #category : #'as yet unclassified' } -RTMapBuilderExample >> simpleExample [ - - "self new simpleExample" - | b | - b := RTMapBuilder new. - - b countries: #('Chile'). - b color: Color red. - b scale: 3. - ^ b -] - -{ #category : #'as yet unclassified' } -RTMapBuilderExample >> southAmericaPopulation [ - - "self new southAmericaPopulation" - | b countries cn sum| - b := RTMapBuilder new. - - countries := RTMapBuilder countriesPopulation select: [ :c | RTSVGPath southAmerica includes: (c at: 1) ]. - sum := (countries collect: [ :c | c at: 2 ])inject: 0 into: [ :acc :n | acc + n ]. - - cn := RTNColorLinearNormalizer - inContext: (countries collect: [:c | c at: 2]) - lowColor: (Color r:0.8 g:0.8 b:1) - highColor: (Color r:0 g:0 b:0.3). - - b countries: countries named: [ :c | c at: 1 ]. - b color: [ :c | cn rtValue: (c at: 2) ]. - b withPopup: [ :c | - (c at: 1) asString, ': ', - (((c at: 2) / sum * 100 asFloat roundTo: 0.01) printString), '%']. - b scale: 2. - ^ b -] - -{ #category : #'as yet unclassified' } -RTMapBuilderExample >> worldPopulation [ - - "self new worldPopulation" - | b countries cn | - b := RTMapBuilder new. - - countries := RTMapBuilder countriesPopulation select: [ :c | RTSVGPath countries includes: (c at: 1) ]. - - cn := RTNColorLinearNormalizer - inContext: (countries collect: [:c | c at: 2]) - lowColor: (Color r:0.8 g:0.8 b:1) - highColor: (Color r:0 g:0 b:0.3). - - b countries: countries named: [ :c | c at: 1 ]. - b color: [ :dic | cn rtValue: (dic at: 2) ]. - b withPopup: [ :c | (c at: 1) asString, ': ',(((c at: 2) / 1000000 asFloat roundTo: 0.001) asString, ' Million') ]. - ^ b -] diff --git a/src/Roassal2/RTMapBuilderTest.class.st b/src/Roassal2/RTMapBuilderTest.class.st deleted file mode 100644 index ba89ca368..000000000 --- a/src/Roassal2/RTMapBuilderTest.class.st +++ /dev/null @@ -1,123 +0,0 @@ -Class { - #name : #RTMapBuilderTest, - #superclass : #RTTest, - #instVars : [ - 'builder' - ], - #category : #'Roassal2-Builder-Map-Tests' -} - -{ #category : #running } -RTMapBuilderTest >> setUp [ - super setUp. - builder := RTMapBuilder new. -] - -{ #category : #tests } -RTMapBuilderTest >> testCities [ - |stgo brasilia saopaulo| - stgo := #('Santiago' 6027000). - brasilia := #('Brasilia' 2481000). - saopaulo := #('Sao Paulo' 19889559). - - builder countries: #('Chile' 'Brazil'). - builder cities: (Array with:stgo with: brasilia with: saopaulo) named: [ :c | c at: 1 ]. - - builder renderIn: builder view. - - self assert: builder view numberOfElements = 5. - self assert: builder view elements third model = stgo. - self assert: builder view elements fourth model = brasilia. - self assert: builder view elements fifth model = saopaulo. -] - -{ #category : #tests } -RTMapBuilderTest >> testCityEvolution [ - | myCities santiago | - myCities := #( - #('Santiago' #(33 41)) - ). - - builder cities: myCities named: [ :c | c at: 1 ]. - builder cities evolveAt: 2 through: #(1907 1920). - self assert: (myCities == builder cityObjects) not. - self assert: ((myCities at: 1) == (builder cityObjects at: 1)) not. - - santiago := builder cityObjects at: 1. - self assert: (santiago at: 2) currentValue = 33. - - builder cities stepBack. - self assert: (santiago at: 2) currentValue = 33. - - builder cities stepForward. - self assert: (santiago at: 2) currentValue = 41. - - builder cities stepForward. - self assert: (santiago at: 2) currentValue = 41. - - -] - -{ #category : #tests } -RTMapBuilderTest >> testCountries [ - | chile france | - chile := #('Chile'). - france := #('France'). - - builder countries: (Array with: chile with: france) named: [ :c | c at: 1 ]. - builder renderIn: builder view. - self assert: builder view numberOfElements = 2. - - self assert: builder view elements first model == chile. - self assert: builder view elements second model == france. -] - -{ #category : #tests } -RTMapBuilderTest >> testGeoLength [ - | santiago paris distance error vdm | - - santiago := -33.45 @ -70.66. - vdm := -33 @ -71.52. - paris := 48.85 @ 2.35. - - distance := builder geoDistanceBetween: santiago and: paris. - error := distance * 0.003. - self assert: (distance - error < 11650 and: distance + error > 11650). - - distance := builder geoDistanceBetween: santiago and: vdm. - error := distance * 0.003. - self assert: (distance - error < 94.35 and: distance + error > 94.35). - - -] - -{ #category : #tests } -RTMapBuilderTest >> testPixelsToGeoTransformations [ - |santiago stgoPixels paris parisPixels pixelsToGeo| - - santiago := -33.45 @ -70.66. - paris := 48.85 @ 2.35. - - pixelsToGeo := [ :p | (builder translatePixelsToGeoPosition: p) roundTo: 0.01]. - - stgoPixels := builder translateGeoPositionToPixels: santiago. - self assert: ((pixelsToGeo value: stgoPixels) closeTo: santiago). - - parisPixels := builder translateGeoPositionToPixels: paris. - self assert: ((pixelsToGeo value: parisPixels) closeTo: paris). - - -] - -{ #category : #tests } -RTMapBuilderTest >> testRoutes [ - builder countries: #('Chile' 'Brazil'). - builder cities: #('Santiago' 'Brasilia' 'Sao Paulo'). - builder routes from: 'Santiago' toAll: #('Brasilia' 'Sao Paulo'). - builder routes from: 'Sao Paulo' toAll: #('Brasilia'). - builder renderIn: builder view. - - self assert: builder view numberOfEdges = 3. - self assert: builder view edges first from model = 'Santiago'. - self assert: builder view edges last from model = 'Sao Paulo'. -] diff --git a/src/Roassal2/RTMapExample.class.st b/src/Roassal2/RTMapExample.class.st deleted file mode 100644 index 078a80fb5..000000000 --- a/src/Roassal2/RTMapExample.class.st +++ /dev/null @@ -1,960 +0,0 @@ -" -RTMapExample new installTitle: 'ColoredAfrica03' - code: - ' - - b := RTMapBuilder new. - - countries := RTMapBuilder africanPopulation. - countriesName := countries collect: #first. - max := (countries collect: [ :c | c at: 2 ]) max. - - cn := RTMultiLinearColor new - colors: (ColorPalette sequential colors: 8 scheme: ''GnBu''); - command: [ :aCountry | (countries detect: [ :c | c first = aCountry ]) second / max ]. - - b countries: countriesName. - b color: cn. - b scale: 2. - b build. - ^ b view' - -" -Class { - #name : #RTMapExample, - #superclass : #RTAbstractExample, - #category : #'Roassal2-Builder-Map' -} - -{ #category : #sources } -RTMapExample >> exampleAfricanPopulation [ - - | b countries cn sum| - b := RTMapBuilder new. - - countries := RTMapBuilder countriesPopulation select: [ :c | RTSVGPath africa includes: (c at: 1) ]. - sum := (countries collect: [ :c | c at: 2 ])inject: 0 into: [ :acc :n | acc + n ]. - - cn := RTNColorLinearNormalizer - inContext: (countries collect: [:c | c at: 2]) - lowColor: (Color r:0.8 g:0.8 b:1) - highColor: (Color r:0 g:0 b:0.3). - - b countries: countries named: [ :c | c at: 1 ]. - b color: [ :c | cn rtValue: (c at: 2) ]. - b withPopup: [ :c | - (c at: 1) asString, ': ', - (((c at: 2) / sum * 100 asFloat roundTo: 0.01) printString), '%']. - b scale: 2. - b build. - ^ b view -] - -{ #category : #icons } -RTMapExample >> exampleAfricanPopulationIcon [ - ^ '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 -RU5ErkJggg==' -] - -{ #category : #sources } -RTMapExample >> exampleCity01 [ - - | b | - b := RTMapBuilder new. - - b countries: RTMapBuilder southAmerica. - b cities: #( " (name, population) pairs " - #('Santiago' 6027000) - #('Bogota' 6763000) - #('Buenos Aires' 12801365) - #('Brasilia' 2481000) - #('Montevideo' 1338000) - #('Lima' 8473000) - #('La Paz' 789585) - #('Quito' 1608000) - #('Sao Paulo' 19889559) - #('Caracas' 2104000)) - named: [ :c | c at: 1 ]. - - " Cities' pop-ups show their population " - b cities - withPopup: [ :c | (c at: 1), ': ', (((c at: 2) / 1000000 roundTo: 0.01) asString), 'M']. - - " Cities' size and color depend on the population " - b cities shape - size: [ :c | (c at: 2)/300000 + 10 ]; - if: [ :c | (c at: 2) < 1000000 ] fillColor: (Color green alpha: 0.5); - if: [ :c | (c at: 2) >= 1000000 and: (c at: 2) < 5000000 ] fillColor: (Color yellow alpha: 0.5); - if: [ :c | (c at: 2) >= 5000000 ] fillColor: (Color red alpha: 0.5). - - " We define some routes and color them, then we set the pop-ups to show each route's length " - b routes - from: 'Santiago' toAll: #('Buenos Aires' 'Lima' 'Sao Paulo'); - from: 'Bogota' toAll: #('Sao Paulo' 'Brasilia' 'Quito'); - ifRoute: [ :r | r fromCityName = 'Bogota' ] lineColor: (Color brown); - ifRoute: [ :r | r fromCityName = 'Santiago' ] lineColor: (Color blue); - withPopup: #lengthString. - - " We set the countries' colors, scale, and pop-up " - b color: Color veryVeryLightGray. - b scale: 3. - b withPopup. - b build. - ^ b view -] - -{ #category : #icons } -RTMapExample >> exampleCity01Icon [ - ^ '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 -AAAASUVORK5CYII=' -] - -{ #category : #sources } -RTMapExample >> exampleCity01WithNames [ - - - | b | - b := RTMapBuilder new. - - b countries: RTMapBuilder southAmerica. - b cities: #( " (name, population) pairs " - #('Santiago' 6027000) - #('Bogota' 6763000) - #('Buenos Aires' 12801365) - #('Brasilia' 2481000) - #('Montevideo' 1338000) - #('Lima' 8473000) - #('La Paz' 789585) - #('Quito' 1608000) - #('Sao Paulo' 19889559) - #('Caracas' 2104000)) - named: [ :c | c at: 1 ]. - - " Cities' pop-ups show their population " - b cities - withPopup: [ :c | (c at: 1), ': ', (((c at: 2) / 1000000 roundTo: 0.01) asString), 'M']. - - " Cities' size and color depend on the population " - b cities shape - size: [ :c | (c at: 2)/300000 + 10 ]; - if: [ :c | (c at: 2) < 1000000 ] fillColor: (Color green alpha: 0.5); - if: [ :c | (c at: 2) >= 1000000 and: (c at: 2) < 5000000 ] fillColor: (Color yellow alpha: 0.5); - if: [ :c | (c at: 2) >= 5000000 ] fillColor: (Color red alpha: 0.5); - withTextAbove: #first. - - " We define some routes and color them, then we set the pop-ups to show each route's length " - b routes - from: 'Santiago' toAll: #('Buenos Aires' 'Lima' 'Sao Paulo'); - from: 'Bogota' toAll: #('Sao Paulo' 'Brasilia' 'Quito'); - ifRoute: [ :r | r fromCityName = 'Bogota' ] lineColor: (Color brown); - ifRoute: [ :r | r fromCityName = 'Santiago' ] lineColor: (Color blue); - withPopup: #lengthString. - - " We set the countries' colors, scale, and pop-up " - b color: Color veryVeryLightGray. - b scale: 3. - b withPopup. - b build. - ^ b view -] - -{ #category : #icons } -RTMapExample >> exampleCity01WithNamesIcon [ - ^ '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 -EoX1ox+KifZ/ZFKa/WzLbnsAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTMapExample >> exampleColoredAfrica [ - - | b countries countriesName max cn | - b := RTMapBuilder new. - - countries := RTMapBuilder africanPopulation. - countriesName := countries collect: #first. - max := (countries collect: [ :c | c at: 2 ]) max. - - cn := RTMultiLinearColor new - colors: (RTColorPalette sequential colors: 8 scheme: 'Reds'); - command: [ :aCountry | (countries detect: [ :c | c first = aCountry ]) second / max ]. - - b countries: countriesName. - b color: cn. - b scale: 2. - b build. - ^ b view -] - -{ #category : #sources } -RTMapExample >> exampleColoredAfrica02 [ - - |b countries countriesName max cn| - b := RTMapBuilder new. - - countries := RTMapBuilder africanPopulation. - countriesName := countries collect: #first. - max := (countries collect: [ :c | c at: 2 ]) max. - - cn := RTMultiLinearColor new - colors: (RTColorPalette sequential colors: 8 scheme: 'Purples'); - command: [ :aCountry | (countries detect: [ :c | c first = aCountry ]) second / max ]. - - b countries: countriesName. - b color: cn. - b scale: 2. - b build. - ^ b view -] - -{ #category : #icons } -RTMapExample >> exampleColoredAfrica02Icon [ - ^ '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' -] - -{ #category : #sources } -RTMapExample >> exampleColoredAfrica03 [ - - |b countries countriesName max cn| - b := RTMapBuilder new. - - countries := RTMapBuilder africanPopulation. - countriesName := countries collect: #first. - max := (countries collect: [ :c | c at: 2 ]) max. - - cn := RTMultiLinearColor new - colors: (RTColorPalette sequential colors: 8 scheme: 'GnBu'); - command: [ :aCountry | (countries detect: [ :c | c first = aCountry ]) second / max ]. - - b countries: countriesName. - b color: cn. - b scale: 2. - b build. - ^ b view -] - -{ #category : #icons } -RTMapExample >> exampleColoredAfrica03Icon [ - ^ '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' -] - -{ #category : #icons } -RTMapExample >> exampleColoredAfricaIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAREklEQVR4XuXdaUwbaZoH8Oxo -58tsz6f5MNJ+Xq20Gu2nXal3NTu7rW1tZ7Stibo3nXQm6el0ksl9AYFAOMJlDoPNZZv7MDYG -bHP5AGwgmMMc4b6PhCOBHJA7IXfgebbe6lTJxlfhJMSkHukvQkK6Sf143vetqtflbYj8L1+q -bfw/BPwH4X/xH4T/IPwv/oPwH4T/xX8Q/oPwv/gPwn8Q/hf/QVzXysoK3L9/Hyq1Whhrb0KN -Wg2V6nKQZ2aA2WwG/oN84KqU58JQqQzWemrRVfDeIp2+tmb+g7yPMpcXw1JLDd4a6oIbVGQZ -6dCSn+IWwTYLw5dpkJleK/+HrHetvr5egNFWXB9LjpATSHZMCDAd0tbawv8O8bbm5uagXpHj -FIOkLOECJ5D4C+dYkNk+Kw4PDwP/QbyojpJMlxgkh7/7E+chK/5CAIvSUKWG62MDONh+Cfo6 -WsFkMjkAvX79GnSaMmg3GSAlPhaePn3KGbG7uxs+ORCDTucSIyfcD7lC2OblzVms06gAHy2j -bRYnhoB0o+3/f3yw3+HrCOKEtgjmdCpUKhTs19dXVUBvWQFa29vo33vw4MGnB1Kc5zhU3Wyu -wtZ8Mbzo0HkF8u3Xf3Q4yLa5PT2KreY66O/vB22JwuFr4eESrgr+yuZ17CFU7/kSmM+fRR3A -59EH8FbIPtQo5PBJgZTlZ7Eg0jA/mKwuwktZCV5BMDHlp7oF8ZQOkx5sQZxl3G8X/TWaU/s+ -HZCqPAmN0VEig/Z8EbwLgm1S/I+8EwiJJ5AT//47GkQlTd36ILrCTOhV57GdkRp8+r1hkMgF -Fz44yHTA9yA9dRDW1ta2NkhhWjINMWUsgfnORtRKhHhg3x7IjAl9bygjxjL80CAkdTLx1p7U -FRnJbFecP3EY8mTpkCESwvc7vwV8cg/b6g1AzR/vDJMrToTNALl+/s/w/Pnzrdsh9zuMNEZd -djIUZUlohPWRiYWw93+/fCeUUXXWpoCQVIee3Jogmuw0ujta5BKYHu6HjOQEpyC5onjApTm0 -6jVglsZ5DdMoi4fYgBNOYZ7fvv7eQEg6K0phS4HoteXsUPXq4R2sKS/BzqZ6pyCShGgahIlS -LPD6fKQqIw7KstMxPVFAw1SVFIEoJgKe3px/ryDmnLStBXKpNJ8GMWYKAZ89QmcQTG6ND6At -CMlwcx3UpMVw7ha1MBysunLAW1eRiVIiQoWMWqLevY6r1H+zpqQQFsYHXQ5tVwJ2byiRR36C -LQGiUBRDXXE2lkpFmJ0mhrHeTlyamXQJYihXwnoQJkZquTxTXeASprMwBaoLZHYQtokMPEuD -2MZQKsfx7jYHmLU+04az2RO81x3SZWkCd11hm4SoCJcgJE9mRrA5K9EBRSm8CHDzCrrCIFm5 -Oox9TUYHFJKakgLotTTAu4BsmSHr/u2bnEFa6w3oDoRJA3V5hEBIgk+BSZUP7iDs4gTDNuqC -TPAGg2Szbxt7DZIpk3EGocMBhCQ1Jpw7BBWVLAU8gZB4C9KukW8NEElGhk+AZCbGeARZW573 -GuSaUYkXzvmDz4MUZMmgzWSE6tJiTjADjQbgAqLKTN0QiFIq9tgdN0Yue4Vhksaz88/U5CT4 -NIiBmjCR+skjKc+xP0OHx3fR2lBrF+bk0F0eXx3B1cVpzhipsREeu+P+lWE8efBHr+YQfVYy -C6Kjzrt8FiQ5LobFYGKpUYM6TwZdtZWcOqG6KBuE4edhos2MXQbthrqC5N54L3KZO7Tp8V5P -6MKocHi8OIPN+kpoNlRhF3XiOz4+Dj4HMjY2Bmu3Z1FPnYgNNBlZlMfU8tUTxKuFadQX5wLe -nkESU2mhHcbScBcmhARAs1bpFunltXEcoTA9gdRJBF7PHwn/+c+g3vFvsBrwf0hy69jXWCiI -gJ6eHvC5IaultgZaqstBniFiu0UUGeq2O0xlcrhLfrLfYjA59uOf2YOf9PnvIWfbr5Ek6B/+ -Cb775WeQ53capX6n6V//8ItfQcLnv0f/v/01nDn0o9sh69ZYL77uqfMK4yl1aeeV37fIYNhG -FBEC1vZ28CkQazN1wvX0AXY1N2Bc6Hlo0WlAW5gNOaIEVEhTQBwdbofTWlOOj6YHHTCY6BW5 -mJUkYDG4ZM9vfgs1yny3HSIKOObVkNWy5wtwhkGiEoRC7MUwtyBtbW0wNDQEmwZC7qqpS1Uw -bqXO2O8u4Po8nhu36w6DMo8epqasjSiOCoXooLNYnJ4MscH+qCArq/s3kESy7TNOGNlUWkoL -IMXDxL535zcbBlGHHHOJQZIQHQGxYSFAthsxx2N+fh4mhvohPjwErvRQ3XPvBo6OjsKm3w9J -E8azIPHhwXB3ephFiQnygyrqWlVaTBikRofSnfDy2gTC3BCbBq0S22urWJBMjt2R9qcdMNVS -C/RGOlfzh7YMkFrxdZXlcka5YSpFdxhMLlWowKLTYlleJn3wmaxcn6Y/Lk0MfrxbuOQOobmy -nF4imsh9hLcgRgU1ed+gLjq+zZ3hDvrjFYuBBZlqN2NZQRYNcvQ//sB5yBoyV0NSRLADxmh7 -A4VcguWFOTQGiT5LxBkk5thfOIFMHvgKckUJdhgk1A8X/VFXXgIfDWR1dZVdr5ur1FinLqFR -kqhlrS0IE3F4IDAgutw0uDc/SXeHlONwdeaL/wLqOjuSmMvlLEr/pVogS1MGgsnS1QmolArB -80SuR+PR74ALCJOrh7aD6cJx6DEbYHGkF+cHu2kQZzsqN3XXSYrw53verfV66iTxLvofPwJL -Q1YHjNfzo/j6aj/bIXFBp8GgVtIgXDDit/0drl0fQwZEk5MBHdTBSKNuWK0+WMb1GLZJCznj -FqWvRIqJu7dvCITJ49M7sE1fQWPQP5C+sC/r8uVuuGwx0yDPlhcQFiccQDJiw8B2Dpm6pIMH -16bx5e05jKQOdsi2XzmH2LUTlgfboaNGxXbHylQvjnS1gTuE9WnIS/XYKUX7d2wI5YXfN9hp -rGSHr9Z32KX/3jfKkeFLo1LQKMOdLQ5D1sp0Pz4Z66QxRs2V1BBjgjt37tj9A85v/9puLgn5 -x9+xCLYRBJ3dEAbJzFAvXKnXuAWZrMzHzr1fcEJ5Q6XHWMFiXNJXgU/tXGSq0VwPorho0OZK -QFdVCW/evKG/0WvXroFKIQelvAjcLamDf/EZxPzNZ3DyN38PMYGnnYLUFmc7gJQlRUHRib3Q -bKymP5+yNqE++SIY/X+AWeFZWC2IxBsp53BYnQ0G6hbyjE5u1zFPrTpsk8VCQ0oEFHzzB5cQ -Fuo8RRIfDd1mAzuhz/Z3wsOHD30T5H0W2UB92ahxilKWK6MPvEGtgnRqCf46/yKSg85kKuE0 -2H6+Ppbgn6A4JggTTh2E5SYNCk7+BGvtWmTSKY0C+R//FfK++hdoz4yFyP07gTrwuH51BXcX -sauzE3xi5+JmVL2+2ikIyckjh+ghcuxyu9uD7yoxJ/bDWr8ZmWQFHbVDsU1q7EVwhjE5NgI+ -sVFus0pNzUsPbs6jOEEAek0p5ElToUJZiOK4KMxOTaZB+ovSvAIpDDxsB5Jx/oRLkKzkeLA/ -76gGq9UKPrNzcbPq1NHDFEI6Wur1SK6hPb1zA5V5WTQEE8F3/7NhkJIgewySviIRugLJpy73 -MBiZae9/H/CWAVlZXqQhbDPZ12kHUnxk54ZBYo7vt8OoTY9x2R0kJdkSGsNsNPjW1d7NrNyc -bFiPQdLeUMeCmLUlXg1X0pBTKA44AumBx6EiMRQER/e5BclPTYIcSbrv3Q/ZzCLnNsvz0yxE -i8lAf+xtu0SDNFJnyN5gxO/+Cp7MT2Dsod2w2qRAJt2yaKiKC3IKI0+I+KCvH9kyQ9ZAfx/d -JQVZEpge6IbBDgs+uTVPd0fNxTNedUcitbqqVuTjZHGyHQiT6lh/aEqPZDEWmirBZzc5fIwa -pFBSyCZrm3mDxHjuR69A4nZ9BYMtZhgpSHAKQhL3191sp0xPT/MfZH2Vq5SQJoiEijwp1Cnz -sDPWu+4gEVIXEvVxAegKg0mzOBQTQ/x9exvQxyzRyf1wTxKMt9MC0VsMkpvUJRRPGEw28vAB -3oHkpFHnAuRK8ttQV4G9AnlDXWa5ockATxivG+Q4NDjAfxC3ZQNCkuN3kB66ltODsDxTDOkR -gWiIOusRRX18F6cO6a4o5j+IuypOS4T1KBaNHJ5M9rKfJ4UFup1fik7tgwcmFZZEnPbYJS01 -av6DuKtXc8MOXbI+yWHnXILcSg2023l5c6SbPKEIs/wPOAWpSzzPfxB31UA2VXgAIXHXIeu3 -w5Lcn+zDJ7X5TlEqSpX8X/a6O3vnAlInjUfqBhee/PJzGIg+xnZMfcAPDvuTV+bGEJdmUHhs -LzuETRYngeDQLtDJEkEuFvAfxFXV1ho5gbAhw9JwN6pEsVAhjgHxnu2gJi/2sQGZ7WmlQVrV -hQDzQ3jzciOSj0xyEyM9ggBV73I5fkuCLC8vw6CpyiPI2CU9LPS14ZMrgw5D063RHmy/cBCe -zo+zv6fNl+Ij6mvLJEKwhWAyVK/1vNiQy6FFW8wvkD6ys4VDV5SR55Y4mSdcZfeOr+HxzBA2 -qIuhu1rpgLLY3eD2+9LpdNCpK6XubI55fSK5JUF6qfvrXEDyRQKPIOSJqbLYUPbgr84OYHzo -Oeirr0RnXeJy1ffqFUx1NtEYJDVVlfwAmZmZ4Tx3ZMSEuQVp0Cjh5MG/gDDEDwgEc9CXxy5j -anSoQ4eU58mcHmRtacnb/WI/Y0hiw6BeV8UPEIFAAI+pk787Qx2cUMjzVZxh5IoTYKanlf2z -3gY9zFpNNEKLpsgBoyTL8VEbL168YBFs06wu4s8cQsZpXKFuVFERRIRBfFQEJMVGgSiOWjnF -x0JhSjy0VShgibq+RYa20sxUSIyJhO1f/jcEnjgCluoyuxcZ2Z2DUJ2xHkKRmQ7k8efOvper -w33oDKSnrZlfy95e8sjxtyiuQnbkd7c00ncWr0+O0De3Gg1VbocwsqxlINbmBrFQ5v5WbZmy -2GmHmM0mfq2yyGscPYEo8pzfh48LD3GJknTBnwZZ6mvG/t4eTucc6zEmmg3AyxNDnbrULUql -qtgpCEmNSu4UxFKWT4P0NdVyOqhdHVYHkJ6WRn6CtLa2ugWpr9a6BCEJPn0cgLzc7i1GVYHM -brjydB7x8uVLGKW6YT3ImBcvY/skQEg11dc6RRmwtqA7DBJYuY8Cv6NgksRBaVKkw6oqPzfH -7YE1GhwxrrbXA2+vZZEqKixwCjLU1eYWo9VshJ6McFity0Mmz6fsV1galecruy9nB+1A+prr -+A2SnZW1YRDSGQOySDsMEoM0wa5L2poaPB5ceWqCXZfUVFfzG+TZs2dOQQrTk+kDzyDMjw/R -88mbx3fxuiIJ12OQmHOSYWWiC1sNlUBfDeBQ169MwmyHGRZ7moF+gh2fL7+z84ih2gFFX5j5 -84t5KATy7HlywIWHv4f2lAvgDEMUdAqMyjwQJiZ+9Pcm2fIgV8jrMpyAzKhl2CgOdwqwPvqi -bJCnClGZK+M/yLvW7OwsrNxexNyMVLAF4QKxPr29PfwHeR9lsVigMTEQJKJEqFIpwJLiuTMu -HvsJLEnn2c+7pVE+8VZKn8wbS1L3zoFrJ0guBtHzS050MP13yKNofeXf8cmALCwswGtjDicQ -S/J56CwQ07+eKUqER48e8R/kQ5SpXAEbmTNul6V8sOde8R+EKvIAHK4Y1tRQ6O7u8rm34Puk -QMhL3zxB6KLPQJeu3GffC/GTAiG3VAsifj4RVF70A5NayT5kbHJykn2ahC8X/9++m/8g/C/+ -g/AfhP/FfxD+g/C/+A/CfxD+F/9B+A/C/+I/CP/LZf0/s7zN1BIhG9gAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTMapExample >> exampleSouthAmericaPopulation [ - - | b countries cn sum| - b := RTMapBuilder new. - - countries := RTMapBuilder countriesPopulation select: [ :c | RTSVGPath southAmerica includes: (c at: 1) ]. - sum := (countries collect: [ :c | c at: 2 ])inject: 0 into: [ :acc :n | acc + n ]. - - cn := RTNColorLinearNormalizer - inContext: (countries collect: [:c | c at: 2]) - lowColor: (Color r:0.8 g:0.8 b:1) - highColor: (Color r:0 g:0 b:0.3). - - b countries: countries named: [ :c | c at: 1 ]. - b color: [ :c | cn rtValue: (c at: 2) ]. - b withPopup: [ :c | - (c at: 1) asString, ': ', - (((c at: 2) / sum * 100 asFloat roundTo: 0.01) printString), '%']. - b scale: 2. - b build. - ^ b view -] - -{ #category : #icons } -RTMapExample >> exampleSouthAmericaPopulationIcon [ - ^ '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 -iAAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTMapExample >> exampleWorldPopulation [ - - | b countries cn | - b := RTMapBuilder new. - - countries := RTMapBuilder countriesPopulation select: [ :c | RTSVGPath countries includes: (c at: 1) ]. - - cn := RTNColorLinearNormalizer - inContext: (countries collect: [:c | c at: 2]) - lowColor: (Color r:0.8 g:0.8 b:1) - highColor: (Color r:0 g:0 b:0.3). - - b countries: countries named: [ :c | c at: 1 ]. - b color: [ :dic | cn rtValue: (dic at: 2) ]. - b withPopup: [ :c | (c at: 1) asString, ': ',(((c at: 2) / 1000000 asFloat roundTo: 0.001) asString, ' Million') ]. - b build. - ^ b view -] - -{ #category : #icons } -RTMapExample >> exampleWorldPopulationIcon [ - ^ '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 -TkSuQmCC' -] - -{ #category : #accessing } -RTMapExample >> label [ - ^ 'Geographical maps' -] diff --git a/src/Roassal2/RTMapLocationBuilder.class.st b/src/Roassal2/RTMapLocationBuilder.class.st deleted file mode 100644 index b4133d264..000000000 --- a/src/Roassal2/RTMapLocationBuilder.class.st +++ /dev/null @@ -1,1481 +0,0 @@ -Class { - #name : #RTMapLocationBuilder, - #superclass : #RTBuilder, - #instVars : [ - 'addedElements' - ], - #category : #'Roassal2-Builder-Map' -} - -{ #category : #adding } -RTMapLocationBuilder >> addPoint: geoPoint value: aValue [ - - | el | - el := self elementOn: aValue. - el translateTo: (self translateGeoPositionToPixels: geoPoint). - el @ RTPopup. - view add: el. - - "We keep track of the added elements" - addedElements add: el -] - -{ #category : #hooks } -RTMapLocationBuilder >> createView [ - | v | - v := super createView. - self renderAllCountriesIn: v. - v @ RTDraggableView. - ^ v -] - -{ #category : #examples } -RTMapLocationBuilder >> example01 [ - - " - self new example01 - " - | paris london santiago b | - paris := 48.8567 @ 2.3508. - london := 51.507222 @ -0.1275. - santiago := -33.45 @ -70.666667. - - b := RTMapLocationBuilder new. - b shape circle - size: #yourself; - color: (Color red alpha: 0.4). - b addPoint: paris value: 10. - b addPoint: london value: 15. - b addPoint: santiago value: 20. - ^ b -] - -{ #category : #examples } -RTMapLocationBuilder >> example02 [ - " - self new example02 - " - | b tab | - tab := RTTabTable new input: self seismData usingDelimiter: $,. - tab removeFirstRow. - tab convertColumnsAsFloat: #(2 3 4 5). - b := RTMapLocationBuilder new. - b shape circle - size: [ :v | (2 raisedTo: v) / 2 ]; - color: (Color red alpha: 0.3). - tab values do: [ :row | b addPoint: row second @ row third value: row fifth ]. - ^ b -] - -{ #category : #examples } -RTMapLocationBuilder >> example03Normalizer [ - - " - self new example03Normalizer - " - | paris london santiago b newYork | - paris := 48.8567 @ 2.3508. - london := 51.507222 @ -0.1275. - santiago := -33.45 @ -70.666667. - newYork := 40.7127 @ -74.0059. - - b := RTMapLocationBuilder new. - b shape circle. - b addPoint: paris value: 10. - b addPoint: london value: 15. - b addPoint: santiago value: 20. - b addPoint: newYork value: 30. - b normalizer normalizeSize: #yourself max: 50; normalizeColor: #yourself; alphaColor: 0.3. - ^ b -] - -{ #category : #initialization } -RTMapLocationBuilder >> initialize [ - super initialize. - addedElements := OrderedCollection new -] - -{ #category : #hooks } -RTMapLocationBuilder >> metricNormalizerClass [ - ^ RTMetricNormalizer -] - -{ #category : #hooks } -RTMapLocationBuilder >> normalizer [ - " - :: Void->RTMetricNormalizer - - This metric normalizer assumes that elements have been already created. Which may not be the case... - " - ^ super normalizer elements: addedElements; yourself -] - -{ #category : #utility } -RTMapLocationBuilder >> renderAllCountriesIn: aView [ - | el shape | - RTSVGPath countries - do: [ :name | - shape := RTSVGPath new path: (RTSVGPath perform: name). - shape borderColor: Color lightGray. - el := shape elementOn: name asString. - el @ RTPopup. - aView add: el ] -] - -{ #category : #examples } -RTMapLocationBuilder >> seismData [ - ^ 'time,latitude,longitude,depth,mag,magType,nst,gap,dmin,rms,net,id,updated,place,type -2014-05-25T01:39:20.040Z,-0.7851,-14.2823,10,4.5,mb,,197,7.1,0.59,us,usb000r36t,2014-05-25T02:09:12.227Z,"North of Ascension Island",earthquake -2014-05-25T01:33:15.400Z,40.3885002,-124.987999,1.11,3.52,ml,65,253,0.5418,0.17,nc,nc72226741,2014-05-25T02:34:10.843Z,"64km WSW of Ferndale, California",earthquake -2014-05-25T01:29:34.680Z,32.5268,141.5741,41.83,4.5,mb,,137,1.594,0.64,us,usb000r36i,2014-05-25T01:58:00.878Z,"177km ESE of Hachijo-jima, Japan",earthquake -2014-05-25T00:08:01.860Z,40.0084,24.2593,10,4.5,mb,,40,1.361,1.44,us,usb000r34s,2014-05-25T00:46:22.709Z,"25km ESE of Sarti, Greece",earthquake -2014-05-24T22:02:19.000Z,67.6931,-162.4102,7.2,3.1,ml,,,,0.77,ak,ak11272548,2014-05-25T01:04:55.000Z,"27km ENE of Noatak, Alaska",earthquake -2014-05-24T20:58:07.070Z,-6.2569,104.1452,60.97,5.2,mb,,60,2.225,0.91,us,usb000r2z6,2014-05-25T01:02:08.954Z,"99km SSW of Kotaagung, Indonesia",earthquake -2014-05-24T20:41:18.800Z,38.8083,-122.7987,3.6,2.5,Md,54,21.6,0,0.04,nc,nc72226676,2014-05-25T00:29:21.707Z,"5km NW of The Geysers, California",earthquake -2014-05-24T20:10:04.000Z,63.1515,-150.4677,100,2.7,ml,,,,0.85,ak,ak11272450,2014-05-24T20:33:00.118Z,"80km WSW of Cantwell, Alaska",earthquake -2014-05-24T19:06:29.000Z,59.3773,-155.7452,100,2.7,ml,,,,3.52,ak,ak11272262,2014-05-24T19:29:44.199Z,"62km SW of Old Iliamna, Alaska",earthquake -2014-05-24T18:40:48.700Z,18.516,-64.8404,20,3,Md,7,316.8,0.19493442,0.25,pr,pr14144010,2014-05-24T19:08:10.866Z,"21km NNE of Charlotte Amalie, U.S. Virgin Islands",earthquake -2014-05-24T16:50:02.480Z,40.0003,24.3356,10,4.5,mb,,40,1.42,0.86,us,usb000r2sa,2014-05-24T22:02:25.397Z,"29km SSE of Karyes, Greece",earthquake -2014-05-24T16:26:20.000Z,19.1648,-64.612,24,3,Md,8,295.2,0.87136583,0.1,pr,pr14144009,2014-05-25T00:30:43.182Z,"82km N of Road Town, British Virgin Islands",earthquake -2014-05-24T15:08:44.100Z,18.8752,-67.3619,10,2.7,Md,7,280.8,0.46892058,0.23,pr,pr14144007,2014-05-24T23:11:10.272Z,"50km NNW of San Antonio, Puerto Rico",earthquake -2014-05-24T14:49:16.100Z,40.4133,25.9081,10,4.8,mb,,38,2.635,1.01,us,usb000r2nx,2014-05-24T19:52:52.473Z,"23km N of Gokceada, Turkey",earthquake -2014-05-24T13:46:52.300Z,18.1404,-67.287,21,2.6,Md,11,194.4,0.1940361,0.1,pr,pr14144006,2014-05-24T21:49:26.175Z,"12km NW of Puerto Real, Puerto Rico",earthquake -2014-05-24T12:37:26.000Z,18.805,-68.1386,68,3.3,Md,11,241.2,0.3701059,0.25,pr,pr14144004,2014-05-24T20:39:54.439Z,"37km NE of Punta Cana, Dominican Republic",earthquake -2014-05-24T11:49:26.320Z,0.7273,-26.3481,10,5.2,mb,,48,11.55,0.57,us,usb000r2j9,2014-05-24T21:56:34.000Z,"Central Mid-Atlantic Ridge",earthquake -2014-05-24T11:33:08.650Z,40.3041,25.6303,10,4.5,mb,,37,0.671,0.78,us,usb000r2iq,2014-05-24T18:41:22.739Z,"24km SE of Kamariotissa, Greece",earthquake -2014-05-24T11:09:29.610Z,53.6116,-164.9217,26.87,4.2,mb,,158,0.727,1.16,us,usb000r2ih,2014-05-24T19:12:10.715Z,"80km SE of Akutan, Alaska",earthquake -2014-05-24T09:25:03.410Z,40.3046,25.4532,10,6.9,mwc,,25,0.745,0.74,us,usb000r2hc,2014-05-25T01:53:19.385Z,"19km S of Kamariotissa, Greece",earthquake -2014-05-24T08:24:47.560Z,16.5405,-98.1544,12,5.6,mwb,,99,2.94,1.25,us,usb000r2gj,2014-05-24T19:32:07.996Z,"8km S of San Juan Cacahuatepec, Mexico",earthquake -2014-05-24T07:50:15.790Z,-15.2933,-71.9734,115.26,4.1,mb,,114,3.435,1.44,us,usb000r2fk,2014-05-24T15:52:57.600Z,"39km E of Orcopampa, Peru",earthquake -2014-05-24T07:27:29.910Z,30.5448,35.1641,10,4.1,mb,,186,4.666,1.11,us,usb000r2f5,2014-05-24T20:36:28.015Z,"35km ESE of Mizpe Ramon, Israel",earthquake -2014-05-24T07:01:29.000Z,67.707,-162.4206,4.3,2.8,ml,,,,0.67,ak,ak11271031,2014-05-24T15:04:39.337Z,"27km ENE of Noatak, Alaska",earthquake -2014-05-24T06:58:48.200Z,19.1189,-64.817,45,3,Md,6,291.6,0.7231438,0.18,pr,pr14144002,2014-05-24T15:01:14.731Z,"80km NNW of Road Town, British Virgin Islands",earthquake -2014-05-24T06:56:56.800Z,18.5505,-64.8421,9,2.7,Md,7,223.2,0.22457882,0.25,pr,pr14144001,2014-05-24T14:59:37.684Z,"24km NNE of Charlotte Amalie, U.S. Virgin Islands",earthquake -2014-05-24T06:47:31.450Z,-15.2899,-73.8308,70.18,5.1,mb,,127,4.398,1.02,us,usb000r2eb,2014-05-24T14:50:04.601Z,"28km S of Coracora, Peru",earthquake -2014-05-24T06:33:42.600Z,36.8057,-121.5345,6.8,2.5,Md,56,39.6,0.04491576,0.07,nc,nc72226416,2014-05-24T17:12:56.370Z,"4km S of San Juan Bautista, California",earthquake -2014-05-24T06:13:44.830Z,-33.48,179.2782,262.14,4.3,mb,,104,4.149,1.12,us,usb000r2ds,2014-05-24T14:16:24.740Z,"284km SW of LEsperance Rock, New Zealand",earthquake -2014-05-24T06:09:48.000Z,52.296,-178.95,62.1,2.8,ml,,,,0.62,ak,ak11271011,2014-05-25T00:48:43.005Z,"71km NW of Tanaga Volcano, Alaska",earthquake -2014-05-24T06:04:10.000Z,63.1787,-150.3954,100,2.7,ml,,,,0.79,ak,ak11270988,2014-05-24T14:08:32.593Z,"76km WSW of Cantwell, Alaska",earthquake -2014-05-24T06:02:23.100Z,25.9181,125.748,41.8,4.7,mb,,101,2.442,0.84,us,usb000r2di,2014-05-24T14:04:56.416Z,"132km NNE of Hirara, Japan",earthquake -2014-05-24T06:02:15.000Z,51.1827,179.4489,62.8,2.9,ml,,,,0.56,ak,ak11270986,2014-05-25T00:48:46.153Z,"86km S of Semisopochnoi Island, Alaska",earthquake -2014-05-24T05:33:14.610Z,35.1357,-97.8269,4.87,2.8,mb_lg,,61,0.369,0.63,us,usa000qd4i,2014-05-24T22:51:57.129Z,"13km NE of Chickasha, Oklahoma",earthquake -2014-05-24T04:12:22.000Z,62.1386,-148.0244,17.2,2.9,ml,,,,0.6,ak,ak11270936,2014-05-24T12:15:44.795Z,"57km NE of Sutton-Alpine, Alaska",earthquake -2014-05-24T03:44:47.700Z,36.809,-121.5383,6.9,3,Ml,66,39.6,0.02694946,0.08,nc,nc72226246,2014-05-24T21:41:30.556Z,"4km S of San Juan Bautista, California",earthquake -2014-05-24T02:39:18.500Z,19.6637,-65.9586,84,3.3,Md,3,349.2,1.38789711,0,pr,pr14144000,2014-05-24T10:42:21.090Z,"133km N of San Juan, Puerto Rico",earthquake -2014-05-23T23:41:49.670Z,45.0087,-27.8674,10,5.2,mb,,28,6.289,0.8,us,usb000r26g,2014-05-24T15:56:37.000Z,"Northern Mid-Atlantic Ridge",earthquake -2014-05-23T23:36:12.230Z,45.0429,-28.0061,10,4.6,mb,,56,6.319,1.21,us,usb000r26c,2014-05-24T07:38:53.605Z,"northern Mid-Atlantic Ridge",earthquake -2014-05-23T23:12:43.250Z,50.0625,-178.6596,31.65,4.3,mb,,206,2.029,0.93,us,usb000r254,2014-05-24T07:15:21.632Z,"137km SSE of Amatignak Island, Alaska",earthquake -2014-05-23T21:55:26.920Z,25.9394,97.6454,43.52,4.2,mb,,97,4.673,0.81,us,usb000r23p,2014-05-24T06:00:52.554Z,"66km NNE of Myitkyina, Burma",earthquake -2014-05-23T21:40:40.020Z,18.9556,145.0559,551.3,4.4,mb,,34,5.338,0.67,us,usb000r226,2014-05-24T05:43:20.921Z,"67km WNW of Agrihan, Northern Mariana Islands",earthquake -2014-05-23T21:33:04.210Z,52.3992,-178.4241,87.2,4.2,mb,,161,1.19,1.34,us,usb000r21e,2014-05-24T05:35:59.159Z,"Andreanof Islands, Aleutian Islands, Alaska",earthquake -2014-05-23T21:20:06.900Z,18.9815,145.0416,557.77,5.5,mb,,23,5.364,0.8,us,usb000r209,2014-05-24T15:56:35.000Z,"Pagan region, Northern Mariana Islands",earthquake -2014-05-23T20:51:46.000Z,59.0724,-154.5241,100,2.6,ml,,,,1.28,ak,ak11270656,2014-05-24T17:12:26.000Z,"88km SSE of Old Iliamna, Alaska",earthquake -2014-05-23T20:49:22.090Z,24.926,97.809,10,5.8,mww,,32,4.477,0.93,us,usb000r1y6,2014-05-24T17:01:05.878Z,"23km NNW of Pingyuan, China",earthquake -2014-05-23T20:25:57.060Z,-16.3105,-174.6314,219.8,4.6,mb,,55,3.646,0.91,us,usb000r1wm,2014-05-24T16:09:38.265Z,"102km WSW of Hihifo, Tonga",earthquake -2014-05-23T19:57:58.510Z,-35.7717,-73.7328,11.32,4.1,mwr,,204,1.212,1.69,us,usb000r24u,2014-05-24T15:58:42.269Z,"117km NW of Tome, Chile",earthquake -2014-05-23T19:49:54.000Z,61.6525,-149.8939,25.5,2.6,ml,,,,0.66,ak,ak11270625,2014-05-24T15:10:44.000Z,"8km WNW of Houston, Alaska",earthquake -2014-05-23T19:42:28.130Z,56.0764,113.9536,10.79,5.4,mww,,27,7.515,0.69,us,usb000r1sc,2014-05-24T15:04:30.820Z,"33km ESE of Severomuysk, Russia",earthquake -2014-05-23T18:00:54.870Z,51.4002,179.2846,73.45,4.2,mb,,204,2.557,0.97,us,usb000r1jx,2014-05-24T13:49:40.812Z,"65km SSW of Semisopochnoi Island, Alaska",earthquake -2014-05-23T15:57:13.900Z,-31.334,-69.2079,204.53,4.3,mb,,172,1.363,0.95,us,usb000r1c0,2014-05-24T00:00:37.378Z,"19km E of Calingasta, Argentina",earthquake -2014-05-23T14:14:57.580Z,32.3316667,-115.1843333,10.99,3.22,ml,9,273,0.1345,0.26,ci,ci15504753,2014-05-23T15:00:43.475Z,"2km SSE of Delta, Mexico",earthquake -2014-05-23T13:20:35.250Z,12.3077,-87.3531,73.54,4.5,mb,,155,0.497,0.79,us,usb000r13u,2014-05-23T21:24:13.415Z,"27km SW of Corinto, Nicaragua",earthquake -2014-05-23T11:55:17.820Z,-7.1962,155.091,10,4.9,mb,,45,4.17,0.59,us,usb000r12e,2014-05-24T10:21:07.760Z,"106km SSW of Panguna, Papua New Guinea",earthquake -2014-05-23T11:46:42.670Z,1.5862,121.5791,48.36,4.3,mb,,112,2.869,1.27,us,usb000r12a,2014-05-24T07:32:10.129Z,"49km NNE of Kali, Indonesia",earthquake -2014-05-23T10:01:24.500Z,18.7231,-64.3312,62,2.7,Md,3,352.8,0.69619435,0.2,pr,pr14143003,2014-05-23T18:03:57.932Z,"45km NE of Road Town, British Virgin Islands",earthquake -2014-05-23T09:54:27.800Z,38.7005,-111.7483,9.5,2.8,Ml,,61.2,0.26949459,0.25,uu,uu60069702,2014-05-23T18:00:00.139Z,"29km SSE of Aurora, Utah",earthquake -2014-05-23T09:34:00.350Z,-11.5002,161.9882,18.14,5.1,mb,,45,2.867,1.06,us,usb000r0zy,2014-05-23T17:36:33.842Z,"115km S of Kirakira, Solomon Islands",earthquake -2014-05-23T09:13:34.400Z,-11.0385,161.5021,37.43,5.3,mb,,59,2.206,1.04,us,usb000r0zd,2014-05-23T17:16:08.633Z,"79km SW of Kirakira, Solomon Islands",earthquake -2014-05-23T09:06:57.500Z,-6.9444,102.5705,29.71,5.2,mb,,82,2.595,1.08,us,usb000r0z7,2014-05-23T17:09:37.754Z,"240km SW of Biha, Indonesia",earthquake -2014-05-23T08:22:25.660Z,-7.0472,102.5498,32.55,4.8,mb,,82,2.699,0.78,us,usb000r0y9,2014-05-23T16:25:01.827Z,"250km SW of Biha, Indonesia",earthquake -2014-05-23T08:22:19.490Z,35.5245,-97.2159,7.03,2.9,mb_lg,,29,0.114,0.66,us,usb000r0y7,2014-05-24T02:58:36.381Z,"5km ENE of Choctaw, Oklahoma",earthquake -2014-05-23T07:50:21.520Z,39.5397,143.6015,35,4.5,mb,,124,2.495,1.13,us,usb000r0xs,2014-05-23T15:52:56.489Z,"142km E of Miyako, Japan",earthquake -2014-05-23T07:28:33.580Z,-6.9608,102.637,29.97,4.6,mb,,106,2.602,0.84,us,usb000r0xa,2014-05-23T15:32:04.216Z,"237km SW of Biha, Indonesia",earthquake -2014-05-23T07:17:40.200Z,19.6439,-65.2289,9,3.3,Md,14,262.8,1.31154031,0.28,pr,pr14143000,2014-05-23T15:20:22.045Z,"147km NNW of Charlotte Amalie, U.S. Virgin Islands",earthquake -2014-05-23T07:05:18.000Z,62.3372,-149.0521,8.2,3.5,ml,,,,1.02,ak,ak11270189,2014-05-23T15:07:52.947Z,"45km ENE of Y, Alaska",earthquake -2014-05-23T07:00:34.940Z,-45.561,167.3252,80.68,4.3,mb,,57,0.547,1.39,us,usb000r0wn,2014-05-23T15:03:06.044Z,"34km WSW of Te Anau, New Zealand",earthquake -2014-05-23T05:58:19.110Z,-4.5434,141.6635,67.39,4.5,mb,,166,7.285,0.92,us,usb000r0u8,2014-05-23T14:00:47.070Z,"135km WSW of Ambunti, Papua New Guinea",earthquake -2014-05-23T05:02:44.800Z,4.2808,125.5354,48.61,4.5,mb,,101,3.936,0.88,us,usb000r0sy,2014-05-23T13:05:12.870Z,"124km S of Sarangani, Philippines",earthquake -2014-05-23T04:44:15.710Z,-7.8461,123.0925,276.45,4.1,mb,,152,1.153,0.6,us,usb000r0sp,2014-05-23T12:47:15.558Z,"80km NNE of Palue, Indonesia",earthquake -2014-05-23T03:21:09.610Z,-17.6555,-178.7237,562.77,4.5,mb,,79,3.074,0.73,us,usb000r0rr,2014-05-23T11:23:50.751Z,"243km SE of Lambasa, Fiji",earthquake -2014-05-23T03:20:36.400Z,18.2031,-66.8531,26,2.5,Md,17,72,0.13564561,0.12,pr,pr14143002,2014-05-23T11:23:12.513Z,"7km NW of Adjuntas, Puerto Rico",earthquake -2014-05-23T03:01:48.660Z,-17.475,-178.6977,546.47,4.5,mb,,55,3.11,0.59,us,usb000r0ri,2014-05-23T11:04:28.818Z,"235km ESE of Lambasa, Fiji",earthquake -2014-05-23T01:35:37.900Z,40.725,-124.2628,24,2.8,Md,17,198,0.3233935,0.06,nc,nc72225856,2014-05-23T09:38:09.776Z,"6km W of Humboldt Hill, California",earthquake -2014-05-22T23:41:43.000Z,67.7074,-162.5553,22,3.7,ml,,,,1.14,ak,ak11270060,2014-05-23T07:44:28.103Z,"23km NE of Noatak, Alaska",earthquake -2014-05-22T20:47:47.000Z,18.648,-67.3984,84,2.9,Md,12,198,0.27218953,0.07,pr,pr14142008,2014-05-23T04:50:18.664Z,"35km NW of Aguadilla, Puerto Rico",earthquake -2014-05-22T20:17:26.940Z,9.193,122.242,42.9,4.7,mb,,122,6.743,0.73,us,usb000r05u,2014-05-23T03:31:25.629Z,"46km SW of Colipapa, Philippines",earthquake -2014-05-22T20:00:01.570Z,2.1686,96.5833,61.13,4.8,mb,,128,1.312,1,us,usb000r03k,2014-05-23T04:03:26.578Z,"41km SSE of Sinabang, Indonesia",earthquake -2014-05-22T18:45:57.130Z,-4.5927,133.6254,30.6,4.5,mb,,134,2.156,0.62,us,usb000qzyc,2014-05-23T02:49:56.498Z,"145km NNW of Dobo, Indonesia",earthquake -2014-05-22T18:01:21.600Z,36.761,-98.362,5,2.5,ml,,,,0.65,us,usb000qzx5,2014-05-22T19:01:15.946Z,"0km NNW of Cherokee, Oklahoma",earthquake -2014-05-22T17:57:11.800Z,19.176,-64.222,24,2.9,Md,3,338.4,1.07348676,0.1,pr,pr14142006,2014-05-23T01:59:41.134Z,"93km NNE of Road Town, British Virgin Islands",earthquake -2014-05-22T16:22:13.710Z,-11.4625,161.5948,33.02,4.9,mb,,44,2.582,0.51,us,usb000qzny,2014-05-23T20:45:15.138Z,"117km SSW of Kirakira, Solomon Islands",earthquake -2014-05-22T13:34:28.000Z,67.7042,-162.3999,5.3,2.7,ml,,,,0.59,ak,ak11269668,2014-05-22T21:37:05.376Z,"28km ENE of Noatak, Alaska",earthquake -2014-05-22T11:24:00.060Z,-16.2299,-172.656,13.57,4.8,mb,,64,3.844,1.36,us,usb000qzfb,2014-05-22T19:26:41.501Z,"121km ESE of Hihifo, Tonga",earthquake -2014-05-22T10:21:36.900Z,19.4456,-67.0309,79,2.8,Md,3,306,1.43281288,0.25,pr,pr14142005,2014-05-22T18:24:04.862Z,"104km N of Isabela, Puerto Rico",earthquake -2014-05-22T08:50:29.180Z,19.0258,121.5326,34.3,4.6,mb,,124,1.787,1.14,us,usb000qzbp,2014-05-22T16:57:28.254Z,"60km NE of Namuac, Philippines",earthquake -2014-05-22T08:38:01.060Z,-55.3955,-28.3273,35,5.5,mb,,55,4.847,0.62,us,usb000qzb9,2014-05-22T16:43:51.693Z,"161km NNW of Visokoi Island, ",earthquake -2014-05-22T08:31:11.460Z,32.203,-115.2391667,10.54,2.58,ml,9,231,0.223,0.13,ci,ci15504337,2014-05-23T15:01:52.855Z,"7km WSW of Alberto Oviedo Mota, Mexico",earthquake -2014-05-22T06:33:42.800Z,35.5797,-120.8742,4.2,2.9,Md,88,43.2,0.05389892,0.07,nc,nc72225491,2014-05-22T22:38:29.592Z,"15km WNW of Templeton, California",earthquake -2014-05-22T06:30:19.040Z,37.0807,-97.8918,7.91,2.5,mb_lg,,67,0.031,0.29,us,usb000qz8a,2014-05-22T09:20:13.152Z,"14km ESE of Anthony, Kansas",earthquake -2014-05-22T05:31:59.000Z,67.6712,-162.2512,5.5,3,ml,,,,0.65,ak,ak11269452,2014-05-22T13:34:32.564Z,"32km ENE of Noatak, Alaska",earthquake -2014-05-22T05:22:54.450Z,-11.1601,161.402,28.86,5.1,mb,,61,2.23,0.67,us,usb000qz7b,2014-05-22T14:56:33.000Z,"96km SW of Kirakira, Solomon Islands",earthquake -2014-05-22T05:22:03.660Z,35.7918,0.247,9.98,4.9,mb,,50,2.053,0.91,us,usb000qz78,2014-05-22T06:27:51.801Z,"21km SE of Mostaganem, Algeria",earthquake -2014-05-22T05:15:40.500Z,18.916,-68.088,50,2.9,Md,7,255.6,0.48688688,0.31,pr,pr14142004,2014-05-22T13:18:18.380Z,"49km NE of Punta Cana, Dominican Republic",earthquake -2014-05-22T04:17:37.900Z,18.2315,-67.97,81,3,Md,8,198,0.48059868,0.18,pr,pr14142003,2014-05-22T12:20:10.763Z,"60km SE of Punta Cana, Dominican Republic",earthquake -2014-05-22T04:01:38.800Z,19.0911,-66.7957,11,2.9,Md,9,284.4,0.66026173,0.25,pr,pr14142002,2014-05-22T12:04:08.059Z,"67km N of Hatillo, Puerto Rico",earthquake -2014-05-22T03:46:58.800Z,19.059,-66.8135,40,3,Md,10,270,0.63780385,0.28,pr,pr14142001,2014-05-22T11:49:37.402Z,"63km N of Hatillo, Puerto Rico",earthquake -2014-05-22T03:04:13.800Z,19.3343,-155.1227,7,2.6,Ml,,140.4,0.03593261,0.1,hv,hv60698741,2014-05-22T18:47:30.102Z,"16km SE of Volcano, Hawaii",earthquake -2014-05-22T02:46:10.350Z,35.7869,-97.4833,10.93,3.6,mb_lg,,70,0.025,0.28,us,usb000qz4x,2014-05-24T17:15:50.535Z,"11km SSW of Guthrie, Oklahoma",earthquake -2014-05-22T02:25:10.330Z,36.6235,-97.7089,4.92,2.7,mb_lg,,71,0.25,0.37,us,usb000qz4l,2014-05-22T10:29:48.792Z,"20km S of Medford, Oklahoma",earthquake -2014-05-22T02:06:46.900Z,45.1526,-113.6125,12.2,2.7,mc,36,100.799991936001,0.6306173,0.28,mb,mb14319042,2014-05-22T23:16:19.389Z,"22km E of Salmon, Idaho",earthquake -2014-05-22T01:47:16.000Z,37.5298,-78.0702,9.9,3.2,mblg,14,75.5999939520005,0.08084838,0.31,se,se052214a,2014-05-24T12:57:51.633Z,"12km WSW of Powhatan, Virginia",earthquake -2014-05-21T23:37:38.800Z,19.6567,-66.6453,35,3.1,Md,15,273.6,1.17769134,0.15,pr,pr14141009,2014-05-22T07:40:17.925Z,"130km N of Hatillo, Puerto Rico",earthquake -2014-05-21T22:29:59.650Z,-8.9032,-74.47,127.7,4.7,mb,,103,3.851,1.01,us,usa000qcbm,2014-05-22T00:08:03.394Z,"58km S of Pucallpa, Peru",earthquake -2014-05-21T21:42:26.500Z,18.7994,-64.4229,89,2.7,Md,3,338.4,0.67193983,0.12,pr,pr14141008,2014-05-22T05:45:04.272Z,"47km NNE of Road Town, British Virgin Islands",earthquake -2014-05-21T20:17:16.850Z,18.7082,-68.601,98.65,3.2,md,,327,0.287,0.79,us,usb000qyvb,2014-05-22T04:19:56.935Z,"9km NE of Otra Banda, Dominican Republic",earthquake -2014-05-21T18:55:46.100Z,36.0493,-120.6083,9.3,2.5,Md,102,39.6,0.01796631,0.07,nc,nc72225176,2014-05-22T04:28:08.343Z,"24km WSW of Coalinga, California",earthquake -2014-05-21T18:14:29.070Z,-2.8837,128.0056,33.55,5.3,mb,,25,3.686,0.97,us,usb000qyej,2014-05-22T02:17:00.071Z,"29km NW of Piru, Indonesia",earthquake -2014-05-21T17:58:43.760Z,37.1279,-97.6415,8.53,2.7,mb_lg,,39,0.097,0.67,us,usb000qyd1,2014-05-22T02:01:10.722Z,"11km NNW of Caldwell, Kansas",earthquake -2014-05-21T17:30:06.600Z,18.8885,-64.5375,9,2.7,Md,5,316.8,0.47520879,0.07,pr,pr14141006,2014-05-22T01:32:34.776Z,"52km N of Road Town, British Virgin Islands",earthquake -2014-05-21T16:25:11.500Z,20.1438,-155.8133,25.3,2.5,Ml,,136.8,0.03593261,0.14,hv,hv60698126,2014-05-21T20:55:01.000Z,"10km S of Kapaau, Hawaii",earthquake -2014-05-21T16:21:54.050Z,18.2013,88.0192,44.3,5.9,mww,,38,7.948,0.62,us,usb000qy82,2014-05-23T13:40:03.989Z,"274km SE of Konarka, India",earthquake -2014-05-21T15:09:06.540Z,13.9307,-92.1238,50.35,4.8,mb,,156,0.719,1.03,us,usb000qy4p,2014-05-21T23:11:45.925Z,"46km SSW of Champerico, Guatemala",earthquake -2014-05-21T14:55:30.130Z,40.3008333,-124.5136667,20.62,2.94,md,30,232,0.1767,0.12,nc,nc72225101,2014-05-22T07:59:07.101Z,"37km SW of Ferndale, California",earthquake -2014-05-21T14:47:57.880Z,36.674,70.7588,67.59,4.6,mb,,69,0.473,0.67,us,usb000qy3c,2014-05-21T22:50:30.504Z,"22km SSW of Jarm, Afghanistan",earthquake -2014-05-21T14:03:17.700Z,18.9377,-64.364,43.47,2.9,md,,330,0.577,0.32,us,usb000qymz,2014-05-21T22:06:39.130Z,"63km NNE of Road Town, British Virgin Islands",earthquake -2014-05-21T13:32:32.800Z,-15.4035,-173.7676,62.49,4.7,mb,,79,2.432,0.34,us,usb000qy1b,2014-05-21T21:35:00.184Z,"60km N of Hihifo, Tonga",earthquake -2014-05-21T13:25:20.480Z,29.5364,50.8372,10,4.4,mb,,71,6.612,0.38,us,usb000qy04,2014-05-21T21:27:49.597Z,"31km E of Bandar-e Ganaveh, Iran",earthquake -2014-05-21T12:49:54.500Z,35.5941,-97.3831,5.832,2.5,ml,,51,,0.43,us,usb000qy1t,2014-05-22T12:16:32.961Z,"7km N of Spencer, Oklahoma",earthquake -2014-05-21T10:51:27.870Z,29.6719,50.8345,10,5,mb,,61,6.705,0.8,us,usb000qxxr,2014-05-21T11:34:22.948Z,"32km ENE of Bandar-e Ganaveh, Iran",earthquake -2014-05-21T10:29:47.900Z,29.4599,50.8924,10,4.5,mb,,60,6.525,0.71,us,usb000qxxc,2014-05-21T18:32:36.869Z,"38km NW of Borazjan, Iran",earthquake -2014-05-21T10:06:14.990Z,17.1865,-94.9135,127.51,5.6,mwp,,79,2.808,1.16,us,usb000qxx2,2014-05-24T19:53:56.366Z,"16km ENE of Palomares, Mexico",earthquake -2014-05-21T09:46:28.140Z,29.5,50.8799,10,5.2,mb,,42,6.56,0.81,us,usb000qxww,2014-05-21T12:48:19.000Z,"36km ESE of Bandar-e Ganaveh, Iran",earthquake -2014-05-21T09:00:55.130Z,-30.4516,-71.3157,49.83,5.3,mb,,129,0.526,0.85,us,usb000qxwk,2014-05-21T17:38:14.000Z,"19km NW of Ovalle, Chile",earthquake -2014-05-21T08:21:56.890Z,-8.8151,125.235,28.06,4.8,mb,,45,1.336,1.22,us,usb000qxw1,2014-05-21T11:11:41.178Z,"35km WNW of Ainaro, East Timor",earthquake -2014-05-21T07:38:14.000Z,19.0967,-64.8271,10,2.8,Md,7,273.6,0.7051775,0.11,pr,pr14141002,2014-05-21T15:40:42.035Z,"78km NNW of Road Town, British Virgin Islands",earthquake -2014-05-21T05:00:47.500Z,19.6075,-67.6873,36,3.1,Md,8,316.8,1.2576414,0.23,pr,pr14141001,2014-05-21T13:03:21.007Z,"136km NNE of Punta Cana, Dominican Republic",earthquake -2014-05-21T04:57:47.700Z,19.3933,-155.2728,2.3,2.5,Ml,,39.6,0,0.26,hv,hv60697896,2014-05-21T13:00:29.756Z,"5km SW of Volcano, Hawaii",earthquake -2014-05-21T04:01:17.400Z,19.1493,-156.1947,22.5,2.6,Ml,,270,0.3233935,0.06,hv,hv60697866,2014-05-21T17:47:22.996Z,"46km WNW of Hawaiian Ocean View, Hawaii",earthquake -2014-05-21T03:54:46.390Z,40.3536667,-125.2483333,3.45,2.75,md,23,300,0.706,0.3,nc,nc72224881,2014-05-22T09:10:09.946Z,"87km WSW of Ferndale, California",earthquake -2014-05-21T01:58:48.130Z,19.4705,-70.6703,26.7,3.3,ml,,112,0.069,1.32,us,usb000qxv9,2014-05-21T06:42:37.264Z,"3km NE of Santiago de los Caballeros, Dominican Republic",earthquake -2014-05-21T01:48:46.000Z,58.0839,-152.8139,66.4,3.4,ml,,,,0.56,ak,ak11267570,2014-05-21T09:51:19.349Z,"37km NNW of Kodiak Station, Alaska",earthquake -2014-05-21T01:28:25.620Z,-57.8441,-25.9645,105.36,5.1,mb,,48,6.886,0.77,us,usb000qxqm,2014-05-21T09:30:52.695Z,"136km NNE of Bristol Island, South Sandwich Islands",earthquake -2014-05-21T00:40:26.220Z,-7.7614,104.6756,51.4,4.5,mb,,113,3.118,0.59,us,usb000qxp9,2014-05-21T08:42:56.403Z,"148km SW of Tugu Hilir, Indonesia",earthquake -2014-05-21T00:21:13.290Z,23.7323,121.471,11.69,5.6,mb,,22,0.374,1.26,us,usb000qxnd,2014-05-22T08:22:19.943Z,"30km SSW of Hualian, Taiwan",earthquake -2014-05-21T00:09:22.700Z,18.8878,-64.4449,39,3.3,Md,8,302.4,0.49587004,0.31,pr,pr14141000,2014-05-21T01:43:34.371Z,"55km NNE of Road Town, British Virgin Islands",earthquake -2014-05-20T23:59:58.700Z,18.9584,-64.5391,38,2.7,Md,5,331.2,0.71955054,0.05,pr,pr14140010,2014-05-21T08:02:28.050Z,"60km N of Road Town, British Virgin Islands",earthquake -2014-05-20T23:30:46.550Z,39.5224,24.1875,17.18,4.4,mb,,46,1.429,0.97,us,usb000qxle,2014-05-21T04:45:19.604Z,"49km NNE of Patitirion, Greece",earthquake -2014-05-20T23:25:02.660Z,-56.867,-24.8899,41.89,4.6,mb,,79,7.066,0.6,us,usb000qxm0,2014-05-21T07:27:39.160Z,"142km E of Visokoi Island, ",earthquake -2014-05-20T21:57:47.000Z,63.3716,-149.0106,97.2,3,ml,,,,0.62,ak,ak11267442,2014-05-21T06:00:23.312Z,"3km SW of Cantwell, Alaska",earthquake -2014-05-20T21:43:14.000Z,60.2706,-151.8511,55.7,2.7,ml,,,,0.63,ak,ak11267433,2014-05-21T05:46:16.819Z,"32km WSW of Cohoe, Alaska",earthquake -2014-05-20T21:19:07.730Z,17.6225,-94.3974,167.13,4.8,mb,,152,2.541,1.11,us,usb000qxe7,2014-05-21T11:02:11.186Z,"30km SE of Hidalgotitlan, Mexico",earthquake -2014-05-20T21:11:16.390Z,-17.8122,-69.3731,152,4.5,mb,,69,0.535,1.13,us,usb000qxe5,2014-05-21T05:13:55.873Z,"47km NNE of Putre, Chile",earthquake -2014-05-20T21:10:07.100Z,35.4931,-97.2362,7.42,2.6,ml,,71,,0.55,us,usb000qxgq,2014-05-21T02:34:06.401Z,"3km E of Choctaw, Oklahoma",earthquake -2014-05-20T21:07:08.940Z,19.0543,-69.6393,80.99,3.9,ml,,81,0.36,0.72,us,usb000qxcr,2014-05-21T06:21:59.665Z,"16km NE of Gonzalo, Dominican Republic",earthquake -2014-05-20T20:16:15.700Z,-19.1832,-177.4709,575.46,4.6,mb,,88,4.482,0.78,us,usb000qx8p,2014-05-21T15:14:06.902Z,"207km NE of Ndoi Island, Fiji",earthquake -2014-05-20T20:05:08.930Z,-68.7324,170.6679,15.7,5,mb,,43,9.177,0.82,us,usb000qx7z,2014-05-21T14:40:54.291Z,"Balleny Islands region",earthquake -2014-05-20T17:29:41.000Z,60.0743,-152.6402,99.8,2.9,ml,,,,0.67,ak,ak11267355,2014-05-21T13:55:55.000Z,"46km SSE of Redoubt Volcano, Alaska",earthquake -2014-05-20T17:16:30.900Z,19.1998,-66.8133,17,2.8,Md,13,234,0.76716125,0.28,pr,pr14140008,2014-05-21T13:27:40.000Z,"78km N of Hatillo, Puerto Rico",earthquake -2014-05-20T15:48:33.900Z,-57.143,-25.5071,53.4,5,mb,,115,6.833,0.74,us,usb000qwmp,2014-05-20T23:51:00.880Z,"114km ESE of Visokoi Island, ",earthquake -2014-05-20T15:05:25.860Z,-4.2728,122.848,13.49,4.5,mb,,55,3.172,0.85,us,usb000qwkd,2014-05-20T23:08:02.271Z,"53km SE of Kendari, Indonesia",earthquake -2014-05-20T13:59:28.200Z,35.4984,-97.2409,6.884,3.1,ml,,70,,0.64,us,usb000qwfv,2014-05-20T22:18:57.642Z,"2km E of Choctaw, Oklahoma",earthquake -2014-05-20T13:24:37.800Z,19.1669,-66.7703,40,2.8,Md,12,255.6,0.7231438,0.23,pr,pr14140005,2014-05-20T21:27:08.251Z,"75km N of Hatillo, Puerto Rico",earthquake -2014-05-20T13:15:34.400Z,19.0639,-66.7553,15,3.2,Md,21,216,0.62073586,0.43,pr,pr14140004,2014-05-20T21:18:07.128Z,"64km N of Hatillo, Puerto Rico",earthquake -2014-05-20T12:54:46.500Z,18.7991,-64.2505,20,2.8,Md,12,320.4,0.51383634,0.2,pr,pr14140003,2014-05-20T20:57:22.105Z,"57km NE of Road Town, British Virgin Islands",earthquake -2014-05-20T10:32:19.200Z,19.1576,-66.8356,28,2.9,Md,14,277.2,0.73302527,0.34,pr,pr14140001,2014-05-20T18:34:52.600Z,"74km N of Hatillo, Puerto Rico",earthquake -2014-05-20T07:59:47.000Z,63.1923,-150.3887,100,2.9,ml,,,,0.92,ak,ak11267040,2014-05-20T16:02:47.768Z,"75km WSW of Cantwell, Alaska",earthquake -2014-05-20T07:39:34.560Z,-20.1896,-177.6313,511.44,4.4,mb,,96,4.753,0.81,us,usb000qw4w,2014-05-20T15:42:01.870Z,"122km ENE of Ndoi Island, Fiji",earthquake -2014-05-20T07:30:19.580Z,35.5261,-97.2197,8.15,3.6,mb_lg,,32,0.11,0.43,us,usb000qw49,2014-05-21T05:24:25.111Z,"5km NE of Choctaw, Oklahoma",earthquake -2014-05-20T05:42:38.600Z,35.4815,-97.2476,7.552,3.3,ml,,107,,0.7,us,usb000qwiq,2014-05-21T16:26:22.315Z,"2km SE of Choctaw, Oklahoma",earthquake -2014-05-20T05:39:49.200Z,35.4842,-97.2451,7.595,2.7,ml,,106,,0.57,us,usb000qw2d,2014-05-21T06:03:20.376Z,"2km SE of Choctaw, Oklahoma",earthquake -2014-05-20T04:43:26.740Z,40.9129,19.8857,10,4.5,mb,,62,0.434,0.82,us,usb000qw19,2014-05-20T05:01:15.030Z,"12km NNW of Kucove, Albania",earthquake -2014-05-20T03:58:32.310Z,35.4727,-97.2715,7.03,3,mb_lg,,41,0.121,0.49,us,usb000qw05,2014-05-21T06:02:55.117Z,"2km S of Choctaw, Oklahoma",earthquake -2014-05-20T02:30:07.000Z,67.7078,-162.391,4,3.1,ml,,,,0.73,ak,ak11266747,2014-05-20T10:32:38.882Z,"28km ENE of Noatak, Alaska",earthquake -2014-05-20T02:20:47.000Z,60.7278,-149.4964,18.9,2.5,ml,,,,0.77,ak,ak11266736,2014-05-20T10:23:21.101Z,"44km W of Whittier, Alaska",earthquake -2014-05-20T02:00:30.000Z,59.9031,-152.968,100,2.5,ml,,,,1.06,ak,ak11266725,2014-05-20T10:03:01.602Z,"65km WNW of Anchor Point, Alaska",earthquake -2014-05-20T01:39:14.490Z,18.1568,-99.9519,62.74,4.9,mb,,126,1.378,1.01,us,usb000qvxw,2014-05-21T01:01:23.262Z,"9km W of Apaxtla de Castrejon, Mexico",earthquake -2014-05-19T22:47:21.120Z,-57.085,-25.3856,62.81,5.4,mb,,69,6.876,1.37,us,usb000qvt4,2014-05-20T21:40:26.000Z,"118km ESE of Visokoi Island, ",earthquake -2014-05-19T22:41:10.740Z,34.1605,-116.4348333,11.78,2.79,ml,86,20,0.04346,0.12,ci,ci15503417,2014-05-20T18:00:50.776Z,"5km N of Yucca Valley, California",earthquake -2014-05-19T21:50:28.900Z,17.5643,-67.9606,68,3.2,Md,8,309.6,0.92167148,0.2,pr,pr14139008,2014-05-20T05:53:05.055Z,"93km WSW of Pole Ojea, Puerto Rico",earthquake -2014-05-19T20:33:47.500Z,19.4135,-155.3153,5.1,2.5,Ml,,79.2,0.01796631,0.09,hv,hv60697006,2014-05-21T22:40:11.000Z,"8km WSW of Volcano, Hawaii",earthquake -2014-05-19T20:08:51.620Z,34.2533333,-116.8248333,7.53,3.84,ml,112,18,0.04125,0.15,ci,ci15503377,2014-05-21T22:58:40.000Z,"2km ESE of Big Bear City, California",earthquake -2014-05-19T20:01:15.000Z,63.3536,-145.0138,2.2,3.2,ml,,,,0.96,ak,ak11266575,2014-05-24T00:17:42.940Z,"58km S of Deltana, Alaska",earthquake -2014-05-19T19:33:05.610Z,12.7759,-89.5982,63.54,4.6,mb,,206,0.973,0.36,us,usb000qvc1,2014-05-21T23:24:38.243Z,"84km SSW of La Libertad, El Salvador",earthquake -2014-05-19T19:27:22.420Z,15.3598,-91.3355,22.06,4.7,mb,,74,0.167,0.99,us,usb000qvbi,2014-05-22T15:27:13.531Z,"3km NW of Aguacatan, Guatemala",earthquake -2014-05-19T18:50:54.680Z,52.803,159.4736,72.5,4.6,mb,,161,0.545,0.79,us,usb000qv82,2014-05-22T15:48:08.144Z,"61km ESE of Petropavlovsk-Kamchatskiy, Russia",earthquake -2014-05-19T18:21:04.470Z,-49.4572,126.0391,10,4.8,mb,,127,16.1,1.61,us,usb000qv5e,2014-05-22T15:59:32.395Z,"Western Indian-Antarctic Ridge",earthquake -2014-05-19T18:20:53.000Z,60.2515,-150.7875,58.6,2.7,ml,,,,0.71,ak,ak11266564,2014-05-24T00:18:12.121Z,"30km SSE of Soldotna, Alaska",earthquake -2014-05-19T18:07:30.500Z,35.774,-97.487,7.6,2.5,ml,,,,0.26,us,usb000qvlt,2014-05-22T18:52:12.227Z,"12km SSW of Guthrie, Oklahoma",earthquake -2014-05-19T16:58:31.000Z,19.1837,-66.4172,8,2.8,Md,9,295.2,0.70966907,0.2,pr,pr14139005,2014-05-20T01:01:01.906Z,"79km N of Brenas, Puerto Rico",earthquake -2014-05-19T15:50:32.100Z,19.3878,-155.2787,2.8,2.7,Ml,,43.2,0,0.23,hv,hv60696836,2014-05-19T23:54:59.471Z,"6km SW of Volcano, Hawaii",earthquake -2014-05-19T15:26:52.000Z,51.334,-172.1642,25.3,2.6,ml,,,,0.43,ak,ak11266416,2014-05-24T00:15:57.166Z,"Andreanof Islands, Aleutian Islands, Alaska",earthquake -2014-05-19T15:26:22.000Z,53.9488,-164.7404,46.4,2.7,ml,,,,0.38,ak,ak11266414,2014-05-24T00:15:07.755Z,"Unimak Island region, Alaska",earthquake -2014-05-19T14:16:47.520Z,-35.3854,-175.5756,10,4.6,mb,,167,8.338,0.69,us,usb000qupk,2014-05-19T22:19:20.729Z,"East of the North Island of New Zealand",earthquake -2014-05-19T13:53:11.000Z,52.1779,-172.8898,74.8,3.6,ml,,,,0.64,ak,ak11266404,2014-05-24T00:17:19.542Z,"89km E of Atka, Alaska",earthquake -2014-05-19T13:12:15.190Z,30.042,140.3414,137.13,4.7,mb,,98,3.096,0.62,us,usb000qumd,2014-05-19T21:14:53.159Z,"Izu Islands, Japan region",earthquake -2014-05-19T12:02:30.390Z,41.0504,142.0779,74.74,4.5,mb,,137,1.259,0.54,us,usb000qula,2014-05-19T21:18:57.829Z,"72km NE of Misawa, Japan",earthquake -2014-05-19T10:05:27.600Z,18.2443,-67.9937,96,3.3,Md,8,198,0.45544585,0.5,pr,pr14139002,2014-05-19T18:07:57.065Z,"57km SE of Punta Cana, Dominican Republic",earthquake -2014-05-19T10:05:27.400Z,18.236,-68.0008,98,3.4,Md,8,201.6,0.45364922,0.52,pr,pr14139004,2014-05-19T18:08:00.713Z,"57km SE of Punta Cana, Dominican Republic",earthquake -2014-05-19T09:29:47.300Z,-32.0422,57.0823,10,4.7,mb,,61,15.712,0.81,us,usb000quh2,2014-05-19T17:32:14.515Z,"Southwest Indian Ridge",earthquake -2014-05-19T09:28:44.000Z,63.4532,-152.7059,16.3,2.6,ml,,,,0.74,ak,ak11266263,2014-05-24T00:18:57.601Z,"155km ENE of McGrath, Alaska",earthquake -2014-05-19T08:53:12.480Z,-21.1469,-178.4064,455.48,4.3,mb,,103,4.755,1.26,us,usb000qug1,2014-05-19T16:55:39.208Z,"62km SSE of Ndoi Island, Fiji",earthquake -2014-05-19T06:29:08.620Z,36.137,-97.1345,4.26,3,ml,,55,0.427,0.95,us,usb000qud6,2014-05-21T05:12:26.360Z,"7km WNW of Stillwater, Oklahoma",earthquake -2014-05-19T05:28:48.880Z,26.4569,142.3864,34.17,4.7,mb,,102,7.001,0.6,us,usb000quch,2014-05-19T13:31:27.214Z,"71km SSE of Chichi-shima, Japan",earthquake -2014-05-19T05:06:02.000Z,19.4701,-65.3677,74,3,Md,4,316.8,1.15882672,0.21,pr,pr14139001,2014-05-19T13:08:42.669Z,"125km NNE of Vieques, Puerto Rico",earthquake -2014-05-19T04:16:03.840Z,36.1213,-97.4487,3.78,3.1,mb_lg,,67,0.324,0.32,us,usb000quau,2014-05-19T18:58:06.373Z,"22km NE of Crescent, Oklahoma",earthquake -2014-05-19T03:56:47.530Z,-57.0825,-25.0162,35,5,mb,,69,7.065,1.07,us,usb000quai,2014-05-19T13:56:36.000Z,"139km ESE of Visokoi Island, ",earthquake -2014-05-19T03:51:05.890Z,-19.2711,-177.6298,557.16,4.4,mb,,129,4.368,1.05,us,usb000quad,2014-05-19T11:53:40.238Z,"189km NE of Ndoi Island, Fiji",earthquake -2014-05-19T02:43:26.410Z,-5.5361,146.4665,126.73,4.7,mb,,68,3.904,1.02,us,usb000qu9b,2014-05-19T10:46:04.073Z,"81km ESE of Madang, Papua New Guinea",earthquake -2014-05-19T02:39:21.700Z,32.9404,-100.8942,5,2.7,mb_lg,,97,1.1,0.64,us,usb000qu93,2014-05-19T10:41:52.959Z,"24km N of Snyder, Texas",earthquake -2014-05-19T01:53:56.990Z,-4.6699,-105.4588,10,5.2,ms_20,,149,15.665,0.73,us,usb000qu81,2014-05-19T13:56:34.000Z,"Central East Pacific Rise",earthquake -2014-05-19T01:37:23.380Z,36.1014,-97.0333,1.03,3,mb_lg,,45,0.438,0.53,us,usb000qu7c,2014-05-20T02:53:06.533Z,"2km SE of Stillwater, Oklahoma",earthquake -2014-05-19T01:08:41.700Z,17.9757,-65.4048,13,2.5,Md,9,158.4,0.18505295,0.2,pr,pr14139000,2014-05-19T09:11:17.082Z,"15km SSE of Esperanza, Puerto Rico",earthquake -2014-05-19T00:59:19.980Z,40.9774,19.8788,10,5.1,mb,,33,0.369,1,us,usb000qu5r,2014-05-20T02:52:43.228Z,"10km SW of Cerrik, Albania",earthquake -2014-05-18T23:47:04.600Z,-4.385,-105.8958,10,5.3,mb,,106,16.022,0.84,us,usb000qu45,2014-05-20T23:09:41.000Z,"Central East Pacific Rise",earthquake -2014-05-18T21:16:45.610Z,-19.1194,169.6317,271.23,4.9,mb,,88,4.188,0.84,us,usb000qty5,2014-05-19T05:19:17.085Z,"61km NE of Isangel, Vanuatu",earthquake -2014-05-18T19:09:14.150Z,-17.6915,-174.8876,265.23,4.7,mb,,98,4.806,0.86,us,usb000qtt2,2014-05-19T03:11:53.647Z,"142km NW of Neiafu, Tonga",earthquake -2014-05-18T18:53:47.570Z,36.5811,-97.815,3.44,3,mb_lg,,81,0.835,0.79,us,usb000qts5,2014-05-19T18:54:34.572Z,"21km NNE of Enid, Oklahoma",earthquake -2014-05-18T16:46:38.000Z,67.71,-162.3479,22.4,2.8,ml,,,,0.98,ak,ak11265635,2014-05-19T03:48:44.573Z,"30km ENE of Noatak, Alaska",earthquake -2014-05-18T15:57:03.000Z,60.8224,-151.6884,73.1,3.2,ml,,,,0.87,ak,ak11265561,2014-05-18T23:59:37.589Z,"26km NW of Nikiski, Alaska",earthquake -2014-05-18T15:22:12.960Z,-18.2831,-178.2533,634.25,4.9,mb,,39,3.555,0.67,us,usb000qtji,2014-05-18T23:25:28.203Z,"266km N of Ndoi Island, Fiji",earthquake -2014-05-18T14:31:20.000Z,51.9618,-171.5207,27.8,2.9,ml,,,,0.5,ak,ak11265539,2014-05-18T22:34:02.104Z,"61km SSW of Amukta Island, Alaska",earthquake -2014-05-18T13:59:36.000Z,36.0925,-97.068,4.371,2.5,ml,,71,,0.44,us,usb000qti1,2014-05-20T02:52:20.065Z,"2km SSW of Stillwater, Oklahoma",earthquake -2014-05-18T13:09:18.100Z,18.4353,-66.3097,125,3,Md,16,169.2,0.21290072,0.2,pr,pr14138003,2014-05-18T21:11:51.717Z,"1km SSW of San Antonio, Puerto Rico",earthquake -2014-05-18T12:08:06.800Z,34.9249,26.0714,10,4.3,mb,,144,1.034,1.1,us,usb000qtfv,2014-05-20T02:51:59.491Z,"16km SE of Makry Gialos, Greece",earthquake -2014-05-18T12:00:29.500Z,13.6955,-92.0638,35,4.2,mb,,192,0.895,1.3,us,usb000qtfl,2014-05-18T20:03:09.819Z,"68km SSW of Champerico, Guatemala",earthquake -2014-05-18T11:57:53.140Z,-57.0358,-24.9233,48.93,4.7,mb,,115,7.099,0.89,us,usb000qtfn,2014-05-18T20:00:24.907Z,"143km ESE of Visokoi Island, ",earthquake -2014-05-18T10:59:21.840Z,3.1118,93.7744,10,5.1,mb,,130,3.799,1.24,us,usb000qteu,2014-05-18T19:01:58.438Z,"285km WSW of Meulaboh, Indonesia",earthquake -2014-05-18T08:50:47.900Z,19.0428,-67.1958,12,2.8,Md,7,302.4,0.57761673,0.05,pr,pr14138001,2014-05-18T16:53:18.734Z,"61km N of San Antonio, Puerto Rico",earthquake -2014-05-18T08:29:26.020Z,35.8416,-96.9292,3.64,3,mb_lg,,56,0.299,0.45,us,usb000qtc7,2014-05-20T02:51:36.678Z,"16km NNW of Chandler, Oklahoma",earthquake -2014-05-18T07:48:16.000Z,55.2714,-163.2957,86.8,3,ml,,,,0.91,ak,ak11265355,2014-05-18T17:40:36.203Z,"37km WNW of Cold Bay, Alaska",earthquake -2014-05-18T06:38:48.980Z,-14.7235,-176.1437,78.63,4.9,mb,,78,6.332,0.65,us,usb000qt9y,2014-05-18T17:56:33.000Z,"159km S of Mata-Utu, Wallis and Futuna",earthquake -2014-05-18T06:29:51.500Z,18.6895,-66.8884,24,2.9,Md,14,234,0.3054272,0.18,pr,pr14138000,2014-05-18T14:32:49.259Z,"23km NNW of Hatillo, Puerto Rico",earthquake -2014-05-18T04:47:09.810Z,32.9253,-100.8292,5,2.5,mb_lg,,94,1.043,0.76,us,usb000qt87,2014-05-18T12:49:41.938Z,"24km NNE of Snyder, Texas",earthquake -2014-05-18T04:35:39.000Z,51.8092,-173.4377,15.8,2.5,ml,,,,0.57,ak,ak11265270,2014-05-18T12:38:50.952Z,"67km SE of Atka, Alaska",earthquake -2014-05-18T04:19:21.160Z,-21.3071,169.7352,89.33,5.3,mb,,50,3.154,0.8,us,usb000qt7u,2014-05-18T16:56:36.000Z,"193km E of Tadine, New Caledonia",earthquake -2014-05-18T04:04:56.270Z,-18.7257,-177.7427,425.25,4.4,mb,,79,4.113,0.75,us,usb000qt7n,2014-05-18T12:07:28.734Z,"235km NNE of Ndoi Island, Fiji",earthquake -2014-05-18T03:56:34.490Z,24.4223,141.7353,113.15,4.7,mb,,99,8.823,0.95,us,usb000qt7b,2014-05-18T11:59:06.727Z,"57km SE of Iwo Jima, Japan",earthquake -2014-05-18T03:27:39.600Z,51.218,178.7704,66.81,4.3,mb,,90,2.914,1.21,us,usb000qt6z,2014-05-18T11:30:20.341Z,"83km SSE of Little Sitkin Island, Alaska",earthquake -2014-05-18T03:24:49.100Z,36.1187,-97.2501,5,2.5,mb_lg,,43,0.361,0.61,us,usb000qt6n,2014-05-20T02:51:14.105Z,"17km W of Stillwater, Oklahoma",earthquake -2014-05-18T02:46:10.380Z,-14.9248,-174.847,10,4.7,mb,,173,3.14,1.33,us,usb000qt6i,2014-05-18T10:48:47.161Z,"163km NW of Hihifo, Tonga",earthquake' -] - -{ #category : #examples } -RTMapLocationBuilder >> seismData2 [ - -"Cut and pasted from -http://earthquake.usgs.gov/earthquakes/feed/v0.1/ -http://earthquake.usgs.gov/earthquakes/feed/v0.1/summary/2.5_month.csv" -^ 'DateTime,Latitude,Longitude,Depth,Magnitude,MagType,NbStations,Gap,Distance,RMS,Source,EventID,Version -2014-07-30T23:48:03.510+00:00,35.732,-97.434,6.8,2.9,mb_lg,,72,0.1,0.48,us,usb000ryqu,1406765119414 -2014-07-30T23:33:43.300+00:00,18.611,-64.695,105.0,2.7,Md,7,263,0.2,0.10,pr,pr14211009,1406764860120 -2014-07-30T23:09:25.000+00:00,62.659,-148.758,47.2,3.3,ml,,,,0.58,ak,ak11344402,1406764735837 -2014-07-30T21:36:51.550+00:00,52.287,-170.775,49.8,4.7,mb,,136,1.4,1.04,us,usb000rypl,1406763825908 -2014-07-30T21:09:24.500+00:00,49.381,-120.541,,2.5,Ml,,220,0.6,0.07,uw,uw60830347,1406757687137 -2014-07-30T20:01:53.000+00:00,51.683,178.552,93.8,2.5,ml,,,,0.39,ak,ak11344225,1406764771302 -2014-07-30T19:23:03.630+00:00,33.881,-118.496,11.2,2.9,ml,76,79,0.1,0.20,ci,ci15532889,1406764888905 -2014-07-30T18:11:40.000+00:00,67.614,-162.134,20.0,3.2,ml,,,,1.09,ak,ak11344202,1406764754629 -2014-07-30T17:40:38.500+00:00,18.991,-64.066,26.0,3.4,Md,12,320,0.8,0.30,pr,pr14211008,1406747118116 -2014-07-30T16:46:59.240+00:00,35.742,-97.425,5.0,3.3,mb_lg,,40,0.1,0.42,us,usb000rylj,1406756514803 -2014-07-30T16:21:32.320+00:00,35.731,-97.402,4.9,3.4,mb_lg,,19,0.1,0.56,us,usb000ryl6,1406760603022 -2014-07-30T16:00:58.730+00:00,-7.185,154.842,10.0,5.7,mwb,,31,4.0,0.95,us,usb000rykv,1406765015322 -2014-07-30T15:44:20.000+00:00,51.879,178.367,126.9,2.5,ml,,,,0.62,ak,ak11344013,1406764021744 -2014-07-30T15:20:27.000+00:00,67.619,-161.925,20.0,3.3,ml,,,,1.58,ak,ak11344007,1406762575468 -2014-07-30T15:15:27.000+00:00,67.584,-161.935,18.0,3.4,ml,,,,1.07,ak,ak11344001,1406762280775 -2014-07-30T14:46:43.390+00:00,39.581,-123.454,6.2,2.6,md,22,113,0.1,0.04,nc,nc72268016,1406764863213 -2014-07-30T14:12:45.000+00:00,67.614,-161.871,20.0,2.8,ml,,,,1.05,ak,ak11343956,1406758916975 -2014-07-30T12:57:47.820+00:00,36.296,-118.351,1.5,2.7,ml,30,143,0.1,0.23,ci,ci15532777,1406759919454 -2014-07-30T12:39:58.000+00:00,63.226,-150.497,119.5,3.0,ml,,,,0.39,ak,ak11343886,1406753124158 -2014-07-30T12:25:05.760+00:00,-18.795,169.307,232.5,4.6,mb,,76,4.2,0.71,us,usb000ryjq,1406752056298 -2014-07-30T12:16:40.000+00:00,67.642,-162.007,24.4,3.4,ml,,,,1.21,ak,ak11343879,1406753104138 -2014-07-30T12:01:10.700+00:00,19.086,-64.493,76.0,3.1,Md,4,331,0.8,0.33,pr,pr14211007,1406750624578 -2014-07-30T09:15:18.080+00:00,-17.654,-174.827,177.7,4.3,mb,,96,4.7,0.61,us,usb000ryj6,1406740677774 -2014-07-30T08:54:30.280+00:00,33.698,-116.734,19.7,2.9,ml,112,16,0.0,0.18,ci,ci15532705,1406757055490 -2014-07-30T08:34:27.400+00:00,18.921,-68.046,70.0,2.9,Md,15,241,0.5,0.56,pr,pr14211005,1406738217484 -2014-07-30T08:25:50.800+00:00,18.693,-66.610,31.0,2.6,Md,8,234,0.2,0.33,pr,pr14211004,1406737710069 -2014-07-30T07:21:38.230+00:00,32.598,-109.111,5.0,2.8,ml,,82,1.1,1.24,us,usb000ryif,1406715203879 -2014-07-30T05:40:30.000+00:00,50.187,178.836,32.4,3.1,ml,,,,0.46,ak,ak11343713,1406744673780 -2014-07-30T03:57:21.500+00:00,18.532,-68.980,156.0,3.4,Md,6,342,0.6,0.27,pr,pr14211003,1406721599877 -2014-07-30T03:46:51.000+00:00,53.515,-165.344,25.6,2.7,ml,,,,0.28,ak,ak11343746,1406720963539 -2014-07-30T03:43:34.700+00:00,51.814,178.359,126.1,4.1,mb,,165,0.7,0.77,us,usb000ryhi,1406720762318 -2014-07-30T02:56:27.500+00:00,19.483,-155.884,10.9,2.5,Ml,,104,0.0,0.23,hv,hv60743496,1406717949952 -2014-07-30T02:24:26.960+00:00,-19.088,-12.289,9.1,5.5,mb,,36,26.5,0.66,us,usb000ryhe,1406728568000 -2014-07-30T01:32:09.330+00:00,26.399,53.550,5.2,5.3,mwb,,35,2.8,0.79,us,usb000ryha,1406729419918 -2014-07-29T23:17:53.000+00:00,59.956,-150.207,11.5,2.5,ml,,,,0.81,ak,ak11343221,1406704821889 -2014-07-29T22:38:26.180+00:00,32.127,-115.140,26.5,3.2,ml,13,244,0.2,0.38,ci,ci15532569,1406752736641 -2014-07-29T22:17:37.000+00:00,59.934,-153.325,137.8,3.4,ml,,,,0.66,ak,ak11342984,1406701204241 -2014-07-29T22:08:51.000+00:00,52.324,-173.622,4.8,2.7,ml,,,,0.51,ak,ak11342978,1406700687743 -2014-07-29T22:04:44.580+00:00,35.437,-36.405,10.0,5.1,mb,,81,7.3,0.74,us,usb000ryg1,1406737972000 -2014-07-29T21:09:03.860+00:00,-56.143,-27.582,108.4,4.8,mb,,69,5.4,0.63,us,usb000ryfg,1406697098779 -2014-07-29T20:17:00.000+00:00,51.844,178.528,108.2,2.8,ml,,,,0.48,us,usb000ryh0,1406733003978 -2014-07-29T18:04:54.190+00:00,-10.734,161.696,51.0,5.0,mb,,28,2.1,0.99,us,usb000ryd5,1406732596000 -2014-07-29T17:19:48.000+00:00,18.752,-66.722,58.0,2.8,Md,19,216,0.3,0.33,pr,pr14210007,1406728975000 -2014-07-29T16:50:13.780+00:00,-23.582,-176.529,35.0,5.1,mb,,82,5.8,0.86,us,usb000ryc4,1406681561009 -2014-07-29T13:34:53.000+00:00,61.463,-146.480,35.7,3.3,ml,9,104,,0.46,ak,ak11341457,1406660456886 -2014-07-29T13:27:40.050+00:00,-3.469,146.678,6.9,5.8,mb,,20,5.5,1.20,us,usb000ry9u,1406744198000 -2014-07-29T10:46:35.400+00:00,18.670,-65.101,66.0,3.3,Md,14,212,0.3,0.23,pr,pr14210006,1406659741318 -2014-07-29T10:46:15.210+00:00,17.842,-95.524,95.1,6.3,mwp,,46,2.9,1.12,us,usb000ry8m,1406738171610 -2014-07-29T08:20:15.320+00:00,31.495,105.196,11.7,4.7,mb,,41,3.9,1.02,us,usb000ry8h,1406707803484 -2014-07-29T07:39:52.650+00:00,36.739,-98.034,5.0,2.7,mb_lg,,82,0.2,0.42,us,usb000ry86,1406699940578 -2014-07-29T07:16:41.190+00:00,-10.235,87.703,10.0,5.1,mb,,74,9.2,1.12,us,usb000ry7w,1406647210044 -2014-07-29T07:07:07.330+00:00,14.410,93.073,10.0,5.5,mb,,44,2.8,1.50,us,usb000ry7u,1406647820000 -2014-07-29T03:33:01.430+00:00,14.806,-92.417,82.5,5.4,mb,,124,0.8,1.31,us,usb000ry71,1406670562025 -2014-07-29T02:46:36.100+00:00,36.732,-97.987,7.6,4.3,mwr,,80,0.2,0.73,us,usb000ry6y,1406761094128 -2014-07-29T02:39:51.300+00:00,18.951,-64.400,33.0,3.0,Md,4,335,0.8,0.31,pr,pr14210003,1406630542175 -2014-07-29T01:31:25.100+00:00,19.112,-64.614,62.0,3.0,Md,4,328,0.8,0.27,pr,pr14210002,1406626435037 -2014-07-29T01:22:05.010+00:00,-23.577,-63.735,543.6,4.4,mb,,45,4.9,0.84,us,usb000ry6q,1406625884479 -2014-07-29T01:20:03.700+00:00,19.443,-68.093,47.0,3.6,Md,10,331,1.3,0.18,pr,pr14210000,1406625759528 -2014-07-29T00:47:17.610+00:00,-20.116,-70.487,24.6,4.7,mb,,137,0.5,1.39,us,usb000ry6b,1406648106000 -2014-07-29T00:41:35.460+00:00,-11.412,-77.727,50.6,4.0,mb,,187,10.1,0.67,us,usb000ry6f,1406646899464 -2014-07-28T23:50:57.700+00:00,-6.885,143.940,10.0,4.8,mb,,56,4.1,0.83,us,usb000ry65,1406620406285 -2014-07-28T23:00:48.530+00:00,-6.905,143.846,10.0,5.8,mb,,16,4.1,0.95,us,usb000ry5u,1406658095000 -2014-07-28T22:47:30.910+00:00,-6.823,143.880,10.0,4.9,mb,,100,4.1,0.73,us,usb000ry5n,1406616603604 -2014-07-28T22:26:51.360+00:00,36.732,-98.394,5.0,3.0,mb_lg,,97,0.4,0.61,us,usb000ry5e,1406681663535 -2014-07-28T20:01:14.800+00:00,40.590,-124.090,18.3,3.3,Ml,25,130,0.2,0.09,nc,nc72266491,1406760425042 -2014-07-28T17:46:58.000+00:00,53.894,-163.986,52.4,2.5,ml,,,,0.30,ak,ak11340160,1406598620348 -2014-07-28T15:53:44.800+00:00,18.786,-63.925,15.0,2.8,Md,3,356,1.1,0.23,pr,pr14209006,1406591784714 -2014-07-28T15:05:54.940+00:00,28.011,127.945,57.4,4.8,mb,,114,5.7,1.16,us,usb000rxz1,1406588916197 -2014-07-28T14:14:47.000+00:00,58.347,-136.915,3.4,3.2,ml,,,,0.62,ak,ak11340054,1406585861899 -2014-07-28T12:51:29.000+00:00,45.340,-112.608,9.8,3.9,mc,72,34,0.4,0.26,mb,mb30664,1406696297103 -2014-07-28T11:04:34.700+00:00,47.458,-122.798,26.6,3.5,Ml,,25,0.1,0.39,uw,uw60828527,1406711202757 -2014-07-28T08:05:31.700+00:00,34.741,139.332,20.8,4.5,mb,,114,1.7,0.37,us,usb000rxvv,1406563683103 -2014-07-28T08:03:10.760+00:00,-17.326,66.834,10.0,4.9,mb,,66,18.7,1.45,us,usb000rxvu,1406566962000 -2014-07-28T06:45:40.120+00:00,32.988,-117.745,10.0,3.3,ml,43,146,0.4,0.16,ci,ci15531937,1406660030568 -2014-07-28T05:02:12.000+00:00,51.422,178.833,40.0,3.1,ml,,,,0.55,ak,ak11339842,1406568656255 -2014-07-28T04:59:53.000+00:00,62.391,-149.778,46.5,3.0,ml,,,,0.75,ak,ak11339835,1406552539111 -2014-07-28T03:38:45.950+00:00,-24.087,-66.945,196.7,4.3,mb,,85,2.3,0.74,us,usb000rxub,1406547681087 -2014-07-28T03:36:47.620+00:00,7.596,136.731,10.0,5.4,mb,,74,10.0,0.94,us,usb000rxuc,1406567293000 -2014-07-28T03:33:41.400+00:00,18.892,-64.806,37.0,2.7,Md,3,338,0.7,0.18,pr,pr14209000,1406547378073 -2014-07-28T00:00:46.960+00:00,26.909,54.200,39.6,4.5,mb,,80,2.7,0.47,us,usb000rxtm,1406534595626 -2014-07-27T23:35:06.750+00:00,-10.051,119.898,52.0,4.5,mb,,78,2.7,1.03,us,usb000rxtl,1406533058912 -2014-07-27T22:19:22.100+00:00,36.146,-96.838,4.5,3.2,mb_lg,,19,0.6,0.78,us,usb000rxt7,1406611996407 -2014-07-27T22:01:24.000+00:00,65.182,-151.736,8.6,2.7,ml,,,,1.05,ak,ak11339724,1406527444558 -2014-07-27T22:00:10.000+00:00,51.438,-174.585,3.9,3.2,ml,,,,0.35,ak,ak11339722,1406527371252 -2014-07-27T21:34:21.930+00:00,36.079,-117.857,1.5,2.8,ml,35,52,0.0,0.13,ci,ci15531785,1406563604623 -2014-07-27T20:39:10.450+00:00,36.806,-97.858,2.7,2.9,mb_lg,,85,0.4,0.36,us,usb000rxsh,1406506856810 -2014-07-27T20:34:32.730+00:00,12.875,-70.036,41.7,4.9,mb,,130,0.4,0.41,us,usb000rxsf,1406496899896 -2014-07-27T20:11:54.450+00:00,27.614,66.053,33.0,4.4,mb,,134,7.4,0.72,us,usb000rxsd,1406520869892 -2014-07-27T18:09:11.300+00:00,35.497,140.598,65.6,4.6,mb,,122,2.2,0.66,us,usb000rxrz,1406519908701 -2014-07-27T16:47:17.000+00:00,17.785,-68.222,49.0,2.9,Md,10,266,0.7,0.27,pr,pr14208008,1406490502280 -2014-07-27T13:41:09.000+00:00,58.943,-155.821,100.0,3.4,ml,,,,2.48,ak,ak11339397,1406497423938 -2014-07-27T13:29:06.380+00:00,16.238,-98.710,35.0,4.7,mb,,178,1.3,0.82,us,usb000rxr5,1406496696142 -2014-07-27T13:07:56.000+00:00,58.319,-136.942,10.5,2.5,ml,,,,0.91,ak,ak11339384,1406502943096 -2014-07-27T12:52:08.000+00:00,51.337,-174.458,7.6,2.6,ml,,,,0.38,ak,ak11339379,1406502939591 -2014-07-27T11:20:54.700+00:00,19.148,-64.342,52.0,3.2,Md,6,320,0.8,0.25,pr,pr14208005,1406489002668 -2014-07-27T10:46:39.610+00:00,36.077,-117.858,1.3,2.6,ml,30,52,0.0,0.13,ci,ci15531617,1406557045080 -2014-07-27T10:26:59.800+00:00,19.214,-64.360,48.0,3.2,Md,8,306,0.8,0.07,pr,pr14208004,1406485774561 -2014-07-27T10:15:31.810+00:00,-2.948,136.459,40.4,4.7,mb,,40,4.2,1.01,us,usb000rxqg,1406485085954 -2014-07-27T09:28:06.380+00:00,36.293,-97.475,5.0,2.8,mb_lg,,32,0.2,0.51,us,usb000rxq9,1406506840647 -2014-07-27T09:24:17.230+00:00,39.699,142.150,55.8,4.5,mb,,140,2.4,1.30,us,usb000rxqa,1406482042064 -2014-07-27T08:50:11.100+00:00,19.303,-155.388,2.9,2.5,Ml,,94,0.0,0.27,hv,hv60741681,1406479992238 -2014-07-27T06:56:12.600+00:00,17.870,-66.902,124.0,3.1,Md,5,274,0.2,0.18,pr,pr14208003,1406473128516 -2014-07-27T05:00:17.000+00:00,54.190,-162.555,22.7,2.5,ml,,,,0.68,ak,ak11339180,1406500364070 -2014-07-27T04:46:40.000+00:00,51.725,178.502,96.5,2.5,ml,,,,0.32,ak,ak11339158,1406500367477 -2014-07-27T04:02:11.880+00:00,-24.766,-177.376,166.9,5.1,mb,,97,4.5,0.95,us,usb000rxp3,1406462681647 -2014-07-27T03:40:59.790+00:00,40.192,143.095,47.6,4.2,mb,,170,1.8,0.69,us,usb000rxp1,1406461416601 -2014-07-27T03:38:45.000+00:00,51.840,178.430,113.6,3.5,ml,,,,0.34,ak,ak11339107,1406500361104 -2014-07-27T02:20:41.190+00:00,37.489,72.088,190.9,4.1,mb,,130,1.3,0.49,us,usb000rxnr,1406456601357 -2014-07-27T02:11:55.660+00:00,-4.463,152.033,10.0,4.4,mb,,133,0.3,1.10,us,usb000rxns,1406456067053 -2014-07-27T02:10:21.300+00:00,18.922,-64.635,4.0,2.6,Md,7,295,0.5,0.27,pr,pr14208001,1406455970688 -2014-07-27T01:28:38.050+00:00,23.761,-45.646,10.0,6.0,mwb,,60,16.9,1.18,us,usb000rxni,1406505367000 -2014-07-27T01:27:12.000+00:00,67.630,-161.975,27.9,3.7,ml,,,,1.00,ak,ak11339033,1406500280947 -2014-07-26T22:44:29.000+00:00,63.532,-149.552,100.0,2.6,ml,,,,0.57,ak,ak11338987,1406443615968 -2014-07-26T21:55:56.850+00:00,25.290,127.100,42.0,4.4,mb,,136,1.9,0.94,us,usb000rxn2,1406440743637 -2014-07-26T21:25:13.510+00:00,-22.973,-69.942,56.4,4.5,mwr,,97,0.4,1.19,us,usb000rxmi,1406487667000 -2014-07-26T21:22:07.680+00:00,-52.038,-74.376,12.9,4.7,mb,,152,1.5,1.09,us,usb000rxmj,1406438681041 -2014-07-26T21:08:33.850+00:00,-21.197,-179.091,603.4,4.7,mb,,51,8.1,0.80,us,usb000rxmv,1406437868441 -2014-07-26T21:07:21.090+00:00,-21.248,-179.181,627.6,4.6,mb,,72,4.4,0.78,us,usb000rxmf,1406437795338 -2014-07-26T20:53:09.740+00:00,58.255,-137.083,10.0,4.0,ml,,113,1.2,0.51,us,usb000rxm6,1406486293000 -2014-07-26T20:49:11.480+00:00,-50.107,120.019,13.5,4.8,mb,,135,16.9,0.58,us,usb000rxm7,1406436709093 -2014-07-26T20:38:31.410+00:00,36.993,142.589,24.5,4.6,mb,,129,3.5,0.72,us,usb000rxm5,1406436070729 -2014-07-26T20:37:33.000+00:00,58.309,-153.920,83.2,2.6,ml,,,,0.68,ak,ak11338830,1406436014230 -2014-07-26T17:52:44.100+00:00,51.761,178.510,98.6,3.0,ml,,164,0.6,0.63,us,usb000rxma,1406649566896 -2014-07-26T17:43:54.590+00:00,-6.823,150.417,27.7,4.9,mb,,41,3.1,1.16,us,usb000rxlg,1406648871000 -2014-07-26T17:11:16.540+00:00,-21.178,-15.190,14.7,5.1,mb,,32,29.5,0.50,us,usb000rxlb,1406647131000 -2014-07-26T17:09:10.750+00:00,0.558,98.662,79.7,4.5,mb,,166,1.3,1.02,us,usb000rxl8,1406646593313 -2014-07-26T16:32:03.300+00:00,46.265,-111.387,9.4,3.0,mc,56,144,0.2,0.23,mb,mb14956348,1406557279516 -2014-07-26T15:59:51.150+00:00,-60.083,-18.655,10.0,4.9,mb,,93,13.2,1.39,us,usb000rxkq,1406419351083 -2014-07-26T15:52:58.000+00:00,59.490,-152.796,99.9,2.8,ml,,,,0.74,ak,ak11338611,1406418937825 -2014-07-26T15:33:14.300+00:00,18.315,-68.296,84.0,3.0,Md,7,230,0.2,0.28,pr,pr14207004,1406417763419 -2014-07-26T15:26:58.500+00:00,19.294,-155.383,4.0,2.6,Ml,,101,0.0,0.12,hv,hv60740861,1406595510639 -2014-07-26T14:46:19.600+00:00,38.802,-122.771,1.7,2.5,Md,55,29,0.0,0.04,nc,nc72264991,1406590088953 -2014-07-26T14:12:20.560+00:00,27.879,128.229,64.1,4.8,mb,,122,1.0,1.32,us,usb000rxkc,1406412892070 -2014-07-26T13:49:38.000+00:00,60.064,-153.275,100.0,3.1,ml,,,,1.00,ak,ak11338535,1406411537182 -2014-07-26T12:17:04.500+00:00,17.918,-67.104,6.0,2.5,Md,10,281,0.1,0.31,pr,pr14207003,1406405982834 -2014-07-26T11:13:48.490+00:00,-60.060,-18.761,10.0,5.4,mb,,74,11.2,1.02,us,usb000rxjy,1406595367000 -2014-07-26T10:59:29.800+00:00,-60.121,-18.600,10.0,5.1,mb,,76,11.3,0.67,us,usb000rxjv,1406401330466 -2014-07-26T10:57:10.860+00:00,37.117,-97.804,2.8,3.4,mb_lg,,56,0.1,0.22,us,usb000rxjs,1406612016700 -2014-07-26T10:33:15.900+00:00,19.386,-65.322,86.0,3.1,Md,8,288,1.1,0.07,pr,pr14207002,1406399753770 -2014-07-26T10:31:41.590+00:00,51.722,178.452,105.7,4.5,mb,,110,0.6,1.14,us,usb000rxjn,1406406128322 -2014-07-26T09:56:01.270+00:00,6.762,-72.967,161.1,4.5,mb,,49,0.8,1.22,us,usb000rxjg,1406397517018 -2014-07-26T08:54:59.100+00:00,37.562,-118.847,10.4,2.8,Ml,31,130,0.0,0.03,nc,nc72264796,1406586607719 -2014-07-26T08:40:05.880+00:00,20.297,120.267,18.7,4.6,mb,,126,2.6,0.84,us,usb000rxj9,1406392962876 -2014-07-26T08:38:13.070+00:00,33.058,-115.905,0.9,2.8,ml,51,36,0.1,0.19,ci,ci15531225,1406558381240 -2014-07-26T08:05:51.680+00:00,45.566,150.919,75.6,4.9,mb,,48,5.8,0.91,us,usb000rxj3,1406390904095 -2014-07-26T07:33:00.500+00:00,18.415,-68.239,95.0,3.4,Md,12,194,0.2,0.31,pr,pr14207000,1406388939484 -2014-07-26T07:31:43.730+00:00,-30.293,-72.349,10.0,4.9,mb,,93,1.3,1.42,us,usb000rxiu,1406651319000 -2014-07-26T07:29:03.040+00:00,4.860,123.186,585.5,4.4,mb,,87,3.2,0.94,us,usb000rxix,1406388689941 -2014-07-26T07:22:42.410+00:00,74.554,9.622,10.0,4.2,mb,,132,4.0,1.10,us,usb000rxiv,1406388319400 -2014-07-26T06:24:12.200+00:00,18.279,-67.143,118.0,2.6,Md,8,194,0.1,0.34,pr,pr14207001,1406377897207 -2014-07-26T06:21:25.000+00:00,51.800,178.204,134.8,2.6,ml,,,,0.41,ak,ak11338313,1406406159012 -2014-07-26T05:49:51.250+00:00,9.798,-83.973,6.8,3.9,mb,,185,0.2,1.31,us,usb000rxie,1406392865535 -2014-07-26T05:34:46.710+00:00,-4.366,136.402,65.1,4.0,mb,,182,4.4,1.23,us,usb000rxid,1406381835194 -2014-07-26T04:37:56.000+00:00,60.041,-153.033,100.0,2.6,ml,,,,0.64,ak,ak11338277,1406378429607 -2014-07-25T23:22:10.310+00:00,43.523,147.303,51.7,5.1,mb,,126,3.4,0.81,us,usb000rxg5,1406359481641 -2014-07-25T23:22:09.830+00:00,18.528,145.578,183.6,5.0,mb,,80,0.5,0.81,us,usb000rxg7,1406359475872 -2014-07-25T21:49:42.000+00:00,58.320,-136.885,10.2,2.8,ml,,,,0.87,ak,ak11337849,1406353929466 -2014-07-25T20:03:47.490+00:00,37.280,99.035,15.0,4.5,mb,,45,8.7,1.05,us,usb000rxc9,1406397512278 -2014-07-25T19:40:35.160+00:00,-2.790,138.732,59.6,4.8,mb,,37,6.5,0.91,us,usb000rxbu,1406396958000 -2014-07-25T18:28:53.000+00:00,65.654,-144.825,17.7,3.6,ml,,,,0.58,ak,ak11337197,1406390886000 -2014-07-25T17:35:32.400+00:00,35.548,-121.251,3.5,2.7,Md,62,191,0.2,0.10,nc,nc72264461,1406588230608 -2014-07-25T17:05:46.190+00:00,28.789,143.660,34.2,5.0,mb,,41,2.1,0.72,us,usb000rxa3,1406389249000 -2014-07-25T16:43:24.000+00:00,67.590,-161.871,18.7,3.9,ml,,,,0.89,ak,ak11337003,1406335553472 -2014-07-25T16:01:36.300+00:00,18.279,-67.246,81.0,2.8,Md,15,140,0.2,0.23,pr,pr14206002,1406333051123 -2014-07-25T16:00:40.110+00:00,58.278,-137.039,10.0,3.8,ml,,146,1.2,0.93,us,usb000rx93,1406321659103 -2014-07-25T15:12:53.100+00:00,58.516,-136.730,10.0,3.7,ml,,167,1.0,1.01,us,usb000rx7j,1406315077615 -2014-07-25T13:52:33.200+00:00,36.137,-120.198,10.9,2.7,md,46,138,0.1,0.08,nc,nc72264361,1406326086295 -2014-07-25T13:19:49.000+00:00,58.455,-136.780,14.8,2.5,ml,,,,0.95,ak,ak11336678,1406323343276 -2014-07-25T13:06:30.690+00:00,58.202,-136.913,10.0,3.8,ml,,147,1.1,0.73,us,usb000rx72,1406322550122 -2014-07-25T12:48:44.160+00:00,17.883,145.395,323.6,4.4,mb,,89,4.3,0.91,us,usb000rx6z,1406321483051 -2014-07-25T12:11:49.000+00:00,58.265,-137.064,5.6,3.8,ml,,,,0.72,ak,ak11336580,1406319260719 -2014-07-25T11:59:55.280+00:00,58.334,-137.039,10.0,3.8,mb,,118,1.2,1.35,us,usb000rx6n,1406311128877 -2014-07-25T11:53:19.830+00:00,58.267,-137.025,10.0,3.9,ml,,140,1.2,0.68,us,usb000rx6l,1406318149640 -2014-07-25T11:33:55.670+00:00,58.298,-137.000,10.0,4.0,mb,,118,1.2,0.85,us,usb000rx69,1406316992819 -2014-07-25T11:19:36.760+00:00,58.480,-137.055,10.0,4.4,mb,,83,1.2,1.31,us,usb000rx63,1406309170613 -2014-07-25T11:09:06.090+00:00,-29.609,-177.409,39.2,4.9,mb,,129,0.6,0.65,us,usb000rx6j,1406315501551 -2014-07-25T11:08:39.490+00:00,58.283,-137.121,10.0,4.5,mb,,128,1.2,0.86,us,usb000rx5r,1406308992695 -2014-07-25T10:59:35.000+00:00,57.808,-154.798,77.6,4.3,ml,,,,0.70,ak,ak11336425,1406314929712 -2014-07-25T10:54:49.780+00:00,58.358,-137.130,10.0,5.9,mwp,,56,1.2,1.11,us,usb000rx5i,1406439600231 -2014-07-25T10:54:47.000+00:00,19.333,-155.193,7.8,2.5,Ml,,83,0.0,0.07,hv,hv60738871,1406323803863 -2014-07-25T10:54:06.050+00:00,58.278,-137.076,10.0,4.7,mb,,84,1.2,0.98,us,usb000rx5g,1406292660952 -2014-07-25T10:43:53.850+00:00,-15.205,-72.078,165.1,4.6,mb,,127,3.6,1.10,us,usb000rx5e,1406313993070 -2014-07-25T10:01:05.700+00:00,47.739,-121.996,0.1,2.9,Ml,,50,0.0,0.43,uw,uw60826997,1406546227589 -2014-07-25T09:58:01.580+00:00,36.731,71.289,186.9,4.5,mb,,75,0.7,1.25,us,usb000rx57,1406311234592 -2014-07-25T08:32:37.130+00:00,-25.478,-175.028,10.0,5.1,mb,,52,4.6,1.19,us,usb000rx37,1406306108724 -2014-07-25T07:38:31.600+00:00,19.104,-66.506,23.0,2.6,Md,15,252,0.6,0.37,pr,pr14206001,1406302872934 -2014-07-25T07:10:29.120+00:00,14.429,-89.927,253.9,4.3,mb,,114,0.5,0.87,us,usb000rx2t,1406301178069 -2014-07-25T07:05:21.200+00:00,17.953,-68.366,55.0,3.1,Md,9,270,0.6,0.40,pr,pr14206000,1406300882017 -2014-07-25T04:56:52.300+00:00,36.641,-98.242,5.0,3.3,mb_lg,,54,0.2,0.73,us,usb000rx2d,1406350880057 -2014-07-25T04:52:57.900+00:00,-23.196,-66.150,176.1,4.5,mb,,175,2.6,1.36,us,usb000rx2c,1406292930539 -2014-07-25T04:18:17.240+00:00,41.589,142.045,69.7,5.1,mb,,116,0.9,0.74,us,usb000rx2a,1406301332389 -2014-07-25T03:50:21.000+00:00,63.246,-151.559,12.1,3.2,ml,,,,1.22,ak,ak11336251,1406289178346 -2014-07-25T03:22:36.000+00:00,62.881,-148.279,58.8,3.7,ml,,,,0.86,ak,ak11336230,1406308512867 -2014-07-25T01:41:38.000+00:00,62.692,-149.420,14.8,2.9,ml,,,,0.97,ak,ak11336204,1406281447568 -2014-07-25T00:02:39.650+00:00,-21.408,-179.298,615.9,4.6,mb,,53,4.4,0.63,us,usb000rx1k,1406275520759 -2014-07-24T23:57:28.400+00:00,10.413,125.267,38.0,5.3,mb,,87,3.3,0.97,us,usb000rx1j,1406383955000 -2014-07-24T23:09:04.010+00:00,28.496,-43.739,10.0,4.7,mb,,134,24.0,0.53,us,usb000rx1f,1406272290643 -2014-07-24T21:51:10.400+00:00,-36.625,-73.689,13.0,4.6,mb,,124,0.6,0.62,us,usb000rx12,1406267629918 -2014-07-24T19:20:14.640+00:00,32.904,-116.268,8.8,3.5,ml,58,47,0.0,0.21,ci,ci15530681,1406316081121 -2014-07-24T18:48:27.300+00:00,10.054,-84.240,10.0,4.0,mb,,177,0.1,0.71,us,usb000rx2l,1406691331456 -2014-07-24T18:06:01.000+00:00,62.093,-149.705,26.0,2.8,ml,,,,0.61,ak,ak11335668,1406254123676 -2014-07-24T17:12:43.200+00:00,17.749,-63.596,136.0,3.6,Md,11,158,0.4,0.17,pr,pr14205002,1406250912050 -2014-07-24T17:10:20.440+00:00,-5.609,145.391,75.2,5.4,mb,,32,4.2,1.07,us,usb000rwxu,1406223732295 -2014-07-24T16:51:15.720+00:00,42.302,144.823,53.8,4.4,mb,,115,1.3,0.88,us,usb000rwxf,1406300619000 -2014-07-24T16:04:30.000+00:00,60.116,-153.306,100.0,3.1,ml,,,,0.95,ak,ak11335609,1406296652000 -2014-07-24T15:44:53.100+00:00,35.731,-121.116,6.5,3.0,Ml,72,97,0.0,0.07,nc,nc72263841,1406295695000 -2014-07-24T15:20:51.800+00:00,35.729,-121.118,6.5,2.7,Md,62,50,0.0,0.07,nc,nc72263801,1406244205165 -2014-07-24T14:49:48.630+00:00,-9.326,115.402,65.3,4.0,mb,,71,1.5,0.77,us,usb000rx2g,1406265086000 -2014-07-24T14:39:46.000+00:00,51.429,-174.641,26.5,3.7,ml,,,,0.50,ak,ak11335546,1406241735857 -2014-07-24T14:30:35.000+00:00,60.080,-153.300,100.0,3.0,ml,,,,0.98,ak,ak11335536,1406241184252 -2014-07-24T11:20:38.000+00:00,63.189,-152.864,1.4,2.7,ml,,,,0.80,ak,ak11335497,1406229784369 -2014-07-24T11:15:58.000+00:00,59.871,-152.873,97.3,2.6,ml,,,,0.54,ak,ak11335475,1406229519329 -2014-07-24T11:08:17.700+00:00,18.679,-67.995,90.0,3.2,Md,11,209,0.4,0.28,pr,pr14205001,1406229049960 -2014-07-24T10:58:08.400+00:00,18.966,-67.850,50.0,3.3,Md,9,241,0.7,0.28,pr,pr14205000,1406228446420 -2014-07-24T10:27:28.000+00:00,35.785,-97.507,6.4,2.7,mb_lg,,107,0.0,0.51,us,usb000rx2j,1406265787861 -2014-07-24T10:14:39.200+00:00,19.430,-155.617,44.7,2.5,Ml,,65,0.0,0.23,hv,hv60738091,1406239997805 -2014-07-24T08:41:06.770+00:00,-9.205,111.534,36.4,5.0,mb,,89,1.6,0.99,us,usb000rwt6,1406214441262 -2014-07-24T08:16:51.650+00:00,-9.316,113.020,37.0,4.5,mb,,79,1.4,1.32,us,usb000rwt4,1406218774222 -2014-07-24T05:21:56.620+00:00,-18.351,-71.426,28.5,4.2,mwr,,155,1.0,0.87,us,usb000rwsh,1406208263533 -2014-07-24T04:49:16.460+00:00,-19.559,168.628,41.8,4.7,mb,,82,3.2,1.16,us,usb000rwsb,1406206304322 -2014-07-24T03:08:18.740+00:00,39.230,81.155,10.0,4.6,mb,,95,3.9,0.56,us,usb000rwrz,1406200254633 -2014-07-24T02:40:49.066+00:00,41.933,-119.647,1.4,3.1,ml,7,119,0.5,0.13,nn,nn00453018,1406221957055 -2014-07-24T02:11:25.900+00:00,37.967,-122.042,12.8,2.5,Md,50,76,0.1,0.10,nc,nc72263481,1406708940490 -2014-07-24T02:05:51.000+00:00,51.837,178.382,111.5,2.6,ml,,,,0.31,ak,ak11335358,1406220730995 -2014-07-24T01:49:46.092+00:00,41.878,-119.638,1.0,2.8,ml,5,123,0.5,0.16,nn,nn00453012,1406226804692 -2014-07-23T23:55:59.500+00:00,46.271,-111.379,9.7,3.6,mc,61,80,0.2,0.20,mb,mb30652,1406642596229 -2014-07-23T22:25:05.500+00:00,19.203,-66.625,25.0,2.8,Md,9,284,0.7,0.15,pr,pr14204006,1406183267494 -2014-07-23T22:13:08.000+00:00,62.394,-147.734,18.9,2.7,ml,,,,0.75,ak,ak11335283,1406156413907 -2014-07-23T21:39:08.040+00:00,-20.244,-68.702,115.0,5.5,mb,,34,0.4,1.20,us,usb000rwqe,1406217259000 -2014-07-23T21:00:46.980+00:00,-21.174,-68.754,135.0,4.2,mb,,46,0.7,0.90,us,usb000rwq1,1406178205473 -2014-07-23T17:57:50.200+00:00,18.783,-67.835,21.0,2.8,Md,4,331,0.5,0.07,pr,pr14204005,1406167223381 -2014-07-23T17:23:59.980+00:00,-6.484,152.682,29.3,4.9,mb,,49,2.3,0.96,us,usb000rwmx,1406165190499 -2014-07-23T16:26:42.700+00:00,48.983,-2.333,2.0,4.0,ml,,,,0.28,us,usb000rwp1,1406238200409 -2014-07-23T15:34:33.400+00:00,18.871,-64.428,29.0,2.7,Md,4,324,0.5,0.10,pr,pr14204004,1406158632650 -2014-07-23T14:20:38.910+00:00,14.185,-91.661,69.5,4.3,mb,,236,0.3,0.92,us,usb000rwke,1406154200909 -2014-07-23T14:03:47.500+00:00,35.879,-97.305,5.1,3.2,ml,,60,,0.36,us,usb000rwk6,1406176718919 -2014-07-23T13:57:23.480+00:00,13.655,144.789,110.3,4.6,mb,,66,0.1,0.54,us,usb000rwsa,1406400627372 -2014-07-23T12:29:07.700+00:00,-19.601,-178.286,597.4,4.3,mb,,123,3.9,1.02,us,usb000rwjh,1406147506564 -2014-07-23T09:57:47.530+00:00,-5.605,-80.878,34.2,4.6,mb,,117,7.5,0.70,us,usb000rwgu,1406111522929 -2014-07-23T06:54:39.716+00:00,41.872,-119.636,0.8,2.6,ml,4,221,0.5,0.18,nn,nn00452926,1406152096697 -2014-07-23T05:52:28.760+00:00,0.389,67.105,10.0,5.0,mb,,131,12.7,0.76,us,usb000rwdr,1406131898000 -2014-07-23T03:48:51.000+00:00,51.258,-174.963,25.7,2.5,ml,,,,0.45,ak,ak11334893,1406135770510 -2014-07-23T03:13:33.000+00:00,51.451,-175.675,27.8,2.5,ml,,,,0.82,ak,ak11334873,1406135774069 -2014-07-23T02:47:23.200+00:00,18.877,-64.527,10.0,2.6,Md,7,306,0.5,0.23,pr,pr14204001,1406112599869 -2014-07-23T02:02:26.580+00:00,35.902,-97.308,5.0,3.3,mb_lg,,41,0.2,0.41,us,usb000rwcu,1406135910015 -2014-07-23T00:28:19.720+00:00,16.905,-100.203,36.1,5.0,mb,,151,1.7,0.80,us,usb000rwc3,1406082673292 -2014-07-23T00:27:01.380+00:00,-20.595,-177.616,472.7,5.0,mb,,87,5.0,0.84,us,usb000rwc5,1406104171102 -2014-07-23T00:25:14.700+00:00,35.834,-97.436,5.0,2.5,mb_lg,,68,0.0,0.39,us,usb000rwdj,1406603982934 -2014-07-22T23:48:34.000+00:00,64.122,-150.147,5.2,2.8,ml,,,,0.74,ak,ak11334697,1406101863742 -2014-07-22T23:46:51.970+00:00,25.748,-110.416,10.0,4.1,mb,,146,2.1,1.34,us,usb000rwbv,1406101774048 -2014-07-22T23:35:14.620+00:00,26.132,89.604,14.7,4.0,mb,,170,2.1,0.80,us,usb000rwbx,1406101071038 -2014-07-22T22:58:31.040+00:00,26.216,89.676,15.0,4.2,mb,,188,2.1,0.89,us,usb000rwbn,1406073869205 -2014-07-22T22:37:12.000+00:00,59.921,-153.501,100.0,2.9,ml,,,,0.98,ak,ak11334633,1406097584822 -2014-07-22T21:56:14.410+00:00,16.844,-100.086,14.5,4.5,mb,,254,1.6,0.84,us,usb000rwb2,1406070734898 -2014-07-22T20:50:13.150+00:00,53.126,-168.530,80.8,3.7,mb,,164,0.2,1.48,us,usb000rwa2,1406124016000 -2014-07-22T20:15:12.010+00:00,51.680,-173.477,36.2,4.1,mb,,177,0.7,1.10,us,usb000rw98,1406123539000 -2014-07-22T17:50:29.800+00:00,36.655,-98.214,4.2,2.6,ml,,101,,1.32,us,usb000rw7l,1406122953000 -2014-07-22T17:28:09.700+00:00,35.814,-97.414,4.2,2.6,ml,,52,,1.04,us,usb000rw7t,1406121788000 -2014-07-22T17:05:43.000+00:00,61.746,-152.113,0.4,2.7,ml,,,,0.82,ak,ak11334458,1406077697353 -2014-07-22T16:14:36.560+00:00,32.286,-115.250,9.7,3.0,ml,13,277,0.1,0.22,ci,ci37249624,1406074637038 -2014-07-22T15:34:36.800+00:00,35.815,-119.882,10.3,2.6,Md,33,230,0.2,0.13,nc,nc72262511,1406147888089 -2014-07-22T15:32:28.000+00:00,51.818,178.400,118.6,2.5,ml,,,,0.35,ak,ak11334388,1406072108768 -2014-07-22T15:30:24.200+00:00,35.827,-119.861,4.8,2.9,Md,63,122,0.3,0.21,nc,nc72262506,1406151364463 -2014-07-22T15:22:38.790+00:00,27.536,57.333,10.0,5.1,mb,,76,2.8,0.65,us,usb000rw57,1406071515630 -2014-07-22T14:56:56.000+00:00,52.833,-169.771,116.7,2.6,ml,,,,0.31,ak,ak11334374,1406069972545 -2014-07-22T14:11:15.300+00:00,-20.298,-176.174,208.2,5.0,mb,,31,6.0,0.84,us,usb000rw4q,1406067228089 -2014-07-22T12:32:55.500+00:00,18.157,-64.232,45.0,2.8,Md,5,320,0.4,0.30,pr,pr14203003,1406061327433 -2014-07-22T10:49:56.090+00:00,12.001,142.357,59.9,5.0,mb,,53,2.9,0.84,us,usb000rw44,1406055146735 -2014-07-22T09:45:09.400+00:00,36.686,-121.316,4.7,2.8,Md,64,29,0.0,0.06,nc,nc72262326,1406061786944 -2014-07-22T09:05:31.000+00:00,59.763,-151.901,47.8,2.5,ml,,,,0.55,ak,ak11334230,1406048885693 -2014-07-22T08:35:04.350+00:00,31.616,-114.464,10.0,2.9,ml,3,248,0.7,0.31,ci,ci37249432,1406047066548 -2014-07-22T08:34:51.040+00:00,31.663,-114.498,10.0,2.5,ml,5,128,0.7,0.20,ci,ci37206365,1406054015082 -2014-07-22T08:04:18.280+00:00,34.242,26.146,27.3,4.8,mb,,149,1.5,1.06,us,usb000rw3d,1406045206003 -2014-07-22T07:11:06.100+00:00,36.686,-121.316,4.9,2.9,Md,63,29,0.0,0.06,nc,nc72262166,1406065088024 -2014-07-22T06:50:31.930+00:00,26.071,-110.144,10.0,4.8,mb,,182,4.1,1.37,us,usb000rw32,1406040779123 -2014-07-22T05:08:38.000+00:00,60.360,-140.289,1.7,2.7,ml,,,,0.71,ak,ak11334117,1406034669268 -2014-07-22T03:03:58.650+00:00,30.654,31.760,5.8,4.3,mb,,238,4.5,1.13,us,usb000rw2e,1406048073859 -2014-07-22T02:16:43.300+00:00,17.794,-68.261,91.0,3.6,Md,12,331,1.1,0.33,pr,pr14203000,1406024366100 -2014-07-22T02:15:07.300+00:00,19.346,-65.155,38.0,2.7,Md,3,335,1.0,0.28,pr,pr14203001,1406024259089 -2014-07-22T02:08:33.290+00:00,35.591,-97.412,5.0,2.6,mb_lg,,52,0.0,0.44,us,usb000rw2y,1406094561872 -2014-07-22T01:23:10.000+00:00,60.345,-140.260,2.2,3.7,ml,,,,0.88,ak,ak11334025,1406021148310 -2014-07-22T00:45:35.000+00:00,67.670,-161.995,14.1,2.9,ml,,,,1.02,ak,ak11334011,1406018884143 -2014-07-22T00:33:01.000+00:00,67.051,-147.955,,2.8,ml,,,,0.82,ak,ak11334005,1406018132629 -2014-07-21T22:04:19.000+00:00,51.905,178.292,119.5,2.7,ml,,,,0.42,ak,ak11333795,1406009209755 -2014-07-21T21:52:36.300+00:00,37.985,-122.047,16.3,2.5,Md,49,72,0.0,0.11,nc,nc72261796,1406005610563 -2014-07-21T21:45:56.630+00:00,35.817,-97.413,5.0,2.9,mb_lg,,85,0.0,0.50,us,usb000rw2v,1406028598158 -2014-07-21T21:27:46.600+00:00,18.770,-64.363,24.0,2.9,Md,5,310,0.7,0.07,pr,pr14202003,1406007028049 -2014-07-21T20:39:50.120+00:00,51.400,-175.037,37.8,4.7,mb,,140,0.9,1.19,us,usb000rvap,1406004150701 -2014-07-21T20:35:56.330+00:00,51.306,-174.991,36.5,4.6,mb,,143,1.0,1.01,us,usb000rvak,1406003903998 -2014-07-21T19:47:28.000+00:00,57.468,-154.446,100.0,2.5,ml,,,,0.96,ak,ak11333674,1406001006569 -2014-07-21T19:37:33.000+00:00,51.305,-174.932,25.6,4.2,ml,,,,0.38,ak,ak11333803,1406000412949 -2014-07-21T19:36:43.860+00:00,51.282,-174.934,10.0,4.8,mb,,77,1.0,0.72,us,usb000rv9m,1406000373702 -2014-07-21T18:50:15.900+00:00,43.666,-121.450,,2.6,Ml,,281,0.1,0.15,uw,uw60823807,1405997562675 -2014-07-21T17:48:01.000+00:00,51.039,178.505,1.5,2.7,ml,,,,0.44,ak,ak11333627,1405993839772 -2014-07-21T17:21:25.200+00:00,18.868,-65.220,45.0,3.1,Md,9,234,0.6,0.15,pr,pr14202002,1405992240485 -2014-07-21T16:49:00.420+00:00,-1.471,-77.647,178.6,4.1,mb,,160,3.5,0.64,us,usb000rv8d,1405990298410 -2014-07-21T14:54:41.000+00:00,-19.829,-178.464,616.4,6.9,mww,,15,3.9,0.88,us,usb000ruzk,1405983436259 -2014-07-21T13:21:45.000+00:00,63.835,-149.309,119.6,3.3,ml,,,,0.88,ak,ak11333469,1405977865427 -2014-07-21T13:02:12.400+00:00,19.067,-66.128,46.0,3.0,Md,5,259,0.9,0.23,pr,pr14202001,1405976687598 -2014-07-21T12:21:26.000+00:00,67.595,-160.935,10.0,3.3,ml,,,,0.89,ak,ak11333451,1405974245632 -2014-07-21T11:22:20.000+00:00,58.272,-151.457,0.3,2.8,ml,,,,0.57,ak,ak11333437,1405970689103 -2014-07-21T10:44:58.000+00:00,61.352,-147.019,12.9,3.0,ml,,,,0.61,ak,ak11333419,1405968452977 -2014-07-21T10:04:19.160+00:00,14.078,-89.687,10.0,4.1,mb,,123,0.4,1.22,us,usb000ruy4,1406010044359 -2014-07-21T09:44:38.000+00:00,50.953,178.843,53.2,2.7,ml,,,,0.35,ak,ak11333391,1405964832014 -2014-07-21T06:01:01.650+00:00,-6.343,152.939,26.9,4.9,mb,,82,2.3,0.73,us,usb000ruxk,1405951411443 -2014-07-21T05:49:25.800+00:00,18.851,-64.342,22.0,2.8,Md,6,310,0.5,0.31,pr,pr14202000,1405950721477 -2014-07-21T05:25:55.500+00:00,19.840,-155.823,17.3,2.5,ml,,173,0.2,0.15,hv,hv60735786,1405978530092 -2014-07-21T03:51:24.238+00:00,41.878,-119.610,,2.7,ml,5,131,0.5,0.14,nn,nn00452622,1405953228434 -2014-07-21T03:29:37.000+00:00,57.280,-135.990,1.0,2.7,ml,,,,0.84,ak,ak11333304,1405942331759 -2014-07-21T02:55:13.090+00:00,32.470,-117.715,10.0,3.2,ml,7,321,0.5,0.19,ci,ci37248888,1405949599346 -2014-07-21T02:40:12.000+00:00,60.426,-150.394,51.8,2.6,ml,,,,1.06,ak,ak11333289,1405939362545 -2014-07-21T02:04:21.000+00:00,50.078,-178.465,19.2,2.7,ml,,,,0.65,ak,ak11333278,1405937210823 -2014-07-21T02:04:08.430+00:00,-49.560,-114.536,10.0,4.9,mb,,118,31.9,0.59,us,usb000ruwr,1405937205052 -2014-07-21T00:21:26.740+00:00,-20.131,-70.632,21.8,4.8,mb,,96,0.6,0.85,us,usb000ruwb,1405931040406 -2014-07-20T23:09:10.960+00:00,-20.465,-178.075,540.0,4.4,mb,,115,4.6,0.90,us,usb000ruw4,1405926704725 -2014-07-20T22:27:11.800+00:00,37.835,-121.785,15.9,2.5,Md,50,126,0.0,0.16,nc,nc72261151,1405978449032 -2014-07-20T21:35:01.000+00:00,50.937,179.584,50.2,3.7,ml,,,,0.47,ak,ak11333151,1405921058776 -2014-07-20T19:48:38.640+00:00,35.511,-116.245,0.7,3.0,ml,17,93,0.3,0.13,ci,ci37248784,1405948968970 -2014-07-20T19:43:22.240+00:00,35.514,-116.242,2.6,3.2,ml,19,93,0.3,0.10,ci,ci37248768,1405964946520 -2014-07-20T18:32:48.460+00:00,44.599,148.748,70.0,6.2,mww,,31,4.4,1.14,us,usb000ruu6,1406037152057 -2014-07-20T18:27:18.000+00:00,59.890,-153.628,100.0,2.9,ml,,,,1.23,ak,ak11332893,1405909801101 -2014-07-20T17:23:33.500+00:00,19.401,-154.986,2.5,2.5,Ml,,180,0.0,0.12,hv,hv60735321,1405987928730 -2014-07-20T16:37:21.000+00:00,63.512,-149.735,100.0,2.7,ml,,,,0.96,ak,ak11332802,1405903215975 -2014-07-20T15:39:04.000+00:00,50.506,179.386,11.3,2.9,ml,,,,1.49,ak,ak11332784,1405912782947 -2014-07-20T15:24:13.980+00:00,-4.781,144.892,93.8,4.9,mb,,59,5.1,0.77,us,usb000ruth,1405912664181 -2014-07-20T15:12:35.900+00:00,40.986,-125.421,3.7,2.8,Md,36,295,1.1,0.19,nc,nc72260986,1406008023887 -2014-07-20T15:03:24.420+00:00,-4.925,144.767,94.4,4.8,mb,,224,5.0,0.73,us,usb000rut8,1405912643729 -2014-07-20T14:18:27.000+00:00,59.561,-153.244,100.0,2.5,ml,,,,0.53,ak,ak11332724,1405894853914 -2014-07-20T14:10:53.660+00:00,7.512,136.799,137.6,4.8,mb,,59,10.0,1.24,us,usb000rut0,1405912626832 -2014-07-20T14:07:49.760+00:00,41.933,35.918,10.0,4.1,mb,,125,1.9,0.93,us,usb000rusy,1405948127828 -2014-07-20T13:30:21.180+00:00,32.134,134.374,26.2,4.6,mb,,65,3.1,0.46,us,usb000russ,1405912575059 -2014-07-20T13:09:24.600+00:00,18.655,-65.030,57.0,2.6,Md,6,241,0.3,0.25,pr,pr14201014,1405912634209 -2014-07-20T12:29:43.600+00:00,-20.473,168.761,51.1,4.8,mb,,88,2.7,0.91,us,usb000rusr,1405912535920 -2014-07-20T12:28:15.600+00:00,36.298,-97.544,6.7,2.9,ml,,58,,0.44,us,usb000rv95,1406034342082 -2014-07-20T12:24:58.090+00:00,37.341,-98.102,4.6,3.3,mb_lg,,39,0.1,0.82,us,usb000rusq,1405912490656 -2014-07-20T12:10:12.370+00:00,-20.465,168.836,44.6,4.8,mb,,91,2.7,1.27,us,usb000rusm,1405912479764 -2014-07-20T11:48:32.000+00:00,57.021,-157.844,100.0,3.1,ml,,,,1.15,ak,ak11332617,1405885908759 -2014-07-20T11:48:18.600+00:00,17.889,-65.426,7.0,2.5,Md,12,173,0.2,0.25,pr,pr14201011,1405912457719 -2014-07-20T11:11:25.200+00:00,40.448,-113.978,9.6,2.5,Ml,,263,0.9,0.24,uu,uu60077902,1405969624909 -2014-07-20T10:19:45.000+00:00,60.410,-140.375,0.1,3.1,ml,,,,0.61,ak,ak11332554,1405880556975 -2014-07-20T10:04:42.700+00:00,18.760,-64.319,31.0,2.7,Md,4,335,0.4,0.03,pr,pr14201013,1405912471290 -2014-07-20T09:51:28.600+00:00,18.858,-64.406,8.0,3.1,Md,6,313,0.5,0.25,pr,pr14201012,1405912461788 -2014-07-20T09:40:19.700+00:00,18.178,-66.916,24.0,2.5,Md,13,94,0.2,0.30,pr,pr14201010,1405912374876 -2014-07-20T09:38:36.000+00:00,51.523,-177.930,21.5,3.3,ml,,,,0.52,ak,ak11332498,1405912784626 -2014-07-20T09:23:30.750+00:00,14.838,-92.500,89.0,5.1,mb,,132,0.8,1.50,us,usb000rurw,1405912360330 -2014-07-20T09:22:14.440+00:00,-40.977,174.098,58.7,4.3,mb,,52,0.5,0.89,us,usb000rurv,1405912390899 -2014-07-20T09:18:21.790+00:00,32.894,-116.274,6.6,3.1,ml,76,48,0.0,0.20,ci,ci37248544,1406722375000 -2014-07-20T08:15:04.210+00:00,37.799,23.972,170.3,4.2,mb,,62,1.7,1.10,us,usb000rurh,1405912241112 -2014-07-20T07:32:16.000+00:00,62.136,-152.086,100.0,2.9,ml,,,,0.67,ak,ak11332415,1405870490587 -2014-07-20T06:31:45.510+00:00,-28.092,-70.978,44.8,4.7,mb,,100,0.1,0.71,us,usb000rur0,1405912168337 -2014-07-20T05:24:03.400+00:00,17.785,-68.362,81.0,2.9,Md,9,338,1.2,0.28,pr,pr14201005,1405912129589 -2014-07-20T04:24:41.500+00:00,19.019,-64.924,38.0,3.0,Md,17,256,0.7,0.31,pr,pr14201002,1405912075740 -2014-07-20T04:18:47.850+00:00,-29.910,-177.333,10.0,5.5,mb,,58,0.8,1.17,us,usb000rupz,1405954566000 -2014-07-20T04:14:03.400+00:00,38.252,-122.328,8.0,2.8,Md,59,76,0.0,0.11,nc,nc72260721,1406085797119 -2014-07-20T03:56:38.900+00:00,17.607,-66.590,45.0,2.9,Md,4,328,0.6,0.14,pr,pr14201004,1405912112118 -2014-07-20T03:06:36.000+00:00,60.281,-140.264,5.0,3.1,ml,,,,0.95,ak,ak11332234,1405912211355 -2014-07-20T02:15:44.000+00:00,60.293,-140.281,13.6,4.8,ml,,,,0.92,ak,ak11332039,1405911908926 -2014-07-20T01:25:33.310+00:00,36.537,140.596,53.3,4.6,mb,,119,1.9,0.66,us,usb000runx,1406159941538 -2014-07-20T00:44:26.400+00:00,18.598,-67.249,82.0,2.8,Md,7,292,0.2,0.14,pr,pr14201000,1405911959122 -2014-07-20T00:24:58.450+00:00,37.224,-97.947,5.5,3.0,mb_lg,,28,0.0,0.92,us,usb000rung,1405911752012 -2014-07-20T00:07:05.630+00:00,36.580,70.321,208.2,4.2,mb,,78,0.6,0.83,us,usb000rune,1405911722930 -2014-07-19T22:21:54.720+00:00,9.819,124.146,10.0,4.7,mb,,94,3.1,1.14,us,usb000run2,1405812859706 -2014-07-19T21:08:15.000+00:00,50.165,178.773,16.9,2.7,ml,,,,0.60,ak,ak11331818,1405912676264 -2014-07-19T19:38:40.500+00:00,19.012,-65.361,31.0,2.6,Md,10,263,0.7,0.12,pr,pr14200009,1405827668113 -2014-07-19T19:28:11.000+00:00,59.621,-154.850,100.0,2.8,ml,,,,1.81,ak,ak11331666,1405827052646 -2014-07-19T18:28:16.800+00:00,19.042,-65.558,33.0,2.6,Md,4,317,0.8,0.09,pr,pr14200008,1406041730000 -2014-07-19T17:06:39.000+00:00,67.580,-161.826,19.3,3.2,ml,,,,0.79,ak,ak11331572,1406041241000 -2014-07-19T16:31:14.279+00:00,41.882,-119.657,1.9,2.5,ml,6,122,0.5,0.19,nn,nn00452450,1405816425067 -2014-07-19T16:26:24.880+00:00,12.547,-89.384,53.0,4.7,mb,,183,1.1,0.99,us,usb000rukz,1405816131504 -2014-07-19T15:59:58.000+00:00,67.632,-161.707,14.4,2.9,ml,,,,0.87,ak,ak11331511,1405814556826 -2014-07-19T15:16:41.000+00:00,60.343,-140.297,0.1,2.8,ml,,,,0.74,ak,ak11331460,1405811953357 -2014-07-19T14:14:01.880+00:00,11.752,57.563,10.0,6.0,mwb,,51,3.6,1.39,us,usb000ruks,1405914490000 -2014-07-19T13:40:12.000+00:00,51.638,178.383,62.9,2.7,ml,,,,0.49,ak,ak11331345,1405806158960 -2014-07-19T13:13:38.270+00:00,-20.667,168.856,46.0,4.8,mb,,102,2.6,1.80,us,usb000ruke,1405804579104 -2014-07-19T13:04:21.370+00:00,-20.607,168.712,35.0,4.7,mb,,101,2.6,0.58,us,usb000ruka,1405804009711 -2014-07-19T12:27:09.270+00:00,-15.799,-174.404,219.8,6.0,mwp,,47,3.2,1.04,us,usb000rujq,1405819592000 -2014-07-19T12:14:59.070+00:00,21.478,103.977,13.0,4.5,mb,,74,0.2,0.72,us,usb000rujk,1405848069467 -2014-07-19T12:04:54.920+00:00,31.901,-115.021,15.0,2.7,ml,7,194,0.6,0.05,ci,ci37206349,1405976745660 -2014-07-19T10:53:55.600+00:00,19.008,-65.590,34.0,3.1,Md,11,256,0.8,0.10,pr,pr14200005,1405796187757 -2014-07-19T10:47:29.200+00:00,19.099,-65.504,33.0,2.7,Md,4,317,0.8,0.02,pr,pr14200007,1405795807110 -2014-07-19T10:45:48.200+00:00,18.983,-65.542,47.0,2.8,Md,6,274,0.7,0.07,pr,pr14200006,1405795700808 -2014-07-19T09:48:00.410+00:00,-20.357,168.647,35.0,4.9,mb,,47,2.7,0.84,us,usb000ruj0,1405792228614 -2014-07-19T09:27:46.220+00:00,48.327,154.681,35.0,4.7,mb,,130,5.2,0.68,us,usb000ruiu,1405791014249 -2014-07-19T09:16:21.160+00:00,41.624,42.058,10.0,4.1,mb,,166,1.1,0.54,us,usb000ruiq,1405790331114 -2014-07-19T09:15:40.000+00:00,51.669,178.450,89.4,2.9,ml,,,,0.41,ak,ak11331180,1405793014994 -2014-07-19T08:44:27.600+00:00,17.966,-68.371,44.0,3.4,Md,19,270,0.5,0.33,pr,pr14200004,1405788423282 -2014-07-19T08:42:28.000+00:00,67.529,-162.036,3.5,3.2,ml,,,,0.85,ak,ak11331172,1405788309640 -2014-07-19T08:30:54.230+00:00,51.823,178.409,107.4,4.4,mb,,41,0.7,1.03,us,usb000ruif,1405792978402 -2014-07-19T07:43:44.590+00:00,-1.202,151.896,18.4,4.7,mb,,114,3.0,1.25,us,usb000rui3,1405784786229 -2014-07-19T07:17:56.420+00:00,36.872,71.129,85.8,5.3,mb,,43,0.5,1.25,us,usb000ruhx,1405815769000 -2014-07-19T06:15:24.450+00:00,-31.788,179.423,428.8,5.1,mb,,58,3.4,1.20,us,usb000ruhg,1405779476131 -2014-07-19T06:09:50.000+00:00,19.615,-65.314,13.0,3.0,Md,3,335,1.3,0.14,pr,pr14200003,1405779139996 -2014-07-19T06:01:25.000+00:00,61.494,-146.526,17.7,2.8,ml,,,,1.03,ak,ak11331078,1405778641455 -2014-07-19T05:37:04.000+00:00,17.539,-94.351,168.8,4.3,mb,,126,2.5,1.10,us,usb000ruhb,1405777181698 -2014-07-19T05:32:55.150+00:00,13.985,-91.446,63.9,4.2,mb,,147,0.6,0.99,us,usb000ruha,1405752209391 -2014-07-19T04:56:50.400+00:00,18.504,-64.810,5.0,2.8,Md,9,212,0.2,0.51,pr,pr14200002,1405774763115 -2014-07-19T03:50:42.100+00:00,18.096,-64.590,127.0,3.0,Md,4,270,0.3,0.07,pr,pr14200001,1405770803744 -2014-07-19T02:45:45.780+00:00,-7.766,126.892,203.6,4.5,mb,,93,3.3,0.79,us,usb000rugn,1405766903131 -2014-07-19T02:24:33.190+00:00,38.492,43.306,10.0,4.0,mb,,157,2.9,1.23,us,usb000rugg,1405765626289 -2014-07-19T01:42:53.160+00:00,36.015,140.239,64.9,4.7,mb,,135,1.7,0.51,us,usb000rufw,1406160238781 -2014-07-18T23:09:33.300+00:00,18.195,-67.323,30.0,2.8,Md,15,263,0.2,0.25,pr,pr14199000,1405753929745 -2014-07-18T21:56:32.500+00:00,35.591,-97.391,6.4,2.7,ml,,46,,0.57,us,usb000ruef,1405735485854 -2014-07-18T21:52:38.087+00:00,41.942,-119.657,0.2,2.6,ml,7,81,0.5,0.19,nn,nn00452413,1405987979447 -2014-07-18T21:32:41.000+00:00,60.381,-140.342,3.0,2.8,ml,,,,0.63,ak,ak11330690,1406324282307 -2014-07-18T21:12:05.000+00:00,57.779,-155.934,8.7,2.7,ml,,,,0.62,ak,ak11330624,1406324078183 -2014-07-18T20:44:40.540+00:00,13.025,-89.820,54.2,4.3,mb,,171,0.9,1.15,us,usb000rudf,1405786995363 -2014-07-18T20:01:28.890+00:00,30.203,32.376,10.0,4.2,mb,,194,4.8,1.24,us,usb000rud7,1406000675477 -2014-07-18T19:11:28.000+00:00,51.706,178.245,109.5,2.5,ml,,,,0.56,ak,ak11330520,1406324079682 -2014-07-18T18:44:26.410+00:00,-20.478,168.743,20.4,5.1,mb,,88,2.7,0.95,us,usb000ru9p,1405783709668 -2014-07-18T18:35:20.000+00:00,51.740,178.515,97.4,2.9,ml,,,,0.31,ak,ak11330609,1406324155058 -2014-07-18T18:23:07.470+00:00,-34.627,-179.590,43.5,5.4,mwb,,24,3.4,0.94,us,usb000ru8u,1405786140475 -2014-07-18T17:49:25.350+00:00,-5.292,151.954,70.2,4.7,mb,,48,1.1,0.90,us,usb000ru87,1405777417000 -2014-07-18T17:19:00.000+00:00,51.810,178.370,103.8,2.5,ml,,,,1.35,us,usb000ru82,1406324067369 -2014-07-18T16:02:12.000+00:00,18.657,-65.186,74.0,2.7,Md,4,230,0.4,0.27,pr,pr14199002,1405746655945 -2014-07-18T14:04:45.000+00:00,57.744,-155.935,1.1,3.9,ml,,,,0.80,ak,ak11330251,1406324063074 -2014-07-18T13:41:13.520+00:00,36.654,-98.141,5.0,3.2,mb_lg,,42,0.2,0.69,us,usb000ru53,1405719878649 -2014-07-18T13:12:54.100+00:00,19.029,-65.127,19.0,3.0,Md,7,252,0.7,0.37,pr,pr14199003,1405748975142 -2014-07-18T12:12:01.000+00:00,67.711,-162.128,10.9,2.9,ml,,,,0.71,ak,ak11330154,1406324132842 -2014-07-18T11:41:45.690+00:00,42.108,144.043,44.8,4.5,mb,,134,0.7,0.71,us,usb000ru49,1405712663366 -2014-07-18T11:05:32.000+00:00,61.691,-152.298,8.0,2.7,ml,,,,0.62,ak,ak11330083,1406324231690 -2014-07-18T10:45:43.200+00:00,18.947,-66.476,68.0,2.7,Md,4,281,0.7,0.09,pr,pr14199007,1405754001515 -2014-07-18T09:18:02.000+00:00,54.394,-161.702,9.9,2.5,ml,,,,0.84,ak,ak11330005,1406324124428 -2014-07-18T09:15:06.700+00:00,19.119,-66.471,42.0,2.6,Md,9,284,0.6,0.14,pr,pr14199006,1405753380930 -2014-07-18T09:01:45.880+00:00,-24.355,-67.944,112.6,4.3,mb,,63,1.7,0.94,us,usb000ru3a,1405703053818 -2014-07-18T08:58:35.360+00:00,-16.199,168.470,35.0,5.2,mb,,59,1.4,0.95,us,usb000ru3d,1405702877767 -2014-07-18T08:56:45.270+00:00,51.602,178.413,104.9,4.1,mb,,173,0.6,0.77,us,usb000ru39,1406324211593 -2014-07-18T08:40:44.000+00:00,49.935,-178.354,46.4,2.5,ml,,,,0.59,ak,ak11337585,1406324367225 -2014-07-18T08:33:37.230+00:00,-17.496,-63.481,42.5,4.5,mb,,93,4.6,0.95,us,usb000ru31,1405701373917 -2014-07-18T08:25:14.000+00:00,63.127,-151.391,8.0,2.8,ml,,,,0.79,ak,ak11329961,1406324120322 -2014-07-18T07:21:20.000+00:00,50.005,178.600,41.3,2.7,ml,,,,0.85,ak,ak11337577,1406324348560 -2014-07-18T06:05:21.700+00:00,40.596,-124.097,17.1,2.5,Md,19,158,0.2,0.10,nc,nc72259481,1405729683781 -2014-07-18T05:46:48.440+00:00,-20.195,-70.890,15.0,4.7,mb,,142,0.8,1.20,us,usb000ru22,1405725290000 -2014-07-18T05:33:26.000+00:00,67.592,-161.764,13.4,4.6,ml,,,,0.77,ak,ak11329859,1406324043060 -2014-07-18T05:30:01.000+00:00,67.586,-161.891,17.3,2.8,ml,,,,0.82,ak,ak11329857,1406324111474 -2014-07-18T05:24:10.300+00:00,-20.157,-70.868,14.4,4.8,mb,,113,0.8,1.19,us,usb000ru1u,1405724860000 -2014-07-18T04:56:53.670+00:00,39.691,143.552,27.7,4.6,mb,,236,2.3,0.38,us,usb000ru1k,1405688364213 -2014-07-18T04:38:50.030+00:00,37.009,142.693,10.0,4.7,mb,,129,3.6,1.01,us,usb000ru1d,1405687277627 -2014-07-18T04:31:53.000+00:00,67.593,-161.997,21.7,3.7,ml,,,,0.82,ak,ak11329811,1405686874493 -2014-07-18T04:29:35.000+00:00,67.617,-161.812,8.5,3.6,ml,,,,0.71,ak,ak11329808,1406324059667 -2014-07-18T03:58:58.770+00:00,38.300,26.628,10.5,4.2,mb,,,,0.94,us,usb000ru16,1405684894072 -2014-07-18T03:42:35.000+00:00,67.636,-161.857,16.4,3.5,ml,,,,0.65,ak,ak11329771,1406324076008 -2014-07-18T03:33:48.200+00:00,18.882,-65.352,77.0,2.8,Md,7,252,0.6,0.15,pr,pr14199005,1405758552625 -2014-07-18T03:29:05.000+00:00,19.390,-66.839,32.0,2.8,Md,3,349,1.0,0.09,pr,pr14199004,1405751760651 -2014-07-18T03:17:22.000+00:00,59.825,-153.371,135.3,2.6,ml,,,,0.55,ak,ak11329741,1406324172848 -2014-07-18T02:58:04.400+00:00,40.592,-124.097,18.2,2.8,Md,24,133,0.2,0.08,nc,nc72259386,1405842365154 -2014-07-18T02:45:49.500+00:00,19.062,-65.409,12.0,3.0,Md,12,245,0.8,0.28,pr,pr14199001,1405741644601 -2014-07-18T02:29:24.000+00:00,67.652,-161.672,7.0,3.0,ml,,,,0.65,ak,ak11329722,1406323995934 -2014-07-18T02:16:10.000+00:00,67.610,-161.501,9.7,2.7,ml,,,,0.66,ak,ak11337511,1406324331801 -2014-07-18T02:01:45.000+00:00,67.632,-161.830,21.2,4.2,ml,,,,0.68,ak,ak11329686,1406324156645 -2014-07-18T02:00:44.000+00:00,67.602,-161.750,8.9,4.2,ml,,,,0.65,ak,ak11329682,1406323998900 -2014-07-18T01:59:37.100+00:00,35.870,-97.317,4.6,2.9,ml,,58,,0.75,us,usb000ru0b,1405735690596 -2014-07-18T01:37:28.390+00:00,36.133,-97.308,3.1,2.8,mb_lg,,31,0.3,0.37,us,usb000ru06,1405724787908 -2014-07-18T01:22:39.610+00:00,38.456,144.417,21.3,4.3,mb,,140,3.7,1.03,us,usb000ru01,1405723840000 -2014-07-18T01:04:57.630+00:00,35.369,-118.555,7.2,2.7,ml,52,49,0.1,0.16,ci,ci15527809,1405700074975 -2014-07-18T00:58:43.000+00:00,51.796,178.389,107.3,2.8,ml,,,,0.45,ak,ak11329504,1406324089960 -2014-07-17T23:54:28.000+00:00,62.363,-149.149,36.5,3.0,ml,,,,0.75,ak,ak11329459,1405646124401 -2014-07-17T23:44:01.000+00:00,60.327,-140.295,13.9,2.6,ml,,,,0.72,ak,ak11329449,1406233841134 -2014-07-17T23:31:52.710+00:00,43.789,-111.086,5.0,3.1,ml,,81,0.2,0.87,us,usb000rtz3,1406131432431 -2014-07-17T23:31:25.000+00:00,19.789,-155.389,23.4,2.6,Ml,,76,0.1,0.11,hv,hv60733846,1405668848233 -2014-07-17T22:53:30.897+00:00,41.943,-119.652,,2.6,ml,7,118,0.5,0.13,nn,nn00452320,1405666563406 -2014-07-17T22:32:49.560+00:00,46.217,150.587,123.7,5.0,mb,,125,5.4,1.39,us,usb000rtyk,1405665318193 -2014-07-17T22:32:32.000+00:00,60.350,-140.345,2.9,2.6,ml,,,,0.87,ak,ak11329361,1406233824575 -2014-07-17T20:51:00.000+00:00,51.771,178.415,102.4,2.7,ml,,,,0.28,ak,ak11329251,1406234233295 -2014-07-17T19:44:35.000+00:00,60.366,-140.269,5.0,3.1,ml,,,,0.87,ak,ak11329151,1406233831652 -2014-07-17T18:45:04.000+00:00,60.374,-140.321,19.7,2.5,ml,,,,0.80,ak,ak11328839,1406233818744 -2014-07-17T18:09:49.000+00:00,60.342,-140.314,1.4,2.6,ml,,,,0.76,ak,ak11328785,1406233801087 -2014-07-17T18:08:38.050+00:00,-6.109,154.366,57.8,5.1,mb,,20,6.4,0.97,us,usb000rtu5,1405649467482 -2014-07-17T17:45:33.000+00:00,65.153,-148.938,15.0,2.8,ml,,,,0.67,ak,ak11328768,1406233785364 -2014-07-17T17:07:42.000+00:00,60.328,-140.284,1.4,3.2,ml,,,,0.90,ak,ak11328731,1405646284968 -2014-07-17T16:08:00.000+00:00,60.311,-140.248,17.2,2.5,ml,,,,0.91,ak,ak11328694,1406233765672 -2014-07-17T15:45:53.190+00:00,32.255,-115.322,20.5,3.1,ml,19,168,0.2,0.36,ci,ci15527633,1405691284000 -2014-07-17T15:35:24.900+00:00,36.677,-98.214,5.0,2.5,ml,,102,,1.08,us,usb000rttd,1405690627000 -2014-07-17T14:36:51.000+00:00,60.315,-140.346,10.0,2.6,ml,,,,0.94,ak,ak11328592,1406233731187 -2014-07-17T14:25:01.000+00:00,60.361,-140.314,18.2,2.6,ml,,,,0.72,ak,ak11328564,1406234484301 -2014-07-17T14:24:34.320+00:00,33.428,-116.425,13.9,3.4,ml,104,21,0.1,0.18,ci,ci15527617,1405826640280 -2014-07-17T14:14:02.000+00:00,60.318,-140.308,16.1,2.7,ml,,,,0.79,ak,ak11328537,1406233712658 -2014-07-17T13:55:55.370+00:00,-3.796,140.068,56.4,5.2,mb,,45,7.9,1.19,us,usb000rtr7,1405634316504 -2014-07-17T13:29:18.000+00:00,51.181,-174.931,28.5,2.5,ml,,,,0.41,ak,ak11335874,1406234306580 -2014-07-17T13:09:26.000+00:00,60.329,-140.349,1.2,3.6,ml,,,,0.88,ak,ak11328363,1406233842987 -2014-07-17T12:17:08.000+00:00,60.335,-140.160,10.0,2.5,ml,,,,1.12,ak,ak11328222,1406233860710 -2014-07-17T12:15:51.000+00:00,61.462,-141.648,10.8,3.0,ml,,,,0.89,ak,ak11328219,1405628314152 -2014-07-17T12:14:16.150+00:00,14.590,-91.995,24.2,4.7,mb,,169,0.3,0.78,us,usb000rtpp,1405628251407 -2014-07-17T12:09:09.000+00:00,60.382,-140.207,10.0,2.6,ml,,,,0.87,ak,ak11335813,1406234409051 -2014-07-17T12:08:26.000+00:00,60.308,-140.373,6.0,3.1,ml,,,,0.97,ak,ak11328175,1406233866110 -2014-07-17T12:05:46.000+00:00,60.391,-140.251,5.6,2.5,ml,,,,0.89,ak,ak11328156,1406233782394 -2014-07-17T11:56:50.000+00:00,60.315,-140.290,8.3,2.8,ml,,,,0.60,ak,ak11335802,1406234468003 -2014-07-17T11:54:50.000+00:00,60.360,-140.302,19.6,3.4,ml,,,,0.77,ak,ak11335801,1406234444998 -2014-07-17T11:53:01.000+00:00,60.374,-140.331,11.6,4.9,ml,,,,0.72,ak,ak11335800,1406234288578 -2014-07-17T11:49:33.000+00:00,60.349,-140.333,10.0,6.0,mb,,,,1.15,ak,ak11328120,1406233903242 -2014-07-17T11:08:16.240+00:00,-21.593,-176.030,108.9,4.7,mb,,43,6.3,1.44,us,usb000rtp3,1405624251850 -2014-07-17T10:40:43.260+00:00,37.102,-97.808,5.0,3.6,mb_lg,,35,0.1,0.49,us,usb000rtnr,1406227264823 -2014-07-17T09:12:27.640+00:00,32.528,-109.062,5.0,3.0,ml,,72,1.1,1.29,us,usb000rtn9,1405660633958 -2014-07-17T08:56:14.000+00:00,51.492,-178.412,25.6,2.5,ml,,,,0.45,ak,ak11328059,1406234212361 -2014-07-17T08:45:56.000+00:00,52.657,-164.144,20.0,2.5,ml,,,,1.19,ak,ak11328044,1406233749545 -2014-07-17T07:34:34.730+00:00,36.302,-97.574,5.9,2.5,mb_lg,,62,0.4,0.56,us,usb000rtmm,1405631304394 -2014-07-17T06:40:35.000+00:00,51.902,178.245,127.7,2.7,ml,,,,0.51,ak,ak11327990,1406233812357 -2014-07-17T06:11:51.000+00:00,22.098,121.494,10.0,5.1,mb,,95,0.8,0.96,us,usb000rtmc,1405590860994 -2014-07-17T04:42:58.910+00:00,14.969,-60.510,53.4,4.4,mb,,109,0.7,0.81,us,usb000rtm0,1406010325689 -2014-07-17T03:48:04.000+00:00,59.875,-153.406,137.0,3.1,ml,,,,0.74,ak,ak11327953,1406233659932 -2014-07-17T03:14:49.000+00:00,53.751,-161.273,20.0,2.8,ml,,,,0.97,ak,ak11335731,1406234251113 -2014-07-17T02:47:04.000+00:00,54.053,-163.488,41.5,2.8,ml,,,,0.65,ak,ak11327940,1406234194755 -2014-07-17T01:01:29.600+00:00,19.343,-155.053,8.4,2.8,Ml,,184,0.1,0.09,hv,hv60733436,1405604651742 -2014-07-17T00:42:43.660+00:00,53.451,161.620,35.0,4.4,mb,,112,1.8,1.24,us,usb000rtkp,1405586720988 -2014-07-17T00:41:04.600+00:00,40.983,-123.914,,2.6,Md,21,148,0.2,0.30,nc,nc72258726,1405890219719 -2014-07-17T00:09:58.600+00:00,35.860,-97.322,5.0,2.6,ml,,57,,0.40,us,usb000rtk5,1405806157000 -2014-07-16T23:36:56.310+00:00,51.905,178.619,94.2,3.9,mb,,147,0.7,0.68,us,usb000rtjr,1405807330897 -2014-07-16T23:02:13.500+00:00,35.524,-97.156,6.8,2.8,ml,,52,,0.19,us,usb000rtjj,1405581243118 -2014-07-16T22:10:06.810+00:00,9.705,-83.639,13.0,4.4,mwr,,197,0.6,1.04,us,usb000rtm8,1405575711547 -2014-07-16T21:15:43.820+00:00,32.086,-115.155,27.3,3.0,ml,12,247,0.2,0.24,ci,ci15527401,1405551578051 -2014-07-16T21:10:45.620+00:00,51.356,179.340,75.0,4.1,mb,,122,0.0,0.62,us,usb000rtic,1405574041462 -2014-07-16T20:03:54.000+00:00,60.219,-153.855,100.0,2.8,ml,,,,3.81,ak,ak11327647,1405569986820 -2014-07-16T19:30:15.600+00:00,36.969,-121.456,5.2,2.8,Md,74,43,0.0,0.08,nc,nc72258416,1405625574479 -2014-07-16T18:55:02.000+00:00,59.821,-152.545,61.0,2.5,ml,,,,0.56,ak,ak11327627,1405565854098 -2014-07-16T18:24:18.240+00:00,-10.032,160.847,10.0,5.2,mwb,,59,1.1,0.65,us,usb000rtfq,1405564013064 -2014-07-16T16:56:10.710+00:00,-10.036,160.798,19.9,5.2,mwb,,40,1.0,0.82,us,usb000rtf2,1405558718163 -2014-07-16T16:52:34.000+00:00,51.820,178.360,102.6,2.5,ml,,,,0.51,ak,ak11327576,1405558516820 -2014-07-16T15:47:11.000+00:00,60.379,-140.358,0.4,3.0,ml,42,65,,0.73,ak,ak11327523,1405554577562 -2014-07-16T15:30:13.830+00:00,43.373,-126.893,27.1,4.6,mwr,,88,2.9,0.85,us,usb000rtdy,1405553566995 -2014-07-16T13:29:51.070+00:00,-24.268,-64.906,50.3,4.0,mb,,88,4.0,0.70,us,usb000rtm5,1405574034304 -2014-07-16T13:09:58.000+00:00,60.345,-140.319,5.0,3.1,ml,,,,0.86,ak,ak11327463,1405545396338 -2014-07-16T11:11:16.120+00:00,-4.182,151.378,10.0,4.8,mb,,51,0.8,0.96,us,usb000rtdf,1405538133948 -2014-07-16T10:58:27.460+00:00,-21.934,-175.543,23.8,5.3,mb,,43,7.3,0.78,us,usb000rtdb,1405548879000 -2014-07-16T09:40:15.120+00:00,29.390,51.287,10.0,4.2,mb,,127,6.2,1.03,us,usb000rtd4,1405532566409 -2014-07-16T09:18:06.340+00:00,36.786,-97.657,4.2,2.5,mb_lg,,64,0.3,0.57,us,usb000rtd2,1405559541140 -2014-07-16T08:33:19.000+00:00,63.344,-149.377,95.0,3.0,ml,75,36,,0.68,ak,ak11327316,1405528628225 -2014-07-16T07:34:31.000+00:00,51.709,178.018,120.4,2.9,ml,14,184,0.4,0.44,ak,ak11327283,1405532204782 -2014-07-16T07:23:41.100+00:00,18.062,-66.376,7.0,2.7,Md,6,194,0.2,0.28,pr,pr14197002,1405497686713 -2014-07-16T05:35:29.100+00:00,18.887,-65.828,46.0,2.9,Md,12,241,0.6,0.27,pr,pr14197001,1405517875867 -2014-07-16T04:53:58.600+00:00,19.016,-65.360,19.0,3.1,Md,14,245,0.7,0.25,pr,pr14197000,1405489696654 -2014-07-16T04:24:08.550+00:00,-20.494,168.863,9.3,5.1,mb,,105,2.7,1.36,us,usb000rtca,1405513598847 -2014-07-16T04:06:36.900+00:00,37.217,86.016,14.3,4.0,mb,,122,7.8,0.48,us,usb000rtc6,1405512551539 -2014-07-16T02:54:17.380+00:00,35.730,-97.181,5.9,2.5,mb_lg,,31,0.1,0.46,us,usb000rtc0,1405539372105 -2014-07-16T02:48:13.710+00:00,-19.415,-177.773,520.4,4.3,mb,,121,4.3,1.04,us,usb000rtc1,1405507855631 -2014-07-16T02:24:28.910+00:00,-17.894,-178.588,584.7,4.4,mb,,81,3.2,0.82,us,usb000rtbr,1405506426937 -2014-07-16T02:08:57.470+00:00,12.200,-87.633,51.5,4.3,mb,,188,0.8,0.69,us,usb000rtbm,1405505489473 -2014-07-16T00:28:54.950+00:00,62.554,-127.802,14.0,4.6,mb,,44,3.9,0.96,us,usb000rtbe,1405499513806 -2014-07-16T00:20:08.620+00:00,62.566,-127.708,15.7,4.5,mb,,57,3.9,1.39,us,usb000rtba,1405498956442 -2014-07-15T23:13:52.710+00:00,52.924,-173.218,195.0,4.2,mb,,141,0.9,0.70,us,usb000rtar,1405495013680 -2014-07-15T22:40:20.000+00:00,18.508,-64.163,14.0,2.7,Md,5,353,0.4,0.23,pr,pr14196003,1405492966329 -2014-07-15T22:29:03.400+00:00,44.587,-114.315,5.3,2.9,mc,48,54,0.0,0.22,mb,mb14983852,1405521556024 -2014-07-15T22:13:20.530+00:00,53.033,-167.616,49.6,5.0,mb,,134,1.1,0.92,us,usb000rta6,1405491447321 -2014-07-15T21:10:09.400+00:00,36.976,-121.461,4.3,3.3,Ml,38,58,0.0,0.06,nc,nc72257966,1405634102525 -2014-07-15T21:09:34.900+00:00,36.975,-121.462,5.1,3.2,Ml,72,43,0.0,0.09,nc,nc72257961,1405633085235 -2014-07-15T18:52:30.000+00:00,59.127,-152.346,84.0,2.6,ml,,,,0.36,ak,ak11326888,1405518559000 -2014-07-15T16:39:00.330+00:00,-4.181,151.326,2.0,5.6,mwb,,34,0.8,0.75,us,usb000rt5g,1405722419000 -2014-07-15T15:27:06.000+00:00,63.584,-147.516,0.4,2.6,ml,,,,0.69,ak,ak11326749,1405467222871 -2014-07-15T15:23:43.050+00:00,28.911,142.131,6.6,5.0,mb,,127,1.8,0.62,us,usb000rt4z,1405466772383 -2014-07-15T13:51:15.590+00:00,35.548,-97.242,6.1,2.7,ml,,,,0.24,us,usb000rtdv,1405521157330 -2014-07-15T12:55:05.850+00:00,56.030,163.100,35.0,4.7,mb,,110,4.0,0.76,us,usb000rt43,1405457867909 -2014-07-15T11:12:23.180+00:00,-19.941,-70.160,36.3,4.4,mb,,139,0.3,0.62,us,usb000rt3l,1405445150000 -2014-07-15T10:56:54.000+00:00,51.811,178.390,107.0,2.5,ml,,,,0.37,ak,ak11326647,1405450765674 -2014-07-15T10:47:54.330+00:00,36.731,-97.727,1.9,3.0,mb_lg,,72,0.3,0.42,us,usb000rt3f,1406033144704 -2014-07-15T10:30:29.890+00:00,-4.144,151.371,10.0,5.8,mb,,35,0.8,1.06,us,usb000rt3b,1405537978000 -2014-07-15T10:03:02.490+00:00,-4.310,151.485,10.0,4.7,mb,,58,0.7,0.83,us,usb000rt31,1405447538877 -2014-07-15T09:44:58.850+00:00,-4.119,151.363,10.0,5.5,mb,,35,0.8,0.95,us,usb000rt2u,1405724424000 -2014-07-15T09:42:56.100+00:00,36.269,-120.358,8.0,2.8,Md,48,112,0.0,0.09,nc,nc72257716,1405548551008 -2014-07-15T09:08:41.040+00:00,35.556,-97.123,11.6,3.9,mb,,18,0.1,0.94,us,usb000rt2i,1406537755863 -2014-07-15T07:19:17.640+00:00,35.530,-97.138,9.5,3.8,mb_lg,,27,0.1,0.49,us,usb000rt1u,1406032940273 -2014-07-15T06:34:44.000+00:00,57.781,-156.202,121.7,3.5,ml,,,,0.72,ak,ak11326562,1405435348337 -2014-07-15T06:07:14.190+00:00,33.592,-115.913,10.0,3.0,ml,79,66,0.0,0.19,ci,ci15526857,1405475442992 -2014-07-15T05:48:11.200+00:00,52.051,160.682,10.0,4.9,mb,,149,1.6,0.87,us,usb000rt1l,1405432253884 -2014-07-15T04:34:54.940+00:00,35.827,-119.845,3.7,2.7,md,50,220,0.2,0.13,nc,nc72257606,1405555624541 -2014-07-15T02:38:00.240+00:00,-0.333,119.775,37.1,4.8,mb,,40,3.0,0.93,us,usb000rt0x,1405420984579 -2014-07-15T02:34:34.000+00:00,51.782,178.427,97.1,2.7,ml,,,,0.45,ak,ak11326560,1405420633648 -2014-07-15T00:20:14.000+00:00,51.788,178.264,127.7,2.6,ml,,,,0.35,ak,ak11326464,1405412561619 -2014-07-14T23:14:30.800+00:00,19.586,-64.563,33.0,3.3,Md,9,317,1.2,0.25,pr,pr14195005,1405408630783 -2014-07-14T22:39:35.464+00:00,41.879,-119.641,13.2,2.7,ml,3,129,0.5,0.04,nn,nn00451935,1405534045956 -2014-07-14T22:35:06.600+00:00,44.096,-121.356,,2.5,Ml,,133,0.0,0.30,uw,uw60817807,1405533989611 -2014-07-14T22:05:50.000+00:00,35.844,-119.780,4.4,2.7,Md,38,90,0.2,0.24,nc,nc72257396,1405578068867 -2014-07-14T21:50:25.200+00:00,18.607,-65.690,75.0,2.6,Md,12,212,0.4,0.11,pr,pr14195004,1405403581511 -2014-07-14T21:03:16.860+00:00,13.560,146.379,15.8,4.8,mb,,67,1.5,0.76,us,usb000rsy6,1405413263867 -2014-07-14T20:50:05.460+00:00,35.825,-119.783,8.5,2.5,md,20,196,0.3,0.17,nc,nc72257371,1405574587470 -2014-07-14T18:20:40.100+00:00,39.317,-123.227,6.4,2.5,Md,26,40,0.1,0.04,nc,nc72257306,1405475708285 -2014-07-14T16:50:14.400+00:00,35.872,-97.309,5.1,3.3,ml,,59,,0.48,us,usb000rsug,1405434642171 -2014-07-14T16:01:35.400+00:00,35.816,-97.415,4.3,2.8,ml,,55,,0.44,us,usb000rstu,1405434748209 -2014-07-14T15:31:04.000+00:00,60.168,-153.891,100.0,2.9,ml,,,,2.81,ak,ak11325841,1405380820675 -2014-07-14T14:50:59.740+00:00,-17.649,-178.439,529.7,4.7,mb,,74,3.3,0.80,us,usb000rssy,1405431090069 -2014-07-14T11:24:39.290+00:00,-17.919,-73.421,33.2,5.5,mb,,138,3.0,1.11,us,usb000rss6,1405455464000 -2014-07-14T10:49:10.670+00:00,35.349,-117.779,2.6,2.7,ml,50,34,0.2,0.13,ci,ci15526481,1405525272690 -2014-07-14T10:37:59.000+00:00,51.732,178.432,98.0,2.5,ml,,,,0.41,ak,ak11325659,1405363315666 -2014-07-14T08:40:55.310+00:00,5.697,126.473,42.3,4.9,mb,,62,1.6,0.91,us,usb000rsri,1405356216753 -2014-07-14T08:17:23.000+00:00,19.752,-64.762,34.0,3.3,Md,4,331,1.4,0.28,pr,pr14195003,1405354804417 -2014-07-14T08:15:10.900+00:00,18.770,-64.625,14.0,2.7,Md,4,288,0.4,0.20,pr,pr14195002,1405354669531 -2014-07-14T08:00:00.590+00:00,5.681,126.570,44.9,6.3,mwc,,51,1.7,1.40,us,usb000rsr5,1405784963000 -2014-07-14T07:29:12.790+00:00,41.976,-119.680,2.1,2.8,ml,3,154,0.5,0.04,nn,nn00451832,1405455509399 -2014-07-14T07:15:51.100+00:00,36.713,-97.888,5.0,3.9,mwr,,88,,0.31,us,usb000rsqv,1406603207475 -2014-07-14T06:40:03.500+00:00,19.176,-64.840,38.0,2.7,Md,4,317,0.8,0.23,pr,pr14195001,1405349049653 -2014-07-14T06:25:34.500+00:00,19.670,-64.832,40.0,3.4,Md,16,277,1.3,0.34,pr,pr14195000,1405348090522 -2014-07-14T06:04:10.000+00:00,61.559,-151.295,4.1,3.3,ml,,,,0.96,ak,ak11325471,1405346849827 -2014-07-14T05:44:15.130+00:00,-26.707,-114.315,10.0,5.2,mb,,176,38.2,1.16,us,usb000rsqm,1405356906000 -2014-07-14T05:05:04.110+00:00,-8.909,111.248,59.5,5.7,mb,,25,1.2,1.40,us,usb000rsqi,1406151129000 -2014-07-14T04:39:08.740+00:00,-6.965,154.752,54.2,4.8,mb,,126,3.8,0.91,us,usb000rsqe,1405341725714 -2014-07-14T03:18:18.310+00:00,-17.753,-176.649,305.3,4.4,mb,,54,6.0,0.81,us,usb000rsq6,1405337125646 -2014-07-14T00:14:35.200+00:00,19.489,-155.126,12.6,2.5,Ml,,83,0.1,0.11,hv,hv60731816,1405528288840 -2014-07-13T23:51:13.490+00:00,36.657,71.004,208.8,4.1,mb,,70,0.6,0.72,us,usb000rspq,1405324422098 -2014-07-13T23:01:31.000+00:00,63.118,-151.515,10.2,3.3,ml,,,,1.49,ak,ak11325292,1405321443270 -2014-07-13T21:57:30.200+00:00,19.430,-155.622,3.7,3.2,Ml,,115,0.0,0.10,hv,hv60731696,1405317608663 -2014-07-13T21:47:25.660+00:00,33.497,-116.505,14.4,2.8,ml,96,25,0.1,0.18,ci,ci15526321,1405438848391 -2014-07-13T21:35:44.600+00:00,18.830,-64.296,15.0,3.0,Md,13,317,0.5,0.10,pr,pr14194003,1405316292258 -2014-07-13T20:54:14.510+00:00,-20.255,-70.351,32.5,5.5,mww,,89,0.3,1.23,us,usb000rsnz,1405452540082 -2014-07-13T20:00:40.940+00:00,-4.139,151.191,35.0,5.6,mb,,59,6.6,1.02,us,usb000rsns,1406213406000 -2014-07-13T19:24:21.000+00:00,60.695,-152.544,125.5,3.3,ml,,,,0.73,ak,ak11325015,1405308417730 -2014-07-13T17:23:56.900+00:00,36.978,-121.465,4.9,3.4,Ml,75,40,0.0,0.08,nc,nc72253275,1405461206174 -2014-07-13T17:19:25.600+00:00,17.963,-68.335,84.0,3.2,Md,7,266,0.5,0.28,pr,pr14194002,1405300956719 -2014-07-13T16:23:43.660+00:00,36.469,67.658,26.1,5.0,mb,,68,2.2,0.80,us,usb000rsmy,1405320143935 -2014-07-13T16:20:50.000+00:00,59.953,-152.653,94.5,2.7,ml,,,,0.62,ak,ak11324859,1405297405235 -2014-07-13T15:22:02.750+00:00,-7.456,155.335,43.9,4.7,mb,,76,4.5,0.80,us,usb000rsn7,1405293869779 -2014-07-13T15:18:56.000+00:00,60.876,-150.029,34.9,2.6,ml,,,,0.86,ak,ak11324799,1405268335036 -2014-07-13T15:17:21.000+00:00,60.837,-150.113,43.9,2.5,ml,,,,0.86,ak,ak11324794,1405293587539 -2014-07-13T15:07:00.470+00:00,-2.187,99.998,41.5,4.9,mb,,179,2.7,0.84,us,usb000rsm9,1405293065833 -2014-07-13T14:51:02.200+00:00,35.859,-97.324,4.8,3.0,ml,,52,,0.43,us,usb000rsm4,1405519858516 -2014-07-13T14:39:26.500+00:00,35.867,-97.316,4.8,2.8,ml,,58,,0.36,us,usb000rsm3,1405519650350 -2014-07-13T14:08:19.470+00:00,2.010,128.304,103.6,4.6,mb,,140,1.5,0.89,us,usb000rsm1,1405289447633 -2014-07-13T13:26:47.980+00:00,37.025,143.447,10.0,4.7,mb,,114,4.2,0.56,us,usb000rslu,1405286968202 -2014-07-13T12:07:05.090+00:00,50.310,178.782,34.9,4.1,mb,,91,1.1,1.09,us,usb000rsll,1405282178400 -2014-07-13T11:55:03.800+00:00,35.520,-97.157,6.7,2.5,ml,,90,,0.60,us,usb000rsus,1405497608077 -2014-07-13T11:43:23.940+00:00,-20.782,-178.133,491.5,4.3,mb,,123,4.7,1.04,us,usb000rslb,1405280924398 -2014-07-13T11:34:50.500+00:00,36.285,-96.955,5.0,2.7,ml,,90,,0.63,us,usb000rsv2,1405497234083 -2014-07-13T11:18:09.380+00:00,40.820,21.165,10.0,4.5,mb,,69,0.2,1.48,us,usb000rsl5,1405397014000 -2014-07-13T08:46:41.760+00:00,-24.072,-69.039,94.7,4.9,mb,,46,0.9,1.07,us,usb000rskf,1405916241000 -2014-07-13T07:18:26.200+00:00,-30.748,-70.670,86.2,5.3,mb,,75,0.1,0.72,us,usb000rsk9,1405464355000 -2014-07-13T07:03:53.950+00:00,35.592,-97.258,5.0,2.8,mb_lg,,36,0.0,0.42,us,usb000rsk5,1405281130600 -2014-07-13T06:46:49.900+00:00,40.664,-122.450,26.0,2.6,Md,14,122,0.1,0.06,nc,nc72253090,1405569548104 -2014-07-13T06:43:10.760+00:00,-34.857,-70.896,92.2,4.5,mb,,57,0.1,0.77,us,usb000rsjz,1405292253380 -2014-07-13T06:08:05.279+00:00,41.952,-119.658,,2.7,ml,6,152,0.5,0.22,nn,nn00451779,1405330321873 -2014-07-13T05:24:38.000+00:00,58.470,-156.188,100.0,2.9,ml,,,,1.63,ak,ak11324539,1405258026864 -2014-07-13T05:20:50.020+00:00,35.528,-97.153,5.0,2.8,mb_lg,,52,0.1,0.58,us,usb000rsjp,1405420849257 -2014-07-13T04:46:12.600+00:00,17.846,-66.761,4.0,2.6,Md,12,230,0.2,0.20,pr,pr14194000,1405255724435 -2014-07-13T04:17:01.800+00:00,19.515,-156.517,40.8,3.2,ml,,284,0.5,1.02,us,usb000rsja,1405466130968 -2014-07-13T03:19:46.000+00:00,36.159,-121.627,10.8,2.5,Md,36,155,0.0,0.09,nc,nc72252975,1405468925399 -2014-07-13T03:16:50.930+00:00,-32.951,-71.466,44.0,5.0,mb,,64,0.4,0.89,us,usb000rsj2,1405456176000 -2014-07-13T03:16:15.000+00:00,19.958,-155.242,15.6,2.9,Ml,,122,0.0,0.09,hv,hv60731231,1405465550000 -2014-07-13T02:08:22.840+00:00,35.892,-97.272,5.0,2.7,mb_lg,,34,0.2,1.01,us,usb000rsiq,1405279130864 -2014-07-13T01:57:44.600+00:00,35.871,-97.312,5.0,2.9,ml,,59,,0.61,us,usb000rsim,1405465188005 -2014-07-13T00:57:57.020+00:00,35.907,-97.272,5.5,2.6,mb_lg,,55,0.2,0.75,us,usb000rsik,1405242034707 -2014-07-13T00:43:44.510+00:00,37.445,-118.536,7.5,2.6,md,30,83,0.1,0.07,nc,nc72252900,1405571105987 -2014-07-12T23:45:15.000+00:00,17.895,-63.936,44.0,2.8,Md,3,349,1.3,0.28,pr,pr14193010,1405237880273 -2014-07-12T23:22:30.310+00:00,-18.596,169.323,264.4,4.9,mb,,29,3.7,0.77,us,usb000rsi5,1405236601586 -2014-07-12T23:20:26.900+00:00,41.846,-119.630,0.1,2.6,Ml,,184,0.5,0.57,uw,uw60815772,1405311958752 -2014-07-12T22:37:11.480+00:00,6.897,-73.053,152.3,4.4,mb,,48,1.0,0.79,us,usb000rshr,1405208228768 -2014-07-12T21:51:46.000+00:00,18.849,-67.076,41.0,2.5,Md,11,256,0.4,0.27,pr,pr14193008,1405230867114 -2014-07-12T21:11:27.910+00:00,24.202,-108.709,10.0,4.3,mb,,184,3.9,1.12,us,usb000rsgy,1405228445376 -2014-07-12T19:58:39.000+00:00,12.804,-88.387,41.9,4.2,mb,,,,1.45,us,usb000rt36,1405420746941 -2014-07-12T18:20:39.960+00:00,-55.294,-27.874,26.7,5.2,mb,,79,5.1,0.79,us,usb000rsf0,1406228395000 -2014-07-12T18:06:22.700+00:00,19.046,-65.044,30.0,2.9,Md,15,256,0.7,0.07,pr,pr14193005,1405217362151 -2014-07-12T17:59:57.000+00:00,67.593,-149.971,6.5,3.1,ml,,,,0.61,ak,ak11323934,1405216959749 -2014-07-12T17:49:17.550+00:00,-55.385,-28.008,5.5,5.5,mwb,,47,5.0,0.73,us,usb000rsej,1406239849000 -2014-07-12T17:34:27.400+00:00,35.856,-97.330,5.0,3.0,mb_lg,,29,0.1,1.16,us,usb000rseb,1405198418410 -2014-07-12T17:11:47.000+00:00,35.874,-97.273,6.2,4.3,mb_lg,,29,0.2,0.69,us,usb000rsdy,1406670212821 -2014-07-12T16:51:43.522+00:00,41.931,-119.664,4.7,3.0,ml,3,150,0.5,0.07,nn,nn00451743,1405379225977 -2014-07-12T16:47:16.900+00:00,35.865,-97.322,4.0,2.9,ml,,54,,0.77,us,usb000rsee,1405212591603 -2014-07-12T16:00:22.960+00:00,39.433,-123.538,4.9,2.8,md,24,128,0.0,0.11,nc,nc72252670,1405448709202 -2014-07-12T14:38:56.110+00:00,37.144,-97.543,5.0,2.7,mb_lg,,141,0.1,0.70,us,usb000rsd2,1405342408078 -2014-07-12T11:27:26.550+00:00,35.873,-97.305,5.0,3.2,mb_lg,,53,0.1,0.43,us,usb000rsc9,1405188488350 -2014-07-12T11:15:33.000+00:00,61.173,-140.155,6.8,4.7,ml,,,,2.15,ak,ak11323596,1405192690606 -2014-07-12T10:59:42.590+00:00,-31.781,-179.976,361.5,4.5,mb,,41,3.1,0.67,us,usb000rsbx,1405192532148 -2014-07-12T10:32:23.000+00:00,57.619,-155.702,14.2,2.6,ml,,,,0.68,ak,ak11323587,1405190103670 -2014-07-12T10:19:23.700+00:00,-8.581,109.239,35.0,4.3,mb,,92,1.4,1.05,us,usb000rsci,1405189596684 -2014-07-12T08:22:25.000+00:00,61.159,-140.316,0.5,2.7,ml,,,,0.58,ak,ak11323535,1405182293437 -2014-07-12T07:59:28.330+00:00,38.159,142.304,35.0,4.4,mb,,138,3.6,1.84,us,usb000rsbi,1405180921674 -2014-07-12T07:16:33.420+00:00,34.274,-117.018,7.3,2.7,ml,101,38,0.0,0.14,ci,ci15525633,1405355468690 -2014-07-12T07:12:53.180+00:00,32.581,-109.085,5.0,3.0,ml,,136,1.1,0.95,us,usb000rsb9,1405213497527 -2014-07-12T06:55:28.980+00:00,-19.720,-69.173,111.1,4.5,mb,,49,0.1,1.04,us,usb000rsb8,1405177088105 -2014-07-12T06:30:33.270+00:00,1.274,97.137,32.9,4.5,mb,,154,0.4,0.47,us,usb000rsb4,1405175595532 -2014-07-12T06:10:06.000+00:00,60.832,-151.083,5.6,2.6,ml,,,,0.69,ak,ak11323486,1405148588216 -2014-07-12T05:10:30.140+00:00,13.692,-91.595,43.6,4.3,mb,,150,0.8,1.18,us,usb000rsaz,1405170783158 -2014-07-12T04:42:33.190+00:00,32.510,-109.171,5.0,2.9,ml,,138,1.2,1.45,us,usb000rsjg,1405228635536 -2014-07-12T04:24:24.000+00:00,60.322,-153.200,24.2,2.5,ml,,,,0.71,ak,ak11323461,1405168024510 -2014-07-12T04:04:18.600+00:00,17.976,-68.990,112.0,3.4,Md,12,317,0.8,0.28,pr,pr14193003,1405166814242 -2014-07-12T02:48:58.960+00:00,32.555,-109.102,5.0,4.1,ml,,101,1.1,0.67,us,usb000rsah,1405198249077 -2014-07-12T01:46:39.000+00:00,59.839,-151.845,35.4,2.5,ml,,,,0.45,ak,ak11323109,1405150290643 -2014-07-12T01:30:30.200+00:00,19.011,-64.985,26.0,3.1,Md,8,256,0.7,0.20,pr,pr14193000,1405157668413 -2014-07-12T00:48:54.000+00:00,67.747,-162.488,10.7,2.9,ml,,,,0.57,ak,ak11323098,1405155095108 -2014-07-11T23:05:26.050+00:00,30.896,86.325,46.6,4.2,mb,,150,4.3,0.65,us,usb000rs8i,1405148883318 -2014-07-11T22:12:13.000+00:00,51.884,178.406,110.3,3.0,ml,,,,0.29,ak,ak11323080,1406331818975 -2014-07-11T21:02:27.800+00:00,36.677,-97.723,5.2,2.5,ml,,152,,0.94,us,usb000rs78,1405141494379 -2014-07-11T19:59:14.650+00:00,37.162,142.217,19.9,4.6,mb,,126,3.3,0.73,us,usb000rs5j,1405174079641 -2014-07-11T19:21:59.310+00:00,37.040,142.425,10.5,6.5,mww,,9,3.4,0.73,us,usb000rs50,1406161300225 -2014-07-11T19:15:48.000+00:00,51.420,-177.488,17.8,2.8,ml,,,,0.26,ak,ak11323050,1406331821380 -2014-07-11T18:36:14.040+00:00,15.716,-92.858,128.6,4.3,mb,,127,0.9,0.95,us,usb000rs3v,1405173448877 -2014-07-11T17:42:27.000+00:00,62.850,-149.499,72.7,2.6,ml,,,,0.74,ak,ak11323039,1406331792923 -2014-07-11T17:37:43.000+00:00,51.798,178.362,135.3,2.5,ml,,,,0.53,ak,ak11323036,1405129212805 -2014-07-11T17:33:21.960+00:00,32.659,-109.130,5.0,3.6,mwr,,80,1.1,0.68,us,usb000rs34,1405172443325 -2014-07-11T17:28:00.400+00:00,18.792,-64.728,18.0,2.9,Md,6,277,0.4,0.20,pr,pr14192003,1405172153000 -2014-07-11T17:25:02.300+00:00,36.627,-116.936,4.6,3.4,ml,20,81,0.1,0.24,ci,ci15525449,1405171581000 -2014-07-11T17:16:39.000+00:00,51.821,178.282,125.5,2.8,ml,,,,0.49,ak,ak11323034,1406331825403 -2014-07-11T16:34:37.720+00:00,-15.201,-177.219,364.6,4.9,mb,,43,5.4,0.81,us,usb000rs2l,1405125439586 -2014-07-11T14:11:30.600+00:00,36.296,-97.545,5.0,2.8,ml,,70,,0.63,us,usb000rs1d,1405116871768 -2014-07-11T13:42:16.000+00:00,61.449,-150.949,70.5,3.6,ml,,,,0.70,ak,ak11323006,1406331848742 -2014-07-11T13:11:46.030+00:00,26.299,125.801,117.5,5.3,mb,,33,2.3,1.11,us,usb000rs0m,1405153507447 -2014-07-11T12:53:26.160+00:00,8.904,-77.885,31.7,4.4,mb,,91,1.9,0.90,us,usb000rs0d,1405088127306 -2014-07-11T12:41:22.590+00:00,32.566,-109.154,5.0,3.5,ml,,81,1.2,0.98,us,usb000rs08,1405090924918 -2014-07-11T12:17:05.650+00:00,36.543,-97.816,1.7,3.3,mb_lg,,66,0.1,0.38,us,usb000rs01,1405092273987 -2014-07-11T12:14:34.900+00:00,36.002,-120.566,4.9,2.6,Md,66,43,0.0,0.08,nc,nc72252010,1405114867603 -2014-07-11T11:54:30.060+00:00,49.106,-2.536,10.3,3.9,mb,,127,3.4,0.73,us,usb000rrzr,1406213232827 -2014-07-11T11:28:08.000+00:00,51.932,-174.018,46.7,2.5,ml,,,,0.34,ak,ak11322982,1406331845922 -2014-07-11T11:15:30.000+00:00,51.785,178.629,88.0,2.9,ml,,,,0.21,ak,ak11322980,1406331812276 -2014-07-11T11:13:56.200+00:00,21.066,-155.898,34.5,3.1,Ml,,241,0.4,0.11,hv,hv60730086,1405112148341 -2014-07-11T10:11:34.300+00:00,18.720,-65.409,49.0,2.5,Md,5,263,0.4,0.07,pr,pr14192001,1405102502169 -2014-07-11T09:46:06.580+00:00,38.525,23.703,10.0,4.6,mb,,64,1.2,0.74,us,usb000rrzc,1405103126809 -2014-07-11T09:30:06.770+00:00,-19.899,-174.420,35.0,4.9,mb,,122,6.5,0.63,us,usb000rrzb,1405099959845 -2014-07-11T09:16:38.000+00:00,50.178,178.632,30.7,2.9,ml,,,,0.59,ak,ak11322978,1406331826702 -2014-07-11T08:58:57.000+00:00,51.816,178.451,97.0,3.4,ml,,,,0.38,ak,ak11322973,1406331905463 -2014-07-11T08:40:54.400+00:00,36.507,71.071,126.1,4.3,mb,,100,0.7,0.77,us,usb000rrz1,1405495827117 -2014-07-11T08:38:19.810+00:00,32.489,-109.137,5.0,2.8,ml,,158,1.1,1.12,us,usb000rrz0,1405139555027 -2014-07-11T07:31:13.000+00:00,51.310,-176.317,25.6,3.2,ml,,,,0.52,ak,ak11322968,1406331829567 -2014-07-11T07:16:32.000+00:00,51.747,178.478,90.6,2.8,ml,,,,0.24,ak,ak11322965,1406331833643 -2014-07-11T06:37:36.700+00:00,35.758,-119.774,23.5,3.2,Ml,55,61,0.2,0.15,nc,nc72251875,1405362019861 -2014-07-11T06:15:55.670+00:00,32.641,-109.112,5.0,3.2,ml,,134,1.1,0.85,us,usb000rryq,1405184777040 -2014-07-11T05:53:26.770+00:00,51.785,178.477,94.3,4.7,mb,,42,0.7,0.93,us,usb000rrym,1405109636191 -2014-07-11T05:22:05.810+00:00,10.082,124.193,10.0,4.4,mb,,134,3.3,0.96,us,usb000rtmb,1406371267769 -2014-07-11T04:58:28.000+00:00,67.662,-163.383,19.3,2.7,ml,,,,0.91,ak,ak11337999,1406331829474 -2014-07-11T04:14:09.610+00:00,36.422,71.125,90.4,4.9,mb,,73,0.8,0.89,us,usb000rryf,1405081072626 -2014-07-11T02:31:46.090+00:00,19.009,-69.264,10.0,4.2,mb,,120,0.2,0.91,us,usb000rry9,1405058704650 -2014-07-11T02:18:07.000+00:00,51.889,178.317,131.5,2.6,ml,,,,0.39,ak,ak11322897,1406331837616 -2014-07-11T00:35:43.500+00:00,19.418,-154.913,48.9,2.7,Ml,,220,0.0,0.10,hv,hv60729851,1405067984154 -2014-07-11T00:07:54.000+00:00,54.690,-163.130,77.7,2.5,ml,,,,0.36,ak,ak11337981,1406331862280 -2014-07-10T21:59:30.400+00:00,32.499,-109.132,5.0,3.6,ml,,82,1.1,0.87,us,usb000rrqt,1405107088804 -2014-07-10T21:53:59.250+00:00,17.759,40.112,14.9,4.5,mb,,85,6.7,0.83,us,usb000rrqs,1405058225667 -2014-07-10T20:54:49.920+00:00,34.036,-117.159,7.6,2.9,ml,35,37,0.0,0.19,ci,ci15524921,1405099222404 -2014-07-10T20:54:42.070+00:00,34.035,-117.158,8.9,2.8,ml,97,23,0.0,0.14,ci,ci15524913,1405044038713 -2014-07-10T20:41:43.650+00:00,33.505,-116.507,15.4,3.2,ml,106,26,0.1,0.19,ci,ci15524873,1405608119683 -2014-07-10T20:30:28.000+00:00,19.337,-155.097,8.8,2.8,Ml,,295,0.3,0.13,hv,hv60236383,1405034629182 -2014-07-10T20:19:20.000+00:00,62.272,-150.397,23.9,2.5,ml,,,,0.73,ak,ak11322613,1405052507568 -2014-07-10T19:24:44.400+00:00,-7.358,156.237,59.8,5.0,mb,,42,4.2,0.58,us,usb000rrmk,1405049234443 -2014-07-10T18:22:39.160+00:00,47.259,-66.968,6.6,2.8,mb_lg,,87,0.6,0.39,us,usb000rrzn,1405318194179 -2014-07-10T18:03:19.600+00:00,18.173,-67.376,18.0,3.0,Md,25,166,0.2,0.28,pr,pr14191005,1405044351888 -2014-07-10T18:01:22.900+00:00,44.563,-114.299,7.0,2.7,mc,32,72,0.0,0.19,mb,mb14124003,1405025838827 -2014-07-10T17:48:49.000+00:00,40.462,-124.699,18.2,2.8,Md,40,241,0.4,0.10,nc,nc72251555,1405046526781 -2014-07-10T12:55:00.300+00:00,14.993,-61.440,167.0,4.4,mb,,103,0.4,1.10,us,usb000rrim,1405028612405 -2014-07-10T11:23:19.100+00:00,18.106,-68.246,68.0,3.3,Md,10,245,0.4,0.40,pr,pr14191004,1405020356407 -2014-07-10T10:47:22.100+00:00,19.138,-64.249,24.0,3.1,Md,10,317,0.8,0.27,pr,pr14191001,1405018352229 -2014-07-10T10:37:14.370+00:00,34.273,-117.018,7.4,2.5,ml,103,38,0.0,0.14,ci,ci15524689,1405017584573 -2014-07-10T10:36:01.200+00:00,19.077,-64.341,30.0,2.9,Md,13,310,0.7,0.23,pr,pr14191000,1405017512242 -2014-07-10T08:58:57.140+00:00,36.795,140.440,30.8,4.7,mb,,113,1.8,1.02,us,usb000rrhw,1406161636685 -2014-07-10T08:37:17.000+00:00,61.514,-141.171,,2.5,ml,,,,0.59,ak,ak11322439,1405010387934 -2014-07-10T07:58:06.590+00:00,36.119,30.183,10.0,4.3,mb,,144,0.7,1.08,us,usb000rrhk,1405008111464 -2014-07-10T07:16:19.140+00:00,-19.973,-175.552,235.3,5.2,mb,,39,5.4,1.25,us,usb000rrhg,1405005528977 -2014-07-10T07:09:47.800+00:00,38.818,-122.820,2.9,2.7,Md,57,29,0.0,0.04,nc,nc72251355,1405111511216 -2014-07-10T05:35:47.130+00:00,36.826,-97.962,1.5,2.7,mb_lg,,83,0.3,0.54,us,usb000rrh4,1404993324759 -2014-07-10T02:59:50.050+00:00,10.227,-85.221,42.4,4.3,mb,,176,0.3,0.88,us,usb000rrgd,1405560596766 -2014-07-10T01:06:07.000+00:00,59.964,-151.782,35.2,2.5,ml,,,,0.70,ak,ak11322227,1404983362083 -2014-07-10T00:40:12.560+00:00,-11.638,164.839,10.0,4.6,mb,,56,4.4,0.50,us,usb000ruag,1405815647000 -2014-07-10T00:23:51.110+00:00,-29.255,-176.728,10.0,4.5,mb,,197,1.1,0.64,us,usb000ruaf,1405813690000 -2014-07-10T00:06:25.700+00:00,-29.834,-177.027,10.0,4.6,mb,,191,1.0,0.97,us,usb000ruae,1405812647000 -2014-07-10T00:02:16.000+00:00,58.350,-154.423,100.0,2.5,ml,,,,0.93,ak,ak11322216,1404979489879 -2014-07-09T23:45:03.810+00:00,40.463,26.224,18.0,4.2,mb,,46,0.5,1.02,us,usb000rrfa,1404957408367 -2014-07-09T22:37:58.000+00:00,58.175,-151.468,34.8,3.1,ml,,,,0.68,ak,ak11322149,1404974431016 -2014-07-09T22:29:23.040+00:00,-41.003,44.567,15.6,4.6,mb,,53,7.6,0.35,us,usb000rucm,1405811653922 -2014-07-09T21:48:04.810+00:00,33.251,-115.982,2.9,3.2,ml,72,44,0.0,0.19,ci,ci15524489,1405033519389 -2014-07-09T21:34:08.000+00:00,64.676,-150.149,1.1,2.5,ml,,,,1.02,ak,ak11322096,1404970687801 -2014-07-09T18:36:23.080+00:00,36.888,-3.922,62.2,4.2,mb,,77,0.2,0.51,us,usb000rrbl,1404969492398 -2014-07-09T17:59:37.500+00:00,19.549,-65.286,90.0,3.3,Md,8,292,1.2,0.18,pr,pr14190005,1404957724504 -2014-07-09T17:58:11.880+00:00,-62.107,164.899,10.0,5.5,mb,,102,8.2,0.88,us,usb000rrb8,1406311111000 -2014-07-09T17:41:41.400+00:00,19.469,-65.322,92.0,3.4,Md,5,274,1.2,0.11,pr,pr14190004,1404956652724 -2014-07-09T17:19:39.300+00:00,-16.902,-71.818,49.6,4.9,mb,,132,2.0,1.12,us,usb000rraf,1404928424425 -2014-07-09T16:25:26.500+00:00,35.882,-97.266,5.2,2.5,ml,,64,,0.40,us,usb000rrac,1404952077944 -2014-07-09T15:17:21.950+00:00,-6.541,147.186,86.6,4.7,mb,,67,2.8,0.42,us,usb000rr92,1404947994856 -2014-07-09T13:35:16.650+00:00,55.062,165.301,35.6,4.9,mb,,69,4.4,0.69,us,usb000rr8k,1404944389834 -2014-07-09T11:14:10.560+00:00,-25.949,179.577,512.0,4.7,mb,,65,8.3,0.65,us,usb000rr87,1404933411887 -2014-07-09T10:08:42.820+00:00,14.797,-92.500,86.5,4.3,mb,,145,1.5,0.69,us,usb000rr7w,1404916246448 -2014-07-09T09:07:54.870+00:00,14.861,-92.502,67.8,4.2,mb,,175,1.5,0.99,us,usb000rr7t,1404925828201 -2014-07-09T08:33:55.960+00:00,-19.992,-177.800,567.8,4.8,mb,,101,4.5,0.84,us,usb000rr7k,1404923794591 -2014-07-09T08:15:21.020+00:00,32.577,-109.092,5.0,3.6,mwr,,55,1.1,0.81,us,usb000rr77,1404955089697 -2014-07-09T08:12:34.170+00:00,-55.253,-28.312,10.0,4.8,mb,,117,4.8,0.56,us,usb000rr7d,1404922711422 -2014-07-09T07:04:47.700+00:00,36.434,-116.933,8.7,3.6,ml,17,61,0.1,0.16,ci,ci15524177,1405126396373 -2014-07-09T06:42:39.800+00:00,35.663,-121.063,5.5,2.6,Md,63,104,0.1,0.08,nc,nc72250745,1404958446948 -2014-07-09T06:32:56.000+00:00,59.757,-152.792,4.9,2.6,ml,,,,0.78,ak,ak11321630,1404916524364 -2014-07-09T06:03:08.240+00:00,-9.652,111.561,36.7,4.7,mb,,63,2.0,0.74,us,usb000rr6k,1404914734476 -2014-07-09T05:27:32.600+00:00,20.050,-155.472,50.0,2.5,Ml,,180,0.2,0.11,hv,hv60728816,1404935568090 -2014-07-09T03:23:17.600+00:00,17.949,-68.153,101.0,2.9,Md,6,248,0.6,0.28,pr,pr14190002,1404905155473 -2014-07-09T02:22:48.000+00:00,68.705,-146.747,17.1,2.8,ml,,,,0.57,ak,ak11321576,1404901516929 -2014-07-09T02:10:04.290+00:00,37.098,-97.774,1.2,3.4,mb_lg,,88,0.1,0.54,us,usb000rr5h,1404959550457 -2014-07-09T01:45:32.700+00:00,36.555,-121.152,6.5,2.8,Md,53,32,0.0,0.06,nc,nc72250655,1404935646084 -2014-07-09T01:44:43.100+00:00,36.555,-121.152,6.9,2.9,Md,59,32,0.0,0.08,nc,nc72250650,1404933847684 -2014-07-09T00:14:35.620+00:00,34.089,-97.418,5.0,2.7,mb_lg,,51,0.6,0.80,us,usb000rr53,1404893848237 -2014-07-09T00:01:30.270+00:00,-7.079,104.708,22.6,5.1,mb,,74,3.1,1.10,us,usb000rr51,1404956406000 -2014-07-08T23:41:45.000+00:00,58.069,-156.817,,2.5,ml,,,,0.75,ak,ak11321538,1404891867982 -2014-07-08T22:57:14.080+00:00,29.859,-116.381,10.0,4.2,mb,,199,2.8,1.16,us,usb000rr4r,1404889347786 -2014-07-08T22:56:12.600+00:00,20.080,-155.458,2.2,2.8,Ml,,194,0.2,0.18,hv,hv60728511,1404937479108 -2014-07-08T21:52:49.170+00:00,39.326,78.168,15.5,5.0,mb,,66,3.1,1.03,us,usb000rr42,1404885324470 -2014-07-08T20:10:00.990+00:00,-3.324,143.308,16.7,5.4,mb,,15,7.2,0.93,us,usb000rr27,1404926657551 -2014-07-08T19:56:06.030+00:00,-19.321,-69.468,98.3,4.0,ml,,96,0.2,0.72,us,usb000rr20,1404924301336 -2014-07-08T19:38:50.600+00:00,41.512,-108.831,-3.3,3.0,Ml,,104,1.1,0.28,uu,uu60076732,1405007840441 -2014-07-08T19:29:35.000+00:00,51.914,178.433,126.9,2.6,ml,,,,0.36,us,usb000rr4x,1404922707862 -2014-07-08T19:17:26.600+00:00,35.582,-97.283,4.4,2.9,ml,,52,,0.82,us,usb000rr2b,1404920482019 -2014-07-08T18:55:56.360+00:00,12.147,-87.747,71.0,4.2,mb,,193,0.9,0.71,us,usc000rrt9,1404919213658 -2014-07-08T18:42:04.700+00:00,18.535,-65.016,40.0,2.6,Md,3,270,0.2,0.20,pr,pr14189006,1404873872402 -2014-07-08T18:18:43.370+00:00,36.594,77.308,87.1,4.5,mb,,43,4.4,0.89,us,usc000rrsm,1404916818603 -2014-07-08T17:41:50.900+00:00,34.065,-97.471,5.0,2.9,ml,,136,,1.34,us,usc000rrs3,1404919495597 -2014-07-08T17:31:16.340+00:00,4.862,96.112,8.0,4.7,mb,,82,0.9,1.38,us,usc000rrrt,1404914474533 -2014-07-08T16:20:21.050+00:00,32.885,-115.901,10.0,2.5,ml,50,38,0.1,0.28,ci,ci15523689,1404865375638 -2014-07-08T16:04:20.000+00:00,-20.777,-70.521,37.9,4.9,mb,,,,1.28,us,usc000rrr0,1405029135252 -2014-07-08T15:49:40.000+00:00,-21.262,-68.909,126.9,4.5,mb,,,,0.86,us,usc000rrqs,1405029889458 -2014-07-08T15:46:57.490+00:00,50.974,178.585,164.2,4.2,mb,,215,0.6,0.69,us,usc000rrqq,1405030372129 -2014-07-08T15:35:40.970+00:00,36.258,73.972,66.5,4.8,mb,,50,2.7,0.70,us,usc000rrqp,1404842771438 -2014-07-08T15:08:33.600+00:00,36.758,-98.051,5.0,2.8,ml,,99,,0.55,us,usc000rrqu,1404861695828 -2014-07-08T14:43:31.580+00:00,51.939,178.447,113.3,4.8,mb,,31,0.8,0.74,us,usc000rrq3,1404859569138 -2014-07-08T14:35:40.330+00:00,-33.072,-178.507,10.0,4.9,mb,,68,3.8,0.60,us,usc000rrq2,1404859135411 -2014-07-08T13:43:02.000+00:00,57.702,-142.800,1.9,3.0,ml,,,,0.80,ak,ak11320817,1404855944329 -2014-07-08T13:41:28.900+00:00,-5.547,147.311,191.7,4.3,mb,,62,3.8,0.85,us,usc000rrmx,1404855838343 -2014-07-08T13:33:31.860+00:00,-20.616,-178.290,576.4,4.6,mb,,68,4.5,0.73,us,usc000rrmv,1404855463066 -2014-07-08T13:25:26.360+00:00,-33.917,-72.410,14.3,4.8,mb,,140,1.2,0.53,us,usc000rrmp,1405026229044 -2014-07-08T12:56:26.740+00:00,-17.617,168.359,114.0,6.3,mwp,,56,2.4,0.88,us,usc000rrmg,1406317449000 -2014-07-08T12:39:21.080+00:00,33.875,-119.413,15.4,2.6,ml,31,94,0.2,0.40,ci,ci15523569,1404892053598 -2014-07-08T12:31:46.080+00:00,33.162,-115.647,1.9,3.2,ml,61,39,0.0,0.23,ci,ci15523545,1404836426967 -2014-07-08T11:38:17.200+00:00,18.632,-63.714,12.0,3.1,Md,6,353,0.9,0.17,pr,pr14189004,1404848448265 -2014-07-08T11:10:25.550+00:00,-17.578,-174.688,157.7,4.4,mb,,64,4.6,0.75,us,usc000rrln,1404846779359 -2014-07-08T09:05:23.110+00:00,42.681,141.411,10.0,5.5,mwb,,59,1.5,1.39,us,usc000rrl0,1404905754500 -2014-07-08T09:01:29.700+00:00,36.695,-121.327,4.6,3.1,Ml,64,29,0.0,0.06,nc,nc72249790,1404859267215 -2014-07-08T08:18:13.290+00:00,37.652,-118.851,7.2,2.7,md,16,91,0.0,0.04,nc,nc72249590,1404942669128 -2014-07-08T08:17:47.100+00:00,36.696,-121.329,5.1,3.2,Ml,64,29,0.0,0.05,nc,nc72249575,1406720896000 -2014-07-08T08:16:45.800+00:00,18.901,-65.362,5.0,2.8,Md,5,284,0.6,0.15,pr,pr14189003,1406720618000 -2014-07-08T08:15:02.300+00:00,18.918,-67.508,120.0,2.9,Md,6,227,0.8,0.34,pr,pr14189002,1406720459000 -2014-07-08T07:44:10.280+00:00,-16.666,-177.238,408.1,4.2,mb,,117,4.6,0.83,us,usb000rv5h,1406720323000 -2014-07-08T07:30:59.180+00:00,51.554,179.935,6.6,2.8,ml,,,,0.90,us,usb000ry2l,1406719960000 -2014-07-08T07:28:57.060+00:00,-1.175,-77.201,10.0,4.4,mb,,84,3.4,1.45,us,usb000rv6k,1406719811000 -2014-07-08T07:18:03.400+00:00,18.551,-66.940,18.0,2.9,Md,13,216,0.2,0.20,pr,pr14189001,1406719098000 -2014-07-08T06:25:51.320+00:00,34.277,-117.024,7.4,2.6,ml,97,42,0.0,0.14,ci,ci15523409,1404837767269 -2014-07-08T05:31:15.200+00:00,36.768,-121.478,7.0,3.2,Ml,72,29,0.0,0.13,nc,nc72249120,1404882074511 -2014-07-08T04:33:33.130+00:00,27.742,142.848,29.7,4.8,mb,,126,0.9,0.75,us,usc000rrj2,1404823039941 -2014-07-08T02:13:07.770+00:00,-59.247,148.879,10.0,4.9,mb,,120,16.4,1.06,us,usc000rrim,1404814536624 -2014-07-08T01:23:23.220+00:00,-7.069,129.934,132.3,5.0,mb,,70,1.6,1.26,us,usc000rrid,1404811633903 -2014-07-08T00:16:47.574+00:00,39.199,-119.730,9.7,3.2,ml,35,64,0.0,0.16,nn,nn00451213,1405209941336 -2014-07-07T23:06:05.110+00:00,23.337,122.374,10.0,5.0,mb,,107,1.0,0.84,us,usc000rrhb,1404803316682 -2014-07-07T23:02:36.100+00:00,-49.262,164.724,24.8,4.4,mb,,165,3.4,1.16,us,usc000rrha,1404803141856 -2014-07-07T22:19:38.410+00:00,34.034,-117.157,8.7,2.5,ml,96,35,0.0,0.15,ci,ci15523137,1405008103902 -2014-07-07T22:04:24.000+00:00,60.461,-151.451,43.1,2.7,ml,,,,0.67,ak,ak11320303,1404799613672 -2014-07-07T21:49:01.200+00:00,35.569,75.104,48.7,4.3,mb,,83,2.4,0.61,us,usc000rrfn,1405233630728 -2014-07-07T20:48:48.480+00:00,53.893,-160.912,10.0,4.8,mb,,159,1.5,0.88,us,usc000rre6,1404795399810 -2014-07-07T18:04:35.730+00:00,-5.210,131.683,59.7,5.0,mb,,56,2.3,0.77,us,usc000rrau,1404862275562 -2014-07-07T17:45:12.900+00:00,34.277,-117.025,8.2,2.5,ml,89,39,0.0,0.15,ci,ci15523049,1404772728896 -2014-07-07T15:50:07.890+00:00,47.481,151.044,85.9,4.5,mb,,160,6.8,0.75,us,usc000rr93,1404777153465 -2014-07-07T15:48:39.700+00:00,18.443,-64.109,47.0,2.7,Md,4,349,0.5,0.02,pr,pr14188010,1404777131147 -2014-07-07T15:09:25.710+00:00,-24.087,-67.494,227.7,4.3,mb,,130,2.0,0.48,us,usc000rr8g,1404774895172 -2014-07-07T14:38:21.500+00:00,34.070,-97.475,7.4,3.2,ml,,136,,0.55,us,usc000rr8a,1404771997464 -2014-07-07T14:02:30.700+00:00,19.415,-155.397,10.5,2.5,Ml,,61,0.1,0.08,hv,hv60727266,1405024961000 -2014-07-07T13:59:52.050+00:00,34.087,-97.488,7.4,2.5,ml,,,,0.49,us,usb000rrne,1405024530831 -2014-07-07T13:59:40.800+00:00,36.211,-97.549,5.0,2.5,ml,,47,,0.39,us,usc000rr7z,1405023746687 -2014-07-07T13:48:09.800+00:00,36.091,-97.015,5.0,2.6,ml,,46,,0.55,us,usb000rr6h,1405023663852 -2014-07-07T13:28:25.600+00:00,37.652,-118.852,7.2,2.5,Md,28,90,0.0,0.03,nc,nc72251726,1405016045623 -2014-07-07T13:23:37.480+00:00,-11.352,161.331,40.0,4.7,mb,,52,2.3,0.71,us,usc000rr81,1404768380074 -2014-07-07T12:48:09.600+00:00,19.463,-65.656,54.0,3.1,Md,3,331,1.2,0.15,pr,pr14188009,1404766237560 -2014-07-07T12:46:01.200+00:00,37.653,-118.853,7.3,2.6,Md,28,68,0.0,0.03,nc,nc72251611,1404963847116 -2014-07-07T12:32:08.100+00:00,37.655,-118.852,7.6,2.6,Md,29,94,0.0,0.03,nc,nc72251536,1404871564926 -2014-07-07T12:27:11.620+00:00,37.649,-118.851,7.6,2.9,md,24,112,0.0,0.04,nc,nc72251511,1404850145368 -2014-07-07T11:23:55.430+00:00,14.742,-92.409,60.0,6.9,mww,,30,0.7,1.16,us,usc000rr6a,1406004038547 -2014-07-07T10:29:56.200+00:00,37.652,-118.853,7.8,2.8,Ml,29,94,0.0,0.04,nc,nc72251181,1404937389414 -2014-07-07T10:07:13.500+00:00,19.167,-67.977,64.0,3.9,Md,26,248,0.8,0.36,pr,pr14188004,1404756826656 -2014-07-07T10:01:16.900+00:00,19.167,-67.981,65.0,2.9,Md,7,259,0.8,0.60,pr,pr14188008,1404756409026 -2014-07-07T09:20:48.900+00:00,19.215,-67.965,24.0,3.3,Md,20,252,0.8,0.28,pr,pr14188006,1404753890992 -2014-07-07T09:15:28.710+00:00,-7.318,123.725,551.6,5.2,mb,,30,2.0,0.98,us,usc000rr4d,1404753485830 -2014-07-07T08:51:05.540+00:00,34.276,-117.026,8.6,3.0,ml,126,39,0.0,0.16,ci,ci15522785,1404809548056 -2014-07-07T07:44:15.420+00:00,36.684,-98.094,11.1,3.0,mb_lg,,57,0.2,0.95,us,usc000rr3x,1404748015990 -2014-07-07T07:13:07.000+00:00,19.628,-68.469,93.0,3.7,Md,17,324,1.7,0.36,pr,pr14188005,1404746212863 -2014-07-07T06:25:17.200+00:00,37.651,-118.852,7.5,2.7,Md,30,115,0.0,0.04,nc,nc72250641,1404953225879 -2014-07-07T05:56:16.500+00:00,44.090,-114.552,10.7,2.8,mc,34,108,0.4,0.22,mb,mb14584805,1404753043219 -2014-07-07T05:49:08.600+00:00,18.909,-66.876,5.0,2.6,Md,4,342,0.5,0.15,pr,pr14188003,1404741095157 -2014-07-07T03:56:01.990+00:00,36.023,-97.099,8.1,2.6,mb_lg,,51,0.3,0.50,us,usc000rr3k,1404790529588 -2014-07-07T03:52:09.910+00:00,36.845,-98.081,2.5,2.5,mb_lg,,52,0.3,0.61,us,usc000rr39,1404734216786 -2014-07-07T03:27:10.200+00:00,19.174,-67.667,20.0,2.6,Md,5,274,0.9,0.05,pr,pr14188000,1404756823133 -2014-07-07T02:40:41.760+00:00,42.037,142.672,81.7,4.5,mb,,120,0.4,0.47,us,usc000rr31,1404724533126 -2014-07-07T01:37:10.390+00:00,-15.589,-71.376,157.2,4.6,mb,,120,2.9,1.12,us,usc000rr2r,1404725978786 -2014-07-07T01:13:31.000+00:00,52.846,-162.662,118.2,2.7,ml,,,,0.40,ak,ak11319334,1404724573337 -2014-07-07T00:38:16.000+00:00,36.089,-97.016,4.1,2.5,ml,,73,,0.53,us,usc000rraj,1404884042475 -2014-07-06T22:11:34.590+00:00,-20.983,174.174,44.0,4.8,mb,,119,4.9,0.97,us,usc000rr1y,1404751010000 -2014-07-06T19:28:40.680+00:00,39.080,142.395,66.7,4.4,mb,,189,3.0,0.55,us,usc000rr0x,1404703883625 -2014-07-06T19:21:19.000+00:00,52.501,-162.378,11.2,2.9,ml,,,,0.54,ak,ak11319090,1404706946140 -2014-07-06T18:54:10.000+00:00,53.434,-166.695,67.2,3.0,ml,,,,0.40,ak,ak11319075,1404701809116 -2014-07-06T17:08:38.000+00:00,-10.339,-11.850,10.0,4.9,mb,,132,18.3,0.69,us,usc000rr02,1404695465110 -2014-07-06T17:05:21.000+00:00,60.652,-151.199,72.5,2.5,ml,,,,0.88,ak,ak11318964,1404695274598 -2014-07-06T16:19:27.480+00:00,47.697,147.534,402.5,4.4,mb,,93,3.3,0.70,us,usc000rqzl,1404912316074 -2014-07-06T16:07:54.960+00:00,3.630,122.875,546.6,4.7,mb,,52,4.4,0.60,us,usc000rqzg,1404691820939 -2014-07-06T15:54:12.400+00:00,44.592,-110.721,9.4,2.5,Ml,,65,0.1,0.16,uu,uu60076177,1405022942000 -2014-07-06T15:46:12.400+00:00,44.584,-110.719,-0.1,2.5,Ml,,79,0.1,0.11,uu,uu60076142,1405022357000 -2014-07-06T15:43:56.800+00:00,36.754,-98.042,5.0,2.8,ml,,98,,0.55,us,usb000rrkc,1405018346681 -2014-07-06T15:37:43.030+00:00,-19.896,-177.746,552.7,5.0,mb,,75,4.5,0.61,us,usc000rqyz,1404690019683 -2014-07-06T15:22:05.600+00:00,36.727,-97.893,5.0,3.1,ml,,89,,0.51,us,usc000rqyv,1404912607157 -2014-07-06T14:48:14.140+00:00,30.566,80.265,75.5,4.2,mb,,168,6.7,1.05,us,usc000rqyt,1404687055294 -2014-07-06T13:26:25.700+00:00,11.872,-87.146,38.7,4.3,mb,,186,0.8,0.60,us,usc000rqyr,1404682137971 -2014-07-06T12:43:26.300+00:00,18.196,-67.695,93.0,3.1,Md,13,184,0.3,0.28,pr,pr14187008,1406718933000 -2014-07-06T12:22:34.640+00:00,-18.427,-69.686,132.2,4.1,mb,,74,0.6,1.17,us,usc000rqzx,1406033786000 -2014-07-06T12:13:38.120+00:00,-25.170,-175.109,29.6,4.6,mb,,100,4.8,1.39,us,usb000rv1g,1406718832316 -2014-07-06T11:42:45.170+00:00,10.334,-85.116,68.8,5.0,mwr,,68,0.2,1.42,us,usc000rqyh,1406033658575 -2014-07-06T11:36:58.000+00:00,63.285,-151.132,18.4,2.8,ml,,,,0.65,ak,ak11318763,1406718321000 -2014-07-06T11:32:04.160+00:00,-55.372,-28.056,10.0,4.1,mb,,96,5.0,0.26,us,usb000rv24,1406718016000 -2014-07-06T10:24:00.060+00:00,-13.336,167.281,195.4,4.2,mb,,164,2.1,0.88,us,usb000rv1m,1406712682528 -2014-07-06T10:15:52.000+00:00,19.190,-104.540,54.0,4.0,mb,,,,1.35,us,usc000rqy2,1406720950000 -2014-07-06T10:13:37.230+00:00,-15.575,167.413,57.3,4.7,mb,,75,0.2,1.13,us,usc000rqy3,1406032626000 -2014-07-06T10:07:54.700+00:00,18.628,-64.305,20.0,2.8,Md,7,335,0.4,0.10,pr,pr14187006,1406712316000 -2014-07-06T09:36:14.320+00:00,-29.735,-177.051,7.8,4.4,mb,,199,0.9,1.44,us,usb000rv1e,1406712118000 -2014-07-06T08:44:48.500+00:00,18.859,-64.346,15.0,2.6,Md,4,331,0.5,0.17,pr,pr14187005,1404665249726 -2014-07-06T08:26:20.000+00:00,18.704,-64.950,59.0,2.6,Md,5,245,0.4,0.09,pr,pr14187007,1404664142101 -2014-07-06T08:19:30.300+00:00,19.119,-66.790,23.0,3.2,Md,27,216,0.7,0.25,pr,pr14187004,1404663765951 -2014-07-06T06:33:45.230+00:00,12.728,-88.278,68.4,4.2,mb,,87,1.2,0.73,us,usc000rqxf,1404657380414 -2014-07-06T05:47:43.400+00:00,12.814,-90.392,35.0,4.2,mb,,211,1.4,1.07,us,usc000rqxe,1404654616333 -2014-07-06T05:44:45.400+00:00,18.872,-64.357,5.0,2.8,Md,13,299,0.5,0.28,pr,pr14187003,1404654431224 -2014-07-06T05:21:02.260+00:00,-19.036,-172.540,34.6,4.7,mb,,125,5.2,0.68,us,usc000rqx9,1404653011323 -2014-07-06T04:24:56.520+00:00,32.531,-109.162,5.0,3.5,ml,,101,1.2,0.65,us,usc000rqwx,1404919398378 -2014-07-06T04:20:22.770+00:00,3.381,92.741,28.1,4.2,mb,,209,4.6,0.51,us,usc000rqwy,1404649378927 -2014-07-06T04:15:00.280+00:00,38.120,89.802,10.0,4.0,mb,,84,5.9,1.15,us,usc000rqwu,1404649136886 -2014-07-06T04:10:46.560+00:00,36.735,-97.742,5.0,3.2,mb_lg,,51,0.3,0.77,us,usc000rqwr,1404623665201 -2014-07-06T04:10:27.200+00:00,18.806,-64.229,7.0,3.1,Md,8,324,0.5,0.30,pr,pr14187001,1404648871825 -2014-07-06T03:52:03.300+00:00,18.175,-67.902,126.0,3.2,Md,14,202,0.6,0.49,pr,pr14187000,1404647677839 -2014-07-06T03:08:47.400+00:00,-14.641,-71.220,61.2,5.0,mb,,114,3.4,1.04,us,usc000rqwm,1404645221709 -2014-07-06T02:42:20.800+00:00,18.572,-63.779,31.0,3.1,Md,4,353,0.8,0.23,pr,pr14187002,1404643495762 -2014-07-06T01:44:18.870+00:00,36.219,-97.522,5.0,3.3,mb_lg,,30,0.2,0.43,us,usc000rqwg,1404619864748 -2014-07-06T00:54:56.800+00:00,36.138,-117.966,4.7,3.4,ml,30,63,0.1,0.10,ci,ci15521601,1404662178846 -2014-07-05T23:57:12.430+00:00,3.749,127.668,77.3,4.4,mb,,121,3.0,0.61,us,usc000rqw0,1404633654099 -2014-07-05T23:28:39.000+00:00,51.619,-178.293,13.0,2.9,ml,18,184,,0.58,ak,ak11318424,1405734381545 -2014-07-05T22:42:44.000+00:00,51.807,178.390,115.6,2.5,ml,8,259,,0.16,ak,ak11318379,1405734378403 -2014-07-05T22:22:41.000+00:00,51.756,178.420,98.6,3.2,ml,20,169,,0.70,ak,ak11318362,1405734257480 -2014-07-05T21:41:38.630+00:00,33.693,35.217,14.8,4.1,mb,,176,2.0,0.83,us,usc000rqvn,1404648573209 -2014-07-05T21:04:19.000+00:00,61.903,-147.525,15.1,2.8,ml,65,40,,0.74,ak,ak11318258,1405734253555 -2014-07-05T20:37:26.000+00:00,57.521,-152.121,6.1,2.6,ml,20,202,,0.72,ak,ak11318239,1405734252109 -2014-07-05T20:22:56.410+00:00,42.136,142.987,59.3,4.8,mb,,49,0.2,0.73,us,usc000rqvb,1404627723565 -2014-07-05T19:30:07.430+00:00,32.630,-109.104,5.0,3.2,ml,,134,1.1,0.57,us,usc000rqv2,1404624762298 -2014-07-05T19:05:46.130+00:00,36.133,-117.967,4.6,3.0,ml,30,67,0.1,0.10,ci,ci15521265,1404764946450 -2014-07-05T17:20:16.000+00:00,51.796,178.519,106.6,3.6,ml,28,162,,1.12,ak,ak11318060,1405734331871 -2014-07-05T17:16:07.000+00:00,51.834,178.428,112.0,2.6,ml,11,252,,0.19,ak,ak11330938,1405734322431 -2014-07-05T17:02:30.200+00:00,18.792,-67.359,13.0,3.1,Md,25,212,0.4,0.15,pr,pr14186004,1404609331090 -2014-07-05T17:01:23.010+00:00,34.279,-117.019,10.0,2.6,ml,35,61,0.0,0.13,ci,ci15521001,1404665193363 -2014-07-05T17:00:26.490+00:00,34.274,-117.018,9.5,3.4,ml,60,42,0.1,0.24,ci,ci15520993,1405042007176 -2014-07-05T16:59:34.070+00:00,34.280,-117.028,8.7,4.6,mw,149,37,0.0,0.13,ci,ci15520985,1406753957393 -2014-07-05T16:39:24.000+00:00,51.810,178.500,107.9,2.6,ml,13,230,,0.39,ak,ak11318009,1405734297268 -2014-07-05T15:42:35.000+00:00,59.758,-152.787,83.8,2.6,ml,63,90,,0.61,ak,ak11317953,1405734234486 -2014-07-05T15:31:51.700+00:00,41.488,-108.790,-2.4,2.6,Ml,,101,1.1,0.33,uu,uu60075992,1404931304624 -2014-07-05T15:10:57.000+00:00,51.745,178.410,115.7,2.8,ml,13,169,,0.70,ak,ak11317935,1405734287830 -2014-07-05T14:59:34.630+00:00,37.381,141.760,44.5,4.9,mb,,85,3.0,0.68,us,usc000rqtn,1404615238496 -2014-07-05T14:46:39.570+00:00,41.364,-73.934,5.0,2.5,ml,24,62,0.1,0.45,ld,ld60072806,1405021381664 -2014-07-05T13:30:16.100+00:00,39.055,-123.048,7.8,2.8,Md,51,32,0.0,0.06,nc,nc72249391,1404939127522 -2014-07-05T12:52:24.000+00:00,51.814,178.647,90.7,2.5,ml,13,191,,0.36,ak,ak11317849,1405734288290 -2014-07-05T12:32:57.000+00:00,63.453,-148.527,8.6,2.7,ml,,,,0.67,ak,ak11317827,1405734352880 -2014-07-05T11:48:17.000+00:00,52.282,-168.774,62.0,2.5,ml,,,,0.62,ak,ak11317788,1405734397514 -2014-07-05T11:00:47.150+00:00,-20.709,-70.806,23.8,4.4,mb,,154,0.6,0.91,us,usc000rqsr,1404592834320 -2014-07-05T10:58:38.000+00:00,19.154,-66.896,23.0,2.9,Md,6,313,0.7,0.05,pr,pr14186003,1404592853381 -2014-07-05T10:02:13.230+00:00,1.657,97.027,28.1,4.7,mb,,186,0.7,0.73,us,usc000rqsj,1404592849487 -2014-07-05T09:39:30.050+00:00,1.995,97.015,30.0,6.0,mwb,,38,0.9,0.92,us,usc000rqs7,1404592839179 -2014-07-05T09:33:39.000+00:00,51.771,178.381,112.0,2.8,ml,,,,0.36,ak,ak11317711,1405734402983 -2014-07-05T08:54:44.730+00:00,-33.936,-71.380,37.3,4.4,mb,,88,0.7,0.84,us,usc000rqrw,1406032483000 -2014-07-05T08:18:26.850+00:00,51.841,178.503,100.4,4.2,mb,,120,0.1,0.71,us,usc000rqri,1406461121175 -2014-07-05T08:06:45.880+00:00,-55.424,-28.078,10.0,4.1,mb,,126,5.0,0.79,us,usb000rvf7,1406460705000 -2014-07-05T07:55:23.730+00:00,39.396,142.576,50.0,4.4,mb,,135,2.7,1.18,us,usc000rqrg,1406032337000 -2014-07-05T07:44:44.000+00:00,51.942,-174.276,55.1,2.7,ml,,,,0.40,us,usc000rqs1,1406460363000 -2014-07-05T06:48:06.110+00:00,-17.852,-177.836,571.9,4.2,mb,,123,3.9,0.90,us,usb000rve3,1406453492056 -2014-07-05T06:27:46.000+00:00,61.251,-139.534,17.5,2.6,ml,35,68,,0.98,ak,ak11317630,1405734272768 -2014-07-05T06:22:34.370+00:00,11.849,-87.132,49.3,4.1,mb,,162,0.8,0.72,us,usc000rqr5,1406032089000 -2014-07-05T05:45:28.120+00:00,9.888,126.405,17.6,4.3,mb,,185,9.1,0.89,us,usb000rve1,1406452895000 -2014-07-05T05:31:07.070+00:00,-40.128,77.967,10.0,4.6,mb,,148,2.3,0.53,us,usb000rvdz,1406452609285 -2014-07-05T05:15:23.550+00:00,46.335,153.126,26.4,4.3,mb,,135,7.4,0.69,us,usb000rve0,1406440290000 -2014-07-05T05:06:02.280+00:00,-1.971,152.366,15.9,4.5,mb,,147,10.6,0.31,us,usb000rvdy,1406439935000 -2014-07-05T04:13:03.930+00:00,51.758,178.679,101.7,4.9,mb,,117,0.5,0.84,us,usc000rqqx,1405734163841 -2014-07-05T03:34:46.200+00:00,-5.054,153.711,55.3,4.8,mb,,99,1.8,0.67,us,usc000rqqs,1404560234817 -2014-07-05T03:11:47.970+00:00,28.306,55.036,10.0,4.7,mb,,52,3.5,0.81,us,usc000rqqn,1404558864782 -2014-07-05T02:56:44.000+00:00,56.155,-160.537,178.5,3.0,ml,,,,0.34,ak,ak11317556,1405734187275 -2014-07-05T02:54:34.000+00:00,17.977,-68.253,119.0,3.4,Md,10,335,1.1,0.41,pr,pr14186001,1404557823548 -2014-07-05T01:18:13.270+00:00,-30.694,-178.146,35.0,5.2,mb,,80,12.0,1.44,us,usc000rqq9,1404552138118 -2014-07-05T01:16:57.460+00:00,-6.329,152.769,46.5,4.7,mb,,48,2.2,0.71,us,usc000rqq8,1404606337250 -2014-07-05T01:05:46.200+00:00,19.302,-66.539,54.0,2.7,Md,6,295,0.8,0.23,pr,pr14186000,1404551292036 -2014-07-05T00:34:14.000+00:00,51.842,178.310,124.4,3.0,ml,,,,0.46,ak,ak11317497,1405734254450 -2014-07-04T23:09:00.300+00:00,19.419,-155.335,4.8,2.5,Ml,,256,0.0,0.09,hv,hv60725531,1405022821650 -2014-07-04T22:44:49.810+00:00,-7.146,154.640,129.4,4.9,mb,,47,3.8,2.33,us,usc000rqiy,1404542843608 -2014-07-04T22:42:04.740+00:00,39.675,142.034,44.9,5.7,mb,,49,2.5,0.95,us,usc000rqix,1406326429000 -2014-07-04T21:30:36.900+00:00,37.739,-112.961,-0.3,2.6,Ml,,40,0.2,0.17,uu,uu60075967,1404747436007 -2014-07-04T21:12:37.000+00:00,19.283,-65.083,63.0,3.0,Md,4,313,0.9,0.10,pr,pr14185004,1404537307631 -2014-07-04T21:08:45.430+00:00,35.104,-34.901,10.0,5.2,mb,,28,6.4,0.73,us,usc000rqih,1404751568000 -2014-07-04T19:09:39.000+00:00,63.282,-150.479,126.7,2.7,ml,,,,0.61,ak,ak11317244,1404529925630 -2014-07-04T18:48:52.500+00:00,18.828,-64.358,38.0,2.8,Md,4,328,0.5,0.07,pr,pr14185002,1404528688435 -2014-07-04T15:00:26.430+00:00,-6.205,152.821,10.0,6.6,mwp,,19,2.1,0.92,us,usc000rqgz,1404575795000 -2014-07-04T13:57:39.350+00:00,51.910,178.446,110.3,4.5,mb,,170,2.7,1.06,us,usc000rqgt,1404519956978 -2014-07-04T13:41:47.000+00:00,36.556,-90.017,7.7,2.8,md,36,65,0.1,0.12,nm,nm60052977,1404566232069 -2014-07-04T13:12:18.390+00:00,-7.005,155.848,42.2,5.6,mb,,51,4.7,0.82,us,usc000rqgl,1404572198000 -2014-07-04T11:22:17.810+00:00,36.135,-117.968,4.9,2.7,ml,27,68,0.1,0.13,ci,ci15520113,1404752322504 -2014-07-04T11:20:36.320+00:00,-3.989,139.492,47.4,4.8,mb,,62,7.3,0.67,us,usc000rqfj,1404501786394 -2014-07-04T09:19:35.150+00:00,-25.789,-179.840,453.5,4.6,mb,,90,3.8,0.66,us,usc000rqf1,1404494535140 -2014-07-04T09:15:39.430+00:00,63.292,150.887,15.6,4.5,mb,,74,3.7,0.61,us,usc000rqf0,1404494292452 -2014-07-04T08:49:10.010+00:00,18.388,145.937,192.1,4.4,mb,,89,4.9,0.60,us,usb000ruzz,1406295732000 -2014-07-04T08:33:37.350+00:00,51.729,178.405,101.4,2.7,ml,,,,0.54,us,usb000rxh7,1406370568000 -2014-07-04T07:55:45.170+00:00,51.787,-171.777,51.1,4.2,mb,,73,1.6,1.46,us,usc000rqes,1406295360000 -2014-07-04T06:52:31.170+00:00,-55.189,-27.829,10.0,4.9,mb,,66,5.1,0.67,us,usc000rqem,1406031712000 -2014-07-04T06:16:22.600+00:00,-17.770,-70.032,116.9,4.5,mb,,116,0.7,1.34,us,usb000rv03,1406287447000 -2014-07-04T05:47:08.100+00:00,37.904,-118.534,5.2,2.5,Md,28,151,0.2,0.06,nc,nc72248736,1404967148285 -2014-07-04T05:40:02.840+00:00,-3.943,138.746,53.6,4.9,mb,,25,2.4,0.92,us,usc000rqeg,1406031512000 -2014-07-04T05:34:19.210+00:00,-49.120,-8.296,10.0,5.1,mb,,66,22.8,0.64,us,usc000rqef,1406031365000 -2014-07-04T05:33:25.280+00:00,51.794,178.378,102.5,2.6,ml,,,,0.17,us,usb000rxh6,1406370212000 -2014-07-04T04:55:10.020+00:00,36.856,-97.399,4.6,3.1,mb_lg,,70,0.2,0.46,us,usc000rqec,1404518999781 -2014-07-04T03:41:16.930+00:00,-16.718,-173.410,47.6,4.7,mb,,55,3.2,1.03,us,usc000rqe9,1404605323850 -2014-07-04T01:32:04.300+00:00,19.149,-64.273,38.0,3.0,Md,10,324,0.8,0.07,pr,pr14185000,1404466475188 -2014-07-04T00:55:04.000+00:00,51.840,178.509,117.9,3.1,ml,18,227,0.1,0.42,ak,ak11316764,1404520914131 -2014-07-03T23:50:27.720+00:00,33.164,-115.646,1.8,3.1,ml,50,37,0.0,0.20,ci,ci15519497,1404437021095 -2014-07-03T22:56:31.000+00:00,32.579,-109.075,5.0,3.9,ml,,81,1.1,0.89,us,usc000rqda,1404513438298 -2014-07-03T22:30:33.590+00:00,-4.063,139.216,65.3,5.1,mb,,31,7.0,0.93,us,usc000rqd3,1404455591468 -2014-07-03T20:39:58.480+00:00,35.563,75.100,10.0,4.9,mb,,75,2.4,1.13,us,usc000rqcc,1404552675362 -2014-07-03T20:24:20.000+00:00,36.760,-98.052,4.0,3.0,ml,,99,,1.32,us,usc000rqc5,1404429065000 -2014-07-03T20:14:54.490+00:00,35.939,-97.050,6.3,3.2,mb_lg,,36,0.3,0.42,us,usc000rqbx,1404433767000 -2014-07-03T20:03:39.300+00:00,17.863,-67.068,8.0,2.6,Md,13,256,0.1,0.10,pr,pr14184009,1404446768353 -2014-07-03T19:50:05.040+00:00,-30.533,-176.526,20.0,6.3,mwb,,18,1.8,1.10,us,usc000rqbg,1405785711000 -2014-07-03T19:14:34.000+00:00,61.376,-150.522,0.5,2.7,ml,8,202,0.1,0.68,ak,ak11316368,1404520910324 -2014-07-03T19:06:47.850+00:00,52.071,178.460,104.0,5.7,mwb,,46,0.9,0.99,us,usc000rqae,1404572195000 -2014-07-03T17:19:15.900+00:00,19.091,-65.661,73.0,2.8,Md,4,277,0.9,0.18,pr,pr14184008,1404436912235 -2014-07-03T17:15:45.200+00:00,41.983,-112.359,10.8,2.5,Ml,,86,0.1,0.28,uu,uu60075847,1404427372887 -2014-07-03T16:09:04.410+00:00,36.379,-96.931,2.8,2.9,mb_lg,,56,0.3,0.17,us,usc000rq2e,1404423450138 -2014-07-03T13:56:43.050+00:00,-16.774,-71.224,83.7,4.7,mb,,131,1.8,1.10,us,usc000rpxk,1404407680578 -2014-07-03T12:30:10.600+00:00,19.175,-66.274,36.0,2.9,Md,12,263,0.7,0.33,pr,pr14184006,1404419572867 -2014-07-03T12:16:58.110+00:00,55.204,166.832,10.0,4.6,mb,,122,5.0,1.06,us,usc000rpx7,1404418772330 -2014-07-03T12:05:22.800+00:00,55.206,166.920,10.0,5.9,mwp,,76,4.9,1.30,us,usc000rpw8,1404418068972 -2014-07-03T10:33:57.600+00:00,18.177,-68.011,97.0,3.3,Md,10,209,0.5,0.30,pr,pr14184007,1404412592858 -2014-07-03T09:35:49.180+00:00,-22.063,-179.447,599.2,5.6,mb,,78,4.9,0.96,us,usc000rpvy,1404415344000 -2014-07-03T09:06:55.420+00:00,17.480,-95.148,10.0,4.3,mb,,151,3.1,1.06,us,usc000rpvw,1404407531361 -2014-07-03T08:23:48.000+00:00,61.602,-149.799,30.9,3.3,ml,80,36,0.3,0.74,ak,ak11315769,1404519802297 -2014-07-03T07:50:45.790+00:00,-18.247,-177.373,387.3,4.8,mb,,39,4.4,1.17,us,usc000rpvg,1404402792512 -2014-07-03T07:32:44.400+00:00,18.931,-65.774,16.0,2.8,Md,12,245,0.7,0.25,pr,pr14184004,1404401720501 -2014-07-03T06:49:26.900+00:00,18.837,-65.728,9.0,2.5,Md,5,295,0.6,0.18,pr,pr14184002,1404399133929 -2014-07-03T06:48:09.890+00:00,19.403,121.153,35.0,4.5,mb,,143,3.4,1.07,us,usc000rpv8,1404399047215 -2014-07-03T06:42:25.000+00:00,51.805,179.120,91.0,2.9,ml,9,126,0.3,0.25,ak,ak11315684,1404520917630 -2014-07-03T06:38:14.400+00:00,18.908,-65.771,13.0,2.6,Md,6,277,0.6,0.23,pr,pr14184001,1404398448983 -2014-07-03T05:04:46.920+00:00,40.274,27.996,9.6,4.4,mb,,44,1.6,0.80,us,usc000rpuu,1404409797000 -2014-07-03T04:51:32.000+00:00,18.690,-64.638,58.0,2.7,Md,6,281,0.3,0.23,pr,pr14184000,1404392072378 -2014-07-03T04:43:42.980+00:00,51.938,178.521,122.9,5.2,mb,,72,0.7,1.39,us,usc000rpum,1404519461481 -2014-07-03T04:28:10.350+00:00,-2.909,139.127,47.4,4.7,mb,,133,6.9,0.71,us,usc000rpuj,1404390637524 -2014-07-03T03:12:13.900+00:00,36.187,-92.712,6.8,2.7,md,15,54,0.2,0.21,nm,nm60052892,1405831938626 -2014-07-03T02:56:41.290+00:00,55.298,166.868,22.7,5.8,mwp,,72,5.0,1.07,us,usc000rpu4,1404413794000 -2014-07-03T02:50:20.080+00:00,-34.755,-71.743,41.2,4.8,mb,,68,0.3,1.03,us,usc000rpu3,1404425391507 -2014-07-03T02:10:40.690+00:00,-24.041,-67.060,228.2,4.3,mb,,93,2.2,0.72,us,usc000rppb,1404382479315 -2014-07-03T01:38:25.000+00:00,51.836,178.560,111.5,3.1,ml,11,227,0.1,0.40,ak,ak11314916,1404520907028 -2014-07-03T01:25:33.390+00:00,-32.310,-178.001,10.0,4.8,mb,,73,3.1,1.45,us,usc000rpp6,1404379692225 -2014-07-03T00:30:28.900+00:00,35.846,-119.794,7.6,2.9,Md,111,54,0.2,0.23,nc,nc72248081,1404444609002 -2014-07-03T00:29:13.700+00:00,35.843,-119.817,12.3,2.9,Md,121,29,0.2,0.28,nc,nc72248076,1404446347056 -2014-07-02T19:24:48.230+00:00,26.873,130.027,33.6,4.9,mb,,53,1.6,0.97,us,usc000rpkm,1404358082987 -2014-07-02T18:57:40.000+00:00,60.205,-153.139,136.7,2.6,ml,49,180,0.1,0.80,ak,ak11314822,1404356411187 -2014-07-02T18:32:17.740+00:00,36.135,-117.964,4.8,3.1,ml,31,67,0.1,0.11,ci,ci37238872,1404409875679 -2014-07-02T17:33:48.540+00:00,-55.404,-28.009,36.3,4.7,mb,,126,5.0,0.41,us,usc000rpj9,1404351375246 -2014-07-02T17:08:35.800+00:00,36.689,-121.316,3.2,2.5,Md,70,29,0.0,0.08,nc,nc72247896,1404359345532 -2014-07-02T16:58:03.100+00:00,19.198,-64.814,15.0,3.0,Md,3,335,0.9,0.14,pr,pr14183012,1404661193000 -2014-07-02T16:50:21.500+00:00,18.924,-65.279,37.0,2.6,Md,8,266,0.6,0.27,pr,pr14183011,1404660893000 -2014-07-02T16:10:54.190+00:00,31.109,-116.005,18.2,3.8,ml,21,227,0.5,1.71,ci,ci37238816,1404411686007 -2014-07-02T15:55:39.100+00:00,35.753,-97.505,5.0,2.7,ml,,71,,0.55,us,usc000rplj,1404660362990 -2014-07-02T15:37:52.100+00:00,18.810,-65.321,61.0,2.7,md,,278,0.5,0.61,us,usc000rpis,1404344449574 -2014-07-02T15:36:20.600+00:00,18.624,-67.589,12.0,2.5,Md,5,310,0.3,0.23,pr,pr14183010,1404659893000 -2014-07-02T15:02:19.990+00:00,-6.908,129.608,194.0,4.2,mb,,127,2.0,0.90,us,usc000rphr,1404342289735 -2014-07-02T14:24:37.310+00:00,19.075,-66.530,8.4,2.7,md,,307,0.6,0.81,us,usc000rpir,1404340032598 -2014-07-02T14:01:15.800+00:00,19.317,-68.164,68.0,3.7,Md,19,270,0.8,0.50,pr,pr14183007,1404338621286 -2014-07-02T13:43:40.600+00:00,36.277,-97.262,5.7,2.6,ml,,60,,0.19,us,usc000rpls,1404659501605 -2014-07-02T12:04:41.770+00:00,-8.122,107.892,35.0,4.2,mb,,65,0.6,1.29,us,usc000rqee,1404452073157 -2014-07-02T11:42:31.780+00:00,-22.310,170.320,35.0,4.9,mb,,96,3.6,0.97,us,usc000rpgx,1404330305442 -2014-07-02T11:20:13.000+00:00,52.022,-173.468,38.8,3.0,ml,12,313,,0.64,ak,ak11314638,1404342504685 -2014-07-02T11:01:35.500+00:00,19.124,-66.547,13.0,2.6,Md,5,288,0.6,0.38,pr,pr14183005,1404327901427 -2014-07-02T10:55:20.000+00:00,19.981,-155.612,23.4,2.6,Ml,,137,0.1,0.10,hv,hv60724106,1404422555398 -2014-07-02T10:02:30.630+00:00,-55.377,-28.439,10.0,5.2,mb,,87,4.8,0.74,us,usc000rpgl,1404324300330 -2014-07-02T09:00:37.820+00:00,36.849,-97.873,2.1,2.6,mb_lg,,84,0.3,0.77,us,usc000rpgd,1404307590751 -2014-07-02T08:45:21.000+00:00,51.958,-170.606,25.5,3.0,ml,12,223,,0.95,ak,ak11314598,1404328463445 -2014-07-02T07:24:29.500+00:00,0.031,124.661,80.5,5.0,mb,,52,2.2,1.15,us,usc000rpg5,1404314818007 -2014-07-02T06:35:09.600+00:00,18.903,-64.299,7.0,2.9,Md,3,349,0.8,0.07,pr,pr14183004,1404311855444 -2014-07-02T05:53:30.450+00:00,-62.270,155.088,16.1,5.4,mb,,109,8.1,0.99,us,usc000rpfu,1404340899000 -2014-07-02T03:10:33.000+00:00,67.667,-162.150,17.1,3.5,ml,,,,0.80,ak,ak11314538,1404299679360 -2014-07-02T01:49:46.000+00:00,60.269,-152.936,100.0,2.8,ml,48,126,,0.89,ak,ak11314517,1404294738809 -2014-07-02T01:39:57.930+00:00,36.139,-117.962,3.7,2.8,ml,26,67,0.2,0.11,ci,ci37238496,1404337938167 -2014-07-02T01:05:05.300+00:00,18.343,-64.796,27.0,2.6,Md,3,184,0.2,0.12,pr,pr14183003,1404292059361 -2014-07-02T01:02:00.000+00:00,51.855,178.322,124.8,3.1,ml,13,162,,0.74,ak,ak11314508,1404291879744 -2014-07-02T00:06:07.200+00:00,18.448,-64.266,28.0,2.7,Md,7,349,0.3,0.10,pr,pr14183000,1404288551041 -2014-07-01T23:14:59.000+00:00,36.658,-97.875,5.6,2.7,ml,,86,,0.81,us,usc000rplw,1404600598239 -2014-07-01T23:06:32.300+00:00,19.280,-66.485,41.0,2.6,Md,4,299,0.8,0.17,pr,pr14182004,1404284948753 -2014-07-01T21:11:30.860+00:00,51.811,178.383,97.1,2.8,ml,,,,0.39,us,usb000rupl,1406324140000 -2014-07-01T18:14:53.220+00:00,-30.265,-176.998,26.8,5.1,mb,,75,1.3,0.86,us,usc000rp9n,1404267450743 -2014-07-01T18:11:48.600+00:00,-30.275,-177.131,7.4,5.2,mb,,64,1.2,0.71,us,usc000rp97,1404267260652 -2014-07-01T16:28:14.670+00:00,31.153,130.250,169.2,4.7,mb,,65,2.0,0.63,us,usc000rp7q,1404261046264 -2014-07-01T16:09:56.670+00:00,52.817,-166.829,24.1,4.5,mb,,171,1.0,1.00,us,usc000rp7f,1404259944947 -2014-07-01T14:30:36.300+00:00,36.582,-97.821,6.1,2.5,ml,,80,,0.42,us,usc000rp70,1404253995340 -2014-07-01T14:22:09.580+00:00,-33.898,-72.489,16.2,5.1,mb,,133,1.0,0.68,us,usc000rp6f,1404233431533 -2014-07-01T14:22:07.200+00:00,36.583,-97.819,5.0,3.1,ml,,79,,0.65,us,usc000rp6g,1404230376367 -2014-07-01T14:16:58.400+00:00,36.649,-97.954,5.0,2.8,ml,,89,,0.58,us,usc000rp6w,1404253226661 -2014-07-01T13:37:20.000+00:00,62.096,-152.466,4.7,3.3,ml,,,,0.94,ak,ak11314224,1404251179490 -2014-07-01T12:39:06.700+00:00,8.691,-39.760,10.0,5.0,mb,,41,14.9,0.50,us,usc000rp5y,1404247297338 -2014-07-01T12:14:19.400+00:00,37.325,-122.225,5.8,2.5,Md,110,68,0.0,0.12,nc,nc72247316,1404363991980 -2014-07-01T11:31:26.100+00:00,18.841,-64.853,14.0,2.7,Md,5,270,0.5,0.17,pr,pr14182002,1404243237235 -2014-07-01T09:11:23.790+00:00,13.828,119.224,34.6,5.1,mb,,90,8.3,0.90,us,usc000rp53,1404207038991 -2014-07-01T09:04:43.120+00:00,36.134,-117.965,5.1,3.0,ml,30,67,0.1,0.09,ci,ci37238128,1404319552882 -2014-07-01T09:00:58.990+00:00,26.916,129.287,26.3,4.8,mb,,130,0.9,1.33,us,usc000rp4z,1404234209259 -2014-07-01T08:57:00.700+00:00,-53.723,9.520,10.0,4.6,mb,,90,18.8,0.85,us,usb000rvvm,1406272264000 -2014-07-01T08:24:55.980+00:00,-5.971,153.678,68.4,4.4,mb,,78,2.3,1.04,us,usb000rvub,1406271240640 -2014-07-01T08:20:34.500+00:00,36.651,-97.959,5.0,3.2,ml,,89,,0.75,us,usc000rp3j,1406031120629 -2014-07-01T08:16:33.580+00:00,38.822,-122.840,2.4,2.9,md,83,24,0.0,0.06,nc,nc72247216,1404241088504 -2014-07-01T08:14:46.180+00:00,-55.354,-28.165,21.5,4.4,mb,,126,4.9,0.62,us,usb000rvvk,1406270606000 -2014-07-01T08:09:48.840+00:00,-30.035,-177.718,33.3,4.7,mb,,129,0.8,0.91,us,usb000rvue,1406269805000 -2014-07-01T07:42:52.800+00:00,35.825,-97.075,5.6,3.0,ml,,81,,0.53,us,usc000rp34,1406030790000 -2014-07-01T07:29:43.300+00:00,-55.242,-28.994,20.2,4.8,mb,,44,4.4,0.70,us,usc000rp31,1406030411000 -2014-07-01T07:12:55.000+00:00,67.627,-162.420,24.1,3.2,ml,,,,0.91,ak,ak11314112,1406268208000 -2014-07-01T07:12:22.520+00:00,-55.307,-27.954,10.0,4.1,mb,,95,5.0,0.40,us,usb000rvvj,1406267827000 -2014-07-01T06:14:36.100+00:00,19.406,-155.289,3.5,2.6,Ml,,148,0.0,0.15,hv,hv60723461,1404244866505 -2014-07-01T06:11:46.900+00:00,18.911,-64.992,32.0,2.5,Md,11,310,0.7,0.28,pr,pr14182001,1404224375960 -2014-07-01T04:52:13.000+00:00,54.223,-161.694,13.2,3.4,ml,,,,0.75,ak,ak11314085,1404219288126 -2014-07-01T04:37:49.900+00:00,19.635,-66.087,109.0,3.4,Md,8,284,1.4,0.14,pr,pr14182000,1404200973829 -2014-07-01T03:10:49.000+00:00,40.299,-124.466,11.9,3.0,Md,22,259,0.1,0.13,nc,nc72247101,1404679580411 -2014-07-01T01:55:22.000+00:00,54.121,-166.231,119.1,2.5,ml,,,,0.27,ak,ak11314041,1404208684041' - - -] - -{ #category : #utility } -RTMapLocationBuilder >> translateGeoPositionToPixels: point [ - "From https://github.com/thebyrd/world-news" - - | longitud latitud xFactor xoffset yFactor yoffset | - latitud := point x. - longitud := point y. - - xFactor := 2.6938. - xoffset := 465.4. - - yFactor := -2.6938. - yoffset := 227.066. - ^ ((longitud * xFactor) + xoffset) @ ((latitud * yFactor) + yoffset) -] diff --git a/src/Roassal2/RTMapLocationExample.class.st b/src/Roassal2/RTMapLocationExample.class.st deleted file mode 100644 index 19c5096ff..000000000 --- a/src/Roassal2/RTMapLocationExample.class.st +++ /dev/null @@ -1,283 +0,0 @@ -" -RTMapLocationExample new installTitle: 'SeismOnEarth' - code: - ' -| b tab | -tab := RTTabTable new input: RTMapLocationBuilder new seismData2 usingDelimiter: $,. -tab removeFirstRow. -tab replaceEmptyValuesWith: ''0'' inColumns: #(2 3 4 5). -tab convertColumnsAsFloat: #(2 3 4 5). -b := RTMapLocationBuilder new. -b shape circle -size: [ :v | (2 raisedTo: v) / 2 ]; -color: (Color red alpha: 0.3). -tab values do: [ :row | b addPoint: row second @ row third value: row fifth ]. -b open. -b view canvas' - -" -Class { - #name : #RTMapLocationExample, - #superclass : #RTAbstractExample, - #category : #'Roassal2-Builder-Map' -} - -{ #category : #sources } -RTMapLocationExample >> exampleAirports [ - - - | tab b ask | - ask := TRPlatform current dialogConfirm: 'This script takes about 1 minutes to execute. Do you want to continue?'. - ask ifFalse: [ ^ self ]. - - tab := RTTabTable new input: (TRPlatform current httpClientRequestClass get: - 'https://raw.githubusercontent.com/jpatokal/openflights/master/data/airports.dat') - entity contents asString usingDelimiter:$,. - tab convertColumnsAsFloat: #(7 8). - b := RTMapLocationBuilder new. - b shape circle - size: 1; - color: (Color red). - tab values do: [ :row | b addPoint: row seventh @ row eighth value: row second]. - ^ b -] - -{ #category : #icons } -RTMapLocationExample >> exampleAirportsIcon [ - ^ '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' -] - -{ #category : #sources } -RTMapLocationExample >> exampleSeismOnEarth [ - -| b tab | -"tab := RTTabTable new input: RTMapLocationBuilder new seismData2 usingDelimiter: $,." -tab := RTTabTable new input: 'http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_month.csv' asUrl retrieveContents usingDelimiter: $,. -tab removeFirstRow. -tab replaceEmptyValuesWith: '0' inColumns: #(2 3 4 5). -tab convertColumnsAsFloat: #(2 3 4 5). -b := RTMapLocationBuilder new. -b shape circle -size: [ :v | (2 raisedTo: v) / 2 ]; -color: (Color red alpha: 0.3). -tab values do: [ :row | b addPoint: row second @ row third value: row fifth ]. -b build. -b view @ RTZoomableView. -^ b view -] - -{ #category : #icons } -RTMapLocationExample >> exampleSeismOnEarthIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAUJUlEQVR4XuWdWWhdVRfHrwMO -4Is+OCsK4oAgiL4IooIiUpEizogPioIDgloHFJxwRh+UOo/UuU5f1Woda22tVVuttlpra206 -pW2aNG3SJE3SLL/127kr7uzuc+45d0jang2HJPeeYe81/Ne4T0r//lv8sS2NUvFJUHyGFH8U -nyHFZ0jxR/EZUnyGFH8UnyHFZ0jxR/EZUnCGDAwMyOrVq2X+/PmycOFC9/uCBQvcsWzZMlm6 -dKk0NTVJa2urrFu3TlauXClLlixx3//111/yzz//yNq1a2Xx4sXy22+/ydy5c//lXO7FOZw/ -b948d9+2tjbZsGGDhJPgGjs4d+LEie4Z9n13d7cUhiEQ/bvvvnPEM6JA2NjJEBPiT58+Xdas -WSN//vmndHR01J1YMHTz5s2yatUqN6/Ozk7H8Bgzs47+/n5ZsWKFE7BFixY54UJompubM92T -8+fMmSM//fTTMGGpO0NY/MaNG510c0AI/wQkfNasWU7C0RS+RyuWL1/ecKmt9RloFgLnfzZj -xgyZPXu209paGNyIAW1LcBsphxlI4vr166W9vd1NdNKkScMmzOdffvml06RGD5gfErPagTCh -2fzk75aWFqd99Z7zli1bHCyjgdUyu/T77787nOfnr7/+OmQXkKSsN+nr63Nq3NXVVddF1sIQ -XZDIRx81XAOAbqAQSOV3YBB6ZL0eyOzt7XV0R0hK3IgbAg/Tpk1zHMbAc3Mu6OnpyXxzrkUS -a10kE6sVTtRIiBpHaSScognMNYkBoA6Czu8gj33+999/OyVA4PzPnYawcPOg7EOIarBlUAUe -83DUshIxMZzVLhQJQ0BGAt//+OMPJ3xIJyPrddhc6IWHmmTnfMPPmqCxOUBpcFniS26KJoCt -cJUJwlkmC5aHF6FVaROG6yYZeQdeDM9tBANgNF7bN9984+B106ZNDqY//fRT+f77752NYd6V -1uc00GMgwsq9ITjIAsP8NfBdVuQo+UT0uR2qEkzyJ4DaGayFIw9sgaFM3tfQRuA8jPa9yK+/ -/noYhOAWh9fxOYxjbmgTkIzQmnNQCS2McSBGVo0fFqlPnTpVPvnkE/HtBgTDyPvE//HHH91n -MCZGyDQJYzFcw8KQ0Ng577zzjhMOC0KBTIhTrYfF4c8f4vDZF198Ib5Xx09iK57N8csvv0hd -7FkOOCyZG8jiCXz4HWMFUWEMBEGCYYwRn3MgUkyq/EAq/AxvIu0aXwOBEoiDZkKQvB4c82NN -EN63hxDYMg4+oSC+/W5wm8ehqVtgWMkfhyimtiwMRiHZlQw3Bg/GhYRu9IJCB8Wfg0FybM0I -4XaRXAyNOjhq+JlFlVk87t1ILThk+g8//DCMOWioOS/YOhgIBG8X2V4IHko5HgSSxkIYofEf -yWEReMypYN4wx4cr37ahRUBTvYPZmhmCbcBg8hOYyavKpFuy2IV6DxME83hiLi5wCxNYl++G -a+pHPvvsM5fPYmwrcBXVECAGn9wizSweAvCF8R0pbQFGISaek2Vtw3NwRDjnI02fcA6MweXF -eE+YMEF+/vlnd71le4lPap0XcA7jsa924F6jsQx9VnWQhdQjVXnTzHncu1pdSDQAzTY7ZtAE -YSG6P5eYBuDFhZ/NnDmzahcXiEwSSGCeAU0rpftLaZAQ2o+YZthPbAqZYFzbRjPFckdoMkID -NMEIjDOEBpJ8bw/tQHJ9YpunxWdoEwy2z5HoGAzjXfI8bKjlozg4nxJFUlzlD1xp0MTiozD3 -lbuEywJZsHkrPkRYRG+e2Ei4uC3XXCNLXnhBzLuyQpQudghGmBsMs2w2mmCBZppWE937f/uM -rtdAiKjPWJ6rZBIHoZlkkpE0l/LDDz+UTpUiFbchbUDKWCjQAJdN2ho98JBWqJZIoJVoA8R7 -88035dVXXx1aG3M0jbEAGDvCd34aBMgG+0OEwHZBH+6DZtQyd7SK59ozzOkoxTQgDPqYNAaS -fA5qyc1QWyY4efLkuhWSakmF+39jQ2yBEBCN4G8MPNkIPyq3rK8ZeHNQYlrO95bLMhohgNAk -Ka+XlJYPMxlAWSJkmWpijEI/3xbPdyMFTeFAOtFqq79gQ/gctUfqEB4WDFShxXyO8PCdnfv5 -55+7PBXnhtKuquOMMJo0TxmIxvC5CZ6faPVzbNwHGCXP5zshzJPPQA7mjVDkMuo82CZuo0Ml -AveyVlWtx8B5CN1UCO9H5SzemiNgCFqA9q/69ltZ8sQTMkOhbLGe//0998ga1XILgpcoo9br -dz1KWCCx6cknZZk+76uvvnLrN0+KxhDmAULAfBwME1Az2Dwbxlt8163Pa544UdbiBSbEbpmM -OtoQNj+M5rC4IhYo+gbfr0lwDdDVqfHHxtdek2ZlRP8zz8jyc86RDrU14gXF4kXvQhuU1kum -TJniCI2kI+Wx7DMM5blOqPW8mU8/LdNvu02WqD1arJn0TW+/LRoEiTzwwFblZSlfV5EhSJev -onWJJXQx8vzzIpMmiU0kz4AYLnWjXpC6TpIU1CGZSD7OiA8TaxSm8M7k2mtl8aOPilAxTEjv -q6hL7/vvD8U1/rOwKdwf7fNDgfmqVS0PPih9Z58t3UccIb2nny4rb71VRJkjqp3y+OOiKieq -uiIffyxC4KgMErpOFFzdhNIIkLV3KRMzdMLy3HMid945eFTRiAA8gf9/P/WUrFbpxlvCRgCn -aLNpjG/s/fgICV+ntRBBYtVrXKqC0a5a06IwjSbR4MG9kHjLWvguLwwONRLN4RnAmiOuap8c -fbT077OP9B5+uAyccYasHztW5KWXhmmiTJs26H6X3faKycV69185UWOyNTCEW/i2LFa5M/c0 -8R6qPd1aCHPEU2IrJR0DOhTz5zzyiFiEb9BYqazrZzXQWhi98brrpO3ii6X3kkscM9YrVC2r -kDcrpaUC6tFBEiWG3ltUIuWNN0SqiFlMC0x7Y/V7nBKCRCQbYplbiqHmOyS6Qw2yYwipDRU+ -/VDmKiEXKkQRROKBDYOilFp/jPl+yuZPreNbsCke4iAIvoEvmZ2w6py5ePVkhluw4qx4qfBa -Air7vVKRzJdqM8T+Z1zPcDCjwtGqEj1LYYxzLVZB0wyygS93jaZJXJsR16ltkvI9zS2G+X7q -hXtY9RGnYrVmFppVELGfTiC85GgJaQsTbSy6HtG2m7TW6OW++0TUqxF1+Wq5HxCKa0mmNsv5 -sQRimEQdmqsKy4pXXpF5eu9Ypw0MIs3hgsC77hK56SaRiy4SufHGQaKqQNOT0EZpmL/LwgJj -/OwH2vCLQqVF/ithqg6YyYhCFhzOkihLZQYeBBPjePnlQXvx4osiVd6XyWNIIeK3GktkCUor -5Z58hvhJx7QsN1DOmnpUmzpPOkk6zjxzcI0aZQODm40hysCkpnWDXQSGcxarU9F1yy3SpMwp -uYu1WBN6Wll6k1IZQi3FGOIfVfRrmdGmI8aHgUq9XzAkLXkYYwj3ZaRlrec99JDI669Lh2r+ -2ptvllaFuSa1F0i5tTUhPJiCLCWMJvXqOu+/XxaqS11ykqs3N4J1KocxRtywlqYEh7MxhqSk -DdLiDiTXN5IGR2B6kr1DmrEPaBcCFjY3xBhitsB3HLZam2r5AoW3RbjN5WRlmK6HfllrKyAS -NuaDDz4YZEiH4uBGNWqkDNqIJPXmnEAQhC2pJnmoohFnSASfK9UPcHHbA4fA92qQ6FBbfA/J -IM8CO8s1mRTHDiNUFm+P82KayP0RpjTmWqYXzcSxKvXfcYd0qoHqHT/+P6KpdPuZUCtLYkzb -b79dZO+9RfbbT+Sgg1IfRLPzMGZo6qIabYtF4rECEi2iSZtwwlQ6i0/zJEGHPq1TbI60DKFp -aAXzYh6VNCHJXeb5YW6w1H/KKbJe8znrwUWPeJZ6MO2AITCmVyNNOeww6bz7bpFLLxWpgJFq -hQfdwxqcBD81kSW1XY2B3yqO0XjEQbjCknWxI5CmCWjZSkWPFoSO9aXAe8xBghl+flC9FPe8 -0pY99pC+gw+WdWqcutQt3aD2ZIDJRIwauRYJIk1Rn9rZoQbVRCAAcAMBlpYzzkgch9kAFkbK -A6LHOmesySApaAuHNU2sUo2DUGEmAChqVQ3ZCo4TMuFh0Q/tDOdp9ygN7LqrDOy8s/Qecoh0 -PPyw9Lz77mBWMsLxoQd7+y6ETClxRo4CTZ4BnmPArboX2hezHVYuAEpgHjACw/hJfBDLh6Vp -JPcA/7mWn0g5gmGFJZcUjNjILEFqTOOHGCLHHOMgSPbaS/r331/k+utFnn1WYi7iXCX8OvUu -tBBQvfdVhedGU/S7KihogDVhh/AE5icFjGGDA9qSlKMLAzkgmzqLNVbAEGxU1GHhSMhG+M+L -NefpQ8oM4SZkX9XT6j/tNOk98EDp08ykgwI1wlI2lBiwH7QuAF7OV4m1znQyo1nbf3wjX03K -hHlY/Z5nI2kGL3R9JG0PYGeY37uFtiXZpViPFx4bn8Ms0v4uVkliSMoWBaCVdSQFtXigpWE3 -w4MaM0ZaNBtLqqBJ09s/33vvYApAiy2S4C0QObdmqGsMe1bOgpeUB1uy/ZSIQRVEiy0UybR8 -FUw0J8UkPTS+MQ/NuhvRUIiKNtoexmFHhS102EBc4PaUnF5pq5t6xXc3EZKCeBFquNeNG+cY -FXosxCrgO0daul5M1cs1hrzDenn9mrW5lNbiYxiP0eQ7rsFexILcWOOaf++wSsn6/DwX2eEh -W5Jj11daSuU/hpBmiPj2psIuq1kuypgkMnkklJYZPgMbSS8DK43cEQURrfMF6PGFACLDHF+L -MP4Gq2gSAgVhOYfrsT22Jr6DidhMV2Mv74/hM7yrLLumqravaitLlUL6WHukcdja+C1qZmGk -qFlotTue6jloQkBgOLB1abBqDDTbYvksCyiBmawlCRKLEFdy9jrjrZbSMBvcXFkurPgeDxPF -jfO9kdBIZt0t1ciBUKAddIzE0ikxtzTs2TLBzKoZ4hv8KVPyMUSdpkSGuC1fCkXYDgIkI37Y -HpQ2MIAY0SRcbuTw38FiwpLUqwyxgWYMLhruxyhpeB8lKvBoDAlaUStei5eVyhA25tAdUu7M -Y2F5GBLaIohUz4aJLBpC/IINSCtWQfRZXv6uvDfx32pfv+GaF3ImUYeMevSGugCCwAXlypYZ -Rgxhlj0OWWKKeuzHyDIw0jQzp/Usx+yDtY2OtGaXkopLzWiGJ1VzqqhjVBoj0QUJZPruOB5g -aNuwlzHir2lQOig3Q9wkFUd9nzvNINbivmaGAerzQWkg6zAGoJVoSugBEhDaXnw/A9tUJezk -CnaD0kSq29tFlFuGFhZlMIP3ZZ5LtSPvqzfwQKpNu4SMJ1bx80l+zOQzq5EvKnNrooMlSEym -MoT2ltUvvzzol9PKo1jcUo49WFBeD8RGNdhMet9N3HslRtaRlD1AMxAMUj/8TQIRYcMJaC03 -W9cqSJk1pJx2KWW6iBKl1kvkrLNkgPqHN1GIm9etjdUsGjVicwsrfLi5MIeMAw5AUvKP6L3W -bpwojb3XO1VmiBpe155/7LGuZNupqfr+MgS4zpJywq7WLpWKQqFSnCWBl8Uwh9kHa6AAurAb -li7yr2WNMAobk5YcxPbG8oI1G/WhBxghzjtPBnbfXfr1kCuvdDURH/vS3MpQynIzhA6W//3v -v4XmKOniHZLawSmxQpdtd+O1TD7sWqxCoOjDnN8hWcm5cZ39Ns9IKr92hlia+YILRHbZRWSn -nWTguOPElW51sc26CCQp65aFvB2RrgWV+j1lYvqBczZLxLK8/jsj/Y4amBN7e4Vf78niqjM/ -J7BVpI5KmSX08stFtP4OQ/oOPVTa1Kb0KEzZBLNqSF774dLbNFbAELrmYUjO+MC3I2QLwvKB -eY9oBfNLq783MtubmSGOMOy8vfBC2XLEEbJFy71ywgnSpUxZ+9Zbw97dG0u7I3H2KsHccGU1 -FLVjQtdHFbjs24LQS0KQTCNMWMKo3dbUaDc4F0OG4OuBB6T7yCNFzj13cDdQeUGW4wpd4ZF4 -v28Wp8B+x6XFvcUW2DZni7OonceaAm0X8ki8Xiq7hqiH0T9hggw89ph0RbYBAAMEVfw013Ak -3uqQB7aswzFmmBGcjxUeR3uepax+MhjeNXastF91lYi32zV0H32MrffexFqGbRQNIQuhMQa1 -12H/ysgwhBD/6qul79RTZSNtQpH0BVGt5YpiOLwtjFgVk3ni1m4LFc7sDGEj/fHHy8ABB0jP -+efT+hGFLPudIk+jvZF6pmy2JU3OxpCpU0U09ujfd1/pPeqo6OQpXlnEXo03NRIDL4o4iMqg -/cuNkXilVP0Z8v770j1mjHTDlEhXo41tAYO391HK6u7S77sopRaBFzMar1XdngY7jiu9EyCz -22tv/4kZ8x2ekNYMV6NdHMpxpWzgycwQDF/YKBBrmdkhGWKErBEB6NiUSCd+VQyh6cxvRMaL -Ksr/hnJx2AitNRNDrB3GEol5srsNIdAoN+CNOkPMdvi16Vr+R0hNzJg2rera+g7DkN81Idfm -xRYj2eyWiOcco9A3NeoMAR46NcXOdul+9ahiXhXph2obHoaeQ6dkhk5BYYMQzJg8WbJg/47H -EK0hb37vPVmoWd7NWtMgRRKmqDHwtUS8rvp44okiJ59cNygaclW3My3KFhhqOp13EGLcsSfY -D/+fodREOHb2ap5Mdt118NAiWD2MNp3njiGj+M8CGsaQhtoEtOuss0R2201kzz1FrrhicO+a -CoHz2zm2ofc97vAMcUyZPVtk3LjBVx6VK4/uzUG8/ohj/PjiM2TUmUSniTHkhhuKz5BRZwhG -+bLLBl/fsQ2UVgvPEMcUms5GYfdV8RlS/FF8hhSfIcUfxWdI8RlS/FF8hhSfIcUfxWdI8RlS -/FF8hhR/DI7/A78vETYkWF5GAAAAAElFTkSuQmCC' -] - -{ #category : #accessing } -RTMapLocationExample >> label [ - ^ 'Map location' -] diff --git a/src/Roassal2/RTMarkerOnX.class.st b/src/Roassal2/RTMarkerOnX.class.st deleted file mode 100644 index f4fe32496..000000000 --- a/src/Roassal2/RTMarkerOnX.class.st +++ /dev/null @@ -1,70 +0,0 @@ -" -=-=-=-=- -| b ds | -b := RTGrapher new. - -ds := RTData new. -ds connectColor: Color blue. -ds points: #(3 4 5 6 7). -ds x: #yourself. -ds y: #yourself. - -b add: ds. -b addDecorator: (RTMarkerOnX new value: 5). -b addDecorator: (RTMarkerOnX new value: 6). -b -=-=-=-=- -" -Class { - #name : #RTMarkerOnX, - #superclass : #RTAbstractGrapherDecorator, - #instVars : [ - 'value', - 'markerColor' - ], - #category : #'Roassal2-Builder-Grapher-Decorators' -} - -{ #category : #hooks } -RTMarkerOnX >> initialize [ - super initialize. - self markerColor: Color red -] - -{ #category : #accessing } -RTMarkerOnX >> markerColor [ - ^ markerColor -] - -{ #category : #accessing } -RTMarkerOnX >> markerColor: aColor [ - markerColor := aColor -] - -{ #category : #hooks } -RTMarkerOnX >> render [ - | fromPosition toPosition e1 e2 l lineShape | - fromPosition := builder getPixelPositionOf: value @ 0. - toPosition := fromPosition - (0 @ 30). - e1 := (RTBox new size: 1) element. - e2 := (RTBox new size: 1) element. - e1 translateTo: fromPosition. - e2 translateTo: toPosition. - - lineShape := RTArrowedLine new. - lineShape head width: 3. - lineShape width: 3. - lineShape color: markerColor. - l := lineShape edgeFrom: e2 to: e1. - builder view add: e1; add: e2; add: l -] - -{ #category : #accessing } -RTMarkerOnX >> value [ - ^ value -] - -{ #category : #accessing } -RTMarkerOnX >> value: aNumber [ - value := aNumber -] diff --git a/src/Roassal2/RTMatrixRing.class.st b/src/Roassal2/RTMatrixRing.class.st deleted file mode 100644 index 05bc7ad05..000000000 --- a/src/Roassal2/RTMatrixRing.class.st +++ /dev/null @@ -1,189 +0,0 @@ -" -I'm a class that models matrix data as concentric rings, with columns and row separations. -Look at exampleRTMatrixRing for details on how to use it. - -" -Class { - #name : #RTMatrixRing, - #superclass : #RTBuilder, - #instVars : [ - 'matrix', - 'elements', - 'innerRadius', - 'externalRadius', - 'rowGap', - 'columnGap', - 'lineShape', - 'rowBlock', - 'columnBlock' - ], - #category : #'Roassal2-Builder-Sunburst' -} - -{ #category : #accessing } -RTMatrixRing >> columnBlock [ - ^ columnBlock -] - -{ #category : #accessing } -RTMatrixRing >> columnBlock: anObject [ - columnBlock := anObject -] - -{ #category : #accessing } -RTMatrixRing >> columnGap [ - ^ columnGap -] - -{ #category : #accessing } -RTMatrixRing >> columnGap: aNumber [ - columnGap := aNumber. - self lineShape width: aNumber. -] - -{ #category : #accessing } -RTMatrixRing >> elements [ - ^ elements -] - -{ #category : #accessing } -RTMatrixRing >> elements: anObject [ - elements := anObject -] - -{ #category : #accessing } -RTMatrixRing >> externalRadius [ - ^ externalRadius -] - -{ #category : #accessing } -RTMatrixRing >> externalRadius: anObject [ - self assert: anObject > self innerRadius. - externalRadius := anObject -] - -{ #category : #initialization } -RTMatrixRing >> initialize [ - super initialize. - self matrix: nil. - self shape arc. - self lineShape: RTLine new. - self innerRadius: 0. - self columnGap: 2. - self rowGap: 2. - self externalRadius: 240. - self columnGap: 0. - self columnBlock: #yourself. - self rowBlock: #yourself. -] - -{ #category : #accessing } -RTMatrixRing >> innerRadius [ - ^ innerRadius -] - -{ #category : #accessing } -RTMatrixRing >> innerRadius: anObject [ - self assert: anObject >= 0. - innerRadius := anObject -] - -{ #category : #accessing } -RTMatrixRing >> lineShape [ - ^ lineShape -] - -{ #category : #accessing } -RTMatrixRing >> lineShape: anObject [ - lineShape := anObject. - self columnGap: 0. -] - -{ #category : #accessing } -RTMatrixRing >> matrix [ - ^ matrix -] - -{ #category : #accessing } -RTMatrixRing >> matrix: anObject [ - matrix := anObject -] - -{ #category : #hooks } -RTMatrixRing >> renderColumnGapsIn: aView [ - | partitions v1 v2 ang boxShape | - self columnGap isZero ifTrue: [ ^ self ]. - self matrix ifNil: [ ^self ]. - boxShape := RTBox new size: 0. - partitions := (columnBlock rtValue: (rowBlock rtValue: self matrix) first) size. - self lineShape color: aView canvas color. - 1 to: partitions do: [ :i | - ang := (360 * i / partitions) degreesToRadians. - v1 := boxShape element. - v2 := boxShape element. - v1 translateTo: (self innerRadius - 4 * ang cos)@(self innerRadius - 4 * ang sin). - v2 translateTo: (self externalRadius * ang cos)@(self externalRadius * ang sin). - aView - add: v1; - add: v2; - add: (self lineShape edgeFrom: v1 to: v2). - self elements add: v1; add: v2. - ] -] - -{ #category : #hooks } -RTMatrixRing >> renderIn: aView [ - self renderMatrixIn: aView. - self renderColumnGapsIn: aView. -] - -{ #category : #hooks } -RTMatrixRing >> renderMatrixIn: aView [ - | el rowSize columnSize betaAngle exRadius alphaAngle inRadius theMatrix theRow | - self matrix ifNil: [^ self ]. - self elements: RTGroup new. - theMatrix := rowBlock rtValue: self matrix. - rowSize := theMatrix size. - theMatrix doWithIndex: [:row :rowIndex | - theRow := columnBlock rtValue: row. - columnSize := theRow size. - betaAngle := 360 / columnSize. - exRadius := (self externalRadius - self innerRadius)/rowSize. - theRow doWithIndex: [:obj :column | - el := self shape elementOn: obj. - el attributes - at: #row put: rowIndex; - at: #column put: column. - alphaAngle := betaAngle * (column - 1). - inRadius := self innerRadius + (exRadius*(rowIndex - 1)). - el trachelShape - alphaAngle: alphaAngle - betaAngle: alphaAngle + betaAngle - innerRadius: inRadius - externalRadius: inRadius + exRadius - self rowGap. - self elements add: el. ] - ]. - self interaction setUpElements: self elements. - aView addAll: self elements. - -] - -{ #category : #accessing } -RTMatrixRing >> rowBlock [ - ^ rowBlock -] - -{ #category : #accessing } -RTMatrixRing >> rowBlock: anObject [ - rowBlock := anObject -] - -{ #category : #accessing } -RTMatrixRing >> rowGap [ - ^ rowGap -] - -{ #category : #accessing } -RTMatrixRing >> rowGap: anObject [ - rowGap := anObject -] diff --git a/src/Roassal2/RTMeanDevVarDecorator.class.st b/src/Roassal2/RTMeanDevVarDecorator.class.st deleted file mode 100644 index 2c4b039c1..000000000 --- a/src/Roassal2/RTMeanDevVarDecorator.class.st +++ /dev/null @@ -1,45 +0,0 @@ -" -=-=-=-=- -| b ds | -b := RTGrapher new. - -ds := RTData new. -ds interaction popup. -ds points: #(600 470 170 430 300). -ds barShape width: 20; color: Color lightGreen. -b add: ds. - -b axisX noLabel; noTick. -b axisY noDecimal. - -b addDecorator: RTMeanDevVarDecorator new. -b -=-=-=-=- -" -Class { - #name : #RTMeanDevVarDecorator, - #superclass : #RTAbstractGrapherDecorator, - #category : #'Roassal2-Builder-Grapher-Decorators' -} - -{ #category : #'as yet unclassified' } -RTMeanDevVarDecorator >> render [ - | values average from to l stdev b | - values := self datasetValues. - average := values average. - - "The variation" - stdev := values stdev. - from := builder getPixelPositionOf: builder minX @ (average - stdev). - to := builder getPixelPositionOf: builder maxX @ (average + stdev). - b := self boxFrom: from to: to. - b @ (RTPopup text: 'stdev = ', stdev asString). - - "The mean" - from := builder getPixelPositionOf: builder minX @ average. - to := builder getPixelPositionOf: builder maxX @ average. - l := self lineFrom: from to: to. - l @ (RTPopup text: 'average = ', average asString). - - -] diff --git a/src/Roassal2/RTMenu.class.st b/src/Roassal2/RTMenu.class.st deleted file mode 100644 index 23e45a872..000000000 --- a/src/Roassal2/RTMenu.class.st +++ /dev/null @@ -1,240 +0,0 @@ -Class { - #name : #RTMenu, - #superclass : #Object, - #instVars : [ - 'view', - 'items', - 'isOpen', - 'color', - 'labelBackground', - 'label', - 'savedLabelBackgroundColor', - 'menuBackgroundColor', - 'menuBackground', - 'highlightColor', - 'isLocked' - ], - #category : #'Roassal2-Builder-Menu' -} - -{ #category : #adding } -RTMenu >> add: menuitem [ - self items add: menuitem. -] - -{ #category : #accessing } -RTMenu >> buttonLabelBackgroundShapeAndColor: aColor [ - | box | - - box := TRBoxShape new extent: label encompassingRectangle extent + (10@7). - self labelBackground: box. - box color: aColor. - self saveLabelBackgroundColor. - box strokePaint: "(Color black)"nil. - TRConstraint move: box onTheCenterOf: label. - - view canvas addFixedShape: box. - box pushBack. -] - -{ #category : #accessing } -RTMenu >> color [ - ^ color -] - -{ #category : #accessing } -RTMenu >> color: aColor [ - color:= aColor -] - -{ #category : #accessing } -RTMenu >> endHighlight [ - self labelBackgroundColor: self savedLabelBackgroundColor. - self label color: Color black. -] - -{ #category : #accessing } -RTMenu >> executeHighlight [ - self labelBackgroundColor: self highlightColor. -] - -{ #category : #accessing } -RTMenu >> executeLockHighlight [ - self labelBackgroundColor: (self highlightColor alpha: ((self highlightColor alpha) + 0.3)). -] - -{ #category : #accessing } -RTMenu >> executeTextHighlight [ - self label color: Color blue. -] - -{ #category : #'hide entries' } -RTMenu >> hideAll [ - view canvas fixedShapes do: [ :s | - - (s element isKindOf: RTMenu) ifTrue: [ s element hideItems ]. ] -] - -{ #category : #'hide entries' } -RTMenu >> hideItems [ - self isOpen ifFalse: [ ^ self ]. - self isOpen: false. - self isLocked: false. - self items do: [:item | - item rawmenu remove]. - menuBackground remove. - self endHighlight. -] - -{ #category : #accessing } -RTMenu >> highlightColor [ - ^ highlightColor -] - -{ #category : #accessing } -RTMenu >> highlightColor: aColor [ - highlightColor := aColor. -] - -{ #category : #initialization } -RTMenu >> initialize [ - super initialize. - color := Color gray darker alpha: 0.3. - view := nil. - isOpen := false. - isLocked := false. - savedLabelBackgroundColor := color. - -] - -{ #category : #accessing } -RTMenu >> isLocked [ - ^ isLocked -] - -{ #category : #accessing } -RTMenu >> isLocked: abool [ - isLocked := abool -] - -{ #category : #accessing } -RTMenu >> isOpen [ - ^ isOpen -] - -{ #category : #accessing } -RTMenu >> isOpen: abool [ - isOpen := abool -] - -{ #category : #accessing } -RTMenu >> items [ - ^ items ifNil: [ items := OrderedCollection new ] -] - -{ #category : #adding } -RTMenu >> label [ - ^ label -] - -{ #category : #adding } -RTMenu >> label: aLabel [ - label := aLabel. -] - -{ #category : #accessing } -RTMenu >> labelBackground [ - ^ labelBackground -] - -{ #category : #accessing } -RTMenu >> labelBackground: aShape [ - labelBackground := aShape -] - -{ #category : #accessing } -RTMenu >> labelBackgroundColor [ - ^ labelBackground color -] - -{ #category : #accessing } -RTMenu >> labelBackgroundColor: aColor [ - labelBackground color: aColor. - -] - -{ #category : #accessing } -RTMenu >> menuBackground [ - ^ menuBackground -] - -{ #category : #accessing } -RTMenu >> menuBackground: aShape [ - menuBackground := aShape -] - -{ #category : #accessing } -RTMenu >> menuBackgroundColor [ - ^ menuBackgroundColor -] - -{ #category : #accessing } -RTMenu >> menuBackgroundColor: aColor [ - menuBackgroundColor := aColor -] - -{ #category : #accessing } -RTMenu >> menuLabelBackgroundShapeAndColor: aColor [ - | box form | - - box := TRBoxShape new extent: label encompassingRectangle extent + (20@7). - self labelBackground: box. - box color: aColor. - self saveLabelBackgroundColor. - box strokePaint: "(Color black)"nil. - TRConstraint move: box onTheCenterOf: label. - form := TRPolygonShape new color: Color black; vertices: (Array with: 0@0 with: 6@0 with: 3@6). - form strokePaint: (Color black). - TRConstraint move: form onTheRightOf: box. - - view canvas addFixedShape: form. - form translateBy: (-12)@(2). - label translateBy: (-5)@(0). - view canvas addFixedShape: box. - form pushBack. - box pushBack. -] - -{ #category : #accessing } -RTMenu >> saveLabelBackgroundColor [ - savedLabelBackgroundColor := self labelBackground color. -] - -{ #category : #accessing } -RTMenu >> savedLabelBackgroundColor [ - ^ savedLabelBackgroundColor. -] - -{ #category : #accessing } -RTMenu >> update [ -|pos1 pos2 maxWidth parentMenu y | - - parentMenu := view canvas fixedShapes select: [ :t | t class == TRLabelShape and: [ t text = label text ] ]. - parentMenu := parentMenu first. - - y := 0. - maxWidth := items ifNotEmpty: [(items collect: [ :item | item rawmenu width]) max] ifEmpty: [0]. - pos1:= parentMenu position + ((((parentMenu width)/2 + 5)negated)@((parentMenu height)/2+3.4)). - items do: [ :item | y := y + (item rawmenu height).]. - pos2:= pos1 + ((maxWidth+20)@(y + 5)). - self menuBackground: (TRBoxShape new from: pos1 to: pos2; color: (self menuBackgroundColor); strokePaint: nil"(Color gray darker alpha: 0.3)"). - - view canvas addFixedShape: (self menuBackground). - (self menuBackground) pushBack. - ^ (self menuBackground). -] - -{ #category : #accessing } -RTMenu >> view: v [ - view := v -] diff --git a/src/Roassal2/RTMenuActivable.class.st b/src/Roassal2/RTMenuActivable.class.st deleted file mode 100644 index d29c9398f..000000000 --- a/src/Roassal2/RTMenuActivable.class.st +++ /dev/null @@ -1,71 +0,0 @@ -" -A RTMenuActivable adds a menu to an element. The menu is activable by right-clicking on the node. - -For example: - -classes := RTObject withAllSubclasses. -v := RTView new. -v @ RTDraggableView. -n := RTMultiLinearColorForIdentity new objects: classes. -shape := RTEllipse new size: #numberOfMethods; color: n. -es := shape elementsOn: classes. -es @ (RTMenuActivable new action: #inspect; item: 'browse class' action: [ :e | e model browse ]). -v addAll: es. -RTFlowLayout on: es. -v - -" -Class { - #name : #RTMenuActivable, - #superclass : #RTInteraction, - #instVars : [ - 'actions' - ], - #category : #'Roassal2-Interactions' -} - -{ #category : #public } -RTMenuActivable class >> action: anAction [ - - ^ self item: anAction asString action: anAction -] - -{ #category : #public } -RTMenuActivable class >> item: title action: action [ - ^ self new item: title action: action -] - -{ #category : #public } -RTMenuActivable >> action: aSymbol [ - ^ self item: aSymbol asString action: aSymbol -] - -{ #category : #initialization } -RTMenuActivable >> initialize [ - super initialize. - actions := OrderedCollection new. - -] - -{ #category : #hooks } -RTMenuActivable >> initializeElement: element [ - - | menuActivable | - (element hasInteraction: self class) ifFalse: [ ^ self initializeFirstTimeElement: element ]. - - menuActivable := element getInteractionForClass: self class. - actions do: [ :assoc | - menuActivable item: assoc key action: assoc value ] -] - -{ #category : #hooks } -RTMenuActivable >> initializeFirstTimeElement: element [ - element when: TRMouseRightClick do: [ :event | - TRUtil instance widgetFactory menuForAssociations: actions on: element - ] -] - -{ #category : #public } -RTMenuActivable >> item: titleAsString action: aBlockOrSymbol [ - actions add: (titleAsString -> aBlockOrSymbol) -] diff --git a/src/Roassal2/RTMenuActivableTest.class.st b/src/Roassal2/RTMenuActivableTest.class.st deleted file mode 100644 index f02bb3cf9..000000000 --- a/src/Roassal2/RTMenuActivableTest.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #RTMenuActivableTest, - #superclass : #RTTest, - #category : #'Roassal2-Core-Tests' -} - -{ #category : #tests } -RTMenuActivableTest >> testHasInteraction [ - - | e | - e := RTElement new. - self deny: (e hasInteraction: RTMenuActivable). - e @ RTMenuActivable. - self assert: (e hasInteraction: RTMenuActivable). -] diff --git a/src/Roassal2/RTMenuBuilder.class.st b/src/Roassal2/RTMenuBuilder.class.st deleted file mode 100644 index 7b1b7a165..000000000 --- a/src/Roassal2/RTMenuBuilder.class.st +++ /dev/null @@ -1,365 +0,0 @@ -" -A RTMenuBuilder create menus, submenus, buttons in a view. -Titles, callback, colors and callback can be defined. - -Instance Variables - parentMenus: - -parentMenus - - xxxxx - -" -Class { - #name : #RTMenuBuilder, - #superclass : #RTBuilder, - #instVars : [ - 'parentMenus', - 'closingSubmenuFlag' - ], - #category : #'Roassal2-Builder-Menu' -} - -{ #category : #public } -RTMenuBuilder class >> setGraphMenuOn: view [ - | builder | - builder := self new view: view. - builder - menu: 'Find' - background: Color blue - callback: [ | element | - element := TRPlatform current - dialogChooseFrom: (view elements collect: #model) - values: view elements. - element notNil - ifTrue: [ - view canvas camera translateTo: element position. - RTBlink on: element ] ]. -] - -{ #category : #hooks } -RTMenuBuilder >> addParentMenu: aRTMenu [ - parentMenus add: aRTMenu. -] - -{ #category : #signalling } -RTMenuBuilder >> configureViewEvents [ - view when: TRMouseClick do: [ :evt | | anim | - anim := RTNopAnimation new - waitFor: 0.1 after: [ - closingSubmenuFlag ifTrue: [ - parentMenus ifNotEmpty: [parentMenus first hideAll]. - view signalUpdate. - ] - ]. - view addAnimation: anim. - view signalUpdate]. - view when: TRMouseEnter do: [ :evt | closingSubmenuFlag := true]. - - view when: TRMouseLeave do: [ :evt | closingSubmenuFlag := false]. -] - -{ #category : #utility } -RTMenuBuilder >> createParentMenu: aTitle [ - - ^ self createParentMenu: aTitle background: (Color gray darker alpha: 0). -] - -{ #category : #utility } -RTMenuBuilder >> createParentMenu: aTitle background: aColor [ - - ^ self createParentMenu: aTitle background: aColor highlightColor: (aColor alpha: (aColor alpha + 0.2)). -] - -{ #category : #utility } -RTMenuBuilder >> createParentMenu: aTitle background: aColor highlightColor: aColor2 [ - | lbl index menu | - - index := view canvas fixedShapes - inject: 0 into: [ :s :e | s max: (e encompassingRectangle topRight x + 10) ]. - - lbl := TRLabelShape new text: aTitle; translateLeftTo: (index +20) @ 20. - lbl color: Color black. - view canvas addFixedShape: lbl. - - menu := RTMenu new view: view; label: lbl; menuLabelBackgroundShapeAndColor: aColor; menuBackgroundColor: aColor; highlightColor: aColor2. - self addParentMenu: menu. - lbl element: (menu). - - lbl element labelBackground when: TRMouseEnter do: [ :event | self enterSubmenuOf: lbl]. - lbl element labelBackground when: TRMouseClick do: [ :e | self showSubmenuOf: lbl]. - - lbl element labelBackground when: TRMouseLeave do: [ :e | - | anim | - lbl element isLocked ifFalse: [ - anim := RTNopAnimation new - waitFor: 0.1 after: [ - closingSubmenuFlag ifTrue: [ - lbl element hideItems. - lbl element endHighlight - ] - ]. - view addAnimation: anim. - self signalUpdate. - ] - ]. - - ^ lbl -] - -{ #category : #utility } -RTMenuBuilder >> createParentMenu: aTitle highlight: aColor [ - - ^ self createParentMenu: aTitle background: (Color gray darker alpha: 0) highlightColor: aColor. -] - -{ #category : #hooks } -RTMenuBuilder >> createView [ - ^ RTView new. -] - -{ #category : #utility } -RTMenuBuilder >> enterSubmenuOf: lbl [ - | menu labels| - - menu := lbl element. - - "We mark the submenu as open" - (menu isLocked) ifTrue: [ ^ self signalUpdate]. - menu hideAll. - menu isLocked: false. - menu isOpen: true. - - menu executeHighlight. - - labels := menu items collect: [ :item | | m | - m := nil. - m := self menu: item label - background: Color transparent - highlightColor: Color transparent - callback: [ - item execute: m. - menu isLocked ifFalse: [ menu hideAll ] ]. - item menu: m. - m ]. - - labels doWithIndex: [ :l :i | | p | - p := ((lbl position x) + (l width/2) - (lbl width/2) + 5)@(lbl position y + (l height*i) +3.5). - l translateTo: p. - ]. - - menu update. - self signalUpdate. - - lbl element menuBackground when: TRMouseEnter do: [ :e | - closingSubmenuFlag := false. - self signalUpdate]. - - lbl element menuBackground when: TRMouseLeave do: [ :e | - | anim | - closingSubmenuFlag := true. - anim := RTNopAnimation new - waitFor: 0.1 after: [ - lbl element isLocked ifFalse: [ - closingSubmenuFlag ifTrue: [ - lbl element hideItems. - lbl element endHighlight. - ] - ] - ]. - view addAnimation: anim. - self signalUpdate - ]. -] - -{ #category : #hooks } -RTMenuBuilder >> initialize [ - - closingSubmenuFlag := false. - super initialize. - parentMenus := OrderedCollection new. - -] - -{ #category : #utility } -RTMenuBuilder >> leaveSubmenuOf: lbl [ - | menu | - menu := lbl element. - menu hideItems. - menu labelBackgroundColor: (menu savedLabelBackgroundColor). - self signalUpdate. -] - -{ #category : #public } -RTMenuBuilder >> menu: aTitle background: aColor callback: callback [ - "Return a trachel shape, in which the callback has been set up" - ^ self menu: aTitle background: aColor highlightColor: (aColor alpha: (aColor alpha + 0.2)) callback: callback. -] - -{ #category : #public } -RTMenuBuilder >> menu: aTitle background: aColor highlightColor: aColor2 callback: callback [ - "Return a trachel shape, in which the callback has been set up" - | lbl index | - - self configureViewEvents. - - index := view canvas fixedShapes - inject: 0 into: [ :s :e | s max: (e encompassingRectangle topRight x + 10) ]. - lbl := TRLabelShape new text: aTitle; translateLeftTo: (index +20) @ 20. - lbl color: Color black. - view canvas addFixedShape: lbl. - lbl element: (RTMenu new view: view; label: lbl; menuBackgroundColor: aColor; buttonLabelBackgroundShapeAndColor: aColor; highlightColor: aColor2 ). - - lbl when: TRMouseClick do: [ :event | lbl element hideAll. callback value. ]. - lbl when: TRMouseEnter do: [ :event | closingSubmenuFlag := false. lbl element executeHighlight; executeTextHighlight. self signalUpdate. ]. - lbl when: TRMouseLeave do: [ :event | lbl element endHighlight. self signalUpdate. ]. - - ^ lbl -] - -{ #category : #public } -RTMenuBuilder >> menu: aTitle callback: callback [ - "Return a trachel shape, in which the callback has been set up" - "callback is a zero-arg block, without argument therefore" - ^ self menu: aTitle background: (Color gray darker alpha: 0) callback: callback. -] - -{ #category : #public } -RTMenuBuilder >> menu: aTitle highlight: aColor callback: callback [ - "Return a trachel shape, in which the callback has been set up" - "callback is a zero-arg block, without argument therefore" - ^ self menu: aTitle background: (Color gray darker alpha: 0) highlightColor: aColor callback: callback. -] - -{ #category : #public } -RTMenuBuilder >> menu: aTitle subcheckmenu: menuname background: color callback: callback [ - | checkmenu | - checkmenu := nil. - checkmenu := self - menu: aTitle - submenu: menuname - background: color - callback: [ - checkmenu selected: checkmenu selected not. - callback value: checkmenu]. - checkmenu after: [ :menu | - menu text: checkmenu label. - self signalUpdate]. - ^ checkmenu. -] - -{ #category : #public } -RTMenuBuilder >> menu: aTitle subcheckmenu: menuname callback: callback [ - | checkmenu | - checkmenu := nil. - checkmenu := self - menu: aTitle - submenu: menuname - callback: [ - checkmenu selected: checkmenu selected not. - callback value: checkmenu]. - checkmenu after: [ :menu | - menu text: checkmenu label. - self signalUpdate]. - ^ checkmenu. -] - -{ #category : #public } -RTMenuBuilder >> menu: aTitle subcheckmenus: menus background: color [ - "format for menus - {'Title'->[:m | do something ]}" - ^ menus collect: [ :m | - self menu: aTitle subcheckmenu: m key background: color callback: m value. - ]. -] - -{ #category : #public } -RTMenuBuilder >> menu: aTitle submenu: aSubMenuName background: aColor callback: callback [ - | parentMenu menuItem | - - parentMenu := (self parentMenus) detect: [ :m | m label text = aTitle] ifFound: [:m | m label] ifNone: [parentMenu := self createParentMenu: aTitle background: aColor]. - - menuItem := RTMenuItem new name: aSubMenuName; callback: callback; color: aColor. - parentMenu element add: menuItem. - ^ menuItem. -] - -{ #category : #public } -RTMenuBuilder >> menu: aTitle submenu: aSubMenuName background: aColor highlightColor: aColor2 callback: callback [ - | parentMenu menuItem | - - parentMenu := (self parentMenus) detect: [ :m | m label text = aTitle] ifFound: [:m | m label] ifNone: [parentMenu := self createParentMenu: aTitle background: aColor highlightColor: aColor2]. - - menuItem := RTMenuItem new name: aSubMenuName; callback: callback; color: aColor. - parentMenu element add: menuItem. - ^ menuItem. -] - -{ #category : #public } -RTMenuBuilder >> menu: aTitle submenu: aSubMenuName callback: callback [ - | parentMenu menuItem | - - parentMenu := (self parentMenus) detect: [ :m | m label text = aTitle] ifFound: [:m | m label] ifNone: [parentMenu := self createParentMenu: aTitle]. - - menuItem := RTMenuItem new name: aSubMenuName; callback: callback. - parentMenu element add: menuItem. - ^ menuItem. -] - -{ #category : #public } -RTMenuBuilder >> menu: aTitle submenus: menus background: aColor [ - ^ menus collect: [ :m | - self menu: aTitle submenu: m key background: aColor callback: m value]. -] - -{ #category : #hooks } -RTMenuBuilder >> parentMenus [ - ^ parentMenus -] - -{ #category : #utility } -RTMenuBuilder >> showSubmenuOf: lbl [ - | menu labels | - menu := lbl element. - - "Check if submenu is locked" - menu isLocked - ifTrue: [ - menu hideItems. - menu endHighlight. - self signalUpdate. - ^ self]. - - "We mark the submenu as locked" - menu isLocked: true. - menu executeLockHighlight. - menu isOpen - ifFalse: [ - - "We mark the submenu as open" - menu hideAll. - menu isOpen: true. - - menu executeLockHighlight. - - labels := menu items collect: [ :item | | m | - m := nil. - m := self menu: item label background: (Color white alpha:0) callback: [item execute: m]. - item menu: m. - m - ]. - - labels doWithIndex: [ :l :i | | p | - p := ((lbl position x) + (l width/2) - (lbl width/2) + 5)@(lbl position y + (l height*i) +3.5). - l translateTo: p. - ]. - menu update. - ]. - - self signalUpdate. - -] - -{ #category : #signalling } -RTMenuBuilder >> signalUpdate [ - view canvas signalUpdate -] diff --git a/src/Roassal2/RTMenuBuilderExamples.class.st b/src/Roassal2/RTMenuBuilderExamples.class.st deleted file mode 100644 index 070564921..000000000 --- a/src/Roassal2/RTMenuBuilderExamples.class.st +++ /dev/null @@ -1,221 +0,0 @@ -Class { - #name : #RTMenuBuilderExamples, - #superclass : #RTBuilder, - #category : #'Roassal2-Builder-Menu' -} - -{ #category : #examples } -RTMenuBuilderExamples >> example01 [ - - " - self new example01 - " - | v b | - v := RTView new. - - b := RTMenuBuilder new view: v. - b menu: 'add values' background: Color red callback: [ - | es | - es := (RTLabel new color: [ :tt| Color random ]) elementsOn: (1 to: 10). - es do: [ :e | e translateTo: ((500 atRandom @ 500 atRandom) - (250 @ 250)) ]. - v addAll: es. - v canvas signalUpdate ]. - - b menu: 'remove odd' callback: [ (v elements select: [ :e | e model odd ]) do: #remove. v canvas signalUpdate ]. - b menu: 'remove even' callback: [ (v elements select: [ :e | e model even ]) do: #remove. v canvas signalUpdate ]. - - b menu: 'shuffle' callback: [ - | tra | - tra := RTSmoothLayoutTranslator new. - tra nbCycles: 0.5. - (v elements do: [ :e | tra translate: e to: ((500 atRandom @ 500 atRandom) - (250 @ 250)) ]) ]. - - ^ v -] - -{ #category : #examples } -RTMenuBuilderExamples >> example02 [ - - " - self new example02 - " - | v b | - v := RTView new. - - b := RTMenuBuilder new view: v. - b menu: 'add' submenu: '10' background: (Color red alpha:0.3) callback: [ - | es | - es := (RTLabel new color: [ :tt| Color random ]) elementsOn: (1 to: 10). - es do: [ :e | e translateTo: ((500 atRandom @ 500 atRandom) - (250 @ 250)) ]. - v addAll: es. - v canvas signalUpdate ]. - - b menu: 'add' submenu: '20' background: (Color red alpha:0.3) callback: [ - | es | - es := (RTLabel new color: [ :tt| Color random ]) elementsOn: (1 to: 20). - es do: [ :e | e translateTo: ((500 atRandom @ 500 atRandom) - (250 @ 250)) ]. - v addAll: es. - v canvas signalUpdate ]. - - - b menu: 'remove' submenu: 'odd' background: (Color red alpha:0.3) callback: [ (v elements select: [ :e | e model odd ]) do: #remove. v canvas signalUpdate ]. - b menu: 'remove' submenu: 'even' background: (Color red alpha:0.3) callback: [ (v elements select: [ :e | e model even ]) do: #remove. v canvas signalUpdate ]. - - b menu: 'shuffle' callback: [ - | tra | - tra := RTSmoothLayoutTranslator new. - tra nbCycles: 0.5. - (v elements do: [ :e | tra translate: e to: ((500 atRandom @ 500 atRandom) - (250 @ 250)) ]) ]. - - ^ v -] - -{ #category : #examples } -RTMenuBuilderExamples >> example03 [ - - - " - self new example03 - " - | v b menus withBorder withText shape | - v := RTView new. - withBorder := false. - withText := false. - shape := false. - - b := RTMenuBuilder new view: v. - menus := Array with: - 'with border'->[:m | withBorder := m selected ] with: - 'with text'->[:m | withText := m selected] with: - 'ellipse'->[:m | shape := m selected]. - - b menu: 'add element' callback: [ - | e t s | - t := withText ifTrue:['Demo'] ifFalse: [ '...' ]. - e := RTLabel elementOn: t. - - v add: e. - RTVerticalLineLayout on: v elements. - s := (shape ifTrue: [TREllipseShape] ifFalse: [TRBoxShape]) - new extent: e encompassingRectangle extent. - s color: Color green. - s strokePaint: (withBorder ifTrue: [Color black] ifFalse: [nil]). - TRConstraint move: s onTheCenterOf: e. - v canvas addShape: s. - s pushBack. - v canvas signalUpdate ]. - menus := b menu: 'options' subcheckmenus: menus background: Color red. - ^ v -] - -{ #category : #examples } -RTMenuBuilderExamples >> example04 [ - - " - self new example04 - " - | v b menus withBorder withBackground text shape | - v := RTView new. - withBorder := false. - withBackground := true. - text := 'test'. - shape := TREllipseShape. - b := RTMenuBuilder new view: v. - - b menu: 'add element' callback: [ - | e s | - - e := RTLabel elementOn: text. - v add: e. - RTVerticalLineLayout on: v elements. - s := shape new extent: e encompassingRectangle extent. - s color: (withBackground ifTrue: [Color green] ifFalse: [Color transparent]). - s strokePaint: (withBorder ifTrue: [Color black] ifFalse: [nil]). - TRConstraint move: s onTheCenterOf: e. - v canvas addShape: s. - s pushBack. - v canvas signalUpdate ]. - b menu: 'Text' callback: [ text := text,'test'. ]. - - - menus := Array with: - ('Ellipse'->[:m | shape := TREllipseShape ]) with: - ('Box'->[:m | shape := TRBoxShape]). - - menus := b menu: 'Shape' subcheckmenus: menus background: Color red. - RTMenuGroup on: menus. - menus first selected: true. - - menus := Array with: - ('with background'->[:m | withBackground := m selected]) with: - ('with border'->[:m | withBorder := m selected]) . - menus := b menu: 'opions' subcheckmenus: menus background: Color green. - menus first selected: true. - ^ v -] - -{ #category : #examples } -RTMenuBuilderExamples >> example05 [ - - " - self new example05 - " - | v | - v := RTView new. - - RTMenuBuilder new - view: v; - menu: 'add' submenu: 'circle' background: Color red - callback: [ v add: (RTEllipse new size: 40) element @ RTDraggable. v signalUpdate ]; - menu: 'add' submenu: 'box' background: Color blue - callback: [ v add: (RTBox new size: 40) element @ RTDraggable. v signalUpdate ]; - menu: 'add2' submenu: 'circle' background: Color red - callback: [ v add: (RTEllipse new size: 40) element @ RTDraggable. v signalUpdate ]; - menu: 'add2' submenu: 'box' background: Color blue - callback: [ v add: (RTBox new size: 40) element @ RTDraggable. v signalUpdate ]; - - menu: 'add3' submenu: 'circle' background: Color red - callback: [ v add: (RTEllipse new size: 40) element @ RTDraggable. v signalUpdate ]; - menu: 'add3' submenu: 'box' background: Color blue - callback: [ v add: (RTBox new size: 40) element @ RTDraggable. v signalUpdate ]; - build. - ^ v - -] - -{ #category : #examples } -RTMenuBuilderExamples >> example06 [ - - " - self new example06 - " - | v b | - v := RTView new. - - b := RTMenuBuilder new view: v. - b menu: 'add' submenu: '10' callback: [ - | es | - es := (RTLabel new color: [ :tt| Color random ]) elementsOn: (1 to: 10). - es do: [ :e | e translateTo: ((500 atRandom @ 500 atRandom) - (250 @ 250)) ]. - v addAll: es. - v canvas signalUpdate ]. - - b menu: 'add' submenu: '20' callback: [ - | es | - es := (RTLabel new color: [ :tt| Color random ]) elementsOn: (1 to: 20). - es do: [ :e | e translateTo: ((500 atRandom @ 500 atRandom) - (250 @ 250)) ]. - v addAll: es. - v canvas signalUpdate ]. - - - b menu: 'remove' submenu: 'odd' background: (Color blue alpha:0.3) callback: [ (v elements select: [ :e | e model odd ]) do: #remove. v canvas signalUpdate ]. - b menu: 'remove' submenu: 'even' background: Color red callback: [ (v elements select: [ :e | e model even ]) do: #remove. v canvas signalUpdate ]. - - b menu: 'shuffle' highlight: Color lightBlue callback: [ - | tra | - tra := RTSmoothLayoutTranslator new. - tra nbCycles: 0.5. - (v elements do: [ :e | tra translate: e to: ((500 atRandom @ 500 atRandom) - (250 @ 250)) ]) ]. - - ^ v -] diff --git a/src/Roassal2/RTMenuGroup.class.st b/src/Roassal2/RTMenuGroup.class.st deleted file mode 100644 index cfd12ffdd..000000000 --- a/src/Roassal2/RTMenuGroup.class.st +++ /dev/null @@ -1,45 +0,0 @@ -" -I am a component to manage the selected/unselected state for the menu items. instance guarantees that only one menu item can be selected at a time. - -Initially all butons managed by Button group instance are unselected - -" -Class { - #name : #RTMenuGroup, - #superclass : #Object, - #instVars : [ - 'items' - ], - #category : #'Roassal2-Builder-Menu' -} - -{ #category : #public } -RTMenuGroup class >> on: menuitems [ - ^ self new addAll: menuitems. -] - -{ #category : #accessing } -RTMenuGroup >> add: menuitem [ - | after | - items add: menuitem. - - after := menuitem after. - menuitem after: [ :m | - items do: [:item | item selected: false. - item rawmenu ifNotNil: [item rawmenu text: item label. - item rawmenu signalUpdate] ]. - menuitem selected: true. - after ifNotNil: [ after value: m ]. ]. -] - -{ #category : #accessing } -RTMenuGroup >> addAll: menuitems [ - menuitems do: [ :m | self add: m ]. -] - -{ #category : #initialization } -RTMenuGroup >> initialize [ - super initialize. - items := OrderedCollection new: 2. - -] diff --git a/src/Roassal2/RTMenuItem.class.st b/src/Roassal2/RTMenuItem.class.st deleted file mode 100644 index c8491fad1..000000000 --- a/src/Roassal2/RTMenuItem.class.st +++ /dev/null @@ -1,119 +0,0 @@ -Class { - #name : #RTMenuItem, - #superclass : #RTObject, - #instVars : [ - 'name', - 'callback', - 'selected', - 'after', - 'rawmenu', - 'color', - 'background' - ], - #category : #'Roassal2-Builder-Menu' -} - -{ #category : #accesing } -RTMenuItem >> after [ - ^ after -] - -{ #category : #accesing } -RTMenuItem >> after: ablock [ - after := ablock -] - -{ #category : #accesing } -RTMenuItem >> callback [ - ^ callback - -] - -{ #category : #accesing } -RTMenuItem >> callback: ablock [ - callback := ablock - -] - -{ #category : #accesing } -RTMenuItem >> color [ - ^ color -] - -{ #category : #accesing } -RTMenuItem >> color: aColor [ - color := aColor -] - -{ #category : #public } -RTMenuItem >> execute: m [ - self callback value. - self after ifNotNil: [self after value: m.] -] - -{ #category : #'initialize-release' } -RTMenuItem >> initialize [ - super initialize. - selected := false. - name := ''. - callback := [ ]. - after := nil. -] - -{ #category : #accesing } -RTMenuItem >> label [ - ^ (self selected ifTrue:['* '] ifFalse:['']), self name. -] - -{ #category : #accesing } -RTMenuItem >> menu: menu [ - rawmenu := menu. -] - -{ #category : #accesing } -RTMenuItem >> menuBackground [ - ^ background -] - -{ #category : #accesing } -RTMenuItem >> menuBackground: aShape [ - - background := aShape -] - -{ #category : #accesing } -RTMenuItem >> name [ - ^ name -] - -{ #category : #accesing } -RTMenuItem >> name: aString [ - name := aString. -] - -{ #category : #accesing } -RTMenuItem >> rawmenu [ - ^ rawmenu -] - -{ #category : #accesing } -RTMenuItem >> selected [ - ^ selected -] - -{ #category : #accesing } -RTMenuItem >> selected: abool [ - selected := abool -] - -{ #category : #public } -RTMenuItem >> update [ - | width pos ext| - width := self menuBackground width. - ext := self rawmenu encompassingRectangle extent. - pos := self menuBackground position + (( (ext x - width)/2 )@0). - - self menuBackground extent: ext. - self menuBackground translateTo: pos. - self rawmenu translateTo: pos. -] diff --git a/src/Roassal2/RTMethodAgeTest.class.st b/src/Roassal2/RTMethodAgeTest.class.st deleted file mode 100644 index 7e84ce7f9..000000000 --- a/src/Roassal2/RTMethodAgeTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #RTMethodAgeTest, - #superclass : #RTTest, - #category : #'Roassal2-MorphSpecific' -} - -{ #category : #tests } -RTMethodAgeTest >> testMethodAge [ - self assert: RTAbstractElementShape computeYoungestMethod notNil -] diff --git a/src/Roassal2/RTMetricMap.class.st b/src/Roassal2/RTMetricMap.class.st deleted file mode 100644 index 25c6b9c51..000000000 --- a/src/Roassal2/RTMetricMap.class.st +++ /dev/null @@ -1,793 +0,0 @@ -" -A RTMapBuilder2 is specialized to display metrics -" -Class { - #name : #RTMetricMap, - #superclass : #RTBuilder, - #instVars : [ - 'countryData', - 'countryName', - 'pointShapeBuilder' - ], - #category : #'Roassal2-Builder-Map' -} - -{ #category : #public } -RTMetricMap >> africanCountries [ - ^ self countries: RTSVGPath africa color: Color white - -] - -{ #category : #public } -RTMetricMap >> allCountriesColor: aColor [ - ^ self countries: RTSVGPath countries color: aColor - -] - -{ #category : #utility } -RTMetricMap >> convertIntoSVGCountryName: aName [ - | normalizedName | - aName = 'Mauritius' ifTrue: [ ^ #Mauritania ]. - aName = 'Russian Federation' ifTrue: [ ^ #Russia ]. - aName = 'Turkey' ifTrue: [ ^ #RepublicofTurkey ]. - - #( - #('FR' #France) - #('UK' #GreatBritian) - #('DE' #Germany) - #('US' #UnitedStates) - #('CH' #Switzerland) - #('CA' #Canada) - #('AU' #Austria) - #('IE' #Israel) - #('IT' #Italy)) do: [ :arr | arr first = aName ifTrue: [ ^ arr second ] ]. - - normalizedName := (aName copyWithoutAll: '. ') asSymbol. - ^ (RTSVGPath class methodDict keys includes: normalizedName) - ifTrue: [ normalizedName ] - ifFalse: [ nil ] -] - -{ #category : #adding } -RTMetricMap >> countries: countryNames [ - ^ self countries: countryNames color: [ :c | Color random ] -] - -{ #category : #public } -RTMetricMap >> countries: countryNames color: aColor [ - "Display a list of countries" - countryNames do: [ :country | - | elem | - elem := (RTSVGPath new - path: (RTSVGPath perform: country asSymbol); - fillColor: aColor; - scale: 1) elementOn:(country asString). - elem @ RTPopup. - view add: elem. - ]. -] - -{ #category : #adding } -RTMetricMap >> countries: collection named: selectorOrBlockForName [ - "Display a list of countries" - "E.g., countries: #(#('France' 50) #('Germany' 80)) named: #first" - collection do: [ :country | - | elem | - elem := (RTSVGPath new - path: (RTSVGPath perform: (selectorOrBlockForName rtValue: country) asSymbol); - fillColor: Color random; - scale: 1) elementOn: (country asString). - elem @ RTPopup. - view add: elem. - ]. -] - -{ #category : #public } -RTMetricMap >> countries: collection named: selectorOrBlockForName metric: selectorOrBlockForMetric [ - "Display a list of countries" - "E.g., countries: #(#('France' 50) #('Germany' 80)) named: #first metric: #second" - - "Example: - RTMapBuilder2 new countries: #(#('France' 20) #('Germany' 80)) named: #first metric: #second; open - " - countryData := collection. - countryName := selectorOrBlockForName. - self fillViewWithCountries: countryData named: countryName metric: selectorOrBlockForMetric -] - -{ #category : #hooks } -RTMetricMap >> createView [ - ^ super createView @ RTDraggableView -] - -{ #category : #examples } -RTMetricMap >> example01 [ - - "self new example01" - - | b | - b := RTMetricMap new. - b countries: #('France' 'Germany'). - ^ b -] - -{ #category : #examples } -RTMetricMap >> example02 [ - - "self new example02" - - | b | - b := RTMetricMap new. - b countries: #(#('France' 50) #('Germany' 80)) named: #first. - ^ b -] - -{ #category : #examples } -RTMetricMap >> example03 [ - - "self new example03" - - | b | - b := RTMetricMap new. - b countries: #(#('France' 50) #('Germany' 80)) named: #first metric: #second. - ^ b -] - -{ #category : #examples } -RTMetricMap >> example04 [ - - "self new example04" - "The data shows the average publication for person in the country" - | b data | - b := RTMetricMap new. - data := RTTabTable new input: 'Switzerland 0.04948049 -Sweden 0.03949838 -Denmark 0.03724673 -Finland 0.03512776 -Iceland 0.03384176 -Netherlands 0.03266005 -Norway 0.03235590 -Monaco 0.03153357 -United Kingdom 0.03034517 -Australia 0.03013565 -New Zealand 0.02928470 -Canada 0.02848185 -Israel 0.02841134 -Singapore 0.02814340 -Belgium 0.02684193 -Austria 0.02538793 -Slovenia 0.02456816 -Liechtenstein 0.02302488 -Ireland 0.02280205 -United States 0.02250084 -Germany 0.02177218 -France 0.01953477 -Spain 0.01643973 -Greece 0.01601820 -Italy 0.01575377 -Czech Republic 0.01557232 -Estonia 0.01429077 -Japan 0.01392641 -Croatia 0.01346473 -Portugal 0.01319425 -Luxembourg 0.01267497 -Korea 0.01157157 -Hungary 0.01128115 -Greenland 0.01071429 -Cyprus 0.00913291 -Poland 0.00899290 -Lithuania 0.00829172 -Bermuda 0.00745301 -Faeroe Islands 0.00668606 -Bulgaria 0.00620812 -New Caledonia 0.00605143 -Malta 0.00601626 -Grenada 0.00528995 -Palau 0.00510745 -Latvia 0.00497760 -Romania 0.00432618 -Kuwait 0.00423781 -Barbados 0.00421932 -Turkey 0.00414781 -Russian Federation 0.00408719 -Serbia 0.00399812 -Chile 0.00394931 -San Marino 0.00374436 -Seychelles 0.00373640 -Guam 0.00360543 -Tunisia 0.00355685 -French Polynesia 0.00341107 -Malaysia 0.00339218 -Brunei Darussalam 0.00326268 -Armenia 0.00315417 -Jordan 0.00314134 -Lebanon 0.00309093 -Puerto Rico 0.00305665 -Cayman Islands 0.00297030 -Argentina 0.00288041 -Qatar 0.00282271 -Uruguay 0.00281334 -Trinidad and Tobago 0.00279863 -Macedonia 0.00273227 -Iran 0.00265369 -Belarus 0.00262056 -Oman 0.00247495 -Bahrain 0.00247073 -South Africa 0.00244784 -Ukraine 0.00241902 -Brazil 0.00232119 -Cuba 0.00218313 -Dominica 0.00216227 -Saudi Arabia 0.00208004 -United Arab Emirates 0.00206949 -American Samoa 0.00204978 -China 0.00198446 -Montenegro 0.00175661 -Fiji 0.00174223 -Botswana 0.00172363 -Georgia 0.00166009 -Virgin Islands (U.S.) 0.00164332 -Tuvalu 0.00152130 -Mexico 0.00137863 -Costa Rica 0.00135080 -Andorra 0.00132721 -Jamaica 0.00128646 -Moldova 0.00127910 -Thailand 0.00123095 -Marshall Islands 0.00119874 -Bosnia and Herzegovina 0.00116017 -Egypt 0.00110861 -Mauritius 0.00110573 -Samoa 0.00093706 -Panama 0.00093654 -Northern Mariana Islands 0.00091924 -Gabon 0.00091696 -Venezuela 0.00090597 -Turks and Caicos Islands 0.00089432 -Vanuatu 0.00086952 -Antigua and Barbuda 0.00084204 -Gambia 0.00084188 -Morocco 0.00083801 -Azerbaijan 0.00080366 -Tonga 0.00077186 -Mongolia 0.00076525 -Colombia 0.00075234 -Belize 0.00069432 -Bahamas 0.00069362 -Algeria 0.00066821 -Namibia 0.00064132 -India 0.00060709 -Swaziland 0.00056459 -Guyana 0.00053183 -Albania 0.00048797 -Congo 0.00047290 -Sri Lanka 0.00040530 -Solomon Islands 0.00040393 -Maldives 0.00039889 -Bhutan 0.00039767 -Aruba 0.00039069 -Kenya 0.00038740 -Zimbabwe 0.00038282 -Senegal 0.00036806 -Suriname 0.00035732 -Cameroon 0.00034761 -Kazakhstan 0.00033660 -Pakistan 0.00032448 -Peru 0.00029889 -Ecuador 0.00029486 -Ghana 0.00026906 -Uzbekistan 0.00025359 -Benin 0.00025232 -Bolivia 0.00024428 -Nigeria 0.00024256 -Papua New Guinea 0.00023985 -Nepal 0.00022093 -Malawi 0.00021098 -Burkina Faso 0.00020486 -Uganda 0.00020330 -Sao Tome and Principe 0.00020202 -Guinea-Bissau 0.00019536 -Vietnam 0.00018557 -Zambia 0.00018529 -Iraq 0.00017914 -Syrian Arab Republic 0.00017648 -Tanzania 0.00016707 -Nicaragua 0.00016106 -Lesotho 0.00015549 -Djibouti 0.00015471 -Togo 0.00015159 -Equatorial Guinea 0.00014804 -Paraguay 0.00014026 -Philippines 0.00013611 -El Salvador 0.00012751 -Bangladesh 0.00012593 -Mali 0.00011910 -Kiribati 0.00011906 -Tajikistan 0.00010988 -Sudan 0.00010700 -Cambodia 0.00010468 -Guatemala 0.00010131 -Madagascar 0.00010097 -Mauritania 0.00009194 -Central African Republic 0.00008817 -Ethiopia 0.00008738 -Honduras 0.00008720 -Comoros 0.00008223 -Indonesia 0.00008169 -Rwanda 0.00007864 -Yemen 0.00007203 -Niger 0.00006895 -Dominican Republic 0.00006860 -Eritrea 0.00006035 -Mozambique 0.00005971 -Sierra Leone 0.00005720 -Haiti 0.00004305 -Turkmenistan 0.00004156 -Timor-Leste 0.00004131 -Guinea 0.00003336 -Burundi 0.00002853 -Liberia 0.00002792 -Chad 0.00002249 -Angola 0.00002123 -Myanmar 0.00002040 -Afghanistan 0.00001626 -Somalia 0.00000589 -'. - data convertColumn: 2 to: [ :t | Float readFrom: t ]. - b countries: data values named: #first metric: #second. - ^ b -] - -{ #category : #examples } -RTMetricMap >> example05 [ - - "self new example05" - "The data shows the average publication for person in the country" - "Data have been gathered by Aidan Hogan, from University of Chile" - | b data | - b := RTMetricMap new. - data := RTTabTable new input: ' Country Population Documents Citable documents Citations Self-Citations Citations per Document H index Docs/Pop -1 Switzerland 7997152 395703 377016 7714443 1077442 22.69 569 0.0494804900544594 -2 Sweden 9516617 375891 361569 6810427 1104677 20.11 511 0.0394983847726561 -3 Denmark 5590478 208227 198923 3876514 573278 21.56 427 0.037246725593053 -4 Finland 5414293 190192 184924 3091345 506506 18.55 372 0.0351277627568364 -5 Iceland 320137 10834 10359 199408 19732 23.7 160 0.0338417614958596 -6 Netherlands 16767705 547634 519258 1.01E+07 1701502 21.25 576 0.0326600450091411 -7 Norway 5018869 162390 154481 2299463 382990 17.23 327 0.032355895322233 -8 Monaco 37579 1185 1099 16430 2138 16.72 56 0.0315335692807153 -9 United Kingdom 63227526 1918650 1763766 3.14E+07 7513112 18.29 851 0.0303451696022394 -10 Australia 22683600 683585 643028 9338061 2016394 16.73 514 0.0301356486624698 -11 New Zealand 4433100 129822 122601 1705695 276798 15.73 282 0.0292846991946945 -12 Canada 34880491 993461 946493 1.57E+07 3050504 18.5 658 0.0284818525060327 -13 Israel 7907900 224674 215590 3663004 530340 17.78 414 0.0284113354999431 -14 Singapore 5312400 149509 144653 1616952 230656 12.95 268 0.0281434003463595 -15 Belgium 11142157 299077 285735 4696153 701283 18.16 454 0.0268419301576885 -16 Austria 8462446 214844 204243 3047983 433709 16.67 378 0.0253879315743935 -17 Slovenia 2058152 50565 49471 403209 83402 9.53 153 0.0245681562877766 -18 Liechtenstein 36656 844 820 7665 717 12.16 41 0.0230248799650807 -19 Ireland 4588798 104634 98785 1329296 162271 16.47 271 0.0228020496870858 -20 United States 313914040 7063329 6672307 1.30E+08 6.25E+07 20.45 1380 0.0225008381275333 -21 Germany 81889839 1782920 1704566 2.58E+07 6852785 16.16 740 0.0217721761548463 -22 France 65696689 1283370 1229376 1.79E+07 4151730 15.6 681 0.0195347744237156 -23 Spain 46217961 759811 715452 8688942 2212008 13.89 476 0.0164397343275269 -24 Greece 11280167 180688 171529 1827577 324747 12.28 266 0.0160182025673911 -25 Italy 60917978 959688 909701 1.27E+07 2976533 15.26 588 0.0157537730487378 -26 Czech Republic 10514810 163740 160193 1265709 313836 9.28 239 0.0155723213258252 -27 Estonia 1339396 19141 18774 204306 38547 13.58 130 0.0142907698694038 -28 Japan 127561489 1776473 1734289 2.03E+07 6073934 12.11 635 0.0139264053275515 -29 Croatia 4267000 57454 55909 305003 71781 6.45 143 0.013464729318022 -30 Portugal 10526703 138892 134447 1342075 270626 13.06 234 0.0131942546493427 -31 Luxembourg 531441 6736 6459 52218 5038 12.97 80 0.0126749723863985 -32 Korea 50004000 578625 566953 4640390 1067252 10.55 333 0.0115715742740581 -33 Hungary 9943755 112177 109150 1189497 202337 11.76 254 0.0112811508328594 -34 Greenland 56840 609 600 6927 951 17.65 36 0.0107142857142857 -35 Cyprus 1128994 10311 9938 79318 10252 12.46 86 0.00913290947516107 -36 Poland 38542737 346611 339712 2441439 652956 8.25 302 0.00899290053013101 -37 Lithuania 2985509 24755 24434 151748 37377 8.61 109 0.00829171843059257 -38 Bermuda 64806 483 463 13161 1010 29.08 55 0.00745301360985094 -39 Faeroe Islands 49506 331 321 5915 481 26.55 35 0.00668605825556498 -40 Bulgaria 7304632 45348 44609 319449 56183 7.8 138 0.00620811561759716 -41 New Caledonia 258121 1562 1519 19506 2872 15.38 59 0.00605142549424495 -42 Malta 418366 2517 2384 21115 1584 12.5 60 0.006016263271872 -43 Grenada 105483 558 502 2791 157 11.81 23 0.00528995193538295 -44 Palau 20754 106 102 1314 77 15.01 22 0.00510744916642575 -45 Latvia 2025473 10082 9918 67924 10428 8.61 85 0.00497760276241648 -46 Romania 21326905 92264 91247 396795 100983 6.34 135 0.00432617859928574 -47 Kuwait 3250496 13775 13425 93290 12879 7.67 83 0.00423781478272854 -48 Barbados 283221 1195 1083 11744 801 11.28 50 0.00421931989506428 -49 Turkey 73997128 306926 291814 1935431 519675 8.24 210 0.00414780962850342 -50 Russian Federation 143533000 586646 579814 3132050 938471 5.52 325 0.0040871855252799 -51 Serbia 7223887 28882 28312 81010 23288 8.75 68 0.00399812455538133 -52 Chile 17464814 68974 66972 685110 134570 13.24 194 0.00394931202817276 -53 San Marino 31247 117 114 1381 13 17.61 17 0.00374435945850802 -54 Seychelles 87785 328 309 4632 360 17.86 33 0.00373640143532494 -55 Guam 162810 587 575 7779 416 14.67 45 0.00360542964191389 -56 Tunisia 10777500 38334 36859 169981 39062 6.77 85 0.00355685455810717 -57 French Polynesia 273814 934 908 11157 1288 14.27 45 0.00341107467112712 -58 Malaysia 29239927 99187 97018 356918 93479 7.85 125 0.00339217673149458 -59 Brunei Darussalam 412238 1345 1188 8967 874 9.52 40 0.00326267835570714 -60 Armenia 2969081 9365 9194 73659 13718 8.78 105 0.00315417464191782 -61 Jordan 6318000 19847 19507 107550 15257 7.24 82 0.00314134219689775 -62 Lebanon 4424888 13677 12847 97316 10182 9.7 97 0.00309092569122653 -63 Puerto Rico 3667084 11209 10953 150252 11819 15.34 129 0.00305665209741582 -64 Cayman Islands 57570 171 165 825 36 7.5 14 0.00297029702970297 -65 Argentina 41086927 118347 114659 1167884 259247 11.44 222 0.00288040524422768 -66 Qatar 2050514 5788 5542 23880 2554 5.74 50 0.00282270689202805 -67 Uruguay 3395253 9552 9263 107649 15598 14.39 104 0.00281333968337558 -68 Trinidad and Tobago 1337439 3743 3541 25225 2242 8.38 61 0.00279863231145495 -69 Macedonia 2105575 5753 5611 30344 3717 6.98 62 0.00273227028246441 -70 Iran 76424443 202807 197571 832211 337637 8.49 135 0.00265369287676719 -71 Belarus 9464000 24801 24466 122850 24438 5.08 106 0.00262056213017751 -72 Oman 3314001 8202 7816 43277 5405 7.06 63 0.00247495399065963 -73 Bahrain 1317827 3256 3071 13287 1404 5.19 39 0.00247073401895696 -74 South Africa 51189307 125303 118747 1170454 260828 11.36 231 0.00244783544344525 -75 Ukraine 45593300 110291 108782 452610 131479 4.29 142 0.00241901770654899 -76 Brazil 198656019 461118 446892 3362480 1151280 10.09 305 0.00232118816394886 -77 Cuba 11270957 24606 23847 123183 28193 5.81 93 0.00218313316251672 -78 Dominica 71684 155 145 865 77 7.42 15 0.00216226773059539 -79 Saudi Arabia 28287855 58840 56534 293556 45641 7.11 124 0.0020800445986449 -80 United Arab Emirates 9205651 19051 18331 100247 11207 7.56 87 0.00206948970800653 -81 American Samoa 55128 113 107 1199 69 11.25 18 0.00204977506893049 -82 China 1350695000 2680395 2655272 1.13E+07 6127507 6.17 385 0.00198445615035223 -83 Montenegro 621081 1091 1076 2209 548 1.79 17 0.00175661467666858 -84 Fiji 874742 1524 1479 10758 1100 8.48 40 0.00174222799408283 -85 Botswana 2003910 3454 3369 27060 3224 9.13 57 0.00172363030275811 -86 Georgia 4511800 7490 7309 50895 7781 7.74 78 0.00166009131610444 -87 Virgin Islands (U.S.) 105275 173 168 2024 53 12.63 24 0.00164331512704821 -88 Tuvalu 9860 15 15 109 2 7.24 7 0.00152129817444219 -89 Mexico 120847477 166604 162116 1346721 295320 10 232 0.00137863035402882 -90 Costa Rica 4805295 6491 6319 86713 9950 15.67 103 0.00135080156369172 -91 Andorra 78360 104 93 921 29 8.18 16 0.00132720775906075 -92 Jamaica 2712100 3489 3298 28602 3554 9.69 57 0.00128645698904908 -93 Moldova 3559541 4553 4513 27987 5555 6.5 60 0.00127909750161608 -94 Thailand 66785001 82209 79537 621817 109600 10.96 167 0.00123095004520551 -95 Marshall Islands 52555 63 62 499 24 7.1 13 0.00119874417277138 -96 Bosnia and Herzegovina 3833916 4448 4336 14364 2274 6.92 44 0.00116017148002199 -97 Egypt 80721874 89489 87658 518096 106783 7.56 132 0.00110860904938852 -98 Mauritius 1291456 1428 1387 9101 772 7.85 41 0.00110572872788543 -99 Samoa 188889 177 176 1373 104 8.15 19 0.000937058272318663 -100 Panama 3802281 3561 3401 74014 7882 29.76 106 0.00093654309084468 -101 Northern Mariana Islands 53305 49 48 443 26 10.71 12 0.000919238345370978 -102 Gabon 1632572 1497 1419 20417 2496 16.09 61 0.000916958026966039 -103 Venezuela 29954782 27138 26445 204691 29729 8.42 130 0.000905965531647001 -104 Turks and Caicos Islands 32427 29 28 251 4 11.28 9 0.0008943164646745 -105 Vanuatu 247262 215 206 1620 200 9.64 20 0.000869523016072021 -106 Antigua and Barbuda 89069 75 71 279 17 5.07 9 0.000842043808732556 -107 Gambia 1791225 1508 1410 35029 3232 25.59 80 0.000841881952295217 -108 Morocco 32521143 27253 26175 157219 29432 7.11 99 0.000838008676386313 -109 Azerbaijan 9297507 7472 7373 18607 4318 3 45 0.000803656291950089 -110 Tonga 104941 81 80 747 53 9.54 16 0.000771862284521779 -111 Mongolia 2796484 2140 2096 17104 1869 12.97 55 0.000765246645430476 -112 Colombia 47704427 35890 34768 228686 36843 10.61 133 0.0007523410772757 -113 Belize 324060 225 217 2209 121 13.26 26 0.000694315867431957 -114 Bahamas 371960 258 246 2498 206 13.52 25 0.000693622970211851 -115 Algeria 38481705 25714 25387 105945 20698 6.49 78 0.000668213635544475 -116 Namibia 2259393 1449 1412 16317 1594 12.61 55 0.000641322691537063 -117 India 1236686732 750777 716232 4528302 1585248 7.99 301 0.000607087454383719 -118 Swaziland 1230985 695 676 4421 287 8.2 28 0.000564588520574987 -119 Guyana 795369 423 400 3157 128 9.23 27 0.00053182862294105 -120 Albania 3162083 1543 1500 7407 769 7.88 36 0.000487969480877004 -121 Congo 4337051 2051 1947 16173 1685 10.17 49 0.000472901978786968 -122 Sri Lanka 20328000 8239 7853 61175 6285 9.91 86 0.00040530303030303 -123 Solomon Islands 549598 222 209 2345 184 13.16 24 0.000403931600915578 -124 Maldives 338442 135 131 895 52 6.57 15 0.000398886663002819 -125 Bhutan 741822 295 290 1360 173 6.55 18 0.00039766952179903 -126 Aruba 102384 40 40 233 1 7.57 8 0.000390686044694484 -127 Kenya 43178141 16727 16044 206886 34874 15.09 131 0.000387395094198243 -128 Zimbabwe 13724317 5254 5092 55075 6025 10.71 72 0.000382824150739159 -129 Senegal 13726021 5052 4844 44909 5892 10.73 75 0.000368060051780483 -130 Suriname 534541 191 187 1632 126 10.62 24 0.000357315902802591 -131 Cameroon 21699631 7543 7318 59454 12199 10.42 72 0.000347609597600991 -132 Kazakhstan 16797459 5654 5563 21197 3306 4.48 52 0.000336598529575217 -133 Pakistan 179160111 58133 55915 243958 72199 6.22 111 0.000324475128283438 -134 Peru 29987800 8963 8528 97117 10907 15.04 109 0.00029888821454058 -135 Ecuador 15492264 4568 4406 51303 6817 14.47 83 0.000294856839516807 -136 Ghana 25366462 6825 6594 52958 6618 10.73 73 0.000269056047311604 -137 Uzbekistan 29776850 7551 7414 29026 5687 3.99 53 0.000253586259124118 -138 Benin 10050702 2536 2472 18846 3379 10.06 49 0.000252320683669658 -139 Bolivia 10496285 2564 2505 31002 3203 14.13 61 0.000244276903685447 -140 Nigeria 168833776 40952 40124 174002 42457 6.23 89 0.000242558100459709 -141 Papua New Guinea 7167010 1719 1669 18668 2092 11.43 54 0.000239848974677027 -142 Nepal 27474377 6070 5582 41907 5494 9.73 71 0.000220933126163334 -143 Malawi 15906483 3356 3163 42360 6042 16.51 80 0.000210983156993284 -144 Burkina Faso 16460141 3372 3259 31888 5299 12.14 62 0.000204858512451382 -145 Uganda 36345860 7389 7014 87647 14831 17.01 99 0.00020329688168061 -146 Sao Tome and Principe 188098 38 37 436 56 11.85 14 0.000202022350051569 -147 Guinea-Bissau 1663558 325 299 5919 1068 22.77 40 0.000195364393667068 -148 Vietnam 88775500 16474 16116 125927 18500 11.79 107 0.000185569216732094 -149 Zambia 14075099 2608 2467 30437 3583 14.07 68 0.000185291769528584 -150 Iraq 32578209 5836 5526 14909 1831 4.82 41 0.000179138147219818 -151 Syrian Arab Republic 22399254 3953 3851 29002 3808 9.93 58 0.000176479091669749 -152 Tanzania 47783107 7983 7708 91706 14922 14.46 93 0.000167067411501726 -153 Nicaragua 5991733 965 936 9903 840 13.41 45 0.000161055240612357 -154 Lesotho 2051545 319 308 1848 112 7.31 22 0.000155492567796466 -155 Djibouti 859652 133 122 653 42 6.6 13 0.000154713767896777 -156 Togo 6642928 1007 943 5111 516 6.06 31 0.0001515897808918 -157 Equatorial Guinea 736296 109 107 896 105 9.07 15 0.00014803828894901 -158 Paraguay 6687361 938 904 9364 615 13.45 45 0.000140264597649207 -159 Philippines 96706764 13163 12796 141070 15727 13.38 116 0.000136112506049732 -160 El Salvador 6297394 803 777 4553 263 7.45 31 0.000127513063340169 -161 Bangladesh 154695368 19481 19037 115329 22662 8.37 97 0.000125931372424803 -162 Mali 14853572 1769 1717 19599 2135 13.95 55 0.000119095931941489 -163 Kiribati 100786 12 11 84 1 7.27 6 0.000119064155735916 -164 Tajikistan 8008990 880 870 2429 396 3.14 23 0.000109876526253622 -165 Sudan 37195349 3980 3860 24909 3661 9.29 52 0.000107002625516432 -166 Cambodia 14864646 1556 1462 15891 1739 12.76 49 0.00010467790487577 -167 Guatemala 15082831 1528 1453 15652 1011 12.7 53 0.000101307241326247 -168 Madagascar 22293914 2251 2182 22100 3516 11.9 56 0.000100969260041104 -169 Mauritania 3796141 349 338 2711 150 8.98 25 0.0000919354681504191 -170 Central African Republic 4525209 399 383 4080 236 11.73 32 0.0000881727230720172 -171 Ethiopia 91728849 8015 7825 60457 12411 10.42 73 0.000087377091148282 -172 Honduras 7935846 692 675 7265 370 12.48 39 0.000087199272768146 -173 Comoros 717503 59 56 516 36 9.71 10 0.0000822296213395623 -174 Indonesia 246864191 20166 19740 146670 16149 10.94 112 0.0000816886398886423 -175 Rwanda 11457801 901 838 6336 506 12.72 36 0.0000786363805759936 -176 Yemen 23852409 1718 1676 8972 1069 7.93 37 0.0000720262678708888 -177 Niger 17157042 1183 1158 11457 1055 10.83 47 0.0000689512795970308 -178 Dominican Republic 10276621 705 678 7234 422 13.02 41 0.0000686023158779525 -179 Eritrea 6130922 370 361 3233 261 9.35 25 0.0000603498136169405 -180 Mozambique 25203395 1505 1457 15973 1867 12.98 53 0.0000597141773955453 -181 Sierra Leone 5978727 342 323 2077 134 7.87 21 0.0000572028125719739 -182 Haiti 10173775 438 397 6447 441 21.58 36 0.000043051866195193 -183 Turkmenistan 5172931 215 213 1259 119 7.29 16 0.0000415625106926808 -184 Timor-Leste 1210233 50 44 216 12 7.23 8 0.000041314358474773 -185 Guinea 11451273 382 363 4249 179 14.19 34 0.0000333587366225572 -186 Burundi 9849569 281 273 2195 124 9.51 24 0.0000285291671138097 -187 Liberia 4190435 117 103 570 39 8.74 14 0.0000279207289935293 -188 Chad 12448175 280 266 3013 264 12.02 27 0.0000224932570437032 -189 Angola 20820525 442 427 2806 205 8.9 25 0.0000212290516209366 -190 Myanmar 52797319 1077 1049 7944 612 11.9 38 0.0000203987630508284 -191 Afghanistan 29824536 485 441 2088 241 5.38 21 0.0000162617785570914 -192 Somalia 10195134 60 57 323 12 7.96 11 0.00000588516050892514'. - data removeFirstRow. - data convertColumn: 3 to: [ :t | Integer readFrom: t ]. - data convertColumn: 4 to: [ :t | Integer readFrom: t ]. - data convertColumn: 5 to: [ :t | Integer readFrom: t ]. - data convertColumn: 9 to: [ :t | Integer readFrom: t ]. - - b countries: data values named: #second metric: #third. - - b makeSelectable: #third as: 'Population'. - b makeSelectable: #fourth as: 'Documents'. - b makeSelectable: #fifth as: 'Citable documents'. - b makeSelectable: [ :row | row at: 9 ] as: 'H index'. - - ^ b -] - -{ #category : #examples } -RTMetricMap >> example06DeepIntoPharo [ - - "self new example06DeepIntoPharo" - "The data shows the country that have bought the book DeepIntoPharo from Sep 2013 until Mar 2014" - - | b data | - b := RTMetricMap new. - data := RTTabTable new input: 'Quantité Région -1 US -1 US -1 US -1 FR -1 US -1 FR -1 DE -2 US -1 DE -1 US -1 IT -1 ES -1 US --1 US -1 US -1 CA -1 CH -1 US -1 US -2 US -1 EU -1 US -1 FR -3 FR -1 UK -1 ES -2 US -2 UK -1 EU -1 EU -1 US -1 US -1 US -1 US -2 UK -1 FR -5 US -1 UK -1 EU -1 UK -1 DE -1 US -1 NL -1 US -2 DE -1 US -1 US -1 DE -1 US -1 DE -1 DE -1 DE -1 DE -1 US -1 FR -1 AU -1 US -1 US -1 US -1 US -1 US -1 US -1 US -1 NL -1 NL -1 US -1 US -1 US -3 CH -1 US -1 US -1 DE -1 DE -1 IE -1 US -1 UK -1 DE -1 US -1 US -1 US -20 FR -20 FR -1 FR'. - data removeFirstRow. - data convertColumn: 1 to: [ :t | Integer readFrom: t ]. - data gather: 2 using: [ :r1 :r2 | Array with: r1 first + r2 first with: r1 second ]. - - b countries: RTSVGPath countries color: Color white. - b countries: data values named: #second metric: #first. - - ^ b -] - -{ #category : #examples } -RTMetricMap >> example07GrowthAndDevelopmentBridgeIndex [ - - "self new example07GrowthAndDevelopmentBridgeIndex" - "Data from http://www.gdbridge.org/gdb_index" -| b table | -b := RTMetricMap new. -table := RTTabTable new. -table input: 'Hong Kong, China 1 0.631447 -Singapore 2 0.5889286 -Netherlands 3 0.515425 -Switzerland 4 0.5018929 -United States 5 0.4871152 -Norway 6 0.4851121 -Denmark 7 0.4665922 -Sweden 8 0.4567912 -Finland 9 0.4460537 -Korea, Rep. 10 0.4382369 -Ireland 11 0.4324097 -Luxembourg 12 0.4227912 -Germany 13 0.4190357 -Belgium 14 0.4022478 -Canada 15 0.3983661 -Australia 16 0.3982408 -United Kingdom 17 0.3930691 -Japan 18 0.3904902 -Spain 19 0.3876414 -Kuwait 20 0.3800776 -France 21 0.377015 -Brunei Darussalam 22 0.3627484 -Austria 23 0.3621858 -Israel 24 0.3585244 -China 25 0.3560882' usingDelimiters: String tab. -table convertColumn: 3 to: [ :t | Float readFrom: t ]. - -b allCountriesColor: Color white. -b countries: table values named: #first metric: #third. - -^ b - -] - -{ #category : #private } -RTMetricMap >> fillViewWithCountries: collection named: selectorOrBlockForName metric: selectorOrBlockForMetric [ - "Display a list of countries" - "E.g., countries: #(#('France' 50) #('Germany' 80)) named: #first metric: #second" - - "Example: - RTMapBuilder2 new countries: #(#('France' 20) #('Germany' 80)) named: #first metric: #second; open - " - | cn maxValue tcountryName svgCountryName normalizedCountries | - "Initialize the color normalizer" - cn := RTMultiLinearColor new colors: (Array with:(Color r:0.8 g:0.8 b:1) with: (Color r:0 g:0 b:0.3)). - - "Get the maximum, useful since we need value between 0.0 and 1.0" - maxValue := (collection collect: selectorOrBlockForMetric) max. - - "We pick only the country we have the geographical position" - normalizedCountries := collection select: [ :country | - tcountryName := selectorOrBlockForName rtValue: country. - svgCountryName := self convertIntoSVGCountryName: tcountryName. - svgCountryName notNil ]. - - normalizedCountries do: [ :country | - | elem | - tcountryName := selectorOrBlockForName rtValue: country. - svgCountryName := self convertIntoSVGCountryName: tcountryName. - elem := (RTSVGPath new - path: (RTSVGPath perform: svgCountryName); - fillColor: [ :cc | cn level: (selectorOrBlockForMetric rtValue: cc) / maxValue ]; - scale: 1) elementOn: country. - elem when: TRMouseClick do: [ :evt | elem inspect ]. - elem @ RTPopup. - view add: elem. - ]. -] - -{ #category : #initialization } -RTMetricMap >> initialize [ - super initialize. - pointShapeBuilder := RTShapeBuilder new. - -] - -{ #category : #public } -RTMetricMap >> makeSelectable: aBlock as: aTitle [ - "Public method" - "Add a menu in the visualization. Useful to switch between metrics" - view canvas addMenu: aTitle callback: [ - self cleanView. - self fillViewWithCountries: countryData named: countryName metric: aBlock ] -] - -{ #category : #accessing } -RTMetricMap >> pointShape [ - ^ pointShapeBuilder -] - -{ #category : #public } -RTMetricMap >> routes: objects from: aPointBlock to: anotherPointBlock [ - | toPixel fromPixel fromElement toElement edge | - shapeBuilder ensure: RTLine. - pointShapeBuilder ensure: RTEllipse. - - objects do: [ :object | - toPixel := self translateGeoPositionToPixels: (aPointBlock rtValue: object). - fromPixel := self translateGeoPositionToPixels: (anotherPointBlock rtValue: object). - fromElement := pointShapeBuilder elementOn: 'from'. - toElement := pointShapeBuilder elementOn: 'to'. - fromElement translateTo: fromPixel. - toElement translateTo: toPixel. - view add: fromElement. - view add: toElement. - - edge := shapeBuilder edgeFrom: fromElement to: toElement. - view add: edge. - ]. -] - -{ #category : #utility } -RTMetricMap >> translateGeoPositionToPixels: point [ - "From https://github.com/thebyrd/world-news" - - | longitud latitud xFactor xoffset yFactor yoffset | - latitud := point x. - longitud := point y. - - xFactor := 2.6938. - xoffset := 465.4. - - yFactor := -2.6938. - yoffset := 227.066. - ^ ((longitud * xFactor) + xoffset) @ ((latitud * yFactor) + yoffset) -] diff --git a/src/Roassal2/RTMetricMapTest.class.st b/src/Roassal2/RTMetricMapTest.class.st deleted file mode 100644 index ac12a9f13..000000000 --- a/src/Roassal2/RTMetricMapTest.class.st +++ /dev/null @@ -1,34 +0,0 @@ -Class { - #name : #RTMetricMapTest, - #superclass : #RTTest, - #instVars : [ - 'b' - ], - #category : #'Roassal2-Builder-Map-Tests' -} - -{ #category : #running } -RTMetricMapTest >> setUp [ - super setUp. - b := RTMetricMap new. -] - -{ #category : #tests } -RTMetricMapTest >> testNameConversion [ - - self assert: (b convertIntoSVGCountryName: 'France') = #France. - self assert: (b convertIntoSVGCountryName: 'Germany') = #Germany. - self assert: (b convertIntoSVGCountryName: 'New Zealand') = #NewZealand. - self assert: (b convertIntoSVGCountryName: 'Mauritius') = #Mauritania. - self assert: (b convertIntoSVGCountryName: 'MauritiusNotExisting') isNil. - - self assert: (b convertIntoSVGCountryName: 'FR') = #France. - self assert: (b convertIntoSVGCountryName: 'UK') = #GreatBritian. - self assert: (b convertIntoSVGCountryName: 'DE') = #Germany. - self assert: (b convertIntoSVGCountryName: 'US') = #UnitedStates. - self assert: (b convertIntoSVGCountryName: 'CH') = #Switzerland. - self assert: (b convertIntoSVGCountryName: 'CA') = #Canada. - self assert: (b convertIntoSVGCountryName: 'AU') = #Austria. - self assert: (b convertIntoSVGCountryName: 'IE') = #Israel. - self assert: (b convertIntoSVGCountryName: 'IT') = #Italy. -] diff --git a/src/Roassal2/RTMetricNormalizer.class.st b/src/Roassal2/RTMetricNormalizer.class.st deleted file mode 100644 index dc43fd5a6..000000000 --- a/src/Roassal2/RTMetricNormalizer.class.st +++ /dev/null @@ -1,1242 +0,0 @@ -" -A Metric normalizer is made to assign a color, or a particular shape computed from a group of elements. Consider the following example: --=-=-=-=-=-=-=-=-=-=-=-= -""Set here the classes you wish to visualize"" -classes := Collection withAllSubclasses. - -v := RTView new. -v @ RTDraggableView. -shape := RTBox new. -es := shape elementsOn: classes. -v addAll: es. - -RTMetricNormalizer new - elements: es; - normalizeWidth: #numberOfVariables; - normalizeHeight: #numberOfMethods; - normalizeColor: #numberOfLinesOfCode. - -RTFlowLayout on: es. - -v --=-=-=-=-=-=-=-=-=-=-=-= -" -Class { - #name : #RTMetricNormalizer, - #superclass : #RTObject, - #instVars : [ - 'elements', - 'view', - 'translator', - 'edges' - ], - #category : #'Roassal2-ColorNormalizer' -} - -{ #category : #accessing } -RTMetricNormalizer >> alphaColor [ - "Make all the elements translucent" - ^ self alphaColor: 0.4 -] - -{ #category : #accessing } -RTMetricNormalizer >> alphaColor: anAlphaValue [ - "Set an alpha color (transparency) for nodes" - "aFloat has to be between 0.0 and 1.0" - elements do: [ :el | - el trachelShape color: (el trachelShape color alpha: anAlphaValue) ] - -] - -{ #category : #utility } -RTMetricNormalizer >> checkNotEmpty [ - "Raise an error if no elements have been added" - elements ifNil: [ self error: 'Need to provide a list of elements' ]. - elements ifEmpty: [ self error: 'Please specify what are the elements I should operate on using #elements:' ] -] - -{ #category : #'public translation' } -RTMetricNormalizer >> directTranslation [ - translator := RTDirectLayoutTranslator new -] - -{ #category : #'public normalize color' } -RTMetricNormalizer >> distinctColor [ - "give a color to each element based on the model identify. - Two elements have the same color if they have the same model" - ^ self distinctColorUsing: #yourself -] - -{ #category : #'public normalize color' } -RTMetricNormalizer >> distinctColorUsing: aBlockOrSymbol [ - "Give a color to each element according to the result of execution the block and symbol on each element. - - For example, the following example paints all the class according to the package the class is in: - | b | - b := RTMondrian new. - b shape circle. - b nodes: Collection withAllSubclasses. - b edges connectFrom: #superclass. - b layout tree. - b normalizer - normalizeSize: #numberOfMethods; - distinctColorUsing: #package. - b - " - "The method return the mapping" - ^ self distinctColorUsing: aBlockOrSymbol colorPalette: (RTColorPalette qualitative colors: 12 scheme: 'Set3') -] - -{ #category : #'public normalize color' } -RTMetricNormalizer >> distinctColorUsing: aBlockOrSymbol colorPalette: someColors [ - "Give a color to each element according to the result of execution the block and symbol on each element. - - For example, the following example paints all the class according to the package the class is in: - | b | - b := RTMondrian new. - b shape circle. - b nodes: Collection withAllSubclasses. - b edges connectFrom: #superclass. - b layout tree. - b normalizer - normalizeSize: #numberOfMethods; - distinctColorUsing: #package. - b - " - "The method return the mapping" - | normalizer allObjects colorMapping | - allObjects := elements collect: [ :e | aBlockOrSymbol rtValue: e model ]. - allObjects removeDuplicates. - - normalizer := RTMultiLinearColorForIdentity new - objects: allObjects; - colors: someColors; - command: aBlockOrSymbol. - - elements do: [ :el | el trachelShape color: (normalizer rtValue: el model) ]. - - colorMapping := allObjects collect: [ :obj | obj -> (normalizer colorOf: obj) ]. - ^ colorMapping -] - -{ #category : #'public normalize line width' } -RTMetricNormalizer >> edges [ - edges ifNotNil: [ ^ edges ]. - - edges := Set new. - elements do: [ :el | edges addAll: el connectedEdges ]. - edges := edges asArray. - ^ edges -] - -{ #category : #'public normalize line width' } -RTMetricNormalizer >> edges: someEdges [ - "Set the edges to take into account" - edges := someEdges. -] - -{ #category : #accessing } -RTMetricNormalizer >> elements [ - "Elements on which the normalization will occur" - ^ elements -] - -{ #category : #accessing } -RTMetricNormalizer >> elements: someElements [ - "Set the elements to be considered by the metric normalizer" - elements := someElements -] - -{ #category : #'public translation' } -RTMetricNormalizer >> fastSmoothTranslation [ - translator := RTSmoothLayoutTranslator new nbCycles: 0.5; yourself -] - -{ #category : #utility } -RTMetricNormalizer >> getElementNormalizedValues: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation [ - "aBlock is evaluated on each node model" - - self checkNotEmpty. - (maxValue = minValue) ifTrue: [ - ^ elements collect: [ :el | min ] ]. - - ^ elements collect: [ :el | - | tt t | - t := transformation rtValue: (metricBlock rtValue: el). - tt := min + ((max - min) * ( (t - minValue) / (maxValue - minValue))) ] -] - -{ #category : #utility } -RTMetricNormalizer >> getNormalizedForLineWidthValues: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation [ - "aBlock is evaluated on each node model" - - self checkNotEmpty. - (maxValue = minValue) ifTrue: [ - ^ self edges collect: [ :edge | min ] ]. - - ^ self edges collect: [ :edge | - | tt t | - t := transformation rtValue: (metricBlock value: edge from model value: edge to model). - tt := min + ((max - min) * ( (t - minValue) / (maxValue - minValue))) asFloat ] -] - -{ #category : #utility } -RTMetricNormalizer >> getNormalizedValues: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation [ - "aBlock is evaluated on each node model" - - self checkNotEmpty. - (maxValue = minValue) ifTrue: [ - ^ elements collect: [ :el | min ] ]. - - ^ elements collect: [ :el | - | tt t | - t := transformation rtValue: (metricBlock rtValue: el model). - tt := min + ((max - min) * ( (t - minValue) / (maxValue - minValue))) ] -] - -{ #category : #utility } -RTMetricNormalizer >> getValue: t min: min max: max minValue: minValue maxValue: maxValue [ - maxValue = minValue ifTrue: [ ^ min ]. - ^ min + ((max - min) * ( (t - minValue) / (maxValue - minValue))) -] - -{ #category : #initialization } -RTMetricNormalizer >> initialize [ - super initialize. - elements := OrderedCollection new. - self directTranslation -] - -{ #category : #accessing } -RTMetricNormalizer >> maxSize: anInteger [ - "aBlock is evaluated on each node model. - Set the maximum size of each element" - elements do: [ :el | - el trachelShape extent: (el trachelShape extent min: anInteger @ anInteger) ] -] - -{ #category : #'public normalize color' } -RTMetricNormalizer >> normalizeColor: metricBlock [ - "aBlock is evaluated on each node model. - Colors is an array of colors used to do the fading" - ^ self normalizeColor: metricBlock using: (Array with: Color gray with: Color red) -] - -{ #category : #'public normalize color' } -RTMetricNormalizer >> normalizeColor: metricBlock using: colors [ - "aBlock is evaluated on each node model. - Colors is an array of colors used to do the fading" - ^ self normalizeColor: metricBlock using: colors using: #yourself -] - -{ #category : #'public normalize color' } -RTMetricNormalizer >> normalizeColor: metricBlock using: colors min: min [ - "aBlock is evaluated on each node model. - Colors is an array of colors used to do the fading" - - self normalizeColor: metricBlock using: colors using: #yourself min: min -] - -{ #category : #'public normalize color' } -RTMetricNormalizer >> normalizeColor: metricBlock using: colors min: min max: max [ - ^ self normalizeColor: metricBlock using: colors using: #yourself min: min max: max -] - -{ #category : #'public normalize color' } -RTMetricNormalizer >> normalizeColor: metricBlock using: colors using: transformation [ - "aBlock is evaluated on each node model. - Colors is an array of colors used to do the fading" - - | min max | - "We get the min and the max of the metric for all the elements" - self assert: [ elements notEmpty ] description: 'You need to provide elements using #objects:, #elements:, #fromObjects:, ... '. - min := transformation rtValue: (metricBlock rtValue: elements anyOne model). - max := min. - elements do: [ :el | - | t | - t := transformation rtValue: (metricBlock rtValue: el model). - min := min min: t. - max := max max: t ]. - max = 0 ifTrue: [ ^ self ]. - - self normalizeColor: metricBlock using: colors using: transformation min: min max: max - -] - -{ #category : #'public normalize color' } -RTMetricNormalizer >> normalizeColor: metricBlock using: colors using: transformation min: min [ - "aBlock is evaluated on each node model. - Colors is an array of colors used to do the fading" - - | max | - "We get the min and the max of the metric for all the elements" - self assert: [ elements notEmpty ] description: 'You need to provide elements using #objects:, #elements:, #fromObjects:, ... '. - max := transformation rtValue: (metricBlock rtValue: elements anyOne model). - elements do: [ :el | - | t | - t := transformation rtValue: (metricBlock rtValue: el model). - max := max max: t ]. - - self normalizeColor: metricBlock using: colors using: transformation min: min max: max - -] - -{ #category : #'public normalize color' } -RTMetricNormalizer >> normalizeColor: metricBlock using: colors using: transformation min: min max: max [ - | values normalizer | - self checkNotEmpty. - - values := (self getNormalizedValues: metricBlock - min: 0.0 max: 1.0 - minValue: min maxValue: max - using: transformation). - normalizer := RTMultiLinearColor new colors: colors. - elements with: values do: [ :el :v | - el trachelShape color: (normalizer level: v) ] - -] - -{ #category : #'public normalize color' } -RTMetricNormalizer >> normalizeColorAsGray: metricBlock [ - "aBlock is evaluated on each node model." - ^ self normalizeColor: metricBlock using: (Array with: Color white with: Color black) -] - -{ #category : #'public normalize color' } -RTMetricNormalizer >> normalizeColorUsing: colors [ - ^ self normalizeColor: #yourself using: colors -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeElementHeight: metricBlock [ - "metricBlock is evaluated on each node model" - ^ self normalizeElementHeight: metricBlock min: 5 max: 30 -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeElementHeight: metricBlock min: minValue max: maxValue [ - "metricBlock is evaluated on each node model. - minValue and maxValue are integer representing the minimum and maximum size in pixels for each node" - self normalizeElementHeight: metricBlock min: minValue max: maxValue using: #yourself -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeElementHeight: metricBlock min: min max: max minValue: aMinValue maxValue: aMaxValue [ - "metricBlock is evaluated on each node model. - minValue and maxValue are integer representing the minimum and maximum size in pixels for each node" - self normalizeElementHeight: metricBlock min: min max: max minValue: aMinValue maxValue: aMaxValue using: #yourself -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeElementHeight: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation [ - "metricBlock is evaluated on each node model. - minValue and maxValue are integer representing the minimum and maximum size in pixels for each node" - - | values | - self checkNotEmpty. - values := (self getElementNormalizedValues: metricBlock - min: min max: max - minValue: minValue maxValue: maxValue - using: transformation). - elements with: values do: [ :el :v | el trachelShape height: v ] - - -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeElementHeight: metricBlock min: min max: max using: transformation [ - "aBlock is evaluated on each node model. - Colors is an array of colors used to do the fading" - - | minValue maxValue | - - self checkNotEmpty. - - "We get the min and the max of the metric for all the elements" - minValue := transformation rtValue: (metricBlock rtValue: elements anyOne model). - maxValue := minValue. - elements do: [ :el | - | t | - t := transformation rtValue: (metricBlock rtValue: el). - minValue := minValue min: t. - maxValue := maxValue max: t ]. - - self normalizeHeight: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeElementWidth: metricBlock [ - "metricBlock is evaluated on each element" - ^ self normalizeElementWidth: metricBlock min: 5 max: 30 -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeElementWidth: metricBlock max: maxValue [ - "metricBlock is evaluated on each node. - maxValue is an integer representing the maximum size in pixels for each node" - self normalizeElementWidth: metricBlock min: 5 max: maxValue -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeElementWidth: metricBlock min: minValue max: maxValue [ - "metricBlock is evaluated on each node model. - minValue and maxValue are integer representing the minimum and maximum size in pixels for each node" - self normalizeElementWidth: metricBlock min: minValue max: maxValue using: #yourself -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeElementWidth: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation [ - "aBlock is evaluated on each node. - Colors is an array of colors used to do the fading" - - | values | - self checkNotEmpty. - - values := (self getElementNormalizedValues: metricBlock - min: min max: max - minValue: minValue maxValue: maxValue - using: transformation). - elements with: values do: [ :el :v | el trachelShape width: v ] - -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeElementWidth: metricBlock min: min max: max using: transformation [ - "aBlock is evaluated on each node. - Colors is an array of colors used to do the fading" - - | minValue maxValue | - - self checkNotEmpty. - - "We get the min and the max of the metric for all the elements" - minValue := transformation rtValue: (metricBlock rtValue: elements anyOne). - maxValue := minValue. - elements do: [ :el | - | t | - t := transformation rtValue: (metricBlock rtValue: el). - minValue := minValue min: t. - maxValue := maxValue max: t ]. - - - self normalizeElementWidth: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation. - -] - -{ #category : #'public normalize x' } -RTMetricNormalizer >> normalizeElementX: metricBlock min: min max: max minValue: minValue maxValue: maxValue [ - " - metricBlock is evaluated on each element. - - min represent the X value of the minimum value. - max represent the X value of the maximum value. - - minValue is the minimum value of the dataset. - maxValue is the maximum value of the dataset. - - [ minValue ; maxValue ] is mapped to [ min ; max ] - - transformation is used to transform the metric value" - - self normalizeElementX: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: #yourself -] - -{ #category : #'public normalize x' } -RTMetricNormalizer >> normalizeElementX: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation [ - " - metricBlock is evaluated on each element. - - min represent the X value of the minimum value. - max represent the X value of the maximum value. - - minValue is the minimum value of the dataset. - maxValue is the maximum value of the dataset. - - [ minValue ; maxValue ] is mapped to [ min ; max ] - - transformation is used to transform the metric value" - - (maxValue - minValue) ~= 0 ifTrue: [ - elements do: [ :el | - | tt t | - t := transformation rtValue: (metricBlock rtValue: el). - tt := min + ((max - min) * ( (t - minValue) / (maxValue - minValue))). - translator translate: el to: el position + (tt @ 0) ] ] -] - -{ #category : #'public normalize x' } -RTMetricNormalizer >> normalizeElementY: metricBlock min: min max: max minValue: minValue maxValue: maxValue [ - " - metricBlock is evaluated on each element. - - min represent the Y value of the minimum value. - max represent the Y value of the maximum value. - - minValue is the minimum value of the dataset. - maxValue is the maximum value of the dataset. - - [ minValue ; maxValue ] is mapped to [ min ; max ] - - transformation is used to transform the metric value" - - self normalizeElementY: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: #yourself -] - -{ #category : #'public normalize x' } -RTMetricNormalizer >> normalizeElementY: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation [ - " - metricBlock is evaluated on each element. - - min represent the X value of the minimum value. - max represent the X value of the maximum value. - - minValue is the minimum value of the dataset. - maxValue is the maximum value of the dataset. - - [ minValue ; maxValue ] is mapped to [ min ; max ] - - transformation is used to transform the metric value" - - (maxValue - minValue) ~= 0 ifTrue: [ - elements do: [ :el | - | tt t | - t := transformation rtValue: (metricBlock rtValue: el). - tt := min + ((max - min) * ( (t - minValue) / (maxValue - minValue))). - translator translate: el to: el position + (0 @ tt) ] ] -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeHeight: metricBlock [ - "metricBlock is evaluated on each node model" - ^ self normalizeHeight: metricBlock min: 5 max: 30 -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeHeight: metricBlock max: maxValue [ - "metricBlock is evaluated on each node model. - maxValue is an integer representing the maximum size in pixels for each node" - self normalizeHeight: metricBlock min: 5 max: maxValue -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeHeight: metricBlock min: minValue max: maxValue [ - "metricBlock is evaluated on each node model. - minValue and maxValue are integer representing the minimum and maximum size in pixels for each node" - self normalizeHeight: metricBlock min: minValue max: maxValue using: #yourself -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeHeight: metricBlock min: min max: max minValue: aMinValue maxValue: aMaxValue [ - "metricBlock is evaluated on each node model. - minValue and maxValue are integer representing the minimum and maximum size in pixels for each node" - self normalizeHeight: metricBlock min: min max: max minValue: aMinValue maxValue: aMaxValue using: #yourself -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeHeight: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation [ - "metricBlock is evaluated on each node model. - minValue and maxValue are integer representing the minimum and maximum size in pixels for each node" - - | values | - - self checkNotEmpty. - - values := (self getNormalizedValues: metricBlock - min: min max: max - minValue: minValue maxValue: maxValue - using: transformation). - elements with: values do: [ :el :v | el trachelShape height: v ] - - -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeHeight: metricBlock min: min max: max using: transformation [ - "aBlock is evaluated on each node model. - Colors is an array of colors used to do the fading" - - | minValue maxValue | - - self checkNotEmpty. - - "We get the min and the max of the metric for all the elements" - minValue := transformation rtValue: (metricBlock rtValue: elements anyOne model). - maxValue := minValue. - elements do: [ :el | - | t | - t := transformation rtValue: (metricBlock rtValue: el model). - minValue := minValue min: t. - maxValue := maxValue max: t ]. - - self normalizeHeight: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation -] - -{ #category : #'public normalize line width' } -RTMetricNormalizer >> normalizeLineWidth: metricBlock [ - "metricBlock is a two arg block that accept the from model and the to model" -" -Example: - -b := RTMondrian new. -b shape circle size: 20; color: Color red trans. -b nodes: RTObject withAllSubclasses. - -b shape line color: Color blue trans. -es := b edges connectToAll: #dependentClasses. -b layout force charge: -500. -b normalizer - edges: es; - normalizeLineWidth: [ :from :to | - | outgoingRef | - outgoingRef := (from methods flatCollect: [ :cm | cm literals select: [ :l | l class == GlobalVariable ] ]) groupedBy: #value. - (outgoingRef keys includes: to) - ifTrue: [ (outgoingRef at: to) size ] - ifFalse: [ 0 ] ] min: 0.2 max: 20. -b - -" - ^ self normalizeLineWidth: metricBlock min: 0.5 max: 30 -] - -{ #category : #'public normalize line width' } -RTMetricNormalizer >> normalizeLineWidth: metricBlock min: min max: max [ - "metricBlock is a two arg block that accept the from model and the to model" - ^ self normalizeLineWidth: metricBlock min: min max: max using: #yourself -] - -{ #category : #'public normalize line width' } -RTMetricNormalizer >> normalizeLineWidth: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation [ - | values block | - self checkNotEmpty. - - values := (self getNormalizedForLineWidthValues: metricBlock - min: min - max: max - minValue: minValue - maxValue: maxValue - using: transformation). - - "Hack not really nice" - block := [ :anEdge | anEdge attributes at: #width ]. - self edges with: values do: [ :edge :aValue | - edge shape widthElement: block. - edge attributeAt: #width put: aValue. -" edge updateShape." - ] - - -] - -{ #category : #'public normalize line width' } -RTMetricNormalizer >> normalizeLineWidth: metricBlock min: min max: max using: transformation [ - "metricBlock is a two arg block that accept the from model and the to model" - | e minValue maxValue | - self checkNotEmpty. - - "We get the min and the max of the metric for all the edges" - self edges ifEmpty: [ ^ self ]. - e := self edges anyOne. - minValue := transformation rtValue: (metricBlock value: e from model value: e to model). - maxValue := minValue. - self edges do: [ :edge | - | t | - t := transformation rtValue: (metricBlock value: edge from model value: edge to model). - minValue := minValue min: t. - maxValue := maxValue max: t ]. - - ^ self normalizeLineWidth: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation -] - -{ #category : #'public normalize line width' } -RTMetricNormalizer >> normalizeLineWidthBasedOnOccurences: oneArgMetricBlock [ - "metricBlock is a one-arg block that accept the from model and produces a set of elements. - The size of the edges reflects the number of occurences with the 'to model'" -" -Example: - -paks := RPackageOrganizer default packages select: [ :p | p packageName beginsWith: 'Metacello-' ]. - -b := RTMondrian new. -b shape label text: #packageName; color: Color veryVeryDarkGray. -b interaction highlightEdges: #dependentPackages color: Color red trans. -b nodes: paks. - -b shape line color: Color blue trans. -b edges - highlightable; - connectToAll: #dependentPackages. -b layout circle. - -b normalizer - normalizeSize: [ :pak | pak definedClasses size ]; - normalizeLineWidthBasedOnOccurences: #dependentPackagesWithOccurences. -b - - -------- -b := RTMondrian new. -b shape circle size: 20; color: Color red trans. -b nodes: RTObject withAllSubclasses. - -b shape line color: Color blue trans. -es := b edges connectToAll: #dependentClasses. -b layout force charge: -500. -b normalizer - edges: es; - normalizeLineWidthBasedOnOccurences: #dependentClassesWithOccurences -b -" - -"Here is another example: - v := RTView new. - v addAll: (RTBox elementsOn: #(1 2 3)) @ RTDraggable @ RTPopup. - eb := RTEdgeBuilder new. - eb view: v. - - as := OrderedCollection new. - as add: 1 -> 2. - as add: 1 -> 3. - as add: 3 -> 1. - eb shape line color: Color blue trans. - eb useAssociations: as. - - rel := Dictionary new. - rel at: 1 put: #(2 3 3). - rel at: 3 put: #(1 1 1). - - mn := RTMetricNormalizer new. - mn elements: v elements. - mn normalizeLineWidthBasedOnOccurences: [ :aNumber | rel at: aNumber ]. - v" - - | metricBlock d fromElements | - d := Dictionary new. - fromElements := self edges collect: [ :edge | edge model key ] as: Set. - fromElements do: [ :aFromElement | - | t | - t := (oneArgMetricBlock rtValue: aFromElement) groupedBy: #yourself. - t := t associations collect: [ :assoc | assoc key -> assoc value size ]. - d at: aFromElement put: t ]. - - - metricBlock := [ :from :to | - | tt | - tt := (d at: from) detect: [ :assc | assc key = to ] ifNone: [ #foo -> 0 ]. - tt value ]. - - ^ self normalizeLineWidth: metricBlock min: 0.5 max: 30 -] - -{ #category : #'public normalize position' } -RTMetricNormalizer >> normalizePosition: metricBlock min: minValue max: maxValue [ - "metricBlock is evaluated on each node model. - minValue and maxValue are integer representing the minimum and maximum size in pixels for each node" - self normalizePosition: metricBlock min: minValue max: maxValue using: #yourself -] - -{ #category : #'public normalize position' } -RTMetricNormalizer >> normalizePosition: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation [ - "aBlock is evaluated on each node model" - - | values | - values := (self getNormalizedValues: metricBlock - min: min max: max - minValue: minValue maxValue: maxValue - using: transformation). - elements with: values do: [ :el :v | translator translate: el to: el position + (v asIntegerPoint) ] - -] - -{ #category : #'public normalize position' } -RTMetricNormalizer >> normalizePosition: metricBlock min: min max: max using: transformation [ - "aBlock is evaluated on each node model" - - | minValue maxValue | - "We get the min and the max of the metric for all the elements" - minValue := transformation rtValue: (metricBlock rtValue: elements anyOne model). - maxValue := minValue. - elements do: [ :el | - | t | - t := transformation rtValue: (metricBlock rtValue: el model). - minValue := minValue min: t. - maxValue := maxValue max: t ]. - - (maxValue - minValue) ~= (0 @ 0) ifTrue: [ - elements do: [ :el | - | tt t | - t := transformation rtValue: (metricBlock rtValue: el model). - "tt := minValue + (maxValue * (t - min) / max) asInteger." - tt := min + ((max - min) * ( (t - minValue) / (maxValue - minValue))) asIntegerPoint. - translator translate: el to: (tt) ] ] - -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeSize [ - "Normalize the size of each element. It also assume that each model is a numerical value" - self normalizeSize: #yourself -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeSize: metricBlock [ - "metricBlock is evaluated on each node model. - minValue and maxValue are integer representing the minimum and maximum size in pixels for each node" - self normalizeSize: metricBlock min: 5 max: 30 -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeSize: metricBlock max: maxValue [ - "metricBlock is evaluated on each node model. - minValue and maxValue are integer representing the minimum and maximum size in pixels for each node" - self normalizeSize: metricBlock min: 5 max: maxValue using: #yourself -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeSize: metricBlock min: minValue max: maxValue [ - "metricBlock is evaluated on each node model. - minValue and maxValue are integer representing the minimum and maximum size in pixels for each node" - self normalizeSize: metricBlock min: minValue max: maxValue using: #yourself -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeSize: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation [ - "aBlock is evaluated on each node model. - Colors is an array of colors used to do the fading" - - | values | - self checkNotEmpty. - - values := (self getNormalizedValues: metricBlock - min: min max: max - minValue: minValue maxValue: maxValue - using: transformation). - elements with: values do: [ :el :v | el trachelShape extent: v @ v ] - - -" (maxValue - minValue) ~= 0 ifTrue: [ - elements do: [ :el | - | tt t | - t := transformation rtValue: (metricBlock rtValue: el model). - tt := min + ((max - min) * ( (t - minValue) / (maxValue - minValue))) asInteger. - el trachelShape extent: tt @ tt ] ] - - " -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeSize: metricBlock min: min max: max using: transformation [ - "aBlock is evaluated on each node model. - Colors is an array of colors used to do the fading" - - | minValue maxValue | - - self checkNotEmpty. - elements size <= 1 ifTrue: [ ^ self ]. - - "We get the min and the max of the metric for all the elements" - minValue := transformation rtValue: (metricBlock rtValue: elements anyOne model). - maxValue := minValue. - elements do: [ :el | - | t | - t := transformation rtValue: (metricBlock rtValue: el model). - minValue := minValue min: t. - maxValue := maxValue max: t ]. - - self normalizeSize: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeSize: metricBlock using: transformation [ - "metricBlock is evaluated on each node model. - minValue and maxValue are integer representing the minimum and maximum size in pixels for each node" - self normalizeSize: metricBlock min: 5 max: 30 using: transformation -] - -{ #category : #'public normalize x' } -RTMetricNormalizer >> normalizeTopLeftOfX: metricBlock [ - "metricBlock is evaluated on each node model" - ^ self normalizeTopLeftOfX: metricBlock min: 0 max: 200 -] - -{ #category : #'public normalize x' } -RTMetricNormalizer >> normalizeTopLeftOfX: metricBlock min: minValue max: maxValue [ - "metricBlock is evaluated on each node model. - minValue and maxValue are integer representing the minimum and maximum size in pixels for each node" - self normalizeTopLeftOfX: metricBlock min: minValue max: maxValue minValue: ((self elements collect: #model) collect: metricBlock) min maxValue: ((self elements collect: #model) collect: metricBlock) max using: #yourself -] - -{ #category : #'public normalize x' } -RTMetricNormalizer >> normalizeTopLeftOfX: metricBlock min: min max: max minValue: minValue maxValue: maxValue [ - " - metricBlock is evaluated on each node model. - - min represent the X value of the minimum value. - max represent the X value of the maximum value. - - minValue is the minimum value of the dataset. - maxValue is the maximum value of the dataset. - - [ minValue ; maxValue ] is mapped to [ min ; max ] - " - - self normalizeTopLeftOfX: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: #yourself -] - -{ #category : #'public normalize x' } -RTMetricNormalizer >> normalizeTopLeftOfX: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation [ - " - metricBlock is evaluated on each node model. - - min represent the X value of the minimum value. - max represent the X value of the maximum value. - - minValue is the minimum value of the dataset. - maxValue is the maximum value of the dataset. - - [ minValue ; maxValue ] is mapped to [ min ; max ] - - transformation is used to transform the metric value" - - (maxValue - minValue) ~= 0 ifTrue: [ - elements do: [ :el | - | tt t | - t := transformation rtValue: (metricBlock rtValue: el model). - tt := self getValue: t min: min max: max minValue: minValue maxValue: maxValue. - translator translateTopLeftOf: el to: "el encompassingRectangle topLeft +" (tt @ 0) ] ] -] - -{ #category : #'public normalize x' } -RTMetricNormalizer >> normalizeTopLeftOfX: metricBlock min: min max: max minValue: minValue using: transformation [ - "metricBlock is evaluated on each node model. - min represent the X value of the minimum value. - max represent the X value of the maximum value. - transformation is used to transform the metric value" - - | maxValue | - "We get the min and the max of the metric for all the elements" - maxValue := transformation rtValue: (metricBlock rtValue: elements anyOne model). - elements do: [ :el | - | t | - t := transformation rtValue: (metricBlock rtValue: el model). - maxValue := maxValue max: t ]. - - self normalizeTopLeftOfX: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeWidth: metricBlock [ - "metricBlock is evaluated on each node model." - ^ self normalizeWidth: metricBlock min: 5 max: 30 -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeWidth: metricBlock max: maxValue [ - "metricBlock is evaluated on each node model. - maxValue is an integer representing the maximum size in pixels for each node" - self normalizeWidth: metricBlock min: 5 max: maxValue -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeWidth: metricBlock min: minValue max: maxValue [ - "metricBlock is evaluated on each node model. - minValue and maxValue are integer representing the minimum and maximum size in pixels for each node" - self normalizeWidth: metricBlock min: minValue max: maxValue using: #yourself -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeWidth: metricBlock min: min max: max minValue: minValue [ - "aBlock is evaluated on each node model" - - ^ self normalizeWidth: metricBlock min: min max: max minValue: minValue using: #yourself -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeWidth: metricBlock min: min max: max minValue: minValue maxValue: maxValue [ - "aBlock is evaluated on each node model" - - ^ self normalizeWidth: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: #yourself -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeWidth: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation [ - "aBlock is evaluated on each node model. - Colors is an array of colors used to do the fading" - - | values | - self checkNotEmpty. - - values := (self getNormalizedValues: metricBlock - min: min max: max - minValue: minValue maxValue: maxValue - using: transformation). - elements with: values do: [ :el :v | el trachelShape width: v ] - -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeWidth: metricBlock min: min max: max minValue: minValue using: transformation [ - "aBlock is evaluated on each node model" - - | maxValue | - - self checkNotEmpty. - - "We get the max of the metric for all the elements" - maxValue := transformation rtValue: (metricBlock rtValue: elements anyOne model). - - elements do: [ :el | - | t | - t := transformation rtValue: (metricBlock rtValue: el model). - maxValue := maxValue max: t ]. - - self normalizeWidth: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation - -] - -{ #category : #'public normalize size' } -RTMetricNormalizer >> normalizeWidth: metricBlock min: min max: max using: transformation [ - "aBlock is evaluated on each node model. - Colors is an array of colors used to do the fading" - - | minValue maxValue | - - self checkNotEmpty. - - "We get the min and the max of the metric for all the elements" - minValue := transformation rtValue: (metricBlock rtValue: elements anyOne model). - maxValue := minValue. - elements do: [ :el | - | t | - t := transformation rtValue: (metricBlock rtValue: el model). - minValue := minValue min: t. - maxValue := maxValue max: t ]. - - - self normalizeWidth: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation. - -] - -{ #category : #'public normalize x' } -RTMetricNormalizer >> normalizeX: metricBlock [ - "metricBlock is evaluated on each node model" - ^ self normalizeX: metricBlock min: 0 max: 200 -] - -{ #category : #'public normalize x' } -RTMetricNormalizer >> normalizeX: metricBlock min: minValue max: maxValue [ - "metricBlock is evaluated on each node model. - minValue and maxValue are integer representing the minimum and maximum size in pixels for each node" - self normalizeX: metricBlock min: minValue max: maxValue using: #yourself -] - -{ #category : #'public normalize x' } -RTMetricNormalizer >> normalizeX: metricBlock min: min max: max minValue: minValue [ - "metricBlock is evaluated on each node model. - min represent the X value of the minimum value. - max represent the X value of the maximum value. - transformation is used to transform the metric value" - - ^ self normalizeX: metricBlock min: min max: max minValue: minValue using: #yourself -] - -{ #category : #'public normalize x' } -RTMetricNormalizer >> normalizeX: metricBlock min: min max: max minValue: minValue maxValue: maxValue [ - " - metricBlock is evaluated on each node model. - - min represent the X value of the minimum value. - max represent the X value of the maximum value. - - minValue is the minimum value of the dataset. - maxValue is the maximum value of the dataset. - - [ minValue ; maxValue ] is mapped to [ min ; max ] - " - - ^ self normalizeX: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: #yourself -] - -{ #category : #'public normalize x' } -RTMetricNormalizer >> normalizeX: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation [ - " - metricBlock is evaluated on each node model. - - min represent the X value of the minimum value. - max represent the X value of the maximum value. - - minValue is the minimum value of the dataset. - maxValue is the maximum value of the dataset. - - [ minValue ; maxValue ] is mapped to [ min ; max ] - - transformation is used to transform the metric value" - - (maxValue - minValue) ~= 0 ifTrue: [ - elements do: [ :el | - | tt t | - t := transformation rtValue: (metricBlock rtValue: el model). - tt := self getValue: t min: min max: max minValue: minValue maxValue: maxValue. - translator translate: el to: el position + (tt @ 0) ] ] -] - -{ #category : #'public normalize x' } -RTMetricNormalizer >> normalizeX: metricBlock min: min max: max minValue: minValue using: transformation [ - "metricBlock is evaluated on each node model. - min represent the X value of the minimum value. - max represent the X value of the maximum value. - transformation is used to transform the metric value" - - | maxValue | - "We get the min and the max of the metric for all the elements" - maxValue := transformation rtValue: (metricBlock rtValue: elements anyOne model). - elements do: [ :el | - | t | - t := transformation rtValue: (metricBlock rtValue: el model). - maxValue := maxValue max: t ]. - - self normalizeX: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation -] - -{ #category : #'public normalize x' } -RTMetricNormalizer >> normalizeX: metricBlock min: min max: max using: transformation [ - "metricBlock is evaluated on each node model. - min represent the X value of the minimum value. - max represent the X value of the maximum value. - transformation is used to transform the metric value" - - | minValue maxValue | - "We get the min and the max of the metric for all the elements" - minValue := transformation rtValue: (metricBlock rtValue: elements anyOne model). - maxValue := minValue. - elements do: [ :el | - | t | - t := transformation rtValue: (metricBlock rtValue: el model). - minValue := minValue min: t. - maxValue := maxValue max: t ]. - - self normalizeX: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation -] - -{ #category : #'public normalize y' } -RTMetricNormalizer >> normalizeY: metricBlock [ - "metricBlock is evaluated on each node model." - self normalizeY: metricBlock min: 0 max: 200 -] - -{ #category : #'public normalize y' } -RTMetricNormalizer >> normalizeY: metricBlock min: minValue max: maxValue [ - "metricBlock is evaluated on each node model. - minValue and maxValue are integer representing the minimum and maximum size in pixels for each node" - self normalizeY: metricBlock min: minValue max: maxValue using: #yourself -] - -{ #category : #'public normalize y' } -RTMetricNormalizer >> normalizeY: metricBlock min: min max: max minValue: minValue [ - "metricBlock is evaluated on each node model. - min represent the X value of the minimum value. - max represent the X value of the maximum value. - transformation is used to transform the metric value" - - ^ self normalizeY: metricBlock min: min max: max minValue: minValue using: #yourself -] - -{ #category : #'public normalize y' } -RTMetricNormalizer >> normalizeY: metricBlock min: min max: max minValue: minValue maxValue: maxValue [ - " - metricBlock is evaluated on each node model. - - min represent the X value of the minimum value. - max represent the X value of the maximum value. - - minValue is the minimum value of the dataset. - maxValue is the maximum value of the dataset. - - [ minValue ; maxValue ] is mapped to [ min ; max ] - " - - self normalizeY: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: #yourself -] - -{ #category : #'public normalize y' } -RTMetricNormalizer >> normalizeY: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation [ - " - metricBlock is evaluated on each node model. - - min represent the Y value of the minimum value. - max represent the Y value of the maximum value. - - minValue is the minimum value of the dataset. - maxValue is the maximum value of the dataset. - - [ minValue ; maxValue ] is mapped to [ min ; max ] - - transformation is used to transform the metric value" - - (maxValue - minValue) ~= 0 ifTrue: [ - elements do: [ :el | - | tt t | - t := transformation rtValue: (metricBlock rtValue: el model). - tt := self getValue: t min: min max: max minValue: minValue maxValue: maxValue. - translator translate: el to: el position + (0 @ tt) ] ] -] - -{ #category : #'public normalize y' } -RTMetricNormalizer >> normalizeY: metricBlock min: min max: max minValue: minValue using: transformation [ - "metricBlock is evaluated on each node model. - min represent the X value of the minimum value. - max represent the X value of the maximum value. - transformation is used to transform the metric value" - - | maxValue | - "We get the min and the max of the metric for all the elements" - maxValue := transformation rtValue: (metricBlock rtValue: elements anyOne model). - elements do: [ :el | - | t | - t := transformation rtValue: (metricBlock rtValue: el model). - maxValue := maxValue max: t ]. - - self normalizeY: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation -] - -{ #category : #'public normalize y' } -RTMetricNormalizer >> normalizeY: metricBlock min: min max: max using: transformation [ - "metricBlock is evaluated on each node model. - min represent the X value of the minimum value. - max represent the X value of the maximum value. - transformation is used to transform the metric value" - - | minValue maxValue | - "We get the min and the max of the metric for all the elements" - maxValue := transformation rtValue: (metricBlock rtValue: elements anyOne model). - minValue := maxValue. - - elements do: [ :el | - | t | - t := transformation rtValue: (metricBlock rtValue: el model). - minValue := minValue min: t. - maxValue := maxValue max: t ]. - - self normalizeY: metricBlock min: min max: max minValue: minValue maxValue: maxValue using: transformation -] - -{ #category : #accessing } -RTMetricNormalizer >> objects: someObjects [ - self assert: [ view notNil ] description: 'A view has to be set'. - - self elements: (self view elementsFromModels: someObjects) -] - -{ #category : #'public translation' } -RTMetricNormalizer >> smoothTranslation [ - translator := RTSmoothLayoutTranslator new -] - -{ #category : #accessing } -RTMetricNormalizer >> view [ - ^ view -] - -{ #category : #accessing } -RTMetricNormalizer >> view: aViewOrAGroup [ - view := aViewOrAGroup -] diff --git a/src/Roassal2/RTMetricNormalizerTest.class.st b/src/Roassal2/RTMetricNormalizerTest.class.st deleted file mode 100644 index d33b1656d..000000000 --- a/src/Roassal2/RTMetricNormalizerTest.class.st +++ /dev/null @@ -1,400 +0,0 @@ -Class { - #name : #RTMetricNormalizerTest, - #superclass : #RTTest, - #category : #'Roassal2-ColorNormalizer-Tests' -} - -{ #category : #'test y' } -RTMetricNormalizerTest >> testBasicNegativeRange [ - - | es | - es := RTEllipse new elementsOn: (Array with: 0 @ 0 with: 50 @ 25 with: 100 @ 50). - - RTMetricNormalizer new - elements: es; - normalizeY: #y min: -200 max: 200. - self assert: (es collect: #position) asArray equals: (Array with: 0 @ -200 with: 0 @ 0 with: 0 @ 200) -] - -{ #category : #'test y' } -RTMetricNormalizerTest >> testBasicNegativeRange2 [ - - | es | - es := RTEllipse new elementsOn: (Array with: 0 @ 0 with: 50 @ 25 with: 100 @ 50). - - RTMetricNormalizer new - elements: es; - normalizeY: #y min: -200 max: -100. - self assert: (es collect: #position) asArray equals: (Array with: 0 @ -200 with: 0 @ -150 with: 0 @ -100) -] - -{ #category : #'test y' } -RTMetricNormalizerTest >> testBasicNegativeRange3 [ - - | es | - es := RTEllipse new elementsOn: (Array with: 0 @ 0 with: 50 @ 25 with: 100 @ 50). - - RTMetricNormalizer new - elements: es; - normalizeY: #y min: 0 max: -200. - self assert: (es collect: #position) asArray equals: (Array with: 0 @ 0 with: 0 @ -100 with: 0 @ -200) -] - -{ #category : #'test y' } -RTMetricNormalizerTest >> testBasicNegativeRange4 [ - - | es | - es := RTEllipse new elementsOn: (Array with: 0 @ 0 with: 50 @ 25 with: 100 @ 50). - - RTMetricNormalizer new - elements: es; - normalizeY: #y min: -200 max: 0. - self assert: (es collect: #position) asArray equals: (Array with: 0 @ -200 with: 0 @ -100 with: 0 @ 0) -] - -{ #category : #'test x' } -RTMetricNormalizerTest >> testBasicNegativeRangeX [ - - | es | - es := RTEllipse new elementsOn: (Array with: 0 with: 25 with: 50). - - RTMetricNormalizer new - elements: es; - normalizeX: #yourself min: -200 max: 200. - self assert: (es collect: #position) asArray equals: (Array with: -200 @ 0 with: 0 @ 0 with: 200 @ 0) -] - -{ #category : #'test y' } -RTMetricNormalizerTest >> testBasicPositiveRange [ - - | es | - es := RTEllipse new elementsOn: (Array with: 0 @ 0 with: 50 @ 25 with: 100 @ 50). - - RTMetricNormalizer new - elements: es; - normalizeY: #y min: 0 max: 200. - self assert: (es collect: #position) asArray equals: (Array with: 0 @ 0 with: 0 @ 100 with: 0 @ 200) -] - -{ #category : #'test size' } -RTMetricNormalizerTest >> testBasicPositiveRangeSize [ - - | es | - es := RTEllipse new elementsOn: (Array with: 0 with: 25 with: 50). - - RTMetricNormalizer new - elements: es; - normalizeSize: #yourself min: 0 max: 200. - self assert: (es collect: [ :e | e extent x ]) asArray equals: (Array with: 0 with: 100 with: 200) -] - -{ #category : #'test size' } -RTMetricNormalizerTest >> testBasicPositiveRangeWidth [ - - | es | - es := RTEllipse new elementsOn: (Array with: 25 with: 50). - - RTMetricNormalizer new - elements: es; - normalizeWidth: #yourself min: 0 max: 200. - self assert: (es collect: [ :e | e extent x ]) asArray equals: (Array with: 0 with: 200) -] - -{ #category : #'test size' } -RTMetricNormalizerTest >> testBasicPositiveRangeWidth2 [ - - | es | - es := RTEllipse new elementsOn: (Array with: 25 with: 50). - - RTMetricNormalizer new - elements: es; - normalizeWidth: #yourself min: 0 max: 200 minValue: 0. - self assert: (es collect: [ :e | e extent x ]) asArray equals: (Array with: 100 with: 200) -] - -{ #category : #'test x' } -RTMetricNormalizerTest >> testBasicPositiveRangeX [ - - | es | - es := RTEllipse new elementsOn: (Array with: 0 with: 25 with: 50). - - RTMetricNormalizer new - elements: es; - normalizeX: #yourself min: 0 max: 200. - self assert: (es collect: #position) asArray equals: (Array with: 0 @ 0 with: 100 @ 0 with: 200 @ 0) -] - -{ #category : #'test x' } -RTMetricNormalizerTest >> testBasicPositiveRangeX2 [ - - | es | - es := RTEllipse new elementsOn: (Array with: 25 with: 50). - - RTMetricNormalizer new - elements: es; - normalizeX: #yourself min: 0 max: 200 minValue: 0 maxValue: 50. - self assert: (es collect: #position) asArray equals: (Array with: 100 @ 0 with: 200 @ 0) -] - -{ #category : #'test x' } -RTMetricNormalizerTest >> testBasicPositiveRangeX3 [ - - | es | - es := RTEllipse new elementsOn: (Array with: 25 with: 50). - - RTMetricNormalizer new - elements: es; - normalizeX: #yourself min: 0 max: 200 minValue: 0. - self assert: (es collect: #position) asArray equals: (Array with: 100 @ 0 with: 200 @ 0) -] - -{ #category : #'test colors' } -RTMetricNormalizerTest >> testColorFading [ - - | v1 objects es1 v2 es2 | - v1 := RTView new. - objects := (0 to: 1). - es1 := RTBox new elementsOn: objects. - v1 addAll: es1. - RTHorizontalLineLayout on: es1. - RTMetricNormalizer new - elements: es1; - normalizeColor: #yourself. - - v2 := RTView new. - objects := (10 to: 11). - es2 := RTBox new elementsOn: objects. - v2 addAll: es2. - RTHorizontalLineLayout new gapSize: 0; on: es2. - RTMetricNormalizer new - elements: es2; - normalizeColor: #yourself. - - es1 with: es2 do: [ :e1 :e2 | self assert: e1 trachelShape color equals: e2 trachelShape color ]. - self assert: es1 first trachelShape color equals: Color gray. - self assert: es1 second trachelShape color equals: Color red. -] - -{ #category : #'test colors' } -RTMetricNormalizerTest >> testColors [ - - | v objects es n | - v := RTView new. - objects := (1 to: 5). - es := RTBox new elementsOn: objects. - v addAll: es. - - self assert: (es collect: [ :e | e trachelShape color ]) asSet size equals: 1. - - n := RTMetricNormalizer new. - n view: v. - n objects: objects. - n distinctColor. - self assert: (es collect: [ :e | e trachelShape color ]) asSet size equals: 5. -] - -{ #category : #'test colors' } -RTMetricNormalizerTest >> testColors02 [ - - | v objects es n | - v := RTView new. - objects := (1 to: 5). - es := RTBox new elementsOn: objects. - v addAll: es. - - self assert: (es collect: [ :e | e trachelShape color ]) asSet size equals: 1. - - n := RTMetricNormalizer new. - n view: v. - n objects: objects. - n distinctColorUsing: #odd. - self assert: (es collect: [ :e | e trachelShape color ]) asSet size equals: 2. -] - -{ #category : #'test colors' } -RTMetricNormalizerTest >> testDistinctColor [ - - | v data es n | - v := RTView new. - data := #((1) (2) (1 2)). - data do: [ :d | - v addAll: (RTEllipse elementsOn: d) @ RTPopup. - ]. - - "Checking RTView>>elementsFromModels:" - self assert: (v elementsFromModels: #(1 2)) size equals: 4. - - RTGridLayout on: v elements. - n := RTMetricNormalizer new. - n - view: v; - objects: #(1 2); - distinctColor. - - self assert: v numberOfElements equals: 4. - - "Checking the normalizer" - self assert: n elements size equals: 4. - - "For elements 1" - es := v elementsFromModel: 1. - self assert: es size equals: 2. - self assert: (es collect: [ :e | e trachelShape color ]) asSet size equals: 1. - - "For elements 2" - es := v elementsFromModel: 2. - self assert: es size equals: 2. - self assert: (es collect: [ :e | e trachelShape color ]) asSet size equals: 1. - - "Elements 1 and 2 have different color" - self assert: (v elementFromModel: 1) trachelShape color ~= (v elementFromModel: 2) trachelShape color -] - -{ #category : #'test edges width' } -RTMetricNormalizerTest >> testEdgesWidth01 [ - - | v eb as rel mn trLines | - v := RTView new. - v addAll: (RTBox elementsOn: #(1 2 3)). - eb := RTEdgeBuilder new. - eb view: v. - - as := OrderedCollection new. - as add: 1 -> 2. - as add: 1 -> 3. - as add: 3 -> 1. - eb useAssociations: as. - - rel := Dictionary new. - rel at: 1 put: #(2 3 3). - rel at: 3 put: #(1 1 1). - - mn := RTMetricNormalizer new. - mn elements: v elements. - mn normalizeLineWidthBasedOnOccurences: [ :aNumber | rel at: aNumber ]. - - v edges do: #updateShape. - "v open delete." - - self assert: v numberOfEdges equals: 3. - trLines := v canvas shapes select: #isLineShape. - self assert: trLines size equals: 3. - - self assert: trLines first element from model equals: 1. - self assert: trLines first element to model equals: 2. - self assert: trLines first width equals: 0.5. - - self assert: trLines second element from model equals: 1. - self assert: trLines second element to model equals: 3. - self assert: trLines second width equals: 15.25. - - self assert: trLines third element from model equals: 3. - self assert: trLines third element to model equals: 1. - self assert: trLines third width equals: 30. - - - -] - -{ #category : #'test edges width' } -RTMetricNormalizerTest >> testEdgesWidth02 [ - - | v eb as rel mn | - v := RTView new. - v addAll: (RTBox elementsOn: #(1 2 3)). - eb := RTEdgeBuilder new. - eb view: v. - - as := OrderedCollection new. - as add: 1 -> 2. - as add: 1 -> 3. - as add: 3 -> 1. - eb useAssociations: as. - - self assert: v edges first model equals: 1->2. - - rel := Dictionary new. - rel at: 1 put: #(2 3 3). - rel at: 3 put: #(1 1 1). - - mn := RTMetricNormalizer new. - mn elements: v elements. - mn normalizeLineWidthBasedOnOccurences: [ :aNumber | rel at: aNumber ]. - - v edges do: #updateShape. - "v open delete." - - self assert: v edges first model equals: 1->2. - -] - -{ #category : #'test edges width' } -RTMetricNormalizerTest >> testLineWidthAndArrowedLine [ - | b edgeElements | - b := RTMondrian new. - b nodes: #(1 2 3). - b shape shape: RTArrowedLine new. - edgeElements := b edges useAssociations: (Array with: 1 -> 2 with: 1 -> 3). - b normalizer - edges: edgeElements; - normalizeLineWidth: [ :from :to | from + to ] min: 1 max: 10. - b layout horizontalLine. - - b view edges do: #updateShape. - - - self assert: edgeElements second trachelShape shapes first width equals: 10. - self assert: edgeElements first trachelShape shapes first width equals: 1 -] - -{ #category : #'test edges width' } -RTMetricNormalizerTest >> testLineWidthIsNotFraction [ - -| data b edgeElements | -data := Collection withAllSubclasses . - -b := RTMondrian new. -b shape circle. -b nodes: data. - -edgeElements := b edges connectFrom: [ :c | c superclass ]. - -b normalizer - edges: edgeElements; - normalizeLineWidth: [ :from :to | to numberOfMethods ] min: 1 max: 10. - -b layout tree. -b build. - -"Drawing the visualization in a mock Pharo Canvas" -b view canvas buildMorph drawOnMockCanvas. - -] - -{ #category : #'test x' } -RTMetricNormalizerTest >> testNormalizeXBugTracking [ - - | es | - es := RTBox elementsOn: (0.0 to: 1.0 by: 0.005). - self assert: es size equals: (0.0 to: 1.0 by: 0.005) size. - - RTMetricNormalizer new - elements: es; - normalizeElementX: [ :anElement | #yourself rtValue: anElement model ] - min: 0 - max: 300 - minValue: 0 - maxValue: 1.2. - - RTMetricNormalizer new - elements: es; - normalizeY: [ :model | #yourself rtValue: model ] - min: 0 - max: 300 - minValue: 0 - maxValue: 1.2. - " - es collect: #position - " - self assert: (es allSatisfy: [ :e | e position x = e position y ]) -] diff --git a/src/Roassal2/RTMicroprint.class.st b/src/Roassal2/RTMicroprint.class.st deleted file mode 100644 index 90a45fd17..000000000 --- a/src/Roassal2/RTMicroprint.class.st +++ /dev/null @@ -1,74 +0,0 @@ -Class { - #name : #RTMicroprint, - #superclass : #RTBuilder, - #instVars : [ - 'nbOfHorizontal', - 'rules' - ], - #category : #'Roassal2-Builder-Microprint' -} - -{ #category : #'as yet unclassified' } -RTMicroprint >> createView [ - ^ RTView new @ RTDraggableView -] - -{ #category : #'as yet unclassified' } -RTMicroprint >> example01 [ - - - | b | - b := RTMicroprint new. - b lineMatching: '*view*' color: Color red trans. - b lineMatching: '*roassal*' color: Color green trans. - b lineMatching: '*shape*' color: Color blue trans. - b texts: (RTBuilder methods collect: #sourceCode). - ^ b -] - -{ #category : #'as yet unclassified' } -RTMicroprint >> initialize [ - super initialize. - rules := OrderedCollection new. - nbOfHorizontal := 5. -] - -{ #category : #'as yet unclassified' } -RTMicroprint >> lineMatching: pattern color: aColor [ - rules add: pattern -> aColor -] - -{ #category : #accessing } -RTMicroprint >> nbOfHorizontal [ - ^ nbOfHorizontal -] - -{ #category : #accessing } -RTMicroprint >> nbOfHorizontal: anObject [ - nbOfHorizontal := anObject -] - -{ #category : #'as yet unclassified' } -RTMicroprint >> texts: someTexts [ - | aShape aRoassalLine | - aShape := RTBox new. - aShape width: [ :aText | (aText lines collect: #size) max ]. - aShape height: [ :aText | aText lines size ]. - view addAll: (aShape elementsOn: someTexts). - view elements @ RTPopup. - RTGridLayout new - lineItemsCount: nbOfHorizontal; - on: view elements. - - view elements do: [ :e | - e model lines doWithIndex: [ :aLine :index | - rules do: [ :as | - (as key match: aLine) ifTrue: [ - aRoassalLine := RTBox new color: as value; width: e encompassingRectangle width; height: 2; elementOn: aLine. - view add: aRoassalLine. - aRoassalLine @ RTPopup. - aRoassalLine translateTo: e position + (0 @ (index - (e encompassingRectangle height / 2))) - ] ] - ] - ] -] diff --git a/src/Roassal2/RTMockEdge.class.st b/src/Roassal2/RTMockEdge.class.st deleted file mode 100644 index ed05a3133..000000000 --- a/src/Roassal2/RTMockEdge.class.st +++ /dev/null @@ -1,29 +0,0 @@ -Class { - #name : #RTMockEdge, - #superclass : #RTObject, - #instVars : [ - 'from', - 'to' - ], - #category : #'Roassal2-Layouts' -} - -{ #category : #accessing } -RTMockEdge >> from [ - ^ from -] - -{ #category : #accessing } -RTMockEdge >> from: aMockElement [ - from := aMockElement -] - -{ #category : #accessing } -RTMockEdge >> to [ - ^ to -] - -{ #category : #accessing } -RTMockEdge >> to: aMockElement [ - to := aMockElement -] diff --git a/src/Roassal2/RTMockElement.class.st b/src/Roassal2/RTMockElement.class.st deleted file mode 100644 index abff0b46e..000000000 --- a/src/Roassal2/RTMockElement.class.st +++ /dev/null @@ -1,55 +0,0 @@ -Class { - #name : #RTMockElement, - #superclass : #RTObject, - #instVars : [ - 'realElement', - 'position' - ], - #category : #'Roassal2-Layouts' -} - -{ #category : #action } -RTMockElement >> applyToRealElement [ - realElement translateTo: position -] - -{ #category : #'as yet unclassified' } -RTMockElement >> extent [ - ^ realElement extent -] - -{ #category : #'as yet unclassified' } -RTMockElement >> height [ - ^ realElement height -] - -{ #category : #accessing } -RTMockElement >> position [ - ^ position -] - -{ #category : #accessing } -RTMockElement >> realElement [ - ^ realElement -] - -{ #category : #accessing } -RTMockElement >> realElement: rtElement [ - realElement := rtElement. - position := rtElement position -] - -{ #category : #actions } -RTMockElement >> translateTo: aPosition [ - position := aPosition -] - -{ #category : #'as yet unclassified' } -RTMockElement >> view [ - ^ realElement view -] - -{ #category : #'as yet unclassified' } -RTMockElement >> width [ - ^ realElement width -] diff --git a/src/Roassal2/RTMondrian.class.st b/src/Roassal2/RTMondrian.class.st deleted file mode 100644 index c71401631..000000000 --- a/src/Roassal2/RTMondrian.class.st +++ /dev/null @@ -1,412 +0,0 @@ -" -A RTMondrian describes Mondrian, a domain-specific language that is adapted to represent polymetric views. More info about polymetric views in ""Michele Lanza and Stéphane Ducasse. Polymetric Views—A Lightweight Visual Approach to Reverse Engineering. In Transactions on Software Engineering (TSE) 29(9) p. 782—795, September 2003."" - -RTMondrian maintains a stack of frame, instances of RTMondrianFrame - -Instance Variables - currentFrame: - edgeBuilder: - metricNormalizer: - rootFrame: - -currentFrame - - xxxxx - -edgeBuilder - - xxxxx - -metricNormalizer - - xxxxx - -rootFrame - - xxxxx - -" -Class { - #name : #RTMondrian, - #superclass : #RTBuilder, - #instVars : [ - 'currentFrame', - 'edgeBuilder', - 'rootFrame', - 'recurrentBlock' - ], - #category : #'Roassal2-Builder-Mondrian' -} - -{ #category : #public } -RTMondrian >> applyLayout [ - layoutBuilder setUpElements: self topElements -] - -{ #category : #benchmarking } -RTMondrian >> benchmark [ - -" - -[ 100 timesRepeat: [| b | b := RTMondrianViewBuilder new. -b shape rectangle - width: [ :c | c numberOfVariables * 4]; - height: #numberOfMethods; - linearFillColor: #numberOfLinesOfCode within: RTShape withAllSubclasses. -b nodes: RTShape withAllSubclasses. -b edgesFrom: #superclass. -b treeLayout. -b build] ] timeToRun - - 0:00:00:00.393" - -" -[ 100 timesRepeat: [|b| b := RTMondrian new. -b shape rectangle - width: [ :c | c numberOfVariables * 4]; - height: #numberOfMethods; - linearFillColor: #numberOfLinesOfCode within: RTShape withAllSubclasses. -b nodes: RTShape withAllSubclasses. -b edges connectFrom: #superclass. -b layout tree. -b build ] ] timeToRun - 0:00:00:00.393" -] - -{ #category : #benchmarking } -RTMondrian >> benchmark02 [ - -" - -[ 100 timesRepeat: [| b | b := RTMondrianViewBuilder new. -b nodes: RTShape withAllSubclasses forEach: [ :c | b nodes: c methods ]. -b edgesFrom: #superclass. -b treeLayout. -b build] ] timeToRun - - 0:00:00:02.804" - -" -[ 100 timesRepeat: [|b| b := RTMondrian new. -b nodes: RTShape withAllSubclasses forEach: [ :c | b nodes: c methods ]. -b edges connectFrom: #superclass. -b layout tree. -b build ] ] timeToRun - 0:00:00:01.414" -] - -{ #category : #public } -RTMondrian >> build [ - super build. - self applyLayout -] - -{ #category : #'deprecated - compatibility layer' } -RTMondrian >> circleLayout [ - ^ self layout circle -] - -{ #category : #hooks } -RTMondrian >> computeColorForNode [ - ^ Color gray: ((5 - (self currentDepth + 1 min: 5)) / 5.0) asFloat -] - -{ #category : #hooks } -RTMondrian >> createInteractionBuilder [ - ^ RTInteractionBuilder new popup; draggable; yourself -] - -{ #category : #factories } -RTMondrian >> createLayoutBuilder [ - | newLayoutBuilder | - newLayoutBuilder := RTLayoutBuilder new. - newLayoutBuilder horizontalLine. - ^ newLayoutBuilder -] - -{ #category : #factories } -RTMondrian >> createNewFrame [ - ^ RTMondrianFrame new -] - -{ #category : #hooks } -RTMondrian >> createShapeBuilder [ - | sb | - sb := RTBoundedShapeBuilder new. - sb shapeInitializer: - [ :aShape | sb color: self computeColorForNode ]. - ^ sb -] - -{ #category : #hooks } -RTMondrian >> createView [ - ^ super createView @ RTDraggableView -] - -{ #category : #accessing } -RTMondrian >> currentDepth [ - ^ self currentFrame depth -] - -{ #category : #accessing } -RTMondrian >> currentElements [ - ^ self currentFrame elements -] - -{ #category : #accessing } -RTMondrian >> currentFrame [ - ^ currentFrame -] - -{ #category : #accessing } -RTMondrian >> edges [ - edgeBuilder - elements: self currentElements; - view: view; - shapeBuilder: shapeBuilder. - ^ edgeBuilder -] - -{ #category : #'deprecated - compatibility layer' } -RTMondrian >> edges: objects from: fromBlock to: toBlock [ - ^ self edges - objects: objects; - connectFrom: fromBlock to: toBlock - -] - -{ #category : #'deprecated - compatibility layer' } -RTMondrian >> edgesFrom: aBlock [ - ^ self edges connectFrom: aBlock -] - -{ #category : #'deprecated - compatibility layer' } -RTMondrian >> flowLayout [ - ^ self layout flow -] - -{ #category : #initialization } -RTMondrian >> initialize [ - rootFrame := self createNewFrame. - currentFrame := rootFrame. - super initialize. - self resetLayoutBuilder. - self resetEdgeBuilder -] - -{ #category : #accessing } -RTMondrian >> layout [ - ^ layoutBuilder -] - -{ #category : #hooks } -RTMondrian >> metricNormalizerClass [ - ^ RTMetricNormalizer -] - -{ #category : #'public - nodes' } -RTMondrian >> node: anObject [ - "Add a new node represengint an object to the view - - For example: - b := RTMondrian new. - b node: 10. - b node: 20. - b open - " - ^ (self nodes: (Array with: anObject)) first -] - -{ #category : #'public - nodes' } -RTMondrian >> node: anObject forIt: aBlock [ - "Add a new node represengint an object to the view. The node is a container for other objects. - - For example: - b := RTMondrian new. - b node: 10 forIt: [ b nodes: (1 to: 5) ]. - b node: 20 forIt: [ b nodes: (1 to: 5) ]. - b open - " - ^ (self nodes: (Array with: anObject) forEach: [ :each | aBlock value ]) first -] - -{ #category : #'public - nodes' } -RTMondrian >> nodes: objects [ - "Add a new node represengint an object to the view. The node is a container for other objects. - - For example: - b := RTMondrian new. - b nodes: (1 to: 10). - b layout force. - b open - - - Another example: - b := RTMondrian new. - b shape box size: #numberOfMethods. - b nodes: Collection withAllSubclasses. - b layout flow. - b open - - Another example: - b := RTMondrian new. - b shape box size: #numberOfMethods. - b nodes: Collection withAllSubclasses. - b edges connectFrom: #superclass. - b normalizer - normalizeSize: #numberOfMethods; - normalizeColor: #numberOfMethods. - b layout cluster. - b open - " - - | els | - self assert: [ objects isCollection ] description: 'You need to provide a collection to #nodes:'. - els := self elementsOn: objects. - self currentFrame addElements: els. - view addAll: els. - self resetShapeBuilder. - self resetLayoutBuilder. - self resetInteraction. - ^ els -] - -{ #category : #'public - nodes' } -RTMondrian >> nodes: objects forEach: aOneArgBlock [ - "Add new nodes representing for each object to the view. Each node is a container for other objects. - - For example: - b := RTMondrian new. - b nodes: (1 to: 10) forEach: [ :valueBetween1And10 | - b nodes: (1 to: valueBetween1And10). - b layout grid ]. - b layout grid. - b open - - - Another example: - b := RTMondrian new. - b shape box size: #numberOfMethods. - b nodes: Collection withAllSubclasses forEach: [ :cls | - b nodes: cls methods. - b layout grid. ]. - b edges connectFrom: #superclass. - b layout tree. - b open - " - | result | - result := self nodes: objects. - - result do: [ :element | - self pushNewFrame. - self resetShapeBuilder. - self resetLayoutBuilder. - self resetEdgeBuilder. - self resetInteraction. - - aOneArgBlock rtValue: element model. - RTNest new - layout: layoutBuilder layout; - on: element nest: self currentFrame elements. - self popFrame. - ]. - self resetShapeBuilder. - self resetLayoutBuilder. - self resetInteraction. - ^ result -] - -{ #category : #stack } -RTMondrian >> numberOfAllFrames [ - "Return the number of all the frame accessible within the builder" - ^ rootFrame numberOfAllFrames -] - -{ #category : #stack } -RTMondrian >> popFrame [ - currentFrame := currentFrame parentFrame -] - -{ #category : #stack } -RTMondrian >> pushFrame: aFrame [ - currentFrame pushFrame: aFrame. - currentFrame := aFrame. - ^ aFrame -] - -{ #category : #stack } -RTMondrian >> pushNewFrame [ - ^ self pushFrame: self createNewFrame -] - -{ #category : #'public - recursive nodes' } -RTMondrian >> recurTo: anObject [ - "This method is used to recur" - self assert: [ recurrentBlock notNil ] description: 'The #recurTo: message has to be called within a recursiveNodes:forEach: call'. - recurrentBlock value: anObject -] - -{ #category : #'public - recursive nodes' } -RTMondrian >> recursiveNodes: aDataStructure forEach: aOneArgBlock [ - "This method enables one to create recursive nested nodes" - - " - Here is an example: - --=-=-=-= - allElements := #(((1 2 (39 ) 2 )) 3). - b := RTMondrian new. - b recursiveNodes: allElements forEach: [ :elements | - b shape rectangle. - b nodes: elements forEach: [ :el | - el isArray ifTrue: [ b recurTo: el ] - ] ]. - b --=-=-=-= - - Another example: --=-=-=-= - root := '/Users/alexandrebergel/Documents' asFileReference. - b := RTMondrian new. - b - recursiveNodes: root - forEach: [ :aFileReference | - b shape box if: [ :aFile | aFile basename endsWith: '.pdf' ] color: Color green. - aFileReference isDirectory - ifTrue: [ b nodes: aFileReference children forEach: [ :aFileRef | b recurTo: aFileRef ] ] - ifFalse: [ b node: aFileReference ]. - b layout grid ]. - b --=-=-=-= - " - - recurrentBlock := aOneArgBlock. - aOneArgBlock value: aDataStructure. - recurrentBlock := nil -] - -{ #category : #initialization } -RTMondrian >> resetEdgeBuilder [ - edgeBuilder := RTEdgeBuilder new -] - -{ #category : #initialization } -RTMondrian >> resetLayoutBuilder [ - layoutBuilder := self createLayoutBuilder -] - -{ #category : #initialization } -RTMondrian >> resetShapeBuilder [ - shapeBuilder := self createShapeBuilder -] - -{ #category : #accessing } -RTMondrian >> rootFrame [ - ^ rootFrame -] - -{ #category : #stack } -RTMondrian >> topElements [ - ^ rootFrame elements -] - -{ #category : #'deprecated - compatibility layer' } -RTMondrian >> treeLayout [ - ^ self layout tree -] diff --git a/src/Roassal2/RTMondrianExample.class.st b/src/Roassal2/RTMondrianExample.class.st deleted file mode 100644 index 6050567ac..000000000 --- a/src/Roassal2/RTMondrianExample.class.st +++ /dev/null @@ -1,4040 +0,0 @@ -" -RTMondrianExample new installTitle: 'ClusterLayout' - code: - ' -| b | -b := RTMondrian new. - -b shape circle. -b nodes: RTObject withAllSubclasses. - -b shape line color: (Color blue alpha: 0.4). -b edges connectFrom: #superclass. - -b normalizer - objects: RTObject withAllSubclasses; - normalizeSize: #numberOfMethods min: 5 max: 30 using: [:value | (value + 1) ln ]; - normalizeColor: #numberOfMethods using: {Color gray . Color blue. Color red } using: [ :value | (value + 1) ln ]. - -b layout cluster. -b build. -^ b' - -" -Class { - #name : #RTMondrianExample, - #superclass : #RTAbstractExample, - #category : #'Roassal2-Builder-Mondrian' -} - -{ #category : #sources } -RTMondrianExample >> example2015 [ - -| b toBeRed | -toBeRed := #(21 2 3 24 44 63 82 81 83 84 26 46 66 7 8 29 49 69 88 87 51 32 13 33 53 73 93 18 17 16 36 56 57 58 78 98 97 96 ). - -b := RTMondrian new. -b shape circle size: 15; - color: (Color veryLightGray alpha: 0.4); - if: [ :value | toBeRed includes: value ] fillColor: Color red. - -b nodes: (1 to: 100). -b edges - moveBehind; - connectToAll: [ :v | - v \\ 20 ~~ 0 - ifTrue: [ Array with: v + 1 with: v + 20 ] - ifFalse: [ Array with: v + 20 ] - ]. -b layout gridWithPerRow: 20. -b build. -^ b -] - -{ #category : #icons } -RTMondrianExample >> example2015Icon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAADmElEQVR4XuWa207yQBSFeUpP -Fz6Lh5cT9E7ggoMXHG4sXBBNRAjDP9OkzXTodDO0hf5+KyFm2T27la+d5UZb+z1fTVKL/xbw -gfDFB8IHwhcfCB8IX3wgfCB88YHwgfDFB8IXHwgfCF98IHwgfPGB8IHwxQfCB8IXHwhffCB8 -IHzxgfCB8MUHwgfCFx8IHwhffCB88YHwgfDFB8IHwhcfCB8IX3wgfCB88YHwxQfyh4Aore12 -q1K/2Sj18eH3br3kzfrx2O9D+0n9y15PYL9KgZjms9ksfq1WK6V+f9W+pZfrl3p+PvRuveTt -9U9PyvywGR/az/V2v8fH8Poi//Ag9qscyEZfgGne6XT0TTFWi3Y7vaCfuzsVOX4+n6t+v5/W -Sz7SX9P1t7dZf3MTnzupH41GmfXH+Oj1tbCf66O3t7R+fX0t+uR8bf0+2Od/f39Xy+VS1bJl -GdLmZLvdLj6BuVN+9MWo7+9cb+qHw2Fan+er7lfkzZMW0i+t//ry+6ur1Of1GwwGqa8+Q/RT -Et9pzjbm9br+09zpBcejouNa0+k02888ib7jUn3Z9VJ9jp9MJjVliCcjer1eZs9MvVTvZobU -z5Mp3W43U596KQNC10v1gq8eiH4U7Yyw99zcTLAzRWeClBnu8YM93cmU0MwomyG+87mZcdYM -ifd0/cMcvQcLGZB33M6U0H5SZpTNkFMyrN4MkTLj0hlS9nhoBh3Rr74Mkfb4oj0/L0Ok46EZ -Uva4681AZ2eI5M+dIWbitOcQaa5YOBniZk5RxuRmgpUh65wMkTLGzpC1kyFuZsXXVzR36F91 -XZ+sv+gc0rQMEY//uTnkiMyQMuGsc0gNc0Vov8tlSJlMqCJDQuaKU9ZLGdO0DFkIc0fdGRIy -lxyTIUUZeTCnNDVDgueEmueQshlyVL9GfZblZkCO/yyTKRfY8/+fOcT9bMrNAMmHZopnz3fX -15YhTZ9D3M+yopeXTAa4GeKbQ8zL3pPNK96TnXpfZiT1od6XIcn1uP7UOcTcMPb5zfdr/SxL -3d9n/l4R4s2dYi7O3mNtX3a92N88GSHXk9Rbc0eRl/rx/8mB/18nfPGB8IHwxQfCB8IXHwhf -fCB8IHzxgfCB8MUHwgfCFx8IHwhffCB88YHwgfDFB8IHwhcfCB8IX3wgfCB88YHwgfDfAj4Q -vvhA+ED44gPhA+GLD4QPhC8+ED4QvvhA+OID4QPhiw+ED4SvqvUPKQLC3FyCt+cAAAAASUVO -RK5CYII=' -] - -{ #category : #sources } -RTMondrianExample >> exampleArrowedLines [ - - | b | - b := RTMondrian new. - - b shape circle size: 30. - b nodes: (RTShape withAllSubclasses). - - b shape arrowedLine withShorterDistanceAttachPoint. - b edgesFrom: #superclass. - b layout forceWithCharge: -500. - b build. - ^ b view -] - -{ #category : #icons } -RTMondrianExample >> exampleArrowedLinesIcon [ - ^ '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' -] - -{ #category : #sources } -RTMondrianExample >> exampleBezier [ - - -| classes b | -(TRPlatform current dialogConfirm: 'This example takes a long time to load, execute?') - ifFalse: [ ^ self ]. -classes := RTObject withAllSubclasses, RTTest withAllSubclasses. - -b := RTMondrian new. -b shape circle. -b nodes: classes. -b edges connectFrom: #superclass. - -b shape bezierLineFollowing: #superclass; - color: (Color blue alpha: 0.2). -b edges - notUseInLayout; - connectToAll: #dependentClasses. -b normalizer - normalizeSize: #numberOfMethods using: #sqrt; - normalizeColor: #numberOfMethods using: (Array with: Color green with: Color red) using: #sqrt. -b layout cluster. -^ b -] - -{ #category : #icons } -RTMondrianExample >> exampleBezierIcon [ - ^ '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 -AABJRU5ErkJggg==' -] - -{ #category : #sources } -RTMondrianExample >> exampleBezierLines [ - -| b lb | -b := RTMondrian new. - -b shape circle color: (Color red alpha: 0.4). -b nodes: Collection withAllSubclasses. -b edges connectFrom: #superclass. - -b shape bezierLineFollowing: #superclass; color: (Color blue alpha: 0.1). -b edges - notUseInLayout; - connectToAll: #dependentClasses. - -b normalizer - normalizeSize: #numberOfMethods min: 5 max: 50. - -b layout force. -b build. - -lb := RTLegendBuilder new. -lb view: b view. -lb addText: 'Circle = classes, size = number of methods; gray links = inheritance;'. -lb addText: 'blue links = dependencies; layout = force based layout on the inheritance links'. -lb build. - -^ b view @ RTZoomableView. -] - -{ #category : #sources } -RTMondrianExample >> exampleBezierLinesAndLayout [ - - -| classes b | -classes := RTShape withAllSubclasses, TRShape withAllSubclasses. - -b := RTMondrian new. -b shape circle. -b nodes: classes. -b edges connectFrom: #superclass. - -b shape bezierLineFollowing: #superclass; - color: (Color blue alpha: 0.2). -b edges notUseInLayout; connectToAll: #dependentClasses. -b normalizer - normalizeSize: #numberOfMethods using: #sqrt; - normalizeColor: #numberOfMethods using: (Array with: Color green with: Color red) using: #sqrt. -b layout cluster. -b build. -^ b -] - -{ #category : #icons } -RTMondrianExample >> exampleBezierLinesAndLayoutIcon [ - ^ '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 -Xo4IAAAAAElFTkSuQmCC' -] - -{ #category : #icons } -RTMondrianExample >> exampleBezierLinesIcon [ - ^ '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 -NwUID4aJG+Dfra2tojMeEB/9/f3iOj8sD4QHxHUtFotSV34QLpfbYSakt8Vt8MMy0xg4rjc9 -Pa0wqa+vTzwY14vFYqKM75f7HxgYWOrs7BRler1e3D8+Pi7GyIxjxnDb8nj4Hr4uTyaup9Vq -FUDk8TADebz8TEzMeAaTr8t9MHHbzHD5Xh4D84Tvkycgj1se85ZEFoUQxMEDSSe5XL7G6QNm -onzO15kZ8jWZMrWVXie9LrclkwxUOnF5pn7k+twGrxxeHRqNRiljZvFqTe/nSf2tNfZkHiRf -53J55atfh6hfqauf1A/IbgZEVurJxIpLJlZea5FshW30ut/vX1X2uH7YekkmtpYeZ8Vkeqb1 -jjlTfzKx0k4fp8yrTOPP9JyPGyv/VgBhC2ZoaEhpnM1gVkxsXvJfPrhztiaY2Npii0geJP9l -S8doNIqDz/nh29vblcFyH0xs1fB1ZiozN9kiYmuHr3G53JdstfA5j4HPuQ6f8xhYgbPC5jLZ -RGVrivvnPtii42vymJhCodBSb2+vYjkxcf9y+zLw1dXV4nmY2KqSrT25L/nZ+C/X4zbYcmSr -TuYtl/E4+Xr6WGWLja/x87zAjObKbB0wo2RfgAfDlhM3zpXTTTkGjx+WB9fd3S3q8yC4Pj+U -bNbKbcnWEHfO53wfM4MtIXmm6XQ6MY5k4HlsfF9y/8xMboPLuD/5tww4m73cDgPDfbAfw9fk -Mcn9DQ4Oij7lycLM4jrJfpD8PDIg8rncF5/Lf7mceSL7PHwwGNwHrxa+nj5Wrivfy9fUr0N2 -mg7hVaD+Y+cc6l8h6jd71U/qB0T9gKif1A+I+gFRP6kfEPUDon562vT/8JCQvCkqBBMAAAAA -SUVORK5CYII=' -] - -{ #category : #sources } -RTMondrianExample >> exampleClassDependencies [ - - -| b | -(TRPlatform current dialogConfirm: 'This example takes a long time to load, execute?') - ifFalse: [ ^ self ]. -b := RTMondrian new. -b shape circle size: 8. -b nodes: RTObject withAllSubclasses. - -b shape line color: (Color gray alpha: 0.2). - -b edges - connectToAll: #dependentClasses. - -b normalizer - normalizeSize: #numberOfMethods using: #sqrt; - normalizeColor: [ :c | c withAllSuperclasses indexOf: RTObject ] using: (Array with: Color red with: Color gray); - alphaColor: 0.4. - -b layout forceWithCharge: -400. -b build. -^ b -] - -{ #category : #icons } -RTMondrianExample >> exampleClassDependenciesIcon [ - ^ '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 -SUVORK5CYII=' -] - -{ #category : #sources } -RTMondrianExample >> exampleClasses [ - - | b | - b := RTMondrian new. - b shape rectangle - withBorder; - width: #numberOfVariables; - height: #numberOfMethods; - fillColor: Color white. - b nodes: RTObject withAllSubclasses. - b layout grid. - b build. - ^ b view -] - -{ #category : #icons } -RTMondrianExample >> exampleClassesIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABjCAYAAABt56XsAAADOElEQVR4XuXdTW7CMBBAYW7K -UdjBMdjBLWDHMWAHtyCtkaYaTcexQ5zEzpuN1SSklT/s+Cd2N1237rher93lcnm38vduOj4I -H4QPwgfhg9QSj8eju9/vfJDcCJklmZablv6d9hgf5DcjQrUSqpfb7fbebrd/P9vzJaqfcA/J -/HBPOVZD9VZNlSUZIvF8Pt+73e7f+RIZpkuBBglfhPCF4IM4IH3XlX7oT3FfPshKgg/CB+GD -8EH4IMNjv99/WjlDWkh8kAnifD5/mrev12tUGu4TStiYlA+iqiDdD5D+hk3lfOy64/H4KWmS -xo7b8zWNd1UFovsGHojXh+g7nxoK4YNkguhhjZwM/3YMypYUPkgEZO5vMB8kE8SWlA4QVYMQ -Y8PPAj6I20OfIo2di/1ePkj3f4IqdT52nfQvNLRtSp9OJz5IqbGsFIh3fazlZu/Hr7JmAOlr -4sr9wpBLmJnkg1QCwn+ojwAZeh0fZCaQEr1yPkhFIPx+CB+ED8IH4YPwQfgg/GCA2CGMsYOK -fJCRIQN+HojuO+jjduqWDzJRSdEgASoGYj+r58ZzQr9VzwfJAPF617Yk9fXCh0ZNQE2A2JIy -FKTmElEtiLzGk/MeVekSwgf5Mghvn/D7IXyQeD9kyRLAn1NXzw5ZmpzKmLEP577P80EyMmaq -1pF3Xz5IZd9UPggfhA/CB+HHOpq9uenYz/NfJe0BSTWLvXd3LYhuRcleKSHlgxQEKTGk0gLE -qkBSEVuLyAdxQi8RmDv4L1s7cTgcPs8GL42dCxmZe+2QlA/itJL0zKB3TEpT7mopu3ucd8+a -9mVcHERaT94gY9+Cm1wQOzfvzdXzq6zMkpMC0ai1bpWBBLHfeHkLhQ+yMEhre/SuHoQ/lsUH -4YPwQfggfBA+CB+ED8IH4YPwQfggfBA+CB+ED8IH4YPwQaIgMomlJ7P4IAuCrD34IHwQPggf -hA/CB+GD8EH4IHwQPggfhA/CB+GD8EH4IHwQPggfhA/CB+GD8EH4IPxggUyxNUbL22tUt3FA -at263gDA/js9fU+98rZvz9/aVl01X2XFQOx1rSwExYDwnyEzg+hqp+WFn82D2A0HWo8fkhzJ -rlx6vgkAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTMondrianExample >> exampleClusterLayout [ - -| b | -b := RTMondrian new. - -b shape circle. -b nodes: RTObject withAllSubclasses. - -b shape line color: (Color blue alpha: 0.4). -b edges connectFrom: #superclass. - -b normalizer - objects: RTObject withAllSubclasses; - normalizeSize: #numberOfMethods min: 5 max: 30 using: [:value | (value + 1) ln ]; - normalizeColor: #numberOfMethods using: (Array with: Color gray with: Color blue with: Color red) using: [ :value | (value + 1) ln ]. - -b layout cluster. -b build. -^ b -] - -{ #category : #sources } -RTMondrianExample >> exampleClusterLayout02 [ - - -| b | -(TRPlatform current dialogConfirm: 'This example takes a long time to load, execute?') - ifFalse: [ ^ self ]. -b := RTMondrian new. -b shape circle - size: 8; - if: [ :c | c inheritsFrom: RTShape ] fillColor: Color blue; - if: [ :c | c name endsWith: 'Builder' ] fillColor: Color red. - -b nodes: RTObject withAllSubclasses. - -b shape line - color: (Color gray alpha: 0.1)"; - if: [ :f :t | f inheritsFrom: RTLayout ] fillColor: (Color green alpha: 0.2)". -b edges - notUseInLayout; - connectToAll: #dependentClasses. - -b layout - for: [ :c | c inheritsFrom: RTLayout ] use: RTForceBasedLayout new; - for: [ :c | c inheritsFrom: RTShape ] use: RTForceBasedLayout new; - for: [ :c | c inheritsFrom: RTInteraction ] use: RTForceBasedLayout new; - for: [ :c | c inheritsFrom: RTBuilder ] use: RTForceBasedLayout new; - for: [ :c | '*Example*' match: c name] use: RTForceBasedLayout new; - circleWithRadius: 250. -^ b -] - -{ #category : #icons } -RTMondrianExample >> exampleClusterLayout02Icon [ - ^ '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 -otz/AFJUUcsg4NQ/AAAAAElFTkSuQmCC' -] - -{ #category : #icons } -RTMondrianExample >> exampleClusterLayoutIcon [ - ^ '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' -] - -{ #category : #sources } -RTMondrianExample >> exampleColorInGraph [ - - -| b | -(TRPlatform current dialogConfirm: 'This example takes a long time to load, execute?') - ifFalse: [ ^ self ]. -b := RTMondrian new. - -b shape circle. -b nodes: ((RTObject withAllSubclasses, TRObject withAllSubclasses)). - -b shape line color: (Color gray alpha: 0.2). -b edges - moveBehind; - connectToAll: #dependentClasses. -b layout forceWithCharge: -80. - -b normalizer - normalizeSize: [ :c | c dependentClasses size ] - min: 5 max: 25 using: #log; - normalizeColor: [ :c | c dependentClasses size ] - using: (Array with: Color green with: Color red ) using: #log; - alphaColor: 0.4. -^ b -] - -{ #category : #icons } -RTMondrianExample >> exampleColorInGraphIcon [ - ^ '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 -kWvJ4/jRyf8PiGByCdcGkMEAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTMondrianExample >> exampleColorPalette [ -| b | -b := RTMondrian new. -b shape circle - size: 20. - -b nodes: RTObject withAllSubclasses. - -b normalizer - normalizeColor: #numberOfLinesOfCode using: (RTColorPalette sequential colors: 9 scheme: 'PuBu') using: #ln. - -b layout grid. -b build. -^ b -] - -{ #category : #sources } -RTMondrianExample >> exampleColorPalette02 [ -| b | -b := RTMondrian new. -b shape circle - size: 20. - -b nodes: RTObject withAllSubclasses. - -b normalizer - normalizeColor: #numberOfLinesOfCode using: (RTColorPalette diverging colors: 11 scheme: 'PRGn') using: #ln. - -b layout grid. -b build. -^ b -] - -{ #category : #icons } -RTMondrianExample >> exampleColorPalette02Icon [ - ^ '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' -] - -{ #category : #sources } -RTMondrianExample >> exampleColorPalette03 [ -| b | -b := RTMondrian new. -b shape circle - size: 20. - -b nodes: RTObject withAllSubclasses. - -b normalizer - normalizeColor: #numberOfLinesOfCode using: (RTColorPalette sequential colors: 9 scheme: 'YlOrRd') using: #ln. - -b layout grid. -b build. -^ b -] - -{ #category : #icons } -RTMondrianExample >> exampleColorPalette03Icon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAbBUlEQVR4XuVcV5Mdx3XeH+AX -v/lN8oNUpSrbVS6VXZYt06YpURYFkiBIFiVSFrMQCBAAMwlSIImcCYDIOWcQYREWWOQcF9gF -Ftic8+7dgM3YOe3TZ+ZOT/c5s3tJ6kGlO1XfAw5mpqfn2ztfn9QZSqX/8Zd0ZKT/K0h/QtL/ -SH9C0p+Q9D/Sn5D0JyT9j/QnJP0JSf8j/QlJf0LS/0h/QtL/SH9C0p+Q9D/Sn5C/BkKgvRKi -BnjYA9BRZdugH+Bhm23r6wZorrBtXh+e2uJc+xDAezD0GNrWWT30eQO9AN11fNy+JseG5/XW -82cZaBPm1iqMUWvberrBqyhxxujn89XX9tQNPQZd28TOy4Atjys4Mpb+A2ovA3zzG0U4NcG3 -9eELSWxUGtB+yLcVnQNv5r8rwvrXfFt3MajqOUoDGjb6tgF8Id2ZSgN6zpkx9j6hCCfH+7aG -awBHRyjCxfd9W90VgH34HBqng/NabwNcG6kId6f7tq5CUOVTlQbUrvFtHXcA7kxQhOJ5vq0f -yW7dojSg44hv68U/qKaVSgMSe31b4hbA5dcVIe9Lsg1cPAXdj/5YafSMHOGf11MKqvYrpQGN -W31bex7ArbGKUDAreH/CGN1FoCqmKY3wmYPzfEIQ+vAOPGsIQfgPuDUkhKAfcN5jhhAEnVf9 -VUgIgQY+EhJC0GPsf9YQgiDb8ZcMIQiyHXzOELLPfxbvxnhDCILGqJgdEkLQ5+V/aAhB+GTu -CAkhaFvTuvBlEfS118YaQhD66B7205AQDf8PZmlICJGCh5f7viFEQx/N660xyFY5LySESImc -ZxEC1+dzQjrPM0K8zCmckMRhTkjfLUYIjeEQArmLGSFwYz4jBErXc0KaDjBCoHorJ6TzEiek -4zQjBIrXMkL6Zn3ECWk9ZhHi/3FstgiJHaP5oEVI9LwMOD8DoKUw/JZB3hqc9GyA1iJj67oO -8OAsfgebQ5t38mvw9k8GqLtvzms7jfc6iN9z8+2G/nz8lt/EP582e4yrswASkTHub8DJIAlt -xcZ2Zy1/lso9AMWrUW/KjS2RDdC4F8cx332oO4B/iRtRC4xGQjc+B/6BwUPz3YdO/IS2n8DP -d6OxVewCKFyBcy4Lbf3LZ0PvlIngFeSZ89rPgf5DtOZbsw+gfB1AV8XgYyTw303f2M+M52UM -uEKlhfRB1dAi14ui3lDunKeFuUa4nyPW/XhtomJoYYYB/C13C+c1Dr1wkARXFH+09Tbw+XbV -cJs7N2mMfpxvawVfADWVpTSPjAf/8SPV9XogVPUopJlPKsK5dwKRywG49Joi5PoiB3fPgvf+ -vyjCwj/4tib8FZ34rSJc/SS431WAQ08rwvl3fVvZBYCl/60Iu0bGCzPoVcl1pQGQ79s68ddY -8pnSgKpl8QuHHvwjq1mgNKBxS+TaPykNqFru2x7cBbj3riKULfBtzfgrOvN7RbjxWTA3tJ38 -nSJc+8SIujtGxSWAlY8qwt5gbgXnwfvi3xRh5Svx8wgWT0SIBn2GjjxvCEGQ7cpoQwiCRH3S -I4YQBJ13+hVDCIJsR18whCDIturXhhBEnDAD3AwJ8aE1ZGo4EQJ9ho5ynapdEr4sAl07LSSE -oJ+lYJIhBEG2828aQhBkO/O6IQQhjUGivv5JQ4gGHgOzfmkIQZCAl02z5kG2xHZOCOQsYIRA -0WpGiLf9c0YI3F3KCIFbCxkhcGIGJ0QSZijjhDTs5YRIC4dEFieErrUJgdrtjBC4v5IRAvnL -OSHSGKdnWYT4q8qpFiGx8+i84BPS/flEGLh/xwhLPgrpzTm2uJbvDETOaIaXuRC8LfgXVnXP -nFeEq4w7i1DASo3tHq6Mbs6173cRJ3hsCgpxgSPMjshBFf7plCA6ja05C6Aen6e3ZvCFQxsu -QlocwaVrd9nXNuAipHoTSpXRTSjZhl/Jr9EpjcyjeEswtxJnjEP2GJdxbif03MxixzuOC6Dd -nwHU3BPmUR1ZPN1Ax9Dr5CLc5oo6ClCPIHw99UNfq8XLPS9WSGu5aPY182fprh9acB/2ci9f -GjfuWdyFiF44uNGKuLm5Nv3M4twa2TNnqN4s/NlfCkTpIsCaxxRh/xjf1pYLkPOWItyfZTzm -66MUIX+GuXYtXqdxYHT8tdqbvT1OEQrnxAspCf0UpQG1q+M9de3lH3lGES68Z6IBe36tCCfe -Nt773YmKUBJ47w/wl1XwviKULwzuF1mIJBc2VrQiM5gH3i/3bUUommNs4dxm+7YW9PwvvKII -tyaHog5FnyhC5ddmQbD6MUWEEPRPa8NvDCEIst2aaF4qgmw3xxtCEGTbOMwQsja49vY7/Nq8 -98xDI3whfYN/tytmhYQQYjx179iLhhBEGA1IEoIg272PDSEIshV+ZghBkC3rd1z3Etu4c3zn -Q0OIhhb1vA+suZHt8hhDiIa2lXxpCNHQto1Pc0LgzCxGCJRvZC+VPGaHEDg7ixEiXlu5iREC -91dwQpr2M0JETz13ESMErs1jhJD37hACdTsYIXBbWIgEghslBKq2WIT4c9vM56YXRRFCfHdg -j0WI//7m+IRAP34GvHYjLFfx5Zyaho5MxHuvRrEtc7zPKrxpCXrcnRWDX1ujr11rX1uL3mwF -vtyuSkdIl9hCKnngkqcuefm5+GxXZuJyMvIs9ei9Vznee2Mmii2+yJ4qYSFSZAmuG62A2v3B -PJy5uZ56GRJ/f5nl+UPTEYxy4CqvJyLqV1aiqPc3C95xz9CiTqHsdn6tu0gQxTrG23ZD1KJN -ej5B1PtwgVFfPrTQa8+6pYLbmoVrnVSF190NvUUlLEz/sLSEX5sQxmgqZ/PIoGhj3dp471gL -880xinB/ZhDKruKh7AEkLPj8hYsE8t5fUISrHxshLfxIESoWB2HwchOibt1rbI3LlQYk9sQ/ -nyTquWfAG/XPijD9Jd9Wg0K/438V4dg431Z8Aby5P1eETa/7tkL0rKf9TBHWvOrbqvHaIAgL -R94i24OsE3Dvb3+gNEofHUa2vtMnoOknP1QaieeGBZEJXOwsfkQRtr9hxnC993qcR+ZTKsOK -OAresZcz0RCCiA1l92SHhISLhNMvG0IQZCv6kyEEERcGh8Y1ISGEuOcTRH1gws8NIQg6b88I -QwiCzlv0K0MIgmxzf2EIQdC1O58xhASR8YIf/mNIiAZF0P/1n0JCNEisVz5hCNGI8d69rBcl -Qkq5d1y+gRPSeZET0p/HCPG9d5sQqNvJCek4xQlpPykQInjvgqh7GyYzQuDKPEaId2Q6I8Q7 -OJURApfmMkJqx75nEaKPjk/etwiha7NnWoTEeu+3FvmEUAi4r25w77gahbXUEWYplP2wANgi -IfTeIx5uI3rQtdtsQZNC1A9wbd5+3LZJzyeIurfnK/BW41K3PN+cd0uHgWZa6QbvzFLwMj+3 -0gjeCfSsv8ElcW3Es765CuD8dPwZmGsbJk+H6jfGQXdObmjrnDsD2t8dB/13jA0uoKAf/QKj -45L3Hnm+/PWQ8bC0NLUcsyuaFGZ2RK6rG3qKSocOv8flyjtrv5uXT2Hw5tS88h7Jy68eUsDF -MWgR8+DPZ9OeesOPfqBaRjwZCGkZF1LtuR4erghJ0dQh9GUYHNTY7YeZ2w5nw62/+XulUfDI -00JefIIR113oH2hkB150I4p/Nn7WNK58bBYTN0Yrwr0ZxhPOG68IRXONR59MhdatiT9Pup8e -N+tZRbj0fqyAQ3chz4FLYf/vYwvGJUI0/Adczb7bXtZvDSGIMISeJGSZH7HN/bt/CAnRiM2L -fzPCELIr8KJPvWwIyQ7EP2eCeYEIst39wLxohO+XzGHpUOk8Wpy498v+P0MIIk7AoXIuT7k6 -YX8Koadsy2I2b+cIgRBJSLXn6hBCIXSHkIqR7zFCxLz41XmMEBJ/hxAo28BeIHnHLiFSflo6 -T7pf3teMEEnAxTGksP/3sV2a5xPSNvFtFKA8R0izbSHVnmvOPCeEjkJ13A6h13w6A8pfHQ9d -OZH73RFy9LdRXC/PtHPqhSj+eY7402Jijb2YqEPvuHKD7W1L+WnpvOT9otGFAvTcbzteviDg -4hgU9kcP3mv989hw3AxoFzzXRKXgbdd9t4I1MTSOY7RXDS3+cde2pVA8J4XpJU+9twe8ytLU -xm2t5Pdrq+QRgrqyoceVrtWeOmzGn+bhoFCuBD3Ir/5TEba9GR8a18VkV95QhDtT4/PEUgGc -Fq9tv1KErLFG/PfjZ03jzAQjuMeeV4TLH/q2Svz1bvilImS+ZcLbF19VhNtfxIfpa6+wxcTA -pZPQ8z8/Vhq9o4K6gqYbPH+uUwturrwK57ERn0MjM0hV5J4F74/o+2hMfdGMuxvH1MgeZ+aR -DMTuH2Xewd4nlE/IZv9bObDkcUMIgkTuHA+Ne9feMoQg/EjsFJaWFAvgdg03hCDIduh5Q8j+ -QPxP/MEQgiDb1qcNIQg/5z/GEILww/QTeJj+m+eYdvU89dOQEI24/LmbK/fT2M8YQjS0Bz7h -EUMIgsR6//OGEA1t2zzcioyT7eALnBAvaxojBO4v56FxHeV1CWnYw/PEUgHc5bmMELg5nxEC -eUsYIXB+DiOEwtsOIWKY/up8RogugHMJEfPnQq4cLsy1CPGJm2wR4qcC5luEkO3cHJ6quLEg -IMQplPPOoed6RHuVkXx3ydYgNF5mF5MVrbTD4M1Heb5bCo3noGhecAr0tPhfd8S/QOdOvrKF -/rouQnAEt1znNZbb4W0pTH97TbCYMNf2r5gNfVOdAjgpfx7myiPv5QbO4yymG5qNzduNEYJV -H2GE4K6dCnDGhas4j1NTcaFQYBUQZjAxFPPiMZ4wy7PHeMLddUOH5KVxU7XF3a+9aujFCUUm -EkN775LQgycX8kk5dVZkJ0UhdPV7tACuEsVrHf6MNA6MiS9i015vWOU92wjpDcwgaiQ9YUv8 -pxjRdAvqSKx/oQhJgdQ55jC/P1oQw9GmiO3Ui4pwfZIR3OBTDIeT4p+DS9mXFSFnsolM1H+t -NKB5R7z3rp/ZjSRIqYBonj1ZLyAV2UnndRZQmVKGVW+1aZghZN1j8dXlue+yomIvZ7wh5MYo -U0nuaI1YULflKUMIws/RP8nz+5ue5Hn7s68bQhBk2zHcEJLUx0ujDCEIX/dWhoQQaDEheO+n -X+OOK+RYkWcSZinPfvYNS5P88z5i50HZDE4I5cVdQii37RSxVWzkVd5l6xkhULKWi79UUHd+ -NiNEzO+fnc3F8N5yRghcnMsIgcJVnJC2bEaI6L3fXSYQIqQCpDy7tEiQzmv4JiBEF8BFhe8a -/vv0NMdLFYrYdK6ccseVdp7d9awl8ZcK6kisnXHDHH3B4LZiXcCw2M7Ha8E954h/2Xae2+7A -QGlrFkpJw+DeO0USFtpCL6UCpDy7fj53kSCd15yFGuK2eJGAJ4b2ouOqy3savpv3LraH9cnR -gN4U8vFxz5dKoRwVsaXwzN9mHu6iI6YmIUO1rMOf7gGhanyrUBE/Mb59TRL6znuRgrAlgWii -9571nCJc+tC0eFXOVBpQtz7SWoafOo28KaZa3S1si+bjoy1j7v2kkLxUKNeFv7yyL5UG1Kwy -Qn8c/aHjkahBc2QxcW2SeS9Vs5UG1G+IL5ST2us8/APoP6mIEAJ9hr5mBcRSRTzU8PY1UeiL -v2D1R37IOyAE4X/q5ocvkKDPuzrWEHI5WBAUfsrrqKR8fNUCfr+7H/KQfBEvlIPyWSEhBEoP -vGIIOf68iWBEtIuEuXphSAiRQoVyb7FCOWjdZaXAydZ3ViAkcZRXdEsV8S1C+1rFJi70urDZ -LQgj0XQIac5kL9BvLbMJEQvbxJaxQ/x+Ukheup9exDiEwJ0ljBC4t4IvJvR7iRASWyjXJbTX -Pcz3CYEHp+3ir7BqvGHwinipfU0SeqkgjETT8cBbT4J+GVZ+X1oQUGHbFruwTcrHS/eTQvJS -oVwL5vExFGRFHArxDy7XeWYSa72YiM4D30vzAXtcqVAurEmIvPuBYhR110sV277i2sMaUyye -60oxx9w59AIjVsATqeXPpaI9d5EQW9XekNp5UmSCpRYEoadCOd3S27QtFGFV/KnSCEPokkBK -4ir1swdCpQH91wbJMTfyIju9wEi2HDdtjRdwqX2Nqu7HKEKyuE+L8OmXFOH6p5GivQ8VoWLR -4FXt7oJAOq81N9IVMN209WU+pQjJRZEk9Po8DKxmWG29JV+GhBDo2zuPC2ThJP7tFfrZoe9M -SAghpncdenmRHdQu5W3HkoAL7Wt+1X1ASM4YI8JJQhD+omOyIQQhVbX7C4KP+IJA8spz3rGK -0Ml29EVDiEaM0HuHXxAIqd/NCZEEV2uCS4jQz54UKouQvhxOiFRkh84aI0QqqJNay6jq3iaE -PHqHEL9ozyaEKthdL1paEEjets7bu10Buq0vQkis0N9c4BMCiSO2l6pD6HVOCF0SSC2GtY64 -Cv3sMFCE/8aft9cxeAuaVGQX9oE3DC7gUvtazV5eda/TCHedVrWmQziPrfY8Qi+60l4QVDgL -Asnbpq4AJ+yfr8NKc+zUQij0kWe5uxZFXSw6SwwtfLHh7doUW+Tqh26RS7V9bSAm5O2Ka1xb -Wkree5/cwpdKVbsel73TfnGjngxrgxbJU7daweYHeXEMg2/HjJ9G1jghFz3J5KJXYyBQY9/o -+HY4bbv6piIkc/SSjfLs6L9oJD1muh9mBjWSQipsIAN9+Jcd+FxhZELy1KXWN2lTGV3VvuS/ -FGHnm5Ge9J8pQrKqXfez1y1SGuHiSdq4Jtmnbu0HInnq+R/xVrDdww0h24O8+JlXeS56w5OG -kNVBuPzmBN4Od32cefmIWJsOjScJOfZc5H4BIddHRrx8e78SaNkcEpJ0hCVPXWx9czaV8YsF -hxlCNKiq/XFDCII88PoVISFEij7qlrGNa8I+dYsQyVOv3sJbwS7PYYRA/lI5F+0QIrbD6TC9 -8/JFm/byHUIo7O8QAsVrOCEPzjFCRE9dan2TohAnZlqEEEn7plqE+Pp23CLE/1ULG9ck+9T9 -DVoqBIGsc1rBNtnn6bz4RcyLN0c2nyna4nuu7RGP/gqGGE5iuLzxntAOF82Bo1devMoWucrd -3EZ59gV2u1kopG7Of4V9bRcGNjt0ZKKRe+rRuYWtb+V8U5noGLpYMAvjdfX5vKq9OtL734Ee -uV48Rd9puGCpc/rUB9pSyJXHhZmbuS3lMHjj0DZxkdArV86z8LaQK5ciBFKoPW6nOOkdSBvm -DHQM3ZMe04Nvh9+lELoudgtzzB8IFedBO1xvaSQ/vTPeyyfRfEcRShYYz//+e4pQ9lVkkYBZ -RY1kLlr3n4dFZ2/HLyakXLkUIZBC7ZLgUqgd738qkhfX15Z+rjSgeoVve4h/7Z37lAZ0nzI9 -6cWTFCGZgrDqFCI9+JhVtaK93m0hhJ79Ek9pChXnJF5uOlQKq+d/bAhBkE1vApMkBGEWCQEh -J4Pc+75nWY2Td+Y1rl1CrlzcpEYItbs7xZm8fUDIqWCMspkhIUSKPjoPhYQQKdoDL51qCNHQ -R8VcKy1O511/mxMi5sp1y5hLCEYzGSFavNyXIHn5JJo2IbQJjEOIv0iwCaH+c7foLH8ZJ0TK -lUsV51KoXYoQUN7eIaRxn0WI/8u8aRGSLCCMEuKPe5DXKZSs8wnxw+9NQgi93AmXO0IaVoPX -CPnpeu7lR/Px0iKhQRDXomTBWjEvOmsZYjEhPUsyQjDQKoTaqwcX3LB4LvIOWo7htbvt1EIv -fpJ78DM/kHCiHzoF4VTsUw9+tbUQyZBbvGpSE7nuFCri4yrdxWK8RGretiuacSF5JppCoZzk -lUupgDibJOBsERNjk3aUg6t/RD9kmsl3u54wCfgMpQF160zRWRg+/tzY3Cp0XekeevRj+SY1 -yWI3KUIQLbJL5tQf4q+sY7fSgM7s+H52SaylQrkOXEzkv6sIpQviUwGSTRJwaUEg2SShD+bh -E4LwPeHfc8eL2rl8QghUdDaSRSu9y6N5Fbrk0QvFbmIIXSiyg459ISGEuH52KS8uFMp59ycZ -QvKDDcx6T/DIs2QTBFz0wAWbKPQ6teASAnmLOSHUzmUTQkVnbvi4aBWvQpc8emmTGilCIBXZ -dV/jhEhteI2CWEuFcjXbOCFSKkCySQIueeCSTRL69lMBIeQJl9kCrnPHloALwlwWVJxH88lh -FXrEO74lePTJYreo9y5FCJI59ej9etBX6sZP4UCL0M/eMLhYJwvlos9cn9xRrkJIBbQNbpME -XFoQSDZJ6HEeGWI4OhXPNXY/80QK58V56g3cK5d2dnPz9rH587oUro3rP+/8bjbxXUk1BPJm -OxmqeQ3+rPabwrbkT6lqaXxRnLRZTFwO3BVcyVOnXebQ99FI7sQWbXNL7v3ej6u/9u1KAx5k -xefPJQGXitNoD/ZgwVK7Lr4OIFVbN76D6nlKAxo2xUcIdCoA37v/7vdZtozkf5DIlXzBv21C -UVxsbtv9VgqCK3rqtMtcQMjtsbFtbtC+OySEEJc/lyrdW3fyWqjK+VwfpToA0XbWspEw6/RF -QAiREten3rIpJIRIidgsQqiwzSWk5RAnRMptSx6uJLiSp64jzg4hYpsbaodLCG2O4+bPC1Zy -QqQNc3QkwSVEqgNI1aYXJxFCYiMEmOaOEhK1ZeiXa+Wnm3Vh2w47xxwWxdUKue2GwcVLElzJ -U69Fr7/CiRDovd91m1siUuneg/5J10U7b5/Mn0dD45KAh8VpTc6CZZ8dcRgoDuoA2r+9re0M -vqtM+10le9Kj4t95FZ/tpP3u0YaEVKcWBpfyye1VKezfHiPCvSmEo+NC/K5oxj2LOEbTn0/A -U7R9myMD9jyB2a/xRnBDzzUIg7fe4rltnVMPe83HxRfZaSF1RVgKtUuetbSpjCWam4P2tUum -G/bQW/FjSHu/fx8BT9H23QjZ84TJJzuOknd9LM9tC73mYpGdJMJCqB3KZ3JHTgrx1yxm32hv -23Denqyr5N0xhL3fUxfwFEVdsH0vQqBmK/dcdarVzW1fmsMJkYrsJBHWG5e5L0uHsl1CpBB/ -yxEumrodziFEHEPa+/37CHiKtm9PyBUMZbQUOJ7rZrsgLMx3l/Fe86gHniyyiy4IJBGWQu2S -Zy2F+EPRrLPb4c5Ox3PvDz5Gcu/36PN9HwFP0fatCFHpf/xFHelPSPoTkv5H+hOS/oSk/5H+ -hKQ/Iel/pD8h6U9I+h/pT0j6E5L+R/oTkv5H+hOS/oSk/5H+hPw1HP8P5pd9U3axQdQAAAAA -SUVORK5CYII=' -] - -{ #category : #icons } -RTMondrianExample >> exampleColorPaletteIcon [ - ^ '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' -] - -{ #category : #sources } -RTMondrianExample >> exampleColoredNodes [ - - | b | - b := RTMondrian new. - b shape rectangle - width: [ :cls | cls numberOfVariables * 5]; - height: #numberOfMethods; - if: [:cls | '*Layout*' match: cls name ] color: Color red; - if: [:cls | '*Builder*' match: cls name ] color: Color green. - b nodes: RTObject withAllSubclasses. - b edges connectFrom: #superclass. - b layout tree. - b build. - ^ b view -] - -{ #category : #icons } -RTMondrianExample >> exampleColoredNodesIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAFhklEQVR4XuWay07cQBBF/WdI -+SY2QZHYZsEy6yTrfER+Iksk3u83DK8Bppw5DnfUNMYzA3Z43Gu1bI/tcnWd7up2a4qy9Ndb -UuEfAn8g/vIH4g/EX/5A/IH4yx+IPxB/+QPxB+IvfyD+8gfiD8Rf/kD8gfjLH4g/EH/5A/EH -4i9/IP7yB+IPxF/+QPyBvAHd3NzE2dlZ+AOZQoPBIO7u7qLf78fl5WX0er04PT2Nk5OTODo6 -qsrx8bH2ZVMZ3vPgfG9vL9bW1sY+N4HdB37gG37i7+3tbaDOgSwvLwdldXU11tfXY2NjI7a2 -tmJnZyd2d3fj4OBg5ByFlkjBUfYElQpQFFye4dnt7e1qv7+/H4eHh6PKch37BFHvH5aS/crK -SnXONY7xiT0+4SO/8yzHFI7TQAEdn9Rr2HOeB1s+YhebvAc/qYPuoQCbehAX+ca9ad1kI6vL -g7K0tFR7nJdCDqROUHgRlZUzVF7O4AC/KYCU4UtGAeNcwcKO7uU5QGKf+7h2dXVVVZp71HM4 -vri4qIKDDe6h8kDd3Nys7uf4+vp6ohbLfdijND0DTHwgFmpo+EidBQzf1SC5fn5+XvX61A4N -hIaA31xXY+YZfuMaGUP3yBZ1KnLi7AmmAs11giBnMMyx7qcCGMcwBhU4XqbWqZcRDH7Dhhzh -eX5XD1PLppLcw3u4xrFs8cxL0gIBS3sPIJ5jA795HlvAJj74S1EWUANSPRV87uf9j1KWKHMR -KZ8SQLVS9nJ6GJgS4wSIaxyj+fLftnC7ELO92cpJQOlFvwa/YrG/WMHGWeXs9Bzb+EMF/vT+ -xNfB1/Jb79soTVLBrnK3Uh0+dTFWEF9gKCNRR2DR4Kk/jZzfipx6ks9qnSJolMezg4dbru/x -PZajPr+qyDbHv+N3YGcmZqpUd59KOh1QaXikXqCkjaltUY+03un5IyBcVJqYbrrWDERqAiIR -FODND7cfw62r3kBrJV0znjFu0VK5Ru+nN9IQNKHQuNIGKBpXOl5zTp0pRd6tcIaWMv38uT0g -bYp0TIUJJuObZo+kZI1JgKDe6RQd8Ryx4DrphEJqIdUAUjZIp22luSKdiaSD26QzGInx48vd -l6pVc/y/gfCdQHDY0/I1sQAAEwRaOXAIniBpgpA3QOykQJXOKBoHeI5Mgm3NEAUJaDxHmRZU -BYQX1OXT53RFQDZ167aAkFp5nwLGOcECAscEPvn2KQGj1kwhmIxX9Jb7ycSoaJKhom8uCr0j -uRb6MNUkJf3u0jSdc1IfMR03DhbXc3MRP39GXYWnGURpCQJB939qKtkWECqZ282PyclAk316 -iaa7CqAG8Sa/sMGzlPx3xUmDswox0DuBn94/JvUXZXz69Ch4GmSm6R3ZbKx2nt0WEFrxOCDT -aBK/6oCks6Y02CmQ+2+Psi4eEwOhe6UDXd2YkW6f+58jPefldF+lj7aB0AOVruoAdQHkKaU9 -7eWDegOQfIBrmlXlW54q2l6oTAdcxMD6WkDaXe2tAZKvzdTNuF4TCL1BSzPqfbnP7375PRJp -OURTNlokFU6ncOOAdClmNSkQ9Zguv67/O5B8wEqWM6Ku+74mkLw3qMdozMoHWH8gHQPJlzC0 -1pWuC9kBmR+zdSmtRTUt3H1oIG/JYa0IN01zn7PK4A/khUCaegAfYu8eyEfSe55t+f8vyx9I -t5p2UdQfiL/8gfgD8Zc/EH8g/vIH4g/EX/5A/IH4yx+Iv/yB+APxlz8QfyD+8gfiD8Rf/kD8 -gfjLH4i//IH4A/GXPxB/IP7yB+IPxF/+QPyB+MsfiL/8gfgD8Zc/EH8g/vIH4g/EX/5A/IH4 -yx+Iv/yB+APxlz8QfyD+8gfiD8Rf/kD8gfjLH4i//IH4A/GXPxB/IP7yB/Ih9ReUe2Cwge8u -vwAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTMondrianExample >> exampleConditionalLayout [ - -| b | -b := RTMondrian new. -b shape rectangle - fillColor: Color white; - borderColor: Color lightGray; - withTextAbove: #name. -b nodes: Collection withAllSubclasses forEach: [ :cls | - b nodes: cls rtmethods. - b edges connectToAll: #dependentMethods. - b layout - ifElement: #isConnected then: RTTreeLayout new; - else: RTGridLayout new. - ]. - -b edges connectFrom: #superclass. -b layout tree. -b build. -^ b view -] - -{ #category : #icons } -RTMondrianExample >> exampleConditionalLayoutIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAJR0lEQVR4XuWcZ2/UTBCA+Uf8 -H77wDYkiEUCAIAgQEHrvJXQIhN5777333nuooYUw+84zYk9+j+MKOCR4Rlr5zmf7Lvt46o7T -LoRsyZs3b+T58+fy5csXKXbct2/f5OnTp3Lx4kW5cuWKvHjxQtjX0NAg169fl3Pnzsnjx4/l -69evEo9/9+6dnXP79m0778yZM3L16lV58OCBvHr1Sj59+iTfv3+3Lb/h2rVrcvToUdmyZYuN -HTt2yK5du2Tfvn12Lt9769YtuXv3rty7d0/u378v7UKG5c6dO8JI63pAefbsmVy6dCkHEWBs -AcN+gDU1Nf3WdwIz00CiMInc7fzBf/u7AcZ3o3FoHpoEsHywzc3N9ttcAIkiKm39N2YKCLYb -e540GXV1dfZ6+fLldkcmjz916pS9x8639m8/duxY9jSkffv2UlNTIzt37jQTgRNdsmSJzJgx -Q6ZNmybTp0+XDRs2yLx582w/sBYtWiQTJ06U+fPny549e6S14OD0u3btmi0fcvLkSdm7d2+4 -ceOG7N+/X0aPHm1gDh8+LOwjolmwYIHU19dLt27d5MKFCzJ8+HA5ceKEnD9/XuI1WuO38/sy -pSGYq9evX6cycL6MtK5XyciUhmjcb0PNEg7ctsl9yWOQuC/5mu3Zs2eFkby2AsqdV+j74ucb -N24s+N3lfK6hc8gkEPUR9kevWrXK3i9dujTMnTs3qOkKmpCFdevWBb0bKwKipi+cPn36f9+n -ZtGuP2jQoKD+KsycOTOomST/CePGjQtbt261Y/r27WvvDx06FEaNGhU2bdpk7zdv3hwwsb16 -9QqaaIaxY8dmM+xl4jQbtteaBWOfbWjMb5PR2NhY9PxCQDR6y10zeQNojmHXZGJ3795tE67V -AptwwPfu3Tto1m6asX379jBixIhw8ODBsHLlyqD5R9DMPagvCyNHjgwDBw7MHhD+eNQfDWES -1UnbxKiPiaWVnya2FJB4POdGQcOYWA0QbFKBzZ2+ePHi0L9//zBhwoTQo0cP08wVK1aYtqJ9 -kydPNnAa3YVHjx6F48ePE2GZho0ZMyZ7QPjDtI4VNPS1u5bXmKnk5DKZ5QIBbhQmEo2bNGlS -mDVrlk380KFD7a7v06ePTXjPnj3tcw1hw9SpU2NJJLfVENzMGOdynIbjZq6OHDliI3M+ZOHC -hUFzDOpOPzlxtvzxmneEYkl7BMLxAETDuPv79etn53KXY//RPi0I2p0OKO72zp07hzlz5hgg -fBaQqqurg+Y4Zkq5DudxHL7u4cOHZq4Aj6Zk0qkzMfn7CkVh5QBJRla8ZtIwN1F7mHRMFqaK -95pg2uc4crQAs9WlSxfTBo6tra01c8Zv0OzcQAIQ8JmLsvIqveHDhw+F6lklzy3k1JGbN2+a -c8Zf4IjxUZpoBk0sDQqOuqqqyqIlTBYRF0795cuXFmHhg7Zt22bX0kTUggG0D1/EazQv08VF -Xb+wOzANIJrl2wAEg5AWH8GdjynDFGGm8BH4BbSASY6iaygGjy2mC7/GcWgHZhSNIRJ0Ue3F -NPwJEDQDGJiUKVOmWN7RvXt3M0cDBgywSAttwVRy5+NftCSTux5aQYCByZs9e7ZBI/LS7zDN -SZpYN+V3JhX7n59tl/Ih3LnDhg2zCcShM/mEp9HuE81xbSadKAwYnEMewp3PcevXrze/wmcc -p2sk4fLly2biMl1+L9fpVwIkeTx3NI4ZbSE6wp8Ag7AXU4SJIuwmwgMAJgnfgonCV3AsZmnN -mjUF/VumgJBvvH//PpWh69uhkFMnfyCkxgkzuZgbfAHRFVEW4ayuu4TBgweHtWvXst4SPn/+ -bCZJl3ZtH0CKiSsNqUQKASFaWrZsmWkBZoktGkRyyGSzj7AX04ivoqyCaSIAKEcz/QOpEAi1 -JiYYx4xzBwjOmwnHNwCCEDiGtWgIoxLxD6RMIJglqrlk1zhjcg1CW2pU+BPMHE69oaHBfAtl -EMxfpeIfSAVADhw4YAlnc3OzJXFohS75mpNnPz6Fim6y/uUfSAsBIVIiIXz79q35CjRg9erV -VqjEZOHMy/UT/oGkAARfQNiLnyDExXmjCXV1daY5aYl/IGUAYY2FTJy1DZI88g6SPJJFyjNp -in8gZQDBX7D+QS2KsjnRFWWUlhD/QMoAkmxSKFW69w+khYRu9LQy/0qGfyBtTPwD8Q/EvxQF -wlM72EsGTwbR/8qI7ZQMrd/kBv2wccQyNSPWbX7E67n9yePjNfgu/1P/lzWEbnIe+yp1nGbA -dsyTJ09sS+OzfyAtIB06dBAttomuBYgmUNKxY0d7vKyqqsra/7XcIEOGDJHa2loDoEU621dd -Xe0fSEtIvPMRHnQEDEB4SIZHvHgegodraP/XcE84nn1anPMN5OPHj6HU4Dm5co5rzZEpDUl2 -fudvyUp5WDK/yYyaf/LYQm3+vCfDzW+9T7bjl/o8+ShBsd/qFgjdFOxji4wfP/4nICziIBTg -WDmjS4PyNPupBxGJ1dTUWPmaZgBaavicQbcf/U4sAHG+fyC/ABJPiM1fcUslNF/UWdvKGQU5 -mseYXGBQpqZRgDVork0zAIU7FnVY3EnWiKIG5ktWQaQGhAlO2nAWbFjiRANYb6YTg2Njez4l -a9YUWHUrVqTzD+Q3gdD0xboyi/u0VaINdHvTEAAUNIRjY0t+Un4HiIuwt1IfwpM/bFk1o+mL -zj4mHlPUqVMn29L9HZvBfnU3R6ee74P4TsC6B1JIikVZcULpxqCtEnMUP49Ov9D1aS5jFAOS -VZOUGpBSF2KJkxbKpqYma7fEfMXlTa7BoI2f9Wj/8geZerlAkNjzmvQBOHW0h/ZL//KXgSA8 -XIm2EPLGZ/uSzps+JkJl4PmXFgSC/afNkmZirdwW9SFRaESOJXsSyDT6mvwDSQBJOuUkEHKQ -Ss73DyRFk5WfR/g3TW0ICDD+gf8Z5gMI5ROej/AvbQCI50y7zQLxWov6YyBaqZVio7GxUX6s -GLbp4UZD/It/IP6B+Bf/QPyLfyD+gfgX/0D8A/Ev/oH4B+Jf/APxD8S/+AfiX/wD8Q/Ev/gH -4h+If/EPxD8Q/+IfiH8g/sU/EP/iH4h/IP7FPxD/QPyLfyD+gfgX/0D8A/Ev/oH4F/9A/APx -L/6B+AfiX/wD8Q/Ev/gH4h+If/EPxL/4B+IfiH/xD+TflP8Aq9/baOYXdDoAAAAASUVORK5C -YII=' -] - -{ #category : #sources } -RTMondrianExample >> exampleForce [ - | b | - b := RTMondrian new. - - b shape circle size: 30. - b nodes: (RTShape withAllSubclasses). - - b shape arrowedLine color: Color black; withShorterDistanceAttachPoint. - b edges connectFrom: #superclass. - b layout force charge: -500; nbIterations: 50. - - b build. - ^ b view -] - -{ #category : #sources } -RTMondrianExample >> exampleForceAndNested [ - - - | b | - (TRPlatform current dialogConfirm: 'This example takes a long time to load, execute?') - ifFalse: [ ^ self ]. - b := RTMondrian new. - b nodes: RTShape withAllSubclasses forEach: [ :cls | - b shape rectangle color: Color blue. - b nodes: cls rtmethods. - b shape line color: Color black. - b edges connectToAll: #dependentMethods. - b layout force. - ]. - b edges connectFrom: #superclass. - b layout tree. - b build. - - ^ b view -] - -{ #category : #icons } -RTMondrianExample >> exampleForceAndNestedIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAMV0lEQVR4XuWdaUyVRxfHb/qt -X5qYfrI1tWkTo/1Yo4nGRNO0H2xqa5oaIy1o3KoxirxSXFgU2RQFUagiggvIS0FQUFnEDQXc -UBARlE12QUBRXLAuM53/0Evv8jz3eZ67wHOZSU7gPtt9nvnNmTlzzpnnGigVv+ipGMSvAvGB -iF/EByI+EIfL8+fPSVdXl8tEfCAaS19fH21qalItaWmdXNQeLz4QJwEJD+8VH4iegCxY0K9J -c8QHMkJdlpxMnNhG6+rqxAeiFyDZ2Q+ZZNPMzEzxgegBiFEePHhAU1Mz6GefJYsPZDiAxMZ2 -07Nn2xWgQGMqxAfiCBADu0M1QLy8chWBiN9lOQHI6dOnVVXw7du3xbeyhgPI7t27VVfy5cuX -xQfiaiB+fn6qKzkx8ZDN/Q0NTbS+XnwgDo4hGZKVKzW2fPDB3zaBBAf30qVLn4oPxBEgFy9e -lKzclJQUs885OTnctJU6tr6+nh9/584d8bssV5q9mPDduHGD/62srJQ8xsennFlfjeKPIcM1 -D8nIKKGensWy+6OiumlRUZv4QJwB5NChLi62gFy71so8wD3iOxeHA0hWVgMNDDztVBeK+EAc -7LIaGxv5GOEsEN7efeIDccYYMnt2Lq2ubnYIBuB+//118YE4A4iv7xN69659QGpra7nZe//+ -ffG7LFdbWUqSlNRFf/qpV/wxZLiB3Lp1i40PLVbb6+qaJDVLfCAuAIIBGjP05ORkswFbfCtr -xICki2/2OrsQVjo7O0lFRQXJy8sjiYmJJCwsjERHR5PU1FTCfFmEDcbk6dOnZGBggDAXO1m0 -aBHx8PAgERERZOvWrSQ4OJhs3ryZbtiwgYwdO5bMnTuXzJs3j0yfPp2sWLGChIaGkqCgIH5c -YGAgCQgIwPFky5YtXHbu3EkOHz5Mzp49y7/r8ePHRHdA3r9/zyuK9c1mFbVr1y6Snp7OK6ah -oYEgw/DZs2f8QS5cuEDS0tL4MeHh4fwhCwoKCPMzkUePHik+JK6Da+O7WltbOSRUFq775s0b -zZWEe8T9NDc3kz179pD+/n7y7t07ft2EhASyd+9eUlZWxu+fdXtk9uzZZPLkyWTx4sXkxIkT -/Hvx7IA3c+ZMMn78eC4zZswg8+fP52BXrVpF5syZQyZNmkTGjRtHpk6dSry8vIi/vz+vh7i4 -ON5oduzYQWJjY0lMTAzZtm0bb0x4zpMnT5KrV6/yusR9GHCz9jys1vL69WsOBzdZU1NDmGeW -3ywe/MWLF8PWIvGsBw4c4A2tsLCQsDFI8btxv2hcgFpaWkpevnzJz4+Pj+eC/9GA0TgBOysr -i1c6oAMq6hjPj4aJfevXryfLli0ja9euJZs2beIaDDj5+fnE4KxuBzcaFRXFaff09BBm93NR -oxl6KG1tbbwFo1eA5tTV1dl93zgX3S20oqioiLd8wECloxFev36dA7LZZaHltLS0aBK0MC3H -D4cm2ipanw+CCrXnPIx5ao+FFp0/f57/bwbEkQnYypVPFY8ZaSBanmf69EZNWSyWonYeNWvW -S7PvcRqQP/544nZAYmK66Y8/5lttZ1pB//orn08qlZ4pNbXTISBXr7Yy106TdiBHjnQxd/hD -h9wYetUQ1tebxFeuafIuT5s24BAQq1wB8YEMCrN+2EQzmf91hg/N5UBsybFjD0cJkBIWoTxE -mSlulhDhdkAmTx5wayAHDx6U3D5mTCwtLm5zPyDu2mWtW/eEfvttumy2/KVLlxzWEE/PZzwf -TDdAPDwKaWhory6BNDYOitR9swmc07osKQ2EdXX/frN2IFpc2kpdgbvMQ6KjczSsO1EGwvxp -VvtnzsylubkdVpFNRSBr1rRqBnH+fDuz8WPcdmI4depteuXKFVXHfvLJavrrr/9jDdebMh8V -/e67IPrbb/1WYwiMBdPPR48elZjTpCoDYVN6zUA+/7zP7WfqWN7APLE2syaxTG7fvn2qBvWJ -E8/R9PTbslrz0Uc7aUlJmzUQg6HGLEeWeThNFsVk0tWrlbuw6upqtwfyX0XupD//vJlu376d -t/IdO3Lp2rWHhuoImSxqrSzkGBvHpmPHjvG/x48f51CZl1h+DLl58+aQirGgD83IyJDsB+XE -eHE9AlG7IguC+ci5c+fMtl261EbDwk7zeQvzDttl9uLchQtDaEhI1JC2qRrU9+zJo+PHL9Tc -qph72e01BC0YiRNybhZohsGw2y4gLFTBfH+51Nc3gy5Z4q/NyjKqlnzlt9IvvkimGzduZHb9 -OsqiY+xGI3krgKZhxuvpWcStNXcBMmFCqVkOl6mwkAPPtDeOL2Fhu5n0qgYCrSsuLuba5e29 -gS5fHsWGAq+hsVrVPITFt22uSiora7X6Uqm+1V2AFBTIu90Ru2dhXbMGuWlTtiogBsM1syV6 -LKo49H9VVRXbn6N+Yhgfr842Z6HOf52RR0bFoG4+J6tm0m213XKckQMCs1ZqTSR6IePiVtVA -JkxQ568yXri8vNxqRZMegDgy0T116pTsPhanVwQSHh5u9nnp0mgaEBDhOtfJhx/mWanoaAIC -a1NuX0REklnkTwoIJo7/hTOO0KCgEjaWXHYdkIqKFrfz9iJad+dOs0PaMWiRdnOxBWTJkoNs -OpHMB3XLLl4RiIdHP7OTe0e1t3fQhdFJf/jhhbIX1vDYYfd7ZGQPm41bu6JMvcpCu99dKVri -IdHRqUOORvGB6ABIfPwjx4BgYLRncBQNiFq5e/cuTynF/+JriJNiP1JAlArSSiGRkZFEMdna -WJCMjARh/EVCMHJzkY/KJkM8QXnKlCkkJCSELF++nDDrgbCgFE8h7e7u1l0Kqb1Aystb6P79 -j5wCBJn1qCfUJT6bwuBAkIeK1H820vOkYDa15ymiyBK3vBiSpQHCcntHRwfP6UUqJD4j6xxZ -7LgesteR0Iw8VxwDUMhIR54r9rtDlwXLSKv2WAJhsROuDabbLGGo0hBbIGypoeX2t2/fEubS -54nGyJcFMBTsQ+Y4YBmTk5EXi2sgMdmRpGfLgiTw4RJkyAMKkreRu4tiOm4wj4bZ54GBAWUg -WkAoaY1cgcag4tvb20lSUhLvGuWORao/MuxxX+wh+NoNdKHILKc6LMZ01dLSVr5CwHzW/5DW -1DRbaZTBWYMYFsNY3pCp6SfVp9qTu2RvvhNa7EgACQ3tYV14mxWQX36p4ZknkkAQlvXx6XMJ -EKOJbAuIliieEpCPP36nGyCmXZIlkMEXriXapyFqgLlaQ4zQlM6xjM2MJBAlowJBsHv37g1f -l4WCtYK2WtBo7rLUWHlr1iTzNxqJD2TEkixKWQwkgIeAEVX18SmQBwJ7W8obKSVfffW3LoDc -u9fMxV01xJhlbwUEb0QIDv4/dxGriwx2OAWI8Wcm0GIQY0amh8GQxvPBpN6haAnEz+8JXbAg -BytlJe/Tz6+KH6NXIFaDuq9vilX40d4uy57WDhiBgQdlj0F2xtixJYpdFtQfUbi9e2/RpKRq -3sASEhJ4QjNEvxrSzGUIiJYfQbEXiJxZa6xcVJyta2NipXYMiY2tlnwtoB6BIH945cpCNqY8 -ds2g7sh4oDa5WQmIHFy9AIECrFuXzGIg8dJdlrIHtJx6ema5HIiHxxmnAGGeaN0DkeqVVANB -MrAxp8j4GiRbQIyLc7RWrlpvKs6JiOih8+dL//SR5Q+36AkI7kFOjLEig+012KlW2778cj/N -zu6QBTJr1p+q4w5azN7MzIeqzjEYnkumv+oBiJoiCaSqqpl+802cTNpMrcNdlj1Avv76taZz -kL0P8fZ+4v5A8PZPf/9rqgP0EFMgzEXuslm31nOM8N0aiJIYZ5dI8oqLK6Z5ee1mQE6duqy5 -ctV6fNHXvnr1SrNIRUDdBkhubq5shVRWttBp0zYODfZSXdaYMZUsuFUo+8sGJkBwjpXgXVpS -2yF0lBdJIHPmyC8/qK1tZprRpXoMgdXz6ac1DI76F+Ij0kgFLTJA8odlYihX8MIv8YFYvWzm -iFPc7/YU1mWKD0RqWbCcB9VZQBDWRMaJpSB1SGq70EAG3zaQaebYczYQrSas8EDy89sl38fh -CiBq8oWFADKSXy6+hrgpkJs3W3iYVnwgOgEyb14/TUnpFB/ISABB/Fv8LksnQPD2hxUr6sUH -ogcgZ86ckX2zjvhAhhEIXk3x+++Z4ltZegFSVtZCt2/vER+IO1hZlpNF8YGIPzEUC4j4RXwg -4gMRv4gPxK3LP7N+LgSx+SOAAAAAAElFTkSuQmCC' -] - -{ #category : #icons } -RTMondrianExample >> exampleForceIcon [ - ^ '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 -MAAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTMondrianExample >> exampleHappy2016 [ - -| values b ff | -values := #(61 91 31 2 3 4 5 36 66 96 125 154 183 212 241 241 271 272 273 274 275 276 249 219 189 159 129 99 69 69 39 10 11 12 13 44 74 104 134 164 164 194 194 224 254 283 282 281 280 166 137 108 79 50 21 22 52 82 112 142 172 202 232 262 292 120 90 59 58 57 56 55 84 114 144 174 204 234 264 295 296 297 298 299 270 240 210 209 208 207 206 205 ). - -b := RTMondrian new. - -b shape ellipse size: 20; - fillColor: (Color white alpha: 0); - if: [ :value | values includes: value ] fillColor: Color red. -b nodes: (1 to: 300). -"b shape line color: Color white." -b edges - moveBehind; - connectToAll: [ :value | - (value \\ 30 = 0) - ifTrue: [ Array with: (value + 30) ] - ifFalse: [ Array with: (value + 1) with: (value + 30) ] - ]. -b layout grid lineItemsCount: 30. -b build. - -ff := RTForceBasedLayout new. -ff initialLayout: (RTGridLayout new lineItemsCount: 30). -RTForceLayoutStepping new - view: b view; - layout: ff; - inView: b view. -^ b view -] - -{ #category : #icons } -RTMondrianExample >> exampleHappy2016Icon [ - ^ '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 -RK5CYII=' -] - -{ #category : #sources } -RTMondrianExample >> exampleHighlightableEdges [ - -| b edges | -b := RTMondrian new. -b shape circle size: 10; color: Color red. -b nodes: (1 to: 20). - -edges := b edges moveBehind; connectFrom: [ :v | v // 2 ]. -edges @ RTHighlightable. -edges @ (RTPopup text: [ :association | 'An edge from ', association key asString, ' to ', association value asString ]). -b layout cluster. -^ b -] - -{ #category : #icons } -RTMondrianExample >> exampleHighlightableEdgesIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAD40lEQVR4XuWcOy+sURSGR4NK -QvwZjVAoFBKFaERoNUQhGnEpNH6AaJQkfgIRCZ1EhDDu9/v9OnGZOfM6s2bOOTliOPj2zHxn -nifRme2zHnuvtfden8DLCx8/EeCHgC+ED18IXwgfvhC+ED58IXwhfPhC+EL48IXw4QvhC+HD -F8IXwocvhC+ED18IXwgfvhA+fCF8IXz4QvhC+PCF8IX4HLW0SIWF4gvxi5CyMr0EAvwZ4iee -np4UjUbfnSXq64tL0+ys+ELSxPb29rvBvhgYSAhZX+cLSSe3t7dvAr68vCz+kpUh9vf3/wT/ -4eFBZ2dn4ueQDBPt7NTJ+LiSzRa+kH9VSLFkq+JiZ4HT0lIiV1RWil9lfSeAFjgLYCQil5KP -Fxf5QrywtrbmNIBHR0d8IX6Tsre3x88hnvcSMzNSLCkrttHzOtbNzQ1fiGe6ul7iOaW7W6ne -LPKFfJKD2AxxNVY4HI7VCxH+xtALz8/PTgP4P80S324MXUt5HB6WPjh8TFo+9/YmSvK5OeGF -BINBZ0GITk8nAltf/6UxrwcHE5/b2eELub+/9xSElZUVXV9f6/fZltrbFRod1WdLYTvKPz4+ -Fn/J+uIMUWOjVFsr2wheXV3pMye7duB4cHDw4fednJyIn0P+ro4mJ6WhISXbgS8sLCgUCun8 -/FwKBL59W2hSkomx8flJ/c2TBeJfFpx/HYMEPZ5bmZTT01NpbEznaUzgvheyu7sbX7cfHx+l -iQmpv/9TwbHZ4uqPQDk5bCGWeG1Nv7y8VKYrMvX0SLF7FNu3GBgh1pBgSXPHUTlpM8r1M9qs -20ljuZtWIWpuloqKtLm5qY2NDee/ZCr7suJLaFNT2vq+0iOktDSlfVOp7stSeXna+r6y5k79 -8PCQ37nIF8IXwhfCF8IXwhfCF8IXwhfCF8IXwhfCF8IX4gv47xj6BDvltTvzH7/OyqxTMRMn -tGghdolld+cfLVHWQrS1taXV1dWM3WtkpRA1NEj5+fHA2qXR0zf7fe3zdgn2XFcn5eXx3zH8 -KjYDLi4uFHF87K2Kivh4Nra1CfGFJAtSa6uUmyt7FcEaDe7u7l4FyvUrCq9+dgybPdZEEamp -kQoKxBdSXZ3oDnynzdPl9exH+UQlJb745wO+T+ouG9Yy1fyWVULm5+flx7H4M4Q/Q3xS+ra1 -ybpWPI8zNSVVVUnhML/s9faEiZZSz0I6OhLFw8gIX4inQIZCkqOXN5XCEhp7dJLt8IXwhfDh -C+EL4cMXwhfChy+EL4QPXwhfCB++ED58IXwhfPhC+EL48IXwhfDhC+EL4cMXwocvhC+ED18I -Xwgft/wE8aALou9qsYoAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTMondrianExample >> exampleInnerAndPopup [ - | b | - b := RTMondrian new. - b shape rectangle withTextAbove. - b nodes: RTShape withAllSubclasses forEach: [:cls | - b shape rectangle color: Color red; size: #numberOfLinesOfCode. - b nodes: cls rtmethods. b layout grid ]. - b layout flow. - b build. - ^ b view -] - -{ #category : #icons } -RTMondrianExample >> exampleInnerAndPopupIcon [ - ^ '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 -AAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTMondrianExample >> exampleLayoutPartition [ -| b classes | -classes := (TRPlatform current packageNamed: 'Roassal2') definedClasses. - -b := RTMondrian new. -b shape circle size: 5. -b nodes: classes. -b edges connectFrom: #superclass. - -b layout - for: [ :c | (classes intersection: (Array with: c superclass), c subclasses) notEmpty ] use: RTTreeLayout new; - for: [ :c | (classes intersection: (Array with: c superclass), c subclasses) isEmpty ] use: RTGridLayout new; - horizontalLine. -b build. - ^ b view -] - -{ #category : #icons } -RTMondrianExample >> exampleLayoutPartitionIcon [ - ^ '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 -SUVORK5CYII=' -] - -{ #category : #sources } -RTMondrianExample >> exampleLegendInPopup [ - | b | - - b := RTMondrian new. - b interaction noInteractions. - - b interaction popup group: [ :group :el | - - | background elements cls legend1 legend2 | - elements := RTGroup new. - background := (RTBox new color: (Color green alpha: 0.8)) element. - - el model timesRepeat: [ - cls := RTEllipse. - 50 atRandom > 25 - ifTrue: [ cls := RTBox ]. - elements add: (cls new size: 10; color: (Color purple alpha: 0.5)) element - ]. - RTGridLayout on: elements. - - - "Legend Good" - legend1 := RTGroup new. - legend1 add: (RTBox new size: 10; color: (Color purple alpha: 0.5)) element. - legend1 add: (RTLabel elementOn: '= Good'). - RTHorizontalLineLayout on: legend1. - - "Legend Bad" - legend2 := RTGroup new. - legend2 add: (RTEllipse new size: 10; color: (Color purple alpha: 0.5)) element. - legend2 add: (RTLabel elementOn: '= Bad'). - RTHorizontalLineLayout on: legend2. - - RTVerticalLineLayout new gapSize: 0; on: (Array with: legend1 with: legend2 with: elements). - - RTNest new centerOn: background elements: (Array with: legend1 with: legend2 with: elements). - - group add: background. - group addAll: legend1. - group addAll: legend2. - group addAll: elements ]. - - b shape rectangle size: #yourself. - b nodes: (1 to:50). - b layout grid. - - ^ b view -] - -{ #category : #icons } -RTMondrianExample >> exampleLegendInPopupIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAADgElEQVR4XuWbsW7qMBiF+4oI -0T4G5QloxVMwdGJC3WDswMAEA4JSCRaoOrWVKE9A7ZsT4SpNY8dX1dUlfEc6SmL/RFE+Y/tP -nAtr+TolXfBvAR8IX3wgfCB88YHwgfDFB8IHwhcfCB8IX3wgfPGB8IHwxQfCB8IXHwgfCF98 -IHwgfPGB8MUHwgfCFx8IHwhffCB8IHzxgfCB8FUdIJeXl+b29tbEbJfLpX18fDT9ft9+fn6a -+/t7q7LE6f7NzY3h3/ZfAplMJub9/d3kt9Pp9Nu22+2a9XptVquVGQwGRkB6vZ6dz+f24+PD -PD8/84Hwu6wzBNJqtdLWrW7J7Sct3u52u3R/s9nYw+GQ7ufr3L/i+vrae7zf77/+QfJ2u7Um -kTt2MXwgfCCn32Vp/BiPx+bl5SUdL4bDoZU1XiTb1CqfzWbp+CHzgVRgDNFEQGCL4MoC4gA7 -yHwgR93d3ZmHhwfrLGWPfWWj0cjkf6tjlXtio84bKk/OY4vOo7KzG0OcpeyxryzfNck6VnlM -rO+8ofJ2u22bzeaPcpXxgfCB8IEggCgDzw64UnbAlVXmZlW+2RUfyInOst7e3r5mWM4qS8Db -LHgffF8DkPlA+Pr/Y0hRdp614pXVF9X5uiyXECrBLKo7dkemqPWXdWPuH6Lf++pD15U9Px8I -HwgfCB8IHwgfSKWB6Obmp516IyggRVPPer3OB1Klae/r6+uPPMT5+JTXFlkPIIsaR1luItdq -NT6QqinUUOSTAaLVJFoxUuSrq6u0Zfnq3UqT0DlkKVQfG6NMvdFoBGNUX3bNsdctq+vWKpuY -uH82qMcM4GXPqWL7/7+J8T06yY8nZd1T7HXLutGa5MTE8YHwgfCB8IHwgfCB8IHwgYQzdedO -p5NOe30Jme/NIR9IBRLDUFLmEjNfFp/J5oMNSFZ9WSM6vn1kA6myyhpTbKb/60zd2X0XUhaX -/W6kzE9PT3JUbEyGnok1Z/cKN+/8Amuf9dcOPdHNr+dNHBUbM3ZkY/lA+ED4QPhA+ED4QPhA -+ED4QPhA+EBOG0h+9XuR1+u11ffpoUcWbrWK+369zIvFgg+kynIfpJZZixn4QPjiA+ED4YsP -hA+ELz4QPhC++ED44gPhA+GLD4QPhC8+ED4QvvhA+ED44gPhiw+ED4QvPhA+EL74QPhA+OID -4QPhiw+ELz4QPhC+QvoDvX+dONQ5jLYAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTMondrianExample >> exampleNestingAndPopup [ - | b | - b := RTMondrian new. - b interaction noInteractions. - - b interaction popup group: [ :group :el | - | background elements | - elements := OrderedCollection new. - background := (RTBox new color: (Color green alpha: 0.5)) element. - el model timesRepeat: [ - elements add: (RTBox new size: 10; color: (Color purple alpha: 0.5)) element. - ]. - RTGridLayout on: elements. - RTNest new centerOn: background elements: elements. - group add: background . - group addAll: elements ]. - - b shape rectangle size: #yourself. - b nodes: (1 to:50). - b layout grid. - - b build. - ^ b view -] - -{ #category : #icons } -RTMondrianExample >> exampleNestingAndPopupIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAACO0lEQVR4XuXbzYrCMBQGUN// -IXXnUsGFgos6c4VAJjQ/ZaDang9KMbZReuJNK+3h9fLzTTn4h8AH8eOD+CB+fBAfxI8P4oP4 -8UF8ED8+iB8fxAfx44P4IH58EB/Ejw/ig/jxQfz4ID6IHx/EB/Hjg/ggfnwQH8TPdkDO5/P0 -eDymufX9fv+zvl6vr1hOp9N731jnbbGdf9hX+oXcbrc3zC/WGyByPB6ny+Uy+SB+ydp3yYrR -ncpUWYby8jT3Xipntdfl9mV/aRsfxAfZVsmKAxvzQyzxOh3YmEOiLeaPWHyQDc4hOW4JnJB9 -kOzsKT845cGqtT2fz6ncN15H+8i2tX5b7bV+om13c0itnNTaytIUS7pmGdm21m+rvdZPtPkg -PogPQoCMziE+yM6u1JdO6j6In++cQ3plo1aWeu+1+myN/pF9e5/bez/174P4ID6ID+KD+CCb -Bpk7HW2devogOzvtncNv/XHYGyA+iJ/PzCGjI6tXanrlZsk2I5818p1H+xr9XqO/MB/EB/FB -fBAfxAfxQXwQH+RjIHExlt+iky/pfl4fZEWQtTJ10rqKL6/mawNodBD5IBvPNJBV5pDW7aD/ -HVFL+hwdzd/+SIQP4oP4ID6ID+KD+CA+iA/ig/ggPshXgrRuLMgfOSsfS6stPgjy18m0ID6I -Hx/EB/Hjg/ggfnwQH8SPD+LHB/FB/PggPogfH8QH8eOD+CB+fBA/PogP4scH8UH8+CA+iB8f -xAfx44P48UF8ED+t/AB/sRc/XKQU+AAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTMondrianExample >> exampleNestingAndTitle [ - - | b | - b := RTMondrian new. - b shape rectangle withTextAbove. - b nodes: RTShape withAllSubclasses forEach: [:cls | - b shape rectangle color: Color white; size: #numberOfLinesOfCode. - b nodes: cls rtmethods. b layout grid ]. - b flowLayout. - ^ b build -] - -{ #category : #icons } -RTMondrianExample >> exampleNestingAndTitleIcon [ - ^ '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' -] - -{ #category : #sources } -RTMondrianExample >> exampleNormalization [ - - | b | - b := RTMondrian new. - -b nodes: RTObject withAllSubclasses. - -b normalizer - objects: RTObject withAllSubclasses; - normalizeSize: #numberOfMethods min: 5 max: 30 using: [:value | (value + 1) ln ]; - normalizeColor: #numberOfMethods using: (Array with: Color gray with: Color blue with: Color red ) using: [ :value | (value + 1) ln ]. - -b layout flow. -b build. -^ b -] - -{ #category : #icons } -RTMondrianExample >> exampleNormalizationIcon [ - ^ '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 -dUYAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTMondrianExample >> exampleNumbersAndBeziers [ - -| b | -b := RTMondrian new. - -b nodes: (1 to: 300). -b edges connectFrom: [ :value | value // 2 ]. - -b shape - bezierLineFollowing: [ :value | value // 2 ]; - color: Color blue trans. -b edges - notUseInLayout; - connectTo: [ :value | (value / 10) asInteger + (value \\ 10) ]. - -b layout cluster. -^ b -] - -{ #category : #icons } -RTMondrianExample >> exampleNumbersAndBeziersIcon [ - ^ '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 -nl0/lgAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTMondrianExample >> examplePartitioningAndNormalization [ -| b classes | -classes := RTLayout withAllSubclasses, RTBuilder withAllSubclasses, RTShape withAllSubclasses. - -b := RTMondrian new. -b shape circle size: 5. -b nodes: classes. -b edges connectFrom: #superclass. - -b normalizer - objects: classes; - normalizeSize: #numberOfMethods min: 5 max: 30; - normalizeColor: #numberOfLinesOfCode using: (Array with: Color green with: Color red ) using: #sqrt. - - -b layout - for: [ :c | c includesBehavior: RTLayout ] use: RTForceBasedLayout new; - for: [ :c | c includesBehavior: RTBuilder ] use: RTForceBasedLayout new; - for: [ :c | c includesBehavior: RTShape ] use: RTForceBasedLayout new; - flow. -b build. - ^ b view -] - -{ #category : #icons } -RTMondrianExample >> examplePartitioningAndNormalizationIcon [ - ^ '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 -Re7mS7a9SVe4O7xv1OZpiL5PjSbXN5V1ijWFda5KnJn5x33z/9XIDigXFrfsIwt67OyoG6iG -0lOHtAZCfnqi849kFNlOiXeYtRG1qVXrzq/cvHSKGDtQguGzyYmAQwSPFJDSFkvaAKGF0e60 -b+h07WjnTpSZTiIZ9/aziI50K9z/XXd+FTNLZydHda+uufhnD/4cmw6EbKtuVIfr9msp60St -SZMwLxVU0IUvaRP0oNaOlACRDZcicv6cyGVdj+zzVvyy55m4u8FkDptGmtCO9k0Bkgqz9MCA -yH2rAzU6HNpQcBmOOWKDMwJOeXpDXrEZKW2iPo/yU76oW21WbMT0xXox0XgmYESx49ymwgiE -F/D+QV3mAfmf/wZaA02fueLFo+8n9M424rWlSjq/Fsp7DVJGb50kEp0XVNuqhWmiaJ5MUuHA -Wwk7nU76JCbaFCB66GHH0tb2ym3ulVpr05E/kAegWE9tpQpQgPzwxR/I56TztvNsOjsjgBwP -X/yVZiaLv/gD4Q+Ev/gD4Q+Ev/gD4Q+Ev/gD4Q+Ev/gD4S/+QPgD4S/+QPgD4S/+QPgD4S/+ -QPgD4S/+QPiLPxD+QPiLPxD+QPiLPxD+QPiLPxD+QPiLPxD+4g+EPxD+4g+EPxD+4g+EPxD+ -eiD6P5rJTjj+5tZzAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTMondrianExample >> exampleRadialTree [ - | b | - b := RTMondrian new. - b shape circle size: 10. - b nodes: (1 to: 100). - b edges connectFrom: [ :v | v // 2 ]. - b layout radialTree. - b build. - ^ b view -] - -{ #category : #icons } -RTMondrianExample >> exampleRadialTreeIcon [ - ^ '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 -eVqoeUse4lsAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTMondrianExample >> exampleRandomGraph [ - -| nbOfNodes nbOfRandomEdges nodes edges b | - -nbOfNodes := 40. -nbOfRandomEdges := 40. - -nodes := 1 to: nbOfNodes. -edges := (1 to: nbOfRandomEdges) - collect: [ :notUsed | nodes atRandom -> nodes atRandom ]. - -" -In case you do not wish random data. You can set it manually. -nodes := #(1 2 3 4 5). -edges := { 1 -> 2 . 1 -> 4 . 4 -> 3 }. -" - -b := RTMondrian new. - -b shape circle color: (Color black alpha: 0.5). -b nodes: nodes. - -b shape line color: (Color gray alpha: 0.3). -b edges - source: edges connectFrom: #key to: #value. - -b layout force. -^ b -] - -{ #category : #icons } -RTMondrianExample >> exampleRandomGraphIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABeCAYAAADVA7GfAAADjElEQVR4XuWbW0syURSG+//X -RfgDIuhCobAuzIyKqDACLdJCJYTO5/Nx9fEKG8Zx7JsxzRmfBwRzxIv1zFp7rb2nse9vPnFi -jB8CvhA+fCF8IXz4QvhC+PCF8IXw4QvhC+HDF8KHL4QvhA9fCF8IH74QvhA+fCF8IXz4Qvjw -hfCF8OEL4QvhwxfCF8KHLyQqjUbD9OIL4QthC3l6ejJ+yYoJ9XrdisUiX8gokU6nbXl52fhC -/piJiQnjZ0gfKBQKtrm5+etg3t/f84XEiefnZ76QJHZis7OzxhcyYLa3t0MHeXd3ly9k0Kyt -rdnX1xe/ZMWFh4cH488hfWRnZ8fu7u56Curn56e9vb3xhfSTZrNp7+/vgUGdm5uzQba7arv5 -QkJ2SldXV/bx8WHX19dds+Do6OhXAd3a2uIL+d/drplCIrxl6eXlpa2s6frFxYWtrq6GCujS -0pKtrKwYv2T5gnJwcNA1KK+vr5bP5wPLlyRJWLVaNc0Syhqh73Yrd27Bj/PQGPsu6+TkpGvw -pqamTNlyenra9h1vNjlmZmbs/Pzc+Iv6gKZuzRkuS/wZ4V3Y9Z0knaEkVkipVLLDw0N7fHwM -bJE1rd/e3kYWcXNzw1/Uow56Wiu0qLu/Ly8vO4K4sLDQU2AXFxfbfpsvJAD/Iqz213VbQdf9 -XVkU1EjwMyTCsOa9e50ILfw6BRQqcWp/da2XIa/XHQKUkOPj41Y3pSB7s8EdxXoXdUlxGRJV -iH5H8IWEoFKpWLlcbgvWxsaG+e/q33RUOqlUdmGFqEsKu/ekO7dWq7XdweqwvHVfa8tPcwu/ -7Q0hJMpWuQKucqTtEc0hkqnPzs7OWiVNk38ul+Pv9v4FEqCJXFmRzWZbIvWZEyo53g5J4nRN -svhC+sjk5GRLguugNOwJzQvKikwmY24OCSp/erBumHPFyGaIC7iyRNP0/v5+S4Teu4nczSe9 -MD4+bnwhEVBWpFKpjiZAMlSaJKeXrRJ+hgxgbXHvp6enLekPYydaiH+bw+0A84UMifn5+Y7g -J7nlTbyQoONaZU2Yrmpvb8+G/UDDSK4hQWg45GdIjNC/tiVp9hh5IeKnBx34QobEsM82+EJ8 -rK+vx3Lhxgrhlyw+fCF8IXz4QvhC+PCF8OEL4QvhwxfCF8KHL4QvhA9fCF8IH74QPnwhfCF8 -+EL4QvjwhfCF8OEL4QvhwxfChy+EL4TPT/wDMqwUZqPbYhgAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTMondrianExample >> exampleSidesAndRadius [ - -"Thanks to Peter Uhnak for the script" -|sidesCount radius points b els edges| -sidesCount := 70. -radius := 2000. - -points := (1 to: sidesCount) collect: [ :i | - i -> ( - (radius * ((Float twoPi * i) / sidesCount) cos) - @ - (radius * ((Float twoPi * i) / sidesCount) sin) - ) -]. - -b := RTMondrian new. -(b shape ellipse) - color: Color transparent; - size: 0. -els := (b nodes: points). -(b edges shape line) - color: Color black. -edges := b edges connectToAll: [ :src | points copyUpTo: src ]. - -b build. -els do: [ :el | - el translateTo: el model value. -]. - -b view @ RTZoomableView @ RTDraggableView. - -^ b view - -] - -{ #category : #icons } -RTMondrianExample >> exampleSidesAndRadiusIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABeCAYAAADVA7GfAAA3UUlEQVR4Xo3dBdB1VdnG8e2o -I+ZgAgYSigpiYmKBIKIIYqDYiYggtliIitiBjd3dIHaCIjYqdreggp0s9Ldm/s/sz5lvvu+d -ed7zPOfsvdYd133d94q9znLyySeP973vfeOTn/zk+N73vjfO/s+/pz/96eONb3zjeO1rXzt/ -nvSkJ42PfvSj4/vf//64053uNK8/+T/3vfnNbx73vve9x5FHHjmue93rjj322GMccsgh8+cz -n/nMeNOb3jS++c1vjm984xuz3Wc+85njJz/5yfjyl7883vWud40f/ehH8/33vOc944c//OH4 -zW9+M7761a/O9k488cT5nn7+9Kc/zfae8YxnjMMPP3ze459rDjvssI2///jHP45b3OIWG3// -9a9/HVtvvfX4wAc+MN/77Gc/O+//yEc+Mj71qU+Nl7/85ePPf/7z7PPd7373+Oc//zll+stf -/jIe+chHzmue97znDe24/53vfOd8pderXvWqcbnLXW5c7WpXmza49a1vPe5+97uPBz3oQfMa -cu+1117j1a9+9dTrFa94xXja05423vKWt4wPfehD4+CDD546upbd3/72t48XvvCFY/Hfscce -O25+85uPhzzkIdPY//jHP8b+++8/3vGOd4wf//jHGwqeeuqp44wzzpifvf/97x/77LPP+O1v -fzue8IQnjJe85CXj4he/+DTQF77whWlwyrhPZ4Tw91e+8pVphBe84AXj9a9//TjppJMmGAj+ -4Q9/ePziF7+Y95CDkj6v/1vd6lazn0984hPjBz/4wZT1Pve5z1TMj/fvd7/7TQMzLoNyyKc/ -/emNNnbbbbfxnOc8Z/z6178ep5122tSVDTgcEBmHPtrjGO2R/fOf//wEkza897a3vW2CdPPN -Nx9XvOIVx/HHHz/7e8QjHjHe8IY3jOc///mzH4D817/+Ne9zP30e9ahHjY9//OMTaEccccS4 -zW1uM5785CfPIFhcqCHI97sbjj766Hmhjh/72MeO5z73udNpz372s6exGZKHL3/5y49nPetZ -43Wve9245S1vOX9/2cteNtuBSteLhj/84Q/jmGOOmUr5zDUMT3ACM8bXv/712abfXXPWWWdN -IV/60peOb33rWzM6GAvCjzvuuOk8RoE6xqMD1D7mMY+ZMj7xiU8c3/72t6ce2iQjw+65557j -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 -lZrmMgAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTMondrianExample >> exampleSimpleNesting [ - - | b | - b := RTMondrian new. - - b nodes: (1 to: 20) forEach: [ :each | - b nodes: (1 to: (each)). - b layout grid. - ]. - b build. - ^ b view -] - -{ #category : #icons } -RTMondrianExample >> exampleSimpleNestingIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABeCAYAAADVA7GfAAACz0lEQVR4XuWZzY3CMBCFqZY2 -aIACoAyogSMFUACcOMGJU7L7VjvS7Mh/sPwk+Z40smKPEuSP57GTWd/zNSTN+FPAB8IXHwgf -CF98IHwgfPGB8IHwxQfCB8IXHwhffCB8IHzxgfCB8MUHwgfCFx8IHwhffCB88YHwgfDFB8IH -whcfCB8IX3wgfCB88YHw9SYgh8Oh2+/3veJ6vXb+2vefTqc+9qvvnn4LPYMPJKPNZtMtl8te -8T2Jnb/2/ZrI2G8TXOpfLBb9er3+0263Wz4QPpCJLVl+4jWxikeAKPhAniA+kIEB4Rf1DyxZ -qaWqNF6beI1dLpeuBMaWw1ogi3qqmJfGc0uWHz8ej10s6r646xm5cWtXqxUfCB8IHwgfCB/I -AIHsdrtOE5OK8/n8A0QTorBta9z22njM80Cs37ceSByPwd/2OgfpX+rPERGIjcc8D2Q+n/ex -9UDiOB/IAw7StlVRGpfLcuO6d2ncBwaIJkT/0lLcbrfu941vMZTTkmehZ+verfmK30Nq028e -bVFPLRE+7OViLc+WsFqef4ViS1ZrSC15WipHCyTWgBgGpJaXqimp2tFSQ3yrQm/XBiSOx98y -aiB8h/AdwncI3yETcEgE8gyH5IDUHBKBTNYhOgsISim0PdWZopZn55JanoWdQ1rzFZN3yBhV -cggfyIeA8B3C1/h2WY/utu6pDffutl7pmMGfQ1K7rdLuyVoPpHYOSZ1HUrusd+y6+A7hO4Tv -kI8ASX3N860BiV8GcxG/JJburdYDacn3QHx/KfgOeYFDfDv5GlL6R/6nhuS+kbfWkFaH8GtI -4ht76lt7zhk5IDWHpN5p8R3yQYdEIJNzCF98IHwgfPGB8IHwxQfCB8KfAj4QvvhA+ED44gPh -A+GLD4QPhC8+ED4QvvhA+OID4QPhiw+ED4QvPhA+EL74QPhA+OID4YsPhA+ELz4QPhC+nqov -6Ocd2QtwZA0AAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTMondrianExample >> exampleSimpleTree [ - - | b | - b := RTMondrian new. - b shape rectangle size: 10. - b nodes: (1 to: 100). - b edges connectFrom: [ :v | v // 2 ] to: #yourself. - b layout tree. - b build. - ^ b view -] - -{ #category : #icons } -RTMondrianExample >> exampleSimpleTreeIcon [ - ^ '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 -8QfEn76P/gCZdK8iJGbd0AAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTMondrianExample >> exampleSimpleTreeLayout [ - | b | - b := RTMondrian new. - b shape rectangle size: 10; borderColor: Color black. - b nodes: (1 to: 100). - b edges connectFrom: [ :v | v // 2 ]. - b layout tree. - b build. - ^ b view -] - -{ #category : #icons } -RTMondrianExample >> exampleSimpleTreeLayoutIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABjCAYAAABt56XsAAAFQUlEQVR4XuWbuU7sMBSG82S8 -Ei1ILAUSPAodLRJi6aCkQKJBghKExL5vnstn3YNyfZ0ZJ/FkwvxHGiVxvByfL7b/OFAMBvrW -Jyv0Q6APRN/0gegD0Td9IPpA9E0fiD4QfdMHog9E3/SB6Js+EH0g+qYPRB+IvukD0Qeib/pA -9IHomz4QfdMHog9E3/SB6APRN30g+kD0TR+IPhB90weib/pA9IF0YbOzs4Ozs7PB8vKyPhB9 -IOJAPj4+3N3dnfv8/HT39/fu9fXVle+7b3t+fna3t7f++PX15fNw/fT05K/1gTQwAk7gAfD4 -+OiDm7uNt7c3D/Xh4cG3w49z0t7f350kEJ5oAkBwCDrB7+PDwehilDHaGGU2Cl9eXuiC+3VA -cJpg0wF7MnN2pA9Gf8Lpkb4y0m0U9gYIiy4/ZUuJQdGlEuKnbCkxyA6EYWoqyNaH8lBlKDNt -cc6R62mGQDysnxhx4ZqYhAqxNRAqtbXAVFETWYljtpijbqZhfWHNMMk9bM0hnx1rAek6aLlg -d2nExWR6U4hRILzx2ltvn6aV8nR4cHDg8HFtbW2ivu3t7flYbW1teb/GInt/gyIiCPg4aaFw -c3Pj/eA4tveQ36CIVldXHT7OzMxMdIRsbm76WHHMDoS5j3mQoceP8769OYfzNEfbv5qEP6yt -9kKYY2ov6Ii9RVdlmnSnw4elSrGYpO5i8QdAbGPTtoAaA6mjlLrudMrDUhUs/DMpOQ4Y9i5V -FSceniZgijZO7ezseKWD0shlqCbqpO4cshqYZdXY1relpSW3v7/vUlXhysqKbx9VOCyvqcai -TwrDBEXuj025VGMT31LLmGos+qQwMFQTdaKiutxDGpdvqWVMNbYCYqqCl7Vcb+emWobN0XWM -emwBblunffuoUw95U/KbIChyLWoWyDZrUvi9oC3omAxtKk1ZD8r+pfhWLjOq3dp7WeFT0kR9 -VNmwzsVANYXRBkqszCjfymVCoGFMf1TW3NycS1mkUBjkTVELCwsLLmWPiXbn5+dH5tve3k5W -c+TDz4R8yepnWH9ivlWVIS2MdehvkapA6qqFlEU0te06aq7r/sR8qyoT8y1MK1IVSF21kLLH -lNp2HTXXdX9ivlWVifkWphWpKqCuWhj2YcaM7x38UhZ86kwRDZPoz/X1tYuMnOiaE279sJiX -dyIKk5vDtkKaqIVRnS3fT807aivEfOuyP/b3W+HDEtvyoa6wHmD/B6SOKklVC6MCmAokrKMq -bwihq/7YyCnXGYNowEK/wpH/AwSVgArIpRZsLg2VDPWTL2yHtLCdv3tQ/6TFVCHl8ClsZ9z9 -sTyHh4fO/FpfX/f7XbS7uLj4o8C4zz3bV6OMKT3SLSbFuNRClZKZpna+A+mvAcCR642NDX/O -Im912Dn3RpUpSsNzcH5+zhw3KD9lpIXqhrRQgnIdLm6UI2/5KZ2mdo6OjgaXl5dud3fXl+f6 -+PjYn5+cnPg6yufcIw/nVWWKUW/MsTT7c9BwXg73/+1vYlPq/K3t5P5oV4QLWLjAxb4U4lTM -sVi+sKPT1s7YgZQbMCfLaaajQwWC/MNiSqdcftrayQ7E5jXmRua1i4sLZ/Pa1dWVY17jaHMc -+cK5kLnWylDe5kzSrfy0tsMacnp6mu/fEVJW/iZqQakMELOPkGErfxO1oFQm6wgZ6FuvTB+I -PhB90weiD0Tf9IHoA9E3fSD6QPRNH4g+EH3TB6Jv+kD0geibPhB9IPqmD0QfiL7pA9EHom/6 -QPRNH4g+EH3TB6IPRN/0gegD0Td9IPpA9E0fiL5F7A9htB21NeOvdgAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTMondrianExample >> exampleStyledLabels [ - -| b | -b := RTMondrian new. -b shape styledLabel - height: 80; - bold. -b node: 'Hello'. -b shape styledLabel - height: 80; - italic. -b node: 'World'. -^ b -] - -{ #category : #icons } -RTMondrianExample >> exampleStyledLabelsIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAFhUlEQVR4XuWZh0stPRDF/c9t -2FDE3isWsPeCvVcQGxasWLFiQezj986+N0vu7l7dveKHcA4E705ys0l+yczkGvXxwa/fpCj+ -JeAHwi9+IPxA+MUPhB8Iv/iB8APhFz8QfiD84gfCL34g/ED4xQ+EHwi/+IHwA+EXPxB+IPzi -B8IvfiD8QPjFD4QfCL/4gfAD4Rc/EH4g/OIHwi9+IPxA+MUPhB8Iv/iB8APhFz8QfiD84gfC -L34g/ED49VuAnJ+fy9ramlVMu9pQz4/gfwQyPDz8ERMTYxVTakM9k8bGxuSrOUdhYeLi4iTI -gv52IO/v73J3dydPT0+e84q07rvCnGtra4UOyPz8vITrv729PWxdR0eHVffw8CA/cTrQ997e -Hh8Qfe/R0VHIvC4vL0Xfvb6+HlKHUwE7oPzEmBITE8XPOn4LyOLiotTV1UlOTo709PS4gnQk -QOAyBgcHJT8/XyoqKmRkZCTwAlVVVXlOPiMjQxoaGqy6l5eXkH7Ly8sl0o33lTAn9N3f3y8/ -BiQ3N9febWaZmZmRSIFMTEx49olyeHgoQXy1851zc3MSGxsr4+PjroVH37AtLy+73jE1NWVt -ONSnp6fLxsZG2LX6444+5I+wOdG+ubnZatvd3W09Pz4+ur57dXUlcKPR0dESHx8vFhAM9Pb2 -1lV6e3vFa3LFxcW2HZ8xmOTkZNt2fX0tQYFsbm6GwOjs7JTS0tIQG4K1XyDZ2dl227e3N6uf -ra0tjNUFJC0tTXB6TNv+/j7aWW2bmpqkpaXFHgvGarYFSNi3t7etv0lJSYL10OQANrzDOc76 -+nrRA4H5ZmZm/gXip6gQlNSGQGW+AGBh7+rqCgxEJ49iZjkmKD/+HdD+9W23LSsrk5KSEjE3 -k2ppacl6Pj09tdvv7u5aNrgxs2+1Z2VlhdjhXmEHBN2MKsQq1E1PT3u6yIWFBXG5rCBAQDKc -GxsaGhLTBfoFcn9/b/c5MDDgWnQF7cfH6wLPzs5a/eBUmJDxuaCgQMyx1NTU2M83NzdWe0D0 -4w7hovCMoA052+spN6Wex3nSIoohCQkJ4hegXyCTk5N2n15+3HQXfjMsDdrwzWZiYAZX9fWm -K8zLy5PP3CPqkDToM/qG7eTkRPzcPRBHvE5fxEBM1/JJCXRC1K+rn3eOQxfODxBkfdoOwRL+ -3PluvFfjiul24W5ga2tr81wPBHjU456jNgRina+fu4fegxDMne3hNgMDUd8XZLd+BcSMS6bv -N4Ou33diceA+1A2a2dnz87MdfLFrsZheLvf4+Fj83CWwqHjG9/zePT6bR2NjY3AgZmrq/NHw -OxdDtaWmpopXDo9SWFgofjIs+OiioiJx/kyxsrIimgUqGLMe/YdbLD0d5px1t7++voqfu4fG -m3DzQF1E9xDTPfX19cnZ2ZlgcprGeX1/dXVVnN9vbW0VPc5wE2pHIER2oncHtTtv3k7phHGh -9FpYHQ9gIdsKd6FENuWVKVVXV7vcnzNdVnndPfTUIg4721dWVkrEQA4ODj6NIxpE4RO9MjUz -DpmnRHeoV/FyZU7pwjk3gNMloWBxnPV6n9BxoWiQd6bc2taMJ16b1hkT1Q646B8bGs960Y74 -po40Un+G0ILd4kzldLei4LJl5vMo2Blm+9HRUevWqvW4He/s7EiQ37DMtNYrBQ0XtPX95pzg -9i4uLlzt9e4RTikpKZ4/YppzR0EG+S/BEFxA+f9jyPQPKn7xA+EHwi9+IPxA+MUPhB8Iv/iB -8IsfCD8QfvED4QfCL34g/ED4xQ+EHwi/+IHwix8IPxB+8QPhB8IvfiD8QPjFD4QfCL/4gfCL -Hwg/EH7xA+EHwi9+IPxA+MUPhB8Iv/iB8IsfCD8QfvED4QfCL34g/ED49bP6D68in6oZc4LN -AAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTMondrianExample >> exampleSystemComplexity [ - - | b | - b := RTMondrian new. - b shape rectangle - withBorder; - width: [ :cls | cls numberOfVariables * 5]; - height: #numberOfMethods; - linearFillColor: #numberOfLinesOfCode within: RTObject withAllSubclasses. - b nodes: RTObject withAllSubclasses. - b edges connectFrom: #superclass. - b layout tree. - b build. - ^ b view -] - -{ #category : #sources } -RTMondrianExample >> exampleSystemComplexity02 [ -| b | -b := RTMondrian new. - -b shape rectangle - width: #numberOfVariables; - height: #numberOfMethods. - -b nodes: RTObject withAllSubclasses. - -b edges - connectToAll: #subclasses. - -b normalizer - normalizeColor: #numberOfLinesOfCode using: (Array with: Color green with: Color red) using: #ln. - -b layout tree. -b build. -^ b - -] - -{ #category : #icons } -RTMondrianExample >> exampleSystemComplexity02Icon [ - ^ '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' -] - -{ #category : #icons } -RTMondrianExample >> exampleSystemComplexityIcon [ - ^ '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' -] - -{ #category : #sources } -RTMondrianExample >> exampleTreeAndBeziers [ -| b | -b := RTMondrian new. -b shape circle - size: 8; - if: [ :c | '*Line*' match: c name ] fillColor: Color red. - -b nodes: TRShape withAllSubclasses, RTShape withAllSubclasses. - -b shape line. -b edges - connectFrom: #superclass. - -b shape bezierLineFollowing: #superclass; color: (Color blue alpha: 0.2). - -b edges - objects: TRShape withAllSubclasses, RTShape withAllSubclasses; - notUseInLayout; - connectToAll: #dependentClasses. - -b layout tree. -^ b -] - -{ #category : #icons } -RTMondrianExample >> exampleTreeAndBeziersIcon [ - ^ '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' -] - -{ #category : #sources } -RTMondrianExample >> examplenestedTree [ - - | b | - b := RTMondrian new. - - b nodes: (1 to: 100 by: 10) forEach: [ :each | - b nodes: (1 to: each). - b edges connectFrom: [ :v | v // 2 ]. - b layout cluster. - ]. - b layout grid. - b build. - ^ b view -] - -{ #category : #icons } -RTMondrianExample >> examplenestedTreeIcon [ - ^ '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 -QmCC' -] - -{ #category : #accessing } -RTMondrianExample >> label [ - ^ 'Mondrian' -] diff --git a/src/Roassal2/RTMondrianFrame.class.st b/src/Roassal2/RTMondrianFrame.class.st deleted file mode 100644 index 418d7072c..000000000 --- a/src/Roassal2/RTMondrianFrame.class.st +++ /dev/null @@ -1,105 +0,0 @@ -" -A RTMondrianFrame is an elementary unit in Mondrian. - -Instance Variables - childrenFrame: - depth: - elements: - parent: - parentFrame: - -childrenFrame - - xxxxx - -depth - - xxxxx - -elements - - xxxxx - -parent - - xxxxx - -parentFrame - - xxxxx - -" -Class { - #name : #RTMondrianFrame, - #superclass : #RTObject, - #instVars : [ - 'parentFrame', - 'depth', - 'parent', - 'elements', - 'childrenFrame' - ], - #category : #'Roassal2-Builder-Mondrian' -} - -{ #category : #adding } -RTMondrianFrame >> addElements: someElements [ - elements addAll: someElements -] - -{ #category : #frames } -RTMondrianFrame >> childrenFrames [ - ^ childrenFrame copy -] - -{ #category : #accessing } -RTMondrianFrame >> depth [ - "Return the depth of the frame, as integer" - ^ depth -] - -{ #category : #accessing } -RTMondrianFrame >> depth: anInteger [ - "Set the depth of the frame, an integer" - depth := anInteger -] - -{ #category : #accessing } -RTMondrianFrame >> elements [ - ^ elements -] - -{ #category : #initialization } -RTMondrianFrame >> initialize [ - super initialize. - depth := 1. - childrenFrame := OrderedCollection new. - elements := RTGroup new. -] - -{ #category : #frames } -RTMondrianFrame >> numberOfAllFrames [ - ^ 1 + (childrenFrame inject: 0 into: [ :sum :frame | sum + frame numberOfAllFrames ]) -] - -{ #category : #frames } -RTMondrianFrame >> numberOfChildrenFrames [ - ^ childrenFrame size -] - -{ #category : #'accessing-computed' } -RTMondrianFrame >> numberOfElements [ - ^ elements size -] - -{ #category : #accessing } -RTMondrianFrame >> parentFrame [ - ^ parentFrame -] - -{ #category : #accessing } -RTMondrianFrame >> parentFrame: anObject [ - parentFrame := anObject -] - -{ #category : #frames } -RTMondrianFrame >> pushFrame: aFrame [ - childrenFrame add: aFrame. - aFrame parentFrame: self. - aFrame depth: self depth + 1 -] diff --git a/src/Roassal2/RTMondrianFrameTest.class.st b/src/Roassal2/RTMondrianFrameTest.class.st deleted file mode 100644 index 34bdc49c7..000000000 --- a/src/Roassal2/RTMondrianFrameTest.class.st +++ /dev/null @@ -1,23 +0,0 @@ -Class { - #name : #RTMondrianFrameTest, - #superclass : #RTTest, - #category : #'Roassal2-Builder-Mondrian' -} - -{ #category : #tests } -RTMondrianFrameTest >> testDefault [ - - self assert: RTMondrianFrame new elements isEmpty -] - -{ #category : #tests } -RTMondrianFrameTest >> testDefaultDepth [ - - self assert: RTMondrianFrame new depth equals: 1 -] - -{ #category : #tests } -RTMondrianFrameTest >> testDefaultElements [ - - self assert: RTMondrianFrame new elements isEmpty -] diff --git a/src/Roassal2/RTMondrianTest.class.st b/src/Roassal2/RTMondrianTest.class.st deleted file mode 100644 index 8505ee2bd..000000000 --- a/src/Roassal2/RTMondrianTest.class.st +++ /dev/null @@ -1,707 +0,0 @@ -Class { - #name : #RTMondrianTest, - #superclass : #RTTest, - #instVars : [ - 'b' - ], - #category : #'Roassal2-Builder-Mondrian' -} - -{ #category : #running } -RTMondrianTest >> setUp [ - super setUp. - b := RTMondrian new. -] - -{ #category : #'tests - nodes' } -RTMondrianTest >> testBasic [ - | pos someNodes | - someNodes := b nodes: (1 to: 5). - b applyLayout. - - pos := b view canvas shapes collect: #position. - self assert: pos asArray equals: ((Array new: 5) at: 1 put: ((2.5@2.5)); at: 2 put: ((17.5@2.5)); at: 3 put: ((32.5@2.5)); at: 4 put: ((47.5@2.5)); at: 5 put: ((62.5@2.5)); yourself). - - self assert: someNodes equals: b view elements -] - -{ #category : #'tests - nodes' } -RTMondrianTest >> testBasic2 [ - | someNodes | - someNodes := b nodes: (1 to: 5). - b build. - - self assert: b view numberOfElements equals: 5 -] - -{ #category : #'tests - edges' } -RTMondrianTest >> testBasicEdges [ - - b nodes: #(1 2). - b edges - connectTo: [ :v | v + 1 ]. - b build. - - self assert: b view edges size equals: 1 -] - -{ #category : #'tests - edges' } -RTMondrianTest >> testBasicEdgesAndTree [ - - b nodes: #(1 2). - b edges - connectTo: [ :v | v + 1 ]. - b layout tree. - b build. - - self assert: b view edges size equals: 1 -] - -{ #category : #'tests - nodes' } -RTMondrianTest >> testBasicWithNesting [ - | result pos | - b nodes: (1 to: 2) forEach: [ :nb | - b shape rectangle color: Color red. - b nodes: (1 to: 3) ]. - - b applyLayout. - - result := ((Array new: 8) at: 1 put: ((22.5@7.5)); at: 2 put: ((77.5@7.5)); at: 3 put: ((8.0@8.0)); at: 4 put: ((23.0@8.0)); at: 5 put: ((38.0@8.0)); at: 6 put: ((63.0@8.0)); at: 7 put: ((78.0@8.0)); at: 8 put: ((93.0@8.0)); yourself). - - pos := b view canvas shapes collect: #position. - self assert: pos asArray equals: result -] - -{ #category : #'tests - nodes' } -RTMondrianTest >> testBasicWithNestingAndDifferentSizeOfInner [ - | result pos | - b nodes: (1 to: 2) forEach: [ :nb | - b shape rectangle - size: [ :aValue | aValue * 5 ]; - color: Color red. - b nodes: (1 to: 3). - b layout grid ]. - - b applyLayout. - - result := ((Array new: 8) at: 1 put: ((15.0@20.0)); at: 2 put: ((55.0@20.0)); at: 3 put: ((7.5@7.5)); at: 4 put: ((20.0@10.0)); at: 5 put: ((12.5@27.5)); at: 6 put: ((47.5@7.5)); at: 7 put: ((60.0@10.0)); at: 8 put: ((52.5@27.5)); yourself). - - pos := b view canvas shapes collect: #position. - self assert: pos asArray equals: result -] - -{ #category : #'tests - nodes' } -RTMondrianTest >> testBasicWithNestingAndGridLayout [ - | result pos | - b nodes: (1 to: 2) forEach: [ :nb | - b shape rectangle color: Color red. - b nodes: (1 to: 3). - b layout grid ]. - - b build. - - result := ((Array new: 8) at: 1 put: ((12.5@12.5)); at: 2 put: ((47.5@12.5)); at: 3 put: ((8.0@8.0)); at: 4 put: ((18.0@8.0)); at: 5 put: ((8.0@18.0)); at: 6 put: ((43.0@8.0)); at: 7 put: ((53.0@8.0)); at: 8 put: ((43.0@18.0)); yourself). - - pos := b view canvas shapes collect: #position. - self assert: pos asArray equals: result -] - -{ #category : #'tests - nodes' } -RTMondrianTest >> testBasicWithNestingAndNesting [ - | result pos | - b nodes: (1 to: 2) forEach: [ :nb | - b shape rectangle color: Color red. - b nodes: (1 to: 3) forEach: [ :nb2 | - b shape rectangle color: Color blue. - b nodes: (1 to: 3) - ]. - b layout grid ]. - - b build. - - result := ((Array new: 26) at: 1 put: ((52.5@22.5)); at: 2 put: ((167.5@22.5)); at: 3 put: ((28.0@13.0)); at: 4 put: ((78.0@13.0)); at: 5 put: ((28.0@33.0)); at: 6 put: ((13.5@13.5)); at: 7 put: ((28.5@13.5)); at: 8 put: ((43.5@13.5)); at: 9 put: ((63.5@13.5)); at: 10 put: ((78.5@13.5)); at: 11 put: ((93.5@13.5)); at: 12 put: ((13.5@33.5)); at: 13 put: ((28.5@33.5)); at: 14 put: ((43.5@33.5)); at: 15 put: ((143.0@13.0)); at: 16 put: ((193.0@13.0)); at: 17 put: ((143.0@33.0)); at: 18 put: ((128.5@13.5)); at: 19 put: ((143.5@13.5)); at: 20 put: ((158.5@13.5)); at: 21 put: ((178.5@13.5)); at: 22 put: ((193.5@13.5)); at: 23 put: ((208.5@13.5)); at: 24 put: ((128.5@33.5)); at: 25 put: ((143.5@33.5)); at: 26 put: ((158.5@33.5)); yourself). - - pos := b view canvas shapes collect: #position. - self assert: pos asArray equals: result -] - -{ #category : #'tests - nodes' } -RTMondrianTest >> testColor [ - - | view | - b node: 1. - b shape rectangle. - b node: 2. - b build. - view := b view. - - self assert: view elements first trachelShape color equals: view elements second trachelShape color -] - -{ #category : #'tests - edges' } -RTMondrianTest >> testConnectFromTo [ - - b := RTMondrian new. - b nodes: #(1 2). - b edges allowRepetition; connectFrom: 1 to: 2. - - b build. - - "We have two edges because of the repetition" - self assert: b view numberOfEdges equals: 2 -] - -{ #category : #'tests - edges' } -RTMondrianTest >> testConnectFromToNoRepetition [ - - b := RTMondrian new. - b nodes: #(1 2). - b edges noRepetition; connectFrom: 1 to: 2. - - b build. - - "We have two edges because of the repetition" - self assert: b view numberOfEdges equals: 1 -] - -{ #category : #'tests - frames' } -RTMondrianTest >> testDefaultFrameDepth [ - - self assert: b rootFrame depth equals: 1. -] - -{ #category : #'tests - frames' } -RTMondrianTest >> testDefaultFrames [ - - self assert: b numberOfAllFrames equals: 1. -] - -{ #category : #'tests - frames' } -RTMondrianTest >> testDefaultRootFrameAndCurrentFrame [ - - self assert: b rootFrame equals: b currentFrame -] - -{ #category : #'tests - edges' } -RTMondrianTest >> testEdgeInInnerFrame [ - - b node: '1' - forIt: [ - b nodes: (1 to: 2). - b edges connectFrom: #yourself. - b layout verticalLine ]. - b node: '2' - forIt: [ - b nodes: (3 to: 4). - b layout tree ]. - b layout horizontalLine. - b build -] - -{ #category : #'tests - edges' } -RTMondrianTest >> testEdgeInInnerFrame2 [ - - b node: '1' - forIt: [ - b shape rectangle. - b nodes: (1 to: 2). - b shape line color: Color red. - b edges connectFrom: #yourself. - b layout verticalLine ]. - b build. - - self assert: b view numberOfEdges equals: 0. -] - -{ #category : #'tests - edges' } -RTMondrianTest >> testEdgeInInnerFrame3 [ - - b node: '1' - forIt: [ - b shape rectangle. - b nodes: (1 to: 2). - b shape line color: Color red. - b edges connectTo: [ :v | v + 1 ]. - b layout verticalLine ]. - b build. - - self assert: b view numberOfEdges equals: 1. - self assert: b view edges anyOne trachelShape from equals: (8.0 @ 7.5). - self assert: b view edges anyOne trachelShape to equals: (8.0 @ 22.5). -] - -{ #category : #'tests - nodes' } -RTMondrianTest >> testExampleNodes [ - - b node: '1' - forIt: [ - b shape rectangle. - b nodes: (1 to:2). - b layout verticalLine ]. - b node: '2' - forIt: [ - b shape circle - size: 10;color:Color green. - b nodes: (3 to:4). - b layout tree ]. - b layout horizontalLine. - b build. - - self assert: (b view canvas shapes collect: #position) asArray equals: ((Array new: 6) at: 1 put: ((7.5@15.0)); at: 2 put: ((8.0@7.5)); at: 3 put: ((8.0@22.5)); at: 4 put: ((41.5@10.0)); at: 5 put: ((35.5@10.0)); at: 6 put: ((48.5@10.0)); yourself) - -] - -{ #category : #'tests - frames' } -RTMondrianTest >> testFramesWithNestingNesting [ - - b nodes: (1 to: 1) forEach: [ :nb | - b nodes: (2 to: 2) forEach: [ :nb2 | - b nodes: (3 to: 3) ] ]. - b build. - - "Checking the children links" - self assert: b numberOfAllFrames equals: 3. - self assert: b rootFrame numberOfChildrenFrames equals: 1. - self assert: b rootFrame childrenFrames first numberOfChildrenFrames equals: 1. - self assert: b rootFrame childrenFrames first childrenFrames first numberOfChildrenFrames equals: 0. - - "Checking the parent links" - self assert: b rootFrame childrenFrames first parentFrame equals: b rootFrame. - self assert: b rootFrame childrenFrames first childrenFrames first parentFrame equals: b rootFrame childrenFrames first. - - "Checking the number of elements" - self assert: b rootFrame numberOfElements equals: 1. - self assert: b rootFrame childrenFrames first numberOfElements equals: 1. - self assert: b rootFrame childrenFrames first childrenFrames first numberOfElements equals: 1. - - "Checking the depth" - self assert: b rootFrame depth equals: 1. - self assert: b rootFrame childrenFrames first depth equals: 2. - self assert: b rootFrame childrenFrames first childrenFrames first depth equals: 3. - -] - -{ #category : #'tests - frames' } -RTMondrianTest >> testFramesWithNestingNesting2 [ - - b nodes: (1 to: 1) forEach: [ :nb | - b nodes: (1 to: 2) forEach: [ :nb2 | - b nodes: (1 to: 3) ] ]. - b build. - - "Checking the children links" - self assert: b numberOfAllFrames equals: 4. - self assert: b rootFrame numberOfChildrenFrames equals: 1. - self assert: b rootFrame childrenFrames first numberOfChildrenFrames equals: 2. - self assert: b rootFrame childrenFrames first childrenFrames first numberOfChildrenFrames equals: 0. - - "Checking the parent links" - self assert: b rootFrame childrenFrames first parentFrame equals: b rootFrame. - self assert: b rootFrame childrenFrames first childrenFrames first parentFrame equals: b rootFrame childrenFrames first. - - "Checking the number of elements" - self assert: b rootFrame numberOfElements equals: 1. - self assert: b rootFrame childrenFrames first numberOfElements equals: 2. - self assert: b rootFrame childrenFrames first childrenFrames first numberOfElements equals: 3. - - "Checking the depth" - self assert: b rootFrame depth equals: 1. - self assert: b rootFrame childrenFrames first depth equals: 2. - self assert: b rootFrame childrenFrames first childrenFrames first depth equals: 3. - -] - -{ #category : #'tests - interaction' } -RTMondrianTest >> testHighlightNeighbor [ - - | elements | - b interaction highlightNeighbors: [ :v | Array with: v + 1 ]. - b nodes: #(1 2 2). - b build. - elements := b view elements. - - "All nodes have default color" - self assert: (elements allSatisfy: [ :e | e trachelShape color = b computeColorForNode ]). - - elements first announce: TRMouseEnter. - - self assert: (elements first trachelShape color = b computeColorForNode ). - self assert: (elements second trachelShape color ~= b computeColorForNode ). - self assert: (elements third trachelShape color ~= b computeColorForNode ). -] - -{ #category : #'tests - interaction' } -RTMondrianTest >> testHighlightNeighborColor [ - - | elements | - b interaction highlightNeighbors: [ :v | Array with: v + 1 ] color: Color red. - b nodes: #(1 2 2). - b build. - elements := b view elements. - - "All nodes have default color" - self assert: (elements allSatisfy: [ :e | e trachelShape color = b computeColorForNode ]). - - elements first announce: TRMouseEnter. - - self assert: (elements first trachelShape color = b computeColorForNode ). - self assert: (elements second trachelShape color = Color red ). - self assert: (elements third trachelShape color = Color red ). -] - -{ #category : #'tests - interaction' } -RTMondrianTest >> testInteraction [ - - | i nodes | - i := b interaction. - nodes := - b nodes: #(1 2) forEach: [ :each | - self assert: b interaction ~~ i - ]. - "Maybe this is what we should have" - "self assert: nodes first announcer == nodes second announcer" -] - -{ #category : #'tests - interaction' } -RTMondrianTest >> testInteractionNoOverride [ - - "popup and draggable" - self assert: b interaction numberOfInteractions equals: 2. - - b interaction when: TRMouseClick do: [ :evt | ]. - self assert: b interaction numberOfInteractions equals: 3 -] - -{ #category : #'tests - interaction' } -RTMondrianTest >> testInteractionOverridePopup [ - - "popup and draggable" - self assert: b interaction numberOfInteractions equals: 2. - - "Since there is a popup in the interaction, we cannot have two popup" - b interaction popupText: 'hello'. - self assert: b interaction numberOfInteractions equals: 2 -] - -{ #category : #'tests - nodes' } -RTMondrianTest >> testLabeledBox [ - b shape labeledBox. - b node: 42. - b layout flow. - b build. - - self assert: b view canvas numberOfShapes equals: 2. -] - -{ #category : #'tests - edges' } -RTMondrianTest >> testNoLineShape [ - - b := RTMondrian new. - b nodes: (1 to: 2). - b edges connectTo: 2. - -] - -{ #category : #'tests - nodes' } -RTMondrianTest >> testNodesError [ - self should: [ b nodes: 5 ] raise: AssertionFailure. -] - -{ #category : #'tests - nodes' } -RTMondrianTest >> testNodesOnce [ - - b nodes: #(1 2 3). - self assert: b numberOfAllFrames equals: 1. - self assert: b topElements size equals: 3 -] - -{ #category : #'tests - nodes' } -RTMondrianTest >> testNodesTwice [ - - b nodes: #(1 2 3). - b nodes: #(1 2 3). - self assert: b numberOfAllFrames equals: 1. - self assert: b topElements size equals: 6 -] - -{ #category : #'tests - normalizer' } -RTMondrianTest >> testNormalizer [ - - b := RTMondrian new. - b nodes: #(1 2 3). - b normalizer - normalizeSize: #yourself min: 5 max: 30. - b build. - - self assert: b view elements first trachelShape width equals: 5. - self assert: b view elements second trachelShape width equals: 17.5. - self assert: b view elements third trachelShape width equals: 30. -] - -{ #category : #'tests - normalizer' } -RTMondrianTest >> testNormalizer02 [ - - b := RTMondrian new. - b nodes: #(1 2 3). - b normalizer - normalizeSize: #yourself. - b build. - - self assert: b view elements first trachelShape width equals: 5. - self assert: b view elements second trachelShape width equals: 17.5. - self assert: b view elements third trachelShape width equals: 30. -] - -{ #category : #'tests - edges' } -RTMondrianTest >> testNotUseInLayoutInInner [ - | v e1 e2 e3 e20 e21 e22 e4 e23 | - b nodes: #(1 20) forEach: [ :n | - b nodes: (n + 1 to: n + 3). - b edges - connectTo: [ :nn | nn + 2 ]. - - b edges - notUseInLayout; - connectTo: [ :nn | nn + 1 ]. - b layout tree. - ]. - b build. - v := b view. - - e1 := v elementFromModel: 1. - e2 := v elementFromModel: 2. - e3 := v elementFromModel: 3. - e4 := v elementFromModel: 4. - e20 := v elementFromModel: 20. - e21 := v elementFromModel: 21. - e22 := v elementFromModel: 22. - e23 := v elementFromModel: 23. - self assert: e2 encompassingRectangle topLeft - e1 encompassingRectangle topLeft equals: 5.5 @ 5.0. - self assert: e4 encompassingRectangle topLeft - e1 encompassingRectangle topLeft equals: 5.5 @ 30.0. - - self assert: e21 encompassingRectangle topLeft - e20 encompassingRectangle topLeft equals: 5.5 @ 5.0. - self assert: e23 encompassingRectangle topLeft - e20 encompassingRectangle topLeft equals: 5.5 @ 30.0. -] - -{ #category : #'tests - frames' } -RTMondrianTest >> testParentFrame [ - - | f | - self assert: b currentFrame equals: b rootFrame. - - f := b pushNewFrame. - self assert: b currentFrame equals: f. - self assert: b rootFrame ~~ f. - - self assert: b rootFrame equals: f parentFrame. - - b popFrame. - self assert: b currentFrame equals: b rootFrame. -] - -{ #category : #'tests - frames' } -RTMondrianTest >> testPartitionedLayoutInInnerFrame [ - - b := RTMondrian new. - b node: 5 forIt: [ - b node: 'hello'. - b layout - for: [ :str | str size > 5 ] use: RTGridLayout new; - horizontalLine ]. - b layout grid. - b build. -] - -{ #category : #'tests - frames' } -RTMondrianTest >> testPushingNewFrame [ - - | f | - f := RTMondrianFrame new. - b pushFrame: f. - self assert: b rootFrame ~~ b currentFrame. - self assert: b currentFrame equals: f. -] - -{ #category : #'tests - frames' } -RTMondrianTest >> testRootFrameAndCurrentFrame [ - - b nodes: #(1 2). - self assert: b rootFrame equals: b currentFrame -] - -{ #category : #'tests - nodes' } -RTMondrianTest >> testShape [ - - | n1 n2 | - b shape circle. - n1 := b node: #one. - n2 := b node: #two. - - self assert: n1 shape class == RTEllipse. - self assert: n2 shape class == RTBox. -] - -{ #category : #'tests - nodes' } -RTMondrianTest >> testShape2 [ - - | n1 n2 | - b shape circle. - n1 := b node: #one forIt: [ - n2 := b node: #two ]. - - self assert: n1 shape class == RTEllipse. - self assert: n2 shape class == RTBox. -] - -{ #category : #'tests - nodes' } -RTMondrianTest >> testShape3 [ - - | n1 n2 | - b shape circle. - b node: #one forIt: [ - b shape circle. - n1 := b node: #two ]. - n2 := b node: #three. - - self assert: n1 shape class == RTEllipse. - self assert: n2 shape class == RTBox. -] - -{ #category : #'tests - interaction' } -RTMondrianTest >> testShapeAndForEach [ - - | i nodes | - i := b shape. - nodes := - b nodes: #(1 2) forEach: [ :each | - self assert: b shape ~~ i - ]. - self assert: nodes first shape == nodes second shape -] - -{ #category : #'tests - interaction' } -RTMondrianTest >> testShowEdge [ - | elements | - b interaction showEdge connectTo: [ :v | Array with: v + 1 ]. - b nodes: #(1 2 2 3). - - b layout circle initialRadius: 10. - b build. - - self assert: b view numberOfEdges equals: 0. - - elements := b view elements. - elements first announce: TRMouseEnter new. - self assert: b view numberOfEdges equals: 2. -] - -{ #category : #'tests - nodes' } -RTMondrianTest >> testSingleNode [ - - b node: 10. - b build. - - self assert: b view numberOfElements equals: 1. - self assert: b view elements anyOne position equals: 2.5 @ 2.5. -] - -{ #category : #'tests - nodes' } -RTMondrianTest >> testSingleNodeForIt [ - - b node: 10 forIt: [ b node: 5 ]. - b build. - - self assert: b view numberOfElements equals: 2. - self assert: b view elements first position equals: 7.5 @ 7.5. - self assert: b view elements second position equals: 8.0 @ 8.0. -] - -{ #category : #'tests - source' } -RTMondrianTest >> testSourceConnectFromAllTo [ - - b nodes: (1 to: 2) forEach: [ :each | - b node: each * 10 ]. - b edges source: (Array with: (Array with: 10) -> 20) connectFromAll: #key to: #value. - b build. - - self assert: b view edges size equals: 1 -] - -{ #category : #'tests - source' } -RTMondrianTest >> testSourceConnectFromTo [ - - b nodes: (1 to: 2) forEach: [ :each | - b node: each * 10 ]. - b edges source: (Array with: 10 -> 20) connectFrom: #key to: #value. - b build. - - self assert: b view edges size equals: 1 -] - -{ #category : #'tests - source' } -RTMondrianTest >> testSourceConnectFromToAll [ - - b nodes: (1 to: 2) forEach: [ :each | - b node: each * 10 ]. - b edges source: (Array with: 10 -> (Array with: 20)) connectFrom: #key toAll: #value. - b build. - - self assert: b view edges size equals: 1 -] - -{ #category : #'tests - source' } -RTMondrianTest >> testSourceError [ - | values | - values := Array with: (1 -> 2) - with: (1 -> 3) - with: (3 -> 7). - - b := RTMondrian new. - b shape box - fillColor: Color transparent; - borderColor: Color black. - b shape text. - b nodes: ((values collect: #key) , (values collect: #value)) asSet. - b shape line color: Color red. - self - should: [ b edges source: self connectFrom: #key to: #value ] - raise: AssertionFailure -] - -{ #category : #'tests - edges' } -RTMondrianTest >> testUseAssociation [ - - | result | - b := RTMondrian new. - b nodes: #(1 2). - result := b edges useAssociation: 1 -> 2. - b build. - - self assert: b view numberOfEdges equals: 1. - self assert: result class == RTEdge. -] - -{ #category : #'tests - edges' } -RTMondrianTest >> testUseAssociation2 [ - - | result | - b := RTMondrian new. - b nodes: #(1 2). - result := b edges useAssociation: 1 -> 10. - b build. - - self assert: b view numberOfEdges equals: 0. - self assert: result isNil -] - -{ #category : #'tests - edges' } -RTMondrianTest >> testUseAssociationsWithError [ - - b := RTMondrian new. - b nodes: #(1 2 3). - b edges - useAssociation: 1 -> 5. - b build. - - self assert: b view numberOfEdges equals: 0 -] diff --git a/src/Roassal2/RTMonthLayout.class.st b/src/Roassal2/RTMonthLayout.class.st deleted file mode 100644 index cacdef42c..000000000 --- a/src/Roassal2/RTMonthLayout.class.st +++ /dev/null @@ -1,49 +0,0 @@ -" -This is a specific layout for month in RTCalendarBuilder -" -Class { - #name : #RTMonthLayout, - #superclass : #RTLayout, - #instVars : [ - 'gapSize' - ], - #category : #'Roassal2-Builder-Calendar' -} - -{ #category : #hook } -RTMonthLayout >> doExecute: elements [ - | prevWeek index first cellSize | - first := elements first. - prevWeek := first model weeks last. - cellSize := first height / first model weeks size. - index := 0. - elements first translateTo: 0 @ 0. - elements allButFirstDo: [ :e | | month | - month := e model. - (prevWeek = month weeks first) ifTrue: [ index := index - 1 ]. - (month previous weeks size - month weeks size) odd ifTrue: [ - month previous weeks size odd ifTrue: [ index := index - 0.5 ]. - month weeks size even ifTrue: [ index := index + 0.5 ] ]. - index := index + month previous weeks size. - prevWeek := month weeks last. - e translateTo: 0@ ((index * cellSize)). - - ]. - -] - -{ #category : #accessing } -RTMonthLayout >> gapSize [ - ^ gapSize -] - -{ #category : #accessing } -RTMonthLayout >> gapSize: anObject [ - gapSize := anObject -] - -{ #category : #'initialize-release' } -RTMonthLayout >> initialize [ - super initialize. - self gapSize: 1 -] diff --git a/src/Roassal2/RTMoreColorPlugin.class.st b/src/Roassal2/RTMoreColorPlugin.class.st deleted file mode 100644 index 293dcd684..000000000 --- a/src/Roassal2/RTMoreColorPlugin.class.st +++ /dev/null @@ -1,31 +0,0 @@ -Class { - #name : #RTMoreColorPlugin, - #superclass : #RTAbstractPlugin, - #category : #'Roassal2-Plugins' -} - -{ #category : #hooks } -RTMoreColorPlugin >> description [ - ^ 'Extend the Color class with many predefined colors.' -] - -{ #category : #hooks } -RTMoreColorPlugin >> execute [ - "Code to be executed" - - Gofer new - smalltalkhubUser: 'StephaneDucasse' project: 'Colors'; - package: 'MoreColors'; - load. -] - -{ #category : #testing } -RTMoreColorPlugin >> isLoaded [ - ^ RPackageOrganizer default includesPackageNamed: 'MoreColors' - -] - -{ #category : #hooks } -RTMoreColorPlugin >> label [ - ^ 'More Colors' -] diff --git a/src/Roassal2/RTMorphDropInteraction.class.st b/src/Roassal2/RTMorphDropInteraction.class.st deleted file mode 100644 index b58158834..000000000 --- a/src/Roassal2/RTMorphDropInteraction.class.st +++ /dev/null @@ -1,65 +0,0 @@ -Class { - #name : #RTMorphDropInteraction, - #superclass : #RTInteraction, - #instVars : [ - 'condition', - 'behavior' - ], - #category : #'Roassal2-Interactions' -} - -{ #category : #'instance creation' } -RTMorphDropInteraction class >> if: aCondition do: aBlock [ - ^ self new if: aCondition do: aBlock -] - -{ #category : #'dropping/grabbing' } -RTMorphDropInteraction >> acceptDroppingMorph: aMorph event: anEvent [ - behavior value: aMorph value: anEvent -] - -{ #category : #accessing } -RTMorphDropInteraction >> behavior: aTwoArgBlock [ - "What should happen with the morph when the condition was met? - [ :aMorph :anEvent | what should happen ] block. - Used in TRMorph>>#acceptDroppingMorph:event:" - - behavior := aTwoArgBlock -] - -{ #category : #accessing } -RTMorphDropInteraction >> condition: aTwoArgBlock [ - "[ :aMorph :anEvent | boolean ] block condition whether this interaction wants the dropped morph. -This is used in TRMorph>>#wantsDroppedMorph:event:" - condition := aTwoArgBlock -] - -{ #category : #accessing } -RTMorphDropInteraction >> if: aConditionBlock do: aBehaviorBlock [ - self condition: aConditionBlock. - self behavior: aBehaviorBlock -] - -{ #category : #initialization } -RTMorphDropInteraction >> initialize [ - super initialize. - behavior := [ :morph :event | ]. - condition := [ :morph :event | ] -] - -{ #category : #hooks } -RTMorphDropInteraction >> initializeElement: anElement [ - anElement - when: TRMorphWantsDrop - do: [ :event | - (self wantsDroppedMorph: event droppedMorph event: event dropMorphEvent) - ifTrue: [ event handledBy: event shape ] ]. - anElement - when: TRMorphDrop - do: [ :event | self acceptDroppingMorph: event droppedMorph event: event dropMorphEvent ] -] - -{ #category : #'dropping/grabbing' } -RTMorphDropInteraction >> wantsDroppedMorph: aMorph event: anEvent [ - ^ condition value: aMorph value: anEvent -] diff --git a/src/Roassal2/RTMorphingView.class.st b/src/Roassal2/RTMorphingView.class.st deleted file mode 100644 index c8fafdbf4..000000000 --- a/src/Roassal2/RTMorphingView.class.st +++ /dev/null @@ -1,225 +0,0 @@ -" -I am the advanced brother of RTMorphingView. In addition to its functionalities I also... - -- Add new nodes from one view to the next -- Remove nodes no longer present -- Adapt the #extent of nodes -" -Class { - #name : #RTMorphingView, - #superclass : #RTAbstractMorphingView, - #category : #'Roassal2-Interactions-MorphingView' -} - -{ #category : #examples } -RTMorphingView class >> exampleForceBasedLayout [ - - | randomView view lay | - - lay := RTForceBasedLayout new. - - randomView := [ | rndView | - rndView := RTView new. - rndView addAll: ((RTEllipse new size: 15 + 15 atRandom; color: Color red) elementsOn: (1 to: (10 + 30 atRandom))). - RTEdgeBuilder new - view: rndView; - connectFrom: [ :vv | vv // 2 ]. - lay charge: (-1 * 1000 atRandom). - lay on: rndView elements. - rndView - ]. - - view := randomView value. - view elements do: [ :el | el color: Color gray. el @ RTLabeled ]. - - view addMenu: 'Animate!' callback: [ - view @ (RTMorphingView new - referenceView: randomView value; - smoothTransition: 0.3). - view elements do: [ :el | - el pushFront. - (el hasAttribute: #RTLabelledLabel) ifFalse: [ el @ RTLabeled ] - ] - ]. - - ^ view inspect -] - -{ #category : #examples } -RTMorphingView class >> exampleSimple [ - - | v1 v2 | - v1 := RTView new. - v1 addAll: ((RTEllipse new color: Color green trans; size: 10) elementsOn: #(1 2)). - RTEdgeBuilder new - view: v1; - useAssociation: 1 -> 2. - RTHorizontalLineLayout on: v1 elements. - - "---" - - v2 := RTView new. - v2 addAll: ((RTEllipse new color: Color green trans) elementsOn: #(1)). - v2 addMenu: 'animate' callback: [ - v2 @ (RTMorphingView new referenceView: v1; smoothTransition: 0.3). - ]. - - v2 addMenu: 'camerea' callback: [ - v2 canvas camera scale: 10. - v2 signalUpdate. - ]. - - ^ v2 inspect -] - -{ #category : #examples } -RTMorphingView class >> exampleWithVaryingEdgeSize [ - - | v1 v2 eb | - v1 := RTView new. - v1 addAll: ((RTEllipse new color: Color green trans; size: 10) elementsOn: #(1 2 3)). - eb := RTEdgeBuilder new - view: v1. - eb shape line width: [ :ee | 10 atRandom ] ; color: [ :ee | Color random ]. - eb - useAssociations: (Array with: 1 -> 2 with: 2 -> 3 ). - RTHorizontalLineLayout on: v1 elements. - - "---" - - v2 := RTView new. - v2 addAll: ((RTEllipse new color: Color green trans; size: 10) elementsOn: #(1 2 3)). - eb := RTEdgeBuilder new - view: v2. - eb shape line width: [ :ee | 10 atRandom ] ; color: [ :ee | Color random ]. - eb - useAssociations: (Array with: 1 -> 2 with: 2 -> 3). - RTHorizontalLineLayout on: v2 elements. - "---" - v2 addMenu: 'animate' callback: [ - v2 @ (RTMorphingView new referenceView: v1; smoothTransition: 0.3). - ]. - v2 canvas camera scale: 10. - - ^ v2 inspect -] - -{ #category : #initialization } -RTMorphingView >> getAllModelOfView: aView [ - ^ (aView elements collect: #model) asArray -] - -{ #category : #testing } -RTMorphingView >> hasCompleted [ - ^ translator hasCompleted -] - -{ #category : #initialization } -RTMorphingView >> initialize [ - - super initialize. - - self pushElementsToFrontAndEdgesToBack. -] - -{ #category : #initialization } -RTMorphingView >> initializeElement: aView [ - - | allModels referenceElements edges | - - allModels := (aView elements collect: #model) asArray. - referenceElements := referenceView elementsFromModels: allModels. - referenceModels := referenceElements collect: #model. - - "Removing old elements and edges that are not in the new view" - aView removeElements: (aView elementsFromModels: (allModels difference: referenceModels)). - aView removeAllEdges. - - "Adding elements that are not in the old view" - aView addAll: (referenceView elements difference: referenceElements). - - "Adding edges" - edges := RTEdgeBuilder new - view: aView; - useAssociations: (referenceView edges collect: #model). - - "Updating color and width of edges" - aView edges do: [ :edge | | referenceEdge | - referenceEdge := referenceView edgeFromModel: edge model. - edge @ RTMakeEdgeNotUpdatable. - edge trachelShape color: referenceEdge trachelShape strokePaint. - edge trachelShape width: referenceEdge trachelShape width. - ]. - - (aView elementsFromModels: referenceModels) with: referenceElements do: [ :e1 :e2 | - self translate: e1 toPositionOf: e2. - self resize: e1 toExtentOf: e2. - e1 color: e2 color. - ]. - - self afterTranslationDoActionOn: aView -] - -{ #category : #initialization } -RTMorphingView >> initializeElementOLD: aView [ - | allModels referenceElements | - allModels := self getAllModelOfView: aView. - referenceElements := referenceView elementsFromModels: allModels. - referenceModels := referenceElements collect: #model. - - "Removing old elements and edges that are not in the new view" - aView - removeElements: (aView elementsFromModels: (allModels difference: referenceModels)). - aView removeEdges: (aView edges difference: referenceView edges). - - "Adding elements that are not in the old view" - aView addAll: (referenceView elements difference: referenceElements). - - "Adding edges that are not in the old view" - RTEdgeBuilder new - view: aView; - useAssociations: - ((referenceView edges collect: #model) - difference: (aView edges collect: #model)). - (aView elementsFromModels: referenceModels) - with: referenceElements - do: [ :e1 :e2 | - self translate: e1 toPositionOf: e2. - self resize: e1 toExtentOf: e2 ]. - self afterTranslationDoActionOn: aView -] - -{ #category : #configuration } -RTMorphingView >> morphIntoView: aRTView [ - - afterAllTranslationsBlocks - add: [ :view | view @ (RTMorphingView new - referenceView: aRTView; - smoothTransition)] -] - -{ #category : #configuration } -RTMorphingView >> pushElementsToFrontAndEdgesToBack [ - - afterAllTranslationsBlocks - add: [ :view | view edges do: #pushBack ]; - add: [ :view | view elements do: #pushFront ] - -] - -{ #category : #configuration } -RTMorphingView >> resize: e1 toExtentOf: e2 [ - - translator resize: e1 to: e2 extent -] - -{ #category : #configuration } -RTMorphingView >> smoothTransition [ - - self smoothTransition: 2 -] - -{ #category : #configuration } -RTMorphingView >> smoothTransition: aDuration [ - translator := RTSmoothResizeLayoutTranslator new nbCycles: aDuration -] diff --git a/src/Roassal2/RTMouseHoverZoom.class.st b/src/Roassal2/RTMouseHoverZoom.class.st deleted file mode 100644 index 3b2916bd9..000000000 --- a/src/Roassal2/RTMouseHoverZoom.class.st +++ /dev/null @@ -1,102 +0,0 @@ -Class { - #name : #RTMouseHoverZoom, - #superclass : #RTInteraction, - #instVars : [ - 'desiredExtent', - 'resizeStrategy', - 'zoomInElements', - 'ratio' - ], - #category : #'Roassal2-Interactions' -} - -{ #category : #public } -RTMouseHoverZoom >> animated [ - self animatedDuring: 0.3 -] - -{ #category : #public } -RTMouseHoverZoom >> animatedDuring: seconds [ - resizeStrategy := [ :anElement :newExtent :afterBlock | - anElement view addAnimation: (RTResizeMove new - toExtent: newExtent during: seconds on: anElement; - after: afterBlock) ]. -] - -{ #category : #private } -RTMouseHoverZoom >> attributeSymbol [ - ^ #automaticZoomExtent -] - -{ #category : #configuration } -RTMouseHoverZoom >> defaultRatio [ - - ^ 1.3 -] - -{ #category : #public } -RTMouseHoverZoom >> desiredExtent: anExtentOrOneArgBlock [ - desiredExtent := anExtentOrOneArgBlock. -] - -{ #category : #private } -RTMouseHoverZoom >> doZoomEffect: anElement [ - (anElement hasAttribute: self attributeSymbol) ifTrue: [ ^ self ]. - - zoomInElements do: [ :el | self undoZoomEffect: el ]. - zoomInElements := OrderedCollection new. - zoomInElements add: anElement. - - anElement attributeAt: self attributeSymbol put: anElement extent. - self setExtent: (desiredExtent rtValue: anElement) for: anElement after: []. -] - -{ #category : #initialization } -RTMouseHoverZoom >> initialize [ - super initialize. - ratio := self defaultRatio. - desiredExtent := [ :anElement | anElement extent * ratio ]. - zoomInElements := OrderedCollection new. - self animated. -] - -{ #category : #hooks } -RTMouseHoverZoom >> initializeElement: element [ - element when: TRMouseEnter do: [ :anEvent | - self doZoomEffect: element ]. - - element when: TRMouseLeave do: [ :anEvent | - self undoZoomEffect: element ] -] - -{ #category : #accessing } -RTMouseHoverZoom >> ratio [ - ^ ratio -] - -{ #category : #accessing } -RTMouseHoverZoom >> ratio: aFloat [ - "Ratio by wich the element will grow" - ratio := aFloat -] - -{ #category : #private } -RTMouseHoverZoom >> setExtent: newExtent for: anElement after: aBlock [ - resizeStrategy cull: anElement cull: newExtent cull: aBlock -] - -{ #category : #public } -RTMouseHoverZoom >> simple [ - resizeStrategy := [ :anElement :newExtent :afterBlock | - anElement extent: newExtent. - afterBlock value. - anElement signalUpdate. ]. -] - -{ #category : #private } -RTMouseHoverZoom >> undoZoomEffect: anElement [ - | previousExtent | - previousExtent := anElement attributeAt: self attributeSymbol ifAbsent: [ ^ self ]. - self setExtent: previousExtent for: anElement after: [ anElement removeAttributeAt: self attributeSymbol ifAbsent: [ nil ] ] - -] diff --git a/src/Roassal2/RTMultiColoredLine.class.st b/src/Roassal2/RTMultiColoredLine.class.st deleted file mode 100644 index c99da9c87..000000000 --- a/src/Roassal2/RTMultiColoredLine.class.st +++ /dev/null @@ -1,126 +0,0 @@ -" -A RTMultiColoredLine is a colored shape for lines from a color array (Can be a Color Palete Sequential. - -Instance Variables - colorArray: - path : - -colorArray - - xxxxx - -" -Class { - #name : #RTMultiColoredLine, - #superclass : #RTAbstractLine, - #instVars : [ - 'colorArray', - 'path' - ], - #category : #'Roassal2-Shapes' -} - -{ #category : #accessing } -RTMultiColoredLine >> block: aTwoArgBlock [ - "The argument is a two arg block. The two arguments are the two points one has to draw the line. The block has to return a collection of point. - - The arg follows [ :fromPoint :toPoint | Array with: ... with: ... with: ... ]" - path := aTwoArgBlock -] - -{ #category : #rendering } -RTMultiColoredLine >> colorShape [ - self block: [ :fromPoint :toPoint | - | tab | - - tab := Array with: fromPoint. - - (fromPoint = toPoint) ifFalse: [ - - 1 to: (colorArray size - 1) do: [ :i | - tab := tab copyWith: ( (i * (toPoint x - fromPoint x)/(colorArray size)) + (fromPoint x)) @ ( ((i* (fromPoint dist: toPoint)/(colorArray size)) / (fromPoint dist: toPoint) * (toPoint y - fromPoint y)) + (fromPoint y)). - ] - ]. - tab := tab copyWith: toPoint. - ] -] - -{ #category : #accessing } -RTMultiColoredLine >> colors [ - "Return the colors used by the line" - ^ colorArray -] - -{ #category : #accessing } -RTMultiColoredLine >> colors: someColors [ - colorArray := someColors -] - -{ #category : #configuration } -RTMultiColoredLine >> defaultColors [ - ^ Array with: Color blue with: Color red -] - -{ #category : #initialization } -RTMultiColoredLine >> initialize [ - super initialize. - self straight. - self colors: self defaultColors -] - -{ #category : #rendering } -RTMultiColoredLine >> path [ - ^ path -] - -{ #category : #configuration } -RTMultiColoredLine >> straight [ - "A single color line" - self block: [ :fromPoint :toPoint | Array with: fromPoint with: toPoint ] -] - -{ #category : #hooks } -RTMultiColoredLine >> trachelShapeClass [ - "not used. Extremities have a dedicated trachel shape" -] - -{ #category : #public } -RTMultiColoredLine >> trachelShapeFor: anEdge [ - | shape multiShape fromPoint toPoint p | - fromPoint := attachPoint startingPointOf: anEdge. - toPoint := attachPoint endingPointOf: anEdge. - p := path value: fromPoint value: toPoint. - - multiShape := TRCompositeShape new. - 2 to: p size do: [ :i | - shape := TRLineShape new. - shape width: width. - shape from: (p at: i - 1) to: (p at: i). - shape color: (colorArray atWrap: (i - 1)). - multiShape addShape: shape. - ]. - ^ multiShape -] - -{ #category : #public } -RTMultiColoredLine >> updateFor: anEdge trachelShape: trachelShape [ - | shape fromPoint toPoint p| - fromPoint := attachPoint startingPointOf: anEdge. - toPoint := attachPoint endingPointOf: anEdge. - p := path value: fromPoint value: toPoint. - (trachelShape shapes size < p size) ifTrue: [ - trachelShape shapes size to: p size do: [ :i | | s | - s := TRLineShape new. - s addedIn: trachelShape canvas. - trachelShape addShape: s. ]. - trachelShape - propagateElement; - positionShapesAfterBeingAdded. - ]. - 2 to: p size do: [ :i | - shape := trachelShape shapes at: i - 1. - shape width: width. - shape from: (p at: i - 1) to: (p at: i). - shape color: (colorArray atWrap: (i - 1)). - ]. - ^ trachelShape -] diff --git a/src/Roassal2/RTMultiColoredLineTest.class.st b/src/Roassal2/RTMultiColoredLineTest.class.st deleted file mode 100644 index c223c8041..000000000 --- a/src/Roassal2/RTMultiColoredLineTest.class.st +++ /dev/null @@ -1,21 +0,0 @@ -Class { - #name : #RTMultiColoredLineTest, - #superclass : #RTTest, - #category : #'Roassal2-Core-Tests' -} - -{ #category : #tests } -RTMultiColoredLineTest >> testBasic [ - - | v elem1 elem2 edge| - v := RTView new. - elem1 := (RTEllipse new color: (Color blue alpha:0.6); size:10) elementOn: 1. - elem2 := (RTEllipse new color: (Color blue alpha:0.6); size:10) elementOn: 2. - elem2 translateBy: 200@0. - v add: elem1. - v add: elem2. - edge := RTEdge from:elem1 to:elem2. - v add: (edge + (RTMultiColoredLine new colors: (RTColorPalette qualitative colors: 12 scheme:'Paired'); colorShape)). - - -] diff --git a/src/Roassal2/RTMultiCompositeShapeTest.class.st b/src/Roassal2/RTMultiCompositeShapeTest.class.st deleted file mode 100644 index 94538aa7e..000000000 --- a/src/Roassal2/RTMultiCompositeShapeTest.class.st +++ /dev/null @@ -1,266 +0,0 @@ -Class { - #name : #RTMultiCompositeShapeTest, - #superclass : #RTTest, - #category : #'Roassal2-Core-Tests' -} - -{ #category : #tests } -RTMultiCompositeShapeTest >> testAlignRight [ - - | v box box2 s | - v := RTView new. - box := RTBox new. - box2 := RTBox new. - s := RTCompositeShape new. - s add: box. - s add: box2. - s alignRight. - self assert: s allShapes equals: (Array with: box with: box2) -] - -{ #category : #tests } -RTMultiCompositeShapeTest >> testAllShapes [ - - | v box box2 s | - v := RTView new. - box := RTBox new. - box2 := RTBox new. - s := RTCompositeShape new. - s add: box. - s add: box2. - - self assert: s allShapes equals: (Array with: box with: box2) -] - -{ #category : #tests } -RTMultiCompositeShapeTest >> testBeforeAddingToAView [ - - | e1 e2 v | - e1 := RTBox element. - e2 := (RTShapeBuilder new cross color: Color red trans) element. - e1 translateTo: 50 @ 50. - e2 translateTo: 50 @ 50. - - self assert: e1 position equals: 50 @ 50. - self assert: e2 position equals: 50 @ 50. - - v := RTView new. - v add: e1. - v add: e2. - - self assert: e1 position equals: 50 @ 50. - self assert: e2 position equals: 50 @ 50. -] - -{ #category : #tests } -RTMultiCompositeShapeTest >> testColor [ - - | v box s e | - v := RTView new. - box := RTBox new. - s := RTCompositeShape new. - s add: box. - s color: Color red. - e := s element. - v add: e. - - self assert: e trachelShape shapes first color equals: Color red -] - -{ #category : #'tests - composing' } -RTMultiCompositeShapeTest >> testComposedCompositedShape [ - - | s1 s2 e v | - s1 := RTCompositeShape new. - s2 := RTCompositeShape new. - - s1 add: (RTBox new color: Color blue; size: 20). - s1 add: (RTBox new color: Color red; size: 20). - s1 vertical. - - s2 add: s1. - s2 add: (RTBox new color: Color green; size: 20). - s2 vertical. - - e := s2 element. - - "The element has to be added to the view in order to have the #vertical layout applied" - v := RTView new. - v add: e. - - "It does not pass for now.. No idea why" - "self assert: e height equals: 60" -] - -{ #category : #'tests - composing' } -RTMultiCompositeShapeTest >> testExtentCompositedShape [ - - | s1 e v | - s1 := RTCompositeShape new. - - s1 add: (RTBox new color: Color blue; size: 20). - s1 add: (RTBox new color: Color red; size: 20). - s1 vertical. - e := s1 element. - v := RTView new. - v add: e. - - self assert: e height equals: 40 -] - -{ #category : #tests } -RTMultiCompositeShapeTest >> testScenario [ - - | v s2 s e | - v := RTView new. - - s2 := RTCompositeShape new. - s2 add: RTEllipse new. - s2 add: RTEllipse new. - s2 horizontal. - - s := RTCompositeShape new. - s add: (RTLabel new text: 'hello'). - s add: s2. - s vertical. - - e := s element. - v add: e. - v - -] - -{ #category : #tests } -RTMultiCompositeShapeTest >> testTranslationBy [ - - | view shape el ps ps2 | - view := RTView new. - shape := RTCompositeShape new. - shape add: (RTBox new color: Color blue; height: 20; width: 15). - shape add: (RTBox new color: Color white; height: 20; width: 15) translateBy: 15 @ 0. - shape add: (RTBox new color: Color red; height: 20; width: 15) translateBy: 30 @ 0. - - el := shape element. - el @ RTDraggable. - view add: el. - - self assert: view canvas numberOfShapes equals: 3. - self assert: el shape class equals: RTCompositeShape. - - ps := view canvas shapes collect: #position. - self assert: ps equals: (Array with: (0 @ 0) with: (15 @ 0) with: (30 @ 0)). - - el translateBy: 10 @ 5. - ps2 := view canvas shapes collect: #position. - self assert: ps2 equals: (ps + (10 @ 5)). -] - -{ #category : #tests } -RTMultiCompositeShapeTest >> testTranslationTo [ - - | view shape el ps ps2 | - view := RTView new. - shape := RTCompositeShape new. - shape add: (RTBox new color: Color blue; height: 20; width: 15). - shape add: (RTBox new color: Color white; height: 20; width: 15) translateBy: 15 @ 0. - shape add: (RTBox new color: Color red; height: 20; width: 15) translateBy: 30 @ 0. - - el := shape element. - el @ RTDraggable. - view add: el. - - self assert: view canvas numberOfShapes equals: 3. - self assert: el shape class equals: RTCompositeShape. - - ps := view canvas shapes collect: #position. - self assert: ps equals: (Array with: (0 @ 0) with: (15 @ 0) with: (30 @ 0)). - - el translateTo: 10 @ 5. - ps2 := view canvas shapes collect: #position. - self assert: ps2 equals: (Array with: (-5 @ 5) with: (10 @ 5) with: (25 @ 5)) -] - -{ #category : #tests } -RTMultiCompositeShapeTest >> testVerticalAndChangingElementSize [ - - | s b1 b2 e view | - s := RTCompositeShape new. - b1 := RTBox new color: Color green. - b2 := RTBox new color: Color blue; size: 20. - s add: b1. - s add: b2. - s vertical. - s setAutomaticRelayout. - - e := s element. - view := RTView new. - view add: e. - - "No resize has been done" - self assert: (view canvas shapes collect: #encompassingRectangle) first equals: (((-5/2)@ (-5/2)) corner: ((5/2)@(5/2))). - self assert: (view canvas shapes collect: #encompassingRectangle) second equals: ((-10@(5/2)) corner: (10@(45/2))). - - "We resize the second box" - e trachelShape shapes second extent: 5 @ 5. -" e trachelShape resetInnerShapes; vertical; relayout." - self assert: (view canvas shapes collect: #encompassingRectangle) first equals: ((-2.5@ -2.5) corner: (2.5@2.5)). - self assert: (view canvas shapes collect: #encompassingRectangle) second equals: ((-2.5@2.5) corner: (2.5@7.5)). -] - -{ #category : #tests } -RTMultiCompositeShapeTest >> testVerticalAndChangingElementSize2 [ - - | s b1 b2 e view | - s := RTCompositeShape new. - b1 := RTBox new color: Color green. - b2 := RTBox new color: Color blue. - s add: b1. - s add: b2. - s vertical. - - e := s element. - view := RTView new. - view add: e. - - "No resize has been done" - self assert: (view canvas shapes collect: #encompassingRectangle) first equals: (((-5/2)@ (-5/2)) corner: ((5/2)@(5/2))). - self assert: (view canvas shapes collect: #encompassingRectangle) second equals: (((-5/2)@(5/2)) corner: ((5/2)@(15/2))). - - "We resize the second box" - e trachelShape shapes second extent: 5 @ 5. - -] - -{ #category : #tests } -RTMultiCompositeShapeTest >> testVerticalLayoutAndTranslation [ - - | v s e positions b1 b2 tb1 tb2 | - v := RTView new. - b1 := RTBox new color: Color red; size: 16. - b2 := RTBox new color: Color blue; size: 16. - s := RTCompositeShape new. - s add: b1. - s add: b2. - s vertical. - - e := s element. - v add: e @ RTDraggable. - - self assert: e trachelShape shapes second position equals: 0 @ 16. - - self assert: (e trachelShape offsets asArray) equals: (Array with: (0 @ 0) with: (0 @ 16.0)). - - tb1 := e trachelShape shapes first. - tb2 := e trachelShape shapes second. - self assert: (e trachelShape offsetOf: tb1) equals: 0 @ 0. - self assert: (e trachelShape offsetOf: tb2) equals: 0 @ 16.0. - - positions := (e trachelShape shapes collect: #position) asArray. - self assert: positions equals: (Array with: (0 @ 0) with: (0 @ 16)). - - e translateTo: 0 @ 0. - - positions := (e trachelShape shapes collect: #position) asArray. - self assert: positions equals: (Array with: (0 @ -8) with: (0 @ 8)). - -] diff --git a/src/Roassal2/RTMultiGrapher.class.st b/src/Roassal2/RTMultiGrapher.class.st deleted file mode 100644 index fd15bbf4b..000000000 --- a/src/Roassal2/RTMultiGrapher.class.st +++ /dev/null @@ -1,96 +0,0 @@ -" -RTMultiGrapher allows for supporting several graphs in the same physical location. - -Here is an example: --=-=-= -|g g1 g2 ds1 ds2| -g := RTMultiGrapher new. - -g1 := RTGrapher new. -ds1 := RTData new. -ds1 label: 'Red'. -ds1 dotShape color: Color red. -ds1 connectColor: Color red. -ds1 points: ((1 to: 10) collect: [ :each | 20 atRandom ]). -ds1 interaction highlightDataset: Color black. -g1 add: ds1. - -g2 := RTGrapher new. -ds2 := RTData new. -ds2 label: 'Blue'. -ds2 dotShape color: Color blue. -ds2 connectColor: Color blue. -ds2 points: ((1 to: 10) collect: [ :each | 1000 atRandom ]). -ds2 interaction highlightDataset: Color purple. -g2 add: ds2. - -g1 axisY - title: 'y 1'; - color: Color red. - -g2 axisY - title: 'y 2'; - color: Color blue. - -g add: g1. -g add: g2. -g legend. - -^ g --=-=-= -" -Class { - #name : #RTMultiGrapher, - #superclass : #RTBuilder, - #instVars : [ - 'graphers', - 'legendBuilder', - 'yOffset', - 'extent' - ], - #category : #'Roassal2-Builder-Grapher-Core' -} - -{ #category : #adding } -RTMultiGrapher >> add: aGrapher [ - graphers add: aGrapher -] - -{ #category : #accessing } -RTMultiGrapher >> extent [ - ^ extent -] - -{ #category : #accessing } -RTMultiGrapher >> extent: anObject [ - extent := anObject -] - -{ #category : #initialization } -RTMultiGrapher >> initialize [ - super initialize. - graphers := OrderedCollection new. - yOffset := 70. - extent := 300 @ 200 -] - -{ #category : #accessing } -RTMultiGrapher >> legend [ - ^ legendBuilder ifNil: [ legendBuilder := RTLegendBuilder new ] -] - -{ #category : #hooks } -RTMultiGrapher >> renderIn: aView [ - graphers - withIndexDo: [ :each :i | - each yOffset: (i - 1) * yOffset. - each build. - aView addFromView: each view ]. - legendBuilder - ifNotNil: [ graphers - do: [ :each | - each legend: legendBuilder. - each renderLegend ]. - aView addFromView: legendBuilder view. - graphers do: #inferLegendInteractions ] -] diff --git a/src/Roassal2/RTMultiLine.class.st b/src/Roassal2/RTMultiLine.class.st deleted file mode 100644 index 29b75cc68..000000000 --- a/src/Roassal2/RTMultiLine.class.st +++ /dev/null @@ -1,118 +0,0 @@ -" -A RTMultiLine represents - -Instance Variables - blockProducingPath: a two arg block that produces the path. The block has to return the collection of points - -blockProducingPath - - xxxxx - -" -Class { - #name : #RTMultiLine, - #superclass : #RTAbstractLine, - #instVars : [ - 'blockProducingPath' - ], - #category : #'Roassal2-Shapes' -} - -{ #category : #accessing } -RTMultiLine >> block: aTwoArgBlock [ - - blockProducingPath := aTwoArgBlock -] - -{ #category : #initialization } -RTMultiLine >> initialize [ - super initialize. - self straight -] - -{ #category : #'public - configuration' } -RTMultiLine >> orthoHorizontal [ - self orthoHorizontalBalanceTo: 0.5 -] - -{ #category : #'public - configuration' } -RTMultiLine >> orthoHorizontalBalanceTo: balance [ - "0 = level of fromPoint - 0.5 = middle - 1 = level of toPoint" - - self - block: [ :fromPoint :toPoint | - | midx | - midx := toPoint x * balance + (fromPoint x * (1 - balance)). - Array - with: fromPoint - with: midx @ fromPoint y - with: midx @ toPoint y - with: toPoint ] -] - -{ #category : #'public - configuration' } -RTMultiLine >> orthoVertical [ - self orthoVerticalBalanceTo: 0.5 -] - -{ #category : #'public - configuration' } -RTMultiLine >> orthoVerticalBalanceTo: balance [ - "0 = level of fromPoint - 0.5 = middle - 1 = level of toPoint" - - self - block: [ :fromPoint :toPoint | - | midy | - midy := toPoint y * balance + (fromPoint y * (1 - balance)). - Array - with: fromPoint - with: fromPoint x @ midy - with: toPoint x @ midy - with: toPoint ] -] - -{ #category : #'public - configuration' } -RTMultiLine >> straight [ - "A straight line" - self block: [ :fromPoint :toPoint | Array with: fromPoint with: toPoint ] -] - -{ #category : #public } -RTMultiLine >> trachelShapeFor: anEdge [ - | shape multiShape col fromPoint toPoint path | - col := self colorFor: anEdge. - fromPoint := attachPoint startingPointOf: anEdge. - toPoint := attachPoint endingPointOf: anEdge. - path := blockProducingPath value: fromPoint value: toPoint. - - multiShape := TRCompositeShape new. - 2 to: path size do: [ :i | - shape := TRLineShape new. - shape width: (self widthFor: anEdge). - shape from: (path at: i - 1) to: (path at: i). - shape color: col. - - multiShape addShape: shape. - ]. - ^ multiShape -] - -{ #category : #public } -RTMultiLine >> updateFor: anEdge trachelShape: trachelShape [ - - | shape col fromPoint toPoint path | - col := self colorFor: anEdge. - fromPoint := attachPoint startingPointOf: anEdge. - toPoint := attachPoint endingPointOf: anEdge. - path := blockProducingPath value: fromPoint value: toPoint. - - 2 to: path size do: [ :i | - shape := trachelShape shapes at: i - 1. - shape width: (self widthFor: anEdge). - shape from: (path at: i - 1) to: (path at: i). - shape color: col. - ]. - ^ trachelShape -] diff --git a/src/Roassal2/RTMultiLineTest.class.st b/src/Roassal2/RTMultiLineTest.class.st deleted file mode 100644 index 989a816e2..000000000 --- a/src/Roassal2/RTMultiLineTest.class.st +++ /dev/null @@ -1,91 +0,0 @@ -Class { - #name : #RTMultiLineTest, - #superclass : #RTTest, - #instVars : [ - 'e1', - 'e2', - 'v' - ], - #category : #'Roassal2-Core-Tests' -} - -{ #category : #running } -RTMultiLineTest >> setUp [ - super setUp. - e1 := RTBox element. - e2 := RTBox element. - v := RTView new -] - -{ #category : #tests } -RTMultiLineTest >> testAddedInCanvas [ - - | es shape edge | - v := RTView new. - es := RTBox new elementsOn: (1 to: 2). - es second translateBy: 30 @ 30. - es @ RTDraggable. - v addAll: es. - shape := RTMultiLine new orthoHorizontal. - edge := shape edgeFrom: es first to: es second. - v add: edge. - - self assert: v canvas numberOfShapes equals: 5. - edge pushBack. - self assert: v canvas numberOfShapes equals: 5. - - edge trachelShape pushFront. - self assert: v canvas numberOfShapes equals: 5. - - v canvas push: edge trachelShape behind: es first trachelShape. - self assert: v canvas numberOfShapes equals: 5. - -] - -{ #category : #tests } -RTMultiLineTest >> testHorizontalOrthogonal [ - "The default is a straight line" - | lineShape edge | - lineShape := RTMultiLine new. - lineShape orthoHorizontal. - edge := lineShape edgeFrom: e1 to: e2. - v add: edge. - self assert: v canvas numberOfShapes equals: 3 -] - -{ #category : #tests } -RTMultiLineTest >> testOrthoVerticalLine [ - - | eb | - v addAll: (RTBox elementsOn: Collection withAllSubclasses). - - eb := RTEdgeBuilder new. - eb shape orthoVerticalLine. - eb view: v. - eb objects: Collection withAllSubclasses; - connectFrom: #superclass to: #yourself. - - RTTreeLayout on: v elements. - v -] - -{ #category : #tests } -RTMultiLineTest >> testStraight [ - "The default is a straight line" - | lineShape edge | - lineShape := RTMultiLine new. - edge := lineShape edgeFrom: e1 to: e2. - v add: edge. - self assert: v canvas numberOfShapes equals: 1 -] - -{ #category : #tests } -RTMultiLineTest >> testVerticalOrthogonal [ - "The default is a straight line" - | lineShape edge | - lineShape := RTMultiLine new. - lineShape orthoVertical. - edge := lineShape edgeFrom: e1 to: e2. - v add: edge. - self assert: v canvas numberOfShapes equals: 3 -] diff --git a/src/Roassal2/RTMultiLinearColor.class.st b/src/Roassal2/RTMultiLinearColor.class.st deleted file mode 100644 index 0dab6b0dc..000000000 --- a/src/Roassal2/RTMultiLinearColor.class.st +++ /dev/null @@ -1,105 +0,0 @@ -" -A RTGrayLinearColor is xxxxxxxxx. - -Instance Variables - max: - min: - scope: - -max - - xxxxx - -min - - xxxxx - -scope - - xxxxx - -" -Class { - #name : #RTMultiLinearColor, - #superclass : #RTAbstractNormalizer, - #instVars : [ - 'colors' - ], - #category : #'Roassal2-ColorNormalizer' -} - -{ #category : #accessing } -RTMultiLinearColor >> colors [ - "Return the set of colors used to do the fading" - ^ colors -] - -{ #category : #accessing } -RTMultiLinearColor >> colors: anArrayOfColors [ - colors := anArrayOfColors -] - -{ #category : #initialization } -RTMultiLinearColor >> defaultColors [ - ^ Array with: Color red with: Color blue with: Color green -] - -{ #category : #initialization } -RTMultiLinearColor >> defaultCommand [ - ^ #yourself -] - -{ #category : #accessing } -RTMultiLinearColor >> indexesFor: f [ - "f - float is between 0.0 and 1.0. Return an array of length two" - | nbColors v i1 i2 | - nbColors := colors size. - v := f * (nbColors - 1). - i1 := v asInteger + 1. - i2 := i1 + 1. - - ^ Array with: i1 with: i2 -] - -{ #category : #initialization } -RTMultiLinearColor >> initialize [ - super initialize. - colors := self defaultColors. - command := self defaultCommand -] - -{ #category : #accessing } -RTMultiLinearColor >> level: f [ - "f - float is between 0.0 and 1.0" - | arr c1 c2 nr ng nb i1 i2 nbColors ff | - (f isNaN) ifTrue: [ ^ Color white ]. - - arr := self indexesFor: f. - nbColors := colors size. - - i1 := arr first. - i2 := arr second. - - i1 >= colors size ifTrue: [ ^ colors last ]. - i1 < 1 ifTrue: [ ^ colors first ]. - c1 := colors at: (i1). - c2 := colors at: (i2). - - ff :=( f - (i1 -1 / (nbColors - 1)) / (1 / (nbColors - 1)) ). - - nr := (c2 red - c1 red) * ff + c1 red. - ng := (c2 green - c1 green) * ff + c1 green. - nb := (c2 blue - c1 blue) * ff + c1 blue. - - ^ Color r: nr g: ng b: nb -] - -{ #category : #accessing } -RTMultiLinearColor >> numberOfColors [ - ^ colors size -] - -{ #category : #accessing } -RTMultiLinearColor >> rtValue: anObject [ - | v | - v := command rtValue: anObject. - "v ranges from 0.0 to 1.0" - ^ self level: v -] diff --git a/src/Roassal2/RTMultiLinearColorCached.class.st b/src/Roassal2/RTMultiLinearColorCached.class.st deleted file mode 100644 index 23cb9b722..000000000 --- a/src/Roassal2/RTMultiLinearColorCached.class.st +++ /dev/null @@ -1,27 +0,0 @@ -Class { - #name : #RTMultiLinearColorCached, - #superclass : #RTMultiLinearColor, - #instVars : [ - 'cache', - 'sizeBeforeReset' - ], - #category : #'Roassal2-ColorNormalizer' -} - -{ #category : #initialization } -RTMultiLinearColorCached >> initialize [ - super initialize. - self resetCache. - sizeBeforeReset := 800 -] - -{ #category : #accessing } -RTMultiLinearColorCached >> level: f [ - cache size >= sizeBeforeReset ifTrue: [ self resetCache ]. - ^ cache at: f ifAbsentPut: [ super level: f ] -] - -{ #category : #actions } -RTMultiLinearColorCached >> resetCache [ - cache := Dictionary new -] diff --git a/src/Roassal2/RTMultiLinearColorForIdentity.class.st b/src/Roassal2/RTMultiLinearColorForIdentity.class.st deleted file mode 100644 index 0caa760c0..000000000 --- a/src/Roassal2/RTMultiLinearColorForIdentity.class.st +++ /dev/null @@ -1,92 +0,0 @@ -" -RTMultiLinearColorForIdentity associates to each objects a distinct color. - -Consider the following example: -[[[ -classes := Collection withAllSubclasses. -packages := (classes collect: #package) asSet asArray. -v := RTView new. -v @ RTDraggableView. -normalizer := RTMultiLinearColorForIdentity new - objects: packages; - command: #package. -s := RTBox new size: 15; color: normalizer. -v addAll: (s elementsOn: classes). - -e := RTEdgeBuilder new - view: v; - moveBehind; - objects: classes. -e connectFrom: #superclass. -RTClusterLayout on: v elements. -v -]]] - -Using the Mondrian api, the normalizer es: -" -Class { - #name : #RTMultiLinearColorForIdentity, - #superclass : #RTMultiLinearColor, - #instVars : [ - 'objects', - 'defaultColor' - ], - #category : #'Roassal2-ColorNormalizer' -} - -{ #category : #public } -RTMultiLinearColorForIdentity >> colorOf: anObject [ - "Public method. It return the color of an Object" - - | index temp | - index := objects indexOf: anObject. - - "If the object is not part of the range of objects to consider, then we use a default color" - index = 0 ifTrue: [ ^ self defaultColor ]. - temp := objects size -1. - temp := temp = 0 - ifTrue: [ 1 ] - ifFalse: [ (index -1 )/temp ]. - ^ self level: temp -] - -{ #category : #accessing } -RTMultiLinearColorForIdentity >> defaultColor [ - "Return the color used in case the element to display is not part of the visualization" - ^ defaultColor -] - -{ #category : #accessing } -RTMultiLinearColorForIdentity >> defaultColor: aColor [ - "Set the color used in case the element to display is not part of the visualization" - defaultColor := aColor -] - -{ #category : #public } -RTMultiLinearColorForIdentity >> elements: roassalElements [ - ^ self objects: (roassalElements collect: #model) -] - -{ #category : #initialization } -RTMultiLinearColorForIdentity >> initialize [ - super initialize. - self colors: (RTColorPalette qualitative colors: 12 scheme: 'Set3'). - objects := #(). - self defaultColor: Color veryLightGray -] - -{ #category : #public } -RTMultiLinearColorForIdentity >> numberOfColors: aValue [ - ^ self objects: (1 to: aValue) -] - -{ #category : #public } -RTMultiLinearColorForIdentity >> objects: someObjects [ - objects := someObjects -] - -{ #category : #public } -RTMultiLinearColorForIdentity >> rtValue: anObject [ - "Public method" - ^ self colorOf: (command rtValue: anObject) -] diff --git a/src/Roassal2/RTMultiLinearColorForIdentityTest.class.st b/src/Roassal2/RTMultiLinearColorForIdentityTest.class.st deleted file mode 100644 index d37fc3537..000000000 --- a/src/Roassal2/RTMultiLinearColorForIdentityTest.class.st +++ /dev/null @@ -1,116 +0,0 @@ -" -A RTMultiLinearColorForIdentityTest is a test class for testing the behavior of RTMultiLinearColorForIdentity -" -Class { - #name : #RTMultiLinearColorForIdentityTest, - #superclass : #RTTest, - #category : #'Roassal2-Tests' -} - -{ #category : #tests } -RTMultiLinearColorForIdentityTest >> testBasic [ - - | n s e | - n := RTMultiLinearColorForIdentity new - command: #first; - objects: #(#c1 #c2 #c3 #c4 #c5); - yourself. - s := RTBox new color: n. - e := s elementsOn: #(#(c1) #(c2) #(c3) #(c4) #(c5)). - RTView new add: e. - -] - -{ #category : #tests } -RTMultiLinearColorForIdentityTest >> testColorOfObject [ - - | n s elements | - n := RTMultiLinearColorForIdentity new - command: #first; - objects: #(#c1 #c2 #c3 #c4 #c5); - yourself. - s := RTBox new color: n. - elements := s elementsOn: #(#(c1) #(c2) #(c3) #(c4) #(c5)). - RTGridLayout on: elements. - RTView new add: elements. - - self assert: (n colorOf: #c1) equals: (elements first trachelShape color). - self assert: (n colorOf: #c5) equals: (elements last trachelShape color). -] - -{ #category : #tests } -RTMultiLinearColorForIdentityTest >> testDefaultColor [ - - | v wordsToHighlight normalizer shape strings es | - v := RTView new. - - wordsToHighlight := #('all' 'me' 'you'). - normalizer := RTMultiLinearColorForIdentity new. - normalizer objects: wordsToHighlight. - normalizer defaultColor: Color yellow. - shape := RTBox new color: [ :w | normalizer rtValue: w ]. - strings := 'you and me make us all' substrings. - es := shape elementsOn: strings. - v addAll: es. - es @ RTPopup. - RTHorizontalLineLayout new gapSize: 1; on: es. - - self assert: (v elementFromModel: 'make') trachelShape color equals: Color yellow -] - -{ #category : #tests } -RTMultiLinearColorForIdentityTest >> testMultipleColors [ - - | v wordsToHighlight normalizer shape strings es | - v := RTView new. - - wordsToHighlight := #('red' 'yellow' 'green' ). - normalizer := RTMultiLinearColorForIdentity new. - normalizer colors: (Array with: Color red with: Color yellow with: Color green). - normalizer objects: wordsToHighlight. - normalizer defaultColor: Color magenta. - shape := RTBox new color: normalizer. - strings := 'red yellow green fa' substrings. - es := shape elementsOn: strings. - v addAll: es. - RTHorizontalLineLayout new gapSize: 1; on: es. - - self assert: (v elementFromModel: 'red') trachelShape color equals: Color red. - self assert: (v elementFromModel: 'yellow') trachelShape color equals: Color yellow. - self assert: (v elementFromModel: 'green') trachelShape color equals: Color green. - self assert: (v elementFromModel: 'fa') trachelShape color equals: Color magenta. - "playing with the level directly instead of use " - "common cases" - self assert: (normalizer level: 0) equals: Color red. - self assert: (normalizer level: 1) equals: Color green. - self assert: (normalizer level: 0.5) equals: Color yellow. - self deny: (normalizer level: 0.30) == Color red. - self deny: (normalizer level: 0.30) == Color green. - self deny: (normalizer level: 0.30) == Color yellow. - "rare cases" - self assert: (normalizer level: -10) equals: Color red. - self assert: (normalizer level: 10) equals: Color green. - - -] - -{ #category : #tests } -RTMultiLinearColorForIdentityTest >> testTwoColors [ - - | v wordsToHighlight normalizer shape strings es | - v := RTView new. - - wordsToHighlight := #('green' 'red'). - normalizer := RTMultiLinearColorForIdentity new. - normalizer colors: (Array with: Color green with: Color red). - normalizer objects: wordsToHighlight. - normalizer defaultColor: Color magenta. - shape := RTBox new color: normalizer. - strings := 'red yellow green' substrings. - es := shape elementsOn: strings. - v addAll: es. - RTHorizontalLineLayout new gapSize: 1; on: es. - - self assert: (v elementFromModel: 'green') trachelShape color equals: Color green. - self assert: (v elementFromModel: 'red') trachelShape color equals: Color red. -] diff --git a/src/Roassal2/RTMultiLinearColorTest.class.st b/src/Roassal2/RTMultiLinearColorTest.class.st deleted file mode 100644 index 37c8f09a4..000000000 --- a/src/Roassal2/RTMultiLinearColorTest.class.st +++ /dev/null @@ -1,36 +0,0 @@ -Class { - #name : #RTMultiLinearColorTest, - #superclass : #RTTest, - #category : #'Roassal2-ColorNormalizer-Tests' -} - -{ #category : #tests } -RTMultiLinearColorTest >> testBasic [ - - | n | - n := RTMultiLinearColor new. - self assert: (n rtValue: 0.0) equals: Color red -] - -{ #category : #tests } -RTMultiLinearColorTest >> testDefaultCommand [ - - | n | - n := RTMultiLinearColor new. - self assert: n command notNil. - self assert: (n command rtValue: 0.3) equals: 0.3. -] - -{ #category : #tests } -RTMultiLinearColorTest >> testNumberOfColors [ - - self assert: RTMultiLinearColor new numberOfColors equals: 3 -] - -{ #category : #tests } -RTMultiLinearColorTest >> testNumberOfColors2 [ - | n | - n := RTMultiLinearColor new. - n colors: (Array with: Color gray with: Color blue). - self assert: n numberOfColors equals: 2 -] diff --git a/src/Roassal2/RTMultiPilesPlugin.class.st b/src/Roassal2/RTMultiPilesPlugin.class.st deleted file mode 100644 index 1d136fcd3..000000000 --- a/src/Roassal2/RTMultiPilesPlugin.class.st +++ /dev/null @@ -1,42 +0,0 @@ -Class { - #name : #RTMultiPilesPlugin, - #superclass : #RTAbstractPlugin, - #category : #'Roassal2-Plugins' -} - -{ #category : #hooks } -RTMultiPilesPlugin >> description [ - ^ 'MultiPile support' -] - -{ #category : #hooks } -RTMultiPilesPlugin >> execute [ - - Gofer new - smalltalkhubUser: 'abergel' project: 'GitLogExtractor'; - package: 'GitLogExtractor'; - load. - - - Gofer new - smalltalkhubUser: 'AlisonFernandez' project: 'MultiPiles'; - package: 'MultiPiles'; - load. - - Gofer new - smalltalkhubUser: 'AlisonFernandez' project: 'MMatrix'; - package: 'MultiPileMatrix'; - load. - -] - -{ #category : #testing } -RTMultiPilesPlugin >> isLoaded [ - ^ RPackageOrganizer default includesPackageNamed: 'MultiPiles' - -] - -{ #category : #hooks } -RTMultiPilesPlugin >> label [ - ^ 'Small MultiPiles (Dependency Structure Visualization)' -] diff --git a/src/Roassal2/RTMultipleColorLinearNormalizer.class.st b/src/Roassal2/RTMultipleColorLinearNormalizer.class.st deleted file mode 100644 index 256ca2334..000000000 --- a/src/Roassal2/RTMultipleColorLinearNormalizer.class.st +++ /dev/null @@ -1,69 +0,0 @@ -" -A ROMultipleColorLinearNormalizer is xxxxxxxxx. - -Instance Variables - normalizers: - -normalizers - - xxxxx - -" -Class { - #name : #RTMultipleColorLinearNormalizer, - #superclass : #RTNAbstractNormalizer, - #instVars : [ - 'normalizers' - ], - #category : #'Roassal2-ColorNormalizerOBSOLETE' -} - -{ #category : #'instance creation' } -RTMultipleColorLinearNormalizer class >> valueRange: anArrayOfNumbers colorRange: anArrayOfColors [ - - ^ self new valueRange: anArrayOfNumbers colorRange: anArrayOfColors -] - -{ #category : #'private-accessing' } -RTMultipleColorLinearNormalizer >> detectNormalizerFor: aValue [ - - normalizers keysAndValuesDo: [:range :norm | - (range rangeIncludes: aValue) - ifTrue: [^ norm] ]. - self error: aValue asString, ' not in declared ranges' -] - -{ #category : #'initialize-release' } -RTMultipleColorLinearNormalizer >> initialize [ - - command := #yourself -] - -{ #category : #accessing } -RTMultipleColorLinearNormalizer >> rtValue: anEntity [ - - | value | - value := self command rtValue: anEntity. - "detect range for the value, retrieve and call corresponding normalizers" - ^ (self detectNormalizerFor: value) rtValue: value -] - -{ #category : #'initialize-release' } -RTMultipleColorLinearNormalizer >> valueRange: anArrayOfNumbers colorRange: anArrayOfColors [ - " {1. 2. 3} {Color red. Color yellow. Color green}" - - | size start end | - normalizers := Dictionary new. - self assert: anArrayOfNumbers size = anArrayOfColors size. - size := anArrayOfNumbers size. - 1 to: size - 1 do: [ :i | - start := anArrayOfNumbers at: i. - end := anArrayOfNumbers at: i + 1. - normalizers - at: (start to: end) - put: (RTNColorLinearNormalizer - inContext: (Array with: start with: end) - lowColor: (anArrayOfColors at: i) - highColor: (anArrayOfColors at: i + 1)) - ]. - -] diff --git a/src/Roassal2/RTMultipleData.class.st b/src/Roassal2/RTMultipleData.class.st deleted file mode 100644 index d4d3ce8b6..000000000 --- a/src/Roassal2/RTMultipleData.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -This is an obsolete class -" -Class { - #name : #RTMultipleData, - #superclass : #RTHorizontalMultipleData, - #category : #'Roassal2-Builder-Grapher-Obsolete' -} - -{ #category : #readme } -RTMultipleData >> thisIsAnObsoleteClass [ - "please, use RTHorizontalMultipleData instead" -] diff --git a/src/Roassal2/RTMultipleDataTest.class.st b/src/Roassal2/RTMultipleDataTest.class.st deleted file mode 100644 index 66ea5611e..000000000 --- a/src/Roassal2/RTMultipleDataTest.class.st +++ /dev/null @@ -1,96 +0,0 @@ -Class { - #name : #RTMultipleDataTest, - #superclass : #RTTest, - #instVars : [ - 'd' - ], - #category : #'Roassal2-Builder-Grapher-Tests' -} - -{ #category : #running } -RTMultipleDataTest >> setUp [ - super setUp. - d := RTHorizontalMultipleData new. - d points: #( #(1 2) #(2 4) #(3 5)). - d addMetric: #first. - d addMetric: #second. -] - -{ #category : #tests } -RTMultipleDataTest >> testAddingInGrapher [ - | g elements | - g := RTGrapher new. - g add: d. - elements := d elements. - self assert: elements size equals: 8. - self - assert: d selectElementsForAddingBarTitle size - equals: d numberOfPoints. - self assert: d selectElementsForAddingBarTitle size equals: 3. - self - assert: d selectElementsForAddingBarTitle first - equals: d elements second. - self - assert: d selectElementsForAddingBarTitle second - equals: d elements fifth. - self - assert: d selectElementsForAddingBarTitle third - equals: d elements eighth. - g build. - - "Make sure that all the elements created by the data are in the view" - self assert: (g view elements includesAll: d elements) -] - -{ #category : #tests } -RTMultipleDataTest >> testBasic [ - - | data | - data := RTVerticalMultipleData new. - self assert: data numberOfPoints equals: 0. - self assert: data numberOfMetrics equals: 0. -] - -{ #category : #tests } -RTMultipleDataTest >> testBasic02 [ - - self assert: d numberOfPoints equals: 3. - self assert: d numberOfMetrics equals: 2. -] - -{ #category : #'tests - rendering' } -RTMultipleDataTest >> testRendering01 [ - - | g elements | - g := RTGrapher new. - g add: d. - elements := d elements. - g build. - - self assert: elements first position x asInteger equals: 33. - self assert: elements second position x asInteger equals: 66. - - self assert: elements third position x asInteger equals: 100. - self assert: elements fourth position x asInteger equals: 133. - -] - -{ #category : #tests } -RTMultipleDataTest >> testSelectElementsForAddingBarTitle01 [ - - | b | - b := RTGrapher new. - d := RTHorizontalMultipleData new. - d barShape color: Color blue. - d points: #( #('hello' 1 2 1) #('world' 2 4 2) #('bonjour' 3 5 4) #('Gutten Morgen' -1 4 -5)). - d addMetric: #second. - d addMetric: #third. - d addMetric: #fourth. - d barChartWithBarTitle: 'hello' rotation: -45 color: Color gray. - b add: d. - b build. - - self assert: d elements size equals: 15. - self assert: d selectElementsForAddingBarTitle first equals: (d elements at: 2). - -] diff --git a/src/Roassal2/RTNAbstractNormalizer.class.st b/src/Roassal2/RTNAbstractNormalizer.class.st deleted file mode 100644 index fc409629e..000000000 --- a/src/Roassal2/RTNAbstractNormalizer.class.st +++ /dev/null @@ -1,36 +0,0 @@ -" -A RONAbstractNormalizer is xxxxxxxxx. - -Instance Variables - command: - -command - - xxxxx - -" -Class { - #name : #RTNAbstractNormalizer, - #superclass : #RTObject, - #instVars : [ - 'command' - ], - #category : #'Roassal2-ColorNormalizerOBSOLETE' -} - -{ #category : #accessing } -RTNAbstractNormalizer >> command [ - - ^command -] - -{ #category : #accessing } -RTNAbstractNormalizer >> command: aBlock [ - - command := aBlock -] - -{ #category : #accessing } -RTNAbstractNormalizer >> rtValue: anEntity [ - - self subclassResponsibility -] diff --git a/src/Roassal2/RTNColorLinearNormalizer.class.st b/src/Roassal2/RTNColorLinearNormalizer.class.st deleted file mode 100644 index 2d592b066..000000000 --- a/src/Roassal2/RTNColorLinearNormalizer.class.st +++ /dev/null @@ -1,173 +0,0 @@ -" -A RONColorLinearNormalizer is xxxxxxxxx. - -Instance Variables - highColor: - lowColor: - maxBrightness: - minBrightness: - -highColor - - xxxxx - -lowColor - - xxxxx - -maxBrightness - - xxxxx - -minBrightness - - xxxxx - -" -Class { - #name : #RTNColorLinearNormalizer, - #superclass : #RTNLinearNormalizer, - #instVars : [ - 'minBrightness', - 'maxBrightness', - 'lowColor', - 'highColor' - ], - #category : #'Roassal2-ColorNormalizerOBSOLETE' -} - -{ #category : #'instance creation' } -RTNColorLinearNormalizer class >> inContext: aCollection lowColor: lowColor highColor: highColor [ - - | normalizer | - normalizer := self inContext: aCollection. - normalizer lowColor: lowColor. - normalizer highColor: highColor. - ^normalizer -] - -{ #category : #'instance creation' } -RTNColorLinearNormalizer class >> inContext: aCollection lowColor: lowColor lowThreshold: lowThreshold highColor: highColor highThreshold: highThreshold [ - - | normalizer | - normalizer := self inContext: aCollection. - normalizer lowColor: lowColor. - normalizer highColor: highColor. - normalizer minBrightness: lowThreshold. - normalizer maxBrightness: highThreshold. - ^normalizer -] - -{ #category : #'instance creation' } -RTNColorLinearNormalizer class >> inContext: aCollection withCommand: aBlock lowColor: lowColor highColor: highColor [ - - | normalizer | - normalizer := self inContext: aCollection withCommand: aBlock. - normalizer lowColor: lowColor. - normalizer highColor: highColor. - ^normalizer -] - -{ #category : #'instance creation' } -RTNColorLinearNormalizer class >> inContext: aCollection withCommand: aBlock lowColor: lowColor lowThreshold: lowThreshold highColor: highColor highThreshold: highThreshold [ - - | normalizer | - normalizer := self inContext: aCollection withCommand: aBlock. - normalizer lowColor: lowColor. - normalizer highColor: highColor. - normalizer minBrightness: lowThreshold. - normalizer maxBrightness: highThreshold. - ^normalizer -] - -{ #category : #private } -RTNColorLinearNormalizer >> blend: aColor with: aColorValue weight: wt [ - "Answer a new ColorValue which is a weighted blend of the receiver and the - supplied ColorValue." - "Simply interpolates in RGB space." - - | rv gv bv invWt av | - - invWt := 1-wt. - rv := ((aColor red * invWt) + ((aColorValue red)*wt)) "rounded". - gv := ((aColor green * invWt) + ((aColorValue green)*wt)) "rounded". - bv := ((aColor blue * invWt) + ((aColorValue blue)*wt)) "rounded". - av := ((aColor alpha * invWt) + ((aColorValue alpha)*wt)). - ^Color r: rv g: gv b: bv alpha: av -] - -{ #category : #accessing } -RTNColorLinearNormalizer >> highColor: aBlock [ - - highColor := aBlock -] - -{ #category : #'translator protocol' } -RTNColorLinearNormalizer >> highColorFor: anEntity [ - - ^highColor rtValue: anEntity -] - -{ #category : #'initialize-release' } -RTNColorLinearNormalizer >> initialize [ - - super initialize. - lowColor := Color white. - highColor := Color black -] - -{ #category : #accessing } -RTNColorLinearNormalizer >> lowColor: aBlock [ - - lowColor := aBlock -] - -{ #category : #'translator protocol' } -RTNColorLinearNormalizer >> lowColorFor: anEntity [ - - ^lowColor rtValue: anEntity -] - -{ #category : #accessing } -RTNColorLinearNormalizer >> maxBrightness: aBlock [ - - maxBrightness := aBlock -] - -{ #category : #'translator protocol' } -RTNColorLinearNormalizer >> maxBrightnessFor: anEntity [ - - ^maxBrightness isNil - ifTrue: [1.0] - ifFalse: [maxBrightness rtValue: anEntity] -] - -{ #category : #accessing } -RTNColorLinearNormalizer >> minBrightness: aBlock [ - - minBrightness := aBlock -] - -{ #category : #'translator protocol' } -RTNColorLinearNormalizer >> minBrightnessFor: anEntity [ - - ^minBrightness isNil - ifTrue: [0.0] - ifFalse: [minBrightness rtValue: anEntity] -] - -{ #category : #accessing } -RTNColorLinearNormalizer >> rtValue: anEntity [ - "Calculates the color of the entity based on the context." - - | myValue myHighColor myLowColor myMinBrightness myMaxBrightness weight minValue maxValue | - "Get color specific data" - minValue := self minimumValue: anEntity. - maxValue := self maximumValue: anEntity. - myMinBrightness := self minBrightnessFor: anEntity. - myMaxBrightness := self maxBrightnessFor: anEntity. - myHighColor := self highColorFor: anEntity. - myLowColor := self lowColorFor: anEntity. "Get data" - weight := minValue = maxValue - ifTrue: [(myMinBrightness + myMaxBrightness) / 2] - ifFalse: [ - myValue := (self command rtValue: anEntity) - (self minimumValue: anEntity). - myMinBrightness + (myValue abs / (maxValue - minValue) * (myMaxBrightness - myMinBrightness)) ]. - ^self blend: myLowColor with: myHighColor weight: weight -] diff --git a/src/Roassal2/RTNExplicitIdentityNormalizer.class.st b/src/Roassal2/RTNExplicitIdentityNormalizer.class.st deleted file mode 100644 index 21e27d6fd..000000000 --- a/src/Roassal2/RTNExplicitIdentityNormalizer.class.st +++ /dev/null @@ -1,65 +0,0 @@ -" -A RONExplicitIdentityNormalizer is xxxxxxxxx. - -Instance Variables - colors: - defaultColor: - -colors - - xxxxx - -defaultColor - - xxxxx - -" -Class { - #name : #RTNExplicitIdentityNormalizer, - #superclass : #RTNIdentityNormalizer, - #instVars : [ - 'colors', - 'defaultColor' - ], - #category : #'Roassal2-ColorNormalizerOBSOLETE' -} - -{ #category : #'instance creation' } -RTNExplicitIdentityNormalizer class >> withCommand: aBlock withColors: aCollection withDefaultColor: aColor [ - - ^(self withCommand: aBlock) - colors: aCollection; - defaultColor: aColor; - yourself -] - -{ #category : #accessing } -RTNExplicitIdentityNormalizer >> colors [ - - ^colors -] - -{ #category : #accessing } -RTNExplicitIdentityNormalizer >> colors: anObject [ - - colors := anObject -] - -{ #category : #accessing } -RTNExplicitIdentityNormalizer >> defaultColor [ - - ^defaultColor -] - -{ #category : #accessing } -RTNExplicitIdentityNormalizer >> defaultColor: anObject [ - - defaultColor := anObject -] - -{ #category : #private } -RTNExplicitIdentityNormalizer >> nextColor [ - - colorIndex := colorIndex + 1. - ^colorIndex > self colors size - ifTrue: [ self defaultColor ] - ifFalse: [ self colors at: colorIndex ] -] diff --git a/src/Roassal2/RTNFontLinearNormalizer.class.st b/src/Roassal2/RTNFontLinearNormalizer.class.st deleted file mode 100644 index 628a80ec5..000000000 --- a/src/Roassal2/RTNFontLinearNormalizer.class.st +++ /dev/null @@ -1,18 +0,0 @@ -" -A RONFontLinearNormalizer is xxxxxxxxx. - -" -Class { - #name : #RTNFontLinearNormalizer, - #superclass : #RTNLinearNormalizer, - #category : #'Roassal2-ColorNormalizerOBSOLETE' -} - -{ #category : #accessing } -RTNFontLinearNormalizer >> rtValue: anEntity [ - "Calculates the color of the entity based on the context." - - | value | - value := self command rtValue: anEntity. - ^5 + (38 * (value abs / (self maximumValue: anEntity))) asInteger -] diff --git a/src/Roassal2/RTNIdentityNormalizer.class.st b/src/Roassal2/RTNIdentityNormalizer.class.st deleted file mode 100644 index a724a1ddd..000000000 --- a/src/Roassal2/RTNIdentityNormalizer.class.st +++ /dev/null @@ -1,82 +0,0 @@ -" -A RONIdentityNormalizer is xxxxxxxxx. - -Instance Variables - colorIndex: - dictionary: - -colorIndex - - xxxxx - -dictionary - - xxxxx - -" -Class { - #name : #RTNIdentityNormalizer, - #superclass : #RTNAbstractNormalizer, - #instVars : [ - 'dictionary', - 'colorIndex' - ], - #category : #'Roassal2-ColorNormalizerOBSOLETE' -} - -{ #category : #'instance creation' } -RTNIdentityNormalizer class >> beginingAtBlue [ - ^ self new - setIndexTo: Color blue; - yourself -] - -{ #category : #'instance creation' } -RTNIdentityNormalizer class >> beginingAtRed [ - ^ self new - setIndexTo: Color red; - yourself -] - -{ #category : #'instance creation' } -RTNIdentityNormalizer class >> withCommand: aBlock [ - - ^(self new) - command: aBlock; - yourself -] - -{ #category : #'initialize-release' } -RTNIdentityNormalizer >> colors [ - ^ Color distinctTenStrongColors -] - -{ #category : #'initialize-release' } -RTNIdentityNormalizer >> initialize [ - - super initialize. - colorIndex := 0. - dictionary := Dictionary new. - command := #yourself -] - -{ #category : #private } -RTNIdentityNormalizer >> nextColor [ - - colorIndex := colorIndex \\ self colors size + 1. - ^self colors at: colorIndex -] - -{ #category : #accessing } -RTNIdentityNormalizer >> rtValue: anEntity [ - - ^dictionary - at: (command rtValue: anEntity) - ifAbsentPut: [ self nextColor ] -] - -{ #category : #private } -RTNIdentityNormalizer >> setIndexTo: aColor [ - "colorAsSymbol has to be one of Color colorNames. - The method set the current index to the color given in parameter" - - colorIndex := (self colors indexOf: aColor) - 1 -] diff --git a/src/Roassal2/RTNLinearNormalizer.class.st b/src/Roassal2/RTNLinearNormalizer.class.st deleted file mode 100644 index 5b9383a33..000000000 --- a/src/Roassal2/RTNLinearNormalizer.class.st +++ /dev/null @@ -1,103 +0,0 @@ -" -A RONLinearNormalizer is xxxxxxxxx. - -Instance Variables - context: - maximumValue: - minimumValue: - -context - - xxxxx - -maximumValue - - xxxxx - -minimumValue - - xxxxx - -" -Class { - #name : #RTNLinearNormalizer, - #superclass : #RTNAbstractNormalizer, - #instVars : [ - 'maximumValue', - 'context', - 'minimumValue' - ], - #category : #'Roassal2-ColorNormalizerOBSOLETE' -} - -{ #category : #'instance creation' } -RTNLinearNormalizer class >> inContext: aCollection [ - - ^self inContext: aCollection withCommand: #yourself -] - -{ #category : #'instance creation' } -RTNLinearNormalizer class >> inContext: aCollection withCommand: aBlock [ - - ^(self new) - context: aCollection; - command: aBlock; - yourself -] - -{ #category : #accessing } -RTNLinearNormalizer >> command: aBlock [ - - super command: aBlock. - self flushCache -] - -{ #category : #accessing } -RTNLinearNormalizer >> context [ - - ^context -] - -{ #category : #accessing } -RTNLinearNormalizer >> context: aContext [ - - context := aContext. - self flushCache -] - -{ #category : #accessing } -RTNLinearNormalizer >> flushCache [ - - maximumValue := nil -] - -{ #category : #'initialize-release' } -RTNLinearNormalizer >> initialize [ - "Initialize a newly created instance. This method must answer the receiver." - - super initialize. - maximumValue := nil -] - -{ #category : #private } -RTNLinearNormalizer >> maximumValue: anEntity [ - "Returns the largest value that the color metric provides" - - maximumValue isNil - ifTrue: - [maximumValue := (self context rtValue: anEntity) - inject: 1 - into: - [:maximum :entity | maximum max: (self command rtValue: entity)]]. - ^maximumValue -] - -{ #category : #private } -RTNLinearNormalizer >> minimumValue: anEntity [ - "Returns the smallest value that the color metric provides" - - minimumValue isNil - ifTrue: - [minimumValue := (self context rtValue: anEntity) - inject: 100000000000 - into: - [:minimum :entity | minimum min: (self command rtValue: entity)]]. - ^minimumValue -] diff --git a/src/Roassal2/RTNNormalizerTest.class.st b/src/Roassal2/RTNNormalizerTest.class.st deleted file mode 100644 index 244428328..000000000 --- a/src/Roassal2/RTNNormalizerTest.class.st +++ /dev/null @@ -1,159 +0,0 @@ -" -A RONormalizerTest is xxxxxxxxx. - -" -Class { - #name : #RTNNormalizerTest, - #superclass : #RTTest, - #category : #'Roassal2-ColorNormalizer-Tests' -} - -{ #category : #identity } -RTNNormalizerTest >> testBeginingAtBlue [ - - | n | - n := RTNIdentityNormalizer beginingAtBlue. - self assert: n nextColor = Color blue -] - -{ #category : #identity } -RTNNormalizerTest >> testBeginingAtRed [ - - | n | - n := RTNIdentityNormalizer beginingAtRed. - self assert: n nextColor = Color red -] - -{ #category : #'explicit identity' } -RTNNormalizerTest >> testExplicitIdentity [ - | normalizer colorOne colorTwo | - - normalizer := RTNExplicitIdentityNormalizer - withCommand: #last - withColors: (Array with: Color blue with: Color white with: Color red) - withDefaultColor: Color green. - - colorOne := normalizer rtValue: 'alex'. - colorTwo := normalizer rtValue: 'suffix'. - self assert: (colorOne = colorTwo) - - -] - -{ #category : #tests } -RTNNormalizerTest >> testExplicitIdentity2 [ - | normalizer | - - normalizer := RTNExplicitIdentityNormalizer - withCommand: #yourself - withColors: (Array with: Color blue with: Color white with: Color red) - withDefaultColor: Color green. - - self assert: (normalizer rtValue: 1) = Color blue. - self assert: (normalizer rtValue: 2) = Color white. - self assert: (normalizer rtValue: 3) = Color red. - self assert: (normalizer rtValue: -1) = Color green. - self assert: (normalizer rtValue: 1000) = Color green. -] - -{ #category : #'explicit identity' } -RTNNormalizerTest >> testExplicitIdentity3Initialization [ - | normalizer colors | - - colors := Array with: Color blue with: Color white with: Color red. - normalizer := RTNExplicitIdentityNormalizer - withCommand: #yourself - withColors: colors - withDefaultColor: Color green. - - self assert: (normalizer rtValue: 1) = Color blue. - self assert: (normalizer rtValue: 2) = Color white. - self assert: (normalizer rtValue: 3) = Color red. - self assert: (normalizer rtValue: 4) = Color green. -] - -{ #category : #linear } -RTNNormalizerTest >> testGradient [ - | normalizer | - - normalizer := RTNColorLinearNormalizer inContext: #(0 1 2 3 4 5 6 7 8 9 10) lowColor: Color yellow highColor: Color red. - self assert: (normalizer maximumValue: nil) = 10. - self assert: (normalizer rtValue: 10) = (Color r: 1.0 g: 0.0 b: 0.0). - self assert: (normalizer rtValue: 1) = (Color r: 1.0 g: 0.900012 b: 0.0). - self assert: (normalizer rtValue: 0) = (Color r: 1.0 g: 1.0 b: 0.0) -] - -{ #category : #identity } -RTNNormalizerTest >> testIdentity [ - | colorOne colorTwo normalizer | - - normalizer := RTNIdentityNormalizer new. - colorOne := normalizer rtValue: 1. - colorTwo := normalizer rtValue: 2. - self deny: colorOne = colorTwo. - - colorOne := normalizer rtValue: 12. - colorTwo := normalizer rtValue: 12. - self assert: colorOne = colorTwo. -] - -{ #category : #identity } -RTNNormalizerTest >> testIdentityModulo [ - "This checks that there is no exception if there are more identities than colors" - - 1 to: 150 do: [:index | RTNIdentityNormalizer new rtValue: index] -] - -{ #category : #identity } -RTNNormalizerTest >> testIdentityWithCommand [ - | colorOne colorTwo normalizer | - - normalizer := RTNIdentityNormalizer withCommand: #last. - colorOne := normalizer rtValue: 'bob'. - colorTwo := normalizer rtValue: 'tom'. - self deny: colorOne = colorTwo. - - colorOne := normalizer rtValue: 'anna'. - colorTwo := normalizer rtValue: 'maria'. - self assert: colorOne = colorTwo. -] - -{ #category : #multiple } -RTNNormalizerTest >> testMultipleLinearNormalizer [ - | normalizer | - - normalizer := RTMultipleColorLinearNormalizer - valueRange: #(5 10 15) colorRange: (Array with: Color blue with: Color white with: Color red) . - - self assert: (normalizer rtValue: 5) = (Color r: 0.0 g: 0.0 b: 1.0). - self assert: (normalizer rtValue: 6) = (Color r: 0.2 g: 0.2 b: 1.0). - self assert: (normalizer rtValue: 15) = (Color r: 1.0 g: 0.0 b: 0.0) -] - -{ #category : #linear } -RTNNormalizerTest >> testNumberLinearNormalizer [ - | normalizer | - normalizer := RTNumberLinearNormalizer inContext: (1 to: 10) withCommand: [:entity | entity * 1000 ]. - self assert: (normalizer rtValue: 100) = 10. - - normalizer := RTNumberLinearNormalizer inContext: (1 to: 100) withCommand: [:entity | entity * 1000 ]. - self assert: (normalizer rtValue: 100) = 1. - - normalizer := RTNumberLinearNormalizer inContext: (1 to: 100) withCommand: [:entity | entity ]. - self assert: (normalizer rtValue: 100) = 1. - -] - -{ #category : #linear } -RTNNormalizerTest >> testValueLinearNormalizer [ - - | normalizer | - normalizer := RTValueLinearNormalizer inContext: (0 to: 10) withCommand: [:entity | entity ]. - self assert: (normalizer rtValue: 10) = 1. - - normalizer := RTValueLinearNormalizer inContext: (0 to: 10) withCommand: [:entity | entity * 1000 ]. - self assert: (normalizer rtValue: 100) = 10. - - normalizer := RTValueLinearNormalizer inContext: (99 to: 100) withCommand: [:entity | entity ]. - self assert: (normalizer rtValue: 101) = 2. -] diff --git a/src/Roassal2/RTNameCloud.class.st b/src/Roassal2/RTNameCloud.class.st deleted file mode 100644 index 2f3e0f6cd..000000000 --- a/src/Roassal2/RTNameCloud.class.st +++ /dev/null @@ -1,275 +0,0 @@ -" -Create a simple namecloud -" -Class { - #name : #RTNameCloud, - #superclass : #RTBuilder, - #instVars : [ - 'maxHeight', - 'minHeight', - 'maxWords', - 'layout', - 'tableFrequency', - 'tableObjects', - 'dictionary' - ], - #category : #'Roassal2-Builder-NameCloud' -} - -{ #category : #adding } -RTNameCloud >> addObjects: objects description: aBlockOrSymbol [ - objects do: [ :o | - self addString: (aBlockOrSymbol rtValue: o) object: o ] - -] - -{ #category : #adding } -RTNameCloud >> addString: string [ - string substrings do: [ :w | self addWord: w ]. -] - -{ #category : #adding } -RTNameCloud >> addString: string object: object [ - string substrings do: [ :w | self addWord: w object: object ] -] - -{ #category : #adding } -RTNameCloud >> addStrings: collectionOfStrings [ - collectionOfStrings do: [ :s | self addString: s ] -] - -{ #category : #adding } -RTNameCloud >> addWord: aWordAsString [ - | w | - w := self prepareWord: aWordAsString. - (self isValidWord: w) ifTrue: - [ tableFrequency at: w ifAbsentPut: [ 0 ]. - tableFrequency at: w put: (tableFrequency at: w) + 1 ]. - ^ w -] - -{ #category : #adding } -RTNameCloud >> addWord: aWordAsString object: object [ - "object is an object for which its description contains aWordAsString" - | w | - w := self addWord: aWordAsString. - - "If the word is not valid, then we do nothing" - (self isValidWord: w) ifFalse: [ ^ self ]. - - tableObjects at: w ifAbsentPut: [ Set new ]. - (tableObjects at: w) add: object -] - -{ #category : #hooks } -RTNameCloud >> createView [ - ^ super createView @ RTDraggableView -] - -{ #category : #configuration } -RTNameCloud >> defaultLayout [ - ^ RTRectanglePackLayout new -] - -{ #category : #configuration } -RTNameCloud >> defaultMaxHeight [ - ^ 30 -] - -{ #category : #configuration } -RTNameCloud >> defaultMaxWords [ - ^ 150 -] - -{ #category : #configuration } -RTNameCloud >> defaultMinHeight [ - ^ 8 -] - -{ #category : #accessing } -RTNameCloud >> dictionary [ - ^ dictionary -] - -{ #category : #accessing } -RTNameCloud >> dictionary: anObject [ - dictionary := anObject -] - -{ #category : #examples } -RTNameCloud >> example01 [ - " - self new example01 - " - - ^ RTNameCloud new - addString: 'open - - | v shape | - v := RTView new. - shape := RTLabel new height: [ :assoc | assoc value ]; text: #key. - v addAll: (shape elementsOn: table associations). - RTFlowLayout on: v elements. - v open'; - yourself -] - -{ #category : #examples } -RTNameCloud >> example02 [ - " - self new example02 - " - | b | - b := RTNameCloud new. - b addStrings: (RTNameCloud rtmethods collect: #sourceCode). - ^ b -] - -{ #category : #examples } -RTNameCloud >> example03 [ - " - self new example03 - " - - | b | - b := RTNameCloud new. - b dictionary: (RTSourceCodeDictionary new). - RTObject withAllSubclasses do: [ :c | - b addObjects: c rtmethods description: #sourceCode ]. - ^ b -] - -{ #category : #examples } -RTNameCloud >> example04 [ - " - self new example04 - " - | b | - b := RTNameCloud new. - b minHeight: 20. - b maxHeight: 30. - b addString: 'I am not that tall but I speak many languages. But I have tall legs and big feet'. - ^ b -] - -{ #category : #initialization } -RTNameCloud >> initialize [ - super initialize. - tableFrequency := Dictionary new. - tableObjects := Dictionary new. - dictionary := RTEnglishDictionary new. - maxHeight := self defaultMaxHeight. - minHeight := self defaultMinHeight. - maxWords := self defaultMaxWords. - layout := self defaultLayout. -] - -{ #category : #hooks } -RTNameCloud >> inspectObjectsForWord: word [ - - ^ (tableObjects includesKey: word) - ifTrue: [ (tableObjects at: word) inspect ] -] - -{ #category : #testing } -RTNameCloud >> isValidWord: word [ - ^ word notEmpty and: [ (self unnecessaryWords includes: word) not ] -] - -{ #category : #accessing } -RTNameCloud >> maxFrequency [ - ^ tableFrequency values max -] - -{ #category : #accessing } -RTNameCloud >> maxHeight [ - ^ maxHeight -] - -{ #category : #accessing } -RTNameCloud >> maxHeight: anObject [ - maxHeight := anObject -] - -{ #category : #accessing } -RTNameCloud >> maxWords [ - "Return the number of words to be displayed" - ^ maxWords -] - -{ #category : #accessing } -RTNameCloud >> maxWords: anInteger [ - "Set the number of words to be displayed" - maxWords := anInteger -] - -{ #category : #accessing } -RTNameCloud >> minFrequency [ - ^ tableFrequency values min -] - -{ #category : #accessing } -RTNameCloud >> minHeight [ - ^ minHeight -] - -{ #category : #accessing } -RTNameCloud >> minHeight: anObject [ - minHeight := anObject -] - -{ #category : #utility } -RTNameCloud >> prepareWord: word [ - ^ word select: #isLetter -] - -{ #category : #hooks } -RTNameCloud >> renderIn: aView [ - | shape es | - shape := RTLabel new - height: [ :assoc | | temp | - temp := assoc value isNumber - ifTrue: [ assoc value ] - ifFalse: [ assoc value size ]. - (temp - self minFrequency) * maxHeight / (self maxFrequency - self minFrequency max: 1) + minHeight ]; - text: #key. - es := shape elementsOn: self sortedAssociationsBounded. - aView addAll: es. - es @ RTPopup. - es - @ - (RTMenuActivable new - action: #inspect; - item: 'inspect objects' action: [ :e | self inspectObjectsForWord: e model key ]). - layout on: es -] - -{ #category : #accessing } -RTNameCloud >> sortedAssociations [ - ^ self tableObjects - ifEmpty: [ tableFrequency associations reverseSortedAs: #value ] - ifNotEmpty: [ self tableObjects associations reverseSortedAs: [ :assoc | assoc value size ] ]. -] - -{ #category : #accessing } -RTNameCloud >> sortedAssociationsBounded [ - - ^ self sortedAssociations copyFrom: 1 to: (self sortedAssociations size min: maxWords) -] - -{ #category : #accessing } -RTNameCloud >> tableObjects [ - "Return a dictionary for which keys are words, and values are set of objects related to the word" - ^ tableObjects -] - -{ #category : #dictionaries } -RTNameCloud >> topWords: index [ - "Return the top index words" - ^ ((self sortedAssociations copyFrom: 1 to: index) collect: #key) asArray -] - -{ #category : #dictionaries } -RTNameCloud >> unnecessaryWords [ - ^ dictionary unnecessaryWords -] diff --git a/src/Roassal2/RTNameCloudDictionary.class.st b/src/Roassal2/RTNameCloudDictionary.class.st deleted file mode 100644 index 7d56e85ca..000000000 --- a/src/Roassal2/RTNameCloudDictionary.class.st +++ /dev/null @@ -1,11 +0,0 @@ -Class { - #name : #RTNameCloudDictionary, - #superclass : #RTObject, - #category : #'Roassal2-Builder-NameCloud' -} - -{ #category : #hooks } -RTNameCloudDictionary >> unnecessaryWords [ - "Override to return the list of unnecessary words" - self subclassResponsibility -] diff --git a/src/Roassal2/RTNameCloudExample.class.st b/src/Roassal2/RTNameCloudExample.class.st deleted file mode 100644 index 846fcaf94..000000000 --- a/src/Roassal2/RTNameCloudExample.class.st +++ /dev/null @@ -1,149 +0,0 @@ -" -RTNameCloudExample new installTitle: 'SimpleExample' - code: - ' -| b | -b := RTNameCloud new - addString: ''open - - | v shape | - v := RTView new. - shape := RTLabel new height: [ :assoc | assoc value ]; text: #key. - v addAll: (shape elementsOn: table associations). - RTFlowLayout on: v elements. - v open''. -b open. -b view canvas. - ' - -" -Class { - #name : #RTNameCloudExample, - #superclass : #RTAbstractExample, - #category : #'Roassal2-Builder-NameCloud' -} - -{ #category : #sources } -RTNameCloudExample >> exampleRoassalCode [ - - - | b | - (TRPlatform current dialogConfirm: 'This example takes a long time to load, execute?') - ifFalse: [ ^ self ]. - b := RTNameCloud new. - RTObject withAllSubclasses do: [ :c | - b addStrings: (c rtmethods collect: #sourceCode) ]. - ^ b -] - -{ #category : #icons } -RTNameCloudExample >> exampleRoassalCodeIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAN0UlEQVR4XuXdR5OVRRcHcFau -/AhsdenGD+CGhWursCwWVAliuUDLUimlFDGUAUUxR8wZVMSEOeesYMacFXNG7fH9db1n6tzH -ZxiBmXEu3VVT994Op/vpc+/5n9Q9M0ZG2i/TqcxofwvaZ0j7pX2GtM+Q9sswM+TSSy8tW9P/ -q6++2mL/a665ptx4443l66+/Ln/++We56KKLyuuvv15++umn8sUXXwyM/eyzz8qHH344Wvf+ -++//o9+mTZuKskMx5Nlnnx19IBv00ksvjX5eunTpyHHHHVfefPPN0bply5aVBx54YGATVq9e -XdS/9dZb5brrritXXHFF+eCDD8qaNWv+MdbrMcccUx588MGyfPny+vnkk08eoHfffffVz88/ -/3yxBv0x6JZbbhnot2jRovLyyy/vWAzZZZdd6gOdccYZ5YQTTii+iZkhyqGHHjpa9+6775Zr -r712YBN8VjDk3nvvLZ9//nnZfffdK73c77XXXqub+tBDD5UNGzZgysixxx5bfyW539tvv13u -ueee4hf6xx9/VLrnnHPOP/qh88wzzwwXQ2xC/vzjjz+WLFqCITY//zqi7vrrry+XXHJJaR9D -JqDsuuuu9Vu2//77l/gmH3jggeX0008vBx10UMkM2WOPPUYOOOCA8v3335f2IXySGLLbbruV -q666anSDZ8yYUb777rv6t9NOO5XxfiHtl0kQWUTOzjvvXP7PkJGnnnqqxF/7DJlihpx99tl1 -g2fPnl1+/fXXMmfOnHLHHXfUuieffLK+zpw5s32GTBVDQm3MairVVl3o81RONgGNh2rZ/ta3 -b6m3z5D2S/sMaZ8h7Zf2GVLLO++8s02KAXfLDs8QLo+bb7652hy///57WbVqVbn66qvLRx99 -VH1Ja9eurR7V5557bnQzos04423UI488UvtwHG7cuLHSOPjgg2vdl19+OTpW28qVKwuvLsag -xXXDP8YfFf1eeeWVwlMbn/XnIdi8eXN59dVXC2flJ598UrLjE41vv/223HDDDXXdUU99nwpm -bjdDPLCNtLH77rtvefTRR0ts2rp168oLL7xQ2zjx8rhou/jii0fH20Aby3XOtqE6c0Y+/PDD -VV2Octddd5UFCxZUtZq75vbbb69eYJ7dxx9/fHSeO++8c8BRaB6v1O9ffvmlOiitn2Mx+tx9 -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' -] - -{ #category : #sources } -RTNameCloudExample >> exampleSimpleExample [ - -| b | -b := RTNameCloud new - addString: 'open - - | v shape | - v := RTView new. - shape := RTLabel new height: [ :assoc | assoc value ]; text: #key. - v addAll: (shape elementsOn: table associations). - RTFlowLayout on: v elements. - v open'. - ^ b -] - -{ #category : #icons } -RTNameCloudExample >> exampleSimpleExampleIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAADF0lEQVR4XuXYXUsiYRyHYQ/6 -VB127nF0KkFR9AGKTCgLLYoIEix7sUwUCsSEXgQ9SE0lRLAgyI466qCz6PDn7v8hZdtdFvYN -3L1vkGJmmpznmhnHx9Pp8OunPPwh4IPw44PwQfjxQfgg/PggfBB+fBA+CD8+CD8+CB+EHx+E -D8KPD8IH4ccH4YPw44Pw44PwQfjxQfgg/PggfBB+fBA+CD8+CD8+CB+EHx+ED8KPD8IH4ccH -4YPw44Pw44PwQfjxQfgg/P5lkNfXV/XDwR8eHqparapcLisajSoSiWhhYUHxeFwXFxdqtVq9 -97m1tSV75fN59/Pk5ETtdlv/BYgd0K/8XSAQUDKZ1Pj4uGKxmFZWVrS4uKipqakP+5ufn9fe -3p4qlYrGxsZ0fHysmZkZzc3NOQD+FfLexMSE0um0O8N2dnY0Ojqqu7s7XV5eygbx84B37Myb -nJyU3+9XoVBQNpvtDWAwGNTp6amGh4eVy+VseyUSCd3c3HwYZFt2e3vr0Gyb8/Nzzc7OurPf -lvNB3nt5edHIyIi6V4jP53MYu7u7DsNelg340NCQQqGQrq6uvhnArwH4nyE/aHp6Ws/Pz27A -9vf33RncXRcOh7W6uto7ozOZjBtwu38Xi0UHsra2plqtpnq97u7p9/f34n+o/0aPj4/u9mC/ -Dw4O/tRg2m2M/5T1FxoYGHAD6/V6xX+Q7QMQe5pZX193H8D8Ie4DkLe3N3k8/O+c/G/qfBB+ -fBA+CD8+CB/kz/W9WVH7Rm6PwV/Ojm5ubn54LH54eND19bWbPEylUnp6euqtOzo60vLysmyb -UqnUW96drbX/Zfu3CcXuOlu+sbGhZrPZW7a0tKSDgwOdnZ252QCbmLT5su3tbbfv7nY222v7 -sxnf7rJGo+H2Z+/ZjstmFPhXCP8K4ccH4YPw44Pw44PwQfjxQfgg/PggfBB+fBA+CD8+CD8+ -CB+EHx+ED8KPD8IH4ccH4YPw44Pw44PwQfjxQfgg/PggfBB+fBA+CD8+CD8+CB+EHx+ED8KP -D8IH4ccH4YPw44Pw44P0c58A+fULRMou/rUAAAAASUVORK5CYII=' -] - -{ #category : #accessing } -RTNameCloudExample >> label [ - ^ 'Name cloud' -] diff --git a/src/Roassal2/RTNameCloudTest.class.st b/src/Roassal2/RTNameCloudTest.class.st deleted file mode 100644 index f13abd89a..000000000 --- a/src/Roassal2/RTNameCloudTest.class.st +++ /dev/null @@ -1,21 +0,0 @@ -Class { - #name : #RTNameCloudTest, - #superclass : #RTTest, - #category : #'Roassal2-Builder-NameCloud' -} - -{ #category : #tests } -RTNameCloudTest >> testBasic [ - | b | - b := RTNameCloud new. - b addString: 'open - - | v shape | - v := RTView new. - shape := RTLabel new height: [ :assoc | assoc value ]; text: #key. - v addAll: (shape elementsOn: table associations). - RTFlowLayout on: v elements. - v open'. - b build. - self assert: b view numberOfElements > 0. -] diff --git a/src/Roassal2/RTNeoPlugin.class.st b/src/Roassal2/RTNeoPlugin.class.st deleted file mode 100644 index 5077fbef9..000000000 --- a/src/Roassal2/RTNeoPlugin.class.st +++ /dev/null @@ -1,34 +0,0 @@ -Class { - #name : #RTNeoPlugin, - #superclass : #RTAbstractPlugin, - #category : #'Roassal2-Plugins' -} - -{ #category : #hooks } -RTNeoPlugin >> description [ - ^ 'Neo offers a JSON and CSV parsers. Both parsers are highly stable, fast, and well supported.' -] - -{ #category : #hooks } -RTNeoPlugin >> execute [ - Gofer new - smalltalkhubUser: 'SvenVanCaekenberghe' project: 'Neo'; - package: 'ConfigurationOfNeoJSON'; load. - (Smalltalk at: #ConfigurationOfNeoJSON) loadBleedingEdge. - - Gofer new - smalltalkhubUser: 'SvenVanCaekenberghe' project: 'Neo'; - package: 'ConfigurationOfNeoCSV'; load. - (Smalltalk at: #ConfigurationOfNeoCSV) loadBleedingEdge. -] - -{ #category : #testing } -RTNeoPlugin >> isLoaded [ - ^ (RPackageOrganizer default includesPackageNamed: 'Neo-JSON-Core') and: [ RPackageOrganizer default includesPackageNamed: 'Neo-CSV-Core' ] - -] - -{ #category : #hooks } -RTNeoPlugin >> label [ - ^ 'Neo JSON and CSV parser' -] diff --git a/src/Roassal2/RTNest.class.st b/src/Roassal2/RTNest.class.st deleted file mode 100644 index 1c5292240..000000000 --- a/src/Roassal2/RTNest.class.st +++ /dev/null @@ -1,409 +0,0 @@ -" -A RTNest is about nesting a group of objects in an element, typically located below. - -Here is an example: --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -| v es | -v := RTView new. -es := RTBox elementsOn: RTShape withAllSubclasses. - -v addAll: es. - -RTNest new - for: es - add: [ :group :model | - group addAll: ((RTBox new color: Color blue) elementsOn: model rtmethods). - RTGridLayout on: group. - ]. - -RTFlowLayout new on: es. -es @ RTPopup @ RTDraggable. -v --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -" -Class { - #name : #RTNest, - #superclass : #RTObject, - #instVars : [ - 'layout', - 'padding', - 'behavior', - 'view', - 'labelShape' - ], - #category : #'Roassal2-Core' -} - -{ #category : #'setting nesting behavior' } -RTNest >> behavior: aBehavior [ - behavior := aBehavior -] - -{ #category : #public } -RTNest >> centerOn: backElement elements: elements [ - "Public method. This method does the following actions: - - resize the backElement to encompasse all the elements - - translate all the elements on top of backElement - - perform a layout if one is set" - - self centerOnTrachelShape: backElement trachelShape elements: elements -] - -{ #category : #public } -RTNest >> centerOnTrachelShape: trachelShape elements: elements [ - "Public method. This method does the following actions: - - resize the backElement to encompasse all the elements - - translate all the elements on top of backElement - - perform a layout if one is set" - - behavior centerOnTrachelShape: trachelShape elements: elements asGroup. - -] - -{ #category : #utility } -RTNest >> doLayoutIfNecessaryOn: elements [ - layout ifNotNil: [ layout on: elements ] -] - -{ #category : #utility } -RTNest >> encompassingRectangleOf: elements [ - ^ elements asGroup encompassingRectangle - -] - -{ #category : #public } -RTNest >> for: collectionOfElements add: aTwoArgBlock [ - "aTwoArgBlock follows [ :group :model | ... ]" - "Return all the elements added by the argument block" - - " - Example: - | v es | - v := RTView new. - es := RTBox elementsOn: RTShape withAllSubclasses. - v addAll: es. - RTNest new - for: es - add: [ :group :model | - group - addAll: ((RTBox new color: Color blue) elementsOn: model rtmethods). - RTGridLayout on: group ]. - RTFlowLayout new on: es. - es @ RTPopup @ RTDraggable. - ^ v - " - - | allAddedObject | - allAddedObject := RTGroup new. - collectionOfElements do: [ :element | - | g | - g := RTGroup new. - aTwoArgBlock value: g value: element model. - self doLayoutIfNecessaryOn: g. - self on: element nest: g. - - "Add the elements in the view. If no view has been set, it try to use the view of the elements" - view isNil - ifTrue: [ - element view ifNil: [ self error: 'Please, specify in RTNest a view to which elements have to be added in using #view:.' ]. - element view addAll: g ] - ifFalse: [ view addAll: g ]. - allAddedObject addAll: g - ]. - ^ allAddedObject -] - -{ #category : #public } -RTNest >> for: collectionOfElements inShape: aSymbol add: aTwoArgBlock [ - "aTwoArgBlock follows [ :group :model | ... ]" - "This methods assumes that each shape of collection of Elements is a multi composed shape" - - collectionOfElements do: [ :element | - | g | - g := RTGroup new. - aTwoArgBlock value: g value: element model. - self on: element inShape: aSymbol nest: g. - element view addAll: g. - ] -] - -{ #category : #public } -RTNest >> indexOfNonLabelShapeIn: backElement [ - | nonLabelShape | - nonLabelShape := backElement shape allShapes detect: [ :aShape | aShape class ~~ RTLabel ]. - ^ backElement shape allShapes indexOf: nonLabelShape -] - -{ #category : #initialization } -RTNest >> initialize [ - super initialize. - padding := 5. - self noBehavior -] - -{ #category : #public } -RTNest >> isCompositeAndHasLabel: backElement [ - ^ backElement shape class == RTCompositeShape - and: [ backElement shape allShapes anySatisfy: [ :aShape | aShape class == RTLabel ] ] -] - -{ #category : #accessing } -RTNest >> layout [ - "Return the layout object used to layout the element before doing the nesting" - ^ layout -] - -{ #category : #accessing } -RTNest >> layout: aLayout [ - "Set a layout that is used before doing the nesting" - layout := aLayout -] - -{ #category : #'OBSOLETE - to be removed' } -RTNest >> makeElements: elements draggableBy: backElement [ - ^ self makeElements: elements draggableByTrachelShape: backElement trachelShape - -] - -{ #category : #'OBSOLETE - to be removed' } -RTNest >> makeElements: elements draggableByTrachelShape: trachelShape [ - | callback | - callback := TRTranslationCallback block: [ :shape :step | elements do: [ :e | e translateBy: step ] ]. - trachelShape addCallback: callback -] - -{ #category : #utility } -RTNest >> makeElements: elements resizable: backElement [ - "If an element of elements is resized, then the backElement should be resized as well. - " - | callback1 callback2 | - callback1 := TRExtentCallback block: [ :shape :newsize | - self resizeWithoutRecursion: backElement for: elements - ]. - callback2 := TRTranslationCallback block: [ :shape :newsize | - self resizeWithoutRecursion: backElement for: elements - ]. - elements do: [ :e | e trachelShape addCallback: callback1 ; addCallback: callback2 ] -] - -{ #category : #utility } -RTNest >> makeElements: elements resizableWithoutRecursion: backElement [ - "If an element of elements is resized, then the backElement should be resized as well. - " - | callback1 callback2 | - callback1 := TRExtentCallback block: [ :shape :newsize | - self resizeWithoutRecursion: backElement for: elements - ]. - callback2 := TRTranslationCallback block: [ :shape :newsize | - self resizeWithoutRecursion: backElement for: elements - ]. - elements do: [ :e | e trachelShape addCallback: callback1 ; addCallback: callback2 ] -] - -{ #category : #utility } -RTNest >> mark: backElement with: elements [ - (backElement hasAttribute: #nestedElements) - ifFalse: [ backElement attributeAt: #nestedElements put: RTGroup new ]. - (backElement attributeAt: #nestedElements) addAll: elements. - elements do: [ :anElement | anElement attributeAt: #parentElement put: backElement ] -] - -{ #category : #'setting nesting behavior' } -RTNest >> noBehavior [ - self behavior: (RTNoBehavior instance) -] - -{ #category : #public } -RTNest >> on: element inShape: aSymbol nest: elements [ - "public method" - "add nested elements, in a particular shape of the composed shape of the element. Assume that the shape of element is composed" - "aSymbol could be #first, #second, #third, #fourth" - - "We assume that the roassal shape of element is composed" - ^ self on: element inShape: aSymbol nest: elements layout: #vertical -] - -{ #category : #public } -RTNest >> on: element inShape: aSymbol nest: elements layout: aSymbolLayout [ - "public method" - "aSymbol could be #first, #second, #third, #fourth - - aSymbolLayout is either #vertical or #horizontal" - - self doLayoutIfNecessaryOn: elements. - - "We assume that the roassal shape of element is composed" - behavior on: (aSymbol rtValue: element trachelShape shapes) setNested: elements asGroup. - "self onTrachelShape: (aSymbol rtValue: element trachelShape shapes) nest: elements." - - aSymbolLayout rtValue: element trachelShape. - element trachelShape relayout. - self mark: element with: elements -] - -{ #category : #public } -RTNest >> on: backElement nest: elements [ - "public method" - - "backElement is the elements on which elements are layout-ed" - - "- position the elements above backElement. - - resize backElement to encapsulate the elements - - perform a layout of the elements if a layout has been set - - make the inner elements draggable" - - "We check if the shape of backElement is a composite shape. nested elements should not be on the Label. We manually consider this situation since it is recurrent" - - | indexOfNonLabel | - self - assert: [ elements isKindOf: Collection ] - description: 'Need to provide a collection as second argument'. - self - assert: [ backElement isKindOf: RTElement ] - description: 'Need to provide an element as first argument'. - (self isCompositeAndHasLabel: backElement) - ifTrue: [ indexOfNonLabel := self indexOfNonLabelShapeIn: backElement. - ^ self - on: backElement - inShape: [ :array | array at: indexOfNonLabel ] - nest: elements ]. - self doLayoutIfNecessaryOn: elements. - self on: backElement simplyNest: elements. - self mark: backElement with: elements -] - -{ #category : #public } -RTNest >> on: backElement nestRootOf: elements [ - "public method" - - "backElement is the elements on which elements are layout-ed" - - "elements is a collection of elements. These elements may have relation between them (e.g., nesting). This method is useful for example to nest elements that have been produced by RTMondrian" - - "- position the elements above backElement. - - resize backElement to encapsulate the elements - - perform a layout of the elements if a layout has been set - - make the inner elements draggable" - - "We check if the shape of backElement is a composite shape. nested elements should not be on the Label. We manually consider this situation since it is recurrent" - - ^ self on: backElement nest: (elements select: [ :e | e parentElement isNil ]) -] - -{ #category : #public } -RTNest >> on: backElement simplyNest: elements [ - behavior on: backElement setNested: elements asGroup -] - -{ #category : #'OBSOLETE - to be removed' } -RTNest >> onResizable: backElement nest: elements [ - "PROBABLY THIS METHOD HAS TO BE DELETED" - - "public method" - "backElement is the elements on which elements are layout-ed" - "- position the elements above backElement. - - resize backElement to encapsulate the elements - - perform a layout of the elements if a layout has been set - - make the inner elements draggable" - - layout ifNotNil: [ layout on: elements ]. - self centerOn: backElement elements: elements. - self makeElements: elements draggableBy: backElement. -" self makeElements: elements transformable: backElement." - self makeElements: elements resizableWithoutRecursion: backElement. - -] - -{ #category : #'OBSOLETE - to be removed' } -RTNest >> onTrachelShape: trachelShape nest: elements [ - "public method" - "backElement is the elements on which elements are layout-ed" - "- position the elements above backElement. - - resize backElement to encapsulate the elements - - perform a layout of the elements if a layout has been set - - make the inner elements draggable" - - self doLayoutIfNecessaryOn: elements. - behavior on: trachelShape setNested: elements asGroup - - "self centerOnTrachelShape: trachelShape elements: elements. - self makeElements: elements draggableByTrachelShape: trachelShape." - -] - -{ #category : #accessing } -RTNest >> padding [ - ^ padding -] - -{ #category : #accessing } -RTNest >> padding: aNumber [ - padding := aNumber -] - -{ #category : #'OBSOLETE - to be removed' } -RTNest >> resize: backElement bounds: encompassingRectangle [ - "it translates backElement, but does not trigger events." - | newRec | - newRec := (encompassingRectangle topLeft - (padding @ padding)) extent: - ((encompassingRectangle width + (padding * 2)) @ - (encompassingRectangle height + (padding * 2))). - - backElement trachelShape - extent: (encompassingRectangle width + (padding * 2)) @ (encompassingRectangle height + (padding * 2)). - backElement translateTo: encompassingRectangle center -] - -{ #category : #'OBSOLETE - to be removed' } -RTNest >> resize: backElement for: elements [ - | encompassingRectangle | - encompassingRectangle := self encompassingRectangleOf: elements. - self resize: backElement bounds: encompassingRectangle. - -] - -{ #category : #utility } -RTNest >> resizeWithoutRecursion: backElement bounds: encompassingRectangle [ - "it translates backElement, but does not trigger events." - | newRec | - newRec := (encompassingRectangle topLeft - (padding @ padding)) extent: - ((encompassingRectangle width + (padding * 2)) @ - (encompassingRectangle height + (padding * 2))). - - backElement trachelShape - extent: (encompassingRectangle width + (padding * 2)) @ (encompassingRectangle height + (padding * 2)). - backElement trachelShape doWithoutCallbacks: [ backElement translateTo: encompassingRectangle center ] -] - -{ #category : #utility } -RTNest >> resizeWithoutRecursion: backElement for: elements [ - | encompassingRectangle | - encompassingRectangle := self encompassingRectangleOf: elements. - self resizeWithoutRecursion: backElement bounds: encompassingRectangle. - -] - -{ #category : #'setting nesting behavior' } -RTNest >> stretchable [ - "It makes a scaling/zooming effect. - If you change backElement's extent, it changes proportionaly extent and position of nested elements. - So the overall image --- composition of backElement and elements --- does not change. - It only zoom in/out the overall image." - self behavior: (RTStretchBehavior new) -] - -{ #category : #'setting nesting behavior' } -RTNest >> topLeft [ - self behavior: (RTTopLeftBehavior new) -] - -{ #category : #accessing } -RTNest >> view [ - ^ view -] - -{ #category : #accessing } -RTNest >> view: aRTView [ - "Set the view in which elements have to be added in for:add:" - view := aRTView -] diff --git a/src/Roassal2/RTNestTest.class.st b/src/Roassal2/RTNestTest.class.st deleted file mode 100644 index ae606c7c1..000000000 --- a/src/Roassal2/RTNestTest.class.st +++ /dev/null @@ -1,701 +0,0 @@ -Class { - #name : #RTNestTest, - #superclass : #RTTest, - #category : #'Roassal2-Core-Tests' -} - -{ #category : #'composed shape' } -RTNestTest >> testAutomaticLayout [ - - | v lbl box cs e bigElement bigElement2 | - v := RTView new. - - lbl := RTBox new color: Color pink. - box := RTBox new. - cs := RTCompositeShape new. - cs add: lbl. - cs add: box. - cs vertical. - - e := cs element. - v add: e. - - bigElement := ((RTBox new size: 20; color: Color red) element). - bigElement2 := ((RTBox new size: 20; color: Color red) element). - v add: bigElement. - v add: bigElement2. - - RTNest new - layout: RTFlowLayout new; - on: e nest: (Array with: bigElement with: bigElement2). - - self assert: (bigElement position closeTo: (-12.0@2)). - self assert: (bigElement2 position closeTo: (13.0@2)). -] - -{ #category : #tests } -RTNestTest >> testBasic [ - | view el el2 | - view := RTView new. - el := (RTBox new color: Color red) element. - el2 := RTBox element. - el translateTo: 100 @ 50. - RTNest - new - layout: RTGridLayout new; - on: el nest: (Array with: el2). - - view add: el. - view add: el2. - - self assert: el position asIntegerPoint = (100 @ 50). - self assert: el2 position asIntegerPoint = (100 @ 50). - - self assert: el trachelShape width = 15. - self assert: el trachelShape height = 15. - - self assert: el2 trachelShape width = 5. - self assert: el2 trachelShape height = 5. -] - -{ #category : #tests } -RTNestTest >> testChangeExtent [ - | view el innerElement1 innerElement2 - elExtent elPosition extent1 extent2 position1 position2 ratio | - view := RTView new. - el := (RTBox new color: Color red) element. - innerElement1 := (RTBox new size: 10) element. - innerElement2 := (RTBox new size: 20) element. - el translateTo: 100 @ 50. - RTNest new - stretchable; - layout: RTGridLayout new; - on: el nest: (Array with: innerElement1 with: innerElement2). - view add: el; add: innerElement1; add: innerElement2. - elExtent := el extent. - elPosition := el position. - extent1 := innerElement1 extent. - extent2 := innerElement2 extent. - position1 := innerElement1 position. - position2 := innerElement2 position. - ratio := 0.5. - - el extent: el extent * ratio. - self assert: el position equals: (100 @ 50). - self assert: el extent equals: elExtent * ratio. - - self assert: innerElement1 extent equals: extent1 * ratio. - self assert: innerElement2 extent equals: extent2 * ratio. - self assert: innerElement1 position equals: elPosition + ((position1 - elPosition) * ratio). - self assert: innerElement2 position equals: elPosition + ((position2 - elPosition) * ratio). -] - -{ #category : #tests } -RTNestTest >> testDifferentSizes [ - | view el innerElement1 innerElement2 | - view := RTView new. - el := (RTBox new color: Color red) element. - innerElement1 := (RTBox new size: 10) element. - innerElement2 := (RTBox new size: 20) element. - el translateTo: 100 @ 50. - RTNest - new - layout: RTGridLayout new; - on: el nest: (RTGroup with: innerElement1 with: innerElement2). - - view add: el. - view add: innerElement1. - view add: innerElement2. - - self assert: el position = (100 @ 50). - self assert: el trachelShape width = 45. - self assert: el trachelShape height = 30. - - self assert: innerElement1 position y = 45. - self assert: el position y = 50. - self assert: innerElement2 position y = 50. - self assert: 50 = el position y. -] - -{ #category : #'composed shape' } -RTNestTest >> testDragAndDrop [ - | v shape es outer inner | - v := RTView new. - shape := RTCompositeShape new. - shape add: RTBox new. - shape add: RTBox new. - - es := shape elementsOn: #(1). - v addAll: es. - outer := es anyOne. - - RTNest new - for: es - inShape: #first - add: [ :group :model | - inner := (RTBox new color: Color blue) elementOn: 'hello'. - group add: inner ]. - - self assert: outer position equals: 0 @ 2. - self assert: inner position equals: 0 @ 0. - - outer translateBy: 5 @ 5. - self assert: outer position equals: 5 @ 7.0. - self assert: inner position equals: 5 @ 5. - - - -] - -{ #category : #'composed shape' } -RTNestTest >> testDragAndDrop2 [ - | v shape e inner | - v := RTView new. - shape := RTBox new. - - e := shape element. - - inner := (RTBox new color: Color blue) element. - RTNest new on: e nest: (RTGroup with: inner). - - self assert: e position equals: 0 @ 0. - self assert: inner position equals: 0 @ 0. - - e translateBy: 5 @ 5. - self assert: e position equals: 5 @ 5. - self assert: inner position equals: 5 @ 5 -] - -{ #category : #'composed shape' } -RTNestTest >> testDragAndDropWithoutComposite [ - | v shape es outer inner | - v := RTView new. - shape := RTBox new. - - es := shape elementsOn: #(1). - v addAll: es. - outer := es anyOne. - - RTNest new - for: es - add: [ :group :model | - inner := (RTBox new color: Color blue) elementOn: 'hello'. - group add: inner ]. - - self assert: outer position equals: 0 @ 0. - self assert: inner position equals: 0 @ 0. - - outer translateBy: 5 @ 5. - self assert: outer position equals: 5 @ 5. - self assert: inner position equals: 5 @ 5. - - - -] - -{ #category : #encompassing } -RTNestTest >> testEncompassingRectangle [ - - | e1 e2 r | - e1 := (RTBox new size: 10) element. - e2 := (RTBox new size: 30) element. - - r := RTNest new encompassingRectangleOf: (Array with: e1 with: e2). - self assert: r = ((-15 @ -15) extent: (30 @ 30)) -] - -{ #category : #encompassing } -RTNestTest >> testEncompassingRectangle2 [ - - | e1 e2 r | - e1 := (RTBox new size: 10) element. - e2 := (RTBox new size: 30) element. - e2 translateTo: (100 @ 80). - r := RTNest new encompassingRectangleOf: (Array with: e1 with: e2). - self assert: r = ((-5 @ -5) corner: (115 @ 95)) -] - -{ #category : #tests } -RTNestTest >> testForAdd [ - - | v es positions | - v := RTView new. - es := RTBox elementsOn: (1 to: 5). - v addAll: es. - es @ RTDraggable. - - RTNest new - for: es - add: [ :group :model | - group addAll: ((RTBox new color: Color blue) elementsOn: (1 to: model)). - RTGridLayout on: group. - ]. - - RTGridLayout on: es. - - positions := -((Array new: 20) at: 1 put: ((7.5@7.5)); at: 2 put: ((32.5@7.5)); at: 3 put: ((62.5@12.5)); at: 4 put: ((12.5@42.5)); at: 5 put: ((47.5@42.5)); at: 6 put: ((8.0@8.0)); at: 7 put: ((28.0@8.0)); at: 8 put: ((38.0@8.0)); at: 9 put: ((58.0@8.0)); at: 10 put: ((68.0@8.0)); at: 11 put: ((58.0@18.0)); at: 12 put: ((8.0@38.0)); at: 13 put: ((18.0@38.0)); at: 14 put: ((8.0@48.0)); at: 15 put: ((18.0@48.0)); at: 16 put: ((38.0@38.0)); at: 17 put: ((48.0@38.0)); at: 18 put: ((58.0@38.0)); at: 19 put: ((38.0@48.0)); at: 20 put: ((48.0@48.0)); yourself). - self assert: (v elements collect: #position) asArray equals: positions -] - -{ #category : #tests } -RTNestTest >> testInner [ - - | view host el1 el2 edge | - view := RTView new. - host := (RTBox new color: (Color purple alpha: 0.5)) element. - el1 := RTBox element. - el2 := RTBox element. - edge := RTLine edgeFrom: el1 to: el2. - view add: host; add: el1; add: el2; add: edge. - - RTTreeLayout new on: (Array with: el1 with: el2) edges: view edges. - RTNest new on: host nest: (Array with: el1 with: el2). - - self assert: el1 position equals: (0.5@ (-25/2)). - self assert: el2 position equals: (0.5@(25/2)). - self assert: host position equals: (0@0). -] - -{ #category : #'composed shape' } -RTNestTest >> testInnerElement1 [ - - | v shape e innerBox innerElement | - v := RTView new. - - shape := RTCompositeShape new. - shape add: (RTBox new size: 20; color: (Color green alpha: 0.3)). - shape add: (RTBox new size: 20; color: (Color blue alpha: 0.3)) translateBy: 0 @ 20. - - e := shape elementOn: 1. - v add: e. - - innerBox := RTBox new size: 10; color: (Color red alpha: 0.9). - innerElement := innerBox elementOn: 2. - v add: innerElement. - - RTNest new - onTrachelShape: e trachelShape shapes second nest: (Array with: innerElement). - - self assert: innerElement position equals: 0 @ 20 -] - -{ #category : #'composed shape' } -RTNestTest >> testInnerElement2 [ - - | v shape e innerBox innerElements | - v := RTView new. - - shape := RTCompositeShape new. - shape add: (RTBox new size: 20; color: (Color green alpha: 0.3)). - shape add: (RTBox new size: 20; color: (Color blue alpha: 0.3)) translateBy: 0 @ 20. - - e := shape elementOn: 1. - v add: e. - - innerBox := RTBox new size: 10; color: (Color red alpha: 0.9). - innerElements := innerBox elementsOn: #(2 3). - v addAll: innerElements. - RTGridLayout on: innerElements. - - RTNest new - onTrachelShape: e trachelShape shapes second nest: innerElements. - - self assert: (innerElements collect: #position) asArray equals: (Array with: (-7.0@20.0) with: (8.0@20.0)) -] - -{ #category : #'composed shape' } -RTNestTest >> testInnerElement3 [ - - | v shape e innerBox innerElements | - - v := RTView new. - - shape := RTCompositeShape new. - shape add: (RTBox new size: 20; color: (Color green alpha: 0.3)). - shape add: (RTBox new size: 20; color: (Color blue alpha: 0.3)) translateBy: 0 @ 20. - - e := shape elementOn: 1. - - innerBox := RTBox new size: 10; color: (Color red alpha: 0.9). - innerElements := innerBox elementsOn: #(2 3). - - RTVerticalLineLayout on: innerElements. - - RTNest new - onTrachelShape: e trachelShape shapes second nest: innerElements. - - e trachelShape vertical. - - v add: e. - v addAll: innerElements. - - self assert: (innerElements collect: #position) asArray equals: (Array with: (0 @ 20.0) with: (0 @ 40.0)) -] - -{ #category : #'composed shape' } -RTNestTest >> testInnerElement4 [ - - | v shape es | - v := RTView new. - v @ RTDraggableView. - - shape := RTCompositeShape new. - shape add: RTBox new. - shape vertical. - - es := shape elementsOn: #(1 2). - v addAll: es. - - RTNest new - layout: RTGridLayout new; - for: es inShape: #first add: [ :group :model | - group addAll: ((RTBox new color: Color blue) elementsOn: (1 to: model)). - ]. - - RTHorizontalLineLayout on: es. - es @ RTDraggable. - - self assert: es first position ~= es second position -] - -{ #category : #'composed shape' } -RTNestTest >> testInnerElement5 [ - - | v shape es | - v := RTView new. - v @ RTDraggableView. - - shape := RTCompositeShape new. - shape add: RTBox new. - shape vertical. - - es := shape elementsOn: #(1 2). - v addAll: es. - - RTNest new - layout: RTGridLayout new; - for: es inShape: #first add: [ :group :model | - group addAll: ((RTBox new color: Color blue) elementsOn: (1 to: model)). - ]. - - es first translateTo: 25 @ -20. - self assert: es first position equals: 25 @ -20 -] - -{ #category : #'composed shape' } -RTNestTest >> testLabelInCompositeShape [ - - | v lbl box cs e bigElement p1 p2 | - v := RTView new. - - lbl := RTLabel new text: ''. - box := RTBox new. - cs := RTCompositeShape new. - cs add: lbl. - cs add: box. - cs vertical. - - e := cs element. - v add: e. - - RTNest new - for: (Array with: e) add: [ :group :model | - bigElement := ((RTBox new size: 20; color: Color red) element). - group add: bigElement. ]. - - self assert: bigElement position ~= e position. - p1 := bigElement trachelShape position. - p2 := e trachelShape shapes second position. - self assert: ((p1 = p2) or: [ (p1 - p2) abs <= (0.5@0.5) ]). -] - -{ #category : #'composed shape' } -RTNestTest >> testLabelNotInCompositeShape [ - - | v box e bigElement | - v := RTView new. - - box := RTBox new. - e := box element. - v add: e. - - RTNest new - for: (Array with: e) add: [ :group :model | - bigElement := ((RTBox new size: 20; color: Color red) element). - group add: bigElement ]. - - self assert: bigElement position equals: e position. - self assert: bigElement trachelShape position equals: e trachelShape position. -] - -{ #category : #'composed shape' } -RTNestTest >> testLayout [ - - | v lbl box cs e bigElement bigElement2 | - v := RTView new. - - lbl := RTBox new color: Color pink. - box := RTBox new. - cs := RTCompositeShape new. - cs add: lbl. - cs add: box. - cs vertical. - - e := cs element. - v add: e. - - bigElement := ((RTBox new size: 20; color: Color red) element). - bigElement2 := ((RTBox new size: 20; color: Color red) element). - v add: bigElement. - v add: bigElement2. - - RTFlowLayout on: (Array with: bigElement with: bigElement2). - RTNest new - on: e nest: (Array with: bigElement with: bigElement2). - - self assert: bigElement position equals: (-12.0@2). - self assert: bigElement2 position equals: (13.0@2). -] - -{ #category : #'multi line' } -RTNestTest >> testMultiline [ - - - | v b e | - v := RTView new. - b := (RTBox new color: (Color red alpha: 0.3)) element. - e := RTLabel elementOn: 'Hello - World - Bonjour - Blah - '. - v add: b. - v add: e. - - RTNest new on: b nest: (Array with: e). - - self assert: (RTNest new encompassingRectangleOf: (Array with: e)) extent equals: e encompassingRectangle extent. - - "This has to be fixed." - "self assert: (b encompassingRectangle extent) equals: (e encompassingRectangle extent + (10 @ 10)) " -] - -{ #category : #'multi line' } -RTNestTest >> testMultiline02 [ - - - | v b e | - v := RTView new. - b := (RTBox new color: (Color red alpha: 0.3)) element. - e := RTLabel elementOn: 'Hello - World - Bonjour - Blah - '. - v add: b. - v add: e. - - RTNest new on: b nest: (Array with: e). - - self assert: (RTNest new encompassingRectangleOf: (Array with: e)) extent equals: e encompassingRectangle extent. - - "This has to be fixed" - "self assert: (b encompassingRectangle extent) equals: (e encompassingRectangle extent + (10 @ 10))" -] - -{ #category : #'multi line' } -RTNestTest >> testMultiline03 [ - - - | v b e | - v := RTView new. - b := (RTBox new color: (Color red alpha: 0.3)) element. - e := RTLabel elementOn: 'Hello - World - Bonjour - Blah - '. - - RTNest new on: b nest: (RTGroup with: e). - - self assert: (RTNest new encompassingRectangleOf: (Array with: e)) extent equals: e encompassingRectangle extent. - "self assert: (b encompassingRectangle extent) equals: (e encompassingRectangle extent + (10 @ 10)) " -] - -{ #category : #'multi line' } -RTNestTest >> testMultiline04 [ - - - | v b e | - v := RTView new. - b := (RTBox new color: (Color red alpha: 0.3)) element. - e := RTLabel elementOn: 'Hello - World - Bonjour - Blah - '. - - RTNest new on: b nest: (Array with: e). - v add: b. - v add: e. - - self assert: (RTNest new encompassingRectangleOf: (Array with: e)) extent equals: e encompassingRectangle extent. - "self assert: (b encompassingRectangle extent) equals: (e encompassingRectangle extent + (10 @ 10)) " -] - -{ #category : #'tests - nesting' } -RTNestTest >> testNestingComposite [ - | v element compShape elements ellipses | - v := RTView new. - - element := RTBox element. - v add: element. - - compShape := RTCompositeShape new. - compShape - add: (RTBox new - color: Color blue; - height: 0); - add: ((RTEllipse new - size: 25; - color: Color red)); - vertical. -" compShape := (RTEllipse new - size: 25; - color: Color red)." - elements := compShape elementsOn: (1 to: 2). - - RTNest new for: (Array with: element) add: [ :group :model | - group addAll: elements. - RTGridLayout on: group.]. - - "Testing" - ellipses := v canvas shapes select: [ :t | t class == TREllipseShape ]. - self assert: ellipses size equals: 2. - self assert: (ellipses collect: [ :s | s position asIntegerPoint ]) equals: (Array with: (-15@0) with: (15@0)). -] - -{ #category : #tests } -RTNestTest >> testResizableInnerNode [ - "If we resize an inner node, the outter node should be resized" - | outter inner | - outter := RTBox element. - inner := (RTBox new color: Color blue) element. - - self deny: inner trachelShape hasCallback. - self deny: outter trachelShape hasCallback. - RTNest new - onResizable: outter nest: (Array with: inner). -" self deny: outter trachelShape hasCallback." - self assert: inner trachelShape hasCallback. - - self assert: outter encompassingRectangle extent = (15 @ 15). - self assert: inner encompassingRectangle extent = (5 @ 5). - - inner extent: 10 @ 10. - self assert: inner encompassingRectangle extent = (10 @ 10). - self assert: outter encompassingRectangle extent = (20 @ 20). - - -] - -{ #category : #tests } -RTNestTest >> testResizableInnerNodeAndTranslateInnerNode [ - "If we resize an inner node, the outter node should be resized" - | outter inner | - outter := RTBox element. - inner := (RTBox new color: Color blue) element. - - self deny: inner trachelShape hasCallback. - self deny: outter trachelShape hasCallback. - RTNest new - onResizable: outter nest: (Array with: inner). - - self assert: inner trachelShape hasCallback. - - self assert: outter encompassingRectangle extent = (15 @ 15). - self assert: inner encompassingRectangle extent = (5 @ 5). - - inner translateBy: 5 @ 5. - self assert: inner encompassingRectangle extent = (5 @ 5). - self assert: outter encompassingRectangle extent = (15 @ 15). - - -] - -{ #category : #tests } -RTNestTest >> testSimpleExample [ - - | view el shape inner | - view := RTView new. - el := (RTBox new color: (Color purple alpha: 0.3)) element. - - shape := RTBox new color: (Color purple alpha: 0.3). - inner := (shape elementOn: #inner). - - view add: el. - view add: inner. - - RTNest - new - layout: RTGridLayout new; - on: el nest: (RTGroup with: inner). - - self assert: el position = (0 @ 0). - self assert: inner position = ((1 / 2) @ (1 / 2)). - - el translateTo: 100 @ 50. - self assert: el position = (100 @ 50). - self assert: inner position = ((201/2)@(101/2)). - - self assert: el trachelShape hasCallback. - - "This may change later" - self deny: inner trachelShape hasCallback. - -] - -{ #category : #tests } -RTNestTest >> testView [ - - | v n | - self assert: RTNest new view isNil. - - v := RTView new. - - n := RTNest new. - n view: v. - - self assert: n view equals: v -] - -{ #category : #tests } -RTNestTest >> testWithTwoInnerNodes [ - - | view el shape innerElement innerElement2 | - view := RTView new. - el := (RTBox new width: 80; height: 40; color: (Color purple alpha: 0.3)) element. - el translateTo: 100 @ 50. - shape := RTBox new color: (Color red alpha: 0.3). - innerElement := shape element. - innerElement2 := shape element. - - view add: innerElement. - view add: innerElement2. - - RTNest - new - layout: RTGridLayout new; - on: el nest: (Array with: innerElement with: innerElement2). - - view add: el. - - self assert: el position = (100 @ 50). - - self assert: el trachelShape width = 25. - self assert: el trachelShape height = 15. - - self assert: (innerElement2 position - innerElement position) = (10 @ 0) - -] diff --git a/src/Roassal2/RTNestingBehavior.class.st b/src/Roassal2/RTNestingBehavior.class.st deleted file mode 100644 index b8eb6a5f2..000000000 --- a/src/Roassal2/RTNestingBehavior.class.st +++ /dev/null @@ -1,100 +0,0 @@ -" -A RTNestingBehavior is the root of classes to describes behavior when nesting. - -Consider the following example: --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -| v es | -v := RTView new. -es := RTBox elementsOn: (1 to: 50). -back := (RTBox new color: Color red; size: 100) element. -v add: back. -v addAll: es. - -RTFlowLayout new on: es. - -RTNest new - behavior: (RTTopLeftBehavior new); - on: back nest: es. - -""behavior: (RTTopLeftBehavior new);"" - -es @ RTPopup @ RTDraggable. -v --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -" -Class { - #name : #RTNestingBehavior, - #superclass : #RTObject, - #category : #'Roassal2-Core' -} - -{ #category : #utility } -RTNestingBehavior >> centerOn: backElement elements: elements [ - "Public method. This method does the following actions: - - resize the backElement to encompasse all the elements - - translate all the elements on top of backElement - - perform a layout if one is set" - - self centerOnTrachelShape: backElement trachelShape elements: elements - -] - -{ #category : #utility } -RTNestingBehavior >> centerOnTrachelShape: trachelShape elements: elements [ - "Public method. This method does the following actions: - - resize the backElement to encompasse all the elements - - translate all the elements on top of backElement - - perform a layout if one is set" - | encompassingRectangle off padding | - padding := 5. - encompassingRectangle := elements encompassingRectangle. - - trachelShape extent: (encompassingRectangle width + (padding * 2)) @ (encompassingRectangle height + (padding * 2)). - - off := trachelShape encompassingRectangle center - encompassingRectangle center. - off := off asIntegerPoint. - elements do: [ :e | e translateBy: off ]. - -] - -{ #category : #utility } -RTNestingBehavior >> makeElements: elements draggableBy: backElement [ - ^ (backElement isKindOf: TRShape) - ifTrue: [ self makeElements: elements draggableByTrachelShape: backElement ] - ifFalse: [ self makeElements: elements draggableByTrachelShape: backElement trachelShape ] -] - -{ #category : #utility } -RTNestingBehavior >> makeElements: elements draggableByTrachelShape: trachelShape [ - | callback | - callback := TRTranslationCallback block: [ :shape :step | elements do: [ :e | e translateBy: step ] ]. - trachelShape addCallback: callback -] - -{ #category : #hooks } -RTNestingBehavior >> on: backElement setNested: elements [ - "Override this method to express a particular behavior" - self centerOn: backElement elements: elements. - self makeElements: elements draggableBy: backElement. - self resize: backElement for: elements -] - -{ #category : #utility } -RTNestingBehavior >> resize: backElement bounds: encompassingRectangle [ - "it translates backElement, but does not trigger events." - | newRec padding | - padding := 5. - newRec := (encompassingRectangle topLeft - (padding @ padding)) extent: - ((encompassingRectangle width + (padding * 2)) @ - (encompassingRectangle height + (padding * 2))). - - backElement - extent: (encompassingRectangle width + (padding * 2)) @ (encompassingRectangle height + (padding * 2)). - backElement translateTo: encompassingRectangle center -] - -{ #category : #utility } -RTNestingBehavior >> resize: backElement for: elements [ - self resize: backElement bounds: elements encompassingRectangle. - -] diff --git a/src/Roassal2/RTNetworkLatencyPlugin.class.st b/src/Roassal2/RTNetworkLatencyPlugin.class.st deleted file mode 100644 index 0305bb30c..000000000 --- a/src/Roassal2/RTNetworkLatencyPlugin.class.st +++ /dev/null @@ -1,34 +0,0 @@ -Class { - #name : #RTNetworkLatencyPlugin, - #superclass : #RTAbstractPlugin, - #category : #'Roassal2-Plugins' -} - -{ #category : #hooks } -RTNetworkLatencyPlugin >> description [ - ^ 'NetworkLatency shows the network latency of 145 cities, from 70 countries' -] - -{ #category : #hooks } -RTNetworkLatencyPlugin >> execute [ - Gofer new - smalltalkhubUser: 'merino' - project: 'NetworkLatency'; - package: 'ConfigurationOfNetworkLatency'; - load. - (Smalltalk at: #ConfigurationOfNetworkLatency) - loadDefault. - - (Smalltalk at: #NLVisualise) new open -] - -{ #category : #testing } -RTNetworkLatencyPlugin >> isLoaded [ - ^ RPackageOrganizer default includesPackageNamed: 'ConfigurationOfNetworkLatency' - -] - -{ #category : #hooks } -RTNetworkLatencyPlugin >> label [ - ^ 'Network Latency application' -] diff --git a/src/Roassal2/RTNiceStep.class.st b/src/Roassal2/RTNiceStep.class.st deleted file mode 100644 index 890c15d77..000000000 --- a/src/Roassal2/RTNiceStep.class.st +++ /dev/null @@ -1,55 +0,0 @@ -" -I am an utility class for RTNiceStepSizeGenerator>>next - -" -Class { - #name : #RTNiceStep, - #superclass : #RTObject, - #instVars : [ - 'stepSize', - 'offset', - 'i', - 'j' - ], - #category : #'Roassal2-Builder-Grapher-Labeling' -} - -{ #category : #accessing } -RTNiceStep >> i [ - ^ i -] - -{ #category : #accessing } -RTNiceStep >> i: aNumber [ - i := aNumber -] - -{ #category : #accessing } -RTNiceStep >> j [ - ^ j -] - -{ #category : #accessing } -RTNiceStep >> j: aNumber [ - j := aNumber -] - -{ #category : #accessing } -RTNiceStep >> offset [ - ^ offset -] - -{ #category : #accessing } -RTNiceStep >> offset: aNumber [ - offset := aNumber -] - -{ #category : #accessing } -RTNiceStep >> stepSize [ - ^ stepSize -] - -{ #category : #accessing } -RTNiceStep >> stepSize: aNumber [ - stepSize := aNumber -] diff --git a/src/Roassal2/RTNiceStepSizeGenerator.class.st b/src/Roassal2/RTNiceStepSizeGenerator.class.st deleted file mode 100644 index 2c3e88443..000000000 --- a/src/Roassal2/RTNiceStepSizeGenerator.class.st +++ /dev/null @@ -1,149 +0,0 @@ -" -Nice numbers are just step sizes and used for tick spacing. We will use only niceStep tick - spaces and place tick marks at multiples of tick spacing. - - References: - [1] An Extension of Wilkinson's Algorithm for positioning Tick Labels on Axes - (Justin Talbot, Sharon Lin, Pat Hanrahan) - [2] Nice Numbers for Graph Labels (Paul S. Heckbert, Graphic Gems I) -" -Class { - #name : #RTNiceStepSizeGenerator, - #superclass : #RTObject, - #instVars : [ - 'qvar', - 'i', - 'io', - 'j', - 'q', - 'ss', - 'ovar', - 'ssOffMap', - 'resetRequired', - 'base', - 'niceStep', - 'o' - ], - #category : #'Roassal2-Builder-Grapher-Labeling' -} - -{ #category : #accessing } -RTNiceStepSizeGenerator >> base [ - ^ base -] - -{ #category : #initialization } -RTNiceStepSizeGenerator >> initialize [ - "Generates a NiceNumberGenerator" - - super initialize. - niceStep := RTNiceStep new. - o := 0.0. - self setQ: #(1 5 2 2.5 4 3) base: 10. - -] - -{ #category : #private } -RTNiceStepSizeGenerator >> logB: a [ - ^ a ln / base ln -] - -{ #category : #public } -RTNiceStepSizeGenerator >> next [ - | oSet | - - niceStep - stepSize: ss; - offset: o; - i: i; "all output and calculations shouls add 1 because wilkinsons index start from 1" - j: j. - "Keep track of existing offsets and stepSizes to avoid duplicate returns of - step size, offset pairs" - (ssOffMap includesKey: ss) ifTrue: [ - oSet := ssOffMap at: ss. - [ | b | - b := oSet includes: o. - oSet add: o. - b not and: [io < (ovar size - 1)] ] whileTrue: [ - io := io +1. - niceStep offset: (o := ovar at: io +1 ). ]. - ] ifFalse: [ - oSet := Set new. - oSet add: o. - ssOffMap at: ss put: oSet. - ]. - io := io +1."position for next offset if it exists" - - "iterate for next call" - io < ovar size ifTrue: [ o := ovar at: io +1 ] - ifFalse: [ - io := 0. - i := (i< (qvar size - 1) ) ifTrue: [ i+1 ] ifFalse: [ 0 ] . - j := i = 0 ifTrue: [ j+1 ] ifFalse: [ j ]. - q := self qat: i. - ss := self stepSize: j q: q. - ovar := self offsets: j q: q. - o := ovar at: io + 1. - ]. - resetRequired := true. - ^ niceStep -] - -{ #category : #private } -RTNiceStepSizeGenerator >> offsets: tj q: tq [ - | offs | - offs := Array new: tj. - (0 to: tj-1) do: [ :ti | - offs at: ti+1 put: ((tq*ti) raisedTo: (self logB: tj*tq) ) ]. - ^ offs -] - -{ #category : #private } -RTNiceStepSizeGenerator >> qat: index [ - ^ qvar at: index + 1 -] - -{ #category : #accessing } -RTNiceStepSizeGenerator >> qvar [ - ^ qvar -] - -{ #category : #public } -RTNiceStepSizeGenerator >> reset [ - resetRequired ifFalse: [ ^ self ]. - i := 0. - io := 0. - j := 1. - q := self qat: i. - ss := self stepSize: j q: q. - ssOffMap := Dictionary new. - resetRequired := false. -] - -{ #category : #initialization } -RTNiceStepSizeGenerator >> setQ: anArray base: aNumber [ - "anArray: preference ordered list of niceStep step sizes. - The deault is set by the initializer selector - - aNumber: is a number of logs and exps usually changed together with Q" - qvar := anArray. - base := aNumber. - i := 0. - io := 0. - j := 1. - q := self qat: i. - ss := self stepSize: j q: q. - ovar := self offsets: j q: q. - ssOffMap := Dictionary new. - resetRequired := false. - - -] - -{ #category : #private } -RTNiceStepSizeGenerator >> stepSize: tj q: tq [ - - ^ tj * tq / (base raisedTo: (self logB: tj*tq ) floor ). - - -] diff --git a/src/Roassal2/RTNoBehavior.class.st b/src/Roassal2/RTNoBehavior.class.st deleted file mode 100644 index e22699d62..000000000 --- a/src/Roassal2/RTNoBehavior.class.st +++ /dev/null @@ -1,20 +0,0 @@ -Class { - #name : #RTNoBehavior, - #superclass : #RTNestingBehavior, - #classVars : [ - 'Instance' - ], - #category : #'Roassal2-Core' -} - -{ #category : #accessing } -RTNoBehavior class >> instance [ - Instance ifNil: [ Instance := self new ]. - ^ Instance -] - -{ #category : #hooks } -RTNoBehavior >> on: backElement setNested: elements [ - "Do nothing" - super on: backElement setNested: elements. -] diff --git a/src/Roassal2/RTNoDecorationShape.class.st b/src/Roassal2/RTNoDecorationShape.class.st deleted file mode 100644 index 7e150ada0..000000000 --- a/src/Roassal2/RTNoDecorationShape.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #RTNoDecorationShape, - #superclass : #RTLineDecorationShape, - #category : #'Roassal2-LineDecorations' -} - -{ #category : #hooks } -RTNoDecorationShape class >> trachelShapeClass [ - ^ TRNoDecoratorShape -] diff --git a/src/Roassal2/RTNoDictionary.class.st b/src/Roassal2/RTNoDictionary.class.st deleted file mode 100644 index 91a482e90..000000000 --- a/src/Roassal2/RTNoDictionary.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #RTNoDictionary, - #superclass : #RTNameCloudDictionary, - #category : #'Roassal2-Builder-NameCloud' -} - -{ #category : #hooks } -RTNoDictionary >> unnecessaryWords [ - ^ #() -] diff --git a/src/Roassal2/RTNoLayout.class.st b/src/Roassal2/RTNoLayout.class.st deleted file mode 100644 index 8536993b0..000000000 --- a/src/Roassal2/RTNoLayout.class.st +++ /dev/null @@ -1,44 +0,0 @@ -" -Here is an example: - -v := RTView new. - -es := (RTEllipse new color: Color blue trans; size: 20) elementsOn: (1 to: 30). -v addAll: es. -RTEdgeBuilder new - view: v; - elements: es; - connectFrom: [ :vv | vv // 2 ]. - -v addMenu: 'Remember!' callback: [ - positions := es collect: #position. - ]. - -v addMenu: 'Recall!' callback: [ - positions with: es do: [ :p :e | e translateTo: p ]. - v signalUpdate. - ]. - -v addMenu: 'Start layout!' callback: [ - force := RTForceBasedLayout new. - force initialLayout: RTNoLayout new. - animation := RTSpringLayoutStepping new. - animation layoutWithoutPreparing: force. - animation inView: v. -]. - -v addMenu: 'Stop layout!' callback: [ - animation stopAndRemove -]. -v -" -Class { - #name : #RTNoLayout, - #superclass : #RTLayout, - #category : #'Roassal2-Layouts' -} - -{ #category : #hook } -RTNoLayout >> doExecute: elements [ - "Do nothing" -] diff --git a/src/Roassal2/RTNoShape.class.st b/src/Roassal2/RTNoShape.class.st deleted file mode 100644 index d3e07ace7..000000000 --- a/src/Roassal2/RTNoShape.class.st +++ /dev/null @@ -1,49 +0,0 @@ -" -This implements the Null pattern for a Roassal shape. It is typically used for defaults. -" -Class { - #name : #RTNoShape, - #superclass : #RTShape, - #classInstVars : [ - 'instance' - ], - #category : #'Roassal2-Shapes' -} - -{ #category : #'as yet unclassified' } -RTNoShape class >> new [ - instance ifNil: [ instance := super new ]. - ^ instance -] - -{ #category : #'as yet unclassified' } -RTNoShape >> color: aValueOrAOneArgBlock [ - "do nothing" -] - -{ #category : #'as yet unclassified' } -RTNoShape >> colorElement: aValueOrAOneArgBlock [ - "do nothing" -] - -{ #category : #rendering } -RTNoShape >> heightFor: element [ - ^ 0 -] - -{ #category : #hooks } -RTNoShape >> trachelShapeFor: element [ - "We return a Trachel null shape because shapedObjects play directly with the low level shape" - - ^ TRNoShape new -] - -{ #category : #rendering } -RTNoShape >> updateFor: anElement trachelShape: trachelShape [ - "Do nothing" -] - -{ #category : #rendering } -RTNoShape >> widthFor: element [ - ^ 0 -] diff --git a/src/Roassal2/RTNopAnimation.class.st b/src/Roassal2/RTNopAnimation.class.st deleted file mode 100644 index 76c5caeb7..000000000 --- a/src/Roassal2/RTNopAnimation.class.st +++ /dev/null @@ -1,76 +0,0 @@ -" -A RTNopAnimation simply wait. This is useful to temporize -" -Class { - #name : #RTNopAnimation, - #superclass : #RTAnimation, - #instVars : [ - 'animatedValue', - 'trachelCanvas', - 'blockToExecute' - ], - #category : #'Roassal2-Animation' -} - -{ #category : #actions } -RTNopAnimation >> addedIn: aTrachelCanvas [ - trachelCanvas := aTrachelCanvas -] - -{ #category : #accessing } -RTNopAnimation >> blockToExecute [ - ^ blockToExecute -] - -{ #category : #accessing } -RTNopAnimation >> blockToExecute: aZeroArgBlock [ - "The argument block is executed at each screen refresh" - blockToExecute := aZeroArgBlock -] - -{ #category : #testing } -RTNopAnimation >> hasCompleted [ - ^ animatedValue hasCompleted -] - -{ #category : #initialization } -RTNopAnimation >> initialize [ - super initialize. - blockToExecute := [ ] -] - -{ #category : #actions } -RTNopAnimation >> refresh [ - animatedValue value. - trachelCanvas signalUpdate -] - -{ #category : #actions } -RTNopAnimation >> repeat [ - animatedValue timer repeat. -] - -{ #category : #'waiting-specific' } -RTNopAnimation >> start [ - animatedValue start. - trachelCanvas signalUpdate -] - -{ #category : #'waiting-specific' } -RTNopAnimation >> waitFor: seconds [ - animatedValue := TRVIAnimatedValue new - evaluator: [ :t | blockToExecute value ]; - timer: (TRVITimer new cycleLength: seconds); - yourself. - -] - -{ #category : #'waiting-specific' } -RTNopAnimation >> waitFor: seconds after: aBlock [ - animatedValue := TRVIAnimatedValue new - evaluator: [ :t | ]; - finishCallback: aBlock; - timer: (TRVITimer new cycleLength: seconds); - yourself. - -] diff --git a/src/Roassal2/RTNormalizerTest.class.st b/src/Roassal2/RTNormalizerTest.class.st deleted file mode 100644 index 60698999f..000000000 --- a/src/Roassal2/RTNormalizerTest.class.st +++ /dev/null @@ -1,81 +0,0 @@ -" -A RONormalizerTest is xxxxxxxxx. - -" -Class { - #name : #RTNormalizerTest, - #superclass : #RTTest, - #category : #'Roassal2-ColorNormalizer-Tests' -} - -{ #category : #'gray color' } -RTNormalizerTest >> testGray [ - - | n es v c1 c2 | - v := RTView new. - es := RTBox elementsOn: (0 to: 255). - v addAll: es. - - n := RTGrayLinearColor new. - n command: #yourself. - n scope: (0 to: 255). - - self assert: (n rtValue: es first model) = Color white. - c1 := n rtValue: (es at: 100) model. - c2 := Color r: 0.612 g: 0.612 b: 0.612 alpha: 1.0. - self assert: (c1 red closeTo: c2 red). - self assert: (c1 green closeTo: c2 green). - self assert: (c1 blue closeTo: c2 blue). -] - -{ #category : #multicolor } -RTNormalizerTest >> testMultiColor [ - - | n | - n := RTMultiLinearColor new - colors: (Array with: Color white with: Color black). - self assert: (n level: 0) = Color white. - self assert: (n level: 1.0) = Color black. - self assert: (n level: 0.5) = (Color r: 0.5 g: 0.5 b: 0.5). -] - -{ #category : #multicolor } -RTNormalizerTest >> testMultiColor2 [ - - | n | - n := RTMultiLinearColor new - colors: (Array with: Color white with: Color red with: Color black). - self assert: (n level: 0) = Color white. - self assert: (n level: 1.0) = Color black. - self assert: (n level: 0.5) = (Color red). -] - -{ #category : #multicolor } -RTNormalizerTest >> testMultiColor3 [ - - | n | - n := RTMultiLinearColor new - colors: (Array with: Color white with: Color red with: Color black). - self assert: (n level: 0) = Color white. - self assert: (n level: 1.0) = Color black. - self assert: (n level: 0.75) = (Color r: 0.5 g: 0.0 b: 0.0). -] - -{ #category : #'gray color' } -RTNormalizerTest >> testOnCharacters [ - - | es n | - n := RTGrayLinearColor new - command: #asInteger; - scope: ($a to: $z). - - es := RTBox new - color: n; - elementsOn: ($a to: $z). - - self assert: n max = $z asInteger. - self assert: n min = $a asInteger. - - self assert: es first trachelShape color = Color white. - self assert: es last trachelShape color = Color black. -] diff --git a/src/Roassal2/RTNullLayout.class.st b/src/Roassal2/RTNullLayout.class.st deleted file mode 100644 index fa06c5f6f..000000000 --- a/src/Roassal2/RTNullLayout.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #RTNullLayout, - #superclass : #RTLayout, - #category : #'Roassal2-Layouts' -} - -{ #category : #hook } -RTNullLayout >> doExecute: elements [ - elements do: [ :e | e translateTo: 0 @ 0 ] -] diff --git a/src/Roassal2/RTNumberAnimation.class.st b/src/Roassal2/RTNumberAnimation.class.st deleted file mode 100644 index d25e9a70e..000000000 --- a/src/Roassal2/RTNumberAnimation.class.st +++ /dev/null @@ -1,51 +0,0 @@ -" -A number animation to handle a number and interpolate between values -" -Class { - #name : #RTNumberAnimation, - #superclass : #RTAnimation, - #instVars : [ - 'time', - 'blockToExcute', - 'animatedValue', - 'afterBlock' - ], - #category : #'Roassal2-Animation' -} - -{ #category : #accessing } -RTNumberAnimation >> after: aBlock [ - afterBlock := aBlock -] - -{ #category : #api } -RTNumberAnimation >> during: seconds [ - time := TRVITimer new cycleLength: seconds. -] - -{ #category : #refreshing } -RTNumberAnimation >> hasCompleted [ - | r | - (r := animatedValue hasCompleted) - ifTrue: [ self refresh ]. - ^ r -] - -{ #category : #enumerating } -RTNumberAnimation >> onStepDo: aBlock [ - blockToExcute := aBlock -] - -{ #category : #refreshing } -RTNumberAnimation >> refresh [ - blockToExcute value: animatedValue value -] - -{ #category : #actions } -RTNumberAnimation >> start [ - animatedValue := TRVIAnimatedValue new - timer: time; - finishCallback: afterBlock; - yourself. - animatedValue start. -] diff --git a/src/Roassal2/RTNumberInterpolator.class.st b/src/Roassal2/RTNumberInterpolator.class.st deleted file mode 100644 index 5345e5700..000000000 --- a/src/Roassal2/RTNumberInterpolator.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -I am the basic interpolator for numbers -" -Class { - #name : #RTNumberInterpolator, - #superclass : #RTInterpolator, - #category : #'Roassal2-Builder-Grapher-Scaling' -} - -{ #category : #accessing } -RTNumberInterpolator >> interpolate: t [ - ^ (start * (1 - t)) + (stop * t). -] diff --git a/src/Roassal2/RTNumberLinearNormalizer.class.st b/src/Roassal2/RTNumberLinearNormalizer.class.st deleted file mode 100644 index e9ae98a00..000000000 --- a/src/Roassal2/RTNumberLinearNormalizer.class.st +++ /dev/null @@ -1,43 +0,0 @@ -" -A RONumberLinearNormalizer is xxxxxxxxx. - -Instance Variables - scale: - -scale - - xxxxx - -" -Class { - #name : #RTNumberLinearNormalizer, - #superclass : #RTNLinearNormalizer, - #instVars : [ - 'scale' - ], - #category : #'Roassal2-ColorNormalizerOBSOLETE' -} - -{ #category : #initialization } -RTNumberLinearNormalizer >> initialize [ - super initialize. - scale := 1 -] - -{ #category : #accessing } -RTNumberLinearNormalizer >> rtValue: anEntity [ - "Normalize value based on maximum value." - - | value | - value := self command rtValue: anEntity. - ^ ((value abs / (self maximumValue: anEntity)) asFloat * self scale) asInteger -] - -{ #category : #accessing } -RTNumberLinearNormalizer >> scale [ - ^ scale -] - -{ #category : #accessing } -RTNumberLinearNormalizer >> scale: anObject [ - scale := anObject -] diff --git a/src/Roassal2/RTOSM.class.st b/src/Roassal2/RTOSM.class.st deleted file mode 100644 index 35b6b1120..000000000 --- a/src/Roassal2/RTOSM.class.st +++ /dev/null @@ -1,3323 +0,0 @@ -" -A RTOSM represent a shape linked to OpenStreetMap background tiles. - -Its outside boundaries and position are independent of the RTView camera. However, its inside is dependent on the RTView camera parameters. - -A ratio can be added, to change the base scale factor which is 1.0 in Roassal is equal to 1km in the mercator projection at equator. A ratio of 10 will mean 1.0 in Roassal is equal to 100m in the mercator projection at equator. -" -Class { - #name : #RTOSM, - #superclass : #RTAbstractElementShape, - #instVars : [ - 'rectangle', - 'ratio', - 'onload' - ], - #category : #'Roassal2-OpenStreetMap' -} - -{ #category : #resources } -RTOSM class >> buildingsAndStreamKampungMelayu [ - "self buildingsAndStreamKampungMelayu" - - ^ TRPlatform current - materializeFromByteArray: - 'RlVFTADBAAAAXCkAAAAAAAAABxRGTEdsb2JhbENsYXNzQ2x1c3RlcgAAAAQKQnl0ZVN0cmlu -ZwpEaWN0aW9uYXJ5BUFycmF5BUZsb2F0H0ZMUG9zaXRpdmUzMlNtYWxsSW50ZWdlckNsdXN0 -ZXIAAA+Qqw3jnKsOfByrDntqqw3mKqsN41mrDnrQqw3jq6sOe9urDns6qw56PasN5f2rDeN7 -qw57eqsN5burDeNdEN9DpasOew6rDnoaqw3lyqsN41urDnx2qw3j3xDfQ7WrDnrgqw558qsN -4V6rDn3yqw58IqsOeoOrDn3Yqw58C6sOerCrDnnGqw59tmUS2kwVBLQfqw3kRasOe9mrDnqK -qw3kJqsOfSkVBLQvqw57fqsOfEmrDeLDqw3j+qsOe7SrDnphqw3kBKsOfPqrDnp9qw3mlasN -4uEQ30PVqw596KsN496rDnzLqw3mNKsN47qrDnyjqw58NBDfUqxkTnISqw3ma6sOe4erDnx3 -qw3lN6sN422rDeVGqw579qsN5NYQ31LMqw58TKsN43urDeURqw56SKsN4sSrDePHqw598asN -5SKrDeR/EN9S3KsN5GqrDeTrqw56PBDfRCWrDeLUqw3jVasN5FCrPXasqw59z6sN5MQQ31Ls -qw58+KsOfQllEtqEqw3j8asOfHCrDeT0qw3l9xDfUvyrDnskqw3jxqsN5R4Q31MMqw56SasN -5o2rDeW+qw58xqsN5isVBLKuqw58KKsOfEqrDnscqw56PqsN5f4Q30R1qw57D6sOehyrDeXL -qw3jXBDfUzyrDnyhqw3jZ6sN43SrDnrhqw5586sN4V+rDnxvqw3k6KsN4/KrDnwMqw56sasO -echlEtpOqw57WKsN5lSrDnzkoP/zGqsOe9qrDnqLqw3muhDfU2yrDn0yqw58g6sOe7WrDnpi -qw3mhasOfPyrDeUUqw57lasN5lqrDnqBqw58zKsN41urDeOmqw565asOfB2rDnttqw3ju6sO -fKWrDeYxqw3mcqsN5QurDns7qw3jfKsN5ICrDnx4qw56NKsN45kQ30LEqw3lrxDfU5yrDnrw -qw58TasOe8GhAAWcqw3ixRDfQuQQ31Osqw3kgKs9dp2rDnwjqw3mD6sOfIyrDnnVqw3mdBDf -QvSrDeRRqw59t6sN5bGrDeTFqw59BKsN5IqrDnurqw3kJ6sOfSqrDeT3QddWgKsN5D2rDnn/ -qw3l9KsN5AarDnugQddWgKsN5NurDnsPqw3j36sOegirDnqOoSiOkRUEs46rDeYwqw57Loun -gICrDeZXqw3mNasOeeWrDeU4qw3mPasOevWrDeZLEN9DNKsN5gWrDeUTqw56/KsN5A2rDnv9 -qw3k7KsOe96rDnyHqw3kw6sOe5ZlEtpyqw559KsOfB+rDeLHEN9DZKsOecmrDn0Yqw3ivqsO -e92rDnqMqw3mu6sOefCrDeTdqw57KasOe7arDnpjqw3mhqsN5dOrDnsMqw3kKKsOe7BlEyw6 -ZE5xSKsOe5arDeZcqw56UasOe2+rDnyKEN9DpKsN5nGrDnweqw57bqsN5iyrDntiqw3lAKsO -fC6rDns9qw56P6sN5f+rDnx5qw3jfasOe7+rDeZIqw5746sOexKrDnodqw3lzqsOfE6rDeNd -qw567qsN41irDeLGqw3l26sOeuOrDeFgqw3krqs9dp6rDnwkqw556asN4VirDePKqw58DqsO -erKrDeRSqw59uWUS2lyrDnyTqw3lGqsOfFIQ30PUqw3kKKsOfSurDeY7qw59tqsN5RYVBLRe -qz12pKsN5AerDnz+qw591asN41ZkTnC4qw3kQqsOfGirDePgqw58zhDfUrurDeZJqw3kDhDf -RASrDeK5qw3jvKsOfKmrDnoiEN9Sy6sN5nirDn3FEN9EFKsN45sQ31Lbqw3lOqsOe1erDeW9 -qw3mfBDfUuurDeUUqw57gKsN5ROrDny8qw3k+qsN5ISrDnn3qw3jjasN5O2rDeSPqw57PasN -5COrDeOjqw3kxqsOehqrDeS5FQS0rqsOfNkQ31L7qw58PqsOee4Q30RkEN9TC6sOfGGrDeU6 -qw3miasOfRWrDeLfZRLaiKsOet6rDeZdqw3j6asN5Ou7rQ0Bqw58QasN5sSrDnwfqw57b6sN -5i2rDntMEN9TO6sN4+2rDnxpqw57OhUEtP6rDntBqw56QKsN5gCrDeN+qw56ChDfRISrDeTN -qw57E6sOeh6rDeXPqw3jXhDfU1urDnpTqw3l5KsOeuSrDnn2qw3itKsN45OrDnvJqw3jeKsO -fA+rDnqzqw55yqsOfbplEtpmEN9Te6sOe6erDeTEqw573qsOeo2rDea8qw59LKsOfMAQ31OL -qw3lEKsN4+BkTnJBqw57t6sOemSrDns3qw58/6sOfOoB4L8Sqw58NhUEtT6rDnuXEN9Cw6sN -4+GrDnzRqw3mXqsN5HYQ30LTEN9Tm6sN472rDnyqqw59oasN5SWrDeSrqw3meRUEtV6rDeNq -qw55zasN45yrDnx6qw3kdasN5cCrDnsqqw3mORDfU7urDnxPqw3lFRUEM0CrDeLSEN9Ty6sN -5IWrPXajqw58JasN5O+rDnpwqw56yqsN5FOhAAWaqw3kx6sN4+4Q30Mjqw3kKasN5fOrDeTL -qw58s6sN5qqrDnuaqw3mTWUS2n6rDeQIqw58zqD/8xmrDeR/qw3kx6sOelSrDnu2qw56lRDf -Q0OrDnp5qw3lO6sN5TyrDnx0qw3mUasOekGrDeYBqw591KsN5pcQ30Njqw56H6sN5dCrDno3 -qw3mT7utDRCrDeYYqw57HhDfQ3OrDnn3qw3lQKsN48+rDnrmqw573asOfBCrDnq0qw55zGUS -2mirDnvfqw56jqsN5r2rDnwhqw3mdasN4rsQ30Ojqw57uKsOemWrDeaKqw56D6sN4toQ30Oz -qw57mKsN5l6rDnniqw580qsN5SGrDnnIEN9Dw6sOfCCrDntwqw3mLqsOfKurDnszqw5706sN -4/6rDeZ6ZRMsN6sOe0erDeN/qw58fqsOfKCrDeXrqw3lyKsOe1+rDnsWqw3jX6sOfFCrDeTJ -qw3i2asOfGCrDnrlqw3it6sN5IerPXakqw58J6sN5oarDnwBqw3jWasN46urDeRUqw59u6sO -elKrDeSIqw3mK6sOec+rDeQqqw59LasOeharDeQJqw59BBDfUsqrDea7oP/zGqsOfF+rDeTC -qw58IKsN6OCrDePiEN9S2qsN5dGrDnoqqw3lsqsOfc+rDeFeqw3jvqsN5EWrDnvFqw3mH6sO -elurDeOdqw58U6sN5TyrDeP9FQQyX6sOerSrDnozqw553KsN5RYQ30RTqw3j1hDfUvqrDntZ -qw3k8KsN5JerDeaJEN9TCqsOeoqrDeVCqw3kyKsOfMYQ30Rzqw3lLKsOec0Q31Maqw3jbasN -5BqrDnubqw3mvqsOekirDeZ2qw57tasOfPKrDeaLqw584BDfUzqrDeUoqw57masN5l8Q31NK -qw58V6sN5JCrDeU7qw58IasOe3GrDeYvqw57B6sOfOSrDebLZRLahasOe0irDnpCqw3mAqsN -44CrDePxqw56PxUEMs+rDea3u60NA6sOexyrDnogqw3l06sOfFGrDeNgqw57JBDfU3qrDn02 -FQS1HasOeuirDnn5qw3lQas9dqWrDnwpqw3iuBDfU4qrDn2rqw56cqsOfBIVBLMsqw56tasO -fb1lEtptqw58D6sOevarDnudqw3mA6sOe+CrDnqPqw3kK6sOfS+rDno0qw3kOqsN5nOrDeNn -qw3ke6sOe7mrDnpoqw3kCqsOfQUQ31Oaqw588KD/8xurDeTSqw58b6sN47cQ31Oqqw3j46sO -fNMQ30Liqw56BGROcn6rDeO/qw58rasN5f2rDnwvqw3miKsN5JYQ30MCqw3jnqsOfIGrDnyF -qw3lPasN5qKrDeXMqw3kt6sOe6CrDeQyqw3lF6sN5NurDeLhqw3jW6sN5GmrDnorqw3kiKs9 -dp2rDeTzqw565asN5FWrDnoXqw3kyasN5TirDnqNqw3j4asOeyerDePeqw3j7KsOe/2rDeaA -qw3kw6sOfMKrDeZ0qw3mUqsOfJBlEtpmqw3mYKsOfQQQ30Niqw3l9qsN5jCrDnnfqw3keqsO -ekOrDeYDqw56kasN5pmrDns1qw57HasOeiGrDeXVqw3jYasOe7CrDePvqw3lMhDfQ5KrDeUD -qw566qsOefqrDeVCqw3iuqsOfaarDnp1qw3mVxDfQ6KrDeWuqw58E6sOerarDnnOZRLacKsO -eeW7rQ0Oqw57MKsN5CurDnv5qw5746sOepCrDebBqw59MKsN4tarDnu7qw56basN5oyrDn0G -qw56qasN5hsQ30PSqw57mqsN5m2rDnzUqw56V6sOe3IVBLQ8qw3jwKsOfK+rDeK+qw3i2KsN -5o+rDnnwqw57SasN44GrDeOfqw58g6sOeb6rDnzeqw3l0RDfQ+JlEyw0EN9SqasOfFKrDeSF -qw3i46sN5ImrPXamqw58KqsN5PSrDnrzqw3kC6sN5FirDn2+qw3kyqsOfBsQ30QSqw3mSKsN -5C0Q31LZqw57zRDfRCIVBLR8qw3kC6sOegAQ31Lpqw57rqD/8xyrDePkqw556asN47qrDeaW -qw3mZ6sN5LAQ30RSqw56TqsN5T6rDeUWqw3jVhDfUwmrDeUZqw3kThUEMo6rDnu4qw56CRDf -RHKrDnoiqw3l1hDfUxmrDnqYqw58hKsOeiKrDeQ0qw55+6sN5USrDnm/EN9TKasN5eirDeO0 -qw55z6sOeysQ31M5qw3kbxDfRIKrDnvkqw56kasN5sKrDnqvEN9TSasN5PqrDnr6qw3lE6sO -e7yrDnpuqw3mjasN5AqrDnvmqw57nKsOemKrDnubqw3mYRDfU2mrDnzZqw3hW6sOe3OrDeYx -FQSzC6sOfLCrDnyxqw3lIKsN446rDn0Gqw57SqsOekSrDeYFqw58hKsN44IQ31OJqw3k2qsN -5dKrDnrMqw57HqsN42KrDeLfqw58U6sOezmrDeLqqw5666sN4rurDeSKqz12p6sOfCurDnxj -qw56JasN5DAQ30LRqw58F6sOererDeRZqw59v2US2nIQ31OZqw57OqsOfSmrDeQZEN9TqasN -5C6rDn0xqw3kOasOfLWrDeS2EN9C8asN5AyrDn0IoQAFmasOe7urDeXkqw3jk6sN5myrDePl -qw581asOe9GrDeTFqw57L6sN48GrDnzEqw3mkhDfQyGrDeN9qw3joKsN47KrDeU/qw56PqsN -5CKrDeX4qw56lKsN5RqrDeSUqw3mRKsN5l6rDeT1qw3kdqsN5AyrDnueqw57aqsN5MurDebN -qw56/xDfQ0GrDnpNqz12qKsOeqGrDeK6qw3mw6sOeeirDeZlqw3k+xDfQ2GrDeaOqw57IKsN -4+erDnseqw3kJKsN5mSrDePPqw3mhasOfKkQ30OBqw57dKsN5jSrDnyeqw3jf6sOerNlEtpM -qw58sqsOe0yrDnpFqw3mB6sN44OrDnu8qw3mKGROcjarDnsgqw56I6sN5derDeNjqw55xqsN -5G6rDn27qw3kZqsOeh6rDnruqw55/asN5UWrPXaoqw58LKsN4r+rDnnIqw3mtqsN4/6rDnwY -qw56uKsOedCrDn3AZRLadKsOe8qrDeUEEN9D0asOe+WrDnqUqw591KsOfTKrDnqiqw3me6sO -fDqrDnu9qw56b6sN5A2rDn0Jqw3k0KsOe/urDeZQqw57nKsN4+arDnzWqw59oqsOfE2rDnvG -qw3pEqsOelKrDePCqw58sRDfUqirDeXXqw3mK6sN5pWrDeO7qw3joqsOfIWrDnwAqw3l3asO -eg8Q30QBEN9SyKsOfFSrDeUbqw5936sN4vCrDeXhqw3kjRDfUtirDeT2qw58xasN5a+rDeRa -qw58oqsN5GyrDeTMqw3ksasN5DCrDnsTqw3j/asN5BirDnxCqw58YKEABZoQ30RREN9S+KsO -fL8Q30Rhqw3jyBDfUwirDnuCqw3mHRDfRHGrDnujqw3mNhDfUxirDeQzqw56RqsN5ggVBLK6 -EN9TKKsN5narDnvDqw3kwqsN4VqrDnokqw3l2asOeioQ31M4EN9EgasN42irDnrvqw55/qsN -5UirDeLBEN9TSKsOfGmrDeWzqw56W6sN42KrDnwaqw56uasOedFlEtp+EN9TWKsOenarDnv1 -qw58U6sN5FmrDnvmqw56lasN5sQQ31Noqw3l6asN4sSrDnu+qw56cKsN5pCrDn0Kqw57VBDf -U3irDn3Dqw3kl6sN5B+rDnudqw3mZRDfU4irDnzYqw56iqsOe1CrDePDqw561KsOe3WrDnyy -qw57m6sN42yrDeaXqw56j6sOe02rDeOEqw3jo6sOfIarDnx+qw3mWKsN5eirDeOLqw57IasN -42QQ31OYqw58VqsN46GrDnz/qw3kkKsN46CrDeSOqz12qasOfC2rDno1qw57BxUEs0qrDeRb -qw59wasOe32rDeTNqw557KsN5NQQ30MAqw3kMasOfTOrDno/qw3j06sN5ParDeQOqw58SKEA -BZsVBLN6qw3j56sOfL2rDeR7EN9DMKsN48OrDnudqw575KsOfR2rDeTtqw588KsN6NOrDeUc -EN9DQKsOe3KrDeNyqw3kBqsN5PcVBDONqw55/6sN5a2rDnqsqw3klqsN5farDnnSqw3lRKsO -fSOrDnu3EOTWB6sN5sWrDnt/qw3mwqsOeiurDeYWqw57v6sOenKrDeaRqz12nasOem+rDejN -qw3myqsOe56rDeZmqw56pKsN5pQQ30Ogqw57dqsN5jerDnsEqw3j4asN5CurPXapqw59EhDf -Q7CrDntOqw56R6sN5gqrDnyHqw3jhasOfa6rDnyXqw3jg6sOeyKrDnolqw3l2qsOfFerDeNl -qw58kKsN43WrDeQbqw57wqsOevCrDeLCEN9D0Ks9dqqrDnwvu60NAasN5f+rDnoCqw3moasO -erplEtqDqw3kXasOfcKrDeRoqw3k3LutDQarDno6qw3mmasOe+erDnqWqw3kMqsOfTSrDnoV -qw56QasN5mqrDnzcqw3kD6sOfQurDnvZoQAFnKsN5r2rDePpqw582asOenUQ31K3qw579xDf -RACrDePJqw3jxKsOfLOrDeTBqw57XasN5nirDeacqw3jpBDfUterDnwsqw57zasN5emrDnom -EN9EIKsOef0Q31Lnqw3lrasN4tarDeUdqw3jjKsOfDirDeSPqw3k+KsN5bCrDeQ/qw59y6sN -5M+rDeamEN9EUKsN5UYQ31L3qw55yasN5b0Q30Rgqw3jhBUEspkTLRmAqw3kTqsN5IUQ30Rw -qw59BasN4V+rDeaTEN9TF6sN5AerDnxRqw3mZxDfUycJYQxmqw3kVqsN5kOrDeY4EN9TN6sO -fJKrDeOdqw3jmqsOe0+rDnpIqw3mDKsN44arDn2zEN9TR6sN5iGrDnt8qw57I6sOeiarDeXb -qw3jZhDfU1erDnwFqw3kCqsN41qrDnrxqw56AKsN5a6rDeLHqw3lJLutDQKrDnvfqw59pKsO -esGrDnnTZRLahKsOfcOrDeUtqw58LqsOe+irDnqXqw3mx6sOfTarDeW3qw3l3asOemGrDeLZ -qw57wKsOenSrDn0Mqw57/qsN5DCrDnufqw3j66sOfNyrDn0Mqw3jvKsOeyurDnt4EN9Tl6sN -48WrDny0qw59FKsN5eerDnqoqw3moRDfQs8Q31Onqw3jpasOfIirDnr6qw3kXqsOerKrDeXt -qw3jwqsN4rcQ31O3EN9C76sOfFirDnq4qw3lHqsOeuCrDeQsqw3mnRDfU8erDeSQqz12q6sO -fDGrDeT6qw58UKsN5MUQ30MPqw3i0asOe5OrDeReQddWgKsN5NCrDn0Gqw559KsN5DOrDn2s -EN9DL6sN5earDeQQqw57OasOecSrDeUFqw3muqsOfLCrDeUfqw58CasN5s2rDeYpqw58JxDf -Qz+rDny1u60NEasOekmrDeYPqw57VqsN4r2rDeR+qw570asOeierDeXcqw59E6sN5FOrDnnO -EOTWBqsOegGrDeWwu60NA6sOe3GrDnrCqw551WUS2oWrDeN/qw3kIqsOenirDnvsqw56mKsN -5sqrDnqUEN9Dn6sOfBOrDnvBqw56dasN5pSrDeXLqw3kbasOe56rDeOPqw55+asOe6CrDeZo -qw57aqsOfN2rDeQ4qw59MRDfQ7+rDnt6qw3mOasN4sGrDny1qw3mpqsOesGrDntQqw3jh6sN -5nurDnyJqw5836sOfAwQ30PPqw3l/KsOeyCrDnskqw3jZ6sN5mWrDnxZqz12pqsOfberDeN8 -qw3kNqsOevKrDeLIqw3kkqs9dqyrDnwyFQS0SasOfKmrDnnnqw3jpasN5q6rDeT1qw3kX6sO -fcSrDnzjqw3lAqsN5LurDeacqw3kNKsOfTmrDnoxqw3kZqsOekerDeQRqw59D6sOeh6rDePs -qw56DhDfUtarDeQgqw3mpBDfRB+rDePGqw57yqsN5karDeZwEN9EL6sOetirDeOmqw3j0KsO -e3OrDeUfqw59tKsN5lCrDnxNqw3k+xDfRF+rDnpPEN9TBqsN5NKrDeOuqw58AKsN5syrDnnW -EN9TFqsN49KrDnrTqw3lM6sN5BurDebLqw3mwKsN5parDnntqw57jasN5a+rDeNoqw57oasN -5mkQ31NGqw3ixqsOfO2rDnt7qw3mOhDfU1arDePzqw58QqsN462rDntRqw56S6sN5hCrDeOI -EN9TZqsN5DyrDeK+qw3mQqsOfDWrDnslqw56KKsN5d+rDnxaqw3jaKsN47+rDeY6qw59uqsO -evOrDnoCqw3lsasOeeOrDnw0u60NBKsN4skQ31OGqw57kqsOesNlEtqGqw3jd6sOfcWrDnwc -qw3jw6sN5h2rDnvwqw56masN5DWrDn06qw57w6sN5dmrDejeqw59IBUEtUmrDnvCqw56dqsN -5BKrDn0Qqw3lJqsN41yrDn0hqw3l7RUEszirDePtqw583hDfU6arDnqFqw3ixBUEtWmrDnp8 -EN9TtqsN48erDny2qw58TqsN5NSrDeaoqw3l3BDfQv6rDeOnqw58iqsOfQ+rDeYEqw3l/qsO -fcOrDeanqw3lIKsOeqCrDeQ8qw3lyqsN5FCrDeSTqw58dasN5PyrDeLiEN9DLqsN5GKrDnqm -qw56+KsN5NOrDn3yqw3mWKsOfLSrDeNpqw57qRUEM3sQ30M+qw56NasN5mGrDn0LoP/zGasN -5eoQ30NOqw3maqsOfS+rDeLQEN9DXqsOfImrDeY8qw3lRKsN5ParDeOWqw56hqsOekyrDeYR -qw3jm6sN4tSrDnxEEN9DfqsOeyerDnopqw3l4KsN42mrDeUuqw3kphDfQ46rDnr0qw56A6sN -5bKrDeLLqw564butDQerDeRaEN9DnqsOeterDnrEqw553GUS2ogVBLP4qw3jkqsN5FKrDnod -EN9DrqsN44OrDnvyqw56mqsN5syrDn2hqw55+qsN5NOrDnvDqw56d6sN5pirDn0Rqw56qqsN -5UCrDnusqw57ohUEtCirDnzfqw3kTasOfASrDeXaqw57fKsN48irDny4qw3kZasN5q6rDeQt -qw57U6sN44mrDeOoqw58i6sOfTqrDeZqqw3mBhDfQ96rDnteqw58W6sN5D+rDnqkqw3mQasN -5JWrDnnoqw58NasN5P2rDnsOqw584RDfUrWrDnw9qw3mKqsN5GOrDn3Gqw59EqsN5NSrDn0R -qw3jl6sN5AOrDeZyqw3kN6sOe+irDeSkZRLaXBDfRB6rDeQTqw58nasN44yrDn0cqw3j7qsO -egIQ30Q+qw56XasOevQQ30ROqw3mAWUTLCerDnoVEN9S9asOe4WrDeQQqw3kHqEojpAQ30Re -qw56dKsN5k4Q31MFqw3mtKsN5SGrDeLVqw56x6sOeiqrDeXhEN9TFasN5AerDnvAqw56BKsN -5bOrDntdEN9TJbutDQ6rDnneFQSyx6sOfMurDeXGqw55/asOe/SrDnqfqw3mzRDfU0WrDnuB -qw3hV6sOfKqrDea5FQS1CKsOe8SrDnp4qw3mmasN4+arDnp+qw3lJKsOe6OrDeZsqw57KKsN -5qarDn2wZE5yfasOe32rDeY+qw55yasOfLmrDntUqw56TasN5hKrDnyMqw3jiqsOe2arDn0F -qw3mExUEtSirDnsoqw3jaqsOesarDnxfqw59xqsN4uqrDeQSqw3kRqsN5hSrDnr1qw3izKsN -5JirDnoXqw58NqsN5oGrDeOoqw58Z6sN452rDnrFZRLaiqsN5GSrDn3LEN9TlasOewqrDnt4 -qw59s6sN4sUJYRL3EN9TpasN5DirDn2iqw3kuqsN44cQ31O1qw3kFKsOfRKrDnwFqw5926sN -47arDeUwqw3kcxDfU8WrDePvqw584KsOejurDeLVqw3jXqs9dqUQ30MNqw3jyasOfPqrDeXd -qw3mr6sOfHirDn0wqw3jqWUS2oOrDnphEN9DLasOfJWrDeTXqw3lIqsN5hqrDn0Mqw3j1KsN -5P6rDeXnqw56RasN5q2rDeXOqw3k1RDfQz2rDnwxqw3it6sOe0GrDejNqw564KsOfK2rDeaa -qw3jiqsOe5OrDeTvqw3mbasOe08Q30N9qw3mbqsOe36rDeY/oP/zG6sOe1arDnpOqw3mFKsN -44urDn3lqw58cqsN4tqrDea6qw57KasOeiurDeXiqw3ja6sN5PirDnq1qw3k/xDfQ62rDnr2 -qw56BasN5bSrDnobqw58N7utDQ+rDeLNqw58J6sN476rDnrGqw5532UTLCerDn3Mqw3lFRDf -Q72rDeZHEN9DzasN45+rDnv1qw56oKsN5GKrDn2jqw57AasN5FOrDnvFqw56easN5BWrDn0T -qw57s6sN43yhAAWZqw3l4qsOe6SrDePVqw3j8KsOfOGrDnyeqw551hDfQ92rDeXFqw3jyqsO -fLurDnp4qw3knKsOe5SrDeaxqw3k4qsN46qrDnyQqw3kRKsOelWrDeYRqw3mJBDfUsSrDnxg -qw3lI6sOeyGrDeRHqw558asN5CCrDnptqw3knBDfUtSrDeQ4qw3k/6sN5l8Q30Qdqw57O6sN -5GUQ31Lkqw3k1qsN5koVBLSHqw5836sN5DmrDeZiqw56+asN5i0Px2a3EN9EPasN5iCrDeQX -qw570BDfUvSrDnyYqw3ku6sOe6FlEtptFQQyeWROcn2rDnwOqw3mxRDfRG2rDn2+FQS0x6sN -5kIQ31MUqw56R6sN5PCrDnpPqw3mFqsOe1wQ31Mkqw3i3asN5e5lEyw2qw56LKsN5eQQ31M0 -qw3kQaEojpKrDnpjqw5696sOegarDeW2qw3izqsOe4m7rQ0Qqw57bqsOfLarDeLGqw56x6sO -eeBlEywpEN9TVKsN5OOrDnvYFQQyuasN5nCrDnv2qw56oasN6NCrDnriEN9TZKsN42SrDePA -qw56uqsOe8erDnp7qw3mm6sOfRSrDeXPqw3kdKsN42CrDnulqw3mbhDfU4SrDnzjqw58WKsN -43erDePSqw57f6sOfLyrDnw3qw3mtqsN5fyrDntXqw3jjKsN46urDnyRqw592asN5imrDnsq -qw3jbKsOew2rDnxhqw3kUasOfD+rDeRWqw3mN6sN5J6rDnw4qw3j9asN5ogVBDMpqw3i0gHg -w12rDeRpqw59z6sOfeerDeTXqw3l3BUEs1arDeQ6qw59pKsOe0qrDnw1qw3mmqsOe46rDeQW -qw550hDfQxyrDeOGqw3j8asOe+OrDnsWqw3kp6sN5BOrDeO5qw56RqsN48urDeUMqw3kr6sO -fBerDnnvFQQzaas9dqqrDn3gqw58masOfSGrDeUkqw3lG6sOfPcQ30M8FQSztmUS2oarDeUA -qw56w6sN4/SrDnxOqw3lBqsOegerDeW3qw58T6sN5rOrDntNqw3j4xDfQ1yrDnnhqw3k7KsO -egurDejTqw58yqsOeoCrDnvIqw56fKsN5p6rDnx1EN9DjKsOe6arDeZwqw57xKsN43arDny0 -qw57gKsN5kOrDeNpqw58uasN5QcQ30Osqw3j+asOe1irDnpQqw3mF6sOfJKrDeONqw57SasN -5lirDnsrqw56LqsN5earDnxiqw3jbasOfPSrDnwiqw3kV6sOfS+rDnr4qw3i0BDfQ8yrDnw6 -oP/zGbutDREVBDH4qw56ymUTLDOrDeRqqw591BUEtDarDn0nqw56hqsN5T+rDeS+qw5796sO -eqKrDeQ7qw59pasOeyWrDeObqw3jZhDfQ9yrDeYiqw3kF6sOfRUQ30Psqw56ZBUEtGZB11Z4 -qw3j8qsOfOSrDnqMEN9Ss6sOetcQ30P8qw57uasN45KrDeSyqw3jzKsOfL2rDePloQAFm6sN -5sCrDeYmqw3k36sOfIGrDeOsqw55+hDfUtOrDealqw3mNasN5UCrDnz8EN9S46sN5HCrDeUl -qw3k4RUEMkirDeSgqw55/qsN5QKrDnuxqw3l2qsOenurDnr0qw3k2KsOeeCrDeRdqw56n6sN -5R0Q31LzoSiOkKsN5hkQ30Rcqw57XqsN5msQ31MDqw3mQasOejarDeYkqw3mnxDfUxOrDeY8 -qw3mcasOewIQ31Mjqw574KsN5AOrDeZEqw58y6sOe4urDeY/ZRLadKsOfDIQ30R8qw3mWasO -e1mrDnpRqw3mGKsN444Q31NDqw3i06sN5m+rDn0cqw3ivasOeyyrDnovqw3l56sN426rDnoG -qw3lCqsOevmrDnoIqw3luKsN4tEQ31NjZRMsO6sOezKrDnrLqw554mUTLDSrDn3Vqw57y6sN -5B6rDntmqw57+asOeqOrDejUqw59pqsOe1OrDnxzqw3l1asOe8mrDnp9EN9Tk6sOfRerDnvA -qw3k5qsN5larDnunqw3j86sOfOerDnvyqw3hXKsN47irDeTIqw57gasN482rDny+qw559qsN -4VerDnoUEN9C2xDfU6OrDeOtqw58k6sN5jurDeaEEN9C6xDfU7OrDnx6qw58Y6sN4syrDeUm -qw58RqsN5GarDeYTEN9C+xDfU8OrDeShqw58O6sOfbCrDeUDqz12pasOfcKrDeNfqw3lNasN -5DerDeRrEN9DC6sN5NqrDeY2qw3kPasOetGrDeSwqw56L6sN4sUQ30Mrqw5506sN5BirDePO -qw57ZGROcUurDeZkqw57eKsN5TGrDnyrqw3lHKsN43EQ30M7qw3kuqsN5CmrDnocqw56UqsN -5hmrDnu9qw5856sN5HOrDeaDqw580qsOejGrDeXqqw3lNqsOfCmrDnoJqw3luasOe7SrDeW/ -qw59MKsN6NCrDnrMqw555GUTLDarDnzRZRLaiqsN4+S7rQ0Cqw3k16sOe/qrDnqkqw3o2qsN -4rSrDnsiEN9Dm6sOe8qrDnp+qw3moqsOeverDn0tqw3k/xDfQ6urDnuoqw3mc6sN5C6rDnzo -qw56OBDfQ7urDnuCqw3mRasOe+WrDny/qw3l9asN46SrDnpMEN9Dy6sOe1qrDeOPqw3mXasO -fJWrDeNrqw3mPasN5OCrDnstqw3jb6sOfGerDnxxqw3kaKsN49WrDnr6qw3i06sN5KOrDnw9 -qw56PWROcUurDeXfEN9D26sN5GyrDn3Yqw58S6sOfGKrDeZ+qw3kPqsOfacQ31Kyqw3klasO -fa2rDeT4qw3kzKsN5BmrDn0Yqw3jYasN5IdkTnJBqw3j9KsOeuurDnnjqw3jzqsN5SqrDnrL -qw3jrqsOewuhAAWZqw3j17iULrqrDeP3qw3lKKsN5eKrDeSsqw58vqsN5ncQ31Lyqw3mYGUS -2nCrDeUEEN9EW6sOfN0Q31MCqw3k26sOecWrDnnlqw56VasN5GSrDeSxqw57pKsOeqWrDeQm -qw3o4KsOewmrDeP8FQQyp6sOem2rDeW0qw3mpBDfUzKrDeZfqw59xBDfRHurDeZ6qw57qasN -5nQVBLLUqw3lwasOeeYQ30SLu60ND6sOe4OrDeZGEN9TUqsOex2rDnwLqw57W6sOelOrDeYa -qw3jkKsOeuIQ31Niqw3mnasOe/yrDeZpqw57LqsOejKrDeXrqw58aKsN43AQ31Nyqw56masO -fA6rDeZFqw56/qsOegqrDeW7qw58PqsN4tarDnpWEN9TgqsN5sWrDeaRqw560GUTLDcQ31OS -qw592asOedCrDeLdqw3o8KsOe/urDnqlqw3kQKsOfamrDnnBqw58yWUTLDOrDnsNEN9CyqsO -e8urDnp/qw3kGqsOfRmrDnu+qw3k86sOeuSrDeP1qw586asOe26rDeTjqw3jz6sOfMCrDnwe -qw3maBDfU8KrDeOvqw58lqsN5HSrDeZAqw56UKsOe4OrDeUqqw550qsN5G+rDnnrqw3jqRDf -QxqrDeSkqw3lBasN5serDnw3qw3kbasN5NirDnwXqw3k3asN5fwPwuyjqw56IasN5TSrDeFZ -qw3ksqsOe8erDeY3qw56KasOfG4Q30M6ZE5ySqsN5ASrDnrDqw56JKsN5CqrDnnCqw3lzBUE -s8SrDeZ1qw3jwasOe0qrDeSBqw3mR6sN5pqrDnquqw3lI6sN5hurDeUNqw3o3qsOey+rDnoz -qw3l7qsN43GrDnwQqw57qKsN5BOrDeaOEN9DiqsOev+rDnoLqw3lvKsN4tirDnvEqw58yKsO -fOurDeN5qw3hVqsOetGrDnnmZRMsOqsN5Q+rDnyZqw3kyqsOe/yrDnqmqw3o8KsN5RurDnrZ -qw3mvqsOeogQ30O6qw57zKsOeoCrDealqw59GmUS2oO7rQ0Eqw58hhDfQ8qrDnuqqw56QqsN -5rOrDnzqqw59J6sOe4SrDns4qw3j0KsOfMGrDn2qqw3kCasN5ECrDntcqw3jkasN47CrDnyX -qw56gKsN5KGrDeZBqw57qqsOfGurDnpoqw3l76sN5oqrDeR3EN9D6hUEMAWrDeOhqw3kpqsO -fD8Q31Kxqw3ksqsOfPGrDeRuqw592xDfUsGrDeTeqw3jb6sN44mrDnoFqw3kQasOfapkTnJK -qw3ktqsN5hIVBDI2QddWeKsOfCKrDeQcqw3ktasN5i4Q30Qqqw3mgqsN5JirDeP3EN9S8asN -5BUQ30Q6FQS0lKsN5F2rDno5qz12p6sOem6rDea8qw56GxDfUwGrDeUJqw3lLKsN6N+rDnqM -qw3j66sOejSrDeXvFQSyo6sN5QarDntHqw57MRDfUxEVBLTUqw3j0asOegyrDeW+EN9TIasN -4+WrDeQ1qw3mmKsOfKOrDnnnqw58nKsN5j9lEtpOqw57rxDfRHoJYQxwqw57/asOeqerDej1 -qw3mF6sOeeGrDnvOqw56gasN5qcVBLLjqw59qRDfU1GrDnp7qw3kjasN5qurDnurqw3mdqsO -ezSrDePwqw3lHasN5RGrDnuFqw3mSBDfU3GrDn29qw3l1asOe12rDeYcqw3jkqsOfJirDnv0 -qw56kKsN5kqrDeSpqw57MKsN43IQ31ORqw58basOe/CrDeSBqw57AasN4t+rDeSnqw58QasO -fSqrDnvbqw3o9asOetJlEyw7qw3kcKsOfdyrDnrCqw3l+RUEMxarDeZZqw3jxRDfQtmrDeRC -qw59q6sOehGrDeLMEN9C6RDfU7GrDeQdqw59HKsOfcyrDeXHqw55wBDfQvkQ31PBqw3j+asO -fOurDnzUZRMsJ6sOfOgQ30MJqw3kXxUEs2OrDePRqw58wqsN5KOrDnsjqw3kAKsN47GrDeQh -EN9DKasOfFurDeUtqw58kasN472rDeUHqw56B6sN5dCrDnutqw3k36sOe3urDeS3qw3mhKsN -5loQ30NJqw3knqsOelkQ30NZqw3mqqsOfCgQ30Npqw3md6sOe7SrDnpDqw3lSKsOeoSrDnxt -qw3hXRDfQ3mrDnuHqw3mSasOfAqrDnnTqw3mBKsOe16rDeYdqw3jk6sN486rDntRqw564qsN -5IOrDnsxqw56NasN5fOrDeNzqw56i6sOewOrDnoNqw3lv6sN4uKrDntOqw3kJRDfQ7mrDnvl -qw5606sOeemrDeFWqw593hUEtBOrDnuMqw56iRDfQ8mrDeNXqw57/qsOeqirDekSqw59rKsO -fHmrDnzSqw3jnqsN4WCrDnvPqw56gqsN5B6rDn0dqw59EKsN5TarDeSgqw57rKsOelSrDeP6 -qw587asOeu8Q30PZqw57dRUEtFOrDePSqw58w6sN5EqrDnxiqw56I6sN48yrDeOyqw58mRDf -UrCrDeZOqw58KxDfQ/mrDeQxqw59LasOfG6rDeUuqw3kgqsN5C4Q30QJqw5806sN5KmrDnxC -qw56sasN5QlkTnI2EN9S0BDfRBmrDeSSqw57oqsN5HMQ31Lgqw3k4KsOe+cQ30Qpqw3mXasN -5EMQ31Lwqw57C6sN5LmrDnzDEN9EOasN5OmrDeLOqw57YKsN44GrDePLqw56PasN5A+rDeXf -qw56p6sN5HerDnnMqw3mEBDfUxCrDeQmqw57sqsOe3SrDeK/qw3mH6sOewmrDnpAqw3mAKsO -euarPXaeqw56o6sN4rirDno2qw3l9BDfUzCrDeLLqw5546sN5pAVBLTzqw57BKsOeg6rDeXB -qw3i7hDfU0CrDnstqw3lKqsOfQqrDePaqw561KsOeeurDeFXqz12oxDfU1CrDeQdqw58AKsO -eqmrDnm+FQSy8hDfU2CrDny4qw3jhasN5mmrDnqZqw570KsOeoOrDearEN9TcKsOe8irDnyl -qw3mj6sN5RllEtpKqw57rasOelWrDeZ7qw587hDfU4CrDnnFqw3mDKsN5IJmMs7Iqw57iasN -5kurDn2jqw58xBDfU5CrDnosqw56H6sN5GQVBLUzqw57X6sN45SrDeOzqw58mqsN5q+rDeZP -qw5716sOezKrDeN0qw3k86sOfG+rDeafqw565KsN5IMVBLVTqw56h6sN47CrDeSrqw58RKsO -fDtmMs7Iqw3k5RDfQugVBLNCqw3kdKsOfd8Q31Owqw58C6sN5mOrDn25EN9TwKsN5ESrDn2t -qw58WasN5LqrDnoMqw57uqsN5barDeLuZE5yEqsN5B+rDn0gqw3jqasOfBKrDeP7qw3lPasN -5CyrDn3eqw3j06sN5cCrDnzJqw3l0qsOfJarDeRbqw3kk6sN42WrDeUwEN9DOKsN5CqrDnxM -qw3lCqsN5EarDeYsqw3k4asOfMGrDnnsqw3jrKsOe4OrDeYvqw55v6sOe6WrDeQUqw570asO -eoSrDeasqw3jc6sOe66rDnpWqw3mfKsOe9KrDn0lqw3hVqsOe4urDeZMqw3lDqsN436rDnx0 -EN9DqKsOe2CrDeYgqw3jlasN5cKrDnqIqw3i46sOevwQ30O4qw57M6sOejerDeX1qw58cKsN -43WrDnvsqw3kPqsN5JQQ30PIqw57B6sOeg+rDeXCqw58RqsN41WrDnssqw3lzKsN48SrDn2/ -qw561asN4VirDeR1qw594KsOeparDeQJqw3kSasOfAGrDnqqqw3kRasOfa4VBLRCqw56/qsO -etUQ30PYqw56mqsN482rDeQgqw59IasOemirDeaDqw58VqsN5M+rDeP8qw588KsN43mrDePU -qw58xasOfO6rDeOJqw56DasN47SrDnycqw3lyasN5lCrDntIqw553qsN5P4Q31Lfqw3lMasO -fIurDeUXqw3krKsN5Qu7rQzfqw58JKsN5rWrDeTiqw58mqsN5LsQ30RYEN9S/6sN5FSrDnvO -qw59NKsOedGrDejUqw3mfRDfUx+rDnuEqw3jb6sN43CrDeQWqw59r6sN5k2rDnqXEN9EeKsO -e2KrDeYhqw3jlhDfUz+rDnsCEN9EiKsN5birDns0qw56OKsN5farDeN2qw59qasOe5+rDnoo -qw57dqsN5FWrDnsJqw56EasN5cOrDeNWqw59GhDfU1+rDnpuqw3o2qsN46KrDnrXqw557asN -4VkQ31Nvqw56uasN5ryrDntaqw3mZhUEtRKrDnwDqw56q6sOecCrDn2vqw568qsOfBqrDeZA -ZE5wuKsOe9KrDnqFqw3mrasOfSOrPXarqw59LKsN45GrDn0qqw3mqKsOe6+rDnpXqw3j/asO -fPGrDnyIqw5586sN5MarDny7qw57jKsN5L2rDePVqw58xqsOe6+rDeaxEN9Cx7utDQerDeYX -EN9C1xDfU5+rDeO1qw58nasOegGrDnv6qw3kV6sN5lMQ31Ovqw56J6sOfHGrDeSWqw56LhDf -QvcQ31O/qw3krqsOfEerDeaTqw3lDLutDQBkTnFIoSiOkKsOfOirDnvMqw3kdqsOfeKrDeae -qw3k46sOererDeY4EN9DF6sN4+KrDnv0qw3kSIungICrDeS9qw3kqasOe2erDeZbqw3kIasO -fSsVBDNUqw58I6sN5dCrDnpLqw3jp6sOe3urDnwlqw3mrKsOeoOrDeU+qw3kNqsOfcyrDeK2 -EN9DR6sN5cerDeUyuJQuuqsOeeSrDntwqw3lL6sOejmrDeX3qw3jbhDk1f6rDnoUqw3lxasO -fRerDeFdqw3j+6sOetirDnnuqw3hWhUEs9ETLRiXqw58CqsOfEerDeY0qw3jnKsOfASrDnqs -qw55wasN5EerDeZMqw58kasN46+rDnvTqw56hqsN5rOrDeO9qw59wasN5gerDnt6qw3jtasO -e7CrDnpZqw3mfqsN41erDnuNqw3mUasOfB2rDnzHqw3lwxDfQ8erDntkqw3mIqsN45erDnye -qw59OasOe8+rDeNVqw3mV6sN5UWrDns1qw3jd6sN4tSrDnxyqw58KKsN5ga7rQzfqw3kl6sN -5UirDnsKqw3jV6sN5K+rDnxIqw56gqsOen27rQ0Gqw3itqEojpGrDeTeqw3ivKsN5HqrDn3l -qw3jzKsOfSarDeRJqw59sKsN5darDn0Zqw3mjasOerCrDeQiqw59JKsN5b6rDeRrqw56sasN -4/6rDnzyEN9SzqsN4s2rDnrEFQS0casOevGrDePWqw598asN5m+rDnx5EN9EJ6sN47YQ31Lu -qw3izqsOe6YQ30Q3qw3lM6sOeiCrDeZUqw59CBUEtKGrDeYIqw3lDasOecyrDeLIEN9S/qsN -5OWrDnyvqw3luasN5PwQ31MOqw3kvqsOfCurDnnCEN9THqsOfFSrDeYAqw3mtKsN5QurDeSA -qw562hDfRHerDnuxqw56W6sN5oAQ31M+qw3kiasOfQqrDeRjqw57jqsN5lKrDnoYEN9TTqsN -45irDntmqw3mJqsN45gQ31Neqw57YKsOe7qrDeUZqw57N6sOejqrDeX4qw3jeBUEswCrDnp3 -qw3kPasOewurDnoVqw3lxqsOfEmrDeNYEN9TfqsOfCqrDeSEqw562asOee+rDeFbqw595xDf -U46rDnofqw3jgqsN5EOrDnwFqw56rasN5EqrDn2yqw59sqsN5n2rDeK4qw571asOeoerDeQj -qw59JasOeq2rDeOwqw586asOfC0Q31Oeqw3j/6sOfPSrDeYFqz12o6sOfaWrDn0zqw3j16sO -fMirDeOQEN9C5qsN5nmrDnveqw3k/RDfU76rDeO3qw58oKsOegyrDeTVZRLaSqsN5lurDnzM -qw3mj6sOfHOrDnurqw3lNKsN5LWrDnoyqw3kLKsN5Q6rDnpfqw3iuaEojpKrDeR7qw3l06sN -5OarDnnyqw3kJ6sOe5mrDeTBqw56UasN5lyrDeabFQSzoKsOeuoQ30M2qw569asOe2gQ30NG -qw3mVKsN5durDnoDEN9DZqsN45SrDeYnqw58k6sN4sKrDePZqw57xqsOezirDno7qw3l+asN -43mrDnrSqw3lPasN5pKrDnspEN9DhqsOewyrDnoWqw3lx6sN41kVBLPgqw55yqsOetqrDnnw -qw3hXBUEs/CrDeLwqw3kDqsOfAmrDnquqw55xKsOfNWrDeZxqw3j/6sOe9erDnqIqw3mtasO -fSarDn3Fqw3mJ6sN47MQ30PGqw57sqsOel2rDeaBqw5896sOfGurDnruqw3kRqsN46qrDeYs -qw57kqsN49mrDnzJqw59p6sOe5irDntnqw3jmasN47irDnyhqw3jgKsOepqrDeZiqw58AxDf -Q9arDeOjqw3lGqsOfHWrDeVBqw3k3KsOee6rDejfqw59JasOfEoQ31Ktqw3jY6sN4ryhKI6T -qw3lDqsOfSSrDeR9qw596KsOfGirDeToqw3lyKsOemWrDeRNqw59s6sOesWrDeTCqw58dxDf -RBYPwu+wqw3kJBDfUt2rDnyLqw3mAqsOfP4Q30Qmqw3j7asN5AAQ31Ltqw3mCqsOegqrDebB -EN9ENqsOeparDeXgqw3kSasOfFqrDeLJqw57PasOeui7rQ0Aqw593BDfUv2rDnzHqw3lNasO -e82rDeN6EN9TDasOe5WrDeUPqw3lEKsOehirDeXJqw57NxDfUx2rDeaLqw59r6D/8xyrDnnx -EN9TLasN5cmrDn3iEN9EdqsOfEGrDebDqw58CqsOeq+rDnnFZRLaShDfUz0Q30SGqw572KsO -eomrDea3EN9TTasOerarDeOiqw3jsasOe7OrDnpfqw3mgqsOfBirDeY5qw57k6sN5lYQ31Nt -qw3lN6sOe1qrDeOVqw3kfasOfBurDntoqw3mKKsOfKKrDeOaqw5646sOe6erDeRUqw3kSKsO -ezmrDno8qw3l+qsOfHarDeN6FQSzH6sOedGrDeUvEN9TjasOew2rDeNaqw55+6sOfEurDeW8 -qw3kxqsN4sOrDnqrqw563qsN4V2rDeR+qw598asOe5erDeTHqw3kf6sN5FgQ30LVEN9TnasN -5E6rDn20qw57+qsN5fqrDeRVEN9C5RDfU62rDeQlqw59J6sOewOrDnnNqw3kHKsOfRoQ30L1 -EN9TvasN5AOrDnz4qw3mOKsOe22rDePaqw58yqsN5lOrDnzWqw58GhDfQxWrDnsSFQSzb6sN -47mrDeYYqw3mT6sN5j6rDeZjqw3jiKsOfSurDeQRqw3lNqsOe9WrDeaoqw582KsN5I6rDnua -ZRLaaKsN5RCrDny7qw3mrKsOfcCrDeTpEN9DNWROcn6rDeTDqw56RKsOe1sQ30NFqw3lIasN -5hxlEywpqw3kCKsOe3AQ30NVqw3kO6EojpOrDea5qw56f6sN5oyrDnygEN9DZasN5oSrDnq3 -qw57lKsN5lmrDnvaHkZMUG9zaXRpdmU4U21hbGxJbnRlZ2VyQ2x1c3RlcgAAAAUBAgMECxZG -TEhvb2tQcmltaXRpdmVDbHVzdGVyAAAM3wAEwBjheoJ9HWJAWrcraGOWqEBatzXt+JZ/QFq3 -LnrSLjZAWrc7l/Ei7UBatz0bE4G9QFq3VgTvUwrAGOKZeo/pF8AY4VGdgYWnwBji9hgfsXbA -GOJZTk/vLMAY4gN0KMbJwBjhug2tZ63AGOEwS/gmF0BatzZnmxnMQFq3Kze8LvDAGOKwQlKK -58AY4t3YjcsvwBjiq+hQttLAGOKDpGTOt0BatwQ6+COTQFq3ByAaUbtAWrcF2Bu1aMAY4lDd -aCWDQFq3Fl+91blAWrcd3PU4/UBatwesMUvSQFq3FeF+NLnAGOGj4ER41sAY4V+CRpa9QFq3 -LMYxqBlAWrc0zqlF30Batw4k8VERQFq3AwVt/grAGOEhaC+UQkBatz8eIwC2wBjiJqIrOJPA -GOHVrvOd8sAY4Z16z6n3wBjhbr1M/QnAGOFBai2bRMAY4Ty/o+9ewBjhIre67NDAGOLcPzCX -eMAY4q0CLCoqwBjigbp/wy9AWrcuqqLWWcAY4TJyQxN7QFq3NcQHK21AWrcGKeWsmEBatyhY -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 -lYsXwBjiLJWKQGDAGOHV1zeJ2sAY4Z2BhaaewBjhbr1M/QnAGOFBai2bRMAY4Tz1U9STwBjh -Iw74wUfAGOLdCIQzAMAY4q2PGePXwBjigh8pkPNAWrc0FogBwsAY4nIUGZJ4QFq3N9rNQJBA -WrcOgaMCz0BatyhleddcQFq3NOGJHHRAWrc3CRYpN0BatyCg9NeuwBjiARF394jAGOXa1aQL -48AY4wUQCjk/QFq3G5Zee7ZAWrcaCFRiWEBatxjEh4PtQFq3HEJV5ebAGOJjWJTsjMAY4jpf -d17cQFq3FWBO9TFAWrcembOazcAY4hZu104wwBjhzuTVAU8WRkxIb29rUHJpbWl0aXZlQ2x1 -c3RlcgAAKwIAAQRub2RlA2xvbgJpZAJpZAJpZAR0eXBlA2xhdAJpZAJpZARub2RlA2xvbgN3 -YXkFbm9kZXMDd2F5A2xvbgNsb24EdHlwZQNsb24Ebm9kZQRub2RlAmlkBG5vZGUDbGF0BHR5 -cGUCaWQEdHlwZQN5ZXMCaWQCaWQEdHlwZQRub2RlBHR5cGUDbG9uBG5vZGUEdHlwZQNsYXQD -bG9uA2xvbgRub2RlBHRhZ3MEbm9kZQRub2RlA2xhdARub2RlCGJ1aWxkaW5nBHR5cGUEdHlw -ZQR0eXBlAmlkBW5vZGVzA2xhdAJpZARub2RlBHR5cGUEbm9kZQNsb24DbG9uBHR5cGUDbGF0 -AmlkBG5vZGUDbGF0A2xvbgNsb24Ebm9kZQR0YWdzCGJ1aWxkaW5nBHRhZ3MIYnVpbGRpbmcE -dHlwZQNsYXQEdGFncwN5ZXMCaWQCaWQIYnVpbGRpbmcDU01QA2xvbgR0eXBlAmlkAmlkBG5v -ZGUIYnVpbGRpbmcDbG9uBG5vZGUDbG9uAmlkA2xhdAJpZANsYXQCaWQEbm9kZQNsb24DeWVz -BW5vZGVzA2xvbgNsb24DeWVzBHR5cGUEbm9kZQRub2RlBG5vZGUDbGF0BHR5cGUCaWQDeWVz -AmlkAmlkAmlkBHR5cGUEbm9kZQR0eXBlA2xvbgNsYXQDbGF0BHR5cGUDbGF0A2xvbgNsb24E -bm9kZQN5ZXMEbm9kZQRub2RlA2xhdARub2RlAmlkA3dheQVub2RlcwR0eXBlBHR5cGUDd2F5 -BW5vZGVzBHR5cGUEdHlwZQVub2RlcwR0eXBlA2xhdAJpZARub2RlBHR5cGUFbm9kZXMEdHlw -ZQVicmljawRub2RlA2xvbgNsb24EdHlwZQNsYXQCaWQEbm9kZQNsb24DbG9uA2xhdANsYXQE -dGFncwhidWlsZGluZwJpZAJpZAJpZANsb24DbG9uBHR5cGUCaWQCaWQEbm9kZQR0eXBlA2xv -bgRub2RlA2xvbgNsYXQCaWQDd2F5A2xhdAJpZAJpZARub2RlA2xvbgNsYXQEdGFncwNsb24D -bG9uBHRhZ3MEbm9kZQRub2RlCGJ1aWxkaW5nBG5vZGUEdHlwZQJpZAhidWlsZGluZwJpZAJp -ZAR0eXBlBG5vZGUEdHlwZQNsb24EdGFncwR0eXBlA2xhdANsb24DbG9uBG5vZGUIYnVpbGRp -bmcCaWQEbm9kZQRub2RlA2xhdARub2RlBHRhZ3MEdHlwZQN3YXkFbm9kZXMEdHlwZQNsb24E -dHlwZQN5ZXMDbGF0AmlkAmlkBG5vZGUEdHlwZQN5ZXMEdHlwZQRub2RlA2xvbgR0eXBlAmlk -A2xhdAJpZARub2RlAmlkA2xvbgNsb24CaWQDd2F5BW5vZGVzA2xhdANsYXQCaWQCaWQCaWQC -aWQEdHlwZQVub2RlcwNsb24DbG9uBHR5cGUCaWQCaWQEbm9kZQN3YXkDbG9uBG5vZGUDbG9u -A2xhdAJpZAN3YXkFbm9kZXMDbGF0AmlkAmlkBG5vZGUDbG9uA2xhdAR0eXBlAmlkBHR5cGUD -bG9uA2xvbgR0eXBlA3llcwR0eXBlBG5vZGUEbm9kZQR0eXBlBHRhZ3MEbm9kZQR0eXBlAmlk -Bm11c2xpbQJpZAJpZAR0eXBlBG5vZGUEdHlwZQNsb24IYnVpbGRpbmcEdHlwZQNsYXQDbG9u -A2xvbgRub2RlBG5vZGUEbm9kZQNsYXQEbm9kZQVub2RlcwR0eXBlBHR5cGUEdGFncwhidWls -ZGluZwNsYXQCaWQCaWQEbm9kZQR0YWdzCGJ1aWxkaW5nBG5vZGUDbG9uBHR5cGUCaWQDbGF0 -AmlkBG5vZGUEdGFncwNsb24DbG9uCGJ1aWxkaW5nA3llcwNsYXQDbGF0A2xhdAhidWlsZGlu -ZwJpZANsb24EdHlwZQJpZAJpZARub2RlA3llcwNsb24Ebm9kZQNsb24DbGF0AmlkA3llcwVu -b2RlcwNsYXQCaWQCaWQEbm9kZQNsb24DbGF0AmlkAmlkBHR5cGUDbG9uA2xvbgN5ZXMEdHlw -ZQJpZARub2RlBG5vZGUDeWVzAmlkBG5vZGUEdHlwZQJpZAN3YXkFbm9kZXMCaWQCaWQEdHlw -ZQRub2RlBHR5cGUDbG9uA3dheQR0eXBlA2xhdANsb24DbG9uBG5vZGUFbm9kZXMEdHlwZQRu -b2RlA2xhdARub2RlA2xhdAVub2RlcwR0eXBlA2xhdAJpZAJpZANsb24EdHlwZQJpZAJpZAR0 -YWdzAmlkA2xvbgNsb24DbGF0A2xhdANsYXQDbGF0AmlkA3dheQRub2RlBHRhZ3MEbm9kZQJp -ZAR0YWdzAmlkAmlkBHR5cGUEbm9kZQR0eXBlA2xvbgN5ZXMDbGF0BHR5cGUDbGF0A2xvbgNs -b24Ebm9kZQhidWlsZGluZwRub2RlBG5vZGUDbGF0BG5vZGUEdGFncwhidWlsZGluZwJubwR0 -eXBlAmlkBHR5cGUDeWVzA2xhdAJpZARub2RlBHR5cGUDd2F5BW5vZGVzAzUwMARub2RlA2xv -bgNsb24EdHlwZQNsYXQCaWQEbm9kZQJpZANsb24DbG9uA3llcwR0eXBlA3llcwJpZANsYXQD -bGF0AmlkAmlkAmlkA3dheQVub2RlcwNsb24DbG9uBHR5cGUCaWQCaWQEbm9kZQJpZANsb24E -bm9kZQNsb24DbGF0AmlkAmlkBW5vZGVzA2xhdAJpZAJpZARub2RlA2xvbgNsYXQDd2F5Amlk -BHR5cGUDbG9uA2xvbgN3YXkFbm9kZXMFbm9kZXMEbm9kZQRub2RlBHR5cGUEdHlwZQRub2Rl -BHR5cGUCaWQEdHlwZQN5ZXMCaWQCaWQEdHlwZQRub2RlBHR5cGUDbG9uBHRhZ3MEdHlwZQNs -YXQDbG9uA2xvbgRub2RlBHR5cGUEbm9kZQRub2RlA2xhdARub2RlCGJ1aWxkaW5nBHR5cGUE -dHlwZQR0YWdzBHR5cGUCaWQDbGF0AmlkBG5vZGUEdHlwZQNsYXQEbm9kZQNsb24EdHlwZQJp -ZANsYXQCaWQEbm9kZQhidWlsZGluZwNsb24DbG9uBHRhZ3MIYnVpbGRpbmcSYnVpbGRpbmc6 -c3RydWN0dXJlCXJpdmVyYmFuawNsYXQDbGF0BHRhZ3MDeWVzAmlkCGJ1aWxkaW5nAmlkA2xv -bgNsb24EdHlwZQJpZAJpZARub2RlCGJ1aWxkaW5nA2xvbgRub2RlA2xvbgNsYXQCaWQDd2F5 -A2xhdAJpZAJpZARub2RlA2xvbgNsYXQDeWVzAmlkBHR5cGUDbG9uA2xvbgN5ZXMFbm9kZXME -dHlwZQRub2RlBG5vZGUCaWQFYnJpY2sFbm9kZXMEbm9kZQR0eXBlAmlkA2xhdAN5ZXMCaWQC -aWQCaWQEdHlwZQRub2RlBHR5cGUDbG9uA3llcwR0eXBlA2xhdANsb24DbG9uBG5vZGUCaWQD -d2F5BG5vZGUEbm9kZQNsYXQEbm9kZQN3YXkFbm9kZXMIYnVpbGRpbmcEdHlwZQVub2RlcwR0 -eXBlBHR5cGUDbGF0BHR5cGUDbGF0AmlkAmlkBG5vZGUFbm9kZXMEdHlwZQRub2RlA2xvbgR0 -eXBlAmlkA2xhdAJpZARub2RlBG5vZGUDbG9uA2xvbgNsYXQDbGF0A2xhdAR0YWdzCGJ1aWxk -aW5nAmlkAmlkA2xvbgR0eXBlAmlkAmlkBG5vZGUDd2F5A2xvbgRub2RlA2xvbgNsYXQCaWQD -bGF0AmlkAmlkBG5vZGUDbG9uA2xhdAR0YWdzBHRhZ3MDbGF0BHR5cGUDbG9uA2xvbghidWls -ZGluZwRub2RlBG5vZGUDeWVzBG5vZGUEdHlwZQJpZAR0YWdzCGJ1aWxkaW5nAmlkAmlkBHR5 -cGUEbm9kZQR0eXBlA2xvbgR0YWdzA2xvbgNsYXQDbG9uBG5vZGUIYnVpbGRpbmcCaWQEbm9k -ZQRub2RlA2xhdARub2RlBHR5cGUEdHlwZQN3YXkFbm9kZXMEdHlwZQNsYXQDeWVzA2xhdAJp -ZAJpZARub2RlA3llcwR0eXBlAmlkBG5vZGUDbG9uBHR5cGUCaWQDbGF0AmlkBG5vZGUCaWQD -bG9uA2xvbgNsYXQDd2F5BW5vZGVzCGJ1aWxkaW5nA2xhdANsYXQDbGF0BG5vZGUCaWQCaWQC -aWQCaWQFbm9kZXMEdHlwZQNsb24EdHlwZQJpZAJpZARub2RlA3dheQVub2RlcwNsb24Ebm9k -ZQNsb24DbGF0AmlkA3dheQVub2RlcwNsYXQCaWQCaWQEbm9kZQNsb24DbGF0BHR5cGUEdHlw -ZQR0eXBlA2xvbgNsb24EdHlwZQN5ZXMEbm9kZQRub2RlBHRhZ3MEbm9kZQR0eXBlAmlkAmlk -AmlkBHR5cGUEbm9kZQNsb24IYnVpbGRpbmcDbG9uA2xhdANsb24Ebm9kZQRub2RlBG5vZGUD -bGF0BG5vZGUEdGFncwR0eXBlAmlkA2xvbgVub2RlcwR0eXBlA2xhdAhidWlsZGluZwNsYXQC -aWQEbm9kZQNsb24EdGFncwhidWlsZGluZwRub2RlA2xvbgR0eXBlAmlkA2xhdAJpZARub2Rl -BHRhZ3MEbm9kZQNsb24DbG9uA2xhdAN5ZXMCaWQDbGF0A2xhdAhidWlsZGluZwJpZAN3YXkE -bm9kZQRub2RlAmlkBW5vZGVzBHR5cGUCaWQCaWQCaWQEbm9kZQNsb24EdHlwZQNsb24DbG9u -A2xvbgJpZARub2RlA3llcwJpZAR0eXBlA3dheQVub2RlcwR0eXBlBHR5cGUDd2F5BW5vZGVz -CGJ1aWxkaW5nBHRhZ3MDbGF0AmlkAmlkBG5vZGUDd2F5BG5vZGUDbG9uBHR5cGUCaWQDbGF0 -AmlkBG5vZGUEdHlwZQNsb24DbG9uBW5vZGVzBHR5cGUDbGF0A2xhdANsYXQCaWQDbG9uBHR5 -cGUCaWQCaWQEbm9kZQhidWlsZGluZwNsb24Ebm9kZQNsb24DbGF0AmlkAmlkA2xhdAJpZAJp -ZARub2RlA2xvbgNsYXQFbm9kZXMUU01QIFBFUkdVUlVBTiBSQUtZQVQDbGF0BHR5cGUDbG9u -A2xvbgRub2RlBG5vZGUEdGFncwhidWlsZGluZwRub2RlBHR5cGUCaWQEdGFncwJpZAJpZAR0 -eXBlBG5vZGUEdHlwZQNsb24Ebm9kZQR0eXBlA2xhdANsb24DbG9uBG5vZGUIYnVpbGRpbmcD -eWVzBG5vZGUEbm9kZQNsYXQEbm9kZQR0YWdzCGJ1aWxkaW5nBHR5cGUCaWQEdHlwZQNsYXQC -aWQDbGF0AmlkAmlkBG5vZGUCaWQDd2F5BW5vZGVzBG5vZGUDbG9uBHR5cGUCaWQDbGF0Amlk -BG5vZGUDeWVzA2xvbgNsb24DbGF0A3llcwJpZANsYXQDbGF0A2xhdARub2RlA3llcwJpZAJp -ZAhyZWxpZ2lvbgN3YXkFbm9kZXMDbG9uBHR5cGUCaWQCaWQEbm9kZQRub2RlA3dheQNsb24E -bm9kZQNsb24DbGF0AmlkAmlkBHR5cGUDbGF0AmlkAmlkBG5vZGUDbG9uA2xhdAN3YXkDbGF0 -BHR5cGUDbG9uA2xvbgN3YXkFbm9kZXMFbm9kZXMEbm9kZQRub2RlBHR5cGUSYnVpbGRpbmc6 -c3RydWN0dXJlBG5vZGUEdHlwZQJpZAR0eXBlAmlkAmlkBHR5cGUEbm9kZQNsb24DbGF0BHRh -Z3MDbG9uA2xhdANsb24Ebm9kZQRub2RlA3dheQRub2RlBG5vZGUDbGF0BG5vZGUEdHlwZQR0 -eXBlA2xhdAR0YWdzA2xhdAJpZAJpZARub2RlBW5vZGVzBG5vZGUDbG9uBHR5cGUCaWQDbGF0 -AmlkBG5vZGUEdGFncwNsb24DbG9uA2xhdAhidWlsZGluZwhidWlsZGluZwNsYXQEdHlwZQNs -YXQDbGF0BHR5cGUEbm9kZQR0YWdzAmlkAmlkA3llcwJpZANsb24EdHlwZQJpZAJpZARub2Rl -A2xhdAhidWlsZGluZwNsb24Ebm9kZQNsb24DbGF0AmlkA3dheQNsYXQCaWQCaWQEbm9kZQNs -b24DbGF0A3llcwVub2RlcwR0eXBlA2xvbgNsb24DeWVzBHR5cGUCaWQEbm9kZQRub2RlBG5v -ZGUEdHlwZQJpZAJpZAJpZAJpZAR0eXBlBG5vZGUDbG9uA3llcwJpZANsb24DbGF0BG5vZGUC -aWQDd2F5BW5vZGVzBHR5cGUEbm9kZQRub2RlA2xhdARub2RlA3dheQVub2RlcwhidWlsZGlu -ZwR0eXBlA3dheRBwbGFjZV9vZl93b3JzaGlwBHR5cGUDbGF0A2xvbgNsYXQEdHlwZQR0eXBl -A2xhdAJpZARub2RlBW5vZGVzBHR5cGUEbm9kZQNsb24EdHlwZQJpZANsYXQCaWQEbm9kZQNs -b24DbG9uA2xhdANsYXQDbGF0A2xhdAhidWlsZGluZwJpZAJpZAJpZANsb24JY29weXJpZ2h0 -BHR5cGUEdHlwZQJpZAJpZARub2RlA2xvbgRub2RlA2xvbgNsYXQCaWQFbm9kZXMDbGF0Amlk -AmlkBG5vZGUDbG9uA2xhdAR0YWdzCGJ1aWxkaW5nBHR5cGUDbG9uA2xvbgR0YWdzBG5vZGUE -bm9kZQR0eXBlA3llcwR0eXBlBHR5cGUEbm9kZQJpZAhidWlsZGluZwR0eXBlAmlkAmlkBHR5 -cGUEbm9kZQNsb24EdGFncwhidWlsZGluZwNsb24DbGF0BG5vZGUCaWQEbm9kZQRub2RlA2xh -dARub2RlA2xvbgR0eXBlA3dheQVub2RlcwR0eXBlA2xhdANsYXQDeWVzA2xhdAJpZARub2Rl -A3llcwJpZAR0eXBlA2xvbgR0eXBlBG5vZGUCaWQDbGF0AmlkBG5vZGUDbG9uA2xvbgNsYXQD -eWVzAmlkA3dheQNsYXQDbGF0A2xhdAN3YXkFbm9kZXMCaWQEdHlwZQJpZAR0eXBlA2xvbgR0 -eXBlAmlkAmlkBG5vZGUEdHlwZQN3YXkDbG9uBG5vZGUDbG9uA2xhdAJpZAN3YXkFbm9kZXMF -bm9kZXMCaWQCaWQEbm9kZQNsb24EdHlwZQNsb24DbG9uBG5vZGUEdHlwZQR0eXBlA2xhdARu -b2RlBG5vZGUDbGF0BG5vZGUDbGF0BG5vZGUIYnVpbGRpbmcCaWQIYnVpbGRpbmcDbG9uBHR5 -cGUCaWQCaWQEbm9kZQR0YWdzA3llcwNsb24Ebm9kZQNsb24DbGF0AmlkAmlkA2xhdAJpZAJp -ZARub2RlA2xvbgNsYXQEdHlwZQNsb24DbG9uA3dheQRub2RlBG5vZGUDeWVzBG5vZGUEdHlw -ZQJpZAN5ZXMEdHlwZQJpZAJpZAJpZAR0eXBlBG5vZGUDbG9uA2xvbgNsYXQDbGF0A2xvbgNs -b24Ebm9kZQhidWlsZGluZwN3YXkEbm9kZQRub2RlA2xhdARub2RlA3llcwJpZAR0eXBlAmlk -BW5vZGVzBHR5cGUEdHlwZQNsYXQDbGF0A3dheQVub2RlcwR0eXBlA2xhdANsb24CaWQEbm9k -ZQN3YXkEbm9kZQNsb24EdHlwZQJpZANsYXQCaWQEbm9kZQJpZANsb24DbG9uA2xhdAVub2Rl -cwR0eXBlBHR5cGUDbGF0A2xhdANsYXQEbm9kZQJpZAJpZANsb24EdHlwZQR0eXBlAmlkAmlk -BG5vZGUIYnVpbGRpbmcDbG9uBG5vZGUDbG9uA2xhdAJpZAJpZAVub2RlcwNsYXQCaWQCaWQE -bm9kZQNsb24DbGF0BHR5cGUDbG9uA2xvbgRub2RlBG5vZGUEdGFncwhidWlsZGluZwRub2Rl -BHR5cGUCaWQEdGFncwJpZAJpZAR0eXBlBG5vZGUDbG9uA2xhdAJpZANsb24DbGF0BG5vZGUI -YnVpbGRpbmcDeWVzBG5vZGUEbm9kZQNsYXQEbm9kZQhidWlsZGluZwNsb24EdHlwZQJpZAR0 -eXBlA2xhdANsYXQDeWVzBHR5cGUCaWQDbGF0BG5vZGUDd2F5BW5vZGVzBHR5cGUDbG9uBHR5 -cGUEbm9kZQJpZANsYXQCaWQEbm9kZQR0eXBlA2xvbgNsb24DbGF0A2xvbgN5ZXMDbGF0A2xh -dANsYXQDeWVzAmlkBHRhZ3MCaWQCaWQEdHlwZQN3YXkFbm9kZXMDbG9uBHR5cGUEdHlwZQJp -ZAJpZARub2RlA3dheQNsb24Ebm9kZQNsb24DbGF0AmlkAmlkBHR5cGUDbGF0AmlkAmlkBG5v -ZGUDbG9uA2xhdAN3YXkFbm9kZXMDbG9uA2xvbgN3YXkFbm9kZXMEdHlwZQRub2RlBG5vZGUE -dHlwZQR0eXBlBG5vZGUCaWQDbGF0AmlkAmlkBHR5cGUEbm9kZQNsb24EdGFncwJpZANsb24D -bGF0BG5vZGUEbm9kZQRub2RlA2xhdARub2RlBHR5cGUEdHlwZQNsYXQDbGF0BG5vZGUEdHlw -ZQR0YWdzA2xhdAJpZARub2RlA3dheQR0eXBlA2xvbgR0eXBlBG5vZGUCaWQDbGF0AmlkBG5v -ZGUDbG9uA2xvbgNsYXQEdGFncwhidWlsZGluZwhidWlsZGluZwNsYXQDbGF0A2xhdAR0YWdz -A3llcwJpZAR0eXBlA2xhdAJpZANsb24EdHlwZQJpZAJpZARub2RlBHR5cGUDbG9uBG5vZGUD -bG9uA2xhdAJpZAN3YXkDbGF0AmlkAmlkBG5vZGUDbG9uA2xhdAN5ZXMDeWVzA2xvbgNsb24E -dHlwZQJpZARub2RlA2xhdARub2RlBG5vZGUEdHlwZQJpZAN5ZXMIYnVpbGRpbmcDd2F5Amlk -AmlkBHR5cGUEbm9kZQNsb24DeWVzAmlkA2xvbgNsYXQEbm9kZQJpZAVub2RlcwR0eXBlBG5v -ZGUEbm9kZQNsYXQEbm9kZQRub2RlA3dheQVub2RlcwR0eXBlBHR5cGUDd2F5BHR5cGUDbGF0 -A2xhdARub2RlBHR5cGUDbGF0AmlkBG5vZGUFbm9kZXMEdHlwZQR0eXBlA2xvbgR0eXBlBG5v -ZGUCaWQDbGF0AmlkBG5vZGUDbG9uA2xvbgNsYXQDbGF0A2xvbgNsYXQDbGF0CGJ1aWxkaW5n -AmlkBHR5cGUCaWQDbG9uBHR5cGUCaWQCaWQEbm9kZQR0eXBlA2xvbgRub2RlA2xvbgNsYXQC -aWQDbGF0AmlkAmlkBG5vZGUDbG9uA2xhdAR0YWdzBHRhZ3MDbG9uBHR5cGUIYnVpbGRpbmcN -YnVpbGRpbmc6cm9vZgRub2RlBG5vZGUDeWVzBG5vZGUEdHlwZQJpZAhidWlsZGluZwJpZAJp -ZAR0eXBlBG5vZGUDbGF0A2xvbgNsYXQIYnVpbGRpbmcDbGF0BG5vZGUEdHlwZQRub2RlA2xh -dARub2RlA3llcwJpZANsYXQCaWQDeWVzBHRhZ3MDbG9uBHR5cGUEdHlwZQJpZAJpZANsb24D -bG9uA2xhdANsYXQDbGF0AmlkBG5vZGUEbm9kZQVub2RlcwR0eXBlBHR5cGUEdHlwZQRub2Rl -AmlkA3dheQVub2RlcwJpZAJpZAR0eXBlBG5vZGUDbG9uA2xvbgNsYXQEbm9kZQNsb24CaWQI -d2F0ZXJ3YXkEbm9kZQRub2RlA2xhdARub2RlBHRhZ3MIYnVpbGRpbmcDbG9uBHR5cGUEdHlw -ZQNsYXQDbGF0BG5vZGUQcGxhY2Vfb2Zfd29yc2hpcARub2RlAmlkA2xhdARub2RlBHR5cGUD -bG9uBHR5cGUEbm9kZQJpZANsYXQCaWQEbm9kZQNsb24DbG9uA2xhdAJpZAN3YXkEdHlwZQNs -YXQDbGF0A2xhdAhidWlsZGluZwR0YWdzAmlkBHR5cGUEdGFncwhidWlsZGluZwNsb24EdHlw -ZQJpZAJpZARub2RlBHR5cGUEdGFncwNsb24Ebm9kZQNsb24DbGF0AmlkA2xvbgJpZANsYXQC -aWQCaWQEbm9kZQNsb24DbGF0A3dheQNsb24DbG9uBG5vZGUEbm9kZQN5ZXMEbm9kZQR0eXBl -AmlkA3llcwR0eXBlAmlkAmlkAmlkBHR5cGUEbm9kZQNsb24Ebm9kZQNsb24DbGF0BG5vZGUI -YnVpbGRpbmcDd2F5BG5vZGUEbm9kZQNsYXQEbm9kZQRub2RlA3llcwJpZAR0eXBlAmlkBW5v -ZGVzBHR5cGUEdHlwZQNsYXQDbGF0BG5vZGUDd2F5BW5vZGVzA2xhdAJpZARub2RlAmlkA3dh -eQR0eXBlA2xvbgR0eXBlBG5vZGUCaWQDbGF0AmlkBG5vZGUDbG9uA2xvbgNsYXQEdHlwZQR0 -eXBlA2xhdANsYXQDbGF0BHRhZ3MCaWQEdHlwZQNsb24EdHlwZQJpZAJpZARub2RlBHR5cGUE -bm9kZQNsb24Ebm9kZQNsb24DbGF0AmlkCGJ1aWxkaW5nA2xhdAJpZAJpZARub2RlA2xvbgNs -YXQFbm9kZXMDbG9uA2xvbgRub2RlBG5vZGUEdGFncwhidWlsZGluZwRub2RlBHR5cGUCaWQC -aWQEdGFncwJpZAJpZAR0eXBlBG5vZGUDbGF0A2xvbgN5ZXMDbG9uA2xhdARub2RlBG5vZGUI -YnVpbGRpbmcEbm9kZQNsYXQEbm9kZQhidWlsZGluZwR0eXBlBHR5cGUCaWQDbGF0A2xhdARu -b2RlA3llcwNsYXQCaWQEbm9kZQVub2RlcwR0eXBlBHR5cGUDbG9uBHR5cGUEdHlwZQRub2Rl -AmlkA2xhdAJpZANsb24DbG9uA2xhdARub2RlA3llcwR0YWdzA2xhdANsb24DbGF0A2xhdAN5 -ZXMCaWQCaWQCaWQEdHlwZQN3YXkFbm9kZXMDbG9uBHR5cGUCaWQCaWQEbm9kZQR0eXBlA2xh -dANsb24EdHlwZQRub2RlA2xvbgNsYXQCaWQEbm9kZQNsYXQCaWQCaWQEbm9kZQNsb24DbGF0 -AmlkA3dheQNsb24Fbm9kZXMFbm9kZXMEdHlwZQN3YXkFbm9kZXMEbm9kZQRub2RlBHR5cGUE -bm9kZQNsb24EdHlwZQJpZARub2RlAmlkBHR5cGUEbm9kZQNsYXQEdGFncwhidWlsZGluZwNs -b24DbGF0BG5vZGUCaWQEdHlwZQRub2RlA2xhdARub2RlBHR5cGUEdHlwZQNsYXQDbGF0A2xh -dAR0eXBlBHRhZ3MGc2Nob29sA2xhdAJpZAR0eXBlBG5vZGUDd2F5BHR5cGUDbG9uBHR5cGUE -dHlwZQRub2RlAmlkA2xhdAJpZANsb24DbG9uA2xhdAR0eXBlBG5vZGUCaWQDbGF0A2xvbgNs -YXQDbGF0BHRhZ3MEdGFncwhidWlsZGluZwJpZAR0eXBlAmlkCGJ1aWxkaW5nA2xvbgR0eXBl -AmlkAmlkBG5vZGUEdHlwZQhidWlsZGluZwNsb24Ebm9kZQNsb24DbGF0AmlkBHR5cGUDd2F5 -A2xhdAJpZAJpZARub2RlA2xvbgNsYXQDeWVzBHR5cGUDbG9uA3llcwJpZARub2RlBG5vZGUD -bG9uBHR5cGUEbm9kZQR0eXBlAmlkCGJ1aWxkaW5nA3dheQJpZAR0eXBlBG5vZGUDbGF0A3ll -cwJpZANsb24DbGF0BG5vZGUCaWQFbm9kZXMEdHlwZQN3YXkEdHlwZQRub2RlA2xhdARub2Rl -BW5vZGVzBHR5cGUDd2F5BHR5cGUDbGF0A2xhdAR0eXBlAmlkBHR5cGUEdHlwZQNsb24EdHlw -ZQJpZAJpZAR0eXBlBHRhZ3MDbG9uA2xvbgNsYXQDbGF0A2xhdARub2RlBW5vZGVzBG5vZGUC -aWQCaWQCaWQEbm9kZQNsb24EdGFncwNsb24EdGFncwRub2RlBG5vZGUDd2F5BHR5cGUIYnVp -bGRpbmcEdHlwZQNsYXQDbGF0BG5vZGUIYnVpbGRpbmcDbGF0AmlkBG5vZGUEdHlwZQNsb24E -dHlwZQRub2RlAmlkA2xhdAJpZARub2RlA2xvbgNsb24DbGF0BW5vZGVzBHR5cGUDeWVzA2xh -dANsb24DbGF0A2xhdAJpZAR0eXBlA3llcwJpZANsb24EdHlwZQJpZAJpZARub2RlBHR5cGUD -eWVzA2xvbgRub2RlBG5vZGUDbG9uA2xhdAJpZAJpZANsYXQCaWQCaWQEbm9kZQNsb24DbGF0 -A3dheQVub2RlcwNsb24EdHlwZQN3YXkFbm9kZXMEbm9kZQRub2RlBW5vZGVzBHR5cGUEbm9k -ZQNsb24EdHlwZQJpZAVub2RlcwR0eXBlAmlkBHR5cGUEbm9kZQNsYXQDbG9uA2xvbgNsYXQE -bm9kZQhidWlsZGluZwR0eXBlBG5vZGUDbGF0BG5vZGUEdGFncwJpZAR0eXBlBHR5cGUDbGF0 -A2xhdAN3YXkDbGF0AmlkBG5vZGUEdHlwZQNsb24EdHlwZQR0eXBlBG5vZGUCaWQDbGF0Amlk -A2xvbgNsb24DbGF0BG5vZGUEdGFncwR0YWdzA2xhdANsb24DbGF0A2xhdAhidWlsZGluZwJp -ZAR0eXBlBHRhZ3MIYnVpbGRpbmcDbG9uBHR5cGUCaWQCaWQEbm9kZQR0eXBlBHRhZ3MDbGF0 -BHR5cGUEbm9kZQNsb24DbG9uA2xhdAJpZANsYXQCaWQCaWQEbm9kZQNsb24DbGF0CGJ1aWxk -aW5nAmlkA2xvbgN3YXkFbm9kZXMEbm9kZQRub2RlA3llcwRub2RlA2xvbgR0eXBlAmlkA3ll -cwR0eXBlAmlkAmlkBHR5cGUEbm9kZQNsYXQCaWQCaWQDbG9uA2xhdARub2RlCGJ1aWxkaW5n -A3dheQVub2RlcwJpZAR0eXBlBG5vZGUDbGF0BG5vZGUCaWQEdHlwZQJpZAVub2RlcwR0eXBl -BHR5cGUDbGF0A2xhdAN3YXkFbm9kZXMEdHlwZQNsYXQCaWQEdHlwZQRub2RlA3dheQR0eXBl -A2xvbgR0eXBlBG5vZGUCaWQDbGF0AmlkBHR5cGUDbG9uA2xvbgNsYXQEbm9kZQR0eXBlBHR5 -cGUDbGF0A2xvbgNsYXQDbGF0BHRhZ3MDeWVzCWdlbmVyYXRvcgJpZAR0eXBlCHJlbGlnaW9u -A2xvbgR0eXBlAmlkAmlkBG5vZGUEdHlwZQNsYXQDbG9uBG5vZGUDbG9uA2xhdAJpZAJpZAhi -dWlsZGluZwNsYXQCaWQCaWQEbm9kZQNsb24DbGF0BW5vZGVzA2xvbgRub2RlBG5vZGUEbm9k -ZQR0YWdzCGJ1aWxkaW5nBHR5cGUEdHlwZQRub2RlAmlkBHRhZ3MIYnVpbGRpbmcCaWQEdHlw -ZQRub2RlA2xhdAR0YWdzA3llcwNsb24DbGF0BG5vZGUIYnVpbGRpbmcEdHlwZQR0eXBlBG5v -ZGUDbGF0BG5vZGUIYnVpbGRpbmcQcGxhY2Vfb2Zfd29yc2hpcAR0eXBlBHR5cGUDbGF0A2xh -dAN5ZXMDbGF0AmlkBHR5cGUEbm9kZQVub2RlcwR0eXBlBHR5cGUDbG9uBHR5cGUEbm9kZQJp -ZANsYXQCaWQEdHlwZQNsb24DbG9uA2xhdARub2RlA3llcwJpZANsYXQDbGF0A2xvbgNsYXQD -bGF0A3llcwJpZAJpZAR0eXBlA2xhdAN3YXkFbm9kZXMDbG9uBHR5cGUCaWQCaWQEbm9kZQR0 -eXBlA3dheQNsb24Ebm9kZQNsYXQCaWQFbm9kZXMEdHlwZQNsYXQCaWQCaWQEbm9kZQNsb24D -bGF0BW5vZGVzBHR5cGUDbG9uBW5vZGVzBHR5cGUEbm9kZQR0eXBlBG5vZGUEdHlwZQJpZAJp -ZAR0eXBlBG5vZGUDbGF0BHRhZ3MIYnVpbGRpbmcCaWQDbG9uA2xhdARub2RlBHR5cGUEdHlw -ZQRub2RlA2xhdARub2RlA3dheQR0eXBlBHR5cGUDbGF0A2xvbgNsYXQEdGFncwNsYXQCaWQE -dHlwZQRub2RlBHRhZ3MEdHlwZQNsb24EdHlwZQRub2RlAmlkA2xhdAJpZAJpZANsb24DbG9u -A2xhdAR0eXBlBG5vZGUEdGFncwNsYXQDbG9uA2xhdANsYXQEdGFncwhidWlsZGluZwhidWls -ZGluZwJpZAR0eXBlAmlkCGJ1aWxkaW5nBG5vZGUEbm9kZQJpZAN3YXkFbm9kZXMCaWQEbm9k -ZQNsb24EdHlwZQR0eXBlAmlkAmlkAmlkBHR5cGUIYnVpbGRpbmcDd2F5BW5vZGVzBHR5cGUD -bGF0AmlkA2xhdARub2RlBW5vZGVzBHR5cGUEdHlwZQRub2RlA2xhdARub2RlA3dheQVub2Rl -cwR0eXBlA2xhdANsb24DbGF0A2xhdAR0eXBlAmlkBHR5cGUEdHlwZQN5ZXMDbG9uBHR5cGUC -aWQCaWQEbm9kZQR0eXBlBHRhZ3MDbG9uBG5vZGUDbG9uA2xhdAJpZAR0eXBlA2xhdAJpZAJp -ZARub2RlA2xvbgNsYXQIYnVpbGRpbmcDbG9uBG5vZGUEbm9kZQR0YWdzBG5vZGUEdHlwZQJp -ZAVub2RlcwR0eXBlAmlkBHR5cGUEbm9kZQNsYXQIYnVpbGRpbmcCaWQDbGF0A2xvbgRub2Rl -A2xvbgR0YWdzCGJ1aWxkaW5nBHRhZ3MEdHlwZQRub2RlA2xhdARub2RlA3llcwR0eXBlCGJ1 -aWxkaW5nAmlkBHR5cGUDbGF0A2xhdAhidWlsZGluZwNsYXQCaWQEdHlwZQRub2RlA3dheQR0 -eXBlA2xvbgR0eXBlBG5vZGUCaWQDbGF0AmlkBHR5cGUDbG9uA2xvbgNsYXQEbm9kZQVub2Rl -cwR0eXBlA2xhdANsb24DbGF0A2xhdAN5ZXMCaWQCaWQEdHlwZQN5ZXMCaWQDbG9uBHR5cGUC -aWQCaWQEbm9kZQR0eXBlA3llcwNsb24Ebm9kZQNsYXQCaWQDbG9uAmlkA3dheQNsYXQCaWQC -aWQEbm9kZQNsb24DbGF0A3dheQVub2RlcwNsb24Fbm9kZXMEdHlwZQRub2RlBG5vZGUEbm9k -ZQR0eXBlBG5vZGUEdHlwZQJpZAVub2RlcwR0eXBlAmlkBHR5cGUEbm9kZQNsYXQCaWQDbG9u -A2xhdARub2RlBHR5cGUEdHlwZQRub2RlA2xhdARub2RlBHRhZ3MIYnVpbGRpbmcEdHlwZQJp -ZAR0eXBlA2xhdANsb24DbGF0A3dheQNsYXQCaWQEdHlwZQRub2RlA2xvbgR0eXBlA2xvbgR0 -eXBlBG5vZGUCaWQDbGF0AmlkAmlkA2xvbgNsb24DbGF0BHR5cGUEbm9kZQR0YWdzA2xhdANs -b24DbGF0A2xhdAN5ZXMEdGFncwhidWlsZGluZwJpZAR0eXBlBHRhZ3MIYnVpbGRpbmcDbG9u -BHR5cGUCaWQCaWQEbm9kZQR0eXBlBG5vZGUDbG9uBG5vZGUDbGF0AmlkBHRhZ3MIYnVpbGRp -bmcCaWQDbGF0AmlkBG5vZGUDbGF0BG5vZGUDd2F5A2xvbgVub2RlcwRub2RlAmlkA2xhdAN5 -ZXMEbm9kZQR0eXBlAmlkA3llcwR0eXBlAmlkAmlkBHR5cGUEbm9kZQNsYXQCaWQDbG9uA2xh -dARub2RlCGJ1aWxkaW5nA3dheQR0eXBlBHR5cGUEbm9kZQNsYXQEbm9kZQJpZAR0eXBlAmlk -BW5vZGVzBHR5cGUEdHlwZQNsYXQDbG9uA2xhdARub2RlA3dheQVub2RlcwNsYXQCaWQEdHlw -ZQRub2RlA3dheQVub2RlcwR0eXBlBHR5cGUDbG9uBHR5cGUEbm9kZQJpZANsYXQCaWQCaWQD -bG9uA2xvbgNsYXQEdHlwZQRub2RlBHR5cGUDbGF0A2xvbgNsYXQDbGF0BHR5cGUEdGFncwN5 -ZXMCaWQEdHlwZQNsb24EdHlwZQJpZAJpZARub2RlBHR5cGUDbGF0A2xvbgRub2RlA2xhdAJp -ZARub2RlCGJ1aWxkaW5nFUpBTEFOIEtQLk1FTEFZVSBLRUNJTANsYXQCaWQEbm9kZQNsYXQE -dGFncwNsb24Ebm9kZQJpZANsYXQIYnVpbGRpbmcEbm9kZQR0eXBlBHRhZ3MIYnVpbGRpbmcC -aWQEdHlwZQRub2RlA2xhdAR0YWdzA3llcwNsb24DbGF0BG5vZGUIYnVpbGRpbmcCaWQPYnVp -bGRpbmc6bGV2ZWxzBHR5cGUEdHlwZQRub2RlA2xhdARub2RlCGJ1aWxkaW5nBHR5cGUDd2F5 -BHR5cGUDbGF0A2xvbgNsYXQDbGF0A3llcwNsYXQCaWQEdHlwZQRub2RlBW5vZGVzBHR5cGUC -aWQEdHlwZQNsb24EdHlwZQRub2RlAmlkA2xhdAJpZAJpZANsb24DbGF0BHR5cGUEbm9kZQN5 -ZXMCaWQDbGF0A2xhdANsYXQDeWVzAmlkAmlkBHR5cGUDd2F5BW5vZGVzBHR5cGUEbm9kZQNs -b24EdHlwZQJpZAJpZARub2RlBHR5cGUDbG9uBG5vZGUDbGF0AmlkA3dheQVub2RlcwNsYXQC -aWQEbm9kZQNsYXQEdHlwZQN3YXkDbG9uBW5vZGVzBHR5cGUEbm9kZQR0eXBlA2xhdAR0eXBl -BHR5cGUDbGF0CGJ1aWxkaW5nA2xhdARub2RlBHR5cGUEbm9kZQNsYXQEbm9kZQNsYXQDbG9u -CGJ1aWxkaW5nAmlkBHR5cGUDbG9uBHR5cGUCaWQCaWQEdHlwZQN5ZXMDbG9uA2xhdAhidWls -ZGluZwNsb24DbGF0A2xhdAR0YWdzA2xvbgJpZARub2RlBG5vZGUEdHlwZQJpZAN3YXkFbm9k -ZXMCaWQEdHlwZQRub2RlA2xhdAN5ZXMDbG9uA2xhdARub2RlA3llcwJpZAR0eXBlBHR5cGUE -bm9kZQNsYXQEbm9kZQN5ZXMCaWQEdHlwZQN3YXkFbm9kZXMcSkFMQU4gQlVLSVREVVJJIFRB -TkpBS0FOIFhJVgR0eXBlA2xhdANsb24DbGF0A3dheQNsYXQCaWQEdHlwZQRub2RlAmlkBHR5 -cGUEdHlwZQNsb24EdHlwZQRub2RlAmlkA2xhdAJpZAJpZANsb24DbG9uA2xhdAR0eXBlBG5v -ZGUDd2F5A2xhdANsb24DbGF0A2xhdAVub2RlcwN3YXkFbm9kZXMCaWQEdHlwZQR0eXBlBHR5 -cGUDbG9uBHR5cGUCaWQCaWQEbm9kZQR0eXBlBHRhZ3MDbG9uBG5vZGUEbm9kZQNsYXQCaWQD -bGF0AmlkBG5vZGUDbGF0B2FtZW5pdHkDbG9uBG5vZGUCaWQDbGF0BHRhZ3MEbm9kZQR0eXBl -AmlkBHR5cGUEbm9kZQNsYXQIYnVpbGRpbmcDbG9uA2xhdARub2RlBHRhZ3MIYnVpbGRpbmcE -dHlwZQR0eXBlBG5vZGUDbGF0BG5vZGUEdGFncwN5ZXMEdHlwZQJpZAR0eXBlA2xhdANsb24D -bGF0CGJ1aWxkaW5nA2xhdAJpZAR0eXBlBG5vZGUDd2F5DmJ1aWxkaW5nOndhbGxzBHR5cGUD -bG9uBHR5cGUEbm9kZQJpZANsYXQCaWQCaWQDbG9uA2xvbgNsYXQEdHlwZQRub2RlA3llcwNs -YXQDbGF0A2xhdAVub2RlcwR0eXBlA3llcwJpZAR0eXBlA3llcwJpZAR0eXBlA2xvbgR0eXBl -AmlkAmlkBG5vZGUEdHlwZQNsb24DbG9uBG5vZGUDbGF0AmlkA3llcwJpZAJpZANsYXQCaWQE -bm9kZQNsYXQDd2F5BW5vZGVzA3dheQVub2RlcwNsYXQDbG9uA3dheQR0eXBlBG5vZGUDbGF0 -BHR5cGUEbm9kZQR0eXBlBW5vZGVzBHR5cGUCaWQEdHlwZQRub2RlA2xhdAJpZANsb24DbGF0 -BG5vZGUFbm9kZXMEdHlwZQR0eXBlBG5vZGUDbGF0BG5vZGUIYnVpbGRpbmcEdHlwZQR0eXBl -A2xhdANsb24DbGF0A3dheQNsYXQCaWQDbGF0BHR5cGUEbm9kZQR0eXBlA2xvbgR0eXBlBG5v -ZGUCaWQDbGF0AmlkAmlkA2xvbgNsYXQEdHlwZQRub2RlBHRhZ3MEdGFncwNsYXQDbGF0A2xh -dAN5ZXMIYnVpbGRpbmcJYWRkcjpjaXR5AmlkBHR5cGUIYnVpbGRpbmcDbG9uBHR5cGUCaWQE -bm9kZQR0eXBlAmlkBHRhZ3MDbG9uBG5vZGUDbGF0AmlkCGJ1aWxkaW5nAmlkCGJ1aWxkaW5n -A2xhdAJpZARub2RlA2xhdANsb24Dd2F5BW5vZGVzBG5vZGUEdHlwZQN5ZXMEbm9kZQR0eXBl -A3llcwJpZAJpZAR0eXBlBG5vZGUDbGF0A3llcwJpZANsb24DbGF0A2xvbgRub2RlA3dheQVu -b2RlcwR0eXBlBHR5cGUEbm9kZQNsYXQEbm9kZQN3YXkEdGFncwR0eXBlAmlkAmlkBHR5cGUE -dHlwZQNsYXQDbG9uA2xhdAJpZAN3YXkFbm9kZXMDbGF0AmlkBHR5cGUEbm9kZQN3YXkFbm9k -ZXMEdHlwZQR0eXBlA2xvbgRub2RlBHR5cGUEbm9kZQJpZANsYXQCaWQDbG9uAmlkA2xhdAR0 -eXBlBG5vZGUEdHlwZQNsYXQDbGF0A2xhdAR0YWdzBHR5cGUCaWQEdHlwZQNsb24EdHlwZQJp -ZARub2RlBHR5cGUDbGF0CGJ1aWxkaW5nA2xvbgRub2RlA2xhdANsYXQCaWQEbm9kZQNsYXQE -dGFncwNsb24DbG9uBG5vZGUEdHlwZQhidWlsZGluZwRub2RlBHR5cGUEdGFncwhidWlsZGlu -ZwJpZAR0eXBlBG5vZGUDbGF0A2xvbgR0YWdzA3llcwNsb24DbGF0A2xvbgRub2RlAmlkBHR5 -cGUEdHlwZQRub2RlA2xhdARub2RlCGJ1aWxkaW5nBHR5cGUCaWQDbGF0A3dheQNsYXQDbG9u -A3llcwJpZAR0eXBlA3llcwNsb24EdHlwZQJpZAJpZAR0eXBlA2xvbgNsYXQDeWVzA2xhdANs -YXQEdHlwZQJpZARub2RlA2xhdARub2RlBG5vZGUDd2F5AmlkBG5vZGUDbG9uA2xhdARub2Rl -BW5vZGVzBHR5cGUEdHlwZQR0eXBlBG5vZGUDbGF0BG5vZGUEdHlwZQR0eXBlA2xhdANsb24D -bGF0BHR5cGUIYnVpbGRpbmcDbGF0AmlkBHR5cGUEbm9kZRBjYXBhY2l0eTpwZXJzb25zBHR5 -cGUDbG9uBHR5cGUEbm9kZQJpZANsYXQCaWQCaWQDbG9uA2xhdAR0eXBlBG5vZGUDd2F5EHBs -YWNlX29mX3dvcnNoaXADbGF0A2xhdANsYXQEdGFncwhidWlsZGluZwJpZAR0eXBlBHRhZ3MD -bG9uBHR5cGUCaWQEbm9kZQR0eXBlA3llcwNsb24Ebm9kZQNsYXQCaWQEdHlwZQhidWlsZGlu -ZwNsYXQCaWQEbm9kZQNsYXQIYnVpbGRpbmcCaWQDbG9uBG5vZGUEdHlwZQN5ZXMDbG9uBHR5 -cGUEbm9kZQNsb24Dd2F5BW5vZGVzAmlkBHR5cGUEbm9kZQNsYXQDbG9uA2xhdARub2RlA3ll -cwR0YWdzAmlkBHR5cGUEdHlwZQRub2RlA2xhdARub2RlA3llcwJpZAR0eXBlAmlkA3dheQVu -b2RlcwR0eXBlA2xhdANsb24DbGF0A3dheQNsYXQCaWQEdHlwZQRub2RlAmlkBHR5cGUEdHlw -ZQNsb24Ebm9kZQR0eXBlBG5vZGUCaWQDbGF0AmlkA2xvbgJpZANsYXQEdHlwZQRub2RlA3dh -eQNsYXQDbGF0A2xhdAVub2RlcwN3YXkFbm9kZXMEdHlwZQJpZAR0eXBlAmlkBHRpbGUDbG9u -BHR5cGUCaWQEbm9kZQR0eXBlBHRhZ3MCaWQEbm9kZQNsb24DbGF0AmlkA2xvbgNsYXQCaWQE -bm9kZQNsYXQIYnVpbGRpbmcOYnVpbGRpbmc6d2FsbHMDbG9uBG5vZGUEdHlwZQR0eXBlBHRh -Z3MEbm9kZQR0eXBlA3dheQJpZAR0eXBlBG5vZGUDbGF0CGJ1aWxkaW5nA2xvbgNsYXQDbG9u -BG5vZGUEdGFncwhidWlsZGluZwR0eXBlBHR5cGUEbm9kZQNsYXQEbm9kZQR0YWdzA3llcwR0 -eXBlAmlkAmlkBHR5cGUDbGF0A2xvbgNsYXQIYnVpbGRpbmcDbGF0AmlkBHR5cGUEbm9kZQNs -b24Dd2F5BHR5cGUDbG9uA2xvbgRub2RlBHR5cGUEbm9kZQJpZAJpZANsb24DbGF0AmlkA2xh -dAR0eXBlBG5vZGUDbGF0A2xhdANsYXQDeWVzBHR5cGUDeWVzAmlkAmlkBHR5cGUDeWVzCGJ1 -aWxkaW5nA3dheQZtdXNsaW0DbG9uBHR5cGUCaWQEbm9kZQR0eXBlA2xhdAN5ZXMDbG9uBG5v -ZGUDbGF0AmlkAmlkBW5vZGVzBHR5cGUDbGF0AmlkBG5vZGUDbGF0A3dheQVub2RlcwNsb24D -bG9uA3dheQRub2RlBHR5cGUEdHlwZQRub2RlBHR5cGUFbm9kZXMEdHlwZQJpZAR0eXBlBG5v -ZGUDbGF0A2xvbgNsb24DbGF0BG5vZGUDbG9uC2FjY2Vzczpyb29mBHR5cGUEdHlwZQRub2Rl -A2xhdARub2RlCGJ1aWxkaW5nBHR5cGUCaWQEdHlwZQNsYXQDbGF0BG5vZGUDd2F5A2xhdAJp -ZAR0eXBlBG5vZGUEdHlwZQNsb24Ebm9kZQR0eXBlBG5vZGUCaWQDbGF0AmlkA2xvbgNsYXQE -dHlwZQRub2RlBHRhZ3MEdGFncwNsYXQDbGF0A2xhdANsYXQDeWVzCGJ1aWxkaW5nAmlkBHR5 -cGUCaWQIYnVpbGRpbmcDbG9uBHR5cGUCaWQEbm9kZQR0eXBlA2xhdAhidWlsZGluZwNsb24E -bm9kZQNsYXQCaWQDbGF0AmlkBG5vZGUDbGF0A3llcwNsb24DbG9uA3dheQVub2RlcwRub2Rl -BHR5cGUEbm9kZQRub2RlBHR5cGUDeWVzBHRhZ3MCaWQCaWQEdHlwZQRub2RlA2xhdANsb24D -eWVzAmlkA2xvbgNsYXQEbm9kZQNsb24Dd2F5BW5vZGVzBHR5cGUEdHlwZQRub2RlA2xhdARu -b2RlCGJ1aWxkaW5nAmlkBHR5cGUCaWQCaWQDd2F5BHR5cGUEdHlwZQNsYXQDbGF0A2xhdAN3 -YXkFbm9kZXMEdHlwZQNsYXQCaWQEdHlwZQRub2RlBG5vZGUDd2F5BW5vZGVzBHR5cGUDbG9u -BG5vZGUEdHlwZQRub2RlAmlkA2xhdAR0eXBlA2xvbgNsYXQDbGF0A2xhdAR0YWdzBG5vZGUE -bm9kZQJpZARub2RlBHR5cGUEdGFncwNsb24DbG9uBHR5cGUEdHlwZQR0YWdzBHR5cGUDbGF0 -A2xhdARub2RlAmlkBHR5cGUDbG9uBG5vZGUEdHlwZQRub2RlAmlkA2xhdAJpZANsb24CaWQD -bGF0BHR5cGUEbm9kZQhidWlsZGluZwNsYXQDbGF0A2xhdAN3YXkDeWVzC2FjY2Vzczpyb29m -AmlkBHR5cGUDeWVzBHR5cGUCaWQDbG9uBHR5cGUCaWQEbm9kZQR0eXBlA2xhdANsb24Ebm9k -ZQNsYXQIYnVpbGRpbmcDd2F5A2xvbgJpZANsYXQEbm9kZQNsYXQDeWVzAmlkA2xvbgNsb24C -aWQFbm9kZXMEdHlwZQhidWlsZGluZwRub2RlA2xvbgR0eXBlA3dheQVub2RlcxBwbGFjZV9v -Zl93b3JzaGlwBG5vZGUEdHlwZQN3YXkCaWQEdHlwZQRub2RlA2xhdANsb24EdHlwZQNsb24D -bGF0A2xvbgRub2RlBHR5cGUEdHlwZQR0eXBlBG5vZGUDbGF0BG5vZGUEdGFncwR0eXBlAmlk -BHR5cGUDbGF0A2xhdAhidWlsZGluZwNsYXQCaWQEdHlwZQRub2RlBHR5cGUDbG9uA2xvbgRu -b2RlBHR5cGUEbm9kZQJpZAJpZANsb24DbGF0AmlkA2xhdAR0eXBlBG5vZGUDbGF0A2xhdANs -YXQDbGF0BW5vZGVzBHRhZ3MIYnVpbGRpbmcCaWQEdHlwZQR0YWdzA3llcwNsb24EdHlwZQJp -ZARub2RlBHR5cGUDbGF0A3llcwNsb24Ebm9kZQNsYXQIYnVpbGRpbmcDbGF0AmlkBG5vZGUD -bGF0CGJ1aWxkaW5nA2xvbgNsb24EdGlsZQRub2RlBHR5cGUDeWVzBG5vZGUEdHlwZQVub2Rl -cwR0eXBlAmlkBHR5cGUEbm9kZQNsYXQDbG9uA2xvbgNsYXQEbm9kZQNsb24DeWVzBHRhZ3MC -aWQEdHlwZQR0eXBlBG5vZGUDbGF0BG5vZGUDeWVzAmlkBHR5cGUCaWQDd2F5BW5vZGVzBHR5 -cGUDbGF0A2xhdAN3YXkFbm9kZXMDbGF0BG5vZGUCaWQEdHlwZQRub2RlAmlkBHR5cGUEdHlw -ZQNsb24Ebm9kZQR0eXBlBG5vZGUCaWQDbGF0BHR5cGUDbG9uA2xhdAN3YXkFbm9kZXMFbm9k -ZXMEdHlwZQNsYXQDbGF0AmlkBHR5cGUDbG9uBHR5cGUCaWQEbm9kZQR0eXBlBHR5cGUDbG9u -A2xvbgRub2RlA2xhdAR0YWdzA2xhdAJpZARub2RlA2xhdANsb24DbG9uAmlkBHR5cGUEbm9k -ZQJpZAR0eXBlBHRhZ3MEbm9kZQR0eXBlAmlkBHR5cGUEbm9kZQNsYXQDbG9uCGJ1aWxkaW5n -A2xvbgNsYXQEbm9kZQNsb24EdGFncwhidWlsZGluZwR0eXBlBHR5cGUEbm9kZQRub2RlA2xh -dARub2RlBHRhZ3MEdHlwZQJpZAJpZAR0eXBlA2xhdANsYXQDbG9uCGJ1aWxkaW5nA2xhdAJp -ZANsYXQEdHlwZQRub2RlA3dheQR0eXBlA2xvbgRub2RlBHR5cGUEbm9kZQJpZANsYXQEdHlw -ZQNsYXQDbG9uA2xhdAN5ZXMEdHlwZQN5ZXMCaWQDbGF0A2xhdAR0eXBlAmlkA2xvbgR0eXBl -CGJ1aWxkaW5nA3dheQNsb24EdHlwZQJpZARub2RlBHR5cGUCaWQDeWVzA2xvbgRub2RlA2xh -dAJpZAJpZAVub2RlcwR0eXBlA2xhdAJpZARub2RlA2xhdAR0eXBlA3dheQVub2RlcwNsb24D -bG9uA2xvbgN3YXkEbm9kZQR0eXBlBHR5cGUEbm9kZQR0eXBlBHR5cGUCaWQCaWQEdHlwZQRu -b2RlA2xhdANsb24EdGFncwNsb24DbGF0BG5vZGUDbG9uBHR5cGUEdHlwZQNsb24Ebm9kZQRu -b2RlA2xhdARub2RlBHR5cGUCaWQDeWVzCGJ1aWxkaW5nBHR5cGUDbGF0A2xhdANsYXQCaWQF -bm9kZXMCaWQCaWQDbGF0BHR5cGUEbm9kZQJpZAR0eXBlA2xvbgRub2RlBHR5cGUEbm9kZQJp -ZANsYXQEdHlwZQNsb24DbGF0BHRhZ3MEdGFncwhidWlsZGluZwN5ZXMDbGF0A2xhdAJpZANs -b24EdHlwZQhidWlsZGluZwNsb24EdHlwZQJpZARub2RlBHR5cGUIYnVpbGRpbmcDbG9uBHR5 -cGUEbm9kZQNsYXQCaWQCaWQDbGF0BG5vZGUDbG9uA2xhdAR0eXBlA3llcwNsb24DbG9uA3dh -eQVub2RlcwR0eXBlBHR5cGUEdHlwZQJpZAR0eXBlA2xhdAN5ZXMCaWQDbGF0BG5vZGUDd2F5 -BW5vZGVzBHR5cGUEbm9kZQRub2RlA2xhdAN3YXkDbGF0BHR5cGUFbm9kZXMEdHlwZQJpZAR0 -eXBlA2xvbgR0eXBlAmlkBHR5cGUDbG9uBG5vZGUDbGF0A2xhdAJpZARub2RlA2xhdAR0YWdz -AmlkA2xvbgNsb24Ebm9kZQR0eXBlA3dheRVKQUxBTiBLUC5NRUxBWVUgS0VDSUwEbm9kZQR0 -eXBlAmlkBHR5cGUEbm9kZQNsYXQDbG9uBHRhZ3MDbG9uA2xhdARub2RlA2xvbgNsYXQEdGFn -cwR0eXBlBHR5cGUEbm9kZQNsYXQEbm9kZQhidWlsZGluZwR0eXBlAmlkBHRhZ3MIYnVpbGRp -bmcEdHlwZQNsYXQDbGF0BHR5cGUEdGFncwNsYXQCaWQEdHlwZQRub2RlAmlkA2xhdAR0eXBl -A2xvbgRub2RlBHR5cGUEbm9kZQJpZANsYXQDbG9uA2xhdAR0eXBlA3dheQVub2RlcwRub2Rl -A2xhdANsYXQDeWVzAmlkBHR5cGUDeWVzBHR5cGUCaWQDbG9uBHR5cGUCaWQEbm9kZQR0eXBl -AmlkA2xvbgRub2RlA2xhdAhidWlsZGluZwN3YXkDbGF0AmlkBG5vZGUDbGF0BHR5cGUCaWQD -bG9uA2xvbgNsb24CaWQFbm9kZXMEdHlwZQRub2RlBHR5cGUEdHlwZQN3YXkFbm9kZXMEdHlw -ZQRub2RlBHR5cGUDd2F5AmlkAmlkBHR5cGUEbm9kZQNsYXQDbG9uBHR5cGUDbG9uA2xhdARu -b2RlA2xvbgR0eXBlA3llcwR0eXBlBHR5cGUDbG9uBG5vZGUEbm9kZQNsYXQEbm9kZQR0eXBl -AmlkBHRhZ3MEdHlwZQNsYXQDbGF0CGJ1aWxkaW5nA2xhdAJpZAR0eXBlBG5vZGUEdHlwZQR0 -eXBlA2xvbgRub2RlBHR5cGUEbm9kZQJpZANsYXQEdHlwZQNsb24DbGF0BW5vZGVzBHRhZ3MD -bGF0A2xhdAhidWlsZGluZwRuYW1lAmlkA2xvbgR0eXBlBHRhZ3MIYnVpbGRpbmcDbG9uBHR5 -cGUCaWQEbm9kZQR0eXBlBHRhZ3MDeWVzAmlkBG5vZGUDbG9uA2xhdAhidWlsZGluZwJpZAJp -ZANsYXQEbm9kZQNsb24DbGF0BHR5cGUDbG9uAmlkA2xvbgNsb24IYnVpbGRpbmcEdHlwZQN5 -ZXMEbm9kZQR0eXBlAmlkA3dheQVub2RlcwR0eXBlAmlkAmlkBHR5cGUEbm9kZQNsYXQDbG9u -A2xvbgNsYXQEbm9kZQNsb24DeWVzAmlkBHR5cGUEdHlwZQRub2RlBG5vZGUDbGF0BG5vZGUD -bG9uBHR5cGUDeWVzAmlkA3dheQVub2RlcwR0eXBlA2xhdANsYXQDbGF0A3dheQJpZAJpZANs -YXQEdHlwZQRub2RlA2xvbgR0eXBlBHR5cGUDbG9uBG5vZGUEdHlwZQRub2RlAmlkA2xhdAR0 -eXBlA2xvbgNsYXQDd2F5BW5vZGVzBHR5cGUFbm9kZXMEdHlwZQNsYXQDbGF0BG5vZGUDbG9u -AmlkBHR5cGUDbG9uBHR5cGUCaWQEbm9kZQR0eXBlBHRhZ3MCaWQDbG9uBG5vZGUDbGF0CGJ1 -aWxkaW5nAmlkAmlkA2xhdARub2RlA2xvbgNsYXQDd2F5A2xvbgNsb24DbG9uBHR5cGUEdGFn -cwRub2RlBHR5cGUEbm9kZQJpZANsb24EdGFncwJpZARub2RlBHR5cGUEbm9kZQNsYXQDbG9u -AmlkA2xvbgNsYXQEbm9kZQNsb24EdGFncwhidWlsZGluZwhidWlsZGluZwR0eXBlBHR5cGUE -bm9kZQRub2RlA2xhdAR0YWdzBHR5cGUCaWQEdHlwZQNsYXQEbm9kZQNsYXQCaWQEdHlwZQRu -b2RlA3dheQVub2RlcwR0eXBlA2xvbgRub2RlBHR5cGUEbm9kZQJpZANsYXQEdHlwZQNsb24D -bGF0A3llcwR0eXBlA3llcwJpZAhlbGVtZW50cwNsYXQDbGF0AmlkA2xvbgNsb24EdHlwZQJp -ZAhidWlsZGluZwN3YXkDbG9uAmlkBHR5cGUCaWQEbm9kZQR0eXBlAmlkA2xvbgRub2RlA2xh -dAJpZAVub2RlcwR0eXBlAmlkAmlkA2xhdARub2RlA2xvbgNsYXQDd2F5A2xvbgNsb24DbG9u -A3dheQVub2RlcwR0eXBlBHR5cGUEbm9kZQR0eXBlBG5vZGUEdHlwZQRub2RlAmlkBHR5cGUD -eWVzAmlkBG5vZGUEdHlwZQRub2RlA2xhdANsb24CaWQDbG9uA2xhdARub2RlA2xvbgR0YWdz -BHR5cGUEbm9kZQRub2RlA2xhdAhidWlsZGluZwJpZAJpZAR0eXBlA2xvbgR0eXBlAmlkBHR5 -cGUIYnVpbGRpbmcDbG9uA2xhdAhidWlsZGluZwJpZANsYXQDbGF0BHR5cGUEbm9kZQR0YWdz -A3llcwNsb24IYnVpbGRpbmcEbm9kZQRub2RlAmlkAmlkBHR5cGUEbm9kZQNsYXQDbG9uA3ll -cwNsb24DbGF0BG5vZGUDbG9uBW5vZGVzBHR5cGUEdHlwZQR0eXBlA2xvbgRub2RlBG5vZGUD -bGF0BG5vZGUEdHlwZQJpZAN5ZXMCaWQFYnJpY2sEdHlwZQNsYXQDbGF0A2xhdAN5ZXMCaWQC -aWQCaWQDbGF0BHR5cGUEbm9kZQN3YXkFbm9kZXMEdHlwZQNsb24Ebm9kZQR0eXBlBG5vZGUC -aWQDbGF0BHR5cGUDbG9uA2xhdAN3YXkFbm9kZXMEdHlwZQNsYXQDbGF0BW5vZGVzBHR5cGUC -aWQDbG9uBHR5cGUDd2F5BW5vZGVzBHR5cGUDbG9uBHR5cGUCaWQEbm9kZQR0eXBlATIDbG9u -BG5vZGUDbGF0AmlkAmlkA2xhdARub2RlA2xvbgNsYXQEdHlwZQNsb24DbG9uA2xvbgR0YWdz -CGJ1aWxkaW5nAmlkA3dheQR0eXBlBG5vZGUEdHlwZQJpZAJpZAR0eXBlBG5vZGUDbGF0A2xv -bgJpZAR0YWdzA2xvbgNsYXQEbm9kZQNsb24EdGFncwhidWlsZGluZwR0eXBlBHR5cGUEbm9k -ZQRub2RlA2xhdAN5ZXMIYnVpbGRpbmcEdHlwZQR0YWdzCGJ1aWxkaW5nBHR5cGUDbGF0BHRh -Z3MDbGF0AmlkBHR5cGUEbm9kZQJpZAR0eXBlA2xvbgNsb24Ebm9kZQR0eXBlBG5vZGUCaWQD -bGF0A2xvbgNsYXQEdHlwZQN3YXkFbm9kZXMDbGF0A2xhdAN5ZXMCaWQDbG9uA2xvbgR0eXBl -A3llcwR0eXBlAmlkA2xvbgR0eXBlAmlkBG5vZGUEdHlwZQNsb24Ebm9kZQNsYXQIYnVpbGRp -bmcDd2F5AmlkAmlkA2xhdARub2RlA2xvbgNsYXQCaWQDbG9uA2xvbgNsb24CaWQEdGFncwVu -b2RlcwR0eXBlA3dheQR0eXBlBW5vZGVzBHR5cGUEbm9kZQR0eXBlBG5vZGUCaWQDd2F5BW5v -ZGVzBG5hbWUCaWQEbm9kZQR0eXBlBG5vZGUDbGF0A2xvbgJpZANsb24DbGF0BG5vZGUDbG9u -BHR5cGUEdHlwZQN5ZXMEdHlwZQR0eXBlBG5vZGUEbm9kZQNsYXQEdGFncwR0eXBlBHR5cGUD -bGF0CGJ1aWxkaW5nA2xhdAJpZAR0eXBlBG5vZGUDbG9uBHR5cGUDbG9uBG5vZGUEdHlwZQRu -b2RlAmlkA2xhdAR0eXBlA2xvbgNsYXQEdGFncwhidWlsZGluZwNsYXQDbGF0BHR5cGUCaWQD -bG9uA2xvbgR0eXBlBHRhZ3MIYnVpbGRpbmcEdHlwZQNsb24EdHlwZQJpZARub2RlBHR5cGUE -dGFncwN5ZXMDbG9uBG5vZGUDbGF0CGJ1aWxkaW5nAmlkAmlkAmlkAmlkA2xhdARub2RlA2xv -bgNsYXQDbG9uA2xvbgNsb24IYnVpbGRpbmcDeWVzBHR5cGUEbm9kZQRub2RlBHR5cGUEbm9k -ZQJpZAVub2RlcwR0eXBlAmlkBG5vZGUEdHlwZQRub2RlA2xhdANsb24CaWQDbG9uA2xhdARu -b2RlA2xvbgN5ZXMCaWQEdHlwZQR0eXBlBG5vZGUEbm9kZQNsYXQDeWVzAmlkBHR5cGUDd2F5 -BW5vZGVzBHR5cGUEdHlwZQNsYXQDbG9uA3dheQVub2RlcwNsYXQCaWQEdHlwZQRub2RlBHR5 -cGUDbG9uBG5vZGUEdHlwZQRub2RlAmlkA2xhdAR0eXBlA2xvbgNsYXQEdHlwZQN3YXkFbm9k -ZXMEdHlwZQVub2RlcwJpZANsYXQDbGF0BHR5cGUEdHlwZQJpZANsb24DbG9uBHR5cGUDbG9u -BHR5cGUCaWQEdHlwZQR0YWdzCGJ1aWxkaW5nAmlkA2xvbgRub2RlAmlkA2xhdAJpZAJpZAJp -ZANsYXQEbm9kZQNsb24CaWQDbG9uA2xvbgNsb24DbGF0A3dheQR0YWdzBHR5cGUDbG9uCGJ1 -aWxkaW5nA2xhdARub2RlBHR5cGUEbm9kZQJpZAR0YWdzAmlkBG5vZGUEdHlwZQRub2RlA2xh -dANsb24CaWQDbG9uA2xhdARub2RlA2xvbgJpZAR0YWdzCGJ1aWxkaW5nBHR5cGUEdHlwZQRu -b2RlBG5vZGUDbGF0BHRhZ3MDeWVzBG5vZGUDbG9uBHR5cGUCaWQIYnVpbGRpbmcEdHlwZQNs -YXQCaWQDbGF0AmlkBHR5cGUEbm9kZQN3YXkFbm9kZXMEbm9kZQNsb24EdHlwZQRub2RlAmlk -A2xhdAR0eXBlA3llcwNsb24DbGF0A3llcwJpZANsYXQDbGF0A2xvbgR0YWdzBG5vZGUEbm9k -ZQJpZAJpZAJpZARub2RlBG5vZGUDbG9uAmlkA2xvbgNsb24Dd2F5BW5vZGVzBHR5cGUDbGF0 -BHR5cGUEdHlwZQR0eXBlA2xhdARub2RlBHRhZ3MLYWNjZXNzOnJvb2YDbGF0AmlkBHR5cGUE -bm9kZQR0eXBlA2xvbgRub2RlBHR5cGUEbm9kZQJpZANsYXQEdHlwZQNsb24DbGF0CGJ1aWxk -aW5nBHRhZ3MDbGF0A2xhdAR0eXBlBHR5cGUDbG9uAmlkA2xvbgR0eXBlA2xvbgR0eXBlAmlk -BG5vZGUEdHlwZQNsYXQIYnVpbGRpbmcDbG9uBG5vZGUDbGF0BHRhZ3MIYnVpbGRpbmcEdHlw -ZQVub2RlcwJpZAJpZANsYXQEbm9kZQNsb24DbGF0BHRhZ3MDbG9uA2xvbgNsb24DeWVzAmlk -CGJ1aWxkaW5nBHR5cGUEbm9kZQR0eXBlBG5vZGUCaWQCaWQEbm9kZQR0eXBlBG5vZGUDbGF0 -A2xvbgJpZANsb24DbGF0BG5vZGUDbG9uA2xhdAN5ZXMFbm9kZXMEdHlwZQR0eXBlBG5vZGUE -bm9kZQNsYXQEdHlwZQN5ZXMEdHlwZQN5ZXMCaWQBMgR0eXBlA2xhdAR0eXBlA3llcwJpZANs -YXQCaWQEdHlwZQRub2RlAmlkA3dheQVub2RlcwR0eXBlA2xvbgRub2RlBHR5cGUEbm9kZQJp -ZANsYXQEdHlwZQNsb24DbGF0BHR5cGUDd2F5BW5vZGVzBHR5cGUFbm9kZXMCaWQDbGF0A2xh -dAR0eXBlBHR5cGUCaWQDbG9uA2xvbgR0eXBlBW5vZGVzBHR5cGUDbG9uBHR5cGUCaWQEdHlw -ZQNsb24Ebm9kZQNsYXQCaWQCaWQCaWQDbGF0BG5vZGUDbG9uA2xhdANsb24DbG9uA2xvbghi -dWlsZGluZwR0eXBlBHR5cGUDd2F5BG5vZGUEdHlwZQRub2RlAmlkA2xhdAJpZARub2RlBHR5 -cGUEbm9kZQNsYXQDbG9uA2xvbgJpZANsYXQEbm9kZQJpZANsb24EdGFncwR0eXBlBHR5cGUE -bm9kZQRub2RlA2xhdAN5ZXMIYnVpbGRpbmcEdHlwZQhidWlsZGluZwR0YWdzCGJ1aWxkaW5n -BHR5cGUDbGF0BHRhZ3MIYnVpbGRpbmcDbGF0AmlkBHR5cGUEbm9kZQR0eXBlAmlkBG5vZGUD -bG9uBHR5cGUEbm9kZQJpZANsYXQEdHlwZQNsb24DbGF0A3dheQVub2RlcwN5ZXMCaWQDbGF0 -A2xhdAR0eXBlAmlkA2xvbgNsb24EdHlwZQN5ZXMCaWQDbG9uBHR5cGUCaWQEdHlwZQN5ZXMC -aWQDbG9uBG5vZGUEbm9kZQJpZANsYXQDd2F5BW5vZGVzAmlkA2xhdAJpZANsYXQEbm9kZQRu -b2RlA2xvbgNsb24DbG9uAmlkA2xvbgNsYXQIYnVpbGRpbmcCaWQCaWQEdHlwZQN3YXkFbm9k -ZXMEdHlwZQN3YXkEdGFncwRub2RlBHR5cGUEbm9kZQJpZAR0eXBlA3dheQVub2RlcwJpZARu -b2RlBHR5cGUEbm9kZQNsYXQDbG9uAmlkA2xvbgNsYXQEbm9kZQNsb24EdHlwZQR0eXBlBHR5 -cGUEdHlwZQRub2RlBG5vZGUDbGF0BHRhZ3MEbm9kZQR0eXBlBHR5cGUEdHlwZQNsYXQIYnVp -bGRpbmcCaWQCaWQDbGF0A2xvbgR0eXBlBG5vZGUIcmVsaWdpb24Ebm9kZQNsb24EdHlwZQRu -b2RlAmlkA2xhdAR0eXBlBHRhZ3MDbG9uA2xhdAJpZAJpZANsYXQDbGF0CGJ1aWxkaW5nAmlk -A2xvbgNsb24EdHlwZQR0YWdzCGJ1aWxkaW5nBHR5cGUDbG9uBHR5cGUCaWQEdHlwZQR0YWdz -A3llcwNsb24Ebm9kZQRub2RlAmlkA2xhdAJpZAJpZANsYXQCaWQDbGF0BG5vZGUEbm9kZQNs -b24DbG9uA2xvbgJpZANsb24DbGF0CGJ1aWxkaW5nBHR5cGUDeWVzBG5vZGUEdHlwZQJpZANs -b24DeWVzBW5vZGVzBHR5cGUCaWQEbm9kZQR0eXBlBG5vZGUDbGF0A2xvbgJpZANsb24DbGF0 -BG5vZGUDbG9uA3llcwJpZAR0eXBlBHR5cGUEbm9kZQRub2RlA2xhdARub2RlA3llcwRub2Rl -BHR5cGUCaWQCaWQDd2F5BW5vZGVzBHR5cGUEdHlwZQNsYXQCaWQDd2F5BW5vZGVzA2xhdAJp -ZANsb24EdHlwZQRub2RlBG5vZGUDbG9uBHR5cGUEbm9kZQJpZANsYXQEdHlwZQVub2RlcwNs -b24DbGF0BW5vZGVzBHR5cGUEdHlwZQJpZAJpZANsYXQDbGF0AmlkA2xvbgNsb24EdHlwZQNs -b24Fbm9kZXMDbG9uBHR5cGUCaWQEdHlwZQhidWlsZGluZwRub2RlBG5vZGUCaWQCaWQEbm9k -ZQRub2RlA2xvbgJpZAN3YXkDbG9uA2xvbgR0eXBlBG5vZGUEdGFncwR0eXBlBHRhZ3MEdHlw -ZQNsYXQDbGF0BG5vZGUEdHlwZQRub2RlBG5vZGUDbGF0BHR5cGUIYnVpbGRpbmcCaWQCaWQC -aWQDbG9uA2xvbgR0eXBlA3dheQVub2RlcwNsb24EdHlwZQJpZAR0eXBlA2xvbgRub2RlAmlk -A2xhdAN5ZXMEdGFncwJpZAJpZAJpZANsYXQEbm9kZQNsb24CaWQDbGF0A2xvbgNsb24DbG9u -BG5vZGUDeWVzAmlkA3dheQhidWlsZGluZwR0eXBlAmlkA3dheQVub2RlcwRub2RlBHR5cGUE -dHlwZQRub2RlAmlkAmlkBHR5cGUCaWQEbm9kZQR0eXBlBG5vZGUDbGF0A2xvbgJpZANsb24D -bGF0BG5vZGUDbG9uAmlkA3dheQVub2RlcwR0eXBlBHR5cGUEbm9kZQRub2RlA2xhdAN3YXkF -bm9kZXMEbm9kZQR0eXBlBHR5cGUIYnVpbGRpbmcEdHlwZQNsYXQEdGFncwNsYXQCaWQEdHlw -ZQRub2RlAmlkA2xvbgRub2RlBHR5cGUEbm9kZQJpZANsYXQEdHlwZQNsb24DbGF0CGJ1aWxk -aW5nAmlkA2xhdANsYXQEdHlwZQR0YWdzAmlkA2xvbgNsb24EdHlwZQNsb24EdHlwZQJpZAR0 -eXBlCGJ1aWxkaW5nA2xvbgRub2RlBG5vZGUCaWQDbGF0BHRhZ3MIYnVpbGRpbmcCaWQDbGF0 -AmlkA2xhdARub2RlBG5vZGUDbG9uA2xvbgNsb24CaWQDbG9uA2xhdAR0YWdzA3llcwJpZAR0 -eXBlCGJ1aWxkaW5nBG5vZGUEdHlwZQJpZAN3YXkCaWQEbm9kZQR0eXBlBG5vZGUDbGF0A2xv -bgJpZANsb24DbGF0BG5vZGUDbG9uA3llcwR0eXBlA3llcwR0eXBlBHR5cGUEbm9kZQRub2Rl -A2xhdAJpZARub2RlBHR5cGUDeWVzA3dheQR0eXBlA2xhdAN5ZXMCaWQDbGF0AmlkA2xvbgR0 -eXBlBG5vZGUCaWQFbm9kZXMEbm9kZQNsb24EdHlwZQRub2RlAmlkA2xhdAR0eXBlA3dheQNs -b24DbGF0BW5vZGVzBHR5cGUCaWQCaWQDbGF0A2xhdAR0eXBlAmlkA2xvbgNsb24EdHlwZQVu -b2RlcwR0eXBlA2xvbgR0eXBlAmlkBHR5cGUDbG9uBG5vZGUEbm9kZQJpZANsYXQCaWQDbGF0 -AmlkA2xhdARub2RlBG5vZGUDbG9uA2xvbgNsb24CaWQDbG9uA2xhdAN5ZXMIYnVpbGRpbmcD -d2F5BHR5cGUEbm9kZQR0eXBlAmlkA2xvbgJpZARub2RlBHR5cGUEbm9kZQNsYXQDbG9uA2xv -bgNsYXQEbm9kZQJpZANsb24EdGFncwR0YWdzBHR5cGUEdHlwZQRub2RlBG5vZGUDbGF0BHR5 -cGUDeWVzBHR5cGUIYnVpbGRpbmcIYnVpbGRpbmcEdHlwZQNsYXQIYnVpbGRpbmcDbGF0Amlk -A2xvbgR0eXBlBG5vZGUCaWQEbm9kZQNsb24EdHlwZQRub2RlAmlkA2xhdAR0eXBlA3dheQNs -b24DbGF0BW5vZGVzA3llcwJpZAJpZANsYXQDbGF0AmlkA2xvbgNsb24EdHlwZQN5ZXMEdGFn -cwJpZANsb24EdHlwZQJpZAR0eXBlA3llcwJpZAVub2RlcwNsb24Ebm9kZQRub2RlAmlkA2xh -dAN3YXkFbm9kZXMCaWQDbGF0AmlkA2xhdARub2RlBG5vZGUDbG9uA2xvbgNsb24CaWQDbG9u -CGJ1aWxkaW5nAmlkAmlkA3dheQR0eXBlBW5vZGVzBHR5cGUDd2F5BHR5cGUEbm9kZQRub2Rl -BHR5cGUCaWQDbG9uA3dheQVub2RlcwJpZARub2RlBHR5cGUEbm9kZQNsYXQDbG9uAmlkA2xv -bgNsYXQEbm9kZQNsb24DeWVzAmlkBHR5cGVoVGhlIGRhdGEgaW5jbHVkZWQgaW4gdGhpcyBk -b2N1bWVudCBpcyBmcm9tIHd3dy5vcGVuc3RyZWV0bWFwLm9yZy4gVGhlIGRhdGEgaXMgbWFk -ZSBhdmFpbGFibGUgdW5kZXIgT0RiTC4Ebm9kZQRub2RlA2xhdAR0YWdzBHR5cGUEdHlwZQNs -YXQIYnVpbGRpbmcDbGF0AmlkA2xvbgR0eXBlBG5vZGUEbm9kZQNsb24EdHlwZQRub2RlAmlk -A2xhdAR0eXBlBHR5cGUDbG9uA2xhdAR0YWdzAmlkAmlkA2xhdANsYXQDbGF0CGJ1aWxkaW5n -AmlkA2xvbgRub2RlA2xvbgR0eXBlBHRhZ3MIYnVpbGRpbmcDbG9uBHR5cGUCaWQEdHlwZQR0 -YWdzA3llcwNsb24Ebm9kZQJpZANsYXQCaWQCaWQDbGF0AmlkA2xhdARub2RlBG5vZGUDbG9u -A2xvbgNsb24DbG9uAmlkA2xvbghidWlsZGluZwN3YXkDeWVzBHR5cGUDbG9uBG5vZGUEbm9k -ZQR0eXBlAmlkA3llcwR0eXBlAmlkBHR5cGUDbGF0A2xhdARub2RlA3dheQRub2RlBG5vZGUD -bGF0A3llcwJpZAN3YXkFbm9kZXMEdHlwZQJpZAN3YXkFbm9kZXMCaWQDbG9uBHR5cGUDbG9u -BHR5cGUCaWQEdHlwZQR0eXBlA2xvbgNsYXQEdGFncwJpZANsYXQDbGF0A2xhdANsb24DeWVz -BHR5cGUIYnVpbGRpbmcEbm9kZQR0eXBlAmlkAmlkBG5vZGUEdHlwZQRub2RlA2xhdANsb24C -aWQDbG9uA2xhdARub2RlA2xvbgRub2RlBW5vZGVzBHR5cGUEdHlwZQRub2RlBG5vZGUDbGF0 -BHRhZ3MIYnVpbGRpbmcEdHlwZQR0YWdzBHR5cGUDbGF0A3llcwNsYXQCaWQDbG9uBHR5cGUE -bm9kZQhidWlsZGluZwRub2RlA2xvbgR0eXBlBG5vZGUCaWQDbGF0BHR5cGUIYnVpbGRpbmcD -bG9uA2xhdANsYXQIcmVsaWdpb24IYnVpbGRpbmcCaWQCaWQDbGF0A2xhdAN5ZXMCaWQDbG9u -A2xvbgR0eXBlA3dheQVub2RlcwR0eXBlA2xvbgR0eXBlAmlkBHR5cGUDbGF0A3dheQNsb24E -bm9kZQRub2RlAmlkA2xhdARub2RlA3llcwJpZANsYXQCaWQDbGF0BG5vZGUEbm9kZQNsb24D -bG9uA2xvbgJpZANsb24DbGF0A3llcwJpZAR0YWdzBHR5cGUDd2F5AmlkA3dheQVub2RlcwRu -b2RlBHR5cGUCaWQCaWQEdHlwZQJpZARub2RlBHR5cGUEbm9kZQNsYXQDbG9uAmlkA2xvbgNs -YXQEbm9kZQNsb24Dd2F5BW5vZGVzBW5vZGVzBHR5cGUEdHlwZQRub2RlBG5vZGUDbGF0BHR5 -cGUEdHlwZQR0eXBlBm11c2xpbQR0eXBlA2xhdANsYXQEdGFncwNsYXQCaWQDbG9uBHR5cGUE -bm9kZQRub2RlA2xvbgR0eXBlBG5vZGUCaWQDbGF0BHR5cGUDbG9uA2xhdAJpZAJpZANsYXQD -bGF0BHR5cGUEdGFncwJpZANsb24DbG9uBHR5cGUDbG9uBHR5cGUCaWQEdHlwZQhidWlsZGlu -ZwNsb24Ebm9kZQRub2RlAmlkA2xhdANsYXQEdGFncwJpZANsYXQCaWQDbGF0BG5vZGUEbm9k -ZQNsb24DbG9uA2xvbgJpZANsb24EdGFncwhidWlsZGluZwJpZANsYXQEdHlwZQR0eXBlCGJ1 -aWxkaW5nBG5vZGUEbm9kZQR0eXBlAmlkA3dheQJpZAJpZARub2RlBHR5cGUEbm9kZQNsYXQD -bG9uAmlkA2xvbgNsYXQEbm9kZQNsb24EdHlwZQN5ZXMEdHlwZQR0eXBlBG5vZGUEbm9kZQNs -YXQDeWVzAmlkBHR5cGUDd2F5BHR5cGUDbGF0A3llcwJpZANsYXQCaWQDbG9uBHR5cGUEbm9k -ZQJpZAN3YXkEbm9kZQNsb24EdHlwZQRub2RlAmlkA2xhdAR0eXBlA3dheQNsb24DbGF0A3dh -eQVub2RlcwVub2RlcwR0eXBlAmlkAmlkA2xhdANsYXQDbGF0BHR5cGUEdHlwZQJpZANsb24D -bG9uBHR5cGUEdHlwZQNsb24EdHlwZQJpZAR0eXBlBHRhZ3MDbG9uBG5vZGUCaWQDbGF0Amlk -A2xhdAJpZANsYXQEbm9kZQRub2RlA2xvbgNsb24DbG9uAmlkA2xvbgN5ZXMIYnVpbGRpbmcE -dHlwZQVub2RlcwRub2RlBG5vZGUEdHlwZQJpZAR0eXBlA3dheQJpZARub2RlBHR5cGUEbm9k -ZQNsYXQDbG9uAmlkA2xvbgNsYXQEbm9kZQNsb24EdGFncwR0YWdzCGJ1aWxkaW5nBHR5cGUE -bm9kZQRub2RlA2xhdAN5ZXMDd2F5BHR5cGUDbG9uCGJ1aWxkaW5nBHR5cGUCaWQEdGFncwhi -dWlsZGluZwNsYXQCaWQDbG9uBHR5cGUEbm9kZQRub2RlA2xvbgR0eXBlBG5vZGUCaWQDbGF0 -BHR5cGUDeWVzA2xvbgNsYXQDd2F5BW5vZGVzBHR5cGUCaWQCaWQDbGF0A2xhdANsYXQCaWQD -bG9uA2xvbgR0eXBlA3llcwR0YWdzAmlkA2xvbgR0eXBlAmlkBHR5cGUDeWVzAmlkA2xvbgRu -b2RlAmlkA2xhdAN3YXkFbm9kZXMCaWQDbGF0AmlkA2xhdARub2RlBG5vZGUDbG9uA2xvbgNs -b24CaWQDbG9uAmlkA3dheQR0eXBlBHR5cGUEdHlwZQVub2RlcwR0eXBlAmlkBG5vZGUEdHlw -ZQJpZANsb24Dd2F5BW5vZGVzAmlkBG5vZGUEdHlwZQRub2RlA2xhdANsb24CaWQDbG9uA2xh -dARub2RlA2xvbgR0eXBlBHR5cGUEbm9kZQRub2RlA2xhdAR0YWdzBHR5cGUDbG9uBHR5cGUC -aWQCaWQDbG9uBHR5cGUDbG9uBHR5cGUCaWQEdHlwZQNsb24DbGF0AmlkA2xhdANsYXQIYnVp -bGRpbmcDbG9uCGJ1aWxkaW5nBHRhZ3MEbm9kZQJpZAJpZARub2RlBG5vZGUDbG9uAmlkA2xv -bgNsb24EdHlwZQJpZAN5ZXMEdHlwZQN5ZXMEdHlwZQJpZAR0eXBlA2xhdANsYXQCaWQDbG9u -BHR5cGUEbm9kZQhidWlsZGluZwN3YXkEbm9kZQNsb24EdHlwZQRub2RlAmlkA2xhdAR0eXBl -AmlkA2xvbgNsYXQCaWQFbm9kZXMEdHlwZQJpZAJpZANsYXQDbGF0A2xhdAN3YXkFbm9kZXMC -aWQDbG9uA2xvbgR0eXBlA3dheQR0eXBlA2xvbgR0eXBlAmlkBHR5cGUCaWQEdHlwZQNsb24E -bm9kZQJpZANsYXQEdHlwZQN5ZXMCaWQDbGF0AmlkA2xhdARub2RlBG5vZGUDbG9uA2xvbgNs -b24CaWQDbG9uBG5vZGUEdGFncwR0eXBlCGJ1aWxkaW5nBG5vZGUEdHlwZQRub2RlBHR5cGUC -aWQHdHlwZTppZAJpZARub2RlBHR5cGUEbm9kZQNsYXQDbG9uAmlkA2xvbgNsYXQEbm9kZQNs -b24DbG9uAmlkA3dheQR0eXBlBG5vZGUEbm9kZQNsYXQFbm9kZXMEdGFncwhidWlsZGluZwR0 -eXBlBHRhZ3MIYnVpbGRpbmcEdHlwZQJpZANsYXQEdGFncwN5ZXMDbGF0AmlkA2xvbgR0eXBl -BG5vZGUIYnVpbGRpbmcEbm9kZQNsb24EdHlwZQRub2RlAmlkA2xhdAR0eXBlBG5vZGUDbG9u -A2xhdAhidWlsZGluZw1idWlsZGluZzpyb29mAmlkAmlkA2xhdANsYXQDbGF0A3llcwJpZANs -b24DbG9uBHR5cGUDd2F5BW5vZGVzBHR5cGUDbG9uBHR5cGUCaWQEdHlwZQR0eXBlA2xvbgRu -b2RlAmlkA2xhdAN5ZXMEdGFncwJpZAJpZANsYXQCaWQDbGF0BG5vZGUEbm9kZQNsb24DbG9u -A2xvbgJpZANsb24DeWVzAmlkA3dheQN3YXkEdHlwZQVub2RlcwRub2RlBHR5cGUCaWQEdHlw -ZQJpZARub2RlBHR5cGUEbm9kZQNsYXQDbG9uAmlkA2xvbgNsYXQEbm9kZQNsb24Dd2F5BW5v -ZGVzBHR5cGUEdHlwZQRub2RlBG5vZGUDbGF0BW5vZGVzBHR5cGUEdHlwZQNsb24EdHlwZQJp -ZAR0YWdzAmlkA2xhdAJpZANsb24EdHlwZQRub2RlBG5vZGUDbG9uBHR5cGUEbm9kZQJpZANs -YXQEdHlwZQN3YXkDbG9uA2xhdAJpZAJpZANsYXQDbGF0BHR5cGUEdGFncwJpZANsb24DbG9u -BHR5cGUEdGFncwNsb24EdHlwZQJpZAR0eXBlCGJ1aWxkaW5nA2xvbgRub2RlAmlkA2xhdAR0 -YWdzCGJ1aWxkaW5nAmlkA2xhdAJpZANsYXQEbm9kZQRub2RlA2xvbgNsb24DbG9uAmlkA2xv -bgR0YWdzAmlkBHR5cGUEbm9kZQR0eXBlAmlkA3dheQVub2RlcwJpZARub2RlBHR5cGUEbm9k -ZQNsYXQDbG9uAmlkA2xvbgNsYXQEbm9kZQNsb24DeWVzBHR5cGUDeWVzBHR5cGUDbG9uBG5v -ZGUEbm9kZQNsYXQCaWQEdHlwZQNsb24IYnVpbGRpbmcDd2F5BHR5cGUCaWQCaWQDbGF0Amlk -A2xhdANsb24EdHlwZQRub2RlAmlkBG5vZGUDbG9uBHR5cGUEbm9kZQNsYXQCaWQDbGF0BHR5 -cGUDbG9uA2xhdAN3YXkDd2F5BW5vZGVzBHR5cGUCaWQCaWQDbGF0A2xhdAR0eXBlBW5vZGVz -BHR5cGUCaWQDbG9uA2xvbgR0eXBlBHR5cGUDeWVzCHJlbGlnaW9uA2xvbgNsb24EdHlwZQR0 -eXBlAmlkBHR5cGUDbGF0A2xvbgRub2RlAmlkA2xhdAR0YWdzAmlkA2xhdAJpZANsYXQEbm9k -ZQRub2RlA2xvbgNsb24DbG9uAmlkA2xvbghidWlsZGluZwVub2RlcwR0eXBlBG5vZGUEdHlw -ZQJpZAN3YXkCaWQEbm9kZQR0eXBlBG5vZGUDbGF0A2xvbgJpZANsb24DbGF0BG5vZGUDbG9u -BHRhZ3MIYnVpbGRpbmcEdGFncwR0eXBlBG5vZGUEbm9kZQNsYXQEdGFncwN5ZXMIYnVpbGRp -bmcEdHlwZQhidWlsZGluZwR0eXBlAmlkCGJ1aWxkaW5nA2xhdAJpZANsYXQDbG9uBHR5cGUE -bm9kZQRub2RlA2xvbgR0eXBlBG5vZGUDbGF0AmlkA2xhdAR0eXBlA2xvbgNsYXQDd2F5BW5v -ZGVzBHR5cGUDeWVzAmlkAmlkA2xhdANsYXQCaWQDbG9uBG5vZGUDbG9uBHR5cGUDeWVzBHRh -Z3MCaWQEbm9kZQJpZAJpZARub2RlBG5vZGUDbG9uAmlkA2xvbgNsb24EdHlwZQR0eXBlBHR5 -cGUDbG9uA3dheQVub2RlcwR0eXBlBHR5cGUDbGF0BG5vZGUEbm9kZQRub2RlA2xhdAR0YWdz -AmlkA2xvbgNsYXQCaWQCaWQDbGF0A2xhdANsYXQCaWQDbG9uA2xvbgR0eXBlA2xvbgR0eXBl -AmlkBHR5cGUEdHlwZQR0YWdzCGJ1aWxkaW5nA2xvbgRub2RlAmlkA2xhdAR0YWdzCXJpdmVy -YmFuawJpZANsYXQCaWQDbGF0BG5vZGUEbm9kZQNsb24DbG9uA2xvbgJpZANsb24Ebm9kZQNs -b24EdGFncwhidWlsZGluZwR0eXBlBHRhZ3MDeWVzCGJ1aWxkaW5nA2xhdARub2RlBHR5cGUC -aWQCaWQCaWQEbm9kZQR0eXBlBG5vZGUDbGF0A2xvbgJpZANsb24DbGF0BG5vZGUDbG9uA3dh -eQVub2RlcwR0eXBlBG5vZGUEbm9kZQNsYXQDeWVzBHR5cGUDbG9uA3llcwR0eXBlAmlkBHR5 -cGUCaWQDbGF0AmlkA2xhdANsb24EdHlwZQRub2RlCGJ1aWxkaW5nBG5vZGUDbG9uBHR5cGUE -bm9kZQNsYXQCaWQDbGF0BHR5cGUDbG9uA2xhdAJpZAJpZAVub2RlcwR0eXBlAmlkAmlkA2xh -dANsYXQDd2F5BW5vZGVzBHR5cGUCaWQDbG9uA2xvbgR0eXBlA3dheQVub2RlcwN3YXkDbG9u -BHR5cGUEdHlwZQJpZAR0eXBlA2xhdAR0eXBlA2xvbgRub2RlAmlkA2xhdARub2RlBHR5cGUD -eWVzAmlkA2xhdAJpZANsYXQEbm9kZQRub2RlA2xvbgNsb24DbG9uAmlkA2xvbgR0YWdzDWJ1 -aWxkaW5nOnJvb2YId2F0ZXJ3YXkIYnVpbGRpbmcEdHlwZQRub2RlBHR5cGUCaWQCaWQEbm9k -ZQR0eXBlBG5vZGUDbGF0A2xvbgJpZANsb24DbGF0BG5vZGUDbG9uBHRhZ3MEdHlwZQRub2Rl -BG5vZGUDbGF0CGJ1aWxkaW5nBHR5cGUEdGFncwhidWlsZGluZwR0eXBlBHR5cGUCaWQDbGF0 -BHRhZ3MDeWVzA2xhdAJpZANsYXQDbG9uBHR5cGUEbm9kZQRub2RlBG5vZGUDbG9uBHR5cGUE -bm9kZQNsYXQCaWQDbGF0BHR5cGUDbG9uA2xhdAhidWlsZGluZwhidWlsZGluZwJpZAJpZAJp -ZANsYXQDbGF0A3llcwJpZANsb24DbG9uBHR5cGUFbm9kZXMEdHlwZQNsb24Ebm9kZQR0eXBl -BHR5cGUCaWQEdHlwZQNsb24Ebm9kZQJpZANsYXQDeWVzBHRhZ3MCaWQCaWQDbGF0AmlkA2xh -dARub2RlBG5vZGUDbG9uA2xvbgNsb24CaWQDbG9uA3llcwJpZAN3YXkFbm9kZXMEdHlwZQNs -YXQDd2F5BW5vZGVzBHR5cGUEbm9kZQR0eXBlAmlkAmlkBG5vZGUEdHlwZQRub2RlA2xvbgJp -ZAJpZANsb24DbGF0BG5vZGUDbG9uA3dheQVub2RlcwR0eXBlBHR5cGUEbm9kZQRub2RlA2xh -dAVub2RlcwR0eXBlBHR5cGUEdHlwZQJpZAR0YWdzCGJ1aWxkaW5nAmlkA2xhdAJpZANsYXQD -bG9uBHR5cGUEbm9kZQNsYXQEbm9kZQNsb24EdHlwZQNsYXQCaWQDbGF0BHR5cGUDbG9uA2xh -dARub2RlAmlkA2xhdANsYXQCaWQEdHlwZQR0eXBlAmlkA2xvbgNsb24EdHlwZQR0YWdzBHRh -Z3MDbG9uBHR5cGUEdHlwZQJpZAR0eXBlA3llcwhidWlsZGluZwNsb24Ebm9kZQJpZANsYXQE -dGFncwhidWlsZGluZwJpZANsYXQCaWQDbGF0BG5vZGUEbm9kZQNsb24DbG9uA2xvbgJpZANs -b24Ebm9kZQR0YWdzAmlkBHR5cGUEbm9kZQR0eXBlAmlkA2xvbgN3YXkFbm9kZXMCaWQEbm9k -ZQR0eXBlBG5vZGUDbG9uAmlkA3llcwNsb24DbGF0BG5vZGUDbG9uA3llcwR0eXBlAmlkBHR5 -cGUEbm9kZQRub2RlA2xhdANsYXQCaWQEdHlwZQR0eXBlCGJ1aWxkaW5nA3dheQR0eXBlAmlk -A3llcwJpZANsYXQCaWQDbGF0A2xvbgR0eXBlBG5vZGUCaWQEbm9kZQNsb24EdHlwZQNsYXQC -aWQDbGF0BHR5cGUDd2F5A2xvbgNsYXQDd2F5BW5vZGVzBW5vZGVzBHR5cGUCaWQCaWQDbGF0 -A2xhdAR0eXBlBW5vZGVzBHR5cGUDbGF0A2xvbgJpZANsb24EdHlwZQR0eXBlBHR5cGUDbG9u -BHR5cGUEdHlwZQJpZAR0YWdzA3llcwNsb24Ebm9kZQJpZANsYXQCaWQDbGF0AmlkA2xhdARu -b2RlBG5vZGUDbG9uA2xvbgNsb24CaWQDbG9uA2xvbgR0eXBlCGJ1aWxkaW5nEmJ1aWxkaW5n -OnN0cnVjdHVyZQR0eXBlBHRhZ3MEdHlwZQNsb24EdHlwZQJpZANsYXQDbGF0BG5vZGUEdGFn -cwRub2RlBG5vZGUDbGF0A2xhdAJpZAJpZAhidWlsZGluZwJpZANsb24EdHlwZQNsb24EdHlw -ZQR0eXBlAmlkBHR5cGUDbG9uA2xhdAVub2RlcwR0eXBlAmlkA2xhdAJpZANsYXQEbm9kZQRu -b2RlA2xvbgNsb24DbG9uAmlkA2xvbgN5ZXMCaWQJcGxhc3RlcmVkA3llcwR0eXBlAmlkBG5v -ZGUEdHlwZQJpZAJpZAN3YXkFbm9kZXMEdHlwZQJpZARub2RlBHR5cGUEbm9kZQNsYXQDbG9u -AmlkA2xvbgNsYXQEbm9kZQNsb24Dd2F5BW5vZGVzBHR5cGUEbm9kZQRub2RlA2xhdAVub2Rl -cwR0eXBlBHR5cGUFbm9kZXMEdHlwZQR0eXBlAmlkA2xhdANsYXQCaWQDbGF0A2xvbgR0eXBl -BG5vZGUEbm9kZQNsb24EdHlwZQNsYXQCaWQDbGF0BHR5cGUEdGFncwNsb24DbGF0CGJ1aWxk -aW5nAmlkAmlkA2xhdANsYXQDd2F5AmlkA2xvbgNsb24EdHlwZQNsb24EdHlwZQR0eXBlAmlk -BHR5cGUCaWQEdGFncwNsb24Ebm9kZQJpZANsYXQEdGFncwJpZANsYXQCaWQDbGF0BG5vZGUE -bm9kZQNsb24DbG9uA2xvbgJpZANsb24IYnVpbGRpbmcDeWVzCGJ1aWxkaW5nBHRhZ3MEdHlw -ZQhidWlsZGluZwRub2RlBHR5cGUCaWQDbG9uAmlkAmlkBG5vZGUEdHlwZQRub2RlA2xvbgJp -ZANsb24DbGF0BG5vZGUDbG9uA3dheQVub2RlcwR0eXBlBG5vZGUEbm9kZQNsYXQCaWQDeWVz -BHR5cGUDeWVzAmlkBHR5cGUCaWQCaWQDeWVzAmlkA2xhdAJpZANsYXQDbG9uBHR5cGUEbm9k -ZQN3YXkEbm9kZQNsb24EdHlwZQNsYXQCaWQDbGF0BHR5cGUEbm9kZQNsb24DbGF0AmlkAmlk -A3dheQR0eXBlBG5vZGUCaWQDbGF0A2xhdAJpZAN3YXkFbm9kZXMDbGF0A2xvbgR0eXBlAmlk -A2xvbgR0eXBlA3dheQNsb24EdHlwZQR0eXBlAmlkBW5vZGVzBHR5cGUFbm9kZXMDbG9uBG5v -ZGUCaWQDbGF0AmlkBHR5cGUDeWVzAmlkA2xhdAJpZANsYXQEbm9kZQRub2RlA2xvbgNsb24D -bG9uAmlkA2xvbgNsb24EdGFncwMxMDAEdHlwZQhidWlsZGluZwRub2RlBHR5cGUCaWQDbG9u -AmlkBG5vZGUEdHlwZQRub2RlA2xvbgJpZARub2RlA2xvbgNsYXQDbGF0BG5vZGUDbG9uBHRh -Z3MEdHlwZQRub2RlBG5vZGUDbGF0A2xhdAJpZAhidWlsZGluZwR0eXBlBHRhZ3MIYnVpbGRp -bmcEdGFncwZtdXNsaW0EdHlwZQJpZAR0YWdzA3llcwNsYXQCaWQDbG9uBHR5cGUEbm9kZQJp -ZARub2RlA2xvbgR0eXBlBHR5cGUDbGF0AmlkA2xhdAR0eXBlA2xvbgNsYXQIYnVpbGRpbmcC -aWQCaWQDbGF0A2xhdAN5ZXMHYW1lbml0eQNsYXQDbG9uAmlkA2xvbgR0eXBlA3llcwVub2Rl -cwNsb24EdHlwZQR0eXBlAmlkBHR5cGUDbG9uBG5vZGUCaWQDbGF0A3llcwJpZAJpZANsYXQC -aWQDbGF0BG5vZGUEbm9kZQNsb24CaWQDbG9uA2xvbgN5ZXMCaWQCaWQDd2F5A3dheQR0eXBl -BW5vZGVzBW5vZGVzBHR5cGUJYWRkcjpmdWxsBG5vZGUEdHlwZQJpZAJpZARub2RlBHR5cGUE -bm9kZQNsb24CaWQFbm9kZXMDbG9uA2xhdANsYXQEbm9kZQNsb24Fbm9kZXMEdHlwZQR0eXBl -BG5vZGUEbm9kZQNsYXQDbGF0BHR5cGUEdHlwZQR0eXBlAmlkBHRhZ3MIYnVpbGRpbmcDbGF0 -AmlkA2xvbgR0eXBlBG5vZGUEbm9kZQNsb24EdHlwZQR0eXBlA2xhdAJpZANsYXQEdHlwZQNs -b24DbGF0A3dheQJpZAJpZANsYXQDbGF0BHRhZ3MCaWQDbG9uA2xvbgR0eXBlBHRhZ3MFbm9k -ZXMDbG9uA2xvbgR0eXBlBHR5cGUCaWQDeWVzCGJ1aWxkaW5nA2xvbgRub2RlAmlkA2xhdAhi -dWlsZGluZwJpZANsb24DbGF0AmlkA2xhdARub2RlBG5vZGUEbm9kZQNsb24DbG9uAmlkA2xv -bgR0YWdzCGJ1aWxkaW5nAmlkBHR5cGUEbm9kZQR0eXBlAmlkA3dheQVub2RlcwJpZARub2Rl -BHR5cGUEbm9kZQNsb24CaWQDeWVzA2xvbgNsYXQDbGF0BG5vZGUDbG9uA3llcwR0eXBlAmlk -BG5vZGUDbGF0A2xhdAN5ZXMCaWQDd2F5BW5vZGVzBG5vZGUCaWQCaWQDd2F5AmlkA2xvbgR0 -eXBlBHR5cGUDbG9uBHR5cGUEdHlwZQJpZAN3YXkFbm9kZXMEdHlwZQNsb24DbGF0AmlkA2xh -dANsYXQEdHlwZQNsb24DbG9uA3llcwRub2RlAmlkAmlkBG5vZGUEbm9kZQNsb24CaWQIYnVp -bGRpbmcDbG9uA2xhdANsYXQEbm9kZQNsb24EdHlwZQRub2RlBG5vZGUDbGF0A2xhdAJpZAR0 -eXBlBHR5cGUEdGFncw5idWlsZGluZzp3YWxscwR0eXBlAmlkCGJ1aWxkaW5nA2xhdAJpZANs -b24EdHlwZQRub2RlA2xvbgR0YWdzBG5vZGUDbG9uBHR5cGUDbGF0AmlkA2xhdAR0eXBlBG5v -ZGUDbG9uA2xhdAR0YWdzCGJ1aWxkaW5nA3llcwJpZAJpZAJpZANsYXQDbGF0CGJ1aWxkaW5n -CWFkZHI6ZnVsbANsYXQDbG9uAmlkA2xvbgR0eXBlA3dheQNsb24EdHlwZQR0eXBlAmlkA3ll -cw9idWlsZGluZzpsZXZlbHMDbG9uBG5vZGUCaWQDbGF0A3llcwR0eXBlAmlkAmlkA2xhdAJp -ZANsYXQEbm9kZQRub2RlA2xvbgJpZANsb24DbG9uBHR5cGUDbG9uA3llcwN3YXkEdHlwZQN5 -ZXMCaWQEbm9kZQR0eXBlAmlkA2xvbgJpZAN3YXkFbm9kZXMCaWQEbm9kZQR0eXBlBG5vZGUD -bG9uAmlkA3dheQNsb24DbGF0A2xhdARub2RlA2xvbgVub2RlcwR0eXBlBHR5cGUEbm9kZQRu -b2RlA2xhdANsYXQCaWQEdHlwZQR0eXBlBW5vZGVzBHR5cGUEdHlwZQJpZANsYXQCaWQDbG9u -BHR5cGUEbm9kZQRub2RlA2xvbgR0eXBlBHR5cGUDbGF0AmlkA2xhdAR0eXBlA2xvbgNsYXQE -bm9kZQNsb24EdGFncwhidWlsZGluZwJpZAJpZANsYXQDbGF0A2xhdAN3YXkDbGF0A2xvbgJp -ZANsb24EdHlwZQNsb24EdHlwZQR0eXBlAmlkBHRhZ3MIYnVpbGRpbmcDbG9uBG5vZGUDbG9u -AmlkA2xhdAR0YWdzBW5vZGVzAmlkA2xhdAJpZANsYXQEbm9kZQRub2RlA2xvbgRub2RlA2xv -bgJpZANsb24IYnVpbGRpbmcDeWVzCGJ1aWxkaW5nBHR5cGUEdGFncwRub2RlBHR5cGUCaWQC -aWQEMTAwMAlBTCBJS0hTQU4CaWQEbm9kZQR0eXBlBG5vZGUDbG9uAmlkA3llcwNsb24DbGF0 -A2xhdARub2RlA2xvbgN3YXkFbm9kZXMEbm9kZQNsYXQDbGF0BHR5cGUDeWVzBHR5cGUEdGFn -cwJpZAR0eXBlBG5vZGUCaWQDbGF0A3llcwJpZANsYXQCaWQDbG9uBHR5cGUEbm9kZQN3YXkF -bm9kZXMEbm9kZQNsb24EdHlwZQR0eXBlA2xhdAJpZANsYXQEdHlwZQNsb24DbGF0A2xhdAJp -ZAJpZAN3YXkCaWQCaWQDbGF0A2xhdAN3YXkFbm9kZXMEdHlwZQJpZANsb24DbG9uBHR5cGUD -d2F5BW5vZGVzBHR5cGUDbG9uBHR5cGUEdHlwZQJpZANsb24Ebm9kZQJpZANsYXQEdHlwZQN5 -ZXMEdGFncwJpZANsYXQCaWQDbGF0BG5vZGUEbm9kZQNsb24EdHlwZQRub2RlA2xvbgJpZANs -b24EdGFncwhidWlsZGluZwR0eXBlAmlkA2xhdARub2RlBHR5cGUCaWQCaWQCaWQEbm9kZQR0 -eXBlBG5vZGUDbG9uAmlkBHR5cGUDbG9uA2xhdANsYXQEbm9kZQNsb24EdGFncwhidWlsZGlu -ZwRub2RlA2xhdANsYXQEdHlwZQR0eXBlBHRhZ3MIYnVpbGRpbmcEdHlwZQRub2RlBHR5cGUC -aWQEdGFncwN5ZXMDbGF0A2xhdAJpZANsb24EdHlwZQNsYXQIYnVpbGRpbmcEbm9kZQNsb24E -dHlwZQR0eXBlA2xhdAJpZANsYXQIYnVpbGRpbmcDbG9uA2xhdAJpZAN3YXkCaWQCaWQDbGF0 -A2xhdAR0eXBlA3llcwJpZANsb24DbG9uBHR5cGUDbG9uA3llcwR0eXBlA2xvbgR0eXBlBHR5 -cGUCaWQCaWQDbG9uBG5vZGUCaWQDbGF0A3llcwN3YXkCaWQDbGF0AmlkA2xhdARub2RlBG5v -ZGUDbG9uBG5vZGUDbG9uAmlkA2xvbgJpZAR0YWdzA3llcwJpZAR0eXBlAmlkAmlkA3dheQVu -b2RlcwN3YXkEbm9kZQR0eXBlAmlkA2xhdAVub2RlcwR0eXBlAmlkBG5vZGUEdHlwZQRub2Rl -A2xvbgJpZAR0eXBlA2xvbgNsYXQEbm9kZQNsb24Fbm9kZXMEdHlwZQR0YWdzBG5vZGUDbGF0 -A2xhdAR0eXBlBHR5cGUEdHlwZQNsYXQEdHlwZQR0eXBlAmlkBHRhZ3MIYnVpbGRpbmcDbGF0 -A2xhdAJpZANsb24EdHlwZQRub2RlA2xvbgR0eXBlBHR5cGUDbGF0AmlkA2xhdAN3YXkDbG9u -A2xhdAJpZANsYXQDbGF0CGJ1aWxkaW5nA3llcwRub2RlAmlkCGJ1aWxkaW5nAmlkBG5vZGUE -bm9kZQNsb24CaWQEdHlwZQR0YWdzA2xvbgNsb24EdHlwZQN5ZXMEdGFncwR0eXBlBHR5cGUD -bGF0BG5vZGUDeWVzBHRhZ3MEbm9kZQNsb24EdHlwZQR0eXBlA2xhdAJpZANsYXQEdHlwZQNs -b24DbGF0A3llcwJpZAN3YXkFbm9kZXMCaWQCaWQDbGF0A2xhdAN3YXkCaWQDbG9uA2xvbgR0 -eXBlAmlkBHR5cGUDbG9uBHR5cGUEdHlwZQJpZAVub2RlcwR0eXBlB2FtZW5pdHkDbG9uBG5v -ZGUCaWQDbGF0A3dheQVub2RlcwJpZANsYXQCaWQDbGF0BG5vZGUEbm9kZQNsb24Ebm9kZQNs -b24CaWQDbG9uBHR5cGUEdGFncwR0eXBlAmlkAmlkBG5vZGUEdHlwZQJpZAJpZARub2RlBHR5 -cGUEbm9kZQNsb24CaWQDbG9uA2xhdANsYXQEbm9kZQNsb24CaWQPYnVpbGRpbmc6bGV2ZWxz -BHR5cGUEbm9kZQNsYXQDbGF0BHRhZ3MEdHlwZQR0eXBlBG5vZGUEdHlwZQJpZAhidWlsZGlu -ZwNsYXQDbGF0AmlkA2xvbgR0eXBlBHRhZ3MIYnVpbGRpbmcEbm9kZQNsb24EdHlwZQR0eXBl -A2xhdAJpZANsYXQEdGFncwNsb24DbGF0EHBsYWNlX29mX3dvcnNoaXACaWQCaWQCaWQDbGF0 -A2xhdAhidWlsZGluZwJpZANsb24DbG9uBHR5cGUDbG9uA3dheQNsb24EdHlwZQR0eXBlAmlk -AmlkA3llcwNsb24Ebm9kZQJpZANsYXQDeWVzBHR5cGUCaWQCaWQDbGF0AmlkA2xhdARub2Rl -BG5vZGUDbG9uBG5vZGUDbG9uAmlkA2xvbgJpZAN5ZXMEdHlwZQJpZAJpZARub2RlA2xhdAR0 -eXBlAmlkAmlkA3dheQVub2RlcwJpZARub2RlBHR5cGUEbm9kZQNsb24CaWQDd2F5A2xvbgNs -YXQEbm9kZQNsb24Dd2F5BW5vZGVzBHR5cGUEdHlwZQRub2RlA2xhdANsYXQEdHlwZQR0eXBl -BHR5cGUEdHlwZQR0eXBlAmlkAmlkA2xhdANsYXQCaWQDbG9uBHR5cGUEbm9kZQNsb24EdHlw -ZQR0eXBlA2xhdAJpZANsYXQEbm9kZQNsb24DbGF0CGJ1aWxkaW5nEk1BU0pJRCBEQVJVTCBI -SUtBTQJpZAJpZANsYXQDbGF0BW5vZGVzAmlkA2xvbgR0eXBlA2xvbgR0eXBlBHR5cGUCaWQE -dGFncwhidWlsZGluZwNsb24Ebm9kZQJpZANsYXQCaWQEdGFncwNsYXQCaWQDbGF0BG5vZGUE -bm9kZQNsb24CaWQEbm9kZQNsb24DbG9uCGJ1aWxkaW5nA3llcwR0YWdzBHR5cGUCaWQIYnVp -bGRpbmcEbm9kZQR0eXBlAmlkAmlkBG5vZGUEdHlwZQNsb24CaWQEbm9kZQN5ZXMDbG9uA2xh -dARub2RlA2xvbgN3YXkFbm9kZXMEbm9kZQNsYXQDbGF0BHR5cGUEdHlwZQR0eXBlA3llcwR0 -YWdzAmlkBHR5cGUEdHlwZQJpZAN5ZXMCaWQDbGF0AmlkA2xvbgR0eXBlAmlkA3dheQVub2Rl -cwRub2RlA2xvbgR0eXBlBHR5cGUDbGF0AmlkA2xhdAJpZANsb24DbGF0A3dheQR0eXBlA3ll -cwJpZAJpZANsYXQDbGF0BW5vZGVzBHR5cGUCaWQEbm9kZQNsb24EdHlwZQN3YXkFbm9kZXMC -aWQDbG9uBHR5cGUEdHlwZQJpZARub2RlB2FtZW5pdHkDbG9uBG5vZGUCaWQDbGF0BHR5cGUD -bGF0AmlkA2xhdARub2RlBG5vZGUDbG9uAmlkBG5vZGUDbG9uA2xvbgR0YWdzBG5vZGUEdHlw -ZQJpZAJpZAJpZARub2RlBHR5cGUDbG9uAmlkBHR5cGUEdGFncwNsb24DbGF0A2xvbgRub2Rl -A2xhdANsYXQIYnVpbGRpbmcEdHlwZQR0eXBlBHRhZ3MIYnVpbGRpbmcEdHlwZQR0eXBlAmlk -BHRhZ3MDeWVzA2xhdAJpZANsb24EdHlwZQJpZARub2RlA2xvbgR0eXBlBHR5cGUDbGF0Amlk -A2xhdAR0eXBlA2xvbgNsYXQIYnVpbGRpbmcDd2F5AmlkAmlkA2xhdANsYXQDeWVzAmlkBG5v -ZGUDbG9uBHR5cGUDeWVzBHR5cGUCaWQDbG9uBHR5cGUEdHlwZQJpZANsb24Ebm9kZQJpZANs -YXQDbGF0AmlkA2xhdARub2RlBG5vZGUDbG9uAmlkA3llcwNsb24DbG9uAmlkAmlkBHR5cGUE -dHlwZQN3YXkEdHlwZQR0eXBlA2xhdAR0eXBlBG5vZGUDbGF0A2xhdAJpZAJpZANsb24EdHlw -ZQNsb24EdHlwZQR0eXBlAmlkBW5vZGVzA2xvbgRub2RlAmlkA2xhdAJpZANsYXQCaWQDbGF0 -BG5vZGUEbm9kZQNsb24Ebm9kZQNsb24CaWQDbG9uAmlkBHRhZ3MEdGFncwhidWlsZGluZwR0 -eXBlAmlkA3llcwRub2RlBHR5cGUCaWQIYnVpbGRpbmcCaWQEbm9kZQR0eXBlA2xvbgJpZAhi -dWlsZGluZwNsb24DbGF0BG5vZGUDbG9uBG5vZGUDbGF0A2xhdAN5ZXMEdHlwZQR0eXBlA3dh -eQVub2RlcwR0eXBlBHR5cGUCaWQDbGF0AmlkA2xhdAJpZANsb24EdHlwZQNsb24Ebm9kZQNs -b24EdHlwZQR0eXBlA2xhdAJpZANsYXQDbG9uA2xvbgNsYXQDeWVzA3llcwJpZAR0YWdzAmlk -AmlkA2xhdANsYXQDd2F5AmlkA3dheQJpZARub2RlA2xvbgR0eXBlBHR5cGUFbm9kZXMDbG9u -BHR5cGUEdHlwZQJpZAVub2RlcwR0eXBlA2xvbgRub2RlAmlkA2xhdAN3YXkFbm9kZXMDbGF0 -AmlkA2xhdARub2RlBG5vZGUDbG9uAmlkBG5vZGUDbG9uA2xvbgN3YXkEdGFncwJpZARub2Rl -BHR5cGUCaWQDbG9uAmlkBG5vZGUEdHlwZQNsb24CaWQEbm9kZQNsYXQDbG9uBG5vZGUDbG9u -BG5vZGUDbGF0A2xhdAR0eXBlBHRhZ3MEdHlwZQR0eXBlBHRhZ3MEdHlwZQR0eXBlAmlkCGJ1 -aWxkaW5nA2xhdAJpZANsb24EdHlwZQR0YWdzCGJ1aWxkaW5nBG5vZGUDbG9uBHR5cGUEdHlw -ZQNsYXQCaWQDbGF0A2xvbgNsb24DbGF0BHRhZ3MDeWVzAmlkAmlkAmlkA2xhdANsYXQCaWQE -bm9kZQNsb24EdHlwZQN3YXkFbm9kZXMDbG9uBHR5cGUEdHlwZQJpZAN5ZXMDbG9uBG5vZGUC -aWQDbGF0A3llcwR0eXBlAmlkA2xhdAJpZANsYXQEbm9kZQRub2RlA2xvbgJpZARub2RlA2xv -bgNsb24IYnVpbGRpbmcDd2F5A3llcwJpZARub2RlBHR5cGUEdHlwZQJpZAJpZAVub2RlcwR0 -eXBlAmlkBHR5cGUEbm9kZQR0eXBlA2xvbgJpZAN3YXkDbG9uA2xhdANsb24Dd2F5BW5vZGVz -BHR5cGUEbm9kZQNsYXQDbGF0BHR5cGUEdHlwZQR0eXBlBHR5cGUDeWVzBHR5cGUEdHlwZQJp -ZANsb24DbGF0AmlkA2xvbgR0eXBlBG5vZGUDbG9uBHR5cGUEdHlwZQNsYXQCaWQDbGF0BHR5 -cGUDbG9uA2xhdAhidWlsZGluZwJpZAJpZANsYXQDbGF0AmlkBW5vZGVzB2FtZW5pdHkCaWQE -bm9kZQNsb24EdHlwZQNsb24EdHlwZQR0eXBlAmlkBHRhZ3MIYnVpbGRpbmcDbG9uBG5vZGUC -aWQDbGF0BHRhZ3MDbGF0AmlkA2xhdARub2RlBG5vZGUDbG9uAmlkA3llcwNsb24DbG9uCGJ1 -aWxkaW5nCGJ1aWxkaW5nA2xhdARub2RlBHR5cGUEdHlwZQJpZARub2RlAmlkBHR5cGUEbm9k -ZQR0eXBlA2xvbgJpZANsYXQDbG9uA2xhdANsb24DbG9uA3dheQVub2RlcwN5ZXMEbm9kZQNs -YXQDbGF0BHR5cGUDeWVzBHRhZ3MCaWQEdHlwZQR0eXBlAmlkA3llcwJpZANsYXQCaWQDbG9u -BHR5cGUDd2F5BW5vZGVzBG5vZGUDbG9uBHR5cGUEdHlwZQNsYXQCaWQDbGF0BHR5cGUDbG9u -A2xhdAR0eXBlA3dheQR0eXBlAmlkA2xhdANsYXQDbGF0A3dheQVub2RlcwR0eXBlAmlkBG5v -ZGUDbG9uBHR5cGUDd2F5BW5vZGVzA2xvbgR0eXBlBHR5cGUCaWQDbG9uBG5vZGUCaWQDbGF0 -A2xhdAJpZARub2RlA2xvbgJpZAN5ZXMEdGFncwJpZANsb24DbG9uA2xhdARub2RlBHR5cGUE -dHlwZQJpZANsYXQCaWQEdHlwZQRub2RlBHR5cGUDbG9uAmlkBHR5cGUEdGFncwNsYXQEdGFn -cwRub2RlA2xhdANsYXQEdHlwZQR0YWdzAmlkAmlkA2xvbgR0eXBlAmlkA2xvbgR0eXBlBHR5 -cGUCaWQDbG9uA2xhdAN3YXkFbm9kZXMDbGF0A2xhdARub2RlBHR5cGUCaWQEbm9kZQR0eXBl -AmlkCGJ1aWxkaW5nA3dheQJpZARub2RlBHR5cGUDbG9uAmlkBHR5cGUDeWVzA2xvbgNsYXQD -bG9uAmlkAmlkBW5vZGVzBHR5cGUDd2F5BG5vZGUDbGF0A2xhdAVub2RlcwR0eXBlCWFkZHI6 -ZnVsbAR0eXBlBHR5cGUDd2F5BW5vZGVzBHR5cGUEdHlwZQJpZAR0eXBlA2xhdAJpZANsb24E -dHlwZQR0eXBlA3llcwRuYW1lBG5vZGUDbG9uBHR5cGUEdHlwZQNsYXQCaWQDbGF0BHR5cGUD -bG9uA2xhdAR0YWdzA3llcwJpZAJpZANsYXQDbGF0CGJ1aWxkaW5nAmlkBG5vZGUDbG9uBHR5 -cGUDbG9uBHR5cGUEdHlwZQJpZAR0YWdzA2xvbgRub2RlAmlkA2xhdANsYXQCaWQDbGF0BG5v -ZGUEbm9kZQNsb24CaWQEbm9kZQNsb24DbG9uBHRhZ3MEdGFncwhidWlsZGluZwN5ZXMEbm9k -ZQR0eXBlBHR5cGUCaWQIYnVpbGRpbmcCaWQCaWQEdHlwZQRub2RlBHR5cGUDbG9uAmlkCGJ1 -aWxkaW5nA2xvbgNsYXQDbG9uA3llcwRub2RlA2xhdANsYXQEdHlwZQVub2RlcwR0eXBlBHR5 -cGUEdHlwZQJpZANsYXQCaWQDbG9uBHR5cGUDeWVzBHRhZ3MCaWQEbm9kZQNsb24EdHlwZQR0 -eXBlA2xhdAJpZANsYXQEdHlwZQNsb24DbGF0A3llcwJpZAN3YXkFbm9kZXMCaWQCaWQDbGF0 -A2xhdAJpZAN3YXkFbm9kZXMCaWQEbm9kZQNsb24EdHlwZQR0eXBlA2xvbgR0eXBlBHR5cGUC -aWQFbm9kZXMEdHlwZQNsb24Ebm9kZQJpZANsYXQDd2F5BW5vZGVzA2xhdAJpZARub2RlA2xv -bgJpZANsb24DbG9uBHRhZ3MIYnVpbGRpbmcCaWQEbm9kZQNsYXQEdHlwZQR0eXBlAmlkAmlk -BHR5cGUEbm9kZQR0eXBlA2xvbgJpZANsb24DbGF0A2xvbgNsb24EdHlwZQRub2RlA2xhdANs -YXQEdGFncwR0eXBlBHRhZ3MEbm9kZQR0eXBlBHR5cGUCaWQEbm9kZQJpZAhidWlsZGluZwNs -YXQCaWQDbG9uBHR5cGUEdGFncwhidWlsZGluZwxPdmVycGFzcyBBUEkEbm9kZQNsb24EdHlw -ZQR0eXBlA2xhdAJpZANsYXQCaWQDbG9uA2xhdAR0YWdzAmlkAmlkA2xhdANsYXQCaWQEbm9k -ZQNsb24EdHlwZQN3YXkFbm9kZXMDbG9uBHR5cGUEdHlwZQJpZAN5ZXMDbG9uBG5vZGUCaWQD -bGF0A3llcwR0eXBlAmlkA2xhdAJpZARub2RlA2xvbgJpZAhidWlsZGluZwNsb24DbG9uA3dh -eQNsYXQCaWQDeWVzAmlkBG5vZGUEdHlwZQR0eXBlAmlkAmlkBW5vZGVzBHR5cGUCaWQEdHlw -ZQRub2RlBHR5cGUDbG9uAmlkBG5vZGUDbG9uA2xhdANsb24DbG9uA3dheQVub2RlcwN3YXkE -dHlwZQRub2RlA2xhdANsYXQFbm9kZXMEdHlwZQR0eXBlBHR5cGUEdHlwZQN5ZXMEdHlwZQR0 -eXBlAmlkBHRhZ3MDbGF0AmlkA2xvbgR0eXBlAmlkBG5vZGUDbG9uBHR5cGUEbm9kZQR0eXBl -A2xhdAJpZANsYXQDbG9uA2xhdAhidWlsZGluZwJpZANsYXQDbGF0BHRhZ3MCaWQEbm9kZQNs -b24EdHlwZQNsb24EdHlwZQR0eXBlAmlkBG5vZGUEdGFncwhidWlsZGluZwRub2RlBG5vZGUD -bG9uAmlkA2xhdAR0YWdzA3dheQNsYXQCaWQEbm9kZQNsb24CaWQDeWVzCGJ1aWxkaW5nBHR5 -cGUDbG9uA2xvbgJpZAhidWlsZGluZwRub2RlBHR5cGUCaWQCaWQEdHlwZQRub2RlBHR5cGUD -bG9uAmlkA3llcwNsb24DbGF0A2xvbgVub2RlcwR0eXBlBG5vZGUEbm9kZQNsYXQDbGF0BHR5 -cGUEdHlwZQN5ZXMEdGFncwJpZAJpZAR0eXBlBHR5cGUCaWQDeWVzAmlkA2xhdAJpZANsb24E -bm9kZQR0eXBlA3dheQVub2RlcwR0eXBlA2xvbgR0eXBlBHR5cGUCaWQDd2F5BW5vZGVzA2xv -bgNsYXQEdHlwZQNsYXQDbGF0BW5vZGVzBHR5cGUEbm9kZQJpZAJpZARub2RlA2xvbgJpZAhi -dWlsZGluZwNsb24DbG9uA2xvbgR0eXBlBHR5cGUEdHlwZQJpZAR0YWdzA2xhdAJpZANsb24E -dHlwZQR0eXBlBHRhZ3MFbm9kZXMEbm9kZQNsb24EdHlwZQR0eXBlA2xhdAJpZANsYXQIYnVp -bGRpbmcDbG9uA2xhdAhidWlsZGluZwJpZANsYXQDbGF0BHRhZ3MIYnVpbGRpbmcCaWQEbm9k -ZQNsb24EdHlwZQJpZANsb24EdHlwZQR0eXBlAmlkA2xvbgRub2RlAmlkA2xhdAN3YXkFbm9k -ZXMDbGF0AmlkBG5vZGUDbG9uAmlkA3llcwN5ZXMDbG9uA2xvbgR0eXBlAmlkA2xhdAJpZAR0 -eXBlBG5vZGUEdHlwZQR0eXBlAmlkBHR5cGUDd2F5BW5vZGVzAmlkBHR5cGUEbm9kZQR0eXBl -A2xvbgJpZAJpZANsb24DbGF0A2xvbgNsb24CaWQDd2F5BHR5cGUDbGF0BG5vZGUDbGF0A2xh -dAN3YXkFbm9kZXMEdHlwZQR0eXBlA3dheQVub2RlcwR0eXBlBHR5cGUCaWQDbGF0AmlkAmlk -A2xvbgR0eXBlBHR5cGUDeWVzBG5vZGUDbG9uBHR5cGUEbm9kZQR0eXBlA2xhdAJpZANsYXQD -bG9uA2xhdAR0YWdzAmlkA2xhdANsYXQIYnVpbGRpbmcCaWQEbm9kZQNsb24EdHlwZQNsb24E -dHlwZQR0eXBlAmlkBW5vZGVzBHRhZ3MDbG9uBG5vZGUCaWQDbGF0A2xhdAJpZARub2RlA2xv -bgJpZANsb24EdGFncwR0YWdzA2xvbgNsb24IYnVpbGRpbmcIYnVpbGRpbmcEdGFncwN5ZXME -bm9kZQR0eXBlBHR5cGUCaWQDbG9uCGJ1aWxkaW5nAmlkAmlkBHR5cGUEbm9kZQR0eXBlA2xv -bgJpZAhidWlsZGluZwRub2RlA2xhdANsb24DbG9uA2xvbgRub2RlBG5vZGUDbGF0A2xhdAN5 -ZXMEdHlwZQR0eXBlBG5vZGUDeWVzBW5vZGVzBHR5cGUEdHlwZQR0eXBlAmlkA2xhdAJpZANs -b24Ebm9kZQR0eXBlA3llcwJpZARub2RlA2xvbgR0eXBlBG5vZGUEdHlwZQNsYXQCaWQDbGF0 -A2xvbgNsYXQEdGFncwN5ZXMCaWQCaWQCaWQDbGF0A2xhdAN3YXkFbm9kZXMDd2F5BW5vZGVz -AmlkA2xvbgR0eXBlA2xvbgR0eXBlBHR5cGUDbG9uBW9zbTNzBHR5cGUEdHlwZQJpZAVub2Rl -cwR0eXBlBG5vZGUEbm9kZQNsb24CaWQDbGF0BW5vZGVzBHR5cGUDbGF0AmlkBG5vZGUDbG9u -AmlkA2xvbgNsb24IYnVpbGRpbmcEdGFncwJpZARub2RlBHR5cGUCaWQCaWQEdHlwZQRub2Rl -BHR5cGUDbG9uAmlkA2xvbgNsb24DbGF0A2xvbgN3YXkEbm9kZRJ0aW1lc3RhbXBfb3NtX2Jh -c2UEbm9kZQNsYXQDbGF0BHRhZ3MDbGF0BHR5cGUEdHlwZQNsb24EdHlwZQR0YWdzBW5vZGVz -BHR5cGUEdHlwZQJpZAhidWlsZGluZwNsYXQCaWQDbG9uBG5vZGUEdHlwZQhidWlsZGluZwN5 -ZXMEbm9kZQNsb24EdHlwZQR0eXBlA2xhdAJpZANsYXQEbm9kZQNsb24DbGF0BHRhZ3MIYnVp -bGRpbmcCaWQCaWQDbGF0AmlkA2xvbgR0eXBlA3dheQVub2RlcwNsb24EdHlwZQR0eXBlAmlk -A3llcwNsb24Ebm9kZQJpZAN5ZXMEdHlwZQJpZANsYXQCaWQEbm9kZQNsb24CaWQCaWQCaWQD -bG9uA2xvbgNsb24Dd2F5BW5vZGVzAmlkBG5vZGUEdHlwZQJpZARub2RlAmlkBHR5cGUCaWQE -bm9kZQJpZAR0eXBlBG5vZGUEdHlwZQNsb24DbG9uA2xhdANsb24CaWQDd2F5BW5vZGVzA3dh -eQRub2RlBG5vZGUDbGF0A2xhdAVub2RlcwR0eXBlA2xhdAR0eXBlBHR5cGUDeWVzBHR5cGUE -dHlwZQJpZAR0YWdzA2xhdAJpZANsb24Ebm9kZQR0eXBlBG5vZGUDbG9uBHR5cGUEdHlwZQNs -YXQCaWQDbGF0BG5vZGUDbG9uA2xhdAhidWlsZGluZwJpZANsYXQDbGF0BW5vZGVzBHRhZ3MC -aWQEdHlwZQRub2RlA2xvbgNsYXQEdHlwZQR0eXBlAmlkBHRhZ3MIYnVpbGRpbmcEbm9kZQJp -ZAhidWlsZGluZwJpZARub2RlA2xvbgJpZAR0YWdzA3llcwNsb24DbG9uA2xvbghidWlsZGlu -ZwRub2RlBHR5cGUEdHlwZQR0eXBlA3llcwNsYXQDeWVzBG5vZGUEbm9kZQNsYXQDbGF0A2xh -dAN5ZXMCaWQCaWQEdGFncwJpZARub2RlA2xvbgR0eXBlAmlkA3dheQVub2RlcwNsb24EdHlw -ZQR0eXBlAmlkA3dheQVub2RlcwR0eXBlBG5vZGUEbm9kZQNsb24CaWQDbGF0A2xhdAJpZARu -b2RlA2xvbgJpZAR0eXBlBW5vZGVzA2xvbgNsb24EdHlwZQdhbWVuaXR5BG5vZGUEdHlwZQJp -ZAJpZANsb24EdHlwZQRub2RlBHR5cGUDbG9uAmlkA2xvbgNsYXQDbG9uBHR5cGUEdGFncwhi -dWlsZGluZwJpZARub2RlBG5vZGUDbGF0A2xhdAN3YXkEdHlwZQR0eXBlBHR5cGUEdHlwZQJp -ZAR0YWdzCGJ1aWxkaW5nA2xhdAJpZANsb24Ebm9kZQR0eXBlBHR5cGUEdGFncwRub2RlA2xv -bgR0eXBlBHR5cGUDbGF0AmlkA2xhdARub2RlA2xvbgNsYXQIYnVpbGRpbmcDeWVzAmlkA2xh -dANsYXQEdGFncwhidWlsZGluZwJpZANsb24EdHlwZQJpZANsb24EdHlwZQR0eXBlAmlkBHR5 -cGUDeWVzA2xvbgRub2RlAmlkA2xhdAN3YXkFbm9kZXMDbGF0AmlkBG5vZGUDbG9uAmlkA3ll -cwR0eXBlA2xvbgNsb24DbG9uA3llcwJpZAJpZARub2RlBHR5cGUCaWQDd2F5BW5vZGVzAmlk -AmlkBHR5cGUEbm9kZQR0eXBlA2xvbgJpZANsb24DbGF0A2xvbgJpZAJpZAR0eXBlBG5vZGUE -bm9kZQNsYXQDbGF0A3dheQVub2RlcwR0eXBlA2xhdAR0eXBlA3dheQVub2RlcwR0eXBlBHR5 -cGUCaWQDbGF0AmlkA2xvbgRub2RlBHR5cGUEdHlwZQN5ZXMEbm9kZQNsb24EdHlwZQR0eXBl -A2xhdAJpZANsYXQEbm9kZQNsb24DbGF0BHRhZ3MCaWQDbGF0CGJ1aWxkaW5nAmlkA2xvbgR0 -eXBlAmlkA2xvbgNsYXQEdHlwZQR0eXBlAmlkBHR5cGUEdGFncwNsb24Ebm9kZQJpZANsYXQC -aWQEbm9kZQNsb24CaWQIYnVpbGRpbmcIcmVsaWdpb24IYnVpbGRpbmcDbG9uA2xvbgNsb24E -dGFncwR0YWdzA3llcwRub2RlBHR5cGUCaWQIYnVpbGRpbmcCaWQCaWQCaWQEdHlwZQRub2Rl -BHR5cGUDbG9uAmlkA2xvbgNsYXQDbG9uCGJ1aWxkaW5nA3dheQRub2RlBG5vZGUEbm9kZQNs -YXQDbGF0A3llcwNsYXQEdHlwZQN5ZXMEdHlwZQJpZAR0eXBlBHR5cGUCaWQDbGF0AmlkA2xv -bgRub2RlBHR5cGUDeWVzBVJXIDEyBG5vZGUDbG9uBHR5cGUEdHlwZQNsYXQCaWQDbGF0BG5v -ZGUDbG9uA2xhdAR0YWdzA3llcwJpZAJpZAJpZANsYXQDd2F5BW5vZGVzA3dheQVub2RlcwR0 -eXBlAmlkA2xhdAR0eXBlA2xvbgR0eXBlBHR5cGUCaWQEdHlwZQNsb24Ebm9kZQJpZAVub2Rl -cwR0eXBlA2xhdAJpZARub2RlA2xvbgJpZAN3YXkDbG9uA2xvbgR0YWdzBG5vZGUCaWQIYnVp -bGRpbmcCaWQEbm9kZQR0eXBlAmlkAmlkAmlkBHR5cGUEbm9kZQR0eXBlA2xvbgJpZANsb24D -bGF0A2xvbgRub2RlA3dheQRub2RlBG5vZGUEbm9kZQNsYXQDbGF0BG5vZGUEdGFncwNsYXQE -dHlwZQR0eXBlBHRhZ3MIYnVpbGRpbmcEdHlwZQR0eXBlAmlkA3llcwNsYXQCaWQDbG9uBG5v -ZGUEdHlwZQhidWlsZGluZwRub2RlA2xvbgR0eXBlBHR5cGUDbGF0AmlkBG5vZGUEbm9kZQNs -b24DbGF0BHRhZ3MIYnVpbGRpbmcCaWQCaWQDbGF0AmlkA3llcwJpZAR0eXBlA3dheQVub2Rl -cwNsb24DbG9uBHR5cGUCaWQEbm9kZQN5ZXMDbG9uBG5vZGUDbG9uAmlkA3llcwR0eXBlAmlk -A2xhdAJpZARub2RlA2xvbgJpZAJpZAN3YXkEdHlwZQNsb24DbG9uBW5vZGVzBHRpbGUCaWQE -bm9kZQNsYXQEdHlwZQNsb24CaWQEdHlwZQR0eXBlA2xhdARub2RlA3dheQVub2RlcwRub2Rl -A2xhdANsYXQEbm9kZQR0eXBlAmlkBHRhZ3MCaWQDbG9uBHR5cGUDbG9uBHR5cGUEdHlwZQJp -ZANsb24DbGF0BHRhZ3MDbG9uA2xvbgNsb24IYnVpbGRpbmcEbm9kZQR0eXBlAmlkBHRhZ3MI -YnVpbGRpbmcCaWQCaWQEdHlwZQRub2RlBHR5cGUDbG9uAmlkA2xvbgNsYXQDbG9uBHR5cGUE -dGFncwN5ZXMCaWQEbm9kZQRub2RlA2xhdANsYXQIYnVpbGRpbmcDbGF0BHR5cGUDd2F5BHR5 -cGUEdHlwZQJpZAN5ZXMHYW1lbml0eQNsYXQCaWQDbG9uBG5vZGUEdHlwZQN5ZXMFbm9kZXME -bm9kZQNsb24EdHlwZQR0eXBlA2xhdAJpZANsYXQEbm9kZQNsb24DbGF0BHR5cGUCaWQCaWQD -bGF0A3llcwJpZAJpZAR0eXBlAmlkA3dheQVub2RlcwR0eXBlA2xvbgNsYXQEdHlwZQR0eXBl -AmlkA3dheQVub2RlcwNsb24Ebm9kZQJpZAN3YXkDbGF0AmlkBG5vZGUDbG9uAmlkBHR5cGUD -bG9uA2xvbgNsb24Fbm9kZXMEdHlwZQRub2RlBG5vZGUEdHlwZQJpZAR0eXBlCGJ1aWxkaW5n -AmlkAmlkBHR5cGUEbm9kZQR0eXBlA2xvbgJpZANsb24DbGF0A2xvbghidWlsZGluZwRub2Rl -BG5vZGUEbm9kZQNsYXQDbGF0BW5vZGVzA2xhdAR0eXBlA2xvbgR0eXBlBHR5cGUCaWQEdGFn -cwhidWlsZGluZwNsYXQCaWQDbG9uBG5vZGUEdHlwZQR0YWdzBG5vZGUDbG9uBHR5cGUEdHlw -ZQNsYXQCaWQDbGF0BG5vZGUEbm9kZQNsb24DbGF0CGJ1aWxkaW5nA3llcwJpZANsYXQEdGFn -cwhidWlsZGluZxBjYXBhY2l0eTpwZXJzb25zAmlkBHR5cGUEdHlwZQNsb24DbG9uBHR5cGUE -dHlwZQJpZAN5ZXMDbG9uBG5vZGUDbG9uAmlkA3dheQVub2RlcwNsYXQCaWQEbm9kZQNsb24C -aWQDeWVzA3llcwNsb24DbG9uAmlkBHR5cGUEbm9kZQN5ZXMCaWQEbm9kZQJpZAR0eXBlAmlk -A2xvbgN3YXkFbm9kZXMCaWQCaWQEdHlwZQRub2RlBHR5cGUDbG9uA3dheQNsb24DbGF0A2xv -bgRub2RlAmlkBHR5cGUEbm9kZQRub2RlA2xhdANsYXQEbm9kZQN3YXkFbm9kZXMDbGF0BHR5 -cGUDd2F5BW5vZGVzBHR5cGUEdHlwZQR0eXBlAmlkA2xhdAJpZANsb24Ebm9kZQR0eXBlBHR5 -cGUEbm9kZQNsb24EdHlwZQR0eXBlA2xhdAJpZARub2RlA3llcwNsb24DbGF0BHRhZ3MCaWQD -bGF0AmlkBHR5cGUDbG9uA2xvbgNsb24EdHlwZQJpZAR0YWdzBG5vZGUEbm9kZQNsb24DbG9u -AmlkBHR5cGUCaWQDbGF0AmlkBG5vZGUDbG9uAmlkBHRhZ3MDbG9uA2xvbghidWlsZGluZwhi -dWlsZGluZwRub2RlBG5vZGUEdGFncwN5ZXMCbm8Ebm9kZQNsYXQEdHlwZQJpZAJpZAZtdXNs -aW0CaWQCaWQEdHlwZQRub2RlBHR5cGUDbG9uBHR5cGUDbG9uA2xhdANsb24Ebm9kZQhidWls -ZGluZwN3YXkEbm9kZQRub2RlA2xhdANsYXQEbm9kZQN5ZXMDbGF0BHR5cGUDbG9uA3llcwVu -b2RlcwR0eXBlAmlkBHR5cGUEdHlwZQJpZANsYXQCaWQEbm9kZQR0eXBlBG5vZGUDbG9uBHR5 -cGUEdHlwZQNsYXQCaWQEbm9kZQN5ZXMDbG9uAmlkAmlkA3dheQVub2RlcwR0eXBlAmlkA2xh -dAN3YXkFbm9kZXMIYnVpbGRpbmcCaWQEdHlwZQN3YXkDbG9uA2xvbgR0eXBlAmlkBG5vZGUD -bG9uBHR5cGUDbG9uBG5vZGUDbG9uAmlkBW5vZGVzBHR5cGUDbGF0AmlkAmlkBG5vZGUDbG9u -AmlkA2xhdANsb24DbG9uBG5vZGUEbm9kZQhidWlsZGluZwRub2RlA2xhdAR0eXBlAmlkAmlk -AmlkBHR5cGUEbm9kZQR0eXBlA2xvbgVub2RlcwNsb24DbGF0A2xvbgRub2RlBG5vZGUEbm9k -ZQNsYXQDbGF0BG5vZGUEdGFncwhidWlsZGluZwR0eXBlBHRhZ3MCaWQCaWQEdHlwZQNsb24E -dHlwZQR0eXBlAmlkCGJ1aWxkaW5nA2xvbgNsb24CaWQDbGF0A2xhdARub2RlA3dheQVub2Rl -cwRub2RlAmlkAmlkAmlkAmlkBG5vZGUDbG9uA3llcwJpZANsb24DbG9uA3dheQVub2RlcwRu -b2RlBG5vZGUDbGF0A2xhdARub2RlA3dheQVub2RlcwNsYXQEdHlwZQJpZAR0eXBlBHR5cGUE -dHlwZQJpZAN3YXkFbm9kZXMEdHlwZQNsYXQCaWQDbG9uBG5vZGUEdHlwZQN3YXkFbm9kZXME -bm9kZQNsb24EdHlwZQR0eXBlA2xhdAJpZARub2RlA2xhdANsb24DbGF0BG5vZGUCbm8CaWQD -bGF0A3llcwR0YWdzAmlkAmlkBHR5cGUDbG9uA2xvbgR0eXBlAmlkA3llcwNsb24Ebm9kZQNs -b24CaWQEbm9kZQNsYXQCaWQEbm9kZQNsb24CaWQEdHlwZQR0YWdzA2xvbgNsb24EdGFncwhi -dWlsZGluZwRub2RlBG5vZGUDbGF0BHR5cGUCaWQEdGFncwhidWlsZGluZwJpZAJpZAR0eXBl -BG5vZGUEdHlwZQNsb24DbGF0A2xvbgNsYXQDbG9uBG5vZGUEdGFncwN5ZXMCaWQEbm9kZQRu -b2RlA2xhdANsYXQEbm9kZQJpZANsYXQEdHlwZQN3YXkFbm9kZXMEdHlwZQR0eXBlAmlkA3ll -cwNsYXQCaWQDbG9uBG5vZGUEdHlwZQN5ZXMEdHlwZQRub2RlA2xvbgR0eXBlBHR5cGUDbGF0 -AmlkBG5vZGUCaWQDbG9uCGJ1aWxkaW5nA3dheQJpZANsYXQDeWVzAmlkAmlkBHR5cGUCaWQF -bm9kZXMEdHlwZRJyZWluZm9yY2VkX21hc29ucnkDbG9uA2xvbgNsb24EdHlwZQJpZAR0eXBl -A3dheQNsb24Ebm9kZQNsb24CaWQDd2F5BW5vZGVzBHR5cGUEdHlwZQJpZANsYXQCaWQEbm9k -ZQNsb24CaWQFbm9kZXMDbG9uA2xvbgR0eXBlBHR5cGUEbm9kZQRub2RlBG5vZGUDbGF0BHR5 -cGUCaWQQY2FwYWNpdHk6cGVyc29ucwJpZAJpZAR0eXBlBG5vZGUEdHlwZQNsb24IYnVpbGRp -bmcDbG9uA2xhdANsb24Ebm9kZQRub2RlBG5vZGUDbGF0A2xhdARub2RlBW5vZGVzA2xhdAR0 -eXBlBHR5cGUEdHlwZQJpZAR0eXBlBHRhZ3MIYnVpbGRpbmcDbGF0AmlkBG5vZGUEdHlwZQR0 -YWdzBG5vZGUDbG9uBHR5cGUEdHlwZQNsYXQCaWQEbm9kZQN5ZXMDbG9uCGJ1aWxkaW5nCGJ1 -aWxkaW5nA2xhdAJpZAR0eXBlAmlkA2xvbgNsb24EdHlwZQJpZAN5ZXMDbG9uBG5vZGUDbG9u -AmlkA3dheQVub2RlcwNsYXQCaWQCaWQEbm9kZQNsb24CaWQCaWQDbG9uA2xvbgN5ZXMEdGFn -cwNsb24Ebm9kZQRub2RlA3llcwJpZARub2RlA2xhdAR0eXBlAmlkA3dheQVub2RlcwJpZAJp -ZAR0eXBlBG5vZGUEdHlwZQNsb24Dd2F5A2xvbgNsYXQDbG9uBG5vZGUCaWQEdHlwZQRub2Rl -BG5vZGUDbGF0BG5vZGUDd2F5BW5vZGVzBHR5cGUCaWQEdHlwZQN3YXkFbm9kZXMEdHlwZRQy -MDE0LTExLTAxVDEwOjE4OjAyWgR0eXBlAmlkA2xhdAJpZARub2RlBHR5cGUEbm9kZQNsb24D -bG9uBHR5cGUEdHlwZQNsYXQCaWQEbm9kZQNsb24DbG9uA3llcwR0YWdzAmlkA2xhdAJpZAJp -ZAR0eXBlA2xvbgR0eXBlAmlkAmlkBHR5cGUEdGFncwNsb24Ebm9kZQNsb24CaWQEdGFncwNs -YXQCaWQCaWQEbm9kZQNsb24IYnVpbGRpbmcIYnVpbGRpbmcDbG9uA2xvbgR0YWdzA2xvbgRu -b2RlBG5vZGUCaWQEdGFncwN5ZXMEbm9kZQNsYXQEdHlwZQJpZAJpZAJpZAJpZAR0eXBlBG5v -ZGUEdHlwZQNsb24EdHlwZQNsYXQDbG9uA2xvbgRub2RlA3dheQVub2RlcwRub2RlBG5vZGUD -bGF0BG5vZGUDeWVzBHR5cGUDbGF0A3llcwR0eXBlAmlkBHR5cGUEdHlwZQJpZANsYXQCaWQE -bm9kZQR0eXBlCGJ1aWxkaW5nA3dheQRub2RlA2xvbgNsb24EdHlwZQNsYXQCaWQEbm9kZQN5 -ZXMDbG9uA2xvbgJpZAJpZAVub2RlcwR0eXBlBHR5cGUDbGF0AmlkA3dheQVub2RlcwR0eXBl -BG5vZGUEdHlwZQRub2RlAmlkAmlkAmlkBG5vZGUDbG9uA2xvbgNsb24Ebm9kZQhidWlsZGlu -ZwNsYXQEdHlwZQR0eXBlBHR5cGUDbGF0BG5vZGUEbm9kZQNsYXQEbm9kZQJpZAhidWlsZGlu -ZwNsb24EdGFncwJpZANsYXQDeWVzAmlkBHR5cGUIYnVpbGRpbmcCaWQDbG9uA2xvbgR0eXBl -AmlkCGJ1aWxkaW5nBHR5cGUEbm9kZQNsb24DbG9uAmlkA2xhdAJpZAJpZARub2RlA2xvbgJp -ZAN5ZXMDbG9uA2xvbgVub2RlcwR0eXBlBG5vZGUEbm9kZQRub2RlA2xhdAR0eXBlAmlkA3ll -cwR0YWdzAmlkAmlkAmlkBHR5cGUEbm9kZQR0eXBlA2xvbgN5ZXMDbG9uA2xhdANsb24Ebm9k -ZQJpZAN3YXkFbm9kZXMEbm9kZQRub2RlA2xhdANsYXQEbm9kZQN3YXkFbm9kZXMEdHlwZQJp -ZAR0eXBlBHR5cGUGbXVzbGltA3llcwR0eXBlBHR5cGUCaWQFbm9kZXMEdHlwZQNsYXQCaWQE -bm9kZQR0eXBlA2xhdAN3YXkFbm9kZXMEbm9kZQNsb24DbG9uBHR5cGUEdHlwZQNsYXQCaWQE -bm9kZQNsb24DbG9uBHRhZ3MEdGFncwNsYXQIYnVpbGRpbmcCaWQCaWQEdHlwZQNsb24EdHlw -ZQJpZAR0eXBlA2xvbgRub2RlA2xvbgJpZANsYXQCaWQCaWQEbm9kZQNsb24EdHlwZQR0YWdz -BHRhZ3MDbG9uA2xvbgNsb24Ebm9kZQRub2RlCGJ1aWxkaW5nBG5vZGUDbGF0BHR5cGUCaWQE -dGFncwhidWlsZGluZwJpZAJpZAR0eXBlBG5vZGUEdHlwZQNsb24EdGFncwR0eXBlA2xhdANs -b24DbG9uBG5vZGUCaWQScmVpbmZvcmNlZF9tYXNvbnJ5BG5vZGUEbm9kZQNsYXQEbm9kZQR0 -eXBlA3dheQR0eXBlB3ZlcnNpb24EdHlwZQJpZAN5ZXMDbGF0AmlkBG5vZGUEdHlwZQN5ZXME -dHlwZQJpZARub2RlA2xvbgNsb24EdHlwZQNsYXQCaWQEbm9kZQhidWlsZGluZwNsb24DbG9u -A3dheQN3YXkDeWVzBHR5cGUDbGF0AmlkAmlkAmlkBHR5cGUCaWQFbm9kZXMEdHlwZQNsb24E -dHlwZQJpZAJpZAN3YXkFbm9kZXMEdHlwZQNsb24Ebm9kZQNsb24CaWQDd2F5A2xhdAJpZANs -YXQCaWQEbm9kZQNsb24EdHlwZQNsb24DbG9uA2xvbgR0eXBlA2xvbgRub2RlBG5vZGUEdGFn -cwRub2RlA2xhdAR0eXBlAmlkAmlkAmlkBHR5cGUEbm9kZQR0eXBlA2xvbghidWlsZGluZwR0 -eXBlA2xhdANsb24DbG9uBG5vZGUEbm9kZQRub2RlA2xhdARub2RlBW5vZGVzBHR5cGUEdHlw -ZQR0eXBlAmlkBHRhZ3MIYnVpbGRpbmcDbGF0AmlkBG5vZGUEdHlwZQR0YWdzBG5vZGUDbG9u -A2xvbgR0eXBlA2xhdAJpZARub2RlCGJ1aWxkaW5nA2xvbgNsb24DeWVzA2xhdAR0eXBlA2xh -dAhidWlsZGluZwJpZAJpZAJpZANsb24DbG9uBHR5cGUCaWQCaWQEbm9kZQN5ZXMDbG9uBG5v -ZGUDbG9uA2xhdAJpZANsb24Fbm9kZXMDbGF0AmlkA2xhdAJpZARub2RlA2xvbgR0eXBlA3ll -cwNsb24DbG9uBHRhZ3MCaWQEbm9kZQRub2RlA3llcwJpZARub2RlA2xhdAR0eXBlAmlkA3dh -eQVub2RlcwR0eXBlAmlkAmlkBHR5cGUEbm9kZQR0eXBlA2xvbgN3YXkDbGF0BHR5cGUDbGF0 -A2xvbgNsb24Ebm9kZQJpZARub2RlBG5vZGUDbGF0BG5vZGUFbm9kZXMEdHlwZQVub2RlcwR0 -eXBlA2xvbgN3YXkFbm9kZXMEdHlwZQExBHR5cGUEdHlwZQRub2RlA2xhdAJpZARub2RlBHR5 -cGUEbm9kZQNsb24DbG9uBHR5cGUDbGF0AmlkBG5vZGUEdGFncwNsb24DbG9uCGJ1aWxkaW5n -AmlkA2xhdANsYXQCaWQCaWQDbG9uA2xvbgR0eXBlAmlkAmlkBG5vZGUDbG9uA2xvbgRub2Rl -A2xvbgNsYXQCaWQEdHlwZQR0YWdzA2xhdAJpZAJpZARub2RlA2xvbgNsYXQIYnVpbGRpbmcC -aWQDbG9uA2xvbgR0YWdzCGJ1aWxkaW5nBG5vZGUEdGFncwR0eXBlBHR5cGUEdHlwZQNsYXQE -bm9kZQRub2RlA2xhdARub2RlA3llcwN5ZXMEbm9kZQJpZAJpZAR0eXBlA2xhdANsb24EdHlw -ZQJpZAJpZANsYXQDbG9uF0ZMVmFyaWFibGVPYmplY3RDbHVzdGVyAAABgQADAAAAAAUAAAAF -AAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAA -AAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAAVAAAAAUAAAAFAAAABQAAAAUAAAAF -AAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAA -AAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAF -AAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAA -AAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAF -AAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAA -AAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAF -AAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAA -AAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAF -AAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAA -AAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAF -AAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAA -AAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAMAAAABQAAABgAAAAFAAAABQAAAAUAAAAF -AAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAA -AAUAAAAFAAAABQAAAAUAAAAFAAAABQAAB+8AAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAF -AAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAA -AAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAF -AAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAA -AAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAF -AAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAA -AAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAF -AAAABQAAAAUAAAAFAAAACQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAA -AAgAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAF -AAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAA -AAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAF -AAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABwAAAAUAAAAFAAAABQAA -AAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAF -AAAABQAAAAUAAAAFAAAABQAAAAUdRkxEaWN0aW9uYXJ5Q29sbGVjdGlvbkNsdXN0ZXIAAAlx -AAIAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAB -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAABAAAAAEAAAAEAAAABAAA -AAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAABAAAABAAAAAQAAAAB -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAABAAAAAEAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAAAQAAAAEAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAAAQAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAMAAAABAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAAAQAAAAQAAAAEAAAAAQAAAAQAAAAEAAAABAAAAAEAAAABAAAABAAAAAQAAAAEAAAABAAA -AAQAAAABAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAAAQAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAAAQAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAEAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAB -AAAABAAAAAEAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAABAAAAAQAAAABAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAAAQAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAA -AAEAAAAEAAAAAQAAAAQAAAAEAAAABAAAAAQAAAABAAAABAAAAAEAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAEAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAEAAAAAQAA -AAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAAAQAAAAQAAAABAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAABAAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAAAQAAAAEAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAABAAAABAAAAAEAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAABAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAB -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAA -AAQAAAAEAAAAAQAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAE -AAAAAQAAAAEAAAABAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAABAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAA -AAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAEAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAACAAAABAAAAAEAAAAEAAAABAAA -AAQAAAABAAAAAQAAAAQAAAADAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAE -AAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAAAQAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAQAAAABAAAABAAAAAEAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAAAQAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAB -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAQAAAABAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAAAQAAAAQAAAAEAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAAAQAAAAEAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAEAAAABAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAABAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAEAAAABAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAEAAAAEAAAABAAAAAEAAAABAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAE -AAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAABAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAAAQAAAAEAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAEAAAAEAAAABAAAAAQAAAABAAAABAAA -AAEAAAAEAAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAABAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAAAQAAAAQAAAAEAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAABAAAABAAAAAQAAAABAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAB -AAAAAQAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAEAAAABAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAAAQAAAAQAAAABAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAEAAAAEAAAABAAAAAEAAAAEAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAE -AAAABAAAAAQAAAAEAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAAAQAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAEAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAEAAAAEAAAABAAA -AAQAAAAEAAAAAQAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAE -AAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAABAAAAAQAAAAQAAAABAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAABAAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAACwAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAABAAAAAQAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAEAAAABAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAABAAAABAAAAAEAAAAEAAAABAAAAAMAAAAE -AAAABAAAAAQAAAABAAAABAAAAAQAAAABAAAABAAAAAEAAAAEAAAAAQAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAEAAAAEAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAAAQAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAABAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAEAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAABAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAABAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAEAAAAE -AAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAA -AAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAABAAAAAQAAAABAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAEAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAABAAAAAEAAAAB -AAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAABAAAAAEAAAAEAAAAAQAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAEAAAABAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAB -AAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAEAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAB -AAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAAAQAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAEAAAAE -AAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAAAQAA -AAQAAAAEAAAAAQAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAE -AAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAEAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAEAAAAAQAAAAEAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAEAAAABAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAEAAAAEAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAAAQAAAAQAAAAEAAAABAAAAAEAAAAEAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAEAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAABAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAAAQAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAEAAAAAQAAAAQAAAAEAAAAAQAA -AAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAE -AAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAB -AAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAEAAAAAQAAAAEAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAALAAAABAAAAAQAAAABAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAEAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAEAAAAAQAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAABAAAAAEAAAAB -AAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAAAQAAAAEAAAAEAAAABAAAAAQAAAABAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAABAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAABAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAEAAAAEAAAAAQAAAAQAAAAE -AAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAABAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAAAQAAAAQAAAAEAAAAAQAAAAQAAAABAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAAAQAAAAEAAAAEAAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAAAQAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAE -AAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAABAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAEAAAAEAAAAAQAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAABAAAABAAA -AAEAAAAEAAAAAQAAAAQAAAAEAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAEAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAAAQAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAB -AAAABAAAAAQAAAABAAAABAAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAAAQAA -AAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAsAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAABAAAAAQAAAAQAAAABAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAEAAAAEAAAABAAAAAQAAAAEAAAAAQAAAAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAE -AAAABAAAAAQAAAAEAAAAAQAAAAQAAAAEAAAAAQAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAA -AAQAAAAEAAAABAAAAAEAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAB -AAAAAQkMALIH9A8vBuQMHAPYCxYC1AowDwgGwQ4DBcINEwr9ArwJ8AGfCRAN7gWmDOEElwv8 -A+4LLQLmChkB/gnaAYoIwwBsB9wMvgR9C6kDZwrUCk0B/wk/AOYIYgLWCgoBvQj4ANIJKwDT -CBYPVwcyAMcICg9IBvoOawxFA+8LMwLpClEPJwbgDhgF1Q02BTkMhgQtC2gDSgsZAtkKDgHE -CS4OBwXHDPgEuAwZBNoMGgPUCxAC8wQRC00DAQozAh8J9gGnCNgAhwf/DOcEnQvMA4QK8wpy -Ah0JYAEACIIC6goeAdsJFwDsBVILJwdnBVMNpQBzBGMHTwo/C0QMQQ4xA4wPOA3SAqQGkwx5 -BLMIlAuIDvgPaArbApAJzQF4BMMA2A5+BdIItAqqDaQOmw6gBugLygAoBvwALgj0CSQAywsL -AygM3wYaC+UNQAE5CQYN9ANMCCYKGgsYDgQBZwg8AxMKQwH4CywNWQUZDFgD/wwuAYMHWw04 -ApkBBAd0DIkMYQGwBooMcAG/BpkNfQVSCUQA6wgyD3QHUA2GBT8MhwQzC5cA4QgqD2cHGA6B -DGsEGAtPAwQKeQ9QBv8OOgXuDWAFVAyXBEoLhwNfCzcC7QoiAd8JRg4fBdsNCgTLDDYLpgNh -Cp4CUwnDBPUMPQPsCzIDFQQ0C28DIQpaAjwKiwI9CYABXQicCWcBCAhSAC8HcQ2fBVgMmQR3 -C6sA+whDD4EHZA6VDIwENgtyA1QKjg9vByEOWQY+DYMFdQypBGALwwOBC1QDDQpAAiYJbg5B -BfYNJAUhDF8LxQOCCroCqAnkBE8LjQNBCqQCWQqlAlsJogF0CLcCTwmZAT0IrQBfDbwFdgyt -BJsLzgEfCGYACgeMDrYMnARQC48DagqnD4cHOA55BlMNlgZVDZoFUQy3BG4FkQzIBIAL6AOo -C3cDLApqAkkJjQ5kBhwNTwU7DIUL6QOmCtwCzgoCBGULnQNWCr0CdArDAnUJuAGWCM8Cagmv -AVoIxgBxDeIFlgzSBL4L6wFBCIUAMAeqDtkKlgJICY8BagipBssODAXyDR0E3AyzBGgL1gOJ -CscAEQdXDr4Geg23DSIE3QxbBAYLRQaADbgFqAzkBJYFuAzqBMwMDwPEDAsDxQspAuUKFwri -ApgKCAG7CPUPHAbNDkIF9Q0vAoUJygGtCOUAjg39BboNDATODBABYQihAHYHvw72Bu0OJQYd -DUcFAAzZBI8L8gOyCugANwd3Dt8Gmg3aDUgE/gx/BCsLZwafDd4FyAz5BLkJmAE6CKwAXgek -Bc0NAgTiDB8D3AwhA90LTAL7CjIPQQbzDmAGHw1QArAJ6AHSCQUArQ4UBc4NPwTkDCMBeQi9 -AJUH0w8PBwwOSQYyDWwFIgzxBK0MEwPMCwQAUweaDvkGuA33CTIA1whMD4oHOw1xBSMMlgRJ -C4UF5g0RBQcMRAP1DEYD9gtuAyAKWAPrCyoDFApHAfoPXwc+DnwGNg14AtMKLgHnCSgA0AhW -ADEHeg6hBlkOLAYjDVMFGAxOAZ4JDgC0B/oPMAf7D24HIg5cBhMHLA6IBkYNiAVCDYkFbgyo -BF0LmgYGDXUFKAxtBB8MbgROC4wDQAp6AQsIiwA4B4MOpwQPC34DMwpvAhcPegdaDosGSA2L -AugKUAIACUEA6AhzAE4HlQ7DBn0OUAY7DXoFLwxyAcEJLQDVCBgPWA7EBrUN8wWtDOMIGQ+G -BzkOeAYxB0cOqAZeDaAFWw2mBZAMxwR+C68BMQinAFQHnA7JBC8LlgNOCogCOgAFB4QOrwZg -DakDAAp4Ah4JZQECCJMAaAezDucGoQ5vBk4NjgVHDJAB3glFAO0INA92DuYGyQ4LBcoM/Adh -DssGhw3BBXsN+QW3DOkEogvTBaQM4ASVC8IDfAGACMAAawe1DuoEdgunA2IKoAJVCgkBvAj3 -AJoH2gBbB6IOzgaIDc4DUwqNAkAJggEoCbMBYAiiAEsHlAjUAIEHxA7+BrsOuQZwDa4FYQyg -AiUJbQEJCFUPjg85BusOIwXdDQsHtw7tBqcN5gWdDhAFzA0BBMEL8ALYCg0BwAj/AJ8Fxgz3 -BLYL5AOfAaYI1gCGB8YPAgSaC8sDgwq7AnEKHQHaCRYAvAf9AG8HuQ7vBqkN6ANpCqYCXAmk -AUsA6ggwD3IHJg5fCc4Bdwi6AGcHsQj+AKAH5g8dBtEPWgcLDkgF/A0rDioF4g0PBNEMEQLs -CiAB3QkcAL8F2A0JBMoMBgPDAccJAQCmB+0PIgS9C+oDpwrfAo0KOQHuCTMA2QgfAI0Hyg8H -BsAOAgOICsUCdgm5AWgBBwhND4wHPQ57CR4AwwgFD0AG+Q95BysOaAYiDVEHHw5YBhINRgT3 -AwsKPAHyCTYA3AX0DSME3gwdA9kB5AkhAMYICQ9KBM0MDQPHCv4CugsxAucKGwHXCRMKYgIK -CVAA8Qg5AKsH8g8pBtoOFwOwCuQCqQnYAYIBMAhyABkHWQ6KCTgA3QglD2MHEw+RB0MOfwY5 -DXcHNg53Bi8NZwUgAysKaQIQCVMA9QYbDU4E/wxDA/APZQcbDlIGCQ0+C5wDVQqSAkQJiAH3 -CToA4AgpD2sE4wwiA98LGgLaAnMJtQFlCKUAUAtOAwIKNgHsCTAKfgIsCXQBEAhbAU4IkQA7 -B3kOrQxPA/cLOALvCiMB4AlHAO4INQ93BygOZgAhB2AOkgZMDYwLCwW9CSQCWgg2A2AKNAhd -CO8LDAr4Ao4LCALECfwBqAtwCIwByw2ECKsGvQTVCwsEZwufA1cKlQJHB1IOhgZDDYcFPQNH -CoICNAl1ARgGNQ1yBSYMaAQXC7UDcAqsAmAJqQIWCVkA+ghAD4MFBgxMA/gLNgLuChgB1QkU -ALUH/AKWCdMBfgi/AGoLcQMkCmMCCQlKDlcGEQ1FBPYMOwqYAkwJkQE2CHkBawiqAFkHoQ7N -BI4LuAN0Cq4CZAdyDqYGWg2eBVcDWwqbAk4JmwE4BkcNigVDDI0EOQvcA48KywJ6Cb8CNwl7 -ASoIZQALBSsMcQQeC1oDCgK9CfQBpAjVAIUKsAJlCawBVQiZAYgIxABuB7gO7k0wTktKYUtR -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 -S7pPSUlsTQBQlUq3Tk1R4kwDT5JJtU1LUOBLA06WUixMTU/gSgRNllErS09O40kETJZQKEpM -TeNRekudTyxJTUzhUHVKm04yUchL6U92SZtNLlDDSudOflIRTDJPwknoTX5REUs0TshSXEx8 -UA1KMk3HUVxLgE8PSTNMxFBXSn5OFlGrS8xPXEl+TRJQpkrLTmBR9EwXT6RJyE1eUPVLFE6n -Uj9MYU/wShNNqlE+S2BO9EkXTKdQOUpgTfhRjEuvTz5JYUz1UIlKsE5DUdpL+0+LSaxNQ1DZ -SvxOjlIjTEZP2En8TZBRJktJTtpI/UyQUCBKRE3cUXRLlU8iSUdM2FBtSpNOKlG/S+BPb0mR -TSVQukrgTnVSCEwpT7pJ3U1yUQhLK068UlFMc1AFSihNvVFUS3ZPBUkoTLtQTUp1TgxRoEvB -T1FJdk0IUJ1KwE5XUepMCk+bSb9NVFDoSwtOnlIzTFVP6EoKTZ5RNEtXTulJDEyeUC9KVE3s -UYRLpE8zSVdM7FB+SqNOOlHSS/BPf0mkTTlQzErvToZSGEw6T8tJ8k2FURpLPk7QTBZPo0nH -TV1Q9EsTTqZQK0pPTeZRfkugTy9JUUzkUHhKn041UctL7E98SZ5NMlDHSupOgFITTDZPxUnr -TYBRE0s3TspSXkx+UBBKNE3JUV9Lgk8RSTZMxlBZSoBOGlGtS85PX0mBTRRQqErQTmJR90wZ -T6dJyU1fUPdLFU6pUkBMY0/xShRNq1FAS2FO9UkYTKpQOkpiTfpRjkuwTz9JZkz2UIpKsU5H -UdxL/E+OSa1NRVDaSv9OkFIlTEdP2kn+TZFRJ0tKTtxI/0ySUCJKRU3dUXZLlk8kSUhM3FBu -SpROLVHAS+JPcUmVTSdQvUriTndSCkwrT7xJ4E11UQpLLU7AUlNMdVAISipNv1FWS3tPB0kq -TL5QT0p3Tg5RpEvDT1RJeE0KUJ9Kw05ZUexMDU+dScFNVlDqSw1OoVI1TFhP6koOTaBRNkta -TuxJDkygUDNKV03vUYZLp081SVlM7lCASqZOPFHUS/JPgUmmTTxQ0EryTolSHkw9T85J9k2J -UR1LQU7WUmVMh1AaSj5N0lFpS41PGEk9TNFQZ0qJTiJRt0vYT2ZJik0gULRK105tUgNMIk+x -SddNbVEASyBOtlJLTGxP/kojTbZRTEtwTwBJIUy1UEdKbU4EUZlLvE9LSW9NAlCXSrpOT1Hk -TAZPlEm3TU5Q5UsFTphSL0xPT+JKBk2aUS1LU07lSQZMmFAqSk5N5VF9S59PLklQTONQd0qe -TjRRykvrT3tJnU0xUMZK6U5pUfpMHU+tSdNNZFD7SxxOr1JETGZP+kodTbBRRktrTvpJG0yw -UENKZ03+UZVLuE9GSWpM5lBkSnJN8VFxS5NPIUlGTNdQbEqSTihRvUveT1dJZUzeUFxKbE3q -UWtLdU7xSP5MeU/2ShhNrVFDS2RP00nhTXZRC0suTsFSVUx2UAlKLE3AUVdLfE8ISStMv1BS -SnhOD1GlS8RPVUl5TQxQoErFTlpR7UwOT55Jwk1XUOxLDk6iUjZMWU/rSg9NoVE3S1tO7kkP -TKFQNEpZTfBRh0upTzZJW0zvUIJKp049UdVL80+DSadNPVDRSvNOilIfTD5Pz0n3TYtRHktC -TtdSZ0yIUBtKQE3TUWpLjk8bST5M0lBoSopOI1G4S9pPZ0mMTSFQmkqqTixRp0uyT0FJaEz6 -UI1Kswi5AGYHsA7hBp4ErAvdA5gKzQJ/B5kOxgZ/Db8FdA0QBNIMEgPKCwMDfQqyAmgJrgFZ -Bl8NpwVcDJ0EUQzRBIULsQNvCqkL9wO2CukCsQneAt4KEQHGCP0AoQrRAoAJxAFvCLEBqwje -AIwHyA8FBecNEgTTDBUDzwjRAH8Hwg77BroExgwBA7gK7wK0B7QO6AalDeMFlQ01BOsMKwPi -Cx0DnQrTAoYJxgFyBoYNyAV9DLEEZgQcC1MDCQo6AfEM7QSlC9UDkArGDBYD0AsKAscJ/QLx -CiYB4gkfAMUGDw03BO8MLQPlCPYAnQfbDxsGzgTZDBgD0wsPAsoHxQ8ABrwN/gW7DVoFEAxW -A/4LPwO/CvkCvgnnAZUGqA3nBZwM0wSNBDsLdgMmCmACDww1A+YLIALiChQDEgpBAfYJOQDe -CjUB6gkvANYIGgYpDWEFFwxXBAcJGgC+CAMPPgbyDpMGTQ2NBUYMjwT0DDcD6gskAuQH5Q8h -BtMOEwXPDkoGAA0uBOoMJw1/BTIMdwQlC1wD1wsTAtIKBwG2Br8OAQXADPIEsQRSC5EDRQqB -Ai4MYAQFC0gC9gosAy4KaAIUCVgA+QdlDpQGUA2QBUoKWQIICUgA8Ag4Bj8NgQU0DH4EJwk1 -ANoIIQ9gBw8OtwZmDa0FYAyfBRsMZgQQC0kC+ggID0MG+A4yBegFlwzQBIsLtgNyDmkGJQ1X -BRIMTQ2SBUwMkwRCC30EawugA1kKmgJNCKAASgI1CXkBGQeGDrgGbw2wBWUKfQIoCWwBDwhU -BlQNlwVPDJUERwlSAPQIOw97By0O1QaPDcsFgwy2BUAMiAQuC2kDGwgnD2QHGQ5RBggFvwzw -BKsL2wORDbQFZgykBFgLlASUC70DeQqxAmcLsANtCqgCXQmnB6gO2waSDdEFigqTAkYJiwEy -CHcGgQ22BW0MpgRbCXMBFwhcD5QHSAA+B30OrgZoDagO8wauDe0FpQzaBVUMmARMC4sDOgg/ -D4AHMQ5xBioF0Q0EBMUL+QO3DdQFiQy9BHULqASyC+IDmgrSAoQI7QCPB80PCQbCC9QDjgrE -AngJvAe+DvUGsg3yBakKrQJiCaoBUwiXBH8LqgNoCqECVwCoB+sPJgbZDhYGmA3fBYwMvwSG -CZYBNwh+ACIHZgcSDk8GAw00BO4AXAejDtIGkA3JDwwGww4FBcQM9QXsDRUE2AwXA9ELhAM3 -CnECIQlfAQMIRw+FBzUEyQwCA70K8QKqCQ8ArgfvDygG6QvzA7EK5wKhCdkH1Q8QBscOCAXJ -CswCfgnAAW4IrgDMCA8PSwb+DjMGuQ34BbEM6ASjCa0BWAiaAEUHjQcvDm4GKA1fBRED9As0 -AusKHwHcCRgAvQgCAHAHug7yBq0N7A8xBuIOHgXXDQgGDA09BPMMNAPpDS0E6QwmA+ELHAkp -AM4IEQ9RBwAMFAPOCwUCwwn7B/UPMgbqDiAF3AruAqIJ4AGQCMcA5AguD2wHHA5WBswODQXL -DP0EvwnFAXEIsgBjB6sHSw6CBjwNgAUzD1IHBA47BfMNJgYtDWQFGgxeBAgNVgUJDEsD/Qs5 -CUIA5wgvD3AHIwwsA+QLHgLgChIF+Q0lBOEMHgPaAjYJegEgCGQACQgdD1kHBg5DBfsLDQLI -CgEBrwjmCJgAQQeFDrUGaQHlCSMAyggMD0kA/whGD4QHNA51B2oOnAZSDZUFTg9zByQOXgYe -DUkGQA2FBTgMgwQsCoYCOwl8ASUIbA17BS0MdQQgC1kJZgEBCEsPiQc6DFUEBAtAAvUKKQJS -CZwBQAiEACkIMw91BycOZQYkCyMC4woVAdMJCgivAGIHpw7WBpEB+Qk9AOIIKw9qBOgMJQPg -CxsC3AEiCGsAEgdRDoUHjg69BnENtQVrCp8CVAmgAUUIhw2PBUgMkQRAC3wJgQEpCG0AEwdY -DH0EJgthAxYKSAJvCbEBXgieAEgIXg+NB0AOfQY3C0cC+QovAegJKgjLAHUHvQ70BrABRgiK -ADIHew6iB64O3AaXDdkFiwraAocJywFzCLUAZAetDs8GiQ3HBX4Msgq8AnAJtAFiCKMNrwVk -DKIEVguTA74K9AKrCeYBkQmlAUgIjQA5B48MlARGC4MDNApwA1wKnAJQCZoBPgKMCcwBdgi4 -AGUIdAAaB18OjAZLCOgAlAfSDw0GxgFjCKQAUgebDsgHwQ73BrYN9QWvDAgDwAr1ArIJ7A7x -BqsN6QWeDNgK4AKPCdIBegi+DdAFhAy4BHQLowPVCxIC0AoDAbUJugFmCKgAVwedDKUEWguY -A1AKiQorAeYJJgDNCBADewq0AmwJsAFbArMJ7gGXCNAAgAAAAAQctA8sPNAviTaZFCJDvRH7 -AAAABClEBZIeLTzYQ2sUSiVFEPAAAAAEPOQHWzEsJIo7rBHyHU0P0QAAAAQ85g5jMS0kiysg -Ero4pRCdAAAABB5KBMQ+XjE7OEwRwkVHD50AAAAEOBpPJh5LAr8+XzE+HQVIawAAAARAL08n -JjEL8UYSOZsk7EhsAAAABCxdAB0hYT/wRoAcGChfGeoAAAAEOasGDS3iIW0oEhwUNUQYnAAA -AAQ5sAYOLeYhbygTG8Q1RhhMAAAABCF+DthBejSGO7oaoR1YGHUAAAABL35DAwAAAAE2Ix40 -AAAABEGTDgo2JCk6L/UZeT2RFfEAAAAEPO8AmDE0JJMrKRbQOKwUqAAAAAQxfk8yQx4EjDfi -KstB50htAAAABB5OBoI+ZDFCOFMW80VKE30AAAAEHk8Ggz5lMUM4VBbNRUsTVwAAAAQxTw9e -JhlEnCBHFVEtBxM2AAAABDf4AtEsRB/dJocVeTOnEhcAAAAEPn4FwTLXJiUsthRqOmwSOAAA -AAEcpS+QAAAABC4mTztACQN6NIQnxz7NSG4AAAABKTM82wAAAAQhhAETQX40jzvCEc0dXw+u -AAAABCGGARRBgDSQO8MRqB1gHGsAAAABL4NDCgAAAAQuAAcBIvdBix0SEcop9htGAAAABEGX -AEY2Kik+L/kQPj2UGvcAAAAEIxcGNEMJNjY9RxwxHvwaAgAAAAQ2RQ78KsUeRCT6HCwx+hiu -AAAABCreDisf2T50RQcZiSbfF0kAAAABOZQhcAAAAAQxVwGaJh5EoiBOGY0tDhdKAAAABD6B -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 -NiceNgAAAAE8zSSASoM=' base64Decoded asByteArray -] - -{ #category : #resources } -RTOSM class >> downloadBuildingsAndStreamKampungMelayu [ - "Retrieving some data from OpenStreetMap" - - ^ TRPlatform current httpClientRequestClass new - url: 'http://overpass-api.de/api/interpreter'; - queryAt: 'data' - put: - '[out:json] -[timeout:25] -; -( - way["waterway"="riverbank"](-6.22170,106.85923,-6.21970,106.86323); - way["building"="yes"](-6.22170,106.85923,-6.21970,106.86323); -); -out body; - >; -out skel qt;'; - contentReader: [ :entity | TRPlatform current jsonReaderClass fromString: entity contents ]; - get -] - -{ #category : #resources } -RTOSM class >> downloadCityCoordinatesFor: aCityName [ - "Retrieving some data from FreeBase. We do only capitals for the time being." - - " - self downloadCityCoordinatesFor: 'Dili' - " - - ^ (((TRPlatform current httpClientRequestClass new - url: 'http://api.geonames.org/searchJSON'; - queryAt: 'q' - put: (aCityName copyWithoutAll: - ' -'); queryAt: 'maxRows' - put: '1'; - queryAt: 'username' - put: 'demo'; - contentReader: [ :entity | TRPlatform current jsonReaderClass fromString: entity contents ]; - get) at: 'geonames') first ) - in: [ :city | - ^ (city at: 'lat') asNumber@ (city at: 'lng') asNumber ] -] - -{ #category : #resources } -RTOSM class >> downloadCountries [ - "Retrieving some data from FreeBase." - - "self downloadCountries" - - ^ TRPlatform current httpClientRequestClass new - url: 'http://restcountries.eu/rest/v1/all'; - contentReader: [ :entity | TRPlatform current jsonReaderClass fromString: entity contents ]; - get -] - -{ #category : #resources } -RTOSM class >> downloadCountryCoordinates: aCountryName [ - "Retrieving some data from FreeBase." - - "self downloadCountryCoordinates: 'Brunei'" - - | result | - result := TRPlatform current httpClientRequestClass new - url: 'https://www.googleapis.com/freebase/v1/mqlread'; - queryAt: 'query' - put: - ('[{ - "limit":1, - "type": "/location/country", - "name": "' , aCountryName - , - '", - "/location/location/geolocation": [{ - "longitude": null, - "latitude": null - }], - "/location/statistical_region/population": [{ - "limit": 1, - "number": null, - "year": null, - "year<": "2014", - "sort": "-year" - }] -}]' - copyWithoutAll: - ' -'); - contentReader: [ :entity | TRPlatform current jsonReaderClass fromString: entity contents ]; - get. - ^ ((result at: 'result') first at: '/location/location/geolocation') first - in: [ :c | (c at: 'latitude') @ (c at: 'longitude') ] -] - -{ #category : #resources } -RTOSM class >> earthR [ - "Earth R in km." - - ^ 6378.1370 -] - -{ #category : #resources } -RTOSM class >> equatorLength [ - "Equator length in km. self earthR * 2* Float pi" - - ^ 40075.016685578485 -] - -{ #category : #resources } -RTOSM class >> maxLatitude [ - ^85.05112877980659 -] - -{ #category : #resources } -RTOSM class >> minLatitude [ - ^-85.05112877980659 -] - -{ #category : #resources } -RTOSM class >> peopleForUNHCR [ - "Data extracted from http://popstats.unhcr.org/PSQ_POC.aspx" - - ^ '"Extracted from the UNHCR Population Statistics Reference Database, United Nations High Commissioner for Refugees." -Date extracted: 2014-11-03 09:34 +00:00 - -"Overview – Persons of concern to UNHCR" - -Year,Country/territory of residence,Total population -2013,Afghanistan,985191 -2013,Albania,7747 -2013,Algeria,95921 -2013,Angola,45462 -2013,Antigua and Barbuda,* -2013,Argentina,4164 -2013,Armenia,13967 -2013,Aruba,* -2013,Australia,47878 -2013,Austria,78845 -2013,Azerbaijan,614260 -2013,Bahamas,22 -2013,Bahrain,346 -2013,Bangladesh,231145 -2013,Barbados,* -2013,Belarus,7380 -2013,Belgium,39477 -2013,Belize,83 -2013,Benin,291 -2013,Venezuela,205313 -2013,Bosnia and Herzegovina,163737 -2013,Botswana,2983 -2013,Brazil,22029 -2013,British Virgin Islands,* -2013,Brunei Darussalam,20524 -2013,Bulgaria,8784 -2013,Burkina Faso,29999 -2013,Burundi,134345 -2013,Cambodia,70 -2013,Cameroon,123047 -2013,Canada,182437 -2013,Cayman Islands,5 -2013,Central African Republic,911369 -2013,Chad,454934 -2013,Chile,2124 -2013,China,301394 -2013,Colombia,5368403 -2013,Congo,54741 -2013,Costa Rica,21110 -2013,Côte d''Ivoire,768694 -2013,Croatia,20266 -2013,Cuba,377 -2013,Curaçao,58 -2013,Cyprus,6438 -2013,Czech Republic,4896 -2013,Democratic Republic of the Congo,3813483 -2013,Denmark,18966 -2013,Djibouti,23787 -2013,Dominican Republic,211533 -2013,Ecuador,135467 -2013,Egypt,253183 -2013,El Salvador,37 -2013,Eritrea,3230 -2013,Estonia,91333 -2013,Ethiopia,435867 -2013,Fiji,7 -2013,Finland,14788 -2013,France,285417 -2013,Gabon,3995 -2013,Gambia,9769 -2013,Georgia,259544 -2013,Germany,334724 -2013,Ghana,20484 -2013,Greece,72942 -2013,Guatemala,168 -2013,Guinea,8848 -2013,Guinea-Bissau,8624 -2013,Guyana,7 -2013,Haiti,8 -2013,Honduras,28 -2013,"Hong Kong SAR, China",1920 -2013,Hungary,4351 -2013,Iceland,422 -2013,India,192033 -2013,Indonesia,10268 -2013,Iraq,1450548 -2013,Republic of Ireland,11481 -2013,Islamic Republic of Iran,857398 -2013,Israel,56192 -2013,Italy,91976 -2013,Jamaica,18 -2013,Japan,10113 -2013,Jordan,646262 -2013,Kazakhstan,11268 -2013,Kenya,607190 -2013,Kuwait,94657 -2013,Kyrgyzstan,12257 -2013,Latvia,268106 -2013,Lebanon,862459 -2013,Lesotho,24 -2013,Liberia,54890 -2013,Libya,91062 -2013,Liechtenstein,91 -2013,Lithuania,4834 -2013,Luxembourg,3964 -2013,"Macao SAR, China",* -2013,Madagascar,6 -2013,Malawi,16921 -2013,Malaysia,260479 -2013,Mali,325947 -2013,Malta,10750 -2013,Mauritania,93576 -2013,Mexico,3094 -2013,Monaco,34 -2013,Mongolia,24 -2013,Montenegro,20075 -2013,Morocco,4911 -2013,Mozambique,15099 -2013,Myanmar,1212388 -2013,Namibia,5136 -2013,Nauru,533 -2013,Nepal,46950 -2013,Netherlands,87011 -2013,New Zealand,1609 -2013,Nicaragua,199 -2013,Niger,92891 -2013,Nigeria,2496 -2013,Norway,54312 -2013,Oman,208 -2013,Pakistan,2460014 -2013,Palau,* -2013,Panama,18219 -2013,Papua New Guinea,9777 -2013,Paraguay,132 -2013,Peru,1593 -2013,Philippines,335285 -2013,Plurinational State of Bolivia,729 -2013,Poland,29295 -2013,Portugal,1242 -2013,Qatar,1340 -2013,South Korea,3059 -2013,Republic of Moldova,2296 -2013,Romania,2140 -2013,Russian Federation,189921 -2013,Rwanda,81461 -2013,Saint Kitts and Nevis,* -2013,Saint Lucia,* -2013,Saudi Arabia,70645 -2013,Senegal,16690 -2013,Serbia (and Kosovo: S/RES/1244 (1999)),290849 -2013,Sierra Leone,2852 -2013,Singapore,* -2013,Sint Maarten (Dutch part),* -2013,Slovakia,2532 -2013,Slovenia,192 -2013,Solomon Islands,* -2013,Somalia,1286158 -2013,South Africa,298000 -2013,South Sudan,561097 -2013,Spain,9120 -2013,Sri Lanka,85543 -2013,State of Palestine,* -2013,Sudan,2083609 -2013,Swaziland,1017 -2013,Sweden,162236 -2013,Switzerland,74562 -2013,Syrian Arab Republic,6973294 -2013,Tajikistan,5674 -2013,Thailand,647570 -2013,The former Yugoslav Republic of Macedonia,2855 -2013,Timor-Leste,* -2013,Togo,21132 -2013,Tonga,* -2013,Trinidad and Tobago,38 -2013,Tunisia,1056 -2013,Turkey,663416 -2013,Turkmenistan,8360 -2013,Turks and Caicos Islands,* -2013,Uganda,294744 -2013,Ukraine,41618 -2013,United Arab Emirates,676 -2013,United Kingdom,149186 -2013,United Republic of Tanzania,264747 -2013,United States of America,347920 -2013,Uruguay,203 -2013,Uzbekistan,138 -2013,Vanuatu,* -2013,Vietnam,11000 -2013,Yemen,649126 -2013,Zambia,52981 -2013,Zimbabwe,67082 -' -] - -{ #category : #accessing } -RTOSM >> earthR [ - "Earth R according to ratio." - - ^ RTOSM earthR * self ratio -] - -{ #category : #accessing } -RTOSM >> equatorLength [ - "Equator length in km. self earthR * 2* Float pi" - - ^ RTOSM equatorLength * self ratio -] - -{ #category : #accessing } -RTOSM >> extent: aPoint [ - self assert: (aPoint x > 0 and: [ aPoint y > 0 ]). - self rectangle: (aPoint negated / 2 extent: aPoint) -] - -{ #category : #accessing } -RTOSM >> latLon: aPoint distance: d [ - "Given a latLon point, convert d in meter to the coordinates of the projection (i.e. Mercator deformation outside the equator)." - - ^ d / 1000.0 * self ratio / aPoint x degreesToRadians cos -] - -{ #category : #accessing } -RTOSM >> latLonToRoassal: aPoint [ - "aPoint is lat @ lon. Don't forget it is inverted compared to x, y coordinates." - - ^ (self lonToRoassal: aPoint y) @ (self latToRoassal: aPoint x) -] - -{ #category : #accessing } -RTOSM >> latToRoassal: lat [ - | l | - l := ((lat min: self maxLatitude) max: self minLatitude) degreesToRadians. - ^ (Float pi / 4 + (l / 2)) tan ln * self earthR negated -] - -{ #category : #accessing } -RTOSM >> lonToRoassal: lon [ - ^ self equatorLength * (lon asFloat / 360) -] - -{ #category : #accessing } -RTOSM >> maxLatitude [ - ^ RTOSM maxLatitude -] - -{ #category : #accessing } -RTOSM >> minLatitude [ - ^ RTOSM minLatitude -] - -{ #category : #accessing } -RTOSM >> onload [ - ^ onload -] - -{ #category : #accessing } -RTOSM >> onload: aBlock [ - onload := aBlock -] - -{ #category : #accessing } -RTOSM >> pixelLength [ - "Pixel length at equator at highest zoom factor. " - - ^ RTOSM equatorLength * self ratio / 256 -] - -{ #category : #accessing } -RTOSM >> ratio [ - ^ ratio ifNil: [ ratio := 1.0 ] -] - -{ #category : #accessing } -RTOSM >> ratio: aNumber [ - ratio := aNumber -] - -{ #category : #accessing } -RTOSM >> rectangle [ - ^ rectangle -] - -{ #category : #accessing } -RTOSM >> rectangle: anObject [ - rectangle := anObject -] - -{ #category : #accessing } -RTOSM >> trachelShapeClass [ - ^ TROSMShape -] - -{ #category : #accessing } -RTOSM >> updateFor: anElement trachelShape: trachelShape [ - "Do nothing?" - - trachelShape isNil - ifTrue: [ ^ self ]. - rectangle ifNotNil: [ trachelShape rectangle: rectangle ]. - ratio ifNotNil: [ trachelShape ratio: ratio ]. - trachelShape onload: onload. -] diff --git a/src/Roassal2/RTOSMTest.class.st b/src/Roassal2/RTOSMTest.class.st deleted file mode 100644 index 1fdba5e28..000000000 --- a/src/Roassal2/RTOSMTest.class.st +++ /dev/null @@ -1,35 +0,0 @@ -Class { - #name : #RTOSMTest, - #superclass : #RTTest, - #category : #'Roassal2-OpenStreetMap' -} - -{ #category : #tests } -RTOSMTest >> testBasic [ - RTView new add: RTOSM element -] - -{ #category : #tests } -RTOSMTest >> testExtent [ - RTOSM new extent: 50 @ 50 -] - -{ #category : #tests } -RTOSMTest >> testLatLonDistance [ - self assert: (#(#Float #BoxedFloat64 #SmallFloat64) includes: (RTOSM new latLon: 48.85 @ 2.3 distance: 100) class name) -] - -{ #category : #tests } -RTOSMTest >> testLonToRoassal [ - self assert: (RTOSM new latLonToRoassal: 48.85 @ 2.3) class equals: Point -] - -{ #category : #tests } -RTOSMTest >> testPixelLength [ - self assert: (RTOSM new pixelLength) > 0 -] - -{ #category : #tests } -RTOSMTest >> testRatio [ - self assert: (RTOSM new ratio) equals: 1.0 -] diff --git a/src/Roassal2/RTObject.class.st b/src/Roassal2/RTObject.class.st deleted file mode 100644 index eff287620..000000000 --- a/src/Roassal2/RTObject.class.st +++ /dev/null @@ -1,19 +0,0 @@ -" -Root of most of the Roassal classes. -" -Class { - #name : #RTObject, - #superclass : #Object, - #category : #'Roassal2-Core' -} - -{ #category : #'as yet unclassified' } -RTObject class >> basicNew [ - ^ super basicNew -] - -{ #category : #converting } -RTObject >> asGroup [ - ^ RTGroup with: self - -] diff --git a/src/Roassal2/RTObjectBrowser.class.st b/src/Roassal2/RTObjectBrowser.class.st deleted file mode 100644 index 931c0e50f..000000000 --- a/src/Roassal2/RTObjectBrowser.class.st +++ /dev/null @@ -1,175 +0,0 @@ -" -I am a simple builder of interactive view that allows you to inspect and navigate an object. - -Here is an example: --=-= - | b v | - b := RTObjectBrowser new. - v := RTView new. - v addElement: RTBox element. - b object: v. - b --=-=-= -" -Class { - #name : #RTObjectBrowser, - #superclass : #RTBuilder, - #instVars : [ - 'target', - 'objects', - 'last' - ], - #category : #'Roassal2-Experimental' -} - -{ #category : #private } -RTObjectBrowser >> addInteractions: b [ - | obj | - b interaction menu - item: 'Inspect' action: [:e | e model inspect]; - item: 'Browse class' action: [ :e | e model class browse ]; - item: 'Close ' action: [:e | - obj := self objects at: e model. - (self objects at: e model) do: #remove. - self objects removeKey: e model. - view canvas focusOnCenterScaled. - view signalUpdate ]. -] - -{ #category : #private } -RTObjectBrowser >> addNewElement: anElement [ - | pos anime | - pos := self positionFor: anElement. - anElement key first translateTo: pos. - view addAll: anElement key. - view addAll: anElement value. - anime := RTAddElementAnimation new. - anime shape circle color: Color transparent; borderColor: Color blue. - anime element: anElement key during: 0.75. - view canvas focusOnCenterScaled. - view addAnimation: anime. -] - -{ #category : #private } -RTObjectBrowser >> addNewObject: anObject [ - | newElement | - newElement := self createElementsFor: anObject. - self addNewElement: newElement. - self objects at: anObject put: newElement key. -] - -{ #category : #'adding item' } -RTObjectBrowser >> addObject: anObject [ - | bool | - - bool := false. - anObject ifNil: [ ^ bool ]. - (self contains: anObject) ifFalse: [ - self addNewObject: anObject. - bool := true ]. - - self selectObject: anObject. - ^ bool. - -] - -{ #category : #testing } -RTObjectBrowser >> contains: anObject [ - ^ self objects includesKey: anObject -] - -{ #category : #private } -RTObjectBrowser >> createElementsFor: anObject [ - | b vars edges | - b := RTMondrian new. - b shape box color: Color veryLightGray; - withTextAbove: [ anObject class name ]. - self addInteractions: b. - - b node: anObject forIt: [ - b shape label text: #key; - if: [ :assoc | assoc value isNil ] color: Color red. - b interaction - noInteractions; - highlight; - when: TRMouseClick do: [ :evt | - self openNewObject: evt ]; - popupText: [:ass | ass value asString ]. - vars := anObject class allInstVarNames collect: [ :n | - n -> (anObject instVarNamed: n)]. - - b nodes: vars. - b layout verticalLine ]. - b build. - edges := vars - select: [ :v | self objects includesKey: v value ] - thenCollect: [ :v | self - edgeFrom: (b view elementFromModel: v) - to: (self objects at: v value) first ]. - ^ b view elements->edges. -] - -{ #category : #hooks } -RTObjectBrowser >> createView [ - ^ super createView @ RTDraggableView @ RTZoomableView. -] - -{ #category : #private } -RTObjectBrowser >> edgeFrom: e1 to: e2 [ - ^ RTArrowedLine new - withShorterDistanceAttachPoint; - color: Color blue; - edgeFrom: e1 to: e2 -] - -{ #category : #initialization } -RTObjectBrowser >> initialize [ - super initialize. - objects := IdentityDictionary new. -] - -{ #category : #public } -RTObjectBrowser >> object: anObject [ - target := anObject -] - -{ #category : #accessing } -RTObjectBrowser >> objects [ - ^ objects -] - -{ #category : #private } -RTObjectBrowser >> openNewObject: evt [ - | obj temp | - obj := evt element model value. - obj ifNil: [ ^ self ]. - self addObject: obj. - temp := (self objects at: obj) first. - (view edges select: [ :e | - e from = evt element and: [ e to = temp ] ]) ifEmpty: [ - view add: (self edgeFrom: evt element to: (self objects at: obj) first) ] -] - -{ #category : #private } -RTObjectBrowser >> positionFor: anElement [ - "something fancy here to find a nice position for this element" - | rect res | - rect := view canvas encompassingRectangle. - (last isNil or: [last > 4]) ifTrue: [ last := 1 ]. - res := rect corners at: last. - last := last + 1. - ^ res. - -] - -{ #category : #hooks } -RTObjectBrowser >> renderIn: aView [ - view := aView. - target ifNotNil: [ - self addNewObject: target]. -] - -{ #category : #acctions } -RTObjectBrowser >> selectObject: anObject [ - -] diff --git a/src/Roassal2/RTOnlineDocumentation.class.st b/src/Roassal2/RTOnlineDocumentation.class.st deleted file mode 100644 index 963b26575..000000000 --- a/src/Roassal2/RTOnlineDocumentation.class.st +++ /dev/null @@ -1,64 +0,0 @@ -Class { - #name : #RTOnlineDocumentation, - #superclass : #RTAbstractWorldMenu, - #category : #'Roassal2-MorphSpecific-Menu' -} - -{ #category : #'world menu' } -RTOnlineDocumentation class >> menuCommandOn: aBuilder [ - - (aBuilder item: #'Online documentation') - order: 0.001; - parent: #Roassal; - label: 'Online documentation'; - help: 'opne the Roassal documentation in a web browser'; - icon: (Smalltalk ui icons iconNamed: #smallHelp); - action: [ WebBrowser openOn: 'http://AgileVisualization.com' ] -] - -{ #category : #'instance creation' } -RTOnlineDocumentation >> addAnimationTo: v [ - | e | - v when: TRMouseClick do: [ :event | v clean ]. - v - when: TRMouseMove - do: [ :event | - e := (RTBox new - color: (Color red alpha: 0.2); - size: 20 atRandom + 5) element. - e translateTo: event position. - v add: e. - v - addAnimation: - (RTAccelerationMove - to: event position + ((150 atRandom - 75) @ (150 atRandom - 75)) - during: 5 - on: e) ] -] - -{ #category : #'instance creation' } -RTOnlineDocumentation >> open [ - | v labels | - v := RTView new. - v add: (RTBitmap new form: TRPlatform current roassalIcon) element. - labels := RTLabel - elementsOn: - #('Agile Visualization is about crafting interactive' 'visualizations in extremely short production cycle.' 'Roassal is a visualization engine that promotes' 'Agile Visualization.' '' 'A large body of documentation is available online: '). - labels - add: - ((RTLabel new color: Color veryVeryDarkGray) - elementOn: 'http://AgileVisualization.com'). - labels - addAll: - (RTLabel - elementsOn: - #('A printed version and an eBook are available for sale.' '' '' 'We are deeply thankful to all of you involved' 'in the development of Roassal')). - v add: labels. - RTVerticalLineLayout on: labels. - TRConstraint move: v elements first onTheLeftOf: labels. - - - "Adding animation" - self addAnimationTo: v. - v openTitled: 'Roassal Visualization Engine' -] diff --git a/src/Roassal2/RTOpenStreetMapExample.class.st b/src/Roassal2/RTOpenStreetMapExample.class.st deleted file mode 100644 index 0e4b5b4d3..000000000 --- a/src/Roassal2/RTOpenStreetMapExample.class.st +++ /dev/null @@ -1,2093 +0,0 @@ -" -RTOpenStreeMapExample new installTitle: 'VerySimple' - code: - ' - | v | - v := RTView new. - map := RTOSM new. - e := map element. - - - v add: e. - - paris := 48.8567 @ 2.3508. - - v @ RTDraggableView. - - v canvas camera translateTo: (map latLonToRoassal: paris). - v canvas camera noInitializationWhenOpen. -self halt. - ^ v' - -" -Class { - #name : #RTOpenStreetMapExample, - #superclass : #RTAbstractExample, - #category : #'Roassal2-OpenStreetMap' -} - -{ #category : #sources } -RTOpenStreetMapExample >> example [ - - - "This example center the view on lat 0, lon 0." - " - RTOpenStreetMapExample new example - " - - | v s e | - v := RTView new. - s := RTOSM new. - e := s element. - v add: e. - v add: (RTBox new size: 400) element @ RTHighlightable @ RTDraggable. - v canvas addMenu: 'In' callback: [ RTZoomInMove on: v ]. - v canvas addMenu: 'Out' callback: [ RTZoomOutMove on: v ]. - v @ RTDraggableView @ RTZoomableView. - v canvas camera scale: 0.05. - RTEmptyViewContext setOnView: v. - ^ v -] - -{ #category : #sources } -RTOpenStreetMapExample >> exampleCitySelection [ - - - | v map e movingCamera mb | - v := RTView new. - map := RTOSM new. - e := map element. - - v add: e. - - v @ RTDraggableView @ RTZoomableView. - - movingCamera := [ :locationLatLong | - v canvas camera - translateTo: (map latLonToRoassal: locationLatLong); - scale: 1.5. - - v signalUpdate ]. - - mb := RTMenuBuilder new. - mb view: v. - mb menu: 'Paris' callback: [ movingCamera value: 48.8567 @ 2.3508 ]. - mb menu: 'London' callback: [ movingCamera value: 51.50722 @ -0.12750 ]. - mb menu: 'NewYork' callback: [ movingCamera value: 40.7127 @ -74.0059 ]. - mb build. - v canvas camera scale: 0.05. - RTEmptyViewContext setOnView: v. - ^ v -] - -{ #category : #icons } -RTOpenStreetMapExample >> exampleCitySelectionIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABeCAYAAADVA7GfAAACpElEQVR4XuXVS09aQQCG4f65 -7l25aJMuWJSQxjY0BUlpopVgaAkQG1opwSA3QUAOF+83VLxgAuo/+npmFk1N2qo747t4M2TO -nOFkHk54tnFzow1+jyY+CB+E34NAvtVqag2Ht+bWr6/vtZm592/z0UzmQQ8VX162/TnXGY0U -y+VuzSXL5acP8m52Vt3xWP65OX1Op+UNBhWMxfTS57tzM3NvKB5XOJlUxnFU2NmRLxTS60BA -HxMJPZ+Y0Auv9859UpWKPH6/Xk1N6VMqJe/0tALz83oTDiuyuGjHSY9Hb2dm9D4SefpviBnN -YZrP5mC/N5ta6ffVdX+l/9vsaz5vf9n1weD3XLrR0JelJSWKRcXd6wvV6r3fkmSpZO/7EI3a -5zHzCXfOvCnmmX6228p2Ovz/EH58ED4IPz4IPz4IH4QfH4QPwo8Pwgfhxwfhg/Djg/Djg/BB -+PFB+CD8+CB8EH58ED4IPz4IH4R/CHwQfnwQPgg/PggfhB8fhA/Cjw/CB+HHB+HHB+GD8OOD -8EH48UH4IPz4IHwQfnwQfnwQPgg/PggfhB8fhA/Cjw/CB+HHB+HHB+GD8OOD8EH48UH4IPz4 -IHwQfnwQfnwQPgg/PggfhB8fhA/Cjw/CB+HHB+HHB+GD8OOD8EH48UH4IPz4IHwQfnwQfnwQ -Pgg/PggfhB8fhA/Cjw/CB+HHB3lcNU9OVDs4ULHXU3VvT2unp6ru7irXaNhx9fBQrfNzu6a6 -v6/mYKDS5qac4dBe61xe2uvOxYW9v9DtqnV2ZucWslm7fsXd50ehYL/LzHdHIz7Iv+qNx/bQ -zCE1jo/twa+5B2oOfbXfV/3oSHV3NHOV7W271qxbv7qyiAbF7FPe2rKZ9WaPnns97zh2baHT -Uc3FNJ/bLqAZfwHUaAlcKtt76AAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTOpenStreetMapExample >> exampleDili [ - - - - "This example puts a name on Dili and let the background be moved around." - - "RTOpenStreetMapExample new exampleDili" - - | view map e p | - view := RTView new. - map := RTOSM new - extent: 300 @ 300; - ratio: 10. - e := map elementOn: 'OSM'. - view add: e @ RTDraggable. - p := map latLonToRoassal: (RTOSM downloadCityCoordinatesFor: 'Dili'). - view add: ((RTLabel new text: 'Dili') element @ RTHighlightable translateTo: p). - view canvas addMenu: 'In' callback: [ RTZoomInMove on: view ]. - view canvas addMenu: 'Out' callback: [ RTZoomOutMove on: view ]. - view @ RTDraggableView @ RTZoomableView. - RTEmptyViewContext setOnView: view. - ^ view -] - -{ #category : #sources } -RTOpenStreetMapExample >> exampleGraphOnLondon [ - - - | v map data b d whiteBackground london elementsAndEdges | - v := RTView new. - map := RTOSM new. - v add: map element. - - "Place to set the data and center the camera" - london := 51.507222@ -0.1275. - - "Some arbitrary data" - data := ((1 to: 500) collect: [ :i | 50 atRandom - 25 ]) cumsum. - - "We build the graph" - b := RTGrapher new. - b extent: 100@30. - d := RTData new. - d noDot. - d connectColor: Color red. - d points: data. - - b add: d. - b axisY - labelFontHeight: 6; - color: Color red; - title: 'Sale'. - - b axisX color: Color red; noTick; title: 'country'. - b build. - elementsAndEdges := b view elements, b view edges. - - "We create a white background" - whiteBackground := (RTRoundedBox new color: Color white trans; borderRadius: 10) element. - v add: whiteBackground. - v addAll: elementsAndEdges. - RTNest new on: whiteBackground nest: elementsAndEdges. - whiteBackground translateTo: (map latLonToRoassal: london). - - v canvas camera translateTo: (map latLonToRoassal: london). - v canvas camera noInitializationWhenOpen. - v canvas camera scale: 1.5. - v @ RTDraggableView @ RTZoomableView. - RTEmptyViewContext setOnView: v. - ^ v -] - -{ #category : #icons } -RTOpenStreetMapExample >> exampleGraphOnLondonIcon [ - ^ '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' -] - -{ #category : #sources } -RTOpenStreetMapExample >> exampleGraphs [ - - - - | v map e paris newyork london data allGraphElements | - - v := RTView new. - map := RTOSM new. - e := map element. - v add: e. - - paris := 48.8567 @ 2.3508. - newyork := 40.7127 @ -74.0059. - london := 51.507222@ -0.1275. - - data := Array with: (Array with: paris with: #(10 5 10 3 10 6 8)) with: - (Array with: london with: #(5 3 3 -5 )) with: - (Array with: newyork with: #(5 -2 10 15 -10)). - - data do: [ :tupple | - | grapher dataSet | - grapher := RTGrapher new. - grapher extent: 150 @ 100. - - dataSet := RTData new. - dataSet points: tupple second. - dataSet barShape width: 10; color: Color red. - grapher add: dataSet. - - grapher axisY. - grapher axisX noLabel; noTick. - grapher build. - - allGraphElements := grapher view elements. - v addAll: allGraphElements. - allGraphElements translateTo: (map latLonToRoassal: tupple first) - ]. - - v canvas camera translateTo: (map latLonToRoassal: paris). - v canvas camera noInitializationWhenOpen. - v canvas camera scale: 0.3. - v @ RTDraggableView @ RTZoomableView. - RTEmptyViewContext setOnView: v. - ^ v -] - -{ #category : #icons } -RTOpenStreetMapExample >> exampleGraphsIcon [ - ^ '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' -] - -{ #category : #sources } -RTOpenStreetMapExample >> exampleOpenStreetMap [ - - - - "This example uses fome OpenStreetMap data and represent part of the map as graphical entities on top of the map background." - - "We need a ratio here, otherwise Roassal centers incorrectly the view and has precision issues. This ratio of 10 means we are at: 100m at equator for 1.0 in Roassal coordinates." - - "RTOpenStreetMapExample new exampleOpenStreetMap" - - | v map response nodes | - v := RTView new. - map := RTOSM new ratio: 100. - v add: map element. - response := RTOSM buildingsAndStreamKampungMelayu. - nodes := (((response at: 'elements') select: [ :el | (el at: 'type') = 'node' ]) - collect: [ :el | (el at: 'id') -> (map latLonToRoassal: (el at: 'lat') @ (el at: 'lon')) ]) asDictionary. - ((response at: 'elements') select: [ :el | (el at: 'type') = 'way' ]) - do: [ :way | - | shape | - shape := RTPolygon new. - shape - color: - (((way at: 'tags') at: 'building' ifAbsent: [ ]) = 'yes' - ifTrue: [ Color gray ] - ifFalse: [ Color blue ]). - shape vertices: ((way at: 'nodes') collect: [ :n | nodes at: n ]). - v add: (shape elementOn: (way at: 'tags')) @ RTPopup ]. - v canvas addMenu: 'In' callback: [ RTZoomInMove on: v ]. - v canvas addMenu: 'Out' callback: [ RTZoomOutMove on: v ]. - v @ RTDraggableView @ RTZoomableView. - RTEmptyViewContext setOnView: v. - v open. - v canvas camera focusOnCenterScaled -] - -{ #category : #sources } -RTOpenStreetMapExample >> exampleParis [ - - - | v map e paris | - v := RTView new. - map := RTOSM new - onload: [ self inform: 'Load done']. - e := map element. - v add: e. - - paris := 48.8567 @ 2.3508. - - v canvas camera translateTo: (map latLonToRoassal: paris). - v canvas camera noInitializationWhenOpen. - v canvas camera scale: 20. - v @ RTDraggableView @ RTZoomableView. - RTEmptyViewContext setOnView: v. - ^ v -] - -{ #category : #icons } -RTOpenStreetMapExample >> exampleParisIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAABtc0lEQVR4XmW9Z5Pt13Wnhw9m -fwFX2X5pu2psl6dKNWVprNFopkayZAUqkAQJAbgBuLlzPKFPzjnnnHPqeAMyQACkevlZ+1DU -0H7R1X37dp8+/71X+IUd3it/XpbcNCe79pTkFm75H6t78l8aFvlvKi+k13DKoFORUb8tzXpF -ysW81KslWTbDUillpF9pyWTUlYu8SywluyQzLtn58Ewm7awspgNZz4fS4Od77ZoM2nXp17MS -iD6R4ud5GdTiUgwcybDRkmGzxv9VpJByS8EdltermJye3ovDF5V0OiWNUpq/W5RosCzLWVOa -PruM8ymZj1ri93ll1ClLrxKUTCwsjhOrtGIRqVr3JHnskmrjV3LuSUvJviPr8ycydb2Qfqoh -rXpZWrWClCwWKe/vy03dLu1KWgb1En+/K5frtFzOu9IuhiVfrEo+E5f1YiS3Vwu53UxkOmxK -I5OXWjQrzZf7Yrfa5dTqlmg2IJ24T1pnp5LLeyVWikmtXZVCuSyJREIi0bCUikWJx6KSSSVl -WTiXQT8t61VWfvzxx/v3Gsul5Ao30ijGZdCLyr+rH8sHVac8bYdkkrfLYtKWVDLBQAwln89K -o1aUdiEkV72MjGptmTFZ7Upcrmp2mXcL4g85ZDruS7GQk2aNSSwVpJJLyLBblcuOU3z1M6l8 -kRVPK8pA52VedEqvVpNutSCZpE1KkQSDUuU1C3JV94nVnZJdS0KSlgsZzUay2ESlf/hKuvm0 -jPtNiUWCMh8WZF1mIrJeSZ/tyMe7YXlmzUklXyKQLiUbssjlyi/1RVnmkROpBAsESUPKybgs -W3FZOI+k6nVLOx7mNTvS6zTkcpOSJu8hWsvIBQPZrOYkFQ9Jt30j+WxP9mwJeXkSljftigwz -ZWk36xINexmfitSySWk1qtK1nEuD1yzU8vy7JtVyXpqtuhT5XKsUZVFxS72QZ4yKUquVmZCv -7t+r1hpSD7rIhKq8vivIfB4mI4oMdFK69YKJpGQiLp1WjYeryqBRkm45K3U+hj6rbAoHMq6E -ZUqm6M9Uwn7zZipMxKDblF6dQS875aYdkHdvGKB8VOIMXqffkFohK/lUWhbZU5nyt5o8WCtW -k1G9Q9a05LrM5JYC0vPuy6tXKQlEvpXCy2NZT3pMpEuuBnMpp/Ky6A6lHvMT/TvSjlrFSQDV -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' -] - -{ #category : #sources } -RTOpenStreetMapExample >> exampleSeismOnEarth [ - - - "This example reuse the seism data of Roassal 2. But we need to zoom out a lot to see any earthquake spot." - - "RTOpenStreetMapExample new exampleSeismOnEarth" - - | v map e tab | - tab := RTTabTable new input: RTMapLocationBuilder new seismData2 usingDelimiter: $,. - tab removeFirstRow. - tab replaceEmptyValuesWith: '0' inColumns: #(2 3 4 5). - tab convertColumnsAsFloat: #(2 3 4 5). - v := RTView new. - map := RTOSM new. - e := map element. - v add: e. - tab values - do: [ :row | - v - add: - (((RTEllipse new - width: (2 raisedTo: row fifth) * 10; - height: (2 raisedTo: row fifth) * 10; - color: (Color red alpha: 0.3)) elementOn: row fifth) @ RTPopup - translateTo: (map latLonToRoassal: row second @ row third)) ]. - v canvas addMenu: 'In' callback: [ RTZoomInMove on: v ]. - v canvas addMenu: 'Out' callback: [ RTZoomOutMove on: v ]. - v canvas camera scale: 0.035. - v @ RTDraggableView @ RTZoomableView. - RTEmptyViewContext setOnView: v. - ^ v -] - -{ #category : #sources } -RTOpenStreetMapExample >> exampleSeismOnEarthLive [ - - - "This example directly queries the usgs earthquake data. But we need to zoom out a lot to see any earthquake spot." - - "RTOpenStreetMapExample new exampleSeismOnEarthLive" - - | v map e tab | - tab := RTTabTable new - input: (TRPlatform current download: 'http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_month.csv') contents - usingDelimiter: $,. - tab removeFirstRow. - tab replaceEmptyValuesWith: '0' inColumns: #(2 3 4 5). - tab convertColumnsAsFloat: #(2 3 4 5). - v := RTView new. - map := RTOSM new. - e := map element. - v add: e. - tab values - do: [ :row | - v - add: - (((RTEllipse new - width: (2 raisedTo: row fifth) * 10; - height: (2 raisedTo: row fifth) * 10; - color: (Color red alpha: 0.3)) elementOn: row fifth) @ RTPopup @ RTHighlightable - translateTo: (map latLonToRoassal: row second @ row third)) ]. - v canvas addMenu: 'In' callback: [ RTZoomInMove on: v ]. - v canvas addMenu: 'Out' callback: [ RTZoomOutMove on: v ]. - v canvas camera scale: 0.035. - v @ RTDraggableView @ RTZoomableView. - RTEmptyViewContext setOnView: v. - ^ v -] - -{ #category : #sources } -RTOpenStreetMapExample >> exampleSeismOnEarthLiveZoom: aView [ - - - - "This example download a data set from the web and scale the view afterwards." - - "RTOpenStreetMapExample new exampleSeismOnEarthLiveZoom" - - aView canvas camera focusOnCenterScaled. - ^ aView -] - -{ #category : #sources } -RTOpenStreetMapExample >> exampleSeismOnEarthZoom: aView [ - - - - "This example reuse the seism data of Roassal 2." - - "RTOpenStreetMapExample new exampleSeismOnEarthZoom" - - aView canvas camera focusOnCenterScaled. - ^ aView -] - -{ #category : #sources } -RTOpenStreetMapExample >> exampleSeisms [ - - - | v map e tab | - tab := RTTabTable new - input: (TRPlatform current download: 'http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_month.csv') contents - usingDelimiter: $,. - tab removeFirstRow. - tab replaceEmptyValuesWith: '0' inColumns: #(2 3 4 5). - tab convertColumnsAsFloat: #(2 3 4 5). - v := RTView new. - map := RTOSM new. - e := map element. - v add: e. - tab values - do: [ :row | - v - add: - (((RTEllipse new - width: (2 raisedTo: row fifth) * 10; - height: (2 raisedTo: row fifth) * 10; - color: (Color red alpha: 0.3)) elementOn: row fifth) @ RTPopup @ RTHighlightable - translateTo: (map latLonToRoassal: row second @ row third)) ]. - - v canvas camera scale: 0.02; noInitializationWhenOpen. - v @ RTDraggableView @ RTZoomableView. - RTEmptyViewContext setOnView: v. - - ^ v -] - -{ #category : #icons } -RTOpenStreetMapExample >> exampleSeismsIcon [ - ^ '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' -] - -{ #category : #sources } -RTOpenStreetMapExample >> exampleVerySimple [ - - - - | v map e paris | - v := RTView new. - map := RTOSM new. - e := map element. - - v add: e. - - paris := 48.8567 @ 2.3508. - - v canvas camera translateTo: (map latLonToRoassal: paris). - v canvas camera noInitializationWhenOpen. - v canvas camera scale: 20. - v @ RTDraggableView @ RTZoomableView. - RTEmptyViewContext setOnView: v. - ^ v -] - -{ #category : #icons } -RTOpenStreetMapExample >> exampleVerySimpleIcon [ - ^ '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 -Pj7z/wEOLvZLsFGUsQAAAABJRU5ErkJggg==' -] - -{ #category : #accessing } -RTOpenStreetMapExample >> label [ - ^ 'OpenStreetMap Integration' -] diff --git a/src/Roassal2/RTOptimizedForceBasedLayout.class.st b/src/Roassal2/RTOptimizedForceBasedLayout.class.st deleted file mode 100644 index 354aad347..000000000 --- a/src/Roassal2/RTOptimizedForceBasedLayout.class.st +++ /dev/null @@ -1,47 +0,0 @@ -Class { - #name : #RTOptimizedForceBasedLayout, - #superclass : #RTForceBasedLayout, - #instVars : [ - 'mockElements' - ], - #category : #'Roassal2-Layouts' -} - -{ #category : #updating } -RTOptimizedForceBasedLayout >> addEdges: someEdges [ - "Probably something has to be done here" - super addEdges: someEdges -] - -{ #category : #hook } -RTOptimizedForceBasedLayout >> executeOnElements: elements [ - "The argument is the set of Roassal elements" - mockElements := elements collect: [ :e | RTMockElement new realElement: e ]. - super executeOnElements: mockElements. - mockElements do: #applyToRealElement -] - -{ #category : #accessing } -RTOptimizedForceBasedLayout >> prepareNodes: nodeElements [ - "Probably something has to be done here" - super prepareNodes: nodeElements -] - -{ #category : #accessing } -RTOptimizedForceBasedLayout >> setEdgesFromElements: elements [ - | view realElements realEdges mockEdges | - elements isEmpty ifTrue: [ ^ self ]. - - view := elements anyOne view. - realElements := elements collect: #realElement. - view ifNil: [ ^ self ]. - - realEdges := view edges select: [ :el | - (el isUsedInLayout and: [ realElements includes: el from ]) and: [ realElements includes: el to ] ]. - mockEdges := realEdges collect: [ :e | - RTMockEdge new - from: (elements detect: [ :ee | ee realElement == e from ]); - to: (elements detect: [ :ee | ee realElement == e to ]) ]. - self edges: mockEdges. - -] diff --git a/src/Roassal2/RTOptimizedForceBasedLayoutTest.class.st b/src/Roassal2/RTOptimizedForceBasedLayoutTest.class.st deleted file mode 100644 index 889af6062..000000000 --- a/src/Roassal2/RTOptimizedForceBasedLayoutTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #RTOptimizedForceBasedLayoutTest, - #superclass : #RTForceBasedLayoutTest, - #category : #'Roassal2-Tests' -} - -{ #category : #tests } -RTOptimizedForceBasedLayoutTest >> classToTest [ - ^ RTOptimizedForceBasedLayout -] diff --git a/src/Roassal2/RTOrderedCollection.class.st b/src/Roassal2/RTOrderedCollection.class.st deleted file mode 100644 index 9f671267c..000000000 --- a/src/Roassal2/RTOrderedCollection.class.st +++ /dev/null @@ -1,85 +0,0 @@ -Class { - #name : #RTOrderedCollection, - #superclass : #OrderedCollection, - #instVars : [ - 'addCallback', - 'viewToUpdate', - 'shapeBuilder', - 'interactionBuilder', - 'layoutBuilder' - ], - #category : #'Roassal2-Utility' -} - -{ #category : #adding } -RTOrderedCollection >> addAllLast: aCollection [ - "Add each element of aCollection at the end of the receiver. - Answer aCollection." - - | es | - aCollection do: [:each | super addLast: each]. - - aCollection do: [ :obj | addCallback rtValue: obj ]. - - es := self shape elementsOn: aCollection. - self interaction setUpElements: es. - self layout setUpElements: es. - viewToUpdate addAll: es. - self updateView. - ^ aCollection -] - -{ #category : #adding } -RTOrderedCollection >> addLast: object [ - | r | - r := super addLast: object. - addCallback rtValue: object. - ^ r -] - -{ #category : #accessing } -RTOrderedCollection >> at: index put: object [ - | r | - r := super at: index put: object. - addCallback rtValue: object. - ^ r -] - -{ #category : #accessing } -RTOrderedCollection >> interaction [ - interactionBuilder ifNil: [ interactionBuilder := RTInteractionBuilder new ]. - ^ interactionBuilder -] - -{ #category : #accessing } -RTOrderedCollection >> layout [ - layoutBuilder ifNil: [ layoutBuilder := RTLayoutBuilder new ]. - ^ layoutBuilder -] - -{ #category : #accessing } -RTOrderedCollection >> shape [ - shapeBuilder ifNil: [ shapeBuilder := RTShapeBuilder new ]. - ^ shapeBuilder -] - -{ #category : #callbacks } -RTOrderedCollection >> updateView [ - - viewToUpdate ifNotNil: [ viewToUpdate signalUpdate ] -] - -{ #category : #accessing } -RTOrderedCollection >> viewToUpdate [ - ^ viewToUpdate -] - -{ #category : #accessing } -RTOrderedCollection >> viewToUpdate: anObject [ - viewToUpdate := anObject -] - -{ #category : #callbacks } -RTOrderedCollection >> whenAddingDo: aOneArgBlock [ - addCallback := aOneArgBlock -] diff --git a/src/Roassal2/RTOrderedCollectionTest.class.st b/src/Roassal2/RTOrderedCollectionTest.class.st deleted file mode 100644 index 1654d781a..000000000 --- a/src/Roassal2/RTOrderedCollectionTest.class.st +++ /dev/null @@ -1,45 +0,0 @@ -Class { - #name : #RTOrderedCollectionTest, - #superclass : #RTTest, - #category : #'Roassal2-Utility' -} - -{ #category : #tests } -RTOrderedCollectionTest >> testAddingToView [ - - | v c | - v := RTView new. - - c := RTOrderedCollection new. - c viewToUpdate: v. - c shape - rectangle size: 10; - color: (Color blue alpha: 0.4). - - self assert: v numberOfElements equals: 0. - - c addAll: (1 to: 20). - self assert: v numberOfElements equals: 20. - v -] - -{ #category : #tests } -RTOrderedCollectionTest >> testCallback [ - - | t c lastAdded v | - t := 0. - v := RTView new. - c := RTOrderedCollection new. - c viewToUpdate: v. - c whenAddingDo: [ :object | t := t + 1. lastAdded := object ]. - - self assert: c isEmpty. - self assert: t equals: 0. - c add: 10. - self assert: c notEmpty. - self assert: t equals: 1. - self assert: lastAdded equals: 10. - - c addAll: (1 to: 4). - self assert: t equals: 5. -] diff --git a/src/Roassal2/RTPDFExporterPlugin.class.st b/src/Roassal2/RTPDFExporterPlugin.class.st deleted file mode 100644 index 077aa13f7..000000000 --- a/src/Roassal2/RTPDFExporterPlugin.class.st +++ /dev/null @@ -1,29 +0,0 @@ -Class { - #name : #RTPDFExporterPlugin, - #superclass : #RTAbstractPlugin, - #category : #'Roassal2-Plugins' -} - -{ #category : #hooks } -RTPDFExporterPlugin >> description [ - ^ 'When you open a visualization, you can export it by clicking on the "..." icon. -By loading this plugin, you will be able to export the visualization as a PDF file.' -] - -{ #category : #hooks } -RTPDFExporterPlugin >> execute [ - Gofer new - smalltalkhubUser: 'azazael' project: 'RTPDFExporter'; - package: 'ConfigurationOfRTPDFExporter'; load. - (Smalltalk at: #ConfigurationOfRTPDFExporter) loadDevelopment -] - -{ #category : #testing } -RTPDFExporterPlugin >> isLoaded [ - ^ RPackageOrganizer default includesPackageNamed: 'RTPDFExporter' -] - -{ #category : #hooks } -RTPDFExporterPlugin >> label [ - ^ 'Install PDF Exporter' -] diff --git a/src/Roassal2/RTPNGExporter.class.st b/src/Roassal2/RTPNGExporter.class.st deleted file mode 100644 index 2841ab5b0..000000000 --- a/src/Roassal2/RTPNGExporter.class.st +++ /dev/null @@ -1,155 +0,0 @@ -" -A RTPNGExporter export the view or builder provided as argument as a PNG file -" -Class { - #name : #RTPNGExporter, - #superclass : #RTObject, - #instVars : [ - 'view', - 'fileName', - 'saveWithScale' - ], - #category : #'Roassal2-Exporter-PNG' -} - -{ #category : #accessing } -RTPNGExporter >> builder [ - "Return a view or a builder that has been previous assigned" - ^ view -] - -{ #category : #accessing } -RTPNGExporter >> builder: aViewOrABuilder [ - view := aViewOrABuilder -] - -{ #category : #util } -RTPNGExporter >> cameraPositionNegated [ - ^ self encompassingRectangle center negated -] - -{ #category : #util } -RTPNGExporter >> cameraScale [ - | camera | - camera := self trachelCanvas camera. - ^ self saveWithScale - ifTrue: [ camera scale asFloat ] - ifFalse: [ camera defaultCameraScale ] -] - -{ #category : #util } -RTPNGExporter >> createFormCanvas [ - "Return a new form" - | form | - form := TRPlatform current formCanvasClass extent: self viewExtent. - form fillRectangle: self encompassingRectangle color: self trachelCanvas color. - ^ form -] - -{ #category : #util } -RTPNGExporter >> createSurface [ - ^ TRPlatform current surfaceClass extent: self viewExtent -] - -{ #category : #util } -RTPNGExporter >> encompassingRectangle [ - ^ self trachelCanvas encompassingRectangle -] - -{ #category : #public } -RTPNGExporter >> exportToFile [ - | trachelCanvas surface viewExtent | - trachelCanvas := self trachelCanvas. - viewExtent := self viewExtent. - surface := self createSurface. - surface - drawDuring: [ :cs | - "Probably not necessary since we have just created a surface" - surface clear; - fillRectangle: (0@0 corner: viewExtent) withSolidColor: view canvas color. - cs pathTransform - translateBy: self viewHalfExtent asFloatPoint; - scaleBy: self cameraScale; - translateBy: self cameraPositionNegated asFloatPoint. - trachelCanvas shapes do: [ :trachelShape | trachelShape drawOn: cs ]. - cs pathTransform loadIdentity scaleBy: 1.001. - "trachelCanvas fixedShapes do: [ :trachelShape | trachelShape drawOn: cs ]" ]. - - surface writeToPng: self fileName -] - -{ #category : #accessing } -RTPNGExporter >> fileName [ - ^ fileName -] - -{ #category : #accessing } -RTPNGExporter >> fileName: aFilenameAsString [ - fileName := aFilenameAsString -] - -{ #category : #initialization } -RTPNGExporter >> getIFrameDefFromView: aView label: aLabelAsString directory: aDirectory [ - "This method is useful when invoked from within Pillar" - - | pngFileName writeStream | - pngFileName := (aDirectory / aLabelAsString, 'png') pathString. - writeStream := pngFileName asFileReference writeStream. - RTPNGExporter new builder: aView; fileName: pngFileName; exportToFile. - ^ '' -] - -{ #category : #initialization } -RTPNGExporter >> initialize [ - super initialize. - self withoutScale. - self setDefaultFileName -] - -{ #category : #initialization } -RTPNGExporter >> insert: aView named: aName inPillarStream: aStream [ - self insert: aView named: aName inPillarStream: aStream directory: self defaultDirectory -] - -{ #category : #initialization } -RTPNGExporter >> insert: aView named: aName inPillarStream: aStream directory: aDirectory [ - | s | - s := self getIFrameDefFromView: aView label: aName directory: aDirectory. - aStream nextPutAll: '{{{
    ', s, ' }}}' -] - -{ #category : #accessing } -RTPNGExporter >> saveWithScale [ - ^ saveWithScale -] - -{ #category : #initialization } -RTPNGExporter >> setDefaultFileName [ - self fileName: 'roassal.png' -] - -{ #category : #util } -RTPNGExporter >> trachelCanvas [ - ^ self builder view canvas -] - -{ #category : #util } -RTPNGExporter >> viewExtent [ - ^ self encompassingRectangle extent asIntegerPoint * self cameraScale + (5 @ 5) -] - -{ #category : #util } -RTPNGExporter >> viewHalfExtent [ - ^ (self viewExtent / 2) asFloatPoint -] - -{ #category : #accessing } -RTPNGExporter >> withScale [ - saveWithScale := true. -] - -{ #category : #accessing } -RTPNGExporter >> withoutScale [ - saveWithScale := false -] diff --git a/src/Roassal2/RTPNGExporterTest.class.st b/src/Roassal2/RTPNGExporterTest.class.st deleted file mode 100644 index c7dba666e..000000000 --- a/src/Roassal2/RTPNGExporterTest.class.st +++ /dev/null @@ -1,81 +0,0 @@ -Class { - #name : #RTPNGExporterTest, - #superclass : #RTTest, - #instVars : [ - 'emptyExporter', - 'view', - 'exporter' - ], - #category : #'Roassal2-Exporter-PNG' -} - -{ #category : #running } -RTPNGExporterTest >> setUp [ - super setUp. - emptyExporter := RTPNGExporter new. - - view := RTView new. - exporter := RTPNGExporter new. - exporter builder: view. -] - -{ #category : #tests } -RTPNGExporterTest >> testBasic [ - - emptyExporter builder: view. - self assert: emptyExporter builder equals: view. - "5 @ 5 is a delta we add to make sure we have no pb when exporting - plus the delta from TRCanvas>>encompassingRectangle" - self assert: (emptyExporter viewExtent closeTo: (6 @ 6)). - self assert: (emptyExporter viewHalfExtent closeTo: (3 @ 3)). -] - -{ #category : #tests } -RTPNGExporterTest >> testCameraPosition [ - - self assert: exporter cameraPositionNegated equals: (0 @ 0) -] - -{ #category : #tests } -RTPNGExporterTest >> testCameraPosition2 [ - - view canvas camera translateTo: 6 @ 4. - self assert: exporter cameraPositionNegated equals: (0 @ 0). -] - -{ #category : #tests } -RTPNGExporterTest >> testCameraScale [ - - self assert: exporter cameraScale equals: view canvas camera defaultCameraScale -] - -{ #category : #tests } -RTPNGExporterTest >> testCreateSurface [ - - exporter createSurface. - exporter createFormCanvas. -] - -{ #category : #tests } -RTPNGExporterTest >> testDefault [ - - self assert: emptyExporter fileName equals: 'roassal.png'. - self assert: emptyExporter builder equals: nil -] - -{ #category : #tests } -RTPNGExporterTest >> testExportWithScale [ - - emptyExporter withScale. - view canvas camera scale: 2. - emptyExporter builder: view. - - self assert: emptyExporter viewExtent equals: (7 @ 7). - self assert: emptyExporter viewHalfExtent equals: (3.5 @ 3.5). - self assert: emptyExporter saveWithScale. - - emptyExporter withoutScale. - self assert: (emptyExporter viewExtent closeTo: (6 @ 6)). - self assert: (emptyExporter viewHalfExtent closeTo: (3 @ 3)). - -] diff --git a/src/Roassal2/RTPackageLife.class.st b/src/Roassal2/RTPackageLife.class.st deleted file mode 100644 index c75bffa84..000000000 --- a/src/Roassal2/RTPackageLife.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #RTPackageLife, - #superclass : #RTUsefulScript, - #category : #'Roassal2-Plugins' -} - -{ #category : #accessing } -RTPackageLife >> description [ - ^ -'Let you select one or more packages and see their evolution. -The produced curve indicate the amount of methods modified during a week period time.' -] - -{ #category : #hooks } -RTPackageLife >> execute [ - | packageNamePattern packages methods oldestMethod byWeeks b ds lb | - packageNamePattern := UIManager default - request: 'Enter a pattern of a package (e.g., Roassal2 or Roassal2*)' - initialAnswer: 'Roassal2' - title: 'Enter the name of a package to measure the coverage'. - - packages := RPackageOrganizer default packages select: [ :pak | packageNamePattern match: pak packageName ]. - - methods := packages flatCollect: #methods. - oldestMethod := methods minFor: #date. - byWeeks := (methods groupedBy: [ :m | m date asWeek ]) associations. - - b := RTGrapher new. - - ds := RTData new. - ds dotShape circle size: 5; color: (Color blue alpha: 0.1). - ds interaction popupText: [ :assoc | assoc key asString, ' -> ', assoc value size asString, ' modified methods ' ]. - ds points: byWeeks. - ds y: [ :assoc | assoc value size ]. - ds x: [ :assoc | assoc key start julianDayNumber - oldestMethod date julianDayNumber ]. - b add: ds. - - b axisY title: 'Number of modified methods'; noDecimal. - - b axisX - title: ''; - labelRotation: -30; - numberOfTicks: 10; - numberOfLabels: 10; - labelConversion: [ :v | (Date julianDayNumber: v + oldestMethod date julianDayNumber) ]. - b build. - - lb := RTLegendBuilder new. - lb view: b view. - lb addText: 'Amount of modified methods along time'. - lb build. - - b view inspect -] - -{ #category : #hooks } -RTPackageLife >> label [ - ^ 'Package evolution' -] diff --git a/src/Roassal2/RTPalette.class.st b/src/Roassal2/RTPalette.class.st deleted file mode 100644 index 91efd12e1..000000000 --- a/src/Roassal2/RTPalette.class.st +++ /dev/null @@ -1,279 +0,0 @@ -" -Define a set of colors. - -Examples showing all the palletes: --=-=-= -| v allLines lbl es lb| -v := RTView new. -allLines := OrderedCollection new. - -(RTPalette class selectors sorted) do: [ :selector | - lbl := RTLabel elementOn: selector. - - v add: lbl. - - es := (RTBox new size: 20) elementsOn: (1 to: 5). - v addAll: es. - es @ (RTMouseHoverZoom new desiredExtent: [ :anElement | anElement extent * 1.7 ]). - TRConstraint stick: lbl onTheLeftOf: es first. - - RTHorizontalLineLayout new gapSize: 3; on: es. - RTMetricNormalizer new - elements: es; - normalizeColor: #yourself using: (RTPalette perform: selector). - allLines add: es. -]. -RTVerticalLineLayout on: allLines. - -lb := RTLegendBuilder new. -lb view: v. -lb onDemand. -lb addText: 'Many color palettes are offered by Roassal'. -lb addText: 'To obtain the a palette, simply evaluate: RTPalette c5'. -lb build. -v --=-=-= - -Using a palette: --=-=-= -p := RTPalette c10. -b := RTMondrian new. -b shape box - color: p fifth; - if: [ :c | '*Line*' match: c name ] color: p first; - if: [ :c | '*Arrow*' match: c name ] color: p second; - if: [ :c | '*Arc*' match: c name ] color: p third; - if: [ :c | '*Abstract*' match: c name ] color: p fourth. -b nodes: (RTShape withAllSubclasses). -b layout flow. -b normalizer normalizeSize: #numberOfMethods. -b --=-=-= - -" -Class { - #name : #RTPalette, - #superclass : #RTObject, - #category : #'Roassal2-ColorNormalizer' -} - -{ #category : #palettes } -RTPalette class >> c1 [ - ^ Array - with: (Color r: 225 g: 206 b: 122 range: 255) - with: (Color r: 251 g: 255 b: 185 range: 255) - with: (Color r: 253 g: 214 b: 146 range: 255) - with: (Color r: 236 g: 115 b: 87 range: 255) - with: (Color r: 117 g: 79 b: 68 range: 255) -] - -{ #category : #palettes } -RTPalette class >> c10 [ - ^ Array - with: (Color r: 51 g: 92 b: 103 range: 255) - with: (Color r: 255 g: 243 b: 176 range: 255) - with: (Color r: 224 g: 159 b: 62 range: 255) - with: (Color r: 158 g: 42 b: 43 range: 255) - with: (Color r: 84 g: 11 b: 14 range: 255) -] - -{ #category : #palettes } -RTPalette class >> c11 [ - ^ Array - with: (Color r: 30 g: 21 b: 42 range: 255) - with: (Color r: 78 g: 103 b: 102 range: 255) - with: (Color r: 90 g: 177 b: 187 range: 255) - with: (Color r: 165 g: 200 b: 130 range: 255) - with: (Color r: 247 g: 221 b: 114 range: 255) -] - -{ #category : #palettes } -RTPalette class >> c12 [ - ^ Array - with: (Color r: 204 g: 88 b: 3 range: 255) - with: (Color r: 226 g: 113 b: 29 range: 255) - with: (Color r: 255 g: 149 b: 5 range: 255) - with: (Color r: 255 g: 182 b: 39 range: 255) - with: (Color r: 255 g: 201 b: 113 range: 255) -] - -{ #category : #palettes } -RTPalette class >> c13 [ - ^ Array - with: (Color r: 123 g: 223 b: 242 range: 255) - with: (Color r: 178 g: 247 b: 239 range: 255) - with: (Color r: 239 g: 247 b: 246 range: 255) - with: (Color r: 247 g: 214 b: 224 range: 255) - with: (Color r: 242 g: 181 b: 212 range: 255) -] - -{ #category : #palettes } -RTPalette class >> c14 [ - ^ Array - with: (Color r: 254 g: 147 b: 140 range: 255) - with: (Color r: 237 g: 175 b: 151 range: 255) - with: (Color r: 196 g: 151 b: 146 range: 255) - with: (Color r: 173 g: 145 b: 163 range: 255) - with: (Color r: 157 g: 145 b: 163 range: 255) -] - -{ #category : #palettes } -RTPalette class >> c2 [ - ^ Array - with: (Color r: 58 g: 96 b: 110 range: 255) - with: (Color r: 96 g: 123 b: 125 range: 255) - with: (Color r: 130 g: 142 b: 130 range: 255) - with: (Color r: 170 g: 174 b: 142 range: 255) - with: (Color r: 224 g: 224 b: 224 range: 255) -] - -{ #category : #palettes } -RTPalette class >> c3 [ - ^ Array - with: (Color r: 239 g: 217 b: 206 range: 255) - with: (Color r: 222 g: 192 b: 241 range: 255) - with: (Color r: 183 g: 156 b: 237 range: 255) - with: (Color r: 149 g: 127 b: 239 range: 255) - with: (Color r: 113 g: 97 b: 239 range: 255) -] - -{ #category : #palettes } -RTPalette class >> c4 [ - ^ Array - with: (Color r: 36 g: 123 b: 160 range: 255) - with: (Color r: 112 g: 193 b: 179 range: 255) - with: (Color r: 178 g: 219 b: 191 range: 255) - with: (Color r: 243 g: 255 b: 189 range: 255) - with: (Color r: 255 g: 22 b: 84 range: 255) -] - -{ #category : #palettes } -RTPalette class >> c5 [ - ^ Array - with: (Color r: 220 g: 220 b: 221 range: 255) - with: (Color r: 197 g: 195 b: 198 range: 255) - with: (Color r: 70 g: 73 b: 76 range: 255) - with: (Color r: 76 g: 92 b: 104 range: 255) - with: (Color r: 25 g: 133 b: 161 range: 255) -] - -{ #category : #palettes } -RTPalette class >> c6 [ - ^ Array - with: (Color r: 216 g: 226 b: 220 range: 255) - with: (Color r: 255 g: 229 b: 217 range: 255) - with: (Color r: 255 g: 202 b: 212 range: 255) - with: (Color r: 244 g: 172 b: 183 range: 255) - with: (Color r: 157 g: 129 b: 137 range: 255) -] - -{ #category : #palettes } -RTPalette class >> c7 [ - ^ Array - with: (Color r: 224 g: 251 b: 252 range: 255) - with: (Color r: 194 g: 223 b: 227 range: 255) - with: (Color r: 157 g: 180 b: 192 range: 255) - with: (Color r: 92 g: 107 b: 115 range: 255) - with: (Color r: 37 g: 50 b: 55 range: 255) -] - -{ #category : #palettes } -RTPalette class >> c8 [ - ^ Array - with: (Color r: 151 g: 249 b: 249 range: 255) - with: (Color r: 164 g: 222 b: 249 range: 255) - with: (Color r: 193 g: 224 b: 247 range: 255) - with: (Color r: 207 g: 186 b: 225 range: 255) - with: (Color r: 197 g: 159 b: 201 range: 255) -] - -{ #category : #palettes } -RTPalette class >> c9 [ - ^ Array - with: (Color r: 237 g: 238 b: 201 range: 255) - with: (Color r: 221 g: 231 b: 199 range: 255) - with: (Color r: 191 g: 216 b: 189 range: 255) - with: (Color r: 152 g: 201 b: 163 range: 255) - with: (Color r: 119 g: 191 b: 163 range: 255) -] - -{ #category : #'from Stephen Few' } -RTPalette class >> darkBright [ - "Palette from Stephen Few, from Show me your numbers book" - - " - b := RTMondrian new. - b shape box width: 80; height: 30; color: #yourself. - b nodes: RTPalette darkBright. - b layout verticalLine; gapSize: 0. - b - " - - | r | - r := OrderedCollection new. - r add: (Color red: 0 green: 0 blue: 0). - r add: (Color red: 38 green: 93 blue: 171). - r add: (Color red: 223 green: 92 blue: 36). - r add: (Color red: 5 green: 151 blue: 72). - r add: (Color red: 229 green: 18 blue: 111). - r add: (Color red: 157 green: 114 blue: 42). - r add: (Color red: 123 green: 58 blue: 150). - r add: (Color red: 199 green: 180 blue: 46). - r add: (Color red: 203 green: 32 blue: 39). - ^ r asArray - -] - -{ #category : #'from Stephen Few' } -RTPalette class >> light [ - "Palette from Stephen Few, from Show me your numbers book" - - " - b := RTMondrian new. - b shape box width: 80; height: 30; color: #yourself. - b nodes: RTPalette light. - b layout verticalLine; gapSize: 0. - b - " - - | r | - r := OrderedCollection new. - r add: (Color red: 140 green: 140 blue: 140). - r add: (Color red: 136 green: 189 blue: 230). - r add: (Color red: 251 green: 178 blue: 88). - r add: (Color red: 144 green: 205 blue: 151). - r add: (Color red: 246 green: 170 blue: 201). - r add: (Color red: 191 green: 165 blue: 84). - r add: (Color red: 188 green: 153 blue: 199). - r add: (Color red: 237 green: 221 blue: 70). - r add: (Color red: 240 green: 126 blue: 110). - ^ r asArray - -] - -{ #category : #'from Stephen Few' } -RTPalette class >> medium [ - "Palette from Stephen Few, from Show me your numbers book" - - " - b := RTMondrian new. - b shape box width: 80; height: 30; color: #yourself. - b nodes: RTPalette medium. - b layout verticalLine; gapSize: 0. - b - " - - | r | - r := OrderedCollection new. - r add: (Color red: 77 green: 77 blue: 77). - r add: (Color red: 93 green: 165 blue: 218). - r add: (Color red: 250 green: 164 blue: 58). - r add: (Color red: 96 green: 189 blue: 104). - r add: (Color red: 241 green: 124 blue: 176). - r add: (Color red: 178 green: 145 blue: 47). - r add: (Color red: 178 green: 118 blue: 178). - r add: (Color red: 222 green: 207 blue: 63). - r add: (Color red: 241 green: 88 blue: 84). - ^ r asArray - -] diff --git a/src/Roassal2/RTPathAnimation.class.st b/src/Roassal2/RTPathAnimation.class.st deleted file mode 100644 index 2b4d3276a..000000000 --- a/src/Roassal2/RTPathAnimation.class.st +++ /dev/null @@ -1,168 +0,0 @@ -" -I am a class to move elements position in a SVG path -" -Class { - #name : #RTPathAnimation, - #superclass : #RTAnimation, - #instVars : [ - 'curves', - 'animatedValue', - 'index', - 'during' - ], - #category : #'Roassal2-Animation' -} - -{ #category : #'as yet unclassified' } -RTPathAnimation class >> on: element path: aString seconds: seconds [ - ^ self new - element: element; - path: aString; - seconds: seconds -] - -{ #category : #refreshing } -RTPathAnimation >> cubic: prev to: current at: t [ - | c0 c1 c2 c3 cp cx cy bx by ax ay tSquared tCubed x y| - cp := (curves at: index) second. - c0 := prev. - c1 := cp second. - c2 := cp third. - c3 := current. - - cx := 3.0 * (c1 x - c0 x). - bx := (3.0 * (c2 x - c1 x)) - cx. - ax := c3 x - c0 x - cx - bx. - - cy := 3.0 * (c1 y - c0 y). - by := (3.0* (c2 y - c1 y)) - cy. - ay := c3 y - c0 y - cy - by. - tSquared := t*t. - tCubed := tSquared * t. - x := (ax * tCubed) + (bx * tSquared) + (cx * t) + c0 x. - y := (ay * tCubed) + (by * tSquared) + (cy * t) + c0 y. - ^ x@y -] - -{ #category : #'as yet unclassified' } -RTPathAnimation >> duringDo: aBlock [ - during := aBlock. -] - -{ #category : #accessing } -RTPathAnimation >> element: el [ - element := el. - el attributes at: #op put: el position. -] - -{ #category : #testing } -RTPathAnimation >> hasCompleted [ - ^ animatedValue hasCompleted -] - -{ #category : #'as yet unclassified' } -RTPathAnimation >> initialize [ - super initialize. - during := [ ]. -] - -{ #category : #refreshing } -RTPathAnimation >> linear: prev to: current at: t [ - ^ prev interpolateTo: current at: t . -] - -{ #category : #accessing } -RTPathAnimation >> path: aString [ - | answer absolute key args p cp1 cp2 point abso | - curves := TRSVGPath new path: aString; curves. - answer := OrderedCollection new. - absolute := true. - p := 0@0. - abso := [ :da | absolute - ifTrue: [ da ] - ifFalse: [ p + da ] ]. - point := [ :da | p := absolute - ifTrue: [ da ] - ifFalse: [ p + da ]. - args at: 1 put: p. ]. - curves do: [ :curve | - key := curve first. - args := curve second. - key = #absolute ifTrue: [ absolute := true ]. - key = #relative ifTrue: [ absolute := false ]. - key = #moveTo: ifTrue: [ point value: args first. answer add: curve. ]. - key = #lineTo: ifTrue: [ point value: args first. answer add: curve. ]. - key = #curveVia:and:to: ifTrue: [ - cp1 := abso value: args first. - cp2 := abso value: args second. - p := abso value: args third. - args at: 1 put: p. - args at: 2 put: cp1. - args at: 3 put: cp2. - answer add: curve ] ]. - curves := answer. - -] - -{ #category : #accessing } -RTPathAnimation >> position: i [ - | r | - r := (curves at: i) second. - ^ r first. -] - -{ #category : #refreshing } -RTPathAnimation >> refresh [ - | t prev current key position | - - curves ifEmpty: [ ^ self ]. - t := animatedValue value. - index := (t * curves size) ceiling. - index < 1 ifTrue: [ index := 1 ]. - current := self position: index. - t := (t - ((index - 1) / curves size)) / (1 / curves size). - prev := index = 1 - ifTrue: [ element attributes at: #op ] - ifFalse: [ (curves at: index-1) second first ]. - key := (curves at: index) first. - position := nil. - ((key = #moveTo:) or: [ key = #lineTo: ]) - ifTrue: [ - position := self - linear: prev - to: current - at: t ]. - key = #curveVia:and:to: - ifTrue: [ position := self - cubic: prev - to: current - at: t - ]. - position notNil ifTrue:[ - element translateTo: position. - during rtValue: element. - element signalUpdate. - ]. - -] - -{ #category : #accessing } -RTPathAnimation >> repeat [ - animatedValue timer repeat. -] - -{ #category : #private } -RTPathAnimation >> seconds: seconds [ - animatedValue := TRVIAnimatedValue new - evaluator: [ :t | t ]; - timer: (TRVITimer new cycleLength: seconds); - yourself. - - - -] - -{ #category : #actions } -RTPathAnimation >> start [ - animatedValue start -] diff --git a/src/Roassal2/RTPieBuilder.class.st b/src/Roassal2/RTPieBuilder.class.st deleted file mode 100644 index 6536a34d0..000000000 --- a/src/Roassal2/RTPieBuilder.class.st +++ /dev/null @@ -1,153 +0,0 @@ -Class { - #name : #RTPieBuilder, - #superclass : #RTBuilder, - #instVars : [ - 'objects', - 'values', - 'sum', - 'elements' - ], - #category : #'Roassal2-Builder-PieChart' -} - -{ #category : #'public - pies' } -RTPieBuilder >> emphasize: object by: anIntegerOrASymbolOrABlock [ - "public method" - "Move the pie to a given offset" - "anIntegerOrASymbolOrABlock is the distance for which object has to be moved away" - | element trachelShape delta v | - element := elements elementFromModel: object. - trachelShape := element trachelShape. - - v := (anIntegerOrASymbolOrABlock rtValue: object). - delta := (trachelShape position + (v @ 0)) - rotateBy: ((trachelShape betaAngle - trachelShape alphaAngle) / 2 + trachelShape alphaAngle) * 3.1415 / 180 - about: trachelShape position. - trachelShape translateTo: delta. - -] - -{ #category : #'public - shapes' } -RTPieBuilder >> emphasizeBy: anIntegerOrASymbolOrABlock [ - "anIntegerOrASymbolOrABlock is the distance for which object has to be moved away" - objects do: [ :object | - self emphasize: object by: anIntegerOrASymbolOrABlock ] -] - -{ #category : #initialization } -RTPieBuilder >> initialize [ - super initialize. - objects := #(). - self initializeShapeBuilder -] - -{ #category : #initialization } -RTPieBuilder >> initializeShapeBuilder [ - self shape arc - outerAngle: [ :e | self outerAngleOf: e ] - innerAngle: [ :e | self innerAngleOf: e ]; - innerRadius: 0; - externalRadius: 90; - color: RTNIdentityNormalizer new -] - -{ #category : #'private - utility' } -RTPieBuilder >> innerAngleOf: element [ - | i | - i := element attributes at: #index. - ^ (values at: i) / sum * 360. -] - -{ #category : #'private - utility' } -RTPieBuilder >> label: aBlock withObject: anObject [ - "Private method" - | element trachelShape labelPosition lbl off | - element := elements elementFromModel: anObject. - trachelShape := element trachelShape. - - off := (trachelShape class == TRArcShape) - ifTrue: [ trachelShape externalRadius + 30 ] - ifFalse: [ 0 ]. - labelPosition := (trachelShape position + (off @ 0)) - rotateBy: ((trachelShape betaAngle - trachelShape alphaAngle) / 2 + trachelShape alphaAngle) * 3.1415 / 180 - about: trachelShape position. - - lbl := RTLabel elementOn: (aBlock rtValue: anObject) asString. - view add: lbl. - "view canvas addShape: lbl." - lbl trachelShape translateTo: labelPosition -] - -{ #category : #'public - shapes' } -RTPieBuilder >> labeled [ - "Make each pie having a label" - self labeledIf: true -] - -{ #category : #obsolete } -RTPieBuilder >> labeled: aBlockLabel [ - "Make each pie having a label that respect the aBlockLabel" - self labeledIf: true withBlock: aBlockLabel -] - -{ #category : #'public - shapes' } -RTPieBuilder >> labeledIf: aBlock [ - self labeledIf: aBlock withBlock: [ :o | o ] -] - -{ #category : #'public - shapes' } -RTPieBuilder >> labeledIf: aBlock withBlock: aBlockLabel [ - objects do: [ :object | - (aBlock rtValue: object) ifTrue: [ self label: aBlockLabel withObject: object ] ] -] - -{ #category : #obsolete } -RTPieBuilder >> labelled [ - "Make each pie having a label" - self deprecated: 'Please, use #labeled instead'. - self labeled -] - -{ #category : #obsolete } -RTPieBuilder >> labelled: aBlockLabel [ - "Make each pie having a label that respect the aBlockLabel" - self deprecated: 'Please, use #labeled: instead'. - self labeledIf: true withBlock: aBlockLabel -] - -{ #category : #obsolete } -RTPieBuilder >> labelledIf: aBlock [ - self deprecated: 'Please, use #labeledIf: instead'. - self labeledIf: aBlock -] - -{ #category : #obsolete } -RTPieBuilder >> labelledIf: aBlock withBlock: aBlockLabel [ - self deprecated: 'Please, use #labeledIf:withBlock: instead'. - self labeledIf: aBlock withBlock: aBlockLabel -] - -{ #category : #'public - pies' } -RTPieBuilder >> objects: someObjects [ - objects := someObjects -] - -{ #category : #'private - utility' } -RTPieBuilder >> outerAngleOf: e [ - ^ ((values copyFrom: 1 to: (e attributes at: #index) - 1), (Array with: 0)) sum * 360.0 / sum -] - -{ #category : #'public - pies' } -RTPieBuilder >> slice: aBlockOrASymbol [ - values := objects collect: aBlockOrASymbol. - sum := values sum. - elements := RTGroup new. - objects doWithIndex: [ :obj :index | | e | - e := RTElement new model: obj. - e attributes at: #index put: index. - e addShape: self shape shape. - elements add: e. - ]. - view addAll: elements. - ^ elements -] diff --git a/src/Roassal2/RTPieBuilderTest.class.st b/src/Roassal2/RTPieBuilderTest.class.st deleted file mode 100644 index 0d45f4b4a..000000000 --- a/src/Roassal2/RTPieBuilderTest.class.st +++ /dev/null @@ -1,60 +0,0 @@ -Class { - #name : #RTPieBuilderTest, - #superclass : #RTTest, - #category : #'Roassal2-Builder-PieChart' -} - -{ #category : #tests } -RTPieBuilderTest >> testExample [ - - | b es | - b := RTPieBuilder new. - b interaction popup. - b objects: (Array with: Dictionary with: Collection with: Set with: OrderedCollection ). - es := b slice: #numberOfMethods. - b normalizer distinctColor. - b labeled. - b emphasize: Set by: 20. - b emphasize: Dictionary by: 20. - b build. - - self assert: es size equals: 4 -] - -{ #category : #tests } -RTPieBuilderTest >> testExample02 [ - - | c g ds b data | - data := #(20 30 50 100). - - c := RTComposer new. - - "First visualization" - g := RTGrapher new. - g extent: 200 @ 200. - g view: c view. - ds := RTData new. - ds interaction popup. - ds barShape color: Color blue. - ds points: data. - g add: ds. - g axisX noTick; noLabel. - g build. - c group: #graph. - - "Second visualization" - b := RTPieBuilder new. - b view: c view. - b interaction popup. - b objects: data. - b slice: #yourself. - b normalizer distinctColor. - b labeled. - b build. - c group: #pie. - - "Layouting" - c move: #graph onTheLeftOf: #pie. - - c view -] diff --git a/src/Roassal2/RTPieExample.class.st b/src/Roassal2/RTPieExample.class.st deleted file mode 100644 index da114c15a..000000000 --- a/src/Roassal2/RTPieExample.class.st +++ /dev/null @@ -1,393 +0,0 @@ -" -RTPieExample new installTitle: 'GroupOfGroups' - code: - ' -v canvas' - -" -Class { - #name : #RTPieExample, - #superclass : #RTAbstractExample, - #category : #'Roassal2-Builder-PieChart' -} - -{ #category : #sources } -RTPieExample >> exampleEmphasis [ - - | b | - b := RTPieBuilder new. - b interaction popup. - b objects: (Array with: Dictionary with: Collection with: Set with: OrderedCollection ). - b slice: #numberOfMethods. - b normalizer distinctColor. - b labeled. - b emphasize: Set by: 20. - b emphasize: Dictionary by: 20. - ^ b -] - -{ #category : #icons } -RTPieExample >> exampleEmphasisIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAFf0lEQVR4XuXc608iVxgGcP/Z -bfof9Eu/NOkHXXU13abZdmvamGZ3Y6tdhfWyWqQKIiCiIIosCMhVYVguA3J9p/OeLjReUIHp -KjxP8obLECLnx8w5M+fgkKLg5zFlCL8J8EHwgw+CD4IffBB8EPzgg+CD4AcfBB8EP/gg+MEH -wQfBDz4IPgh+8EHwQfCDD4IPgh98EPzgg+CD4AcfBB8EP/gg+CD4wQe5KSWng3Jv5yg9Maa0 -re8mSN78m6rxGLV7n9ngIXHwQbpIQ5Ypr5u/HaFNpSbGqGS3Xmr45Yifxt0WhSsi5wgfpIN0 -C3G1ZKNBNHyxVm1hNMuXlQgf5I5UE3FKT45rgpF6Ntpq8Fd+9zWQf1HShA/SJpVwSBOIZpWP -DkVjnxaylzDGHBvK6PZfytON5Ud1+Bp6XBhhTTEyP//YauTvPbZLICOrOmXctaWMrMwrT41L -4jYWi1EoFCKj0UiBQIDcbjcFg0Fx3+l0UjQaJRiQWjKhKQYXvye/976UvHaoYpDh+RlleHFO -GVnTKyPri8qb7U3R+AaDgQ4PD8nv95Ner6f19XXxN5pMJhwQrfqMZmVnZ1qNd1O/0a5SF8Ub -G71UKlGxWMQAyesXNN87qFajq8Pc+9RrteOH7kMackFzjMJ6+2HufeohTxofHCS38FZzkLuG -uXeV5SzS/yA8QnG5XOKD+Hw+cZ87xt3dXSoUChSPx2l2dpYikQjt7OyQJEm0v7+vOUa7YW4n -9cuxs/9B7Ha7+BDqiIS8Xq8A4YbnYSQj8DaLxUIOh0Pc5+32jQ1NQaSXL9oOczutgThkVatV -0SCVSoUajQbx43q9Lp7jx7VPHW3zNjf/p6Yg1UT7YS4kSMdDXS2HuX90N8xtVzX1C4QP0ssw -99PeuRY7ocmD7Z4rVynjg/Q6zB2EDATIIGUgQHy76jB706X0UgdbB/hXe7UCqZQrPYN82PuA -D6LlISvii/SEkggm8EHSzydJyz5EbdiuUc4j5/ggsmlDM5BUVEf5TL5rkEa9gQ9SOz/XDMRr -faI2apm4L+gCBH9OvRleqqMVSNgzQvVavWOQZCiJD9JMyWbVDIRLznqIO+hOQPDPQ67uJc9G -SSsQr/UL8W13m9z3Qon5Y/jrsq6mEjzpCUS9pExe65fUREmGXlMhW6B+6jseFQiHr9Z2C1LP -Zsnv/Ir+20ueKLVqjgKugEAxL5sV3YyuBbE2vyZu5Zx8DYQnznjJT/Px6ekpQYJwMlMvu0Kp -RqMU8gxfAgm6vyVqkAAx6o0C4N3v75S5V3PKzPSMsrq4KibReNJsaWmJNtTJMm785mQar8my -2Wxi1nNvb08sB+LXZDIZsfqEn7NarWLC7ejoiAYShBcXSD887xil7D2iqO/FJRCufMZJfMJn -0BnEXrG5tCnKZrKJhufJs3N16M3TzxcXF5RKpSgcDovi7c1tfJvP58VzsiyL16bTaTo+Phbb -eK8aSJBmPv423RFKyWGnZOjNNRAujsfiafUnUkIi/Ku9XaTwfuXeKEWLWT1TX1BuAon7p6iY -LzII3dRn4IN0ciavHgo+Tv9KvYBwVS7O+mYCqy9+QVVTj+23rW68CySw/zU+yP93/euMGKCw -ukKZqZ+If8JW3LbQbSBc2ZSF8EE+59n+HSDNDh4f5DNFSqzRbRhS/D3+HvI5k5cc10BOXN9Q -NrXVVytSBgakWk6LfiQVWSCvx0wej6cvlwYN5D8O4DNqviRiNpvFdSk+28YHecAkEgnxszQu -vhzCP1PDB8EPPgg+CH7wQfBB8IMPgg+CH3wQ/OCD4IPgBx8EHwQ/+CD4IPjBB8EHwQ8+CH7w -QfBB8IMPgg+CH3wQfBD84IPgg+AHHwQ/+CD4IPjBB8EHwQ8+yIDmH9dg+7bM7y8iAAAAAElF -TkSuQmCC' -] - -{ #category : #sources } -RTPieExample >> exampleLabelledChart [ - - | b | - b := RTPieBuilder new. - b interaction popup. - b objects: (Array with: Dictionary with: Collection with: Set with: OrderedCollection). - b slice: #numberOfMethods. - b normalizer distinctColor. - b labeled. - ^ b -] - -{ #category : #icons } -RTPieExample >> exampleLabelledChartIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABeCAYAAADVA7GfAAAFQklEQVR4XuXb608iVxgG8P1n -N/20SdNPzbZpsp/6pXZrbbbNdtMa0q712ijFS9yAFxhERlDkIqDAogsG8YYwXNR3ynvqkJV1 -XRyOFXie5A0IJCbnl5lzzpxzHuk6fjopj/CbAB8EP/gg+CD4wQfBB8EPPgg+CH7wQfBB8IMP -gh98EHwQ/OCD4IPgBx8EHwQ/+CD4IPjBB8EPPgg+CH4wQGrv9qjkdunNpamrdHF6Svgg9xw6 -P6eSx02FaRvln3+nf6oOX/5MJZeTyoF1wgeRmMtymUqKk/I/9bcEcVMdDf5G2ppK+CBtRvOu -MoJpiPcrMPInjSRCtK8VCR/ERArWSSkQV0V9AYX6Nt06V+T4gPBBWu0rLi/pZGRIJoY+5Zhp -YBj15l1CoGQyGUomk8Thv8/Ozhrv8UHqORn5SypGvv/7DzCM8ueztLa2JkD8fj+l02na2Nig -QCBAwWCQdnZ2yOFwUDgcpqmpKdrf36dIJCK+hwAp2KxyMeo1ujDzURBxpfi8xFdJLpej4+Nj -Ojg4EA3PGOX6gII/9/l8FIvFBEKpVKoP+M57H0RTvdIx1LHXt2Jw/RjyUPXiouUGZqSev2Xx -0Db/vE86yKC69EkQLkcmSfid+nsR8wzJGG8mh/VWMIzKlArU0yCaptFNl3fzCIZn4LIxci8G -rg1zWylLfKP3QDY3NwUCd4BWq1WMTrgT5I4yGo2K0QxXKpUSHSmPZLJzM/KvDtvEnTCMunzg -4e69gHBD8wjFYrFQKBSi3d1dymaztL29TXt7e2LIyFA8zOT3hel/pIJEfn9pCsMYBvcUyMXV -aKVarYrXSqVSn+ddiomW8ZnxG+PW9X8Pc28rfrQC3alX67cumRhByyvTGEZBg/D6hUyQgQ0F -H6RTQJyzk21j4INIBJGBgQ8iESRYn1wGlgN6u4UPIgkk6n2KD9L2bP6/FUEpIFuex3p45W/C -B2nnoWKlLBWEK+hymEYJuoIE/3CRd4fIBImsfGsaJJPI4IPI6kcMEHHrcg+bQikXy/gg1WSC -ZINseZ4xyF1RCH895Coy1tGvgzzWQ8qrO4FkU1l8kMZVsh2XDsK16ZxrCSXmi+GvGDbndHyE -2gP5jJpBwu5nLYEUDgv4IM05z+Xo6NdfTKPEvV/QTVfJ1up0A8U2arsGocwpeiqc+gCD13R4 -p0mtVhPf8c6T5t/w2g7v4epZELF+Et0yDZLwPL0ZpF7c+GN/jInX2fFZ3W6169Zhqz40OESL -i4ti+w8vlvEeLKfTSSsrK6KheS3H6/WK3/DfS0tLYqGNP7PZbBSPx8nlclEikaD5+Xmxp6un -QER/8tbcGklq+ZuPgmx5+sk169KHLcO6alf19cV1feL1BE3bpkXj8v/lRuWrwmhYRVHE/itG -4OXoYrEoYHjP1sLCAnk8HuIVUrvdLlZIGVRV1d4D4dTS6TujvJ35+haQ+gxecTVuXbG1GFW0 -Ssfu7+3Izdbn+TwdvhhoGSY99qV+G4jx8DEZSuLvfm8nRecyyQCJqZ+TVjzsijMiXXGCio+q -5Qd+oLuC7Kx/RYUjf1edouqaM4Z8VEHz+8TZwpPxUboJJOp9QtmEhQ72pvRSId6VZw3xT+Hi -g+AHHwQf5GHDjzt41o0P0iHhRxy8t5iPqfFmb55R44M85Gy//mCQd+Hzpm5+WOh2u/FBHjrG -Bm/e2H3f5wLxQfA7dfzgg+CD4AcfBD/4IPgg+MEHwQfBDz4IPgh+8EHwQfCDD4IffBB8EPzg -g+CD4AcfBB8EP/gg+CD4wQfBDz4IPgh+8EHwQfAjIf8CK2x8XCu31d4AAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTPieExample >> exampleLabelledIf [ - | b | - b := RTPieBuilder new. - b interaction popup. - b objects: RTShape withAllSubclasses. - b slice: #numberOfMethods. - b normalizer distinctColor. - b labeledIf: [ :c | c numberOfMethods > 18 ]. - ^ b -] - -{ #category : #icons } -RTPieExample >> exampleLabelledIfIcon [ - ^ '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 -l/8BzNJh52yayYQAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTPieExample >> examplePieAndLegend [ - " - RTPieExample new examplePieAndLegend - " - - | b myClasses lb | - myClasses := (Array with: Dictionary with: Collection with: Set with: OrderedCollection ). - - b := RTPieBuilder new. - b interaction popup. - b objects: myClasses. - b slice: #numberOfMethods. - b normalizer distinctColor. - b labeled. - b emphasize: Set by: 20. - b emphasize: Dictionary by: 20. - b build. - - "Legend" - lb := RTLegendBuilder new. - lb view: b view. - lb addText: 'Distribution of number of Methods in some classes'. - myClasses do: [ :aClass | - | aColor | - aColor := (b view elementFromModel: aClass) trachelShape color. - lb addColor: aColor text: aClass name. - ]. - lb build. - - ^ b view -] - -{ #category : #icons } -RTPieExample >> examplePieAndLegendIcon [ - ^ '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 -rkJggg==' -] - -{ #category : #sources } -RTPieExample >> exampleRefreshPie [ - - | view fillView | - "We create an empty view. The view will contain the button and the pie." - view := RTView new. - - "fillView is block that: - (i) remove all the elements in the view (except the button); - (ii) create a new pie with totally random data - (iii) force a screen refresh with #signalUpdate" - fillView := - [ - | b | - view clean. - b := RTPieBuilder new. - - "The RTPieBuilder will create the pie in the view" - b view: view. - b interaction popup. - b objects: ((1 to: 10 atRandom) collect: [ :i | 30 atRandom ]). - b slice: [ :aNumber | aNumber ]. - b normalizer distinctColor. - b labeled. - b build. - view signalUpdate - ]. - - "Add a button menu to the view" - view addMenu: 'Generate new data' callback: [ fillView value ]. - - "We want some data when opening the view" - fillView value. - ^ view - -] - -{ #category : #icons } -RTPieExample >> exampleRefreshPieIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAGPklEQVR4XuXdbUidZRwG8Gfq -bEGB9EUoYq31JQgKHLFRUysW6wU2wqAF+W3GIBpEFNbimFFfks2WgU6XW1PsNMSX5UpJj0dd -bjtOt7V5puj0zOMst+G7O7p5nZ77cR7Py+PzcszTcdclfxTPi8+5f9zPfZ/73Mcjeb38iaZI -/E3AD8IfLRCbzYba2lroXbG1tRVG7rCoqAhmb8MfPxDRaDU1Nairq0N7ezusVivKy8vR0tKC -4uJinDp1Sqnc3FxkZGSgtLRUuU5DQwMqKiqQl5eHbdu2Kd+zs7MhQPxvU19fz49iBmRqago5 -OTno7u6G3W5HZ2cnenp6lMYVP4seNDAwgP379yuN63Q6fdc5cuSI0thjY2OYnJzE9PQ08vPz -A24j7pu/mfnHEH4Q/vCD8IPwhx+EH4Q//CD84QfhB+EPPwg/CH/4QfhB+MMPwg/CH34Q/vCD -8IPwhx+EH4Q//CD8ICub8fHxiOxS6e3tRX9/P5qbm8EPopGmpqaINZDYkya2LPGDqKSvr897 -9epViEYS+7tW+u+JvyX2knV1dfGDRCoeD8A/hqxQcOMccOJl4LqxU9rgICDJjy4+HjhwYPXA -RD0IJt1AeRK8BfKhyoX6dw01rsUiPzjJv4DKyuiHiWoQnP/WBxFQBpKQMN9DgislJbpRohYE -1anqGKKXdJfqNqoaxkLFxgJud3TCRCUIKl9YEkMBEZdr5PBh9d4RXPJEC/wgehgnXtLEMHLa -Sk83BrJmDT+IZvIB2KpTDIHg4ncI53QVXMmbPZzPQwbleejc3BzkJ4CqDTAiY0j3DuiDnp91 -UVD6hPr9jBjrHaJ2xlZD/IBDh0AH4pZHUfFdrB+pXb7VD0TU8zcv4O6hOO2xZO4u9Ke76mWT -UgN/oZGhoSHcdyBiSUQsj4gKjisIw1fy75s0TmFo+zKkoRITtXtIstSoegEsFmgs60C89Y9m -DHlvKZB7ta+zUBUFhx+CmfHjWFw6NK+gsr4mVoUjuQApRct5U6+2DDuAAikEBrdv+RrLalXv -Hetjr+GfmEToncdgt4N+ltWh0zuCT2F/VicHoODMZ75G3LMnFOT92EIYnXIhM5MfxGIUw6++ -uZi7uLYleo3q6QqwS8kwMwfG2rX8IDvM9BC/enGoZRFlpAszM4u9I1VqMAVhdLZFAbIBbyAG -+2QUizcWX+Fx1GEdJg0hxcmYjip5wty0B1lZ8yAnpdfCx+AHEQeg/xUjkz2JzXgYHytwoh6F -FY/ArcAdPJeNtze2wSPFLw+DH8QYiN7XWzdfwZmjNmRIBd7lFj1IPOKxHIyv3XvhbXR42wos -3tnbd5H1zC/gB1lGtmN72CDVXd8rGKJK31xc2/oxvQH8IGFPey1hYdRfyPdhiCpICnwozj/c -plH2JhTzT3ub0Wy6h9g6AjE8dXYIkDF3b0CDTo968PnGMsMw5Z+e5gcxO7CfaT8agCFq4KdC -BUSMI2r5YcfvhlD6zg7zgCxsEVXbBJeGNEO95NrZ30IwRHVkfaiAlO18askGvVw7ALPjx8TE -BPyP/b4CcTgcyn+hU3s9xAmnJsiDc+vgaTmtiqHMsDJ3K2NI8DgS0sA3buOTx46pwlR94VBt -9CtXrig7HO8rEPGASkpKlFcLl9q6uQmbVFE2zqwHGh1LYgSDTAy5dBvv4OsnYWR2JY5ZbDkV -/1+SagwRccEVArJl4jlNiIVq+WgXFkCWGkeCc76634diy7vE9xKuoSkwLD6UlNEkQxiiKnYl -+UCsaU8bbtybfePIffVX/s3WWtmKrUgdMY4hqmjLAz4QvXEk2hOdG+Ucl0yB+GOImhweBD/I -f43S7kS4IEbHEX4Qsyjd/QgH5Pg7z/L3kBVDmZgCWi/ADMhqHkdW0Rt2RoCzf4XAzDWchhrI -1K2/wQ8SCRgR13Xgco+CM3zcGgJStTsFg202/h7CH34QfpBIZXR0VBkDIrWnlh9EJx7P/Ps2 -2D6lJ2pBysrKlA+FEZ/8ww+yCrPwIpJ4L8fMzAz/E8P/O3fu3IEol8uF2dlZfhD+8IPwg/CH -H4QfhD/8IPzhB+EH4Q8/CD8If/hB+EH4ww/CD8IffhD+8IPwg/CHH4QfhD/8IPwg/OEH4Qfh -Dz8If/hB+EH4ww+y2vIvwbhd6S5RRvwAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTPieExample >> exampleRingChart [ - - | b | - b := RTPieBuilder new. - b interaction popup. - b shape current - innerRadius: 70; - externalRadius: 100. - b objects: (Array with: Dictionary with: Collection with: Set with: OrderedCollection ). - b slice: #numberOfMethods. - b normalizer distinctColor. - ^ b -] - -{ #category : #icons } -RTPieExample >> exampleRingChartIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAEUUlEQVR4XuXca0/aUBgHcL/s -3u077Avo1HmZ6LLoEnUat2UzOl2yeEEBRadTQAjelclFpRRaWiwP4xgxKudU1EJL/v/keSv6 -/DztOaentJRK+HFSWvBbgA+CH3wQfBD84IPgg+AHHwQfBD/4IPgg+MEHwQ8+CD4IfvBB8EHw -gw+CD4IffBB8EPzgg+AHHwQfBD/4IPggNsWQ0qT4vKR4l0sPS4tGCR+kAVFWfHQ54KLz9tZS -rZWbnyMjnSZ8EItChkHy9NSTEHh10d9H+tEh4YO8ZER4ll8McbeSvV00vLtNehkZH+Qpo6JQ -oMvBj5ZisBp2z1LbtrfEal925mXMcSBXibjlEKxCgwO3GJX6HdsnfBALMeSpyapZVm5xns57 -3lX9nL7N5SoQVpNHEcIH4aSYz9eEIc9Mk5GVa2qi6l+h8442WpsY4WJUyp+MET7Ig1y43puC -SGOjRFdXz2oca7gZCKvTXIbwQW4i/5oxxcgHAy9uVragU1dw1QwGH+R6xS3LphiF42PLGkXl -9IfXhSizp7sEDyKNjQhBtF3rt0CKZRQ2GkQoBhUJFsTsRp75OlG3xvxTZCGI3VNhW0HYPpMI -pN75UZ7uilBgQUQYimep7v+lN5cuLshRViI4kKKu2zY6KhnfD3JRFs4O8UCuF228XdkProY1 -Y/sywQXpCPjwQJQlNxeEbX80Mk67j7TYN90d5YJokTDhg9hxQ+dsALIqKgo+iB1JtbdyQajY -2IXZN/8at+BALvp6uCBGprFTzi33FrfgQNhKnAei/t3AB7FlllWeTdm1KKyEbTbig1TWIZsb -/IVh+WbfqN8heZLkgoR8IcLfOrk709K0hjRkZ3WHCxI/ioPuZXV1kOgxbb0/W1M14eVKz+uY -I0TxeoT7WfVej0Q3oiIQ3O13dlMVgaQ/DdatMVJKEo6OxHECF4RF/ik+JipPT1reHDWrCjHs -nF05BsRslFQOS1v1WXklb4qRiqXwn6lfNyoUMD8C9GX8xY2SL2VTjLA/jH/q5N51ffyz+UG5 -zrekHx48uWlUNOg4MmeKwaqgF/BBqva3XL2Pnl686O0i9c/6o81T5T06iXRTeOVViVXQuy5E -yUpZx/TAUSBsp/e8u/NJ53vTo8OUW5ijnHuBYlEXRfyvbxHu1eobLgi7lDmpB447/c5u8umh -572KwIW4UyHf1D2UbDqLf/q95pvw5HeyGoQVgwh4AmTnarwpQVgKsVMSPVl8Lkj8YNnRr7U1 -xUufWihIon2vWkHO9ofKF8Mi/juGVsbIZCi3tEhsClwLSCw6QFLK01SvSDf1FweQrpO+t0vq -mp+U1RWSkh7S1DNq5r8J/5sc8EHwgw+CD4IffBB8EPzgg+CD4AcfBB8EP/gg+MEHwQfBDz4I -Pgh+8EHwQfCDD4IPgh98EPzgg+CD4AcfBB8EP/gg+CD4wQfBB8EPPgh+8EHwQfCDD4IPgh98 -EHwQ/DQo/wGK0Xg+nbEqTgAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTPieExample >> exampleSimple [ - - | b | - b := RTPieBuilder new. - b interaction popup. - - b objects: #(10 4 1 2 5). - b slice: #yourself. - b normalizer distinctColor. - b labeled. - ^ b -] - -{ #category : #icons } -RTPieExample >> exampleSimpleIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAEGUlEQVR4XuXba0/aYBiHcb+a -r/xYfgL3AjfnskO2bNnicSIdkCgqo7RQNpEKKjgBdSDgCfAwhnCztkYHyqGlSEv+V3LH1/Tn -Ux4eylCthp+ZGsK/BPgg+OGD4IPghw+CD4IfPgg+CH74IPgg+OGD4IcPgg+CHz4IPgh++CD4 -IPjhg+CD4IcPgh8+CD4Ifvgg+CD44YOoKRKJkPzXYrEQPoiJKpfLlE6nCR/E4EqlEsnjdrvx -Vwh++CD4IPjhg+CDDELx4hlx2cOaNblDE1sBGtvka+MRP03thYnNHND6SZrk8EGesETxnD7t -isrFVzvjEYGEXIrwQXrYwUWe5AurBaLZBEwMMzAgs/Et3RD1I9/ezkrXhA+isaubMlnC/p5i -1E9SWnX4ICqT/4OfCqJ+ovkTwgfp0E21SmMi1xcQefZNslJMC/Imut43jLuRb4/4IE1yHyX7 -jiHPu2gQH+Rh5WrFEIy7iZzlCB+kLuYgZiiINPgg9RmMocz2+THhg0jJn6DNAPJROpbBB5EK -r27Q3BpHb4OC4TD4IFLCV2/DrLj8NMP7DcE5/WPMsYqpQeonwPhoxs3VXoj9AfJKR/fQIFeF -K2oH8nAca376Eni6W5v8HQs0yOnhsSaQ+uEcPpr18PRM5HsG5ErFsVfI8X62a5D6+eFg6bvF -U9M70eUYNkghd64bhHW6KL7J9AQkwSexQaqVqi4QdsFFPnaBEmGm1guQpG8ff9vb9XuIdZUW -Fz/XEhF7z0CyO1n8bW/AymlfJTavguFemVMw5PG/53XftvA/GEodhpOaQRhmSgHZ23Tcg2ws -unSBeJ6zWEcnw8PDTV/w3+uSJhAnM69guJb+rw4FxLak8/0jiQMiiiKNjIy0fMFBh6AKxWmd -UzDkify0NYDE+FVdK8TIB+tMd/yez5x1BFlzOO4x7PbpBoy76RZj27mD/31Is1PfVhhexnWP -IY8YsPUUxOjHTk0JUrmpNAVhvzZiKFvdJhjdguRiOfzv1FveurKNn9z9jOcRhsDOUysQ4YO2 -ra84L+I/BtSpdOz3LcqC8llD9eq43fouqwYJTm/gPyintsxemhz22UcYd8ckLUFUbn03ZkL4 -j5JqPgk+zjRZHd/aguz6Om99Y64Y/sPWXR8+VqvEcbdv6p7VubYYnd7YuVc8FY4KbTEmJibw -z7LUVCzmKRX3dQXifclRZiuj6kLn83m6vLwkfBAtO7HcL0rtsdQOhH/tI/kopHRRGoifteH/ -6BMfRH2hUIjwQUyUIAj4IGZqdHQU/5aFHz6Izm1wkSYnJwkfxCR5PB6SUfBB8MMHwQfBDx8E -HwQ/fBD88EHwQfDDB8EHwQ8fBB8EP3wQfBD88EHwwwfBB8EPHwQfBD98EHwQ/PBB8EHwwwfB -Dx9kAPoHXr9gU/fk5PYAAAAASUVORK5CYII=' -] - -{ #category : #accessing } -RTPieExample >> label [ - ^ 'Pie chart' -] diff --git a/src/Roassal2/RTPlatformPopup.class.st b/src/Roassal2/RTPlatformPopup.class.st deleted file mode 100644 index 7d3c7841f..000000000 --- a/src/Roassal2/RTPlatformPopup.class.st +++ /dev/null @@ -1,67 +0,0 @@ -" -I am a basic class to have the platform popup instead of the roassal popup (RTPopup) -" -Class { - #name : #RTPlatformPopup, - #superclass : #RTAbstractPopup, - #instVars : [ - 'background', - 'text' - ], - #category : #'Roassal2-MorphSpecific' -} - -{ #category : #'as yet unclassified' } -RTPlatformPopup class >> color: aColor [ - ^ self new background: aColor -] - -{ #category : #'as yet unclassified' } -RTPlatformPopup class >> removeLastPopup [ - TRPlatform current deletePopup: self lastPopup. - self resetLastPopup. -] - -{ #category : #'as yet unclassified' } -RTPlatformPopup class >> text: aString [ - ^ self new text: aString -] - -{ #category : #'as yet unclassified' } -RTPlatformPopup class >> text: aString color: aColor [ - ^ self new text: aString; background: aColor -] - -{ #category : #'as yet unclassified' } -RTPlatformPopup >> background: aColor [ - background := aColor -] - -{ #category : #'as yet unclassified' } -RTPlatformPopup >> createAndShowPopupFor: element event: event [ - | popup | - self removeLastPopup. - popup := TRPlatform current - createPopupFor: element view canvas morph - in: event position - background: (background rtValue: element) - string: (text rtValue: element model) asString. - self lastPopup: popup -] - -{ #category : #'as yet unclassified' } -RTPlatformPopup >> initialize [ - super initialize. - background := Color gray. - text := #yourself. -] - -{ #category : #'as yet unclassified' } -RTPlatformPopup >> text [ - ^ text -] - -{ #category : #'as yet unclassified' } -RTPlatformPopup >> text: aBlock [ - text := aBlock -] diff --git a/src/Roassal2/RTPolyLineSegment.class.st b/src/Roassal2/RTPolyLineSegment.class.st deleted file mode 100644 index 1c36f8523..000000000 --- a/src/Roassal2/RTPolyLineSegment.class.st +++ /dev/null @@ -1,94 +0,0 @@ -" -I am an ordered collection of LineSegments. I provide some extra functions such as searching for specific segment given some position etc. -" -Class { - #name : #RTPolyLineSegment, - #superclass : #RTObject, - #instVars : [ - 'segments' - ], - #category : #'Roassal2-AttachPoint' -} - -{ #category : #'instance creation' } -RTPolyLineSegment class >> with: aSegment [ - ^ self new - segments: (Array with: aSegment); - yourself -] - -{ #category : #'instance creation' } -RTPolyLineSegment class >> with: first with: second [ - ^ self new - segments: (Array with: first with: second); - yourself -] - -{ #category : #'instance creation' } -RTPolyLineSegment class >> withAll: aCollection [ - ^ self new - segments: aCollection; - yourself -] - -{ #category : #accessing } -RTPolyLineSegment >> absoluteBalanceFor: aNumber [ - | balance | - balance := aNumber. - balance > 1 - ifTrue: [ ^ self length min: balance ]. - balance < 0 - ifTrue: [ ^ 0 max: self length - balance negated ]. - ^ self length * balance -] - -{ #category : #accessing } -RTPolyLineSegment >> first [ - ^ self segments first -] - -{ #category : #initialization } -RTPolyLineSegment >> initialize [ - segments := #() -] - -{ #category : #accessing } -RTPolyLineSegment >> last [ - ^ self segments last -] - -{ #category : #accessing } -RTPolyLineSegment >> length [ - ^ self segments inject: 0 into: [ :sum :next | sum + next length ] -] - -{ #category : #accessing } -RTPolyLineSegment >> second [ - ^ self segments second -] - -{ #category : #accessing } -RTPolyLineSegment >> segmentWithPointFor: aNumber [ - | sum newSum balance | - sum := 0. - balance := self absoluteBalanceFor: aNumber. - self segments - do: - [ :each | - newSum := sum + each length. - (balance between: sum and: newSum) - ifTrue: [ - ^ Array with: each with: (each pointForBalance: balance - sum) ]. - sum := newSum ]. - self error: 'failed to find a segment' -] - -{ #category : #accessing } -RTPolyLineSegment >> segments [ - ^ segments -] - -{ #category : #accessing } -RTPolyLineSegment >> segments: aCollection [ - segments := aCollection -] diff --git a/src/Roassal2/RTPolyLineSegmentsTest.class.st b/src/Roassal2/RTPolyLineSegmentsTest.class.st deleted file mode 100644 index 1c640dd8b..000000000 --- a/src/Roassal2/RTPolyLineSegmentsTest.class.st +++ /dev/null @@ -1,67 +0,0 @@ -Class { - #name : #RTPolyLineSegmentsTest, - #superclass : #RTTest, - #category : #'Roassal2-Tests' -} - -{ #category : #tests } -RTPolyLineSegmentsTest >> testLength [ - | segment segments | - segment := RTLineSegment from: 0 @ 0 to: 8 @ 6. - segments := RTPolyLineSegment with: segment. - self assert: segments length equals: 10. - segments := RTPolyLineSegment - with: (RTLineSegment from: 0 @ 0 to: 10 @ 0) - with: (RTLineSegment from: 10 @ 0 to: 10 @ 5). - self assert: segments length equals: 15 -] - -{ #category : #tests } -RTPolyLineSegmentsTest >> testSegmentWithPointAbsolute [ - | segments | - segments := RTPolyLineSegment - with: (RTLineSegment from: 0 @ 0 to: 8 @ 6) - with: (RTLineSegment from: 8 @ 6 to: 16 @ 0). - self - assert: (segments segmentWithPointFor: 5) - equals: (Array with: segments first with: 4 @ 3). - self - assert: (segments segmentWithPointFor: 10) - equals: (Array with: segments first with: 8 @ 6). - self - assert: (segments segmentWithPointFor: 15) - equals: (Array with: segments second with: 12 @ 3). - self - assert: (segments segmentWithPointFor: 20) - equals: (Array with: segments second with: 16 @ 0) -] - -{ #category : #tests } -RTPolyLineSegmentsTest >> testSegmentWithPointNegative [ - | segments | - segments := RTPolyLineSegment - with: (RTLineSegment from: 0 @ 0 to: 8 @ 6) - with: (RTLineSegment from: 8 @ 6 to: 16 @ 0). - self - assert: (segments segmentWithPointFor: -20) - equals: (Array with: segments first with: 0 @ 0). - self - assert: (segments segmentWithPointFor: -15) - equals: (Array with: segments first with: 4 @ 3). - self - assert: (segments segmentWithPointFor: -10) - equals: (Array with: segments first with: 8 @ 6). - self - assert: (segments segmentWithPointFor: -5) - equals: (Array with: segments second with: 12 @ 3) -] - -{ #category : #tests } -RTPolyLineSegmentsTest >> testSegmentWithPointRelative [ - | segment segments | - segment := RTLineSegment from: 0 @ 0 to: 8 @ 6. - segments := RTPolyLineSegment with: segment. - self assert: (segments segmentWithPointFor: 0) equals: (Array with: segment with: 0 @ 0). - self assert: (segments segmentWithPointFor: 0.5) equals: (Array with: segment with: 4 @ 3). - self assert: (segments segmentWithPointFor: 1) equals: (Array with: segment with: 8 @ 6) -] diff --git a/src/Roassal2/RTPolygon.class.st b/src/Roassal2/RTPolygon.class.st deleted file mode 100644 index dd2108a8c..000000000 --- a/src/Roassal2/RTPolygon.class.st +++ /dev/null @@ -1,241 +0,0 @@ -" -I am a shape which builds the polygon sequentialy conecting my vertices. - -For example: --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -| v shape element | -v := RTView new. -shape := - RTPolygon new - vertices:{ - 25 @ 00 . - 10 @ 50 . - 50 @ 20 . - 00 @ 20 . - 40 @ 50 }. -element := shape element. -v add: element. -v open --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -" -Class { - #name : #RTPolygon, - #superclass : #RTAbstractElementShape, - #instVars : [ - 'vertices' - ], - #category : #'Roassal2-Shapes' -} - -{ #category : #'instance creation' } -RTPolygon class >> diamond [ - ^ self new - vertices: - (Array - with: 0 @ 1 - with: 1 @ 0 - with: 0 @ -1 - with: -1 @ 0); - yourself -] - -{ #category : #public } -RTPolygon class >> fitPolygonToSquare: points [ - | maxx minx maxy miny sx sy x y | - minx := maxx := points first x. - miny := maxy := points first y. - points do: [ :p | - minx := minx min: p x. - miny := miny min: p y. - maxx := maxx max: p x. - maxy := maxy max: p y ]. - "stretch factors" - sx := 2/(maxx - minx). - sy := 2/(maxy - miny). - points doWithIndex: [ :p :i| - x := p x * sx. - y := p y * sy. - points at: i put: x@y. - minx := minx min: x. - miny := miny min: y. - maxx := maxx max: x. - maxy := maxy max: y ]. - miny < -1 ifTrue: [ - points doWithIndex: [ :p :i | - points at: i put: p x @ ( p y - 1 - miny ) ] ]. - ^ points. -] - -{ #category : #public } -RTPolygon class >> generateUnitNgonPoints: sides rotation: rotationAngle [ - " - RTPolygon generateUnitNgonPoints: 3 rotation: 0 - " - | increment startAngle points currentAngle | - increment := 1.0 / sides * 2 * Float pi. - startAngle := sides even - ifTrue: [ (Float pi / 2) + (increment / 2) ] - ifFalse: [ Float pi / 2 ]. - startAngle := startAngle + rotationAngle. - - points := Array new: sides. - 0 to: sides - 1 do: [ :i | - currentAngle := i * increment + startAngle. - points at: i+1 put: currentAngle cos @ currentAngle negated sin ]. - ^ points -] - -{ #category : #public } -RTPolygon class >> generateUnitNgonPointsFitToSquare: sides rotation: rotationAngle [ - | points | - points := self generateUnitNgonPoints: sides rotation: rotationAngle. - points := self fitPolygonToSquare: points. - ^ points. -] - -{ #category : #'instance creation' } -RTPolygon class >> heptagon [ - ^ self new - vertices: (self generateUnitNgonPointsFitToSquare: 7 rotation: 0); - yourself -] - -{ #category : #'instance creation' } -RTPolygon class >> hexagon [ - ^ self new - vertices: (self generateUnitNgonPointsFitToSquare: 6 rotation: 0); - yourself -] - -{ #category : #'instance creation' } -RTPolygon class >> octagon [ - ^ self new - vertices: (self generateUnitNgonPointsFitToSquare: 8 rotation: 0); - yourself -] - -{ #category : #'instance creation' } -RTPolygon class >> pentagon [ - ^ self new - vertices: (self generateUnitNgonPointsFitToSquare: 5 rotation: 0); - yourself -] - -{ #category : #'instance creation' } -RTPolygon class >> rectangle [ - ^ self square -] - -{ #category : #'instance creation' } -RTPolygon class >> rhomboid [ - ^ self new - vertices: - (Array - with: -1 @ -1 - with: 0.333 @ -1 - with: 1 @ 1 - with: -0.333 @ 1); - yourself -] - -{ #category : #'instance creation' } -RTPolygon class >> square [ - ^ self new - vertices: (self generateUnitNgonPointsFitToSquare: 4 rotation: 0); - yourself -] - -{ #category : #'instance creation' } -RTPolygon class >> star [ - " - self star - " - - | star5Points outerPoints innerPoints innerRadius ar | - star5Points := Array new: 10. - outerPoints := self generateUnitNgonPoints: 5 rotation: 0. - innerPoints := self generateUnitNgonPoints: 5 rotation: Float pi / -5. - "Outer radius is 1; inner radius of star is smaller" - innerRadius := 0.5 * (3 - 5 sqrt) * 1.57. - innerPoints - doWithIndex: [ :p :i | innerPoints at: i put: (p x * innerRadius) @ (p y * innerRadius) ]. - star5Points - doWithIndex: [ :p :i | - ar := i even - ifTrue: [ outerPoints ] - ifFalse: [ innerPoints ]. - star5Points at: i put: (ar at: i // 2 + (i % 2)) ]. - star5Points := self fitPolygonToSquare: star5Points. - ^ self new - vertices: star5Points; - yourself -] - -{ #category : #'instance creation' } -RTPolygon class >> triangle [ - ^ self new - vertices: (self generateUnitNgonPointsFitToSquare: 3 rotation: 0); - yourself -] - -{ #category : #'instance creation' } -RTPolygon class >> vee [ - ^ self new - vertices: - (Array - with: -1 @ -1 - with: 0 @ -0.333 - with: 1 @ -1 - with: 0 @ 1); - yourself -] - -{ #category : #initialization } -RTPolygon >> initialize [ - super initialize. - self vertices: #(). - width := height := nil. -] - -{ #category : #hooks } -RTPolygon >> trachelShapeClass [ - ^ TRPolygonShape - -] - -{ #category : #hooks } -RTPolygon >> updateFor: anElement trachelShape: trachelShape [ - - trachelShape isNil ifTrue: [ ^ self ]. - trachelShape - color: (self colorFor: anElement); - strokeWidth: (self borderWidthFor: anElement); - strokePaint: (self borderColorFor: anElement); - vertices: (self verticesFor: anElement); - rotateByDegrees: (self rotationFor: anElement); - scaleBy: (self scaleFor: anElement). - - (width notNil and: [height notNil]) - ifTrue: [ trachelShape extent: (self widthFor: anElement) @ (self heightFor: anElement) ] - -] - -{ #category : #accessing } -RTPolygon >> vertices [ - ^ vertices -] - -{ #category : #accessing } -RTPolygon >> vertices: arrayOfPoints [ - self verticesElement: [ :e | arrayOfPoints rtValue: e model ]. -] - -{ #category : #accessing } -RTPolygon >> verticesElement: arrayOfPoints [ - vertices := arrayOfPoints -] - -{ #category : #hooks } -RTPolygon >> verticesFor: anElement [ - ^ vertices rtValue: anElement. -] diff --git a/src/Roassal2/RTPolygonTest.class.st b/src/Roassal2/RTPolygonTest.class.st deleted file mode 100644 index 97fecb8d9..000000000 --- a/src/Roassal2/RTPolygonTest.class.st +++ /dev/null @@ -1,20 +0,0 @@ -Class { - #name : #RTPolygonTest, - #superclass : #RTTest, - #category : #'Roassal2-Core-Tests' -} - -{ #category : #tests } -RTPolygonTest >> testBasic [ - RTView new add: RTPolygon element. -] - -{ #category : #tests } -RTPolygonTest >> testBasic02 [ - RTView new add: (RTPolygon new vertices: (Array with: 0 @ 0 with: 50 @ 50 with: 25 @ 75)) element. -] - -{ #category : #tests } -RTPolygonTest >> testBasic03 [ - self assert: (RTPolygon new verticesFor: RTElement new) isEmpty -] diff --git a/src/Roassal2/RTPolymorphicBoxLegendItem.class.st b/src/Roassal2/RTPolymorphicBoxLegendItem.class.st deleted file mode 100644 index 2bfd25bcf..000000000 --- a/src/Roassal2/RTPolymorphicBoxLegendItem.class.st +++ /dev/null @@ -1,92 +0,0 @@ -Class { - #name : #RTPolymorphicBoxLegendItem, - #superclass : #RTLegendItem, - #instVars : [ - 'widthDescription', - 'heightDescription', - 'boxDescription' - ], - #category : #'Roassal2-Builder-Legend' -} - -{ #category : #accessing } -RTPolymorphicBoxLegendItem >> boxDescription [ - ^ boxDescription -] - -{ #category : #accessing } -RTPolymorphicBoxLegendItem >> boxDescription: aString [ - boxDescription := aString -] - -{ #category : #hooks } -RTPolymorphicBoxLegendItem >> execute [ - | g ext1 ext2 box e lineExtremityShape lineShape topLine leftLine widthDescriptionElement heightDescriptionElement boxDescriptionLabel | - g := RTGroup new. - - "Defining extremities and line shape" - lineExtremityShape := RTBox new size: 1. - lineShape := RTDoubleArrowedLine new color: Color red. - - "Label for the descriptions" - widthDescriptionElement := (self newLabelShape: widthDescription) element. - heightDescriptionElement := (self newLabelShape: heightDescription) element. - g add: widthDescriptionElement. - g add: heightDescriptionElement. - - "The box" - box := (RTBox new extent: 30 @ 50) element. - g add: box. - e := box encompassingRectangle. - - "The top line" - ext1 := lineExtremityShape element. - ext2 := lineExtremityShape element. - topLine := lineShape edgeFrom: ext1 to: ext2. - ext1 translateBy: e topLeft - (0 @ 10). - ext2 translateBy: e topRight - (0 @ 10). - g - add: ext1; - add: ext2. - g add: topLine. - - "The width label" - boxDescriptionLabel := (self newLabelShape: boxDescription) element. - g add: boxDescriptionLabel. - RTConstraint move: boxDescriptionLabel onTheRightOf: box. - - TRConstraint move: widthDescriptionElement between: ext1 and: ext2. - widthDescriptionElement translateBy: 0 @ (widthDescriptionElement extent y / -2 - 3). - ext1 := lineExtremityShape element. - ext2 := lineExtremityShape element. - leftLine := lineShape edgeFrom: ext1 to: ext2. - ext1 translateBy: e topLeft - (10 @ 0). - ext2 translateBy: e bottomLeft - (10 @ 0). - g - add: ext1; - add: ext2. - g add: leftLine. - TRConstraint move: heightDescriptionElement between: ext1 and: ext2. - heightDescriptionElement translateBy: (heightDescriptionElement extent x / -2) @ 0. - ^ g -] - -{ #category : #accessing } -RTPolymorphicBoxLegendItem >> heightDescription [ - ^ heightDescription -] - -{ #category : #accessing } -RTPolymorphicBoxLegendItem >> heightDescription: aString [ - heightDescription := aString -] - -{ #category : #accessing } -RTPolymorphicBoxLegendItem >> widthDescription [ - ^ widthDescription -] - -{ #category : #accessing } -RTPolymorphicBoxLegendItem >> widthDescription: aString [ - widthDescription := aString -] diff --git a/src/Roassal2/RTPopup.class.st b/src/Roassal2/RTPopup.class.st deleted file mode 100644 index 2541b5a2a..000000000 --- a/src/Roassal2/RTPopup.class.st +++ /dev/null @@ -1,374 +0,0 @@ -" -A RTPopup is an interaction that dynamically add a text or a group of elements above the element pointed by the mouse. - -Example of use: --=-=-= - v := RTView new. - es := (RTEllipse new color: Color blue) elementsOn: Collection withAllSubclasses. - v addAll: es. - - aPopup := RTPopup new - text: [ :aClass | - 'Classname = ', aClass name, String cr, - 'NbMethod=', aClass numberOfMethods asString, String cr, - 'NbVariables=', aClass numberOfVariables asString ]. - aPopup borderColor: Color black. - aPopup textColor: Color white. - aPopup backgroundColor: Color black. - es @ aPopup. - - RTMetricNormalizer new - elements: es; - normalizeSize: #numberOfMethods min: 20 max: 50; - normalizeColor: #numberOfVariables. - - RTGridLayout new on: es. - - v --=-=-= - -Another example of use: --=-=-=-=-=-=-=-=-=-=-=-= -v := RTView new. - -es := RTLabel elementsOn: (1 to: 10). - -v addAll: es. - -es @ (RTPopup new - background: Color blue - group: [ :group :el | - - group addAll: (RTEllipse elementsOn: (1 to: el model)). - RTWeightedCircleLayout new - initialRadius: 50; - on: group. - ]). - -RTHorizontalLineLayout on: es. -v open --=-=-=-=-=-=-=-=-=-=-=-= -" -Class { - #name : #RTPopup, - #superclass : #RTAbstractPopup, - #instVars : [ - 'groupBlock', - 'text', - 'textColor', - 'alphaPopupBackground', - 'backgroundColor', - 'borderColor', - 'hasBorder', - 'textHeight' - ], - #category : #'Roassal2-Interactions' -} - -{ #category : #lastPopup } -RTPopup class >> removeLastPopup [ - self lastPopup ifNil: [ ^ self ]. - self lastPopup do: [ :e | - ((e notNil and: [ e isNumber not])and: [ e view notNil ]) ifTrue: [ e remove ] ]. - - self resetLastPopup -] - -{ #category : #public } -RTPopup class >> text: aBlockOrSymbol [ - " - Set the text of the popup - The argument, when evaluated with an object return an object, to which #asString is sent to - - The argument receives - - an object, in case that the popup is defined for RTElement - - an association (from -> to) in case the popup is added to edges - - Here is an example that define a popup on edges - b := RTMondrian new. - b shape circle size: 10; color: Color red. - b nodes: (1 to: 20). - edges := b edges moveBehind; connectFrom: [ :v | v // 2 ]. - edges @ RTHighlightable. - edges @ (RTPopup text: [ :association | 'An edge from ', association key asString, ' to ', association value asString ]). - b layout cluster. - b - - " - ^ self new text: aBlockOrSymbol -] - -{ #category : #accessing } -RTPopup >> alphaPopupBackground [ - "Return the alpha value for the background. The alpha value is useful to make the background transparent" - ^ alphaPopupBackground -] - -{ #category : #accessing } -RTPopup >> alphaPopupBackground: aValue [ - "Set the alpha value for the background. The alpha value is useful to make the background transparent" - alphaPopupBackground := aValue -] - -{ #category : #public } -RTPopup >> background: aColor group: aTwoArgBlock [ - "aTwoArgBlock has to follow the pattern [ :group :element | ... ] - group is an empty group. You need to add what you want to be displayed in the popup. el is the element on which the mouse is above." - - self group: [ :group :el | - | backgroundElement | - backgroundElement := self createBackgroundElement: aColor. - group add: backgroundElement. - aTwoArgBlock value: group value: el. - RTNest new centerOn: backgroundElement elements: (group copyWithout: backgroundElement). - ] -] - -{ #category : #accessing } -RTPopup >> backgroundColor [ - ^ backgroundColor -] - -{ #category : #accessing } -RTPopup >> backgroundColor: aColor [ - "Set the color background of the popup. -For example - -v := RTView new. -v addAll: (RTBox new elementsOn: (1 to: 100)). - -v elements @ (RTPopup new backgroundColor: Color green). -RTGridLayout on: v elements. -v elements do: [ :el | el announce: TRMouseEnter new ]. -v - - " - backgroundColor := aColor -] - -{ #category : #accessing } -RTPopup >> borderColor [ - ^ borderColor -] - -{ #category : #accessing } -RTPopup >> borderColor: aColor [ - "Set the border color - Here is an example: - -b := RTMondrian new. -b interaction popupView: [ :group :el | - group add: (RTBitmap new form: TRPlatform current roassalIcon) element. - group add: (RTLabel new color: Color orange; elementOn: el model printString). - RTVerticalLineLayout on: group. -] backgroundColor: Color white borderColor: Color black . -b nodes: (1 to: 100). -b layout grid. -b -" - borderColor := aColor. - hasBorder := true. -] - -{ #category : #initialization } -RTPopup >> createAndShowPopupFor: element event: event [ - | popupPosition popup idealPosition | - self removeLastPopup. - - popup := self getNewPopupFor: element. - self lastPopup: popup. - - "The following is useful when testing" - event position isNil - ifTrue: [ idealPosition := element position ] - ifFalse: [ idealPosition := event position ]. - popupPosition := self closestPositionOf: popup from: idealPosition inView: element view. - - popup translateTopLeftTo: popupPosition. - -] - -{ #category : #private } -RTPopup >> createBackgroundElement: aColor [ - | shape | - shape := RTBox new color: (aColor alpha: self alphaPopupBackground). - self hasBorder ifTrue: [ shape borderColor: borderColor; borderWidth: 3 ]. - ^ shape element -] - -{ #category : #hooks } -RTPopup >> createElementFor: element [ - | g | - g := RTGroup new. - groupBlock value: g value: element. - ^ g -] - -{ #category : #initialization } -RTPopup >> defaultTextHeight [ - "size of popup" - ^ 9 -] - -{ #category : #initialization } -RTPopup >> getNewPopupFor: element [ - | popupGroup | - popupGroup := self createPopupFor: element. - popupGroup do: [ :e | element view add: e. e trachelShape setAsFixed ]. - element trachelShape signalUpdate. - ^ popupGroup -] - -{ #category : #public } -RTPopup >> group: aTwoArgBlock [ - "aTwoArgBlock has to follow the pattern [ :group :element | ... ] - group is an empty group. You need to add what you want to be displayed in the popup. el is the element on which the mouse is above." - groupBlock := aTwoArgBlock -] - -{ #category : #public } -RTPopup >> hasBorder [ - "Answer true if a border has to be used. When setting a border color, the border is used" - ^ hasBorder -] - -{ #category : #initialization } -RTPopup >> initialize [ - super initialize. - self text: #yourself. - textColor := Color black. - alphaPopupBackground := 0.9. - backgroundColor := Color gray. - borderColor := Color gray alpha: 0.5. - hasBorder := false. - self textHeight: [ :x | self defaultTextHeight ] -] - -{ #category : #public } -RTPopup >> named: aOneArgBlock background: aColor group: aTwoArgBlock [ - "aTwoArgBlock has to follow the pattern [ :group :element | ... ] - group is an empty group. You need to add what you want to be displayed in the popup. el is the element on which the mouse is above." - - self - group: [ :group :el | - | background label | - background := self createBackgroundElement: aColor. - label := (RTLabel new - text: aOneArgBlock; - color: Color black) elementOn: el model. - aTwoArgBlock value: group value: el. - group - addFirst: background; - addFirst: label. - RTNest new centerOn: background elements: (group copyWithoutAll: (Array with: background with: label)). - TRConstraint move: label above: background ] -] - -{ #category : #public } -RTPopup >> namedBackground: aColor group: aTwoArgBlock [ - "aTwoArgBlock has to follow the pattern [ :group :element | ... ] - group is an empty group. You need to add what you want to be displayed in the popup. el is the element on which the mouse is above." - -" -v := RTView new. -v addAll: (RTBox new elementsOn: (1 to: 100)). - -v elements @ (RTPopup new namedBackground: Color black group: [:group :element | group add: (RTLabel new color: Color red; elementOn: 'x * x = ', (element model * element model) asString); yourself ]). -RTGridLayout on: v elements. -v elements do: [ :el | el announce: TRMouseEnter new ]. - - v -" - - ^ self named: #yourself background: aColor group: aTwoArgBlock -] - -{ #category : #public } -RTPopup >> simpleText: aOneArgBlock [ - "Define a simple textual popup, without background" - -"For example: - -v := RTView new. -v addAll: (RTBox new elementsOn: (1 to: 100)). - -v elements @ (RTPopup new simpleText: [ :nb | 'hello ', nb asString ]). -RTGridLayout on: v elements. -v -" - self group: [ :group :element | - group add: - (RTLabel new - color: Color black; - text: (aOneArgBlock rtValue: element model)) element - ] - -] - -{ #category : #public } -RTPopup >> text: aOneArgBlock [ - " - Set the text of the popup - The argument, when evaluated with an object return an object, to which #asString is sent to - - The argument receives - - an object, in case that the popup is defined for RTElement - - an association (from -> to) in case the popup is added to edges - - Here is an example that define a popup on edges - b := RTMondrian new. - b shape circle size: 10; color: Color red. - b nodes: (1 to: 20). - edges := b edges moveBehind; connectFrom: [ :v | v // 2 ]. - edges @ RTHighlightable. - edges @ (RTPopup text: [ :association | 'An edge from ', association key asString, ' to ', association value asString ]). - b layout cluster. - b - - " - - self textElement: [ :el | aOneArgBlock rtValue: el model ] -] - -{ #category : #accessing } -RTPopup >> textColor [ - ^ textColor -] - -{ #category : #accessing } -RTPopup >> textColor: aValueOrABlockOrASymbol [ - textColor := aValueOrABlockOrASymbol -] - -{ #category : #public } -RTPopup >> textElement: aOneArgBlock [ - " - Set the text of the popup - The argument, when evaluated with a RTElement return an object, to which #asString is sent to - - See #text: for a longer description - " - self group: [ :group :element | - | backRectangle lbl | - backRectangle := self createBackgroundElement: backgroundColor "(RTBox new color: (backgroundColor alpha: self alphaPopupBackground); borderWidth: 5; borderColor: borderColor) element". - - lbl := (RTLabel new - color: textColor; - height: textHeight; - text: (aOneArgBlock rtValue: element) asString) element. - RTNest new centerOn: backRectangle elements: (Array with: lbl). - group add: backRectangle; add: lbl - ] - -] - -{ #category : #accessing } -RTPopup >> textHeight [ - ^ textHeight -] - -{ #category : #accessing } -RTPopup >> textHeight: numberOrSymbolOrBlock [ - "Set the height, in pixel, of the text displayed in the popup" - textHeight := numberOrSymbolOrBlock -] diff --git a/src/Roassal2/RTPopupTest.class.st b/src/Roassal2/RTPopupTest.class.st deleted file mode 100644 index 64a8df48a..000000000 --- a/src/Roassal2/RTPopupTest.class.st +++ /dev/null @@ -1,410 +0,0 @@ -" -A ROAbstractPopupTest is xxxxxxxxx. - -Instance Variables - popup: - view: - -popup - - xxxxx - -view - - xxxxx - -" -Class { - #name : #RTPopupTest, - #superclass : #RTTest, - #instVars : [ - 'view', - 'popup' - ], - #category : #'Roassal2-Core-Tests' -} - -{ #category : #running } -RTPopupTest >> setUp [ - super setUp. - view := RTView new. -] - -{ #category : #running } -RTPopupTest >> tearDown [ - - RTAbstractPopup withAllSubclassesDo: [ :c | c resetLastPopup ]. - super tearDown -] - -{ #category : #tests } -RTPopupTest >> test [ - | el | - el := RTElement on: 123. - el + RTBox. - el @ RTPopup. - - view add: el. - - self assert: el view == view. - - self assert: view numberOfElements = 1. - el announce: TRMouseEnter. - self assert: view numberOfElements = 3. - el announce: TRMouseLeave. - self assert: view numberOfElements = 1. -] - -{ #category : #tests } -RTPopupTest >> testBackgroundColor [ - - | v e background | - v := RTView new. - e := RTBox elementOn: 'Hello'. - e @ (RTPopup new backgroundColor: Color red). - v add: e. - self assert: v numberOfElements equals: 1. - - e announce: TRMouseEnter new. - self assert: v numberOfElements equals: 3. - self assert: v canvas shapes size equals: 1. - self assert: v canvas fixedShapes size equals: 2. - - background := v canvas fixedShapes first. - self assert: background class equals: TRBoxShape. -] - -{ #category : #tests } -RTPopupTest >> testBackgroundColor02 [ - self assert: (RTPopup new backgroundColor: Color red; backgroundColor) equals: Color red -] - -{ #category : #tests } -RTPopupTest >> testBorderColor [ - - self assert: (RTPopup new borderColor: Color red; borderColor) equals: Color red -] - -{ #category : #tests } -RTPopupTest >> testHasBorder [ - - self deny: RTPopup new hasBorder. - self assert: (RTPopup new borderColor: Color black; hasBorder). -] - -{ #category : #tests } -RTPopupTest >> testNamedBackgroundGroup [ - | v | - v := RTView new. - v addAll: (RTBox new elementsOn: (1 to: 100)). - v elements - @ - (RTPopup new - namedBackground: Color black - group: [ :group :element | - group - add: - (RTLabel new - color: Color red; - elementOn: 'x * x = ' , (element model * element model) asString); - yourself ]). - RTGridLayout on: v elements. - v elements do: [ :el | el announce: TRMouseEnter new ] -] - -{ #category : #tests } -RTPopupTest >> testPopup [ - - | v es | - v := RTView new. - - es := RTLabel elementsOn: (1 to: 10). - - v addAll: es. - - es @ (RTPopup new - named: #yourself - background: Color blue - group: [ :group :el | - - group addAll: (RTEllipse elementsOn: (1 to: el model)). - RTWeightedCircleLayout new - initialRadius: 50; - on: group. - ]). - - RTHorizontalLineLayout on: es. - - es first announce: TRMouseEnter new -] - -{ #category : #tests } -RTPopupTest >> testPopupView [ - | b | - b := RTMondrian new. - b interaction - popupView: [ :group :el | - group addAll: (RTBox elementsOn: (1 to: 5)). - RTGridLayout on: group ]. - b node: 42. - b build. - - "No garbage collector happens" - self assert: b view numberOfElements equals: 1. - b view elements anyOne announce: TRMouseEnter. - self assert: b view numberOfElements equals: 7. - b view elements anyOne announce: TRMouseLeave. - self assert: b view numberOfElements equals: 1. - - "We use the garbage collector" - b view elements anyOne announce: TRMouseEnter. - Smalltalk garbageCollect. - RTPopup removeLastPopup. - self assert: b view numberOfElements equals: 1. -] - -{ #category : #tests } -RTPopupTest >> testPopupView02 [ - | b | - b := RTMondrian new. - "b interaction - popupView: [ :group :el | - group addAll: (RTBox elementsOn: (1 to: 5)). - RTGridLayout on: group ]." - b node: 42. - b build. - - "No garbage collector happens" - self assert: b view numberOfElements equals: 1. - b view elements anyOne announce: TRMouseEnter. - self assert: b view numberOfElements equals: 3. - b view elements anyOne announce: TRMouseLeave. - self assert: b view numberOfElements equals: 1. - - "We use the garbage collector" - b view elements anyOne announce: TRMouseEnter. - Smalltalk garbageCollect. - RTPopup removeLastPopup. - self assert: b view numberOfElements equals: 1. -] - -{ #category : #tests } -RTPopupTest >> testSimpleText [ - - | v | - v := RTView new. - v addAll: (RTBox new elementsOn: (1 to: 100)). - - v elements @ (RTPopup new simpleText: [ :nb | 'hello ', nb asString ]). - RTGridLayout on: v elements. - - v elements do: [ :el | el announce: TRMouseEnter new ]. - self assert: v elements size equals: 101. - -] - -{ #category : #tests } -RTPopupTest >> testTextColor [ - - | v e label | - v := RTView new. - e := RTBox elementOn: 'Hello'. - e @ (RTPopup new textColor: Color red). - v add: e. - self assert: v numberOfElements equals: 1. - - e announce: TRMouseEnter new. - self assert: v numberOfElements equals: 3. - self assert: v canvas shapes size equals: 1. - self assert: v canvas fixedShapes size equals: 2. - - label := v canvas fixedShapes last. - self assert: label class equals: TRLabelShape. - self assert: label color equals: Color red. -] - -{ #category : #tests } -RTPopupTest >> testTextColor02 [ - - self assert: (RTPopup new textColor: Color red; textColor) equals: Color red -] - -{ #category : #tests } -RTPopupTest >> testTextHeight [ - - | v e | - v := RTView new. - e := RTBox elementOn: 'Hello'. - e @ (RTPopup new textHeight: 30). - v add: e. - - e announce: TRMouseEnter new. - - -] - -{ #category : #tests } -RTPopupTest >> testTextHeight2 [ - - self assert: (RTPopup new textHeight rtValue: 42) equals: RTPopup new defaultTextHeight. - self assert: (RTPopup new textHeight rtValue: nil) equals: RTPopup new defaultTextHeight. - -] - -{ #category : #'multi lines' } -RTPopupTest >> testWithMultiLine [ - | v e p | - v := RTView new. - - e := (RTBox new size: 40) elementOn: 'Hello - World - Bonjour - Blah'. - - v add: e. - - self assert: v numberOfElements equals: 1. - self assert: v canvas numberOfShapes equals: 1. - self assert: v canvas numberOfFixedShapes equals: 0. - - p := RTPopup new. - p createAndShowPopupFor: e event: TRMouseEnter new. - - self assert: v numberOfElements = 3. - self assert: v canvas numberOfShapes = 1. - self assert: v canvas numberOfFixedShapes = 5. - -] - -{ #category : #'multi lines' } -RTPopupTest >> testWithMultiLine02 [ - | v e | - v := RTView new. - - e := (RTBox new size: 40) elementOn: 'Hello - World - Bonjour - Blah'. - - v add: e. - e @ RTPopup. - RTPopup resetLastPopup. - - "Entering" - e announcer announce: TRMouseEnter new. - self assert: v numberOfElements equals: 3. - self assert: v canvas numberOfShapes equals: 1. - self assert: v canvas numberOfFixedShapes equals: 5. - - "Leaving" - e announcer announce: TRMouseLeave new. - self assert: v numberOfElements equals: 1. - self assert: v canvas numberOfShapes equals: 1. - self assert: v canvas numberOfFixedShapes equals: 0. - - - -] - -{ #category : #'multi lines' } -RTPopupTest >> testWithMultiLine03 [ - | v e p | - v := RTView new. - - e := (RTBox new size: 40) elementOn: 'Hello - World - Bonjour - Blah'. - - v add: e. - e @ RTPopup. - RTPopup resetLastPopup. - - "Entering" - p := RTPopup new. - p createAndShowPopupFor: e event: TRMouseEnter new. - self assert: v numberOfElements equals: 3. - self assert: v canvas numberOfShapes equals: 1. - self assert: v canvas numberOfFixedShapes equals: 5. - - "Leaving" - p removeLastPopup. - - self assert: v numberOfElements equals: 1. - self assert: v canvas numberOfShapes equals: 1. - self assert: v canvas numberOfFixedShapes equals: 0. - - - -] - -{ #category : #'multi lines' } -RTPopupTest >> testWithMultiLine04 [ - | v e p secondElement firstElement | - v := RTView new. - - e := (RTBox new size: 40) elementOn: 'Hello - World - Bonjour - Blah'. - - v add: e. - e @ RTPopup. - - "Entering" - p := RTPopup new. - RTPopup resetLastPopup. - p createAndShowPopupFor: e event: TRMouseEnter new. - self assert: v numberOfElements equals: 3. - self assert: v canvas numberOfShapes equals: 1. - self assert: v canvas numberOfFixedShapes equals: 5. - - "Leaving" - firstElement := RTPopup lastPopup first. - secondElement := RTPopup lastPopup second. - self assert: secondElement shape class equals: RTLabel. - self deny: secondElement isFixed. - firstElement remove. - secondElement remove. - - self assert: v numberOfElements equals: 1. - self assert: v canvas numberOfShapes equals: 1. - self assert: v canvas numberOfFixedShapes equals: 0. - - - -] - -{ #category : #tests } -RTPopupTest >> testWithOneLine [ - | v e p | - v := RTView new. - e := (RTBox new size: 40) elementOn: 'Hello'. - v add: e. - self assert: v numberOfElements = 1. - self assert: v canvas numberOfShapes = 1. - p := RTPopup new. - RTPopup resetLastPopup. - p createAndShowPopupFor: e event: TRMouseEnter new. - self assert: v numberOfElements = 3. - self assert: v canvas numberOfShapes = 1. - self assert: v canvas numberOfFixedShapes = 2 -] - -{ #category : #tests } -RTPopupTest >> testWithSymbol [ - - | v e p | - v := RTView new. - e := (RTBox new size: 40) elementOn: #symbol. - v add: e. - - self assert: v numberOfElements = 1. - self assert: v canvas numberOfShapes = 1. - - p := RTPopup new. - p createAndShowPopupFor: e event: TRMouseEnter new. - - self assert: v numberOfElements = 3. - self assert: v canvas numberOfShapes = 1. - self assert: v canvas numberOfFixedShapes = 2. - -] diff --git a/src/Roassal2/RTPythonAnalysisPlugin.class.st b/src/Roassal2/RTPythonAnalysisPlugin.class.st deleted file mode 100644 index e5282a317..000000000 --- a/src/Roassal2/RTPythonAnalysisPlugin.class.st +++ /dev/null @@ -1,29 +0,0 @@ -Class { - #name : #RTPythonAnalysisPlugin, - #superclass : #RTAbstractPlugin, - #category : #'Roassal2-Plugins' -} - -{ #category : #hooks } -RTPythonAnalysisPlugin >> description [ - ^ 'Load a simple model for analyzing Python source code application' -] - -{ #category : #hooks } -RTPythonAnalysisPlugin >> execute [ - self inform: 'This is obsolete. You need to load DataStudio' -" Gofer new - smalltalkhubUser: 'ObjectProfile' project: 'Roassal2'; - package: 'Roassal2-Plugins-PythonAnalyzer'; - load." -] - -{ #category : #testing } -RTPythonAnalysisPlugin >> isLoaded [ - ^ RPackageOrganizer default includesPackageNamed: 'Roassal2-Plugins-PythonAnalyzer' -] - -{ #category : #hooks } -RTPythonAnalysisPlugin >> label [ - ^ 'simple Python analyzer [Obsolete]' -] diff --git a/src/Roassal2/RTQuadTree.class.st b/src/Roassal2/RTQuadTree.class.st deleted file mode 100644 index 585d489fb..000000000 --- a/src/Roassal2/RTQuadTree.class.st +++ /dev/null @@ -1,215 +0,0 @@ -" -A ROQuadTree is xxxxxxxxx. - -Instance Variables - charge: - corner: - cx: - cy: - leaf: - node: - nodes: - origin: - x: - y: - -charge - - xxxxx - -corner - - xxxxx - -cx - - xxxxx - -cy - - xxxxx - -leaf - - xxxxx - -node - - xxxxx - -nodes - - xxxxx - -origin - - xxxxx - -x - - xxxxx - -y - - xxxxx - -" -Class { - #name : #RTQuadTree, - #superclass : #RTObject, - #instVars : [ - 'charge', - 'x', - 'y', - 'leaf', - 'nodes', - 'origin', - 'corner', - 'node', - 'cx', - 'cy' - ], - #category : #'Roassal2-Layouts' -} - -{ #category : #public } -RTQuadTree class >> withAll: aNodeCollection [ - - ^ self withAll: aNodeCollection origin: (aNodeCollection collect: [:e | e position x]) min @ (aNodeCollection collect: [:e | e position y]) min corner: (aNodeCollection collect: [:e | e position x]) max @ (aNodeCollection collect: [:e | e position y]) max -] - -{ #category : #public } -RTQuadTree class >> withAll: aNodeCollection origin: aPoint corner: anotherPoint [ - - | dx dy root | - - dx := anotherPoint x - aPoint x. - dy := anotherPoint y - aPoint y. - - - (dx closeTo: dy ) ifTrue: [ root := self new. - root origin: aPoint; - corner: anotherPoint. - aNodeCollection do: [ :e | root add: e ]. - ^ root ] . - - dx > dy ifTrue: [ ^ self withAll: aNodeCollection origin: aPoint corner: anotherPoint x @ (aPoint y + dx) ]. - dy > dx ifTrue: [ ^ self withAll: aNodeCollection origin: aPoint corner: (aPoint x + dy) @ anotherPoint y ] . -] - -{ #category : #adding } -RTQuadTree >> add: aNode [ - - |n| - - leaf ifTrue: [ x isNil ifFalse: [ (x - aNode position x) abs + (y - aNode position y) abs < 0.01 ifTrue: [ self addChild: aNode ] - ifFalse: [ n := node. - x := nil. - y := nil. - node := nil. - self addChild: aNode; - addChild: n ] ] - ifTrue: [ x := aNode position x. - y := aNode position y. - node := aNode ] ] - ifFalse: [ self addChild: aNode ] -] - -{ #category : #adding } -RTQuadTree >> addChild: aNode [ - - - | sx sy new | - - sx := (origin x + corner x) / 2. - sy := (origin y + corner y) / 2. - - leaf := false. - - aNode position x < sx ifTrue: [ aNode position y < sy ifTrue: [ (nodes at: 1) isNil ifTrue: [ new := RTQuadTree new. - new origin: origin; - corner: sx@sy. - nodes at: 1 put: new ] . - (nodes at: 1) add: aNode ] - ifFalse: [ (nodes at: 3) isNil ifTrue: [ new := RTQuadTree new. - new origin: origin x @ sy; - corner: sx @ corner y. - nodes at: 3 put: new ] . - (nodes at: 3) add: aNode ] ] - - ifFalse: [ aNode position y < sy ifTrue: [ (nodes at: 2) isNil ifTrue: [ new := RTQuadTree new. - new origin: sx @ origin y; - corner: corner x @ sy. - nodes at: 2 put: new ] . - (nodes at: 2) add: aNode ] - ifFalse: [ (nodes at: 4) isNil ifTrue: [ new := RTQuadTree new. - new origin: sx @ sy; - corner: corner. - nodes at: 4 put: new ] . - (nodes at: 4) add: aNode ] ] -] - -{ #category : #accessing } -RTQuadTree >> charge [ - ^ charge -] - -{ #category : #accessing } -RTQuadTree >> charge: anObject [ - charge := anObject -] - -{ #category : #accessing } -RTQuadTree >> corner [ - ^ corner -] - -{ #category : #accessing } -RTQuadTree >> corner: anObject [ - corner := anObject -] - -{ #category : #accessing } -RTQuadTree >> cx [ - ^ cx -] - -{ #category : #accessing } -RTQuadTree >> cx: aFloat [ - cx := aFloat -] - -{ #category : #accessing } -RTQuadTree >> cy [ - ^ cy -] - -{ #category : #accessing } -RTQuadTree >> cy: aFloat [ - cy := aFloat -] - -{ #category : #'initialize-release' } -RTQuadTree >> initialize [ - - super initialize. - - leaf := true. - nodes := Array new: 4. - -] - -{ #category : #accessing } -RTQuadTree >> leaf [ - ^ leaf -] - -{ #category : #accessing } -RTQuadTree >> node [ - ^ node -] - -{ #category : #accessing } -RTQuadTree >> nodes [ - ^ nodes -] - -{ #category : #accessing } -RTQuadTree >> origin [ - ^ origin -] - -{ #category : #accessing } -RTQuadTree >> origin: anObject [ - origin := anObject -] diff --git a/src/Roassal2/RTQuadTreeTest.class.st b/src/Roassal2/RTQuadTreeTest.class.st deleted file mode 100644 index 870f521c6..000000000 --- a/src/Roassal2/RTQuadTreeTest.class.st +++ /dev/null @@ -1,98 +0,0 @@ -" -A ROQuadTreeTest is xxxxxxxxx. - -Instance Variables - nodes: - quad: - -nodes - - xxxxx - -quad - - xxxxx - -" -Class { - #name : #RTQuadTreeTest, - #superclass : #RTTest, - #instVars : [ - 'nodes', - 'quad' - ], - #category : #'Roassal2-Layouts-Tests' -} - -{ #category : #util } -RTQuadTreeTest >> isTrueLeaf: aQuad [ - - aQuad isNil ifTrue: [ ^ false ]. - - aQuad leaf ifTrue: [ ^ aQuad nodes allSatisfy: [ :e | e isNil ] ] - ifFalse: [ ^ aQuad nodes anySatisfy: [ :e | self isTrueLeaf: e ] ] -] - -{ #category : #running } -RTQuadTreeTest >> setUp [ - super setUp. - nodes := OrderedCollection new. - - (0 to: 10) do: [ :e | nodes add: (RTBox element translateTo: e @ e); - add: (RTBox element translateTo: e @ (10 - e)) ]. - - quad := RTQuadTree withAll: nodes. -] - -{ #category : #tests } -RTQuadTreeTest >> testCreate [ - - | quadrants points | - points := Array with: 0@0 with: 0@5 with: 5@0 with: 5@5. - - nodes := points collect: [ :pos | RTBox element translateTo: pos ]. - quad := RTQuadTree withAll: nodes. - - quadrants := quad nodes. - - self assert: (quadrants at: 1) node position = (0@0). - self assert: (quadrants at: 2) node position = (5@0). - self assert: (quadrants at: 3) node position = (0@5). - self assert: (quadrants at: 4) node position = (5@5) -] - -{ #category : #tests } -RTQuadTreeTest >> testLeaf [ - - self assert: (quad leaf ifTrue: [quad nodes allSatisfy: [ :e | e isNil ] ] - ifFalse: [ quad nodes anySatisfy: [ :e | self isTrueLeaf: e ] ] ) -] - -{ #category : #tests } -RTQuadTreeTest >> testRectangle [ - | points | - points := Array with: 0@5 with: 5@0 with: 10@5 with: 5@5. - nodes := points collect: [ :e | RTBox element translateTo: e ]. - quad := RTQuadTree withAll: nodes. - - self assert: quad origin = (0@0). - self assert: quad corner = (10@10) -] - -{ #category : #tests } -RTQuadTreeTest >> testSquare [ - | points | - points := Array with: 0@5 with: 5@0 with: 10@5 with: 5@5. - nodes := points collect: [ :pos | RTBox element translateTo: pos ]. - quad := RTQuadTree withAll: nodes. - - self assert: quad origin = (0@0). - self assert: quad corner = (10@10) -] - -{ #category : #util } -RTQuadTreeTest >> wellCreated: aQuad [ - - aQuad leaf ifTrue: [ aQuad node isNil ifTrue: [ ^ true ] - ifFalse: [ ^ (Rectangle origin: aQuad origin corner: aQuad corner) contains: aQuad node position ] ] - ifFalse: [ aQuad node isNil ifTrue: [ ^ aQuad nodes allSatisfy: [ :e | self wellCreated: e ] ] - ifFalse: [ ^ ((Rectangle origin: aQuad origin corner: aQuad corner) contains: aQuad node position) & (aQuad nodes allSatisfy: [ :e | self wellCreated: e ]) ] ] -] diff --git a/src/Roassal2/RTRTShorterDistanceAttachPointTest.class.st b/src/Roassal2/RTRTShorterDistanceAttachPointTest.class.st deleted file mode 100644 index 23ad4500d..000000000 --- a/src/Roassal2/RTRTShorterDistanceAttachPointTest.class.st +++ /dev/null @@ -1,44 +0,0 @@ -Class { - #name : #RTRTShorterDistanceAttachPointTest, - #superclass : #RTTest, - #instVars : [ - 'e1', - 'e2', - 'lineShape', - 'edge', - 'view' - ], - #category : #'Roassal2-AttachPoint-Tests' -} - -{ #category : #running } -RTRTShorterDistanceAttachPointTest >> setUp [ - super setUp. - view := RTView new. - e1 := RTBox new extent: 70 @ 30; element. - e2 := RTBox new extent: 70 @ 30; element. - lineShape := RTLine new. - lineShape color: Color blue. - lineShape attachPoint: RTShorterDistanceAttachPoint new. - edge := lineShape edgeFrom: e1 to: e2. - view add: e1; add: e2; add: edge. - e2 @ RTDraggable. - e1 @ RTDraggable. - -] - -{ #category : #tests } -RTRTShorterDistanceAttachPointTest >> testHorizontalTwoElements [ - e2 translateBy: 90 @ 0. - - self assert: (lineShape startingPointOf: edge) equals: 35 @ 0. - self assert: (lineShape endingPointOf: edge) equals: 55 @ 0. -] - -{ #category : #tests } -RTRTShorterDistanceAttachPointTest >> testVerticalTwoElements [ - e2 translateBy: 0 @ 50. - - self assert: (lineShape startingPointOf: edge) equals: 0 @ 15. - self assert: (lineShape endingPointOf: edge) equals: 0 @ 35. -] diff --git a/src/Roassal2/RTRadar.class.st b/src/Roassal2/RTRadar.class.st deleted file mode 100644 index 7a8828af5..000000000 --- a/src/Roassal2/RTRadar.class.st +++ /dev/null @@ -1,76 +0,0 @@ -" -An instance of RTRadar is an element to explore an see in a small portion of the view the same visualization, with small elements. - -Check examples(in RTExperimentalExample) to learn how to use a RTRadar -" -Class { - #name : #RTRadar, - #superclass : #RTBuilder, - #instVars : [ - 'targetView', - 'extent' - ], - #category : #'Roassal2-Experimental' -} - -{ #category : #'instance creation' } -RTRadar class >> on: aView [ - ^ self new onView: aView -] - -{ #category : #public } -RTRadar >> build [ - super build. - view openInWindowSized: extent titled: 'Minimap' -] - -{ #category : #accessing } -RTRadar >> extent: newExtent [ - extent := newExtent. -] - -{ #category : #initialization } -RTRadar >> initialize [ - super initialize. - extent := 250@250. - -] - -{ #category : #accessing } -RTRadar >> onView: aView [ - targetView := aView -] - -{ #category : #hooks } -RTRadar >> renderIn: aView [ - | box box2 lupa sc | - lupa := nil. - sc := 1. - aView addAnimation: (RTNopAnimation new - waitFor: 0.5; repeat; blockToExecute: [ | ext | - sc := view canvas focusOnCenterScaled. - lupa first translateTo: view canvas extent /2. - ext := targetView canvas encompassingRectangle extent. - Transcript crShow: sc. - lupa second translateTo: view canvas extent * - (targetView canvas camera position ) / ext. - lupa updateShape. ] ). - view canvas privateShapes: targetView canvas privateShapes. - box := RTBox new - width: [ view canvas extent x ]; - height: [ view canvas extent y ]; - color: Color transparent. - box2 := RTBox new - width: [ targetView canvas extent x * sc]; - height: [ targetView canvas extent y * sc ]; - color: Color transparent; - borderColor: Color blue. - - lupa := RTGroup new. - lupa add: box element. - lupa add: box2 element. - lupa do: [ :e| view canvas addFixedShape: e trachelShape ]. - - - -] diff --git a/src/Roassal2/RTRadialTreeLayout.class.st b/src/Roassal2/RTRadialTreeLayout.class.st deleted file mode 100644 index 6211163c6..000000000 --- a/src/Roassal2/RTRadialTreeLayout.class.st +++ /dev/null @@ -1,250 +0,0 @@ -" -A RORadialTreeLayout is xxxxxxxxx. - -" -Class { - #name : #RTRadialTreeLayout, - #superclass : #RTAbstractCompactTree, - #category : #'Roassal2-Layouts' -} - -{ #category : #algorithm } -RTRadialTreeLayout >> compareContourOf: aNode with: another [ - "return the number of radians the subtree induced by aNode must be displaced to be separated by a predefined distance (horizontalGap) from the one induced by anotherNode" - - | difference max nodeA nodeB | - nodeB := aNode. "the right one" - nodeA := another. "the left one" - max := aNode = another - ifTrue: [ 0 ] - ifFalse: [ horizontalGap / (self layerOf: nodeB) / 2 - ((self xOf: nodeB) - (self getAbcissaOf: nodeA inSubtreeFromLayer: (self layerOf: aNode) - 1)) ]. - nodeB := self followLeftContour: nodeB toLayer: (self layerOf: nodeB) + 1. - nodeA := self followRightContour: nodeA toLayer: (self layerOf: nodeA) + 1. - [ nodeB isNil not & nodeA isNil not ] - whileTrue: [ - difference := horizontalGap / (self layerOf: nodeA) - - - ((self getAbcissaOf: nodeB inSubtreeFromLayer: (self layerOf: aNode) - 1) - - (self getAbcissaOf: nodeA inSubtreeFromLayer: (self layerOf: aNode) - 1)). - max := max max: difference. - nodeB := self followLeftContour: nodeB toLayer: (self layerOf: nodeB) + 1. - nodeA := self followRightContour: nodeA toLayer: (self layerOf: nodeA) + 1 ]. - ^ max -] - -{ #category : #hook } -RTRadialTreeLayout >> computeGap: aNode [ - " compute the vertical gap needed for drawing the radial tree " - | gap maxAbcissa i abc nodeL nodeR layer | - gap := 0. - maxAbcissa := 0. - layer := 1. - - i := 1. - [ nodeL :=(self followLeftContour: aNode toLayer: i). - nodeR := (self followRightContour: aNode toLayer: i). - nodeL isNil not & nodeR isNil not ] whileTrue: [ abc := (((self getAbcissaOf: nodeR inSubtreeFromLayer: 0) - (self getAbcissaOf: nodeL inSubtreeFromLayer: 0 ) + (horizontalGap / layer/2)) / layer). - (abc > maxAbcissa) ifTrue: [ maxAbcissa := abc. - layer := layer ]. - i := i + 1 ]. - - - gap:= (maxAbcissa / 2 /Float pi ) floor +1. - - ((verticalGap isNil) or: [gap > verticalGap]) ifTrue: [ self verticalGap: gap ] -] - -{ #category : #algorithm } -RTRadialTreeLayout >> computePosition: aNode [ -"compute the position of the given node and of his sons recursively" - - | children neighbor nodeA | - - children :=self childrenFor: aNode. - neighbor := self leftSiblingOf: aNode. - - children isEmpty ifTrue: [ neighbor isNil ifTrue: [ self xOf: aNode put: 0. self modOf: aNode put: 0. ] - - ifFalse: [ self xOf: aNode put: ((self xOf: neighbor) + (horizontalGap /(self layerOf: aNode) /2)). self modOf: aNode put: ((self modOf: neighbor)). - self pointerOf: aNode put: (self followRightContour: neighbor toLayer: ((self layerOf: aNode) + 1)) ] ] - - ifFalse: [ self leftContourOf: aNode put: children first. - self rightContourOf: aNode put: children last. - children do: [:e | self computePosition: e ]. - self xOf: aNode put: ((self xOf: ( self leftContourOf: aNode ) ) + ( self xOf: ( self rightContourOf: aNode ) ) + (self modOf: ( self rightContourOf: aNode ) ) ) / 2. - self modOf: aNode put: 0. - neighbor isNil ifFalse: [ self modOf: aNode put: (self compareContourOf: aNode with: neighbor). - - nodeA := (self followLeftContour: (self fatherOf: aNode) toLayer: (self layerOf: aNode)). - [(self followLeftContour: nodeA toLayer: ((self layerOf: nodeA) + 1)) isNil ] whileFalse: [ nodeA := self followLeftContour: nodeA toLayer: ((self layerOf: nodeA) + 1) ]. - self pointerOf: nodeA put: (self followLeftContour: aNode toLayer: ((self layerOf: nodeA) + 1)). - - nodeA := self followRightContour: aNode toLayer: ((self layerOf: aNode) + 1). - nodeA ifNil: [ ^ self ]. - [(self followRightContour: nodeA toLayer: ((self layerOf: nodeA) + 1)) isNil ] whileFalse: [ nodeA := self followRightContour: nodeA toLayer: ((self layerOf: nodeA) +1) ]. - self pointerOf: nodeA put: (self followRightContour: neighbor toLayer: ((self layerOf: nodeA) + 1) ) ] ]. - -] - -{ #category : #algorithm } -RTRadialTreeLayout >> diameterOf: aNode [ - - |diam| - - (aNode shapes first isKindOf: RTEllipse) ifTrue: [ diam := aNode width max: aNode height ] - ifFalse: [ diam := (aNode width * aNode width + (aNode height * aNode height)) sqrt floor ]. - - ^ diam -] - -{ #category : #hook } -RTRadialTreeLayout >> doExecute: nodeElements [ - - | rootNodes xOffset maximumRadius | - initialLayout isNil - ifFalse: [ initialLayout new executeOnElements: nodeElements ]. - rootNodes := self rootNodesFor: nodeElements. - rootNodes - do: [ :e | self initialize: e whoseFatherIs: nil ]; - do: [ :e | self computePosition: e. self step]; - do: [ :e | self computeGap: e ]; - do: [ :e | self toRadialTree: e withMod: 0 ]. - xOffset := 0. - rootNodes - do: [ :e | - maximumRadius := self radialDraw: e. - "Shifting all the subgroups" - self shiftTree: e by: (maximumRadius+xOffset)@maximumRadius. - xOffset := xOffset + (2 * maximumRadius) + 10. ]. - - -] - -{ #category : #private } -RTRadialTreeLayout >> gap [ - - ^ self verticalGap -] - -{ #category : #algorithm } -RTRadialTreeLayout >> halfDiameterOf: aNode [ - - |diam| - - (aNode shapes first isKindOf: RTEllipse) ifTrue: [ diam := aNode width max: aNode height ] - ifFalse: [ diam := (aNode width * aNode width + (aNode height * aNode height)) sqrt floor ]. - - ^ diam / 2 -] - -{ #category : #private } -RTRadialTreeLayout >> layoutLayer: aCollection radius: oldRadius from: aFromAngle to: aToAngle [ - - | delta childRadius maximumRadius myRadius fromAngle toAngle | - "Initialize with default value" - maximumRadius := oldRadius. - aCollection isEmpty - ifFalse: - [myRadius := oldRadius + self gap + (self maximumRadius: aCollection). - childRadius := oldRadius + self gap + (self maximumDiameter: aCollection). "This is a purely optical tweak" - (aCollection size = 1 and: [aToAngle - aFromAngle = (2 * Float pi)]) - ifTrue: - [delta := 0.4 * Float pi. - fromAngle := 0.8 * Float pi. - toAngle := fromAngle + delta] - ifFalse: - [delta := (aToAngle - aFromAngle) / aCollection size. - fromAngle := aFromAngle. - toAngle := aFromAngle + delta]. - aCollection - do: - [:child | - translator translateTopLeftOf: child to: (Point - r: myRadius - theta: toAngle - (delta / 2.0)). - "child - translateTo: - (Point - radius: myRadius - theta: toAngle - (delta / 2.0))." - maximumRadius := maximumRadius - max: - (self - layoutLayer: (self childrenFor: child) - radius: childRadius - from: fromAngle - to: toAngle). - fromAngle := toAngle. - toAngle := toAngle + delta]]. - ^maximumRadius -] - -{ #category : #private } -RTRadialTreeLayout >> moveAllElementsToTopLeft: elements [ - - | pos min | - pos := elements collect: #position. - min := pos inject: 0 @ 0 into: [ :minimum :p | minimum min: p ]. - elements do: [ :e | e translateBy: min negated ] -] - -{ #category : #algorithm } -RTRadialTreeLayout >> nodeAbcissaWithNeighbor: aNode [ - - ^ aNode x + (horizontalGap / aNode layer /2) + ((self halfDiameterOf: aNode) / aNode layer) -] - -{ #category : #algorithm } -RTRadialTreeLayout >> radialDraw: aNode [ - "draw the subtree induced by the given node" - - | children r max | - r := (self rOf: aNode). - translator translateTopLeftOf: aNode to: (Point r: r theta: (self thetaOf: aNode)). - "aNode translateTo: (Point radius: (aNode r) theta: (aNode theta))." - children := self childrenFor: aNode. - max := 0. - children do: [ :e | max := max max: (self radialDraw: e) ]. - ^ r + max. -] - -{ #category : #hook } -RTRadialTreeLayout >> rotateSubtreeFrom: aNode by: aFloat [ - - aNode theta: aNode theta + aFloat. - - (self childrenFor: aNode) do: [ :e | self rotateSubtreeFrom: e by: aFloat ] -] - -{ #category : #hook } -RTRadialTreeLayout >> spreadNodes: nodeElements around: aNode [ - - |nodeL nodeR i angle beta lay1 | - - i := 1. - angle := 0. - - [ nodeL :=(self followLeftContour: aNode toLayer: i). - nodeR := (self followRightContour: aNode toLayer: i). - nodeL isNil not & nodeR isNil not ] whileTrue: [ angle := angle max: ((nodeR theta - nodeL theta) + ((self halfDiameterOf: nodeR) + (self halfDiameterOf: nodeL) + horizontalGap /i /verticalGap )). - i := i+1. ]. - - lay1 := nodeElements select: [ :e | e layer = 1 ]. - - beta := Float pi * 2 - angle / lay1 size. - - lay1 do: [ :e | self rotateSubtreeFrom: e by: (lay1 indexOf: e) - 1 * beta ]. -] - -{ #category : #algorithm } -RTRadialTreeLayout >> toRadialTree: aNode withMod: aFloat [ - "compute polar coordinates of the subtree induced by anode from its cartesian coordinates " - | children | - self rOf: aNode put: ((self layerOf: aNode) * verticalGap ). - ((self rOf: aNode) = 0) ifTrue: [ self thetaOf: aNode put: 0 ] - ifFalse: [ self thetaOf: aNode put: ((self xOf: aNode) + aFloat + (self modOf: aNode)) / verticalGap ]. - - children := self childrenFor: aNode. - - children do: [ :e | self toRadialTree: e withMod: ( (self modOf: aNode) + aFloat) ] -] diff --git a/src/Roassal2/RTRadialTreeLayoutTest.class.st b/src/Roassal2/RTRadialTreeLayoutTest.class.st deleted file mode 100644 index 991bcbe98..000000000 --- a/src/Roassal2/RTRadialTreeLayoutTest.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #RTRadialTreeLayoutTest, - #superclass : #RTTest, - #category : #'Roassal2-Layouts-Tests' -} - -{ #category : #tests } -RTRadialTreeLayoutTest >> testEmptyLayout [ - - RTRadialTreeLayout on: #() -] - -{ #category : #tests } -RTRadialTreeLayoutTest >> testOnGraph [ - "Should not raise an exception" - | b edges | - b := RTMondrian new. - b nodes: (0 to: 20). - edges := b edges - moveBehind; - connectFromAll: [ :v | Array with: v // 2 with: v // 3 ]. - b layout radialTree. - "b layout force." - b build -] diff --git a/src/Roassal2/RTRangeBelowXAxis.class.st b/src/Roassal2/RTRangeBelowXAxis.class.st deleted file mode 100644 index f3bddc241..000000000 --- a/src/Roassal2/RTRangeBelowXAxis.class.st +++ /dev/null @@ -1,109 +0,0 @@ -" -Enable one to define a range of values. For example: - --=-=-=-= -b := RTGrapher new. -d := RTData new. -d points: (1 to: 5). -d y: #yourself. -b add: d. -b addDecorator: (RTRangeBelowXAxis new startValue: 2.5; endValue: 4; label: 'A'). -b addDecorator: (RTRangeBelowXAxis new startValue: 0; endValue: 2; label: 'B'). -b --=-=-=-= -" -Class { - #name : #RTRangeBelowXAxis, - #superclass : #RTAbstractGrapherDecorator, - #instVars : [ - 'label', - 'startValue', - 'endValue', - 'markerColor', - 'distanceInPixelsFromAxis' - ], - #category : #'Roassal2-Builder-Grapher-Decorators' -} - -{ #category : #'default configuration' } -RTRangeBelowXAxis >> defaultMarkerColor [ - ^ Color black -] - -{ #category : #'default configuration' } -RTRangeBelowXAxis >> defaultSizeInPixelsFromAxis [ - ^ -50 -] - -{ #category : #accessing } -RTRangeBelowXAxis >> endValue [ - ^ endValue -] - -{ #category : #accessing } -RTRangeBelowXAxis >> endValue: aNumericalValue [ - endValue := aNumericalValue -] - -{ #category : #initialization } -RTRangeBelowXAxis >> initialize [ - super initialize. - self markerColor: self defaultMarkerColor. - self startValue: 0. - self endValue: 1. - distanceInPixelsFromAxis := self defaultSizeInPixelsFromAxis -] - -{ #category : #accessing } -RTRangeBelowXAxis >> label [ - ^ label -] - -{ #category : #accessing } -RTRangeBelowXAxis >> label: aString [ - label := aString -] - -{ #category : #accessing } -RTRangeBelowXAxis >> markerColor [ - ^ markerColor -] - -{ #category : #accessing } -RTRangeBelowXAxis >> markerColor: aColor [ - markerColor := aColor -] - -{ #category : #hooks } -RTRangeBelowXAxis >> render [ - | fromPosition toPosition e1 e2 l lineShape tickShape | - fromPosition := builder getPixelPositionOf: startValue @ 0. - toPosition := builder getPixelPositionOf: endValue @ 0. - fromPosition := fromPosition - (0 @ distanceInPixelsFromAxis). - toPosition := toPosition - (0 @ distanceInPixelsFromAxis). - - tickShape := RTBox new height: 10; width: 1; color: self markerColor. - e1 := tickShape element. - e2 := tickShape element. - e1 translateTo: fromPosition. - e2 translateTo: toPosition. - - lineShape := RTLine new. - lineShape color: markerColor. - l := lineShape edgeFrom: e2 to: e1. - - label := RTLabel new color: markerColor; elementOn: label. - TRConstraint move: label between: e1 and: e2. - TRConstraint move: label above: l. - builder view add: e1; add: e2; add: l; add: label -] - -{ #category : #accessing } -RTRangeBelowXAxis >> startValue [ - ^ startValue -] - -{ #category : #accessing } -RTRangeBelowXAxis >> startValue: aNumericalValue [ - startValue := aNumericalValue -] diff --git a/src/Roassal2/RTRangeBelowXAxisTest.class.st b/src/Roassal2/RTRangeBelowXAxisTest.class.st deleted file mode 100644 index 1355b6b21..000000000 --- a/src/Roassal2/RTRangeBelowXAxisTest.class.st +++ /dev/null @@ -1,32 +0,0 @@ -" -A RTRangeBelowXAxisTest is a test class for testing the behavior of RTRangeBelowXAxis -" -Class { - #name : #RTRangeBelowXAxisTest, - #superclass : #RTTest, - #category : #'Roassal2-Builder-Grapher-Decorators-Tests' -} - -{ #category : #tests } -RTRangeBelowXAxisTest >> testBasic [ - - | r | - r := RTRangeBelowXAxis new. - self assert: r startValue equals: 0. - self assert: r endValue equals: 1. - self assert: r markerColor equals: r defaultMarkerColor. -] - -{ #category : #tests } -RTRangeBelowXAxisTest >> testSimpleExample [ - - | b d | - b := RTGrapher new. - d := RTData new. - d points: (1 to: 5). - d y: #yourself. - b add: d. - b addDecorator: (RTRangeBelowXAxis new startValue: 2.5; endValue: 4; label: 'A'). - b addDecorator: (RTRangeBelowXAxis new startValue: 0; endValue: 2; label: 'B'). - b build. -] diff --git a/src/Roassal2/RTRangeSelector.class.st b/src/Roassal2/RTRangeSelector.class.st deleted file mode 100644 index b7df0732d..000000000 --- a/src/Roassal2/RTRangeSelector.class.st +++ /dev/null @@ -1,122 +0,0 @@ -" -A range along the X-Axis is selectable. - --=-=-=-=-= -g := RTGrapher new. -g view: RTView new. -ds := RTData new. -ds points: RTShape withAllSubclasses. -ds y: [ :cls | cls numberOfMethods - 50 ]. -ds x: [ :cls | cls numberOfLinesOfCode - 150 ]. -g add: ds. - -g addDecorator: (RTRangeSelector new callback: [:es | es inspect ]). -""RTGrapherSelectRangeViewContext onGrapher: g."" -g --=-=-=--=-= - -Another example: --=-=-=--=-= -v := RTView new. -b := [ :someClasses | - g := RTGrapher new. - g view: v. - ds := RTData new. - ds points: someClasses. - ds y: [ :cls | cls numberOfMethods ]. - ds x: [ :cls | cls numberOfLinesOfCode ]. - g add: ds. - - g addDecorator: (RTRangeSelector new callback: [:es | - | classesToZoomIn | - classesToZoomIn := es collect: #model. - v cleanAll. - b value: classesToZoomIn - ]). - g build. -]. - -b value: RTShape withAllSubclasses. -v --=-=-=--=-= -" -Class { - #name : #RTRangeSelector, - #superclass : #RTAbstractGrapherDecorator, - #instVars : [ - 'visualRange', - 'rectangle', - 'pointWhenStartingDragging', - 'callback' - ], - #category : #'Roassal2-Builder-Grapher-Decorators' -} - -{ #category : #accessing } -RTRangeSelector >> callback [ - "Return the block used as a callback when elements are selected" - ^ callback -] - -{ #category : #accessing } -RTRangeSelector >> callback: aOneArgBlock [ - "The argument is evaluated with the selected Roassal elements" - callback := aOneArgBlock -] - -{ #category : #callback } -RTRangeSelector >> callbackWithSelectedElements [ - | selectedElements | - selectedElements := self elementsWithinTheSelection. - selectedElements ifEmpty: [ ^ self ]. - self evaluateCallBackWithElements: selectedElements -] - -{ #category : #'accessing - computed' } -RTRangeSelector >> elementsWithinTheSelection [ - ^ self elementsWithModel - select: [ :e | rectangle containsPoint: e position ] -] - -{ #category : #callback } -RTRangeSelector >> evaluateCallBackWithElements: selectedElements [ - callback value: selectedElements -] - -{ #category : #initialization } -RTRangeSelector >> initialize [ - super initialize. - self callback: [ :listOfSelectedElements | "No nothing here" ] -] - -{ #category : #hooks } -RTRangeSelector >> render [ - self view - when: TRMouseDragStart - do: [ :evt | - | x | - x := evt positionFromCamera x. - pointWhenStartingDragging := x @ builder extent y negated. - rectangle := pointWhenStartingDragging corner: x @ 0. - visualRange := TRBoxShape new - fromRectangle: rectangle - color: Color blue trans. - self view canvas addShape: visualRange. - self signalUpdate ]. - self view - when: TRMouseDragging - do: [ :evt | - rectangle := Rectangle - encompassing: - (Array - with: pointWhenStartingDragging - with: evt positionFromCamera x @ 0). - visualRange fromRectangle: rectangle. - self signalUpdate ]. - self view - when: TRMouseDragEnd - do: [ :evt | - self callbackWithSelectedElements. - visualRange remove. - self signalUpdate ] -] diff --git a/src/Roassal2/RTRectangleAttachPoint.class.st b/src/Roassal2/RTRectangleAttachPoint.class.st deleted file mode 100644 index 3388148a4..000000000 --- a/src/Roassal2/RTRectangleAttachPoint.class.st +++ /dev/null @@ -1,54 +0,0 @@ -" -Continuous attach point which presumes both shapes are not rotated rectangles - --=-=-= -v := RTView new. - -e1 := (RTBox new size: 50) elementOn: 1. -e2 := (RTEllipse new size: 50) elementOn: 2. -v add: e1; add: e2. -e2 translateBy: 30 @ 60. - -e1 @ RTDraggable. -e2 @ RTDraggable. - -s := RTArrowedLine new color: Color black. -s attachPoint: RTRectangleAttachPoint new. -l := s edgeFrom: e1 to: e2. -v add: l. - -v --=-=-= -" -Class { - #name : #RTRectangleAttachPoint, - #superclass : #RTContinuousAttachPoint, - #category : #'Roassal2-AttachPoint' -} - -{ #category : #private } -RTRectangleAttachPoint >> attachPointFor: anEdge from: fromRect to: toRect [ - | intersections offsetShift fromPoint toPoint | - offsetShift := self offsetNormalFor: anEdge. - fromPoint := fromRect center + offsetShift. - toPoint := toRect center + offsetShift. - fromRect = toRect - ifTrue: [ ^ fromRect topLeft ]. - (fromRect containsRect: toRect) - ifTrue: [ ^ fromRect pointNearestTo: toPoint ]. - (toRect containsRect: fromRect) - ifTrue: [ ^ fromRect pointNearestTo: (toRect pointNearestTo: fromPoint) ]. - intersections := (RTLineSegment from: fromPoint to: toPoint) intersectRectangle: fromRect. - intersections ifEmpty: [ ^ fromRect pointNearestTo: toPoint ]. - ^ intersections detectMin: [ :each | each r ] -] - -{ #category : #'public - hooks' } -RTRectangleAttachPoint >> basicEndingPointOf: anEdge [ - ^ self attachPointFor: anEdge from: anEdge to encompassingRectangle to: anEdge from encompassingRectangle -] - -{ #category : #'public - hooks' } -RTRectangleAttachPoint >> basicStartingPointOf: anEdge [ - ^ self attachPointFor: anEdge from: anEdge from encompassingRectangle to: anEdge to encompassingRectangle -] diff --git a/src/Roassal2/RTRectangleAttachPointTest.class.st b/src/Roassal2/RTRectangleAttachPointTest.class.st deleted file mode 100644 index dce9f14eb..000000000 --- a/src/Roassal2/RTRectangleAttachPointTest.class.st +++ /dev/null @@ -1,52 +0,0 @@ -" -A RTRectangleAttachPointTest is a test class for testing the behavior of RTRectangleAttachPoint -" -Class { - #name : #RTRectangleAttachPointTest, - #superclass : #RTTest, - #instVars : [ - 'el', - 'elX', - 'elD', - 'edgeX', - 'edgeD' - ], - #category : #'Roassal2-AttachPoint-Tests' -} - -{ #category : #running } -RTRectangleAttachPointTest >> setUp [ - super setUp. - "| shape | - true ifTrue: [ ^ self skip ]. - shape := RTBox new size: 20. - (el := shape element) translateTo: 0 @ 0. - (elX := shape element) translateTo: 100 @ 0. - (elD := shape element) translateTo: -100 @ -100. - edgeX := RTLine new - attachPoint: RTRectangleAttachPoint new; - edgeFrom: el to: elX. - edgeD := RTLine new - attachPoint: RTRectangleAttachPoint new; - edgeFrom: el to: elD" -] - -{ #category : #tests } -RTRectangleAttachPointTest >> testInside [ - "| ap | - el extent: 2000 @ 2000. - self assert: (edgeX shape startingPointOf: edgeX) = (1000 @ 0). - self assert: (edgeX shape endingPointOf: edgeX) = (110 @ 0). - ap := edgeD shape startingPointOf: edgeD. - self assert: -1000 @ -100 = ap | (-100 @ -1000 = ap). - ap := edgeD shape endingPointOf: edgeD. - self assert: -110 @ -100 = ap | (-100 @ -110 = ap)" -] - -{ #category : #tests } -RTRectangleAttachPointTest >> testNoCollision [ - "self assert: (edgeX shape startingPointOf: edgeX) = (10 @ 0). - self assert: (edgeX shape endingPointOf: edgeX) = (90 @ 0). - self assert: (edgeD shape startingPointOf: edgeD) = (-10 @ -10). - self assert: (edgeD shape endingPointOf: edgeD) = (-90 @ -90)" -] diff --git a/src/Roassal2/RTRectanglePackLayout.class.st b/src/Roassal2/RTRectanglePackLayout.class.st deleted file mode 100644 index 9cbc22f8c..000000000 --- a/src/Roassal2/RTRectanglePackLayout.class.st +++ /dev/null @@ -1,149 +0,0 @@ -" -A layout that packs rectangles in as amall space as possible (at least it tries to) - -Instance Variables - padding: - freeSpace: - bounds: - -gap - - gap between elements defined as ""percentage"" of average size. 0.2 means 20% - -freeSpace - - collection of spaces that can be used for next element insertion - -bounds - - bounding box of all currently processed elements - -" -Class { - #name : #RTRectanglePackLayout, - #superclass : #RTLayout, - #instVars : [ - 'freeSpace', - 'gap', - 'padding', - 'bounds' - ], - #category : #'Roassal2-Layouts' -} - -{ #category : #'space-calculation' } -RTRectanglePackLayout >> bestSpaceFor: anElement [ - | elementsPadedBox suitableSpaces | - - elementsPadedBox := anElement encompassingRectangle extendBy: padding * 2. - - suitableSpaces := freeSpace select: [ :space | - elementsPadedBox width <= space width and: - [ elementsPadedBox height <= space height ] ]. - - ^ suitableSpaces - fold: [ :best :current | - | bestExt currentExt | - ((currentExt := self extentByInserting: elementsPadedBox into: current) < - (bestExt := self extentByInserting: elementsPadedBox into: best) or: [ - currentExt = bestExt and: [ - current halfPerimeter < best halfPerimeter ] ]) - ifTrue: [ current ] - ifFalse: [ best ] ] -] - -{ #category : #accessing } -RTRectanglePackLayout >> boundingBox [ - ^ bounds -] - -{ #category : #hook } -RTRectanglePackLayout >> doExecute: elements [ - | sortedElements maxSpace | - bounds := 0@0. - - maxSpace := elements inject: 0@0 into: [ :sum :el | - sum + el extent ]. - - padding := maxSpace / elements size * gap / 2. - - maxSpace := 1 + gap * maxSpace. - - freeSpace := Set new. - freeSpace add: (0@0 corner: maxSpace). - - sortedElements := SortedCollection sortBlock: [ :larger :smaller | - larger encompassingRectangle halfPerimeter > - smaller encompassingRectangle halfPerimeter ]. - sortedElements addAll: elements. - - sortedElements size <= 2 ifTrue: [ - RTHorizontalLineLayout on: sortedElements. - ^ self - ]. - sortedElements - do: [ :element | self packIn: element ] - displayingProgress: 'Laying out elements' -] - -{ #category : #'space-calculation' } -RTRectanglePackLayout >> extentByInserting: aRectangle into: aSpace [ - | futureCorner | - futureCorner := aSpace origin + aRectangle extent. - - ^ (((futureCorner x - bounds x) max: 0) + - ((futureCorner y - bounds y) max: 0)) - * "this is balancing magic" - (((futureCorner max: bounds) degrees - 45) abs / 45 + 1) - -] - -{ #category : #accessing } -RTRectanglePackLayout >> gap [ - "gap between elements defined as ''percentage'' of average size. 0.2 means 20%" - ^ gap -] - -{ #category : #accessing } -RTRectanglePackLayout >> gap: anObject [ - gap := anObject -] - -{ #category : #'initialize-release' } -RTRectanglePackLayout >> initialize [ - super initialize. - gap := 0.2 -] - -{ #category : #execution } -RTRectanglePackLayout >> packIn: anElement [ - translator translateTopLeftOf: anElement to: (self bestSpaceFor: anElement) origin + padding. - bounds := bounds max: anElement encompassingRectangle bottomRight + padding. - - self recalculateFreeSpacesWith: anElement -] - -{ #category : #deprecated } -RTRectanglePackLayout >> padding [ - self deprecated: 'Use gap instead'. - ^ self gap -] - -{ #category : #deprecated } -RTRectanglePackLayout >> padding: anObject [ - self deprecated: 'Use gap: instead'. - self gap: anObject -] - -{ #category : #'space-calculation' } -RTRectanglePackLayout >> recalculateFreeSpacesWith: anElement [ - freeSpace := freeSpace inject: Set new into: [ :set :space | - set - addAll: (space areasOverlapingOutside: - (anElement encompassingRectangle expandBy: padding)); - yourself ]. - - "remove subspaces" - freeSpace := freeSpace reject: [ :subspace | - freeSpace anySatisfy: [ :space | - space ~~ subspace and: [ - space containsRect: subspace ] ] ] - -] diff --git a/src/Roassal2/RTRectanglePackaLayouTest.class.st b/src/Roassal2/RTRectanglePackaLayouTest.class.st deleted file mode 100644 index f4cf2b3d2..000000000 --- a/src/Roassal2/RTRectanglePackaLayouTest.class.st +++ /dev/null @@ -1,52 +0,0 @@ -Class { - #name : #RTRectanglePackaLayouTest, - #superclass : #RTTest, - #category : #'Roassal2-Layouts-Tests' -} - -{ #category : #tests } -RTRectanglePackaLayouTest >> testBasic [ - - | v es block | - v := RTView new. - es := RTBox new size: 5; elementsOn: (1 to: 3). - RTRectanglePackLayout on: es. - - v addAll: es. - "for vw Set positions are diferent" - block := [:p | Array with: p x with: p y]. - self assert: ((es collect: #position) flatCollect: block as: SortedCollection) equals: #(3.0 3.0 3.0 3.0 9.0 9.0) asSortedCollection -] - -{ #category : #tests } -RTRectanglePackaLayouTest >> testBasic02 [ - - | v es | - v := RTView new. - es := RTBox new size: [ :n | n * 10 ]; elementsOn: (1 to: 3). - RTRectanglePackLayout on: es. - v addAll: es. - self assert: ((es collect: #position) flatCollect: [:p | Array with: p x with: p y ] as: SortedCollection) equals: #(31.0 41.0 12.0 46.0 17.0 17.0) asSortedCollection. -] - -{ #category : #tests } -RTRectanglePackaLayouTest >> testBasic03WithOnlyTwoElements [ - - | v es | - v := RTView new. - es := RTBox new size: [ :n | n * 10 ]; elementsOn: (1 to: 2). - RTRectanglePackLayout on: es. - v addAll: es. - self assert: (es collect: #position) asArray equals: ((Array new: 2) at: 1 put: ((35@5)); at: 2 put: ((10@10)); yourself) -] - -{ #category : #tests } -RTRectanglePackaLayouTest >> testBasic04WithOnlyOneElement [ - - | v es | - v := RTView new. - es := RTBox new size: [ :n | n * 10 ]; elementsOn: (1 to: 1). - RTRectanglePackLayout on: es. - v addAll: es. - self assert: (es collect: #position) asArray equals: ((Array new: 1) at: 1 put: ((5@5)); yourself) -] diff --git a/src/Roassal2/RTRectangleTreeMap.class.st b/src/Roassal2/RTRectangleTreeMap.class.st deleted file mode 100644 index fb0d9f462..000000000 --- a/src/Roassal2/RTRectangleTreeMap.class.st +++ /dev/null @@ -1,132 +0,0 @@ -" -I am a utility class to hepl th layout process in RTTreeMapBuilder -" -Class { - #name : #RTRectangleTreeMap, - #superclass : #Rectangle, - #instVars : [ - 'currentSubrectangle', - 'subrectangles', - 'inset' - ], - #category : #'Roassal2-Builder-TreeMap' -} - -{ #category : #'instance initialization' } -RTRectangleTreeMap class >> fromContainerBounds: aRectangle withInset: anInteger [ - | treeRectangle relativeOrigin relativeCorner | - treeRectangle := self new. - treeRectangle inset: anInteger. - relativeOrigin := aRectangle origin-(aRectangle extent/2). - relativeCorner := aRectangle corner- (aRectangle extent /2). - ((aRectangle width < (anInteger * 2)) or: [ aRectangle height < (anInteger * 2) ]) - ifTrue: [ treeRectangle origin: relativeOrigin; corner: relativeCorner.] - ifFalse: [ - treeRectangle origin: relativeOrigin +anInteger; - corner: relativeCorner -anInteger ]. - ^ treeRectangle -] - -{ #category : #accesing } -RTRectangleTreeMap >> addSubrectangle: aTreeRectangle [ - self subrectangles add: aTreeRectangle. - self currentSubrectangle: aTreeRectangle. -] - -{ #category : #utils } -RTRectangleTreeMap >> computeHorizontalRemainingSubrectangleFrom: row [ - - | areaToLayout remainingSubrectangle currentRect currentOrigin | - - areaToLayout := row inject: 0 into: [ :s :e | s + (e attributes at: #area) ]. - - remainingSubrectangle := RTRectangleTreeMap new. - - currentRect := self currentSubrectangle. - currentOrigin := currentRect origin. - - remainingSubrectangle origin: ((currentOrigin x + (areaToLayout / currentRect height)) @ currentOrigin y). - remainingSubrectangle corner: currentRect corner. - - ^ remainingSubrectangle. - -] - -{ #category : #utils } -RTRectangleTreeMap >> computeRemainingSubrectangleFrom: row [ - (self currentSubrectangle isHorizontal) - ifTrue: [^ self computeHorizontalRemainingSubrectangleFrom: row ] - ifFalse: [ ^ self computeVerticalRemainingSubrectangleFrom: row ] -] - -{ #category : #utils } -RTRectangleTreeMap >> computeVerticalRemainingSubrectangleFrom: row [ - - | areaToLayout remainingSubrectangle currentRect currentOrigin | - - areaToLayout := row inject: 0 into: [ :s :e | s + (e attributes at: #area) ]. - - remainingSubrectangle := RTRectangleTreeMap new. - - currentRect := self currentSubrectangle. - currentOrigin := currentRect origin. - - remainingSubrectangle origin: ((currentOrigin x) @ ((currentOrigin y) + (areaToLayout / currentRect width))). - remainingSubrectangle corner: currentRect corner. - - ^ remainingSubrectangle. - -] - -{ #category : #accesing } -RTRectangleTreeMap >> corner: anObject [ - corner := anObject. -] - -{ #category : #accesing } -RTRectangleTreeMap >> currentSubrectangle [ - ^ currentSubrectangle ifNil: [ currentSubrectangle := self ] -] - -{ #category : #accesing } -RTRectangleTreeMap >> currentSubrectangle: anObject [ - currentSubrectangle := anObject -] - -{ #category : #initialization } -RTRectangleTreeMap >> initialize [ - super initialize. - inset := 0. -] - -{ #category : #accesing } -RTRectangleTreeMap >> inset [ - ^ inset -] - -{ #category : #accesing } -RTRectangleTreeMap >> inset: anObject [ - inset := anObject -] - -{ #category : #testing } -RTRectangleTreeMap >> isHorizontal [ - - ^ (self width >= self height) -] - -{ #category : #accesing } -RTRectangleTreeMap >> origin: anObject [ - origin := anObject -] - -{ #category : #utils } -RTRectangleTreeMap >> shortestSide [ - - ^ self width min: self height -] - -{ #category : #accesing } -RTRectangleTreeMap >> subrectangles [ - ^ subrectangles ifNil: [subrectangles := OrderedCollection new]. -] diff --git a/src/Roassal2/RTResetAllShape.class.st b/src/Roassal2/RTResetAllShape.class.st deleted file mode 100644 index 0d0090199..000000000 --- a/src/Roassal2/RTResetAllShape.class.st +++ /dev/null @@ -1,46 +0,0 @@ -" -RTResetAllShape is an animation (in the Roassal sense) that reset all the trachel shapes in the canvas. -" -Class { - #name : #RTResetAllShape, - #superclass : #RTObject, - #instVars : [ - 'trCanvas' - ], - #category : #'Roassal2-Interactions' -} - -{ #category : #accessing } -RTResetAllShape >> addedIn: aTRCanvas [ - self trCanvas: aTRCanvas -] - -{ #category : #testing } -RTResetAllShape >> hasCompleted [ - ^ false -] - -{ #category : #refreshing } -RTResetAllShape >> refresh [ - self resetShapes -] - -{ #category : #action } -RTResetAllShape >> resetShapes [ - trCanvas shapes do: #resetPath -] - -{ #category : #accessing } -RTResetAllShape >> start [ - self resetShapes -] - -{ #category : #accessing } -RTResetAllShape >> trCanvas [ - ^ trCanvas -] - -{ #category : #accessing } -RTResetAllShape >> trCanvas: anObject [ - trCanvas := anObject -] diff --git a/src/Roassal2/RTResizable.class.st b/src/Roassal2/RTResizable.class.st deleted file mode 100644 index f8e0c1026..000000000 --- a/src/Roassal2/RTResizable.class.st +++ /dev/null @@ -1,294 +0,0 @@ -" -I provide element resizing in all eight directions. - -Resizing handles are displayed after clicking on an associated element, and are automatically removed when clicked on a view or another element. - -!! Assumptions - -You must provide this class with aView instance or the initialized element must be already added to the view. - -!! Collaborators - -RTResizableRectangle -RTResizeCanceled - -!! Example - -see my class side - -" -Class { - #name : #RTResizable, - #superclass : #RTInteraction, - #instVars : [ - 'element', - 'handles', - 'enabled', - 'view', - 'minSize' - ], - #category : #'Roassal2-Interactions-Resize' -} - -{ #category : #example } -RTResizable class >> example [ - | v g el edge | - v := RTView new. - g := RTGroup new - add: (RTBox new - size: 100; - borderColor: Color black; - borderWidth: 1; - element); - add: (RTRoundedBox new - size: 50; - borderRadius: 20; - borderColor: Color black; - borderWidth: 1; - element); - add: (RTEllipse new - width: 100; - height: 30; - borderColor: Color black; - element); - yourself. - - el := RTBox new - size: 50; - color: Color black; - element. - - edge := RTLine new - color: Color black; - attachPoint: RTBorderAttachPoint new; - edgeFrom: g first to: el. - - v addAll: g. - v - add: el; - add: edge. - - "add empty event to prevent event propagation to the view (and thus test event overseer)" - el when: TRMouseLeftClick do: [ :evt | ]. - edge when: TRMouseLeftClick do: [ :evt | ]. - - RTGridLayout new - gapSize: 50; - on: v elements. - - v elements @ RTDraggable. - g @ RTResizable. - - v @ RTZoomableView. - - ^ v -] - -{ #category : #hooks } -RTResizable >> addCursorEventsOn: anElement corner: aCorner [ - anElement when: TRMouseLeave do: [ :evt | TRPlatform current showTemporaryCursor: nil ]. - anElement when: TRMouseEnter do: [ :evt | TRPlatform current showTemporaryCursor: (self cursorForCorner: aCorner) ] -] - -{ #category : #hooks } -RTResizable >> attachHandle: aHandle toCorner: aCorner [ - "Make sure constraint is setup BEFORE resize callback is attached, otherwise it triggers very expensive resize updates." - - (RTConstraint on: aHandle background: element) - perform: aCorner; - border; - stick. - aHandle - addCallback: - (TRTranslationCallback - block: [ :shape :step | self callbackFor: aHandle corner: aCorner ]). - self addCursorEventsOn: aHandle corner: aCorner -] - -{ #category : #hooks } -RTResizable >> basicCallbackFor: aHandle corner: aCorner [ - | newExtent oppositeCornerPosition distance oppositeCorner oldExtent | - oldExtent := element extent. - "An absolute distance the handle has moved from it's assigned corner." - distance := aHandle position - - ((RTResizableRectangle cornerDirectionFor: aCorner) abs * (element encompassingRectangle perform: aCorner)). - "Resizing with RTElement>>extent: changes the element in all directions, so we have to move it back in the opposite direction of the movement. (So when resizing by topRight corner, then bottomLeft should be fixed in place." - distance := self negate: distance forCorner: aCorner. - newExtent := element extent + distance max: (self minSizeFor: element). - oppositeCorner := RTResizableRectangle oppositeCornerFor: aCorner. - oppositeCornerPosition := element encompassingRectangle perform: oppositeCorner. - element trachelShape - doWithoutCallbacks: [ - element trachelShape extent: newExtent. - element shape extent: newExtent. - self translateCorner: oppositeCorner of: element to: oppositeCornerPosition ]. - "This is to trigger repositioning of subelements etc." - element trachelShape triggerCallbacksForNewExtent: newExtent oldExtent: oldExtent. - element trachelShape triggerCallbacksForStep: 0 -] - -{ #category : #hooks } -RTResizable >> callbackFor: aHandle corner: aCorner [ - "The resize is disabled during it's operation to prevent dependent repositioning between the element and its handles." - - self enabled - ifFalse: [ ^ self ]. - self disable. - self basicCallbackFor: aHandle corner: aCorner. - self enable -] - -{ #category : #hooks } -RTResizable >> connectAllHandles [ - handles - withIndexDo: [ :each :i | - | to | - to := handles at: i % handles size + 1. - element view - add: - (RTLine new - color: ((Color gray) alpha: 0.5); - edgeFrom: each to: to) ] -] - -{ #category : #hooks } -RTResizable >> connectWithView: aView [ - (aView hasAttribute: self className) - ifFalse: [ self setupView: aView ]. - - aView - when: TRResizeCanceled - do: [ :event | - event shape = element trachelShape - ifFalse: [ self removeHandles ] ] -] - -{ #category : #'instance creation' } -RTResizable >> createHandle [ - | handle | - handle := RTBox new - size: 6; - color: Color black; - element. - handle @ RTDraggable. - ^ handle -] - -{ #category : #accessing } -RTResizable >> cursorForCorner: aCorner [ - ^ Cursor perform: ('resize' , aCorner capitalized) asSymbol -] - -{ #category : #accessing } -RTResizable >> disable [ - ^ enabled := false -] - -{ #category : #accessing } -RTResizable >> enable [ - enabled := true -] - -{ #category : #accessing } -RTResizable >> enabled [ - ^ enabled -] - -{ #category : #initialization } -RTResizable >> initialize [ - super initialize. - handles := #(). - enabled := false. - self minSize: 20 @ 20 -] - -{ #category : #initialization } -RTResizable >> initializeElement: anElement [ - "postpone initialization if the element is not yet added to the view" - anElement view - ifNil: [ anElement addCallback: (TRAddedCallback block: [ :evt | self lazyInitializeElement: anElement ]) ] - ifNotNil: [ self lazyInitializeElement: anElement ] -] - -{ #category : #initialization } -RTResizable >> lazyInitializeElement: anElement [ - element := anElement. - element when: TRMouseLeftClick do: [ :evt | self showHandles ]. - element when: TRMouseDragStart do: [ :evt | self disable ]. - element when: TRMouseDragEnd do: [ :evt | self enable ]. - element addCallback: (TRRemoveCallback block: [ :evt | self removeHandles ]). - - self connectWithView: (view ifNil: [ element view ]). - - self enable -] - -{ #category : #accessing } -RTResizable >> minSize: aValueOrAOneArgBlock [ - "The minimal size to which one can resize the shape." - - minSize := [ :anElement | aValueOrAOneArgBlock rtValue: anElement model ] -] - -{ #category : #accessing } -RTResizable >> minSizeFor: anElement [ - "The minimal size to which one can resize the shape." - - ^ minSize rtValue: anElement -] - -{ #category : #translating } -RTResizable >> negate: aPoint forCorner: aCorner [ - ^ aPoint * (RTResizableRectangle cornerDirectionFor: aCorner) negated -] - -{ #category : #hooks } -RTResizable >> removeEveryonesHandles [ - element view announce: TRResizeCanceled new -] - -{ #category : #hooks } -RTResizable >> removeHandles [ - handles ifEmpty: [ ^ self ]. - - handles do: #remove. - handles := #(). - - element view signalUpdate -] - -{ #category : #hooks } -RTResizable >> setupView: aView [ - aView canvas eventOverseer ifNil: [ aView canvas eventOverseer: TRAnnouncingOverseer new ]. - - aView canvas eventOverseer - when: TRMouseLeftClick - do: [ :evt | aView announcer announce: (TRResizeCanceled shape: evt shape) ]. - aView attributeAt: self className put: true -] - -{ #category : #hooks } -RTResizable >> showHandles [ - handles ifNotEmpty: [ ^ self ]. - handles := RTResizableRectangle cornersAndSides - collect: [ :corner | - | handle | - handle := self createHandle. - self attachHandle: handle toCorner: corner. - handle ]. - self connectAllHandles. - element view addAll: handles. - element view signalUpdate -] - -{ #category : #translating } -RTResizable >> translateCorner: aCorner of: anElement to: aPosition [ - | selector | - selector := ('translate' , aCorner capitalized , 'Of:to:') asSymbol. - RTDirectLayoutTranslator new perform: selector with: anElement with: aPosition -] - -{ #category : #accessing } -RTResizable >> view: aView [ - view := aView -] diff --git a/src/Roassal2/RTResizableRectangle.class.st b/src/Roassal2/RTResizableRectangle.class.st deleted file mode 100644 index 5f87b7d7f..000000000 --- a/src/Roassal2/RTResizableRectangle.class.st +++ /dev/null @@ -1,81 +0,0 @@ -" -I provide some primitives for manipulating with rectangles and its sides. - -!! Collaborators - -DCRTResizable -" -Class { - #name : #RTResizableRectangle, - #superclass : #RTObject, - #classInstVars : [ - 'cornerDirections', - 'oppositeCorners' - ], - #category : #'Roassal2-Interactions-Resize' -} - -{ #category : #accessing } -RTResizableRectangle class >> cornerDirectionFor: aCorner [ - ^ self cornerDirections at: aCorner -] - -{ #category : #accessing } -RTResizableRectangle class >> cornerDirections [ - ^ cornerDirections - ifNil: [ - cornerDirections := (OrderedCollection new - add: (#top -> (0 @ 1)); - add: ( #bottom -> (0 @ -1)); - add: (#left -> (1 @ 0)); - add: (#right -> (-1 @ 0)); - add: (#topRight -> (-1 @ 1)); - add: (#bottomRight -> (-1 @ -1)); - add: (#bottomLeft -> (1 @ -1)); - add: (#topLeft -> (1 @ 1)); - yourself) asDictionary ] -] - -{ #category : #accessing } -RTResizableRectangle class >> corners [ - ^ #(#topRight #bottomRight #topLeft #bottomLeft) -] - -{ #category : #accessing } -RTResizableRectangle class >> cornersAndSides [ - ^ OrderedCollection new add: #top; - add: #topRight; - add: #right; - add: #bottomRight; - add: #bottom; - add: #bottomLeft; - add: #left; - add: #topLeft; - asArray -] - -{ #category : #'as yet unclassified' } -RTResizableRectangle class >> oppositeCornerFor: aCorner [ - ^ self oppositeCorners at: aCorner -] - -{ #category : #'as yet unclassified' } -RTResizableRectangle class >> oppositeCorners [ - ^ oppositeCorners - ifNil: [ - oppositeCorners := (OrderedCollection new - add: (#topRight -> #bottomLeft); - add: (#bottomLeft -> #topRight); - add: ( #bottomRight -> #topLeft); - add: (#topLeft -> #bottomRight); - add: ( #top -> #bottom); - add: ( #bottom -> #top); - add: ( #left -> #right); - add: ( #right -> #left); - yourself) asDictionary ] -] - -{ #category : #accessing } -RTResizableRectangle class >> sides [ - ^ #(#top #right #bottom #left) -] diff --git a/src/Roassal2/RTResizableTest.class.st b/src/Roassal2/RTResizableTest.class.st deleted file mode 100644 index 09b20e3ec..000000000 --- a/src/Roassal2/RTResizableTest.class.st +++ /dev/null @@ -1,60 +0,0 @@ -" -A RTResizableTest is a test class for testing the behavior of RTResizable -" -Class { - #name : #RTResizableTest, - #superclass : #RTTest, - #category : #'Roassal2-Interactions-Resize-Tests' -} - -{ #category : #tests } -RTResizableTest >> testBasic [ - - | v g | - v := RTView new. - g := RTGroup new - add: (RTBox new - size: 100; - borderColor: Color black; - borderWidth: 1; - element); - add: (RTRoundedBox new - size: 50; - borderRadius: 20; - borderColor: Color black; - borderWidth: 1; - element); - add: (RTEllipse new - width: 100; - height: 30; - borderColor: Color black; - element); - yourself. - - v addAll: g. - - RTGridLayout on: g. - - g @ RTDraggable. - g @ RTResizable. - - v @ RTZoomableView. - -] - -{ #category : #tests } -RTResizableTest >> testSimpleExample [ - - | v s e | - v := RTView new. - s := RTBox new color: Color blue; size: 20. - e := s element. - e @ RTResizable. - v add: e. - e announce: TRMouseClick new. - e announce: (TRMouseDragging new step: 5 @ 5). - e translateBy: 5 @ 5. - - "A bit strange this 'top'" - RTResizable new lazyInitializeElement: e; basicCallbackFor: RTElement new corner: #top -] diff --git a/src/Roassal2/RTResize.class.st b/src/Roassal2/RTResize.class.st deleted file mode 100644 index 093cd169b..000000000 --- a/src/Roassal2/RTResize.class.st +++ /dev/null @@ -1,82 +0,0 @@ -" -Adjust the size of the Elements. - -[ [ [ - values := #(35 26 5 18 17 60 36 13 16 28 29 3 8 0 3 2 14 12 13 17 1 9 3 3 4 1 1 1 2 1 1 61). - v := RTView new. - n := RTMultiLinearColorForIdentity new objects: values. - shape := RTBox new color: n; size: #yourself. - es := shape elementsOn: values. - v addAll: es. - RTResize new elements: es; sameSize. - RTHorizontalLineLayout new gapSize: 0; on: es. - - v - ] ] ] -" -Class { - #name : #RTResize, - #superclass : #RTAbstractElementHandling, - #category : #'Roassal2-Core' -} - -{ #category : #'accessing - computed' } -RTResize >> biggestElement [ - ^ elements inject: elements anyOne into: [ :biggestElement :e | - biggestElement extent < e extent - ifTrue: [ e ] ifFalse: [ biggestElement ] ] -] - -{ #category : #'accessing - computed' } -RTResize >> biggestExtent [ - fixedElement ifNotNil: [ ^ fixedElement extent ]. - ^ elements inject: 0 @ 0 into: [ :maxExtent :e | - maxExtent max: e extent ] -] - -{ #category : #'accessing - computed' } -RTResize >> highestElement [ - ^ elements inject: elements anyOne into: [ :highestElement :e | - highestElement extent y < e extent y - ifTrue: [ e ] ifFalse: [ highestElement ] ] -] - -{ #category : #public } -RTResize >> sameHeight [ - self ifNoFixedElementThen: [ self useHighestElement ]. - elements do: [ :e | e height: self fixedElement height ] -] - -{ #category : #public } -RTResize >> sameSize [ - self ifNoFixedElementThen: [ self useBiggestElement ]. - elements do: [ :e | e extent: self fixedElement extent ] -] - -{ #category : #public } -RTResize >> sameWidth [ - self ifNoFixedElementThen: [ self useWidestElement ]. - elements do: [ :e | e width: self fixedElement width ] -] - -{ #category : #'public - configuration' } -RTResize >> useBiggestElement [ - self fixedElement: self biggestElement -] - -{ #category : #'public - configuration' } -RTResize >> useHighestElement [ - self fixedElement: self highestElement -] - -{ #category : #'public - configuration' } -RTResize >> useWidestElement [ - self fixedElement: self widestElement -] - -{ #category : #'accessing - computed' } -RTResize >> widestElement [ - ^ elements inject: elements anyOne into: [ :widestElement :e | - widestElement extent x < e extent x - ifTrue: [ e ] ifFalse: [ widestElement ] ] -] diff --git a/src/Roassal2/RTResizeCanceled.class.st b/src/Roassal2/RTResizeCanceled.class.st deleted file mode 100644 index 683447ad8..000000000 --- a/src/Roassal2/RTResizeCanceled.class.st +++ /dev/null @@ -1,19 +0,0 @@ -" -I am fired when Resize operation is canceled globally for the whole View. - -!! Collaborators - -DCRTResizable -" -Class { - #name : #RTResizeCanceled, - #superclass : #Announcement, - #category : #'Roassal2-Interactions-Resize' -} - -{ #category : #accessing } -RTResizeCanceled >> shape: iDontCare [ - "This is just for compatibility with RTAnnounceableObject>>announce:" - - -] diff --git a/src/Roassal2/RTResizeMove.class.st b/src/Roassal2/RTResizeMove.class.st deleted file mode 100644 index 965616f2f..000000000 --- a/src/Roassal2/RTResizeMove.class.st +++ /dev/null @@ -1,61 +0,0 @@ -Class { - #name : #RTResizeMove, - #superclass : #RTAnimation, - #instVars : [ - 'originalExtent', - 'animatedValue' - ], - #category : #'Roassal2-Animation' -} - -{ #category : #actions } -RTResizeMove >> addedIn: trachelCanvas [ - "We make sure that there is no existing resize animation in the animation queue." - | conflictingAnimations | - conflictingAnimations := trachelCanvas animations - select: [ :anim | (anim class == self class - and: [ anim element == element ]) - and: [ self ~~ anim ] ]. - trachelCanvas animationsRemoveAll: conflictingAnimations. - -] - -{ #category : #accessing } -RTResizeMove >> after: aBlock [ - animatedValue finishCallback: aBlock -] - -{ #category : #testing } -RTResizeMove >> hasCompleted [ - ^ animatedValue hasCompleted -] - -{ #category : #refreshing } -RTResizeMove >> refresh [ - | t | - t := animatedValue value. - element extent: t. - element signalUpdate. -] - -{ #category : #actions } -RTResizeMove >> start [ - animatedValue start -] - -{ #category : #public } -RTResizeMove >> toExtent: toExtent during: numberOfSeconds on: anElement [ - element := anElement. - originalExtent := anElement extent. - - animatedValue := TRVIAnimatedValue new - evaluator: [ :t | originalExtent interpolateTo: toExtent at: t ]; - timer: (TRVITimer new cycleLength: numberOfSeconds); - yourself. - -] - -{ #category : #public } -RTResizeMove >> toExtent: toExtent on: anElement [ - ^ self toExtent: toExtent during: 1 on: anElement -] diff --git a/src/Roassal2/RTResizeTest.class.st b/src/Roassal2/RTResizeTest.class.st deleted file mode 100644 index 7de902535..000000000 --- a/src/Roassal2/RTResizeTest.class.st +++ /dev/null @@ -1,68 +0,0 @@ -Class { - #name : #RTResizeTest, - #superclass : #RTTest, - #instVars : [ - 'elements', - 'resize' - ], - #category : #'Roassal2-Core-Tests' -} - -{ #category : #running } -RTResizeTest >> setUp [ - super setUp. - elements := (RTBox new height: #yourself; width: [ :o | o + 1 ]) elementsOn: (1 to: 3). - resize := RTResize new. - resize elements: elements. -] - -{ #category : #tests } -RTResizeTest >> testBiggestElement [ - self assert: resize biggestElement equals: elements last. - resize useBiggestElement. - self assert: resize fixedElement equals: elements last. -] - -{ #category : #tests } -RTResizeTest >> testBiggestExtent [ - self assert: resize biggestExtent equals: 4 @ 3 -] - -{ #category : #tests } -RTResizeTest >> testHighestElement [ - self assert: resize highestElement equals: elements last. - -] - -{ #category : #tests } -RTResizeTest >> testSameHeight [ - resize fixedElement: elements second. - resize sameHeight. - self assert: (elements collect: #extent) sorted asArray equals: (Array with: (2.0@2.0) with: (3.0@2.0) with: (4.0@2.0)) -] - -{ #category : #tests } -RTResizeTest >> testSameSize [ - resize fixedElement: elements second. - resize sameSize. - self assert: (elements collect: #extent) asSet asArray equals: (Array with: (3.0@2.0)) -] - -{ #category : #tests } -RTResizeTest >> testSameSizeWithoutFixedElement [ - resize sameSize. - self assert: (elements collect: #extent) asSet asArray equals: (Array with: (4.0 @ 3.0)) -] - -{ #category : #tests } -RTResizeTest >> testSameWidth [ - resize fixedElement: elements second. - resize sameWidth. - self assert: (elements collect: #extent) sorted asArray equals: (Array with: (3.0@1.0) with:(3.0@2.0) with: (3.0@3.0)) -] - -{ #category : #tests } -RTResizeTest >> testWidestElement [ - self assert: resize widestElement equals: elements last. - -] diff --git a/src/Roassal2/RTRoassal2ArchitectureTest.class.st b/src/Roassal2/RTRoassal2ArchitectureTest.class.st deleted file mode 100644 index 7babd4680..000000000 --- a/src/Roassal2/RTRoassal2ArchitectureTest.class.st +++ /dev/null @@ -1,21 +0,0 @@ -Class { - #name : #RTRoassal2ArchitectureTest, - #superclass : #RTTest, - #category : #'Roassal2-Tests' -} - -{ #category : #tests } -RTRoassal2ArchitectureTest >> testNoInteractionViewAreNotSubclassOfRTAbstractInteractionView [ - | viewInteraction | - viewInteraction := RTInteraction allSubclasses select: [ :c | c name endsWith: 'View' ]. - self assert: viewInteraction notEmpty. - - "Not sure if RTLinkView has the right name" - viewInteraction := viewInteraction copyWithoutAll: (Array with: RTLinkView with: RTAbstractInteractionView). - - " - For debug, inspect the following line: - viewInteraction reject: [ :c | c inheritsFrom: RTAbstractInteractionView ] - " - self assert: (viewInteraction allSatisfy: [ :c | c inheritsFrom: RTAbstractInteractionView ]) -] diff --git a/src/Roassal2/RTRoassal3DBasic.class.st b/src/Roassal2/RTRoassal3DBasic.class.st deleted file mode 100644 index d5eca5cdb..000000000 --- a/src/Roassal2/RTRoassal3DBasic.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #RTRoassal3DBasic, - #superclass : #RTAbstractPlugin, - #category : #'Roassal2-Plugins' -} - -{ #category : #hooks } -RTRoassal3DBasic >> description [ - ^ 'Load: a basic 3D system based on athens and roassal pretty useful for small applications!' -] - -{ #category : #hooks } -RTRoassal3DBasic >> execute [ - Gofer new - smalltalkhubUser: 'azazael' project: 'roassal3dbasic'; - package: 'Roassal2Basic3D'; - load -] - -{ #category : #hooks } -RTRoassal3DBasic >> isLoaded [ - ^ RPackageOrganizer default includesPackageNamed: 'Roassal2Basic3D' -] - -{ #category : #hooks } -RTRoassal3DBasic >> label [ - ^ 'Basic Roassal3D' -] diff --git a/src/Roassal2/RTRoassalExample.class.st b/src/Roassal2/RTRoassalExample.class.st deleted file mode 100644 index 73c5f42ae..000000000 --- a/src/Roassal2/RTRoassalExample.class.st +++ /dev/null @@ -1,8236 +0,0 @@ -" -RTRoassalExample new installTitle: 'GroupOfGroups' - code: - ' -^ v' - -" -Class { - #name : #RTRoassalExample, - #superclass : #RTAbstractExample, - #category : #'Roassal2-ExampleBrowser' -} - -{ #category : #sources } -RTRoassalExample >> exampleAddingAndRemovingEdges [ - -| v es anim edges | -v := RTView new. -v @ RTDraggableView. - -es := RTEllipse new elementsOn: RTObject withAllSubclasses. -v addAll: es. -RTMetricNormalizer new - elements: es; - normalizeSize: #numberOfLinesOfCode min: 5 max: 30 using: [:vv | vv sqrt * 5 ]; - normalizeColor: #numberOfMethods using: (Array with: Color green with: Color red ); - alphaColor: 0.3. - -anim := RTForceLayoutStepping new view: v. -v addAnimation: anim. - -v addMenu: 'add edges' callback: [ - edges := RTEdgeBuilder new - view: v; - objects: RTObject withAllSubclasses; - connectFrom: #superclass. - anim addEdges: edges ]. - -v addMenu: 'remove edges' callback: [ - v edges do: #remove. - anim removeAllEdges. - v signalUpdate ]. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleAddingAndRemovingEdgesIcon [ - ^ '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 -AElFTkSuQmCC' -] - -{ #category : #sources } -RTRoassalExample >> exampleAddingNodeDynamically [ -| v stepping | -v := RTView new. -v @ RTDraggableView. -stepping := RTForceLayoutStepping new view: v. -stepping after: [ v canvas camera focusOnCenter ]. -v addAnimation: stepping. - -v canvas addMenu: 'Add circle' callback: [ - | el | - el := (RTEllipse new size: 20; color: (Color blue alpha: 0.4)) element. - el @ RTDraggable. - el translateTo: 5 atRandom @ 5 atRandom. - v add: el. - stepping addNode: el. - v signalUpdate. -]. - -v canvas addMenu: 'Add connected circle' callback: [ - | el edge | - el := (RTEllipse new size: 20; color: (Color blue alpha: 0.4)) element. - el @ RTDraggable. - el translateTo: 5 atRandom @ 5 atRandom. - v add: el. - - edge := RTLine edgeFrom: el to: v elements atRandom. - v add: edge. - - stepping addNode: el; addEdge: edge. - v signalUpdate. -]. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleAddingNodeDynamicallyIcon [ - ^ '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 -t8bt/+2frM7BYLwVAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTRoassalExample >> exampleAligningGroups [ - -| rootClasses groups v elements edges | -rootClasses := Array with: RTShape with: RTLayout with: RTBuilder. - -groups := rootClasses collect: [ :cls | | g | - g := RTGroup new. - elements := (RTEllipse new size: 8; color: Color blue) elementsOn: cls withAllSubclasses. - g addAll: elements. - edges := RTEdgeBuilder new - view: g; - objects: cls withAllSubclasses; - connectFrom: #superclass. - RTTreeLayout on: elements edges: edges. - g - ]. - -v := RTView new. -groups do: [ :aGroup | v addAll: aGroup ]. -RTHorizontalLineLayout new gapSize: 30; on: groups. - -RTAlignment new elements: groups; bottom. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleAligningGroupsIcon [ - ^ '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 -RU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleAlignmentFromTop [ - -| rootClasses groups v elements edges | -rootClasses := Array with: RTShape with: RTLayout with: RTBuilder. - -groups := rootClasses collect: [ :cls | | g | - g := RTGroup new. - elements := (RTEllipse new size: 8; color: Color blue) elementsOn: cls withAllSubclasses. - g addAll: elements. - edges := RTEdgeBuilder new - view: g; - objects: cls withAllSubclasses; - connectFrom: #superclass. - RTTreeLayout on: elements edges: edges. - g - ]. - -v := RTView new. -groups do: [ :aGroup | v addAll: aGroup ]. -RTHorizontalLineLayout new gapSize: 30; on: groups. - -RTAlignment new elements: groups; top. - -^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleAlignmentFromTopIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAFeUlEQVR4XuWavWtTURjG76Au -OrpVOourH+AkDg5ORR1EcFD8A4p2KIKoYIuCoIhTHV3Eog5+TFWUoovWP0CdlH43bb5zk6Z5 -4n3O6UlvLomN6W0S+jwQbnJzcj7e3znv+56T61Wr+uolefom0AeiL30g+kD0pQ9EH4i+9IHo -A9GXPhB9IPrSB6IvfSD6QPSlD0QfiL70gegD0Zc+EH0g+tIHoi99IPpA9KUPRB+IvvSB6APR -lz4QfSD60geiL30g+kD0pQ9EH4i+9IHoA9lO3boFTE0B+ji6CKRSqSCZTGJ5eRmeB4yMFJBK -pZDJZKAPpENaXV2F7/tYXFzEysoKyuWyeRWLRXPfgSKkmZkZA2xtbQ36QGJULpczBqdx8/m8 -MXyhUDBG5ntCcmWjq4O/Jby5uTmzevh5Jxidk45jpR1KpRKWlpbMJDTeYjsaZGM0Pmc3r2yY -ChuUMKjob2n46D3WwRWVzWbNa35+3gyo0e97SRw3+0k7OAB8cQycaLOzs7UrXxy7FxdxNuKM -5FaBM5iD8y+jh8W6Gt3nbGK9BMs6+J6rh/edy+u06HLZF9eHdDoN2sONg96BfeT96enpGgyu -CvafIFjGTbi2gBw8CFy4UDEdYCXPniEIzNbFuFXAQD06uuGerl4F9u1DS4ZzZZt9T9Cs99Kl -Mi5e9PHoUR7HjxeCTC2DEyfy1WQyY/rz/Hk8K4h1PX1aMmMlABqXRuR3bIPf896BA+Xq5OQC -Tp7MY2wsgStXchgcTOPu3TTOnctiYiKFgYFsNZFI4fTpXHVqKodTp3K4d6+Ay5cLOH9+rT0g -BPDhw8ZggwmA4eF6Qw8PF+pS2Y8fETRcbslALHv/fqU26GZ6/x6gQb59A5g6B4swuLpUuloN -PFssQIaGMsEsrzScTAsL9W3aPgBfv9q+sY92PECjstevF03Z8XFb1ovTX0bdS3RptxqUWda9 -J5Ruxgq6YboX9oOuKG7XGHXPXpyZVPgeP0eDeKtAooPm526kv5xkzAIJgpOE/YgbyrYAcavB -BTM3w6MpbXjmbzYro/cIeDMXFqdce65NQmD/OVZOjrigxAKEseHXL6wbH3j1ynb6wQPbybEx -+3liwg+yB+DHD+D7d4BlX7/+t/txZZu5MhpichJBzh6/G2OdrJsQnjyxk+zhQ3t9+dI3/f/y -xcfPnwgypbIpu9U2X7womnq3BGTXLgRZja2EwYlZxps3Nttg5svr6Ki9XrsGHDkC7NljA5q3 -SYtHjwK7d6Opi+IqZB3MxOIGwjpZ9507lfXMyX5+985e2X/27dgxgOPyvHgyOBfoe+ZwMSzu -6J2r6PWN3446XGzmT13g5/topqYPpINnOy54hjMx7oC5y9cH0kGFT3qjexCXcW121CIP5MwZ -4Pbt9v3779/A/v08RinWzn2os2ftLjdc9s8foK+Pp6NZ9PcDnz/v7LjSVSABi7o6mgFxZfv6 -9IE0Db6tbvL+Z/PH+BE9gtEP6i36/a3+WRQFQtfFl2JmtWUgPBKJG0i4vp3yz2BHgLgZHKfL -Cp95udWiuClsCwi3+kNDwOHD9jiknUbfvkXtaKLR8cHgYDzHEhJAPn1C3YFhuw0/frzx2/Fx -v+6ALZHgH2Al/RXSLTX6/6OTR+36QCJiPArHFMYp1QfmvF5ZHeHAziwrvIPXB9JB3bhRNn/+ -j4z45mGA8IMLN29W9E97O96B9cd19u4FmL0NDACHDtmnNPgokT4QfekD0Zc+EH0g+tIHog9E -X/pA9IHoSx+IPhB96QPRlz4QfSD60geiD0Rf+kD0gehLH4g+EH3pA9GXPhB9IPrSB6IPRF/6 -QPSB6EsfiD4QfekD0Zc+EH0g+tIHog9EX/pA9IHoa1v0F3yNzF9907LgAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTRoassalExample >> exampleAnimatedCircle [ - | nbOfCircles v shape mousePos | - nbOfCircles := 25. - - mousePos := 50 @ 50. - v := RTView new. - shape := RTEllipse new sizeElement: [ :el | ((el position - mousePos) r abs / 3) min: 50 ]; color: (Color blue alpha: 0.4). - v addAll: (shape elementsOn: (1 to: nbOfCircles)). - RTGridLayout on: v elements. - - v when: TRMouseMove do: [ :evt | Transcript show: evt position printString; cr . mousePos := evt position. v elements do: #updateShape. v canvas signalUpdate ]. - - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleAnimatedCircleIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABjCAYAAABt56XsAAAD8UlEQVR4XuWZCUuVQRSGp5Jc -U3HJNENBczfXLCuXXHFX3BUVS/3/PyHepsM3M3cSkYLieWDg+vrduTBnzvo5Pnz48OHDhw8f -Pnz48OHDhw8fPnz48OHDhw8fPnz48OHDhw8fPnz48OHDhw8fPnz48OHDhw8fPnz48OHDhw8f -Pnz48OFzD2/eOHdx4dzdnXOTk4U+MeG1y0vnOjq89uSJcwsLXt/YcK6hweutrc4dHnr98+di -j6Eh575/92tkpNA/ffLPHh3574r6eufW172+uOjcs2dQg+gAwvX6tT+kVBdzc7G2u+v1q6tY -lyEqK0v3qKlxrq8v1r5983tsb8e6jMI3yJ33DPOOcMk7jo/zhkq16Wnveane1eXc+/cP20Ne -i+TkJD6IxkYfPkLt/Nw/qwMN9bU1r29txbqFodvbQtNnGTX1Pn1XLC/Hen8/1CBVVYVX6FYb -Cl2mv3hR6OPjPtdIN3TQ+lv6wECht7QUe7x6Vei9vcUeT5/GeUtLv4Gmudm57u5SXR7x8mWs -6QB1eysqYl1GU35IaW+PDW3o2draWCsv93tjE7pQVWRhYmen0MMkOztb3Pibm9LQ9PZtHN7k -dUIhzXRVUHboYZg0I4ahTL8RehQ6qQ8OllZClnhXVvIVUvrs1JRzdXWluvJTrmDIVWqbm3yD -/Fyjo84ND+errDR5K1Hn9vj40fcoqS4v+F2VFXqe1v4+1CDWjFkTaElWocd0NYFpWNHq7PS6 -DBAaSZ4gFALTnkUVXFh9WThMy2QLh0jkEQolYTKVYaS9exc/a2EnTdQ9PV5X8xeiiimtmqyy -U7UVYpVdUxO8ylIYUXJXtRUevEYcygcKV4YS+Py8D20hOkh18qqqDHXr8h6t6ur44OUZYeks -ZHztLeNiUZgKQ4UOTiVtqF1fF6VqqGuulYYmG7/kcksu7O3t5ccyKi74Sf2e0YnC2enpw8Ye -8jYNJFNd3iWPe8geqrr4Bvk1b8odppiZibWzs9IRiZZyhvqNdA/ljrGx/N7pnEyhC0lbW37C -+vVraQgSKkftBlsCV8NoRgn7B4Ud2yMcv6tqs4rMGkDlG3sNoFE+Hz7/BkqydrtVbRkWWvS/ -sCew261bXFZW9BZ2u5eW+Gf6R3OI+guFkVyctzd9tiy06I1gqIfhic9fqrLUKD60yvryhX+u -jyadISn8aJSem1np5of66qrXDw7yIxU+j+D5c19RadakiivMLWr41PyF7z7UTStUffgQ7yOv -kJ57r8KHDx8+fPjw4cOHDx8+fPjw4cOHDx8+fPjw4cOHDx8+fPjw4cOHDx8+fPjw4cOHDx8+ -fPjw4cOHDx8+fPjw4cOHD5//mx9m6Vpqr6HZGwAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleAnimatedDots [ - -| v elements s | -v := RTView new. -v @ RTDraggableView. -elements := (RTEllipse new size: 20; color: (Color blue alpha: 0.3)) elementsOn: (1 to: 100). -v addAll: elements. -elements @ RTDraggable. - -s := RTForceLayoutStepping new view: v. -v addAnimation: s. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleAnimatedDotsIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAHgElEQVR4XuWbh3IbSQxE/f+f -45xzzjnnnHMOsO/dFmqb0FBcWfTdmo0qlYttkiKnB3iDmdGanz/9Y0yxxn8I/A3xD39D/A3x -D39D/A3xD39D/A3xD39D/A3xD39D/MPfEH9D/MPfEH9D/MPfEH9D/MPfEH9D/MPfEP/wN8Tf -EP/wN8TfEP/wN8TfEP/wN8TfEP/wN8Q//A3xMuTZs4gjRyKuXIlI7dGjiD17Ii5f7rXbtyN2 -7oy4dKnXrl2L2LJl8rUXL3Ya/5fauXMRmzZF8B6pnTnTaQ8e9NqpUxGbN0c8fjypbd8e8fRp -r508GbF7d8Tz550W/wTa/v0RL1702unTEceORbx712t8lrNnI75+7d9vNIbwodau7X8YxA8f -JrXr1yNevZrUbt2KePhwUrt3L+LOnUmNgeU9VXv9ujNQtY8fIy5cmNS+fesGVDU+MwNcNYyo -GoZVjQmVj9evH6EhdVCZOcxi1ciIq1cnNTKHn1kaA1+1mzeXDj7GHT8+qb1922VpNYmsqgOt -j1eqja5kbdzYf0AyAW3Dhl7LdFfty5f4N9at67UfPyK+f+8f83xex3NToxyh8Z6p7djRaZqF -zG40SlJq+/Z1GqUrNTIjS2xqBw50mk6sgwc7TSfCoUMjNSQHg1Dt06elH5jBrVp93TRtNYHZ -VcP8+jvJINV4XD8z34uyPFqoUy6YfQrm+/e7cqEAp9QAVwU9pWwa1GHPSqEOM7ZuXQr1bdsm -oY5GFrEgUajzPRTqPO/w4Yg3b3qN38tz52nK3AwBphXg1G7VbtzoVjOqAW8GUjVMrPx58mQ4 -1DGy8oLBqzW/sgaN8lO1vXuHgX5UhrQAjikV1nUA5w11GHDixKTGrGbGq0b5IftUqyz766Gu -sCY7qsbsRWOZqLNXB4J/iRbUP39eCvX373uNMoj28uXyUGfGT4M6Ja5qZGwFPdleQT9KqDNA -VWMgZ4H0T0C9BfDfhTqvqw0gj1vfbTSG0NDVDpxSxsylrqdGKaNc6PMoR4BZoU45QvtdqKPN -gjpQ5vNVqLMQWa57xyA0QA/LRmdIBXirK6fmA+cKdS0J06DOIK4G6jSqlRcMaOUAAzyke6+N -5ugMYbArmOsArgbqLIuHQr0ONMZR+1Wj1JAt1SRl3kJ16glw1bKx0i9N/Z4Fdd6jQp2SV6He -6tR37ZoOdcpUBbhm8HLdO+X5r4B6qwMfCvD/Iv406EdlCHUfkALe1Fgeop0/32uULTTKjXbl -LIcV9LwGjXKVGizgtewSV4AzaxXgaMxuBTjLZYU6PQsdvUKdhpHFSUKdgWdnmGxTqB892i2r -UxuVIdTpCvXalWOOpj8/mKjpn1BnwId06pUrLagzi4dCnfOc392SH5Uh2ij931AnO1SDKS2o -wxzVmPXKvBzood376EoW5aACXM8csgYn1PmiDAKR3Tv/rhbqmq3ZqVNWhkC91b0r6BPgev4z -6u33RYmhuwbzXpzM1ZDcTASyelaORjetXTmawp/SQ3ZoR9+COu+DRrlSqKMNhTozfjmoA3B6 -FIU6bCEDUyPbyRaeN0qo64ZenqlXqGNYhTrwvnt36Zl6hXrrTB02VCZxNsFKbZ5Qb22/65n6 -KBlSB5AsmOf2+zSo1xUVhtcLDRjHbLaDun7BbJgoBwnwbLbyS7egnlvt6DkQlJ56ps77ounN -lpVCXTM4Aa6gz65coZ4AV42s8of6gsZcDcmSQqdbNeq1duUV/gC+gj7rvp69ZznSLXkAToax -c6wa2cbyVAFOdirU+awsobN7J1vpwBXqZDbZQlamRraSfSwSUhs11GFFhTpQrve34EDt1IF8 -ZRJsqFDndw6BOoNXoZ7nGUPO1FtdOWcoo2ZIXSkxq4duyc8T6hjegnodaK7w1JXSwkE9ZxJf -ILvyBL1CPUFPScmd1hyI7MrRE/TZlet11YS63nZJqHOpITUOkirU86JcC+raqbegzgFWfR7l -0R/q/lCfHXTWdW8nN//ofuvzFPRZ47Wjz7tU2r1nOdIb8cxQMlDP2XlvND1nB+pkpZ6zV6iT -mWQBWsKazCSr0LIrZw8N8LMkHyXU6/Y79V7LRIK+duqslirUWS1VqMOGIVBnoFpQz1XcLKjX -BrL2V6m1LmqPypA60BhS/6RgNd37Sjr1eksRqNctkWlQX6gz9bwdCIwT4Ar61HLGKdRz6x6o -ZyTU81IcC4V6KY6BrefnegMmoa7L8qFQz6121bLHUtDr1SV/qPtDfTbUc69Iu/JcLirogWzt -1LV7T9Dr2XueBuqWfAvqvDeabsnTgaNp976whujJXa6MWqDX9M+BrRflAHq9KMdqqUKdRUML -6pUr7OxWqLduwiyUIfWWIrO6BfpW9z4E6tNuvw+Fev17wtYfES1cycqLBMA4O/U83NHuPVc3 -PC+hnn8aoFDPFY9CPbcxhkI9y6dmawJ84Q3xD39D/A3xD39D/A3xD39D/MPfEH9D/MPfEH9D -/MPfEH9D/MPfEH9D/MPfEP/wN8TfEP/wN8TfEP/wN8TfEP/wN8TfEP/wN8Q//A3xN8Q//A3x -N8Q//A3xN8Q//kj8ArAWrbVr7IKVAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTRoassalExample >> exampleAnimationStartStopButton [ - -| v elements stepping | -v := RTView new. -v @ RTDraggableView. -elements := (RTEllipse new size: 20; color: (Color blue alpha: 0.3)) elementsOn: (1 to: 100). -v addAll: elements. -elements @ RTDraggable. - -stepping := RTForceLayoutStepping new view: v. -stepping addStartStopButton. -"Uncomment the next line to have the animation from the beginning" -"v addAnimation: stepping." - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleAnimationStartStopButtonIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAB0ElEQVR4XuXVsWrCUBiGYe/d -zSFkl0CmkMXFTQUnQRK9Ae9AEG9AzK89KbTQQjfbU54PHDwu4TyGd/J4+MtpE/8KfBB/P4H0 -fR+n0yn2+318/bFt26jrOu73e/hX9Usg5/M5qqqKsixjvV6Plz8MwwiwWCwioRyPx7her+NZ -0zSREP2rexFI13Wx3W6jKIqYzWYfb8Nms4nb7TaeJaD0fTqdRgKZz+c+iN8QH8SfD+LPB/FB -/PkgPog/H8QH8eeD+CD+fBAfxJ8P4s8H8UH8+SA+iD8fxAfx54P4IP58EH8+iA/i7w9BLpeI -5fL9s9tFiGdZgaxWnw+YPuJZViCHw/cH1M6yAom3pYdM/5z0OotnftT9qPtR96PuR92Puh91 -P+p+1P2o+1H3o+5H3Y+6H3U/6v78qPtR96PuR92Puh91P+r+/Kj7Ufej7kfdj7ofdT/qftT9 -qPtR96PuR92Puh91P+p+1P2o+1H3o+5H3Y+6H3V/ftT/X4SzBVEjnC2IGuFsQdQIZwvizwfx -Qfz5ID6IPx/Enw/ig/jzQXwQfz6ID+LPB/FB/Pkg/nwQH8SfD+KD+PNBfBB/PogP4s8H8eeD -+CD+fBAfxJ8P4oP4e9meacybRQbJVu4AAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTRoassalExample >> exampleAnotherTreeLayout [ - | view elements | - view := RTView new. - elements := RTBox elementsOn: (1 to: 100). - elements @ RTDraggable. - view addAll: elements. - RTEdgeBuilder new - view: view; - objects: (1 to: 100); - shape: (RTLine new color: Color purple); - connectFrom: [ :v | v // 2 ] to: #yourself. - RTTreeLayout on: view elements edges: view edges. - view edges do: [ :e | e trachelShape pushBack ]. - view @ RTDraggableView. - ^ view -] - -{ #category : #icons } -RTRoassalExample >> exampleAnotherTreeLayoutIcon [ - ^ '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 -gg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleArc [ - -| view shape label elems | -view := RTView new. -view @ RTDraggableView. - -shape := RTArc new - innerRadius: [ :i | i *50]; - externalRadius: [ :i | (i * 50) + 4]; - - alphaAngle: 45; - betaAngle: 135; - color: Color black. -elems := shape elementsOn: (1 to: 10). -view addAll: elems. -elems @ RTHighlightable. - -label := RTLabeled new text: #yourself. -label bottomLeft. -elems @ label. - -^ view -] - -{ #category : #icons } -RTRoassalExample >> exampleArcIcon [ - ^ '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 -AABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleArrow [ - | v es c arrow | - v := RTView new. - c := RTMultiLinearColor new. - es := (RTEllipse new - size: 30; - color: [ :e | c level: e / 10 ]) elementsOn: (1 to: 10). - v addAll: es. - es @ RTDraggable. - arrow := RTArrowedLine new - color: Color red; - attachPoint: RTVerticalAttachPoint instance. - RTEdgeBuilder new - view: v; - objects: (1 to: 10); - shape: arrow; - connectFrom: [ :n | n // 2 ] to: #yourself. - RTTreeLayout new on: es. - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleArrowIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABjCAYAAABt56XsAAAFKklEQVR4XuXa20+bZRwH8DeZ -Xmy72Y033vgXmE3RcTEvvJjRmI0sMTHgjQkaJGbrJDswI6Q6Ix64YAnLSEtwcQQZ4TBoDDAP -VBAYh25jcoaV4UopR0XAAqX9vr5PyVv6tm9HW4pgvt8nv0D6vjTwfHif533ep5Is82cvReLv -An4Q/vCD8IPwhx+EH4Q//CD8IPzhB+EH4Q8/CH/4QfhB+MMPwg/CH34QfhD+8IPwg/CHH4Q/ -/CD8IPzhB+EH4Q8/CD8If/hB+EH4ww/CH34QfhD+kIE8Sv8MNilJFvX7cyfgXVgCP8guZfpq -RQBDrZ5njvOD7FbuK50fCiKKH2SX0n84jR9kL2Xhx44wkMFX3uMfsnYVpb4Njw35GH/xFJxG -E/9d1m4HbW3AnTvA+jrQ2gpYLPxXyH8KoHS8/+vYGDA8DJGwc+rqgOVl4MED8IPsNEhlJdDZ -CXR1bdnZWFwE+vqA6mqgvx+YmQE/SAKzVFoDX1YWMD4eU8fC6wUuXoQ3+xImeufBD7LNjNf1 -wLzvA5ikDFlUd25dbCBKrqY0IkMyyaIuH6nC5MCf4AeJI+srngBEcDmtQ1F3aHHqzwEMtb54 -qYYfJJ70FjbpgtiMlqjfIxRDLX6QODLZMqIP8mn0t7cXni0FP0gCU/NyngbF/FQmPEsrUYMM -WZ1hGOVnWvmHrLjnEfcaxBD1y/MGdOXUYrrrUcyd2f7dMMoyW2B++ydYjDbw32Vtd/0hVuMd -HUB7u7/ieo+SEuDWLf7b3m1BtLQACwv+BV7gNZcLmJiAWF9E9R5iUWi1bv682Qz4fPxDVlwg -djvQ3Q31kYnmmMMBP9jNm0/sXLGqF+cGP35BbS0wNwd+kFhW5gteTKekAwMDETtOXDme9AwM -/KbfuYMtw5i9diPs2GpVNcbPf8IPEvXa4dUhJEk2WS2bdVH3vORkQFL+CrWamzceNjbfXYSU -ZJPVSn53MND5JwobIGWYZLUquh+CH+QJKSuY0mCoFZrsbC2GWv4/LAhDrUuFDtTcG9NgqLXi -8YIfJELOvDGiC9LXqf1Eyf79sYEcOHYXRotN1gP5urGHHyRSCs45dEHcS9r/4pMnYwNJyRoV -ILpXyL0/ZvlBIuUfpeNDMcScEnqe2OoIxUhL25hDUj+2IxSk3+72H9uXadagHM2r4Z9Dtop7 -2YsrFxzIPdqIymuRN5acTsBgAFJfn0d5uXb3sKxhHqfOjcKQ/xiuOU/gmE95HJ9T24XXCn7A -lw33wX+XFe0apKhoY598bW3r3cGmpv/1XvqeBsHkJGDbfN6k7o1HgvGfr4CIfXR+kJ0AOXsW -mN/caoXbDZSWAsXF+iCNjcoYlMN/hexE7H/PwJV1OmyYQn09Rr45jzWfJ6zjZzELe8VX/CCJ -TJvrIQ6UnIZkypBFie/bp+z+Ts6dKIJkS5LVenPE4H99FatIVpokb7bbuM3/uaxE5HDl5QCG -WkeqPodjbVqDoVbtX7/ifaUFY6iNHyQRv0gIhlr5rhu6IEanST6Ig/wgO5VD18+GXSGHrn+E -XveoLsiVqe/xltL4QXYoVudQ2NUhXhM5PvyhBuWF/nf880Qf+vC00oIx8pDHP4ckKq0u5VmT -zSKLEpN88LG8yW8hhilRPmzu9jnhhFHeaOUo51+H8IcfhB+EP/wg/CD84QfhDz8IPwh/+EH4 -QfjDD8IPwh9+EH4Q/vCD8IcfhB+EP/wg/CD84QfhB+EPPwg/CH/4QfjDD8IPwh9+EH4Q/vCD -8IPwhx+ELf8CoRrNZjC/o6EAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTRoassalExample >> exampleArrowedAndLabelledLine [ -| v e1 e2 l | -v := RTView new. - -e1 := (RTEllipse new size: 20) elementOn: 'hello'. -e2 := (RTEllipse new size: 20) elementOn: 'world'. - -e1 @ RTDraggable. -e2 @ RTDraggable. - -l := RTEdge from: e1 to: e2. -l + (RTLine new color: Color red). -l + (RTSimpleArrowHead new color: Color red). - -e2 translateBy: 60 @ 80. -v addAll: (Array with: e1 with: e2 with: l ). - -e1 @ RTLabeled. -e2 @ RTLabeled. - -"Note that the RTLabelled interaction has to be set after having added the element in the view" -l @ (RTLabeled new text: 'lining up!'). - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleArrowedAndLabelledLineIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABjCAYAAABt56XsAAACf0lEQVR4XuXZ3YtSQRyH8QPi -S0q+oK6ix1fwbdd1u3BR0VUQsRA2iLroogOxhHSVFBEERRcSLCh0ZRd7sYW3etOl1GVdebm3 -C3YRsftXnM4IQl120c6J58MMczyeq+8wDL8ZhY+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+P -j4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4/vf5NIJJq//47FYnV+KhI1m81XvV5v -0u12x5qmfa7X6y/y+fydWq32jJ+OpBXi9/uzPp8vHQ6H98QKSSaTrUgkss9PRyKHw3FtMBi8 -Ed1utzv4iUg2n8+/rVYrXfTZbPaVn4hkm8n4OZutR34ikk2n04WYiB+LhT49PV3wEzGBfr// -XHRNUTR+GiazvW58phE2mlEh8otEs60Si6JY+EmYCH8/kUgcm3i93lSpVHrgcrm2RBVfrVYH -R9nssVHF3xDfuN1u1ajiy8b7p0Yx6eWn9o8nJB6PN1RVrVYqlSfinCuTyfSM8fX+zs5D8Y34 -v1wuPxbPTqczwE9NgmKxeP9od/ed2E+sVqtTdJvNdp2fjGStdeMzlXvr9qdQKFQSY6FQuMtP -6IqJe5JbBwdvG43GS3FM3+l0jsXmHwwGt8W+w0/oihnht1KpVDupqo1cLnf7Ziz2yOPxJNLp -dCcajVb4CUnStljaw+Hw/afDwy/8+xMTWC6Xl5eTif797Ew3ni/4iUi2Oj/XL05O9M09Cj8R -ycbj8cfNZIxGow/8REwgEAhsic5Pgo+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+P -j4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+P76/8Al/ZjWaoPOt3AAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTRoassalExample >> exampleArrowedBezier [ - | v shape edge els | - v := RTView new. - shape := RTEllipse new size: 10; color: (Color purple alpha: 0.3). - els := (shape elementsOn: (1 to: 6)) @ RTDraggable. - v addAll: els . - RTHorizontalLineLayout on: v elements. - edge := (RTEdge from: els first to: els last) + ((RTBezierLine new controllingElements: v elements) + (RTEmptyArrowHead new) ). - v add: edge. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleArrowedBezierIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABjCAYAAABt56XsAAABCUlEQVR4XuXRIQoCURQF0A8i -DGgSwWCTCTpBTAb34Tp+NAjKiLgBbWYXNGifJVjsyjSxOQyInAMvXG67L/h8Pp/P5/P5fD6f -z+fz+Xw+n8/n8/l8Pp/P5/P5fD6fz+fz+Xw+n8/n8/l8Pp/P5/P5fD6fz+fz+Xw+n8/n8/lI -aZpO/BUa0ArtpIlcFMU9y7LZZ+/7wiCMFpt4uMQYt9Wt4vpUN5dl+bwWt8e4M1/6y9aUhG6/ -F4bTJnL1kP3ucH7vfT+U5/nRX8Hn8/l8Pp/P5/P5fD6fz+fz+Xw+n8/n8/l8Pp/P5/P5fD6f -z+fz+Xw+n8/n8/l8Pp/P5/P5fD6fz+fz+Xw+n+/vvADh2zp6vpL8RAAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleArrowedEdges [ - | view els | - view := RTView new. - els := (RTBox new - size: 10; - color: Color blue; - borderColor: Color veryLightGray) - elementsOn: Collection withAllSubclasses. - els @ RTDraggable. - view addAll: els. - RTEdgeBuilder new - view: view; - objects: Collection withAllSubclasses; - shape: - (RTLine new - attachPoint: RTShorterDistanceAttachPoint new; - color: Color veryDarkGray) - + - (RTSimpleArrowHead new - attachPoint: RTShorterDistanceAttachPoint new; - color: Color veryDarkGray); - connectFrom: #yourself toAll: #subclasses. - RTTreeLayout on: els. - view @ RTDraggableView. - ^ view -] - -{ #category : #icons } -RTRoassalExample >> exampleArrowedEdgesIcon [ - ^ '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' -] - -{ #category : #sources } -RTRoassalExample >> exampleArrowedLineWithOffset [ -| v e1 e2 e3 e4 line | -v := RTView new. -e1 := (RTEllipse new color: (Color blue alpha: 0.4); size: 20) element. -e2 := (RTEllipse new color: (Color red alpha: 0.4); size: 20) element. -e3 := (RTEllipse new color: (Color yellow alpha: 0.4); size: 20) element. -e4 := (RTEllipse new color: (Color green alpha: 0.4); size: 20) element. -e1 @ RTDraggable. -e2 @ RTDraggable. -e3 @ RTDraggable. -e4 @ RTDraggable. - -v add: e1; add: e2; add: e3; add: e4. - -line := RTArrowedLine new color: Color red. -line withOffsetIfMultiple. -v add: (line edgeFrom: e1 to: e2). -v add: (line edgeFrom: e2 to: e1). -v add: (line edgeFrom: e1 to: e2). - -v add: (line edgeFrom: e2 to: e2). - -v add: (line edgeFrom: e3 to: e4). - -RTCircleLayout on: (Array with: e1 with: e2 with: e3 with: e4 ). - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleArrowedLineWithOffsetIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABjCAYAAABt56XsAAACLklEQVR4XuXXzUpbQQCGYS/K -S/FSxGuJWBFcWEGswUXBlSCCYrEmhILgLm6kiy6sujDw2Tnxpw0UIQZOTvK8w0BWWczDzJlZ -eHrya1IL/hL4IH4+iA/i54P4IH4+iA/i54P4IH4+iJ8P4oP4+SA+iJ8P4oP4+SA+iJ8P4ueD -+CB+PogP4ueD+CB+PogP4ueD+PkgPoifD+KD+PkgPoifD+KD+PkgfvMGcpObfC6jVcb3MnyQ -KbeXvSHG6/BBplw7bR+kaUfWdhn+kdWQ8viYLC7G/6g3BWRrKzk89EEagbGzM4TIw4MPMnWM -/f3475BpLX5+jix+Dg7Gxri/T6rpg0wE8SvJpzJbZX55Pp6Oj8de1E6n/EPreXa7zUZpOMi3 -F4yX+bsz9mLm7OwN43X6IB8G+TEKktuxFjOnp0m/n83NvxjVbx9kIpRy3uRrmf0PYVS/B91e -jo4ynIOBD1I/4j8Y6fVS5d+yGoaRdjvZ2EhWV/0dUgvE7m7e2xm5vExOTvxrb20gKyvJ+Xm5 -KZer8v8wLi6SuzsfpBaMq6tkefldDP8bUhdGeWe83WmXlsrTpbxdrq8zixjzAbK+PvLqm9Wd -MZ87ZG0ts4wxX9+Q6qiaofcG9TD0Qfx8EB/EzwfxQfx8ED8fxAfx80F8ED8fxAfx80F8ED8f -xM8H8UH8fBAfxM8H8UH8fBAfxM8H8fNBfBA/H8QH8fNBfBA/H8QH8fNB/HwQH8TPB/FB/Cbq -Dwek5Kyq+eWvAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTRoassalExample >> exampleAttachPoint [ -|v ellipse box roundedBox e1 e2 e3 l1 l2 l3 ap| -v := RTView new. - -ellipse := RTEllipse new - width: 100; - height: 50; - borderColor: Color black. - -box := RTBox new - width: 50; - height: 100; - borderColor: Color black. - -roundedBox := RTRoundedBox new - borderRadius: 25; - borderColor: Color black; - width: 80; - height: 50. - -e1 := ellipse element. -e2 := box element. -e2 translateBy: 200 @ 0. -e3 := roundedBox element. -e3 translateBy: 40 @ 100. - -v add: e1; add: e2; add: e3. - -ap := RTBorderAttachPoint new offset: 10. - -l1 := RTDoubleArrowedLine new - headStart: RTFilledNarrowArrow asHead; - headEnd: RTSimpleArrow asTail; - attachPoint: ap; - color: Color black; - edgeFrom: e1 to: e2. - -l2 := RTDoubleArrowedLine new - headStart: RTFilledNarrowArrow asHead; - headEnd: RTSimpleArrow asTail; - attachPoint: ap; - color: Color magenta; - edgeFrom: e2 to: e1. - -l3 := RTStyledMultiLine new - head: RTEmptyDiamond asTail; - tail: RTNoDecorationShape asHead; - attachPoint: ap; - color: Color magenta muchLighter; - edgeFrom: e2 to: e3. - -v add: l1; add: l2; add: l3. - -v elements @ RTDraggable. -^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleAttachPointIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAABAklEQVR4XuXRAQ0AAAgCQfuX -VmMwju0LcPNbv6j8E3wQPx/EB/HzQXwQPx/EB/HzQXwQPx/EzwfxQfx8EB/EzwfxQfx8EB/E -zwfx80F8ED8fxAfx80F8ED8fxAfx80H8fBAfxM8H8UH8fBAfxM8H8UH8fBA/H8QH8fNBfBA/ -H8QH8fNBfBA/H8TPB/FB/HwQH8TPB/FB/HwQH8TPB/HzQXwQPx/EB/HzQXwQPx/EB/HzQfx8 -EB/EzwfxQfx8EB/EzwfxQfx8ED8fxAfx80F8ED8fxAfx80F8ED8fxM8/wAfx80F8ED8fxAfx -80F8ED8fxAfx80H8fBAfxM8H8UH8fJDuDpK06ys7QL90AAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTRoassalExample >> exampleBezier [ -| v shape edge els | -v := RTView new. -shape := RTEllipse new size: 10; color: (Color purple alpha: 0.3). -els := (shape elementsOn: (1 to: 6)) @ RTDraggable. -v addAll: els . -RTHorizontalLineLayout on: v elements. - -v elements first translateBy: -50 @ 50. -v elements third translateBy: -10 @ 20. -v elements fifth translateBy: 0 @ -60. -v elements last translateBy: 150 @ 100. - -edge := (RTBezierLine new controllingElements: v elements) edgeFrom: els first to: els last. -edge when: TRMouseEnter do: [ :ev | edge trachelShape color: Color random. ev signalUpdate ]. -v add: edge. - - ^ v -] - -{ #category : #sources } -RTRoassalExample >> exampleBezier3 [ -| v e1 e2 e3 lineShape s edge| -v := RTView new. - -s := RTEllipse new color: (Color red alpha: 0.4); size: 30. -e1 := s elementOn: 'Begin'. -e2 := s elementOn: 'End'. -e3 := s elementOn: 'Middle'. - - -lineShape := RTBezier3Line new. -lineShape controlElement: e3. - -lineShape attachPoint: (RTShorterDistanceAttachPoint instance). -edge := lineShape edgeFrom: e1 to: e2. - -v add: e1; add: e2; add: e3; add: edge. - -e1 @ RTDraggable. -e2 @ RTDraggable. -e3 @ RTDraggable. - -e2 translateBy: 80 @ 50. -e3 translateBy: 40 @ 25. - -^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleBezier3Icon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAABuUlEQVR4XuXYTYrCQBCAUe9/ -AlHQhQu3gl5D7+BKQVzIENObKScZRok/26GTfh/kAnkk1dWj282vT438V+CD+PkgPoifD+KD -+PkgPoifD+KD+Pkgfj6ID+Lng/ggfj6ID+Lng/ggfj6Inw/ig/j5ID6Inw/ig/j5ID6Inw/i -54P4IH4+iA/i54P4IH4+iA/i54P4+SA+iJ8P4oP8W3E8RqxWEbNZxG4XPkhOjMMhYjx+fjab -8EFygbRfxitI8/gguUDa35QP0iOQ7fYdZDqNqqrCB8mF0syMLkacz78YdV3H09Cfz6MF9EFy -QTWl/f79C1qvwwfJOPTTYlHUjBk2yN/Q/3o5jfkguUCaRfGOcGl+Vfc544P0ZOin5TK+T6f4 -uOkPZOgXd5eVUorHCezTpt/zoV/k5WJ7ArterzHETb/o294hbvplg3SGfne59EH6sulPJo9N -3wfx80F8ED8fxAfx80F8ED8fxM8H8UH8fBAfxM8H8UH8fBAfxM8H8fNBfBA/H8QH8fNBfBA/ -H8QH8fNB/HwQH8TPB/FB/HwQH8TPB/FB/HwQH8TPB/HzQXwQPx/EB/HzQUrvB3WSZ0g6cvlU -AAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTRoassalExample >> exampleBezierAndCenterOfObjects [ - -| v es startingElement shape | -v := RTView new. - -es := (RTEllipse new color: (Color blue alpha: 0.4); size: 15) elementsOn: (1 to: 20). -v addAll: es. -es @ RTDraggable. - -"we are properly locating the nodes" -startingElement := (RTEllipse new color: (Color red alpha: 0.4); size: 20) element. -v add: startingElement. -startingElement @ RTDraggable. - -RTCircleLayout new initialRadius: 80; on: es. -es translateTo: 0 @ 0. - -startingElement translateBy: -150 @ 0. - -"Building the bezier lines" -shape := RTBezierLine new - centerOfObjects: (1 to: 20) inView: v. -v addAll: (shape edgesFrom: startingElement toAll: es). - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleBezierAndCenterOfObjectsIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABjCAYAAABt56XsAAAHNklEQVR4XuWaW0wUVxjHZ8Fd -FkFYuSwL7HK/LSCy7MIuBARBuewKrIhIQRABIZbAVrSUXikJiTXyYFGjSUs0prEPTfqg1b7Y -xMQHExISGjE8WO1LkyZ9aGKb9KXp5XwOkz0zDCug9sL/l53MnJkz58D3zfluMwI++OCDDz74 -4IMPPvjggw8++OCDDz744IMPPvjggw8++OCDDz744IMPPvjggw8++OCDDz744IMPPvjggw8+ -+Py30esFwW4X9/j8w8THC4LHIwiJif5zx44JwsCAuJcwm8V+1B+fVwgJXtr8CnG5pqblClHr -h89LICFBEHJy/O39+ysqTp8ThK4u3mS5XN0DcpPV3S0qyev1n6NxaDx8NkhsrP8pLyz0n4+M -jIuLkwnW5XJV8e2kpKQ06uc/Q/dLY9G4+GyAuDgSYGvr+SuCkJsbSAHKdllZWbV8rNxcr/fj -WVEhRiO+bDeM1SoIRUXR0dHGQAJXKqSgoKCYb5tMJjONIzd/+KwBh0N8iqtkAs7IyLBmZWXl -8ecsFkuamkIKCwudfL+dO3eWJCYmJsvnofFpHgqX8QkYRRmNo2+qRUfKVcIrgT9Wrh6j0Ri/ -nnnwkWGzkZDy89sO2+32MuXVtra2Pum4oqKiVk0hvLnq7e19QzlGUVFRWV5e2+GVwQI+AUlN -Tc0i4fHnghjZ2dk7pLZOpwtZVlQv7XklshUVq6aMhIQEC750n0t6umjPdTrlFfIBkZGRUZyP -KOH9CCklNjbWRG2DwfCsX35+flFeXp6N76e24sT5aN60NHwdqGbg9fVqV0kJvIDr6+tbyNHT -8e7du91sp2G+o0ZaJbm5uYWcCXOoK4NoaMDP6FdRiMl0ciwzs7MnMzMzj4WpiSufZZ3O6XRW -0rHb7T5IvoIETf6DVhFbHdG0UqTVkpKSkrEyuhIxm80pZBKzsw/30rz4ClEtkfhD0G3btkWW -lpZWk2KYgmRJ4ZEjR4arqqoaTp06NVVcXFzR1NT0mlar1Umrgtp0PwldscpcpLTq6mpPaGjo -Vv8VmneTllRinv1eLlsYs7OzX7GI6cTly5e/pEhrcHBwLCQkRN/c3NzR3t7eT6uCwmJSlHQf -ux566NChPo1GE0T9oJ5vA/uxMKeXjDGr5nnXdzeVyOkpjY8n503C9vl8E319faMXL178YmZm -5vPr169/c+fOnaWjR4/66I6oqKhYOq6rq2uh0Lampmaf9NQnJydndHV1vR4REWFY7/ybRiHs -v7GTMqaczulrPt+N93y+aRLq87bJyckLc3OLT588efIX2/58/PjxH48ePfp9cXHxl4WFhZ/n -5+d/unv37ndXr179mvHtgwcPnt6/f/8Hao+NjZ1eyxzP367dcDqV5fv/e8WJ/bgXEAPhghC+ -JhMXExPX2XnmEgnF57vw2dTU1KWHDx/+urS09Nu9e/e+n5ub+3F4ePj9s2fPXrl9+/bC+Pj4 -mdraWi85a1ole/bsaerv7x9lYe4LlEDa28U/m/abCJat7agThDpWxTOv/271kjiLqnaNjIx8 -cPPmzflbt24tDA0NvUNOmUJdZpaGyHd0dHQMMnMV5q9SVbmZKdvPal/51PdF5sdnJRrmkDtp -o8bx48fHJyYmZii68ng8beTEKaqia1R8zMnJKWhsbGxXhsvUt6WlpQtfnGv3QnZ6G0juejnP -aFUTIGXglI1TxMWEfJDqWZSH0EqhomJwcPAW6kdJI1/r4iEFer3eTrFF89G8VJrHR1oEGrLh -yclvvet2f3R+tV6UR0gJIxP2XkYzJYd6vX4rJYwsvNWwyGo7X3632Wwuh8NRvtqYTU3Tl2he -0YfQ34HPMtKXI2WqJY7u7u4hvl1SUrJrOdfQM6GXSiUS6Tpz9Cf5/pSPqM9L8ym/WMFnGa1W -eYZyCuULp4aGhlauaJhK+8rKymc1MIrAuKKk7K0hrSb1dyMr58VHhuhHqD4VFhYmC5/JBEnH -fPlDUojkQwhmykKZQtPlI0fFsCJlET8PPgFpaSET0tx87hN11++v2rLsvFE65l9Q8VGW8t26 -BBv/U9FUkUPHJwCrf+DW2trao4yW1BTCmy2C8pT1zIOPDBMrndfVyT8VXf1JV1MIq/yu8Alk -/uRnaHyax2TCl/m6qKzU6z2NFktSmmJ1dKymEKXZItLTM6xardtD4+HLdOMVMiuZFIPBd0L5 -uU55efneQAqR3h7y3mf7dt+oaKKsVnzZbojwcH9+IpXGTSaNxu4IDrYkBVJISEja8jt6ySTR -/VK+ERaGL9sXIijIf9zTY7dPnpE746wsl2uEvYbNzOSdts324Wnqrz4OPi+JAwdEZfCCHhgw -m998W64kuk5t6o/PK0T6bCciwn9u3z5R+LSXoOvUDz8L/5fAf5+BDz744IMPPvjggw8++OCD -Dz744IMPPvjggw8++OCDDz744IMPPvjggw8++OCDDz744IMPPvjggw8++Gxa/gaxvt0BZhXI -eQAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleBezierCurve [ - -"Moving each extremity will reposition the control points" -| v e1 e2 l s p1 p2 | -v := RTView new. - -e1 := (RTEllipse new size: 15; color: (Color blue alpha: 0.4)) element. -e2 := (RTEllipse new size: 15; color: (Color blue alpha: 0.4)) element. - -e1 @ RTDraggable. -e2 @ RTDraggable. - -e2 translateBy: -150 @ 150. - -p1 := RTBox element. -p2 := RTBox element. -p1 translateTo: (e2 position x + e1 position x / 2) @ e1 position y. -p2 translateTo: (e2 position x + e1 position x / 2) @ e2 position y. - -"It is not necessary to add the control points to the view" -"v add: p1. -v add: p2." - -s := RTBezierLine new. -s controllingElements: (Array with: p1 with: p2 ). -l := s edgeFrom: e1 to: e2. - -e1 trachelShape addCallback: - (TRTranslationCallback block: [ :shape :step | - p1 translateTo: (e2 position x + e1 position x / 2) @ e1 position y. - p2 translateTo: (e2 position x + e1 position x / 2) @ e2 position y ]). -e2 trachelShape addCallback: - (TRTranslationCallback block: [ :shape :step | - p1 translateTo: (e2 position x + e1 position x / 2) @ e1 position y. - p2 translateTo: (e2 position x + e1 position x / 2) @ e2 position y ]). - - -v add: e1. -v add: e2. - -v add: l. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleBezierCurveIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABjCAYAAABt56XsAAABu0lEQVR4XuXawYsSURzA8ddh -OwwxYwkxSx2dAQ1UHLPN2GQVD2rQJXLxJsF27P+/pezBU9ghl198PvAuwzt9H4/hvZnk8/l8 -Pp/P5/P5fD6fz+fz+Xw+n8/n8/l8Pp/P5/P5fD6fz+fz+Xw+n8/n8/l8/1BVpdQ0focQsiyl -h4fHcXvr93hCZVm+HQwGk+12+6Oqqt7j06ur04Lc3PiVnsB0Ol0sl8uvf56R5ynVtV/qwnq9 -3nA8Hn/ySwQwGo2mh/HRLxFAnuetfr//3i8RxHq9/uZXCKJpmqlfIZDZbLbyKwRSFMVLv0IQ -i8Xii18hkLqu3/kVYr3Q/UNgJPv9/pdfIZDVauWfPyI5XCLO/QqBDIfDD36FQE7fOHwhZFn2 -wq/g8/n+A51Op+tXCGS32/30KwRSluUbv0Igm83mu18hiFar9cqvEMhkMvnsVwji+YF/IAzi -2UG73X7tl7iYu7uU7u9Tur4+N/N4kdjtdgd+s4spitNPz/P5uUNgnuf+zwyXd9wdxwU5v0N8 -Pp/P5/P5fD6fz+fz+Xw+n8/n8/l8Pp/P5/P5fD6fz+fz+Xw+n8/n8/l8Pp/vr/wGmY0mlw5w -+SYAAAAASUVORK5CYII=' -] - -{ #category : #icons } -RTRoassalExample >> exampleBezierIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABjCAYAAABt56XsAAACcUlEQVR4XuXb3W/SUBjH8YPI -qFHREayhikDBUkbLW+2kkAUUEl9ivDMh3K2JmYk323/hpX+yPUYTQzagCOzA93NJS6C/59Cn -57QIPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+ -OF2Uey+E+4mfhCKOheE8Fyfv+Unw8fHx8cXhOE7Xdd1XYRhedjqdwDTNWjqd1vjJ3GJB5l/z -ff+sVqu5/HR2LJvN5hZtb7fbr6NfTY+f1I5MJpPPy/aRpy/btpv8tHZA9oxV9221Wn6lUrH5 -qW1J1COcuO/pdrtB1HM8fnprSIrUjVdKiUTizqnXG6/Zd55EV2X8osTxVJj9RWtT388vf/zv -2tVgMBjzk17RfXFcyIpn1zZiz/P6i7bHEQTBG37aS2QymceWZf3uD8VisTrfmDf9ec1m00+l -Ukf85Ofoum7IYvx7iZrP5wvheXhVrVbr2xzNsvCyt/Cr8IcsghypcXvJJpVKpZeRE3Qh5Ey6 -Xq/f2As08SC3iV6xKsMwCsiZvaZp96JT0FtVe5gcKJhiRJOzftQv8krPgZLJu+tMPPdrohcd -5HA4/LBP37lcLlsHOeOWSxb7OuIOamHSELXxty9XP/f9OEaj0cfDaN47vkrapul0+pU/QVGM -vE3MT0Exs9nsgp8Cv6fwLdNoNDr8FBTDvyWsoOhWQeO6R5H4bhH/cSNFi+K5p+OHImfy01DE -mf0u5P9PRSFyZeKR0C1+Enx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8 -fHx8fHx8fHx8fHx//QL7WkIkODawDAAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleBezierLinesUsingObject [ - -| v es assocs centralPoint eb | -v := RTView new. -es := (RTEllipse new size: 15) elementsOn: (1 to: 15). -v addAll: es. -RTCircleLayout on: es. - -centralPoint := (RTEllipse new size: 10; color: Color red) elementOn: -1. -centralPoint translateTo: es encompassingRectangle center. -v add: centralPoint. -centralPoint @ RTDraggable. - -es @ RTLabeled. - -eb := RTEdgeBuilder new. -eb view: v. -eb shape bezierLineUsingObjects: #( -1 ) inView: v. -assocs := OrderedCollection new. -assocs add: 1->10. -assocs add: 2 -> 10. -assocs add: 3 -> 10. -assocs add: 5-> 10. -eb useAssociations: assocs. - -^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleBezierLinesUsingObjectIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAFc0lEQVR4XuWdWUokQRCG6xpe -xZt5HS/gkw+CIIgP4oMgCor7vu/7Gj3+DdkkNd12ZVVkVmT/ATI6bS+VX8UemRadDr9YkoJ/ -CfiB8As/EH4g/MIPhB8Iv/AD4QfCL/xA+IHwCz8QfuEHwg+EX/iB8ANpR3Z2duTr60v4gRiR -vb09WVhYkJ+fn8pQHh8fBbKxsSH8QAzJ4uIiPxBtOT09lV8t6dzd3UmAVnW2t7eFH8gQWV1d -lampKQk0Wb2vEAHAEIiUQI6Pj7v+IOQ5Z2dnXQ2BX6j6nIeHB3EQLUOh8SEvLy89ICEg6YDg -bj08PJS3t7foi4T3ABh+k1XBH+zv75taqMvLy+7nWVtbEzYgXVPiFsCSbG5uytHRkdD5ECRs -HX7hTAxDzdbV1ZXwAzEgv8FGz78hZM4aCAp/W1tbgsw4VyDPz8+9MPnz81Oy15Dp6Wn5+PjI -2jd8f38HFTDNAkEmPTc311laWuJ31lY0BHYXdphfDABBRuzs7+3tLb+WtA0ETtABubi44Adi -wWTBoT89Pcn7+7vAp7y+vo4UGBQokafgGrPLQwAHmnJzc5N95OULrml2dlayTAyhKfjCnYUY -HyFlzjBgjhFFaudaRepkC1AQgblSeM5gEEVqBy3JSyf39/fd6Q8HBIlXjmDQx3GBC64pWyAQ -5+ChKQDhfgaYXHyMX1rRbHq1Vlx0HUL8CwEUBwMXa72z5/yi9g3UGAjCvjrdPuQqzkwBCi4O -4oeRgAI4/HlIoKyvr0vdO8x9D1/ifoa2+HkLwAFayqrryCWGVaXca/AnQqAd5Wor/m+UtaYx -EGSrcGyYJmzqT/pBQW+lnz+BeQMY7Uw5eyB1pwjLmXy5r+58ih+ZDRoVAjQ8NgqaU2iYHI2p -kX6LiUUuRzH4vb+GIgAH8CwPw5n2IX+ZLt+h91v0Ya8HcAADkxd7P4lW+FtYi+tDYJWjsSqv -j9cBJO3KQOh8chZABpmuQRGZn6/UWWDc1Xg/QGo6yjo5OanSfzcHBGbmL/MyyDdgMTScOuA6 -zWujWmByLmvYQpRNm0xMiIyPi3tMuxkG2NBOVypBMdH/DH5dq+kUZmG5TjTscWciZGxMOkXx -n39JMVEPwXSjVqHRLJAqF9YvLO73OrEjLPgvDGVrzA+oAIk1fzVMS/ykcJhfApgchrpVgMzP -z0tbWuJsfFV4I79hBxeJ4YVYHzDE3FSB4kyd1SmYIuWdrJW9a32W0MQyCyDYRRtzS1qdZCt0 -+0DKiCw6EI1qb5PsfZDUGTyAdrXdBCs0TAri8JiqX7fnUbfimyJUzi4PaeLcm2qXD+Yvk4lT -KDAmSwmkagSlERj0y2H6gTk4OBBaDWlaOGwCdBgYSiCuRNHk+RpNJDdDBjAwV+fn50ILRCPf -Kffq64q/S1dzvjcrIFp9cg0o/i6xpuYwCRAcpae9d0KzOKilKdQ+xGXVowwlOyCa5sEilGhA -0KxB00Z7uiPGvJUlKEWsnME5PO3SfKyShhUoUYAgRndAYox3xlq4cp4CDU99jleWpwHFHLD2 -oeDowdQn3WUJJHbvwgUOy8vLycvxWQJJsQ8R4fX19XXU9rRJIOjuhdppzV2vVUojKSfpWweC -Y5xmZmakzVxkkJ9yQFLuDG4dCCImnD5n0TTCf6TuHBYWSiGolqY4OABH0loZZjALxJkFhJgB -9l1WVlaCFxaHIlvfWWUGSEhvGk2hOkBykNaBIKsPvWsBBKdOh74XoJ+cnJie8c0yD8GChk6a -+4fFWD4LMksgu7u73cXF3R6STDoglh17rn8UzORfVKAF4kLlUTz7hP/sd34g/MIPhB8Iv/AD -4QfCL/xA+IHwCz8QfiD8wg+EX/iB8APhl1ryDy61TE1yL2FZAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTRoassalExample >> exampleBidirectionalLines [ - -| pak b | -pak := RPackageOrganizer default packages select: [ :p | 'Metacell*' match: p name ]. - -b := RTMondrian new. -b shape circle. -b nodes: pak. - -b shape lineDualWidth - color: Color blue trans; - withShorterDistanceAttachPoint; - widthFrom: [ :anEdge | (anEdge from model numberOfDependenciesToward: anEdge to model) sqrt * 4]; - widthTo: [ :anEdge | (anEdge to model numberOfDependenciesToward: anEdge from model) sqrt * 4]. - -b edges - noRepetition; noBidirectional; - connectToAll: #dependentPackages. -b layout circle. - -b normalizer normalizeSize: #numberOfClasses using: #sqrt. -^ b -] - -{ #category : #icons } -RTRoassalExample >> exampleBidirectionalLinesIcon [ - ^ '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 -qhkZiSuX+j9SKMZYbOrRmQAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleBlinking [ - -| classes v shape es labels | -"Set here the classes you wish to visualize" -classes := Collection withAllSubclasses. - -v := RTView new. -v @ RTDraggableView. -shape := RTBox new width: [ :cls | cls numberOfVariables * 5 max: 5 ]; height: [ :cls | cls numberOfMethods sqrt * 2 ]. -es := shape elementsOn: classes. -v addAll: es. -RTFlowLayout on: es. -RTMetricNormalizer new - elements: es; - normalizeColor: #numberOfLinesOfCode. - -"Set here the classes you wish to visualize" -labels := (RTLabel new height: 8) elementsOn: classes. -RTFlowLayout new gapSize: 0; on: labels. -v addAll: labels. -RTConstraint move: labels onTheRightOf: es. -labels translateBy: 20 @ 0. - -labels @ RTHighlightable. -labels when: TRMouseClick do: [ :event | RTBlink new color: Color blue; on: (es elementFromModel: event element model) ]. - -es @ RTHighlightable. -es when: TRMouseClick do: [ :event | RTBlink new color: Color blue; on: (labels elementFromModel: event element model) ]. -^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleBlinkingIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAaX0lEQVR4XuXc5a9kxdYG8POv -kPAN/UZIIIQECXzFA8EtSNBBBveLDe7u7gzu7u7ubgODDLLn7V+F56TY7+7T5zBnLszdnXS6 -e++qVatqaT17dY3Nn9//17/pNdb/Jei/QPr/6r9A+i+Q/r/6L5D+C6T/r/4LpP8C6f+r/wLp -v0D6/+q/QPr/6r9A+i+Q/r/6L5D+C6T/r2kXyK+//tr8Om9e49X/5fgXCOSk//ynOXzmzPnf -fftt/wWyKAjkyy+/bJ555pkJhfXcc881Tz/99Hibc8455y/tX3/99eb3338fKfAnn3yy+eWX -X0q7J554onn//ffL71zzYtF1n9dee615+eWXm5rGW2+91Xz11VdNV3uvzz//vPHO748++qj5 -O3PV/qWXXmq65jGs/zXXXPOXew8//HDz5ptvNt99910zqRhyySWXNHPmzGk+++yzZtasWc2B -Bx7YvP3222WBX3nlleabb75pMHb88cc3mfzmm2/efPjhh43Bs2Cnn356s/feezfHHntsGfyx -xx4r19AwKe1PO+205sorryy/X3311ebss89uzjjjjOb7778v7Y2pL5p77rlnc8EFFzQm77v7 -t956a7PGGms0Tz31VHPeeeeV34TzwQcfNH/88Ufz448/NrfccksRBr7NBz18bLDBBs1U56o9 -PrU57rjjynzRx8N9991XFOmYY45pttpqq8KrtbnxxhvLfC699NLCn/vo4+Hyyy9vFmpQJ4i2 -xj3//PP/Nddo4T/++OPx8SzoIp9lkfjXX39dtMabeZMwDbn66qubTz75pGige7Tnp59+argo -C0HyrqHjtwWxSL/99lvR2BdeeKG0Yx0//PBDue59//33Nz///HOhja62TNvY77777rh506jb -brut3EfH9Xfeead8d+2kk04a51d/tIxz8cUXl7buhXff9bv22muLlRibVruOv7vuuqvwZt76 -WBPuy72sg7aZFz7NgQUZWzt8uGYd9DcH7fTDFxojBXL44Yc3t99+e8PUmPFmm21WCJ911lnN -wQcfXEwPoTvuuKPZcsstm6uuumrc/J599tnx2OH33XffXRbilFNOKS7FYp566qnFbL/44ouy -AHvttVdz0EEHFTd38803NxdeeGGhcf7555exvU2QKzrqqKOatdZaqxFvuA/jrrzyysV96LPT -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 -rkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleBorderWidth [ - -| v shape | -v := RTView new. - -shape := RTBox new size: 50; borderColor: Color black; borderWidth: #yourself. -v addAll: (shape elementsOn: (1 to: 10)). -RTHorizontalLineLayout on: v elements. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleBorderWidthIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAACXklEQVR4XuXYwaoBURjA8YmF -lTyHslSEkuy9CllQUvIsFhZSs7YgkWdQxFNg5Tt3ztyOzGbOOW7d1P9f32Lqc+/M/GYzEyjF -75sK+LeAD8KPD8IH4ccH4YPw44PwQfjxQfgg/Pgg/PggfBB+fBA+CD8+CB+EHx+ED8KPD8KP -D8IH4ccH4YPw44PwQfjxQfgg/Pgg/PggfBB+fBA+CD8+CB+EHx+ED8KPD8KPD8IH4ccH4YPw -44PwQf7c/X4XlzH7q9VKXMb8ZjKZOM3xePTa3+/38f5gMBCXWa/XcrvdpF6vO81isZDT6SRB -EKggOlDb7Tb+h41GQw2HQ+tMp9N4v1KpqG63ax19Uc/nU3z29UUVCgUVnXDqlEol1Ww2Rf9G -X1Aul0udbDYb75l91/Hdb7Va4rOfyWR+96/X6wuk3+8rfWwbA6Jvnsu+AXHZv1wuL5BqtWrd -n8/nCRDbfq/XS9xg274+50/2DYhtv1ar8UH4IHwQPggfhA/CB+GD8EH4IHyQLwIpFotqNpul -zmg0SoDYXjo18vsNtu3rl9lP9g1IuVxOnXw+nwTZ7XbyeDy8PiVEN81r/3A4eO1vNhulPz20 -222nWS6Xcj6fnd+Mx+Ox6HNy3e90OqLPyXU/ekBUGIbOfz96SEQ/5PEx/3Me/2svPz4IH4Qf -H4QPwo8Pwgfhxwfhg/Djg/Djg/BB+PFB+CD8+CB8EH58ED4IPz4IPz4IH4QfH4QPwo8Pwgfh -xwfhg/Djg/Djg/BB+PFB+CD8+CB8EH58ED4IPz4IPz4IH4QfH4QPwo8Pwgfh9w/9AEtPZnpj -vs3ZAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTRoassalExample >> exampleCellLayout [ - | view substrings | - view := RTView new. - substrings := (RTCellLayout >> #doExecute:) sourceCode substrings. - view addAll: (RTLabel elementsOn: substrings). - RTCellLayout on: view elements. - view @ RTDraggableView. - ^ view -] - -{ #category : #icons } -RTRoassalExample >> exampleCellLayoutIcon [ - ^ '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' -] - -{ #category : #sources } -RTRoassalExample >> exampleCellLayoutWithCircle [ - | view els | - view := RTView new. - els := RTEllipse new size: #yourself; elementsOn: ((1 to: 20) collect: [ :v | 50 atRandom ]). - view addAll: els. - - RTCellLayout new lineItemsCount: 5; on: view elements. - view @ RTDraggableView. - ^ view -] - -{ #category : #icons } -RTRoassalExample >> exampleCellLayoutWithCircleIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABjCAYAAABt56XsAAAE50lEQVR4XuXbbUgcRxgHcFOM -xoq2Ul/S6BnPpipoowbfuaRJQ0BBBV9Qg1grWvAtSgWN2qKiGLGo1BNLiAVrlIpB0PZDUQ98 -g6JWEak5fEnUL8mHUigUGpJ8SJt5IAvLsLO3K1e19//BwLH73I47z93NzM7ohA8fPnz48OHD -hw8fPnz48OHDhw8fPnz48OHDhw8fPnz48OHDhw8fPnz48OHDhw8fPnz48OGTq66ubh4YGPip -ra3t25SUlGxRnMFgCG5paTH39PTcj4+Pv6p2zd7e3h+UjsfFxV3p7u6+r/Vva29vvwuTiNjY -WNPBwcG/fJmYmFjmY728vN7j40wm0w29Camqqmqi9+J/DRQoJUMqZrN5lP8W8TEWi8WK34p2 -UlpaelstIfynWCkhU1NTv+G3pB37DT0J8fDweIc/n5SUdB2/JY8pIcTf3z9Q6tSpc8ZvRTti -jXteLRnLy8tP8FvpiFVWVn6plIzd3d2XoaGhH+G30DHIz88vHR4etlAi9vf3X9XX13cGBweH -4rcMPnz4Tlb/8RX1IXre4+Pjc5ZGWVJf09zcbKZjSrHp6ek37VFvf3//g83Nzb8cPiGnGWdn -59N63jM/P/+YHwDQsf+yXpiE6JWXl/e5aIicm5tbgt9CJ2giSefwW+iIVVRUNIoSUl5e3oDf -QkfM1dX1DJun/MMng465uLi44rfQMWCLUh/PzMxYpWTQazqG3zLHLCgo6ENWLuC3BD4MNTU1 -rVtbW8/oZ2hlZeVpYWHhLVEsWxfx7OjouCf9bLG1+B8jIiIu8XExMTEmmj9QH5OcnJypdK2G -hoav6fkZXWdxcXE/LS0tT1Svr6/v+11dXd9L9bLnbzPR0dEJDpUIPz+/c3t7e6+URk7T09Ob -fDxbA7ksGmllZ2d/Jo/lz1Nd0rmQkJBw0XVGR0fn+HoTExOvieIbGxu7HCYhGxsbf6qtiQwN -DU2pNTJfDAaDURRbUlJSI53b2dl5oXYd+sZKsW5ubm/bqpcl7JP/fTLYz0iWrRulcoqh+OLi -4i9sxba2tvaLGp09MXGh45mZmZ9qqVe6Tl1dXYet2IWFhT2HnnnLS05OTrHWeKvV+rf8k93U -1PQN628G5H2M1nql+LW1td/1xDt8QoqKiqq1xs/Ozu7Yq14pfnV1FSMhBQUFFVpulHabUHxk -ZGScrVgtj9UzMjIK9DRwbW3tHVux7InzI4fo1G3dKBtpPZTHj4+P/yKKpT5Da734nboAbeUR -3STNHzw9Pd/l3zM2NrbAxy4tLT1xd3f30Fqv0WgM0TPsTUhIuCqKp07foeYigYGBH0xOTv4q -v8m+vr6xtxiV+Ys/9QVUwsPDow9bNzWmNA+am5vbTU1NzRXF0spkZ2fnd9LfODg4+LPDTQzx -4cOnRs+mhaioqPj19fU/qNBrW9fOysoq3N7efk6FJoPyc9IzqZGREQttT1W7Dv3LBExC9Gxa -kM8ftCzZioax9AhFfpweTuJ/NZz0b1qghSjpvJZFKVFC+IkhPeXFz4bT4TYteHt7+1HRcn0a -vioNZcPCwi7K68JfcXzjKDYtlJWV1VPhjwcEBBgp6bRmgp+JN/A3LZxA+JsWTij8TQv48OHD -hw8fPnz48OHDhw8fPnz48OHDhw8fPnz48OHDhw8fPnz48OHDhw8fPnz48OHDh+9QXgOox3JY -RZSQNAAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleChangingCargeInForceLayout [ - -| v es setSizeAndColor s layout | -v := RTView new. -v @ RTDraggableView. -es := RTEllipse elementsOn: (1 to: 30). -es @ RTDraggable. -v addAll: es. -RTEdgeBuilder new - view: v; - moveBehind; - connectFrom: [ :vv | vv // 2 ]. - -setSizeAndColor value. - -s := RTForceLayoutStepping new view: v. -layout := RTForceBasedLayout new. -s layout: layout. -v addAnimation: s. - -setSizeAndColor := [ - RTMetricNormalizer new - elements: es; - normalizeSize: #yourself; - normalizeColor: #yourself; - alphaColor: 0.5. - es do: [ :e | layout set: e charge: e model negated * 5 ]. - ]. - -v addMenu: 'Change Weight' callback: [ - es do: [ :e | e model: 30 atRandom ]. - setSizeAndColor value. - v signalUpdate. - ]. - -^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleChangingCargeInForceLayoutIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAACoklEQVR4XuXcu4oiQRiG4bls -UwMDQcFAwUQwUMFAvALRREUx0RtQQcXz+Xz4e/iKaZNld4Nhmx3eF5pqtCepZ6rKqD88j9// -1Ad/Cvgg/P4EUqvVrFKpWKFQsL89nM/nrVgsWqlUcs92Oh03+n/bbDaNP6XfBGk0Gu9JTaVS -bxzda+JzuZyVy2VbLpfWarWsXq9bKBSyaDTqnovH4+/nE4kEH+S7IMfj0dLptPV6PdN/fCwW -e98LIhKJWDabdRNdrVa9brdrz+fTMpmMey4cDlsymXTPt9ttu91ufBT+GcIH4ccH4YPw44Pw -44PwQfjxQfgg/PggfBB+fBA+CD8+CB+EHx+EHx+ED8KPD8IH4ccH4YPw44PwQfjxQfjxQfgg -/PggfBB+fBA+CD8+CB+EHx+EHx+ED8KPD8IH4ccH4YPw44P8vuFwaLvdzmazmbvm87kbx+Ox -jUYj0/f6TPd8kAA7nU6m63K52H6/d2+R0P35fLbX62X3+50PEtQK0aRvNhvbbrd2OBxstVrZ -dDp1IF+Xp+8UHySABKDVIZTJZOJgtG0JR+9v8a+f9u6VHwmiSdYZIQTBaFwsFu5cEdBgMHBb -mO6v1ysfJKgVIgh/21qv127U9Xg8HILOEf4ZEkB6d5cgtCK0LWm1CMQ/S/zDXSDa1vgg/zj/ -15O2pa+D3BOAYPSdVokgBKLDnw8SQP1+34HoXqtFoyAEo9WibUsriP8rK8B8CE28Rm1Z/srR -KBz+GcKPD8IH4ccH4YPw44Pw44PwQfjxQfgg/PggfBB+fBA+CD8+CB+EPwV8EH58ED4IPz4I -H4QfH4QPwo8Pwgfhxwfhxwfhg/Djg/BB+PFB+CD8+CB8EH58EH58ED4IPz4IH4QfH4QPwo8P -wgfhxwfh92ufH5Zw558V2rYAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTRoassalExample >> exampleCircleCould [ - -| v | -"The GlobalBuilder allow you to normalize the size or the colors across a number of elements. Consider the example:" -v := RTView new. -v addAll: ((RTEllipse new color: (Color red alpha: 0.3)) elementsOn: Collection withAllSubclasses) @ RTPopup. -RTMetricNormalizer new - elements: v elements; - normalizeSize: #numberOfLinesOfCode min: 10 max: 60; - normalizeColor: #numberOfMethods using: (Array with: Color gray with: Color red ). -RTRectanglePackLayout on: v elements. - -"elements provided to #elementsToConsider: are resized and have a colors chosen between these elements." - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleCircleCouldIcon [ - ^ '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 -AABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleCircleLayoutAndEdges [ - | v els | - v := RTView new. - els := RTBox new - size: 10; - elementsOn: (1 to: 100). - v addAll: els. - els @ RTDraggable. - RTEdgeBuilder new - view: v; - objects: (1 to: 100); - shape: - (RTLine new - color: (Color blue alpha: 0.4); - withVerticallAttachPoint; - yourself); - connectFrom: [ :value | value // 2 ] to: #yourself. - RTCircleLayout new - initialRadius: 260; - on: v elements. - v @ RTDraggableView. - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleCircleLayoutAndEdgesIcon [ - ^ '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' -] - -{ #category : #sources } -RTRoassalExample >> exampleClusterLayout [ - | v | - v := RTView new. - v - addAll: - ((RTEllipse new - color: Color purple; - size: 10) elementsOn: Collection withAllSubclasses) @ RTDraggable. - RTEdgeBuilder new - view: v; - objects: Collection withAllSubclasses; - connectFrom: #superclass to: #yourself. - RTClusterLayout on: v elements edges: v edges. - v edges do: [ :e | e trachelShape pushBack ]. - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleClusterLayoutIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABjCAYAAABt56XsAAAd/0lEQVR4XuWdCXCV13XHj4QQ -u0DsIECIRawSoBWQBAIJJIEEQhJCCBCbBAKxGbMaA47BgG1iTDHBruOYJnachDqLU9JJXKcT -J5N2XKdO6zZNO0mmSdOmSdqkyaRbmri9v6d31KvL971FCxbozLyRvve+99737rnnnP/5n3Pv -J71fer/0frlfpK/0G2wfZ8nac2NlWoEe58vG6+MkdakeJ0t6Re8ftS6U+VJ2crSk5DbJjd/k -mcHeJc/9b5E0fYLXhsm42RwXy65PcTxUxszgeLns/DjHI2VSBseFsu33OI6RmD6r5NCXxsn0 -pb1/ZCMUZvQYmbKYgVwjR7/K3y3y5D/zd5nseKlu4CPvjJcZy/X89CFLd5iBjtXjBRPya+3P -25By+NWxMjWP/yfI7BI+J0eqLgUVmLpeHvnWcElK7/0j78hK2fOZVXLwiwwYj51y/b85TpOi -Q4kyfu7EiROncF5jY+OD9vtijdjH48ePn2Qfb9myZa99vGnd1qP6/zwpOcZ3LZCyUxz3k0HD -02Xl0V6rhAGSMEb/xyUxODMkb0dlVsMHeG7jxo279PVBgwYFYsfWrVv3hfrMwYMHJ9jHLS0t -D9nHEyZMmNzueOykVP2/RFpe4xoSjSvsdcpYKOuf4sebgJyvz5WVlVXzd+rUqTP5O3r06PH8 -nTx58jQ9p6ioKGSQNgbTxz42Sm3ys6a+ffvG28dpE3JWZ0r5WT1eI8e+Vib7v3DfKmGa5Gwa -JIkT+B8kdGD6tR+45wwcOHDQnDlzFtgWsm3btgP6+owZM9JCfcewYcOG28fFxcVtCqyrq2ty -lLWrHYCYPz/XPg66zv/CetNlxYP3nUL4gVvlys/0OMaIe05GRsYi/o4ZM2a8GdwRASibn19s -uaQh7nvi4uL66v+TJk2aYr82b968HCu+TLRfGzdu3MRQ8ccoc028DBjKdS+VhhfuCyUMlhFt -PjtDys/MG52/0X69tLS0yj5esGDBQvtvfHx8vyFDhgzV14cOHZpon2+Q18eq5eF3glZXyOAN -lwnzvAa5vr5+t5+FmOuo9nB/sZmZmYvt5wpk03MGmf31PakM/DEDNFuW7tHn+vXr198E6LZZ -vnr16lr3fUuWLFlZWVm5WQdNYwui7kxlszzxT3xHAAIbt8L/KZLRdj4KbT3vyR81ybPv+VmW -q5BVq1atx/25IKFOzn+H71giWz48XmYuv6cUQkKHUgpyC9sF4uzs7Hz7eO7cuZnO6wVB5Q2Y -MmXKjIqKijor8NfY5y5atGiZfVxeXl7nDSKqn8yXTTf0eObMmW2xKCO+9Jh7fk5OzpKRI0eO -sZ+bNWvWPK41RmL7oJTVcuj1e8AqKh7ZKk/9a6z06dtuQBYuLLSP09PTs/T/5cuXlzszNw6Y -W1hYWLZmzZp646YCgXrAgAEDm5qa2gXXxYsXt5ulw4cPHxXJdRIfWt3oqocZ3FRZvE1fQxEr -VqxYe8cEGz16XAB9rVmzcbAMb3OFIEWSzB7pourl4vf5gXESP9B9ffbs2fM1sNrB1yCnue65 -BQUFK43rKtHAjiQlJSU3NDS0hMorAgM0duwE97mEhIRhrgW0Dub0JVx3goyc0haHMh/5kuuq -dCJ4uVh+7w659u89jfQbwoWVyN7P6eB5nWdMPiMrKysPs1+V0PzxJJlZbA+Q7dbUZSQmJo4g -mBuryratyXVXKraLsydDO1IyKyvf/quyVo5/nd9h0zGaD9mxzAYhKNRk+Ed6nIXMlaKDSYmT -0xS+uolYWwKWlpa5IDW3tBVObv1IcHDvCJAG4eQZyLsCt2Viw4Zly5atSk1NnevnrkLlKitX -rqz0OjcvL6/IPh4pyZkLjBuzcpOc6dOnz3bRIMLzrqJRjs213XUplO0fzZXqJ+zn1q9fvz1g -yrt2+fJCJIArFqzda/KNJI779+8/wEY96udRCoF93bp1W6qrq7ea9w0O5a4CFEhJyTr7mM/e -sWPHIS9kZxQ8xy+2ae7ixQ5g6a5bU/e1SR7/x/cx2Xv2vaPJL/7afZ7ZTO7nZr9eM1QVmJub -244WJznkOSwE92Ur2M9deYlRXMr27dsPukpwgYYLMEy82gewcM/Bar2+h0Q3K7b8jMnsf2sg -9m/fp9jRn1kS4144FwcqMSxtSrjPYNCxBjeOqNsCbvLXVoifu7JymRLbz9uoSWOM665sCyEG -GmBxx8AvXbq01O87VekViftumfzoR7gvt6DWLWICcRGJkQttjato52eNq0kl03VzBy8hNhC0 -U1JSprsKMVK8f//+07iscO7Kdil2/ECpFgpLCiK9qV4WwjXX1NRstZ/vY0TzIy/hM3G5mtlr -Umzi0aluVQboY4U0f5ovG2LRIioufieAT5s2bZY9QH4C4tky+9hnkmRWu5mJ/z927NjFoBuM -yF0ZEFBrUyZKv4DY/NyV0iW24lX5bqyxhTwJ0AFLjVfgOH3uvFybOe42gcdBGTXLNx8PEReK -uRgKS8FYkOQHg9sNhsTG8dmbE8696/Bd1QR2dUPh3BWiBS1kz549JzQPCeWuFsVXXajMrz/m -kp0uknKlubn5GK4MRXhNvKmSvXGETJzfDbB2+UHKqeuGP/B5L9ZVJUUyaxhYe4YQuF0m1ktm -ScGuhWlL1tpICf7qypUrH1PoGc5dqahVbNq0qVkH1UDVOQoY2rkcmVbANWdL5WP29+IyfcGC -zF65rc+VfynNr9gRygPwudvkys+7hT7nocgplE9FGanj0wqMixiplMPevXtPRkptQJ/U1tbu -0OPjx49fOn369FPRoCvltYghmodgIV7uivjFNRumOF0VF0rxwO/S0dtv+FUYta4TiEnmczfI -o39rSsUPdZky6uSx722Ryz9ZNHtZwDcbbF7uFRT9/DIDwl9mazTfS/4BQ8zft99++8dersYX -fATdJDURmwNzM+5Ro0aNtQffrcM76DHwW9ycyQYQMMX2c3BfKK5LoTAfdnjci7/RWUac0Pwh -UsE6CPqbRpx9a7zhjCJ9H7AY6Pr2W9/4KQRjpO+rqqpqCCZ3k8gpTDxY3IZNfJLBUBOGwTax -KNErY8fCbHaYIM8DBbaBE3nmP43L/3GXuKpGuf7fgbrC5s17NNgZ1LM62s/qJwMT+bxS2fcH -0bwvZ3jZITcuRSrURHAduCqXHLQnlRbFvJLc5OTkaa6xEMjVFWIxWB7W4MJlUBvuq1Y+8Dfr -5ORbnVIGSAk6fWXMnk9rUkQCx8VDKXgReWEHSAYMYzaFCph3KnLQCFMc+u7MoVmVGpMiYqDN -d4CwyHNQiq0QjUfEA6+gzO+1S8CaaymVAmhAya4ScK+4c5d56NJAbtHWBVwoGudC7Iw4amsx -scEtTkUiZtLFmYFdH8m5AA/yAwbdTg41gUNRrmXw+wy0LrLY3nEAGRJdEkBT3Eq34xDjAOcV -SQIccJGy8qhdZo5YxplaQY2ceXeOFLao6aJ5zByq48iRI4+d3/D8X1EZ7IzSw+F8X3idkpLq -xyvZM1pnqgm2NWoRDCoxRbN25ajsCUb+w8MktrOJE6okajWAACyhI7k1E7xeLv0g6nca1vKH -QeuI8Xp969at+wMWFNN59ODFY0UqAAx7RrtKI7ga2anuCkvhoT1cMAS2O+aYQadwxgNvgCUR -C/xKCpEK1gj8XS0PvBFVQx6ZZZU8/A6NA1xEXV1dI6bLRYFEKDIZWnugSRYPjJLJ2SAozNrO -kKOVtWvXburMj2VQmcnu8zt37jysSSmTSAMxg817qN0DUs6cOfM0A49SsCosIBpUF5blWL8+ -kFctiCs9FjVAUXIsXYoPc0wQBtq5XR9egpm7WDxSaWxsPNzZH87323nCm2+++b3nn3/+NcOr -ZZl85AhuisDMNd64ceNVmGr4LoJ+pIlr1GmD+V5in+ZjObLuUq1JFiP+AHycKTw9SaDq6OCC -2bEa3EY07zMz+oHODgC1eEVDzbv3nDSz/yrWDa/14IMPnnv55ZffACHZbardJdBAXItBZQlM -FK6jOLbpFSa83d8cFl1VyINf6aqL0gAZBe2xoSu+FzTFb2kZceOXBw4cOKOdkd0ttMwGllJk -P3CTSYAL1J5lFegUE0v+SN5Pob0Hq/Hy9V6D2dnvQwHlcvjLMyVv5938nQkyehoKWTyg+gJF -OpAkSsFlgVIpKbSWey/9g/QUgb0laNr5gRct4dUmFEl2DrSVe11oAENzeVJ37W59J0phBmnz -misUuaJxNXSKAEDujRGPiQnHNQ2H1c1ILNoNvIXVVegHOgDusjygu34wJs3sdj8fCsSPa3KV -Z/cO93TZaQjHGjn9F74nsGASC+kvg0dGMrPJ3qGrbSRFFmsSsUYGt6ODY5QSb3ikdo1xwFY/ -90b+cLcCdlcJCe1KUw7XRayeQvAzQfCPZ6TOTAeu7d69+xgLXYCI2kNliyaEhureYgpQD8Hr -MLvtJQT4cqyKoAYWVx6LpIzWUBd9uAJk5H0EeRI8yrntuCHzfZFYT08RfrdSPgWy+Tm//oTW -BMbUPTbKhb/vii9WZSn+R1mQibpeUIWlZZCA165d+8Tt27ffMXnCeWYPdQy6EFEmx1gkrgtI -zEpa8qR7KXBDyZBY87tw/VRFS+asP8H6ljjpN8jzTbT3LJL1Vxg0+mm1t4r2HBAPA8og84EM -knEpqyk6kTxiJUA61nQwiPRRUbY9ePDg2ebm5uNk4TzP6zU1NdtYA8L7iFPMGj6Pz4Xyhg7n -+3CFUBmGVqnn88zjyKVLlz68q8+NXzfKjf/p6UqIlbj4RvnQr6tGHfosE5Simc0isLQvUBaX -0hP3FPojo4bygI3F3VEfyc9cts6vlPp+CBOVCakgiJhWva5m+3b5nV+VJDS+GOhsNBPOjrcJ -MmpqhRx507eCqq07PVEJPhzRXV2MSV8X6FMHdcSIEaNNFXVvtKQqbpzJRI6FhVTK8T+5MwmT -3M2ti1cWNvRkJbjSHQGdnAgEyazWJo1QbaSdkSXS8ILWnNoJvUkEmPLMjSc1OwbBRMNB3S0l -2BJpn5YXC8Ds1hVa/Ga7y/F9l3mmtBhYszGl4iBr8OyF9SwhxlQZMJ6n4OMOBLXyeBmYGIoF -6ColuEJByf58mzsDtmupWI8NM7Cgp7hmGj9Yfn3HC0R8dtYZJmPb8gIgGqZK8seDfMSuGYCQ -yFdAQmSdLLQHVXk9ghvKfK2rlGCLblSj3wW9/tprr73d0tJyStEdDywClMeDghHIkIciPn3w -u/QB+tMHQVkfKFkfJKZYXBAZTiem8KDWDlLlwbiBXHlAxQfAiXmwr8sOufYfXTIQ4GoSOwaZ -NkwKL/6+csvzE5xG6miEWY1LocHgmWee+SR5y+uvv/6ty5cv36xd3HjpifJP/vKNN9749tGj -Rx87d+7cDXPOp27evPmHTz/99EumQPW5V1555csMJAPDJANGG8i+Jpoulu6QXKl6PFvWnvd8 -kSVdfm+cKHNK6+XiDyoqKjaSkHXUd4cS2ABFLQTrW7dufZXZx4BSNyevobHt+vXrn9q/f//D -1MU1qGOphw8ffhRLIBGlM4XXiAmgGnqrXn311a8TF5ntFy9efJ4yLfQOioI1gAkAvuINsCDi -Cm2hvE7hzFjSpnDMQpeJLhEuTKh/io4MatwMAPGCjvOy/ntuBatcYzvzPbZfZ5BQADASN8Ls -JVYxe2kFpWJJrIHDMkhnHYmVvRpK+4zB/Ob5A48++uh1EkuyYuh9XbOCG7LXCVJRrK2t3cl3 -wLvx3azeBVmhLKga3JWrMLtLpZWrjYlFQbg9JgLXoSUFFIpimQDuRjdubLUXmf7/QEnixGLZ -/fvmhOROZ6hm5jIIuAZ2RODCFLlhBSiZOr0qgcwd96csr67J4P28jx/LALkoib5c/mfbJnA9 -iFAZY8hIlA6HpmtLVDleFUllIDgXvoxGcSaHub6RvMdenhepwryEc7Bm2IuA6wxs0nb5J11i -VayexYwJVPx1u/UYEDA9s0g7/KBiQEUMnL0sACXQA2XiUQDv499PnDjxOPSM+71KNra52mBf -Le6J62AXIPIHuDACJ8uscV92LsG5POf1+WoAZN7EGKxIM3AGFEVhZbxurCHd6/oiVRiZugkH -Zd7uxNSCXQjGDKWnl5nOD2K2KGvrsLLlzHCQmN3yr/Vkm1aw4S8zXc8nEcM9UuIMlYi5S5+1 -K56BYiZjOcoKq8/nedpKWTuIW7Lfj+sENLDaK9QERAlYM5PKzc9wu7hBsnlccqj1laqwpiUn -PtHaElTxiOeJ2jqKK3FZWdtvMrj4X2a921VC7AEuu0vDVLACfKydYatSmNm2e/ESr657+sb4 -iyKMkqdDb9t9uXqNJIHmexcpDe5VQ2HzG9ydvYtEKKG9lolIjPNalISXIMYo7aJuNjCWEtuH -ZNy3+5NNWnQXTzVrzFXN1r1IlMPAoxx3fbgDWeejBLevix+Ba2K2hFME4te+qdm1bsFEAMeN -2huY2VZF3qQ7BRUWFq7y46LwBrDZXnt7hYifgQmLeyKw+xGguLHmGZfeaV3048MhrpKDX+KE -hpqdJ7yQAb1WDAqlUh4hM38zQ4PJ0hyPalkRFLsmXpH80EhqHxpLQFdsfMbg2AUt2yJI2swE -ybD5KzYZ8PtsXfPRkViLVWAlWKoNTubKsv1F0viK7xvJ1on4uuQZE2TA8JeRJFBoXesY7mta -20DRWEM0pCAB3G+m8bn2Xos6m8kfCKjukgLXEjnWnl0UEsrSEeIgBbWygsomU5P5TTSLj5xJ -WeyuLrhD6OnlhD3Tn3g3UnqDoI0S/LoAQVO4JfXbkfRkWTzP8NRhC9rtceIKkBgaXI915RTW -oKVS23VpnLOPCfzudoDhFiQlS/oaxupy/cs/9EJTbNsEJcIGz741FCk9OVkWVIWejVJ+drRM -8Z29pdLyeS6EmBAqWwfa0pITDJQlHcnsqbaFnEGtIGEWQMEe3CBTnUWMY9a7rgvR1WC2uGs8 -QGb8jnDXift1d7Ogyz3QHx2/fB9QvEuzeDROLGB2L+pb83ilnPhTr/OwBMX+WA7vixStOEin -hBwnSWYVFwysfTJMPWSRnf/YK5pgHPTYVYharBcqcld3AZUjWfGFYkByfu5dr4W/TPyZkt8Y -mc82Jy9MKmlmVptZsjDUoIJWUILtlvDrHWF0GVg30QpFOyDszWvnBLa1BGNPnK4Y9mrk9ltq -7bW8AmuJ1GJCKUZTjIhX5nKywcffDHUOWN0MVl+dObTrAGujgYh2HgKl4rXlUTjhR7s7jrrI -C4SjkNQN8qGqjsQhr9eITZGgw1CKmSY59fadHULKDMnbOdinV4ggzQDq3lXAuI6ugILHgiuK -dsmCK5Cg9rHtz8kjsGKTK03yc10IMdFexuy+5m6KqdA+krXzkVhMVILZ86HqltQ1Ke8UrfDD -USqopDPXZSqZgf0V7Q3KNHu23Faem+H7rUFBWX4uEvfnbnCmLhvXHskGO5wzNi4lp1JOvmXf -5yQiyTJFkw1y7u/4QtsC8KHuTqLRCJ8ViR+ORHRvdzeDd/dSRCnkD0pm+rmuIPk5hRzG7zth -oe2d7WyoPLlf2krcfVKIQhyvBfcz3hvVjy2V/V/Y1br5cIwOZGc6LyINiG4SFi6OBa21zEn2 -2uUQSl5C+9vW4Pe5cHG4Ut/8wQR8r4ZzdjllsMvSN5wk8/dbJMqtMTo0iDVy9t0G+eBPI+GZ -Qikimj1KbM9WOGTjU7ohjJdAJAZ9echufNwQsx7QYPcEhFo+hxsKt60UyTDu3IeRngtzDc+m -ywIHytBxsRLXr8MuwRSsbpXKvtsdrJUsi2SRqC+wiFm8PdxqVXVZXuSgS6Vr1g5JahOBfq5L -aZlwlDwoTC01lCUBLlrXqF/8vtxNIY/AV3dmSTFJ4dmzZ6/uX3zhzVBLIzTn8ILL9APbx7rF -OTS4vYlMKNelpGa4gM2eJn6MMWkAljwtJnsje8f7NjREIxmy+kyqLNrm9Ro0d2B7Prn849o+ -Z/+yM2vVcW2YOfTH7du3vxnJ7nF+yaO6M69gb8eScK4rSMNkh9thVbN8v/PCEonRiH4YQZ37 -QFEj53+92cr58+dvHJ/zws9Xyp7Pdsg9GX+LP4a1pXbCppenTp36oN/eiDoR7OTQfd2LP1J0 -CB1uLyYK57rUNUWyKAjP4JVXzZOS4/adIjol02VhA7Q8K6ygRHApDALZKrUHuJlwtyPyEhQA -xa8MMFj/woULz129evVl88MGhVIIpVRLoXfsZu0FTUnOFPm4lcepU6bOao1X/kwDvFk4xdk5 -R1esJPYV7o7DBlwmg09GESgFaMiswRVES5mA3OyZTWAErkJzqCJCKcTOjfxcm03LW8G9WK3C -Lkjp7hXhtrygHp4+a34e2+VG6l02RLNrQzQCGaZ+EEjIbIGmiGa3BxreXEJPd9dhYKFidCBD -KcTu4PC6awHitUOcnQu5uwmhjEiqgqwvZxzGjxs/Kdy5tfLot01Z/Ga3KGSqZNexapS9e+F3 -sBA2b4lEIdpy6j4PQlIrw/XZbTkoxGuWI/bNwmi28zrHbijwolbIIVxAgJK8Nt9vR9kY2mPt -+D0fxe3xAKl1dvOcDstS2fois2OojA6UZN1b1bVjYiUlN9DFMuvQx/1iCEUsLIOZyWDYVkFi -uk2e/kWoLB3Zt2/fqUgtxHV39k3HAlm0mWC4s3BKAYgwwYh/xE+Yb96HpacPz693bwvYrZIm -xQ8Et9J+2G/BPzJ7Qkagbpws89b6/Kg0ulbgmnBjLkdWLae/yRaD4a7HWMt+r+eLYne+xH2q -QsFkuDp3UqkrC6cUausYGZODjBzl0hq6XBoDm8tMkrTyu6IQ7khDeZUBWzNn2+M+7Gie1rd9 -Eq40pTzA7vwYF6n5zXBt4VFx9z1UqZJT3/DD/rQg+cWSYE9aAKS0TL3yHb/PCN5bpNoGFmwY -2mX5RkfyE/fuZwHLMLkEvl/3WvdKAClIsRAIpaEML+xO87TX+90g7nUng+CgV9L055U/2N0l -5A4uSlQllbT2ELzn9flad9FkcFfss7+F+yORfl8UQmO2u8ZazdwvY9UsGYSmtQoGzO0LJnHz -Q1luq44ftUFyCJXDtXiRgPYm+66V6FI3m5fy+g5TuBq9KKOgXGEzN1WWniAmT/n55sxDN5WL -8jpH7/asSRkKIeOHC3KpajJjP4W4t1h179JpIbghGsC1A8ZvkL3WFtplWkhGL4omMLHa7tm4 -pLlHKENvClYnj32Xi/NqalPLUGVpUYkcxKsEDDvqpxA7Sw+6nEGhBlvdkXu3affOoW6d3IXc -Xt2a/O7tcu1Xxk2dlp4mVfLwn3OBbge91kPURelg6f1GbCIwTuIHmWrlOTYH8FNIJIUym8W1 -yUTbvTGIetvwIBM80iOzb+fK3L3jucEkO2BITxT2EHRLk8ozBTdOzlDOCiSDC3CRlU1h+Ckk -EprG7448S2Tz7+p+h3R9NMU/86shMiLFTwFem+4slYaP3HO3XoXdDOYg5Ckxendmdui0EzIX -AdG4sCX30Ef8qBMX8qK4tODuqW30jGy4mi2VF/TYzpWoaZcntNxiKYAVB7Kt7H6cuxTDdpF6 -69VV98KtV116gayexK45rhU26npxZUG90BEt/Eo6hruTml0aaP/cs++Z7/1ZKGLThcfONbRj -gucmZZW23uQrcBM00fvC35PCehMaJshXgrtwxmhjtlviJW9JTk6eanNZHlB2czsIPKv2oeT4 -ue2aJ0oKVjdMGJM8w/H97fp22Qha/3dXO2HNduelulFj9cfkfpHW2zU89DY/jK69nOTlW7ys -w866vRTi+nSD1ja7iqXW7hKe7m50rpW4tYtdmWe/SHe6uqm7cpOvuy1jZGoee8orpWF3lABd -YWft5QpeCnGzdHIQ+/ZICDvhuS2guhl/W3B3mOc7FOLDQtyXQnzJl/oPxQd9MvCzKeNMIMNl -Y4JQCnEJP5TBHXTs59g4wG0Ncheq6k2HVXKl6gl7HT73tB0lydnSG0ULX+wUsUaOfS2UQtxu -luBGAXlepKQdJ4JJaVthbJRMzsmP23AFqw3wb6bezWZjHW5iu5+ElVtmYBavk5N/ZnNBphby -b3pH6SBkNVD5zoZol/bQO/9UrFrbFqdoJ9o+7exXtKeWW/QxCVjnJ71fIhN2F2KHIk06GcBl -suOlVrqm/xBuODNFMtaX9W35DPcVDA78qG1y9ReaB+XJxutqERzbG+RMkcz1vX+UOyEs2261 -ktatQBjgImn6ZOu92Rte0BwhuDv3M4AHNs2xQUXvH8VuFANH41Q5vX80er90i/wfUISuWm4c -UUkAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTRoassalExample >> exampleCodeAuthorship [ - -"Code authorship - Red dot = author, purple dot = class, edge = commit. -" -| classes classesToAuthors authors authorsToClasses eb v classesElements authorsElements l | -classes := RTShape withAllSubclasses. - -classesToAuthors := (classes collect: [ :cls | cls -> ((cls methods collect: #author) asSet sortedAs: #yourself ) ]) asDictionary. -authors := (classesToAuthors values flatCollect: #yourself )asSet sortedAs: #yourself. -authorsToClasses := (authors collect: [ :anAuthor | anAuthor -> (classesToAuthors associations select: [ :as | as value includes: anAuthor ] thenCollect: #key) ] ) asDictionary. - -v := RTView new. -classesElements := RTEllipse new color: Color purple trans; size: 5; elementsOn: classes. -v addAll: classesElements. -classesElements @ RTPopup. - -authorsElements := RTEllipse new color: Color red; elementsOn: authors. -v addAll: authorsElements. -authorsElements @ RTPopup. - -eb := RTEdgeBuilder new. -eb moveBehind. -eb shape line color: (Color veryLightGray alpha: 0.2). -eb view: v. -eb fromElements: authorsElements. -eb toElements: classesElements. -eb connectToAll: [ :a | authorsToClasses at: a ]. - -RTMetricNormalizer new - view: v; - objects: authors; - normalizeSize: [ :a | (authorsToClasses at: a) size ]. - - -RTCircleLayout on: authorsElements. -RTForceBasedLayout on: classesElements. -authorsElements translateTo: classesElements center. - - -l := RTForceBasedLayout new. -authorsElements do: [:ae | l fix: ae at: ae position ]. -l on: authorsElements, classesElements. -^ v - -] - -{ #category : #icons } -RTRoassalExample >> exampleCodeAuthorshipIcon [ - ^ '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 -zwneDyP69wAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleComposedLayout [ - -| view es1 es2 es3 | -view := RTView new. - -es1 := (RTEllipse new color: Color lightRed; size: 20) elementsOn: (1 to: 20). -RTForceBasedLayout on: es1. -view addAll: es1. - -es2 := (RTEllipse new color: Color lightGreen; size: 20) elementsOn: (1 to: 20). -RTForceBasedLayout on: es2. -view addAll: es2. - -es3 := (RTEllipse new color: Color lightBlue; size: 20) elementsOn: (1 to: 20). -RTForceBasedLayout on: es3. -view addAll: es3. - -RTForceBasedLayout new - charge: -800; - on: (Array with: es1 with: es2 with: es3). - -^ view -] - -{ #category : #icons } -RTRoassalExample >> exampleComposedLayoutIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAH8ElEQVR4XuWbiW8aRxTG8/// -BU1bqZWqqEd6Jj2UHqrUU43B2PgAjPEBBtvENocBY4w/Om92Znk7DLcveE9aOQw7RP5+vHPW -z3o9+faU7Jl8CeQDkW/ygcgHIt/kA5EPRL7JByIfiHyTD0Q+EPkmH4h8kw9EPhD5Jh+IfCDy -TT4Q+UDkm3wg8oHIN/lA5Jt8IPKBzGBotdArFnsolyEfyEOLv7qKXizWQywGa/TaXjg5gXwg -DwWjWIyIr72iVosCyeU0EFxcQHuOfCB3COD2FgQBnU4gcqUSFd+EKPKWcE0BwtZW/3WpBPlA -7ghGRPxGA9ZLEI8Dh4cRoXF8DFxfB2vci+iycAmofCB3F54m3ss9RoUw1Ov91wqmfCCzAGm3 -ox5SrU4sJG5uglBHUOn1/v7MnyUfCBf28jIoZ+cMNRTOIkAoHMoHMiccsvX1oOTd3sYsUHBw -EISvKa2CfdRwFO7r4hppvEISn+ISj19m3zsQWyUhler/spRD+Lf89BTkQdSXIJFAmPTVTyST -wMYGcHU1IBbOzsKqbRJL4zvEes97dO3iF71vQ4Gwa3QtNRA3mZPw3nUSdmWln6wpkbsJnZpI -/tmU0KfMI1x4K75vrYxtFNWrNupYbiBsHIJ0OvCc3d2h5a13zY5X+OdmMvCFRRKVLmvr+CT0 -hm18DRvC+l7zM46ReFSPuf+QRaFqiGhu+AkFNomfA9XvR77uDIipwLjxULSJzzEM0mBYexUB -coUKuujofWfIYKlnWXOBbjaBQgHD5l2+UDRp0rd74vgA7meVsIrF9hAV3/XQcM6qzLuuRikE -xvfeDn4Mhc3ip6n+/5byCgpd9O8btCMeY71tMXMIT8pGOKqKsLkJrK3pymrk/vPz/v5sdnhS -d8OZsRqKKi33w1kHLdyqADTt70GeYoGUkVpMILqi8sR5239EZlMEycDTyd6TJyJJneZc/LOp -tB7jUTw3nCOHaT20iBhqKC5uDhkQzVZYvmFhPh+913qT6j98QAaSOpsCZ/B9KDzlA29OwXMl -8a0KSh/pe1P4Jkz6SbzQaxm8HhCf8gcl91m87GmELBqf7+1FEq/uGayQBILWVHKOCGwmvXqq -q0IVdfNurtANoedkkQu/ooT3rRM0EpavnWFnYK2K/hQ6h19Zsv8QS19lheVxcXxY0DmDYHjm -WFzQbXwVvt/AO1ByP8AfCELQSiRZ0zjFBcJHLLNWbUtf9urw5HT03Bo4BYGg0QiFpdGjlCCv -7OP38L4tfImgMnsT2ZvHv6yv+WLxPST0ADUiCQ+fJtnnPPRAs61IeOt2H2y8QSHsFBtY+MZQ -Dwu5iOaE0B7rjjywch564NWb74BKJ17EZhaNpr+0n/oP9z1aP8J/qm9vLraHDFRcR0FsjvQS -rNwNp73Up/B9pheh0Yo+tHLKWz7NpdBj1ymEuTklaADPI30JCc3zRFsVuva9PfyGfrHw3hKE -LKq0SNSdnZF9RqSZVCeNkddjprq+xEse4xt9UMfdT94FveYmdT7zoopt6ZO6zSs2jPGEzc/e -9YFUuz32W8l7kBS+1fefYD0iJL0eHIe81Pc2VSXG1y/VAMV+9ik2mfe9XN6yV4cfG6LcsfqQ -kcgoo6RLokdBvR5o9rjwefwdrtOohTzDeg23K1TVlOsAoqa9GpAKa/f91GIdJVUav9FJety9 -BIc87ghv5Y/f5zE68WtgvmeE3fBWQhwigVAFpYYuSKurYaop+hnT4aancsTokT59862IVH1N -XvZ21BDlBxX4PgPlkIrqPTiQQ/wpE0iKiW9rnayzdj0CyrBRR06VrzROP0PWu5e6cHdfAh+H -azQJEAkk5gFy6KyptlIdqgZrWQcOxfz+dPd9BF7zNiI2nY/Q+jHWQFfw//rLW96TLD2QKyVm -3AhbNsJWmPhpJrb2EnVdqKvkAHrnQKGwlcc/qswNHiE6xF9OWXsKGr3zUpmHqJ0pTxqXBsiG -xxtsHumOCEtFZ58arKg0HgBLqKvp7KUHFtynTh5qirtQQJJDgEwDc9uIzz8nPsFZvush8oHo -Djn4Vsd0PJ/vgYiYc01iNE4pmYca5AMZEY6O7J+5TWFl5m21OeGKBFLUD69FH0zYYqKumfWu -ua/N7qM9lDduFlD4Jwkk5RHeF3ZunRxT12eB0bWmA8pCLSwYrEcFMize7zGxM57ytuipsPgR -V36KBlI+EGa5EaOQhilh6d8dR2B6FrLtrFXYfreBbMsHMrmRkGcTCNY0OaTK7q2btQtn/w1r -NDPyQ5Z8W0ggtybxrqir4nyLT0xIGvcZ5C3r6jpw7qWkbhvGXfkeMpllh3TnfKhYZSVvwfQl -HCjfz6upI+e9lvwcMt42PUDqzpr9dq+y9S2z1nLuzY0A0pQPZLxdMtF2jGDwDAtHlce8gWw4 -fUhyyFhePpAprWUqpzITMsOEP/TkC/lJ/RGMws7VBOLzHqQuf5Y1u1Hcz7Jm8C66/4R8ILNZ -YcbzkKan0+efsyEfyGyWHjLqsNVVfMgYfs/ZRyGtataoP+nIBzKb1ZiwSSOib3hom0kCRHvc -IWJ3CRL80/kLKucM/NzzAEPaE9p2zWnj+ZJUW0+6yioYsfNG7MQcZ+/ygdyD8U4+u2T9x0IC -kWDygcgHIt/kA5EPRL7JByIfiHyTD0Q+EPkmH4h8IPJNPhD5Jh+IfCDyTT4Q+UDkm3wg8oHI -N/lA5AORb/KByDf5QBbC/gdzJXoZ+XSG6AAAAABJRU5ErkJggg==' -] - -{ #category : #icons } -RTRoassalExample >> exampleCoolIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABeCAYAAADVA7GfAAAB2ElEQVR4XuXasW3CQBiGYTcZ -gqwAa2SSVFClSEPlkgUyAUoZiQKJkpqUmYDUFHYHDfocg9JGSoGSk5/39C9wj3z2Iaqu8yup -yt8CH8TPB/FB/HwQH8TPB/FB/HwQH8TPB/HzQXwQPx/EB/HzQXwQPx/EB/HzQfx8EB/Ezwfx -Qfx8EB/EzwfxQfx8ED8fxAfx80F8ED8fxAfx80FMkP1+391q2rYlN/GWe+iD+CDDaLvd5nw+ -p2iQw+GQ4/E4+KnrOlVVdaPRKJvNJsWCrNfrLBaLwc9kMrmCXGY2m8U/sgpoPp9nt9vFf4f4 -L/Xfz2rVdnXdceM/IQXUpIn/2VtIyyxT9eu+X5/9KvfIalddDaxxxum/sa5rmqn/lfXfpe+5 -eczlSSn6yGr6S1I+PpLvG+xgQV5fk7u75OEh+Sz4yGpeXq4Q6X9WGPJnVcbj9LfC7jKZFn5k -5e0teX/P0I+sPD0ly6V/MfQvhj6ID+KD+CA+iA/yA8hlE281p9OJBLnlHvr/OiksH8QH8fNB -fBA/H8QH8fNBfBA/H8QH8fNB/HwQH8TPB/FB/HwQH8TPB/FB/HwQPx/EB/HzQXwQPx/EB/Hz -QXwQPx/EzwfxQfx8EB/EzwfxQfz+qC9z7PTjhlg+LgAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleCreatingBitmap [ - - | v s trachelShape | - v := RTView new. - - s := RTBitmap element. - v add: s. - - trachelShape := s trachelShape. - trachelShape extent: 180 @ 100. - trachelShape fillColor: Color blue. - - 1 to: 80 do: [ :i | - trachelShape at: i @ i put: Color green ]. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleCreatingBitmapIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAABTElEQVR4XuXZQQqDMABE0blZ -b2Z6sx4t1W0XBdHWkfch+zAPQUjm9Gsq/gQ+iJ8P4oP4+SA+iJ8P4oP4+SA+iJ8P4ueD+CB+ -PogP4ueD+CB+PogP4ueD+PkgPoifD+KD+PkgPoifD+KD+Pkgfj6ID+Lng/ggfj6ID+Lng/gg -fj6Inw/ig3y/wOM1s96i5fgg2xDL0wepAilC8UHSheKDfI6yDB+kCmQ7Y/ggVSAXovgg6ULx -QdKF4oOkC8UHSReKD7JnsD/8Evsge0f78Zfig6QLxQdJF4oPki4UH+ToiCe/p/ggmf4DlQ/i -g/ggdwHx80F8ED8fxAfx80F8ED8fxAfx80H8fBAfxM8H8UH8fBAfxM8H8UH8fBA/H8QH8fNB -fBA/H8QH8fNBfBA/H8TPB/FB/HwQH8TPB/FB/HwQH8TPB/HzQXwQPx/kVr0B+TcSGNGBj4kA -AAAASUVORK5CYII=' -] - -{ #category : #sources } -RTRoassalExample >> exampleCrosses [ - -| v nbOfCrosses n s es | -v := RTView new. - -nbOfCrosses := 300. -n := RTMultiLinearColorForIdentity new objects: (1 to: nbOfCrosses). - -s := RTShapeBuilder new cross; current. -s color: n. -es := s elementsOn: (1 to: nbOfCrosses). - -"The code above is equivalent to - -s := RTMultiCompositeShape new. -s add: (RTBox new height: 10; width: 3). -s add: (RTBox new height: 3; width: 10). -s color: n. -es := s elementsOn: (1 to: nbOfCrosses). -" - -v addAll: es. -RTGridLayout on: es. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleCrossesIcon [ - ^ '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 -IebHF+Lfm8wwF8kmVgIAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTRoassalExample >> exampleDependenciesWithCurve [ - | v classesRoassal classesTrachel shape1 shape2 helpBar1 helpBar2 | - v := RTView new. - v @ RTDraggableView. - shape1 := RTEllipse new - size: #numberOfMethods; - color: (Color gray alpha: 0.3). - shape2 := RTEllipse new - size: #numberOfMethods; - color: (Color pink alpha: 0.3). - classesRoassal := shape1 elementsOn: RTObject withAllSubclasses. - classesTrachel := shape2 elementsOn: TRObject withAllSubclasses. - classesRoassal @ RTPopup. - classesTrachel @ RTPopup. - v addAll: classesRoassal. - v addAll: classesTrachel. - RTEdgeBuilder new - view: v; - objects: RTObject withAllSubclasses; - shape: (RTDirectedLine new color: (Color blue alpha: 0.5)); - connectFrom: #yourself - toAll: - [ :c | c dependentClasses copyWithoutAll: RTObject withAllSubclasses ]. - RTHorizontalLineLayout new - gapSize: 1; - on: classesRoassal , classesTrachel. - helpBar1 := TRLabelShape new - text: 'Dependencies between Roassal and Trachel'. - helpBar2 := TRLabelShape new - text: 'down links = Roassal depends on Trachel'. - v canvas addFixedShape: helpBar1. - v canvas addFixedShape: helpBar2. - TRConstraint stick: helpBar1 above: helpBar2. - TRConstraint stickAtTheBottomOfTheWindow: helpBar2. - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleDependenciesWithCurveIcon [ - ^ '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 -/wLZleMnuj1bsAAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleDistinctColors [ - -| b | -b := RTMondrian new. -b shape circle. -b nodes: Collection withAllSubclasses. -b edges connectFrom: #superclass. -b layout tree. -b normalizer - normalizeSize: #numberOfMethods; - distinctColorUsing: #package. -b build. -^ b view -] - -{ #category : #icons } -RTRoassalExample >> exampleDistinctColorsIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAIf0lEQVR4XuWZ2W/TWBTG+buZ -t9HwOhIvIygMBURb0UowtJRS6NAlpXTflzRNuiXNvjar4/jL+LvhZkI3nKQr50iWY/v6xj6/ -s93je9WqfLlNck++CuQDkS/ygcgHIl/kA5EPRL7IByIfiHyRD0Q+EPkiH4h8kQ9EPhD5Ih+I -fCDyRT4Q+UDki3wg8oHIF/lA5It8IPKByBf5QOQDkS/ygcgHIl/kA5EPRL7IByJf5AORD+Sq -xagYmI5OYSz0pRophCEfyA2LhqG3ilWBfCA3KI0wuOXLOflAblIYpjSM2ei0/JB1mQJbjo+P -cXBwgI2NDSwsLGB+fr66uLiojvf399XG8zMzM1hbW8PS0hLm5ubQ3d2NZ8+eoa+vD8+fP8fo -6Ki695wNm5ubSCQSsCwLdxpIqVRSL7K3t6cUQuV8VxzW19eVMpPJJNLpNA4PD5UiqVAqjWN4 -z+7urhpTqdTiPX9TQdvb2+q+fD4Pn8+HlZUVRCIRR0o7OjrCxMQEPn/+jMHBQTUfzwcCAWxt -baFQKGB2dhYDAwP6Waoc39XVhcePH+PRo0dq6+joUMeNmz7X2dmJN2/eYHx8vD6H3hrfjzrg -e+j3awpIozVqxS4vL2NnZwfRaBTFYrElC9JKXV1dVfOUy2VQOZzb7/er48u2LhoAIQaDQWUE -IyMj+PTpE7xe7ymoPKZR0ThoZNRBKBRSY6hIPQc36mV4eFh53qtXrxQg/ub+yZMnePnyJV68 -eIHe3l4F7enTp3WQPO7p6VFjNFTeow2A53jMMUNDQ2jKQ0zTVErlS3NPpVLZtAoqnxBu0t3p -Jdxr7yAIGhyNiwpmGOPxz4yB70lv5Tvmcjnl+fTis8byOv+Hhsdx9BQqVoPg9v79e+WJDKuE -xu3t27fqHMHS63gP9+cC2c/uYWC6H7tBH0P7nUiWxUoGweMNpEo5fPTMqv0H9yrChSxG3LOI -FNLV/rUFdRxJuFr2/EmvCxU0F47odfRAv/9fO0+GFcR0aluF//X1cfuaC0uLc2cDCeaPfqjt -74pUYCJbtj02eVDt8bmq3HszCZQqJt4dzMKbCUEfG5Wdlo1sbHO0aSD1hayxaofPrLrX7a55 -cqk0Zee4jzg3qdM77iKQxmqNMBo9mzmi3XkZ7sLhcD0ctjtfKpWC4yprKb6ooMSKMfwKPSKP -x9PSe7AMZ24yDOPU/awAmUNafR632w0dBs8EwgQdj8dVQtMlG5M1kzbr+6mpKZV4OBkTOysy -JjOWeLcdSLOK43qHFZgTYNprmhG9NOBvFh11IKw+SIqVhZNQQFiEphdVdF0+PMtjAmOpSVAs -FwlNl9PcdIl5E0DOCg9nSTgVV5VY0+EsGmzqnnhsHWUjY+stpqqzS1mpU7n0IEI5qWhdOtLd -demoIdIIuB7hKlvX+F++fFHeRm/Ua4lWFlbnSbd3wtFcLAaaFV8mDN63mth3/LwVs7a+syzT -1t0krqR1QoVzI4iLSmXGYyZZunomk1GwToY9ehw9ioB4na0ShkvW9ITI+7kC57VY7HLyHHMC -1w3NGoIFC73fhhErZnAre1nl8k69jHO8hih+tO9bg7OxY3aI3an+PebGg3dLKFuHyJmDbT0z -1wjaY+m9TkMrV/uvX79WhkKD4f23srmoa2znSXTMtsw4nJW1hvLAraMkPiwf1lwfhZYVQU9l -24WeQc9kiOUqPZvN4qKkPz09rSAyLDNnEiq97OvXry3lIQXkKnpKzCuTk5OO5mXYYfuAoae/ -v1/lkuus2hjudF7TaxXmPwLitZMtE4LQrSNe557ndLuG787Ki3tWo82CuaeX9bojyodqtaHY -CIRWw/nOjLm2AljqsSIjCP4nH55lNwsEWp7L5WrZypqRwUO7dLeT8UE2Ck/ms/q/9HYAgfg3 -ta3sdapz8XRS5TyPx42SaShvONirJfH9fS+OQrUqi55bNGolNqtRjqOBEZojIHQ5Js+TSZiQ -SJ2LFsJy2jjU4whEd0/rpZ79gLq+JwC6N8foTizjMYEQKM/zmM06py/Tdu6z/jcgy26NWA3t -EZe/lt/ChQ34c3FE7QSeCkRhWhHkTVf9XNkqwnc8qsbGQhG1DwaCSEfTyKV+vha6F98eR8Iz -geDy7ygkz0+qdhZF/sFvMJfnL5w0eTyrru/6XuEwMoN0wWdbfk25vl072RdzytICwdqiKxj0 -w/fd3fe8HmUYRjGPXRsKLSsejShAqUQSAbttf1ONTt1JdiIMYy0nddh1MKwKjvwX92as4wwK -D+5XjaF/Lhynm3aGkUAoXHswXXFtRPvs5l8EBTMFb2gIhXzMjrcBZOy8ocrO1Uk1RyZgr2vS -cRi5DDKHHljZIqxUHoX1IMqhTPWXBqJ/NK4Wz66a3KrHz69uV/Vg9KLb2nq5diDMJedNzgTL -VTRbIozxrDL41e+yH4z/cVuBhCO71wvkZDuZ8VsnXpZ3jPusvlgms07XUC6ynGYfjHPeWiDx -v5x7+vFk+0B2glvQJSmTKCFQ8dwTlm4+skTV3sHaXTXW7PKULZBTCd7+rlIsO29rOOmu3gX5 -Wfh3BMQwa62C/B/3Ya6voDw+grj9YV61KjoeojwxUjW31qCub9Su6/HKgvK+aqoU+bF0tozm -OqDbC3ceCKPIRSv8plsnzYYZ9n2q8qUujCDtfJ1sG0i7zbRfTegd7Xw2aAsI88p57RGpsp0e -hlnahFEYu34g2jUv80OSdDkFJPzwoWPlFh/9WWuidXXJB3JVQK56FStf5AORD0S+yAciH8gP -K2z5Sf12AZEv8oHIByJf5AORD0S+yAciX+QDkQ9EvsgHIh+IfJEPRD4Q+SIfiHwg8kU+EPki -H4h8IPJFPhD5QOSLfCDygcgX+UDkA5Ev8oHIF/lA5AORL/KByAciX+QDkQ9EvsgHIkn+AwO1 -dwKZbROAAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTRoassalExample >> exampleDotIndex [ - -| v values resolutionVertical groups maxValue g c el | - -values := #(15 8 2 5 11). - -resolutionVertical := 10. -v := RTView new. - -maxValue := values max. -groups := RTGroup new. - -values do: [ :aValue | - g := RTGroup new. - resolutionVertical to: 1 by: -1 do: [ :y | - c := (aValue / maxValue >= (y / resolutionVertical)) ifTrue: [ Color orange ] ifFalse: [ Color gray ]. - el := (RTEllipse new size: 20; color: c) element. - g add: el. - v add: el - ]. - RTVerticalLineLayout on: g. - g last @ (RTLabeled new - below; - text: aValue; - color: Color orange). - groups add: g. -]. - -RTHorizontalLineLayout on: groups. -groups do: [ :aGroup | v addAll: aGroup ]. - -v canvas color: Color black. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleDotIndexIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABfCAYAAAAeX2I6AAAFhklEQVR4XuWc72tbVRzGT+PA -V75ouw37M03bORlO2k4YNMlSakU0QbQV6WrapqkDrSBtHFLaLi0TZvtO9sM5fKGI/gH6xjfT -wf4S3eZ7QcQ382T3ST33nHtybpNmob+ewcNyn5tlcJ6c7/dzzz25wvtT4teBEv8g8AfCL/5A -+APhF38g/IHwiz8Q/kD4xR8IfyD84g+EX/yB8AfCL/5A+APhF0Egl5JCfpAQ0vZjsZgcGhqq -8Lu7u2UikZCRSCRwrrW1VaZSqVC/paVF8gdSRb8VhCzdESXo5491KBjwjY2NEjQ7O+v7fX19 -vj83N+cPfjQa9f2VlZWAj2N1Dsf8gewgFYaS8tfW1vxBhML8eDxeHuCRkZFSLT6O+QPZQX98 -oWfI79f0DMlms/7ALy4uOn2os7OzfG5wcLAmf2BggH+G7KTUC6L0aFPIB14wr0R1IO3t7RIl -qVAoyJ6eHv/9TU1Ncnp6Wq6urkqUL/OzxsfH5fr6erm/mH4mk5HFYlHiPH8P4Rd/IPyBPIV+ -nNc95Pb7umQNDw/7td8sNUBhk7JMtDUpy/RNyjqA6MtPWfyB7KD/vtYzBK+Vj8atBhGN2uVD -XV1d5XO48KvFxzF/IPyUxd/U+Zs6v45GIFvjuofMx3XJQplC+UHdHxsbc/rmGhdoamlpyenn -crly/0D546esOikLg+eiLNvH0oiLpsJ8fsqqk7K8b7WTskwf8maMk6bCfH7K2gVl4bVZmlyU -1dbW5lMWLh5dlDU6Olrh81MWv/gD4Q+kAQJZqR5ilyxFU+Zt3I6ODqn8qampQAlyURZ0r7D9 -+Q82BX/Jqpey1ODalGX71ShrPRP8fBzzB8IfyNEtWaAs5U9OTvKXLH7xB8IfyF5fGP65JeTD -zdouDEFZMzMzEjeqkslkoARNTEw4LwxxV/KxtwqAv/kDqSJpLJ1IY+kkn887l05MH8ItXdcS -ifKLGf35EI75A9nHxUV+ytqlrr2tv8G5Yffyu1mCwpbfm5ubncvvvceFNCkrdpx/hvCLPxD+ -QBpOWXh9/7KQj7aCPj9l7RNl3V10+wjDbN74rYiLspTPT1kNoqx/bwYHst6NcvyUtUt9P6cH -/uZF/e399DXtf5cTVbeSgrJcW0lBWX9f15/FT1n84g+EP5AGUZa5lRSvXZSFraSKsuytpIqy -7K2kd7L8lMVPWfyUxU9ZDdGvS3rgf1rQ397PXtc+3uNTU29vgLJQwlw/i1b+hVNBysIxfyBV -hIcG5OOVAzV62v1AAfz2AzPAfkAA9u26HhzQf0LItTeF7D/J30P4dRgpC3UdsilL+TZloV9A -6iaUkno/LipNH8fqHH8gVQSsVfX9obEr5JdP3H7YgwMuJYIQcD4mnP58nL+H1EVZ5q5401c3 -p+zd7DZNXUkLfsp6WsoyaerqW27f/Ln08vJygKbMgY80CafPT1l7SFmgKcyMZyKCn7L4dUQC -6TsRTkDF9PY5vCdAZl7fAGXZz75Cw8b77bKkSO4ANvTDQ1k/5N0+fgVlNnXcB3HRlAqRn7L4 -KetwB6L2TEF47Zohpp9OpwOUpWYIypJrhti+eZHJHwh/D+GnLH7K2oMZonx7JvDPkH3oId9M -a/+fG0KG9Qr+HtJgynp8201Zto8rcBdNhfn8lNXgGfLVlPb/+pJ/hjRcp58P7yGfewuMkKuH -bL4jZK095NUXt/2PUvw9pKquT24P0rezQh6zFgVf7ghuDVKKtgi58kalnz0v5IcXKn38H93e -v7l1kT+QqlrwvrXPHhPyrDf4NgW95Hknn6scRAz6mbZKP9kv5LtDlf7C/zPjvXP8gfCLPxD+ -QPjFHwh/IPziD4Q/EH7xB8Iv/kD4A+EXfyD8gfCLPxD+QPjFHwh/IPziD4RcTwAORhKa195Q -OgAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleDoubleArrow [ - -| v edges es | -v := RTView new. -edges := OrderedCollection new. - -es := RTBox elementsOn: (1 to: 300). -RTGridLayout new gapSize: 30; on: es. - -es do: [ :e | - | te | - te := RTBox element. - te translateTo: e position + (0 @ 10). - edges add: ((RTDoubleArrowedLine new color: Color black) edgeFrom: e to: te). -]. - -v addAll: edges. - -v when: TRMouseMove do: [ :evt | - edges do: [ :edge | - edge to translateTo: (evt positionFromCamera - edge from position) / 5 + edge from position. - ]. - v signalUpdate. -]. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleDoubleArrowIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAACb0lEQVR4XuXcS27CMBhF4a6P -92IA8doHsCneQ9iKW7kSkyaOwA0pzXcnSFwUyxxF/xlY/vj89PNO+fD/Ah+In0eB7Ha7cLvd -wuFwCD9/+Ipuv99/d/Hz2e56vWZ1ueuluriv2MV91tEV3pB+vx82m00oo1fV9Xq9sF6vS7tu -t5vVdTqdf989u/cCkNlsFlKvU1U3n89b3S0Wi2S3XC6zutVqFfwZ4g91Pz4QH4gfX3t97fW1 -19deX3v9+EPdjw/EB+LH115fe33t9bXX114//lD3gfjxgfjxtdfXXl97fe31tdePP9R9IH58 -IC6Qu4qdTqekppV1x+Ox8S6qbfx8povPis9suitT/lRXeENGo1HYbrelZjAcDpPdYDBIdlGX -c7qo0nV3UTWbXO/Zvfva+6Da+trrzxA/PhA/PhBfe33t9bXX115fe33t9Ye6Hx+ID8RPO7T3 -L5Q4R3vvz/xX2lultq/Q3qbVNrdrSolr0942KHGu9uYqsa+9/lD34wPxgfjxtdfXXl97fe31 -tdePP9T9+EB8IH6a117/kIN/yME/5NAWtfUPOfjxh7oPxI8PxNdeX3t97fW119deX3v9+EB8 -IH58IO0Aclexy+WS1LRXdOfzudDF76q6qLY5Xe56KQWP+6qzK9Xe1CVlUXtTXdTenIvPYpe6 -4KvqUrTcrupCsd+sl7v3n10ByHg8TmradDpNdpPJpPauar136uo8GOLPEH+o+/GB+ED8+Nrr -a6+vvb72+trrxx/qPhA/PhA/vvb62utrr6+9vvb68Ye6D8SPD8QH4mtvZfenb4ivvev3AuJr -rz9D/PhAfCB+HswXjenj9eANteIAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTRoassalExample >> exampleDoubleClick [ - -| v es | -v := RTView new. -es := (RTBox new color: Color purple; size: 25) elementsOn: (1 to: 100). -es when: TRMouseDoubleClick do: [ :e | e element trachelShape color: Color red. v signalUpdate ]. -v addAll: es. -RTGridLayout on: v elements. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleDoubleClickIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAABNElEQVR4XuXWsQ0AIQwEQVdL -T1RrCiBAIuHErPSJQ+ZBrm6/pMo/Ah/EzwfxQfx8EB/EzwfxQfx8EB/Ezwfx80F8ED8fxAfx -80F8ED8fxAfx80H8fBAfxM8H8UH8fBAfxC8XZNTcPn9+nvsgPog/90F8EP+A40D8/C3LvyE+ -iA/ig/ggPogP4m9Z/pblz/0nywfxD9gH8UF8EH/L8vNviP9k+SA+iA/iz30Qf8vy87cs/4b4 -ID6ID+KD+CA+iL9l+VuWP/efLB/EP3gfxAfxQfwty9+y/BviP1k+iA/ig/hzH8Tfsvz8Lev5 -H+yD+CA+iA/ig/gg34D4+SA+iJ8P4ueD+CB+PogP4ueD+CB+PogP4ueD+PkgPoifD+KD+Pkg -PoifD+KD+Pkgfj6ID+Lng/ggftct4d43QXzhOT8AAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTRoassalExample >> exampleDynamicBezierEdges [ - - | v es | - v := RTView new. - es := ((RTEllipse new size: 30) + RTLabel) elementsOn: (1 to: 20). - v addAll: es. - RTCircleLayout new initialRadius: 150; on: es. - - es @ (RTShowEdge new - connectToAll: [ :value | value - 5 to: value + 5]; - shape: [ :el | RTBezierLine new - centerOfObjects: (el model - 5 to: el model + 5) inView: v; - color: (Color blue alpha: 0.4) ] ). - - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleDynamicBezierEdgesIcon [ - ^ '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 -OQlQqimsUAAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleDynamicEdges [ - | v es | - v := RTView new. - es := ((RTEllipse new size: 40) + RTLabel) elementsOn: (1 to: 20). - v addAll: es. - RTCircleLayout new initialRadius: 150; on: es. - - es @ (RTShowEdge new connectToAll: [ :value | value - 5 to: value + 5]; shape: (RTLine new color: (Color blue alpha: 0.4))). - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleDynamicEdgesIcon [ - ^ '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' -] - -{ #category : #sources } -RTRoassalExample >> exampleDynamicLabelsAndEdges [ - - | view elements | - view := RTView new. - elements := RTEllipse new size: 30; elementsOn: (1 to: 20). - view addAll: elements. - RTCircleLayout new initialRadius: 150; on: elements. - elements @ (RTShowLabel new highlight: [ :value | value - 5 to: value + 5]; center; yourself). - elements @ (RTShowEdge new - connectToAll: [ :value | value - 5 to: value + 5]; - shape: (RTLine new color: (Color blue alpha: 0.4))). - ^ view -] - -{ #category : #icons } -RTRoassalExample >> exampleDynamicLabelsAndEdgesIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAEXUlEQVR4XuWca1PyMBCF+/9/ -JHgFQQGvgArhneO8cUrcSKnZZpNzZvpFO06Tx+wtmzSHA78sqeGfAn4g/OIHwg+EX/xA+IHw -ix8IPxB+8QPhB8IvfiD84gfCD4Rf/ED4gfCLHwg/ENvabDZuMpm4i4sLt1qtHD+QASb8/f3d -xX43Ho8P7Wc6nYrv7vd79/b25iB+ID0ECO2JxgoIJxMrIwSCJ9RsNjt6b7FYOH4gZ+ry8vLH -ZN/d3R1NJCCdAiKtIjwfHx+OH8gZkiYxnGz4DOEdF7wj/h38nB/IH4Fg1YTvwWe0YYT+5unp -SVwhLy8v/CtEMCXfk7Ver48mCBMWTmL4Tl/zd3Nzc/R34JvwM//7+/t7RwUEE9DFrgPaw8OD -gxP+q82HeZvP52JofH19/eN7Hh8fHQ0QDNaSXZe+BQEDDZCYXbcERPJXVfuQtv/wD5K3HN8i -5TOvr69cQHa7nbu9vf2aiKurK7fdbrNGPfAvPlLLBWMwIPAZMFOl1pcQSsOcDpFMNgOEtt9m -YDQaOayMkmCE5ixWKysCiOQnYKZKgYFipOTwY8XOEoAcuhT/rCpH2WVwIHDgpQB5fn4WV0jf -ikF2IPjwcDC5o6lz5SNB/8CnFB1lfX5+fkUoeHLlGSkSWXz/EAVJ/j11Y+IHUjMQhIPtUjec -Ym0TBhOMwKQVcTmzQJD4DRmR5JCUW6UstTRaWbl/sJ9RCwxUGaQxpszem5TmSvpYyx0e5wpR -ojRGdLWYNFlSp4jV7o6+knYXYR1MAsHWrG86AJyUH2pJaEfyu4qpfSR/2Mufh/CLHwgjkNq6 -0HONt9HKQbR31nLD0BpvEiBdu9BrkeZ4kwDp0oVekzTHmwRIly70mqQ53mRO/VQXem3SGi9/ -2Mufh/CLHwgzEMToaAgouXX0lNA5gzFqnCFJCiQ87ZqrpV9Ty+Xy5OlgE0BimzcYQE1AtDfh -kgHBvrL0sWjzrwVGbFc0PLNoAkjs3GBthUZtK9Bo2teU/zlWFPb7pu5VTh5l+dZRq+fAU45R -o++MPw/hTwz5lQ0IHH27bUa7lV9DYfSo3YmpCiQ8W1FaGIyeMimq0jxWwX+k7RdRHGkraeMq -shGlWqdTBYJGays3JPSV0NFf9pE2VERRgEOhsTQYEDrefdEU/k/7zsasYS/OgWslWH0c+P+z -kI4yDwlbaXKWWcLQNueNE1mAxKqmuTa1tM98mAdi7WJKS+F5YynhknwJTEeqRCx2eMjSPk42 -H+IPvcTKKqiotg9YogTTN8IJtwVC8MKNE9luwM4aZfl7qKT6UPvo8W92/VQXesxfAXj7PaxC -C80ZRV+k3KULnf8iZUUg4U2hXbrQYzegWr3UwCwQ6ebS0LR17UIP37N8RZTpDSokbDBB8B3S -id6uXehw0GjVwXaA9bak4ncMa+u659/C5QfCL34g/ED4xQ+EHwi/+IHwA+EXPxB+IPziB8Iv -fiD8QPjFD4QfCL/4gfAD4deg+gdk9tXngy6lfAAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleDynamicallyAdding [ - - | c v | - c := OrderedCollection new. - - v := RTView new. - v canvas addMenu: '+1' callback: [ c add: 42 ]. - - RTActiveAnimation new - blockToExecute: [ - (v numberOfElements ~~ c size) ifTrue: - [ v clean. - v addAll: ((RTBox new size: 8; color: Color blue) elementsOn: c). - RTGridLayout on: v elements. - ] ]; - inView: v. - - ^ v - - -] - -{ #category : #icons } -RTRoassalExample >> exampleDynamicallyAddingIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABeCAYAAADVA7GfAAABVklEQVR4XuXXMQrDIBSAYW+e -3UPpXXKFLC55acUGOrTNFizfD4FH3PzQNuk4/GYq+Vvgg/hdgazrGqWU8LdjEpCOkXP2QWYB -2bYtaq3RWvNR/N8QPx/EB/HzQXwQPx/EB/HzQXwQPx/EzwfxQfx8EB/EzwfxQfx8EB/Ezwfx -80F8ED8fxAfx80F8ED8fxAfx80H8fBAfxM8H8UH8fBAfxM8H8UH8fBA/H8QH8fNBfBA/HiSl -8Zzzsoynz/Hs1/q+R/ggPoh/ZflXln9CXJBzg8+51vH0uYNcrfsgPoh/ZflX1o3Fq0/zt/X3 -dz7ILSdknIxxQsbsnxD/yvK/Q/zvEP+E+CD+314/H8QH8fNB/HwQH8TPB/FB/HwQH8TPB/FB -/HwQPx/EB/HzQXwQPx/EB/HzQXwQPx/EzwfxQfx8EB/EzwfxQfx8EB/Ezwfx80F8ED8f5N96 -AGxOp0bY2FZoAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTRoassalExample >> exampleEdgeTransparency [ - | v es | - v := RTView new. - es := RTEllipse new elementsOn: RTShape withAllSubclasses. - v addAll: es. - RTWeightedCircleLayout new - initialRadius: 200; - on: es. - RTMetricNormalizer new - elements: es; - normalizeSize: #numberOfMethods - min: 10 - max: 35 - using: #sqrt; - normalizeColor: #numberOfLinesOfCode. - RTEdgeBuilder new - view: v; - objects: RTShape withAllSubclasses; - shape: (RTLine new color: Color blue); - connectFrom: #yourself toAll: #dependentClasses. - es @ RTPopup @ RTSetEdgeAlpha. - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleEdgeTransparencyIcon [ - ^ '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 -LG82MO+SAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTRoassalExample >> exampleEdgedWorm [ -| v es | -v := RTView new. - -es := RTBox elementsOn: (1 to: 50). -v addAll: es. -es @ RTDraggable. - -"RTEdge buildEdgesFromObjects: (1 to: 50) from: #yourself toAll: [:value | (Array with: value -1 with: value + 1 with: value + 2) ] inView: v." -RTEdgeBuilder new - view: v; - objects: (1 to: 50); - connectToAll: [ :value | (Array with: value -1 with: value + 1 with: value + 2) ]. - -RTForceBasedLayout on: es. -v addAnimation: (RTForceLayoutStepping new view: v). - -v @ RTDraggableView. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleEdgedWormIcon [ - ^ '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' -] - -{ #category : #sources } -RTRoassalExample >> exampleEdgesInTooltip [ - " - self new exampleEdgesInTooltip - " - - | v shapeBuilder elementClasses edges background label methods methodElements eb | - v := RTView new. - - "We use the bounded shape builder to: - - have no element smaller than 5 x 5 " - - shapeBuilder := RTBoundedShapeBuilder new. - shapeBuilder - rectangle; - width: [ :c | c numberOfVariables * 7 ]; height: #numberOfMethods. - elementClasses := shapeBuilder elementsOn: RTShape withAllSubclasses. - - "For each class, we add a popup that will show the method invocations and the class name" - "The popup uses #group: to specify what is the group of elements to use - #group: takes as argument a two-arg block. The first argument is a RTGroup, to which elements have to be added. - the second argument, aClassElement, is the class element on which the popup is being triggered." - elementClasses @ (RTPopup new group: - [ :group :aClassElement | - methods := aClassElement model rtmethods. - - methodElements := (RTBox new color: Color red) elementsOn: methods. - - "We do not want to directly add the edges to the view. We instead need to add the edges to the group" - eb := RTEdgeBuilder new - elements: methodElements. - edges := eb connectToAll: #dependentMethods. - - RTTreeLayout on: methodElements edges: edges. - - - background := (RTBox new color: (Color blue alpha: 0.4)) element. - RTNest new centerOn: background elements: methodElements. - - label := (RTLabel new text: aClassElement model name asString) element. - TRConstraint move: label above: background. - - group add: label. - group add: background. - group addAll: edges. - group addAll: methodElements. - - ]). - v addAll: elementClasses. - RTFlowLayout on: elementClasses. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleEdgesInTooltipIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABjCAYAAABt56XsAAADnklEQVR4XuWdTYvDIBBA+/// -ZG+9FnpooYfdJQtCGBydGTXRvAEhJEbTvETny/T2+xuT5/P5X9L2/X6vlkj7qXw+H/O53+/3 -ZyvyOvf7LXXOkFv0xO0GpZv0er1+Ho9HtZzxA/c3u6XO9EBWET4QPhA+ED4QPhA+ED4QPhA+ -ED4QPhA+kFWh8YHwgfCB8IHwgfCB8IHwhQ8ECcQSoEpS2u8Jclna07b3/XgDa72Db0OAbEGp -rViAlKCmIFcPIJpswbF0rbL/ywCRcFojhCOBtPS5JJBemg4fCB8IHwgfyCJAttSb9/tdLFLD -azXoLH1aC98O4dshNs0qp2W17i+VpM6WrkerI/dH+tf6OsUwtI6r3qHHM3ZbjDytTtq/2ULR -/rW+pgbilVFA5JyhpYwuCSQ9VaVyJBDLkDWi/2mAjJQjbwAfyAJAlpzUrwxkSbV3pHgMsjPX -cmCA8A3DoGG4N6xyxldtTN4ft4zfuTrR83oYpSMWJ3WJGMrlYTVnoDy+/wEWuyb3wyNOSW+d -I5yNXd4QzWC0ArFO6FFFAAHEYjBGgJylLFwWiOfpXV3l5gPhA+EDuSSQ3s5Hvh3Cl/mByKCO -/ASGdly+HblzrMXSdqkfrV5ue3ogyd6QY68MGGljc+5GebNAam1r/ViBnPE5kG5viDcsWoLs -BVIKBWPnkJo7fCQQ/hxS0KS0zyhZNCw+kMm0LD6QyYBEtSw+EL7MB8ST7ZdTIy3ZhbW25fFc -G5bMRm825FJ2SC2DUaufS3iz+sJKbUSWr1mX6i0PZC9askJrgAsLJKVlRoHMrMEtCWQ1iQBZ -ag4hAOGrvQPFs1pqyQ8p82VSO8SyGilnT3iOW84r2Q5eW8na3lRApJsjORWl9iW3ZdqNpqlp -2pvWbk5tbsnLKmla/CGrcfJuUc1z/jU+kEYH5R7W7I5K/qR+lUldm0O8T2g0waF3koPnuqb2 -ZXkmwegq2miSg4yvWxMwlpzUI29I6Ye3vCGtN+wSQCIyyiputRM8a9t7fteEP6kf/KDwgfBd -J+WwpzUU6nV11NwuPcPIo9cUHqpl9fhqaTQkbDlHA9Ki8V0CiNeytk7MLf+huORnYnNP1159 -rSVR9xQ8kFb/Um+Llw9kMuED4QPhA+ED4QPhA+ED4QPhA5kdSOSL13wgA4Es6VzkA+ED4QPh -A+ED4QPhA+ED4QPhA+ED4QPhA+ED4QPhA+ED4QPhA+ED4QPhA+ED4QNZRP4AizmlcvoLni4A -AAAASUVORK5CYII=' -] - -{ #category : #sources } -RTRoassalExample >> exampleEdgesWithBezier [ - -| b | -b := RTMondrian new. - -b shape circle. -b nodes: Collection withAllSubclasses. -b edges moveBehind; connectFrom: #superclass. - -b shape bezierLineFollowing: #superclass; color: (Color blue alpha: 0.4). -b edges - notUseInLayout; - objects: [ :cls | '*Array*' match: cls name ]; - connectToAll: #dependentClasses. - -b layout cluster. - -b normalizer - normalizeSize: #numberOfMethods min: 5 max: 35 using: #sqrt; - normalizeColor: #numberOfLinesOfCode using: (Array with: Color blue with: Color red ). - -^ b -] - -{ #category : #icons } -RTRoassalExample >> exampleEdgesWithBezierIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAgr0lEQVR4Xt1dC3RdVZk+RVBE -wAFHrYC6xHGN1GFkFMdxVpeMS12MrnEURVYBR1zOgDymKIpULDSFPoBiKYWWvmltS2lLH4S2 -KW3SJmnSNk2TNO8XzfvZpmmeN8lN7v3v7G9f/nv32Xefc8/Noymz1zor9+aex97/97/3v/ex -QqHJaWtXB+jDlj8042d+umKKjwYHibq7uwm/1dbWyr/V1dXyb29vL6nX+v1+2/fTp8n2/ezZ -wcj3iopWcutHfn5Z5HcS7TJrOPRsUiA0f+4wnTgepAtNF+tCPuyuu0D0KPEwcLSBgQEbEOfP -n5d/q6qq5N/29nYbYerr623f9+0bsn3Pza2g6OciV6L299vBfXr2IC1/ZYQutwZDl1sD/78B -+e9fB6i/387NDMJpwebMpZWVlfLz4OCgDShuhYWFGgAttu/Hj0cBO3y40/Zba2tUevr6hmII -3tbWJv8342eNdCg1ID+n7h+may/tofeqAvSBBmTWLKLsbDsALS0tRkBYCioqKoCJ7X+lpaUa -Ue1q6LXXim3fOzujqmbvXtLAaiCTuuJWVlZGIyMjtv/fe4ePrrZ6Qtdd2U3XXtJF7W0Tp8om -XEIaGxttndfVD1pXVxexNHR2hjna5/NRUVFY3eTn57vakFWryowEArC7d9sBOXHiVOT7mTN9 -Mdfh3iwl3KBSd2/3099YXSEcS54f/OAAcvOXhyn1YJSD+oWOCgaj33ViqhwPtaVKhSo16vkz -Zw5EpCgrfSR0zZQuOpY1ohn6M7TitX56+207IMXFTZHveXlmINmGRYE7I78fSe+hF54Jg/HG -G0Tz5xNd9ID889eGafeuLltHa2pqXL+zimBghoeHCUAy0RsaGmznz54d1eVznhiQnPtc0mDI -LgnF9NEPj9DyZUHt2VG74fPZf4Nk1NXVxRCZGePcuXOR39LSThO060UJyMK5fiEF9s7pA2NV -ZAKEiT40FCYWjLpqNzo6Omznl5TYr1+2uJcOHLA//+DBbjpx4gzt22f/f2bmOTqePSxB/N43 -7e407Ife7+bm5himqK2NVbvPLwjQ2bNjB2jMgJQWB+hjVn9oQZI/ZDKQTsacia8P/L333iN8 -ZlcY9oU/R55Z2hwz8Ndft0vlgQNnhJQFKDlZN+pltGH1kATk0x+JXrPgT710x7+dpRNZfqPN -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' -] - -{ #category : #sources } -RTRoassalExample >> exampleEllipseBorder [ - -|v shape | -v := RTView new. -shape := RTEllipse new - size: 50; - color: Color white; - borderWidth: [ :vv | vv / 30 ]; - borderColor: Color black. - -v addAll: (shape elementsOn: (1 to: 10)). -RTGridLayout on: v elements. -^ v - -] - -{ #category : #icons } -RTRoassalExample >> exampleEllipseBorderIcon [ - ^ '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 -3YE/yavlAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTRoassalExample >> exampleExtensibleLabels [ - -| v e s | -v := RTView new. - -s := RTExtensibleLabel new. -40 timesRepeat: [ - e := s elementOn: 'Hello World'. - e extent: (50 atRandom + 10) @ (50 atRandom + 10). - v add: e. ]. -RTFlowLayout on: v elements. -^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleExtensibleLabelsIcon [ - ^ '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' -] - -{ #category : #sources } -RTRoassalExample >> exampleFadingLetter [ - -| data mousePosition shape v es | -data := (RTView rtmethods flatCollect: #sourceCode) copyFrom: 1 to: 1500. -data := data select: #isAlphaNumeric. -mousePosition := 250 @ 250. -shape := RTLabel new - colorElement: [ :anElement | - | d | - d := (anElement position - mousePosition) r abs. - d := d max: 1. - d := (10000 / d) asInteger. - d := d min: 256. - Color grayScale256: d ]; - text: [ :aChar | aChar asString ]. -v := RTView new. -es := shape elementsOn: data. -v addAll: es. - -RTGridLayout new gapSize: 0; on: es. - -v when: TRMouseMove do: [ :evt | - mousePosition := evt position. - es updateShape. - v signalUpdate -]. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleFadingLetterIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAXgUlEQVR4XuWdRa/kRheG8+si -ZZNFVskii2gWQSVSEoWZmZmZmZmZmZmZGep+31Oap3Xuid3t7nbP3LkuqeV2uVxoH3x9aqOl -pfHp9ttvLw899FC5/vrry7XXXls4f/3118tbb71Vrr766nLBBReUSy+9tDz44IPlhhtuKNxz -9tlnlzPOOKM8+eST9fy2224rv/32Wzn99NPLOeecUy677LLy888/l0MPPbS8+eab5f777y9/ -//13vfbHH3+Uxx57rNx3333llFNOqfebf8UVV9R6Dj744NrWM888U37//fda33vvvVf7duWV -V5arrrrqP/3iP/dSx80331zznn/++ULyOm1y7ccffyyPPPJIifPw2muvjdq23htvvHFUhjH+ -8ssv5eSTTy7HHnvsknU++uijtYz5k9JGS+shXX755eWdd94pk8o9/fTT5ZVXXinT1v/iiy+W -pQ00bbQ0/LRhLchLL71Uvvnmm0pG/vzzz/Lss88WnnCPu+66a7n11lvrEwk54HjLLbf85wk1 -7+KLL67kB5IgiSNBvki288ILL5Sffvqp3HnnnbX8fvvtVy655JJKCiEfb7/9dtl3333L559/ -Xt8ij19//XV54oknCm8J/eOcN+2iiy4qn376afnyyy+XkRrq9tzjXXfdVY+0F8dFos0ffvih -1v/ZZ59VkgupZA6++OKLUb8hnbGu3haEwf1/kpZoABrIj4F6hO4ysd99992IZ5iY4Hj+7bff -1vPHH3+8rFmzZtmCMCjobGinXtt6663rca+99qoTwQPCuTSeCWCyPUYeR//kgTfddFPlNSzI -hx9+WMvyMFEHk0n/zfeea6655j/jOu+88yq/4gfve/nll2t5y9hv8uCL1tXbgvz111+1Mhga -R5hoPMbEkx3PvScmnsi8WHTc+rzHdrukf//9t8TjpPTrr7829jPn21fHRT+b2ozjtN/T9H/4 -PGS1M3VIg8cLL7ywvsrjyt99993LyMBXX331n/KZnDXVA3/heNZZZ1WyimgOKfnoo48quRnX -B8hmbMMEaeONgFTNMye77757aVIh5l4QmDET/dRTT1XazIDff//9yihPOOGE+uO6RxjjPffc -U77//vvK+NvIBboCDP7UU0+ti0N58j/55JNy+OGHL5ssZPyTTjppWZvkb7LJJvV40EEHVTFa -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 -34tAr/wPT2b9vzS7zIsAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTRoassalExample >> exampleFontSize [ - - | v label els | - v := RTView new. - label := RTLabel new height: #yourself. - els := label elementsOn: (1 to: 30). - v addAll: els. - RTFlowLayout on: els. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleFontSizeIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABjCAYAAABt56XsAAAEV0lEQVR4XuWaW4hWVRTHj7dQ -EVMfBm26SOiTUVEGEenkaF4yKhqbsuxm9WBFqTmllPNpOalY0AWMoAgKUYusl8gsK0vFy4NC -EVQPJRHUUw899CLo2sx/42q5z0BoM339fvBnr2/vffZ8317n7L3WPlPx4cOHDx8+fPjw4cOH -Dx8+fPjw4cOHDx8+fPjw4cOHDx8+fPjw4cOHDx8+fPjw4cOHDx8+fPjw4cOHD59/SKuzJzn7 -whp7frj+cme/5exO0xz3+TxTi6knXH+L6TLTeFd3t8qNYYzUd5xprWmRq59s6pK9I4x/g2mE -qcN03//RgcP6aLvK2VeYrg3tF5vuqnHo+MJ4C02jQ11yyBjngEzDdKvp0cI4I01PmNbzn78z -I01yW6gbIafOKvSt+nBIt+lF/pTy4cOHz1nhWZUpilkW2p42DTFdYrpREUrlNt/3ZS82PR6u -Te1bZN+vawe59hWKltLesNw02zTRtV+pSG652/Rvd+0P6do8RtpL1oTvsNo0z3Sd69P4rzvk -GpVvmq4PbaNMQ2U/FtpS/fOyXzJtC+0XmPa4jTZFRXe69jRBw03PuIlshPYc8ua2FSHySvxm -WuC+h2eeyoOme2S/2ywOeU45Q51DnqyJfnI5Rf09H6pcpidxasgllhbG8Twc8gzvkBaNmx23 -Sk+N51xFVW3OiU0V8raEz+eYBsueUOiff+hK0wOF9jtULig4e78LZ1/Q8nJpWC7XBSd5h3xk -ulpKT2e7bM92Z+cnmJ+D/Iu5SVa3s0t9HpHjV7mnkg8fPnz4nDmd1elnRXEtHhnW6LaaNbtd -dYtcblM6h2oN1/v9IPbtUv00fe7Q5/bCb0nBxVz3uUM5UlORI5GfVabk6YfQ5xWFtHOUS9Qd -zn2pcqfKT1V2FyKssUo273XRUk9wSDol3qB85SfVfaYE82gYc48clfKpGaablN80NEZTkb78 -q1XvsfjNCilL7DZdZDqmH3qo0CdN1hFl3p8rF1ldM16XnFLJQesKT2bO7v9Q+bX+9lehb04U -J6p9n2s70UzO2Oni/xTn7zL9Xp16OVQpoftExygxrPTvRdJRxzuy57pkclchYTsQlp1tfdws -6YkarZsh3yxfFPreZjrslqvXlHf81UwOSZP/jZT5IPTZG9b4vTV36T7F+UvdpLVq8j3fF77H -x4W6mWEPSMvpU7J7wg2yu/r7W8Upzv6RHyr0Mrhm842b+KDCZh6Dh4ZzxHemJaFvuqFel9Iy -mA4iX9aSOZ3vCj58+PDhQyBFJn9Wp95dJN4z/VKd/u87fPqBnPFOd9FMfq9wnD89A0Onsur0 -n4MHXf0O/tQMDOnN4IOmTaZvXf1W/tT0P3nvON/0ho4a8pL1K396+p90Evu2aXPVezA3VI7Z -WpM98+HDhw8fPnz48OHDhw8fPnz48OHDhw8fPnz48OHDhw8fPnz48OHDhw8fPnz48OHDhw8f -Pnz48OHDhw8fPnwGhpNYGq32Nn6+JQAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleFontSizeWithRTLabelled [ - -| v vv es shape | -v := RTView new. -vv := 10 to: 100 by: 10. - -shape := RTEllipse new size: #yourself. -es := shape elementsOn: vv. - -v addAll: es. -es @ (RTLabeled new fontSize: #yourself). -RTCircleLayout new radius: 250; on: es. -^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleFontSizeWithRTLabelledIcon [ - ^ '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' -] - -{ #category : #sources } -RTRoassalExample >> exampleForceBasedLayout [ - | v classes edges | - v := RTView new. - classes := (RTEllipse new - color: (Color purple alpha: 0.3); - size: 10) elementsOn: Collection withAllSubclasses. - (classes elementFromModel: Collection) trachelShape color: Color red. - classes @ RTDraggable. - v addAll: classes. - edges := RTEdgeBuilder new - view: v; - objects: Collection withAllSubclasses; - shape: (RTLine new color: (Color purple alpha: 0.2)); - connectFrom: #superclass to: #yourself. - edges do: [ :e | e trachelShape pushBack ]. - RTForceBasedLayout on: v elements edges: v edges. - "v addAnimation: (RTSpringLayoutStepping new view: v)." - v @ RTDraggableView. - ^ v -] - -{ #category : #sources } -RTRoassalExample >> exampleForceBasedLayoutAnimated [ - | v classes edges | - v := RTView new. - classes := (RTEllipse new - color: (Color purple alpha: 0.3); - size: 10) elementsOn: Collection withAllSubclasses. - (classes elementFromModel: Collection) trachelShape color: Color red. - classes @ RTDraggable. - v addAll: classes. - edges := RTEdgeBuilder new - view: v; - objects: Collection withAllSubclasses; - shape: (RTLine new color: (Color purple alpha: 0.2)); - connectFrom: #superclass to: #yourself. - edges do: [ :e | e trachelShape pushBack ]. - - "RTForceBasedLayout on: v elements edges: v edges." - v addAnimation: (RTForceLayoutStepping new view: v). - v @ RTDraggableView. - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleForceBasedLayoutAnimatedIcon [ - ^ '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 -/s2/+bch7X+UezlxUQktfwAAAABJRU5ErkJggg==' -] - -{ #category : #icons } -RTRoassalExample >> exampleForceBasedLayoutIcon [ - ^ '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 -/s2/+bch7X+UezlxUQktfwAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleGrayScaling [ -| v es n | - v := RTView new. - n := RTGrayLinearColor new - command: #asInteger; - scope: ($a to: $z). - - es := RTBox new - size: 40; - color: n; - elementsOn: ($a to: $z). - - v addAll: es. - es @ RTPopup. - RTGridLayout on: es. - - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleGrayScalingIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABfCAYAAAAeX2I6AAACt0lEQVR4XuWYP0ibQRiHu2Rx -yRIIggQkEBKFEBDxD8YDIWQRUQhkCYEsLi7SkAZcbnJ2dnbP0KE4Z3Z2d+hQ7NDF+e39oLrd -a1uQKM8DzxDeIwf3fN9w3yc+fPjw4cOHDx8+fPjw4cOHDx8+fPjw4cOHDx8+fPjw4cOHDx8+ -fPjw4cOHz38SXyEk2u12uLi4iDk1393dDZPJJHpqv/Pz8+ipNWdnZ9Fzc3MzbGxshNPT05hT -8w8ZxF5BUXToT09PllNzHfjj46N5ar+Hhwfz1Jr7+3vzVBQd+t3dneXUnB+EH4QfhB+EH4Qf -hB+EH4QfhB+Efw95n4xGo+jZarVCs9kMg8Eg5tR8fX099Pv96Kn9Tk5OoqfWHB4eRs9arRaq -1Wrodrsxp+YfMsh8PjdPRdGh397eWk7NdeCz2cw8td/NzY15as319bV5KooO/erqynJqzg/C -D8IPwg/CD8IPwg/CD8IPwg/Cv4e8Tw4ODqLn6upqqFQquq3HnJqvrKyE7e3t6Kn90g06empN -Chw9y+VyKJVKoV6vx5yaf8ggl5eX5qkoOvT0icRyaq4DT58+zFP7pc8a5qk16a0zT0XRoac3 -ynJqzg/CD8IPwg/CD8IPwg/CD8IPwg/CD8KHz1+QPjOYZ/oEoZu43hLLqfny8rJu2uap/RqN -hnlqTfo/8ywWi3FpaUm3ccupOT8IPwg/CD8IPwg/CD/IGwfZ29uz4+PjF7e2tvhBFhlEEabT -6YudTocfZNFBjo6O+EHeCzs7O5/39/d/DYfDH+Px+Hv6/ZV/Kn9IT5J5FgoFPWnSHOO/BlGI -Z/lBFhxkbW3tS6/X+/ls+v2NX2KBQfjwg/CD8OEH4QfhB+EH4cOHDx8+fPjw4cOHDx8+fPjw -4cOHDx8+fPjw4cOHDx8+fPjw4cOHDx8+fPi8Nb8Bjy8MaRHyChQAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTRoassalExample >> exampleGrid [ - -| v es | -v := RTView new. -v @ RTDraggableView. -v @ (RTGridView new gridSize: 10). -v @ RTZoomableView. - -es := RTBox new - color: Color green; - size: 20; - elementsOn: #(1 2). - -v addAll: es. - -es @ (RTDraggableSnapToGrid new gridSize: 40). -es @ RTResizable. - -es first translateTo: 70 negated @ 90 negated. -es second translateTo: 70 @ 110. - -^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleGridIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABeCAYAAADVA7GfAAABwUlEQVR4XuXbTQqCQACAUc9t -RNeKpJ3HEG/gvnFo+tlEY5vBwIleIkMLFfl8+IM2McYUQkixYFzOpcutXf+W29piX0qWbW6P -3/NPybj8lS63dv1bbmuLfSlZ1g/iB/GD+EH8IH6Q1UGif5XlX2X5QnwhvhBfiC/EF+IL8YX4 -QnwhvhBfiC/EF+IL8YX4QnwhvhBfiC/EF+IL8YX4Qnwh1Y+qOc7Z7AupeFQ9AzS3fPKFVDyq -LuHyEcQX4gvxhWRCFpMvxL/K8l+U84P4QfwgfhA/iB/ED+IH8YP4QfzH7/6NoS/EF+IL8YX4 -QnwhvhBfiC/EF5KPwzD4Qn5FyDiOqe/7NE2TL8Q/h/hC/HOIL8QX4gvxhfhCfCG+EF+IL8QX -4gvxhfhCfCG+EF+I/xqQH8QP4gfxg/hB/CB+ED+IH8S/D/lyPF/P6fA2neaTfx9SU8jhMb1/ -hr2LO19ITSH76z77Nr6dW1+IL8QX8hq72KU2tq/5GI6+EP8qyxfiP+31hfhCfCG+EF+IL8QX -4gvxhfhCfCG+EF+IL8QX4gvxhfhCfCG+EF+IL8QX4gvxhfhC/Bfl/CB+ED+IH8QP4gf5wyB3 -CTnGiKMrhLsAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTRoassalExample >> exampleGroupOfGroups [ - " - self new exampleGroupOfGroups - " - -| objects groups edgesBlock1 edgesBlock2 colorNormalizer groupsOfElements v predicate layoutClass filteredObjects shape elements edges | -objects := Collection withAllSubclasses. -groups := Array with: -([ :c | c name endsWith: 'List' ] -> RTGridLayout new) with: -([ :c | '*Set*' match: c name ] -> RTForceBasedLayout new) with: -([ :c | '*Dictionary*' match: c name ] -> RTTreeLayout new) with: -([ :c | c name endsWith: 'Array' ] -> (RTWeightedCircleLayout new initialRadius: 60)). - -edgesBlock1 := [ :c | c dependentClasses ]. -edgesBlock2 := [ :c | Array with: c superclass ]. - - -colorNormalizer := RTMultiLinearColorForIdentity new numberOfColors: groups size. -groupsOfElements := RTGroup new. -v := RTView new. -groups doWithIndex: [ :assoc :index | - predicate := assoc key. - layoutClass := assoc value. - filteredObjects := objects select: predicate. - shape := RTEllipse new size: 20; color: (colorNormalizer rtValue: index). - elements := shape elementsOn: filteredObjects. - elements @ RTPopup. - v add: elements. - groupsOfElements add: elements. -" edges := RTEdge - buildEdgesFromObjects: filteredObjects from: #yourself toAll: edgesBlock1 using: (RTLine new color: Color red) scope: elements. -" - edges := RTEdgeBuilder new - elements: elements; - connectToAll: edgesBlock1. - - v addAll: edges. - - layoutClass on: elements edges: edges. - - RTEdgeBuilder new - elements: elements; - connectToAll: edgesBlock2. -" v addAll: (RTEdge - buildEdgesFromObjects: filteredObjects from: #yourself toAll: edgesBlock2 using: (RTLine new color: Color green) scope: elements)." -]. - -RTFlowLayout on: groupsOfElements. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleGroupOfGroupsIcon [ - ^ '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' -] - -{ #category : #sources } -RTRoassalExample >> exampleGroupedLayout [ - - | view group1 group2 host1 host2 edgesGroup1 edgesGroup2 | - view := RTView new. - group1 := (RTBox new color: (Color blue alpha: 0.3); size: 30) elementsOn: (1 to: 10). - group2 := (RTBox new color: (Color blue alpha: 0.3); size: 30) elementsOn: (1 to: 10). - - host1 := (RTBox new color: (Color green alpha: 0.3)) element. - host2 := (RTBox new color: (Color green alpha: 0.3)) element. - - view addAll: group1; addAll: group2; add: host1; add: host2. - - edgesGroup1 := RTEdgeBuilder new - view: view; - elements: group1; - connectFrom: [ :v | v //2 ]. - edgesGroup2 := RTEdgeBuilder new - view: view; - elements: group2; - connectFrom: [ :v | v //2 ]. - - - RTTreeLayout on: group1 edges: edgesGroup1. - RTTreeLayout on: group2 edges: edgesGroup2. - - RTNest new on: host1 nest: group1. - RTNest new on: host2 nest: group2. - - RTHorizontalLineLayout on: (Array with: host1 with: host2). - - host1 @ RTDraggable. - host2 @ RTDraggable. - - view canvas addMenu: 'In' callback: [ RTZoomInMove on: view ]. - view canvas addMenu: 'Out' callback: [ RTZoomOutMove on: view ]. - - view @ RTDraggableView. - - ^ view -] - -{ #category : #icons } -RTRoassalExample >> exampleGroupedLayoutIcon [ - ^ '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 -DO2Li2xss+0AAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTRoassalExample >> exampleHappyNewYear2018 [ - -| x y z da toBeTrans shape f v e | -z := 20. -x := 960/z. -y := 500/z. -toBeTrans := #(241 194 147 100 241 193 146 99 52 53 54 55 104 153 202 250 298 346 394 441 488 535 582 629 676 723 770 817 865 913 961 1009 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 205 158 111 64 65 66 67 116 165 214 1072 1073 1074 1075 1028 981 934 886 838 790 742 694 646 598 550 502 454 406 358 310 262 253 301 1023 974 349 397 445 493 541 589 637 685 733 781 829 877 925 237 188 139 90 89 88 87 134 181 228 276 567 568 518 469 420 372 324 569 570 523 476 429 381 333 285 619 668 717 614 661 708 756 804 852 900 948 997 1046 1095 1096 1097 1098 1051 1004 957 909 861 813 765 81 129 177 225 273 321 369 417 465 513 561 609 657 705 753 801 849 897 945 993 1089 1041 128 175 222 269 316 363 410 457). -da := 0. -shape := RTShapeBuilder new. -f := 1. -shape box. -shape - size: z; - color: [ :dd| | d | - d := dd + (da degreesToRadians sin * 100). - Color - h: (d % x) / x * 360 - s: 1 - l: (d / x) floor / y ]. -shape if: [ :d | toBeTrans includes: d ] color: Color transparent. -v := RTView new. -0 to: (x*y)-1 do: [ :d | - e := shape elementOn: d. - e translateTo: ((d % x) * z) @ ((d / x ) floor * z). - e attributes at: #p put: e position. - v add: e. - ]. -v elements when: TRMouseEnter do: [ :ev | | p el a | - el := ev element. - p := el attributes at: #p. - RTLinearMove to: p during: 2 on: el. - a:= RTLinearMove - to: (400 atRandom @ 400 atRandom)- 200 asPoint + p - during: 2 on: el. - a after: [ v addAnimation: (RTLinearMove to: p during: 2 on: el)]. - v addAnimation: a. - v addAnimation: (RTRotationMove angle: 360* 2 during: 4 on: el). - ]. -v addAnimation: (RTActiveAnimation new - intervalInMilliseconds: 20; - blockToExecute: [ - da := da - 1. - v elements updateShape. - v signalUpdate. - ]). -^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleHappyNewYear2018Icon [ - ^ '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 -IKTo7T9crVEAAAAASUVORK5CYII=' -] - -{ #category : #icons } -RTRoassalExample >> exampleHappyNewYearIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABjCAYAAABt56XsAAACGElEQVR4XuXZW08CQQyG4aII -iMhBMCYeY/TCCy9M/P//TTDZRMZDt9uuXfZ9Ei4G2H5dDNMhCh8fHx8fHx8fHx8fHx8fHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX2cMjo5lOK6/jq7nzcu+ -38B+TmQ828j9++4xl8tnba2Vttbz5lll52v9yEquX6sndg9trQVY63nzrLLztX5kLpunr09o -ay3AWs+bZ5Wdr/Ujg+3+NZXlzbmsH0cyWfy0PpPV3UKuXnZrdTcs3l+nvifPukfn5Nfvx77H -Bb8/+vrs/luv750hbed1rf/W63tnSNt5Xeu/pfrN9zjvHhyzh+f136yfP373ZM+AQ7/eWk/N -y54Bh369tZ6alz0DDv16a71fXnecizs2Q7L7r1dv//Pee30kp4vqr7PcPultwFsvup/s/LKe -tpa13L5FfkW99aL7yc4v62lrmcnFQ2QD3nrR/WTnl/W09edF1Z47lNE04qaqPbFpPe/12f2X -ys+3XLd6v/wZ0rE8/gzpWB5/hoTkxf6P+fueaKvftxliyjOfk4PP3d683s0Q8zk5+Nztzevd -DGl0Tg48d3vzejlDtHOy9XeKtZ43L9p/52ffLx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f -Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fX+EDGUbckNrlS/AAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTRoassalExample >> exampleHighlightingNeighbourg [ - - - | v es | - v := RTView new. - es := ((RTBox new size: 30)" + RTLabel") elementsOn: (1 to: 16). - - es @ (RTHighlightable highlight: [ :vv | Array with: vv - 1 with: vv with: vv + 1 with: vv - 4 with: vv + 4 ]). - - RTGridLayout on: es. - v addAll: es. - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleHighlightingNeighbourgIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABjCAYAAABt56XsAAABGklEQVR4XuXXwQnEIBBA0SnL -YzpKCZZjGZZiKdkGJgqGLLu8B3MSPOSDTMLn8/l8Pp/P5/P5fD6fz+fz+Xw+n8/n8/l8Pp/P -5/P5fD6fz+fz+Xw+n8/n8/l8Pp/vV5znWbN5chZRaz6+pTHGlc2Ts4jrysfnB/GD+EH8IH4Q -P4i/ZflBnnx0P8jXn6z5s+Q/WX4QP4gfxA/iB/GD+FuWr/d8IlprPZvV2exO39L98+L/qftB -fH4QP4jPD/JXjiOfiFLKkc3qbHanb2F3td1fiX2v/KnvP2c+P4gfxA/iB/GD+EFesbva7q/E -Pp/P5/P5fD6fz+fz+Xw+n8/n8/l8Pp/P5/P5fD6fz+fz+Xw+n8/n8/l8Pp/P5/NxPvWi+6f+ -K4KdAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTRoassalExample >> exampleLabelAndCircle [ - -| v s es | -v := RTView new. - -s := RTEllipse new + (RTLabel new text: #name). -s allOfSameSize. -es := s elementsOn: Collection withAllSubclasses. -es @ RTDraggable. - -RTEdgeBuilder new - view: v; - elements: es; - connectFrom: #superclass. - -v addAll: es. - -RTClusterLayout on: es. -^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleLabelAndCircleIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAlqklEQVR4Xt3d5a8sWdUG8P4X -+MpHwidICARJCAmSMASXYdDBBhkGGNzd3d3d3d0Z3G1wmcHdXare+u2cp7PuvlV9us89d+77 -vp3U6T6ley95luy1d63GcffPa17zmuHcc88dvv71r48//OEPx69+9avjN77xjfZ7afvgBz84 -vulNbxrf/va3jy9/+cvH6173uuMTn/jE8cwzzxw/8IEPjJ///OfHpzzlKePLXvay8alPfer4 -kpe8ZLzb3e42Pu1pT2vbc5/73HbdKaecMn7yk59s93nAAx7Q9r3uda8bX/GKV4z3uMc92v1e -+cpXjr/73e+G8f/gZ7XNSZ/61KeGX//618OTnvSkRlydf9e73jX+4Ac/GL/97W9vZMRJJ500 -vvWtbz1i35vf/OYj/v/Wt741fu5znxuf/vSnjx/96EePOOYZvj3ne9/73viqV71q9jkY8+lP -f5qwjK9//evbvnPOOWf485//PPy/YMi///3v4fvf//7wi1/8Ykin3/KWt4zvfOc7jyDEe97z -niP+f9vb3rb+/ZnPfOYIwt773vduvx/84AePH/rQh8ZLXOIS6+Pf/e53B1L9xz/+sRHwX//6 -1zAxafjVr341PPrRj25a5Fk044EPfGC75g1veMP6+vve977j1N4jnr/N9qMf/ag94/e///3o -2T7/6xjyj3/8Y3jxi188vvrVr24SBwJoxAte8IIGJQ972MPGO93pTuOLXvSiBicf/vCHm4Se -ccYZ4/Oe97zxWte6VmPGwx/+8PEWt7hFI+Id7nCH8eY3v3n7xtQnPOEJA5j629/+1gjwhz/8 -4ShC/Oc//1nv+/GPfzxMsLgWjne84x3t+7Of/WzTCO2kRZj0nOc8p2nh85///HbO4x//+Pb9 -xje+cXzoQx9K48f3vve942Uuc5kGla6lebaPfexj49e+9rXhr3/963BCGTIRfZjgYqDmGg+X -NfqmN73peOc733l897vf3YgJyzEBvtuPcc94xjMaw3Ls6le/+njb2952fOxjH9sIgKE3uclN -1tfQvtoI2tA37C9/+csR+yqBHPvlL3853O9+92vPvOc979mI7jswyq4tacWXv/zl9e9PfOIT -TWAw5UpXulKza09+8pNHEH3CGEISJ8K2Dj7qUY8a73Of+4zvf//7x9vc5jbtN6LSjI9//OPj -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' -] - -{ #category : #sources } -RTRoassalExample >> exampleLabelledEncapsulating [ -| classes allClassElements v es enclosing label g1 back | -classes := RTShape withAllSubclasses. -allClassElements := OrderedCollection new. - -v := RTView new. - -classes do: [ :cls | - es := RTBox elementsOn: cls rtmethods. - es @ RTPopup. - - back := (RTBox new color: Color blue) element. - RTNest new - layout: RTGridLayout new; - on: back nest: es. - - enclosing := (RTBox new color: Color transparent) element. - label := (RTLabel new text: #name) elementOn: cls. - g1 := RTGroup withAll: (Array with: label with: back). - RTNest new - layout: RTVerticalLineLayout new alignCenter; - on: enclosing nest: g1. - - enclosing @ RTDraggable. - - v add: enclosing. - v add: back. - v addAll: es. - v add: label. - - allClassElements add: enclosing. -]. -RTFlowLayout on: allClassElements. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleLabelledEncapsulatingIcon [ - ^ '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' -] - -{ #category : #sources } -RTRoassalExample >> exampleLabellingNodes [ - -"La parte superior entre barras define las variables" -| vista e1 e2 e3 e4 line | - -"Se crea un objeto tipo vista" -vista := RTView new. - -"Definimo los elementos, que denominamos simplemente e1, e2, etc, con -su color y su tamaño" -e1 := (RTEllipse new color: (Color blue alpha: 0.4); size: 20) elementOn: 'hello'. -e2 := (RTEllipse new color: (Color red alpha: 0.4); size: 20) elementOn: 'Bonjour'. -e3 := (RTEllipse new color: (Color yellow alpha: 0.4); size: 20) elementOn: 'Gutten Tag'. -e4 := (RTEllipse new color: (Color green alpha: 0.4); size: 20) elementOn: 'BuenGiorno'. - -"Adicionamos los elementos a la vista" -vista add: e1; add: e2; add: e3; add: e4. - -"Decimos que los elementos antes definidos se podrán arrastrar" -e1 @ RTDraggable @ RTLabeled. -e2 @ RTDraggable @ RTLabeled. -e3 @ RTDraggable @ RTLabeled. -e4 @ RTDraggable @ RTLabeled. - - -"Decimos qué propiedades va a tener la línea que los conecta los elementos" -line := RTArrowedLine new color: Color red. -line withOffsetIfMultiple. - -"Decimos de dónde a dónde van las líneas que unen los elementos en la vista" -vista add: (line edgeFrom: e1 to: e2). -vista add: (line edgeFrom: e2 to: e1). -vista add: (line edgeFrom: e1 to: e2). -vista add: (line edgeFrom: e2 to: e2). -vista add: (line edgeFrom: e3 to: e4). - - -"Decimos que dispocisión van a tener los elementos en la vista. -En este caso se van a disponer de manera circular" -RTCircleLayout on: (Array with: e1 with: e2 with: e3 with: e4 ). - -"Abrimos la vista" -vista canvas. - -^ vista -] - -{ #category : #icons } -RTRoassalExample >> exampleLabellingNodesIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAADX0lEQVR4XuXaW0sbQRjGcT+q -X8AboXjhByioeKtXDaUgXil4IUIEY42IRBM8RGMUNWliJFJajaI5PXbegdWNVKypp+T/LMuy -2exC5sfszjubnttbfj5SevhNwAfhhw/CB+GHD8IH4YcPwgfhhw/CB+GHD8IPH4QPwg8fhA/C -Dx+ED8IPH4QPwg8fhB8+CB+EHz4IH4QfPggfhB8+CB+EHz4IP3wQPgg/fBA+CD98ED4IP3wQ -Pgg/fJBnZ2trS2dnZ/rbsUKhoHK5rGKxKD7IGyUajSqZTCqRSGhpaUmZTEarq6t+jcVi/vPN -zU2Ptr6+LoudZ8d2dnbEB3nhWCOXSiVls1m/TaVSOj099b3C9nd3d/2+fS98XrPZVDqd5oO8 -ZfLKK+GWulv4t6x3zp72NB5a+CDvnFnNtoCU3cIH4fcQPkjLM+TbZ/4z5KPEFSDSwID4heEL -x2qL4+NjnZ+f6+TkxA9jbUhrtUelUlE+n9fl5aWWl5d1c3Ojw8ND/XBrcXpaurh4FCQY8tr3 -rU6xmmRtbU18kCdihZ4h7O/v31XcV1dXHska8eDgwH9mx46OjjQ5MaHs5KSv0J+69sLCgsew -9WGdwgd5JI1GQ+FtrVaTrcF+y23KsrGhubk5X6H/y/XtWlYk2rZer/N7SNvPCGVc68/Ktnef -tVF5x+OS6yh2d+P3kPYxcg5iPLS6/e3tZzfo1JQ7e/x+5YO0DZJoBfk131ZjhjH4IP8FUn/Q -Q55/73czj0p/WdH0p7jHmJnhg7wATHvTIYahlRVpdFTX13LDZ4lfh7wXYgjDjaXlXpxIg4N8 -kNeI1SU2HLZ3I0HRmMvlFLxV/O1qmsr8vJojI/cjMzdMlqtd+CCvEKsnIpGIf2sYFI2G8dNV -41+HhvR9eFil0HSKYfCnTt4g1Wr1rqHtVW7VYchNpTQe9IxO+C1d9QyRFRpjY1Jvr9TXJy0u -qpMwugpEVoIHBUZ/v1QodBxGd4HEYq1Vn41t3Qxxp/2O7gGxyakAw1V9nfo7+P9c5IPwwwfh -g/DDB+GD8MMH4YPwwwfhg/DDB+GHD8IH4YcPwgfhhw/CB+GHD8IH4YcPwg8fhA/CDx+ED8IP -H4QPwg8fhA/CDx+EHz4IH4QfPggfhB8+CB+EHz4IH4SfD5A/mYBKdt936qgAAAAASUVORK5C -YII=' -] - -{ #category : #sources } -RTRoassalExample >> exampleLabels [ - -| v es | -v := RTView new. -v @ RTDraggableView. -es := (RTEllipse new size: #numberOfMethods) elementsOn: RTObject withAllSubclasses. -v addAll: es. - -es @ RTPopup @ RTLabeled @ RTDraggable. -RTFlowLayout new maxWidth: 900; gapSize: 50; on: es. - - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleLabelsIcon [ - ^ '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 -RK5CYII=' -] - -{ #category : #sources } -RTRoassalExample >> exampleLazyFormLoading [ - " - self new exampleLazyFormLoading - " -"This example shows how to do lazy form loading. It is used to make Roassal use OpenStreetMap by loading tiles" - -| forms v emptyForm s elements visibleInteraction | - -forms := TRPlatform current colorFormClass allInstances select: [:f | f extent = (16 @ 16) ]. - -v := RTView new. -v @ RTDraggableView. - -"We first create elements on an empty form" -emptyForm := TRPlatform current colorFormClass extent: 16 @ 16 depth: 32. -emptyForm fillColor: Color blue. -s := RTBitmap new - form: emptyForm. -elements := s elementsOn: (1 to: forms size). - -"We add all the elements to the view" -v addAll: elements. - -"We define an interaction to capture the exact moment an element is visible or invisible" -visibleInteraction := RTVisible new. -visibleInteraction - visibleBlock: [ :el | - Transcript show: 'refresh'; cr. - el trachelShape form: (forms at: el model). - el signalUpdate ]. -elements @ visibleInteraction. -"We do the layout with a gap, for the purpose of the demo" -RTGridLayout new gapSize: 90; on: elements. - -"To make sure if we drag and drop a form, the view get translated" -elements @ RTEventForwarder. - - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleLazyFormLoadingIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAADI0lEQVR4XuXc30tTYRzHca/6 -T/oTugmioDtvErqrLgJBCrqOCiq0MuwXmJUkGok/oUCl6XRuTedJmdqmc5ubbnNT25xTR4M0 -UPaJuoguu3iio+83jHP35TnPazvPzWEVEj87VcHfAj4IPz4IH4QfH4QPwo8Pwgfhxwfhg/Dj -g/Djg/BB+PFB+CD8+CB8kL8rNnTf+OKS44+0s2IZm+fxDOlb8o2CkwNG1zlttehdZ5N9QApx -h4qOShUyC8ZuMjpQo4PtYW0Em8zt3KZXHZ6o/OmiltN5Y2NnAkE1DvVofT1tD5B8fEQqBVTa -TBv95uWXJv7JYyEUiRqdl9stq67NxT9D+GcIPz4IH4QfH4QfH4QPwo8Pwgfhxwfhg/Djg/BB -+PFB+PFB+CD8+CB8EH52ADn9ZFx1z1t/XU3lT0e1Gu7RTGTd6A0HZzqUW08amzc3O6jaVy26 -XX9P87Mf7AHyE+PY8ZNGN67d16yY+5paHXPGZi4nltTr6lNhLWxspvXJrcfXr6rFGZJlue3z -C/nzaqKxcFDJQJd8n82+OFHfMaitvbKxeU6PpXw8pXAkKqfb4p8h/DOEHx+ED8KPD8KPD8IH -4ccH4YPw44PwQfjxQfgg/Pgg/PggfBB+fBA+CL//DfJ1zFJy+4tGol7jC9xKLBub5fH51d/d -oGAgZGxmJptVuXyg/YN9+4DsOEcVy2fkCI0au9GXLo8WVtOa6HtmTrc4ralJh7IbIWP/5OCe -mlNi0VIiGbcPyPk775VNWMqO3zS2d9bHNlnBmEr75l5ImF/MaXGtJH8kZ2zm1HxKt154dKNx -+GifIV7X29+fw1Bnv0/BcIJ/qPMPdX58ED4IPz4IPz4IH4QfH4QPwo8Pwgfhxwfhg/Djg/Dj -g/BB+PFB+CD8jiJIcWpae13dKjQ1G5vpcLtV9WBYF556ja41U3NFK9WXtbuRswdIe+eEzlY+ -NHqT39Oryl+sVq62wdjMMZ9Xl+726kT1a6NrTZ06p9SZKu1l8/xHFv+RxY8Pwgfhxwfhxwfh -g/Djg/BB+PFB+CD8+CB8EH58EH58ED4IPz7I4eoHSM9N3guI5iUAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTRoassalExample >> exampleLinkingObjects [ - | associations v labels | - associations := OrderedCollection new. - associations - add: 'bonjour' -> 'hello'; - add: 'homme' -> 'man'; - add: 'femme' -> 'women'; - add: 'hello' -> 'goodbye'; - add: 'people' -> 'homme'; - add: 'people' -> 'women'. - - "We create the nodes" - v := RTView new. - v @ RTDraggableView. - labels := Set new. - associations - do: [ :assoc | - labels - add: assoc key; - add: assoc value ]. - labels - do: - [ :aLabel | - | n | - n := v elementFromModel: aLabel. - n - ifNil: - [ - n := RTBox new + RTLabel elementOn: aLabel. - n @ RTDraggable ]. - v add: n ]. - - "We add the links" - RTEdgeBuilder new - view: v; - objects: associations; - shape: (RTLine new color: (Color blue alpha: 0.4)); - connectFrom: #key to: #value. - - - "We do a layout" - RTForceBasedLayout new - charge: -500; - on: v elements. - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleLinkingObjectsIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAEl0lEQVR4XuWb2y9jURSH/XFe -PXrAQ0UmPHjoqJgIIxWRIC4JIploXBqXMm0xTFJSSpEIEYJoRlQMKlqXMGlaNdhrztqmTVXH -PPWcw+9LVtJzeOn52HuttdfJIsJHT2ThPwJ8IfjgC8EXgg++EHwh+OALwReCD74QfCH44AvB -B18IvhB88IXgC8EHXwi+EHzwheALwQdfCD74QvCF4IMvBF8IPvhC8IXggy/kf9ze3tL19XXa -wBeiAaFQiJaWlmhlZYUODw+fBb4QDfB4PAkBbreXcnI+UFNTE3V3d+ML0QKfz5cQsr6+TmNj -Y/T164oSy/hCtCASiYiLi4u0cXwsZOAL0RE2m03ZX45lpO4xyXF1dSXwhaiAwWAgq9VKnZ2d -tLZ2RA0NA2SxWGhkZISam5uprq6OBgYGyOVyibu7O4EvJMMYjUYpYHFxkerr62lnZ4eqq7/I -+xy1tbXU399PhYWFQsnW8IVkmviSlLz5c8zOBp5dK+kz/pKlBvf39+JfEQr9Tnx+eHjAF6I1 -igNFij6zMDghsVhMcJycxEQk8vQ5XeALUXlv4djcPHqRBsf3HHwhKtHa2koFBQXkdDqVDX5W -ybZsNDg4SOXl5bIvxtmYw+HAF6IWNTU1VFJSQo2NjTQ/P0/Dw8NUXPyZ6xGZInOPjO/hC1GJ -oaGhF8uU0/ldWap+6qJjjH9A9Zfzc31kXfhCktjb014KvpAUzs60lYIvRCEYDIp4bG+HRPJ1 -coTDYYEvROXahMPl8tPy8rLMupLvq3Fejy9EgWuSlpYWys3NlW157gYXFZllCsyd4o6ODpku -syB8ISrAx7+jo6NSQG9vrzzcslq/0dbWFo2Pj9P+/r4sIvkaX4gKpBsl8vl+idR7PHqEL0RD -lB6jwM+ydMTBAb4Q+EIRX0gSj4+PIhqNJiIcjj67jkcmz0uy1N4s9TyPyw96ZmbmWe3h9Z68 -qFMCgcDbFMLpZOqXSddt1cs8LgupqKiQ5yF8PpKdnU15eSXye5hMJlmTcOo7MTHxNoVUVVXJ -cRvO8bm44oKrtPQjVVZWykKM56Kmpqb4C+pGCIvg85D4qBAPdCf/YXFdYrfb36YQHkrjU7i5 -uTmanp6WD99o7KTJyUn5M47V1VVd/Ye8NuX45pesy8tLkRoWi02ku4+fUmiYZfEYDv6j15EQ -nw9fiK6EKMcK+EK0FnJzcyPiM09ud0C+7cShx1cCYIS0tbXJiXO73ZGYQueU2Ov14gvRQggP -ofFM1FOe30D5+Sb5TmB7ezu+EC2EpMvpPZ4T/CVL6009FZ70UHp2+FJIR93eSESIYBBfiuZC -uNObuoTFP/O7gKlL3Huv6jUXwu+Yc8ubm3accfX19dHCwg8yGD5RWVmZ7LzyfW5AcqcYX0iG -4UYjT56bzWb5qgBnYD09PVIQC+Hm5O7uLnV1dcnfOT09xReSSVgG1yavdVc3NjbI7/fjL1n4 -4AvBF4L/CPCF4IMvBF8IPvhC8IXggy8EXwg++ELwheCDLwQffCH4QvDBF4IvBB98IfhC8MEX -gi8EH3wh+OALwReCD74QfCH44At5z/wBWVep7TxiFq0AAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTRoassalExample >> exampleMakingVisualizationFit [ - | view | - view := RTView new. - view - addAll: - (RTBox elementsOn: Collection withAllSubclasses) @ RTDraggable. - RTEdgeBuilder new - view: view; - objects: Collection withAllSubclasses; - connectFrom: #superclass to: #yourself. - RTTreeLayout on: view elements edges: view edges. - view @ RTDraggableView. - view edges do: [ :e | e trachelShape pushBack ]. - (RTGroup withAll: view elements) translateTo: 0 @ 0. - - "Removing this line will make the visualization larger than the window" - view canvas camera focusOnCenterScaled: 500 @ 500. - ^ view -] - -{ #category : #icons } -RTRoassalExample >> exampleMakingVisualizationFitIcon [ - ^ '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' -] - -{ #category : #sources } -RTRoassalExample >> exampleMenu [ - -| classes v n shape es | -classes := RTObject withAllSubclasses. -v := RTView new. -v @ RTDraggableView. -n := RTMultiLinearColorForIdentity new objects: classes. -shape := RTEllipse new size: #numberOfMethods; color: n. -es := shape elementsOn: classes. -es @ (RTMenuActivable new action: #inspect; item: 'browse class' action: [ :e | e model browse ]). -v addAll: es. -RTFlowLayout on: es. -^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleMenuIcon [ - ^ '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 -dTJs+3921Y0yRVF0kwAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleMetricNormalizer [ -| v es | -v := RTView new. - -es := RTEllipse elementsOn: RTObject withAllSubclasses. -es @ RTPopup. -v addAll: es. - -RTMetricNormalizer new - elements: es; - normalizeColor: #numberOfLinesOfCode; - alphaColor: 0.4; - normalizeSize: #numberOfMethods min: 5 max: 15; - normalizeX: #numberOfMethods min: 0 max: 300; - normalizeY: #numberOfVariables min: 0 max: 300. - - ^ v -] - -{ #category : #sources } -RTRoassalExample >> exampleMetricNormalizer2 [ - -| v es | -v := RTView new. - -es := RTEllipse new color: Color blue; elementsOn: (Collection withAllSubclasses). -es @ RTPopup. -v addAll: es. -RTMetricNormalizer new - elements: es; - alphaColor: 0.3; - normalizeSize: #numberOfVariables min: 5 max: 20; - normalizePosition: [ :aClass | aClass numberOfLinesOfCode @ aClass numberOfMethods ] min: 0 @ 0 max: 300 @ -300. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleMetricNormalizer2Icon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABeCAYAAADVA7GfAAACnUlEQVR4XuXcSyt1URyA8eMy -lJm5r2BqwMhMJjLyAZSBKRNjU0ouKQaUAQYMRCkTYiIjUSi55BYmpFweb//W4JR6Ry97n/0+ -T606J7P1a6299znLKX19+aukSv4p8IP484P4Qfz5Qfwg/vwgfhB/fhA/iD8/iD8/iB/Enx/E -D+Iv+vgAP0gFdXDgB/FvWf78IH4Qf34Qf34QP4g/P4gfxJ8fxA/izw/iB/HnB/HnB/GD+POD -fOvkBF5ff+6LJD/IP1YEDP+W5Qf5/S4vi7E1aUDu7uDz0w/izw/iB/HnB/GD+PODZNPLC+zv -+5/U/flB/CD+/CB+EH9+ED+IPz+IPz+IH8SfH8QP4s8P4gfx5wfxg/jzg/jLDyS+tbu4KO6Z -qf8OZGUFFhfh6sqPUjEgIyOwtgbX136UXEDiWOfxcZr8OHcbBw0CJoZ/+nMAiYPP3097xPut -LdjchLk5ODz042S6ZZ2eQox4HRf1hYW0Qvr70xa2upr+Fhd9P8gvFpO/t1feomJMTsLgYHo9 -OwvT03B7myCKcG6qsCDLyzA1BcPDZYy4w1paKoPEODryI2QKMjQEo6MwPg5nZ3B+DnFxDwj/ -7W/GW9bGBszPQ18fdHcnnJsbP0LmIG9vaUV0dEBbG7S2QktL2qr8W1TGIA8PsL2dMJqaEkRP -D/T2wswMvL9D/M7tT/74sB/kLz09pZXR3Az19dDQkFDiTsr/MJgDSPzDZayIqiqorU0onZ2w -u5u2Kv/HJRmDTExATQ2USlBXl1ZHfG7ln+acQNrbE0aMxkYYG4PHRz9IbiADA1BdDV1d6Sn8 -/t6PkStIAKyvw84OPD/7MSruwdCfH8QP4s8P4gfx5wfxg/jzg/jzg/hB/PlB/CD+/CB+EH9+ -EGd/ACi98fSb7A31AAAAAElFTkSuQmCC' -] - -{ #category : #icons } -RTRoassalExample >> exampleMetricNormalizerIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAADQ0lEQVR4XuXcbUuaYRjG8b5y -HyAc9aoFgdiLoBas9SC55osg2ohYjKLSIJNasZ6gNEer1O5yVh7tOm9SGuyBJPO2/wEXdyJC -XL/u83q4L2u7u+MnSGnjdwEfhB8+CB+EHz4IH4QfPggfhB8+CB+EHz4IP3wQPgg/fBA+CD98 -ED4IP3wQPgg/fBB+WgtEt7fyZmZUz2e92VkVRkdV8TyhQaamphQKhfSqo0NvBwY06zr03eBg -fZ3qPvu9vV3lo6NHf74wMiJrP1Mp8e+QJ0z58LCuDi1vb+tqcVH8ksVPsEAKhYLGx8bU09Oj -97GY7HV0eFjp9fVa43f5M4LIJZPJKJFI6Pj42F7q29aWisVirfG7nF+y+CD/S6VS0c3NjezK -J2gwSDweV1dnp153dysSDivixpNxG0fcFPTHyYkPsLezoy/z89rd3eWD8EsWH4SfZoO8cav0 -2MSEJqJR9ff1aXhoyC9Z5XJZq0tLfpk62NvTwf6+ttNpv/EpGgiy48aIXC6nI7ftYRBbm5u1 -8SN7vxVSdGsUmwYXzs78xqfglyw+SDWlUknVlT2f4BlBbBsl3Nurj9PT6o9E9MldDSO5suJf -426cqeLwwy9ZfBB+mgjiXVwo4UrTqttoTK2tyWZXV5eXslU6v9v5IHyQlx7PPa/PuD+y6+tr -tTyIrdhbHcPu/mprCZBsNitrn+fmFJ+c/O2Xtmlv1j3IalUQuzMegnhPeLqFX7LqiJWpKsZq -Min+GBKg0vUiBvWz01NZs5/z5+f66jYf+bxBAtnY4IPwSxYfhJ8ggDw83GCxLfcPsZi/Yl9a -WPB3fvkMTb5D7GmhfxTITR/z+TwfhF+ygCAXbnPRNhj/9J4dbvjXsdKUHUWt42sIfJBGgbjV -Lx+EHz4IP00CeTi1rR5y4Hd9gO4Q/kkTfsnig/wtWejsKZAg9ug2ubzMB+GXLD4IP3wQPgg/ -fBA+SMOmvvzpb0BA/O8ZuqmvtVY/wcgvWXwQfvggfBB++CD88EH4IPzwQfgg/LyQlfr9fwTi -JyB3CH8fi1+y+CD88EH4IPzwQfgg/PBB+CD88EH44YPwQfjhg/BB+OGD8EH44YPwQfjhg/DD -B+GD8PPY/AJeDlpBtqIlvwAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleMidPointCenterUsingBezier [ - -| v es startingElement shape | -v := RTView new. - -es := (RTEllipse new color: (Color blue alpha: 0.4); size: 15) elementsOn: (1 to: 20). -v addAll: es. -es @ RTDraggable. - -"we are properly locating the nodes" -startingElement := (RTEllipse new color: (Color red alpha: 0.4); size: 20) element. -v add: startingElement. -startingElement @ RTDraggable. - -RTCircleLayout new initialRadius: 80; on: es. -es translateTo: 0 @ 0. - -startingElement translateBy: -150 @ 0. - -"Building the bezier lines" -shape := RTBezierLine new - midPointInCenterOfObjects: (1 to: 20) inView: v. -v addAll: (shape edgesFrom: startingElement toAll: es). - - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleMidPointCenterUsingBezierIcon [ - ^ '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 -Dz/8rFr+AnBX68ww1MTcAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTRoassalExample >> exampleMovingCamera [ - - | v menu | - v := RTView new. - v add: (RTEllipse new size: 50) element. - - menu := RTMenuBuilder new view: v. - menu menu: '<-' callback: [ v canvas camera translateBy: -10 @ 0. v signalUpdate ]. - menu menu: '->' callback: [ v canvas camera translateBy: 10 @ 0. v signalUpdate ]. - menu menu: 'V' callback: [ v canvas camera translateBy: 0 @ 10. v signalUpdate ]. - menu menu: '^' callback: [ v canvas camera translateBy: 0 @ -10. v signalUpdate ]. - - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleMovingCameraIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABjCAYAAABt56XsAAABj0lEQVR4XuXVIU+CURgFYJOF -TzY3JsFNNzc3i2wEA6MatJMcweAcFIk6ihuFgNViwPEfDCT+AM0RIJGtGrTpNbB9YwiFfeCe -ZzvhvvGccDd8Pt8S7YdEU7c9v5blu55xOww5mrqVQyqx907IuV/fcl2EXIUcxG7bIYWQs5B0 -7H4ccuNX5vP5fD6fz+fz+Xw+n8/n8/l8Pp/P5/P5fD6fz+fz+Xw+n8/n8/l8Pp/P5/P5fD6f -z+fz+Xy+/yybze7mcrkTv4kVq1Qqt/1+/208Hn9PUq/XH6IoSvvtJKzRaDzGh4in1+uNNgO/ -pYTk8/nCX2NM0ul0un5TCWm1Ws+LBvmN31RCBoPBuz/IGul2u6/+IGukWq3eLRpjOBx++k0l -aDQafc0bpFgsnvotJSiTyWTDX/Ixa4xSqXTpN7Qi5XK52mw2n9rt9kutVrtPpVJbfis+n8/n -8/l8Pp/P5/P5fD6fz+fz+Xw+n8/n8/l8Pp/P5/P5fD6fz+fz+Xw+n8/n8/l8Pp/P5/P5fD6f -zzffDyz/G9+Gw2cAAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTRoassalExample >> exampleMovingEdges [ - -| v edges es | -v := RTView new. -edges := OrderedCollection new. - -es := RTBox elementsOn: (1 to: 300). -RTGridLayout new gapSize: 30; on: es. - -es do: [ :e | - | te | - te := RTBox element. - te translateTo: e position + (0 @ 10). - edges add: ((RTArrowedLine new color: Color black) edgeFrom: e to: te). -]. - -v addAll: edges. - -v when: TRMouseMove do: [ :evt | - edges do: [ :edge | - edge to translateTo: (evt position - edge from position) / 10 + edge from position. - ]. - v signalUpdate. -]. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleMovingEdgesIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABeCAYAAADVA7GfAAAUlUlEQVR4XuXd1a5uRbMG4Hkh -3ACcwDEh4RI4AYIeQIDgEIK7u7u7u7u7u7u7u47172fs1EyvmtUfPwvZrD06+TLXGj3aqqq7 -3n5bxtyiRYuHL774YljUCQ8++GA37r777uvGffLJJ924H374oRt37733duPeeuutbtyrr746 -/Pjjj2X8L7/8Msxqx0MPPdSNe/TRR7txn376aTfuuuuu+6/lNvffFvjKK68M3333XRn/7LPP -DkIV98033wzSVnEff/zx0BP6448/3hXcAw880I177733ho8++mjoCfT+++8v4+6+++5u3Btv -vDG8/PLLZdytt946EOpvv/02VIroGerTTz895kk+XYXMspzHHnts6Fl4ryEq88gjj5RxKkOw -VdxLL700vPjii0Ov1+gBPaEyjvycsKTROypjevvtt4fvv/9+qMq65557SkO88847h55MKKIn -E4og56xA/1fWXCvwSstff/318PDDDy94/vPPP4/PzjvvvLLg999/f2aP6gmVIqru/9NPPw0n -nnhiN03PEjW+p3j10BMXFcO2Xlalk+bdd98t26YeVX5GD8p98sknF8S9/vrrgyH9+uuvH+Z7 -yJdffjk89dRTpTUfeeSR5fPzzz9/MDxUDSW8atx87bXXBsOGsnKcOoiTNguAIii4ssQnnnhi -wbBHObfccss4VGZfcvnll4/Wm4dnCiBkcXpa9g/e97c1pBB+pQgjgNHj+eefH6655pr5uOg5 -OgBFUEjbI0eFXHHFFcM+++xTCnfZZZctLUWXvfjii0sfsPzyyw/GXb2rfb7ffvsNBx988IKe -aChZZpllBgrLee2+++7DQQcdNHzwwQdDtjp1ZjDVuH7ppZcu6DUMgSBOPfXUBWkOPPDA4bbb -bltQN8Z45plnlj3wnHPOGW644Yah6pWM4fbbbx8yECE38szlXH311aNBzMWw1PMdLHfRHww9 -pxrDXIV8qvE9HGovTS+/ngOeBUwoq0J8hPjcc88NWQ7KN+b75V6txxBwHlnkY2Q54IADFpRz -ySWXDIcddtgw90cE3YOSvxe3pGGWofyZ8NVXX/2lBvh7YRbszz1lMYWEY6kCS+hZcQ9RCMbQ -XoU4uR6yMxRK2yuv58RZZYW0Ypi94447us7fUNeLg/yquJtuumnozV0MgXpKD4Eqb6ZCqvGw -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' -] - -{ #category : #sources } -RTRoassalExample >> exampleMovingGrid [ - | v es size initialLayout layout step | - v := RTView new. - v @ RTDraggableView. - size := 10. - es := (RTEllipse new - size: 20; - color: (Color red alpha: 0.4)) elementsOn: (1 to: size * size). - v addAll: es. - es @ RTDraggable @ RTPopup. - "es when: TRMouseEnter do: [ :evt | evt element translateBy: (20 atRandom @ 20 atRandom) - (10 @ 10) ]." - RTEdgeBuilder new - view: v; - elements: es; - connectFrom: #yourself - toAll: - [ :value | - value \\ size = 0 - ifTrue: [ Array with: value + size ] - ifFalse: [ Array with: value + 1 with: value + size ] ]. - initialLayout := RTGridLayout new - lineItemsCount: size; - on: es. - layout := RTForceBasedLayout new initialLayout: initialLayout. - step := RTForceLayoutStepping new - view: v; - layout: layout. - v addAnimation: step. - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleMovingGridIcon [ - ^ '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 -foMMNP4E5gU0YnvlseEAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTRoassalExample >> exampleNamedPopup [ - -| v es | -v := RTView new. - -es := RTLabel elementsOn: (1 to: 10). - -v addAll: es. - -es @ (RTPopup new - named: #yourself - background: Color blue - group: [ :group :el | - - group addAll: (RTEllipse elementsOn: (1 to: el model)). - RTWeightedCircleLayout new - initialRadius: 50; - on: group. - ]). - -RTHorizontalLineLayout on: es. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleNamedPopupIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABeCAYAAADVA7GfAAAB4UlEQVR4XuXVu4oiQRSA4Xlk -IwMTcx/AVF/B1MBLoHiJVAwEUQRBDARFBDU47tTCFt0PsMPA94Pgae0W6+uivz4fv9/Ul78E -PoifD+KD+PkgPoifD+KD+PkgPoifD+Lng/ggfj6ID+Lng/ggfj6ID+Lng/j5ID6Inw/ig/j5 -ID6Inw/ig/j5IH4+iA/i54P4IH4+iA/i54P4IH4+iJ8P4oP4+SA+iJ8P4oP4+SA+yI81n8+j -OO92uxiNRvnY5XKJ6XRa+s54PM7zer2O8/mc5+PxGJvNJs+32y0Gg0Hp/MlkkufX6xWdTqf0 -eavVisViEf1+PziQ2WxW+tNpIXq9Xj52Op1KIM1mM9rtdp5Xq1XUarU81+v1T6VSKV1zOBzm -+fF4RLVazfP7/Y4EcL/f87FGoxHf10kvb4dst9t4Pp95Ma7Xa2lxDofD37u1eE5a1H/vl8tl -FHfZfr+PIkDq+07P79NvpV1U/Lzb7ZbmdEOkXVbcaf4zxH+G+Pkgfj6ID+Lng/ggfj6ID+Ln -g/ggfj6Inw/ig/j5ID6Inw/ig/j5ID6Inw/i54P4IH4+iA/i54P4IH4+iA/i54P4+SA+iJ8P -4oP4+SA+iJ8P4oP4+SB+PogP4ueD+CB+PogP4vff+wMItDGYvnMiCAAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleNestingAndEdges [ - -| v es | -v := RTView new. -es := (RTBox new color: (Color blue alpha: 0.4)) elementsOn: (RTShape withAllSubclasses). -v addAll: es. - -RTNest new - for: es add: [ :group :model | - group addAll: (RTBox new elementsOn: model rtmethods). - RTGridLayout on: group ]. - -es @ (RTShowEdge new - connectToAll: #dependentClasses; - shape: (RTLine new color: Color red); - yourself). -es @ (RTShowLabel new - color: Color red; - highlight: #dependentClasses; top; yourself). -RTGridLayout on: es. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleNestingAndEdgesIcon [ - ^ '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' -] - -{ #category : #sources } -RTRoassalExample >> exampleOrthoHorizontalLines [ -| v eb | -v := RTView new. -v addAll: (RTBox elementsOn: Collection withAllSubclasses). - -eb := RTEdgeBuilder new. -eb shape orthoHorizontalLine. -eb view: v. -eb - objects: Collection withAllSubclasses; - connectFrom: #superclass - to: #yourself; - build. - -v elements @ RTDraggable @ RTPopup. -RTHorizontalTreeLayout on: v elements. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleOrthoHorizontalLinesIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAC+0lEQVR4XuXdW2sCMRCGYf// -n/RORfEsHmG3pLBlG9PdtNrkm3kDgsjWiz7OJpNMspO21WuHw6HJuW6z2Txddz6fm8vl8vma -Tqft8Xhsdrvd13Xb7bZVbpPWGUiqXa/XJkCFV0Dig7wB5HQ6ffvlB4zZbDb4y1ePBtMg4ded -+IfzQdRA+lHjobmJEC/NNEgYPfUjpHtvOWrMR0g3erLYX7gD6V/HBxEACUlfP7/o3lvJOdyB -pD4bG/byM/XCIP3P+CACIOE2xh9lCYHkzoPxQQqBxLkJH6QyiPXcRBJkv98/zewul8u3TDjy -Qf7Q+gtKXftpMWooQvi3rMIgj8fjKZLm8zk/QmqBjP0tH0QEhD/KEgLh5yHCIN0tK16P54MU -BEnNZQWQfm4Szwor9TWuQVJNfcLRHYilGizXIPwVQ7FMnQ9SAaQ/UgrzXev1ml+XVQskVYM1 -1oHzQQqDxHNZ/LqsyiD3+51fl6V6y+KDCICEaRLLOYdLEH6ECIFYX/twB8LfHyIIws9DKoKk -1s/5ESIWIfw8hN+p80GGQPh5CD8P4YPwp04MgfBHWUIgHpsZEOsViS4jxFvOYRrE44jKNEi8 -J50PUqClzsFKDXFzG387wpvaKxUm1nMTUyBjFSYearXMgOQ267Va7kCs12rJghByDpMRwgcR -ixDPOQc/QvggfBA3IN6q2rHDXj5IgQjhg/DzED4Iv1N30IdYP6PXJYi3SDINwi+UEwOJz2bk -gxQEifuLcM1iseDvD6kJwo8QAyD8/SFCIPxRlhiI9bOx3IFkfA8fpCRIfNZJyEv45/aK9SHW -94yYWFOPf/mv3Mb4IPw8hJ+H8EEqgfD3qYuBeKzfMgPi8VkhpkFSjX/LEgThj7KEQKw/K8Q1 -yNBTD/jPDykEkvvc2/j5IXyQAiC/+G4+yH+B8NdDKoDwKxf5IHyQnFvW7Xbj7w+pCZKzHsIH -qRgh8VwWH0RwlMV/fohQHxKOa+JPLlYE4ddlVQaJT/lZrVb8E+VUI8QzyAdHik3+wPASdAAA -AABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleOrthoVerticalLines [ - -| v eb | -v := RTView new. -v addAll: (RTBox elementsOn: Collection withAllSubclasses). - -eb := RTEdgeBuilder new. -eb shape orthoVerticalLine. -eb view: v. -eb - objects: Collection withAllSubclasses; - connectFrom: #superclass. - -v elements @ RTDraggable @ RTPopup. -RTTreeLayout on: v elements. - - ^ v -] - -{ #category : #sources } -RTRoassalExample >> exampleOrthoVerticalLines2 [ - | v shape | - v := RTView new. - v - addAll: - ((RTEllipse new - size: 20; - color: (Color red alpha: 0.3)) elementsOn: (1 to: 20)). - shape := RTMultiLine new. - shape orthoVertical. - shape color: (Color blue alpha: 0.3). - RTEdgeBuilder new - view: v; - objects: (1 to: 20); - shape: shape; - connectFrom: [ :n | n // 3 ] to: #yourself. - v elements @ RTDraggable @ RTPopup. - RTTreeLayout on: v elements. - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleOrthoVerticalLines2Icon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAACk0lEQVR4XuXYP0vkUBSH4fn+ -zX6JLRa2E2HRBZnCSplCbERBReyChWihzdV740yyiWG5yTqTZJ8XLvMv50wmb2J+x8Xbm8+U -WPiHwBfi4wvxhfj4QnwhPr4QX4iPL8QX4uML8fGF+EJ8fCG+EB9fiC/ExxfiC/Hxhfj4Qnwh -Pr4QX4iPL8QX4uML8YX4+EJ8fCG+EB9fiC/ExxfiC/HxhfhCfHwhPr4QX0hvQlGEcHAQwslJ -SOz8+5+eQlguP9bzc/CF7O2Fap2e7l7I/n79/fG5LyQeiNW35ccBiVfKqCdEXL6Q4+NaSPzz -tfPvv7yshcTn/k09slrt/t7h39R9IeMIeXgIoe+6uupfk9bd3TCRqa7d6/q6uc7PP2+TAiFx -hQz9odus69pmVkKG5vl02hU/j3rPIeHmJhQ/fodwdtbrIKXty7rb25Dbu9yxuH/lfn5h8FhM -Mc+n7Yvvv3rNIeHxMTTqMtPRJlFVdbFPTu/yZPnjvXkIGZjnh8wh6Qxu1F1c5NXF7Rp1HVfJ -pne1Uk36T8IWZpXFFPP80DkkHB7Wda+veUJeXmohsf5vvavfEnuXd/PN67i/fuydSJ0/h/hC -/j3P58wK7bmjaw65v/9clzO/tKNpep1T918I+ao8PzTzb7P37IS083zXHJKT57vmkLF7z05I -V55vzyG5eb49h4zde55C1nm+WvFsa88huXm+sU36fOTe8xSyzvPlWuf5rjkkJ8+nx+q99PkE -evOxV8UX4gvx8YX4Qnx8Ib4QH1+IL8THF+IL8fGF+PhCfCE+vhBfiI8vxBfi4wvxhfj4Qnx8 -Ib4QH1+IL8THF+IL8fGF+EJ8fCE+vhBfiI8vxBfi4wvxhfj4QnwhPr4QH1/IxHkHjKX55SNV -WJ0AAAAASUVORK5CYII=' -] - -{ #category : #icons } -RTRoassalExample >> exampleOrthoVerticalLinesIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAC40lEQVR4XuWZ267CIBBF+/8/ -6Zsajfeo0Yd6zpiMQULplEJF106ItUIZuoTNtM3jwVdNavi3gA+ELz4QPhC++ED4QPjiA+ED -4YsPhA+ELz4QvvhA+ED44gPhA+GLD4QPhC8+ED4QvvhA+OID4QPhiw+ED4QvPhA+EL74QPhA -+OID4YsPhA+ELz4QPhC++ED4QGrXbDbjA6lJu92u/Qkgp9OpHVMOh0MVZT6ft9vt9uvL6Bly -uVyq/WdqbG6M7rnU2MeOOdRez/GB/BqQms3031eeRWJ0jzVuPTfFmN2+Qu313Gggsu59k2nm -mNHH47HN3X6/37/PkPP53F6v18FltVq1ssOxFgForStB9hXdXGg8fTfcAkTqxMYs/frn7ve7 -CdLtdnu21/ryXdqv1+vnZzO1F1j7sdzYmEeMBVJ6XKHY32YIH0hlQKYyZ2s/ffVCRm1tV8K0 -h47L/9SxNFNnumpepTLvHDM9ZaOSGq9v8I1miIvFImimvml2FYupSb3NZvOqL0WO3axf+9V4 -NBPXGHIsSV0mrjEsl8tXv3JejFfqabxS3KcEEqe2Cd0zbe9Lrif13d+b2BrXtc7lWkOtiVtu -j4i1ifXv17PG1xVTqD0fSK1AYplsDiPsu/7Q33MbsmX8frYdi68vMw/dk2imPuRfmWJqpbbZ -1k3DJzJ00+P3vunkHrsG7Bp/iqmVAOJvGkrALp2vDQKSusYPWVdLPOGt7VkYH8g3AQmZkG9E -KaZrfdycS6H4Sl7fWn8wkCmM6hOq+cVZFIifKeaSPM6XQgWSOv6mVPBjXpH+ApDU8fOB1AbE -alRDTWrMO+sc+vS7/tTxN3xjrczU+UD4QPjiA+EDGZWt8oHwxQfCFx8IHwhffCB8IHzxgfCB -8MUHwgfCFx8IX3wgfCB88YHwgfDFB8IHwhcfCB8IX3wgfPGB8IHwxQfCB8IXHwgfCF98IHwg -fPGB8MUHwgfCFx8IHwhffCC/qD8BcE4ipo/6xQAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleParallelCoordinate [ -| maxValue spaceBetweenLine lineHeight numberOfColumns numberOfLines values setOfElements v e t line| - -"Configuration" -maxValue := 40. -spaceBetweenLine := 50. -lineHeight := 150. -numberOfColumns := 10. -numberOfLines := 100. - -"Script" -values := OrderedCollection new. -numberOfLines timesRepeat: [ - t := OrderedCollection new. - numberOfColumns timesRepeat: [ t add: maxValue atRandom ]. - values add: t. - ]. - -v := RTView new. -setOfElements := OrderedCollection new. -1 to: numberOfColumns do: [ :i | - t := OrderedCollection new. - values do: [ :setOfValues | - e := (RTEllipse new color: (Color red alpha: 0.3)) element. - t add: e. - e translateTo: - (i * (spaceBetweenLine - 1)) @ - ((setOfValues at: i) * lineHeight / maxValue) asFloat. - v add: e. - ]. - setOfElements add: t. -]. - -2 to: numberOfColumns do: [ :column | - t := OrderedCollection new. - values doWithIndex: [ :setOfValues :index | - line := (RTLine new color: (Color red alpha: 0.3)) - edgeFrom: ((setOfElements at: (column - 1)) at: index) to: ((setOfElements at: column) at: index). - v add: line. - ]. - -]. -^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleParallelCoordinateIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAASD0lEQVR4XuXbVYxtRRMFYF54 -4I03CAkhQUJIcAgElwDBLQSX4O7u7u7u7u7u7u7u7l7Q3+5TI9y5d87kf/mT3snJ3LOlq2qt -VVXdffad6J9/2j/+n46J2oegfULaP9onpH1C2j/aJ6R9Qto/2iekfULaP9onpH1C2j/aJ6T9 -o31C2iek/aN9QtonpP2jfULaJ6T9o31C2iek/aN9Qto/2iekfULaP9onpH1C2j/aJ6R9Qto/ -2iekfULaP9onpP2jfULaJ6T9o31C2iek/aN9QtoiJC6+OGLnnSOeeiriww8jvv8+HOPcd8wx -EZddFuMbPP76K+KDDyJmmini999jQo7EF19ETDllxJtvRrz9dsSXX0b88ceIz8Qii8RogcWL -L0Y8/fTo991+e8Qzz0zYt59+ith114h33gn/nuC9W20VYhnV7q23Rv+EAOS00yI++STi77/r -5+OPIz7/POLXXyNefjni0UcjVlwxYvfdI156qX5HHAKB+emn9X5/l1oq4uGHO0fju+/qeO+9 -1wXXEYa4e++NWHzxzsn45ps6Vnl2GLnO33lnxCyzRFx+ecQPPwwLCunx2WcdwB14993XPTNB -YC66KOL++4ePIwa+8ZFd462zTvXp55+rj7/8Um2U7128nuHf2WcP+iy2HKfEPCA84y288BgI -KQ7GUUdVpSJgCOPxyit1QNlz4IERhx8e8eqrEffcE901xnvqjLvvjthvv4gppojYe++IO+6I -eP75+pEJAHTvtddGvP56xNJLRzz55LggI7YE1303Hps33xxx3XXV7mOPRTzxRABpGKgIQX4R -wYgZWQiN5ZePTtWXXlrFwRagieyNN6rQjHX++TVmz/Gfv67zDyF84Mtcc9X7fFwn6sx4/oj1 -lFMill12DIRw7NBDIx58MOKhh6oKbrihc25AwQDZd9+IM8+MOOmkmkHffhvx2281gzzHKY5v -skl1Qha8++4gaLLmrbfqc67NO2/EscdGvP9+tVnIHebXjTdWv+abrwKIdHYeeWQ4AASinG60 -UQUBoPn5+uvqI4VffXXELrtEnHtuxF13VaCJsQDb2etlaefPcst1oA/zB9nsEUOJq4tB5ir5 -niFOovzooypG97z2WnRl8tRTx0DIc89F7L9/VQMjBgAc54CI7T326NIzzjor4pZbqtI5ARzq -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' -] - -{ #category : #sources } -RTRoassalExample >> examplePlacingGroups [ - - | v g1 g2 | - v := RTView new. - g1 := RTGroup new. - g1 addAll: (RTBox new size: 10; elementsOn:( 1 to: 200)). - - g2 := RTGroup new. - g2 addAll: ((RTEllipse new size: 15; color: Color red )elementsOn: (RTShape withAllSubclasses)). - - v addAll: g1; addAll: g2. - - RTEdgeBuilder new - view: v; - objects: RTShape withAllSubclasses; - connectFrom: #superclass to: #yourself. - - RTGridLayout on: g1. - RTTreeLayout on: g2. - - RTConstraint move: g1 onTheRightOf: g2. - ^ v -] - -{ #category : #icons } -RTRoassalExample >> examplePlacingGroupsIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABgCAYAAADrc9dCAAAFSUlEQVR4XuWZzWsTURTFsxB0 -KVgU/NiJoNiqRUTBnehGQRSsbl2IC3HlqrjoQndCF36gC8GNIAoqCLq0gv4B6j/QjVShrW0n -H5N0kvt85yZv8jKZSSOkaZNzYMibmZP30vvLve9OkzOGX5tJOf4Q8APhFz8QfiD84gfCD4Rf -/ED4gfCLHwg/EH7xA+EXPxB+IPziB8IPhF/8QPiB8IsfCD8QfvED4Rc/EH4g/OIHwg+EX/xA -+IHwix8IPxB+8QPhFyGQpaUlPXo1DsNQj16O/TWGHsjs7KwevRq7APZy7K/BnyH8GcIPhL9k -8Zcs/gzZlBkiHz+KyeWMnDghED+QDQYS3LwphQsXzNKtW6b07Zvwl6w+l6zV1VWx1KVarcrC -woKEMzNSPHvWBNPTEvz6JfPz81IoFGRlZUXy+bzwZ8g6ZEgQBBJFkRSLRX2tVCoCMK5EAQ4g -4ToOeHBuF1cwpVJJIQHQepS1oQeCgLrgAUYyQxB0d14ul+Oxu4731mo1HQMGBJiAgvPFxUWd -A3M7H3/JSgiBcuUIr8n7uO6Cm7yeBOJA+fec12UXoAMIsmtubk7nBbC0tWkyBEFBkBGYTqUE -gUwG1y9n/jkywZ/fzyA/y+Dz72GMz4LswoHzfu1Bff/nouzcKXL1qriA4VuaFWBtZT9/Ftm1 -S6qTkxqkVI+dR44ckdq1a61Avn8X2b1btB1uKA/g1ivnzqF2tQHEobKfUQ4fFvn6VbMFnxOv -gF6xzUNw44bUXr7U96vXfkZ4B65klU6fNsUzZ0z1+fOuvnGyY4eEp06Z6vbt2aapKROOjxt9 -Bnn8uDmvPS8fPaqvvje4cqV+zY5T13z0SMpjYyY8frzNg30mmJgw1ZERnaP04YOUjx2rrz0y -MnhA/t65Y0I8uP350xWQaGpKVq5fN9GePdLpgbBy4EA9KN68eEB0D4pJb+H8eSOfPqVn3O/f -Uh4dlfzFi0bu32/z+PPCK1u21M9v3x64spbDxon2M62epwl+lKpioryk7R/JPaSTF/NmArZy -7XFWmRyqLgt/cFYHldxwcbigdPJjTr+z6lgGrTrN5eC7bm/ogbgAr5Ul7lvs/FlZ4u53821e -y4s9wnV5rrX+3ywZuJ9wAcL90cvLy6l/rN99uYBkZYHfpa319O17UZKS91FOk/C6La+D+2A4 -M2MKL16I21SjJ08E3QzaRm1F7bjy4EF9bL2lp0/Fba6F9+/1Pq47r86FdhUtKsYpG7HrsHxv -dPdu7MVmX52eNpHtmvT83j3RdeH78kXK795ldmUDDUTevBE5eFBq27bF7ejqvn31DunQoXqw -0a6OjmoA4I327m22rvYVLafvrW3dGnsr+/fX57LrtOwbr1+L73Xvjb1uTZw3vLpuw+va3OS8 -g/9g+POnyOXLLe1o3DbiAavxm4ae2wyKvfD4Xnu9zTsxIeHJk+rBOi1Afvxo9doMcPPqZ/Jb -WeuN17EZ5Lx6nph3aLosefZMe3jX98vDh819wP6WIY3fM9Rr77V48d7GXqHet2+bdR8Z2PC2 -dVcItOeVV69icDohyqSbF5Ds/dhr36dQ+X8P+T8Nc0e0bl3WMAPhzxB+IJsXCNpZbVUz/kfF -rz6XLBkb0y5LuyE8r/BnyAZnyKVLzfa0i46IH0gf9hC/RebXJuiyNlr8GcIPhB8If8niz5Ce -jPmB8APhF3/J4gfCL34g/ED4xQ+EHwi/+IHwix8IPxB+8QPhB8IvfiD8QPjFD4QfCL/4gfCL -Hwg/EH7xA+EHwi9+IPxA+MUPhB8Iv/iB8IsfCD8QfvED4QfCrx7oH6mCLh8Lryj6AAAAAElF -TkSuQmCC' -] - -{ #category : #sources } -RTRoassalExample >> examplePlatformPoup [ - -| view e | -view := RTView new. -e := RTBox new size: 20; elementOn: 'parangaricutirimicuaro'. -e @ RTDraggable@ (RTPlatformPopup text: [ :t| t, ' - - - - - -is a town in Mexico' ] color: (Color green alpha: 0.5)). -view add: e. -^ view - -] - -{ #category : #icons } -RTRoassalExample >> examplePlatformPoupIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAABDElEQVR4XuXVQQ0AQAgDQfyb -rBS4Lw4uzCYY6Dyobr+fKn8CH8TPB/FB/HwQH8TPB/FB/HwQH8TPB/HzQXwQPx/EB/HzQXwQ -Px/EB/HzQfx8EB/EzwfxQfx8EB/EzwfxQfx8ED8fxAfx80F8ED8fxAfx80F8ED8fxM8H8UH8 -fBAfxM8H8UH8fBAfxM8H8TsFkmSdD+KD+CA+iA/ig/hP3c8H8fNBfBA/H8QH8fNBfBA/H8QH -8fNB/HwQH8TPB/FB/HwQH8TPB/FB/HwQPx/EB/HzQXwQPx/EB/HzQXwQPx/EzwfxQfx8EB/E -zwfxQfx8EB/Ezwfx80F8ED8fxAfx80F8ED8fxAfx80H8XgPtoabWrQOqsAAAAABJRU5ErkJg -gg==' -] - -{ #category : #sources } -RTRoassalExample >> examplePolygons [ - -| clss v ver d composedShape e s | -clss := RTShape withAllSubclasses. - -v := RTView new. -v @ RTDraggableView. -clss do: [ :cls | - s := RTPolygon new. - ver := OrderedCollection new. - d := 0. - (cls rtmethods sortedAs: #numberOfLinesOfCode) do: [ :m | - ver add: (Point r: m numberOfLinesOfCode * 5 degrees: d). - d := d + (360 / cls rtmethods size). - ]. - s vertices: ver. - - composedShape := RTCompositeShape new. - composedShape add: s. - composedShape add: (RTEllipse new color: (Color red)). - e := composedShape elementOn: cls. - e @ RTPopup @ RTDraggable. - v add: e ]. -RTFlowLayout on: v elements. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> examplePolygonsIcon [ - ^ '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' -] - -{ #category : #sources } -RTRoassalExample >> exampleRectangleLayout [ - -| v | -v := RTView new. -v @ RTDraggableView. -v addAll: ((RTBox new size: [ :value | value / 2 ]; borderColor: Color black) elementsOn: (1 to: 100)). -RTRectanglePackLayout new on: v elements. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleRectangleLayoutIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABjCAYAAABt56XsAAAEZElEQVR4XuWdzys9URTA3//h -31CytJC1rJAsFEtLUX6UIhQ2FhaKFEVRJEWRlJVslFJiZ2tpd+f7zvQdjfvuzFx3fryZ+Zw6 -Pc2dH+/dz5x7zz333KvheXwpkzT4VcAHwhc+ED4QvvCB8IHwhQ+ED4QvfCB8IHzhA+ELHwgf -CF/4QPhA+MIHwgfCl8oDeX9/V19fX16SPj8/ezbnZXUv1+ddXl62HLu9va0OkJubG/Xx8eEl -6eHhoWdzXlb3cn3e5ORky7H5+Xk+ED4QPhA+ED4QPhAnIPIb+UD4QFhAokSaJz4QvoWUF4gM -zDY2NmJ1bGzMu76+jtWdnR3lCmR/f/+XyuC3MkCaFajkRyRpV1eXZ3OeDTjTW5ynhVQqdGJr -ITaVmKbS+ED4QPhAigKi9yF8IAUAierDuru7fddXVz6QlPeSStS9s/CxqOvW1taMcPlAcrAQ -m+v4QPhAyg3k7u6upVPVtb+/P3E809vbG1vOB2IJRKZMk8QUb7KpWBudnZ1tgTcwMFAdIFdX -Vyop1CHaaDQya45cmx4bNV0nz6udhZQNiOmlub+/V1tbW4oPpCQW8j82x7cQPhA+EKNKf7i7 -u6tMXh0fSJs69bm5OeXi+eGBBB3x4uKiMTwik1hxXt/x8bFRFxYWPD6QFBaiW0JQ5hrtNV3H -B+IAJBjhB6N4PpAYbfr3iRUdVIRt/xCMol9eXn4le5+envrnbG9vOwPRk62/v7/rBeQv8+RZ -TT65dup5xa0qCUQ6ZD6QEgERKQpIVCR5ZmbGH4+E9e3tTfGBpLzf+Ph4bAhfr/RAR0ZG6j8O -KZuFxJWZns8HwgfCB8IHUjCQcKXGfedwWGZvb0+dn5+r19fXenXqZ2dnKmmefGVlxTs6OlLy -aSqfnp7++Xt1dTUVsLjy8AuRl2W0HYhteMX2jU9yaflAKggkLnOxs7PT18HBwXpmLmYBRCon -aNslMyQPC5HvaerDapcGlLWF2AYq+UD4QJhA+E0WxMvCAHl6ekoN5OLi4scVfXh4UOHJr79G -euOavL6+vpb596mpqfqtws1LXbLc48pNZScnJ3wgfCB8IHwgfCA1BaIHIkdHR52BNDvwlqwT -yWzBABEvyeQppbEQ2TXCFUhecavCgCRtrRGVyhlendTR0RG7/My0olZ0c3NTLS0tKT1xISkn -KwpI1PFaBBeDCaesd/nR23YXC+UD4QPhA+ED4QPhAykCSOV2to5aFj00NOTv7KZ7RZLFIWqq -EPGOwuOJ5eVlfyo1aqMAWe0kgUZbDy94tkzThs8bHh72raCnp6ewrZlKMQ4Jj3htUnd0i/nr -3odRlatbgiz0FDFtSIAFIhYxMTGh+EBKZCHr6+ttBSKDTL3ZqxyQz89PFd7oS7L9ZEeEQKOu -a7blv1REdv8MHzs4OEj13UzPEJG+Knz88fHRa4fw/6FLyYQPhA+EL3wgfCB84QPhA+ELHwgf -CF/4QPhA+MIHwhc+ED4QvvCB8IHwhQ+k7vIP3qBBe9TjobAAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTRoassalExample >> exampleResizingElements [ -| v es resizeAnimation shape normalizer | -v := RTView new. -v @ RTDraggableView. -normalizer := RTMultiLinearColor new. -shape := RTBox new size: #yourself; color: [ :value | (normalizer level: (value / 100)) alpha: 0.4 ]. -es := shape elementsOn: (1 to: 100 by: 10). -v addAll: es. - -v canvas addMenu: 'Press me!' callback: [ - es do: [ :e | - resizeAnimation := - RTResizeMove new - toExtent: (100 - e model) @ (100 - e model) on: e. - e model: (100 - e model). - v addAnimation: resizeAnimation ] ]. -v addAnimation: (RTLayoutAnimation new elements: es; yourself). - - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleResizingElementsIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABjCAYAAABt56XsAAACBElEQVR4XuXYT0sqURjA4T6u -Oz+DfgmPdyeIi8ABcW0KbYS5biyajVxoIVFKhCWXC/UaUxAE0X8v0vODl8HhOAznEQZnb7Px -26X2/C3wQfxeA+l2u9HpdOK9X1gul+Fv2xZBUkrR6/Wi3W5HpVKJVqsV/X4/Go3Gw8aXWLVa -LarVaozH4yiKwgfZJshkMnnY4Ol0GoPBIMrPWZZFs9l8Oj8ajWI4HG7q9XrMZjMfxH+G+CB+ -PoifD+KD+PkgPoifD+KD+PkgPoifD+Lng/ggfj6ID+Lng/ggfj6ID+Lng/ggfj6Inw/ig/j5 -ID6Inw/ig/j5ID6Inw/i54P4IH4+iA/i54P4IH4+iA/i54P4+SA+iB8LEqtV3K5u4t/84vG4 -+hs386tnU667nK/jpfFBttB1fhJnKYvyeJ6fxlE6fDblmoNUxEvjg/gg1jPEB/FBfJDP5IP4 -ID6I/z9kB9pPi3htjvN15L/vIv26fXPKdfnJdaTs7ENT3kc6PIrPjA/ig/ggPogP4oP4ID6I -D+KD+CA/Mx/EB/FBvg3PB/FBfJAt5IP4IH7+6/f3/DKLg/jK5Is/ka+PIy32vzzldXwQH8QH -8UF8EB/EB/FBfBAfxAfxQXwQH8QH8UF8EB/EB/FBfBAfxAfxQXYxH8QH8UF2PR/EB/HzQXwQ -Px/EB/HzQXwQv//dPcyFUJ9iOehYAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTRoassalExample >> exampleResizingGroup [ - -| elements v handle callback | -elements := (RTEllipse new size: (30 atRandom)) elementsOn: (1 to: 30). -RTForceBasedLayout on: elements. - -v := RTView new. -v addAll: elements. - -handle := (RTBox new size: 20; color: Color red) element. -v add: handle. -handle @ RTDraggable. -TRConstraint move: handle onTheRightBelowOf: elements. - -callback := TRTranslationCallback new block: [ :shape :step | - elements extent: (handle encompassingRectangle topLeft - elements encompassingRectangle topLeft). v signalUpdate ]. -handle trachelShape addCallback: callback. - - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleResizingGroupIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAC7UlEQVR4XuWa6Y6jMBAG8+bz -prnv+77TTL5RMjLE7Cbg7BKqJH4MBEbqwu5um0oU8SkSFX4I+EL48IXwhfDhC+EL4cMXwhfC -hy+EL4QPXwgfvhC+ED58IXwhfPhC+EL48IXwhfDhC+HDF8IXwocvhC+ED18IXwgfvhC+ED58 -IXz4QvhC+PCF8IX8a9rtto3HY3PPdbtd6/f7xhfyZo7H40OQa7Va1Gq1LHnuejz89nw+G19I -IJbLpSnQs9ks0/2SpvvtCl9IAC6Xi/V6PdvtdpkCutlsbDAY8EcIn5II0WhI5oaQaOpSntFU -yBfyBM1m82fO/xvXnOJN3qvV6o+BPp1OP88fjUZ8IaGQDF+ibzQaH5fASyFEAZcMve3u+e12 -a1mrMb6QJ1GQkw3gq/I0Pe33e37Z+woqa30NXL1efyqnpKGcovun0+nDsw+Hg/maTr6QW5et -4Pv6EAUu7yhL+595ZJdaiN7gtMC9i/l8Xsjy9+OSuvLBrcqKBbPT6VgR3/jSC9G8r8Cv1+uY -EC2R+KY9vpDAVVaetSgVClqW51dZGaYgXyWkYOqaknvWPJH2bO2p8JN6yltcrVZNK7Np1/NO -cb7zw+HQtFTDF8KHL4Qv5M1omd5dSFTF5SuF+UJylrK+gCq36JqbY5Ss3fn/dn+sudQamO7z -5aBbsWB8ISnc9ykUaF/pq2uvdvKTySS1QuML4cMXwhcSuEP/pOeWWoh2/TT3LxaLoMFTt67n -FvkDh0IK0VKKdvlC742/67nIHKK3+7qr+Pu3dhjd/fP7Prtb4mokhB5lfCHR77dUkdt33BcG -7yWt70uUou4IlmKEqCl0+wmNhGQuSDaV2vp9avv36yt+8IX87whU4gdfCF8IXwhfSIHh5xA+ -fCF8IXz4QvhC+PCF8IXw4QvhC+HDF8KHL4QvhA9fCF8IH74QvhA+fCF8IXz4QvjwhfCF8OEL -4QvhwxfCF8KHL4QvhA9fCB++EL4QPnwhfCF8AvINhKVoOa9+wjYAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTRoassalExample >> exampleRotatingAnimatedLabels [ - - - | v shape timer | - v := RTView new. - timer := TRVITimer new cycleLength: 2. - - - shape := RTRotatedLabel new. - "shape angleInDegree: [ :cls | cls numberOfMethods negated / 1.5 ]." - shape angleInDegree: [ :cls | - | valueEnd | - valueEnd := cls numberOfMethods negated / 1.5. - TRVIAnimatedValue new - evaluator: [ :t | 0 interpolateTo: valueEnd at: t ]; - timer: timer; - yourself. ]. - - shape text: [ :cls | ' ', cls name ]. - shape color: (Color black alpha: 0.2). - v addAll: (shape elementsOn: Collection withAllSubclasses). - - v canvas color: Color white. - v addAnimation: RTResetAllShape new. - timer start. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleRotatingAnimatedLabelsIcon [ - ^ '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' -] - -{ #category : #sources } -RTRoassalExample >> exampleRotatingElements [ -| v es | -v := RTView new. -es := (RTBox new color: (Color blue alpha: 0.4); size: 30) elementsOn: (1 to: 60). -v addAll: es. - -es when: TRMouseEnter do: [ :evt | evt element trachelShape rotateByDegrees: 5. evt signalUpdate ]. -es @ RTDraggable. -RTGridLayout on: es. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleRotatingElementsIcon [ - ^ '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' -] - -{ #category : #sources } -RTRoassalExample >> exampleRotatingLabels [ - - - | v shape | - v := RTView new. - shape := RTRotatedLabel new. - shape angleInDegree: [ :cls | cls numberOfMethods negated / 1.5 ]. - shape text: [ :cls | ' ', cls name ]. - shape color: (Color black alpha: 0.2). - v addAll: (shape elementsOn: Collection withAllSubclasses). - - v canvas color: Color white. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleRotatingLabelsIcon [ - ^ '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' -] - -{ #category : #sources } -RTRoassalExample >> exampleSVGPath [ - -| paths v normalizer es | -"Icons have been obtained from http://iconmonstr.com" -paths := RTGroup new. - -paths add: 'M50,50.002c48.046,20.595,149.05,16.396,142.596,109.369l-36.781,37.526 - C64.183,198.499,65.876,100.672,50,50.002z M236.836,314.404c46.488,35.155,202.98,145.061,202.98,145.061 - c12.942,8.801,28.532-7.157,19.496-19.948c0,0-113.425-153.879-149.669-199.452c-28.634-36.068-42.95-37.333-93.729-52.295 - l-33.528,34.274C198.463,272.378,200.123,286.61,236.836,314.404z M153.117,371.604l44.978-45.096 - c-4.459-4.19-8.398-8.315-11.852-12.423l-45.263,45.381L153.117,371.604z M294.64,179.983l82.462-82.647l36.982,36.999 - l-80.619,80.786c7.511,9.02,13.965,17.519,21.392,27.191l107.139-107.34l-84.96-84.969L261.664,165.591 - C273.768,169.513,284.464,173.88,294.64,179.983z M377.672,122.197l-68.18,68.348c4.124,3.42,8.315,7.267,12.573,11.692 - l67.743-67.903L377.672,122.197z M211.137,337.707l-61.792,61.927L98.214,413.8l14.149-51.147l63.117-63.268 - c-6.119-10.008-10.595-20.637-14.752-32.673l-79.412,79.562L50,461.996l116.276-30.745l72.555-72.688 - C221.665,346.056,221.145,345.721,211.137,337.707z'. - -paths add: 'M410.5,101.5c0-28.449-23.051-51.5-51.5-51.5s-51.5,23.051-51.5,51.5 - c0,22.716,14.786,41.76,35.188,48.617c2.884,73.729-34.702,81.785-85.792,92.547c-29.346,6.186-62.514,13.311-86.73,35.801V149.848 - c19.958-7.091,34.333-25.951,34.333-48.348c0-28.449-23.051-51.5-51.5-51.5s-51.5,23.051-51.5,51.5 - c0,22.397,14.375,41.257,34.333,48.348v212.304c-19.958,7.091-34.333,25.951-34.333,48.348c0,28.449,23.051,51.5,51.5,51.5 - s51.5-23.051,51.5-51.5c0-22.229-14.149-40.988-33.864-48.215c4.635-67.324,44.124-75.656,93.334-86.033 - c52.146-10.981,116.287-24.745,112.934-126.638C396.484,142.321,410.5,123.621,410.5,101.5z M122.104,101.5 - c0-17.041,13.855-30.896,30.896-30.896s30.896,13.855,30.896,30.896S170.041,132.396,153,132.396S122.104,118.541,122.104,101.5z - M183.896,410.5c0,17.033-13.855,30.896-30.896,30.896s-30.896-13.863-30.896-30.896s13.855-30.896,30.896-30.896 - S183.896,393.467,183.896,410.5z'. - -paths add: 'M209.965,376.166c-27.661,0-56.127-12.17-74.132-37.217c2.95,0.235,5.767,0.369,8.432,0.369 - c68.315,0,44.845-77.526,114.953-78.272l31.584,26.337C295.598,345.639,253.787,376.166,209.965,376.166z M377.307,216.813 - c20.352-31.97,65.783-117.074,83.15-150.175c1.074-1.869,1.543-3.747,1.543-5.541C462,55.038,456.635,50,450.734,50 - c-2.348,0-4.795,0.805-7.008,2.666c-28.666,24.258-101.256,86.177-128.951,112.019c-26.286,24.585-26.387,35.826-34.902,76.354 - l28.834,24.031C346.93,249.353,357.928,247.215,377.307,216.813z M393.334,252.966v174.7h-309V187.333h173.342 - c11.232-30.704,29.875-45.725,96.194-103H50V462h377.666V199.052C415.831,219.923,405.772,237.961,393.334,252.966z'. - - -paths add: 'M118.672,424.778c78.741,6.521,50.544-77.132,123.401-77.903l31.55,26.338 - C281.486,468.265,165.209,489.488,118.672,424.778z M360.125,302.636c24.493-38.44,100.367-167.347,100.367-167.347 - c6.035-10.687-7.377-21.852-16.748-13.965c0,0-112.821,98.095-146.099,129.184c-26.302,24.584-26.419,35.815-34.937,76.335 - l28.835,24.04C329.767,335.174,340.763,333.046,360.125,302.636z M154.146,369.189c11.433-19.48,30.008-51.114,76.343-56.009 - c7.444-35.825,10.428-56.646,43.721-87.76c23.57-22.011,84.776-75.689,120.533-106.921c-17.166-37.903-71.079-69.06-140.382-68.489 - C140.633,50.94,49.102,143.813,50.007,257.574c0.402,49.974,18.558,95.621,48.415,131.061 - C126.183,396.011,139.208,394.62,154.146,369.189z M273.473,97.352c18.909-0.109,34.416,15.121,34.601,34.04 - c0.066,18.935-15.139,34.483-34.099,34.609c-18.977,0.159-34.466-15.104-34.567-34.064 - C239.207,112.95,254.461,97.502,273.473,97.352z M170.541,131.693c18.91-0.176,34.467,15.062,34.534,34.039 - c0.201,18.994-15.105,34.425-33.998,34.601c-18.977,0.134-34.483-15.112-34.602-34.115 - C136.325,147.292,151.53,131.818,170.541,131.693z M136.141,234.666c18.994-0.125,34.5,15.146,34.601,34.072 - c0.167,18.952-15.104,34.468-34.098,34.601c-18.977,0.135-34.417-15.121-34.517-34.081 - C101.959,250.29,117.23,234.842,136.141,234.666z M308.341,381.125c0.369,38.423-15.138,63.838-28.866,78.74 - c-0.252,0.269-0.537,0.504-0.789,0.755c90.208-10.126,155.555-73.879,107.559-135.42C362.674,360.338,342.74,367.11,308.341,381.125 - z'. - -paths add: 'M179.997,83.572V272.42c-15.98-17.393-43.605-38.143-70.619-36.524 - c-32.408,1.941-38.563,36.646-10.562,62.864c47.141,44.139,94.575,109.268,105.167,163.24c0,0,140.646,0,184.41,0 - c0-108.793,35.16-131.914,41.555-188.706c4.786-42.488-6.636-75.721-41.023-80.612l4.742,13.429 - c1.827,6.01-1.573,12.363-7.588,14.185c-6.018,1.82-12.371-1.575-14.188-7.594l-4.521-12.506 - c-4.734-15.642-19.271-17.712-40.844-20.582l5.641,16.599c1.827,6.016-1.581,12.369-7.598,14.194 - c-6.01,1.813-12.363-1.582-14.183-7.597l-4.083-12.843c-4.896-16.162-18.077-17.917-41.978-21.556l5.349,17.832 - c5.002,16.528-26.534,24.509-26.534-21.546V83.572C243.141,65.03,230.11,50,211.569,50S179.997,65.03,179.997,83.572z'. - -paths add: 'M236.105,181.743L419.02,325.125l-78.146,13.294l49.697,101.311L345.002,462l-49.983-102.275 - l-58.913,53.492V181.743z M209.991,275.845v-27.536l-27.961,12.44l5.284-54.958l-44.66-32.461l50.238-22.901l5.783-54.909 - l44.953,32.059l50.441-22.445l-5.286,54.955l44.662,32.465l-27.023,12.318l22.304,17.481l54.393-24.795l-67.916-49.369l8.038-83.573 - L246.533,98.75L178.172,50l-8.794,83.499L92.98,168.327l67.917,49.363l-8.036,83.573L209.991,275.845z'. - -paths add: 'M50,121.974l214.373,168.043l-91.587,15.581l58.244,118.734l-53.405,26.101l-58.581-119.864 - L50,393.26V121.974z M350.522,61.567c-61.567,0-111.477,49.908-111.477,111.477c0,61.567,49.909,111.477,111.477,111.477 - c61.569,0,111.478-49.909,111.478-111.477C462,111.476,412.092,61.567,350.522,61.567z M351.741,247.129 - c-8.746,0-15.84-7.095-15.84-15.843c0-8.746,7.094-15.835,15.84-15.835c8.75,0,15.839,7.089,15.839,15.835 - C367.58,240.034,360.491,247.129,351.741,247.129z M364.193,200.31v2.851c0,0-23.747,0-26.108,0v-2.851 - c0-8.062,1.176-18.405,10.536-27.396c9.36-8.995,21.058-16.422,21.058-27.657c0-12.421-8.618-18.989-19.484-18.989 - c-18.108,0-19.293,18.78-19.739,22.916H305.06c0.677-19.583,8.953-46.976,45.287-46.976c31.484,0,45.639,21.086,45.639,40.861 - C395.985,174.543,364.193,180.011,364.193,200.31z'. - - -paths add: 'M149.201,462l-48.81-83.796c29.764-23.725,54.763-43.234,53.67-81.087h-49.181v-83.98h31.73 - C120.796,126.937,181.513,50,272.01,50c67.423,0,120.139,37.954,128.956,124.836l-96.363,14.023 - c-1.928-8.925-6.635-45.78-34.753-45.78c-19.901,0-33.456,24.244-15.27,70.058h78.943v83.98h-60.687 - c-1.319,18.151-9.282,33.163-19.438,46.447c24.343,1.238,45.975,13.569,68.383,13.569c19.778,0,25.201-3.376,58.65-20.264 - l31.177,90.997c-18.337,11.344-42.196,27.734-82.166,27.808C250.038,455.675,238.966,405.734,149.201,462z M329.444,425.651 - l0.346-0.001c16.368-0.104,30.496-3.509,45.497-11.163l-12.229-35.694c-15.21,6.548-25.454,8.364-41.277,8.364 - c-38.07,0-74.053-32.272-140.604-3.835c51.043-42.409,67.551-82.729,59.606-116.228H303.5V243.16h-69.433 - c-15.322-33.327-28.368-74.206-7.945-106.069c9.788-15.274,25.728-24.034,43.728-24.034c21.355,0,45.728,13.174,57.087,42.213 - l40.358-5.873c-11.964-50.885-57.479-69.374-95.285-69.374c-75.705,0-125.545,68.262-101.907,143.635l6.116,19.503h-41.315v23.935 - h45.909c0.616,1.001,23.514,59.864-41.573,118.153l20.498,35.189c16.166-8.858,34.12-15.76,55.276-15.76 - C247.36,404.829,300.137,425.651,329.444,425.651z'. - -paths add: 'M299.715,461.13c-94.312,2.166-176.276-59.753-195.785-153.012H49.734l8.188-41.354h41.369 - c-0.218-9.804,0.165-19.596,0.938-29.292H63.047l7.938-41.354h35.533C132.739,82.586,230.829,17.764,383.484,66.522l-16.625,68.5 - c-77.396-24.258-139.529-17.381-159.892,61.098h150.1l-7.917,41.354H200.857c-0.529,9.121-0.69,19.461-0.295,29.292H344.15 - l-0.104,0.54c-23.77,7.239-43.852,21.902-58.121,40.813h-79.712c9.279,36.496,30.106,59.916,56.761,71.075 - C263.549,410.001,276.244,439.362,299.715,461.13z M292.947,377.225c0,46.756,37.903,84.66,84.659,84.66s84.659-37.904,84.659-84.66 - s-37.903-84.658-84.659-84.658S292.947,330.469,292.947,377.225z M420.312,367.84h-22.095v53.455H357.46V367.84h-22.096 - l42.475-42.549L420.312,367.84z'. - -normalizer := RTMultiLinearColorForIdentity new objects: paths. -es := paths collect: [ :p | (RTSVGPath new path: p; color: normalizer; scale: 0.1) elementOn: p ]. - - -v := RTView new. -v addAll: es. -es when: TRMouseClick do: [ :e | e inspect ]. -es @ RTHighlightable. -RTGridLayout on: es. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleSVGPathIcon [ - ^ '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' -] - -{ #category : #sources } -RTRoassalExample >> exampleScaledNesting [ - - | view inner host edges outter trachelCanvas resizable | - outter := OrderedCollection new. - view := RTView new. - view @ RTDraggableView. - - 1 to: 200 by: 10 do: [ :i | - inner := (RTBox new color: (Color purple alpha: 0.2)) elementsOn: (1 to: i). - host := (RTBox new color: (Color yellow alpha: 0.1)) element. - outter add: host. - - view add: host. - view addAll: inner. - edges := - RTEdgeBuilder new - view: view; - elements: inner; - connectFrom: [ :v | v // 2 ]. - - RTGridLayout new on: inner. - RTNest new - on: host nest: inner. - ]. - RTGridLayout on: outter. - - trachelCanvas := view setUpCanvas. - TRFocusCenter on: trachelCanvas. - - "Zoom a specific element" - resizable := outter at: (Random new nextInt: outter size). - view addMenu: 'Smaller' - callback: [ view addAnimation: (RTResizeMove new - toExtent: resizable extent * 0.6 - during: 0.3 on: resizable) ]. - view addMenu: 'Bigger' - callback: [ view addAnimation: (RTResizeMove new - toExtent: resizable extent * (1 / 0.6) - during: 0.3 on: resizable) ]. - - ^ view -] - -{ #category : #icons } -RTRoassalExample >> exampleScaledNestingIcon [ - ^ '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 -VwAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleScales [ - -| v scale width doLayout values dots | -v := RTView new. -v @ RTDraggableView. - -"Linear per default" -scale := [ :x | x ]. -width := 200. -doLayout := [ - RTHorizontalLineLayout new gapSize: 0; on: dots. - RTMetricNormalizer new - elements: dots; - fastSmoothTranslation; - normalizeY: #numberOfMethods min: 0 max: width negated using: scale. - v signalUpdate ]. - -v addMenu: 'linear' callback: [ scale := [ :x | x ]. doLayout value ]. -v addMenu: 'log' callback: [ scale := [ :x | (x + 1) log ] . doLayout value ]. -v addMenu: 'square root' callback: [ scale := [ :x | x sqrt ] . doLayout value ]. - -values := RTObject withAllSubclasses. - -dots := (RTEllipse new color: (Color blue alpha: 0.5)) elementsOn: values. -v addAll: dots. - -doLayout value. -^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleScalesIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAEJElEQVR4XuWbW09TQRSF+9v4 -Z8ALkPAMhBAeRNLGeA1tTGMEAUvFYptqmtp4iY1GfKh3jVq71NVmpBzaniPe0G8lJz2XPXtm -9jezZ9r0pL584eskKcUPAR8IX6OArK6uqlQqKc7Qdr+68v39ffERDADiI5PJaGxsTLOzs9re -3tbk5KQ6nY76gezs7GhxcbFr0+9kbm5OhUJBuVxO8/PzmpqaUj6f18rKilqtlorFYtd+eXlZ -9Xpd09PT3evNzU0+kCiQvb09VatV1Wo1NRoNLS0tKZ1Oa319/ZBhs9nsBnNra0vj4+Pa2Nj4 -HsyFhQXt7u5qZmZG2WxW5XK5e16pVLo2ExMT3U/XYaA+N/B2uy0+FP4awgfCFx8IHwhfyfX6 -tcQHcoJgfNvE8oHwUxZffCB8IHzxgfCB8MUHwgfCFx8IX3wgfCB88YHwgfDFB8IHwhcfCB8I -X3wgfPGB8IHwxQfCB8IXHwgfCF98IHwgfPGB8MUHcoL08qV07lzvf77hnA/kf5sh+qaHD8V/ -Le2YevVKOn/+IH4jgbRa0oULo4P98aPUaCQH8vx5vE/+DEkQxF9h4zx55QofRiIgnjo3bhwE -K1z7BZObN6VOR3rwYHAwg02SCj99Omz34kWyGfPhw/FBun3F4r8xEFLRETzsut2W7t2T3r2T -arXe/bj04/IXLx593n//0aNkM+vq1Z8LaLRvJ20dCXE81qL+5InkDubzx++ky589K9XrfyZQ -ru/SpT9X15kzUql0eMH+4RliUoVCz4FnQrj/+bN0//5Rx76ftKI3bwb7iPqLswntvH5dGmVv -Gw8Y2/1McJ3uLl8eHtjoO4OGYVvLKd6p/tat5GBSgyqw02vXjqarUY68FoQ05OC7vKeh7586 -1Us5cT4c4FGjyikyPHM7bW+fw7bdtmk2D8q8fStVKkdtHbw4KKFfLu/6yuXeFzmfj3qrNrSx -/0vgD++ynj4dHhAH3Qvs3buDbZyCslnp2bPkIzPqz9feJNiPz+3THfJ1tJ3edoeytllbG11v -f7vs14MllxteJsTCvm33+LF0506vzv66PSMzmfj6h8U2+Ei5kz7CjPAoun07PpiDRmXSssP8 -9Y80Xw+aAQ6MZ55TaqjLdg6Mbd0prxXDNhvheTotVauHy/vwyPds9qcBBJu4NSPJTtFttj+3 -4fTpwZkg9f69FI6/vdOI5nvn3yRriu0MI9jG9SX6PJQPPhw4f/6NmPB/y/rffsviiw+ED4Qv -PhA+EL74QPjiA+ED4YsPhA+ELz4QPhC++ED4QPjiA+GLD4QPhC8+ED4QvvhA+ED44gPhA+GL -D4QvPhA+EL74QPhA+OID4QPhiw+ED4QvPhC++ED4QPjiA+ED4YsPhA+ELz4QPhC++ED44gPh -A+GLD4QPhC8+ED4Qvn6jvgLxBzfrDplOIQAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleScrollZoom [ - - | v | - v := RTView new. - v @ RTZoomableView. - v @ RTDraggableView. - v add: (RTLabel new elementOn: -'Scroll your mouse wheel -while hovering cursor -over the view to zoom it'). - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleScrollZoomIcon [ - - ^'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' -] - -{ #category : #sources } -RTRoassalExample >> exampleSeisms [ - -| b tab l| -tab := RTTabTable new input: 'http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/2.5_month.csv' asZnUrl retrieveContents usingDelimiter: $,. -tab removeFirstRow. -tab replaceEmptyValuesWith: '0' inColumns: #(2 3 4 5). -tab convertColumnsAsFloat: #(2 3 4 5). -b := RTMapLocationBuilder new. -b shape circle -size: [ :v | (2 raisedTo: v) / 2 ]; -color: (Color red alpha: 0.3). -tab values do: [ :row | b addPoint: row second @ row third value: row fifth ]. -b build. - -l := RTLegendBuilder new. -l view: b view. -l addText: 'Seisms of a magniture of 2.5 or more, over the last 30 days'. -l build. -b view @ RTZoomableView. -^ b view -] - -{ #category : #icons } -RTRoassalExample >> exampleSeismsIcon [ - ^ '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 -YII=' -] - -{ #category : #sources } -RTRoassalExample >> exampleSelfCalls [ - " The RTNest class offer simple methods to encapsulate some elements into a composing elements. Consider for example the following visualization that shows the shape hierarchy in Roassal. Each purple square is a class. Classes are linked with to represent class inheritance. Gray boxes are methods. Relation between methods indicates a possible invocation path between methods within the same class." - - " -> image crash " - | v classes classElement classElements shapeBuilder methods methodElements | - v := RTView new. - v @ RTDraggableView. - shapeBuilder := RTShapeBuilder new. - shapeBuilder rectangle size: [ :m | m linesOfCode min: 60 max: 5 ]. - classElements := RTGroup new. - classes := RTShape withAllSubclasses. - classes - do: - [ :class | - classElement := (RTBox new color: (Color blue alpha: 0.4)) - elementOn: class. - classElement @ RTPopup. - v add: classElement. - methods := class rtmethods. - methodElements := shapeBuilder elementsOn: methods. - v addAll: methodElements. - RTEdgeBuilder new - view: v; - objects: methods; - connectFrom: #yourself toAll: #dependentMethods. - RTTreeLayout on: methodElements. - methodElements @ RTDraggable @ RTPopup. - RTNest new on: classElement nest: methodElements. - classElement @ RTDraggable. - classElements add: classElement ]. - RTEdgeBuilder new - view: v; - shape: (RTLine new attachPoint: RTVerticalAttachPoint instance); - objects: classes; - connectFrom: #superclass. - RTTreeLayout on: classElements. - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleSelfCallsIcon [ - ^ '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' -] - -{ #category : #sources } -RTRoassalExample >> exampleSliderAndCubeHelix [ - | v helix shape elements slider | - v := RTView new. - helix := RTCubeHelix new. - helix rotations: 2. - helix gamma: 2. - shape := (RTBox new height: 300; width: 1; color: [ :model | helix level: model ]). - elements := shape elementsOn: (0.0 to: 1.0 by: 0.002). - v addAll: elements. - RTHorizontalLineLayout new gapSize: 0; on: elements. - - "Set the gamma value" - slider := RTSlider new. - slider view: v. - slider labeled. - slider callback: [ :aValue | helix gamma: 5 * aValue. elements updateShape ]. - slider move: #below. - slider build. - - "Set the rotation value" - slider := RTSlider new. - slider view: v. - slider labeled. - slider callback: [ :aValue | helix rotations: 5 * aValue. elements updateShape ]. - slider move: #below. - slider build. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleSliderAndCubeHelixIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAADMUlEQVR4XuXd7UtTYRzGcf+y -szkTRVEyxLYzMzNFbFGKhYqOzfmYUSIZZEWPVioYEQRmoCAEkUTlA5UF0fZiZeUgadjYLjuz -GREEhQOX32tccHMGN4fzYefHXt1Z6+v8ZFKy+I+AD8IPH4QPwg8fhA/CDx+ED8IPH4QPwg8f -hB8+CB+EHz4IH4SftIMYhqFfa/utdpuh7FQdydqtZhvKcaSaYzU31Tzru3yrBVYLbcousste -7JBtd45se3JlK82XUVooo6xYxt4S2Zxlspmm7GaFHGaVdrlrlec+rAJ3vYrcx1TiblaZ2SrT -9KnSDKjG1SmPq0sNrh41WfVa7XB164R1vd/6ftDt11B5my5VtOjqgeMarm7QzdojGjlUp9Gj -NRptrNJI837d8pZrOGDqWo9TV047dfGMU+eGTA1e3qeBG5U6NVatvjt16r5Xr477TQpM+eSf -6ZX/4YD8j86rfXZYnU9uq+fphE4+m1H/88c6OzevC3OvdX0+pLGFD7q7ENHk4qpmFtc0+yKm -+ZdxLS0l9O6N9P6t9DkorYal6MeEvkXiin+NKxFLiA/CB+GD8EH4IHwQPggfhA/CB+GD8EH4 -IHwQPggfhA/CB+GD8EH4IHwQPggfhA/CB+GD8EH4IHwQPggfhA/CB+GD8EH4IHwQPggfhA/C -B+GD8EH4IHwQPggfhA/CB+GD8EH4IHwQPggfhA/CB+GD8EH4IHwQPggfhA/CB+GD8EH4IHwQ -PggfhA/CB+GD8EH4IHwQPggfhA/CB+GD8EH4IHwQPsgOA+n0BNR3sJ0PkikgXZ529Xr8fJCM -eWWZO+iVlUgk9F93akoJn+9Hk+vUdf1Df+711x/9sVvNtpyOsLKyouXlZUWj0S13bWJC016v -XrW1bazTsWfy3pL3iDmuIhKJrIdCIYXD4S330/i4Jlta9MBqcp2OPYPBIAtk8+eZlr2mpxWz -XldK1lpn2v3hDnRJIijNILgTdtI9Q2KtrRvlz5AMmSFfGhs3yp8hGTJDxJ8hGTRDktn8T7FN -D5EPwj82jx8+CB+EHz4IP3wQPgg/fBA+CD98ED4IP3wQPgg/fBB++CAZne8rE5WE57/UxQAA -AABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleSmoothLayout [ - | v translator | - translator := RTSmoothLayoutTranslator new. - v := RTView new. - v canvas - addMenu: 'grid' - callback: - [ - RTGridLayout new - translator: translator; - on: v elements. - v canvas signalUpdate ]. - v canvas - addMenu: 'hori' - callback: - [ - RTHorizontalLineLayout new - translator: translator; - on: v elements. - v canvas signalUpdate ]. - v canvas - addMenu: 'treeV' - callback: - [ - RTTreeLayout new - translator: translator; - on: v elements edges: v edges. - v canvas signalUpdate ]. - v canvas - addMenu: 'treeH' - callback: - [ - RTHorizontalTreeLayout new - translator: translator; - on: v elements edges: v edges. - v canvas signalUpdate ]. - v canvas - addMenu: 'cluster' - callback: - [ - RTClusterLayout new - translator: translator; - on: v elements edges: v edges. - v canvas signalUpdate ]. - v canvas - addMenu: 'circle' - callback: - [ - RTCircleLayout new - translator: translator; - scaleBy: 0.8; - on: v elements. - v canvas signalUpdate ]. - v canvas - addMenu: 'radial' - callback: - [ - RTRadialTreeLayout new - translator: translator; - on: v elements. - v canvas signalUpdate ]. - v canvas - addMenu: 'sugiyama' - callback: - [ - RTSugiyamaLayout new - translator: translator; - on: v elements. - v canvas signalUpdate ]. - v addAll: (RTBox new elementsOn: (1 to: 100)). - RTEdgeBuilder new - view: v; - objects: (1 to: 100); - connectFrom: [ :value | value // 2 ] to: #yourself. - RTTreeLayout new on: v elements edges: v edges. - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleSmoothLayoutIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABjCAYAAABt56XsAAAGSElEQVR4XuWcyU8cRxSHIewh -LIawg9nCvsOExQMx+77DAGPMamxsQCabLIGIEilSkCBSlGsiJUcOcIADV8IhufiSc5Rr/pC8 -Z1VZpVZ3z/TM9DDD75OepubVq6XrVdWr6kFE4IMPPhZ4KD7zFV2ygY0ZhSQfeWGXIz4TNfp8 -H/stSbFYJiWUnOAgcZO8JpklmRFpyRuSHZJlkiGSBSUvneQVyaIQrmuC5CnJS007L0hKSNpJ -WoX9lySrJI2KHet/Iikn6SYZJnkmyi2KPkRr7HeF3inka6FX4f7MiXod4lmnST4TEjJwJ38U -A38kOqs6hAfiP5JJ0fEjTflvSL4SDnsuBqJOUwezJVZEu2hrWTg6QuMQdtZ3YmJ8T/JYDLhs -Qzt4bP+D0M+Ktq+ErQrnb4i2S8Rz/EzyRag5pJ6kDX+3xgcffPDBBx988MEHH3zwwQcffPDB -Bx988MEHH3zwwQcffPDBBx988MEHH3zwwQcffPDBBx988LmH7O/vf4s/CndMXV2do6qqqiE/ -P7+IHZKRkZG9tLS0lZWVlbuwsLAZTeCPks0UFhZ+Ul1d3UTOaPHGPjk5+YHL5drMzMzMcbvd -LxISEj7EH0U/GR0dddFkj+nu7h4JRH3slMXFxa2kpKSUmJiYWEo/S01NTccfaRPGxsZc/Dky -MjIfjPaiCHYSb3v0NXJ+fn49Nzf3IbQTOjs7B9ra2h7zigiVPk1OTj4pKioq4/Tc3Nwa9+9e -O4EDb2tra5fT6ezv6OjoWV9ff01bSmIoOYWpqKio3dnZORwaGpptaWl5dO8cQQ82Q/t3TFNT -U7uJzWxBQUFJWlpaxl32lR2gnth4e+OTXGJiYlJYO4FPPMXFxeXsDCvl+FjLp6TBwcHpYPaX -B9zhcDjNHGWWH7IMDw/P8SxnZwTixBWousxobm7uqK2tbfbGtrGxsY1sW0LaCRz87AzQvNrK -ysqq7bihc51837F6P5LPHHLO4KU8MzOzwmJnAOS6efDq6+s/DeTtn+v0dnVoT2QTExNLIeWM -mpqa5srKynr5ndOsC2QbHxC8pWgHsrS0tNLfurOzs9/9nxV2stmBQwvFuFw5SfiwEhLOaGho -aPUlzwo8SOTkOqMVw++2fK1bG5fY6VrH60E3/mR6vverdGNjY/9OHcGnIA5s3gQ/tvW1HR5s -T9tTfHx8AjnG8smHj7Hl5eU1ehPA02Sanp5+qtXR+7bGO3EG77dWljbb+hKIDw4OTiIJb+23 -t7ffWAmwJycnv5ltw0Z9NtKvra3tBT3A8wDRKWqe928rQZPLWBlc3oqWl5dfWukb23tbJi4u -Lt7MlvOnpqae6OUdHx//atD+K6t99pvx8fFFMWBOC4PrVMt6ggNkTk7Ou0Db3t7e7a0D9dJG -9Pf3T5jVz/kkk0bzkrZRh17MVOOK7WhvqD09PaOeymhtqI5OT2V6e3vHlOCZwgHUi751GvVT -Dzqqus3ql/naVzhSrxd70tPTM1mCetfQzORYDoxmQZNtzOrw5HSGX0B6usl7o1NnuIf6I9VD -iZrR19c3oXeClHpt2jZubm7+0dOvrq7u8itqvbyrq6u3Vurieujt6oFe3uXl5VujMvw7hl6s -Ozs7+0OvzO3t7b9m9av5e3t7R/L5+JN/P5F5av3n5+d/6qVtgwLZL0arRu9yFuigaHf7p6en -v+ulV1ZWduWxnQ8n6mHm8PDw1FN5W+B7gNEJySj4BTIoBqN9dWWqaYohH8cScjdg4TSp4jjP -U3lbkAFMBjSlsxl6+kAHxWC0T7/BFKuXXnVLlFsW66Wdqjcrb+vrEW2w0gS8SLuCot3td3V1 -DWqfmX9aFq9SHsmDCNsZ6Y3KBxwKmO9nAgc0dVaowc8o7W9QDEb78pBxcXHxl9vtfs52rJOr -gPXSjrcjqZP5RuVtcYi/QS0cym9ubn4uL4lsy6JN+5Jvi0P8DWrhUN62wbMDl8u1QdsG/3fo -iLy8vEIWrZ7/GEC9IHI6KioqOlzKh5VD+PW3fK3Mf3AwMDAwpafXljOyC8XyYeMQf4NauJS/ -vr7+Oywc4m9QC7d8fPDBBx988MEHH3zwwQcffPDBBx988MEHH3zwwQcffPDBBx988MEHH3zw -wQcffPDBBx988MEHH3zwwQcffPDB5x7wP8IZ3MdvrtbNAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTRoassalExample >> exampleSparkline [ - -| v cls s es | -v := RTView new. - -cls := RTLayout withAllSubclasses. - -s := RTSparkline new - width: 50; height: 30; - values: [ :c | (c rtmethods collect: #numberOfLinesOfCode) sorted ]. - -es := s elementsOn: cls. -v addAll: es. -es @ RTPopup @ RTDraggable. -RTFlowLayout on: es. -^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleSparklineIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAEn0lEQVR4XuWbW0sjQRCF/eci -PhjQJ1FBAlFjwEvwQUVR4yXeFRVEo/GOIsEooiBeo9ZsKmwvs2EyUx0ncabPgXlZzvZ26uvp -qq7pbbAsfAVJDfghwAeCL3wg+EDwhQ8EHwi+8IHgA8EXPhB8IPjCB4IvfCD4QPCFDwQfCL7w -geADwRc+EHwg+MIHgi98IPhA8IUPBB8IvvCB4APBl9lAqKiRkRGS+jOZjMi7vr5OOnNgSb06 -Y4cKiArCxcWFOGjDw8Mk8W1tbZHOHLx42KG1t7ebBaR8NXZ2dpJ09X59fZFk3Lu7O9KZw9ra -Gkm9uVzODCBOW8P9/b31/PxMEu/k5CRJAub2FlXanvr7+0nqnZ2dDTcQ9cPe39+t19fXf8/t -7a21urpKbkE4ODgg5T87O3P09vb2UktLS+mZm5sjpxXslSfm5+fJyzs4OEj8hDqpFwqFUkDL -A+/mtT+Vkrjy2gMpGddrHuyV5h/8sjcAurq6IqOB8Dbk54/s6emhWnhZ/HY9PT2ZCUTt034l -SB5rZWWF/PYqP1d3j4+PZOSWpRLm4uIi+QlXkqd0vPa5crFgXA6xVy68Qr+/v8mvMfv6+shP -b/l8j46OzAFSXkZubGz4shfzmOPj47SzsyOCMTY2Jvba5zs6OkrGVFlcRhZbI3R9fS0tTz0f -9vF4JycnokDpeFWJfHp6SgsLC4Rf9v6SpM1FfCC2gEm3DvZOTU1pVVG7u7tVt3/ggHAAPj8/ -ue8lTtzn5+dauaKrq4uCAiKwQOxB8Ooh6QTXaYtyq7zKvcvLy3hvCAeB+1ScYN1a48qbTCZL -zcVsNkvV5ApO4pK3IpFIcJMUBwgHgMtiSdNQeSUr1m3LiUQi/x0UK3lTqZT4QGkEkGI7Xtze -1vGq4HIeampqosbGRmt6etr12wqXyexTz9LSEuFXWQFVvTq+dQNyeXlJP8krUq9kVXM1Jp0P -j9nW1mbWllXNjQ21p6fTaa1c4dbR1Wky8oldt0McCiDcd6r2BF1pz6/mtM1v2c3Njag1wlXV -b53iawrE6RKBZKU/PDyULi1IVrv9z2KxmKN/b29PPI9KlypCD6Sjo0P70hpXRK2trdqn5+bm -5lJ15OTl7ak4ruhNm5iY8OXzQOCAeB3q7Do8PKSPjw/tbxVKxX6U49/l7Umau7gzLL0diV/2 -BrQ8DTWQt7e3upx21QcpiU/SGWZfNBo1q8riHyX5YvfTf+NvO10UZKcelpNve3vbvJP6/v4+ -1RqEykXHx8eiqszr7WAfNyydrruGGkgtW9YquJICwl4MdHd3e0Lj5qVOqRwKIPF4nGoF4uXl -pfTNng95+XzeNcA8D/ZxWTwwMODqzeVy1tDQkHllb60SOAdtZmZGNDZ3bqWX3LhE3tzcxC97 -8YUP5Mc5Cx9IAEDU8zyCD0RQJrPqdc8XH4gHCHu3AR9IQPIE/xc7/KQOBgIfCH7Ziy98IPhA -8IUPBB8IvvCB4APBFz4QfOEDwQeCL3wg+EDwhQ8EHwi+8IHgA8EXPhB84QPBB4IvfCD4QPCF -DwQfCL7wgeADwRc+EHwg+CHAB4IvfCD4QPCFD8QM/QGnQh9WCjgVcwAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleSpiralViz [ - "Simple visualization in which each class is a curve. How the curve varies indicates variations in the methods set" - - | classes v angle shape incr | - classes := RTShape withAllSubclasses. - classes := classes select: [ :c | c methods size > 1 ]. - v := RTView new. - angle := 0. - classes - do: [ :c | - shape := TRBezierShape new. - shape color: Color black. - shape - width: 2.5; - strokePaint: Color random. - incr := 0. - angle := angle + (360 / classes size). - shape - points: - (c methods - collect: [ :m | - incr := incr + (angle cos @ angle sin * 10). - (m numberOfLinesOfCode log * 25) @ (m sourceCode size log * 25) - + incr ]). - v canvas addShape: shape ]. - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleSpiralVizIcon [ - ^ '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 -RK5CYII=' -] - -{ #category : #sources } -RTRoassalExample >> exampleTimeLineOfRoassal [ - -| d popup v | -"Time line of code in Roassal" -"We compute the number of methods created for each day. We keep the information in a dictionary" -d := Dictionary new. -RTObject withAllSubclasses do: [ :c | - c rtmethods do: [ :m | - d at: m ageInDaysAsInteger ifAbsentPut: [ 0 ]. - d at: m ageInDaysAsInteger put: (d at: m ageInDaysAsInteger) + 1 ]. -]. - - -popup := RTPopup text: [:assoc | assoc value asString, ' methods added on day ', assoc key asString ]. -v := RTView new. -v addAll: (RTEllipse elementsOn: d associations) @ popup. -RTMetricNormalizer new - elements: v elements; - normalizeX: #key min: 0 max: 500; - normalizeSize: #value min: 5 max: 30; - normalizeColor: #value; - alphaColor: 0.3. - -"We add a line from the left most element to the right most element" -v add: ((RTLine new color: Color lightGray) edgeFrom: v elements leftMostElement to: v elements rightMostElement). - -"It make sense to only drag horizontally" -v @ RTHorizontalDraggableView. - -"We add a small legend" -v canvas addFixedShape: (TRLabelShape new text: 'Each circle is a day. Size of the circle indicates the number of methods produced that day'). -TRConstraint stickAtTheBottomOfTheWindow: v canvas fixedShapes last. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleTimeLineOfRoassalIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAD9UlEQVR4XuXXW09TWRjGcT6X -V34BEw/xwmg0xpioMTExXnjhIWq88hCjUaPRBCeKBaMIRAQFbNpKdRCRCREoCKVyKi3CwLSU -lj7Os5sZ4iTjDBfGjPN/khW62+61V9/fendL1efP/PyXUsUvAR+EHz4IH4QfPggfhB8+CB+E -Hz4IH4QfPgg/fBA+CD98ED4IP3wQPgg/fBA+CD98EH74IHwQfvggfBB++CB8EH74IHwQfvgg -/PBB+CD88EH4IPzwQfgg/PBB+CD88EH44YPwQfjhg/BB+OGD8EH44YPwQfj5v4BoZETlxkYV -Tp5Ubtcu5U+c0Mr4uL7lYkvT0yoOD6u8uCgciJyF9+81++qVinNzqwUoLS0pPzPzl4LIhQow -8vv2Kbdz5+rI7t+v8bo6TTQ3a/mLOdaM7Cx9+qTyyormnz/Xby0tyoZCmvWcxdFR5aemlInH -tWikYP55rzc3OflDY1UNxmLq6ehQPpfT1MePmkmngzoo9fKl+mtrFbt+XeErV5T2bl/IZtXt -grT4+Bef0xMOq8sQifPnlTp1SqPr1imxfr3imzerbft2tW7cqIj/drhrolevVt4bq6lR5OFD -Tbij5l3EWc856esWi0WVSqXKtdMuatbr6PQ5jT634ehRxQ8fVnsw18GDCp8+rfi5c+q+eVOD -wfWfPtWHBw/0wfAzXnchk/muKMHa/21jBflq5/tzr4J0+UM8qq5Wd1eX2vy4/dkzJZNJhe/c -0ZOLF1Vz9qxCLni0rU3d0ageX7qkGh/fvXxZ9zxCPn5x7Jg69u7Vmw0bFN20SU/27FH9gQN6 -tHu3mtwld48f109nzqj+xg3V+v3VFy4o5vl+9u6OGLbdO7+vr09DQ0Ma9c5/0dqqeCSiel/7 -nqGrjdFw6JAeB/MeOaKQ56ozVJPX1+Q5m73+2K1blTUPuJOSvb1u2unvNgYGBv7x9bGxMaVS -qa++PuwOn/QmDB5X/eoHhb+5Jwe3qawBgjHh8efzcy5a+u1bFd1RwXFw7oKLV25o0NyWLZrf -ulXzO3Yo6TGybZt6XcjEtWvKvn6t5Xxec+60om97a9l52URCg94kmf5+pdyVk7dva8SYKXdt -vrNTaXd35o8x29NT6Y6Mr8P/UnfK3pkl79Ivv0OW7t//ZsVRoVBByLmDC+/eif8ra42/tNy/ -Knu3anlZ/B+x/P9D+CD88EH4IPzwQfgg/PBB+OGD8EH44YPwQfjhg/BB+OGD8EH44YPwwwfh -g/DDB+GD8MMH4YPwwwfhg/DDB+GHD8IH4YcPwgfhhw/CB+GHD8IH4YcPwg8fhA/CDx+ED8IP -H4QPwg8fhA/CDx+EHz4IH4QfPsiPl98ByUwFby0fOIYAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTRoassalExample >> exampleTreeLayout [ - | view | - view := RTView new. - view - addAll: - (RTBox elementsOn: Collection withAllSubclasses) @ RTDraggable. - RTEdgeBuilder new - view: view; - objects: Collection withAllSubclasses; - connectFrom: #superclass to: #yourself. - RTTreeLayout on: view elements edges: view edges. - view @ RTDraggableView. - view edges do: [ :e | e trachelShape pushBack ]. - ^ view -] - -{ #category : #icons } -RTRoassalExample >> exampleTreeLayoutIcon [ - ^ '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 -u5nePWZ+kW8AAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTRoassalExample >> exampleTwoColumnFlow [ - -| firstColumn secondColumn associations firstElements secondElements v eb | -firstColumn := #( 'WP A.1' 'WP A.2' 'WP A.3' ). -secondColumn := #('WP B.1' 'WP B.2' 'WP B.3' ). -associations := OrderedCollection new. -associations - add: 'WP A.1' -> 'WP A.2'; - add: 'WP A.2' -> 'WP A.3' ; - - add: 'WP B.1' -> 'WP B.2' ; - add: 'WP B.2' -> 'WP B.3' ; - - add: 'WP A.3' -> 'WP B.1' ; - add: 'WP B.1' -> 'WP A.1' ; - add: 'WP B.2' -> 'WP B.2' ; - add: 'WP B.3' -> 'WP A.2'. - -v := RTView new. -firstElements := ((RTEllipse new extent: 70 @ 30; color: (Color r: 1.0 g: 1.0 b: 0.7020000000000001 alpha: 1.0)) + RTLabel) elementsOn: firstColumn. -secondElements := ((RTEllipse new extent: 70 @ 30; color: (Color r: 0.996 g: 0.851 b: 0.651 alpha: 1.0)) + RTLabel) elementsOn: secondColumn. -v addAll: firstElements. -v addAll: secondElements. - -v elements @ RTDraggable. - -RTVerticalLineLayout new gapSize: 15; on: firstElements. -RTVerticalLineLayout new gapSize: 15; on: secondElements. - -secondElements translateBy: 100 @ 0. - -eb := RTEdgeBuilder new. -eb view: v. -eb shape arrowedLine - withBorderAttachPoint. -eb useAssociations: associations. - -^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleTwoColumnFlowIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAER0lEQVR4XuXa/U9aVxzH8f7/ -yZJlXetsa0XXobW2ndq6Ne2i01jb1SfEuUoi+BgY8rBBEUHu97tzTgeCwBXdrTN5f5KTq9x4 -fjgv77n3fsItVX5uUm7xl4APwg8fhA/CDx+ED8IPH4QPwg8fhA/CDx+EHz4IH4QfPggfhB8+ -CB+EHz4IH4QfPgg/fBA+CD98ED4IP3wQPgg/fBA+CD98EH74IHwQfvggfBB++CB8kOuKyL6I -fDRj3owXojplPntjfo6YsWXGqVxqvr/iIkcR8XZfibc1aqYIq7c9IZJ6L5JZF/EuNx8GRCTq -Fr+XITJrYMq+Cyl/LrnF72kkXhrnY+GDNDBWHcbc3D1dWRl04927AV1bCzmAWOyRO9Z/P4MR -OT4+toeWxZTkosP49dltXfmpT5en+3Q6/LX7OTZzX99O3HEQqz/3tcDwQRogvziQYvGZLi09 -1IODUZ2d7dd8flwjkZAuLNx3AIeHoy0ghUJB8vm8lMvlluHFJx1IITKsH17e1f23D3V88Cs9 -/eMHB1JYG3YAB+ZzPkhHkE/mf3zKd8vyvMlzV0es6xYjlYK5X4z4blk1g9PyWWaDv2W1w2xL -/WrpfO+YMuc3zaj0tHiS+9i4WjoNbysskl4VqZ0I/6beY+w94r/8falUkmQyKUHNxwcJAMQO -PsgNADk5+bwVVatVPsj/DVKpVMTzPAn6ikOD2K3GLmCtVrvc27l9bSy3vzhedT4+SNOWk8vl -5CpXR5Dz8busRpc1bbadafcofNZl+f9325fFrl1WbExqscfC77Kuqctqfprid1kBdFnr60O6 -sTGsm5vD5jikqdSYA9jdHXHHeDzs6pQznPYnquYuK/LqO42+7tfNN/dcf5WYf2BqlAGNzz1w -ENvmmFsZ4lcn3bqsVOqxLi8P6tHRmEajQ67T2t8f0adPv9H6+UrlxzaQ809U9bfz5PtBVyym -P4R0/vm3rtOyXdbCv+WiPX/y+yM+iF+XVSo910QirNnsE7fo9mjOOZyZmX53rrnL6vRE1dxl -fVr/3l0Rh4ufi8TMUkgXJ+84nJnx242rhd9lBdRldXui4ndZ1/himM1mJZPJuHHdVQwfpMMC -2vtFsVh0gw9yA0Can6js+cssMh8kYJBuHZV9Bzk9vfgljw8SYJfVraNq7rD8tjF+lxVwl+X3 -RHX+Kui21fG7rIC6LM9b66nLapvv74RPlxXld1lfsstqmY/fZX35Lsu+rafTTzp2WS3z9dhl -2bf19G8hfnVy1S5rb29Ed3bCF4L02mXtLQzozvwAH+SqXZb9RmO1OqG9fS8rfGGXZb/JWKmX -i5kof8sKosvynY/fZfHDB+GD8MMH4YPwwwfhhw/CB+GHD8IH4YcPwgfhhw/CB+GHD8IPH4QP -wg8fhA/CDx+ED8IPH4QPwg8fhA/CXwI+CD98ED4IP3wQPgg/fBA+CD98ED4IP3wQfrrlHzNd -3LoOQ52QAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTRoassalExample >> exampleTwoColumnsAsFlow [ - -| firstColumn secondColumn associations v eb firstElements secondElements | -firstColumn := #( 'WP A.1' 'WP A.2' 'WP A.3' ). -secondColumn := #( 'WP B.1' 'WP B.2' 'WP B.3' ). -associations := OrderedCollection new - add: 'WP A.1' -> 'WP A.2'; - add: 'WP A.2' -> 'WP A.3'; - - add: 'WP B.1' -> 'WP B.2'; - add: 'WP B.2' -> 'WP B.3'; - - add: 'WP A.3' -> 'WP B.1'; - add: 'WP B.1' -> 'WP A.1'; - add: 'WP B.2' -> 'WP A.2'; - add: 'WP B.3' -> 'WP A.2'; - yourself. - -v := RTView new. -firstElements := ((RTEllipse new extent: 70 @ 30; color: Color lightBlue) + RTLabel) elementsOn: firstColumn. -secondElements := ((RTEllipse new extent: 70 @ 30; color: Color yellow) + RTLabel) elementsOn: secondColumn. -v addAll: firstElements. -v addAll: secondElements. - -v elements @ RTDraggable. - -RTVerticalLineLayout new gapSize: 15; on: firstElements. -RTVerticalLineLayout new gapSize: 15; on: secondElements. - -secondElements translateBy: 100 @ 0. - -eb := RTEdgeBuilder new. -eb view: v. -eb shape arrowedLine - withBorderAttachPoint. -eb useAssociations: associations. - -^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleTwoColumnsAsFlowIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAEY0lEQVR4XuWazWtjVRiHhyoD -ogMig8ooWmQEkQGVWTgigkvX/gPuXLp058KvvXt3IopI5kPB0elga5h2qiahk4YKU0nSNmlD -mzS017RNmryv7zmmnSSTr3Zua+H5wctJensv3PNw33PuQ06p8nOScoo/BXwg/PCB8IHwwwfC -B8IPHwgfCD98IHwg/PCB8MMHwgfCDx8IHwg/fCB8IPzwgfCB8MMHwg8fCB8IP3wgfCD88IHw -gfDDB8IHwg8fCD98IHwg/PCB8IHwwwfCB3JcKYpIzuovq7hVzP6WtDFrlbeqWx3keiJf2Rkf -WV2yOi3ulkVG7fP7Vh9b/SN8IF2y0Jz8YSpl/1sbAEbkA/nv9gaXyAW72orwgTSTbsL4NhrV -K4mEXrb6fnpar87MeAA/3b3rxyvN73tlp8nW1pYbpB3Gex5GNPqWJhKv+rp+/R0/zs+f16mp -N/ytz8y80gGHD8RntglkMgg0EovpzVxOv5mY0Gi5rFfv3NHvJic9gJv5fBuQzc1NKZfLsr29 -3VYiL3ogQfCoxmIXNZd7RiORd7VeH/FAguAxf+v5/Dk+kG5xUxgb0LL+aDTavi/3aVkif9vR -h/q2rEZjpKNtfc5vWZ0p2DTO9gNjx5asdodc2EW+2H9auq8dI3b8Q6ui8Bf1IePWiAc5v1Kp -yMrKvQX7Qa/HBxICEFd8ICcAyM7Ojj+3VqvxgfzfQKrVqjQaDQn7iUMDca3GTWC9Xj/g27n4 -7W9Y1+MDaWk56+vrcpinI8zr8V1W02UlnM+yttPqshoDtrzuZbG3yzpjbeyMjS+0uKwK32Ud -lctq3U3xXVYILutaMqk/pFL649ycH38tFDyAGwsLfvw5nfY6pZvL2ttRtbqsZPKCplIv69zc -S+avLmk2+7zXKJnMqL/1dHpUy+XH+eqkM8kmEAfgcjyuE2trem12VsfMaY0tLemXkYjuHZ+u -Vu9zWRsbGx7MPZd13gMpFJ7SePw1XVs7q7duvWkwzrXJxULhSVtvTvOB9HNZU5WK/pLJ6G+l -kp90N/5p3ckLx/Fxf6zVZXXbUYnM77usSuUR/0QsLz/tb7dUekJv337dwxkff3v/aRH5jN+y -wnBZvXZUfJd1jC+GpVJJisWir+NWMXwgXSbQvYEHQeCLD+QEAGndUbnjB5lkPpCQgfRyVO4d -ZHd3V/hAjtFl9XJUrQ6rXxvju6yQXVa/HVXnU9Cr1fFdVkguK2Pj8hAu6/6n5us+LusTvss6 -SpfVDoLvso7cZTmVMrG6ug+mN4zhXJb7vLp6lq9ODuuyxhYX9UY2OwSQ4VzW4uKzBuk5PpDD -uiz3i8bfa7UhfpflXNbIQJflfslYqz3cbFuf8ltWGC6r/zrCd1n88IHwgfDDB8IHwg8fCD98 -IHwg/PCB8IHwwwfCB8IPHwgfCD98IPzwgfCB8MMHwgfCDx8IHwg/fCB8IPzwgfCB8MMHwg8f -CB8IP3wgfCD88IHwgfDDB8IHwg8fCD898i/yRZSg2d3sdAAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleUseOfDecoration [ - - | view element decoration | - view := RTView new. - element := RTBox new size: 50; color: Color blue; element. - decoration := RTDecoration new - shape: (RTEllipse new color: Color red; borderColor: Color black; size: 10) - tooltip: 'Set red color' - action: [ :anElement | - anElement trachelShape color: Color red. - anElement signalUpdate. ]; - shape: (RTEllipse new color: Color yellow; borderColor: Color black; size: 10) - tooltip: 'Set yellow color' - action: [ :anElement | - anElement trachelShape color: Color yellow. - anElement signalUpdate. ]; - shape: (RTEllipse new color: Color green; borderColor: Color black; size: 10) - tooltip: 'Set green color' - action: [ :anElement | - anElement trachelShape color: Color green. - anElement signalUpdate. ]. - element @ decoration @ RTDraggable. - view add: element. -^ view -] - -{ #category : #icons } -RTRoassalExample >> exampleUseOfDecorationIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAABFElEQVR4XuXYsQkAMAhFwb// -0JoMkIBNIHAP7MXrTLffT8U/gQ/i54P4IH4+iA/i54P4IH4+iA/i54P4+SA+iJ8P4oP4+SA+ -iJ8P4oP4+SB+PogP4ueD+CB+PogP4ueD+CB+PoifD+KD+PkgPoifD+KD+PkgPoifD+Lng/gg -fj6ID+Lng/ggfj7IZenMpnY+iA/ig/ggPogP4oP4ID6ID+KD+CA+iA/ig7yuhvmvEz8fxAfx -80F8ED8fxM8H8UH8fBAfxM8H8UH8fBAfxM8H8fNBfBA/H8QH8fNBfBA/H8QH8fNB/HwQH8TP -B/FB/HwQH8TPB/FB/HwQH8TPB/HzQXwQPx/EB/HzQXwQPx/EB/HzQfzOLZ+d5T9+ROpBAAAA -AElFTkSuQmCC' -] - -{ #category : #sources } -RTRoassalExample >> exampleUseOfMetrics [ - -| metrics classes view mb xAxis yAxis refresh elements | -refresh := nil. -metrics := Array with: - (Array with: 'LOC' with: #numberOfLinesOfCode) with: - (Array with: 'NOM' with: #numberOfMethods ) with: - (Array with: 'NOA' with: #numberOfVariables). - -classes := RTObject withAllSubclasses. - -view := RTView new. -view @ RTDraggableView. -xAxis := metrics first second. -yAxis := metrics second second. - -"Preparing the menu according to the provided metrics" -mb := RTMenuBuilder new. -mb view: view. - -metrics do: [ :tupple | - mb menu: 'X-axis' submenu: tupple first background: Color green callback: [ xAxis := tupple second. refresh value]. - mb menu: 'Y-axis' submenu: tupple first background: Color green callback: [ yAxis := tupple second. refresh value ]. -]. - -elements := (RTEllipse new color: (Color red alpha: 0.3)) elementsOn: classes. - -elements @ RTPopup. - -view addAll: elements. - -refresh := [ - RTMetricNormalizer new - elements: elements; - fastSmoothTranslation; - normalizePosition: [:cls | (xAxis rtValue: cls) @ (yAxis rtValue: cls) negated ] min: 0@0 max: 200 @ 200. - view signalUpdate. -]. -refresh value. - -view canvas addShape: (TRLineShape new from: 0 @ 200 to: 200 @ 200). - -view canvas addShape: (TRLineShape new from: 0 @ 0 to: 0 @ 200). - -^ view - -] - -{ #category : #icons } -RTRoassalExample >> exampleUseOfMetricsIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABeCAYAAADVA7GfAAAC2klEQVR4XuXbvUojURjG8bkC -G+/AexHBxivwAqKdtkLYQtgiWG1nq52wTRZZhZVdkrCVFq4oKqKLRYyO4gdR8/HoeyYjJtEY -B42Z+H8OL4SYOYHzyznHSWa8uzt+4hTv4cGKtWTE1pyox7v35KcFiBsgL2J72lm09hwqH6Qe -JNNi6BQB5I/Vv9f1wQdpB/LThumH1YrVrNU3q69W362+hMOYskq8AJIOa85q3Oq3VdZq0moh -7KPf6j8fpD2IDZJXDAfNDeQvq5zVplXBqhz+LfsCyN+64x1sNexj0SrvPc4i/gzh7yE9BVJR -RaWIrbmzqMe79+QTtADhhw/CDx+ED8IPH4QPwg8fhA/CDx+ED8IPH4QfPggfhB8+CB+EHz4I -H4QfPggfhJ+H6PhYOj0VAkTlsrS9Hevf05XPy6FgZojOz/kXOPCXLD4IP3wQPgg/fBA+CD98 -ED4IP3wQfvggfBB++CB8EH74IHwQfvggfBB++CDvEG1sSGdn4oPwwwfhg/DDB+GD8MMH4YcP -wgd507lFpSLlcm3PLbSzI21tiQ/y1gE/OZEymU9zQtf7IKWSND8vZbOf6hPe00uWLi8VzBT+ -LInBDDk4kGZmgkv+u3HZPx+kHsPdHzIxIU1NSdWqXvN6PkgnQVxGR6VEQs33iejoSLq6anxu -d/fJc3yQ90YZHpbGxoJBrl+2gsc3N+IvWR+JcX0tDQzUliz75KtQ4O8jXQW5vZX6+qS1NQVL -1Pq6tLzMB+kaSDoteZ40PV1D8f0ARMVi495hG77298UH6TRIKlUDGRyUlpaCQXdpeI3huNuS -dXjIB+k4SDJZAxkZCU4K3X9aWl1tBHEYwH2layD+0JB8+2LQt+UqrsUBubiQ9vb4m3iczkP4 -4YPwQfjhg/BB+OGD8EH44YPwQfjhg/DDB+GD8MMH4YPwwwfhg/DDB+GD8MMH4YcPwgfhhw/C -B+GHD8IH4ecjcg8nrAVd+NhQ9wAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleVectorEditing [ - | view selected statusBar | - view := RTView new. - selected := nil. - statusBar := nil. - - view when: TRMouseClick do: [ :evt | - selected == #line ifTrue: [ - | ex1 ex2 line | - ex1 := (RTBox new size: 10; color: (Color purple alpha: 0.2)) element. - ex2 := (RTBox new size: 10; color: (Color purple alpha: 0.2)) element. - ex1 translateTo: evt position. - ex2 translateTo: evt position + (100 @ 60). - ex1 @ RTHighlightable. - ex2 @ RTHighlightable. - ex1 @ RTDraggable. - ex2 @ RTDraggable. - line := (RTLine new "width: 3;" color: (Color blue alpha: 0.2)) edgeFrom: ex1 to: ex2. - view addAll: (Array with: ex1 with: ex2 with: line ). - line trachelShape pushBack. - ]. - - selected == #circle ifTrue: [ - | ellipse | - ellipse := (RTEllipse new size: 40; color: (Color yellow alpha: 0.2)) element. - ellipse translateTo: evt position. - ellipse @ RTDraggable. - view add: ellipse. - ]. - - - selected == #rectangle ifTrue: [ - | box | - box := (RTBox new width: 40; height: 30; color: (Color blue alpha: 0.2)) element. - box translateTo: evt position. - box @ RTDraggable. - view add: box. - ]. - view canvas signalUpdate. - ]. - - - - view @ RTDraggableView. - - view addMenu: '+ line' callback: [ selected := #line. statusBar text: 'line' ]. - view addMenu: '+ circle' callback: [ selected := #circle. statusBar text: 'circle' ]. - view addMenu: '+ rectangle' callback: [ selected := #rectangle. statusBar text: 'rectangle' ]. - view addMenu: 'Info' callback: [ TRPlatform current inform: 'Vectorial editing is hyper cool' ]. - - statusBar := TRLabelShape new. - statusBar text: 'Please, select an option'. - view canvas addShape: statusBar. - statusBar setAsFixed. - TRConstraint stickAtTheBottomOfTheWindow: statusBar. - - view canvas color: Color white. - ^ view -] - -{ #category : #icons } -RTRoassalExample >> exampleVectorEditingIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABjCAYAAABt56XsAAADFUlEQVR4XuXVS0tqURyH4b5w -gd+gUeUgCCIowYGTDBRxEIGoYYSRN8QLEhlWWpQpmVkNtH51/ou2FOcyOJwD0fuCqPuy9nY9 -e+HM6yu/r9QMfwq+MMhgMNDfDtRut/UvbuhX4wyHw+m2RqOhbw/SbDbdj8xkMkokEopGo4pE -Isrlcp9+vHdcKBTS7u6udnZ2lE6ntbGxocXFRWWz2d9O1tramra2tnR4eKhkMqmFhQXFYjHZ -NQOBgAqFgvL5vJaWltx14/H4dCw7x7uv1dVVhcPhn+7t24CUy2X5/f4pyMHBgVZWVuTz+T5N -ysfj5ufn3UTay7YZytzcnAOZTCbTc7a3t91EemMb5Obmpur1ukOYnZ3V8vKyu6adb9cwkPX1 -dXfcRxDvvuyeSqWSgsGg+P8h/7Gnp6c/rjD+nzo/Pgg/PggfhB8fhA/Cjw/CB+HHB+GD8OOD -8EH4U8AH4ccH4YPw44PwQfjxQfgg/PggfBB+fBB+fBA+CD8+CB+EHx+ED8KPD8IH4ccH4ccH -4YPw44PwQfjxQfgg/PggfBB+fBB+fBA+CD8+CB+EHx+ED8KPD8IH4ccH4ccH4YPw44PwQfjx -Qfgg/PggfBB+fBB+fBA+CD8+CB+EHx+ED8KPD8IH4ccH4ccH4YPw44PwQfjxQfgg/PggfBB+ -fBB+fBA+CD8+CB+EHx+ED8KPD8IH4ccH4ccH4YPw44PwQfjxQb4RSKVS0cXFharVqobDoV5e -XnR9fS3badufn591f38v74ROp+M+93o9XV1dyd7t+/n5uY6Pj93nwWCgyWSim5ub6Xndblfj -8Vi27+joSJeXlzo7O9NoNHLj8CneQfb3992E2HsikVCz2VQ+n1e9XlexWFSpVFKtVptOWLvd -VjqddvtPT08dZKFQcJNdLpfdcalUyo3h7dvb29PJyYkbx65j22OxmMNPJpOyh4JP8Q5iT7b3 -hNsTaxN+e3srWwkPDw9u9djLWxm2WlqtljvOnnbbZyvBVoB9tmN+QNlLd3d37jw71sa2ibfr -2OqwMR4fHx1qv9/ng7z3Bl50tq2EUZhJAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTRoassalExample >> exampleVisualizingSoftwareWithBeziers [ - " - self new exampleVisualizingSoftwareWithBeziers - " - | v inheritanceEdges shape helpBar1 helpBar2 elements eb classes | - - "The variable classes contains the Pharo classes that will be represented" - classes := Collection withAllSubclasses. - - v := RTView new. - shape := RTEllipse new - color: (Color red alpha: 0.4); - size: [ :e | e numberOfMethods / 5 max: 5 ]. - elements := shape elementsOn: classes. - elements @ RTPopup @ RTDraggable. - v addAll: elements. - - "Defining edges from inheritance" - inheritanceEdges := RTEdgeBuilder new - view: v; - objects: Collection withAllSubclasses; - connectFrom: #superclass to: #yourself. - - "Layout the whole thing" - RTForceBasedLayout new on: v elements edges: inheritanceEdges. - - "Defining edges from dependencies" - eb := RTEdgeBuilder new. - eb view: v. - eb objects: classes. - eb shape - bezierLineFollowing: #superclass; - color: (Color blue alpha: 0.1). - eb connectFrom: #yourself toAll: #dependentClasses. - - helpBar1 := TRLabelShape new - text: - 'Circle = classes, size = number of methods; gray links = inheritance;'. - helpBar2 := TRLabelShape new - text: - 'blue links = dependencies; layout = force based layout on the inheritance links'. - v canvas addFixedShape: helpBar1. - v canvas addFixedShape: helpBar2. - TRConstraint stick: helpBar1 above: helpBar2. - TRConstraint stickAtTheBottomOfTheWindow: helpBar2. - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleVisualizingSoftwareWithBeziersIcon [ - ^ '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 -t5T/yz92IvXRDqRfGUPpU6OIOwPMqMf2TPpTPwVw4MCom9xXXKzWxfBMkUqVGpercxAIvrq6 -+vJHb779Cw+/oN6E0tbFV3k5toYUWhGn2orsu8CsArbdVJMHmQGqvB//PsAYe5U89yD5IvwC -U4QoTUx/DmxgEyIrq0pOebiiorMvkZien5rae3RiYvnCq5c//O2ZvpPfjjA7roN3nNIx+BpF -vN0jfO3KZuViWacZyKt9sVj05/+1oaX3+lHhQcKUdlR1HE+x0rWUYHC8b3QcVev30J4pQBHs -AdKCRRfLqXgsFutsamrqkclUWp+oIoEJuOJlRk+mpU1Mcjizc2AwbEG5o/VSz5RCURfdaNUl -QRnKTO6NWxrG0p1OpD22plMqj/oQ8hUgjgxmWUor0r3ehtY1oZjJrxOKY9gpz6P1Jg98IQYm -0+B21zYm+y7ue+jY7DSk1BTwhmfT0p6/AM4mTLvsqiqw7ioUoNGxvb13FGXMJNLrL+Vy/vhn -G+Jgn0pr6/2aIhHYDK4tFvLuLavBKIn1FLO8XGustVS30V92JemUbYs71tIygxGPp6V1dNQY -eg/0ZvsvgGhqR6aTcu4//bYk7Uf/AswJoZKB+7mAEUYjNhV7a1FhP0IiUUGBtMzp9EfOnbv0 -GqSIytXtkI4YIbe0pcXjg3qE9LRhEOgXE/a0poq4ZD94drbXa2Mc/2Ch79ZPJrRz7ygzvvu7 -ZvHuL5ejj37ejLznJxBjMh+xij2e5i6NZmq2oODM+fHIu5/M9n/nDyH5c7dfPPOtX1ssjW1s -dlGRxdLau7Bw4429e1++6y8LjW/UJlgJworQ5/NRq7RnVrTB0revr28SDsGVlpaWC4VC0fGx -sYun2mffstt7h8XiSh04WjmIJ3RmljY2NOw5nEisPG+375h4sX//V25N7Xv/pYPf+M+L+7/2 -7xfm7vzsrRdu/axdf/37EeH8OwrufmyOTyTWlshicR4y1spQmkKKmGVxS+041CmRSMqg3srK -SkM5YihguS2XW109PSN7o9HukbBIFF06snLFZvOH3e7qmk8toad37VoA1yico8JOuXsOnwiH -EwUlDiNuSiSaAaIAEyBOrw9FbDY4p5uXtx3hNYJXXaC4fZkrXx1H+Yve9GPvjSH2FBZfJyD8 -4ZMlspRTiDk5KpXRDgodFhdxg2EDPSIQwLIcjhHBvkitNjvr6yOtUH+byTnM5/M/HWeGVdS1 -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 -QmCC' -] - -{ #category : #sources } -RTRoassalExample >> exampleWorm [ - -| v s e last lineLength callback nbOfElements head | -v := RTView new. -s := RTEllipse new - size: [ :m | m * 10 ]; - color: (Color blue alpha: 0.4). -nbOfElements := 10. -last := nil. -1 to: nbOfElements do: [ :i | - e := (s elementOn: i). - v add: e. - last ifNotNil: [ v add: (RTLine new edgeFrom: e to: last) ]. - last := e. -]. - -lineLength := 40. - -callback := TRTranslationCallback - block: [ :shape :step | - | diff alpha dist | - (shape element outgoingEdges collect: #to) do: [ :el | - diff := shape position - el position. - alpha := diff theta. - dist := ((diff x * diff x) + (diff y * diff y)) sqrt. - el translateBy: (alpha cos * (dist - lineLength)) @ (alpha sin * (dist - lineLength)) ] ]. - -v elements do: [ :el | el trachelShape addCallback: callback ]. - -head := v elements last. -v when: TRMouseMove do: [ :evt | - head translateBy: (evt positionFromCamera - head position) / 10. - v canvas signalUpdate ]. - -head translateBy: -150 @ -150. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleWormIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABjCAYAAABt56XsAAAE30lEQVR4XuWb7UsUURTGj1pg -EL2gtBYo0rC4gS6xrtpWhNALSAYRqR+CNMQ3FHxBwxeULBPLD64vVFaIbUUJuuJLiiSSRmQv -CPUX1eEyzMzOzDq7zqwfnh9cdJmZ/fA8e+8595w7hA8++OCDDz744IMPPvjggw8++OCDDz74 -4IMPPvjggw8++OCDDz744IMPPvjggw8++OCDRFISkc9HdPMmUW2tMq5eJcrNxdcnoVy5ojXB -bPj9+Fo5yvHjRDU11syQR1kZvm6OcPhwbEaox927+PrZTlVV/IbwKC3F19A2zp7dmxnycLnw -tbSFeA2orydqaFA+37qFr+WeOXIkNhMePyZ6+9Z4DA2JdBmfPZCfb82I+/fNjVCP5mYiScLX -1VFDenqsmcHjwQPxzPnz+No6Ykh7Owt95kx4OSnJiiH9/cqzmZn4+tpuyPS0LLbHE17KyZlb -im5Ia6v2efyYEiPp6eZmdHVFCr67KZHfwSk1PjalvcGgkejmpoTDRAMD2sFpMT4xEggYG2K+ -NGlN+fSJ6Pt3otlZ4/u5WJmWhq9zTFRWxmKIbIrL9fW/EdvbRBsb0ZcxLlqePImvs2VYrNgM -YRMyMnb+uFy/dojev7cWV44dw9faMqdOacvvk5PmIvPyxDNja8vjWV4zD/ShkNaQGzfwdY6J -o0eVBtXDh+aGbG4SrazsHuiHh/Uzj8s1+MQxWwoKiJ490wo8MiKyp48frWVfLS16Q3jvg0+c -nDunF7Sx0Vr2NT4uzItMn/l5txtf27jh5pPaEN6N75Z9hRf0s0sebBR/z+XL+NrGTUmJtg8S -LfuanPR45hbNA/2TJ/idRlvgMsidO+YpMde9eIniGRAt0Pf1aWcc/vK1Rw4eFD14dYmE4wKL -29SkFl+SZhf0phhVBfBxqAbG5mhnhNYUdXlePVJT8fV0ZHc/OGi0nAlTpt7pkwN5hhUW4uvp -iClmPfdgUJK6+nJyevpFO5h38Orr3d3i+awsfE1tgX/hLOijR1qhJyaI2tpkwyRpOGgc6Ovq -FFPz8vD1tBW1uPoNpT7Qv3mjv5dLOPjYhNlhba5rGQX6zk79vdeu4etoKxUVu5XzhSmvQ+Yd -S3wcLrlExo3BQQ70p0939uIbkjC4dctntKqrhQlTUyLN5fKLHOjl7Es+kMcVZb6XZxn+IQkH -KS42W56EKVOq2TM2plxnMw8dwtfPdqK9gzI0pAT61VWimRmi0VGln3LvHr5+jpCdHe2EiyR9 -++l2f/6ijTV8epLv8Xjw9XMEPmJaXq6YwbNA3o/Mz0vS/LLb/WOH/9eW6y9exNfO8dnC7Vxu -VPGBbtmYDx/c7t9/fb7NbfH56VNhCMcgfBKE/iyx17u05vMtrxN1dIhrly6J3smBA/h6JWzP -wvFCbv2GQl7vxCufb/ylqImpSzLc68fHQfhXf/u2UcDPy5tfCQReTItzwnJVmMf16/i6OUpy -sogpvO9Qm9LR4fePvwwEltbFzHn+XLmWkoKvW0LhzErsU/z+xTUlFZbjCn7/JMEUFQnhufWr -3ptw7x7/FOQ+cOKEtl/Pb/r29uLv3vcVo9OTPPBfb9hH+FVrDvgXLoi/+K814IMPPvjggw8+ -+OCDDz744IMPPvjggw8++OCDDz744IMPPvjggw8++OCDDz744IOPbfwDrvFXiiOUZrIAAAAA -SUVORK5CYII=' -] - -{ #category : #sources } -RTRoassalExample >> exampleWrappingText [ -| v el str t block lb | -v := RTView new. -el := RTBox new - width: 200; - height: 300; - borderColor: Color black; - element. - -v add: el. - -str := String loremIpsum. - -t := (Smalltalk at: #RTText) new "This line is for compatibility with VisualWorks" - width: 180; - text: str; - wrapText; - element. - -v add: t. - -(RTConstraint on: t background: el) - stick. - -block := [ :aShape :step | - t shape width: aShape width - 20. - t update. -]. - -el addCallback: (TRTranslationCallback block: block). -el addCallback: (TRExtentCallback block: block). - -el @ RTDraggable @ RTResizable. - -lb := RTLegendBuilder new. -lb view: v. - -lb addText: 'Try resizing the rectangle by clicking near the border.'. -lb build. - -^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleWrappingTextIcon [ - ^ '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 -rkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampleforAddWithEdges [ - -| v es elements edges | -v := RTView new. -es := (RTBox new color: Color white; borderColor: Color lightGray) elementsOn: (Array with: RTLayout with: RTShape with: RTBuilder ). -v addAll: es. -es @ RTDraggable. - -RTNest new - for: es add: [ :group :model | - elements := (RTBox new color: Color red) elementsOn: model withAllSubclasses. - group addAll: elements. - edges := RTEdgeBuilder new - view: group; - objects: model withAllSubclasses; - connectFrom: #superclass. - RTTreeLayout on: elements edges: edges . - ]. - -RTGridLayout on: es. - - ^ v -] - -{ #category : #icons } -RTRoassalExample >> exampleforAddWithEdgesIcon [ - ^ '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 -cAAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTRoassalExample >> exampletimeLines [ - -| classes oldestAge v elements | -classes := RTShape withAllSubclasses. - -oldestAge := (classes collect: #ageInDays) max. - -v := RTView new. -v @ RTDraggableView. -classes doWithIndex: [ :c :index | - elements := RTEllipse new elementsOn: c rtmethods. - v addAll: elements. - RTMetricNormalizer new - elements: elements; - normalizeX: #ageInDaysAsInteger min: 0 max: 200 minValue: 0 maxValue: oldestAge. - elements translateBy: 0 @ (index * 10). - RTEdgeBuilder new - view: v; - linkElements: elements. -]. -^ v -] - -{ #category : #icons } -RTRoassalExample >> exampletimeLinesIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAADtUlEQVR4XuWcB27jMBQFff9T -uvfeK7N4wnKhFUKr2iQ1DyBkIbaiePgb+ZXOzw9fIanD/wr4QPjiA+ED4YsPhA+ELz4QPhC+ -+ED4QPjiA+GLD4QPhC8+ED4QvvhA+ED44gPhA+ELD+R+v5u613i9XubxeJgm72u73Zrdbmdw -QObzuTkcDrXGZrMxi8XCrNfrxka32zW9Xs9cLheDAnI6nUr9wS5LKGJp6fekr2P+Sq8F4Pl8 -GqzLGo1GpWauyxJkaXmfTb8ne53VapUcJ5NJ8vp2uxl+UPcsWYcs53w+G36WFYCm02liOePx -mA/EFSvSvj4bJ9IzOfuz6/WanPt2Pa0Bopm63+8Tvy5XoqEYoFRUQ5mVZrIrhmi2KwObzWZB -BOlWuqwqNYug2s9lwbgyNmV+sjCbefGBNFiz9Pv9f9azXC4LZWbK/GRhPoN7dEFds1cVepnP -CNC7c77LqiHNXsWRMtYyGAz+swSd84FEIMUaxR0dfcURPpBMImDji6840gmh7rC1Q1OqUoPo -PnwtKAYDRG5BdYcyG1tn1B1aPlcNojhTZug+tJ7FjyENStlXkQxMcaJspsYHUkEq7OT/86xI -caLs8j8fSEGX10Q2ZGsb9H5IUzWJMiO75lV16Bp2nQy7H2L9uM91I76FZNanbFZUd2+97tA9 -yDr4O4YVpS+wrcVplEDUGcIH8uXqPW/N6ZNVOx9IRrbnylVHyNfrWCQ+qGpvoikPBeSTVXMI -nSTRAVHVrNlct574bYTQSRIdkKKrvfZ9rhjjqmt89upGCaRof65Whd91MdouxOxQry4fyAcs -hKBgLCS24IsvDG3qWqXrJF2/SK6dQf0O32tr0QCxvVlaNlFc0LHssDHGtUMZgqXimhxCLxJx -QGRpfCAVsq4izw42/XwhH4hD8vfy53nrVHpPCBtcOJeV9ft5/VPH49HwgXwhw7JD/VPveqyG -wyEfSNPSPoaaD/iFYSBSXaBnPGJ8Coqf9vLrEH4dwgfyBYUQs/hAUlLM4gPxoJArfCQQVfh8 -IPzMig8klsyKbyF8IHwLiQoIv+skMCDa427bvgbfZRWsN+x/j+MD8VRvpPt81VGivRT9d6BQ -V5GDBJLuu3o3m9vYXBckkHQ3vHqpdN6GzvZWuaxP1hJKKLRDKYuTdSrr8+XSoutc/NRTuHrS -ShYni1TW56tRgr/8zndZfPGB8IHwxQfCB8IXHwgfCF98IHwgfPGB8MUHwgfCFx8IHwhffCB8 -IHzxgfCB8MUHwtfv+gNX61dLNkTxDQAAAABJRU5ErkJggg==' -] - -{ #category : #accessing } -RTRoassalExample >> label [ - ^ 'Plain Roassal' -] diff --git a/src/Roassal2/RTRotableView.class.st b/src/Roassal2/RTRotableView.class.st deleted file mode 100644 index f500c4e3d..000000000 --- a/src/Roassal2/RTRotableView.class.st +++ /dev/null @@ -1,99 +0,0 @@ -" -I am an interaction that makes a view rotable using the left button and draggable using the right mouse button. - -Here is an example - -[[[ - | b v | - v := RTView new. - v @ RTRotableView. - b := RTMondrian new. - b view: v. - b nodes: (1 to: 300). - b edges connectFrom: [ :value | value // 2 ]. - b layout cluster. - b. -]]] -" -Class { - #name : #RTRotableView, - #superclass : #RTAbstractInteractionView, - #instVars : [ - 'view', - 'draggingView', - 'elements', - 'center', - 'startPoint' - ], - #category : #'Roassal2-Interactions' -} - -{ #category : #accessing } -RTRotableView >> center [ - ^ center -] - -{ #category : #accessing } -RTRotableView >> center: anObject [ - center := anObject -] - -{ #category : #'selection events' } -RTRotableView >> dragViewWithEvent: e [ - view canvas camera translateBy: e step negated / view canvas camera scale. - e signalUpdate -] - -{ #category : #accessing } -RTRotableView >> elements [ - "Return a block or a collection of Roassal elements" - ^ elements -] - -{ #category : #accessing } -RTRotableView >> elements: elementsOrBlock [ - "Useful to specify which elements have to be rotated" - elements := elementsOrBlock -] - -{ #category : #initialization } -RTRotableView >> initialize [ - super initialize. - elements := [ view elements ]. - center := 0 @ 0. - startPoint := 0 @ 0. -] - -{ #category : #hooks } -RTRotableView >> initializeElement: element [ - view := element. - draggingView := false. - view canvas when: TRMouseRightDragStart do: [ draggingView := true ]. - view canvas when: TRMouseLeftDragStart do: [ :e | - draggingView := false. - startPoint := (e positionFromCamera - center value). ]. - view canvas when: TRMouseDragging do: [ :e | - draggingView - ifTrue: [ self dragViewWithEvent: e] - ifFalse: [ self updateTargetElements: e ] ]. - view canvas when: TRMouseDragEnd do: [ draggingView := false ]. - -] - -{ #category : #action } -RTRotableView >> updateTargetElements: evt [ - | target c angle eangle p d evtPoint | - target := elements value."A collection of elements" - c := center value."a point" - evtPoint := (evt positionFromCamera - c ). - angle := startPoint theta - evtPoint theta. - startPoint := evtPoint. - - target do: [ :e | - d := c dist: e position . - eangle := (e position - c) theta - angle. - p := c + ((d * eangle cos) @ (d * eangle sin)). - e translateTo: p. - ]. - view signalUpdate. -] diff --git a/src/Roassal2/RTRotableViewTest.class.st b/src/Roassal2/RTRotableViewTest.class.st deleted file mode 100644 index f92c6aa9d..000000000 --- a/src/Roassal2/RTRotableViewTest.class.st +++ /dev/null @@ -1,56 +0,0 @@ -Class { - #name : #RTRotableViewTest, - #superclass : #RTTest, - #instVars : [ - 'event', - 'v', - 'r' - ], - #category : #'Roassal2-Interactions' -} - -{ #category : #running } -RTRotableViewTest >> setUp [ - | e | - super setUp. - v := RTView new. - e := (RTBox new size: 30) element. - v add: e. - e translateBy: 50 @ 50. - - r := RTRotableView new. - v @ r. -] - -{ #category : #tests } -RTRotableViewTest >> testBasic [ - - event := TRMouseDragging new step: 50 @ 50. - v announce: event. - - self assert: event canvas equals: v canvas. - - r dragViewWithEvent: event. - self assert: (v canvas camera position closeTo: -50 @ -50) -] - -{ #category : #tests } -RTRotableViewTest >> testCenter [ - - self assert: r center equals: 0 @ 0. - r center: 5 @ 50. - self assert: r center equals: 5 @ 50 -] - -{ #category : #tests } -RTRotableViewTest >> testElement [ - self assert: r elements size equals: 0 -] - -{ #category : #tests } -RTRotableViewTest >> testMouseDragging [ - - | evt | - evt := TRMouseDragging new step: 50 @ 50. - self assert: evt position equals: 0 @ 0 -] diff --git a/src/Roassal2/RTRotatedLabel.class.st b/src/Roassal2/RTRotatedLabel.class.st deleted file mode 100644 index 413ac0c36..000000000 --- a/src/Roassal2/RTRotatedLabel.class.st +++ /dev/null @@ -1,57 +0,0 @@ -" -A RTRotatedLabel describes rotated labels. - -| v shape es | -v := RTView new. -shape := RTRotatedLabel new text: [ :c | 'Class ', c name ]; angleInDegree: [ :c | c numberOfMethods \\ 360 ]. -es := shape elementsOn: Collection withAllSubclasses. -RTGridLayout on: es. -v addAll: es. -v open -" -Class { - #name : #RTRotatedLabel, - #superclass : #RTLabel, - #instVars : [ - 'angle' - ], - #category : #'Roassal2-Shapes' -} - -{ #category : #accessing } -RTRotatedLabel >> angleFor: element [ - ^ angle rtValue: element -] - -{ #category : #accessing } -RTRotatedLabel >> angleInDegree: aValueOrAOneArgBlock [ - "aValueOrAOneArgBlock is applied on the object model" - self angleInDegreeElement: [ :anElement | aValueOrAOneArgBlock rtValue: anElement model ] -] - -{ #category : #accessing } -RTRotatedLabel >> angleInDegreeElement: aValueOrABlock [ - "The argument will be evaluated against the model" - angle := aValueOrABlock -] - -{ #category : #initialization } -RTRotatedLabel >> initialize [ - super initialize. - self angleInDegree: 0. -] - -{ #category : #hooks } -RTRotatedLabel >> trachelShapeFor: anElement [ - | shape | - "ex := (self widthFor: anElement) @ (self heightFor: anElement)." - "rec := (anElement position ) extent: ex." - - shape := TRRotatedLabelShape new. - shape text: (self textFor: anElement); - color: (self colorFor: anElement); - position: anElement position; - angleInDegree: (self angleFor: anElement); - fontSize: (self heightFor: anElement). - ^ shape -] diff --git a/src/Roassal2/RTRotatedLabelTest.class.st b/src/Roassal2/RTRotatedLabelTest.class.st deleted file mode 100644 index 92941e605..000000000 --- a/src/Roassal2/RTRotatedLabelTest.class.st +++ /dev/null @@ -1,20 +0,0 @@ -Class { - #name : #RTRotatedLabelTest, - #superclass : #RTTest, - #category : #'Roassal2-Core-Tests' -} - -{ #category : #tests } -RTRotatedLabelTest >> testBasic [ - - | v shape | - v := RTView new. - shape := RTRotatedLabel new. - shape angleInDegree: [ :cls | cls numberOfMethods negated / 1.5 ]. - shape text: [ :cls | ' ', cls name ]. - shape color: (Color black alpha: 0.2). - v addAll: (shape elementsOn: Collection withAllSubclasses). - - v canvas color: Color white. - -] diff --git a/src/Roassal2/RTRotationMove.class.st b/src/Roassal2/RTRotationMove.class.st deleted file mode 100644 index 0eb5ce267..000000000 --- a/src/Roassal2/RTRotationMove.class.st +++ /dev/null @@ -1,41 +0,0 @@ -Class { - #name : #RTRotationMove, - #superclass : #RTAnimation, - #instVars : [ - 'animatedValue' - ], - #category : #'Roassal2-Animation' -} - -{ #category : #'as yet unclassified' } -RTRotationMove class >> angle: anAngle during: seconds on: shape [ - ^ self new angle: anAngle during: seconds on: shape -] - -{ #category : #public } -RTRotationMove >> angle: anAngle during: seconds on: anElement [ - |currentAngle| - element := anElement. - currentAngle := element trachelShape angleInDegrees. - animatedValue := TRVIAnimatedValue new - evaluator: [ :t | currentAngle interpolateTo: anAngle at: t ]; - timer: (TRVITimer new cycleLength: seconds); - yourself. -] - -{ #category : #testing } -RTRotationMove >> hasCompleted [ - ^ animatedValue hasCompleted -] - -{ #category : #refreshing } -RTRotationMove >> refresh [ - element trachelShape rotateToDegrees: animatedValue value. - "element update." - element signalUpdate. -] - -{ #category : #actions } -RTRotationMove >> start [ - animatedValue start -] diff --git a/src/Roassal2/RTRoundedBox.class.st b/src/Roassal2/RTRoundedBox.class.st deleted file mode 100644 index d0349d262..000000000 --- a/src/Roassal2/RTRoundedBox.class.st +++ /dev/null @@ -1,93 +0,0 @@ -" -Rounded rectangle. --=-=-= -v := RTView new. - -e1 :=((RTRoundedBox new borderRadius: 10; size: 50) + RTLabel ) elementOn: 1. - -e2 := (RTEllipse new size: 50) elementOn: 2. -v add: e1; add: e2. - -e2 translateBy: 80 @ 60. - -e1 @ RTDraggable. -e2 @ RTDraggable. - -s := RTArrowedLine new color: Color black. -s attachPoint: RTRectangleAttachPoint new. -l := s edgeFrom: e1 to: e2. -v add: l. - -v --=-=-= -" -Class { - #name : #RTRoundedBox, - #superclass : #RTBox, - #instVars : [ - 'borderRadius' - ], - #category : #'Roassal2-Shapes' -} - -{ #category : #accessing } -RTRoundedBox >> borderRadius [ - ^ borderRadius -] - -{ #category : #accessing } -RTRoundedBox >> borderRadius: aValueOrAOneArgBlock [ - "aValueOrAOneArgBlock is applied on the object model" - self borderRadiusElement: [ :anElement | aValueOrAOneArgBlock rtValue: anElement model ] - -] - -{ #category : #accessing } -RTRoundedBox >> borderRadiusElement: aValueOrAOneArgBlock [ - borderRadius := aValueOrAOneArgBlock -] - -{ #category : #accessing } -RTRoundedBox >> borderRadiusFor: anElement [ - ^ borderRadius rtValue: anElement -] - -{ #category : #configuration } -RTRoundedBox >> defaultBorderRadius [ - ^ 0 -] - -{ #category : #accessing } -RTRoundedBox >> geometryFor: anElement [ - | rect | - rect := GRectangle - origin: anElement encompassingRectangle origin - corner: anElement encompassingRectangle corner. - ^ GRoundedRectangle rectangle: rect borderRadius: (self borderRadiusFor: anElement) -] - -{ #category : #initialization } -RTRoundedBox >> initialize [ - super initialize. - borderRadius := self defaultBorderRadius -] - -{ #category : #hooks } -RTRoundedBox >> trachelShapeClass [ - ^ TRRoundedBoxShape -] - -{ #category : #rendering } -RTRoundedBox >> updateFor: anElement trachelShape: trachelShape [ - | ex | - trachelShape isNil ifTrue: [ ^ self ]. - ex := (self widthFor: anElement) @ (self heightFor: anElement). - trachelShape - extent: ex; - color: (self colorFor: anElement); - borderRadius: (self borderRadiusFor: anElement); - strokePaint: (self borderColorFor: anElement); - strokeWidth: (self borderWidthFor: anElement); - rotateByDegrees: (self rotationFor: anElement); - scaleBy: (self scaleFor: anElement) -] diff --git a/src/Roassal2/RTRoute.class.st b/src/Roassal2/RTRoute.class.st deleted file mode 100644 index d28fea965..000000000 --- a/src/Roassal2/RTRoute.class.st +++ /dev/null @@ -1,76 +0,0 @@ -Class { - #name : #RTRoute, - #superclass : #RTObject, - #instVars : [ - 'edge', - 'mapBuilder', - 'length' - ], - #category : #'Roassal2-Builder-Map' -} - -{ #category : #public } -RTRoute class >> from: cityElem1 to: cityElem2 [ - |route edge| - route := RTRoute new. - edge := RTEdge from: cityElem1 to: cityElem2. - edge model: route. - route edge: edge. - ^ route. -] - -{ #category : #accessing } -RTRoute >> edge [ - ^ edge -] - -{ #category : #accessing } -RTRoute >> edge: anEdge [ - edge := anEdge -] - -{ #category : #accessing } -RTRoute >> from [ - ^ edge from model -] - -{ #category : #'as yet unclassified' } -RTRoute >> fromCityName [ - ^ mapBuilder cities getCityName: self from -] - -{ #category : #'as yet unclassified' } -RTRoute >> length [ - length isNil ifTrue: [ - |coords1 coords2| - coords1 := mapBuilder translatePixelsToGeoPosition: edge from position / (mapBuilder scale). - coords2 := mapBuilder translatePixelsToGeoPosition: edge to position / (mapBuilder scale). - length := (mapBuilder geoDistanceBetween: coords1 and: coords2) asInteger. - ]. - ^ length -] - -{ #category : #'as yet unclassified' } -RTRoute >> lengthString [ - ^ self fromCityName, ' -> ', (self toCityName), ': ',(self length asString), ' km' -] - -{ #category : #accessing } -RTRoute >> mapBuilder: builder [ - mapBuilder := builder -] - -{ #category : #'as yet unclassified' } -RTRoute >> printString [ - ^ self fromCityName, ' -> ', (self toCityName) -] - -{ #category : #accessing } -RTRoute >> to [ - ^ edge to model -] - -{ #category : #'as yet unclassified' } -RTRoute >> toCityName [ - ^ mapBuilder cities getCityName: self to -] diff --git a/src/Roassal2/RTRouteBuilder.class.st b/src/Roassal2/RTRouteBuilder.class.st deleted file mode 100644 index c2e30f0ff..000000000 --- a/src/Roassal2/RTRouteBuilder.class.st +++ /dev/null @@ -1,67 +0,0 @@ -Class { - #name : #RTRouteBuilder, - #superclass : #RTShapeBuilder, - #instVars : [ - 'routes', - 'mapBuilder', - 'popup' - ], - #category : #'Roassal2-Builder-Map' -} - -{ #category : #'as yet unclassified' } -RTRouteBuilder >> buildRoutesUsingNames: cityNames [ - |elements routeElems| - elements := mapBuilder view elements. - routeElems := OrderedCollection new. - routes do: [ :r | - | route c1 c2 | - c1 := elements detect: [ :e | (cityNames rtValue: e model) = (r key) ] ifNone: [ self cityNotFoundError: r key ]. - c2 := elements detect: [ :e | (cityNames rtValue: e model) = (r value)] ifNone: [ self cityNotFoundError: r value ]. - route := RTRoute from: c1 to: c2. - route mapBuilder: mapBuilder. - route edge + (shape copy). - popup isNil ifFalse: [ route edge @ (RTPopup text: popup) ]. - routeElems add: route edge. - ]. - ^ routeElems. -] - -{ #category : #'as yet unclassified' } -RTRouteBuilder >> cityNotFoundError: cityName [ - self error: 'Not found: ',cityName. -] - -{ #category : #'as yet unclassified' } -RTRouteBuilder >> from: aCityName toAll: cityNames [ - cityNames do: [ :toCityName | - routes add: aCityName -> toCityName. - ] -] - -{ #category : #'as yet unclassified' } -RTRouteBuilder >> ifRoute: aConditionBlock lineColor: aColorBlock [ - ^ self ifElement: [ :e | aConditionBlock rtValue: e model ] fillColor: aColorBlock. -] - -{ #category : #initialization } -RTRouteBuilder >> initialize [ - super initialize. - routes := OrderedCollection new. - self line; color: Color black. -] - -{ #category : #accessing } -RTRouteBuilder >> mapBuilder: builder [ - mapBuilder := builder. -] - -{ #category : #interactions } -RTRouteBuilder >> withPopup [ - self withPopup: #yourself -] - -{ #category : #accessing } -RTRouteBuilder >> withPopup: aBlockOrSymbol [ - popup := aBlockOrSymbol -] diff --git a/src/Roassal2/RTSBFadeInteraction.class.st b/src/Roassal2/RTSBFadeInteraction.class.st deleted file mode 100644 index f0ebe522c..000000000 --- a/src/Roassal2/RTSBFadeInteraction.class.st +++ /dev/null @@ -1,172 +0,0 @@ -" -A RTFadeInteraction is a roassal2 interaction that allows to an element of sunburst and its path to stand out, this works with the RTMouseEnter/RTMouseLeave events. - -Instance Variables - action: a block closure - -action - - When one element of sunburst is pointed, the fade action works over the other elements, when this happen, the action block is called with the element's model as an argument. - -" -Class { - #name : #RTSBFadeInteraction, - #superclass : #RTInteraction, - #instVars : [ - 'action', - 'stillInSunburst' - ], - #category : #'Roassal2-Builder-Sunburst' -} - -{ #category : #'initialize-release' } -RTSBFadeInteraction class >> action: ablock [ - | inst | - inst := self new. - inst action: ablock. - ^ inst. -] - -{ #category : #computing } -RTSBFadeInteraction >> action: ablock [ - action := ablock -] - -{ #category : #computing } -RTSBFadeInteraction >> children: element [ - (element attributes includesKey: #children) ifTrue: [ - ^ element attributes at: #children ] - ifFalse: [ ^ #() ]. -] - -{ #category : #computing } -RTSBFadeInteraction >> fade: element [ - | color | - (element attributes includesKey: #scolor) - ifTrue: [ color := element attributes at: #scolor ] - ifFalse: [ - color := element color. - element attributes at: #scolor put: color ]. - element trachelShape color: (color alpha:0.2). - - -] - -{ #category : #computing } -RTSBFadeInteraction >> fade: element element: target [ - "recursive fade the elements" - - | res v | - res := true. - (element = target) ifTrue: [ res := false. ]. - - (self children: element) do: [ :node | - v := self fade: node element element: target. - v ifTrue: [ self fade: node element ] - ifFalse: [ res := false. ]. - ]. - - ^ res. - -] - -{ #category : #computing } -RTSBFadeInteraction >> fadeElements: elements [ - elements do: [ :e | self fade: e ]. -] - -{ #category : #computing } -RTSBFadeInteraction >> focus: element [ - | oldPath | - oldPath := self sbpath: element. - oldPath ifNil: [ self fadeElements: element view elements ] - ifNotNil: [ - self fadeElements: oldPath ]. - oldPath := self path: element. - self sbpath: element put: oldPath. - self restoreElements: oldPath. - - -] - -{ #category : #hooks } -RTSBFadeInteraction >> initializeElement: element [ - - element when: TRMouseEnter do: [ :event | - stillInSunburst := true. - self focus: element. - self updateCanvas: element. - action ifNotNil: [ action value: element model ]. - ]. - - element when: TRMouseLeave do: [ :event | | anim | - stillInSunburst := false. - anim := RTNopAnimation new - waitFor: 1 after: [ - stillInSunburst ifFalse: [self restore: element. self updateCanvas: element.]. - ]. - - element view addAnimation: anim. - anim start. - action ifNotNil: [ action value: nil ] ]. -] - -{ #category : #computing } -RTSBFadeInteraction >> parentOf: element [ - - | e | - e := element view elements first. - ^ e -] - -{ #category : #'as yet unclassified' } -RTSBFadeInteraction >> path: element [ - | e path | - e := element. - path := OrderedCollection new. - path add: e. - [ e attributes includesKey: #parent ] whileTrue: [ - e := e attributes at: #parent. - (e isNil) ifTrue: [ ^ path ]. - path add: e. ]. - ^ path. -] - -{ #category : #computing } -RTSBFadeInteraction >> restore: element [ - self sbpath: element put: nil. - self restoreElements: element view elements. -] - -{ #category : #computing } -RTSBFadeInteraction >> restoreElement: el [ - | color | - (el attributes includesKey: #scolor) ifTrue: [ - color := el attributes at: #scolor. - el trachelShape color: color. ] - -] - -{ #category : #computing } -RTSBFadeInteraction >> restoreElements: elements [ - elements do: [ :e | self restoreElement: e ]. - -] - -{ #category : #computing } -RTSBFadeInteraction >> sbpath: element [ - | att | - att := element view elements first attributes. - ^ (att includesKey: #sbpath) ifTrue: [ att at: #sbpath ] ifFalse: [ nil ] - -] - -{ #category : #computing } -RTSBFadeInteraction >> sbpath: element put: path [ - element view elements first attributes at: #sbpath put: path. - -] - -{ #category : #computing } -RTSBFadeInteraction >> updateCanvas: element [ - element trachelShape canvas signalUpdate. -] diff --git a/src/Roassal2/RTSBFadeInteractionExamples.class.st b/src/Roassal2/RTSBFadeInteractionExamples.class.st deleted file mode 100644 index de84ed2fa..000000000 --- a/src/Roassal2/RTSBFadeInteractionExamples.class.st +++ /dev/null @@ -1,80 +0,0 @@ -" -Just a class for examples -" -Class { - #name : #RTSBFadeInteractionExamples, - #superclass : #RTObject, - #category : #'Roassal2-Builder-Sunburst' -} - -{ #category : #examples } -RTSBFadeInteractionExamples >> example01 [ - - " - self new example01 - " - | b | - b := RTSunburstBuilder new. - - "This should be called before the explore method" - b interaction addInteraction: RTSBFadeInteraction new. - - b radialSpacing: 5. - b angularSpacing: 1. - - b color: [ :cls | cls subclasses notEmpty - ifTrue: [ Color orange ] - ifFalse: [ Color red ] ]. - - b explore: RTObject using: #subclasses. - ^ b -] - -{ #category : #examples } -RTSBFadeInteractionExamples >> example02 [ - - " - self new example02 - " - | b | - b := RTSunburstBuilder new. - b interaction popupText: #yourself backgroundColor: Color white. - b radialSpacing: 5. - b angularSpacing: 1. - - b color: [ :cls | cls subclasses notEmpty - ifTrue: [ Color orange ] - ifFalse: [ Color red ] ]. - - b explore: RTObject using: #subclasses. - b view @ RTDraggableView. - "This should'nt work" - b interaction addInteraction: (RTSBFadeInteraction new). - - ^ b -] - -{ #category : #examples } -RTSBFadeInteractionExamples >> example03 [ - - " - self new example03 - " - | b | - b := RTSunburstBuilder new. - - b radialSpacing: 5. - b angularSpacing: 1. - - b shape current - color: [ :cls | cls subclasses notEmpty ifTrue: [ Color orange ] ifFalse: [ Color red ] ]. - - b interaction addInteraction: (RTSBFadeInteraction action: [:cls | - cls ifNotNil: [ Transcript show: cls name; cr.]] ). - - b explore: RTObject using: #subclasses. - b view @ RTDraggableView. - - b build. - ^ b view -] diff --git a/src/Roassal2/RTSVGAbstractLine.class.st b/src/Roassal2/RTSVGAbstractLine.class.st deleted file mode 100644 index 43ce7bc9d..000000000 --- a/src/Roassal2/RTSVGAbstractLine.class.st +++ /dev/null @@ -1,46 +0,0 @@ -" -A RTSVGAbstractLine refers to the common interface for both regular SVG lines and bezier lines (as paths). - -The decoration refers to the Maker of the Line. -" -Class { - #name : #RTSVGAbstractLine, - #superclass : #RTSVGEntity, - #instVars : [ - 'decoration' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #adding } -RTSVGAbstractLine >> addMarker: stream [ - stream - nextPutAll: 'marker-end = "url(#marker' , (self getDecorationId: self decoration) , ')" ' -] - -{ #category : #accessing } -RTSVGAbstractLine >> decoration [ - ^ decoration -] - -{ #category : #accessing } -RTSVGAbstractLine >> decoration: anObject [ - decoration := anObject -] - -{ #category : #utils } -RTSVGAbstractLine >> getDecorationId: aLineDecorationShape [ - |t w c s lw| - t := aLineDecorationShape class name. - w := aLineDecorationShape mySize. - c := aLineDecorationShape color. - s := aLineDecorationShape strokePaint. - lw := aLineDecorationShape width. - ^(t asString, w asString, ((c red * 256) + (s red * 256)) rounded asString, ((c green * 256) + (s green * 256)) rounded asString, ((c blue * 256) + (s blue * 256)) rounded asString, lw asString) - -] - -{ #category : #accessing } -RTSVGAbstractLine >> id [ - ^ id -] diff --git a/src/Roassal2/RTSVGAbstractMarker.class.st b/src/Roassal2/RTSVGAbstractMarker.class.st deleted file mode 100644 index 815708b8c..000000000 --- a/src/Roassal2/RTSVGAbstractMarker.class.st +++ /dev/null @@ -1,117 +0,0 @@ -" -A RTSVGAbstractMarker represents the SVG marker, set on a Line. - - - -" -Class { - #name : #RTSVGAbstractMarker, - #superclass : #RTSVGEntity, - #instVars : [ - 'xExtent', - 'yExtent', - 'size' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #adding } -RTSVGAbstractMarker >> addMarkerOptions: stream [ - self addViewBox: stream. - self addRefPosition: stream. - self addSize: stream. - self addOrientation: stream -] - -{ #category : #adding } -RTSVGAbstractMarker >> addOn: stream using: aSVGVisitor [ - self openDef: stream. - self addMarkerOptions: stream. - self closeDefWithContent: stream. - self openInnerDef: stream. - self addPath: stream. - self startStyle: stream. - self addFillColor: stream. - self addStrokeColor: stream. - self addStrokeWidth: stream. - self closeTag: stream. - self closeDef: stream. - self closeFullDef: stream. -] - -{ #category : #adding } -RTSVGAbstractMarker >> addOrientation: stream [ - stream nextPutAll: 'orient = "auto"' , String cr -] - -{ #category : #adding } -RTSVGAbstractMarker >> addPath: stream [ - self subclassResponsibility -] - -{ #category : #adding } -RTSVGAbstractMarker >> addRefPosition: stream [ - stream nextPutAll: ('refX = "<1p>" refY = "<2p>" ' expandMacrosWith: self xExtent with: (self yExtent / 2) rounded) -] - -{ #category : #adding } -RTSVGAbstractMarker >> addSize: stream [ - stream nextPutAll: ('markerWidth = "<1p>" markerHeight = "<1p>" ' expandMacrosWith: size) -] - -{ #category : #adding } -RTSVGAbstractMarker >> addViewBox: stream [ - stream nextPutAll: ('viewBox = "0 0 <1p> <2p>" ' expandMacrosWith: self xExtent with: self yExtent) -] - -{ #category : #accessing } -RTSVGAbstractMarker >> id [ - ^ id -] - -{ #category : #accessing } -RTSVGAbstractMarker >> id: aid fillColor: aColor borderColor: anotherColor width: aNumber size: anotherNumber [ - self id: aid. - self fillColor: aColor. - self strokeColor: anotherColor. - self strokeWidth: aNumber. - self size: anotherNumber -] - -{ #category : #initialization } -RTSVGAbstractMarker >> initialize [ - self type: 'marker'. - self label: 'marker'. - xExtent := 10. - yExtent := 10. -] - -{ #category : #adding } -RTSVGAbstractMarker >> openInnerDef: stream [ - stream nextPutAll: '> size: anObject [ - size := anObject -] - -{ #category : #accessing } -RTSVGAbstractMarker >> xExtent [ - ^ xExtent -] - -{ #category : #accessing } -RTSVGAbstractMarker >> xExtent: anObject [ - xExtent := anObject -] - -{ #category : #accessing } -RTSVGAbstractMarker >> yExtent [ - ^ yExtent -] - -{ #category : #accessing } -RTSVGAbstractMarker >> yExtent: anObject [ - yExtent := anObject -] diff --git a/src/Roassal2/RTSVGArc.class.st b/src/Roassal2/RTSVGArc.class.st deleted file mode 100644 index cd8192269..000000000 --- a/src/Roassal2/RTSVGArc.class.st +++ /dev/null @@ -1,151 +0,0 @@ -" -A RTSVGArc is represents the SVG path for a radial arc, as in Roassal. - -" -Class { - #name : #RTSVGArc, - #superclass : #RTSVGEntity, - #instVars : [ - 'center', - 'innerRadius', - 'outterRadius', - 'alphaAngle', - 'betaAngle' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #adding } -RTSVGArc >> addOn: stream using: aSVGVisitor [ - aSVGVisitor names at: self element put: self id. - self openDef: stream. - self addPath: stream. - self startStyle: stream. - self addFillColor: stream. - self closeTag: stream. - self startClass: stream. - self closeTag: stream. - self addExternalInteractions: aSVGVisitor. - self closeDef: stream. - - -] - -{ #category : #adding } -RTSVGArc >> addPath: stream [ - | aAngle bAngle xAngle i e xcos xsin acos asin bcos bsin c b| - aAngle := self alphaAngle degreesToRadians. - bAngle := self betaAngle degreesToRadians. - i := self innerRadius. - e := self outterRadius. - xAngle := (aAngle + bAngle) /2. - xcos := xAngle cos. - xsin := xAngle sin negated. - acos := aAngle cos. - asin := aAngle sin negated. - bcos := bAngle cos. - bsin := bAngle sin negated. - - c := self center. - b := [ :a | a asFloat asString ]. - stream - nextPutAll: 'd="M ',(b value: i*acos+c x),' ',(b value: i*asin + c y); - nextPutAll: ' L ',(b value: e*acos+c x),' ',(b value: e*asin+c y); - nextPutAll: ' A ',(b value: e),' ',(b value: e), ' 0 0 0 ', (b value: e*xcos+c x),' ',(b value: e*xsin+c y); - nextPutAll: ' A ',(b value: e),' ',(b value: e), ' 0 0 0 ', (b value: e*bcos+c x),' ',(b value: e*bsin+c y); - nextPutAll: ' L ',(b value: i * bcos+c x),' ',(b value: i*bsin + c y); - nextPutAll: ' A ',(b value: i),' ',(b value: i), ' 0 0 1 ', (b value: i*xcos+c x),' ',(b value: i*xsin+c y); - nextPutAll: ' A ',(b value: i+c x),' ',(b value: i+c y), ' 0 0 1 ', (b value: i*acos+c x),' ',(b value: i*asin+c y); - nextPutAll: ' Z" '. -] - -{ #category : #accessing } -RTSVGArc >> alphaAngle [ - ^ alphaAngle -] - -{ #category : #accessing } -RTSVGArc >> alphaAngle: anObject [ - alphaAngle := anObject -] - -{ #category : #accessing } -RTSVGArc >> betaAngle [ - ^ betaAngle -] - -{ #category : #accessing } -RTSVGArc >> betaAngle: anObject [ - betaAngle := anObject -] - -{ #category : #accessing } -RTSVGArc >> center [ - ^ center -] - -{ #category : #accessing } -RTSVGArc >> center: anObject [ - center := anObject -] - -{ #category : #accessing } -RTSVGArc >> element: anElement center: aPoint r1: iRadius r2: oRadius aAngle: aAngle bAngle: bAngle color: aColor [ - self element: anElement. - self center: aPoint. - self innerRadius: iRadius. - self outterRadius: oRadius. - self alphaAngle: aAngle. - self betaAngle: bAngle. - self fillColor: aColor. -] - -{ #category : #utils } -RTSVGArc >> getPointFrom: aCenter angle: anAngle radius: aNumber [ - |x y| - x := (aCenter x + (anAngle cos * aNumber)) rounded. - y := (aCenter y + (anAngle sin * aNumber)) rounded. - ^ x@y -] - -{ #category : #initialization } -RTSVGArc >> initialize [ - self type: 'path'. - self label: 'arc' -] - -{ #category : #accessing } -RTSVGArc >> innerRadius [ - ^ innerRadius -] - -{ #category : #accessing } -RTSVGArc >> innerRadius: anObject [ - innerRadius := anObject -] - -{ #category : #utils } -RTSVGArc >> makePositive: anAngle [ - | result | - anAngle < 0 - ifTrue: [ result := anAngle + 360 ] - ifFalse: [ result := anAngle ]. - ^ result -] - -{ #category : #accessing } -RTSVGArc >> outterRadius [ - ^ outterRadius -] - -{ #category : #accessing } -RTSVGArc >> outterRadius: anObject [ - outterRadius := anObject -] - -{ #category : #utils } -RTSVGArc >> toRadian: anAngle [ - | result | - result := Float pi * anAngle / 180. - ^ result -] diff --git a/src/Roassal2/RTSVGArrowHeadMarker.class.st b/src/Roassal2/RTSVGArrowHeadMarker.class.st deleted file mode 100644 index 293093c6c..000000000 --- a/src/Roassal2/RTSVGArrowHeadMarker.class.st +++ /dev/null @@ -1,15 +0,0 @@ -" -A RTSVGArrowHeadMarker is an arrow-head marker. - -" -Class { - #name : #RTSVGArrowHeadMarker, - #superclass : #RTSVGAbstractMarker, - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #adding } -RTSVGArrowHeadMarker >> addPath: stream [ - stream - nextPutAll: (' d="M 0 0 L <1p> <2p> L 0 <1p> z" ' expandMacrosWith: xExtent with: ((yExtent/2) rounded)). -] diff --git a/src/Roassal2/RTSVGArrowMarker.class.st b/src/Roassal2/RTSVGArrowMarker.class.st deleted file mode 100644 index 873e45e3c..000000000 --- a/src/Roassal2/RTSVGArrowMarker.class.st +++ /dev/null @@ -1,15 +0,0 @@ -" -A RTSVGArrowMarker is an arrow (open figure) marker. - -" -Class { - #name : #RTSVGArrowMarker, - #superclass : #RTSVGAbstractMarker, - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #adding } -RTSVGArrowMarker >> addPath: stream [ - stream - nextPutAll: (' d="M 0 0 L <1p> <2p> L 0 <1p>" ' expandMacrosWith: xExtent with: ((yExtent/2) rounded)). -] diff --git a/src/Roassal2/RTSVGBezierLine.class.st b/src/Roassal2/RTSVGBezierLine.class.st deleted file mode 100644 index e7f933f96..000000000 --- a/src/Roassal2/RTSVGBezierLine.class.st +++ /dev/null @@ -1,105 +0,0 @@ -" -A RTSVGBezierLine is represents the SVG path of a bezier line, as defined in Roassal. -" -Class { - #name : #RTSVGBezierLine, - #superclass : #RTSVGAbstractLine, - #instVars : [ - 'points' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #adding } -RTSVGBezierLine >> addCurves: stream with: visitor [ - | p1 p2 | - p1 := points first. - stream - nextPutAll: 'd="M'; - nextPutAll: (visitor number: p1 x); - nextPutAll: ','; - nextPutAll: (visitor number: p1 y). - 2 to: points size - 2 do: [ :i | - p1 := points at: i. - p2 := (p1 + (points at: i + 1)) / 2. - stream - nextPutAll: 'Q'; - nextPutAll: (visitor number: p1 x); - nextPutAll: ','; - nextPutAll: (visitor number: p1 y); - nextPutAll: ' '; - nextPutAll: (visitor number: p2 x); - nextPutAll: ','; - nextPutAll: (visitor number: p2 y) ]. - p1 := points at: points size - 1. - p2 := points last. - stream - nextPutAll: 'Q'; - nextPutAll: (visitor number: p1 x); - nextPutAll: ','; - nextPutAll: (visitor number: p1 y); - nextPutAll: ' '; - nextPutAll: (visitor number: p2 x); - nextPutAll: ','; - nextPutAll: (visitor number: p2 y); - nextPutAll: '" ' -] - -{ #category : #adding } -RTSVGBezierLine >> addOn: stream using: aSVGVisitor [ - | from to shape el | - shape := self element. - el := shape element. - from := aSVGVisitor names at: el from trachelShape. - to := aSVGVisitor names at: el to trachelShape. - self id: from , '_' , to. - self openDef: stream. - self addPath: stream with: aSVGVisitor. - self startStyle: stream. - self addFillColor: stream. - self addStrokeColor: stream. - self addStrokeOpacity: stream. - self addStrokeWidth: stream. - self closeTag: stream. - self decoration ifNotNil: [ self addMarker: stream ]. - self startClass: stream. - self closeTag: stream. - self addExternalInteractions: aSVGVisitor. - self closeDef: stream. -] - -{ #category : #adding } -RTSVGBezierLine >> addPath: stream with: visitor [ - stream nextPutAll: 'name="bezier[]" '. - self addCurves: stream with: visitor -] - -{ #category : #accessing } -RTSVGBezierLine >> element: anElement points: somePoints width: anInteger color: aColor [ - self element: anElement. - self points: somePoints. - self strokeWidth: anInteger. - self strokeColor: aColor. -] - -{ #category : #accessing } -RTSVGBezierLine >> element: anElement points: somePoints width: anInteger color: aColor decoration: aLineDecoration [ - self element: anElement points: somePoints width: anInteger color: aColor. - self decoration: aLineDecoration -] - -{ #category : #initialization } -RTSVGBezierLine >> initialize [ - self type: 'path'. - self label: 'bezier' -] - -{ #category : #accessing } -RTSVGBezierLine >> points [ - ^ points -] - -{ #category : #accessing } -RTSVGBezierLine >> points: anObject [ - points := anObject -] diff --git a/src/Roassal2/RTSVGBitmap.class.st b/src/Roassal2/RTSVGBitmap.class.st deleted file mode 100644 index 85a03fb71..000000000 --- a/src/Roassal2/RTSVGBitmap.class.st +++ /dev/null @@ -1,73 +0,0 @@ -" -NOT WORKING, REFRAIN FROM USAGE -" -Class { - #name : #RTSVGBitmap, - #superclass : #RTSVGEntity, - #instVars : [ - 'form', - 'box' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #adding } -RTSVGBitmap >> addForm: stream [ - stream - nextPutAll: ' xlink:href="data:image/png;base64,',form,'" ' - -] - -{ #category : #adding } -RTSVGBitmap >> addOn: stream using: aSVGVisitor [ - aSVGVisitor names at: self element put: self id. - self openDef: stream. - self addPosition: stream. - self addWidth: (self box width rounded) height: (self box height rounded) into: stream. - self addForm: stream. - self startClass: stream. - self closeTag: stream. - self addExternalInteractions: aSVGVisitor. - self closeDef: stream. - -] - -{ #category : #adding } -RTSVGBitmap >> addPosition: stream [ - stream - nextPutAll: - ('x="<1p>" y="<2p>" ' expandMacrosWith: self box topLeft x rounded with: self box topLeft y rounded). -] - -{ #category : #accessing } -RTSVGBitmap >> box [ - ^ box -] - -{ #category : #accessing } -RTSVGBitmap >> box: anObject [ - box := anObject -] - -{ #category : #accessing } -RTSVGBitmap >> element: anElement form: aForm box: aRectangle [ - self element: anElement. - self form: aForm. - self box. aRectangle. -] - -{ #category : #accessing } -RTSVGBitmap >> form [ - ^ form -] - -{ #category : #accessing } -RTSVGBitmap >> form: anObject [ - form := anObject -] - -{ #category : #initialization } -RTSVGBitmap >> initialize [ - self type: 'image'. - self label: 'bitmap' -] diff --git a/src/Roassal2/RTSVGBoxedTextPopup.class.st b/src/Roassal2/RTSVGBoxedTextPopup.class.st deleted file mode 100644 index 1b594a94c..000000000 --- a/src/Roassal2/RTSVGBoxedTextPopup.class.st +++ /dev/null @@ -1,72 +0,0 @@ -" -A RTSVGBoxedTextPopup is a text popup, contained in a square box. - -This boxing, in SVG, supports many features, not included in this class. - - -" -Class { - #name : #RTSVGBoxedTextPopup, - #superclass : #RTSVGTextPopup, - #instVars : [ - 'backgroundColor', - 'borderColor' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #adding } -RTSVGBoxedTextPopup >> addEventHandlers: aStream id: aString element: aRTElement center: aPoint [ - |rText xOverflow yOverflow x y rectangle converter| - rText := (self text value: aRTElement model) asString. - x := aPoint x. - y := aPoint y. - xOverflow := aPoint x - bounds width + ((TRPlatform current fontFamilyName: self font size: self fontSize) widthOfString: rText). - yOverflow := aPoint y - bounds height + self fontSize. - xOverflow >= 0 ifTrue: [ x:= x - xOverflow ]. - yOverflow >= 0 ifTrue: [ y:= y - yOverflow ]. - rectangle := TRLabelShape new text: rText; encompassingRectangle. - converter := RTSVGStringConverter new. - aStream - nextPutAll: ''; - nextPutAll: String cr,''; - nextPutAll: String cr,'',(converter convertString: rText),''; - nextPutAll: String cr, (self mouseAction: aString), '' -] - -{ #category : #accessing } -RTSVGBoxedTextPopup >> backgroundColor [ - ^ backgroundColor -] - -{ #category : #accessing } -RTSVGBoxedTextPopup >> backgroundColor: anObject [ - backgroundColor := anObject -] - -{ #category : #accessing } -RTSVGBoxedTextPopup >> borderColor [ - ^ borderColor -] - -{ #category : #accessing } -RTSVGBoxedTextPopup >> borderColor: anObject [ - borderColor := anObject -] - -{ #category : #configuration } -RTSVGBoxedTextPopup >> defaultBackgroundColor [ - ^ Color veryLightGray. -] - -{ #category : #configuration } -RTSVGBoxedTextPopup >> defaultBorderColor [ - ^ Color black. -] - -{ #category : #initialization } -RTSVGBoxedTextPopup >> initialize [ - super initialize. - self backgroundColor: self defaultBackgroundColor. - self borderColor: self defaultBorderColor. -] diff --git a/src/Roassal2/RTSVGButton.class.st b/src/Roassal2/RTSVGButton.class.st deleted file mode 100644 index e4c6ac8c8..000000000 --- a/src/Roassal2/RTSVGButton.class.st +++ /dev/null @@ -1,140 +0,0 @@ -" -A RTSVGButton represents buttons that changes the elements attributes. Since is defined just like any other interaction, is treated as it. -" -Class { - #name : #RTSVGButton, - #superclass : #RTSVGInteraction, - #instVars : [ - 'name', - 'id', - 'val' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #'as yet unclassified' } -RTSVGButton class >> on: anExporter name: aName targets: aRTShape [ - | generator | - generator := [ :e | self new target: e; name: aName; yourself ]. - self on: anExporter targets: aRTShape generator: generator -] - -{ #category : #'as yet unclassified' } -RTSVGButton class >> on: anExporter name: aName values: values targets: aRTShape [ - | generator | - generator := [ :e | self new target: e; name: aName; val: values; yourself ]. - self on: anExporter targets: aRTShape generator: generator -] - -{ #category : #'button effect' } -RTSVGButton >> addContribution: aStream [ - aStream nextPutAll: self fixedName , '_data["',self targetNameAttribute,self target identityHash asString,'"] = "',(self dataAsString: (self val rtValue: self target model)),'";', String cr. -] - -{ #category : #adding } -RTSVGButton >> addEventHandlers: aStream id: aString element: element center: aNumber [ - aStream - nextPutAll: self fixedName,' ' -] - -{ #category : #adding } -RTSVGButton >> addFunctions: aStream [ - aStream - nextPutAll: - ' - function button_' , self fixedName - , - '(evt) { - var elements = document.getElementsByClassName("' , self fixedName - , - '"); - var color; - for (e in elements) { - value = ' , self fixedName - , - '_data[elements[e].id]; - ' , self changeFunction - , - ' = value; - } - } - var ' , self fixedName , '_data = { };'. - self addContribution: aStream. -] - -{ #category : #adding } -RTSVGButton >> addGlobalHandlers: aStream [ - "do nothing" -] - -{ #category : #adding } -RTSVGButton >> addSelf: stream startingPoint: startingPoint [ - |box width height converter| - box := TRLabelShape new text: self fixedName; encompassingRectangle. - width := box width. - height := box height. - converter := RTSVGStringConverter new. - stream - nextPutAll: ' - ',(converter convertString: self getName),' - -', String cr. - ^(startingPoint x + width + 5)@(startingPoint y) -] - -{ #category : #'button effect' } -RTSVGButton >> changeFunction [ - | attr | - attr := self targetColorAttribute. - ^'if (elements[e].style != null) - elements[e].style["',attr,'"]' -] - -{ #category : #'button effect' } -RTSVGButton >> dataAsString: color [ - ^color asHTMLColor -] - -{ #category : #accessing } -RTSVGButton >> fixedName [ - |result| - result := name copy. - ^result replaceAll: $ with: $_ -] - -{ #category : #accessing } -RTSVGButton >> getName [ - |result| - result := name copy. - ^result replaceAll: $_ with: $ . -] - -{ #category : #initialization } -RTSVGButton >> initialize [ - super initialize. - contained := true. - external := false. - self name: ''. - self type: 'button'. -] - -{ #category : #accessing } -RTSVGButton >> name: anObject [ - name := anObject -] - -{ #category : #accessing } -RTSVGButton >> type [ - ^ type,name -] - -{ #category : #accessing } -RTSVGButton >> val [ - ^ val -] - -{ #category : #accessing } -RTSVGButton >> val: anObject [ - val := anObject -] diff --git a/src/Roassal2/RTSVGDiamondMarker.class.st b/src/Roassal2/RTSVGDiamondMarker.class.st deleted file mode 100644 index d6cd52dfa..000000000 --- a/src/Roassal2/RTSVGDiamondMarker.class.st +++ /dev/null @@ -1,20 +0,0 @@ -" -A RTSVGDiamondMarker is a diamond shape marker. - -" -Class { - #name : #RTSVGDiamondMarker, - #superclass : #RTSVGAbstractMarker, - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #adding } -RTSVGDiamondMarker >> addPath: stream [ - stream - nextPutAll: (' d="M 0 0 L <1p> <2p> L 0 <3p> L -<1p> <2p> z" ' expandMacrosWith: xExtent with: ((yExtent/2) rounded) with: yExtent). -] - -{ #category : #adding } -RTSVGDiamondMarker >> addSize: stream [ - stream nextPutAll: ('markerWidth = "<1p>" markerHeight = "<2p>" ' expandMacrosWith: (3 *size) with: size) -] diff --git a/src/Roassal2/RTSVGDragAndDrop.class.st b/src/Roassal2/RTSVGDragAndDrop.class.st deleted file mode 100644 index e1df82a66..000000000 --- a/src/Roassal2/RTSVGDragAndDrop.class.st +++ /dev/null @@ -1,150 +0,0 @@ -" -A RTSVGDragAndDrop is the Drag&Drop of SVG elements. - -Drag&Drop of edges is NOT supported, but edges connected to dragged elements will move accordingly - -" -Class { - #name : #RTSVGDragAndDrop, - #superclass : #RTSVGInteraction, - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #adding } -RTSVGDragAndDrop >> addEventHandlers: aStream id: aString element: element center: aNumber [ - aStream - nextPutAll: 'dragdrop ' -] - -{ #category : #adding } -RTSVGDragAndDrop >> addFunctions: aStream [ - aStream - nextPutAll: ' var SVGDocument = null; - var SVGRoot = null; - var TrueCoords = null; - var GrabPoint = null; - var BackDrop = null; - var DragTarget = null; - var Wrapper = null; - function GADInit(evt) - { - SVGDocument = evt.target.ownerDocument; - SVGRoot = evt.target; - TrueCoords = SVGRoot.createSVGPoint(); - GrabPoint = SVGRoot.createSVGPoint(); - BackDrop = SVGDocument.getElementById("BackDrop"); - Wrapper = SVGDocument.getElementById("Wrapper"); - } - function Grab(evt) - { - if (!evt.target.classList.contains("dragdrop")) - return; - var targetElement = evt.target; - if ( BackDrop != targetElement ) - { - DragTarget = targetElement; - Wrapper.appendChild(DragTarget); - DragTarget.parentNode.appendChild( DragTarget ); - DragTarget.setAttributeNS(null, ''pointer-events'', ''none''); - var transMatrix = DragTarget.getCTM(); - GrabPoint.x = TrueCoords.x - Number(transMatrix.e); - GrabPoint.y = TrueCoords.y - Number(transMatrix.f); - } - }; - - function Drag(evt) - { - GetTrueCoords(evt); - if (DragTarget) - { - var newX = TrueCoords.x - GrabPoint.x; - var newY = TrueCoords.y - GrabPoint.y; - DragTarget.setAttributeNS(null, ''transform'', ''translate('' + newX + '','' + newY + '')''); - var pop = document.getElementById(DragTarget.id + "pop"); - pop.setAttributeNS(null, ''transform'', ''translate('' + newX + '','' + newY + '')''); - var lines = document.getElementsByTagName("line"); - var beziers = document.getElementsByName("bezier[]"); - var match = DragTarget.id.match(/\d+/); - var idNum = parseInt(match[0], 10); - var bb = Wrapper.getBBox(); - var centerX = bb.x + (bb.width / 2); - var centerY = bb.y + (bb.height / 2); - for(var i = 0; i < lines.length; i++) - { - var p1 = lines[i].id.substring(4,lines[i].id.indexOf("_")); - var p2 = lines[i].id.substring(lines[i].id.indexOf("_")+1); - if (p1 == "" + idNum) - { - lines[i].setAttributeNS(null, ''x1'', centerX); - lines[i].setAttributeNS(null, ''y1'', centerY); - } - else if (p2 == "" + idNum) - { - lines[i].setAttributeNS(null, ''x2'', centerX); - lines[i].setAttributeNS(null, ''y2'', centerY); - } - } - for(var j =0; j < beziers.length; j++) - { - var p1 = beziers[j].id.substring(6,beziers[j].id.indexOf("_")); - var p2 = beziers[j].id.substring(beziers[j].id.indexOf("_")+1); - var split = beziers[j].getAttribute(''d'').split(" "); - if (p1 == "" + idNum) - { - split.shift(); - beziers[j].setAttributeNS(null, ''d'', "M"+centerX+","+centerY+" "+split.join(" ")); - } - else if (p2 == "" + idNum) - { - var pref = ""; - if (split[split.length-1].charAt(0) == ''L'') - pref = "L"; - split.pop(); - beziers[j].setAttributeNS(null, ''d'', split.join(" ")+" "+pref+centerX+","+centerY); - } - } - } - }; - - function Drop(evt) - { - if ( DragTarget ) - { - var targetElement = evt.target; - DragTarget.setAttributeNS(null, ''pointer-events'', ''all''); - Wrapper.removeChild(DragTarget); - Wrapper.parentNode.appendChild(DragTarget); - DragTarget = null; - } - }; - - function GetTrueCoords(evt) - { - if (SVGRoot == null) - return; - var newScale = SVGRoot.currentScale; - var translation = SVGRoot.currentTranslate; - TrueCoords.x = (evt.clientX - translation.x)/newScale; - TrueCoords.y = (evt.clientY - translation.y)/newScale; - }; -' -] - -{ #category : #adding } -RTSVGDragAndDrop >> addGlobalHandlers: aStream [ - aStream - nextPutAll: ' - onload="GADInit(evt)" - onmousedown="Grab(evt)" - onmousemove="Drag(evt)" - onmouseup="Drop(evt)" -' -] - -{ #category : #initialization } -RTSVGDragAndDrop >> initialize [ - super initialize. - contained := true. - external := false. - self type: 'draganddrop'. -] diff --git a/src/Roassal2/RTSVGElementPopup.class.st b/src/Roassal2/RTSVGElementPopup.class.st deleted file mode 100644 index 2de0978cc..000000000 --- a/src/Roassal2/RTSVGElementPopup.class.st +++ /dev/null @@ -1,42 +0,0 @@ -" -A RTSVGElementPopup is a single element popup. - -The element may be any translatable Roassal Shape. -" -Class { - #name : #RTSVGElementPopup, - #superclass : #RTSVGPopup, - #instVars : [ - 'element' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #adding } -RTSVGElementPopup >> addEventHandlers: aStream id: aString element: aRTElement center: aNumber [ - | visitor myElement| - myElement := (self element value: aRTElement ). - aStream nextPutAll: '', String cr. - visitor := RTSVGVisitor new stream: aStream; center: aNumber; yourself. - visitor canvas: myElement encompassingRectangle. - visitor visitElement: myElement. - aStream - nextPutAll: (self mouseAction: aString); - nextPutAll: '' -] - -{ #category : #accessing } -RTSVGElementPopup >> element [ - ^ element -] - -{ #category : #accessing } -RTSVGElementPopup >> element: anObject [ - element := anObject -] - -{ #category : #initialization } -RTSVGElementPopup >> initialize [ - super initialize. - element := [ :m | (RTElement on: m) + (RTBox new color: Color blue; yourself)] -] diff --git a/src/Roassal2/RTSVGEntity.class.st b/src/Roassal2/RTSVGEntity.class.st deleted file mode 100644 index 14ca348b6..000000000 --- a/src/Roassal2/RTSVGEntity.class.st +++ /dev/null @@ -1,289 +0,0 @@ -" -A RTSVGEntity represents the SVG entity, in the SVG format. - -The id is used to differentiate elements for the interactions. - -The type represents the SVG element type, such as ""text"", ""p"", ""circle"", etc.. - -The label represents the name used in the final SVG to differentiate group of elements. It also refers to the corresponding Roassal entity. -" -Class { - #name : #RTSVGEntity, - #superclass : #RTObject, - #instVars : [ - 'id', - 'element', - 'type', - 'fillColor', - 'strokeColor', - 'strokeWidth', - 'label', - 'position', - 'hasAnchor' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #'adding-anchor' } -RTSVGEntity >> addAnchorOn: stream [ - | list interaction | - list := TRPlatform current validInteractionsOf: self element oklist: (Array with: #RTLinkView). - list isEmpty ifTrue: [ ^ self ]. - hasAnchor := true. - interaction := list first. - stream - nextPutAll: '> addContainedInteractions: aSVGVisitor [ - aSVGVisitor addContainedInteractions: (self label , self id) element: self element -] - -{ #category : #interactions } -RTSVGEntity >> addEmbeddingInteractions: aSVGVisitor [ - ^ aSVGVisitor addEmbeddingInteractions: (self label , self id) element: self element -] - -{ #category : #interactions } -RTSVGEntity >> addExternalInteractions: aSVGVisitor [ - | ide | - ide := 'pop' , self id. - aSVGVisitor addExternalInteractions: ide element: self element. - -] - -{ #category : #style } -RTSVGEntity >> addFillColor: stream [ - self fillColor = nil - ifTrue: [ - stream - nextPutAll: 'fill:none; ' - ] - ifFalse: [ - stream - nextPutAll: - ('fill:rgb(<1p>,<2p>,<3p>); ' - expandMacrosWith: (self fillColor red * 256) rounded - with: (self fillColor green * 256) rounded - with: (self fillColor blue * 256) rounded)] -] - -{ #category : #style } -RTSVGEntity >> addFillOpacity: stream [ - stream nextPutAll: ('fill-opacity:<1p>; ' expandMacrosWith: self fillColor alpha) -] - -{ #category : #adding } -RTSVGEntity >> addOn: aStream using: aSVGVisitor [ - self subclassResponsibility -] - -{ #category : #adding } -RTSVGEntity >> addPosition: stream [ - self subclassResponsibility -] - -{ #category : #transform } -RTSVGEntity >> addScale: scale into: stream [ - | s | - s := scale. - s isPoint ifFalse: [ s := s @ s ]. - stream - nextPutAll: 'scale('; - nextPutAll: s x asString; - nextPutAll: ','; - nextPutAll: s y asString; - nextPutAll: ')' -] - -{ #category : #adding } -RTSVGEntity >> addStringWithFont: aByteString fontSize: aSyze into: stream [ - | converter | - converter := RTSVGStringConverter new. - stream - nextPutAll: ''; - nextPutAll: (converter convertString: aByteString); - nextPutAll: '' -] - -{ #category : #adding } -RTSVGEntity >> addStringWithFont: aByteString into: stream [ - | converter | - converter := RTSVGStringConverter new. - stream - nextPutAll: ''; - nextPutAll: (converter convertString: aByteString); - nextPutAll: '' -] - -{ #category : #style } -RTSVGEntity >> addStrokeColor: stream [ - stream - nextPutAll: - ('stroke:rgb(<1p>,<2p>,<3p>); ' - expandMacrosWith: (self strokeColor red * 256) rounded - with: (self strokeColor green * 256) rounded - with: (self strokeColor blue * 256) rounded) -] - -{ #category : #style } -RTSVGEntity >> addStrokeOpacity: stream [ - stream nextPutAll: ('stroke-opacity:<1p>; ' expandMacrosWith: self strokeColor alpha) -] - -{ #category : #style } -RTSVGEntity >> addStrokeWidth: stream [ - stream nextPutAll: ('stroke-width:<1p>; ' expandMacrosWith: self strokeWidth) -] - -{ #category : #transform } -RTSVGEntity >> addTranslation: point into: stream [ - stream nextPutAll: ('translate(<1p>,<2p>) ' expandMacrosWith: point x rounded with: point y rounded) -] - -{ #category : #adding } -RTSVGEntity >> addWidth: x height: y into: stream [ - stream - nextPutAll: - ('width="<1p>" height="<2p>" ' expandMacrosWith: x with: y). -] - -{ #category : #'adding-anchor' } -RTSVGEntity >> closeAnchorOn: stream [ - hasAnchor ifFalse: [ ^ self ]. - stream - nextPutAll: ''. - -] - -{ #category : #adding } -RTSVGEntity >> closeDef: stream [ - stream nextPutAll: '/>' , String cr -] - -{ #category : #adding } -RTSVGEntity >> closeDefWithContent: stream [ - stream nextPutAll: '>' , String cr -] - -{ #category : #adding } -RTSVGEntity >> closeFullDef: stream [ - stream - nextPutAll: ''; - nextPutAll: String cr -] - -{ #category : #adding } -RTSVGEntity >> closeTag: stream [ - stream nextPutAll: '" ' -] - -{ #category : #accessing } -RTSVGEntity >> element [ - ^ element -] - -{ #category : #accessing } -RTSVGEntity >> element: anObject [ - element := anObject -] - -{ #category : #accessing } -RTSVGEntity >> fillColor [ - ^ fillColor -] - -{ #category : #accessing } -RTSVGEntity >> fillColor: anObject [ - fillColor := anObject -] - -{ #category : #accessing } -RTSVGEntity >> id [ - id ifNil: [ id := element identityHash asString]. - ^ id -] - -{ #category : #accessing } -RTSVGEntity >> id: anObject [ - id := anObject -] - -{ #category : #initialization } -RTSVGEntity >> initialize [ - super initialize. - hasAnchor := false. -] - -{ #category : #accessing } -RTSVGEntity >> label [ - ^ label -] - -{ #category : #accessing } -RTSVGEntity >> label: anObject [ - label := anObject -] - -{ #category : #adding } -RTSVGEntity >> openDef: stream [ - stream nextPutAll: '<',self type,' id="',self label , self id , '" ' -] - -{ #category : #accessing } -RTSVGEntity >> position [ - ^ position -] - -{ #category : #accessing } -RTSVGEntity >> position: anObject [ - position := anObject -] - -{ #category : #adding } -RTSVGEntity >> startClass: stream [ - stream nextPutAll: 'class="' -] - -{ #category : #style } -RTSVGEntity >> startStyle: stream [ - stream nextPutAll: 'style="' -] - -{ #category : #transform } -RTSVGEntity >> startTransform: stream [ - stream nextPutAll: 'transform="' -] - -{ #category : #accessing } -RTSVGEntity >> strokeColor [ - ^ strokeColor -] - -{ #category : #accessing } -RTSVGEntity >> strokeColor: anObject [ - strokeColor := anObject -] - -{ #category : #accessing } -RTSVGEntity >> strokeWidth [ - ^ strokeWidth -] - -{ #category : #accessing } -RTSVGEntity >> strokeWidth: anObject [ - strokeWidth := anObject -] - -{ #category : #accessing } -RTSVGEntity >> type [ - ^ type -] - -{ #category : #accessing } -RTSVGEntity >> type: anObject [ - type := anObject -] diff --git a/src/Roassal2/RTSVGExample.class.st b/src/Roassal2/RTSVGExample.class.st deleted file mode 100644 index 18f9b02fc..000000000 --- a/src/Roassal2/RTSVGExample.class.st +++ /dev/null @@ -1,1093 +0,0 @@ -" -RTSVGExample new installTitle: 'Animated' - code: - ' - | view randInt rand | - rand := Random new. - randInt := [ :n | (rand next * n) asInteger ]. - view := RTView new. - RTSVGPath icons do: [ :icon | - |elem| - elem := (RTSVGPath new - path: (RTSVGPath perform: icon); - borderWidth: 0; - scale: 5; - fillColor: Color random) element. - elem @ RTDraggable. - view add: elem. - elem translateBy: (randInt value: 400) @ (randInt value: 400). - view addAnimation: (RTRotationMove angle: 100 during: (randInt value: 90) + 10 on: elem). - ]. - ^ view - ' -" -Class { - #name : #RTSVGExample, - #superclass : #RTAbstractExample, - #category : #'Roassal2-ExampleBrowser' -} - -{ #category : #basic } -RTSVGExample >> animated [ - - - - | view randInt rand | - rand := Random new. - randInt := [ :n | (rand next * n) asInteger ]. - view := RTView new. - RTSVGPath icons do: [ :icon | - |elem| - elem := (RTSVGPath new - path: (RTSVGPath perform: icon); - borderWidth: 0; - scale: 5; - fillColor: Color random) element. - elem @ RTDraggable. - view add: elem. - elem translateBy: (randInt value: 400) @ (randInt value: 400). - view addAnimation: (RTRotationMove angle: 100 during: (randInt value: 90) + 10 on: elem). - ]. - ^ view - -] - -{ #category : #icons } -RTSVGExample >> animatedIcon [ - ^ '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' -] - -{ #category : #basic } -RTSVGExample >> diamond [ - - - - | v s elements | - v := RTView new. - v @ RTDraggableView. - s := RTSVGPath new path: 'M342.906,153H170.301l-85.967,96.562L256,462l171.666-211.23L342.906,153z M181.634,256l52.171,123.905 - L133.688,256H181.634z M311.741,256L256,388.371L200.259,256H311.741z M208.055,238.833L256,190.887l47.945,47.946H208.055z - M330.367,256h48.801L277.895,380.626L330.367,256z M371.875,238.833h-43.654l-51.5-51.5h50.511L371.875,238.833z M185.69,187.333 - h49.589l-51.5,51.5h-43.922L185.69,187.333z M126.396,150.67l-42.062-42.062l24.274-24.274l40.653,40.653L126.396,150.67z - M238.834,118.667V50h34.332v68.667H238.834z M363.442,124.283l39.95-39.949l24.273,24.274l-41.676,41.676L363.442,124.283z'. - - s color: Color black. - elements := s elementsOn: (1 to: 40). - elements when: TRMouseEnter do: [ :evt | - evt shape color: Color red. - evt signalUpdate]. - v addAll: elements. - - RTGridLayout on: elements. - - ^ v -] - -{ #category : #icons } -RTSVGExample >> diamondIcon [ - ^ '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' -] - -{ #category : #basic } -RTSVGExample >> fibonacciSpiral [ - - - - | view elem | - view := RTView new. - elem := (RTSVGPath new - path: (RTSVGPath - goldenSpiral: 10 - start: 0@0 - side: 100 - direction: 1@ 1 - type: true); - fillColor: Color random; - scale: 2; - borderWidth: 0.5) element. - elem @ RTDraggable. - view add: elem. - - elem := (RTSVGPath new - path: (RTSVGPath - goldenSpiral: 10 - start: 0@0 - side: 100 - direction: -1@ 1 - type: true); - fillColor: Color random; - scale: 2; - borderWidth: 0.5) element. - elem @ RTDraggable. - view add: elem. - - elem := (RTSVGPath new - path: (RTSVGPath - goldenSpiral: 10 - start: 0@0 - side: 100 - direction: -1@ -1 - type: true); - fillColor: Color random; - scale: 2; - borderWidth: 0.5) element. - elem @ RTDraggable. - view add: elem. - - elem := (RTSVGPath new - path: (RTSVGPath - goldenSpiral: 10 - start: 0@0 - side: 100 - direction: 1@ -1 - type: true); - fillColor: Color random; - scale: 2; - borderWidth: 0.5) element. - elem @ RTDraggable. - view add: elem. - - view elements do: [ :e| - view addAnimation: (RTRotationMove angle: 300 during: 20 on: e) - ]. - - ^ view - - -] - -{ #category : #icons } -RTSVGExample >> fibonacciSpiralIcon [ - ^ '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 -HxBAs4ueZTTJAAAAAElFTkSuQmCC' -] - -{ #category : #basic } -RTSVGExample >> icon1 [ - - - - " - self new icon - " - | view element | - view := RTView new. - element := (RTSVGPath new - path: 'M22.121,24.438l-3.362-7.847c-0.329-0.769-0.599-2.081-0.599-2.917s0.513-1.521,1.14-1.521s1.141-0.513,1.141-1.14s-0.685-1.14-1.521-1.14h-6.84c-0.836,0-1.52,0.513-1.52,1.14s0.513,1.14,1.14,1.14s1.14,0.685,1.14,1.521s-0.269,2.148-0.599,2.917l-3.362,7.847C8.55,25.206,8.28,26.177,8.28,26.595s0.342,1.103,0.76,1.521s1.444,0.76,2.28,0.76h8.359c0.836,0,1.862-0.342,2.28-0.76s0.76-1.103,0.76-1.521S22.45,25.206,22.121,24.438zM16.582,7.625c0,0.599,0.484,1.083,1.083,1.083s1.083-0.484,1.083-1.083s-0.484-1.084-1.083-1.084S16.582,7.026,16.582,7.625zM13.667,7.792c0.276,0,0.5-0.224,0.5-0.5s-0.224-0.5-0.5-0.5s-0.5,0.224-0.5,0.5S13.391,7.792,13.667,7.792zM15.584,5.292c0.874,0,1.583-0.709,1.583-1.583c0-0.875-0.709-1.584-1.583-1.584C14.709,2.125,14,2.834,14,3.709C14,4.583,14.709,5.292,15.584,5.292z'; - borderWidth: 0; - scale: 8; - fillColor: Color black) element. - element @ RTDraggable. - element when: TRMouseEnter do: [ :evt | - evt shape color: Color red. - evt signalUpdate]. - view add: element. - ^ view -] - -{ #category : #icons } -RTSVGExample >> icon1Icon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAACoUlEQVR4XuXbT6tpURiA8TXw -J1MjJWMjMyVlIDIxMzdWGJOSfAVDZeoDKGYGfAVFik9gJGWg1OverXtup+4599jsba+1n6fW -nPPL2u9au6NuN346pfh/Aj4IPz4IH4QfH4QPwo8Pwgfhxwfhg/Djg/Djg/BB+PFB+CD8+CB8 -EH58ED4IPz4IPz4IH4QfH4QPwo8Pwgfhxwfhg/DjgzjRbDYTpdTNWsFgUA6Hg/BBvPwCfzA+ -Vjab5YPoBGItPoiHWdvUZ4x6vc7/hXjZ8XiUXC53R2k0GsJ/qPPjg/BBNGyxWEilUvlniyoU -CvftKxwOCx/kjU2nU4nFYvK/qWswGAgfxONSqdTfqet0OvFBdGg+n8v1euVvWfxgIK1WSyKR -iHx1Ov9ulctlWa/XwgdxuGazaQvC1OsUYz5prVbjg+iU9ZDOZDK2UQKBgFgPeT6IixWLxYdg -+GPvm7pcLj+CdDod/tj71g/+A0i/3+ePvXwQKMjn9+jfrXQ6zd+y3lWv1xM/jbrGg4RCoYdA -ttstf8pyu9Vq9fBZ5Kv3JXwQhyuVSrYOh/I7PoiLp3W7J/Vut8sHcSvrttfP91jGgTx7sTge -j/l3WU43Go2evu2Nx+N8EKeLRqMvXb/vdjvhg3gw6po+Ais/jromj8DKj6OuySOw9iDtdtsx -EBNGYOXXUdfUEVj5ddQ1dQTWGiSRSDgOovu7dkXarkx4m6gtyHK5FLdA8vk8/xdit/1+7xpI -tVrlgzxTMpl0BUXnaxStQc7n8/2fcpzEmEwm/Cnr1TabjVgP4lfWcDjk32Xx44PwQfjxQfgg -/PggfBB+fBB+fBA+CD8+CB+EHx+ED8KPD8IH4ccH4ccH4YPw44PwQfjxQfgg/PggfBB+fBB+ -fBA+CL+H+wX6dsn/L7VWKgAAAABJRU5ErkJggg==' -] - -{ #category : #basic } -RTSVGExample >> icon2 [ - - - - " - self new icon2 - " - | view element | - view := RTView new. - element := (RTSVGPath new - path: 'M29.02,11.754L8.416,9.473L7.16,4.716C7.071,4.389,6.772,4.158,6.433,4.158H3.341C3.114,3.866,2.775,3.667,2.377,3.667c-0.686,0-1.242,0.556-1.242,1.242c0,0.686,0.556,1.242,1.242,1.242c0.399,0,0.738-0.201,0.965-0.493h2.512l5.23,19.8c-0.548,0.589-0.891,1.373-0.891,2.242c0,1.821,1.473,3.293,3.293,3.293c1.82,0,3.294-1.472,3.297-3.293c0-0.257-0.036-0.504-0.093-0.743h5.533c-0.056,0.239-0.092,0.486-0.092,0.743c0,1.821,1.475,3.293,3.295,3.293s3.295-1.472,3.295-3.293c0-1.82-1.473-3.295-3.295-3.297c-0.951,0.001-1.801,0.409-2.402,1.053h-7.136c-0.601-0.644-1.451-1.052-2.402-1.053c-0.379,0-0.738,0.078-1.077,0.196l-0.181-0.685H26.81c1.157-0.027,2.138-0.83,2.391-1.959l1.574-7.799c0.028-0.145,0.041-0.282,0.039-0.414C30.823,12.733,30.051,11.86,29.02,11.754zM25.428,27.994c-0.163,0-0.295-0.132-0.297-0.295c0.002-0.165,0.134-0.297,0.297-0.297s0.295,0.132,0.297,0.297C25.723,27.862,25.591,27.994,25.428,27.994zM27.208,20.499l0.948-0.948l-0.318,1.578L27.208,20.499zM12.755,11.463l1.036,1.036l-1.292,1.292l-1.292-1.292l1.087-1.087L12.755,11.463zM17.253,11.961l0.538,0.538l-1.292,1.292l-1.292-1.292l0.688-0.688L17.253,11.961zM9.631,14.075l0.868-0.868l1.292,1.292l-1.292,1.292l-0.564-0.564L9.631,14.075zM9.335,12.956l-0.328-1.24L9.792,12.5L9.335,12.956zM21.791,16.499l-1.292,1.292l-1.292-1.292l1.292-1.292L21.791,16.499zM21.207,14.5l1.292-1.292l1.292,1.292l-1.292,1.292L21.207,14.5zM18.5,15.791l-1.293-1.292l1.292-1.292l1.292,1.292L18.5,15.791zM17.791,16.499L16.5,17.791l-1.292-1.292l1.292-1.292L17.791,16.499zM14.499,15.791l-1.292-1.292l1.292-1.292l1.292,1.292L14.499,15.791zM13.791,16.499l-1.292,1.291l-1.292-1.291l1.292-1.292L13.791,16.499zM10.499,17.207l1.292,1.292l-0.785,0.784l-0.54-2.044L10.499,17.207zM11.302,20.404l1.197-1.197l1.292,1.292L12.5,21.791l-1.131-1.13L11.302,20.404zM13.208,18.499l1.291-1.292l1.292,1.292L14.5,19.791L13.208,18.499zM16.5,19.207l1.292,1.292L16.5,21.79l-1.292-1.291L16.5,19.207zM17.208,18.499l1.292-1.292l1.291,1.292L18.5,19.79L17.208,18.499zM20.499,19.207l1.292,1.292L20.5,21.79l-1.292-1.292L20.499,19.207zM21.207,18.499l1.292-1.292l1.292,1.292l-1.292,1.292L21.207,18.499zM23.207,16.499l1.292-1.292l1.292,1.292l-1.292,1.292L23.207,16.499zM25.207,14.499l1.292-1.292L27.79,14.5l-1.291,1.292L25.207,14.499zM24.499,13.792l-1.156-1.156l2.082,0.23L24.499,13.792zM21.791,12.5l-1.292,1.292L19.207,12.5l0.29-0.29l2.253,0.25L21.791,12.5zM14.5,11.791l-0.152-0.152l0.273,0.03L14.5,11.791zM10.5,11.792l-0.65-0.65l1.171,0.129L10.5,11.792zM14.5,21.207l1.205,1.205h-2.409L14.5,21.207zM18.499,21.207l1.206,1.206h-2.412L18.499,21.207zM22.499,21.207l1.208,1.207l-2.414-0.001L22.499,21.207zM23.207,20.499l1.292-1.292l1.292,1.292l-1.292,1.292L23.207,20.499zM25.207,18.499l1.292-1.291l1.291,1.291l-1.291,1.292L25.207,18.499zM28.499,17.791l-1.291-1.292l1.291-1.291l0.444,0.444l-0.429,2.124L28.499,17.791zM29.001,13.289l-0.502,0.502l-0.658-0.658l1.016,0.112C28.911,13.253,28.956,13.271,29.001,13.289zM13.487,27.994c-0.161,0-0.295-0.132-0.295-0.295c0-0.165,0.134-0.297,0.295-0.297c0.163,0,0.296,0.132,0.296,0.297C13.783,27.862,13.651,27.994,13.487,27.994zM26.81,22.414h-1.517l1.207-1.207l0.93,0.93C27.243,22.306,27.007,22.428,26.81,22.414z'; - borderWidth: 0; - scale: 8; - fillColor: Color black) element. - element @ RTDraggable. - view add: element. - ^ view -] - -{ #category : #icons } -RTSVGExample >> icon2Icon [ - ^ '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' -] - -{ #category : #basic } -RTSVGExample >> icon3 [ - - - " - self new icon3 - " - | view element | - view := RTView new. - element := (RTSVGPath new - path: 'M3.739,13.619c0,0,3.516-4.669,5.592-3.642c2.077,1.027-0.414,2.795,1.598,3.719c2.011,0.924,5.048-0.229,4.376-2.899c-0.672-2.67-1.866-0.776-2.798-2.208c-0.934-1.432,4.586-4.59,4.586-4.59s3.361,6.651,4.316,4.911c1.157-2.105,3.193-4.265,5.305-1.025c0,0,1.814,2.412,0.246,3.434s-2.917,0.443-3.506,1.553c-0.586,1.112,3.784,4.093,3.784,4.093s-2.987,4.81-4.926,3.548c-1.939-1.262,0.356-3.364-2.599-3.989c-1.288-0.23-3.438,0.538-3.818,2.34c-0.13,2.709,1.604,2.016,2.797,3.475c1.191,1.457-4.484,4.522-4.484,4.522s-1.584-3.923-3.811-4.657c-2.227-0.735-0.893,2.135-2.917,2.531c-2.024,0.396-4.816-2.399-3.46-4.789c1.358-2.391,3.275-0.044,3.441-1.951C7.629,16.087,3.739,13.619,3.739,13.619z'; - borderWidth: 0; - scale: 8; - fillColor: Color black) element. - element @ RTDraggable. - view add: element. - ^ view -] - -{ #category : #icons } -RTSVGExample >> icon3Icon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAADz0lEQVR4XuXbyyt8YRjA8UGy -ssVmFkpjoUkKQ7lMWUjZ2thYKCslUUokTTZjQcpCNpRLFsrKQmoWI/kDLKRcSjZKbqHQM795 -1cjMnDPnPWfOzxjfb70bNTP1fMy5vA5PLMbvN+Xhj4APwo8Pwgfhxwfhg/Djg/BB+PFB+CD8 -+CD8+CB8EH58ED4IPz4IH4QfH4QPwo8Pwo8Pwgfhxwfhg/Djg/BB+PFB+CD8+CD8+CB8EH5g -kP39fSksLJSPjw/hg+S4jo4O8Xg8MbV6enr4ILnq8PBQCgoKvjAS6+zsTPggP9za2loaRGL5 -/X5LkL29PZmamoptb28LHyTLZmZmTDESa3193XTQjY2NSa8PBALCB3FYJBKxxEis19fXtEHX -1tYavr6trU34IA5qamrSBqmpqUka8sDAQMbXbmxsCB/EZru7u9ogarW3t38O+erqSut1fBCH -nZycSDgctoWjs5aXl4UPknIp29vbK1VVVbK0tGQ5nKGhIVdR1JUXHySexGttbU0b7uTkZEaU -p6cnV0FmZ2f535CLiwspKioyHGxFRYXlgNzC6Orq4p/Uj4+PM/6G62yFZIOgDo3qMHV7e8u/ -7L25uZFsj+nRaNTRIWtxcVH4WycplZSUWA6zsrLSdHAvLy9SXFzsCIS/l5V+x609PIWysrLy -BfP4+CgTExNZncyPjo7435DU1NZGdXW16/cSmkuen5+FD2JQMBjMCYo63N3f3/N3e436/kem -n17qZpQPYlB9fX3OUHR2BXAg6mSd7WCHh4fl/f09abjqZ3Y2Ivkg36qrq3OMcn5+bjrQvr4+ -y/ddXV3lg6TW3d3tCEQ9dZLpfefm5jK+r7qw4B+y4l1fX39uXagVCoUcfzus2tnZMX1vnf0y -BMjCwoJrJ3GrHh4eDD+rtLQ07ZyDBLm8vHT1ikqn5ubmpM9UV3Uq/n1IvNHRUVdB1JMoOp8b -PzSK+tv65uYmf+vkew0NDa7fc3R2dsrd3R3/yUUnDQ4O/rebwJGREf6Ti3Y7ODgQ3fPC6emp -+Hw+W4Dz8/PCB7FZS0uL6ZDHxsbSBhq/k9YGmZ6e5oM4ST3MZjRQ9a1weu4pLy/nH7KyaXx8 -PGnI/f39pgNV//+RCaOsrOzX3Ff8ia0TndQl6299PhcJovJ6vUkoW1tbeY2R9yCJp+DVt+Lt -7S3vMfIeJHHpHPtD8f8Llw/Cjw/CB+HHB+GD8OOD8EH48UH4IPz4IPz4IHwQfnwQPgg/Pggf -hB8fhA/Cjw/Cjw/CB+HHB+GD8OOD8EH48UH4IPz4IPz4IHwQfjb7ByPPkYDDAMrjAAAAAElF -TkSuQmCC' -] - -{ #category : #basic } -RTSVGExample >> icon4 [ - - - - " - self new icon4 - " - | view element | - view := RTView new. - element := (RTSVGPath new - path: 'M31.229,17.736c0.064-0.571,0.104-1.148,0.104-1.736s-0.04-1.166-0.104-1.737l-4.377-1.557c-0.218-0.716-0.504-1.401-0.851-2.05l1.993-4.192c-0.725-0.91-1.549-1.734-2.458-2.459l-4.193,1.994c-0.647-0.347-1.334-0.632-2.049-0.849l-1.558-4.378C17.165,0.708,16.588,0.667,16,0.667s-1.166,0.041-1.737,0.105L12.707,5.15c-0.716,0.217-1.401,0.502-2.05,0.849L6.464,4.005C5.554,4.73,4.73,5.554,4.005,6.464l1.994,4.192c-0.347,0.648-0.632,1.334-0.849,2.05l-4.378,1.557C0.708,14.834,0.667,15.412,0.667,16s0.041,1.165,0.105,1.736l4.378,1.558c0.217,0.715,0.502,1.401,0.849,2.049l-1.994,4.193c0.725,0.909,1.549,1.733,2.459,2.458l4.192-1.993c0.648,0.347,1.334,0.633,2.05,0.851l1.557,4.377c0.571,0.064,1.148,0.104,1.737,0.104c0.588,0,1.165-0.04,1.736-0.104l1.558-4.377c0.715-0.218,1.399-0.504,2.049-0.851l4.193,1.993c0.909-0.725,1.733-1.549,2.458-2.458l-1.993-4.193c0.347-0.647,0.633-1.334,0.851-2.049L31.229,17.736zM16,20.871c-2.69,0-4.872-2.182-4.872-4.871c0-2.69,2.182-4.872,4.872-4.872c2.689,0,4.871,2.182,4.871,4.872C20.871,18.689,18.689,20.871,16,20.871z'; - borderWidth: 0; - fillColor: Color black; - scale: 8) element. - element @ RTDraggable. - view add: element. - ^ view -] - -{ #category : #icons } -RTSVGExample >> icon4Icon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAEdUlEQVR4XuWcSyi0URjH3yyU -EiWllFhZqNFkMUmULFAWbpHGwsbGRkgUuSxkIaUslCKlxEYWQmFhIwuZlDulXEqhsHFJPWMe -ma/5mHnnvOc17xzv/1/PTudMz8973uf2Hs3rxZdK0vBdgA8EX/hA8IHgCx8IPhB84QPBB4Iv -fCD4QPCFDwRf+EDwgeALHwg+EHzhA8EHgi98IPhA8IUPBF/4QPCB4AsfCD4QfOEDCdTx8TEt -Ly/T/Pw8bW1t0fPzM+EDiZISExNJ0zTvd7u6uiJ8IBbr4eEhKAy21tZWfCBWq7u7OyQQNnwg -Vv9wTdMFwu8TfCAW6fT0VBcGW319PT4QMyouLqacnBza3t4O68impqawQESOLfKJ3zexsbF0 -fn5O+EC+lJ+f/5+D09PTaXV1lXSOKyGbmZkJusbLyws1NDT8gCryz2B7IN9hBFpSUhLNzs5+ -Ounw8JDKyspIFIbfEhISaGxs7HONm5sbqqio0F1jb2+PYIHwMWXUwRYYvb29ESQQl8ulIhDv -6+srJpDd3V3lgFRXVxP0OyQzM1MpKLe3t9hANjY2lAFSVFSEH2WxUlJSlIDCCSc+EJ8WFhai -DsTpdOInhjLJXqSMj058IF86OTmRfUKopaWF+vr6vH7LyMiQWsvtduMD8auqqsqoE2lxcTGk -A5+enqigoMAwGHwgEscVh8mi6w4MDBiCMjw8jPtSPzg4INGqrd9iYmK4QGvIaTU1NYb2yMrK -+lf7sj2Qu7s76urqonDNpVCmd0xFImAoLS0ljgBtCSQ+Pt5saCvtmP7+ftNh9fT0NNkGCJfO -zTqEoynZ/fUGIkSttrbWPkBWVlZMO4RD2mjmObm5ufYB8huZeLSBWJXJWwJkc3PzzwPhZppt -gPB4p1mHcJ9ddv/JyUnT+3d0dJCtoqzLy0tqb2835ZjHx0cpp2RnZ0vvyz1/qyKsqCWGHo8n -6NSHiHOM7rW2tkYyT+Po6ChBlk7m5uYMOay3t1fYUdfX14bWLiwspPf3d4KvZSUnJxtyXGVl -ZVinra+vG34yVJiaVwLI+Pg4SUZexElf4FpTU1Mk885ITU3FL7//Zlhq1paWlvCB+HV/fx/1 -Fm5zczM+ENkSeaQMH4hPPLapyhgQfwQED6SxsVGpQTloINz9U22UdGhoCDcPaWtrU3LYGhZI -XFyckkC4oQYJhDNjkT4EZ90yta/A2hT347nr+JulGVu+1Hd2dijU4PPR0dEP5/CojpHa1MXF -xY81enp6gq7B0PHzEJ/Ozs6IR3zYKTw0x9Mpen/vcDiEoIQrFH7B/VxrcHAQPzH8no+I3lMy -MTERFkhaWpqwg/f395X5hPovXxygayMjI/jfqVup8vJy/Ks1VJLeaFFeXh7+5TMqHVuhLgzA -BxJh8aUCdXV1xJ9Xc1OqpKSEOjs78S8wwxc+EHwg+MIHgg8EX/hA8IUPBB8IvvCB4APBFz4Q -fCD4wgeCDwRf+EDwhQ8EHwi+8IHgA8EXPhB8IPjCB4IPBF/4QPCFD0RVfQBQ8AY7U59S6gAA -AABJRU5ErkJggg==' -] - -{ #category : #basic } -RTSVGExample >> icon5 [ - - - " - self new icon5 - " - | view element | - view := RTView new. - element := (RTSVGPath new - path: 'M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM19.158,23.269c-0.079,0.064-0.183,0.13-0.105,0.207c0.078,0.078-0.09,0.131-0.09,0.17s0.104,0.246,0.052,0.336c-0.052,0.092-0.091,0.223-0.13,0.301c-0.039,0.077-0.131,0.155-0.104,0.272c0.025,0.116-0.104,0.077-0.104,0.194c0,0.116,0.116,0.065,0.09,0.208c-0.025,0.144-0.09,0.183-0.09,0.285c0,0.104,0.064,0.247,0.064,0.286s-0.064,0.17-0.155,0.272c-0.092,0.104-0.155,0.17-0.144,0.233c0.014,0.065,0.104,0.144,0.091,0.184c-0.013,0.037-0.129,0.168-0.116,0.259c0.014,0.09,0.129,0.053,0.155,0.116c0.026,0.065-0.155,0.118-0.078,0.183c0.078,0.064,0.183,0.051,0.156,0.208c-0.019,0.112,0.064,0.163,0.126,0.198c-0.891,0.221-1.818,0.352-2.777,0.352C9.639,27.533,4.466,22.36,4.466,16c0-2.073,0.557-4.015,1.518-5.697c0.079-0.042,0.137-0.069,0.171-0.062c0.065,0.013,0.079,0.104,0.183,0.13c0.104,0.026,0.195-0.078,0.26-0.117c0.064-0.039,0.116-0.195,0.051-0.182c-0.065,0.013-0.234,0-0.234,0s0.183-0.104,0.183-0.169s0.025-0.169,0.129-0.208C6.83,9.655,6.83,9.681,6.765,9.837C6.7,9.993,6.896,9.928,6.973,9.863s0.13-0.013,0.272-0.104c0.143-0.091,0.143-0.143,0.221-0.143c0.078,0,0.221,0.143,0.299,0.091c0.077-0.052,0.299,0.065,0.429,0.065c0.129,0,0.545,0.169,0.624,0.169c0.078,0,0.312,0.09,0.325,0.259c0.013,0.169,0.09,0.156,0.168,0.156s0.26,0.065,0.26,0.13c0,0.065-0.052,0.325,0.078,0.39c0.129,0.064,0.247,0.169,0.299,0.143c0.052-0.026,0-0.233-0.064-0.26c-0.065-0.026-0.027-0.117-0.052-0.169c-0.026-0.051,0.078-0.051,0.117,0.039c0.039,0.091,0.143,0.26,0.208,0.26c0.064,0,0.208,0.156,0.168,0.247c-0.039,0.091,0.039,0.221,0.156,0.221c0.116,0,0.26,0.182,0.312,0.195c0.052,0.013,0.117,0.078,0.117,0.117c0,0.04,0.065,0.26,0.065,0.351c0,0.09-0.04,0.454-0.053,0.597s0.104,0.39,0.234,0.52c0.129,0.13,0.246,0.377,0.324,0.429c0.079,0.052,0.13,0.195,0.247,0.182c0.117-0.013,0.195,0.078,0.299,0.26c0.104,0.182,0.208,0.48,0.286,0.506c0.078,0.026,0.208,0.117,0.142,0.182c-0.064,0.064-0.168,0.208-0.051,0.208c0.117,0,0.156-0.065,0.247,0.053c0.09,0.116,0.208,0.181,0.194,0.26c-0.013,0.077,0.104,0.103,0.156,0.116c0.052,0.013,0.169,0.247,0.286,0.143c0.117-0.104-0.155-0.259-0.234-0.326c-0.078-0.064,0-0.207-0.182-0.35c-0.182-0.143-0.156-0.247-0.286-0.351c-0.13-0.104-0.233-0.195-0.104-0.286c0.13-0.091,0.143,0.091,0.195,0.208c0.052,0.116,0.324,0.351,0.441,0.454c0.117,0.104,0.326,0.468,0.39,0.468s0.247,0.208,0.247,0.208s0.103,0.168,0.064,0.22c-0.039,0.052,0.053,0.247,0.144,0.299c0.09,0.052,0.455,0.22,0.507,0.247c0.052,0.027,0.155,0.221,0.299,0.221c0.142,0,0.247,0.014,0.286,0.053c0.039,0.038,0.155,0.194,0.234,0.104c0.078-0.092,0.09-0.131,0.208-0.131c0.117,0,0.168,0.091,0.233,0.156c0.065,0.065,0.247,0.235,0.338,0.222c0.091-0.013,0.208,0.104,0.273,0.064s0.169,0.025,0.22,0.052c0.054,0.026,0.234,0.118,0.222,0.272c-0.013,0.157,0.103,0.195,0.182,0.234c0.078,0.039,0.182,0.13,0.248,0.195c0.064,0.063,0.206,0.077,0.246,0.116c0.039,0.039,0.065,0.117,0.182,0.052c0.116-0.064,0.092-0.181,0.092-0.181s0.129-0.026,0.194,0.026c0.064,0.05,0.104,0.22,0.144,0.246c0.038,0.026,0.115,0.221,0.063,0.362c-0.051,0.145-0.038,0.286-0.091,0.286c-0.052,0-0.116,0.17-0.195,0.209c-0.076,0.039-0.285,0.221-0.272,0.286c0.013,0.063,0.131,0.258,0.104,0.35c-0.025,0.091-0.194,0.195-0.154,0.338c0.038,0.144,0.312,0.183,0.323,0.312c0.014,0.131,0.209,0.417,0.235,0.546c0.025,0.13,0.246,0.272,0.246,0.453c0,0.184,0.312,0.3,0.377,0.312c0.063,0.013,0.182,0.131,0.272,0.17s0.169,0.116,0.233,0.221s0.053,0.261,0.053,0.299c0,0.039-0.039,0.44-0.078,0.674C19.145,23.021,19.235,23.203,19.158,23.269zM10.766,11.188c0.039,0.013,0.117,0.091,0.156,0.091c0.04,0,0.234,0.156,0.286,0.208c0.053,0.052,0.053,0.195-0.013,0.208s-0.104-0.143-0.117-0.208c-0.013-0.065-0.143-0.065-0.208-0.104C10.805,11.344,10.66,11.152,10.766,11.188zM27.51,16.41c-0.144,0.182-0.13,0.272-0.195,0.286c-0.064,0.013,0.065,0.065,0.09,0.194c0.022,0.112-0.065,0.224,0.063,0.327c-0.486,4.619-3.71,8.434-8.016,9.787c-0.007-0.011-0.019-0.025-0.021-0.034c-0.027-0.078-0.027-0.233,0.064-0.285c0.091-0.053,0.312-0.233,0.363-0.272c0.052-0.04,0.13-0.221,0.091-0.247c-0.038-0.026-0.232,0-0.26-0.039c-0.026-0.039-0.026-0.092,0.104-0.182c0.13-0.091,0.195-0.222,0.247-0.26c0.052-0.039,0.155-0.117,0.195-0.209c0.038-0.09-0.041-0.039-0.118-0.039s-0.117-0.142-0.117-0.207s0.195,0.026,0.339,0.052c0.143,0.024,0.077-0.065,0.064-0.142c-0.013-0.078,0.026-0.209,0.105-0.17c0.076,0.039,0.479-0.013,0.531-0.026c0.052-0.013,0.194-0.246,0.246-0.312c0.053-0.065,0.064-0.129,0-0.168c-0.065-0.04-0.143-0.184-0.168-0.221c-0.026-0.041-0.039-0.274-0.013-0.34c0.025-0.063,0,0.377,0.181,0.43c0.183,0.052,0.286,0.078,0.455-0.078c0.169-0.155,0.298-0.26,0.312-0.363c0.013-0.104,0.052-0.209,0.117-0.246c0.065-0.039,0.104,0.103,0.182-0.065c0.078-0.17,0.156-0.157,0.234-0.299c0.077-0.144-0.13-0.325,0.024-0.43c0.157-0.103,0.43-0.233,0.43-0.233s0.078-0.039,0.234-0.078c0.155-0.038,0.324-0.014,0.376-0.09c0.052-0.079,0.104-0.247,0.182-0.338c0.079-0.092,0.169-0.234,0.13-0.299c-0.039-0.065,0.104-0.352,0.091-0.429c-0.013-0.078-0.13-0.261,0.065-0.416s0.402-0.391,0.416-0.454c0.012-0.065,0.169-0.338,0.154-0.469c-0.012-0.129-0.154-0.285-0.245-0.325c-0.092-0.037-0.286-0.05-0.364-0.154s-0.299-0.208-0.377-0.182c-0.077,0.026-0.208,0.051-0.312-0.015c-0.104-0.063-0.272-0.143-0.337-0.194c-0.066-0.051-0.234-0.09-0.312-0.09s-0.065-0.053-0.182,0.103c-0.117,0.157,0,0.209-0.208,0.182c-0.209-0.024,0.025-0.038,0.144-0.194c0.115-0.155-0.014-0.247-0.144-0.207c-0.13,0.039-0.039,0.117-0.247,0.156c-0.207,0.038-0.207-0.092-0.077-0.117c0.13-0.026,0.363-0.143,0.363-0.194c0-0.053-0.026-0.196-0.13-0.196s-0.078-0.129-0.233-0.297c-0.156-0.17-0.351-0.274-0.508-0.249c-0.154,0.026-0.272,0.065-0.35-0.076c-0.078-0.144-0.169-0.17-0.222-0.247c-0.051-0.078-0.182,0-0.221-0.039s-0.039-0.039-0.039-0.039s-0.169,0.039-0.077-0.078c0.09-0.117,0.129-0.338,0.09-0.325c-0.038,0.013-0.104,0.196-0.168,0.183c-0.064-0.013-0.014-0.04-0.144-0.117c-0.13-0.078-0.337-0.013-0.337,0.052c0,0.065-0.065,0.117-0.065,0.117s-0.039-0.038-0.078-0.117c-0.039-0.078-0.221-0.091-0.312-0.013c-0.09,0.078-0.142-0.196-0.207-0.196s-0.194,0.065-0.26,0.184c-0.064,0.116-0.038,0.285-0.092,0.272c-0.05-0.013-0.063-0.233-0.05-0.312c0.012-0.079,0.155-0.208,0.05-0.234c-0.103-0.026-0.259,0.13-0.323,0.143c-0.065,0.013-0.195,0.104-0.273,0.209c-0.077,0.103-0.116,0.168-0.195,0.207c-0.077,0.039-0.193,0-0.167-0.039c0.025-0.039-0.222-0.181-0.261-0.13c-0.04,0.052-0.155,0.091-0.272,0.144c-0.117,0.052-0.222-0.065-0.247-0.117s-0.079-0.064-0.091-0.234c-0.013-0.168,0.027-0.351,0.065-0.454c0.038-0.104-0.195-0.312-0.286-0.3c-0.091,0.015-0.182,0.105-0.272,0.091c-0.092-0.012-0.052-0.038-0.195-0.038c-0.143,0-0.026-0.025,0-0.143c0.025-0.116-0.052-0.273,0.092-0.377c0.142-0.104,0.091-0.351,0-0.363c-0.092-0.014-0.261,0.039-0.377,0.026c-0.116-0.014-0.208,0.091-0.169,0.207c0.039,0.117-0.065,0.195-0.104,0.183c-0.039-0.013-0.09-0.078-0.234,0.026c-0.142,0.103-0.194,0.064-0.337-0.052c-0.143-0.118-0.299-0.234-0.325-0.416c-0.026-0.182-0.04-0.364,0.013-0.468c0.051-0.104,0.051-0.285-0.026-0.312c-0.078-0.025,0.09-0.155,0.181-0.181c0.092-0.026,0.234-0.143,0.26-0.195c0.026-0.052,0.156-0.04,0.298-0.04c0.143,0,0.169,0,0.312,0.078c0.143,0.078,0.169-0.039,0.169-0.078c0-0.039,0.052-0.117,0.208-0.104c0.156,0.013,0.376-0.052,0.416-0.013s0.116,0.195,0.194,0.143c0.079-0.051,0.104-0.143,0.131,0.014c0.025,0.155,0.09,0.39,0.208,0.429c0.116,0.039,0.052,0.194,0.168,0.207c0.115,0.013,0.17-0.246,0.131-0.337c-0.04-0.09-0.118-0.363-0.183-0.428c-0.064-0.065-0.064-0.234,0.064-0.286c0.13-0.052,0.442-0.312,0.532-0.389c0.092-0.079,0.338-0.144,0.261-0.248c-0.078-0.104-0.104-0.168-0.104-0.247s0.078-0.052,0.117,0s0.194-0.078,0.155-0.143c-0.038-0.064-0.026-0.155,0.065-0.143c0.091,0.013,0.116-0.065,0.078-0.117c-0.039-0.052,0.091-0.117,0.182-0.091c0.092,0.026,0.325-0.013,0.364-0.065c0.038-0.052-0.078-0.104-0.078-0.208c0-0.104,0.155-0.195,0.247-0.208c0.091-0.013,0.207,0,0.221-0.039c0.012-0.039,0.143-0.143,0.155-0.052c0.014,0.091,0,0.247,0.104,0.247c0.104,0,0.232-0.117,0.272-0.129c0.038-0.013,0.286-0.065,0.338-0.078c0.052-0.013,0.363-0.039,0.325-0.13c-0.039-0.09-0.078-0.181-0.118-0.22c-0.039-0.039-0.077,0.013-0.13,0.078c-0.051,0.065-0.143,0.065-0.168,0.013c-0.026-0.051,0.012-0.207-0.078-0.156c-0.092,0.052-0.104,0.104-0.157,0.078c-0.052-0.026-0.103-0.117-0.103-0.117s0.129-0.064,0.038-0.182c-0.09-0.117-0.221-0.091-0.35-0.025c-0.13,0.064-0.118,0.051-0.273,0.09s-0.234,0.078-0.234,0.078s0.209-0.129,0.299-0.208c0.091-0.078,0.209-0.117,0.286-0.195c0.078-0.078,0.285,0.039,0.285,0.039s0.105-0.104,0.105-0.039s-0.027,0.234,0.051,0.234c0.079,0,0.299-0.104,0.21-0.131c-0.093-0.026,0.129,0,0.219-0.065c0.092-0.065,0.194-0.065,0.247-0.09c0.052-0.026,0.092-0.143,0.182-0.143c0.092,0,0.13,0.117,0,0.195s-0.143,0.273-0.208,0.325c-0.064,0.052-0.026,0.117,0.078,0.104c0.104-0.013,0.194,0.013,0.286-0.013s0.143,0.026,0.168,0.065c0.026,0.039,0.104-0.039,0.104-0.039s0.169-0.039,0.221,0.026c0.053,0.064,0.092-0.039,0.053-0.104c-0.039-0.064-0.092-0.129-0.13-0.208c-0.039-0.078-0.091-0.104-0.194-0.078c-0.104,0.026-0.13-0.026-0.195-0.064c-0.065-0.04-0.118,0.052-0.065-0.04c0.053-0.09,0.078-0.117,0.117-0.195c0.039-0.078,0.209-0.221,0.039-0.259c-0.169-0.04-0.222-0.065-0.247-0.143c-0.026-0.078-0.221-0.221-0.272-0.221c-0.053,0-0.233,0-0.247-0.065c-0.013-0.065-0.143-0.208-0.208-0.273c-0.064-0.065-0.312-0.351-0.351-0.377c-0.039-0.026-0.091-0.013-0.208,0.143c-0.116,0.157-0.22,0.183-0.312,0.144c-0.091-0.039-0.104-0.026-0.193-0.13c-0.093-0.104,0.09-0.117,0.051-0.182c-0.04-0.064-0.247-0.091-0.377-0.104c-0.13-0.013-0.221-0.156-0.416-0.169c-0.194-0.013-0.428,0.026-0.493,0.026c-0.064,0-0.064,0.091-0.09,0.234c-0.027,0.143,0.09,0.182-0.027,0.208c-0.116,0.026-0.169,0.039-0.052,0.091c0.117,0.052,0.273,0.26,0.273,0.26s0,0.117-0.092,0.182c-0.09,0.065-0.182,0.13-0.233,0.053c-0.053-0.079-0.195-0.065-0.155,0.013c0.038,0.078,0.116,0.117,0.116,0.195c0,0.077,0.117,0.272,0.039,0.337c-0.078,0.065-0.168,0.014-0.233,0.026s-0.131-0.104-0.078-0.13c0.051-0.026-0.014-0.221-0.014-0.221s-0.155,0.221-0.143,0.104c0.014-0.117-0.064-0.13-0.064-0.221c0-0.091-0.079-0.13-0.194-0.104c-0.118,0.026-0.26-0.04-0.482-0.079c-0.22-0.039-0.311-0.064-0.493-0.156c-0.182-0.091-0.247-0.026-0.338-0.013c-0.091,0.013-0.052-0.182-0.169-0.207c-0.116-0.027-0.181,0.025-0.207-0.144c-0.026-0.168,0.039-0.208,0.324-0.39c0.286-0.182,0.247-0.26,0.468-0.286c0.22-0.026,0.325,0.026,0.325-0.039s0.052-0.325,0.052-0.195S16.95,9.109,16.832,9.2c-0.116,0.091-0.052,0.104,0.04,0.104c0.091,0,0.259-0.091,0.259-0.091s0.208-0.091,0.26-0.013c0.053,0.078,0.053,0.156,0.144,0.156s0.285-0.104,0.116-0.195c-0.168-0.091-0.272-0.078-0.376-0.182s-0.078-0.065-0.195-0.039c-0.116,0.026-0.116-0.039-0.156-0.039s-0.104,0.026-0.13-0.026c-0.025-0.052,0.014-0.065,0.145-0.065c0.129,0,0.285,0.039,0.285,0.039s0.155-0.052,0.194-0.065c0.039-0.013,0.247-0.039,0.208-0.155c-0.04-0.117-0.169-0.117-0.208-0.156s0.078-0.09,0.143-0.117c0.065-0.026,0.247,0,0.247,0s0.117,0.013,0.117-0.039S17.897,8.2,17.976,8.239s0,0.156,0.117,0.13c0.116-0.026,0.143,0,0.207,0.039c0.065,0.039-0.013,0.195-0.077,0.221c-0.065,0.025-0.169,0.077-0.026,0.09c0.144,0.014,0.246,0.014,0.246,0.014s0.092-0.091,0.131-0.169c0.038-0.078,0.104-0.026,0.155,0c0.052,0.025,0.247,0.065,0.065,0.117c-0.183,0.052-0.221,0.117-0.26,0.182c-0.038,0.065-0.053,0.104-0.221,0.065c-0.17-0.039-0.26-0.026-0.299,0.039c-0.039,0.064-0.013,0.273,0.053,0.247c0.063-0.026,0.129-0.026,0.207-0.052c0.078-0.026,0.39,0.026,0.467,0.013c0.078-0.013,0.209,0.13,0.248,0.104c0.039-0.026,0.117,0.052,0.194,0.104c0.078,0.052,0.052-0.117,0.194-0.013c0.144,0.104,0.065,0.104,0.144,0.104c0.076,0,0.246,0.013,0.246,0.013s0.014-0.129,0.144-0.104c0.13,0.026,0.245,0.169,0.232,0.064c-0.012-0.103,0.013-0.181-0.09-0.259c-0.104-0.078-0.272-0.13-0.299-0.169c-0.026-0.039-0.052-0.091-0.013-0.117c0.039-0.025,0.221,0.013,0.324,0.079c0.104,0.065,0.195,0.13,0.273,0.078c0.077-0.052,0.17-0.078,0.208-0.117c0.038-0.04,0.13-0.156,0.13-0.156s-0.391-0.051-0.441-0.117c-0.053-0.065-0.235-0.156-0.287-0.156s-0.194,0.091-0.246-0.039s-0.052-0.286-0.105-0.299c-0.05-0.013-0.597-0.091-0.674-0.13c-0.078-0.039-0.39-0.13-0.507-0.195s-0.286-0.156-0.389-0.156c-0.104,0-0.533,0.052-0.611,0.039c-0.078-0.013-0.312,0.026-0.403,0.039c-0.091,0.013,0.117,0.182-0.077,0.221c-0.195,0.039-0.169,0.065-0.13-0.13c0.038-0.195-0.131-0.247-0.299-0.169c-0.169,0.078-0.442,0.13-0.377,0.221c0.065,0.091-0.012,0.157,0.117,0.247c0.13,0.091,0.183,0.117,0.35,0.104c0.17-0.013,0.339,0.025,0.339,0.025s0,0.157-0.064,0.182c-0.065,0.026-0.169,0.026-0.196,0.104c-0.025,0.078-0.155,0.117-0.155,0.078s0.065-0.169-0.026-0.234c-0.09-0.065-0.117-0.078-0.221-0.013c-0.104,0.065-0.116,0.091-0.169-0.013C16.053,8.291,15.897,8.2,15.897,8.2s-0.104-0.129-0.182-0.194c-0.077-0.065-0.22-0.052-0.234,0.013c-0.013,0.064,0.026,0.129,0.078,0.247c0.052,0.117,0.104,0.337,0.013,0.351c-0.091,0.013-0.104,0.026-0.195,0.052c-0.091,0.026-0.13-0.039-0.13-0.143s-0.04-0.195-0.013-0.234c0.026-0.039-0.104,0.027-0.234,0c-0.13-0.025-0.233,0.052-0.104,0.092c0.13,0.039,0.157,0.194,0.039,0.233c-0.117,0.039-0.559,0-0.702,0s-0.35,0.039-0.39-0.039c-0.039-0.078,0.118-0.129,0.208-0.129c0.091,0,0.363,0.012,0.467-0.13c0.104-0.143-0.13-0.169-0.233-0.169c-0.104,0-0.183-0.039-0.299-0.155c-0.118-0.117,0.078-0.195,0.052-0.247c-0.026-0.052-0.156-0.014-0.272-0.014c-0.117,0-0.299-0.09-0.299,0.014c0,0.104,0.143,0.402,0.052,0.337c-0.091-0.064-0.078-0.156-0.143-0.234c-0.065-0.078-0.168-0.065-0.299-0.052c-0.129,0.013-0.35,0.052-0.415,0.039c-0.064-0.013-0.013-0.013-0.156-0.078c-0.142-0.065-0.208-0.052-0.312-0.117C12.091,7.576,12.182,7.551,12,7.538c-0.181-0.013-0.168,0.09-0.35,0.065c-0.182-0.026-0.234,0.013-0.416,0c-0.182-0.013-0.272-0.026-0.299,0.065c-0.025,0.091-0.078,0.247-0.156,0.247c-0.077,0-0.169,0.091,0.078,0.104c0.247,0.013,0.105,0.129,0.325,0.117c0.221-0.013,0.416-0.013,0.468-0.117c0.052-0.104,0.091-0.104,0.117-0.065c0.025,0.039,0.22,0.272,0.22,0.272s0.131,0.104,0.183,0.13c0.051,0.026-0.052,0.143-0.156,0.078c-0.104-0.065-0.299-0.051-0.377-0.116c-0.078-0.065-0.429-0.065-0.52-0.052c-0.09,0.013-0.247-0.039-0.299-0.039c-0.051,0-0.221,0.13-0.221,0.13S10.532,8.252,10.494,8.2c-0.039-0.052-0.104,0.052-0.156,0.065c-0.052,0.013-0.208-0.104-0.364-0.052C9.818,8.265,9.87,8.317,9.649,8.304s-0.272-0.052-0.35-0.039C9.22,8.278,9.22,8.278,9.22,8.278S9.233,8.33,9.143,8.382C9.052,8.434,8.986,8.499,8.921,8.421C8.857,8.343,8.818,8.343,8.779,8.33c-0.04-0.013-0.118-0.078-0.286-0.04C8.324,8.33,8.064,8.239,8.013,8.239c-0.04,0-0.313-0.015-0.491-0.033c2.109-2.292,5.124-3.74,8.478-3.74c2.128,0,4.117,0.589,5.83,1.598c-0.117,0.072-0.319,0.06-0.388,0.023c-0.078-0.043-0.158-0.078-0.475-0.061c-0.317,0.018-0.665,0.122-0.595,0.226c0.072,0.104-0.142,0.165-0.197,0.113c-0.055-0.052-0.309,0.06-0.293,0.165c0.016,0.104-0.039,0.225-0.175,0.199c-0.134-0.027-0.229,0.06-0.237,0.146c-0.007,0.087-0.309,0.147-0.332,0.147c-0.024,0-0.412-0.008-0.27,0.095c0.097,0.069,0.15,0.027,0.27,0.052c0.119,0.026,0.214,0.217,0.277,0.243c0.062,0.026,0.15,0,0.189-0.052c0.04-0.052,0.095-0.234,0.095-0.234s0,0.173,0.097,0.208c0.095,0.035,0.331-0.026,0.395-0.017c0.064,0.008,0.437,0.061,0.538,0.112c0.104,0.052,0.356,0.087,0.428,0.199c0.071,0.113,0.08,0.503,0.119,0.546c0.04,0.043,0.174-0.139,0.205-0.182c0.031-0.044,0.198-0.018,0.254,0.042c0.056,0.061,0.182,0.208,0.175,0.269C21.9,8.365,21.877,8.459,21.83,8.425c-0.048-0.034-0.127-0.025-0.096-0.095c0.032-0.069,0.048-0.217-0.015-0.217c-0.064,0-0.119,0-0.119,0s-0.12-0.035-0.199,0.095s-0.015,0.26,0.04,0.26s0.184,0,0.184,0.034c0,0.035-0.136,0.139-0.128,0.2c0.009,0.061,0.11,0.268,0.144,0.312c0.031,0.043,0.197,0.086,0.244,0.096c0.049,0.008-0.111,0.017-0.07,0.077c0.04,0.061,0.102,0.208,0.189,0.243c0.087,0.035,0.333,0.19,0.363,0.26c0.032,0.069,0.222-0.052,0.262-0.061c0.04-0.008,0.032,0.182,0.143,0.191c0.11,0.008,0.15-0.018,0.245-0.096s0.072-0.182,0.079-0.26c0.009-0.078,0-0.138,0.104-0.113c0.104,0.026,0.158-0.018,0.15-0.104c-0.008-0.087-0.095-0.191,0.07-0.217c0.167-0.026,0.254-0.138,0.357-0.138c0.103,0,0.389,0.043,0.419,0c0.032-0.043,0.167-0.243,0.254-0.251c0.067-0.007,0.224-0.021,0.385-0.042c1.582,1.885,2.561,4.284,2.673,6.905c-0.118,0.159-0.012,0.305,0.021,0.408c0.001,0.03,0.005,0.058,0.005,0.088c0,0.136-0.016,0.269-0.021,0.404C27.512,16.406,27.512,16.408,27.51,16.41zM17.794,12.084c-0.064,0.013-0.169-0.052-0.169-0.143s-0.091,0.169-0.04,0.247c0.053,0.078-0.104,0.169-0.155,0.169s-0.091-0.116-0.078-0.233c0.014-0.117-0.077-0.221-0.221-0.208c-0.143,0.014-0.208,0.13-0.259,0.169c-0.053,0.039-0.053,0.259-0.04,0.312s0.013,0.235-0.116,0.221c-0.118-0.013-0.092-0.233-0.079-0.312c0.014-0.078-0.039-0.273,0.014-0.376c0.053-0.104,0.207-0.143,0.312-0.156s0.324,0.065,0.363,0.052c0.04-0.014,0.222-0.014,0.312,0C17.729,11.837,17.858,12.071,17.794,12.084zM18.027,12.123c0.04,0.026,0.311-0.039,0.364,0.026c0.051,0.065-0.054,0.078-0.183,0.13c-0.129,0.052-0.169,0.039-0.221,0.104s-0.221,0.09-0.299,0.168c-0.078,0.079-0.217,0.125-0.246,0.065c-0.04-0.078,0.013-0.039,0.025-0.078c0.013-0.039,0.245-0.129,0.245-0.129S17.988,12.097,18.027,12.123zM16.988,11.668c-0.038,0.013-0.182-0.026-0.3-0.026c-0.116,0-0.091-0.078-0.143-0.064c-0.051,0.013-0.168,0.039-0.247,0.078c-0.078,0.039-0.208,0.03-0.208-0.04c0-0.104,0.052-0.078,0.221-0.143c0.169-0.065,0.352-0.247,0.429-0.169c0.078,0.078,0.221,0.169,0.312,0.182C17.144,11.5,17.026,11.655,16.988,11.668zM15.659,7.637c-0.079,0.026-0.347,0.139-0.321,0.199c0.01,0.023,0.078,0.069,0.19,0.052c0.113-0.018,0.276-0.035,0.355-0.043c0.078-0.009,0.095-0.139,0.009-0.147C15.805,7.689,15.736,7.611,15.659,7.637zM14.698,7.741c-0.061,0.026-0.243-0.043-0.338,0.018c-0.061,0.038-0.026,0.164,0.07,0.172c0.095,0.009,0.259-0.06,0.276-0.008c0.018,0.052,0.078,0.286,0.234,0.208c0.156-0.078,0.147-0.147,0.19-0.156c0.043-0.009-0.008-0.199-0.078-0.243C14.983,7.689,14.758,7.715,14.698,7.741zM14.385,7.005c0.017,0.044-0.008,0.078,0.113,0.095c0.121,0.018,0.173,0.035,0.243,0.035c0.069,0,0.042-0.113-0.018-0.19c-0.061-0.078-0.043-0.069-0.199-0.113c-0.156-0.043-0.312-0.043-0.416-0.035c-0.104,0.009-0.217-0.017-0.243,0.104c-0.013,0.062,0.07,0.112,0.174,0.112S14.368,6.962,14.385,7.005zM14.611,7.481c0.043,0.095,0.043,0.051,0.165,0.061C14.896,7.551,14.991,7.421,15,7.378c0.009-0.044-0.061-0.13-0.225-0.113c-0.165,0.017-0.667-0.026-0.736,0.034c-0.066,0.058,0,0.233-0.026,0.251c-0.026,0.017,0.009,0.095,0.077,0.078c0.069-0.017,0.104-0.182,0.157-0.182C14.299,7.447,14.568,7.386,14.611,7.481zM12.982,7.126c0.052,0.043,0.183,0.008,0.173-0.035c-0.008-0.043,0.053-0.217-0.051-0.225C13,6.858,12.854,6.962,12.697,7.014c-0.101,0.033-0.078,0.13-0.009,0.13S12.931,7.083,12.982,7.126zM13.72,7.282c-0.087,0.043-0.114,0.069-0.191,0.052c-0.078-0.017-0.078-0.156-0.217-0.13c-0.138,0.026-0.164,0.104-0.207,0.139s-0.139,0.061-0.173,0.043c-0.034-0.017-0.234-0.129-0.234-0.129s-0.416-0.018-0.433-0.07c-0.017-0.052-0.086-0.138-0.277-0.121s-0.52,0.13-0.572,0.13c-0.052,0,0.062,0.104-0.009,0.104c-0.069,0-0.155-0.008-0.181,0.069c-0.018,0.053,0.078,0.052,0.189,0.052c0.112,0,0.295,0,0.347-0.026c0.052-0.026,0.312-0.087,0.303-0.009c-0.009,0.079,0.104,0.199,0.164,0.182c0.061-0.017,0.183-0.13,0.243-0.086c0.061,0.043,0.07,0.146,0.13,0.173c0.061,0.025,0.226,0.025,0.304,0c0.077-0.027,0.294-0.027,0.389-0.009c0.095,0.018,0.373,0.069,0.399,0.018c0.026-0.053,0.104-0.061,0.112-0.113s0.051-0.216,0.051-0.216S13.806,7.239,13.72,7.282zM18.105,16.239c-0.119,0.021-0.091,0.252,0.052,0.21C18.3,16.407,18.223,16.217,18.105,16.239zM19.235,15.929c-0.104-0.026-0.221,0-0.299,0.013c-0.078,0.013-0.299,0.208-0.299,0.208s0.143,0.026,0.233,0.026c0.092,0,0.144,0.051,0.221,0.09c0.078,0.04,0.221-0.052,0.272-0.052c0.053,0,0.118,0.156,0.131-0.013C19.508,16.032,19.339,15.955,19.235,15.929zM15.616,7.507c-0.043-0.104-0.259-0.139-0.304-0.035C15.274,7.563,15.659,7.611,15.616,7.507zM18.093,15.292c0.143-0.026,0.064-0.144-0.053-0.13C17.922,15.175,17.949,15.318,18.093,15.292zM19.82,16.095c-0.119,0.022-0.092,0.253,0.051,0.211C20.015,16.264,19.937,16.074,19.82,16.095zM18.247,15.708c-0.09,0.013-0.285-0.09-0.389-0.182c-0.104-0.091-0.299-0.091-0.377-0.091c-0.077,0-0.39,0.091-0.39,0.091c-0.013,0.13,0.117,0.091,0.273,0.091s0.429-0.026,0.479,0.039c0.053,0.064,0.286,0.168,0.352,0.221c0.064,0.052,0.272,0.065,0.285,0.013S18.338,15.695,18.247,15.708zM16.698,7.412c-0.13-0.009-0.295-0.009-0.399,0c-0.104,0.008-0.182-0.069-0.26-0.113c-0.077-0.043-0.251-0.182-0.354-0.199c-0.104-0.017-0.086-0.017-0.303-0.069c-0.11-0.027-0.294-0.061-0.294-0.086c0-0.026-0.052,0.121,0.043,0.165c0.095,0.043,0.251,0.121,0.363,0.164c0.114,0.043,0.329,0.052,0.399,0.139c0.069,0.086,0.303,0.156,0.303,0.156l0.277,0.026c0,0,0.191-0.043,0.39-0.026c0.199,0.017,0.493,0.043,0.659,0.035c0.163-0.008,0.189-0.061,0.208-0.095c0.016-0.035-0.304-0.104-0.383-0.095C17.271,7.42,16.827,7.42,16.698,7.412zM17.182,9.404c-0.034,0.039,0.157,0.095,0.191,0.043C17.407,9.396,17.271,9.309,17.182,9.404zM17.764,9.585c0.086-0.035,0.043-0.139-0.079-0.104C17.547,9.521,17.676,9.62,17.764,9.585z'; - borderWidth: 0; - fillColor: Color black; - scale: 10) element. - element @ RTDraggable. - view add: element. - ^ view -] - -{ #category : #icons } -RTSVGExample >> icon5Icon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAG+klEQVR4XuWcW0gVXxTGrSy7 -SBJlBCVeMOmuEok9RFQKaZkRIUFERQWBXTTsflOJioIupGARSVRPBSVd0UorovSlG+hDQdFT -PSRRViS1/PcN/3MY5+w5M+fM6Ll8H+wHPTN7Zq/f7Mtae83E9PTwK5wUw28CfiD84gfCD4Rf -/ED4gfCLHwg/EH7xA+EHwi9+IPziB8IPhF/8QPiB8IsfCD8QfvED4QfCL34g/OIHwg+EX/xA -+IHwix8IPxB+8QMxU319vezYsUPGjh0rMTExPaoyYMAAWbFihVRVVcnXr1+FH4jLunjxomRk -ZJgCsFFk79698vv3b+EH4kCnT592AkFZioqK5Nu3b8IPJAC1tLTI0KFDXYehL1u2bBF+IDa0 -bNmygEGMHz9ekpKSAoY4evRo+fjxo/ADUUj+acqUKZYGLSkpkfPnz1sa8fXr17Jv3z6JjY21 -rPPhw4fCD0SnX79+SXx8vD/DyYkTJ4I2Wmtrq2RnZ/sFc+vWLeEH8n/P8AejoqLCkaG6u7tl -7dq1kpycLLNmzfILpbGxUeiBTJs2TWmkuLg4wbCjOufRo0fy588fqa6ulh8/fpga8eXLlzJx -4sSA5hX0Jlogy5cvVxpr0qRJ6DhihIAJf8GCBbJw4UIpKyuTAwcOyM2bN6WpqUmuXbsmt2/f -lnPnznnPa25u7rl69aocO3ZM0tPT7YLhBAIDqwwCD1z/1H/+/Fnevn2rGX/37t2i70HwxPfv -3y8Y/+vq6iQ3N1f7fdCgQVJcXKyB8NTT0NAg+L8dKPPnzxc6IDCoEz9i2LBhGqC5c+eieA25 -c+dO+fv3ryxatEirf+rUqXLv3j3NwMY68vLyZOnSpcr7+Ne7hAbIyZMnXXf6amtr5f79+1qv -ef78ueDvdevWycaNG72GvXv3rnZdANQrKyvL535GjRrFA8TMqHfu3NGM0NXVJYcOHbINDXOK -vv7Kykrt3NmzZ2s9CMOe/ndjwPHLly/Ka924cUOiHggCharGm/knCQkJtsFkZmbK9evXZcmS -Jb3OGTFihFg5f1gkGOtLS0uLfiCqqO3x48fFn5+C4cPOnDN58mQcI8OHD/ceW1hYKAiRYIWG -pXKgPbe/I8Qx4TBc2TzPL5CRI0dqw9ymTZu8xw0ePFgLndTU1Gg958WLF36Nu3r1ap9rYPiL -WiAXLlwQVWzKybyjL5jAMVx5ApRYPCBybPf+Xr165XN/qamp0Qtk165dPg22EyiECgoKAlqZ -YaXVnz04IoGMGzdOnDQW84EdGIAX7D1iIjfWZ4waRA0QN54+7PgZ60hMTNRC95s3bxYnMCBE -BIz1I6rAD8REiMjqQyhYtel/x6Tu5B4PHjzoc49HjhzhAIInO5h6MD94/Jl58+ZpdXz69ElL -YkCEFwHHYO8Rnr7xPgGJAkhKSoqjJw+BRdSzfft2zVfx+BlYLT179kywynr//n1A1zh79iwv -EDh7btSL6DCiu6jTyvmzUmlpqQoI/xwSjDC/YIPp8ePHWh4XEh/g7MH/cTKHXLlyJTqBIKOw -r9f4P3/+lKNHj4oq1G5n33zVqlU+5/Zn9mO/Alm5cqVPY9+9e+d6Y/Pz8039FaslLJVjaLKC -cRXI9+/f/TqPWEhgZaaKEGBjy3j8wIEDozd0gq5vbPCQIUNcbbAqHmV3/1y1B7Nt27aoj/b6 -NNosuyRYITveDpAZM2b0uq4q87GtrS26gSAL3dho7Oy5fR30PCsgemHCD/X8ERIgSFxTNfzp -06euQ8FcYRcIdhWNv+PhiXog0OLFi30aj+xFt6+zfv16JZAJEybIgwcPvNfTx8ZC2TtCBkQ1 -uTsNm6uUk5Mjqn13/TEIsfRFCmtEAYH0W636cubMGenLyIB+48os2wQJdaGyS0hTSceMGaM0 -yOXLlx0bpKOjo1fdc+bMEaSW6mGYZTIi9EIJ5MOHD6aT7oYNG5zua3jrRsBQn4loNkyhYJMr -lDYJefY78qXMjDNz5syg3wf0BAkxj+j/v2fPHtPrIaku1PYIixd2sKHkb3kajLfscUA9wxTS -SJEqZHaNvvCFIhYIhNC5lSO3Zs0aaW9vt2U4JETAE8c7JFZJduHQM8IOCIQwhVVCnKdMnz5d -MCyhnDp1SkuGg/Hxt9l7J6qydetW/pc+rYS9i758JdqT1fjkyZOwezU6bD8cgKUn9sn7AgYS -9sK13WH/aQ1M+EjndAMEVljh3t6I+fgMkhewwRUIHGwulZeXy5s3byLmAzQR+3kmpHfC2Tt8 -+LB3cke5dOmSdHZ2SqS2i/97WfxA+MUPhB8Iv/iB8APhFz8QfiD84gfCD4Rf/ED4xQ+EHwi/ -+IHwA+EXPxB+IPziB8IPhF/8QPjFD4QfCL/4gfAD4Rc/EH4g/Oo//Qd9JOACb5cR8QAAAABJ -RU5ErkJggg==' -] - -{ #category : #basic } -RTSVGExample >> icons [ - - - " - self new icons - " - | view | - view := RTView new. - RTSVGPath icons do: [ :icon | - |elem| - elem := (RTSVGPath new - path: (RTSVGPath perform: icon); - borderWidth: 0; - scale: 8; - fillColor: Color random) element. - elem @ RTDraggable. - view add: elem. - ]. - ^ view -] - -{ #category : #accessing } -RTSVGExample >> label [ - ^ 'SVG' -] - -{ #category : #basic } -RTSVGExample >> rabbit [ - - - - | v s elements | - v := RTView new. -v @ RTDraggableView. -s := RTSVGPath new path: 'M397.49,222.581c-31.734-6.53-70.661,22.749-95.237,63.244c-11.35-13.957-25.565-26.455-42.892-37.536 - c-10.193-6.521-16.261-13.093-16.63-18.03c-0.771-10.444,18.708-27.653,32.917-40.218c10.427-9.212,20.284-17.913,27.594-27.234 - c13.411-17.141,16.73-38.533,8.684-55.842c-6.17-13.261-18.105-22.246-33.025-25.314c-2.146-6.379-5.666-12.339-10.353-17.351 - C259.932,55.08,248.297,50,235.757,50c-14.669,0-37.167,6.974-61.005,40.184c-7.159,9.958-12.422,19.791-17.083,28.475 - c-10.427,19.455-17.971,33.512-41.576,43.436C74.409,179.605,50,221.08,50,252.404c0,23,16.287,33.932,26.396,40.729 - c12.573,8.449,17.267,11.609,12.154,30.629c-6.505,24.023-3.487,43.117,7.326,56.697C54.836,395.479,64.895,462,117.602,462 - c29.807,0,82.062,0,185.07,0c10.998,0,20.988-2.582,29.472-7.058c11.366,4.644,23.034,7.058,35.255,7.058 - C422.336,462,462,410.115,462,343.543C462,287.5,434.842,230.25,397.49,222.581z M393.4,242.379 - c16.865,3.461,33.16,25.993,41.91,55.422l-4.979,2.213l-10.008-10.847l-13.429,6.035l-9.975-10.854l-13.429,6.019l-9.957-10.838 - l-13.429,6.043l-9.958-10.838l-13.412,6.043l-3.688-4.039C352.697,253.167,376.568,238.917,393.4,242.379z M302.672,427.667H200.669 - c-20.318,0-21.073-34.267,6.253-31.718c9.64,0.889,23.939,4.928,45.163,13.109c-21.19-10.461-63.302-73.294-6.806-115.506 - c-52.204,17.87-55.021,56.361-53.646,73.662c-32.992,0-46.202,33.327-37.636,60.452H117.2c-16.764,0-21.324-29.505,18.374-37.82 - c-28.164-34.87-11.718-61.29-11.718-78.491c0-27.351-17.72-39.262-29.187-46.965c-26.286-17.669,5.767-58.616,34.065-70.511 - c34.534-14.518,46.554-36.948,58.206-58.65c8.55-15.993,19.162-34.568,34.032-45.087c18.139-12.833,30.679-2.331,25.632,14.124 - c-5.247,17.041-24.191,45.574-34.584,59.195c11.735-12.456,35.406-41.575,53.813-47.015c13.471-3.982,24.267,8.357,11.392,24.836 - c-5.373,6.865-14.107,14.568-23.328,22.724c-21.827,19.262-46.538,41.098-44.459,68.885c1.207,16.161,10.36,31.508,29.975,42.824 - c37.375,21.559,59.941,59.496,62.422,100.217c0.369,5.801,3.554,11.015,8.482,13.865 - C333.82,403.408,329.293,427.667,302.672,427.667z M352.73,440.24c-0.973-0.201-1.777-0.553-2.699-0.771 - c3.336-4.777,5.851-10.176,7.359-16.127c1.106-4.275,1.475-8.566,1.441-12.824l13.379-5.985l9.99,10.829l13.429-6.001l9.976,10.829 - l13.479-6.035l0.469,0.504C404.398,434.104,381.766,446.208,352.73,440.24z M439.1,371.238c-1.979,9.656-5.297,19.212-9.79,28.029 - l-5.868-6.32l-13.444,6.02l-10.024-10.863l-13.412,6.035l-9.992-10.848l-13.41,6.02l-9.959-10.83l-4.123,1.844 - c-3.891-5.615-8.701-10.83-14.652-15.322c-0.504-4.711-1.309-9.254-2.18-13.78c4.945-1.659,8.986-5.6,10.125-11.064 - c1.678-8.198-3.604-16.212-11.801-17.904c-2.381-0.47-4.695-0.235-6.874,0.353c-2.581-6.287-5.432-12.423-8.817-18.257 - c2.363-4.501,4.76-8.994,7.477-13.16l10.025,10.805l13.41-6.019l9.926,10.838l13.444-6.043l9.958,10.838l13.445-6.043l9.991,10.854 - l13.429-6.035l9.975,10.863l13.445-6.035C442.587,333.149,442.955,352.529,439.1,371.238z M152.707,225.648 - c2.381,8.407-3.185,17.401-12.506,20.067c-9.304,2.64-18.776-2.045-21.207-10.469c-2.397-8.433,3.202-17.41,12.506-20.05 - C140.821,212.53,150.292,217.216,152.707,225.648z M357.206,343.208c1.693-8.181,9.69-13.479,17.888-11.785 - s13.479,9.673,11.803,17.888c-1.711,8.181-9.707,13.479-17.904,11.785C360.794,359.402,355.514,351.389,357.206,343.208z - M413.518,370.232c-8.197-1.643-13.479-9.689-11.785-17.854c1.693-8.215,9.689-13.496,17.887-11.819 - c8.182,1.692,13.479,9.706,11.786,17.904C429.712,366.645,421.699,371.942,413.518,370.232z'. - -s color: Color black. -elements := s elementsOn: (1 to: 40). - -v addAll: elements. - -RTGridLayout on: elements. - -^ v -] - -{ #category : #icons } -RTSVGExample >> rabbitIcon [ - ^ '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 -g8UTxgAAAABJRU5ErkJggg==' -] - -{ #category : #basic } -RTSVGExample >> rotatingIcons [ - - - " - self new rotatingIcons - " - | view randInt rand | - rand := Random new. - randInt := [ :n | (rand next * n) asInteger ]. - view := RTView new. - RTSVGPath icons do: [ :icon | - |elem| - elem := (RTSVGPath new - path: (RTSVGPath perform: icon); - borderWidth: 0; - scale: 5; - fillColor: Color random) element. - elem @ RTDraggable. - view add: elem. - elem translateBy: (randInt value: 400) @ (randInt value: 400). - view addAnimation: (RTRotationMove angle: 100 during: (randInt value: 90) + 10 on: elem). - ]. - ^ view -] - -{ #category : #basic } -RTSVGExample >> simpleBezier [ - - - - " - self new simpleBezier - " - | view element | - view := RTView new. - element := (RTSVGPath new - path: 'M600,800 C625,700 725,700 750,800 S875,900 900,800 z'; - fillColor: Color blue) element. - view add: element. - ^ view -] - -{ #category : #icons } -RTSVGExample >> simpleBezierIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAC80lEQVR4XuXbv0sbYRjA8cuh -YrIp+I+Ii2jMoGNmXf0nJLgZBCWjIC3YoQW3IkiibRqNqZqEYkloSFu6tVmSDiVQQoeSNM/1 -UodKaX7fvbnL9wvPqpCPdx7Pe9EMg5+T0vgfAR+EHx+ED8KPD8IH4ccH4YPw44PwQfjxQfjx -Qfgg/PggfBB+fBA+CD8+CB+EHx+EHx+ED8KPD8IH4ccH4YPw44PwQfjxQfjxQfgg/PggfBB+ -fBA+iB1dXFxJKPRFZmcfydTUc9H1lzI5eSAbG58kEnkmfBBFRSIJ8Xgyopm/vfP8MoLBpNRq -NeGD2FA+X5Dp6eseIP6dH8beXkr4IBYWjxdMiJ9G/xh/Z3V1/G9jSkBOTz/IMBAPZ3HxWvgg -Q3RzkzUxxLAKpDVra4+FDzJA9XrdfHKy7up4OEdHb4QP0md+/7ktGPfz3RjHpy/bQJLJ1zZi -3I/ff8YH6bWZmVe2g7SmWPwofJAuJRKXSjBas7x8yQfp1vz8uTKQ1hNco9EQPkinH2rxY263 -CYdjfJB27e8fi0qM1vh8x3yQdi0sxJWDaBr/f0jb0um0jGK83pD5h5A2VE+lUhHXbnvtbGfn -nfIrU9cL4tptr92VSiXlIJubeT5IpzyeE6Uod3c5PkindnejykAmJqLiuuXiSJ5SNDW3rsPD -BB+kl7a37d+h6bp9h2Rj+RqQrmdsRYnH+SB9lUqlbQMJBE7EdbssJxQMHoj1t6q0NJtNPsig -raxYt3X2eD5LoVAUV257nVQgcCbDXxnvJZtVc4aPeLd3ff3JwChzc2+lXC6La5eLTu32NiM+ -X6IPmG/G1pb6cxbc2++x2AtZWroyYb7+F8LrfSrhcHRk5yvoryOIWS6X+7O+r1arjjjk4n8/ -xGmrH/5HwAfhxwfhg/Djg/BB+PFB+CD8+CB8EH58EH58ED4IPz4IH4QfH4QPwo8Pwgfhxwfh -xwfhg/Djg/BB+PFB+CD8+CB8EH58EH58ED4IPz4IH4Sfdf0GPXVIS+o1L8IAAAAASUVORK5C -YII=' -] - -{ #category : #basic } -RTSVGExample >> simpleExample [ - - - " - self new simpleExample - " - | view element | - view := RTView new. - element := (RTSVGPath new - path: 'M 100 100 L 300 100 L 200 300 z'; - fillColor: Color green) element. - element @ RTDraggable. - view add: element. - ^ view -] - -{ #category : #basic } -RTSVGExample >> southAmerica [ - - - - " - self new southAmerica - " - | view | - view := RTView new. - RTSVGPath southAmerica do: [ :country | - |elem| - elem := (RTSVGPath new - path: (RTSVGPath perform: country); - fillColor: Color random; - scale: 2; - borderWidth: 0.5) element model: (country asString). - elem @ RTPopup. - view add: elem. - ]. - ^ view -] - -{ #category : #basic } -RTSVGExample >> southAmerica2 [ - - - - " - self new southAmerica2 - " - | view cn | - cn := RTNColorLinearNormalizer inContext: (RTSVGPath southAmerica collect: #size) - lowColor: (Color r:0.3 g:0.8 b:0.3) - highColor: (Color r:0.8 g:0.3 b:0.3). - - view := RTView new. - RTSVGPath southAmerica do: [ :country | - |elem| - elem := (RTSVGPath new - path: (RTSVGPath perform: country); - fillColor: (cn rtValue: country size); - scale: 2) element. - elem @ RTDraggable. - view add: elem. - ]. - ^ view -] - -{ #category : #icons } -RTSVGExample >> southAmericaIcon [ - ^ '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' -] - -{ #category : #basic } -RTSVGExample >> theWorld [ -" - " - - " - self new theWorld - " - | view | - view := RTView new. - RTSVGPath countries do: [ :country | - | elem | - elem := (RTSVGPath new - path: (RTSVGPath perform: country); - fillColor: Color random; - scale: 1) element model: (country asString). - elem @ RTPopup. - view add: elem. - ]. - ^ view -] - -{ #category : #icons } -RTSVGExample >> theWorldIcon [ - ^ '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' -] - -{ #category : #basic } -RTSVGExample >> veryBasic [ - - - - | view element | - view := RTView new. - element := (RTSVGPath new - path: 'M 100 100 L 300 100 L 200 300 z'; - fillColor: Color green) element. - element @ RTDraggable. - view add: element. - ^ view - -] - -{ #category : #icons } -RTSVGExample >> veryBasicIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAACCElEQVR4XuXbzXGCUABFYQpy -sA6tLs0oBWTlTDrBAlg9ollksjCJP8A7l3Md9+I3RxG1GUf/SGv8T4EfxD8/iB/EPz+IH8Q/ -P4gfxD8/iB/EPz+If34QP4h/fhA/iH9+ED+If34QP4h/fhD//CB+EP/8IH4Q//wgfhD//CB+ -EP/8IP6BQDZvm9K8NyP1fj6fiwrk9HEql0NH3nbdrihfstpjy0O5PKK+750gxEpq1oF4U0dV -UrkOBAipktp1YE57EZUA6sCAECoh1IH6YLjttsVeBwqkZiWUOnCXTqpUAqoDB1KjElIdyIuL -7WHBMy5YHUiQJSuh1YG9/L5IJcA6sCBLVEKsAwsyeyXQOtAgc1ZCrQMNMlsl4DrwIHNUQq4D -DzJ5JfA6IkCmrIReRwTIVyVTfF8SUEcMyBSV7Lt9STjWmB/KvVRJSB1RIK9UklJHFMjTZ1xB -dcSBPFNJUh1xIA9XElZHJMgjlaTVEQlydyWBdcSC3FNJYh2xIP9WElpHNMhflaTWEQ3yayXB -dcSD3KokuY54kOu2xx+/diz1/hvoB7lRSXodqwD5rmQFdawG5FrJGupYDch1wzD4Qfzzg/hB -/POD+EH884P45wfxg/jnB/GD+OcH8YP45wfxg/jnB/HPD+IH8c8P4gfxzw/iB/HPD+IH8c8P -4p8fxA/inx/ED+KfH2St+wTjNjdgljtjMQAAAABJRU5ErkJggg==' -] diff --git a/src/Roassal2/RTSVGExporter.class.st b/src/Roassal2/RTSVGExporter.class.st deleted file mode 100644 index 9e1e4b1ce..000000000 --- a/src/Roassal2/RTSVGExporter.class.st +++ /dev/null @@ -1,269 +0,0 @@ -" -A RTSVGExporter is an exporter to get SVG files from RTBuilders or RTViews. - -For exporting from a RTView, use the ""exportViewAsSVG:"" method. - -For exporting a RTBuilder (or any subclasses) use the ""exportBuilderAsSVG:"" method. -" -Class { - #name : #RTSVGExporter, - #superclass : #RTObject, - #instVars : [ - 'view', - 'stream', - 'fileName', - 'backgroundColor', - 'code', - 'canvasWidth', - 'canvasHeight', - 'finalWidth', - 'finalHeight' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #'as yet unclassified' } -RTSVGExporter class >> exportBuilderAsSVG: aRTBuilder [ - - ^self exportViewAsSVG: (aRTBuilder view) -] - -{ #category : #'as yet unclassified' } -RTSVGExporter class >> exportBuilderAsSVG: aRTBuilder filename: aString [ - ^self exportViewAsSVG: (aRTBuilder view) filename: aString -] - -{ #category : #'as yet unclassified' } -RTSVGExporter class >> exportViewAsSVG: aRTView [ - - ^ self new view: aRTView; exportToFile -] - -{ #category : #'as yet unclassified' } -RTSVGExporter class >> exportViewAsSVG: aRTView filename: aString [ - - ^ self new view: aRTView; fileName: aString; exportToFile -] - -{ #category : #'as yet unclassified' } -RTSVGExporter class >> interactiveExportBuilderAsSVG: aRTBuilder [ - - ^self interactiveExportViewAsSVG: (aRTBuilder view) -] - -{ #category : #'as yet unclassified' } -RTSVGExporter class >> interactiveExportViewAsSVG: aRTView [ - - ^ self new view: aRTView; interactiveExportToFile -] - -{ #category : #svg } -RTSVGExporter >> addCanvasColor [ - stream - nextPutAll: - ('style="background-color: rgba(<1p>,<2p>,<3p>,<4p>);float:left" ' - expandMacrosWith: (backgroundColor red * 256) rounded - with: (backgroundColor green * 256) rounded - with: (backgroundColor blue * 256) rounded - with: backgroundColor alpha) -] - -{ #category : #svg } -RTSVGExporter >> addCanvasSize: bounds [ - |pair| - pair := self getFinalBounds: bounds. - stream - nextPutAll: ('width="<1p>px" height="<2p>px" ' expandMacrosWith: pair first with: pair second). -] - -{ #category : #svg } -RTSVGExporter >> addCode [ - | lines hightStart step| - code ifNil: [ ^self ]. - lines := code lines allButFirst. - step := (TRLabelShape new - text: lines first; - encompassingRectangle) height. - hightStart := (step / 2) rounded. - stream - nextPutAll: - '' , String cr. - lines do: [ :l | - stream - nextPutAll: String cr,'',l,''. - hightStart := hightStart + step] -] - -{ #category : #svg } -RTSVGExporter >> addEnd [ - - stream - nextPutAll: ''. -] - -{ #category : #svg } -RTSVGExporter >> addStart: bounds [ - self - addVersion; - addCanvasSize: bounds; - addCanvasColor; - addXLinkVersion; - addCode. -] - -{ #category : #svg } -RTSVGExporter >> addVersion [ - stream nextPutAll: '> addXLinkVersion [ - stream - nextPutAll: String cr; - nextPut: Character tab; - nextPutAll: 'xmlns:xlink="http://www.w3.org/1999/xlink">'; - nextPutAll: String cr -] - -{ #category : #accessing } -RTSVGExporter >> backgroundColor [ - ^ backgroundColor -] - -{ #category : #accessing } -RTSVGExporter >> backgroundColor: aColor [ - backgroundColor := aColor -] - -{ #category : #accessing } -RTSVGExporter >> builder: builder filename: aName [ - self view: builder view filename: aName -] - -{ #category : #accessing } -RTSVGExporter >> code: aString [ - code := aString -] - -{ #category : #configuration } -RTSVGExporter >> defaultBackgroundColor [ - ^ Color white -] - -{ #category : #exporting } -RTSVGExporter >> exportOnStream: fileStream [ - | bounds | - bounds := self fixedEncompassingRectangle. - self stream: fileStream. - self addStart: bounds. - RTSVGVisitor visit: view on: stream canvas: bounds. - self addEnd. -] - -{ #category : #exporting } -RTSVGExporter >> exportToFile [ - - | file | - file := self fileName asFileReference. - file exists ifTrue: [ file delete ]. - self fileName asFileReference writeStreamDo: [: fileStream | - self exportOnStream: fileStream ] -] - -{ #category : #accessing } -RTSVGExporter >> fileName [ - fileName = nil - ifTrue: [ fileName := (Time current asString copyReplaceAll: ':' with: '') squeezeOutNumber asString. - fileName := 'output',fileName.]. - ^ fileName -] - -{ #category : #accessing } -RTSVGExporter >> fileName: anObject [ - fileName := anObject -] - -{ #category : #util } -RTSVGExporter >> fixedEncompassingRectangle [ - ^ self view canvas encompassingRectangle -] - -{ #category : #svg } -RTSVGExporter >> getFinalBounds: bounds [ - canvasWidth := (bounds width + 2) rounded. - canvasHeight := (bounds height + 2) rounded. - finalWidth := canvasWidth. - finalHeight := canvasHeight. - code = nil - ifFalse: [ | maxW line w h| - maxW := 0. - line := ''. - code lines do: [ :l | - maxW := maxW max: l size. - maxW = l size - ifTrue: [ line := l ]. - ]. - w := (TRLabelShape new - text: line; - width). - h := (TRLabelShape new - text: line; - height). - finalWidth := canvasWidth + w. - finalHeight := canvasHeight max: (h * code lines size) - ]. - ^ Array with: finalWidth with: finalHeight -] - -{ #category : #initialization } -RTSVGExporter >> initialize [ - super initialize. - backgroundColor := self defaultBackgroundColor -] - -{ #category : #exporting } -RTSVGExporter >> interactiveExportToFile [ - - | fileStream fileRef | - - fileRef := TRPlatform current - dialogRequestSaveFilename: 'Export as SVG' - extensions: #('svg') - path: nil. - - fileRef ifNil: [ TRPlatform current inform: 'Saving cancelled'. ^ self ]. - - fileStream := fileRef writeStream. - [ self exportOnStream: fileStream ] - ensure: [ fileStream notNil ifTrue: [ fileStream close ] ] -] - -{ #category : #accessing } -RTSVGExporter >> stream [ - - ^stream -] - -{ #category : #accessing } -RTSVGExporter >> stream: aStream [ - - stream := aStream -] - -{ #category : #accessing } -RTSVGExporter >> view [ - - ^view -] - -{ #category : #accessing } -RTSVGExporter >> view: aView [ - self backgroundColor: aView canvas color. - view := aView. -] - -{ #category : #accessing } -RTSVGExporter >> view: aView filename: aName [ - self view: aView. - self fileName: aName. -] diff --git a/src/Roassal2/RTSVGExporterExample.class.st b/src/Roassal2/RTSVGExporterExample.class.st deleted file mode 100644 index b8512a9ed..000000000 --- a/src/Roassal2/RTSVGExporterExample.class.st +++ /dev/null @@ -1,23 +0,0 @@ -" -A RTSVGExporterExample is the example class for RTSVGExporter. -" -Class { - #name : #RTSVGExporterExample, - #superclass : #RTObject, - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #simple } -RTSVGExporterExample >> exampleDependencyAnalyzerBuilder [ - - "self new exampleDependencyAnalyzerBuilder" - | b | - b := RTMondrian new. - b nodes: Collection withAllSubclasses. - b edges connectFrom: #superclass. - b layout tree. - ^ b view. - - "This line does the export." - "RTSVGExporter exportBuilderAsSVG: b filename:'exampleDependencyAnalyzerBuilder'." -] diff --git a/src/Roassal2/RTSVGExporterTest.class.st b/src/Roassal2/RTSVGExporterTest.class.st deleted file mode 100644 index dd73d16a3..000000000 --- a/src/Roassal2/RTSVGExporterTest.class.st +++ /dev/null @@ -1,32 +0,0 @@ -Class { - #name : #RTSVGExporterTest, - #superclass : #RTTest, - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #tests } -RTSVGExporterTest >> testBasic [ - - | b str | - b := RTMondrian new. - b nodes: Collection withAllSubclasses. - b edges connectFrom: #superclass. - b layout tree. - b build. - - str := WriteStream on: String new. - RTSVGExporter new view: b view; exportOnStream: str -] - -{ #category : #tests } -RTSVGExporterTest >> testEmpty [ - - | v str | - v := RTView new. - - str := WriteStream on: String new. - RTSVGExporter new view: v; exportOnStream: str. - self assert: str contents equals: ' -' -] diff --git a/src/Roassal2/RTSVGGroupPopup.class.st b/src/Roassal2/RTSVGGroupPopup.class.st deleted file mode 100644 index 5b188b49f..000000000 --- a/src/Roassal2/RTSVGGroupPopup.class.st +++ /dev/null @@ -1,49 +0,0 @@ -" -A RTSVGGroupPopup is a RTGroup popup. -" -Class { - #name : #RTSVGGroupPopup, - #superclass : #RTSVGPopup, - #instVars : [ - 'group' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #'as yet unclassified' } -RTSVGGroupPopup class >> on: anExporter targets: aRTShape group: aGroupBlock [ - | generator | - generator := [ :e | self new target: e; group: aGroupBlock; yourself ]. - self on: anExporter targets: aRTShape generator: generator -] - -{ #category : #adding } -RTSVGGroupPopup >> addEventHandlers: aStream id: aString element: aRTElement center: aNumber [ - | visitor myGroup | - myGroup := self group. - aStream nextPutAll: ''; - nextPutAll: String cr. - visitor := RTSVGVisitor new stream: aStream; center: aNumber; yourself. - visitor canvas: myGroup encompassingRectangle. - visitor visitGroup: myGroup. - aStream - nextPutAll: '' -] - -{ #category : #accessing } -RTSVGGroupPopup >> group [ - ^ group -] - -{ #category : #accessing } -RTSVGGroupPopup >> group: anObject [ - group := anObject -] - -{ #category : #initialization } -RTSVGGroupPopup >> initialize [ - super initialize. - group := [ :m | RTGroup new add: ((RTElement on: m) + (RTBox new color: Color blue; yourself)); yourself] -] diff --git a/src/Roassal2/RTSVGHightlight.class.st b/src/Roassal2/RTSVGHightlight.class.st deleted file mode 100644 index dc4fab6d7..000000000 --- a/src/Roassal2/RTSVGHightlight.class.st +++ /dev/null @@ -1,83 +0,0 @@ -" -A RTSVGHightlight is hightlight of SVG elements. - -Highlighting of edges is NOT supported. -" -Class { - #name : #RTSVGHightlight, - #superclass : #RTSVGInteraction, - #instVars : [ - 'color' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #'as yet unclassified' } -RTSVGHightlight class >> on: anExporter color: aColor targets: aRTShape [ - | generator | - generator := [ :e | self new target: e; color: aColor; yourself ]. - self on: anExporter targets: aRTShape generator: generator -] - -{ #category : #adding } -RTSVGHightlight >> addEventHandlers: aStream id: aString element: element center: aNumber [ - aStream - nextPutAll: 'hightlight ' -] - -{ #category : #adding } -RTSVGHightlight >> addFunctions: aStream [ - | attr | - attr := self targetColorAttribute. - aStream - nextPutAll: ' var color; - function hightlight(evt) { - if (evt.target.id == "BackDrop") - return; - if (!evt.target.classList.contains("hightlight")) - return; - var affected = evt.target; - if (color == affected.style["',attr,'"] || color == null) { - color = affected.style["',attr,'"]; - affected.style["',attr,'"] = "',self color asHTMLColor,'"; - } - }; - - function unHightlight(evt) { - if (evt.target.id == "BackDrop") - return; - if (!evt.target.classList.contains("hightlight")) - return; - var affected = evt.target; - affected.style["',attr,'"] = color; - color = null; - }'; - nextPutAll: String cr. -] - -{ #category : #adding } -RTSVGHightlight >> addGlobalHandlers: aStream [ - aStream - nextPutAll: ' - onmouseover="hightlight(evt)" - onmouseout="unHightlight(evt)" -' -] - -{ #category : #accessing } -RTSVGHightlight >> color [ - ^ color -] - -{ #category : #accessing } -RTSVGHightlight >> color: anObject [ - color := anObject -] - -{ #category : #initialization } -RTSVGHightlight >> initialize [ - color := Color red. - contained := true. - external := false. - self type: 'hightlight'. -] diff --git a/src/Roassal2/RTSVGInteraction.class.st b/src/Roassal2/RTSVGInteraction.class.st deleted file mode 100644 index 0773e872b..000000000 --- a/src/Roassal2/RTSVGInteraction.class.st +++ /dev/null @@ -1,115 +0,0 @@ -" -A RTSVGInteraction represents ay interaction present on a SVG export. It translates itself as javascript functions applied to SVG elements using its ""id"" or ""class"" attributes as anchor. - -The type field represents both the interaction type and how it will be translated to javascript, it is used to set the actual interactions to exactly the right elements. - -The target refers to the Roassal elements (as members of a class) affected by this interaction. - -Both contained and external are booleans used to determine where to insert the code in javascript. This position WIDELY varies, depending on the intended interaction. -" -Class { - #name : #RTSVGInteraction, - #superclass : #RTObject, - #instVars : [ - 'type', - 'target', - 'contained', - 'external' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #'as yet unclassified' } -RTSVGInteraction class >> on: anExporter targets: aRTShape [ - | generator | - generator := [ :e | self new target: e; yourself ]. - self on: anExporter targets: aRTShape generator: generator -] - -{ #category : #'as yet unclassified' } -RTSVGInteraction class >> on: anExporter targets: aRTShape generator: generator [ - | interaction | - anExporter view elements - do: [ :e | - e trachelShape class = aRTShape - ifTrue: [ - interaction := generator value: e. - anExporter interactions at: e ifAbsent: [ anExporter interactions at: e put: OrderedCollection new ]. - (anExporter interactions at: e) add: interaction ] ] -] - -{ #category : #adding } -RTSVGInteraction >> addEventHandlers: aStream id: aString element: aRTElement center: aPoint [ - self subclassResponsibility -] - -{ #category : #adding } -RTSVGInteraction >> addFunctions: aStream [ - self subclassResponsibility -] - -{ #category : #adding } -RTSVGInteraction >> addGlobalHandlers: aStream [ - self subclassResponsibility -] - -{ #category : #accessing } -RTSVGInteraction >> contained [ - ^contained -] - -{ #category : #accessing } -RTSVGInteraction >> external [ - ^external -] - -{ #category : #initialization } -RTSVGInteraction >> initialize [ - super initialize. - self type: 'interaction' -] - -{ #category : #accessing } -RTSVGInteraction >> target [ - ^ target -] - -{ #category : #accessing } -RTSVGInteraction >> target: anObject [ - target := anObject -] - -{ #category : #adding } -RTSVGInteraction >> targetColorAttribute [ - self target trachelShape class = TRArcShape ifTrue: [ ^'fill' ]. - self target trachelShape class = TRBezierShape ifTrue: [ ^'stroke' ]. - self target trachelShape class = TRBoxShape ifTrue: [ ^'fill' ]. - self target trachelShape class = TREllipseShape ifTrue: [ ^'fill' ]. - self target trachelShape class = TRLabelShape ifTrue: [ ^'fill' ]. - self target trachelShape class = TRLineShape ifTrue: [ ^'stroke' ]. - self target trachelShape class = TRRotatedLabelShape ifTrue: [ ^'fill' ]. - self target trachelShape class = TRSVGPath ifTrue: [ ^'fill' ]. - self error: 'Should not be here' -] - -{ #category : #adding } -RTSVGInteraction >> targetNameAttribute [ - self target trachelShape class = TRArcShape ifTrue: [ ^'arc' ]. - self target trachelShape class = TRBezierShape ifTrue: [ ^'bezier' ]. - self target trachelShape class = TRBoxShape ifTrue: [ ^'rect' ]. - self target trachelShape class = TREllipseShape ifTrue: [ ^'ellipse' ]. - self target trachelShape class = TRLabelShape ifTrue: [ ^'text' ]. - self target trachelShape class = TRLineShape ifTrue: [ ^'line' ]. - self target trachelShape class = TRRotatedLabelShape ifTrue: [ ^'text' ]. - self target trachelShape class = TRSVGPath ifTrue: [ ^'p' ]. -] - -{ #category : #accessing } -RTSVGInteraction >> type [ - ^ type -] - -{ #category : #accessing } -RTSVGInteraction >> type: anObject [ - type := anObject -] diff --git a/src/Roassal2/RTSVGLine.class.st b/src/Roassal2/RTSVGLine.class.st deleted file mode 100644 index 2cfb2a9d6..000000000 --- a/src/Roassal2/RTSVGLine.class.st +++ /dev/null @@ -1,70 +0,0 @@ -" -A RTSVGLine is represents the SVG line of a regular line, as defined in Roassal. -" -Class { - #name : #RTSVGLine, - #superclass : #RTSVGAbstractLine, - #instVars : [ - 'extent' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #adding } -RTSVGLine >> addOn: stream using: aSVGVisitor [ - - self id: (aSVGVisitor nameFor: self element). - self openDef: stream. - self addPosition: stream. - self startStyle: stream. - self addStrokeColor: stream. - self addStrokeOpacity: stream. - self addStrokeWidth: stream. - self closeTag: stream. - self decoration ifNotNil: [ self addMarker: stream ]. - self startClass: stream. - self closeTag: stream. - self addExternalInteractions: aSVGVisitor. - self closeDef: stream. - -] - -{ #category : #adding } -RTSVGLine >> addPosition: stream [ - stream - nextPutAll: - ('x1="<1p>" y1="<2p>" ' expandMacrosWith: self position x rounded with: self position y rounded); - nextPutAll: - ('x2="<1p>" y2="<2p>" ' expandMacrosWith: self extent x rounded with: self extent y rounded). -] - -{ #category : #accessing } -RTSVGLine >> element: anElement from: aPoint to: anotherPoint width: anInteger color: aColor [ - self element: anElement. - self position: aPoint. - self extent: anotherPoint. - self strokeWidth: anInteger. - self strokeColor: aColor. -] - -{ #category : #accessing } -RTSVGLine >> element: anElement from: aPoint to: anotherPoint width: anInteger color: aColor decoration: aLineDecoration [ - self element: anElement from: aPoint to: anotherPoint width: anInteger color: aColor. - self decoration: aLineDecoration -] - -{ #category : #accessing } -RTSVGLine >> extent [ - ^ extent -] - -{ #category : #accessing } -RTSVGLine >> extent: anObject [ - extent := anObject -] - -{ #category : #initialization } -RTSVGLine >> initialize [ - self type: 'line'. - self label: 'line' -] diff --git a/src/Roassal2/RTSVGLink.class.st b/src/Roassal2/RTSVGLink.class.st deleted file mode 100644 index 812e9afe4..000000000 --- a/src/Roassal2/RTSVGLink.class.st +++ /dev/null @@ -1,54 +0,0 @@ -" -A RTSVGLink is a link (to an external browser) when clicking a certain element. -" -Class { - #name : #RTSVGLink, - #superclass : #RTSVGInteraction, - #instVars : [ - 'link' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #'as yet unclassified' } -RTSVGLink class >> on: anExporter link: anHref targets: aRTShape [ - | generator | - generator := [ :e | self new target: e; link: anHref; yourself ]. - self on: anExporter targets: aRTShape generator: generator -] - -{ #category : #adding } -RTSVGLink >> addEventHandlers: aStream id: aString element: aRTElement center: aNumber [ - aStream - nextPutAll: ''. - "return the missing closing" - ^'' -] - -{ #category : #adding } -RTSVGLink >> addFunctions: aStream [ - "do nothing" -] - -{ #category : #adding } -RTSVGLink >> addGlobalHandlers: aStream [ - "do nothing" -] - -{ #category : #accessing } -RTSVGLink >> initialize [ - link := [:a |'http://objectprofile.com/']. - self type: 'link'. - contained := false. - external := false. -] - -{ #category : #accessing } -RTSVGLink >> link [ - ^ link -] - -{ #category : #accessing } -RTSVGLink >> link: anObject [ - link := anObject -] diff --git a/src/Roassal2/RTSVGOval.class.st b/src/Roassal2/RTSVGOval.class.st deleted file mode 100644 index d71cc05af..000000000 --- a/src/Roassal2/RTSVGOval.class.st +++ /dev/null @@ -1,91 +0,0 @@ -" -A RTSVGOval is the SVG Ellipse that translates from Roassal's Ellipse. -" -Class { - #name : #RTSVGOval, - #superclass : #RTSVGEntity, - #instVars : [ - 'box', - 'rx', - 'ry' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #adding } -RTSVGOval >> addOn: stream using: aSVGVisitor [ - aSVGVisitor names at: self element put: self id. - self openDef: stream. - self addPosition: stream. - self addWidth: (self rx) height: (self ry) into: stream. - self startStyle: stream. - self addFillColor: stream. - self addFillOpacity: stream. - ((self strokeWidth) > 0 and: (self strokeColor) ~= nil) - ifTrue: [ - self addStrokeColor: stream. - self addStrokeWidth: stream ]. - self closeTag: stream. - self startClass: stream. - self closeTag: stream. - self addExternalInteractions: aSVGVisitor. - self closeDef: stream. - -] - -{ #category : #adding } -RTSVGOval >> addPosition: stream [ - stream - nextPutAll: - ('cx="<1p>" cy="<2p>" ' expandMacrosWith: self box center x rounded with: self box center y rounded). -] - -{ #category : #adding } -RTSVGOval >> addWidth: x height: y into: stream [ - stream - nextPutAll: - ('rx="<1p>" ry="<2p>" ' expandMacrosWith: x with: y). -] - -{ #category : #accessing } -RTSVGOval >> box [ - ^ box -] - -{ #category : #accessing } -RTSVGOval >> box: anObject [ - box := anObject -] - -{ #category : #accessing } -RTSVGOval >> element: anElement box:aRectangle color: aColor borderWidth: anInteger borderColor: anotherColor [ - self element: anElement; box: aRectangle; fillColor: aColor; strokeColor: anotherColor; strokeWidth: anInteger -] - -{ #category : #initialization } -RTSVGOval >> initialize [ - self type: 'ellipse'. - self label: 'ellipse' -] - -{ #category : #accessing } -RTSVGOval >> rx [ - rx ifNil: [ rx := (box width /2) rounded ]. - ^ rx -] - -{ #category : #accessing } -RTSVGOval >> rx: anObject [ - rx := anObject -] - -{ #category : #accessing } -RTSVGOval >> ry [ - ry ifNil: [ ry := (box height /2) rounded ]. - ^ ry -] - -{ #category : #accessing } -RTSVGOval >> ry: anObject [ - ry := anObject -] diff --git a/src/Roassal2/RTSVGPath.class.st b/src/Roassal2/RTSVGPath.class.st deleted file mode 100644 index 7b48a8ee0..000000000 --- a/src/Roassal2/RTSVGPath.class.st +++ /dev/null @@ -1,1052 +0,0 @@ -" -A RTSVGPath models an SVG Path. -E.g., RTSVGPath new path: 'M150 0 L75 200 L225 200 Z' - -Instance Variables - borderColor: - borderWidth: - curves: - keepInOriginalPosition: - path: - rotation: - scale: - -borderColor - - xxxxx - -borderWidth - - xxxxx - -curves - - xxxxx - -keepInOriginalPosition - - xxxxx - -path - - xxxxx - -rotation - - xxxxx - -scale - - xxxxx - -" -Class { - #name : #RTSVGPath, - #superclass : #RTShape, - #instVars : [ - 'path', - 'borderWidth', - 'borderColor', - 'curves', - 'keepInOriginalPosition' - ], - #category : #'Roassal2-Shapes' -} - -{ #category : #countries } -RTSVGPath class >> Afghanistan [ - ^ 'M630.069,130.876l2.832,1.030l2.059,-0.257l0.517,-1.288l2.058,-0.386l1.546,-0.772l0.515,-2.188l2.317,-0.516l0.387,-1.030l1.285,0.774l0.902,0.128l1.416,0l2.059,0.515l0.773,0.385l2.059,-0.900l0.901,0.515l0.773,-1.287l1.674,0.128l0.386,-0.387l0.256,-1.157l1.160,-0.903l1.543,0.645l-0.384,0.772l0.901,0.129l-0.259,2.317l1.030,0.900l0.904,-0.643l1.285,-0.257l1.674,-1.159l1.802,0.129l2.832,0l0.387,0.773l-1.545,0.385l-1.416,0.516l-3.090,0.256l-2.833,0.517l-1.545,1.287l0.645,1.029l0.257,1.416l-1.287,1.159l0.129,1.029l-0.773,0.902l-2.575,0l1.030,1.673l-1.673,0.772l-1.158,1.545l0.129,1.674l-1.031,0.772l-1.029,-0.257l-2.061,0.386l-0.257,0.644l-2.058,0l-1.417,1.544l-0.129,2.317l-3.476,1.159l-1.931,-0.257l-0.514,0.643l-1.674,-0.386l-2.704,0.386l-4.504,-1.415l2.445,-2.447l-0.129,-1.673l-2.060,-0.515l-0.256,-1.674l-0.902,-2.188l1.158,-1.416l-1.158,-0.386l0.773,-1.930l-1.029,3.477z' -] - -{ #category : #countries } -RTSVGPath class >> Albania [ - ^ 'M520.651,114.27l-0.257,0.900l0.385,1.160l1.029,0.643l0,0.644l-0.901,0.386l-0.128,0.901l-1.288,1.287l-0.386,-0.128l-0.127,-0.644l-1.417,-0.900l-0.259,-1.288l0.259,-1.803l0.256,-0.901l-0.384,-0.386l-0.258,-0.901l1.287,-1.288l0.129,0.516l0.771,-0.258l0.516,0.773l0.643,0.257l-0.130,-1.030z' -] - -{ #category : #countries } -RTSVGPath class >> Algeria [ - ^ 'M497.608,163.703l-9.269,5.150l-7.852,5.276l-3.734,1.288l-2.961,0.257l-0.128,-1.801l-1.159,-0.387l-1.672,-0.772l-0.645,-1.288l-9.139,-5.792l-9.140,-5.922l-10.040,-6.566l0,-0.514l0,-3.347l4.377,-1.931l2.703,-0.514l2.188,-0.644l1.030,-1.417l3.090,-1.029l0.128,-2.061l1.545,-0.128l1.287,-1.030l3.476,-0.515l0.515,-1.030l-0.772,-0.514l-0.902,-2.832l-0.128,-1.674l-1.030,-1.674l2.574,-1.545l2.962,-0.515l1.673,-1.029l2.574,-0.902l4.633,-0.385l4.377,-0.258l1.416,0.385l2.575,-1.028l2.833,0l1.029,0.643l1.930,-0.258l-0.642,1.416l0.514,2.575l-0.642,2.189l-1.674,1.545l0.257,2.059l2.187,1.545l0,0.643l1.674,1.159l1.159,4.763l0.903,2.446l0.126,1.158l-0.513,2.318l0.256,1.158l-0.387,1.546l0.259,1.673l-1.030,1.030l1.546,2.059l0.127,1.159l0.902,1.415l1.286,-0.385l2.060,1.158l-1.288,-1.674z' -] - -{ #category : #icons } -RTSVGPath class >> America [ - ^ 'M16,1.466C7.973,1.466,1.466,7.973,1.466,16c0,8.027,6.507,14.534,14.534,14.534c8.027,0,14.534-6.507,14.534-14.534C30.534,7.973,24.027,1.466,16,1.466zM19.158,23.269c-0.079,0.064-0.183,0.13-0.105,0.207c0.078,0.078-0.09,0.131-0.09,0.17s0.104,0.246,0.052,0.336c-0.052,0.092-0.091,0.223-0.13,0.301c-0.039,0.077-0.131,0.155-0.104,0.272c0.025,0.116-0.104,0.077-0.104,0.194c0,0.116,0.116,0.065,0.09,0.208c-0.025,0.144-0.09,0.183-0.09,0.285c0,0.104,0.064,0.247,0.064,0.286s-0.064,0.17-0.155,0.272c-0.092,0.104-0.155,0.17-0.144,0.233c0.014,0.065,0.104,0.144,0.091,0.184c-0.013,0.037-0.129,0.168-0.116,0.259c0.014,0.09,0.129,0.053,0.155,0.116c0.026,0.065-0.155,0.118-0.078,0.183c0.078,0.064,0.183,0.051,0.156,0.208c-0.019,0.112,0.064,0.163,0.126,0.198c-0.891,0.221-1.818,0.352-2.777,0.352C9.639,27.533,4.466,22.36,4.466,16c0-2.073,0.557-4.015,1.518-5.697c0.079-0.042,0.137-0.069,0.171-0.062c0.065,0.013,0.079,0.104,0.183,0.13c0.104,0.026,0.195-0.078,0.26-0.117c0.064-0.039,0.116-0.195,0.051-0.182c-0.065,0.013-0.234,0-0.234,0s0.183-0.104,0.183-0.169s0.025-0.169,0.129-0.208C6.83,9.655,6.83,9.681,6.765,9.837C6.7,9.993,6.896,9.928,6.973,9.863s0.13-0.013,0.272-0.104c0.143-0.091,0.143-0.143,0.221-0.143c0.078,0,0.221,0.143,0.299,0.091c0.077-0.052,0.299,0.065,0.429,0.065c0.129,0,0.545,0.169,0.624,0.169c0.078,0,0.312,0.09,0.325,0.259c0.013,0.169,0.09,0.156,0.168,0.156s0.26,0.065,0.26,0.13c0,0.065-0.052,0.325,0.078,0.39c0.129,0.064,0.247,0.169,0.299,0.143c0.052-0.026,0-0.233-0.064-0.26c-0.065-0.026-0.027-0.117-0.052-0.169c-0.026-0.051,0.078-0.051,0.117,0.039c0.039,0.091,0.143,0.26,0.208,0.26c0.064,0,0.208,0.156,0.168,0.247c-0.039,0.091,0.039,0.221,0.156,0.221c0.116,0,0.26,0.182,0.312,0.195c0.052,0.013,0.117,0.078,0.117,0.117c0,0.04,0.065,0.26,0.065,0.351c0,0.09-0.04,0.454-0.053,0.597s0.104,0.39,0.234,0.52c0.129,0.13,0.246,0.377,0.324,0.429c0.079,0.052,0.13,0.195,0.247,0.182c0.117-0.013,0.195,0.078,0.299,0.26c0.104,0.182,0.208,0.48,0.286,0.506c0.078,0.026,0.208,0.117,0.142,0.182c-0.064,0.064-0.168,0.208-0.051,0.208c0.117,0,0.156-0.065,0.247,0.053c0.09,0.116,0.208,0.181,0.194,0.26c-0.013,0.077,0.104,0.103,0.156,0.116c0.052,0.013,0.169,0.247,0.286,0.143c0.117-0.104-0.155-0.259-0.234-0.326c-0.078-0.064,0-0.207-0.182-0.35c-0.182-0.143-0.156-0.247-0.286-0.351c-0.13-0.104-0.233-0.195-0.104-0.286c0.13-0.091,0.143,0.091,0.195,0.208c0.052,0.116,0.324,0.351,0.441,0.454c0.117,0.104,0.326,0.468,0.39,0.468s0.247,0.208,0.247,0.208s0.103,0.168,0.064,0.22c-0.039,0.052,0.053,0.247,0.144,0.299c0.09,0.052,0.455,0.22,0.507,0.247c0.052,0.027,0.155,0.221,0.299,0.221c0.142,0,0.247,0.014,0.286,0.053c0.039,0.038,0.155,0.194,0.234,0.104c0.078-0.092,0.09-0.131,0.208-0.131c0.117,0,0.168,0.091,0.233,0.156c0.065,0.065,0.247,0.235,0.338,0.222c0.091-0.013,0.208,0.104,0.273,0.064s0.169,0.025,0.22,0.052c0.054,0.026,0.234,0.118,0.222,0.272c-0.013,0.157,0.103,0.195,0.182,0.234c0.078,0.039,0.182,0.13,0.248,0.195c0.064,0.063,0.206,0.077,0.246,0.116c0.039,0.039,0.065,0.117,0.182,0.052c0.116-0.064,0.092-0.181,0.092-0.181s0.129-0.026,0.194,0.026c0.064,0.05,0.104,0.22,0.144,0.246c0.038,0.026,0.115,0.221,0.063,0.362c-0.051,0.145-0.038,0.286-0.091,0.286c-0.052,0-0.116,0.17-0.195,0.209c-0.076,0.039-0.285,0.221-0.272,0.286c0.013,0.063,0.131,0.258,0.104,0.35c-0.025,0.091-0.194,0.195-0.154,0.338c0.038,0.144,0.312,0.183,0.323,0.312c0.014,0.131,0.209,0.417,0.235,0.546c0.025,0.13,0.246,0.272,0.246,0.453c0,0.184,0.312,0.3,0.377,0.312c0.063,0.013,0.182,0.131,0.272,0.17s0.169,0.116,0.233,0.221s0.053,0.261,0.053,0.299c0,0.039-0.039,0.44-0.078,0.674C19.145,23.021,19.235,23.203,19.158,23.269zM10.766,11.188c0.039,0.013,0.117,0.091,0.156,0.091c0.04,0,0.234,0.156,0.286,0.208c0.053,0.052,0.053,0.195-0.013,0.208s-0.104-0.143-0.117-0.208c-0.013-0.065-0.143-0.065-0.208-0.104C10.805,11.344,10.66,11.152,10.766,11.188zM27.51,16.41c-0.144,0.182-0.13,0.272-0.195,0.286c-0.064,0.013,0.065,0.065,0.09,0.194c0.022,0.112-0.065,0.224,0.063,0.327c-0.486,4.619-3.71,8.434-8.016,9.787c-0.007-0.011-0.019-0.025-0.021-0.034c-0.027-0.078-0.027-0.233,0.064-0.285c0.091-0.053,0.312-0.233,0.363-0.272c0.052-0.04,0.13-0.221,0.091-0.247c-0.038-0.026-0.232,0-0.26-0.039c-0.026-0.039-0.026-0.092,0.104-0.182c0.13-0.091,0.195-0.222,0.247-0.26c0.052-0.039,0.155-0.117,0.195-0.209c0.038-0.09-0.041-0.039-0.118-0.039s-0.117-0.142-0.117-0.207s0.195,0.026,0.339,0.052c0.143,0.024,0.077-0.065,0.064-0.142c-0.013-0.078,0.026-0.209,0.105-0.17c0.076,0.039,0.479-0.013,0.531-0.026c0.052-0.013,0.194-0.246,0.246-0.312c0.053-0.065,0.064-0.129,0-0.168c-0.065-0.04-0.143-0.184-0.168-0.221c-0.026-0.041-0.039-0.274-0.013-0.34c0.025-0.063,0,0.377,0.181,0.43c0.183,0.052,0.286,0.078,0.455-0.078c0.169-0.155,0.298-0.26,0.312-0.363c0.013-0.104,0.052-0.209,0.117-0.246c0.065-0.039,0.104,0.103,0.182-0.065c0.078-0.17,0.156-0.157,0.234-0.299c0.077-0.144-0.13-0.325,0.024-0.43c0.157-0.103,0.43-0.233,0.43-0.233s0.078-0.039,0.234-0.078c0.155-0.038,0.324-0.014,0.376-0.09c0.052-0.079,0.104-0.247,0.182-0.338c0.079-0.092,0.169-0.234,0.13-0.299c-0.039-0.065,0.104-0.352,0.091-0.429c-0.013-0.078-0.13-0.261,0.065-0.416s0.402-0.391,0.416-0.454c0.012-0.065,0.169-0.338,0.154-0.469c-0.012-0.129-0.154-0.285-0.245-0.325c-0.092-0.037-0.286-0.05-0.364-0.154s-0.299-0.208-0.377-0.182c-0.077,0.026-0.208,0.051-0.312-0.015c-0.104-0.063-0.272-0.143-0.337-0.194c-0.066-0.051-0.234-0.09-0.312-0.09s-0.065-0.053-0.182,0.103c-0.117,0.157,0,0.209-0.208,0.182c-0.209-0.024,0.025-0.038,0.144-0.194c0.115-0.155-0.014-0.247-0.144-0.207c-0.13,0.039-0.039,0.117-0.247,0.156c-0.207,0.038-0.207-0.092-0.077-0.117c0.13-0.026,0.363-0.143,0.363-0.194c0-0.053-0.026-0.196-0.13-0.196s-0.078-0.129-0.233-0.297c-0.156-0.17-0.351-0.274-0.508-0.249c-0.154,0.026-0.272,0.065-0.35-0.076c-0.078-0.144-0.169-0.17-0.222-0.247c-0.051-0.078-0.182,0-0.221-0.039s-0.039-0.039-0.039-0.039s-0.169,0.039-0.077-0.078c0.09-0.117,0.129-0.338,0.09-0.325c-0.038,0.013-0.104,0.196-0.168,0.183c-0.064-0.013-0.014-0.04-0.144-0.117c-0.13-0.078-0.337-0.013-0.337,0.052c0,0.065-0.065,0.117-0.065,0.117s-0.039-0.038-0.078-0.117c-0.039-0.078-0.221-0.091-0.312-0.013c-0.09,0.078-0.142-0.196-0.207-0.196s-0.194,0.065-0.26,0.184c-0.064,0.116-0.038,0.285-0.092,0.272c-0.05-0.013-0.063-0.233-0.05-0.312c0.012-0.079,0.155-0.208,0.05-0.234c-0.103-0.026-0.259,0.13-0.323,0.143c-0.065,0.013-0.195,0.104-0.273,0.209c-0.077,0.103-0.116,0.168-0.195,0.207c-0.077,0.039-0.193,0-0.167-0.039c0.025-0.039-0.222-0.181-0.261-0.13c-0.04,0.052-0.155,0.091-0.272,0.144c-0.117,0.052-0.222-0.065-0.247-0.117s-0.079-0.064-0.091-0.234c-0.013-0.168,0.027-0.351,0.065-0.454c0.038-0.104-0.195-0.312-0.286-0.3c-0.091,0.015-0.182,0.105-0.272,0.091c-0.092-0.012-0.052-0.038-0.195-0.038c-0.143,0-0.026-0.025,0-0.143c0.025-0.116-0.052-0.273,0.092-0.377c0.142-0.104,0.091-0.351,0-0.363c-0.092-0.014-0.261,0.039-0.377,0.026c-0.116-0.014-0.208,0.091-0.169,0.207c0.039,0.117-0.065,0.195-0.104,0.183c-0.039-0.013-0.09-0.078-0.234,0.026c-0.142,0.103-0.194,0.064-0.337-0.052c-0.143-0.118-0.299-0.234-0.325-0.416c-0.026-0.182-0.04-0.364,0.013-0.468c0.051-0.104,0.051-0.285-0.026-0.312c-0.078-0.025,0.09-0.155,0.181-0.181c0.092-0.026,0.234-0.143,0.26-0.195c0.026-0.052,0.156-0.04,0.298-0.04c0.143,0,0.169,0,0.312,0.078c0.143,0.078,0.169-0.039,0.169-0.078c0-0.039,0.052-0.117,0.208-0.104c0.156,0.013,0.376-0.052,0.416-0.013s0.116,0.195,0.194,0.143c0.079-0.051,0.104-0.143,0.131,0.014c0.025,0.155,0.09,0.39,0.208,0.429c0.116,0.039,0.052,0.194,0.168,0.207c0.115,0.013,0.17-0.246,0.131-0.337c-0.04-0.09-0.118-0.363-0.183-0.428c-0.064-0.065-0.064-0.234,0.064-0.286c0.13-0.052,0.442-0.312,0.532-0.389c0.092-0.079,0.338-0.144,0.261-0.248c-0.078-0.104-0.104-0.168-0.104-0.247s0.078-0.052,0.117,0s0.194-0.078,0.155-0.143c-0.038-0.064-0.026-0.155,0.065-0.143c0.091,0.013,0.116-0.065,0.078-0.117c-0.039-0.052,0.091-0.117,0.182-0.091c0.092,0.026,0.325-0.013,0.364-0.065c0.038-0.052-0.078-0.104-0.078-0.208c0-0.104,0.155-0.195,0.247-0.208c0.091-0.013,0.207,0,0.221-0.039c0.012-0.039,0.143-0.143,0.155-0.052c0.014,0.091,0,0.247,0.104,0.247c0.104,0,0.232-0.117,0.272-0.129c0.038-0.013,0.286-0.065,0.338-0.078c0.052-0.013,0.363-0.039,0.325-0.13c-0.039-0.09-0.078-0.181-0.118-0.22c-0.039-0.039-0.077,0.013-0.13,0.078c-0.051,0.065-0.143,0.065-0.168,0.013c-0.026-0.051,0.012-0.207-0.078-0.156c-0.092,0.052-0.104,0.104-0.157,0.078c-0.052-0.026-0.103-0.117-0.103-0.117s0.129-0.064,0.038-0.182c-0.09-0.117-0.221-0.091-0.35-0.025c-0.13,0.064-0.118,0.051-0.273,0.09s-0.234,0.078-0.234,0.078s0.209-0.129,0.299-0.208c0.091-0.078,0.209-0.117,0.286-0.195c0.078-0.078,0.285,0.039,0.285,0.039s0.105-0.104,0.105-0.039s-0.027,0.234,0.051,0.234c0.079,0,0.299-0.104,0.21-0.131c-0.093-0.026,0.129,0,0.219-0.065c0.092-0.065,0.194-0.065,0.247-0.09c0.052-0.026,0.092-0.143,0.182-0.143c0.092,0,0.13,0.117,0,0.195s-0.143,0.273-0.208,0.325c-0.064,0.052-0.026,0.117,0.078,0.104c0.104-0.013,0.194,0.013,0.286-0.013s0.143,0.026,0.168,0.065c0.026,0.039,0.104-0.039,0.104-0.039s0.169-0.039,0.221,0.026c0.053,0.064,0.092-0.039,0.053-0.104c-0.039-0.064-0.092-0.129-0.13-0.208c-0.039-0.078-0.091-0.104-0.194-0.078c-0.104,0.026-0.13-0.026-0.195-0.064c-0.065-0.04-0.118,0.052-0.065-0.04c0.053-0.09,0.078-0.117,0.117-0.195c0.039-0.078,0.209-0.221,0.039-0.259c-0.169-0.04-0.222-0.065-0.247-0.143c-0.026-0.078-0.221-0.221-0.272-0.221c-0.053,0-0.233,0-0.247-0.065c-0.013-0.065-0.143-0.208-0.208-0.273c-0.064-0.065-0.312-0.351-0.351-0.377c-0.039-0.026-0.091-0.013-0.208,0.143c-0.116,0.157-0.22,0.183-0.312,0.144c-0.091-0.039-0.104-0.026-0.193-0.13c-0.093-0.104,0.09-0.117,0.051-0.182c-0.04-0.064-0.247-0.091-0.377-0.104c-0.13-0.013-0.221-0.156-0.416-0.169c-0.194-0.013-0.428,0.026-0.493,0.026c-0.064,0-0.064,0.091-0.09,0.234c-0.027,0.143,0.09,0.182-0.027,0.208c-0.116,0.026-0.169,0.039-0.052,0.091c0.117,0.052,0.273,0.26,0.273,0.26s0,0.117-0.092,0.182c-0.09,0.065-0.182,0.13-0.233,0.053c-0.053-0.079-0.195-0.065-0.155,0.013c0.038,0.078,0.116,0.117,0.116,0.195c0,0.077,0.117,0.272,0.039,0.337c-0.078,0.065-0.168,0.014-0.233,0.026s-0.131-0.104-0.078-0.13c0.051-0.026-0.014-0.221-0.014-0.221s-0.155,0.221-0.143,0.104c0.014-0.117-0.064-0.13-0.064-0.221c0-0.091-0.079-0.13-0.194-0.104c-0.118,0.026-0.26-0.04-0.482-0.079c-0.22-0.039-0.311-0.064-0.493-0.156c-0.182-0.091-0.247-0.026-0.338-0.013c-0.091,0.013-0.052-0.182-0.169-0.207c-0.116-0.027-0.181,0.025-0.207-0.144c-0.026-0.168,0.039-0.208,0.324-0.39c0.286-0.182,0.247-0.26,0.468-0.286c0.22-0.026,0.325,0.026,0.325-0.039s0.052-0.325,0.052-0.195S16.95,9.109,16.832,9.2c-0.116,0.091-0.052,0.104,0.04,0.104c0.091,0,0.259-0.091,0.259-0.091s0.208-0.091,0.26-0.013c0.053,0.078,0.053,0.156,0.144,0.156s0.285-0.104,0.116-0.195c-0.168-0.091-0.272-0.078-0.376-0.182s-0.078-0.065-0.195-0.039c-0.116,0.026-0.116-0.039-0.156-0.039s-0.104,0.026-0.13-0.026c-0.025-0.052,0.014-0.065,0.145-0.065c0.129,0,0.285,0.039,0.285,0.039s0.155-0.052,0.194-0.065c0.039-0.013,0.247-0.039,0.208-0.155c-0.04-0.117-0.169-0.117-0.208-0.156s0.078-0.09,0.143-0.117c0.065-0.026,0.247,0,0.247,0s0.117,0.013,0.117-0.039S17.897,8.2,17.976,8.239s0,0.156,0.117,0.13c0.116-0.026,0.143,0,0.207,0.039c0.065,0.039-0.013,0.195-0.077,0.221c-0.065,0.025-0.169,0.077-0.026,0.09c0.144,0.014,0.246,0.014,0.246,0.014s0.092-0.091,0.131-0.169c0.038-0.078,0.104-0.026,0.155,0c0.052,0.025,0.247,0.065,0.065,0.117c-0.183,0.052-0.221,0.117-0.26,0.182c-0.038,0.065-0.053,0.104-0.221,0.065c-0.17-0.039-0.26-0.026-0.299,0.039c-0.039,0.064-0.013,0.273,0.053,0.247c0.063-0.026,0.129-0.026,0.207-0.052c0.078-0.026,0.39,0.026,0.467,0.013c0.078-0.013,0.209,0.13,0.248,0.104c0.039-0.026,0.117,0.052,0.194,0.104c0.078,0.052,0.052-0.117,0.194-0.013c0.144,0.104,0.065,0.104,0.144,0.104c0.076,0,0.246,0.013,0.246,0.013s0.014-0.129,0.144-0.104c0.13,0.026,0.245,0.169,0.232,0.064c-0.012-0.103,0.013-0.181-0.09-0.259c-0.104-0.078-0.272-0.13-0.299-0.169c-0.026-0.039-0.052-0.091-0.013-0.117c0.039-0.025,0.221,0.013,0.324,0.079c0.104,0.065,0.195,0.13,0.273,0.078c0.077-0.052,0.17-0.078,0.208-0.117c0.038-0.04,0.13-0.156,0.13-0.156s-0.391-0.051-0.441-0.117c-0.053-0.065-0.235-0.156-0.287-0.156s-0.194,0.091-0.246-0.039s-0.052-0.286-0.105-0.299c-0.05-0.013-0.597-0.091-0.674-0.13c-0.078-0.039-0.39-0.13-0.507-0.195s-0.286-0.156-0.389-0.156c-0.104,0-0.533,0.052-0.611,0.039c-0.078-0.013-0.312,0.026-0.403,0.039c-0.091,0.013,0.117,0.182-0.077,0.221c-0.195,0.039-0.169,0.065-0.13-0.13c0.038-0.195-0.131-0.247-0.299-0.169c-0.169,0.078-0.442,0.13-0.377,0.221c0.065,0.091-0.012,0.157,0.117,0.247c0.13,0.091,0.183,0.117,0.35,0.104c0.17-0.013,0.339,0.025,0.339,0.025s0,0.157-0.064,0.182c-0.065,0.026-0.169,0.026-0.196,0.104c-0.025,0.078-0.155,0.117-0.155,0.078s0.065-0.169-0.026-0.234c-0.09-0.065-0.117-0.078-0.221-0.013c-0.104,0.065-0.116,0.091-0.169-0.013C16.053,8.291,15.897,8.2,15.897,8.2s-0.104-0.129-0.182-0.194c-0.077-0.065-0.22-0.052-0.234,0.013c-0.013,0.064,0.026,0.129,0.078,0.247c0.052,0.117,0.104,0.337,0.013,0.351c-0.091,0.013-0.104,0.026-0.195,0.052c-0.091,0.026-0.13-0.039-0.13-0.143s-0.04-0.195-0.013-0.234c0.026-0.039-0.104,0.027-0.234,0c-0.13-0.025-0.233,0.052-0.104,0.092c0.13,0.039,0.157,0.194,0.039,0.233c-0.117,0.039-0.559,0-0.702,0s-0.35,0.039-0.39-0.039c-0.039-0.078,0.118-0.129,0.208-0.129c0.091,0,0.363,0.012,0.467-0.13c0.104-0.143-0.13-0.169-0.233-0.169c-0.104,0-0.183-0.039-0.299-0.155c-0.118-0.117,0.078-0.195,0.052-0.247c-0.026-0.052-0.156-0.014-0.272-0.014c-0.117,0-0.299-0.09-0.299,0.014c0,0.104,0.143,0.402,0.052,0.337c-0.091-0.064-0.078-0.156-0.143-0.234c-0.065-0.078-0.168-0.065-0.299-0.052c-0.129,0.013-0.35,0.052-0.415,0.039c-0.064-0.013-0.013-0.013-0.156-0.078c-0.142-0.065-0.208-0.052-0.312-0.117C12.091,7.576,12.182,7.551,12,7.538c-0.181-0.013-0.168,0.09-0.35,0.065c-0.182-0.026-0.234,0.013-0.416,0c-0.182-0.013-0.272-0.026-0.299,0.065c-0.025,0.091-0.078,0.247-0.156,0.247c-0.077,0-0.169,0.091,0.078,0.104c0.247,0.013,0.105,0.129,0.325,0.117c0.221-0.013,0.416-0.013,0.468-0.117c0.052-0.104,0.091-0.104,0.117-0.065c0.025,0.039,0.22,0.272,0.22,0.272s0.131,0.104,0.183,0.13c0.051,0.026-0.052,0.143-0.156,0.078c-0.104-0.065-0.299-0.051-0.377-0.116c-0.078-0.065-0.429-0.065-0.52-0.052c-0.09,0.013-0.247-0.039-0.299-0.039c-0.051,0-0.221,0.13-0.221,0.13S10.532,8.252,10.494,8.2c-0.039-0.052-0.104,0.052-0.156,0.065c-0.052,0.013-0.208-0.104-0.364-0.052C9.818,8.265,9.87,8.317,9.649,8.304s-0.272-0.052-0.35-0.039C9.22,8.278,9.22,8.278,9.22,8.278S9.233,8.33,9.143,8.382C9.052,8.434,8.986,8.499,8.921,8.421C8.857,8.343,8.818,8.343,8.779,8.33c-0.04-0.013-0.118-0.078-0.286-0.04C8.324,8.33,8.064,8.239,8.013,8.239c-0.04,0-0.313-0.015-0.491-0.033c2.109-2.292,5.124-3.74,8.478-3.74c2.128,0,4.117,0.589,5.83,1.598c-0.117,0.072-0.319,0.06-0.388,0.023c-0.078-0.043-0.158-0.078-0.475-0.061c-0.317,0.018-0.665,0.122-0.595,0.226c0.072,0.104-0.142,0.165-0.197,0.113c-0.055-0.052-0.309,0.06-0.293,0.165c0.016,0.104-0.039,0.225-0.175,0.199c-0.134-0.027-0.229,0.06-0.237,0.146c-0.007,0.087-0.309,0.147-0.332,0.147c-0.024,0-0.412-0.008-0.27,0.095c0.097,0.069,0.15,0.027,0.27,0.052c0.119,0.026,0.214,0.217,0.277,0.243c0.062,0.026,0.15,0,0.189-0.052c0.04-0.052,0.095-0.234,0.095-0.234s0,0.173,0.097,0.208c0.095,0.035,0.331-0.026,0.395-0.017c0.064,0.008,0.437,0.061,0.538,0.112c0.104,0.052,0.356,0.087,0.428,0.199c0.071,0.113,0.08,0.503,0.119,0.546c0.04,0.043,0.174-0.139,0.205-0.182c0.031-0.044,0.198-0.018,0.254,0.042c0.056,0.061,0.182,0.208,0.175,0.269C21.9,8.365,21.877,8.459,21.83,8.425c-0.048-0.034-0.127-0.025-0.096-0.095c0.032-0.069,0.048-0.217-0.015-0.217c-0.064,0-0.119,0-0.119,0s-0.12-0.035-0.199,0.095s-0.015,0.26,0.04,0.26s0.184,0,0.184,0.034c0,0.035-0.136,0.139-0.128,0.2c0.009,0.061,0.11,0.268,0.144,0.312c0.031,0.043,0.197,0.086,0.244,0.096c0.049,0.008-0.111,0.017-0.07,0.077c0.04,0.061,0.102,0.208,0.189,0.243c0.087,0.035,0.333,0.19,0.363,0.26c0.032,0.069,0.222-0.052,0.262-0.061c0.04-0.008,0.032,0.182,0.143,0.191c0.11,0.008,0.15-0.018,0.245-0.096s0.072-0.182,0.079-0.26c0.009-0.078,0-0.138,0.104-0.113c0.104,0.026,0.158-0.018,0.15-0.104c-0.008-0.087-0.095-0.191,0.07-0.217c0.167-0.026,0.254-0.138,0.357-0.138c0.103,0,0.389,0.043,0.419,0c0.032-0.043,0.167-0.243,0.254-0.251c0.067-0.007,0.224-0.021,0.385-0.042c1.582,1.885,2.561,4.284,2.673,6.905c-0.118,0.159-0.012,0.305,0.021,0.408c0.001,0.03,0.005,0.058,0.005,0.088c0,0.136-0.016,0.269-0.021,0.404C27.512,16.406,27.512,16.408,27.51,16.41zM17.794,12.084c-0.064,0.013-0.169-0.052-0.169-0.143s-0.091,0.169-0.04,0.247c0.053,0.078-0.104,0.169-0.155,0.169s-0.091-0.116-0.078-0.233c0.014-0.117-0.077-0.221-0.221-0.208c-0.143,0.014-0.208,0.13-0.259,0.169c-0.053,0.039-0.053,0.259-0.04,0.312s0.013,0.235-0.116,0.221c-0.118-0.013-0.092-0.233-0.079-0.312c0.014-0.078-0.039-0.273,0.014-0.376c0.053-0.104,0.207-0.143,0.312-0.156s0.324,0.065,0.363,0.052c0.04-0.014,0.222-0.014,0.312,0C17.729,11.837,17.858,12.071,17.794,12.084zM18.027,12.123c0.04,0.026,0.311-0.039,0.364,0.026c0.051,0.065-0.054,0.078-0.183,0.13c-0.129,0.052-0.169,0.039-0.221,0.104s-0.221,0.09-0.299,0.168c-0.078,0.079-0.217,0.125-0.246,0.065c-0.04-0.078,0.013-0.039,0.025-0.078c0.013-0.039,0.245-0.129,0.245-0.129S17.988,12.097,18.027,12.123zM16.988,11.668c-0.038,0.013-0.182-0.026-0.3-0.026c-0.116,0-0.091-0.078-0.143-0.064c-0.051,0.013-0.168,0.039-0.247,0.078c-0.078,0.039-0.208,0.03-0.208-0.04c0-0.104,0.052-0.078,0.221-0.143c0.169-0.065,0.352-0.247,0.429-0.169c0.078,0.078,0.221,0.169,0.312,0.182C17.144,11.5,17.026,11.655,16.988,11.668zM15.659,7.637c-0.079,0.026-0.347,0.139-0.321,0.199c0.01,0.023,0.078,0.069,0.19,0.052c0.113-0.018,0.276-0.035,0.355-0.043c0.078-0.009,0.095-0.139,0.009-0.147C15.805,7.689,15.736,7.611,15.659,7.637zM14.698,7.741c-0.061,0.026-0.243-0.043-0.338,0.018c-0.061,0.038-0.026,0.164,0.07,0.172c0.095,0.009,0.259-0.06,0.276-0.008c0.018,0.052,0.078,0.286,0.234,0.208c0.156-0.078,0.147-0.147,0.19-0.156c0.043-0.009-0.008-0.199-0.078-0.243C14.983,7.689,14.758,7.715,14.698,7.741zM14.385,7.005c0.017,0.044-0.008,0.078,0.113,0.095c0.121,0.018,0.173,0.035,0.243,0.035c0.069,0,0.042-0.113-0.018-0.19c-0.061-0.078-0.043-0.069-0.199-0.113c-0.156-0.043-0.312-0.043-0.416-0.035c-0.104,0.009-0.217-0.017-0.243,0.104c-0.013,0.062,0.07,0.112,0.174,0.112S14.368,6.962,14.385,7.005zM14.611,7.481c0.043,0.095,0.043,0.051,0.165,0.061C14.896,7.551,14.991,7.421,15,7.378c0.009-0.044-0.061-0.13-0.225-0.113c-0.165,0.017-0.667-0.026-0.736,0.034c-0.066,0.058,0,0.233-0.026,0.251c-0.026,0.017,0.009,0.095,0.077,0.078c0.069-0.017,0.104-0.182,0.157-0.182C14.299,7.447,14.568,7.386,14.611,7.481zM12.982,7.126c0.052,0.043,0.183,0.008,0.173-0.035c-0.008-0.043,0.053-0.217-0.051-0.225C13,6.858,12.854,6.962,12.697,7.014c-0.101,0.033-0.078,0.13-0.009,0.13S12.931,7.083,12.982,7.126zM13.72,7.282c-0.087,0.043-0.114,0.069-0.191,0.052c-0.078-0.017-0.078-0.156-0.217-0.13c-0.138,0.026-0.164,0.104-0.207,0.139s-0.139,0.061-0.173,0.043c-0.034-0.017-0.234-0.129-0.234-0.129s-0.416-0.018-0.433-0.07c-0.017-0.052-0.086-0.138-0.277-0.121s-0.52,0.13-0.572,0.13c-0.052,0,0.062,0.104-0.009,0.104c-0.069,0-0.155-0.008-0.181,0.069c-0.018,0.053,0.078,0.052,0.189,0.052c0.112,0,0.295,0,0.347-0.026c0.052-0.026,0.312-0.087,0.303-0.009c-0.009,0.079,0.104,0.199,0.164,0.182c0.061-0.017,0.183-0.13,0.243-0.086c0.061,0.043,0.07,0.146,0.13,0.173c0.061,0.025,0.226,0.025,0.304,0c0.077-0.027,0.294-0.027,0.389-0.009c0.095,0.018,0.373,0.069,0.399,0.018c0.026-0.053,0.104-0.061,0.112-0.113s0.051-0.216,0.051-0.216S13.806,7.239,13.72,7.282zM18.105,16.239c-0.119,0.021-0.091,0.252,0.052,0.21C18.3,16.407,18.223,16.217,18.105,16.239zM19.235,15.929c-0.104-0.026-0.221,0-0.299,0.013c-0.078,0.013-0.299,0.208-0.299,0.208s0.143,0.026,0.233,0.026c0.092,0,0.144,0.051,0.221,0.09c0.078,0.04,0.221-0.052,0.272-0.052c0.053,0,0.118,0.156,0.131-0.013C19.508,16.032,19.339,15.955,19.235,15.929zM15.616,7.507c-0.043-0.104-0.259-0.139-0.304-0.035C15.274,7.563,15.659,7.611,15.616,7.507zM18.093,15.292c0.143-0.026,0.064-0.144-0.053-0.13C17.922,15.175,17.949,15.318,18.093,15.292zM19.82,16.095c-0.119,0.022-0.092,0.253,0.051,0.211C20.015,16.264,19.937,16.074,19.82,16.095zM18.247,15.708c-0.09,0.013-0.285-0.09-0.389-0.182c-0.104-0.091-0.299-0.091-0.377-0.091c-0.077,0-0.39,0.091-0.39,0.091c-0.013,0.13,0.117,0.091,0.273,0.091s0.429-0.026,0.479,0.039c0.053,0.064,0.286,0.168,0.352,0.221c0.064,0.052,0.272,0.065,0.285,0.013S18.338,15.695,18.247,15.708zM16.698,7.412c-0.13-0.009-0.295-0.009-0.399,0c-0.104,0.008-0.182-0.069-0.26-0.113c-0.077-0.043-0.251-0.182-0.354-0.199c-0.104-0.017-0.086-0.017-0.303-0.069c-0.11-0.027-0.294-0.061-0.294-0.086c0-0.026-0.052,0.121,0.043,0.165c0.095,0.043,0.251,0.121,0.363,0.164c0.114,0.043,0.329,0.052,0.399,0.139c0.069,0.086,0.303,0.156,0.303,0.156l0.277,0.026c0,0,0.191-0.043,0.39-0.026c0.199,0.017,0.493,0.043,0.659,0.035c0.163-0.008,0.189-0.061,0.208-0.095c0.016-0.035-0.304-0.104-0.383-0.095C17.271,7.42,16.827,7.42,16.698,7.412zM17.182,9.404c-0.034,0.039,0.157,0.095,0.191,0.043C17.407,9.396,17.271,9.309,17.182,9.404zM17.764,9.585c0.086-0.035,0.043-0.139-0.079-0.104C17.547,9.521,17.676,9.62,17.764,9.585z' -] - -{ #category : #countries } -RTSVGPath class >> Angola [ - ^ 'M497.994,242.615l-0.643,-2.060l1.030,-1.159l0.900,-0.515l0.902,1.031l-0.902,0.516l-0.514,0.642l0,1.159l0.773,-0.386zM496.836,273.64l-0.257,-1.804l0.385,-2.317l0.900,-2.445l0.130,-1.158l0.901,-2.447l0.643,-1.157l1.545,-1.674l0.902,-1.288l0.257,-1.931l-0.129,-1.544l-0.771,-0.902l-0.775,-1.673l-0.642,-1.674l0.129,-0.515l0.772,-1.029l-0.772,-2.704l-0.516,-1.802l-1.414,-1.674l0.257,-0.515l1.157,-0.387l0.774,0.131l0.900,-0.389l7.982,0.131l0.643,1.930l0.771,1.674l0.645,0.773l1.031,1.415l1.801,-0.128l0.900,-0.387l1.418,0.387l0.514,-0.772l0.644,-1.545l1.673,-0.128l0.128,-0.388l1.417,0l-0.258,0.902l3.219,0l0.128,1.672l0.514,1.031l-0.385,1.673l0.129,1.674l0.900,1.030l-0.129,3.091l0.645,-0.131l1.158,0l1.674,-0.385l1.287,0.128l0.257,0.902l-0.257,1.286l0.387,1.287l-0.387,0.903l0.257,1.028l-5.536,-0.127l-0.128,8.625l1.804,2.187l1.673,1.674l-4.892,1.158l-6.566,-0.385l-1.801,-1.287l-10.944,0.128l-0.384,0.128l-1.674,-1.159l-1.672,-0.128l-1.674,0.515l1.288,-0.516z' -] - -{ #category : #countries } -RTSVGPath class >> Argentina [ - ^ 'M319.448,295.781l1.288,1.544l0,2.189l-2.319,1.416l-1.801,1.158l-2.961,2.576l-3.605,3.732l-0.772,2.189l-0.644,2.702l0,2.705l-0.643,0.643l-0.129,1.674l-0.257,1.417l3.475,2.317l-0.387,1.802l1.675,1.287l-0.129,1.288l-2.574,3.475l-3.991,1.417l-5.406,0.513l-2.961,-0.257l0.514,1.674l-0.514,1.931l0.514,1.415l-1.673,0.902l-2.703,0.385l-2.575,-1.028l-1.029,0.770l0.386,2.705l1.801,0.772l1.417,-0.901l0.901,1.416l-2.575,0.902l-2.188,1.673l-0.386,2.705l-0.643,1.414l-2.448,0l-2.188,1.416l-0.772,1.932l2.704,2.059l2.574,0.516l-0.901,2.445l-3.218,1.545l-1.803,3.090l-2.445,1.030l-1.031,1.287l0.774,2.832l1.802,1.543l-1.030,-0.127l-2.574,-0.387l-6.436,-0.385l-1.160,-1.545l0,-2.060l-1.801,0.129l-0.902,-0.902l-0.258,-2.831l2.060,-1.288l0.901,-1.674l-0.386,-1.288l1.546,-2.316l0.900,-3.605l-0.257,-1.545l1.158,-0.515l-0.258,-1.030l-1.287,-0.514l0.901,-1.158l-1.157,-1.030l-0.645,-3.089l1.030,-0.516l-0.385,-3.347l0.513,-2.703l0.773,-2.447l1.673,-1.030l-0.900,-2.574l0,-2.446l2.060,-1.802l0,-2.189l1.415,-2.702l0.129,-2.447l-0.772,-0.514l-1.287,-4.636l1.672,-2.831l-0.257,-2.575l1.030,-2.446l1.802,-2.574l1.802,-1.673l-0.772,-1.031l0.515,-0.900l0,-4.378l2.960,-1.415l0.902,-2.704l-0.386,-0.772l2.316,-2.447l3.477,0.644l1.544,2.060l1.030,-2.187l3.089,0.127l0.515,0.515l4.892,4.377l2.188,0.387l3.348,2.059l2.703,1.030l0.386,1.157l-2.574,4.121l2.702,0.772l2.961,0.387l2.189,-0.387l2.446,-2.059l0.386,-2.445l-1.416,0.516zM282.761,371.99l3.475,1.674l3.733,0.642l-1.159,1.417l-2.574,0.130l-1.416,-1.031l-1.546,0l-2.960,0l0.129,-5.923l0.901,1.160l-1.417,-1.931z' -] - -{ #category : #countries } -RTSVGPath class >> Armenia [ - ^ 'M582.697,116.33l3.605,-0.515l0.642,0.772l1.032,0.386l-0.516,0.773l1.416,0.900l-0.772,0.902l1.159,0.643l1.158,0.516l0.129,1.801l-1.029,0.129l-1.032,-1.544l0,-0.515l-1.287,0.129l-0.771,-0.772l-0.516,0l-1.029,-0.773l-2.059,-0.643l0.256,-1.288l0.386,0.901z' -] - -{ #category : #countries } -RTSVGPath class >> Australia [ - ^ 'M863.067,336.975l1.674,0.129l0.129,3.218l-0.900,0.901l-0.258,2.188l-0.900,-0.772l-1.934,1.931l-0.514,-0.129l-1.672,-0.129l-1.675,-2.316l-0.385,-1.803l-1.545,-2.318l0.127,-1.287l1.674,0.259l2.576,0.901l1.545,-0.258l-2.058,0.515zM805.011,313.803l-2.832,1.288l-2.317,0.643l-0.513,1.416l-1.034,1.159l-2.185,0l-1.803,0.256l-2.318,-0.513l-1.930,0.386l-1.930,0.127l-1.546,1.417l-0.772,-0.128l-1.416,0.772l-1.287,0.772l-1.932,-0.128l-1.800,0l-2.834,-1.674l-1.416,-0.514l0,-1.545l1.289,-0.387l0.515,-0.515l-0.131,-1.029l0.387,-1.932l-0.256,-1.545l-1.547,-2.702l-0.386,-1.546l0.129,-1.545l-1.030,-1.801l-0.127,-0.773l-1.160,-1.030l-0.387,-2.058l-1.545,-2.189l-0.384,-1.160l1.287,1.160l-1.029,-2.447l1.416,0.774l0.771,1.030l0,-1.417l-1.416,-2.061l-0.258,-0.900l-0.644,-0.773l0.386,-1.545l0.516,-0.644l0.387,-1.415l-0.258,-1.546l1.029,-1.930l0.258,2.060l1.158,-1.932l2.188,-0.900l1.287,-1.160l2.060,-0.901l1.159,-0.257l0.773,0.387l2.188,-1.029l1.544,-0.258l0.516,-0.644l0.643,-0.257l1.545,0.128l2.832,-0.901l1.418,-1.160l0.640,-1.414l1.676,-1.416l0.129,-1.030l0,-1.417l1.930,-2.318l1.158,2.318l1.031,-0.514l-0.902,-1.287l0.902,-1.287l1.156,0.516l0.260,-2.061l1.545,-1.289l0.643,-1.028l1.289,-0.516l0.127,-0.773l1.158,0.386l0,-0.643l1.158,-0.387l1.416,-0.385l1.930,1.157l1.547,1.675l1.671,0l1.676,0.258l-0.515,-1.545l1.287,-2.060l1.158,-0.772l-0.385,-0.643l1.158,-1.545l1.672,-1.031l1.289,0.385l2.317,-0.514l-0.129,-1.416l-1.932,-0.900l1.418,-0.388l1.801,0.775l1.416,1.029l2.316,0.772l0.774,-0.387l1.674,0.902l1.544,-0.773l1.030,0.258l0.644,-0.516l1.158,1.289l-0.644,1.416l-1.029,1.157l-0.903,0l0.260,1.160l-0.773,1.286l-0.901,1.289l0.127,0.772l2.190,1.545l2.058,0.900l1.418,0.902l1.930,1.544l0.771,0l1.418,0.773l0.387,0.772l2.574,0.900l1.801,-0.900l0.516,-1.416l0.513,-1.289l0.387,-1.415l0.772,-2.188l-0.385,-1.286l0.127,-0.775l-0.256,-1.542l0.387,-2.062l0.513,-0.514l-0.386,-0.901l0.644,-1.417l0.516,-1.414l0,-0.772l1.029,-1.032l0.772,1.288l0.130,1.674l0.641,0.385l0.131,1.029l1.029,1.417l0.258,1.544l-0.129,1.031l0.902,2.061l1.801,-1.031l0.903,1.158l1.285,1.031l-0.256,1.158l0.515,2.317l0.387,1.416l0.641,0.257l0.773,2.319l-0.256,1.414l0.901,1.805l2.961,1.414l1.800,1.288l1.803,1.159l-0.258,0.642l1.545,1.674l1.030,2.961l1.031,-0.642l1.158,1.286l0.643,-0.516l0.386,2.961l1.932,1.544l1.287,1.030l2.061,2.189l0.771,2.189l0.129,1.545l-0.260,1.674l1.289,2.316l-0.129,2.317l-0.515,1.287l-0.645,2.447l0,1.545l-0.513,1.930l-1.159,2.446l-2.058,1.288l-0.903,2.060l-0.900,1.415l-0.902,2.317l-1.030,1.288l-0.642,2.060l-0.387,1.802l0.129,0.900l-1.545,0.902l-2.961,0.128l-2.445,1.031l-1.287,1.030l-1.674,1.157l-2.188,-1.157l-1.675,-0.515l0.517,-1.287l-1.547,0.516l-2.316,1.929l-2.316,-0.773l-1.547,-0.385l-1.545,-0.258l-2.572,-0.772l-1.803,-1.674l-0.516,-2.060l-0.644,-1.288l-1.287,-1.157l-2.575,-0.258l0.903,-1.287l-0.645,-2.060l-1.287,1.931l-2.445,0.387l1.416,-1.416l0.386,-1.545l1.030,-1.288l-0.258,-2.059l-2.188,2.316l-1.673,0.902l-1.032,2.189l-2.058,-1.159l0.129,-1.416l-1.674,-1.932l-1.545,-1.029l0.516,-0.643l-3.348,-1.675l-1.932,0l-2.574,-1.286l-4.893,0.256l-3.474,0.902l-3.090,0.902l2.574,0.130z' -] - -{ #category : #countries } -RTSVGPath class >> Austria [ - ^ 'M510.996,97.278l-0.257,1.158l-1.545,0l0.643,0.643l-0.900,1.674l-0.515,0.515l-2.446,0l-1.289,0.644l-2.315,-0.258l-3.734,-0.644l-0.644,-0.900l-2.703,0.386l-0.258,0.514l-1.672,-0.386l-1.416,0l-1.160,-0.514l0.385,-0.644l-0.128,-0.515l0.903,-0.128l1.285,0.772l0.387,-0.772l2.446,0.128l1.931,-0.515l1.287,0.128l0.773,0.515l0.258,-0.386l-0.387,-1.802l1.030,-0.386l0.901,-1.158l2.058,0.772l1.417,-1.030l1.030,-0.258l2.061,0.901l1.286,-0.129l1.158,0.516l-0.127,0.256l-0.257,-0.903z' -] - -{ #category : #countries } -RTSVGPath class >> Azerbaijan [ - ^ 'M590.292,114.27l0.643,0l1.931,1.673l1.158,0.129l0.516,-0.644l1.545,-1.030l1.416,1.417l1.417,1.802l1.286,0.129l0.774,0.773l-2.190,0.257l-0.514,2.059l-0.386,0.901l-1.031,0.644l0,1.416l-0.643,0.129l-1.674,-1.417l0.902,-1.415l-0.773,-0.773l-1.030,0.258l-3.089,1.930l-0.129,-1.801l-1.158,-0.516l-1.159,-0.643l0.772,-0.902l-1.416,-0.900l0.516,-0.773l-1.032,-0.386l-0.642,-0.772l0.129,0l0.644,-0.387l1.930,0.772l1.545,0.130l0.258,-0.258l-1.287,-1.545l-0.771,0.257zM589.521,122.637l-1.804,-0.386l-1.415,-1.288l-0.387,-1.028l0.516,0l0.771,0.772l1.287,-0.129l0,0.515l-1.032,-1.544z' -] - -{ #category : #countries } -RTSVGPath class >> Bangladesh [ - ^ 'M714.901,167.564l-0.129,1.932l-0.900,-0.387l0.127,2.189l-0.771,-1.417l-0.129,-1.415l-0.514,-1.287l-1.031,-1.545l-2.575,-0.129l0.258,1.159l-0.771,1.544l-1.158,-0.644l-0.389,0.516l-0.772,-0.258l-1.029,-0.258l-0.515,-2.188l-0.901,-2.059l0.514,-1.674l-1.672,-0.643l0.514,-1.031l1.802,-1.030l-2.060,-1.415l1.031,-1.803l2.061,1.159l1.285,0.128l0.260,1.931l2.574,0.386l2.574,-0.128l1.545,0.515l-1.289,2.317l-1.158,0.129l-0.901,1.545l1.545,1.416l0.387,-1.802l0.771,0l-1.416,-4.247z' -] - -{ #category : #countries } -RTSVGPath class >> Belarus [ - ^ 'M528.503,81.701l2.574,0l2.961,-0.901l0.643,-1.545l2.189,-0.901l-0.258,-1.159l1.674,-0.514l2.831,-1.031l2.833,0.644l0.387,0.772l1.416,-0.385l2.703,0.643l0.258,1.287l-0.645,0.644l1.672,1.802l1.160,0.515l-0.129,0.515l1.803,0.387l0.772,0.772l-1.030,0.643l-2.187,-0.128l-0.516,0.257l0.644,0.901l0.643,1.674l-2.318,0.129l-0.900,0.643l-0.128,1.416l-1.031,-0.258l-2.446,0.129l-0.772,-0.643l-1.030,0.386l-0.900,-0.386l-2.189,0l-2.959,-0.644l-2.706,-0.258l-2.187,0.129l-1.417,0.644l-1.286,0.129l-0.129,-1.159l-0.772,-1.287l1.672,-0.516l0,-1.029l-0.771,-1.029l0.129,1.288z' -] - -{ #category : #countries } -RTSVGPath class >> Belgium [ - ^ 'M474.179,88.652l1.932,0.258l2.574,-0.643l1.673,1.158l1.416,0.644l-0.258,1.930l-0.644,0l-0.385,1.544l-2.318,-1.286l-1.416,0.257l-1.801,-1.287l-1.288,-1.029l-1.287,0l-0.385,-1.031l-2.187,0.515z' -] - -{ #category : #countries } -RTSVGPath class >> Belize [ - ^ 'M225.09,179.022l0,-0.387l0.257,-0.129l0.515,0.258l1.030,-1.544l0.515,-0.130l0,0.387l0.515,0.128l-0.129,0.645l-0.386,1.159l0.258,0.513l-0.258,0.902l0.128,0.258l-0.256,1.416l-0.644,0.643l-0.387,0.129l-0.643,0.901l-0.772,0l0.257,-3.089l0,2.060z' -] - -{ #category : #countries } -RTSVGPath class >> Benin [ - ^ 'M472.505,210.174l-2.188,0.258l-0.773,-1.803l0.131,-6.307l-0.516,-0.515l-0.129,-1.287l-0.900,-0.902l-0.775,-0.900l0.259,-1.417l1.030,-0.256l0.515,-1.159l1.287,-0.257l0.645,-0.774l0.901,-0.773l0.901,-0.127l2.059,1.674l-0.129,0.771l0.643,1.673l-0.514,1.031l0.258,0.773l-1.288,1.672l-0.901,0.773l-0.386,1.674l0,1.802l0.130,-4.376z' -] - -{ #category : #countries } -RTSVGPath class >> Bhutan [ - ^ 'M712.198,152.117l1.158,0.901l-0.257,1.674l-2.188,0l-2.189,-0.129l-1.672,0.386l-2.447,-1.029l-0.129,-0.516l1.804,-1.931l1.414,-0.773l1.930,0.645l1.416,0.128l-1.160,-0.644z' -] - -{ #category : #countries } -RTSVGPath class >> Bolivia [ - ^ 'M295.89,286.383l-3.089,-0.127l-1.030,2.187l-1.544,-2.060l-3.477,-0.644l-2.316,2.447l-1.932,0.386l-1.028,-3.733l-1.417,-2.960l0.773,-2.576l-1.417,-1.157l-0.387,-1.933l-1.286,-1.932l1.673,-2.830l-1.158,-2.318l0.643,-0.901l-0.515,-1.029l1.159,-1.287l0,-2.317l0.128,-1.931l0.644,-0.901l-2.445,-4.248l2.060,0.127l1.415,0l0.515,-0.771l2.446,-1.160l1.416,-1.029l3.476,-0.386l-0.258,1.930l0.387,1.159l-0.258,1.802l2.960,2.317l2.962,0.515l1.030,1.030l1.801,0.515l1.159,0.772l1.673,0l1.545,0.773l0.128,1.544l0.516,0.773l0.128,1.158l-0.772,0l1.031,3.219l5.148,0.131l-0.386,1.542l0.258,1.030l1.416,0.771l0.643,1.676l-0.386,2.061l-0.772,1.158l0.257,1.544l-0.901,0.643l0,-0.902l-2.575,-1.285l-2.446,-0.130l-4.634,0.772l-1.416,2.447l0,1.414l-1.030,3.219l0.515,0.515z' -] - -{ #category : #countries } -RTSVGPath class >> BosniaandHerzegovina [ - ^ 'M516.403,106.159l1.030,0l-0.645,1.159l1.289,1.030l-0.389,1.287l-1.158,0.387l-0.900,0.515l-0.387,1.545l-2.445,-1.030l-1.031,-1.159l-0.901,-0.514l-1.286,-1.031l-0.643,-0.901l-1.290,-1.158l0.516,-1.159l1.031,0.643l0.643,-0.643l1.159,0l2.316,0.386l1.931,0l-1.160,-0.643z' -] - -{ #category : #countries } -RTSVGPath class >> Botswana [ - ^ 'M534.296,276.857l0.516,0.516l0.900,1.544l3.089,2.962l1.158,0.256l0,1.030l0.772,1.674l2.061,0.385l1.673,1.290l-3.734,1.929l-2.445,2.059l-0.901,1.804l-0.773,1.030l-1.545,0.128l-0.386,1.287l-0.258,0.901l-1.801,0.645l-2.188,-0.129l-1.288,-0.773l-1.159,-0.387l-1.287,0.644l-0.642,1.286l-1.287,0.775l-1.290,1.287l-1.929,0.256l-0.645,-0.901l0.258,-1.673l-1.544,-2.575l-0.772,-0.386l0,-7.852l2.574,-0.130l0.129,-9.654l2.060,0l4.119,-1.030l1.029,1.158l1.674,-1.028l0.901,0l1.416,-0.645l0.515,0.259l-1.030,-2.058z' -] - -{ #category : #countries } -RTSVGPath class >> Brazil [ - ^ 'M310.05,308.396l3.605,-3.732l2.961,-2.576l1.801,-1.158l2.319,-1.416l0,-2.189l-1.288,-1.544l-1.416,0.516l0.515,-1.546l0.386,-1.545l0,-1.544l-0.901,-0.516l-1.031,0.516l-1.028,-0.129l-0.259,-1.031l-0.256,-2.443l-0.516,-0.903l-1.801,-0.642l-1.160,0.513l-2.831,-0.513l0.128,-3.736l-0.772,-1.415l0.901,-0.643l-0.257,-1.544l0.772,-1.158l0.386,-2.061l-0.643,-1.676l-1.416,-0.771l-0.258,-1.030l0.386,-1.542l-5.148,-0.131l-1.031,-3.219l0.772,0l-0.128,-1.158l-0.516,-0.773l-0.128,-1.544l-1.545,-0.773l-1.673,0l-1.159,-0.772l-1.801,-0.515l-1.030,-1.030l-2.962,-0.515l-2.960,-2.317l0.258,-1.802l-0.387,-1.159l0.258,-1.930l-3.476,0.386l-1.416,1.029l-2.446,1.160l-0.515,0.771l-1.415,0l-2.060,-0.127l-1.416,0.384l-1.287,-0.257l0.256,-4.119l-2.317,1.545l-2.317,0l-1.030,-1.416l-1.801,-0.129l0.644,-1.158l-1.546,-1.674l-1.158,-2.445l0.772,-0.516l0,-1.158l1.545,-0.773l-0.257,-1.416l0.772,-0.901l0.129,-1.288l3.089,-1.802l2.188,-0.515l0.386,-0.514l2.446,0.129l1.159,-7.338l0.129,-1.159l-0.515,-1.544l-1.159,-1.030l0,-1.931l1.545,-0.387l0.515,0.258l0.129,-1.029l-1.545,-0.258l-0.129,-1.674l5.278,0l0.900,-0.902l0.773,0.902l0.515,1.545l0.516,-0.387l1.544,1.417l2.060,-0.129l0.515,-0.772l1.930,-0.644l1.159,-0.515l0.257,-1.159l1.931,-0.772l-0.128,-0.514l-2.188,-0.259l-0.387,-1.672l0,-1.804l-1.158,-0.643l0.514,-0.257l2.060,0.257l2.059,0.773l0.774,-0.643l1.930,-0.515l3.090,-0.902l0.900,-1.030l-0.257,-0.772l1.287,-0.129l0.644,0.643l-0.257,1.159l0.900,0.386l0.644,1.288l-0.772,0.902l-0.515,2.316l0.773,1.287l0.128,1.287l1.674,1.288l1.287,0.128l0.386,-0.515l0.772,-0.128l1.288,-0.515l0.901,-0.644l1.416,0.259l0.643,-0.130l1.546,0.130l0.257,-0.517l-0.516,-0.514l0.259,-0.773l1.158,0.259l1.159,-0.259l1.545,0.515l1.287,0.516l0.772,-0.644l0.643,0.128l0.387,0.772l1.287,-0.256l1.030,-1.031l0.772,-1.930l1.545,-2.446l1.029,-0.128l0.645,1.415l1.544,4.763l1.416,0.386l0,1.931l-1.931,2.189l0.773,0.772l4.763,0.387l0.128,2.702l2.059,-1.674l3.348,0.902l4.505,1.674l1.288,1.545l-0.387,1.545l3.090,-0.901l5.278,1.415l3.991,0l3.990,2.189l3.476,2.961l2.059,0.772l2.318,0.128l0.900,0.902l0.901,3.475l0.516,1.545l-1.159,4.505l-1.287,1.675l-3.862,3.863l-1.674,2.959l-2.059,2.317l-0.643,0.129l-0.773,1.931l0.257,5.020l-0.773,4.250l-0.256,1.672l-0.902,1.158l-0.515,3.605l-2.703,3.475l-0.387,2.833l-2.187,1.158l-0.644,1.546l-2.960,0l-4.249,1.028l-1.931,1.288l-2.960,0.773l-3.219,2.060l-2.188,2.703l-0.386,2.060l0.386,1.416l-0.515,2.703l-0.644,1.416l-1.803,1.416l-2.960,4.764l-2.446,2.189l-1.802,1.157l-1.287,2.574l-1.673,1.545l-0.772,-1.545l1.158,-1.286l-1.545,-1.804l-2.189,-1.414l-2.702,-1.805l-1.030,0.130l-2.704,-2.059l1.674,-0.257z' -] - -{ #category : #countries } -RTSVGPath class >> BruneiDarussalam [ - ^ 'M772.829,214.809l1.160,-1.030l2.315,-1.416l-0.127,1.287l-0.260,1.674l-1.285,0l-0.516,0.902l1.287,1.417z' -] - -{ #category : #countries } -RTSVGPath class >> Bulgaria [ - ^ 'M526.314,107.833l0.773,1.030l1.031,-0.129l2.059,0.386l3.990,0.130l1.287,-0.644l3.219,-0.644l1.930,1.030l1.544,0.258l-1.416,1.158l-0.900,1.931l0.772,1.416l-2.317,-0.257l-2.705,0.772l0,1.417l-2.445,0.256l-1.930,-1.029l-2.187,0.773l-1.932,-0.130l-0.258,-1.674l-1.287,-0.900l0.385,-0.387l-0.256,-0.386l0.515,-0.772l1.030,-0.901l-1.415,-1.158l-0.259,-0.902l-0.772,0.644z' -] - -{ #category : #countries } -RTSVGPath class >> BurkinaFaso [ - ^ 'M457.573,201.035l-1.802,-0.773l-1.287,0.129l-0.902,0.644l-1.286,-0.515l-0.387,-0.902l-1.287,-0.643l-0.128,-1.545l0.771,-1.159l-0.128,-0.900l2.189,-2.189l0.385,-1.802l0.773,-0.644l1.287,0.257l1.159,-0.514l0.257,-0.645l2.189,-1.285l0.514,-0.774l2.446,-1.158l1.545,-0.387l0.644,0.516l1.673,0l-0.129,1.287l0.258,1.287l1.545,1.673l0.128,1.417l3.091,0.515l0,1.930l-0.645,0.774l-1.287,0.257l-0.515,1.159l-1.030,0.256l-2.317,0l-1.288,-0.256l-0.770,0.514l-1.289,-0.258l-4.634,0.129l-0.129,1.545l-0.386,-2.060z' -] - -{ #category : #countries } -RTSVGPath class >> Burundi [ - ^ 'M544.208,239.14l-0.130,-3.347l-0.643,-1.159l1.673,0.258l0.773,-1.545l1.415,0.128l0.131,1.030l0.642,0.643l0,0.903l-0.642,0.513l-1.030,1.416l-1.031,1.032l1.158,-0.128z' -] - -{ #category : #countries } -RTSVGPath class >> Cambodia [ - ^ 'M743.995,198.331l-1.031,-1.415l-1.416,-2.834l-0.643,-3.217l1.801,-2.189l3.475,-0.514l2.447,0.387l2.316,1.029l1.160,-1.803l2.446,0.901l0.644,1.803l-0.386,3.218l-4.506,2.059l1.160,1.674l-2.834,0.258l-2.316,1.030l2.317,0.387z' -] - -{ #category : #countries } -RTSVGPath class >> Cameroon [ - ^ 'M500.439,220.859l-0.256,-0.129l-1.674,0.387l-1.673,-0.387l-1.288,0.129l-4.378,0l0.387,-2.188l-1.029,-1.802l-1.158,-0.387l-0.516,-1.287l-0.772,-0.386l0,-0.643l0.772,-1.932l1.289,-2.575l0.771,-0.128l1.544,-1.545l1.029,0l1.546,1.030l1.803,-0.901l0.257,-1.029l0.644,-1.159l0.387,-1.288l1.414,-1.159l0.645,-1.931l0.513,-0.514l0.387,-1.417l0.773,-1.673l2.188,-2.189l0.129,-0.901l0.387,-0.386l-1.160,-1.158l0.128,-0.773l0.774,-0.257l1.029,1.801l0.258,1.804l-0.128,1.802l1.415,2.446l-1.415,-0.129l-0.774,0.257l-1.287,-0.257l-0.514,1.287l1.545,1.546l1.158,0.385l0.387,1.160l0.900,1.930l-0.515,0.644l-1.287,2.702l-0.643,0.515l-0.258,2.060l0.258,1.160l-0.258,0.772l1.288,1.416l0.257,1.029l1.031,1.416l1.157,0.773l0.129,1.287l0.387,0.772l-0.259,1.416l-2.187,-0.643l-2.062,-0.644l3.475,0.129z' -] - -{ #category : #countries } -RTSVGPath class >> Canada [ - ^ 'M212.989,24.93l-1.416,1.159l-3.862,-0.257l-3.347,-0.644l1.417,-1.288l3.990,-0.772l2.317,1.030l-0.901,-0.772zM212.474,18.107l-1.287,0.130l-5.020,-0.130l-0.772,-0.772l5.535,0l1.802,0.515l0.258,-0.257zM204.622,14.761l3.218,0.901l-0.772,1.030l-3.991,0.515l-2.188,-0.644l-1.159,-0.901l-0.257,-1.159l3.604,0.129l-1.545,-0.129zM227.793,26.604l-4.377,-0.387l-7.208,-0.900l-0.901,-1.417l-0.258,-1.287l-2.703,-1.287l-5.664,-0.257l-3.090,-0.901l1.030,-1.031l5.535,0.130l2.962,0.901l5.406,0l2.317,0.901l-0.643,1.029l3.089,0.515l1.673,0.643l3.605,0.130l3.990,0.257l4.248,-0.643l5.535,-0.129l4.377,0.129l2.832,1.029l0.644,1.159l-1.674,0.644l-3.991,0.644l-3.475,-0.387l-7.724,0.387l5.535,-0.128zM165.489,16.434l3.862,0.386l-0.902,0.901l-5.020,0.772l-3.991,-0.900l2.188,-0.901l-3.863,0.258zM166.261,14.632l3.604,0.644l-3.347,0.515l-4.505,0l0.128,-0.387l2.704,-0.901l-1.416,-0.129zM205.137,40.636l2.703,1.158l-1.673,0.902l-3.605,-1.031l-2.188,0.516l-3.090,-0.387l1.803,-1.673l1.931,-1.159l2.059,0.643l-2.060,-1.031zM315.458,88.781l-1.417,1.673l-1.802,2.317l1.802,-0.900l1.802,0.643l-1.030,0.902l2.447,0.772l1.287,-0.772l2.574,0.901l-0.772,1.930l1.931,-0.386l0.257,1.417l0.901,1.673l-1.158,2.317l-1.288,0.129l-1.673,-0.515l0.515,-2.189l-0.772,-0.386l-3.089,2.317l-1.545,0l1.801,-1.287l-2.574,-0.644l-2.832,0.130l-5.278,-0.130l-0.386,-0.772l1.674,-0.901l-1.159,-0.773l2.317,-1.673l2.702,-4.248l1.675,-1.545l2.317,-0.901l1.288,0.129l0.515,-0.772zM239.25,51.578l2.960,0.901l3.090,0.901l0.258,1.287l1.930,-0.257l1.931,0.900l-2.316,0.903l-4.249,-0.774l-1.544,-1.158l-2.575,1.416l-3.861,1.416l-0.902,-1.544l-3.733,0.257l2.317,-1.416l0.386,-2.060l0.901,-2.445l1.931,0.257l0.515,1.158l1.417,-0.514l-1.544,-0.772zM218.525,6.393l7.080,-0.643l5.278,-0.386l5.921,-0.130l3.604,-1.415l11.199,-0.773l9.656,0.129l7.723,-0.386l18.924,0.514l10.555,1.802l-6.565,1.159l-6.437,0.515l-2.445,0.644l5.792,0l-10.684,2.317l-10.169,2.704l-9.913,0.900l3.734,0.258l-1.931,0.515l2.317,1.287l-6.694,1.674l-1.287,1.159l-3.863,0.772l0.387,0.643l3.604,0.258l0,0.644l-6.049,1.158l-7.081,-0.643l-7.981,0.386l-9.012,-0.515l-0.385,-1.288l5.020,-0.643l-1.158,-0.902l2.187,-0.900l6.437,0.900l-7.981,-2.316l2.188,-1.030l4.763,-0.644l0.773,-0.901l-3.862,-1.030l-1.159,-1.416l7.338,0.129l6.437,-0.644l-15.577,-0.128l-4.762,-1.031l-5.407,-1.802l0.515,0.901zM253.024,32.01l2.574,-1.030l5.922,1.417l3.734,1.287l0.385,1.158l5.020,-0.643l2.833,1.674l6.437,1.158l2.317,1.030l2.574,2.575l-4.891,1.158l6.307,1.803l4.248,0.643l3.862,2.446l4.248,0.128l-0.773,1.932l-4.763,3.089l-3.347,-1.158l-4.248,-2.575l-3.476,0.386l-0.257,1.545l2.832,1.545l3.605,1.287l1.159,0.644l1.673,2.704l-0.902,1.930l-3.347,-0.772l-6.821,-2.061l3.862,2.318l2.702,1.545l0.516,1.030l-7.339,-1.159l-5.793,-1.545l-3.218,-1.286l0.903,-0.774l-3.991,-1.415l-3.992,-1.287l0.129,0.772l-7.853,0.386l-2.188,-0.901l1.675,-1.931l5.149,-0.129l5.535,-0.257l-0.901,-1.031l0.901,-1.287l3.475,-2.702l-0.772,-1.159l-1.030,-0.901l-4.120,-1.288l-5.406,-0.901l1.674,-0.772l-2.832,-1.674l-2.317,-0.129l-2.189,-0.900l-1.416,0.772l-4.891,0.385l-9.784,-0.643l-5.664,-0.772l-4.377,-0.386l-2.317,-0.901l2.832,-1.287l-3.862,0l-0.772,-2.704l2.059,-2.446l2.704,-1.030l6.951,-0.772l-1.931,1.802l2.188,1.674l2.447,-2.189l6.823,-1.159l4.633,2.832l-0.386,1.675l-5.278,0.774zM210.672,27.248l5.536,0.128l5.148,0.645l-3.989,2.445l-3.219,0.514l-2.833,1.932l-3.088,-0.128l-1.675,-2.318l0,-1.287l1.417,-1.158l-2.703,0.773zM206.552,9.869l1.931,-0.901l2.704,-0.128l-1.159,-0.644l6.308,-0.129l3.348,1.416l8.753,1.673l5.664,2.060l-3.733,0.772l-5.021,2.060l-4.763,0.258l-5.535,-0.386l-2.961,-1.031l0.129,-1.030l2.059,-0.772l-4.891,0.129l-2.961,-0.902l-1.673,-1.287l-1.801,1.158zM194.71,31.109l-2.832,-2.574l2.961,-0.514l3.218,0.643l4.119,-0.258l0.515,1.030l-1.544,0.901l3.604,1.803l-0.644,1.416l-3.862,1.415l-2.574,-0.257l-1.803,-1.030l-5.535,-1.544l-1.673,-1.160l-6.050,-0.129zM178.233,30.08l3.089,1.158l1.674,2.574l0.772,1.932l4.634,1.287l4.764,1.287l-0.258,1.159l-4.377,0.257l1.673,1.030l-0.900,1.030l-6.436,0l-1.804,-0.644l-4.376,-0.386l-5.278,1.545l-6.565,0.644l-3.604,0.128l-2.704,-2.059l-6.050,-0.386l-4.505,-1.674l2.960,-0.772l4.119,-0.386l3.863,0.129l3.475,-0.516l-5.149,-0.644l-5.793,0.258l-3.862,-0.129l-1.416,-0.901l6.308,-1.159l-4.249,0.129l-4.634,-0.772l2.189,-2.059l1.932,-1.031l7.208,-1.673l2.703,0.515l-1.287,1.287l5.922,-0.772l3.861,1.287l2.961,-1.287l2.446,0.901l2.189,2.574l1.416,-1.157l-1.932,-2.704l2.446,-0.387l-2.575,-0.387zM174.757,22.613l2.446,-0.385l2.832,0.128l0.385,1.287l-1.543,1.287l-9.141,0.387l-6.822,1.159l-4.120,0.128l-0.257,-0.901l5.535,-1.159l-12.228,0.257l-3.734,-0.514l3.734,-2.575l2.445,-0.772l7.596,0.901l4.891,1.673l4.634,0.129l-3.862,-2.574l2.446,-1.030l1.803,0.643l0.900,1.287l-2.060,-0.644zM134.336,21.969l4.506,-2.059l5.535,-1.803l4.120,0.130l3.732,-0.387l-0.385,2.060l-2.060,0.901l-2.575,0.129l-5.020,1.158l-4.248,0.386l3.605,0.515zM137.812,26.476l3.862,0.514l6.823,0.129l2.703,0.772l2.832,1.158l-3.347,0.644l-6.694,1.674l-3.991,2.060l-0.643,1.287l-5.664,1.287l-1.802,-1.030l-5.922,-1.544l0.129,-0.902l2.188,-2.317l2.060,-1.159l-1.673,-2.188l-9.139,0.385zM107.69,81.443l2.574,-0.256l-0.773,3.088l2.318,2.188l-1.030,0l-1.674,-1.287l-0.900,-1.287l-1.416,-0.772l-0.516,-1.158l0.130,-0.902l-1.287,-0.386zM199.73,20.682l1.288,0.901l0,1.417l-1.416,1.801l-3.218,0.387l-2.961,-0.387l0.129,-1.545l-4.507,0.130l-0.128,-2.060l2.961,0.129l3.990,-0.901l-3.862,-0.128zM181.064,13.344l5.279,0.387l7.337,0.901l2.060,1.288l1.030,1.158l-4.377,-0.258l-4.506,-0.900l-5.922,-0.129l2.576,-0.773l-3.348,-0.644l0.129,1.030zM127.385,92.386l1.288,1.287l2.702,1.158l1.160,1.416l-1.417,0.387l-4.376,-1.159l-0.773,-1.029l-2.446,-0.903l-0.515,-0.772l-2.703,-0.514l-1.030,-1.416l0.129,-0.643l2.832,0.643l1.673,0.386l2.575,0.257l-0.901,-0.902zM315.071,83.502l0.129,2.961l-1.931,1.031l-1.932,0.901l-4.376,1.030l-3.476,2.188l-4.505,0.386l-5.793,-0.515l-3.990,0l-2.832,0.129l-2.318,1.930l-3.346,1.288l-3.863,3.476l-3.089,2.575l2.189,-0.515l4.376,-3.476l5.664,-2.317l3.991,-0.257l2.445,1.286l-2.573,1.932l0.772,2.832l0.901,2.060l3.476,1.287l4.504,-0.387l2.704,-2.960l0.258,1.931l1.673,1.029l-3.347,1.674l-5.921,1.674l-2.703,1.029l-2.961,1.931l-2.060,-0.128l-0.128,-2.317l4.633,-2.189l-4.247,0l-2.961,0.387l-1.803,-1.545l0,-3.605l-1.157,-0.772l-1.804,0.386l-0.900,-0.644l-2.060,1.932l-0.901,2.187l-0.902,1.159l-1.158,0.515l-0.901,0l-0.258,0.772l-4.891,0l-4.120,0l-1.287,0.516l-2.703,1.801l-0.387,0.258l-0.256,0.258l-0.387,0.386l-0.257,0.515l-0.643,0l-0.516,0l-0.901,0l-0.772,-0.128l-0.902,0l-0.643,0l-0.772,0.128l-0.258,0l-0.515,0.257l-0.386,0.129l0.257,0.386l0,0.129l0.387,0.772l0,0.258l0,0.128l-0.258,0.130l-0.386,0.128l-0.772,0.258l-0.902,0.257l-0.643,0.257l-0.643,0.258l-0.644,0.129l-0.128,0l-0.387,0l-0.900,0.128l-0.645,0.129l-0.644,0.258l-0.643,0.385l-0.644,0.258l-0.644,0.257l-0.643,0.258l-0.644,0l-0.514,-0.129l-0.387,-0.257l-0.257,-0.257l0,-0.130l0,-0.257l0.644,-0.900l1.286,-1.546l0,-0.128l0,-0.129l0.259,-0.515l0.385,-0.515l0.129,-0.258l-0.258,-0.772l-0.129,-0.515l0,-0.386l-0.127,-0.515l-0.130,-0.515l-0.129,-0.515l-0.128,-0.386l-0.130,-0.515l0,-0.257l-0.128,-0.387l-0.515,-0.386l-0.514,-0.128l-0.644,-0.258l-0.643,-0.257l-0.516,-0.257l0.386,-0.515l0,-0.129l-0.128,0l-0.258,-0.258l-0.128,0l-0.258,0.128l-0.386,-0.128l-0.258,-0.129l-0.128,0l-0.129,-0.257l-0.129,0l0,-0.258l0,-0.128l0,-0.129l0,-0.129l-0.257,0l-0.258,0.258l-0.772,0l0.128,-0.258l-0.257,0l-0.386,-0.257l-0.128,-0.387l-0.130,-0.386l-0.514,-0.257l-0.515,-0.129l-0.515,-0.258l-0.515,-0.257l-0.515,-0.128l-0.515,-0.258l-0.515,-0.258l-0.514,-0.128l-0.258,-0.128l-0.387,-0.130l-0.643,-0.257l-0.772,-0.386l-0.772,-0.258l-0.773,-0.257l-0.386,-0.257l-0.258,0l-0.386,-0.258l-0.644,-0.129l-0.643,0.129l-0.772,0.258l-0.387,0.128l-0.386,0.129l-0.258,0.129l-0.515,0l-0.385,0l-3.219,-0.773l-2.188,0.387l-2.703,-0.773l-2.704,-0.515l-1.930,-0.129l-0.772,-0.514l-0.516,-1.417l-0.901,0l0,1.030l-5.536,0l-9.139,0l-9.397,0l-32.182,0l-2.704,0l-15.962,0l-5.149,-2.574l-1.931,-1.287l-4.891,-1.030l-1.545,-2.446l0.385,-1.673l-3.474,-1.031l-0.387,-2.188l-3.348,-2.061l0,-1.287l1.417,-1.287l0,-1.802l-4.634,-1.673l-2.703,-3.090l-1.674,-1.930l-2.446,-1.159l-1.802,-1.159l-1.545,-1.417l-2.703,0.902l-2.575,1.545l-2.445,-1.803l-1.802,-1.157l-2.704,-0.774l-2.574,0l0,-15.446l0,-9.913l5.019,0.644l4.249,1.286l2.832,0.258l2.317,-1.158l3.347,-0.901l3.990,0.385l3.992,-1.157l4.376,-0.644l1.931,1.029l1.931,-0.644l0.643,-1.158l1.803,0.257l4.634,2.447l3.604,-1.931l0.387,2.059l3.218,-0.387l1.029,-0.772l3.219,0.129l4.120,1.159l6.307,0.901l3.733,0.515l2.704,-0.129l3.604,1.288l-3.734,1.415l4.763,0.515l7.338,-0.257l2.317,-0.515l2.832,1.544l2.960,-1.287l-2.832,-1.158l1.803,-0.901l3.218,-0.129l2.189,-0.258l2.188,0.644l2.703,1.417l2.961,-0.258l4.763,1.287l4.248,-0.386l3.862,0l-0.258,-1.673l2.446,-0.515l4.120,0.900l0,2.576l1.673,-2.060l2.188,0l1.288,-2.704l-2.962,-1.673l-3.088,-1.030l0.128,-2.961l3.218,-2.060l3.605,0.515l2.703,1.158l3.604,3.091l-2.317,1.287l5.020,0.514l0,2.832l3.605,-2.189l3.218,1.804l-0.900,1.930l2.702,1.802l2.704,-1.931l2.060,-2.317l0.129,-2.960l3.861,0.257l3.862,0.387l3.733,1.287l0.128,1.416l-2.059,1.416l1.931,1.416l-0.386,1.286l-5.277,1.932l-3.734,0.386l-2.704,-0.772l-0.901,1.287l-2.574,2.317l-0.773,1.159l-3.089,1.802l-3.862,0.257l-2.188,1.031l-0.130,1.802l-3.089,0.386l-3.347,2.188l-2.961,2.961l-1.028,2.188l-0.130,3.090l3.991,0.386l1.159,2.576l1.287,2.059l3.733,-0.515l5.020,1.159l2.704,1.029l1.930,1.288l3.347,0.643l2.832,1.158l4.507,0.129l2.959,0.258l-0.514,2.446l0.901,2.702l1.931,2.961l3.991,2.576l2.059,-0.902l1.545,-2.703l-1.416,-4.247l-1.931,-1.545l4.247,-1.159l3.090,-1.931l1.545,-1.931l-0.257,-1.803l-1.802,-2.188l-3.348,-2.060l3.219,-2.832l-1.158,-2.445l-0.902,-4.249l1.931,-0.514l4.506,0.643l2.832,0.257l2.188,-0.644l2.575,0.902l3.347,1.545l0.772,1.029l4.763,0.259l0,2.187l0.901,3.476l2.446,0.386l1.931,1.545l3.862,-1.416l2.574,-2.961l1.802,-1.287l2.060,2.446l3.605,3.347l2.960,3.218l-1.159,1.802l3.604,1.417l2.446,1.545l4.249,0.772l1.802,0.772l1.030,2.317l2.060,0.387l-1.158,-1.028z' -] - -{ #category : #countries } -RTSVGPath class >> CentralAfricanRepublic [ - ^ 'M506.361,206.957l2.318,-0.129l0.384,-0.773l0.517,0.129l0.642,0.515l3.349,-1.029l1.157,-1.031l1.416,-0.901l-0.256,-0.900l0.772,-0.259l2.574,0.130l2.574,-1.287l1.932,-2.962l1.417,-1.030l1.672,-0.514l0.258,1.157l1.545,1.674l0,1.159l-0.387,1.159l0.129,0.773l1.029,0.771l2.059,1.159l1.419,1.159l0,0.901l1.800,1.287l1.159,1.287l0.643,1.544l2.059,1.031l0.389,0.901l-0.903,0.257l-1.674,0l-2.058,-0.257l-0.901,0.129l-0.514,0.643l-0.775,0.129l-1.158,-0.514l-2.961,1.287l-1.287,-0.258l-0.258,0.258l-0.900,1.544l-1.930,-0.514l-2.060,-0.258l-1.674,-1.030l-2.190,-0.900l-1.415,0.900l-1.030,1.417l-0.258,1.802l-1.800,-0.130l-1.803,-0.514l-1.545,1.544l-1.415,2.446l-0.387,-0.772l-0.129,-1.287l-1.157,-0.773l-1.031,-1.416l-0.257,-1.029l-1.288,-1.416l0.258,-0.772l-0.258,-1.160l0.258,-2.060l0.643,-0.515l-1.287,2.702z' -] - -{ #category : #countries } -RTSVGPath class >> Chad [ - ^ 'M504.302,192.281l0.258,-1.158l-1.674,-0.130l0,-1.673l-1.158,-1.029l1.158,-3.605l3.475,-2.446l0.130,-3.605l1.030,-5.406l0.514,-1.159l-1.030,-0.901l-0.129,-0.901l-1.029,-0.643l-0.643,-4.249l2.702,-1.416l10.815,5.149l11.069,5.407l-0.258,10.427l-2.316,-0.257l-1.158,2.060l-0.774,1.673l0.643,0.643l-0.901,0.772l0.258,1.159l-0.643,1.030l-0.259,1.031l0.902,-0.129l0.517,1.030l0.126,1.544l0.902,0.772l0,0.645l-1.672,0.514l-1.417,1.030l-1.932,2.962l-2.574,1.287l-2.574,-0.130l-0.772,0.259l0.256,0.900l-1.416,0.901l-1.157,1.031l-3.349,1.029l-0.642,-0.515l-0.517,-0.129l-0.384,0.773l-2.318,0.129l0.515,-0.644l-0.900,-1.930l-0.387,-1.160l-1.158,-0.385l-1.545,-1.546l0.514,-1.287l1.287,0.257l0.774,-0.257l1.415,0.129l-1.415,-2.446l0.128,-1.802l-0.258,-1.804l1.029,1.801z' -] - -{ #category : #countries } -RTSVGPath class >> Chile [ - ^ 'M266.669,369.286l-3.347,-1.544l-0.772,-1.675l0.644,-1.544l-1.288,-1.802l-0.386,-4.634l1.158,-2.574l2.832,-2.061l-3.990,-0.772l2.445,-2.446l1.030,-4.505l2.962,1.031l1.416,-5.666l-1.802,-0.642l-0.902,3.345l-1.674,-0.386l0.902,-3.862l0.901,-5.020l1.159,-1.801l-0.773,-2.576l-0.129,-3.090l1.030,-0.128l1.673,-4.249l1.932,-4.376l1.158,-3.991l-0.643,-3.990l0.772,-2.317l-0.387,-3.347l1.674,-3.218l0.386,-5.278l0.901,-5.535l0.902,-6.051l-0.259,-4.378l-0.513,-3.862l1.415,-0.644l0.644,-1.417l1.286,1.932l0.387,1.933l1.417,1.157l-0.773,2.576l1.417,2.960l1.028,3.733l1.932,-0.386l0.386,0.772l-0.902,2.704l-2.960,1.415l0,4.378l-0.515,0.900l0.772,1.031l-1.802,1.673l-1.802,2.574l-1.030,2.446l0.257,2.575l-1.672,2.831l1.287,4.636l0.772,0.514l-0.129,2.447l-1.415,2.702l0,2.189l-2.060,1.802l0,2.446l0.900,2.574l-1.673,1.030l-0.773,2.447l-0.513,2.703l0.385,3.347l-1.030,0.516l0.645,3.089l1.157,1.030l-0.901,1.158l1.287,0.514l0.258,1.030l-1.158,0.515l0.257,1.545l-0.900,3.605l-1.546,2.316l0.386,1.288l-0.901,1.674l-2.060,1.288l0.258,2.831l0.902,0.902l1.801,-0.129l0,2.060l1.160,1.545l6.436,0.385l2.574,0.387l-2.446,0l-1.288,0.643l-2.444,1.029l-0.387,2.447l-1.159,0.129l-3.090,-0.902l3.089,1.931zM283.274,374.822l1.546,0l-0.902,1.157l-2.316,0.774l-1.288,0l-1.544,-0.256l-1.932,-0.774l-2.831,-0.386l-3.476,-1.545l-2.704,-1.416l-3.732,-3.090l2.188,0.645l3.862,1.802l3.476,0.901l1.416,-1.159l0.901,-1.932l2.445,-1.029l1.931,0.258l0.129,0.127l-0.129,5.923l-2.960,0z' -] - -{ #category : #countries } -RTSVGPath class >> China [ - ^ 'M760.085,177.992l-2.188,-0.902l0,-2.317l1.288,-1.158l2.961,-0.773l1.544,0l0.645,1.031l-1.289,1.287l-0.514,1.545l2.447,-1.287zM712.198,152.117l-1.160,-0.644l-1.416,-0.128l-1.930,-0.645l-1.414,0.773l-1.804,1.931l-0.258,-2.059l-1.543,0.514l-3.221,-0.257l-2.959,-0.644l-2.189,-1.158l-2.188,-0.515l-0.900,-1.288l-1.545,-0.386l-2.703,-1.802l-2.061,-0.772l-1.158,0.643l-3.732,-1.930l-2.704,-1.674l-0.773,-2.960l1.932,0.385l0.129,-1.416l-1.030,-1.416l0.256,-2.189l-2.961,-3.089l-4.375,-1.159l-0.773,-2.059l-2.059,-1.287l-0.387,-0.773l-0.515,-1.416l0.129,-1.158l-1.674,-0.515l-0.772,0.256l-0.773,-2.573l0.773,-0.516l-0.386,-0.643l2.574,-1.288l1.930,-0.514l2.834,0.257l1.029,-1.673l3.476,-0.258l0.901,-1.158l4.248,-1.416l0.387,-0.644l-0.260,-1.545l1.931,-0.643l-2.445,-4.635l5.279,-1.159l1.415,-0.514l1.931,-4.892l5.408,0.901l1.416,-1.288l0.127,-2.704l2.317,-0.128l2.060,-1.801l1.030,-0.258l0.644,1.802l2.317,1.545l3.863,0.901l1.803,2.188l-1.032,3.219l1.032,1.158l3.216,0.387l3.606,0.385l3.217,1.674l1.673,0.386l1.159,2.446l1.672,1.545l2.962,0l5.536,0.644l3.605,-0.386l2.701,0.386l3.862,1.673l3.347,0l1.160,0.773l3.090,-1.416l4.375,-0.902l4.121,-0.128l3.088,-1.030l1.932,-1.416l1.931,-0.902l-0.515,-0.900l-0.774,-1.030l1.416,-1.674l1.416,0.257l2.832,0.516l2.704,-1.417l4.119,-1.029l1.931,-1.803l1.932,-0.772l3.861,-0.386l2.190,0.258l0.258,-0.902l-2.448,-1.931l-2.189,-0.772l-2.059,0.901l-2.701,-0.386l-1.420,0.386l-0.771,-1.158l1.931,-2.704l1.287,-1.931l3.219,0.900l3.862,-1.672l0,-1.159l2.447,-2.832l1.414,-0.901l0,-1.416l-1.545,-0.644l2.316,-1.417l3.350,-0.513l3.475,0l4.119,0.772l2.316,1.030l1.674,2.703l1.031,1.158l0.901,1.674l1.029,2.574l4.635,0.902l3.218,1.930l1.159,2.447l3.990,0l2.447,-1.030l4.375,-0.774l-1.414,2.448l-1.031,1.029l-0.901,2.832l-1.802,2.704l-3.346,-0.516l-2.318,0.901l0.771,2.317l-0.385,3.219l-1.416,0.129l0,1.288l-1.674,-1.546l-1.029,1.546l-4.248,1.157l0.387,1.417l-2.319,-0.130l-1.287,-0.900l-1.802,1.930l-2.961,1.546l-2.190,1.673l-3.732,0.772l-2.059,1.288l-2.832,0.772l1.416,-1.288l-0.513,-1.028l2.058,-1.803l-1.418,-1.417l-2.314,0.902l-3.090,1.931l-1.674,1.673l-2.576,0.129l-1.414,1.287l1.414,1.802l2.189,0.387l0.129,1.287l2.061,0.773l3.088,-1.931l2.447,1.029l1.672,0.129l0.387,1.416l-3.733,0.772l-1.287,1.416l-2.574,1.288l-1.418,1.931l2.834,1.417l1.158,2.702l1.545,2.446l1.930,2.060l-0.129,2.059l-1.674,0.773l0.644,1.416l1.545,0.773l-0.386,2.187l-0.643,2.189l-1.545,0.258l-1.932,2.832l-2.189,3.604l-2.443,3.219l-3.735,2.446l-3.732,2.317l-3.090,0.258l-1.674,1.157l-0.900,-0.772l-1.545,1.287l-3.733,1.416l-2.832,0.386l-0.900,2.833l-1.547,0.129l-0.642,-1.931l0.642,-1.031l-3.605,-0.900l-1.285,0.387l-2.704,-0.645l-1.289,-1.029l0.387,-1.545l-2.445,-0.515l-1.287,-1.030l-2.317,1.416l-2.576,0.257l-2.187,0l-1.416,0.644l-1.416,0.386l0.386,3.089l-1.418,0l-0.256,-0.643l-0.128,-1.158l-1.930,0.773l-1.160,-0.387l-2.059,-1.030l0.772,-2.317l-1.674,-0.515l-0.645,-2.446l-2.832,0.386l0.387,-3.089l2.445,-2.318l0.131,-2.188l0,-2.060l-1.289,-0.644l-0.900,-1.545l-1.545,0.130l-2.832,-0.386l0.900,-1.159l-1.285,-1.674l-1.934,1.158l-2.314,-0.643l-3.092,1.674l-2.445,2.059l2.188,-0.258z' -] - -{ #category : #countries } -RTSVGPath class >> Colombia [ - ^ 'M262.164,227.425l-1.159,-0.644l-1.287,-0.901l-0.772,0.386l-2.318,-0.386l-0.643,-1.157l-0.515,0.127l-2.704,-1.544l-0.386,-0.902l1.031,-0.129l-0.130,-1.416l0.644,-1.029l1.417,-0.129l1.029,-1.674l1.030,-1.416l-0.901,-0.644l0.515,-1.545l-0.644,-2.445l0.515,-0.772l-0.386,-2.318l-1.030,-1.416l0.258,-1.287l0.900,0.257l0.515,-0.901l-0.643,-1.544l0.386,-0.387l1.416,0.129l1.931,-1.931l1.158,-0.258l0,-0.901l0.515,-2.317l1.545,-1.158l1.674,-0.128l0.257,-0.516l2.059,0.257l2.189,-1.415l1.029,-0.644l1.288,-1.288l0.901,0.258l0.773,0.644l-0.516,0.901l-1.802,0.514l-0.644,1.289l-1.029,0.771l-0.772,1.030l-0.387,1.931l-0.772,1.545l1.415,0.129l0.387,1.287l0.644,0.645l0.128,1.028l-0.257,1.030l0,0.516l0.772,0.257l0.644,0.901l3.475,-0.258l1.546,0.387l1.802,2.317l1.158,-0.258l1.931,0.129l1.545,-0.386l0.902,0.515l-0.517,1.416l-0.513,0.901l-0.259,1.931l0.516,1.802l0.773,0.772l0.127,0.644l-1.416,1.287l1.031,0.644l0.772,0.901l0.773,2.703l-0.516,0.387l-0.515,-1.545l-0.773,-0.902l-0.900,0.902l-5.278,0l0.129,1.674l1.545,0.258l-0.129,1.029l-0.515,-0.258l-1.545,0.387l0,1.931l1.159,1.030l0.515,1.544l-0.129,1.159l-1.159,7.338l-1.416,-1.417l-0.772,0l1.802,-2.704l-2.060,-1.287l-1.673,0.259l-1.030,-0.516l-1.416,0.644l-2.060,-0.257l-1.544,-2.832l-1.288,-0.644l-0.772,-1.287l-1.802,-1.288l0.772,-0.258z' -] - -{ #category : #countries } -RTSVGPath class >> Congo [ - ^ 'M500.183,239.912l-0.902,-1.031l-0.900,0.515l-1.030,1.159l-2.189,-2.832l2.059,-1.544l-1.029,-1.804l0.901,-0.643l1.802,-0.257l0.256,-1.287l1.416,1.287l2.319,0.129l0.900,-1.288l0.258,-1.802l-0.258,-2.059l-1.286,-1.545l1.157,-3.219l-0.642,-0.515l-2.060,0.258l-0.643,-1.415l0.127,-1.160l3.475,0.129l2.062,0.644l2.187,0.643l0.259,-1.416l1.415,-2.446l1.545,-1.544l1.803,0.514l1.800,0.130l-0.257,1.673l-0.770,1.416l-0.517,1.673l-0.386,2.448l0.257,1.414l-0.514,1.030l0,0.901l-0.385,0.901l-1.805,1.287l-1.156,1.417l-1.160,2.575l0,2.190l-0.645,0.898l-1.543,1.288l-1.544,1.804l-1.032,-0.516l-0.128,-0.772l-1.544,0l-0.901,1.030l0.772,0.258z' -] - -{ #category : #countries } -RTSVGPath class >> CostaRica [ - ^ 'M241.695,204.768l-1.415,-0.515l-0.515,-0.644l0.257,-0.386l-0.128,-0.644l-0.644,-0.643l-1.159,-0.514l-0.901,-0.387l-0.128,-0.773l-0.773,-0.515l0.257,0.901l-0.643,0.644l-0.515,-0.772l-0.901,-0.258l-0.386,-0.644l0,-0.772l0.386,-0.901l-0.772,-0.257l0.644,-0.643l0.386,-0.259l1.801,0.644l0.644,-0.257l0.773,0.128l0.515,0.644l0.772,0.128l0.644,-0.514l0.644,1.416l1.029,1.030l1.287,1.157l-1.029,0.260l0,1.157l0.514,0.387l-0.385,0.257l0.128,0.515l-0.257,0.515l0.130,-0.515z' -] - -{ #category : #countries } -RTSVGPath class >> Croatia [ - ^ 'M516.017,103.327l0.643,1.031l0.773,0.772l-1.030,1.029l-1.160,-0.643l-1.931,0l-2.316,-0.386l-1.159,0l-0.643,0.643l-1.031,-0.643l-0.516,1.159l1.290,1.158l0.643,0.901l1.286,1.031l0.901,0.514l1.031,1.159l2.445,1.030l-0.258,0.514l-2.572,-1.030l-1.547,-1.029l-2.444,-0.773l-2.318,-1.931l0.514,-0.257l-1.157,-1.159l-0.130,-0.901l-1.674,-0.386l-0.898,1.159l-0.774,-0.901l0.128,-0.902l0.129,-0.128l1.802,0.128l0.516,-0.386l0.901,0.386l1.030,0l0,-0.772l0.901,-0.257l0.255,-1.030l2.190,-0.773l0.902,0.386l1.930,1.159l2.316,0.515l-1.032,0.387zM502.372,101.654l2.315,0.258l1.289,-0.644l2.446,0l0.515,-0.515l0.385,0l0.515,0.901l-2.190,0.773l-0.255,1.030l-0.901,0.257l0,0.772l-1.030,0l-0.901,-0.386l-0.516,0.386l-1.802,-0.128l0.517,-0.258l-0.646,-1.029l-0.259,1.417z' -] - -{ #category : #countries } -RTSVGPath class >> Cuba [ - ^ 'M243.626,164.475l2.318,0.257l2.059,0l2.576,0.902l1.028,1.030l2.576,-0.387l0.900,0.644l2.318,1.673l1.673,1.287l0.901,-0.128l1.545,0.644l-0.129,0.772l1.931,0l2.060,1.159l-0.257,0.644l-1.803,0.385l-1.802,0.129l-1.931,-0.257l-3.861,0.257l1.801,-1.544l-1.029,-0.644l-1.802,-0.258l-0.902,-0.772l-0.643,-1.415l-1.546,0l-2.445,-0.645l-0.772,-0.644l-3.604,-0.385l-0.902,-0.515l1.030,-0.644l-2.704,-0.128l-1.930,1.416l-1.030,0l-0.386,0.643l-1.417,0.257l-1.158,-0.257l1.417,-0.772l0.643,-1.030l1.159,-0.515l1.415,-0.515l2.059,-0.257l-0.644,0.387z' -] - -{ #category : #countries } -RTSVGPath class >> Cyprus [ - ^ 'M556.694,132.549l0.129,0.259l-2.704,1.028l-1.417,-0.385l-0.514,-1.030l1.159,-0.129l0.258,0.129l0.127,0l0.130,0l0.257,0l0.257,-0.129l0.260,-0.128l0.127,0.128l0.258,0l0.128,0l0.128,0l0.130,0.129l0,0.258l0.129,-0.130l0.257,0.130l0.128,0l0.131,-0.130l0.128,0l0.128,0l0.129,-0.128l0.128,0l-0.129,-0.128z' -] - -{ #category : #countries } -RTSVGPath class >> CzechRepublic [ - ^ 'M510.866,96.119l-1.158,-0.516l-1.286,0.129l-2.061,-0.901l-1.030,0.258l-1.417,1.030l-2.058,-0.772l-1.544,-1.159l-1.288,-0.645l-0.386,-1.157l-0.387,-0.773l1.932,-0.643l1.029,-0.644l1.932,-0.515l0.642,-0.516l0.645,0.259l1.287,-0.259l1.287,0.903l1.932,0.256l-0.129,0.645l1.414,0.644l0.517,-0.773l1.802,0.386l0.257,0.772l1.930,0.129l1.289,1.416l-0.774,0l-0.385,0.515l-0.644,0l-0.256,0.643l-0.517,0.129l0,0.257l-0.900,0.258l-1.288,0l0.387,-0.644z' -] - -{ #category : #countries } -RTSVGPath class >> DemocraticRepublicCongo [ - ^ 'M548.327,217.513l-0.258,3.217l1.159,0.258l-0.901,1.031l-1.031,0.643l-1.029,1.416l-0.514,1.287l-0.131,2.189l-0.643,1.028l0,2.061l-0.901,0.643l0,1.674l-0.386,0.128l-0.257,1.546l0.643,1.159l0.130,3.347l0.514,2.445l-0.257,1.415l0.514,1.546l1.545,1.546l1.545,3.346l-1.030,-0.258l-3.733,0.386l-0.643,0.387l-0.771,1.673l0.642,1.288l-0.514,3.088l-0.387,2.705l0.772,0.514l1.932,1.031l0.642,-0.516l0.258,2.961l-2.058,0l-1.159,-1.545l-0.903,-1.158l-2.058,-0.387l-0.644,-1.416l-1.674,0.901l-2.187,-0.385l-0.903,-1.158l-1.672,-0.258l-1.289,0l-0.128,-0.772l-0.901,-0.130l-1.287,-0.128l-1.674,0.385l-1.158,0l-0.645,0.131l0.129,-3.091l-0.900,-1.030l-0.129,-1.674l0.385,-1.673l-0.514,-1.031l-0.128,-1.672l-3.219,0l0.258,-0.902l-1.417,0l-0.128,0.388l-1.673,0.128l-0.644,1.545l-0.514,0.772l-1.418,-0.387l-0.900,0.387l-1.801,0.128l-1.031,-1.415l-0.645,-0.773l-0.771,-1.674l-0.643,-1.930l-7.982,-0.131l-0.900,0.389l-0.774,-0.131l-1.157,0.387l-0.387,-0.772l0.773,-0.386l0,-1.159l0.514,-0.642l0.902,-0.516l0.772,0.258l0.901,-1.030l1.544,0l0.128,0.772l1.032,0.516l1.544,-1.804l1.543,-1.288l0.645,-0.898l0,-2.190l1.160,-2.575l1.156,-1.417l1.805,-1.287l0.385,-0.901l0,-0.901l0.514,-1.030l-0.257,-1.414l0.386,-2.448l0.517,-1.673l0.770,-1.416l0.257,-1.673l0.258,-1.802l1.030,-1.417l1.415,-0.900l2.190,0.900l1.674,1.030l2.060,0.258l1.930,0.514l0.900,-1.544l0.258,-0.258l1.287,0.258l2.961,-1.287l1.158,0.514l0.775,-0.129l0.514,-0.643l0.901,-0.129l2.058,0.257l1.674,0l0.903,-0.257l1.672,2.188l1.158,0.387l0.773,-0.515l1.287,0.257l1.416,-0.643l0.644,1.159l-2.446,-1.802z' -] - -{ #category : #countries } -RTSVGPath class >> Denmark [ - ^ 'M488.21,78.87l-1.159,-1.417l0,-2.832l0.387,-0.644l0.772,-0.901l2.447,-0.130l0.900,-0.772l2.188,-0.771l-0.128,1.415l-0.772,0.902l0.385,0.772l1.417,0.386l-0.644,1.029l-0.773,-0.257l-2.060,1.932l0.775,1.288l-1.675,0.385l2.060,0.385zM498.509,75.779l0.900,1.416l-1.545,2.188l-2.831,-1.544l-0.386,-1.158l-3.862,0.902z' -] - -{ #category : #countries } -RTSVGPath class >> Djibouti [ - ^ 'M581.28,192.797l0.645,0.771l-0.129,1.159l-1.545,0.644l1.158,0.772l-0.900,1.416l-0.645,-0.514l-0.642,0.256l-1.545,-0.128l0,-0.773l-0.257,-0.771l0.901,-1.288l1.030,-1.159l1.158,0.257l-0.771,0.642z' -] - -{ #category : #countries } -RTSVGPath class >> DominicanRepublic [ - ^ 'M272.075,173.873l0.259,-0.516l2.187,0l1.545,0.772l0.772,-0.128l0.387,1.030l1.545,-0.129l-0.129,0.901l1.288,0l1.286,1.030l-1.030,1.159l-1.287,-0.644l-1.287,0.129l-0.773,-0.129l-0.514,0.515l-1.030,0.129l-0.387,-0.644l-0.900,0.386l-1.159,1.803l-0.643,-0.387l-0.130,-0.772l0,-0.773l-0.643,-0.772l0.643,-0.515l0.259,-1.029l0.259,1.416z' -] - -{ #category : #countries } -RTSVGPath class >> Ecuador [ - ^ 'M248.905,236.179l1.415,-2.060l-0.514,-1.159l-1.031,1.288l-1.672,-1.160l0.515,-0.772l-0.387,-2.445l0.901,-0.516l0.515,-1.673l1.030,-1.674l-0.258,-1.158l1.545,-0.514l1.802,-1.030l2.704,1.544l0.515,-0.127l0.643,1.157l2.318,0.386l0.772,-0.386l1.287,0.901l1.159,0.644l0.386,2.059l-0.772,1.674l-2.961,2.832l-3.219,1.030l-1.673,2.446l-0.514,1.802l-1.545,1.030l-1.159,-1.286l-1.030,-0.388l-1.159,0.257l0,-1.029l0.773,-0.643l0.386,1.030z' -] - -{ #category : #countries } -RTSVGPath class >> Egypt [ - ^ 'M559.269,147.483l-0.774,1.158l-0.514,1.931l-0.771,1.417l-0.645,0.514l-0.901,-0.901l-1.159,-1.158l-1.930,-3.862l-0.258,0.258l1.159,2.831l1.545,2.703l2.059,4.119l1.030,1.545l0.903,1.545l2.316,2.961l-0.517,0.386l0.130,1.802l3.089,2.447l0.259,0.514l-10.299,0l-10.556,0l-10.813,0l0,-9.912l0,-9.526l-0.901,-2.189l0.772,-1.673l-0.387,-1.159l0.903,-1.287l3.603,0l2.575,0.644l2.705,0.773l1.287,0.514l2.058,-0.901l1.030,-0.772l2.447,-0.258l1.930,0.386l0.642,1.287l0.647,-0.900l2.186,0.644l2.061,0.128l1.415,-0.644l-1.674,-4.635z' -] - -{ #category : #countries } -RTSVGPath class >> ElSalvador [ - ^ 'M228.694,190.865l-0.257,0.645l-1.545,0l-1.030,-0.259l-1.029,-0.515l-1.545,-0.129l-0.772,-0.644l0.128,-0.385l0.901,-0.644l0.515,-0.385l-0.129,-0.258l0.644,-0.129l0.772,0.129l0.515,0.643l0.902,0.386l0,0.386l1.287,-0.386l0.515,0.258l0.386,0.256l0.258,-1.031z' -] - -{ #category : #countries } -RTSVGPath class >> EquatorialGuinea [ - ^ 'M490.785,224.206l-0.515,-0.387l0.900,-2.960l4.378,0l0.128,3.219l-3.988,0l0.903,-0.128z' -] - -{ #category : #countries } -RTSVGPath class >> Eritrea [ - ^ 'M579.351,193.182l-0.901,-0.901l-1.160,-1.545l-1.158,-0.902l-0.773,-0.900l-2.317,-1.030l-1.801,-0.129l-0.644,-0.514l-1.674,0.643l-1.544,-1.287l-0.900,2.059l-3.091,-0.514l-0.258,-1.160l1.160,-3.861l0.258,-1.802l0.770,-0.901l2.061,-0.386l1.288,-1.546l1.543,3.090l0.773,2.446l1.545,1.288l3.604,2.574l1.545,1.545l1.415,1.544l0.903,0.902l1.285,0.902l-0.771,0.642l1.158,0.257z' -] - -{ #category : #countries } -RTSVGPath class >> Estonia [ - ^ 'M530.69,71.273l0.387,-1.544l-1.029,0.257l-1.674,-0.900l-0.256,-1.545l3.344,-0.773l3.477,-0.386l2.833,0.515l2.831,-0.129l0.386,0.515l-1.930,1.544l0.900,2.446l-1.158,0.901l-2.318,0l-2.316,-1.028l-1.158,-0.387l2.319,-0.514z' -] - -{ #category : #countries } -RTSVGPath class >> Ethiopia [ - ^ 'M579.351,193.182l-1.030,1.159l-0.901,1.288l0.257,0.771l0,0.773l1.545,0.128l0.642,-0.256l0.645,0.514l-0.645,0.901l1.032,1.545l1.029,1.287l1.029,0.901l8.754,3.218l2.316,0l-7.722,8.110l-3.475,0.129l-2.318,1.932l-1.803,0l-1.029,0.644l-1.030,0.256l-1.931,-1.158l-2.445,1.287l-1.030,1.159l-1.031,-0.387l-0.900,0.258l-1.159,-0.385l-0.772,-0.130l-3.089,-2.574l-2.318,0l-0.129,-0.644l-0.772,-1.288l-1.159,-0.515l-1.158,-2.832l-1.286,-0.644l-0.388,-1.158l-1.416,-1.287l-1.673,-0.129l0.901,-1.545l1.416,-0.127l0.386,-0.774l0,-2.447l0.774,-2.831l1.286,-0.772l0.259,-1.030l1.158,-2.060l1.672,-1.415l1.158,-2.575l0.387,-2.317l3.091,0.514l0.900,-2.059l1.544,1.287l1.674,-0.643l0.644,0.514l1.801,0.129l2.317,1.030l0.773,0.900l1.158,0.902l1.160,1.545l-0.901,-0.901z' -] - -{ #category : #countries } -RTSVGPath class >> FalklandIslandsMalvinas [ - ^ 'M302.584,365.296l-0.129,1.159l-1.03,1.416l2.188-1.031l1.158-1.286L302.584,365.296zM307.733,365.037l1.159,0.388l-0.902,1.415l-2.188,0.772l-0.257-0.9l1.288-1.416L307.733,365.037z' -] - -{ #category : #countries } -RTSVGPath class >> Fiji [ - ^ 'M946.097,274.154l0.773,-0.514l0.901,0.772l-0.516,1.416l-1.672,0.385l-1.418,-0.256l-0.256,-1.289l1.029,-0.900l-1.159,-0.386zM950.089,271.579l-1.160,0.773l-1.545,0.644l-0.385,-1.287l1.031,-1.030l0.899,-0.130l1.160,-0.256l-0.001,0l0.515,-0.129l-0.387,1.287l-0.128,0.128l-0.001,0z' -] - -{ #category : #countries } -RTSVGPath class >> Finland [ - ^ 'M542.276,40.893l-0.384,1.932l4.119,1.801l-2.448,2.060l3.089,2.960l-1.801,2.318l2.445,2.060l-1.157,1.802l3.991,1.802l-1.030,1.416l-2.448,1.545l-5.792,3.347l-4.890,0.257l-4.764,1.030l-4.377,0.515l-1.545,-1.416l-2.574,-0.901l0.514,-2.704l-1.286,-2.445l1.286,-1.545l2.447,-1.673l6.180,-2.961l1.800,-0.515l-0.256,-1.159l-3.734,-1.286l-0.901,-1.031l-0.128,-4.120l-4.250,-1.801l-3.475,-1.417l1.545,-0.643l2.961,1.416l3.606,-0.129l2.832,0.644l2.572,-1.159l1.289,-2.060l4.247,-0.900l3.476,1.157l1.159,-1.803z' -] - -{ #category : #countries } -RTSVGPath class >> France [ - ^ 'M481.903,93.673l1.287,0.773l3.861,0.514l-1.416,1.802l-0.257,1.931l-0.772,0.515l-1.288,-0.257l0.130,0.644l-1.932,1.545l0,1.158l1.288,-0.386l0.901,1.159l-0.128,0.772l0.772,1.029l-0.901,0.774l0.642,2.058l1.418,0.386l-0.258,1.160l-2.446,1.544l-5.277,-0.772l-3.992,0.901l-0.257,1.673l-3.090,0.258l-3.089,-1.158l-0.901,0.514l-5.021,-1.158l-1.029,-1.030l1.416,-1.674l0.515,-5.277l-2.832,-2.833l-2.060,-1.415l-3.991,-1.031l-0.386,-1.931l3.604,-0.644l4.506,0.773l-0.901,-3.090l2.575,1.159l6.306,-2.060l0.775,-2.317l2.317,-0.515l0.385,1.031l1.287,0l1.288,1.029l1.801,1.287l1.416,-0.257l2.318,1.286l0.643,0.259l-0.773,0.129zM488.854,112.082l1.674,-1.030l0.514,2.317l-0.899,2.188l-1.289,-0.643l-0.644,-1.803l-0.644,1.029z' -] - -{ #category : #countries } -RTSVGPath class >> FrenchGuyana [ - ^ 'M319.834,211.463l0.902,0.256l2.058,0.644l2.833,2.317l0.386,1.159l-1.545,2.446l-0.772,1.930l-1.030,1.031l-1.287,0.256l-0.387,-0.772l-0.643,-0.128l-0.772,0.644l-1.287,-0.516l0.772,-1.158l0.257,-1.159l0.386,-1.157l-1.029,-1.674l-0.259,-1.803l-1.417,2.316z' -] - -{ #category : #countries } -RTSVGPath class >> GM [ - ^ 'M419.855,191.51l0.387,-1.160l2.961,-0.129l0.515,-0.643l0.901,0l1.030,0.643l0.901,0l0.900,-0.387l0.516,0.773l-1.159,0.644l-1.158,-0.128l-1.159,-0.516l-1.030,0.644l-0.514,0l-0.644,0.386l2.447,0.127z' -] - -{ #category : #countries } -RTSVGPath class >> Gabon [ - ^ 'M495.162,237.723l-2.833,-2.703l-1.801,-2.317l-1.544,-2.704l0,-0.900l0.642,-0.902l0.644,-1.931l0.515,-2.060l0.903,-0.128l3.988,0l-0.128,-3.219l1.288,-0.129l1.673,0.387l1.674,-0.387l0.256,0.129l-0.127,1.160l0.643,1.415l2.060,-0.258l0.642,0.515l-1.157,3.219l1.286,1.545l0.258,2.059l-0.258,1.802l-0.900,1.288l-2.319,-0.129l-1.416,-1.287l-0.256,1.287l-1.802,0.257l-0.901,0.643l1.029,1.804l2.059,-1.544z' -] - -{ #category : #countries } -RTSVGPath class >> Gambia [ - ^ 'M419.855,191.51l0.387,-1.160l2.961,-0.129l0.515,-0.643l0.901,0l1.030,0.643l0.901,0l0.900,-0.387l0.516,0.773l-1.159,0.644l-1.158,-0.128l-1.159,-0.516l-1.030,0.644l-0.514,0l-0.644,0.386l2.447,0.127z' -] - -{ #category : #countries } -RTSVGPath class >> Georgia [ - ^ 'M577.161,115.042l0.387,-1.159l-0.643,-1.801l-1.546,-1.030l-1.544,-0.258l-0.900,-0.772l0.256,-0.387l2.318,0.516l3.990,0.386l3.604,1.287l0.517,0.515l1.671,-0.387l2.446,0.516l0.772,1.158l1.803,0.644l-0.771,0.257l1.287,1.545l-0.258,0.258l-1.545,-0.130l-1.930,-0.772l-0.644,0.387l-3.734,0.515l-2.702,-1.416l2.834,-0.128z' -] - -{ #category : #countries } -RTSVGPath class >> Germany [ - ^ 'M491.945,78.87l0.127,1.028l2.703,0.644l-0.128,0.901l2.831,-0.514l1.417,-0.644l3.090,1.029l1.287,0.901l0.642,1.287l-0.770,0.773l1.029,0.901l0.644,1.417l-0.257,1.030l1.158,1.672l-1.287,0.259l-0.645,-0.259l-0.642,0.516l-1.932,0.515l-1.029,0.644l-1.932,0.643l0.387,0.773l0.386,1.157l1.288,0.645l1.544,1.159l-0.901,1.158l-1.030,0.386l0.387,1.802l-0.258,0.386l-0.773,-0.515l-1.287,-0.128l-1.931,0.515l-2.446,-0.128l-0.387,0.772l-1.285,-0.772l-0.903,0.128l-2.832,-0.772l-0.515,0.514l-2.317,0l0.257,-1.931l1.416,-1.802l-3.861,-0.514l-1.287,-0.773l0.129,-1.159l-0.516,-0.515l0.258,-1.930l-0.386,-2.833l1.544,0l0.773,-0.901l0.644,-2.574l-0.515,-0.902l0.515,-0.515l2.317,-0.129l0.385,0.516l1.933,-1.288l-0.645,-1.029l-0.129,-1.544l2.060,0.385l-1.675,0.385z' -] - -{ #category : #countries } -RTSVGPath class >> Ghana [ - ^ 'M468.13,210.946l-4.249,1.674l-1.545,0.901l-2.446,0.773l-2.317,-0.773l0.129,-1.030l-1.159,-2.317l0.644,-3.088l1.158,-2.190l-0.772,-3.861l-0.386,-2.060l0.129,-1.545l4.634,-0.129l1.289,0.258l0.770,-0.514l1.288,0.256l-0.258,0.772l1.159,1.417l0,1.932l0.258,2.187l0.643,1.030l-0.514,2.318l0.128,1.416l0.773,1.673l-0.644,-0.900z' -] - -{ #category : #countries } -RTSVGPath class >> GreatBritian [ - ^ 'M444.829,78.483l2.317,-0.129l2.832,1.673l-1.416,1.803l-2.060,-0.516l-1.673,0l0.515,-1.416l0.515,1.415zM453.84,69.214l3.347,-0.257l-2.961,2.960l2.832,-0.386l2.832,0l-0.643,2.189l-2.446,2.446l2.832,0.256l2.575,3.348l1.801,0.515l1.674,3.089l0.773,1.030l3.347,0.515l-0.387,1.674l-1.416,0.772l1.159,1.416l-2.446,1.417l-3.605,0l-4.633,0.772l-1.159,-0.516l-1.803,1.159l-2.574,-0.257l-1.802,1.030l-1.415,-0.515l3.860,-2.832l2.446,-0.644l-4.247,-0.386l-0.772,-1.030l2.831,-0.901l-1.416,-1.416l0.515,-1.803l3.991,0.258l0.386,-1.545l-1.803,-1.674l-3.346,-0.515l-0.645,-0.772l1.031,-1.158l-0.901,-0.772l-1.416,1.286l-0.258,-2.573l-1.287,-1.417l0.901,-2.704l2.189,-2.187l-2.059,-0.128z' -] - -{ #category : #countries } -RTSVGPath class >> Greece [ - ^ 'M536.099,131.906l-0.387,0.773l-3.861,0.257l0,-0.515l-3.219,-0.515l0.387,-1.159l1.543,0.902l2.060,-0.129l2.059,0.257l-0.127,0.387l-1.545,0.258zM521.808,116.973l1.804,-0.258l1.029,-0.643l1.417,0.128l0.515,-0.513l0.514,-0.130l1.932,0.130l2.187,-0.773l1.930,1.029l2.445,-0.256l0,-1.417l1.289,0.772l-0.771,1.673l-0.645,0.258l-1.674,0l-1.416,-0.258l-3.218,0.644l1.802,1.545l-1.287,0.387l-1.543,0l-1.418,-1.417l-0.514,0.645l0.643,1.672l1.289,1.159l-1.031,0.644l1.545,1.286l1.286,0.774l0.130,1.545l-2.575,-0.773l0.772,1.417l-1.672,0.256l1.028,2.317l-1.800,0.129l-2.189,-1.287l-1.030,-2.059l-0.516,-1.803l-1.030,-1.288l-1.287,-1.545l-0.258,-0.772l1.288,-1.287l0.128,-0.901l0.901,-0.386l0,0.644z' -] - -{ #category : #countries } -RTSVGPath class >> Greenland [ - ^ 'M339.272,4.333l9.011,-1.544l9.525,0.128l3.348,-1.029l9.526,-0.258l21.497,0.386l16.864,2.060l-4.892,1.029l-10.298,0.129l-14.546,0.258l1.287,0.515l9.654,-0.257l8.110,0.901l5.149,-0.773l2.317,0.901l-2.961,1.545l6.824,-1.030l13.130,-1.030l7.981,0.515l1.545,1.159l-10.942,1.931l-1.546,0.644l-8.625,0.514l6.180,0.129l-3.089,1.931l-2.189,1.802l0.129,2.961l3.218,1.674l-4.249,0.128l-4.376,0.902l4.893,1.415l0.643,2.318l-2.832,0.257l3.476,2.317l-5.923,0.129l3.091,1.159l-0.902,0.900l-3.733,0.387l-3.862,0l3.476,1.931l0,1.158l-5.407,-1.158l-1.287,0.773l3.604,0.644l3.476,1.673l1.030,2.188l-4.763,0.515l-2.060,-1.031l-3.347,-1.544l0.901,1.803l-3.090,1.416l7.081,0.129l3.733,0.128l-7.208,2.316l-7.338,2.189l-7.852,0.902l-2.962,0l-2.831,1.030l-3.734,2.832l-5.793,1.931l-1.930,0.128l-3.604,0.644l-3.862,0.644l-2.317,1.673l0,1.802l-1.288,1.802l-4.505,2.189l1.158,2.060l-1.287,2.188l-1.287,2.703l-3.863,0.129l-3.989,-2.188l-5.278,0l-2.704,-1.545l-1.802,-2.574l-4.635,-3.347l-1.415,-1.803l-0.258,-2.316l-3.732,-2.576l0.900,-1.930l-1.802,-1.031l2.703,-3.088l3.991,-1.031l1.159,-1.158l0.515,-2.059l-3.476,-0.259l-6.179,-1.416l2.189,0l6.049,0l-4.634,-1.801l-2.446,-0.902l-4.892,-0.258l2.960,-2.445l-1.544,-1.030l-2.188,-1.931l-3.218,-2.832l-3.475,-1.030l0.128,-1.159l-7.338,-1.545l-5.664,-0.257l-7.208,0.129l-6.565,0.257l-3.090,-0.901l-4.763,-1.673l7.081,-0.901l5.405,-0.130l-11.457,-0.643l-6.050,-1.158l0.387,-1.030l10.169,-1.288l9.784,-1.287l1.030,-1.030l-7.210,-0.901l2.318,-1.029l9.397,-1.931l3.862,-0.258l-1.159,-1.287l6.437,-0.644l8.238,-0.387l8.368,-0.128l2.832,0.901l7.209,-1.545l6.436,1.030l3.347,1.159l6.050,0l-6.436,-1.545l-0.386,1.159z' -] - -{ #category : #countries } -RTSVGPath class >> Guatemala [ - ^ 'M222.516,189.963l-1.417,-0.514l-1.673,0l-1.159,-0.515l-1.544,-1.159l0.128,-0.773l0.257,-0.643l-0.385,-0.514l1.416,-2.188l3.347,0l0.128,-0.903l-0.385,-0.128l-0.387,-0.644l-1.030,-0.643l-0.901,-0.901l1.158,0l0,-1.416l2.575,0l2.446,0l0,2.060l-0.257,3.089l0.772,0l0.901,0.515l0.258,-0.386l0.771,0.257l-1.158,1.030l-1.287,0.772l-0.257,0.516l0.257,0.514l-0.515,0.773l-0.644,0.129l0.129,0.258l-0.515,0.385l-0.901,0.644l0.128,-0.385z' -] - -{ #category : #countries } -RTSVGPath class >> Guinea [ - ^ 'M442.512,206.313l-0.772,-0.129l-0.515,1.158l-0.772,-0.128l-0.515,-0.515l0.128,-1.029l-1.158,-1.674l-0.644,0.257l-0.643,0.130l-0.644,0.127l0,-1.030l-0.387,-0.642l0,-0.773l-0.515,-1.159l-0.772,-1.029l-2.188,0l-0.644,0.514l-0.772,0.129l-0.386,0.515l-0.387,0.772l-1.415,1.159l-1.159,-1.544l-1.030,-1.031l-0.644,-0.386l-0.772,-0.515l-0.257,-1.159l-0.386,-0.643l-0.773,-0.515l1.159,-1.287l0.901,0.128l0.644,-0.515l0.643,0l0.386,-0.386l-0.257,-0.901l0.257,-0.257l0.129,-0.901l1.287,0l1.931,0.643l0.643,0l0.130,-0.258l1.544,0.129l0.387,-0.129l0.128,1.030l0.387,0l0.772,-0.387l0.386,0.130l0.772,0.643l1.159,0.258l0.772,-0.644l0.773,-0.387l0.643,-0.385l0.515,0.129l0.644,0.643l0.386,0.644l1.030,1.158l-0.516,0.645l-0.128,0.900l0.644,-0.257l0.257,0.386l-0.128,0.773l0.772,0.772l-0.515,0.257l-0.129,0.901l0.516,1.031l0.772,2.187l-1.030,0.387l-0.258,0.257l0.129,0.644l-0.129,1.159l0.386,0z' -] - -{ #category : #countries } -RTSVGPath class >> GuineaBissau [ - ^ 'M424.49,197.173l-1.416,-1.030l-1.159,-0.257l-0.643,-0.773l0,-0.386l-0.772,-0.515l-0.258,-0.644l1.545,-0.386l0.901,0.129l0.644,-0.386l5.020,0.129l-0.129,0.901l-0.257,0.257l0.257,0.901l-0.386,0.386l-0.643,0l-0.644,0.515l-0.901,-0.128l1.159,-1.287z' -] - -{ #category : #countries } -RTSVGPath class >> Guyana [ - ^ 'M304.257,204.383l1.804,1.028l1.672,1.803l0,1.415l1.030,0l1.417,1.289l1.157,1.028l-0.514,2.319l-1.545,0.772l0.129,0.643l-0.514,1.416l1.157,1.931l0.902,0l0.385,1.545l1.545,2.317l-0.643,0.130l-1.416,-0.259l-0.901,0.644l-1.288,0.515l-0.772,0.128l-0.386,0.515l-1.287,-0.128l-1.674,-1.288l-0.128,-1.287l-0.773,-1.287l0.515,-2.316l0.772,-0.902l-0.644,-1.288l-0.900,-0.386l0.257,-1.159l-0.644,-0.643l-1.287,0.129l-1.930,-2.061l0.772,-0.772l0,-1.287l1.673,-0.385l0.644,-0.516l-0.902,-1.029l0.130,-0.902l-2.187,1.672z' -] - -{ #category : #countries } -RTSVGPath class >> Haiti [ - ^ 'M268.085,173.357l1.673,0.129l2.317,0.387l0.259,1.416l-0.259,1.029l-0.643,0.515l0.643,0.772l0,0.773l-1.802,-0.515l-1.287,0.257l-1.673,-0.257l-1.159,0.515l-1.545,-0.773l0.258,-0.900l2.446,0.385l2.060,0.258l1.029,-0.643l-1.288,-1.159l0,-1.030l-1.673,-0.387l-0.644,0.772z' -] - -{ #category : #countries } -RTSVGPath class >> Honduras [ - ^ 'M229.981,192.023l-0.385,-0.900l-0.902,-0.258l0.258,-1.031l-0.386,-0.256l-0.515,-0.258l-1.287,0.386l0,-0.386l-0.902,-0.386l-0.515,-0.643l-0.772,-0.129l0.515,-0.773l-0.257,-0.514l0.257,-0.516l1.287,-0.772l1.158,-1.030l0.258,0.129l0.644,-0.386l0.772,-0.129l0.257,0.258l0.386,-0.129l1.288,0.257l1.288,-0.128l0.772,-0.258l0.386,-0.258l0.773,0.129l0.643,0.129l0.772,0l0.515,-0.258l1.287,0.387l0.387,0l0.772,0.515l0.773,0.643l1.030,0.387l0.643,0.772l-0.901,-0.128l-0.386,0.386l-0.902,0.386l-0.643,0l-0.643,0.385l-0.516,-0.127l-0.514,-0.517l-0.258,0.130l-0.258,0.643l-0.257,0l-0.129,0.516l-0.900,0.771l-0.515,0.258l-0.258,0.386l-0.773,-0.515l-0.643,0.643l-0.515,0l-0.643,0.129l0,1.288l-0.387,0l-0.257,0.644l0.902,-0.128z' -] - -{ #category : #countries } -RTSVGPath class >> Hungary [ - ^ 'M508.937,100.753l0.900,-1.674l-0.643,-0.643l1.545,0l0.257,-1.158l1.288,0.772l1.028,0.257l2.318,-0.257l0.129,-0.644l1.158,0l1.287,-0.515l0.258,0.258l1.287,-0.387l0.645,-0.643l0.900,-0.129l2.832,0.772l0.645,-0.257l1.415,0.773l0.256,0.643l-1.671,0.643l-1.290,1.803l-1.673,1.802l-2.059,0.515l-1.672,-0.129l-2.060,0.772l-1.032,0.387l-2.316,-0.515l-1.930,-1.159l-0.902,-0.386l-0.515,-0.901l0.385,0z' -] - -{ #category : #countries } -RTSVGPath class >> Iceland [ - ^ 'M426.163,47.974l-0.643,1.672l3.089,1.932l-3.604,2.059l-7.723,1.802l-2.318,0.515l-3.475,-0.385l-7.595,-0.902l2.703,-1.158l-5.922,-1.287l4.763,-0.516l-0.128,-0.900l-5.664,-0.644l1.930,-1.674l3.991,-0.386l4.248,1.803l4.119,-1.417l3.348,0.645l4.376,-1.417l-4.505,-0.258z' -] - -{ #category : #countries } -RTSVGPath class >> India [ - ^ 'M674.866,131.391l2.961,3.089l-0.256,2.189l1.030,1.416l-0.129,1.416l-1.932,-0.385l0.773,2.960l2.704,1.674l3.732,1.930l-1.672,1.160l-1.160,2.573l2.703,1.031l2.447,1.287l3.604,1.545l3.603,0.386l1.674,1.287l2.059,0.257l3.219,0.644l2.189,0l0.385,-1.158l-0.385,-1.674l0.258,-1.159l1.543,-0.514l0.258,2.059l0.129,0.516l2.447,1.029l1.672,-0.386l2.189,0.129l2.188,0l0.257,-1.674l-1.158,-0.901l2.188,-0.258l2.445,-2.059l3.092,-1.674l2.314,0.643l1.934,-1.158l1.285,1.674l-0.900,1.159l2.832,0.386l0.258,1.029l-1.030,0.515l0.256,1.674l-1.930,-0.515l-3.474,1.802l0.127,1.545l-1.545,2.317l-0.127,1.287l-1.160,2.189l-2.188,-0.515l0,2.704l-0.642,0.900l0.255,1.159l-1.287,0.643l-1.416,-4.247l-0.771,0l-0.387,1.802l-1.545,-1.416l0.901,-1.545l1.158,-0.129l1.289,-2.317l-1.545,-0.515l-2.574,0.128l-2.574,-0.386l-0.260,-1.931l-1.285,-0.128l-2.061,-1.159l-1.031,1.803l2.060,1.415l-1.802,1.030l-0.514,1.031l1.672,0.643l-0.514,1.674l0.901,2.059l0.515,2.188l-0.387,1.030l-1.931,-0.128l-3.217,0.643l0.129,1.931l-1.416,1.674l-3.861,1.802l-3.092,3.218l-2.059,1.675l-2.574,1.673l-0.129,1.287l-1.287,0.644l-2.447,1.029l-1.287,0.129l-0.772,2.059l0.645,3.476l0.127,2.189l-1.159,2.574l0,4.635l-1.414,0.128l-1.289,2.060l0.903,0.901l-2.448,0.773l-0.900,1.802l-1.158,0.772l-2.576,-2.574l-1.159,-3.734l-1.027,-2.703l-1.031,-1.287l-1.416,-2.575l-0.645,-3.347l-0.513,-1.674l-2.448,-3.733l-1.029,-5.278l-0.900,-3.346l0,-3.347l-0.516,-2.446l-3.861,1.544l-1.931,-0.257l-3.476,-3.347l1.287,-0.901l-0.772,-1.159l-3.218,-2.188l1.801,-1.802l5.922,0l-0.514,-2.317l-1.545,-1.417l-0.258,-2.059l-1.802,-1.159l2.961,-2.832l3.218,0.129l2.704,-2.833l1.802,-2.702l2.575,-2.704l0,-1.931l2.187,-1.545l-2.059,-1.287l-1.031,-1.802l-0.900,-2.447l1.287,-1.157l4.121,0.643l2.961,-0.386l-2.572,2.189z' -] - -{ #category : #countries } -RTSVGPath class >> Indonesia [ - ^ 'M801.921,250.982l0.258,0.515l0,0.773l-1.674,2.060l-2.317,0.515l-0.386,-0.257l0.258,-0.902l1.158,-1.674l-2.703,1.030zM826.767,245.576l-0.258,-2.058l0.515,-0.903l0.516,-1.030l0.643,0.901l0,1.286l1.416,-1.804zM845.175,242.742l0,8.755l-2.447,-2.188l-2.702,-0.514l-0.644,0.771l-3.475,0.129l1.156,-2.189l1.676,-0.772l-0.644,-2.962l-1.287,-2.317l-5.280,-2.187l-2.187,-0.256l-3.992,-2.448l-0.899,1.288l-1.031,0.257l-0.516,-1.030l0,-1.157l-2.058,-1.288l2.832,-1.030l1.931,0l-0.259,-0.644l-3.860,0l-1.160,-1.674l-2.314,-0.515l-1.161,-1.287l3.606,-0.643l1.414,-0.902l4.248,1.160l0.516,1.028l0.771,4.248l2.705,1.676l2.317,-2.833l3.090,-1.674l2.316,0l2.318,0.901l2.059,1.030l2.832,0.515l-0.129,-8.752zM761.116,223.434l1.801,1.416l1.803,-0.514l1.672,0.257l1.545,-1.417l1.289,-0.257l2.574,0.772l2.189,-0.515l1.414,-3.862l1.032,-0.901l0.900,-3.089l3.090,0l2.316,0.515l-1.545,2.446l2.059,2.574l-0.514,1.160l3.090,2.574l-3.217,0.257l-0.902,1.802l0.129,2.447l-2.576,1.930l-0.129,2.575l-1.030,4.119l-0.386,-0.901l-3.088,1.158l-1.031,-1.542l-1.930,-0.259l-1.287,-0.773l-3.219,0.901l-1.029,-1.287l-1.801,0.128l-2.189,-0.256l-0.387,-3.606l-1.416,-0.772l-1.287,-2.317l-0.260,-2.317l0.260,-2.574l1.545,-1.674l-0.515,-1.802zM813.765,234.505l2.961,0.772l0.902,2.059l-2.190,-1.029l-2.318,-0.256l-1.545,0.128l-1.801,0l0.643,-1.545l-3.348,0.129zM807.069,237.209l-1.929,-0.516l-0.516,-1.158l2.705,-0.129l0.643,0.901l0.903,-0.902zM809.903,221.117l0.129,1.416l1.674,0.258l0.256,1.158l-0.256,2.317l-1.289,-0.258l-0.514,1.674l1.159,1.417l-0.774,0.256l-1.029,-1.673l-0.772,-3.476l0.514,-2.060l-0.902,1.029zM796.386,224.593l3.090,-0.130l2.703,-1.930l0.386,0.643l-2.060,2.704l-2.059,0.515l-2.574,-0.644l-4.506,0.257l-2.316,0.387l-0.387,1.931l2.316,2.445l1.545,-1.158l5.022,-1.031l-0.258,1.289l-1.158,-0.387l-1.160,1.545l-2.446,1.030l2.575,3.476l-0.514,0.903l2.445,3.216l0,1.674l-1.416,0.771l-1.029,-0.901l1.287,-2.186l-2.703,1.028l-0.645,-0.772l0.385,-1.031l-1.930,-1.544l0.131,-2.574l-1.804,0.773l0.257,3.088l0.129,3.862l-1.800,0.387l-1.161,-0.774l0.774,-2.443l-0.389,-2.574l-1.156,-0.131l-0.772,-1.802l1.159,-1.802l0.384,-2.060l1.288,-4.120l0.515,-1.029l2.317,-2.060l2.189,0.772l-3.346,-0.387zM789.306,254.588l-3.604,-1.804l2.574,-0.643l1.416,0.902l0.903,0.771l-0.131,0.774l1.158,0zM792.138,249.953l1.802,-0.129l2.317,-1.029l-0.385,1.544l-3.992,0.643l-3.604,-0.257l0,-1.030l2.188,-0.515l-1.674,-0.773zM783.771,249.566l1.673,-0.257l0.645,1.158l-3.090,0.515l-1.803,0.387l-1.545,0l1.030,-1.674l1.416,0l0.773,-0.900l-0.901,-0.771zM757.511,244.287l0.386,0.902l5.149,0.258l0.514,-1.031l5.021,1.288l1.029,1.674l3.991,0.515l3.349,1.673l-3.092,1.032l-2.961,-1.160l-2.445,0.128l-2.832,-0.257l-2.445,-0.514l-3.219,-0.902l-1.932,-0.387l-1.158,0.387l-4.890,-1.159l-0.387,-1.158l-2.574,-0.129l1.929,-2.574l3.219,0.127l2.190,1.031l-1.158,-0.256zM746.438,229.871l0.387,1.932l0.903,1.415l2.058,0.257l1.289,1.802l-0.644,3.347l-0.129,4.118l-2.961,0l-2.317,-2.187l-3.476,-2.188l-1.158,-1.674l-2.059,-2.188l-1.289,-2.060l-2.061,-3.733l-2.314,-2.189l-0.775,-2.317l-1.028,-2.187l-2.447,-1.674l-1.416,-2.318l-2.059,-1.416l-2.705,-3.090l-0.256,-1.287l1.674,0.129l4.248,0.515l2.317,2.575l2.058,1.803l1.547,1.157l2.572,2.962l2.706,0l2.187,1.801l1.674,2.318l2.060,1.158l-1.158,2.189l1.545,1.030l-1.027,0z' -] - -{ #category : #countries } -RTSVGPath class >> Iran [ - ^ 'M610.502,126.756l2.317,-0.513l1.932,-1.546l1.803,0.129l1.157,-0.515l1.932,0.257l2.961,1.288l2.188,0.387l3.088,2.317l2.060,0.128l0.129,2.188l-1.029,3.477l-0.773,1.930l1.158,0.386l-1.158,1.416l0.902,2.188l0.256,1.674l2.060,0.515l0.129,1.673l-2.445,2.447l1.414,1.415l1.031,1.674l2.574,1.159l0.128,2.446l1.288,0.386l0.259,1.287l-3.992,1.288l-1.030,3.218l-5.020,-0.902l-2.961,-0.515l-2.961,-0.386l-1.160,-3.346l-1.285,-0.515l-2.058,0.515l-2.706,1.287l-3.345,-0.901l-2.705,-2.060l-2.575,-0.773l-1.800,-2.446l-2.061,-3.604l-1.416,0.387l-1.674,-0.902l-1.029,1.030l-1.545,-1.416l0,-1.416l-0.901,0l0.514,-1.931l-1.415,-2.060l-3.347,-1.416l-1.802,-2.575l0.643,-2.187l1.289,-0.902l-0.130,-1.545l-1.802,-0.772l-1.803,-3.476l-0.128,0l-1.288,-1.931l0.516,-0.901l-0.773,-3.089l1.802,-0.772l0.387,1.028l1.415,1.288l1.804,0.386l1.029,-0.129l3.089,-1.930l1.030,-0.258l0.773,0.773l-0.902,1.415l1.674,1.417l0.643,-0.129l0.901,1.931l2.575,0.516l1.803,1.415l3.862,0.385l4.247,-0.643l-0.257,0.644z' -] - -{ #category : #countries } -RTSVGPath class >> Iraq [ - ^ 'M585.658,126.628l0.128,0l1.803,3.476l1.802,0.772l0.130,1.545l-1.289,0.902l-0.643,2.187l1.802,2.575l3.347,1.416l1.415,2.060l-0.514,1.931l0.901,0l0,1.416l1.545,1.416l-1.674,-0.128l-1.803,-0.258l-1.930,2.703l-5.020,-0.258l-7.596,-5.406l-3.990,-1.931l-3.218,-0.773l-1.158,-3.218l6.051,-2.832l1.029,-3.218l-0.258,-1.931l1.417,-0.773l1.416,-1.673l1.158,-0.385l3.091,0.385l0.899,0.643l1.287,-0.385l0.128,0.258z' -] - -{ #category : #countries } -RTSVGPath class >> Ireland [ - ^ 'M448.562,81.83l0.387,1.931l-2.060,2.445l-4.764,1.544l-3.732,-0.385l2.188,-2.832l-1.415,-2.703l3.604,-2.060l2.059,-1.287l0.515,1.415l-0.515,1.416l1.673,0l-2.060,-0.516z' -] - -{ #category : #countries } -RTSVGPath class >> Israel [ - ^ 'M561.458,138.857l-0.516,0.902l-0.900,-0.387l-0.645,1.803l0.774,0.258l-0.774,0.385l-0.128,0.644l1.287,-0.257l0.130,1.029l-1.417,4.249l-1.674,-4.635l0.773,-0.901l-0.258,-0.129l0.772,-1.287l0.515,-1.931l0.385,-0.773l0.130,0l0.900,0l0.259,-0.515l0.643,0l0,1.160l0.256,-0.385z' -] - -{ #category : #countries } -RTSVGPath class >> Italy [ - ^ 'M493.361,100.624l1.672,0.386l0.258,-0.514l2.703,-0.386l0.644,0.900l3.734,0.644l-0.259,1.417l0.646,1.029l-2.063,-0.386l-2.315,1.030l0.257,1.287l-0.387,0.772l0.900,1.417l2.577,1.287l1.287,2.317l2.961,2.189l2.187,-0.130l0.645,0.644l-0.773,0.515l2.445,1.030l1.933,0.772l2.315,1.416l0.257,0.516l-0.513,0.900l-1.417,-1.157l-2.316,-0.516l-1.159,1.803l1.931,0.901l-0.387,1.416l-1.030,0.257l-1.544,2.317l-1.029,0.129l0,-0.772l0.514,-1.417l0.644,-0.643l-1.158,-1.545l-0.772,-1.417l-1.160,-0.256l-0.772,-1.159l-1.673,-0.515l-1.159,-1.030l-2.060,-0.257l-2.061,-1.159l-2.444,-1.802l-1.933,-1.545l-0.772,-2.703l-1.286,-0.258l-2.189,-0.901l-1.288,0.386l-1.545,1.287l-1.157,0.130l0.258,-1.160l-1.418,-0.386l-0.642,-2.058l0.901,-0.774l-0.772,-1.029l0.128,-0.772l1.160,0.643l1.287,-0.128l1.543,-1.031l0.387,0.516l1.288,-0.129l0.643,-1.030l1.932,0.257l1.158,-0.386l-0.258,1.159zM504.944,124.183l2.061,-0.258l-0.901,2.188l0.387,0.773l-0.644,1.415l-2.061,-1.030l-1.286,-0.256l-3.733,-1.416l0.384,-1.288l3.091,0.257l-2.702,0.385zM488.726,116.844l1.287,-0.901l1.675,1.931l-0.387,3.605l-1.288,-0.258l-1.029,0.902l-1.032,-0.644l-0.128,-3.219l-0.642,-1.545l-1.544,-0.129z' -] - -{ #category : #countries } -RTSVGPath class >> IvoryCoast [ - ^ 'M457.573,213.521l-1.287,0l-1.802,-0.514l-1.802,0l-3.219,0.514l-1.802,0.773l-2.703,1.030l-0.516,-0.129l0.259,-2.188l0.257,-0.387l-0.129,-1.030l-1.159,-1.158l-0.772,-0.129l-0.901,-0.772l0.644,-1.158l-0.258,-1.287l0.129,-0.773l0.386,0l0.129,-1.159l-0.129,-0.644l0.258,-0.257l1.030,-0.387l-0.772,-2.187l-0.516,-1.031l0.129,-0.901l0.515,-0.257l0.387,-0.258l0.772,0.386l2.059,0l0.514,-0.772l0.516,0.129l0.772,-0.385l0.387,1.157l0.643,-0.257l1.030,-0.515l1.287,0.643l0.387,0.902l1.286,0.515l0.902,-0.644l1.287,-0.129l1.802,0.773l0.772,3.861l-1.158,2.190l-0.644,3.088l1.159,2.317l0.129,-1.030z' -] - -{ #category : #countries } -RTSVGPath class >> Jamaica [ - ^ 'M256.242,177.22l1.802,0.128l1.416,0.644l0.515,0.772l-1.931,0.129l-0.772,0.386l-1.544,-0.386l-1.545,-1.030l0.385,-0.643l1.030,-0.130l-0.644,-0.130z' -] - -{ #category : #countries } -RTSVGPath class >> Japan [ - ^ 'M847.491,121.479l-2.574,2.704l0.129,2.703l-1.031,2.188l0.386,1.287l-1.287,1.931l-3.476,1.288l-4.762,0.128l-3.861,3.090l-1.801,-1.030l-0.129,-1.932l-4.635,0.517l-3.219,1.287l-3.089,0l2.703,2.059l-1.803,4.506l-1.801,1.159l-1.287,-1.031l0.643,-2.445l-1.672,-0.772l-1.031,-1.804l2.445,-0.900l1.416,-1.674l2.705,-1.415l2.059,-1.803l5.277,-0.773l2.961,0.516l2.832,-4.764l1.803,1.288l3.861,-2.704l1.545,-1.029l1.674,-3.347l-0.387,-2.961l1.158,-1.803l2.832,-0.386l1.416,3.734l0,-2.188zM854.829,108.606l1.930,-1.159l0.515,2.961l-3.990,0.772l-2.316,2.703l-4.250,-1.931l-1.414,2.962l-3.090,0.128l-0.387,-2.703l1.416,-2.060l2.832,-0.128l0.774,-3.734l0.771,-2.188l3.219,2.832l2.060,0.901l-1.930,-0.644zM821.874,136.798l1.416,-1.545l1.545,0.257l1.160,-1.157l1.930,0.643l0.387,0.900l-1.545,1.674l-1.159,-0.901l-1.287,0.643l-0.773,1.545l-1.801,-0.772l-0.127,1.287z' -] - -{ #category : #countries } -RTSVGPath class >> Jordan [ - ^ 'M560.942,139.759l0.516,-0.902l2.960,1.031l5.278,-2.833l1.158,3.218l-0.514,0.516l-5.407,1.287l2.703,2.703l-0.901,0.515l-0.515,0.902l-2.060,0.386l-0.643,0.901l-1.160,0.900l-2.960,-0.514l-0.128,-0.386l1.417,-4.249l-0.130,-1.029l0.386,-0.902l0,1.544z' -] - -{ #category : #countries } -RTSVGPath class >> Kazakhstan [ - ^ 'M656.46,113.111l-1.547,0.515l-3.603,1.802l-1.160,1.931l-1.030,0.129l-0.771,-1.288l-3.347,-0.128l-0.644,-2.189l-1.287,0l0.258,-2.703l-3.219,-2.060l-4.633,0.259l-3.219,0.385l-2.574,-2.446l-2.189,-1.029l-4.120,-1.931l-0.515,-0.129l-6.951,1.544l0.130,9.914l-1.419,0.128l-1.930,-2.060l-1.800,-0.772l-3.090,0.515l-1.160,0.900l-0.127,-0.643l0.642,-1.159l-0.515,-0.900l-3.089,-0.902l-1.286,-2.446l-1.416,-0.644l-0.130,-0.901l2.702,0.258l0,-1.931l2.320,-0.514l2.316,0.385l0.515,-2.574l-0.387,-1.674l-2.704,0.129l-2.316,-0.644l-3.090,1.159l-2.574,0.643l-1.416,-0.514l0.387,-1.416l-1.803,-1.803l-1.931,0.129l-2.317,-1.802l1.545,-2.060l-0.772,-0.515l2.186,-2.960l2.705,1.544l0.387,-1.931l5.535,-2.962l4.248,-0.127l5.922,1.931l3.088,1.029l2.961,-1.158l4.250,0l3.474,1.416l0.773,-0.772l3.732,0l0.644,-1.159l-4.376,-1.931l2.702,-1.288l-0.515,-0.772l2.575,-0.644l-1.929,-1.931l1.158,-0.901l10.039,-0.901l1.418,-0.644l6.693,-1.028l2.446,-1.160l4.763,0.644l0.901,2.833l2.832,-0.645l3.474,0.901l-0.258,1.416l2.577,-0.128l6.822,-2.575l-1.029,0.901l3.474,2.060l5.922,6.822l1.545,-1.416l3.605,1.546l3.860,-0.644l1.545,0.514l1.289,1.545l1.930,0.515l1.158,1.159l3.478,-0.387l1.414,1.675l-2.060,1.801l-2.317,0.128l-0.127,2.704l-1.416,1.288l-5.408,-0.901l-1.931,4.892l-1.415,0.514l-5.279,1.159l2.445,4.635l-1.931,0.643l0.260,1.545l-1.674,-0.386l-1.287,-0.902l-3.993,-0.386l-4.505,0l-1.030,0.258l-3.732,-1.159l-1.545,0.644l-0.514,1.545l-4.378,-0.902l-1.801,0.386l0.514,-1.159z' -] - -{ #category : #countries } -RTSVGPath class >> Kenya [ - ^ 'M561.972,214.552l2.318,0l3.089,2.574l0.772,0.130l1.159,0.385l0.900,-0.258l1.031,0.387l1.030,-1.159l2.445,-1.287l1.931,1.158l1.030,-0.256l-2.188,2.960l-0.130,10.169l1.931,2.189l-1.931,1.030l-0.514,1.416l-1.030,0.258l-0.515,1.545l-0.902,1.158l-0.513,1.673l-1.031,1.157l-4.119,-2.445l-0.256,-2.059l-10.042,-5.793l0,-2.832l0,-0.772l1.931,-1.674l1.029,-1.931l-0.771,-1.930l-1.031,-2.704l-1.287,-1.930l1.416,-1.159l2.188,-2.447l1.159,0.515l0.772,1.288l-0.129,-0.644z' -] - -{ #category : #countries } -RTSVGPath class >> Kuwait [ - ^ 'M594.411,146.196l0.645,1.158l-0.257,0.643l0.900,2.060l-1.930,0.129l-0.644,-1.288l-2.447,-0.257l1.930,-2.703l-1.803,-0.258z' -] - -{ #category : #countries } -RTSVGPath class >> Kyrgyzstan [ - ^ 'M656.46,113.111l0.514,-1.159l1.801,-0.386l4.378,0.902l0.514,-1.545l1.545,-0.644l3.732,1.159l1.030,-0.258l4.505,0l3.993,0.386l1.287,0.902l1.674,0.386l-0.387,0.644l-4.248,1.416l-0.901,1.158l-3.476,0.258l-1.029,1.673l-2.834,-0.257l-1.930,0.514l-2.574,1.288l0.386,0.643l-0.773,0.516l-5.020,0.514l-3.347,-0.901l-2.961,0.129l0.257,-1.545l2.961,0.515l1.030,-0.900l2.060,0.257l3.346,-1.932l-3.090,-1.416l-1.929,0.772l-2.061,-1.030l2.317,-1.801l0.770,0.258z' -] - -{ #category : #countries } -RTSVGPath class >> Laos [ - ^ 'M748.628,188.549l0.902,-1.288l0.127,-2.189l-2.187,-2.446l-0.129,-2.574l-2.059,-2.189l-2.060,-0.258l-0.516,1.030l-1.545,0l-0.900,-0.385l-2.832,1.544l0,-2.446l0.642,-2.832l-1.800,-0.128l-0.129,-1.546l-1.161,-0.900l0.516,-0.902l2.318,-1.802l0.256,0.643l1.418,0l-0.386,-3.089l1.416,-0.386l1.544,2.188l1.159,2.446l3.347,0l1.028,2.317l-1.672,0.772l-0.774,0.902l3.219,1.674l2.188,3.217l1.673,2.318l2.061,1.931l0.645,1.803l-0.387,2.702l-2.446,-0.901l-1.160,1.803l2.316,1.029z' -] - -{ #category : #countries } -RTSVGPath class >> Latvia [ - ^ 'M521.938,76.037l0.128,-2.060l1.288,-1.674l2.573,-0.900l2.060,2.059l2.190,-0.128l0.513,-2.061l2.319,-0.514l1.158,0.387l2.316,1.028l2.318,0l1.286,0.644l0.129,1.287l0.901,1.545l-2.831,1.031l-1.674,0.514l-2.574,-1.288l-1.416,-0.257l-0.385,-0.515l-2.705,0.259l-4.506,-0.130l3.088,-0.773z' -] - -{ #category : #countries } -RTSVGPath class >> Lebanon [ - ^ 'M561.714,137.312l-0.643,0l-0.259,0.515l-0.900,0l0.900,-2.187l1.289,-1.932l0.128,0l1.159,0.128l0.515,1.031l-1.546,1.029l-0.514,1.416l0.129,0z' -] - -{ #category : #countries } -RTSVGPath class >> Lesotho [ - ^ 'M543.306,304.922l0.902,0.900l-0.773,1.287l-0.515,0.902l-1.417,0.385l-0.514,0.901l-1.030,0.258l-1.931,-2.059l1.416,-1.803l1.416,-1.029l1.287,-0.516l-1.159,-0.774z' -] - -{ #category : #countries } -RTSVGPath class >> Liberia [ - ^ 'M444.442,215.195l-0.643,0l-2.832,-1.287l-2.446,-2.060l-2.317,-1.416l-1.802,-1.673l0.644,-0.902l0.129,-0.771l1.287,-1.546l1.159,-1.157l0.643,-0.130l0.644,-0.257l1.158,1.674l-0.128,1.029l0.515,0.515l0.772,0.128l0.515,-1.158l0.772,0.129l-0.129,0.773l0.258,1.287l-0.644,1.158l0.901,0.772l0.772,0.129l1.159,1.158l0.129,1.030l-0.257,0.387l0.259,-2.188z' -] - -{ #category : #countries } -RTSVGPath class >> Libya [ - ^ 'M505.204,165.376l-1.932,1.030l-1.416,-1.544l-4.248,-1.159l-1.288,-1.674l-2.060,-1.158l-1.286,0.385l-0.902,-1.415l-0.127,-1.159l-1.546,-2.059l1.030,-1.030l-0.259,-1.673l0.387,-1.546l-0.256,-1.158l0.513,-2.318l-0.126,-1.158l-0.903,-2.446l1.287,-0.643l0.257,-1.031l-0.257,-1.158l1.803,-1.029l0.900,-0.902l1.288,-0.772l0.129,-2.060l3.217,0.901l1.030,-0.257l2.320,0.514l3.602,1.159l1.160,2.446l2.446,0.515l3.860,1.158l2.833,1.288l1.286,-0.644l1.288,-1.287l-0.643,-2.059l0.900,-1.288l1.932,-1.288l1.801,-0.385l3.734,0.514l0.901,1.287l1.029,0l0.773,0.516l2.703,0.257l0.645,0.901l-0.903,1.287l0.387,1.159l-0.772,1.673l0.901,2.189l0,9.526l0,9.912l0,5.408l-2.832,0l0,1.415l-11.069,-5.407l-10.815,-5.149l2.702,-1.416z' -] - -{ #category : #countries } -RTSVGPath class >> Lithuania [ - ^ 'M526.442,80.67l-0.128,-0.772l0.259,-0.643l-1.289,-0.515l-2.702,-0.386l-0.644,-2.317l3.088,-0.773l4.506,0.130l2.705,-0.259l0.385,0.515l1.416,0.257l2.574,1.288l0.258,1.159l-2.189,0.901l-0.643,1.545l-2.961,0.901l-2.574,0l-0.644,-0.772l1.417,0.259z' -] - -{ #category : #countries } -RTSVGPath class >> Luxembourg [ - ^ 'M481.516,91.999l0.516,0.515l-0.129,1.159l-0.773,0.129l-0.643,-0.259l0.385,-1.544l-0.644,0z' -] - -{ #category : #countries } -RTSVGPath class >> Madagascar [ - ^ 'M598.66,260.508l0.772,1.160l0.643,1.801l0.385,3.219l0.775,1.287l-0.257,1.287l-0.518,0.773l-0.898,-1.545l-0.516,0.772l0.516,2.060l-0.258,1.158l-0.774,0.516l-0.129,2.316l-1.028,3.219l-1.417,3.604l-1.545,5.149l-1.031,3.734l-1.285,3.089l-2.188,0.644l-2.318,1.157l-1.544,-0.641l-2.189,-1.031l-0.773,-1.417l-0.129,-2.317l-0.900,-2.188l-0.258,-1.931l0.387,-1.930l1.287,-0.515l0,-0.901l1.288,-1.932l0.257,-1.802l-0.645,-1.285l-0.514,-1.676l-0.128,-2.446l0.900,-1.544l0.387,-1.673l1.287,-0.130l1.544,-0.514l0.901,-0.516l1.289,0l1.544,-1.544l2.189,-1.674l0.771,-1.415l-0.387,-1.159l1.159,0.386l1.545,-1.931l0,-1.544l0.901,-1.288l-0.902,-1.158z' -] - -{ #category : #countries } -RTSVGPath class >> Malawi [ - ^ 'M558.368,258.062l-0.773,1.932l0.773,3.605l0.901,-0.130l1.030,0.902l1.030,1.930l0.258,3.476l-1.160,0.645l-0.772,1.801l-1.802,-1.674l-0.258,-1.931l0.645,-1.158l-0.130,-1.159l-1.159,-0.644l-0.643,0.259l-1.545,-1.289l-1.416,-0.770l0.772,-2.447l0.773,-0.902l-0.516,-2.317l0.645,-2.189l0.386,-0.644l-0.644,-2.315l-1.287,-1.160l2.704,0.514l1.415,1.933l-0.773,-3.732z' -] - -{ #category : #countries } -RTSVGPath class >> Malaysia [ - ^ 'M740.39,210.174l0.642,0.258l1.545,1.673l1.160,1.803l0.129,1.803l-0.258,1.287l0.258,0.900l0.129,1.545l1.029,0.772l1.030,2.318l0,0.901l-1.932,0.257l-2.574,-2.059l-3.217,-2.060l-0.260,-1.416l-1.543,-1.802l-0.386,-2.188l-1.032,-1.546l0.387,-1.931l-0.643,-1.158l0.516,-0.385l2.188,1.157l0.129,1.287l1.802,-0.257l-0.901,1.159zM760.601,221.632l2.058,0.901l2.061,-0.514l0.513,-2.318l1.159,-0.515l3.218,-0.515l1.932,-2.189l1.287,-1.673l1.287,1.417l0.516,-0.902l1.285,0l0.260,-1.674l0.127,-1.287l2.060,-1.931l1.287,-2.059l1.159,0l1.287,1.286l0.129,1.159l1.802,0.772l2.319,0.773l-0.258,1.158l-1.803,0.129l0.514,1.288l-2.059,0.901l-2.316,-0.515l-3.090,0l-0.900,3.089l-1.032,0.901l-1.414,3.862l-2.189,0.515l-2.574,-0.772l-1.289,0.257l-1.545,1.417l-1.672,-0.257l-1.803,0.514l-1.801,-1.416l0.515,1.802z' -] - -{ #category : #countries } -RTSVGPath class >> Mali [ - ^ 'M432.471,187.646l0.902,-0.514l0.385,-1.674l0.902,0l1.930,0.772l1.416,-0.514l1.160,0.129l0.385,-0.644l10.814,0l0.514,-1.931l-0.385,-0.257l-1.288,-11.587l-1.416,-11.714l4.119,0l9.140,5.922l9.139,5.792l0.645,1.288l1.672,0.772l1.159,0.387l0.128,1.801l2.961,-0.257l0,6.179l-1.543,1.802l-0.130,1.674l-2.445,0.386l-3.735,0.258l-0.900,0.901l-1.802,0.129l-1.673,0l-0.644,-0.516l-1.545,0.387l-2.446,1.158l-0.514,0.774l-2.189,1.285l-0.257,0.645l-1.159,0.514l-1.287,-0.257l-0.773,0.644l-0.385,1.802l-2.189,2.189l0.128,0.900l-0.771,1.159l0.128,1.545l-1.030,0.515l-0.643,0.257l-0.387,-1.157l-0.772,0.385l-0.516,-0.129l-0.514,0.772l-2.059,0l-0.772,-0.386l-0.387,0.258l-0.772,-0.772l0.128,-0.773l-0.257,-0.386l-0.644,0.257l0.128,-0.900l0.516,-0.645l-1.030,-1.158l-0.386,-0.644l-0.644,-0.643l-0.515,-0.129l-0.643,0.385l-0.773,0.387l-0.772,0.644l-1.159,-0.258l-0.772,-0.643l-0.386,-0.130l-0.772,0.387l-0.387,0l-0.128,-1.030l0.128,-0.772l-0.257,-1.030l-1.030,-0.772l-0.515,-1.545l0.129,1.674z' -] - -{ #category : #countries } -RTSVGPath class >> Mauritania [ - ^ 'M432.471,187.646l-1.802,-1.930l-1.674,-1.931l-1.801,-0.772l-1.288,-0.773l-1.416,0l-1.287,0.643l-1.416,-0.257l-0.901,0.901l-0.258,-1.416l0.773,-1.416l0.386,-2.445l-0.386,-2.704l-0.258,-1.417l0.258,-1.287l-0.773,-1.287l-1.416,-1.158l0.643,-0.901l10.557,0l-0.515,-3.862l0.644,-1.417l2.574,-0.257l-0.129,-6.823l8.883,0.129l0,-4.120l10.040,6.566l-4.119,0l1.416,11.714l1.288,11.587l0.385,0.257l-0.514,1.931l-10.814,0l-0.385,0.644l-1.160,-0.129l-1.416,0.514l-1.930,-0.772l-0.902,0l-0.385,1.674l0.902,-0.514z' -] - -{ #category : #countries } -RTSVGPath class >> Mexico [ - ^ 'M203.592,157.266l-1.030,2.446l-0.515,1.931l-0.257,3.605l-0.257,1.287l0.514,1.416l0.773,1.287l0.644,2.188l1.802,1.931l0.515,1.545l1.158,1.416l2.832,0.643l1.029,1.159l2.447,-0.772l2.060,-0.258l1.930,-0.513l1.803,-0.388l1.672,-1.158l0.644,-1.545l0.258,-2.317l0.386,-0.772l1.803,-0.644l2.961,-0.644l2.316,0l1.674,-0.129l0.644,0.516l-0.129,1.287l-1.417,1.674l-0.643,1.544l0.515,0.515l-0.386,1.158l-0.772,2.060l-0.644,-0.644l-0.515,0l-0.515,0.130l-1.030,1.544l-0.515,-0.258l-0.257,0.129l0,0.387l-2.446,0l-2.575,0l0,1.416l-1.158,0l0.901,0.901l1.030,0.643l0.387,0.644l0.385,0.128l-0.128,0.903l-3.347,0l-1.416,2.188l0.385,0.514l-0.257,0.643l-0.128,0.773l-2.961,-2.832l-1.416,-0.901l-2.189,-0.772l-1.544,0.257l-2.189,1.030l-1.287,0.258l-1.930,-0.773l-2.060,-0.515l-2.446,-1.158l-2.061,-0.387l-3.088,-1.287l-2.189,-1.286l-0.644,-0.645l-1.545,-0.258l-2.702,-0.772l-1.159,-1.287l-2.961,-1.545l-1.288,-1.673l-0.644,-1.287l0.902,-0.258l-0.258,-0.772l0.644,-0.772l0,-0.902l-0.901,-1.158l-0.257,-1.159l-0.902,-1.287l-2.445,-2.704l-2.703,-2.059l-1.288,-1.674l-2.317,-1.159l-0.515,-0.643l0.386,-1.674l-1.287,-0.643l-1.673,-1.287l-0.644,-1.802l-1.416,-0.258l-1.545,-1.416l-1.287,-1.288l-0.129,-0.901l-1.416,-2.060l-1.029,-2.059l0.128,-1.030l-1.931,-1.030l-0.901,0.129l-1.544,-0.773l-0.515,1.159l0.515,1.288l0.257,1.930l0.901,1.160l1.931,1.801l0.515,0.644l0.386,0.257l0.386,0.902l0.515,0l0.515,1.673l0.773,0.644l0.643,1.030l1.673,1.415l0.902,2.446l0.772,1.159l0.773,1.287l0.128,1.416l1.287,0.129l1.030,1.158l1.029,1.288l-0.128,0.386l-1.029,1.030l-0.516,0l-0.772,-1.673l-1.673,-1.546l-1.931,-1.286l-1.416,-0.644l0.129,-1.931l-0.515,-1.545l-1.288,-0.773l-1.802,-1.287l-0.386,0.386l-0.644,-0.643l-1.673,-0.643l-1.545,-1.675l0.129,-0.128l1.158,0.128l1.030,-1.029l0,-1.159l-2.059,-1.931l-1.545,-0.772l-1.031,-1.674l-0.900,-1.802l-1.287,-2.189l-1.159,-2.317l3.090,-0.256l3.475,-0.259l-0.258,0.515l3.992,1.288l6.178,1.931l5.407,0l2.060,0l0.129,-1.158l4.633,0l0.902,0.900l1.416,0.901l1.545,1.159l0.900,1.416l0.772,1.545l1.288,0.772l2.316,0.772l1.674,-2.058l2.189,-0.130l1.930,1.159l1.288,1.802l1.030,1.545l1.545,1.545l0.515,1.931l0.772,1.287l2.188,0.773l1.931,0.643l-1.030,0.129z' -] - -{ #category : #countries } -RTSVGPath class >> Moldova [ - ^ 'M536.998,97.02l0.644,-0.386l1.675,-0.259l2.059,0.903l1.029,0.128l1.287,0.644l-0.257,0.901l1.030,0.515l0.386,1.030l0.902,0.772l-0.131,0.386l0.517,0.258l-0.773,0.257l-1.545,-0.129l-0.258,-0.386l-0.513,0.258l0.129,0.386l-0.774,0.901l-0.385,0.901l-0.773,0.386l-0.387,-1.287l0.257,-1.159l-0.128,-1.158l-1.545,-1.674l-0.902,-1.029l-0.770,-0.901l0.774,0.258z' -] - -{ #category : #countries } -RTSVGPath class >> Mongolia [ - ^ 'M701.642,94.188l2.832,-0.515l5.148,-2.317l4.121,-1.287l2.317,0.901l2.832,0l1.802,1.287l2.703,0.129l3.862,0.644l2.574,-1.931l-1.029,-1.545l2.703,-2.832l3.090,1.158l2.445,0.257l3.090,0.773l0.515,1.931l3.862,1.158l2.574,-0.515l3.348,-0.257l2.705,0.257l2.701,1.287l1.674,1.417l2.445,0l3.348,0.386l2.574,-0.644l3.476,-0.387l3.991,-1.930l1.545,0.258l1.414,0.900l3.218,-0.128l-1.287,1.931l-1.931,2.704l0.771,1.158l1.420,-0.386l2.701,0.386l2.059,-0.901l2.189,0.772l2.448,1.931l-0.258,0.902l-2.190,-0.258l-3.861,0.386l-1.932,0.772l-1.931,1.803l-4.119,1.029l-2.704,1.417l-2.832,-0.516l-1.416,-0.257l-1.416,1.674l0.774,1.030l0.515,0.900l-1.931,0.902l-1.932,1.416l-3.088,1.030l-4.121,0.128l-4.375,0.902l-3.090,1.416l-1.160,-0.773l-3.347,0l-3.862,-1.673l-2.701,-0.386l-3.605,0.386l-5.536,-0.644l-2.962,0l-1.672,-1.545l-1.159,-2.446l-1.673,-0.386l-3.217,-1.674l-3.606,-0.385l-3.216,-0.387l-1.032,-1.158l1.032,-3.219l-1.803,-2.188l-3.863,-0.901l-2.317,-1.545l0.644,1.802z' -] - -{ #category : #countries } -RTSVGPath class >> Morocco [ - ^ 'M461.436,138.472l0.772,0.514l-0.515,1.030l-3.476,0.515l-1.287,1.030l-1.545,0.128l-0.128,2.061l-3.090,1.029l-1.030,1.417l-2.188,0.644l-2.703,0.514l-4.377,1.931l0,3.218l-0.387,0l0,1.417l-1.544,0.128l-0.901,0.515l-1.288,0l-0.900,-0.257l-2.319,0.257l-0.900,2.060l-0.773,0.257l-1.287,3.347l-3.733,2.961l-0.901,3.733l-1.159,1.159l-0.257,1.029l-6.050,0.129l-0.129,0l0.129,-1.158l1.030,-0.772l0.901,-1.416l-0.129,-0.902l0.901,-1.930l1.545,-1.674l0.901,-0.515l0.644,-1.546l0.128,-1.415l0.901,-1.673l1.802,-1.031l1.803,-2.703l1.287,-1.030l2.574,-0.386l2.060,-1.802l1.416,-0.644l2.189,-2.317l-0.644,-3.347l1.031,-2.317l0.384,-1.416l1.675,-1.803l2.703,-1.287l2.059,-1.029l1.802,-2.833l0.773,-1.673l2.059,0l1.545,1.158l2.575,-0.128l2.832,0.515l1.159,0.128l1.030,1.674l0.128,1.674l-0.902,-2.832z' -] - -{ #category : #countries } -RTSVGPath class >> Mozambique [ - ^ 'M558.368,258.062l1.931,-0.256l3.347,0.771l0.644,-0.386l1.930,0l0.902,-0.900l1.672,0.128l2.961,-1.030l2.060,-1.674l0.516,1.287l-0.129,2.705l0.257,2.316l0.128,4.248l0.516,1.289l-0.772,1.930l-1.160,1.803l-1.673,1.673l-2.446,1.030l-3.090,1.416l-2.961,2.830l-1.029,0.517l-1.930,1.930l-1.160,0.643l-0.128,1.803l1.288,2.060l0.514,1.674l-0.129,1.415l0.644,-0.770l-0.129,2.573l-0.386,1.288l0.643,0.514l-0.387,1.030l-1.157,1.030l-2.187,0.901l-3.349,1.417l-1.159,1.030l0.259,1.158l0.643,0.127l-0.130,1.418l-2.058,0l-0.259,-1.158l-0.385,-1.289l-0.258,-0.901l0.514,-3.090l-0.771,-1.801l-1.287,-3.863l2.832,-3.089l0.773,-1.930l0.386,-0.258l0.257,-1.545l-0.385,-0.773l0.128,-2.061l0.513,-1.801l0,-3.475l-1.415,-0.774l-1.287,-0.254l-0.515,-0.645l-1.287,-0.645l-2.317,0.129l-0.129,-1.029l-0.258,-1.932l8.239,-2.189l1.545,1.289l0.643,-0.259l1.159,0.644l0.130,1.159l-0.645,1.158l0.258,1.931l1.802,1.674l0.772,-1.801l1.160,-0.645l-0.258,-3.476l-1.030,-1.930l-1.030,-0.902l-0.901,0.130l-0.773,-3.605l-0.773,1.932z' -] - -{ #category : #countries } -RTSVGPath class >> MyanmarBurma [ - ^ 'M733.437,172.585l-1.672,1.159l-1.803,0.129l-1.287,2.960l-1.158,0.515l1.287,2.317l1.802,1.931l1.030,1.802l-0.901,2.318l-1.029,0.514l0.643,1.416l1.802,2.060l0.387,1.545l-0.129,1.287l1.158,2.447l-1.545,2.445l-1.287,2.832l-0.257,-2.059l0.773,-2.060l-0.902,-1.544l0.257,-2.962l-1.158,-1.416l-0.773,-3.219l-0.516,-3.345l-1.158,-2.318l-1.803,1.415l-3.088,1.932l-1.416,-0.257l-1.673,-0.644l0.902,-3.347l-0.647,-2.575l-2.058,-3.090l0.386,-0.900l-1.671,-0.387l-1.934,-2.188l-0.127,-2.189l0.900,0.387l0.129,-1.932l1.287,-0.643l-0.255,-1.159l0.642,-0.900l0,-2.704l2.188,0.515l1.160,-2.189l0.127,-1.287l1.545,-2.317l-0.127,-1.545l3.474,-1.802l1.930,0.515l-0.256,-1.674l1.030,-0.515l-0.258,-1.029l1.545,-0.130l0.900,1.545l1.289,0.644l0,2.060l-0.131,2.188l-2.445,2.318l-0.387,3.089l2.832,-0.386l0.645,2.446l1.674,0.515l-0.772,2.317l2.059,1.030l1.160,0.387l1.930,-0.773l0.128,1.158l-2.318,1.802l-0.516,0.902l1.544,-0.643z' -] - -{ #category : #countries } -RTSVGPath class >> Namibia [ - ^ 'M509.322,304.019l-2.059,-2.059l-1.030,-2.060l-0.644,-2.575l-0.645,-1.930l-0.900,-4.120l0,-3.216l-0.387,-1.545l-1.029,-1.032l-1.416,-2.317l-1.414,-3.218l-0.647,-1.674l-2.187,-2.575l-0.128,-2.058l1.288,-0.516l1.674,-0.515l1.672,0.128l1.674,1.159l0.384,-0.128l10.944,-0.128l1.801,1.287l6.566,0.385l4.892,-1.158l2.187,-0.644l1.803,0.258l1.030,0.513l0,0.259l-1.416,0.645l-0.901,0l-1.674,1.028l-1.029,-1.158l-4.119,1.030l-2.060,0l-0.129,9.654l-2.574,0.130l0,7.852l0,9.912l-2.446,1.416l-1.418,0.129l-1.673,-0.514l-1.288,-0.129l-0.383,-1.158l-1.033,-0.773l1.286,-1.415z' -] - -{ #category : #countries } -RTSVGPath class >> Nepal [ - ^ 'M702.673,151.859l-0.258,1.159l0.385,1.674l-0.385,1.158l-2.189,0l-3.219,-0.644l-2.059,-0.257l-1.674,-1.287l-3.603,-0.386l-3.604,-1.545l-2.447,-1.287l-2.703,-1.031l1.160,-2.573l1.672,-1.160l1.158,-0.643l2.061,0.772l2.703,1.802l1.545,0.386l0.900,1.288l2.188,0.515l2.189,1.158l2.959,0.644l-3.221,-0.257z' -] - -{ #category : #countries } -RTSVGPath class >> Netherlands [ - ^ 'M481.646,82.859l2.188,0l0.515,0.902l-0.644,2.574l-0.773,0.901l-1.544,0l0.386,2.833l-1.416,-0.644l-1.673,-1.158l-2.574,0.643l-1.932,-0.258l1.417,-0.772l2.317,-3.991l-3.733,1.030z' -] - -{ #category : #countries } -RTSVGPath class >> NewCaledonia [ - ^ 'M911.856,283.809l2.188,1.673l1.416,1.159l-1.029,0.643l-1.545,-0.643l-1.932,-1.287l-1.672,-1.416l-1.803,-1.932l-0.386,-0.901l1.158,0.129l1.545,0.901l1.158,0.902l-0.902,-0.772z' -] - -{ #category : #countries } -RTSVGPath class >> NewZealand [ - ^ 'M941.72,334.914l-1.030,1.417l-1.287,1.931l-2.058,1.030l-0.514,-0.772l-1.160,-0.386l1.545,-2.189l-0.774,-1.416l-2.961,-1.159l0.131,-0.901l1.930,-1.030l0.387,-2.059l-0.129,-1.674l-1.029,-1.803l0,-0.514l-1.290,-1.158l-2.058,-2.317l-1.158,-1.932l1.027,-0.256l1.418,1.544l2.187,0.773l0.774,2.315l1.930,2.834l0,-1.803l1.289,0.773l0.384,1.931l2.190,0.901l1.803,0.257l1.545,-1.030l1.285,0.258l-0.645,2.446l-0.771,1.544l-2.059,0l-0.771,0.773l0.255,1.158l0.386,-0.514zM922.282,344.312l2.319,-1.416l1.671,-1.416l1.161,-1.931l1.029,-0.772l0.387,-1.416l1.929,-1.287l0.514,1.158l0.645,1.030l1.933,-1.030l0.770,1.160l0,1.157l-1.028,1.160l-1.802,2.059l-1.289,1.029l1.029,1.288l-2.188,0l-2.316,1.030l-0.645,1.803l-1.545,2.703l-2.060,1.286l-1.414,0.773l-2.445,-0.128l-1.805,-0.901l-2.830,-0.130l-0.516,-1.030l1.416,-1.930l3.477,-2.704l1.672,-0.515l-1.931,1.030z' -] - -{ #category : #countries } -RTSVGPath class >> Nicaragua [ - ^ 'M234.359,197.045l-0.902,-0.774l-1.287,-1.158l-0.643,-0.901l-1.159,-0.773l-1.288,-1.287l0.258,-0.386l0.514,0.386l0.129,-0.129l0.902,-0.128l0.257,-0.644l0.387,0l0,-1.288l0.643,-0.129l0.515,0l0.643,-0.643l0.773,0.515l0.258,-0.386l0.515,-0.258l0.900,-0.771l0.129,-0.516l0.257,0l0.258,-0.643l0.258,-0.130l0.514,0.517l0.516,0.127l0.643,-0.385l0.643,0l0.902,-0.386l0.386,-0.386l0.901,0.128l-0.129,0.258l-0.129,0.514l0.258,1.030l-0.643,0.901l-0.258,1.159l-0.129,1.158l0.129,0.644l0.128,1.287l-0.514,0.258l-0.129,1.159l0.129,0.644l-0.516,0.771l0.130,0.645l0.386,0.514l-0.644,0.514l-0.772,-0.128l-0.515,-0.644l-0.773,-0.128l-0.644,0.257l-1.801,-0.644l0.386,-0.259z' -] - -{ #category : #countries } -RTSVGPath class >> Niger [ - ^ 'M471.091,194.855l0,-1.930l-3.091,-0.515l-0.128,-1.417l-1.545,-1.673l-0.258,-1.287l0.129,-1.287l1.802,-0.129l0.900,-0.901l3.735,-0.258l2.445,-0.386l0.130,-1.674l1.543,-1.802l0,-6.179l3.734,-1.288l7.852,-5.276l9.269,-5.150l4.248,1.159l1.416,1.544l1.932,-1.030l0.643,4.249l1.029,0.643l0.129,0.901l1.030,0.901l-0.514,1.159l-1.030,5.406l-0.130,3.605l-3.475,2.446l-1.158,3.605l1.158,1.029l0,1.673l1.674,0.130l-0.258,1.158l-0.774,0.257l-0.128,0.773l-0.514,0.128l-1.803,-2.960l-0.644,-0.129l-2.058,1.545l-2.061,-0.772l-1.545,-0.258l-0.772,0.386l-1.545,0l-1.544,1.159l-1.416,0l-3.219,-1.417l-1.286,0.644l-1.416,0l-1.030,-1.030l-2.704,-1.029l-2.832,0.385l-0.772,0.516l-0.259,1.544l-0.770,1.159l-0.258,2.447l-2.059,-1.674l-0.901,0.127l0.901,-0.773z' -] - -{ #category : #countries } -RTSVGPath class >> Nigeria [ - ^ 'M488.082,214.166l-2.704,0.900l-1.029,-0.128l-1.031,0.644l-2.188,-0.129l-1.415,-1.674l-0.902,-1.931l-1.931,-1.802l-2.059,0.128l-2.318,0l0.130,-4.376l0,-1.802l0.386,-1.674l0.901,-0.773l1.288,-1.672l-0.258,-0.773l0.514,-1.031l-0.643,-1.673l0.129,-0.771l0.258,-2.447l0.770,-1.159l0.259,-1.544l0.772,-0.516l2.832,-0.385l2.704,1.029l1.030,1.030l1.416,0l1.286,-0.644l3.219,1.417l1.416,0l1.544,-1.159l1.545,0l0.772,-0.386l1.545,0.258l2.061,0.772l2.058,-1.545l0.644,0.129l1.803,2.960l0.514,-0.128l1.160,1.158l-0.387,0.386l-0.129,0.901l-2.188,2.189l-0.773,1.673l-0.387,1.417l-0.513,0.514l-0.645,1.931l-1.414,1.159l-0.387,1.288l-0.644,1.159l-0.257,1.029l-1.803,0.901l-1.546,-1.030l-1.029,0l-1.544,1.545l-0.771,0.128l-1.289,2.575l0.772,-1.932z' -] - -{ #category : #countries } -RTSVGPath class >> NorthKorea [ - ^ 'M817.112,112.726l0.385,0.514l-1.029,-0.129l-1.158,0.902l-0.774,0.901l0.131,1.930l-1.418,0.644l-0.516,0.386l-1.027,0.772l-1.803,0.516l-1.158,0.773l0,1.158l-0.387,0.257l1.157,0.386l1.418,1.159l-0.385,0.772l-1.033,0.129l-1.930,0.129l-1.029,1.158l-1.285,0l-0.131,0.257l-1.287,-0.514l-0.385,0.386l-0.774,0.257l-0.129,-0.514l-0.644,-0.258l-0.772,-0.386l0.772,-1.159l0.644,-0.385l-0.255,-0.387l0.640,-1.545l-0.127,-0.386l-1.545,-0.258l-1.289,-0.772l2.190,-1.673l2.961,-1.546l1.802,-1.930l1.287,0.900l2.319,0.130l-0.387,-1.417l4.248,-1.157l1.029,-1.546l-1.674,-1.546z' -] - -{ #category : #countries } -RTSVGPath class >> Norway [ - ^ 'M494.905,68.442l-1.802,-1.674l-5.279,3.090l-3.603,0.643l-3.734,-1.415l-0.902,-2.833l-0.900,-6.179l2.445,-1.802l7.080,-2.189l5.407,-2.832l4.892,-3.733l6.435,-5.278l4.508,-1.931l7.465,-3.476l5.922,-1.158l4.377,0.129l4.119,-2.188l4.893,0.128l4.889,-0.515l8.368,1.931l-3.474,0.773l2.961,1.672l-4.507,1.031l-2.189,0.257l1.159,-1.803l-3.476,-1.157l-4.247,0.900l-1.289,2.060l-2.572,1.159l-2.832,-0.644l-3.606,0.129l-2.961,-1.416l-1.545,0.643l-1.673,0.129l-0.513,1.803l-5.022,-0.387l-0.644,1.417l-2.702,0l-1.674,1.931l-2.703,2.960l-4.248,3.862l1.031,0.901l-0.903,1.030l-2.705,0l-1.800,2.446l0.127,3.605l1.803,1.415l-0.900,3.090l-2.318,1.931l1.158,-1.545z' -] - -{ #category : #countries } -RTSVGPath class >> Oman [ - ^ 'M617.197,159.841l1.157,1.802l1.545,1.030l1.932,0.387l1.674,0.385l1.158,1.545l0.772,0.902l0.902,0.385l0,0.644l-1.031,1.545l-0.387,0.772l-1.158,0.902l-1.029,1.802l-1.157,-0.130l-0.517,0.645l-0.514,1.416l0.385,1.673l-0.257,0.387l-1.286,0l-1.675,1.028l-0.257,1.289l-0.642,0.514l-1.675,0l-1.031,0.773l0,1.029l-1.287,0.773l-1.416,-0.257l-1.802,0.900l-1.286,0.129l-0.900,-1.930l-2.061,-4.378l7.981,-2.702l1.802,-5.408l-1.159,-1.931l0,-1.030l0.773,-1.159l0.129,-1.029l1.159,-0.515l-0.517,-0.386l0.258,-1.802l-1.417,0zM616.294,156.752l0.773,-0.902l0.387,0.257l-0.257,1.159l-0.385,0.386l0.518,0.900z' -] - -{ #category : #countries } -RTSVGPath class >> Pakistan [ - ^ 'M667.659,126.886l2.059,1.287l0.773,2.059l4.375,1.159l-2.572,2.189l-2.961,0.386l-4.121,-0.643l-1.287,1.157l0.900,2.447l1.031,1.802l2.059,1.287l-2.187,1.545l0,1.931l-2.575,2.704l-1.802,2.702l-2.704,2.833l-3.218,-0.129l-2.961,2.832l1.802,1.159l0.258,2.059l1.545,1.417l0.514,2.317l-5.922,0l-1.801,1.802l-1.931,-0.772l-0.774,-1.932l-2.187,-2.059l-4.891,0.514l-4.377,0.130l-3.863,0.386l1.030,-3.218l3.992,-1.288l-0.259,-1.287l-1.288,-0.386l-0.128,-2.446l-2.574,-1.159l-1.031,-1.674l-1.414,-1.415l4.504,1.415l2.704,-0.386l1.674,0.386l0.514,-0.643l1.931,0.257l3.476,-1.159l0.129,-2.317l1.417,-1.544l2.058,0l0.257,-0.644l2.061,-0.386l1.029,0.257l1.031,-0.772l-0.129,-1.674l1.158,-1.545l1.673,-0.772l-1.030,-1.673l2.575,0l0.773,-0.902l-0.129,-1.029l1.287,-1.159l-0.257,-1.416l-0.645,-1.029l1.545,-1.287l2.833,-0.517l3.090,-0.256l1.416,-0.516l-1.545,0.385z' -] - -{ #category : #countries } -RTSVGPath class >> Palestine [ - ^ 'M560.942,139.759l0,1.544l-0.386,0.902l-1.287,0.257l0.128,-0.644l0.774,-0.385l-0.774,-0.258l0.645,-1.803l-0.900,-0.387z' -] - -{ #category : #countries } -RTSVGPath class >> Panama [ - ^ 'M255.47,207.471l-0.902,-0.772l-0.643,-1.416l0.643,-0.773l-0.643,-0.127l-0.514,-0.903l-1.288,-0.771l-1.159,0.257l-0.644,0.900l-1.029,0.644l-0.644,0.129l-0.257,0.515l1.287,1.545l-0.643,0.258l-0.387,0.385l-1.287,0.129l-0.515,-1.544l-0.387,0.386l-0.772,-0.129l-0.643,-1.030l-1.030,-0.258l-0.773,-0.257l-1.158,0l0,0.644l-0.387,-0.515l0.130,-0.515l0.257,-0.515l-0.128,-0.515l0.385,-0.257l-0.514,-0.387l0,-1.157l1.029,-0.260l1.030,1.031l-0.129,0.516l1.159,0.129l0.129,-0.129l0.772,0.643l1.416,-0.258l1.031,-0.643l1.673,-0.515l0.900,-0.901l1.545,0.257l-0.129,0.257l1.545,0l1.159,0.516l0.900,0.773l1.031,0.771l-0.386,0.387l0.643,1.544l-0.515,0.901l-0.900,-0.257l0.258,-1.287z' -] - -{ #category : #countries } -RTSVGPath class >> PapuaNewGuinea [ - ^ 'M845.175,242.742l-0.129,-8.752l4.635,1.803l5.019,1.543l1.932,1.417l1.416,1.417l0.385,1.544l4.505,1.673l0.645,1.416l-2.445,0.258l0.642,1.802l2.317,1.802l1.802,2.832l1.545,-0.128l-0.129,1.287l2.059,0.387l-0.771,0.514l2.832,1.158l-0.258,0.773l-1.803,0.129l-0.641,-0.644l-2.320,-0.258l-2.701,-0.385l-2.061,-1.803l-1.545,-1.416l-1.414,-2.446l-3.478,-1.159l-2.315,0.772l-1.673,0.902l0.386,2.059l-2.189,0.902l-1.416,-0.515l-2.832,-0.129l0,8.755zM876.454,236.822l1.031,0.901l0.258,1.417l-0.771,0.641l-0.518,-1.544l-0.642,-1.028l-1.288,-0.902l-1.545,-1.159l-1.931,-0.773l0.773,-0.643l1.416,0.773l1.030,0.515l1.031,0.642l-1.156,-1.160zM872.851,242.742l-1.545,0.645l-1.287,0.644l-1.545,0l-2.188,-0.772l-1.545,-0.773l0.256,-0.901l2.447,0.388l1.416,-0.131l0.387,-1.287l0.385,-0.127l0.260,1.414l1.543,-0.128l0.773,-0.902l1.543,-1.031l-0.256,-1.544l1.543,-0.128l0.516,0.515l0,1.416l-0.901,1.674l-1.416,0.259l0.386,-0.769zM882.118,241.328l0.776,0.645l1.414,1.673l1.158,0.900l-0.258,0.771l-0.771,0.259l-1.159,-1.030l-1.287,-1.673l-0.515,-2.061l0.386,-0.257l-0.256,-0.773z' -] - -{ #category : #countries } -RTSVGPath class >> Paraguay [ - ^ 'M296.405,286.898l1.030,-3.219l0,-1.414l1.416,-2.447l4.634,-0.772l2.446,0.130l2.575,1.285l0,0.902l0.772,1.415l-0.128,3.736l2.831,0.513l1.160,-0.513l1.801,0.642l0.516,0.903l0.256,2.443l0.259,1.031l1.028,0.129l1.031,-0.516l0.901,0.516l0,1.544l-0.386,1.545l-0.515,1.546l-0.386,2.445l-2.446,2.059l-2.189,0.387l-2.961,-0.387l-2.702,-0.772l2.574,-4.121l-0.386,-1.157l-2.703,-1.030l-3.348,-2.059l-2.188,-0.387l4.892,4.377z' -] - -{ #category : #countries } -RTSVGPath class >> Peru [ - ^ 'M277.74,274.281l-0.644,1.417l-1.415,0.644l-2.704,-1.543l-0.258,-1.031l-5.278,-2.705l-4.891,-2.959l-2.059,-1.674l-1.159,-2.188l0.515,-0.773l-2.318,-3.605l-2.703,-4.891l-2.446,-5.407l-1.158,-1.288l-0.902,-1.930l-2.058,-1.802l-1.932,-1.028l0.901,-1.161l-1.287,-2.576l0.772,-1.929l2.189,-1.673l0.386,1.030l-0.773,0.643l0,1.029l1.159,-0.257l1.030,0.388l1.159,1.286l1.545,-1.030l0.514,-1.802l1.673,-2.446l3.219,-1.030l2.961,-2.832l0.772,-1.674l-0.386,-2.059l0.772,-0.258l1.802,1.288l0.772,1.287l1.288,0.644l1.544,2.832l2.060,0.257l1.416,-0.644l1.030,0.516l1.673,-0.259l2.060,1.287l-1.802,2.704l0.772,0l1.416,1.417l-2.446,-0.129l-0.386,0.514l-2.188,0.515l-3.089,1.802l-0.129,1.288l-0.772,0.901l0.257,1.416l-1.545,0.773l0,1.158l-0.772,0.516l1.158,2.445l1.546,1.674l-0.644,1.158l1.801,0.129l1.030,1.416l2.317,0l2.317,-1.545l-0.256,4.119l1.287,0.257l1.416,-0.384l2.445,4.248l-0.644,0.901l-0.128,1.931l0,2.317l-1.159,1.287l0.515,1.029l-0.643,0.901l1.158,2.318l1.673,-2.830z' -] - -{ #category : #countries } -RTSVGPath class >> Philippines [ - ^ 'M790.722,192.797l-1.416,-2.061l2.318,0l1.031,1.030l-0.775,2.316l1.158,1.285zM795.485,200.134l0.645,-0.773l0.256,-1.673l1.545,-0.129l-0.385,1.802l1.930,-2.703l-0.258,2.574l-0.903,0.902l-0.900,1.802l-0.900,0.773l-1.545,-1.932l-0.515,0.643zM805.655,204.253l0.258,1.802l0.256,1.545l-1.029,2.446l-0.901,-2.704l-1.289,1.287l0.903,2.060l-0.774,1.288l-3.217,-1.545l-0.771,-2.059l0.898,-1.287l-1.801,-1.159l-0.773,1.030l-1.285,-0.129l-2.061,1.545l-0.386,-0.773l1.031,-2.317l1.672,-0.773l1.545,-0.901l0.902,1.159l2.061,-0.772l0.384,-1.158l1.930,-0.129l-0.129,-2.061l2.192,1.288l0.255,1.416l-0.129,-0.901zM784.415,201.936l-3.477,2.447l1.288,-1.804l1.929,-1.673l1.676,-1.931l1.285,-2.575l0.518,2.190l-1.803,1.415l1.416,-1.931zM794.841,177.863l-0.514,1.159l0.901,1.931l-0.643,2.188l-1.545,0.901l-0.516,2.188l0.645,2.189l1.416,0.257l1.158,-0.257l3.348,1.415l-0.258,1.417l0.900,0.772l-0.257,1.159l-2.061,-1.287l-1.029,-1.416l-0.643,1.031l-1.803,-1.676l-2.445,0.387l-1.287,-0.515l0.127,-1.157l0.775,-0.645l-0.775,-0.643l-0.256,0.901l-1.416,-1.545l-0.387,-1.159l-0.127,-2.575l1.157,0.902l0.257,-4.248l0.901,-2.447l1.545,0l1.674,0.773l0.902,-0.643l-0.256,-0.643zM793.94,196.271l-0.386,-1.286l1.674,0.771l1.673,0l0,1.160l-1.287,1.157l-1.674,0.773l-0.128,-1.287l-0.128,1.288zM803.337,194.212l0.773,2.961l-2.060,-0.644l0,0.901l0.644,1.674l-1.287,0.514l-0.129,-1.802l-0.773,-0.128l-0.385,-1.674l1.545,0.257l0,-1.029l-1.676,-2.060l2.576,0l-0.772,-1.030z' -] - -{ #category : #countries } -RTSVGPath class >> Poland [ - ^ 'M505.718,89.295l-1.158,-1.672l0.257,-1.030l-0.644,-1.417l-1.029,-0.901l0.770,-0.773l-0.642,-1.287l1.802,-0.901l4.248,-1.158l3.347,-0.901l2.703,0.387l0.258,0.643l2.574,0.129l3.348,0.256l4.890,0l1.417,0.259l0.644,0.772l0.129,1.288l0.771,1.029l0,1.029l-1.672,0.516l0.772,1.287l0.129,1.159l1.286,2.317l-0.257,0.773l-1.287,0.385l-2.447,2.189l0.646,1.287l-0.515,-0.257l-2.577,-1.030l-1.929,0.386l-1.289,-0.257l-1.672,0.644l-1.289,-1.030l-1.158,0.386l-0.127,-0.129l-1.289,-1.416l-1.930,-0.129l-0.257,-0.772l-1.802,-0.386l-0.517,0.773l-1.414,-0.644l0.129,-0.645l-1.932,-0.256l1.287,0.903z' -] - -{ #category : #countries } -RTSVGPath class >> Portugal [ - ^ 'M440.838,114.141l1.031,-0.643l1.158,-0.387l0.643,1.287l1.545,0l0.514,-0.385l1.545,0.128l0.773,1.416l-1.287,0.643l0,2.189l-0.514,0.387l0,1.159l-1.160,0.256l1.030,1.674l-0.772,1.674l0.902,0.900l-0.258,0.644l-1.030,1.030l0.257,0.902l-1.158,0.772l-1.416,-0.387l-1.416,0.258l0.386,-2.059l-0.129,-1.674l-1.288,-0.258l-0.643,-1.030l0.259,-1.802l1.028,-0.900l0.259,-1.159l0.514,-1.545l0,-1.159l-0.644,-1.030l0.129,0.901z' -] - -{ #category : #countries } -RTSVGPath class >> PuertoRico [ - ^ 'M286.622,177.09l1.416,0.258l0.516,0.515l-0.644,0.643l-2.060,0l-1.545,0.129l-0.258,-1.158l0.387,-0.387l-2.188,0z' -] - -{ #category : #countries } -RTSVGPath class >> Qatar [ - ^ 'M602.136,160.227l-0.257,-1.931l0.770,-1.416l0.772,-0.257l0.775,0.901l0,1.545l-0.517,1.544l-0.772,0.258l0.771,0.644z' -] - -{ #category : #countries } -RTSVGPath class >> RepublicofMacedonia [ - ^ 'M520.651,114.27l0.385,0l0.129,-0.515l1.545,-0.515l1.544,-0.257l1.288,0l1.287,0.900l0.258,1.674l-0.514,0.130l-0.515,0.513l-1.417,-0.128l-1.029,0.643l-1.804,0.258l-1.029,-0.643l-0.385,-1.160l-0.257,0.900z' -] - -{ #category : #countries } -RTSVGPath class >> RepublicofTurkey [ - ^ 'M535.712,120.707l2.961,-2.575l4.247,-0.129l1.030,-2.060l5.150,0.387l3.217,-1.803l3.219,-0.772l4.376,0l4.765,1.932l3.860,1.028l3.089,-0.515l2.317,0.259l3.218,-1.417l2.834,-0.128l2.702,1.416l0.386,0.901l-0.256,1.288l2.059,0.643l1.029,0.773l-1.802,0.772l0.773,3.089l-0.516,0.901l1.416,2.189l-1.287,0.385l-0.899,-0.643l-3.091,-0.385l-1.158,0.385l-3.090,0.515l-1.416,-0.128l-3.090,1.028l-2.317,0l-1.416,-0.514l-2.960,0.772l-0.902,-0.514l-0.129,1.545l-0.643,0.515l-0.772,0.643l-1.029,-1.287l1.029,-0.902l-1.674,0.129l-2.188,-0.514l-1.803,1.544l-4.118,0.257l-2.189,-1.416l-2.961,-0.128l-0.644,1.159l-1.802,0.256l-2.574,-1.415l-2.961,0l-1.545,-2.574l-2.058,-1.545l1.286,-2.060l1.673,1.287zM535.581,114.27l2.705,-0.772l2.317,0.257l0.386,1.030l2.317,0.902l-0.514,0.643l-3.219,0.257l-1.031,0.772l-2.314,1.417l-0.774,-1.159l0,-0.644l0.645,-0.258l0.771,-1.673l1.289,0.772z' -] - -{ #category : #countries } -RTSVGPath class >> Romania [ - ^ 'M526.442,97.921l1.159,-0.515l1.674,0.258l1.673,0l1.289,0.772l0.899,-0.515l1.931,-0.257l0.773,-0.644l1.158,0l0.774,0.258l0.770,0.901l0.902,1.029l1.545,1.674l0.128,1.158l-0.257,1.159l0.387,1.287l1.287,0.386l1.287,-0.386l1.158,0.515l0,0.645l-1.287,0.643l-0.772,-0.258l-0.773,3.219l-1.544,-0.258l-1.930,-1.030l-3.219,0.644l-1.287,0.644l-3.990,-0.130l-2.059,-0.386l-1.031,0.129l-0.773,-1.030l-0.513,-0.515l0.641,-0.386l-0.771,-0.386l-0.774,0.644l-1.543,-0.773l-0.257,-1.158l-1.674,-0.643l-0.258,-0.902l-1.416,-1.030l2.059,-0.515l1.673,-1.802l1.290,-1.803l-1.671,0.643z' -] - -{ #category : #countries } -RTSVGPath class >> Russia [ - ^ 'M950.089,36.129l-0.258,0l-0.516,-1.801l0.774,-0.772l0.127,-0.129l6.308,1.158l6.435,-1.544zM586.045,9.869l5.276,-0.515l4.121,0l0.514,0.773l1.545,-0.644l2.574,-0.515l3.990,0.644l-1.028,0.386l-3.605,0.385l-2.447,0.130l-0.384,0.514l-3.221,0.386l-2.830,-0.643l1.545,-0.772l6.050,0.129zM950.089,51.964l-3.992,1.802l2.574,3.219l-0.641,2.188l-5.539,-0.773l-7.336,1.674l-6.177,2.703l-4.764,2.703l-3.990,-1.673l-7.725,1.803l-6.693,0.128l-4.377,4.506l3.088,0.772l0,4.634l-3.475,1.545l0.645,1.803l-4.506,1.544l-1.159,3.219l-4.250,1.158l-0.513,1.931l-4.119,3.089l-1.674,-6.178l-1.545,-5.922l1.545,-4.249l2.060,-1.157l0.127,-1.287l3.864,-0.773l5.148,-3.219l4.506,-2.832l5.019,-2.060l2.061,-3.732l-3.219,0.128l-1.672,2.317l-6.695,2.446l-2.187,-3.089l-7.081,0.901l-6.693,4.247l1.803,1.288l-6.309,1.416l-10.041,-1.416l-11.715,0l-6.564,1.159l-8.369,5.278l-9.781,5.665l3.861,0.643l0.771,2.317l3.092,0.385l1.672,-1.545l2.961,0.387l3.475,2.060l0.515,3.089l-1.543,2.189l-0.902,2.575l-1.031,5.535l-4.120,3.862l-0.900,1.802l-3.603,3.219l-3.735,3.089l-1.674,1.545l-3.603,1.674l-1.674,0l-1.674,-1.288l-3.601,1.931l-0.518,0.901l-0.385,-0.514l0,-1.288l1.416,-0.129l0.385,-3.219l-0.771,-2.317l2.318,-0.901l3.346,0.516l1.802,-2.704l0.901,-2.832l1.031,-1.029l1.414,-2.448l-4.375,0.774l-2.447,1.030l-3.990,0l-1.159,-2.447l-3.218,-1.930l-4.635,-0.902l-1.029,-2.574l-0.901,-1.674l-1.031,-1.158l-1.674,-2.703l-2.316,-1.030l-4.119,-0.772l-3.475,0l-3.350,0.513l-2.316,1.417l1.545,0.644l0,1.416l-1.414,0.901l-2.447,2.832l0,1.159l-3.862,1.672l-3.219,-0.900l-3.218,0.128l-1.414,-0.900l-1.545,-0.258l-3.991,1.930l-3.476,0.387l-2.574,0.644l-3.348,-0.386l-2.445,0l-1.674,-1.417l-2.701,-1.287l-2.705,-0.257l-3.348,0.257l-2.574,0.515l-3.862,-1.158l-0.515,-1.931l-3.090,-0.773l-2.445,-0.257l-3.090,-1.158l-2.703,2.832l1.029,1.545l-2.574,1.931l-3.862,-0.644l-2.703,-0.129l-1.802,-1.287l-2.832,0l-2.317,-0.901l-4.121,1.287l-5.148,2.317l-2.832,0.515l-1.030,0.258l-1.414,-1.675l-3.478,0.387l-1.158,-1.159l-1.930,-0.515l-1.289,-1.545l-1.545,-0.514l-3.860,0.644l-3.605,-1.546l-1.545,1.416l-5.922,-6.822l-3.474,-2.060l1.029,-0.901l-6.822,2.575l-2.577,0.128l0.258,-1.416l-3.474,-0.901l-2.832,0.645l-0.901,-2.833l-4.763,-0.644l-2.446,1.160l-6.693,1.028l-1.418,0.644l-10.039,0.901l-1.158,0.901l1.929,1.931l-2.575,0.644l0.515,0.772l-2.702,1.288l4.376,1.931l-0.644,1.159l-3.732,0l-0.773,0.772l-3.474,-1.416l-4.250,0l-2.961,1.158l-3.088,-1.029l-5.922,-1.931l-4.248,0.127l-5.535,2.962l-0.387,1.931l-2.705,-1.544l-2.186,2.960l0.772,0.515l-1.545,2.060l2.317,1.802l1.931,-0.129l1.803,1.803l-0.387,1.416l1.416,0.514l-1.287,1.546l-2.575,0.386l-2.704,2.831l2.445,2.576l-0.255,1.801l2.960,3.218l-1.545,1.030l-0.516,0.644l-1.158,-0.129l-1.931,-1.673l-0.643,0l-1.803,-0.644l-0.772,-1.158l-2.446,-0.516l-1.671,0.387l-0.517,-0.515l-3.604,-1.287l-3.990,-0.386l-2.318,-0.516l-0.256,0.387l-3.477,-2.318l-3.089,-1.029l-2.318,-1.545l1.931,-0.514l2.317,-2.189l-1.544,-1.030l3.991,-1.159l-0.129,-0.643l-2.446,0.515l0.128,-1.159l1.417,-0.772l2.575,-0.258l0.384,-0.901l-0.513,-1.417l1.029,-1.415l0,-0.772l-3.990,-0.902l-1.545,0l-1.674,-1.287l-2.059,0.386l-3.476,-0.901l0.129,-0.514l-1.030,-1.159l-2.058,-0.129l-0.258,-0.901l0.643,-0.515l-1.673,-1.544l-2.833,0.256l-0.772,-0.128l-0.773,0.644l-0.901,-0.129l-0.643,-1.674l-0.644,-0.901l0.516,-0.257l2.187,0.128l1.030,-0.643l-0.772,-0.772l-1.803,-0.387l0.129,-0.515l-1.160,-0.515l-1.672,-1.802l0.645,-0.644l-0.258,-1.287l-2.703,-0.643l-1.416,0.385l-0.387,-0.772l-2.833,-0.644l-0.901,-1.545l-0.129,-1.287l-1.286,-0.644l1.158,-0.901l-0.900,-2.446l1.930,-1.544l-0.386,-0.515l3.089,-1.545l-2.832,-1.287l5.792,-3.347l2.448,-1.545l1.030,-1.416l-3.991,-1.802l1.157,-1.802l-2.445,-2.060l1.801,-2.318l-3.089,-2.960l2.448,-2.060l-4.119,-1.801l0.384,-1.932l2.189,-0.257l4.507,-1.031l2.830,-0.900l4.378,1.545l7.466,0.643l10.169,3.089l2.059,1.288l0.129,1.802l-7.336,2.061l-12.102,-2.061l-1.929,0.386l4.504,3.219l0.772,2.060l2.961,1.544l3.218,-2.703l7.596,1.287l0,-2.960l7.465,-1.803l3.992,-0.901l-2.190,-1.674l-0.643,-3.218l7.466,0.772l-1.801,3.348l4.632,-0.129l7.210,-2.703l9.783,-2.318l2.060,1.417l9.397,-1.546l6.695,0.902l0.643,-3.219l7.853,0.772l10.684,2.832l1.673,-1.801l-3.991,-4.507l4.505,-2.702l2.190,-3.090l8.369,0.386l0.769,4.763l0.260,5.536l1.672,1.674l-0.516,1.802l-4.119,2.832l2.832,0.386l5.151,-2.961l1.029,-3.991l-2.832,-1.159l-1.029,-5.664l3.345,-3.346l2.190,1.802l0.644,2.060l1.672,-1.288l3.477,-0.901l5.535,-0.128l5.019,1.544l-2.445,-2.575l-0.256,-2.574l4.760,-0.514l6.437,0.128l5.793,-0.387l-2.189,-1.415l3.219,-1.674l3.090,-0.129l5.150,-1.288l0.385,-0.128l1.029,0l1.418,0l1.545,-0.128l1.416,-0.129l1.027,0l0.389,0l0.900,-0.773l7.080,-0.257l2.190,0.643l6.049,-1.415l4.890,0l0.774,-1.159l2.574,-1.159l6.309,-1.030l4.632,0.772l-3.603,0.644l6.051,0.515l0.771,1.288l2.447,-0.644l9.782,-0.257l5.023,1.673l-2.318,3.089l-7.082,1.546l1.031,1.544l6.180,-0.257l2.961,1.030l11.968,0l2.705,1.544l10.299,0.129l0.387,-1.673l16.603,1.673l0.518,4.892l4.246,1.030l8.111,-1.545l15.834,-0.515l1.930,-3.476l23.170,1.802l2.320,1.545l7.078,2.059l14.416,-0.385l6.438,3.733l10.170,-0.128l9.269,-0.259l6.178,2.447l0.774,-3.219l13.257,0.515l8.496,1.159l3.735,1.158l6.564,2.059l7.209,2.448l8.110,1.029l5.277,2.575l-6.178,1.416l-0.386,2.703l-4.506,0.129l-5.278,-2.317l-5.150,-0.644l-3.475,-1.674l-1.802,2.961l0.385,-0.129zM518.204,80.414l0.645,-1.288l3.733,-0.772l2.702,0.386l1.289,0.515l-0.259,0.643l0.128,0.772l-4.890,0l3.348,0.256zM861.522,24.158l5.666,0.515l-0.128,1.416l-7.725,-1.416l-2.187,0.515zM836.034,22.871l5.279,-0.387l10.426,0.772l1.803,2.189l-9.527,-0.128l-3.989,1.030l-5.021,-1.931l-1.029,1.545zM742.835,13.473l0.516,0.772l5.019,2.575l-14.287,0.387l3.604,-3.090l-5.148,0.644zM718.763,9.226l10.556,0.386l5.922,3.346l-7.853,1.674l-11.328,-1.030l-0.127,-2.446l-2.830,1.930zM609.345,28.277l6.435,-2.317l-0.643,-1.287l6.050,-1.417l8.882,-1.673l8.882,-0.514l4.634,-1.030l5.279,-0.387l1.801,1.159l-1.801,0.772l-9.526,1.417l-8.239,1.287l-8.367,2.445l-3.993,2.704l-4.246,2.574l0.644,2.189l5.149,2.317l-1.672,0.129l-8.756,-0.257l-0.771,-1.287l-4.891,-0.644l-0.386,-1.545l2.830,-0.515l-0.127,-1.417l5.277,-2.316l2.445,0.387zM850.194,82.344l0.901,2.575l0,2.575l1.158,2.832l2.705,4.763l-3.990,-0.901l-1.674,3.862l2.574,2.703l0,1.931l-2.058,-1.674l-1.803,2.189l-0.516,-2.317l0.258,-2.575l-0.258,-2.960l0.645,-2.061l0.127,-3.604l-1.545,-2.575l0.131,-3.733l2.574,-1.287l-1.160,-1.158l1.289,-0.387l-0.642,-1.802z' -] - -{ #category : #countries } -RTSVGPath class >> Rwanda [ - ^ 'M547.169,229.999l1.028,1.545l-0.128,1.544l-0.773,0.387l-1.415,-0.128l-0.773,1.545l-1.673,-0.258l0.257,-1.546l0.386,-0.128l0,-1.674l0.901,-0.643l0.643,0.256l-1.547,0.900z' -] - -{ #category : #countries } -RTSVGPath class >> SaudiArabia [ - ^ 'M580.509,182.883l-0.387,-1.157l-0.771,-0.773l-0.259,-1.031l-1.415,-1.029l-1.416,-2.188l-0.772,-2.189l-1.802,-1.931l-1.289,-0.386l-1.672,-2.574l-0.386,-1.932l0.128,-1.544l-1.545,-2.961l-1.287,-1.030l-1.416,-0.644l-0.902,-1.545l0.130,-0.514l-0.771,-1.417l-0.774,-0.643l-1.030,-2.060l-1.674,-2.059l-1.287,-1.931l-1.417,0l0.387,-1.417l0.131,-0.901l0.384,-1.158l2.960,0.514l1.160,-0.900l0.643,-0.901l2.060,-0.386l0.515,-0.902l0.901,-0.515l-2.703,-2.703l5.407,-1.287l0.514,-0.516l3.218,0.773l3.990,1.931l7.596,5.406l5.020,0.258l2.447,0.257l0.644,1.288l1.930,-0.129l1.030,2.317l1.288,0.644l0.513,0.902l1.803,1.158l0.127,1.159l-0.256,0.900l0.387,0.901l0.772,0.644l0.386,0.901l0.387,0.644l0.771,0.644l0.772,-0.258l0.517,1.030l0.127,0.643l1.031,2.704l8.110,1.416l0.514,-0.644l1.159,1.931l-1.802,5.408l-7.981,2.702l-7.853,1.030l-2.445,1.159l-1.931,2.832l-1.287,0.515l-0.644,-0.901l-1.031,0.128l-2.574,-0.257l-0.514,-0.257l-3.090,0l-0.773,0.257l-1.158,-0.644l-0.645,1.288l0.258,1.158l1.158,-0.772z' -] - -{ #category : #countries } -RTSVGPath class >> Senegal [ - ^ 'M420.242,190.35l-1.159,-2.059l-1.287,-1.030l1.159,-0.515l1.287,-1.803l0.644,-1.416l0.901,-0.901l1.416,0.257l1.287,-0.643l1.416,0l1.288,0.773l1.801,0.772l1.674,1.931l1.802,1.930l0.129,1.674l0.515,1.545l1.030,0.772l0.257,1.030l-0.128,0.772l-0.387,0.129l-1.544,-0.129l-0.130,0.258l-0.643,0l-1.931,-0.643l-1.287,0l-5.020,-0.129l-0.644,0.386l-0.901,-0.129l-1.545,0.386l-0.387,-2.058l2.447,0.127l0.644,-0.386l0.514,0l1.030,-0.644l1.159,0.516l1.158,0.128l1.159,-0.644l-0.516,-0.773l-0.900,0.387l-0.901,0l-1.030,-0.643l-0.901,0l-0.515,0.643l2.961,-0.129z' -] - -{ #category : #countries } -RTSVGPath class >> Serbia [ - ^ 'M519.749,102.684l1.416,1.030l0.258,0.902l1.674,0.643l0.257,1.158l1.543,0.773l0.774,-0.644l0.771,0.386l-0.641,0.386l0.513,0.515l-0.772,0.644l0.259,0.902l1.415,1.158l-1.030,0.901l-0.515,0.772l0.256,0.386l-0.385,0.387l-1.288,0l-1.544,0.257l-1.545,0.515l-0.129,0.515l-0.385,0l-0.130,-1.030l-0.643,-0.257l-0.516,-0.773l-0.771,0.258l-0.129,-0.516l-1.287,1.288l0.258,0.901l-0.516,-0.128l-0.773,-0.902l-1.159,-0.515l0.258,-0.514l0.387,-1.545l0.900,-0.515l1.158,-0.387l0.389,-1.287l-1.289,-1.030l0.645,-1.159l-1.030,0l1.030,-1.029l-0.773,-0.772l-0.643,-1.031l2.060,-0.772l-1.672,-0.129z' -] - -{ #category : #countries } -RTSVGPath class >> SierraLeone [ - ^ 'M434.402,208.759l-0.772,-0.257l-1.931,-1.031l-1.287,-1.544l-0.515,-0.902l-0.386,-2.059l1.415,-1.159l0.387,-0.772l0.386,-0.515l0.772,-0.129l0.644,-0.514l2.188,0l0.772,1.029l0.515,1.159l0,0.773l0.387,0.642l0,1.030l0.644,-0.127l-1.159,1.157l-1.287,1.546l-0.129,0.771l0.644,-0.902z' -] - -{ #category : #countries } -RTSVGPath class >> Slovakia [ - ^ 'M516.017,93.673l0.127,0.129l1.158,-0.386l1.289,1.030l1.672,-0.644l1.289,0.257l1.929,-0.386l2.577,1.030l-0.774,0.772l-0.513,1.030l-0.645,0.257l-2.832,-0.772l-0.900,0.129l-0.645,0.643l-1.287,0.387l-0.258,-0.258l-1.287,0.515l-1.158,0l-0.129,0.644l-2.318,0.257l-1.028,-0.257l-1.288,-0.772l-0.257,-0.903l0.127,-0.256l0.387,-0.644l1.288,0l0.900,-0.258l0,-0.257l0.517,-0.129l0.256,-0.643l0.644,0l0.385,-0.515l-0.774,0z' -] - -{ #category : #countries } -RTSVGPath class >> SolomonIslands [ - ^ 'M901.944,255.23l0.772,0.903l-1.930,0l-1.031,-1.674l1.674,0.643l-0.515,-0.128zM900.786,252.784l-0.387,0.516l-2.060,-2.318l-0.514,-1.544l0.901,0l1.029,2.059l-1.031,-1.287zM898.597,253.557l-1.159,0.129l-1.544,-0.386l-0.643,-0.386l0.256,-1.031l1.674,0.387l0.900,0.644l-0.516,-0.643zM895.251,248.537l0.643,0.901l0.128,0.515l-2.060,-1.158l-1.543,-0.902l-1.031,-0.901l0.384,-0.258l1.290,0.644l-2.189,-1.159zM888.556,245.834l1.031,0.900l-0.516,0.129l-1.160,-0.515l-1.158,-1.159l0.129,-0.386l-1.674,-1.031z' -] - -{ #category : #countries } -RTSVGPath class >> Somalia [ - ^ 'M597.114,201.549l-1.287,1.674l-1.803,2.188l-2.316,0l-8.754,-3.218l-1.029,-0.901l-1.029,-1.287l-1.032,-1.545l0.645,-0.901l0.900,-1.416l0.902,0.515l0.516,1.030l1.286,1.158l1.288,0l2.575,-0.643l2.959,-0.387l2.319,-0.771l1.286,-0.259l1.029,-0.515l1.545,0l0,1.159l0,2.704l0,-1.415zM603.037,195.371l-0.258,1.545l0,1.415l-0.643,0.901l-0.773,2.961l-1.288,2.961l-1.674,3.475l-2.316,3.991l-2.189,2.962l-3.218,3.732l-2.702,2.188l-3.991,2.576l-2.576,2.059l-2.959,3.347l-0.644,1.415l-0.516,0.645l-1.931,-2.189l0.130,-10.169l2.188,-2.960l1.029,-0.644l1.803,0l2.318,-1.932l3.475,-0.129l7.722,-8.110l1.803,-2.188l1.287,-1.674l0,-1.415l0,-2.704l0,-1.159l0.903,-0.128l1.158,-0.387l1.416,-0.257l1.288,-0.900l1.028,0l-0.130,-0.772z' -] - -{ #category : #countries } -RTSVGPath class >> SouthAfrica [ - ^ 'M550.13,305.822l-0.516,0.387l-1.158,1.287l-0.773,1.416l-1.544,1.93l-2.96,2.832l-1.932,1.545l-2.061,1.287l-2.832,1.031l-1.287,0.128l-0.387,0.772l-1.672-0.386l-1.288,0.514l-2.961-0.514l-1.544,0.257l-1.158-0.128l-2.834,1.028l-2.316,0.517l-1.545,1.028h-1.285l-1.16-0.9l-0.9-0.128l-1.158-1.16l-0.131,0.388l-0.385-0.772v-1.546l-0.771-1.801l0.771-0.516v-2.061l-1.802-2.445l-1.288-2.316l-1.931-3.478l1.286-1.415l1.032,0.773l0.384,1.158l1.288,0.129l1.673,0.514l1.418-0.129l2.445-1.416v-9.912l0.772,0.387l1.544,2.574l-0.258,1.674l0.645,0.9l1.93-0.256l1.289-1.287l1.287-0.774l0.643-1.286l1.287-0.645l1.158,0.387l1.288,0.773l2.188,0.129l1.801-0.645l0.258-0.901l0.387-1.287l1.545-0.128l0.772-1.03l0.901-1.804l2.445-2.059l3.733-1.93h1.157l1.289,0.514l0.9-0.387l1.416,0.258l1.287,3.862l0.771,1.802l-0.514,3.09l0.258,0.9l-1.416-0.385l-0.773,0.129l-0.258,0.771l-0.771,1.029L547.94,299l1.545,1.544l1.545-0.386l0.644-1.158h2.059l-0.772,1.93l-0.258,2.318l-0.77,1.157L550.13,305.822zM543.306,304.922l-1.158-0.773l-1.287,0.516l-1.416,1.029l-1.416,1.803l1.931,2.059l1.03-0.258l0.514-0.9l1.417-0.386l0.515-0.901l0.773-1.287L543.306,304.922z' -] - -{ #category : #countries } -RTSVGPath class >> SouthKorea [ - ^ 'M810.933,122.895l2.447,3.218l0.642,1.803l0,3.089l-1.029,1.416l-2.445,0.515l-2.190,1.159l-2.445,0.258l-0.258,-1.545l0.514,-1.932l-1.158,-2.833l1.931,-0.514l-1.802,-2.189l0.131,-0.257l1.285,0l1.029,-1.158l1.930,-0.129l1.033,-0.129l-0.385,0.772z' -] - -{ #category : #countries } -RTSVGPath class >> Spain [ - ^ 'M440.838,114.141l0.129,-1.931l-1.029,-1.158l3.861,-1.932l3.219,0.515l3.604,0l2.960,0.387l2.189,-0.129l4.377,0.129l1.029,1.030l5.021,1.158l0.901,-0.514l3.089,1.158l3.090,-0.258l0.129,1.545l-2.574,1.802l-3.478,0.516l-0.127,0.900l-1.672,1.545l-1.031,2.189l1.031,1.544l-1.547,1.159l-0.642,1.803l-2.061,0.514l-1.802,2.060l-3.476,0l-2.574,0l-1.673,0.901l-1.031,1.030l-1.287,-0.129l-1.030,-1.030l-0.772,-1.545l-2.446,-0.385l-0.257,-0.902l1.030,-1.030l0.258,-0.644l-0.902,-0.900l0.772,-1.674l-1.030,-1.674l1.160,-0.256l0,-1.159l0.514,-0.387l0,-2.189l1.287,-0.643l-0.773,-1.416l-1.545,-0.128l-0.514,0.385l-1.545,0l-0.643,-1.287l-1.158,0.387l1.031,-0.643z' -] - -{ #category : #countries } -RTSVGPath class >> SriLanka [ - ^ 'M685.552,206.699l-0.387,2.832l-1.158,0.772l-2.317,0.643l-1.289,-2.187l-0.513,-3.863l1.285,-4.376l1.805,1.545l1.285,1.801l-1.289,-2.833z' -] - -{ #category : #countries } -RTSVGPath class >> Sudan [ - ^ 'M556.308,215.711l-1.416,1.028l-1.545,0l-2.189,0.644l-1.802,-0.644l-1.029,0.774l-2.446,-1.802l-0.644,-1.159l-1.416,0.643l-1.287,-0.257l-0.773,0.515l-1.158,-0.387l-1.672,-2.188l-0.389,-0.901l-2.059,-1.031l-0.643,-1.544l-1.159,-1.287l-1.800,-1.287l0,-0.901l-1.419,-1.159l-2.059,-1.159l-1.029,-0.771l-0.129,-0.773l0.387,-1.159l0,-1.159l-1.545,-1.674l-0.258,-1.157l0,-0.645l-0.902,-0.772l-0.126,-1.544l-0.517,-1.030l-0.902,0.129l0.259,-1.031l0.643,-1.030l-0.258,-1.159l0.901,-0.772l-0.643,-0.643l0.774,-1.673l1.158,-2.060l2.316,0.257l0.258,-10.427l0,-1.415l2.832,0l0,-5.408l10.813,0l10.556,0l10.299,0l1.158,2.704l-0.643,0.386l0.385,2.832l1.030,3.218l1.029,0.644l1.418,1.029l-1.288,1.546l-2.061,0.386l-0.770,0.901l-0.258,1.802l-1.160,3.861l0.258,1.160l-0.387,2.317l-1.158,2.575l-1.672,1.415l-1.158,2.060l-0.259,1.030l-1.286,0.772l-0.774,2.831l0,2.447l-0.386,0.774l-1.416,0.127l-0.901,1.545l1.673,0.129l1.416,1.287l0.388,1.158l1.286,0.644l1.158,2.832l-2.188,2.447l1.416,-1.159z' -] - -{ #category : #countries } -RTSVGPath class >> Suriname [ - ^ 'M311.337,210.946l3.219,0.517l0.257,-0.517l2.188,-0.257l2.833,0.774l-1.417,2.316l0.259,1.803l1.029,1.674l-0.386,1.157l-0.257,1.159l-0.772,1.158l-1.545,-0.515l-1.159,0.259l-1.158,-0.259l-0.259,0.773l0.516,0.514l-0.257,0.517l-1.546,-0.130l-1.545,-2.317l-0.385,-1.545l-0.902,0l-1.157,-1.931l0.514,-1.416l-0.129,-0.643l1.545,-0.772l-0.514,2.319z' -] - -{ #category : #countries } -RTSVGPath class >> SvalbardJanMayen [ - ^ 'M539.059,11.285l-3.991,1.416l-7.852,0.387l-7.854-0.515l-0.514-0.644l-3.863-0.128l-2.961-1.159l8.369-0.772l3.86,0.644l2.704-0.772l6.822,0.643L539.059,11.285zM505.976,12.314h-3.733l-1.546-0.901l-7.335,1.031l2.059,2.06l5.276,2.317l3.99,0.772l-2.314,0.9l5.791,1.675l3.219-0.129l1.287-2.189l2.316-0.515l1.545-2.06l6.693-1.031l-8.881-1.931l-3.347-1.03l-3.991,0.128L505.976,12.314zM531.851,17.207l-3.863-0.515l-1.158-1.03l-5.535,0.515l1.674,0.901l-1.932,0.643l4.765,0.645L531.851,17.207z' -] - -{ #category : #countries } -RTSVGPath class >> Swaziland [ - ^ 'M551.674,299l-0.644,1.158l-1.545,0.386l-1.545,-1.544l-0.128,-0.902l0.771,-1.030l0.258,-0.771l0.773,-0.129l1.416,0.385l0.385,1.289l-0.259,-1.158z' -] - -{ #category : #countries } -RTSVGPath class >> Sweden [ - ^ 'M525.026,49.905l-2.703,1.930l0.516,1.674l-4.377,2.060l-5.150,2.317l-1.930,3.861l1.930,1.932l2.576,1.415l-2.576,3.090l-2.704,0.643l-1.028,4.507l-1.545,2.445l-3.348,-0.257l-1.415,2.188l-3.218,0.129l-0.773,-2.575l-2.317,-3.090l-2.059,-3.732l1.158,-1.545l2.318,-1.931l0.900,-3.090l-1.803,-1.415l-0.127,-3.605l1.800,-2.446l2.705,0l0.903,-1.030l-1.031,-0.901l4.248,-3.862l2.703,-2.960l1.674,-1.931l2.702,0l0.644,-1.417l5.022,0.387l0.513,-1.803l1.673,-0.129l3.475,1.417l4.250,1.801l0.128,4.120l0.901,1.031l4.635,-0.772z' -] - -{ #category : #countries } -RTSVGPath class >> Switzerland [ - ^ 'M491.042,98.951l0.128,0.515l-0.385,0.644l1.160,0.514l1.416,0l-0.258,1.159l-1.158,0.386l-1.932,-0.257l-0.643,1.030l-1.288,0.129l-0.387,-0.516l-1.543,1.031l-1.287,0.128l-1.160,-0.643l-0.901,-1.159l-1.288,0.386l0,-1.158l1.932,-1.545l-0.130,-0.644l1.288,0.257l0.772,-0.515l2.317,0l0.515,-0.514l-2.832,-0.772z' -] - -{ #category : #countries } -RTSVGPath class >> Syria [ - ^ 'M569.696,137.055l-5.278,2.833l-2.960,-1.031l0.256,-0.385l0,-1.160l0.643,-1.416l1.546,-1.029l-0.515,-1.031l-1.159,-0.128l-0.257,-2.059l0.644,-1.159l0.772,-0.643l0.643,-0.515l0.129,-1.545l0.902,0.514l2.960,-0.772l1.416,0.514l2.317,0l3.090,-1.028l1.416,0.128l3.090,-0.515l-1.416,1.673l-1.417,0.773l0.258,1.931l-1.029,3.218l6.051,-2.832z' -] - -{ #category : #countries } -RTSVGPath class >> Taiwan [ - ^ 'M793.296,161.256l-1.672,4.378l-1.160,2.188l-1.414,-2.317l-0.260,-1.932l1.545,-2.702l2.189,-2.060l1.288,0.772l0.516,-1.673z' -] - -{ #category : #countries } -RTSVGPath class >> Tajikistan [ - ^ 'M656.587,118.519l-1.030,0.900l-2.961,-0.515l-0.257,1.545l2.961,-0.129l3.347,0.901l5.020,-0.514l0.773,2.573l0.772,-0.256l1.674,0.515l-0.129,1.158l0.515,1.416l-2.832,0l-1.802,-0.129l-1.674,1.159l-1.285,0.257l-0.904,0.643l-1.030,-0.900l0.259,-2.317l-0.901,-0.129l0.384,-0.772l-1.543,-0.645l-1.160,0.903l-0.256,1.157l-0.386,0.387l-1.674,-0.128l-0.773,1.287l-0.901,-0.515l-2.059,0.900l-0.773,-0.385l1.547,-2.703l-0.645,-2.060l-1.931,-0.644l0.643,-1.159l2.318,0.129l1.285,-1.417l0.775,-1.801l3.603,-0.644l-0.514,1.287l0.386,0.772l-1.158,0.127z' -] - -{ #category : #countries } -RTSVGPath class >> Tanzania [ - ^ 'M551.03,229.742l5.407,-0.258l10.042,5.793l0.256,2.059l4.119,2.445l-1.289,3.092l0.131,1.543l1.802,1.031l0,0.645l-0.644,1.673l0.129,0.772l-0.129,1.287l0.901,1.673l1.160,2.704l0.900,0.514l-2.060,1.674l-2.961,1.030l-1.672,-0.128l-0.902,0.900l-1.930,0l-0.644,0.386l-3.347,-0.771l-1.931,0.256l-0.773,-3.732l-1.415,-1.933l-2.704,-0.514l-1.543,-0.901l-1.675,-0.384l-1.030,-0.387l-1.159,-0.773l-1.545,-3.346l-1.545,-1.546l-0.514,-1.546l0.257,-1.415l-0.514,-2.445l1.158,-0.128l1.031,-1.032l1.030,-1.416l0.642,-0.513l0,-0.903l-0.642,-0.643l-0.131,-1.030l0.773,-0.387l0.128,-1.544l-1.028,-1.545l0.900,-0.257l-2.961,0z' -] - -{ #category : #countries } -RTSVGPath class >> Thailand [ - ^ 'M741.548,194.082l-2.445,-1.157l-2.188,0l0.385,-2.060l-2.446,0l-0.128,2.961l-1.545,3.990l-0.903,2.318l0.260,1.931l1.801,0.128l1.031,2.446l0.514,2.318l1.416,1.545l1.674,0.257l1.416,1.415l-0.901,1.159l-1.802,0.257l-0.129,-1.287l-2.188,-1.157l-0.516,0.385l-1.029,-1.029l-0.515,-1.288l-1.418,-1.544l-1.286,-1.287l-0.515,1.544l-0.514,-1.417l0.385,-1.672l0.773,-2.576l1.287,-2.832l1.545,-2.445l-1.158,-2.447l0.129,-1.287l-0.387,-1.545l-1.802,-2.060l-0.643,-1.416l1.029,-0.514l0.901,-2.318l-1.030,-1.802l-1.802,-1.931l-1.287,-2.317l1.158,-0.515l1.287,-2.960l1.803,-0.129l1.672,-1.159l1.544,-0.643l1.161,0.900l0.129,1.546l1.800,0.128l-0.642,2.832l0,2.446l2.832,-1.544l0.900,0.385l1.545,0l0.516,-1.030l2.060,0.258l2.059,2.189l0.129,2.574l2.187,2.446l-0.127,2.189l-0.902,1.288l-2.447,-0.387l-3.475,0.514l-1.801,2.189l-0.643,-3.217z' -] - -{ #category : #countries } -RTSVGPath class >> TimorLeste [ - ^ 'M801.921,250.982l0.258,-0.643l2.316,-0.644l1.934,-0.129l0.771,-0.257l1.029,0.257l-0.900,0.773l-2.834,1.158l-2.316,0.773l0,-0.773l0.258,0.515z' -] - -{ #category : #countries } -RTSVGPath class >> Togo [ - ^ 'M470.317,210.432l-2.187,0.514l-0.644,-0.900l-0.773,-1.673l-0.128,-1.416l0.514,-2.318l-0.643,-1.030l-0.258,-2.187l0,-1.932l-1.159,-1.417l0.258,-0.772l2.317,0l-0.259,1.417l0.775,0.900l0.900,0.902l0.129,1.287l0.516,0.515l-0.131,6.307l-0.773,-1.803z' -] - -{ #category : #countries } -RTSVGPath class >> Tunisia [ - ^ 'M490.785,145.294l-1.159,-4.763l-1.674,-1.159l0,-0.643l-2.187,-1.545l-0.257,-2.059l1.674,-1.545l0.642,-2.189l-0.514,-2.575l0.642,-1.416l2.962,-1.029l1.801,0.257l0,1.415l2.190,-1.028l0.257,0.514l-1.417,1.416l0,1.159l0.902,0.643l-0.258,2.446l-1.801,1.287l0.515,1.416l1.415,0.129l0.644,1.287l1.030,0.387l-0.129,2.060l-1.288,0.772l-0.900,0.902l-1.803,1.029l0.257,1.158l-0.257,1.031l1.287,-0.643z' -] - -{ #category : #countries } -RTSVGPath class >> Turkmenistan [ - ^ 'M630.069,130.876l-0.129,-2.188l-2.060,-0.128l-3.088,-2.317l-2.188,-0.387l-2.961,-1.288l-1.932,-0.257l-1.157,0.515l-1.803,-0.129l-1.932,1.546l-2.317,0.513l-0.515,-1.930l0.387,-2.832l-2.059,-0.901l0.644,-1.802l-1.804,-0.129l0.645,-2.318l2.574,0.644l2.316,-0.773l-1.931,-1.673l-0.772,-1.544l-2.187,0.643l-0.260,2.059l-0.900,-1.802l1.160,-0.900l3.090,-0.515l1.800,0.772l1.930,2.060l1.419,-0.128l2.959,0l-0.384,-1.417l2.315,-0.901l2.188,-1.545l3.735,1.416l0.256,2.188l1.030,0.515l2.832,-0.128l1.029,0.515l1.289,2.702l3.089,1.931l1.674,1.288l2.832,1.288l3.604,1.158l0,1.674l-0.902,-0.128l-1.285,-0.774l-0.387,1.030l-2.317,0.516l-0.515,2.188l-1.546,0.772l-2.058,0.386l-0.517,1.288l-2.059,0.257l2.832,1.030z' -] - -{ #category : #countries } -RTSVGPath class >> Uganda [ - ^ 'M551.03,229.742l-2.961,0l-0.900,0.257l-1.547,0.900l-0.643,-0.256l0,-2.061l0.643,-1.028l0.131,-2.189l0.514,-1.287l1.029,-1.416l1.031,-0.643l0.901,-1.031l-1.159,-0.258l0.258,-3.217l1.029,-0.774l1.802,0.644l2.189,-0.644l1.545,0l1.416,-1.028l1.287,1.930l1.031,2.704l0.771,1.930l-1.029,1.931l-1.931,1.674l0,0.772l0,2.832l5.407,-0.258z' -] - -{ #category : #countries } -RTSVGPath class >> Ukraine [ - ^ 'M550.901,86.593l0.901,0.129l0.773,-0.644l0.772,0.128l2.833,-0.256l1.673,1.544l-0.643,0.515l0.258,0.901l2.058,0.129l1.030,1.159l-0.129,0.514l3.476,0.901l2.059,-0.386l1.674,1.287l1.545,0l3.990,0.902l0,0.772l-1.029,1.415l0.513,1.417l-0.384,0.901l-2.575,0.258l-1.417,0.772l-0.128,1.159l-2.060,0.128l-1.801,0.902l-2.576,0.128l-2.317,1.030l0.129,1.674l1.416,0.644l2.704,-0.130l-0.516,0.902l-2.959,0.515l-3.606,1.544l-1.544,-0.515l0.643,-1.286l-2.962,-0.774l0.389,-0.514l2.573,-0.901l-0.772,-0.645l-4.120,-0.643l-0.257,-1.029l-2.446,0.386l-1.030,1.416l-2.060,2.059l-1.158,-0.515l-1.287,0.386l-1.287,-0.386l0.773,-0.386l0.385,-0.901l0.774,-0.901l-0.129,-0.386l0.513,-0.258l0.258,0.386l1.545,0.129l0.773,-0.257l-0.517,-0.258l0.131,-0.386l-0.902,-0.772l-0.386,-1.030l-1.030,-0.515l0.257,-0.901l-1.287,-0.644l-1.029,-0.128l-2.059,-0.903l-1.675,0.259l-0.644,0.386l-1.158,0l-0.773,0.644l-1.931,0.257l-0.899,0.515l-1.289,-0.772l-1.673,0l-1.674,-0.258l-1.159,0.515l-0.256,-0.643l-1.415,-0.773l0.513,-1.030l0.774,-0.772l0.515,0.257l-0.646,-1.287l2.447,-2.189l1.287,-0.385l0.257,-0.773l-1.286,-2.317l1.286,-0.129l1.417,-0.644l2.187,-0.129l2.706,0.258l2.959,0.644l2.189,0l0.900,0.386l1.030,-0.386l0.772,0.643l2.446,-0.129l1.031,0.258l0.128,-1.416l0.900,-0.643l-2.318,0.129z' -] - -{ #category : #countries } -RTSVGPath class >> UnitedArabEmirates [ - ^ 'M604.196,161.643l0.514,-0.129l0,0.772l2.188,-0.386l2.189,0l1.672,0.129l1.803,-1.802l2.058,-1.802l1.674,-1.673l0.518,0.900l0.385,2.189l-1.417,0l-0.258,1.802l0.517,0.386l-1.159,0.515l-0.129,1.029l-0.773,1.159l0,1.030l-0.514,0.644l-8.110,-1.416l-1.031,-2.704l0.127,0.643z' -] - -{ #category : #countries } -RTSVGPath class >> UnitedStates [ - ^ 'M284.434,106.546l-2.704,0.772l-2.575,0.644l-3.089,1.673l-1.287,1.417l-0.258,0.386l-0.127,1.545l0.900,1.415l1.159,0l-0.259,-0.900l0.773,0.515l-0.257,0.772l-1.803,0.515l-1.286,-0.130l-1.931,0.517l-1.159,0.128l-1.673,0.128l-2.060,0.644l3.733,-0.387l0.128,0l0.773,0.515l-3.733,0.773l-1.802,0l0.129,-0.257l0.128,-0.644l-0.900,1.416l0.643,0l-0.515,2.060l-1.931,2.060l-0.257,-0.773l-0.516,-0.129l-0.643,-0.643l-0.129,0l-0.128,0l0.514,1.416l0.773,1.416l0.129,0.257l-1.030,0.901l-1.545,2.188l-0.258,-0.128l1.030,-1.802l-1.416,-1.287l-0.128,-2.060l-0.387,0.901l0,2.446l-1.673,-0.901l1.802,1.544l0.515,1.417l0.772,1.674l0.387,2.703l-1.803,1.930l-2.574,1.030l-2.318,1.417l-0.901,0.128l-1.158,1.931l-2.317,1.673l-2.832,1.288l-1.158,2.060l-0.516,1.415l0.387,2.061l1.030,2.187l1.159,2.061l0,1.029l1.157,2.703l0.129,2.447l-0.514,2.316l-1.159,0.516l-1.287,-0.386l-0.386,-1.159l-1.031,-0.644l-1.545,-2.317l-1.287,-1.931l-0.257,-1.287l0.515,-1.674l-0.643,-1.544l-1.803,-1.545l-1.416,-1.030l-3.089,1.158l-0.644,-0.772l-2.574,-1.287l-2.962,0.386l-2.445,-0.258l-1.674,0.515l-1.544,0l-0.258,1.160l0.772,1.543l-3.605,0.130l-2.316,-0.516l-1.545,-0.514l-2.059,-0.387l-2.318,-0.128l-2.317,0.643l-2.446,1.931l-2.702,1.158l-1.417,1.289l-0.644,1.287l0,1.802l0.129,1.287l0.515,0.901l-1.030,0.129l-1.931,-0.643l-2.188,-0.773l-0.772,-1.287l-0.515,-1.931l-1.545,-1.545l-1.030,-1.545l-1.288,-1.802l-1.930,-1.159l-2.189,0.130l-1.674,2.058l-2.316,-0.772l-1.288,-0.772l-0.772,-1.545l-0.900,-1.416l-1.545,-1.159l-1.416,-0.901l-0.902,-0.900l-4.633,0l-0.129,1.158l-2.060,0l-5.407,0l-6.178,-1.931l-3.992,-1.288l0.258,-0.515l-3.475,0.259l-3.090,0.256l-0.258,-1.029l-1.159,-1.416l-2.831,-1.545l-1.158,-0.129l-1.160,-0.900l-2.059,-0.130l-0.772,-0.515l-0.258,-1.416l-2.702,-2.704l-2.189,-3.732l0.128,-0.644l-1.287,-0.901l-2.059,-2.317l-0.386,-2.188l-1.417,-1.417l0.644,-2.189l-0.129,-2.317l-0.901,-1.544l0.901,-2.960l0.129,-2.962l0.514,-4.119l-0.771,-2.188l-0.387,-2.575l3.734,0.515l1.158,2.060l0.644,-0.773l-0.387,-2.188l-1.287,-2.189l15.962,0l2.704,0l32.182,0l18.536,0l5.536,0l0,-1.030l0.901,0l0.516,1.417l0.772,0.514l1.930,0.129l2.704,0.515l2.703,0.773l2.188,-0.387l3.219,0.773l0.385,0l0.515,0l0.258,-0.129l0.386,-0.129l0.387,-0.128l0.772,-0.258l0.643,-0.129l0.644,0.129l0.386,0.258l0.258,0l0.386,0.257l0.773,0.257l0.772,0.258l0.772,0.386l0.643,0.257l0.387,0.130l0.258,0.128l0.514,0.128l0.515,0.258l0.515,0.258l0.515,0.128l0.515,0.257l0.515,0.258l0.515,0.129l0.514,0.257l0.130,0.386l0.128,0.387l0.386,0.257l0.257,0l0.902,0l0.257,0l0,0.129l0,0.129l0,0.128l0,0.258l0.129,0l0.129,0.257l0.128,0l0.258,0.129l0.386,0.128l0.258,-0.128l0.128,0l0.258,0.258l0.128,0l0,0.129l-0.386,0.515l0.516,0.257l0.643,0.257l0.644,0.258l0.514,0.128l0.515,0.386l0.128,0.387l0,0.257l0.130,0.515l0.128,0.386l0.129,0.515l0.130,0.515l0.127,0.515l0,0.386l0.129,0.515l0.258,0.772l-0.129,0.258l-0.385,0.515l-0.259,0.515l0,0.129l0,0.128l-0.514,0.516l-0.772,1.030l-0.387,0.385l-0.257,0.515l0,0.257l0,0.130l0.257,0.257l0.387,0.257l0.514,0.129l0.644,0l0.643,-0.258l0.644,-0.257l0.644,-0.258l0.643,-0.385l0.644,-0.258l0.645,-0.129l0.900,-0.128l0.387,0l0.128,0l0.644,-0.129l0.643,-0.258l0.643,-0.257l0.902,-0.257l0.772,-0.258l0.386,-0.128l0.258,-0.130l0,-0.128l0,-0.258l-0.387,-0.772l0,-0.129l-0.257,-0.386l0.386,-0.129l0.515,-0.257l0.258,0l0.772,-0.128l0.643,0l0.902,0l0.772,0.128l0.901,0l0.516,0l0.643,0l0.257,-0.515l0.387,-0.386l0.256,-0.258l0.387,-0.258l2.703,-1.801l1.287,-0.516l4.120,0l4.891,0l0.258,-0.772l0.901,0l1.158,-0.515l0.902,-1.159l0.901,-2.187l2.060,-1.932l0.900,0.644l1.804,-0.386l1.157,0.772l0,3.605l1.803,1.545l0,-1.158zM16.808,64.322l2.059,0.257l0.258,1.031l-1.545,0.386l-1.802,-0.516l-1.673,-0.772l-2.703,0.386zM52.465,70.759l1.803,0.257l1.157,0.774l-2.317,1.286l-2.703,1.029l-1.416,-0.643l-0.385,-1.288l2.445,-0.901l-1.416,0.514zM85.42,39.22l0,9.913l0,15.446l2.574,0l2.704,0.774l1.802,1.157l2.445,1.803l2.575,-1.545l2.703,-0.902l1.545,1.417l1.802,1.159l2.446,1.159l1.674,1.930l2.703,3.090l4.634,1.673l0,1.802l-1.417,1.287l-1.544,-1.029l-2.316,-0.901l-0.773,-2.318l-3.476,-2.189l-1.415,-2.573l-2.576,-0.129l-4.376,-0.129l-3.090,-0.773l-5.535,-2.703l-2.702,-0.514l-4.636,-1.031l-3.733,0.259l-5.278,-1.288l-3.217,-1.159l-2.962,0.643l0.515,1.804l-1.544,0.257l-3.090,0.515l-2.318,0.900l-2.961,0.644l-0.385,-1.673l1.159,-2.575l2.831,-0.900l-0.771,-0.645l-3.347,1.545l-1.802,1.802l-3.991,1.931l2.059,1.288l-2.574,1.931l-2.961,1.030l-2.704,0.900l-0.643,1.159l-4.119,1.416l-0.901,1.288l-3.090,1.158l-1.931,-0.258l-2.445,0.773l-2.832,0.901l-2.189,0.902l-4.634,0.772l-0.387,-0.516l2.962,-1.158l2.574,-0.901l2.832,-1.417l3.347,-0.385l1.416,-1.030l3.734,-1.673l0.514,-0.516l2.059,-0.901l0.386,-2.059l1.418,-1.545l-3.091,0.773l-0.901,-0.516l-1.415,1.031l-1.803,-1.417l-0.644,1.030l-1.029,-1.417l-2.704,1.160l-1.673,0l-0.257,-1.674l0.514,-0.901l-1.673,-1.029l-3.604,0.513l-2.189,-1.287l-1.931,-0.643l0,-1.545l-2.059,-1.030l1.029,-1.673l2.188,-1.416l1.030,-1.416l2.189,-0.129l1.802,0.386l2.189,-1.287l1.930,0.257l2.059,-0.901l-0.513,-1.158l-1.546,-0.515l2.059,-1.030l-1.673,0l-2.832,0.515l-0.772,0.643l-2.188,-0.514l-3.863,0.257l-3.861,-0.643l-1.158,-1.159l-3.476,-1.545l3.862,-1.030l6.050,-1.416l2.188,0l-0.386,1.416l5.665,-0.129l-2.189,-1.673l-3.347,-1.031l-1.931,-1.286l-2.574,-1.158l-3.605,-0.901l1.417,-1.417l4.762,-0.129l3.475,-1.158l0.644,-1.288l2.703,-1.287l2.704,-0.386l5.021,-1.159l2.574,0.128l4.119,-1.415l3.990,0.643l2.060,1.159l1.159,-0.515l4.505,0.128l-0.128,0.644l4.119,0.516l2.703,-0.258l5.664,0.773l5.278,0.257l2.060,0.386l3.604,-0.514l3.991,0.900l-2.961,-0.387zM2.647,55.182l1.673,0.515l1.674,-0.258l2.189,0.644l2.574,0.386l-0.128,0.258l-2.061,0.644l-2.059,-0.644l-1.030,-0.514l-2.446,0.128l-0.643,-0.128l-0.257,1.031zM45.256,175.546l0,-0.773l-0.385,-1.029l0.643,-0.643l-0.258,-0.516l0.129,-0.128l0,-0.129l1.803,0.773l0.256,0.385l0,0.258l0.258,0.129l0.129,0.128l0.385,0.387l-0.643,0.514l-0.772,0.129l-0.515,0.515l-0.258,0.387l0.772,0.387zM43.067,170.01l-0.385,0.258l-1.158,-0.128l0.128,-0.387l-1.415,-0.257zM44.999,170.912l0,0.257l-0.258,0.129l-0.900,0.128l-0.130,-0.514l-0.386,0l-0.258,-0.387l0.130,-0.128l0.257,-0.129l0.257,0.385l0.516,-0.128l-0.772,-0.387zM39.335,169.496l-0.515,-0.643l0.386,-0.130l0.515,-0.257l0.386,0.643l0.257,0l0.258,0.516l-0.515,0l-0.257,-0.129l-0.129,0l0.386,0zM34.829,167.564l0.129,-0.256l0.386,-0.259l0.643,0.130l0.130,0.129l-0.130,0.514l-0.256,0.258l-0.516,-0.129l0.386,0.387z' -] - -{ #category : #countries } -RTSVGPath class >> Uruguay [ - ^ 'M310.05,308.396l1.674,-0.257l2.704,2.059l1.030,-0.130l2.702,1.805l2.189,1.414l1.545,1.804l-1.158,1.286l0.772,1.545l-1.159,1.674l-3.089,1.545l-2.060,-0.515l-1.416,0.257l-2.447,-1.157l-1.801,0.128l-1.674,-1.545l0.129,-1.674l0.643,-0.643l0,-2.705l0.644,-2.702l-0.772,2.189z' -] - -{ #category : #countries } -RTSVGPath class >> Uzbekistan [ - ^ 'M644.487,126.371l0,-1.674l-3.604,-1.158l-2.832,-1.288l-1.674,-1.288l-3.089,-1.931l-1.289,-2.702l-1.029,-0.515l-2.832,0.128l-1.030,-0.515l-0.256,-2.188l-3.735,-1.416l-2.188,1.545l-2.315,0.901l0.384,1.417l-2.959,0l-0.130,-9.914l6.951,-1.544l0.515,0.129l0.644,0.386l1.159,0.515l2.317,1.030l2.189,1.029l2.574,2.446l3.219,-0.385l4.633,-0.259l3.219,2.060l-0.258,2.703l1.287,0l0.644,2.189l3.347,0.128l0.771,1.288l1.030,-0.129l1.160,-1.931l3.603,-1.802l1.547,-0.515l0.770,0.258l-2.317,1.801l2.061,1.030l1.929,-0.772l3.090,1.416l-3.346,1.932l-2.060,-0.257l-1.158,0.127l-0.386,-0.772l0.514,-1.287l-3.603,0.644l-0.775,1.801l-1.285,1.417l-2.318,-0.129l-0.643,1.159l1.931,0.644l0.645,2.060l-1.547,2.703l-2.059,-0.515l1.416,0z' -] - -{ #category : #countries } -RTSVGPath class >> Vanuatu [ - ^ 'M915.718,269.777l1.674,1.545l-0.901,0.387l-0.902,-1.160l-0.129,0.772zM914.56,269.133l-0.387,-0.643l0,-2.060l1.287,0.773l0.387,2.189l-0.774,-0.387l0.513,-0.128z' -] - -{ #category : #countries } -RTSVGPath class >> Venezuela [ - ^ 'M273.105,195.242l-0.128,0.644l-1.545,0.257l0.902,1.287l-0.129,1.416l-1.160,1.545l1.030,2.188l1.159,-0.257l0.643,-1.931l-0.900,-0.901l-0.129,-2.060l3.346,-1.159l-0.385,-1.158l1.029,-0.901l0.902,1.931l1.930,0l1.804,1.545l0,0.902l2.444,0l2.962,-0.259l1.544,1.159l2.060,0.387l1.416,-0.902l0.128,-0.644l3.218,-0.128l3.348,-0.130l-2.317,0.773l0.900,1.288l2.189,0.257l2.060,1.288l0.386,2.187l1.417,-0.128l1.028,0.645l-2.187,1.672l-0.130,0.902l0.902,1.029l-0.644,0.516l-1.673,0.385l0,1.287l-0.772,0.772l1.930,2.061l0.257,0.772l-0.900,1.030l-3.090,0.902l-1.930,0.515l-0.774,0.643l-2.059,-0.773l-2.060,-0.257l-0.514,0.257l1.158,0.643l0,1.804l0.387,1.672l2.188,0.259l0.128,0.514l-1.931,0.772l-0.257,1.159l-1.159,0.515l-1.930,0.644l-0.515,0.772l-2.060,0.129l-1.544,-1.417l-0.773,-2.703l-0.772,-0.901l-1.031,-0.644l1.416,-1.287l-0.127,-0.644l-0.773,-0.772l-0.516,-1.802l0.259,-1.931l0.513,-0.901l0.517,-1.416l-0.902,-0.515l-1.545,0.386l-1.931,-0.129l-1.158,0.258l-1.802,-2.317l-1.546,-0.387l-3.475,0.258l-0.644,-0.901l-0.772,-0.257l0,-0.516l0.257,-1.030l-0.128,-1.028l-0.644,-0.645l-0.387,-1.287l-1.415,-0.129l0.772,-1.545l0.387,-1.931l0.772,-1.030l1.029,-0.771l0.644,-1.289l-1.802,0.514z' -] - -{ #category : #countries } -RTSVGPath class >> Vietnam [ - ^ 'M756.353,168.853l-3.606,2.316l-2.316,2.575l-0.514,1.930l2.059,2.832l2.445,3.476l2.445,1.675l1.674,2.188l1.287,5.020l-0.385,4.634l-2.318,1.802l-3.090,1.803l-2.187,2.188l-3.348,2.574l-0.902,-1.801l0.644,-1.803l-1.929,-1.544l2.316,-1.030l2.834,-0.258l-1.160,-1.674l4.506,-2.059l0.386,-3.218l-0.644,-1.803l0.387,-2.702l-0.645,-1.803l-2.061,-1.931l-1.673,-2.318l-2.188,-3.217l-3.219,-1.674l0.774,-0.902l1.672,-0.772l-1.028,-2.317l-3.347,0l-1.159,-2.446l-1.544,-2.188l1.416,-0.644l2.187,0l2.576,-0.257l2.317,-1.416l1.287,1.030l2.445,0.515l-0.387,1.545l1.289,1.029l-2.704,-0.645z' -] - -{ #category : #countries } -RTSVGPath class >> WesternSahara [ - ^ 'M441.482,153.92l0,-1.417l0.387,0l0,0.129l0,0.514l0,4.120l-8.883,-0.129l0.129,6.823l-2.574,0.257l-0.644,1.417l0.515,3.862l-10.557,0l-0.643,0.901l0.129,-1.159l0.129,0l6.050,-0.129l0.257,-1.029l1.159,-1.159l0.901,-3.733l3.733,-2.961l1.287,-3.347l0.773,-0.257l0.900,-2.060l2.319,-0.257l0.900,0.257l1.288,0l0.901,-0.515l-1.544,0.128z' -] - -{ #category : #countries } -RTSVGPath class >> Yemen [ - ^ 'M608.315,182.111l-1.931,0.772l-0.516,1.159l-0.127,0.901l-2.704,1.159l-4.249,1.287l-2.445,1.802l-1.158,0.258l-0.774,-0.258l-1.673,1.159l-1.673,0.515l-2.189,0.128l-0.772,0.130l-0.515,0.772l-0.772,0.128l-0.386,0.774l-1.287,-0.130l-0.903,0.387l-1.930,-0.129l-0.644,-1.545l0.129,-1.546l-0.516,-0.772l-0.513,-1.930l-0.772,-1.158l0.514,-0.129l-0.258,-1.159l0.388,-0.515l-0.130,-1.288l1.158,-0.772l-0.258,-1.158l0.645,-1.288l1.158,0.644l0.773,-0.257l3.090,0l0.514,0.257l2.574,0.257l1.031,-0.128l0.644,0.901l1.287,-0.515l1.931,-2.832l2.445,-1.159l7.853,-1.030l2.061,4.378l-0.900,-1.930z' -] - -{ #category : #countries } -RTSVGPath class >> Zambia [ - ^ 'M553.476,251.883l1.287,1.160l0.644,2.315l-0.386,0.644l-0.645,2.189l0.516,2.317l-0.773,0.902l-0.772,2.447l1.416,0.770l-8.239,2.189l0.258,1.932l-2.060,0.385l-1.543,1.031l-0.259,1.028l-1.028,0.130l-2.319,2.188l-1.545,1.802l-0.902,0l-0.772,-0.257l-3.088,-0.256l-0.515,-0.259l0,-0.259l-1.030,-0.513l-1.803,-0.258l-2.187,0.644l-1.673,-1.674l-1.804,-2.187l0.128,-8.625l5.536,0.127l-0.257,-1.028l0.387,-0.903l-0.387,-1.287l0.257,-1.286l-0.257,-0.902l0.901,0.130l0.128,0.772l1.289,0l1.672,0.258l0.903,1.158l2.187,0.385l1.674,-0.901l0.644,1.416l2.058,0.387l0.903,1.158l1.159,1.545l2.058,0l-0.258,-2.961l-0.642,0.516l-1.932,-1.031l-0.772,-0.514l0.387,-2.705l0.514,-3.088l-0.642,-1.288l0.771,-1.673l0.643,-0.387l3.733,-0.386l1.030,0.258l1.159,0.773l1.030,0.387l1.675,0.384l-1.543,-0.901z' -] - -{ #category : #countries } -RTSVGPath class >> Zimbabwe [ - ^ 'M549.228,286.898l-1.416,-0.257l-0.901,0.386l-1.289,-0.513l-1.157,0l-1.673,-1.290l-2.061,-0.385l-0.772,-1.674l0,-1.030l-1.158,-0.256l-3.089,-2.962l-0.900,-1.544l-0.516,-0.516l-1.030,-2.058l3.088,0.256l0.772,0.257l0.902,0l1.545,-1.802l2.319,-2.188l1.028,-0.130l0.259,-1.028l1.543,-1.031l2.060,-0.385l0.129,1.029l2.317,-0.129l1.287,0.645l0.515,0.645l1.287,0.254l1.415,0.774l0,3.475l-0.513,1.801l-0.128,2.061l0.385,0.773l-0.257,1.545l-0.386,0.258l-0.773,1.930l2.832,-3.1z' -] - -{ #category : #'list of countries' } -RTSVGPath class >> africa [ - ^ #(#Nigeria #Ethiopia #Egypt #DemocraticRepublicCongo #SouthAfrica #Tanzania #Kenya #Algeria #Uganda #Sudan #Morocco #Ghana #Mozambique #IvoryCoast #Madagascar #Angola #Cameroon #Niger #BurkinaFaso #Mali #Malawi #Zambia #Senegal #Zimbabwe #Chad #Guinea #Tunisia #Rwanda #Benin #Somalia #Burundi #Togo #Libya #SierraLeone #CentralAfricanRepublic #Eritrea #Congo #Liberia #Mauritania #Gabon #Namibia #Botswana #Lesotho #EquatorialGuinea #Gambia #GuineaBissau #Swaziland #Djibouti #WesternSahara) -] - -{ #category : #icons } -RTSVGPath class >> arrowLeft [ - ^ 'M20.834,8.037L9.641,14.5c-1.43,0.824-1.43,2.175,0,3l11.193,6.463c1.429,0.826,2.598,0.15,2.598-1.5V9.537C23.432,7.887,22.263,7.211,20.834,8.037z' -] - -{ #category : #icons } -RTSVGPath class >> arrowRight [ - ^ 'M11.166,23.963L22.359,17.5c1.43-0.824,1.43-2.175,0-3L11.166,8.037c-1.429-0.826-2.598-0.15-2.598,1.5v12.926C8.568,24.113,9.737,24.789,11.166,23.963z' -] - -{ #category : #'list of countries' } -RTSVGPath class >> countries [ - ^ #(#Afghanistan #Albania #Algeria #Angola #Argentina #Armenia #Australia #Austria #Azerbaijan #Bangladesh #Belarus #Belgium #Belize #Benin #Bhutan #Bolivia #BosniaandHerzegovina #Botswana #Brazil #BruneiDarussalam #Bulgaria #BurkinaFaso #Burundi #Cambodia #Cameroon #Canada #CentralAfricanRepublic #Chad #Chile #China #Colombia #Congo #CostaRica #Croatia #Cuba #Cyprus #CzechRepublic #DemocraticRepublicCongo #Denmark #Djibouti #DominicanRepublic #Ecuador #Egypt #ElSalvador #EquatorialGuinea #Eritrea #Estonia #Ethiopia #FalklandIslandsMalvinas #Fiji #Finland #France #FrenchGuyana #GM #Gabon #Georgia #Germany #Ghana #GreatBritian #Greece #Greenland #Guatemala #Guinea #GuineaBissau #Guyana #Haiti #Honduras #Hungary #Iceland #India #Indonesia #Iran #Iraq #Ireland #Israel #Italy #IvoryCoast #Jamaica #Japan #Jordan #Kazakhstan #Kenya #Kuwait #Kyrgyzstan #Laos #Latvia #Lebanon #Liberia #Libya #Lithuania #Luxembourg #Madagascar #Malawi #Malaysia #Mali #Mauritania #Mexico #Moldova #Mongolia #Morocco #Mozambique #MyanmarBurma #Namibia #Nepal #Netherlands #NewZealand #Nicaragua #Niger #Nigeria #NorthKorea #Norway #NewCaledonia #Oman #Pakistan #Palestine #Panama #PapuaNewGuinea #Paraguay #Peru #Philippines #Poland #Portugal #PuertoRico #Qatar #RepublicofMacedonia #RepublicofTurkey #Romania #Russia #Rwanda #SaudiArabia #Senegal #Serbia #SierraLeone #Slovakia #SolomonIslands #Somalia #SouthAfrica #Lesotho #SouthKorea #Spain #SriLanka #Sudan #Suriname #SvalbardJanMayen #Swaziland #Sweden #Switzerland #Syria #Taiwan #Tajikistan #Tanzania #Thailand #TimorLeste #Togo #Tunisia #Turkmenistan #Uganda #Ukraine #UnitedArabEmirates #UnitedStates #Uruguay #Uzbekistan #Vanuatu #Venezuela #Vietnam #WesternSahara #Yemen #Zambia #Zimbabwe) -] - -{ #category : #others } -RTSVGPath class >> goldenSpiral: level start: p side: side direction: dir type: isNarrow [ - - "level: the number or golden rectangles - p: the start point - side: the size of the bigger rectangle - dir: the direction for rectangle in quadrants 1@1 = first quadrant etc - isNarrow: the arc direction" - | s point p1 p2 p3 goldenRatio si dirs d n ar | - ar := isNarrow - ifTrue: [ #(1 1 1 -1 1 -1 -1 -1 -1 -1 -1 1 -1 1 1 1) ] - ifFalse: [ #(1 1 -1 1 -1 1 -1 -1 -1 -1 1 -1 1 -1 1 1) ]. - dirs := Dictionary new. - (1 to: 16 by: 4) do: [ :i| - dirs at: (ar at: i)@(ar at: i+1) put: (ar at: i+2)@(ar at: i+3) ]. - goldenRatio := (1 + 5 sqrt)/2. - s := WriteStream on: (String new: 100). - point := [ :z| z x asFloat asString, ',', z y asFloat asString,' ' ]. - s nextPutAll: 'M', (point value: p). - si := side. - d := dir. - n := isNarrow. - ((dir = (-1 @ 1)) or: [ dir= (1@ -1) ]) ifTrue: [ n := n not. ]. - 1 to: level do: [ :i| - p3 := p+(d * si). - n ifTrue: [ - p1 :=p x @((0.55*(p3 y - p y))+ p y) . - p2 := ((0.45*(p3 x - p x))+p x ) @ p3 y. - ] ifFalse: [ - p1 := ((0.55*(p3 x - p x))+p x ) @ p y. - p2 := p3 x @((0.45*(p3 y - p y))+ p y). ]. - si := (si * goldenRatio)-si. - d := dirs at: d. - n := n not. - s - nextPutAll: 'c'; - nextPutAll: (point value: p1); - nextPutAll: (point value: p2); - nextPutAll: (point value: p3). - ]. - s nextPutAll: 'z'. - s close. - ^ s contents. - -] - -{ #category : #'list of countries' } -RTSVGPath class >> icons [ - ^ #(#supermarketCart #America #puzzlePiece) -] - -{ #category : #icons } -RTSVGPath class >> puzzlePiece [ - ^ 'M3.739,13.619c0,0,3.516-4.669,5.592-3.642c2.077,1.027-0.414,2.795,1.598,3.719c2.011,0.924,5.048-0.229,4.376-2.899c-0.672-2.67-1.866-0.776-2.798-2.208c-0.934-1.432,4.586-4.59,4.586-4.59s3.361,6.651,4.316,4.911c1.157-2.105,3.193-4.265,5.305-1.025c0,0,1.814,2.412,0.246,3.434s-2.917,0.443-3.506,1.553c-0.586,1.112,3.784,4.093,3.784,4.093s-2.987,4.81-4.926,3.548c-1.939-1.262,0.356-3.364-2.599-3.989c-1.288-0.23-3.438,0.538-3.818,2.34c-0.13,2.709,1.604,2.016,2.797,3.475c1.191,1.457-4.484,4.522-4.484,4.522s-1.584-3.923-3.811-4.657c-2.227-0.735-0.893,2.135-2.917,2.531c-2.024,0.396-4.816-2.399-3.46-4.789c1.358-2.391,3.275-0.044,3.441-1.951C7.629,16.087,3.739,13.619,3.739,13.619z' -] - -{ #category : #'list of countries' } -RTSVGPath class >> southAmerica [ - ^ #(#Argentina #Brazil #Bolivia #Chile #Colombia #Ecuador #Guyana #FrenchGuyana #Paraguay #Peru #Suriname #Uruguay #Venezuela) -] - -{ #category : #icons } -RTSVGPath class >> supermarketCart [ - ^ 'M29.02,11.754L8.416,9.473L7.16,4.716C7.071,4.389,6.772,4.158,6.433,4.158H3.341C3.114,3.866,2.775,3.667,2.377,3.667c-0.686,0-1.242,0.556-1.242,1.242c0,0.686,0.556,1.242,1.242,1.242c0.399,0,0.738-0.201,0.965-0.493h2.512l5.23,19.8c-0.548,0.589-0.891,1.373-0.891,2.242c0,1.821,1.473,3.293,3.293,3.293c1.82,0,3.294-1.472,3.297-3.293c0-0.257-0.036-0.504-0.093-0.743h5.533c-0.056,0.239-0.092,0.486-0.092,0.743c0,1.821,1.475,3.293,3.295,3.293s3.295-1.472,3.295-3.293c0-1.82-1.473-3.295-3.295-3.297c-0.951,0.001-1.801,0.409-2.402,1.053h-7.136c-0.601-0.644-1.451-1.052-2.402-1.053c-0.379,0-0.738,0.078-1.077,0.196l-0.181-0.685H26.81c1.157-0.027,2.138-0.83,2.391-1.959l1.574-7.799c0.028-0.145,0.041-0.282,0.039-0.414C30.823,12.733,30.051,11.86,29.02,11.754zM25.428,27.994c-0.163,0-0.295-0.132-0.297-0.295c0.002-0.165,0.134-0.297,0.297-0.297s0.295,0.132,0.297,0.297C25.723,27.862,25.591,27.994,25.428,27.994zM27.208,20.499l0.948-0.948l-0.318,1.578L27.208,20.499zM12.755,11.463l1.036,1.036l-1.292,1.292l-1.292-1.292l1.087-1.087L12.755,11.463zM17.253,11.961l0.538,0.538l-1.292,1.292l-1.292-1.292l0.688-0.688L17.253,11.961zM9.631,14.075l0.868-0.868l1.292,1.292l-1.292,1.292l-0.564-0.564L9.631,14.075zM9.335,12.956l-0.328-1.24L9.792,12.5L9.335,12.956zM21.791,16.499l-1.292,1.292l-1.292-1.292l1.292-1.292L21.791,16.499zM21.207,14.5l1.292-1.292l1.292,1.292l-1.292,1.292L21.207,14.5zM18.5,15.791l-1.293-1.292l1.292-1.292l1.292,1.292L18.5,15.791zM17.791,16.499L16.5,17.791l-1.292-1.292l1.292-1.292L17.791,16.499zM14.499,15.791l-1.292-1.292l1.292-1.292l1.292,1.292L14.499,15.791zM13.791,16.499l-1.292,1.291l-1.292-1.291l1.292-1.292L13.791,16.499zM10.499,17.207l1.292,1.292l-0.785,0.784l-0.54-2.044L10.499,17.207zM11.302,20.404l1.197-1.197l1.292,1.292L12.5,21.791l-1.131-1.13L11.302,20.404zM13.208,18.499l1.291-1.292l1.292,1.292L14.5,19.791L13.208,18.499zM16.5,19.207l1.292,1.292L16.5,21.79l-1.292-1.291L16.5,19.207zM17.208,18.499l1.292-1.292l1.291,1.292L18.5,19.79L17.208,18.499zM20.499,19.207l1.292,1.292L20.5,21.79l-1.292-1.292L20.499,19.207zM21.207,18.499l1.292-1.292l1.292,1.292l-1.292,1.292L21.207,18.499zM23.207,16.499l1.292-1.292l1.292,1.292l-1.292,1.292L23.207,16.499zM25.207,14.499l1.292-1.292L27.79,14.5l-1.291,1.292L25.207,14.499zM24.499,13.792l-1.156-1.156l2.082,0.23L24.499,13.792zM21.791,12.5l-1.292,1.292L19.207,12.5l0.29-0.29l2.253,0.25L21.791,12.5zM14.5,11.791l-0.152-0.152l0.273,0.03L14.5,11.791zM10.5,11.792l-0.65-0.65l1.171,0.129L10.5,11.792zM14.5,21.207l1.205,1.205h-2.409L14.5,21.207zM18.499,21.207l1.206,1.206h-2.412L18.499,21.207zM22.499,21.207l1.208,1.207l-2.414-0.001L22.499,21.207zM23.207,20.499l1.292-1.292l1.292,1.292l-1.292,1.292L23.207,20.499zM25.207,18.499l1.292-1.291l1.291,1.291l-1.291,1.292L25.207,18.499zM28.499,17.791l-1.291-1.292l1.291-1.291l0.444,0.444l-0.429,2.124L28.499,17.791zM29.001,13.289l-0.502,0.502l-0.658-0.658l1.016,0.112C28.911,13.253,28.956,13.271,29.001,13.289zM13.487,27.994c-0.161,0-0.295-0.132-0.295-0.295c0-0.165,0.134-0.297,0.295-0.297c0.163,0,0.296,0.132,0.296,0.297C13.783,27.862,13.651,27.994,13.487,27.994zM26.81,22.414h-1.517l1.207-1.207l0.93,0.93C27.243,22.306,27.007,22.428,26.81,22.414z' -] - -{ #category : #accessing } -RTSVGPath >> borderColor: aValueOrBlock [ - borderColor := aValueOrBlock -] - -{ #category : #accessing } -RTSVGPath >> borderWidth: aValueOrBlock [ - borderWidth := aValueOrBlock -] - -{ #category : #'public-configuration' } -RTSVGPath >> borderWidthConstant [ - "Make that the width is constant, independent of its scale" - self borderWidth: [ :e | (1 / (self scaleFor: e)) asFloat ] -] - -{ #category : #accessing } -RTSVGPath >> centeredPath: aString [ - self path: aString. - keepInOriginalPosition := false. -] - -{ #category : #initialization } -RTSVGPath >> initialize [ - super initialize. - self path: ''. - scale := 1. - borderWidth := 1. - borderColor := Color black. - self fillColor: nil. - keepInOriginalPosition := true. -] - -{ #category : #accessing } -RTSVGPath >> path: aPathAsString [ - "Examples of SVG paths can be found on http://www.w3.org/TR/SVG/paths.html#PathData" - path := aPathAsString. -] - -{ #category : #hooks } -RTSVGPath >> trachelShapeFor: anElement [ - | shape | - shape := TRSVGPath new. - self updateFor: anElement trachelShape: shape. - ^ shape -] - -{ #category : #hooks } -RTSVGPath >> updateFor: anElement trachelShape: trShape [ - trShape isNil - ifTrue: [ ^ self ]. - trShape - strokePaint: (borderColor rtValue: anElement); - borderWidth: (borderWidth rtValue: anElement); - fillColor: (self fillColor rtValue: anElement); - rotateByDegrees: (self rotationFor: anElement); - scaleBy: (self scaleFor: anElement). - - keepInOriginalPosition - ifTrue: [ trShape path: (path rtValue: anElement) ] - ifFalse: [ trShape centeredPath: (path rtValue: anElement) ]. - trShape resetPath -] diff --git a/src/Roassal2/RTSVGPathBezierLine.class.st b/src/Roassal2/RTSVGPathBezierLine.class.st deleted file mode 100644 index eda2871eb..000000000 --- a/src/Roassal2/RTSVGPathBezierLine.class.st +++ /dev/null @@ -1,56 +0,0 @@ -" -This is a RTBezierLine using a TRSVGPath instead of a TRBezierLine as Trachel shape. -An edge with an array of control points will generate a sequence of quadratic Bezier curves. -" -Class { - #name : #RTSVGPathBezierLine, - #superclass : #RTBezierLine, - #category : #'Roassal2-Shapes' -} - -{ #category : #'as yet unclassified' } -RTSVGPathBezierLine >> getSVGPath: anEdge [ - | from to mid p realControllingElements | - - from := anEdge from position. - to := anEdge to position. - - realControllingElements := controllingElements rtValue: anEdge. - - mid := from. - p := 'M ', from x asString,' ', from y asString. - - - realControllingElements allButLastDo: [ :c | - mid := (c position x + ((realControllingElements after:c) position x - c position x /2))@(c position y + ((realControllingElements after:c) position y - c position y /2)). - p := p, ' Q ', c position x asString, ' ', c position y asString, ' ', mid x asString, ' ', mid y asString. - ]. - - p := p, ' Q ', realControllingElements last position x asString, ' ', realControllingElements last position y asString, ' ', to x asString, ' ', to y asString. - - ^ p - - -] - -{ #category : #public } -RTSVGPathBezierLine >> trachelShapeFor: anEdge [ - | trachelShape realControllingElements | - trachelShape := TRSVGPath new. - self updateFor: anEdge trachelShape: trachelShape. - - realControllingElements := controllingElements rtValue: anEdge. - realControllingElements do: [ :e | e addConnectedEdge: anEdge ]. - ^ trachelShape -] - -{ #category : #rendering } -RTSVGPathBezierLine >> updateFor: edge trachelShape: trachelShape [ - trachelShape resetPath. - trachelShape strokePaint: (self colorFor: edge). - trachelShape borderWidth: (self widthFor: edge). - trachelShape path: (self getSVGPath: edge). - trachelShape strokePaint: (self colorFor: edge). - trachelShape fillColor:(Color white alpha: 0). - -] diff --git a/src/Roassal2/RTSVGPathEntity.class.st b/src/Roassal2/RTSVGPathEntity.class.st deleted file mode 100644 index 6d95cb092..000000000 --- a/src/Roassal2/RTSVGPathEntity.class.st +++ /dev/null @@ -1,89 +0,0 @@ -" -A RTSVGPathEntity is SVG path that translates from a generic SVG path, as represented in Roassal. -" -Class { - #name : #RTSVGPathEntity, - #superclass : #RTSVGEntity, - #instVars : [ - 'path', - 'center', - 'scale' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #adding } -RTSVGPathEntity >> addOn: stream using: aSVGVisitor [ - aSVGVisitor names at: self element put: self id. - - self openDef: stream. - self addPath: stream. - self startStyle: stream. - self addFillColor: stream. - self addFillOpacity: stream. - self addStrokeColor: stream. - self addStrokeWidth: stream. - self closeTag: stream. - self startTransform: stream. - self addTranslation: self center into: stream. - self addScale: self scale into: stream. - self closeTag: stream. - self startClass: stream. - self addContainedInteractions: aSVGVisitor. - self closeTag: stream. - self addExternalInteractions: aSVGVisitor. - self closeDef: stream. - -] - -{ #category : #adding } -RTSVGPathEntity >> addPath: stream [ - stream nextPutAll: 'd="' , self path , '" ' -] - -{ #category : #accessing } -RTSVGPathEntity >> center [ - ^ center -] - -{ #category : #accessing } -RTSVGPathEntity >> center: anObject [ - center := anObject -] - -{ #category : #accessing } -RTSVGPathEntity >> element: anElement path: aPath center: aPoint scale: anInteger fillColor: aColor borderColor: anotherColor width: anotherInteger [ - self element: anElement. - self path: aPath. - self center: aPoint. - self scale: anInteger. - self fillColor: aColor. - self strokeColor: anotherColor. - self strokeWidth: anotherInteger -] - -{ #category : #initialization } -RTSVGPathEntity >> initialize [ - self type: 'path'. - self label: 'p' -] - -{ #category : #accessing } -RTSVGPathEntity >> path [ - ^ path -] - -{ #category : #accessing } -RTSVGPathEntity >> path: anObject [ - path := anObject -] - -{ #category : #accessing } -RTSVGPathEntity >> scale [ - ^ scale -] - -{ #category : #accessing } -RTSVGPathEntity >> scale: anObject [ - scale := anObject -] diff --git a/src/Roassal2/RTSVGPathLine.class.st b/src/Roassal2/RTSVGPathLine.class.st deleted file mode 100644 index 9a2c95bfb..000000000 --- a/src/Roassal2/RTSVGPathLine.class.st +++ /dev/null @@ -1,67 +0,0 @@ -" -I am a line that can be styled with arrow ends and whose path is specified by SVG path. - -I am used as a line, if you need a regular shape, use RTSVGPath. -" -Class { - #name : #RTSVGPathLine, - #superclass : #RTAbstractLine, - #instVars : [ - 'path' - ], - #category : #'Roassal2-Shapes' -} - -{ #category : #accessing } -RTSVGPathLine >> linePathFor: anEdge [ - ^ String - streamContents: [ :s | - s - nextPutAll: 'M'; - nextPutAll: anEdge from position x asFloat asString; - nextPutAll: ','; - nextPutAll: anEdge from position y asFloat asString; - nextPutAll: ' '; - nextPutAll: anEdge to position x asFloat asString; - nextPutAll: ','; - nextPutAll: anEdge to position y asFloat asString ] -] - -{ #category : #accessing } -RTSVGPathLine >> path [ - ^ path -] - -{ #category : #accessing } -RTSVGPathLine >> path: aString [ - path := aString -] - -{ #category : #accessing } -RTSVGPathLine >> pathFor: anEdge [ - ^ path ifNil: [ self linePathFor: anEdge ] ifNotNil: [ path rtValue: anEdge ] -] - -{ #category : #hooks } -RTSVGPathLine >> trachelShapeClass [ - ^ TRSVGPathLineShape -] - -{ #category : #public } -RTSVGPathLine >> trachelShapeFor: anEdge [ - | trachelShape | - trachelShape := self trachelShapeClass new. - self updateFor: anEdge trachelShape: trachelShape. - ^ trachelShape -] - -{ #category : #rendering } -RTSVGPathLine >> updateFor: edge trachelShape: trachelShape [ - trachelShape from: (attachPoint startingPointOf: edge) to: (attachPoint endingPointOf: edge). - trachelShape resetPath. - trachelShape strokePaint: (self colorFor: edge). - trachelShape width: (self widthFor: edge). - trachelShape svgPath: (self pathFor: edge). - trachelShape color: Color transparent - -] diff --git a/src/Roassal2/RTSVGPathTest.class.st b/src/Roassal2/RTSVGPathTest.class.st deleted file mode 100644 index 6bba736e6..000000000 --- a/src/Roassal2/RTSVGPathTest.class.st +++ /dev/null @@ -1,100 +0,0 @@ -Class { - #name : #RTSVGPathTest, - #superclass : #RTTest, - #category : #'Roassal2-Core-Tests' -} - -{ #category : #'test countries' } -RTSVGPathTest >> testCountries [ - - self assert: ((RTSVGPath countries collect: [ :k | RTSVGPath perform: k ]) allSatisfy: #isString) - -] - -{ #category : #'point inclusion' } -RTSVGPathTest >> testIncludesPointBasic [ - | v e | - v := RTView new. - e := (RTSVGPath new path: 'M 100 100 L 300 100 L 200 300 z') element. - v add: e. - self assert: (e trachelShape includesPoint: 200@200). - self assert: (e trachelShape includesPoint: 200@80) not -] - -{ #category : #tests } -RTSVGPathTest >> testParseSimple [ - |res p1 | - res := OrderedCollection new. - res - add: (Array with: #absolute with: #() ); - add: (Array with: #moveTo: with: (Array with: 100.0@100.0) ); - add: (Array with: #absolute with: #() ); - add: (Array with: #lineTo: with: (Array with: 300.0@100.0) ); - add: (Array with: #absolute with: #() ); - add: (Array with: #lineTo: with: (Array with: 200.0@300.0) ); - add: (Array with: #close with: #()). - p1 := (TRSVGPath new path: 'M 100 100 L 300 100 L 200 300 z') curves. - self assert: p1 = res. - - " - According to the specification: - - The command letter can be eliminated on subsequent commands if the same command is used multiple times in a row (e.g., you can drop the second 'L' in 'M 100 200 L 200 100 L -100 -200' and use 'M 100 200 L 200 100 -100 -200' instead). - - Hence, the following assertion should be true: - - p2 := (RTSVGPath new path: 'M 100 100 L 300 100 200 300 z') processPath asString. - self assert: p2 = res." -] - -{ #category : #tests } -RTSVGPathTest >> testTranslateBy [ - | v e | - v := RTView new. - e := (RTSVGPath new path: 'M200,200l100,0l0,100l-100,0z') element. - v add: e. - self assert: (e trachelShape includesPoint: 210@210). - e translateBy: -10@0. - self assert: (e trachelShape includesPoint: 200@200). - self assert: (e trachelShape includesPoint: 0@0) not. -] - -{ #category : #tests } -RTSVGPathTest >> testTranslateTo [ - | v e | - v := RTView new. - e := (RTSVGPath new path: 'M200,200l100,0l0,100l-100,0z') element. - v add: e. - self assert: (e trachelShape includesPoint: 210@210). - e translateTo: 0@0. - self assert: (e trachelShape includesPoint: 200@200). - self assert: (e trachelShape includesPoint: 0@0) not. -] - -{ #category : #tests } -RTSVGPathTest >> testTranslateToCentered [ - | v e rectangle | - v := RTView new. - e := (RTSVGPath new centeredPath: 'M200,200l100,0l0,100l-100,0z') element. - rectangle := (Rectangle encompassing: (Array with: 200@200 with: 300@200 with: 300@300 with: 200@300)). - v add: e. - self deny: (e trachelShape includesPoint: 200@200). - self assert: (e trachelShape includesPoint: 0@0). - e translateTo: rectangle center. - self assert: (e trachelShape includesPoint: 200@200). - self deny: (e trachelShape includesPoint: 0@0). -] - -{ #category : #'point inclusion' } -RTSVGPathTest >> testUpdate [ - | v e | - v := RTView new. - e := (RTSVGPath new path: 'M 0 0 h 10 v 100 h -10 z') element. - v add: e. - self assert: (e trachelShape includesPoint: 5 @ 50). - self assert: (e trachelShape includesPoint: 50 @ 5) not. - e shape path: 'M 0 0 h 100 v 10 h -100 z'. - e update. - self assert: (e trachelShape includesPoint: 5 @ 50) not. - self assert: (e trachelShape includesPoint: 50 @ 5) -] diff --git a/src/Roassal2/RTSVGPolygon.class.st b/src/Roassal2/RTSVGPolygon.class.st deleted file mode 100644 index 2037b7e54..000000000 --- a/src/Roassal2/RTSVGPolygon.class.st +++ /dev/null @@ -1,97 +0,0 @@ -" -A RTSVGPolygon is represents the SVG Polygon of a regular polygon, as defined in Roassal. -" -Class { - #name : #RTSVGPolygon, - #superclass : #RTSVGEntity, - #instVars : [ - 'box', - 'points' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #adding } -RTSVGPolygon >> addOn: stream using: aSVGVisitor [ - aSVGVisitor names at: self element put: self id. - self openDef: stream. - self addPosition: stream. - self addPoints: (self points) into: stream visitor: aSVGVisitor. - self startStyle: stream. - self addFillColor: stream. - self addFillOpacity: stream. - ((self strokeWidth) > 0 and: (self strokeColor) ~= nil) - ifTrue: [ - self addStrokeColor: stream. - self addStrokeWidth: stream ]. - self closeTag: stream. - self startClass: stream. - self closeTag: stream. - self addExternalInteractions: aSVGVisitor. - self closeDef: stream. -] - -{ #category : #adding } -RTSVGPolygon >> addPoints: array into: stream visitor: visitor [ - | s | - s := String new writeStream. - array do: [ :p | s - nextPutAll: (visitor number: p x ); - nextPutAll: ','; - nextPutAll: (visitor number: p y); - nextPutAll: ' '. ]. - stream - nextPutAll: - ('points="', s contents,'" '). -] - -{ #category : #adding } -RTSVGPolygon >> addPosition: stream [ - stream - nextPutAll: - ('x="<1p>" y="<2p>" ' expandMacrosWith: self box topLeft x rounded with: self box topLeft y rounded). -] - -{ #category : #accessing } -RTSVGPolygon >> box [ - ^ box -] - -{ #category : #accessing } -RTSVGPolygon >> box: anObject [ - box := anObject -] - -{ #category : #'as yet unclassified' } -RTSVGPolygon >> element: anElement box: aRectangle color: aColor borderWidth: anInteger borderColor: anotherColor [ - self element: anElement. - self box: aRectangle. - self fillColor: aColor. - self strokeWidth: anInteger. - self strokeColor: anotherColor. - self points: (self setPoints: anElement in: aRectangle). -] - -{ #category : #initialization } -RTSVGPolygon >> initialize [ - self type: 'polygon'. - self label: 'polygon' -] - -{ #category : #accessing } -RTSVGPolygon >> points [ - ^ points -] - -{ #category : #accessing } -RTSVGPolygon >> points: anArrayOfPoints [ - points := anArrayOfPoints -] - -{ #category : #'as yet unclassified' } -RTSVGPolygon >> setPoints: anElement in: aRectangle [ - | roundedPoints | - roundedPoints := ((anElement copy translateTo: (aRectangle center)) vertices). - roundedPoints := roundedPoints collect: [ :p | (p x rounded) @ (p y rounded)]. - ^ roundedPoints -] diff --git a/src/Roassal2/RTSVGPopup.class.st b/src/Roassal2/RTSVGPopup.class.st deleted file mode 100644 index 18a378012..000000000 --- a/src/Roassal2/RTSVGPopup.class.st +++ /dev/null @@ -1,126 +0,0 @@ -" -A RTSVGPopup is any kind of popup born from a certain element. - -The click refers to the posibility of activating the popup only when the element is clicked. This is disabled by default. -" -Class { - #name : #RTSVGPopup, - #superclass : #RTSVGInteraction, - #instVars : [ - 'click', - 'color', - 'position', - 'bounds' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #'as yet unclassified' } -RTSVGPopup class >> on: anExporter color: aColor targets: aRTShape [ - | generator | - generator := [ :e | self new target: e; color: aColor; yourself ]. - self on: anExporter targets: aRTShape generator: generator -] - -{ #category : #'as yet unclassified' } -RTSVGPopup class >> onClick: anExporter color: aColor targets: aRTShape [ - | generator | - generator := [ :e | self new target: e; color: aColor; click: true; yourself ]. - self on: anExporter targets: aRTShape generator: generator -] - -{ #category : #'as yet unclassified' } -RTSVGPopup class >> onClick: anExporter targets: aRTShape [ - | generator | - generator := [ :e | self new target: e; click: true; yourself ]. - self on: anExporter targets: aRTShape generator: generator -] - -{ #category : #adding } -RTSVGPopup >> addEventHandlers: aStream id: aString element: aRTElement center: aNumber [ - self subclassResponsibility -] - -{ #category : #adding } -RTSVGPopup >> addFunctions: aStream [ - "do nothing" -] - -{ #category : #adding } -RTSVGPopup >> addGlobalHandlers: aStream [ - "do nothing" -] - -{ #category : #accessing } -RTSVGPopup >> bounds [ - ^ bounds -] - -{ #category : #accessing } -RTSVGPopup >> bounds: anObject [ - bounds := anObject -] - -{ #category : #accessing } -RTSVGPopup >> click [ - ^ click -] - -{ #category : #accessing } -RTSVGPopup >> click: anObject [ - click := anObject -] - -{ #category : #accessing } -RTSVGPopup >> color [ - ^ color -] - -{ #category : #accessing } -RTSVGPopup >> color: anObject [ - color := anObject -] - -{ #category : #initialization } -RTSVGPopup >> initialize [ - super initialize. - click := false. - color := Color black. - contained := false. - external := true. - self type: 'popup'. - position := [ :element | element trachelShape position ]. -] - -{ #category : #adding } -RTSVGPopup >> mouseAction: aString [ - ^click - ifTrue: ["Still does not work" - ' - - ' ] - ifFalse: [ - ' - - '] -] - -{ #category : #accessing } -RTSVGPopup >> position [ - ^ position -] - -{ #category : #accessing } -RTSVGPopup >> position: anObject [ - position := anObject -] - -{ #category : #accessing } -RTSVGPopup >> xBound [ - ^1 -] - -{ #category : #accessing } -RTSVGPopup >> yBound [ - ^1 -] diff --git a/src/Roassal2/RTSVGRectangle.class.st b/src/Roassal2/RTSVGRectangle.class.st deleted file mode 100644 index c09c95abc..000000000 --- a/src/Roassal2/RTSVGRectangle.class.st +++ /dev/null @@ -1,88 +0,0 @@ -" -A RTSVGLine is represents the SVG Rectangle of a regular rectangle, as defined in Roassal. -" -Class { - #name : #RTSVGRectangle, - #superclass : #RTSVGEntity, - #instVars : [ - 'box', - 'width', - 'height' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #adding } -RTSVGRectangle >> addOn: stream using: aSVGVisitor [ - aSVGVisitor names at: self element put: self id. - self openDef: stream. - self addPosition: stream. - self addWidth: (self width) height: (self height) into: stream. - self startStyle: stream. - self addFillColor: stream. - self addFillOpacity: stream. - ((self strokeWidth) > 0 and: (self strokeColor) ~= nil) - ifTrue: [ - self addStrokeColor: stream. - self addStrokeWidth: stream ]. - self closeTag: stream. - self startClass: stream. - self addContainedInteractions: aSVGVisitor. - self closeTag: stream. - self addExternalInteractions: aSVGVisitor. - self closeDef: stream. -] - -{ #category : #adding } -RTSVGRectangle >> addPosition: stream [ - stream - nextPutAll: - ('x="<1p>" y="<2p>" ' expandMacrosWith: (self box topLeft x round: 2) with: (self box topLeft y round: 2)). -] - -{ #category : #accessing } -RTSVGRectangle >> box [ - ^ box -] - -{ #category : #accessing } -RTSVGRectangle >> box: anObject [ - box := anObject -] - -{ #category : #accessing } -RTSVGRectangle >> element: anElement box: aRectangle fillColor: aColor borderWidth: anInteger borderColor: anotherColor [ - self element: anElement. - self box: aRectangle. - self fillColor: aColor. - self strokeWidth: anInteger. - self strokeColor: anotherColor -] - -{ #category : #accessing } -RTSVGRectangle >> height [ - height ifNil: [ height := self box height round: 2 ]. - ^ height -] - -{ #category : #accessing } -RTSVGRectangle >> height: anObject [ - height := anObject -] - -{ #category : #initialization } -RTSVGRectangle >> initialize [ - self type: 'rect'. - self label: 'rect' -] - -{ #category : #accessing } -RTSVGRectangle >> width [ - width ifNil: [ width := self box width round: 2 ]. - ^ width -] - -{ #category : #accessing } -RTSVGRectangle >> width: anObject [ - width := anObject -] diff --git a/src/Roassal2/RTSVGStringConverter.class.st b/src/Roassal2/RTSVGStringConverter.class.st deleted file mode 100644 index 9ee7fbe58..000000000 --- a/src/Roassal2/RTSVGStringConverter.class.st +++ /dev/null @@ -1,143 +0,0 @@ -" -A RTSVGStringConverter is a class used to fix Strings before using them inside SVG elements. Since many characters need to be translated to its HTML standart encoding -" -Class { - #name : #RTSVGStringConverter, - #superclass : #RTObject, - #instVars : [ - 'convertions' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #converting } -RTSVGStringConverter >> convertString: aString [ - | array | - array := (1 to: aString size) collect: [ :n | convertions at: (aString at: n) ifAbsent: [ aString at: n ] ]. - ^ array inject: '' into: [ :acc :e | acc, (e asString) ]. - -] - -{ #category : #initialization } -RTSVGStringConverter >> initialize [ - super initialize. - convertions := Dictionary new. - self initializeValues. -] - -{ #category : #initialization } -RTSVGStringConverter >> initializeValues [ - convertions - at: $™ put: '™'; - at: $\ put: '\'; - at: $€ put: '€'; - at: $ put: ' '; - at: $" put: '"'; - at: $& put: '&'; - at: $< put: '<'; - at: $> put: '>'; - at: $¡ put: '¡'; - at: $¢ put: '¢'; - at: $£ put: '£'; - at: $¤ put: '¤'; - at: $¥ put: '¥'; - at: $¦ put: '¦'; - at: $§ put: '§'; - at: $¨ put: '¨'; - at: $© put: '©'; - at: $ª put: 'ª'; - at: $¬ put: '¬'; - at: $® put: '®'; - at: $¯ put: '¯'; - at: $° put: '°'; - at: $± put: '±'; - at: $² put: '²'; - at: $³ put: '³'; - at: $´ put: '´'; - at: $µ put: 'µ'; - at: $¶ put: '¶'; - at: $· put: '·'; - at: $¸ put: '¸'; - at: $¹ put: '¹'; - at: $º put: 'º'; - at: $» put: '»'; - at: $¼ put: '¼'; - at: $½ put: '½'; - at: $¾ put: '¾'; - at: $¿ put: '¿'; - at: $À put: 'À'; - at: $Á put: 'Á'; - at: $Â put: 'Â'; - at: $Ã put: 'Ã'; - at: $Ä put: 'Ä'; - at: $Å put: 'Å'; - at: $Æ put: 'Æ'; - at: $Ç put: 'Ç'; - at: $È put: 'È'; - at: $É put: 'É'; - at: $Ê put: 'Ê'; - at: $Ë put: 'Ë'; - at: $Ì put: 'Ì'; - at: $Í put: 'Í'; - at: $Î put: 'Î'; - at: $Ï put: 'Ï'; - at: $Ð put: 'Ð'; - at: $Ñ put: 'Ñ'; - at: $Ò put: 'Ò'; - at: $Ó put: 'Ó'; - at: $Ô put: 'Ô'; - at: $Õ put: 'Õ'; - at: $Ö put: 'Ö'; - at: $× put: '×'; - at: $Ø put: 'Ø'; - at: $Ù put: 'Ù'; - at: $Ú put: 'Ú'; - at: $Û put: 'Û'; - at: $Ü put: 'Ü'; - at: $Ý put: 'Ý'; - at: $Þ put: 'Þ'; - at: $ß put: 'ß'; - at: $à put: 'à'; - at: $á put: 'á'; - at: $â put: 'â'; - at: $ã put: 'ã'; - at: $ä put: 'ä'; - at: $å put: 'å'; - at: $æ put: 'æ'; - at: $ç put: 'ç'; - at: $è put: 'è'; - at: $é put: 'é'; - at: $ê put: 'ê'; - at: $ë put: 'ë'; - at: $ì put: 'ì'; - at: $í put: 'í'; - at: $î put: 'î'; - at: $ï put: 'ï'; - at: $ð put: 'ð'; - at: $ñ put: 'ñ'; - at: $ò put: 'ò'; - at: $ó put: 'ó'; - at: $ô put: 'ô'; - at: $õ put: 'õ'; - at: $ö put: 'ö'; - at: $÷ put: '÷'; - at: $ø put: 'ø'; - at: $ù put: 'ù'; - at: $ú put: 'ú'; - at: $û put: 'û'; - at: $ü put: 'ü'; - at: $ý put: 'ý'; - at: $þ put: 'þ'; - at: $⁰ put: '⁰'; - at: $¹ put: '¹'; - at: $² put: '²'; - at: $³ put: '³'; - at: $⁴ put: '⁴'; - at: $⁵ put: '⁵'; - at: $⁶ put: '⁶'; - at: $⁷ put: '⁷'; - at: $⁸ put: '⁸'; - at: $⁹ put: '⁹'; - - at: Character cr put: ''. -] diff --git a/src/Roassal2/RTSVGStringConverterTest.class.st b/src/Roassal2/RTSVGStringConverterTest.class.st deleted file mode 100644 index 1f3d15090..000000000 --- a/src/Roassal2/RTSVGStringConverterTest.class.st +++ /dev/null @@ -1,11 +0,0 @@ -Class { - #name : #RTSVGStringConverterTest, - #superclass : #RTTest, - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #tests } -RTSVGStringConverterTest >> testBasic [ - - self assert: (RTSVGStringConverter new convertString: 'Hello world') equals: 'Hello world' -] diff --git a/src/Roassal2/RTSVGText.class.st b/src/Roassal2/RTSVGText.class.st deleted file mode 100644 index 70a0a7e65..000000000 --- a/src/Roassal2/RTSVGText.class.st +++ /dev/null @@ -1,154 +0,0 @@ -" -A RTSVGLine is represents the SVG text of a regular or rotated text, as defined in Roassal. - -" -Class { - #name : #RTSVGText, - #superclass : #RTSVGEntity, - #instVars : [ - 'x', - 'y', - 'angle', - 'content', - 'fontSize' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #adding } -RTSVGText >> addMatrix: stream visitor: visitor [ - "| m | - m := element matrix. - stream - nextPutAll: 'matrix('; - nextPutAll: (visitor number: m sx); - nextPutAll: ','; - nextPutAll: (visitor number: m shy); - nextPutAll: ','; - nextPutAll: (visitor number: m shx); - nextPutAll: ','; - nextPutAll: (visitor number: m sy); - nextPutAll: ','; - nextPutAll: (visitor number: m x); - nextPutAll: ','; - nextPutAll: (visitor number: m y negated); - nextPutAll: ')'." - | box | - box := element encompassingRectangle. - stream - nextPutAll: 'rotate('; - nextPutAll: (visitor number: self angle); - nextPutAll: ', '; - nextPutAll: (visitor number: self x); - nextPutAll: ', '; - nextPutAll: (visitor number: self y); - nextPutAll: ') '. - - -] - -{ #category : #adding } -RTSVGText >> addOn: stream using: aSVGVisitor [ - - aSVGVisitor names at: self element put: self id. - self openDef: stream. - self addPosition: stream. - self startStyle: stream. - self addFillColor: stream. - self closeTag: stream. - self startTransform: stream. - self addMatrix: stream visitor: aSVGVisitor. - self closeTag: stream. - self startClass: stream. - self closeTag: stream. - self closeDefWithContent: stream. - self addStringWithFont: self content fontSize: self fontSize into: stream. - self addExternalInteractions: aSVGVisitor. - self closeFullDef: stream. - -] - -{ #category : #adding } -RTSVGText >> addPosition: stream [ - |box temp | - box := element encompassingRectangle. - temp := RTSVGVisitor new. - - stream - nextPutAll: 'x="'; - nextPutAll: (temp number: (self x - (box width / 5))); - nextPutAll: '" y="'; - nextPutAll: (temp number: (self y + (box height / 4))); - nextPutAll: '" '. -] - -{ #category : #accessing } -RTSVGText >> angle [ - ^ angle -] - -{ #category : #accessing } -RTSVGText >> angle: anObject [ - angle := anObject -] - -{ #category : #accessing } -RTSVGText >> content [ - ^ content -] - -{ #category : #accessing } -RTSVGText >> content: anObject [ - content := anObject -] - -{ #category : #accessing } -RTSVGText >> element: anElement text: aString at: aPoint color: aColor [ - self element: anElement text: aString at: aPoint color: aColor angle: nil -] - -{ #category : #accessing } -RTSVGText >> element: anElement text: aString at: aPoint color: aColor angle: anAngle [ - self element: anElement. - self content: aString. - self x: aPoint x; y: aPoint y. - self fillColor: aColor. - self angle: anAngle. - self fontSize: anElement fontSize. -] - -{ #category : #accessing } -RTSVGText >> fontSize [ - ^ fontSize -] - -{ #category : #accessing } -RTSVGText >> fontSize: anObject [ - fontSize := anObject -] - -{ #category : #initialization } -RTSVGText >> initialize [ - self type: 'text'. - self label: 'text' -] - -{ #category : #accessing } -RTSVGText >> x [ - ^ x -] - -{ #category : #accessing } -RTSVGText >> x: anObject [ - x := anObject -] - -{ #category : #accessing } -RTSVGText >> y [ - ^ y -] - -{ #category : #accessing } -RTSVGText >> y: anObject [ - y := anObject -] diff --git a/src/Roassal2/RTSVGTextPopup.class.st b/src/Roassal2/RTSVGTextPopup.class.st deleted file mode 100644 index b1b8f639c..000000000 --- a/src/Roassal2/RTSVGTextPopup.class.st +++ /dev/null @@ -1,119 +0,0 @@ -" -A RTSVGTextPopup is a simple text popup. - -" -Class { - #name : #RTSVGTextPopup, - #superclass : #RTSVGPopup, - #instVars : [ - 'text', - 'font', - 'fontSize' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #'as yet unclassified' } -RTSVGTextPopup class >> on: anExporter text: aString color: aColor font: aFont size: aNumber targets: aRTShape [ - | generator | - generator := [ :e | self new target: e; text: aString; color: aColor; font: aFont; fontSize: aNumber; yourself ]. - self on: anExporter targets: aRTShape generator: generator -] - -{ #category : #'as yet unclassified' } -RTSVGTextPopup class >> on: anExporter text: aString color: aColor size: aNumber targets: aRTShape [ - | generator | - generator := [ :e | self new target: e; text: aString; color: aColor; fontSize: aNumber; yourself ]. - self on: anExporter targets: aRTShape generator: generator -] - -{ #category : #'as yet unclassified' } -RTSVGTextPopup class >> on: anExporter text: aString font: aFont size: aNumber targets: aRTShape [ - | generator | - generator := [ :e | self new target: e; text: aString; font: aFont; fontSize: aNumber; yourself ]. - self on: anExporter targets: aRTShape generator: generator -] - -{ #category : #'as yet unclassified' } -RTSVGTextPopup class >> on: anExporter text: aString targets: aRTShape [ - | generator | - generator := [ :e | self new target: e; text: aString; yourself ]. - self on: anExporter targets: aRTShape generator: generator -] - -{ #category : #'as yet unclassified' } -RTSVGTextPopup class >> onClick: anExporter text: aString color: aColor size: aNumber targets: aRTShape [ - | generator | - generator := [ :e | self new target: e; text: aString; color: aColor; fontSize: aNumber; click: true; yourself ]. - self on: anExporter targets: aRTShape generator: generator -] - -{ #category : #'as yet unclassified' } -RTSVGTextPopup class >> onClick: anExporter text: aString targets: aRTShape [ - | generator | - generator := [ :e | self new target: e; text: aString; click: true; yourself ]. - self on: anExporter targets: aRTShape generator: generator -] - -{ #category : #adding } -RTSVGTextPopup >> addEventHandlers: aStream id: aString element: aRTElement center: aPoint [ - |rText xOverflow yOverflow x y converter| - rText := (self text value: aRTElement model) asString. - x := aPoint x. - y := aPoint y. - xOverflow := aPoint x - bounds width + ((TRPlatform current familyName: self font size: self fontSize) widthOfString: rText). - yOverflow := aPoint y - bounds height + self fontSize. - xOverflow >= 0 ifTrue: [ x:= x - xOverflow ]. - yOverflow >= 0 ifTrue: [ y:= y - yOverflow ]. - converter := RTSVGStringConverter new. - aStream - nextPutAll: String cr,'',(converter convertString: rText),(self mouseAction: aString),'' -] - -{ #category : #configuration } -RTSVGTextPopup >> defaultFont [ - ^'Arial, Helvetica, sans-serif' -] - -{ #category : #accessing } -RTSVGTextPopup >> font [ - ^ font -] - -{ #category : #accessing } -RTSVGTextPopup >> font: anObject [ - font := anObject -] - -{ #category : #accessing } -RTSVGTextPopup >> fontSize [ - ^ fontSize -] - -{ #category : #accessing } -RTSVGTextPopup >> fontSize: anObject [ - fontSize := anObject -] - -{ #category : #initialization } -RTSVGTextPopup >> initialize [ - super initialize. - text := #asString. - fontSize := 12. - font := self defaultFont. -] - -{ #category : #accessing } -RTSVGTextPopup >> text [ - ^text -] - -{ #category : #accessing } -RTSVGTextPopup >> text: aSymbolOrBlock [ - text := aSymbolOrBlock -] - -{ #category : #accessing } -RTSVGTextPopup >> yBound [ - ^fontSize -] diff --git a/src/Roassal2/RTSVGViewPopup.class.st b/src/Roassal2/RTSVGViewPopup.class.st deleted file mode 100644 index dadd3c7f4..000000000 --- a/src/Roassal2/RTSVGViewPopup.class.st +++ /dev/null @@ -1,50 +0,0 @@ -" -A RTSVGViewPopup is a RTView popup. As in a complete view generated from each element. -" -Class { - #name : #RTSVGViewPopup, - #superclass : #RTSVGPopup, - #instVars : [ - 'view' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #'as yet unclassified' } -RTSVGViewPopup class >> on: anExporter view: aRTView targets: aRTShape [ - | generator | - generator := [ :e | self new target: e; view: aRTView; yourself ]. - self on: anExporter targets: aRTShape generator: generator -] - -{ #category : #'as yet unclassified' } -RTSVGViewPopup class >> onClick: anExporter view: aRTView targets: aRTShape [ - | generator | - generator := [ :e | self new target: e; click: true; view: aRTView; yourself ]. - self on: anExporter targets: aRTShape generator: generator -] - -{ #category : #adding } -RTSVGViewPopup >> addEventHandlers: aStream id: aString element: aRTElement center: aNumber [ - aStream nextPutAll: '', String cr. - RTSVGVisitor visit: (self view value: aRTElement model) on: aStream center: aNumber. - aStream - nextPutAll: (self mouseAction: aString); - nextPutAll: '' -] - -{ #category : #initialization } -RTSVGViewPopup >> initialize [ - super initialize. - view := [ :m | RTView new add: ((RTElement on: m) + (RTBox new color: Color blue; yourself))] -] - -{ #category : #accessing } -RTSVGViewPopup >> view [ - ^ view -] - -{ #category : #accessing } -RTSVGViewPopup >> view: anObject [ - view := anObject -] diff --git a/src/Roassal2/RTSVGVisitor.class.st b/src/Roassal2/RTSVGVisitor.class.st deleted file mode 100644 index 4f3e5850c..000000000 --- a/src/Roassal2/RTSVGVisitor.class.st +++ /dev/null @@ -1,531 +0,0 @@ -" -A RTSVGVisitor is a RTVisitor for SVG exporting. - -" -Class { - #name : #RTSVGVisitor, - #superclass : #RTVisitor, - #instVars : [ - 'view', - 'stream', - 'afterStream', - 'canvas', - 'interactions', - 'markers', - 'center', - 'count' - ], - #category : #'Roassal2-Exporter-SVG' -} - -{ #category : #visitor } -RTSVGVisitor class >> visit: view on: stream [ - self new view: view; stream: stream; visit; yourself. -] - -{ #category : #visitor } -RTSVGVisitor class >> visit: view on: stream canvas: aRectangle [ - self new view: view; stream: stream; canvas: aRectangle; visit; yourself. -] - -{ #category : #visitor } -RTSVGVisitor class >> visit: view on: stream center: aPoint [ - self new view: view; stream: stream; center: aPoint; visit; yourself. -] - -{ #category : #visitor } -RTSVGVisitor class >> visit: view on: stream with: interactions [ - self new view: view; stream: stream; interactions: interactions; visit; yourself. -] - -{ #category : #visitor } -RTSVGVisitor class >> visit: view on: stream with: interactions canvas: aRectangle [ - self new view: view; stream: stream; interactions: interactions; canvas: aRectangle; visit; yourself. -] - -{ #category : #visitor } -RTSVGVisitor class >> visit: view on: stream with: interactions canvas: aRectangle center: aPoint [ - self new view: view; stream: stream; interactions: interactions; canvas: aRectangle; center: aPoint; visit; yourself. -] - -{ #category : #interactions } -RTSVGVisitor >> addContainedInteractions: id element: e [ - | aNumber | - aNumber := self alignPoint: e center. - (interactions at: e ifAbsent: [OrderedCollection new]) - do: [ :i | i contained - ifTrue: [ i addEventHandlers: stream id: id element: e center: aNumber] ] -] - -{ #category : #interactions } -RTSVGVisitor >> addEmbeddingInteractions: id element: e [ - |closings aNumber | - aNumber := self alignPoint: e center. - closings := OrderedCollection new. - (interactions at: e ifAbsent: [OrderedCollection new]) - do: [ :i | (i external not and: [i contained not]) - ifTrue: [ - closings add: (i addEventHandlers: stream id: id element: e center: aNumber)] ]. - ^(closings reverse) -] - -{ #category : #interactions } -RTSVGVisitor >> addExternalInteractions: id element: el [ - | aNumber | - aNumber := self alignPoint: el center. - (interactions at: el ifAbsent: [OrderedCollection new]) - do: [ :i | i external - ifTrue: [ - self stream - nextPutAll: ' onmousemove="showPopup(evt, '''; - nextPutAll: id; - nextPutAll: ''')" onmouseout="hidePopup('''; - nextPutAll: id; - nextPutAll: ''')"'. - - self afterStream add: [:e | - i addEventHandlers: stream id: id element: el center: aNumber] ]] -] - -{ #category : #accessing } -RTSVGVisitor >> afterStream [ - "Collection of evaluation promises, needed to write instructions, such as popups, after the actual svg code of the elements" - ^ afterStream -] - -{ #category : #accessing } -RTSVGVisitor >> afterStream: anObject [ - afterStream := anObject -] - -{ #category : #alignment } -RTSVGVisitor >> alignLine: aLine [ - |distanceX distanceY fromX fromY| - distanceX := canvas topLeft x negated + center x. - distanceY := canvas topLeft y negated + center y. - fromX := aLine from x + distanceX. - fromY := aLine from y + distanceY. - ^(TRLineShape new from: fromX@fromY; to: (fromX + aLine to x) @ (fromY + aLine to y)) - -] - -{ #category : #alignment } -RTSVGVisitor >> alignPoint: aPoint [ - |distanceX distanceY originX originY| - distanceX := canvas topLeft x negated + center x. - distanceY := canvas topLeft y negated + center y. - originX := aPoint x + distanceX. - originY := aPoint y + distanceY. - ^originX@originY - -] - -{ #category : #alignment } -RTSVGVisitor >> alignRectangle: aRectangle [ - |distanceX distanceY originX originY| - distanceX := canvas topLeft x negated + center x. - distanceY := canvas topLeft y negated + center y. - originX := aRectangle topLeft x + distanceX. - originY := aRectangle topLeft y + distanceY. - ^Rectangle origin: originX@originY corner: (originX + aRectangle width) @ (originY + aRectangle height) - -] - -{ #category : #accessing } -RTSVGVisitor >> canvas [ - ^canvas -] - -{ #category : #accessing } -RTSVGVisitor >> canvas: aCanvas [ - - canvas := aCanvas. -] - -{ #category : #accessing } -RTSVGVisitor >> center [ - ^center -] - -{ #category : #accessing } -RTSVGVisitor >> center: aPoint [ - center := aPoint -] - -{ #category : #alignment } -RTSVGVisitor >> fixedEncompassingRectangle [ - | shapes | - shapes := self view canvas shapes. - canvas := shapes first encompassingRectangle. - shapes do: [ :s| |rect| - rect := s encompassingRectangle. - rect height < 0 - ifTrue: [ rect := Rectangle origin: rect bottomLeft corner: rect topRight]. - canvas := canvas merge: rect. - ]. - ^canvas -] - -{ #category : #utils } -RTSVGVisitor >> getCorrespondingLine: decorator from: lines [ - lines do: [ :l | - (l class = TRBezierShape) - ifTrue: [ decorator to = l points last - ifTrue: [ - lines remove: l. - ^ Array with: l with: decorator ] ] - ifFalse: [ decorator to = l to ifTrue: [ - lines remove: l. - ^ Array with: l with: decorator ] ]. - ]. - ^nil -] - -{ #category : #utils } -RTSVGVisitor >> getDecorationId: aLineDecorationShape [ - |t w c s lw| - t := aLineDecorationShape class name. - w := aLineDecorationShape mySize. - c := aLineDecorationShape color. - s := aLineDecorationShape strokePaint. - lw := aLineDecorationShape width. - ^(t asString, w asString, ((c red * 256) + (s red * 256)) rounded asString, ((c green * 256) + (s green * 256)) rounded asString, ((c blue * 256) + (s blue * 256)) rounded asString, lw asString) - -] - -{ #category : #initialization } -RTSVGVisitor >> initialize [ - afterStream := OrderedCollection new. - interactions := Dictionary new. - markers := OrderedCollection new. - center := 1@1. - names := Dictionary new. -] - -{ #category : #accessing } -RTSVGVisitor >> interactions [ - ^ interactions -] - -{ #category : #accessing } -RTSVGVisitor >> interactions: anObject [ - interactions := anObject -] - -{ #category : #accessing } -RTSVGVisitor >> names [ - ^ names -] - -{ #category : #accessing } -RTSVGVisitor >> names: anObject [ - names := anObject -] - -{ #category : #utils } -RTSVGVisitor >> separateDecorated: lines decorations: decorations [ - |decorated temp | - decorated := OrderedCollection new. - decorations do: [ :d | - temp := (self getCorrespondingLine: d from: lines). - decorated add: temp. - ]. - ^decorated -] - -{ #category : #visitor } -RTSVGVisitor >> setCanvas [ - self canvas = nil - ifTrue: [ self fixedEncompassingRectangle ] -] - -{ #category : #accessing } -RTSVGVisitor >> stream [ - - ^stream -] - -{ #category : #accessing } -RTSVGVisitor >> stream: aStream [ - - stream := aStream. -] - -{ #category : #accessing } -RTSVGVisitor >> view [ - - ^view -] - -{ #category : #accessing } -RTSVGVisitor >> view: aView [ - - view := aView. -] - -{ #category : #visitor } -RTSVGVisitor >> visit [ - self setCanvas. - self visitView: self view. - self afterStream do: [ :s | s value: 1 ] -] - -{ #category : #visitor } -RTSVGVisitor >> visitAbstractLine: anAbstractLine [ - anAbstractLine accept: anAbstractLine - -] - -{ #category : #visitor } -RTSVGVisitor >> visitAbstractLineDecorationShape: anAbstractLineDecoration [ - anAbstractLineDecoration accept: anAbstractLineDecoration - -] - -{ #category : #visitor } -RTSVGVisitor >> visitArcShape: aShape [ - |sCenter svgE| - sCenter := self alignPoint: (aShape position). - svgE := RTSVGArc new element: (aShape) center: sCenter r1: (aShape innerRadius) r2: (aShape externalRadius) aAngle: (aShape alphaAngle) bAngle: (aShape betaAngle) color: (aShape color). - svgE addOn: stream using: self. -] - -{ #category : #visitor } -RTSVGVisitor >> visitArrowHeadShape: arrowHeadShape [ - | aid color bColor w s svgE| - aid := self getDecorationId: arrowHeadShape. - color := arrowHeadShape color. - bColor := arrowHeadShape strokePaint. - w := arrowHeadShape width. - s := arrowHeadShape mySize. - (markers contains: aid) - ifFalse: [ - svgE := RTSVGArrowHeadMarker new id: aid fillColor: color borderColor: bColor width: w size: s. - svgE addOn: stream using: self. - markers add: aid. - ] - - -] - -{ #category : #visitor } -RTSVGVisitor >> visitArrowShape: arrowShape [ - | aid bColor w s svgE| - aid := self getDecorationId: arrowShape. - bColor := arrowShape strokePaint. - w := arrowShape width. - s := arrowShape mySize. - (markers includes: aid) - ifFalse: [ - svgE := RTSVGArrowMarker new id: aid fillColor: nil borderColor: bColor width: w size: s. - svgE addOn: stream using: self. - markers add: aid. - ] - - -] - -{ #category : #visitor } -RTSVGVisitor >> visitBezierShape: aBezierShape [ - | points svgE | - points := aBezierShape points. - points := points collect: [ :p | self alignPoint: p ]. - svgE := RTSVGBezierLine new - element: aBezierShape - points: points - width: aBezierShape width - color: aBezierShape strokePaint. - svgE addOn: stream using: self -] - -{ #category : #visitor } -RTSVGVisitor >> visitBezierShape: aBezierShape with: aLineDecoration [ - |points svgE| - points:= aBezierShape points copy. - points := points collect: [ :p | self alignPoint: p]. - svgE := RTSVGBezierLine new element: (aBezierShape) points: points width: (aBezierShape width) color: (aBezierShape strokePaint) decoration: aLineDecoration. - svgE addOn: stream using: self. -] - -{ #category : #visitor } -RTSVGVisitor >> visitBitMapShape: aBitmapShape [ - - "Not supported yet" - "form := aBitmapShape form. - box := self alignRectangle: (aBitmapShape encompassingRectangle). - svgE := RTSVGBitmap new element: (aBitmapShape element) form: form box: box. - svgE addOn: stream using: self." - -] - -{ #category : #visitor } -RTSVGVisitor >> visitBoxShape: aBox [ - |borderColor fillColor box svgE| - ((aBox color) isNil) - ifTrue: [ fillColor := Color r: 0 g: 0 b: 0] - ifFalse: [ fillColor := aBox color]. - ((aBox strokePaint) isNil) - ifFalse: [ borderColor := aBox strokePaint]. - box := self alignRectangle: (aBox encompassingRectangle). - svgE := RTSVGRectangle new element: aBox box: box fillColor: fillColor borderWidth: 1 borderColor: borderColor. - svgE addOn: stream using: self. -] - -{ #category : #visitor } -RTSVGVisitor >> visitCanvas: aCanvas [ - |elementShapes edgeShapes decoratedEdgeShapes decorationShapes nonDecorationShapes lineClasses lineDecorationClasses canvasShapes| - - - canvasShapes := aCanvas shapes. - lineClasses := Array with: TRLineShape with: TRBezierShape. - lineDecorationClasses := TRAbstractLineDecoratorShape withAllSubclasses. - elementShapes := canvasShapes reject: [ :e | (lineClasses includes: e class) or: [ lineDecorationClasses includes: e class ]]. - edgeShapes := (canvasShapes select: [ :e | (lineClasses includes: e class)] ) asOrderedCollection. - nonDecorationShapes := (canvasShapes reject: [ :e | lineDecorationClasses includes: e class ]) asOrderedCollection. - decorationShapes := canvasShapes select: [ :e | lineDecorationClasses includes: e class]. - decoratedEdgeShapes := self separateDecorated: edgeShapes decorations: decorationShapes. - - stream - nextPutAll: ''. - decorationShapes do: [:s | s accept: self ]. - stream - nextPutAll: ''. - nonDecorationShapes do:[:s | s accept: self]. - decoratedEdgeShapes do:[:p | p first accept: self with: p second]. -] - -{ #category : #visitor } -RTSVGVisitor >> visitDiamondShape: diamondShape [ - | aid color bColor w s svgE| - aid := self getDecorationId: diamondShape. - color := diamondShape color. - bColor := diamondShape strokePaint. - w := diamondShape width. - s := diamondShape mySize. - (markers contains: aid) - ifFalse: [ - svgE := RTSVGDiamondMarker new id: aid fillColor: color borderColor: bColor width: w size: s. - svgE addOn: stream using: self. - markers add: aid. - ] - - -] - -{ #category : #visitor } -RTSVGVisitor >> visitEllipseShape: anEllipse [ - |borderColor fillColor box svgE| - ((anEllipse color) isNil) - ifTrue: [ fillColor := Color r: 0 g: 0 b: 0] - ifFalse: [ fillColor := anEllipse color]. - ((anEllipse strokePaint) isNil) - ifFalse: [ borderColor := anEllipse strokePaint]. - box := self alignRectangle: (anEllipse encompassingRectangle). - svgE := RTSVGOval new element: anEllipse box: box color: fillColor borderWidth: 1 borderColor: borderColor. - svgE addOn: stream using: self. -] - -{ #category : #visitor } -RTSVGVisitor >> visitGroup: aRTGroup [ - aRTGroup accept: self. -] - -{ #category : #visitor } -RTSVGVisitor >> visitLabelShape: aLabel [ - | color rectangle position text svgE| - color := aLabel color. - rectangle := aLabel encompassingRectangle. - position := self alignPoint: ((rectangle topLeft x + (rectangle width/4)) @ rectangle center y). - text := aLabel text. - svgE := RTSVGText new - element: aLabel - text: text - at: position - color: color - angle: aLabel angleInDegrees. - svgE addOn: stream using: self. -] - -{ #category : #visitor } -RTSVGVisitor >> visitLineShape: aLine [ - |startingPoint endingPoint svgE| - startingPoint := self alignPoint: (aLine from). - endingPoint := self alignPoint: (aLine to). - svgE := RTSVGLine new element: (aLine) from: startingPoint to: endingPoint width: 1 color: (aLine strokePaint). - svgE addOn: stream using: self. -] - -{ #category : #visitor } -RTSVGVisitor >> visitLineShape: aLine with: aLineDecoration [ - |startingPoint endingPoint svgE| - startingPoint := self alignPoint: (aLine from). - endingPoint := self alignPoint: (aLine to). - svgE := RTSVGLine new element: (aLine) from: startingPoint to: endingPoint width: 1 color: (aLine strokePaint) decoration: aLineDecoration. - svgE addOn: stream using: self. -] - -{ #category : #visitor } -RTSVGVisitor >> visitMondrianViewBuilder: aView [ - aView view accept: self -] - -{ #category : #visitor } -RTSVGVisitor >> visitNoShape: aNoShape [ - "Do nothing" -] - -{ #category : #visitor } -RTSVGVisitor >> visitPolygonShape: aPolygon [ - |borderColor fillColor box svgE| - ((aPolygon color) isNil) - ifTrue: [ fillColor := Color r: 0 g: 0 b: 0] - ifFalse: [ fillColor := aPolygon color]. - ((aPolygon strokePaint) isNil) - ifFalse: [ borderColor := aPolygon strokePaint]. - box := self alignRectangle: (aPolygon encompassingRectangle). - svgE := RTSVGPolygon new - element: aPolygon - box: box - color: fillColor - borderWidth: 1 - borderColor: borderColor. - svgE addOn: stream using: self. -] - -{ #category : #visitor } -RTSVGVisitor >> visitRotatedLabelShape: aRotatedLabel [ - | color rectangle position text angle svgE| - color := aRotatedLabel color. - rectangle := aRotatedLabel encompassingRectangle. - position := self alignPoint: ((rectangle topLeft x + (rectangle width/4)) @ rectangle center y). - text := aRotatedLabel text. - angle := aRotatedLabel angle. - svgE := RTSVGText new element: aRotatedLabel text: text at: position color: color angle: angle. - svgE addOn: stream using: self. -] - -{ #category : #visitor } -RTSVGVisitor >> visitSVGPath: aSVGPath [ - | borderColor fillColor svgE | - aSVGPath color isNil - ifTrue: [ fillColor := Color r: 0 g: 0 b: 0] - ifFalse: [ fillColor := aSVGPath color]. - aSVGPath strokePaint isNil - ifTrue: [ borderColor := fillColor ] - ifFalse: [ borderColor := aSVGPath strokePaint]. - - svgE := RTSVGPathEntity new - element: aSVGPath - path: aSVGPath pathString - center: (self alignPoint: aSVGPath position) - scale: aSVGPath scale - fillColor: fillColor - borderColor: borderColor - width: 1. - svgE addOn: stream using: self. -] - -{ #category : #visitor } -RTSVGVisitor >> visitShape: aShape [ - aShape accept: self -] diff --git a/src/Roassal2/RTSVGVisitor2Test.class.st b/src/Roassal2/RTSVGVisitor2Test.class.st deleted file mode 100644 index 9b7b578fe..000000000 --- a/src/Roassal2/RTSVGVisitor2Test.class.st +++ /dev/null @@ -1,170 +0,0 @@ -" -I am a simple test class for RTSVGVisitor2 -" -Class { - #name : #RTSVGVisitor2Test, - #superclass : #RTTest, - #instVars : [ - 'visitor' - ], - #category : #'Roassal2-Tests' -} - -{ #category : #running } -RTSVGVisitor2Test >> setUp [ - super setUp. - visitor := RTJavascriptVisitor new. - -] - -{ #category : #tests } -RTSVGVisitor2Test >> testAddInteractions [ - | element | - element := RTBox new borderColor: Color black; elementOn: 1. - element @ RTDraggable. - visitor addInteractions: element. - self assert: visitor stream contents equals: 'ints: [RTDraggable], ' -] - -{ #category : #tests } -RTSVGVisitor2Test >> testAddMatrix [ - | el | - el := RTBox new element. - el translateTo: 0 @ 0.5. - visitor addMatrix: el trachelShape matrix. - self assert: visitor stream contents equals: 'matrix:{shx: 0,shy: 0,sx: 1,sy: 1,x: 0,y: 0.5}}, ' -] - -{ #category : #tests } -RTSVGVisitor2Test >> testAddPopup [ - | element background | - element := RTBox new borderColor: Color black; elementOn: 1. - element @ (RTPopup new group: [ :group :el | - el model timesRepeat: [ - group add: (RTBox new size: 10; color: Color blue) element ]. - RTGridLayout on: group. - background := (RTBox new color: (Color black)) element. - RTNest new centerOn: background elements: group. - group add: background. ]). - visitor addInteractions: element. - self assert: visitor stream contents equals: 'ints: [new RTPopup([ - {type: "box", id: "0", w: 10, h: 10, color: {r:0,g:0,b:255}, ints: [], matrix:{shx: 0,shy: 0,sx: 1,sy: 1,x: 0,y: 0}}, - {type: "box", id: "1", w: 20, h: 20, color: {r:0,g:0,b:0}, ints: [], matrix:{shx: 0,shy: 0,sx: 1,sy: 1,x: 0,y: 0}}, ]) ], ' -] - -{ #category : #tests } -RTSVGVisitor2Test >> testBasic [ - | size | - self assert: visitor view isNil. - self assert: visitor stream contents isEmpty. - self assert: visitor validInteractions isNotEmpty. - visitor view: RTView new. - self deny: visitor view isNil. - visitor visitView: visitor view. - size := visitor stream contents size. - self assert: visitor stream contents isNotEmpty. - visitor visitNoShape: nil. - self assert: size equals: visitor stream contents size. - -] - -{ #category : #tests } -RTSVGVisitor2Test >> testBorderWidth [ - | el | - el := RTBox new borderColor: Color black; element. - visitor addBorderWidth: el trachelShape. - self assert: visitor stream contents equals: 'sw: 1,'. -] - -{ #category : #tests } -RTSVGVisitor2Test >> testVisitArcShape [ - | el | - el := (RTArc new betaAngle: 0; innerRadius: 30; externalRadius: 30) element. - visitor visitElement: el. - self assert: visitor stream contents equals: ' - {type: "arc", id: "0", ir: 30, er: 30, aAngle: 0, bAngle: 0, o: {x: 30, y: 0}, c: {x: 30, y: 0},color: {r:223,g:223,b:223}, matrix:{shx: 0,shy: 0,sx: 1,sy: 1,x: 0,y: 0}}, ' -] - -{ #category : #tests } -RTSVGVisitor2Test >> testVisitArrowShape [ - | shape box e1 e2 view | - view := RTView new. - box := RTBox new. - e1 := box element. - e2 := box element. - shape := RTArrowedLine edgeFrom: e1 to: e2. - view add: e1; add: e2; add: shape. - view canvas color: Color white. - visitor visitView: view. - self assert: visitor stream contents equals:'mamani.color({r:255,g:255,b:255}); - mamani.camera.setScale(1.0001); - var shapes = [ - {type: "box", id: "0", w: 5, h: 5, color: {r:223,g:223,b:223}, ints: [], matrix:{shx: 0,shy: 0,sx: 1,sy: 1,x: 0,y: 0}}, - {type: "box", id: "1", w: 5, h: 5, color: {r:223,g:223,b:223}, ints: [], matrix:{shx: 0,shy: 0,sx: 1,sy: 1,x: 0,y: 0}}, - {id: "2", type:"multi", shapes:[ - {type: "line", id: "3",fromid:''0'',toid:''1'',color: {r:223,g:223,b:223}, width: 1,ap: new RTCenteredAttachPoint(false)}, - {type: "simplearrow", id: "4", fromid: ''0'', toid: ''1'',color: {r:223,g:223,b:223}, width: 1, size: 10, percentage: 1,ap: new RTCenteredAttachPoint(false), base: 10},], offsets: [{x: 0, y: 0},{x: 0, y: 0},]}, - ]; - mamani.addShapes(shapes); -' -] - -{ #category : #tests } -RTSVGVisitor2Test >> testVisitBoxShape [ - | box | - box := RTBox new size: 1/2; elementOn: 'foo'. - visitor visitElement: box. - self assert: visitor stream contents equals: ' - {type: "box", id: "0", w: 0.5, h: 0.5, color: {r:223,g:223,b:223}, matrix:{shx: 0,shy: 0,sx: 1,sy: 1,x: 0,y: 0}}, ' -] - -{ #category : #tests } -RTSVGVisitor2Test >> testVisitEllipseShape [ - | ellipse | - ellipse := RTEllipse new size: 1/2; elementOn: 'foo'. - visitor visitElement: ellipse. - self assert: visitor stream contents equals:' - {type: "ellipse", id: "0", rx: 0.25, ry: 0.25,color: {r:223,g:223,b:223}, matrix:{shx: 0,shy: 0,sx: 1,sy: 1,x: 0,y: 0}}, ' -] - -{ #category : #tests } -RTSVGVisitor2Test >> testVisitGroup [ - | group | - group := RTGroup new. - group add: RTBox element. - visitor visitGroup: group. - self assert: visitor stream contents equals: ' - {type: "box", id: "0", w: 5, h: 5, color: {r:223,g:223,b:223}, matrix:{shx: 0,shy: 0,sx: 1,sy: 1,x: 0,y: 0}}, ' -] - -{ #category : #tests } -RTSVGVisitor2Test >> testVisitLineShape [ - | shape box e1 e2 | - box := RTBox new. - e1 := box element. - e2 := box element. - shape := RTLine edgeFrom: e1 to: e2. - visitor visitEdge: shape. - self assert: visitor stream contents equals: ' - {type: "line", id: "0", fromid: {x:0,y:0},toid:{x:0,y:0},color: {r:223,g:223,b:223}, width: 1,ap:RTCenteredAttachPoint},' -] - -{ #category : #tests } -RTSVGVisitor2Test >> testVisitPolygonShape [ - | shape | - shape := RTPolygon new - vertices: (Array with: 0@0 with: 1@0 with: 1@1); elementOn: 'foo'. - visitor visitElement: shape. - self assert: visitor stream contents equals: ' - {type: "polygon", id: "0", o: {x: 0, y: 0}, c: {x: 1, y: 1}, p: "0,0 1,0 1,1 ",color: {r:223,g:223,b:223}, matrix:{shx: 0,shy: 0,sx: 1,sy: 1,x: 0,y: 0}}, ' -] - -{ #category : #tests } -RTSVGVisitor2Test >> testVisitSVGPath [ - | shape | - shape := RTSVGPath new path:'M 100 100 L 300 100 L 200 300 z'; element. - - visitor visitElement: shape. - self assert: visitor stream contents equals: ' - {type: "path", id: "0", d:"M 100 100 L 300 100 L 200 300 z", o: {x: 100, y: 100}, c: {x: 300, y: 300},bordercolor: {r: 0, g: 0, b:0}, sw: 1,color: {r:0,g:0,b:0,a:0}, matrix:{shx: 0,shy: 0,sx: 1,sy: 1,x: 0,y: 0}}, ' -] diff --git a/src/Roassal2/RTSamplingGrapher.class.st b/src/Roassal2/RTSamplingGrapher.class.st deleted file mode 100644 index f86d92046..000000000 --- a/src/Roassal2/RTSamplingGrapher.class.st +++ /dev/null @@ -1,8 +0,0 @@ -Class { - #name : #RTSamplingGrapher, - #superclass : #RTObject, - #instVars : [ - 'threshold' - ], - #category : #'Roassal2-Builder-Grapher-Core' -} diff --git a/src/Roassal2/RTSankeyAttachPoint.class.st b/src/Roassal2/RTSankeyAttachPoint.class.st deleted file mode 100644 index fe0ce7953..000000000 --- a/src/Roassal2/RTSankeyAttachPoint.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #RTSankeyAttachPoint, - #superclass : #RTAttachPoint, - #category : #'Roassal2-Experimental' -} - -{ #category : #'public - hooks' } -RTSankeyAttachPoint >> basicEndingPointOf: anEdge [ - | ty x y | - ty := self for: anEdge get: #ty. - x := anEdge to position x. - y := anEdge to position y + ty + ((self for: anEdge get: #dy)/2) - ((self for: anEdge to get: #dy)/2). - ^ x@y -] - -{ #category : #'public - hooks' } -RTSankeyAttachPoint >> basicStartingPointOf: anEdge [ - | sy x y | - sy := self for: anEdge get: #sy. - x := anEdge from position x+ (self for: anEdge from get: #dx). - y := anEdge from position y + sy + ((self for: anEdge get: #dy)/2) - ((self for: anEdge from get: #dy)/2). - ^ x@y -] - -{ #category : #'public - hooks' } -RTSankeyAttachPoint >> for: e get: k [ - ^ e attributes at: k ifAbsent: [ 0 ]. -] diff --git a/src/Roassal2/RTSankeyBuilder.class.st b/src/Roassal2/RTSankeyBuilder.class.st deleted file mode 100644 index 7be28315a..000000000 --- a/src/Roassal2/RTSankeyBuilder.class.st +++ /dev/null @@ -1,372 +0,0 @@ -" -I am a experimental class to have a sankey visualization -more info in this link -http://en.wikipedia.org/wiki/Sankey_diagram -" -Class { - #name : #RTSankeyBuilder, - #superclass : #RTBuilder, - #instVars : [ - 'extent', - 'nodePadding', - 'elements', - 'links', - 'linkFrom', - 'linkTo', - 'lineShape', - 'linkValue', - 'edges', - 'interactionEdge', - 'iterations', - 'labelShape', - 'labelInteraction', - 'lelements' - ], - #category : #'Roassal2-Experimental' -} - -{ #category : #private } -RTSankeyBuilder >> centerOf: el [ - ^ (el attributes at: #y) + ((el attributes at: #dy) /2 ) -] - -{ #category : #private } -RTSankeyBuilder >> computeEdges [ - links ifNil: [ ^ self ]. - elements do: [ :e | - e attributes - at: #sourceLinks put: OrderedCollection new; - at: #targetLinks put: OrderedCollection new ]. - - edges := links collect: [ :l | | e1 e2 edge| - e1 := elements elementFromModel: (linkFrom value: l). - e2 := elements elementFromModel: (linkTo value: l). - edge := lineShape edgeFrom: e1 to: e2. - interactionEdge setUpElement: edge. - edge attributes at: #value put: (linkValue rtValue: l). - (e1 attributes at: #sourceLinks) add: edge. - (e2 attributes at: #targetLinks) add: edge. - view add: edge. - edge ]. - edges do: #pushBack. - -] - -{ #category : #private } -RTSankeyBuilder >> computeEdgesDepths [ - elements do: [ :el | - "(el model at: #name) = 'Thermal generation' ifTrue: [ self halt. ]." - (el attributes at: #sourceLinks) sort: [:a :b | - (a to attributes at: #y) < (b from attributes at: #y) ]. - (el attributes at: #targetLinks) sort: [ :a :b | - (a from attributes at: #y) < (b to attributes at: #y) ]. - ]. - elements do: [ :el | | sy ty| - sy := ty := 0. - (el attributes at: #sourceLinks) do: [ :ed | - ed attributes at: #sy put: sy. - sy := sy + (ed attributes at: #dy) ]. - (el attributes at: #targetLinks) do: [ :ed | - ed attributes at: #ty put: ty. - ty := ty + (ed attributes at: #dy) ]. - ]. -] - -{ #category : #private } -RTSankeyBuilder >> computeElementBreadths [ - "Iterative assig the breadth (x-position) for each node" - | remainingElements nextElements x kx | - x := 0. - remainingElements := elements. - [remainingElements size isZero not] whileTrue: [ - nextElements := OrderedCollection new. - remainingElements do: [ :el| - el attributes at: #x put: x. - (el attributes at: #sourceLinks) do: [:ed | - nextElements add: ed to. ] ]. - remainingElements := nextElements. - x := x+1. - ]. - "move sinks right and scale" - kx := extent x/ (x -1). - elements do:[ :el| | temp | - (el attributes at: #sourceLinks) size isZero ifTrue: [ - el attributes at: #x put: x -1 ]. - temp := el attributes at: #x. - el attributes at: #x put: (temp * kx) asFloat. - ]. - -] - -{ #category : #private } -RTSankeyBuilder >> computeElementDepths [ - | elementsByBreadth alpha | - elementsByBreadth := elements groupedBy: [ :e | e attributes at: #x ]. - elementsByBreadth := elementsByBreadth keysSortedSafely - collect: [:k | elementsByBreadth at: k ]. - elementsByBreadth ifEmpty: [ ^ self ]. - elementsByBreadth last do: [ :e | - e attributes at: #last put: true ]. - self initializeElementsDepth: elementsByBreadth. - self resolveCollisions: elementsByBreadth. - alpha := 1. - 1 to: iterations do: [ :i | - self relaxRightToLeft: (alpha := alpha *0.99) elements: elementsByBreadth. - self resolveCollisions: elementsByBreadth. - self relaxLeftToRight: alpha elements: elementsByBreadth. - self resolveCollisions: elementsByBreadth.] - - -] - -{ #category : #private } -RTSankeyBuilder >> computeElementsValues [ - elements do: [ :el | | slinks tlinks sum | - slinks := el attributes at: #sourceLinks. - tlinks := el attributes at: #targetLinks. - sum := [ :arr | arr inject: 0 into: [ :s :e | (e attributes at: #value) + s] ]. - el attributes - at: #value put: ((sum value: slinks) max: (sum value: tlinks)). - ]. -] - -{ #category : #private } -RTSankeyBuilder >> computeSankey [ - - self computeEdges; - computeElementsValues; - computeElementBreadths; - computeElementDepths; - computeEdgesDepths. -] - -{ #category : #hooks } -RTSankeyBuilder >> createView [ - ^ super createView @ RTDraggableView @ RTZoomableView. -] - -{ #category : #initialization } -RTSankeyBuilder >> defaultLine [ - | bezier points | - "TODO, we need to create a RTBezier4Line" - bezier := RTBezier4Line new. - bezier attachPoint: RTSankeyAttachPoint new. - lineShape shape: bezier. - points := [ :e | | x y1 y2 | - x := (e from position x + e to position x) / 2. - y1 := e from position y + (e attributes at: #sy) + ((e attributes at: #dy)/2) - ((e from attributes at: #dy)/2). - y2 := e to position y + (e attributes at: #ty) + ((e attributes at: #dy)/2) - ((e to attributes at: #dy)/2). - Array with: x@y1 with: x @ y2 ]. - bezier widthElement: [ :e | - (e attributes at: #dy ifAbsent: [1]) max: 1 ]; - controllingElements: [ :e | - (e attributes includesKey: #dy) - ifTrue: [ points value: e ] - ifFalse: [ Array with: 0@0 with: 0@0 ] ]. - -] - -{ #category : #accessing } -RTSankeyBuilder >> extent [ - ^ extent -] - -{ #category : #accessing } -RTSankeyBuilder >> extent: aPoint [ - extent := aPoint -] - -{ #category : #initialization } -RTSankeyBuilder >> initialize [ - super initialize. - self interaction - when: TRMouseDragging do: [:e| | d | - d := e element view canvas camera distanceFromPixelToSpace: e step. - e element translateBy: 0@d y. - e signalUpdate. - ]. - interactionEdge := RTInteractionBuilder new. - lineShape := RTShapeBuilder new. - self defaultLine. - - labelShape := RTShapeBuilder new. - labelShape withText: ''. - labelInteraction := RTInteractionBuilder new. - - self shape rectangle width: 10. - self extent: 400@300. - self nodePadding: 0. - self linkValue: 1. -] - -{ #category : #private } -RTSankeyBuilder >> initializeElementsDepth: elementsByBreadth [ - | value ky | - value := [ :e | e attributes at: #value ]. - ky := elementsByBreadth inject: Float fmax into: [ :min :arr| - min min: ((extent y - ((arr size - 1) * nodePadding ))/ - (arr inject: 0 into: [ :sum :e| (value value: e)+ sum])) ]. - elementsByBreadth do: [ :arr| - arr doWithIndex: [ :e :i| - e attributes - at: #y put: i - 1; - at: #dy put: (value value: e)*ky ]. - ]. - edges do: [ :e | e attributes at: #dy put: (value value: e)*ky ]. -] - -{ #category : #accessing } -RTSankeyBuilder >> interactionEdge [ - ^ interactionEdge. -] - -{ #category : #accessing } -RTSankeyBuilder >> iterations: aNumber [ - iterations := aNumber -] - -{ #category : #accessing } -RTSankeyBuilder >> labelInteraction [ - ^ labelInteraction -] - -{ #category : #accessing } -RTSankeyBuilder >> labelShape [ - ^ labelShape -] - -{ #category : #accessing } -RTSankeyBuilder >> lineShape [ - ^ lineShape -] - -{ #category : #accessing } -RTSankeyBuilder >> linkFrom: aBlock [ - linkFrom := aBlock -] - -{ #category : #accessing } -RTSankeyBuilder >> linkTo: aBlock [ - linkTo := aBlock -] - -{ #category : #accessing } -RTSankeyBuilder >> linkValue: aBlock [ - linkValue := aBlock -] - -{ #category : #accessing } -RTSankeyBuilder >> links: anArray [ - links := anArray -] - -{ #category : #accessing } -RTSankeyBuilder >> nodePadding [ - ^ nodePadding -] - -{ #category : #accessing } -RTSankeyBuilder >> nodePadding: aNumber [ - nodePadding := aNumber -] - -{ #category : #accessing } -RTSankeyBuilder >> nodes: aCollection [ - elements := self shape elementsOn: aCollection. - lelements := self labelShape elementsOn: aCollection. -] - -{ #category : #private } -RTSankeyBuilder >> relaxLeftToRight: alpha elements: elementsByBreadth [ - | tl weightedSource value y| - value := [ :e | e attributes at: #value ]. - weightedSource := [ :ed | (self centerOf: ed from) * (value value: ed) ]. - elementsByBreadth do: [ :nodes| - nodes do: [ :node | - tl := node attributes at: #targetLinks. - tl ifNotEmpty: [ - y := (tl sum: weightedSource)/ (tl sum: value). - node attributes at: #y put: (node attributes at: #y)+ ((y - (self centerOf: node))*alpha) ] ] ] -] - -{ #category : #private } -RTSankeyBuilder >> relaxRightToLeft: alpha elements: elementsByBreadth [ - | sl y weightedTarget value | - value := [ :e | e attributes at: #value ]. - weightedTarget := [ :ed | (self centerOf: ed to) * (value value: ed) ]. - - elementsByBreadth reversed do: [ :nodes | - nodes do: [ :node | - sl := node attributes at: #sourceLinks. - sl ifNotEmpty: [ - y := (sl sum: weightedTarget)/ (sl sum: value). - node attributes at: #y put: (node attributes at: #y) + ((y - (self centerOf: node)) * alpha) ] ]. - ]. -] - -{ #category : #hooks } -RTSankeyBuilder >> renderIn: aView [ - elements ifNil: [ elements := RTGroup new ]. - self interaction setUpElements: elements. - aView addAll: elements. - self computeSankey. - lelements ifNil: [ lelements := RTGroup new ]. - aView addAll: lelements. - self updateNodes. -] - -{ #category : #private } -RTSankeyBuilder >> resolveCollisions: elementsByBreadth [ - | nodes node dy y0 y i | - y := [ :e | e attributes at: #y ]. - - elementsByBreadth do: [ :els | - y0 := 0. - nodes := els sorted: [ :a :b | (y value: a) < (y value: b) ]. - - nodes do: [ :n | - node := n. - dy := y0 - (y value: node). - dy > 0 ifTrue: [ node attributes at: #y put: (y value: node) + dy ]. - y0 := (y value: node) + nodePadding + (node attributes at: #dy). ]. - "If bottommost node goes outside the bounds push it back up" - dy := y0 - nodePadding - extent y. - dy > 0 ifTrue: [ - y0 := node attributes at: #y put: (y value: node) - dy. - i := nodes size - 1. - [ i >= 1 ] whileTrue: [ - node := nodes at: i. - dy := (y value: node) + (node attributes at: #dy) + nodePadding - y0. - dy > 0 ifTrue: [ node attributes at: #y put: (y value: node) - dy ]. - y0 := y value: node. - i := i -1 ] ] ]. - -] - -{ #category : #public } -RTSankeyBuilder >> updateNodes [ - | att dy x y side | - elements doWithIndex: [ :e :i | | le | - le := lelements at: i. - att := e attributes. - dy := att at: #dy. - x := att at: #x. - y := att at: #y. - - e translateTo: x @ (y+(dy/2)). - e trachelShape height: dy. - side := (att includesKey: #last) - ifTrue: [ #left ] - ifFalse: [ #right ]. - RTConstraint new - fix: e; - movable: le; - outer; - perform: side; - middle; - horizontalPadding: 5; - stick. - ]. - edges ifNil: [ ^ self ]. - edges do: #updateShape -] diff --git a/src/Roassal2/RTSankeyBuilderTest.class.st b/src/Roassal2/RTSankeyBuilderTest.class.st deleted file mode 100644 index 4ac09e597..000000000 --- a/src/Roassal2/RTSankeyBuilderTest.class.st +++ /dev/null @@ -1,57 +0,0 @@ -" -A RTSankeyBuilderTest is a test class for testing the behavior of RTSankeyBuilder -" -Class { - #name : #RTSankeyBuilderTest, - #superclass : #TestCase, - #category : #'Roassal2-Tests' -} - -{ #category : #tests } -RTSankeyBuilderTest >> test01 [ - "basic" - | b | - b := RTSankeyBuilder new. - self assert: b extent equals: 400@300. - self assert: b shape shape class equals: RTBox. - self assert: b nodePadding equals: 0. - - self assert: b interaction numberOfInteractions equals: 1. - self assert: b interactionEdge numberOfInteractions equals: 0. - self assert: b lineShape shape class equals: RTBezier4Line. - - ^ b -] - -{ #category : #tests } -RTSankeyBuilderTest >> test02 [ - "build" - | b | - b := RTSankeyBuilder new. - b build. -] - -{ #category : #tests } -RTSankeyBuilderTest >> test03 [ - "data and build" - | b nodes links | - b := RTSankeyBuilder new. - - nodes := OrderedCollection new - add: 'A'; - add: 'B'; - yourself. - links := OrderedCollection new - add: 'A'->'B'; - yourself. - b - iterations: 32; - nodePadding: 5; - nodes: nodes; - links: links; - linkFrom: #key; - linkTo: #value; - linkValue: 1; - build. - b view -] diff --git a/src/Roassal2/RTScale.class.st b/src/Roassal2/RTScale.class.st deleted file mode 100644 index 507e2a3b3..000000000 --- a/src/Roassal2/RTScale.class.st +++ /dev/null @@ -1,125 +0,0 @@ -" -A class to have nice scales checks subclasses -" -Class { - #name : #RTScale, - #superclass : #RTObject, - #instVars : [ - 'range', - 'domain', - 'interpolate', - 'uninterpolate' - ], - #category : #'Roassal2-Builder-Grapher-Scaling' -} - -{ #category : #'instance creation' } -RTScale class >> category10 [ - ^ self ordinal - range: RTColorInterpolator category10; - yourself -] - -{ #category : #'instance creation' } -RTScale class >> category20 [ - ^ self ordinal - range: RTColorInterpolator category20; - yourself -] - -{ #category : #'instance creation' } -RTScale class >> category20b [ - ^ self ordinal - range: RTColorInterpolator category20b; - yourself -] - -{ #category : #'instance creation' } -RTScale class >> category20c [ - ^ self ordinal - range: RTColorInterpolator category20c; - yourself -] - -{ #category : #'instance creation' } -RTScale class >> linear [ - ^ RTScaleLinear new. -] - -{ #category : #'instance creation' } -RTScale class >> log [ - ^ RTScaleLog new - -] - -{ #category : #'instance creation' } -RTScale class >> ordinal [ - ^ RTScaleOrdinal new -] - -{ #category : #'instance creation' } -RTScale class >> pow [ - ^ RTScalePow new -] - -{ #category : #'instance creation' } -RTScale class >> sqrt [ - ^ self pow - exponent: 0.5; - yourself -] - -{ #category : #accessing } -RTScale >> domain [ - ^ domain -] - -{ #category : #accessing } -RTScale >> domain: anObject [ - domain := anObject -] - -{ #category : #accessing } -RTScale >> interpolate [ - ^ interpolate -] - -{ #category : #accessing } -RTScale >> interpolate: anObject [ - interpolate := anObject -] - -{ #category : #transformations } -RTScale >> invert: anObject [ - self subclassResponsibility -] - -{ #category : #accessing } -RTScale >> range [ - ^ range -] - -{ #category : #accessing } -RTScale >> range: anObject [ - range := anObject -] - -{ #category : #hooks } -RTScale >> rescale [ - self subclassResponsibility -] - -{ #category : #accessing } -RTScale >> scale: anObject [ - self subclassResponsibility -] - -{ #category : #accessing } -RTScale >> uninterpolate [ - ^ uninterpolate -] - -{ #category : #accessing } -RTScale >> uninterpolate: anObject [ - uninterpolate := anObject -] diff --git a/src/Roassal2/RTScaleBilinear.class.st b/src/Roassal2/RTScaleBilinear.class.st deleted file mode 100644 index 1856dc54f..000000000 --- a/src/Roassal2/RTScaleBilinear.class.st +++ /dev/null @@ -1,23 +0,0 @@ -" -I represent a bilinear range for 2 limits, start and end -" -Class { - #name : #RTScaleBilinear, - #superclass : #RTScale, - #instVars : [ - 'u', - 'i' - ], - #category : #'Roassal2-Builder-Grapher-Scaling' -} - -{ #category : #hooks } -RTScaleBilinear >> rescale [ - u := uninterpolate uninterpolate: domain first and: domain second. - i := interpolate interpolate: range first and: range second. -] - -{ #category : #accessing } -RTScaleBilinear >> scale: x [ - ^ i interpolate: (u uninterpolate: x) -] diff --git a/src/Roassal2/RTScaleLinear.class.st b/src/Roassal2/RTScaleLinear.class.st deleted file mode 100644 index 394c30a2e..000000000 --- a/src/Roassal2/RTScaleLinear.class.st +++ /dev/null @@ -1,69 +0,0 @@ -" -I follow the linear function -" -Class { - #name : #RTScaleLinear, - #superclass : #RTScale, - #instVars : [ - 'clamp', - 'output', - 'input' - ], - #category : #'Roassal2-Builder-Grapher-Scaling' -} - -{ #category : #accessing } -RTScaleLinear >> clamp: x [ - "If clamp is specified, enables or disables clamping accordingly. If clamping is disabled and the scale is passed a value outside the domain, the scale may return a value outside the range through extrapolation. If clamping is enabled, the return value of the scale is always within the scale’s range." - clamp := x. - self rescale. -] - -{ #category : #accessing } -RTScaleLinear >> domain: x [ - super domain: x. - self rescale. -] - -{ #category : #initialization } -RTScaleLinear >> initialize [ - super initialize. - domain := #(0 1). - range := #(0 1). - clamp := false. - interpolate := RTInterpolator. - self rescale. -] - -{ #category : #transformations } -RTScaleLinear >> invert: y [ - ^ input scale: y -] - -{ #category : #accessing } -RTScaleLinear >> range: r [ - super range: r. - self rescale. -] - -{ #category : #hooks } -RTScaleLinear >> rescale [ - | linear | - linear := (domain size min: range size ) > 2 - ifTrue: [ RTScalePolylinear ] - ifFalse: [ RTScaleBilinear ]. - uninterpolate := clamp - ifTrue: [ RTUninterpolateClamp ] - ifFalse: [ RTUninterpolateNumber ]. - output := linear new domain: domain; range: range; - uninterpolate: uninterpolate; interpolate: interpolate. - output rescale. - input := linear new domain: range; range: domain; - uninterpolate: uninterpolate; interpolate: RTInterpolator. - input rescale. -] - -{ #category : #accessing } -RTScaleLinear >> scale: x [ - ^ output scale: x. -] diff --git a/src/Roassal2/RTScaleLog.class.st b/src/Roassal2/RTScaleLog.class.st deleted file mode 100644 index 3e8708972..000000000 --- a/src/Roassal2/RTScaleLog.class.st +++ /dev/null @@ -1,93 +0,0 @@ -" -for scale log -" -Class { - #name : #RTScaleLog, - #superclass : #RTScaleLinear, - #instVars : [ - 'linear', - 'base', - 'positive' - ], - #category : #'Roassal2-Builder-Grapher-Scaling' -} - -{ #category : #accessing } -RTScaleLog >> base [ - ^ base -] - -{ #category : #accessing } -RTScaleLog >> base: number [ - base := number. - linear domain: (domain collect: [:n | self lg: n ]). -] - -{ #category : #accessing } -RTScaleLog >> clamp: x [ - linear clamp: x -] - -{ #category : #accessing } -RTScaleLog >> domain: arr [ - positive := arr first >= 0. - domain := arr. - linear domain: (arr collect: [:n | self lg: n]). -] - -{ #category : #initialization } -RTScaleLog >> initialize [ - super initialize. - linear := self class linear. - base := 10. - positive := true. - domain := #(1 10). -] - -{ #category : #accessing } -RTScaleLog >> interpolate [ - ^ linear interpolate -] - -{ #category : #accessing } -RTScaleLog >> interpolate: x [ - linear interpolate: x -] - -{ #category : #transformations } -RTScaleLog >> invert: x [ - ^ self pow: (linear invert: x). -] - -{ #category : #'math functions' } -RTScaleLog >> lg: x [ - "logarithm" - ^ (positive - ifTrue: [ (x max: 0) ln ] - ifFalse: [ (x > 0 ifTrue: [ 0 ] ifFalse: [ 0 - x ] ) ln negated ]) - / (base ln). - -] - -{ #category : #'math functions' } -RTScaleLog >> pow: x [ - ^ positive - ifTrue: [ base raisedTo: x ] - ifFalse: [ (base raisedTo: x negated) negated ]. - -] - -{ #category : #accessing } -RTScaleLog >> range [ - ^ linear range -] - -{ #category : #accessing } -RTScaleLog >> range: x [ - linear range: x -] - -{ #category : #accessing } -RTScaleLog >> scale: x [ - ^ linear scale: (self lg: x) -] diff --git a/src/Roassal2/RTScaleOrdinal.class.st b/src/Roassal2/RTScaleOrdinal.class.st deleted file mode 100644 index 7ece94e2f..000000000 --- a/src/Roassal2/RTScaleOrdinal.class.st +++ /dev/null @@ -1,189 +0,0 @@ -" -I am a scale for ordinal ranges -" -Class { - #name : #RTScaleOrdinal, - #superclass : #RTScale, - #instVars : [ - 'dictionary', - 'ranger', - 'argument', - 'rangeBand' - ], - #category : #'Roassal2-Builder-Grapher-Scaling' -} - -{ #category : #accessing } -RTScaleOrdinal >> domain: arr [ - domain := OrderedCollection new. - dictionary := Dictionary new. - arr do: [ :xi | - (dictionary includes: xi) ifFalse: [ - domain add: xi. - dictionary at: xi put: domain size ] ]. - self perform: ranger withArguments: argument -] - -{ #category : #initialization } -RTScaleOrdinal >> initialize [ - super initialize. - ranger := #range:. - argument := #( #() ). - self domain: #(). - - -] - -{ #category : #accessing } -RTScaleOrdinal >> range: x [ - range := x. - rangeBand := 0. - ranger := #range:. - argument := Array with: x. -] - -{ #category : #accessing } -RTScaleOrdinal >> rangeBand [ - ^ rangeBand -] - -{ #category : #public } -RTScaleOrdinal >> rangeBands: x [ - self rangeBands: x padding: 0 -] - -{ #category : #public } -RTScaleOrdinal >> rangeBands: x padding: padding [ - self rangeBands: x padding: padding outerPadding: padding -] - -{ #category : #public } -RTScaleOrdinal >> rangeBands: x padding: padding outerPadding: outerPadding [ - | start stop step reverse | - start := x first. - stop := x second. - reverse := false. - start > stop ifTrue: [| t | - t := start. start := stop. stop := t. - reverse := true. ]. - step := (stop - start) / (domain size - padding + (2*outerPadding)). - - range := self - steps: start + (step * outerPadding) - and: step. - reverse ifTrue: [ range := range reverse ]. - rangeBand := step * (1 - padding). - ranger := #rangeBands:padding:outerPadding:. - argument := Array with: x with: padding with: outerPadding -] - -{ #category : #accessing } -RTScaleOrdinal >> rangeExtent [ - ^ self scaleExtent: argument first -] - -{ #category : #public } -RTScaleOrdinal >> rangePoints: x [ - self rangePoints: x padding: 0 -] - -{ #category : #public } -RTScaleOrdinal >> rangePoints: x padding: padding [ - | start stop step | - start := x first. - stop := x second. - step := domain size < 2 - ifTrue: [ start := (start + stop)/2. 0 ] - ifFalse: [ (stop - start)/(domain size - 1 + padding) ]. - range := self - steps: start + (step * padding / 2) - and: step. - rangeBand := 0. - - ranger := #rangePoints:padding:. - argument := Array with: x with: padding -] - -{ #category : #public } -RTScaleOrdinal >> rangeRoundBands: x [ - self rangeRoundBands: x padding: 0 -] - -{ #category : #public } -RTScaleOrdinal >> rangeRoundBands: x padding: padding [ - self rangeRoundBands: x padding: padding outerPadding: padding -] - -{ #category : #public } -RTScaleOrdinal >> rangeRoundBands: x padding: padding outerPadding: outerPadding [ - | start stop step reverse | - start := x first. - stop := x second. - reverse := false. - start > stop ifTrue: [| t | - t := start. start := stop. stop := t. - reverse := true. ]. - step := ((stop - start) / (domain size - padding + (2*outerPadding))) floor. - - range := self - steps: start + ( (stop - start - ((domain size - padding) * step) ) / 2 ) rounded - and: step. - reverse ifTrue: [ range := range reverse ]. - rangeBand := (step * (1 - padding)) rounded. - ranger := #rangeRoundBands:padding:outerPadding:. - argument := Array with: x with: padding with: outerPadding -] - -{ #category : #public } -RTScaleOrdinal >> rangeRoundPoints: x [ - self rangeRoundPoints: x padding: 0 -] - -{ #category : #public } -RTScaleOrdinal >> rangeRoundPoints: x padding: padding [ - | start stop step | - start := x first. - stop := x second. - step := domain size < 2 - ifTrue: [ start := stop := ((start + stop)/2) rounded. 0 ] - ifFalse: [[ (stop - start)/(domain size -1 + padding)] - on: Error do: [ :ex | 0 ] ]. - - range := self - steps: start + ((step * padding / 2) + (stop - start - - ((domain size - 1 + padding)* step) )/ 2) rounded - and: step. - rangeBand := 0. - ranger := #rangeRoundPoints:padding:. - argument := Array with: x with: padding -] - -{ #category : #accessing } -RTScaleOrdinal >> scale: x [ - | index | - index := dictionary at: x ifAbsent: [ nil ]. - (index isNil and: [ ranger = #range:]) ifTrue: [ - domain add: x. - dictionary at: x put: (index := domain size). - ]. - index ifNil: [ self error: 'invalid input' ]. - index := index % range size. - index isZero - ifTrue: [ index := range size ]. - ^ range at: index -] - -{ #category : #helpers } -RTScaleOrdinal >> scaleExtent: d [ - | start stop | - start := d first. - stop := d last. - ^ start < stop - ifTrue: [ Array with: start with: stop ] - ifFalse: [ Array with: stop with: start ] -] - -{ #category : #helpers } -RTScaleOrdinal >> steps: start and: step [ - ^ (0 to: domain size - 1) collect: [ :i | (start + (step * i)) asFloat ]. -] diff --git a/src/Roassal2/RTScalePolylinear.class.st b/src/Roassal2/RTScalePolylinear.class.st deleted file mode 100644 index 1fe662390..000000000 --- a/src/Roassal2/RTScalePolylinear.class.st +++ /dev/null @@ -1,51 +0,0 @@ -" -I can handle a several kind of values -" -Class { - #name : #RTScalePolylinear, - #superclass : #RTScale, - #instVars : [ - 'k', - 'u', - 'i' - ], - #category : #'Roassal2-Builder-Grapher-Scaling' -} - -{ #category : #private } -RTScalePolylinear >> findJ: x [ - | lo hi mid | - lo := 2. - hi := k. - [ lo < hi ] whileTrue: [ - mid := ((lo + hi) / 2) asInteger. - (domain at: mid) > x - ifTrue: [ hi := mid ] - ifFalse: [ lo := mid + 1 ] ]. - ^ lo - 1 -] - -{ #category : #hooks } -RTScalePolylinear >> rescale [ - u := OrderedCollection new. - i := OrderedCollection new. - k := domain size min: range size. - (domain at: k) < domain first ifTrue: [ - domain := domain reverse. - range := range reverse ]. - - 2 to: k do: [ :j | - u add: (uninterpolate uninterpolate: (domain at: j -1 ) and: (domain at: j)). - i add: (interpolate interpolate: (range at: j -1) and: (range at: j) ) - ]. - - -] - -{ #category : #accessing } -RTScalePolylinear >> scale: x [ - | j | - j := self findJ: x. - ^ (i at: j) interpolate: ((u at: j) uninterpolate: x) - -] diff --git a/src/Roassal2/RTScalePow.class.st b/src/Roassal2/RTScalePow.class.st deleted file mode 100644 index fd22710e8..000000000 --- a/src/Roassal2/RTScalePow.class.st +++ /dev/null @@ -1,81 +0,0 @@ -" -I scale using pow function -" -Class { - #name : #RTScalePow, - #superclass : #RTScaleLinear, - #instVars : [ - 'exponent', - 'powp', - 'powb', - 'linear' - ], - #category : #'Roassal2-Builder-Grapher-Scaling' -} - -{ #category : #accessing } -RTScalePow >> clamp: x [ - linear clamp: x -] - -{ #category : #accessing } -RTScalePow >> domain: x [ - linear domain: ((domain := x) collect: [ :i | powp scale: i ]). -] - -{ #category : #accessing } -RTScalePow >> exponent [ - ^ exponent -] - -{ #category : #accessing } -RTScalePow >> exponent: x [ - exponent := x. - powp exponent: exponent. - powb exponent: 1/exponent. - linear domain: (domain collect: [ :i | powp scale: i ]) -] - -{ #category : #initialization } -RTScalePow >> initialize [ - super initialize. - linear := self class linear. - exponent := 1. - domain := #(0 1). - powp := RTScalePowPow exponent: exponent. - powb := RTScalePowPow exponent: 1 / exponent. -] - -{ #category : #accessing } -RTScalePow >> interpolate [ - ^ linear interpolate -] - -{ #category : #accessing } -RTScalePow >> interpolate: x [ - linear interpolate: x -] - -{ #category : #transformations } -RTScalePow >> invert: x [ - ^ powb scale: (linear invert: x) -] - -{ #category : #accessing } -RTScalePow >> range [ - ^ linear range -] - -{ #category : #accessing } -RTScalePow >> range: x [ - linear range: x -] - -{ #category : #hooks } -RTScalePow >> rescale [ -] - -{ #category : #accessing } -RTScalePow >> scale: x [ - ^ linear scale: (powp scale: x) -] diff --git a/src/Roassal2/RTScalePowPow.class.st b/src/Roassal2/RTScalePowPow.class.st deleted file mode 100644 index 64eb6a8a0..000000000 --- a/src/Roassal2/RTScalePowPow.class.st +++ /dev/null @@ -1,35 +0,0 @@ -" -I am a utility clas for RTScalePow -" -Class { - #name : #RTScalePowPow, - #superclass : #RTObject, - #instVars : [ - 'exponent' - ], - #category : #'Roassal2-Builder-Grapher-Scaling' -} - -{ #category : #'instance creation' } -RTScalePowPow class >> exponent: exponent [ - ^ self new - exponent: exponent; - yourself -] - -{ #category : #accessing } -RTScalePowPow >> exponent [ - ^ exponent -] - -{ #category : #accessing } -RTScalePowPow >> exponent: aNumber [ - exponent := aNumber -] - -{ #category : #transformations } -RTScalePowPow >> scale: x [ - ^ x < 0 - ifTrue: [ (x negated raisedTo: exponent) negated ] - ifFalse: [ x raisedTo: exponent ] -] diff --git a/src/Roassal2/RTScaleTest.class.st b/src/Roassal2/RTScaleTest.class.st deleted file mode 100644 index f7e0ee832..000000000 --- a/src/Roassal2/RTScaleTest.class.st +++ /dev/null @@ -1,79 +0,0 @@ -Class { - #name : #RTScaleTest, - #superclass : #RTTest, - #category : #'Roassal2-Builder-Grapher-Scaling-Tests' -} - -{ #category : #tests } -RTScaleTest >> testLinearScale [ - - | s | - s := RTScale linear - domain: #(0 100); - range: #(5 10). - self assert: (s scale: 50) equals: 15 / 2. - self assert: (s scale: 0) equals: 5. - self assert: (s scale: 100) equals: 10. -] - -{ #category : #tests } -RTScaleTest >> testLinearScaleWithColors [ - - | s | - s := RTScale linear - domain: #(0 100); - range: (Array with: Color white with: Color black). - self assert: (s scale: 50) equals: Color gray. - self assert: (s scale: 0) equals: Color white. - self assert: (s scale: 100) equals: Color black. -] - -{ #category : #tests } -RTScaleTest >> testLinearScaleWithNegative [ - - | s | - s := RTScale linear - domain: #(0 100); - range: #(-10 -5). - self assert: (s scale: 50) equals: -15 / 2. - self assert: (s scale: 0) equals: -10. - self assert: (s scale: 100) equals: -5. -] - -{ #category : #tests } -RTScaleTest >> testLogarithmScale [ - - | s | - s := RTScale log - base: Float e; - domain: (#(0 9) collect: #exp); - range: #(200 0). - self assert: ((s scale: 50) closeTo: 113.06615543493011). - self assert: ((s scale: 0.01) closeTo: 302.3371152441798). - self assert: ((s scale: 100) closeTo: 97.66288475582019). - - self assert: ((s invert: 10) closeTo: 5166.754427175983) -] - -{ #category : #tests } -RTScaleTest >> testScalePolyLinear [ - | linear | - linear := RTScale linear - domain: #(0 0.5 1); - range: #(10 80 10). - self - assert: (linear scale: 0) equals: 10; - assert: (linear scale: 0.5) equals: 80; - assert: (linear scale: 1) equals: 10; - assert: (linear scale: 1.5) equals: -60. - linear := RTScale linear - domain: #(0 0.5 1); - range: #('white' 'black' 'white'). - self - assert: (linear scale: 0) equals: Color white; - assert: (linear scale: 0.25) equals: Color gray; - assert: (linear scale: 0.75) equals: Color gray. - - - -] diff --git a/src/Roassal2/RTScaleTransformation.class.st b/src/Roassal2/RTScaleTransformation.class.st deleted file mode 100644 index 834e7eab3..000000000 --- a/src/Roassal2/RTScaleTransformation.class.st +++ /dev/null @@ -1,29 +0,0 @@ -Class { - #name : #RTScaleTransformation, - #superclass : #RTObject, - #classInstVars : [ - 'instance' - ], - #category : #'Roassal2-Builder-Grapher-Scaling' -} - -{ #category : #'as yet unclassified' } -RTScaleTransformation class >> instance [ - instance ifNil: [ instance := self new ]. - ^ instance -] - -{ #category : #hooks } -RTScaleTransformation >> invTrans: value [ - self subclassResponsibility -] - -{ #category : #'as yet unclassified' } -RTScaleTransformation >> rtValue: aValue [ - ^ self trans: aValue -] - -{ #category : #hooks } -RTScaleTransformation >> trans: value [ - self subclassResponsibility -] diff --git a/src/Roassal2/RTScatterplotMap.class.st b/src/Roassal2/RTScatterplotMap.class.st deleted file mode 100644 index 396664ab6..000000000 --- a/src/Roassal2/RTScatterplotMap.class.st +++ /dev/null @@ -1,246 +0,0 @@ -Class { - #name : #RTScatterplotMap, - #superclass : #RTBuilder, - #category : #'Roassal2-Builder-ScatterplotMap' -} - -{ #category : #'as yet unclassified' } -RTScatterplotMap >> allData [ - ^ 'http://www.gaslampmedia.com/wp-content/uploads/2013/08/zip_codes_states.csv' asZnUrl retrieveContents -] - -{ #category : #'as yet unclassified' } -RTScatterplotMap >> allLocalData [ - ^ '/Users/alexandrebergel/Desktop/zip_codes_states.csv' asFileReference contents -] - -{ #category : #'as yet unclassified' } -RTScatterplotMap >> convert: lat with: lon [ - " - self new convert: 55 with: -143 - " - | phi0 lambda0 phi1 phi2 phi lambda n theta c rho rho0 x y | - phi0 := 0. - lambda0 := -96 degreesToRadians. - phi1 := 29.5 degreesToRadians. - phi2 := 45.5 degreesToRadians. - - phi := lat degreesToRadians. - lambda := lon degreesToRadians. - - n := 0.5 * (phi1 sin + phi2 sin). - theta := n * (lambda - lambda0). - c := phi1 cos + (2 * n * phi1 sin). - c := c * c. - rho := (c - (2 * n * phi sin)) sqrt / n. - rho0 := (c - (2 * n * phi0 sin)) sqrt / n. - - x := rho * theta sin. - y := rho0 - (rho * theta cos). - - ^ x @ y -] - -{ #category : #'as yet unclassified' } -RTScatterplotMap >> run [ - " - RTScatterplotMap new run - " - | tab allLonLat v shape es | - tab := RTTabTable new input: 'http://www.gaslampmedia.com/wp-content/uploads/2013/08/zip_codes_states.csv' asZnUrl retrieveContents usingDelimiter: $,. - tab removeFirstRow. - tab convertColumns: #(2 3) to: [ :s | | str | - str := s. - (str = '') ifTrue: [ str := '0' ]. - (str beginsWith: '"+' ) ifTrue: [ str := str allButFirst allButFirst allButLast ]. - (str first = $") ifTrue: [ Float readFrom: str allButFirst allButLast ] ifFalse: [ Float readFrom: str ] ]. - allLonLat := tab values collect: [ :row | (row at: 2) @ (row at: 3) ]. - - v := RTView new. - v @ RTDraggableView. - shape := (RTEllipse new size: 2; color: (Color blue alpha: 0.01)). - es := shape elementsOn: allLonLat. - es @ RTPopup. - v addAll: es. - es do: [ :el | - | p | - p := RTScatterplotMap new convert: el model x with: el model y. - el translateTo: (p x * 300) @ (p y negated * 300). - ]. - v canvas camera focusOnCenter. - ^ v -] - -{ #category : #'as yet unclassified' } -RTScatterplotMap >> sample [ - - ^ '"zip_code","latitude","longitude","city","state","county" -"99641",60.314735,"-163.118947","Nunapitchuk","AK","Bethel" -"99643",58.268704,"-155.797078","Old Harbor","AK","Kodiak Island" -"99644",58.268704,"-155.797078","Ouzinkie","AK","Kodiak Island" -"99645",62.257284,"-149.633916","Palmer","AK","Matanuska Susitna" -"99647",58.268704,"-156.648418","Pedro Bay","AK","Lake And Peninsula" -"99648",58.268704,"-156.648418","Perryville","AK","Lake And Peninsula" -"99649",57.528787,"-157.485781","Pilot Point","AK","Lake And Peninsula" -"99650",62.117231,"-163.237636","Pilot Station","AK","Wade Hampton" -"99651",60.314735,"-163.118947","Platinum","AK","Bethel" -"99652",61.523043,"-149.728806","Big Lake","AK","Matanuska Susitna" -"99653",58.268704,"-156.648418","Port Alsworth","AK","Lake And Peninsula" -"99654",61.581305,"-149.374335","Wasilla","AK","Matanuska Susitna" -"99655",60.314735,"-163.118947","Quinhagak","AK","Bethel" -"99656",60.314735,"-163.118947","Red Devil","AK","Bethel" -"99657",62.117231,"-163.237636","Russian Mission","AK","Wade Hampton" -"99658",62.117231,"-163.237636","Saint Marys","AK","Wade Hampton" -"99659",64.755604,"-165.672344","Saint Michael","AK","Nome" -"99660",54.24018,"-176.787412","Saint Paul Island","AK","Aleutians West" -"99661",55.350356,"-160.485506","Sand Point","AK","Aleutians East" -"99662",62.117231,"-163.237636","Scammon Bay","AK","Wade Hampton" -"99663",59.449486,"-151.700915","Seldovia","AK","Kenai Peninsula" -"99664",60.25281,"-149.402123","Seward","AK","Kenai Peninsula" -"99665",65.226375,"-151.025085","Shageluk","AK","Yukon Koyukuk" -"99666",62.117231,"-163.237636","Nunam Iqua","AK","Wade Hampton" -"99667",62.280436,"-149.715167","Skwentna","AK","Matanuska Susitna" -"99668",60.314735,"-163.118947","Sleetmute","AK","Bethel" -"99669",60.110034,"-151.247935","Soldotna","AK","Kenai Peninsula" -"99670",58.745599,"-157.159459","South Naknek","AK","Bristol Bay" -"99671",64.755604,"-165.672344","Stebbins","AK","Nome" -"99672",60.513614,"-150.853238","Sterling","AK","Kenai Peninsula" -"99674",61.732741,"-148.783687","Sutton","AK","Matanuska Susitna" -"99675",65.226375,"-151.025085","Takotna","AK","Yukon Koyukuk" -"99676",62.280436,"-149.715167","Talkeetna","AK","Matanuska Susitna" -"99677",61.470966,"-144.991027","Tatitlek","AK","Valdez Cordova" -"99678",58.962101,"-163.118947","Togiak","AK","Dillingham" -"99679",60.314735,"-163.118947","Tuluksak","AK","Bethel" -"99680",60.314735,"-163.118947","Tuntutuliak","AK","Bethel" -"99681",60.314735,"-163.118947","Tununak","AK","Bethel" -"99682",60.036583,"-151.655567","Tyonek","AK","Kenai Peninsula" -"99683",61.720499,"-150.009239","Trapper Creek","AK","Matanuska Susitna" -"99684",64.755604,"-165.672344","Unalakleet","AK","Nome" -"99685",53.85513,"-166.518069","Unalaska","AK","Aleutians West" -"99686",61.68557,"-145.775152","Valdez","AK","Valdez Cordova" -"99687",61.531298,"-149.478398","Wasilla","AK","Matanuska Susitna" -"99688",61.896608,"-150.003758","Willow","AK","Matanuska Susitna" -"99689",58.331798,"-135.181256","Yakutat","AK","Yakutat" -"99690",60.314735,"-163.118947","Nightmute","AK","Bethel" -"99691",65.226375,"-151.025085","Nikolai","AK","Yukon Koyukuk" -"99692",53.865295,"-166.525333","Dutch Harbor","AK","Aleutians West" -"99693",61.470966,"-144.991027","Whittier","AK","Valdez Cordova" -"99694",62.280436,"-149.715167","Houston","AK","Matanuska Susitna" -"99695",61.108864,"-149.440311","Anchorage","AK","Anchorage" -"99697",58.268704,"-155.797078","Kodiak","AK","Kodiak Island" -"99701",64.644047,"-147.522052","Fairbanks","AK","Fairbanks North Star" -"99702",64.790803,"-147.463336","Eielson Afb","AK","Fairbanks North Star" -"99703",64.832821,"-147.644180","Fort Wainwright","AK","Fairbanks North Star" -"99704",63.543571,"-149.986676","Clear","AK","Denali" -"99705",64.780765,"-147.207748","North Pole","AK","Fairbanks North Star" -"99706",64.852055,"-147.937747","Fairbanks","AK","Fairbanks North Star" -"99707",64.699839,"-147.405134","Fairbanks","AK","Fairbanks North Star" -"99708",64.947462,"-147.856443","Fairbanks","AK","Fairbanks North Star" -"99709",64.860126,"-147.999791","Fairbanks","AK","Fairbanks North Star" -"99710",64.948648,"-147.535549","Fairbanks","AK","Fairbanks North Star" -"99711",64.826445,"-147.388840","Fairbanks","AK","Fairbanks North Star" -"99712",65.036453,"-147.156588","Fairbanks","AK","Fairbanks North Star" -"99714",64.489102,"-146.924788","Salcha","AK","Fairbanks North Star" -"99716",64.874591,"-146.898195","Two Rivers","AK","Fairbanks North Star" -"99720",65.226375,"-151.025085","Allakaket","AK","Yukon Koyukuk" -"99721",66.693255,"-153.993988","Anaktuvuk Pass","AK","North Slope" -"99722",65.226375,"-151.025085","Arctic Village","AK","Yukon Koyukuk" -"99723",70.220472,"-150.238942","Barrow","AK","North Slope" -"99724",66.929746,"-149.193010","Beaver","AK","Yukon Koyukuk" -"99725",64.870974,"-148.094930","Ester","AK","Fairbanks North Star" -"99726",65.226375,"-151.025085","Bettles Field","AK","Yukon Koyukuk" -"99727",66.868442,"-159.843924","Buckland","AK","Northwest Arctic" -"99729",63.543571,"-149.986676","Cantwell","AK","Denali" -"99730",65.226375,"-151.025085","Central","AK","Yukon Koyukuk" -"99732",63.870552,"-144.002648","Chicken","AK","Southeast Fairbanks" -"99733",65.226375,"-151.025085","Circle","AK","Yukon Koyukuk" -"99734",66.693255,"-153.993988","Prudhoe Bay","AK","North Slope" -"99736",66.868442,"-159.843924","Deering","AK","Northwest Arctic" -"99737",63.107461,"-143.422478","Delta Junction","AK","Southeast Fairbanks" -"99738",63.870552,"-144.002648","Eagle","AK","Southeast Fairbanks" -"99739",64.755604,"-165.672344","Elim","AK","Nome" -"99740",65.226375,"-151.025085","Fort Yukon","AK","Yukon Koyukuk" -"99741",65.226375,"-151.025085","Galena","AK","Yukon Koyukuk" -"99742",64.755604,"-165.672344","Gambell","AK","Nome" -"99743",63.543571,"-149.986676","Healy","AK","Denali" -"99744",63.543571,"-149.986676","Anderson","AK","Denali" -"99745",65.226375,"-151.025085","Hughes","AK","Yukon Koyukuk" -"99746",65.226375,"-151.025085","Huslia","AK","Yukon Koyukuk" -"99747",66.693255,"-153.993988","Kaktovik","AK","North Slope" -"99748",65.226375,"-151.025085","Kaltag","AK","Yukon Koyukuk" -"99749",66.868442,"-159.843924","Kiana","AK","Northwest Arctic" -"99750",66.868442,"-159.843924","Kivalina","AK","Northwest Arctic" -"99751",66.868442,"-159.843924","Kobuk","AK","Northwest Arctic" -"99752",66.865256,"-161.780844","Kotzebue","AK","Northwest Arctic" -"99753",64.755604,"-165.672344","Koyuk","AK","Nome" -"99754",65.226375,"-151.025085","Koyukuk","AK","Yukon Koyukuk" -"99755",63.543571,"-149.986676","Denali National Park","AK","Denali" -"99756",65.226375,"-151.025085","Manley Hot Springs","AK","Yukon Koyukuk" -"99757",65.226375,"-151.025085","Lake Minchumina","AK","Yukon Koyukuk" -"99758",65.226375,"-151.025085","Minto","AK","Yukon Koyukuk" -"99759",68.887048,"-164.249713","Point Lay","AK","North Slope" -"99760",64.117464,"-153.451125","Nenana","AK","Yukon Koyukuk" -"99761",66.868442,"-159.843924","Noatak","AK","Northwest Arctic" -"99762",63.888671,"-163.800760","Nome","AK","Nome" -"99763",66.868442,"-159.843924","Noorvik","AK","Northwest Arctic" -"99764",63.870552,"-144.002648","Northway","AK","Southeast Fairbanks" -"99765",65.226375,"-151.025085","Nulato","AK","Yukon Koyukuk" -"99766",66.693255,"-153.993988","Point Hope","AK","North Slope" -"99767",65.509038,"-150.161868","Rampart","AK","Yukon Koyukuk" -"99768",65.226375,"-151.025085","Ruby","AK","Yukon Koyukuk" -"99769",64.755604,"-165.672344","Savoonga","AK","Nome" -"99770",66.868442,"-159.843924","Selawik","AK","Northwest Arctic" -"99771",64.755604,"-165.672344","Shaktoolik","AK","Nome" -"99772",64.755604,"-165.672344","Shishmaref","AK","Nome" -"99773",66.868442,"-159.843924","Shungnak","AK","Northwest Arctic" -"99774",65.226375,"-151.025085","Stevens Village","AK","Yukon Koyukuk" -"99775",64.859078,"-147.826709","Fairbanks","AK","Fairbanks North Star" -"99776",63.870552,"-144.002648","Tanacross","AK","Southeast Fairbanks" -"99777",65.226375,"-151.025085","Tanana","AK","Yukon Koyukuk" -"99778",64.755604,"-165.672344","Teller","AK","Nome" -"99779",63.870552,"-144.002648","Tetlin","AK","Southeast Fairbanks" -"99780",63.870552,"-144.002648","Tok","AK","Southeast Fairbanks" -"99781",65.226375,"-151.025085","Venetie","AK","Yukon Koyukuk" -"99782",66.693255,"-153.993988","Wainwright","AK","North Slope" -"99783",64.755604,"-165.672344","Wales","AK","Nome" -"99784",64.755604,"-165.672344","White Mountain","AK","Nome" -"99785",64.755604,"-165.672344","Brevig Mission","AK","Nome" -"99786",66.868442,"-159.843924","Ambler","AK","Northwest Arctic" -"99788",65.226375,"-151.025085","Chalkyitsik","AK","Yukon Koyukuk" -"99789",66.693255,"-153.993988","Nuiqsut","AK","North Slope" -"99790",64.856055,"-146.275980","Fairbanks","AK","Fairbanks North Star" -"99791",70.494693,"-157.441073","Atqasuk","AK","North Slope" -"99801",58.373561,"-134.523946","Juneau","AK","Juneau" -"99802",58.405657,"-134.589690","Juneau","AK","Juneau" -"99803",58.377074,"-134.617383","Juneau","AK","Juneau" -"99811",58.38348,"-134.197786","Juneau","AK","Juneau" -"99820",57.500525,"-134.585954","Angoon","AK","Skagway Hoonah Angoon" -"99821",58.449413,"-134.700348","Auke Bay","AK","Juneau" -"99824",58.276308,"-134.397642","Douglas","AK","Juneau" -"99825",58.331798,"-135.181256","Elfin Cove","AK","Skagway Hoonah Angoon" -"99826",58.331798,"-135.181256","Gustavus","AK","Skagway Hoonah Angoon" -"99827",59.312688,"-135.681153","Haines","AK","Haines" -"99829",58.097655,"-135.431561","Hoonah","AK","Skagway Hoonah Angoon" -"99830",56.973554,"-133.935996","Kake","AK","Wrangell Petersburg" -"99832",58.331798,"-135.181256","Pelican","AK","Skagway Hoonah Angoon" -"99833",56.767056,"-132.931950","Petersburg","AK","Wrangell Petersburg" -"99835",57.080818,"-135.318348","Sitka","AK","Sitka" -"99836",56.53595,"-132.827948","Port Alexander","AK","Wrangell Petersburg" -"99840",59.456753,"-135.314852","Skagway","AK","Skagway Hoonah Angoon" -"99841",57.798249,"-135.285061","Tenakee Springs","AK","Skagway Hoonah Angoon" -"99850",58.38348,"-134.197786","Juneau","AK","Juneau" -"99901",55.400674,"-131.674090","Ketchikan","AK","Ketchikan Gateway" -"99903",55.517921,"-132.003244","Meyers Chuck","AK","Prince Wales Ketchikan" -"99918",55.517921,"-132.003244","Coffman Cove","AK","Prince Wales Ketchikan" -"99919",55.126774,"-131.580407","Thorne Bay","AK","Prince Wales Ketchikan" -"99921",55.513301,"-133.117022","Craig","AK","Prince Wales Ketchikan" -"99922",55.208706,"-132.825903","Hydaburg","AK","Prince Wales Ketchikan" -"99923",55.517921,"-132.003244","Hyder","AK","Prince Wales Ketchikan" -"99925",55.554393,"-133.090680","Klawock","AK","Prince Wales Ketchikan" -"99926",55.094325,"-131.566827","Metlakatla","AK","Prince Wales Ketchikan" -"99927",55.517921,"-132.003244","Point Baker","AK","Prince Wales Ketchikan" -"99928",55.395359,"-131.675370","Ward Cove","AK","Ketchikan Gateway" -"99929",56.449893,"-132.364407","Wrangell","AK","Wrangell Petersburg" -"99950",55.542007,"-131.432682","Ketchikan","AK","Ketchikan Gateway" -' -] diff --git a/src/Roassal2/RTScatterplotMatrix.class.st b/src/Roassal2/RTScatterplotMatrix.class.st deleted file mode 100644 index 87626c54e..000000000 --- a/src/Roassal2/RTScatterplotMatrix.class.st +++ /dev/null @@ -1,352 +0,0 @@ -" -I am a basic builder to build a matrix of scatterplot with roassal -" -Class { - #name : #RTScatterplotMatrix, - #superclass : #RTAbstractGrapher, - #instVars : [ - 'metrics', - 'objects', - 'xScales', - 'yScales', - 'padding', - 'boxSize', - 'shouldUseAxisForX', - 'shouldUseAxisForY', - 'generator', - 'lineShape', - 'boxShape', - 'allowEvent', - 'boxes', - 'allDotElements', - 'labelShape' - ], - #category : #'Roassal2-Experimental' -} - -{ #category : #helpers } -RTScatterplotMatrix >> addBrushInteractionIfNecessary: aView [ - | int | - self allowSelectableView ifFalse: [ ^ self ]. - int := RTBrushInteraction new. - int elementsToBrush: [ :group | - group flatCollect: [ :e | aView elementsFromModel: e model ] ]. - int domainElements: self allDotElements. - int groups: self boxes. - aView @ int. -] - -{ #category : #accesing } -RTScatterplotMatrix >> allDotElements [ - ^ allDotElements -] - -{ #category : #accesing } -RTScatterplotMatrix >> allowSelectableView [ - ^ allowEvent -] - -{ #category : #accesing } -RTScatterplotMatrix >> allowSelectableView: aBool [ - allowEvent := aBool -] - -{ #category : #accesing } -RTScatterplotMatrix >> boxShape [ - ^ boxShape -] - -{ #category : #accesing } -RTScatterplotMatrix >> boxShape: aShape [ - boxShape := aShape -] - -{ #category : #accesing } -RTScatterplotMatrix >> boxes [ - ^ boxes ifNil: [ boxes := RTGroup new ]. -] - -{ #category : #helpers } -RTScatterplotMatrix >> createAxisIfNecessary: aView [ - self createAxisXIfNecessary: aView. - self createAxisYIfNecessary: aView. - aView edges do: #pushBack -] - -{ #category : #helpers } -RTScatterplotMatrix >> createAxisXIfNecessary: aView [ - | m min max v box line e1 e2 edge axe nticks result delta size scale | - shouldUseAxisForX ifFalse: [ ^ self ]. - m := self metrics. - size := (boxSize*m keys size) + (padding * m keys size) + (boxSize/2)+ (padding/2). - box := RTBox new size: 0. - line := self lineShape. - axe := self axisX. - m keys doWithIndex: [ :m0 :j | - min := Float fmax. - max := Float fmin. - delta := ((boxSize*j) + (padding * j))@0. - - self objects do: [ :o | - v := (m at: m0) rtValue: o. - min := min min: v. - max := max max: v. - ]. - nticks := axe numberOfTicks. - nticks isZero ifTrue: [ nticks := 2 ]. - result := generator searchMin: min max: max desired: axe numberOfTicks. - scale := xScales at: m0. - (result min to: result max by: result step) do: [ :n | - e1 := box element. - e2 := box element. - edge := RTEdge from: e1 to: e2. - edge + line. - v := scale scale: n. - e1 translateTo: v @(boxSize/2). - e2 translateTo: v @size. - e1 translateBy: delta. - e2 translateBy: delta. - view add: e1; add: e2; add: edge ]. - axe minValue: result min; - maxValue: result max; - numberOfTicks: result numberOfTicks; - numberOfLabels: result numberOfTicks; - axisFrom: ((scale scale: result min)@size) + delta - to: ((scale scale: result max)@size) + delta - ]. - - - -] - -{ #category : #helpers } -RTScatterplotMatrix >> createAxisYIfNecessary: aView [ - | m min max v box line e1 e2 edge axe nticks result delta size scale | - shouldUseAxisForY ifFalse: [ ^ self ]. - m := self metrics. - size := (boxSize*m keys size) + (padding * m keys size) + (boxSize/2)+ (padding/2). - box := RTBox new size: 0. - line := self lineShape. - axe := self axisY. - m keys doWithIndex: [ :m0 :j | - min := Float fmax. - max := Float fmin. - delta := 0@((boxSize*j) + (padding * j)). - - self objects do: [ :o | - v := (m at: m0) rtValue: o. - min := min min: v. - max := max max: v. - ]. - nticks := axe numberOfTicks. - nticks isZero ifTrue: [ nticks := 2 ]. - result := generator searchMin: min max: max desired: axe numberOfTicks. - scale := yScales at: m0. - (result min to: result max by: result step) do: [ :n | - e1 := box element. - e2 := box element. - edge := RTEdge from: e1 to: e2. - edge + line. - v := scale scale: n. - e1 translateTo: (boxSize/2)@v. - e2 translateTo: size@v. - e1 translateBy: delta. - e2 translateBy: delta. - view add: e1; add: e2; add: edge ]. - axe minValue: result min; - maxValue: result max; - numberOfTicks: result numberOfTicks; - numberOfLabels: result numberOfTicks; - axisFrom: ( (boxSize/2) @(scale scale: result min)) + delta - to: ( (boxSize/2) @(scale scale: result max)) + delta - ]. - - - -] - -{ #category : #hooks } -RTScatterplotMatrix >> createView [ - ^ RTView new @ RTDraggableView @ RTZoomableView -] - -{ #category : #initialization } -RTScatterplotMatrix >> initialize [ - super initialize. - self padding: 15. - self scatterBoxSize: 150. - self shouldUseAxis: true. - self allowSelectableView: true. - - self shape circle - size: 4; - color: (Color colorFrom: '#020289'). - self boxShape: (RTBox new size: self scatterBoxSize; - color: Color transparent; - borderColor: Color veryLightGray). - self lineShape: (RTLine new color: Color veryLightGray trans). - self labelShape: (RTLabel new). - - generator := RTLabelGenerator nice: RTNiceStepSizeGenerator new. - generator setLooseFlag: true. - metrics := Dictionary new. - - -] - -{ #category : #accessing } -RTScatterplotMatrix >> labelShape [ - ^ labelShape -] - -{ #category : #accessing } -RTScatterplotMatrix >> labelShape: aShape [ - labelShape := aShape -] - -{ #category : #accesing } -RTScatterplotMatrix >> lineShape [ - ^ lineShape -] - -{ #category : #accesing } -RTScatterplotMatrix >> lineShape: aShape [ - lineShape := aShape -] - -{ #category : #accesing } -RTScatterplotMatrix >> metrics [ - ^ metrics -] - -{ #category : #accesing } -RTScatterplotMatrix >> objects [ - ^ objects -] - -{ #category : #accessing } -RTScatterplotMatrix >> objects: aCollection [ - objects := aCollection -] - -{ #category : #accesing } -RTScatterplotMatrix >> padding [ - ^ padding -] - -{ #category : #accesing } -RTScatterplotMatrix >> padding: aNumber [ - padding := aNumber -] - -{ #category : #helpers } -RTScatterplotMatrix >> prepareScales [ - | domain range x y m value | - xScales := Dictionary new. - yScales := Dictionary new. - m := self metrics. - - m keys do: [ :k | - value := m at: k. - domain := Array - with: (value value: (objects minFor: value)) - with: (value value: (objects maxFor: value)). - range := Array with: (padding /2)-(boxSize /2) with: (boxSize/2) - (padding/2). - x := RTScale linear domain: domain; range: range. - y := RTScale linear domain: domain; range: range reverse. - xScales at: k put: x. - yScales at: k put: y ]. -] - -{ #category : #hooks } -RTScatterplotMatrix >> renderIn: aView [ - self renderMatrix: aView. - self createAxisIfNecessary: aView. - self addBrushInteractionIfNecessary: aView. -] - -{ #category : #rendering } -RTScatterplotMatrix >> renderMatrix: aView [ - | m elements x y box delta label | - m := self metrics. - self prepareScales. - allDotElements := RTGroup new. - m keys doWithIndex: [ :metric1 :j | - m keys doWithIndex: [ :metric2 :k | - delta := ((k@j)* boxSize)+((k@j)*padding). - box := self boxShape elementOn: k@j. - box translateBy: delta. - self boxes add: box. - - k = j ifTrue: [ - label := self labelShape elementOn: metric1. - RTConstraint new - fix: box; movable: label; inner; - left; top; move. - aView add: label ]. - - aView add: box. - elements := self shape elementsOn: self objects. - elements do: [ :e | - x := (xScales at: metric1) scale: ((m at: metric1) rtValue: e model). - y := (yScales at: metric2) scale: ((m at: metric2) rtValue: e model). - e translateTo: (x @ y)+delta ]. - allDotElements addAll: elements. - aView addAll: elements. - ]. - ]. -] - -{ #category : #accesing } -RTScatterplotMatrix >> scatterBoxSize [ - ^ boxSize -] - -{ #category : #accesing } -RTScatterplotMatrix >> scatterBoxSize: aNumber [ - boxSize := aNumber -] - -{ #category : #accesing } -RTScatterplotMatrix >> shouldUseAxis: aBool [ - self shouldUseAxisForX: aBool. - self shouldUseAxisForY: aBool. - -] - -{ #category : #accesing } -RTScatterplotMatrix >> shouldUseAxisForX: aBool [ - shouldUseAxisForX := aBool - -] - -{ #category : #accesing } -RTScatterplotMatrix >> shouldUseAxisForY: aBool [ - shouldUseAxisForY := aBool - -] - -{ #category : #example } -RTScatterplotMatrix >> simpleExample [ - - - | data b | - data := #(#(0.9170513021285733 0.0580469642003943 0.039843878609283574 0.0002245982079426635 0.05972580998057905 0.0019284395112519062 0.00021906741531635694 5.473034153567295e-6 ) #(0.06048091857225325 0.9166835387857581 0.0003678798636292227 0.057876396100326674 0.00025171421352151486 0.04972402349772913 7.985804967567212e-7 0.0005194571702382702 ) #(0.04622317014158704 0.00041004416698765003 0.9244099030731187 0.06839983681421519 0.000703357404647377 5.004361330987118e-6 0.04460644890296643 0.0005317834030606535 ) #(0.00024375904463163906 0.04814482773087908 0.05442601427673935 0.9039271604738842 4.660455666875091e-6 0.00020702232492367798 0.00017780875972990329 0.04925968266399622 ) #(0.036947474062634315 2.825552863661125e-5 0.0008838568131096336 2.2630966773718294e-6 0.9044321387959263 0.04916792435099527 0.059619694411017436 0.0009448845151166426 ) #(0.0009842742481259623 0.0478623864966833 1.4811612028109072e-6 0.00024742526627396177 0.05213480303079985 0.927946186713344 0.00010323374637841176 0.051160897588891995 ) #(0.0009469604744566376 4.2985596348793275e-6 0.04091471867749136 0.00039220591930379294 0.06840844695205231 0.0018678035203494939 0.9094220831260129 0.07187071938698951 ) #(2.3766234918319515e-6 0.0001901256507429913 0.00028381623526550905 0.05112224848197423 0.0004572063960853635 0.03776581656802525 0.05391160100887221 0.9093226397537215 ) ). - - b := RTScatterplotMatrix new. - - b objects: data. - - b shape circle - size: 3.5; - color: Color blue trans. - - b metrics - at: '1st' put: #first; - at: '2nd' put: #second; - at: '3st' put: #third. - - b axisX numberOfTicks: 5. - b axisY numberOfTicks: 5. - ^ b -] diff --git a/src/Roassal2/RTScriptOfTheDayPlugin.class.st b/src/Roassal2/RTScriptOfTheDayPlugin.class.st deleted file mode 100644 index 2af929b3b..000000000 --- a/src/Roassal2/RTScriptOfTheDayPlugin.class.st +++ /dev/null @@ -1,41 +0,0 @@ -Class { - #name : #RTScriptOfTheDayPlugin, - #superclass : #RTAbstractPlugin, - #category : #'Roassal2-Plugins' -} - -{ #category : #hooks } -RTScriptOfTheDayPlugin >> description [ - ^ '(ADMIN ONLY) Generate a script of the day' -] - -{ #category : #testing } -RTScriptOfTheDayPlugin >> doesItLoadCode [ - ^ true -] - -{ #category : #hooks } -RTScriptOfTheDayPlugin >> execute [ - - (Smalltalk includesKey: #DSWebhookClient) ifFalse: [ - Metacello new - baseline: #DiscordSt; - repository: 'github://JurajKubelka/DiscordSt/src'; - load: #webhook ]. - - Gofer new - smalltalkhubUser: 'ObjectProfile' project: 'Roassal2'; - package: 'Roassal2ScriptOfTheDay'; load. - - -] - -{ #category : #testing } -RTScriptOfTheDayPlugin >> isLoaded [ - ^ RPackageOrganizer default includesPackageNamed: 'Roassal2ScriptOfTheDay' -] - -{ #category : #hooks } -RTScriptOfTheDayPlugin >> label [ - ^ 'Script of the day generator' -] diff --git a/src/Roassal2/RTScrollBar.class.st b/src/Roassal2/RTScrollBar.class.st deleted file mode 100644 index e582f9dff..000000000 --- a/src/Roassal2/RTScrollBar.class.st +++ /dev/null @@ -1,23 +0,0 @@ -" -add a simple scroll bar to the view -" -Class { - #name : #RTScrollBar, - #superclass : #RTInteraction, - #category : #'Roassal2-Interactions' -} - -{ #category : #'as yet unclassified' } -RTScrollBar >> addScrollToview: aView [ - - "add a scroll bar to the view" - | b| - b := RTScrollBarBuilder new. - b view: aView. - b build. -] - -{ #category : #'as yet unclassified' } -RTScrollBar >> initializeElement: aView [ - self addScrollToview: aView -] diff --git a/src/Roassal2/RTScrollBarBuilder.class.st b/src/Roassal2/RTScrollBarBuilder.class.st deleted file mode 100644 index 736bad61d..000000000 --- a/src/Roassal2/RTScrollBarBuilder.class.st +++ /dev/null @@ -1,258 +0,0 @@ -" -A RTScrollBarBuilder is a scroll bar that you can add to navigate in your view. More than a Draggable view, it allows to keep a mark about your position in the view and it scale for large views. - -It can be static, movable, using #isStatic or #isMovable -aving an orientation #vertical or #horizontal. - -the default configuration is #isBasic and #isStatic, - -the bar shape is defined by #barShape: <#aBox or default value #anEllipse> -the bar can have a specificity like #scalable, so it give an idea of the size of the view. - -Size or fixedPosition can be defined as blocks. - -width: to set a static size of width. -" -Class { - #name : #RTScrollBarBuilder, - #superclass : #RTAbstractScrollBuilder, - #category : #'Roassal2-Builder-ScrollBar' -} - -{ #category : #adding } -RTScrollBarBuilder >> addAnimations [ - "add animations on the bar, to make the scroll bar movable or not etc.. Callbacks on resize, drag and drop... A lot of precise case to reduce costly full update at maximum" - | bar surroundingRectangle margeRectangle | - - bar := self shapes bar. - surroundingRectangle := self shapes surroundingRectangle. - margeRectangle := self shapes margeRectangle. - - "bar and view drag animations" - (self orientation = #horizontal) ifTrue: [ - self barDragHorizontal. - self viewDragHorizontal. - ]. - - (self orientation = #vertical) ifTrue: [ - self barDragVertical. - self viewDragVertical. - ]. - - "Move the scroll bar when movable animation" - (self movable = #isMovable) ifTrue: [ - surroundingRectangle when: TRMouseDragging do: [ :evt | - self shapes collection do: [ :s | s translateBy: (evt step) ]. - self view signalUpdate. - ] - ]. - - "Callbacks when translate, resize or rescale canvas" - self view elements do: [:e | e addCallback: (TRTranslationCallback new block: [ - self encompassingRectangleUpdate. self encompassingRectangleFromSpaceToPixelUpdate. self signalUpdate.]) - ]. - - self view when: TRResizeCanvasEvent do: [ :evt | self signalUpdate]. - - self view canvas camera addCallback: (TRCameraScaleCallback new block: [ self encompassingRectangleFromSpaceToPixelUpdate. self signalUpdate. ]). - - - - -] - -{ #category : #adding } -RTScrollBarBuilder >> barDragHorizontal [ - "Animation for a horizontal drag of the bar" - self shapes bar when: TRMouseDragging do: [ :evt | - - (self encompassingRectangle containsPoint: (self view canvas camera position)) - ifFalse: [ (self view canvas camera) translateTo: ((self encompassingRectangle) pointNearestTo: (self view canvas camera position)) ]. - - (self shapes margeRectangle includesPoint: (self shapes bar position + ((evt step x)@0))) & (self shapes surroundingRectangle includesPoint: (evt position x)@(self shapes bar position y)) - ifTrue: [ - self shapes bar translateBy: (evt step x)@0. - self view canvas camera translateBy: (self translationHorizontal: evt). - ]. - - self view signalUpdate. - ] -] - -{ #category : #adding } -RTScrollBarBuilder >> barDragVertical [ - "Animation for a horizontal drag of the bar" - self shapes bar when: TRMouseDragging do: [ :evt | - - (self encompassingRectangle containsPoint: (self view canvas camera position)) - ifFalse: [ (self view canvas camera) translateTo: ((self encompassingRectangle) pointNearestTo: (self view canvas camera position)) ]. - - (self shapes margeRectangle includesPoint: (self shapes bar position + (0@(evt step y)))) & (self shapes surroundingRectangle includesPoint: (self shapes bar position x)@(evt position y)) - ifTrue: [ - self shapes bar translateBy: 0@(evt step y). - self view canvas camera translateBy: (self translationVertical: evt). - ]. - - self view signalUpdate. - ] -] - -{ #category : #'as yet unclassified' } -RTScrollBarBuilder >> defineShapes [ - "define shapes if scrollBar is horizontal or vertical." - - "set bar shape, the draggable shape." - (self barShape = #aBox) - ifTrue: [ self shapes bar: TRBoxShape new ] - ifFalse: [ self shapes bar: TREllipseShape new ]. - - "Start and stop are made to show the border of scroll Bar" - (self orientation = #horizontal) ifTrue: [ - self shapes defineHorizontalShapes. - ]. - - (self orientation = #vertical) ifTrue: [ - self shapes defineVerticalShapes. - ]. - -] - -{ #category : #initialization } -RTScrollBarBuilder >> initialize [ - super initialize. - self shapes: (RTScrollShapesBuilder for: self). -] - -{ #category : #'as yet unclassified' } -RTScrollBarBuilder >> positionOnBorderHorizontal [ - - ((self shapes bar position x - (self barWidth / 2)) < (self shapes surroundingRectangle encompassingRectangle origin x)) ifTrue: [ self shapes bar translateTo: ((self shapes surroundingRectangle encompassingRectangle origin x) + (self barWidth / 2))@(self shapes surroundingRectangle position y)]. - ((self shapes bar position x + (self barWidth / 2)) > (self shapes surroundingRectangle encompassingRectangle corner x)) ifTrue: [ self shapes bar translateTo: ((self shapes surroundingRectangle encompassingRectangle corner x) - (self barWidth / 2))@(self shapes surroundingRectangle position y)]. -] - -{ #category : #'as yet unclassified' } -RTScrollBarBuilder >> positionOnBorderVertical [ - - ((self shapes bar position y - (self barHeight / 2)) < (self shapes surroundingRectangle encompassingRectangle origin y)) ifTrue: [ self shapes bar translateTo: (self shapes surroundingRectangle position x)@(self shapes surroundingRectangle encompassingRectangle origin y + (self barHeight / 2))]. - ((self shapes bar position y + (self barHeight / 2)) > (self shapes surroundingRectangle encompassingRectangle corner y)) ifTrue: [ self shapes bar translateTo: (self shapes surroundingRectangle position x)@(self shapes surroundingRectangle encompassingRectangle corner y - (self barHeight / 2))]. - -] - -{ #category : #hooks } -RTScrollBarBuilder >> renderIn: aView [ - - (self view elements isEmpty) ifTrue: [self defaultEncompassingRectangle] ifFalse: [ self encompassingRectangleUpdate ]. - self encompassingRectangleFromSpaceToPixelUpdate. - - self defineShapes. - self addShapesToView. - self addAnimations. - -] - -{ #category : #'as yet unclassified' } -RTScrollBarBuilder >> reverseTranslationHorizontal: evt [ - | t | - - t := ((evt step x) / (self encompassingRectangleFromSpaceToPixel width )) * (self size - self shapes bar width). - - ^ (t negated)@0 -] - -{ #category : #'as yet unclassified' } -RTScrollBarBuilder >> reverseTranslationVertical: evt [ - | t | - - t := ((evt step y) / (self encompassingRectangleFromSpaceToPixel height)) * (self size - self shapes bar height). - - ^ 0@(t negated) -] - -{ #category : #signalling } -RTScrollBarBuilder >> signalUpdatePosition [ - | pr pos sizeNow | - - pos := self fixedPosition. - sizeNow := self size. - - (self orientation = #horizontal) ifTrue: [ - pr := (((self view canvas camera position x) - (self encompassingRectangle origin x)) / (self encompassingRectangle width)) * sizeNow. - self shapes surroundingRectangle position: pos. - self shapes bar position: (pr + (self shapes surroundingRectangle encompassingRectangle origin x ))@(pos y). - self positionOnBorderHorizontal. - ]. - - (self orientation = #vertical) ifTrue: [ - pr := (((0@(self view canvas camera position y)) dist: (0@(self encompassingRectangle origin y))) / (self encompassingRectangle height)) * (self shapes surroundingRectangle height). - self shapes surroundingRectangle position: pos. - self shapes bar position: (pos x)@(pr + (self shapes surroundingRectangle encompassingRectangle origin y)). - self positionOnBorderVertical. - ]. - - self shapes margeRectangle position: pos. -] - -{ #category : #signalling } -RTScrollBarBuilder >> signalUpdateSize [ - | sizeNow | - - sizeNow := self size. - (self orientation = #horizontal) ifTrue: [ - self shapes surroundingRectangle width: sizeNow. - self shapes margeRectangle width: (sizeNow - self barWidth). - self shapes bar width: self barWidth. - ]. - - (self orientation = #vertical) ifTrue: [ - self shapes surroundingRectangle height: sizeNow. - self shapes margeRectangle height: (sizeNow - (self barHeight)). - self shapes bar height: self barHeight. - ]. - - -] - -{ #category : #'as yet unclassified' } -RTScrollBarBuilder >> translationHorizontal: evt [ - | t | - - t := ((evt step x) / (self size - self shapes bar width)) * ((self encompassingRectangleFromSpaceToPixel width) / self view canvas camera scale). - - ^ t@0 -] - -{ #category : #'as yet unclassified' } -RTScrollBarBuilder >> translationVertical: evt [ - | t | - - t := ((evt step y) / (self size - self shapes bar height)) * ((self encompassingRectangleFromSpaceToPixel height) / self view canvas camera scale). - - ^ 0@t -] - -{ #category : #adding } -RTScrollBarBuilder >> viewDragHorizontal [ - "Animation for a horizontal drag of the view" - self view when: TRMouseDragging do: [ :evt | - | translation | - translation := (self reverseTranslationHorizontal: evt). - ((self shapes margeRectangle includesPoint: (self shapes bar position + translation))) ifTrue: [ - shapes bar translateBy: translation. - self view signalUpdate - ]. - ]. -] - -{ #category : #adding } -RTScrollBarBuilder >> viewDragVertical [ - "Animation for a vertical drag of the view" - self view when: TRMouseDragging do: [ :evt | - | translation | - translation := (self reverseTranslationVertical: evt). - ((self shapes margeRectangle includesPoint: (self shapes bar position + translation))) ifTrue: [ - shapes bar translateBy: translation. - self view signalUpdate - ]. - ]. - -] diff --git a/src/Roassal2/RTScrollBarBuilderExamples.class.st b/src/Roassal2/RTScrollBarBuilderExamples.class.st deleted file mode 100644 index 37c93ccf1..000000000 --- a/src/Roassal2/RTScrollBarBuilderExamples.class.st +++ /dev/null @@ -1,128 +0,0 @@ -" -A RTScrollBarBuilderExamples shows some usable examples for the scroll bar. - -" -Class { - #name : #RTScrollBarBuilderExamples, - #superclass : #RTObject, - #category : #'Roassal2-Builder-ScrollBar' -} - -{ #category : #examples } -RTScrollBarBuilderExamples >> doubleScrollBar [ - " - RTScrollBarBuilderExamples new doubleScrollBar - " - | b b2 b3 | - - b := RTMondrian new. - b shape rectangle - withBorder; - width: [ :cls | cls numberOfVariables * 5]; - height: #numberOfMethods; - linearFillColor: #numberOfLinesOfCode within: RTObject withAllSubclasses. - b nodes: RTObject withAllSubclasses. - b edges connectFrom: #superclass. - b layout tree. - b build. - - b2 := RTScrollBarBuilder new. - b2 view: b view. - b2 orientation: #vertical. - b2 fixedPosition: [ :v | (v view canvas extent x - ((v width /2))@(v view canvas extent y /2)) ]. - b2 movable: #isFixed. - b2 size: [ :v | v view canvas extent y ]. - b2 barShape: #aBox. - b2 barSpecific: #scalable. - b2 width: 30. - b2 build. - - b3 := RTScrollBarBuilder new. - b3 view: b view. - b3 fixedPosition: [ :v | (v view canvas extent x / 2)@(v view canvas extent y - (v width /2))]. - b3 movable: #isFixed. - b3 size: [ :v | v view canvas extent x]. - b3 barShape: #aBox. - b3 barSpecific: #scalable. - b3 build. - - ^ b view -] - -{ #category : #examples } -RTScrollBarBuilderExamples >> example1 [ - " - RTScrollBarBuilderExamples new example1 - " - | b b2 | - b := RTMondrian new. - b shape rectangle - withBorder; - width: [ :cls | cls numberOfVariables * 5]; - height: #numberOfMethods; - linearFillColor: #numberOfLinesOfCode within: RTObject withAllSubclasses. - b nodes: RTObject withAllSubclasses. - b edges connectFrom: #superclass. - b layout tree. - b build. - - b2 := RTScrollBarBuilder new. - b2 view: b view. - b2 fillColor: (Color lightGray alpha:0.2). - b2 build. - - ^ b view -] - -{ #category : #examples } -RTScrollBarBuilderExamples >> example3 [ - " - RTScrollBarBuilderExamples new example3 - " - | b b2 | - b := RTMondrian new. - b shape rectangle - withBorder; - width: [ :cls | cls numberOfVariables * 5]; - height: #numberOfMethods; - linearFillColor: #numberOfLinesOfCode within: RTObject withAllSubclasses. - b nodes: RTObject withAllSubclasses. - b edges connectFrom: #superclass. - b layout tree. - b build. - - b2 := RTScrollBarBuilder new. - b2 size: [ :v | v view canvas extent x / 3]. - b2 barSpecific: #scalable. - b2 barShape: #aBox. - b2 view: b view. - b2 fillColor: (Color lightGray alpha: 0.2). - b2 build. - - ^ b view -] - -{ #category : #initialization } -RTScrollBarBuilderExamples >> initialize [ - super initialize -] - -{ #category : #examples } -RTScrollBarBuilderExamples >> scrollsWithInteraction [ - " - RTScrollBarBuilderExamples new scrollsWithInteraction - " - | b | - b := RTMondrian new. - b shape rectangle - withBorder; - width: [ :cls | cls numberOfVariables * 5]; - height: #numberOfMethods; - linearFillColor: #numberOfLinesOfCode within: RTObject withAllSubclasses. - b nodes: RTObject withAllSubclasses. - b edges connectFrom: #superclass. - b layout tree. - b build. - b view @ RTDoubleScrollBar. - ^ b view -] diff --git a/src/Roassal2/RTScrollPadBuilder.class.st b/src/Roassal2/RTScrollPadBuilder.class.st deleted file mode 100644 index f69158a04..000000000 --- a/src/Roassal2/RTScrollPadBuilder.class.st +++ /dev/null @@ -1,177 +0,0 @@ -" -A RTScrollPadBuilder is a scroll pad that you can add to navigate in two dimension in your view. More than a Draggable view, it allows to keep a mark about your position in the view and it scale for large views. - -It can be static, movable, using #isStatic or #isMovable -aving an orientation #vertical or #horizontal. - -the default configuration is #isBasic and #isStatic, - -the bar shape is defined by #barShape: <#aBox or default value #anEllipse> -the bar can have a specificity like #scalable, so it give an idea of the size of the view. - -Size or fixedPosition can be defined as blocks. - -width: to set a static size of width. -" -Class { - #name : #RTScrollPadBuilder, - #superclass : #RTAbstractScrollBuilder, - #category : #'Roassal2-Builder-ScrollBar' -} - -{ #category : #adding } -RTScrollPadBuilder >> addAnimations [ - - | bar surroundingRectangle margeRectangle | - bar := self shapes bar. - surroundingRectangle := self shapes surroundingRectangle. - margeRectangle := self shapes margeRectangle. - - bar when: TRMouseDragging do: [ :evt | - - (self encompassingRectangle containsPoint: (self view canvas camera position)) ifFalse: [ (self view canvas camera) translateTo: ((self encompassingRectangle) pointNearestTo: (self view canvas camera position)) ]. - - (margeRectangle includesPoint: (bar position + evt step)) & (surroundingRectangle includesPoint: evt position) ifTrue: [ - bar translateBy: evt step. - self view canvas camera translateBy: (self translation: evt). - ]. - self view signalUpdate. - ]. - - (self movable = #isMovable) ifTrue: [ - surroundingRectangle when: TRMouseDragging do: [ :evt | - self shapes collection do: [ :s | s translateBy: (evt step) ]. - self view signalUpdate. - ] - ]. - - - self view when: TRMouseDragging do: [ :evt | - | translation | - translation := (self reverseTranslation: evt). - ((margeRectangle includesPoint: (bar position + translation)) & ((self encompassingRectangle ) containsPoint: (self view canvas camera position))) ifTrue: [ - shapes bar translateBy: translation. - self view signalUpdate - ]. - ]. - - self view elements do: [:e | e addCallback: (TRTranslationCallback new block: [ - self encompassingRectangleUpdate. self encompassingRectangleFromSpaceToPixelUpdate. self signalUpdate.]) - ]. - self view when: TRResizeCanvasEvent do: [ :evt | self signalUpdate]. - self view canvas camera addCallback: (TRCameraScaleCallback new block: [ self encompassingRectangleFromSpaceToPixelUpdate. self signalUpdate. ]). - - - -] - -{ #category : #'as yet unclassified' } -RTScrollPadBuilder >> defineShapes [ - | bar surroundingRectangle margeRectangle | - - "set bar shape" - (self barShape = #aBox) ifTrue: [ bar := TRBoxShape new ] ifFalse: [ bar := TREllipseShape new ]. - - "bar is the shape to drag and drop" - bar height: self barHeight; width: self barWidth; color: (Color lightGray); position: self fixedPosition; strokePaint: nil. - - "This shape is the the fill of the scroll pad" - surroundingRectangle := TRBoxShape new fromRectangle: (Rectangle origin: (self fixedPosition x - (self size / 2)) @ (self fixedPosition y - (self size / 2)) corner:(self fixedPosition x + (self size / 2)) @ (self fixedPosition y + (self size / 2))); color: (Color gray alpha: 0.1); strokePaint: nil. - - "the margeRectangle handle the width/2 of the bar" - margeRectangle := TRBoxShape new fromRectangle: (Rectangle origin: (surroundingRectangle encompassingRectangle origin + ((bar width /2)@(bar height /2)))corner: (surroundingRectangle encompassingRectangle corner - ((bar width /2)@(bar height /2)))); color: (Color gray alpha:0); strokePaint: nil . - - self shapes bar: bar; surroundingRectangle: surroundingRectangle; margeRectangle: margeRectangle. - - -] - -{ #category : #initialization } -RTScrollPadBuilder >> initialize [ - super initialize. - self shapes: RTScrollShapesBuilder new. -] - -{ #category : #'as yet unclassified' } -RTScrollPadBuilder >> positionOnBorderHorizontal [ - ((self shapes bar position x - (self barWidth / 2)) < (self shapes surroundingRectangle position x - (self size / 2))) ifTrue: [ self shapes bar translateTo: (self shapes surroundingRectangle position x - (self size / 2) + (self barWidth / 2))@(self shapes surroundingRectangle position y)]. - ((self shapes bar position x + (self barWidth / 2)) > (self shapes surroundingRectangle position x + (self size / 2))) ifTrue: [ self shapes bar translateTo: (self shapes surroundingRectangle position x + (self size / 2) - (self barWidth / 2))@(self shapes surroundingRectangle position y)]. - - ((self shapes bar position y - (self barHeight / 2)) < (self shapes surroundingRectangle position y - (self size / 2))) ifTrue: [ self shapes bar translateTo: (self shapes surroundingRectangle position x)@(self shapes surroundingRectangle position y - (self size / 2) + (self barHeight / 2))]. - ((self shapes bar position y + (self barHeight / 2)) > (self shapes surroundingRectangle position y + (self size / 2))) ifTrue: [ self shapes bar translateTo: (self shapes surroundingRectangle position x)@(self shapes surroundingRectangle position y + (self size / 2) - (self barHeight / 2))]. -] - -{ #category : #hooks } -RTScrollPadBuilder >> renderIn: aView [ - - (self view elements isEmpty) ifTrue: [self defaultEncompassingRectangle] ifFalse: [ self encompassingRectangleUpdate ]. - self encompassingRectangleFromSpaceToPixelUpdate. - - self defineShapes. - self addShapesToView. - self addAnimations. - - - - - - -] - -{ #category : #'as yet unclassified' } -RTScrollPadBuilder >> reverseTranslation: evt [ - | tx ty | - - - tx:= ((evt step x) / (self encompassingRectangleFromSpaceToPixel width )) * (self size - self shapes bar width). - - ty := ((evt step y) / (self encompassingRectangleFromSpaceToPixel height)) * (self size - self shapes bar height). - - ^ (tx negated)@(ty negated) -] - -{ #category : #signalling } -RTScrollPadBuilder >> signalUpdatePosition [ - - | prx pry org| - - (self movable = #isMovable) ifFalse: [ - prx := ((self shapes bar position x)-(self shapes surroundingRectangle position x - (self shapes surroundingRectangle width/2))) / (self shapes surroundingRectangle width) * self size. - pry := ((self shapes bar position y)-(self shapes surroundingRectangle position y - (self shapes surroundingRectangle height/2))) / (self shapes surroundingRectangle height) * self size. - - self shapes surroundingRectangle position: self fixedPosition. - self shapes surroundingRectangle position: self fixedPosition. - - org := (self fixedPosition x - (self size / 2) )@(self fixedPosition y - (self size / 2) ). - - self shapes bar position: (prx + org x)@((pry + org y)). - - self positionOnBorderHorizontal. - ]. - - -] - -{ #category : #signalling } -RTScrollPadBuilder >> signalUpdateSize [ - - self shapes surroundingRectangle width: self size. - self shapes surroundingRectangle height: self size. - self shapes margeRectangle width: (self size - (self barWidth)). - self shapes margeRectangle height: (self size - (self barHeight)). - self shapes bar width: self barWidth. - self shapes bar height: self barHeight. - - - -] - -{ #category : #accessing } -RTScrollPadBuilder >> translation: evt [ - | tx ty | - - tx := ((evt step x) / (self size - self shapes bar width)) * ((self encompassingRectangleFromSpaceToPixel width) / self view canvas camera scale). - ty := ((evt step y) / (self size - self shapes bar height)) * ((self encompassingRectangleFromSpaceToPixel height) / self view canvas camera scale). - - ^ tx@ty -] diff --git a/src/Roassal2/RTScrollPadBuilderExamples.class.st b/src/Roassal2/RTScrollPadBuilderExamples.class.st deleted file mode 100644 index 12be1b104..000000000 --- a/src/Roassal2/RTScrollPadBuilderExamples.class.st +++ /dev/null @@ -1,59 +0,0 @@ -" -Give it a try, inspect the comments -" -Class { - #name : #RTScrollPadBuilderExamples, - #superclass : #RTObject, - #category : #'Roassal2-Builder-ScrollBar' -} - -{ #category : #examples } -RTScrollPadBuilderExamples >> example2 [ - " - RTScrollPadBuilderExamples new example2 - " - | b b2 | - b := RTMondrian new. - b shape rectangle - withBorder; - width: [ :cls | cls numberOfVariables * 5]; - height: #numberOfMethods; - linearFillColor: #numberOfLinesOfCode within: RTObject withAllSubclasses. - b nodes: RTObject withAllSubclasses. - b edges connectFrom: #superclass. - b layout tree. - b build. - - b2 := RTScrollPadBuilder new. - b2 view: b view. - b2 fillColor: (Color gray alpha: 0.2). - b2 build. - ^ b view -] - -{ #category : #'as yet unclassified' } -RTScrollPadBuilderExamples >> padWithScalableBar [ - " - RTScrollPadBuilderExamples new padWithScalableBar - " - | b b2 | - b := RTMondrian new. - b shape rectangle - withBorder; - width: [ :cls | cls numberOfVariables * 5]; - height: #numberOfMethods; - linearFillColor: #numberOfLinesOfCode within: RTObject withAllSubclasses. - b nodes: RTObject withAllSubclasses. - b edges connectFrom: #superclass. - b layout tree. - b build. - - b2 := RTScrollPadBuilder new. - b2 view: b view. - b2 barSpecific: #scalable. - b2 barShape: #aBox. - b2 size: [ :v | v view canvas extent x / 7]. - b2 fillColor: (Color gray alpha: 0.2). - b2 build. - ^ b view -] diff --git a/src/Roassal2/RTScrollShapesBuilder.class.st b/src/Roassal2/RTScrollShapesBuilder.class.st deleted file mode 100644 index 1d09898b2..000000000 --- a/src/Roassal2/RTScrollShapesBuilder.class.st +++ /dev/null @@ -1,98 +0,0 @@ -" -Define the shapes added to the view by the pad and bar builders -" -Class { - #name : #RTScrollShapesBuilder, - #superclass : #RTObject, - #instVars : [ - 'margeRectangle', - 'bar', - 'surroundingRectangle', - 'collection', - 'scrollBuilder' - ], - #category : #'Roassal2-Builder-ScrollBar' -} - -{ #category : #'as yet unclassified' } -RTScrollShapesBuilder class >> for: aRTScrollBuilder [ - ^ self new scrollBuilder: aRTScrollBuilder -] - -{ #category : #accessing } -RTScrollShapesBuilder >> bar [ - ^ bar -] - -{ #category : #accessing } -RTScrollShapesBuilder >> bar: aTRShape [ - bar := aTRShape. - collection add: aTRShape. -] - -{ #category : #accessing } -RTScrollShapesBuilder >> collection [ - ^ collection -] - -{ #category : #accessing } -RTScrollShapesBuilder >> defineHorizontalShapes [ - - self bar height: self scrollBuilder width; width: self scrollBuilder barWidth; color: Color lightGray; position: self scrollBuilder fixedPosition; strokePaint: nil. - - "This shape is the the fill of the scroll bar" - self surroundingRectangle: (TRBoxShape new height: self scrollBuilder width; width: self scrollBuilder size; position: (self scrollBuilder fixedPosition x )@(self scrollBuilder fixedPosition y); color: self scrollBuilder fillColor; strokePaint: nil). - - "the margeRectangle handle the width/2 of the bar" - self margeRectangle: (TRBoxShape new fromRectangle: (Rectangle origin: (self surroundingRectangle encompassingRectangle origin)corner: (self surroundingRectangle encompassingRectangle corner)); color: (Color gray alpha:0); strokePaint: nil) . -] - -{ #category : #accessing } -RTScrollShapesBuilder >> defineVerticalShapes [ - - self bar height: self scrollBuilder barHeight; width: self scrollBuilder width; color: (Color lightGray); position: self scrollBuilder fixedPosition; strokePaint: nil. - - "This shape is the the fill of the scroll bar" - self surroundingRectangle: (TRBoxShape new width: self scrollBuilder width; height: self scrollBuilder size; position: (self scrollBuilder fixedPosition x )@(self scrollBuilder fixedPosition y); color: self scrollBuilder fillColor; strokePaint: nil). - - "the margeRectangle handle the width/2 of the bar" - self margeRectangle: (TRBoxShape new fromRectangle: (Rectangle origin: (self surroundingRectangle encompassingRectangle origin)corner: (self surroundingRectangle encompassingRectangle corner)); color: (Color gray alpha:0); strokePaint: nil). -] - -{ #category : #initialization } -RTScrollShapesBuilder >> initialize [ - super initialize. - collection := OrderedCollection new. -] - -{ #category : #accessing } -RTScrollShapesBuilder >> margeRectangle [ - ^ margeRectangle -] - -{ #category : #accessing } -RTScrollShapesBuilder >> margeRectangle: aTRShape [ - margeRectangle := aTRShape. - collection add: aTRShape. -] - -{ #category : #accessing } -RTScrollShapesBuilder >> scrollBuilder [ - ^ scrollBuilder -] - -{ #category : #accessing } -RTScrollShapesBuilder >> scrollBuilder: aRTSCrollBuilder [ - scrollBuilder := aRTSCrollBuilder -] - -{ #category : #accessing } -RTScrollShapesBuilder >> surroundingRectangle [ - ^ surroundingRectangle -] - -{ #category : #accessing } -RTScrollShapesBuilder >> surroundingRectangle: aTRShape [ - surroundingRectangle := aTRShape. - collection add: aTRShape. -] diff --git a/src/Roassal2/RTScrollpad.class.st b/src/Roassal2/RTScrollpad.class.st deleted file mode 100644 index cf124c1a1..000000000 --- a/src/Roassal2/RTScrollpad.class.st +++ /dev/null @@ -1,24 +0,0 @@ -" -add a scroll pad to the view -" -Class { - #name : #RTScrollpad, - #superclass : #RTInteraction, - #category : #'Roassal2-Interactions' -} - -{ #category : #'as yet unclassified' } -RTScrollpad >> addPadToview: aView [ - - "add a scroll pad to the view" - | b| - b := RTScrollBarBuilder new. - b view: aView. - b scrollBarType: #isPad. - b build. -] - -{ #category : #'as yet unclassified' } -RTScrollpad >> initializeElement: aView [ - self addPadToview: aView -] diff --git a/src/Roassal2/RTSelectable.class.st b/src/Roassal2/RTSelectable.class.st deleted file mode 100644 index a470e2c60..000000000 --- a/src/Roassal2/RTSelectable.class.st +++ /dev/null @@ -1,83 +0,0 @@ -" -A RTSelectable is an interaction that allows for element contained in a view to be selected and having a callback whenever the selection is changed -" -Class { - #name : #RTSelectable, - #superclass : #RTClickStateInteraction, - #instVars : [ - 'selectionCallback' - ], - #category : #'Roassal2-Interactions' -} - -{ #category : #actions } -RTSelectable >> evaluateCallback: selectedElements [ - - selectionCallback value: selectedElements - -] - -{ #category : #actions } -RTSelectable >> evaluateCallbackForElement: element [ - self evaluateCallback: (self selectedElementsFrom: element) -] - -{ #category : #initialization } -RTSelectable >> initialize [ - super initialize. - selectionCallback := [ :selectedElements | ] -] - -{ #category : #testing } -RTSelectable >> isViewBeenPreparedForDeselection: aView [ - - ^ aView attributeAt: #preparedForDeselection ifAbsent: [ false ] -] - -{ #category : #actions } -RTSelectable >> prepareViewBeenForDeselection: aView [ - "Make the view react when one click on the view. Element should be unselected" - (self isViewBeenPreparedForDeselection: aView) - ifFalse: [ - aView when: TRMouseClick do: [ :evt | - aView elements do: [ :e | (self isSelected: e) ifTrue: [ self unselectNoCallback: e ] ]. - self evaluateCallback: RTGroup new. - aView signalUpdate ] ] -] - -{ #category : #actions } -RTSelectable >> select: element [ - element attributeAt: #oldColor put: element trachelShape color. - element trachelShape color: Color red. - self evaluateCallbackForElement: element. - self prepareViewBeenForDeselection: element view -] - -{ #category : #actions } -RTSelectable >> selectedElementsFrom: element [ - ^ element view elements select: [ :e | e attributeAt: #isSelected ifAbsent: [ false ] ] -] - -{ #category : #accessing } -RTSelectable >> selectionCallback [ - ^ selectionCallback -] - -{ #category : #accessing } -RTSelectable >> selectionCallback: aOneArgBlock [ - "aOneArgBlock will be evaluated at each selection. - The collection of selected elements is provided to the block" - selectionCallback := aOneArgBlock -] - -{ #category : #actions } -RTSelectable >> unselect: element [ - self unselectNoCallback: element. - self evaluateCallbackForElement: element -] - -{ #category : #actions } -RTSelectable >> unselectNoCallback: element [ - element trachelShape color: (element attributeAt: #oldColor). - self markAsUnselected: element -] diff --git a/src/Roassal2/RTSelectableTest.class.st b/src/Roassal2/RTSelectableTest.class.st deleted file mode 100644 index ffd388f34..000000000 --- a/src/Roassal2/RTSelectableTest.class.st +++ /dev/null @@ -1,58 +0,0 @@ -Class { - #name : #RTSelectableTest, - #superclass : #RTTest, - #instVars : [ - 'selectedElements', - 'view', - 'selectable' - ], - #category : #'Roassal2-Core-Tests' -} - -{ #category : #running } -RTSelectableTest >> setUp [ - | b | - super setUp. - b := RTMondrian new. - b nodes: Collection withAllSubclasses. - b layout flow. - b normalizer - normalizeSize: #numberOfMethods. - b build. - selectedElements := #(). - selectable := RTSelectable new selectionCallback: [ :es | selectedElements := es ]. - b view elements @ selectable. - - view := b view. - - -] - -{ #category : #tests } -RTSelectableTest >> testClickOn [ - - | e | - e := view elements first. - self assert: e trachelShape color ~= Color red. - selectable clickOn: e. - self assert: e trachelShape color equals: Color red. -] - -{ #category : #tests } -RTSelectableTest >> testClickOnTwice [ - - | e | - e := view elements first. - selectable clickOn: e. - selectable clickOn: e. - self assert: e trachelShape color ~= Color red. - -] - -{ #category : #tests } -RTSelectableTest >> testSelectable [ - | e | - self assert: selectedElements isEmpty. - e := RTElement new. - self assert: (selectable selectionCallback value: e) equals: e -] diff --git a/src/Roassal2/RTSelectableView.class.st b/src/Roassal2/RTSelectableView.class.st deleted file mode 100644 index 14da2363a..000000000 --- a/src/Roassal2/RTSelectableView.class.st +++ /dev/null @@ -1,62 +0,0 @@ -" -I am an iteraction for a RTView to select elements -the default RTSelectableView provides a box shape to select the shapes in a view. - -b := RTMondrian new. -b nodes: (1 to: 1000). -b edges connectFrom: [ :v | v // 2 ]. -b layout grid. -b build. -b view @ RTSelectableView. -b view -" -Class { - #name : #RTSelectableView, - #superclass : #RTAbstractElasticBoxInteraction, - #instVars : [ - 'color' - ], - #category : #'Roassal2-Selection' -} - -{ #category : #accessing } -RTSelectableView >> color [ - ^ color -] - -{ #category : #accessing } -RTSelectableView >> color: anObject [ - color := anObject -] - -{ #category : #util } -RTSelectableView >> getSelectedElementsWith: s [ - | g r | - g := RTGroup new. - r := s encompassingRectangle. - view elements do: [ :e | - ((e ~= s) and: [ e trachelShape encompassingRectangle intersects: r ]) - ifTrue: [ g add: e. ] ]. - ^ g -] - -{ #category : #util } -RTSelectableView >> highlight: aGroup [ - aGroup do: [:e | RTBlink highlight: e color: (self color rtValue: e) ]. -] - -{ #category : #initialization } -RTSelectableView >> initialize [ - super initialize. - self color: Color red. - self when: RTSelectionStart do: [ self removeSelection: view elements ]. - self - when: RTSelectionChange - do: [ :e | self highlight: (e group select: [ :each | each model isNotNil ]) ] -] - -{ #category : #util } -RTSelectableView >> removeSelection: aGroup [ - aGroup do: [:e | RTBlink unhighlight: e ]. - -] diff --git a/src/Roassal2/RTSelectionBox.class.st b/src/Roassal2/RTSelectionBox.class.st deleted file mode 100644 index 28bbb4297..000000000 --- a/src/Roassal2/RTSelectionBox.class.st +++ /dev/null @@ -1,79 +0,0 @@ -" -I am a simple selection Box interaction to create elastic boxs that allow to explore the edges from a view - -Here is an example: - -b := RTMondrian new. -b nodes: RTObject withAllSubclasses. -b edges moveBehind; connectToAll: #dependentClasses. -b layout grid. -b build. -b view @ RTSelectionBox. -b view - - -Another: - -b := RTMondrian new. -b nodes: (1 to: 1000). -b edges connectFrom: [ :v | v // 2 ]. -b layout grid. -b build. -b view @ RTSelectionBox. -b view -" -Class { - #name : #RTSelectionBox, - #superclass : #RTInteraction, - #instVars : [ - 'aView', - 'edges', - 'lastClick' - ], - #category : #'Roassal2-Experimental' -} - -{ #category : #public } -RTSelectionBox >> addBox [ - ^ self addBox: Color random -] - -{ #category : #public } -RTSelectionBox >> addBox: aColor [ - | box | - box := RTClipBox new - size: 100; - borderColor: aColor; - borderWidth: 1; - color: Color transparent; - element. - lastClick isNil ifFalse: [ - box translateTo: lastClick position ]. - aView add: box. - box trachelShape edges: edges. - box @ RTDraggable. - box @ RTResizable. - aView signalUpdate. - ^ box -] - -{ #category : #hooks } -RTSelectionBox >> initializeElement: view [ - | actions | - aView := view. - edges := aView edges. - edges do: #remove. - actions := Array - with: 'Add box from and to'-> [ self addBox trachelShape condition: [ :rec :ed| - (rec containsPoint: ed from position) and: [ rec containsPoint: ed to position ] ] ] - with: 'Add box from'->[ self addBox trachelShape condition: [ :rec :ed | - rec containsPoint: ed from position ] ] - with: 'Add box to'->[ self addBox trachelShape condition: [ :rec :ed | - rec containsPoint: ed to position ] ] - with: 'Add box (from or to)'-> [ self addBox trachelShape condition: [ :rec :ed | - (rec containsPoint: ed from position) or: [ rec containsPoint: ed to position ]] ]. - aView when: TRMouseRightClick do: [ :evt | - lastClick := evt. - TRUtil instance widgetFactory menuForAssociations: actions on: aView ]. - -] diff --git a/src/Roassal2/RTSelectionChange.class.st b/src/Roassal2/RTSelectionChange.class.st deleted file mode 100644 index ab517512f..000000000 --- a/src/Roassal2/RTSelectionChange.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -I am the event that is called when the elastic box changes over some elements -" -Class { - #name : #RTSelectionChange, - #superclass : #RTSelectionEvent, - #category : #'Roassal2-Selection' -} diff --git a/src/Roassal2/RTSelectionEnd.class.st b/src/Roassal2/RTSelectionEnd.class.st deleted file mode 100644 index 80da2e87c..000000000 --- a/src/Roassal2/RTSelectionEnd.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -I am called when the selection with the elastic box ends -" -Class { - #name : #RTSelectionEnd, - #superclass : #RTSelectionEvent, - #category : #'Roassal2-Selection' -} diff --git a/src/Roassal2/RTSelectionEvent.class.st b/src/Roassal2/RTSelectionEvent.class.st deleted file mode 100644 index 922fbb700..000000000 --- a/src/Roassal2/RTSelectionEvent.class.st +++ /dev/null @@ -1,33 +0,0 @@ -" -I am an event for RTSelectableView -" -Class { - #name : #RTSelectionEvent, - #superclass : #Announcement, - #instVars : [ - 'group', - 'shape' - ], - #category : #'Roassal2-Selection' -} - -{ #category : #accessing } -RTSelectionEvent >> group [ - ^ group -] - -{ #category : #accessing } -RTSelectionEvent >> group: g [ - group := g -] - -{ #category : #accessing } -RTSelectionEvent >> shape [ - ^ shape -] - -{ #category : #accessing } -RTSelectionEvent >> shape: anObject [ - "Not sure whether the argument is a roassal element or not" - shape := anObject -] diff --git a/src/Roassal2/RTSelectionExample.class.st b/src/Roassal2/RTSelectionExample.class.st deleted file mode 100644 index cf1dd8f4d..000000000 --- a/src/Roassal2/RTSelectionExample.class.st +++ /dev/null @@ -1,305 +0,0 @@ -" -RTSelectionExample new installTitle: 'ElasticBoxZoom' - code: -' -| v | -v := RTGrapherExample new exampleDeviation. -v @ RTZoomableBoxView. -v -' - -" -Class { - #name : #RTSelectionExample, - #superclass : #RTAbstractExample, - #category : #'Roassal2-Selection' -} - -{ #category : #sources } -RTSelectionExample >> exampleDifferentSelectionColor [ - - | int v | - v := RTComposerExample new exampleClassAnalysis2. - int := RTSelectableView new. - int color: [ :e | e color = Color red ifTrue: [Color green] ifFalse: [ Color red ] ]. - - v @ int. - ^ v - - -] - -{ #category : #icons } -RTSelectionExample >> exampleDifferentSelectionColorIcon [ - ^ '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' -] - -{ #category : #sources } -RTSelectionExample >> exampleElasticBoxZoom [ - - | v | - v := RTGrapherDecorationExample new exampleDeviation. - v @ RTZoomableBoxView. - ^ v - -] - -{ #category : #icons } -RTSelectionExample >> exampleElasticBoxZoomIcon [ - ^ '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 -9PEAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTSelectionExample >> exampleSelectionChange [ - -| int v | -v := RTComposerExample new exampleClassAnalysis2. -int := RTSelectableView new. - -int when: RTSelectionChange do: [ :evt | - evt shape trachelShape color: (int group size < 10 ifTrue: [Color green alpha: 0.3 ] ifFalse: [ Color red alpha: 0.3 ]) ]. -v @ int. -^ v - - -] - -{ #category : #icons } -RTSelectionExample >> exampleSelectionChangeIcon [ - ^ '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' -] - -{ #category : #sources } -RTSelectionExample >> exampleSimple [ - - | v | - v := RTComposerExample new exampleClassAnalysis2. - v @ RTSelectableView. - ^ v - -] - -{ #category : #icons } -RTSelectionExample >> exampleSimpleIcon [ - ^ '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' -] - -{ #category : #accessing } -RTSelectionExample >> label [ - ^ 'Selection Elements'. -] diff --git a/src/Roassal2/RTSelectionStart.class.st b/src/Roassal2/RTSelectionStart.class.st deleted file mode 100644 index f1f4aef6f..000000000 --- a/src/Roassal2/RTSelectionStart.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -I am called when the event with the elastic box start over the elements in one view -" -Class { - #name : #RTSelectionStart, - #superclass : #RTSelectionEvent, - #category : #'Roassal2-Selection' -} diff --git a/src/Roassal2/RTSelectiveShape.class.st b/src/Roassal2/RTSelectiveShape.class.st deleted file mode 100644 index ea32033d0..000000000 --- a/src/Roassal2/RTSelectiveShape.class.st +++ /dev/null @@ -1,139 +0,0 @@ -" -I am a shape to create a composite node, with: -* A shape of background (box, circle, triangle, etc) -* A shape with text - - -" -Class { - #name : #RTSelectiveShape, - #superclass : #RTAbstractElementShape, - #instVars : [ - 'shape', - 'labelShape', - 'backgroundColor' - ], - #category : #'Roassal2-Experimental' -} - -{ #category : #accessing } -RTSelectiveShape >> backgroundColor: aValueOrAOneArgBlock [ - self backgroundColorElement: [ :e | aValueOrAOneArgBlock rtValue: e model ]. -] - -{ #category : #accessing } -RTSelectiveShape >> backgroundColorElement: aValueOrAOneArgBlock [ - backgroundColor := aValueOrAOneArgBlock -] - -{ #category : #accessing } -RTSelectiveShape >> backgroundColorFor: element [ - color := backgroundColor rtValue: element. - color isColor ifFalse: [ - color := Color colorFrom: color ]. - ^ color -] - -{ #category : #accessing } -RTSelectiveShape >> color: aValue [ - labelShape color: aValue -] - -{ #category : #configuration } -RTSelectiveShape >> defaultHeight [ - ^ 30 -] - -{ #category : #configuration } -RTSelectiveShape >> defaultWidth [ - ^ 30 -] - -{ #category : #private } -RTSelectiveShape >> getShapeBySymbol: symbol [ - symbol = #ellipse ifTrue: [ ^ RTEllipse new]. - ^ RTPolygon perform: symbol. -] - -{ #category : #accessing } -RTSelectiveShape >> if: block shapeElement: block2 [ - | oldShape | - oldShape := self shapeElement. - ^ self shapeElement: [ :e | (block rtValue: e) - ifTrue: [ block2 rtValue: e ] - ifFalse: [ oldShape rtValue: e ] ] -] - -{ #category : #initialization } -RTSelectiveShape >> initialize [ - super initialize. - self labelShape: RTTextPath new. -] - -{ #category : #accessing } -RTSelectiveShape >> labelShape [ - ^ labelShape -] - -{ #category : #accessing } -RTSelectiveShape >> labelShape: aLabelShape [ - labelShape := aLabelShape -] - -{ #category : #accessing } -RTSelectiveShape >> labelShapeDo: aBlock [ - aBlock value: labelShape -] - -{ #category : #accessing } -RTSelectiveShape >> shape: aShapeOrSymbol [ - self shapeElement: [ :e| aShapeOrSymbol rtValue: e model ] -] - -{ #category : #accessing } -RTSelectiveShape >> shapeElement [ - ^ shape -] - -{ #category : #accessing } -RTSelectiveShape >> shapeElement: aShapeOrSymbol [ - shape := aShapeOrSymbol. -] - -{ #category : #accessing } -RTSelectiveShape >> shapeFor: anElement [ - | res | - res := shape rtValue: anElement. - res isSymbol ifTrue: [ - res := self getShapeBySymbol: res ]. - ^ res - -] - -{ #category : #accessing } -RTSelectiveShape >> text: aBlockOrSymbol [ - self labelShape text: aBlockOrSymbol -] - -{ #category : #public } -RTSelectiveShape >> trachelShapeFor: anElement [ - | label bshape | - bshape := (self shapeFor: anElement) trachelShapeFor: anElement. - bshape - extent: (self widthFor: anElement) @ (self heightFor: anElement); - color: (self backgroundColorFor: anElement). - label := self labelShape trachelShapeFor: anElement. - ^ TRCompositeShape new - addShape: bshape; - addShape: label; - yourself -] - -{ #category : #hooks } -RTSelectiveShape >> updateFor: anElement trachelShape: trachelShape [ - (self shapeFor: anElement) updateFor: anElement trachelShape: trachelShape shapes first. - trachelShape shapes first - extent: (self widthFor: anElement) @ (self heightFor: anElement); - color: (self backgroundColorFor: anElement). - labelShape updateFor: anElement trachelShape: trachelShape shapes second -] diff --git a/src/Roassal2/RTSetEdgeAlpha.class.st b/src/Roassal2/RTSetEdgeAlpha.class.st deleted file mode 100644 index cd7b213d8..000000000 --- a/src/Roassal2/RTSetEdgeAlpha.class.st +++ /dev/null @@ -1,85 +0,0 @@ -" -A RTSetEdgeAlpha is an interaction raises the transparency of the incoming and outgoing edges for a given element when the mouse enter the element. - --=-=-=-= - | v es | - v := RTView new. - es := RTEllipse new elementsOn: RTShape withAllSubclasses. - v addAll: es. - RTWeightedCircleLayout new - initialRadius: 200; - on: es. - RTMetricNormalizer new - elements: es; - normalizeSize: #numberOfMethods - min: 10 - max: 35 - using: #sqrt; - normalizeColor: #numberOfLinesOfCode. - RTEdgeBuilder new - view: v; - objects: RTShape withAllSubclasses; - shape: (RTLine new color: Color blue); - connectFrom: #yourself toAll: #dependentClasses. - es @ RTPopup @ RTSetEdgeAlpha. - ^ v --=-=-=-= -" -Class { - #name : #RTSetEdgeAlpha, - #superclass : #RTInteraction, - #instVars : [ - 'highAlpha', - 'lowAlpha', - 'evaluationBlock' - ], - #category : #'Roassal2-Interactions' -} - -{ #category : #initialization } -RTSetEdgeAlpha >> initialize [ - super initialize. - highAlpha := 1.0. - lowAlpha := 0.4. - evaluationBlock := #connectedEdges -] - -{ #category : #hooks } -RTSetEdgeAlpha >> initializeElement: element [ - self setLowAlphaFor: element. - element - when: TRMouseEnter - do: [ :e | - self setHighAlphaFor: element. - e signalUpdate ]. - element - when: TRMouseLeave - do: [ :e | - self setLowAlphaFor: element. - e signalUpdate ] -] - -{ #category : #'public - setting' } -RTSetEdgeAlpha >> onlyIncomingEdges [ - evaluationBlock := #incomingEdges -] - -{ #category : #'public - setting' } -RTSetEdgeAlpha >> onlyOutgoingEdges [ - evaluationBlock := #outgoingEdges -] - -{ #category : #initialization } -RTSetEdgeAlpha >> setAlpha: alpha for: element [ - (evaluationBlock rtValue: element) do: [ :e | e trachelShape allColor: (e trachelShape color alpha: alpha) ] -] - -{ #category : #utility } -RTSetEdgeAlpha >> setHighAlphaFor: element [ - self setAlpha: highAlpha for: element -] - -{ #category : #utility } -RTSetEdgeAlpha >> setLowAlphaFor: element [ - self setAlpha: lowAlpha for: element -] diff --git a/src/Roassal2/RTShape.class.st b/src/Roassal2/RTShape.class.st deleted file mode 100644 index 4993f629b..000000000 --- a/src/Roassal2/RTShape.class.st +++ /dev/null @@ -1,280 +0,0 @@ -" -A RTShape is an element factory. A shape is shared amoung all the elements created by the shape. We therefore have the following relations - -An ''element'' is a graphical representation of an arbitrary object. An element is combined with ''shapes'' to define its visual representation. A shape describes a visual primitive representation such as a box, a circle, a line or a textual label. Shapes can be combined to form elaborated shapes. An end user sees elements and interacts with these elements by using the mouse and keyboard. A Roassal element is a compound object that contains (i) a two dimensional spatial location; (ii) a set of interactions; (iii) a combination of shapes; (iv) a model, which is any arbitrary object that belongs to the domain model provided by the user. - - -shape := RTBox new size: 10. -e1 := shape elementOn: 'hello'. -e2 := shape elementOn: 'world'. - -self assert: e1 shape == e2 shape. - -self assert: e1 shape ~~ e1 trachelShape. -self assert: (e1 shape isKindOf: RTBox). -self assert: (e1 trachelShape isKindOf: TRBoxShape). - -self assert: e1 trachelShape ~~ e2 trachelShape. - -" -Class { - #name : #RTShape, - #superclass : #RTObject, - #instVars : [ - 'color', - 'scale', - 'rotation' - ], - #category : #'Roassal2-Shapes' -} - -{ #category : #public } -RTShape class >> + anotherShape [ - ^ self new + anotherShape -] - -{ #category : #public } -RTShape class >> color: aColor [ - ^ self new color: aColor -] - -{ #category : #accessing } -RTShape class >> compoundElement [ - - ^ self instance compoundElement -] - -{ #category : #public } -RTShape class >> compoundElementOn: aModel [ - - ^ self instance compoundElementOn: aModel -] - -{ #category : #public } -RTShape class >> compoundElementsOn: models [ - "Return a group of elements, which is a kind of ordered collection" - | group aShape | - group := RTGroup new. - aShape := self instance. - models do: [ :m | - group add: (aShape compoundElementOn: m) ]. - ^ group -] - -{ #category : #initialization } -RTShape class >> defaultColor [ - - ^ Color veryVeryLightGray -] - -{ #category : #accessing } -RTShape class >> element [ - - ^ self instance element -] - -{ #category : #public } -RTShape class >> elementOn: aModel [ - "Create an element with aModel as model and an instance of myself (which could be a subclass) as shape" - ^ self instance elementOn: aModel -] - -{ #category : #public } -RTShape class >> elementsOn: models [ - "Return a group of elements, which is a kind of ordered collection" - | group aShape | - group := RTGroup new. - aShape := self instance. - models do: [ :m | - group add: (aShape elementOn: m) ]. - ^ group -] - -{ #category : #accessing } -RTShape class >> instance [ - ^ self new -] - -{ #category : #public } -RTShape >> + anotherShape [ - "Return a composed shape" - ^ RTCompositeShape with: self with: anotherShape instance -] - -{ #category : #hooks } -RTShape >> borderColor: aBlockOrAColorOrSymbol [ - "This method is empty, and may be overideen in subclasses. Having this method is empty enables RTLine and other to receive that message, and doing anything." -] - -{ #category : #hooks } -RTShape >> borderWidth: aBlockOrAColorOrSymbol [ - "This method is empty, and may be overideen in subclasses. Having this method is empty enables RTLine and other to receive that message, and doing anything." -] - -{ #category : #accessing } -RTShape >> color [ - ^ color -] - -{ #category : #accessing } -RTShape >> color: aValueOrAOneArgBlock [ - "aValueOrAOneArgBlock is applied on the object model" - self colorElement: [ :anElement | aValueOrAOneArgBlock rtValue: anElement model ] -] - -{ #category : #accessing } -RTShape >> colorElement: aBlock [ - color := aBlock -] - -{ #category : #rendering } -RTShape >> colorFor: anElement [ - ^ color rtValue: anElement -] - -{ #category : #public } -RTShape >> compoundElement [ - - ^ RTCompoundElement new addShape: self; yourself -] - -{ #category : #public } -RTShape >> compoundElementOn: aModel [ - - ^ RTCompoundElement new model: aModel; addShape: self; yourself -] - -{ #category : #public } -RTShape >> compoundElementsOn: models [ - | group | - group := RTGroup new. - models do: [ :m | group add: (self compoundElementOn: m) ]. - ^ group -] - -{ #category : #configuration } -RTShape >> defaultColor [ - "Return the color used by myself." - ^ self class defaultColor -] - -{ #category : #public } -RTShape >> element [ - - ^ RTElement new addShape: self; yourself -] - -{ #category : #public } -RTShape >> elementOn: aModel [ - - ^ RTElement new model: aModel; addShape: self; yourself -] - -{ #category : #public } -RTShape >> elementsOn: models [ - | group | - group := RTGroup new. - models do: [ :m | group add: (self elementOn: m) ]. - ^ group -] - -{ #category : #accessing } -RTShape >> fillColor [ - ^ self color -] - -{ #category : #accessing } -RTShape >> fillColor: arg [ - ^ self color: arg -] - -{ #category : #accessing } -RTShape >> fillColorElement: arg [ - ^ self colorElement: arg -] - -{ #category : #accessing } -RTShape >> geometryFor: anElement [ - "Return a geometric representation of the shape. A geometric representation is used for computing intersections, overlapping, etc." - - ^ GRectangle - origin: anElement encompassingRectangle origin - corner: anElement encompassingRectangle corner -] - -{ #category : #initialization } -RTShape >> initialize [ - super initialize. - color := self defaultColor. - rotation := 0. - scale := 1. -] - -{ #category : #accessing } -RTShape >> instance [ - ^ self -] - -{ #category : #accessing } -RTShape >> rotation [ - ^ rotation -] - -{ #category : #accessing } -RTShape >> rotation: aValueOrAOneArgBlock [ - self rotationElement: [ :anElement | aValueOrAOneArgBlock rtValue: anElement model ] -] - -{ #category : #accessing } -RTShape >> rotationElement: aBlock [ - rotation := aBlock -] - -{ #category : #rendering } -RTShape >> rotationFor: anElement [ - ^ rotation rtValue: anElement -] - -{ #category : #accessing } -RTShape >> scale [ - ^ scale -] - -{ #category : #accessing } -RTShape >> scale: aValueOrAOneArgBlock [ - self scaleElement: [ :anElement | aValueOrAOneArgBlock rtValue: anElement model ] -] - -{ #category : #accessing } -RTShape >> scaleElement: aBlock [ - scale := aBlock -] - -{ #category : #rendering } -RTShape >> scaleFor: anElement [ - ^ scale rtValue: anElement -] - -{ #category : #hooks } -RTShape >> trachelShapeClass [ - self subclassResponsibility -] - -{ #category : #public } -RTShape >> trachelShapeFor: anElement [ - | trachelShape | - trachelShape := self trachelShapeClass new. - self updateFor: anElement trachelShape: trachelShape. - ^ trachelShape -] - -{ #category : #hooks } -RTShape >> updateFor: edgeOrElement [ - self updateFor: edgeOrElement trachelShape: edgeOrElement trachelShape -] - -{ #category : #hooks } -RTShape >> updateFor: edgeOrElement trachelShape: trachelShape [ - - self subclassResponsibility -] diff --git a/src/Roassal2/RTShapeBuilder.class.st b/src/Roassal2/RTShapeBuilder.class.st deleted file mode 100644 index b2e29a94d..000000000 --- a/src/Roassal2/RTShapeBuilder.class.st +++ /dev/null @@ -1,696 +0,0 @@ -Class { - #name : #RTShapeBuilder, - #superclass : #RTAbstractBuilder, - #instVars : [ - 'shape', - 'createdElements', - 'shapeInitializer' - ], - #category : #'Roassal2-Builder-Common' -} - -{ #category : #'public - shapes' } -RTShapeBuilder >> arc [ - self shape: RTArc new -] - -{ #category : #'public - shape - edges' } -RTShapeBuilder >> arrowedBezier [ - self shape: (RTArrowedLine new line: RTBezier3Line new). -] - -{ #category : #'public - shape - edges' } -RTShapeBuilder >> arrowedLine [ - self shape: RTArrowedLine new -] - -{ #category : #'public - shape - attach point on edges' } -RTShapeBuilder >> attachPoint: aBlockOrSymbol [ - aBlockOrSymbol rtValue: shape -] - -{ #category : #'public - shape - edges' } -RTShapeBuilder >> bezierLineFollowing: aFollowBlock [ - "aFollowBlock return an element" - self shape: (RTBezierLine new follow: aFollowBlock) -] - -{ #category : #'public - shape - edges' } -RTShapeBuilder >> bezierLineUsingObjects: aFollowBlock [ - "aFollowBlock return an element" - | elements | - self error: 'Method is not finished!!!'. - elements := #(). - self shape: (RTBezierLine new controllingElements: elements) - - -] - -{ #category : #'public - shape - edges' } -RTShapeBuilder >> bezierLineUsingObjects: someObjects inView: view [ - "some Objects are objects represented in a view" - | elements | - elements := view elementsFromModels: someObjects. - self shape: (RTBezierLine new controllingElements: elements) - - -] - -{ #category : #accessing } -RTShapeBuilder >> borderColor [ - ^ self current borderColor -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> box [ - self shape: RTBox new -] - -{ #category : #'public - shape - attach point on edges' } -RTShapeBuilder >> centeredAttachPoint [ - "Set the vertical attach point for the edges to be built" - self attachPoint: #withCenteredAttachPoint - - -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> circle [ - self shape: RTEllipse new -] - -{ #category : #accessing } -RTShapeBuilder >> color [ - ^ self current color -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> composite: aBlock [ - | newShape | - newShape := RTCompositeShape new. - aBlock value: newShape. - shape := newShape. -] - -{ #category : #accessing } -RTShapeBuilder >> createdElements [ - ^ createdElements -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> cross [ - | s | - s := RTCompositeShape new. - s add: (RTBox new height: 10; width: 3). - s add: (RTBox new height: 3; width: 10). - - ^ self shape: s -] - -{ #category : #accessing } -RTShapeBuilder >> current [ - "Return the shape currently built" - ^ shape -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> diamond [ - shape := RTPolygon diamond -] - -{ #category : #'public - shape - edges' } -RTShapeBuilder >> directedLine [ - self shape: RTDirectedLine new -] - -{ #category : #'reflective operations' } -RTShapeBuilder >> doesNotUnderstand: aMessage [ - "we simply forward the messages we do not understand - to the actual shape implementation" - self shape - perform: aMessage selector - withArguments: aMessage arguments -] - -{ #category : #'public - shape - edges' } -RTShapeBuilder >> doubleArrowedLine [ - self shape: RTDoubleArrowedLine new -] - -{ #category : #'public - building' } -RTShapeBuilder >> edgeFrom: element1 to: element2 [ - "Return a new edge that goes from element1 to element2" - self hasSetLineShape ifFalse: [ self line ]. - ^ shape edgeFrom: element1 to: element2 -] - -{ #category : #'public - building' } -RTShapeBuilder >> elementOn: object [ - ^ (self elementsOn: (RTGroup with: object)) first -] - -{ #category : #'public - building' } -RTShapeBuilder >> elementsOn: objects [ - | answer | - self hasSetShape ifFalse: [ self rectangle ]. - answer := shape elementsOn: objects. - createdElements addAll: answer. - ^ answer -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> ellipse [ - self shape: RTEllipse new -] - -{ #category : #'public - building' } -RTShapeBuilder >> ensure: aClassShape [ - "Make sure the current shape is instance of aClassShapeName. If no, then set it" - (shape isKindOf: aClassShape) - ifFalse: [ self shape: aClassShape new ] -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> extensibleLabel [ - ^ self shape: RTExtensibleLabel new -] - -{ #category : #accessing } -RTShapeBuilder >> fillColor [ - ^ self color -] - -{ #category : #'public - text shape' } -RTShapeBuilder >> fontSize: aValueOrASymbolOrABlock [ - "Make sure we have something that this message is meaningful" - self assert: [ #(RTLabel #RTCompositeShape) includes: shape class name ]. - - shape class == RTLabel ifTrue: [ shape height: aValueOrASymbolOrABlock. ^ self ]. - shape class == RTCompositeShape ifTrue: [ (shape allShapes select: [ :s | s class == RTLabel ]) do: [ :s | s height: aValueOrASymbolOrABlock ] ] -] - -{ #category : #'public - shape - edges' } -RTShapeBuilder >> gradientLineFrom: fromColor to: toColor [ - self shape: (RTGradientColoredLine new colors: (Array with: fromColor with: toColor); - precision: 100; - gradientColorShape) -] - -{ #category : #'public - testing' } -RTShapeBuilder >> hasSetLineShape [ - "A bit hackish..." - ^ (shape isKindOf: RTAbstractLine) or: [ (shape isKindOf: RTCompositeShape) and: [ shape allShapes anyOne isKindOf: RTAbstractLine ] ] -] - -{ #category : #'public - testing' } -RTShapeBuilder >> hasSetShape [ - ^ shape class ~~ RTNoShape -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> heptagon [ - shape := RTPolygon heptagon -] - -{ #category : #'public - shape - attach point on edges' } -RTShapeBuilder >> horizontalAttachPoint [ - "Set the vertical attach point for the edges to be built" - self attachPoint: #withHorizontalAttachPoint - - -] - -{ #category : #'public - shape - edges' } -RTShapeBuilder >> horizontalBezierLine [ - self shape: RTBezierLine horizontal -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> if: conditionBlock borderColor: colorBlock [ - "If conditionBlock is evaluated at true, then colorBlock is used to set the color of the node. Both conditionBlock and colorBlock are evaluated with the model value of the node." - | oldBlockOrValue | - oldBlockOrValue := self borderColor. - ^self borderColor: [ :aModel | (conditionBlock rtValue: aModel) - ifTrue: [ colorBlock rtValue: aModel ] - ifFalse: [ - "Having to create a new element is rather ugly. - Ideally, the oldBlockOrValue has to be 'unwrapped' for the translation" - oldBlockOrValue rtValue: (RTElement on: aModel) ]]. - - - -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> if: conditionBlock color: colorBlock [ - "If conditionBlock is evaluated at true, then colorBlock is used to set the color of the node. Both conditionBlock and colorBlock are evaluated with the model value of the node." - | oldBlockOrValue | - oldBlockOrValue := self color. - ^self color: [ :aModel | (conditionBlock rtValue: aModel) - ifTrue: [ colorBlock rtValue: aModel ] - ifFalse: [ - oldBlockOrValue rtValue: (RTElement on: aModel) ]]. - - -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> if: conditionBlock fillColor: colorBlock [ - "If conditionBlock is evaluated at true, then colorBlock is used to set the color of the node. Both conditionBlock and colorBlock are evaluated with the model value of the node." - | oldBlockOrValue | - oldBlockOrValue := self fillColor. - self fillColor: [ :aModel | (conditionBlock rtValue: aModel) - ifTrue: [ colorBlock rtValue: aModel ] - ifFalse: [ - "Having to create a new element is rather ugly. - Ideally, the oldBlockOrValue has to be 'unwrapped' for the translation" - oldBlockOrValue rtValue: (RTElement on: aModel) ]]. - - - -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> ifElement: conditionBlock borderColor: colorBlock [ - "If conditionBlock is evaluated at true, then colorBlock is used to set the color of the node. Both conditionBlock and colorBlock are evaluated with the model value of the node." - | oldBlockOrValue | - oldBlockOrValue := self borderColor. - ^self borderColorElement: [ :anElement | (conditionBlock rtValue: anElement) - ifTrue: [ colorBlock rtValue: anElement ] - ifFalse: [ - "Having to create a new element is rather ugly. - Ideally, the oldBlockOrValue has to be 'unwrapped' for the translation" - oldBlockOrValue rtValue: anElement ]]. - - - -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> ifElement: conditionBlock fillColor: colorBlock [ - "If conditionBlock is evaluated at true, then colorBlock is used to set the color of the node. Both conditionBlock and colorBlock are evaluated with the model value of the node." - | oldBlockOrValue | - oldBlockOrValue := self fillColor. - ^self fillColorElement: [ :anElement | (conditionBlock rtValue: anElement) - ifTrue: [ colorBlock rtValue: anElement ] - ifFalse: [ - "Having to create a new element is rather ugly. - Ideally, the oldBlockOrValue has to be 'unwrapped' for the translation" - oldBlockOrValue rtValue: anElement ]]. - - - -] - -{ #category : #initialization } -RTShapeBuilder >> initialize [ - super initialize. - self reset. - shapeInitializer := #yourself -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> label [ - shape := RTLabel new -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> labeledAs: aBlock [ - | label oldShape | - label := RTLabel new text: aBlock. - oldShape := shape. - shape := RTCompositeShape new. - shape add: oldShape. - shape add: label. - - shape vertical. - shapeInitializer rtValue: shape. - - ^ label -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> labeledBox [ - " - A box with a label in it. - - b := RTMondrian new. - b shape labeledBox. - b nodes: Dictionary withAllSubclasses. - b edges connectFrom: #superclass. - b layout sugiyama. - b - " - self composite: [ :comp | - comp add: RTBox new. - comp add: RTLabel new. - comp allOfSameSizeWithPadding. - ] -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> labeledBoxUsing: aValueOrABlockOrASymbol [ - " - A box with a label in it. - - b := RTMondrian new. - b shape labeledBoxUsing: [:value | 'Value ', value asString ]. - b nodes: Dictionary withAllSubclasses. - b edges connectFrom: #superclass. - b layout sugiyama. - b - - Another example - -b := RTMondrian new. -b shape labeledBoxUsing: [:value | 'Value ', value asString ]. - -b nodes: (1 to: 100). -b layout grid. -b - " - self composite: [ :comp | - comp add: RTBox new. - comp add: (RTLabel new text: aValueOrABlockOrASymbol). - comp allOfSameSizeWithPadding. - ] -] - -{ #category : #'public - shape - edges' } -RTShapeBuilder >> line [ - self shape: RTLine new -] - -{ #category : #'public - shape - edges' } -RTShapeBuilder >> lineDualWidth [ - "This is a particular kind of lines. No repetition are allowed and edges must not be directional. Here is an example: --=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -edges := { 1 -> 2 . 1 -> 2 . 1 -> 3 . 5 -> 3 . 1 -> 3 . 1 -> 3 . 3 -> 1 . 5 -> 1 . 5 -> 2 }. -nodes := ((edges collect: #key), (edges collect: #value)) asSet. - -toValue := [ :fromValue | (edges select: [ :assoc | assoc key = fromValue ]) collect: #value as: Set ]. -weightValue := [ :fromValue :toValue | (edges select: [ :assoc | assoc key = fromValue and: [ assoc value = toValue ] ]) size ]. - -b := RTMondrian new. -b shape label. -b nodes: nodes. - -b shape lineDualWidth - color: Color blue trans; - withShorterDistanceAttachPoint; - widthFrom: [ :anEdge | weightValue value: anEdge from model value: anEdge to model ]; - widthTo: [ :anEdge | weightValue value: anEdge to model value: anEdge from model ]. -b edges - noRepetition; noBidirectional; - connectToAll: [ :fromValue | toValue value: fromValue ]. -b layout force charge: -300. -b --=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -" - - self shape: RTLineDualWidth new -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> linearFillColor: block within: groupOfObjects [ - "Set the linear fill color for the nodes. The gradient goes from white to black. anObject could be a symbol, a block or a value. anObject is evaluated against the model of the node to be paint. aGroup is a collection of the model values. This is where the maximum is looked into." - - | max | - "If the collection is empty, then we return an arbitrary color. - If the script is properly done, the color should not be used" - groupOfObjects isEmpty ifTrue: [ ^ Color red ]. - - max := groupOfObjects maxValue: block. - self current color: [ :v | Color grayScale256: 256 - ((block rtValue: v) max: max in: (1 to: 256)) ] -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> noBorder [ - self borderColor: Color transparent -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> octagon [ - shape := RTPolygon octagon -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> orthoHorizontalLine [ - ^ self shape: RTStyledMultiLine new orthoHorizontal -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> orthoVerticalLine [ - ^ self shape: (RTStyledMultiLine new withVerticallAttachPoint; orthoVertical) -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> pentagon [ - shape := RTPolygon pentagon -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> rectangle [ - self box -] - -{ #category : #accessing } -RTShapeBuilder >> reset [ - self resetShape. - self resetCreatedElements -] - -{ #category : #accessing } -RTShapeBuilder >> resetCreatedElements [ - createdElements := OrderedCollection new -] - -{ #category : #accessing } -RTShapeBuilder >> resetShape [ - shape := RTNoShape instance -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> rhomboid [ - shape := RTPolygon rhomboid -] - -{ #category : #'public - building' } -RTShapeBuilder >> setUpElement: anElement [ - self hasSetShape ifFalse: [ self rectangle ]. - ^ anElement + shape -] - -{ #category : #'public - building' } -RTShapeBuilder >> setUpElements: elements [ - self hasSetShape ifFalse: [ self rectangle ]. - ^ elements + shape -] - -{ #category : #accessing } -RTShapeBuilder >> shape [ - "Return the shape currently built" - ^ shape -] - -{ #category : #accessing } -RTShapeBuilder >> shape: aRoassalShape [ - "Useful to set a shape in the builder. For example, this method may be used when overriding the method createShapeBuilder in a Builder" - shape := aRoassalShape. - shapeInitializer rtValue: shape. - ^ aRoassalShape -] - -{ #category : #accessing } -RTShapeBuilder >> shapeInitializer: aBlock [ - "Invoked after a shape has been designed" - shapeInitializer := aBlock -] - -{ #category : #'public - shape - attach point on edges' } -RTShapeBuilder >> shortestDistanceAttachPoint [ - "Set the vertical attach point for the edges to be built" - self attachPoint: #withShorterDistanceAttachPoint - - - -] - -{ #category : #'public - shape - attach point on edges' } -RTShapeBuilder >> shortestDistanceAttachPointWithJump [ - "Set the vertical attach point for the edges to be built" - self attachPoint: #withShorterDistanceAttachPointWithJump - - - -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> star [ - shape := RTPolygon star -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> styledLabel [ - shape := RTStyledLabel new -] - -{ #category : #'public - shape - edges' } -RTShapeBuilder >> styledLine [ - " - Set a styled line in the shape builder. A styled line could be dashed, and with different styles. - Have a look to RTStyledMultiLine for the complete API. - - Here is an example: --=-=-= -v := RTView new. - -elements := RTEllipse new size: 20; elementsOn: (1 to: 10). -v addAll: elements. - -eb := RTEdgeBuilder new. - -eb shape styledLine dashedLine arrowHead. - -eb view: v. -eb connectFrom: [ :value | value // 2 ]. - -RTTreeLayout on: elements. -v --=-=-= - " - self shape: RTStyledMultiLine new -] - -{ #category : #'public - shapes - texting' } -RTShapeBuilder >> text [ - self shape: RTLabel new -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> triangle [ - shape := RTPolygon triangle -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> vee [ - shape := RTPolygon vee -] - -{ #category : #'public - shape - attach point on edges' } -RTShapeBuilder >> verticalAttachPoint [ - "Set the vertical attach point for the edges to be built" - self attachPoint: #withVerticallAttachPoint - - -] - -{ #category : #'public - shape - edges' } -RTShapeBuilder >> verticalBezierLine [ - self shape: RTBezierLine vertical -] - -{ #category : #'public - shapes' } -RTShapeBuilder >> withBorder [ - self borderColor: Color black -] - -{ #category : #'public - shapes - texting' } -RTShapeBuilder >> withText [ - ^ self withText: #yourself -] - -{ #category : #'public - shapes - texting' } -RTShapeBuilder >> withText: aSymbolOrABlock [ - shape := shape + (RTLabel new text: aSymbolOrABlock). - ^ shape -] - -{ #category : #'public - shapes - texting' } -RTShapeBuilder >> withText: aSymbolOrABlock color: aColor [ - shape := shape + (RTLabel new color: aColor; text: aSymbolOrABlock). - ^ shape -] - -{ #category : #'public - shapes - texting' } -RTShapeBuilder >> withText: aSymbolOrABlock height: aHeightAsIntegerOrBlock [ - shape := shape + (RTLabel new height: aHeightAsIntegerOrBlock; text: aSymbolOrABlock). - ^ shape -] - -{ #category : #'public - shapes - texting' } -RTShapeBuilder >> withText: aSymbolOrABlock height: aHeightAsIntegerOrBlock color: aColor [ - shape := shape + (RTLabel new height: aHeightAsIntegerOrBlock; color: aColor; text: aSymbolOrABlock). - ^ shape -] - -{ #category : #'public - shapes - texting' } -RTShapeBuilder >> withTextAbove [ - ^ self withTextAbove: #yourself -] - -{ #category : #'public - shapes - texting' } -RTShapeBuilder >> withTextAbove: aSymbolOrABlock [ - | newShape | - newShape := RTCompositeShape new. - newShape add: (RTLabel new text: aSymbolOrABlock). - newShape add: shape. - newShape vertical. - newShape setAutomaticRelayout. - shape := newShape. -] - -{ #category : #'public - text shape' } -RTShapeBuilder >> withTextBelow [ - ^ self withTextBelow: #yourself -] - -{ #category : #'public - text shape' } -RTShapeBuilder >> withTextBelow: aSymbolOrABlock [ - | newShape | - newShape := RTCompositeShape new. - newShape add: shape. - newShape add: (RTLabel new text: aSymbolOrABlock). - newShape vertical. - newShape setAutomaticRelayout. - shape := newShape. -] - -{ #category : #'public - shapes - texting' } -RTShapeBuilder >> withTextColor: aColorOrABlock [ - "Set the color of the text. Should be used only with a composite Shape" - self assert: [ shape class == RTCompositeShape ] description: 'This method should be used only if a text has been added to a box or an ellipse'. - (shape shapesInstancesOf: RTLabel) do: [ :l | l color: aColorOrABlock ] -] - -{ #category : #'public - shapes - texting' } -RTShapeBuilder >> withTextOnTheLeft [ - ^ self withTextOnTheLeft: #yourself -] - -{ #category : #'public - shapes - texting' } -RTShapeBuilder >> withTextOnTheLeft: aSymbolOrABlock [ - | newShape | - newShape := RTCompositeShape new. - newShape add: (RTLabel new text: aSymbolOrABlock). - newShape add: shape. - newShape horizontal. - newShape setAutomaticRelayout. - shape := newShape. -] - -{ #category : #'public - shapes - texting' } -RTShapeBuilder >> withTextOnTheRight [ - ^ self withTextOnTheRight: #yourself -] - -{ #category : #'public - shapes - texting' } -RTShapeBuilder >> withTextOnTheRight: aSymbolOrABlock [ - | newShape | - newShape := RTCompositeShape new. - newShape add: shape. - newShape add: (RTLabel new text: aSymbolOrABlock). - newShape horizontal. - newShape setAutomaticRelayout. - shape := newShape. -] diff --git a/src/Roassal2/RTShapeBuilderExample.class.st b/src/Roassal2/RTShapeBuilderExample.class.st deleted file mode 100644 index c52cd08d1..000000000 --- a/src/Roassal2/RTShapeBuilderExample.class.st +++ /dev/null @@ -1,66 +0,0 @@ -Class { - #name : #RTShapeBuilderExample, - #superclass : #RTObject, - #category : #'Roassal2-Builder-Common' -} - -{ #category : #example } -RTShapeBuilderExample >> example01 [ - " - self new example01 - " - | builder v | - v := RTView new. - builder := RTShapeBuilder new. - builder circle - size: 20; - fillColor: (RTNColorLinearNormalizer new - context: (Collection withAllSubclasses); - command: #numberOfMethods; - lowColor: Color green; - highColor: Color red); - withText. - - v addAll: (builder elementsOn: Collection withAllSubclasses). - RTCellLayout new gapSize: 1; on: v elements. - v build. - ^ v view -] - -{ #category : #example } -RTShapeBuilderExample >> example02 [ - " - self new example02 - " - | builder v | - v := RTView new. - builder := RTShapeBuilder new. - builder rectangle - size: 50; - fillColor: (Color purple alpha: 0.3); - withText. - v addAll: (builder elementsOn: (1 to: 50)). - RTCellLayout on: v elements. - v build. - ^ v view -] - -{ #category : #example } -RTShapeBuilderExample >> example03 [ - " - self new example03 - " - | builder v els | - v := RTView new. - builder := RTShapeBuilder new. - builder rectangle - width: 50; - fillColor: (Color purple alpha: 0.3); - withText. - els := builder elementsOn: (1 to: 50). - els @ RTDraggable. - v addAll: els. - RTCellLayout on: v elements. - v build. - ^ v view -] diff --git a/src/Roassal2/RTShapeBuilderTest.class.st b/src/Roassal2/RTShapeBuilderTest.class.st deleted file mode 100644 index a381180dd..000000000 --- a/src/Roassal2/RTShapeBuilderTest.class.st +++ /dev/null @@ -1,362 +0,0 @@ -Class { - #name : #RTShapeBuilderTest, - #superclass : #RTTest, - #instVars : [ - 'builder', - 'shapes' - ], - #category : #'Roassal2-Builder-Common' -} - -{ #category : #running } -RTShapeBuilderTest >> setUp [ - super setUp. - builder := RTShapeBuilder new -] - -{ #category : #'attach point' } -RTShapeBuilderTest >> testAttachPoint01 [ - - builder line; verticalAttachPoint. - self assert: RTVerticalAttachPoint equals: builder shape attachPoint class -] - -{ #category : #'attach point' } -RTShapeBuilderTest >> testAttachPoint02 [ - - builder line; horizontalAttachPoint. - self assert: builder shape attachPoint class equals: RTHorizontalAttachPoint -] - -{ #category : #'attach point' } -RTShapeBuilderTest >> testAttachPoint03 [ - - builder line; centeredAttachPoint. - self assert: builder shape attachPoint class equals: RTCenteredAttachPoint -] - -{ #category : #tests } -RTShapeBuilderTest >> testBasic [ - - self assert: builder shape class == RTNoShape -] - -{ #category : #'bezier line' } -RTShapeBuilderTest >> testBezierLine01 [ - - | v es eb centralPoint | - v := RTView new. - es := (RTEllipse new size: 15) elementsOn: (1 to: 15). - v addAll: es. - RTCircleLayout on: es. - - centralPoint := (RTEllipse new size: 10; color: Color red) elementOn: -1. - centralPoint translateTo: es encompassingRectangle center. - v add: centralPoint. - - es @ RTLabeled. - - eb := RTEdgeBuilder new. - eb view: v. - eb shape bezierLineUsingObjects: (Array with: -1) inView: v. - eb useAssociations: (Array with: 1->10 with: 2 -> 10 with: 3 -> 10 ). - -] - -{ #category : #'composite shapes' } -RTShapeBuilderTest >> testBorderColorAndCompositeShape [ - - | s label box | - builder box; withTextAbove; borderColor: Color black. - s := builder current. - shapes := s allShapes. - - "Checking the label" - self assert: shapes first class equals: RTLabel. - label := shapes first. - self assert: label color equals: RTLabel defaultColor. - - "Checking the box" - self assert: shapes second class equals: RTBox. - box := shapes second. - self assert: (box borderColorFor: RTElement new) equals: Color black. -] - -{ #category : #tests } -RTShapeBuilderTest >> testBox [ - builder rectangle. - self assert: builder shape class == RTBox -] - -{ #category : #tests } -RTShapeBuilderTest >> testBoxWithDimensions [ - | shape | - builder rectangle width: [ :v | v + 3 ]. - shape := builder shape. - self assert: shape class == RTBox. - self assert: (shape widthFor: (RTElement on: 5)) = 8 -] - -{ #category : #tests } -RTShapeBuilderTest >> testColor [ - - | e | - builder rectangle color: Color blue. - e := builder elementOn: 1. - - self assert: (e shape colorFor: e) equals: Color blue. - self assert: e trachelShape color equals: Color blue. -] - -{ #category : #tests } -RTShapeBuilderTest >> testColorIf [ - - | e | - builder box - if: true color: Color blue; - if: true color: Color red. - e := builder elementOn: 1. - - self assert: (e shape colorFor: e) equals: Color red. - self assert: e trachelShape color equals: Color red. -] - -{ #category : #'created elements' } -RTShapeBuilderTest >> testCreatingElements [ - builder rectangle. - self assert: builder createdElements size = 0. - builder elementsOn: (1 to: 10). - self assert: builder createdElements size = 10. - builder reset. - self assert: builder createdElements size = 0. -] - -{ #category : #ensure } -RTShapeBuilderTest >> testEnsure [ - - builder rectangle color: Color red. - self assert: builder current class equals: RTBox. - self assert: ((builder current color) rtValue: RTElement new) equals: Color red. - builder ensure: RTBox. - self assert: ((builder current color) rtValue: RTElement new) equals: Color red. -] - -{ #category : #ensure } -RTShapeBuilderTest >> testEnsure2 [ - - builder rectangle color: Color red. - builder ensure: RTEllipse. - self assert: ((builder current color) rtValue: RTElement new) equals: (RTEllipse new color). -] - -{ #category : #tests } -RTShapeBuilderTest >> testFillColor [ - - self assert: builder color isColor. - self assert: builder fillColor isColor. -] - -{ #category : #'composite shapes' } -RTShapeBuilderTest >> testFillColorAndCompositeShape [ - - | s label box | - builder box; withTextAbove; fillColor: Color black. - s := builder current. - shapes := s allShapes. - - "Checking the label" - self assert: shapes first class equals: RTLabel. - label := shapes first. - self assert: (label colorFor: RTElement new) equals: RTLabel defaultColor. - - "Checking the box" - self assert: shapes second class equals: RTBox. - box := shapes second. - self assert: (box colorFor: RTElement new) equals: Color black. -] - -{ #category : #'composite shapes' } -RTShapeBuilderTest >> testFillColorAndCompositeShape02 [ - - | s label box | - builder box; withTextAbove; textColor: Color black; fillColor: Color red. - s := builder current. - shapes := s allShapes. - - "Checking the label" - self assert: shapes first class equals: RTLabel. - label := shapes first. - self assert: (label colorFor: RTElement new) equals: Color black. - - "Checking the box" - self assert: shapes second class equals: RTBox. - box := shapes second. - self assert: (box colorFor: RTElement new) equals: Color red. -] - -{ #category : #hasSetShape } -RTShapeBuilderTest >> testHasSetShape [ - - self deny: builder hasSetShape. - builder rectangle. - self assert: builder hasSetShape. - self deny: builder hasSetLineShape. - - builder line. - self assert: builder hasSetShape. - self assert: builder hasSetLineShape. -] - -{ #category : #'border color' } -RTShapeBuilderTest >> testIfBorderColor [ - - | e | - builder - box; - if: true borderColor: Color red. - - self assert: (builder borderColor rtValue: RTElement new) equals: Color red. - e := builder elementOn: 42. - - self assert: (e shape borderColorFor: e) equals: Color red -] - -{ #category : #tests } -RTShapeBuilderTest >> testLine [ - builder line. - self assert: builder shape class == RTLine -] - -{ #category : #'linear fill color' } -RTShapeBuilderTest >> testLinearFillColorWithin [ - | elements m | - m := (Array with: #(0) with: #(1) with: #(2)). - builder rectangle linearFillColor: #first within: m. - elements := builder elementsOn: m. - - self assert: elements first trachelShape color red > 0.9. - self assert: elements first trachelShape color green > 0.9. - self assert: elements first trachelShape color blue > 0.9. - self assert: elements third trachelShape color = Color black. -] - -{ #category : #tests } -RTShapeBuilderTest >> testOrthoLine [ - - | v eb | - v := RTView new. - v addAll: (RTBox new elementsOn: (1 to: 4)). - - eb := RTEdgeBuilder new. - eb shape orthoHorizontalLine color: Color veryLightGray. - eb view: v. - eb objects: (1 to: 4); - connectFrom: #yourself to: [ :vv | vv - 1 ]. - self assert: (v canvas shapes noneSatisfy: [ :s | s class == TRCompositeShape ]) - -] - -{ #category : #tests } -RTShapeBuilderTest >> testShape [ - | e1 e2 e3 | - builder rectangle - if: [ :o | o = 3 ] fillColor: Color blue; - if: [ :o | o = 4 ] fillColor: Color red. - e1 := builder elementOn: 3. - e2 := builder elementOn: 4. - e3 := builder elementOn: 5. - - self assert: (e1 shape colorFor: e1) = Color blue. - self assert: e1 trachelShape color = Color blue. - self assert: e2 trachelShape color = Color red. - self assert: e3 trachelShape color = Color veryVeryLightGray. -] - -{ #category : #tests } -RTShapeBuilderTest >> testShape2 [ - | e1 e2 e3 | - builder rectangle - ifElement: [ :el | el model = 3 ] fillColor: Color blue; - ifElement: [ :el | el model = 4 ] fillColor: Color red. - e1 := builder elementOn: 3. - e2 := builder elementOn: 4. - e3 := builder elementOn: 5. - - self assert: (e1 shape colorFor: e1) = Color blue. - self assert: e1 trachelShape color = Color blue. - self assert: e2 trachelShape color = Color red. - self assert: e3 trachelShape color = Color veryVeryLightGray. -] - -{ #category : #withText } -RTShapeBuilderTest >> testWithText [ - - | v el | - v := RTView new. - builder := RTShapeBuilder new. - builder circle - size: 50; - fillColor: (Color purple alpha: 0.3); - withText. - el := builder elementOn: 'hello'. - v add: el. - - self assert: el shape class == RTCompositeShape. - -] - -{ #category : #withText } -RTShapeBuilderTest >> testWithTextAndColor [ - - | v el | - v := RTView new. - builder := RTShapeBuilder new. - builder circle - size: 50; - fillColor: (Color purple alpha: 0.3); - withText; - withTextColor: Color red. - el := builder elementOn: 'hello'. - v add: el. - - self assert: el shape class == RTCompositeShape. - -] - -{ #category : #withText } -RTShapeBuilderTest >> testWithTextAndTranslation [ - - | v el | - v := RTView new. - builder := RTShapeBuilder new. - builder circle - size: 50; - fillColor: (Color purple alpha: 0.3); - withText. - el := builder elementOn: 'hello'. - el translateTo: 20 @ 20. - v add: el. - - self assert: el shape class == RTCompositeShape. - -] - -{ #category : #tests } -RTShapeBuilderTest >> testWithTextHeightColor [ - | b | - b := RTMondrian new. - b shape box - borderColor: Color black; - width: 40; - height: 30; - withText: #yourself height: 2 color: Color red. - - b node: 'hello'. - b build. - - self assert: b view numberOfElements equals: 1. - self assert: b view canvas numberOfShapes equals: 2. - - "That is weird... why 4 and not 2?" - self assert: b view canvas shapes second height equals: b view canvas shapes second font height. -] diff --git a/src/Roassal2/RTShapeTest.class.st b/src/Roassal2/RTShapeTest.class.st deleted file mode 100644 index 36704cd14..000000000 --- a/src/Roassal2/RTShapeTest.class.st +++ /dev/null @@ -1,126 +0,0 @@ -Class { - #name : #RTShapeTest, - #superclass : #RTTest, - #category : #'Roassal2-Core-Tests' -} - -{ #category : #tests } -RTShapeTest >> testArcShape [ - - | arc el | - arc := RTArc new. - el := arc element. - RTView new add: el. - el encompassingRectangle - -] - -{ #category : #tests } -RTShapeTest >> testBitmapShape [ - | shape e | - shape := RTBitmap new. - shape form: (TRPlatform current colorFormClass extent: 600 @ 523 depth: 32). - e := shape element. - self assert: e encompassingRectangle extent equals: 600 @ 523 -] - -{ #category : #tests } -RTShapeTest >> testBitmapShape2 [ - | shape e form | - shape := RTBitmap new. - shape form: #yourself. - form := TRPlatform current colorFormClass extent: 600 @ 523 depth: 32. - e := shape elementOn: form. - self assert: e trachelShape form equals: form. -] - -{ #category : #tests } -RTShapeTest >> testBitmapShape3 [ - | shape e form | - shape := RTBitmap new. - shape formElement: [ :anElement | anElement model ]. - form := TRPlatform current colorFormClass extent: 600 @ 523 depth: 32. - e := shape elementOn: form. - self assert: e trachelShape form equals: form. -] - -{ #category : #tests } -RTShapeTest >> testColoredShape [ - - | shape el | - shape := RTBox new color: Color red. - el := shape element. - RTView new add: el; setUpCanvas. - self assert: el trachelShape color = Color red -] - -{ #category : #composing } -RTShapeTest >> testComposing [ - | s1 s2 e v | - s1 := RTLabel new. - s2 := RTBox new. - e := RTElement on: 'hello'. - e + s1 + s2. - v := RTView new. - v add: e. - - self assert: v canvas numberOfShapes = 2. - - self assert: v canvas shapes first class == TRLabelShape. - self assert: v canvas shapes second class == TRBoxShape. - - -" self assert: c shape2 extent = (5@5). - self assert: c shape1 width > 10. -" -] - -{ #category : #composing } -RTShapeTest >> testComposingAndEvent [ - | s1 s2 e v t | - s1 := RTLabel new. - s2 := RTBox new. - e := RTElement on: 'hello'. - e + s1 + s2. - t := false. - e when: TRMouseClick do: [ :evt | t := true ]. - v := RTView new. - v add: e. - - self deny: t. - e announce: TRMouseClick. - self assert: t -] - -{ #category : #tests } -RTShapeTest >> testElementCreation [ - - | s | - s := RTBox new. - self assert: s element shape == s -] - -{ #category : #tests } -RTShapeTest >> testInstance [ - - | s | - self assert: RTBox instance class == RTBox. - self assert: RTBox instance ~~ RTBox instance. - - s := RTBox instance. - self assert: s instance == s. -] - -{ #category : #tests } -RTShapeTest >> testShapeAndElements [ - - | es | - es := RTBox elementsOn: #(1 2 3 4). - self assert: es first shape == es second shape -] - -{ #category : #tests } -RTShapeTest >> testShapeCreation [ - - self assert: RTBox element shape class == RTBox -] diff --git a/src/Roassal2/RTShapedObject.class.st b/src/Roassal2/RTShapedObject.class.st deleted file mode 100644 index 1d36c6af7..000000000 --- a/src/Roassal2/RTShapedObject.class.st +++ /dev/null @@ -1,204 +0,0 @@ -" -A RTShapedObject is the super class of RTElement and RTEdge. A RTShapeObject has the ability to keep attributes, and receive a shape. This is an abstract class, it is not meant to be instantiated. - -Instance Variables - attributes: - isFixed: - model: - shape: - trachelShape: - view: - -attributes - - xxxxx - -isFixed - - xxxxx - -model - - xxxxx - -shape - - xxxxx - -trachelShape - - xxxxx - -view - - xxxxx - -" -Class { - #name : #RTShapedObject, - #superclass : #RTAnnounceableObject, - #instVars : [ - 'isFixed', - 'model', - 'shape', - 'trachelShape', - 'view' - ], - #category : #'Roassal2-Core' -} - -{ #category : #'as yet unclassified' } -RTShapedObject class >> model: anObject [ - ^ self new model: anObject -] - -{ #category : #adding } -RTShapedObject >> + aRTShape [ - "Add a Roassal shape, class or instance of it. Not that a Trachel cannot be given as argument" - "Using + between two shapes is used to compose shapes" - self addShape: aRTShape instance -] - -{ #category : #adding } -RTShapedObject >> addShape: aRTShape [ - (shape class == RTNoShape) - ifTrue: [ shape := aRTShape instance ] - ifFalse: [ shape := RTCompositeShape with: shape with: aRTShape ]. - trachelShape := shape trachelShapeFor: self - -] - -{ #category : #adding } -RTShapedObject >> addedIn: aView [ - self subclassReponsibility -] - -{ #category : #'accessing trachel' } -RTShapedObject >> color [ - ^ trachelShape color -] - -{ #category : #'accessing trachel' } -RTShapedObject >> color: aColor [ - ^ trachelShape color: aColor -] - -{ #category : #initialization } -RTShapedObject >> initialize [ - super initialize. - shape := RTNoShape new. - trachelShape := TRNoShape instance. - isFixed := false -] - -{ #category : #testing } -RTShapedObject >> isFixed [ - "True if the element is added in the trachel canvas as a fixed shape. - If this is the case, then it will remain fixed when drag and dropping the view" - ^ isFixed -] - -{ #category : #accessing } -RTShapedObject >> model [ - ^ model -] - -{ #category : #accessing } -RTShapedObject >> model: anObject [ - "anObject could be any Smalltalk object. Shapes are computed based on that object" - model := anObject -] - -{ #category : #actions } -RTShapedObject >> pushBack [ - "Move the shaped object back" - self trachelShape pushBack -] - -{ #category : #actions } -RTShapedObject >> pushFront [ - "Move the shaped object in front of other elements" - self trachelShape pushFront -] - -{ #category : #rendering } -RTShapedObject >> renderOn: trachelCanvas [ - trachelShape isNil ifTrue: [ self error: 'Cannot add an element without a shape. Add a shape to myself, using + or addShape:' . ^ self ]. - - "Trachel shape use the same announcer than myself" - trachelShape announcer: self announcer. - - "Each trachel shape knows the element. Note that this is not a static dependency between Trachel and Roassal since in Trachel, this element could be any object" - trachelShape element: self. - - "This ifTrue:ifFalse: is not great. However it simplifies the design" - self isFixed - ifTrue: [ trachelCanvas addFixedShape: trachelShape ] - ifFalse: [ trachelCanvas addShape: trachelShape ]. - -] - -{ #category : #transformations } -RTShapedObject >> scaleBy: aPoint [ - trachelShape scaleBy: aPoint -] - -{ #category : #actions } -RTShapedObject >> setAsFixed [ - "I will remain fixed when drag and dropping the view" - isFixed := true -] - -{ #category : #actions } -RTShapedObject >> setAsNotFixed [ - "I will move when dragging the view" - isFixed := false -] - -{ #category : #accessing } -RTShapedObject >> shape [ - "Return the shape of the element. Note that modifying the return roassal shape __will not__ modify the visual appearance of the element. If you wish to do so, you need to work directly on the trachel shape, or call #update and #signalUpdate on the element to propagate the changes." - ^ shape -] - -{ #category : #signalling } -RTShapedObject >> signalUpdate [ - ^ trachelShape signalUpdate -] - -{ #category : #announce } -RTShapedObject >> testCaseAnnounce: evt [ - "It is used for Test Cases because in that case evt does not know where it has been announced." - | evtInstance | - evtInstance := evt shape: self trachelShape. - self announce: evtInstance -] - -{ #category : #accessing } -RTShapedObject >> trachelShape [ - "Return the Trachel shape of the element, which has been generated from the Roassal shape and the model. Note that modifying the return Trachel shape __modifies__ the visual appearance of the element. You may want to update the view by sending #signalUpdate to it" - ^ trachelShape -] - -{ #category : #updating } -RTShapedObject >> update [ - "Update the trachel shape and reset the path. This has the effect of moving the visual widget" - - self updateShape. - self updatePosition -] - -{ #category : #updating } -RTShapedObject >> updatePosition [ - trachelShape ifNotNil: [ trachelShape resetPath ] -] - -{ #category : #rendering } -RTShapedObject >> updateShape [ - "The graphical properties of myself are updated by the shape" - shape updateFor: self -] - -{ #category : #accessing } -RTShapedObject >> view [ - ^ view -] - -{ #category : #accessing } -RTShapedObject >> view: aRoassalView [ - view := aRoassalView -] diff --git a/src/Roassal2/RTShapedObjectTest.class.st b/src/Roassal2/RTShapedObjectTest.class.st deleted file mode 100644 index e862dda23..000000000 --- a/src/Roassal2/RTShapedObjectTest.class.st +++ /dev/null @@ -1,19 +0,0 @@ -Class { - #name : #RTShapedObjectTest, - #superclass : #RTTest, - #category : #'Roassal2-Core-Tests' -} - -{ #category : #tests } -RTShapedObjectTest >> testEmittingEvent [ - - | el t | - t := 0. - el := RTBox element. - el when: TRMouseEnter do: [ :evt | t := t + 1 ]. - - self assert: t = 0. - el announce: TRMouseEnter. - self assert: t = 1 - -] diff --git a/src/Roassal2/RTShorterDistanceAttachPoint.class.st b/src/Roassal2/RTShorterDistanceAttachPoint.class.st deleted file mode 100644 index b3775b409..000000000 --- a/src/Roassal2/RTShorterDistanceAttachPoint.class.st +++ /dev/null @@ -1,43 +0,0 @@ -" --=-=-= -v := RTView new. - -e1 := (RTBox new size: 50) elementOn: 1. -e2 := (RTEllipse new size: 50) elementOn: 2. -v add: e1; add: e2. -e2 translateBy: 30 @ 60. - -e1 @ RTDraggable. -e2 @ RTDraggable. - -s := RTArrowedLine new color: Color black. -s attachPoint: RTShorterDistanceAttachPoint new. -l := s edgeFrom: e1 to: e2. -v add: l. - -v --=-=-= -" -Class { - #name : #RTShorterDistanceAttachPoint, - #superclass : #RTAbstractShorterDistanceAttachPoint, - #category : #'Roassal2-AttachPoint' -} - -{ #category : #'public - hooks' } -RTShorterDistanceAttachPoint >> attachPointsFor: anEdge on: anElement [ - "Return the four possible attach points for each of the four sides for given edge on given element." - | rec center | - rec := anElement encompassingRectangle. - center := rec center. - ^ Array - "upper side" - with: ((center x) @ rec top) - "right side" - with: (rec right @ (center y)) - "lower side" - with: ((center x) @ rec bottom) - "left side" - with: (rec left @ (center y)) - -] diff --git a/src/Roassal2/RTShorterDistanceAttachPointAndCompositeShape.class.st b/src/Roassal2/RTShorterDistanceAttachPointAndCompositeShape.class.st deleted file mode 100644 index 39f835b5f..000000000 --- a/src/Roassal2/RTShorterDistanceAttachPointAndCompositeShape.class.st +++ /dev/null @@ -1,87 +0,0 @@ -" -A RTShorterDistanceAttachPointAndCompositeShape assumes that the elements to be connected to or from have a composite shape - -Here is an example: --=-=-=-=-=-=-=-=-= -v := RTView new. -s1 := RTBox new color: Color red. -s2 := RTCompositeShape - with: (RTBox new size: 20; color: Color green) - with: (RTBox new color: Color blue). -s2 horizontal. -e1 := s1 elementOn: #atomic. -e2 := s2 elementOn: #composite. - -e1 @ RTDraggable. -e2 @ RTDraggable. - -attachPoint := RTShorterDistanceAttachPointAndCompositeShape new - composedShapeSelection: #second. -e := RTLine new attachPoint: attachPoint; edgeFrom: e1 to: e2. -v add: e1; add: e2; add: e. -RTTreeLayout new doNotAttachPoint; on: v elements. -v --=-=-=-=-=-=-=-=-= -" -Class { - #name : #RTShorterDistanceAttachPointAndCompositeShape, - #superclass : #RTAbstractShorterDistanceAttachPoint, - #instVars : [ - 'composedShapeSelection' - ], - #category : #'Roassal2-AttachPoint' -} - -{ #category : #'public - hooks' } -RTShorterDistanceAttachPointAndCompositeShape >> attachPointsFor: anEdge on: anElement [ - "Return the four possible attach points for each of the four sides for given edge on given element." - - | rec center | - rec := self getEncompassingRectangleOf: anElement. - center := rec center. - ^ Array - "upper side" - with: ((center x) @ rec top) - "right side" - with: (rec right @ (center y)) - "lower side" - with: ((center x) @ rec bottom) - "left side" - with: (rec left @ (center y)) - -] - -{ #category : #'public - accessing' } -RTShorterDistanceAttachPointAndCompositeShape >> composedShapeSelection: aSymbol [ - "aSymbol can be #first, #second, #third, or a one arg block" - "The argument is used to select which of the shapes in the composed shape of the element to pick" - composedShapeSelection := aSymbol -] - -{ #category : #'public - hooks' } -RTShorterDistanceAttachPointAndCompositeShape >> getEncompassingRectangleOf: anElement [ - "Return the rectangle of the trachel shape that should be considered" - ^ (self trachelShapeToBeConsideredOf: anElement) encompassingRectangle - -] - -{ #category : #'public - hooks' } -RTShorterDistanceAttachPointAndCompositeShape >> hasCompositeShape: anElement [ - "A bit ugly here... But it greatly simplify the code" - ^ anElement trachelShape isKindOf: TRCompositeShape -] - -{ #category : #initialization } -RTShorterDistanceAttachPointAndCompositeShape >> initialize [ - super initialize. - composedShapeSelection := #first -] - -{ #category : #'public - hooks' } -RTShorterDistanceAttachPointAndCompositeShape >> trachelShapeToBeConsideredOf: anElement [ - "Return the trachel shape to be considered from the roassal element argument" - - ^ (self hasCompositeShape: anElement) - ifTrue: [ composedShapeSelection rtValue: anElement trachelShape shapes ] - ifFalse: [ anElement trachelShape ] -] diff --git a/src/Roassal2/RTShorterDistanceAttachPointAndCompositeShapeTest.class.st b/src/Roassal2/RTShorterDistanceAttachPointAndCompositeShapeTest.class.st deleted file mode 100644 index 75927b4a7..000000000 --- a/src/Roassal2/RTShorterDistanceAttachPointAndCompositeShapeTest.class.st +++ /dev/null @@ -1,119 +0,0 @@ -Class { - #name : #RTShorterDistanceAttachPointAndCompositeShapeTest, - #superclass : #RTTest, - #category : #'Roassal2-AttachPoint-Tests' -} - -{ #category : #tests } -RTShorterDistanceAttachPointAndCompositeShapeTest >> testBasic [ - - | v shape es | - v := RTView new. - v @ RTDraggableView. - shape := RTCompositeShape new. - shape add: RTLabel new. - shape add: RTBox new. - es := shape elementsOn: RTShape withAllSubclasses. - v addAll: es. - RTEdgeBuilder new - view: v; - objects: RTShape withAllSubclasses; - shape: - (RTArrowedLine new - color: Color black; - attachPoint: - (RTShorterDistanceAttachPointAndCompositeShape new - composedShapeSelection: #second)); - connectFrom: #superclass to: #yourself. - RTNest new - for: es - inShape: #second - add: - [ :group :model | - group - addAll: - ((RTBox new color: Color blue) elementsOn: model rtmethods). - RTGridLayout on: group ]. - RTHorizontalTreeLayout on: es. - es @ RTPopup @ RTDraggable. - -] - -{ #category : #tests } -RTShorterDistanceAttachPointAndCompositeShapeTest >> testBasic02 [ - - | attachPoint s1 s2 e1 e2 v | - attachPoint := RTShorterDistanceAttachPointAndCompositeShape new - composedShapeSelection: #second. - - s1 := RTBox new color: Color red. - s2 := RTCompositeShape - with: (RTBox new color: Color green) - with: (RTBox new color: Color blue). - s2 horizontal. - e1 := s1 elementOn: #atomic. - e2 := s2 elementOn: #composite. - - v := RTView new. - v add: e1; add: e2. - - self deny: (attachPoint hasCompositeShape: e1). - self assert: (attachPoint hasCompositeShape: e2). - - self assert: (attachPoint trachelShapeToBeConsideredOf: e1) color equals: Color red. - self assert: (attachPoint trachelShapeToBeConsideredOf: e2) color equals: Color blue. - self assert: (attachPoint getEncompassingRectangleOf: e1) ~= (attachPoint getEncompassingRectangleOf: e2) -] - -{ #category : #tests } -RTShorterDistanceAttachPointAndCompositeShapeTest >> testBasic03 [ - - | attachPoint s1 s2 e1 e2 v | - attachPoint := RTShorterDistanceAttachPointAndCompositeShape new - composedShapeSelection: #first. - - s1 := RTBox new color: Color red. - s2 := RTCompositeShape - with: (RTBox new size: 20; color: Color green) - with: (RTBox new color: Color blue). - s2 horizontal. - e1 := s1 elementOn: #atomic. - e2 := s2 elementOn: #composite. - - v := RTView new. - v add: e1; add: e2. - - e2 translateTo: 20 @ 20. - - self deny: (attachPoint hasCompositeShape: e1). - self assert: (attachPoint hasCompositeShape: e2). - - self assert: (attachPoint trachelShapeToBeConsideredOf: e1) color equals: Color red. - self assert: (attachPoint trachelShapeToBeConsideredOf: e2) color equals: Color green. - self assert: (attachPoint getEncompassingRectangleOf: e1) ~= (attachPoint getEncompassingRectangleOf: e2). - -] - -{ #category : #tests } -RTShorterDistanceAttachPointAndCompositeShapeTest >> testIfExtremityIsNotComposite [ - - | v s1 s2 e1 e2 attachPoint e | - v := RTView new. - s1 := RTBox new color: Color red. - s2 := RTCompositeShape - with: (RTBox new color: Color green) - with: (RTBox new color: Color blue). - s2 horizontal. - e1 := s1 elementOn: #atomic. - e2 := s2 elementOn: #composite. - - e1 @ RTDraggable. - e2 @ RTDraggable. - - attachPoint := RTShorterDistanceAttachPointAndCompositeShape new - composedShapeSelection: #first. - e := RTLine new attachPoint: attachPoint; edgeFrom: e1 to: e2. - v add: e1; add: e2; add: e. - RTTreeLayout new on: v elements. - -] diff --git a/src/Roassal2/RTShorterDistanceWithOffsetAttachPoint.class.st b/src/Roassal2/RTShorterDistanceWithOffsetAttachPoint.class.st deleted file mode 100644 index a57aac997..000000000 --- a/src/Roassal2/RTShorterDistanceWithOffsetAttachPoint.class.st +++ /dev/null @@ -1,102 +0,0 @@ -" -A RTShorterDistanceWithOffsetAttachPoint contains the logic to have edges with a slight offset (normal to the edge direction). - --=-=-=-= -v := RTView new. - -e1 := (RTBox new size: 50) elementOn: 1. -e2 := (RTEllipse new size: 50) elementOn: 2. -v add: e1; add: e2. -e2 translateBy: 30 @ 60. - -e1 @ RTDraggable. -e2 @ RTDraggable. - -s := RTArrowedLine new color: Color black. -s attachPoint: (RTShorterDistanceWithOffsetAttachPoint new offset: 20). -l := s edgeFrom: e1 to: e2. -v add: l. - -l := s edgeFrom: e1 to: e2. -v add: l. - -l := s edgeFrom: e1 to: e2. -v add: l. - -v --=-=-=-= -" -Class { - #name : #RTShorterDistanceWithOffsetAttachPoint, - #superclass : #RTAbstractShorterDistanceAttachPoint, - #instVars : [ - 'offset' - ], - #category : #'Roassal2-AttachPoint' -} - -{ #category : #'public - hooks' } -RTShorterDistanceWithOffsetAttachPoint >> attachPointsFor: anEdge on: anElement [ - "Return the four possible attach points for each of the four sides for given edge on given element." - | rec center | - rec := anElement encompassingRectangle. - center := rec center. - - ^ Array - "upper side" - with: ((center x) @ rec top) - "right side" - with: (rec right @ (center y)) - "lower side" - with: ((center x) @ rec bottom) - "left side" - with: (rec left @ (center y)) - -] - -{ #category : #'public - hooks' } -RTShorterDistanceWithOffsetAttachPoint >> basicEndingPointOf: anEdge [ - ^ (super basicEndingPointOf: anEdge) + (self offsetNormalFor: anEdge) -] - -{ #category : #'public - hooks' } -RTShorterDistanceWithOffsetAttachPoint >> basicStartingPointOf: anEdge [ - ^ (super basicStartingPointOf: anEdge) + (self offsetNormalFor: anEdge) -] - -{ #category : #initialization } -RTShorterDistanceWithOffsetAttachPoint >> initialize [ - super initialize. - offset := 5. -] - -{ #category : #accessing } -RTShorterDistanceWithOffsetAttachPoint >> offset [ - ^ offset -] - -{ #category : #accessing } -RTShorterDistanceWithOffsetAttachPoint >> offset: anInteger [ - "In case fromElement and toElement have more than one edge between the same two extremities, offset is the distance between lines" - offset := anInteger -] - -{ #category : #public } -RTShorterDistanceWithOffsetAttachPoint >> offsetNormalFor: anEdge [ - "Return the offset in case of multiple edges with the same starting and ending points" - | indexOfEdge multipleEdges normal pos | - multipleEdges := OrderedCollection new. - multipleEdges addAll: - (anEdge to connectedEdges select: [ :e | - (e from == anEdge from) and: [ e to == anEdge to ] ]). - - multipleEdges addAll: - (anEdge to connectedEdges select: [ :e | - (e to == anEdge from) and: [ e from == anEdge to ] ]). - - multipleEdges size <= 1 ifTrue: [ ^ 0 @ 0 ]. - indexOfEdge := multipleEdges indexOf: anEdge. - pos := anEdge to position - anEdge from position. - normal := pos = (0@0) ifTrue: [ -1 @0 ] ifFalse: [ pos normal]. - ^ (indexOfEdge - 1 - (multipleEdges size / 2)) * offset * normal -] diff --git a/src/Roassal2/RTShorterDistanceWithOffsetAttachPointTest.class.st b/src/Roassal2/RTShorterDistanceWithOffsetAttachPointTest.class.st deleted file mode 100644 index c5d818936..000000000 --- a/src/Roassal2/RTShorterDistanceWithOffsetAttachPointTest.class.st +++ /dev/null @@ -1,36 +0,0 @@ -Class { - #name : #RTShorterDistanceWithOffsetAttachPointTest, - #superclass : #RTTest, - #instVars : [ - 'view', - 'box1', - 'box2', - 'edgeBuilder', - 'line' - ], - #category : #'Roassal2-Core-Tests' -} - -{ #category : #running } -RTShorterDistanceWithOffsetAttachPointTest >> setUp [ - super setUp. - - view := RTView new. - - box1 := (RTBox new size: 50) elementOn: 1. box1 @ RTDraggable @ RTPopup. view add: box1. - box2 := (RTBox new size: 50) elementOn: 2. box2 @ RTDraggable @ RTPopup. view add: box2. - box1 translateTo: (10@100). box2 translateTo: (200@100). - - line := RTLine new. - line attachPoint: RTShorterDistanceWithOffsetAttachPoint new. - view add: (line edgeFrom: box1 to: box2). - view add: (line edgeFrom: box1 to: box2). -] - -{ #category : #tests } -RTShorterDistanceWithOffsetAttachPointTest >> testOffset [ - - | attachPoint | - attachPoint := line attachPoint. - self assert: true -] diff --git a/src/Roassal2/RTShorterHorizontalDistanceAttachPoint.class.st b/src/Roassal2/RTShorterHorizontalDistanceAttachPoint.class.st deleted file mode 100644 index 1bccaba83..000000000 --- a/src/Roassal2/RTShorterHorizontalDistanceAttachPoint.class.st +++ /dev/null @@ -1,41 +0,0 @@ -" --=-=-= - -v := RTView new. - -e1 := (RTBox new size: 50) elementOn: 1. -e2 := (RTEllipse new size: 50) elementOn: 2. -v add: e1; add: e2. -e2 translateBy: 30 @ 60. - -e1 @ RTDraggable. -e2 @ RTDraggable. - -s := RTArrowedLine new color: Color black. -s attachPoint: RTShorterHorizontalDistanceAttachPoint new. -l := s edgeFrom: e1 to: e2. -v add: l. - -v - --=-=-=- -" -Class { - #name : #RTShorterHorizontalDistanceAttachPoint, - #superclass : #RTAbstractShorterDistanceAttachPoint, - #category : #'Roassal2-AttachPoint' -} - -{ #category : #'public - hooks' } -RTShorterHorizontalDistanceAttachPoint >> attachPointsFor: anEdge on: anElement [ - "Return the four possible attach points for each of the four sides for given edge on given element." - | rec center | - rec := anElement encompassingRectangle. - center := rec center. - ^ Array - "right side" - with: (rec right @ (center y)) - "left side" - with: (rec left @ (center y)) - -] diff --git a/src/Roassal2/RTShorterVerticalDistanceAttachPoint.class.st b/src/Roassal2/RTShorterVerticalDistanceAttachPoint.class.st deleted file mode 100644 index 3a2be7fc2..000000000 --- a/src/Roassal2/RTShorterVerticalDistanceAttachPoint.class.st +++ /dev/null @@ -1,41 +0,0 @@ -" --=-=-= - -v := RTView new. - -e1 := (RTBox new size: 50) elementOn: 1. -e2 := (RTEllipse new size: 50) elementOn: 2. -v add: e1; add: e2. -e2 translateBy: 30 @ 60. - -e1 @ RTDraggable. -e2 @ RTDraggable. - -s := RTArrowedLine new color: Color black. -s attachPoint: RTShorterVerticalDistanceAttachPoint new. -l := s edgeFrom: e1 to: e2. -v add: l. - -v - --=-=-=- -" -Class { - #name : #RTShorterVerticalDistanceAttachPoint, - #superclass : #RTAbstractShorterDistanceAttachPoint, - #category : #'Roassal2-AttachPoint' -} - -{ #category : #'public - hooks' } -RTShorterVerticalDistanceAttachPoint >> attachPointsFor: anEdge on: anElement [ - "Return the four possible attach points for each of the four sides for given edge on given element." - | rec center | - rec := anElement encompassingRectangle. - center := rec center. - ^ Array - "upper side" - with: ((center x) @ rec top) - "lower side" - with: ((center x) @ rec bottom) - -] diff --git a/src/Roassal2/RTShowEdge.class.st b/src/Roassal2/RTShowEdge.class.st deleted file mode 100644 index 16e1547ba..000000000 --- a/src/Roassal2/RTShowEdge.class.st +++ /dev/null @@ -1,201 +0,0 @@ -" -RTShowEdge is an interaction that add edges on one particular element when the mouse is above the element. Edges are removed when the mouse leaves the element. - -=-=-=-= - | v es | - v := RTView new. - es := ((RTEllipse new size: 30) + RTLabel) elementsOn: (1 to: 20). - v addAll: es. - RTCircleLayout new initialRadius: 150; on: es. - - es @ (RTShowEdge new connectTo: [ :value | value - 5 to: value + 5]; shape: (RTLine new color: (Color blue alpha: 0.4))). - - ^ v -=-=-=-= -" -Class { - #name : #RTShowEdge, - #superclass : #RTInteraction, - #instVars : [ - 'connectToElements', - 'shape', - 'receiver' - ], - #classInstVars : [ - 'lastHighlightedElements', - 'lastColor' - ], - #category : #'Roassal2-Interactions' -} - -{ #category : #'reset shape' } -RTShowEdge class >> lastHighlightedElements [ - ^ lastHighlightedElements -] - -{ #category : #'reset shape' } -RTShowEdge class >> lastHighlightedElements: elements [ - lastHighlightedElements := elements -] - -{ #category : #visitor } -RTShowEdge >> accept: aVisitor with: args [ - aVisitor visitShowEdgeInteraction: self with: args -] - -{ #category : #accessing } -RTShowEdge >> color: aColorOrABlock [ - "Set the color of the edge to be added. The argument is a one-arg block, taking an association as argument, the key and value of the associations are model objects." - self shape color: aColorOrABlock -] - -{ #category : #accessing } -RTShowEdge >> colorElement: aColorOrABlock [ - "Set the color of the edge to be added. The argument is a one-arg block, taking an association as argument, the key and value of the associations are elements." - self shape colorElement: aColorOrABlock -] - -{ #category : #public } -RTShowEdge >> connectTo: aBlock [ - "OBSOLETE METHOD" - self deprecated: 'Use connectToAll:'. - ^ self connectToAll: aBlock -] - -{ #category : #public } -RTShowEdge >> connectToAll: aBlock [ - "Establish some connections" - "aBlock accepts an object and returns a list of objects" - "aBlock return an object or a list of objects to highlight" - - " - Here is an example on how to use it, using the Mondrian builder: - -=-=-=-=-=-=-=-= - | b | - b := RTMondrian new. - b interaction showEdge connectToAll: [ :v | Array with: v + 1 ]. - b nodes: #(1 2 2 3). - - b layout circle initialRadius: 10. - b - -=-=-=-=-=-=-=-= - - Another example: - -=-=-=-=-=-=-=-= - | b | - b := RTMondrian new. - b interaction showEdge color: Color blue trans; connectToAll: #dependentClasses. - b shape circle. - b nodes: Collection withAllSubclasses. - b edges moveBehind; connectFrom: #superclass. - b normalizer normalizeSize: #numberOfMethods; normalizeColor: #numberOfMethods. - b layout cluster. - b - -=-=-=-=-=-=-=-= - " - - connectToElements := [ :el | - | objects | - objects := aBlock rtValue: el model. - (objects flatCollect: [ :o | el view elementsFromModel: o ]) copyWithout: nil - ] -] - -{ #category : #accessing } -RTShowEdge >> connectToElements [ - ^ connectToElements -] - -{ #category : #public } -RTShowEdge >> connectToElements: aBlock [ - "aBlock accepts a element and returns a list of elements" - "aBlock return an element or a list of elements to highlight" - connectToElements := aBlock -] - -{ #category : #actions } -RTShowEdge >> doHideEdges: element [ - (element attributes includesKey: #showEdges) - ifFalse: [ ^ self ]. - - (element attributes at: #showEdges) do: [ :el | el view ifNotNil: [ el remove ] ]. - - element attributes removeKey: #showEdges -] - -{ #category : #actions } -RTShowEdge >> doShowEdges: element [ - | t edges | - self removeAllAddedEdges. - - t := (connectToElements rtValue: element). - t := t copyWithout: nil. - edges := (shape rtValue: element) edgesFrom: (receiver rtValue: element) toAll: t. - element view addAll: edges. - element attributes at: #showEdges put: edges. - self class lastHighlightedElements: edges -] - -{ #category : #configuration } -RTShowEdge >> highlightedColor [ - ^ self class highlightedColor -] - -{ #category : #initialize } -RTShowEdge >> initialize [ - super initialize. - connectToElements := [ :el | Array with: el ]. - receiver := #yourself. - self shape: RTLine new -] - -{ #category : #hooks } -RTShowEdge >> initializeElement: element [ - element - when: TRMouseEnter - do: [ :e | - self doShowEdges: element. - e signalUpdate ]. - element - when: TRMouseLeave - do: [ :e | - self doHideEdges: element. - e signalUpdate ] -] - -{ #category : #accessing } -RTShowEdge >> receiver [ - ^ receiver -] - -{ #category : #accessing } -RTShowEdge >> receiver: anElementOrBlock [ - receiver := anElementOrBlock -] - -{ #category : #actions } -RTShowEdge >> recordElement: anElement [ - anElement attributes at: #originalColor put: (anElement trachelShape color) - -] - -{ #category : #actions } -RTShowEdge >> removeAllAddedEdges [ - self class lastHighlightedElements ifNil: [ ^ self ]. - (self class lastHighlightedElements select: [ :edge | edge view notNil ]) - do: #remove. - self class lastHighlightedElements: nil -] - -{ #category : #accessing } -RTShowEdge >> shape [ - "Return the line shape" - ^ shape -] - -{ #category : #accessing } -RTShowEdge >> shape: aLineShapeOrABlock [ - "Set the line shape used to draw the edges" - "The argument is rtValued against the element to display" - shape := aLineShapeOrABlock -] diff --git a/src/Roassal2/RTShowEdgeTest.class.st b/src/Roassal2/RTShowEdgeTest.class.st deleted file mode 100644 index e3b6a0517..000000000 --- a/src/Roassal2/RTShowEdgeTest.class.st +++ /dev/null @@ -1,58 +0,0 @@ -Class { - #name : #RTShowEdgeTest, - #superclass : #RTTest, - #category : #'Roassal2-Core-Tests' -} - -{ #category : #tests } -RTShowEdgeTest >> testBasic [ - - | v es | - v := RTView new. - es := (RTEllipse new + RTLabel) elementsOn: (1 to: 5). - v addAll: es. - RTCircleLayout on: es. - - es first @ (RTShowEdge new connectToAll: [:vvvv| Array with: 2 ]). - - self assert: v numberOfEdges = 0. - es first announce: TRMouseEnter. - self assert: v numberOfEdges = 1. - - es first announce: TRMouseLeave. - self assert: v numberOfEdges = 0. -] - -{ #category : #tests } -RTShowEdgeTest >> testBasic2 [ - - | v es | - v := RTView new. - es := (RTEllipse new + RTLabel) elementsOn: (1 to: 5). - v addAll: es. - RTCircleLayout on: es. - - es @ (RTShowEdge new connectToAll: [:vvvv| Array with: vvvv + 1 ]). - - self assert: v numberOfEdges = 0. - es third announce: TRMouseEnter. - self assert: v numberOfEdges = 1. - - es third announce: TRMouseLeave. - self assert: v numberOfEdges = 0. -] - -{ #category : #tests } -RTShowEdgeTest >> testBasic3MultipleObjects [ - | v es | - v := RTView new. - es := RTEllipse new + RTLabel elementsOn: #(1 2 2). - v addAll: es. - RTCircleLayout on: es. - es @ (RTShowEdge new connectToAll: [ :vvvv | Array with: vvvv + 1 ]). - self assert: v numberOfEdges equals: 0. - es first announce: TRMouseEnter. - self assert: v numberOfEdges equals: 2. - es first announce: TRMouseLeave. - self assert: v numberOfEdges equals: 0 -] diff --git a/src/Roassal2/RTShowLabel.class.st b/src/Roassal2/RTShowLabel.class.st deleted file mode 100644 index cfc1addf2..000000000 --- a/src/Roassal2/RTShowLabel.class.st +++ /dev/null @@ -1,57 +0,0 @@ -" -A RTShowLabel is an interaction that add a label on a set of elements when the mouse enters a particular element. RTLabelled is used for the labelling. When the mouse leaves the element, all the labels are removed. - -Instance Variables - labelledInteraction: - -labelledInteraction - - an object which is responsible for creating and removing of a label - -" -Class { - #name : #RTShowLabel, - #superclass : #RTAbstractHighlightable, - #instVars : [ - 'labelledInteraction' - ], - #category : #'Roassal2-Interactions' -} - -{ #category : #visitor } -RTShowLabel >> accept: aVisitor with: args [ - aVisitor visitShowLabelInteraction: self with: args -] - -{ #category : #actions } -RTShowLabel >> doHighlightElement: anElement [ - anElement @ labelledInteraction. -] - -{ #category : #actions } -RTShowLabel >> doUnhighlightElement: anElement [ - labelledInteraction removeLabelFrom: anElement. -] - -{ #category : #'reflective operations' } -RTShowLabel >> doesNotUnderstand: aMessage [ - labelledInteraction - perform: aMessage selector - withArguments: aMessage arguments -] - -{ #category : #initialize } -RTShowLabel >> initialize [ - super initialize. - labelledInteraction := RTLabeled new. -] - -{ #category : #accessing } -RTShowLabel >> labelledInteraction [ - "Return the interaction which is used when an element has to be labelled" - ^ labelledInteraction -] - -{ #category : #accessing } -RTShowLabel >> labelledInteraction: aRTLabelled [ - labelledInteraction := aRTLabelled -] diff --git a/src/Roassal2/RTShowLabelTest.class.st b/src/Roassal2/RTShowLabelTest.class.st deleted file mode 100644 index c6a156cf2..000000000 --- a/src/Roassal2/RTShowLabelTest.class.st +++ /dev/null @@ -1,186 +0,0 @@ -" -A RTShowLabelTest is a test class for testing the behavior of RTShowLabel -" -Class { - #name : #RTShowLabelTest, - #superclass : #RTTest, - #instVars : [ - 'box', - 'view' - ], - #category : #'Roassal2-Tests' -} - -{ #category : #tests } -RTShowLabelTest >> testBasic [ - view := RTView new. - box := RTBox new size: 30; elementOn: 'Hi'. - view add: box. - self assert: view canvas shapes size equals: 1. - - box @ RTShowLabel. - self assert: view canvas shapes size equals: 1. - - box testCaseAnnounce: TRMouseEnter. - self assert: view canvas shapes size equals: 2. - - box testCaseAnnounce: TRMouseLeave. - self assert: view canvas shapes size equals: 1. - -] - -{ #category : #tests } -RTShowLabelTest >> testBasic02 [ - - | v e int labelledInteraction | - v := RTView new. - - e := RTBox elementOn: 1. - v add: e. - - int := RTShowLabel new. - int highlightObject: #yourself. - int top. - int color: Color red. - e @ int. - - "Checking the labelledInteraction" - labelledInteraction := int labelledInteraction. - self assert: labelledInteraction textElement notNil. - self assert: (labelledInteraction textElement rtValue: e) equals: 1. - - "Low level highlight" - self assert: v canvas numberOfShapes equals: 1. - int doHighlightElement: e. - self assert: v canvas numberOfShapes equals: 2. - int doUnhighlightElement: e. - self assert: v canvas numberOfShapes equals: 1. - - "High level highlight" - self assert: v canvas numberOfShapes equals: 1. - int doHighlight: e. - self assert: v canvas numberOfShapes equals: 2. - int doUnhighlight: e. - self assert: v canvas numberOfShapes equals: 1. - - "Simulating mouse entering" - self assert: v canvas numberOfShapes equals: 1. - e testCaseAnnounce: TRMouseEnter. - self assert: v canvas numberOfShapes equals: 2. - e testCaseAnnounce: TRMouseLeave. - self assert: v canvas numberOfShapes equals: 1. -] - -{ #category : #tests } -RTShowLabelTest >> testBasic03 [ - view := RTView new. - box := RTBox new size: 30; elementOn: 'Hi'. - view add: box. - self assert: view canvas shapes size equals: 1. - - box @ RTShowLabel. - self assert: view canvas shapes size equals: 1. - - box announce: TRMouseEnter. - box announce: TRMouseEnter. - self assert: view canvas shapes size equals: 2. - - box announce: TRMouseLeave. - self assert: view canvas shapes size equals: 1. - -] - -{ #category : #tests } -RTShowLabelTest >> testSetLabelledInteraction [ - | lbl | - lbl := RTShowLabel new. - lbl labelledInteraction: RTLabeled new -] - -{ #category : #tests } -RTShowLabelTest >> testVisit [ - | int e v | - int := RTShowLabel new. - int highlightObject: #yourself. - int top. - int color: Color red. - - e := (RTBox elementOn: 3). - v := RTView new. - v add: e. - int accept: RTJavascriptVisitor new with: e -] - -{ #category : #tests } -RTShowLabelTest >> testWithNesting [ - | v e e2 int | - v := RTView new. - - e := RTBox elementOn: 1. - v add: e. - - e2 := (RTBox new color: Color blue) elementOn: 2. - v add: e2. - RTNest new on: e nest: (Array with: e2). - - int := RTShowLabel new. - int highlightObject: #yourself. - e @ int. - - "We enter and leave the outter element" - self assert: v canvas numberOfShapes equals: 2. - e announce: TRMouseEnter. - self assert: v canvas numberOfShapes equals: 3. - e announce: TRMouseLeave. - self assert: v canvas numberOfShapes equals: 2. - - - "We enter the outer and inner elements" - e announce: TRMouseEnter. - e announce: TRMouseLeave. - e2 announce: TRMouseEnter. - self assert: v canvas numberOfShapes equals: 2. - e2 announce: TRMouseLeave. - e announce: TRMouseLeave. - self assert: v canvas numberOfShapes equals: 2. - - -] - -{ #category : #tests } -RTShowLabelTest >> testWithNesting02 [ - | v e e2 int | - v := RTView new. - - e := RTBox elementOn: 1. - v add: e. - - e2 := (RTBox new color: Color blue) elementOn: 2. - v add: e2. - RTNest new on: e nest: (Array with: e2). - - int := RTShowLabel new. - int highlightObject: #yourself. - e @ int. - - "We enter and leave the outter element" - self assert: v canvas numberOfShapes equals: 2. - e announce: TRMouseEnter. - self assert: v canvas numberOfShapes equals: 3. - e announce: TRMouseLeave. - self assert: v canvas numberOfShapes equals: 2. - - - "We enter the outer and inner elements" - e announce: TRMouseEnter. - e announce: TRMouseLeave. - "For some strange reason, this is what happens" - e announce: TRMouseEnter. - self assert: v canvas numberOfShapes equals: 3. - e2 announce: TRMouseLeave. - e announce: TRMouseEnter. - e announce: TRMouseLeave. - self assert: v canvas numberOfShapes equals: 2. - - -] diff --git a/src/Roassal2/RTSimilarityMatrix.class.st b/src/Roassal2/RTSimilarityMatrix.class.st deleted file mode 100644 index bf83a943a..000000000 --- a/src/Roassal2/RTSimilarityMatrix.class.st +++ /dev/null @@ -1,216 +0,0 @@ -" -A TSOverview is a visualization of similarity between test methods as measured by TestSurgeon. - - TSOverview demo - - -" -Class { - #name : #RTSimilarityMatrix, - #superclass : #Object, - #instVars : [ - 'elements', - 'pairs', - 'action' - ], - #category : #'Roassal2-Builder-SimilarityMatrix' -} - -{ #category : #examples } -RTSimilarityMatrix class >> comparingMethodSourceCode [ - "Compare the source code of all the subclasses of ROShape" - "Black dot means the two classes are identical" - "White dot means the two classes are very different" - ^ RTSimilarityMatrix new - on: RTShape withAllSubclasses - by: [ :class1 :class2 | - | sourceCode1 sourceCode2 s | - "We get the source code of class1" - s := WriteStream on: String new. - class1 fileOutOn: s moveSource: false toFile: 0. - sourceCode1 := s contents. - - "We get the source code of class2" - s := WriteStream on: String new. - class2 fileOutOn: s moveSource: false toFile: 0. - sourceCode2 := s contents. - - (sourceCode1 lines intersection: sourceCode2 lines) size - / ((1 max: (sourceCode1 lines union: sourceCode2 lines) size) + 1) "NB penalty for small methods" - ]; - gridView -] - -{ #category : #examples } -RTSimilarityMatrix class >> comparingWordsBetweenText [ - "methods are similar if they send the same messages; large methods are top-left" - ^ RTSimilarityMatrix new - on: #('hello world' 'welcome to our world' 'hello means bonjour' 'bye bye') - by: [ :m1 : m2 | - (m1 substrings intersection: m2 substrings) size - / ((1 max: (m1 substrings union: m2 substrings) size) + 1) "NB penalty for small methods" - ]; - gridView -] - -{ #category : #examples } -RTSimilarityMatrix class >> demo1 [ - ^ RTSimilarityMatrix new - on: (1 to: 50) - by: [ :a :b | - (a + b) odd - ifTrue: [ 1 ] - ifFalse: [ 0 ] - ]; - viewMatrix -] - -{ #category : #examples } -RTSimilarityMatrix class >> demo2 [ - "show which Collection subclasses have a similar number of methods" - ^ RTSimilarityMatrix new - on: (Collection allSubclasses - sort: [:a :b | a methods size < b methods size]) - by: [ :classA : classB | |a b| - a := classA methods size. - b := classB methods size. - ((a min: b) / ((b max: a) max: 1)) asFloat ] - withAction: [:classA :classB | - TRPlatform current browseClass: classA. - TRPlatform current browseClass: classB. ] ; - viewMatrix -] - -{ #category : #examples } -RTSimilarityMatrix class >> demo3 [ - "methods are similar if they send the same messages; large methods are top-left" - ^ RTSimilarityMatrix new - on: ((Set allSubclasses flatCollect: #methods) - sort: [ :m1 :m2 | m1 size > m2 size ]) - by: [ :m1 : m2 | - (m1 messages intersection: m2 messages) size - / ((1 max: (m1 messages union: m2 messages) size) + 1) "NB penalty for small methods" - ] - withAction: [:m1 : m2 | - m1 browse. - m2 browse. - ]; - viewMatrix -] - -{ #category : #interactions } -RTSimilarityMatrix >> action: aComparison [ - action - ifNotNil: [ action value: aComparison lhs value: aComparison rhs ] -] - -{ #category : #visualization } -RTSimilarityMatrix >> colorForElement: elt [ - ^ Color gray: (1 - elt model similarity) -] - -{ #category : #defaults } -RTSimilarityMatrix >> defaultExtent [ - ^ 5@5 -] - -{ #category : #visualization } -RTSimilarityMatrix >> elementOn: pair For: view [ - | elt | - elt := RTElement on: pair. - elt + (RTBox new - color: (self colorForElement: elt); - extent: self defaultExtent). - elt @ (RTPopup new text: [self popupTextFor: elt]). - elt when: TRMouseClick do: [:event | self action: pair ]. - ^ elt -] - -{ #category : #visualization } -RTSimilarityMatrix >> elementOn: pair forView: view andStack: stack [ - | elt | - elt := (RTElement on: pair ). - elt + (RTBox new - color: (self colorForElement: elt); - extent: self defaultExtent - ). - elt @ (RTPopup new text: [self popupTextFor: elt] ). - - elt when: TRMouseClick do: [:event | self action: pair ]. -" elt forward: ROMouseDragging." - ^ elt -] - -{ #category : #visualization } -RTSimilarityMatrix >> gridSize [ - ^ elements size -] - -{ #category : #visualization } -RTSimilarityMatrix >> gridView [ - | view | - view := RTView new. - view addAll: (pairs collect: [ :pair | self elementOn: pair For: view ]). - RTGridLayout new - gapSize: 0; - lineItemsCount: self gridSize; - on: view elements. - view @ RTDraggableView. - - -" zoomIn := self zoomInButtonOn: view. - zoomOut := self zoomOutButtonOn: view. -" -" ROHorizontalLineLayout on: { zoomIn . zoomOut }. -" "view @ (ROMiniMap new targetView: stack)." - view open. -] - -{ #category : #'initialize-release' } -RTSimilarityMatrix >> on: aCollection by: similarity [ - ^ self on: aCollection by: similarity withAction: nil -] - -{ #category : #'initialize-release' } -RTSimilarityMatrix >> on: aCollection by: similarity withAction: aCallBack [ - "initialize model" - elements := aCollection. - pairs := OrderedCollection new. - action := aCallBack. - elements - do: [ : lhs | - elements do: [ : rhs | | pair | - pair := (RTComparison of: lhs with: rhs by: similarity). - pairs add: pair ] ] - displayingProgress: 'comparing elements ...'. -] - -{ #category : #interactions } -RTSimilarityMatrix >> popupTextFor: elt [ - ^ elt model lhs printString, String cr, - elt model rhs printString, String cr, - 'similarity = ', elt model similarity printString -] - -{ #category : #visualization } -RTSimilarityMatrix >> viewMatrix [ - "display the matrix view" - | view | - view := RTView new. - view @ RTDraggableView. - view addAll: - (pairs collect: [ : pair | - self - elementOn: pair - For: view ]). - RTGridLayout new - gapSize: 0; - lineItemsCount: self gridSize; - on: view elements. - view @ RTDraggableView. - - - -" view @ (ROMiniMap new targetView: stack). -" view open. -] diff --git a/src/Roassal2/RTSimon.class.st b/src/Roassal2/RTSimon.class.st deleted file mode 100644 index e42cb2020..000000000 --- a/src/Roassal2/RTSimon.class.st +++ /dev/null @@ -1,61 +0,0 @@ -" -Simon is an electronic game that intensively use arcs: -http://en.wikipedia.org/wiki/Simon_(game) - -A RTSimon is xxxxxxxxx. - -" -Class { - #name : #RTSimon, - #superclass : #RTBuilder, - #instVars : [ - 'models' - ], - #category : #'Roassal2-Builder-Simon' -} - -{ #category : #initialization } -RTSimon >> initialize [ - super initialize. - self initializeShapeBuilder. - self initializeInteractionBuilder. - models := OrderedCollection new -] - -{ #category : #initialization } -RTSimon >> initializeInteractionBuilder [ - self interaction popup. -] - -{ #category : #initialization } -RTSimon >> initializeShapeBuilder [ - self shape arc - outerAngle: [ :object | ((self models indexOf: object) - 1) * (360.0 / self models size) ] innerAngle: [ :object | 360.0 / self models size ]; - innerRadius: 50; - externalRadius: 90; - color: RTNIdentityNormalizer new -] - -{ #category : #accessing } -RTSimon >> models [ - ^ models -] - -{ #category : #accessing } -RTSimon >> models: objects [ - | elements | - self recordModels: objects. - elements := shapeBuilder elementsOn: objects. - interactionBuilder setUpElements: elements. - view addAll: elements -] - -{ #category : #'public-ui' } -RTSimon >> open [ - ^ view canvas open -] - -{ #category : #'as yet unclassified' } -RTSimon >> recordModels: objects [ - models addAll: objects -] diff --git a/src/Roassal2/RTSimonExample.class.st b/src/Roassal2/RTSimonExample.class.st deleted file mode 100644 index ab8213057..000000000 --- a/src/Roassal2/RTSimonExample.class.st +++ /dev/null @@ -1,96 +0,0 @@ -Class { - #name : #RTSimonExample, - #superclass : #RTObject, - #category : #'Roassal2-Builder-Simon' -} - -{ #category : #basic } -RTSimonExample >> basic01 [ - - " - self new basic01 - " - | builder | - builder := RTSimon new. - builder models: (1 to: 20). - ^ builder -] - -{ #category : #basic } -RTSimonExample >> basic02 [ - - " - self new basic02 - " - | builder | - builder := RTSimon new. - builder shape current externalRadius: [ :obj | (obj * 3) + 80]. - builder models: (1 to: 20). - ^ builder -] - -{ #category : #basic } -RTSimonExample >> basic03 [ - - " - self new basic03 - " - | builder | - builder := RTSimon new. - builder shape current - innerRadius: [ :r | 200 atRandom ]; - externalRadius: [ :obj | 200 + 40 atRandom ]; - outerAngle: [ :o | 360 atRandom ] innerAngle: [ :o | 50 atRandom ]; - color: [ :o | ((Array with: Color red with: Color blue with: Color white) atRandom alpha: 0.1)]. - builder models: (1 to: 10). - ^ builder -] - -{ #category : #basic } -RTSimonExample >> basic03Animated [ - - " - self new basic03Animated - " - | builder timer | - timer := TRVITimer new cycleLength: 10. - - builder := RTSimon new. - builder shape current - innerRadius: [ :r | 200 atRandom ]; - externalRadius: [ :obj | 200 + 40 atRandom ]; - outerAngle: [ :e | - | a b | - a := 300 atRandom. - b := 200 atRandom. - TRVIAnimatedValue new - evaluator: [ :t | a interpolateTo: (a + b) at: t ]; - timer: timer; - yourself. ] - innerAngle: [ :e | 50 atRandom ]; - color: [ :o | ((Array with: Color red with: Color blue with: Color white) atRandom alpha: 0.1)]. - builder models: (1 to: 10). - timer start. - builder view addAnimation: (RTResetAllShape new trCanvas: builder view canvas). - ^ builder -] - -{ #category : #'software visualization' } -RTSimonExample >> softviz01 [ - - " - self new softviz01 - - LOC, NOM, NOV, NOS - " - | b | - b := RTSimon new. - b shape current - outerAngle: [ :e | e model numberOfVariables * 25 ] - innerAngle: [ :e | e model numberOfMethods / 1 ]; - innerRadius: [ :cls | cls withAllSuperclasses size * 10 ]; - thickness: [ :cls | cls numberOfMethods * 2 ]; - color: (Color red alpha: 0.2). - b models: RTObject withAllSubclasses. - ^ b -] diff --git a/src/Roassal2/RTSimonTest.class.st b/src/Roassal2/RTSimonTest.class.st deleted file mode 100644 index 6f8e83567..000000000 --- a/src/Roassal2/RTSimonTest.class.st +++ /dev/null @@ -1,29 +0,0 @@ -Class { - #name : #RTSimonTest, - #superclass : #RTTest, - #instVars : [ - 'builder' - ], - #category : #'Roassal2-Builder-Simon' -} - -{ #category : #running } -RTSimonTest >> setUp [ - super setUp. - builder := RTSimon new -] - -{ #category : #tests } -RTSimonTest >> testBasic [ - - builder models: (Array with: 10 with: 20 with: 30). - self assert: builder view numberOfElements equals: 3. - - self assert: builder view elements anyOne shape class == RTArc. -] - -{ #category : #tests } -RTSimonTest >> testDefault [ - - self assert: builder view numberOfElements equals: 0 -] diff --git a/src/Roassal2/RTSimpleArrow.class.st b/src/Roassal2/RTSimpleArrow.class.st deleted file mode 100644 index b728f202c..000000000 --- a/src/Roassal2/RTSimpleArrow.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #RTSimpleArrow, - #superclass : #RTLineDecorationShape, - #category : #'Roassal2-LineDecorations' -} - -{ #category : #hooks } -RTSimpleArrow class >> trachelShapeClass [ - ^ TRSimpleArrowShape -] diff --git a/src/Roassal2/RTSimpleArrowHead.class.st b/src/Roassal2/RTSimpleArrowHead.class.st deleted file mode 100644 index 0e7e57a5b..000000000 --- a/src/Roassal2/RTSimpleArrowHead.class.st +++ /dev/null @@ -1,27 +0,0 @@ -" -A RTSimpleArrowHead is a line decorartion. - --=-=-=-=-=-=-=-=-=-=-=-= -| v e1 e2 l | -v := RTView new. -e1 := (RTEllipse new size: 20) element. -e2 := (RTEllipse new size: 20) element. -e1 @ RTDraggable. -e2 @ RTDraggable. -e2 translateBy: 50 @ 50. -l := ((RTLine new color: Color red) + (RTSimpleArrowHead new color: Color red)) edgeFrom: e1 to: e2. -v add: e1; add: e2; add: l. -v open --=-=-=-=-=-=-=-=-=-=-=-= - -" -Class { - #name : #RTSimpleArrowHead, - #superclass : #RTLineDecoration, - #category : #'Roassal2-LineDecorations' -} - -{ #category : #hooks } -RTSimpleArrowHead >> trachelShapeClass [ - ^ TRSimpleArrowShape -] diff --git a/src/Roassal2/RTSimpleArrowHeadTest.class.st b/src/Roassal2/RTSimpleArrowHeadTest.class.st deleted file mode 100644 index 941d71412..000000000 --- a/src/Roassal2/RTSimpleArrowHeadTest.class.st +++ /dev/null @@ -1,39 +0,0 @@ -Class { - #name : #RTSimpleArrowHeadTest, - #superclass : #RTTest, - #instVars : [ - 'view' - ], - #category : #'Roassal2-Core-Tests' -} - -{ #category : #tests } -RTSimpleArrowHeadTest >> testDragAndDropNodes [ - - "Initializing the view" - | v e1 e2 l lineTrachel | - v := RTView new. - e1 := (RTEllipse new size: 10) element. - e2 := (RTEllipse new size: 10) element. - e2 translateBy: 100 @ 0. - - e1 @ RTDraggable. - e2 @ RTDraggable. - - v add: e1. - v add: e2. - l := RTEdge from: e1 to: e2. - - l + (RTLine new color: Color red) + (RTSimpleArrowHead new color: Color red). - v add: l. - - "Checking" - lineTrachel := v canvas shapes detect: [ :s | s class == TRLineShape ]. - self assert: lineTrachel from equals: l from position. - self assert: lineTrachel to equals: l to position. - - "Drag and Drop" - e1 translateBy: 10 @ 20. - self assert: lineTrachel from equals: l from position. - -] diff --git a/src/Roassal2/RTSimpleResizable.class.st b/src/Roassal2/RTSimpleResizable.class.st deleted file mode 100644 index 14e7ee37e..000000000 --- a/src/Roassal2/RTSimpleResizable.class.st +++ /dev/null @@ -1,65 +0,0 @@ -" -A RTResizeable is an interaction to enable resizing element. -Here is an example: --=-=-=-= -v := RTView new. - -s := RTBox new color: Color blue; width: [ :c | c numberOfVariables * 5 ]; height: #numberOfMethods. -e := s elementOn: RTView. - -e @ RTResizeable. -v add: e. --=-=-=-= - -" -Class { - #name : #RTSimpleResizable, - #superclass : #RTInteraction, - #category : #'Roassal2-Interactions-Resize' -} - -{ #category : #hooks } -RTSimpleResizable >> createHandleFor: element [ - - | handle | - handle := (RTEllipse new size: 10) element. - handle addCallback: (TRTranslationCallback block: [ :shape :step | - | tStep newSize | - tStep := handle position - element encompassingRectangle bottomRight + (handle extent / 2). - newSize := (element extent + (tStep)) max: (20 @ 20). - element translateBy: (tStep / 2). - element extent: newSize ]). - handle @ RTDraggable. - handle when: TRMouseLeave do: [ :evt | self removeResizeHandleOn: element ]. - - ^ handle -] - -{ #category : #hooks } -RTSimpleResizable >> initializeElement: element [ - element when: TRMouseEnter do: [ :evt | self showResizeHandleOn: element ]. - element when: TRMouseLeave do: [ :evt | self removeResizeHandleOn: element ]. -] - -{ #category : #hooks } -RTSimpleResizable >> removeResizeHandleOn: element [ - | handle | - (element attributes includesKey: #resizeHandle) ifFalse: [ ^ self ]. - handle := element attributeAt: #resizeHandle. - handle remove. - element attributes removeKey: #resizeHandle. - element view signalUpdate -] - -{ #category : #hooks } -RTSimpleResizable >> showResizeHandleOn: element [ - | handle | - self removeResizeHandleOn: element. - - handle := self createHandleFor: element. - - element view add: handle. - handle translateTo: element encompassingRectangle bottomRight - (handle extent / 2). - element attributeAt: #resizeHandle put: handle. - element view signalUpdate -] diff --git a/src/Roassal2/RTSlider.class.st b/src/Roassal2/RTSlider.class.st deleted file mode 100644 index 15c81c687..000000000 --- a/src/Roassal2/RTSlider.class.st +++ /dev/null @@ -1,232 +0,0 @@ -" -Create a slider on a view. - -A `#callback:`can be set to view the `#progress` (as float between 0 and 1). -" -Class { - #name : #RTSlider, - #superclass : #RTBuilder, - #instVars : [ - 'callback', - 'position', - 'sliderElements', - 'min', - 'max', - 'useIntegerLabel', - 'value', - 'orientation', - 'size', - 'hasLabel' - ], - #category : #'Roassal2-Builder-UI-Slider' -} - -{ #category : #public } -RTSlider >> build [ - | allElements res | - allElements := view elements. - res := super build. - TRConstraint move: sliderElements to: position and: allElements. - ^ res -] - -{ #category : #accessing } -RTSlider >> callback [ - ^ callback -] - -{ #category : #accessing } -RTSlider >> callback: aOneArgBlock [ - "aOneArgBlock will be called with the current #progress (float between 0.0 and 1.0)." - - callback := aOneArgBlock -] - -{ #category : #hooks } -RTSlider >> createShapeBuilder [ - "RTBox new color: (Color red alpha: 0.5); width: 15; height: 20" - ^ super createShapeBuilder - rectangle; - color: (Color red alpha: 0.5); - width: 15; - height: 20; - yourself -] - -{ #category : #accessing } -RTSlider >> horizontal [ - orientation := #horizontal -] - -{ #category : #initialization } -RTSlider >> initialize [ - super initialize. - hasLabel := false. - callback := [ :aValue | ]. - sliderElements := #(). - min := 0.0. - max := 1.0. - value := 0.5. - useIntegerLabel := false. - size := 200. - self horizontal -] - -{ #category : #testing } -RTSlider >> isHorizontal [ - ^ orientation = #horizontal -] - -{ #category : #accessing } -RTSlider >> labeled [ - hasLabel := true -] - -{ #category : #accessing } -RTSlider >> labelled [ - self deprecated: 'Please, use #labeled instead'. - self labeled -] - -{ #category : #accessing } -RTSlider >> max [ - ^ max -] - -{ #category : #accessing } -RTSlider >> max: aNumber [ - self assert: [ min <= aNumber ] description: 'Max value cant be smaller than the min value'. - max := aNumber -] - -{ #category : #accessing } -RTSlider >> min [ - ^ min -] - -{ #category : #accessing } -RTSlider >> min: aNumber [ - self assert: [ aNumber <= max ] description: 'Min value cant be bigger than the max value'. - min := aNumber -] - -{ #category : #accessing } -RTSlider >> min: aMin max: aMax [ - self assert: [ aMin <= aMax ] description: 'Min value cant be bigger than the max value'. - min := aMin. - max := aMax -] - -{ #category : #accessing } -RTSlider >> move: aSymbol [ - position := aSymbol -] - -{ #category : #accessing } -RTSlider >> progress [ - ^ (value - min) / (max - min) -] - -{ #category : #accessing } -RTSlider >> progress: aFloat [ - self - assert: [ aFloat between: 0 and: 1 ] - description: 'A progress must be a float between 0 and 1'. - self value: min + ((max - min) * aFloat) -] - -{ #category : #hooks } -RTSlider >> renderIn: aView [ - | extremity1 extremity2 line cursor dragAndConstraint trachelShape aValue w2 sliderSize | - sliderSize := self isHorizontal - ifTrue: [ size @ 0 ] - ifFalse: [ 0 @ size ]. - extremity1 := (RTBox new - width: 5; - height: 10) element. - extremity2 := (RTBox new - width: 5; - height: 10) element. - line := (RTLine new width: 5) edgeFrom: extremity1 to: extremity2. - aView add: extremity1. - aView add: extremity2. - aView add: line. - extremity2 translateTo: sliderSize. - cursor := self elementOn: nil. - dragAndConstraint := RTConstrainedDraggable new. - dragAndConstraint - rectangle: [ w2 := (cursor encompassingRectangle width / 2) - @ (cursor encompassingRectangle height / 2). - w2 := w2 - * - (self isHorizontal - ifTrue: [ 1 @ 0 ] - ifFalse: [ 0 @ 1 ]). - extremity1 position - w2 corner: extremity2 position + w2 ]. - - "We compute the slider value, and call the callback" - dragAndConstraint - afterBlock: [ self isHorizontal - ifTrue: [ aValue := (cursor position x - extremity1 position x) - / (extremity2 position x - extremity1 position x) ] - ifFalse: [ aValue := (cursor position y - extremity1 position y) - / (extremity2 position y - extremity1 position y) ]. - aValue := aValue * (max - min) + min. - aValue := (aValue max: min) min: max. - callback rtValue: aValue. - hasLabel - ifTrue: [ trachelShape - text: - (useIntegerLabel - ifTrue: [ (aValue round: 0) asInteger ] - ifFalse: [ aValue round: 2 ]) asString ] ]. - cursor @ dragAndConstraint. - aView add: cursor. - cursor translateTo: sliderSize * self progress. - - "We prepare a label if necessary" - hasLabel - ifTrue: [ cursor @ (RTLabeled new text: self value). - trachelShape := cursor attributeAt: #RTLabelledLabel ]. - - "We keep track of the elements we add in the view" - sliderElements := RTGroup new. - sliderElements add: cursor. - sliderElements add: extremity1. - sliderElements add: extremity2. - sliderElements setAsFixed -] - -{ #category : #accessing } -RTSlider >> size: aNumber [ - "Size of the slider (it's width or height)" - - size := aNumber -] - -{ #category : #accessing } -RTSlider >> useIntegerLabel [ - "sets the display of the slider's label using an integral value instead of a floating point one - ex: - slider useIntegerLabel - " - useIntegerLabel := true -] - -{ #category : #accessing } -RTSlider >> value [ - ^ value -] - -{ #category : #accessing } -RTSlider >> value: aNumber [ - self - assert: [ aNumber between: min and: max ] - description: 'Value must be between min and max.'. - value := aNumber -] - -{ #category : #accessing } -RTSlider >> vertical [ - orientation := #vertical -] diff --git a/src/Roassal2/RTSliderTest.class.st b/src/Roassal2/RTSliderTest.class.st deleted file mode 100644 index cbf4d084f..000000000 --- a/src/Roassal2/RTSliderTest.class.st +++ /dev/null @@ -1,35 +0,0 @@ -Class { - #name : #RTSliderTest, - #superclass : #RTTest, - #instVars : [ - 'slider' - ], - #category : #'Roassal2-Builder-UI-Slider' -} - -{ #category : #running } -RTSliderTest >> setUp [ - super setUp. - slider := RTSlider new -] - -{ #category : #tests } -RTSliderTest >> testDefault [ - self assert: slider min equals: 0. - self assert: slider max equals: 1. - self assert: slider value equals: 0.5 -] - -{ #category : #tests } -RTSliderTest >> testOutsideRange [ - self should: [ slider value: 10 ] raise: Error. - self should: [ slider value: -5 ] raise: Error. -] - -{ #category : #tests } -RTSliderTest >> testProgress [ - slider max: 100. - slider value: 20. - self assert: slider value equals: 20. - self assert: slider progress equals: 0.2 -] diff --git a/src/Roassal2/RTSmallMultipleManyScript.class.st b/src/Roassal2/RTSmallMultipleManyScript.class.st deleted file mode 100644 index 9c94156e0..000000000 --- a/src/Roassal2/RTSmallMultipleManyScript.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #RTSmallMultipleManyScript, - #superclass : #RTUsefulScript, - #category : #'Roassal2-Plugins' -} - -{ #category : #accessing } -RTSmallMultipleManyScript >> description [ - ^ -'Visualize a TSV file (like a CSV file but with tabulation instead of comma) as a matrix. -The file should have 4 columns: timen1n2weight. -time is an integer value. It could represent a time period. -n1 and n2 are string values. -weight is a float value. - -Each time slice is represented as a matrix.' -] - -{ #category : #hooks } -RTSmallMultipleManyScript >> execute [ - - - | b times c tab | - times := OrderedCollection new. - tab := RTTabTable openTSVfile. - tab ifNil: [ ^ self ]. - tab values do: [ :line | | k dic a | - k := line first max: 1. - times at: k ifAbsentPut: [ Dictionary new ]. - dic := times at: k. - a := line third -> line second. - dic at: a ifAbsentPut: [ 0 ]. - dic at: a put: (dic at: a)+1. ]. - - c := RTComposer new. - times doWithIndex: [ :dic :index | - dic ifNotNil: [ - b := RTGradualDSM new. - b view: c view. - b objectsY: (dic keys collect: #key) asSet asArray sorted. - b objectsX: (dic keys collect: #value) asSet asArray sorted. - b score: [ :assoc | - dic at: assoc ifAbsent: [ 0 ] ]. - b build. - - c group: index asString asSymbol. - ] - ]. - - c layout: RTCellLayout new. - - "We highlight only cells that are actually not gray (i.e., have a green component = 0)" - c propagateHighlightUsing: [ :el | - (el trachelShape color green > 0) - ifTrue: [ #() ] - ifFalse: [ (el view elementsFromModel: el model) select: [ :ee | ee trachelShape color green = 0 ] ] ]. - c view inspect -] - -{ #category : #hooks } -RTSmallMultipleManyScript >> label [ - ^ 'CSV as Small Multiple (Each time slice as a matrix)' -] diff --git a/src/Roassal2/RTSmallMultipleSingleScript.class.st b/src/Roassal2/RTSmallMultipleSingleScript.class.st deleted file mode 100644 index b5b0901de..000000000 --- a/src/Roassal2/RTSmallMultipleSingleScript.class.st +++ /dev/null @@ -1,134 +0,0 @@ -Class { - #name : #RTSmallMultipleSingleScript, - #superclass : #RTUsefulScript, - #instVars : [ - 'dic', - 'view', - 'scale', - 'sortX', - 'sortY', - 'objectsY', - 'objectsX' - ], - #category : #'Roassal2-Plugins' -} - -{ #category : #hooks } -RTSmallMultipleSingleScript >> buildMatrix [ - | b | - b := RTGradualDSM new. - b view: view. - - "objectsX and objectsY refers to a dictionary in which the key is the string contained in a column, - and values is an array containing the connections" - objectsY := dic associations groupedBy: [ :ass | ass key key ]. - objectsX := dic associations groupedBy: [ :ass | ass key value ]. - - b objectsY: ((objectsY associations sortedAs: sortX) asArray collect: #key). - b objectsX: ((objectsX associations sortedAs: sortY) asArray collect: #key). - - b score: [ :assoc | scale rtValue: (dic at: assoc ifAbsent: [ 0 ]) ]. - b build. - view signalUpdate -] - -{ #category : #hooks } -RTSmallMultipleSingleScript >> buildMenu [ - - | mb | - mb := RTMenuBuilder new. - mb view: view. - - mb menu: 'scale' submenu: 'linear' background: Color red trans - callback: [ scale := #yourself. self clearView. self buildMatrix ]. - - mb menu: 'scale' submenu: 'sqrt' background: Color red trans - callback: [ scale := #sqrt. self clearView. self buildMatrix ]. - - mb menu: 'scale' submenu: 'log' background: Color red trans - callback: [ scale := [ :value | (value + 1) log * 5 ] . self clearView. self buildMatrix ]. - - mb menu: 'sorting' submenu: 'X-Name' background: Color red trans - callback: [ sortX := [ :assoc | assoc key ]. self clearView. self buildMatrix ]. - mb menu: 'sorting' submenu: 'Y-Name' background: Color red trans - callback: [ sortY := [ :assoc | assoc key ]. self clearView. self buildMatrix ]. - - mb menu: 'sorting' submenu: 'X-amount of connections' background: Color red trans - callback: [ sortX := [ :assoc | assoc value size ]. self clearView. self buildMatrix ]. - mb menu: 'sorting' submenu: 'Y-amount of connections' background: Color red trans - callback: [ sortY := [ :assoc | assoc value size ]. self clearView. self buildMatrix ]. - - mb menu: 'sorting' submenu: 'X-sum weight' background: Color red trans - callback: [ sortX := [ :assoc | (assoc value collect: [ :as | as value value ]) sum ]. self clearView. self buildMatrix ]. - mb menu: 'sorting' submenu: 'Y-sum weight' background: Color red trans - callback: [ sortY := [ :assoc | (assoc value collect: [ :as | as value value ]) sum ]. self clearView. self buildMatrix ]. - - mb build. -] - -{ #category : #hooks } -RTSmallMultipleSingleScript >> buildView [ - view := RTView new. - view @ RTDraggableView @ RTDoubleScrollBar -] - -{ #category : #hooks } -RTSmallMultipleSingleScript >> clearView [ - - (view elements select: [ :e | e isFixed not ]) remove -] - -{ #category : #accessing } -RTSmallMultipleSingleScript >> description [ - ^ -'Visualize a TSV file (like a CSV file but with tabulation instead of comma) as a matrix. -The file should have 4 columns: timen1n2weight. -time is an integer value. It could represent a time period. -n1 and n2 are string values. -weight is a float value.' -] - -{ #category : #hooks } -RTSmallMultipleSingleScript >> execute [ - - dic := self loadData. - self buildView. - self buildMatrix. - self buildMenu. - self inspectView -] - -{ #category : #initialization } -RTSmallMultipleSingleScript >> initialize [ - super initialize. - scale := #yourself. - sortX := [ :assoc | assoc key ]. - sortY := [ :assoc | assoc key ] -] - -{ #category : #hooks } -RTSmallMultipleSingleScript >> inspectView [ - view inspect -] - -{ #category : #hooks } -RTSmallMultipleSingleScript >> label [ - ^ 'CSV as Small Multiple (All time slices in one)' -] - -{ #category : #util } -RTSmallMultipleSingleScript >> loadData [ - - | dc tab | - dc := Dictionary new. - tab := RTTabTable openTSVfile. - tab ifNil: [ ^ self ]. - - tab values do: [ :line| - | a | - a := line third -> line second. - dc at: a ifAbsentPut: [ 0 ]. - dc at: a put: (dc at: a) + 1 ]. - - ^ dc -] diff --git a/src/Roassal2/RTSmallMultipleStatisticScript.class.st b/src/Roassal2/RTSmallMultipleStatisticScript.class.st deleted file mode 100644 index a5366d776..000000000 --- a/src/Roassal2/RTSmallMultipleStatisticScript.class.st +++ /dev/null @@ -1,61 +0,0 @@ -Class { - #name : #RTSmallMultipleStatisticScript, - #superclass : #RTUsefulScript, - #category : #'Roassal2-Plugins' -} - -{ #category : #accessing } -RTSmallMultipleStatisticScript >> description [ - ^ -'Gives the statistic of a TSV file (like a CSV file but with tabulation instead of comma). -The file should have 4 columns: timen1n2weight. -time is an integer value. It could represent a time period. -n1 and n2 are string values. -weight is a float value. - -A textual description is provided.' -] - -{ #category : #hooks } -RTSmallMultipleStatisticScript >> execute [ - - - | times n1 n2 weights nbDataPoints c tab | - times := Set new. - n1 := Set new. - n2 := Set new. - weights := Set new. - nbDataPoints := 0. - - tab := RTTabTable openTSVfile. - tab ifNil: [ ^ self ]. - tab values do: [ :line | - nbDataPoints := nbDataPoints + 1. - times add: line first. - n1 add: line second. - n2 add: line third. - weights add: line fourth ]. - c := (WriteStream on: String new) - nextPutAll: 'Number of data points '; - nextPutAll: nbDataPoints asString; cr; - - nextPutAll: 'Number of n1 elements '; - nextPutAll: n1 size asString; cr; - - nextPutAll: 'Number of times '; - nextPutAll: times size asString; cr; - - nextPutAll: 'Number of n2 elements '; - nextPutAll: n2 size asString; cr; - - nextPutAll: 'Number of weight elements '; - nextPutAll: weights size asString; cr; - - contents. - c inspect -] - -{ #category : #hooks } -RTSmallMultipleStatisticScript >> label [ - ^ 'CSV Statistics' -] diff --git a/src/Roassal2/RTSmoothLayoutTranslator.class.st b/src/Roassal2/RTSmoothLayoutTranslator.class.st deleted file mode 100644 index 65c2d2d72..000000000 --- a/src/Roassal2/RTSmoothLayoutTranslator.class.st +++ /dev/null @@ -1,52 +0,0 @@ -" -A ROSmoothLayoutTranslator is xxxxxxxxx. - -Instance Variables - move: - nbCycles: - -move - - xxxxx - -nbCycles - - xxxxx - -" -Class { - #name : #RTSmoothLayoutTranslator, - #superclass : #RTLayoutTranslator, - #instVars : [ - 'move', - 'nbCycles' - ], - #category : #'Roassal2-Layouts' -} - -{ #category : #testing } -RTSmoothLayoutTranslator >> hasCompleted [ - "Return true if all the translation has completed" - ^ move hasCompleted -] - -{ #category : #'initialize-release' } -RTSmoothLayoutTranslator >> initialize [ - super initialize. - - "The amount of seconds we need to complete the transition" - nbCycles := 2 -] - -{ #category : #accessing } -RTSmoothLayoutTranslator >> nbCycles: anInteger [ - "Set the number of cycle we need to complete the transition" - nbCycles := anInteger -] - -{ #category : #hook } -RTSmoothLayoutTranslator >> translate: element to: newPosition [ - move := RTLinearMove new - to: newPosition during: nbCycles on: element. - - view ifNil: [ self view: element view ]. - view addAnimation: move. -] diff --git a/src/Roassal2/RTSmoothResizeLayoutTranslator.class.st b/src/Roassal2/RTSmoothResizeLayoutTranslator.class.st deleted file mode 100644 index 34aba6177..000000000 --- a/src/Roassal2/RTSmoothResizeLayoutTranslator.class.st +++ /dev/null @@ -1,26 +0,0 @@ -" -I am a RTSmoothLayoutTranslator that also resizes the elements -" -Class { - #name : #RTSmoothResizeLayoutTranslator, - #superclass : #RTSmoothLayoutTranslator, - #instVars : [ - 'resize' - ], - #category : #'Roassal2-Interactions-MorphingView' -} - -{ #category : #testing } -RTSmoothResizeLayoutTranslator >> hasCompleted [ - "Return true if all the translation has completed" - ^ super hasCompleted and: [ resize hasCompleted ] -] - -{ #category : #hook } -RTSmoothResizeLayoutTranslator >> resize: element to: newExtent [ - - resize := RTResizeMove new toExtent: newExtent during: nbCycles on: element. - - view ifNil: [ self view: element view ]. - view addAnimation: resize. -] diff --git a/src/Roassal2/RTSoftwareHeritagePlugin.class.st b/src/Roassal2/RTSoftwareHeritagePlugin.class.st deleted file mode 100644 index fc4e9ddb4..000000000 --- a/src/Roassal2/RTSoftwareHeritagePlugin.class.st +++ /dev/null @@ -1,32 +0,0 @@ -Class { - #name : #RTSoftwareHeritagePlugin, - #superclass : #RTAbstractPlugin, - #category : #'Roassal2-Plugins' -} - -{ #category : #hooks } -RTSoftwareHeritagePlugin >> description [ - ^ 'Load: NeoJSON, SoftwareHeriatage Package and a RoassalScript to explore open projects from software heriatage' -] - -{ #category : #hooks } -RTSoftwareHeritagePlugin >> execute [ - Gofer new - smalltalkhubUser: 'SvenVanCaekenberghe' project: 'Neo'; - package: 'ConfigurationOfNeoJSON'; load. - (Smalltalk at: #ConfigurationOfNeoJSON) loadBleedingEdge. - - Gofer new - smalltalkhubUser: 'azazael' project: 'BeyondRoassal'; - package: 'softwareheritage'; load. -] - -{ #category : #hooks } -RTSoftwareHeritagePlugin >> isLoaded [ - ^ RPackageOrganizer default includesPackageNamed: 'softwareheritage' -] - -{ #category : #hooks } -RTSoftwareHeritagePlugin >> label [ - ^ 'Software Heritage' -] diff --git a/src/Roassal2/RTSortBlock.class.st b/src/Roassal2/RTSortBlock.class.st deleted file mode 100644 index 98f3e433e..000000000 --- a/src/Roassal2/RTSortBlock.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #RTSortBlock, - #superclass : #Object, - #category : #'Roassal2-Layouts' -} - -{ #category : #accessing } -RTSortBlock >> fixTemps [ -] - -{ #category : #accessing } -RTSortBlock >> value: assocA value: assocB [ - "Return false if assocA is bigger than assocB. - Return true if assocA is smaller than assocB. - -> Inverted list with biggest elements first" - - | a b offset | - offset := 0. - a := assocA value. - b := assocB value. - [(a size > offset) - and: [(b size > offset) and: [(a at: a size - offset) = (b at: b size - offset)]]] - whileTrue: [offset := offset + 1]. "Corner cases" - (a size = b size and: [b size = offset]) ifTrue: [ ^ true ]. "[3, 3], [3, 3]" - (a size > offset and: [b size = offset]) ifTrue: [ ^ true ]. "[3, 3, 6], [3, 3]" - (b size > offset and: [a size = offset]) ifTrue: [ ^ false ]. "[3, 3], [3, 3, 6]" "Normal case" - ^(a at: a size - offset) >= (b at: b size - offset) -] diff --git a/src/Roassal2/RTSourceCodeDictionary.class.st b/src/Roassal2/RTSourceCodeDictionary.class.st deleted file mode 100644 index fdcaa9216..000000000 --- a/src/Roassal2/RTSourceCodeDictionary.class.st +++ /dev/null @@ -1,12 +0,0 @@ -Class { - #name : #RTSourceCodeDictionary, - #superclass : #RTNameCloudDictionary, - #category : #'Roassal2-Builder-NameCloud' -} - -{ #category : #hooks } -RTSourceCodeDictionary >> unnecessaryWords [ - ^ #( - 'self' 'super' 'ifTrue:' 'ifFalse:' 'ifTrue' 'ifFalse' - ) -] diff --git a/src/Roassal2/RTSparkline.class.st b/src/Roassal2/RTSparkline.class.st deleted file mode 100644 index 358eb0ea8..000000000 --- a/src/Roassal2/RTSparkline.class.st +++ /dev/null @@ -1,129 +0,0 @@ -Class { - #name : #RTSparkline, - #superclass : #RTAbstractElementShape, - #instVars : [ - 'valueBlock', - 'maxValue', - 'minValue' - ], - #category : #'Roassal2-Sparkline' -} - -{ #category : #initialization } -RTSparkline >> initialize [ - super initialize. - borderWidth := 1. - borderColor := Color black. - self color: Color white -] - -{ #category : #accessing } -RTSparkline >> maxValue [ - ^ maxValue -] - -{ #category : #accessing } -RTSparkline >> maxValue: aNumber [ - self maxValueElement: [ :e | aNumber rtValue: e model ]. -] - -{ #category : #accessing } -RTSparkline >> maxValueElement: anObject [ - maxValue := anObject -] - -{ #category : #accessing } -RTSparkline >> maxValueFor: anElement [ - ^ maxValue rtValue: anElement -] - -{ #category : #accessing } -RTSparkline >> minValue [ - ^ minValue -] - -{ #category : #accessing } -RTSparkline >> minValue: aNumber [ - self minValueElement: [ :e | aNumber rtValue: e model ]. -] - -{ #category : #accessing } -RTSparkline >> minValueElement: anObject [ - minValue := anObject -] - -{ #category : #accessing } -RTSparkline >> minValueFor: anElement [ - ^ minValue rtValue: anElement -] - -{ #category : #public } -RTSparkline >> trachelShapeFor: anElement [ - | shape | - shape := TRSVGPath new. - shape strokePaint: (borderColor rtValue: anElement). - shape borderWidth: (borderWidth rtValue: anElement). - shape fillColor: (self fillColor rtValue: anElement). - self updateFor: anElement trachelShape: shape. - ^ shape -] - -{ #category : #hooks } -RTSparkline >> updateFor: element trachelShape: trachelShape [ - - | vs p path x y stepHorizontal stepVertical w h min max ny vsnil | - vs := self valuesFor: element. - vsnil := false. - vs isNil ifTrue: [ - vs := #(0 1 2). - vsnil := true ]. - w := self widthFor: element. - h := self heightFor: element. - stepHorizontal := w / vs size. - min := self minValueFor: element. - max := self maxValueFor: element. - min ifNil: [ min := vs min]. - max ifNil: [ max := vs max]. - - stepVertical := max = min - ifTrue: [ h ] - ifFalse: [ h / (max - min) ]. - p := (element position - ((w / 2) @ (h negated / 2))). - x := p x. - y := p y. - ny := vs first - min * stepVertical. - path := 'M', x asFloat asString, ',', (y - ny) asFloat asString. - - vs size = 1 - ifTrue: [ - x := x + stepHorizontal. - path := path, 'L', x asFloat asString, ',', (y - ny) asFloat asString ] - - ifFalse: [ - vs allButFirstDo: [ :v | - x := x + stepHorizontal. - ny := (v - min * stepVertical). - path := path, 'L', x asFloat asString, ',', (y - ny) asFloat asString. - ] ]. - trachelShape resetPath. - trachelShape path: path. - - "We manually specify the extent of the shape. If we do not do it, then the path will be used to determine the encompassing rectangle" - max = min ifTrue: [ h := 1 ]. - trachelShape setExtent: w @ h. - vsnil ifTrue: [ - trachelShape fillColor: Color transparent; strokePaint: Color transparent ] - - - -] - -{ #category : #accessing } -RTSparkline >> values: aBlockOrASymbol [ - valueBlock := aBlockOrASymbol -] - -{ #category : #querying } -RTSparkline >> valuesFor: anElement [ - ^ valueBlock rtValue: anElement model -] diff --git a/src/Roassal2/RTSparklineExample.class.st b/src/Roassal2/RTSparklineExample.class.st deleted file mode 100644 index fa0a369d5..000000000 --- a/src/Roassal2/RTSparklineExample.class.st +++ /dev/null @@ -1,55 +0,0 @@ -Class { - #name : #RTSparklineExample, - #superclass : #RTAbstractExample, - #category : #'Roassal2-Sparkline' -} - -{ #category : #sources } -RTSparklineExample >> exampleLOC [ - | shape es v | - shape := RTSparkline new. - shape - width: 80; - height: 20. - shape values: [ :cls | (cls rtmethods collect: #numberOfLinesOfCode) sorted ]. - es := shape elementsOn: RTShape withAllSubclasses. - es @ RTDraggable @ RTPopup. - v := RTView new. - v addAll: es. - RTGridLayout on: es. - ^ v -] - -{ #category : #icons } -RTSparklineExample >> exampleLOCIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAE+UlEQVR4XuWaWUssMRCF5+f7 -5oMg4oYg6rijgvu+466guCvuKKKIuFvjVHMjuX07mXSl2ztyDjTK6NQk83VyqiqdyeXwVUzK -4H8F+EDwhQ8EHwi+8IHgA8EXPhB8IPjCB4IPBF/4QPCFDwQfCL7wgeADwRc+EHwg+MIHgg8E -X/hA8IUPBB8IvvCB4APBFz4QfCD4wgeCDwRf+EDwhQ8EHwi+8IHgA8EXPpBE9PHxQb8SCGla -W1sTTUKPMT4+TtL3z8zM0ODgoHgM+s+3tzfymUdDQwP9CBA14NfX12Dy6iorKyPp5JWGhoYo -7sTVa9lslnwA6GpvbxePg1VZWUlSkLW1tcb3ZigkflHdhZeXlyT5QNv/dXZ2Utz357eW3MrK -CvkAUHGamppoZ2eH5ufnSTqPqakpknwfExMTNDk5aX1vZmlpSbTs1tfXg+A8ONPFf7dNzBZj -YWGBRkdHg9+Pjo5ix9jd3f1e2f39/cFlirGxsWGdS2Nj4/fvm5ubJInhsro5Bn6W9VtMne9s -Xt4+wdWSra6uTsz8VMzb21uRIU9PT3snJa4+WCgWrwgrEPWPvMSkW5k+8O3tbZqdnSXfgYf3 -4pGREZKYetwbLOqzJVlmlLeZPDGjf+D7+3uuo6NDnArqrw0PD9PT05NXVsTp8cDAwD/78fn5 -eSxDzq+mnOvKMBn64eFh4Fe+2R2L52TcstQkObNiI5SaOmcuNTU1lB84JZEYtLW1kW+M7u5u -a0IQZcicfZ2dnVF5eTn19vaSa61iMvWxsTFaXFx0joFv6oitE05huRiKs3q0nD+4rq6uglTY -taBLS2pLY2+UJgjhWBcXF5QqEH0vdynoTDFaWloKFppxxdsYbyV3d3eiSv3l5SXwR0kfLOwt -Nzc3QZHJW2SiQKLMlBOEqqoq5/Q0PNi9vT0vGFEZWnNzszFeuE3EF5sv/+Q2ycPDQ2JtG5un -ZGyVtum6v78n3UxXV1eDLUn93TW7UjHYeCsqKv76jOPj41gxCnUN+vr6jPF4FedvIK+VWKhS -1y/uQCRi6q5fEr5SNHVpuzwNT6qrqyM4IFF+8NNAosaAAOO7UrdVla2trfS/IKDBiDR1zipU -29uW2rGZShICPTFgTzo4OKDS0tKgPW7630Km7jMOTn/ZTIslBn6ljlKpq/Nv7uUkEYvrGelZ -uorBXWKfGFE1hnQ71bfo+vr6dCp1/UN8zlLCfsJNPklhpuQLwuZv0sJX6fPzM9kVEh4sF0d8 -DuIbh++8ubk5Oj09FZ/rS0CYzmAM1b0Ioi4+Hk6kUud2++PjI21tbQVBS0pKrNWwqdBUps5f -nN5kc5XeMeDWeb4/FHQNTA9T+FbZ6rzfJ0ZPTw+dnJyQd6WOryIxdX352U67khZvfXx+/acF -Ty6P36QRw6Tl5WXnrrEXEFuxaKvauZuqzi+0K/aAudPL25/LHmzS/v6+dwybt3DI6+trSqVS -dzUgPgcIv8bnC5zaPj8/O8cxTZhb9nH2/jRimIw97ANpHZQVNPWurq7ITIdP//ihMZ+7Tzdk -fppD8mhPEjGUIdse2vv1hSG+8IHgA8EXPhB8IPjCB4IPBF/4QPCFDwQfCL7wgeADwRc+EHwg -+MIHgg8EX/hA8IUPBB8IvvCB4APBFz4QfCD4wgeCDwRf+EDwhQ8EHwi+8IHgA8EXPhB8IPjC -B4IPBF/4QPCFD6So9QWkXF11duLGUQAAAABJRU5ErkJggg==' -] - -{ #category : #accessing } -RTSparklineExample >> label [ - ^ 'Sparkline' -] diff --git a/src/Roassal2/RTSparklineTest.class.st b/src/Roassal2/RTSparklineTest.class.st deleted file mode 100644 index e4ef79310..000000000 --- a/src/Roassal2/RTSparklineTest.class.st +++ /dev/null @@ -1,51 +0,0 @@ -Class { - #name : #RTSparklineTest, - #superclass : #RTTest, - #category : #'Roassal2-Sparkline' -} - -{ #category : #tests } -RTSparklineTest >> testValue [ - | shape e obj | - obj := #(1 2 3 4 5). - shape := RTSparkline new values: [ :tuple | tuple + 10 ]. - e := shape elementOn: obj. - self assert: (shape valuesFor: e) = (obj + 10). - - self assert: (shape heightFor: obj) equals: 5. - self assert: (shape widthFor: obj) equals: 5. - -] - -{ #category : #tests } -RTSparklineTest >> testWithOneValue [ - | shape e obj | - obj := #(1). - shape := RTSparkline new values: [ :tuple | tuple + 10 ]. - e := shape elementOn: obj. - self assert: (shape valuesFor: e) = (obj + 10). - - self assert: (shape heightFor: obj) equals: 5. - self assert: (shape widthFor: obj) equals: 5. - -] - -{ #category : #tests } -RTSparklineTest >> testWithOneValueAndExtent [ - | shape e obj | - obj := #(1). - shape := RTSparkline new - width: 30; - height: 20; - values: [ :tuple | tuple + 10 ]. - e := shape elementOn: obj. - self assert: (shape valuesFor: e) = (obj + 10). - - self assert: (shape heightFor: e) equals: 20. - self assert: (shape widthFor: e) equals: 30. - "because all the values are the same" - self assert: e trachelShape basicEncompassingRectangle extent equals: 30 @ 1. - self assert: e trachelShape encompassingRectangle extent equals: 30 @ 1. - self assert: e extent equals: 30 @ 1. - -] diff --git a/src/Roassal2/RTSpectrograph.class.st b/src/Roassal2/RTSpectrograph.class.st deleted file mode 100644 index eb543fcb5..000000000 --- a/src/Roassal2/RTSpectrograph.class.st +++ /dev/null @@ -1,105 +0,0 @@ -" -A RTSpectrograph is a builder to create spectographs -" -Class { - #name : #RTSpectrograph, - #superclass : #RTBuilder, - #instVars : [ - 'objects', - 'lineBlock', - 'pointSize', - 'highlightBlock' - ], - #category : #'Roassal2-Builder-Spectrograph' -} - -{ #category : #hooks } -RTSpectrograph >> createShapeBuilder [ - ^ super createShapeBuilder rectangle -] - -{ #category : #hooks } -RTSpectrograph >> createView [ - ^ super createView @ RTDraggableView -] - -{ #category : #util } -RTSpectrograph >> highlight: aBlockOrValue [ - ^ self highlight: aBlockOrValue color: Color red -] - -{ #category : #util } -RTSpectrograph >> highlight: aBlockOrValue color: aColor [ - shapeBuilder - if: [ :v | aBlockOrValue value: v first value: v second ] fillColor: aColor. - -] - -{ #category : #initialization } -RTSpectrograph >> initialize [ - super initialize. - title := '' -] - -{ #category : #accessing } -RTSpectrograph >> lineBlock [ - ^ lineBlock -] - -{ #category : #accessing } -RTSpectrograph >> lineBlock: anObject [ - lineBlock := anObject -] - -{ #category : #accessing } -RTSpectrograph >> objects [ - ^ objects -] - -{ #category : #accessing } -RTSpectrograph >> objects: anObject [ - objects := anObject -] - -{ #category : #accessing } -RTSpectrograph >> pointSize: anObject [ - shapeBuilder current size: pointSize -] - -{ #category : #'as yet unclassified' } -RTSpectrograph >> popupText: aTwoArgBlock [ - - self interaction popupText: [ :model | aTwoArgBlock value: model first value: model second ] -] - -{ #category : #hooks } -RTSpectrograph >> renderIn: aView [ - - | rowsOfElements es interaction | - interaction := RTPopup new. - rowsOfElements := OrderedCollection new. - - objects do: [ :o | - es := shapeBuilder elementsOn: ((lineBlock rtValue: o) collect: [ :computedObject | (Array with: o with: computedObject ) ]). - - RTVerticalLineLayout new gapSize: 0; on: es. - rowsOfElements add: es. - aView addAll: es. - interactionBuilder setUpElements: es - ]. - RTHorizontalLineLayout new alignBottom; gapSize: 0; on: rowsOfElements. - self setTitleIfNecessary - - -] - -{ #category : #util } -RTSpectrograph >> setTitleIfNecessary [ - "This method has to be called after having added the elements in the view" - | label g | - title ifEmpty: [ ^ self ]. - g := RTGroup withAll: view elements. - label := (RTLabel new text: title) element. - TRConstraint move: label below: g. - view add: label -] diff --git a/src/Roassal2/RTSpectrographExample.class.st b/src/Roassal2/RTSpectrographExample.class.st deleted file mode 100644 index 3efea88b5..000000000 --- a/src/Roassal2/RTSpectrographExample.class.st +++ /dev/null @@ -1,177 +0,0 @@ -" -RTSpectrographExample new installTitle: 'RoassalVisualization' - code: - '| b now | - now := DateAndTime now. - b := RTSpectrograph new. - b objects: ((RTObject withAllSubclasses , TRObject withAllSubclasses) reverseSortedAs: #livingInDays). - - b highlight: [ :cls :livingDay | cls inheritsFrom: TRObject ] color: Color lightGreen. - b highlight: [ :cls :livingDay | cls gotMethodOnDay: livingDay ]. - - b popupText: [ :cls :age | cls name, '' '', age printString , '' days old'' ]. - b lineBlock: [ :cls | 0 to: cls livingInDays ]. - - b open. - self halt. - b view canvas' - -" -Class { - #name : #RTSpectrographExample, - #superclass : #RTAbstractExample, - #category : #'Roassal2-Builder-Spectrograph' -} - -{ #category : #sources } -RTSpectrographExample >> exampleClassMethods [ - | b | - b := RTSpectrograph new. - b objects: (RTLayout withAllSubclasses reverseSortedAs: #numberOfMethods). - b popupText: [ :aClass :cm | cm methodClass name, '>>', cm selector ]. - b lineBlock: [ :cls | cls rtmethods, cls class rtmethods ]. - b highlight: [ :aClass :cm | cm methodClass isMeta ]. - b title: 'Proportion of class methods'. -b build. -^ b view -] - -{ #category : #icons } -RTSpectrographExample >> exampleClassMethodsIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABjCAYAAABt56XsAAADP0lEQVR4XuXZz0rjUBiGce/E -6xDXLl2LW3Eh4i2IUFxYFRQsCrUbN4VWUBCmgohKFxZFQUQ7bqooWu04g3+Q6hR5nX4ZUkJx -ahdDyenzwiGnJ2kK36/nJCEdHx/8hCkd/BKEDERra2rY7u/FL1OLQWJDQ3yQsIAUFhd1nkgo -NzWl+MiIzhYWvG1ldVX5+Xk+SKtBvo2Naay/X9+rxc9OTHgY/uz4lUzyQVq+ZFUL3rBVKnwQ -/l0WH4QfPgg/fBA+CD98ED4IP3wQPgg/fBA+CD98EH74IHwQfvggfBB++CB8EH74IHwQfvgg -/DgAUi6XVSwWxQfhg/BB+CB8ED4IH4QPwgfhg/BB+CB8ECjI6+urbm9v9fb2Jj5ISECur691 -d3fHB+GD8EH4IK6AWLu5uUFdS0IPcnV1hZopfBA+CB/EeRDSM4kTIKQ7LmdAKLPEGRDKLOGD -8EH4IHwQPggfBAFid1q2r53vtpwCIcwUJ0H88XZ8zcsH4YPwQfggfJDWgLTj20SnQdrxXUko -QX6XSirt7DQFEuzbjHH9OSWUINraUrmvr1bo+vYjnW6435AeHx/1/PwsPsh/BCnu7upnIvH3 -Ah7ofwXiMkyoQYKF/6wfRPoKxhWU0IJUurv1MjhYK7zfD4I0O1NcukUOLYg6O73mF976hmQz -wj4HweqXNL8fHPOXL7+FdcaEE+T8XJqZ8VpleVkvJycNP1uBbay+Hxyrb3yQT3JwcKCnpyc1 -c9y/9h0eHtb2HR8fN13kfD7PB6lPMplUKpVSLpdTNpuVX3i/b+P7+/uyQl9cXOj09NTrB4+3 -7fv7u/zz2dZ/Dnl4eJAPZUuWHWdtdnZW6eqyd3l56X3ffsOO297eZoNkMhmvECsrKxodHdXe -3p4mJye1vr6u6elp2XihUNDw8LCqxVI0GpUVPR6Pa3Nz0zvGCmqFj0QiWlpaUk9Pj7ckDQwM -qKurq3Z+QylVHzh7e3s1Nzfn/RE2Nja837VzxWIxHR0daXx8XPxrCD98ED4IP3wQPgg/fBA+ -CD98ED4IP3wQfvggfBB++CB8EH74IHwQfvggfBB++CD88EH4IPzwQfgg/PBB+CD88EH4IPzw -Qfj5A7cfNxrUTXl/AAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTSpectrographExample >> exampleRoassalVisualization [ - - - | b | - (TRPlatform current dialogConfirm: 'This example takes a long time to load, execute?') - ifFalse: [ ^ self ]. - b := RTSpectrograph new. - b objects: ((RTObject withAllSubclasses , TRObject withAllSubclasses) reverseSortedAs: #livingInDays). - - b highlight: [ :cls :livingDay | cls inheritsFrom: TRObject ] color: Color lightGreen. - b highlight: [ :cls :livingDay | cls gotMethodOnDay: livingDay ]. - - b popupText: [ :cls :age | cls name, ' ', age printString , ' days old' ]. - b lineBlock: [ :cls | 0 to: cls livingInDays ]. - - b build. - ^ b view -] - -{ #category : #icons } -RTSpectrographExample >> exampleRoassalVisualizationIcon [ - ^ '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 -4vxPXn3+B0aiQLkUjCBIAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTSpectrographExample >> exampleVeryBasic [ - | b | - b := RTSpectrograph new. - b objects: #(1 2 3 4 5). - b lineBlock: [ :v | (1 to: v) ]. - b highlight: [ :x :y | y odd ]. -b build. -^ b view -] - -{ #category : #icons } -RTSpectrographExample >> exampleVeryBasicIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABeCAYAAADVA7GfAAABtklEQVR4XuXXMUtCURiAYf+g -v8HBPXFwcBJBJRBcBBcH4SI0tTi1hJM0tDWISwjSEHgh9+SzaOoWCA3dTjwvfJPbeTj381RO -J7+UqvhHkBhIrFZxdna78I+pRJC74TAuqtXYz+cRi8X32Wx8kDJBHqfTuB+N4qbbjet2Oy5r -tciazRjV63HVasXreu2DlAmyHAziYTyO214vnmazD5xlvx/rySSes8wHKX2HvH+Szs5+74P4 -/7J8ED8fxM8H8UH8fBAfxM8H8UH8fBAfxM8H8fNBfBA/H8QH8fNBfBA/H8QH8fNB/HwQH8TP -B/FB/HwQH8TPB/FB/HwQPx/EB/HzQXwQPx/EB/HzQX77BCqFicMhfBAfxAfxQVKp0ymOD5LW -jdhut4U5Ho8+iA/ig/ggqfTSaBTGB0nsRvhL3QfxQXyQhN8ZX3eID5LYjfCXug/ig/ggCb8z -/HdI4jfCX+o+iA/ig/whSJ7n8Xl++rsP4ueD+CB+PogP4ueD+CB+PogP4ueD+PkgPoifD+KD -+PkgPoifD+KD+Pkgfj6ID+Lng/ggfj6ID+Lng/ggfj6Inw/ig/j5IP+sN1Y07qFzIeyLAAAA -AElFTkSuQmCC' -] - -{ #category : #accessing } -RTSpectrographExample >> label [ - ^ 'Spectrograph' -] diff --git a/src/Roassal2/RTSpectrographTest.class.st b/src/Roassal2/RTSpectrographTest.class.st deleted file mode 100644 index 763ccd30e..000000000 --- a/src/Roassal2/RTSpectrographTest.class.st +++ /dev/null @@ -1,60 +0,0 @@ -Class { - #name : #RTSpectrographTest, - #superclass : #RTTest, - #instVars : [ - 'b' - ], - #category : #'Roassal2-Builder-Spectrograph' -} - -{ #category : #'method timestamp' } -RTSpectrographTest >> foo [ - "timeStamp : 'AlexandreBergel 5/11/2014 00:29'" - ^ 'hello world' -] - -{ #category : #running } -RTSpectrographTest >> setUp [ - super setUp. - b := RTSpectrograph new. -] - -{ #category : #tests } -RTSpectrographTest >> testBasic [ - - b objects: #(1 2 3). - b lineBlock: [ :v | (1 to: v) ]. - b highlight: [ :v1 :v2 | v2 odd ]. - b build. - - self assert: b view numberOfElements equals: 1 + 2 + 3 -] - -{ #category : #tests } -RTSpectrographTest >> testBasicWithNoHighlight [ - - b objects: #(1 2 3). - b lineBlock: [ :v | (1 to: v) ]. - b build. - - self assert: b view numberOfElements equals: 1 + 2 + 3 -] - -{ #category : #'method timestamp' } -RTSpectrographTest >> testGotMethodOnDay [ - - self assert: (RTShape gotMethodOnDay: 0) -] - -{ #category : #tests } -RTSpectrographTest >> testHighlight [ - - b objects: (Array with: 10). - b lineBlock: [ :v | 1 to: v ]. - b highlight: [ :root :v | v = 2 ]. - b build. - self assert: (b view elementFromModel: #(10 1)) trachelShape color ~= Color red. - self assert: (b view elementFromModel: #(10 2)) trachelShape color = Color red. - - -] diff --git a/src/Roassal2/RTSpringLayoutStepping.class.st b/src/Roassal2/RTSpringLayoutStepping.class.st deleted file mode 100644 index 707b735e5..000000000 --- a/src/Roassal2/RTSpringLayoutStepping.class.st +++ /dev/null @@ -1,11 +0,0 @@ -Class { - #name : #RTSpringLayoutStepping, - #superclass : #RTForceLayoutStepping, - #category : #'Roassal2-Animation' -} - -{ #category : #readme } -RTSpringLayoutStepping >> README [ -"OBSOLETE CLASS!!! -Use RTForceLayoutStepping instead" -] diff --git a/src/Roassal2/RTSpringLayoutSteppingTest.class.st b/src/Roassal2/RTSpringLayoutSteppingTest.class.st deleted file mode 100644 index df7cadb3b..000000000 --- a/src/Roassal2/RTSpringLayoutSteppingTest.class.st +++ /dev/null @@ -1,49 +0,0 @@ -Class { - #name : #RTSpringLayoutSteppingTest, - #superclass : #RTTest, - #category : #'Roassal2-Core-Tests' -} - -{ #category : #tests } -RTSpringLayoutSteppingTest >> testAfterBlock [ - | t s | - t := 0. - s := RTForceLayoutStepping new. - s afterBlock: [ t := t + 1 ]. - self assert: t equals: 0. - s refresh; refresh. - self assert: t equals: 2. -] - -{ #category : #tests } -RTSpringLayoutSteppingTest >> testBasic [ - - | l | - l := RTForceLayoutStepping new. - self deny: l hasCompleted. - -] - -{ #category : #tests } -RTSpringLayoutSteppingTest >> testBasic2 [ - - RTForceLayoutStepping new refresh - -] - -{ #category : #tests } -RTSpringLayoutSteppingTest >> testBasic3 [ - - | v l | - l := RTForceLayoutStepping new. - self assert: l nodes isEmpty. - - v := RTView new. - v addAll: (RTBox elementsOn: (1 to: 2)). - - l view: v. - l layout: RTForceBasedLayout new. - self assert: l nodes size = 2 - - -] diff --git a/src/Roassal2/RTSqrtTransformation.class.st b/src/Roassal2/RTSqrtTransformation.class.st deleted file mode 100644 index fafd0c800..000000000 --- a/src/Roassal2/RTSqrtTransformation.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #RTSqrtTransformation, - #superclass : #RTScaleTransformation, - #category : #'Roassal2-Builder-Grapher-Scaling' -} - -{ #category : #hooks } -RTSqrtTransformation >> invTrans: value [ - ^ value * value -] - -{ #category : #hooks } -RTSqrtTransformation >> trans: aValue [ - ^ aValue sqrt -] diff --git a/src/Roassal2/RTStackBarPlot.class.st b/src/Roassal2/RTStackBarPlot.class.st deleted file mode 100644 index c0db9f591..000000000 --- a/src/Roassal2/RTStackBarPlot.class.st +++ /dev/null @@ -1,350 +0,0 @@ -Class { - #name : #RTStackBarPlot, - #superclass : #RTBuilder, - #instVars : [ - 'values', - 'normalizer', - 'widthBlock', - 'heightBlock', - 'numberOfValuesPerRow', - 'colorPalette', - 'labelBlock', - 'labelConditionalBlock', - 'labelColor', - 'legend', - 'isVertical' - ], - #category : #'Roassal2-Builder-StackBarPlot' -} - -{ #category : #'public - adding' } -RTStackBarPlot >> add: someValues [ - values add: (RTStackBarRow new values: someValues) -] - -{ #category : #'public - adding' } -RTStackBarPlot >> add: someValues title: aTitle [ - values add: (RTStackBarRow new values: someValues; title: aTitle) -] - -{ #category : #'private - utility' } -RTStackBarPlot >> addLabelToBarIfNecessary [ - labelBlock ifNil: [ ^ self ]. - view elements do: [ :e | - (labelConditionalBlock rtValue: e model) - ifTrue: [ e @ (RTLabeled new - center; - color: labelColor; - setAsShouldBeInTheFront; - text: labelBlock) ] ]. -] - -{ #category : #'public - configuration' } -RTStackBarPlot >> addLabelToBars [ - ^ self addLabelToBars: #yourself -] - -{ #category : #'public - configuration' } -RTStackBarPlot >> addLabelToBars: aBlock [ - - ^ self addLabelToBars: aBlock if: true -] - -{ #category : #'public - configuration' } -RTStackBarPlot >> addLabelToBars: aBlock if: aConditionalBlock [ - - self addLabelToBars: aBlock if: aConditionalBlock color: Color black -] - -{ #category : #'public - configuration' } -RTStackBarPlot >> addLabelToBars: aBlock if: aConditionalBlock color: aLabelColor [ - - labelBlock := aBlock. - labelConditionalBlock := aConditionalBlock. - labelColor := aLabelColor -] - -{ #category : #'public - adding' } -RTStackBarPlot >> addLegend: strings [ - "The argument is a collection of string. The size of strings (ie., number of strings provided as parameter) should the of the same size than each represented tupple." - legend := strings -" l := RTLegendBuilder new. - l view: b view. - l addText: 'How people are happy'. - l build." -] - -{ #category : #'private - utility' } -RTStackBarPlot >> addLegendIfNecessary [ - | l c | - legend ifNil: [ ^ self ]. - - l := RTLegendBuilder new. - l right. - l view: view. -" l addText: title." - 1 to: self numberOfValuesPerRow do: [ :index | - c := self colorPalette level: (self levelFor: index). - l addColor: c text: (legend at: index). - ]. - l build. -] - -{ #category : #'public - configuration' } -RTStackBarPlot >> barWidth: aWidthBlock height: aHeightBlock [ - widthBlock := aWidthBlock. - heightBlock := aHeightBlock. - -] - -{ #category : #accessing } -RTStackBarPlot >> colorPalette [ - ^ colorPalette -] - -{ #category : #hooks } -RTStackBarPlot >> createShapeBuilder [ - | sb | - sb := RTShapeBuilder new. - sb - rectangle; - height: [ :anObject | self height rtValue: anObject ]; - width: [ :anObject | self width rtValue: anObject ]; - color: [ :association | - self colorPalette level: (self levelFor: association value) ]; - yourself. - ^ sb - - -] - -{ #category : #hooks } -RTStackBarPlot >> createView [ - ^ super createView @ RTDraggableView -] - -{ #category : #configuration } -RTStackBarPlot >> defaultBarHeight [ - "Default bar height" - ^ 20 -] - -{ #category : #configuration } -RTStackBarPlot >> defaultBarWidth [ - ^ 150 -] - -{ #category : #examples } -RTStackBarPlot >> example01 [ - - | b | - b := RTStackBarPlot new. - b add: #(1 2 3 4). - b add: #(4 3 2 1). - b add: #(5 3 2 0). - ^ b -] - -{ #category : #examples } -RTStackBarPlot >> example02 [ - - -| b | -b := RTStackBarPlot new. -b interaction popupText; draggable. -b colorPalette colors: (Array with: Color blue with: Color gray with: Color red ). -b add: #(1 2 3 4 ). -b add: #(4 3 2 1). -b add: #(5 3 2 0). - -b barWidth: 150 height: 20. - -^ b -] - -{ #category : #examples } -RTStackBarPlot >> example03 [ - - | b | - b := RTStackBarPlot new. - b interaction popupText; draggable. - b colorPalette colors: (Array with: Color blue with: Color lightBlue ). - b add: #(37 33 0 0 0) title: 'DN1'. - b add: #(24 26 17 3 0) title: 'DN2'. - b add: #(25 29 15 1 0) title: 'DN3'. - b add: #(30 33 6 1 0) title: 'DN4'. - - b addLegend: #('strongly agree' 'agree' 'neutral' 'disagree' 'strongly disagree'). - b barWidth: 150 height: 20. - - b addLabelToBars: #key. - - ^ b -] - -{ #category : #examples } -RTStackBarPlot >> example04 [ - - | b | - b := RTStackBarPlot new. - b interaction popupText; draggable. - b colorPalette colors: (Array with: Color blue with: Color lightBlue ). - b add: #(37 33 0 0 0) title: 'DN1'. - b add: #(24 26 17 3 0) title: 'DN2'. - b add: #(25 29 15 1 0) title: 'DN3'. - b add: #(30 33 6 1 0) title: 'DN4'. - - b addLegend: #('strongly agree' 'agree' 'neutral' 'disagree' 'strongly disagree'). - b barWidth: 150 height: 20. - - b addLabelToBars: #key if: [ :assoc | assoc key > 10 ]. - ^ b -] - -{ #category : #examples } -RTStackBarPlot >> example05 [ - - | b | - b := RTStackBarPlot new. - b interaction popupText. - b colorPalette colors: (Array with: Color blue with: Color lightBlue ). - b add: #(37 33 0 0 0) title: 'DN1'. - b add: #(24 26 17 3 0) title: 'DN2'. - b add: #(25 29 15 1 0) title: 'DN3'. - b add: #(30 33 6 1 0) title: 'DN4'. - - b addLegend: #('strongly agree' 'agree' 'neutral' 'disagree' 'strongly disagree'). - b barWidth: 260 height: 20. - - b addLabelToBars: [ :assoc | (assoc key / b totalSum * 100) asInteger asString, '%' ] if: [:assoc | assoc key > 5 ] color: Color white. - - ^ b -] - -{ #category : #accessing } -RTStackBarPlot >> height [ - "Return the height that will be used for drawing the bars" - ^ heightBlock -] - -{ #category : #accessing } -RTStackBarPlot >> horizontal [ - isVertical := false. -] - -{ #category : #initialization } -RTStackBarPlot >> initialize [ - super initialize. - values := OrderedCollection new. - self horizontal. - colorPalette := RTMultiLinearColorForIdentity new. - self barWidth: self defaultBarWidth height: self defaultBarHeight. - - labelConditionalBlock := true. - labelColor := Color black -] - -{ #category : #accessing } -RTStackBarPlot >> isVertical [ - ^ isVertical -] - -{ #category : #'private - utility' } -RTStackBarPlot >> levelFor: value [ - | temp | - temp := self numberOfValuesPerRow -1. - ^ temp <= 0 - ifTrue: [ 1 ] - ifFalse: [ (value-1) / temp] -] - -{ #category : #accessing } -RTStackBarPlot >> normalizer [ - normalizer ifNil: [ normalizer := RTMetricNormalizer new ]. - ^ normalizer -] - -{ #category : #accessing } -RTStackBarPlot >> numberOfValuesPerRow [ - ^ numberOfValuesPerRow -] - -{ #category : #configuration } -RTStackBarPlot >> offsetBetweenBarAndTitle [ - ^ 21 -] - -{ #category : #hooks } -RTStackBarPlot >> renderIn: aView [ - | elements lines lbl maxSum| - numberOfValuesPerRow := values first numberOfValues. - maxSum := (values collect: #totalSum) max. - lines := RTGroup new. - values - do: [ :tupple | - elements := tupple values asGroup collectWithIndex: [ :aValue :index | self elementOn: aValue -> index ]. - aView addAll: elements. - lines add: elements ]. - lines doWithIndex: [ :l :i | - self isVertical ifTrue: [ - self normalizer - elements: l; - normalizeHeight: [ :m | m key * maxSum / (values at: i) totalSum ] - min: 0 - max: heightBlock - minValue: 0 - maxValue: maxSum - ] ifFalse: [ - self normalizer - elements: l; - normalizeWidth: [ :m | m key * maxSum / (values at: i) totalSum ] - min: 0 - max: widthBlock - minValue: 0 - maxValue: maxSum - ] ]. - lines - do: [ :aLineOfElements | - (self isVertical - ifTrue: [ RTVerticalLineLayout ] - ifFalse: [ RTHorizontalLineLayout ]) new - gapSize: 0; - on: aLineOfElements ]. - (self isVertical - ifTrue: [ RTHorizontalLineLayout ] - ifFalse: [ RTVerticalLineLayout ]) on: lines. - - self addLabelToBarIfNecessary. - values with: lines do: [ :barRow :line | | const fix | - barRow title ifNotNil: [ - lbl := (RTLabel new text: barRow title) element. - aView add: lbl. - fix := line first. - self isVertical ifTrue: [ - fix := line last. - lbl rotateByDegrees: -30 ]. - const := RTConstraint movable: lbl fix: fix. - const outer. - self isVertical - ifTrue: [ const verticalPadding: self offsetBetweenBarAndTitle; bottom ] - ifFalse: [ const horizontalPadding: self offsetBetweenBarAndTitle; left ]. - const move] ]. - - self addLegendIfNecessary -] - -{ #category : #accessing } -RTStackBarPlot >> totalSum [ - ^ values first totalSum -] - -{ #category : #accessing } -RTStackBarPlot >> vertical [ - isVertical := true. -] - -{ #category : #accessing } -RTStackBarPlot >> width [ - "Return the width that will be used for drawing the bars" - ^ widthBlock -] diff --git a/src/Roassal2/RTStackBarPlotExample.class.st b/src/Roassal2/RTStackBarPlotExample.class.st deleted file mode 100644 index e952c074c..000000000 --- a/src/Roassal2/RTStackBarPlotExample.class.st +++ /dev/null @@ -1,180 +0,0 @@ -" -RTStackBarPlotExample new installTitle: 'SimpleWithDifferentColor' - code: - ' -| b | -b := RTStackBarPlot new. -b interaction popupText. -b colorPalette colors: { Color blue . Color gray . Color red }. -b add: #(1 2 3 4 ). -b add: #(4 3 2 1). -b add: #(5 3 2 0). - -b barWidth: 200 height: 20. -b open. -^ b view canvas' - -" -Class { - #name : #RTStackBarPlotExample, - #superclass : #RTAbstractExample, - #category : #'Roassal2-Builder-StackBarPlot' -} - -{ #category : #sources } -RTStackBarPlotExample >> exampleSimple [ - | b | - b := RTStackBarPlot new. - b add: #(1 2 3 4). - b add: #(4 3 2 1). - b add: #(5 3 2 0). - b build. - ^ b view -] - -{ #category : #icons } -RTStackBarPlotExample >> exampleSimpleIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAABR0lEQVR4XuXVsQmAMBRF0Sxr -7SKCO2llqZVD6Ao/WlkpKgQUzoUskAPvp5z9/lTyv8AH8fNBfBA/H8QH8fNBfBA/H8QH8fNB -/HwQH8TPB/FB/HwQH8TPB/FB/HwQPx/EB/HzQXwQPx/EB/HzQXwQPx/EzwfxQfx8EB/Ezwfx -Qfx8EB/Ezwfx80F8ED8fxAcp0tI2x5uH6vRN/XT78lq/erHng/ggPogP4oP4R90/6n7GZD15 -V7P2ZOJiqcOfLB/EB/FBfBD/qPtH3c+frBLzNXZjnM6XP1nfgFzeEx/EB/FBfJD3xUf5R93P -B/FB/HwQH8TPB/FB/HwQH8TPB/HzQXwQPx/EB/HzQXwQPx/EB/HzQfx8EB/EzwfxQfx8EB/E -zwfxQfx8ED8fxAfx80F8ED8fxAfx80F8ED8fxM8H8UH8fBAfxK9IG4S3hO8XsV6oAAAAAElF -TkSuQmCC' -] - -{ #category : #sources } -RTStackBarPlotExample >> exampleSimpleWithDifferentColor [ - - | b | - b := RTStackBarPlot new. - b interaction popupText. - b colorPalette colors: (Array with: Color blue with: Color gray with: Color red ). - b add: #(1 2 3 4 ). - b add: #(4 3 2 1). - b add: #(5 3 2 0). - - b barWidth: 200 height: 20. - b build. - ^ b view -] - -{ #category : #icons } -RTStackBarPlotExample >> exampleSimpleWithDifferentColorIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABeCAYAAADVA7GfAAABbElEQVR4XuXW4QmCUBSAUUdp -FEdxEdEN2kDbwA3UCWqD3KAm6L78E0FQYREY54M7gO/guy9LyW9NZf4R+CB+PogP4ueD+CB+ -PogP4ueD+CB+PoifD+KD+PkgPoifD+KD+PkgPoifD+Lng/ggfj6ID+Lng/ggfj6ID+Lng/j5 -ID6Inw/ig/j5ID6Inw/ig/j5IH5rALlcIvJ8TPcZoq7r9GrGPF8002Yzf1328URZhg/ig/gg -PogP4i91f6n7/fuVtXzeXXGPsyuKd1dc+DvEB/FBfBAfZP0gMde2U/pmhmFYNIeuS1PbPp3z -dhupqtJtou/9Z6/fH/8hv/5jTvu9v0PWtFOOTeOD+CA+iA/i7xD/leW/svx8EB/EzwfxQfx8 -EB/EPwIfxM8H8UH8fBAfxM8H8UH8fBAfxM8H8fNBfBA/H8QH8fNBfBA/H8QH8fNB/HwQH8TP -B/FB/HwQH8TPB/FB/HwQPx/EB/Fb1hXzQ/HInLBYRQAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTStackBarPlotExample >> exampleSurveyResult [ - | b | - b := RTStackBarPlot new. - b interaction popupText. - b colorPalette colors: (Array with: Color blue with: Color lightBlue ). - b add: #(37 33 0 0 0) title: 'DN1'. - b add: #(24 26 17 3 0) title: 'DN2'. - b add: #(25 29 15 1 0) title: 'DN3'. - b add: #(30 33 6 1 0) title: 'DN4'. - - b addLegend: #('strongly agree' 'agree' 'neutral' 'disagree' 'strongly disagree'). - b barWidth: 260 height: 20. - - b addLabelToBars: [ :assoc | (assoc key / b totalSum * 100) asInteger asString, '%' ] if: [:assoc | assoc key > 5 ] color: Color white. - - b build. - ^ b view -] - -{ #category : #icons } -RTStackBarPlotExample >> exampleSurveyResultIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAGXklEQVR4XuWa6U9VRxjG/Xe6 -pW3salvTNI2NrWnTutASNYW6VEQtVqEWKgiirOJ1AS6CCLIqi0ihIKAERQ01LCYEJTRRU5T4 -wQ8kxhhxnr4zh1sLgj3nbnJ9nmRyzpl7DjHzc973mXdmHsCvuaR5/EPAD4Rf/ED4gfCLHwg/ -EH7xA+EHwi9+IPxA+MUPhF/8QPiB8IsfCD8QfvED4QfCL34g/ED4xQ+EX/xA+IHwix8IPxB+ -8QPhB8IvfiD8QPjFD4Rf/ED4gfCLHwg/EH7xAwmYxsbG1MDAQNCbFj+QGTQ5LkHX48eP+YHM -BkQz8TS7Ghoa4gcSKCCH3MBL82GuWg8fPkRdXR3Cw8PhcrmQlZWFc+fOITU1FTdv3kRsbCzq -6+tRVlZm3uvs7ER7ezsyMzNNS0tLQ1JSkrnX/fxAfARy//59bNmyBWFhYaisrMTOnTvNwGoI -bW1tiIiIQH5+Pqqqqsz7UVFRSExMxMKFC01/R0cHioqKzHezzSSvgUxMKKX/scFqX68LbKts -mBqYnOaQiYkJnD171ty3trZO+a2lpQXj4+PehayDBw+q+Ph4lZeXp/r7+9WDBw9URkaG8gXI -mo1A/C5g6w5gbTQQHgksX+V/IN9tAqpOAyd+Bw6XAFkFQMS24AAJWFIvLCxUpaWlSuKgSklJ -MT/6CuTlt4D9uTJgEdbzrr1AzC/+B7IpEahpBnYfADbEA9lHgPyyEAcSqJD16jtP7l9/b+pz -oELW0vUyEzeQAGFI6jr8aVj66pFOzL29veaqc4VO6tphdXd38wMJNhDdJ+HcuKjz588bd6Xt -r+Rd47JCKmTN1j5a4l+39KvbWdsng338CtA/aj9kacs63UkFLGRNd1mDg4MqNzfXdlLXCfyY -JNL5H1r+ff9hYOUa74BkyvcpkqB7+mXwMoDYPc6AVMra68BJ4K+/gYIGILfeP0Ceq8vSunDh -giOXFfsbsGQZ4C4C4uR+8Tcy8IucA1n1k2Vd94lb+nk3kCN/L3KbfSD5p4BUsb9dAvRQLVDd -Aew9HmJA/BGy3lzw5P6Vt4HX3vVuhoRtfLpv2Y++hayEghcUCENS77hiQWv7kx/InAaSnJyM -7OxsuN1upKenm77i4mKcOXNGD2hou6xA1anWJjpxWurfjSE7IUvXrXSRsKmpCX19fWYtop2X -VDQMkLt37/oPyOXLl5UsepS+Pnr0SN24cUN1dXU5SuqffQV8sRT44FOrjrVitW9A4vZaK+6k -HGn7ge17nAEpbJTyTzngOiHllEop3Rz1DUhQQ1Zzc7PpEPrGbU1OUUdAtkqd6ssVQF6hWN4f -gKISq89bIN0SOtbEip0+adnf+lbLfdkF4pLvksShHa4TG11suS33qRABMjw8rEpKSpS+6udr -164pDyS7QFxSSPxcZkik/K9+/xNgkcyYjxd7D0S7rZhka8W8OsYqHGpAdoG0C9Ajp62rp0/D -CQkgDhPfC6OZkvqYbGEMjMJc/6s7d+7wu6zn4bI0DL1G0Vctvcl08eJFU8OKiYnBrVu3zO5h -QUEBGhsb0dPTY3YDc3JyEB0dHbouK9i7gzM5MM+g/98MuX79unFUUlIyFV+9G6gLjFevXjW/ -611DCfcYHR31D5Da2lpVXV2tampq1MjIiJosOXu1QfXt91YJZdlKe27LCZD1O6wdwvhM2btO -kF3IzfaBJLiAo7KreLxFyjHVswOxKw3J1/XHM2tZ4qtVeXm5SktLU7LgUQkJCV4BaWmzkvm6 -TfbclhMgLZ0ysFmW61opNa8ccXQ70u19m5oPNHZbdrj0D3Fex3wDEtAcoo+1XLp0yZyik40Y -8+O9e/e8AvKG1LRWr7OqvnbcltOQtTzKguJ53p5q77vNso4pbpI1SZVVdPR1hvC7rCA4Lf2o -U4fmNO5gTKYf79G7i3o1z++y/OCyNIwrk1C0nB6U0wfiJAWgoaFhysE5/Z7uq6ioeOrgHD+Q -ZwCZPkOcHpSLi4szcCQfm+88B+f0e/qbmQ7O8QN5BhBny4DZD8rN9h5/yHKg27dvm9gf7MYP -ZI6KHwg/EH7xA+EHwi9+IPxA+MUPhB8Iv/iB8APhFz8QfvED4QfCL34g/ED4xQ+EHwi/+IHw -A+EXPxB+8QPhB8IvfiD8QPjFD4QfCL/4gfAD4Rc/EH7xA+EHwi9+IPxA+OVH/QN5hH7m1fOr -+wAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTStackBarPlotExample >> exampleVerticalStackBarPlot [ - -| b | -b := RTStackBarPlot new. -b vertical. -b interaction popupText. -b colorPalette colors: (Array with: Color green with: Color red). -b add: #(37 33 ) title: 'SampleText1'. -b add: #(24 26 ) title: 'SampleText2'. -b add: #(25 29 ) title: 'SampleText3'. -b add: #(30 33 ) title: 'SampleText4'. -b addLegend: #('yes' 'no'). -b barWidth: 40 height: 260. -b - addLabelToBars: [:assoc | (assoc key / b totalSum * 100) asInteger asString , '%'] - if: [:assoc | assoc key > 5] - color: Color black. -b build. -^ b view -] - -{ #category : #icons } -RTStackBarPlotExample >> exampleVerticalStackBarPlotIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAD+klEQVR4XuWcy0uUURiHBxc1 -/0DMdrzgInHbSsTb4P1+Q/EGCu1ctioUdxW0iKxFgbjIJME25WibyAupi6BAUAgTQV24cBNZ -Rmd63/EoCt83zsDQ9+nD8DDfN+fHt3ifM+cc5zufgaKiohgf/xDgF4EvhA9fCF8IH74QvhA+ -fCF8IXz4QvhC+IXgC+HDF8IXwocvhC8kMYWRQlNQVeCKtnuZwwkJj4VjgQQvbfcyxxfCF8IX -whfCF8IXwhfCF8IXwhfCF8IXwhfCF8IXwhdyWYRsyScLwqawJ2wLKy65N8IzYV3YFWZchEwJ -r4SovfYqX8hxAV/YwvwR1mzRnQo4ItwW3gpLwrBD7rN88kD4KjyxuXGHXNQKWLL6R4VJvpBY -4IuU4LWVMS9MC7MOBdywPVlfv4R9YSKNQ9ahcMQXctyTPwnLwk/hwIrhzyH8SZ0vhC+EL4Qv -hC+EL4QvhC+EL4QvhC+EL4QvxKdCbo1km/zFa65ou+bGwuFYLBBwRds119sbjg0NBVzRdr6Q -BEKSLXS6c3whfCHeCnl0M9t8u3HdFW33q5CBgYGk9/+mkvVUiFeF5gu5okJCcyGjQ2twJ3iu -4OXl5aaqqsp0dHQYvhCPhfT395vGxkZTU1Nj2tra+EL+p5D8O/km62mWyX2Ye1rw1tbWk2NT -XFzMF8KfQ/hC+EL4QvhC+EL4QnwuZEvOF4Qd4b2wLaw45P7K+TthRlgXdu2xk5Ap4b4wbq+9 -mqKQuVDIaH4nGDRXSsiiLcwHYU3YdCngiLAs/BCWhGGH3Ec5v2cL/Nvmxh1yUSvgpW0bFSbT -IESXvYODg6alpcVcSiFawO+CfgP2hGlh1qGAG3IetdK0bV+YSOOQdSgcpSjkbl6e0ezjnJzT -gldWVpqKigpz5u+Ry/cNOThTaD2e588h/Ek9VSF9fX2mq6srKfTnFL4Q/v0QvhC+EL4QvhC+ -EL4QvhC+EL4QvhC+EL4Q/wt5nplpDjMyXNF2L3P8/0rKhy+EL4QPXwhfCJ+rLaS2tjapVU99 -fb3RfbXJ5HTv7UU53Xl4svuQL8RSV1dnqqurz92jdsspZ2+dJrpee3v7hTnN6I0ovhCLblrW -O25NTU2mubnZJJPr6elJKqdclLOdgC1Et/CXlZXFC6tDi1uP9yqHEaJDhM4VkUgkPlRoURS/ -5HBCtEfqeK1baBINE17lMEJ0vO7s7Iw/bZRo5eNVDiOktLTUdHd3x3umvrstV73KIYRoEUpK -SkxDQ0N88tThQh/98ksOJ0QnT11KakFOnr/zUw45ZCW7tvcqx//phA9fCF8IH74QvhA+fCF8 -IXz4QvjwhfCF8OEL4QvhwxfCF8KHL4QvhI+3/AOXK+27CEfa9wAAAABJRU5ErkJggg==' -] - -{ #category : #accessing } -RTStackBarPlotExample >> label [ - ^ 'StackBarPlot' -] diff --git a/src/Roassal2/RTStackBarPlotTest.class.st b/src/Roassal2/RTStackBarPlotTest.class.st deleted file mode 100644 index 30df9e656..000000000 --- a/src/Roassal2/RTStackBarPlotTest.class.st +++ /dev/null @@ -1,57 +0,0 @@ -Class { - #name : #RTStackBarPlotTest, - #superclass : #RTTest, - #category : #'Roassal2-Builder-StackBarPlot' -} - -{ #category : #tests } -RTStackBarPlotTest >> testBarHeight [ - - | b e | - b := RTStackBarPlot new. - b add: #(37). - b barWidth: 150 height: 50. - b build. - self assert: b view numberOfElements equals: 1. - - e := b view elements anyOne. - self assert: e extent y equals: 50 -] - -{ #category : #tests } -RTStackBarPlotTest >> testDefault [ - - | b | - b := RTStackBarPlot new. - self assert: b height equals: 20. - self assert: (b createShapeBuilder current height rtValue: RTElement new) equals: 20. -] - -{ #category : #tests } -RTStackBarPlotTest >> testExample01 [ - - | b | - b := RTStackBarPlot new. - b add: #(1 2 3 4). - b add: #(4 3 2 1). - b add: #(5 3 2 0). - b barWidth: 150 height: 20. - b build. - - self assert: (b view elements collect: #position) asArray equals: ((Array new: 12) at: 1 put: ((7.5@10.0)); at: 2 put: ((30.0@10.0)); at: 3 put: ((67.5@10.0)); at: 4 put: ((120.0@10.0)); at: 5 put: ((30.0@40.0)); at: 6 put: ((82.5@40.0)); at: 7 put: ((120.0@40.0)); at: 8 put: ((142.5@40.0)); at: 9 put: ((37.5@70.0)); at: 10 put: ((97.5@70.0)); at: 11 put: ((135.0@70.0)); at: 12 put: ((150.0@70.0)); yourself) asArray - -] - -{ #category : #tests } -RTStackBarPlotTest >> testExample02 [ - - | b | - b := RTStackBarPlot new. - b add: #(1 2 3 4). - b add: #(4 3 2 1). - b add: #(5 3 2 0). - b build. - - self assert: (b view elements collect: #position) asArray equals: ((Array new: 12) at: 1 put: ((7.5@10.0)); at: 2 put: ((30.0@10.0)); at: 3 put: ((67.5@10.0)); at: 4 put: ((120.0@10.0)); at: 5 put: ((30.0@40.0)); at: 6 put: ((82.5@40.0)); at: 7 put: ((120.0@40.0)); at: 8 put: ((142.5@40.0)); at: 9 put: ((37.5@70.0)); at: 10 put: ((97.5@70.0)); at: 11 put: ((135.0@70.0)); at: 12 put: ((150.0@70.0)); yourself) asArray - -] diff --git a/src/Roassal2/RTStackBarRow.class.st b/src/Roassal2/RTStackBarRow.class.st deleted file mode 100644 index fe0966d94..000000000 --- a/src/Roassal2/RTStackBarRow.class.st +++ /dev/null @@ -1,39 +0,0 @@ -Class { - #name : #RTStackBarRow, - #superclass : #RTObject, - #instVars : [ - 'values', - 'title' - ], - #category : #'Roassal2-Builder-StackBarPlot' -} - -{ #category : #'accessing - computed' } -RTStackBarRow >> numberOfValues [ - ^ values size -] - -{ #category : #accessing } -RTStackBarRow >> title [ - ^ title -] - -{ #category : #accessing } -RTStackBarRow >> title: aString [ - title := aString -] - -{ #category : #'accessing - computed' } -RTStackBarRow >> totalSum [ - ^ values sum -] - -{ #category : #accessing } -RTStackBarRow >> values [ - ^ values -] - -{ #category : #accessing } -RTStackBarRow >> values: aCollection [ - values := aCollection -] diff --git a/src/Roassal2/RTStandardDeviationDecorator.class.st b/src/Roassal2/RTStandardDeviationDecorator.class.st deleted file mode 100644 index 53ae8cf0c..000000000 --- a/src/Roassal2/RTStandardDeviationDecorator.class.st +++ /dev/null @@ -1,38 +0,0 @@ -" -Display the standard deviation of the data - --=-=-=-= -b := RTGrapher new. -ds := RTDataSet new. -ds dotShape color: Color red. -ds points: #(5 1 20 8). -b add: ds. -b addDecorator: (RTAverageDecorator new withLabel; labelConvertion: [ :aValue | 'average = ', aValue asFloat asString ]). -b addDecorator: (RTStandardDeviationDecorator new lineColor: Color blue) . -b --=-=-=-= -" -Class { - #name : #RTStandardDeviationDecorator, - #superclass : #RTAbstractAverageDecorator, - #category : #'Roassal2-Builder-Grapher-Decorators' -} - -{ #category : #'drawing-hooks' } -RTStandardDeviationDecorator >> render [ - | values average stdev from to | - values := self datasetValues. - "Standard Deviation requires at least two values." - values size < 2 - ifTrue: [ ^ self ]. - average := values average. - stdev := values stdev. - from := builder getPixelPositionOf: builder minX @ (average + stdev). - to := builder getPixelPositionOf: builder maxX @ (average + stdev). - self lineFrom: from to: to. - from := builder getPixelPositionOf: builder minX @ (average - stdev). - to := builder getPixelPositionOf: builder maxX @ (average - stdev). - self lineFrom: from to: to. - shouldHaveLabel - ifTrue: [ self label: (labelBlock rtValue: average) asString above: to ] -] diff --git a/src/Roassal2/RTStretchBehavior.class.st b/src/Roassal2/RTStretchBehavior.class.st deleted file mode 100644 index 90270d7d1..000000000 --- a/src/Roassal2/RTStretchBehavior.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #RTStretchBehavior, - #superclass : #RTNestingBehavior, - #category : #'Roassal2-Core' -} - -{ #category : #hooks } -RTStretchBehavior >> on: backElement setNested: elements [ - "It makes a scaling/zooming effect. - If you change backElement's extent, it changes proportionaly extent and position of nested elements. - So the overall image --- composition of backElement and elements --- does not change. - It only zoom in/out the overall image." - | callback | - super on: backElement setNested: elements. - callback := TRExtentCallback block: [ :shape :ratio | - | mainPosition | - mainPosition := backElement position. - elements do: [ :eachElement | - | eachPosition | - eachPosition := eachElement position. - eachElement - extent: eachElement extent * ratio; - translateTo: mainPosition + ((eachPosition - mainPosition) * ratio) ] ]. - backElement trachelShape addCallback: callback -] diff --git a/src/Roassal2/RTStyledLabel.class.st b/src/Roassal2/RTStyledLabel.class.st deleted file mode 100644 index aa51bac8f..000000000 --- a/src/Roassal2/RTStyledLabel.class.st +++ /dev/null @@ -1,125 +0,0 @@ -" -I am a label that can be emphasized. - -!! Usage - -==label emphasis: TextEmphasis bold.== -or -==label emphasis: { TextEmphasis bold . TextEmphasis underlined }== - -!! Example - -[[[ -|v| -v := RTView new. -l := RTStyledLabel new - color: Color black; - emphasis: TextEmphasis underlined; - elementOn: 'Underlined Text'. -v add: l. -v open. -]]] -" -Class { - #name : #RTStyledLabel, - #superclass : #RTLabel, - #instVars : [ - 'emphasis' - ], - #category : #'Roassal2-Shapes' -} - -{ #category : #'public - configuration' } -RTStyledLabel >> bold [ - emphasis add: self emphasisClass bold -] - -{ #category : #accessing } -RTStyledLabel >> emphasis: aValueOrOneArgBlock [ - self emphasisElement: [ :anElement | aValueOrOneArgBlock rtValue: anElement model ] -] - -{ #category : #'private - utility' } -RTStyledLabel >> emphasisClass [ - - ^ TRPlatform current textEmphasisClass -] - -{ #category : #accessing } -RTStyledLabel >> emphasisElement: aValueOrBlock [ - emphasis := aValueOrBlock -] - -{ #category : #accessing } -RTStyledLabel >> emphasisFor: anElement [ - ^ emphasis rtValue: anElement -] - -{ #category : #initialization } -RTStyledLabel >> initialize [ - super initialize. - emphasis := OrderedCollection new -] - -{ #category : #'public - configuration' } -RTStyledLabel >> italic [ - emphasis add: self emphasisClass italic -] - -{ #category : #'public - configuration' } -RTStyledLabel >> narrow [ - emphasis add: self emphasisClass narrow -] - -{ #category : #'public - configuration' } -RTStyledLabel >> normal [ - emphasis add: self emphasisClass normal -] - -{ #category : #'public - configuration' } -RTStyledLabel >> struckOut [ - emphasis add: self emphasisClass struckOut -] - -{ #category : #'trachel shape production' } -RTStyledLabel >> trachelShapeForOneLine: anElement [ - | shape | - shape := TRStyledLabelShape new. - shape - text: (self textFor: anElement); - color: (self colorFor: anElement); - position: anElement position; - fontSize: (self heightFor: anElement); - fontName: (self fontNameFor: anElement); - emphasis: (self emphasisFor: anElement). - ^ shape -] - -{ #category : #'public - configuration' } -RTStyledLabel >> underlined [ - emphasis add: self emphasisClass underlined -] - -{ #category : #'trachel shape production' } -RTStyledLabel >> updateFor: anElement trachelShape: trachelShape [ - trachelShape isNil - ifTrue: [ ^ self ]. - trachelShape - color: (self colorFor: anElement); - fontSize: (self heightFor: anElement); - fontName: (self fontNameFor: anElement); - emphasis: (self emphasisFor: anElement); - position: anElement position; - text: (self textFor: anElement) on: anElement position; - rotateByDegrees: (self rotationFor: anElement); - scaleBy: (self scaleFor: anElement) -] - -{ #category : #rendering } -RTStyledLabel >> widthFor: anElement [ - ^ TRStyledLabelShape - widthOfText: (self textFor: anElement) - fontName: (self fontNameFor: fontName) - fontSize: (self heightFor: anElement) - emphasis: (self emphasisFor: anElement) -] diff --git a/src/Roassal2/RTStyledMultiLine.class.st b/src/Roassal2/RTStyledMultiLine.class.st deleted file mode 100644 index 3a36d0120..000000000 --- a/src/Roassal2/RTStyledMultiLine.class.st +++ /dev/null @@ -1,258 +0,0 @@ -" -A RTMultiLineHeaded is a multi-purpose modification of RTMultiLine with head and/or tail (like arrow) and possibility of being styled (dashed, dotted...). - --=-=-= -v := RTView new. - -es := (RTEllipse new size: 20; color: (Color blue alpha: 0.3)) elementsOn: (1 to: 10). -RTCircleLayout new on: es allButFirst. -v addAll: es. -es @ RTDraggable. -TRConstraint move: es first onTheCenterOf: es allButFirst. - -shape := RTStyledMultiLine new. -shape filledArrowHead; arrowTail; dashdotLine; orthoVertical. -shape attachPoint: (RTRectangleAttachPoint new). -lines := shape edgesFrom: es first toAll: es allButFirst. -v addAll: lines. - -v --=-=-= -" -Class { - #name : #RTStyledMultiLine, - #superclass : #RTMultiLine, - #instVars : [ - 'head', - 'tail', - 'dashes', - 'capStyle' - ], - #category : #'Roassal2-Shapes' -} - -{ #category : #heads } -RTStyledMultiLine >> arrowHead [ - self head: RTSimpleArrow asHead -] - -{ #category : #heads } -RTStyledMultiLine >> arrowTail [ - self tail: RTSimpleArrow asTail -] - -{ #category : #'attach point' } -RTStyledMultiLine >> attachPoint: anAttachPoint [ - tail attachPoint: anAttachPoint. - head attachPoint: anAttachPoint. - attachPoint := anAttachPoint -] - -{ #category : #accessing } -RTStyledMultiLine >> color: aColor [ - tail color: aColor. - head color: aColor. - color := aColor -] - -{ #category : #'line styles' } -RTStyledMultiLine >> dashdotLine [ - dashes := #("fill" 6 "gap" 3 "fill" 1 "gap" 3) -] - -{ #category : #'line styles' } -RTStyledMultiLine >> dashedLine [ - dashes := #("fill" 6 "gap" 4) -] - -{ #category : #accessing } -RTStyledMultiLine >> dashes [ - ^ dashes -] - -{ #category : #'line styles' } -RTStyledMultiLine >> dottedLine [ - dashes := #("fill" 1 "gap" 2) -] - -{ #category : #heads } -RTStyledMultiLine >> emptyArrowHead [ - self head: RTEmptyArrow asHead -] - -{ #category : #heads } -RTStyledMultiLine >> emptyArrowTail [ - self tail: RTEmptyArrow asTail -] - -{ #category : #heads } -RTStyledMultiLine >> emptyCircleHead [ - self head: RTEmptyCircle asHead -] - -{ #category : #heads } -RTStyledMultiLine >> emptyCircleTail [ - self tail: RTEmptyCircle asTail -] - -{ #category : #heads } -RTStyledMultiLine >> emptyDiamondHead [ - self head: RTEmptyDiamond asHead -] - -{ #category : #heads } -RTStyledMultiLine >> emptyDiamondTail [ - self tail: RTEmptyDiamond asTail -] - -{ #category : #heads } -RTStyledMultiLine >> emptyNarrowArrowHead [ - self head: RTEmptyNarrowArrow asHead -] - -{ #category : #heads } -RTStyledMultiLine >> emptyNarrowArrowTail [ - self tail: RTEmptyNarrowArrow asTail -] - -{ #category : #heads } -RTStyledMultiLine >> filledArrowHead [ - self head: RTFilledArrow asHead -] - -{ #category : #heads } -RTStyledMultiLine >> filledArrowTail [ - self tail: RTFilledArrow asTail -] - -{ #category : #heads } -RTStyledMultiLine >> filledCircleHead [ - self head: RTFilledCircle asHead -] - -{ #category : #heads } -RTStyledMultiLine >> filledCircleTail [ - self tail: RTFilledCircle asTail -] - -{ #category : #heads } -RTStyledMultiLine >> filledDiamondHead [ - self head: RTFilledDiamond asHead -] - -{ #category : #heads } -RTStyledMultiLine >> filledDiamondTail [ - self tail: RTFilledDiamond asTail -] - -{ #category : #heads } -RTStyledMultiLine >> filledNarrowArrowHead [ - self head: RTFilledNarrowArrow asHead -] - -{ #category : #heads } -RTStyledMultiLine >> filledNarrowArrowTail [ - self tail: RTFilledNarrowArrow asTail -] - -{ #category : #accessing } -RTStyledMultiLine >> head [ - ^ head -] - -{ #category : #accessing } -RTStyledMultiLine >> head: aLineDecorationShape [ - (head := aLineDecorationShape asHead) - attachPoint: attachPoint; - color: color -] - -{ #category : #initialization } -RTStyledMultiLine >> initialize [ - super initialize. - self notDecorated -] - -{ #category : #heads } -RTStyledMultiLine >> noHead [ - self head: RTNoDecorationShape asHead -] - -{ #category : #heads } -RTStyledMultiLine >> noTail [ - self tail: RTNoDecorationShape asTail -] - -{ #category : #heads } -RTStyledMultiLine >> notDecorated [ - self - noHead; - noTail -] - -{ #category : #accessing } -RTStyledMultiLine >> pathFor: anEdge [ - | fromPoint toPoint | - fromPoint := attachPoint startingPointOf: anEdge. - toPoint := attachPoint endingPointOf: anEdge. - ^ blockProducingPath value: fromPoint value: toPoint -] - -{ #category : #'line styles' } -RTStyledMultiLine >> solidLine [ - dashes := nil -] - -{ #category : #accessing } -RTStyledMultiLine >> tail [ - ^ tail -] - -{ #category : #accessing } -RTStyledMultiLine >> tail: aLineDecorationShape [ - (tail := aLineDecorationShape asTail) - attachPoint: attachPoint; - color: color -] - -{ #category : #public } -RTStyledMultiLine >> trachelShapeFor: anEdge [ - | multiShape path | - path := self pathFor: anEdge. - multiShape := TRCompositeShape new. - 2 to: path size do: [ :i | - multiShape - addShape: - (TRStyledLineShape new - dashes: dashes; - capStyle: capStyle; - width: (self widthFor: anEdge); - from: (path at: i - 1) to: (path at: i); - color: (self colorFor: anEdge)) ]. - multiShape - addShape: (head trachelShapeFor: anEdge from: path allButLast last); - addShape: (tail trachelShapeFor: anEdge from: path second). - ^ multiShape -] - -{ #category : #public } -RTStyledMultiLine >> updateFor: anEdge trachelShape: trachelShape [ - | path col shape | - path := self pathFor: anEdge. - col := self colorFor: anEdge. - 2 to: path size do: [ :i | - shape := trachelShape shapes at: i - 1. - shape - width: (self widthFor: anEdge); - from: (path at: i - 1) to: (path at: i); - color: col ]. - head updateFor: anEdge trachelShape: trachelShape shapes allButLast last from: path allButLast last. - tail updateFor: anEdge trachelShape: trachelShape shapes last from: path second. - trachelShape canvas ifNotNil: [ trachelShape pushFront ]. - ^ trachelShape -] - -{ #category : #'attach point' } -RTStyledMultiLine >> withShorterDistanceWithOffsetAttachPoint [ - self attachPoint: RTShorterDistanceWithOffsetAttachPoint new -] diff --git a/src/Roassal2/RTStyledMultiLineTest.class.st b/src/Roassal2/RTStyledMultiLineTest.class.st deleted file mode 100644 index b08aaa1db..000000000 --- a/src/Roassal2/RTStyledMultiLineTest.class.st +++ /dev/null @@ -1,28 +0,0 @@ -" -A RTStyledMultiLineTest is a test class for testing the behavior of RTStyledMultiLine -" -Class { - #name : #RTStyledMultiLineTest, - #superclass : #RTTest, - #category : #'Roassal2-Tests' -} - -{ #category : #tests } -RTStyledMultiLineTest >> testBasic [ - | v es shape lines | - v := RTView new. - - es := (RTEllipse new size: 20; color: (Color blue alpha: 0.3)) elementsOn: (1 to: 10). - RTCircleLayout new on: es allButFirst. - v addAll: es. - es @ RTDraggable. - TRConstraint move: es first onTheCenterOf: es allButFirst. - - shape := RTStyledMultiLine new. - shape filledArrowHead; arrowTail; dashdotLine; orthoVertical. - shape attachPoint: (RTBorderAttachPoint new). - lines := shape edgesFrom: es first toAll: es allButFirst. - v addAll: lines. - - v -] diff --git a/src/Roassal2/RTSubTimelineSet.class.st b/src/Roassal2/RTSubTimelineSet.class.st deleted file mode 100644 index 65c7e136a..000000000 --- a/src/Roassal2/RTSubTimelineSet.class.st +++ /dev/null @@ -1,70 +0,0 @@ -" -RTSubTimelineSet new a set of events for the timeline. -It takes a list of objects, lineIdentifier, start, end, and level. - -Consider the following example: -[ [ [ - data := #(#(c1 0 5 1) #(c1 3 8 2) #(c2 0 9 1) #(c2 3 5 2) #(c2 6 8 2)). - - b := RTTimeline new. - - s := RTSubTimelineSet new. - s objects: data. - s lineIdentifier: #first. - s start: #second. - s end: #third. - s level: #fourth. - b add: s. - - b axisX - numberOfLabels: 5; - labelRotation: -45; - labelConversion: [ :v | Date year: 2015 day: v ]. - b -]]] -" -Class { - #name : #RTSubTimelineSet, - #superclass : #RTTimelineSet, - #instVars : [ - 'level' - ], - #category : #'Roassal2-Builder-Timeline' -} - -{ #category : #configuration } -RTSubTimelineSet >> gapBetweenLevels [ - ^ 1 -] - -{ #category : #accessing } -RTSubTimelineSet >> level [ - ^ level -] - -{ #category : #accessing } -RTSubTimelineSet >> level: symbolOrBlockOrValue [ - "The argument will be evaluated on each element of objects." - level := symbolOrBlockOrValue -] - -{ #category : #'accessing - computed' } -RTSubTimelineSet >> numberOfLevels [ - ^ self level rtValue: (self objects detectMax: [ :eachObject | - self level rtValue: eachObject ]) -] - -{ #category : #rendering } -RTSubTimelineSet >> setRenderedHeight: timelineBuilder [ - shapeBuilder - height: - [ :obj | - (timelineBuilder extent y / timelineBuilder numberOfLines - - self gapBetweenTimeLines) / self numberOfLevels - self gapBetweenLevels ] -] - -{ #category : #rendering } -RTSubTimelineSet >> setRenderedYFor: element builder: timelineBuilder [ - ^ (super setRenderedYFor: element builder: timelineBuilder) - + ((self level rtValue: element model) - 1 * element height) -] diff --git a/src/Roassal2/RTSugiyamaLayout.class.st b/src/Roassal2/RTSugiyamaLayout.class.st deleted file mode 100644 index 6765a0403..000000000 --- a/src/Roassal2/RTSugiyamaLayout.class.st +++ /dev/null @@ -1,221 +0,0 @@ -Class { - #name : #RTSugiyamaLayout, - #superclass : #RTAbstractGraphLayout, - #instVars : [ - 'sortBlock', - 'labels', - 'layers', - 'layerNrs', - 'connections' - ], - #category : #'Roassal2-Layouts' -} - -{ #category : #utils } -RTSugiyamaLayout class >> sortBlock [ - - ^ RTSortBlock new -] - -{ #category : #private } -RTSugiyamaLayout >> addDummyNodes [ - - | layer layerNr | - connections := RTIdentityMatrix new. - self edgesDo: - [:edge | - | a b span fromNode toNode | - "edge hints removeAll." - a := layerNrs at: edge from. - b := layerNrs at: edge to. - span := (a - b) abs. - span = 1 - ifTrue: - [connections - at: edge from - at: edge to - put: true]. "Normal case where nodes are in adjacent layers" - fromNode := edge from. - [span > 1] - whileTrue: - [span := span - 1. - layerNr := b + span. - layer := layers at: layerNr. - toNode := RTDummyNode - on: edge - slot: a - span. - layer add: toNode. - layerNrs at: toNode put: layerNr. - connections at: fromNode at: toNode put: true. - fromNode := toNode]. - (a - b) abs > 1 - ifTrue: - [connections - at: fromNode - at: edge to - put: true]] -] - -{ #category : #private } -RTSugiyamaLayout >> assignLabels: aNodeCollection [ - "Initialize label dictionary" - | label vertices parentLabels | - labels := IdentityDictionary new. - label := 1. "Assign labels to the roots" - (self rootNodesFor: aNodeCollection) do: - [ :node | - labels - at: node - put: label. - label := label + 1 ]. "Assign labels to the rest" - [ labels keys size < aNodeCollection size ] whileTrue: - [ vertices := SortedCollection sortBlock: self sortBlock. - aNodeCollection do: - [ :node | - (labels includesKey: node) ifFalse: - [ parentLabels := ((self parentsFor: node) collect: - [ :pn | - labels - at: pn - ifAbsent: [ self maxFloat ] ]) asSortedCollection. - parentLabels last ~= self maxFloat ifTrue: [ vertices add: node -> parentLabels ] ] ]. - labels - at: vertices first key - put: label. - label := label + 1 ] -] - -{ #category : #private } -RTSugiyamaLayout >> buildLayers: g [ - - | w layerNr u vertices vertex layer done | - w := self maxFloat. - u := OrderedCollection new. - layers := IdentityDictionary new. - layerNrs := IdentityDictionary new. "Assign all nodes to layers" - [g isEmpty] - whileFalse: - [vertices := g - select: - [:e | (self childrenFor: e) allSatisfy: [:node | u includes: node]]. - vertex := vertices detectMax: [:e | labels at: e]. - done := false. - layerNr := 1. - [done] - whileFalse: - [layer := layers - at: layerNr - ifAbsentPut: [OrderedCollection new]. - (layer size >= w - or: - [(self childrenFor: vertex) anySatisfy: [:n | (layerNrs at: n) >= layerNr]]) - ifTrue: [layerNr := layerNr + 1] - ifFalse: [done := true]]. - layer add: vertex. - layerNrs at: vertex put: layerNr. - u add: vertex. - g remove: vertex] -] - -{ #category : #private } -RTSugiyamaLayout >> cl: layer u: u v: v [ - "Calculates cuv. Di Battista, chapter 9.2.2, page 283" - - | partnersOfU partnersOfV c partnersOfUIndex partnersOfVIndex layerNr | - layerNr := layerNrs at: u. ":= layerNrs at: v" - partnersOfU := (connections at: u) - select: [:each | (layerNrs at: each) = (layerNr - 1)]. - partnersOfV := (connections at: v) - select: [:each | (layerNrs at: each) = (layerNr - 1)]. - c := 0. - partnersOfUIndex := partnersOfU collect: [:node | layer indexOf: node]. - partnersOfVIndex := partnersOfV collect: [:node | layer indexOf: node]. - partnersOfUIndex - do: - [:uIndex | partnersOfVIndex do: [:vIndex | vIndex < uIndex ifTrue: [c := c + 1]]]. - ^c -] - -{ #category : #'default attach points' } -RTSugiyamaLayout >> defaultAttachPoint [ - ^ RTVerticalAttachPoint new -] - -{ #category : #hook } -RTSugiyamaLayout >> doExecute: aNodeCollection [ - "Coffman-Graham-Layering. Di Battista Book, page 275, chapter, 9.2.1" - self assignLabels: aNodeCollection. - self buildLayers: aNodeCollection copy. - self addDummyNodes. - self reduceCrossing. - self layoutAt: self verticalGap @ self horizontalGap -] - -{ #category : #private } -RTSugiyamaLayout >> layoutAt: aPoint [ - - | treeWidth layerKeys layer layerWidth horizontalPosition verticalPosition layerHeight | - treeWidth := layers values - inject: self maxFloat negated - into: - [:max :e | max max: (e sumNumbers: #width) + ((e size - 1) * self horizontalGap)]. - verticalPosition := self horizontalGap. "For visual reasons NOT: self class verticalGap" - layerKeys := layers keys asSortedCollection reverse. - layerKeys - do: - [:aKey | - layer := layers at: aKey. - layerWidth := (layer sum: #width) - + ((layer size - 1) * self horizontalGap). - layerHeight := (layer detectMax: #height) height. - horizontalPosition := treeWidth / 2.0 + aPoint x - (layerWidth / 2.0). - layer - do: - [:node | - translator translateTopLeftOf: node to: horizontalPosition @ verticalPosition. - - horizontalPosition := horizontalPosition + node width - + self horizontalGap ]. - verticalPosition := verticalPosition + layerHeight + self verticalGap ] -] - -{ #category : #private } -RTSugiyamaLayout >> maxFloat [ - ^ 1e10 -] - -{ #category : #private } -RTSugiyamaLayout >> reduceCrossing [ - "Crossing reduction" - - | layer2 u v c1 c2 layer1 done | - 2 - to: layers keys size - do: - [:index | - layer1 := layers at: index - 1. - layer2 := layers at: index. - done := false. - [done] - whileFalse: - [done := true. - 2 - to: layer2 size - do: - [:i | - u := layer2 at: i - 1. - v := layer2 at: i. - c1 := self cl: layer1 u: u v: v. - c2 := self cl: layer1 u: v v: u. - c1 > c2 - ifTrue: - [layer2 rtSwapElement: u withElement: v. - done := false]]]] -] - -{ #category : #private } -RTSugiyamaLayout >> sortBlock [ - - sortBlock isNil ifTrue: [ sortBlock := self class sortBlock ]. - ^sortBlock -] diff --git a/src/Roassal2/RTSugiyamaLayoutTest.class.st b/src/Roassal2/RTSugiyamaLayoutTest.class.st deleted file mode 100644 index b301b6fec..000000000 --- a/src/Roassal2/RTSugiyamaLayoutTest.class.st +++ /dev/null @@ -1,19 +0,0 @@ -Class { - #name : #RTSugiyamaLayoutTest, - #superclass : #RTTest, - #category : #'Roassal2-Layouts-Tests' -} - -{ #category : #'as yet unclassified' } -RTSugiyamaLayoutTest >> testBasic [ - - | v es | - v := RTView new. - es := RTBox elementsOn: (1 to: 10). - v addAll: es. - RTEdgeBuilder new - view: v; - connectFrom: [ :value | value // 2 ]. - RTSugiyamaLayout on: v elements. - -] diff --git a/src/Roassal2/RTSunburstBuilder.class.st b/src/Roassal2/RTSunburstBuilder.class.st deleted file mode 100644 index b78b3b56e..000000000 --- a/src/Roassal2/RTSunburstBuilder.class.st +++ /dev/null @@ -1,102 +0,0 @@ -" -I am a class to create visualizations about rings, center is the root of the tree and arcs are the sub trees. - -You can customize the angle of the arc, and play with the with radius and width of each arc. - -" -Class { - #name : #RTSunburstBuilder, - #superclass : #RTAbstractTreeBuilder, - #instVars : [ - 'maxLevel' - ], - #category : #'Roassal2-Builder-Sunburst' -} - -{ #category : #configuration } -RTSunburstBuilder >> angularSpacing: anInteger [ - self strategy angularSpacing: anInteger -] - -{ #category : #private } -RTSunburstBuilder >> createElements: atree nesting: block1 leaves: block2 depth: depth [ - | e | - e := super createElements: atree nesting: block1 leaves: block2 depth: depth. - maxLevel := maxLevel max: depth. - ^ e -] - -{ #category : #private } -RTSunburstBuilder >> createElements: atree using: ablock depth: depth [ - | e | - e := super createElements: atree using: ablock depth: depth. - maxLevel := maxLevel max: depth. - ^ e -] - -{ #category : #hooks } -RTSunburstBuilder >> createView [ - ^ super createView @ RTDraggableView. -] - -{ #category : #building } -RTSunburstBuilder >> from: objects nesting: block1 leaves: block2 [ - | r | - r := super from: objects nesting: block1 leaves: block2. - r do: [ :e | e attributes at: #parent put: nil]. - ^ r -] - -{ #category : #building } -RTSunburstBuilder >> from: objects using: ablock [ - | r | - r := super from: objects using: ablock. - r do: [ :e | e attributes at: #parent put: nil]. - ^ r -] - -{ #category : #configuration } -RTSunburstBuilder >> hasCenter: aBool [ - ^ self strategy hasCenter: aBool -] - -{ #category : #initialization } -RTSunburstBuilder >> initialize [ - super initialize. - layoutBuilder := RTLayoutBuilder new. - layoutBuilder sunburstWithArcWidth: 25. - self leafWeight: 1. - self shape arc color: [ Color random ]. - self interaction popup. - maxLevel := 0. -] - -{ #category : #accesing } -RTSunburstBuilder >> layout [ - ^ layoutBuilder. -] - -{ #category : #accesing } -RTSunburstBuilder >> maxLevel [ - ^ maxLevel -] - -{ #category : #configuration } -RTSunburstBuilder >> radialSpacing: anInteger [ - self strategy radialSpacing: anInteger -] - -{ #category : #hooks } -RTSunburstBuilder >> renderIn: aView [ - | layout | - super renderIn: aView. - layout := self layout layout. - layout builder: self. - self layout setUpElements: self rootNodes. - -] - -{ #category : #accesing } -RTSunburstBuilder >> strategy [ - ^ self layout layout -] diff --git a/src/Roassal2/RTSunburstBuilderExamples.class.st b/src/Roassal2/RTSunburstBuilderExamples.class.st deleted file mode 100644 index fcf317729..000000000 --- a/src/Roassal2/RTSunburstBuilderExamples.class.st +++ /dev/null @@ -1,1299 +0,0 @@ -" -RTSunburstBuilderExamples new installTitle: 'basic15' - code: - ' - | b | - b := RTSunburstBuilder new. - b strategy: (RTSunburstExtentStrategy new extent: 800@800). - b shape colorElement: [ :el | el model subclasses isEmpty ifTrue: [ Color purple ] ifFalse: [ Color lightGray ] ]. - - b explore: Morph using: #subclasses. - b view @ RTDraggableView. - b build. - ^ b view' - -" -Class { - #name : #RTSunburstBuilderExamples, - #superclass : #RTAbstractExample, - #category : #'Roassal2-Builder-Sunburst' -} - -{ #category : #examples } -RTSunburstBuilderExamples >> basic1 [ - - - " - self new basic1 - " - | b| - b := RTSunburstBuilder new. - b explore: 1 using: [ :n | - n< 4 - ifTrue: [ Array with: n + 1 with: n + 2 ] - ifFalse: [ #( ) ] ]. - ^ b -] - -{ #category : #examples } -RTSunburstBuilderExamples >> basic10 [ - - - " - self new basic10 - " - | b | - b := RTSunburstBuilder new. - b layout sunburstWithRadius: 100. - b shape color: [ :cls | - cls subclasses isEmpty - ifTrue: [ Color red ] - ifFalse: [ Color orange ] ]. - - b - radialSpacing: 10; - angularSpacing: 2; - explore: TREvent using: #subclasses. - - ^ b -] - -{ #category : #examples } -RTSunburstBuilderExamples >> basic11 [ - - - " - self new basic11 - " - | b | - b := RTSunburstBuilder new. - b layout sunburstWithRadius: 100. - b strategy radialSpacing:10. - b shape current color: [ :cls | - (cls inheritsFrom: TREvent) - ifTrue: [ Color lightGray ] - ifFalse: [ Color blue ] ]. - b - angularSpacing: 1; - from: (Array with: TREvent with: RTInteraction) using: #subclasses. - ^ b -] - -{ #category : #examples } -RTSunburstBuilderExamples >> basic12 [ - - - " - self new basic12 - " - | b | - b := RTSunburstBuilder new. - b layout sunburstWithRadius: 100. - b strategy radialSpacing:10. - b shape current color: [ :cls | - (cls inheritsFrom: TREvent) - ifTrue: [ Color lightGray ] - ifFalse: [ Color blue ] ]. - b - angularSpacing: 1; - hasCenter: false; - from: (Array with: TREvent with: RTInteraction) using: #subclasses. - ^ b -] - -{ #category : #examples } -RTSunburstBuilderExamples >> basic13 [ - - - " - self new basic13 - " - | b mt | - b := RTSunburstBuilder new. - b radialSpacing: 1. - b interaction addInteraction: RTSBFadeInteraction new. - b shape current - color: [ :m | m subclasses notEmpty ifTrue: [ Color orange ] ifFalse: [ Color red ] ]. - - mt := TRPlatform current morphClass. - b explore: mt using: #subclasses. - b view canvas focusOnCenterScaled. - ^ b -] - -{ #category : #examples } -RTSunburstBuilderExamples >> basic14 [ - - - " - self new basic14 - " - | b mt | - b := RTSunburstBuilder new. - b layout sunburstWithRadius: 100. - b radialSpacing: 1. - b interaction addInteraction: RTSBFadeInteraction new. - b shape color: [ :m | m subclasses notEmpty - ifTrue: [ Color lightGray ] - ifFalse: [ Color purple ] ]. - - mt := TRPlatform current morphClass. - b explore: mt using: #subclasses. - b view canvas focusOnCenterScaled. - ^ b -] - -{ #category : #examples } -RTSunburstBuilderExamples >> basic15 [ - - - " - self new basic15 - " - | b mt | - b := RTSunburstBuilder new. - b layout sunburstWithArcWidth: 30. - b - radialSpacing: 2; - angularSpacing: 1. - - b interaction addInteraction: RTSBFadeInteraction new. - b shape color: [ :m | m subclasses notEmpty - ifTrue: [ Color orange ] - ifFalse: [ Color red ] ]. - - mt := TRPlatform current morphClass. - b explore: mt using: #subclasses. - b view canvas focusOnCenterScaled. - ^ b -] - -{ #category : #examples } -RTSunburstBuilderExamples >> basic2 [ - - - " - self new basic2 - " - | b| - b := RTSunburstBuilder new. - b - explore: 1 - using: [ :n | n< 4 - ifTrue: [ Array with: n + 1 with: n + 2 ] - ifFalse: [ #( ) ] ]. - b hasCenter: false. - b radialSpacing: 0. - ^ b -] - -{ #category : #examples } -RTSunburstBuilderExamples >> basic3 [ - - - " - self new basic3 - " - | b | - b := RTSunburstBuilder new. - b shape current - colorElement: [ :el | Color grayScale256: ((el attributeAt: #depth ifAbsent: [ 0 ]) * 30) ]. - - b explore: RTObject using: #subclasses. - ^ b -] - -{ #category : #examples } -RTSunburstBuilderExamples >> basic4 [ - - " - self new basic4 - " - | b | - b := RTSunburstBuilder new. - b shape color: [ :cls | - cls subclasses isEmpty - ifTrue: [ Color red ] - ifFalse: [ Color orange ] ]. - - b - radialSpacing: 10; - angularSpacing: 2; - explore: TREvent using: #subclasses. - - ^ b -] - -{ #category : #examples } -RTSunburstBuilderExamples >> basic5 [ - - " - self new basic5 - " - | b | - b := RTSunburstBuilder new. - b strategy radialSpacing:10. - b shape current color: [ :cls | - (cls inheritsFrom: TREvent) - ifTrue: [ Color lightGray ] - ifFalse: [ Color blue ] ]. - b - angularSpacing: 1; - from: (Array with: TREvent with: RTInteraction) using: #subclasses. - ^ b -] - -{ #category : #examples } -RTSunburstBuilderExamples >> basic6 [ - - " - self new basic6 - " - | b | - b := RTSunburstBuilder new. - b strategy radialSpacing:10. - b shape current color: [ :cls | - (cls inheritsFrom: TREvent) - ifTrue: [ Color lightGray ] - ifFalse: [ Color blue ] ]. - b - angularSpacing: 1; - hasCenter: false; - from: (Array with: TREvent with: RTInteraction) using: #subclasses. - ^ b -] - -{ #category : #examples } -RTSunburstBuilderExamples >> basic7 [ - - " - self new basic7 - " - | b| - b := RTSunburstBuilder new. - b layout sunburstWithRadius: 100. - b explore: 1 using: [ :n | - n< 4 - ifTrue: [ Array with: n + 1 with: n + 2 ] - ifFalse: [ #( ) ] ]. - ^ b -] - -{ #category : #examples } -RTSunburstBuilderExamples >> basic8 [ - - " - self new basic8 - " - | b| - b := RTSunburstBuilder new. - b layout sunburstWithRadius: 100. - b - explore: 1 - using: [ :n | n< 4 - ifTrue: [ Array with: n + 1 with: n + 2 ] - ifFalse: [ #( ) ] ]. - b hasCenter: false. - b radialSpacing: 0. - ^ b -] - -{ #category : #examples } -RTSunburstBuilderExamples >> basic9 [ - - " - self new basic9 - " - | b | - b := RTSunburstBuilder new. - b layout sunburstWithRadius: 100. - b shape current - colorElement: [ :el | Color grayScale256: ((el attributeAt: #depth ifAbsent: [ 0 ]) * 30) ]. - - b explore: RTObject using: #subclasses. - ^ b -] - -{ #category : #sources } -RTSunburstBuilderExamples >> exampleBasic [ - - - | b | - b := RTSunburstBuilder new. - b radialSpacing: 10. - b shape color: [ :cls | cls subclasses notEmpty - ifTrue: [ Color orange ] - ifFalse: [ Color red ] ]. - - b explore: TRShape using: #subclasses. - ^ b -] - -{ #category : #sources } -RTSunburstBuilderExamples >> exampleBasic2 [ - - - - | b data | - data := Array - with: 'Chile' -> (Array with: 'Santiago' with: 'Iquique' ) - with: 'France' -> (Array with: 'Paris' with: 'Nice'). - b := RTSunburstBuilder new. - - b - explore: data - using: [ :o | - o class == Association - ifTrue: [ o value ] - ifFalse: [ o isString - ifTrue: [ #() ] - ifFalse: [ o ] ] ]. - ^ b -] - -{ #category : #icons } -RTSunburstBuilderExamples >> exampleBasic2Icon [ - ^ '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 -/yA8x38BsksFStfXt2UAAAAASUVORK5CYII=' -] - -{ #category : #icons } -RTSunburstBuilderExamples >> exampleBasicIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAT/klEQVR4XuVdCXhU5dVmCWsg -QfZVEAoSrUgFBRRtRUEDCWqfClSrKFUESoHfAiICUYqABUFADFkAWUpRShVF1KICVUGW/iiC -Ky5YlIJLXdC64Juec77t3swMmUyGMJmb57nPTGbuet7vbO853zeVioqS5w/PPw+kpwNjxqCi -PkOloiT7Q6VKKKpUcR8r+QCZPFlpyauvIviAJAIg338PpKUBw4YFH5CEASUjA2K6gg9IggCy -ciVQtSrwwgsIPiCJAkrt2sDgwcEHJGEAGTFCfEnwAUkUQD78EKhZE1i/PuFBAf998gmSGhB5 -0GXLKoSGYPduJL2G+B74wAEUbdqUmPf22GMIhMmyD5xP0dYl9YBLL004bcGjjyIwPsQ+9NO/ -BKbUSzg6BW++iUA5dfvgR3ahKI8ekwBJlLwEr78ufjyQgIgA8ioDmcRvjR590gHB/v3AZ58h -cGGvTwg7c4AZJ99s4bvvgDfeQFLmIXj7bUQf5x9zZus//yk3LcHRo0DfvsC2bUjqxBCbNslo -x623Rg/KX38GZFPmnpNTfvd5440KEN5eiw6UiglI5cowhSg88wyis90PA3PIjzRpUi4aghkz -gH791PZQTpJryEcfKTDq11ev778f3QNrs3XC7+/ll4GsLLXdfVupBkDF9SF79yowaMSjVq0o -teQhYO9TJ1RD8O23ZBqzFRhjbir1tSp0lCXOkkEh84Xzzy/Vw+Pzz4E//hEYNQpo1UpFYJ4N -LVoAv/qV+Bzs2xe9rxo+XAEy5MqIuUbSAiIC2LxZgcL1jyFDjisAfPopsHm6i7iaNlXHNmsW -Aoh8zvQ9v1KxS16vuQZ46aWI18CcOUD//sBVBMg3R2LSxKTIQ/Dcc0pgqanAU6EmCR98ICZE -9uldVwDBuQ3CguADpEYNdQyZRPueGyjqETe2ZYvvOtxUgSuuUIB8GJ1GYfp0+HKUa69F0iSG -ePJJ8SU47TS/oAYMkC4UI1gRNgMyuLYFhOsmYQFJSQk1ZXwNivLkfc+e4LqLvdaUKcCruxGV -n+nSRZWZybzZz2lAJVWmjscfdw9HNQZUqwY2ZVaY9MDyOjzdma1GjYDGjcMDcsopQAOlSahe -3Z7LAly3rnrdvyZ6H0MajCpV1L2d1hC4h7Tt3ypHQUEBkrPJ4V8bgZwa8IFghMgmp3WaMlsN -atvR7gOiYUMHIvumOnWcn9JaZs/3mybqXPdfWbJmZGaqKiYBiRsIiKWnqGNXtY29QMXqltBg -rFsH3NJcPeg4LTQzyrlfS5sn5JI5ynKO22iE19nLex7NvBkfUtuBiPZV9XWqqP8j1FwkL+Fr -s1Z0TAEKaFAs0YNiqdJWvLMmthIuRxm4806IozxOxHFSwKCs3Y7c0dp593Bmhs2OBaYfCTkv -3acdOPVUB0Tz5n5QSEvsucm3CFuwiMLtefozAkxG/2WX+X3YtGmqk5J9zxjap7C2uq/Fqeo1 -j+7lHPqcNbmsURbWrAEnaNzcjK+/Bt55Byc7URTh0EhUXFdl9dAdU/3C5GiMqZc851vQsmWI -LxFBpjvQxI+YEPh2Gu35tFWtLL7FBAAC3v33K5/AXZRsnnqQ0I0mkGYgnwcDvZ5by3898i9x -9SFYsgRSfMnNLXdgZASzEzamxXBdt9Io5npIVRIC+QZrsng0TyRhZSnNkeSSNx7pHNbyuViT -+Ds+t3HgHBkNaKqE2yZdfccgsMaYvOUMAv1T1VuMt1aSeaLrFNQQUASIbqmhfqsr7bPgghPr -1HHkHWA+ac8IohGeXH7CNAg33WSjIXk4Y+ONVtxGApqpnbsWroz+LvS6bIiM6OK+kSM2jB/v -Iiw+joH6SXUFxukpCjAGgs9lNGSUNknLGruIbyVpXz5rhD+8FiCvqKL2H0LfN08rvygL31KW -vC2PbO5AYMJoYMNq4McfywwQ9zPZkcmmx0RVOvs2fgF30XfjarrQlfxg1NdYv15YYtEg9hud -UhQIWqvkfK0J3IW1/Y563wNKS3Zv9QPBJnQs+ZSpdMyFaRZQPtdJC3vx5XuUVZPWzCbteWlb -zMAwvW0TNmOO6tWz9txohbzOpocffh7w3/+60fv5W8D2iWRWdG4ijpZG/WbSnLdX+7Vm0dXA -0FbOHxnQsxs5//DgKdZps6nymdR+ZO7y6T6zU2D9HGsfax4x16zlCZWHYCIVch77JZU5F4M1 -qsT9f/hB2XwdrvrMFPsI/o5HHpsoHs0XXeQB4m2qU2RYECJtAs7769xxCxa4qIrPfUcNDYbW -isUkeB1Byf+v5SktWTeLEkHtr9K0VrCf4vskINCbPhtVP8EAufBCCB1xwQXAb+h1Ar3uoBD7 -3bWIyAV5TYGOgHxaYQDq2NEJ9b11JQIRAsz63u54rgSS4zZaoYCgSIvAsPvL/7Qtb+rXEmKW -ZXCcRX7lStKYwsbq+Acp4JjSNsEAmTCBQsQeChAGhref/xz4xS+A310MTOtD2rPUPaBxpKzu -3vCURx+PYI6I2K9wQkZ0uxxz4IlSg2GF/PjF7tpcEmYT5QFCoqgH6ztQuEkvjxz3j8fUta8m -EKa3VvuuoPdj21LA0xW45BK1UQ6TsNQJ3iMfs3QppBTaq5faLr5Y6tPyPf9NJlXvXyc0dzBO -ns0B/3+bqtrh6MGYwbBCfn2xOtcnrzggGBhrsnTCV1jTAbN7pjrmqfnAb3uJ4NGnjwKBn4sH -HGX5uPzyisVlcekWO3aoh9u70Cdc5JM9H0Ca0M3DQ7GNZ9NlR/U5ZQZENnu+zk4ztDbY+1mm -TdFSctgbB6p73rnTaoIF5eyzhaFGmzZy3xW3hEtUt2JcySRlkiZcS44712PD55P2ZJO56K81 -igtG8QCDz73rLnXO1wvc9VY0gwyKxbVDroPlzdygKFYMQ8vGBEya4tWuSqm4bK/4F0/m7a9Z -EEB9CKABFGJun6OEsSunKG6AMEtrzGaepmfYVxitIPOFgmoIq1UL6oQCxn7oke7A88MrMCBh -ikeGqeUah43x9+9XwlvTOW4a4hVwiHALaDDcfyrlO/Vk1MvIz6rsNAQ/JmnnIsfwHEJSJs6k -oGFyQ7YIgosbICWUgUPuI2lr6l6tSCVN+ClpRi8Cp38Liu/r2tEZfEBCCMYjwCsUIj79NHiK -Ge65h0LEeRR5UDa+q9Cp8h76bOsfgPUUeaw+neJ5csrkDLGShPznNup1bRfbWoO8ShFNEOZT -DjKysXKUhw+p/Ve1w4kGRMwl1VHs8h6aXpHaSlkBEdKOBGk/YKdIG165l1jbvwKHdwAfUyXs -8HZwtQt75kL2Mcf3Jad7ztkqMWtLCVDXrsrEnHGGCv043OvQwSVsj/ZUQDD1MJPAGEn7DqCH -uYVCwmHtiZklQDrS96+9pvYf30UJPJNMV5vmoY69HeUGWZQRr5+jQ87J8YuyCqqjOCBcT7Gc -Wq1aiFlDuLAuHRv0oPjmm7jR4xjZDbiOhH7emcSUUiw+mVjeTUTivUjX+wvVTeaxRmwF81Gy -/7Bhyhdw1j1yJHDffaqR7cUXw7LCuP12Nwq7NlHgTGohbKwIjVnZQRS9TLkBhkSMGyA7Jqlz -vrlcXWtuurp+pxahA4Ofh2s08TBZzIriyy/VxXdQefSJx4DdVML9iIT0MmnJhlXAM39H1L21 -8QDaaNTu/NDwcSKFwZdXg2V5NYlnj13RPC6gWCqkd29dS6cwd1Ijl5MsIJ9GOQUuqn/cWnt4 -DdlLZuef60hDngK+OpBYNXLuSuRWTuKz7IgjU6eY3m+k/oBs0oRW9RGu7CqA8DZ3rjrmyM6y -UyfbxupE89/SvSJ8mZfU7Mkanu5nEXap2os0Oxw7VjHCXrlRFj75GvtwzIoyQ8pCNYWg668P -td8sFN7XaAbXuE2h6hqdiJnrcJYdKxh/O89p2w3nq8z8jlqqrchUI+s4bg1nkX+7he79uy8U -IBkZ7jv2o9wscvhw4k6LtvVpnsNhbpwboRmoT0PrIxg71s/yavDkfaYm+5hjYsFN8nQIPj+i -9PT7386Fr3dA3yMGa/p9IiWErdJC+7equwAA48ZFbF/lwIefM7EA4UINj3TuYnniiZILVB9/ -7IpFRoN+Sj6koI4tFqmuEyoydSQhbejrhHNwo48MPC4YHKGZ43iCkCEuWXM5imxI2yRFlWA8 -Xb+lZ5CEafjg+5a20zDJbMXvftcmDh3Id0xPdbwSV/ruZSqehNVBR17t6fPMTH9ZlquTj54f -GiAQL2VIRLvv/+dRPb0mQkrDxjx2rmZBxm00SFqklzyoKLJFTo6leyo+IPv2AeMcw2rqEPg/ -XbM+W5N8HXSXh/Y1eOQRlIr2707kX4NUB6wpjum2U59jH6qb9HbcgdL60eSYjrAhU/kJk4P0 -0FHWr3VLaUZV123CYLCp4QSOG63vvdfXwW7PSaEtJ7ucvNqIjU1jJ126bZbuesBM2xEHF+Yz -j3bYCmgU6UHFnGPIfVQZ5BM2etZVZCHlkkDaaDMyXjdBd/M0WaemonhlUYDJ1jQMJ3fXkEnq -RUBNbiLN0Lg0TWmUbqaTY8dS8LBIhbu204XPZ94z0ByyF+mpB6Z3Szda4N13k2PhAGzYQEIk -YYwl4XAlbkxNOwccH21xwv6DboLu19JNeTNtN56Ga/tdHgmLm9l613ekZJbuILk7HWHLw7n0 -fla6jap880e8obm5d16U07OvlG3DAFMhAJGEinmvgVR0KqQHXkxC7VBF0SwtWjjT8MAD5E90 -wWiwmjdomqbF3HjmdUh0ZICRQKCS8GUWjD5Ew+R5+n91w7QVetO6/s5349jJNEV8jkOHiN87 -R2mKuReuqR84UDHWy5KJmZxAnZWiGpu5+ez3dVxfEwuZFxHwHvMC8WC/a+Dv7zXTDBgEM8JN -r1Z9T0DQrJHipG5uaIGSzy/3NGvzNU101UX3ZI2uaYUb1XNxQGHyJqO5hYWJvaKcUPU0CjGZ -zNMSuvFcAqV9iirbsk1mjfn6a2WueH7e0KFOU2bNckIzTdLeJmsDCoPav4YDhAFkQGY3dZrD -HSWzPH7IAGO6I8fVUqDk9Cs17cT9XfYeE11DmOGVrvFCGpHDlUOWUc1mqp97eFZ3+YzNyNSp -7vONG/2AsGMuNhVN3o9IF39kFxXIqmQXGOAE07b3aBrHNxnUmKlnb469FZb8iNxrogKCFSvA -PkPe710i3eai2qnKbHiXxMP27eo7BiOM7Zakq1s3x2t5na8Bh32H6TgsDsj1HnPWt7oNcS0w -bDr/8Q93P9Onl2qhmcQmF/fsIZKuteqXPc9D4nEno5md9NZb7nPyHWYipmTrxzs3jUDT92SB -0Mty+DL04oBkV3GZ/1x9nLH5ixb5fRcNFKuNhw6hwgIiNVme3y0OlkxPu3bwrtIps5A8TdLy -GU8PYBPEWnP66dFn3M8+q6gToyXdm9q+2rCAZDT0dyOy/5o/P3IUxc1vPEh4AMU41eKkAsIr -H9j1SmgESxWwpGP+9CcXoTD/E+u1V6+mmv0EqvM3cs1tHkCQXlf1BG+5mUrZc1BS+449L08t -YJLU09yd8ICw3TURCzp1Una+hJXW5LhBg2BsuPgNXf5NKB/Is8S0aSuu2QkJCPLzYRd34UYH -HvHRHjtzpoq0GJSvvir77Kutq23oHHGf554D/kxs7B3nAre2Ba8SV+J5H37Y5SxXXZX4yzOJ -RnDCd6D0JWPcdRdkvax4+K7LWjpnTxm0MYmyPIfpoOHi2KmkyVSPx02nQcxsNOfn5zMBxMKF -ib2AWXk2RUSm7ReprkczB3Gg7lAn+kX+366KUjxjSnqrlpGf60FRYM+20Ws0R4CmdkIBRYUK -e8s/zL5PTQMwXNfEiQqA5cvV/6uu1nNKjup8hXKOG7lnt41dOL/Ea3APGR97993JvcRffCj8 -1irv0Vm3WRzT8kzXpfqmEEjT3UIyceMJkNmzo9eSUi5FElxABjZTGmLWNTGAaMrF2xcsOVKv -pkKjYAAdk9H8hJncQAKCo1SSHdQe3lV/LCC8lkuamkBj9+el/lhrllFi2JcircGkKQcPIviA -xAuQXXeqHIizfJO1z5un+bO9SnOucAysRFrcSM2NE8N+AjxAEZdnNbjgA1LmxHS4omi8rC9V -I00EiM6dSRM6AseU/ZeWJN6Hm944s7+OMvFWjYMPSNwAmZ+mlspo394Bopcul4UyifZABpm0 -Dzc7x86N4P3ryFQ1nEHfr54afEDiBsi6heBQFGee6QDRPbdS7OLoiwHYPcNvtngJqBP8F9go -q0yA/vC9MNKmEz/4gJRFmA89VCYh4uEsYGAm2MRxj2/wASkrIMQxRb3vLWGWCudZZBSd4Y1X -ZAWG4ANSVkC6d48ekJ6h++JLquH/jCK0DUukfsMFtOADEisYXGM/TsUvZP9R/cPvy50po7Ih -K6AuXhx8QGIGJDcXpfmxSawPH9piISWHvdU0NV4wJviAxAoIz1j64ovoAVkVfjFP7Jyi+sK2 -rlFrygcfkBgBoXJxqfaPYI54ATS0I/pkGtXkqQIaT7MVLED0hNGo9+cue+9c/eJ+ZCSFv5xI -xlFLAgOITOwpRf1ejuH5+4simK0ZDdScj3994OsjCz4g0QqXS7GFhaUDhOcCro1gtrYMlR+q -xMGXg+9DYgYlhuY17JhbrvX/4HNZZQGYfzgyDotBBx+QeAHSo4fKRY4zRS34gJyAYKBEQPbs -CT4g5QZIXl5kYXONhGd5lWKKdfABKSsg3KcV6TuebDN1aky/Vxh8QGIFpIRfpTYrQ3gnEgUf -kJMJGE/8KdJdisEHJAEAmTxZfgxGftwy+ICUk9A/+yyyH1m7Vhb2lPdxmCIRfECiAcTzg5Vh -vx80SC/WvCb4gJQLINOmHV/Qug01Hn//A/IvE70QdxQwAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTSunburstBuilderExamples >> exampleCollectionSubclasses [ - - - - | b | - b := RTSunburstBuilder new. - b layout sunburstWithRadius: 100. - b - angularSpacing: 1; - radialSpacing: 5. - b shape color: [ :cls | ('*Array*' match: cls name) - ifTrue: [ Color orange ] - ifFalse: [ Color red ] ]. - - b explore: Collection using: #subclasses. - ^ b -] - -{ #category : #icons } -RTSunburstBuilderExamples >> exampleCollectionSubclassesIcon [ - ^ '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' -] - -{ #category : #sources } -RTSunburstBuilderExamples >> exampleFileSystem [ - - - | b c1 c2 | - b := RTSunburstBuilder new. - - c2 := Color r: 177/255.0 g: 175/255.0 b: 134/255.0. - c1 := Color r: 98/255.0 g: 101/255.0 b: 73/255.0. - - b - color: c2; - angularSpacing: 1; - radialSpacing: 5; - leafWeight: [:f | f size sqrt ]; - leafColor: c1; - explore: TRPlatform current workingDirectory - nesting: #directories - leaves: #files. - - b view canvas camera scale: 1.5. - ^ b -] - -{ #category : #sources } -RTSunburstBuilderExamples >> exampleFileSystem2 [ - - - - | b c1 c2 | - b := RTSunburstBuilder new. - - c2 := Color r: 177/255.0 g: 175/255.0 b: 134/255.0. - c1 := Color r: 98/255.0 g: 101/255.0 b: 73/255.0. - b interaction addInteraction: RTSBFadeInteraction new. - b - color: c2; - angularSpacing: 1; - radialSpacing: 5; - leafWeight: [:f | f size sqrt ]; - leafColor: c1; - explore: TRPlatform current workingDirectory - nesting: #directories - leaves: #files. - - b view canvas camera scale: 1.5. - ^ b -] - -{ #category : #icons } -RTSunburstBuilderExamples >> exampleFileSystem2Icon [ - ^ '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 -s58AAAAASUVORK5CYII=' -] - -{ #category : #icons } -RTSunburstBuilderExamples >> exampleFileSystemIcon [ - ^ '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 -V55W/z+4y7BrAdq4hgAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTSunburstBuilderExamples >> exampleMorphSubclasses [ - - - - | b | - b := RTSunburstBuilder new. - b layout sunburstWithRadius: 400. - b color: [ :cls | cls subclasses isEmpty ifTrue: [ Color purple ] ifFalse: [ Color lightGray ] ]. - - b explore: TRPlatform current morphClass using: #subclasses. - ^ b -] - -{ #category : #icons } -RTSunburstBuilderExamples >> exampleMorphSubclassesIcon [ - ^ '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' -] - -{ #category : #sources } -RTSunburstBuilderExamples >> exampleOnNumbers [ - - - - | b| - b := RTSunburstBuilder new. - b - color: [ :e | e < 5 - ifTrue: [ Color gray ] - ifFalse: [Color blue] ]. - b - explore: 1 - using: [ :n | n< 5 - ifTrue: [ Array with: n + 1 with: n + 2 with: n+3 ] - ifFalse: [ #( ) ] ]. - ^ b -] - -{ #category : #icons } -RTSunburstBuilderExamples >> exampleOnNumbersIcon [ - ^ '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 -TkSuQmCC' -] - -{ #category : #sources } -RTSunburstBuilderExamples >> exampleRTObjectSubclasses [ - - - - | b c1 c2 | - b := RTSunburstBuilder new. - b layout sunburstWithRadius: 100. - c1 := Color r: 0/255.0 g: 100/255.0 b: 0/255.0. - c2 := Color r: 73/255.0 g: 121/255.0 b: 107/255.0. - b color: [ :cls | cls subclasses notEmpty - ifTrue: [ c2 ] ifFalse: [ c1 ] ]. - - b explore: RTObject using: #subclasses. - ^ b -] - -{ #category : #icons } -RTSunburstBuilderExamples >> exampleRTObjectSubclassesIcon [ - ^ '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' -] - -{ #category : #sources } -RTSunburstBuilderExamples >> examplesunburstWithLegend [ - -| p b lb | -p := RTPalette c3. -b := RTSunburstBuilder new. -b layout sunburstWithRadius: 100. -b - angularSpacing: 1; - radialSpacing: 5. -b shape - color: [ p first ]; - if: [ :cls | '*Array*' match: cls name ] color: [ p second ]; - if: [ :cls | '*Set*' match: cls name ] color: [ p third ]; - if: [ :cls | '*Hash*' match: cls name ] color: [ p fourth ] - . - -b explore: Collection using: #subclasses. -b build. - -lb := RTLegendBuilder new. -lb view: b view. -lb addText: 'Visualizing the collection Pharo collection class library'. -lb addColor: p second text: 'Array-like classes'. -lb addColor: p third text: 'Set-like classes'. -lb addColor: p fourth text: 'Hash-classes classes'. -lb build. - -b view. -] - -{ #category : #icons } -RTSunburstBuilderExamples >> examplesunburstWithLegendIcon [ - ^ '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' -] - -{ #category : #examples } -RTSunburstBuilderExamples >> label [ - ^ 'Sunburst' -] diff --git a/src/Roassal2/RTSunburstBuilderTest.class.st b/src/Roassal2/RTSunburstBuilderTest.class.st deleted file mode 100644 index 0bb5d6821..000000000 --- a/src/Roassal2/RTSunburstBuilderTest.class.st +++ /dev/null @@ -1,17 +0,0 @@ -" -A RTSunburstBuilderTest is a test class for testing the behavior of RTSunburstBuilder -" -Class { - #name : #RTSunburstBuilderTest, - #superclass : #RTTest, - #category : #'Roassal2-Tests' -} - -{ #category : #tests } -RTSunburstBuilderTest >> testBasic [ - | b | - b := RTSunburstBuilder new. - self assert: b layout layout class equals: RTSunburstConstantWidthLayout. - self assert: b shape current class equals: RTArc. - self assert: b elements isCollection. -] diff --git a/src/Roassal2/RTSunburstConstantWidthLayout.class.st b/src/Roassal2/RTSunburstConstantWidthLayout.class.st deleted file mode 100644 index 69cc9616a..000000000 --- a/src/Roassal2/RTSunburstConstantWidthLayout.class.st +++ /dev/null @@ -1,120 +0,0 @@ -" -I am a layout for sunburst visualization, - -I put the arcs in a constant delta separation, you can define the center width. -" -Class { - #name : #RTSunburstConstantWidthLayout, - #superclass : #RTAbstractSunburstLayout, - #instVars : [ - 'arcWidth', - 'centerWidth' - ], - #category : #'Roassal2-Builder-Sunburst' -} - -{ #category : #accesing } -RTSunburstConstantWidthLayout >> arcWidth [ - ^ arcWidth -] - -{ #category : #accesing } -RTSunburstConstantWidthLayout >> arcWidth: aNumber [ - arcWidth := aNumber -] - -{ #category : #accesing } -RTSunburstConstantWidthLayout >> centerWidth [ - ^ centerWidth -] - -{ #category : #accesing } -RTSunburstConstantWidthLayout >> centerWidth: anObject [ - centerWidth := anObject -] - -{ #category : #initialization } -RTSunburstConstantWidthLayout >> initialize [ - super initialize. - self arcWidth: 50. - self centerWidth: 50. -] - -{ #category : #public } -RTSunburstConstantWidthLayout >> layoutSunburst: el [ - - | children arc parent depth radius totalPie a b s auxAngle angleOffset block1 block2 | - children := el attributes at: builder childrenKey. - parent := el attributes at: #parent. - arc := el trachelShape. - depth := el attributes at: #depth. - block1 := [ | radius2 | - depth = 1 - ifTrue: [ parent isNil - ifTrue: [ self hasCenter - ifTrue: [ radius := 0. radius2 := self centerWidth ] - ifFalse: [ radius := 0. radius2 := 0 ] ] - ifFalse: [ self hasCenter - ifTrue: [ radius := 0. radius2 := self centerWidth ] - ifFalse: [ radius := self centerWidth+radialSpacing. radius2 := radius + self arcWidth ] ]. - ] - ifFalse: [ - radius := ((depth = 2 and: [ (parent attributes at: #parent) isNil ]) - ifTrue: [ self centerWidth ] - ifFalse: [ parent trachelShape externalRadius ]) + self radialSpacing. - radius2 := radius + self arcWidth ]. - arc - alphaAngle: arc alphaAngle - betaAngle: arc betaAngle - innerRadius: radius - externalRadius: radius2 ]. - block2 := [ - radius := depth = 0 - ifTrue: [ 0 ] - ifFalse: [ parent isNil - ifTrue: [ self hasCenter ifTrue: [self centerWidth] ifFalse: [0] ] - ifFalse: [ self hasCenter ifTrue: [0] ifFalse: [self centerWidth] ] ]. - arc - alphaAngle: 0 - betaAngle: 360 - innerRadius: 0 - externalRadius: radius ]. - - depth = 0 - ifTrue: block2 - ifFalse: [ depth = 1 - ifTrue: [ parent isNil - ifTrue: block2 - ifFalse: block1. ] - ifFalse: block1 ]. - - children isEmpty ifTrue: [ ^ self ]. - totalPie := builder weightOf: el. - auxAngle := arc alphaAngle. - angleOffset := (arc betaAngle - arc alphaAngle)/totalPie. - - children doWithIndex: [ :c :i | - a := auxAngle. - b := auxAngle + (angleOffset * (builder weightOf: c) ). - s := self angularSpacing. - auxAngle := b. - (b - a) > s ifTrue: [ - depth = 1 - ifTrue: [ b := b - (s/2). a := a + (s/2) ] - ifFalse: [ - i = 1 - ifTrue: [ - (children size > 1) ifTrue: [b := b - (s/2)] ] - ifFalse: [ - i = children size - ifTrue: [ a := a + (s/2) ] - ifFalse: [ b := b - (s/2). a := a + (s/2) ] ] ] ]. - c trachelShape - alphaAngle: a - betaAngle: b - innerRadius: 0 - externalRadius: 0. - self layoutSunburst: c. - ]. - -] diff --git a/src/Roassal2/RTSunburstExtentLayout.class.st b/src/Roassal2/RTSunburstExtentLayout.class.st deleted file mode 100644 index 3159205ea..000000000 --- a/src/Roassal2/RTSunburstExtentLayout.class.st +++ /dev/null @@ -1,124 +0,0 @@ -" -I am a layout for Sunburst Visualization, I use a radius to calculate the better distance of all arcs in the visualization. - -You can use radius to set the total radius of sunburst -or use the selector extent:, that uses radius size -" -Class { - #name : #RTSunburstExtentLayout, - #superclass : #RTAbstractSunburstLayout, - #instVars : [ - 'wside', - 'roots' - ], - #category : #'Roassal2-Builder-Sunburst' -} - -{ #category : #hook } -RTSunburstExtentLayout >> doInitialize: elements [ - roots := elements. -] - -{ #category : #accessing } -RTSunburstExtentLayout >> extent: aPoint [ - wside := aPoint x min: aPoint y -] - -{ #category : #initialization } -RTSunburstExtentLayout >> initialize [ - super initialize. - self extent: 500@500 -] - -{ #category : #public } -RTSunburstExtentLayout >> layoutSunburst: el [ - - | children arc parent depth radius totalPie a b s auxAngle angleOffset block1 block2 | - children := el attributes at: builder childrenKey. - parent := el attributes at: #parent. - arc := el trachelShape. - depth := el attributes at: #depth. - block1 := [ | radius2 | - depth = 1 - ifTrue: [ parent isNil - ifTrue: [ self hasCenter - ifTrue: [ radius := 0. radius2 := self radius: 1 ] - ifFalse: [ radius := 0. radius2 := 0 ] ] - ifFalse: [ self hasCenter - ifTrue: [ radius := 0. radius2 := self radius: 1 ] - ifFalse: [ radius := (self radius: 1)+radialSpacing. radius2 := (self radius: 2)+radialSpacing ] ]. - ] - ifFalse: [ | temp d | - d := depth - 1. - (self roots size > 1 and: [ self hasCenter not ]) ifTrue: [ d := depth ]. - temp := self radialSpacing * d. - radius := (self radius: d) + temp. - radius2 := (self radius: d+1) + temp ]. - arc - alphaAngle: arc alphaAngle - betaAngle: arc betaAngle - innerRadius: radius - externalRadius: radius2 ]. - block2 := [ - radius := depth = 0 - ifTrue: [ 0 ] - ifFalse: [ parent isNil - ifTrue: [ self hasCenter ifTrue: [self radius: 1] ifFalse: [0] ] - ifFalse: [ self hasCenter ifTrue: [0] ifFalse: [self self radius: 1] ] ]. - arc - alphaAngle: 0 - betaAngle: 360 - innerRadius: 0 - externalRadius: radius ]. - - depth = 0 - ifTrue: block2 - ifFalse: [ depth = 1 - ifTrue: [ parent isNil - ifTrue: block2 - ifFalse: block1. ] - ifFalse: block1 ]. - - children isEmpty ifTrue: [ ^ self ]. - totalPie := builder weightOf: el. - auxAngle := arc alphaAngle. - angleOffset := (arc betaAngle - arc alphaAngle)/totalPie. - - children doWithIndex: [ :c :i | - a := auxAngle. - b := auxAngle + (angleOffset * (builder weightOf: c) ). - s := self angularSpacing. - auxAngle := b. - (b - a) > s ifTrue: [ - depth = 1 - ifTrue: [ b := b - (s/2). a := a + (s/2) ] - ifFalse: [ - i = 1 - ifTrue: [ - (children size > 1) ifTrue: [b := b - (s/2)] ] - ifFalse: [ - i = children size - ifTrue: [ a := a + (s/2) ] - ifFalse: [ b := b - (s/2). a := a + (s/2) ] ] ] ]. - c trachelShape - alphaAngle: a - betaAngle: b - innerRadius: 0 - externalRadius: 0. - self layoutSunburst: c. - ]. - -] - -{ #category : #accessing } -RTSunburstExtentLayout >> radius: depth [ - | w2 maxDepth | - w2 := wside/2. - maxDepth := builder maxLevel. - ^ ((depth * w2 * w2) / (maxDepth + 1) ) sqrt -] - -{ #category : #accessing } -RTSunburstExtentLayout >> roots [ - ^ roots. -] diff --git a/src/Roassal2/RTTabTable.class.st b/src/Roassal2/RTTabTable.class.st deleted file mode 100644 index 5fcbcd13c..000000000 --- a/src/Roassal2/RTTabTable.class.st +++ /dev/null @@ -1,534 +0,0 @@ -" -RTTabTable is made to work with CSV file contents. -" -Class { - #name : #RTTabTable, - #superclass : #Object, - #instVars : [ - 'attributes', - 'values', - 'firstRow' - ], - #category : #'Roassal2-Table' -} - -{ #category : #data } -RTTabTable class >> countries [ - - ^ 'Country Area Population Density Gross Domestic Product Gross Domestic Product per capita Literacy Rate Life Expectancy -Afghanistan 251827 29835392 118 27 917 28 45 -Albania 11100 2994667 270 24 7967 99 77 -Algeria 919595 34994937 38 251 7175 70 75 -American Samoa 77 67242 875 1 8556 97 74 -Andorra 181 84825 469 3 38904 100 82 -Angola 481354 13338541 28 107 8044 67 39 -Anguilla 35 15094 430 0 11621 95 81 -Antigua and Barbuda 171 87884 514 1 16215 86 75 -Argentina 1073518 41769726 39 596 14269 97 77 -Armenia 11484 2967975 258 17 5681 99 73 -Aruba 69 106113 1527 2 21279 97 76 -Australia 2988902 21766711 7 882 40539 99 82 -Austria 32383 8217280 254 332 40403 98 80 -Azerbaijan 33436 8372373 250 91 10844 99 67 -The Bahamas 5359 313312 58 9 28473 96 71 -Bahrain 293 1214705 4140 30 24459 87 78 -Bangladesh 55598 158570535 2852 259 1631 48 70 -Barbados 166 286705 1727 6 21719 100 74 -Belarus 80155 9577552 119 131 13699 100 71 -Belgium 11787 10431477 885 394 37799 99 80 -Belize 8867 321115 36 3 8256 77 68 -Benin 43484 9325032 214 14 1500 35 60 -Bermuda 21 68679 3294 5 65522 98 81 -Bhutan 14824 708427 48 4 5470 47 67 -Bolivia 424164 10118683 24 48 4732 87 68 -Bosnia and Herzegovina 19767 4622163 234 30 6562 97 79 -Botswana 224607 2065398 9 28 13794 81 58 -Brazil 3287612 203429773 62 2172 10677 89 73 -Brunei 2226 401890 181 20 50710 93 76 -Bulgaria 42811 7093635 166 97 13643 98 74 -Burkina Faso 105869 16751455 158 20 1193 22 54 -Burma (Myanmar) 261228 53999804 207 76 1416 90 68 -Burundi 10745 10216190 951 3 333 59 59 -Cambodia 69898 14701717 210 30 2053 74 63 -Cameroon 183568 19711291 107 44 2249 68 54 -Canada 3855103 34030589 9 1330 39082 99 81 -Cape Verde 1557 516100 331 2 3697 77 71 -Cayman Islands 102 51384 504 2 43788 98 81 -Central African Republic 240535 4950027 21 3 696 49 50 -Chad 495755 10758945 22 17 1614 26 48 -Chile 291933 16888760 58 258 15271 96 78 -China 3705407 1336718015 361 10090 7548 92 75 -Colombia 439736 44725543 102 435 9735 90 75 -Comoros 863 794683 921 1 1007 57 64 -Congo Democratic Republic of the 905355 71712867 79 23 322 67 55 -Congo Republic of the 132047 4243929 32 17 4032 84 55 -Cook Islands 91 11124 122 0 16469 95 75 -Costa Rica 19730 4576562 232 51 11181 95 78 -Cote d''Ivoire 124504 21504162 173 37 1722 49 57 -Croatia 21851 4483804 205 78 17416 98 76 -Cuba 42803 11087330 259 114 10291 100 78 -Cyprus 3572 1120489 314 23 20696 98 78 -Czech Republic 30451 10190213 335 261 25642 99 77 -Denmark 16639 5529888 332 202 36475 99 79 -Djibouti 8958 757074 85 2 2780 68 76 -Dominica 290 72969 252 1 10388 94 76 -Dominican Republic 18792 9956648 530 87 8763 87 77 -Ecuador 109484 15007343 137 115 7663 91 76 -Egypt 386662 82079636 212 498 6065 71 73 -El Salvador 8124 6071774 747 44 7176 81 73 -Equatorial Guinea 10831 668225 62 24 35647 87 62 -Eritrea 45406 5939484 131 4 610 59 63 -Estonia 17463 1282963 73 25 19245 100 73 -Ethiopia 426373 90873739 213 86 948 43 56 -Faroe Islands 538 49267 92 2 32273 99 80 -Fiji 7056 883125 125 4 4381 94 71 -Finland 130559 5259250 40 186 35366 100 79 -France 248573 65312249 263 2145 32842 99 81 -French Polynesia 1609 294935 183 5 15997 98 77 -Gabon 103347 1576665 15 22 14258 63 52 -The Gambia 4361 1797860 412 3 1943 40 64 -Georgia 26911 4585874 170 22 4893 100 77 -Germany 137847 81471834 591 2940 36086 99 80 -Ghana 92098 24791073 269 62 2500 58 61 -Gibraltar 3 28956 11538 1 44032 85 79 -Greece 50949 10760136 211 318 29563 96 80 -Greenland 836330 57670 0 2 34489 100 71 -Grenada 133 108419 816 1 10127 100 73 -Guam 210 183286 873 3 13640 99 78 -Guatemala 42042 13824463 329 70 5074 69 71 -Guinea 94926 10601009 112 11 1020 30 58 -Guinea-Bissau 13948 1596677 114 2 1117 42 49 -Guyana 83000 744768 9 5 7222 92 67 -Haiti 10714 9719932 907 11 1181 53 62 -Honduras 43278 8143564 188 34 4130 80 71 -Hong Kong 426 7122508 16709 326 45742 94 82 -Hungary 35918 9976062 278 188 18805 99 75 -Iceland 39769 311058 8 12 37999 99 81 -India 1269219 1189172906 937 4060 3414 61 67 -Indonesia 735358 245613043 334 1030 4194 90 71 -Iran 636372 77891220 122 819 10511 77 70 -Iraq 169235 30399572 180 113 3730 74 71 -Ireland 27133 4670976 172 172 36887 99 80 -Israel 8019 7473052 932 219 29359 97 81 -Italy 116348 61016804 524 1774 29074 98 82 -Jamaica 4244 2868380 676 24 8269 88 73 -Japan 145914 126475664 867 4310 34078 99 82 -Jordan 34495 6508271 189 35 5306 90 82 -Kazakhstan 1052090 15522373 15 196 12653 100 69 -Kenya 224081 41070934 183 66 1608 85 59 -Korea North 46540 24457492 526 40 1635 99 69 -Korea South 38502 48754657 1266 1459 29925 98 79 -Kuwait 6880 2595628 377 137 52588 93 77 -Kyrgyzstan 77202 5587443 72 12 2151 99 70 -Laos 91429 6477211 71 16 2422 73 62 -Latvia 24938 2204708 88 33 14746 100 73 -Lebanon 4015 4143101 1032 59 14330 87 75 -Lesotho 11720 1924886 164 3 1716 85 52 -Liberia 43000 3786764 88 2 447 58 57 -Libya 679362 6597960 10 91 13727 83 78 -Liechtenstein 62 35236 570 5 142695 100 80 -Lithuania 25212 3535547 140 57 16006 100 75 -Luxembourg 998 503302 504 41 81641 100 80 -Macau 11 573003 52627 18 32234 91 84 -Macedonia 9928 2077328 209 20 9628 96 75 -Madagascar 226658 21926221 97 19 885 69 64 -Malawi 45747 15879252 347 13 817 63 52 -Malaysia 127355 28728607 226 414 14425 89 74 -Maldives 115 394999 3433 3 6922 94 74 -Mali 478841 14159904 30 17 1184 47 53 -Malta 122 408333 3347 10 25494 93 80 -Marshall Islands 70 67182 961 0 1987 94 72 -Mauritania 397955 3281634 8 7 2028 51 61 -Mauritius 788 1303717 1655 18 13853 84 74 -Mexico 758449 113724226 150 1567 13779 86 76 -Micronesia 271 106836 394 0 2229 89 72 -Moldova 13070 4314377 330 11 2547 99 71 -Monaco 1 30539 39548 1 31969 99 90 -Mongolia 603909 3133318 5 11 3517 98 68 -Montserrat 39 5140 131 0 5642 97 73 -Morocco 172414 31968361 185 151 4736 52 76 -Mozambique 308642 22948858 74 22 950 48 52 -Namibia 318261 2147585 7 15 6798 85 52 -Nepal 56827 29391883 517 36 1218 49 66 -Netherlands 16040 16847007 1050 677 40179 99 80 -New Caledonia 7172 256275 36 3 12323 96 77 -New Zealand 103363 4290347 42 118 27457 99 81 -Nicaragua 50336 5666301 113 18 3125 68 72 -Niger 489191 16468886 34 11 671 29 53 -Nigeria 356669 155215573 435 378 2435 68 48 -Northern Mariana Islands 179 46050 257 1 19544 97 77 -Norway 125021 4691849 38 255 54414 100 80 -Oman 119499 3027959 25 76 25047 81 74 -Pakistan 307374 187342721 609 465 2482 50 66 -Palau 177 20956 118 0 7826 92 72 -Panama 29120 3460462 119 44 12819 92 78 -Papua New Guinea 178704 6187591 35 15 2416 57 66 -Paraguay 157048 6459058 41 33 5157 94 76 -Peru 496225 29248943 59 276 9426 93 72 -Philippines 115831 101833938 879 351 3451 93 72 -Poland 120728 38441588 318 721 18764 100 76 -Portugal 35556 10760305 303 247 22955 95 79 -Qatar 4473 848016 190 151 177591 89 96 -Romania 92043 21904551 238 254 11605 97 74 -Russia 6601668 138739892 21 2223 16023 99 68 -Rwanda 10169 11370425 1118 12 1069 70 58 -Saint Helena Ascension and Tristan da Cunha 119 7700 65 0 2338 97 79 -Saint Kitts and Nevis 101 50314 499 1 13595 98 75 -Saint Lucia 238 161557 679 2 11129 90 77 -Saint Pierre and Miquelon 93 5888 63 0 8203 99 80 -Saint Vincent and the Grenadines 150 103869 692 1 10292 96 74 -Samoa 1093 193161 177 1 5462 100 72 -San Marino 24 31817 1351 1 35736 96 83 -Sao Tome and Principe 372 179506 482 0 1733 85 63 -Saudi Arabia 830000 26131703 31 622 23803 79 74 -Senegal 75955 12643799 166 24 1889 39 60 -Serbia 29913 7310555 244 80 10957 96 74 -Seychelles 176 89188 508 2 23019 92 74 -Sierra Leone 27699 5363669 194 5 880 35 56 -Singapore 269 4740737 17616 292 61573 93 82 -Slovakia 18933 5477038 289 120 21946 100 76 -Slovenia 7827 2000092 256 57 28289 100 77 -Somalia 246201 9925640 40 6 594 38 50 -South Africa 470693 49004031 104 524 10693 86 49 -Spain 195124 46754784 240 1369 29280 98 81 -Sri Lanka 25332 21283913 840 107 5004 91 76 -Sudan 718723 45047502 63 100 2220 61 55 -Suriname 63251 491989 8 5 9575 90 74 -Swaziland 6704 1370424 204 6 4427 82 49 -Sweden 173860 9088728 52 355 39026 99 81 -Switzerland 15937 7639961 479 325 42474 99 81 -Syria 71498 22517750 315 107 4770 80 75 -Taiwan 13892 23071779 1661 822 35619 96 78 -Tajikistan 55251 7627200 138 15 1933 100 66 -Tanzania 365755 42746620 117 58 1367 69 53 -Thailand 198117 66720153 337 587 8796 93 68 -Timor-Leste 5743 1177834 205 3 2590 59 63 -Togo 21925 6771993 309 6 882 61 63 -Tonga 288 105916 367 1 7091 99 75 -Trinidad and Tobago 1980 1227505 620 26 21263 99 71 -Tunisia 63170 10629186 168 100 9408 74 75 -Turkey 302535 78785548 260 961 12191 87 73 -Turkmenistan 188456 4997503 27 37 7384 99 69 -Turks and Caicos Islands 366 44819 122 0 4819 98 79 -Uganda 93065 34612250 372 42 1218 67 53 -Ukraine 233032 45134707 194 305 6762 99 69 -United Arab Emirates 32278 5148664 160 247 47935 78 77 -United Kingdom 94058 62698362 667 2173 34658 99 80 -United States 3794100 313232044 83 14660 46802 99 78 -Uruguay 68037 3308535 49 48 14505 98 76 -Uzbekistan 172742 28128600 163 86 3052 99 73 -Vanuatu 4706 224564 48 1 5063 74 65 -Venezuela 352144 27635743 78 345 12491 93 74 -Vietnam 127881 90549390 708 277 3055 94 72 -Virgin Islands 737 109666 149 2 14380 93 79 -Wallis and Futuna 55 15398 281 0 3897 50 79 -West Bank 2263 2568555 1135 13 4979 92 75 -Yemen 203850 24133492 118 63 2627 50 64 -Zambia 290587 13881336 48 20 1444 81 52 -Zimbabwe 150872 12084304 80 5 452 91 50 -' -] - -{ #category : #data } -RTTabTable class >> euCountries [ - - ^ #('Russia' 'Ukraine' 'France' 'Spain' 'Sweden' 'Norway' 'Germany' 'Finland' 'Poland' 'Italy' 'United' 'Romania' 'Belarus' 'Kazakhstan' 'Greece' 'Bulgaria' 'Iceland' 'Hungary' 'Portugal' 'Austria' 'Czech' 'Serbia' 'Republic' 'Lithuania' 'Latvia' 'Croatia' 'Bosnia' 'Slovakia' 'Estonia' 'Denmark' 'Netherlands' 'Switzerland' 'Moldova' 'Belgium' 'Albania' 'Republic' 'Turkey' 'Slovenia' 'Montenegro' 'Cyprus' 'Azerbaijan' 'Luxembourg' 'Georgia' 'Andorra' 'Malta' 'Liechtenstein' 'San Marino' 'Monaco') -] - -{ #category : #'instance creation' } -RTTabTable class >> openTSVfile [ - | fileName tab stream | - fileName := TRPlatform current dialogChooseFile: #('*.csv') label: 'Pick a CSV file'. - fileName ifNil: [ ^ nil ]. - stream := fileName asFileReference readStream. - - [ tab := self new. - tab input: stream contents usingDelimiter: Character tab. ] - ensure: [ stream close ]. - self assert: [tab values first size = 3] description: 'Wrong CSV structure'. - tab convertColumnsAsInteger: #(1). - - ^ tab -] - -{ #category : #data } -RTTabTable class >> southAmericanCountries [ - - ^ #('Brazil' 'Colombia' 'Argentina' 'Peru' 'Venezuela' 'Chile' 'Ecuador' 'Bolivia' 'Paraguay' 'Uruguay' 'Guyana' 'Suriname' 'French' 'Falkland' 'Islands') -] - -{ #category : #accessing } -RTTabTable >> attributes [ - attributes ifNil: [ attributes := Dictionary new ]. - ^ attributes -] - -{ #category : #updating } -RTTabTable >> breakDown: l usingDelimiters: delimitersAsCharacter [ - ^ l subStringsKeepingEmptyFields: delimitersAsCharacter - - -] - -{ #category : #accessing } -RTTabTable >> cleanedValuesOfColumn: indexAsNumberOfString [ - "Return the values stored in the column. No nil values may be returned (this happens if a column is has less elements than other columns" - ^ (self valuesOfColumn: indexAsNumberOfString) select: [ :ss | ss notNil and: [ ss ~= 'nil' and: [ ss notEmpty ] ] ] -] - -{ #category : #converting } -RTTabTable >> convertColumn: index to: blockForConvertion [ - "Convert a column of the table" - values do: [ :row | - | v i | - i := (self convertFromNameToIndexIfNecessary: index). - v := row at: i. - row at: i put: (blockForConvertion rtValue: v) - ] -] - -{ #category : #converting } -RTTabTable >> convertColumnAsDateAndTime: integerOrString [ - "Replace each element by an instance of DateAndTime" - - self convertColumnsAsDateAndTime: (Array with: (self convertFromNameToIndexIfNecessary: integerOrString)) -] - -{ #category : #converting } -RTTabTable >> convertColumnAsInteger: integerOrString [ - "Convert a column as integers" - self assert: [ integerOrString isCollection not ] description: 'Provide an integer or a string as argument please'. - ^ self convertColumnsAsInteger: (Array with: (self convertFromNameToIndexIfNecessary: integerOrString)) -] - -{ #category : #converting } -RTTabTable >> convertColumns: collectionOfIntegers to: aBlock [ - "collectionOfIntegers is a collection of integers corresponding to column to convert" - "block is a one-arg block that takes as input a string and return the wanted value" - - collectionOfIntegers do: [ :index | - self convertColumn: index to: aBlock ] -] - -{ #category : #converting } -RTTabTable >> convertColumnsAsDateAndTime: collectionOfIntegers [ - "collectionOfIntegers is a collection of integers corresponding to column to convert" - "Replace each element by an instance of DateAndTime" - - self convertColumns: collectionOfIntegers to: [ :s | (TRPlatform current dateAndTimeFromString: s) ] -] - -{ #category : #converting } -RTTabTable >> convertColumnsAsFloat: collectionOfIntegers [ - ^ self convertColumns: collectionOfIntegers to: [ :s | Float readFrom: s ] -] - -{ #category : #converting } -RTTabTable >> convertColumnsAsInteger: collectionOfIntegers [ - ^ self convertColumns: collectionOfIntegers to: [ :s | s asNumber asInteger ] -] - -{ #category : #'private-utility' } -RTTabTable >> convertFromNameToIndexIfNecessary: anObject [ - "anObject could be a number (to indicate a column index) or a string" - "The method return the index" - ^ anObject isNumber - ifTrue: [ anObject ] - ifFalse: [ - "Then we are surely a string" - self indexOfName: anObject ] -] - -{ #category : #'private-utility' } -RTTabTable >> detectDelimiterIn: aString [ - | options first second | - aString lines size = 0 - ifTrue: [ ^ Character tab ]. - options := Array with: Character tab with: $; with: $,. - first := (options collect: [ :each | each -> (aString lines first occurrencesOf: each) ]) asDictionary. - second := first. - aString lines size > 1 - ifTrue: [ second := (options collect: [ :each | each -> (aString lines second occurrencesOf: each) ]) asDictionary ]. - ^ (options detect: [ :each | (first at: each) > 0 and: [ (first at: each) = (second at: each) ] ] ifNone: [ Character tab ]) value -] - -{ #category : #accessing } -RTTabTable >> dictionaryValues [ - ^ self values - collect: [ :row | - (row withIndexCollect: [ :each :i | (firstRow at: i) asSymbol -> each ]) - asOrderedDictionary ] -] - -{ #category : #accessing } -RTTabTable >> firstColumn [ - ^ self valuesOfColumn: 1 -] - -{ #category : #accessing } -RTTabTable >> firstRow [ - ^ firstRow ifNil: [ self values first ] -] - -{ #category : #converting } -RTTabTable >> gather: columnIndex using: twoArgBlock [ - | d key | - d := Dictionary new. - values do: [ :row | - key := row at: columnIndex. - (d includesKey: key) - ifTrue: [ d at: key put: (twoArgBlock value: (d at: key) value: row) ] - ifFalse: [ d at: key put: row ] ]. - values := d values -] - -{ #category : #'gt-inspector-extension' } -RTTabTable >> gtInspectorTableIn: composite [ - - | tbl titles | - (tbl := composite table) - title: 'CSV'; - display: [ firstRow ifNil: [ self values allButFirst ] ifNotNil: [ self values ] ]. - titles := firstRow ifNil: [ self values first ]. - titles - withIndexDo: [ :heading :i | - tbl - column: heading - evaluated: [ :each | GTObjectPrinter new asTruncatedTextFrom: (each at: i) ] ]. - ^ tbl -] - -{ #category : #converting } -RTTabTable >> indexOfName: aString [ - "Return the index of the column named aString" - | s | - s := aString asSymbol. - firstRow doWithIndex: [ :e :i | e asSymbol = s ifTrue: [ ^ i ] ]. - ^ 0 -] - -{ #category : #updating } -RTTabTable >> input: txt [ - "txt is a large string in which we have one entry per line" - ^ self input: txt usingDelimiter: (self detectDelimiterIn: txt) -] - -{ #category : #updating } -RTTabTable >> input: txt usingDelimiter: delimitersAsCharacter [ - "txt is a large string in which we have one entry per line" - - values := (txt lines - select: #notEmpty - thenCollect: [ :l | self breakDown: l trimBoth usingDelimiters: delimitersAsCharacter asString ]) - select: #notEmpty -] - -{ #category : #updating } -RTTabTable >> input: txt usingDelimiters: delimitersAsString [ - "txt is a large string in which we have one entry per line" - values := txt lines collect: [ :l | l substrings: delimitersAsString ] -] - -{ #category : #accessing } -RTTabTable >> maxOfColumn: aBlock [ - | max | - max := -100000. - self values do: [ :row | max := max max: (aBlock rtValue: row) ]. - ^ max -] - -{ #category : #accessing } -RTTabTable >> maximum [ - | max | - "We initialize the mininum to any value found in the table" - max := self values last detect: #isNumber ifNone: [ 0 ]. - - self values do: [ :row | - row do: [ :value | - value isNumber ifTrue: [ max := max max: value ] ] ]. - ^ max -] - -{ #category : #accessing } -RTTabTable >> minimum [ - "Return the minimum of the whole table" - | min | - "We initialize the mininum to any value found in the table" - min := self values last detect: #isNumber ifNone: [ 0 ]. - - self values do: [ :row | - row do: [ :value | - value isNumber ifTrue: [ min := min min: value ] ] ]. - ^ min -] - -{ #category : #accessing } -RTTabTable >> numberOfColumns [ - ^ (self values collect: #size) max -] - -{ #category : #accessing } -RTTabTable >> numberOfRows [ - ^ values size -] - -{ #category : #updating } -RTTabTable >> rejectInColumn: nbColumn row: aBlock [ - "Remove rows for which the nbColumn element is evaluated at true" - self rejectRow: [ :row | aBlock rtValue: (row at: nbColumn) ] - -] - -{ #category : #updating } -RTTabTable >> rejectRow: aBlock [ - "Remove a row for which the block evaluate to true. The block takes as argument the row" - values := values reject: [ :v | aBlock rtValue: v ] -] - -{ #category : #updating } -RTTabTable >> removeColumn: aNumber [ - values := values collect: [ :v | v copyWithoutIndex: aNumber ]. - firstRow ifNotNil: [ firstRow := firstRow copyWithoutIndex: aNumber ] -] - -{ #category : #accessing } -RTTabTable >> removeFirstRow [ - "Remove the first line of the table, typically the header" - firstRow := values first. - values := values allButFirst. - ^ firstRow. -] - -{ #category : #converting } -RTTabTable >> replaceEmptyValuesWith: aValue inColumns: columns [ - "columns is a collection of integers" - self convertColumns: columns to: [ :s | s isEmpty ifTrue: [ aValue ] ifFalse: [ s ] ] -] - -{ #category : #converting } -RTTabTable >> replaceZeroWithCumulativeValuesInColumns: columns [ - columns - do: [ :column | - | previous | - previous := 0. - values - do: [ :row | - (row at: column) = 0 ifTrue: [ row at: column put: previous ]. - previous := row at: column ] ] -] - -{ #category : #accessing } -RTTabTable >> values [ - ^ values -] - -{ #category : #accessing } -RTTabTable >> valuesGroupedBy: aSymbol [ - ^ (self dictionaryValues groupedBy: [ :each | each at: aSymbol ]) asDictionary -] - -{ #category : #accessing } -RTTabTable >> valuesOfColumn: indexAsNumberOfString [ - "Return the values stored in the column. Note that these values may not be cleaned, ie. nil values may be contained" - ^ values collect: [ :row | row at: (self convertFromNameToIndexIfNecessary: indexAsNumberOfString) ] -] diff --git a/src/Roassal2/RTTabTableTest.class.st b/src/Roassal2/RTTabTableTest.class.st deleted file mode 100644 index 51e14145a..000000000 --- a/src/Roassal2/RTTabTableTest.class.st +++ /dev/null @@ -1,321 +0,0 @@ -Class { - #name : #RTTabTableTest, - #superclass : #RTTest, - #instVars : [ - 'tab', - 'data' - ], - #category : #'Roassal2-Table' -} - -{ #category : #running } -RTTabTableTest >> setUp [ - super setUp. - tab := RTTabTable new -] - -{ #category : #tests } -RTTabTableTest >> testAccessing [ - - tab input: 'key m1 m2 m3 -A 1 2 5 -B 2 5 4 -C 1 7 4'. - self assert: tab numberOfRows = 4. - tab removeFirstRow. - self assert: tab numberOfRows = 3. -] - -{ #category : #tests } -RTTabTableTest >> testAccessing2 [ - - tab input: 'key m1 m2 m3 - -A 1 2 5 - -B 2 5 4 - -C 1 7 4'. - self assert: tab numberOfRows = 4. - tab removeFirstRow. - self assert: tab numberOfRows = 3. - self assert: tab numberOfColumns = 4. - self assert: tab firstColumn = (Array with: 'A' with: 'B' with: 'C'). - -] - -{ #category : #tests } -RTTabTableTest >> testCommasInsideQuotes [ - - tab input: - '2014-01-26 00:00:00+00,Boeing 737-3B7 (SF),ZK-TLC,"Airwork, NZ,opf. Pacific Air Express",0,Honiara-Henderson International Airport(HIR),Solomon Islands,-9.428056,160.053056,"Brisbane International Airport, QLD (BNE/YBBN), Australia","Honiara-Henderson International Airport (HIR/AGGH), Solomon Islands",Accident resulting in a total loss of the plane,0101000020E6100000691B7FA2B201644091B6F1272ADB22C0,7,2014-07-18 11:46:49.32676+00,2014-07-18 11:47:01.156893+00' - usingDelimiter: $,. - self assert: tab numberOfColumns equals: 16 -] - -{ #category : #tests } -RTTabTableTest >> testConvertAsDateAndTime [ - - tab input: TRPlatform current dateTimeStringExample usingDelimiter: $,. - tab convertColumnAsDateAndTime: 3. - tab convertColumnAsDateAndTime: 4. - self assert: tab values size equals: 3. - - self assert: tab values first third year equals: 2014. - self assert: tab values last third year equals: 2008. - self assert: tab values last fourth year equals: 2009. - self assert: tab values last fourth month equals: 1. -] - -{ #category : #tests } -RTTabTableTest >> testConvertAsFloats [ - - tab input: '5.4,1.2,0,hello world' usingDelimiter: $,. - tab convertColumnsAsFloat: #(1 2 3). - self assert: tab values first equals: #(5.4 1.2 0 'hello world') -] - -{ #category : #tests } -RTTabTableTest >> testConvertAsInteger [ - - tab input: '5.4,1.2,0,hello world' usingDelimiter: $,. - tab convertColumnsAsInteger: #(1 2 3). - self assert: tab values first equals: #(5 1 0 'hello world') -] - -{ #category : #tests } -RTTabTableTest >> testDetectDelimiter [ - data := 'm1 m2 m3 -1 2 5 -2 5 4 -1 7 4'. - self assert: (tab detectDelimiterIn: data) equals: Character tab -] - -{ #category : #tests } -RTTabTableTest >> testDetectDelimiter1 [ - data := 'm1 m2 m3'. - self assert: (tab detectDelimiterIn: data) equals: Character tab -] - -{ #category : #tests } -RTTabTableTest >> testDetectDelimiter2 [ - data := 'm1,m2,m3'. - self assert: (tab detectDelimiterIn: data) equals: $, -] - -{ #category : #tests } -RTTabTableTest >> testDetectDelimiter3 [ - data := ''. - self assert: (tab detectDelimiterIn: data) equals: Character tab -] - -{ #category : #tests } -RTTabTableTest >> testDictionaryValues [ - tab - input: - 'm1 m2 m3 -A 1 2 -B 4 9'. - tab removeFirstRow. - self - assert: tab dictionaryValues - equals: - (Array with: (OrderedDictionary with: #m1 -> 'A' with: #m2 -> '1' with: #m3 -> '2') with: - (OrderedDictionary with: #m1 -> 'B' with: #m2 -> '4' with: #m3 -> '9')) -] - -{ #category : #tests } -RTTabTableTest >> testEmptyAndReplaceColumn [ - - tab input: ',,' usingDelimiter: $,. - tab replaceEmptyValuesWith: 0 inColumns: #(1 2 3). - self assert: tab numberOfColumns equals: 3. - self assert: tab values first equals: #(0 0 0) -] - -{ #category : #tests } -RTTabTableTest >> testEmptyColumn [ - - tab input: ',,' usingDelimiter: $,. - self assert: tab numberOfColumns equals: 3 -] - -{ #category : #tests } -RTTabTableTest >> testFiltering [ - - tab input: 'abc,123,123 -5,0,0 -1,2,3' usingDelimiter: $,. - - self assert: tab numberOfRows equals: 3. - tab rejectRow: [ :row | row first = 'abc' ]. - self assert: tab numberOfRows equals: 2. - tab rejectRow: [ :row | row first = 'abc' ]. - self assert: tab numberOfRows equals: 2. -] - -{ #category : #tests } -RTTabTableTest >> testFilteringPerColumn [ - - tab input: 'abc,123,123 -5,0,0 -1,2,3' usingDelimiter: $,. - - tab convertColumnAsInteger: 2. - self assert: tab numberOfRows equals: 3. - tab rejectInColumn: 2 row: #isZero. - self assert: tab numberOfRows equals: 2. - - tab rejectInColumn: 2 row: #isZero. - self assert: tab numberOfRows equals: 2. - - tab rejectRow: [ :row | row first = 'abc' ]. - self assert: tab numberOfRows equals: 1. -] - -{ #category : #tests } -RTTabTableTest >> testGathering [ - - tab input: '1 A -2 B -1 A -1 A -5 B' usingDelimiter: $ . - tab convertColumn: 1 to: #asInteger. - tab gather: 2 using: [ :row1 :row2 | Array with: row1 first + row2 first with: row1 second ]. - self assert: (tab values asArray = #( #(3 'A') #(7 'B'))) -] - -{ #category : #tests } -RTTabTableTest >> testGrouped [ - tab - input: - 'm1 m2 m3 -A 1 2 -A 3 7 -B 2 5 -B 4 9'. - tab removeFirstRow. - tab convertColumnsAsInteger: #(m2 m3). - self - assert: (tab valuesGroupedBy: #m1) - equals: - (Array with: ('A' - -> - (Array - with: (OrderedDictionary with: #m1 -> 'A' with: #m2 -> 1 with: #m3 -> 2) - with: (OrderedDictionary with: #m1 -> 'A' with: #m2 -> 3 with: #m3 -> 7))) - with: ('B' - -> - (Array - with: (OrderedDictionary with: #m1 -> 'B' with: #m2 -> 2 with: #m3 -> 5) - with: (OrderedDictionary with: #m1 -> 'B' with: #m2 -> 4 with: #m3 -> 9)))) - asDictionary -] - -{ #category : #tests } -RTTabTableTest >> testMassiveConversion [ - - tab input: 'key m1 m2 m3 -A 1 2 5 -B 2 5 4 -C 1 7 4 '. - tab removeFirstRow. - self assert: tab values first second = '1'. - self assert: tab values third third = '7'. - - tab convertColumns: (2 to: 4) to: [ :s | s asInteger ]. - self assert: tab values first second = 1. - self assert: tab values third third = 7. - - self assert: tab minimum = 1. - self assert: tab maximum = 7. - - self assert: (tab maxOfColumn: #second) = 2. - self assert: (tab maxOfColumn: #fourth) = 5. - self assert: (tab maxOfColumn: [ :row | row at: 3 ]) = 7. -] - -{ #category : #tests } -RTTabTableTest >> testMinimumAndMaximum [ - - tab input: -'5.4,1.2,0,hello world --56,1.2,100,bravo' usingDelimiters: ','. - tab convertColumnsAsFloat: #(1 2 3). - self assert: tab minimum equals: -56.0. - self assert: tab maximum equals: 100. - - self assert: (tab maxOfColumn: #first) equals: 5.4. - self assert: (tab maxOfColumn: #second) equals: 1.2. - self assert: (tab maxOfColumn: #third) equals: 100.0. - - self assert: tab firstColumn equals: #(5.4 -56). -] - -{ #category : #tests } -RTTabTableTest >> testProcessing [ - - tab input: 'France 20 -Germany 80'. - tab convertColumn: 2 to: #asInteger. - self assert: (tab values = #( #('France' 20) #('Germany' 80))) -] - -{ #category : #tests } -RTTabTableTest >> testProcessingWithEmptyLines [ - - tab input: 'France 20 -Germany 80 -'. - tab convertColumn: 2 to: #asInteger. - self assert: (tab values = #( #('France' 20) #('Germany' 80))) -] - -{ #category : #tests } -RTTabTableTest >> testRemovingColumn [ - tab - input: - 'Country number toremove -France 20 toremove -Germany 80 toremove'. - tab removeFirstRow. - tab removeColumn: 3. - self assert: tab values equals: #(#('France' '20') #('Germany' '80')). - self assert: tab firstRow equals: #('Country' 'number') -] - -{ #category : #tests } -RTTabTableTest >> testUsingFirstRow [ - - | tabString | - tabString := -' -x,y -4,1 -2,6 -1,3 -1,5 -'. - tab := RTTabTable new input: tabString usingDelimiter: $,. - tab removeFirstRow. - tab convertColumnsAsInteger: #('x' 'y'). - - self assert: (tab indexOfName: 'x') equals: 1. - self assert: (tab indexOfName: 'y') equals: 2. - - self assert: (tab valuesOfColumn: 'x') equals: #(4 2 1 1). - - self assert: (tab convertFromNameToIndexIfNecessary: 1) equals: 1. - self assert: (tab convertFromNameToIndexIfNecessary: 100) equals: 100. - self assert: (tab convertFromNameToIndexIfNecessary: 'x') equals: 1. - self assert: (tab convertFromNameToIndexIfNecessary: 'y') equals: 2. -] - -{ #category : #tests } -RTTabTableTest >> testWithQuote [ - - tab input: 'abc,def,"ghi,ijk"' usingDelimiter: $,. - self assert: tab numberOfColumns equals: 3 -] diff --git a/src/Roassal2/RTTable.class.st b/src/Roassal2/RTTable.class.st deleted file mode 100644 index 2af6c3279..000000000 --- a/src/Roassal2/RTTable.class.st +++ /dev/null @@ -1,22 +0,0 @@ -Class { - #name : #RTTable, - #superclass : #RTTabTable, - #category : #'Roassal2-Table' -} - -{ #category : #'as yet unclassified' } -RTTable class >> inputWithComma: aString [ - self assert: [ aString isString ] description: 'Please, provide a string'. - ^ self new input: aString usingDelimiter: $, -] - -{ #category : #'as yet unclassified' } -RTTable class >> inputWithTab: aString [ - self assert: [ aString isString ] description: 'Please, provide a string'. - ^ self new input: aString usingDelimiter: Character tab -] - -{ #category : #'as yet unclassified' } -RTTable >> convertColumnsToFloat: collectionOfIntegers [ - ^ self convertColumns: collectionOfIntegers to: [ :s | Float readFrom: s ] -] diff --git a/src/Roassal2/RTTest.class.st b/src/Roassal2/RTTest.class.st deleted file mode 100644 index 51caa3c20..000000000 --- a/src/Roassal2/RTTest.class.st +++ /dev/null @@ -1,47 +0,0 @@ -Class { - #name : #RTTest, - #superclass : #TestCase, - #category : #'Roassal2-Core-Tests' -} - -{ #category : #'useful documentation' } -RTTest >> readme [ - -" -Exporting the core of Roassal2 to Amber -Note that you need to have Trachel also exported - -| exporter rootClasses soleClasses | -exporter := P2AExporterV11 new. -rootClasses := Array with: RTAnnounceableObject with: RTLayout. -rootClasses do: [ :c | - c withAllSubclasses do: [ :cc | exporter addClass: cc ] ]. -soleClasses := { RTObject . RTGroup. RTShape . RTAbstractElementShape . RTBox . RTEllipse . RTAbstractLine . RTLine . RTNoShape . RTLayoutTranslator . RTDirectLayoutTranslator}. -soleClasses do: [ :cc | exporter addClass: cc ]. -exporter fileOutAsString - - -| exporter rootClasses | -exporter := P2AExporterV11 new. -rootClasses := Array with: RTShapeTest with: RTViewTest with: RTShape with: RTExample with: RTAnnounceableObject. -rootClasses do: [ :c | - c withAllSubclasses do: [ :cc | exporter addClass: cc ] ]. -exporter fileOutAsString - - - -" -] - -{ #category : #running } -RTTest >> setUp [ - super setUp. -" The following lines are useful for debugging - - '/tmp/results.txt' asFileReference writeStream - nextPutAll: self class name asString, '>>', testSelector asString; - cr. - - Transcript show: self class name asString, '>>'. - Transcript show: testSelector asString; cr" -] diff --git a/src/Roassal2/RTText.class.st b/src/Roassal2/RTText.class.st deleted file mode 100644 index 2125cb8a1..000000000 --- a/src/Roassal2/RTText.class.st +++ /dev/null @@ -1,119 +0,0 @@ -" -I am a shape describing a possibly multiline text. - -If you need just a simple label, use RTLabel instead. -" -Class { - #name : #RTText, - #superclass : #RTAbstractElementShape, - #instVars : [ - 'text', - 'font', - 'fontSize', - 'shouldWrap' - ], - #category : #'Roassal2-MorphSpecific' -} - -{ #category : #accessing } -RTText >> doNotWrapText [ - shouldWrap := false -] - -{ #category : #accessing } -RTText >> font: aValueOrOneArgBlock [ - font := self valueRetrieverOn: aValueOrOneArgBlock -] - -{ #category : #accessing } -RTText >> fontFor: anElement [ - ^ font rtValue: anElement -] - -{ #category : #accessing } -RTText >> fontSize: aValueOrOneArgBlock [ - fontSize := self valueRetrieverOn: aValueOrOneArgBlock -] - -{ #category : #accessing } -RTText >> fontSizeFor: anElement [ - ^ fontSize rtValue: anElement -] - -{ #category : #initialization } -RTText >> initialize [ - super initialize. - self text: [ :model | model asString ]. - shouldWrap := false. - font := RTTheme current textFont. - fontSize := RTTheme current textSize. - color := RTTheme current textColor -] - -{ #category : #accessing } -RTText >> text: aTextOrBlock [ - text := self valueRetrieverOn: aTextOrBlock -] - -{ #category : #accessing } -RTText >> textFor: anElement [ - ^ text rtValue: anElement -] - -{ #category : #hooks } -RTText >> trachelShapeClass [ - ^ TRTextShape -] - -{ #category : #hooks } -RTText >> updateFor: anElement trachelShape: trachelShape [ - ^ trachelShape - text: (self wrap: (self textFor: anElement) to: (self widthFor: anElement)); - font: (self fontFor: anElement); - fontSize: (self fontSizeFor: anElement); - color: (self colorFor: anElement); - position: anElement position; - rotateByDegrees: (self rotationFor: anElement); - scaleBy: (self scaleFor: anElement); - yourself -] - -{ #category : #accessing } -RTText >> valueRetrieverOn: aValueOrAOneArgBlock [ - ^ [ :anElement | aValueOrAOneArgBlock rtValue: anElement model ] -] - -{ #category : #wrapping } -RTText >> wrap: aText to: maxWidth [ - "This is a naive brute-force implementation of line-wrapping algorithm. - - There is also TxAthensCharacterWrappingStrategy that is more advanced, but requires the use of TxModel/Spans, etc." - - | string words lineWidth lines line ww | - shouldWrap - ifFalse: [ ^ aText ]. - string := aText copyReplaceAll: String cr with: ' '. - words := string splitOn: ' '. - lineWidth := 0. - lines := OrderedCollection new. - line := OrderedCollection new. - lines add: line. - words - do: [ :word | - ww := font widthOfString: word. - lineWidth = 0 - ifTrue: [ line add: word. - lineWidth := lineWidth + ww ] - ifFalse: [ ww + lineWidth > maxWidth - ifTrue: [ lineWidth := 0. - line := OrderedCollection new. - lines add: line ]. - line add: word. - lineWidth := lineWidth + ww ] ]. - ^ (lines collect: [ :each | each joinUsing: ' ' ]) joinUsing: String cr -] - -{ #category : #accessing } -RTText >> wrapText [ - shouldWrap := true -] diff --git a/src/Roassal2/RTTextBuilder.class.st b/src/Roassal2/RTTextBuilder.class.st deleted file mode 100644 index 66e0ad7a3..000000000 --- a/src/Roassal2/RTTextBuilder.class.st +++ /dev/null @@ -1,156 +0,0 @@ -" -A RTTextBuilder parses a text and displays it on a RTView. - -It uses textTokenizer for splitting text into lines and lines into words. For each word an RTElement is created. It allows to have different shape or/and interaction on each word. User can define how to split text by implementing a textTokenizer; by default RTTextTokenizer. - -All the RTElements representing words are nested to a main RTElement object with padding. - -On each word, wordShapeBuilder and wordInteractionBuilder are applied. - -Before applying shape and interaction builders on any RTElement object, hook for main element and wordHook for wor elements are called. It allows to make extra customization for each element. - -Instance Variables - hook: - padding: - textTokenizer: - wordHook: - wordInteractionBuilder: - wordShapeBuilder: - -hook - - is one-orgument-block which receives a main RTElement object; the RTElement object nests all the other objects for a displayed text. It is called before any element initialization. - -padding - - number of pixes between main RTElement object and nested text. - -textTokenizer - - is responsible for splitting a text into lines and lines into words. - -wordHook - - is two-argument-block which receives a word element and interval of a word in the original text - -wordInteractionBuilder - - interaction builder applied on each word element - -wordShapeBuilder - - shape builder applied on each word element - -" -Class { - #name : #RTTextBuilder, - #superclass : #RTBuilder, - #instVars : [ - 'hook', - 'wordHook', - 'wordInteractionBuilder', - 'wordShapeBuilder', - 'padding', - 'textTokenizer' - ], - #category : #'Roassal2-Builder-TextBuilder' -} - -{ #category : #protocol } -RTTextBuilder >> addText: aText [ - ^ self buildText: aText. -] - -{ #category : #protocol } -RTTextBuilder >> addText: aText model: anObject [ - ^ self buildText: aText model: anObject. -] - -{ #category : #protocol } -RTTextBuilder >> buildText: aText [ - ^ self buildText: aText model: aText. -] - -{ #category : #protocol } -RTTextBuilder >> buildText: aString in: element [ - | tokenizedString elements lines | - tokenizedString := textTokenizer tokenize: aString. - lines := RTGroup new. - elements := RTGroup new. - tokenizedString linesDo: [ :eachLine | - | line | - line := RTGroup new. - eachLine wordsDo: [ :eachWord | | wordElement | - wordElement := RTElement on: eachWord text. - wordHook cull: wordElement cull: eachWord interval. - wordShapeBuilder setUpElements: wordElement. - wordInteractionBuilder setUpElements: wordElement. - line add: wordElement. - elements add: wordElement. - view add: wordElement ]. - RTHorizontalLineLayout new gapSize: 0; on: line. - lines add: line ]. - RTVerticalLineLayout new gapSize: 0; on: lines. - RTNest new padding: padding; on: element nest: elements. - element attributeAt: self nestedElementsAttribute put: elements. - ^ elements -] - -{ #category : #protocol } -RTTextBuilder >> buildText: aText model: anObject [ - | el | - el := RTElement on: anObject. - hook value: el. - shapeBuilder setUpElements: el. - interactionBuilder setUpElements: el. - view add: el. - self buildText: aText in: el. - ^ el -] - -{ #category : #initialization } -RTTextBuilder >> defaultTokenizer [ - ^ RTTextTokenizer new -] - -{ #category : #accessing } -RTTextBuilder >> hook: aOneArgBlock [ - hook := aOneArgBlock -] - -{ #category : #initialization } -RTTextBuilder >> initialize [ - super initialize. - textTokenizer := self defaultTokenizer. - wordShapeBuilder := RTShapeBuilder new. - wordShapeBuilder text. - wordInteractionBuilder := RTInteractionBuilder new. - wordHook := [ :anElement :anInterval | nil ]. - hook := [ :anElement | nil ]. - padding := 5 -] - -{ #category : #accessing } -RTTextBuilder >> padding [ - ^ padding -] - -{ #category : #accessing } -RTTextBuilder >> padding: aNumber [ - padding := aNumber -] - -{ #category : #hooks } -RTTextBuilder >> renderIn: aView [ - -] - -{ #category : #accessing } -RTTextBuilder >> wordHook: aTwoArgBlock [ - - wordHook := aTwoArgBlock -] - -{ #category : #accessing } -RTTextBuilder >> wordInteraction [ - ^ wordInteractionBuilder -] - -{ #category : #accessing } -RTTextBuilder >> wordShape [ - ^ wordShapeBuilder -] diff --git a/src/Roassal2/RTTextBuilderExamples.class.st b/src/Roassal2/RTTextBuilderExamples.class.st deleted file mode 100644 index c5c3f047a..000000000 --- a/src/Roassal2/RTTextBuilderExamples.class.st +++ /dev/null @@ -1,83 +0,0 @@ -" -A RTTextBuilderExamples has examples of RTTextBuilder class. - -" -Class { - #name : #RTTextBuilderExamples, - #superclass : #RTObject, - #category : #'Roassal2-Builder-TextBuilder' -} - -{ #category : #examples } -RTTextBuilderExamples >> example01Highlighting [ - " - self new example01Highlighting - " - - | builder | - builder := RTTextBuilder new. - builder wordInteraction highlightColored: Color blue. - builder addText: 'hello world'. - builder build. - ^ builder view -] - -{ #category : #examples } -RTTextBuilderExamples >> example02ClickableWord [ - " - self new example02ClickableWord - " - - | builder | - builder := RTTextBuilder new. - builder wordInteraction - highlightColored: Color blue; - when: TRMouseClick do: [ :event | event element model inspect ]. - builder addText: 'hello world', String cr, 'hola mundo'. - builder build. - ^ builder view -] - -{ #category : #examples } -RTTextBuilderExamples >> example03ShowCode [ - " - self new example03ShowCode - " - - | builder | - builder := RTTextBuilder new. - builder shape rectangle - withBorder; - color: (Color gray alpha: 0.2). - builder wordShape color: Color brown. - builder wordInteraction - highlight; - when: TRMouseClick do: [ :event | event element model inspect ]. - builder - addText: (RTTextBuilderExamples >> #example03ShowCode) sourceCode. - builder build. - ^ builder view -] - -{ #category : #examples } -RTTextBuilderExamples >> example04ShowCodeAsBoxes [ - " - self new example04ShowCodeAsBoxes - " - - | builder | - builder := RTTextBuilder new. - builder shape rectangle withBorder color: (Color white alpha: 0.2). - builder wordShape rectangle - height: 3; - width: [ :model | model size + 3 ]; - color: Color yellow. - builder wordInteraction - highlight; - popup; - when: TRMouseClick do: [ :event | event element model inspect ]. - builder - addText: (RTTextBuilderExamples >> #example04ShowCodeAsBoxes) sourceCode. - builder build. - ^ builder view -] diff --git a/src/Roassal2/RTTextBuilderTest.class.st b/src/Roassal2/RTTextBuilderTest.class.st deleted file mode 100644 index b03197a7f..000000000 --- a/src/Roassal2/RTTextBuilderTest.class.st +++ /dev/null @@ -1,227 +0,0 @@ -Class { - #name : #RTTextBuilderTest, - #superclass : #RTTest, - #instVars : [ - 'builder' - ], - #category : #'Roassal2-Builder-TextBuilder' -} - -{ #category : #asserting } -RTTextBuilderTest >> assertModel: anObject1 position: aSymbol1 equals: anObject2 position: aSymbol2 [ - | position1 position2 | - position1 := aSymbol1 cull: (self encompassingRectangleFromModel: anObject1). - position2 := aSymbol2 cull: (self encompassingRectangleFromModel: anObject2). - self assert: (((position1 isNumber) and: [ position2 isNumber ]) - or: [ (position1 isPoint) and: [ position2 isPoint ] ]). - position1 isNumber - ifTrue: [ self assert: (position1 - position2) abs <= 1 ] - ifFalse: [ self assert: (position1 - position2) abs <= (1 @ 1) ]. -] - -{ #category : #accessing } -RTTextBuilderTest >> elementFromModel: anObject [ - ^ builder view elementFromModel: anObject -] - -{ #category : #accessing } -RTTextBuilderTest >> encompassingRectangleFromModel: anObject [ - ^ (self elementFromModel: anObject) encompassingRectangle -] - -{ #category : #tests } -RTTextBuilderTest >> fixmeTestWordHighlight [ - | element text | - builder := RTTextBuilder new. - text := 'hello'. - builder interaction highlightColored: Color blue. - builder addText: text. - element := builder view elementFromModel: text. - self assert: element shape color = element shape defaultColor. - element announce: (TRMouseEnter new shape: element trachelShape). - self assert: element shape color = Color blue. - element announce: (TRMouseLeave new shape: element trachelShape). - self assert: element shape color = element shape defaultColor. -] - -{ #category : #running } -RTTextBuilderTest >> setUp [ - super setUp. - builder := RTTextBuilder new -] - -{ #category : #tests } -RTTextBuilderTest >> testAdditionalInformation [ - | text trigger elHello elWorld | - text := 'hello world'. - trigger := false. - builder wordHook: [ :anElement :anInterval | - anElement model = 'hello' - ifTrue: [ anElement attributeAt: #myValue put: 'value' ] ]. - builder wordInteraction - when: TRMouseClick - do: [ :event | (event element hasAttribute: #myValue) - ifTrue: [ trigger := true ] ]. - builder addText: text. - - elHello := builder view elementFromModel: 'hello'. - elWorld := builder view elementFromModel: 'world'. - - self assert: (elHello hasAttribute: #myValue). - self deny: (elWorld hasAttribute: #myValue). - self assert: (elHello attributeAt: #myValue) = 'value'. - - self deny: trigger. - elHello announce: (TRMouseClick new shape: elHello trachelShape). - self assert: trigger. - - trigger := false. - self deny: trigger. - elWorld announce: (TRMouseClick new shape: elWorld trachelShape). - self deny: trigger. - -] - -{ #category : #tests } -RTTextBuilderTest >> testClickableWord [ - | t element | - t := false. - - builder wordInteraction - when: TRMouseClick do: [ :event | t := true ]. - builder addText: 'hello world'. - self deny: t. - - element := builder view elementFromModel: 'hello'. - element announce: TRMouseClick. - self assert: t -] - -{ #category : #tests } -RTTextBuilderTest >> testExamples [ - RTTextBuilderExamples selectors do: [ :eachSelector | - (RTTextBuilderExamples new perform: eachSelector) build. - ] -] - -{ #category : #tests } -RTTextBuilderTest >> testHookIntervals [ - | text words intervals arr | - words := OrderedCollection new. - intervals := OrderedCollection new. - text := 'my whole text', String cr, 'a b c'. - builder wordHook: [ :anElement :anInterval | - words add: anElement model. - intervals add: anInterval. ]. - builder addText: text. - arr := OrderedCollection new. - arr add: 'my'; add: ' '; add: 'whole'; add: ' '; add: 'text'; add: 'a'; add: ' '; add: 'b'; add: ' '; add: 'c'. - self assert: words asArray equals: arr asArray. - arr := OrderedCollection new. - arr add: (1 to: 2); add: (3 to: 3); add: (4 to: 8); add: (9 to: 9); add: (10 to: 13) ; add: (15 to: 15); add: (16 to: 16); add: (17 to: 17); - add: (18 to: 18); add: (19 to: 19). - self - assert: intervals asArray - equals: arr asArray - -] - -{ #category : #tests } -RTTextBuilderTest >> testOpening [ - - builder open close -] - -{ #category : #tests } -RTTextBuilderTest >> testOpeningOnEmpty [ - self assert: builder view numberOfElements = 0 -] - -{ #category : #tests } -RTTextBuilderTest >> testOpeningOnMultilineText [ - | elements text | - text := 'hello -world'. - builder addText: text. - elements := builder view elements. - self assert: elements size = 3. - self assert: (elements anySatisfy: [ :el | el model = text ]). - self assert: (elements anySatisfy: [ :el | el model = 'hello' ]). - self assert: (elements anySatisfy: [ :el | el model = 'world' ]). -] - -{ #category : #tests } -RTTextBuilderTest >> testOpeningOnMultilineText2 [ - | elements text | - text := 'hello world -hola mundo'. - builder addText: text. - elements := builder view elements. - self assert: elements size = 7. - self assert: (elements anySatisfy: [ :el | el model = text ]). - self assert: (elements anySatisfy: [ :el | el model = 'hello' ]). - self assert: (elements anySatisfy: [ :el | el model = 'world' ]). - self assert: (elements anySatisfy: [ :el | el model = 'hola' ]). - self assert: (elements anySatisfy: [ :el | el model = 'mundo' ]). -] - -{ #category : #tests } -RTTextBuilderTest >> testOpeningOnMultilineText2Position [ - | spaces text | - text := 'hello world -hola mundo'. - builder addText: text. - spaces := builder view elements select: [ :each | each model = ' ' ]. - - self assertModel: 'hello' position: #top equals: 'world' position: #top. - self assertModel: 'hola' position: #top equals: 'mundo' position: #top. - self assertModel: 'hello' position: #left equals: 'hola' position: #left. - self assertModel: 'hello' position: #bottom equals: 'hola' position: #top. - self assertModel: text position: [:rectangle | rectangle topLeft + 5 ] equals: 'hello' position: #topLeft. -] - -{ #category : #tests } -RTTextBuilderTest >> testOpeningOnMultilineText3 [ - | text | - text := (RTTextBuilderTest >> #testOpeningOnMultilineText3) - sourceCode. - builder addText: text. - builder open close -] - -{ #category : #tests } -RTTextBuilderTest >> testOpeningOnText [ - builder addText: 'hello world'. - self assert: builder view numberOfElements = 4. - - builder addText: 'hello world'. - self assert: builder view numberOfElements = 8. -] - -{ #category : #tests } -RTTextBuilderTest >> testOpeningOnText2 [ - | elements text | - text := 'hello world'. - builder addText: text. - elements := builder view elements. - self assert: elements size = 4. - self assert: (elements anySatisfy: [ :el | el model = text ]). - self assert: (elements anySatisfy: [ :el | el model = 'hello' ]). - self assert: (elements anySatisfy: [ :el | el model = ' ' ]). - self assert: (elements anySatisfy: [ :el | el model = 'world' ]). -] - -{ #category : #tests } -RTTextBuilderTest >> testWordHighlight [ - | element text | - builder := RTTextBuilder new. - text := 'hello world'. - builder wordInteraction highlightColored: Color blue. - builder addText: text. - element := builder view elementFromModel: 'hello'. - self assert: element trachelShape color = element shape defaultColor. - element announce: (TRMouseEnter new shape: element trachelShape). - self assert: element trachelShape color = Color blue. - element announce: (TRMouseLeave new shape: element trachelShape). - self assert: element trachelShape color = element shape defaultColor. -] diff --git a/src/Roassal2/RTTextLine.class.st b/src/Roassal2/RTTextLine.class.st deleted file mode 100644 index aaaf9b486..000000000 --- a/src/Roassal2/RTTextLine.class.st +++ /dev/null @@ -1,14 +0,0 @@ -" -A RTTextLine contains RTTextWord instances and represents one line of a text. - -" -Class { - #name : #RTTextLine, - #superclass : #OrderedCollection, - #category : #'Roassal2-Builder-TextBuilder' -} - -{ #category : #enumerating } -RTTextLine >> wordsDo: aBlockClosure [ - ^ self do: aBlockClosure -] diff --git a/src/Roassal2/RTTextLines.class.st b/src/Roassal2/RTTextLines.class.st deleted file mode 100644 index 2acfce1f1..000000000 --- a/src/Roassal2/RTTextLines.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -A RTTextLines contains RTTextLine objects and represents whole text splitted into lines. -" -Class { - #name : #RTTextLines, - #superclass : #OrderedCollection, - #category : #'Roassal2-Builder-TextBuilder' -} - -{ #category : #enumerating } -RTTextLines >> linesDo: aBlockClosure [ - ^ self do: aBlockClosure -] diff --git a/src/Roassal2/RTTextPath.class.st b/src/Roassal2/RTTextPath.class.st deleted file mode 100644 index eaae2ebbd..000000000 --- a/src/Roassal2/RTTextPath.class.st +++ /dev/null @@ -1,86 +0,0 @@ -" -I am a simple class to generate text in roassal with Athens cairo that uses the textPathCommand from roassal -" -Class { - #name : #RTTextPath, - #superclass : #RTLabel, - #instVars : [ - 'outlineWidth', - 'outlineColor' - ], - #category : #'Roassal2-Experimental' -} - -{ #category : #accessing } -RTTextPath >> colorFor: element [ - | res | - res := super colorFor: element. - res isColor ifFalse: [ - res := Color colorFrom: res ]. - ^ res -] - -{ #category : #initialization } -RTTextPath >> initialize [ - super initialize. - outlineWidth := 1. - outlineColor := self defaultColor. -] - -{ #category : #accessing } -RTTextPath >> outlineColor: aValueOrAOneArgBlock [ - self outlineColorElement: [ :e | aValueOrAOneArgBlock rtValue: e model ]. -] - -{ #category : #accessing } -RTTextPath >> outlineColorElement [ - ^ outlineColor -] - -{ #category : #accessing } -RTTextPath >> outlineColorElement: aValueOrAOneArgBlock [ - outlineColor := aValueOrAOneArgBlock -] - -{ #category : #accessing } -RTTextPath >> outlineColorFor: element [ - | res | - res := outlineColor rtValue: element. - res isColor ifFalse: [ res := Color colorFrom: res ]. - ^ res -] - -{ #category : #accessing } -RTTextPath >> outlineWidth [ - ^ outlineWidth -] - -{ #category : #accessing } -RTTextPath >> outlineWidth: aValueOrAOneArgBlock [ - self outlineWidthElement: [ :e | aValueOrAOneArgBlock rtValue: e model ]. -] - -{ #category : #accessing } -RTTextPath >> outlineWidthElement: aValueOrAOneArgBlock [ - outlineWidth := aValueOrAOneArgBlock -] - -{ #category : #accessing } -RTTextPath >> outlineWidthFor: element [ - ^ outlineWidth rtValue: element -] - -{ #category : #'trachel shape production' } -RTTextPath >> trachelShapeForOneLine: anElement [ - | shape | - shape := TRTextPath new. - shape - text: (self textFor: anElement); - color: (self colorFor: anElement); - position: anElement position; - fontSize: (self heightFor: anElement); - fontName: (self fontNameFor: anElement); - outlineColor: (self outlineColorFor: anElement); - outlineWidth: (self outlineWidthFor: anElement). - ^ shape -] diff --git a/src/Roassal2/RTTextTest.class.st b/src/Roassal2/RTTextTest.class.st deleted file mode 100644 index c4377d557..000000000 --- a/src/Roassal2/RTTextTest.class.st +++ /dev/null @@ -1,31 +0,0 @@ -Class { - #name : #RTTextTest, - #superclass : #RTTest, - #category : #'Roassal2-MorphSpecific' -} - -{ #category : #'as yet unclassified' } -RTTextTest >> testHeight [ - | els | - els := RTText new elementsOn: #('hello' 'HELLO'). - self assert: els first height equals: els second height -] - -{ #category : #'as yet unclassified' } -RTTextTest >> testHeightTriple [ - | els | - els := RTText new - elementsOn: - #('hello' 'hello -world -!'). - self assert: els first height * 3 equals: els second height -] - -{ #category : #'as yet unclassified' } -RTTextTest >> testText [ - | els | - els := RTText new elementsOn: #('hello' 'world'). - self assert: els first trachelShape text equals: 'hello'. - self assert: els second trachelShape text equals: 'world' -] diff --git a/src/Roassal2/RTTextTokenizer.class.st b/src/Roassal2/RTTextTokenizer.class.st deleted file mode 100644 index ee5a54610..000000000 --- a/src/Roassal2/RTTextTokenizer.class.st +++ /dev/null @@ -1,83 +0,0 @@ -" -A RTTextTokenizer is responsible for splitting a text into lines and lines into words. - -Instance Variables - wordSeparators: - -wordSeparators - - collection of characters which are considered as word separators - -" -Class { - #name : #RTTextTokenizer, - #superclass : #RTObject, - #instVars : [ - 'wordSeparators' - ], - #category : #'Roassal2-Builder-TextBuilder' -} - -{ #category : #initialization } -RTTextTokenizer >> defaultWordSeparators [ - ^ String - streamContents: [ :stream | - stream - nextPutAll: Character separators; - nextPutAll: '()[]{}.;' ] -] - -{ #category : #initialization } -RTTextTokenizer >> initialize [ - super initialize. - wordSeparators := self defaultWordSeparators. -] - -{ #category : #private } -RTTextTokenizer >> normalizeString: aString [ - "It replaces tab characters by spaces, because tabs are not well handled by Athens." - ^ String streamContents: [ :aStream | - aString do: [ :eachChar | - eachChar = Character tab - ifTrue: [ aStream nextPutAll: ' ' ] - ifFalse: [ aStream nextPut: eachChar ] - ] - ] -] - -{ #category : #parsing } -RTTextTokenizer >> tokenize: aString [ - | lines | - lines := RTTextLines new. - aString - lineIndicesDo: [ :startLine :endLine :endLineWithEOL | - | line lineString wordStrings startWord endWord | - lineString := aString copyFrom: startLine to: endLine. - line := RTTextLine new. - wordStrings := self tokenizeLine: lineString. - startWord := 0. - wordStrings - do: [ :wordString | - | normalizedString interval | - endWord := startWord + wordString size. - normalizedString := self normalizeString: wordString. - interval := startLine + startWord to: startLine + endWord - 1. - line - add: - (RTTextWord new - text: normalizedString; - interval: interval; - yourself). - startWord := endWord ]. - lines add: line ]. - ^ lines -] - -{ #category : #parsing } -RTTextTokenizer >> tokenizeLine: lineString [ - ^ lineString findTokens: self wordSeparators keep: self wordSeparators -] - -{ #category : #parsing } -RTTextTokenizer >> wordSeparators [ - ^ wordSeparators -] diff --git a/src/Roassal2/RTTextWord.class.st b/src/Roassal2/RTTextWord.class.st deleted file mode 100644 index c8429e0b6..000000000 --- a/src/Roassal2/RTTextWord.class.st +++ /dev/null @@ -1,42 +0,0 @@ -" -A RTTextWord represents one word of an original text. - -Instance Variables - interval: - text: - -interval - - interval of the word in the original text - -text - - word, a part of the orignal text -" -Class { - #name : #RTTextWord, - #superclass : #RTObject, - #instVars : [ - 'interval', - 'text' - ], - #category : #'Roassal2-Builder-TextBuilder' -} - -{ #category : #accessing } -RTTextWord >> interval [ - ^ interval -] - -{ #category : #accessing } -RTTextWord >> interval: aCollection [ - interval := aCollection -] - -{ #category : #accessing } -RTTextWord >> text [ - ^ text -] - -{ #category : #accessing } -RTTextWord >> text: aString [ - text := aString -] diff --git a/src/Roassal2/RTTheme.class.st b/src/Roassal2/RTTheme.class.st deleted file mode 100644 index 8c1c9f372..000000000 --- a/src/Roassal2/RTTheme.class.st +++ /dev/null @@ -1,31 +0,0 @@ -" -I hold various default configurations for Roassal such as default colors etc, so each shape doesn't have to set it by itself. -" -Class { - #name : #RTTheme, - #superclass : #RTObject, - #classInstVars : [ - 'current' - ], - #category : #'Roassal2-Core' -} - -{ #category : #accessing } -RTTheme class >> current [ - ^ current ifNil: [ current := self new ] -] - -{ #category : #accessing } -RTTheme >> textColor [ - ^ Color gray -] - -{ #category : #accessing } -RTTheme >> textFont [ - ^ TRLabelShape getFontForSize: self textSize -] - -{ #category : #accessing } -RTTheme >> textSize [ - ^ 10 -] diff --git a/src/Roassal2/RTThresholdFilter.class.st b/src/Roassal2/RTThresholdFilter.class.st deleted file mode 100644 index 83c0e570d..000000000 --- a/src/Roassal2/RTThresholdFilter.class.st +++ /dev/null @@ -1,164 +0,0 @@ -" -Add to the view a filter. -Here are some examples: - --=-=-=-= -b := RTMondrian new. -b shape box size: [ :cls | cls dependentClasses size ]. -b nodes: Collection withAllSubclasses. - -b shape line color: Color blue trans; withShorterDistanceAttachPoint . -b edges connectToAll: #dependentClasses. -b layout grid. -b build. - -b view @ (RTThresholdFilter new ). - -b view --=-=-=-= - - -Another simpler example: - --=-=-=-= -b := RTMondrian new. -b shape box size: #yourself. -b nodes: (1 to: 100). -b layout grid. -b build. -b view @ (RTThresholdFilter new ). -b view --=-=-=-= - - - -" -Class { - #name : #RTThresholdFilter, - #superclass : #RTAbstractInteractionView, - #category : #'Roassal2-Interactions' -} - -{ #category : #ui } -RTThresholdFilter >> askWhichFilterToChoose [ - ^ TRPlatform current - dialogChooseFrom: #('Keep small elements' 'Keep large elements' 'Keep most connected elements' 'Keep least connected elements' 'Keep connected elements') - values: #(#keepSmallElements: #keepLargeElements: #keepMostConnectedElements: #keepLeastConnectedElements: #keepConnectedElements:) -] - -{ #category : #'private - utils' } -RTThresholdFilter >> getElementAreasFrom: aView [ - ^ aView elements - collect: [ :el | el trachelShape extent x * el trachelShape extent y ] -] - -{ #category : #'private - utils' } -RTThresholdFilter >> getElementConnectionsFrom: aView [ - ^ aView elements - collect: [ :el | el connectedEdges size ] -] - -{ #category : #'private - utils' } -RTThresholdFilter >> getGreatestNumberOfConnectionsIn: aView [ - ^ ((self getElementConnectionsFrom: aView) reverseSortedAs: #yourself) - first: (aView elements size * self threshold) asInteger -] - -{ #category : #'private - utils' } -RTThresholdFilter >> getLargestElementAreasIn: aView [ - ^ ((self getElementAreasFrom: aView) reverseSortedAs: #yourself) - first: (aView elements size * self threshold) asInteger -] - -{ #category : #'private - utils' } -RTThresholdFilter >> getLeastNumberOfConnectionsIn: aView [ - ^ ((self getElementConnectionsFrom: aView) sortedAs: #yourself) - first: (aView elements size * self threshold) asInteger -] - -{ #category : #'private - utils' } -RTThresholdFilter >> getSmallestElementAreasIn: aView [ - ^ ((self getElementAreasFrom: aView) sortedAs: #yourself) - first: (aView elements size * self threshold) asInteger -] - -{ #category : #hooks } -RTThresholdFilter >> initializeElement: aView [ - - | filerSelector | - aView addMenu: 'Filter' callback: [ - filerSelector := self askWhichFilterToChoose. - filerSelector ifNotNil: [ - self perform: filerSelector with: aView - ] ] - - -] - -{ #category : #'public - filtering' } -RTThresholdFilter >> keepConnectedElements: aView [ - "Remove all the non-connected elements" - - | irrelevantElements | - irrelevantElements := aView elements select: [ :el | el connectedEdges isEmpty ]. - self removeFrom: aView elements: irrelevantElements -] - -{ #category : #'public - filtering' } -RTThresholdFilter >> keepLargeElements: aView [ - "Keep the top 20% of large elements" - - | largestAreas threshold irrelevantElements | - largestAreas := self getLargestElementAreasIn: aView. - largestAreas ifEmpty: [ ^ self ]. - threshold := largestAreas last. - irrelevantElements := aView elements select: [ :el | el trachelShape extent x * el trachelShape extent y <= threshold ]. - self removeFrom: aView elements: irrelevantElements -] - -{ #category : #'public - filtering' } -RTThresholdFilter >> keepLeastConnectedElements: aView [ - "Keep the top 20% of most connected elements" - - | leastConnections threshold irrelevantElements | - leastConnections := self getLeastNumberOfConnectionsIn: aView. - leastConnections ifEmpty: [ ^ self ]. - threshold := leastConnections last. - irrelevantElements := aView elements select: [ :el | el connectedEdges size >= threshold ]. - self removeFrom: aView elements: irrelevantElements -] - -{ #category : #'public - filtering' } -RTThresholdFilter >> keepMostConnectedElements: aView [ - "Keep the top 20% of most connected elements" - - | mostConnections threshold irrelevantElements | - mostConnections := self getGreatestNumberOfConnectionsIn: aView. - mostConnections ifEmpty: [ ^ self ]. - threshold := mostConnections last. - irrelevantElements := aView elements select: [ :el | el connectedEdges size <= threshold ]. - self removeFrom: aView elements: irrelevantElements -] - -{ #category : #'public - filtering' } -RTThresholdFilter >> keepSmallElements: aView [ - "Keep the top 20% of small elements" - - | largestAreas threshold irrelevantElements | - largestAreas := self getSmallestElementAreasIn: aView. - largestAreas ifEmpty: [ ^ self ]. - threshold := largestAreas last. - irrelevantElements := aView elements select: [ :el | el trachelShape extent x * el trachelShape extent y >= threshold ]. - self removeFrom: aView elements: irrelevantElements -] - -{ #category : #'private - utils' } -RTThresholdFilter >> removeFrom: aView elements: irrelevantElements [ - irrelevantElements do: #remove. - aView signalUpdate -] - -{ #category : #configuration } -RTThresholdFilter >> threshold [ - ^ 0.20 -] diff --git a/src/Roassal2/RTTimeline.class.st b/src/Roassal2/RTTimeline.class.st deleted file mode 100644 index 22598b334..000000000 --- a/src/Roassal2/RTTimeline.class.st +++ /dev/null @@ -1,177 +0,0 @@ -" -Define a time line, a bit like a Gantt diagram. - -Here is an example: --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - | b data | - data := #(#(WP1 0 5) #(WP2 5 8) #(WP3 7 10)). - - b := RTTimeline new. - - s := RTTimelineSet new. - s objects: data. - s lineIdentifier: #first. - s start: #second. - s end: #third. - b add: s. - - b axisX - numberOfLabels: 5; - labelRotation: -45; - labelConversion: [ :v | Date year: 2015 day: v ]. - - d := RTVerticalTickLineDecorator new. - d shape line color: Color white. - b addDecorator: d. - b open --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -" -Class { - #name : #RTTimeline, - #superclass : #RTAbstractGrapher, - #instVars : [ - 'sets', - 'timelineLabel', - 'elements', - 'timelineLabelBuilder' - ], - #category : #'Roassal2-Builder-Timeline' -} - -{ #category : #adding } -RTTimeline >> add: aTimeLineSet [ - sets add: aTimeLineSet -] - -{ #category : #accessing } -RTTimeline >> elements [ - ^ elements -] - -{ #category : #initialization } -RTTimeline >> gapBetweenTimeLines [ - ^ 3 -] - -{ #category : #'accessing - computed' } -RTTimeline >> indexOfLineIdentifier: anIdentifier [ - ^ self lineIdentifiers indexOf: anIdentifier -] - -{ #category : #initialization } -RTTimeline >> initialize [ - super initialize. - sets := OrderedCollection new. - elements := OrderedCollection new. - timelineLabelBuilder := RTBuilder new. - timelineLabelBuilder shape label. - timelineLabel := #yourself. - self axisY noTick; noLabel. -] - -{ #category : #'private - utility' } -RTTimeline >> label: aString on: position [ - "Add a label in the view" - | e | - e := timelineLabelBuilder elementOn: aString. - e translateTo: position. - self view add: e. - ^ e -] - -{ #category : #'private - utility' } -RTTimeline >> labelOffsetBetweenLines [ - ^ 10 -] - -{ #category : #'private - utility' } -RTTimeline >> lineIdentifierLabels [ - ^ self lineIdentifiers collect: [ :i | (timelineLabel rtValue: i) asString ] -] - -{ #category : #'accessing - computed' } -RTTimeline >> lineIdentifiers [ - ^ (sets flatCollect: #lineIdentifiers) removeDuplicates; yourself -] - -{ #category : #'accessing - computed' } -RTTimeline >> numberOfEvents [ - ^ sets inject: 0 into: [ :sum :aSet | sum + aSet numberOfObjects ] -] - -{ #category : #'accessing - computed' } -RTTimeline >> numberOfLines [ - ^ self lineIdentifiers size -] - -{ #category : #'accessing - computed' } -RTTimeline >> numberOfSets [ - ^ sets size -] - -{ #category : #hooks } -RTTimeline >> renderIn: aView [ - self setsComputeMinAndMax. - self defineAxesIfNecessary. - - self renderAllDecoratorsBehind. - elements := OrderedCollection new. - sets do: [ :aSet | - aSet renderIn: aView using: self. - elements addAll: aSet elements ]. - self renderAxis. - self renderAllDecoratorsInFront. - self renderTimeLineLabels. -] - -{ #category : #'private - utility' } -RTTimeline >> renderTimeLineLabels [ - | labels position labelElements halfVerticalStep | - labels := self lineIdentifierLabels. - labelElements := RTGroup new. - labels - doWithIndex: - [ :aLabel :index | - position := self getPixelPositionOf: 0 @ index. - labelElements add: (self label: aLabel on: position) ]. - halfVerticalStep := (self getPixelPositionOf: 0 @ 1) y / -2. - - RTAlignment new - elements: labelElements; - right. - labelElements - translateBy: - (labelElements extent x / 2 + self labelOffsetBetweenLines) negated @ halfVerticalStep -] - -{ #category : #'private - utility' } -RTTimeline >> setsComputeMinAndMax [ - "We are here compute the minimum and maximum of the timeline (X-axis, Y-axis)" - | globalMin globalMax | - self numberOfSets = 0 ifTrue: [ ^ self ]. - - globalMin := (sets collect: #localMin) min. - globalMax := (sets collect: #localMax) max. - - sets do: [ :s | s globalMin: globalMin ]. - sets do: [ :s | s globalMax: globalMax ]. - - self maxX: globalMax. - self maxY: self numberOfLines. - -] - -{ #category : #accessing } -RTTimeline >> timelineLabel [ - ^ timelineLabel -] - -{ #category : #accessing } -RTTimeline >> timelineLabel: symbolOrBlock [ - timelineLabel := symbolOrBlock -] - -{ #category : #accessing } -RTTimeline >> timelineLabelBuilder [ - ^ timelineLabelBuilder -] diff --git a/src/Roassal2/RTTimelineExample.class.st b/src/Roassal2/RTTimelineExample.class.st deleted file mode 100644 index e9f51fb9c..000000000 --- a/src/Roassal2/RTTimelineExample.class.st +++ /dev/null @@ -1,539 +0,0 @@ -" -RTTimelineExample new installTitle: 'SimpleGantt2' - code: - ' -| b s data | -data := #( #(WP1 0 4) #(WP2 4 8) #(WP3 8 12) #(WP4 3 4) #(WP4 7 9) #(WP4 10 12) - - ). -b := RTTimeline new. -s := RTTimelineSet new. -s objects: data. -s lineIdentifier: #first. -s start: #second. -s end: #third. -b add: s. -b axisX - noDecimal; - title: ''Month''; - numberOfLabels: 12. -b build. -^ b view' -" -Class { - #name : #RTTimelineExample, - #superclass : #RTAbstractExample, - #category : #'Roassal2-Builder-Timeline' -} - -{ #category : #sources } -RTTimelineExample >> exampleClassAges [ - - | data b s | - data := (RTShape withAllSubclasses sortedAs: #ageInDaysRounded) select: #hasMethods. - - b := RTTimeline new. - b extent: 400 @ 600. - s := RTTimelineSet new. - s objects: data. - s start: [ :cls | cls computeYoungestMethod ageInDays ]. - s end: [ :cls | cls computeOldestMethod ageInDays ]. - b add: s. - -b build. -^ b view -] - -{ #category : #icons } -RTTimelineExample >> exampleClassAgesIcon [ - ^ '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' -] - -{ #category : #sources } -RTTimelineExample >> exampleColorPerEntry [ - - | data normalizer b s d | - data := #(#(c1 0 5) #(c1 6 8) #(c2 0 5) #(c2 8 10) #(c3 0 10) #(c4 5 10) #(c5 5 8)). - normalizer := RTMultiLinearColorForIdentity new objects: data. - - b := RTTimeline new. - - s := RTTimelineSet new. - s objects: data. - s shape color: normalizer. - s lineIdentifier: #first. - s start: #second. - s end: #third. - b add: s. - - b axisX - numberOfLabels: 5; - labelRotation: -45; - labelConversion: [ :v | Date year: 2015 day: v ]. - - d := RTVerticalTickLineDecorator new. - d shape line color: Color white. - b addDecorator: d. - -b build. -^ b view -] - -{ #category : #icons } -RTTimelineExample >> exampleColorPerEntryIcon [ - ^ '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' -] - -{ #category : #sources } -RTTimelineExample >> exampleColorPerTimeLine [ - - | data normalizer b s d | - data := #(#(c1 0 5) #(c1 6 8) #(c2 0 5) #(c2 8 10) #(c3 0 10) #(c4 5 10) #(c5 5 8)). - normalizer := RTMultiLinearColorForIdentity new objects: #(c1 c2 c3 c4 c5); command: #first. - - b := RTTimeline new. - - s := RTTimelineSet new. - s objects: data. - s shape color: normalizer. - s lineIdentifier: #first. - s start: #second. - s end: #third. - b add: s. - - b axisX - numberOfLabels: 5; - labelRotation: -45; - labelConversion: [ :v | Date year: 2015 day: v ]. - - d := RTVerticalTickLineDecorator new. - d shape line color: Color white. - b addDecorator: d. - -b build. -^ b view -] - -{ #category : #icons } -RTTimelineExample >> exampleColorPerTimeLineIcon [ - ^ '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' -] - -{ #category : #sources } -RTTimelineExample >> exampleGantt01 [ - - | data b s | - data := #(#(c1 0 5) #(c1 6 8) #(c2 0 5) #(c2 8 10) #(c3 0 10) #(c4 5 10) #(c5 5 8)). - - b := RTTimeline new. - - s := RTTimelineSet new. - s objects: data. - s lineIdentifier: #first. - s start: #second. - s end: #third. - b add: s. - - b axisX - numberOfLabels: 5; - labelRotation: -45; - labelConversion: [ :v | Date year: 2015 day: v ]. - - b build. - ^ b view -] - -{ #category : #icons } -RTTimelineExample >> exampleGantt01Icon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAEJUlEQVR4XuWcSUsrQRSF/YOC -CP6N7NyooETciCiCOCLOOKEoDgRBY5wVp2gcQBBxwgF048KF3LzcfvQuPqqfSXeV34EimyNW -5+uquqe6UyXZLF82qYT/FfCB8MUHwgfCFx8IHwhffCB8IHzxgfCB8MUHwhcfCB8IX3wgfCB8 -8YHwgfDFB8IHEo5eX18liot8exPJZH7e7u9FfhWQdDodCZCLC5HOzp+3ZJIPhA+kEDo7O5Pn -52fhA7EAiMI4PT2VqqoqPhAbgHR3d8v5+bksLS3xgfDXED4QPhA+kOhySBi5hT9CithWVvhA -+EC+0/LysvCBWABEc0hfX5/U1NTwgdgARHPI34X0jQ+Ev4bwgfCBuAxkfz8dSR6IqlmfQzY3 -05HcqVE160cIH0hEQG5ubmRtbU34QCzJIfoZj8f5QGzJIZeXl7K4uMgHwl9D+ED4QFzPIbkl -JvT28FCYB0vv78H+Lz+HFPlJX9DEz5+y+EC+L3339vaED8SiHLKwsMAHYksOSSaT2draWv6U -xV9D+ED4QPg5pHA5RN/XKnau4I+QACMk6B3/695c5AOJCMjn56ckEgnhA7EAiJ9DGhsb+UBs -AKI55OjoSFzIIfw1hA+ED4QP5B86PDyUTCZj3IL6Dw4OrPJrsxrI3d2dFNN/e3vrtD90IHw5 -DESzjMv+3d1dsRqIlsOtra3GnWxubpbt7W1n/VNTU1JXV2fnlJXLJN6bjPkeWuVTU1OT51td -XXXSrzks90xITP2hAuno6JCTkxMpLS016pxeiMLr6upy0q8nWIyOjua23lfsmrL0NIeGhgZv -2M7Ozhp1rr+/3zsBoqWlxUm/Qmtra5Pq6mqxblHX10mfnp6kp6fHqHP+8N7Y2HDSv76+7vnK -y8vFuipLK4yysjJRmeaNkZER74wUF/0Kb35+Pu/7zJECubq68uba3t5emZmZMeqc3oF68foj -UZNka5tfK6/29nZJpVLi73RbA0TnT+2Yabm3tbUlx8fHMjc356T/+vpa9LcwAwMDYl0w1GlK -y0P9jbppKal34+TkpJN+PRhBi5b6+nqxLqnv7OzI8PCwNzpM/C8vL57X9E60za9TswbF6elp -sW7rRGt0XdRM6nStuvRTL17nXdf8qsfHR68UzndAW+RAdHugoqLC+GL81O6XiC76NSgWYvEu -KJCPjw+ZmJiQWCwm+Q6Z+S5k+Xejib+ysjKQX/vjTz1BtkNM/X4C10XctJwPdYSMjY1560aQ -vzENWSrd9xofHzf260jVKs/Ur1+waWgdGhrypuWfJPCiAPn6+hJ/4ywLU2fuGW4Y/6ck6HbI -4ODgf2+c8VWEKUtTOP9rswgIX3wgfCB88YHwxQfCB8IXHwgfCF98IHwgfPGB8IHwxQfCFx8I -HwhffCB8IHzxgfCB8MUHAtEfxTYBJq0poOcAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTTimelineExample >> exampleLabelledAndColored [ - -| b s data | -data := #( #(WP1 1 3) #(WP2 3 6) #(WP3 6 9) #(WP4 9 12) #(WP5 1 12) ). -b := RTTimeline new. -s := RTTimelineSet new. -s shape box - color: Color blue trans; - withText: #first; - withTextColor: Color white. -s objects: data. -s lineIdentifier: #first. -s start: #second. -s end: #third. -b add: s. -b axisX - noDecimal; - title: 'Month'; - numberOfLabels: 12. -b build. -^ b view -] - -{ #category : #icons } -RTTimelineExample >> exampleLabelledAndColoredIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAADRUlEQVR4XuXb2UsqcRjG8f7/ -qy5bIYhuu2ghKrKiRSsibHUJhtI2csmCFrGnfE8cmhmtI0fLn/N9wAtfasT5zG95a6bv7Y0f -l9LHPwV8EH74IHwQfvggfBB++CB8EH74IHwQfvgg/PBB+CD88EH4IPzwQfgg/PBB+CD88EH4 -4YPwQfjhg/BB+OGD8EH+I+VyWeHawIAU1RcfhA/CB3Ea5P7+XrlcTolEQnNzc1paWtLt7a26 -CbKxIS0uSjMz0uysNDkpra5CQPr7+7W5ual4PK7Ly0u9vr7Wv/xqV0GGh6VYTJqf/wCx2uio -NDICnLJeXl7En7L4awgfpB2QnR0pqq+eBHE97YyQk5POoPBB+CB8kF/pQzzP09PTk6IEYlvm -lRVpYeGzr1lfdxQk3IccHh7KkKI2QqampNPTz76mfv1pfJw/ZfGnLD4IH6TraacPqf8Zjw/i -6lXOB+GD8EGcAwn3IbbtPT8/l2sgzXqJsbEIgoT7kMfHRx0cHMjFERLuJb76/0ikpqxqtSr+ -lMVfQ/ggroO40EtEDqSdqzyVUs81pHwQPggf5Nf7ENvyXl1d6SdAmvUSQ0N8kG/7kLOzM/3k -CAn3EvWP5oPwpyw+CB/EBZBe7yV6BoRylfNB+CB8EOf7kL29vZbvfrfnOKanP57jsPcTE8Ft -LB+kA31IPp9vGcR6Cf+DNIOD0tYWH4Q/ZfFB+CBOgVB6CSdBbE2xhd//alazjUErtXZ+t1nN -bsjoZK1YLLp9oxw/fBA+yFdJp9M6Pj5uaQin6iu4/709Xr27uxuo2f9Z7Jj+WjabDdwHZtne -3m7YflsqlUqgZsf337JkyWQySiaTgZo9dx/+XKvt7+831C4uLtydsmxBD58EO1Hhk+V53pvN -7/6afbFCodDw5cI1O9bd3V2g9vDwoJubm3+emOvr64afs+M9Pz8Hatb0Hh0dNdSs/wrX1tbW -+GtIN2MjzJriv5A20m3U2mgOI/JBfiE2lZVKJS0vL//BsCk6FouJP0K6nFqtpu/e80H4uyx+ -+CB8EH74IHwQfvgg/PBB+CD88EH4IPzwQfgg/PBB+CD88EH44YPwQfjhg/BB+OGD8EH44YPw -Qfjhg/DDB3E375rcxfOvBJoWAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTTimelineExample >> exampleNestedTimeLine [ - - | b s data | - data := #(#(c1 0 5 1) #(c1 3 8 2) #(c2 0 9 1) #(c2 3 5 2) #(c2 6 8 2)). - - b := RTTimeline new. - - s := RTSubTimelineSet new. - s objects: data. - s lineIdentifier: #first. - s start: #second. - s end: #third. - s level: #fourth. - b add: s. - - b axisX - numberOfLabels: 5; - labelRotation: -45; - labelConversion: [ :v | Date year: 2015 day: v ]. - ^ b -] - -{ #category : #icons } -RTTimelineExample >> exampleNestedTimeLineIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAACyUlEQVR4XuXc2WryQBjG8d7/ -FRTaI2nxOgSpSwSpouK+4XaitrhGfdu8H/SgBctMifON/h+Ys6dhml+MyUzp3ccHPz7ljn8K -+CD88EH4IPzwQfgg/PBB+CD88EH4IPzwQfjhg/BB+OGD8EH44YPwQfjhg/BB+OGD8PN/Qd7e -REjDe5D7exHS4IPwQfggfBA+CB+ED8IH4YPwQfgg7kGWy6XwQTwA6fV6Uq/XZbfbfZvU+7tI -nOPhwX68vLg7njcg7XZbyuWyJJNJ2W634tMtMAjOn6i4j4dbXOSD8EH4IHwQPggfhA/CB+GD -8EEAIE9PIrbj9fX8CYz7eN6D+LDPHYYivl9oqMXFTocPwgfhg/BB+CB8ED4IH4QPwgfhg9wy -yH6/Fz6IByBfe+rpdFou+ab++Gg/EgmR5+f4Rr9/BUsnX3vqiei3P51Ocsu3wOhX5S8u8kH4 -IHwQPggfhA/CB+GD8EH4ICCQv+yBxz2u4sXwXIIgENLAfUJuNXwQKshwOBSb7s/V4lvuOwWR -KJPJRLrdrtj0O9FaOaHvFOR4PIqu/k6nUzHt96NHlzAMvenbzt+m7xxkPp+L7o9oTPvValVs -jn/pvu38bfpOQQqFgtXE9Koi9Z2B6JdZq9WSbDZrPLnxeCy1Wg3TdwqiED+3b3/LarWSSqWC -6TsF0TfUZrNpPDm935L6TkEajYbxo57utedyOdGfIfSdgujkisWi1ZWi91zb75hr7jsD0Y+s -fl/on/2Y9Eej0b/ebDYz6q/Xa6u+PulsNhsx7esLnM3x9YFF32NM+05B9GQdDgfrKyWVSln1 -M5mMcV//v0o+n7c6/mAwMO4vFgsplUri3VqWYmj+ujzAzwU+ITZXLj+eLJ3wwwfhg/DDB+GD -8MMH4YPwwwfhhw/CB+GHD8IH4YcPwgfhhw/CB+GHD8IPH4QPwg8fhA/CDx/kRvMJxf6wAB6O -MLQAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTTimelineExample >> exampleSimpleGantt [ - - | data b s d | - data := #(#(WP1 0 5) #(WP2 5 8) #(WP3 7 10)). - - b := RTTimeline new. - - s := RTTimelineSet new. - s objects: data. - s lineIdentifier: #first. - s start: #second. - s end: #third. - b add: s. - - b axisX - numberOfLabels: 5; - labelRotation: -45; - labelConversion: [ :v | Date year: 2015 day: v ]. - - d := RTVerticalTickLineDecorator new. - d shape line color: Color white. - b addDecorator: d. - -b build. -^ b view -] - -{ #category : #sources } -RTTimelineExample >> exampleSimpleGantt2 [ - -| b s data | -data := #( #(WP1 0 4) #(WP2 4 8) #(WP3 8 12) #(WP4 3 4) #(WP4 7 9) #(WP4 10 12) - - ). -b := RTTimeline new. -s := RTTimelineSet new. -s objects: data. -s lineIdentifier: #first. -s start: #second. -s end: #third. -b add: s. -b axisX - noDecimal; - title: 'Month'; - numberOfLabels: 12. -b build. -^ b view -] - -{ #category : #icons } -RTTimelineExample >> exampleSimpleGantt2Icon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAC5UlEQVR4XuXcy2rqUBSH8b6L -T+jQkb6AIGKhE2fOFMGRU3HiDRHvVxC8X/E2UdHlcTtKoocjNa3J+f4QpKtmR/NLdrpq2o/L -hR8r5YO/C/gg/PBB+CD88EH4IPzwQfgg/PBB+CD88EH44YPwQfjhg/BB+OGD8EH44YPwQfjh -g/DDB+GD8MMH4YPwwwfhg3wjq9VKvrvu15eIcWk0xNTxHi31+v02XlmXD8IH4YPwQfggjzMa -jSSVSonf7xen0ynb7Vbcbjcf5F0gDodDvF6v+Hw+yeVyUqlUxOVyCR+EP2XxQfggfBA+yDtB -rpckMS7zuZg63rPbeGXd/wbkN/Lskc8/Q/ggfBA+CB/k5zv1RCIhwWBQ+CAW6dT3+72Ew2E+ -iFWmrNPpJPwpi38N4YPwQfggP5JnO3B+p26zI9rs8EH4IHwQPggBxNipJ5NJCYVCwgexSKde -rVal3W7zQfhTFh+ED8IH4YNYDsSqnbVtQD4/V6Ye0a/cdWKn8EH4IHwQPggBxNipq8aQD2Kh -Tp1/hvCnLD4IH4QPwgcxK8nkCtFZ2wZkMBjc/u5Quzyq9fv9p2qvrPuo1uv1TK0tl0tr3+TA -Dx+ED/K3NJtNqdVqT53CjevVWvv1+XyWfD6vq43HY1Fjamvq00k1dWhr2Wz2NrUZt7HZbHQ1 -NX65XNbVWq2WFItFXW1+vXCpbc9mM9HW1GOpVLqrPdq2JUDUr96NO0G9WOML7na7FzW/a2vD -4VAWi8XdGzPW1Fjr9VpX2+12Mp1O/7lTJpPJ3fPUeOqGcW0tnU7f7WhVUweN9gBRNfV+69cP -WfhT1psSiUQkEAhIJpO5YcRiMYnH41IoFER9jw/yy1E7v9PpiMfjuWFEo1H1nyz4Z8i7czwe -dQiHw0H4IPyfsvjhg/BB+OGD8MMH4YPwwwfhg/DDB+GD8MMH4YPwwwfhg/DDB+GHD8IH4YcP -wgfhhw/CB+GHD8IH4YcPwg8fxB75A+4RqV/eY8yIAAAAAElFTkSuQmCC' -] - -{ #category : #icons } -RTTimelineExample >> exampleSimpleGanttIcon [ - ^ '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' -] - -{ #category : #sources } -RTTimelineExample >> exampleThresholdLines [ - - | data b s p | - data := #(#(c1 0 5) #(c1 6 8) #(c2 0 5) #(c2 8 10) #(c3 0 10) #(c4 5 10) #(c5 5 8)). - - b := RTTimeline new. - - s := RTTimelineSet new. - s objects: data. - s lineIdentifier: #first. - s start: #second. - s end: #third. - b add: s. - - b axisX - numberOfLabels: 5; - labelRotation: -45; - labelConversion: [ :v | Date year: 2015 day: v ]. - - p := RTHorizontalTimelineDecorator new. - p addLineAboveIdentifier: #c3. - p addLineAboveIdentifier: #c2. - p shape line width: 1; color: (Color red). - b addDecorator: p. - - b build. - ^ b view -] - -{ #category : #icons } -RTTimelineExample >> exampleThresholdLinesIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAEJElEQVR4XuWcWy9rQRzFfTWP -PoBvwCfAi3hweyEuER7QuFekCA4ROQ51bSh1qVRIvbg2LolUjgcVluO/cyQkJzXb6W7/Y61k -0pfVdu/9m/nPrJmmeS8v/NKkPP5HwA+EX/xA+IHwix8IPxB+8QPhB8IvfiD8QPjFD4Rf/ED4 -gfCLHwg/EH7xA+EHwi9+IPxAsqObmxvk4iZvb4FYLDPtWwGJRqM5AXJwALS3Z6bxA+EHklmd -n5+DH4gCII2NjUgmk/D5fPxANACpqKjA8fExamtr+YHwzyH8QPiB8APJTQ7xOrfwjxCPGz8Q -fiDpdXd3B34ginJIfn4+PxAtOeTo6AglJSX8QPjnEH4g/EBsBBL/+QtJX4Cm/Q6GdQMJhaI5 -66m5aMEg+IHwA3FxHsIPREEOqamp4QeiJYecnJygqqqKHwj/HMIPhB+IjUBymUMQ+P+W8rv7 -zsQP/hzi6UnfVxI/PxB+IOmVSCTAD0RRDuno6OAHoiWHbG9vo6CggB8I/xzCD4QfiI1AIpEo -9veRk/av65Hfa2XiczIp6hGSjR7PD4QfSHo9Pj6CH4iiHLKxscEPREsOkdPC4uJifiD8cwg/ -EH4gNgKRrZRYLGbc3Pq3trZU+aWpBnJ2dgYv/aenp1b7sw6EX8qAFBUVGfeYcDiM9xnGNv/D -wwNUAxkYGEBpaSmWl5eNLnRpaQmRSARTU1PW+eVQrqmpCWtrazpL1sLCggOi/XWZ8pk3lUo5 -Ny3vkXBpm1/C8MrKCkZHRzE0NKQPSG9vL2ZnZ9Hc3PzpxQk06VWLi4vw+/3W+UXj4+O4v79H -T0+PvpIlvUVeV1dXjS5OemNdXZ3Tw2z0i0+ATExM4Pn5WReQ6+trZ5i7ec/f0mCt/22uUbnK -OniNwaYXJ2VB/CY1Wqt/eHgYlZWVULfslV+7y7Dt7u42GrayGywTYF9fHy4uLqzzSzmem5tz -Op/ctyog8/Pzzs20tbW5Wt+//8cgm/wCb3d313jpnFUge3t7WF9fx+bmJkzhtbS0YHBw0Eq/ -aGZmBp2dnVCX1OPxOOrr6xEKhYwvToLT2NiYlX68Ss56BKK6rZO39bkMdRO/pFipt8Fg0Dq/ -eN9KmmQTdXtZUqImJychQ9dNajd9WBr9Mor6+/s9Oxf5EpDLy0undlZXV3/47e5niV1e5W// -RJ/5y8rKXPll2SnZx9Tf0NBg/PlXV1fo6upyVo2tra2eHlJ9eYSMjIwYT+Dvl4im3unpaQQC -AWN/YWGhq9VdeXn5hz/oTCfZGJXSLK9ebzW5AvL09ISdnR3XCfw7yGRjNOtADg8Pnfrppuby -y+OSJbWU/7EpnEP4xQ+EHwi/+IHwA+F/BPxA+MUPhB8Iv/iB8APhFz8QfiD84gfCD4Rf/ED4 -xQ+EHwi/+IHwA+EXP5Bvrj8Ikrxg3UeEpgAAAABJRU5ErkJggg==' -] - -{ #category : #accessing } -RTTimelineExample >> label [ - ^ 'Time line' -] diff --git a/src/Roassal2/RTTimelineSet.class.st b/src/Roassal2/RTTimelineSet.class.st deleted file mode 100644 index 031ca05cc..000000000 --- a/src/Roassal2/RTTimelineSet.class.st +++ /dev/null @@ -1,237 +0,0 @@ -" -RTTimelineSet new a set of events for the timeline. -It takes a list of objects, lineIdentifier, start and end. - -Consider the following example: -[ [ [ - data := #(#(c1 0 5) #(c1 6 8) #(c2 0 5) #(c2 8 10) #(c3 0 10) #(c4 5 10) #(c5 5 8)). - - b := RTTimeline new. - - s := RTTimelineSet new. - s objects: data. - s lineIdentifier: #first. - s start: #second. - s end: #third. - b add: s. - - b axisX - numberOfLabels: 5; - labelRotation: -45; - labelConversion: [ :v | Date year: 2015 day: v ]. - b -]]] -" -Class { - #name : #RTTimelineSet, - #superclass : #RTObject, - #instVars : [ - 'shapeBuilder', - 'interactionBuilder', - 'start', - 'end', - 'lineIdentifier', - 'objects', - 'globalMin', - 'globalMax', - 'elements' - ], - #category : #'Roassal2-Builder-Timeline' -} - -{ #category : #configuration } -RTTimelineSet >> defaultBarColor [ - ^ Color blue alpha: 0.4 -] - -{ #category : #accessing } -RTTimelineSet >> elements [ - ^ elements -] - -{ #category : #accessing } -RTTimelineSet >> end [ - ^ end -] - -{ #category : #accessing } -RTTimelineSet >> end: symbolOrBlockOrValue [ - "The argument will be evaluated on each element of objects." - end := symbolOrBlockOrValue -] - -{ #category : #configuration } -RTTimelineSet >> gapBetweenTimeLines [ - ^ 3 -] - -{ #category : #accessing } -RTTimelineSet >> globalMax [ - ^ globalMax -] - -{ #category : #accessing } -RTTimelineSet >> globalMax: anObject [ - globalMax := anObject -] - -{ #category : #accessing } -RTTimelineSet >> globalMin [ - ^ globalMin -] - -{ #category : #accessing } -RTTimelineSet >> globalMin: anObject [ - globalMin := anObject -] - -{ #category : #initialization } -RTTimelineSet >> initialize [ - super initialize. - self initializeShapeBuilder. - self initializeInteractionBuilder. - lineIdentifier := #yourself. - start := #yourself. - end := #yourself. - objects := #() -] - -{ #category : #initialization } -RTTimelineSet >> initializeInteractionBuilder [ - interactionBuilder := RTInteractionBuilder new popup; yourself -] - -{ #category : #initialization } -RTTimelineSet >> initializeShapeBuilder [ - shapeBuilder := RTShapeBuilder new. - shapeBuilder rectangle color: self defaultBarColor -] - -{ #category : #accessing } -RTTimelineSet >> interaction [ - ^ interactionBuilder -] - -{ #category : #accessing } -RTTimelineSet >> lineIdentifier [ - ^ lineIdentifier -] - -{ #category : #accessing } -RTTimelineSet >> lineIdentifier: symbolOrBlockOrValue [ - "The argument will be evaluated on each element of objects." - lineIdentifier := symbolOrBlockOrValue -] - -{ #category : #'accessing - computed' } -RTTimelineSet >> lineIdentifiers [ - ^ objects collect: [ :o | lineIdentifier rtValue: o ] -] - -{ #category : #'accessing - computed' } -RTTimelineSet >> localMax [ - ^ (objects collect: [ :o | end rtValue: o ]) max -] - -{ #category : #'accessing - computed' } -RTTimelineSet >> localMin [ - ^ (objects collect: [ :o | start rtValue: o ]) min -] - -{ #category : #configuration } -RTTimelineSet >> minimumEventWidth [ - "An event cannot be less than 2 pixels-wide" - ^ 2 -] - -{ #category : #'accessing - computed' } -RTTimelineSet >> numberOfIdentifier [ - ^ self identifiers size -] - -{ #category : #'accessing - computed' } -RTTimelineSet >> numberOfLines [ - ^ self lineIdentifiers size -] - -{ #category : #'accessing - computed' } -RTTimelineSet >> numberOfObjects [ - ^ objects size -] - -{ #category : #accessing } -RTTimelineSet >> objects [ - ^ objects -] - -{ #category : #accessing } -RTTimelineSet >> objects: anObject [ - objects := anObject -] - -{ #category : #rendering } -RTTimelineSet >> renderIn: view using: timelineBuilder [ - - | translator | - self setRenderedHeight: timelineBuilder. - - elements := shapeBuilder elementsOn: objects. - interactionBuilder setUpElements: elements. - view addAll: elements. - - "We set the width of the elements" - RTMetricNormalizer new - elements: elements; - normalizeWidth: [ :anObject | (end rtValue: anObject) - (start rtValue: anObject) ] - min: self minimumEventWidth - max: timelineBuilder extent x - minValue: 0 - maxValue: globalMax. - - "For the location" - translator := RTDirectLayoutTranslator new. - elements do: [ :e | - | nx ny | - nx := self setRenderedXFor: e builder: timelineBuilder. - ny := self setRenderedYFor: e builder: timelineBuilder. - translator translateTopLeftOf: e to: nx @ ny ]. - -] - -{ #category : #rendering } -RTTimelineSet >> setRenderedHeight: timelineBuilder [ - shapeBuilder - height: - [ :obj | - timelineBuilder extent y / timelineBuilder numberOfLines - - self gapBetweenTimeLines ] -] - -{ #category : #rendering } -RTTimelineSet >> setRenderedXFor: element builder: timelineBuilder [ - ^ (start rtValue: element model) / globalMax * timelineBuilder extent x -] - -{ #category : #rendering } -RTTimelineSet >> setRenderedYFor: element builder: timelineBuilder [ - | indexY | - indexY := timelineBuilder - indexOfLineIdentifier: (lineIdentifier rtValue: element model). - ^ (timelineBuilder getPixelPositionOf: 0 @ indexY) y -] - -{ #category : #accessing } -RTTimelineSet >> shape [ - ^ shapeBuilder -] - -{ #category : #accessing } -RTTimelineSet >> start [ - ^ start -] - -{ #category : #accessing } -RTTimelineSet >> start: symbolOrBlockOrValue [ - "The argument will be evaluated on each element of objects." - start := symbolOrBlockOrValue -] diff --git a/src/Roassal2/RTTimelineSetTest.class.st b/src/Roassal2/RTTimelineSetTest.class.st deleted file mode 100644 index d96dddfa6..000000000 --- a/src/Roassal2/RTTimelineSetTest.class.st +++ /dev/null @@ -1,48 +0,0 @@ -" -A RTTimeLineSetTest is a test class for testing the behavior of RTTimeLineSet -" -Class { - #name : #RTTimelineSetTest, - #superclass : #RTTest, - #category : #'Roassal2-Builder-Timeline-Tests' -} - -{ #category : #tests } -RTTimelineSetTest >> testBasic [ - - | b f | - b := RTTimeline new. - - f := RTTimelineSet new. - f shape rectangle color: Color green. - f start: [ :v | v ]. - f end: [ :v | v + 1 ]. - f lineIdentifier: #yourself. - f objects: #(1 2 3). - b add: f. - - b build. - - self assert: b numberOfEvents equals: 3 -] - -{ #category : #tests } -RTTimelineSetTest >> testDefault [ - - self assert: RTTimelineSet new numberOfObjects equals: 0 -] - -{ #category : #tests } -RTTimelineSetTest >> testLocalMinAndMax [ - - | f | - f := RTTimelineSet new. - f shape rectangle color: Color green. - f start: [ :v | v ]. - f end: [ :v | v + 1 ]. - f lineIdentifier: #yourself. - f objects: #(1 2 3). - - self assert: f localMin equals: 1. - self assert: f localMax equals: 4. -] diff --git a/src/Roassal2/RTTimelineTest.class.st b/src/Roassal2/RTTimelineTest.class.st deleted file mode 100644 index c82443316..000000000 --- a/src/Roassal2/RTTimelineTest.class.st +++ /dev/null @@ -1,57 +0,0 @@ -Class { - #name : #RTTimelineTest, - #superclass : #RTTest, - #category : #'Roassal2-Builder-Timeline-Tests' -} - -{ #category : #tests } -RTTimelineTest >> testBasic [ - - | b s | - b := RTTimeline new. - - s := RTTimelineSet new. - s objects: #(1 2 3 4). - s end: [ :v | v + 1 ]. - b add: s. - - self assert: b numberOfSets equals: 1. - self assert: b numberOfEvents equals: 4. - self assert: b numberOfLines equals: 4. - - b build. - - self assert: b numberOfSets equals: 1. - self assert: b numberOfEvents equals: 4. - self assert: b numberOfLines equals: 4. -] - -{ #category : #tests } -RTTimelineTest >> testBasicWithDifferentIdentifier02 [ - - | b s | - b := RTTimeline new. - - s := RTTimelineSet new. - s objects: #(1 2 3 4). - s end: [ :v | v + 1 ]. - b add: s. - - s := RTTimelineSet new. - s objects: #(1 2 3 4 5). - s end: [ :v | v + 2 ]. - b add: s. - - b build. - - self assert: b numberOfSets equals: 2. - self assert: b numberOfEvents equals: 9. - self assert: b numberOfLines equals: 5. -] - -{ #category : #tests } -RTTimelineTest >> testDefault [ - - self assert: RTTimeline new numberOfSets equals: 0. - self assert: (RTTimeline new build; numberOfSets) equals: 0 -] diff --git a/src/Roassal2/RTTopLeftBehavior.class.st b/src/Roassal2/RTTopLeftBehavior.class.st deleted file mode 100644 index 71edee6bd..000000000 --- a/src/Roassal2/RTTopLeftBehavior.class.st +++ /dev/null @@ -1,23 +0,0 @@ -Class { - #name : #RTTopLeftBehavior, - #superclass : #RTNestingBehavior, - #category : #'Roassal2-Core' -} - -{ #category : #utility } -RTTopLeftBehavior >> makeElements: elements draggableByTrachelShape: trachelShape [ - | callback | - callback := TRTranslationCallback block: [ :shape :step | - | topLeft | - topLeft := trachelShape encompassingRectangle topLeft. - elements translateTo: topLeft + (elements extent / 2) ]. - trachelShape addCallback: callback -] - -{ #category : #hooks } -RTTopLeftBehavior >> on: backElement setNested: elements [ - "Override this method to express a particular behavior" - self makeElements: elements draggableBy: backElement. - self resize: backElement for: elements - -] diff --git a/src/Roassal2/RTTransitivelyHighlightable.class.st b/src/Roassal2/RTTransitivelyHighlightable.class.st deleted file mode 100644 index 418b5499b..000000000 --- a/src/Roassal2/RTTransitivelyHighlightable.class.st +++ /dev/null @@ -1,38 +0,0 @@ -" -A RTTransitivelyHighlightable highlight all connected elements (either incoming or outgoing). Consider the following example: - - v := RTView new. - v addAll: (RTBox elementsOn: (1 to: 3)). - RTGridLayout on: v elements. - - eb := RTEdgeBuilder new. - eb view: v. - eb useAssociations: { 1 -> 2 . 2 -> 3 }. - - v elements @ RTPopup @ (RTTransitivelyHighlightable new focusOnIncomingElements; color: Color red). - v -" -Class { - #name : #RTTransitivelyHighlightable, - #superclass : #RTHighlightable, - #category : #'Roassal2-Interactions' -} - -{ #category : #actions } -RTTransitivelyHighlightable >> getRelevantElementsFrom: someElements [ - "Return the transively closure of connected elements." - | set | - set := Set new. - someElements do: [ :e | self getRelevantElementsFromSingle: e in: set ]. - ^ set -] - -{ #category : #actions } -RTTransitivelyHighlightable >> getRelevantElementsFromSingle: anElement in: set [ - "Private method" - (set includes: anElement) - ifTrue: [ ^ self ]. - set add: anElement. - (self getConnectedElementsFrom: anElement) - do: [ :e | self getRelevantElementsFromSingle: e in: set ] -] diff --git a/src/Roassal2/RTTransitivelyTHighlightableTest.class.st b/src/Roassal2/RTTransitivelyTHighlightableTest.class.st deleted file mode 100644 index 4a619c863..000000000 --- a/src/Roassal2/RTTransitivelyTHighlightableTest.class.st +++ /dev/null @@ -1,117 +0,0 @@ -Class { - #name : #RTTransitivelyTHighlightableTest, - #superclass : #RTTest, - #category : #'Roassal2-Core-Tests' -} - -{ #category : #tests } -RTTransitivelyTHighlightableTest >> testBasicNoCycle [ - - | v eb element allShapes int | - v := RTView new. - v addAll: (RTBox elementsOn: (1 to: 3)). - RTGridLayout on: v elements. - - eb := RTEdgeBuilder new. - eb view: v. - eb useAssociations: (Array with: 1 -> 2 with: 2 -> 3 ). - - self assert: (v canvas shapes allSatisfy: [ :s | s color = RTShape defaultColor ]). - element := v elementFromModel: 1. - int := RTTransitivelyHighlightable new color: Color red. - element @ int. - element announce: TRMouseEnter new. - - allShapes := v canvas shapes select: [ :s | s class == TRBoxShape ]. - self assert: (allShapes allSatisfy: [ :s | s color = Color red ]). - - self assert: int getConnectedElementBlock notNil. - self assert: (int getConnectedElementBlock rtValue: element) class equals: RTGroup. - self assert: (int getConnectedElementBlock rtValue: element) size equals: 1. - self assert: (int getConnectedElementBlock rtValue: element) first model equals: 2. -] - -{ #category : #tests } -RTTransitivelyTHighlightableTest >> testBasicNoCycleAndIncoming [ - - | v eb element allShapes | - v := RTView new. - v addAll: (RTBox elementsOn: (1 to: 3)). - RTGridLayout on: v elements. - - eb := RTEdgeBuilder new. - eb view: v. - eb useAssociations: (Array with: 1 -> 2 with: 2 -> 3 ). - - self assert: (v canvas shapes allSatisfy: [ :s | s color = RTShape defaultColor ]). - element := v elementFromModel: 3. - element @ (RTTransitivelyHighlightable new focusOnIncomingElements; color: Color red). - element announce: TRMouseEnter new. - - allShapes := v canvas shapes select: [ :s | s class == TRBoxShape ]. - self assert: (allShapes allSatisfy: [ :s | s color = Color red ]). -] - -{ #category : #tests } -RTTransitivelyTHighlightableTest >> testBasicWithCycle [ - - | v eb element allShapes | - v := RTView new. - v addAll: (RTBox elementsOn: (1 to: 3)). - RTGridLayout on: v elements. - - eb := RTEdgeBuilder new. - eb view: v. - eb useAssociations: (Array with: 1 -> 2 with: 2 -> 3 with: 3 -> 1). - - self assert: (v canvas shapes allSatisfy: [ :s | s color = RTShape defaultColor ]). - element := v elementFromModel: 1. - element @ (RTTransitivelyHighlightable new color: Color red). - element announce: TRMouseEnter new. - - allShapes := v canvas shapes select: [ :s | s class == TRBoxShape ]. - self assert: (allShapes allSatisfy: [ :s | s color = Color red ]). -] - -{ #category : #tests } -RTTransitivelyTHighlightableTest >> testBasicWithCycleAndEdgeHighlighting [ - - | v eb element allShapes int | - v := RTView new. - v addAll: (RTBox elementsOn: (1 to: 3)). - RTGridLayout on: v elements. - - eb := RTEdgeBuilder new. - eb view: v. - eb useAssociations: (Array with: 1 -> 2 with: 2 -> 3 with: 3 -> 1). - - self assert: (v canvas shapes allSatisfy: [ :s | s color = RTShape defaultColor ]). - element := v elementFromModel: 1. - int := RTTransitivelyHighlightable new color: Color red. - int edgeColor: Color black. - element @ int. - element announce: TRMouseEnter new. - - self assert: int shouldHighlightEdges. - - allShapes := v canvas shapes select: [ :s | s class == TRBoxShape ]. - self assert: (allShapes allSatisfy: [ :s | s color = Color red ]). -] - -{ #category : #tests } -RTTransitivelyTHighlightableTest >> testShouldNotHighlightEdges [ - - self deny: RTTransitivelyHighlightable new shouldHighlightEdges. - self assert: RTTransitivelyHighlightable new edgeColor isNil. - self assert: RTTransitivelyHighlightable new shouldNotHighlightEdges. - self assert: (RTTransitivelyHighlightable new edgeColor: Color red; shouldHighlightEdges). -] - -{ #category : #tests } -RTTransitivelyTHighlightableTest >> testUnhighlightEdge [ - - | anEdge | - anEdge := RTEdge new. - RTTransitivelyHighlightable new doUnhighlightElement: anEdge. - RTTransitivelyHighlightable new edgeColor: Color red; doUnhighlightElement: anEdge. -] diff --git a/src/Roassal2/RTTreeLayout.class.st b/src/Roassal2/RTTreeLayout.class.st deleted file mode 100644 index 7e41c37cf..000000000 --- a/src/Roassal2/RTTreeLayout.class.st +++ /dev/null @@ -1,14 +0,0 @@ -" -A ROTreeLayout is xxxxxxxxx. - -" -Class { - #name : #RTTreeLayout, - #superclass : #RTAbstractVerticalTreeLayout, - #category : #'Roassal2-Layouts' -} - -{ #category : #'hook-private' } -RTTreeLayout >> computeChildrenFor: aNode [ - ^ self childrenFor: aNode except: alreadyLayoutedNodes -] diff --git a/src/Roassal2/RTTreeLayoutTest.class.st b/src/Roassal2/RTTreeLayoutTest.class.st deleted file mode 100644 index 0071c9f03..000000000 --- a/src/Roassal2/RTTreeLayoutTest.class.st +++ /dev/null @@ -1,266 +0,0 @@ -Class { - #name : #RTTreeLayoutTest, - #superclass : #RTTest, - #category : #'Roassal2-Layouts-Tests' -} - -{ #category : #tests } -RTTreeLayoutTest >> testAddingAttachPoint [ - | v es lineShape l | - v := RTView new. - es := RTBox elementsOn: (1 to: 2). - v addAll: es. - lineShape := RTLine new. - l := lineShape edgeFrom: es first to: es second. - v add: l. - - self assert: lineShape attachPoint class equals: RTCenteredAttachPoint. - RTHorizontalTreeLayout on: es. - self assert: lineShape attachPoint class equals: RTHorizontalAttachPoint. -] - -{ #category : #tests } -RTTreeLayoutTest >> testAddingAttachPointOnVertical [ - | v es lineShape l | - v := RTView new. - es := RTBox elementsOn: (1 to: 2). - v addAll: es. - lineShape := RTLine new. - l := lineShape edgeFrom: es first to: es second. - v add: l. - - self assert: lineShape attachPoint class equals: RTCenteredAttachPoint. - RTTreeLayout on: es. - self assert: lineShape attachPoint class equals: RTVerticalAttachPoint. -] - -{ #category : #tests } -RTTreeLayoutTest >> testAttachPoint [ - | v es edge | - v := RTView new. - es := RTBox new size: 10; elementsOn: #(1 2). - v addAll: es. - edge := RTLine new color: Color red; edgeFrom: es first to: es second. - v add: edge. - - RTTreeLayout on: es. - - self assert: edge trachelShape from equals: 10 @ 15. - self assert: edge trachelShape from ~= es first center. - - self assert: edge trachelShape to equals: 10 @ 35. - self assert: edge trachelShape to ~= es second center. -] - -{ #category : #tests } -RTTreeLayoutTest >> testAttachPointAndArrowedLine [ - | v es edge | - v := RTView new. - es := RTBox new size: 10; elementsOn: #(1 2). - v addAll: es. - edge := RTArrowedLine new color: Color red; edgeFrom: es first to: es second. - v add: edge. - - RTTreeLayout on: es. - - self assert: edge trachelShape from equals: 10 @ 15. - self assert: edge trachelShape from ~= es first center. - - self assert: edge trachelShape to equals: 10 @ 35. - self assert: edge trachelShape to ~= es second center. -] - -{ #category : #tests } -RTTreeLayoutTest >> testAttachPointAndArrowedLineNo [ - | v es edge | - v := RTView new. - es := RTBox new size: 10; elementsOn: #(1 2). - v addAll: es. - edge := RTArrowedLine new color: Color red; edgeFrom: es first to: es second. - v add: edge. - - RTTreeLayout new doNotAttachPoint; on: es. - - self assert: edge trachelShape from equals: es first center. - self assert: edge trachelShape to equals: es second center -] - -{ #category : #tests } -RTTreeLayoutTest >> testAttachPointNo [ - | v es edge | - v := RTView new. - es := RTBox new size: 10; elementsOn: #(1 2). - v addAll: es. - edge := RTLine new color: Color red; edgeFrom: es first to: es second. - v add: edge. - - RTTreeLayout new doNotAttachPoint; on: es. - - self assert: edge trachelShape from equals: es first center. - self assert: edge trachelShape to equals: es second center -] - -{ #category : #tests } -RTTreeLayoutTest >> testBasic [ - | layout | - layout := RTTreeLayout new. - self assert: layout shouldSetDefaultAttachPoint. - layout doNotAttachPoint. - self deny: layout shouldSetDefaultAttachPoint. -] - -{ #category : #'tests - reversed' } -RTTreeLayoutTest >> testHorizontallyReversed [ - | layout v edge lineShape elements | - - v := RTView new. - elements := RTBox elementsOn: (1 to: 3). - v addAll: elements. - lineShape := RTLine new. - edge := lineShape edgeFrom: elements first to: elements second. - v add: edge. - edge := lineShape edgeFrom: elements first to: elements third. - v add: edge. - layout := RTTreeLayout new. - - "NO REVERSE" - layout on: elements. - self assert: elements second position y > elements first position y. - self assert: elements second position x < elements first position x. - self assert: elements second position y equals: elements third position y. - - "REVERSE" - layout horizontallyReverse. - layout on: elements. - self assert: elements second position y > elements first position y. - self assert: elements second position x > elements first position x. - self assert: elements second position y equals: elements third position y. - - "ATTACHPOINT" - self assert: (v edges noneSatisfy: [ :ed | ed shape attachPoint isInverted ]). - self assert: (v edges collect: [ :ed | ed shape attachPoint ]) asSet size equals: 1. -] - -{ #category : #'tests - reversed' } -RTTreeLayoutTest >> testHorizontallyReversedSetting [ - | l | - l := RTTreeLayout new. - self deny: l shouldBeHorizontallyReversed. - self deny: l shouldBeVerticallyReversed. - l horizontallyReverse. - self assert: l shouldBeHorizontallyReversed. - self deny: l shouldBeVerticallyReversed. -] - -{ #category : #tests } -RTTreeLayoutTest >> testNotAddingAttachPoint [ - | v es lineShape l | - v := RTView new. - es := RTBox elementsOn: (1 to: 2). - v addAll: es. - lineShape := RTLine new. - l := lineShape edgeFrom: es first to: es second. - v add: l. - - self assert: lineShape attachPoint class equals: RTCenteredAttachPoint. - RTHorizontalTreeLayout new - doNotAttachPoint; - on: es. - self assert: lineShape attachPoint class equals: RTCenteredAttachPoint -] - -{ #category : #'tests - reversed' } -RTTreeLayoutTest >> testVerticallyReversed [ - | layout v edge lineShape elements | - - v := RTView new. - elements := RTBox elementsOn: (1 to: 3). - v addAll: elements. - lineShape := RTLine new. - edge := lineShape edgeFrom: elements first to: elements second. - v add: edge. - edge := lineShape edgeFrom: elements first to: elements third. - v add: edge. - layout := RTTreeLayout new. - - "NO REVERSE" - layout on: elements. - self assert: elements second position y > elements first position y. - self assert: elements second position x < elements first position x. - self assert: elements second position y equals: elements third position y. - - "REVERSE" - layout verticallyReverse. - layout on: elements. - self assert: elements second position y < elements first position y. - self assert: elements second position x < elements first position x. - self assert: elements second position y equals: elements third position y. - - "ATTACHPOINT" - self assert: (v edges collect: [ :ed | ed shape attachPoint ]) asSet size equals: 1. -] - -{ #category : #'tests - reversed' } -RTTreeLayoutTest >> testVerticallyReversedAndAttachPoint [ - | es v edge | - v := RTView new. - es := RTBox new color: Color blue trans; size: 10; elementsOn: #(1 2). - v addAll: es. - edge := RTArrowedLine new color: Color red trans; edgeFrom: es first to: es second. - v add: edge. - es @ RTDraggable. - - RTTreeLayout new verticallyReverse; on: es. - - self assert: edge trachelShape from equals: es first encompassingRectangle topCenter. - self assert: edge trachelShape from equals: 10 @ 25. - self assert: edge trachelShape to equals: es second encompassingRectangle bottomCenter. - self assert: edge trachelShape to equals: 10 @ 5. -] - -{ #category : #'tests - reversed' } -RTTreeLayoutTest >> testVerticallyReversedAndAttachPointNo [ - | es v edge | - v := RTView new. - es := RTBox new color: Color blue trans; size: 10; elementsOn: #(1 2). - v addAll: es. - edge := RTArrowedLine new color: Color red trans; edgeFrom: es first to: es second. - v add: edge. - es @ RTDraggable. - - RTTreeLayout new doNotAttachPoint; verticallyReverse; on: es. - - self assert: edge trachelShape from equals: es first center. - self assert: edge trachelShape from equals: 10 @ 30. - self assert: edge trachelShape to equals: es second center. - self assert: edge trachelShape to equals: 10 @ 0. -] - -{ #category : #'tests - reversed' } -RTTreeLayoutTest >> testVerticallyReversedAndAttachPointNo02 [ - | es v edge | - v := RTView new. - es := RTBox new color: Color blue trans; size: 10; elementsOn: #(1 2). - v addAll: es. - edge := RTArrowedLine new color: Color red trans; edgeFrom: es first to: es second. - v add: edge. - es @ RTDraggable. - - RTTreeLayout new verticallyReverse; doNotAttachPoint; on: es. - - self assert: edge trachelShape from equals: es first center. - self assert: edge trachelShape from equals: 10 @ 30. - self assert: edge trachelShape to equals: es second center. - self assert: edge trachelShape to equals: 10 @ 0. -] - -{ #category : #'tests - reversed' } -RTTreeLayoutTest >> testVerticallyReversedSetting [ - | l | - l := RTTreeLayout new. - self deny: l shouldBeVerticallyReversed. - self deny: l shouldBeHorizontallyReversed. - l verticallyReverse. - self assert: l shouldBeVerticallyReversed. - self deny: l shouldBeHorizontallyReversed. -] diff --git a/src/Roassal2/RTTreeMapBuilder.class.st b/src/Roassal2/RTTreeMapBuilder.class.st deleted file mode 100644 index 8fd72613b..000000000 --- a/src/Roassal2/RTTreeMapBuilder.class.st +++ /dev/null @@ -1,265 +0,0 @@ -" -I am a class to produces treemap visualizations - -see examples to know how to use me. - -check this to get more info: -http://www.humane-assessment.com/blog/system-nesting-map -" -Class { - #name : #RTTreeMapBuilder, - #superclass : #RTAbstractTreeBuilder, - #instVars : [ - 'extent', - 'rectangle', - 'inset' - ], - #category : #'Roassal2-Builder-TreeMap' -} - -{ #category : #hooks } -RTTreeMapBuilder >> createView [ - ^ super createView @ RTDraggableView. -] - -{ #category : #'default-values' } -RTTreeMapBuilder >> defaultExtent [ - ^ 500@500. -] - -{ #category : #'default-values' } -RTTreeMapBuilder >> defaultInset [ - ^ 4 -] - -{ #category : #customizing } -RTTreeMapBuilder >> depthShadedBorder [ - | normalizer | - normalizer := RTNColorLinearNormalizer - inContext: self elements - withCommand: [ :e | e attributes at: #depth ] - lowColor: Color gray - highColor: Color white darker. - self elements do: [ :e | e trachelShape strokePaint: (normalizer rtValue: e) ]. -] - -{ #category : #accesing } -RTTreeMapBuilder >> extent [ - ^ extent -] - -{ #category : #accesing } -RTTreeMapBuilder >> extent: anObject [ - extent := anObject. - -] - -{ #category : #'layout-utils' } -RTTreeMapBuilder >> getRemainingSpace [ - ^ self rectangle shortestSide -] - -{ #category : #layout } -RTTreeMapBuilder >> highestAspectRatioFor: row remainingSpace: remainingSpace [ - | sum areas minArea maxArea | - areas := row collect: [ :e | e attributes at: #area ]. - sum := areas sum. - maxArea := areas max. - minArea := areas min. - ((remainingSpace <=0) or: [minArea <= 0]) - ifTrue: [ ^ SmallInteger maxVal ] - ifFalse: [ ^ ((((remainingSpace * remainingSpace) * maxArea) / (sum * sum)) max: ((sum * sum) / (minArea * (remainingSpace * remainingSpace)))) ] -] - -{ #category : #initialization } -RTTreeMapBuilder >> initialize [ - super initialize. - self shape rectangle - fillColor: Color white; - borderColor: Color gray. - self interaction popup; draggable. - inset := self defaultInset. - extent := self defaultExtent. -] - -{ #category : #accesing } -RTTreeMapBuilder >> inset [ - ^ inset -] - -{ #category : #accesing } -RTTreeMapBuilder >> inset: anObject [ - inset := anObject -] - -{ #category : #'layout-utils' } -RTTreeMapBuilder >> layoutChildrenOfRow: row [ - | oldCanvas| - oldCanvas := self rectangle veryDeepCopy. - row do: [ :each | | children | - children := each attributes at: self childrenKey ifAbsent: [ #() ]. - self - squarify: children - inRectangle: (RTRectangleTreeMap fromContainerBounds: (each position extent: each extent) withInset: self inset) ]. - - self rectangle: oldCanvas. -] - -{ #category : #layout } -RTTreeMapBuilder >> layoutElements [ - self squarify: rootNodes - inRectangle: (RTRectangleTreeMap origin: 0@0 extent: self extent). - - -] - -{ #category : #'layout-utils' } -RTTreeMapBuilder >> layoutHorizontalRow: row [ - - | container totalWidth areaToLayout height | - container := self rectangle currentSubrectangle. - totalWidth := container width. - areaToLayout := row inject: 0 into: [ :s :e | s + (e attributes at: #area) ]. - height := areaToLayout / totalWidth. - row do: [ :each | each extent: (((each attributes at: #area) / height) @ height) ]. - self translateElementsHorizontally: row in: container. -] - -{ #category : #layout } -RTTreeMapBuilder >> layoutRow: row [ - | container | - container := rectangle currentSubrectangle. - (container width >= container height) - ifTrue: [ self layoutVerticalRow: row ] - ifFalse: [ self layoutHorizontalRow: row ]. - self layoutChildrenOfRow: row. - self prepareNextRectangleAfterRow: row. -] - -{ #category : #'layout-utils' } -RTTreeMapBuilder >> layoutVerticalRow: row [ - | container totalHeight areaToLayout width | - container := rectangle currentSubrectangle. - totalHeight := container height. - areaToLayout := row inject: 0 into: [ :s :e | s+ (e attributes at: #area) ]. - width := areaToLayout /totalHeight. - row do: [ :each | each extent: (width @ ( (each attributes at: #area) / width)) ]. - self translateElementsVertically: row in: container. -] - -{ #category : #accesing } -RTTreeMapBuilder >> popup [ - ^ self interaction popup. -] - -{ #category : #'layout-utils' } -RTTreeMapBuilder >> prepareElementsForLayout: elms inRectangle: rec [ - | elementsArea viewArea area | - elms isEmpty ifTrue: [ ^ elms ]. - elementsArea := elms inject: 0 into: [ :s :e | - s + (weight rtValue: e) ]. - - viewArea := rec width * rec height. - elms do: [ :e| - area := ((viewArea * (weight rtValue: e))/elementsArea) asFloat. - e attributes at: #area put: area. ]. - - ^ elms -] - -{ #category : #'layout-utils' } -RTTreeMapBuilder >> prepareNextRectangleAfterRow: row [ - | nextRect | - nextRect := self rectangle currentSubrectangle computeRemainingSubrectangleFrom: row. - self rectangle addSubrectangle: nextRect -] - -{ #category : #accesing } -RTTreeMapBuilder >> rectangle [ - ^ rectangle. -] - -{ #category : #accesing } -RTTreeMapBuilder >> rectangle: anObject [ - rectangle := anObject -] - -{ #category : #hooks } -RTTreeMapBuilder >> renderIn: aView [ - super renderIn: aView. - self layoutElements. - - -] - -{ #category : #layout } -RTTreeMapBuilder >> squarify: children currentRow: row remainingSpace: remainingSpace [ - | firstElement remainingChildren | - firstElement := children first. - (row isEmpty or: [ - | oldRatio newElementRatio | - oldRatio := self highestAspectRatioFor: row remainingSpace: remainingSpace. - newElementRatio := self highestAspectRatioFor: (row, (Array with: firstElement)) remainingSpace: remainingSpace. - oldRatio >= newElementRatio ] ) - ifTrue: [ - remainingChildren := children allButFirst. - (remainingChildren isEmpty) ifTrue: [ self layoutRow: (row, (Array with: firstElement)) ] - ifFalse: [ - self - squarify: remainingChildren - currentRow: (row, (Array with: firstElement) ) - remainingSpace: remainingSpace ] - ] ifFalse: [ - self layoutRow: row. - self - squarify: children - currentRow: (OrderedCollection new) - remainingSpace: self getRemainingSpace. - ]. - firstElement pushBack -] - -{ #category : #layout } -RTTreeMapBuilder >> squarify: children inRectangle: aTreeRectangle [ - - | elementsToLayout | - children isEmpty ifTrue: [ ^ self ]. - self rectangle: aTreeRectangle. - elementsToLayout := self prepareElementsForLayout: children inRectangle: aTreeRectangle. - self - squarify: elementsToLayout - currentRow: OrderedCollection new - remainingSpace: (aTreeRectangle width min: aTreeRectangle height). -] - -{ #category : #'layout-utils' } -RTTreeMapBuilder >> translateElementsHorizontally: row in: container [ - - | currentPoint | - currentPoint := container origin. - row do: [ :each | - each translateTo: currentPoint + (each extent / 2). - currentPoint := currentPoint translateBy: ((each width) @ 0 ). - ]. -] - -{ #category : #'layout-utils' } -RTTreeMapBuilder >> translateElementsVertically: row in: container [ - | currentPoint | - currentPoint := container origin. - row do: [ :each | - each translateBy: currentPoint+(each extent/2). - currentPoint := currentPoint + (0@(each height)) ] -] - -{ #category : #customizing } -RTTreeMapBuilder >> withShadedFramesFromColor: fromColor toColor: toColor [ - - | normalizer | - - normalizer := RTNColorLinearNormalizer - inContext: self elements - withCommand: [ :e | weight rtValue: e ] - lowColor: fromColor highColor: toColor. - self elements do: [ :e | e trachelShape strokePaint: (normalizer rtValue: e ) ]. -] diff --git a/src/Roassal2/RTTreeMapExample.class.st b/src/Roassal2/RTTreeMapExample.class.st deleted file mode 100644 index 434478692..000000000 --- a/src/Roassal2/RTTreeMapExample.class.st +++ /dev/null @@ -1,331 +0,0 @@ -" -RTTreeMapExample new installTitle: 'FileSystem' - code: - ' -| b color | -b := RTTreeMapBuilder new. -color := RTScale linear - domain: { 0. 12000.}; - range: { Color gray. Color red }. -b shape - color: Color transparent; - borderColor: Color black; - if: [ :f | f isFile ] color: [ :f | color scale: f size sqrt ]. -b - leafWeight: [:f | f size sqrt ]; - explore: FileSystem disk workingDirectory - nesting: #directories - leaves: #files. -b build. -^ b view' - -" -Class { - #name : #RTTreeMapExample, - #superclass : #RTAbstractExample, - #category : #'Roassal2-Builder-TreeMap' -} - -{ #category : #sources } -RTTreeMapExample >> example08 [ - - | b | - b := RTTreeMapBuilder new. - b shape fillColor: Color random. - - b from: (1 to: 5) using: [#()]. - b weight: #yourself. - ^ b -] - -{ #category : #icons } -RTTreeMapExample >> example08Icon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABeCAYAAADVA7GfAAABP0lEQVR4XuXToQ2AMBRFUeZg -BwxLdN5KBsCgqhCdgCn4TToCAkqOuP4lJ2+q1xzVr5e3dH+9wQfxQXwQH8QH8UF8EB/EB/FB -fBAfxAfxQXwIH8QH8UF+A3KcS4yc/xD/IT6ID+KD+CA+iA/ig/ggPogP4oP4ID6ID+KD+CA+ -iA/ig/ggPogP4oP4ID6ID+KD+CA+iA/ig/ggPogP4oP4ID6ID+KD+CA+iA/ig/ggPogP4oP4 -ID6ID/IcZC9rjJz/EP8hPogP4oP4ID6ID+KD+CA+iA/ig/ggPogP4oP4ID6ID+KD+CA+iA/i -g/ggPogP4oP4ID6ID+KD+CA+iA/ig/ggPogP4oP4ID6ID+KD+CA+iA/ig/ggPogP4oP4ID6I -D+KD+CA+iA/iQ/ggPogP4oP4ID6ID+KD+CA+iA/ybg2rSMm5jrJ+mgAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTTreeMapExample >> exampleCollectionSubclasses [ - -| b | -b := RTTreeMapBuilder new. - -b shape - color: Color transparent; - borderColor: Color black; - if: [ :obj | obj isClass ] color: [ :cls | - (Smalltalk includesKey: (cls name, 'Test') asSymbol) ifTrue: [ Color green ] - ifFalse: [ Color gray ] ]. -b - leafWeight: #numberOfLinesOfCode; - explore: Collection - using: #subclasses. -^ b -] - -{ #category : #icons } -RTTreeMapExample >> exampleCollectionSubclassesIcon [ - ^ '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 -zWoI7KMAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTTreeMapExample >> exampleFileSystem [ - -| b color | -b := RTTreeMapBuilder new. -color := RTScale linear - domain: #(0 12000); - range: (Array with: Color gray with: Color red). -b - color: Color transparent; - borderColor: Color black; - leafColor: [ :f | color scale: f size sqrt ]; - leafWeight: [:f | f size sqrt ]; - explore: TRPlatform current workingDirectory - nesting: #directories - leaves: #files. -^ b -] - -{ #category : #icons } -RTTreeMapExample >> exampleFileSystemIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAENElEQVR4XuXd3UtacRzH8ah/ -oesuumjBIoICKyp7cpWsUGdPxrIlY0W1FZF6Vqmpg25alhrUpHIjGkTuoue6iOhmt9Hf0t34 -/nbOYR489jCt0+bpc/HmHM+j+uJwjkqdrFAoROfn5/hlSFlnZ2d0dXVFR0dHaXVwcJD2On9r -Z2fnxum7u7vXpl1cXNDGxgYdHx+L68XXPTw8FId7e3vSsvFp8emJ85Lb398XS/U5JW5bKBaL -SdOE5+b3+8njdjOh1tZWmuGHtxWNRpkIcnJyIq70keOYb3o6pawWS8rLplq9VstmXK5rmU0m -Sp7msNtFkEgkQp/n5igQCFBse5vW19fFYTAYFIfitLU1aXx5eZm+rKxIj5MLh8O0tLQkPfZ6 -vdL4981NaXwhaX/xOI6jr9GoOC48NygQQ0UFWYqK0qo6L4/82dn/LF8affN41A0yZTDQltnM -0mm8vJz9ysnJyM7wQfBB8EFSAuGvBm56I/r7+qQTTmNDg+yEZOJPUL6pKZZqzrEx2Qmss71d -ti/O4ZDmtSWd/OInxYmJCWkcHwQfBB8EHwQfBB8EH+QGEOGrAn1LC7XX1sp6VVND7XV1Yoaq -KmlcyCg8Tlr+rsxarWx9U3X1rfONwryEZeOZhWX/jL/mr7ye9GWvi7/sDA0PqybvyAg+CD4I -Pgg+CD4IPgg+CD4IPgg+CD6IykEe643TazQsyA+VbgYfBB8EHwQfBB8EHwQfBB8EHwQfBB8E -HwQfBB8EHwQfBB8EHwQfBB8EHwQfBB8EHyQNEOFv4biuLvYYGSorH2W74zYb/hFyn0aNRvxf -DPFB8EHwQfBB8EHwQfBB8EHwQfBB8EHwQfBB8EHwQfBB8EHwQfBB8EHwQfBB8EGeBMiszXav -9RYGB1lwZCTt8H/CxQfBB8EHwQfBB8EHwQfBB8EHwQfBB8EHwQfBB8EHwQfBB1ETiL2jg9as -VpZOPv7Lzp8azX/vR0kJ2y4uplOtlkXz82khN5fW1Q4y2tNDoaEhpsb6e3tZr8Ui/u/jF/X1 -9KyggNxuNz4IPgg+CD4IPgg+CD4IPgg+CD4IPkiGg/iam+lYp2Nq7E4Q4TaibRUVD+qtXk/4 -IAqB4B8h+CD4IPggYCAe/srBk3ADL6GX/Bvm53eoZF6XS0y4KRg+CD4IPgg+yD17b7Gwzo4O -WZqyMurjd6pk+CAPOUKamsg/OcmUDB8EH0S9IIm3S53BB8k8kOeFhdTS2Kho+CD4R4g6Qd6Z -TCTcUToxfBD8IwQf5C4QvU5HboeDKRk+CP4Rok6QqYEB5rTbZeGDZNgHQ01pKVm7u5mS4YPg -f1JXJ8gHfuNdnZ2y8EHwj5CnAXJ5eUlzHPegvE4n+bxeWW+sVvrk8Sian9+u0OLi4tMFEe6O -oMZWAwHamp9namwpHGbhUIhWIxG2wL+O2dlZdnp6yn4Dc30v7BmzzPIAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTTreeMapExample >> exampleNumber [ - - | b | - b := RTTreeMapBuilder new. - b shape - if: #even fillColor: Color lightGray; - if: #odd fillColor: Color purple. - b - extent: 400@400; - explore: 1 - using: [ :n | n< 8 ifTrue: [ Array with: n + 1 with: n + 2 ] ifFalse: [ #() ] ]; - weight: [ :n | n ]. - ^ b -] - -{ #category : #icons } -RTTreeMapExample >> exampleNumberIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAFi0lEQVR4XuXd62/bVBgG8Aox -xEWANmkSnygb+8BAExLbYBoglSGmaWhiH4aQNiEhBm3TJl2TtFopo3Rb2uZiO46d2E56+8eY -2N/RD3vx68ojiU8S24kdt8+RHlWesuPL79gnsU9OJojwS5LKBP4hwAfBL/gg+CD4BR8EHwS/ -4IPgg+AXfBB8EF9l8bJC6fd1/ITMs3+evRgpSHpSp729PTIMY6xpNBpj34YgaTab9OeNejQg -hmHSwtm6vYJG4Cxdqo+kpeWnJKpvtaiYMUYSaU0ny7IiCTce0zSjBeHKtzJ1Wr2u+87jaYWe -3tmm9ftVKuUaoTP9iuWAOHX9NlxdbpamZJJXrED74zeMEQvI6vU6aZrmaRELH9WErTr3tewc -xKqsUvqMJnzNwx8qfVubqqo08+r/IP3q4jz6UR3Ygnd2dhyQjXtNqhSUga+vlCX/Z7O9bbGC -8Ir4AGXOapQ61SBl0/77jkH7+/sdmTlhdYDwcvdrOEtTivDf3YhAeFn0WqNhOJfJfvVx2kGU -ojbw9bzO6Ymmr4wFJHPmcCc2fm7igyQBhFfKK2cIfJAEgKTeNSj7heKcKfggCQDZ3d19Ge7k -GWTudKMjIpDs54onYUFEdS3fLGOCtG+srusOSPeGiUBEOxAWRFQXv9HAB8EHwQfBB+kC4R1y -4/Yhqbc7gw8SE0jZ/mTLO9Ge7FWZFi9WPWkHmTtdp9TJhifLNyTa3t7uGRFIr7o4j25rfevj -HBuQyqpOWzOm7xTyhwdxY61M8hMtdNpBNtdKQ9XlhkFK2Yb99r068sQGwitZvlmh3JWqr3Dr -5oOY+9Jujb9YtCnI+j2tZ2vnZD7sBOlXF+evO7W+9XFmTpgOCJ8pg86OMIkVhJe7N4AvTaJO -vR2En6mINl7X9L6XAP6/3SC96uLIhdrAy8rsWwY+CD4IPgg+CD7ImEDWb7U64nS8r5sd4ad8 -+CAxgEiSRDW15iv4IDGAdN86GfQpGx8EHwQfBB8EHwQfBB8EHwQfxA/IoFvb3bfO3YPY82bf -qQE3Al+zPCB9bx4OqI9z+BzmiIM8/LZGWlUPnMe/1ujBp+rQYZDivEHZi+pI8sfdkvO0M4oo -ihItSKvVorXvrbGmMF8LdHaOOzwENTKQ/FcKfkLkwQU1GhAeEJeUljeof0hKFs6rzrGLDKS4 -YNh/9XDX7EvVofsQHnzHnXDuapUssxmqPxMlij7EHW4bOQg/gy6mjZ6PT4W5b5FStjvl82bo -/iP/iUnZy8pLkI27LVq5pg/dL/Fd6ajeZcUGwsvyU2/y1yRhy561d5pBCj+1Qu9gwQboBlFK -taEPXOqkcTxARBvBz0SEH8LwQfBB8EHwQfBB8EHwQZILInp7mzknHjGIDxIxiFSWSZVrvlOV -VAdk8eM6rXynhUr2gu4BeTIn09bv1lA5FiBBnodw+GtvDOIMDfI5gtxz2XvT+8GQ52AJW58b -fBB8EHwQfBB8EHwQfBB8EHwQfBB8kKMBwkN7goZB0pOaM4QnTNIfaF6Qz6pDz1I3+8YRfkBV -WuTbINZY44LUK82RzCrHiWK+xVhAeCW6Xne+sx04ihrqzGqPO2EBTzKT9JlInZlc4wDhiQP+ -vm06IwiDhO8ED3sZ4BkjHBB7Z9dvNUd2eeFveg3bF3kmD5jU4wMJ2qm7t+bxQfBB8EHwQfBB -8EHwQfBB8EHwQfBB8EHwQY4JSP4byfkiSpDgg0QIwstBNxAfBB8EHwQfBB8EHwQfBB8EHwQf -BB8EHwQfBB8EHyQykBCjMPBBIgBJwm/RuiD8OyFJTvaKHC0IzzNS4pGLCchR+ZXozLkoz5CE -t8ikZv69CObLev7v8xf4CZ+Dg4PRguCXeAo+CD4IfsEHwQfBL/gg+CD4BR8EHwS/xF3+A8ir -+VLeOJwSAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTTreeMapExample >> exampleSimple [ - | b labels | - b := RTTreeMapBuilder new. - labels := #('uno' 'dos' 'tres' 'cuatro' 'cinco' 'cent mille'). - b shape fillColor: Color veryLightGray. - b from: labels using: [ #() ]. - b weight: [ :n | n size ]. - b build. - b view elements - @ - (RTLabeled new - color: Color black; - setAsShouldBeInTheFront; - center). - ^ b view -] - -{ #category : #icons } -RTTreeMapExample >> exampleSimpleIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAACoklEQVR4XuXdyWoCQRCA4bya -D+ADeFMPnrwr4i6CuC8oihviqAiiIoiC26NVqAZzkhxMYo/5D2VPe7Cb+ehpmKkpPxzHke12 -ay3m87nV8R/FeDy2NvaHftxuN2ux2+2sjv8olsultbH5IHwQPggfhA/CB+GD8EH4IHwQPggf -hA/CB+GD8EH4IHwQBMh6vZZWqyWdTkf2+z0fxCbI9XqVXC4n5XJZ/H6/5PN5PohNkOPx+HV8 -Op34lyz+HsIH4YPwQfggfBA+CB+ED8IH4YPwQfgg9kHa7bY1kF6vxwYJBoOm1Vs3ejIymYyE -w2GJRCISCAQkm82+DETnkkgkJJVKSa1WM/1n5/C2IOfzWZLJpIRCIVmtVuZkdLtdGQ6Hcrlc -JJ1OvwykUqlIsViUyWQis9nM9PU3npkDfw/h7yF8kG9BHMvZ7/pMhQ/CXyF8ED4IH4QPwgfh -g/BB+CB8ED4IH4QPwgfhg/BB+CB8ED4IH8QWSCwWM22hUDBP7DabDR/EFsj9JN6z3huNhnl0 -yQdxQfb74XDgZ7/z9xA+CB+ED8IH4YPwQfggrgPRJDdFcVMsFgtrY/NXiMuCD8IH4YPwQfgg -fBA+CB+ED3LjZ7/zVwh/hfBB+CB8ED4IH4QPwgfhg/BB+CB8ED4IH4QPwgfhg/BB+CB8ED4I -H+QNQB7d/vf5fKYgGR/kRWN5vV6Jx+PmuNlsmlYB9PUKDY/HY/para7f7/NB/jK0/F61WjXV -37SvlekUZTQaSb1eN++5lEolk704nU7Nd3wQ/h7CB/kXIPc/ddHqm88ubT7IL4Fo5U1to9Go -DAYD854hH4R/yeKD8EH4IHwQPggfhB98ED4IH4QPwgfhg/BB+CB8ED4IH4QPwgfhBx+ED8IH -4YPwQfggP4lPMH/VCMYIisUAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTTreeMapExample >> exampleWithLabelsInside [ -| b label shape | -b := RTTreeMapBuilder new. -b - extent: 800@800; - leafWeight: #linesOfCode; - explore: SequenceableCollection - using: [:cls | | subclasses | - subclasses := cls subclasses sorted: [ :x :y| - x linesOfCode < y linesOfCode ]. - subclasses . - ]; - depthShadedBorder. - -shape := RTLabel new. - - -b build. -b elements - select: [ :el | (el attributes at: #elements) isEmpty ] - thenDo: [ :el | - label := shape elementOn: el model. - label trachelShape scaleBy: el extent x /label extent x. - - (RTConstraint movable: label fix: el) - inner; stick. - b view add: label ]. -^ b view -] - -{ #category : #icons } -RTTreeMapExample >> exampleWithLabelsInsideIcon [ - ^ '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 -AElFTkSuQmCC' -] - -{ #category : #accessing } -RTTreeMapExample >> label [ - ^ 'Tree map' -] diff --git a/src/Roassal2/RTTreeMapExampleTODELETE.class.st b/src/Roassal2/RTTreeMapExampleTODELETE.class.st deleted file mode 100644 index 770e7142c..000000000 --- a/src/Roassal2/RTTreeMapExampleTODELETE.class.st +++ /dev/null @@ -1,137 +0,0 @@ -" -Examples of RTTreeMap -" -Class { - #name : #RTTreeMapExampleTODELETE, - #superclass : #Object, - #category : #'Roassal2-Builder-TreeMap' -} - -{ #category : #examples } -RTTreeMapExampleTODELETE >> example02 [ - " - self new example02 - " - | b | - b := RTTreeMapBuilder new. - b shape - if: [ :cls| Smalltalk includesKey: (cls name, 'Test') asSymbol ] fillColor: Color lightGreen; - if: [ :cls | cls name endsWith: 'Line' ] fillColor: Color purple; - if: [ :cls | cls hasAbstractMethods ] fillColor: Color red. - b popup text: [ :cls | cls name, ' number of methods: ', cls numberOfMethods asString ]. - - b - extent: 400@400; - explore: TRShape using: #subclasses; - weight: [:el | el numberOfMethods == 0 ifTrue: [ 1 ] ifFalse: [ el numberOfMethods ] ]. - ^ b -] - -{ #category : #examples } -RTTreeMapExampleTODELETE >> example03 [ - " - self new example03 - " - | b mt | - b := RTTreeMapBuilder new. - b shape - if: [ :m| Smalltalk includesKey: (m name,'Test') asSymbol ] fillColor: Color lightGreen; - if: [ :m| m hasAbstractMethods ] fillColor: Color red. - - b - extent: 400@400; - weight: 1. - mt := TRPlatform current morphClass. - b explore: mt - using: #subclasses. - b elements do: [ :e | e when: TRMouseClick do: [ :evt | e model inspect ] ]. - ^ b -] - -{ #category : #examples } -RTTreeMapExampleTODELETE >> example04 [ - " - self new example04 - " - | b | - b := RTTreeMapBuilder new. - b - extent: 400@400; - weight: [:n | n ]. - b shape if: [ :n | n even ] fillColor: Color blue; - if: [ :n | n odd ] fillColor: Color lightGray. - - b from: (1 to: 10) - using: [:n | n < 5 ifTrue: [ Array with: n+1 with: n+2 ] ifFalse: [ #() ] ]. - ^ b -] - -{ #category : #examples } -RTTreeMapExampleTODELETE >> example05 [ - " - self new example05 - " - | b normalizer tally methods mt | - b := RTTreeMapBuilder new. - b shape - if: [ :m| Smalltalk includesKey: (m theClass name,'Test') asSymbol ] fillColor: Color lightGreen; - if: [ :m| m theClass hasAbstractMethods ] fillColor: Color red. - mt := TRPlatform current messageTallyClass. - tally := (mt new - spyEvery: 1 - on: [Object browse]; yourself). - methods := tally withDeepCollect: #children. - - normalizer := RTNColorLinearNormalizer inContext: methods withCommand: #tally lowColor: Color gray highColor: Color red. - b shape borderColor: [ :e |normalizer rtValue: e ]; - borderWidth: 2. - - b - extent: 500@500; - weight: [:m | m tally ]. - b explore: tally - using: #children. - b elements do: [ :e | e when: TRMouseClick do: [ :evt | e model inspect ] ]. - ^ b -] - -{ #category : #examples } -RTTreeMapExampleTODELETE >> example06 [ - " - self new example06 - " - | b mt | - b := RTTreeMapBuilder new. - b shape - if: [ :m| Smalltalk includesKey: (m name,'Test') asSymbol ] fillColor: Color lightGreen; - if: [ :m| m hasAbstractMethods ] fillColor: Color red; - borderWidth: 2. - - b - extent: 400@400; - weight: 1. - mt := TRPlatform current morphClass. - b explore: mt - using: #subclasses. - b withShadedFramesFromColor: Color gray toColor: Color red. - b elements do: [ :e | e when: TRMouseClick do: [ :evt | e model inspect ] ]. - - ^ b -] - -{ #category : #examples } -RTTreeMapExampleTODELETE >> example07 [ - " - self new example07 - " - | b mt | - b := RTTreeMapBuilder new. - mt := TRPlatform current morphClass. - b - extent: 400@400; - weight: 1; - explore: mt - using: #subclasses; - depthShadedBorder. - ^ b -] diff --git a/src/Roassal2/RTTreeMapTest.class.st b/src/Roassal2/RTTreeMapTest.class.st deleted file mode 100644 index 9487645cf..000000000 --- a/src/Roassal2/RTTreeMapTest.class.st +++ /dev/null @@ -1,11 +0,0 @@ -Class { - #name : #RTTreeMapTest, - #superclass : #RTTest, - #category : #'Roassal2-Builder-TreeMap' -} - -{ #category : #'as yet unclassified' } -RTTreeMapTest >> testEmpty [ - - RTTreeMapBuilder new build -] diff --git a/src/Roassal2/RTUMLClassBuilder.class.st b/src/Roassal2/RTUMLClassBuilder.class.st deleted file mode 100644 index f91a7b32e..000000000 --- a/src/Roassal2/RTUMLClassBuilder.class.st +++ /dev/null @@ -1,488 +0,0 @@ -" -I am a builder to create UML diagrams in Roassal2, see examples -" -Class { - #name : #RTUMLClassBuilder, - #superclass : #RTBuilder, - #instVars : [ - 'classes', - 'classesGroup', - 'classname', - 'instanceVariables', - 'methodsNames', - 'superclass', - 'methodselector', - 'methodShape', - 'layout', - 'attributeselector', - 'attributeShape', - 'lineShape', - 'boxShape', - 'classNameShape', - 'edgeActions' - ], - #category : #'Roassal2-Builder-UML' -} - -{ #category : #public } -RTUMLClassBuilder >> addObject: object [ - - classes add: object. - -] - -{ #category : #public } -RTUMLClassBuilder >> addObjects: objects [ - objects do: [ :obj | self addObject: obj ]. -] - -{ #category : #public } -RTUMLClassBuilder >> applyLayout [ - self layout layout on: classesGroup elements. -] - -{ #category : #shapes } -RTUMLClassBuilder >> attributeShape [ - ^ attributeShape -] - -{ #category : #shapes } -RTUMLClassBuilder >> attributeShape: aUMLShapeBuilder [ - ^ attributeShape := aUMLShapeBuilder -] - -{ #category : #accessing } -RTUMLClassBuilder >> attributesOf: object [ - ^ self instanceVariables ifNil: [ #() ] ifNotNil: [ :m | m rtValue: object] -] - -{ #category : #accessing } -RTUMLClassBuilder >> attributeselector [ - ^ attributeselector -] - -{ #category : #accessing } -RTUMLClassBuilder >> attributeselector: aSelector [ - attributeselector := aSelector. -] - -{ #category : #shapes } -RTUMLClassBuilder >> boxShape [ - ^ boxShape -] - -{ #category : #shapes } -RTUMLClassBuilder >> boxShape: aShapeBuilder [ - ^ boxShape := aShapeBuilder. -] - -{ #category : #edges } -RTUMLClassBuilder >> buildEdges [ - | bool eb | - bool := lineShape shape attachPoint isInverted. - lineShape verticalAttachPoint. - lineShape shape attachPoint inverted: bool. - eb := RTEdgeBuilder new. - eb view: view. - eb objects: classes. - eb shape shape: lineShape shape. - eb connectFrom: self superclass. - "eb connectFrom: self superclass to: #yourself." - - eb := RTEdgeBuilder new. - eb view: view. - eb elements: view elements. - - self edges do: [ :asso | - eb shape shape: asso key. - asso value value: eb. - ]. -] - -{ #category : #public } -RTUMLClassBuilder >> buildSchema: aView [ - | group box r label e1 e2 l h attributes methods line headerline midline clh | - - classes do: [ :object | - group := RTGroup new. - group add: (self classNameShape elementOn: object). - clh := group encompassingRectangle height. - - label := self attributeShape shape. - (attributes := self attributesOf: object) do: [ :attribute | - | lab | - lab := label elementOn: attribute. - (lab notNil and: [ lab trachelShape text trimmed notEmpty ]) - ifTrue: [ group add: lab ] ]. - RTVerticalLineLayout new gapSize: 0; on: group. - r := group encompassingRectangle. - h := r height. - - label := self methodShape shape. - (methods := self methodsForClass: object) do: [ :method | - | lab | - lab := label elementOn: method. - lab notNil - ifTrue: [ group add: lab ] ]. - - RTVerticalLineLayout new gapSize: 0; on: group. - r := group encompassingRectangle. - group first trachelShape - translateTo: (r center x @ group first trachelShape center y). - box := self boxShape elementOn: object. - - line := [ :p1 :p2 | - e1 := (RTBox new size: 0) elementOn: p1. - e2 := (RTBox new size: 0) elementOn: p2. - e1 trachelShape translateTo: p1. - e2 trachelShape translateTo: p2. - l := RTEdge on: object from: e1 to: e2. - l + (RTLine new color: box trachelShape strokePaint). - group add: e1; add: e2; add: l. ]. - headerline := [ line value: (r left@ clh) value: (r right@ clh) ]. - midline := [ line value: (r left@h) value: (r right@h) ]. - attributes isEmpty - ifTrue: [ - methods isEmpty ifTrue: [ ] - ifFalse: [ headerline value. ] ] - ifFalse: [ - headerline value. - methods isEmpty ifTrue: [ ] - ifFalse: [ midline value ] ]. - - RTNest new on: box nest: group. - - self interaction setUpElement: box. - classesGroup add: box. - aView add: box. - aView addAll: group. - ]. - -] - -{ #category : #accessing } -RTUMLClassBuilder >> classNameFor: obj [ - ^ self classname rtValue: obj -] - -{ #category : #shapes } -RTUMLClassBuilder >> classNameShape [ - ^ classNameShape -] - -{ #category : #shapes } -RTUMLClassBuilder >> classNameShape: aUMLShapeBuilder [ - ^ classNameShape := aUMLShapeBuilder - -] - -{ #category : #accessing } -RTUMLClassBuilder >> classesGroup [ - ^ classesGroup. -] - -{ #category : #accessing } -RTUMLClassBuilder >> classname [ - ^ classname - -] - -{ #category : #accessing } -RTUMLClassBuilder >> classname: aSelector [ - classname := aSelector - -] - -{ #category : #public } -RTUMLClassBuilder >> createView [ - ^ super createView @ RTDraggableView -] - -{ #category : #edges } -RTUMLClassBuilder >> edges [ - edgeActions ifNil: [ edgeActions := OrderedCollection new ]. - ^ edgeActions. -] - -{ #category : #edges } -RTUMLClassBuilder >> edgesDo: aBlock [ - | s | - s := self shape current copy. - self edges add: s->aBlock. -] - -{ #category : #examples } -RTUMLClassBuilder >> example1 [ - " - self new example1 - " - - ^ RTUMLClassBuilder new - addObjects: RTShape withAllSubclasses; - gridLayout; - yourself -] - -{ #category : #examples } -RTUMLClassBuilder >> example2 [ - " - self new example2 - " - - ^ RTUMLClassBuilder new - addObjects: RTShape withAllSubclasses; - treeLayout; - yourself -] - -{ #category : #examples } -RTUMLClassBuilder >> example3 [ - " - self new example3 - " - | objects| - objects := Array - with: (Array with: 'MyClass' with: (Array with: #iv1 with: #iv2) - with: (Array with: #method1 with: #method2 with: #method3 ) ) - with: (Array with: 'MyClass2' with: (Array with: #iv3 with: #iv4) - with: (Array with: #method4 with: #method5 with: #method6 ) ). - - ^ RTUMLClassBuilder new - addObjects: objects; - classname: #first; - instanceVariables: #second; - methodsNames: #third; - methodselector: #yourself; - attributeselector: #yourself; - superclass: nil; - yourself -] - -{ #category : #examples } -RTUMLClassBuilder >> example4 [ - " - self new example4 - " - | b | - b := RTUMLClassBuilder new. - b methodShape label - if: [ :method | method selector beginsWith: 'init' ] color: Color green; - if: [ :method | method selector beginsWith: 'with' ] color: Color red. - - b attributeShape label - if: [ :attribute | attribute beginsWith: 'a' ] color: Color blue. - b addObjects: RTShape withAllSubclasses. - b treeLayout. - ^ b -] - -{ #category : #examples } -RTUMLClassBuilder >> example5 [ - " - self new example5 - " - | objects b | - objects := Array - with: (Array with: 'MyClass' with: (Array with: #iv1 with: #iv2) - with: (Array with: #method1 with: #method2 with: #method3 ) ) - with: (Array with: 'MyClass2' with: (Array with: #iv3 with: #iv4) - with: (Array with: #method4 with: #method5 with: #method6 ) ). - - b := RTUMLClassBuilder new. - b attributeShape label if: [ :a | a = #iv1 ] color: Color red. - b - addObjects: objects; - classname: #first; - instanceVariables: #second; - methodsNames: #third; - methodselector: #yourself; - attributeselector: #yourself; - superclass: nil. - ^ b -] - -{ #category : #examples } -RTUMLClassBuilder >> example6WithColoredProtocols [ - " - self new example6WithColoredProtocols - " - | someClasses allMethodCategories b n | - someClasses := RTShape withAllSubclasses. - allMethodCategories := (someClasses flatCollect: #protocols) asSet asArray. - - b := RTUMLClassBuilder new. - n := RTMultiLinearColorForIdentity new objects: allMethodCategories. - - b methodShape label - color: [ :m | n rtValue: m protocol ]. - - b methodsNames: [ :cls | (cls rtmethods sortedAs: #protocol) ]. - b addObjects: someClasses. - b treeLayout. - - b view setDefaultMenu. - ^ b -] - -{ #category : #private } -RTUMLClassBuilder >> fontSizeOfClassname [ - ^ 12 -] - -{ #category : #private } -RTUMLClassBuilder >> fontSizeOfMembers [ - ^ 10 -] - -{ #category : #'public - configuration' } -RTUMLClassBuilder >> forPharoClasses [ - self classname: #name. - self instanceVariables: #instVarNames. - self methodsNames: #rtmethods. - self superclass: #superclass. - self methodselector: #selector. - self attributeselector: #yourself -] - -{ #category : #'public - configuration' } -RTUMLClassBuilder >> forSelfMadeClasses [ - self classname: #yourself. - self instanceVariables: ''. - self methodsNames: #(). - self superclass: nil. - self methodselector: ''. - self attributeselector: '' -] - -{ #category : #layouts } -RTUMLClassBuilder >> gridLayout [ - ^ self layout grid -] - -{ #category : #initialization } -RTUMLClassBuilder >> initialize [ - super initialize. - classesGroup := RTGroup new. - classes := OrderedCollection new. - self forPharoClasses. - self initializeLayout. - self initializeShapeBuilder. - (self classNameShape: RTShapeBuilder new) label - height: self fontSizeOfClassname; - text: [ :c | self classNameFor: c ]. - self methodShape: RTShapeBuilder new. - self attributeShape: RTShapeBuilder new. - (self boxShape: RTShapeBuilder new) box - color: Color white; - borderColor: Color gray. - self interaction draggable. - self prepare: self methodShape selector: #methodselector. - self prepare: self attributeShape selector: #attributeselector. - -] - -{ #category : #initialization } -RTUMLClassBuilder >> initializeLayout [ - self layout: RTLayoutBuilder new -] - -{ #category : #initialization } -RTUMLClassBuilder >> initializeShapeBuilder [ - (self lineShape: RTShapeBuilder new) orthoVerticalLine -] - -{ #category : #accessing } -RTUMLClassBuilder >> instanceVariables [ - ^ instanceVariables -] - -{ #category : #accessing } -RTUMLClassBuilder >> instanceVariables: aSelector [ - instanceVariables := aSelector -] - -{ #category : #accessing } -RTUMLClassBuilder >> layout [ - layout ifNil: [ layout := RTHorizontalLineLayout new ]. - ^ layout -] - -{ #category : #accessing } -RTUMLClassBuilder >> layout: aRTLayout [ - ^ layout := aRTLayout -] - -{ #category : #edges } -RTUMLClassBuilder >> lineShape [ - ^ lineShape -] - -{ #category : #edges } -RTUMLClassBuilder >> lineShape: aShapeBuilder [ - ^ lineShape := aShapeBuilder -] - -{ #category : #shapes } -RTUMLClassBuilder >> methodShape [ - ^ methodShape -] - -{ #category : #shapes } -RTUMLClassBuilder >> methodShape: aUMLShapeBuilder [ - ^ methodShape := aUMLShapeBuilder -] - -{ #category : #accessing } -RTUMLClassBuilder >> methodsForClass: obj [ - ^ self methodsNames rtValue: obj -] - -{ #category : #accessing } -RTUMLClassBuilder >> methodsNames [ - ^ methodsNames -] - -{ #category : #accessing } -RTUMLClassBuilder >> methodsNames: aSelector [ - methodsNames := aSelector -] - -{ #category : #accessing } -RTUMLClassBuilder >> methodselector [ - ^ methodselector. -] - -{ #category : #accessing } -RTUMLClassBuilder >> methodselector: aSelector [ - methodselector := aSelector. -] - -{ #category : #private } -RTUMLClassBuilder >> prepare: builder selector: selector [ - builder shape class = RTNoShape ifTrue: [ - builder label height: self fontSizeOfMembers ]. - builder text: [ :obj | (self perform: selector) rtValue: obj ]. - -] - -{ #category : #hooks } -RTUMLClassBuilder >> renderIn: aView [ - self buildSchema: aView. - self buildEdges. - self applyLayout. -] - -{ #category : #accessing } -RTUMLClassBuilder >> superclass [ - ^ superclass -] - -{ #category : #accessing } -RTUMLClassBuilder >> superclass: aSelector [ - superclass := aSelector -] - -{ #category : #layouts } -RTUMLClassBuilder >> treeLayout [ - ^ self layout tree -] diff --git a/src/Roassal2/RTUMLClassBuilderTest.class.st b/src/Roassal2/RTUMLClassBuilderTest.class.st deleted file mode 100644 index ccd4de52f..000000000 --- a/src/Roassal2/RTUMLClassBuilderTest.class.st +++ /dev/null @@ -1,39 +0,0 @@ -Class { - #name : #RTUMLClassBuilderTest, - #superclass : #RTTest, - #category : #'Roassal2-Builder-UML' -} - -{ #category : #tests } -RTUMLClassBuilderTest >> testBasic [ - - | b | - b := RTUMLClassBuilder new. - b methodShape label - if: [ :method | method selector beginsWith: 'init' ] color: Color green; - if: [ :method | method selector beginsWith: 'with' ] color: Color red. - - b attributeShape label - if: [ :attribute | attribute beginsWith: 'a' ] color: Color blue. - b addObjects: RTShape withAllSubclasses. - b treeLayout. - - b view setDefaultMenu. - b build. - -] - -{ #category : #tests } -RTUMLClassBuilderTest >> testBasic02 [ - - | classes classNode b | - classes := OrderedCollection new. - - classNode := #('Node'). - - b := RTUMLClassBuilder new. - b forSelfMadeClasses. - b addObjects: (Array with: classNode). - b build - -] diff --git a/src/Roassal2/RTUMLExample.class.st b/src/Roassal2/RTUMLExample.class.st deleted file mode 100644 index 3feb3626a..000000000 --- a/src/Roassal2/RTUMLExample.class.st +++ /dev/null @@ -1,525 +0,0 @@ -" -RTUMLExample new installTitle: 'BlackColor' - code: - ' - -| b | -b := RTUMLClassBuilder new - instanceVariables: #instVarNames; - methodselector: #selector; - methodsNames: #methods; - attributeselector: #yourself. -b attributeShape color: Color black. -b methodShape color: Color black. -b classNameShape color: Color black. -b lineShape color: Color black. -b boxShape borderColor: Color black. - -b addObjects: (TRAbstractArrowHeadShape withAllSubclasses ). -b layout tree. - -b build. -^b view' -" -Class { - #name : #RTUMLExample, - #superclass : #RTAbstractExample, - #category : #'Roassal2-Builder-UML' -} - -{ #category : #sources } -RTUMLExample >> exampleArrowed [ -| b | -b := RTUMLClassBuilder new. - b instanceVariables: #instVarNames. - b methodselector: #selector. - b methodsNames: #rtmethods. - b attributeselector: #yourself. - -b lineShape arrowedLine. - -b addObjects: (TREvent withAllSubclasses ). -b layout tree. - -b build. -^b view -] - -{ #category : #icons } -RTUMLExample >> exampleArrowedIcon [ - ^ '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' -] - -{ #category : #sources } -RTUMLExample >> exampleBlackColor [ - - -| b | -b := RTUMLClassBuilder new - instanceVariables: #instVarNames; - methodselector: #selector; - methodsNames: #rtmethods; - attributeselector: #yourself. -b attributeShape color: Color black. -b methodShape color: Color black. -b classNameShape color: Color black. -b lineShape color: Color black. -b boxShape borderColor: Color black. - -b addObjects: (TRAbstractArrowHeadShape withAllSubclasses ). -b layout tree. - -b build. -^b view -] - -{ #category : #icons } -RTUMLExample >> exampleBlackColorIcon [ - ^ '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 -l78AbpUHhczSvmoAAAAASUVORK5CYII=' -] - -{ #category : #sources } -RTUMLExample >> exampleColoredProtocols [ - | someClasses allMethodCategories b n | - someClasses := RTShape withAllSubclasses. - allMethodCategories := (someClasses flatCollect: #protocols) asSet asArray. - - b := RTUMLClassBuilder new. - n := RTMultiLinearColorForIdentity new objects: allMethodCategories. - - b methodShape - color: [ :m | n rtValue: m protocol ]. - - b methodsNames: [ :cls | (cls rtmethods sortedAs: #protocol) ]. - b addObjects: someClasses. - b treeLayout. - b build. - ^ b view - -] - -{ #category : #icons } -RTUMLExample >> exampleColoredProtocolsIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAEn0lEQVR4XuXd3U/bVhgGcP+b -0W4mVUJccDGpH7dMahHtKipQgUlctaga6kUvqCY2aVrajnWwSDBWBAkhpfkgteN82I6Jk9jx -+84+XVC1LVRNnOUkzyMdJTaBOP7pnNfxSYzCPNrs7+9TeNtolFiG1Go1GuXzKywJSKtl4IOE -IETP6eqmiw3c2QmWnl/dXr0i6hdElowc5PXrb+jRo68+CfL48S7NzcV7Yqyvq/ggUYBsbc2K -HZ9KfUv37n0p7j99eosSiQU6PFy+BFle3qJr1x7QzZsbdOPGd7SwkKD793doZmaNrl9/Qnfv -/jIQiO2W2fFM9snj7rLnt9loF7julthyVbG+4Rnc9huTCzI7G6N4fI7W1mYExu3bX9Dx8Spp -2jrp+pNLkGfP0hSLzQqEWOxrAbG6mhQQDx++oTt3fu4bpNzMiPvhbd3VL29DCNsrC4C27wgc -gBqi09WtLTbQMIIl/eoWvJa+e4hPHSbyxbrgScXyx/l4mYjwj7KGfZSFX0MkAdE0jXK53MAt -m81G8ndomN1vHECiihGMqZPwOhTbtmkSWggyCW1iesikRAnGTe637e7uEv4uHDx/1z+xTwfq -IWdnZ/ggEYFEUtTxQYYAsrKywtPT07yxsYEPIgPI3t4ex+NxTiaT+CD4QxZ+8EEkBsnn8/gg -MoEsLi7ig+APWfjpCbK9vY0PIhPI1NQUPohMIEtLS4Ody8IHGUINUav25Q+02gV+DxkhyObm -ZtBDNJPfV2w+PCtxKl/hk0KFC7qFDzICkPn5+Q81pFZ3+Lxc57LZ4KrlsGk3OVcy8UHwD3vx -QZSLpivuNNsePogMR1mZ8yqHdSSrGp+Ngg8SLUir1WIlrBlhGkFP6fg+Pgh+DcFPF8QsWvgg -MoEcf5/EB5EJhHzCB8GvIfjpCVJX6/ggMoFoRxo+iEwgtm7jg+DXEPz0fqdut/BBpKshvyeL -/PIgy0Zwyj08/Z4uVDlTrHGxUuc/TlU+yup8EsyTiHeSwWOSubJ4PD7IkGpIMZgH2U+rYmdn -ilUB0z3huHNUYOuixWbQ/nyriQmscCIrfDw+yJBqiNfxOfxWne9/WOd6nX/9wj/Xdb+Fhw+C -X9QnGiTzIoMPIhPI+zcqPgj+kIUffJBxAcGfoJIMBH+CSjIQ/Akq/BqCH3yQcSrqBRMfRCYQ -7biED4I/ZOEHH2RcQMqnFXwQmUAqb6v4IPhDFn7wQcYFpJYz8EFkAkn9eIIPgj9k4acnSHgN -Z3wQiUDwP9srGQj+p9/xawh+8EHGCCT7WxYfBL+G4Ad/yMIHwQ8+yCSApH5IsTLI/6DFB4kW -pJatseI4ZXwQ/CELP/8FYuTx50OkAnn36zt8EJlAzHP8Ty7i1xD89AbBnw+RDAT/5KJkIOmf -0vgg+DUEP/gg4wJi4X8LVy6QfKLAiuWq7HgG267Ont/GBxn1kKU1U9zuXLDZLgYwJj4Ifg3B -D/6VHCQFwb+Sg2Qg+FdywK8h+PkkSC6Xo37bwcEBPkiEIJ55OlgPwU+0IK6WCN4YWhb1arZt -S9PC7Wk2m1I113Xpf6shjuNINRzJtj1RblMXxG8Z/Bd88sFNlxjeZgAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTUMLExample >> exampleExternalEdges [ - -| b | -b := RTUMLClassBuilder new. -b - instanceVariables: #instVarNames; - methodselector: #selector; - methodsNames: #(); - attributeselector: #yourself. - -b attributeShape color: Color black. -b methodShape color: Color black. -b classNameShape color: Color black. -b lineShape color: Color black. -b boxShape borderColor: Color black. - -b - addObjects: (Array with: RTView with: TRCanvas); - treeLayout. - -b shape arrowedLine - color: Color black; - withHorizontalAttachPoint. - -b edgesDo: [ :edges| - edges connectFrom: 'trCanvas' to: TRCanvas. ]. -^ b -] - -{ #category : #icons } -RTUMLExample >> exampleExternalEdgesIcon [ - ^ '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 -AElFTkSuQmCC' -] - -{ #category : #sources } -RTUMLExample >> exampleNoInstVar [ - - | b | - b := RTUMLClassBuilder new. - b instanceVariables: #instVarNames. - b methodselector: #selector. - b methodsNames: [ :cls | cls rtmethods sortedAs: #selector ]. - b attributeselector: ''. - - - b addObjects: (RTShape withAllSubclasses). - b layout tree. - b build. - ^ b view. -] - -{ #category : #icons } -RTUMLExample >> exampleNoInstVarIcon [ - ^ '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 -La6t/QsKQ1/eU5eplQAAAABJRU5ErkJggg==' -] - -{ #category : #sources } -RTUMLExample >> exampleSimple [ -| b classes classNode classNumber | -classes := OrderedCollection new. - -classNode := #('Node' nil #()). -classNumber := #('Number' 'Node' #('value: Float') ). -classes add: classNode; add: classNumber. - -b := RTUMLClassBuilder new. -b forSelfMadeClasses. -b addObjects: classes. -b classname: #first. -b attributeselector: #yourself. -b instanceVariables: #third. -b superclass: [ :c | classes detect: [ :cc | cc first = c second ] ifNone: [ nil ] ]. - -b layout tree. -b build. -^ b view - -] - -{ #category : #icons } -RTUMLExample >> exampleSimpleIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAACQElEQVR4XuXYy2oiURRA0fz/ -bzj0B8SJBB2oKMQHKGriK4iSxAeIiqK3+xYEGiQRmo5Krw1CqOikFrcOdR5C8LunHvxb4IP4 -+SA+iJ8P4oP4+SA+iJ8P4oP4+SB+PogP4ueD+CB+PogP4ueD+CB+PoifD+KD+PkgPoifD+KD -+PkgPoifD+Lng/ggfj6ID+Lng/ggfj6ID+Lng/j5ID7IP69QKJzy+fzFjw9ypV5eXk7+Cbkz -kI+Pj7Prk8nEB7kVSLfbDc1mMzw9PYVyuRwajUaoVCohk8mEUqnkg9zihKzX6/D+/h46nU54 -fX0No9EoOSXb7dYHuTbIcrkMw+Hwy48PcsXm8/nZUN/v9yd/qN9Rm83GB/FBfBAf5F5aLBbf -/v+7GXLptz7IX9Tv92/yWx/kwk39/Wj68jtvb28+yLVB4ht6fBGs1WrJG/rz83Pyd7yWzWaT -d5BqtRra7XZYrVY+yDVAxuNxcuPT6XRotVphNpslpyOuTQaDQXh8fEyu+yfEnyEuyOFwOPtO -fHz9uTY5Ho8+yE+CxIXidDoNqVQqWSDudrtQLBaTre/nwI+PrXgtl8slM+Z0OvkgP3lC4la3 -Xq8nMyOu3OM8iYvGz+K2t9frJYM9boPjSfJB/Bnir07+l3wQH8TPB/FB/HwQH8TPB/FB/HwQ -H8TPB/HzQXwQPx/EB/HzQXwQPx/EB/HzQfx8EB/EzwfxQfx8EB/EzwfxQfx8ED8fxAfx80F8 -ED8fxAfx80F8ED8fxM8HufN+Ab7cfG3xZnGjAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTUMLExample >> exampleWithNonClasses [ - -| objects b | - "objects := { - { 'MyClass' . { #iv1 . #iv2 } . { #method1 . #method2 . #method3 }} . - { 'MyClass2' . { #iv2 . #iv2 } . { #method1 . #method2 . #method4 }} }." - objects := Array - with: (Array with: 'MyClass' with: (Array with: #iv1 with: #iv2) - with: (Array with: #method1 with: #method2 with: #method3 ) ) - with: (Array with: 'MyClass2' with: (Array with: #iv3 with: #iv4) - with: (Array with: #method4 with: #method5 with: #method6 ) ). - - b := RTUMLClassBuilder new. - b attributeShape label if: [ :a | a = #iv1 ] color: Color red. - b - addObjects: objects; - classname: #first; - instanceVariables: #second; - methodsNames: #third; - methodselector: #yourself; - attributeselector: #yourself; - superclass: nil. -b build. -^ b view -] - -{ #category : #icons } -RTUMLExample >> exampleWithNonClassesIcon [ - ^ 'iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAEFElEQVR4XuXZR0skaxTG8fl6 -LvwObty4UBDduFFRMSxEUcSMATMGRBAMqBgwx4VgzmGhjoqKC/vceg5478xgO109XO6d+T9Q -tF3dbwv1qzpvvae+mPHzf8oX/iHgg/DDB+GD8MMH4YPwwwfhg/DDB+GD8MMH4YcPwgfhhw/C -B+GHD8IH4YcPwgfhhw/CDx+ED8IPH4QPwg8fhA/CDx+ED8IPH4QfPggfhB8+CB+EHz4IH4Qf -Pggf5L/O3t5eJOx2dHQU0diHh4dIPOO13dzcRPggH+Tw8DD0mImJie9e40kkCB8kJMjd3V3c -ILe3t3yQeEGamppsdnbWtra27OzszKqrq/2z/v5+W1lZsenpabu6urKDg4MPQfLy8iwhIcGm -pqZsbm7OgnJkHR0dtru7a4uLi/4b+j+jo6M2PDzMB/kZSFdXl3V3d9vl5aUVFhZaaWmp7e/v -W29vr9XU1PiBbW5utszMzA9BSkpKLCsry0ZGRnSgbXNz08rLy62zs9P3NTY22sXFhWVkZNj4 -+DgfJNaS9fLyYjMzM3HPIQMDA/w5hD+p/4kgwRwR1Cizr18tqDOhQdrb232e0Lyxvr7OB/ll -kOBAWn29WVub2dJSaJCCggKbnJz0GwP+FcIvWXwQPsi/DLK8vOx/Pz8/W19fX2iQtbU1f9Ut -bazAfJBPQDQZ9/T0BNNIva8fwoIkJSX5/LGxsWGPj498kF8F0Qo9aBTa9fW1ZWdnhwbZ3t52 -DI2NtYzxQT4B0ao81k09qm9B9D7M+Pff4IN8AqLe08nJibc91Mva2dnxV23K8fGxt1GiXSH6 -3vn5uZ2envp8kp6e7vvVnFTLRB0A/hUSAkT9K9X+nJwcbyxqcad9lZWVlpaW5t/Jzc2NCiKI -uro673e9j83Pz/dSqKbk09MTH4R/2/sHgby9vX33Xme4ylYsIBqrdv23Udnig4QsWbW1tb6l -pKTY2NiYpaamWllZmd8Ga32xuroaFUSlTS37xMTEoPvSZsnJyd7fGhwc9FtpIf2Iwgf5BERn -9OvrqzcIh4aGHED79EBJk/XCwoLPCdFA7u/vfWxFRYW37zVW4/SwSnOS1jhLP/TI+CD8OeT3 -ukL0GFfzhM50lSw9QVQHV+sGXTGtra1RQVpaWvy7DQ0Nf5csPe5VS0Yla35+ng8Sz21vUVGR -lxc9etU+vde8ogNfVVX109ve4uJifw6vsfod9cVUsrSG0UqeD8IvWb8fSHDmRoJSFWoLJm4/ -mMHCL/TY9y1YxfNB+OGD8EH44YPwQfjhg/BB+OGD8EH44YPwwwfhg/DDB+GD8MMH4YPwwwfh -g/DDB+GHD8IH4YcPwgfhhw/CB+GHD8IH4YcPwg8fhA/CDx+ED8IPH4QPwg8fhA/CDx+En3/y -F6uitrt8gybeAAAAAElFTkSuQmCC' -] - -{ #category : #sources } -RTUMLExample >> examplecolored [ -| b | -b := RTUMLClassBuilder new. -b methodShape - if: [ :method | method selector beginsWith: 'init' ] color: Color green; - if: [ :method | method selector beginsWith: 'with' ] color: Color red. - -b attributeShape label - if: [ :attribute | attribute beginsWith: 'a' ] color: Color blue. -b addObjects: RTShape withAllSubclasses. -b treeLayout. - -b view setDefaultMenu. -b build. -^ b view -] - -{ #category : #icons } -RTUMLExample >> examplecoloredIcon [ - ^ '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' -] - -{ #category : #accessing } -RTUMLExample >> label [ - ^ 'UML builder' -] diff --git a/src/Roassal2/RTUninterpolate.class.st b/src/Roassal2/RTUninterpolate.class.st deleted file mode 100644 index 39b7b03c3..000000000 --- a/src/Roassal2/RTUninterpolate.class.st +++ /dev/null @@ -1,38 +0,0 @@ -" -I am the basic uninterpolator, my subclasses are - -CAUninterpolateClamp -CAUninterpolateNumber -" -Class { - #name : #RTUninterpolate, - #superclass : #RTObject, - #instVars : [ - 'a', - 'b' - ], - #category : #'Roassal2-Builder-Grapher-Scaling' -} - -{ #category : #interpolating } -RTUninterpolate class >> uninterpolate: aNum1 and: aNum2 [ - ^ self new uninterpolate: aNum1 and: aNum2. - -] - -{ #category : #interpolating } -RTUninterpolate >> uninterpolate: x [ - self subclassResponsibility. -] - -{ #category : #interpolating } -RTUninterpolate >> uninterpolate: aNum1 and: aNum2 [ - a := aNum1. - b := aNum2. - a isNumber - ifFalse: [ - ^ a := b := Float nan. ]. - b := b - a. - b isZero - ifTrue: [ b := 1 / aNum2 ]. -] diff --git a/src/Roassal2/RTUninterpolateClamp.class.st b/src/Roassal2/RTUninterpolateClamp.class.st deleted file mode 100644 index 69baaa9be..000000000 --- a/src/Roassal2/RTUninterpolateClamp.class.st +++ /dev/null @@ -1,14 +0,0 @@ -" -I do not allow a value get off the scale of -0 to 1 -" -Class { - #name : #RTUninterpolateClamp, - #superclass : #RTUninterpolate, - #category : #'Roassal2-Builder-Grapher-Scaling' -} - -{ #category : #interpolating } -RTUninterpolateClamp >> uninterpolate: x [ - ^ 0 max: (1 min: ((x - a ) / b)) -] diff --git a/src/Roassal2/RTUninterpolateNumber.class.st b/src/Roassal2/RTUninterpolateNumber.class.st deleted file mode 100644 index c3df4bb71..000000000 --- a/src/Roassal2/RTUninterpolateNumber.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -I uninterpolate a value of x acording to 2 limits, a and b -" -Class { - #name : #RTUninterpolateNumber, - #superclass : #RTUninterpolate, - #category : #'Roassal2-Builder-Grapher-Scaling' -} - -{ #category : #interpolating } -RTUninterpolateNumber >> uninterpolate: x [ - ^ (x - a )/b -] diff --git a/src/Roassal2/RTUnoptimizedComposer.class.st b/src/Roassal2/RTUnoptimizedComposer.class.st deleted file mode 100644 index f8f63c14a..000000000 --- a/src/Roassal2/RTUnoptimizedComposer.class.st +++ /dev/null @@ -1,24 +0,0 @@ -Class { - #name : #RTUnoptimizedComposer, - #superclass : #RTComposer, - #category : #'Roassal2-Builder-Composer' -} - -{ #category : #'public-layout' } -RTUnoptimizedComposer >> group [ - ^ self group: ('group', (mapping size asString)) asSymbol -] - -{ #category : #'public-layout' } -RTUnoptimizedComposer >> group: aName [ - "Compute the group of added objects" - | group | - group := self newElementsAsGroup. - groups add: group. - mapping at: aName put: group. -] - -{ #category : #accessing } -RTUnoptimizedComposer >> newElementsAsGroup [ - ^ RTGroup withAll: (view elements copyWithoutAll: self allGroupedElements) -] diff --git a/src/Roassal2/RTUnoptimizedComposerTest.class.st b/src/Roassal2/RTUnoptimizedComposerTest.class.st deleted file mode 100644 index c9c1a3235..000000000 --- a/src/Roassal2/RTUnoptimizedComposerTest.class.st +++ /dev/null @@ -1,12 +0,0 @@ -Class { - #name : #RTUnoptimizedComposerTest, - #superclass : #RTComposerTest, - #category : #'Roassal2-Builder-Composer' -} - -{ #category : #running } -RTUnoptimizedComposerTest >> setUp [ - super setUp. - composer := RTComposer new. - view := composer view -] diff --git a/src/Roassal2/RTUpdateRoassalPlugin.class.st b/src/Roassal2/RTUpdateRoassalPlugin.class.st deleted file mode 100644 index 9fcde8900..000000000 --- a/src/Roassal2/RTUpdateRoassalPlugin.class.st +++ /dev/null @@ -1,30 +0,0 @@ -Class { - #name : #RTUpdateRoassalPlugin, - #superclass : #RTAbstractPlugin, - #category : #'Roassal2-Plugins' -} - -{ #category : #hooks } -RTUpdateRoassalPlugin >> description [ - ^ 'Load the last version of Roassal, Trachel, and Roassal2GT' -] - -{ #category : #testing } -RTUpdateRoassalPlugin >> doesItLoadCode [ - ^ false -] - -{ #category : #hooks } -RTUpdateRoassalPlugin >> execute [ - Gofer it - smalltalkhubUser: 'ObjectProfile' project: 'Roassal2'; - package: 'Roassal2'; - package: 'Roassal2GT'; - package: 'Trachel'; - load. -] - -{ #category : #hooks } -RTUpdateRoassalPlugin >> label [ - ^ 'Update Roassal' -] diff --git a/src/Roassal2/RTUsefulScript.class.st b/src/Roassal2/RTUsefulScript.class.st deleted file mode 100644 index f56e35346..000000000 --- a/src/Roassal2/RTUsefulScript.class.st +++ /dev/null @@ -1,45 +0,0 @@ -Class { - #name : #RTUsefulScript, - #superclass : #RTAbstractMenuEntry, - #category : #'Roassal2-Plugins' -} - -{ #category : #'as yet unclassified' } -RTUsefulScript class >> menuCommandOn: aBuilder [ - - ((aBuilder - item: self menuConfigurationSymbol; - order: 10; - parent: #Roassal) icon: RTIcon smallRoassal) - with: [ self allSubclasses - do: [ :cls | - (aBuilder item: - self menuConfigurationEntryTitle , cls new label) - order: 10; - parent: self menuConfigurationSymbol; - label: cls new label; - help: cls new label; - icon: RTIcon smallRoassal; - action: [ cls new run ] ] ] -] - -{ #category : #'as yet unclassified' } -RTUsefulScript class >> menuConfigurationEntryTitle [ - ^ #'Script: ' -] - -{ #category : #'as yet unclassified' } -RTUsefulScript class >> menuConfigurationSymbol [ - ^ #RoassalScript -] - -{ #category : #public } -RTUsefulScript >> configurationMessage [ - ^ 'Do you want to execute the script?' -] - -{ #category : #accessing } -RTUsefulScript >> description [ - "description of the of the plugin" - ^ 'Need to be described' -] diff --git a/src/Roassal2/RTValueLinearNormalizer.class.st b/src/Roassal2/RTValueLinearNormalizer.class.st deleted file mode 100644 index 630da361e..000000000 --- a/src/Roassal2/RTValueLinearNormalizer.class.st +++ /dev/null @@ -1,71 +0,0 @@ -" -A ROValueLinearNormalizer is xxxxxxxxx. - -Instance Variables - maxScale: - minScale: - -maxScale - - xxxxx - -minScale - - xxxxx - -" -Class { - #name : #RTValueLinearNormalizer, - #superclass : #RTNLinearNormalizer, - #instVars : [ - 'minScale', - 'maxScale' - ], - #category : #'Roassal2-ColorNormalizerOBSOLETE' -} - -{ #category : #'initialize-release' } -RTValueLinearNormalizer >> initialize [ - - super initialize. - minScale := 0. - maxScale := 1. -] - -{ #category : #accessing } -RTValueLinearNormalizer >> maxScale [ - - ^maxScale. -] - -{ #category : #accessing } -RTValueLinearNormalizer >> maxScale: aValue [ - - ^maxScale := aValue. -] - -{ #category : #accessing } -RTValueLinearNormalizer >> minScale [ - - ^minScale. -] - -{ #category : #accessing } -RTValueLinearNormalizer >> minScale: aValue [ - - minScale := aValue. -] - -{ #category : #accessing } -RTValueLinearNormalizer >> rtValue: anEntity [ - - "Normalize value based on minimum and maximum value." - | value slope | - value := self command rtValue: anEntity. - slope := self slope: anEntity. - ^ ((value abs * slope) + self maxScale - ((self maximumValue: anEntity) asFloat * slope)) asInteger -] - -{ #category : #'as yet unclassified' } -RTValueLinearNormalizer >> slope: anEntity [ - - ^ (maxScale - minScale) / ((self maximumValue: anEntity) asFloat - (self minimumValue: anEntity )asFloat). -] diff --git a/src/Roassal2/RTVarianceRangeDecorator.class.st b/src/Roassal2/RTVarianceRangeDecorator.class.st deleted file mode 100644 index 85e0dd76c..000000000 --- a/src/Roassal2/RTVarianceRangeDecorator.class.st +++ /dev/null @@ -1,83 +0,0 @@ -Class { - #name : #RTVarianceRangeDecorator, - #superclass : #RTAbstractGrapherDecorator, - #instVars : [ - 'color', - 'x', - 'avg', - 'sd' - ], - #category : #'Roassal2-Builder-Grapher-Decorators' -} - -{ #category : #accessing } -RTVarianceRangeDecorator >> avg: anObject [ - avg := anObject -] - -{ #category : #accessing } -RTVarianceRangeDecorator >> color [ - ^ color -] - -{ #category : #accessing } -RTVarianceRangeDecorator >> color: aColor [ - color := aColor. -] - -{ #category : #drawing } -RTVarianceRangeDecorator >> pathToString: path [ - ^ String - streamContents: [ :s | - path - do: [ :each | - s nextPutAll: each key. - each value - ifNotNil: [ s nextPutAll: ''. - s - nextPutAll: each value x asString , ' ' , each value y asString ] ] ] -] - -{ #category : #drawing } -RTVarianceRangeDecorator >> render [ - | deviationData avgData xData svg k path | - avgData := self datasets first elements collect: [ :e | (avg value: e model) asFloat ]. - deviationData := self datasets first elements collect: [ :e | (sd value: e model) asFloat ]. - xData := self datasets first elements collect: [ :e | (x value: e model) asFloat ]. - path := OrderedCollection new. - k := builder getPixelPositionOf: xData first @ (avgData first + deviationData first). - path add: #M -> k. - (2 to: deviationData size) - do: [ :i | - | p | - p := (avgData at: i) + (deviationData at: i). - k := builder getPixelPositionOf: (xData at: i) @ p. - path add: #L -> k ]. - k := builder getPixelPositionOf: xData last @ (avgData last - deviationData last). - path add: #L -> k. - (1 to: deviationData size - 1) - reverseDo: [ :i | - | p | - p := (avgData at: i) - (deviationData at: i). - k := builder getPixelPositionOf: (xData at: i) @ p. - path add: #L -> k ]. - k := builder getPixelPositionOf: xData first @ (avgData first + deviationData first). - path add: #L -> k. - path add: #Z -> nil. - svg := RTSVGPath new - color: color; - borderWidth: 0; - path: (self pathToString: path); - element. - builder view add: svg -] - -{ #category : #accessing } -RTVarianceRangeDecorator >> sd: anObject [ - sd := anObject -] - -{ #category : #accessing } -RTVarianceRangeDecorator >> x: anObject [ - x := anObject -] diff --git a/src/Roassal2/RTVector.class.st b/src/Roassal2/RTVector.class.st deleted file mode 100644 index d6e41ff02..000000000 --- a/src/Roassal2/RTVector.class.st +++ /dev/null @@ -1,160 +0,0 @@ -" -I am a class to represent a simple vector and their functions -" -Class { - #name : #RTVector, - #superclass : #RTObject, - #instVars : [ - 'x', - 'y', - 'z' - ], - #category : #'Roassal2-Builder-CircularMap' -} - -{ #category : #'instance creation' } -RTVector class >> x: x y: y z: z [ - self new - x: x; - y: y; - z: z. -] - -{ #category : #arithmetic } -RTVector >> - w [ - | inst | - inst := RTVector new. - inst x: x - w x y: y - w y z: z - w z. - ^ inst -] - -{ #category : #computing } -RTVector >> add: rhs [ - x := x + rhs x. - y := y + rhs y. - z := z + rhs z. -] - -{ #category : #computing } -RTVector >> cross: w [ - |inst | - inst := RTVector new. - inst - x: (y * w z) - (z * w y); - y: (z * w x) - (x * w z); - z: (x * w y) - (y * w x). - ^ inst -] - -{ #category : #computing } -RTVector >> dot: w [ - ^ (x * w x) + (y * w y) + (z * w z) -] - -{ #category : #initialization } -RTVector >> initialize [ - super initialize. - x := 0. - y := 0. - z := 0. -] - -{ #category : #computing } -RTVector >> isZero [ - ^ ((x = 0) and: [ y = 0 ]) and: [ z = 0 ]. -] - -{ #category : #computing } -RTVector >> lengthenBy: val [ - | mag | - mag := self magnitude. - self scaleBy: ((mag + val)/ mag) -] - -{ #category : #computing } -RTVector >> magnitude [ - ^ ( (x * x) + (y * y) + (z * z) ) sqrt -] - -{ #category : #computing } -RTVector >> normalize [ - | mag | - mag := self magnitude. - mag = 0 ifTrue: [ ^ mag ]. - x := x / mag. - y := y / mag. - z := z / mag. - ^ mag. -] - -{ #category : #computing } -RTVector >> normalize: length [ - self normalize. - self scaleBy: length -] - -{ #category : #computing } -RTVector >> rotate: axis angle: angle [ - | n | - n := RTVector new x: axis x y: axis y z: axis z. - n normalize. - n scaleBy: (n dot: self). - n add: ((self - n) scaleBy: angle cos ). - n add: ((n cross: self) scaleBy: angle sin). - ^ n. -] - -{ #category : #computing } -RTVector >> scaleBy: factor [ - x := x * factor. - y := y * factor. - z := z * factor. -] - -{ #category : #computing } -RTVector >> shortenBy: val [ - self lengthenBy: val negated -] - -{ #category : #accessing } -RTVector >> x [ - ^ x -] - -{ #category : #accessing } -RTVector >> x: cx [ - x := cx. -] - -{ #category : #accessing } -RTVector >> x: cx y: cy [ - x := cx. - y := cy -] - -{ #category : #accessing } -RTVector >> x: cx y: cy z: cz [ - x := cx. - y := cy. - z := cz -] - -{ #category : #accessing } -RTVector >> y [ - ^ y -] - -{ #category : #accessing } -RTVector >> y: cy [ - y := cy -] - -{ #category : #accessing } -RTVector >> z [ - ^ z -] - -{ #category : #accessing } -RTVector >> z: cz [ - z := cz -] diff --git a/src/Roassal2/RTVerticalAllValuesDecorator.class.st b/src/Roassal2/RTVerticalAllValuesDecorator.class.st deleted file mode 100644 index 42d89600a..000000000 --- a/src/Roassal2/RTVerticalAllValuesDecorator.class.st +++ /dev/null @@ -1,29 +0,0 @@ -" -=-=-=-=- -| b ds deco labels | -b := RTGrapher new. - -ds := RTData new. -ds points: #(2 3 4 5 6). -b add: ds. - -deco := RTVerticalAllValuesDecorator new. -b addDecorator: deco. - -b axisX noTick; noLabel. -b axisY noTick; noLabel. -b -=-=-=-=- -" -Class { - #name : #RTVerticalAllValuesDecorator, - #superclass : #RTAbstractVerticalValuesDecorator, - #category : #'Roassal2-Builder-Grapher-Decorators' -} - -{ #category : #drawing } -RTVerticalAllValuesDecorator >> render [ - self addAll: self datasetValues asSet. - super render. - -] diff --git a/src/Roassal2/RTVerticalAttachPoint.class.st b/src/Roassal2/RTVerticalAttachPoint.class.st deleted file mode 100644 index e4439593b..000000000 --- a/src/Roassal2/RTVerticalAttachPoint.class.st +++ /dev/null @@ -1,37 +0,0 @@ -" -Vertical attach points between elements when drawing lines. Useful for (vertical) tree layout - --=-=-= -v := RTView new. - -e1 := (RTBox new size: 50) elementOn: 1. -e2 := (RTEllipse new size: 50) elementOn: 2. -v add: e1; add: e2. -e2 translateBy: 30 @ 60. - -e1 @ RTDraggable. -e2 @ RTDraggable. - -s := RTArrowedLine new color: Color black. -s attachPoint: RTVerticalttachPoint new. -l := s edgeFrom: e1 to: e2. -v add: l. - -v --=-=-= -" -Class { - #name : #RTVerticalAttachPoint, - #superclass : #RTAttachPoint, - #category : #'Roassal2-AttachPoint' -} - -{ #category : #'public - hooks' } -RTVerticalAttachPoint >> basicEndingPointOf: aRTEdge [ - ^ aRTEdge to encompassingRectangle topCenter -] - -{ #category : #'public - hooks' } -RTVerticalAttachPoint >> basicStartingPointOf: aRTEdge [ - ^ aRTEdge from encompassingRectangle bottomCenter -] diff --git a/src/Roassal2/RTVerticalDraggableView.class.st b/src/Roassal2/RTVerticalDraggableView.class.st deleted file mode 100644 index 4eb3c009b..000000000 --- a/src/Roassal2/RTVerticalDraggableView.class.st +++ /dev/null @@ -1,16 +0,0 @@ -" -I am an interaction to translate the view as my parent. -The difference is that I only allow horizontal translations -" -Class { - #name : #RTVerticalDraggableView, - #superclass : #RTConstrainedDraggableView, - #category : #'Roassal2-Interactions' -} - -{ #category : #initialize } -RTVerticalDraggableView >> initialize [ - - super initialize. - self constraint: [ :aView :point | 0 @ point y ] -] diff --git a/src/Roassal2/RTVerticalLineDecorator.class.st b/src/Roassal2/RTVerticalLineDecorator.class.st deleted file mode 100644 index 4e203907a..000000000 --- a/src/Roassal2/RTVerticalLineDecorator.class.st +++ /dev/null @@ -1,44 +0,0 @@ -" -Add vertical lines for some values - --=-=-=-=-= - | b ds p | - b := RTGrapher new. - - ds := RTDataSet new. - ds points: #( 0 1 2 10). - - b add: ds. - - b minY: -3.33. - - p := RTHorizontalLineDecorator new. - p add: 5; add: 7; add: 3.34. - p shape line color: (Color red alpha: 0.3). - b addDecorator: p. - - p := RTVerticalLineDecorator new. - p add: 5. - p shape line color: (Color blue alpha: 0.3). - b addDecorator: p. - - b build. - ^ b view --=-=-=-=-= -" -Class { - #name : #RTVerticalLineDecorator, - #superclass : #RTAbstractLineDecorator, - #category : #'Roassal2-Builder-Grapher-Decorators' -} - -{ #category : #drawing } -RTVerticalLineDecorator >> render [ - | from to | - values do: [ :aValue | - from := builder getPixelPositionOf: aValue @ builder minY. - to := builder getPixelPositionOf: aValue @ builder maxY. - self lineFrom: from to: to ] - - -] diff --git a/src/Roassal2/RTVerticalLineLayout.class.st b/src/Roassal2/RTVerticalLineLayout.class.st deleted file mode 100644 index c02cd6306..000000000 --- a/src/Roassal2/RTVerticalLineLayout.class.st +++ /dev/null @@ -1,100 +0,0 @@ -" -A RTVerticalLineLayout locates all the elements vertically -" -Class { - #name : #RTVerticalLineLayout, - #superclass : #RTAbstractLineLayout, - #category : #'Roassal2-Layouts' -} - -{ #category : #hook } -RTVerticalLineLayout >> deltaFor: aNodeFigure [ - - | delta | - delta := 0. - self alignment == #right ifTrue: [delta := aNodeFigure width]. - self alignment == #center ifTrue: [delta := aNodeFigure width / 2.0]. - ^delta @ 0 -] - -{ #category : #hook } -RTVerticalLineLayout >> doCenter: aGraph [ - - | midWidest step | - midWidest := aGraph nodes - inject: 0 - into: [ :m :el | m max: (el bounds width )]. - midWidest := midWidest / 2. - aGraph nodes do: [ :node | - step := (midWidest - (node bounds width /2)) asInteger @ 0. - node bounds origin: (node bounds origin + step). - node bounds corner: (node bounds corner + step). - ] - -] - -{ #category : #hook } -RTVerticalLineLayout >> doStretchHorizontal: aCollectionOfElements [ - - | parent parentBounds | - aCollectionOfElements isNil ifTrue: [ ^ self "nothing to do" ]. - parent := aCollectionOfElements anyOne parent. - parent isView ifTrue: [ ^ self "ROView does not have bounds" ]. - parentBounds := parent bounds. - - aCollectionOfElements do: [ :element | - element width: parentBounds width ] -] - -{ #category : #hook } -RTVerticalLineLayout >> doStretchVertical: aCollectionOfElements [ - - | parent parentBounds addedHeight parentBoundsHeight runningIndex newHeight | - - aCollectionOfElements isEmpty ifTrue: [ ^ self "nothing to do" ]. - parent := aCollectionOfElements anyOne parent. - parent isView ifTrue: [ ^ self "ROView does not have bounds" ]. - parentBounds := parent bounds. - - addedHeight := aCollectionOfElements - inject: 0 - into: [ :m :el | m + el height ]. - - parentBoundsHeight := parentBounds height. - "parentBoundsHeight := parentBoundsHeight - ((aCollectionOfElements size - 1) * verticalGap) - (2 * verticalOutGap)." - - runningIndex := 0. - parentBounds height > addedHeight - ifTrue: [ aCollectionOfElements do: [ :element | - newHeight := (element height * parentBoundsHeight / addedHeight) asInteger. - element height: newHeight. - runningIndex := runningIndex + newHeight + verticalGap ] ] - -] - -{ #category : #'initialize-release' } -RTVerticalLineLayout >> initialize [ - - super initialize. - self alignLeft -] - -{ #category : #hook } -RTVerticalLineLayout >> movePointer: pointer accordingToFigure: aNodeFigure [ - - ^ pointer x @ (pointer y + aNodeFigure height + self verticalGap) -] - -{ #category : #hook } -RTVerticalLineLayout >> positionOriginalPointer: elements [ - | maxWidth delta | - delta := 0. - self alignment == #right ifTrue: - [ maxWidth := elements maxValue: #width. - delta := maxWidth ]. - self alignment == #center ifTrue: - [ maxWidth := elements maxValue: #width. - delta := maxWidth / 2.0 ]. - ^ ((0) + delta) @ (0) - -] diff --git a/src/Roassal2/RTVerticalMaxValueDecorator.class.st b/src/Roassal2/RTVerticalMaxValueDecorator.class.st deleted file mode 100644 index 986c1fe47..000000000 --- a/src/Roassal2/RTVerticalMaxValueDecorator.class.st +++ /dev/null @@ -1,29 +0,0 @@ -" -=-=-=-= -| b ds | -b := RTGrapher new. - -ds := RTData new. -ds points: RTShape withAllSubclasses. -ds y: #numberOfMethods. -b add: ds. - -b addDecorator: RTVerticalMinValueDecorator new red. -b addDecorator: RTVerticalMaxValueDecorator new blue. - -b axisY noLabel. -b -=-=-=-= -" -Class { - #name : #RTVerticalMaxValueDecorator, - #superclass : #RTAbstractVerticalValuesDecorator, - #category : #'Roassal2-Builder-Grapher-Decorators' -} - -{ #category : #drawing } -RTVerticalMaxValueDecorator >> render [ - self add: self datasetValues max. - super render. - -] diff --git a/src/Roassal2/RTVerticalMinValueDecorator.class.st b/src/Roassal2/RTVerticalMinValueDecorator.class.st deleted file mode 100644 index 256bfb9fe..000000000 --- a/src/Roassal2/RTVerticalMinValueDecorator.class.st +++ /dev/null @@ -1,29 +0,0 @@ -" -=-=-=-= -| b ds | -b := RTGrapher new. - -ds := RTData new. -ds points: RTShape withAllSubclasses. -ds y: #numberOfMethods. -b add: ds. - -b addDecorator: RTVerticalMinValueDecorator new red. -b addDecorator: RTVerticalMaxValueDecorator new blue. - -b axisY noLabel. -b -=-=-=-= -" -Class { - #name : #RTVerticalMinValueDecorator, - #superclass : #RTAbstractVerticalValuesDecorator, - #category : #'Roassal2-Builder-Grapher-Decorators' -} - -{ #category : #drawing } -RTVerticalMinValueDecorator >> render [ - self add: self datasetValues min. - super render. - -] diff --git a/src/Roassal2/RTVerticalMultipleData.class.st b/src/Roassal2/RTVerticalMultipleData.class.st deleted file mode 100644 index d1398cc0a..000000000 --- a/src/Roassal2/RTVerticalMultipleData.class.st +++ /dev/null @@ -1,99 +0,0 @@ -" -RTVerticalMultipleData represents a group of data points that are vertically located. Each group has the same X value. - -Negative data are not allowed. - -Here is an example: -[[[ -| b d | -b := RTGrapher new. - -d := RTVerticalMultipleData new. -d points: #( #('hello' 1 2 1) #('world' 2 4 2 ) #('bonjour' 3 5 4) #('bonjour' 3 5 4 ) #('bonjour' 3 5 4)). -d addMetric: #second. -d addMetric: #third. -d addMetric: #fourth. - -d barChartWithBarTitle: #first rotation: -30. -b add: d. - -b -]]] - -Here another example: -[[[ -| b d classes | -classes := (Collection withAllSubclasses reverseSortedAs: #numberOfMethods) first: 10. - -b := RTGrapher new. - -d := RTVerticalMultipleData new. -d points: classes. -d addMetric: #numberOfLinesOfCode. -d addMetric: #numberOfMethods. - -d barChartWithBarTitle: #name rotation: -30. -b add: d. - -b -]]] -" -Class { - #name : #RTVerticalMultipleData, - #superclass : #RTAbstractMultipleData, - #category : #'Roassal2-Builder-Grapher-Core' -} - -{ #category : #'min and max' } -RTVerticalMultipleData >> computeMinAndMaxForY [ - | computed | - computed := groupedElements collect: [ :g | (g collect: y) sum ]. - self assert: [ computed allSatisfy: [ :obj | obj isKindOf: Number ] ] description: 'You have provided objects that are not number. Please adjust what you provide to #points: #x: and #y:'. - minY := computed min. - maxY := computed max. - - (minY < 0 and: [ maxY < 0 ]) ifTrue: [ maxY := 0 ]. - (minY > 0 and: [ maxY > 0 ]) ifTrue: [ minY := 0 ]. - -] - -{ #category : #rendering } -RTVerticalMultipleData >> renderIn: aView [ - - "We need to do the layout here" - - | centralDot | - centralDot := self centralDot. - - "We compute the height" - RTMetricNormalizer new - elements: elements; - normalizeElementHeight: [ :anElement | y rtValue: anElement ] - min: 0 - max: builder extent y + centralDot position y - minValue: 0 - maxValue: maxY. - - "We stack the elements" - groupedElements do: [ :groupOfEl | RTVerticalLineLayout new gapSize: 0; on: groupOfEl ]. - RTAlignment new elements: groupedElements; fixedElement: centralDot; bottom. - - "We horizontally position the elements" - RTMetricNormalizer new - elements: groupedElements; - normalizeElementX: [ :aGroupOfElement | x rtValue: aGroupOfElement first ] - min: 0 - max: builder extent x - minValue: minX - maxValue: maxX + 1. - "We have 'maxX + 1' because we do not want the last bar on the extremity of the X-Axis" - - elementActions do: [ :act | act rtValue: (groupedElements collect: #first) ] -] - -{ #category : #hooks } -RTVerticalMultipleData >> selectElementsForAddingBarTitle [ - "Return the collection of principal element for each element group. - This principal element is used to position the title label" - ^ groupedElements collect: #last -] diff --git a/src/Roassal2/RTVerticalMultipleDataTest.class.st b/src/Roassal2/RTVerticalMultipleDataTest.class.st deleted file mode 100644 index 27dc03b54..000000000 --- a/src/Roassal2/RTVerticalMultipleDataTest.class.st +++ /dev/null @@ -1,40 +0,0 @@ -Class { - #name : #RTVerticalMultipleDataTest, - #superclass : #RTTest, - #instVars : [ - 'd', - 'b' - ], - #category : #'Roassal2-Builder-Grapher-Tests' -} - -{ #category : #running } -RTVerticalMultipleDataTest >> setUp [ - super setUp. - b := RTGrapher new. - - d := RTVerticalMultipleData new. - d points: #( #('hello' 1 2 1) #('world' 2 4 2) #('bonjour' 3 5 4) #('bonjour' 3 5 4) #('bonjour' 3 5 4)). - d addMetric: #second. - d addMetric: #third. - d addMetric: #fourth. - - b add: d. - - "d barChartWithBarTitle: #first rotation: -30. - " - b axisX noTick; noLabel. - b axisY noTick; noLabel. - - b build -] - -{ #category : #tests } -RTVerticalMultipleDataTest >> testBasic [ - - | a | - self assert: b view numberOfElements equals: 23. - self assert: b view numberOfEdges equals: 2. - a := ((Array new: 23) at: 1 put: ((19@ -58)); at: 2 put: ((19@ -33)); at: 3 put: ((19@ -8)); at: 4 put: ((0@0)); at: 5 put: ((76@ -116)); at: 6 put: ((76@ -66)); at: 7 put: ((76@ -16)); at: 8 put: ((0@0)); at: 9 put: ((134@ -175)); at: 10 put: ((134@ -108)); at: 11 put: ((134@ -33)); at: 12 put: ((0@0)); at: 13 put: ((191@ -175)); at: 14 put: ((191@ -108)); at: 15 put: ((191@ -33)); at: 16 put: ((0@0)); at: 17 put: ((248@ -175)); at: 18 put: ((248@ -108)); at: 19 put: ((248@ -33)); at: 20 put: ((0@0)); at: 21 put: ((0@ -200)); at: 22 put: ((0@0)); at: 23 put: ((300@0)); yourself). - self assert: ((b view elements collect: #position) asArray collect: #rounded) equals: a -] diff --git a/src/Roassal2/RTVerticalTickLineDecorator.class.st b/src/Roassal2/RTVerticalTickLineDecorator.class.st deleted file mode 100644 index afc8b50f8..000000000 --- a/src/Roassal2/RTVerticalTickLineDecorator.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #RTVerticalTickLineDecorator, - #superclass : #RTAbstractTickLineDecorator, - #category : #'Roassal2-Builder-Grapher-Decorators' -} - -{ #category : #hooks } -RTVerticalTickLineDecorator >> axis [ - ^ builder getAxisX -] - -{ #category : #drawing } -RTVerticalTickLineDecorator >> render [ - | xLine mm | - mm := RTMetricNormalizer new. - (self minValue to: self maxValue by: self step) - do: [ :x | - xLine := mm - getValue: x - min: self fromPoint x - max: self toPoint x - minValue: self minValue - maxValue: self maxValue. - self lineFrom: xLine @ builder getAxisY fromPoint y to: xLine @ builder getAxisY toPoint y ] -] diff --git a/src/Roassal2/RTVerticalTickLineDecoratorTest.class.st b/src/Roassal2/RTVerticalTickLineDecoratorTest.class.st deleted file mode 100644 index 9a7cc868b..000000000 --- a/src/Roassal2/RTVerticalTickLineDecoratorTest.class.st +++ /dev/null @@ -1,130 +0,0 @@ -Class { - #name : #RTVerticalTickLineDecoratorTest, - #superclass : #RTTest, - #category : #'Roassal2-Builder-Grapher-Decorators-Tests' -} - -{ #category : #tests } -RTVerticalTickLineDecoratorTest >> testBasicHorizontal [ - - | b ds d | - b := RTGrapher new. - - ds := RTData new. - ds points: #(3 4 6 -2). - b add: ds. - - d := RTHorizontalTickLineDecorator new. - b addDecorator: d. - - b shouldUseNiceLabels: false. - b build. - - self assert: b axisX numberOfTicks equals: 4. - self assert: b axisX step equals: 1. - self assert: d step equals: 2. -] - -{ #category : #tests } -RTVerticalTickLineDecoratorTest >> testBasicHorizontalWithNumberOfTicks [ - - | b ds d | - b := RTGrapher new. - - ds := RTData new. - ds points: #(3 4 6 -2). - b add: ds. - - d := RTHorizontalTickLineDecorator new. - d numberOfTicks: 10. - b addDecorator: d. - - b build. - - self assert: b axisX numberOfTicks equals: 4. - self assert: b axisX step equals: 1. - self assert: d step equals: 4 / 5. -] - -{ #category : #tests } -RTVerticalTickLineDecoratorTest >> testBasicHorizontalWithStep [ - - | b ds d | - b := RTGrapher new. - - ds := RTData new. - ds points: #(3 4 6 -2). - b add: ds. - - d := RTHorizontalTickLineDecorator new. - d step: 1. - b addDecorator: d. - - b build. - - self assert: b axisX numberOfTicks equals: 4. - self assert: b axisX step equals: 1. - self assert: d step equals: 1. -] - -{ #category : #tests } -RTVerticalTickLineDecoratorTest >> testBasicVertical [ - - | b ds d | - b := RTGrapher new. - - ds := RTData new. - ds points: #(3 4 6 -2). - b add: ds. - - d := RTVerticalTickLineDecorator new. - b addDecorator: d. - - b build. - - self assert: b axisX numberOfTicks equals: 4. - self assert: b axisX step equals: 1. - self assert: d step equals: 1. -] - -{ #category : #tests } -RTVerticalTickLineDecoratorTest >> testBasicVerticalWithNumberOfTicks [ - - | b ds d | - b := RTGrapher new. - - ds := RTData new. - ds points: #(3 4 6 -2). - b add: ds. - - d := RTVerticalTickLineDecorator new. - d numberOfTicks: 10. - b addDecorator: d. - - b build. - - self assert: b axisX numberOfTicks equals: 4. - self assert: b axisX step equals: 1. - self assert: d step equals: 2 / 5. -] - -{ #category : #tests } -RTVerticalTickLineDecoratorTest >> testBasicVerticalWithStep [ - - | b ds d | - b := RTGrapher new. - - ds := RTData new. - ds points: #(3 4 6 -2). - b add: ds. - - d := RTVerticalTickLineDecorator new. - d step: 1. - b addDecorator: d. - - b build. - - self assert: b axisX numberOfTicks equals: 4. - self assert: b axisX step equals: 1. - self assert: d step equals: 1. -] diff --git a/src/Roassal2/RTVerticalValuesDecorator.class.st b/src/Roassal2/RTVerticalValuesDecorator.class.st deleted file mode 100644 index a17992ae8..000000000 --- a/src/Roassal2/RTVerticalValuesDecorator.class.st +++ /dev/null @@ -1,29 +0,0 @@ -" -=-=-=-=- -| b ds deco | - -b := RTGrapher new. - -ds := RTData new. -ds points: #(0 1 2 3 4 5 6). -b add: ds. - -deco := RTHorizontalAllValuesDecorator new. -deco labelConversion: [ :value | '#', value asString ]. -b addDecorator: deco. - -deco := RTVerticalValuesDecorator new. -deco addAll: #(2 3 4). -deco labelConversion: [ :value | '#', value asString ]. -b addDecorator: deco. - -b axisX noTick; noLabel. -b axisY noTick; noLabel. -b -=-=-=-=- -" -Class { - #name : #RTVerticalValuesDecorator, - #superclass : #RTAbstractVerticalValuesDecorator, - #category : #'Roassal2-Builder-Grapher-Decorators' -} diff --git a/src/Roassal2/RTVerticalValuesDecoratorTest.class.st b/src/Roassal2/RTVerticalValuesDecoratorTest.class.st deleted file mode 100644 index a54305b72..000000000 --- a/src/Roassal2/RTVerticalValuesDecoratorTest.class.st +++ /dev/null @@ -1,70 +0,0 @@ -Class { - #name : #RTVerticalValuesDecoratorTest, - #superclass : #RTTest, - #category : #'Roassal2-Builder-Grapher-Tests' -} - -{ #category : #tests } -RTVerticalValuesDecoratorTest >> testBasic [ - - | b ds deco labels | - b := RTGrapher new. - - ds := RTData new. - ds points: #(2 3 4 5 6). - b add: ds. - - deco := RTVerticalValuesDecorator new. - deco addAll: #(3 5). - b addDecorator: deco. - - b axisX noTick; noLabel. - b axisY noTick; noLabel. - b build. - - labels := b view canvas shapes select: [ :s | s class == TRLabelShape ]. - self assert: labels size equals: 2. -] - -{ #category : #tests } -RTVerticalValuesDecoratorTest >> testBasic02 [ - - | b ds deco labels | - b := RTGrapher new. - - ds := RTData new. - ds points: #(2 3 4 5 6). - b add: ds. - - deco := RTVerticalAllValuesDecorator new. - b addDecorator: deco. - - b axisX noTick; noLabel. - b axisY noTick; noLabel. - b build. - - labels := b view canvas shapes select: [ :s | s class == TRLabelShape ]. - self assert: labels size equals: 5. -] - -{ #category : #tests } -RTVerticalValuesDecoratorTest >> testBasic03 [ - - | b ds deco labels | - b := RTGrapher new. - - ds := RTData new. - "We repeat the points" - ds points: #(2 3 4 5 6 2). - b add: ds. - - deco := RTVerticalAllValuesDecorator new. - b addDecorator: deco. - - b axisX noTick; noLabel. - b axisY noTick; noLabel. - b build. - - labels := b view canvas shapes select: [ :s | s class == TRLabelShape ]. - self assert: labels size equals: 5. -] diff --git a/src/Roassal2/RTView.class.st b/src/Roassal2/RTView.class.st deleted file mode 100644 index b2c8ace1e..000000000 --- a/src/Roassal2/RTView.class.st +++ /dev/null @@ -1,454 +0,0 @@ -" -A RTView is xxxxxxxxx. - -Roassal structures a visualization in terms of views, elements, shapes, interactions, and animations. -A ''view'' is a container of graphical elements and represents a layer that may be combined with other views. - -Instance Variables - edges: - elements: - trCanvas: - -edges - - xxxxx - -elements - - xxxxx - -trCanvas - - xxxxx - -" -Class { - #name : #RTView, - #superclass : #RTAnnounceableObject, - #instVars : [ - 'elements', - 'edges', - 'trCanvas' - ], - #category : #'Roassal2-Core' -} - -{ #category : #visitor } -RTView >> accept: aVisitor [ - aVisitor visitView: self -] - -{ #category : #'adding - removing' } -RTView >> add: anElementOrAnEdge [ - "An element or an edge may be provided here" - "The elements or edges variables grow respectively" - self assert: [ anElementOrAnEdge ~= nil ] description: 'Nil cannot be added to a view'. - - anElementOrAnEdge addedIn: self. - anElementOrAnEdge renderOn: trCanvas - -] - -{ #category : #'adding - removing' } -RTView >> addAll: someElements [ - " - :: Collection -> RTView - " - "Add a number of of elements to the view" - someElements do: [ :el | self add: el ] -] - -{ #category : #'adding - removing' } -RTView >> addAnimation: animation [ - trCanvas addAnimation: animation -] - -{ #category : #'adding - removing' } -RTView >> addEdge: anEdge [ - "Add an edge to the view. Extremity elements may or may not be in the view" - edges add: anEdge -] - -{ #category : #'adding - removing' } -RTView >> addElement: anElement [ - elements add: anElement -] - -{ #category : #menu } -RTView >> addFindMenu [ - - self addMenu: 'Find' callback: [ |element| - element := TRPlatform current dialogChooseFrom: (self elements collect: #model) values: self elements. - element notNil - ifTrue: [ self canvas camera translateTo: element position. RTBlink on: element ] ]. -] - -{ #category : #'adding - removing' } -RTView >> addFromView: aView [ - "Add all the elements and edges from aView to self" - - self addAll: aView elements , aView edges -] - -{ #category : #menu } -RTView >> addLayoutMenu [ - "Simply add some useful menu - - :: Void -> RTView - var b : RTMenuBuilder - var translator : RTSmoothLayoutTranslator - " - | b translator | - translator := RTSmoothLayoutTranslator new. - b := RTMenuBuilder new view: self. - b menu: 'Layout' submenu: 'grid' background: Color yellow callback: [ RTGridLayout new translator: translator; on: self elements. self canvas signalUpdate ]. - b menu: 'Layout' submenu: 'hori' background: Color yellow callback: [ RTHorizontalLineLayout new translator: translator; on: self elements. self canvas signalUpdate ]. - b menu: 'Layout' submenu: 'tree' background: Color yellow callback: [ RTTreeLayout new translator: translator; on: self elements edges: self edges. self canvas signalUpdate ]. - b menu: 'Layout' submenu: 'treeH' background: Color yellow callback: [ RTHorizontalTreeLayout new translator: translator; on: self elements edges: self edges. self canvas signalUpdate ]. - b menu: 'Layout' submenu: 'cluster' background: Color yellow callback: [ RTClusterLayout new translator: translator; on: self elements edges: self edges. self canvas signalUpdate ]. - b menu: 'Layout' submenu: 'circle' background: Color yellow callback: [ RTCircleLayout new translator: translator; on: self elements edges: self edges. self canvas signalUpdate ]. - b menu: 'Layout' submenu: 'radial' background: Color yellow callback: [ RTRadialTreeLayout new translator: translator; on: self elements edges: self edges. self canvas signalUpdate ]. - b menu: 'Layout' submenu: 'sugi' background: Color yellow callback: [ RTSugiyamaLayout new translator: translator; on: self elements edges: self edges. self canvas signalUpdate ]. - b build -] - -{ #category : #menu } -RTView >> addMenu: aTitle callback: aBlock [ - self canvas addMenu: aTitle callback: aBlock - -] - -{ #category : #'adding - removing' } -RTView >> animations [ - ^ trCanvas animations -] - -{ #category : #announce } -RTView >> announce: anEvent [ - anEvent canvas: self canvas. - super announce: anEvent -] - -{ #category : #convertion } -RTView >> asElement [ - | e | - e := RTBox compoundElement. - e addAll: self elements. - ^ e -] - -{ #category : #convertion } -RTView >> asElementOn: aModel [ - | e | - e := RTBox compoundElementOn: aModel. - e addAll: self elements. - ^ e -] - -{ #category : #opening } -RTView >> build [ - "do nothing. This method is used polymorphically with builders" -] - -{ #category : #accessing } -RTView >> canvas [ - "Return the trachel canvas on which everything is drawn" - ^ trCanvas -] - -{ #category : #actions } -RTView >> clean [ - "Remove all the elements of the view. It does not remove elements that are directly added to the canvas however" - - "Iterate over the original collections until they are empty. It's done this way because removal of one element can remove another one via TRRemoveCallback (e.g. RTViewTest>>testCleaningViewWithCallback)." - - [ self elements isNotEmpty ] whileTrue: [ self elements anyOne remove ]. - [ self edges isNotEmpty ] whileTrue: [ self edges anyOne remove ] -] - -{ #category : #actions } -RTView >> cleanAll [ - "Clean out everything, both the view and the canvas. It means that elements added to the canvas are cleaned out" - self clean. - self resetAnnouncer. - self canvas clean - -] - -{ #category : #'accessing-computed' } -RTView >> edgeFromModel: anObject [ - "Return an edge that corresponds to the object provided as parameter. If none is found, then return nil" - ^ edges detect: [ :edge | edge model = anObject ] ifNone: [ nil ] -] - -{ #category : #accessing } -RTView >> edges [ - " - :: Void -> Collection - " - ^ edges copy -] - -{ #category : #'accessing-computed' } -RTView >> elementFromModel: anObject [ - " - :: Object -> RTElement - " - "Return an element that corresponds to the object provided as parameter. If none is found, then return nil" - ^ elements elementFromModel: anObject - -] - -{ #category : #accessing } -RTView >> elements [ - " - :: Void -> RTGroup - " - ^ RTGroup withAll: elements -] - -{ #category : #'accessing-computed' } -RTView >> elementsFromModel: anObject [ - "Return an element that corresponds to the object provided as parameter. If none is found, then return nil" - ^ elements elementsFromModel: anObject - -] - -{ #category : #'accessing-computed' } -RTView >> elementsFromModels: objects [ - "Return elements that corresponds to the objects provided as parameter. If none is found, then return an empty collection" - ^ elements elementsFromModels: objects - -] - -{ #category : #initialization } -RTView >> initialize [ - super initialize. - self initializeContent. - self setCanvas: TRCanvas new -] - -{ #category : #initialization } -RTView >> initializeContent [ - elements := RTGroup new. - edges := RTGroup new -] - -{ #category : #testing } -RTView >> isView [ - ^ true -] - -{ #category : #'accessing-computed' } -RTView >> numberOfEdges [ - "Return the number of edges containde in the view" - ^ edges size -] - -{ #category : #'accessing-computed' } -RTView >> numberOfElements [ - ^ elements size -] - -{ #category : #opening } -RTView >> open [ - ^ self setUpCanvas open -] - -{ #category : #opening } -RTView >> openInWindowSized: anExtentAsPoint [ - ^ self setUpCanvas openInWindowSized: anExtentAsPoint -] - -{ #category : #opening } -RTView >> openInWindowSized: anExtentAsPoint titled: aTitle [ - ^ self setUpCanvas openInWindowSized: anExtentAsPoint titled: aTitle -] - -{ #category : #opening } -RTView >> openRaw [ - "Simply open the canvas. No menu is added, no centering of the camera is done" - ^ trCanvas open -] - -{ #category : #opening } -RTView >> openTitled: aTitle [ - ^ self setUpCanvas openTitled: aTitle -] - -{ #category : #opening } -RTView >> openWithMenu [ - " - :: Void -> Object - " - self canvas addMenu: 'In' callback: [ RTZoomInMove on: self ]. - self canvas addMenu: 'Out' callback: [ RTZoomOutMove on: self ]. - - ^ self open -] - -{ #category : #actions } -RTView >> pushBackEdges [ - "Move all the edges in the background" - self edges do: [ :e | e trachelShape pushBack ] -] - -{ #category : #actions } -RTView >> pushFrontEdges [ - "Move all the edges in the front" - self edges do: [ :e | e trachelShape pushFront ] -] - -{ #category : #'adding - removing' } -RTView >> removeAllEdges [ - "Remove all the edges" - edges := OrderedCollection new. - self canvas resetLineShapes. - self elements do: #removeConnectedEdges - -] - -{ #category : #'adding - removing' } -RTView >> removeAllElements [ - "Remove all the elements found in the view. - CAUTION: this does not trigger a remove event per elements" - self initializeContent. - self canvas resetShapes. - -] - -{ #category : #'adding - removing' } -RTView >> removeAnimation: animation [ - trCanvas removeAnimation: animation -] - -{ #category : #actions } -RTView >> removeEdge: anEdge [ - "Remove an edge from the view" - edges remove: anEdge ifAbsent: [ ]. - anEdge trachelShape remove. -] - -{ #category : #'adding - removing' } -RTView >> removeEdges: someEdges [ - " - :: Collection -> RTView - " - - someEdges do: #remove - - "In case we are trying to remove everything, as it may happen with the cachetor" -" (someEdges asArray = edges asArray) ifTrue: [ - edges := OrderedCollection new. - self canvas resetLineShapes. - ^ self ]. -" -" edges := edges copyWithoutAll: someEdges. - self canvas removeShapes: (someEdges collect: #trachelShape). -" - -] - -{ #category : #'adding - removing' } -RTView >> removeElement: anElement [ - elements remove: anElement ifAbsent: [ ]. - anElement trachelShape remove. -] - -{ #category : #'adding - removing' } -RTView >> removeElements: someElements [ - " - :: Collection -> RTView - " - someElements do: #remove - - "In case we are trying to remove everything, as it may happen with the cachetor" -" (someElements asArray = elements asArray) ifTrue: [ - self initializeContent. - self canvas resetShapes. - ^ self ]. -" - -" elements := elements copyWithoutAll: someElements. - self canvas removeShapes: (someElements collect: #trachelShape). -" - -] - -{ #category : #actions } -RTView >> resetCamera [ - TRCameraInitializer reset -] - -{ #category : #actions } -RTView >> restoreCamera [ - "Reuse a previous camera. This is useful when scripting in a playground" - - self view numberOfElements = 0 - ifTrue: [ self resetCamera ]. - self view canvas camera toAdjust: TRCameraInitializer restorePrevious -] - -{ #category : #accessing } -RTView >> setCanvas: aTrachelCanvas [ - trCanvas := aTrachelCanvas. - "Share my announcer with the one of the Trachel Canvas" - announcer := trCanvas announcer. -] - -{ #category : #menu } -RTView >> setDefaultMenu [ - " - :: Void -> RTView - var b : RTMenuBuilder - " - "Simply add some useful menu" - | b | - b := RTMenuBuilder new view: self. - b menu: 'In' callback: [ RTZoomInMove on: self ]. - b menu: 'Out' callback: [ RTZoomOutMove on: self ]. - b menu: 'Center' callback: [ self canvas focusOnCenterScaled. self signalUpdate ]. - b menu: 'Export' submenu: 'HTML' background: Color blue trans - callback: [ RTHTML5Exporter interactiveExport: self ]. - b menu: 'Export' submenu: 'SVG' - callback: [ RTSVGExporter interactiveExportViewAsSVG: self ]. - b menu: 'Export' submenu: 'PNG' - callback: [ RTPNGExporter new builder: self; fileName: 'roassal.png'; exportToFile ]. - - (Smalltalk allClasses anySatisfy: [ :c | c name == #RTPDFExporter ]) - ifTrue: [ b menu: 'Export' submenu: 'PDF' callback: [ (Smalltalk at: #RTPDFExporter) exportView: self ]. ]. - b render -] - -{ #category : #initialization } -RTView >> setUpCanvas [ - "Make the camera point on the center of the visualization" - trCanvas camera adjust. - ^ trCanvas -] - -{ #category : #convenient } -RTView >> signalUpdate [ - "Force the view to be refreshed. Useful in case some elements have changed" - ^ self canvas signalUpdate -] - -{ #category : #'accessing-computed' } -RTView >> theme [ - "Return the theme currently used. A theme is an instance of a subclass of TRAbstractTheme" - - ^ self canvas theme -] - -{ #category : #'accessing-computed' } -RTView >> trachelShape [ - " - :: Void -> String - " - ^ TRNoShape instance -] - -{ #category : #'accessing-computed' } -RTView >> view [ - "This method is meant to be used polymorphically with builders. - Thus, regardless of whether we get a raw view or a builder, we - can uniformly obtain the view" - ^ self -] diff --git a/src/Roassal2/RTViewFolder2Script.class.st b/src/Roassal2/RTViewFolder2Script.class.st deleted file mode 100644 index ce0d8cc73..000000000 --- a/src/Roassal2/RTViewFolder2Script.class.st +++ /dev/null @@ -1,57 +0,0 @@ -Class { - #name : #RTViewFolder2Script, - #superclass : #RTUsefulScript, - #category : #'Roassal2-Plugins' -} - -{ #category : #accessing } -RTViewFolder2Script >> description [ - ^ -'Let you select a directory and see its content. -A color is given to each file based on its extension.' -] - -{ #category : #hooks } -RTViewFolder2Script >> execute [ - - | fr allChildren b lb | - fr := UIManager default chooseDirectory. - fr ifNil: [ ^ self ]. - allChildren := fr allChildren. - allChildren := allChildren copyWithout: fr. - - b := RTMondrian new. - - b shape box - withTextAbove: #basename. - b nodes: fr children forEach: [ :fileRef | - b shape box - size: [ :f | (f size + 1) log * 3 ]. - b nodes: fileRef allChildren. - b edges connectFrom: #parent. - b layout cluster. - - ]. - b layout grid. - b normalizer - objects: (allChildren reject: #isDirectory); - distinctColorUsing: #extension. - - b build. - - lb := RTLegendBuilder new. - lb view: b view. - lb addText: 'Visualization of the folder named ', fr basename. - lb addText: 'Root folder are indicated as large gray boxes.'. - lb addText: 'Colored boxes are files.'. - lb addText: 'Each color indicate a file extension'. - lb build. - - b view inspect. - -] - -{ #category : #hooks } -RTViewFolder2Script >> label [ - ^ 'Visualizing Folder using a Cluster layout' -] diff --git a/src/Roassal2/RTViewFolderScript.class.st b/src/Roassal2/RTViewFolderScript.class.st deleted file mode 100644 index a32f80daf..000000000 --- a/src/Roassal2/RTViewFolderScript.class.st +++ /dev/null @@ -1,57 +0,0 @@ -Class { - #name : #RTViewFolderScript, - #superclass : #RTUsefulScript, - #category : #'Roassal2-Plugins' -} - -{ #category : #accessing } -RTViewFolderScript >> description [ - ^ -'Let you select a directory and see its content. -A color is given to each file based on its extension.' -] - -{ #category : #hooks } -RTViewFolderScript >> execute [ - - | fr allChildren b lb | - fr := UIManager default chooseDirectory. - fr ifNil: [ ^ self ]. - allChildren := fr allChildren. - allChildren := allChildren copyWithout: fr. - - b := RTMondrian new. - - b shape box - withTextAbove: #basename. - b nodes: fr children forEach: [ :fileRef | - b shape box - size: [ :f | (f size + 1) log * 3 ]. - b nodes: fileRef allChildren. - b edges connectFrom: #parent. - b layout tree. - - ]. - b layout verticalLine. - b normalizer - objects: (allChildren reject: #isDirectory); - distinctColorUsing: #extension. - - b build. - - lb := RTLegendBuilder new. - lb view: b view. - lb addText: 'Visualization of the folder named ', fr basename. - lb addText: 'Root folder are indicated as large gray boxes.'. - lb addText: 'Colored boxes are files.'. - lb addText: 'Each color indicate a file extension'. - lb build. - - b view inspect. - -] - -{ #category : #hooks } -RTViewFolderScript >> label [ - ^ 'Visualizing Folder' -] diff --git a/src/Roassal2/RTViewTest.class.st b/src/Roassal2/RTViewTest.class.st deleted file mode 100644 index 6f66643b5..000000000 --- a/src/Roassal2/RTViewTest.class.st +++ /dev/null @@ -1,510 +0,0 @@ -Class { - #name : #RTViewTest, - #superclass : #RTTest, - #instVars : [ - 'view' - ], - #category : #'Roassal2-Core-Tests' -} - -{ #category : #running } -RTViewTest >> setUp [ - super setUp. - view := RTView new -] - -{ #category : #edges } -RTViewTest >> testAccept [ - view accept: RTVisitor new -] - -{ #category : #menu } -RTViewTest >> testAddFindMenu [ - - view addFindMenu. - self assert: view canvas numberOfFixedShapes > 0. - self assert: view canvas numberOfShapes equals: 0 -] - -{ #category : #menu } -RTViewTest >> testAddLayoutMenu [ - - view addLayoutMenu. - self assert: view canvas numberOfFixedShapes > 0. - self assert: view canvas numberOfShapes equals: 0 -] - -{ #category : #'fixed elements' } -RTViewTest >> testAdding [ - - | e1 e2 | - e1 := RTBox element. - e2 := RTBox element. - - e1 setAsFixed. - view add: e1. - view add: e2. - - self assert: view canvas numberOfFixedShapes = 1. - self assert: view canvas numberOfShapes = 1. -] - -{ #category : #tests } -RTViewTest >> testAddingAnimation [ - | c | - c := RTView new canvas. - c addAnimation: (RTLinearMove to: 50 @ 50 during: 2 on: RTBox element). - self assert: c hasAnimation. - self assert: c numberOfAnimations = 1 -] - -{ #category : #edges } -RTViewTest >> testAddingEdgeSetsTheElementInTrachelShape [ - | el1 el2 edge | - el1 := RTBox element. - el2 := RTBox element. - edge := RTLine edgeFrom: el1 to: el2. - view add: el1; add: el2. - view add: edge. - self assert: edge trachelShape element equals: edge -] - -{ #category : #edges } -RTViewTest >> testAddingEdges [ - | el1 el2 edge | - el1 := RTBox element. - el2 := RTBox element. - edge := RTLine edgeFrom: el1 to: el2. - view add: el1; add: el2. - self assert: view numberOfElements = 2. - - self assert: view numberOfEdges = 0. - view add: edge. - self assert: view numberOfEdges = 1. -] - -{ #category : #edges } -RTViewTest >> testBuild [ - view build -] - -{ #category : #camera } -RTViewTest >> testCameraProjection [ - | v camera | - - v := RTView new. - camera := v canvas camera. - - self assert: ((camera fromPixelToSpace: (camera fromSpaceToPixel: (10@10))) closeTo: (10.0 @ 10.0)) -] - -{ #category : #tests } -RTViewTest >> testCleaningView [ - - | v e | - v := RTView new. - e := (RTBox new size: 80) elementOn: 'Hello World'. - v add: e. - e @ RTLabeled. - - v cleanAll. - self assert: v numberOfElements equals: 0. - self assert: v canvas numberOfFixedShapes equals: 0. - self assert: v canvas numberOfShapes equals: 0. - -] - -{ #category : #tests } -RTViewTest >> testCleaningViewHavingCallback [ - - | v e | - v := RTView new. - e := (RTBox new size: 80) elementOn: 'Hello World'. - v add: e. - e @ RTLabeled. - v when: TRMouseClick do: [ :vv | vv inspect ]. - - self assert: v announcer numberOfSubscriptions equals: 1. - v cleanAll. - self assert: v numberOfElements equals: 0. - self assert: v canvas numberOfFixedShapes equals: 0. - self assert: v canvas numberOfShapes equals: 0. - self assert: v announcer numberOfSubscriptions equals: 0. - -] - -{ #category : #tests } -RTViewTest >> testCleaningViewWithCallback [ - | v parent child | - v := RTView new. - parent := RTBox new element. - child := RTBox new element. - parent addCallback: (TRRemoveCallback block: [ child remove ]). - v - add: parent; - add: child. - self assert: v numberOfElements equals: 2. - v clean. - self assert: v numberOfElements equals: 0 -] - -{ #category : #'fixed elements' } -RTViewTest >> testDefault [ - - self deny: RTElement new isFixed. - self assert: (RTElement new setAsFixed; isFixed). - self deny: (RTElement new setAsNotFixed; isFixed). -] - -{ #category : #edges } -RTViewTest >> testEdgeFromModel [ - - | e1 e2 edge | - e1 := RTBox elementOn: 1. - e2 := RTBox elementOn: 2. - edge := RTLine edgeFrom: e1 to: e2. - edge model: 'hello'. - view add: e1; add: e2; add: edge. - - self assert: (view edgeFromModel: 'hello') equals: edge -] - -{ #category : #tests } -RTViewTest >> testElementFromModel [ - - | els | - els := RTBox elementsOn: (1 to: 3). - view addAll: els. - - self assert: (view elementFromModel: 1) == els first. - self assert: (view elementFromModel: 2) == els second. - self assert: (view elementFromModel: 3) == els third. -] - -{ #category : #edges } -RTViewTest >> testElementsFromModel [ - - | e1 e2 e3 edge | - e1 := RTBox elementOn: 1. - e2 := RTBox elementOn: 2. - e3 := RTBox elementOn: 1. - edge := RTLine edgeFrom: e1 to: e2. - edge model: 'hello'. - view add: e1; add: e2; add: e3; add: edge. - - self assert: (view elementsFromModel: 'hello') isEmpty. - self assert: (view elementsFromModel: 1) size equals: 2. - self assert: (view elementsFromModel: 2) size equals: 1. - self assert: (view elementsFromModel: 3) size equals: 0 -] - -{ #category : #tests } -RTViewTest >> testEmptyCanvas [ - self assert: RTView new setUpCanvas numberOfShapes = 0 - -] - -{ #category : #tests } -RTViewTest >> testFillingCanvas [ - - | canvas | - view := RTView new. - view add: RTBox element. - canvas := view setUpCanvas. - - self assert: canvas class == TRCanvas. - self assert: canvas numberOfShapes = 1. -] - -{ #category : #'low events' } -RTViewTest >> testLowLevelEvent [ - - | v e | - v := RTView new. - e := (RTBox new size: 30) element. - e @ RTDraggable. - v add: e. - - self assert: (v canvas shapeWithAction: TRMouseDragging forPositionInPixels: 250 @ 250) == e trachelShape -] - -{ #category : #'low events' } -RTViewTest >> testLowLevelEvent02 [ - - | v e | - v := RTView new. - e := (RTBox new size: 30) element. - e when: TRMouseClick do: [ ]. - v add: e. - - self assert: (v canvas shapeWithAction: TRMouseClick forPositionInPixels: 250 @ 250) == e trachelShape -] - -{ #category : #'low events' } -RTViewTest >> testLowLevelEvent3 [ - - | v e | - v := RTView new. - e := (RTBox new size: 30) element. - v add: e. - e @ RTDraggable. - self assert: (v canvas shapeWithAction: TRMouseDragging forPositionInPixels: 250 @ 250) == e trachelShape -] - -{ #category : #menu } -RTViewTest >> testMenu [ - - view add: (RTEllipse new size: 50) element. - view addMenu: 'foo' callback: [ ]. - self assert: view canvas numberOfShapes = 1. - self assert: view canvas numberOfFixedShapes = 1. -] - -{ #category : #opening } -RTViewTest >> testOpenWithMenu [ - - | window | - window := view openWithMenu. - self assert: view numberOfElements equals: 0. - self assert: view canvas numberOfFixedShapes > 0. - window delete. -] - -{ #category : #opening } -RTViewTest >> testOpening [ - - | window | - window := RTView new openInWindowSized: 500 @ 300. - self assert: window extent equals: 500 @ 300. - window delete. -] - -{ #category : #opening } -RTViewTest >> testOpeningInWindowSizedTitled [ - - | window | - window := RTView new openInWindowSized: 500 @ 300 titled: 'Hello World'. - self assert: window extent equals: 500 @ 300. - window delete. -] - -{ #category : #opening } -RTViewTest >> testOpeningRaw [ - - | window | - window := view openRaw. - self assert: window notNil. - window delete. -] - -{ #category : #edges } -RTViewTest >> testPushBackEdges [ - - | es lastEdge | - es := RTBox new elementsOn: (1 to: 10). - view addAll: es. - - RTEdgeBuilder new - view: view; - objects: (1 to: 10); - connectFrom: [ :aValue | aValue // 3 ] to: #yourself. - view add: (RTBox element). - RTTreeLayout on: es. - - - lastEdge := view edges last. - self assert: (view canvas shapes indexOf: lastEdge trachelShape) equals: 18. - view pushBackEdges. - self assert: (view canvas shapes indexOf: lastEdge trachelShape) equals: 1. -] - -{ #category : #edges } -RTViewTest >> testPushFrontEdges [ - - | es lastEdge | - es := RTBox new elementsOn: (1 to: 10). - view addAll: es. - - RTEdgeBuilder new - view: view; - objects: (1 to: 10); - connectFrom: [ :aValue | aValue // 3 ] to: #yourself. - view add: (RTBox element). - RTTreeLayout on: es. - - - lastEdge := view edges last. - self assert: (view canvas shapes indexOf: lastEdge trachelShape) equals: 18. - view pushFrontEdges. - self assert: (view canvas shapes indexOf: lastEdge trachelShape) equals: 19. -] - -{ #category : #tests } -RTViewTest >> testRemoveEdges [ - - | element1 element2 element3 edge1 edge2 | - element1 := RTBox new element. - element2 := RTEllipse new element. - element3 := RTBox new element. - edge1 := RTLine edgeFrom: element1 to: element2. - edge2 := RTLine edgeFrom: element2 to: element3. - self assert: view numberOfElements equals: 0. - self assert: view numberOfEdges equals: 0. - self assert: view canvas shapes size equals: 0. - view add: element1; add: element2; add: element3; add: edge1; add: edge2. - self assert: view numberOfElements equals: 3. - self assert: view numberOfEdges equals: 2. - self assert: view canvas shapes size equals: 5. - - view removeEdges: (RTGroup with: edge1). - self assert: view numberOfElements equals: 3. - self assert: view numberOfEdges equals: 1. - self assert: view canvas shapes size equals: 4. - - view removeEdges: (RTGroup with: edge2). - self assert: view numberOfElements equals: 3. - self assert: view numberOfEdges equals: 0. - self assert: view canvas shapes size equals: 3. - -] - -{ #category : #tests } -RTViewTest >> testRemoveElements [ - - | es | - es := RTBox elementsOn: (1 to: 5). - self assert: view numberOfElements equals: 0. - view addAll: es. - self assert: view numberOfElements equals: 5. - es remove. - self assert: view numberOfElements equals: 0. -] - -{ #category : #tests } -RTViewTest >> testRemoveElementsWithCompositeShape [ - - | s1 s2 c el1 el2 | - s1 := RTBox new. - s2 := RTEllipse new. - c := RTCompositeShape new. - c add: s1; add: s2. - el1 := c element. - el2 := c element. - self assert: view numberOfElements equals: 0. - self assert: view canvas shapes size equals: 0. - view add: el1. - self assert: view numberOfElements equals: 1. - self assert: view canvas shapes size equals: 2. - view add: el2. - self assert: view numberOfElements equals: 2. - self assert: view canvas shapes size equals: 4. - - view removeElements: (RTGroup with: el1). - self assert: view numberOfElements equals: 1. - self assert: view canvas shapes size equals: 2. - - view removeElements: (RTGroup with: el2). - self assert: view numberOfElements equals: 0. - self assert: view canvas shapes size equals: 0. - -] - -{ #category : #tests } -RTViewTest >> testRemoveElementsWithEdges [ - - | element1 element2 element3 edge1 edge2 | - element1 := RTBox new element. - element2 := RTEllipse new element. - element3 := RTBox new element. - edge1 := RTLine edgeFrom: element1 to: element2. - edge2 := RTLine edgeFrom: element2 to: element3. - self assert: view numberOfElements equals: 0. - self assert: view numberOfEdges equals: 0. - self assert: view canvas shapes size equals: 0. - view add: element1; add: element2; add: element3; add: edge1; add: edge2. - self assert: view numberOfElements equals: 3. - self assert: view numberOfEdges equals: 2. - self assert: view canvas shapes size equals: 5. - - view removeElements: (RTGroup with: element1). - self assert: view numberOfElements equals: 2. - self assert: view numberOfEdges equals: 1. - self assert: view canvas shapes size equals: 3. - - view removeEdges: (RTGroup with: element2 with: element3). - self assert: view numberOfElements equals: 0. - self assert: view numberOfEdges equals: 0. - self assert: view canvas shapes size equals: 0. - -] - -{ #category : #removing } -RTViewTest >> testRemoving [ - " - self debug: #testRemoving - " - | v es | - v := RTView new. - es := RTBox elementsOn: (1 to: 10). - v addAll: es. - es remove. - self assert: v numberOfElements equals: 0. - self assert: v canvas numberOfShapes equals: 0. -] - -{ #category : #edges } -RTViewTest >> testRemovingEdges [ - | es | - es := RTBox elementsOn: #(1 2). - view addAll: es. - view add: (RTLine edgeFrom: es first to: es second). - self assert: view numberOfEdges equals: 1. - - view removeAllEdges. - self assert: view numberOfEdges equals: 0. - - self assert: es first connectedEdges isEmpty. - self assert: es second connectedEdges isEmpty. -] - -{ #category : #camera } -RTViewTest >> testRestoreCamera [ - " - self debug: #testRestoreCamera - " - - view resetCamera. - view add: (RTBox element). - view restoreCamera. - view canvas camera translateTo: 5 @ 5. - view setUpCanvas. - - view := RTView new. - view add: (RTBox element). - view restoreCamera. - self assert: view canvas camera position equals: 0 @ 0. - - view setUpCanvas. - self assert: view canvas camera position equals: 5 @ 5. -] - -{ #category : #menu } -RTViewTest >> testSignalUpdate [ - - RTView new signalUpdate -] - -{ #category : #menu } -RTViewTest >> testTrachelShape [ - - self assert: view trachelShape class equals: TRNoShape - -] - -{ #category : #menu } -RTViewTest >> testsetDefaultMenu [ - - view setDefaultMenu. - self assert: view canvas numberOfFixedShapes > 0. - self assert: view canvas numberOfShapes equals: 0 -] diff --git a/src/Roassal2/RTVisible.class.st b/src/Roassal2/RTVisible.class.st deleted file mode 100644 index 7294ea8de..000000000 --- a/src/Roassal2/RTVisible.class.st +++ /dev/null @@ -1,94 +0,0 @@ -" -A RTVisible is an interaction for element. It allows one to define behavior when an element become visible or visible. - -The interaction has to be used after having added the element to a view. - -Instance Variables - invisibleBlock: - visibleBlock: - -invisibleBlock - - xxxxx - -visibleBlock - - xxxxx - -" -Class { - #name : #RTVisible, - #superclass : #RTInteraction, - #instVars : [ - 'visibleBlock', - 'invisibleBlock' - ], - #category : #'Roassal2-Interactions' -} - -{ #category : #utility } -RTVisible >> doInvisibleBlockOn: element [ - invisibleBlock rtValue: element -] - -{ #category : #utility } -RTVisible >> doUpdate: element [ - | isVisible | - isVisible := element trachelShape isVisible. - isVisible ~= (element attributeAt: #isVisible) - ifTrue: [ - isVisible - ifTrue: [ self doVisibleBlockOn: element ] - ifFalse: [ self doInvisibleBlockOn: element ]. - element attributeAt: #isVisible put: isVisible ]. - -] - -{ #category : #utility } -RTVisible >> doVisibleBlockOn: element [ - visibleBlock rtValue: element -] - -{ #category : #initialization } -RTVisible >> initialize [ - super initialize. - visibleBlock := [ :anElement | "do nothing " ]. - invisibleBlock := [ :anElement | "do nothing " ]. -] - -{ #category : #hooks } -RTVisible >> initializeElement: element [ - | c | - self prepareElement: element. - self doUpdate: element. - - c := TRTranslationCallback new. - c block: [ :aShape :aStep | self doUpdate: element ]. - element trachelShape addCallback: c. - element view canvas camera addCallback: c. -] - -{ #category : #accessing } -RTVisible >> invisibleBlock [ - ^ invisibleBlock -] - -{ #category : #accessing } -RTVisible >> invisibleBlock: aOneArgBlock [ - "The block is evaluated against the element" - invisibleBlock := aOneArgBlock -] - -{ #category : #utility } -RTVisible >> prepareElement: element [ - element attributeAt: #isVisible put: nil -] - -{ #category : #accessing } -RTVisible >> visibleBlock [ - ^ visibleBlock -] - -{ #category : #accessing } -RTVisible >> visibleBlock: aOneArgBlock [ - "The block is evaluated against the element" - visibleBlock := aOneArgBlock -] diff --git a/src/Roassal2/RTVisibleTest.class.st b/src/Roassal2/RTVisibleTest.class.st deleted file mode 100644 index 5849eea82..000000000 --- a/src/Roassal2/RTVisibleTest.class.st +++ /dev/null @@ -1,119 +0,0 @@ -Class { - #name : #RTVisibleTest, - #superclass : #RTTest, - #category : #'Roassal2-Core-Tests' -} - -{ #category : #tests } -RTVisibleTest >> testBasic [ - - | v e t | - v := RTView new. - e := RTBox element. - v add: e. - t := 0. - e @ (RTVisible new - visibleBlock: [ :el | t := t + 1 ]; - invisibleBlock: [ :el | t := t - 10 ]). - - self assert: t equals: 1. - e translateBy: 5 @ 5. - self assert: t equals: 1. - - e translateTo: 1000 @ 1000. - self assert: t equals: -9. -] - -{ #category : #tests } -RTVisibleTest >> testBasicWithoutInvisibleBlock [ - - | v e t | - v := RTView new. - e := RTBox element. - v add: e. - t := 0. - e @ (RTVisible new - visibleBlock: [ :el | t := t + 1 ]). - - self assert: t equals: 1. - e translateBy: 5 @ 5. - self assert: t equals: 1. - - e translateTo: 1000 @ 1000. - self assert: t equals: 1. -] - -{ #category : #tests } -RTVisibleTest >> testInitialization [ - - | v | - v := RTVisible new. - v visibleBlock rtValue: RTElement new. - v invisibleBlock rtValue: RTElement new. - self assert: v visibleBlock notNil. - self assert: v invisibleBlock notNil. -] - -{ #category : #tests } -RTVisibleTest >> testIsVisible [ - "The center of e is outside the canvas" - | v e | - v := RTView new. - self assert: v canvas extent equals: 500 @ 500. - - e := (RTBox new size: 100) element. - v add: e. - e translateTo: 260 @ 260. - - self assert: e trachelShape isVisible -] - -{ #category : #tests } -RTVisibleTest >> testIsVisible2 [ - "The center of e is outside the canvas" - | v e | - v := RTView new. - self assert: v canvas extent equals: 500 @ 500. - - e := (RTBox new size: 100) element. - v add: e. - e translateTo: 248 @ 248. - - self assert: e trachelShape isVisible -] - -{ #category : #tests } -RTVisibleTest >> testVisible [ - "The center of e is outside the canvas" - | v t visible e | - v := RTView new. - self assert: v canvas extent equals: 500 @ 500. - - e := (RTBox new size: 100) element. - v add: e. - e translateTo: 260 @ 260. - - t := false. - visible := RTVisible new - visibleBlock: [ :el | t := true ]. - e @ visible. - self assert: t -] - -{ #category : #tests } -RTVisibleTest >> testVisible2 [ - "The center of e is within the canvas" - | v t visible e | - v := RTView new. - self assert: v canvas extent equals: 500 @ 500. - - e := (RTBox new size: 100) element. - v add: e. - e translateTo: 248 @ 248. - - t := false. - visible := RTVisible new - visibleBlock: [ :el | t := true ]. - e @ visible. - self assert: t -] diff --git a/src/Roassal2/RTVisitor.class.st b/src/Roassal2/RTVisitor.class.st deleted file mode 100644 index 1c6293300..000000000 --- a/src/Roassal2/RTVisitor.class.st +++ /dev/null @@ -1,57 +0,0 @@ -" -A RTVisitor is a simple visitor. - -" -Class { - #name : #RTVisitor, - #superclass : #RTObject, - #instVars : [ - 'names' - ], - #category : #'Roassal2-Core' -} - -{ #category : #initialization } -RTVisitor >> initialize [ - super initialize. - names := Dictionary new. -] - -{ #category : #utils } -RTVisitor >> nameFor: anElement [ - "Author: milton mamani - Date: 12/05/2015 - There are several shapes and edges, to handle the relations between the shapes RTVisitor - uses a dictionary(names) to asign one unique id to that shape" - (names includesKey: anElement) - ifTrue: [ ^ names at: anElement ] - ifFalse: [ - | n | - n := names size printStringHex. - names at: anElement put: n. - ^ n.] -] - -{ #category : #helpers } -RTVisitor >> number: n [ - - | f | - ^ n isNaN - ifTrue: ['NaN'] - ifFalse: [ n isInteger - ifTrue: [ n asString ] - ifFalse: [ f := n asFloat. - f fractionPart isZero - ifTrue: [ f rounded asString ] - ifFalse: [ f asString ] ] ] - -] - -{ #category : #visitor } -RTVisitor >> visitCanvas: aCanvas [ -] - -{ #category : #visitor } -RTVisitor >> visitView: aView [ - aView canvas accept: self -] diff --git a/src/Roassal2/RTVisualIDPlugin.class.st b/src/Roassal2/RTVisualIDPlugin.class.st deleted file mode 100644 index 40a910bbc..000000000 --- a/src/Roassal2/RTVisualIDPlugin.class.st +++ /dev/null @@ -1,52 +0,0 @@ -Class { - #name : #RTVisualIDPlugin, - #superclass : #RTAbstractPlugin, - #category : #'Roassal2-Plugins' -} - -{ #category : #hooks } -RTVisualIDPlugin >> description [ - ^ 'VisualID is a glyph-based object identification technique. It generates a unique glyph for each - object that is inputed. Similarities may exist between two glyphs depending on how similar their -respective objects are.' -] - -{ #category : #hooks } -RTVisualIDPlugin >> execute [ - Gofer new - smalltalkhubUser: 'abergel' project: 'VisualIDGlyph'; - package: 'VisualIDGlyph'; - load. - -" Metacello new - baseline: 'VisualID'; - repository: 'github://bergel/VisualID:master'; - load. " - - "Gofer new - smalltalkhubUser: 'IgnacioFernandez' project: 'VisualiDs'; - configurationOf: 'VisualID'; - loadBleedingEdge. - " - -" Gofer new - smalltalkhubUser: 'IgnacioFernandez' project: 'VisualiDs'; - package: 'VisualID'; - package: 'VisualID-Clustering'; - package: 'VisualID-Random'; - package: 'VisualID-Roassal'; - package: 'VisualID-Canvas'; - package: 'VisualID-Test'; - load" -] - -{ #category : #testing } -RTVisualIDPlugin >> isLoaded [ - ^ RPackageOrganizer default includesPackageNamed: 'VisualIDGlyph' - -] - -{ #category : #hooks } -RTVisualIDPlugin >> label [ - ^ 'VisualID shapes' -] diff --git a/src/Roassal2/RTVisualizeCSVFileScript.class.st b/src/Roassal2/RTVisualizeCSVFileScript.class.st deleted file mode 100644 index 7bdfb2320..000000000 --- a/src/Roassal2/RTVisualizeCSVFileScript.class.st +++ /dev/null @@ -1,21 +0,0 @@ -Class { - #name : #RTVisualizeCSVFileScript, - #superclass : #RTUsefulScript, - #category : #'Roassal2-Plugins' -} - -{ #category : #accessing } -RTVisualizeCSVFileScript >> description [ - ^ -'Let you select a csv file and open a Grapher visualization' -] - -{ #category : #hooks } -RTVisualizeCSVFileScript >> execute [ - FileSystem disk inspect -] - -{ #category : #hooks } -RTVisualizeCSVFileScript >> label [ - ^ 'Browse and visualize CSV file' -] diff --git a/src/Roassal2/RTVoronojPlugin.class.st b/src/Roassal2/RTVoronojPlugin.class.st deleted file mode 100644 index 6cb90e696..000000000 --- a/src/Roassal2/RTVoronojPlugin.class.st +++ /dev/null @@ -1,33 +0,0 @@ -Class { - #name : #RTVoronojPlugin, - #superclass : #RTAbstractPlugin, - #category : #'Roassal2-Plugins' -} - -{ #category : #hooks } -RTVoronojPlugin >> description [ - ^ 'A Voronoi diagram is a partitioning of a plane into regions based on distance -to points in a specific subset of the plane.' -] - -{ #category : #hooks } -RTVoronojPlugin >> execute [ - - Gofer new - smalltalkhubUser: 'NataliaTymchuk' - project: 'VoronoiDiagram'; - configuration; - load. - #ConfigurationOfVoronoiDiagram asClass loadDevelopment -] - -{ #category : #testing } -RTVoronojPlugin >> isLoaded [ - ^ RPackageOrganizer default includesPackageNamed: 'ConfigurationOfVoronoiDiagram' - -] - -{ #category : #hooks } -RTVoronojPlugin >> label [ - ^ 'Voronoj diagrams' -] diff --git a/src/Roassal2/RTWeightedCircleLayout.class.st b/src/Roassal2/RTWeightedCircleLayout.class.st deleted file mode 100644 index 033816204..000000000 --- a/src/Roassal2/RTWeightedCircleLayout.class.st +++ /dev/null @@ -1,38 +0,0 @@ -" -RTWeightedCircleLayout is a circle layout that gives more space to big elements and fewer space to small elements. - -Here is an example: --=-=-=-=-=-=-=-=-=-=-=-= -v := RTView new. -elements := (RTEllipse new size: 5; color: Color red; size: [:vv | vv * 4 ]) elementsOn: (1 to: 15). -v addAll: elements. -RTWeightedCircleLayout on: elements. -v --=-=-=-=-=-=-=-=-=-=-=-= -" -Class { - #name : #RTWeightedCircleLayout, - #superclass : #RTAbstractWeightedCircleLayout, - #category : #'Roassal2-Layouts' -} - -{ #category : #hook } -RTWeightedCircleLayout >> doExecute: elements [ - | angle rad center angleIncrement | - rad := self computeRadiusFor: elements. - center := Point x: rad y: rad. - angleIncrement := self computeIncrementalAngleFor: elements. - angle := self initialAngle. - elements - do: [ :each | - | point fctr | - "The factor weighs the angleIncrement" - "The angle is increased by half of the total increment, - then the point is set, and then it's increased by the other half" - "This is to consider both last and next elements weights" - fctr := (elements size)*(each height)/(self weightSum: elements). - angle := angle + (angleIncrement*(fctr/2)). - point := center + (Point r: rad theta: angle). - angle := angle + (angleIncrement*(fctr/2)). - translator translate: each to: point. ] -] diff --git a/src/Roassal2/RTXMLViewerScript.class.st b/src/Roassal2/RTXMLViewerScript.class.st deleted file mode 100644 index 953cfa451..000000000 --- a/src/Roassal2/RTXMLViewerScript.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #RTXMLViewerScript, - #superclass : #RTUsefulScript, - #category : #'Roassal2-Plugins' -} - -{ #category : #accessing } -RTXMLViewerScript >> description [ - ^ -'Let you select a XML file and visualize it. This script open a playground on which you can easily customize the script.' -] - -{ #category : #hooks } -RTXMLViewerScript >> execute [ - -GTPlayground openContents: ' -"Press the Play green button, on the top right on this window to see this script in action" - -| fileName doc allChildren b | -fileName := UIManager default chooseFullFileNameMatching: #(''*.xml'') label: ''Pick a XML file''. -fileName ifNil: [ ^ self ]. - -doc := PPXmlParser parse: fileName asFileReference contents. - -allChildren := OrderedCollection new. -doc nodesDo: [ :n | allChildren add: n ]. - - -b := RTMondrian new. -b shape circle - size: 15; - color: Color blue trans; - if: [ :n | n class == PPXmlText and: [ n data lines includes: '' Type: OUTPUT'' ]] fillColor: Color red; - if: [ :n | n class == PPXmlText and: [ n data lines includes: '' Type: INTERNAL'' ]] fillColor: Color green; - if: [ :n | n class == PPXmlText and: [ n data lines includes: '' Type: INPUT'' ]] fillColor: Color yellow; - if: [ :n | n class == PPXmlText and: [ n data lines includes: '' Type: INNER'' ]] fillColor: Color orange. -b nodes: allChildren. -b layout radial. -b edges - moveBehind; - connectFrom: #parent. -b ' -] - -{ #category : #hooks } -RTXMLViewerScript >> label [ - ^ 'XML file viewer' -] diff --git a/src/Roassal2/RTXPPoint.class.st b/src/Roassal2/RTXPPoint.class.st deleted file mode 100644 index 57b0bd8d1..000000000 --- a/src/Roassal2/RTXPPoint.class.st +++ /dev/null @@ -1,48 +0,0 @@ -" -I am an point with an offset -" -Class { - #name : #RTXPPoint, - #superclass : #RTObject, - #instVars : [ - 'x', - 'y', - 'y0' - ], - #category : #'Roassal2-Experimental' -} - -{ #category : #'initialize-release' } -RTXPPoint class >> x: x y: y y0: y1 [ - ^ self new x: x; y: y; y0: y1 -] - -{ #category : #accessing } -RTXPPoint >> x [ - ^ x -] - -{ #category : #accessing } -RTXPPoint >> x: aNumber [ - x := aNumber -] - -{ #category : #accessing } -RTXPPoint >> y [ - ^ y -] - -{ #category : #accessing } -RTXPPoint >> y0 [ - ^ y0 -] - -{ #category : #accessing } -RTXPPoint >> y0: aNumber [ - y0 := aNumber -] - -{ #category : #accessing } -RTXPPoint >> y: aNumber [ - y := aNumber -] diff --git a/src/Roassal2/RTXPSVGAnimation.class.st b/src/Roassal2/RTXPSVGAnimation.class.st deleted file mode 100644 index 27e7cd95a..000000000 --- a/src/Roassal2/RTXPSVGAnimation.class.st +++ /dev/null @@ -1,69 +0,0 @@ -" -I am a simple animation for the example stacks examples in RTExperimentalExample -" -Class { - #name : #RTXPSVGAnimation, - #superclass : #RTAnimation, - #instVars : [ - 'curves0', - 'curves1', - 'animatedValue' - ], - #category : #'Roassal2-Experimental' -} - -{ #category : #public } -RTXPSVGAnimation >> curvesFor: index [ - | t res acurves bcurves c2 | - t := animatedValue value. - acurves := curves0 at: index. - bcurves := curves1 at: index . - res := Array new: acurves size. - - acurves doWithIndex: [ :c1 :i | - c2 := bcurves at: i. - res at: i put: (Array with: c1 first with: - (c1 second collect: [:point | point interpolateTo: c2 second first at: t]) ) - ]. - - ^ res -] - -{ #category : #testing } -RTXPSVGAnimation >> hasCompleted [ - ^ animatedValue hasCompleted -] - -{ #category : #public } -RTXPSVGAnimation >> on: elements during: seconds path: aBlock [ - - | time | - element := (elements isKindOf: RTGroup) - ifTrue: [ elements] - ifFalse: [ RTGroup new add: elements ]. - curves0 := element collect: [ :e | e trachelShape curves ]. - curves1 := element collect: [ :e | e trachelShape path:( aBlock rtValue: e); curves.]. - time := curves0 size = curves1 size ifTrue: [ 0 max: seconds ] ifFalse: [ 0 ]. - animatedValue := TRVIAnimatedValue new - evaluator: [ :t | t ]; - timer: (TRVITimer new cycleLength: time); - yourself. - -] - -{ #category : #refreshing } -RTXPSVGAnimation >> refresh [ - element doWithIndex: [ :e :i | - e trachelShape - curves: (self curvesFor: i); - computePath. - ]. - element signalUpdate. - - -] - -{ #category : #actions } -RTXPSVGAnimation >> start [ - animatedValue start -] diff --git a/src/Roassal2/RTZoomInMove.class.st b/src/Roassal2/RTZoomInMove.class.st deleted file mode 100644 index e43a4bc42..000000000 --- a/src/Roassal2/RTZoomInMove.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -I increase camera's zoom by 25% -" -Class { - #name : #RTZoomInMove, - #superclass : #RTAbstractZoomMove, - #category : #'Roassal2-Animation' -} - -{ #category : #'stepping and presenter' } -RTZoomInMove >> step [ - ^ 1.5 -] diff --git a/src/Roassal2/RTZoomOutMove.class.st b/src/Roassal2/RTZoomOutMove.class.st deleted file mode 100644 index 98702852a..000000000 --- a/src/Roassal2/RTZoomOutMove.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -I decrease camera's zoom by 20% -" -Class { - #name : #RTZoomOutMove, - #superclass : #RTAbstractZoomMove, - #category : #'Roassal2-Animation' -} - -{ #category : #'stepping and presenter' } -RTZoomOutMove >> step [ - ^ 0.5 -] diff --git a/src/Roassal2/RTZoomableBoxView.class.st b/src/Roassal2/RTZoomableBoxView.class.st deleted file mode 100644 index c3ec3dcf9..000000000 --- a/src/Roassal2/RTZoomableBoxView.class.st +++ /dev/null @@ -1,35 +0,0 @@ -" -I am a class that allows you to use a elastic box in a View, this box is a tool that allows you to zoom in or zoom out in a view. -" -Class { - #name : #RTZoomableBoxView, - #superclass : #RTAbstractElasticBoxInteraction, - #instVars : [ - 'color' - ], - #category : #'Roassal2-Selection' -} - -{ #category : #initialization } -RTZoomableBoxView >> initialize [ - super initialize. - self allowNegatedBox: false. - self when: RTSelectionEnd do: [:e| self updateScale: e. ]. -] - -{ #category : #initialization } -RTZoomableBoxView >> updateScale: evt [ - | s r sc | - s := evt shape. - (s extent x <= 0 or: [ s extent y <= 0 ]) - ifTrue: [ view canvas focusOnCenterScaled ] - ifFalse: [ - r := s encompassingRectangle. - (r extent x isZero or: [ r extent y isZero ]) ifTrue: [ ^ self ]. - sc := (view canvas extent * 0.9) / r extent. - sc := (sc x < sc y) ifTrue: [sc x] ifFalse: [ sc y ]. - view canvas camera - translateTo: r center; - scale: sc ]. - view signalUpdate. -] diff --git a/src/Roassal2/RTZoomableView.class.st b/src/Roassal2/RTZoomableView.class.st deleted file mode 100644 index 2d704e4df..000000000 --- a/src/Roassal2/RTZoomableView.class.st +++ /dev/null @@ -1,77 +0,0 @@ -" -I am interaction which allows view to be zoomed with a mouce wheel. While zomming mouce cursor stays on the same spot in the canvas -" -Class { - #name : #RTZoomableView, - #superclass : #RTAbstractInteractionView, - #instVars : [ - 'minZoom', - 'maxZoom' - ], - #category : #'Roassal2-Interactions' -} - -{ #category : #'instance creation' } -RTZoomableView class >> min: aMin max: aMax [ - ^ self new - min: aMin max: aMax; - yourself -] - -{ #category : #hooks } -RTZoomableView >> initializeElement: aView [ - aView canvas - when: TRMouseWheelEvent - do: [ :e | - self processEvent: e ] -] - -{ #category : #accessing } -RTZoomableView >> maxZoom [ - ^ maxZoom ifNil: [ 10 ] -] - -{ #category : #accessing } -RTZoomableView >> maxZoom: aFloat [ - maxZoom := aFloat -] - -{ #category : #accessing } -RTZoomableView >> min: aMinFloat max: aMaxFloat [ - self minZoom: aMinFloat. - self maxZoom: aMaxFloat -] - -{ #category : #accessing } -RTZoomableView >> minZoom [ - ^ minZoom ifNil: [ 0.1 ] -] - -{ #category : #accessing } -RTZoomableView >> minZoom: aFloat [ - minZoom := aFloat -] - -{ #category : #hooks } -RTZoomableView >> processEvent: evt [ - | scale dist | - dist := evt position - evt canvas camera position. - scale := evt canvas camera scale. - - evt isUp ifTrue: [ - scale * 1.25 <= self maxZoom ifTrue: [ - scale := scale * 1.25. - dist := dist * 0.2 ] - ifFalse: [ ^ self ]. - ]. - evt isDown ifTrue: [ - scale * 0.8 >= self minZoom ifTrue: [ - scale := scale * 0.8. - dist := dist * -0.25 ] - ifFalse: [ ^ self ] - ]. - evt canvas camera - scale: scale; - translateBy: dist. - evt signalUpdate -] diff --git a/src/Roassal2/Rectangle.extension.st b/src/Roassal2/Rectangle.extension.st deleted file mode 100644 index d7444601f..000000000 --- a/src/Roassal2/Rectangle.extension.st +++ /dev/null @@ -1,36 +0,0 @@ -Extension { #name : #Rectangle } - -{ #category : #'*Roassal2' } -Rectangle >> areasOverlapingOutside: aRectangle [ - "Answer an Array of maximized Rectangles comprising (overlaped by each other) the parts of the receiver not - intersecting aRectangle." - "Make sure the intersection is non-empty" - | areas o c | - (self intersects: aRectangle) ifFalse: [ ^ Array with: self ]. - areas := OrderedCollection new. - o := self topLeft. - c := self bottomRight. - aRectangle topLeft y > o y - ifTrue: - [ areas addLast: (o corner: c x @ aRectangle topLeft y) ]. - aRectangle bottomRight y < c y - ifTrue: - [ areas addLast: (o x @ aRectangle bottomRight y corner: c) ]. - aRectangle topLeft x > o x - ifTrue: - [ areas addLast: (o corner: aRectangle topLeft x @ c y) ]. - aRectangle bottomRight x < c x - ifTrue: - [ areas addLast: (aRectangle bottomRight x @ o y corner: c) ]. - ^ areas -] - -{ #category : #'*Roassal2' } -Rectangle >> halfPerimeter [ - ^ self width + self height -] - -{ #category : #'*Roassal2' } -Rectangle >> perimeter [ - ^ self halfPerimeter * 2 -] diff --git a/src/Roassal2/Roassal2VW.class.st b/src/Roassal2/Roassal2VW.class.st deleted file mode 100644 index 721063f61..000000000 --- a/src/Roassal2/Roassal2VW.class.st +++ /dev/null @@ -1,258 +0,0 @@ -" -A simple class to export Roassal and trachel packages to visualworks -" -Class { - #name : #Roassal2VW, - #superclass : #Object, - #category : #'Roassal2-ExporterVW' -} - -{ #category : #accesing } -Roassal2VW >> blacklist [ - ^ { RTGeneralExample>>#combiningRoassalAndMorphic. - RTElementTest >> #testPlatformPopup. - RTRoassalExample >> #examplePlatformPoup. - RTAbstractExample class >> #createIcon. - RTAbstractExample >> #installTitle:code:. - FileReference >> #gtInspectorCsvIn:. - RTTabTable >> #gtInspectorTableIn:. - RTExploraBuilderExample >> #exampleCircularList. - RTHTML5ExporterExample >> #exportAll. - RTPopupTest >> #testPopupView. - RTPopupTest >> #testPopupView02. - RTBuilder >> #openWithToolbar. - RTView >> #openWithToolbar. - RTView >> #spotterShapesFor:. - RTView >> #spotterShapesModelsFor:. - RTGrapherTest >> #testError. - RTMondrianTest >> #testSourceError. - RTObject class >> #gtExamplesFactory. - TRDarkTheme >> #trachelCanvasColor. - TRTheme class >> #infer. - RTMondrianTest >> #testNodesError. - ClassDescription >> #rtmethods. - ClassDescription >> #oldestMethod. - ClassDescription >> #ageInDays. - RTRoassalExample >> #exampleBidirectionalLines. - ClassDescription >> #gotMethodOnDay:. - } -] - -{ #category : #importing } -Roassal2VW >> bundleOrder [ -" - - -b := Registry bundleNamed: 'Roassal2'. -list := b containedItems. -arr := #('Roassal2' 'Roassal2-Core' 'Roassal2-Trachel-Core' 'Roassal2-Builder-Common' 'Roassal2-Builder-Menu' 'Roassal2-Interactions' 'Roassal2-Utility' 'Roassal2-Shapes' 'Roassal2-Builder-Grapher-Core' 'Roassal2-Trachel-Shapes' 'Roassal2-Trachel-Events' 'Roassal2-Animation' 'Roassal2-Selection' 'Roassal2-AttachPoint' 'Roassal2-Experimental' 'Roassal2-Pharo' 'Roassal2-Trachel-Viva' 'Roassal2-Builder-DSM' 'Roassal2-Trachel-Core-Theme' 'Roassal2-Extentions' 'Roassal2-Visualworks' 'Roassal2-Builder-StructureMatrix'). - -arr doWithIndex: [:n :i | | r | - r := list select: [ :d | d name = n ]. - r size = 1 ifFalse: [ self halt]. - list remove: r first. - list add: r first beforeIndex: i. - ]. -b containedItems: list. - -b := Registry bundleNamed: 'Roassal2-Tests'. -list := b containedItems. -arr2 := #('Roassal2-Core-Tests' 'Roassal2-Trachel-Tests' 'Roassal2-AttachPoint-Tests'). -arr2 doWithIndex: [:n :i | | r | - r := list select: [ :d | d name = n ]. - r size = 1 ifFalse: [ self halt]. - list remove: r first. - list add: r first beforeIndex: i. - ]. -b containedItems: list. - -b := Registry bundleNamed: 'Roassal2-Examples'. -list := b containedItems. -r := list select: [:d | d name = 'Roassal2-Examples-Extentions']. -list remove: r first. -list add: r first. -b containedItems: list. - -" -] - -{ #category : #importing } -Roassal2VW >> codeForVisualWorks [ - " - Transcript open. - self new exporter packagesTags do: [ :pkg| - Transcript show: 'm1 add: ''',pkg package name, '-',pkg name, '''.'; cr ]. - " - " -| map b btests bexamples classes p cat m1 currentB | -m1 := OrderedCollection new. - -m1 add: 'Roassal2-Utility'. -m1 add: 'Roassal2-Builder-Grapher-Labeling'. -m1 add: 'Roassal2-Layouts'. -m1 add: 'Roassal2-Core-Tests'. -m1 add: 'Roassal2-ColorNormalizer'. -m1 add: 'Roassal2-Builder-ScrollBar'. -m1 add: 'Roassal2-Selection'. -m1 add: 'Roassal2-Builder-Timeline-Tests'. -m1 add: 'Roassal2-Builder-Explora'. -m1 add: 'Roassal2-Exporter-SVG'. -m1 add: 'Roassal2-Builder-Sunburst'. -m1 add: 'Roassal2-Builder-Map-Tests'. -m1 add: 'Roassal2-Builder-Map'. -m1 add: 'Roassal2-AttachPoint'. -m1 add: 'Roassal2-Builder-TextBuilder'. -m1 add: 'Roassal2-Builder-UI-Slider'. -m1 add: 'Roassal2-Builder-BundleEdge'. -m1 add: 'Roassal2-Exporter-HTML5'. -m1 add: 'Roassal2-Experimental'. -m1 add: 'Roassal2-Builder-Grapher-Decorators'. -m1 add: 'Roassal2-LineDecorations'. -m1 add: 'Roassal2-Interactions'. -m1 add: 'Roassal2-Builder-SimilarityMatrix'. -m1 add: 'Roassal2-Builder-PieChart'. -m1 add: 'Roassal2-Exporter-PNG'. -m1 add: 'Roassal2-Builder-Composer'. -m1 add: 'Roassal2-Builder-StackBarPlot'. -m1 add: 'Roassal2-Builder-Microprint'. -m1 add: 'Roassal2-Builder-Grapher-Core'. -m1 add: 'Roassal2-Builder-Spectrograph'. -m1 add: 'Roassal2-Builder-Common'. -m1 add: 'Roassal2-Builder-ScatterplotMap'. -m1 add: 'Roassal2-InteractiveComposer'. -m1 add: 'Roassal2-Builder-Timeline'. -m1 add: 'Roassal2-Builder-Calendar'. -m1 add: 'Roassal2-Builder-Legend'. -m1 add: 'Roassal2-Builder-AxisAdapted'. -m1 add: 'Roassal2-Core'. -m1 add: 'Roassal2-Builder-Grapher-Scaling'. -m1 add: 'Roassal2-Builder-Grapher-Tests'. -m1 add: 'Roassal2-Builder-Mondrian'. -m1 add: 'Roassal2-Builder-Menu'. -m1 add: 'Roassal2-ExampleBrowser'. -m1 add: 'Roassal2-ColorNormalizerOBSOLETE'. -m1 add: 'Roassal2-Builder-Simon'. -m1 add: 'Roassal2-ColorNormalizer-Tests'. -m1 add: 'Roassal2-Interactions-Resize-Tests'. -m1 add: 'Roassal2-Sparkline'. -m1 add: 'Roassal2-Builder-CircularMap'. -m1 add: 'Roassal2-Builder-Grapher-Scaling-Tests'. -m1 add: 'Roassal2-Animation'. -m1 add: 'Roassal2-Cachetor'. -m1 add: 'Roassal2-Builder-NameCloud'. -m1 add: 'Roassal2-Builder-DSM'. -m1 add: 'Roassal2-Builder-Grapher-Obsolete'. -m1 add: 'Roassal2-Builder-ApplicationMatrix'. -m1 add: 'Roassal2-Builder-Kiviat'. -m1 add: 'Roassal2-Interactions-Resize'. -m1 add: 'Roassal2-Tests'. -m1 add: 'Roassal2-Builder-UML'. -m1 add: 'Roassal2-Builder-Grapher-Examples'. -m1 add: 'Roassal2-Builder-AnimatedScatterPlot'. -m1 add: 'Roassal2-Builder-BoxPlot'. -m1 add: 'Roassal2-Shapes'. -m1 add: 'Roassal2-AttachPoint-Tests'. -m1 add: 'Roassal2-Interactions-MorphingView'. -m1 add: 'Roassal2-Builder-Grapher-Decorators-Tests'. -m1 add: 'Roassal2-Table'. -m1 add: 'Roassal2-Builder-TreeMap'. -m1 add: 'Roassal2-Builder-StructureMatrix'. -m1 add: 'Roassal2-Layouts-Tests'. -m1 add: 'Trachel-Events'. -m1 add: 'Trachel-Shapes'. -m1 add: 'Trachel-Tests'. -m1 add: 'Trachel-Examples'. -m1 add: 'Trachel-Callbacks'. -m1 add: 'Trachel-Core-Theme'. -m1 add: 'Trachel-Viva'. -m1 add: 'Trachel-ShapesForArrow'. -m1 add: 'Trachel-Core'. - - -b := Registry bundleNamed: 'Roassal2'. -btests := Registry bundleNamed: 'Roassal2-Tests'. -bexamples := Registry bundleNamed: 'Roassal2-Examples'. -map := Dictionary new. -classes := b allClasses. -currentB := nil. -classes do:[:cls | - cat := cls myClass category asString. - (m1 includes: cat) ifTrue: [ - - currentB := b. - ('*Test' match: cls myClass name) ifTrue: [ - currentB := btests. - ('*Tests' match: cat) - ifFalse: [ cat := cat , '-Tests'.] ] - ifFalse: [ - (('*Example*' match: cls myClass name) or: [ '*Examples' match: cls myClass name]) - ifTrue: [ - currentB := bexamples. - cat := cat , '-Examples' ] ]. - ('Trachel*' match: cat) - ifTrue: [ cat := 'Roassal2-', cat ]. - p := map at: cat ifAbsent: [ - p := Registry packageNamedOrCreate: cat. - currentB addItem: p. - map at: cat put: p. - p ]. - XChangeSet current moveWholeClass: cls toPackage: p ]. ]. - -" -] - -{ #category : #importing } -Roassal2VW >> codeToDeletePackages [ - " -| b arr list | -list := OrderedCollection new. -list - add: 'Roassal2-Extentions'; - add: 'Roassal2-Pharo'; - add: 'Roassal2-Visualworks'; - add: 'Roassal2-Tests-Extentions'; - add: 'Roassal2-Examples-Extentions'. -arr := Array with: 'Roassal2' with: 'Roassal2-Examples' with: 'Roassal2-Tests'. -arr do: [ :ar | - b := Registry bundleNamed: ar. - b leafItems do: [ :pkg | - (list includes: pkg name) ifFalse: [ - pkg doUnloadFromImage. - ]. ]. ]. - - - " - - -] - -{ #category : #exporting } -Roassal2VW >> exportPackages [ - - self exporter export -] - -{ #category : #accesing } -Roassal2VW >> exporter [ - | cls | - cls := Smalltalk classOrTraitNamed: 'Pharo2VW'. - cls ifNil: [ ^ nil ]. - ^ cls exporter - environment: 'Roassal2'; - methodsBlacklist: self blacklist; - packages: {'Roassal2'. 'Trachel'} - without: { - 'Trachel-MorphSpecific'. 'Roassal2-OpenStreetMap'. - 'Roassal2-MorphSpecific'. 'Roassal2-Plugins'. - 'Roassal2-ExporterVW'. 'Roassal2-MorphSpecific-Menu' }; - yourself -] - -{ #category : #loadExporter } -Roassal2VW >> loadExporter [ - Gofer it - smalltalkhubUser: 'ObjectProfile' project: 'Pharo2VW'; - package: 'Pharo2VW'; - load. - -] diff --git a/src/Roassal2/Roassal2VWTest.class.st b/src/Roassal2/Roassal2VWTest.class.st deleted file mode 100644 index 9b18b6acd..000000000 --- a/src/Roassal2/Roassal2VWTest.class.st +++ /dev/null @@ -1,45 +0,0 @@ -" -A Roassal2VWTest is a test class for testing the behavior of Roassal2VW -" -Class { - #name : #Roassal2VWTest, - #superclass : #RTTest, - #category : #'Roassal2-ExporterVW' -} - -{ #category : #helpers } -Roassal2VWTest >> hasArraySelector: met [ - ^ self hasRBArray: met ast. - -] - -{ #category : #helpers } -Roassal2VWTest >> hasRBArray: node [ - node class = RBArrayNode ifTrue: [ ^ true ]. - node children do: [ :child | - (self hasRBArray: child) ifTrue: [ ^ true ]. - ]. - ^ false. - -] - -{ #category : #helpers } -Roassal2VWTest >> simple [ - " - self new hasArraySelector: self >> #simple - " - "^ #(1 2)" - ^ { 1. 2 }. -] - -{ #category : #tests } -Roassal2VWTest >> testNoArray [ - | t ex | - t := Roassal2VW new. - ex := t exporter. - ex ifNil: [ ^ self ]. - ex methods do: [ :met | - self deny: (ex hasArray: met) - description: 'Remove brackets {} from: ',met methodClass name,'>>#', met selector. - ] displayingProgress: [:met | 'Processing method: ', met selector ]. -] diff --git a/src/Roassal2/SequenceableCollection.extension.st b/src/Roassal2/SequenceableCollection.extension.st deleted file mode 100644 index 22f5bcb51..000000000 --- a/src/Roassal2/SequenceableCollection.extension.st +++ /dev/null @@ -1,124 +0,0 @@ -Extension { #name : #SequenceableCollection } - -{ #category : #'*roassal2-core' } -SequenceableCollection >> cumsum [ - "Cumulative sum - #(1 2 3 4 5) cumsum = #(1 3 6 10 15) - " - | sum | - sum := 0. - ^ self collect: [ :v | sum := sum + v. sum ] - -] - -{ #category : #'*Roassal2' } -SequenceableCollection >> histogram [ - "Plot the histrogram (distribution) of the numerical values given the metric block or symbol on my elements. - #('yes' 'no' 'no' 'yes' 'yes' 'maybe' 'maybe' 'yes') histogram - #(5 6 5 6 4 2 10 10 10 10) histogram - (RTShape withAllSubclasses) histogram: #numberOfMethods - " - ^ self histogram: #yourself. - -] - -{ #category : #'*Roassal2' } -SequenceableCollection >> histogram: aBlockOrSymbol [ - "Plot the histrogram (distribution) of the numerical values given the metric block or symbol on my elements. - #('yes' 'no' 'no' 'yes' 'yes' 'maybe' 'maybe' 'yes') histogram - #(5 6 5 6 4 2 10 10 10 10 12 12 14 8 5 6 4 2 3 4 5 6) histogram - (RTShape withAllSubclasses) histogram: #numberOfMethods - " - - | values min max numberOfInterval increment buckets current elementsInCurrentBucket g d | - values := self collect: aBlockOrSymbol. - min := values min. - max := values max. - numberOfInterval := 7. - increment := (max - min) / numberOfInterval. - buckets := OrderedCollection new. - current := min. - 1 to: numberOfInterval do: [ :nbInterval | - elementsInCurrentBucket := values - select: [ :v | v >= current and: [ v < (current + increment) ] ]. - buckets add: current -> elementsInCurrentBucket. - current := current + increment ]. - g := RTGrapher new. - d := RTData new. - d barShape. - d points: buckets. - d x: [ :assoc | assoc key ]. - d y: [ :assoc | assoc value size ]. - g add: d. - ^ g - - - " | b ds | - b := RTGrapher new. - - ds := RTHistogramSet new. - ds points: self. - ds barShape width: 20. - ds x: aBlockOrSymbol. - - ds barChartWithBarTitle: [:ar | - ar second isEmpty - ifTrue: ['[:]'] - ifFalse: ['[', (ar second first isNumber ifTrue: [ar second first floor] ifFalse: [ar second first]) asString,':', (ar second last isNumber ifTrue: [ar second last ceiling] ifFalse: [ar second last]) asString,']'] - ]. - - b add: ds. - b axisX title: 'Values'. - b axisY title: 'Frequency'. - - ^ b." -] - -{ #category : #'*Roassal2' } -SequenceableCollection >> plot [ - " - #(1 2 3 4 5) plot - " - | b ds | - b := RTGrapher new. - - "We defien the size of the charting area" - b extent: 500 @ 100. - - ds := RTData new. - "When the mouse is above a bar, say which class we are point at" - ds interaction popup. - ds points: self. - ds dotShape rectangle color: Color blue. - b add: ds. - - b build. - ^ b view - -] - -{ #category : #'*Roassal2' } -SequenceableCollection >> removeDuplicates [ - | iterator | - "Remove the copies of elements, but keep the same order" - - self ifEmpty: [ ^ self ]. - iterator := 1. - [ iterator <= self size ] - whileTrue: [ | each newIndex | - each := self at: iterator. - [ newIndex := (self indexOf: each startingAt: iterator+1). - newIndex > 0 ] - whileTrue: [ self removeAt: newIndex ]. - iterator := iterator + 1. - ] -] - -{ #category : #'*Roassal2' } -SequenceableCollection >> rtSwapElement: u withElement: v [ - | index1 index2 | - index1 := self indexOf: u. - index2 := self indexOf: v. - self at: index2 put: u. - self at: index1 put: v. -] diff --git a/src/Roassal2/String.extension.st b/src/Roassal2/String.extension.st deleted file mode 100644 index e376961ab..000000000 --- a/src/Roassal2/String.extension.st +++ /dev/null @@ -1,66 +0,0 @@ -Extension { #name : #String } - -{ #category : #'*Roassal2' } -String >> cutCamelCase [ - "Breaks apart words written in camel case. - - It's not simply using piecesCutWhere: because we want - to also deal with abbreviations and thus we need to - decide based on three characters, not just on two: - ('FOOBar') piecesCutWhereCamelCase asArray = #('FOO' 'Bar'). - ('FOOBar12AndSomething') piecesCutWhereCamelCase asArray = #('FOO' 'Bar' '12' 'And' 'Something') - " - - | start previous current next pieces | - self isEmpty ifTrue: [^self]. - start := 1. - pieces := OrderedCollection new. - 3 to: self size do: [ :index | - previous := self at: index - 2. - current := self at: index - 1. - next := self at: index. - ((previous isLowercase and: [current isUppercase]) or: [ - (previous isUppercase and: [current isUppercase and: [next isLowercase ]]) or: [ - (previous isDigit not and: [current isDigit]) or: [ - previous isDigit and: [current isDigit not] - ]]]) ifTrue: [ - pieces add: (self copyFrom: start to: index - 2). - start := index - 1]. - ]. - pieces addAll: ((self copyFrom: start to: self size) piecesCutWhere: [:a :b | - (a isDigit and: [b isDigit not]) or: [a isDigit not and: [b isDigit ]]]). - ^pieces -] - -{ #category : #'*Roassal2' } -String >> subStringsKeepingEmptyFields: separators [ - "Answer an array containing the substrings in the receiver separated - by the elements of separators." - "In addition, it makes sure that double quote do not prevent from parsing" - | result sourceStream subStringStream isInDoubleQuotes | - isInDoubleQuotes := false. - - (separators isString or: [ separators allSatisfy: [ :element | element isCharacter ] ]) - ifFalse: [ ^ self error: 'separators must be Characters.' ]. - sourceStream := self readStream. - result := OrderedCollection new. - subStringStream := String new writeStream. - [ sourceStream atEnd ] whileFalse: [ - | char | - char := sourceStream next. - (char = $") ifTrue: [ - isInDoubleQuotes := isInDoubleQuotes not ]. - - isInDoubleQuotes - ifTrue: [ subStringStream nextPut: char ] - ifFalse: [ - (separators includes: char) - ifTrue: [ - result add: subStringStream contents. - subStringStream := String new writeStream ] - ifFalse: [ - subStringStream nextPut: char ] ] ]. - - result add: subStringStream contents. - ^ result asArray -] diff --git a/src/Roassal2/Symbol.extension.st b/src/Roassal2/Symbol.extension.st deleted file mode 100644 index 9a37a4270..000000000 --- a/src/Roassal2/Symbol.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #Symbol } - -{ #category : #'*Roassal2-Core' } -Symbol >> rtValue: anObject [ - ^ anObject perform: self -] diff --git a/src/Roassal2/TBehavior.extension.st b/src/Roassal2/TBehavior.extension.st deleted file mode 100644 index 1e7438e95..000000000 --- a/src/Roassal2/TBehavior.extension.st +++ /dev/null @@ -1,8 +0,0 @@ -Extension { #name : #TBehavior } - -{ #category : #'*Roassal2' } -TBehavior >> numberOfLinesOfCode [ - "Return the amount of lines of code" - - ^ 5 + ((self rtmethods, self class rtmethods) inject: 0 into: [:sum :el | sum + el numberOfLinesOfCode ]) -] diff --git a/src/Roassal2/TClassDescription.extension.st b/src/Roassal2/TClassDescription.extension.st deleted file mode 100644 index 511b87e06..000000000 --- a/src/Roassal2/TClassDescription.extension.st +++ /dev/null @@ -1,131 +0,0 @@ -Extension { #name : #TClassDescription } - -{ #category : #'*Roassal2' } -TClassDescription >> ageInDays [ - "Return the number of days the class exists" - self numberOfMethods isZero ifTrue: [ ^ 0 ]. - ^ (DateAndTime now - self oldestMethod date) asDays -] - -{ #category : #'*Roassal2' } -TClassDescription >> ageInDaysRounded [ - "Return the number of days the class exists" - - ^ self ageInDays rounded -] - -{ #category : #'*Roassal2' } -TClassDescription >> commonSuperclassWith: aClass [ - " - Metaclass commonSuperclassWith: Class - Metaclass commonSuperclassWith: Point - Metaclass commonSuperclassWith: Metaclass - Object commonSuperclassWith: RTPopup class - " - | t1 t2 | - self == aClass ifTrue: [ ^ self ]. - t1 := self withAllSuperclasses reverse. - t2 := aClass withAllSuperclasses reverse. - 1 to: (t1 size min: t2 size) do: [ :i | - (t1 at: i) ~~ (t2 at: i) - ifTrue: [ ^ t1 at: (i - 1) ] ]. - - ^ t1 size < t2 size - ifTrue: [ t1 last ] - ifFalse: [ t2 last ] -] - -{ #category : #'*Roassal2' } -TClassDescription >> computeOldestMethod [ - | d m | - d := DateAndTime now. - m := nil. - self methods, self class methods do: [ :cm | cm date < d ifTrue: [ m := cm. d := cm date ] ]. - ^ m -] - -{ #category : #'*Roassal2' } -TClassDescription >> computeYoungestMethod [ - | d m ms aMethod | - ms := self methods, self class methods. - aMethod := ms anyOne. - d := aMethod date. - m := aMethod. - - ms do: [ :cm | cm date > d ifTrue: [ m := cm. d := cm date ] ]. - ^ m -] - -{ #category : #'*Roassal2' } -TClassDescription >> gotMethodOnDay: dayAsNumber [ - "Return true if a method has been defined on dayAsNumber. - Always returns true for dayAsNumber = 0" - | age | - age := self ageInDaysRounded. - ^ self methods anySatisfy: [ :cm | (age - cm ageInDaysRounded) = dayAsNumber ] - -] - -{ #category : #'*Roassal2' } -TClassDescription >> hasAnyMethodProducedAfterDay: aNumberOfDays [ - ^ self methods anySatisfy: [ :cm | cm livingInDays = aNumberOfDays ] - -] - -{ #category : #'*Roassal2' } -TClassDescription >> isReferencedBy: aClass [ - " - Return true or false on whether the class receiver is referenced by aClass - - Halt isReferencedBy: Object - " - ^ aClass dependentClasses includes: self -] - -{ #category : #'*Roassal2' } -TClassDescription >> livingInDays [ - self numberOfMethods isZero ifTrue: [ ^ 0 ]. - ^ (DateAndTime now - self oldestMethod date) asDays -] - -{ #category : #'*Roassal2' } -TClassDescription >> numberOfSubclasses [ - ^ self allSubclasses size -] - -{ #category : #'*Roassal2' } -TClassDescription >> numberOfVariables [ - ^ self instVarNames size -] - -{ #category : #'*Roassal2' } -TClassDescription >> oldestMethod [ - "We pick a method, and put the cache in it" - | aMethod | - aMethod := (self methods, self class methods) first. - ^ (aMethod properties includesKey: #oldestMethod) - ifTrue: [ aMethod properties at: #oldestMethod ] - ifFalse: [ | m | - m := self computeOldestMethod. - aMethod properties at: #oldestMethod put: m ] - -] - -{ #category : #'*Roassal2' } -TClassDescription >> rtmethods [ - "This method is useful to have examples working on VisualWorks" - ^ self methods -] - -{ #category : #'*Roassal2' } -TClassDescription >> youngestMethod [ - "We pick a method, and put the cache in it" - | aMethod | - aMethod := (self methods, self class methods) first. - ^ (aMethod properties includesKey: #youngestMethod) - ifTrue: [ aMethod properties at: #youngestMethod ] - ifFalse: [ | m | - m := self computeYoungestMethod. - aMethod properties at: #youngestMethod put: m ] - -] diff --git a/src/Roassal2/TRClipBoxShape.class.st b/src/Roassal2/TRClipBoxShape.class.st deleted file mode 100644 index 21b878ae2..000000000 --- a/src/Roassal2/TRClipBoxShape.class.st +++ /dev/null @@ -1,51 +0,0 @@ -Class { - #name : #TRClipBoxShape, - #superclass : #TRBoxShape, - #instVars : [ - 'edges', - 'useColor', - 'condition' - ], - #category : #'Roassal2-Experimental' -} - -{ #category : #accessing } -TRClipBoxShape >> condition: aBlockWith2Args [ - condition := aBlockWith2Args -] - -{ #category : #drawing } -TRClipBoxShape >> drawOn: athensCanvas [ - |rec c | - self shouldBeDrawn - ifFalse: [ ^ self ]. - rec := self encompassingRectangle. - edges do: [ :ed | - (condition value: rec value: ed) ifTrue: [ - c := ed color. - (useColor and: [strokePaint isNil not]) ifTrue: [ ed color: strokePaint ]. - ed trachelShape - canvas: self canvas; - drawOn: athensCanvas; - canvas: nil; - color: c ] ]. - super drawOn: athensCanvas. -] - -{ #category : #accessing } -TRClipBoxShape >> edges: ed [ - edges := ed. -] - -{ #category : #initialization } -TRClipBoxShape >> initialize [ - super initialize. - self condition: [ :rec :ed | true ]. - self useColor: true. -] - -{ #category : #accessing } -TRClipBoxShape >> useColor: aBool [ - useColor := aBool - -] diff --git a/src/Roassal2/TROSMShape.class.st b/src/Roassal2/TROSMShape.class.st deleted file mode 100644 index 6748518f7..000000000 --- a/src/Roassal2/TROSMShape.class.st +++ /dev/null @@ -1,365 +0,0 @@ -" -This Shape represent an OpenStreetMap background object which tracks the camera zoom level and translation to build a view of the corresponding part of the OpenStreetMap. - -A similar approach could work with Google maps. - -Instance Variables - osmZoomLevel: - position: - rectangle: - scale: - tiles: Form> - zoom: - -osmZoomLevel - - the zoom level in the OSM range (0 to 18, integer) - -position - - position of the shape - -rectangle - - bounds of the shape - -scale - - the scale of the shape - -tiles - - the cache of tiles, indexed by x, y - -zoom - - zoom of the shape - - -Principle: - 1.0 in Roassal space -> 1km in OSM. - R zoom to OSM zoom level: (base is 1km/pixel) - 1000 * Rzoom = 156543.034 meters/pixel / (2 ^ zoomlevel) - zoomlevel = ln( 156.543034 * Rzoom ) / ln 2 - remainderZoom = 156.543034 * Rzoom / (2 ^ zoomlevel)) - lon to Roassal space = [ :l | 40075.016686 * (l / 360) ] - lat to Roassal space = [ :l | ((Float pi / 4) + (l degreesToRadians / 2)) tan ln * 40075.016686 / (2.0 * Float pi) ] - Remember : working limit for lat/lon is ±85.05113° - -Goal: - depending on the RTView size and the canvas parameters, get the right tiles from OSM and display them. - -Algorithm: - From the camera, get the zoom level and offset. - Compute the OSM zoom level (with the camera zoom value). - Make remainder zoom a transform inside the TROSMShape. - Take corners of bounding box, get lat / long, get tiles x and y based on previous zoom level. - Set clipping rectangle to TROSMShape bounds. - Display each tile. - cache each tile. When displaying, check if tile exists. Remove tile if not used in display. -" -Class { - #name : #TROSMShape, - #superclass : #TRShape, - #instVars : [ - 'rectangle', - 'zoom', - 'osmZoomLevel', - 'tiles', - 'emptyTile', - 'semaphore', - 'copyright', - 'ratio', - 'onload' - ], - #classVars : [ - 'EmptyTile' - ], - #category : #'Roassal2-OpenStreetMap' -} - -{ #category : #resources } -TROSMShape class >> emptyTile [ - ^ EmptyTile - ifNil: [ EmptyTile := ((StringMorph contents: 'Loading...') center: 127 @ 127) imageFormForRectangle: (0 @ 0 extent: 256 @ 256) ] -] - -{ #category : #visitor } -TROSMShape >> accept: aVisitor [ - aVisitor visitOSMShape: self -] - -{ #category : #private } -TROSMShape >> checkCallback [ - | call | - onload ifNil: [ ^ self ]. - call := true. - tiles keys do: [ :k | - (tiles at: k) = self class emptyTile ifTrue: [ call:= false] ]. - call ifTrue: [ onload fork ]. -] - -{ #category : #private } -TROSMShape >> computeOsmZoomLevel [ - "The osm zoom level." - - ^ (((self pixelLength * canvas camera scale) ln / 2 ln) rounded max: 0) min: 18 -] - -{ #category : #drawing } -TROSMShape >> drawOn: athensCanvas [ - | newTiles start end | - newTiles := Dictionary new. - self updateOsmZoomLevel. - semaphore - critical: [ - athensCanvas pathTransform - restoreAfter: [ - athensCanvas pathTransform - translateBy: canvas camera position; - scaleBy: 1 / canvas camera scale asFloat. - athensCanvas - clipBy: self translatedRectangle - during: [ - start := self fromOurSpaceToTile: self translatedRectangle topLeft. - end := self fromOurSpaceToTile: self translatedRectangle bottomRight. - start x to: end x do: [ :xi | start y to: end y do: [ :yi | self drawTile: xi @ yi on: athensCanvas with: newTiles ] ]. - copyright drawOn: athensCanvas ] ]. - tiles := newTiles ] -] - -{ #category : #drawing } -TROSMShape >> drawTile: aPoint on: athensCanvas with: newTiles [ - "Draw a single tile at the right position." - - | paint | - (tiles - at: (Array with: aPoint x with: aPoint y with: osmZoomLevel) - ifAbsent: [ self getTile: aPoint ]) - ifNotNil: [ :aTile | - athensCanvas pathTransform - restoreAfter: [ - athensCanvas pathTransform - translateBy: (self fromOSMSpaceToOurSpace: aPoint * 256); - scaleBy: (self remainderZoom: osmZoomLevel). - athensCanvas setShape: aTile boundingBox. - paint := athensCanvas cacheAt: aTile ifAbsentPut: [ aTile asAthensPaintOn: athensCanvas ]. - athensCanvas setPaint: paint. - athensCanvas draw. - newTiles - at: (Array with: aPoint x with: aPoint y with: osmZoomLevel) - put: aTile ] ] -] - -{ #category : #private } -TROSMShape >> earthR [ - "Earth R according to ratio." - - ^ RTOSM earthR * self ratio -] - -{ #category : #accessing } -TROSMShape >> encompassingRectangle [ - ^ canvas camera encompassingRectangleOf: (canvas shapes copyWithout: self) -] - -{ #category : #private } -TROSMShape >> equatorLength [ - "Equator length in km. self earthR * 2* Float pi" - - ^ RTOSM equatorLength * self ratio -] - -{ #category : #private } -TROSMShape >> fromCameraSpaceToOurSpace: aPoint [ - "To convert our boundaries from the camera space into our space (0@0 at center, no zoom)." - - ^ TRPlatform current affineTransformClass new - scaleBy: canvas camera scale; - translateBy: canvas camera position negated; - transform: aPoint -] - -{ #category : #private } -TROSMShape >> fromOSMSpaceToOurSpace: aPoint [ - "Convert a point in OSM space (zoom level) into our space." - - ^ self - fromCameraSpaceToOurSpace: aPoint * self equatorLength / (2 raisedTo: osmZoomLevel) / 256 - (self equatorLength / 2) -] - -{ #category : #private } -TROSMShape >> fromOurSpaceToCameraSpace: aPoint [ - "To convert our boundaries into the camera space." - - ^ TRPlatform current affineTransformClass new - translateBy: canvas camera position; - scaleBy: 1 / canvas camera scale; - transform: aPoint -] - -{ #category : #private } -TROSMShape >> fromOurSpaceToOSMSpace: aPoint [ - "Convert our boundaries into the osm space (as set by the zoom level)." - - ^ ((self fromOurSpaceToCameraSpace: aPoint) + (self equatorLength / 2)) - // (self equatorLength / 256 / (2 raisedTo: osmZoomLevel)) -] - -{ #category : #private } -TROSMShape >> fromOurSpaceToTile: aPoint [ - "Convert our boundaries into the osm space (as set by the zoom level)." - - ^ ((self fromOurSpaceToCameraSpace: aPoint) + (self equatorLength / 2)) - // (self equatorLength / (2 raisedTo: osmZoomLevel)) -] - -{ #category : #private } -TROSMShape >> getTile: aPoint [ - "A point has to be xTile @ yTile, integers between 0 and 2^osmZoomLevel - 1" - - self assert: (aPoint x isInteger and: [ aPoint y isInteger ]). "clamp" - ((aPoint x < 0 or: [ aPoint x >= (2 raisedTo: osmZoomLevel) ]) - or: [ aPoint y < 0 or: [ aPoint y >= (2 raisedTo: osmZoomLevel) ] ]) - ifTrue: [ ^ nil ]. - tiles - at: - (Array with: (aPoint x) with: - (aPoint y) with: - osmZoomLevel) - put: self class emptyTile. - [ - | aTile z | - z := osmZoomLevel. - Processor yield. - aTile := [ - TRPlatform current downloadPng: - ('https://a.tile.openstreetmap.org' asZnUrl - addPathSegment: z printString; - addPathSegment: aPoint x printString; - addPathSegment: aPoint y printString , '.png') ] - on: Error - do: [ :ex | ]. - semaphore - critical: [ - tiles - at: - (Array with: (aPoint x) with: - (aPoint y) with: - z) - put: aTile ]. - self signalUpdate ] fork. - ^ self class emptyTile -] - -{ #category : #accessing } -TROSMShape >> includesPoint: aPoint [ - ^ self translatedRectangle containsPoint: (self fromCameraSpaceToOurSpace: aPoint) -] - -{ #category : #initialization } -TROSMShape >> initialize [ - super initialize. -" rectangle := -300 @ -300 corner: 300 @ 300. -" tiles := Dictionary new. - emptyTile := Form extent: 256 @ 256. - semaphore := Semaphore forMutualExclusion. - copyright := TRLabelShape new - fontSize: 8; - text: '© OpenStreetMap contributors'. -" copyright translateTo: rectangle corner - (copyright extent / 2)" -] - -{ #category : #private } -TROSMShape >> maxLatitude [ - ^ RTOSM maxLatitude -] - -{ #category : #private } -TROSMShape >> minLatitude [ - ^ RTOSM minLatitude -] - -{ #category : #accessing } -TROSMShape >> onload [ - ^ onload -] - -{ #category : #accessing } -TROSMShape >> onload: aBlock [ - aBlock ifNil: [ onload := nil ]. - aBlock isBlock ifTrue: [ onload := aBlock ]. -] - -{ #category : #private } -TROSMShape >> osmZoomLevel [ - ^ osmZoomLevel ifNil: [ osmZoomLevel := self computeOsmZoomLevel ] -] - -{ #category : #private } -TROSMShape >> pixelLength [ - "Pixel length at equator at highest zoom factor. " - - ^ RTOSM equatorLength * self ratio / 256 -] - -{ #category : #accessing } -TROSMShape >> position: aPosition [ - super position: aPosition. - rectangle := self rectangle. - rectangle ifNotNil: [ copyright position: aPosition + rectangle corner - (copyright extent / 2) ] -] - -{ #category : #accessing } -TROSMShape >> ratio [ - ^ ratio ifNil: [ ratio := 1.0 ] -] - -{ #category : #accessing } -TROSMShape >> ratio: aNumber [ - ^ ratio := aNumber -] - -{ #category : #accessing } -TROSMShape >> rectangle [ - ^ rectangle - ifNil: [ - canvas - ifNil: [ ] - ifNotNil: [ - | rect | - rect := canvas extent negated / 2.0 extent: canvas extent. - copyright translateTo: rect corner - (copyright extent / 2). - rect ] ] -] - -{ #category : #accessing } -TROSMShape >> rectangle: anObject [ - rectangle := anObject. - copyright translateTo: rectangle corner - (copyright extent / 2) -] - -{ #category : #private } -TROSMShape >> remainderZoom: z [ - "Remainder zoom to apply on the display." - - ^ self pixelLength * canvas camera scale * (256 / 255) asFloat / (2 raisedTo: z) -] - -{ #category : #transformations } -TROSMShape >> rotateByDegrees: angle [ - super rotateByDegrees: angle. - copyright rotateByDegrees: angle -] - -{ #category : #transformations } -TROSMShape >> scaleBy: anInteger [ - super scaleBy: anInteger. - copyright scaleBy: anInteger -] - -{ #category : #private } -TROSMShape >> translatedRectangle [ - ^ (matrix transform: self rectangle origin) corner: (matrix transform: self rectangle corner) -] - -{ #category : #private } -TROSMShape >> updateOsmZoomLevel [ - "Get the osm zoom level. Do something if we need to change the zoom level, like flushing the tile cache." - - osmZoomLevel := self computeOsmZoomLevel -] diff --git a/src/Roassal2/TRTextPath.class.st b/src/Roassal2/TRTextPath.class.st deleted file mode 100644 index 22ba13de5..000000000 --- a/src/Roassal2/TRTextPath.class.st +++ /dev/null @@ -1,37 +0,0 @@ -" -I am a simple label shape to draw text with the command textPath: -" -Class { - #name : #TRTextPath, - #superclass : #TRLabelShape, - #instVars : [ - 'outlineColor', - 'outlineWidth' - ], - #category : #'Roassal2-Experimental' -} - -{ #category : #drawing } -TRTextPath >> drawOn: athensCanvas [ - TRPlatform current drawTextPathFor: self canvas: athensCanvas -] - -{ #category : #accessing } -TRTextPath >> outlineColor [ - ^ outlineColor -] - -{ #category : #accessing } -TRTextPath >> outlineColor: aColor [ - outlineColor:= aColor -] - -{ #category : #accessing } -TRTextPath >> outlineWidth [ - ^ outlineWidth -] - -{ #category : #accessing } -TRTextPath >> outlineWidth: aNumber [ - outlineWidth := aNumber -] diff --git a/src/Roassal2/Trait.extension.st b/src/Roassal2/Trait.extension.st deleted file mode 100644 index 038343a6a..000000000 --- a/src/Roassal2/Trait.extension.st +++ /dev/null @@ -1,8 +0,0 @@ -Extension { #name : #Trait } - -{ #category : #'*Roassal2' } -Trait >> visualworksName [ - ^ self == Behavior - ifTrue: [ 'Core.Behavior' ] - ifFalse: [ self name ] -] diff --git a/src/Roassal2/TraitBehavior.extension.st b/src/Roassal2/TraitBehavior.extension.st deleted file mode 100644 index 628bb74bb..000000000 --- a/src/Roassal2/TraitBehavior.extension.st +++ /dev/null @@ -1,15 +0,0 @@ -Extension { #name : #TraitBehavior } - -{ #category : #'*Roassal2' } -TraitBehavior >> numberOfLinesOfCode [ - "Return the amount of lines of code" - - ^ 5 + ((self rtmethods, self class rtmethods) inject: 0 into: [:sum :el | sum + el numberOfLinesOfCode ]) -] - -{ #category : #'*Roassal2' } -TraitBehavior >> visualworksName [ - ^ (#('WA' 'SU' 'CT') includes: (self name copyFrom: 1 to: 2)) - ifTrue: ['Seaside.', self name] - ifFalse: [self name] -] diff --git a/src/Roassal2/TraitDescription.extension.st b/src/Roassal2/TraitDescription.extension.st deleted file mode 100644 index 0a660d446..000000000 --- a/src/Roassal2/TraitDescription.extension.st +++ /dev/null @@ -1,8 +0,0 @@ -Extension { #name : #TraitDescription } - -{ #category : #'*Roassal2' } -TraitDescription >> ageInDays [ - "Return the number of days the class exists" - self numberOfMethods isZero ifTrue: [ ^ 0 ]. - ^ (DateAndTime now - self oldestMethod date) asDays -] diff --git a/src/Roassal2/package.st b/src/Roassal2/package.st deleted file mode 100644 index f7766fc97..000000000 --- a/src/Roassal2/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #Roassal2 } diff --git a/src/Roassal2GT/GLMAbstractExportingAction.class.st b/src/Roassal2GT/GLMAbstractExportingAction.class.st deleted file mode 100644 index a30f452f8..000000000 --- a/src/Roassal2GT/GLMAbstractExportingAction.class.st +++ /dev/null @@ -1,45 +0,0 @@ -Class { - #name : #GLMAbstractExportingAction, - #superclass : #GLMRoassal2Action, - #category : #'Roassal2GT-Glamour-Actions' -} - -{ #category : #accessing } -GLMAbstractExportingAction >> category [ - ^ 'Export as...' -] - -{ #category : #hooks } -GLMAbstractExportingAction >> doExportToFull: fileName [ - - self subclassResponsibility -] - -{ #category : #hooks } -GLMAbstractExportingAction >> execute [ - | fileName | - fileName := UITheme builder - fileSave: 'Enter the ', self titleExtension,' file name' - extensions: self extensions - path: nil. - fileName notNil ifTrue: [ - self doExportToFull: fileName asAbsolute ] -] - -{ #category : #hooks } -GLMAbstractExportingAction >> extensions [ - " - May return for example: #('png') - " - ^ #() -] - -{ #category : #hooks } -GLMAbstractExportingAction >> title [ - ^ 'Export to ', self titleExtension -] - -{ #category : #hooks } -GLMAbstractExportingAction >> titleExtension [ - ^ 'TOOVERRIDE' -] diff --git a/src/Roassal2GT/GLMAbstractSetContextAction.class.st b/src/Roassal2GT/GLMAbstractSetContextAction.class.st deleted file mode 100644 index 61394e91c..000000000 --- a/src/Roassal2GT/GLMAbstractSetContextAction.class.st +++ /dev/null @@ -1,34 +0,0 @@ -Class { - #name : #GLMAbstractSetContextAction, - #superclass : #GLMRoassal2Action, - #category : #'Roassal2GT-Glamour-Actions' -} - -{ #category : #accessing } -GLMAbstractSetContextAction >> category [ - ^ 'Set context...' -] - -{ #category : #accessing } -GLMAbstractSetContextAction >> contextClass [ - "Override to return the class to be considered" - self subclassResponsibility -] - -{ #category : #hooks } -GLMAbstractSetContextAction >> execute [ - "This method is executed by the menu offered by the Playground. Method #contextClass and #title have to be overriden" -" self inform: self roassalPresentation hash asString." - self contextClass setOnView: self roassalView. - self roassalUpdate -] - -{ #category : #hooks } -GLMAbstractSetContextAction >> order [ - ^ 50 -] - -{ #category : #hooks } -GLMAbstractSetContextAction >> title [ - ^ 'Set context ', self contextClass name -] diff --git a/src/Roassal2GT/GLMAddLabelAction.class.st b/src/Roassal2GT/GLMAddLabelAction.class.st deleted file mode 100644 index 5d999ab5e..000000000 --- a/src/Roassal2GT/GLMAddLabelAction.class.st +++ /dev/null @@ -1,32 +0,0 @@ -Class { - #name : #GLMAddLabelAction, - #superclass : #GLMRoassal2Action, - #category : #'Roassal2GT-Glamour-Actions' -} - -{ #category : #accessing } -GLMAddLabelAction >> category [ - ^ 'Interactions...' -] - -{ #category : #hooks } -GLMAddLabelAction >> execute [ - | msg lbl height | - self roassalView when: TRMouseDoubleClick do: [ :evt | - msg := UIManager default request: 'Enter a label'. - (msg notEmpty and: [ msg ~= '' ]) ifTrue: [ - height := (self roassalView canvas camera distanceFromPixelToSpace: 20 @ 0) x. - lbl := (RTLabel new height: height) elementOn: msg. - self roassalView add: lbl. - lbl @ RTDraggable. - lbl translateTo: evt position. - self roassalUpdate - ] - ]. - -] - -{ #category : #hooks } -GLMAddLabelAction >> title [ - ^ 'Double click to add label' -] diff --git a/src/Roassal2GT/GLMAddScrollbarAction.class.st b/src/Roassal2GT/GLMAddScrollbarAction.class.st deleted file mode 100644 index 8ff75a589..000000000 --- a/src/Roassal2GT/GLMAddScrollbarAction.class.st +++ /dev/null @@ -1,21 +0,0 @@ -Class { - #name : #GLMAddScrollbarAction, - #superclass : #GLMRoassal2Action, - #category : #'Roassal2GT-Glamour-Actions' -} - -{ #category : #accessing } -GLMAddScrollbarAction >> category [ - ^ 'Interactions...' -] - -{ #category : #hooks } -GLMAddScrollbarAction >> execute [ - self roassalView @ RTDoubleScrollBar. - self roassalUpdate -] - -{ #category : #hooks } -GLMAddScrollbarAction >> title [ - ^ 'Add scrollbars' -] diff --git a/src/Roassal2GT/GLMBoxZoomAction.class.st b/src/Roassal2GT/GLMBoxZoomAction.class.st deleted file mode 100644 index e1ba0405d..000000000 --- a/src/Roassal2GT/GLMBoxZoomAction.class.st +++ /dev/null @@ -1,22 +0,0 @@ -Class { - #name : #GLMBoxZoomAction, - #superclass : #GLMRoassal2Action, - #category : #'Roassal2GT-Glamour-Actions' -} - -{ #category : #accessing } -GLMBoxZoomAction >> category [ - ^ 'Interactions...' -] - -{ #category : #hooks } -GLMBoxZoomAction >> execute [ - | int | - int := RTZoomableBoxView new. - self roassalView @ int. -] - -{ #category : #hooks } -GLMBoxZoomAction >> title [ - ^ 'Add RTZoomableBoxView' -] diff --git a/src/Roassal2GT/GLMCameraCenterAction.class.st b/src/Roassal2GT/GLMCameraCenterAction.class.st deleted file mode 100644 index 506f7f2d6..000000000 --- a/src/Roassal2GT/GLMCameraCenterAction.class.st +++ /dev/null @@ -1,26 +0,0 @@ -Class { - #name : #GLMCameraCenterAction, - #superclass : #GLMRoassal2Action, - #category : #'Roassal2GT-Glamour-Actions' -} - -{ #category : #hooks } -GLMCameraCenterAction >> execute [ - self trachelCanvas focusOnCenterScaled. - self roassalUpdate -] - -{ #category : #hooks } -GLMCameraCenterAction >> icon [ - ^ GLMUIThemeExtraIcons glamorousZoomToFit -] - -{ #category : #hooks } -GLMCameraCenterAction >> order [ - ^ 6 -] - -{ #category : #hooks } -GLMCameraCenterAction >> title [ - ^ 'Camera center' -] diff --git a/src/Roassal2GT/GLMCameraCenterActionTest.class.st b/src/Roassal2GT/GLMCameraCenterActionTest.class.st deleted file mode 100644 index 27cea319a..000000000 --- a/src/Roassal2GT/GLMCameraCenterActionTest.class.st +++ /dev/null @@ -1,14 +0,0 @@ -Class { - #name : #GLMCameraCenterActionTest, - #superclass : #TestCase, - #category : #'Roassal2GT-Glamour-Actions' -} - -{ #category : #tests } -GLMCameraCenterActionTest >> testBasic [ - - | inst | - inst := GLMCameraCenterAction new. - inst roassalPresentation: GLMRoassal2Presentation new. - inst execute -] diff --git a/src/Roassal2GT/GLMCompositePresentation.extension.st b/src/Roassal2GT/GLMCompositePresentation.extension.st deleted file mode 100644 index 876145a4d..000000000 --- a/src/Roassal2GT/GLMCompositePresentation.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #GLMCompositePresentation } - -{ #category : #'*Roassal2GT-Glamour' } -GLMCompositePresentation >> roassal2 [ - ^ self custom: GLMRoassal2Presentation new -] diff --git a/src/Roassal2GT/GLMEmptyContextAction.class.st b/src/Roassal2GT/GLMEmptyContextAction.class.st deleted file mode 100644 index 7b6e30e9b..000000000 --- a/src/Roassal2GT/GLMEmptyContextAction.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #GLMEmptyContextAction, - #superclass : #GLMAbstractSetContextAction, - #category : #'Roassal2GT-Glamour-Actions' -} - -{ #category : #accessing } -GLMEmptyContextAction >> contextClass [ - ^ RTEmptyViewContext -] diff --git a/src/Roassal2GT/GLMFindInViewAction.class.st b/src/Roassal2GT/GLMFindInViewAction.class.st deleted file mode 100644 index 3ae622e9e..000000000 --- a/src/Roassal2GT/GLMFindInViewAction.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #GLMFindInViewAction, - #superclass : #GLMRoassal2Action, - #category : #'Roassal2GT-Glamour-Actions' -} - -{ #category : #hooks } -GLMFindInViewAction >> execute [ - GTSpotterMorph new - extent: 400@500; - spotterModel: (GTSpotter on: self roassalView); - openCenteredInWorld -] - -{ #category : #hooks } -GLMFindInViewAction >> icon [ - ^ GLMUIThemeExtraIcons glamorousInspect -] - -{ #category : #hooks } -GLMFindInViewAction >> order [ - ^ 50 -] - -{ #category : #hooks } -GLMFindInViewAction >> title [ - ^ 'Find' -] diff --git a/src/Roassal2GT/GLMHTMLExporting2Action.class.st b/src/Roassal2GT/GLMHTMLExporting2Action.class.st deleted file mode 100644 index fc69bed33..000000000 --- a/src/Roassal2GT/GLMHTMLExporting2Action.class.st +++ /dev/null @@ -1,24 +0,0 @@ -Class { - #name : #GLMHTMLExporting2Action, - #superclass : #GLMAbstractExportingAction, - #category : #'Roassal2GT-Glamour-Actions' -} - -{ #category : #hooks } -GLMHTMLExporting2Action >> doExportToFull: fileName [ - RTHTML5Exporter new - directory: fileName parent; - fileName: fileName basename; - export: self roassalView. - -] - -{ #category : #hooks } -GLMHTMLExporting2Action >> extensions [ - ^ #('html') -] - -{ #category : #hooks } -GLMHTMLExporting2Action >> titleExtension [ - ^ 'HTML...' -] diff --git a/src/Roassal2GT/GLMHTMLExportingAction.class.st b/src/Roassal2GT/GLMHTMLExportingAction.class.st deleted file mode 100644 index 17636a822..000000000 --- a/src/Roassal2GT/GLMHTMLExportingAction.class.st +++ /dev/null @@ -1,40 +0,0 @@ -Class { - #name : #GLMHTMLExportingAction, - #superclass : #GLMRoassal2Action, - #category : #'Roassal2GT-Glamour-Actions' -} - -{ #category : #accessing } -GLMHTMLExportingAction >> category [ - ^ 'Export as...' -] - -{ #category : #hooks } -GLMHTMLExportingAction >> execute [ - | fileName | - fileName := (RTHTML5Exporter new export: self roassalView) asUrl. - "self openIfPossible: fileName." -] - -{ #category : #hooks } -GLMHTMLExportingAction >> openIfPossible: fileName [ - " - By Sean - - Gofer it - smalltalkhubUser: 'SeanDeNigris' project: 'SeansPlayground'; - package: 'NewExternalWebBrowser'; - load. - - 'http://google.com' asUrl open. - " - - #NewExternalWebBrowser asClassIfPresent: [ :cls | fileName asUrl open ]. - #NewExternalWebBrowser asClassIfAbsent: [ - self inform: 'Try to load NewExternalWebBrowser to fast open of this file' ]. -] - -{ #category : #hooks } -GLMHTMLExportingAction >> title [ - ^ 'Export to HTML' -] diff --git a/src/Roassal2GT/GLMHTMLExportingWithoutFixedShapesAction.class.st b/src/Roassal2GT/GLMHTMLExportingWithoutFixedShapesAction.class.st deleted file mode 100644 index 240e1ebee..000000000 --- a/src/Roassal2GT/GLMHTMLExportingWithoutFixedShapesAction.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #GLMHTMLExportingWithoutFixedShapesAction, - #superclass : #GLMAbstractExportingAction, - #category : #'Roassal2GT-Glamour-Actions' -} - -{ #category : #hooks } -GLMHTMLExportingWithoutFixedShapesAction >> doExportToFull: fileName [ - RTHTML5Exporter new - directory: fileName parent; - fileName: fileName basename; - exportFixedShapes: false; - export: self roassalView. - -] - -{ #category : #hooks } -GLMHTMLExportingWithoutFixedShapesAction >> extensions [ - ^ #('html') -] - -{ #category : #hooks } -GLMHTMLExportingWithoutFixedShapesAction >> titleExtension [ - ^ 'HTML (without fixed shapes)...' -] diff --git a/src/Roassal2GT/GLMInspectViewAction.class.st b/src/Roassal2GT/GLMInspectViewAction.class.st deleted file mode 100644 index 8463b6c32..000000000 --- a/src/Roassal2GT/GLMInspectViewAction.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #GLMInspectViewAction, - #superclass : #GLMRoassal2Action, - #category : #'Roassal2GT-Glamour-Actions' -} - -{ #category : #hooks } -GLMInspectViewAction >> execute [ - self roassalView inspect -] - -{ #category : #hooks } -GLMInspectViewAction >> title [ - ^ 'Inspect View' -] diff --git a/src/Roassal2GT/GLMInteractiveContextAction.class.st b/src/Roassal2GT/GLMInteractiveContextAction.class.st deleted file mode 100644 index 9f72bf45e..000000000 --- a/src/Roassal2GT/GLMInteractiveContextAction.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #GLMInteractiveContextAction, - #superclass : #GLMAbstractSetContextAction, - #category : #'Roassal2GT-Glamour-Actions' -} - -{ #category : #accessing } -GLMInteractiveContextAction >> contextClass [ - ^ RTInteractiveViewContext -] diff --git a/src/Roassal2GT/GLMMorphicRenderer.extension.st b/src/Roassal2GT/GLMMorphicRenderer.extension.st deleted file mode 100644 index d911e72e6..000000000 --- a/src/Roassal2GT/GLMMorphicRenderer.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #GLMMorphicRenderer } - -{ #category : #'*Roassal2GT-Glamour' } -GLMMorphicRenderer >> renderRoassal2Presentation: aPresentation [ - ^ GLMMorphicRoassal2Renderer render: aPresentation from: self -] diff --git a/src/Roassal2GT/GLMMorphicRoassal2Renderer.class.st b/src/Roassal2GT/GLMMorphicRoassal2Renderer.class.st deleted file mode 100644 index b36fbd2c3..000000000 --- a/src/Roassal2GT/GLMMorphicRoassal2Renderer.class.st +++ /dev/null @@ -1,39 +0,0 @@ -" -A GLMMorphicRoassalRenderer is xxxxxxxxx. - -Instance Variables - myMorph: - -myMorph - - xxxxx - -" -Class { - #name : #GLMMorphicRoassal2Renderer, - #superclass : #GLMMorphicWidgetRenderer, - #instVars : [ - 'myMorph' - ], - #category : #'Roassal2GT-Glamour' -} - -{ #category : #rendering } -GLMMorphicRoassal2Renderer >> actOnPresentationUpdate: ann [ - | aView canvas | - aView := ann presentation newViewBlock value. - ann presentation renderOn: aView. - canvas := aView view setUpCanvas. - myMorph - canvas: canvas; - extent: canvas extent. - -] - -{ #category : #rendering } -GLMMorphicRoassal2Renderer >> render: aRoassalPresentation [ - | view | - view := aRoassalPresentation view. - aRoassalPresentation renderOn: view. - aRoassalPresentation when: GLMPresentationUpdated send: #actOnPresentationUpdate: to: self. - ^ myMorph := view view setUpCanvas buildMorph -] diff --git a/src/Roassal2GT/GLMPNGExporting2Action.class.st b/src/Roassal2GT/GLMPNGExporting2Action.class.st deleted file mode 100644 index 268f96328..000000000 --- a/src/Roassal2GT/GLMPNGExporting2Action.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #GLMPNGExporting2Action, - #superclass : #GLMAbstractExportingAction, - #category : #'Roassal2GT-Glamour-Actions' -} - -{ #category : #hooks } -GLMPNGExporting2Action >> doExportToFull: fileName [ - RTPNGExporter new - withScale; - builder: self roassalView; - fileName: fileName fullName; - exportToFile. -] - -{ #category : #hooks } -GLMPNGExporting2Action >> extensions [ - ^ #('png') -] - -{ #category : #hooks } -GLMPNGExporting2Action >> titleExtension [ - ^ 'PNG with scale' - -] diff --git a/src/Roassal2GT/GLMPNGExportingAction.class.st b/src/Roassal2GT/GLMPNGExportingAction.class.st deleted file mode 100644 index 9b8e1df96..000000000 --- a/src/Roassal2GT/GLMPNGExportingAction.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #GLMPNGExportingAction, - #superclass : #GLMAbstractExportingAction, - #category : #'Roassal2GT-Glamour-Actions' -} - -{ #category : #hooks } -GLMPNGExportingAction >> doExportToFull: fileName [ - - RTPNGExporter new - builder: self roassalView; - fileName: fileName fullName; - exportToFile. -] - -{ #category : #'as yet unclassified' } -GLMPNGExportingAction >> extensions [ - ^ #('png') -] - -{ #category : #'as yet unclassified' } -GLMPNGExportingAction >> titleExtension [ - ^ 'PNG' - -] diff --git a/src/Roassal2GT/GLMRoassal2Action.class.st b/src/Roassal2GT/GLMRoassal2Action.class.st deleted file mode 100644 index fa33ace1f..000000000 --- a/src/Roassal2GT/GLMRoassal2Action.class.st +++ /dev/null @@ -1,95 +0,0 @@ -Class { - #name : #GLMRoassal2Action, - #superclass : #RTObject, - #instVars : [ - 'roassalPresentation' - ], - #category : #'Roassal2GT-Glamour-Actions' -} - -{ #category : #initialization } -GLMRoassal2Action class >> allLeafSubclasses [ - ^ self allSubclasses select: #isLeaf -] - -{ #category : #initialization } -GLMRoassal2Action class >> initializePresentation: aRoassal2Presentation [ - | instances orderedInstances | - instances := self allLeafSubclasses collect: #new. - orderedInstances := instances sortedAs: #order. - orderedInstances do: [ :inst | - inst icon notNil - ifTrue: [ aRoassal2Presentation - act: [ :r | inst executeOn: r ] - icon: inst icon - entitled: inst title ] - ifFalse: [ aRoassal2Presentation - act: [ :r | inst executeOn: r ] - entitled: inst title - categorized: inst category ] ] -] - -{ #category : #testing } -GLMRoassal2Action class >> isLeaf [ - ^ self subclasses size = 0 -] - -{ #category : #accessing } -GLMRoassal2Action >> category [ - ^ nil -] - -{ #category : #hooks } -GLMRoassal2Action >> execute [ - "Override please" - self subclassResponsibility -] - -{ #category : #hooks } -GLMRoassal2Action >> executeOn: aPresentation [ - self roassalPresentation: aPresentation. - self execute -] - -{ #category : #hooks } -GLMRoassal2Action >> icon [ - "Override please" - ^ nil -] - -{ #category : #hooks } -GLMRoassal2Action >> order [ - ^ 10 -] - -{ #category : #accessing } -GLMRoassal2Action >> roassalPresentation [ - ^ roassalPresentation -] - -{ #category : #accessing } -GLMRoassal2Action >> roassalPresentation: anObject [ - roassalPresentation := anObject -] - -{ #category : #do } -GLMRoassal2Action >> roassalUpdate [ - self roassalView signalUpdate -] - -{ #category : #accessing } -GLMRoassal2Action >> roassalView [ - "Return the roassal view. Handy to be used in the actions" - ^ self roassalPresentation view view -] - -{ #category : #hooks } -GLMRoassal2Action >> title [ - "Override please" - ^ 'Unamed' -] - -{ #category : #accessing } -GLMRoassal2Action >> trachelCanvas [ - ^ self roassalView canvas -] diff --git a/src/Roassal2GT/GLMRoassal2ActionTest.class.st b/src/Roassal2GT/GLMRoassal2ActionTest.class.st deleted file mode 100644 index ed1820601..000000000 --- a/src/Roassal2GT/GLMRoassal2ActionTest.class.st +++ /dev/null @@ -1,14 +0,0 @@ -Class { - #name : #GLMRoassal2ActionTest, - #superclass : #TestCase, - #category : #'Roassal2GT-Glamour-Actions' -} - -{ #category : #tests } -GLMRoassal2ActionTest >> testInitialize [ - | prez nbActionOriginal | - prez := GLMRoassal2Presentation new. - nbActionOriginal := prez actions size. - GLMRoassal2Action initializePresentation: prez. - self assert: prez actions size - nbActionOriginal equals: GLMRoassal2Action allLeafSubclasses size. -] diff --git a/src/Roassal2GT/GLMRoassal2MorphicTest.class.st b/src/Roassal2GT/GLMRoassal2MorphicTest.class.st deleted file mode 100644 index 6a1a9e700..000000000 --- a/src/Roassal2GT/GLMRoassal2MorphicTest.class.st +++ /dev/null @@ -1,125 +0,0 @@ -" -A GLMRoassalMorphicTest is xxxxxxxxx. - -" -Class { - #name : #GLMRoassal2MorphicTest, - #superclass : #GLMMorphicTest, - #category : #'Roassal2GT-Glamour' -} - -{ #category : #tests } -GLMRoassal2MorphicTest >> testCanvas [ - | composer roassalMorph | - composer := GLMCompositePresentation new. - composer roassal2 painting: [:view :input | view add: RTElement new]. - window := composer openOn: 42. - - roassalMorph := self find: TRMorph in: window. - self assert: (roassalMorph isKindOf: TRMorph) -] - -{ #category : #tests } -GLMRoassal2MorphicTest >> testMondrianViewBuilder [ - | composite | - composite := GLMCompositePresentation new. - composite roassal2 - initializeView: [ RTMondrian new ]; - painting: [ :view | view nodes: (1 to: 42) ]. - window := composite openOn: 42. - self assert: composite first view class = RTMondrian. - self assert: composite first view view elements size = 42 -] - -{ #category : #tests } -GLMRoassal2MorphicTest >> testOpenTitled [ - | v | - v := RTBuilder new view. - window := v openTitled: 'hello' -] - -{ #category : #tests } -GLMRoassal2MorphicTest >> testOpenWithToolbarEntitled [ - - window := RTBuilder new openWithToolbarEntitled: 'hello' -] - -{ #category : #tests } -GLMRoassal2MorphicTest >> testOpenWithToolbarEntitled02 [ - - | v | - v := RTView new. - - window := v openWithToolbarEntitled: 'hello' -] - -{ #category : #tests } -GLMRoassal2MorphicTest >> testRoassalPresentationConstructor [ - | composite | - composite := GLMCompositePresentation new. - composite roassal2. - self assert: composite presentations size equals: 1. - self assert: (composite presentations anyOne isKindOf: GLMRoassal2Presentation) -] - -{ #category : #tests } -GLMRoassal2MorphicTest >> testUpdateUsesNewView [ - | browser originalView newView | - browser := GLMWrapper new. - browser show: [ :a | - a roassal2 painting: [:view :roassal2 :input | view add: RTElement new ]]. - window := browser openOn: $d. - - originalView := (self find: TRMorph in: window) trachelCanvas. - browser panes first presentations first update. - newView := (self find: TRMorph in: window) trachelCanvas. - - self assert: newView ~~ originalView - -] - -{ #category : #tests } -GLMRoassal2MorphicTest >> testUpdateViewIsProperlyLaidOut [ - | browser originalView newView | - browser := GLMTabulator new. - browser column: #one. - browser transmit - to: #one; - andShow: [ :a | a roassal2 painting: [ :view :input | - view addAll: (RTBox elementsOn: ($a to: input)). - RTHorizontalLineLayout on: view elements ] ]. - window := browser openOn: $d. - originalView := browser panes first presentations first view. - self assert: (originalView elements detect: [ :each | each model = $b ]) center x equals: 17.5. - browser panes first presentations first update. - newView := browser panes first presentations first view. - self assert: (newView elements detect: [ :each | each model = $b ]) center x equals: 17.5 -] - -{ #category : #tests } -GLMRoassal2MorphicTest >> testZoomingActionsWorkForMondrianBuilder [ - | composite | - composite := GLMCompositePresentation new. - composite roassal2 initializeView: RTMondrian new. - window := composite openOn: 42. - self assert: composite first actions notEmpty. - "these are the zooming actions" - self shouldnt: (composite first actions first actOn: composite first) raise: Error. - self shouldnt: (composite first actions second actOn: composite first) raise: Error. - self shouldnt: (composite first actions third actOn: composite first) raise: Error - -] - -{ #category : #tests } -GLMRoassal2MorphicTest >> testZoomingActionsWorkForView [ - | composite | - composite := GLMCompositePresentation new. - composite roassal2. - window := composite openOn: 42. - self assert: composite first actions notEmpty. - "these are the zooming actions" - self shouldnt: (composite first actions first actOn: composite first) raise: Error. - self shouldnt: (composite first actions second actOn: composite first) raise: Error. - self shouldnt: (composite first actions third actOn: composite first) raise: Error - -] diff --git a/src/Roassal2GT/GLMRoassal2Presentation.class.st b/src/Roassal2GT/GLMRoassal2Presentation.class.st deleted file mode 100644 index ce81aa965..000000000 --- a/src/Roassal2GT/GLMRoassal2Presentation.class.st +++ /dev/null @@ -1,164 +0,0 @@ -" -A GLMRoassalPresentation is xxxxxxxxx. - -Instance Variables - newViewBlock: - painting: - paintingBlock: - shouldPopulateSelection: - view: - -newViewBlock - - xxxxx - -painting - - xxxxx - -paintingBlock - - xxxxx - -shouldPopulateSelection - - xxxxx - -view - - xxxxx - -" -Class { - #name : #GLMRoassal2Presentation, - #superclass : #GLMPresentation, - #instVars : [ - 'painting', - 'paintingBlock', - 'view', - 'shouldPopulateSelection', - 'newViewBlock' - ], - #category : #'Roassal2GT-Glamour' -} - -{ #category : #'scripting actions' } -GLMRoassal2Presentation >> act: aBlock entitled: aString categorized: anotherString help: anotherString2 [ - - self - addAction: - ((GLMGenericAction new) - action: aBlock; - title: aString; - category: anotherString; - help: anotherString2; - yourself) -] - -{ #category : #'initialize-release' } -GLMRoassal2Presentation >> defaultActions [ - GLMRoassal2Action initializePresentation: self -] - -{ #category : #context } -GLMRoassal2Presentation >> getContextFor: aView [ - "Return the context associated to the view. It none is defined, then this method create one, and set it in view." - | context | - context := RTAbstractViewContext getContextFor: aView. - context view: aView. - context presentation: self. - ^ context -] - -{ #category : #'initialize-release' } -GLMRoassal2Presentation >> initialize [ - super initialize. - newViewBlock := [ RTView new ]. - shouldPopulateSelection := true. - self defaultActions -] - -{ #category : #accessing } -GLMRoassal2Presentation >> initializeView: aZeroArgBlock [ - ^ newViewBlock := aZeroArgBlock -] - -{ #category : #accessing } -GLMRoassal2Presentation >> newView [ - view := nil. - ^ self view -] - -{ #category : #accessing } -GLMRoassal2Presentation >> newViewBlock [ - ^ newViewBlock -] - -{ #category : #'initialize-release' } -GLMRoassal2Presentation >> openIfPossible: fileName [ - " - By Sean - - Gofer it - smalltalkhubUser: 'SeanDeNigris' project: 'SeansPlayground'; - package: 'NewExternalWebBrowser'; - load. - - 'http://google.com' asUrl open. - " - - #NewExternalWebBrowser asClassIfPresent: [ :cls | fileName asUrl open ]. - #NewExternalWebBrowser asClassIfAbsent: [ - self inform: 'Try to load NewExternalWebBrowser to fast open of this file' ]. -] - -{ #category : #scripting } -GLMRoassal2Presentation >> painting: anObject [ - paintingBlock := anObject -] - -{ #category : #accessing } -GLMRoassal2Presentation >> paintingBlock [ - ^ paintingBlock -] - -{ #category : #rendering } -GLMRoassal2Presentation >> renderGlamorouslyOn: aRenderer [ - self registerAnnouncements. - ^ aRenderer renderRoassal2Presentation: self -] - -{ #category : #rendering } -GLMRoassal2Presentation >> renderOn: aViewOrBuilder [ - self paintingBlock - glamourValue: - aViewOrBuilder asGlamorousMultiValue , self entity asGlamorousMultiValue - , self asGlamorousMultiValue. - aViewOrBuilder build. - self useContextToInitialize: aViewOrBuilder view. - self view: aViewOrBuilder -] - -{ #category : #accessing } -GLMRoassal2Presentation >> shouldPopulateSelection [ - ^ shouldPopulateSelection -] - -{ #category : #accessing } -GLMRoassal2Presentation >> shouldPopulateSelection: aBoolean [ - "Configure whether elements present in the view should be clickable or not" - shouldPopulateSelection := aBoolean -] - -{ #category : #context } -GLMRoassal2Presentation >> useContextToInitialize: roassalView [ - "Use the context of the view to initilize the view" - | context | - context := self getContextFor: roassalView. - context adjustView: roassalView inPresentation: self -] - -{ #category : #accessing } -GLMRoassal2Presentation >> view [ - ^ view ifNil: [ view := self newViewBlock value ] -] - -{ #category : #accessing } -GLMRoassal2Presentation >> view: aRTView [ - view := aRTView -] diff --git a/src/Roassal2GT/GLMSVGExportingAction.class.st b/src/Roassal2GT/GLMSVGExportingAction.class.st deleted file mode 100644 index 9a46aa538..000000000 --- a/src/Roassal2GT/GLMSVGExportingAction.class.st +++ /dev/null @@ -1,24 +0,0 @@ -Class { - #name : #GLMSVGExportingAction, - #superclass : #GLMAbstractExportingAction, - #category : #'Roassal2GT-Glamour-Actions' -} - -{ #category : #hooks } -GLMSVGExportingAction >> doExportToFull: fileName [ - - RTSVGExporter - exportBuilderAsSVG: self roassalView - filename: fileName asAbsolute -] - -{ #category : #hooks } -GLMSVGExportingAction >> extensions [ - ^ #('SVG') -] - -{ #category : #hooks } -GLMSVGExportingAction >> titleExtension [ - ^ 'SVG' - -] diff --git a/src/Roassal2GT/GLMSelectionBox.class.st b/src/Roassal2GT/GLMSelectionBox.class.st deleted file mode 100644 index 0261d66f3..000000000 --- a/src/Roassal2GT/GLMSelectionBox.class.st +++ /dev/null @@ -1,22 +0,0 @@ -Class { - #name : #GLMSelectionBox, - #superclass : #GLMRoassal2Action, - #category : #'Roassal2GT-Glamour-Actions' -} - -{ #category : #accessing } -GLMSelectionBox >> category [ - ^ 'Interactions...' -] - -{ #category : #hooks } -GLMSelectionBox >> execute [ - | int | - int := RTSelectionBox new. - self roassalView @ int. -] - -{ #category : #hooks } -GLMSelectionBox >> title [ - ^ 'Add RTSelectionBox' -] diff --git a/src/Roassal2GT/GLMZoomInAction.class.st b/src/Roassal2GT/GLMZoomInAction.class.st deleted file mode 100644 index 27f9f6285..000000000 --- a/src/Roassal2GT/GLMZoomInAction.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #GLMZoomInAction, - #superclass : #GLMRoassal2Action, - #category : #'Roassal2GT-Glamour-Actions' -} - -{ #category : #hooks } -GLMZoomInAction >> execute [ - RTZoomInMove on: self roassalView -] - -{ #category : #hooks } -GLMZoomInAction >> icon [ - ^ GLMUIThemeExtraIcons glamorousZoomIn -] - -{ #category : #hooks } -GLMZoomInAction >> order [ - ^ 1 -] - -{ #category : #hooks } -GLMZoomInAction >> title [ - ^ 'Zoom in' -] diff --git a/src/Roassal2GT/GLMZoomOutAction.class.st b/src/Roassal2GT/GLMZoomOutAction.class.st deleted file mode 100644 index 949550811..000000000 --- a/src/Roassal2GT/GLMZoomOutAction.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #GLMZoomOutAction, - #superclass : #GLMRoassal2Action, - #category : #'Roassal2GT-Glamour-Actions' -} - -{ #category : #hooks } -GLMZoomOutAction >> execute [ - RTZoomOutMove on: self roassalView -] - -{ #category : #hooks } -GLMZoomOutAction >> icon [ - ^ GLMUIThemeExtraIcons glamorousZoomOut -] - -{ #category : #hooks } -GLMZoomOutAction >> order [ - ^ 5 -] - -{ #category : #hooks } -GLMZoomOutAction >> title [ - ^ 'Zoom in' -] diff --git a/src/Roassal2GT/Object.extension.st b/src/Roassal2GT/Object.extension.st deleted file mode 100644 index cc08f9051..000000000 --- a/src/Roassal2GT/Object.extension.st +++ /dev/null @@ -1,14 +0,0 @@ -Extension { #name : #Object } - -{ #category : #'*Roassal2GT-Spotter' } -Object >> spotterForRenderingShapesFor: aStep [ - - (aStep hasPreviousNavigationFromClass: RTView) ifTrue: [ - aStep listProcessor - title: 'Shapes'; - candidatesLimit: 5; - allCandidates: [ aStep previousStep origin elements select: [ :each | each model = self ] ]; - itemName: [ :each | each gtDisplayString, ' [', each shape class name, ']' ]; - filter: GTFilterSubstring; - wantsToDisplayOnEmptyQuery: true ] -] diff --git a/src/Roassal2GT/RTAbstractContextInteraction.class.st b/src/Roassal2GT/RTAbstractContextInteraction.class.st deleted file mode 100644 index 716a57ea6..000000000 --- a/src/Roassal2GT/RTAbstractContextInteraction.class.st +++ /dev/null @@ -1,18 +0,0 @@ -Class { - #name : #RTAbstractContextInteraction, - #superclass : #RTInteraction, - #instVars : [ - 'presentation' - ], - #category : #'Roassal2GT-Glamour-Roassal-Interaction' -} - -{ #category : #accessing } -RTAbstractContextInteraction >> presentation [ - ^ presentation -] - -{ #category : #accessing } -RTAbstractContextInteraction >> presentation: aGLRoassalPresentation [ - presentation := aGLRoassalPresentation -] diff --git a/src/Roassal2GT/RTAbstractExample.extension.st b/src/Roassal2GT/RTAbstractExample.extension.st deleted file mode 100644 index 4d6d0c9ff..000000000 --- a/src/Roassal2GT/RTAbstractExample.extension.st +++ /dev/null @@ -1,63 +0,0 @@ -Extension { #name : #RTAbstractExample } - -{ #category : #'*Roassal2GT-Inspector' } -RTAbstractExample >> gtDisplayExamplesIn: aComposite [ - - ^ (self gtInspectorPreviewIn: aComposite) - title: 'E.g' -] - -{ #category : #'*Roassal2GT-Inspector' } -RTAbstractExample >> gtInspectorPreviewIn: composite [ - - ^ composite roassal2 - title: 'Examples'; - when: [ self gtExamples notEmpty ]; - send: [ :example | example ]; - painting: [ :view | - view @ RTDraggableView. - self gtOpenOn: view ] -] - -{ #category : #'*Roassal2GT-Inspector' } -RTAbstractExample class >> gtInspectorPreviewIn: composite [ - - - ^ self new gtInspectorPreviewIn: composite -] - -{ #category : #'*Roassal2GT-Inspector' } -RTAbstractExample >> gtOpenOn: v [ - | icon64Mime form element | - (self gtExamples - sorted: [ :a :b | a method selector asLowercase < b method selector asLowercase ]) - do: [ :anExample | - [ icon64Mime := self perform: (anExample method selector , #Icon) asSymbol. - form := TRPlatform current formClass - fromBinaryStream: (TRPlatform current mimeDecodeToBytes: icon64Mime readStream) ] - on: Error - do: [ :exception | ]. " ignore, continue and use a fallback form " - form ifNil: [ form := Color red iconOrThumbnailOfSize: 32 ]. - " not all examples stick to the naming convention or simply dont provide an icon, provide a fallback here since RTExampleBrowser is the only entity that depends strongly on icons " - element := (RTBitmap new form: form) elementOn: anExample. - element @ (RTPopup new text: anExample method selector asString). - element @ (RTEventForwarder new eventClass: TRMouseDragging). - element - when: TRMouseClick - do: [ :event | - self announcer - announce: - (RTExampleOpeningEvent new - theClass: self className; - theSelector: anExample method selector) ]. - v add: element ]. - RTGridLayout new - gapSize: 50; - on: v elements. - v elements - @ - (RTLabeled new - below; - fontSize: 10; - text: [ :m | m method selector asString withoutPrefix: 'example' ]) -] diff --git a/src/Roassal2GT/RTAbstractViewContext.class.st b/src/Roassal2GT/RTAbstractViewContext.class.st deleted file mode 100644 index da0681ac2..000000000 --- a/src/Roassal2GT/RTAbstractViewContext.class.st +++ /dev/null @@ -1,115 +0,0 @@ -Class { - #name : #RTAbstractViewContext, - #superclass : #RTObject, - #instVars : [ - 'view', - 'presentation' - ], - #category : #'Roassal2GT-Glamour-Context' -} - -{ #category : #'private - utility' } -RTAbstractViewContext class >> createContext [ - "Define a new context in case none has been set" - ^ self defaultContextClass new -] - -{ #category : #context } -RTAbstractViewContext class >> defaultContextClass [ - "Return the default context used by Glamour when no context is set" - ^ self withAllSubclasses detect: #isDefault -] - -{ #category : #'private - utility' } -RTAbstractViewContext class >> getContextFor: aView [ - "Return the context associated to the view. It none is defined, then this method create one, and set it in view." - ^ aView attributeAt: #GlamourContext ifAbsentPut: [ self createContext ]. - -] - -{ #category : #testing } -RTAbstractViewContext class >> isDefault [ - ^ false -] - -{ #category : #public } -RTAbstractViewContext class >> setOnView: aView [ - "Set the context on the view" - (aView hasAttribute: #GlamourContext) ifTrue: [ - (aView attributeAt: #GlamourContext) unregisterPreviousContext - ]. - aView attributeAt: #GlamourContext put: self new -] - -{ #category : #public } -RTAbstractViewContext >> adjustView: aView inPresentation: aPresentation. [ - self view: aView. - self presentation: aPresentation. - self registerCallbacks -] - -{ #category : #accessing } -RTAbstractViewContext >> canvas [ - ^ view canvas -] - -{ #category : #hooks } -RTAbstractViewContext >> interactionsToBeRegistered [ - "Override to return a list of classes that have be to registered" - self subclassResponsibility -] - -{ #category : #accessing } -RTAbstractViewContext >> presentation [ - "Return the Roassal2Presentation in which I am used" - ^ presentation -] - -{ #category : #accessing } -RTAbstractViewContext >> presentation: aPresentation [ - self assert: [ aPresentation isKindOf: GLMRoassal2Presentation ] description: 'Only a GLMRoassal2Presentation can be provided here'. - presentation := aPresentation -] - -{ #category : #documentation } -RTAbstractViewContext >> readme [ -" -RTAbstractViewContext is the root class of the view contexts. A view context bridges Roassal with GT. -You need to create a subclass of RTAbstractViewContext if you want to define a particular operation involving GT - -" -] - -{ #category : #public } -RTAbstractViewContext >> registerCallbacks [ - "Register the different interactions on the view" - self interactionsToBeRegistered - do: [ :intClass | self view @ (intClass new presentation: self presentation) ] -] - -{ #category : #public } -RTAbstractViewContext >> removeFromView [ - "Remove the context from the view. All the callbacks due to the interaction are removed as well" - self view removeAttributeAt: #GlamourContext ifAbsent: [ ]. - - self interactionsToBeRegistered do: [ :intClass | - self view removeInteractionIfPresent: intClass ] -] - -{ #category : #public } -RTAbstractViewContext >> unregisterPreviousContext [ - self view ifNil: [ ^ self ]. - (self class getContextFor: self view) removeFromView -] - -{ #category : #accessing } -RTAbstractViewContext >> view [ - ^ view -] - -{ #category : #accessing } -RTAbstractViewContext >> view: aView [ - "Set the view in the context" - self assert: [ aView isKindOf: RTView ] description: 'Only a roassal view may be provided'. - view := aView -] diff --git a/src/Roassal2GT/RTBuilder.extension.st b/src/Roassal2GT/RTBuilder.extension.st deleted file mode 100644 index 9cde7a8ad..000000000 --- a/src/Roassal2GT/RTBuilder.extension.st +++ /dev/null @@ -1,31 +0,0 @@ -Extension { #name : #RTBuilder } - -{ #category : #'*Roassal2GT-Inspector' } -RTBuilder class >> gtExampleBuilder [ - - - - ^ self new -] - -{ #category : #'*Roassal2GT-Inspector' } -RTBuilder >> gtInspectorViewIn: composite [ - - composite roassal2 - title: 'View'; - initializeView: [ self ] -] - -{ #category : #'*Roassal2GT-Glamour' } -RTBuilder >> openWithToolbar [ - ^ GLMCompositePresentation new - title: 'Roassal'; - with: [:composite | - composite roassal2 title: 'Painting'; initializeView: [ self ] ]; - openOn: self -] - -{ #category : #'*Roassal2GT-Glamour' } -RTBuilder >> openWithToolbarEntitled: aTitle [ - ^ self openWithToolbar title: aTitle -] diff --git a/src/Roassal2GT/RTElement.extension.st b/src/Roassal2GT/RTElement.extension.st deleted file mode 100644 index c20990d84..000000000 --- a/src/Roassal2GT/RTElement.extension.st +++ /dev/null @@ -1,31 +0,0 @@ -Extension { #name : #RTElement } - -{ #category : #'*Roassal2GT-Spotter' } -RTElement >> interestingToHave [ - -" -From Andrei Chis: - -spotterPreviewIn: aComposite - - RTBlink unhighlightElements: self view elements. - RTBlink highlight: self. - aComposite addBrickBack: self view setUpCanvas buildMorph - -" -] - -{ #category : #'*Roassal2GT-Spotter' } -RTElement >> spotterActDefault [ - "This method define the action when an element is selected in the spotter window" - self view canvas camera translateTo: self position. - RTBlink on: self. -] - -{ #category : #'*Roassal2GT-Spotter' } -RTElement >> spotterPreviewIn: aComposite [ - - RTBlink unhighlightElements: self view elements. - RTBlink highlight: self. - aComposite addBrickBack: self view setUpCanvas buildMorph -] diff --git a/src/Roassal2GT/RTEmptyViewContext.class.st b/src/Roassal2GT/RTEmptyViewContext.class.st deleted file mode 100644 index 98691a8c5..000000000 --- a/src/Roassal2GT/RTEmptyViewContext.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #RTEmptyViewContext, - #superclass : #RTAbstractViewContext, - #category : #'Roassal2GT-Glamour-Context' -} - -{ #category : #hooks } -RTEmptyViewContext >> interactionsToBeRegistered [ - ^ #() -] diff --git a/src/Roassal2GT/RTEmptyViewContextInteraction.class.st b/src/Roassal2GT/RTEmptyViewContextInteraction.class.st deleted file mode 100644 index db46814ba..000000000 --- a/src/Roassal2GT/RTEmptyViewContextInteraction.class.st +++ /dev/null @@ -1,20 +0,0 @@ -" -Interaction for a view. Make the view __not__ resizeable in GTInspector. Here is an example: --=-=-= -b := RTMondrian new. -b nodes: (1 to: 100). -b layout grid. -b view @ RTEmptyViewContextInteraction. -b --=-=-= -" -Class { - #name : #RTEmptyViewContextInteraction, - #superclass : #RTAbstractContextInteraction, - #category : #'Roassal2GT-Glamour-Roassal-Interaction' -} - -{ #category : #hooks } -RTEmptyViewContextInteraction >> initializeElement: aView [ - RTEmptyViewContext setOnView: aView -] diff --git a/src/Roassal2GT/RTEventRegister.class.st b/src/Roassal2GT/RTEventRegister.class.st deleted file mode 100644 index 54f647298..000000000 --- a/src/Roassal2GT/RTEventRegister.class.st +++ /dev/null @@ -1,18 +0,0 @@ -Class { - #name : #RTEventRegister, - #superclass : #RTObject, - #category : #'Roassal2GT-EventCollector' -} - -{ #category : #'class initialization' } -RTEventRegister class >> initialize [ - " - self initialize - " - | collector | - collector := GTEventCollector new. - collector occupant: self; category: 'roassal2Examples'; register. - RTAbstractExample announcer when: RTExampleOpeningEvent do: [ :evt | - collector add: evt - ] -] diff --git a/src/Roassal2GT/RTExampleFactory.class.st b/src/Roassal2GT/RTExampleFactory.class.st deleted file mode 100644 index e2436c301..000000000 --- a/src/Roassal2GT/RTExampleFactory.class.st +++ /dev/null @@ -1,43 +0,0 @@ -Class { - #name : #RTExampleFactory, - #superclass : #GtExampleFactory, - #category : #'Roassal2GT-Examples' -} - -{ #category : #'accessing-defaults' } -RTExampleFactory >> defaultExampleClass [ - ^ RTExampleSelection -] - -{ #category : #'private - creating examples' } -RTExampleFactory >> initializeExample: aGTExample fromMethod: aCompiledMethod [ - super initializeExample: aGTExample fromMethod: aCompiledMethod. - - self initializeIconFromMethod: aCompiledMethod forExample: aGTExample. - -] - -{ #category : #'private - creating examples' } -RTExampleFactory >> initializeIconFromMethod: aCompiledMethod forExample: aGTExample [ - aGTExample icon ifNotNil: [ ^ self ]. - - [ aGTExample form: (aGTExample methodResolverClass resolve: RTExampleMethodIcon example: self className: aCompiledMethod methodClass meta: aCompiledMethod methodClass isMeta selector: aCompiledMethod selector) ] - on: Error - do: [ :exception | - aGTExample addProblem: (GtExampleError new - example: aGTExample; - signaledException: exception; - yourself) ] -] - -{ #category : #testing } -RTExampleFactory >> isExampleMethod: aCompiledMethod [ - ^ (super isExampleMethod: aCompiledMethod) - or: [ self isOldStyleRTExampleMethod: aCompiledMethod ] -] - -{ #category : #testing } -RTExampleFactory >> isOldStyleRTExampleMethod: aCompiledMethod [ - ^ (aCompiledMethod selector beginsWith: 'example') - and: [ (aCompiledMethod selector endsWith: 'Icon') not ] -] diff --git a/src/Roassal2GT/RTExampleMethodIcon.class.st b/src/Roassal2GT/RTExampleMethodIcon.class.st deleted file mode 100644 index fc12a674f..000000000 --- a/src/Roassal2GT/RTExampleMethodIcon.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #RTExampleMethodIcon, - #superclass : #GtAbstractExampleMethod, - #category : #'Roassal2GT-Examples' -} - -{ #category : #private } -RTExampleMethodIcon >> basicForm [ - | iconSelector iconProvider icon64Mime | - iconSelector := (self selector, 'Icon') asSymbol. - ((iconProvider := self provider) class canPerform: iconSelector) ifFalse: [ ^ nil ]. - icon64Mime := [ iconProvider perform: iconSelector ] - on: Error - do: [ ^ nil ]. - ^ [ TRPlatform current formClass fromBinaryStream: - (TRPlatform current mimeDecodeToBytes: icon64Mime readStream) ] - on: Error - do: [ nil ] -] - -{ #category : #testing } -RTExampleMethodIcon >> exists [ - ^ super exists - and: [ self methodClass includesSelector: (self selector, 'Icon') asSymbol ] -] diff --git a/src/Roassal2GT/RTExampleSelection.class.st b/src/Roassal2GT/RTExampleSelection.class.st deleted file mode 100644 index abb45302d..000000000 --- a/src/Roassal2GT/RTExampleSelection.class.st +++ /dev/null @@ -1,143 +0,0 @@ -Class { - #name : #RTExampleSelection, - #superclass : #GtExample, - #category : #'Roassal2GT-Examples' -} - -{ #category : #examples } -RTExampleSelection class >> gtExampleAtRandom [ - - - - ^ RTAbstractExample subclasses atRandom new gtExamples atRandom -] - -{ #category : #examples } -RTExampleSelection class >> gtExampleFlags1 [ - - - - ^ RTComposedShapeExample gtExamples - detect: [ :example | example method selector = #exampleFlags ] - ifNone: [ nil ] -] - -{ #category : #examples } -RTExampleSelection class >> gtExampleFlags2 [ - - - - ^ (RTComposedShapeExample >> #exampleFlags) gtExamples first -] - -{ #category : #examples } -RTExampleSelection class >> gtExampleFlags3 [ - - - - ^ (RTComposedShapeExample >> #exampleFlags) gtExample -] - -{ #category : #hooks } -RTExampleSelection >> extendPlayground: aGLMPharoScriptPresentation [ - "Extend the Playground presentation with other actions." - - | pragmas | - pragmas := Pragma allNamed: #playgroundExtension in: self class. - pragmas - do: [ :eachPragma | - self - perform: eachPragma methodSelector - with: aGLMPharoScriptPresentation ] -] - -{ #category : #'inspector extensions' } -RTExampleSelection >> gtDebuggerSourceIn: composite [ - "Cancel the method" - -] - -{ #category : #ui } -RTExampleSelection >> gtDisplayPlaygroundIn: composite [ - - ^ composite pharoScript - title: 'Playground'; - format: [ self playgroundSourceCode ]; - act: [ :text :page | - text selectionInterval: (1 to: text text size). - text evaluateSelectionAndDo: [ :anObject | text selection: anObject ] ] - icon: GLMUIThemeExtraIcons glamorousGo - on: $g - entitled: 'Do it all and go (g)'; - with: [ :pharoScript | self extendPlayground: pharoScript ] -] - -{ #category : #'inspector extensions' } -RTExampleSelection >> gtInspectorMetaIn: composite [ - "Cancel the method" - -] - -{ #category : #'inspector extensions' } -RTExampleSelection >> gtInspectorMethodIn: composite [ - "Cancelling method" -] - -{ #category : #ui } -RTExampleSelection >> gtInspectorRoassalViewIn: composite [ - - | returnValue | - returnValue := self returnValue. " rt examples are no longer cached - we make a speed bump here " - ((Array with: RTView with: RTBuilder) noneSatisfy: [ :c | returnValue class includesBehavior: c ]) - ifTrue: [ ^ self ]. - composite roassal2 - title: 'Canvas'; - initializeView: [ returnValue ] - -] - -{ #category : #'inspector extensions' } -RTExampleSelection >> gtInspectorSourceIn: composite [ - "Cancel the method" - -] - -{ #category : #ui } -RTExampleSelection >> gtInspectorViewIn: composite [ - self deprecated: 'Please use #gtInspectorRoassalViewIn: instead'. - ^ self gtInspectorRoassalViewIn: composite -] - -{ #category : #'inspector extensions' } -RTExampleSelection >> gtSpotterPreviewIconIn: aComposite [ - - (self icon notNil or: [ self provider class canPerform: (self selector, 'Icon') asSymbol ]) - ifTrue: [ - aComposite addBrickBack: (self icon asAlphaImageMorph - layout: #center; - scale: 2.0) asBrick ] - - -] - -{ #category : #testing } -RTExampleSelection >> matchesQuery: aSetOfNames [ - | sourceCode | - - sourceCode := self method sourceCode asLowercase. - ^ aSetOfNames allSatisfy: [ :each | sourceCode includesSubstring: each ] - -] - -{ #category : #public } -RTExampleSelection >> playgroundSourceCode [ - " this is really ugly - we would like to perfectly preserve the original format including comments BUT with pragmas stripped - is there a better way ? original code below " - ^ self method parseTree body formattedCode - " - | sourceCode firstLine sourceCodeWithoutFirstLine | - sourceCode := self method sourceCode. - firstLine := sourceCode lines first. - sourceCodeWithoutFirstLine := sourceCode copyFrom: firstLine size + 1 to: sourceCode size. - ^ sourceCodeWithoutFirstLine - " -] diff --git a/src/Roassal2GT/RTExampleTestCase.class.st b/src/Roassal2GT/RTExampleTestCase.class.st deleted file mode 100644 index c7d9dbaae..000000000 --- a/src/Roassal2GT/RTExampleTestCase.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #RTExampleTestCase, - #superclass : #GtExampleTestCase, - #category : #'Roassal2GT-Tests-Examples' -} - -{ #category : #accessing } -RTExampleTestCase >> defaultTimeLimit [ - ^ 800 seconds -] - -{ #category : #configuration } -RTExampleTestCase >> packageNames [ - ^ { 'Roassal2' . 'Roassal2GT' } -] diff --git a/src/Roassal2GT/RTFindInAView.class.st b/src/Roassal2GT/RTFindInAView.class.st deleted file mode 100644 index bab76d55a..000000000 --- a/src/Roassal2GT/RTFindInAView.class.st +++ /dev/null @@ -1,33 +0,0 @@ -" -Useful interaction to let one search for elements contained in a view - -[[[ -| b | -b := RTMondrian new. -b shape box. -b nodes: Collection withAllSubclasses. -b normalizer normalizeWidth: #numberOfVariables; normalizeHeight: #numberOfMethods. -b layout flow. -b view @ RTFindInAView. -b -]]] -" -Class { - #name : #RTFindInAView, - #superclass : #RTAbstractInteractionView, - #category : #'Roassal2GT-Spotter' -} - -{ #category : #hooks } -RTFindInAView >> initializeElement: aView [ - - | mb | - mb := RTMenuBuilder new. - mb view: aView. - mb menu: 'Find' callback: [ - GTSpotterMorph new - extent: 400@500; - spotterModel: (GTSpotter on: aView); - openCenteredInWorld ]. - mb build -] diff --git a/src/Roassal2GT/RTFindInAViewTest.class.st b/src/Roassal2GT/RTFindInAViewTest.class.st deleted file mode 100644 index 46ee3fd97..000000000 --- a/src/Roassal2GT/RTFindInAViewTest.class.st +++ /dev/null @@ -1,17 +0,0 @@ -Class { - #name : #RTFindInAViewTest, - #superclass : #RTTest, - #category : #'Roassal2GT-Spotter' -} - -{ #category : #tests } -RTFindInAViewTest >> testBasic [ - - | b | - b := RTMondrian new. - b shape box. - b nodes: Collection withAllSubclasses. - b view @ RTFindInAView. - b build. - -] diff --git a/src/Roassal2GT/RTGTContextExample.class.st b/src/Roassal2GT/RTGTContextExample.class.st deleted file mode 100644 index 8f655c752..000000000 --- a/src/Roassal2GT/RTGTContextExample.class.st +++ /dev/null @@ -1,17 +0,0 @@ -Class { - #name : #RTGTContextExample, - #superclass : #RTObject, - #category : #'Roassal2GT-Glamour-Context' -} - -{ #category : #'as yet unclassified' } -RTGTContextExample >> exampleNoContext [ - -| v | -v := RTView new. -v addAll: (RTEllipse new size: 20; elementsOn: #(1 2)). -RTHorizontalLineLayout on: v elements. -RTEmptyViewContext setOnView: v. -v - -] diff --git a/src/Roassal2GT/RTGTContextInteractionTest.class.st b/src/Roassal2GT/RTGTContextInteractionTest.class.st deleted file mode 100644 index 75f77337c..000000000 --- a/src/Roassal2GT/RTGTContextInteractionTest.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #RTGTContextInteractionTest, - #superclass : #RTTest, - #category : #'Roassal2GT-Glamour-Roassal-Interaction' -} - -{ #category : #tests } -RTGTContextInteractionTest >> testBasic [ - - | v int | - v := RTView new. - int := RTEmptyViewContextInteraction new. - v @ int. - self assert: (RTAbstractViewContext getContextFor: v) class equals: RTEmptyViewContext. -] - -{ #category : #tests } -RTGTContextInteractionTest >> testBasic02 [ - - | v int | - v := RTView new. - int := RTResizeableViewContextInteraction new. - v @ int. - self assert: (RTAbstractViewContext getContextFor: v) class equals: RTInteractiveViewContext. -] diff --git a/src/Roassal2GT/RTGTContextTest.class.st b/src/Roassal2GT/RTGTContextTest.class.st deleted file mode 100644 index 91c541aee..000000000 --- a/src/Roassal2GT/RTGTContextTest.class.st +++ /dev/null @@ -1,88 +0,0 @@ -Class { - #name : #RTGTContextTest, - #superclass : #RTTest, - #instVars : [ - 'prez', - 'view' - ], - #category : #'Roassal2GT-Glamour-Context' -} - -{ #category : #running } -RTGTContextTest >> setUp [ - super setUp. - prez := GLMRoassal2Presentation new. - view := RTView new. -] - -{ #category : #tests } -RTGTContextTest >> testGetContextFor [ - - | context | - self deny: view hasAttributes. - context := prez getContextFor: view. - self assert: context notNil. - self assert: context class equals: RTAbstractViewContext defaultContextClass. - self assert: (context class inheritsFrom: RTAbstractViewContext). - self assert: view hasAttributes. -] - -{ #category : #tests } -RTGTContextTest >> testGetContextFor02 [ - - | context | - context := prez getContextFor: view. - - self assert: (RTAbstractViewContext getContextFor: view) equals: context. - - RTEmptyViewContext setOnView: view. - self assert: (RTAbstractViewContext getContextFor: view) ~~ context. - self assert: (RTAbstractViewContext getContextFor: view) class equals: RTEmptyViewContext. -] - -{ #category : #'removing context' } -RTGTContextTest >> testRemovingContext [ - | c | - self assert: view announcer numberOfSubscriptions equals: 0. - RTInteractiveViewContext setOnView: view. - self assert: view announcer numberOfSubscriptions equals: 0. - prez useContextToInitialize: view. - self assert: view announcer numberOfSubscriptions equals: 1. - - c := prez getContextFor: view. - self assert: c class equals: RTInteractiveViewContext. - c removeFromView. - self assert: view announcer numberOfSubscriptions equals: 0. -] - -{ #category : #'removing context' } -RTGTContextTest >> testRemovingContext02 [ - RTInteractiveViewContext setOnView: view. - prez useContextToInitialize: view. - self assert: view announcer numberOfSubscriptions equals: 1. - "self assert: (view hasInteraction: RTSelectableElementContextInteraction)." - self assert: (view hasInteraction: RTResizeableViewContextInteraction). - - RTEmptyViewContext setOnView: view. - prez useContextToInitialize: view. - self assert: view announcer numberOfSubscriptions equals: 0. - - RTInteractiveViewContext setOnView: view. - prez useContextToInitialize: view. - self assert: view announcer numberOfSubscriptions equals: 1. - -] - -{ #category : #tests } -RTGTContextTest >> testdefaultContextClass [ - self assert: RTAbstractViewContext defaultContextClass notNil. - self assert: RTAbstractViewContext defaultContextClass isBehavior. -] - -{ #category : #tests } -RTGTContextTest >> testuseContextToInitialize [ - - self assert: view announcer numberOfSubscriptions = 0. - prez useContextToInitialize: view. - self assert: view announcer numberOfSubscriptions > 0 -] diff --git a/src/Roassal2GT/RTGrapherSelectRangeContextInteraction.class.st b/src/Roassal2GT/RTGrapherSelectRangeContextInteraction.class.st deleted file mode 100644 index fb42694f8..000000000 --- a/src/Roassal2GT/RTGrapherSelectRangeContextInteraction.class.st +++ /dev/null @@ -1,13 +0,0 @@ -Class { - #name : #RTGrapherSelectRangeContextInteraction, - #superclass : #RTAbstractContextInteraction, - #category : #'Roassal2GT-Glamour-Roassal-Interaction' -} - -{ #category : #hooks } -RTGrapherSelectRangeContextInteraction >> initializeElement: aView [ - "This expression is executed after the GTInspector window is open. So, after the build has been done." - self assert: [ self presentation notNil ] description: 'The presentation has to be set'. - aView attributeAt: #presentation put: self presentation - -] diff --git a/src/Roassal2GT/RTGrapherSelectRangeViewContext.class.st b/src/Roassal2GT/RTGrapherSelectRangeViewContext.class.st deleted file mode 100644 index fc4b05f2e..000000000 --- a/src/Roassal2GT/RTGrapherSelectRangeViewContext.class.st +++ /dev/null @@ -1,45 +0,0 @@ -" -Define a range for GT - --=-=-= -g := RTGrapher new. -g view: RTView new. -ds := RTData new. -ds dotShape color: Color blue trans. -ds points: RTShape withAllSubclasses. -ds y: [ :cls | cls numberOfMethods - 50 ]. -ds x: [ :cls | cls numberOfLinesOfCode - 150 ]. -g add: ds. - -RTGrapherSelectRangeViewContext onGrapher: g callback: [ :elements | (g view attributeAt: #presentation) selection: elements ]. - -g --=-=-= - -" -Class { - #name : #RTGrapherSelectRangeViewContext, - #superclass : #RTAbstractViewContext, - #category : #'Roassal2GT-Glamour-Roassal-Interaction' -} - -{ #category : #public } -RTGrapherSelectRangeViewContext class >> onGrapher: aGrapher [ - - "We need to make sure that the view knows about the grapher" - aGrapher view attributeAt: #grapher put: aGrapher. - aGrapher addDecorator: (RTRangeSelector new) -] - -{ #category : #public } -RTGrapherSelectRangeViewContext class >> onGrapher: aGrapher callback: aOneArgBlock [ - self setOnView: aGrapher view. - "We need to make sure that the view knows about the grapher" - aGrapher view attributeAt: #grapher put: aGrapher. - aGrapher addDecorator: (RTRangeSelector new callback: aOneArgBlock) -] - -{ #category : #hooks } -RTGrapherSelectRangeViewContext >> interactionsToBeRegistered [ - ^ Array with: RTGrapherSelectRangeContextInteraction with: RTResizeableViewContextInteraction "with: RTSelectableElementsContextInteraction" -] diff --git a/src/Roassal2GT/RTInteractiveViewContext.class.st b/src/Roassal2GT/RTInteractiveViewContext.class.st deleted file mode 100644 index 56ae8c976..000000000 --- a/src/Roassal2GT/RTInteractiveViewContext.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #RTInteractiveViewContext, - #superclass : #RTAbstractViewContext, - #category : #'Roassal2GT-Glamour-Context' -} - -{ #category : #testing } -RTInteractiveViewContext class >> isDefault [ - ^ true -] - -{ #category : #hooks } -RTInteractiveViewContext >> interactionsToBeRegistered [ - ^ Array with: RTSelectableElementsContextInteraction with: RTResizeableViewContextInteraction -] diff --git a/src/Roassal2GT/RTObject.extension.st b/src/Roassal2GT/RTObject.extension.st deleted file mode 100644 index 65586870a..000000000 --- a/src/Roassal2GT/RTObject.extension.st +++ /dev/null @@ -1,8 +0,0 @@ -Extension { #name : #RTObject } - -{ #category : #'*Roassal2GT-Examples' } -RTObject class >> gtExamplesFactory [ - ^ RTExampleFactory new - sourceClass: self; - yourself -] diff --git a/src/Roassal2GT/RTResizeableViewContextInteraction.class.st b/src/Roassal2GT/RTResizeableViewContextInteraction.class.st deleted file mode 100644 index eb4270198..000000000 --- a/src/Roassal2GT/RTResizeableViewContextInteraction.class.st +++ /dev/null @@ -1,28 +0,0 @@ -" -Interaction for a view. Make the view resizeable in GTInspector. Here is an example: --=-=-= -b := RTMondrian new. -b nodes: (1 to: 100). -b layout grid. -b view @ RTResizeableViewContextInteraction. -b --=-=-= -" -Class { - #name : #RTResizeableViewContextInteraction, - #superclass : #RTAbstractContextInteraction, - #category : #'Roassal2GT-Glamour-Roassal-Interaction' -} - -{ #category : #hooks } -RTResizeableViewContextInteraction >> initializeElement: aView [ - "self assert: [ self presentation notNil ] description: 'The presentation has to be set'." - - aView canvas - when: TRResizeCanvasEvent - do: [ :evt | - | es | - es := aView elements asGroup encompassingRectangle. - (es width + es height) > 4000 - ifFalse: [ aView canvas focusOnCenterScaled ] ] -] diff --git a/src/Roassal2GT/RTSelectableElementContextInteraction.class.st b/src/Roassal2GT/RTSelectableElementContextInteraction.class.st deleted file mode 100644 index 230e00961..000000000 --- a/src/Roassal2GT/RTSelectableElementContextInteraction.class.st +++ /dev/null @@ -1,18 +0,0 @@ -" -This is an interaction for an element - - -" -Class { - #name : #RTSelectableElementContextInteraction, - #superclass : #RTAbstractContextInteraction, - #category : #'Roassal2GT-Glamour-Roassal-Interaction' -} - -{ #category : #hooks } -RTSelectableElementContextInteraction >> initializeElement: anElement [ - self assert: [ self presentation notNil ] description: 'The presentation has to be set'. - - anElement when: TRMouseLeftClick do: [ :event | - anElement model ifNotNil: [ self presentation selection: anElement model ] ] -] diff --git a/src/Roassal2GT/RTSelectableElementsContextInteraction.class.st b/src/Roassal2GT/RTSelectableElementsContextInteraction.class.st deleted file mode 100644 index aaa82af07..000000000 --- a/src/Roassal2GT/RTSelectableElementsContextInteraction.class.st +++ /dev/null @@ -1,30 +0,0 @@ -" -This is an interaction for a view -" -Class { - #name : #RTSelectableElementsContextInteraction, - #superclass : #RTAbstractContextInteraction, - #category : #'Roassal2GT-Glamour-Roassal-Interaction' -} - -{ #category : #hooks } -RTSelectableElementsContextInteraction >> initializeElement: aView [ - self - assert: [ self presentation notNil ] - description: 'The presentation has to be set'. - self initializeSetOfElements: aView elements -] - -{ #category : #hooks } -RTSelectableElementsContextInteraction >> initializeSetOfElements: elements [ - elements do: - [ :each | self initializeSingleElement: each ] -] - -{ #category : #hooks } -RTSelectableElementsContextInteraction >> initializeSingleElement: each [ - ^ each - when: TRMouseLeftClick - do: - [ :event | each model ifNotNil: [ self presentation selection: each model ] ] -] diff --git a/src/Roassal2GT/RTView.extension.st b/src/Roassal2GT/RTView.extension.st deleted file mode 100644 index ede769a03..000000000 --- a/src/Roassal2GT/RTView.extension.st +++ /dev/null @@ -1,80 +0,0 @@ -Extension { #name : #RTView } - -{ #category : #'*Roassal2GT-Inspector' } -RTView class >> gtExampleEmptyView [ - - - - ^ self new -] - -{ #category : #'*Roassal2GT-Inspector' } -RTView >> gtInspectorElementsHierarchyIn: composite [ - - composite table - title: 'Elements'; - showOnly: 50; - display: [ :each | each elements ]; - children: #nestedElements; - column: 'Model' evaluated: [ :each | each model asString ]; - column: 'Shape' evaluated: [ :each | each shape asString ] -] - -{ #category : #'*Roassal2GT-Inspector' } -RTView >> gtInspectorViewIn: composite [ - - composite roassal2 - title: 'View'; - initializeView: [ self ] - -] - -{ #category : #'*Roassal2GT-Glamour' } -RTView >> openWithToolbar [ - ^ GLMCompositePresentation new - title: 'Roassal'; - with: [:composite | composite roassal2 title: 'Painting'; initializeView: [self ] ]; - openOn: self -] - -{ #category : #'*Roassal2GT-Glamour' } -RTView >> openWithToolbarEntitled: aTitle [ - ^ self openWithToolbar title: aTitle -] - -{ #category : #'*Roassal2GT-Spotter' } -RTView >> spotterPreviewIn: aComposite [ - - - self build. - aComposite addBrickBack: self view setUpCanvas buildMorph - - -] - -{ #category : #'*Roassal2GT' } -RTView >> spotterShapesFor: aStep [ - - ^ aStep listProcessor - title: 'Shapes'; - candidatesLimit: 5; - allCandidates: [ self elements asOrderedCollection ]; - itemName: [ :each | - "each gtDisplayString, - ' [', each shape class name, '] - ', " - each model gtDisplayString ]; - filter: GTFilterSubstring; - wantsToDisplayOnEmptyQuery: true -] - -{ #category : #'*Roassal2GT-Spotter' } -RTView >> spotterShapesModelsFor: aStep [ - - ^ aStep listProcessor - title: 'Model objects'; - candidatesLimit: 5; - allCandidates: [ ((self elements collectAsSet: #model) reject: #isNil) asOrderedCollection ]; - itemName: [ :each | each gtDisplayString ]; - filter: GTFilterSubstring; - wantsToDisplayOnEmptyQuery: true -] diff --git a/src/Roassal2GT/TRCanvas.extension.st b/src/Roassal2GT/TRCanvas.extension.st deleted file mode 100644 index 8cde4cd64..000000000 --- a/src/Roassal2GT/TRCanvas.extension.st +++ /dev/null @@ -1,18 +0,0 @@ -Extension { #name : #TRCanvas } - -{ #category : #'*Roassal2GT-Inspector' } -TRCanvas class >> gtExampleEmpty [ - - - - ^ TRCanvas new -] - -{ #category : #'*Roassal2GT-Inspector' } -TRCanvas >> gtInspectorViewIn: composite [ - - composite roassal2 - title: 'Canvas'; - initializeView: [ RTView new setCanvas: self ] - -] diff --git a/src/Roassal2GT/package.st b/src/Roassal2GT/package.st deleted file mode 100644 index de5e43883..000000000 --- a/src/Roassal2GT/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #Roassal2GT } diff --git a/src/RoelTyper/AbstractMerger.class.st b/src/RoelTyper/AbstractMerger.class.st deleted file mode 100644 index 955dac808..000000000 --- a/src/RoelTyper/AbstractMerger.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #AbstractMerger, - #superclass : #TypeMerger, - #category : #'RoelTyper-Core' -} - -{ #category : #public } -AbstractMerger >> mergeInterfaceTypes: interfaceTypeCollection assignmentTypes: assignmentTypesCollection [ - "interfaceTypes is a set of trees of types reconstructed by looking at the interfaces. - assignmentTypes is a set of trees of types reconstructed by looking at the assignments. - The receiver takes these sets as input and needs to return one set of trees of types that combines both." - - "This class does this by preferring abstract types over concrete types." - - | assignmentsToKeep chain | - (interfaceTypeCollection isEmpty and: [assignmentTypesCollection notEmpty]) - ifTrue: [^assignmentTypesCollection]. - assignmentsToKeep := assignmentTypesCollection - select: - [:assignmentType | - chain := assignmentType withAllSuperclasses. - (interfaceTypeCollection - anySatisfy: [:superType | chain includes: superType]) not]. - assignmentsToKeep addAll: interfaceTypeCollection. - ^assignmentsToKeep isEmpty - ifTrue: [OrderedCollection with: Object] - ifFalse: [assignmentsToKeep] -] diff --git a/src/RoelTyper/AbstractType.class.st b/src/RoelTyper/AbstractType.class.st deleted file mode 100644 index 7f262f3c1..000000000 --- a/src/RoelTyper/AbstractType.class.st +++ /dev/null @@ -1,115 +0,0 @@ -Class { - #name : #AbstractType, - #superclass : #Object, - #instVars : [ - 'ivarClass', - 'ivarName', - 'nbOfCorrectTypes', - 'nbOfIncorrectTypes' - ], - #category : #'RoelTyper-Core' -} - -{ #category : #'instance creation' } -AbstractType class >> forInstvar: iv inClass: aClass [ - ^ self new - ivarName: iv; - ivarClass: aClass; - yourself -] - -{ #category : #private } -AbstractType >> conflictingAssignmentsWith: anExtractedType [ - | conflictingAssignments | - conflictingAssignments := anExtractedType assignments - reject: [ :assignment | self types includes: assignment ]. - ^ conflictingAssignments -] - -{ #category : #private } -AbstractType >> conflictingSelectorsWith: anExtractedType [ - | conflictingSelectors | - conflictingSelectors := Dictionary new. - anExtractedType interface - do: - [:selector | - self types - do: - [:aType | - (aType canUnderstand: selector) - ifFalse: - [(conflictingSelectors - at: selector - ifAbsentPut: [OrderedCollection new]) add: aType]]]. - ^conflictingSelectors -] - -{ #category : #initialization } -AbstractType >> initialize [ - "Do nothing, but give subclasses the chance to override." - - -] - -{ #category : #testing } -AbstractType >> is: aClass [ - ^self isSingularType and: [self types first = aClass] -] - -{ #category : #testing } -AbstractType >> isExtractedResult [ - ^self subclassResponsibility -] - -{ #category : #testing } -AbstractType >> isObjectType [ - ^self isSingularType and: [self types includes: Object] -] - -{ #category : #testing } -AbstractType >> isSingularType [ - ^self types size = 1 -] - -{ #category : #accessing } -AbstractType >> ivarClass [ - ^ivarClass -] - -{ #category : #accessing } -AbstractType >> ivarClass: aClass [ - ivarClass := aClass. - -] - -{ #category : #accessing } -AbstractType >> ivarName [ - ^ivarName -] - -{ #category : #accessing } -AbstractType >> ivarName: aSymbol [ - ivarName := aSymbol -] - -{ #category : #private } -AbstractType >> liveExtractType [ - ^self -] - -{ #category : #printing } -AbstractType >> printOn: aStream [ - self printTypesOn: aStream -] - -{ #category : #printing } -AbstractType >> printTypesOn: aStream [ - self types - do: [ :each | aStream print: each ] - separatedBy: [ aStream nextPutAll: ' , ' ] -] - -{ #category : #accessing } -AbstractType >> types [ - ^self subclassResponsibility -] diff --git a/src/RoelTyper/AssignmentsFirstMerger.class.st b/src/RoelTyper/AssignmentsFirstMerger.class.st deleted file mode 100644 index c42135ad1..000000000 --- a/src/RoelTyper/AssignmentsFirstMerger.class.st +++ /dev/null @@ -1,39 +0,0 @@ -Class { - #name : #AssignmentsFirstMerger, - #superclass : #TypeMerger, - #category : #'RoelTyper-Core' -} - -{ #category : #public } -AssignmentsFirstMerger >> mergeInterfaceTypes: interfaceTypeCollection assignmentTypes: assignmentTypesCollection [ - "interfaceTypes is a set of trees of types reconstructed by looking at the interfaces. - assignmentTypes is a set of trees of types reconstructed by looking at the assignments. - The receiver takes these sets as input and needs to return one set of trees of types that combines both." - - "This merger favors the assignment types over the interface types. It only considers the interface types when there is no assignment information, or when there is only one interface type that is not related to the assignment types." - - | interfaceType assignments | - (assignmentTypesCollection size = 1 and: [assignmentTypesCollection first = UndefinedObject]) ifTrue: [assignmentTypesCollection removeFirst]. - assignmentTypesCollection isEmpty - ifTrue: - [interfaceTypeCollection isEmpty - ifTrue: [^OrderedCollection with: Object] - ifFalse: - [^self cleanBooleansIn: interfaceTypeCollection asOrderedCollection]]. - assignments := assignmentTypesCollection asOrderedCollection. - interfaceTypeCollection size == 1 - ifFalse: [^self cleanBooleansIn: assignments]. - interfaceType := interfaceTypeCollection asOrderedCollection first. - ^((assignments anySatisfy: [:cl | cl includesBehavior: interfaceType]) - or: - [assignments - anySatisfy: - [:assignmentType | interfaceType includesBehavior: assignmentType]]) - ifTrue: [self cleanBooleansIn: assignments] - ifFalse: - [self - cleanBooleansIn: - (assignments - add: interfaceType; - yourself)] -] diff --git a/src/RoelTyper/Class.extension.st b/src/RoelTyper/Class.extension.st deleted file mode 100644 index 8aa26416a..000000000 --- a/src/RoelTyper/Class.extension.st +++ /dev/null @@ -1,16 +0,0 @@ -Extension { #name : #Class } - -{ #category : #'*RoelTyper-enumerating' } -Class >> nonMetaSubclassesDo: aBlock [ - "Evaluate the argument, aBlock, for each of the receiver's immediate non-meta subclasses." - - "This one is here for the sake of Squeak (where it is Class and not Behavior that keeps the subclasses instance variable)." - - "This method is supposed to be local in Class because of a good reason. - We use this pragma to test if Class does not contain some accidental - local selectors." - - - subclasses isNil - ifFalse: [ subclasses do: aBlock ] -] diff --git a/src/RoelTyper/ClassDescription.extension.st b/src/RoelTyper/ClassDescription.extension.st deleted file mode 100644 index 4419aa398..000000000 --- a/src/RoelTyper/ClassDescription.extension.st +++ /dev/null @@ -1,14 +0,0 @@ -Extension { #name : #ClassDescription } - -{ #category : #'*RoelTyper-organization' } -ClassDescription >> categoryForSelector: aSelector [ - "Starting from the receiver, find the category for the given selector (if any). " - - | cat s | - ^(cat := self whichCategoryIncludesSelector: aSelector) - ifNil: - [(s := self superclass) - ifNil: [nil] - ifNotNil: [s categoryForSelector: aSelector]] - ifNotNil: [cat] -] diff --git a/src/RoelTyper/Collection.extension.st b/src/RoelTyper/Collection.extension.st deleted file mode 100644 index 6acf84bfb..000000000 --- a/src/RoelTyper/Collection.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #Collection } - -{ #category : #'*RoelTyper-testing' } -Collection >> sameElements: aCollection [ - ^(self allSatisfy: [:each | aCollection includes: each]) - and: [aCollection allSatisfy: [:each | self includes: each]] -] diff --git a/src/RoelTyper/ConcreteMerger.class.st b/src/RoelTyper/ConcreteMerger.class.st deleted file mode 100644 index 02f974031..000000000 --- a/src/RoelTyper/ConcreteMerger.class.st +++ /dev/null @@ -1,31 +0,0 @@ -Class { - #name : #ConcreteMerger, - #superclass : #TypeMerger, - #category : #'RoelTyper-Core' -} - -{ #category : #public } -ConcreteMerger >> mergeInterfaceTypes: interfaceTypeCollection assignmentTypes: assignmentTypesCollection [ - "interfaceTypes is a set of trees of types reconstructed by looking at the interfaces. - assignmentTypes is a set of trees of types reconstructed by looking at the assignments. - The receiver takes these sets as input and needs to return one set of trees of types that combines both." - - "This class does this by preferring concrete types over abstract types." - - | toKeep chain | - toKeep := interfaceTypeCollection copy. - assignmentTypesCollection - do: - [:assignmentType | - chain := assignmentType withAllSuperclasses. - (interfaceTypeCollection select: [:type | chain includes: type]) - do: - [:each | - toKeep - remove: each - ifAbsent: []]]. - toKeep addAll: assignmentTypesCollection. - ^toKeep isEmpty - ifTrue: [OrderedCollection with: Object] - ifFalse: [toKeep asOrderedCollection] -] diff --git a/src/RoelTyper/ExtractedType.class.st b/src/RoelTyper/ExtractedType.class.st deleted file mode 100644 index 1b7d1a839..000000000 --- a/src/RoelTyper/ExtractedType.class.st +++ /dev/null @@ -1,245 +0,0 @@ -Class { - #name : #ExtractedType, - #superclass : #AbstractType, - #instVars : [ - 'interface', - 'assignments', - 'extractedTypes', - 'links' - ], - #category : #'RoelTyper-Core' -} - -{ #category : #'instance creation' } -ExtractedType class >> forInstvar: iv inClass: aClass interface: selectorCollection assignments: classCollection [ - ^(self - forInstvar: iv - inClass: aClass) - interface: selectorCollection - assignments: classCollection -] - -{ #category : #private } -ExtractedType class >> mergerClass [ - "Still experimenting with different mergers. So for the moment I uncomment things to experiment with." - - "^ConcreteMerger" - "^AbstractMerger" - - ^AssignmentsFirstMerger -] - -{ #category : #'private-accessing' } -ExtractedType >> addAssignment: anObject [ - (self assignments includes: anObject) - ifFalse: [self assignments add: anObject] -] - -{ #category : #'private-accessing' } -ExtractedType >> addLinkedExtractedType: anExtractedType [ - links add: anExtractedType liveExtractType -] - -{ #category : #'private-accessing' } -ExtractedType >> addReverseLinkedExtractedType: anExtractedType [ - links add: anExtractedType liveExtractType. - anExtractedType liveExtractType addLinkedExtractedType: self -] - -{ #category : #'private-accessing' } -ExtractedType >> addSend: anObject [ - self interface add: anObject -] - -{ #category : #'private-accessing' } -ExtractedType >> assignments [ - ^assignments -] - -{ #category : #'private-accessing' } -ExtractedType >> basicExtractedTypes [ - ^extractedTypes -] - -{ #category : #private } -ExtractedType >> cleanedAssignments [ - | assigns | - assigns := self assignments copy. - ((assigns includes: True) or: [assigns includes: False]) - ifTrue: - [assigns - remove: True ifAbsent: []; - remove: False ifAbsent: []; - add: Boolean]. - ^assigns -] - -{ #category : #accessing } -ExtractedType >> contents [ - ^self types -] - -{ #category : #private } -ExtractedType >> flattenLinks [ - [links isEmpty] - whileFalse: [|link| - link := links anyOne. - links remove: link. - link flattenLinks. - link interface - do: [ :sel | self addSend: sel ]. - link assignments - do: [ :assign | self addAssignment: assign ]]. - -] - -{ #category : #private } -ExtractedType >> foldInterfaceTypes: interfaceClasses withAssignmentTypes: assignmentClasses [ - - | tmp | - assignmentClasses remove: UndefinedObject ifAbsent: []. - tmp:=interfaceClasses. - (assignmentClasses isEmpty and: [ - ((interface includes: #value) - or: [interface includes: #value:]) and: [interfaceClasses includes: BlockClosure]]) - ifTrue: [ tmp:=OrderedCollection with: BlockClosure] - ifFalse: [ tmp:=interfaceClasses]. - ^self class mergerClass - interfaceTypes: tmp - assignmentTypes: assignmentClasses -] - -{ #category : #testing } -ExtractedType >> hasEmptyAssignments [ - ^self assignments isEmpty -] - -{ #category : #testing } -ExtractedType >> hasEmptyInterface [ - ^self interface isEmpty -] - -{ #category : #initialization } -ExtractedType >> initialize [ - super initialize. - links := Set new. - self - interface: IdentitySet new - assignments: OrderedCollection new. -] - -{ #category : #'private-accessing' } -ExtractedType >> interface [ - ^interface -] - -{ #category : #'private-accessing' } -ExtractedType >> interface: selectorCollection assignments: classCollection [ - interface := selectorCollection. - assignments := classCollection -] - -{ #category : #testing } -ExtractedType >> isEmpty [ - ^self hasEmptyAssignments and: [self hasEmptyInterface] -] - -{ #category : #testing } -ExtractedType >> isExtractedResult [ - ^true -] - -{ #category : #'private-accessing' } -ExtractedType >> links [ - ^links -] - -{ #category : #private } -ExtractedType >> mergeTypes [ - self flattenLinks. - ^self - foldInterfaceTypes: (self rootsUnderstanding: self interface) - withAssignmentTypes: self cleanedAssignments -] - -{ #category : #printing } -ExtractedType >> printInterfaceAndAssigments [ - | s | - s := WriteStream on: String new. - self printInterfaceAndAssigmentsOn: s. - ^ s contents -] - -{ #category : #printing } -ExtractedType >> printInterfaceAndAssigmentsOn: aStream [ - aStream nextPutAll: 'Sends: {'. - self interface - do: [ :symbol | aStream print: symbol ] - separatedBy: [ aStream space ]. - aStream - nextPutAll: '}'; - cr; - nextPutAll: 'Assignments: {'. - self assignments - do: [ :symbol | aStream print: symbol ] - separatedBy: [ aStream space ]. - aStream - nextPutAll: '}'; - cr -] - -{ #category : #printing } -ExtractedType >> printOn: aStream [ - aStream nextPutAll: 'ExtractedType: '. - self basicExtractedTypes - ifNil: [self printInterfaceAndAssigmentsOn: aStream] - ifNotNil: [self printTypesOn: aStream] -] - -{ #category : #private } -ExtractedType >> rootsUnderstanding: selectors [ - "When the set of selectors is not empty, answer a set of the highest possible classes in the system that implement all the selectors. When the set of selectors is empty, return the empty set." - - | initialClasses nextClasses traverseStack next | - selectors isEmpty - ifTrue: [ ^ OrderedCollection new ]. - nextClasses := OrderedCollection with: Object. - traverseStack := OrderedCollection new: 10000. - selectors - do: [ :selector | - initialClasses := nextClasses. - nextClasses := OrderedCollection new. - initialClasses - do: [ :initialClass | - "inline canUnderstand: for performance" - | cl | - cl := initialClass. - [ cl == nil or: [ cl methodDict pointsTo: selector ] ] - whileFalse: [ cl := cl superclass ]. - cl isNil - ifFalse: [ nextClasses addLast: initialClass ] - ifTrue: [ | size | - traverseStack reset. - traverseStack addLast: initialClass. - size := 1. - "(traverseStack isEmpty) removed for performance" - [ size = 0 ] - whileFalse: [ "(traverseStack removeFirst) removed for performance" - next := traverseStack unsafeRemoveFirst. - size := size - 1. - next - subclassesDo: [ :subcl | - "(subcl includesSelector: selector) removed for performance" - (subcl methodDict pointsTo: selector) - ifTrue: [ nextClasses addLast: subcl ] - ifFalse: [ traverseStack addLast: subcl. - size := size + 1 ] ] ] ] ] ]. - ^ nextClasses -] - -{ #category : #accessing } -ExtractedType >> types [ - ^extractedTypes - ifNil: [extractedTypes := self mergeTypes] - ifNotNil: [extractedTypes] -] diff --git a/src/RoelTyper/ExtractedTypeForBlockArg.class.st b/src/RoelTyper/ExtractedTypeForBlockArg.class.st deleted file mode 100644 index b23a74939..000000000 --- a/src/RoelTyper/ExtractedTypeForBlockArg.class.st +++ /dev/null @@ -1,83 +0,0 @@ -Class { - #name : #ExtractedTypeForBlockArg, - #superclass : #AbstractType, - #instVars : [ - 'lives', - 'compiledMethod' - ], - #category : #'RoelTyper-Core' -} - -{ #category : #'instance creation' } -ExtractedTypeForBlockArg class >> forOffset: offset ofCompiledMethod: aCompiledMethod inClass: aClass [ - ^self new - tempOffset: offset; - ivarClass: aClass; - compiledMethod: aCompiledMethod; - yourself -] - -{ #category : #accessing } -ExtractedTypeForBlockArg >> asBlockArgInTypeCollector: aTypeCollector [ - self newLive -] - -{ #category : #accessing } -ExtractedTypeForBlockArg >> compiledMethod: aCompiledMethod [ - compiledMethod := aCompiledMethod -] - -{ #category : #'system primitives' } -ExtractedTypeForBlockArg >> doesNotUnderstand: aMessage [ - ^aMessage sendTo: self liveExtractType -] - -{ #category : #initialization } -ExtractedTypeForBlockArg >> initialize [ - super initialize. - lives := OrderedCollection with: (ExtractedTypeForTmp new) -] - -{ #category : #'private-accessing' } -ExtractedTypeForBlockArg >> interface [ - ^(lives inject: Set new into: [:ord :et | ord addAll: (et interface); yourself ]) asOrderedCollection -] - -{ #category : #private } -ExtractedTypeForBlockArg >> liveExtractType [ - ^lives last -] - -{ #category : #'instance creation' } -ExtractedTypeForBlockArg >> newLive [ - ^lives addLast: (ExtractedTypeForTmp new) -] - -{ #category : #printing } -ExtractedTypeForBlockArg >> printOn: aStream [ - aStream - nextPutAll: 'Block arg'; - cr; - cr. - lives - doWithIndex: [ :et :index | - aStream - nextPutAll: 'Activation '; - print: index; - nextPutAll: ': '. - et printOn: aStream. - aStream cr ] -] - -{ #category : #accessing } -ExtractedTypeForBlockArg >> tempOffset: anOffset [ - ivarName := anOffset -] - -{ #category : #accessing } -ExtractedTypeForBlockArg >> types [ - |types| - types := IdentitySet new. - lives do: [:et | types addAll: (et mergeTypes)]. - ^types asOrderedCollection -] diff --git a/src/RoelTyper/ExtractedTypeForTmp.class.st b/src/RoelTyper/ExtractedTypeForTmp.class.st deleted file mode 100644 index 098997e40..000000000 --- a/src/RoelTyper/ExtractedTypeForTmp.class.st +++ /dev/null @@ -1,43 +0,0 @@ -Class { - #name : #ExtractedTypeForTmp, - #superclass : #ExtractedType, - #instVars : [ - 'compiledMethod' - ], - #category : #'RoelTyper-Core' -} - -{ #category : #'instance creation' } -ExtractedTypeForTmp class >> forTmpOffset: offset ofCompiledMethod: aCompiledMethod inClass: aClass [ - ^ self new - tempOffset: offset; - ivarClass: aClass; - compiledMethod: aCompiledMethod; - yourself -] - -{ #category : #accessing } -ExtractedTypeForTmp >> asBlockArgInTypeCollector: aTypeCollector [ - aTypeCollector transformAsBlockArg: self -] - -{ #category : #accessing } -ExtractedTypeForTmp >> compiledMethod [ - ^ compiledMethod -] - -{ #category : #accessing } -ExtractedTypeForTmp >> compiledMethod: anObject [ - compiledMethod := anObject -] - -{ #category : #accessing } -ExtractedTypeForTmp >> tempOffset [ - ^ivarName - -] - -{ #category : #accessing } -ExtractedTypeForTmp >> tempOffset: anOffset [ - ivarName := anOffset -] diff --git a/src/RoelTyper/InstvarInterfaceExtractor.class.st b/src/RoelTyper/InstvarInterfaceExtractor.class.st deleted file mode 100644 index 9e75eb21d..000000000 --- a/src/RoelTyper/InstvarInterfaceExtractor.class.st +++ /dev/null @@ -1,390 +0,0 @@ -" -I am responsible for extracting the messages sent to an instance variable and the assignments done to an instance variable. I am supposed to work together with a TypeCollector. - -Instance Variables: - collector description of collector - copied description of copied - initialStack description of initialStack - input description of input - method description of method - saveStacks description of saveStacks - stack <(OrderedCollection of: Object)> description of stack - - -" -Class { - #name : #InstvarInterfaceExtractor, - #superclass : #InstructionClient, - #instVars : [ - 'stack', - 'copied', - 'initialStack', - 'method', - 'saveStacks', - 'input', - 'collector', - 'blockTraversal', - 'blockArgs' - ], - #category : #'RoelTyper-Core' -} - -{ #category : #'instruction decoding' } -InstvarInterfaceExtractor >> blockReturnTop [ - "Return Top Of Stack bytecode." - - ^self pop -] - -{ #category : #private } -InstvarInterfaceExtractor >> copied: list [ - copied := list -] - -{ #category : #'instruction decoding' } -InstvarInterfaceExtractor >> doDup [ - "Duplicate Top Of Stack bytecode." - - self dupFirst -] - -{ #category : #'instruction decoding' } -InstvarInterfaceExtractor >> doPop [ - "Remove Top Of Stack bytecode." - - ^self pop -] - -{ #category : #'opcodes-data movement' } -InstvarInterfaceExtractor >> dupFirst [ - stack add: stack last -] - -{ #category : #extracting } -InstvarInterfaceExtractor >> extractInterfacesFrom: m addTo: aTypeCollector [ - method := m. - saveStacks := Dictionary new. - stack := OrderedCollection new. - "0 to: method numTemps - 1 do: [:i | stack add: #temp -> i ]." - initialStack := stack copy. - collector := aTypeCollector. - input := InstructionStream on: method. - blockTraversal := false. - blockArgs := 0. - [input atEnd] - whileFalse: - [self reloadStack. - input interpretNextInstructionFor: self] -] - -{ #category : #private } -InstvarInterfaceExtractor >> initialize [ - super initialize. - blockTraversal := false. - blockArgs := 0. -] - -{ #category : #private } -InstvarInterfaceExtractor >> input [ - ^input -] - -{ #category : #'instruction decoding' } -InstvarInterfaceExtractor >> jump: delta [ - | currentPC | - currentPC := self input pc. - delta < 1 ifTrue: [^self]. - self saveStacks - at: currentPC + delta - put: stack copy. - stack := OrderedCollection new. - -] - -{ #category : #'instruction decoding' } -InstvarInterfaceExtractor >> jump: delta if: condition [ - |top| - (top := stack last) - isInteger ifTrue: [ - collector addAssignment: Boolean to: top. - ] - ifFalse: [ - (top isVariableBinding and: [top key = #temp]) ifTrue: [collector addAssignment: Boolean toTmp: top value] - ifFalse: [ - (top isVariableBinding and: [top key = #return]) ifTrue: [collector addAssignment: Boolean toReturnOf: top value] - ] - ]. - self pop. "receiver of ifTrue or ifFalse, according to condition" - delta < 1 ifTrue: [^self]. - self saveStacks - at: self input pc + delta - put: - (stack copy) -] - -{ #category : #private } -InstvarInterfaceExtractor >> method: aMethod [ - method := aMethod. - copied := #() -] - -{ #category : #'instruction decoding' } -InstvarInterfaceExtractor >> methodReturnConstant: value [ - "Return Constant bytecode." - collector addAssignmentForReturn: value class. - ^self - pushConstant: value; - sqReturnTop -] - -{ #category : #'instruction decoding' } -InstvarInterfaceExtractor >> methodReturnReceiver [ - "Return Self bytecode." - collector addAssignmentForReturnSelf. - ^self - pushReceiver; - sqReturnTop -] - -{ #category : #'instruction decoding' } -InstvarInterfaceExtractor >> methodReturnTop [ - "Return Top Of Stack bytecode." - collector addAssignmentForReturn: stack last. - ^self sqReturnTop -] - -{ #category : #'opcodes-control' } -InstvarInterfaceExtractor >> nativeSend: selector numArgs: na [ - | receiver args | - args := stack removeLast: na. - receiver := stack removeLast. - receiver isInteger - ifTrue: - [ collector - addSend: selector - to: receiver ] - ifFalse: - [ receiver isVariableBinding ifTrue: - [ receiver key = #temp - ifTrue: - [ collector - addSend: selector - toTmp: receiver value ] - ifFalse: - [ receiver key = #return ifTrue: - [ collector - addSend: selector - onReturnOfSelfMethod: receiver value ] ] ] ]. - (receiver = #self and: [ collector theClass methodDict includesKey: selector ]) ifTrue: - [ args doWithIndex: - [ :arg :index | - collector - handleAssignment: arg - forTmp: index - 1 - in: collector theClass >> selector ] ]. - stack add: (collector - pushSendOf: selector - to: receiver - args: args) -] - -{ #category : #'opcodes-data movement' } -InstvarInterfaceExtractor >> pop [ - stack removeLast -] - -{ #category : #'instruction decoding' } -InstvarInterfaceExtractor >> popIntoLiteralVariable: anAssociation [ - "Remove Top Of Stack And Store Into Literal Variable bytecode." - - ^self pop -] - -{ #category : #'instruction decoding' } -InstvarInterfaceExtractor >> popIntoReceiverVariable: offset [ - "Remove Top Of Stack And Store Into Instance Variable bytecode." - - collector - handleAssignment: stack removeLast - for: offset -] - -{ #category : #'instruction decoding' } -InstvarInterfaceExtractor >> popIntoTemporaryVariable: offset [ - "Remove Top Of Stack And Store Into Temporary Variable bytecode." - - "An empty stack => we are in a block" - - blockTraversal ifTrue: [blockArgs > 0 ifTrue: [stack addLast: #temp -> offset. collector transformAsBlockArgTheTmpOffset: offset]. blockArgs := blockArgs - 1. blockTraversal := (blockArgs > 0) ]. - collector - handleAssignment: stack removeLast - forTmp: offset -] - -{ #category : #'instruction decoding' } -InstvarInterfaceExtractor >> pushActiveContext [ - "Push Active Context On Top Of Its Own Stack bytecode." - - self pushContext -] - -{ #category : #'opcodes-data movement' } -InstvarInterfaceExtractor >> pushConstant: value [ - value class == BlockClosure - ifTrue: - [self - readBlock: value method - copied: 0] - ifFalse: [ - blockArgs := value. - stack addLast: value class] -] - -{ #category : #'opcodes-data movement' } -InstvarInterfaceExtractor >> pushContext [ - stack add: #context -] - -{ #category : #'opcodes-data movement' } -InstvarInterfaceExtractor >> pushInst: index [ - stack add: index -] - -{ #category : #'instruction decoding' } -InstvarInterfaceExtractor >> pushLiteralVariable: anAssociation [ - "Push Contents Of anAssociation On Top Of Stack bytecode." - - self pushStatic: anAssociation -] - -{ #category : #'opcodes-data movement' } -InstvarInterfaceExtractor >> pushReceiver [ - stack addLast: #self -] - -{ #category : #'instruction decoding' } -InstvarInterfaceExtractor >> pushReceiverVariable: offset [ - "Push Contents Of the Receiver's Instance Variable Whose Index - is the argument, offset, On Top Of Stack bytecode." - - self pushInst: offset -] - -{ #category : #'opcodes-data movement' } -InstvarInterfaceExtractor >> pushStatic: assoc [ - "assoc can be an association OR a variable binding. I just push the complete association, since it does not interest me for the moment." - - stack addLast: assoc -] - -{ #category : #'instruction decoding' } -InstvarInterfaceExtractor >> pushTemporaryVariable: offset [ - "Push Contents Of Temporary Variable Whose Index Is the - argument, offset, On Top Of Stack bytecode." - - stack add: (#temp -> offset) -] - -{ #category : #private } -InstvarInterfaceExtractor >> readBlock: block copied: count [ - | newCopied | - newCopied := stack removeLast: count. - stack add: #block. - ^(self class new) - copied: newCopied; - extractInterfacesFrom: block - addTo: collector -] - -{ #category : #private } -InstvarInterfaceExtractor >> reloadStack [ - stack isNil - ifTrue: - [stack := self saveStacks - at: self input pc - ifAbsent: [initialStack copy]. - ^self]. - stack := self saveStacks - at: self input pc - ifAbsent: [stack] -] - -{ #category : #private } -InstvarInterfaceExtractor >> saveStacks [ - saveStacks ifNil: [saveStacks := Dictionary new]. - ^saveStacks -] - -{ #category : #'instruction decoding' } -InstvarInterfaceExtractor >> send: selector numArgs: na [ - - self nativeSend: selector numArgs: na. - (stack last = #block and: [blockArgs > 0])ifTrue: [blockTraversal := true] -] - -{ #category : #'instruction decoding' } -InstvarInterfaceExtractor >> send: selector super: supered numArgs: numberArguments [ - "Send Message With Selector, selector, bytecode. The argument, - supered, indicates whether the receiver of the message is specified with - 'super' in the source method. The arguments of the message are found in - the top numArguments locations on the stack and the receiver just - below them." - - ^supered - ifTrue: - [self - sendSuper: selector - numArgs: numberArguments] - ifFalse: - [self - send: selector - numArgs: numberArguments] -] - -{ #category : #'opcodes-control' } -InstvarInterfaceExtractor >> sendSuper: selector numArgs: na [ - stack removeLast: na + 1. - stack add: #computed -] - -{ #category : #private } -InstvarInterfaceExtractor >> sqReturnTop [ - "In VW, method returnTop is inherited from instructionClient and does nothing." - - -] - -{ #category : #'instruction decoding' } -InstvarInterfaceExtractor >> storeIntoLiteralVariable: anAssociation [ - "Store Top Of Stack Into Literal Variable Of Method bytecode." - - "Nothing to do, since I do not do anything with literal variables. Just keep the right-hand side on the stack for further processing" - - -] - -{ #category : #'instruction decoding' } -InstvarInterfaceExtractor >> storeIntoReceiverVariable: offset [ - "Store Top Of Stack Into Instance Variable Of Method bytecode." - - | rvalue | - collector - handleAssignment: (rvalue := stack removeLast) - for: offset. - stack add: rvalue -] - -{ #category : #'instruction decoding' } -InstvarInterfaceExtractor >> storeIntoTemporaryVariable: offset [ - "Store Top Of Stack Into Temporary Variable Of Method bytecode." - - "Nothing to do,since I do not treat temporary variables for the moment." - - - | rvalue | - blockTraversal ifTrue: [blockArgs > 0 ifTrue: [stack addLast: #temp -> offset. collector transformAsBlockArgTheTmpOffset: offset]. blockArgs := blockArgs - 1. blockTraversal := (blockArgs > 0) ]. - collector - handleAssignment: (rvalue := stack removeLast) - forTmp: offset. - stack add: rvalue -] diff --git a/src/RoelTyper/Metaclass.extension.st b/src/RoelTyper/Metaclass.extension.st deleted file mode 100644 index c63181387..000000000 --- a/src/RoelTyper/Metaclass.extension.st +++ /dev/null @@ -1,8 +0,0 @@ -Extension { #name : #Metaclass } - -{ #category : #'*RoelTyper-enumerating' } -Metaclass >> nonMetaSubclassesDo: aBlock [ - "Evaluate the argument, aBlock, for each of the receiver's immediate non-meta subclasses." - - self subclasses do: aBlock -] diff --git a/src/RoelTyper/OrderedCollection.extension.st b/src/RoelTyper/OrderedCollection.extension.st deleted file mode 100644 index d3cf12126..000000000 --- a/src/RoelTyper/OrderedCollection.extension.st +++ /dev/null @@ -1,12 +0,0 @@ -Extension { #name : #OrderedCollection } - -{ #category : #'*RoelTyper' } -OrderedCollection >> unsafeRemoveFirst [ - "Remove the first element of the receiver and answer it. If the receiver is - empty, create an error notification." - | firstObject | - firstObject := array at: firstIndex. - array at: firstIndex put: nil. - firstIndex := firstIndex + 1. - ^ firstObject -] diff --git a/src/RoelTyper/PharoInstvarInterfaceExtractor.class.st b/src/RoelTyper/PharoInstvarInterfaceExtractor.class.st deleted file mode 100644 index 7947998bf..000000000 --- a/src/RoelTyper/PharoInstvarInterfaceExtractor.class.st +++ /dev/null @@ -1,161 +0,0 @@ -Class { - #name : #PharoInstvarInterfaceExtractor, - #superclass : #InstvarInterfaceExtractor, - #instVars : [ - 'blockTempsMapping', - 'blocksLimits' - ], - #category : #'RoelTyper-Pharo' -} - -{ #category : #block } -PharoInstvarInterfaceExtractor >> blockMapping [ - ^ blockTempsMapping last -] - -{ #category : #block } -PharoInstvarInterfaceExtractor >> blocksArgsBySize [ - ^ blocksLimits ifNil: [ blocksLimits := OrderedCollection new ] -] - -{ #category : #block } -PharoInstvarInterfaceExtractor >> blocksDecrement [ - - blocksLimits := blocksLimits select: [:e | (e = input pc) ifTrue: [self removeBlockMapping. false] ifFalse: [true] ] - -] - -{ #category : #extracting } -PharoInstvarInterfaceExtractor >> extractInterfacesFrom: m addTo: aTypeCollector [ - method := m. - saveStacks := Dictionary new. - stack := OrderedCollection new. - "0 to: method numTemps - 1 do: [:i | stack add: #temp -> i ]." - initialStack := stack copy. - collector := aTypeCollector. - input := InstructionStream on: method. - blockTraversal := false. - blocksLimits := OrderedCollection new. - blockTempsMapping := OrderedCollection new. - blockArgs := 0. - [input atEnd] - whileFalse: - [self reloadStack. - input interpretNextInstructionFor: self. - self blocksDecrement. - ] -] - -{ #category : #block } -PharoInstvarInterfaceExtractor >> inABlock [ - ^ blockTempsMapping isNotEmpty -] - -{ #category : #initialization } -PharoInstvarInterfaceExtractor >> initialize [ - super initialize. - blockTempsMapping := OrderedCollection new. -] - -{ #category : #'instruction decoding' } -PharoInstvarInterfaceExtractor >> methodReturnTop [ - ^self pop -] - -{ #category : #block } -PharoInstvarInterfaceExtractor >> newBlockMapping [ - blockTempsMapping add: OrderedCollection new. - -] - -{ #category : #'instruction decoding' } -PharoInstvarInterfaceExtractor >> popIntoRemoteTemp: remoteTempIndex inVectorAt: tempVectorIndex [ - "Remove Top Of Stack And Store Into Offset of Temp Vector bytecode." - stack removeLast - -] - -{ #category : #'instruction decoding' } -PharoInstvarInterfaceExtractor >> popIntoTemporaryVariable: offset [ - "Remove Top Of Stack And Store Into Temporary Variable bytecode." - - "An empty stack => we are in a block" - self inABlock ifFalse: [ - collector - handleAssignment: stack removeLast - forTmp: offset] ifTrue: [ - - ] -] - -{ #category : #'instruction decoding' } -PharoInstvarInterfaceExtractor >> pushClosureCopyNumCopiedValues: numCopied numArgs: numArgs blockSize: blockSize [ - self newBlockMapping. - self blocksArgsBySize add: blockSize + input pc - 1. - 1 to: numArgs do: [:index | self blockMapping add: #blockArg->index.]. - numCopied timesRepeat: [ self blockMapping add: stack removeLast afterIndex: numArgs]. - stack addLast: #block. - blockArgs := numArgs. - -] - -{ #category : #'instruction decoding' } -PharoInstvarInterfaceExtractor >> pushConsArrayWithElements: anArray [ - stack add: #instcreation->Array -] - -{ #category : #'instruction decoding' } -PharoInstvarInterfaceExtractor >> pushNewArrayOfSize: numElements [ - "Push New Array of size numElements bytecode." - stack addLast: #computed -] - -{ #category : #'instruction decoding' } -PharoInstvarInterfaceExtractor >> pushRemoteTemp: remoteTempIndex inVectorAt: tempVectorIndex [ - stack addLast: #computed -] - -{ #category : #'instruction decoding' } -PharoInstvarInterfaceExtractor >> pushTemporaryVariable: offset [ - "Push Contents Of Temporary Variable Whose Index Is the - argument, offset, On Top Of Stack bytecode." - self inABlock - ifTrue: [stack - add: (self blockMapping - at: offset + 1 - ifAbsent: [#blockTemp -> (offset - self blockMapping size)])] - ifFalse: [stack add: #temp -> offset] -] - -{ #category : #removing } -PharoInstvarInterfaceExtractor >> removeBlockMapping [ - blockTempsMapping removeLast -] - -{ #category : #'opcodes-control' } -PharoInstvarInterfaceExtractor >> send: selector numArgs: na [ - "selector = #shapeBoundsAt:ifPresent: ifTrue: [self halt]". - ^self nativeSend: selector numArgs: na -] - -{ #category : #'instruction decoding' } -PharoInstvarInterfaceExtractor >> storeIntoTemporaryVariable: offset [ - "Store Top Of Stack Into Temporary Variable Of Method bytecode." - - "Nothing to do,since I do not treat temporary variables for the moment." - - - | rvalue | - stack isEmpty ifTrue: [ - self flag: 'bug here. For now just do nothing. uncomment the halt to run the example. - It seems that there is a general problem with this method, see also TypeCollector >> handleAssignment:forTmp: '. - "Try for example: - TypeCollector typeInstvar: #superclass ofClassWithLookup: Behavior " - "self halt." - ^ self. - ]. - collector - handleAssignment: (rvalue := stack removeLast) - forTmp: offset. - stack add: rvalue -] diff --git a/src/RoelTyper/PharoTypeCollector.class.st b/src/RoelTyper/PharoTypeCollector.class.st deleted file mode 100644 index 1ebe5c910..000000000 --- a/src/RoelTyper/PharoTypeCollector.class.st +++ /dev/null @@ -1,38 +0,0 @@ -" -(TypeCollector typeTmpsIn: (ASampleClass>>#return) ofClass: ASampleClass) -" -Class { - #name : #PharoTypeCollector, - #superclass : #TypeCollector, - #category : #'RoelTyper-Pharo' -} - -{ #category : #heuristics } -PharoTypeCollector >> assignmentTypeOf: val [ - val isBehavior ifTrue: [^val]. - val isVariableBinding - ifTrue: - [val key == #instcreation - ifTrue: [^val value] - ifFalse: [^val value class]]. - ^nil -] - -{ #category : #heuristics } -PharoTypeCollector >> languageSpecificPushSendOf: selector to: rec args: args [ - (#(#// #quo: #rem: #\\ #ceiling #floor #rounded #roundTo: #truncated #truncateTo: #/ #+ #- #* #abs #negated #reciprocal) - includes: selector) - ifTrue: - [^self - tryUsing: rec - for: selector - ifNotUse: Number]. - (selector = #yourself) ifTrue: [^rec]. - (rec = #self and: [(theClass methodDict includesKey: selector)]) ifTrue: [^#return->selector]. - ^#computed -] - -{ #category : #private } -PharoTypeCollector >> newExtractor [ - ^PharoInstvarInterfaceExtractor new -] diff --git a/src/RoelTyper/TypeCollector.class.st b/src/RoelTyper/TypeCollector.class.st deleted file mode 100644 index 89a60e0aa..000000000 --- a/src/RoelTyper/TypeCollector.class.st +++ /dev/null @@ -1,530 +0,0 @@ -" -I collect and assemble the types sent to instance variables for a certain class (I use the InterfaceExtractor for that), and use them to create and return TypingResults. - -Instance Variables: - assignments description of assignments - instVarOffset description of instVarOffset - instVars <(Palette of: (ExceptionSet | GenericException | SequenceableCollection | Signal)) | (SequenceableCollection of: (ExceptionSet | GenericException | SequenceableCollection | Signal))> description of instVars - sends description of sends - theClass description of theClass - - -Our type-reconstruction algorithm can be decomposed into three phases: - - 1. interface type extraction. This phase reconstructs the types according to the messages that are being sent to the variable in the class where it is defined. This is done in two steps: first of all the set of messages sent to the variable is collected. Secondly we look through the system and find all types that understand this set of selectors. The output of this phase are the interface types. - - 2. assignment type extraction. This phase reconstructs the types by looking at assignments made to the variable in the class where it is defined. It collects all right-hand sides of assign- ment expressions involving the variable, and applies a series of heuristics to find the type results of these expressions. These are then collected in the assignment types. - - 3. merging. This phase takes the interface types and the assignment types as input, and merges them into the final type results for the variable. -" -Class { - #name : #TypeCollector, - #superclass : #Object, - #instVars : [ - 'theClass', - 'instVars', - 'typingResults', - 'currentExtractedMethod', - 'localTypingResults' - ], - #category : #'RoelTyper-Core' -} - -{ #category : #'instance creation' } -TypeCollector class >> collectorAfterTypeInstvarsOfClass: aClass [ - "self typeInstvarsOfClass: Point" - - ^self new typeInstvarsOfClass: aClass; yourself -] - -{ #category : #'instance creation' } -TypeCollector class >> new [ - "Override new to return either a VWTypeCollector or a SqueakTypeCollector" - - ^self newForPlatform -] - -{ #category : #'instance creation' } -TypeCollector class >> newForPlatform [ - "Return either a VWTypeCollector or a SqueakTypeCollector, depending on the platform used." - - ^PharoTypeCollector basicNew -] - -{ #category : #'instance creation' } -TypeCollector class >> onClass: aClass [ - ^self new onClass: aClass -] - -{ #category : #'instance creation' } -TypeCollector class >> typeInstvar: var ofClass: aClass [ - "self typeInstvar: #x ofClass: Point " - - ^(self new typeInstvarsOfClass: aClass) at: var -] - -{ #category : #'instance creation' } -TypeCollector class >> typeInstvar: var ofClassWithLookup: aClass [ - "self typeInstvar: #origin ofClassWithLookup: Quadrangle" - | theClass | - theClass := aClass. - [theClass isNil not - and: [theClass instVarNames includes: var]] - whileFalse: [theClass := theClass superclass]. - theClass isNil - ifTrue: [^ ExtractedType new]. - ^ self typeInstvar: var ofClass: theClass -] - -{ #category : #'instance creation' } -TypeCollector class >> typeInstvarsOfClass: aClass [ - "self typeInstvarsOfClass: Point" - - ^self new typeInstvarsOfClass: aClass -] - -{ #category : #'instance creation' } -TypeCollector class >> typeTmpsIn: aCompiledMethod ofClass: aClass [ - "self typeInstvarsOfClass: Point" - - ^self new typeTmpsIn: aCompiledMethod ofClass: aClass -] - -{ #category : #'instance creation' } -TypeCollector class >> versionString [ - "Take the removal of the standard version method on Smalltalk into account for Squeak :-( " - - ^(Smalltalk - at: #SystemVersion - ifAbsent: [^Smalltalk version]) current version -] - -{ #category : #accessing } -TypeCollector >> absoluteIndexForVar: iVar [ - "Note: works for Squeak and VisualWorks. If it would be only for VW, you could just use instVarIndexFor: instead." - - ^instVars indexOf: iVar -] - -{ #category : #adding } -TypeCollector >> addAssignment: value to: index [ - self - withTranslatedIndex: index - do: [ :i | (self typingResults at: i) addAssignment: value ] -] - -{ #category : #adding } -TypeCollector >> addAssignment: val toReturnOf: aSelector [ - | eT | - eT := self extractedTypeForReturnInMethod: (theClass >> aSelector). - eT addAssignment: val. -] - -{ #category : #adding } -TypeCollector >> addAssignment: value toTmp: index [ - ((localTypingResults at: currentExtractedMethod) at: index + 1) addAssignment: value -] - -{ #category : #adding } -TypeCollector >> addAssignment: value toTmp: index in: aCompiledMethod [ - ((localTypingResults at: aCompiledMethod) at: index + 1) addAssignment: value -] - -{ #category : #adding } -TypeCollector >> addAssignmentForReturn: val [ - | eT | - eT := self extractedTypeForReturnInMethod: currentExtractedMethod. - val isInteger - ifTrue: - [ self - withTranslatedIndex: val - do: [ :idx | eT addReverseLinkedExtractedType: (typingResults at: idx) ] ] - ifFalse: - [ (val isVariableBinding and: [ val key = #temp ]) - ifTrue: - [ eT addReverseLinkedExtractedType: ((localTypingResults at: currentExtractedMethod) at: val value + 1) ] - ifFalse: - [ (val isVariableBinding and: [ val key = #return ]) - ifTrue: - [ eT addReverseLinkedExtractedType: (self extractedTypeForReturnInMethod: theClass >> val value) ] - ifFalse: - [ (val isVariableBinding and: [ val key = #blockArg ]) - ifTrue: [ - ] - ifFalse: [(self assignmentTypeOf: val) ifNotNil: [ :result | eT addAssignment: result ] ] ] ]] -] - -{ #category : #adding } -TypeCollector >> addAssignmentForReturnSelf [ - (self extractedTypeForReturnInMethod: currentExtractedMethod) addAssignment: theClass -] - -{ #category : #adding } -TypeCollector >> addSend: selector onReturnOfSelfMethod: aSelfSelector [ - "Add a range check to filter out sends to instvars defined in superclasses, etc." - (self extractedTypeForReturnInMethod: theClass >> aSelfSelector) addSend: selector -] - -{ #category : #adding } -TypeCollector >> addSend: selector to: index [ - "Add a range check to filter out sends to instvars defined in superclasses, etc." - - self - withTranslatedIndex: index - do: [:i | (self typingResults at: i) addSend: selector] -] - -{ #category : #adding } -TypeCollector >> addSend: selector toTmp: index [ - "Add a range check to filter out sends to instvars defined in superclasses, etc." - ((localTypingResults at: currentExtractedMethod ) at: index + 1) addSend: selector -] - -{ #category : #accessing } -TypeCollector >> allInstVarTypes [ - self typingResults do: [ :each | each types ] - -] - -{ #category : #accessing } -TypeCollector >> allTmpTypes [ - - localTypingResults valuesDo: [ :array | array do: [ :et | et types]] -] - -{ #category : #accessing } -TypeCollector >> allTypes [ - self typingResults do: [ :each | each types ]. - localTypingResults valuesDo: [ :array | array do: [ :et | et types ]] -] - -{ #category : #heuristics } -TypeCollector >> assignmentTypeOf: val [ - ^self subclassResponsibility -] - -{ #category : #accessing } -TypeCollector >> assignmentsTo: instVarName [ - ^ (self typingResultsFor: instVarName) flattenLinks; assignments -] - -{ #category : #accessing } -TypeCollector >> currentExtractedMethod [ - ^ currentExtractedMethod -] - -{ #category : #accessing } -TypeCollector >> currentExtractedMethod: anObject [ - currentExtractedMethod := anObject. - localTypingResults at: anObject put: ((1 to: anObject numTemps + 1) collect: [:each | ExtractedTypeForTmp - forTmpOffset: each ofCompiledMethod: anObject inClass: anObject methodClass ]) asArray -] - -{ #category : #adding } -TypeCollector >> extractedTypeForReturnInMethod: aCompiledMethod [ - ^(localTypingResults at: aCompiledMethod) last -] - -{ #category : #heuristics } -TypeCollector >> handleAssignment: val for: index [ - val isInteger - ifTrue: - [ self - withTranslatedIndex: val - do: - [ :idx | - (typingResults at: index + 1) addReverseLinkedExtractedType: (typingResults at: idx) ] ] - ifFalse: - [ (val isVariableBinding and: [ val key = #temp ]) - ifTrue: - [ (typingResults at: index + 1) addReverseLinkedExtractedType: ((localTypingResults at: currentExtractedMethod) at: val value + 1) ] - ifFalse: - [ (val isVariableBinding and: [ val key = #return ]) - ifTrue: - [ (typingResults at: index + 1) addReverseLinkedExtractedType: (self extractedTypeForReturnInMethod: theClass >> val value) ] - ifFalse: - [ (val isVariableBinding and: [ val key = #blockArg ]) - ifFalse: [(self assignmentTypeOf: val) ifNotNil: - [ :result | - self - addAssignment: result - to: index ] ] ] ]] -] - -{ #category : #heuristics } -TypeCollector >> handleAssignment: val forTmp: index [ - "Cannot use ifNotNil: with argument in Squeak, so use a temporary instead." - - (localTypingResults at: currentExtractedMethod) at: index + 1 ifAbsent: [ - self flag: 'bug here. For now just do nothing. uncomment the halt to run the example'. - "this case seems to be broken for now. " - "Try for example: - TypeCollector typeInstvar: #lastStepMessage ofClassWithLookup: WorldState " - "self halt." - ^ self. - ]. - - val isInteger - ifTrue: - [ self - withTranslatedIndex: val - do: - [ :idx | - ((localTypingResults at: currentExtractedMethod) at: index + 1) addReverseLinkedExtractedType: (typingResults at: idx) ] ] - ifFalse: - [ (val isVariableBinding and: [ val key = #temp ]) - ifTrue: - [ ((localTypingResults at: currentExtractedMethod ) at: index + 1) addReverseLinkedExtractedType: ((localTypingResults at: currentExtractedMethod) at: val value + 1) ] - ifFalse: - [ (val isVariableBinding and: [ val key = #return ]) - ifTrue: - [ ((localTypingResults at: currentExtractedMethod ) at: index + 1) addReverseLinkedExtractedType: (self extractedTypeForReturnInMethod: theClass >> val value) ] - ifFalse: [ - (val isVariableBinding and: [ val key = #blockArg ]) - ifFalse: [(self assignmentTypeOf: val) ifNotNil: - [ :result | - self - addAssignment: result - toTmp: index ] ] ]]] -] - -{ #category : #heuristics } -TypeCollector >> handleAssignment: val forTmp: index in: aCompiledMethod [ - "Cannot use ifNotNil: with argument in Squeak, so use a temporary instead." - val isInteger - ifTrue: - [ self - withTranslatedIndex: val - do: - [ :idx | - ((localTypingResults at: aCompiledMethod) at: index + 1) addReverseLinkedExtractedType: (typingResults at: idx). - ] ] - ifFalse: - [ (val isVariableBinding and: [ val key = #temp ]) - ifTrue: - [ ((localTypingResults at: aCompiledMethod ) at: index + 1) addReverseLinkedExtractedType: ((localTypingResults at: currentExtractedMethod) at: val value + 1). - ] - ifFalse: - [ (val isVariableBinding and: [ val key = #return ]) - ifTrue: - [ ((localTypingResults at: aCompiledMethod ) at: index + 1) addReverseLinkedExtractedType: (self extractedTypeForReturnInMethod: theClass >> val value) ] - ifFalse: [ - (val isVariableBinding and: [ val key = #blockArg ]) - ifFalse: [(self assignmentTypeOf: val) ifNotNil: - [ :result | - self - addAssignment: result - toTmp: index - in: aCompiledMethod ] ] ]]] -] - -{ #category : #heuristics } -TypeCollector >> languageSpecificPushSendOf: selector to: rec args: args [ - ^#computed -] - -{ #category : #private } -TypeCollector >> lastAssignmentForIndex: anIndex [ - | assignments | - assignments := (self typingResults at: anIndex) assignments. - ^assignments isEmpty - ifTrue: [nil] - ifFalse: [assignments last] -] - -{ #category : #private } -TypeCollector >> lastAssignmentForTmpIndex: anIndex [ - | assignments | - assignments := ((localTypingResults at: currentExtractedMethod) at: anIndex) assignments. - ^ assignments isEmpty - ifTrue: [ nil ] - ifFalse: [ assignments last ] -] - -{ #category : #private } -TypeCollector >> newExtractor [ - "Return a new extractor class. This is typically Smalltalk dialect dependent, so subclasses have to override to choose the one they want." - - ^self subclassResponsibility -] - -{ #category : #'initialize-release' } -TypeCollector >> onClass: aClass [ - theClass := aClass. - instVars := aClass allInstVarNames collect: [ :e | e asSymbol]. - typingResults := (instVars collect: - [ :ivar | - ExtractedType - forInstvar: ivar - inClass: aClass ]) asArray. - localTypingResults := IdentityDictionary new. - theClass selectorsAndMethodsDo: [:sel :cm | - localTypingResults - at: cm - put: ((1 to: cm numTemps + 1) collect: "the last one is for the method returned object" - [ :i | - ExtractedTypeForTmp - forTmpOffset: i ofCompiledMethod: cm inClass: theClass ]) asArray] -] - -{ #category : #accessing } -TypeCollector >> packagedResults [ - | results | - results := IdentityDictionary new. - instVars size - theClass instVarNames size + 1 - to: instVars size - do: - [ :index | - results - at: (instVars at: index) - put: (self typingResults at: index)]. - localTypingResults keysAndValuesDo: [:cm :arr | | prefix prefixTmp| - prefix := '_',cm selector,'>>'. - prefixTmp := prefix, 'tmp'. - 1 to: arr size - 1 do: [:i | results at: ( prefixTmp, i printString) put: (arr at: i)]. - results at: (prefix, 'return') put: (arr last). - ]. - - ^results -] - -{ #category : #accessing } -TypeCollector >> packagedResultsForCompiledMethod: aCompiledMethod [ - | results arr tmpNames numberOfTemporaryVariables | - results := IdentityDictionary new. - arr := (localTypingResults at: aCompiledMethod). - tmpNames := [aCompiledMethod methodNode tempNames] on: Error do: [aCompiledMethod tempNames]. - - "Note we are here voluntary excluding temporary variables that may be contained in a block contained in the compiled method. This has to be fixed somehow" - numberOfTemporaryVariables := (arr size - 1) min: tmpNames size. - 1 to: numberOfTemporaryVariables do: [:i | results at: (tmpNames at: i) put: (arr at: i)]. - results at: ('^') put: arr last. - ^results -] - -{ #category : #heuristics } -TypeCollector >> pushSendOf: selector to: rec args: args [ - "Needs to be optimized" - - | index recValue | - rec == #self - ifTrue: - [ - (index := instVars indexOf: selector) > 0 ifTrue: [^index - 1]. - (selector last == $: - and: - [(index := instVars - indexOf: - (selector - copyFrom: 1 - to: selector size - 1)) > 0]) - ifTrue: - [self - handleAssignment: args first - for: index - 1. - ^#result->selector]. - ]. - (#(#= #== #< #> #<= #>= #~= #notNil #xor:) includes: selector) ifTrue: [^Boolean]. - "('is*' match: selector ) replaced for performance" - ((selector at: 1 ifAbsent: [$j] ) = $i and: [(selector at: 2 ifAbsent: [$j] ) = $s and: [(selector at: 3 ifAbsent: [$n]) isLowercase not]]) ifTrue: [^Boolean]. - (rec isVariableBinding - and: - [(recValue := rec value) isBehavior - and: - [(recValue class categoryForSelector: selector) == #'instance creation']]) - ifTrue: - [^Association - key: #instcreation - value: recValue]. - ^self - languageSpecificPushSendOf: selector - to: rec - args: args -] - -{ #category : #accessing } -TypeCollector >> sendsTo: instVarName [ - - ^ (self typingResultsFor: instVarName) interface -] - -{ #category : #'initialize-release' } -TypeCollector >> theClass [ - ^theClass -] - -{ #category : #adding } -TypeCollector >> transformAsBlockArg: anExtractedTypeForTmp [ - (localTypingResults at: anExtractedTypeForTmp compiledMethod) - at: anExtractedTypeForTmp tempOffset - put: (ExtractedTypeForBlockArg - forOffset: anExtractedTypeForTmp tempOffset - ofCompiledMethod: anExtractedTypeForTmp compiledMethod - inClass: anExtractedTypeForTmp ivarClass) -] - -{ #category : #adding } -TypeCollector >> transformAsBlockArgTheTmpOffset: offset [ - ((localTypingResults at: currentExtractedMethod ) at: (offset + 1)) asBlockArgInTypeCollector: self -] - -{ #category : #adding } -TypeCollector >> transformAsBlockArgTheTmpOffset: offset in: aCompiledMethod [ - ((localTypingResults at: aCompiledMethod ) at: (offset + 1)) asBlockArgInTypeCollector: self -] - -{ #category : #private } -TypeCollector >> tryUsing: receiver for: selector ifNotUse: aClass [ - "If receiver has a type, and the selector is understood by that type, pass that type. If not, use aClass as type." - - | cl | - cl := self assignmentTypeOf: receiver. - ^(cl notNil and: [cl methodDict includesKey: selector]) - ifTrue: [ cl ] - ifFalse: [ aClass ] -] - -{ #category : #'public-typing' } -TypeCollector >> typeInstvarsOfClass: aClass [ - | extractor| - self onClass: aClass. - extractor := self newExtractor. - - aClass selectorsAndMethodsDo: - [:sel :method | - currentExtractedMethod := method. - extractor - extractInterfacesFrom: method - addTo: self]. - ^self packagedResults -] - -{ #category : #'public-typing' } -TypeCollector >> typeTmpsIn: aCompiledMethod ofClass: aClass [ - | extractor| - self onClass: aClass. - extractor := self newExtractor. - - aClass selectorsAndMethodsDo: - [:sel :method | - currentExtractedMethod := method. - extractor - extractInterfacesFrom: method - addTo: self]. - ^self packagedResultsForCompiledMethod: aCompiledMethod -] - -{ #category : #accessing } -TypeCollector >> typingResults [ - ^ typingResults -] - -{ #category : #private } -TypeCollector >> typingResultsFor: instVarName [ - ^self typingResults at: (self absoluteIndexForVar: instVarName) -] - -{ #category : #private } -TypeCollector >> withTranslatedIndex: index do: aBlock [ - aBlock value: index + 1 -] diff --git a/src/RoelTyper/TypeMerger.class.st b/src/RoelTyper/TypeMerger.class.st deleted file mode 100644 index 6534abc7d..000000000 --- a/src/RoelTyper/TypeMerger.class.st +++ /dev/null @@ -1,59 +0,0 @@ -" -1. assignment type subtype of interface type: In this scenario, an interface type is reconstructed, an abstract type for which several concrete (sub)types are plausible at runtime. The assign- ment type is found to be one of these types: it is a subtype of the interface type. In the left column of Figure 3 we see that the interface type will be Number, while the assignment type is SmallInteger, a subclass of Number. Note that this scenario is the most frequently occurring. - - 2. interface type subtype of assignment type: It can occur that the assignment type does not lie within the hierarchy defined by the interface type, but is a supertype of that hierarchy. In that case the concrete assignment type is more general than the abstract interface type. This is illustrated in the middle pane of Figure 3: the extracted type (which would be Date, since it implements a method weekday) is subtype of the assignment type (Magnitude). - - 3. assignment and interface type unrelated: Another possibil- ity is related to the previous one, but here the assignment type and the interface type are completely unrelated. This is a tech- nique sometimes used in dynamic languages. For example, one can hold a collection of objects and, when there is only one object in the collection, decide to directly hold that object in- stead of a collection with only one element. When doing type reconstruction this can easily lead to two different types being extracted: one a collection type, and a second, completely dif- ferent type. The right side of Figure 3 shows how an assignment type could be SmallInteger, while the interface type would be Collection, two completely separated types. - 4. assignment type same as the interface type: Both can be the same, in which case there is no need to merge. - -When merging the sets of interface and assignment types, these cases need to be taken into account. - -Number of different merging approaches: -• - with the AbstractMerger the result of the first case in the exam- ple will be the interface type, since it is the most abstract. -• - the ConcreteMerger will favor the assignment type for the first case in the example. The motivation for this choice is that it is very likely that the concrete type will indeed be the one as- signed, given that it corresponds to the active type. However, this is a heuristic, and some valid types might be omitted be- cause of it. - - • the AssignmentsFirstMerger is a refinement of the ConcreteMerger and therefore also favors the assignment types over the interface types. However when there are assignment types and all interface types are subtypes of the assignment types, the result will be the assignment types (and the found interface types are not used). It only considers the interface types when there is no assignment information, or when there are interface type that are not related to the assignment types. - -" -Class { - #name : #TypeMerger, - #superclass : #Object, - #category : #'RoelTyper-Core' -} - -{ #category : #'instance creation' } -TypeMerger class >> interfaceTypes: interfaceTypeCollection assignmentTypes: assignmentTypesCollection [ - ^self new - mergeInterfaceTypes: interfaceTypeCollection - assignmentTypes: assignmentTypesCollection -] - -{ #category : #private } -TypeMerger >> cleanBooleansIn: collection [ - "Remove all occurences of True, False and Boolean in the given collection. If any element was removed, add Boolean" - - "Note: removeAllSuchThat: in VisualWorks returns the elements removed, while in Squeak it returns the new set. Therefore I adopted a check on the sizes to see if any Boolean class was removed or not, instead of checking the result of removeAllSuchThat: " - - | oldSize | - oldSize := collection size. - collection - removeAllSuchThat: - [ :type | type == True | (type == False) | (type == Boolean)]. - ^oldSize == collection size - ifFalse: - [collection - add: Boolean; - yourself] - ifTrue: [collection] -] - -{ #category : #public } -TypeMerger >> mergeInterfaceTypes: interfaceTypeCollection assignmentTypes: assignmentTypesCollection [ - "interfaceTypes is a set of trees of types reconstructed by looking at the interfaces. - assignmentTypes is a set of trees of types reconstructed by looking at the assignments. - The receiver takes these sets as input and needs to return one set of trees of types that combines both." - - ^self subclassResponsibility -] diff --git a/src/RoelTyper/TypingResultKeeper.class.st b/src/RoelTyper/TypingResultKeeper.class.st deleted file mode 100644 index 876f17bb8..000000000 --- a/src/RoelTyper/TypingResultKeeper.class.st +++ /dev/null @@ -1,193 +0,0 @@ -" -The scientific documentation of RoelTyper can be found in the article - - Fast Type Reconstruction for Dynamically Typed Programming Languages - - -I'm keeping the type information. I collaborate with a TypeCollector. - - -TypingResultKeeper forImage forClasses: { Array . Point } - - -TypingResultKeeper calculateTypesForClass: Point - - - -TypingResultKeeper forImageExpanded -" -Class { - #name : #TypingResultKeeper, - #superclass : #Object, - #instVars : [ - 'timeTaken', - 'typeResults' - ], - #category : #'RoelTyper-Core' -} - -{ #category : #'instance creation' } -TypingResultKeeper class >> benchmarkImage [ - "self benchmarkImage" - - | keeper | - ^Time - millisecondsToRun: - [keeper := self forImage. - keeper withAllInstvarResultsDo: [:cl :iv :result | result types]] -] - -{ #category : #'instance creation' } -TypingResultKeeper class >> forImage [ - ^self new forImage -] - -{ #category : #'instance creation' } -TypingResultKeeper class >> forImageExpanded [ - | keeper | - keeper := self forImage. - keeper withAllInstvarResultsDo: [:cl :iv :result | result types]. - ^keeper -] - -{ #category : #private } -TypingResultKeeper >> addCollectorResult: collectorResult [ - collectorResult isEmpty ifTrue: [^self]. - typeResults - at: collectorResult values first ivarClass - put: collectorResult -] - -{ #category : #private } -TypingResultKeeper >> addTypingResult: aTypeResult [ - | typeResultsForClass | - typeResultsForClass := self typeResults - at: aTypeResult ivarClass - ifAbsentPut: [Dictionary new]. - typeResultsForClass - at: aTypeResult ivarName - put: aTypeResult -] - -{ #category : #accessing } -TypingResultKeeper >> calculateTypesForClass: aClass [ - ^TypeCollector typeInstvarsOfClass: aClass -] - -{ #category : #public } -TypingResultKeeper >> forClasses: aClassList [ - | collector | - collector := TypeCollector new. - timeTaken := Time - millisecondsToRun: - [aClassList - do: - [:cl | - cl isMeta - ifFalse: - [self addCollectorResult: (collector typeInstvarsOfClass: cl)]]] -] - -{ #category : #public } -TypingResultKeeper >> forImage [ - self forClasses: Object allSubclasses -] - -{ #category : #'initialize-release' } -TypingResultKeeper >> initialize [ - typeResults := IdentityDictionary new -] - -{ #category : #accessing } -TypingResultKeeper >> nrObjectTypes [ - | nr | - nr := 0. - self - withAllInstvarResultsDo: - [:cl :ivar :typeResult | (typeResult is: Object) ifTrue: [nr := nr + 1]]. - ^nr -] - -{ #category : #accessing } -TypingResultKeeper >> nrUniqueTypes [ - | nr | - nr := 0. - self - withAllInstvarResultsDo: - [:cl :ivar :typeResult | typeResult isSingularType ifTrue: [nr := nr + 1]]. - ^nr -] - -{ #category : #accessing } -TypingResultKeeper >> resetTypesForClass: aClass [ - ^typeResults - removeKey: aClass - ifAbsent: [] -] - -{ #category : #private } -TypingResultKeeper >> resultsForClass: aClass instvar: instvar ifAbsent: absentBlock [ - | ivars | - ivars := typeResults - at: aClass - ifAbsent: absentBlock. - ^ivars - at: instvar - ifAbsent: absentBlock -] - -{ #category : #statistics } -TypingResultKeeper >> sameTypesAs: otherKeeper [ - | result correspondingResult | - result := OrderedCollection new. - self - withAllInstvarResultsDo: - [:cl :iv :res | - correspondingResult := otherKeeper - typesForClass: cl - instvar: iv. - (res types sameElements: correspondingResult types) - ifTrue: [result add: cl -> iv]]. - ^result -] - -{ #category : #accessing } -TypingResultKeeper >> timeTaken [ - ^timeTaken -] - -{ #category : #accessing } -TypingResultKeeper >> typeResults [ - ^typeResults -] - -{ #category : #accessing } -TypingResultKeeper >> typesForClass: aClass [ - ^typeResults - at: aClass - ifAbsentPut: [self calculateTypesForClass: aClass] -] - -{ #category : #accessing } -TypingResultKeeper >> typesForClass: aClass instvar: instvar [ - ^(self typesForClass: aClass) - at: instvar - ifAbsent: - [ExtractedType - forInstvar: instvar - inClass: aClass] -] - -{ #category : #enumerating } -TypingResultKeeper >> withAllInstvarResultsDo: aBlock [ - self typeResults - keysAndValuesDo: - [:cl :instvarDict | - instvarDict - keysAndValuesDo: - [:ivar :typeResult | - aBlock - value: cl - value: ivar - value: typeResult]] -] diff --git a/src/RoelTyper/package.st b/src/RoelTyper/package.st deleted file mode 100644 index 76a2ee63e..000000000 --- a/src/RoelTyper/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #RoelTyper } diff --git a/src/SmaCC_Antlr_Parser/Antlr4ActionBlockNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4ActionBlockNode.class.st deleted file mode 100644 index 06d522745..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4ActionBlockNode.class.st +++ /dev/null @@ -1,50 +0,0 @@ -Class { - #name : #Antlr4ActionBlockNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'leftBrace', - 'actionBlock', - 'rightBrace' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4ActionBlockNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitActionBlock: self -] - -{ #category : #generated } -Antlr4ActionBlockNode >> actionBlock [ - ^ actionBlock -] - -{ #category : #generated } -Antlr4ActionBlockNode >> actionBlock: aSmaCCToken [ - actionBlock := aSmaCCToken -] - -{ #category : #generated } -Antlr4ActionBlockNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -Antlr4ActionBlockNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -Antlr4ActionBlockNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -Antlr4ActionBlockNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] - -{ #category : #generated } -Antlr4ActionBlockNode >> tokenVariables [ - ^ #(#leftBrace #actionBlock #rightBrace) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4ActionNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4ActionNode.class.st deleted file mode 100644 index 0155007c0..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4ActionNode.class.st +++ /dev/null @@ -1,81 +0,0 @@ -Class { - #name : #Antlr4ActionNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'atToken', - 'scopeName', - 'colonColon', - 'nameToken', - 'actionBlock' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4ActionNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitAction: self -] - -{ #category : #generated } -Antlr4ActionNode >> actionBlock [ - ^ actionBlock -] - -{ #category : #generated } -Antlr4ActionNode >> actionBlock: anAntlr4ActionBlockNode [ - self actionBlock notNil - ifTrue: [ self actionBlock parent: nil ]. - actionBlock := anAntlr4ActionBlockNode. - self actionBlock notNil - ifTrue: [ self actionBlock parent: self ] -] - -{ #category : #generated } -Antlr4ActionNode >> atToken [ - ^ atToken -] - -{ #category : #generated } -Antlr4ActionNode >> atToken: aSmaCCToken [ - atToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4ActionNode >> colonColon [ - ^ colonColon -] - -{ #category : #generated } -Antlr4ActionNode >> colonColon: aSmaCCToken [ - colonColon := aSmaCCToken -] - -{ #category : #generated } -Antlr4ActionNode >> nameToken [ - ^ nameToken -] - -{ #category : #generated } -Antlr4ActionNode >> nameToken: aSmaCCToken [ - nameToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4ActionNode >> nodeVariables [ - ^ #(#actionBlock) -] - -{ #category : #generated } -Antlr4ActionNode >> scopeName [ - ^ scopeName -] - -{ #category : #generated } -Antlr4ActionNode >> scopeName: aSmaCCToken [ - scopeName := aSmaCCToken -] - -{ #category : #generated } -Antlr4ActionNode >> tokenVariables [ - ^ #(#atToken #nameToken #scopeName #colonColon) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4AtomNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4AtomNode.class.st deleted file mode 100644 index 2efcfeb97..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4AtomNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #Antlr4AtomNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'dot', - 'options' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4AtomNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitAtom: self -] - -{ #category : #generated } -Antlr4AtomNode >> dot [ - ^ dot -] - -{ #category : #generated } -Antlr4AtomNode >> dot: aSmaCCToken [ - dot := aSmaCCToken -] - -{ #category : #generated } -Antlr4AtomNode >> nodeVariables [ - ^ #(#options) -] - -{ #category : #generated } -Antlr4AtomNode >> options [ - ^ options -] - -{ #category : #generated } -Antlr4AtomNode >> options: anAntlr4ElementOptionsNode [ - self options notNil - ifTrue: [ self options parent: nil ]. - options := anAntlr4ElementOptionsNode. - self options notNil - ifTrue: [ self options parent: self ] -] - -{ #category : #generated } -Antlr4AtomNode >> tokenVariables [ - ^ #(#dot) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4BlockNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4BlockNode.class.st deleted file mode 100644 index f272c9709..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4BlockNode.class.st +++ /dev/null @@ -1,119 +0,0 @@ -Class { - #name : #Antlr4BlockNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'leftParen', - 'optionses', - 'actions', - 'colon', - 'elements', - 'bars', - 'rightParen' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4BlockNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitBlock: self -] - -{ #category : #generated } -Antlr4BlockNode >> actions [ - ^ actions -] - -{ #category : #generated } -Antlr4BlockNode >> actions: anOrderedCollection [ - self setParents: self actions to: nil. - actions := anOrderedCollection. - self setParents: self actions to: self -] - -{ #category : #generated } -Antlr4BlockNode >> bars [ - ^ bars -] - -{ #category : #generated } -Antlr4BlockNode >> bars: anOrderedCollection [ - bars := anOrderedCollection -] - -{ #category : #generated } -Antlr4BlockNode >> colon [ - ^ colon -] - -{ #category : #generated } -Antlr4BlockNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -Antlr4BlockNode >> compositeNodeVariables [ - ^ #(#elements #optionses #actions) -] - -{ #category : #generated } -Antlr4BlockNode >> compositeTokenVariables [ - ^ #(#bars) -] - -{ #category : #generated } -Antlr4BlockNode >> elements [ - ^ elements -] - -{ #category : #generated } -Antlr4BlockNode >> elements: anOrderedCollection [ - self setParents: self elements to: nil. - elements := anOrderedCollection. - self setParents: self elements to: self -] - -{ #category : #'generated-initialize-release' } -Antlr4BlockNode >> initialize [ - super initialize. - elements := OrderedCollection new: 2. - optionses := OrderedCollection new: 2. - bars := OrderedCollection new: 2. - actions := OrderedCollection new: 2. -] - -{ #category : #generated } -Antlr4BlockNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -Antlr4BlockNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -Antlr4BlockNode >> optionses [ - ^ optionses -] - -{ #category : #generated } -Antlr4BlockNode >> optionses: anOrderedCollection [ - self setParents: self optionses to: nil. - optionses := anOrderedCollection. - self setParents: self optionses to: self -] - -{ #category : #generated } -Antlr4BlockNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -Antlr4BlockNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -Antlr4BlockNode >> tokenVariables [ - ^ #(#leftParen #rightParen #colon) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4BlockSetNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4BlockSetNode.class.st deleted file mode 100644 index 5538b09ac..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4BlockSetNode.class.st +++ /dev/null @@ -1,80 +0,0 @@ -Class { - #name : #Antlr4BlockSetNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'leftParen', - 'expressions', - 'bars', - 'rightParen' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4BlockSetNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitBlockSet: self -] - -{ #category : #generated } -Antlr4BlockSetNode >> bars [ - ^ bars -] - -{ #category : #generated } -Antlr4BlockSetNode >> bars: anOrderedCollection [ - bars := anOrderedCollection -] - -{ #category : #generated } -Antlr4BlockSetNode >> compositeNodeVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -Antlr4BlockSetNode >> compositeTokenVariables [ - ^ #(#bars) -] - -{ #category : #generated } -Antlr4BlockSetNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -Antlr4BlockSetNode >> expressions: anOrderedCollection [ - self setParents: self expressions to: nil. - expressions := anOrderedCollection. - self setParents: self expressions to: self -] - -{ #category : #'generated-initialize-release' } -Antlr4BlockSetNode >> initialize [ - super initialize. - expressions := OrderedCollection new: 2. - bars := OrderedCollection new: 2. -] - -{ #category : #generated } -Antlr4BlockSetNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -Antlr4BlockSetNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -Antlr4BlockSetNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -Antlr4BlockSetNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -Antlr4BlockSetNode >> tokenVariables [ - ^ #(#leftParen #rightParen) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4ChannelsSpecNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4ChannelsSpecNode.class.st deleted file mode 100644 index 592dedd3d..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4ChannelsSpecNode.class.st +++ /dev/null @@ -1,84 +0,0 @@ -Class { - #name : #Antlr4ChannelsSpecNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'channelsToken', - 'leftBrace', - 'nameTokens', - 'commas', - 'rightBrace' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4ChannelsSpecNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitChannelsSpec: self -] - -{ #category : #generated } -Antlr4ChannelsSpecNode >> channelsToken [ - ^ channelsToken -] - -{ #category : #generated } -Antlr4ChannelsSpecNode >> channelsToken: aSmaCCToken [ - channelsToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4ChannelsSpecNode >> commas [ - ^ commas -] - -{ #category : #generated } -Antlr4ChannelsSpecNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -Antlr4ChannelsSpecNode >> compositeTokenVariables [ - ^ #(#nameTokens #commas) -] - -{ #category : #'generated-initialize-release' } -Antlr4ChannelsSpecNode >> initialize [ - super initialize. - nameTokens := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -Antlr4ChannelsSpecNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -Antlr4ChannelsSpecNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -Antlr4ChannelsSpecNode >> nameTokens [ - ^ nameTokens -] - -{ #category : #generated } -Antlr4ChannelsSpecNode >> nameTokens: anOrderedCollection [ - nameTokens := anOrderedCollection -] - -{ #category : #generated } -Antlr4ChannelsSpecNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -Antlr4ChannelsSpecNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] - -{ #category : #generated } -Antlr4ChannelsSpecNode >> tokenVariables [ - ^ #(#channelsToken #leftBrace #rightBrace) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4CharacterRangeNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4CharacterRangeNode.class.st deleted file mode 100644 index d1862c971..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4CharacterRangeNode.class.st +++ /dev/null @@ -1,50 +0,0 @@ -Class { - #name : #Antlr4CharacterRangeNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'from', - 'dotDot', - 'to' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4CharacterRangeNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitCharacterRange: self -] - -{ #category : #generated } -Antlr4CharacterRangeNode >> dotDot [ - ^ dotDot -] - -{ #category : #generated } -Antlr4CharacterRangeNode >> dotDot: aSmaCCToken [ - dotDot := aSmaCCToken -] - -{ #category : #generated } -Antlr4CharacterRangeNode >> from [ - ^ from -] - -{ #category : #generated } -Antlr4CharacterRangeNode >> from: aSmaCCToken [ - from := aSmaCCToken -] - -{ #category : #generated } -Antlr4CharacterRangeNode >> to [ - ^ to -] - -{ #category : #generated } -Antlr4CharacterRangeNode >> to: aSmaCCToken [ - to := aSmaCCToken -] - -{ #category : #generated } -Antlr4CharacterRangeNode >> tokenVariables [ - ^ #(#from #dotDot #to) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4DelegateGrammarNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4DelegateGrammarNode.class.st deleted file mode 100644 index abfb87cb4..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4DelegateGrammarNode.class.st +++ /dev/null @@ -1,50 +0,0 @@ -Class { - #name : #Antlr4DelegateGrammarNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'aliasNameToken', - 'equal', - 'nameToken' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4DelegateGrammarNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitDelegateGrammar: self -] - -{ #category : #generated } -Antlr4DelegateGrammarNode >> aliasNameToken [ - ^ aliasNameToken -] - -{ #category : #generated } -Antlr4DelegateGrammarNode >> aliasNameToken: aSmaCCToken [ - aliasNameToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4DelegateGrammarNode >> equal [ - ^ equal -] - -{ #category : #generated } -Antlr4DelegateGrammarNode >> equal: aSmaCCToken [ - equal := aSmaCCToken -] - -{ #category : #generated } -Antlr4DelegateGrammarNode >> nameToken [ - ^ nameToken -] - -{ #category : #generated } -Antlr4DelegateGrammarNode >> nameToken: aSmaCCToken [ - nameToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4DelegateGrammarNode >> tokenVariables [ - ^ #(#aliasNameToken #equal #nameToken) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4EbnfNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4EbnfNode.class.st deleted file mode 100644 index 8d1dd3a30..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4EbnfNode.class.st +++ /dev/null @@ -1,47 +0,0 @@ -Class { - #name : #Antlr4EbnfNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'block', - 'suffix' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4EbnfNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitEbnf: self -] - -{ #category : #generated } -Antlr4EbnfNode >> block [ - ^ block -] - -{ #category : #generated } -Antlr4EbnfNode >> block: anAntlr4BlockNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := anAntlr4BlockNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -Antlr4EbnfNode >> nodeVariables [ - ^ #(#block #suffix) -] - -{ #category : #generated } -Antlr4EbnfNode >> suffix [ - ^ suffix -] - -{ #category : #generated } -Antlr4EbnfNode >> suffix: anAntlr4EbnfSuffixNode [ - self suffix notNil - ifTrue: [ self suffix parent: nil ]. - suffix := anAntlr4EbnfSuffixNode. - self suffix notNil - ifTrue: [ self suffix parent: self ] -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4EbnfSuffixNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4EbnfSuffixNode.class.st deleted file mode 100644 index 81594194f..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4EbnfSuffixNode.class.st +++ /dev/null @@ -1,39 +0,0 @@ -Class { - #name : #Antlr4EbnfSuffixNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'countToken', - 'nonGreedyToken' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4EbnfSuffixNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitEbnfSuffix: self -] - -{ #category : #generated } -Antlr4EbnfSuffixNode >> countToken [ - ^ countToken -] - -{ #category : #generated } -Antlr4EbnfSuffixNode >> countToken: aSmaCCToken [ - countToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4EbnfSuffixNode >> nonGreedyToken [ - ^ nonGreedyToken -] - -{ #category : #generated } -Antlr4EbnfSuffixNode >> nonGreedyToken: aSmaCCToken [ - nonGreedyToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4EbnfSuffixNode >> tokenVariables [ - ^ #(#countToken #nonGreedyToken) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4ElementNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4ElementNode.class.st deleted file mode 100644 index 2a2a306f4..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4ElementNode.class.st +++ /dev/null @@ -1,100 +0,0 @@ -Class { - #name : #Antlr4ElementNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'nameToken', - 'equal', - 'value', - 'suffix', - 'actionBlock', - 'questionMark' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4ElementNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitElement: self -] - -{ #category : #generated } -Antlr4ElementNode >> actionBlock [ - ^ actionBlock -] - -{ #category : #generated } -Antlr4ElementNode >> actionBlock: anAntlr4ActionBlockNode [ - self actionBlock notNil - ifTrue: [ self actionBlock parent: nil ]. - actionBlock := anAntlr4ActionBlockNode. - self actionBlock notNil - ifTrue: [ self actionBlock parent: self ] -] - -{ #category : #generated } -Antlr4ElementNode >> equal [ - ^ equal -] - -{ #category : #generated } -Antlr4ElementNode >> equal: aSmaCCToken [ - equal := aSmaCCToken -] - -{ #category : #generated } -Antlr4ElementNode >> nameToken [ - ^ nameToken -] - -{ #category : #generated } -Antlr4ElementNode >> nameToken: aSmaCCToken [ - nameToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4ElementNode >> nodeVariables [ - ^ #(#value #suffix #actionBlock) -] - -{ #category : #generated } -Antlr4ElementNode >> questionMark [ - ^ questionMark -] - -{ #category : #generated } -Antlr4ElementNode >> questionMark: aSmaCCToken [ - questionMark := aSmaCCToken -] - -{ #category : #generated } -Antlr4ElementNode >> suffix [ - ^ suffix -] - -{ #category : #generated } -Antlr4ElementNode >> suffix: anAntlr4EbnfSuffixNode [ - self suffix notNil - ifTrue: [ self suffix parent: nil ]. - suffix := anAntlr4EbnfSuffixNode. - self suffix notNil - ifTrue: [ self suffix parent: self ] -] - -{ #category : #generated } -Antlr4ElementNode >> tokenVariables [ - ^ #(#nameToken #equal #questionMark) -] - -{ #category : #generated } -Antlr4ElementNode >> value [ - ^ value -] - -{ #category : #generated } -Antlr4ElementNode >> value: anAntlr4GrammarNode [ - self value notNil - ifTrue: [ self value parent: nil ]. - value := anAntlr4GrammarNode. - self value notNil - ifTrue: [ self value parent: self ] -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4ElementOptionsNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4ElementOptionsNode.class.st deleted file mode 100644 index 5f8d9a89d..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4ElementOptionsNode.class.st +++ /dev/null @@ -1,97 +0,0 @@ -Class { - #name : #Antlr4ElementOptionsNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'lt', - 'nameTokens', - 'equals', - 'values', - 'commas', - 'gt' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4ElementOptionsNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitElementOptions: self -] - -{ #category : #generated } -Antlr4ElementOptionsNode >> commas [ - ^ commas -] - -{ #category : #generated } -Antlr4ElementOptionsNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -Antlr4ElementOptionsNode >> compositeTokenVariables [ - ^ #(#nameTokens #equals #values #commas) -] - -{ #category : #generated } -Antlr4ElementOptionsNode >> equals [ - ^ equals -] - -{ #category : #generated } -Antlr4ElementOptionsNode >> equals: anOrderedCollection [ - equals := anOrderedCollection -] - -{ #category : #generated } -Antlr4ElementOptionsNode >> gt [ - ^ gt -] - -{ #category : #generated } -Antlr4ElementOptionsNode >> gt: aSmaCCToken [ - gt := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -Antlr4ElementOptionsNode >> initialize [ - super initialize. - nameTokens := OrderedCollection new: 2. - equals := OrderedCollection new: 2. - values := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -Antlr4ElementOptionsNode >> lt [ - ^ lt -] - -{ #category : #generated } -Antlr4ElementOptionsNode >> lt: aSmaCCToken [ - lt := aSmaCCToken -] - -{ #category : #generated } -Antlr4ElementOptionsNode >> nameTokens [ - ^ nameTokens -] - -{ #category : #generated } -Antlr4ElementOptionsNode >> nameTokens: anOrderedCollection [ - nameTokens := anOrderedCollection -] - -{ #category : #generated } -Antlr4ElementOptionsNode >> tokenVariables [ - ^ #(#lt #gt) -] - -{ #category : #generated } -Antlr4ElementOptionsNode >> values [ - ^ values -] - -{ #category : #generated } -Antlr4ElementOptionsNode >> values: anOrderedCollection [ - values := anOrderedCollection -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4ExceptionHandlerNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4ExceptionHandlerNode.class.st deleted file mode 100644 index bc0fec7cc..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4ExceptionHandlerNode.class.st +++ /dev/null @@ -1,81 +0,0 @@ -Class { - #name : #Antlr4ExceptionHandlerNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'catchToken', - 'leftBracket', - 'argActionBlock', - 'rightBracket', - 'actionBlock' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4ExceptionHandlerNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitExceptionHandler: self -] - -{ #category : #generated } -Antlr4ExceptionHandlerNode >> actionBlock [ - ^ actionBlock -] - -{ #category : #generated } -Antlr4ExceptionHandlerNode >> actionBlock: anAntlr4ActionBlockNode [ - self actionBlock notNil - ifTrue: [ self actionBlock parent: nil ]. - actionBlock := anAntlr4ActionBlockNode. - self actionBlock notNil - ifTrue: [ self actionBlock parent: self ] -] - -{ #category : #generated } -Antlr4ExceptionHandlerNode >> argActionBlock [ - ^ argActionBlock -] - -{ #category : #generated } -Antlr4ExceptionHandlerNode >> argActionBlock: aSmaCCToken [ - argActionBlock := aSmaCCToken -] - -{ #category : #generated } -Antlr4ExceptionHandlerNode >> catchToken [ - ^ catchToken -] - -{ #category : #generated } -Antlr4ExceptionHandlerNode >> catchToken: aSmaCCToken [ - catchToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4ExceptionHandlerNode >> leftBracket [ - ^ leftBracket -] - -{ #category : #generated } -Antlr4ExceptionHandlerNode >> leftBracket: aSmaCCToken [ - leftBracket := aSmaCCToken -] - -{ #category : #generated } -Antlr4ExceptionHandlerNode >> nodeVariables [ - ^ #(#actionBlock) -] - -{ #category : #generated } -Antlr4ExceptionHandlerNode >> rightBracket [ - ^ rightBracket -] - -{ #category : #generated } -Antlr4ExceptionHandlerNode >> rightBracket: aSmaCCToken [ - rightBracket := aSmaCCToken -] - -{ #category : #generated } -Antlr4ExceptionHandlerNode >> tokenVariables [ - ^ #(#catchToken #leftBracket #argActionBlock #rightBracket) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4FinallyClauseNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4FinallyClauseNode.class.st deleted file mode 100644 index 2b9b6a8cc..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4FinallyClauseNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #Antlr4FinallyClauseNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'finallyToken', - 'actionBlock' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4FinallyClauseNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitFinallyClause: self -] - -{ #category : #generated } -Antlr4FinallyClauseNode >> actionBlock [ - ^ actionBlock -] - -{ #category : #generated } -Antlr4FinallyClauseNode >> actionBlock: anAntlr4ActionBlockNode [ - self actionBlock notNil - ifTrue: [ self actionBlock parent: nil ]. - actionBlock := anAntlr4ActionBlockNode. - self actionBlock notNil - ifTrue: [ self actionBlock parent: self ] -] - -{ #category : #generated } -Antlr4FinallyClauseNode >> finallyToken [ - ^ finallyToken -] - -{ #category : #generated } -Antlr4FinallyClauseNode >> finallyToken: aSmaCCToken [ - finallyToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4FinallyClauseNode >> nodeVariables [ - ^ #(#actionBlock) -] - -{ #category : #generated } -Antlr4FinallyClauseNode >> tokenVariables [ - ^ #(#finallyToken) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4GrammarNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4GrammarNode.class.st deleted file mode 100644 index 5552c8841..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4GrammarNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #Antlr4GrammarNode, - #superclass : #SmaCCParseNode, - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4GrammarNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitGrammar: self -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4GrammarNodeVisitor.class.st b/src/SmaCC_Antlr_Parser/Antlr4GrammarNodeVisitor.class.st deleted file mode 100644 index d7eefd8b4..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4GrammarNodeVisitor.class.st +++ /dev/null @@ -1,215 +0,0 @@ -Class { - #name : #Antlr4GrammarNodeVisitor, - #superclass : #SmaCCParseNodeVisitor, - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitAction: anAction [ - ^ self visitGrammar: anAction -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitActionBlock: anActionBlock [ - ^ self visitGrammar: anActionBlock -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitAtom: anAtom [ - ^ self visitGrammar: anAtom -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitBlock: aBlock [ - ^ self visitGrammar: aBlock -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitBlockSet: aBlockSet [ - ^ self visitGrammar: aBlockSet -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitChannelsSpec: aChannelsSpec [ - ^ self visitGrammar: aChannelsSpec -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitCharacterRange: aCharacterRange [ - ^ self visitGrammar: aCharacterRange -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitDelegateGrammar: aDelegateGrammar [ - ^ self visitGrammar: aDelegateGrammar -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitEbnf: anEbnf [ - ^ self visitGrammar: anEbnf -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitEbnfSuffix: anEbnfSuffix [ - ^ self visitGrammar: anEbnfSuffix -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitElement: anElement [ - ^ self visitGrammar: anElement -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitElementOptions: anElementOptions [ - ^ self visitGrammar: anElementOptions -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitExceptionHandler: anExceptionHandler [ - ^ self visitGrammar: anExceptionHandler -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitFinallyClause: aFinallyClause [ - ^ self visitGrammar: aFinallyClause -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitGrammar: aGrammar [ - ^ self visitSmaCCParseNode: aGrammar -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitGrammarSpec: aGrammarSpec [ - ^ self visitGrammar: aGrammarSpec -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitImport: anImport [ - ^ self visitGrammar: anImport -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitIntegerLiteral: anIntegerLiteral [ - ^ self visitGrammar: anIntegerLiteral -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitLabeledLexerElement: aLabeledLexerElement [ - ^ self visitGrammar: aLabeledLexerElement -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitLexerAlt: aLexerAlt [ - ^ self visitGrammar: aLexerAlt -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitLexerAtom: aLexerAtom [ - ^ self visitGrammar: aLexerAtom -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitLexerBlock: aLexerBlock [ - ^ self visitGrammar: aLexerBlock -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitLexerCharSet: aLexerCharSet [ - ^ self visitGrammar: aLexerCharSet -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitLexerCommand: aLexerCommand [ - ^ self visitGrammar: aLexerCommand -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitLexerCommands: aLexerCommands [ - ^ self visitGrammar: aLexerCommands -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitLexerElement: aLexerElement [ - ^ self visitGrammar: aLexerElement -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitLexerRuleSpec: aLexerRuleSpec [ - ^ self visitGrammar: aLexerRuleSpec -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitLocalsSpec: aLocalsSpec [ - ^ self visitGrammar: aLocalsSpec -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitModeSpec: aModeSpec [ - ^ self visitGrammar: aModeSpec -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitNamespaceName: aNamespaceName [ - ^ self visitGrammar: aNamespaceName -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitNotSet: aNotSet [ - ^ self visitGrammar: aNotSet -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitOption: anOption [ - ^ self visitGrammar: anOption -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitOptionsSpec: anOptionsSpec [ - ^ self visitGrammar: anOptionsSpec -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitParserRuleSpec: aParserRuleSpec [ - ^ self visitGrammar: aParserRuleSpec -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitReferenceTerminal: aReferenceTerminal [ - ^ self visitGrammar: aReferenceTerminal -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitRuleAction: aRuleAction [ - ^ self visitGrammar: aRuleAction -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitRuleref: aRuleref [ - ^ self visitGrammar: aRuleref -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitSetElement: aSetElement [ - ^ self visitGrammar: aSetElement -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitStringLiteral: aStringLiteral [ - ^ self visitGrammar: aStringLiteral -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitStringTerminal: aStringTerminal [ - ^ self visitGrammar: aStringTerminal -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitThrowsSpec: aThrowsSpec [ - ^ self visitGrammar: aThrowsSpec -] - -{ #category : #generated } -Antlr4GrammarNodeVisitor >> visitTokensSpec: aTokensSpec [ - ^ self visitGrammar: aTokensSpec -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4GrammarSpecNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4GrammarSpecNode.class.st deleted file mode 100644 index adfd34bef..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4GrammarSpecNode.class.st +++ /dev/null @@ -1,113 +0,0 @@ -Class { - #name : #Antlr4GrammarSpecNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'grammarTypeToken', - 'grammarToken', - 'nameToken', - 'semicolon', - 'prequels', - 'rules', - 'modes' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4GrammarSpecNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitGrammarSpec: self -] - -{ #category : #generated } -Antlr4GrammarSpecNode >> compositeNodeVariables [ - ^ #(#prequels #rules #modes) -] - -{ #category : #generated } -Antlr4GrammarSpecNode >> grammarToken [ - ^ grammarToken -] - -{ #category : #generated } -Antlr4GrammarSpecNode >> grammarToken: aSmaCCToken [ - grammarToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4GrammarSpecNode >> grammarTypeToken [ - ^ grammarTypeToken -] - -{ #category : #generated } -Antlr4GrammarSpecNode >> grammarTypeToken: aSmaCCToken [ - grammarTypeToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -Antlr4GrammarSpecNode >> initialize [ - super initialize. - prequels := OrderedCollection new: 2. - rules := OrderedCollection new: 2. - modes := OrderedCollection new: 2. -] - -{ #category : #generated } -Antlr4GrammarSpecNode >> modes [ - ^ modes -] - -{ #category : #generated } -Antlr4GrammarSpecNode >> modes: anOrderedCollection [ - self setParents: self modes to: nil. - modes := anOrderedCollection. - self setParents: self modes to: self -] - -{ #category : #generated } -Antlr4GrammarSpecNode >> nameToken [ - ^ nameToken -] - -{ #category : #generated } -Antlr4GrammarSpecNode >> nameToken: aSmaCCToken [ - nameToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4GrammarSpecNode >> prequels [ - ^ prequels -] - -{ #category : #generated } -Antlr4GrammarSpecNode >> prequels: anOrderedCollection [ - self setParents: self prequels to: nil. - prequels := anOrderedCollection. - self setParents: self prequels to: self -] - -{ #category : #generated } -Antlr4GrammarSpecNode >> rules [ - ^ rules -] - -{ #category : #generated } -Antlr4GrammarSpecNode >> rules: anOrderedCollection [ - self setParents: self rules to: nil. - rules := anOrderedCollection. - self setParents: self rules to: self -] - -{ #category : #generated } -Antlr4GrammarSpecNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -Antlr4GrammarSpecNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -Antlr4GrammarSpecNode >> tokenVariables [ - ^ #(#grammarTypeToken #grammarToken #nameToken #semicolon) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4ImportNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4ImportNode.class.st deleted file mode 100644 index 23b9bea44..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4ImportNode.class.st +++ /dev/null @@ -1,80 +0,0 @@ -Class { - #name : #Antlr4ImportNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'importToken', - 'imports', - 'commas', - 'semicolon' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4ImportNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitImport: self -] - -{ #category : #generated } -Antlr4ImportNode >> commas [ - ^ commas -] - -{ #category : #generated } -Antlr4ImportNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -Antlr4ImportNode >> compositeNodeVariables [ - ^ #(#imports) -] - -{ #category : #generated } -Antlr4ImportNode >> compositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -Antlr4ImportNode >> importToken [ - ^ importToken -] - -{ #category : #generated } -Antlr4ImportNode >> importToken: aSmaCCToken [ - importToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4ImportNode >> imports [ - ^ imports -] - -{ #category : #generated } -Antlr4ImportNode >> imports: anOrderedCollection [ - self setParents: self imports to: nil. - imports := anOrderedCollection. - self setParents: self imports to: self -] - -{ #category : #'generated-initialize-release' } -Antlr4ImportNode >> initialize [ - super initialize. - imports := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -Antlr4ImportNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -Antlr4ImportNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -Antlr4ImportNode >> tokenVariables [ - ^ #(#importToken #semicolon) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4IntegerLiteralNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4IntegerLiteralNode.class.st deleted file mode 100644 index ba09b635d..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4IntegerLiteralNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #Antlr4IntegerLiteralNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'value' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4IntegerLiteralNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitIntegerLiteral: self -] - -{ #category : #generated } -Antlr4IntegerLiteralNode >> tokenVariables [ - ^ #(#value) -] - -{ #category : #generated } -Antlr4IntegerLiteralNode >> value [ - ^ value -] - -{ #category : #generated } -Antlr4IntegerLiteralNode >> value: aSmaCCToken [ - value := aSmaCCToken -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4LabeledLexerElementNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4LabeledLexerElementNode.class.st deleted file mode 100644 index db8474595..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4LabeledLexerElementNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #Antlr4LabeledLexerElementNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'nameToken', - 'equal', - 'expression' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4LabeledLexerElementNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitLabeledLexerElement: self -] - -{ #category : #generated } -Antlr4LabeledLexerElementNode >> equal [ - ^ equal -] - -{ #category : #generated } -Antlr4LabeledLexerElementNode >> equal: aSmaCCToken [ - equal := aSmaCCToken -] - -{ #category : #generated } -Antlr4LabeledLexerElementNode >> expression [ - ^ expression -] - -{ #category : #generated } -Antlr4LabeledLexerElementNode >> expression: anAntlr4GrammarNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := anAntlr4GrammarNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -Antlr4LabeledLexerElementNode >> nameToken [ - ^ nameToken -] - -{ #category : #generated } -Antlr4LabeledLexerElementNode >> nameToken: aSmaCCToken [ - nameToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4LabeledLexerElementNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -Antlr4LabeledLexerElementNode >> tokenVariables [ - ^ #(#nameToken #equal) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4LexerAltNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4LexerAltNode.class.st deleted file mode 100644 index 9786fd4ad..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4LexerAltNode.class.st +++ /dev/null @@ -1,56 +0,0 @@ -Class { - #name : #Antlr4LexerAltNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'lexerElements', - 'lexerCommand' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4LexerAltNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitLexerAlt: self -] - -{ #category : #generated } -Antlr4LexerAltNode >> compositeNodeVariables [ - ^ #(#lexerElements) -] - -{ #category : #'generated-initialize-release' } -Antlr4LexerAltNode >> initialize [ - super initialize. - lexerElements := OrderedCollection new: 2. -] - -{ #category : #generated } -Antlr4LexerAltNode >> lexerCommand [ - ^ lexerCommand -] - -{ #category : #generated } -Antlr4LexerAltNode >> lexerCommand: anAntlr4LexerCommandsNode [ - self lexerCommand notNil - ifTrue: [ self lexerCommand parent: nil ]. - lexerCommand := anAntlr4LexerCommandsNode. - self lexerCommand notNil - ifTrue: [ self lexerCommand parent: self ] -] - -{ #category : #generated } -Antlr4LexerAltNode >> lexerElements [ - ^ lexerElements -] - -{ #category : #generated } -Antlr4LexerAltNode >> lexerElements: anOrderedCollection [ - self setParents: self lexerElements to: nil. - lexerElements := anOrderedCollection. - self setParents: self lexerElements to: self -] - -{ #category : #generated } -Antlr4LexerAltNode >> nodeVariables [ - ^ #(#lexerCommand) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4LexerAtomNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4LexerAtomNode.class.st deleted file mode 100644 index ad34b725f..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4LexerAtomNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #Antlr4LexerAtomNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'dot', - 'options' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4LexerAtomNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitLexerAtom: self -] - -{ #category : #generated } -Antlr4LexerAtomNode >> dot [ - ^ dot -] - -{ #category : #generated } -Antlr4LexerAtomNode >> dot: aSmaCCToken [ - dot := aSmaCCToken -] - -{ #category : #generated } -Antlr4LexerAtomNode >> nodeVariables [ - ^ #(#options) -] - -{ #category : #generated } -Antlr4LexerAtomNode >> options [ - ^ options -] - -{ #category : #generated } -Antlr4LexerAtomNode >> options: anAntlr4ElementOptionsNode [ - self options notNil - ifTrue: [ self options parent: nil ]. - options := anAntlr4ElementOptionsNode. - self options notNil - ifTrue: [ self options parent: self ] -] - -{ #category : #generated } -Antlr4LexerAtomNode >> tokenVariables [ - ^ #(#dot) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4LexerBlockNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4LexerBlockNode.class.st deleted file mode 100644 index 9d3ad19f7..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4LexerBlockNode.class.st +++ /dev/null @@ -1,80 +0,0 @@ -Class { - #name : #Antlr4LexerBlockNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'leftParen', - 'lexerExpressions', - 'bars', - 'rightParen' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4LexerBlockNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitLexerBlock: self -] - -{ #category : #generated } -Antlr4LexerBlockNode >> bars [ - ^ bars -] - -{ #category : #generated } -Antlr4LexerBlockNode >> bars: anOrderedCollection [ - bars := anOrderedCollection -] - -{ #category : #generated } -Antlr4LexerBlockNode >> compositeNodeVariables [ - ^ #(#lexerExpressions) -] - -{ #category : #generated } -Antlr4LexerBlockNode >> compositeTokenVariables [ - ^ #(#bars) -] - -{ #category : #'generated-initialize-release' } -Antlr4LexerBlockNode >> initialize [ - super initialize. - lexerExpressions := OrderedCollection new: 2. - bars := OrderedCollection new: 2. -] - -{ #category : #generated } -Antlr4LexerBlockNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -Antlr4LexerBlockNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -Antlr4LexerBlockNode >> lexerExpressions [ - ^ lexerExpressions -] - -{ #category : #generated } -Antlr4LexerBlockNode >> lexerExpressions: anOrderedCollection [ - self setParents: self lexerExpressions to: nil. - lexerExpressions := anOrderedCollection. - self setParents: self lexerExpressions to: self -] - -{ #category : #generated } -Antlr4LexerBlockNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -Antlr4LexerBlockNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -Antlr4LexerBlockNode >> tokenVariables [ - ^ #(#leftParen #rightParen) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4LexerCharSetNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4LexerCharSetNode.class.st deleted file mode 100644 index 67d3bad65..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4LexerCharSetNode.class.st +++ /dev/null @@ -1,50 +0,0 @@ -Class { - #name : #Antlr4LexerCharSetNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'leftBracket', - 'charSet', - 'rightBracket' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4LexerCharSetNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitLexerCharSet: self -] - -{ #category : #generated } -Antlr4LexerCharSetNode >> charSet [ - ^ charSet -] - -{ #category : #generated } -Antlr4LexerCharSetNode >> charSet: aSmaCCToken [ - charSet := aSmaCCToken -] - -{ #category : #generated } -Antlr4LexerCharSetNode >> leftBracket [ - ^ leftBracket -] - -{ #category : #generated } -Antlr4LexerCharSetNode >> leftBracket: aSmaCCToken [ - leftBracket := aSmaCCToken -] - -{ #category : #generated } -Antlr4LexerCharSetNode >> rightBracket [ - ^ rightBracket -] - -{ #category : #generated } -Antlr4LexerCharSetNode >> rightBracket: aSmaCCToken [ - rightBracket := aSmaCCToken -] - -{ #category : #generated } -Antlr4LexerCharSetNode >> tokenVariables [ - ^ #(#leftBracket #charSet #rightBracket) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4LexerCommandNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4LexerCommandNode.class.st deleted file mode 100644 index afd118009..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4LexerCommandNode.class.st +++ /dev/null @@ -1,83 +0,0 @@ -Class { - #name : #Antlr4LexerCommandNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'nameTokens', - 'modeToken', - 'leftParen', - 'value', - 'rightParen' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4LexerCommandNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitLexerCommand: self -] - -{ #category : #generated } -Antlr4LexerCommandNode >> compositeTokenVariables [ - ^ #(#nameTokens) -] - -{ #category : #'generated-initialize-release' } -Antlr4LexerCommandNode >> initialize [ - super initialize. - nameTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -Antlr4LexerCommandNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -Antlr4LexerCommandNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -Antlr4LexerCommandNode >> modeToken [ - ^ modeToken -] - -{ #category : #generated } -Antlr4LexerCommandNode >> modeToken: aSmaCCToken [ - modeToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4LexerCommandNode >> nameTokens [ - ^ nameTokens -] - -{ #category : #generated } -Antlr4LexerCommandNode >> nameTokens: anOrderedCollection [ - nameTokens := anOrderedCollection -] - -{ #category : #generated } -Antlr4LexerCommandNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -Antlr4LexerCommandNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -Antlr4LexerCommandNode >> tokenVariables [ - ^ #(#modeToken #leftParen #value #rightParen) -] - -{ #category : #generated } -Antlr4LexerCommandNode >> value [ - ^ value -] - -{ #category : #generated } -Antlr4LexerCommandNode >> value: aSmaCCToken [ - value := aSmaCCToken -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4LexerCommandsNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4LexerCommandsNode.class.st deleted file mode 100644 index f166f83b9..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4LexerCommandsNode.class.st +++ /dev/null @@ -1,69 +0,0 @@ -Class { - #name : #Antlr4LexerCommandsNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'arrow', - 'commands', - 'commas' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4LexerCommandsNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitLexerCommands: self -] - -{ #category : #generated } -Antlr4LexerCommandsNode >> arrow [ - ^ arrow -] - -{ #category : #generated } -Antlr4LexerCommandsNode >> arrow: aSmaCCToken [ - arrow := aSmaCCToken -] - -{ #category : #generated } -Antlr4LexerCommandsNode >> commands [ - ^ commands -] - -{ #category : #generated } -Antlr4LexerCommandsNode >> commands: anOrderedCollection [ - self setParents: self commands to: nil. - commands := anOrderedCollection. - self setParents: self commands to: self -] - -{ #category : #generated } -Antlr4LexerCommandsNode >> commas [ - ^ commas -] - -{ #category : #generated } -Antlr4LexerCommandsNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -Antlr4LexerCommandsNode >> compositeNodeVariables [ - ^ #(#commands) -] - -{ #category : #generated } -Antlr4LexerCommandsNode >> compositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #'generated-initialize-release' } -Antlr4LexerCommandsNode >> initialize [ - super initialize. - commands := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -Antlr4LexerCommandsNode >> tokenVariables [ - ^ #(#arrow) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4LexerElementNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4LexerElementNode.class.st deleted file mode 100644 index dce48c00a..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4LexerElementNode.class.st +++ /dev/null @@ -1,93 +0,0 @@ -Class { - #name : #Antlr4LexerElementNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'labeledLexerElement', - 'suffix', - 'expression', - 'actionBlock', - 'questionMark' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4LexerElementNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitLexerElement: self -] - -{ #category : #generated } -Antlr4LexerElementNode >> actionBlock [ - ^ actionBlock -] - -{ #category : #generated } -Antlr4LexerElementNode >> actionBlock: anAntlr4ActionBlockNode [ - self actionBlock notNil - ifTrue: [ self actionBlock parent: nil ]. - actionBlock := anAntlr4ActionBlockNode. - self actionBlock notNil - ifTrue: [ self actionBlock parent: self ] -] - -{ #category : #generated } -Antlr4LexerElementNode >> expression [ - ^ expression -] - -{ #category : #generated } -Antlr4LexerElementNode >> expression: anAntlr4GrammarNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := anAntlr4GrammarNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -Antlr4LexerElementNode >> labeledLexerElement [ - ^ labeledLexerElement -] - -{ #category : #generated } -Antlr4LexerElementNode >> labeledLexerElement: anAntlr4LabeledLexerElementNode [ - self labeledLexerElement notNil - ifTrue: [ self labeledLexerElement parent: nil ]. - labeledLexerElement := anAntlr4LabeledLexerElementNode. - self labeledLexerElement notNil - ifTrue: [ self labeledLexerElement parent: self ] -] - -{ #category : #generated } -Antlr4LexerElementNode >> nodeVariables [ - ^ #(#labeledLexerElement #suffix #expression #actionBlock) -] - -{ #category : #generated } -Antlr4LexerElementNode >> questionMark [ - ^ questionMark -] - -{ #category : #generated } -Antlr4LexerElementNode >> questionMark: aSmaCCToken [ - questionMark := aSmaCCToken -] - -{ #category : #generated } -Antlr4LexerElementNode >> suffix [ - ^ suffix -] - -{ #category : #generated } -Antlr4LexerElementNode >> suffix: anAntlr4EbnfSuffixNode [ - self suffix notNil - ifTrue: [ self suffix parent: nil ]. - suffix := anAntlr4EbnfSuffixNode. - self suffix notNil - ifTrue: [ self suffix parent: self ] -] - -{ #category : #generated } -Antlr4LexerElementNode >> tokenVariables [ - ^ #(#questionMark) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4LexerRuleSpecNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4LexerRuleSpecNode.class.st deleted file mode 100644 index 8e2708cb9..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4LexerRuleSpecNode.class.st +++ /dev/null @@ -1,102 +0,0 @@ -Class { - #name : #Antlr4LexerRuleSpecNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'modifier', - 'nameToken', - 'colon', - 'lexerExpressions', - 'bars', - 'semicolon' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4LexerRuleSpecNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitLexerRuleSpec: self -] - -{ #category : #generated } -Antlr4LexerRuleSpecNode >> bars [ - ^ bars -] - -{ #category : #generated } -Antlr4LexerRuleSpecNode >> bars: anOrderedCollection [ - bars := anOrderedCollection -] - -{ #category : #generated } -Antlr4LexerRuleSpecNode >> colon [ - ^ colon -] - -{ #category : #generated } -Antlr4LexerRuleSpecNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -Antlr4LexerRuleSpecNode >> compositeNodeVariables [ - ^ #(#lexerExpressions) -] - -{ #category : #generated } -Antlr4LexerRuleSpecNode >> compositeTokenVariables [ - ^ #(#bars) -] - -{ #category : #'generated-initialize-release' } -Antlr4LexerRuleSpecNode >> initialize [ - super initialize. - lexerExpressions := OrderedCollection new: 2. - bars := OrderedCollection new: 2. -] - -{ #category : #generated } -Antlr4LexerRuleSpecNode >> lexerExpressions [ - ^ lexerExpressions -] - -{ #category : #generated } -Antlr4LexerRuleSpecNode >> lexerExpressions: anOrderedCollection [ - self setParents: self lexerExpressions to: nil. - lexerExpressions := anOrderedCollection. - self setParents: self lexerExpressions to: self -] - -{ #category : #generated } -Antlr4LexerRuleSpecNode >> modifier [ - ^ modifier -] - -{ #category : #generated } -Antlr4LexerRuleSpecNode >> modifier: aSmaCCToken [ - modifier := aSmaCCToken -] - -{ #category : #generated } -Antlr4LexerRuleSpecNode >> nameToken [ - ^ nameToken -] - -{ #category : #generated } -Antlr4LexerRuleSpecNode >> nameToken: aSmaCCToken [ - nameToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4LexerRuleSpecNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -Antlr4LexerRuleSpecNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -Antlr4LexerRuleSpecNode >> tokenVariables [ - ^ #(#nameToken #colon #semicolon #modifier) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4LocalsSpecNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4LocalsSpecNode.class.st deleted file mode 100644 index 68f0e75c8..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4LocalsSpecNode.class.st +++ /dev/null @@ -1,61 +0,0 @@ -Class { - #name : #Antlr4LocalsSpecNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'localsToken', - 'leftBracket', - 'argActionBlock', - 'rightBracket' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4LocalsSpecNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitLocalsSpec: self -] - -{ #category : #generated } -Antlr4LocalsSpecNode >> argActionBlock [ - ^ argActionBlock -] - -{ #category : #generated } -Antlr4LocalsSpecNode >> argActionBlock: aSmaCCToken [ - argActionBlock := aSmaCCToken -] - -{ #category : #generated } -Antlr4LocalsSpecNode >> leftBracket [ - ^ leftBracket -] - -{ #category : #generated } -Antlr4LocalsSpecNode >> leftBracket: aSmaCCToken [ - leftBracket := aSmaCCToken -] - -{ #category : #generated } -Antlr4LocalsSpecNode >> localsToken [ - ^ localsToken -] - -{ #category : #generated } -Antlr4LocalsSpecNode >> localsToken: aSmaCCToken [ - localsToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4LocalsSpecNode >> rightBracket [ - ^ rightBracket -] - -{ #category : #generated } -Antlr4LocalsSpecNode >> rightBracket: aSmaCCToken [ - rightBracket := aSmaCCToken -] - -{ #category : #generated } -Antlr4LocalsSpecNode >> tokenVariables [ - ^ #(#localsToken #leftBracket #argActionBlock #rightBracket) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4ModeSpecNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4ModeSpecNode.class.st deleted file mode 100644 index eefe48568..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4ModeSpecNode.class.st +++ /dev/null @@ -1,74 +0,0 @@ -Class { - #name : #Antlr4ModeSpecNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'modeToken', - 'nameToken', - 'semicolon', - 'lexerRules' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4ModeSpecNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitModeSpec: self -] - -{ #category : #generated } -Antlr4ModeSpecNode >> compositeNodeVariables [ - ^ #(#lexerRules) -] - -{ #category : #'generated-initialize-release' } -Antlr4ModeSpecNode >> initialize [ - super initialize. - lexerRules := OrderedCollection new: 2. -] - -{ #category : #generated } -Antlr4ModeSpecNode >> lexerRules [ - ^ lexerRules -] - -{ #category : #generated } -Antlr4ModeSpecNode >> lexerRules: anOrderedCollection [ - self setParents: self lexerRules to: nil. - lexerRules := anOrderedCollection. - self setParents: self lexerRules to: self -] - -{ #category : #generated } -Antlr4ModeSpecNode >> modeToken [ - ^ modeToken -] - -{ #category : #generated } -Antlr4ModeSpecNode >> modeToken: aSmaCCToken [ - modeToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4ModeSpecNode >> nameToken [ - ^ nameToken -] - -{ #category : #generated } -Antlr4ModeSpecNode >> nameToken: aSmaCCToken [ - nameToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4ModeSpecNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -Antlr4ModeSpecNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -Antlr4ModeSpecNode >> tokenVariables [ - ^ #(#modeToken #nameToken #semicolon) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4NamespaceNameNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4NamespaceNameNode.class.st deleted file mode 100644 index 147544ad1..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4NamespaceNameNode.class.st +++ /dev/null @@ -1,46 +0,0 @@ -Class { - #name : #Antlr4NamespaceNameNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'nameTokens', - 'dots' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4NamespaceNameNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitNamespaceName: self -] - -{ #category : #generated } -Antlr4NamespaceNameNode >> compositeTokenVariables [ - ^ #(#nameTokens #dots) -] - -{ #category : #generated } -Antlr4NamespaceNameNode >> dots [ - ^ dots -] - -{ #category : #generated } -Antlr4NamespaceNameNode >> dots: anOrderedCollection [ - dots := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -Antlr4NamespaceNameNode >> initialize [ - super initialize. - nameTokens := OrderedCollection new: 2. - dots := OrderedCollection new: 2. -] - -{ #category : #generated } -Antlr4NamespaceNameNode >> nameTokens [ - ^ nameTokens -] - -{ #category : #generated } -Antlr4NamespaceNameNode >> nameTokens: anOrderedCollection [ - nameTokens := anOrderedCollection -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4NotSetNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4NotSetNode.class.st deleted file mode 100644 index 13b02c0e2..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4NotSetNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #Antlr4NotSetNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'tilde', - 'expression' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4NotSetNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitNotSet: self -] - -{ #category : #generated } -Antlr4NotSetNode >> expression [ - ^ expression -] - -{ #category : #generated } -Antlr4NotSetNode >> expression: anAntlr4GrammarNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := anAntlr4GrammarNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -Antlr4NotSetNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -Antlr4NotSetNode >> tilde [ - ^ tilde -] - -{ #category : #generated } -Antlr4NotSetNode >> tilde: aSmaCCToken [ - tilde := aSmaCCToken -] - -{ #category : #generated } -Antlr4NotSetNode >> tokenVariables [ - ^ #(#tilde) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4OptionNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4OptionNode.class.st deleted file mode 100644 index e45c3ed34..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4OptionNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #Antlr4OptionNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'nameToken', - 'equal', - 'value' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4OptionNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitOption: self -] - -{ #category : #generated } -Antlr4OptionNode >> equal [ - ^ equal -] - -{ #category : #generated } -Antlr4OptionNode >> equal: aSmaCCToken [ - equal := aSmaCCToken -] - -{ #category : #generated } -Antlr4OptionNode >> nameToken [ - ^ nameToken -] - -{ #category : #generated } -Antlr4OptionNode >> nameToken: aSmaCCToken [ - nameToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4OptionNode >> nodeVariables [ - ^ #(#value) -] - -{ #category : #generated } -Antlr4OptionNode >> tokenVariables [ - ^ #(#nameToken #equal) -] - -{ #category : #generated } -Antlr4OptionNode >> value [ - ^ value -] - -{ #category : #generated } -Antlr4OptionNode >> value: anAntlr4GrammarNode [ - self value notNil - ifTrue: [ self value parent: nil ]. - value := anAntlr4GrammarNode. - self value notNil - ifTrue: [ self value parent: self ] -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4OptionsSpecNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4OptionsSpecNode.class.st deleted file mode 100644 index 3fdf2fd80..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4OptionsSpecNode.class.st +++ /dev/null @@ -1,91 +0,0 @@ -Class { - #name : #Antlr4OptionsSpecNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'optionsToken', - 'leftBrace', - 'options', - 'semicolons', - 'rightBrace' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4OptionsSpecNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitOptionsSpec: self -] - -{ #category : #generated } -Antlr4OptionsSpecNode >> compositeNodeVariables [ - ^ #(#options) -] - -{ #category : #generated } -Antlr4OptionsSpecNode >> compositeTokenVariables [ - ^ #(#semicolons) -] - -{ #category : #'generated-initialize-release' } -Antlr4OptionsSpecNode >> initialize [ - super initialize. - options := OrderedCollection new: 2. - semicolons := OrderedCollection new: 2. -] - -{ #category : #generated } -Antlr4OptionsSpecNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -Antlr4OptionsSpecNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -Antlr4OptionsSpecNode >> options [ - ^ options -] - -{ #category : #generated } -Antlr4OptionsSpecNode >> options: anOrderedCollection [ - self setParents: self options to: nil. - options := anOrderedCollection. - self setParents: self options to: self -] - -{ #category : #generated } -Antlr4OptionsSpecNode >> optionsToken [ - ^ optionsToken -] - -{ #category : #generated } -Antlr4OptionsSpecNode >> optionsToken: aSmaCCToken [ - optionsToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4OptionsSpecNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -Antlr4OptionsSpecNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] - -{ #category : #generated } -Antlr4OptionsSpecNode >> semicolons [ - ^ semicolons -] - -{ #category : #generated } -Antlr4OptionsSpecNode >> semicolons: anOrderedCollection [ - semicolons := anOrderedCollection -] - -{ #category : #generated } -Antlr4OptionsSpecNode >> tokenVariables [ - ^ #(#optionsToken #leftBrace #rightBrace) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4Parser.class.st b/src/SmaCC_Antlr_Parser/Antlr4Parser.class.st deleted file mode 100644 index dd5a0fdb4..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4Parser.class.st +++ /dev/null @@ -1,2756 +0,0 @@ -Class { - #name : #Antlr4Parser, - #superclass : #SmaCCGLRParser, - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #'generated-accessing' } -Antlr4Parser class >> cacheId [ - ^'2019-04-15T17:15:55.288568-05:00' -] - -{ #category : #generated } -Antlr4Parser class >> definitionComment [ -"# Converted to SmaCC from https://github.com/antlr/grammars-v4/tree/master/antlr4 commit f08f5d22947ff8dc7231aa0dbce60a72debee665 -/* - * [The ""BSD license""] - * Copyright (c) 2012-2014 Terence Parr - * Copyright (c) 2012-2014 Sam Harwell - * Copyright (c) 2015 Gerald Rosenberg - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES - * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -/* A grammar for ANTLR v4 written in ANTLR v4. - * - * Modified 2015.06.16 gbr - * -- update for compatibility with Antlr v4.5 - * -- add mode for channels - * -- moved members to LexerAdaptor - * -- move fragments to imports - */ - -#parser grammar ANTLRv4Parser; - -#options -# { tokenVocab = ANTLRv4Lexer; } - -%glr; -%root Grammar; -%prefix Antlr4; -%suffix Node; -%scopes default; -%excludes action argAction lexerCharSet; - -%id ; - -action - : . - ; - -argAction - : . - ; - - - : \; - ; - - - : \| - ; - - - : \( - ; - - - : \[ - ; - - - : \{ - ; - - - : \) - ; - -default lexerCharSet - : \] - ; - - - : \} - ; - - - : , - ; - - - : < - ; - - - : > - ; - - - : \. \. - ; - - - : \. - ; - - - : ~ - ; - - - : = - ; - - - : \+ = - ; - - - : \? - ; - - - : \* - ; - - - : \+ - ; - - - : @ - ; - - - : \# - ; - - - : \: - ; - - - : \:\: - ; - - - : \- > - ; - - - : catch - ; - - - : channels - ; - - - : finally - ; - - - : fragment - ; - - - : grammar - ; - - - : import - ; - - - : lexer - ; - - - : locals - ; - - - : mode - ; - - - : options - ; - - - : parser - ; - - - : private - ; - - - : protected - ; - - - : public - ; - - - : returns - ; - - - : throws - ; - - - : tokens - ; - - - : [A-Z] ( | | _)* - ; - - - : [a-z] ( | | _)* - ; - - - : 0 | [1-9][0-9]* - ; - - - : \\ ([btnfr'\\] | (u [0-9A-F]{1,4}) | .) - ; - - - : \' ( | [^'\r\n\\])* \' - ; - -lexerCharSet - : ([^\]\\] | )+ - ; - - - : /\*\*([^*/]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/ - ; - - - : \/\/ [^\r\n]* - | /\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/ - | - ; - - - : \s+ - ; - -# The main entry point for parsing a v4 grammar. -grammarSpec - : grammarType identifier 'nameToken' 'semicolon' prequelConstruct 'prequel'* rules modeSpec 'mode'* {{}} - ; - -grammarType - : ( 'grammarTypeToken' 'grammarToken' | 'grammarTypeToken' 'grammarToken' | 'grammarToken') - ; - -# This is the list of all constructs that can be declared before -# the set of rules that compose the grammar, and is invoked 0..n -# times by the grammarPrequel rule. -prequelConstruct - : optionsSpec - | delegateGrammars - | tokensSpec - | channelsSpec - | action - ; - -# ------------ -# Options - things that affect analysis and/or code generation -optionsSpec - : 'optionsToken' 'leftBrace' (option 'option' 'semicolon')* 'rightBrace' {{}} - ; - -option - : identifier 'nameToken' 'equal' optionValue 'value' {{}} - ; - -optionValue - : identifier 'nameToken' ( 'dot' identifier 'nameToken')* {{NamespaceName}} - | 'value' {{StringLiteral}} - | actionBlock 'actionBlock' - | 'value' {{IntegerLiteral}} - ; - -# ------------ -# Delegates -delegateGrammars - : 'importToken' delegateGrammar 'import' ( 'comma' delegateGrammar 'import')* 'semicolon' {{Import}} - ; - -delegateGrammar - : identifier 'aliasNameToken' 'equal' identifier 'nameToken' {{}} - | identifier 'nameToken' {{}} - ; - -# ------------ -# Tokens & Channels -tokensSpec - : 'tokensToken' 'leftBrace' idList? 'rightBrace' {{}} - ; - -channelsSpec - : 'channelsToken' 'leftBrace' idList? 'rightBrace' {{}} - ; - -idList - : identifier 'nameToken' ( 'comma' identifier 'nameToken')* 'comma'? - ; - -# Match stuff like @parser::members {int i;} -action - : 'atToken' (actionScopeName 'scopeName' 'colonColon')? identifier 'nameToken' actionBlock 'actionBlock' {{}} - ; - -# Scope names could collide with keywords; allow them as ids for action scopes -actionScopeName - : identifier 'nameToken' - | 'nameToken' - | 'nameToken' - ; - -actionBlock - : SwitchToAction 'leftBrace' 'actionBlock' 'rightBrace' {{}} - ; - -SwitchToAction - : {self scope: #action. nil} - ; - -argActionBlock - : SwitchToArgAction 'leftBracket' 'argActionBlock' 'rightBracket' - ; - -SwitchToArgAction - : {self scope: #argAction. nil} - ; - -modeSpec - : 'modeToken' identifier 'nameToken' 'semicolon' lexerRuleSpec 'lexerRule'* {{}} - ; - -rules - : ruleSpec 'rule'* - ; - -ruleSpec - : parserRuleSpec - | lexerRuleSpec - ; - -parserRuleSpec - : ruleModifiers? 'nameToken' argActionBlock? ruleReturns? throwsSpec 'throws'? localsSpec 'locals'? rulePrequel 'prequel'* 'colon' ruleBlock 'semicolon' exceptionGroup {{}} - ; - -exceptionGroup - : exceptionHandler 'handler'* finallyClause 'finally'? - ; - -exceptionHandler - : 'catchToken' argActionBlock actionBlock 'actionBlock' {{}} - ; - -finallyClause - : 'finallyToken' actionBlock 'actionBlock' {{}} - ; - -rulePrequel - : optionsSpec - | ruleAction - ; - -ruleReturns - : 'returnsToken' argActionBlock - ; - -# -------------- -# Exception spec -throwsSpec - : 'throwsToken' identifier 'nameToken' ( 'comma' identifier 'nameToken')* {{}} - ; - -localsSpec - : 'localsToken' argActionBlock {{}} - ; - -/** Match stuff like @init {int i;} */ -ruleAction - : 'atToken' identifier 'nameToken' actionBlock 'actionBlock' {{}} - ; - -ruleModifiers - : ruleModifier + - ; - -# An individual access modifier for a rule. The 'fragment' modifier -# is an internal indication for lexer rules that they do not match -# from the input but are like subroutines for other lexer rules to -# reuse for certain lexical patterns. The other modifiers are passed -# to the code generation templates and may be ignored by the template -# if they are of no use in that language. -ruleModifier - : 'modifier' - | 'modifier' - | 'modifier' - | 'modifier' - ; - -ruleBlock - : ruleAltList - ; - -ruleAltList - : labeledAlt ( 'bar' labeledAlt)* - ; - -labeledAlt - : alternative ( 'pound' identifier 'nameToken')? - ; - -# -------------------- -# lexer rules -lexerRuleSpec - : 'modifier'? 'nameToken' 'colon' lexerRuleBlock 'semicolon' {{}} - ; - -lexerRuleBlock - : lexerAltList - ; - -lexerAltList - : lexerAlt 'lexerExpression' ( 'bar' lexerAlt 'lexerExpression')* - ; - -lexerAlt - : lexerElements lexerCommands 'lexerCommand'? {{}} - | {{}} - # explicitly allow empty alts - ; - -lexerElements - : lexerElement 'lexerElement' + - ; - -lexerElement - : labeledLexerElement 'labeledLexerElement' ebnfSuffix 'suffix'? {{}} - | lexerAtom 'expression' ebnfSuffix 'suffix'? {{}} - | lexerBlock 'expression' ebnfSuffix 'suffix'? {{}} - | actionBlock 'actionBlock' 'questionMark'? {{}} - ; - -# but preds can be anywhere -labeledLexerElement - : identifier 'nameToken' ( 'equal' | 'equal') (lexerAtom 'expression' | lexerBlock 'expression') {{}} - ; - -lexerBlock - : 'leftParen' lexerAltList 'rightParen' {{}} - ; - -# E.g., channel(HIDDEN), skip, more, mode(INSIDE), push(INSIDE), pop -lexerCommands - : 'arrow' lexerCommand 'command' ( 'comma' lexerCommand 'command')* {{}} - ; - -lexerCommand - : lexerCommandName 'leftParen' lexerCommandExpr 'rightParen' {{}} - | lexerCommandName {{}} - ; - -lexerCommandName - : identifier 'nameToken' - | 'modeToken' - ; - -lexerCommandExpr - : identifier 'nameToken' - | 'value' - ; - -# -------------------- -# Rule Alts -altList - : alternative ( 'bar' alternative)* - ; - -alternative - : elementOptions 'options'? element 'element' + - | - # explicitly allow empty alts - ; - -element - : labeledElement (ebnfSuffix 'suffix' |) {{}} - | atom 'value' (ebnfSuffix 'suffix' |) {{}} - | ebnf - | actionBlock 'actionBlock' 'questionMark'? {{}} - ; - -labeledElement - : identifier 'nameToken' ( 'equal' | 'equal') (atom 'value' | block 'value') - ; - -# -------------------- -# EBNF and blocks -ebnf - : block 'block' blockSuffix? {{}} - ; - -blockSuffix - : ebnfSuffix 'suffix' - ; - -ebnfSuffix - : 'countToken' 'nonGreedyToken'? {{}} - | 'countToken' 'nonGreedyToken'? {{}} - | 'countToken' 'nonGreedyToken'? {{}} - ; - -lexerAtom - : characterRange - | terminal - | notSet - | lexerCharSet - | 'dot' elementOptions 'options'? {{}} - ; - -atom - : terminal - | ruleref - | notSet - | 'dot' elementOptions 'options'? {{}} - ; - -# -------------------- -# Inverted element set -notSet - : 'tilde' setElement 'expression' {{}} - | 'tilde' blockSet 'expression' {{}} - ; - -blockSet - : 'leftParen' setElement 'expression' ( 'bar' setElement 'expression')* 'rightParen' {{}} - ; - -setElement - : 'nameToken' elementOptions 'options'? {{}} - | 'value' elementOptions 'options'? {{}} - | characterRange - | lexerCharSet - ; - -lexerCharSet - : SwitchToLexerCharSet 'leftBracket' 'charSet' SwitchToDefault 'rightBracket' {{}} - ; - -SwitchToLexerCharSet - : {self scope: #lexerCharSet. nil} - ; - -SwitchToDefault - : {self scope: #default. nil} - ; - -# ------------- -# Grammar Block -block - : 'leftParen' (optionsSpec 'options'? ruleAction 'action'* 'colon')? altList 'rightParen' {{}} - ; - -# ---------------- -# Parser rule ref -ruleref - : 'nameToken' argActionBlock? elementOptions 'options'? {{}} - ; - -# --------------- -# Character Range -characterRange - : 'from' 'dotDot' 'to' {{}} - ; - -terminal - : 'nameToken' elementOptions 'options'? {{ReferenceTerminal}} - | 'value' elementOptions 'options'? {{StringTerminal}} - ; - -# Terminals may be adorned with certain options when -# reference in the grammar: TOK<,,,> -elementOptions - : 'lt' elementOption ( 'comma' elementOption)* 'gt' {{}} - ; - -elementOption - : identifier 'nameToken' - | identifier 'equal' (identifier | 'value') - ; - -identifier - : 'nameToken' - | 'nameToken' - ;" -] - -{ #category : #'file types' } -Antlr4Parser class >> fileExtension [ - ^ '.g4' -] - -{ #category : #generated } -Antlr4Parser class >> reduceTable [ -^#( - #(55 1 #reduceActionForgrammarType3: 4177923 false ) - #(55 2 #reduceActionForgrammarType1: 4177921 false ) - #(55 2 #reduceActionForgrammarType1: 4177922 false ) - #(150 1 #liftFirstValue: 12710914 false ) - #(150 1 #liftFirstValue: 12710913 false ) - #(53 0 #reduceActionForprequelConstruct__prequel__1: 4114433 false ) - #(82 0 #reduceActionForprequelConstruct__prequel__1: 6706177 false ) - #(53 2 #reduceActionForprequelConstruct__prequel__2: 4114434 false ) - #(56 1 #liftFirstValue: 4510721 false ) - #(56 1 #liftFirstValue: 4510722 false ) - #(56 1 #liftFirstValue: 4510723 false ) - #(56 1 #liftFirstValue: 4510724 false ) - #(56 1 #liftFirstValue: 4510725 false ) - #(54 0 #reduceActionForprequelConstruct__prequel__1: 4149249 false ) - #(81 1 #reduceActionForrules1: 6694913 false ) - #(74 1 #liftFirstValue: 6098946 false ) - #(74 1 #liftFirstValue: 6098947 false ) - #(76 0 #reduceActionForSwitchToAction1: 6323201 false ) - #(74 1 #liftFirstValue: 6098945 false ) - #(66 0 #reduceActionFor__comma___comma__delegateGrammar__import___1: 5251073 false ) - #(67 1 #reduceActionFordelegateGrammar2: 5338114 false ) - #(59 0 #reduceActionFor__comma___comma__delegateGrammar__import___1: 4765697 false ) - #(52 6 #reduceActionForgrammarSpec1: 4036609 false ) - #(98 1 #liftFirstValue: 8182788 false ) - #(98 1 #liftFirstValue: 8182786 false ) - #(98 1 #liftFirstValue: 8182787 false ) - #(98 1 #liftFirstValue: 8182785 false ) - #(78 0 #reduceActionForSwitchToArgAction1: 6511617 false ) - #(85 0 #nil 6895617 false ) - #(82 2 #reduceActionForprequelConstruct__prequel__2: 6706178 false ) - #(83 1 #liftFirstValue: 6729729 false ) - #(96 1 #reduceActionForrules1: 7749633 false ) - #(97 1 #reduceActionForruleModifier__1: 7769089 false ) - #(83 1 #liftFirstValue: 6729730 false ) - #(73 3 #reduceActionForaction1: 5870593 false ) - #(69 3 #reduceActionForchannelsSpec1: 5612545 false ) - #(72 0 #reduceActionFor__comma___comma__delegateGrammar__import___1: 5757953 false ) - #(68 3 #reduceActionFortokensSpec1: 5509121 false ) - #(54 2 #reduceActionForprequelConstruct__prequel__2: 4149250 false ) - #(109 0 #reduceActionForlexerAlt3: 8792067 false ) - #(139 0 #reduceActionForSwitchToLexerCharSet1: 11673601 false ) - #(86 0 #reduceActionForprequelConstruct__prequel__1: 6917121 false ) - #(85 1 #liftFirstValue: 6895618 false ) - #(97 2 #reduceActionForprequelConstruct__prequel__2: 7769090 false ) - #(69 4 #reduceActionForchannelsSpec2: 5612546 false ) - #(70 2 #reduceActionForidList1: 5722113 false ) - #(64 4 #reduceActionFordelegateGrammars1: 5179393 false ) - #(66 2 #reduceActionFor__comma___comma__delegateGrammar__import___2: 5251074 false ) - #(67 3 #reduceActionFordelegateGrammar1: 5338113 false ) - #(57 4 #reduceActionForoptionsSpec1: 4701185 false ) - #(59 2 #reduceActionFor__comma___comma__delegateGrammar__import___2: 4765698 false ) - #(68 4 #reduceActionFortokensSpec2: 5509122 false ) - #(131 1 #reduceActionForlexerAtom5: 10822661 false ) - #(145 1 #reduceActionForterminal1: 12224513 false ) - #(145 1 #reduceActionForterminal3: 12224515 false ) - #(112 1 #reduceActionForlexerElement7: 8963079 false ) - #(105 1 #reduceActionForrules1: 8656897 false ) - #(108 0 #reduceActionFor__comma___comma__delegateGrammar__import___1: 8742913 false ) - #(109 1 #reduceActionForlexerAlt1: 8792065 false ) - #(110 1 #reduceActionForrules1: 8906753 false ) - #(111 1 #reduceActionForruleModifier__1: 8926209 false ) - #(112 1 #reduceActionForlexerElement1: 8963073 false ) - #(112 1 #reduceActionForlexerElement5: 8963077 false ) - #(112 1 #reduceActionForlexerElement5: 8963075 false ) - #(131 1 #liftFirstValue: 10822659 false ) - #(131 1 #liftFirstValue: 10822660 false ) - #(131 1 #liftFirstValue: 10822657 false ) - #(131 1 #liftFirstValue: 10822658 false ) - #(94 2 #reduceActionForlocalsSpec1: 7549953 false ) - #(92 2 #reduceActionForruleReturns1: 7332865 false ) - #(73 5 #reduceActionForaction2: 5870594 false ) - #(70 3 #reduceActionForidList2: 5722114 false ) - #(72 2 #reduceActionFor__comma___comma__delegateGrammar__import___2: 5757954 false ) - #(65 2 #reduceActionForgrammarType1: 5251073 false ) - #(58 2 #reduceActionForgrammarType1: 4765697 false ) - #(80 0 #reduceActionForprequelConstruct__prequel__1: 6656001 false ) - #(131 2 #reduceActionForlexerAtom6: 10822662 false ) - #(137 1 #reduceActionForsetElement1: 11348993 false ) - #(137 1 #reduceActionForsetElement3: 11348995 false ) - #(133 2 #reduceActionFornotSet2: 11101186 false ) - #(133 2 #reduceActionFornotSet2: 11101185 false ) - #(137 1 #liftFirstValue: 11348998 false ) - #(137 1 #liftFirstValue: 11348997 false ) - #(145 2 #reduceActionForterminal2: 12224514 false ) - #(145 2 #reduceActionForterminal4: 12224516 false ) - #(112 2 #reduceActionForlexerElement8: 8963080 false ) - #(104 4 #reduceActionForlexerRuleSpec1: 8521729 false ) - #(106 2 #reduceActionForidList1: 8696833 false ) - #(109 2 #reduceActionForlexerAlt2: 8792066 false ) - #(111 2 #reduceActionForprequelConstruct__prequel__2: 8926210 false ) - #(130 1 #reduceActionForebnfSuffix1: 10619905 false ) - #(130 1 #reduceActionForebnfSuffix1: 10619907 false ) - #(130 1 #reduceActionForebnfSuffix1: 10619909 false ) - #(112 2 #reduceActionForlexerElement2: 8963074 false ) - #(112 2 #reduceActionForlexerElement6: 8963078 false ) - #(112 2 #reduceActionForlexerElement6: 8963076 false ) - #(93 3 #reduceActionForthrowsSpec1: 7432193 false ) - #(124 0 #reduceActionForalternative3: 10064899 false ) - #(91 1 #liftFirstValue: 7280641 false ) - #(86 2 #reduceActionForprequelConstruct__prequel__2: 6917122 false ) - #(91 1 #liftFirstValue: 7280642 false ) - #(75 4 #reduceActionForactionBlock1: 6205441 false ) - #(71 2 #reduceActionForgrammarType1: 5757953 false ) - #(61 1 #reduceActionForoptionValue4: 4927492 false ) - #(61 1 #reduceActionForoptionValue2: 4927490 false ) - #(60 3 #reduceActionForoption1: 4843521 false ) - #(61 1 #liftFirstValue: 4927491 false ) - #(63 0 #reduceActionFor__comma___comma__delegateGrammar__import___1: 4968449 false ) - #(79 4 #reduceActionFormodeSpec1: 6574081 false ) - #(104 5 #reduceActionForlexerRuleSpec2: 8521730 false ) - #(114 3 #reduceActionForlexerBlock1: 9415681 false ) - #(148 0 #reduceActionFor__comma___comma__elementOption__1: 12532737 false ) - #(149 1 #reduceActionForelementOption1: 12588033 false ) - #(136 0 #reduceActionFor__comma___comma__delegateGrammar__import___1: 11275265 false ) - #(137 2 #reduceActionForsetElement2: 11348994 false ) - #(137 2 #reduceActionForsetElement4: 11348996 false ) - #(144 3 #reduceActionForcharacterRange1: 12127233 false ) - #(108 2 #reduceActionFor__comma___comma__delegateGrammar__import___2: 8742914 false ) - #(119 1 #reduceActionForgrammarType3: 9821186 false ) - #(117 0 #reduceActionFor__comma___comma__delegateGrammar__import___1: 9630721 false ) - #(118 1 #reduceActionForlexerCommand2: 9684994 false ) - #(119 1 #reduceActionForlexerCommandName1: 9821185 false ) - #(130 2 #reduceActionForebnfSuffix2: 10619906 false ) - #(130 2 #reduceActionForebnfSuffix2: 10619908 false ) - #(130 2 #reduceActionForebnfSuffix2: 10619910 false ) - #(140 0 #reduceActionForSwitchToDefault1: 11737089 false ) - #(113 3 #reduceActionForlabeledLexerElement2: 9262082 false ) - #(113 3 #reduceActionForlabeledLexerElement2: 9262081 false ) - #(113 3 #reduceActionForlabeledLexerElement2: 9262084 false ) - #(113 3 #reduceActionForlabeledLexerElement2: 9262083 false ) - #(77 4 #reduceActionForargActionBlock1: 6379521 false ) - #(142 0 #reduceActionForprequelConstruct__prequel__1: 11879425 false ) - #(132 1 #reduceActionForatom4: 10953732 false ) - #(143 1 #reduceActionForruleref1: 11999233 false ) - #(126 1 #reduceActionForelement6: 10174470 false ) - #(99 1 #reduceActionForrules1: 8310785 false ) - #(102 0 #reduceActionFor__bar___bar__labeledAlt__1: 8373249 false ) - #(103 1 #reduceActionForlabeledAlt1: 8406017 false ) - #(124 1 #reduceActionForalternative1: 10064897 false ) - #(125 1 #reduceActionForruleModifier__1: 10108929 false ) - #(126 1 #reduceActionForelement2: 10174466 false ) - #(126 1 #liftFirstValue: 10174469 false ) - #(126 1 #reduceActionForelement4: 10174468 false ) - #(132 1 #liftFirstValue: 10953731 false ) - #(128 1 #reduceActionForebnf1: 10526721 false ) - #(132 1 #liftFirstValue: 10953730 false ) - #(132 1 #liftFirstValue: 10953729 false ) - #(61 2 #reduceActionForoptionValue1: 4927489 false ) - #(80 2 #reduceActionForprequelConstruct__prequel__2: 6656002 false ) - #(107 2 #reduceActionForgrammarType1: 8742913 false ) - #(115 3 #reduceActionForlexerCommands1: 9571329 false ) - #(95 3 #reduceActionForruleAction1: 7656449 false ) - #(123 0 #reduceActionFor__bar___bar__alternative__1: 10031105 false ) - #(132 2 #reduceActionForatom5: 10953733 false ) - #(143 2 #reduceActionForruleref3: 11999235 false ) - #(143 2 #reduceActionForruleref2: 11999234 false ) - #(126 2 #reduceActionForelement7: 10174471 false ) - #(88 0 #reduceActionForprequelConstruct__prequel__1: 7038977 false ) - #(100 2 #reduceActionForruleAltList1: 8344577 false ) - #(125 2 #reduceActionForprequelConstruct__prequel__2: 10108930 false ) - #(126 2 #reduceActionForelement1: 10174465 false ) - #(126 2 #reduceActionForelement3: 10174467 false ) - #(128 2 #reduceActionForebnf2: 10526722 false ) - #(129 1 #liftFirstValue: 10575873 false ) - #(124 2 #reduceActionForalternative2: 10064898 false ) - #(63 2 #reduceActionFor__comma___comma__delegateGrammar__import___2: 4968450 false ) - #(146 4 #reduceActionForelementOptions1: 12487681 false ) - #(148 2 #reduceActionFor__comma___comma__elementOption__2: 12532738 false ) - #(149 3 #reduceActionForelementOption3: 12588035 false ) - #(149 3 #reduceActionForelementOption2: 12588034 false ) - #(134 4 #reduceActionForblockSet1: 11214849 false ) - #(136 2 #reduceActionFor__comma___comma__delegateGrammar__import___2: 11275266 false ) - #(117 2 #reduceActionFor__comma___comma__delegateGrammar__import___2: 9630722 false ) - #(120 1 #reduceActionForgrammarType3: 9897986 false ) - #(120 1 #reduceActionForlexerCommandName1: 9897985 false ) - #(138 5 #reduceActionForlexerCharSet1: 11529217 false ) - #(141 3 #reduceActionForblock1: 11822081 false ) - #(121 2 #reduceActionForaltList1: 10005505 false ) - #(142 2 #reduceActionForprequelConstruct__prequel__2: 11879426 false ) - #(143 3 #reduceActionForruleref4: 11999236 false ) - #(84 7 #reduceActionForparserRuleSpec1: 6785025 false ) - #(87 1 #reduceActionForalternative1: 7018497 false ) - #(102 2 #reduceActionFor__bar___bar__labeledAlt__2: 8373250 false ) - #(103 3 #reduceActionForlabeledAlt2: 8406018 false ) - #(127 3 #reduceActionForlabeledElement1: 10361857 false ) - #(127 3 #reduceActionForlabeledElement1: 10361858 false ) - #(127 3 #reduceActionForlabeledElement1: 10361859 false ) - #(127 3 #reduceActionForlabeledElement1: 10361860 false ) - #(62 2 #reduceActionForgrammarType1: 4968449 false ) - #(147 2 #reduceActionFor__comma___comma__elementOption_1: 12532737 false ) - #(135 2 #reduceActionForgrammarType1: 11275265 false ) - #(116 2 #reduceActionForgrammarType1: 9630721 false ) - #(118 4 #reduceActionForlexerCommand1: 9684993 false ) - #(84 8 #reduceActionForparserRuleSpec5: 6785029 false ) - #(123 2 #reduceActionFor__bar___bar__alternative__2: 10031106 false ) - #(88 2 #reduceActionForprequelConstruct__prequel__2: 7038978 false ) - #(87 2 #reduceActionForexceptionGroup2: 7018498 false ) - #(101 2 #reduceActionFor__bar___bar__labeledAlt_1: 8373249 false ) - #(84 8 #reduceActionForparserRuleSpec3: 6785027 false ) - #(84 8 #reduceActionForparserRuleSpec2: 6785026 false ) - #(84 8 #reduceActionForparserRuleSpec9: 6785033 false ) - #(84 9 #reduceActionForparserRuleSpec7: 6785031 false ) - #(84 9 #reduceActionForparserRuleSpec6: 6785030 false ) - #(122 2 #reduceActionFor__bar___bar__alternative_1: 10031105 false ) - #(141 5 #reduceActionForblock2: 11822082 false ) - #(90 2 #reduceActionForfinallyClause1: 7197697 false ) - #(84 9 #reduceActionForparserRuleSpec4: 6785028 false ) - #(84 9 #reduceActionForparserRuleSpec13: 6785037 false ) - #(84 9 #reduceActionForparserRuleSpec11: 6785035 false ) - #(84 9 #reduceActionForparserRuleSpec10: 6785034 false ) - #(84 10 #reduceActionForparserRuleSpec8: 6785032 false ) - #(141 6 #reduceActionForblock3: 11822083 false ) - #(89 3 #reduceActionForexceptionHandler1: 7100417 false ) - #(84 10 #reduceActionForparserRuleSpec15: 6785039 false ) - #(84 10 #reduceActionForparserRuleSpec14: 6785038 false ) - #(84 10 #reduceActionForparserRuleSpec12: 6785036 false ) - #(84 11 #reduceActionForparserRuleSpec16: 6785040 false ) - ). -] - -{ #category : #'generated-accessing' } -Antlr4Parser class >> scannerClass [ - ^Antlr4Scanner -] - -{ #category : #generated } -Antlr4Parser class >> startingStateForgrammarSpec [ - ^ 1 -] - -{ #category : #generated } -Antlr4Parser class >> symbolNames [ - ^ #('' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'B e g i n' 'grammarSpec' 'prequelConstruct ''prequel''*' 'modeSpec ''mode''*' 'grammarType' 'prequelConstruct' 'optionsSpec' '(option ''option'' ''semicolon'')' '(option ''option'' ''semicolon'')*' 'option' 'optionValue' '( ''dot'' identifier ''nameToken'')' '( ''dot'' identifier ''nameToken'')*' 'delegateGrammars' '( ''comma'' delegateGrammar ''import'')' '( ''comma'' delegateGrammar ''import'')*' 'delegateGrammar' 'tokensSpec' 'channelsSpec' 'idList' '( ''comma'' identifier ''nameToken'')' '( ''comma'' identifier ''nameToken'')*' 'action' 'actionScopeName' 'actionBlock' 'SwitchToAction' 'argActionBlock' 'SwitchToArgAction' 'modeSpec' 'lexerRuleSpec ''lexerRule''*' 'rules' 'ruleSpec ''rule''*' 'ruleSpec' 'parserRuleSpec' 'localsSpec ''locals''?' 'rulePrequel ''prequel''*' 'exceptionGroup' 'exceptionHandler ''handler''*' 'exceptionHandler' 'finallyClause' 'rulePrequel' 'ruleReturns' 'throwsSpec' 'localsSpec' 'ruleAction' 'ruleModifiers' 'ruleModifier +' 'ruleModifier' 'ruleBlock' 'ruleAltList' '( ''bar'' labeledAlt)' '( ''bar'' labeledAlt)*' 'labeledAlt' 'lexerRuleSpec' 'lexerRuleBlock' 'lexerAltList' '( ''bar'' lexerAlt ''lexerExpression'')' '( ''bar'' lexerAlt ''lexerExpression'')*' 'lexerAlt' 'lexerElements' 'lexerElement ''lexerElement'' +' 'lexerElement' 'labeledLexerElement' 'lexerBlock' 'lexerCommands' '( ''comma'' lexerCommand ''command'')' '( ''comma'' lexerCommand ''command'')*' 'lexerCommand' 'lexerCommandName' 'lexerCommandExpr' 'altList' '( ''bar'' alternative)' '( ''bar'' alternative)*' 'alternative' 'element ''element'' +' 'element' 'labeledElement' 'ebnf' 'blockSuffix' 'ebnfSuffix' 'lexerAtom' 'atom' 'notSet' 'blockSet' '( ''bar'' setElement ''expression'')' '( ''bar'' setElement ''expression'')*' 'setElement' 'lexerCharSet' 'SwitchToLexerCharSet' 'SwitchToDefault' 'block' 'ruleAction ''action''*' 'ruleref' 'characterRange' 'terminal' 'elementOptions' '( ''comma'' elementOption)' '( ''comma'' elementOption)*' 'elementOption' 'identifier' 'E O F' 'error') -] - -{ #category : #generated } -Antlr4Parser class >> symbolTypes [ - ^ #(#SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #Antlr4GrammarSpecNode #Antlr4GrammarSpecNode #OrderedCollection #OrderedCollection #OrderedCollection #Antlr4GrammarNode #Antlr4OptionsSpecNode #OrderedCollection #OrderedCollection #Antlr4OptionNode #Antlr4GrammarNode #OrderedCollection #OrderedCollection #Antlr4ImportNode #OrderedCollection #OrderedCollection #Antlr4DelegateGrammarNode #Antlr4TokensSpecNode #Antlr4ChannelsSpecNode #OrderedCollection #OrderedCollection #OrderedCollection #Antlr4ActionNode #SmaCCToken #Antlr4ActionBlockNode nil #OrderedCollection nil #Antlr4ModeSpecNode #OrderedCollection #OrderedCollection #OrderedCollection #Antlr4GrammarNode #Antlr4ParserRuleSpecNode #Antlr4LocalsSpecNode #OrderedCollection #OrderedCollection #OrderedCollection #Antlr4ExceptionHandlerNode #Antlr4FinallyClauseNode #Antlr4GrammarNode #OrderedCollection #Antlr4ThrowsSpecNode #Antlr4LocalsSpecNode #Antlr4RuleActionNode #OrderedCollection #OrderedCollection #SmaCCToken #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #Antlr4LexerRuleSpecNode #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #Antlr4LexerAltNode #OrderedCollection #OrderedCollection #Antlr4LexerElementNode #Antlr4LabeledLexerElementNode #Antlr4LexerBlockNode #Antlr4LexerCommandsNode #OrderedCollection #OrderedCollection #Antlr4LexerCommandNode #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #Antlr4GrammarNode #OrderedCollection #Antlr4EbnfNode #Antlr4EbnfSuffixNode #Antlr4EbnfSuffixNode #Antlr4GrammarNode #Antlr4GrammarNode #Antlr4NotSetNode #Antlr4BlockSetNode #OrderedCollection #OrderedCollection #Antlr4GrammarNode #Antlr4LexerCharSetNode nil nil #Antlr4BlockNode #OrderedCollection #Antlr4RulerefNode #Antlr4CharacterRangeNode #Antlr4GrammarNode #Antlr4ElementOptionsNode #OrderedCollection #OrderedCollection #OrderedCollection #SmaCCToken #SmaCCToken #SmaCCErrorNode) -] - -{ #category : #generated } -Antlr4Parser class >> transitionTable [ -^#( -#[1 0 9 0 31 0 13 0 33 0 17 0 37 0 21 0 52 0 25 0 55] -#[0 0 6 0 44 0 45] -#[0 0 29 0 31] -#[0 0 33 0 31] -#[0 0 0 0 151] -#[0 0 45 0 44 0 45 0 150] -#[0 0 10 0 44 0 45] -#[0 0 14 0 44 0 45] -#[0 0 18 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 13 0 15 0 17 0 22 0 24 0 25 0 34 0 36] -#[0 0 22 0 3 0 4 0 5 0 7 0 8 0 10 0 11 0 13 0 15 0 17 0 18 0 22 0 24 0 25 0 34 0 36] -#[0 0 49 0 3] -#[1 0 26 0 22 0 26 0 28 0 26 0 30 0 26 0 32 0 26 0 35 0 26 0 36 0 26 0 38 0 26 0 39 0 26 0 40 0 26 0 43 0 26 0 44 0 26 0 45 0 53 0 53 0 26 0 151] -#[1 0 57 0 22 0 61 0 28 0 30 0 30 0 65 0 32 0 30 0 35 0 69 0 36 0 30 0 38 0 30 0 39 0 30 0 40 0 73 0 43 0 30 0 44 0 30 0 45 0 77 0 56 0 77 0 57 0 77 0 64 0 77 0 68 0 77 0 69 0 77 0 73 0 101 0 81 0 105 0 82 0 30 0 151] -#[1 0 117 0 33 0 117 0 37 0 121 0 44 0 121 0 45 0 117 0 74 0 121 0 150] -#[0 0 125 0 7] -#[1 0 133 0 44 0 133 0 45 0 129 0 67 0 133 0 150] -#[0 0 137 0 7] -#[0 0 141 0 7] -#[0 0 34 0 22 0 28 0 30 0 32 0 35 0 36 0 38 0 39 0 40 0 43 0 44 0 45 0 151] -#[0 0 38 0 22 0 28 0 30 0 32 0 35 0 36 0 38 0 39 0 40 0 43 0 44 0 45 0 151] -#[0 0 42 0 22 0 28 0 30 0 32 0 35 0 36 0 38 0 39 0 40 0 43 0 44 0 45 0 151] -#[0 0 46 0 22 0 28 0 30 0 32 0 35 0 36 0 38 0 39 0 40 0 43 0 44 0 45 0 151] -#[0 0 50 0 22 0 28 0 30 0 32 0 35 0 36 0 38 0 39 0 40 0 43 0 44 0 45 0 151] -#[0 0 54 0 22 0 28 0 30 0 32 0 35 0 36 0 38 0 39 0 40 0 43 0 44 0 45 0 151] -#[1 0 58 0 35 0 145 0 54 0 58 0 151] -#[1 0 149 0 30 0 62 0 35 0 189 0 38 0 189 0 39 0 189 0 40 0 165 0 44 0 169 0 45 0 173 0 83 0 173 0 84 0 181 0 96 0 185 0 97 0 189 0 98 0 173 0 104 0 62 0 151] -#[0 0 66 0 25] -#[0 0 70 0 25] -#[0 0 197 0 25] -#[1 0 74 0 7 0 78 0 25 0 201 0 75 0 205 0 76] -#[1 0 209 0 10 0 217 0 44 0 217 0 45 0 213 0 70 0 217 0 150] -#[1 0 82 0 3 0 82 0 11 0 221 0 66] -#[1 0 86 0 3 0 86 0 11 0 225 0 17] -#[1 0 90 0 10 0 90 0 44 0 90 0 45 0 229 0 59] -#[1 0 233 0 10 0 217 0 44 0 217 0 45 0 237 0 70 0 217 0 150] -#[1 0 241 0 35 0 245 0 79 0 94 0 151] -#[1 0 98 0 30 0 98 0 38 0 98 0 39 0 98 0 40 0 249 0 44 0 98 0 45] -#[0 0 102 0 30 0 38 0 39 0 40 0 45] -#[0 0 106 0 30 0 38 0 39 0 40 0 45] -#[0 0 110 0 30 0 38 0 39 0 40 0 45] -#[0 0 253 0 24] -#[1 0 114 0 6 0 118 0 22 0 118 0 24 1 1 0 34 0 118 0 36 1 5 0 41 1 9 0 42 1 13 0 77 1 17 0 78 1 21 0 85 1 25 0 92 1 29 0 93 1 21 0 94] -#[0 0 122 0 30 0 35 0 38 0 39 0 40 0 44 0 45 0 151] -#[0 0 126 0 30 0 35 0 38 0 39 0 40 0 44 0 45 0 151] -#[0 1 37 0 45] -#[1 1 45 0 30 1 45 0 38 1 45 0 39 1 45 0 40 0 130 0 45 1 45 0 98] -#[0 0 134 0 30 0 38 0 39 0 40 0 45] -#[0 0 138 0 30 0 35 0 38 0 39 0 40 0 44 0 45 0 151] -#[0 1 49 0 44 0 45 0 150] -#[0 0 142 0 22 0 28 0 30 0 32 0 35 0 36 0 38 0 39 0 40 0 43 0 44 0 45 0 151] -#[0 1 53 0 7] -#[0 0 146 0 22 0 28 0 30 0 32 0 35 0 36 0 38 0 39 0 40 0 43 0 44 0 45 0 151] -#[0 1 57 0 10] -#[1 0 150 0 10 0 150 0 11 1 61 0 72] -#[1 1 65 0 3 1 69 0 11 1 73 0 65] -#[0 1 77 0 44 0 45 0 150] -#[1 1 81 0 10 1 93 0 44 1 93 0 45 1 85 0 58 1 89 0 60 1 93 0 150] -#[0 0 154 0 22 0 28 0 30 0 32 0 35 0 36 0 38 0 39 0 40 0 43 0 44 0 45 0 151] -#[0 1 97 0 10] -#[0 1 101 0 44 0 45 0 150] -#[0 0 158 0 35 0 151] -#[0 1 105 0 24] -#[1 0 162 0 3 0 162 0 4 1 109 0 5 0 166 0 6 0 74 0 7 1 113 0 15 1 117 0 16 1 121 0 44 1 189 0 45 1 125 0 47 1 129 0 75 0 205 0 76 1 133 0 105 1 137 0 106 1 141 0 109 1 145 0 110 1 149 0 111 1 153 0 112 1 157 0 113 1 161 0 114 1 165 0 131 1 165 0 133 1 165 0 138 1 177 0 139 1 165 0 144 1 165 0 145 1 189 0 150] -#[1 0 114 0 6 1 193 0 77 1 17 0 78] -#[1 0 114 0 6 1 197 0 77 1 17 0 78] -#[0 1 201 0 44 0 45 0 150] -#[1 0 118 0 22 0 118 0 24 1 1 0 34 0 118 0 36 1 5 0 41 1 9 0 42 1 205 0 85 1 209 0 92 1 213 0 93 1 205 0 94] -#[0 1 217 0 6] -#[1 0 170 0 22 0 170 0 24 0 170 0 36 1 221 0 86] -#[1 0 118 0 22 0 118 0 24 1 1 0 34 0 118 0 36 1 9 0 42 1 225 0 85 1 229 0 93 1 225 0 94] -#[1 0 118 0 22 0 118 0 24 1 1 0 34 0 118 0 36 1 233 0 85 1 233 0 94] -#[0 0 174 0 22 0 24 0 36] -#[1 0 114 0 6 0 118 0 22 0 118 0 24 1 1 0 34 0 118 0 36 1 5 0 41 1 9 0 42 1 237 0 77 1 17 0 78 1 241 0 85 1 245 0 92 1 249 0 93 1 241 0 94] -#[0 0 98 0 30 0 38 0 39 0 40 0 45] -#[0 0 178 0 30 0 38 0 39 0 40 0 45] -#[1 0 74 0 7 1 253 0 75 0 205 0 76] -#[0 2 1 0 1] -#[0 0 182 0 22 0 28 0 30 0 32 0 35 0 36 0 38 0 39 0 40 0 43 0 44 0 45 0 151] -#[1 0 186 0 10 2 5 0 11 2 9 0 71] -#[0 0 190 0 22 0 28 0 30 0 32 0 35 0 36 0 38 0 39 0 40 0 43 0 44 0 45 0 151] -#[1 0 133 0 44 0 133 0 45 2 13 0 67 0 133 0 150] -#[0 0 194 0 3 0 11] -#[0 0 198 0 3 0 11] -#[0 0 202 0 22 0 24 0 28 0 30 0 32 0 35 0 36 0 38 0 39 0 40 0 43 0 44 0 45 0 151] -#[0 0 206 0 10 0 44 0 45] -#[0 2 17 0 3] -#[0 2 21 0 17] -#[0 0 210 0 22 0 28 0 30 0 32 0 35 0 36 0 38 0 39 0 40 0 43 0 44 0 45 0 151] -#[0 2 25 0 3] -#[1 0 162 0 3 0 162 0 4 1 109 0 5 0 166 0 6 0 74 0 7 1 113 0 15 1 117 0 16 1 121 0 44 1 189 0 45 1 125 0 47 1 129 0 75 0 205 0 76 2 29 0 105 1 137 0 106 1 141 0 109 1 145 0 110 1 149 0 111 1 153 0 112 1 157 0 113 1 161 0 114 1 165 0 131 1 165 0 133 1 165 0 138 1 177 0 139 1 165 0 144 1 165 0 145 1 189 0 150] -#[1 0 162 0 4 1 109 0 5 0 166 0 6 0 74 0 7 0 162 0 8 1 113 0 15 1 117 0 16 1 121 0 44 1 189 0 45 1 125 0 47 1 129 0 75 0 205 0 76 2 33 0 106 1 141 0 109 1 145 0 110 1 149 0 111 1 153 0 112 1 157 0 113 1 161 0 114 1 165 0 131 1 165 0 133 1 165 0 138 1 177 0 139 1 165 0 144 1 165 0 145 1 189 0 150] -#[1 0 214 0 3 0 214 0 4 0 214 0 5 0 214 0 6 0 214 0 7 0 214 0 8 2 37 0 12 0 214 0 15 0 214 0 16 0 214 0 19 0 214 0 20 0 214 0 21 0 214 0 26 0 214 0 44 0 214 0 45 0 214 0 47 2 41 0 146] -#[1 2 45 0 5 0 166 0 6 2 49 0 44 2 53 0 47 2 57 0 134 2 61 0 137 2 61 0 138 1 177 0 139 2 61 0 144] -#[1 0 218 0 3 0 218 0 4 0 218 0 5 0 218 0 6 0 218 0 7 0 218 0 8 2 37 0 12 0 218 0 15 0 218 0 16 0 18 0 17 0 18 0 18 0 218 0 19 0 218 0 20 0 218 0 21 0 218 0 23 0 218 0 26 0 218 0 44 0 218 0 45 0 218 0 47 2 73 0 146] -#[1 0 222 0 3 0 222 0 4 0 222 0 5 0 222 0 6 0 222 0 7 0 222 0 8 2 37 0 12 2 77 0 14 0 222 0 15 0 222 0 16 0 222 0 19 0 222 0 20 0 222 0 21 0 222 0 26 0 222 0 44 0 222 0 45 0 222 0 47 2 81 0 146] -#[1 0 226 0 3 0 226 0 4 0 226 0 5 0 226 0 6 0 226 0 7 0 226 0 8 0 226 0 15 0 226 0 16 2 85 0 19 0 226 0 26 0 226 0 44 0 226 0 45 0 226 0 47] -#[0 2 89 0 3] -#[0 0 230 0 3] -#[1 0 234 0 3 0 234 0 4 0 234 0 8 2 93 0 108] -#[1 0 238 0 3 0 238 0 4 0 238 0 8 2 97 0 26 2 101 0 115] -#[1 0 242 0 3 0 242 0 4 1 109 0 5 0 166 0 6 0 74 0 7 0 242 0 8 1 113 0 15 1 117 0 16 0 242 0 26 1 121 0 44 1 189 0 45 1 125 0 47 1 129 0 75 0 205 0 76 2 105 0 112 1 157 0 113 1 161 0 114 1 165 0 131 1 165 0 133 1 165 0 138 1 177 0 139 1 165 0 144 1 165 0 145 1 189 0 150] -#[0 0 246 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 26 0 44 0 45 0 47] -#[1 0 250 0 3 0 250 0 4 0 250 0 5 0 250 0 6 0 250 0 7 0 250 0 8 0 250 0 15 0 250 0 16 2 109 0 19 2 113 0 20 2 117 0 21 0 250 0 26 0 250 0 44 0 250 0 45 0 250 0 47 2 121 0 130] -#[1 0 254 0 3 0 254 0 4 0 254 0 5 0 254 0 6 0 254 0 7 0 254 0 8 0 254 0 15 0 254 0 16 2 109 0 19 2 113 0 20 2 117 0 21 0 254 0 26 0 254 0 44 0 254 0 45 0 254 0 47 2 125 0 130] -#[1 1 2 0 3 1 2 0 4 1 2 0 5 1 2 0 6 1 2 0 7 1 2 0 8 1 2 0 15 1 2 0 16 2 109 0 19 2 113 0 20 2 117 0 21 1 2 0 26 1 2 0 44 1 2 0 45 1 2 0 47 2 129 0 130] -#[0 1 6 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 26 0 44 0 45 0 47] -#[0 1 10 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 26 0 44 0 45 0 47] -#[0 2 133 0 6] -#[0 1 14 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 26 0 44 0 45 0 47] -#[0 1 18 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 26 0 44 0 45 0 47] -#[1 2 137 0 17 2 141 0 18] -#[0 1 22 0 22 0 24 0 36] -#[0 1 26 0 22 0 24 0 34 0 36 0 42] -#[1 0 150 0 11 0 150 0 22 0 150 0 24 0 150 0 34 0 150 0 36 2 145 0 72] -#[1 0 170 0 22 0 170 0 24 0 170 0 36 2 149 0 86] -#[1 0 118 0 22 0 118 0 24 1 1 0 34 0 118 0 36 1 9 0 42 2 153 0 85 2 157 0 93 2 153 0 94] -#[1 0 118 0 22 0 118 0 24 1 1 0 34 0 118 0 36 2 161 0 85 2 161 0 94] -#[0 2 165 0 2] -#[1 2 169 0 22 2 173 0 24 0 69 0 36 2 181 0 57 2 181 0 91 2 181 0 95] -#[1 0 170 0 22 0 170 0 24 0 170 0 36 2 189 0 86] -#[1 0 118 0 22 0 118 0 24 1 1 0 34 0 118 0 36 2 193 0 85 2 193 0 94] -#[1 0 170 0 22 0 170 0 24 0 170 0 36 2 197 0 86] -#[1 0 118 0 22 0 118 0 24 1 1 0 34 0 118 0 36 1 5 0 41 1 9 0 42 2 201 0 85 2 205 0 92 2 209 0 93 2 201 0 94] -#[1 0 170 0 22 0 170 0 24 0 170 0 36 2 213 0 86] -#[1 0 118 0 22 0 118 0 24 1 1 0 34 0 118 0 36 1 9 0 42 2 217 0 85 2 221 0 93 2 217 0 94] -#[1 0 118 0 22 0 118 0 24 1 1 0 34 0 118 0 36 2 225 0 85 2 225 0 94] -#[0 1 30 0 22 0 28 0 30 0 32 0 35 0 36 0 38 0 39 0 40 0 43 0 44 0 45 0 151] -#[0 2 229 0 10] -#[1 1 34 0 10 2 233 0 44 2 233 0 45 2 233 0 150] -#[0 1 38 0 10 0 11 0 22 0 24 0 34 0 36] -#[0 1 42 0 3 0 11] -#[0 1 46 0 10 0 44 0 45] -#[1 0 74 0 7 2 253 0 44 2 253 0 45 2 237 0 46 2 241 0 47 2 245 0 61 2 245 0 75 0 205 0 76 2 253 0 150] -#[1 1 50 0 30 1 50 0 35 1 50 0 44 3 1 0 80 1 50 0 151] -#[0 3 5 0 3] -#[0 3 9 0 8] -#[1 3 17 0 44 3 17 0 45 3 13 0 149 3 17 0 150] -#[0 1 54 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 26 0 44 0 45 0 47] -#[1 0 166 0 6 2 49 0 44 2 53 0 47 3 21 0 137 3 21 0 138 1 177 0 139 3 21 0 144] -#[1 1 58 0 3 1 58 0 4 1 58 0 5 1 58 0 6 1 58 0 7 1 58 0 8 2 37 0 12 1 58 0 15 1 58 0 16 1 58 0 19 1 58 0 20 1 58 0 21 1 58 0 23 1 58 0 26 1 58 0 44 1 58 0 45 1 58 0 47 3 25 0 146] -#[1 1 62 0 3 1 62 0 4 1 62 0 5 1 62 0 6 1 62 0 7 1 62 0 8 2 37 0 12 2 77 0 14 1 62 0 15 1 62 0 16 1 62 0 19 1 62 0 20 1 62 0 21 1 62 0 23 1 62 0 26 1 62 0 44 1 62 0 45 1 62 0 47 3 29 0 146] -#[0 1 66 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 23 0 26 0 44 0 45 0 47] -#[0 1 70 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 23 0 26 0 44 0 45 0 47] -#[0 1 74 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 23 0 26 0 44 0 45 0 47] -#[0 1 78 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 23 0 26 0 44 0 45 0 47] -#[0 1 82 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 23 0 26 0 44 0 45 0 47] -#[0 3 33 0 47] -#[0 1 86 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 23 0 26 0 44 0 45 0 47] -#[0 1 90 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 26 0 44 0 45 0 47] -#[0 1 94 0 30 0 35 0 38 0 39 0 40 0 44 0 45 0 151] -#[1 1 98 0 3 3 37 0 4 1 98 0 8 3 41 0 107] -#[1 3 45 0 35 3 57 0 44 3 57 0 45 3 49 0 118 3 53 0 119 3 57 0 150] -#[0 1 102 0 3 0 4 0 8] -#[0 1 106 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 26 0 44 0 45 0 47] -#[1 1 110 0 3 1 110 0 4 1 110 0 5 1 110 0 6 1 110 0 7 1 110 0 8 1 110 0 15 1 110 0 16 3 61 0 19 1 110 0 23 1 110 0 26 1 110 0 44 1 110 0 45 1 110 0 47] -#[1 1 114 0 3 1 114 0 4 1 114 0 5 1 114 0 6 1 114 0 7 1 114 0 8 1 114 0 15 1 114 0 16 3 65 0 19 1 114 0 23 1 114 0 26 1 114 0 44 1 114 0 45 1 114 0 47] -#[1 1 118 0 3 1 118 0 4 1 118 0 5 1 118 0 6 1 118 0 7 1 118 0 8 1 118 0 15 1 118 0 16 3 69 0 19 1 118 0 23 1 118 0 26 1 118 0 44 1 118 0 45 1 118 0 47] -#[0 1 122 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 26 0 44 0 45 0 47] -#[0 1 126 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 26 0 44 0 45 0 47] -#[0 1 130 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 26 0 44 0 45 0 47] -#[0 3 73 0 48] -#[1 1 109 0 5 0 166 0 6 1 113 0 15 1 117 0 16 3 77 0 44 1 125 0 47 3 81 0 114 3 85 0 131 3 85 0 133 3 85 0 138 1 177 0 139 3 85 0 144 3 85 0 145] -#[1 1 109 0 5 0 166 0 6 1 113 0 15 1 117 0 16 3 77 0 44 1 125 0 47 3 89 0 114 3 93 0 131 3 93 0 133 3 93 0 138 1 177 0 139 3 93 0 144 3 93 0 145] -#[1 3 97 0 11 1 134 0 22 1 134 0 24 1 134 0 34 1 134 0 36 2 9 0 71] -#[1 2 169 0 22 3 101 0 24 0 69 0 36 2 181 0 57 2 181 0 91 2 181 0 95] -#[1 0 170 0 22 0 170 0 24 0 170 0 36 3 105 0 86] -#[1 0 118 0 22 0 118 0 24 1 1 0 34 0 118 0 36 3 109 0 85 3 109 0 94] -#[1 0 170 0 22 0 170 0 24 0 170 0 36 3 113 0 86] -#[0 3 117 0 9] -#[0 3 121 0 44 0 45 0 150] -#[1 1 138 0 3 1 138 0 4 3 125 0 5 0 74 0 7 2 37 0 12 3 129 0 15 1 117 0 16 1 138 0 23 1 121 0 44 3 133 0 45 3 137 0 47 3 141 0 75 0 205 0 76 3 145 0 99 3 149 0 100 3 153 0 103 3 157 0 124 3 161 0 125 3 165 0 126 3 169 0 127 3 165 0 128 3 177 0 132 3 177 0 133 3 185 0 141 3 177 0 143 3 177 0 145 3 197 0 146 3 201 0 150] -#[0 1 142 0 22 0 24 0 36] -#[0 1 146 0 22 0 24 0 36] -#[0 1 150 0 22 0 24 0 36] -#[1 2 169 0 22 3 205 0 24 0 69 0 36 2 181 0 57 2 181 0 91 2 181 0 95] -#[1 0 170 0 22 0 170 0 24 0 170 0 36 3 209 0 86] -#[1 2 169 0 22 3 213 0 24 0 69 0 36 2 181 0 57 2 181 0 91 2 181 0 95] -#[1 0 170 0 22 0 170 0 24 0 170 0 36 3 217 0 86] -#[1 0 118 0 22 0 118 0 24 1 1 0 34 0 118 0 36 1 9 0 42 3 221 0 85 3 225 0 93 3 221 0 94] -#[1 0 118 0 22 0 118 0 24 1 1 0 34 0 118 0 36 3 229 0 85 3 229 0 94] -#[1 2 169 0 22 3 233 0 24 0 69 0 36 2 181 0 57 2 181 0 91 2 181 0 95] -#[1 0 170 0 22 0 170 0 24 0 170 0 36 3 237 0 86] -#[1 0 118 0 22 0 118 0 24 1 1 0 34 0 118 0 36 3 241 0 85 3 241 0 94] -#[1 0 170 0 22 0 170 0 24 0 170 0 36 3 245 0 86] -#[0 1 154 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 19 0 22 0 23 0 24 0 26 0 27 0 28 0 29 0 30 0 32 0 35 0 36 0 38 0 39 0 40 0 43 0 44 0 45 0 47 0 151] -#[0 1 158 0 10 0 11 0 22 0 24 0 34 0 36] -#[0 1 162 0 3] -#[0 1 166 0 3] -#[0 1 170 0 3] -#[0 1 174 0 3] -#[1 1 178 0 3 1 178 0 15 3 249 0 63] -#[1 3 253 0 30 1 182 0 35 0 165 0 44 4 1 0 104 1 182 0 151] -#[0 1 186 0 30 0 35 0 38 0 39 0 40 0 44 0 45 0 151] -#[0 1 190 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 26 0 44 0 45 0 47] -#[1 1 194 0 11 1 194 0 13 4 5 0 148] -#[1 1 198 0 11 1 198 0 13 4 9 0 17] -#[1 1 202 0 4 1 202 0 8 4 13 0 136] -#[0 1 206 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 23 0 26 0 44 0 45 0 47] -#[0 1 210 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 23 0 26 0 44 0 45 0 47] -#[0 1 214 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 23 0 26 0 44 0 45 0 47] -#[1 0 162 0 3 0 162 0 4 1 109 0 5 0 166 0 6 0 74 0 7 0 162 0 8 1 113 0 15 1 117 0 16 1 121 0 44 1 189 0 45 1 125 0 47 1 129 0 75 0 205 0 76 4 17 0 109 1 145 0 110 1 149 0 111 1 153 0 112 1 157 0 113 1 161 0 114 1 165 0 131 1 165 0 133 1 165 0 138 1 177 0 139 1 165 0 144 1 165 0 145 1 189 0 150] -#[0 1 218 0 3 0 4 0 8] -#[0 1 222 0 3 0 4 0 5 0 8 0 11] -#[1 1 226 0 3 1 226 0 4 1 226 0 8 1 226 0 11 4 21 0 117] -#[1 1 230 0 3 1 230 0 4 4 25 0 5 1 230 0 8 1 230 0 11] -#[0 1 234 0 3 0 4 0 5 0 8 0 11] -#[0 1 238 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 23 0 26 0 44 0 45 0 47] -#[0 1 242 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 23 0 26 0 44 0 45 0 47] -#[0 1 246 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 23 0 26 0 44 0 45 0 47] -#[1 1 250 0 9 4 29 0 140] -#[1 0 218 0 3 0 218 0 4 0 218 0 5 0 218 0 6 0 218 0 7 0 218 0 8 2 37 0 12 0 218 0 15 0 218 0 16 0 218 0 19 0 218 0 20 0 218 0 21 0 218 0 23 0 218 0 26 0 218 0 44 0 218 0 45 0 218 0 47 2 73 0 146] -#[0 1 254 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 26 0 44 0 45 0 47] -#[0 2 2 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 26 0 44 0 45 0 47] -#[0 2 6 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 26 0 44 0 45 0 47] -#[0 2 10 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 26 0 44 0 45 0 47] -#[0 2 233 0 44 0 45 0 150] -#[1 1 138 0 3 1 138 0 4 3 125 0 5 0 74 0 7 2 37 0 12 3 129 0 15 1 117 0 16 1 138 0 23 1 121 0 44 3 133 0 45 3 137 0 47 3 141 0 75 0 205 0 76 4 33 0 99 3 149 0 100 3 153 0 103 3 157 0 124 3 161 0 125 3 165 0 126 3 169 0 127 3 165 0 128 3 177 0 132 3 177 0 133 3 185 0 141 3 177 0 143 3 177 0 145 3 197 0 146 3 201 0 150] -#[1 2 169 0 22 4 37 0 24 0 69 0 36 2 181 0 57 2 181 0 91 2 181 0 95] -#[1 0 170 0 22 0 170 0 24 0 170 0 36 4 41 0 86] -#[1 2 169 0 22 4 45 0 24 0 69 0 36 2 181 0 57 2 181 0 91 2 181 0 95] -#[0 2 14 0 3 0 4 0 5 0 7 0 8 0 12 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 34 0 36 0 41 0 42 0 44 0 45 0 47] -#[1 0 74 0 7 4 49 0 75 0 205 0 76] -#[1 1 138 0 4 3 125 0 5 0 74 0 7 1 138 0 8 2 37 0 12 3 129 0 15 1 117 0 16 2 18 0 22 2 18 0 24 0 69 0 36 1 121 0 44 3 133 0 45 3 137 0 47 4 53 0 57 3 141 0 75 0 205 0 76 4 57 0 121 4 61 0 124 3 161 0 125 3 165 0 126 3 169 0 127 3 165 0 128 3 177 0 132 3 177 0 133 3 185 0 141 4 65 0 142 3 177 0 143 3 177 0 145 3 197 0 146 3 201 0 150] -#[1 2 22 0 3 2 22 0 4 2 22 0 5 2 22 0 7 2 22 0 8 2 37 0 12 2 22 0 15 2 22 0 16 2 22 0 19 2 22 0 20 2 22 0 21 2 22 0 23 2 22 0 44 2 22 0 45 2 22 0 47 4 69 0 146] -#[1 2 26 0 3 2 26 0 4 2 26 0 5 0 114 0 6 2 26 0 7 2 26 0 8 2 37 0 12 2 26 0 15 2 26 0 16 0 22 0 17 0 22 0 18 2 26 0 19 2 26 0 20 2 26 0 21 2 26 0 23 2 26 0 44 2 26 0 45 2 26 0 47 4 73 0 77 1 17 0 78 4 77 0 146] -#[1 0 222 0 3 0 222 0 4 0 222 0 5 0 222 0 7 0 222 0 8 2 37 0 12 0 222 0 15 0 222 0 16 0 222 0 19 0 222 0 20 0 222 0 21 0 222 0 23 0 222 0 44 0 222 0 45 0 222 0 47 2 81 0 146] -#[1 2 30 0 3 2 30 0 4 2 30 0 5 2 30 0 7 2 30 0 8 2 30 0 15 2 30 0 16 4 81 0 19 2 30 0 23 2 30 0 44 2 30 0 45 2 30 0 47] -#[0 4 85 0 3] -#[0 2 34 0 3] -#[1 2 38 0 3 2 38 0 4 4 89 0 102] -#[1 2 42 0 3 2 42 0 4 4 93 0 23] -#[1 2 46 0 3 2 46 0 4 3 125 0 5 0 74 0 7 2 46 0 8 3 129 0 15 1 117 0 16 2 46 0 23 1 121 0 44 3 133 0 45 3 137 0 47 3 141 0 75 0 205 0 76 4 97 0 126 3 169 0 127 4 97 0 128 3 177 0 132 3 177 0 133 3 185 0 141 3 177 0 143 3 177 0 145 3 201 0 150] -#[0 2 50 0 3 0 4 0 5 0 7 0 8 0 15 0 16 0 23 0 44 0 45 0 47] -#[1 2 54 0 3 2 54 0 4 2 54 0 5 2 54 0 7 2 54 0 8 2 54 0 15 2 54 0 16 2 109 0 19 2 113 0 20 2 117 0 21 2 54 0 23 2 54 0 44 2 54 0 45 2 54 0 47 4 101 0 130] -#[0 2 58 0 3 0 4 0 5 0 7 0 8 0 15 0 16 0 23 0 44 0 45 0 47] -#[1 2 62 0 3 2 62 0 4 2 62 0 5 2 62 0 7 2 62 0 8 2 62 0 15 2 62 0 16 2 109 0 19 2 113 0 20 2 117 0 21 2 62 0 23 2 62 0 44 2 62 0 45 2 62 0 47 4 105 0 130] -#[0 2 66 0 3 0 4 0 5 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 23 0 44 0 45 0 47] -#[1 2 70 0 3 2 70 0 4 2 70 0 5 2 70 0 7 2 70 0 8 2 70 0 15 2 70 0 16 2 109 0 19 2 113 0 20 2 117 0 21 2 70 0 23 2 70 0 44 2 70 0 45 2 70 0 47 4 109 0 129 4 109 0 130] -#[0 2 74 0 3 0 4 0 5 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 23 0 44 0 45 0 47] -#[0 2 78 0 3 0 4 0 5 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 23 0 44 0 45 0 47] -#[1 3 125 0 5 0 74 0 7 3 129 0 15 1 117 0 16 1 121 0 44 3 133 0 45 3 137 0 47 3 141 0 75 0 205 0 76 4 117 0 125 3 165 0 126 3 169 0 127 3 165 0 128 3 177 0 132 3 177 0 133 3 185 0 141 3 177 0 143 3 177 0 145 3 201 0 150] -#[1 4 121 0 17 4 125 0 18] -#[1 1 138 0 3 1 138 0 4 3 125 0 5 0 74 0 7 2 37 0 12 3 129 0 15 1 117 0 16 1 138 0 23 1 121 0 44 3 133 0 45 3 137 0 47 3 141 0 75 0 205 0 76 4 129 0 99 3 149 0 100 3 153 0 103 3 157 0 124 3 161 0 125 3 165 0 126 3 169 0 127 3 165 0 128 3 177 0 132 3 177 0 133 3 185 0 141 3 177 0 143 3 177 0 145 3 197 0 146 3 201 0 150] -#[1 2 169 0 22 4 133 0 24 0 69 0 36 2 181 0 57 2 181 0 91 2 181 0 95] -#[1 1 138 0 3 1 138 0 4 3 125 0 5 0 74 0 7 2 37 0 12 3 129 0 15 1 117 0 16 1 138 0 23 1 121 0 44 3 133 0 45 3 137 0 47 3 141 0 75 0 205 0 76 4 137 0 99 3 149 0 100 3 153 0 103 3 157 0 124 3 161 0 125 3 165 0 126 3 169 0 127 3 165 0 128 3 177 0 132 3 177 0 133 3 185 0 141 3 177 0 143 3 177 0 145 3 197 0 146 3 201 0 150] -#[1 2 169 0 22 4 141 0 24 0 69 0 36 2 181 0 57 2 181 0 91 2 181 0 95] -#[1 0 170 0 22 0 170 0 24 0 170 0 36 4 145 0 86] -#[1 0 118 0 22 0 118 0 24 1 1 0 34 0 118 0 36 4 149 0 85 4 149 0 94] -#[1 0 170 0 22 0 170 0 24 0 170 0 36 4 153 0 86] -#[1 1 138 0 3 1 138 0 4 3 125 0 5 0 74 0 7 2 37 0 12 3 129 0 15 1 117 0 16 1 138 0 23 1 121 0 44 3 133 0 45 3 137 0 47 3 141 0 75 0 205 0 76 4 157 0 99 3 149 0 100 3 153 0 103 3 157 0 124 3 161 0 125 3 165 0 126 3 169 0 127 3 165 0 128 3 177 0 132 3 177 0 133 3 185 0 141 3 177 0 143 3 177 0 145 3 197 0 146 3 201 0 150] -#[1 2 169 0 22 4 161 0 24 0 69 0 36 2 181 0 57 2 181 0 91 2 181 0 95] -#[1 0 170 0 22 0 170 0 24 0 170 0 36 4 165 0 86] -#[1 2 169 0 22 4 169 0 24 0 69 0 36 2 181 0 57 2 181 0 91 2 181 0 95] -#[1 2 82 0 3 4 173 0 15 4 177 0 62] -#[0 0 249 0 44] -#[0 2 86 0 30 0 35 0 44 0 151] -#[1 4 181 0 11 4 185 0 13 4 189 0 147] -#[1 4 197 0 44 4 197 0 45 4 193 0 47 4 197 0 150] -#[1 4 201 0 4 4 205 0 8 4 209 0 135] -#[0 2 90 0 3 0 4 0 8] -#[1 2 94 0 3 2 94 0 4 2 94 0 8 4 213 0 11 4 217 0 116] -#[1 4 229 0 44 4 229 0 45 4 221 0 46 4 225 0 120 4 229 0 150] -#[0 4 233 0 9] -#[0 4 237 0 3] -#[1 1 138 0 3 1 138 0 4 3 125 0 5 0 74 0 7 2 37 0 12 3 129 0 15 1 117 0 16 1 138 0 23 1 121 0 44 3 133 0 45 3 137 0 47 3 141 0 75 0 205 0 76 4 241 0 99 3 149 0 100 3 153 0 103 3 157 0 124 3 161 0 125 3 165 0 126 3 169 0 127 3 165 0 128 3 177 0 132 3 177 0 133 3 185 0 141 3 177 0 143 3 177 0 145 3 197 0 146 3 201 0 150] -#[1 2 169 0 22 4 245 0 24 0 69 0 36 2 181 0 57 2 181 0 91 2 181 0 95] -#[1 1 138 0 3 1 138 0 4 3 125 0 5 0 74 0 7 2 37 0 12 3 129 0 15 1 117 0 16 1 138 0 23 1 121 0 44 3 133 0 45 3 137 0 47 3 141 0 75 0 205 0 76 4 249 0 99 3 149 0 100 3 153 0 103 3 157 0 124 3 161 0 125 3 165 0 126 3 169 0 127 3 165 0 128 3 177 0 132 3 177 0 133 3 185 0 141 3 177 0 143 3 177 0 145 3 197 0 146 3 201 0 150] -#[0 2 98 0 22 0 24 0 36] -#[1 2 18 0 22 2 18 0 24 4 253 0 142] -#[0 5 1 0 8] -#[1 2 102 0 4 2 102 0 8 5 5 0 123] -#[1 2 169 0 22 5 9 0 24 5 13 0 95] -#[0 2 106 0 3 0 4 0 5 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 23 0 44 0 45 0 47] -#[1 2 110 0 3 2 110 0 4 2 110 0 5 2 110 0 7 2 110 0 8 2 37 0 12 2 110 0 15 2 110 0 16 2 110 0 19 2 110 0 20 2 110 0 21 2 110 0 23 2 110 0 44 2 110 0 45 2 110 0 47 5 17 0 146] -#[0 2 114 0 3 0 4 0 5 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 23 0 44 0 45 0 47] -#[0 2 118 0 3 0 4 0 5 0 7 0 8 0 15 0 16 0 23 0 44 0 45 0 47] -#[1 2 122 0 27 2 122 0 29 2 122 0 30 2 122 0 35 2 122 0 38 2 122 0 39 2 122 0 40 2 122 0 44 2 122 0 45 5 21 0 87 5 25 0 88 2 122 0 151] -#[1 2 126 0 3 5 29 0 4 5 33 0 101] -#[0 5 37 0 44 0 45 0 150] -#[0 2 130 0 3 0 4 0 5 0 7 0 8 0 15 0 16 0 23 0 44 0 45 0 47] -#[0 2 134 0 3 0 4 0 5 0 7 0 8 0 15 0 16 0 23 0 44 0 45 0 47] -#[0 2 138 0 3 0 4 0 5 0 7 0 8 0 15 0 16 0 23 0 44 0 45 0 47] -#[0 2 142 0 3 0 4 0 5 0 7 0 8 0 15 0 16 0 23 0 44 0 45 0 47] -#[0 2 146 0 3 0 4 0 5 0 7 0 8 0 15 0 16 0 23 0 44 0 45 0 47] -#[1 2 150 0 3 2 150 0 4 3 125 0 5 0 74 0 7 2 150 0 8 3 129 0 15 1 117 0 16 2 150 0 23 1 121 0 44 3 133 0 45 3 137 0 47 3 141 0 75 0 205 0 76 4 97 0 126 3 169 0 127 4 97 0 128 3 177 0 132 3 177 0 133 3 185 0 141 3 177 0 143 3 177 0 145 3 201 0 150] -#[1 3 125 0 5 3 129 0 15 1 117 0 16 3 77 0 44 5 41 0 45 3 137 0 47 5 45 0 132 5 45 0 133 5 49 0 141 5 45 0 143 5 45 0 145] -#[1 3 125 0 5 3 129 0 15 1 117 0 16 3 77 0 44 5 41 0 45 3 137 0 47 5 53 0 132 5 53 0 133 5 57 0 141 5 53 0 143 5 53 0 145] -#[0 5 61 0 3] -#[1 1 138 0 3 1 138 0 4 3 125 0 5 0 74 0 7 2 37 0 12 3 129 0 15 1 117 0 16 1 138 0 23 1 121 0 44 3 133 0 45 3 137 0 47 3 141 0 75 0 205 0 76 5 65 0 99 3 149 0 100 3 153 0 103 3 157 0 124 3 161 0 125 3 165 0 126 3 169 0 127 3 165 0 128 3 177 0 132 3 177 0 133 3 185 0 141 3 177 0 143 3 177 0 145 3 197 0 146 3 201 0 150] -#[0 5 69 0 3] -#[1 1 138 0 3 1 138 0 4 3 125 0 5 0 74 0 7 2 37 0 12 3 129 0 15 1 117 0 16 1 138 0 23 1 121 0 44 3 133 0 45 3 137 0 47 3 141 0 75 0 205 0 76 5 73 0 99 3 149 0 100 3 153 0 103 3 157 0 124 3 161 0 125 3 165 0 126 3 169 0 127 3 165 0 128 3 177 0 132 3 177 0 133 3 185 0 141 3 177 0 143 3 177 0 145 3 197 0 146 3 201 0 150] -#[1 2 169 0 22 5 77 0 24 0 69 0 36 2 181 0 57 2 181 0 91 2 181 0 95] -#[1 0 170 0 22 0 170 0 24 0 170 0 36 5 81 0 86] -#[1 2 169 0 22 5 85 0 24 0 69 0 36 2 181 0 57 2 181 0 91 2 181 0 95] -#[0 5 89 0 3] -#[1 1 138 0 3 1 138 0 4 3 125 0 5 0 74 0 7 2 37 0 12 3 129 0 15 1 117 0 16 1 138 0 23 1 121 0 44 3 133 0 45 3 137 0 47 3 141 0 75 0 205 0 76 5 93 0 99 3 149 0 100 3 153 0 103 3 157 0 124 3 161 0 125 3 165 0 126 3 169 0 127 3 165 0 128 3 177 0 132 3 177 0 133 3 185 0 141 3 177 0 143 3 177 0 145 3 197 0 146 3 201 0 150] -#[1 2 169 0 22 5 97 0 24 0 69 0 36 2 181 0 57 2 181 0 91 2 181 0 95] -#[1 1 138 0 3 1 138 0 4 3 125 0 5 0 74 0 7 2 37 0 12 3 129 0 15 1 117 0 16 1 138 0 23 1 121 0 44 3 133 0 45 3 137 0 47 3 141 0 75 0 205 0 76 5 101 0 99 3 149 0 100 3 153 0 103 3 157 0 124 3 161 0 125 3 165 0 126 3 169 0 127 3 165 0 128 3 177 0 132 3 177 0 133 3 185 0 141 3 177 0 143 3 177 0 145 3 197 0 146 3 201 0 150] -#[0 5 105 0 44 0 45 0 150] -#[0 2 154 0 3 0 15] -#[1 3 17 0 44 3 17 0 45 5 109 0 149 3 17 0 150] -#[0 2 158 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 23 0 26 0 44 0 45 0 47] -#[0 2 162 0 11 0 13] -#[0 2 166 0 11 0 13] -#[0 2 170 0 11 0 13] -#[1 0 166 0 6 2 49 0 44 2 53 0 47 5 113 0 137 5 113 0 138 1 177 0 139 5 113 0 144] -#[0 2 174 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 23 0 26 0 44 0 45 0 47] -#[0 2 178 0 4 0 8] -#[1 3 45 0 35 3 57 0 44 3 57 0 45 5 117 0 118 3 53 0 119 3 57 0 150] -#[0 2 182 0 3 0 4 0 8 0 11] -#[0 2 186 0 8] -#[0 5 121 0 8] -#[0 2 190 0 8] -#[0 2 194 0 3 0 4 0 5 0 6 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 23 0 26 0 44 0 45 0 47] -#[1 2 122 0 27 2 122 0 29 2 122 0 30 2 122 0 35 2 122 0 38 2 122 0 39 2 122 0 40 2 122 0 44 2 122 0 45 5 125 0 87 5 25 0 88 2 122 0 151] -#[0 5 129 0 3] -#[1 1 138 0 3 1 138 0 4 3 125 0 5 0 74 0 7 2 37 0 12 3 129 0 15 1 117 0 16 1 138 0 23 1 121 0 44 3 133 0 45 3 137 0 47 3 141 0 75 0 205 0 76 5 133 0 99 3 149 0 100 3 153 0 103 3 157 0 124 3 161 0 125 3 165 0 126 3 169 0 127 3 165 0 128 3 177 0 132 3 177 0 133 3 185 0 141 3 177 0 143 3 177 0 145 3 197 0 146 3 201 0 150] -#[0 5 137 0 3] -#[1 2 169 0 22 5 141 0 24 5 13 0 95] -#[0 2 198 0 3 0 4 0 5 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 23 0 44 0 45 0 47] -#[1 5 145 0 4 2 202 0 8 5 149 0 122] -#[1 1 138 0 4 3 125 0 5 0 74 0 7 1 138 0 8 2 37 0 12 3 129 0 15 1 117 0 16 1 121 0 44 3 133 0 45 3 137 0 47 3 141 0 75 0 205 0 76 5 153 0 121 4 61 0 124 3 161 0 125 3 165 0 126 3 169 0 127 3 165 0 128 3 177 0 132 3 177 0 133 3 185 0 141 3 177 0 143 3 177 0 145 3 197 0 146 3 201 0 150] -#[0 2 206 0 22 0 24] -#[0 2 210 0 3 0 4 0 5 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 23 0 44 0 45 0 47] -#[0 2 214 0 30 0 35 0 38 0 39 0 40 0 44 0 45 0 151] -#[1 5 157 0 27 5 161 0 29 2 218 0 30 2 218 0 35 2 218 0 38 2 218 0 39 2 218 0 40 2 218 0 44 2 218 0 45 5 165 0 89 5 169 0 90 2 218 0 151] -#[1 1 138 0 3 1 138 0 4 3 125 0 5 0 74 0 7 2 37 0 12 3 129 0 15 1 117 0 16 1 138 0 23 1 121 0 44 3 133 0 45 3 137 0 47 3 141 0 75 0 205 0 76 5 173 0 103 3 157 0 124 3 161 0 125 3 165 0 126 3 169 0 127 3 165 0 128 3 177 0 132 3 177 0 133 3 185 0 141 3 177 0 143 3 177 0 145 3 197 0 146 3 201 0 150] -#[0 2 222 0 3 0 4] -#[0 2 226 0 3 0 4] -#[1 2 26 0 3 2 26 0 4 2 26 0 5 0 114 0 6 2 26 0 7 2 26 0 8 2 37 0 12 2 26 0 15 2 26 0 16 2 26 0 19 2 26 0 20 2 26 0 21 2 26 0 23 2 26 0 44 2 26 0 45 2 26 0 47 4 73 0 77 1 17 0 78 4 77 0 146] -#[0 2 230 0 3 0 4 0 5 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 23 0 44 0 45 0 47] -#[0 2 234 0 3 0 4 0 5 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 23 0 44 0 45 0 47] -#[0 2 238 0 3 0 4 0 5 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 23 0 44 0 45 0 47] -#[0 2 242 0 3 0 4 0 5 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 23 0 44 0 45 0 47] -#[1 2 122 0 27 2 122 0 29 2 122 0 30 2 122 0 35 2 122 0 38 2 122 0 39 2 122 0 40 2 122 0 44 2 122 0 45 5 177 0 87 5 25 0 88 2 122 0 151] -#[0 5 181 0 3] -#[1 2 122 0 27 2 122 0 29 2 122 0 30 2 122 0 35 2 122 0 38 2 122 0 39 2 122 0 40 2 122 0 44 2 122 0 45 5 185 0 87 5 25 0 88 2 122 0 151] -#[0 5 189 0 3] -#[1 1 138 0 3 1 138 0 4 3 125 0 5 0 74 0 7 2 37 0 12 3 129 0 15 1 117 0 16 1 138 0 23 1 121 0 44 3 133 0 45 3 137 0 47 3 141 0 75 0 205 0 76 5 193 0 99 3 149 0 100 3 153 0 103 3 157 0 124 3 161 0 125 3 165 0 126 3 169 0 127 3 165 0 128 3 177 0 132 3 177 0 133 3 185 0 141 3 177 0 143 3 177 0 145 3 197 0 146 3 201 0 150] -#[1 2 169 0 22 5 197 0 24 0 69 0 36 2 181 0 57 2 181 0 91 2 181 0 95] -#[1 1 138 0 3 1 138 0 4 3 125 0 5 0 74 0 7 2 37 0 12 3 129 0 15 1 117 0 16 1 138 0 23 1 121 0 44 3 133 0 45 3 137 0 47 3 141 0 75 0 205 0 76 5 201 0 99 3 149 0 100 3 153 0 103 3 157 0 124 3 161 0 125 3 165 0 126 3 169 0 127 3 165 0 128 3 177 0 132 3 177 0 133 3 185 0 141 3 177 0 143 3 177 0 145 3 197 0 146 3 201 0 150] -#[1 2 122 0 27 2 122 0 29 2 122 0 30 2 122 0 35 2 122 0 38 2 122 0 39 2 122 0 40 2 122 0 44 2 122 0 45 5 205 0 87 5 25 0 88 2 122 0 151] -#[0 5 209 0 3] -#[1 1 138 0 3 1 138 0 4 3 125 0 5 0 74 0 7 2 37 0 12 3 129 0 15 1 117 0 16 1 138 0 23 1 121 0 44 3 133 0 45 3 137 0 47 3 141 0 75 0 205 0 76 5 213 0 99 3 149 0 100 3 153 0 103 3 157 0 124 3 161 0 125 3 165 0 126 3 169 0 127 3 165 0 128 3 177 0 132 3 177 0 133 3 185 0 141 3 177 0 143 3 177 0 145 3 197 0 146 3 201 0 150] -#[0 5 217 0 3] -#[0 2 246 0 3 0 15] -#[0 2 250 0 11 0 13] -#[0 2 254 0 4 0 8] -#[0 3 2 0 3 0 4 0 8 0 11] -#[0 3 6 0 3 0 4 0 8 0 11] -#[0 3 10 0 30 0 35 0 38 0 39 0 40 0 44 0 45 0 151] -#[1 2 122 0 27 2 122 0 29 2 122 0 30 2 122 0 35 2 122 0 38 2 122 0 39 2 122 0 40 2 122 0 44 2 122 0 45 5 221 0 87 5 25 0 88 2 122 0 151] -#[0 5 225 0 3] -#[1 2 122 0 27 2 122 0 29 2 122 0 30 2 122 0 35 2 122 0 38 2 122 0 39 2 122 0 40 2 122 0 44 2 122 0 45 5 229 0 87 5 25 0 88 2 122 0 151] -#[1 1 138 0 4 3 125 0 5 0 74 0 7 1 138 0 8 2 37 0 12 3 129 0 15 1 117 0 16 1 121 0 44 3 133 0 45 3 137 0 47 3 141 0 75 0 205 0 76 5 233 0 121 4 61 0 124 3 161 0 125 3 165 0 126 3 169 0 127 3 165 0 128 3 177 0 132 3 177 0 133 3 185 0 141 3 177 0 143 3 177 0 145 3 197 0 146 3 201 0 150] -#[1 1 138 0 4 3 125 0 5 0 74 0 7 1 138 0 8 2 37 0 12 3 129 0 15 1 117 0 16 1 121 0 44 3 133 0 45 3 137 0 47 3 141 0 75 0 205 0 76 5 237 0 124 3 161 0 125 3 165 0 126 3 169 0 127 3 165 0 128 3 177 0 132 3 177 0 133 3 185 0 141 3 177 0 143 3 177 0 145 3 197 0 146 3 201 0 150] -#[0 3 14 0 4 0 8] -#[0 5 241 0 8] -#[1 0 114 0 6 5 245 0 77 1 17 0 78] -#[1 0 74 0 7 5 249 0 75 0 205 0 76] -#[0 3 18 0 27 0 29 0 30 0 35 0 38 0 39 0 40 0 44 0 45 0 151] -#[0 3 22 0 30 0 35 0 38 0 39 0 40 0 44 0 45 0 151] -#[0 3 26 0 3 0 4] -#[0 3 30 0 30 0 35 0 38 0 39 0 40 0 44 0 45 0 151] -#[1 2 122 0 27 2 122 0 29 2 122 0 30 2 122 0 35 2 122 0 38 2 122 0 39 2 122 0 40 2 122 0 44 2 122 0 45 5 253 0 87 5 25 0 88 2 122 0 151] -#[0 3 34 0 30 0 35 0 38 0 39 0 40 0 44 0 45 0 151] -#[1 2 122 0 27 2 122 0 29 2 122 0 30 2 122 0 35 2 122 0 38 2 122 0 39 2 122 0 40 2 122 0 44 2 122 0 45 6 1 0 87 5 25 0 88 2 122 0 151] -#[0 6 5 0 3] -#[1 1 138 0 3 1 138 0 4 3 125 0 5 0 74 0 7 2 37 0 12 3 129 0 15 1 117 0 16 1 138 0 23 1 121 0 44 3 133 0 45 3 137 0 47 3 141 0 75 0 205 0 76 6 9 0 99 3 149 0 100 3 153 0 103 3 157 0 124 3 161 0 125 3 165 0 126 3 169 0 127 3 165 0 128 3 177 0 132 3 177 0 133 3 185 0 141 3 177 0 143 3 177 0 145 3 197 0 146 3 201 0 150] -#[0 6 13 0 3] -#[0 3 38 0 30 0 35 0 38 0 39 0 40 0 44 0 45 0 151] -#[1 2 122 0 27 2 122 0 29 2 122 0 30 2 122 0 35 2 122 0 38 2 122 0 39 2 122 0 40 2 122 0 44 2 122 0 45 6 17 0 87 5 25 0 88 2 122 0 151] -#[0 6 21 0 3] -#[1 2 122 0 27 2 122 0 29 2 122 0 30 2 122 0 35 2 122 0 38 2 122 0 39 2 122 0 40 2 122 0 44 2 122 0 45 6 25 0 87 5 25 0 88 2 122 0 151] -#[0 3 42 0 30 0 35 0 38 0 39 0 40 0 44 0 45 0 151] -#[1 2 122 0 27 2 122 0 29 2 122 0 30 2 122 0 35 2 122 0 38 2 122 0 39 2 122 0 40 2 122 0 44 2 122 0 45 6 29 0 87 5 25 0 88 2 122 0 151] -#[0 3 46 0 30 0 35 0 38 0 39 0 40 0 44 0 45 0 151] -#[0 6 33 0 8] -#[0 3 50 0 4 0 8] -#[0 3 54 0 3 0 4 0 5 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 23 0 44 0 45 0 47] -#[1 0 74 0 7 6 37 0 75 0 205 0 76] -#[0 3 58 0 30 0 35 0 38 0 39 0 40 0 44 0 45 0 151] -#[0 3 62 0 30 0 35 0 38 0 39 0 40 0 44 0 45 0 151] -#[0 3 66 0 30 0 35 0 38 0 39 0 40 0 44 0 45 0 151] -#[1 2 122 0 27 2 122 0 29 2 122 0 30 2 122 0 35 2 122 0 38 2 122 0 39 2 122 0 40 2 122 0 44 2 122 0 45 6 41 0 87 5 25 0 88 2 122 0 151] -#[0 6 45 0 3] -#[1 2 122 0 27 2 122 0 29 2 122 0 30 2 122 0 35 2 122 0 38 2 122 0 39 2 122 0 40 2 122 0 44 2 122 0 45 6 49 0 87 5 25 0 88 2 122 0 151] -#[0 3 70 0 30 0 35 0 38 0 39 0 40 0 44 0 45 0 151] -#[1 2 122 0 27 2 122 0 29 2 122 0 30 2 122 0 35 2 122 0 38 2 122 0 39 2 122 0 40 2 122 0 44 2 122 0 45 6 53 0 87 5 25 0 88 2 122 0 151] -#[0 3 74 0 30 0 35 0 38 0 39 0 40 0 44 0 45 0 151] -#[0 3 78 0 30 0 35 0 38 0 39 0 40 0 44 0 45 0 151] -#[0 3 82 0 3 0 4 0 5 0 7 0 8 0 15 0 16 0 19 0 20 0 21 0 23 0 44 0 45 0 47] -#[0 3 86 0 27 0 29 0 30 0 35 0 38 0 39 0 40 0 44 0 45 0 151] -#[0 3 90 0 30 0 35 0 38 0 39 0 40 0 44 0 45 0 151] -#[1 2 122 0 27 2 122 0 29 2 122 0 30 2 122 0 35 2 122 0 38 2 122 0 39 2 122 0 40 2 122 0 44 2 122 0 45 6 57 0 87 5 25 0 88 2 122 0 151] -#[0 3 94 0 30 0 35 0 38 0 39 0 40 0 44 0 45 0 151] -#[0 3 98 0 30 0 35 0 38 0 39 0 40 0 44 0 45 0 151] -#[0 3 102 0 30 0 35 0 38 0 39 0 40 0 44 0 45 0 151] - ). -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForSwitchToAction1: nodes [ - self scope: #action. - ^ nil -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForSwitchToArgAction1: nodes [ - self scope: #argAction. - ^ nil -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForSwitchToDefault1: nodes [ - self scope: #default. - ^ nil -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForSwitchToLexerCharSet1: nodes [ - self scope: #lexerCharSet. - ^ nil -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionFor__bar___bar__alternative_1: nodes [ - | result | - result := Array new: 3. - result at: 2 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - result at: 3 put: ((nodes at: 2) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionFor__bar___bar__alternative__1: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionFor__bar___bar__alternative__2: nodes [ - | result | - result := nodes at: 1. - self add: ((nodes at: 2) at: 1) to: (result at: 1). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - self add: ((nodes at: 2) at: 3) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionFor__bar___bar__labeledAlt_1: nodes [ - | result | - result := Array new: 5. - result at: 2 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - result at: 3 put: ((nodes at: 2) at: 2). - result at: 4 put: ((nodes at: 2) at: 3). - result at: 5 put: ((nodes at: 2) at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionFor__bar___bar__labeledAlt__1: nodes [ - | result | - result := Array new: 5. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionFor__bar___bar__labeledAlt__2: nodes [ - | result | - result := nodes at: 1. - self add: ((nodes at: 2) at: 1) to: (result at: 1). - self addAll: ((nodes at: 2) at: 2) to: (result at: 5). - self add: ((nodes at: 2) at: 3) to: (result at: 4). - self add: ((nodes at: 2) at: 4) to: (result at: 2). - self add: ((nodes at: 2) at: 5) to: (result at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionFor__comma___comma__delegateGrammar__import___1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionFor__comma___comma__delegateGrammar__import___2: nodes [ - | result | - result := nodes at: 1. - self add: ((nodes at: 2) at: 1) to: (result at: 1). - self add: ((nodes at: 2) at: 2) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionFor__comma___comma__elementOption_1: nodes [ - | result | - result := Array new: 4. - result at: 2 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - result at: 3 put: ((nodes at: 2) at: 2). - result at: 4 put: ((nodes at: 2) at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionFor__comma___comma__elementOption__1: nodes [ - | result | - result := Array new: 4. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionFor__comma___comma__elementOption__2: nodes [ - | result | - result := nodes at: 1. - self add: ((nodes at: 2) at: 1) to: (result at: 1). - self addAll: ((nodes at: 2) at: 2) to: (result at: 2). - self add: ((nodes at: 2) at: 3) to: (result at: 3). - self add: ((nodes at: 2) at: 4) to: (result at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForaction1: nodes [ - | result | - result := Antlr4ActionNode new. - result atToken: (nodes at: 1). - result nameToken: (nodes at: 2). - result actionBlock: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForaction2: nodes [ - | result | - result := Antlr4ActionNode new. - result atToken: (nodes at: 1). - result scopeName: (nodes at: 2). - result colonColon: (nodes at: 3). - result nameToken: (nodes at: 4). - result actionBlock: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForactionBlock1: nodes [ - | result | - result := Antlr4ActionBlockNode new. - result leftBrace: (nodes at: 2). - result actionBlock: (nodes at: 3). - result rightBrace: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForaltList1: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self add: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 2) at: 1) to: (result at: 3). - self addAll: ((nodes at: 2) at: 2) to: (result at: 2). - self addAll: ((nodes at: 2) at: 3) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForalternative1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - self addAll: (nodes at: 1) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForalternative2: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (nodes at: 1). - self addAll: (nodes at: 2) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForalternative3: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForargActionBlock1: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (nodes at: 2). - result at: 2 put: (nodes at: 3). - result at: 3 put: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForatom4: nodes [ - | result | - result := Antlr4AtomNode new. - result dot: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForatom5: nodes [ - | result | - result := Antlr4AtomNode new. - result dot: (nodes at: 1). - result options: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForblock1: nodes [ - | result | - result := Antlr4BlockNode new. - result leftParen: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result elements. - result addNodes: ((nodes at: 2) at: 2) to: result optionses. - result addTokens: ((nodes at: 2) at: 3) to: result bars. - result rightParen: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForblock2: nodes [ - | result | - result := Antlr4BlockNode new. - result leftParen: (nodes at: 1). - result addNodes: (nodes at: 2) to: result actions. - result colon: (nodes at: 3). - result addNodes: ((nodes at: 4) at: 1) to: result elements. - result addNodes: ((nodes at: 4) at: 2) to: result optionses. - result addTokens: ((nodes at: 4) at: 3) to: result bars. - result rightParen: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForblock3: nodes [ - | result | - result := Antlr4BlockNode new. - result leftParen: (nodes at: 1). - result addNode: (nodes at: 2) to: result optionses. - result addNodes: (nodes at: 3) to: result actions. - result colon: (nodes at: 4). - result addNodes: ((nodes at: 5) at: 1) to: result elements. - result addNodes: ((nodes at: 5) at: 2) to: result optionses. - result addTokens: ((nodes at: 5) at: 3) to: result bars. - result rightParen: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForblockSet1: nodes [ - | result | - result := Antlr4BlockSetNode new. - result leftParen: (nodes at: 1). - result addNode: (nodes at: 2) to: result expressions. - result addTokens: ((nodes at: 3) at: 1) to: result bars. - result addNodes: ((nodes at: 3) at: 2) to: result expressions. - result rightParen: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForchannelsSpec1: nodes [ - | result | - result := Antlr4ChannelsSpecNode new. - result channelsToken: (nodes at: 1). - result leftBrace: (nodes at: 2). - result rightBrace: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForchannelsSpec2: nodes [ - | result | - result := Antlr4ChannelsSpecNode new. - result channelsToken: (nodes at: 1). - result leftBrace: (nodes at: 2). - result addTokens: ((nodes at: 3) at: 1) to: result nameTokens. - result addTokens: ((nodes at: 3) at: 2) to: result commas. - result rightBrace: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForcharacterRange1: nodes [ - | result | - result := Antlr4CharacterRangeNode new. - result from: (nodes at: 1). - result dotDot: (nodes at: 2). - result to: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionFordelegateGrammar1: nodes [ - | result | - result := Antlr4DelegateGrammarNode new. - result aliasNameToken: (nodes at: 1). - result equal: (nodes at: 2). - result nameToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionFordelegateGrammar2: nodes [ - | result | - result := Antlr4DelegateGrammarNode new. - result nameToken: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionFordelegateGrammars1: nodes [ - | result | - result := Antlr4ImportNode new. - result importToken: (nodes at: 1). - result addNode: (nodes at: 2) to: result imports. - result addTokens: ((nodes at: 3) at: 1) to: result commas. - result addNodes: ((nodes at: 3) at: 2) to: result imports. - result semicolon: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForebnf1: nodes [ - | result | - result := Antlr4EbnfNode new. - result block: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForebnf2: nodes [ - | result | - result := Antlr4EbnfNode new. - result block: (nodes at: 1). - result suffix: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForebnfSuffix1: nodes [ - | result | - result := Antlr4EbnfSuffixNode new. - result countToken: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForebnfSuffix2: nodes [ - | result | - result := Antlr4EbnfSuffixNode new. - result countToken: (nodes at: 1). - result nonGreedyToken: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForelement1: nodes [ - | result | - result := Antlr4ElementNode new. - result nameToken: ((nodes at: 1) at: 1). - result equal: ((nodes at: 1) at: 2). - result value: ((nodes at: 1) at: 3). - result suffix: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForelement2: nodes [ - | result | - result := Antlr4ElementNode new. - result nameToken: ((nodes at: 1) at: 1). - result equal: ((nodes at: 1) at: 2). - result value: ((nodes at: 1) at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForelement3: nodes [ - | result | - result := Antlr4ElementNode new. - result value: (nodes at: 1). - result suffix: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForelement4: nodes [ - | result | - result := Antlr4ElementNode new. - result value: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForelement6: nodes [ - | result | - result := Antlr4ElementNode new. - result actionBlock: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForelement7: nodes [ - | result | - result := Antlr4ElementNode new. - result actionBlock: (nodes at: 1). - result questionMark: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForelementOption1: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForelementOption2: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - result at: 2 put: (nodes at: 2). - self add: (nodes at: 3) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForelementOption3: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForelementOptions1: nodes [ - | result | - result := Antlr4ElementOptionsNode new. - result lt: (nodes at: 1). - result addTokens: ((nodes at: 2) at: 1) to: result nameTokens. - result addToken: ((nodes at: 2) at: 2) to: result equals. - result addToken: ((nodes at: 2) at: 3) to: result values. - result addTokens: ((nodes at: 3) at: 1) to: result commas. - result addTokens: ((nodes at: 3) at: 2) to: result nameTokens. - result addTokens: ((nodes at: 3) at: 3) to: result equals. - result addTokens: ((nodes at: 3) at: 4) to: result values. - result gt: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForexceptionGroup2: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - self addAll: (nodes at: 1) to: (result at: 1). - result at: 2 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForexceptionHandler1: nodes [ - | result | - result := Antlr4ExceptionHandlerNode new. - result catchToken: (nodes at: 1). - result leftBracket: ((nodes at: 2) at: 1). - result argActionBlock: ((nodes at: 2) at: 2). - result rightBracket: ((nodes at: 2) at: 3). - result actionBlock: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForfinallyClause1: nodes [ - | result | - result := Antlr4FinallyClauseNode new. - result finallyToken: (nodes at: 1). - result actionBlock: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForgrammarSpec1: nodes [ - | result | - result := Antlr4GrammarSpecNode new. - result grammarTypeToken: ((nodes at: 1) at: 1). - result grammarToken: ((nodes at: 1) at: 2). - result nameToken: (nodes at: 2). - result semicolon: (nodes at: 3). - result addNodes: (nodes at: 4) to: result prequels. - result addNodes: (nodes at: 5) to: result rules. - result addNodes: (nodes at: 6) to: result modes. - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForgrammarType1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForgrammarType3: nodes [ - | result | - result := Array new: 2. - result at: 2 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForidList1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForidList2: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 1). - self add: (nodes at: 3) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForlabeledAlt1: nodes [ - | result | - result := Array new: 4. - result at: 1 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - result at: 2 put: ((nodes at: 1) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForlabeledAlt2: nodes [ - | result | - result := Array new: 4. - result at: 1 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - result at: 2 put: ((nodes at: 1) at: 2). - result at: 3 put: (nodes at: 2). - result at: 4 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForlabeledElement1: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForlabeledLexerElement2: nodes [ - | result | - result := Antlr4LabeledLexerElementNode new. - result nameToken: (nodes at: 1). - result equal: (nodes at: 2). - result expression: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForlexerAlt1: nodes [ - | result | - result := Antlr4LexerAltNode new. - result addNodes: (nodes at: 1) to: result lexerElements. - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForlexerAlt2: nodes [ - | result | - result := Antlr4LexerAltNode new. - result addNodes: (nodes at: 1) to: result lexerElements. - result lexerCommand: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForlexerAlt3: nodes [ - | result | - result := Antlr4LexerAltNode new. - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForlexerAtom5: nodes [ - | result | - result := Antlr4LexerAtomNode new. - result dot: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForlexerAtom6: nodes [ - | result | - result := Antlr4LexerAtomNode new. - result dot: (nodes at: 1). - result options: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForlexerBlock1: nodes [ - | result | - result := Antlr4LexerBlockNode new. - result leftParen: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result lexerExpressions. - result addTokens: ((nodes at: 2) at: 2) to: result bars. - result rightParen: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForlexerCharSet1: nodes [ - | result | - result := Antlr4LexerCharSetNode new. - result leftBracket: (nodes at: 2). - result charSet: (nodes at: 3). - result rightBracket: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForlexerCommand1: nodes [ - | result | - result := Antlr4LexerCommandNode new. - result addToken: ((nodes at: 1) at: 1) to: result nameTokens. - result modeToken: ((nodes at: 1) at: 2). - result leftParen: (nodes at: 2). - result addToken: ((nodes at: 3) at: 1) to: result nameTokens. - result value: ((nodes at: 3) at: 2). - result rightParen: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForlexerCommand2: nodes [ - | result | - result := Antlr4LexerCommandNode new. - result addToken: ((nodes at: 1) at: 1) to: result nameTokens. - result modeToken: ((nodes at: 1) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForlexerCommandName1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForlexerCommands1: nodes [ - | result | - result := Antlr4LexerCommandsNode new. - result arrow: (nodes at: 1). - result addNode: (nodes at: 2) to: result commands. - result addTokens: ((nodes at: 3) at: 1) to: result commas. - result addNodes: ((nodes at: 3) at: 2) to: result commands. - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForlexerElement1: nodes [ - | result | - result := Antlr4LexerElementNode new. - result labeledLexerElement: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForlexerElement2: nodes [ - | result | - result := Antlr4LexerElementNode new. - result labeledLexerElement: (nodes at: 1). - result suffix: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForlexerElement5: nodes [ - | result | - result := Antlr4LexerElementNode new. - result expression: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForlexerElement6: nodes [ - | result | - result := Antlr4LexerElementNode new. - result expression: (nodes at: 1). - result suffix: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForlexerElement7: nodes [ - | result | - result := Antlr4LexerElementNode new. - result actionBlock: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForlexerElement8: nodes [ - | result | - result := Antlr4LexerElementNode new. - result actionBlock: (nodes at: 1). - result questionMark: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForlexerRuleSpec1: nodes [ - | result | - result := Antlr4LexerRuleSpecNode new. - result nameToken: (nodes at: 1). - result colon: (nodes at: 2). - result addNodes: ((nodes at: 3) at: 1) to: result lexerExpressions. - result addTokens: ((nodes at: 3) at: 2) to: result bars. - result semicolon: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForlexerRuleSpec2: nodes [ - | result | - result := Antlr4LexerRuleSpecNode new. - result modifier: (nodes at: 1). - result nameToken: (nodes at: 2). - result colon: (nodes at: 3). - result addNodes: ((nodes at: 4) at: 1) to: result lexerExpressions. - result addTokens: ((nodes at: 4) at: 2) to: result bars. - result semicolon: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForlocalsSpec1: nodes [ - | result | - result := Antlr4LocalsSpecNode new. - result localsToken: (nodes at: 1). - result leftBracket: ((nodes at: 2) at: 1). - result argActionBlock: ((nodes at: 2) at: 2). - result rightBracket: ((nodes at: 2) at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionFormodeSpec1: nodes [ - | result | - result := Antlr4ModeSpecNode new. - result modeToken: (nodes at: 1). - result nameToken: (nodes at: 2). - result semicolon: (nodes at: 3). - result addNodes: (nodes at: 4) to: result lexerRules. - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionFornotSet2: nodes [ - | result | - result := Antlr4NotSetNode new. - result tilde: (nodes at: 1). - result expression: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForoption1: nodes [ - | result | - result := Antlr4OptionNode new. - result nameToken: (nodes at: 1). - result equal: (nodes at: 2). - result value: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForoptionValue1: nodes [ - | result | - result := Antlr4NamespaceNameNode new. - result addToken: (nodes at: 1) to: result nameTokens. - result addTokens: ((nodes at: 2) at: 1) to: result dots. - result addTokens: ((nodes at: 2) at: 2) to: result nameTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForoptionValue2: nodes [ - | result | - result := Antlr4StringLiteralNode new. - result value: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForoptionValue4: nodes [ - | result | - result := Antlr4IntegerLiteralNode new. - result value: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForoptionsSpec1: nodes [ - | result | - result := Antlr4OptionsSpecNode new. - result optionsToken: (nodes at: 1). - result leftBrace: (nodes at: 2). - result addNodes: ((nodes at: 3) at: 1) to: result options. - result addTokens: ((nodes at: 3) at: 2) to: result semicolons. - result rightBrace: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForparserRuleSpec10: nodes [ - | result | - result := Antlr4ParserRuleSpecNode new. - result addTokens: (nodes at: 1) to: result modifiers. - result addToken: (nodes at: 2) to: result nameTokens. - result throws: (nodes at: 3). - result locals: (nodes at: 4). - result addNodes: (nodes at: 5) to: result prequels. - result colon: (nodes at: 6). - result addNodes: ((nodes at: 7) at: 1) to: result elements. - result addNodes: ((nodes at: 7) at: 2) to: result optionses. - result addTokens: ((nodes at: 7) at: 3) to: result pounds. - result addTokens: ((nodes at: 7) at: 4) to: result nameTokens. - result addTokens: ((nodes at: 7) at: 5) to: result bars. - result semicolon: (nodes at: 8). - result addNodes: ((nodes at: 9) at: 1) to: result handlers. - result finally: ((nodes at: 9) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForparserRuleSpec11: nodes [ - | result | - result := Antlr4ParserRuleSpecNode new. - result addTokens: (nodes at: 1) to: result modifiers. - result addToken: (nodes at: 2) to: result nameTokens. - result returnsToken: ((nodes at: 3) at: 1). - result addToken: ((nodes at: 3) at: 2) to: result leftBrackets. - result addToken: ((nodes at: 3) at: 3) to: result argActionBlocks. - result addToken: ((nodes at: 3) at: 4) to: result rightBrackets. - result locals: (nodes at: 4). - result addNodes: (nodes at: 5) to: result prequels. - result colon: (nodes at: 6). - result addNodes: ((nodes at: 7) at: 1) to: result elements. - result addNodes: ((nodes at: 7) at: 2) to: result optionses. - result addTokens: ((nodes at: 7) at: 3) to: result pounds. - result addTokens: ((nodes at: 7) at: 4) to: result nameTokens. - result addTokens: ((nodes at: 7) at: 5) to: result bars. - result semicolon: (nodes at: 8). - result addNodes: ((nodes at: 9) at: 1) to: result handlers. - result finally: ((nodes at: 9) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForparserRuleSpec12: nodes [ - | result | - result := Antlr4ParserRuleSpecNode new. - result addTokens: (nodes at: 1) to: result modifiers. - result addToken: (nodes at: 2) to: result nameTokens. - result returnsToken: ((nodes at: 3) at: 1). - result addToken: ((nodes at: 3) at: 2) to: result leftBrackets. - result addToken: ((nodes at: 3) at: 3) to: result argActionBlocks. - result addToken: ((nodes at: 3) at: 4) to: result rightBrackets. - result throws: (nodes at: 4). - result locals: (nodes at: 5). - result addNodes: (nodes at: 6) to: result prequels. - result colon: (nodes at: 7). - result addNodes: ((nodes at: 8) at: 1) to: result elements. - result addNodes: ((nodes at: 8) at: 2) to: result optionses. - result addTokens: ((nodes at: 8) at: 3) to: result pounds. - result addTokens: ((nodes at: 8) at: 4) to: result nameTokens. - result addTokens: ((nodes at: 8) at: 5) to: result bars. - result semicolon: (nodes at: 9). - result addNodes: ((nodes at: 10) at: 1) to: result handlers. - result finally: ((nodes at: 10) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForparserRuleSpec13: nodes [ - | result | - result := Antlr4ParserRuleSpecNode new. - result addTokens: (nodes at: 1) to: result modifiers. - result addToken: (nodes at: 2) to: result nameTokens. - result addToken: ((nodes at: 3) at: 1) to: result leftBrackets. - result addToken: ((nodes at: 3) at: 2) to: result argActionBlocks. - result addToken: ((nodes at: 3) at: 3) to: result rightBrackets. - result locals: (nodes at: 4). - result addNodes: (nodes at: 5) to: result prequels. - result colon: (nodes at: 6). - result addNodes: ((nodes at: 7) at: 1) to: result elements. - result addNodes: ((nodes at: 7) at: 2) to: result optionses. - result addTokens: ((nodes at: 7) at: 3) to: result pounds. - result addTokens: ((nodes at: 7) at: 4) to: result nameTokens. - result addTokens: ((nodes at: 7) at: 5) to: result bars. - result semicolon: (nodes at: 8). - result addNodes: ((nodes at: 9) at: 1) to: result handlers. - result finally: ((nodes at: 9) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForparserRuleSpec14: nodes [ - | result | - result := Antlr4ParserRuleSpecNode new. - result addTokens: (nodes at: 1) to: result modifiers. - result addToken: (nodes at: 2) to: result nameTokens. - result addToken: ((nodes at: 3) at: 1) to: result leftBrackets. - result addToken: ((nodes at: 3) at: 2) to: result argActionBlocks. - result addToken: ((nodes at: 3) at: 3) to: result rightBrackets. - result throws: (nodes at: 4). - result locals: (nodes at: 5). - result addNodes: (nodes at: 6) to: result prequels. - result colon: (nodes at: 7). - result addNodes: ((nodes at: 8) at: 1) to: result elements. - result addNodes: ((nodes at: 8) at: 2) to: result optionses. - result addTokens: ((nodes at: 8) at: 3) to: result pounds. - result addTokens: ((nodes at: 8) at: 4) to: result nameTokens. - result addTokens: ((nodes at: 8) at: 5) to: result bars. - result semicolon: (nodes at: 9). - result addNodes: ((nodes at: 10) at: 1) to: result handlers. - result finally: ((nodes at: 10) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForparserRuleSpec15: nodes [ - | result | - result := Antlr4ParserRuleSpecNode new. - result addTokens: (nodes at: 1) to: result modifiers. - result addToken: (nodes at: 2) to: result nameTokens. - result addToken: ((nodes at: 3) at: 1) to: result leftBrackets. - result addToken: ((nodes at: 3) at: 2) to: result argActionBlocks. - result addToken: ((nodes at: 3) at: 3) to: result rightBrackets. - result returnsToken: ((nodes at: 4) at: 1). - result addToken: ((nodes at: 4) at: 2) to: result leftBrackets. - result addToken: ((nodes at: 4) at: 3) to: result argActionBlocks. - result addToken: ((nodes at: 4) at: 4) to: result rightBrackets. - result locals: (nodes at: 5). - result addNodes: (nodes at: 6) to: result prequels. - result colon: (nodes at: 7). - result addNodes: ((nodes at: 8) at: 1) to: result elements. - result addNodes: ((nodes at: 8) at: 2) to: result optionses. - result addTokens: ((nodes at: 8) at: 3) to: result pounds. - result addTokens: ((nodes at: 8) at: 4) to: result nameTokens. - result addTokens: ((nodes at: 8) at: 5) to: result bars. - result semicolon: (nodes at: 9). - result addNodes: ((nodes at: 10) at: 1) to: result handlers. - result finally: ((nodes at: 10) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForparserRuleSpec16: nodes [ - | result | - result := Antlr4ParserRuleSpecNode new. - result addTokens: (nodes at: 1) to: result modifiers. - result addToken: (nodes at: 2) to: result nameTokens. - result addToken: ((nodes at: 3) at: 1) to: result leftBrackets. - result addToken: ((nodes at: 3) at: 2) to: result argActionBlocks. - result addToken: ((nodes at: 3) at: 3) to: result rightBrackets. - result returnsToken: ((nodes at: 4) at: 1). - result addToken: ((nodes at: 4) at: 2) to: result leftBrackets. - result addToken: ((nodes at: 4) at: 3) to: result argActionBlocks. - result addToken: ((nodes at: 4) at: 4) to: result rightBrackets. - result throws: (nodes at: 5). - result locals: (nodes at: 6). - result addNodes: (nodes at: 7) to: result prequels. - result colon: (nodes at: 8). - result addNodes: ((nodes at: 9) at: 1) to: result elements. - result addNodes: ((nodes at: 9) at: 2) to: result optionses. - result addTokens: ((nodes at: 9) at: 3) to: result pounds. - result addTokens: ((nodes at: 9) at: 4) to: result nameTokens. - result addTokens: ((nodes at: 9) at: 5) to: result bars. - result semicolon: (nodes at: 10). - result addNodes: ((nodes at: 11) at: 1) to: result handlers. - result finally: ((nodes at: 11) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForparserRuleSpec1: nodes [ - | result | - result := Antlr4ParserRuleSpecNode new. - result addToken: (nodes at: 1) to: result nameTokens. - result locals: (nodes at: 2). - result addNodes: (nodes at: 3) to: result prequels. - result colon: (nodes at: 4). - result addNodes: ((nodes at: 5) at: 1) to: result elements. - result addNodes: ((nodes at: 5) at: 2) to: result optionses. - result addTokens: ((nodes at: 5) at: 3) to: result pounds. - result addTokens: ((nodes at: 5) at: 4) to: result nameTokens. - result addTokens: ((nodes at: 5) at: 5) to: result bars. - result semicolon: (nodes at: 6). - result addNodes: ((nodes at: 7) at: 1) to: result handlers. - result finally: ((nodes at: 7) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForparserRuleSpec2: nodes [ - | result | - result := Antlr4ParserRuleSpecNode new. - result addToken: (nodes at: 1) to: result nameTokens. - result throws: (nodes at: 2). - result locals: (nodes at: 3). - result addNodes: (nodes at: 4) to: result prequels. - result colon: (nodes at: 5). - result addNodes: ((nodes at: 6) at: 1) to: result elements. - result addNodes: ((nodes at: 6) at: 2) to: result optionses. - result addTokens: ((nodes at: 6) at: 3) to: result pounds. - result addTokens: ((nodes at: 6) at: 4) to: result nameTokens. - result addTokens: ((nodes at: 6) at: 5) to: result bars. - result semicolon: (nodes at: 7). - result addNodes: ((nodes at: 8) at: 1) to: result handlers. - result finally: ((nodes at: 8) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForparserRuleSpec3: nodes [ - | result | - result := Antlr4ParserRuleSpecNode new. - result addToken: (nodes at: 1) to: result nameTokens. - result returnsToken: ((nodes at: 2) at: 1). - result addToken: ((nodes at: 2) at: 2) to: result leftBrackets. - result addToken: ((nodes at: 2) at: 3) to: result argActionBlocks. - result addToken: ((nodes at: 2) at: 4) to: result rightBrackets. - result locals: (nodes at: 3). - result addNodes: (nodes at: 4) to: result prequels. - result colon: (nodes at: 5). - result addNodes: ((nodes at: 6) at: 1) to: result elements. - result addNodes: ((nodes at: 6) at: 2) to: result optionses. - result addTokens: ((nodes at: 6) at: 3) to: result pounds. - result addTokens: ((nodes at: 6) at: 4) to: result nameTokens. - result addTokens: ((nodes at: 6) at: 5) to: result bars. - result semicolon: (nodes at: 7). - result addNodes: ((nodes at: 8) at: 1) to: result handlers. - result finally: ((nodes at: 8) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForparserRuleSpec4: nodes [ - | result | - result := Antlr4ParserRuleSpecNode new. - result addToken: (nodes at: 1) to: result nameTokens. - result returnsToken: ((nodes at: 2) at: 1). - result addToken: ((nodes at: 2) at: 2) to: result leftBrackets. - result addToken: ((nodes at: 2) at: 3) to: result argActionBlocks. - result addToken: ((nodes at: 2) at: 4) to: result rightBrackets. - result throws: (nodes at: 3). - result locals: (nodes at: 4). - result addNodes: (nodes at: 5) to: result prequels. - result colon: (nodes at: 6). - result addNodes: ((nodes at: 7) at: 1) to: result elements. - result addNodes: ((nodes at: 7) at: 2) to: result optionses. - result addTokens: ((nodes at: 7) at: 3) to: result pounds. - result addTokens: ((nodes at: 7) at: 4) to: result nameTokens. - result addTokens: ((nodes at: 7) at: 5) to: result bars. - result semicolon: (nodes at: 8). - result addNodes: ((nodes at: 9) at: 1) to: result handlers. - result finally: ((nodes at: 9) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForparserRuleSpec5: nodes [ - | result | - result := Antlr4ParserRuleSpecNode new. - result addToken: (nodes at: 1) to: result nameTokens. - result addToken: ((nodes at: 2) at: 1) to: result leftBrackets. - result addToken: ((nodes at: 2) at: 2) to: result argActionBlocks. - result addToken: ((nodes at: 2) at: 3) to: result rightBrackets. - result locals: (nodes at: 3). - result addNodes: (nodes at: 4) to: result prequels. - result colon: (nodes at: 5). - result addNodes: ((nodes at: 6) at: 1) to: result elements. - result addNodes: ((nodes at: 6) at: 2) to: result optionses. - result addTokens: ((nodes at: 6) at: 3) to: result pounds. - result addTokens: ((nodes at: 6) at: 4) to: result nameTokens. - result addTokens: ((nodes at: 6) at: 5) to: result bars. - result semicolon: (nodes at: 7). - result addNodes: ((nodes at: 8) at: 1) to: result handlers. - result finally: ((nodes at: 8) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForparserRuleSpec6: nodes [ - | result | - result := Antlr4ParserRuleSpecNode new. - result addToken: (nodes at: 1) to: result nameTokens. - result addToken: ((nodes at: 2) at: 1) to: result leftBrackets. - result addToken: ((nodes at: 2) at: 2) to: result argActionBlocks. - result addToken: ((nodes at: 2) at: 3) to: result rightBrackets. - result throws: (nodes at: 3). - result locals: (nodes at: 4). - result addNodes: (nodes at: 5) to: result prequels. - result colon: (nodes at: 6). - result addNodes: ((nodes at: 7) at: 1) to: result elements. - result addNodes: ((nodes at: 7) at: 2) to: result optionses. - result addTokens: ((nodes at: 7) at: 3) to: result pounds. - result addTokens: ((nodes at: 7) at: 4) to: result nameTokens. - result addTokens: ((nodes at: 7) at: 5) to: result bars. - result semicolon: (nodes at: 8). - result addNodes: ((nodes at: 9) at: 1) to: result handlers. - result finally: ((nodes at: 9) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForparserRuleSpec7: nodes [ - | result | - result := Antlr4ParserRuleSpecNode new. - result addToken: (nodes at: 1) to: result nameTokens. - result addToken: ((nodes at: 2) at: 1) to: result leftBrackets. - result addToken: ((nodes at: 2) at: 2) to: result argActionBlocks. - result addToken: ((nodes at: 2) at: 3) to: result rightBrackets. - result returnsToken: ((nodes at: 3) at: 1). - result addToken: ((nodes at: 3) at: 2) to: result leftBrackets. - result addToken: ((nodes at: 3) at: 3) to: result argActionBlocks. - result addToken: ((nodes at: 3) at: 4) to: result rightBrackets. - result locals: (nodes at: 4). - result addNodes: (nodes at: 5) to: result prequels. - result colon: (nodes at: 6). - result addNodes: ((nodes at: 7) at: 1) to: result elements. - result addNodes: ((nodes at: 7) at: 2) to: result optionses. - result addTokens: ((nodes at: 7) at: 3) to: result pounds. - result addTokens: ((nodes at: 7) at: 4) to: result nameTokens. - result addTokens: ((nodes at: 7) at: 5) to: result bars. - result semicolon: (nodes at: 8). - result addNodes: ((nodes at: 9) at: 1) to: result handlers. - result finally: ((nodes at: 9) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForparserRuleSpec8: nodes [ - | result | - result := Antlr4ParserRuleSpecNode new. - result addToken: (nodes at: 1) to: result nameTokens. - result addToken: ((nodes at: 2) at: 1) to: result leftBrackets. - result addToken: ((nodes at: 2) at: 2) to: result argActionBlocks. - result addToken: ((nodes at: 2) at: 3) to: result rightBrackets. - result returnsToken: ((nodes at: 3) at: 1). - result addToken: ((nodes at: 3) at: 2) to: result leftBrackets. - result addToken: ((nodes at: 3) at: 3) to: result argActionBlocks. - result addToken: ((nodes at: 3) at: 4) to: result rightBrackets. - result throws: (nodes at: 4). - result locals: (nodes at: 5). - result addNodes: (nodes at: 6) to: result prequels. - result colon: (nodes at: 7). - result addNodes: ((nodes at: 8) at: 1) to: result elements. - result addNodes: ((nodes at: 8) at: 2) to: result optionses. - result addTokens: ((nodes at: 8) at: 3) to: result pounds. - result addTokens: ((nodes at: 8) at: 4) to: result nameTokens. - result addTokens: ((nodes at: 8) at: 5) to: result bars. - result semicolon: (nodes at: 9). - result addNodes: ((nodes at: 10) at: 1) to: result handlers. - result finally: ((nodes at: 10) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForparserRuleSpec9: nodes [ - | result | - result := Antlr4ParserRuleSpecNode new. - result addTokens: (nodes at: 1) to: result modifiers. - result addToken: (nodes at: 2) to: result nameTokens. - result locals: (nodes at: 3). - result addNodes: (nodes at: 4) to: result prequels. - result colon: (nodes at: 5). - result addNodes: ((nodes at: 6) at: 1) to: result elements. - result addNodes: ((nodes at: 6) at: 2) to: result optionses. - result addTokens: ((nodes at: 6) at: 3) to: result pounds. - result addTokens: ((nodes at: 6) at: 4) to: result nameTokens. - result addTokens: ((nodes at: 6) at: 5) to: result bars. - result semicolon: (nodes at: 7). - result addNodes: ((nodes at: 8) at: 1) to: result handlers. - result finally: ((nodes at: 8) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForprequelConstruct__prequel__1: nodes [ - | result | - result := OrderedCollection new: 2. - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForprequelConstruct__prequel__2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: result. - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForruleAction1: nodes [ - | result | - result := Antlr4RuleActionNode new. - result atToken: (nodes at: 1). - result nameToken: (nodes at: 2). - result actionBlock: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForruleAltList1: nodes [ - | result | - result := Array new: 5. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self add: ((nodes at: 1) at: 2) to: (result at: 2). - self add: ((nodes at: 1) at: 3) to: (result at: 3). - self add: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 2) at: 1) to: (result at: 5). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - self addAll: ((nodes at: 2) at: 3) to: (result at: 4). - self addAll: ((nodes at: 2) at: 4) to: (result at: 2). - self addAll: ((nodes at: 2) at: 5) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForruleModifier__1: nodes [ - | result | - result := OrderedCollection new: 2. - self add: (nodes at: 1) to: result. - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForruleReturns1: nodes [ - | result | - result := Array new: 4. - result at: 1 put: (nodes at: 1). - result at: 2 put: ((nodes at: 2) at: 1). - result at: 3 put: ((nodes at: 2) at: 2). - result at: 4 put: ((nodes at: 2) at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForruleref1: nodes [ - | result | - result := Antlr4RulerefNode new. - result nameToken: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForruleref2: nodes [ - | result | - result := Antlr4RulerefNode new. - result nameToken: (nodes at: 1). - result options: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForruleref3: nodes [ - | result | - result := Antlr4RulerefNode new. - result nameToken: (nodes at: 1). - result leftBracket: ((nodes at: 2) at: 1). - result argActionBlock: ((nodes at: 2) at: 2). - result rightBracket: ((nodes at: 2) at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForruleref4: nodes [ - | result | - result := Antlr4RulerefNode new. - result nameToken: (nodes at: 1). - result leftBracket: ((nodes at: 2) at: 1). - result argActionBlock: ((nodes at: 2) at: 2). - result rightBracket: ((nodes at: 2) at: 3). - result options: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForrules1: nodes [ - | result | - result := nodes at: 1. - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForsetElement1: nodes [ - | result | - result := Antlr4SetElementNode new. - result nameToken: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForsetElement2: nodes [ - | result | - result := Antlr4SetElementNode new. - result nameToken: (nodes at: 1). - result options: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForsetElement3: nodes [ - | result | - result := Antlr4SetElementNode new. - result value: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForsetElement4: nodes [ - | result | - result := Antlr4SetElementNode new. - result value: (nodes at: 1). - result options: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForterminal1: nodes [ - | result | - result := Antlr4ReferenceTerminalNode new. - result nameToken: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForterminal2: nodes [ - | result | - result := Antlr4ReferenceTerminalNode new. - result nameToken: (nodes at: 1). - result options: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForterminal3: nodes [ - | result | - result := Antlr4StringTerminalNode new. - result value: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForterminal4: nodes [ - | result | - result := Antlr4StringTerminalNode new. - result value: (nodes at: 1). - result options: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionForthrowsSpec1: nodes [ - | result | - result := Antlr4ThrowsSpecNode new. - result throwsToken: (nodes at: 1). - result addToken: (nodes at: 2) to: result nameTokens. - result addTokens: ((nodes at: 3) at: 1) to: result commas. - result addTokens: ((nodes at: 3) at: 2) to: result nameTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionFortokensSpec1: nodes [ - | result | - result := Antlr4TokensSpecNode new. - result tokensToken: (nodes at: 1). - result leftBrace: (nodes at: 2). - result rightBrace: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -Antlr4Parser >> reduceActionFortokensSpec2: nodes [ - | result | - result := Antlr4TokensSpecNode new. - result tokensToken: (nodes at: 1). - result leftBrace: (nodes at: 2). - result addTokens: ((nodes at: 3) at: 1) to: result nameTokens. - result addTokens: ((nodes at: 3) at: 2) to: result commas. - result rightBrace: (nodes at: 4). - ^ result -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4ParserRuleSpecNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4ParserRuleSpecNode.class.st deleted file mode 100644 index 193ea70a2..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4ParserRuleSpecNode.class.st +++ /dev/null @@ -1,255 +0,0 @@ -Class { - #name : #Antlr4ParserRuleSpecNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'modifiers', - 'nameTokens', - 'leftBrackets', - 'argActionBlocks', - 'rightBrackets', - 'returnsToken', - 'throws', - 'locals', - 'prequels', - 'colon', - 'optionses', - 'elements', - 'pounds', - 'bars', - 'semicolon', - 'handlers', - 'finally' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitParserRuleSpec: self -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> argActionBlocks [ - ^ argActionBlocks -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> argActionBlocks: anOrderedCollection [ - argActionBlocks := anOrderedCollection -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> bars [ - ^ bars -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> bars: anOrderedCollection [ - bars := anOrderedCollection -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> colon [ - ^ colon -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> compositeNodeVariables [ - ^ #(#prequels #elements #optionses #handlers) -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> compositeTokenVariables [ - ^ #(#nameTokens #pounds #bars #leftBrackets #argActionBlocks #rightBrackets #modifiers) -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> elements [ - ^ elements -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> elements: anOrderedCollection [ - self setParents: self elements to: nil. - elements := anOrderedCollection. - self setParents: self elements to: self -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> finally [ - ^ finally -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> finally: anAntlr4FinallyClauseNode [ - self finally notNil - ifTrue: [ self finally parent: nil ]. - finally := anAntlr4FinallyClauseNode. - self finally notNil - ifTrue: [ self finally parent: self ] -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> handlers [ - ^ handlers -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> handlers: anOrderedCollection [ - self setParents: self handlers to: nil. - handlers := anOrderedCollection. - self setParents: self handlers to: self -] - -{ #category : #'generated-initialize-release' } -Antlr4ParserRuleSpecNode >> initialize [ - super initialize. - nameTokens := OrderedCollection new: 2. - prequels := OrderedCollection new: 2. - elements := OrderedCollection new: 2. - optionses := OrderedCollection new: 2. - pounds := OrderedCollection new: 2. - bars := OrderedCollection new: 2. - handlers := OrderedCollection new: 2. - leftBrackets := OrderedCollection new: 2. - argActionBlocks := OrderedCollection new: 2. - rightBrackets := OrderedCollection new: 2. - modifiers := OrderedCollection new: 2. -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> leftBrackets [ - ^ leftBrackets -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> leftBrackets: anOrderedCollection [ - leftBrackets := anOrderedCollection -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> locals [ - ^ locals -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> locals: anAntlr4LocalsSpecNode [ - self locals notNil - ifTrue: [ self locals parent: nil ]. - locals := anAntlr4LocalsSpecNode. - self locals notNil - ifTrue: [ self locals parent: self ] -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> modifiers: anOrderedCollection [ - modifiers := anOrderedCollection -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> nameTokens [ - ^ nameTokens -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> nameTokens: anOrderedCollection [ - nameTokens := anOrderedCollection -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> nodeVariables [ - ^ #(#locals #finally #throws) -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> optionses [ - ^ optionses -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> optionses: anOrderedCollection [ - self setParents: self optionses to: nil. - optionses := anOrderedCollection. - self setParents: self optionses to: self -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> pounds [ - ^ pounds -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> pounds: anOrderedCollection [ - pounds := anOrderedCollection -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> prequels [ - ^ prequels -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> prequels: anOrderedCollection [ - self setParents: self prequels to: nil. - prequels := anOrderedCollection. - self setParents: self prequels to: self -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> returnsToken [ - ^ returnsToken -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> returnsToken: aSmaCCToken [ - returnsToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> rightBrackets [ - ^ rightBrackets -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> rightBrackets: anOrderedCollection [ - rightBrackets := anOrderedCollection -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> throws [ - ^ throws -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> throws: anAntlr4ThrowsSpecNode [ - self throws notNil - ifTrue: [ self throws parent: nil ]. - throws := anAntlr4ThrowsSpecNode. - self throws notNil - ifTrue: [ self throws parent: self ] -] - -{ #category : #generated } -Antlr4ParserRuleSpecNode >> tokenVariables [ - ^ #(#colon #semicolon #returnsToken) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4ReferenceTerminalNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4ReferenceTerminalNode.class.st deleted file mode 100644 index 5920e2822..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4ReferenceTerminalNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #Antlr4ReferenceTerminalNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'nameToken', - 'options' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4ReferenceTerminalNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitReferenceTerminal: self -] - -{ #category : #generated } -Antlr4ReferenceTerminalNode >> nameToken [ - ^ nameToken -] - -{ #category : #generated } -Antlr4ReferenceTerminalNode >> nameToken: aSmaCCToken [ - nameToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4ReferenceTerminalNode >> nodeVariables [ - ^ #(#options) -] - -{ #category : #generated } -Antlr4ReferenceTerminalNode >> options [ - ^ options -] - -{ #category : #generated } -Antlr4ReferenceTerminalNode >> options: anAntlr4ElementOptionsNode [ - self options notNil - ifTrue: [ self options parent: nil ]. - options := anAntlr4ElementOptionsNode. - self options notNil - ifTrue: [ self options parent: self ] -] - -{ #category : #generated } -Antlr4ReferenceTerminalNode >> tokenVariables [ - ^ #(#nameToken) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4RuleActionNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4RuleActionNode.class.st deleted file mode 100644 index c7c7f0f84..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4RuleActionNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #Antlr4RuleActionNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'atToken', - 'nameToken', - 'actionBlock' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4RuleActionNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitRuleAction: self -] - -{ #category : #generated } -Antlr4RuleActionNode >> actionBlock [ - ^ actionBlock -] - -{ #category : #generated } -Antlr4RuleActionNode >> actionBlock: anAntlr4ActionBlockNode [ - self actionBlock notNil - ifTrue: [ self actionBlock parent: nil ]. - actionBlock := anAntlr4ActionBlockNode. - self actionBlock notNil - ifTrue: [ self actionBlock parent: self ] -] - -{ #category : #generated } -Antlr4RuleActionNode >> atToken [ - ^ atToken -] - -{ #category : #generated } -Antlr4RuleActionNode >> atToken: aSmaCCToken [ - atToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4RuleActionNode >> nameToken [ - ^ nameToken -] - -{ #category : #generated } -Antlr4RuleActionNode >> nameToken: aSmaCCToken [ - nameToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4RuleActionNode >> nodeVariables [ - ^ #(#actionBlock) -] - -{ #category : #generated } -Antlr4RuleActionNode >> tokenVariables [ - ^ #(#atToken #nameToken) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4RulerefNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4RulerefNode.class.st deleted file mode 100644 index 341fa2605..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4RulerefNode.class.st +++ /dev/null @@ -1,81 +0,0 @@ -Class { - #name : #Antlr4RulerefNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'nameToken', - 'leftBracket', - 'argActionBlock', - 'rightBracket', - 'options' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4RulerefNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitRuleref: self -] - -{ #category : #generated } -Antlr4RulerefNode >> argActionBlock [ - ^ argActionBlock -] - -{ #category : #generated } -Antlr4RulerefNode >> argActionBlock: aSmaCCToken [ - argActionBlock := aSmaCCToken -] - -{ #category : #generated } -Antlr4RulerefNode >> leftBracket [ - ^ leftBracket -] - -{ #category : #generated } -Antlr4RulerefNode >> leftBracket: aSmaCCToken [ - leftBracket := aSmaCCToken -] - -{ #category : #generated } -Antlr4RulerefNode >> nameToken [ - ^ nameToken -] - -{ #category : #generated } -Antlr4RulerefNode >> nameToken: aSmaCCToken [ - nameToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4RulerefNode >> nodeVariables [ - ^ #(#options) -] - -{ #category : #generated } -Antlr4RulerefNode >> options [ - ^ options -] - -{ #category : #generated } -Antlr4RulerefNode >> options: anAntlr4ElementOptionsNode [ - self options notNil - ifTrue: [ self options parent: nil ]. - options := anAntlr4ElementOptionsNode. - self options notNil - ifTrue: [ self options parent: self ] -] - -{ #category : #generated } -Antlr4RulerefNode >> rightBracket [ - ^ rightBracket -] - -{ #category : #generated } -Antlr4RulerefNode >> rightBracket: aSmaCCToken [ - rightBracket := aSmaCCToken -] - -{ #category : #generated } -Antlr4RulerefNode >> tokenVariables [ - ^ #(#nameToken #leftBracket #argActionBlock #rightBracket) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4Scanner.class.st b/src/SmaCC_Antlr_Parser/Antlr4Scanner.class.st deleted file mode 100644 index 43b0f0276..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4Scanner.class.st +++ /dev/null @@ -1,335 +0,0 @@ -Class { - #name : #Antlr4Scanner, - #superclass : #SmaCCScanner, - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #'generated-initialization' } -Antlr4Scanner class >> initializeKeywordMap [ - keywordMap := Dictionary new. - #(#(45 'catch' #(27 #(#default))) #(45 'channels' #(28 #(#default))) #(45 'finally' #(29 #(#default))) #(45 'fragment' #(30 #(#default))) #(45 'grammar' #(31 #(#default))) #(45 'import' #(32 #(#default))) #(45 'lexer' #(33 #(#default))) #(45 'locals' #(34 #(#default))) #(45 'mode' #(35 #(#default))) #(45 'options' #(36 #(#default))) #(45 'parser' #(37 #(#default))) #(45 'private' #(38 #(#default))) #(45 'protected' #(39 #(#default))) #(45 'public' #(40 #(#default))) #(45 'returns' #(41 #(#default))) #(45 'throws' #(42 #(#default))) #(45 'tokens' #(43 #(#default)))) - do: [ :each | - (keywordMap at: each first ifAbsentPut: [ Dictionary new ]) - at: (each at: 2) - put: each last ]. - ^ keywordMap -] - -{ #category : #private } -Antlr4Scanner >> actionBlock [ - | code | - code := String with: currentCharacter. - [ code := code , (stream upTo: $}). - self canParse: code ] - whileFalse: [ stream atEnd - ifTrue: [ ^ self scannerError ]. - code := code , '}' ]. - matchActions := Array with: self actionBlockId. - stream position: stream position - 1. - self scope: #default. - ^ self createTokenFor: code -] - -{ #category : #generated } -Antlr4Scanner >> actionBlockId [ - ^ 1 -] - -{ #category : #private } -Antlr4Scanner >> argActionBlock [ - | code | - code := String with: currentCharacter. - [ code := code , (stream upTo: $]). - self canParse: code ] - whileFalse: [ stream atEnd - ifTrue: [ ^ self scannerError ]. - code := code , ']' ]. - matchActions := Array with: self argActionBlockId. - stream position: stream position - 1. - self scope: #default. - ^ self createTokenFor: code -] - -{ #category : #generated } -Antlr4Scanner >> argActionBlockId [ - ^ 2 -] - -{ #category : #private } -Antlr4Scanner >> canParse: aString [ - | count scanner | - count := 0. - scanner := JavaScanner on: (ReadStream on: aString). - scanner contents - do: [ :each | - (#('''' '"') includes: each value) - ifTrue: [ ^ false ]. - each value = '{' - ifTrue: [ count := count + 1 ]. - each value = '}' - ifTrue: [ count := count - 1 ] ]. - ^ count = 0 -] - -{ #category : #generated } -Antlr4Scanner >> emptySymbolTokenId [ - ^ 151 -] - -{ #category : #generated } -Antlr4Scanner >> errorTokenId [ - ^ 152 -] - -{ #category : #generated } -Antlr4Scanner >> scan1 [ - self step. - currentCharacter == $# - ifTrue: [ ^ self recordAndReportMatch: #(23) ]. - currentCharacter == $' - ifTrue: [ ^ self scan2 ]. - currentCharacter == $( - ifTrue: [ ^ self recordAndReportMatch: #(5) ]. - currentCharacter == $) - ifTrue: [ ^ self recordAndReportMatch: #(8) ]. - currentCharacter == $* - ifTrue: [ ^ self recordAndReportMatch: #(20) ]. - currentCharacter == $+ - ifTrue: - [ ^ self scan1X6 ]. - ^ self scan1X11 -] - -{ #category : #generated } -Antlr4Scanner >> scan1X1 [ - self step. - currentCharacter == $* - ifTrue: [ self step. - currentCharacter == $* - ifTrue: [ ^ self scan4 ]. - ^ self scan3 ]. - currentCharacter == $/ - ifTrue: [ [ self recordMatch: #(49). - self step. - currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: Character newPage) - or: [ currentCharacter >= (Character value: 14) ] ] ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -Antlr4Scanner >> scan1X10 [ - currentCharacter == $[ - ifTrue: [ ^ self recordAndReportMatch: #(6) ]. - currentCharacter == $] - ifTrue: [ ^ self recordAndReportMatch: #(9) ]. - currentCharacter == ${ - ifTrue: [ ^ self recordAndReportMatch: #(7) ]. - currentCharacter == $| - ifTrue: [ ^ self recordAndReportMatch: #(4) ]. - currentCharacter == $} - ifTrue: [ ^ self recordAndReportMatch: #(10) ]. - currentCharacter == $~ - ifTrue: [ ^ self recordAndReportMatch: #(16) ]. - currentCharacter isDigit - ifTrue: - [ ^ self scan1X9 ]. - (currentCharacter between: $A and: $Z) - ifTrue: - [ ^ self scan1X3 ]. - (currentCharacter between: $a and: $z) - ifTrue: - [ ^ self scan1X2 ]. - (currentCharacter isSeparator - or: [ currentCharacter == Character pageUp ]) - ifTrue: - [ self scan1X7 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -Antlr4Scanner >> scan1X11 [ - currentCharacter == $, - ifTrue: [ ^ self recordAndReportMatch: #(11) ]. - currentCharacter == $- - ifTrue: - [ ^ self scan1X8 ]. - currentCharacter == $. - ifTrue: - [ ^ self scan1X5 ]. - currentCharacter == $/ - ifTrue: - [ ^ self scan1X1 ]. - currentCharacter == $0 - ifTrue: [ ^ self recordAndReportMatch: #(46) ]. - currentCharacter == $: - ifTrue: - [ ^ self scan1X4 ]. - currentCharacter == $; - ifTrue: [ ^ self recordAndReportMatch: #(3) ]. - currentCharacter == $< - ifTrue: [ ^ self recordAndReportMatch: #(12) ]. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(17) ]. - currentCharacter == $> - ifTrue: [ ^ self recordAndReportMatch: #(13) ]. - currentCharacter == $? - ifTrue: [ ^ self recordAndReportMatch: #(19) ]. - currentCharacter == $@ - ifTrue: [ ^ self recordAndReportMatch: #(22) ]. - ^ self scan1X10 -] - -{ #category : #generated } -Antlr4Scanner >> scan1X2 [ - [ self recordMatch: #(45). - self step. - currentCharacter isAlphaNumeric or: [ currentCharacter == $_ ] ] - whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -Antlr4Scanner >> scan1X3 [ - [ self recordMatch: #(44). - self step. - currentCharacter isAlphaNumeric or: [ currentCharacter == $_ ] ] - whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -Antlr4Scanner >> scan1X4 [ - self recordMatch: #(24). - self step. - currentCharacter == $: - ifTrue: [ ^ self recordAndReportMatch: #(25) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -Antlr4Scanner >> scan1X5 [ - self recordMatch: #(15). - self step. - currentCharacter == $. - ifTrue: [ ^ self recordAndReportMatch: #(14) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -Antlr4Scanner >> scan1X6 [ - self recordMatch: #(21). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(18) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -Antlr4Scanner >> scan1X7 [ - [ self recordMatch: #(50). - self step. - currentCharacter isSeparator - or: [ currentCharacter == Character pageUp ] ] whileTrue -] - -{ #category : #generated } -Antlr4Scanner >> scan1X8 [ - self step. - currentCharacter == $> - ifTrue: [ ^ self recordAndReportMatch: #(26) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -Antlr4Scanner >> scan1X9 [ - [ self recordMatch: #(46). - self step. - currentCharacter isDigit ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -Antlr4Scanner >> scan2 [ - [ self step. - currentCharacter == $' - ifTrue: [ ^ self recordAndReportMatch: #(47) ]. - currentCharacter == $\ - ifTrue: [ self step. - ^ self scan2 ]. - currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: Character newPage) - or: [ (currentCharacter between: (Character value: 14) and: $&) - or: [ (currentCharacter between: $( and: $[) - or: [ currentCharacter >= $] ] ] ] ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -Antlr4Scanner >> scan3 [ - [ self step. - currentCharacter == $* - ifTrue: [ [ self step. - currentCharacter == $* ] whileTrue. - currentCharacter == $/ - ifTrue: [ ^ self recordAndReportMatch: #(49) ]. - ^ self scan3 ]. - true ] whileTrue -] - -{ #category : #generated } -Antlr4Scanner >> scan4 [ - [ self step. - currentCharacter == $* ] whileTrue. - currentCharacter == $/ - ifTrue: [ ^ self recordAndReportMatch: #(49) ]. - true - ifTrue: [ [ self step. - currentCharacter == $* - ifTrue: [ ^ self scan4 ]. - currentCharacter == $/ - ifTrue: [ ^ self scan3 ]. - true ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -Antlr4Scanner >> scan5 [ - [ self recordMatch: #(48). - self step. - currentCharacter == $\ - ifTrue: [ ^ self scan6 ]. - currentCharacter <= $[ or: [ currentCharacter >= $^ ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -Antlr4Scanner >> scan6 [ - self step. - ^ self scan5 -] - -{ #category : #generated } -Antlr4Scanner >> scanForToken [ - scope == #default - ifTrue: [ ^ self scan1 ]. - scope == #argAction - ifTrue: [ self step. - ^ self recordAndReportMatch: #(2) ]. - scope == #action - ifTrue: [ self step. - ^ self recordAndReportMatch: #(1) ]. - scope == #lexerCharSet - ifTrue: [ self step. - currentCharacter == $\ - ifTrue: [ ^ self scan6 ]. - currentCharacter == $] - ifTrue: [ ^ self recordAndReportMatch: #(9) ]. - ^ self scan5 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -Antlr4Scanner >> tokenActions [ - ^ #(#actionBlock #argActionBlock nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil #comment #whitespace) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4SetElementNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4SetElementNode.class.st deleted file mode 100644 index f32109e8d..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4SetElementNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #Antlr4SetElementNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'nameToken', - 'options', - 'value' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4SetElementNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitSetElement: self -] - -{ #category : #generated } -Antlr4SetElementNode >> nameToken [ - ^ nameToken -] - -{ #category : #generated } -Antlr4SetElementNode >> nameToken: aSmaCCToken [ - nameToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4SetElementNode >> nodeVariables [ - ^ #(#options) -] - -{ #category : #generated } -Antlr4SetElementNode >> options [ - ^ options -] - -{ #category : #generated } -Antlr4SetElementNode >> options: anAntlr4ElementOptionsNode [ - self options notNil - ifTrue: [ self options parent: nil ]. - options := anAntlr4ElementOptionsNode. - self options notNil - ifTrue: [ self options parent: self ] -] - -{ #category : #generated } -Antlr4SetElementNode >> tokenVariables [ - ^ #(#nameToken #value) -] - -{ #category : #generated } -Antlr4SetElementNode >> value [ - ^ value -] - -{ #category : #generated } -Antlr4SetElementNode >> value: aSmaCCToken [ - value := aSmaCCToken -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4StringLiteralNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4StringLiteralNode.class.st deleted file mode 100644 index 9f71f3258..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4StringLiteralNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #Antlr4StringLiteralNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'value' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4StringLiteralNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitStringLiteral: self -] - -{ #category : #generated } -Antlr4StringLiteralNode >> tokenVariables [ - ^ #(#value) -] - -{ #category : #generated } -Antlr4StringLiteralNode >> value [ - ^ value -] - -{ #category : #generated } -Antlr4StringLiteralNode >> value: aSmaCCToken [ - value := aSmaCCToken -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4StringTerminalNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4StringTerminalNode.class.st deleted file mode 100644 index 5b9d40b72..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4StringTerminalNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #Antlr4StringTerminalNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'value', - 'options' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4StringTerminalNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitStringTerminal: self -] - -{ #category : #generated } -Antlr4StringTerminalNode >> nodeVariables [ - ^ #(#options) -] - -{ #category : #generated } -Antlr4StringTerminalNode >> options [ - ^ options -] - -{ #category : #generated } -Antlr4StringTerminalNode >> options: anAntlr4ElementOptionsNode [ - self options notNil - ifTrue: [ self options parent: nil ]. - options := anAntlr4ElementOptionsNode. - self options notNil - ifTrue: [ self options parent: self ] -] - -{ #category : #generated } -Antlr4StringTerminalNode >> tokenVariables [ - ^ #(#value) -] - -{ #category : #generated } -Antlr4StringTerminalNode >> value [ - ^ value -] - -{ #category : #generated } -Antlr4StringTerminalNode >> value: aSmaCCToken [ - value := aSmaCCToken -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4TerminalNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4TerminalNode.class.st deleted file mode 100644 index 7f279cc61..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4TerminalNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #Antlr4TerminalNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'nameToken', - 'options', - 'value' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4TerminalNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitTerminal: self -] - -{ #category : #generated } -Antlr4TerminalNode >> nameToken [ - ^ nameToken -] - -{ #category : #generated } -Antlr4TerminalNode >> nameToken: aSmaCCToken [ - nameToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4TerminalNode >> nodeVariables [ - ^ #(#options) -] - -{ #category : #generated } -Antlr4TerminalNode >> options [ - ^ options -] - -{ #category : #generated } -Antlr4TerminalNode >> options: anAntlr4ElementOptionsNode [ - self options notNil - ifTrue: [ self options parent: nil ]. - options := anAntlr4ElementOptionsNode. - self options notNil - ifTrue: [ self options parent: self ] -] - -{ #category : #generated } -Antlr4TerminalNode >> tokenVariables [ - ^ #(#nameToken #value) -] - -{ #category : #generated } -Antlr4TerminalNode >> value [ - ^ value -] - -{ #category : #generated } -Antlr4TerminalNode >> value: aSmaCCToken [ - value := aSmaCCToken -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4ThrowsSpecNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4ThrowsSpecNode.class.st deleted file mode 100644 index 6449721f6..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4ThrowsSpecNode.class.st +++ /dev/null @@ -1,62 +0,0 @@ -Class { - #name : #Antlr4ThrowsSpecNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'throwsToken', - 'nameTokens', - 'commas' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4ThrowsSpecNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitThrowsSpec: self -] - -{ #category : #generated } -Antlr4ThrowsSpecNode >> commas [ - ^ commas -] - -{ #category : #generated } -Antlr4ThrowsSpecNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -Antlr4ThrowsSpecNode >> compositeTokenVariables [ - ^ #(#nameTokens #commas) -] - -{ #category : #'generated-initialize-release' } -Antlr4ThrowsSpecNode >> initialize [ - super initialize. - nameTokens := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -Antlr4ThrowsSpecNode >> nameTokens [ - ^ nameTokens -] - -{ #category : #generated } -Antlr4ThrowsSpecNode >> nameTokens: anOrderedCollection [ - nameTokens := anOrderedCollection -] - -{ #category : #generated } -Antlr4ThrowsSpecNode >> throwsToken [ - ^ throwsToken -] - -{ #category : #generated } -Antlr4ThrowsSpecNode >> throwsToken: aSmaCCToken [ - throwsToken := aSmaCCToken -] - -{ #category : #generated } -Antlr4ThrowsSpecNode >> tokenVariables [ - ^ #(#throwsToken) -] diff --git a/src/SmaCC_Antlr_Parser/Antlr4TokensSpecNode.class.st b/src/SmaCC_Antlr_Parser/Antlr4TokensSpecNode.class.st deleted file mode 100644 index 6e719f48f..000000000 --- a/src/SmaCC_Antlr_Parser/Antlr4TokensSpecNode.class.st +++ /dev/null @@ -1,84 +0,0 @@ -Class { - #name : #Antlr4TokensSpecNode, - #superclass : #Antlr4GrammarNode, - #instVars : [ - 'tokensToken', - 'leftBrace', - 'nameTokens', - 'commas', - 'rightBrace' - ], - #category : #'SmaCC_Antlr_Parser' -} - -{ #category : #generated } -Antlr4TokensSpecNode >> acceptVisitor: aGrammarVisitor [ - ^ aGrammarVisitor visitTokensSpec: self -] - -{ #category : #generated } -Antlr4TokensSpecNode >> commas [ - ^ commas -] - -{ #category : #generated } -Antlr4TokensSpecNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -Antlr4TokensSpecNode >> compositeTokenVariables [ - ^ #(#nameTokens #commas) -] - -{ #category : #'generated-initialize-release' } -Antlr4TokensSpecNode >> initialize [ - super initialize. - nameTokens := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -Antlr4TokensSpecNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -Antlr4TokensSpecNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -Antlr4TokensSpecNode >> nameTokens [ - ^ nameTokens -] - -{ #category : #generated } -Antlr4TokensSpecNode >> nameTokens: anOrderedCollection [ - nameTokens := anOrderedCollection -] - -{ #category : #generated } -Antlr4TokensSpecNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -Antlr4TokensSpecNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] - -{ #category : #generated } -Antlr4TokensSpecNode >> tokenVariables [ - ^ #(#tokensToken #leftBrace #rightBrace) -] - -{ #category : #generated } -Antlr4TokensSpecNode >> tokensToken [ - ^ tokensToken -] - -{ #category : #generated } -Antlr4TokensSpecNode >> tokensToken: aSmaCCToken [ - tokensToken := aSmaCCToken -] diff --git a/src/SmaCC_Antlr_Parser/package.st b/src/SmaCC_Antlr_Parser/package.st deleted file mode 100644 index 0001292cd..000000000 --- a/src/SmaCC_Antlr_Parser/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_Antlr_Parser' } diff --git a/src/SmaCC_CSV_Parser/CSVFileNode.class.st b/src/SmaCC_CSV_Parser/CSVFileNode.class.st deleted file mode 100644 index 681ce4a2a..000000000 --- a/src/SmaCC_CSV_Parser/CSVFileNode.class.st +++ /dev/null @@ -1,53 +0,0 @@ -Class { - #name : #CSVFileNode, - #superclass : #CSVParseNode, - #instVars : [ - 'lines', - 'eols' - ], - #category : #'SmaCC_CSV_Parser' -} - -{ #category : #generated } -CSVFileNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitFile: self -] - -{ #category : #generated } -CSVFileNode >> compositeNodeVariables [ - ^ #(#lines) -] - -{ #category : #generated } -CSVFileNode >> compositeTokenVariables [ - ^ #(#eols) -] - -{ #category : #generated } -CSVFileNode >> eols [ - ^ eols -] - -{ #category : #generated } -CSVFileNode >> eols: anOrderedCollection [ - eols := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -CSVFileNode >> initialize [ - super initialize. - lines := OrderedCollection new: 2. - eols := OrderedCollection new: 2. -] - -{ #category : #generated } -CSVFileNode >> lines [ - ^ lines -] - -{ #category : #generated } -CSVFileNode >> lines: anOrderedCollection [ - self setParents: self lines to: nil. - lines := anOrderedCollection. - self setParents: self lines to: self -] diff --git a/src/SmaCC_CSV_Parser/CSVFileNodeVisitor.class.st b/src/SmaCC_CSV_Parser/CSVFileNodeVisitor.class.st deleted file mode 100644 index 600328276..000000000 --- a/src/SmaCC_CSV_Parser/CSVFileNodeVisitor.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #CSVFileNodeVisitor, - #superclass : #SmaCCParseNodeVisitor, - #category : #'SmaCC_CSV_Parser' -} - -{ #category : #generated } -CSVFileNodeVisitor >> visitFile: aFile [ - ^ self visitSmaCCParseNode: aFile -] - -{ #category : #generated } -CSVFileNodeVisitor >> visitLine: aLine [ - ^ self visitFile: aLine -] diff --git a/src/SmaCC_CSV_Parser/CSVLineNode.class.st b/src/SmaCC_CSV_Parser/CSVLineNode.class.st deleted file mode 100644 index e7a53e4ad..000000000 --- a/src/SmaCC_CSV_Parser/CSVLineNode.class.st +++ /dev/null @@ -1,46 +0,0 @@ -Class { - #name : #CSVLineNode, - #superclass : #CSVParseNode, - #instVars : [ - 'values', - 'commas' - ], - #category : #'SmaCC_CSV_Parser' -} - -{ #category : #generated } -CSVLineNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitLine: self -] - -{ #category : #generated } -CSVLineNode >> commas [ - ^ commas -] - -{ #category : #generated } -CSVLineNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -CSVLineNode >> compositeTokenVariables [ - ^ #(#values #commas) -] - -{ #category : #'generated-initialize-release' } -CSVLineNode >> initialize [ - super initialize. - values := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -CSVLineNode >> values [ - ^ values -] - -{ #category : #generated } -CSVLineNode >> values: anOrderedCollection [ - values := anOrderedCollection -] diff --git a/src/SmaCC_CSV_Parser/CSVParseNode.class.st b/src/SmaCC_CSV_Parser/CSVParseNode.class.st deleted file mode 100644 index d8d7c89f8..000000000 --- a/src/SmaCC_CSV_Parser/CSVParseNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #CSVParseNode, - #superclass : #SmaCCParseNode, - #category : #'SmaCC_CSV_Parser' -} - -{ #category : #generated } -CSVParseNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitParse: self -] diff --git a/src/SmaCC_CSV_Parser/CSVParseNodeVisitor.class.st b/src/SmaCC_CSV_Parser/CSVParseNodeVisitor.class.st deleted file mode 100644 index a87957e74..000000000 --- a/src/SmaCC_CSV_Parser/CSVParseNodeVisitor.class.st +++ /dev/null @@ -1,20 +0,0 @@ -Class { - #name : #CSVParseNodeVisitor, - #superclass : #SmaCCParseNodeVisitor, - #category : #'SmaCC_CSV_Parser' -} - -{ #category : #generated } -CSVParseNodeVisitor >> visitFile: aFile [ - ^ self visitParse: aFile -] - -{ #category : #generated } -CSVParseNodeVisitor >> visitLine: aLine [ - ^ self visitParse: aLine -] - -{ #category : #generated } -CSVParseNodeVisitor >> visitParse: aParse [ - ^ self visitSmaCCParseNode: aParse -] diff --git a/src/SmaCC_CSV_Parser/CSVParser.class.st b/src/SmaCC_CSV_Parser/CSVParser.class.st deleted file mode 100644 index f7a29eb88..000000000 --- a/src/SmaCC_CSV_Parser/CSVParser.class.st +++ /dev/null @@ -1,219 +0,0 @@ -Class { - #name : #CSVParser, - #superclass : #SmaCCParser, - #category : #'SmaCC_CSV_Parser' -} - -{ #category : #'generated-accessing' } -CSVParser class >> cacheId [ - ^'2019-04-15T17:15:42.810828-05:00' -] - -{ #category : #private } -CSVParser class >> dataValueFrom: aSmaCCToken [ - | string | - string := aSmaCCToken value. - string isEmpty - ifTrue: [ ^ nil ]. - string first = $' - ifTrue: - [ ^ (string copyFrom: 2 to: string size - 1) - copyReplaceAll: '''''' - with: '''' ]. - string first = $" - ifTrue: - [ ^ (string copyFrom: 2 to: string size - 1) - copyReplaceAll: '""' - with: '"' ]. - ^ string -] - -{ #category : #generated } -CSVParser class >> definitionComment [ -"%prefix CSV; -%suffix Node; - -%root Parse; - - - - : [^\""\'\,\r\n] [^\,\r\n]* - | (\"" [^\""]* \"") + - | (\' [^\']* \') + - ; - - : \r \n? | \n - ; - -File - : Lines {{}} - ; -Lines - : Line 'line' - | Lines 'eol' Line 'line' - ; -Line - : Value 'value' {{}} - | Line "","" 'comma' Value 'value' {{}} - ; -Value - : - | Missing - ; -Missing - : {SmaCCToken value: '' start: self position ids: #()} - ;" -] - -{ #category : #'file types' } -CSVParser class >> fileExtension [ - ^ '.csv' -] - -{ #category : #'file types' } -CSVParser class >> fileExtensionType [ - ^ 'CSV files' -] - -{ #category : #parsing } -CSVParser class >> parseFileWithHeader: aFilename [ - | lines headerLine headerNames | - lines := self parseFileWithoutHeader: aFilename. - lines isEmpty - ifTrue: [ ^ lines ]. - headerLine := lines removeFirst. - headerNames := (1 to: headerLine size) - collect: [ :i | (headerLine at: i) ifNil: [ 'Column ' , i printString ] ]. - 1 to: lines size do: - [ :i | - | line dict | - dict := Dictionary new: headerNames size. - headerNames - with: (lines at: i) - do: [ :header :value | dict at: header put: value ]. - lines at: i put: dict ]. - ^ lines -] - -{ #category : #parsing } -CSVParser class >> parseFileWithoutHeader: aFilename [ - | file maxSize lines | - file := self parseFile: aFilename. - maxSize := file lines - inject: 0 - into: [ :sum :each | sum max: each values size ]. - lines := file lines - collect: - [ :each | - | line | - line := Array new: maxSize. - 1 to: each values size do: [ :i | line at: i put: (self dataValueFrom: (each values at: i)) ]. - line ]. - (file lines size > 0 - and: - [ file lines last commas isEmpty - and: [ (self dataValueFrom: file lines last values first) isNil ] ]) - ifTrue: [ lines removeLast ]. - ^ lines -] - -{ #category : #generated } -CSVParser class >> reduceTable [ -^#( - #(9 0 #reduceActionForMissing1: 344065 false ) - #(8 1 #liftFirstValue: 312321 false ) - #(5 1 #reduceActionForFile1: 156673 false ) - #(6 1 #reduceActionForLines1: 179201 false ) - #(7 1 #reduceActionForLine1: 241665 false ) - #(8 1 #liftFirstValue: 312322 false ) - #(6 3 #reduceActionForLines2: 179202 false ) - #(7 3 #reduceActionForLine2: 241666 false ) - ). -] - -{ #category : #'generated-accessing' } -CSVParser class >> scannerClass [ - ^CSVScanner -] - -{ #category : #generated } -CSVParser class >> startingStateForFile [ - ^ 1 -] - -{ #category : #generated } -CSVParser class >> symbolNames [ - ^ #('","' '' '' 'B e g i n' 'File' 'Lines' 'Line' 'Value' 'Missing' 'E O F' 'error') -] - -{ #category : #generated } -CSVParser class >> symbolTypes [ - ^ #(#SmaCCToken #SmaCCToken #SmaCCToken #CSVFileNode #CSVFileNode #OrderedCollection #CSVLineNode #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCErrorNode) -] - -{ #category : #generated } -CSVParser class >> transitionTable [ -^#( -#[1 0 6 0 1 0 25 0 2 0 6 0 3 0 13 0 5 0 17 0 6 0 21 0 7 0 25 0 8 0 25 0 9 0 6 0 10] -#[0 0 10 0 1 0 3 0 10] -#[0 0 0 0 10] -#[1 0 33 0 3 0 14 0 10] -#[1 0 37 0 1 0 18 0 3 0 18 0 10] -#[0 0 22 0 1 0 3 0 10] -#[0 0 26 0 1 0 3 0 10] -#[1 0 6 0 1 0 25 0 2 0 6 0 3 0 41 0 7 0 25 0 8 0 25 0 9 0 6 0 10] -#[1 0 6 0 1 0 45 0 2 0 6 0 3 0 45 0 8 0 45 0 9 0 6 0 10] -#[1 0 37 0 1 0 30 0 3 0 30 0 10] -#[0 0 34 0 1 0 3 0 10] - ). -] - -{ #category : #'generated-reduction actions' } -CSVParser >> reduceActionForFile1: nodes [ - | result | - result := CSVFileNode new. - result addNodes: ((nodes at: 1) at: 1) to: result lines. - result addTokens: ((nodes at: 1) at: 2) to: result eols. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSVParser >> reduceActionForLine1: nodes [ - | result | - result := CSVLineNode new. - result addToken: (nodes at: 1) to: result values. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSVParser >> reduceActionForLine2: nodes [ - | result | - result := nodes at: 1. - result addToken: (nodes at: 2) to: result commas. - result addToken: (nodes at: 3) to: result values. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSVParser >> reduceActionForLines1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSVParser >> reduceActionForLines2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 2). - self add: (nodes at: 3) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSVParser >> reduceActionForMissing1: nodes [ - ^ SmaCCToken value: '' start: self position ids: #() -] diff --git a/src/SmaCC_CSV_Parser/CSVScanner.class.st b/src/SmaCC_CSV_Parser/CSVScanner.class.st deleted file mode 100644 index 2270524ec..000000000 --- a/src/SmaCC_CSV_Parser/CSVScanner.class.st +++ /dev/null @@ -1,66 +0,0 @@ -Class { - #name : #CSVScanner, - #superclass : #SmaCCScanner, - #category : #'SmaCC_CSV_Parser' -} - -{ #category : #generated } -CSVScanner >> emptySymbolTokenId [ - ^ 10 -] - -{ #category : #generated } -CSVScanner >> errorTokenId [ - ^ 11 -] - -{ #category : #generated } -CSVScanner >> scan1 [ - [ self step. - currentCharacter == $" - ifTrue: [ self recordMatch: #(2). - self step. - currentCharacter == $" - ifTrue: [ ^ self scan1 ]. - ^ self reportLastMatch ]. - true ] whileTrue -] - -{ #category : #generated } -CSVScanner >> scan2 [ - [ self step. - currentCharacter == $' - ifTrue: [ self recordMatch: #(2). - self step. - currentCharacter == $' - ifTrue: [ ^ self scan2 ]. - ^ self reportLastMatch ]. - true ] whileTrue -] - -{ #category : #generated } -CSVScanner >> scanForToken [ - self step. - currentCharacter == Character lf - ifTrue: [ ^ self recordAndReportMatch: #(3) ]. - currentCharacter == Character cr - ifTrue: [ self recordMatch: #(3). - self step. - currentCharacter == Character lf - ifTrue: [ ^ self recordAndReportMatch: #(3) ]. - ^ self reportLastMatch ]. - currentCharacter == $" - ifTrue: [ ^ self scan1 ]. - currentCharacter == $' - ifTrue: [ ^ self scan2 ]. - currentCharacter == $, - ifTrue: [ ^ self recordAndReportMatch: #(1) ]. - true - ifTrue: [ [ self recordMatch: #(2). - self step. - currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: Character newPage) - or: [ (currentCharacter between: (Character value: 14) and: $+) - or: [ currentCharacter >= $- ] ] ] ] whileTrue ]. - ^ self reportLastMatch -] diff --git a/src/SmaCC_CSV_Parser/package.st b/src/SmaCC_CSV_Parser/package.st deleted file mode 100644 index 21a221d40..000000000 --- a/src/SmaCC_CSV_Parser/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_CSV_Parser' } diff --git a/src/SmaCC_CSharp/CSAddAccessorDeclarationNode.class.st b/src/SmaCC_CSharp/CSAddAccessorDeclarationNode.class.st deleted file mode 100644 index f76715a9c..000000000 --- a/src/SmaCC_CSharp/CSAddAccessorDeclarationNode.class.st +++ /dev/null @@ -1,72 +0,0 @@ -Class { - #name : #CSAddAccessorDeclarationNode, - #superclass : #CSProgramNode, - #instVars : [ - '_attributes', - 'addToken', - 'block' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSAddAccessorDeclarationNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSAddAccessorDeclarationNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSAddAccessorDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitAddAccessorDeclaration: self -] - -{ #category : #generated } -CSAddAccessorDeclarationNode >> addToken [ - ^ addToken -] - -{ #category : #generated } -CSAddAccessorDeclarationNode >> addToken: aSmaCCToken [ - addToken := aSmaCCToken -] - -{ #category : #generated } -CSAddAccessorDeclarationNode >> block [ - ^ block -] - -{ #category : #generated } -CSAddAccessorDeclarationNode >> block: aCSBlockStatementNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aCSBlockStatementNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -CSAddAccessorDeclarationNode >> compositeNodeVariables [ - ^ #(#_attributes) -] - -{ #category : #'generated-initialize-release' } -CSAddAccessorDeclarationNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. -] - -{ #category : #generated } -CSAddAccessorDeclarationNode >> nodeVariables [ - ^ #(#block) -] - -{ #category : #generated } -CSAddAccessorDeclarationNode >> tokenVariables [ - ^ #(#addToken) -] diff --git a/src/SmaCC_CSharp/CSAnonymousFunctionParameterNode.class.st b/src/SmaCC_CSharp/CSAnonymousFunctionParameterNode.class.st deleted file mode 100644 index dc61c9c69..000000000 --- a/src/SmaCC_CSharp/CSAnonymousFunctionParameterNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #CSAnonymousFunctionParameterNode, - #superclass : #CSProgramNode, - #instVars : [ - 'modifier', - 'type', - 'name' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSAnonymousFunctionParameterNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitAnonymousFunctionParameter: self -] - -{ #category : #generated } -CSAnonymousFunctionParameterNode >> modifier [ - ^ modifier -] - -{ #category : #generated } -CSAnonymousFunctionParameterNode >> modifier: aSmaCCToken [ - modifier := aSmaCCToken -] - -{ #category : #generated } -CSAnonymousFunctionParameterNode >> name [ - ^ name -] - -{ #category : #generated } -CSAnonymousFunctionParameterNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -CSAnonymousFunctionParameterNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -CSAnonymousFunctionParameterNode >> tokenVariables [ - ^ #(#modifier #name) -] - -{ #category : #generated } -CSAnonymousFunctionParameterNode >> type [ - ^ type -] - -{ #category : #generated } -CSAnonymousFunctionParameterNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSAnonymousMethodExpressionNode.class.st b/src/SmaCC_CSharp/CSAnonymousMethodExpressionNode.class.st deleted file mode 100644 index df7746287..000000000 --- a/src/SmaCC_CSharp/CSAnonymousMethodExpressionNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #CSAnonymousMethodExpressionNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'delegateToken', - 'signature', - 'block' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSAnonymousMethodExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitAnonymousMethodExpression: self -] - -{ #category : #generated } -CSAnonymousMethodExpressionNode >> block [ - ^ block -] - -{ #category : #generated } -CSAnonymousMethodExpressionNode >> block: aCSBlockStatementNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aCSBlockStatementNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -CSAnonymousMethodExpressionNode >> delegateToken [ - ^ delegateToken -] - -{ #category : #generated } -CSAnonymousMethodExpressionNode >> delegateToken: aSmaCCToken [ - delegateToken := aSmaCCToken -] - -{ #category : #generated } -CSAnonymousMethodExpressionNode >> nodeVariables [ - ^ #(#signature #block) -] - -{ #category : #generated } -CSAnonymousMethodExpressionNode >> signature [ - ^ signature -] - -{ #category : #generated } -CSAnonymousMethodExpressionNode >> signature: aCSExplicitAnonymousFunctionSignatureNode [ - self signature notNil - ifTrue: [ self signature parent: nil ]. - signature := aCSExplicitAnonymousFunctionSignatureNode. - self signature notNil - ifTrue: [ self signature parent: self ] -] - -{ #category : #generated } -CSAnonymousMethodExpressionNode >> tokenVariables [ - ^ #(#delegateToken) -] diff --git a/src/SmaCC_CSharp/CSAnonymousObjectCreationExpressionNode.class.st b/src/SmaCC_CSharp/CSAnonymousObjectCreationExpressionNode.class.st deleted file mode 100644 index 3ed3de0b2..000000000 --- a/src/SmaCC_CSharp/CSAnonymousObjectCreationExpressionNode.class.st +++ /dev/null @@ -1,91 +0,0 @@ -Class { - #name : #CSAnonymousObjectCreationExpressionNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'newToken', - 'leftBraceToken', - 'declarators', - 'commaTokens', - 'rightBraceToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSAnonymousObjectCreationExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitAnonymousObjectCreationExpression: self -] - -{ #category : #generated } -CSAnonymousObjectCreationExpressionNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -CSAnonymousObjectCreationExpressionNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -CSAnonymousObjectCreationExpressionNode >> compositeNodeVariables [ - ^ #(#declarators) -] - -{ #category : #generated } -CSAnonymousObjectCreationExpressionNode >> declarators [ - ^ declarators -] - -{ #category : #generated } -CSAnonymousObjectCreationExpressionNode >> declarators: anOrderedCollection [ - self setParents: self declarators to: nil. - declarators := anOrderedCollection. - self setParents: self declarators to: self -] - -{ #category : #generated } -CSAnonymousObjectCreationExpressionNode >> ignoredCompositeTokenVariables [ - ^ #(#commaTokens #_leftParens #_rightParens) -] - -{ #category : #'generated-initialize-release' } -CSAnonymousObjectCreationExpressionNode >> initialize [ - super initialize. - declarators := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -CSAnonymousObjectCreationExpressionNode >> leftBraceToken [ - ^ leftBraceToken -] - -{ #category : #generated } -CSAnonymousObjectCreationExpressionNode >> leftBraceToken: aSmaCCToken [ - leftBraceToken := aSmaCCToken -] - -{ #category : #generated } -CSAnonymousObjectCreationExpressionNode >> newToken [ - ^ newToken -] - -{ #category : #generated } -CSAnonymousObjectCreationExpressionNode >> newToken: aSmaCCToken [ - newToken := aSmaCCToken -] - -{ #category : #generated } -CSAnonymousObjectCreationExpressionNode >> rightBraceToken [ - ^ rightBraceToken -] - -{ #category : #generated } -CSAnonymousObjectCreationExpressionNode >> rightBraceToken: aSmaCCToken [ - rightBraceToken := aSmaCCToken -] - -{ #category : #generated } -CSAnonymousObjectCreationExpressionNode >> tokenVariables [ - ^ #(#newToken #leftBraceToken #rightBraceToken) -] diff --git a/src/SmaCC_CSharp/CSArgumentNode.class.st b/src/SmaCC_CSharp/CSArgumentNode.class.st deleted file mode 100644 index 16948bead..000000000 --- a/src/SmaCC_CSharp/CSArgumentNode.class.st +++ /dev/null @@ -1,81 +0,0 @@ -Class { - #name : #CSArgumentNode, - #superclass : #CSProgramNode, - #instVars : [ - 'identifier', - 'colonToken', - 'expression', - 'refToken', - 'outToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSArgumentNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitArgument: self -] - -{ #category : #generated } -CSArgumentNode >> colonToken [ - ^ colonToken -] - -{ #category : #generated } -CSArgumentNode >> colonToken: aSmaCCToken [ - colonToken := aSmaCCToken -] - -{ #category : #generated } -CSArgumentNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSArgumentNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSArgumentNode >> identifier [ - ^ identifier -] - -{ #category : #generated } -CSArgumentNode >> identifier: aSmaCCToken [ - identifier := aSmaCCToken -] - -{ #category : #generated } -CSArgumentNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -CSArgumentNode >> outToken [ - ^ outToken -] - -{ #category : #generated } -CSArgumentNode >> outToken: aSmaCCToken [ - outToken := aSmaCCToken -] - -{ #category : #generated } -CSArgumentNode >> refToken [ - ^ refToken -] - -{ #category : #generated } -CSArgumentNode >> refToken: aSmaCCToken [ - refToken := aSmaCCToken -] - -{ #category : #generated } -CSArgumentNode >> tokenVariables [ - ^ #(#identifier #colonToken #refToken #outToken) -] diff --git a/src/SmaCC_CSharp/CSArrayCreationExpressionNode.class.st b/src/SmaCC_CSharp/CSArrayCreationExpressionNode.class.st deleted file mode 100644 index e6b214339..000000000 --- a/src/SmaCC_CSharp/CSArrayCreationExpressionNode.class.st +++ /dev/null @@ -1,140 +0,0 @@ -Class { - #name : #CSArrayCreationExpressionNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'newToken', - 'type', - 'leftBracketToken', - 'expressions', - 'commaTokens', - 'rightBracketToken', - 'rankSpecifiers', - 'arrayInitializer' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSArrayCreationExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitArrayCreationExpression: self -] - -{ #category : #generated } -CSArrayCreationExpressionNode >> arrayInitializer [ - ^ arrayInitializer -] - -{ #category : #generated } -CSArrayCreationExpressionNode >> arrayInitializer: aCSArrayInitializerNode [ - self arrayInitializer notNil - ifTrue: [ self arrayInitializer parent: nil ]. - arrayInitializer := aCSArrayInitializerNode. - self arrayInitializer notNil - ifTrue: [ self arrayInitializer parent: self ] -] - -{ #category : #generated } -CSArrayCreationExpressionNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -CSArrayCreationExpressionNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -CSArrayCreationExpressionNode >> compositeNodeVariables [ - ^ #(#expressions #rankSpecifiers) -] - -{ #category : #generated } -CSArrayCreationExpressionNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -CSArrayCreationExpressionNode >> expressions: anOrderedCollection [ - self setParents: self expressions to: nil. - expressions := anOrderedCollection. - self setParents: self expressions to: self -] - -{ #category : #generated } -CSArrayCreationExpressionNode >> ignoredCompositeTokenVariables [ - ^ #(#commaTokens #_leftParens #_rightParens) -] - -{ #category : #'generated-initialize-release' } -CSArrayCreationExpressionNode >> initialize [ - super initialize. - expressions := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - rankSpecifiers := OrderedCollection new: 2. -] - -{ #category : #generated } -CSArrayCreationExpressionNode >> leftBracketToken [ - ^ leftBracketToken -] - -{ #category : #generated } -CSArrayCreationExpressionNode >> leftBracketToken: aSmaCCToken [ - leftBracketToken := aSmaCCToken -] - -{ #category : #generated } -CSArrayCreationExpressionNode >> newToken [ - ^ newToken -] - -{ #category : #generated } -CSArrayCreationExpressionNode >> newToken: aSmaCCToken [ - newToken := aSmaCCToken -] - -{ #category : #generated } -CSArrayCreationExpressionNode >> nodeVariables [ - ^ #(#type #arrayInitializer) -] - -{ #category : #generated } -CSArrayCreationExpressionNode >> rankSpecifiers [ - ^ rankSpecifiers -] - -{ #category : #generated } -CSArrayCreationExpressionNode >> rankSpecifiers: anOrderedCollection [ - self setParents: self rankSpecifiers to: nil. - rankSpecifiers := anOrderedCollection. - self setParents: self rankSpecifiers to: self -] - -{ #category : #generated } -CSArrayCreationExpressionNode >> rightBracketToken [ - ^ rightBracketToken -] - -{ #category : #generated } -CSArrayCreationExpressionNode >> rightBracketToken: aSmaCCToken [ - rightBracketToken := aSmaCCToken -] - -{ #category : #generated } -CSArrayCreationExpressionNode >> tokenVariables [ - ^ #(#newToken #leftBracketToken #rightBracketToken) -] - -{ #category : #generated } -CSArrayCreationExpressionNode >> type [ - ^ type -] - -{ #category : #generated } -CSArrayCreationExpressionNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSArrayInitializerNode.class.st b/src/SmaCC_CSharp/CSArrayInitializerNode.class.st deleted file mode 100644 index 743515276..000000000 --- a/src/SmaCC_CSharp/CSArrayInitializerNode.class.st +++ /dev/null @@ -1,80 +0,0 @@ -Class { - #name : #CSArrayInitializerNode, - #superclass : #CSProgramNode, - #instVars : [ - 'leftBraceToken', - 'initializers', - 'commaTokens', - 'rightBraceToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSArrayInitializerNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitArrayInitializer: self -] - -{ #category : #generated } -CSArrayInitializerNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -CSArrayInitializerNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -CSArrayInitializerNode >> compositeNodeVariables [ - ^ #(#initializers) -] - -{ #category : #generated } -CSArrayInitializerNode >> ignoredCompositeTokenVariables [ - ^ #(#commaTokens) -] - -{ #category : #'generated-initialize-release' } -CSArrayInitializerNode >> initialize [ - super initialize. - initializers := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -CSArrayInitializerNode >> initializers [ - ^ initializers -] - -{ #category : #generated } -CSArrayInitializerNode >> initializers: anOrderedCollection [ - self setParents: self initializers to: nil. - initializers := anOrderedCollection. - self setParents: self initializers to: self -] - -{ #category : #generated } -CSArrayInitializerNode >> leftBraceToken [ - ^ leftBraceToken -] - -{ #category : #generated } -CSArrayInitializerNode >> leftBraceToken: aSmaCCToken [ - leftBraceToken := aSmaCCToken -] - -{ #category : #generated } -CSArrayInitializerNode >> rightBraceToken [ - ^ rightBraceToken -] - -{ #category : #generated } -CSArrayInitializerNode >> rightBraceToken: aSmaCCToken [ - rightBraceToken := aSmaCCToken -] - -{ #category : #generated } -CSArrayInitializerNode >> tokenVariables [ - ^ #(#leftBraceToken #rightBraceToken) -] diff --git a/src/SmaCC_CSharp/CSArrayParameterNode.class.st b/src/SmaCC_CSharp/CSArrayParameterNode.class.st deleted file mode 100644 index 64e204ebd..000000000 --- a/src/SmaCC_CSharp/CSArrayParameterNode.class.st +++ /dev/null @@ -1,83 +0,0 @@ -Class { - #name : #CSArrayParameterNode, - #superclass : #CSProgramNode, - #instVars : [ - '_attributes', - 'paramsToken', - 'type', - 'name' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSArrayParameterNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSArrayParameterNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSArrayParameterNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitArrayParameter: self -] - -{ #category : #generated } -CSArrayParameterNode >> compositeNodeVariables [ - ^ #(#_attributes) -] - -{ #category : #'generated-initialize-release' } -CSArrayParameterNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. -] - -{ #category : #generated } -CSArrayParameterNode >> name [ - ^ name -] - -{ #category : #generated } -CSArrayParameterNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -CSArrayParameterNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -CSArrayParameterNode >> paramsToken [ - ^ paramsToken -] - -{ #category : #generated } -CSArrayParameterNode >> paramsToken: aSmaCCToken [ - paramsToken := aSmaCCToken -] - -{ #category : #generated } -CSArrayParameterNode >> tokenVariables [ - ^ #(#paramsToken #name) -] - -{ #category : #generated } -CSArrayParameterNode >> type [ - ^ type -] - -{ #category : #generated } -CSArrayParameterNode >> type: aCSArrayTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSArrayTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSArrayTypeNode.class.st b/src/SmaCC_CSharp/CSArrayTypeNode.class.st deleted file mode 100644 index da57bc6ee..000000000 --- a/src/SmaCC_CSharp/CSArrayTypeNode.class.st +++ /dev/null @@ -1,56 +0,0 @@ -Class { - #name : #CSArrayTypeNode, - #superclass : #CSTypeNode, - #instVars : [ - 'type', - 'rankSpecifiers' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSArrayTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitArrayType: self -] - -{ #category : #generated } -CSArrayTypeNode >> compositeNodeVariables [ - ^ #(#rankSpecifiers) -] - -{ #category : #'generated-initialize-release' } -CSArrayTypeNode >> initialize [ - super initialize. - rankSpecifiers := OrderedCollection new: 2. -] - -{ #category : #generated } -CSArrayTypeNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -CSArrayTypeNode >> rankSpecifiers [ - ^ rankSpecifiers -] - -{ #category : #generated } -CSArrayTypeNode >> rankSpecifiers: anOrderedCollection [ - self setParents: self rankSpecifiers to: nil. - rankSpecifiers := anOrderedCollection. - self setParents: self rankSpecifiers to: self -] - -{ #category : #generated } -CSArrayTypeNode >> type [ - ^ type -] - -{ #category : #generated } -CSArrayTypeNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSAssignmentNode.class.st b/src/SmaCC_CSharp/CSAssignmentNode.class.st deleted file mode 100644 index 71f82887a..000000000 --- a/src/SmaCC_CSharp/CSAssignmentNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #CSAssignmentNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'lhs', - 'operator', - 'rhs' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSAssignmentNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitAssignment: self -] - -{ #category : #generated } -CSAssignmentNode >> lhs [ - ^ lhs -] - -{ #category : #generated } -CSAssignmentNode >> lhs: aCSExpressionNode [ - self lhs notNil - ifTrue: [ self lhs parent: nil ]. - lhs := aCSExpressionNode. - self lhs notNil - ifTrue: [ self lhs parent: self ] -] - -{ #category : #generated } -CSAssignmentNode >> nodeVariables [ - ^ #(#lhs #rhs) -] - -{ #category : #generated } -CSAssignmentNode >> operator [ - ^ operator -] - -{ #category : #generated } -CSAssignmentNode >> operator: aSmaCCToken [ - operator := aSmaCCToken -] - -{ #category : #generated } -CSAssignmentNode >> rhs [ - ^ rhs -] - -{ #category : #generated } -CSAssignmentNode >> rhs: aCSExpressionNode [ - self rhs notNil - ifTrue: [ self rhs parent: nil ]. - rhs := aCSExpressionNode. - self rhs notNil - ifTrue: [ self rhs parent: self ] -] - -{ #category : #generated } -CSAssignmentNode >> tokenVariables [ - ^ #(#operator) -] diff --git a/src/SmaCC_CSharp/CSAttributeNode.class.st b/src/SmaCC_CSharp/CSAttributeNode.class.st deleted file mode 100644 index 3c6061c54..000000000 --- a/src/SmaCC_CSharp/CSAttributeNode.class.st +++ /dev/null @@ -1,102 +0,0 @@ -Class { - #name : #CSAttributeNode, - #superclass : #CSProgramNode, - #instVars : [ - 'leftBracket', - 'target', - 'colon', - 'attributeValues', - 'commas', - 'rightBracket' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSAttributeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitAttribute: self -] - -{ #category : #generated } -CSAttributeNode >> attributeValues [ - ^ attributeValues -] - -{ #category : #generated } -CSAttributeNode >> attributeValues: anOrderedCollection [ - self setParents: self attributeValues to: nil. - attributeValues := anOrderedCollection. - self setParents: self attributeValues to: self -] - -{ #category : #generated } -CSAttributeNode >> colon [ - ^ colon -] - -{ #category : #generated } -CSAttributeNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -CSAttributeNode >> commas [ - ^ commas -] - -{ #category : #generated } -CSAttributeNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -CSAttributeNode >> compositeNodeVariables [ - ^ #(#attributeValues) -] - -{ #category : #generated } -CSAttributeNode >> compositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #'generated-initialize-release' } -CSAttributeNode >> initialize [ - super initialize. - attributeValues := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -CSAttributeNode >> leftBracket [ - ^ leftBracket -] - -{ #category : #generated } -CSAttributeNode >> leftBracket: aSmaCCToken [ - leftBracket := aSmaCCToken -] - -{ #category : #generated } -CSAttributeNode >> rightBracket [ - ^ rightBracket -] - -{ #category : #generated } -CSAttributeNode >> rightBracket: aSmaCCToken [ - rightBracket := aSmaCCToken -] - -{ #category : #generated } -CSAttributeNode >> target [ - ^ target -] - -{ #category : #generated } -CSAttributeNode >> target: aSmaCCToken [ - target := aSmaCCToken -] - -{ #category : #generated } -CSAttributeNode >> tokenVariables [ - ^ #(#leftBracket #target #colon #rightBracket) -] diff --git a/src/SmaCC_CSharp/CSAttributeValueNode.class.st b/src/SmaCC_CSharp/CSAttributeValueNode.class.st deleted file mode 100644 index 3c8404572..000000000 --- a/src/SmaCC_CSharp/CSAttributeValueNode.class.st +++ /dev/null @@ -1,100 +0,0 @@ -Class { - #name : #CSAttributeValueNode, - #superclass : #CSProgramNode, - #instVars : [ - 'name', - 'leftParen', - 'arguments', - 'commas', - 'rightParen' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSAttributeValueNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitAttributeValue: self -] - -{ #category : #generated } -CSAttributeValueNode >> arguments [ - ^ arguments -] - -{ #category : #generated } -CSAttributeValueNode >> arguments: anOrderedCollection [ - self setParents: self arguments to: nil. - arguments := anOrderedCollection. - self setParents: self arguments to: self -] - -{ #category : #generated } -CSAttributeValueNode >> commas [ - ^ commas -] - -{ #category : #generated } -CSAttributeValueNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -CSAttributeValueNode >> compositeNodeVariables [ - ^ #(#arguments) -] - -{ #category : #generated } -CSAttributeValueNode >> compositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #'generated-initialize-release' } -CSAttributeValueNode >> initialize [ - super initialize. - arguments := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -CSAttributeValueNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -CSAttributeValueNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -CSAttributeValueNode >> name [ - ^ name -] - -{ #category : #generated } -CSAttributeValueNode >> name: aCSTypeNode [ - self name notNil - ifTrue: [ self name parent: nil ]. - name := aCSTypeNode. - self name notNil - ifTrue: [ self name parent: self ] -] - -{ #category : #generated } -CSAttributeValueNode >> nodeVariables [ - ^ #(#name) -] - -{ #category : #generated } -CSAttributeValueNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -CSAttributeValueNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -CSAttributeValueNode >> tokenVariables [ - ^ #(#leftParen #rightParen) -] diff --git a/src/SmaCC_CSharp/CSAwaitExpressionNode.class.st b/src/SmaCC_CSharp/CSAwaitExpressionNode.class.st deleted file mode 100644 index a144175e4..000000000 --- a/src/SmaCC_CSharp/CSAwaitExpressionNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #CSAwaitExpressionNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'awaitToken', - 'expression' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSAwaitExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitAwaitExpression: self -] - -{ #category : #generated } -CSAwaitExpressionNode >> awaitToken [ - ^ awaitToken -] - -{ #category : #generated } -CSAwaitExpressionNode >> awaitToken: aSmaCCToken [ - awaitToken := aSmaCCToken -] - -{ #category : #generated } -CSAwaitExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSAwaitExpressionNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSAwaitExpressionNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -CSAwaitExpressionNode >> tokenVariables [ - ^ #(#awaitToken) -] diff --git a/src/SmaCC_CSharp/CSBaseAccessNode.class.st b/src/SmaCC_CSharp/CSBaseAccessNode.class.st deleted file mode 100644 index 2df5f6681..000000000 --- a/src/SmaCC_CSharp/CSBaseAccessNode.class.st +++ /dev/null @@ -1,113 +0,0 @@ -Class { - #name : #CSBaseAccessNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'baseToken', - 'periodToken', - 'identifier', - 'leftBracketToken', - 'expressions', - 'commaTokens', - 'rightBracketToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSBaseAccessNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitBaseAccess: self -] - -{ #category : #generated } -CSBaseAccessNode >> baseToken [ - ^ baseToken -] - -{ #category : #generated } -CSBaseAccessNode >> baseToken: aSmaCCToken [ - baseToken := aSmaCCToken -] - -{ #category : #generated } -CSBaseAccessNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -CSBaseAccessNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -CSBaseAccessNode >> compositeNodeVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -CSBaseAccessNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -CSBaseAccessNode >> expressions: anOrderedCollection [ - self setParents: self expressions to: nil. - expressions := anOrderedCollection. - self setParents: self expressions to: self -] - -{ #category : #generated } -CSBaseAccessNode >> identifier [ - ^ identifier -] - -{ #category : #generated } -CSBaseAccessNode >> identifier: aSmaCCToken [ - identifier := aSmaCCToken -] - -{ #category : #generated } -CSBaseAccessNode >> ignoredCompositeTokenVariables [ - ^ #(#commaTokens #_leftParens #_rightParens) -] - -{ #category : #'generated-initialize-release' } -CSBaseAccessNode >> initialize [ - super initialize. - expressions := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -CSBaseAccessNode >> leftBracketToken [ - ^ leftBracketToken -] - -{ #category : #generated } -CSBaseAccessNode >> leftBracketToken: aSmaCCToken [ - leftBracketToken := aSmaCCToken -] - -{ #category : #generated } -CSBaseAccessNode >> periodToken [ - ^ periodToken -] - -{ #category : #generated } -CSBaseAccessNode >> periodToken: aSmaCCToken [ - periodToken := aSmaCCToken -] - -{ #category : #generated } -CSBaseAccessNode >> rightBracketToken [ - ^ rightBracketToken -] - -{ #category : #generated } -CSBaseAccessNode >> rightBracketToken: aSmaCCToken [ - rightBracketToken := aSmaCCToken -] - -{ #category : #generated } -CSBaseAccessNode >> tokenVariables [ - ^ #(#baseToken #periodToken #identifier #leftBracketToken #rightBracketToken) -] diff --git a/src/SmaCC_CSharp/CSBaseExpressionNode.class.st b/src/SmaCC_CSharp/CSBaseExpressionNode.class.st deleted file mode 100644 index 34026cd95..000000000 --- a/src/SmaCC_CSharp/CSBaseExpressionNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #CSBaseExpressionNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'baseToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSBaseExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitBaseExpression: self -] - -{ #category : #generated } -CSBaseExpressionNode >> baseToken [ - ^ baseToken -] - -{ #category : #generated } -CSBaseExpressionNode >> baseToken: aSmaCCToken [ - baseToken := aSmaCCToken -] - -{ #category : #generated } -CSBaseExpressionNode >> tokenVariables [ - ^ #(#baseToken) -] diff --git a/src/SmaCC_CSharp/CSBinaryExpressionNode.class.st b/src/SmaCC_CSharp/CSBinaryExpressionNode.class.st deleted file mode 100644 index 5707883cb..000000000 --- a/src/SmaCC_CSharp/CSBinaryExpressionNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #CSBinaryExpressionNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'left', - 'operator', - 'right' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSBinaryExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitBinaryExpression: self -] - -{ #category : #generated } -CSBinaryExpressionNode >> left [ - ^ left -] - -{ #category : #generated } -CSBinaryExpressionNode >> left: aCSExpressionNode [ - self left notNil - ifTrue: [ self left parent: nil ]. - left := aCSExpressionNode. - self left notNil - ifTrue: [ self left parent: self ] -] - -{ #category : #generated } -CSBinaryExpressionNode >> nodeVariables [ - ^ #(#left #right) -] - -{ #category : #generated } -CSBinaryExpressionNode >> operator [ - ^ operator -] - -{ #category : #generated } -CSBinaryExpressionNode >> operator: aSmaCCToken [ - operator := aSmaCCToken -] - -{ #category : #generated } -CSBinaryExpressionNode >> right [ - ^ right -] - -{ #category : #generated } -CSBinaryExpressionNode >> right: aCSProgramNode [ - self right notNil - ifTrue: [ self right parent: nil ]. - right := aCSProgramNode. - self right notNil - ifTrue: [ self right parent: self ] -] - -{ #category : #generated } -CSBinaryExpressionNode >> tokenVariables [ - ^ #(#operator) -] diff --git a/src/SmaCC_CSharp/CSBlockStatementNode.class.st b/src/SmaCC_CSharp/CSBlockStatementNode.class.st deleted file mode 100644 index 1ba474f3f..000000000 --- a/src/SmaCC_CSharp/CSBlockStatementNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #CSBlockStatementNode, - #superclass : #CSStatementNode, - #instVars : [ - 'leftBraceToken', - 'statements', - 'rightBraceToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSBlockStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitBlockStatement: self -] - -{ #category : #generated } -CSBlockStatementNode >> compositeNodeVariables [ - ^ #(#statements) -] - -{ #category : #'generated-initialize-release' } -CSBlockStatementNode >> initialize [ - super initialize. - statements := OrderedCollection new: 2. -] - -{ #category : #generated } -CSBlockStatementNode >> leftBraceToken [ - ^ leftBraceToken -] - -{ #category : #generated } -CSBlockStatementNode >> leftBraceToken: aSmaCCToken [ - leftBraceToken := aSmaCCToken -] - -{ #category : #generated } -CSBlockStatementNode >> rightBraceToken [ - ^ rightBraceToken -] - -{ #category : #generated } -CSBlockStatementNode >> rightBraceToken: aSmaCCToken [ - rightBraceToken := aSmaCCToken -] - -{ #category : #generated } -CSBlockStatementNode >> statements [ - ^ statements -] - -{ #category : #generated } -CSBlockStatementNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] - -{ #category : #generated } -CSBlockStatementNode >> tokenVariables [ - ^ #(#leftBraceToken #rightBraceToken) -] diff --git a/src/SmaCC_CSharp/CSBooleanLiteralExpressionNode.class.st b/src/SmaCC_CSharp/CSBooleanLiteralExpressionNode.class.st deleted file mode 100644 index a68c6627e..000000000 --- a/src/SmaCC_CSharp/CSBooleanLiteralExpressionNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #CSBooleanLiteralExpressionNode, - #superclass : #CSLiteralExpressionNode, - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSBooleanLiteralExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitBooleanLiteralExpression: self -] diff --git a/src/SmaCC_CSharp/CSBreakStatementNode.class.st b/src/SmaCC_CSharp/CSBreakStatementNode.class.st deleted file mode 100644 index a63ee2cd0..000000000 --- a/src/SmaCC_CSharp/CSBreakStatementNode.class.st +++ /dev/null @@ -1,44 +0,0 @@ -Class { - #name : #CSBreakStatementNode, - #superclass : #CSStatementNode, - #instVars : [ - 'breakToken', - 'semicolonToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSBreakStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitBreakStatement: self -] - -{ #category : #generated } -CSBreakStatementNode >> breakToken [ - ^ breakToken -] - -{ #category : #generated } -CSBreakStatementNode >> breakToken: aSmaCCToken [ - breakToken := aSmaCCToken -] - -{ #category : #generated } -CSBreakStatementNode >> ignoredTokenVariables [ - ^ #(#semicolonToken) -] - -{ #category : #generated } -CSBreakStatementNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -CSBreakStatementNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] - -{ #category : #generated } -CSBreakStatementNode >> tokenVariables [ - ^ #(#breakToken) -] diff --git a/src/SmaCC_CSharp/CSCastExpressionNode.class.st b/src/SmaCC_CSharp/CSCastExpressionNode.class.st deleted file mode 100644 index f72a1acc8..000000000 --- a/src/SmaCC_CSharp/CSCastExpressionNode.class.st +++ /dev/null @@ -1,74 +0,0 @@ -Class { - #name : #CSCastExpressionNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'leftParenToken', - 'type', - 'rightParenToken', - 'expression' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSCastExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitCastExpression: self -] - -{ #category : #generated } -CSCastExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSCastExpressionNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSCastExpressionNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSCastExpressionNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSCastExpressionNode >> nodeVariables [ - ^ #(#type #expression) -] - -{ #category : #generated } -CSCastExpressionNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSCastExpressionNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSCastExpressionNode >> tokenVariables [ - ^ #(#leftParenToken #rightParenToken) -] - -{ #category : #generated } -CSCastExpressionNode >> type [ - ^ type -] - -{ #category : #generated } -CSCastExpressionNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSCatchClauseNode.class.st b/src/SmaCC_CSharp/CSCatchClauseNode.class.st deleted file mode 100644 index b1a669ab9..000000000 --- a/src/SmaCC_CSharp/CSCatchClauseNode.class.st +++ /dev/null @@ -1,111 +0,0 @@ -Class { - #name : #CSCatchClauseNode, - #superclass : #CSProgramNode, - #instVars : [ - 'catchToken', - 'leftParenToken', - 'type', - 'name', - 'rightParenToken', - 'filter', - 'block' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSCatchClauseNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitCatchClause: self -] - -{ #category : #generated } -CSCatchClauseNode >> block [ - ^ block -] - -{ #category : #generated } -CSCatchClauseNode >> block: aCSBlockStatementNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aCSBlockStatementNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -CSCatchClauseNode >> catchToken [ - ^ catchToken -] - -{ #category : #generated } -CSCatchClauseNode >> catchToken: aSmaCCToken [ - catchToken := aSmaCCToken -] - -{ #category : #generated } -CSCatchClauseNode >> filter [ - ^ filter -] - -{ #category : #generated } -CSCatchClauseNode >> filter: aCSExceptionFilterNode [ - self filter notNil - ifTrue: [ self filter parent: nil ]. - filter := aCSExceptionFilterNode. - self filter notNil - ifTrue: [ self filter parent: self ] -] - -{ #category : #generated } -CSCatchClauseNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSCatchClauseNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSCatchClauseNode >> name [ - ^ name -] - -{ #category : #generated } -CSCatchClauseNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -CSCatchClauseNode >> nodeVariables [ - ^ #(#type #filter #block) -] - -{ #category : #generated } -CSCatchClauseNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSCatchClauseNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSCatchClauseNode >> tokenVariables [ - ^ #(#catchToken #leftParenToken #name #rightParenToken) -] - -{ #category : #generated } -CSCatchClauseNode >> type [ - ^ type -] - -{ #category : #generated } -CSCatchClauseNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSCharacterLiteralExpressionNode.class.st b/src/SmaCC_CSharp/CSCharacterLiteralExpressionNode.class.st deleted file mode 100644 index 6b5da5003..000000000 --- a/src/SmaCC_CSharp/CSCharacterLiteralExpressionNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #CSCharacterLiteralExpressionNode, - #superclass : #CSLiteralExpressionNode, - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSCharacterLiteralExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitCharacterLiteralExpression: self -] diff --git a/src/SmaCC_CSharp/CSCheckedExpressionNode.class.st b/src/SmaCC_CSharp/CSCheckedExpressionNode.class.st deleted file mode 100644 index f8dc8b4d1..000000000 --- a/src/SmaCC_CSharp/CSCheckedExpressionNode.class.st +++ /dev/null @@ -1,70 +0,0 @@ -Class { - #name : #CSCheckedExpressionNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'checkedToken', - 'leftParenToken', - 'expression', - 'rightParenToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSCheckedExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitCheckedExpression: self -] - -{ #category : #generated } -CSCheckedExpressionNode >> checkedToken [ - ^ checkedToken -] - -{ #category : #generated } -CSCheckedExpressionNode >> checkedToken: aSmaCCToken [ - checkedToken := aSmaCCToken -] - -{ #category : #generated } -CSCheckedExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSCheckedExpressionNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSCheckedExpressionNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSCheckedExpressionNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSCheckedExpressionNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -CSCheckedExpressionNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSCheckedExpressionNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSCheckedExpressionNode >> tokenVariables [ - ^ #(#checkedToken #leftParenToken #rightParenToken) -] diff --git a/src/SmaCC_CSharp/CSCheckedStatementNode.class.st b/src/SmaCC_CSharp/CSCheckedStatementNode.class.st deleted file mode 100644 index ec8e47d4a..000000000 --- a/src/SmaCC_CSharp/CSCheckedStatementNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #CSCheckedStatementNode, - #superclass : #CSStatementNode, - #instVars : [ - 'checkedToken', - 'block' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSCheckedStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitCheckedStatement: self -] - -{ #category : #generated } -CSCheckedStatementNode >> block [ - ^ block -] - -{ #category : #generated } -CSCheckedStatementNode >> block: aCSBlockStatementNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aCSBlockStatementNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -CSCheckedStatementNode >> checkedToken [ - ^ checkedToken -] - -{ #category : #generated } -CSCheckedStatementNode >> checkedToken: aSmaCCToken [ - checkedToken := aSmaCCToken -] - -{ #category : #generated } -CSCheckedStatementNode >> nodeVariables [ - ^ #(#block) -] - -{ #category : #generated } -CSCheckedStatementNode >> tokenVariables [ - ^ #(#checkedToken) -] diff --git a/src/SmaCC_CSharp/CSClassDeclarationNode.class.st b/src/SmaCC_CSharp/CSClassDeclarationNode.class.st deleted file mode 100644 index d7460f372..000000000 --- a/src/SmaCC_CSharp/CSClassDeclarationNode.class.st +++ /dev/null @@ -1,225 +0,0 @@ -Class { - #name : #CSClassDeclarationNode, - #superclass : #CSDeclarationNode, - #instVars : [ - '_attributes', - 'modifiers', - 'partialToken', - 'classToken', - 'name', - 'typeParameters', - 'colonToken', - 'supertypes', - 'commas', - 'commaToken', - 'constraintClauses', - 'leftBraceToken', - 'declarations', - 'rightBraceToken', - 'semicolon' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSClassDeclarationNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSClassDeclarationNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSClassDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitClassDeclaration: self -] - -{ #category : #generated } -CSClassDeclarationNode >> classToken [ - ^ classToken -] - -{ #category : #generated } -CSClassDeclarationNode >> classToken: aSmaCCToken [ - classToken := aSmaCCToken -] - -{ #category : #generated } -CSClassDeclarationNode >> colonToken [ - ^ colonToken -] - -{ #category : #generated } -CSClassDeclarationNode >> colonToken: aSmaCCToken [ - colonToken := aSmaCCToken -] - -{ #category : #generated } -CSClassDeclarationNode >> commaToken [ - ^ commaToken -] - -{ #category : #generated } -CSClassDeclarationNode >> commaToken: aSmaCCToken [ - commaToken := aSmaCCToken -] - -{ #category : #generated } -CSClassDeclarationNode >> commas [ - ^ commas -] - -{ #category : #generated } -CSClassDeclarationNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -CSClassDeclarationNode >> compositeNodeVariables [ - ^ #(#_attributes #supertypes #constraintClauses #declarations) -] - -{ #category : #generated } -CSClassDeclarationNode >> compositeTokenVariables [ - ^ #(#modifiers #commas) -] - -{ #category : #generated } -CSClassDeclarationNode >> constraintClauses [ - ^ constraintClauses -] - -{ #category : #generated } -CSClassDeclarationNode >> constraintClauses: anOrderedCollection [ - self setParents: self constraintClauses to: nil. - constraintClauses := anOrderedCollection. - self setParents: self constraintClauses to: self -] - -{ #category : #generated } -CSClassDeclarationNode >> declarations [ - ^ declarations -] - -{ #category : #generated } -CSClassDeclarationNode >> declarations: anOrderedCollection [ - self setParents: self declarations to: nil. - declarations := anOrderedCollection. - self setParents: self declarations to: self -] - -{ #category : #generated } -CSClassDeclarationNode >> ignoredTokenVariables [ - ^ #(#commaToken) -] - -{ #category : #'generated-initialize-release' } -CSClassDeclarationNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. - modifiers := OrderedCollection new: 2. - supertypes := OrderedCollection new: 2. - commas := OrderedCollection new: 2. - constraintClauses := OrderedCollection new: 2. - declarations := OrderedCollection new: 2. -] - -{ #category : #generated } -CSClassDeclarationNode >> leftBraceToken [ - ^ leftBraceToken -] - -{ #category : #generated } -CSClassDeclarationNode >> leftBraceToken: aSmaCCToken [ - leftBraceToken := aSmaCCToken -] - -{ #category : #generated } -CSClassDeclarationNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -CSClassDeclarationNode >> modifiers: anOrderedCollection [ - modifiers := anOrderedCollection -] - -{ #category : #generated } -CSClassDeclarationNode >> name [ - ^ name -] - -{ #category : #generated } -CSClassDeclarationNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -CSClassDeclarationNode >> nodeVariables [ - ^ #(#typeParameters) -] - -{ #category : #generated } -CSClassDeclarationNode >> partialToken [ - ^ partialToken -] - -{ #category : #generated } -CSClassDeclarationNode >> partialToken: aSmaCCToken [ - partialToken := aSmaCCToken -] - -{ #category : #generated } -CSClassDeclarationNode >> rightBraceToken [ - ^ rightBraceToken -] - -{ #category : #generated } -CSClassDeclarationNode >> rightBraceToken: aSmaCCToken [ - rightBraceToken := aSmaCCToken -] - -{ #category : #generated } -CSClassDeclarationNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -CSClassDeclarationNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -CSClassDeclarationNode >> supertypes [ - ^ supertypes -] - -{ #category : #generated } -CSClassDeclarationNode >> supertypes: anOrderedCollection [ - self setParents: self supertypes to: nil. - supertypes := anOrderedCollection. - self setParents: self supertypes to: self -] - -{ #category : #generated } -CSClassDeclarationNode >> tokenVariables [ - ^ #(#partialToken #classToken #name #colonToken #leftBraceToken #rightBraceToken #semicolon) -] - -{ #category : #generated } -CSClassDeclarationNode >> typeParameters [ - ^ typeParameters -] - -{ #category : #generated } -CSClassDeclarationNode >> typeParameters: aCSTypeParameterListNode [ - self typeParameters notNil - ifTrue: [ self typeParameters parent: nil ]. - typeParameters := aCSTypeParameterListNode. - self typeParameters notNil - ifTrue: [ self typeParameters parent: self ] -] diff --git a/src/SmaCC_CSharp/CSCollectionInitializerNode.class.st b/src/SmaCC_CSharp/CSCollectionInitializerNode.class.st deleted file mode 100644 index 1d659c0bd..000000000 --- a/src/SmaCC_CSharp/CSCollectionInitializerNode.class.st +++ /dev/null @@ -1,80 +0,0 @@ -Class { - #name : #CSCollectionInitializerNode, - #superclass : #CSProgramNode, - #instVars : [ - 'leftBraceToken', - 'initializers', - 'commaTokens', - 'rightBraceToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSCollectionInitializerNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitCollectionInitializer: self -] - -{ #category : #generated } -CSCollectionInitializerNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -CSCollectionInitializerNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -CSCollectionInitializerNode >> compositeNodeVariables [ - ^ #(#initializers) -] - -{ #category : #generated } -CSCollectionInitializerNode >> ignoredCompositeTokenVariables [ - ^ #(#commaTokens) -] - -{ #category : #'generated-initialize-release' } -CSCollectionInitializerNode >> initialize [ - super initialize. - initializers := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -CSCollectionInitializerNode >> initializers [ - ^ initializers -] - -{ #category : #generated } -CSCollectionInitializerNode >> initializers: anOrderedCollection [ - self setParents: self initializers to: nil. - initializers := anOrderedCollection. - self setParents: self initializers to: self -] - -{ #category : #generated } -CSCollectionInitializerNode >> leftBraceToken [ - ^ leftBraceToken -] - -{ #category : #generated } -CSCollectionInitializerNode >> leftBraceToken: aSmaCCToken [ - leftBraceToken := aSmaCCToken -] - -{ #category : #generated } -CSCollectionInitializerNode >> rightBraceToken [ - ^ rightBraceToken -] - -{ #category : #generated } -CSCollectionInitializerNode >> rightBraceToken: aSmaCCToken [ - rightBraceToken := aSmaCCToken -] - -{ #category : #generated } -CSCollectionInitializerNode >> tokenVariables [ - ^ #(#leftBraceToken #rightBraceToken) -] diff --git a/src/SmaCC_CSharp/CSCompilationUnitNode.class.st b/src/SmaCC_CSharp/CSCompilationUnitNode.class.st deleted file mode 100644 index d64416718..000000000 --- a/src/SmaCC_CSharp/CSCompilationUnitNode.class.st +++ /dev/null @@ -1,64 +0,0 @@ -Class { - #name : #CSCompilationUnitNode, - #superclass : #CSProgramNode, - #instVars : [ - 'directives', - '_attributes', - 'declarations' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSCompilationUnitNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSCompilationUnitNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSCompilationUnitNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitCompilationUnit: self -] - -{ #category : #generated } -CSCompilationUnitNode >> compositeNodeVariables [ - ^ #(#directives #_attributes #declarations) -] - -{ #category : #generated } -CSCompilationUnitNode >> declarations [ - ^ declarations -] - -{ #category : #generated } -CSCompilationUnitNode >> declarations: anOrderedCollection [ - self setParents: self declarations to: nil. - declarations := anOrderedCollection. - self setParents: self declarations to: self -] - -{ #category : #generated } -CSCompilationUnitNode >> directives [ - ^ directives -] - -{ #category : #generated } -CSCompilationUnitNode >> directives: anOrderedCollection [ - self setParents: self directives to: nil. - directives := anOrderedCollection. - self setParents: self directives to: self -] - -{ #category : #'generated-initialize-release' } -CSCompilationUnitNode >> initialize [ - super initialize. - directives := OrderedCollection new: 2. - _attributes := OrderedCollection new: 2. - declarations := OrderedCollection new: 2. -] diff --git a/src/SmaCC_CSharp/CSConditionalExpressionNode.class.st b/src/SmaCC_CSharp/CSConditionalExpressionNode.class.st deleted file mode 100644 index 7370bbfc1..000000000 --- a/src/SmaCC_CSharp/CSConditionalExpressionNode.class.st +++ /dev/null @@ -1,89 +0,0 @@ -Class { - #name : #CSConditionalExpressionNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'booleanExpression', - 'questionMarkToken', - 'trueExpression', - 'colonToken', - 'falseExpression' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSConditionalExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitConditionalExpression: self -] - -{ #category : #generated } -CSConditionalExpressionNode >> booleanExpression [ - ^ booleanExpression -] - -{ #category : #generated } -CSConditionalExpressionNode >> booleanExpression: aCSExpressionNode [ - self booleanExpression notNil - ifTrue: [ self booleanExpression parent: nil ]. - booleanExpression := aCSExpressionNode. - self booleanExpression notNil - ifTrue: [ self booleanExpression parent: self ] -] - -{ #category : #generated } -CSConditionalExpressionNode >> colonToken [ - ^ colonToken -] - -{ #category : #generated } -CSConditionalExpressionNode >> colonToken: aSmaCCToken [ - colonToken := aSmaCCToken -] - -{ #category : #generated } -CSConditionalExpressionNode >> falseExpression [ - ^ falseExpression -] - -{ #category : #generated } -CSConditionalExpressionNode >> falseExpression: aCSExpressionNode [ - self falseExpression notNil - ifTrue: [ self falseExpression parent: nil ]. - falseExpression := aCSExpressionNode. - self falseExpression notNil - ifTrue: [ self falseExpression parent: self ] -] - -{ #category : #generated } -CSConditionalExpressionNode >> nodeVariables [ - ^ #(#booleanExpression #trueExpression #falseExpression) -] - -{ #category : #generated } -CSConditionalExpressionNode >> questionMarkToken [ - ^ questionMarkToken -] - -{ #category : #generated } -CSConditionalExpressionNode >> questionMarkToken: aSmaCCToken [ - questionMarkToken := aSmaCCToken -] - -{ #category : #generated } -CSConditionalExpressionNode >> tokenVariables [ - ^ #(#questionMarkToken #colonToken) -] - -{ #category : #generated } -CSConditionalExpressionNode >> trueExpression [ - ^ trueExpression -] - -{ #category : #generated } -CSConditionalExpressionNode >> trueExpression: aCSExpressionNode [ - self trueExpression notNil - ifTrue: [ self trueExpression parent: nil ]. - trueExpression := aCSExpressionNode. - self trueExpression notNil - ifTrue: [ self trueExpression parent: self ] -] diff --git a/src/SmaCC_CSharp/CSConstDeclaratorNode.class.st b/src/SmaCC_CSharp/CSConstDeclaratorNode.class.st deleted file mode 100644 index 600aa8681..000000000 --- a/src/SmaCC_CSharp/CSConstDeclaratorNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #CSConstDeclaratorNode, - #superclass : #CSProgramNode, - #instVars : [ - 'name', - 'equalToken', - 'expression' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSConstDeclaratorNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitConstDeclarator: self -] - -{ #category : #generated } -CSConstDeclaratorNode >> equalToken [ - ^ equalToken -] - -{ #category : #generated } -CSConstDeclaratorNode >> equalToken: aSmaCCToken [ - equalToken := aSmaCCToken -] - -{ #category : #generated } -CSConstDeclaratorNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSConstDeclaratorNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSConstDeclaratorNode >> name [ - ^ name -] - -{ #category : #generated } -CSConstDeclaratorNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -CSConstDeclaratorNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -CSConstDeclaratorNode >> tokenVariables [ - ^ #(#name #equalToken) -] diff --git a/src/SmaCC_CSharp/CSConstantDeclarationNode.class.st b/src/SmaCC_CSharp/CSConstantDeclarationNode.class.st deleted file mode 100644 index 467c8ba20..000000000 --- a/src/SmaCC_CSharp/CSConstantDeclarationNode.class.st +++ /dev/null @@ -1,136 +0,0 @@ -Class { - #name : #CSConstantDeclarationNode, - #superclass : #CSDeclarationNode, - #instVars : [ - '_attributes', - 'modifiers', - 'constToken', - 'type', - 'declarators', - 'commaTokens', - 'semicolonToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSConstantDeclarationNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSConstantDeclarationNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSConstantDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitConstantDeclaration: self -] - -{ #category : #generated } -CSConstantDeclarationNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -CSConstantDeclarationNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -CSConstantDeclarationNode >> compositeNodeVariables [ - ^ #(#_attributes #declarators) -] - -{ #category : #generated } -CSConstantDeclarationNode >> compositeTokenVariables [ - ^ #(#modifiers) -] - -{ #category : #generated } -CSConstantDeclarationNode >> constToken [ - ^ constToken -] - -{ #category : #generated } -CSConstantDeclarationNode >> constToken: aSmaCCToken [ - constToken := aSmaCCToken -] - -{ #category : #generated } -CSConstantDeclarationNode >> declarators [ - ^ declarators -] - -{ #category : #generated } -CSConstantDeclarationNode >> declarators: anOrderedCollection [ - self setParents: self declarators to: nil. - declarators := anOrderedCollection. - self setParents: self declarators to: self -] - -{ #category : #generated } -CSConstantDeclarationNode >> ignoredCompositeTokenVariables [ - ^ #(#commaTokens) -] - -{ #category : #generated } -CSConstantDeclarationNode >> ignoredTokenVariables [ - ^ #(#semicolonToken) -] - -{ #category : #'generated-initialize-release' } -CSConstantDeclarationNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. - modifiers := OrderedCollection new: 2. - declarators := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -CSConstantDeclarationNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -CSConstantDeclarationNode >> modifiers: anOrderedCollection [ - modifiers := anOrderedCollection -] - -{ #category : #generated } -CSConstantDeclarationNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -CSConstantDeclarationNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -CSConstantDeclarationNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] - -{ #category : #generated } -CSConstantDeclarationNode >> tokenVariables [ - ^ #(#constToken) -] - -{ #category : #generated } -CSConstantDeclarationNode >> type [ - ^ type -] - -{ #category : #generated } -CSConstantDeclarationNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSConstantDeclaratorNode.class.st b/src/SmaCC_CSharp/CSConstantDeclaratorNode.class.st deleted file mode 100644 index 261bb22de..000000000 --- a/src/SmaCC_CSharp/CSConstantDeclaratorNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #CSConstantDeclaratorNode, - #superclass : #CSProgramNode, - #instVars : [ - 'identifierToken', - 'equalToken', - 'expression' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSConstantDeclaratorNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitConstantDeclarator: self -] - -{ #category : #generated } -CSConstantDeclaratorNode >> equalToken [ - ^ equalToken -] - -{ #category : #generated } -CSConstantDeclaratorNode >> equalToken: aSmaCCToken [ - equalToken := aSmaCCToken -] - -{ #category : #generated } -CSConstantDeclaratorNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSConstantDeclaratorNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSConstantDeclaratorNode >> identifierToken [ - ^ identifierToken -] - -{ #category : #generated } -CSConstantDeclaratorNode >> identifierToken: aSmaCCToken [ - identifierToken := aSmaCCToken -] - -{ #category : #generated } -CSConstantDeclaratorNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -CSConstantDeclaratorNode >> tokenVariables [ - ^ #(#identifierToken #equalToken) -] diff --git a/src/SmaCC_CSharp/CSConstructorConstraintNode.class.st b/src/SmaCC_CSharp/CSConstructorConstraintNode.class.st deleted file mode 100644 index 2b0fa822d..000000000 --- a/src/SmaCC_CSharp/CSConstructorConstraintNode.class.st +++ /dev/null @@ -1,50 +0,0 @@ -Class { - #name : #CSConstructorConstraintNode, - #superclass : #CSProgramNode, - #instVars : [ - 'newToken', - 'leftParenToken', - 'rightParenToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSConstructorConstraintNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitConstructorConstraint: self -] - -{ #category : #generated } -CSConstructorConstraintNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSConstructorConstraintNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSConstructorConstraintNode >> newToken [ - ^ newToken -] - -{ #category : #generated } -CSConstructorConstraintNode >> newToken: aSmaCCToken [ - newToken := aSmaCCToken -] - -{ #category : #generated } -CSConstructorConstraintNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSConstructorConstraintNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSConstructorConstraintNode >> tokenVariables [ - ^ #(#newToken #leftParenToken #rightParenToken) -] diff --git a/src/SmaCC_CSharp/CSConstructorDeclarationNode.class.st b/src/SmaCC_CSharp/CSConstructorDeclarationNode.class.st deleted file mode 100644 index f0b684b7b..000000000 --- a/src/SmaCC_CSharp/CSConstructorDeclarationNode.class.st +++ /dev/null @@ -1,168 +0,0 @@ -Class { - #name : #CSConstructorDeclarationNode, - #superclass : #CSDeclarationNode, - #instVars : [ - '_attributes', - 'modifiers', - 'identifierToken', - 'leftParenToken', - 'parameters', - 'commas', - 'rightParenToken', - 'initializer', - 'block', - 'semicolonToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSConstructorDeclarationNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSConstructorDeclarationNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSConstructorDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitConstructorDeclaration: self -] - -{ #category : #generated } -CSConstructorDeclarationNode >> block [ - ^ block -] - -{ #category : #generated } -CSConstructorDeclarationNode >> block: aCSBlockStatementNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aCSBlockStatementNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -CSConstructorDeclarationNode >> commas [ - ^ commas -] - -{ #category : #generated } -CSConstructorDeclarationNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -CSConstructorDeclarationNode >> compositeNodeVariables [ - ^ #(#_attributes #parameters) -] - -{ #category : #generated } -CSConstructorDeclarationNode >> compositeTokenVariables [ - ^ #(#modifiers #commas) -] - -{ #category : #generated } -CSConstructorDeclarationNode >> identifierToken [ - ^ identifierToken -] - -{ #category : #generated } -CSConstructorDeclarationNode >> identifierToken: aSmaCCToken [ - identifierToken := aSmaCCToken -] - -{ #category : #generated } -CSConstructorDeclarationNode >> ignoredTokenVariables [ - ^ #(#semicolonToken) -] - -{ #category : #'generated-initialize-release' } -CSConstructorDeclarationNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. - modifiers := OrderedCollection new: 2. - parameters := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -CSConstructorDeclarationNode >> initializer [ - ^ initializer -] - -{ #category : #generated } -CSConstructorDeclarationNode >> initializer: aCSConstructorInitializerNode [ - self initializer notNil - ifTrue: [ self initializer parent: nil ]. - initializer := aCSConstructorInitializerNode. - self initializer notNil - ifTrue: [ self initializer parent: self ] -] - -{ #category : #generated } -CSConstructorDeclarationNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSConstructorDeclarationNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSConstructorDeclarationNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -CSConstructorDeclarationNode >> modifiers: anOrderedCollection [ - modifiers := anOrderedCollection -] - -{ #category : #generated } -CSConstructorDeclarationNode >> nodeVariables [ - ^ #(#initializer #block) -] - -{ #category : #generated } -CSConstructorDeclarationNode >> parameters [ - ^ parameters -] - -{ #category : #generated } -CSConstructorDeclarationNode >> parameters: anOrderedCollection [ - self setParents: self parameters to: nil. - parameters := anOrderedCollection. - self setParents: self parameters to: self -] - -{ #category : #generated } -CSConstructorDeclarationNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSConstructorDeclarationNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSConstructorDeclarationNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -CSConstructorDeclarationNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] - -{ #category : #generated } -CSConstructorDeclarationNode >> tokenVariables [ - ^ #(#identifierToken #leftParenToken #rightParenToken) -] diff --git a/src/SmaCC_CSharp/CSConstructorInitializerNode.class.st b/src/SmaCC_CSharp/CSConstructorInitializerNode.class.st deleted file mode 100644 index 6b68fd758..000000000 --- a/src/SmaCC_CSharp/CSConstructorInitializerNode.class.st +++ /dev/null @@ -1,113 +0,0 @@ -Class { - #name : #CSConstructorInitializerNode, - #superclass : #CSProgramNode, - #instVars : [ - 'colonToken', - 'baseToken', - 'leftParenToken', - 'arguments', - 'commaTokens', - 'rightParenToken', - 'thisToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSConstructorInitializerNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitConstructorInitializer: self -] - -{ #category : #generated } -CSConstructorInitializerNode >> arguments [ - ^ arguments -] - -{ #category : #generated } -CSConstructorInitializerNode >> arguments: anOrderedCollection [ - self setParents: self arguments to: nil. - arguments := anOrderedCollection. - self setParents: self arguments to: self -] - -{ #category : #generated } -CSConstructorInitializerNode >> baseToken [ - ^ baseToken -] - -{ #category : #generated } -CSConstructorInitializerNode >> baseToken: aSmaCCToken [ - baseToken := aSmaCCToken -] - -{ #category : #generated } -CSConstructorInitializerNode >> colonToken [ - ^ colonToken -] - -{ #category : #generated } -CSConstructorInitializerNode >> colonToken: aSmaCCToken [ - colonToken := aSmaCCToken -] - -{ #category : #generated } -CSConstructorInitializerNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -CSConstructorInitializerNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -CSConstructorInitializerNode >> compositeNodeVariables [ - ^ #(#arguments) -] - -{ #category : #generated } -CSConstructorInitializerNode >> ignoredCompositeTokenVariables [ - ^ #(#commaTokens) -] - -{ #category : #'generated-initialize-release' } -CSConstructorInitializerNode >> initialize [ - super initialize. - arguments := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -CSConstructorInitializerNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSConstructorInitializerNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSConstructorInitializerNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSConstructorInitializerNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSConstructorInitializerNode >> thisToken [ - ^ thisToken -] - -{ #category : #generated } -CSConstructorInitializerNode >> thisToken: aSmaCCToken [ - thisToken := aSmaCCToken -] - -{ #category : #generated } -CSConstructorInitializerNode >> tokenVariables [ - ^ #(#colonToken #baseToken #leftParenToken #rightParenToken #thisToken) -] diff --git a/src/SmaCC_CSharp/CSContinueStatementNode.class.st b/src/SmaCC_CSharp/CSContinueStatementNode.class.st deleted file mode 100644 index 799a1f1a8..000000000 --- a/src/SmaCC_CSharp/CSContinueStatementNode.class.st +++ /dev/null @@ -1,44 +0,0 @@ -Class { - #name : #CSContinueStatementNode, - #superclass : #CSStatementNode, - #instVars : [ - 'continueToken', - 'semicolonToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSContinueStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitContinueStatement: self -] - -{ #category : #generated } -CSContinueStatementNode >> continueToken [ - ^ continueToken -] - -{ #category : #generated } -CSContinueStatementNode >> continueToken: aSmaCCToken [ - continueToken := aSmaCCToken -] - -{ #category : #generated } -CSContinueStatementNode >> ignoredTokenVariables [ - ^ #(#semicolonToken) -] - -{ #category : #generated } -CSContinueStatementNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -CSContinueStatementNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] - -{ #category : #generated } -CSContinueStatementNode >> tokenVariables [ - ^ #(#continueToken) -] diff --git a/src/SmaCC_CSharp/CSDeclarationNode.class.st b/src/SmaCC_CSharp/CSDeclarationNode.class.st deleted file mode 100644 index f2a94d90f..000000000 --- a/src/SmaCC_CSharp/CSDeclarationNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #CSDeclarationNode, - #superclass : #CSProgramNode, - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitDeclaration: self -] diff --git a/src/SmaCC_CSharp/CSDeclarationStatementNode.class.st b/src/SmaCC_CSharp/CSDeclarationStatementNode.class.st deleted file mode 100644 index e2e292a90..000000000 --- a/src/SmaCC_CSharp/CSDeclarationStatementNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #CSDeclarationStatementNode, - #superclass : #CSStatementNode, - #instVars : [ - 'declaration', - 'semicolonToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSDeclarationStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitDeclarationStatement: self -] - -{ #category : #generated } -CSDeclarationStatementNode >> declaration [ - ^ declaration -] - -{ #category : #generated } -CSDeclarationStatementNode >> declaration: aCSDeclarationNode [ - self declaration notNil - ifTrue: [ self declaration parent: nil ]. - declaration := aCSDeclarationNode. - self declaration notNil - ifTrue: [ self declaration parent: self ] -] - -{ #category : #generated } -CSDeclarationStatementNode >> ignoredTokenVariables [ - ^ #(#semicolonToken) -] - -{ #category : #generated } -CSDeclarationStatementNode >> nodeVariables [ - ^ #(#declaration) -] - -{ #category : #generated } -CSDeclarationStatementNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -CSDeclarationStatementNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] diff --git a/src/SmaCC_CSharp/CSDefaultValueExpressionNode.class.st b/src/SmaCC_CSharp/CSDefaultValueExpressionNode.class.st deleted file mode 100644 index f08eaab84..000000000 --- a/src/SmaCC_CSharp/CSDefaultValueExpressionNode.class.st +++ /dev/null @@ -1,70 +0,0 @@ -Class { - #name : #CSDefaultValueExpressionNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'defaultToken', - 'leftParenToken', - 'type', - 'rightParenToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSDefaultValueExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitDefaultValueExpression: self -] - -{ #category : #generated } -CSDefaultValueExpressionNode >> defaultToken [ - ^ defaultToken -] - -{ #category : #generated } -CSDefaultValueExpressionNode >> defaultToken: aSmaCCToken [ - defaultToken := aSmaCCToken -] - -{ #category : #generated } -CSDefaultValueExpressionNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSDefaultValueExpressionNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSDefaultValueExpressionNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -CSDefaultValueExpressionNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSDefaultValueExpressionNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSDefaultValueExpressionNode >> tokenVariables [ - ^ #(#defaultToken #leftParenToken #rightParenToken) -] - -{ #category : #generated } -CSDefaultValueExpressionNode >> type [ - ^ type -] - -{ #category : #generated } -CSDefaultValueExpressionNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSDelegateCreationExpressionNode.class.st b/src/SmaCC_CSharp/CSDelegateCreationExpressionNode.class.st deleted file mode 100644 index 65bb9e0e3..000000000 --- a/src/SmaCC_CSharp/CSDelegateCreationExpressionNode.class.st +++ /dev/null @@ -1,85 +0,0 @@ -Class { - #name : #CSDelegateCreationExpressionNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'newToken', - 'type', - 'leftParenToken', - 'expression', - 'rightParenToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSDelegateCreationExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitDelegateCreationExpression: self -] - -{ #category : #generated } -CSDelegateCreationExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSDelegateCreationExpressionNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSDelegateCreationExpressionNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSDelegateCreationExpressionNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSDelegateCreationExpressionNode >> newToken [ - ^ newToken -] - -{ #category : #generated } -CSDelegateCreationExpressionNode >> newToken: aSmaCCToken [ - newToken := aSmaCCToken -] - -{ #category : #generated } -CSDelegateCreationExpressionNode >> nodeVariables [ - ^ #(#type #expression) -] - -{ #category : #generated } -CSDelegateCreationExpressionNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSDelegateCreationExpressionNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSDelegateCreationExpressionNode >> tokenVariables [ - ^ #(#newToken #leftParenToken #rightParenToken) -] - -{ #category : #generated } -CSDelegateCreationExpressionNode >> type [ - ^ type -] - -{ #category : #generated } -CSDelegateCreationExpressionNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSDelegateDeclarationNode.class.st b/src/SmaCC_CSharp/CSDelegateDeclarationNode.class.st deleted file mode 100644 index 4a9567e67..000000000 --- a/src/SmaCC_CSharp/CSDelegateDeclarationNode.class.st +++ /dev/null @@ -1,188 +0,0 @@ -Class { - #name : #CSDelegateDeclarationNode, - #superclass : #CSDeclarationNode, - #instVars : [ - '_attributes', - 'modifiers', - 'delegateToken', - 'type', - 'name', - 'typeParameters', - 'leftParen', - 'parameters', - 'commas', - 'rightParen', - 'constraintClauses', - 'semicolon' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSDelegateDeclarationNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSDelegateDeclarationNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSDelegateDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitDelegateDeclaration: self -] - -{ #category : #generated } -CSDelegateDeclarationNode >> commas [ - ^ commas -] - -{ #category : #generated } -CSDelegateDeclarationNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -CSDelegateDeclarationNode >> compositeNodeVariables [ - ^ #(#_attributes #parameters #constraintClauses) -] - -{ #category : #generated } -CSDelegateDeclarationNode >> compositeTokenVariables [ - ^ #(#modifiers #commas) -] - -{ #category : #generated } -CSDelegateDeclarationNode >> constraintClauses [ - ^ constraintClauses -] - -{ #category : #generated } -CSDelegateDeclarationNode >> constraintClauses: anOrderedCollection [ - self setParents: self constraintClauses to: nil. - constraintClauses := anOrderedCollection. - self setParents: self constraintClauses to: self -] - -{ #category : #generated } -CSDelegateDeclarationNode >> delegateToken [ - ^ delegateToken -] - -{ #category : #generated } -CSDelegateDeclarationNode >> delegateToken: aSmaCCToken [ - delegateToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -CSDelegateDeclarationNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. - modifiers := OrderedCollection new: 2. - parameters := OrderedCollection new: 2. - commas := OrderedCollection new: 2. - constraintClauses := OrderedCollection new: 2. -] - -{ #category : #generated } -CSDelegateDeclarationNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -CSDelegateDeclarationNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -CSDelegateDeclarationNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -CSDelegateDeclarationNode >> modifiers: anOrderedCollection [ - modifiers := anOrderedCollection -] - -{ #category : #generated } -CSDelegateDeclarationNode >> name [ - ^ name -] - -{ #category : #generated } -CSDelegateDeclarationNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -CSDelegateDeclarationNode >> nodeVariables [ - ^ #(#type #typeParameters) -] - -{ #category : #generated } -CSDelegateDeclarationNode >> parameters [ - ^ parameters -] - -{ #category : #generated } -CSDelegateDeclarationNode >> parameters: anOrderedCollection [ - self setParents: self parameters to: nil. - parameters := anOrderedCollection. - self setParents: self parameters to: self -] - -{ #category : #generated } -CSDelegateDeclarationNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -CSDelegateDeclarationNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -CSDelegateDeclarationNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -CSDelegateDeclarationNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -CSDelegateDeclarationNode >> tokenVariables [ - ^ #(#delegateToken #name #leftParen #rightParen #semicolon) -] - -{ #category : #generated } -CSDelegateDeclarationNode >> type [ - ^ type -] - -{ #category : #generated } -CSDelegateDeclarationNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] - -{ #category : #generated } -CSDelegateDeclarationNode >> typeParameters [ - ^ typeParameters -] - -{ #category : #generated } -CSDelegateDeclarationNode >> typeParameters: aCSVariantTypeParameterListNode [ - self typeParameters notNil - ifTrue: [ self typeParameters parent: nil ]. - typeParameters := aCSVariantTypeParameterListNode. - self typeParameters notNil - ifTrue: [ self typeParameters parent: self ] -] diff --git a/src/SmaCC_CSharp/CSDestructorDeclarationNode.class.st b/src/SmaCC_CSharp/CSDestructorDeclarationNode.class.st deleted file mode 100644 index 366d4636c..000000000 --- a/src/SmaCC_CSharp/CSDestructorDeclarationNode.class.st +++ /dev/null @@ -1,122 +0,0 @@ -Class { - #name : #CSDestructorDeclarationNode, - #superclass : #CSDeclarationNode, - #instVars : [ - '_attributes', - 'modifiers', - 'tildeToken', - 'identifierToken', - 'leftParenToken', - 'rightParenToken', - 'body' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSDestructorDeclarationNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSDestructorDeclarationNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSDestructorDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitDestructorDeclaration: self -] - -{ #category : #generated } -CSDestructorDeclarationNode >> body [ - ^ body -] - -{ #category : #generated } -CSDestructorDeclarationNode >> body: aCSMethodBodyNode [ - self body notNil - ifTrue: [ self body parent: nil ]. - body := aCSMethodBodyNode. - self body notNil - ifTrue: [ self body parent: self ] -] - -{ #category : #generated } -CSDestructorDeclarationNode >> compositeNodeVariables [ - ^ #(#_attributes) -] - -{ #category : #generated } -CSDestructorDeclarationNode >> compositeTokenVariables [ - ^ #(#modifiers) -] - -{ #category : #generated } -CSDestructorDeclarationNode >> identifierToken [ - ^ identifierToken -] - -{ #category : #generated } -CSDestructorDeclarationNode >> identifierToken: aSmaCCToken [ - identifierToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -CSDestructorDeclarationNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. - modifiers := OrderedCollection new: 2. -] - -{ #category : #generated } -CSDestructorDeclarationNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSDestructorDeclarationNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSDestructorDeclarationNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -CSDestructorDeclarationNode >> modifiers: anOrderedCollection [ - modifiers := anOrderedCollection -] - -{ #category : #generated } -CSDestructorDeclarationNode >> nodeVariables [ - ^ #(#body) -] - -{ #category : #generated } -CSDestructorDeclarationNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSDestructorDeclarationNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSDestructorDeclarationNode >> tildeToken [ - ^ tildeToken -] - -{ #category : #generated } -CSDestructorDeclarationNode >> tildeToken: aSmaCCToken [ - tildeToken := aSmaCCToken -] - -{ #category : #generated } -CSDestructorDeclarationNode >> tokenVariables [ - ^ #(#tildeToken #identifierToken #leftParenToken #rightParenToken) -] diff --git a/src/SmaCC_CSharp/CSDoStatementNode.class.st b/src/SmaCC_CSharp/CSDoStatementNode.class.st deleted file mode 100644 index 1b7e60471..000000000 --- a/src/SmaCC_CSharp/CSDoStatementNode.class.st +++ /dev/null @@ -1,112 +0,0 @@ -Class { - #name : #CSDoStatementNode, - #superclass : #CSStatementNode, - #instVars : [ - 'doToken', - 'statement', - 'whileToken', - 'leftParenToken', - 'expression', - 'rightParenToken', - 'semicolonToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSDoStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitDoStatement: self -] - -{ #category : #generated } -CSDoStatementNode >> doToken [ - ^ doToken -] - -{ #category : #generated } -CSDoStatementNode >> doToken: aSmaCCToken [ - doToken := aSmaCCToken -] - -{ #category : #generated } -CSDoStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSDoStatementNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSDoStatementNode >> ignoredTokenVariables [ - ^ #(#semicolonToken) -] - -{ #category : #generated } -CSDoStatementNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSDoStatementNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSDoStatementNode >> nodeVariables [ - ^ #(#statement #expression) -] - -{ #category : #generated } -CSDoStatementNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSDoStatementNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSDoStatementNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -CSDoStatementNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] - -{ #category : #generated } -CSDoStatementNode >> statement [ - ^ statement -] - -{ #category : #generated } -CSDoStatementNode >> statement: aCSStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aCSStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -CSDoStatementNode >> tokenVariables [ - ^ #(#doToken #whileToken #leftParenToken #rightParenToken) -] - -{ #category : #generated } -CSDoStatementNode >> whileToken [ - ^ whileToken -] - -{ #category : #generated } -CSDoStatementNode >> whileToken: aSmaCCToken [ - whileToken := aSmaCCToken -] diff --git a/src/SmaCC_CSharp/CSElementAccessNode.class.st b/src/SmaCC_CSharp/CSElementAccessNode.class.st deleted file mode 100644 index 650ac91e0..000000000 --- a/src/SmaCC_CSharp/CSElementAccessNode.class.st +++ /dev/null @@ -1,100 +0,0 @@ -Class { - #name : #CSElementAccessNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'baseExpression', - 'leftBracketToken', - 'expressions', - 'commaTokens', - 'rightBracketToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSElementAccessNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitElementAccess: self -] - -{ #category : #generated } -CSElementAccessNode >> baseExpression [ - ^ baseExpression -] - -{ #category : #generated } -CSElementAccessNode >> baseExpression: aCSExpressionNode [ - self baseExpression notNil - ifTrue: [ self baseExpression parent: nil ]. - baseExpression := aCSExpressionNode. - self baseExpression notNil - ifTrue: [ self baseExpression parent: self ] -] - -{ #category : #generated } -CSElementAccessNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -CSElementAccessNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -CSElementAccessNode >> compositeNodeVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -CSElementAccessNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -CSElementAccessNode >> expressions: anOrderedCollection [ - self setParents: self expressions to: nil. - expressions := anOrderedCollection. - self setParents: self expressions to: self -] - -{ #category : #generated } -CSElementAccessNode >> ignoredCompositeTokenVariables [ - ^ #(#commaTokens #_leftParens #_rightParens) -] - -{ #category : #'generated-initialize-release' } -CSElementAccessNode >> initialize [ - super initialize. - expressions := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -CSElementAccessNode >> leftBracketToken [ - ^ leftBracketToken -] - -{ #category : #generated } -CSElementAccessNode >> leftBracketToken: aSmaCCToken [ - leftBracketToken := aSmaCCToken -] - -{ #category : #generated } -CSElementAccessNode >> nodeVariables [ - ^ #(#baseExpression) -] - -{ #category : #generated } -CSElementAccessNode >> rightBracketToken [ - ^ rightBracketToken -] - -{ #category : #generated } -CSElementAccessNode >> rightBracketToken: aSmaCCToken [ - rightBracketToken := aSmaCCToken -] - -{ #category : #generated } -CSElementAccessNode >> tokenVariables [ - ^ #(#leftBracketToken #rightBracketToken) -] diff --git a/src/SmaCC_CSharp/CSElementInitializerNode.class.st b/src/SmaCC_CSharp/CSElementInitializerNode.class.st deleted file mode 100644 index 66a9a5bf0..000000000 --- a/src/SmaCC_CSharp/CSElementInitializerNode.class.st +++ /dev/null @@ -1,80 +0,0 @@ -Class { - #name : #CSElementInitializerNode, - #superclass : #CSProgramNode, - #instVars : [ - 'expressions', - 'leftBraceToken', - 'commaTokens', - 'rightBraceToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSElementInitializerNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitElementInitializer: self -] - -{ #category : #generated } -CSElementInitializerNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -CSElementInitializerNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -CSElementInitializerNode >> compositeNodeVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -CSElementInitializerNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -CSElementInitializerNode >> expressions: anOrderedCollection [ - self setParents: self expressions to: nil. - expressions := anOrderedCollection. - self setParents: self expressions to: self -] - -{ #category : #generated } -CSElementInitializerNode >> ignoredCompositeTokenVariables [ - ^ #(#commaTokens) -] - -{ #category : #'generated-initialize-release' } -CSElementInitializerNode >> initialize [ - super initialize. - expressions := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -CSElementInitializerNode >> leftBraceToken [ - ^ leftBraceToken -] - -{ #category : #generated } -CSElementInitializerNode >> leftBraceToken: aSmaCCToken [ - leftBraceToken := aSmaCCToken -] - -{ #category : #generated } -CSElementInitializerNode >> rightBraceToken [ - ^ rightBraceToken -] - -{ #category : #generated } -CSElementInitializerNode >> rightBraceToken: aSmaCCToken [ - rightBraceToken := aSmaCCToken -] - -{ #category : #generated } -CSElementInitializerNode >> tokenVariables [ - ^ #(#leftBraceToken #rightBraceToken) -] diff --git a/src/SmaCC_CSharp/CSEmptyStatementNode.class.st b/src/SmaCC_CSharp/CSEmptyStatementNode.class.st deleted file mode 100644 index e1f54eff5..000000000 --- a/src/SmaCC_CSharp/CSEmptyStatementNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #CSEmptyStatementNode, - #superclass : #CSStatementNode, - #instVars : [ - 'semicolonToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSEmptyStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitEmptyStatement: self -] - -{ #category : #generated } -CSEmptyStatementNode >> ignoredTokenVariables [ - ^ #(#semicolonToken) -] - -{ #category : #generated } -CSEmptyStatementNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -CSEmptyStatementNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] diff --git a/src/SmaCC_CSharp/CSEnumDeclarationNode.class.st b/src/SmaCC_CSharp/CSEnumDeclarationNode.class.st deleted file mode 100644 index 005803b38..000000000 --- a/src/SmaCC_CSharp/CSEnumDeclarationNode.class.st +++ /dev/null @@ -1,192 +0,0 @@ -Class { - #name : #CSEnumDeclarationNode, - #superclass : #CSDeclarationNode, - #instVars : [ - '_attributes', - 'modifiers', - 'enumToken', - 'name', - 'colonToken', - 'typeToken', - 'leftBrace', - 'declarations', - 'commas', - 'rightBrace', - 'semicolon', - 'equal', - 'value' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSEnumDeclarationNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSEnumDeclarationNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSEnumDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitEnumDeclaration: self -] - -{ #category : #generated } -CSEnumDeclarationNode >> colonToken [ - ^ colonToken -] - -{ #category : #generated } -CSEnumDeclarationNode >> colonToken: aSmaCCToken [ - colonToken := aSmaCCToken -] - -{ #category : #generated } -CSEnumDeclarationNode >> commas [ - ^ commas -] - -{ #category : #generated } -CSEnumDeclarationNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -CSEnumDeclarationNode >> compositeNodeVariables [ - ^ #(#_attributes #declarations) -] - -{ #category : #generated } -CSEnumDeclarationNode >> compositeTokenVariables [ - ^ #(#modifiers #commas) -] - -{ #category : #generated } -CSEnumDeclarationNode >> declarations [ - ^ declarations -] - -{ #category : #generated } -CSEnumDeclarationNode >> declarations: anOrderedCollection [ - self setParents: self declarations to: nil. - declarations := anOrderedCollection. - self setParents: self declarations to: self -] - -{ #category : #generated } -CSEnumDeclarationNode >> enumToken [ - ^ enumToken -] - -{ #category : #generated } -CSEnumDeclarationNode >> enumToken: aSmaCCToken [ - enumToken := aSmaCCToken -] - -{ #category : #generated } -CSEnumDeclarationNode >> equal [ - ^ equal -] - -{ #category : #generated } -CSEnumDeclarationNode >> equal: aSmaCCToken [ - equal := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -CSEnumDeclarationNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. - modifiers := OrderedCollection new: 2. - declarations := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -CSEnumDeclarationNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -CSEnumDeclarationNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -CSEnumDeclarationNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -CSEnumDeclarationNode >> modifiers: anOrderedCollection [ - modifiers := anOrderedCollection -] - -{ #category : #generated } -CSEnumDeclarationNode >> name [ - ^ name -] - -{ #category : #generated } -CSEnumDeclarationNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -CSEnumDeclarationNode >> nodeVariables [ - ^ #(#value) -] - -{ #category : #generated } -CSEnumDeclarationNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -CSEnumDeclarationNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] - -{ #category : #generated } -CSEnumDeclarationNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -CSEnumDeclarationNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -CSEnumDeclarationNode >> tokenVariables [ - ^ #(#enumToken #name #colonToken #typeToken #leftBrace #rightBrace #semicolon #equal) -] - -{ #category : #generated } -CSEnumDeclarationNode >> typeToken [ - ^ typeToken -] - -{ #category : #generated } -CSEnumDeclarationNode >> typeToken: aSmaCCToken [ - typeToken := aSmaCCToken -] - -{ #category : #generated } -CSEnumDeclarationNode >> value [ - ^ value -] - -{ #category : #generated } -CSEnumDeclarationNode >> value: aCSExpressionNode [ - self value notNil - ifTrue: [ self value parent: nil ]. - value := aCSExpressionNode. - self value notNil - ifTrue: [ self value parent: self ] -] diff --git a/src/SmaCC_CSharp/CSEventDeclarationNode.class.st b/src/SmaCC_CSharp/CSEventDeclarationNode.class.st deleted file mode 100644 index 4a4b413ab..000000000 --- a/src/SmaCC_CSharp/CSEventDeclarationNode.class.st +++ /dev/null @@ -1,225 +0,0 @@ -Class { - #name : #CSEventDeclarationNode, - #superclass : #CSDeclarationNode, - #instVars : [ - '_attributes', - 'modifiers', - 'eventToken', - 'type', - 'declarators', - 'commaTokens', - 'semicolonToken', - 'name', - 'interface', - 'periodToken', - 'leftBraceToken', - 'addDeclaration', - 'removeDeclaration', - 'rightBraceToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSEventDeclarationNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSEventDeclarationNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSEventDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitEventDeclaration: self -] - -{ #category : #generated } -CSEventDeclarationNode >> addDeclaration [ - ^ addDeclaration -] - -{ #category : #generated } -CSEventDeclarationNode >> addDeclaration: aCSAddAccessorDeclarationNode [ - self addDeclaration notNil - ifTrue: [ self addDeclaration parent: nil ]. - addDeclaration := aCSAddAccessorDeclarationNode. - self addDeclaration notNil - ifTrue: [ self addDeclaration parent: self ] -] - -{ #category : #generated } -CSEventDeclarationNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -CSEventDeclarationNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -CSEventDeclarationNode >> compositeNodeVariables [ - ^ #(#_attributes #declarators) -] - -{ #category : #generated } -CSEventDeclarationNode >> compositeTokenVariables [ - ^ #(#modifiers) -] - -{ #category : #generated } -CSEventDeclarationNode >> declarators [ - ^ declarators -] - -{ #category : #generated } -CSEventDeclarationNode >> declarators: anOrderedCollection [ - self setParents: self declarators to: nil. - declarators := anOrderedCollection. - self setParents: self declarators to: self -] - -{ #category : #generated } -CSEventDeclarationNode >> eventToken [ - ^ eventToken -] - -{ #category : #generated } -CSEventDeclarationNode >> eventToken: aSmaCCToken [ - eventToken := aSmaCCToken -] - -{ #category : #generated } -CSEventDeclarationNode >> ignoredCompositeTokenVariables [ - ^ #(#commaTokens) -] - -{ #category : #generated } -CSEventDeclarationNode >> ignoredTokenVariables [ - ^ #(#semicolonToken) -] - -{ #category : #'generated-initialize-release' } -CSEventDeclarationNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. - modifiers := OrderedCollection new: 2. - declarators := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -CSEventDeclarationNode >> interface [ - ^ interface -] - -{ #category : #generated } -CSEventDeclarationNode >> interface: aCSTypeNode [ - self interface notNil - ifTrue: [ self interface parent: nil ]. - interface := aCSTypeNode. - self interface notNil - ifTrue: [ self interface parent: self ] -] - -{ #category : #generated } -CSEventDeclarationNode >> leftBraceToken [ - ^ leftBraceToken -] - -{ #category : #generated } -CSEventDeclarationNode >> leftBraceToken: aSmaCCToken [ - leftBraceToken := aSmaCCToken -] - -{ #category : #generated } -CSEventDeclarationNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -CSEventDeclarationNode >> modifiers: anOrderedCollection [ - modifiers := anOrderedCollection -] - -{ #category : #generated } -CSEventDeclarationNode >> name [ - ^ name -] - -{ #category : #generated } -CSEventDeclarationNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -CSEventDeclarationNode >> nodeVariables [ - ^ #(#type #interface #addDeclaration #removeDeclaration) -] - -{ #category : #generated } -CSEventDeclarationNode >> periodToken [ - ^ periodToken -] - -{ #category : #generated } -CSEventDeclarationNode >> periodToken: aSmaCCToken [ - periodToken := aSmaCCToken -] - -{ #category : #generated } -CSEventDeclarationNode >> removeDeclaration [ - ^ removeDeclaration -] - -{ #category : #generated } -CSEventDeclarationNode >> removeDeclaration: aCSRemoveAccessorDeclarationNode [ - self removeDeclaration notNil - ifTrue: [ self removeDeclaration parent: nil ]. - removeDeclaration := aCSRemoveAccessorDeclarationNode. - self removeDeclaration notNil - ifTrue: [ self removeDeclaration parent: self ] -] - -{ #category : #generated } -CSEventDeclarationNode >> rightBraceToken [ - ^ rightBraceToken -] - -{ #category : #generated } -CSEventDeclarationNode >> rightBraceToken: aSmaCCToken [ - rightBraceToken := aSmaCCToken -] - -{ #category : #generated } -CSEventDeclarationNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -CSEventDeclarationNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] - -{ #category : #generated } -CSEventDeclarationNode >> tokenVariables [ - ^ #(#eventToken #name #periodToken #leftBraceToken #rightBraceToken) -] - -{ #category : #generated } -CSEventDeclarationNode >> type [ - ^ type -] - -{ #category : #generated } -CSEventDeclarationNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSExceptionFilterNode.class.st b/src/SmaCC_CSharp/CSExceptionFilterNode.class.st deleted file mode 100644 index cb2045d74..000000000 --- a/src/SmaCC_CSharp/CSExceptionFilterNode.class.st +++ /dev/null @@ -1,70 +0,0 @@ -Class { - #name : #CSExceptionFilterNode, - #superclass : #CSProgramNode, - #instVars : [ - 'whenToken', - 'leftParenToken', - 'expression', - 'rightParenToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSExceptionFilterNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitExceptionFilter: self -] - -{ #category : #generated } -CSExceptionFilterNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSExceptionFilterNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSExceptionFilterNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSExceptionFilterNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSExceptionFilterNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -CSExceptionFilterNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSExceptionFilterNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSExceptionFilterNode >> tokenVariables [ - ^ #(#whenToken #leftParenToken #rightParenToken) -] - -{ #category : #generated } -CSExceptionFilterNode >> whenToken [ - ^ whenToken -] - -{ #category : #generated } -CSExceptionFilterNode >> whenToken: aSmaCCToken [ - whenToken := aSmaCCToken -] diff --git a/src/SmaCC_CSharp/CSExplicitAnonymousFunctionSignatureNode.class.st b/src/SmaCC_CSharp/CSExplicitAnonymousFunctionSignatureNode.class.st deleted file mode 100644 index 152bd209c..000000000 --- a/src/SmaCC_CSharp/CSExplicitAnonymousFunctionSignatureNode.class.st +++ /dev/null @@ -1,80 +0,0 @@ -Class { - #name : #CSExplicitAnonymousFunctionSignatureNode, - #superclass : #CSProgramNode, - #instVars : [ - 'leftParenToken', - 'parameters', - 'commaTokens', - 'rightParenToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSExplicitAnonymousFunctionSignatureNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitExplicitAnonymousFunctionSignature: self -] - -{ #category : #generated } -CSExplicitAnonymousFunctionSignatureNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -CSExplicitAnonymousFunctionSignatureNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -CSExplicitAnonymousFunctionSignatureNode >> compositeNodeVariables [ - ^ #(#parameters) -] - -{ #category : #generated } -CSExplicitAnonymousFunctionSignatureNode >> ignoredCompositeTokenVariables [ - ^ #(#commaTokens) -] - -{ #category : #'generated-initialize-release' } -CSExplicitAnonymousFunctionSignatureNode >> initialize [ - super initialize. - parameters := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -CSExplicitAnonymousFunctionSignatureNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSExplicitAnonymousFunctionSignatureNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSExplicitAnonymousFunctionSignatureNode >> parameters [ - ^ parameters -] - -{ #category : #generated } -CSExplicitAnonymousFunctionSignatureNode >> parameters: anOrderedCollection [ - self setParents: self parameters to: nil. - parameters := anOrderedCollection. - self setParents: self parameters to: self -] - -{ #category : #generated } -CSExplicitAnonymousFunctionSignatureNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSExplicitAnonymousFunctionSignatureNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSExplicitAnonymousFunctionSignatureNode >> tokenVariables [ - ^ #(#leftParenToken #rightParenToken) -] diff --git a/src/SmaCC_CSharp/CSExpressionNode.class.st b/src/SmaCC_CSharp/CSExpressionNode.class.st deleted file mode 100644 index 9938b6452..000000000 --- a/src/SmaCC_CSharp/CSExpressionNode.class.st +++ /dev/null @@ -1,46 +0,0 @@ -Class { - #name : #CSExpressionNode, - #superclass : #CSProgramNode, - #instVars : [ - '_leftParens', - '_rightParens' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSExpressionNode >> _leftParens [ - ^ _leftParens -] - -{ #category : #generated } -CSExpressionNode >> _leftParens: anOrderedCollection [ - _leftParens := anOrderedCollection -] - -{ #category : #generated } -CSExpressionNode >> _rightParens [ - ^ _rightParens -] - -{ #category : #generated } -CSExpressionNode >> _rightParens: anOrderedCollection [ - _rightParens := anOrderedCollection -] - -{ #category : #generated } -CSExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitExpression: self -] - -{ #category : #generated } -CSExpressionNode >> ignoredCompositeTokenVariables [ - ^ #(#_leftParens #_rightParens) -] - -{ #category : #'generated-initialize-release' } -CSExpressionNode >> initialize [ - super initialize. - _leftParens := OrderedCollection new: 2. - _rightParens := OrderedCollection new: 2. -] diff --git a/src/SmaCC_CSharp/CSExpressionStatementNode.class.st b/src/SmaCC_CSharp/CSExpressionStatementNode.class.st deleted file mode 100644 index 61e089f01..000000000 --- a/src/SmaCC_CSharp/CSExpressionStatementNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #CSExpressionStatementNode, - #superclass : #CSStatementNode, - #instVars : [ - 'expression', - 'semicolonToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSExpressionStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitExpressionStatement: self -] - -{ #category : #generated } -CSExpressionStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSExpressionStatementNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSExpressionStatementNode >> ignoredTokenVariables [ - ^ #(#semicolonToken) -] - -{ #category : #generated } -CSExpressionStatementNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -CSExpressionStatementNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -CSExpressionStatementNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] diff --git a/src/SmaCC_CSharp/CSExternAliasDirectiveNode.class.st b/src/SmaCC_CSharp/CSExternAliasDirectiveNode.class.st deleted file mode 100644 index 59242e2f2..000000000 --- a/src/SmaCC_CSharp/CSExternAliasDirectiveNode.class.st +++ /dev/null @@ -1,66 +0,0 @@ -Class { - #name : #CSExternAliasDirectiveNode, - #superclass : #CSProgramNode, - #instVars : [ - 'externToken', - 'aliasToken', - 'identifierToken', - 'semicolonToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSExternAliasDirectiveNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitExternAliasDirective: self -] - -{ #category : #generated } -CSExternAliasDirectiveNode >> aliasToken [ - ^ aliasToken -] - -{ #category : #generated } -CSExternAliasDirectiveNode >> aliasToken: aSmaCCToken [ - aliasToken := aSmaCCToken -] - -{ #category : #generated } -CSExternAliasDirectiveNode >> externToken [ - ^ externToken -] - -{ #category : #generated } -CSExternAliasDirectiveNode >> externToken: aSmaCCToken [ - externToken := aSmaCCToken -] - -{ #category : #generated } -CSExternAliasDirectiveNode >> identifierToken [ - ^ identifierToken -] - -{ #category : #generated } -CSExternAliasDirectiveNode >> identifierToken: aSmaCCToken [ - identifierToken := aSmaCCToken -] - -{ #category : #generated } -CSExternAliasDirectiveNode >> ignoredTokenVariables [ - ^ #(#semicolonToken) -] - -{ #category : #generated } -CSExternAliasDirectiveNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -CSExternAliasDirectiveNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] - -{ #category : #generated } -CSExternAliasDirectiveNode >> tokenVariables [ - ^ #(#externToken #aliasToken #identifierToken) -] diff --git a/src/SmaCC_CSharp/CSFieldDeclarationNode.class.st b/src/SmaCC_CSharp/CSFieldDeclarationNode.class.st deleted file mode 100644 index ec8a430e3..000000000 --- a/src/SmaCC_CSharp/CSFieldDeclarationNode.class.st +++ /dev/null @@ -1,120 +0,0 @@ -Class { - #name : #CSFieldDeclarationNode, - #superclass : #CSDeclarationNode, - #instVars : [ - '_attributes', - 'modifiers', - 'type', - 'declarators', - 'commaTokens', - 'semicolonToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSFieldDeclarationNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSFieldDeclarationNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSFieldDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitFieldDeclaration: self -] - -{ #category : #generated } -CSFieldDeclarationNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -CSFieldDeclarationNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -CSFieldDeclarationNode >> compositeNodeVariables [ - ^ #(#_attributes #declarators) -] - -{ #category : #generated } -CSFieldDeclarationNode >> compositeTokenVariables [ - ^ #(#modifiers) -] - -{ #category : #generated } -CSFieldDeclarationNode >> declarators [ - ^ declarators -] - -{ #category : #generated } -CSFieldDeclarationNode >> declarators: anOrderedCollection [ - self setParents: self declarators to: nil. - declarators := anOrderedCollection. - self setParents: self declarators to: self -] - -{ #category : #generated } -CSFieldDeclarationNode >> ignoredCompositeTokenVariables [ - ^ #(#commaTokens) -] - -{ #category : #generated } -CSFieldDeclarationNode >> ignoredTokenVariables [ - ^ #(#semicolonToken) -] - -{ #category : #'generated-initialize-release' } -CSFieldDeclarationNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. - modifiers := OrderedCollection new: 2. - declarators := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -CSFieldDeclarationNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -CSFieldDeclarationNode >> modifiers: anOrderedCollection [ - modifiers := anOrderedCollection -] - -{ #category : #generated } -CSFieldDeclarationNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -CSFieldDeclarationNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -CSFieldDeclarationNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] - -{ #category : #generated } -CSFieldDeclarationNode >> type [ - ^ type -] - -{ #category : #generated } -CSFieldDeclarationNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSFinallyClauseNode.class.st b/src/SmaCC_CSharp/CSFinallyClauseNode.class.st deleted file mode 100644 index 9a85e1aa3..000000000 --- a/src/SmaCC_CSharp/CSFinallyClauseNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #CSFinallyClauseNode, - #superclass : #CSProgramNode, - #instVars : [ - 'finallyToken', - 'block' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSFinallyClauseNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitFinallyClause: self -] - -{ #category : #generated } -CSFinallyClauseNode >> block [ - ^ block -] - -{ #category : #generated } -CSFinallyClauseNode >> block: aCSBlockStatementNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aCSBlockStatementNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -CSFinallyClauseNode >> finallyToken [ - ^ finallyToken -] - -{ #category : #generated } -CSFinallyClauseNode >> finallyToken: aSmaCCToken [ - finallyToken := aSmaCCToken -] - -{ #category : #generated } -CSFinallyClauseNode >> nodeVariables [ - ^ #(#block) -] - -{ #category : #generated } -CSFinallyClauseNode >> tokenVariables [ - ^ #(#finallyToken) -] diff --git a/src/SmaCC_CSharp/CSFixedParameterNode.class.st b/src/SmaCC_CSharp/CSFixedParameterNode.class.st deleted file mode 100644 index 6ef8e3eba..000000000 --- a/src/SmaCC_CSharp/CSFixedParameterNode.class.st +++ /dev/null @@ -1,109 +0,0 @@ -Class { - #name : #CSFixedParameterNode, - #superclass : #CSProgramNode, - #instVars : [ - '_attributes', - 'modifier', - 'type', - 'name', - 'equalToken', - 'expression' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSFixedParameterNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSFixedParameterNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSFixedParameterNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitFixedParameter: self -] - -{ #category : #generated } -CSFixedParameterNode >> compositeNodeVariables [ - ^ #(#_attributes) -] - -{ #category : #generated } -CSFixedParameterNode >> equalToken [ - ^ equalToken -] - -{ #category : #generated } -CSFixedParameterNode >> equalToken: aSmaCCToken [ - equalToken := aSmaCCToken -] - -{ #category : #generated } -CSFixedParameterNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSFixedParameterNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #'generated-initialize-release' } -CSFixedParameterNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. -] - -{ #category : #generated } -CSFixedParameterNode >> modifier [ - ^ modifier -] - -{ #category : #generated } -CSFixedParameterNode >> modifier: aSmaCCToken [ - modifier := aSmaCCToken -] - -{ #category : #generated } -CSFixedParameterNode >> name [ - ^ name -] - -{ #category : #generated } -CSFixedParameterNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -CSFixedParameterNode >> nodeVariables [ - ^ #(#type #expression) -] - -{ #category : #generated } -CSFixedParameterNode >> tokenVariables [ - ^ #(#modifier #name #equalToken) -] - -{ #category : #generated } -CSFixedParameterNode >> type [ - ^ type -] - -{ #category : #generated } -CSFixedParameterNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSFixedPointerDeclaratorNode.class.st b/src/SmaCC_CSharp/CSFixedPointerDeclaratorNode.class.st deleted file mode 100644 index a08ed62c6..000000000 --- a/src/SmaCC_CSharp/CSFixedPointerDeclaratorNode.class.st +++ /dev/null @@ -1,70 +0,0 @@ -Class { - #name : #CSFixedPointerDeclaratorNode, - #superclass : #CSProgramNode, - #instVars : [ - 'identifierToken', - 'equalToken', - 'andToken', - 'expression' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSFixedPointerDeclaratorNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitFixedPointerDeclarator: self -] - -{ #category : #generated } -CSFixedPointerDeclaratorNode >> andToken [ - ^ andToken -] - -{ #category : #generated } -CSFixedPointerDeclaratorNode >> andToken: aSmaCCToken [ - andToken := aSmaCCToken -] - -{ #category : #generated } -CSFixedPointerDeclaratorNode >> equalToken [ - ^ equalToken -] - -{ #category : #generated } -CSFixedPointerDeclaratorNode >> equalToken: aSmaCCToken [ - equalToken := aSmaCCToken -] - -{ #category : #generated } -CSFixedPointerDeclaratorNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSFixedPointerDeclaratorNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSFixedPointerDeclaratorNode >> identifierToken [ - ^ identifierToken -] - -{ #category : #generated } -CSFixedPointerDeclaratorNode >> identifierToken: aSmaCCToken [ - identifierToken := aSmaCCToken -] - -{ #category : #generated } -CSFixedPointerDeclaratorNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -CSFixedPointerDeclaratorNode >> tokenVariables [ - ^ #(#identifierToken #equalToken #andToken) -] diff --git a/src/SmaCC_CSharp/CSFixedSizeBufferDeclarationNode.class.st b/src/SmaCC_CSharp/CSFixedSizeBufferDeclarationNode.class.st deleted file mode 100644 index 4cca441b2..000000000 --- a/src/SmaCC_CSharp/CSFixedSizeBufferDeclarationNode.class.st +++ /dev/null @@ -1,119 +0,0 @@ -Class { - #name : #CSFixedSizeBufferDeclarationNode, - #superclass : #CSDeclarationNode, - #instVars : [ - '_attributes', - 'modifiers', - 'fixedToken', - 'type', - 'declarators', - 'semicolonToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSFixedSizeBufferDeclarationNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSFixedSizeBufferDeclarationNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSFixedSizeBufferDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitFixedSizeBufferDeclaration: self -] - -{ #category : #generated } -CSFixedSizeBufferDeclarationNode >> compositeNodeVariables [ - ^ #(#_attributes #declarators) -] - -{ #category : #generated } -CSFixedSizeBufferDeclarationNode >> compositeTokenVariables [ - ^ #(#modifiers) -] - -{ #category : #generated } -CSFixedSizeBufferDeclarationNode >> declarators [ - ^ declarators -] - -{ #category : #generated } -CSFixedSizeBufferDeclarationNode >> declarators: anOrderedCollection [ - self setParents: self declarators to: nil. - declarators := anOrderedCollection. - self setParents: self declarators to: self -] - -{ #category : #generated } -CSFixedSizeBufferDeclarationNode >> fixedToken [ - ^ fixedToken -] - -{ #category : #generated } -CSFixedSizeBufferDeclarationNode >> fixedToken: aSmaCCToken [ - fixedToken := aSmaCCToken -] - -{ #category : #generated } -CSFixedSizeBufferDeclarationNode >> ignoredTokenVariables [ - ^ #(#semicolonToken) -] - -{ #category : #'generated-initialize-release' } -CSFixedSizeBufferDeclarationNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. - modifiers := OrderedCollection new: 2. - declarators := OrderedCollection new: 2. -] - -{ #category : #generated } -CSFixedSizeBufferDeclarationNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -CSFixedSizeBufferDeclarationNode >> modifiers: anOrderedCollection [ - modifiers := anOrderedCollection -] - -{ #category : #generated } -CSFixedSizeBufferDeclarationNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -CSFixedSizeBufferDeclarationNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -CSFixedSizeBufferDeclarationNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] - -{ #category : #generated } -CSFixedSizeBufferDeclarationNode >> tokenVariables [ - ^ #(#fixedToken) -] - -{ #category : #generated } -CSFixedSizeBufferDeclarationNode >> type [ - ^ type -] - -{ #category : #generated } -CSFixedSizeBufferDeclarationNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSFixedSizeBufferDeclaratorNode.class.st b/src/SmaCC_CSharp/CSFixedSizeBufferDeclaratorNode.class.st deleted file mode 100644 index 2bb982a0c..000000000 --- a/src/SmaCC_CSharp/CSFixedSizeBufferDeclaratorNode.class.st +++ /dev/null @@ -1,70 +0,0 @@ -Class { - #name : #CSFixedSizeBufferDeclaratorNode, - #superclass : #CSProgramNode, - #instVars : [ - 'name', - 'leftBracketToken', - 'expression', - 'rightBracketToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSFixedSizeBufferDeclaratorNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitFixedSizeBufferDeclarator: self -] - -{ #category : #generated } -CSFixedSizeBufferDeclaratorNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSFixedSizeBufferDeclaratorNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSFixedSizeBufferDeclaratorNode >> leftBracketToken [ - ^ leftBracketToken -] - -{ #category : #generated } -CSFixedSizeBufferDeclaratorNode >> leftBracketToken: aSmaCCToken [ - leftBracketToken := aSmaCCToken -] - -{ #category : #generated } -CSFixedSizeBufferDeclaratorNode >> name [ - ^ name -] - -{ #category : #generated } -CSFixedSizeBufferDeclaratorNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -CSFixedSizeBufferDeclaratorNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -CSFixedSizeBufferDeclaratorNode >> rightBracketToken [ - ^ rightBracketToken -] - -{ #category : #generated } -CSFixedSizeBufferDeclaratorNode >> rightBracketToken: aSmaCCToken [ - rightBracketToken := aSmaCCToken -] - -{ #category : #generated } -CSFixedSizeBufferDeclaratorNode >> tokenVariables [ - ^ #(#name #leftBracketToken #rightBracketToken) -] diff --git a/src/SmaCC_CSharp/CSFixedStatementNode.class.st b/src/SmaCC_CSharp/CSFixedStatementNode.class.st deleted file mode 100644 index c1e546a59..000000000 --- a/src/SmaCC_CSharp/CSFixedStatementNode.class.st +++ /dev/null @@ -1,126 +0,0 @@ -Class { - #name : #CSFixedStatementNode, - #superclass : #CSStatementNode, - #instVars : [ - 'fixedToken', - 'leftParenToken', - 'type', - 'declarators', - 'commaTokens', - 'rightParenToken', - 'statement' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSFixedStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitFixedStatement: self -] - -{ #category : #generated } -CSFixedStatementNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -CSFixedStatementNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -CSFixedStatementNode >> compositeNodeVariables [ - ^ #(#declarators) -] - -{ #category : #generated } -CSFixedStatementNode >> declarators [ - ^ declarators -] - -{ #category : #generated } -CSFixedStatementNode >> declarators: anOrderedCollection [ - self setParents: self declarators to: nil. - declarators := anOrderedCollection. - self setParents: self declarators to: self -] - -{ #category : #generated } -CSFixedStatementNode >> fixedToken [ - ^ fixedToken -] - -{ #category : #generated } -CSFixedStatementNode >> fixedToken: aSmaCCToken [ - fixedToken := aSmaCCToken -] - -{ #category : #generated } -CSFixedStatementNode >> ignoredCompositeTokenVariables [ - ^ #(#commaTokens) -] - -{ #category : #'generated-initialize-release' } -CSFixedStatementNode >> initialize [ - super initialize. - declarators := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -CSFixedStatementNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSFixedStatementNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSFixedStatementNode >> nodeVariables [ - ^ #(#type #statement) -] - -{ #category : #generated } -CSFixedStatementNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSFixedStatementNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSFixedStatementNode >> statement [ - ^ statement -] - -{ #category : #generated } -CSFixedStatementNode >> statement: aCSStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aCSStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -CSFixedStatementNode >> tokenVariables [ - ^ #(#fixedToken #leftParenToken #rightParenToken) -] - -{ #category : #generated } -CSFixedStatementNode >> type [ - ^ type -] - -{ #category : #generated } -CSFixedStatementNode >> type: aCSPointerTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSPointerTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSForStatementNode.class.st b/src/SmaCC_CSharp/CSForStatementNode.class.st deleted file mode 100644 index 97fdc9ee5..000000000 --- a/src/SmaCC_CSharp/CSForStatementNode.class.st +++ /dev/null @@ -1,137 +0,0 @@ -Class { - #name : #CSForStatementNode, - #superclass : #CSStatementNode, - #instVars : [ - 'forToken', - 'leftParenToken', - 'initializer', - 'semicolonTokens', - 'condition', - 'iterator', - 'rightParenToken', - 'statement' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSForStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitForStatement: self -] - -{ #category : #generated } -CSForStatementNode >> condition [ - ^ condition -] - -{ #category : #generated } -CSForStatementNode >> condition: aCSExpressionNode [ - self condition notNil - ifTrue: [ self condition parent: nil ]. - condition := aCSExpressionNode. - self condition notNil - ifTrue: [ self condition parent: self ] -] - -{ #category : #generated } -CSForStatementNode >> forToken [ - ^ forToken -] - -{ #category : #generated } -CSForStatementNode >> forToken: aSmaCCToken [ - forToken := aSmaCCToken -] - -{ #category : #generated } -CSForStatementNode >> ignoredCompositeTokenVariables [ - ^ #(#semicolonTokens) -] - -{ #category : #'generated-initialize-release' } -CSForStatementNode >> initialize [ - super initialize. - semicolonTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -CSForStatementNode >> initializer [ - ^ initializer -] - -{ #category : #generated } -CSForStatementNode >> initializer: aCSProgramNode [ - self initializer notNil - ifTrue: [ self initializer parent: nil ]. - initializer := aCSProgramNode. - self initializer notNil - ifTrue: [ self initializer parent: self ] -] - -{ #category : #generated } -CSForStatementNode >> iterator [ - ^ iterator -] - -{ #category : #generated } -CSForStatementNode >> iterator: aCSStatementListNode [ - self iterator notNil - ifTrue: [ self iterator parent: nil ]. - iterator := aCSStatementListNode. - self iterator notNil - ifTrue: [ self iterator parent: self ] -] - -{ #category : #generated } -CSForStatementNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSForStatementNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSForStatementNode >> nodeVariables [ - ^ #(#initializer #condition #iterator #statement) -] - -{ #category : #generated } -CSForStatementNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSForStatementNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSForStatementNode >> semicolonTokens [ - ^ semicolonTokens -] - -{ #category : #generated } -CSForStatementNode >> semicolonTokens: anOrderedCollection [ - semicolonTokens := anOrderedCollection -] - -{ #category : #generated } -CSForStatementNode >> statement [ - ^ statement -] - -{ #category : #generated } -CSForStatementNode >> statement: aCSStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aCSStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -CSForStatementNode >> tokenVariables [ - ^ #(#forToken #leftParenToken #rightParenToken) -] diff --git a/src/SmaCC_CSharp/CSForeachStatementNode.class.st b/src/SmaCC_CSharp/CSForeachStatementNode.class.st deleted file mode 100644 index 315b4e3e9..000000000 --- a/src/SmaCC_CSharp/CSForeachStatementNode.class.st +++ /dev/null @@ -1,122 +0,0 @@ -Class { - #name : #CSForeachStatementNode, - #superclass : #CSStatementNode, - #instVars : [ - 'foreachToken', - 'leftParenToken', - 'type', - 'name', - 'inToken', - 'expression', - 'rightParenToken', - 'statement' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSForeachStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitForeachStatement: self -] - -{ #category : #generated } -CSForeachStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSForeachStatementNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSForeachStatementNode >> foreachToken [ - ^ foreachToken -] - -{ #category : #generated } -CSForeachStatementNode >> foreachToken: aSmaCCToken [ - foreachToken := aSmaCCToken -] - -{ #category : #generated } -CSForeachStatementNode >> inToken [ - ^ inToken -] - -{ #category : #generated } -CSForeachStatementNode >> inToken: aSmaCCToken [ - inToken := aSmaCCToken -] - -{ #category : #generated } -CSForeachStatementNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSForeachStatementNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSForeachStatementNode >> name [ - ^ name -] - -{ #category : #generated } -CSForeachStatementNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -CSForeachStatementNode >> nodeVariables [ - ^ #(#type #expression #statement) -] - -{ #category : #generated } -CSForeachStatementNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSForeachStatementNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSForeachStatementNode >> statement [ - ^ statement -] - -{ #category : #generated } -CSForeachStatementNode >> statement: aCSStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aCSStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -CSForeachStatementNode >> tokenVariables [ - ^ #(#foreachToken #leftParenToken #name #inToken #rightParenToken) -] - -{ #category : #generated } -CSForeachStatementNode >> type [ - ^ type -] - -{ #category : #generated } -CSForeachStatementNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSGetAccessorDeclarationNode.class.st b/src/SmaCC_CSharp/CSGetAccessorDeclarationNode.class.st deleted file mode 100644 index 5e5ed9eb0..000000000 --- a/src/SmaCC_CSharp/CSGetAccessorDeclarationNode.class.st +++ /dev/null @@ -1,105 +0,0 @@ -Class { - #name : #CSGetAccessorDeclarationNode, - #superclass : #CSProgramNode, - #instVars : [ - '_attributes', - 'modifiers', - 'getToken', - 'body', - 'semicolonToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSGetAccessorDeclarationNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSGetAccessorDeclarationNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSGetAccessorDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitGetAccessorDeclaration: self -] - -{ #category : #generated } -CSGetAccessorDeclarationNode >> body [ - ^ body -] - -{ #category : #generated } -CSGetAccessorDeclarationNode >> body: aCSBlockStatementNode [ - self body notNil - ifTrue: [ self body parent: nil ]. - body := aCSBlockStatementNode. - self body notNil - ifTrue: [ self body parent: self ] -] - -{ #category : #generated } -CSGetAccessorDeclarationNode >> compositeNodeVariables [ - ^ #(#_attributes) -] - -{ #category : #generated } -CSGetAccessorDeclarationNode >> compositeTokenVariables [ - ^ #(#modifiers) -] - -{ #category : #generated } -CSGetAccessorDeclarationNode >> getToken [ - ^ getToken -] - -{ #category : #generated } -CSGetAccessorDeclarationNode >> getToken: aSmaCCToken [ - getToken := aSmaCCToken -] - -{ #category : #generated } -CSGetAccessorDeclarationNode >> ignoredTokenVariables [ - ^ #(#semicolonToken) -] - -{ #category : #'generated-initialize-release' } -CSGetAccessorDeclarationNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. - modifiers := OrderedCollection new: 2. -] - -{ #category : #generated } -CSGetAccessorDeclarationNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -CSGetAccessorDeclarationNode >> modifiers: anOrderedCollection [ - modifiers := anOrderedCollection -] - -{ #category : #generated } -CSGetAccessorDeclarationNode >> nodeVariables [ - ^ #(#body) -] - -{ #category : #generated } -CSGetAccessorDeclarationNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -CSGetAccessorDeclarationNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] - -{ #category : #generated } -CSGetAccessorDeclarationNode >> tokenVariables [ - ^ #(#getToken) -] diff --git a/src/SmaCC_CSharp/CSGotoStatementNode.class.st b/src/SmaCC_CSharp/CSGotoStatementNode.class.st deleted file mode 100644 index 2a3023736..000000000 --- a/src/SmaCC_CSharp/CSGotoStatementNode.class.st +++ /dev/null @@ -1,97 +0,0 @@ -Class { - #name : #CSGotoStatementNode, - #superclass : #CSStatementNode, - #instVars : [ - 'gotoToken', - 'identifierToken', - 'semicolonToken', - 'caseToken', - 'expression', - 'defaultToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSGotoStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitGotoStatement: self -] - -{ #category : #generated } -CSGotoStatementNode >> caseToken [ - ^ caseToken -] - -{ #category : #generated } -CSGotoStatementNode >> caseToken: aSmaCCToken [ - caseToken := aSmaCCToken -] - -{ #category : #generated } -CSGotoStatementNode >> defaultToken [ - ^ defaultToken -] - -{ #category : #generated } -CSGotoStatementNode >> defaultToken: aSmaCCToken [ - defaultToken := aSmaCCToken -] - -{ #category : #generated } -CSGotoStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSGotoStatementNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSGotoStatementNode >> gotoToken [ - ^ gotoToken -] - -{ #category : #generated } -CSGotoStatementNode >> gotoToken: aSmaCCToken [ - gotoToken := aSmaCCToken -] - -{ #category : #generated } -CSGotoStatementNode >> identifierToken [ - ^ identifierToken -] - -{ #category : #generated } -CSGotoStatementNode >> identifierToken: aSmaCCToken [ - identifierToken := aSmaCCToken -] - -{ #category : #generated } -CSGotoStatementNode >> ignoredTokenVariables [ - ^ #(#semicolonToken) -] - -{ #category : #generated } -CSGotoStatementNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -CSGotoStatementNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -CSGotoStatementNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] - -{ #category : #generated } -CSGotoStatementNode >> tokenVariables [ - ^ #(#gotoToken #identifierToken #caseToken #defaultToken) -] diff --git a/src/SmaCC_CSharp/CSIfStatementNode.class.st b/src/SmaCC_CSharp/CSIfStatementNode.class.st deleted file mode 100644 index 78b3b83cd..000000000 --- a/src/SmaCC_CSharp/CSIfStatementNode.class.st +++ /dev/null @@ -1,111 +0,0 @@ -Class { - #name : #CSIfStatementNode, - #superclass : #CSStatementNode, - #instVars : [ - 'ifToken', - 'leftParenToken', - 'expression', - 'rightParenToken', - 'thenStatement', - 'elseToken', - 'elseStatement' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSIfStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitIfStatement: self -] - -{ #category : #generated } -CSIfStatementNode >> elseStatement [ - ^ elseStatement -] - -{ #category : #generated } -CSIfStatementNode >> elseStatement: aCSStatementNode [ - self elseStatement notNil - ifTrue: [ self elseStatement parent: nil ]. - elseStatement := aCSStatementNode. - self elseStatement notNil - ifTrue: [ self elseStatement parent: self ] -] - -{ #category : #generated } -CSIfStatementNode >> elseToken [ - ^ elseToken -] - -{ #category : #generated } -CSIfStatementNode >> elseToken: aSmaCCToken [ - elseToken := aSmaCCToken -] - -{ #category : #generated } -CSIfStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSIfStatementNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSIfStatementNode >> ifToken [ - ^ ifToken -] - -{ #category : #generated } -CSIfStatementNode >> ifToken: aSmaCCToken [ - ifToken := aSmaCCToken -] - -{ #category : #generated } -CSIfStatementNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSIfStatementNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSIfStatementNode >> nodeVariables [ - ^ #(#expression #thenStatement #elseStatement) -] - -{ #category : #generated } -CSIfStatementNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSIfStatementNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSIfStatementNode >> thenStatement [ - ^ thenStatement -] - -{ #category : #generated } -CSIfStatementNode >> thenStatement: aCSStatementNode [ - self thenStatement notNil - ifTrue: [ self thenStatement parent: nil ]. - thenStatement := aCSStatementNode. - self thenStatement notNil - ifTrue: [ self thenStatement parent: self ] -] - -{ #category : #generated } -CSIfStatementNode >> tokenVariables [ - ^ #(#ifToken #leftParenToken #rightParenToken #elseToken) -] diff --git a/src/SmaCC_CSharp/CSImplicitAnonymousFunctionSignatureNode.class.st b/src/SmaCC_CSharp/CSImplicitAnonymousFunctionSignatureNode.class.st deleted file mode 100644 index 3a8db1317..000000000 --- a/src/SmaCC_CSharp/CSImplicitAnonymousFunctionSignatureNode.class.st +++ /dev/null @@ -1,78 +0,0 @@ -Class { - #name : #CSImplicitAnonymousFunctionSignatureNode, - #superclass : #CSProgramNode, - #instVars : [ - 'leftParenToken', - 'names', - 'commaTokens', - 'rightParenToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSImplicitAnonymousFunctionSignatureNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitImplicitAnonymousFunctionSignature: self -] - -{ #category : #generated } -CSImplicitAnonymousFunctionSignatureNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -CSImplicitAnonymousFunctionSignatureNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -CSImplicitAnonymousFunctionSignatureNode >> compositeTokenVariables [ - ^ #(#names) -] - -{ #category : #generated } -CSImplicitAnonymousFunctionSignatureNode >> ignoredCompositeTokenVariables [ - ^ #(#commaTokens) -] - -{ #category : #'generated-initialize-release' } -CSImplicitAnonymousFunctionSignatureNode >> initialize [ - super initialize. - names := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -CSImplicitAnonymousFunctionSignatureNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSImplicitAnonymousFunctionSignatureNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSImplicitAnonymousFunctionSignatureNode >> names [ - ^ names -] - -{ #category : #generated } -CSImplicitAnonymousFunctionSignatureNode >> names: anOrderedCollection [ - names := anOrderedCollection -] - -{ #category : #generated } -CSImplicitAnonymousFunctionSignatureNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSImplicitAnonymousFunctionSignatureNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSImplicitAnonymousFunctionSignatureNode >> tokenVariables [ - ^ #(#leftParenToken #rightParenToken) -] diff --git a/src/SmaCC_CSharp/CSIndexerDeclarationNode.class.st b/src/SmaCC_CSharp/CSIndexerDeclarationNode.class.st deleted file mode 100644 index 5c4b96ee8..000000000 --- a/src/SmaCC_CSharp/CSIndexerDeclarationNode.class.st +++ /dev/null @@ -1,257 +0,0 @@ -Class { - #name : #CSIndexerDeclarationNode, - #superclass : #CSDeclarationNode, - #instVars : [ - '_attributes', - 'modifiers', - 'returnType', - 'thisToken', - 'leftBracketToken', - 'parameters', - 'commas', - 'rightBracketToken', - 'type', - 'periodToken', - 'leftBraceToken', - 'getAccessor', - 'setAccessor', - 'rightBraceToken', - 'equalGreaterThanToken', - 'expression', - 'semicolonToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSIndexerDeclarationNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSIndexerDeclarationNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSIndexerDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitIndexerDeclaration: self -] - -{ #category : #generated } -CSIndexerDeclarationNode >> commas [ - ^ commas -] - -{ #category : #generated } -CSIndexerDeclarationNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -CSIndexerDeclarationNode >> compositeNodeVariables [ - ^ #(#_attributes #parameters) -] - -{ #category : #generated } -CSIndexerDeclarationNode >> compositeTokenVariables [ - ^ #(#modifiers #commas) -] - -{ #category : #generated } -CSIndexerDeclarationNode >> equalGreaterThanToken [ - ^ equalGreaterThanToken -] - -{ #category : #generated } -CSIndexerDeclarationNode >> equalGreaterThanToken: aSmaCCToken [ - equalGreaterThanToken := aSmaCCToken -] - -{ #category : #generated } -CSIndexerDeclarationNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSIndexerDeclarationNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSIndexerDeclarationNode >> getAccessor [ - ^ getAccessor -] - -{ #category : #generated } -CSIndexerDeclarationNode >> getAccessor: aCSGetAccessorDeclarationNode [ - self getAccessor notNil - ifTrue: [ self getAccessor parent: nil ]. - getAccessor := aCSGetAccessorDeclarationNode. - self getAccessor notNil - ifTrue: [ self getAccessor parent: self ] -] - -{ #category : #generated } -CSIndexerDeclarationNode >> ignoredTokenVariables [ - ^ #(#semicolonToken) -] - -{ #category : #'generated-initialize-release' } -CSIndexerDeclarationNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. - modifiers := OrderedCollection new: 2. - parameters := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -CSIndexerDeclarationNode >> leftBraceToken [ - ^ leftBraceToken -] - -{ #category : #generated } -CSIndexerDeclarationNode >> leftBraceToken: aSmaCCToken [ - leftBraceToken := aSmaCCToken -] - -{ #category : #generated } -CSIndexerDeclarationNode >> leftBracketToken [ - ^ leftBracketToken -] - -{ #category : #generated } -CSIndexerDeclarationNode >> leftBracketToken: aSmaCCToken [ - leftBracketToken := aSmaCCToken -] - -{ #category : #generated } -CSIndexerDeclarationNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -CSIndexerDeclarationNode >> modifiers: anOrderedCollection [ - modifiers := anOrderedCollection -] - -{ #category : #generated } -CSIndexerDeclarationNode >> nodeVariables [ - ^ #(#returnType #type #getAccessor #setAccessor #expression) -] - -{ #category : #generated } -CSIndexerDeclarationNode >> parameters [ - ^ parameters -] - -{ #category : #generated } -CSIndexerDeclarationNode >> parameters: anOrderedCollection [ - self setParents: self parameters to: nil. - parameters := anOrderedCollection. - self setParents: self parameters to: self -] - -{ #category : #generated } -CSIndexerDeclarationNode >> periodToken [ - ^ periodToken -] - -{ #category : #generated } -CSIndexerDeclarationNode >> periodToken: aSmaCCToken [ - periodToken := aSmaCCToken -] - -{ #category : #generated } -CSIndexerDeclarationNode >> returnType [ - ^ returnType -] - -{ #category : #generated } -CSIndexerDeclarationNode >> returnType: aCSTypeNode [ - self returnType notNil - ifTrue: [ self returnType parent: nil ]. - returnType := aCSTypeNode. - self returnType notNil - ifTrue: [ self returnType parent: self ] -] - -{ #category : #generated } -CSIndexerDeclarationNode >> rightBraceToken [ - ^ rightBraceToken -] - -{ #category : #generated } -CSIndexerDeclarationNode >> rightBraceToken: aSmaCCToken [ - rightBraceToken := aSmaCCToken -] - -{ #category : #generated } -CSIndexerDeclarationNode >> rightBracketToken [ - ^ rightBracketToken -] - -{ #category : #generated } -CSIndexerDeclarationNode >> rightBracketToken: aSmaCCToken [ - rightBracketToken := aSmaCCToken -] - -{ #category : #generated } -CSIndexerDeclarationNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -CSIndexerDeclarationNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] - -{ #category : #generated } -CSIndexerDeclarationNode >> setAccessor [ - ^ setAccessor -] - -{ #category : #generated } -CSIndexerDeclarationNode >> setAccessor: aCSSetAccessorDeclarationNode [ - self setAccessor notNil - ifTrue: [ self setAccessor parent: nil ]. - setAccessor := aCSSetAccessorDeclarationNode. - self setAccessor notNil - ifTrue: [ self setAccessor parent: self ] -] - -{ #category : #generated } -CSIndexerDeclarationNode >> thisToken [ - ^ thisToken -] - -{ #category : #generated } -CSIndexerDeclarationNode >> thisToken: aSmaCCToken [ - thisToken := aSmaCCToken -] - -{ #category : #generated } -CSIndexerDeclarationNode >> tokenVariables [ - ^ #(#thisToken #leftBracketToken #rightBracketToken #periodToken #leftBraceToken #rightBraceToken #equalGreaterThanToken) -] - -{ #category : #generated } -CSIndexerDeclarationNode >> type [ - ^ type -] - -{ #category : #generated } -CSIndexerDeclarationNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSIntegerLiteralExpressionNode.class.st b/src/SmaCC_CSharp/CSIntegerLiteralExpressionNode.class.st deleted file mode 100644 index 9eef8f388..000000000 --- a/src/SmaCC_CSharp/CSIntegerLiteralExpressionNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #CSIntegerLiteralExpressionNode, - #superclass : #CSLiteralExpressionNode, - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSIntegerLiteralExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitIntegerLiteralExpression: self -] diff --git a/src/SmaCC_CSharp/CSInterfaceDeclarationNode.class.st b/src/SmaCC_CSharp/CSInterfaceDeclarationNode.class.st deleted file mode 100644 index 013b955f2..000000000 --- a/src/SmaCC_CSharp/CSInterfaceDeclarationNode.class.st +++ /dev/null @@ -1,209 +0,0 @@ -Class { - #name : #CSInterfaceDeclarationNode, - #superclass : #CSDeclarationNode, - #instVars : [ - '_attributes', - 'modifiers', - 'partialToken', - 'interfaceToken', - 'name', - 'typeParameters', - 'colon', - 'supertypes', - 'commas', - 'constraintClauses', - 'leftBrace', - 'declarations', - 'rightBrace', - 'semicolon' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSInterfaceDeclarationNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitInterfaceDeclaration: self -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> colon [ - ^ colon -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> commas [ - ^ commas -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> compositeNodeVariables [ - ^ #(#_attributes #supertypes #constraintClauses #declarations) -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> compositeTokenVariables [ - ^ #(#modifiers #commas) -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> constraintClauses [ - ^ constraintClauses -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> constraintClauses: anOrderedCollection [ - self setParents: self constraintClauses to: nil. - constraintClauses := anOrderedCollection. - self setParents: self constraintClauses to: self -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> declarations [ - ^ declarations -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> declarations: anOrderedCollection [ - self setParents: self declarations to: nil. - declarations := anOrderedCollection. - self setParents: self declarations to: self -] - -{ #category : #'generated-initialize-release' } -CSInterfaceDeclarationNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. - modifiers := OrderedCollection new: 2. - supertypes := OrderedCollection new: 2. - commas := OrderedCollection new: 2. - constraintClauses := OrderedCollection new: 2. - declarations := OrderedCollection new: 2. -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> interfaceToken [ - ^ interfaceToken -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> interfaceToken: aSmaCCToken [ - interfaceToken := aSmaCCToken -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> modifiers: anOrderedCollection [ - modifiers := anOrderedCollection -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> name [ - ^ name -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> nodeVariables [ - ^ #(#typeParameters) -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> partialToken [ - ^ partialToken -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> partialToken: aSmaCCToken [ - partialToken := aSmaCCToken -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> supertypes [ - ^ supertypes -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> supertypes: anOrderedCollection [ - self setParents: self supertypes to: nil. - supertypes := anOrderedCollection. - self setParents: self supertypes to: self -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> tokenVariables [ - ^ #(#partialToken #interfaceToken #name #colon #leftBrace #rightBrace #semicolon) -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> typeParameters [ - ^ typeParameters -] - -{ #category : #generated } -CSInterfaceDeclarationNode >> typeParameters: aCSVariantTypeParameterListNode [ - self typeParameters notNil - ifTrue: [ self typeParameters parent: nil ]. - typeParameters := aCSVariantTypeParameterListNode. - self typeParameters notNil - ifTrue: [ self typeParameters parent: self ] -] diff --git a/src/SmaCC_CSharp/CSInterfaceEventDeclarationNode.class.st b/src/SmaCC_CSharp/CSInterfaceEventDeclarationNode.class.st deleted file mode 100644 index 5b2e62135..000000000 --- a/src/SmaCC_CSharp/CSInterfaceEventDeclarationNode.class.st +++ /dev/null @@ -1,105 +0,0 @@ -Class { - #name : #CSInterfaceEventDeclarationNode, - #superclass : #CSDeclarationNode, - #instVars : [ - '_attributes', - 'modifier', - 'eventToken', - 'type', - 'name', - 'semicolon' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSInterfaceEventDeclarationNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSInterfaceEventDeclarationNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSInterfaceEventDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitInterfaceEventDeclaration: self -] - -{ #category : #generated } -CSInterfaceEventDeclarationNode >> compositeNodeVariables [ - ^ #(#_attributes) -] - -{ #category : #generated } -CSInterfaceEventDeclarationNode >> eventToken [ - ^ eventToken -] - -{ #category : #generated } -CSInterfaceEventDeclarationNode >> eventToken: aSmaCCToken [ - eventToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -CSInterfaceEventDeclarationNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. -] - -{ #category : #generated } -CSInterfaceEventDeclarationNode >> modifier [ - ^ modifier -] - -{ #category : #generated } -CSInterfaceEventDeclarationNode >> modifier: aSmaCCToken [ - modifier := aSmaCCToken -] - -{ #category : #generated } -CSInterfaceEventDeclarationNode >> name [ - ^ name -] - -{ #category : #generated } -CSInterfaceEventDeclarationNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -CSInterfaceEventDeclarationNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -CSInterfaceEventDeclarationNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -CSInterfaceEventDeclarationNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -CSInterfaceEventDeclarationNode >> tokenVariables [ - ^ #(#modifier #eventToken #name #semicolon) -] - -{ #category : #generated } -CSInterfaceEventDeclarationNode >> type [ - ^ type -] - -{ #category : #generated } -CSInterfaceEventDeclarationNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSInterfaceIndexerDeclarationNode.class.st b/src/SmaCC_CSharp/CSInterfaceIndexerDeclarationNode.class.st deleted file mode 100644 index be9c837f9..000000000 --- a/src/SmaCC_CSharp/CSInterfaceIndexerDeclarationNode.class.st +++ /dev/null @@ -1,188 +0,0 @@ -Class { - #name : #CSInterfaceIndexerDeclarationNode, - #superclass : #CSDeclarationNode, - #instVars : [ - '_attributes', - 'modifier', - 'type', - 'thisToken', - 'leftBracket', - 'parameters', - 'commas', - 'rightBracket', - 'leftBrace', - 'getAccessor', - 'setAccessor', - 'rightBrace' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitInterfaceIndexerDeclaration: self -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> commas [ - ^ commas -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> compositeNodeVariables [ - ^ #(#_attributes #parameters) -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> compositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> getAccessor [ - ^ getAccessor -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> getAccessor: aCSInterfacePropertyAccessorNode [ - self getAccessor notNil - ifTrue: [ self getAccessor parent: nil ]. - getAccessor := aCSInterfacePropertyAccessorNode. - self getAccessor notNil - ifTrue: [ self getAccessor parent: self ] -] - -{ #category : #'generated-initialize-release' } -CSInterfaceIndexerDeclarationNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. - parameters := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> leftBracket [ - ^ leftBracket -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> leftBracket: aSmaCCToken [ - leftBracket := aSmaCCToken -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> modifier [ - ^ modifier -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> modifier: aSmaCCToken [ - modifier := aSmaCCToken -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> nodeVariables [ - ^ #(#type #getAccessor #setAccessor) -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> parameters [ - ^ parameters -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> parameters: anOrderedCollection [ - self setParents: self parameters to: nil. - parameters := anOrderedCollection. - self setParents: self parameters to: self -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> rightBracket [ - ^ rightBracket -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> rightBracket: aSmaCCToken [ - rightBracket := aSmaCCToken -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> setAccessor [ - ^ setAccessor -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> setAccessor: aCSInterfacePropertyAccessorNode [ - self setAccessor notNil - ifTrue: [ self setAccessor parent: nil ]. - setAccessor := aCSInterfacePropertyAccessorNode. - self setAccessor notNil - ifTrue: [ self setAccessor parent: self ] -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> thisToken [ - ^ thisToken -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> thisToken: aSmaCCToken [ - thisToken := aSmaCCToken -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> tokenVariables [ - ^ #(#modifier #thisToken #leftBracket #rightBracket #leftBrace #rightBrace) -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> type [ - ^ type -] - -{ #category : #generated } -CSInterfaceIndexerDeclarationNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSInterfaceMethodDeclarationNode.class.st b/src/SmaCC_CSharp/CSInterfaceMethodDeclarationNode.class.st deleted file mode 100644 index 8543f82d1..000000000 --- a/src/SmaCC_CSharp/CSInterfaceMethodDeclarationNode.class.st +++ /dev/null @@ -1,176 +0,0 @@ -Class { - #name : #CSInterfaceMethodDeclarationNode, - #superclass : #CSDeclarationNode, - #instVars : [ - '_attributes', - 'modifier', - 'type', - 'name', - 'typeParameters', - 'leftParen', - 'parameters', - 'commas', - 'rightParen', - 'constraintClauses', - 'semicolon' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitInterfaceMethodDeclaration: self -] - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> commas [ - ^ commas -] - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> compositeNodeVariables [ - ^ #(#_attributes #parameters #constraintClauses) -] - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> compositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> constraintClauses [ - ^ constraintClauses -] - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> constraintClauses: anOrderedCollection [ - self setParents: self constraintClauses to: nil. - constraintClauses := anOrderedCollection. - self setParents: self constraintClauses to: self -] - -{ #category : #'generated-initialize-release' } -CSInterfaceMethodDeclarationNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. - parameters := OrderedCollection new: 2. - commas := OrderedCollection new: 2. - constraintClauses := OrderedCollection new: 2. -] - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> modifier [ - ^ modifier -] - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> modifier: aSmaCCToken [ - modifier := aSmaCCToken -] - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> name [ - ^ name -] - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> nodeVariables [ - ^ #(#type #typeParameters) -] - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> parameters [ - ^ parameters -] - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> parameters: anOrderedCollection [ - self setParents: self parameters to: nil. - parameters := anOrderedCollection. - self setParents: self parameters to: self -] - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> tokenVariables [ - ^ #(#modifier #name #leftParen #rightParen #semicolon) -] - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> type [ - ^ type -] - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> typeParameters [ - ^ typeParameters -] - -{ #category : #generated } -CSInterfaceMethodDeclarationNode >> typeParameters: aCSTypeParameterListNode [ - self typeParameters notNil - ifTrue: [ self typeParameters parent: nil ]. - typeParameters := aCSTypeParameterListNode. - self typeParameters notNil - ifTrue: [ self typeParameters parent: self ] -] diff --git a/src/SmaCC_CSharp/CSInterfacePropertyAccessorNode.class.st b/src/SmaCC_CSharp/CSInterfacePropertyAccessorNode.class.st deleted file mode 100644 index 32a4e8193..000000000 --- a/src/SmaCC_CSharp/CSInterfacePropertyAccessorNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #CSInterfacePropertyAccessorNode, - #superclass : #CSProgramNode, - #instVars : [ - '_attributes', - 'accessorType', - 'semicolon' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSInterfacePropertyAccessorNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSInterfacePropertyAccessorNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSInterfacePropertyAccessorNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitInterfacePropertyAccessor: self -] - -{ #category : #generated } -CSInterfacePropertyAccessorNode >> accessorType [ - ^ accessorType -] - -{ #category : #generated } -CSInterfacePropertyAccessorNode >> accessorType: aSmaCCToken [ - accessorType := aSmaCCToken -] - -{ #category : #generated } -CSInterfacePropertyAccessorNode >> compositeNodeVariables [ - ^ #(#_attributes) -] - -{ #category : #'generated-initialize-release' } -CSInterfacePropertyAccessorNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. -] - -{ #category : #generated } -CSInterfacePropertyAccessorNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -CSInterfacePropertyAccessorNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -CSInterfacePropertyAccessorNode >> tokenVariables [ - ^ #(#accessorType #semicolon) -] diff --git a/src/SmaCC_CSharp/CSInterfacePropertyDeclarationNode.class.st b/src/SmaCC_CSharp/CSInterfacePropertyDeclarationNode.class.st deleted file mode 100644 index 046780758..000000000 --- a/src/SmaCC_CSharp/CSInterfacePropertyDeclarationNode.class.st +++ /dev/null @@ -1,135 +0,0 @@ -Class { - #name : #CSInterfacePropertyDeclarationNode, - #superclass : #CSDeclarationNode, - #instVars : [ - '_attributes', - 'modifier', - 'type', - 'name', - 'leftBrace', - 'getAccessor', - 'setAccessor', - 'rightBrace' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSInterfacePropertyDeclarationNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSInterfacePropertyDeclarationNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSInterfacePropertyDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitInterfacePropertyDeclaration: self -] - -{ #category : #generated } -CSInterfacePropertyDeclarationNode >> compositeNodeVariables [ - ^ #(#_attributes) -] - -{ #category : #generated } -CSInterfacePropertyDeclarationNode >> getAccessor [ - ^ getAccessor -] - -{ #category : #generated } -CSInterfacePropertyDeclarationNode >> getAccessor: aCSInterfacePropertyAccessorNode [ - self getAccessor notNil - ifTrue: [ self getAccessor parent: nil ]. - getAccessor := aCSInterfacePropertyAccessorNode. - self getAccessor notNil - ifTrue: [ self getAccessor parent: self ] -] - -{ #category : #'generated-initialize-release' } -CSInterfacePropertyDeclarationNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. -] - -{ #category : #generated } -CSInterfacePropertyDeclarationNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -CSInterfacePropertyDeclarationNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -CSInterfacePropertyDeclarationNode >> modifier [ - ^ modifier -] - -{ #category : #generated } -CSInterfacePropertyDeclarationNode >> modifier: aSmaCCToken [ - modifier := aSmaCCToken -] - -{ #category : #generated } -CSInterfacePropertyDeclarationNode >> name [ - ^ name -] - -{ #category : #generated } -CSInterfacePropertyDeclarationNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -CSInterfacePropertyDeclarationNode >> nodeVariables [ - ^ #(#type #getAccessor #setAccessor) -] - -{ #category : #generated } -CSInterfacePropertyDeclarationNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -CSInterfacePropertyDeclarationNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] - -{ #category : #generated } -CSInterfacePropertyDeclarationNode >> setAccessor [ - ^ setAccessor -] - -{ #category : #generated } -CSInterfacePropertyDeclarationNode >> setAccessor: aCSInterfacePropertyAccessorNode [ - self setAccessor notNil - ifTrue: [ self setAccessor parent: nil ]. - setAccessor := aCSInterfacePropertyAccessorNode. - self setAccessor notNil - ifTrue: [ self setAccessor parent: self ] -] - -{ #category : #generated } -CSInterfacePropertyDeclarationNode >> tokenVariables [ - ^ #(#modifier #name #leftBrace #rightBrace) -] - -{ #category : #generated } -CSInterfacePropertyDeclarationNode >> type [ - ^ type -] - -{ #category : #generated } -CSInterfacePropertyDeclarationNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSInterpolatedStringExpressionNode.class.st b/src/SmaCC_CSharp/CSInterpolatedStringExpressionNode.class.st deleted file mode 100644 index 8597a7cb1..000000000 --- a/src/SmaCC_CSharp/CSInterpolatedStringExpressionNode.class.st +++ /dev/null @@ -1,53 +0,0 @@ -Class { - #name : #CSInterpolatedStringExpressionNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'stringParts', - 'interpolations' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSInterpolatedStringExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitInterpolatedStringExpression: self -] - -{ #category : #generated } -CSInterpolatedStringExpressionNode >> compositeNodeVariables [ - ^ #(#interpolations) -] - -{ #category : #generated } -CSInterpolatedStringExpressionNode >> compositeTokenVariables [ - ^ #(#stringParts) -] - -{ #category : #'generated-initialize-release' } -CSInterpolatedStringExpressionNode >> initialize [ - super initialize. - stringParts := OrderedCollection new: 2. - interpolations := OrderedCollection new: 2. -] - -{ #category : #generated } -CSInterpolatedStringExpressionNode >> interpolations [ - ^ interpolations -] - -{ #category : #generated } -CSInterpolatedStringExpressionNode >> interpolations: anOrderedCollection [ - self setParents: self interpolations to: nil. - interpolations := anOrderedCollection. - self setParents: self interpolations to: self -] - -{ #category : #generated } -CSInterpolatedStringExpressionNode >> stringParts [ - ^ stringParts -] - -{ #category : #generated } -CSInterpolatedStringExpressionNode >> stringParts: anOrderedCollection [ - stringParts := anOrderedCollection -] diff --git a/src/SmaCC_CSharp/CSInterpolationNode.class.st b/src/SmaCC_CSharp/CSInterpolationNode.class.st deleted file mode 100644 index 55c660752..000000000 --- a/src/SmaCC_CSharp/CSInterpolationNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #CSInterpolationNode, - #superclass : #CSProgramNode, - #instVars : [ - 'expression', - 'commaToken', - 'constant' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSInterpolationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitInterpolation: self -] - -{ #category : #generated } -CSInterpolationNode >> commaToken [ - ^ commaToken -] - -{ #category : #generated } -CSInterpolationNode >> commaToken: aSmaCCToken [ - commaToken := aSmaCCToken -] - -{ #category : #generated } -CSInterpolationNode >> constant [ - ^ constant -] - -{ #category : #generated } -CSInterpolationNode >> constant: aCSExpressionNode [ - self constant notNil - ifTrue: [ self constant parent: nil ]. - constant := aCSExpressionNode. - self constant notNil - ifTrue: [ self constant parent: self ] -] - -{ #category : #generated } -CSInterpolationNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSInterpolationNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSInterpolationNode >> ignoredTokenVariables [ - ^ #(#commaToken) -] - -{ #category : #generated } -CSInterpolationNode >> nodeVariables [ - ^ #(#expression #constant) -] diff --git a/src/SmaCC_CSharp/CSInvocationExpressionNode.class.st b/src/SmaCC_CSharp/CSInvocationExpressionNode.class.st deleted file mode 100644 index 24740d09f..000000000 --- a/src/SmaCC_CSharp/CSInvocationExpressionNode.class.st +++ /dev/null @@ -1,100 +0,0 @@ -Class { - #name : #CSInvocationExpressionNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'expression', - 'leftParenToken', - 'arguments', - 'commaTokens', - 'rightParenToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSInvocationExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitInvocationExpression: self -] - -{ #category : #generated } -CSInvocationExpressionNode >> arguments [ - ^ arguments -] - -{ #category : #generated } -CSInvocationExpressionNode >> arguments: anOrderedCollection [ - self setParents: self arguments to: nil. - arguments := anOrderedCollection. - self setParents: self arguments to: self -] - -{ #category : #generated } -CSInvocationExpressionNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -CSInvocationExpressionNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -CSInvocationExpressionNode >> compositeNodeVariables [ - ^ #(#arguments) -] - -{ #category : #generated } -CSInvocationExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSInvocationExpressionNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSInvocationExpressionNode >> ignoredCompositeTokenVariables [ - ^ #(#commaTokens #_leftParens #_rightParens) -] - -{ #category : #'generated-initialize-release' } -CSInvocationExpressionNode >> initialize [ - super initialize. - arguments := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -CSInvocationExpressionNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSInvocationExpressionNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSInvocationExpressionNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -CSInvocationExpressionNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSInvocationExpressionNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSInvocationExpressionNode >> tokenVariables [ - ^ #(#leftParenToken #rightParenToken) -] diff --git a/src/SmaCC_CSharp/CSLabeledStatementNode.class.st b/src/SmaCC_CSharp/CSLabeledStatementNode.class.st deleted file mode 100644 index a86402d3d..000000000 --- a/src/SmaCC_CSharp/CSLabeledStatementNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #CSLabeledStatementNode, - #superclass : #CSStatementNode, - #instVars : [ - 'identifierToken', - 'colonToken', - 'statement' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSLabeledStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitLabeledStatement: self -] - -{ #category : #generated } -CSLabeledStatementNode >> colonToken [ - ^ colonToken -] - -{ #category : #generated } -CSLabeledStatementNode >> colonToken: aSmaCCToken [ - colonToken := aSmaCCToken -] - -{ #category : #generated } -CSLabeledStatementNode >> identifierToken [ - ^ identifierToken -] - -{ #category : #generated } -CSLabeledStatementNode >> identifierToken: aSmaCCToken [ - identifierToken := aSmaCCToken -] - -{ #category : #generated } -CSLabeledStatementNode >> nodeVariables [ - ^ #(#statement) -] - -{ #category : #generated } -CSLabeledStatementNode >> statement [ - ^ statement -] - -{ #category : #generated } -CSLabeledStatementNode >> statement: aCSStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aCSStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -CSLabeledStatementNode >> tokenVariables [ - ^ #(#identifierToken #colonToken) -] diff --git a/src/SmaCC_CSharp/CSLambdaExpressionNode.class.st b/src/SmaCC_CSharp/CSLambdaExpressionNode.class.st deleted file mode 100644 index ca587e907..000000000 --- a/src/SmaCC_CSharp/CSLambdaExpressionNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #CSLambdaExpressionNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'signature', - 'equalGreaterThanToken', - 'body' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSLambdaExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitLambdaExpression: self -] - -{ #category : #generated } -CSLambdaExpressionNode >> body [ - ^ body -] - -{ #category : #generated } -CSLambdaExpressionNode >> body: aCSProgramNode [ - self body notNil - ifTrue: [ self body parent: nil ]. - body := aCSProgramNode. - self body notNil - ifTrue: [ self body parent: self ] -] - -{ #category : #generated } -CSLambdaExpressionNode >> equalGreaterThanToken [ - ^ equalGreaterThanToken -] - -{ #category : #generated } -CSLambdaExpressionNode >> equalGreaterThanToken: aSmaCCToken [ - equalGreaterThanToken := aSmaCCToken -] - -{ #category : #generated } -CSLambdaExpressionNode >> nodeVariables [ - ^ #(#signature #body) -] - -{ #category : #generated } -CSLambdaExpressionNode >> signature [ - ^ signature -] - -{ #category : #generated } -CSLambdaExpressionNode >> signature: aCSProgramNode [ - self signature notNil - ifTrue: [ self signature parent: nil ]. - signature := aCSProgramNode. - self signature notNil - ifTrue: [ self signature parent: self ] -] - -{ #category : #generated } -CSLambdaExpressionNode >> tokenVariables [ - ^ #(#equalGreaterThanToken) -] diff --git a/src/SmaCC_CSharp/CSLiteralExpressionNode.class.st b/src/SmaCC_CSharp/CSLiteralExpressionNode.class.st deleted file mode 100644 index 661fc75ef..000000000 --- a/src/SmaCC_CSharp/CSLiteralExpressionNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #CSLiteralExpressionNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'token' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSLiteralExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitLiteralExpression: self -] - -{ #category : #generated } -CSLiteralExpressionNode >> token [ - ^ token -] - -{ #category : #generated } -CSLiteralExpressionNode >> token: aSmaCCToken [ - token := aSmaCCToken -] - -{ #category : #generated } -CSLiteralExpressionNode >> tokenVariables [ - ^ #(#token) -] diff --git a/src/SmaCC_CSharp/CSLocalConstantDeclarationNode.class.st b/src/SmaCC_CSharp/CSLocalConstantDeclarationNode.class.st deleted file mode 100644 index 7b69199de..000000000 --- a/src/SmaCC_CSharp/CSLocalConstantDeclarationNode.class.st +++ /dev/null @@ -1,89 +0,0 @@ -Class { - #name : #CSLocalConstantDeclarationNode, - #superclass : #CSDeclarationNode, - #instVars : [ - 'constToken', - 'type', - 'declarators', - 'commaTokens' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSLocalConstantDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitLocalConstantDeclaration: self -] - -{ #category : #generated } -CSLocalConstantDeclarationNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -CSLocalConstantDeclarationNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -CSLocalConstantDeclarationNode >> compositeNodeVariables [ - ^ #(#declarators) -] - -{ #category : #generated } -CSLocalConstantDeclarationNode >> constToken [ - ^ constToken -] - -{ #category : #generated } -CSLocalConstantDeclarationNode >> constToken: aSmaCCToken [ - constToken := aSmaCCToken -] - -{ #category : #generated } -CSLocalConstantDeclarationNode >> declarators [ - ^ declarators -] - -{ #category : #generated } -CSLocalConstantDeclarationNode >> declarators: anOrderedCollection [ - self setParents: self declarators to: nil. - declarators := anOrderedCollection. - self setParents: self declarators to: self -] - -{ #category : #generated } -CSLocalConstantDeclarationNode >> ignoredCompositeTokenVariables [ - ^ #(#commaTokens) -] - -{ #category : #'generated-initialize-release' } -CSLocalConstantDeclarationNode >> initialize [ - super initialize. - declarators := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -CSLocalConstantDeclarationNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -CSLocalConstantDeclarationNode >> tokenVariables [ - ^ #(#constToken) -] - -{ #category : #generated } -CSLocalConstantDeclarationNode >> type [ - ^ type -] - -{ #category : #generated } -CSLocalConstantDeclarationNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSLocalVariableDeclarationNode.class.st b/src/SmaCC_CSharp/CSLocalVariableDeclarationNode.class.st deleted file mode 100644 index e8c103370..000000000 --- a/src/SmaCC_CSharp/CSLocalVariableDeclarationNode.class.st +++ /dev/null @@ -1,73 +0,0 @@ -Class { - #name : #CSLocalVariableDeclarationNode, - #superclass : #CSDeclarationNode, - #instVars : [ - 'type', - 'declarators', - 'commaTokens' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSLocalVariableDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitLocalVariableDeclaration: self -] - -{ #category : #generated } -CSLocalVariableDeclarationNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -CSLocalVariableDeclarationNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -CSLocalVariableDeclarationNode >> compositeNodeVariables [ - ^ #(#declarators) -] - -{ #category : #generated } -CSLocalVariableDeclarationNode >> declarators [ - ^ declarators -] - -{ #category : #generated } -CSLocalVariableDeclarationNode >> declarators: anOrderedCollection [ - self setParents: self declarators to: nil. - declarators := anOrderedCollection. - self setParents: self declarators to: self -] - -{ #category : #generated } -CSLocalVariableDeclarationNode >> ignoredCompositeTokenVariables [ - ^ #(#commaTokens) -] - -{ #category : #'generated-initialize-release' } -CSLocalVariableDeclarationNode >> initialize [ - super initialize. - declarators := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -CSLocalVariableDeclarationNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -CSLocalVariableDeclarationNode >> type [ - ^ type -] - -{ #category : #generated } -CSLocalVariableDeclarationNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSLocalVariableDeclaratorNode.class.st b/src/SmaCC_CSharp/CSLocalVariableDeclaratorNode.class.st deleted file mode 100644 index 700dec933..000000000 --- a/src/SmaCC_CSharp/CSLocalVariableDeclaratorNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #CSLocalVariableDeclaratorNode, - #superclass : #CSProgramNode, - #instVars : [ - 'name', - 'equalToken', - 'expression' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSLocalVariableDeclaratorNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitLocalVariableDeclarator: self -] - -{ #category : #generated } -CSLocalVariableDeclaratorNode >> equalToken [ - ^ equalToken -] - -{ #category : #generated } -CSLocalVariableDeclaratorNode >> equalToken: aSmaCCToken [ - equalToken := aSmaCCToken -] - -{ #category : #generated } -CSLocalVariableDeclaratorNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSLocalVariableDeclaratorNode >> expression: aCSProgramNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSProgramNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSLocalVariableDeclaratorNode >> name [ - ^ name -] - -{ #category : #generated } -CSLocalVariableDeclaratorNode >> name: aCSSimpleNameNode [ - self name notNil - ifTrue: [ self name parent: nil ]. - name := aCSSimpleNameNode. - self name notNil - ifTrue: [ self name parent: self ] -] - -{ #category : #generated } -CSLocalVariableDeclaratorNode >> nodeVariables [ - ^ #(#name #expression) -] - -{ #category : #generated } -CSLocalVariableDeclaratorNode >> tokenVariables [ - ^ #(#equalToken) -] diff --git a/src/SmaCC_CSharp/CSLockStatementNode.class.st b/src/SmaCC_CSharp/CSLockStatementNode.class.st deleted file mode 100644 index 1714c85be..000000000 --- a/src/SmaCC_CSharp/CSLockStatementNode.class.st +++ /dev/null @@ -1,85 +0,0 @@ -Class { - #name : #CSLockStatementNode, - #superclass : #CSStatementNode, - #instVars : [ - 'lockToken', - 'leftParenToken', - 'expression', - 'rightParenToken', - 'statement' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSLockStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitLockStatement: self -] - -{ #category : #generated } -CSLockStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSLockStatementNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSLockStatementNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSLockStatementNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSLockStatementNode >> lockToken [ - ^ lockToken -] - -{ #category : #generated } -CSLockStatementNode >> lockToken: aSmaCCToken [ - lockToken := aSmaCCToken -] - -{ #category : #generated } -CSLockStatementNode >> nodeVariables [ - ^ #(#expression #statement) -] - -{ #category : #generated } -CSLockStatementNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSLockStatementNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSLockStatementNode >> statement [ - ^ statement -] - -{ #category : #generated } -CSLockStatementNode >> statement: aCSStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aCSStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -CSLockStatementNode >> tokenVariables [ - ^ #(#lockToken #leftParenToken #rightParenToken) -] diff --git a/src/SmaCC_CSharp/CSMemberAccessNode.class.st b/src/SmaCC_CSharp/CSMemberAccessNode.class.st deleted file mode 100644 index a0ed6346d..000000000 --- a/src/SmaCC_CSharp/CSMemberAccessNode.class.st +++ /dev/null @@ -1,74 +0,0 @@ -Class { - #name : #CSMemberAccessNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'expression', - 'periodToken', - 'identifier', - 'typeArguments' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSMemberAccessNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitMemberAccess: self -] - -{ #category : #generated } -CSMemberAccessNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSMemberAccessNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSMemberAccessNode >> identifier [ - ^ identifier -] - -{ #category : #generated } -CSMemberAccessNode >> identifier: aSmaCCToken [ - identifier := aSmaCCToken -] - -{ #category : #generated } -CSMemberAccessNode >> nodeVariables [ - ^ #(#expression #typeArguments) -] - -{ #category : #generated } -CSMemberAccessNode >> periodToken [ - ^ periodToken -] - -{ #category : #generated } -CSMemberAccessNode >> periodToken: aSmaCCToken [ - periodToken := aSmaCCToken -] - -{ #category : #generated } -CSMemberAccessNode >> tokenVariables [ - ^ #(#periodToken #identifier) -] - -{ #category : #generated } -CSMemberAccessNode >> typeArguments [ - ^ typeArguments -] - -{ #category : #generated } -CSMemberAccessNode >> typeArguments: aCSTypeArgumentListNode [ - self typeArguments notNil - ifTrue: [ self typeArguments parent: nil ]. - typeArguments := aCSTypeArgumentListNode. - self typeArguments notNil - ifTrue: [ self typeArguments parent: self ] -] diff --git a/src/SmaCC_CSharp/CSMemberDeclaratorNode.class.st b/src/SmaCC_CSharp/CSMemberDeclaratorNode.class.st deleted file mode 100644 index 222f376b5..000000000 --- a/src/SmaCC_CSharp/CSMemberDeclaratorNode.class.st +++ /dev/null @@ -1,89 +0,0 @@ -Class { - #name : #CSMemberDeclaratorNode, - #superclass : #CSProgramNode, - #instVars : [ - 'name', - 'access', - 'identifierToken', - 'equalToken', - 'value' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSMemberDeclaratorNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitMemberDeclarator: self -] - -{ #category : #generated } -CSMemberDeclaratorNode >> access [ - ^ access -] - -{ #category : #generated } -CSMemberDeclaratorNode >> access: aCSExpressionNode [ - self access notNil - ifTrue: [ self access parent: nil ]. - access := aCSExpressionNode. - self access notNil - ifTrue: [ self access parent: self ] -] - -{ #category : #generated } -CSMemberDeclaratorNode >> equalToken [ - ^ equalToken -] - -{ #category : #generated } -CSMemberDeclaratorNode >> equalToken: aSmaCCToken [ - equalToken := aSmaCCToken -] - -{ #category : #generated } -CSMemberDeclaratorNode >> identifierToken [ - ^ identifierToken -] - -{ #category : #generated } -CSMemberDeclaratorNode >> identifierToken: aSmaCCToken [ - identifierToken := aSmaCCToken -] - -{ #category : #generated } -CSMemberDeclaratorNode >> name [ - ^ name -] - -{ #category : #generated } -CSMemberDeclaratorNode >> name: aCSSimpleNameNode [ - self name notNil - ifTrue: [ self name parent: nil ]. - name := aCSSimpleNameNode. - self name notNil - ifTrue: [ self name parent: self ] -] - -{ #category : #generated } -CSMemberDeclaratorNode >> nodeVariables [ - ^ #(#name #access #value) -] - -{ #category : #generated } -CSMemberDeclaratorNode >> tokenVariables [ - ^ #(#identifierToken #equalToken) -] - -{ #category : #generated } -CSMemberDeclaratorNode >> value [ - ^ value -] - -{ #category : #generated } -CSMemberDeclaratorNode >> value: aCSExpressionNode [ - self value notNil - ifTrue: [ self value parent: nil ]. - value := aCSExpressionNode. - self value notNil - ifTrue: [ self value parent: self ] -] diff --git a/src/SmaCC_CSharp/CSMemberInitializerNode.class.st b/src/SmaCC_CSharp/CSMemberInitializerNode.class.st deleted file mode 100644 index 0aaaf97b1..000000000 --- a/src/SmaCC_CSharp/CSMemberInitializerNode.class.st +++ /dev/null @@ -1,122 +0,0 @@ -Class { - #name : #CSMemberInitializerNode, - #superclass : #CSProgramNode, - #instVars : [ - 'identifier', - 'leftBracketToken', - 'arguments', - 'commaTokens', - 'rightBracketToken', - 'equalToken', - 'value' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSMemberInitializerNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitMemberInitializer: self -] - -{ #category : #generated } -CSMemberInitializerNode >> arguments [ - ^ arguments -] - -{ #category : #generated } -CSMemberInitializerNode >> arguments: anOrderedCollection [ - self setParents: self arguments to: nil. - arguments := anOrderedCollection. - self setParents: self arguments to: self -] - -{ #category : #generated } -CSMemberInitializerNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -CSMemberInitializerNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -CSMemberInitializerNode >> compositeNodeVariables [ - ^ #(#arguments) -] - -{ #category : #generated } -CSMemberInitializerNode >> equalToken [ - ^ equalToken -] - -{ #category : #generated } -CSMemberInitializerNode >> equalToken: aSmaCCToken [ - equalToken := aSmaCCToken -] - -{ #category : #generated } -CSMemberInitializerNode >> identifier [ - ^ identifier -] - -{ #category : #generated } -CSMemberInitializerNode >> identifier: aSmaCCToken [ - identifier := aSmaCCToken -] - -{ #category : #generated } -CSMemberInitializerNode >> ignoredCompositeTokenVariables [ - ^ #(#commaTokens) -] - -{ #category : #'generated-initialize-release' } -CSMemberInitializerNode >> initialize [ - super initialize. - arguments := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -CSMemberInitializerNode >> leftBracketToken [ - ^ leftBracketToken -] - -{ #category : #generated } -CSMemberInitializerNode >> leftBracketToken: aSmaCCToken [ - leftBracketToken := aSmaCCToken -] - -{ #category : #generated } -CSMemberInitializerNode >> nodeVariables [ - ^ #(#value) -] - -{ #category : #generated } -CSMemberInitializerNode >> rightBracketToken [ - ^ rightBracketToken -] - -{ #category : #generated } -CSMemberInitializerNode >> rightBracketToken: aSmaCCToken [ - rightBracketToken := aSmaCCToken -] - -{ #category : #generated } -CSMemberInitializerNode >> tokenVariables [ - ^ #(#identifier #leftBracketToken #rightBracketToken #equalToken) -] - -{ #category : #generated } -CSMemberInitializerNode >> value [ - ^ value -] - -{ #category : #generated } -CSMemberInitializerNode >> value: aCSProgramNode [ - self value notNil - ifTrue: [ self value parent: nil ]. - value := aCSProgramNode. - self value notNil - ifTrue: [ self value parent: self ] -] diff --git a/src/SmaCC_CSharp/CSMethodBodyNode.class.st b/src/SmaCC_CSharp/CSMethodBodyNode.class.st deleted file mode 100644 index be3f0eb51..000000000 --- a/src/SmaCC_CSharp/CSMethodBodyNode.class.st +++ /dev/null @@ -1,79 +0,0 @@ -Class { - #name : #CSMethodBodyNode, - #superclass : #CSProgramNode, - #instVars : [ - 'block', - 'equalGreaterThanToken', - 'expression', - 'semicolonToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSMethodBodyNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitMethodBody: self -] - -{ #category : #generated } -CSMethodBodyNode >> block [ - ^ block -] - -{ #category : #generated } -CSMethodBodyNode >> block: aCSBlockStatementNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aCSBlockStatementNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -CSMethodBodyNode >> equalGreaterThanToken [ - ^ equalGreaterThanToken -] - -{ #category : #generated } -CSMethodBodyNode >> equalGreaterThanToken: aSmaCCToken [ - equalGreaterThanToken := aSmaCCToken -] - -{ #category : #generated } -CSMethodBodyNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSMethodBodyNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSMethodBodyNode >> ignoredTokenVariables [ - ^ #(#semicolonToken) -] - -{ #category : #generated } -CSMethodBodyNode >> nodeVariables [ - ^ #(#block #expression) -] - -{ #category : #generated } -CSMethodBodyNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -CSMethodBodyNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] - -{ #category : #generated } -CSMethodBodyNode >> tokenVariables [ - ^ #(#equalGreaterThanToken) -] diff --git a/src/SmaCC_CSharp/CSMethodDeclarationNode.class.st b/src/SmaCC_CSharp/CSMethodDeclarationNode.class.st deleted file mode 100644 index 413cde830..000000000 --- a/src/SmaCC_CSharp/CSMethodDeclarationNode.class.st +++ /dev/null @@ -1,47 +0,0 @@ -Class { - #name : #CSMethodDeclarationNode, - #superclass : #CSDeclarationNode, - #instVars : [ - 'header', - 'body' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSMethodDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitMethodDeclaration: self -] - -{ #category : #generated } -CSMethodDeclarationNode >> body [ - ^ body -] - -{ #category : #generated } -CSMethodDeclarationNode >> body: aCSMethodBodyNode [ - self body notNil - ifTrue: [ self body parent: nil ]. - body := aCSMethodBodyNode. - self body notNil - ifTrue: [ self body parent: self ] -] - -{ #category : #generated } -CSMethodDeclarationNode >> header [ - ^ header -] - -{ #category : #generated } -CSMethodDeclarationNode >> header: aCSMethodHeaderNode [ - self header notNil - ifTrue: [ self header parent: nil ]. - header := aCSMethodHeaderNode. - self header notNil - ifTrue: [ self header parent: self ] -] - -{ #category : #generated } -CSMethodDeclarationNode >> nodeVariables [ - ^ #(#header #body) -] diff --git a/src/SmaCC_CSharp/CSMethodHeaderNode.class.st b/src/SmaCC_CSharp/CSMethodHeaderNode.class.st deleted file mode 100644 index c8af2a15f..000000000 --- a/src/SmaCC_CSharp/CSMethodHeaderNode.class.st +++ /dev/null @@ -1,203 +0,0 @@ -Class { - #name : #CSMethodHeaderNode, - #superclass : #CSProgramNode, - #instVars : [ - '_attributes', - 'modifiers', - 'partialToken', - 'returnType', - 'name', - 'interface', - 'periodToken', - 'typeParameters', - 'leftParenToken', - 'parameters', - 'commas', - 'rightParenToken', - 'constraintClauses' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSMethodHeaderNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSMethodHeaderNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSMethodHeaderNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitMethodHeader: self -] - -{ #category : #generated } -CSMethodHeaderNode >> commas [ - ^ commas -] - -{ #category : #generated } -CSMethodHeaderNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -CSMethodHeaderNode >> compositeNodeVariables [ - ^ #(#_attributes #parameters #constraintClauses) -] - -{ #category : #generated } -CSMethodHeaderNode >> compositeTokenVariables [ - ^ #(#modifiers #commas) -] - -{ #category : #generated } -CSMethodHeaderNode >> constraintClauses [ - ^ constraintClauses -] - -{ #category : #generated } -CSMethodHeaderNode >> constraintClauses: anOrderedCollection [ - self setParents: self constraintClauses to: nil. - constraintClauses := anOrderedCollection. - self setParents: self constraintClauses to: self -] - -{ #category : #'generated-initialize-release' } -CSMethodHeaderNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. - modifiers := OrderedCollection new: 2. - parameters := OrderedCollection new: 2. - commas := OrderedCollection new: 2. - constraintClauses := OrderedCollection new: 2. -] - -{ #category : #generated } -CSMethodHeaderNode >> interface [ - ^ interface -] - -{ #category : #generated } -CSMethodHeaderNode >> interface: aCSTypeNode [ - self interface notNil - ifTrue: [ self interface parent: nil ]. - interface := aCSTypeNode. - self interface notNil - ifTrue: [ self interface parent: self ] -] - -{ #category : #generated } -CSMethodHeaderNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSMethodHeaderNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSMethodHeaderNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -CSMethodHeaderNode >> modifiers: anOrderedCollection [ - modifiers := anOrderedCollection -] - -{ #category : #generated } -CSMethodHeaderNode >> name [ - ^ name -] - -{ #category : #generated } -CSMethodHeaderNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -CSMethodHeaderNode >> nodeVariables [ - ^ #(#returnType #interface #typeParameters) -] - -{ #category : #generated } -CSMethodHeaderNode >> parameters [ - ^ parameters -] - -{ #category : #generated } -CSMethodHeaderNode >> parameters: anOrderedCollection [ - self setParents: self parameters to: nil. - parameters := anOrderedCollection. - self setParents: self parameters to: self -] - -{ #category : #generated } -CSMethodHeaderNode >> partialToken [ - ^ partialToken -] - -{ #category : #generated } -CSMethodHeaderNode >> partialToken: aSmaCCToken [ - partialToken := aSmaCCToken -] - -{ #category : #generated } -CSMethodHeaderNode >> periodToken [ - ^ periodToken -] - -{ #category : #generated } -CSMethodHeaderNode >> periodToken: aSmaCCToken [ - periodToken := aSmaCCToken -] - -{ #category : #generated } -CSMethodHeaderNode >> returnType [ - ^ returnType -] - -{ #category : #generated } -CSMethodHeaderNode >> returnType: aCSTypeNode [ - self returnType notNil - ifTrue: [ self returnType parent: nil ]. - returnType := aCSTypeNode. - self returnType notNil - ifTrue: [ self returnType parent: self ] -] - -{ #category : #generated } -CSMethodHeaderNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSMethodHeaderNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSMethodHeaderNode >> tokenVariables [ - ^ #(#partialToken #name #periodToken #leftParenToken #rightParenToken) -] - -{ #category : #generated } -CSMethodHeaderNode >> typeParameters [ - ^ typeParameters -] - -{ #category : #generated } -CSMethodHeaderNode >> typeParameters: aCSTypeParameterListNode [ - self typeParameters notNil - ifTrue: [ self typeParameters parent: nil ]. - typeParameters := aCSTypeParameterListNode. - self typeParameters notNil - ifTrue: [ self typeParameters parent: self ] -] diff --git a/src/SmaCC_CSharp/CSNamedArgumentNode.class.st b/src/SmaCC_CSharp/CSNamedArgumentNode.class.st deleted file mode 100644 index 80acf6670..000000000 --- a/src/SmaCC_CSharp/CSNamedArgumentNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #CSNamedArgumentNode, - #superclass : #CSProgramNode, - #instVars : [ - 'name', - 'equal', - 'value' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSNamedArgumentNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNamedArgument: self -] - -{ #category : #generated } -CSNamedArgumentNode >> equal [ - ^ equal -] - -{ #category : #generated } -CSNamedArgumentNode >> equal: aSmaCCToken [ - equal := aSmaCCToken -] - -{ #category : #generated } -CSNamedArgumentNode >> name [ - ^ name -] - -{ #category : #generated } -CSNamedArgumentNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -CSNamedArgumentNode >> nodeVariables [ - ^ #(#value) -] - -{ #category : #generated } -CSNamedArgumentNode >> tokenVariables [ - ^ #(#name #equal) -] - -{ #category : #generated } -CSNamedArgumentNode >> value [ - ^ value -] - -{ #category : #generated } -CSNamedArgumentNode >> value: aCSExpressionNode [ - self value notNil - ifTrue: [ self value parent: nil ]. - value := aCSExpressionNode. - self value notNil - ifTrue: [ self value parent: self ] -] diff --git a/src/SmaCC_CSharp/CSNamedEntityNode.class.st b/src/SmaCC_CSharp/CSNamedEntityNode.class.st deleted file mode 100644 index cc73f5b81..000000000 --- a/src/SmaCC_CSharp/CSNamedEntityNode.class.st +++ /dev/null @@ -1,74 +0,0 @@ -Class { - #name : #CSNamedEntityNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'target', - 'periodToken', - 'identifierToken', - 'typeArguments' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSNamedEntityNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNamedEntity: self -] - -{ #category : #generated } -CSNamedEntityNode >> identifierToken [ - ^ identifierToken -] - -{ #category : #generated } -CSNamedEntityNode >> identifierToken: aSmaCCToken [ - identifierToken := aSmaCCToken -] - -{ #category : #generated } -CSNamedEntityNode >> nodeVariables [ - ^ #(#target #typeArguments) -] - -{ #category : #generated } -CSNamedEntityNode >> periodToken [ - ^ periodToken -] - -{ #category : #generated } -CSNamedEntityNode >> periodToken: aSmaCCToken [ - periodToken := aSmaCCToken -] - -{ #category : #generated } -CSNamedEntityNode >> target [ - ^ target -] - -{ #category : #generated } -CSNamedEntityNode >> target: aCSExpressionNode [ - self target notNil - ifTrue: [ self target parent: nil ]. - target := aCSExpressionNode. - self target notNil - ifTrue: [ self target parent: self ] -] - -{ #category : #generated } -CSNamedEntityNode >> tokenVariables [ - ^ #(#periodToken #identifierToken) -] - -{ #category : #generated } -CSNamedEntityNode >> typeArguments [ - ^ typeArguments -] - -{ #category : #generated } -CSNamedEntityNode >> typeArguments: aCSTypeArgumentListNode [ - self typeArguments notNil - ifTrue: [ self typeArguments parent: nil ]. - typeArguments := aCSTypeArgumentListNode. - self typeArguments notNil - ifTrue: [ self typeArguments parent: self ] -] diff --git a/src/SmaCC_CSharp/CSNameofExpressionNode.class.st b/src/SmaCC_CSharp/CSNameofExpressionNode.class.st deleted file mode 100644 index af058ada0..000000000 --- a/src/SmaCC_CSharp/CSNameofExpressionNode.class.st +++ /dev/null @@ -1,70 +0,0 @@ -Class { - #name : #CSNameofExpressionNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'nameofToken', - 'leftParenToken', - 'name', - 'rightParenToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSNameofExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNameofExpression: self -] - -{ #category : #generated } -CSNameofExpressionNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSNameofExpressionNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSNameofExpressionNode >> name [ - ^ name -] - -{ #category : #generated } -CSNameofExpressionNode >> name: aCSExpressionNode [ - self name notNil - ifTrue: [ self name parent: nil ]. - name := aCSExpressionNode. - self name notNil - ifTrue: [ self name parent: self ] -] - -{ #category : #generated } -CSNameofExpressionNode >> nameofToken [ - ^ nameofToken -] - -{ #category : #generated } -CSNameofExpressionNode >> nameofToken: aSmaCCToken [ - nameofToken := aSmaCCToken -] - -{ #category : #generated } -CSNameofExpressionNode >> nodeVariables [ - ^ #(#name) -] - -{ #category : #generated } -CSNameofExpressionNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSNameofExpressionNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSNameofExpressionNode >> tokenVariables [ - ^ #(#nameofToken #leftParenToken #rightParenToken) -] diff --git a/src/SmaCC_CSharp/CSNamespaceDeclarationNode.class.st b/src/SmaCC_CSharp/CSNamespaceDeclarationNode.class.st deleted file mode 100644 index fbf58c53f..000000000 --- a/src/SmaCC_CSharp/CSNamespaceDeclarationNode.class.st +++ /dev/null @@ -1,119 +0,0 @@ -Class { - #name : #CSNamespaceDeclarationNode, - #superclass : #CSDeclarationNode, - #instVars : [ - 'namespaceToken', - 'identifier', - 'leftBraceToken', - 'directives', - 'declarations', - 'rightBraceToken', - 'semicolon' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSNamespaceDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNamespaceDeclaration: self -] - -{ #category : #generated } -CSNamespaceDeclarationNode >> compositeNodeVariables [ - ^ #(#directives #declarations) -] - -{ #category : #generated } -CSNamespaceDeclarationNode >> declarations [ - ^ declarations -] - -{ #category : #generated } -CSNamespaceDeclarationNode >> declarations: anOrderedCollection [ - self setParents: self declarations to: nil. - declarations := anOrderedCollection. - self setParents: self declarations to: self -] - -{ #category : #generated } -CSNamespaceDeclarationNode >> directives [ - ^ directives -] - -{ #category : #generated } -CSNamespaceDeclarationNode >> directives: anOrderedCollection [ - self setParents: self directives to: nil. - directives := anOrderedCollection. - self setParents: self directives to: self -] - -{ #category : #generated } -CSNamespaceDeclarationNode >> identifier [ - ^ identifier -] - -{ #category : #generated } -CSNamespaceDeclarationNode >> identifier: aCSQualifiedIdentifierNode [ - self identifier notNil - ifTrue: [ self identifier parent: nil ]. - identifier := aCSQualifiedIdentifierNode. - self identifier notNil - ifTrue: [ self identifier parent: self ] -] - -{ #category : #'generated-initialize-release' } -CSNamespaceDeclarationNode >> initialize [ - super initialize. - directives := OrderedCollection new: 2. - declarations := OrderedCollection new: 2. -] - -{ #category : #generated } -CSNamespaceDeclarationNode >> leftBraceToken [ - ^ leftBraceToken -] - -{ #category : #generated } -CSNamespaceDeclarationNode >> leftBraceToken: aSmaCCToken [ - leftBraceToken := aSmaCCToken -] - -{ #category : #generated } -CSNamespaceDeclarationNode >> namespaceToken [ - ^ namespaceToken -] - -{ #category : #generated } -CSNamespaceDeclarationNode >> namespaceToken: aSmaCCToken [ - namespaceToken := aSmaCCToken -] - -{ #category : #generated } -CSNamespaceDeclarationNode >> nodeVariables [ - ^ #(#identifier) -] - -{ #category : #generated } -CSNamespaceDeclarationNode >> rightBraceToken [ - ^ rightBraceToken -] - -{ #category : #generated } -CSNamespaceDeclarationNode >> rightBraceToken: aSmaCCToken [ - rightBraceToken := aSmaCCToken -] - -{ #category : #generated } -CSNamespaceDeclarationNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -CSNamespaceDeclarationNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -CSNamespaceDeclarationNode >> tokenVariables [ - ^ #(#namespaceToken #leftBraceToken #rightBraceToken #semicolon) -] diff --git a/src/SmaCC_CSharp/CSNullConditionalElementAccessNode.class.st b/src/SmaCC_CSharp/CSNullConditionalElementAccessNode.class.st deleted file mode 100644 index 13a0fe662..000000000 --- a/src/SmaCC_CSharp/CSNullConditionalElementAccessNode.class.st +++ /dev/null @@ -1,72 +0,0 @@ -Class { - #name : #CSNullConditionalElementAccessNode, - #superclass : #CSElementAccessNode, - #instVars : [ - 'baseOperations', - 'questionMarkToken', - 'arguments' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSNullConditionalElementAccessNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNullConditionalElementAccess: self -] - -{ #category : #generated } -CSNullConditionalElementAccessNode >> arguments [ - ^ arguments -] - -{ #category : #generated } -CSNullConditionalElementAccessNode >> arguments: anOrderedCollection [ - self setParents: self arguments to: nil. - arguments := anOrderedCollection. - self setParents: self arguments to: self -] - -{ #category : #generated } -CSNullConditionalElementAccessNode >> baseOperations [ - ^ baseOperations -] - -{ #category : #generated } -CSNullConditionalElementAccessNode >> baseOperations: aCSExpressionNode [ - self baseOperations notNil - ifTrue: [ self baseOperations parent: nil ]. - baseOperations := aCSExpressionNode. - self baseOperations notNil - ifTrue: [ self baseOperations parent: self ] -] - -{ #category : #generated } -CSNullConditionalElementAccessNode >> compositeNodeVariables [ - ^ #(#arguments #expressions) -] - -{ #category : #'generated-initialize-release' } -CSNullConditionalElementAccessNode >> initialize [ - super initialize. - arguments := OrderedCollection new: 2. -] - -{ #category : #generated } -CSNullConditionalElementAccessNode >> nodeVariables [ - ^ #(#baseOperations #baseExpression) -] - -{ #category : #generated } -CSNullConditionalElementAccessNode >> questionMarkToken [ - ^ questionMarkToken -] - -{ #category : #generated } -CSNullConditionalElementAccessNode >> questionMarkToken: aSmaCCToken [ - questionMarkToken := aSmaCCToken -] - -{ #category : #generated } -CSNullConditionalElementAccessNode >> tokenVariables [ - ^ #(#questionMarkToken #leftBracketToken #rightBracketToken) -] diff --git a/src/SmaCC_CSharp/CSNullConditionalExpressionNode.class.st b/src/SmaCC_CSharp/CSNullConditionalExpressionNode.class.st deleted file mode 100644 index 53bfa74c2..000000000 --- a/src/SmaCC_CSharp/CSNullConditionalExpressionNode.class.st +++ /dev/null @@ -1,47 +0,0 @@ -Class { - #name : #CSNullConditionalExpressionNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'expression', - 'nullConditionalOperation' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSNullConditionalExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNullConditionalExpression: self -] - -{ #category : #generated } -CSNullConditionalExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSNullConditionalExpressionNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSNullConditionalExpressionNode >> nodeVariables [ - ^ #(#expression #nullConditionalOperation) -] - -{ #category : #generated } -CSNullConditionalExpressionNode >> nullConditionalOperation [ - ^ nullConditionalOperation -] - -{ #category : #generated } -CSNullConditionalExpressionNode >> nullConditionalOperation: aCSExpressionNode [ - self nullConditionalOperation notNil - ifTrue: [ self nullConditionalOperation parent: nil ]. - nullConditionalOperation := aCSExpressionNode. - self nullConditionalOperation notNil - ifTrue: [ self nullConditionalOperation parent: self ] -] diff --git a/src/SmaCC_CSharp/CSNullConditionalInvocationExpressionNode.class.st b/src/SmaCC_CSharp/CSNullConditionalInvocationExpressionNode.class.st deleted file mode 100644 index ab587a540..000000000 --- a/src/SmaCC_CSharp/CSNullConditionalInvocationExpressionNode.class.st +++ /dev/null @@ -1,32 +0,0 @@ -Class { - #name : #CSNullConditionalInvocationExpressionNode, - #superclass : #CSInvocationExpressionNode, - #instVars : [ - 'baseOperations' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSNullConditionalInvocationExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNullConditionalInvocationExpression: self -] - -{ #category : #generated } -CSNullConditionalInvocationExpressionNode >> baseOperations [ - ^ baseOperations -] - -{ #category : #generated } -CSNullConditionalInvocationExpressionNode >> baseOperations: aCSExpressionNode [ - self baseOperations notNil - ifTrue: [ self baseOperations parent: nil ]. - baseOperations := aCSExpressionNode. - self baseOperations notNil - ifTrue: [ self baseOperations parent: self ] -] - -{ #category : #generated } -CSNullConditionalInvocationExpressionNode >> nodeVariables [ - ^ #(#baseOperations #expression) -] diff --git a/src/SmaCC_CSharp/CSNullConditionalMemberAccessNode.class.st b/src/SmaCC_CSharp/CSNullConditionalMemberAccessNode.class.st deleted file mode 100644 index 45559e65c..000000000 --- a/src/SmaCC_CSharp/CSNullConditionalMemberAccessNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #CSNullConditionalMemberAccessNode, - #superclass : #CSMemberAccessNode, - #instVars : [ - 'baseOperations', - 'questionMarkToken', - 'identifierToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSNullConditionalMemberAccessNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNullConditionalMemberAccess: self -] - -{ #category : #generated } -CSNullConditionalMemberAccessNode >> baseOperations [ - ^ baseOperations -] - -{ #category : #generated } -CSNullConditionalMemberAccessNode >> baseOperations: aCSExpressionNode [ - self baseOperations notNil - ifTrue: [ self baseOperations parent: nil ]. - baseOperations := aCSExpressionNode. - self baseOperations notNil - ifTrue: [ self baseOperations parent: self ] -] - -{ #category : #generated } -CSNullConditionalMemberAccessNode >> identifierToken [ - ^ identifierToken -] - -{ #category : #generated } -CSNullConditionalMemberAccessNode >> identifierToken: aSmaCCToken [ - identifierToken := aSmaCCToken -] - -{ #category : #generated } -CSNullConditionalMemberAccessNode >> nodeVariables [ - ^ #(#baseOperations #expression #typeArguments) -] - -{ #category : #generated } -CSNullConditionalMemberAccessNode >> questionMarkToken [ - ^ questionMarkToken -] - -{ #category : #generated } -CSNullConditionalMemberAccessNode >> questionMarkToken: aSmaCCToken [ - questionMarkToken := aSmaCCToken -] - -{ #category : #generated } -CSNullConditionalMemberAccessNode >> tokenVariables [ - ^ #(#questionMarkToken #identifierToken #periodToken #identifier) -] diff --git a/src/SmaCC_CSharp/CSNullLiteralExpressionNode.class.st b/src/SmaCC_CSharp/CSNullLiteralExpressionNode.class.st deleted file mode 100644 index e36b4cd08..000000000 --- a/src/SmaCC_CSharp/CSNullLiteralExpressionNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #CSNullLiteralExpressionNode, - #superclass : #CSLiteralExpressionNode, - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSNullLiteralExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNullLiteralExpression: self -] diff --git a/src/SmaCC_CSharp/CSNullableTypeNode.class.st b/src/SmaCC_CSharp/CSNullableTypeNode.class.st deleted file mode 100644 index afcca84ed..000000000 --- a/src/SmaCC_CSharp/CSNullableTypeNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #CSNullableTypeNode, - #superclass : #CSTypeNode, - #instVars : [ - 'type', - 'questionMarkToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSNullableTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNullableType: self -] - -{ #category : #generated } -CSNullableTypeNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -CSNullableTypeNode >> questionMarkToken [ - ^ questionMarkToken -] - -{ #category : #generated } -CSNullableTypeNode >> questionMarkToken: aSmaCCToken [ - questionMarkToken := aSmaCCToken -] - -{ #category : #generated } -CSNullableTypeNode >> tokenVariables [ - ^ #(#questionMarkToken) -] - -{ #category : #generated } -CSNullableTypeNode >> type [ - ^ type -] - -{ #category : #generated } -CSNullableTypeNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSObjectCreationExpressionNode.class.st b/src/SmaCC_CSharp/CSObjectCreationExpressionNode.class.st deleted file mode 100644 index 2743e71a8..000000000 --- a/src/SmaCC_CSharp/CSObjectCreationExpressionNode.class.st +++ /dev/null @@ -1,126 +0,0 @@ -Class { - #name : #CSObjectCreationExpressionNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'newToken', - 'type', - 'leftParenToken', - 'arguments', - 'commaTokens', - 'rightParenToken', - 'initializer' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSObjectCreationExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitObjectCreationExpression: self -] - -{ #category : #generated } -CSObjectCreationExpressionNode >> arguments [ - ^ arguments -] - -{ #category : #generated } -CSObjectCreationExpressionNode >> arguments: anOrderedCollection [ - self setParents: self arguments to: nil. - arguments := anOrderedCollection. - self setParents: self arguments to: self -] - -{ #category : #generated } -CSObjectCreationExpressionNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -CSObjectCreationExpressionNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -CSObjectCreationExpressionNode >> compositeNodeVariables [ - ^ #(#arguments) -] - -{ #category : #generated } -CSObjectCreationExpressionNode >> ignoredCompositeTokenVariables [ - ^ #(#commaTokens #_leftParens #_rightParens) -] - -{ #category : #'generated-initialize-release' } -CSObjectCreationExpressionNode >> initialize [ - super initialize. - arguments := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -CSObjectCreationExpressionNode >> initializer [ - ^ initializer -] - -{ #category : #generated } -CSObjectCreationExpressionNode >> initializer: aCSProgramNode [ - self initializer notNil - ifTrue: [ self initializer parent: nil ]. - initializer := aCSProgramNode. - self initializer notNil - ifTrue: [ self initializer parent: self ] -] - -{ #category : #generated } -CSObjectCreationExpressionNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSObjectCreationExpressionNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSObjectCreationExpressionNode >> newToken [ - ^ newToken -] - -{ #category : #generated } -CSObjectCreationExpressionNode >> newToken: aSmaCCToken [ - newToken := aSmaCCToken -] - -{ #category : #generated } -CSObjectCreationExpressionNode >> nodeVariables [ - ^ #(#type #initializer) -] - -{ #category : #generated } -CSObjectCreationExpressionNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSObjectCreationExpressionNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSObjectCreationExpressionNode >> tokenVariables [ - ^ #(#newToken #leftParenToken #rightParenToken) -] - -{ #category : #generated } -CSObjectCreationExpressionNode >> type [ - ^ type -] - -{ #category : #generated } -CSObjectCreationExpressionNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSObjectInitializerNode.class.st b/src/SmaCC_CSharp/CSObjectInitializerNode.class.st deleted file mode 100644 index fbf20b32e..000000000 --- a/src/SmaCC_CSharp/CSObjectInitializerNode.class.st +++ /dev/null @@ -1,80 +0,0 @@ -Class { - #name : #CSObjectInitializerNode, - #superclass : #CSProgramNode, - #instVars : [ - 'leftBraceToken', - 'initializers', - 'commaTokens', - 'rightBraceToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSObjectInitializerNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitObjectInitializer: self -] - -{ #category : #generated } -CSObjectInitializerNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -CSObjectInitializerNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -CSObjectInitializerNode >> compositeNodeVariables [ - ^ #(#initializers) -] - -{ #category : #generated } -CSObjectInitializerNode >> ignoredCompositeTokenVariables [ - ^ #(#commaTokens) -] - -{ #category : #'generated-initialize-release' } -CSObjectInitializerNode >> initialize [ - super initialize. - initializers := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -CSObjectInitializerNode >> initializers [ - ^ initializers -] - -{ #category : #generated } -CSObjectInitializerNode >> initializers: anOrderedCollection [ - self setParents: self initializers to: nil. - initializers := anOrderedCollection. - self setParents: self initializers to: self -] - -{ #category : #generated } -CSObjectInitializerNode >> leftBraceToken [ - ^ leftBraceToken -] - -{ #category : #generated } -CSObjectInitializerNode >> leftBraceToken: aSmaCCToken [ - leftBraceToken := aSmaCCToken -] - -{ #category : #generated } -CSObjectInitializerNode >> rightBraceToken [ - ^ rightBraceToken -] - -{ #category : #generated } -CSObjectInitializerNode >> rightBraceToken: aSmaCCToken [ - rightBraceToken := aSmaCCToken -] - -{ #category : #generated } -CSObjectInitializerNode >> tokenVariables [ - ^ #(#leftBraceToken #rightBraceToken) -] diff --git a/src/SmaCC_CSharp/CSOperatorDeclarationNode.class.st b/src/SmaCC_CSharp/CSOperatorDeclarationNode.class.st deleted file mode 100644 index 1af4d4a93..000000000 --- a/src/SmaCC_CSharp/CSOperatorDeclarationNode.class.st +++ /dev/null @@ -1,201 +0,0 @@ -Class { - #name : #CSOperatorDeclarationNode, - #superclass : #CSDeclarationNode, - #instVars : [ - '_attributes', - 'modifiers', - 'returnType', - 'operatorToken', - 'operator', - 'leftParenToken', - 'types', - 'arguments', - 'rightParenToken', - 'commaToken', - 'implicitToken', - 'explicitToken', - 'body' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSOperatorDeclarationNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSOperatorDeclarationNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSOperatorDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitOperatorDeclaration: self -] - -{ #category : #generated } -CSOperatorDeclarationNode >> arguments [ - ^ arguments -] - -{ #category : #generated } -CSOperatorDeclarationNode >> arguments: anOrderedCollection [ - arguments := anOrderedCollection -] - -{ #category : #generated } -CSOperatorDeclarationNode >> body [ - ^ body -] - -{ #category : #generated } -CSOperatorDeclarationNode >> body: aCSMethodBodyNode [ - self body notNil - ifTrue: [ self body parent: nil ]. - body := aCSMethodBodyNode. - self body notNil - ifTrue: [ self body parent: self ] -] - -{ #category : #generated } -CSOperatorDeclarationNode >> commaToken [ - ^ commaToken -] - -{ #category : #generated } -CSOperatorDeclarationNode >> commaToken: aSmaCCToken [ - commaToken := aSmaCCToken -] - -{ #category : #generated } -CSOperatorDeclarationNode >> compositeNodeVariables [ - ^ #(#_attributes #types) -] - -{ #category : #generated } -CSOperatorDeclarationNode >> compositeTokenVariables [ - ^ #(#modifiers #arguments) -] - -{ #category : #generated } -CSOperatorDeclarationNode >> explicitToken [ - ^ explicitToken -] - -{ #category : #generated } -CSOperatorDeclarationNode >> explicitToken: aSmaCCToken [ - explicitToken := aSmaCCToken -] - -{ #category : #generated } -CSOperatorDeclarationNode >> ignoredTokenVariables [ - ^ #(#commaToken) -] - -{ #category : #generated } -CSOperatorDeclarationNode >> implicitToken [ - ^ implicitToken -] - -{ #category : #generated } -CSOperatorDeclarationNode >> implicitToken: aSmaCCToken [ - implicitToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -CSOperatorDeclarationNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. - modifiers := OrderedCollection new: 2. - types := OrderedCollection new: 2. - arguments := OrderedCollection new: 2. -] - -{ #category : #generated } -CSOperatorDeclarationNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSOperatorDeclarationNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSOperatorDeclarationNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -CSOperatorDeclarationNode >> modifiers: anOrderedCollection [ - modifiers := anOrderedCollection -] - -{ #category : #generated } -CSOperatorDeclarationNode >> nodeVariables [ - ^ #(#returnType #body) -] - -{ #category : #generated } -CSOperatorDeclarationNode >> operator [ - ^ operator -] - -{ #category : #generated } -CSOperatorDeclarationNode >> operator: aSmaCCToken [ - operator := aSmaCCToken -] - -{ #category : #generated } -CSOperatorDeclarationNode >> operatorToken [ - ^ operatorToken -] - -{ #category : #generated } -CSOperatorDeclarationNode >> operatorToken: aSmaCCToken [ - operatorToken := aSmaCCToken -] - -{ #category : #generated } -CSOperatorDeclarationNode >> returnType [ - ^ returnType -] - -{ #category : #generated } -CSOperatorDeclarationNode >> returnType: aCSTypeNode [ - self returnType notNil - ifTrue: [ self returnType parent: nil ]. - returnType := aCSTypeNode. - self returnType notNil - ifTrue: [ self returnType parent: self ] -] - -{ #category : #generated } -CSOperatorDeclarationNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSOperatorDeclarationNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSOperatorDeclarationNode >> tokenVariables [ - ^ #(#operatorToken #operator #leftParenToken #rightParenToken #implicitToken #explicitToken) -] - -{ #category : #generated } -CSOperatorDeclarationNode >> types [ - ^ types -] - -{ #category : #generated } -CSOperatorDeclarationNode >> types: anOrderedCollection [ - self setParents: self types to: nil. - types := anOrderedCollection. - self setParents: self types to: self -] diff --git a/src/SmaCC_CSharp/CSPointerElementAccessNode.class.st b/src/SmaCC_CSharp/CSPointerElementAccessNode.class.st deleted file mode 100644 index 958ecfd04..000000000 --- a/src/SmaCC_CSharp/CSPointerElementAccessNode.class.st +++ /dev/null @@ -1,74 +0,0 @@ -Class { - #name : #CSPointerElementAccessNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'expression', - 'leftBracketToken', - 'indexExpression', - 'rightBracketToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSPointerElementAccessNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPointerElementAccess: self -] - -{ #category : #generated } -CSPointerElementAccessNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSPointerElementAccessNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSPointerElementAccessNode >> indexExpression [ - ^ indexExpression -] - -{ #category : #generated } -CSPointerElementAccessNode >> indexExpression: aCSExpressionNode [ - self indexExpression notNil - ifTrue: [ self indexExpression parent: nil ]. - indexExpression := aCSExpressionNode. - self indexExpression notNil - ifTrue: [ self indexExpression parent: self ] -] - -{ #category : #generated } -CSPointerElementAccessNode >> leftBracketToken [ - ^ leftBracketToken -] - -{ #category : #generated } -CSPointerElementAccessNode >> leftBracketToken: aSmaCCToken [ - leftBracketToken := aSmaCCToken -] - -{ #category : #generated } -CSPointerElementAccessNode >> nodeVariables [ - ^ #(#expression #indexExpression) -] - -{ #category : #generated } -CSPointerElementAccessNode >> rightBracketToken [ - ^ rightBracketToken -] - -{ #category : #generated } -CSPointerElementAccessNode >> rightBracketToken: aSmaCCToken [ - rightBracketToken := aSmaCCToken -] - -{ #category : #generated } -CSPointerElementAccessNode >> tokenVariables [ - ^ #(#leftBracketToken #rightBracketToken) -] diff --git a/src/SmaCC_CSharp/CSPointerMemberAccessNode.class.st b/src/SmaCC_CSharp/CSPointerMemberAccessNode.class.st deleted file mode 100644 index 0b359c5de..000000000 --- a/src/SmaCC_CSharp/CSPointerMemberAccessNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #CSPointerMemberAccessNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'expression', - 'arrowToken', - 'name' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSPointerMemberAccessNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPointerMemberAccess: self -] - -{ #category : #generated } -CSPointerMemberAccessNode >> arrowToken [ - ^ arrowToken -] - -{ #category : #generated } -CSPointerMemberAccessNode >> arrowToken: aSmaCCToken [ - arrowToken := aSmaCCToken -] - -{ #category : #generated } -CSPointerMemberAccessNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSPointerMemberAccessNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSPointerMemberAccessNode >> name [ - ^ name -] - -{ #category : #generated } -CSPointerMemberAccessNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -CSPointerMemberAccessNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -CSPointerMemberAccessNode >> tokenVariables [ - ^ #(#arrowToken #name) -] diff --git a/src/SmaCC_CSharp/CSPointerTypeNode.class.st b/src/SmaCC_CSharp/CSPointerTypeNode.class.st deleted file mode 100644 index 7c07ea172..000000000 --- a/src/SmaCC_CSharp/CSPointerTypeNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #CSPointerTypeNode, - #superclass : #CSTypeNode, - #instVars : [ - 'type', - 'timesToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSPointerTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPointerType: self -] - -{ #category : #generated } -CSPointerTypeNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -CSPointerTypeNode >> timesToken [ - ^ timesToken -] - -{ #category : #generated } -CSPointerTypeNode >> timesToken: aSmaCCToken [ - timesToken := aSmaCCToken -] - -{ #category : #generated } -CSPointerTypeNode >> tokenVariables [ - ^ #(#timesToken) -] - -{ #category : #generated } -CSPointerTypeNode >> type [ - ^ type -] - -{ #category : #generated } -CSPointerTypeNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSPostExpressionNode.class.st b/src/SmaCC_CSharp/CSPostExpressionNode.class.st deleted file mode 100644 index e2732650c..000000000 --- a/src/SmaCC_CSharp/CSPostExpressionNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #CSPostExpressionNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'expression', - 'operator' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSPostExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPostExpression: self -] - -{ #category : #generated } -CSPostExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSPostExpressionNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSPostExpressionNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -CSPostExpressionNode >> operator [ - ^ operator -] - -{ #category : #generated } -CSPostExpressionNode >> operator: aSmaCCToken [ - operator := aSmaCCToken -] - -{ #category : #generated } -CSPostExpressionNode >> tokenVariables [ - ^ #(#operator) -] diff --git a/src/SmaCC_CSharp/CSPrefixExpressionNode.class.st b/src/SmaCC_CSharp/CSPrefixExpressionNode.class.st deleted file mode 100644 index 4005752ab..000000000 --- a/src/SmaCC_CSharp/CSPrefixExpressionNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #CSPrefixExpressionNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'operator', - 'expression' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSPrefixExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPrefixExpression: self -] - -{ #category : #generated } -CSPrefixExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSPrefixExpressionNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSPrefixExpressionNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -CSPrefixExpressionNode >> operator [ - ^ operator -] - -{ #category : #generated } -CSPrefixExpressionNode >> operator: aSmaCCToken [ - operator := aSmaCCToken -] - -{ #category : #generated } -CSPrefixExpressionNode >> tokenVariables [ - ^ #(#operator) -] diff --git a/src/SmaCC_CSharp/CSPrimaryConstraintNode.class.st b/src/SmaCC_CSharp/CSPrimaryConstraintNode.class.st deleted file mode 100644 index 7ad9cb19d..000000000 --- a/src/SmaCC_CSharp/CSPrimaryConstraintNode.class.st +++ /dev/null @@ -1,39 +0,0 @@ -Class { - #name : #CSPrimaryConstraintNode, - #superclass : #CSProgramNode, - #instVars : [ - 'classToken', - 'structToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSPrimaryConstraintNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPrimaryConstraint: self -] - -{ #category : #generated } -CSPrimaryConstraintNode >> classToken [ - ^ classToken -] - -{ #category : #generated } -CSPrimaryConstraintNode >> classToken: aSmaCCToken [ - classToken := aSmaCCToken -] - -{ #category : #generated } -CSPrimaryConstraintNode >> structToken [ - ^ structToken -] - -{ #category : #generated } -CSPrimaryConstraintNode >> structToken: aSmaCCToken [ - structToken := aSmaCCToken -] - -{ #category : #generated } -CSPrimaryConstraintNode >> tokenVariables [ - ^ #(#classToken #structToken) -] diff --git a/src/SmaCC_CSharp/CSProgramNode.class.st b/src/SmaCC_CSharp/CSProgramNode.class.st deleted file mode 100644 index b6f68400f..000000000 --- a/src/SmaCC_CSharp/CSProgramNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #CSProgramNode, - #superclass : #SmaCCParseNode, - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSProgramNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitProgram: self -] diff --git a/src/SmaCC_CSharp/CSProgramNodeVisitor.class.st b/src/SmaCC_CSharp/CSProgramNodeVisitor.class.st deleted file mode 100644 index 3271b99f5..000000000 --- a/src/SmaCC_CSharp/CSProgramNodeVisitor.class.st +++ /dev/null @@ -1,786 +0,0 @@ -Class { - #name : #CSProgramNodeVisitor, - #superclass : #SmaCCParseNodeVisitor, - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSProgramNodeVisitor >> visitAddAccessorDeclaration: anAddAccessorDeclaration [ - ^ self visitProgram: anAddAccessorDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitAnonymousFunctionParameter: anAnonymousFunctionParameter [ - ^ self visitProgram: anAnonymousFunctionParameter -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitAnonymousMethodExpression: anAnonymousMethodExpression [ - ^ self visitExpression: anAnonymousMethodExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitAnonymousObjectCreationExpression: anAnonymousObjectCreationExpression [ - ^ self visitExpression: anAnonymousObjectCreationExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitArgument: anArgument [ - ^ self visitProgram: anArgument -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitArrayCreationExpression: anArrayCreationExpression [ - ^ self visitExpression: anArrayCreationExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitArrayInitializer: anArrayInitializer [ - ^ self visitProgram: anArrayInitializer -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitArrayParameter: anArrayParameter [ - ^ self visitProgram: anArrayParameter -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitArrayType: anArrayType [ - ^ self visitType: anArrayType -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitAssignment: anAssignment [ - ^ self visitExpression: anAssignment -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitAttribute: anAttribute [ - ^ self visitProgram: anAttribute -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitAttributeValue: anAttributeValue [ - ^ self visitProgram: anAttributeValue -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitAwaitExpression: anAwaitExpression [ - ^ self visitExpression: anAwaitExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitBaseAccess: aBaseAccess [ - ^ self visitExpression: aBaseAccess -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitBaseExpression: aBaseExpression [ - ^ self visitExpression: aBaseExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitBinaryExpression: aBinaryExpression [ - ^ self visitExpression: aBinaryExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitBlockStatement: aBlockStatement [ - ^ self visitStatement: aBlockStatement -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitBooleanLiteralExpression: aBooleanLiteralExpression [ - ^ self visitLiteralExpression: aBooleanLiteralExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitBreakStatement: aBreakStatement [ - ^ self visitStatement: aBreakStatement -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitCastExpression: aCastExpression [ - ^ self visitExpression: aCastExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitCatchClause: aCatchClause [ - ^ self visitProgram: aCatchClause -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitCharacterLiteralExpression: aCharacterLiteralExpression [ - ^ self visitLiteralExpression: aCharacterLiteralExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitCheckedExpression: aCheckedExpression [ - ^ self visitExpression: aCheckedExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitCheckedStatement: aCheckedStatement [ - ^ self visitStatement: aCheckedStatement -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitClassDeclaration: aClassDeclaration [ - ^ self visitDeclaration: aClassDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitCollectionInitializer: aCollectionInitializer [ - ^ self visitProgram: aCollectionInitializer -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitCompilationUnit: aCompilationUnit [ - ^ self visitProgram: aCompilationUnit -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitConditionalExpression: aConditionalExpression [ - ^ self visitExpression: aConditionalExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitConstDeclarator: aConstDeclarator [ - ^ self visitProgram: aConstDeclarator -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitConstantDeclaration: aConstantDeclaration [ - ^ self visitDeclaration: aConstantDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitConstantDeclarator: aConstantDeclarator [ - ^ self visitProgram: aConstantDeclarator -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitConstructorConstraint: aConstructorConstraint [ - ^ self visitProgram: aConstructorConstraint -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitConstructorDeclaration: aConstructorDeclaration [ - ^ self visitDeclaration: aConstructorDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitConstructorInitializer: aConstructorInitializer [ - ^ self visitProgram: aConstructorInitializer -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitContinueStatement: aContinueStatement [ - ^ self visitStatement: aContinueStatement -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitDeclaration: aDeclaration [ - ^ self visitProgram: aDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitDeclarationStatement: aDeclarationStatement [ - ^ self visitStatement: aDeclarationStatement -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitDefaultValueExpression: aDefaultValueExpression [ - ^ self visitExpression: aDefaultValueExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitDelegateCreationExpression: aDelegateCreationExpression [ - ^ self visitExpression: aDelegateCreationExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitDelegateDeclaration: aDelegateDeclaration [ - ^ self visitDeclaration: aDelegateDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitDestructorDeclaration: aDestructorDeclaration [ - ^ self visitDeclaration: aDestructorDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitDoStatement: aDoStatement [ - ^ self visitStatement: aDoStatement -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitElementAccess: anElementAccess [ - ^ self visitExpression: anElementAccess -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitElementInitializer: anElementInitializer [ - ^ self visitProgram: anElementInitializer -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitEmptyStatement: anEmptyStatement [ - ^ self visitStatement: anEmptyStatement -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitEnumDeclaration: anEnumDeclaration [ - ^ self visitDeclaration: anEnumDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitEventDeclaration: anEventDeclaration [ - ^ self visitDeclaration: anEventDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitExceptionFilter: anExceptionFilter [ - ^ self visitProgram: anExceptionFilter -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitExplicitAnonymousFunctionSignature: anExplicitAnonymousFunctionSignature [ - ^ self visitProgram: anExplicitAnonymousFunctionSignature -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitExpression: anExpression [ - ^ self visitProgram: anExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitExpressionStatement: anExpressionStatement [ - ^ self visitStatement: anExpressionStatement -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitExternAliasDirective: anExternAliasDirective [ - ^ self visitProgram: anExternAliasDirective -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitFieldDeclaration: aFieldDeclaration [ - ^ self visitDeclaration: aFieldDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitFinallyClause: aFinallyClause [ - ^ self visitProgram: aFinallyClause -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitFixedParameter: aFixedParameter [ - ^ self visitProgram: aFixedParameter -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitFixedPointerDeclarator: aFixedPointerDeclarator [ - ^ self visitProgram: aFixedPointerDeclarator -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitFixedSizeBufferDeclaration: aFixedSizeBufferDeclaration [ - ^ self visitDeclaration: aFixedSizeBufferDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitFixedSizeBufferDeclarator: aFixedSizeBufferDeclarator [ - ^ self visitProgram: aFixedSizeBufferDeclarator -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitFixedStatement: aFixedStatement [ - ^ self visitStatement: aFixedStatement -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitForStatement: aForStatement [ - ^ self visitStatement: aForStatement -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitForeachStatement: aForeachStatement [ - ^ self visitStatement: aForeachStatement -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitGetAccessorDeclaration: aGetAccessorDeclaration [ - ^ self visitProgram: aGetAccessorDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitGotoStatement: aGotoStatement [ - ^ self visitStatement: aGotoStatement -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitIfStatement: anIfStatement [ - ^ self visitStatement: anIfStatement -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitImplicitAnonymousFunctionSignature: anImplicitAnonymousFunctionSignature [ - ^ self visitProgram: anImplicitAnonymousFunctionSignature -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitIndexerDeclaration: anIndexerDeclaration [ - ^ self visitDeclaration: anIndexerDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitIntegerLiteralExpression: anIntegerLiteralExpression [ - ^ self visitLiteralExpression: anIntegerLiteralExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitInterfaceDeclaration: anInterfaceDeclaration [ - ^ self visitDeclaration: anInterfaceDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitInterfaceEventDeclaration: anInterfaceEventDeclaration [ - ^ self visitDeclaration: anInterfaceEventDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitInterfaceIndexerDeclaration: anInterfaceIndexerDeclaration [ - ^ self visitDeclaration: anInterfaceIndexerDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitInterfaceMethodDeclaration: anInterfaceMethodDeclaration [ - ^ self visitDeclaration: anInterfaceMethodDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitInterfacePropertyAccessor: anInterfacePropertyAccessor [ - ^ self visitProgram: anInterfacePropertyAccessor -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitInterfacePropertyDeclaration: anInterfacePropertyDeclaration [ - ^ self visitDeclaration: anInterfacePropertyDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitInterpolatedStringExpression: anInterpolatedStringExpression [ - ^ self visitExpression: anInterpolatedStringExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitInterpolation: anInterpolation [ - ^ self visitProgram: anInterpolation -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitInvocationExpression: anInvocationExpression [ - ^ self visitExpression: anInvocationExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitLabeledStatement: aLabeledStatement [ - ^ self visitStatement: aLabeledStatement -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitLambdaExpression: aLambdaExpression [ - ^ self visitExpression: aLambdaExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitLiteralExpression: aLiteralExpression [ - ^ self visitExpression: aLiteralExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitLocalConstantDeclaration: aLocalConstantDeclaration [ - ^ self visitDeclaration: aLocalConstantDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitLocalVariableDeclaration: aLocalVariableDeclaration [ - ^ self visitDeclaration: aLocalVariableDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitLocalVariableDeclarator: aLocalVariableDeclarator [ - ^ self visitProgram: aLocalVariableDeclarator -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitLockStatement: aLockStatement [ - ^ self visitStatement: aLockStatement -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitMemberAccess: aMemberAccess [ - ^ self visitExpression: aMemberAccess -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitMemberDeclarator: aMemberDeclarator [ - ^ self visitProgram: aMemberDeclarator -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitMemberInitializer: aMemberInitializer [ - ^ self visitProgram: aMemberInitializer -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitMethodBody: aMethodBody [ - ^ self visitProgram: aMethodBody -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitMethodDeclaration: aMethodDeclaration [ - ^ self visitDeclaration: aMethodDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitMethodHeader: aMethodHeader [ - ^ self visitProgram: aMethodHeader -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitNamedArgument: aNamedArgument [ - ^ self visitProgram: aNamedArgument -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitNamedEntity: aNamedEntity [ - ^ self visitExpression: aNamedEntity -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitNameofExpression: aNameofExpression [ - ^ self visitExpression: aNameofExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitNamespaceDeclaration: aNamespaceDeclaration [ - ^ self visitDeclaration: aNamespaceDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitNullConditionalElementAccess: aNullConditionalElementAccess [ - ^ self visitElementAccess: aNullConditionalElementAccess -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitNullConditionalExpression: aNullConditionalExpression [ - ^ self visitExpression: aNullConditionalExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitNullConditionalInvocationExpression: aNullConditionalInvocationExpression [ - ^ self - visitInvocationExpression: aNullConditionalInvocationExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitNullConditionalMemberAccess: aNullConditionalMemberAccess [ - ^ self visitMemberAccess: aNullConditionalMemberAccess -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitNullLiteralExpression: aNullLiteralExpression [ - ^ self visitLiteralExpression: aNullLiteralExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitNullableType: aNullableType [ - ^ self visitType: aNullableType -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitObjectCreationExpression: anObjectCreationExpression [ - ^ self visitExpression: anObjectCreationExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitObjectInitializer: anObjectInitializer [ - ^ self visitProgram: anObjectInitializer -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitOperatorDeclaration: anOperatorDeclaration [ - ^ self visitDeclaration: anOperatorDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitPointerElementAccess: aPointerElementAccess [ - ^ self visitExpression: aPointerElementAccess -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitPointerMemberAccess: aPointerMemberAccess [ - ^ self visitExpression: aPointerMemberAccess -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitPointerType: aPointerType [ - ^ self visitType: aPointerType -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitPostExpression: aPostExpression [ - ^ self visitExpression: aPostExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitPrefixExpression: aPrefixExpression [ - ^ self visitExpression: aPrefixExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitPrimaryConstraint: aPrimaryConstraint [ - ^ self visitProgram: aPrimaryConstraint -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitProgram: aProgram [ - ^ self visitSmaCCParseNode: aProgram -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitPropertyDeclaration: aPropertyDeclaration [ - ^ self visitDeclaration: aPropertyDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitQualifiedAliasMember: aQualifiedAliasMember [ - ^ self visitType: aQualifiedAliasMember -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitQualifiedIdentifier: aQualifiedIdentifier [ - ^ self visitProgram: aQualifiedIdentifier -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitQueryExpression: aQueryExpression [ - ^ self visitExpression: aQueryExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitRankSpecifier: aRankSpecifier [ - ^ self visitProgram: aRankSpecifier -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitRealLiteralExpression: aRealLiteralExpression [ - ^ self visitLiteralExpression: aRealLiteralExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitRemoveAccessorDeclaration: aRemoveAccessorDeclaration [ - ^ self visitProgram: aRemoveAccessorDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitReturnStatement: aReturnStatement [ - ^ self visitStatement: aReturnStatement -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitSetAccessorDeclaration: aSetAccessorDeclaration [ - ^ self visitProgram: aSetAccessorDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitSimpleName: aSimpleName [ - ^ self visitExpression: aSimpleName -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitSimpleType: aSimpleType [ - ^ self visitType: aSimpleType -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitSizeofExpression: aSizeofExpression [ - ^ self visitExpression: aSizeofExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitStackallocInitializer: aStackallocInitializer [ - ^ self visitProgram: aStackallocInitializer -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitStatement: aStatement [ - ^ self visitProgram: aStatement -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitStatementList: aStatementList [ - ^ self visitProgram: aStatementList -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitStaticConstructorDeclaration: aStaticConstructorDeclaration [ - ^ self visitDeclaration: aStaticConstructorDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitStringLiteralExpression: aStringLiteralExpression [ - ^ self visitLiteralExpression: aStringLiteralExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitStructDeclaration: aStructDeclaration [ - ^ self visitDeclaration: aStructDeclaration -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitSwitchLabel: aSwitchLabel [ - ^ self visitProgram: aSwitchLabel -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitSwitchSection: aSwitchSection [ - ^ self visitProgram: aSwitchSection -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitSwitchStatement: aSwitchStatement [ - ^ self visitStatement: aSwitchStatement -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitThisAccess: aThisAccess [ - ^ self visitExpression: aThisAccess -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitThrowStatement: aThrowStatement [ - ^ self visitStatement: aThrowStatement -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitTryStatement: aTryStatement [ - ^ self visitStatement: aTryStatement -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitType: aType [ - ^ self visitProgram: aType -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitTypeArgumentList: aTypeArgumentList [ - ^ self visitProgram: aTypeArgumentList -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitTypeConstraint: aTypeConstraint [ - ^ self visitProgram: aTypeConstraint -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitTypeExpression: aTypeExpression [ - ^ self visitExpression: aTypeExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitTypeName: aTypeName [ - ^ self visitType: aTypeName -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitTypeParameterConstraintsClause: aTypeParameterConstraintsClause [ - ^ self visitProgram: aTypeParameterConstraintsClause -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitTypeParameterList: aTypeParameterList [ - ^ self visitProgram: aTypeParameterList -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitTypeofExpression: aTypeofExpression [ - ^ self visitExpression: aTypeofExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitUnboundTypeName: anUnboundTypeName [ - ^ self visitProgram: anUnboundTypeName -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitUncheckedExpression: anUncheckedExpression [ - ^ self visitExpression: anUncheckedExpression -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitUncheckedStatement: anUncheckedStatement [ - ^ self visitStatement: anUncheckedStatement -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitUnsafeStatement: anUnsafeStatement [ - ^ self visitStatement: anUnsafeStatement -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitUsingAliasDirective: anUsingAliasDirective [ - ^ self visitUsingDirective: anUsingAliasDirective -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitUsingDirective: anUsingDirective [ - ^ self visitProgram: anUsingDirective -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitUsingNamespaceDirective: anUsingNamespaceDirective [ - ^ self visitUsingDirective: anUsingNamespaceDirective -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitUsingStatement: anUsingStatement [ - ^ self visitStatement: anUsingStatement -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitUsingStaticDirective: anUsingStaticDirective [ - ^ self visitUsingDirective: anUsingStaticDirective -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitVarType: aVarType [ - ^ self visitType: aVarType -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitVariableDeclarator: aVariableDeclarator [ - ^ self visitProgram: aVariableDeclarator -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitVariantTypeParameterList: aVariantTypeParameterList [ - ^ self visitTypeParameterList: aVariantTypeParameterList -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitVoidType: aVoidType [ - ^ self visitType: aVoidType -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitWhileStatement: aWhileStatement [ - ^ self visitStatement: aWhileStatement -] - -{ #category : #generated } -CSProgramNodeVisitor >> visitYieldStatement: aYieldStatement [ - ^ self visitStatement: aYieldStatement -] diff --git a/src/SmaCC_CSharp/CSPropertyDeclarationNode.class.st b/src/SmaCC_CSharp/CSPropertyDeclarationNode.class.st deleted file mode 100644 index cee302955..000000000 --- a/src/SmaCC_CSharp/CSPropertyDeclarationNode.class.st +++ /dev/null @@ -1,230 +0,0 @@ -Class { - #name : #CSPropertyDeclarationNode, - #superclass : #CSDeclarationNode, - #instVars : [ - '_attributes', - 'modifiers', - 'type', - 'name', - 'interface', - 'periodToken', - 'leftBraceToken', - 'getAccessor', - 'setAccessor', - 'rightBraceToken', - 'equalToken', - 'initializer', - 'equalGreaterThanToken', - 'expression', - 'semicolon' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSPropertyDeclarationNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSPropertyDeclarationNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSPropertyDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPropertyDeclaration: self -] - -{ #category : #generated } -CSPropertyDeclarationNode >> compositeNodeVariables [ - ^ #(#_attributes) -] - -{ #category : #generated } -CSPropertyDeclarationNode >> compositeTokenVariables [ - ^ #(#modifiers) -] - -{ #category : #generated } -CSPropertyDeclarationNode >> equalGreaterThanToken [ - ^ equalGreaterThanToken -] - -{ #category : #generated } -CSPropertyDeclarationNode >> equalGreaterThanToken: aSmaCCToken [ - equalGreaterThanToken := aSmaCCToken -] - -{ #category : #generated } -CSPropertyDeclarationNode >> equalToken [ - ^ equalToken -] - -{ #category : #generated } -CSPropertyDeclarationNode >> equalToken: aSmaCCToken [ - equalToken := aSmaCCToken -] - -{ #category : #generated } -CSPropertyDeclarationNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSPropertyDeclarationNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSPropertyDeclarationNode >> getAccessor [ - ^ getAccessor -] - -{ #category : #generated } -CSPropertyDeclarationNode >> getAccessor: aCSGetAccessorDeclarationNode [ - self getAccessor notNil - ifTrue: [ self getAccessor parent: nil ]. - getAccessor := aCSGetAccessorDeclarationNode. - self getAccessor notNil - ifTrue: [ self getAccessor parent: self ] -] - -{ #category : #'generated-initialize-release' } -CSPropertyDeclarationNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. - modifiers := OrderedCollection new: 2. -] - -{ #category : #generated } -CSPropertyDeclarationNode >> initializer [ - ^ initializer -] - -{ #category : #generated } -CSPropertyDeclarationNode >> initializer: aCSProgramNode [ - self initializer notNil - ifTrue: [ self initializer parent: nil ]. - initializer := aCSProgramNode. - self initializer notNil - ifTrue: [ self initializer parent: self ] -] - -{ #category : #generated } -CSPropertyDeclarationNode >> interface [ - ^ interface -] - -{ #category : #generated } -CSPropertyDeclarationNode >> interface: aCSTypeNode [ - self interface notNil - ifTrue: [ self interface parent: nil ]. - interface := aCSTypeNode. - self interface notNil - ifTrue: [ self interface parent: self ] -] - -{ #category : #generated } -CSPropertyDeclarationNode >> leftBraceToken [ - ^ leftBraceToken -] - -{ #category : #generated } -CSPropertyDeclarationNode >> leftBraceToken: aSmaCCToken [ - leftBraceToken := aSmaCCToken -] - -{ #category : #generated } -CSPropertyDeclarationNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -CSPropertyDeclarationNode >> modifiers: anOrderedCollection [ - modifiers := anOrderedCollection -] - -{ #category : #generated } -CSPropertyDeclarationNode >> name [ - ^ name -] - -{ #category : #generated } -CSPropertyDeclarationNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -CSPropertyDeclarationNode >> nodeVariables [ - ^ #(#type #interface #getAccessor #setAccessor #initializer #expression) -] - -{ #category : #generated } -CSPropertyDeclarationNode >> periodToken [ - ^ periodToken -] - -{ #category : #generated } -CSPropertyDeclarationNode >> periodToken: aSmaCCToken [ - periodToken := aSmaCCToken -] - -{ #category : #generated } -CSPropertyDeclarationNode >> rightBraceToken [ - ^ rightBraceToken -] - -{ #category : #generated } -CSPropertyDeclarationNode >> rightBraceToken: aSmaCCToken [ - rightBraceToken := aSmaCCToken -] - -{ #category : #generated } -CSPropertyDeclarationNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -CSPropertyDeclarationNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -CSPropertyDeclarationNode >> setAccessor [ - ^ setAccessor -] - -{ #category : #generated } -CSPropertyDeclarationNode >> setAccessor: aCSSetAccessorDeclarationNode [ - self setAccessor notNil - ifTrue: [ self setAccessor parent: nil ]. - setAccessor := aCSSetAccessorDeclarationNode. - self setAccessor notNil - ifTrue: [ self setAccessor parent: self ] -] - -{ #category : #generated } -CSPropertyDeclarationNode >> tokenVariables [ - ^ #(#name #periodToken #leftBraceToken #rightBraceToken #equalToken #equalGreaterThanToken #semicolon) -] - -{ #category : #generated } -CSPropertyDeclarationNode >> type [ - ^ type -] - -{ #category : #generated } -CSPropertyDeclarationNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSQualifiedAliasMemberNode.class.st b/src/SmaCC_CSharp/CSQualifiedAliasMemberNode.class.st deleted file mode 100644 index 85db67639..000000000 --- a/src/SmaCC_CSharp/CSQualifiedAliasMemberNode.class.st +++ /dev/null @@ -1,70 +0,0 @@ -Class { - #name : #CSQualifiedAliasMemberNode, - #superclass : #CSTypeNode, - #instVars : [ - 'global', - 'colonColonToken', - 'name', - 'typeArguments' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSQualifiedAliasMemberNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitQualifiedAliasMember: self -] - -{ #category : #generated } -CSQualifiedAliasMemberNode >> colonColonToken [ - ^ colonColonToken -] - -{ #category : #generated } -CSQualifiedAliasMemberNode >> colonColonToken: aSmaCCToken [ - colonColonToken := aSmaCCToken -] - -{ #category : #generated } -CSQualifiedAliasMemberNode >> global [ - ^ global -] - -{ #category : #generated } -CSQualifiedAliasMemberNode >> global: aSmaCCToken [ - global := aSmaCCToken -] - -{ #category : #generated } -CSQualifiedAliasMemberNode >> name [ - ^ name -] - -{ #category : #generated } -CSQualifiedAliasMemberNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -CSQualifiedAliasMemberNode >> nodeVariables [ - ^ #(#typeArguments) -] - -{ #category : #generated } -CSQualifiedAliasMemberNode >> tokenVariables [ - ^ #(#global #colonColonToken #name) -] - -{ #category : #generated } -CSQualifiedAliasMemberNode >> typeArguments [ - ^ typeArguments -] - -{ #category : #generated } -CSQualifiedAliasMemberNode >> typeArguments: aCSTypeArgumentListNode [ - self typeArguments notNil - ifTrue: [ self typeArguments parent: nil ]. - typeArguments := aCSTypeArgumentListNode. - self typeArguments notNil - ifTrue: [ self typeArguments parent: self ] -] diff --git a/src/SmaCC_CSharp/CSQualifiedIdentifierNode.class.st b/src/SmaCC_CSharp/CSQualifiedIdentifierNode.class.st deleted file mode 100644 index 72dac002f..000000000 --- a/src/SmaCC_CSharp/CSQualifiedIdentifierNode.class.st +++ /dev/null @@ -1,46 +0,0 @@ -Class { - #name : #CSQualifiedIdentifierNode, - #superclass : #CSProgramNode, - #instVars : [ - 'names', - 'periodTokens' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSQualifiedIdentifierNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitQualifiedIdentifier: self -] - -{ #category : #generated } -CSQualifiedIdentifierNode >> compositeTokenVariables [ - ^ #(#names #periodTokens) -] - -{ #category : #'generated-initialize-release' } -CSQualifiedIdentifierNode >> initialize [ - super initialize. - names := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -CSQualifiedIdentifierNode >> names [ - ^ names -] - -{ #category : #generated } -CSQualifiedIdentifierNode >> names: anOrderedCollection [ - names := anOrderedCollection -] - -{ #category : #generated } -CSQualifiedIdentifierNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -CSQualifiedIdentifierNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] diff --git a/src/SmaCC_CSharp/CSQueryExpressionNode.class.st b/src/SmaCC_CSharp/CSQueryExpressionNode.class.st deleted file mode 100644 index b53d2406b..000000000 --- a/src/SmaCC_CSharp/CSQueryExpressionNode.class.st +++ /dev/null @@ -1,334 +0,0 @@ -Class { - #name : #CSQueryExpressionNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'fromTokens', - 'types', - 'identifierTokens', - 'inTokens', - 'expressions', - 'letTokens', - 'equalTokens', - 'whereTokens', - 'joinTokens', - 'joinInExpressions', - 'onTokens', - 'joinOnExpressions', - 'equalsTokens', - 'joinEqualsExpressions', - 'intoTokens', - 'orderbyTokens', - 'ascendingTokens', - 'descendingTokens', - 'commaTokens', - 'selectTokens', - 'groupTokens', - 'groupExpressions', - 'byTokens', - 'groupByExpressions' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSQueryExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitQueryExpression: self -] - -{ #category : #generated } -CSQueryExpressionNode >> ascendingTokens [ - ^ ascendingTokens -] - -{ #category : #generated } -CSQueryExpressionNode >> ascendingTokens: anOrderedCollection [ - ascendingTokens := anOrderedCollection -] - -{ #category : #generated } -CSQueryExpressionNode >> byTokens [ - ^ byTokens -] - -{ #category : #generated } -CSQueryExpressionNode >> byTokens: anOrderedCollection [ - byTokens := anOrderedCollection -] - -{ #category : #generated } -CSQueryExpressionNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -CSQueryExpressionNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -CSQueryExpressionNode >> compositeNodeVariables [ - ^ #(#types #expressions #joinInExpressions #joinOnExpressions #joinEqualsExpressions #groupExpressions #groupByExpressions) -] - -{ #category : #generated } -CSQueryExpressionNode >> compositeTokenVariables [ - ^ #(#fromTokens #identifierTokens #inTokens #letTokens #equalTokens #whereTokens #joinTokens #onTokens #equalsTokens #intoTokens #orderbyTokens #ascendingTokens #descendingTokens #selectTokens #groupTokens #byTokens) -] - -{ #category : #generated } -CSQueryExpressionNode >> descendingTokens [ - ^ descendingTokens -] - -{ #category : #generated } -CSQueryExpressionNode >> descendingTokens: anOrderedCollection [ - descendingTokens := anOrderedCollection -] - -{ #category : #generated } -CSQueryExpressionNode >> equalTokens [ - ^ equalTokens -] - -{ #category : #generated } -CSQueryExpressionNode >> equalTokens: anOrderedCollection [ - equalTokens := anOrderedCollection -] - -{ #category : #generated } -CSQueryExpressionNode >> equalsTokens [ - ^ equalsTokens -] - -{ #category : #generated } -CSQueryExpressionNode >> equalsTokens: anOrderedCollection [ - equalsTokens := anOrderedCollection -] - -{ #category : #generated } -CSQueryExpressionNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -CSQueryExpressionNode >> expressions: anOrderedCollection [ - self setParents: self expressions to: nil. - expressions := anOrderedCollection. - self setParents: self expressions to: self -] - -{ #category : #generated } -CSQueryExpressionNode >> fromTokens [ - ^ fromTokens -] - -{ #category : #generated } -CSQueryExpressionNode >> fromTokens: anOrderedCollection [ - fromTokens := anOrderedCollection -] - -{ #category : #generated } -CSQueryExpressionNode >> groupByExpressions [ - ^ groupByExpressions -] - -{ #category : #generated } -CSQueryExpressionNode >> groupByExpressions: anOrderedCollection [ - self setParents: self groupByExpressions to: nil. - groupByExpressions := anOrderedCollection. - self setParents: self groupByExpressions to: self -] - -{ #category : #generated } -CSQueryExpressionNode >> groupExpressions [ - ^ groupExpressions -] - -{ #category : #generated } -CSQueryExpressionNode >> groupExpressions: anOrderedCollection [ - self setParents: self groupExpressions to: nil. - groupExpressions := anOrderedCollection. - self setParents: self groupExpressions to: self -] - -{ #category : #generated } -CSQueryExpressionNode >> groupTokens [ - ^ groupTokens -] - -{ #category : #generated } -CSQueryExpressionNode >> groupTokens: anOrderedCollection [ - groupTokens := anOrderedCollection -] - -{ #category : #generated } -CSQueryExpressionNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -CSQueryExpressionNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #generated } -CSQueryExpressionNode >> ignoredCompositeTokenVariables [ - ^ #(#commaTokens #_leftParens #_rightParens) -] - -{ #category : #generated } -CSQueryExpressionNode >> inTokens [ - ^ inTokens -] - -{ #category : #generated } -CSQueryExpressionNode >> inTokens: anOrderedCollection [ - inTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -CSQueryExpressionNode >> initialize [ - super initialize. - fromTokens := OrderedCollection new: 2. - types := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - inTokens := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. - letTokens := OrderedCollection new: 2. - equalTokens := OrderedCollection new: 2. - whereTokens := OrderedCollection new: 2. - joinTokens := OrderedCollection new: 2. - joinInExpressions := OrderedCollection new: 2. - onTokens := OrderedCollection new: 2. - joinOnExpressions := OrderedCollection new: 2. - equalsTokens := OrderedCollection new: 2. - joinEqualsExpressions := OrderedCollection new: 2. - intoTokens := OrderedCollection new: 2. - orderbyTokens := OrderedCollection new: 2. - ascendingTokens := OrderedCollection new: 2. - descendingTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - selectTokens := OrderedCollection new: 2. - groupTokens := OrderedCollection new: 2. - groupExpressions := OrderedCollection new: 2. - byTokens := OrderedCollection new: 2. - groupByExpressions := OrderedCollection new: 2. -] - -{ #category : #generated } -CSQueryExpressionNode >> intoTokens [ - ^ intoTokens -] - -{ #category : #generated } -CSQueryExpressionNode >> intoTokens: anOrderedCollection [ - intoTokens := anOrderedCollection -] - -{ #category : #generated } -CSQueryExpressionNode >> joinEqualsExpressions [ - ^ joinEqualsExpressions -] - -{ #category : #generated } -CSQueryExpressionNode >> joinEqualsExpressions: anOrderedCollection [ - self setParents: self joinEqualsExpressions to: nil. - joinEqualsExpressions := anOrderedCollection. - self setParents: self joinEqualsExpressions to: self -] - -{ #category : #generated } -CSQueryExpressionNode >> joinInExpressions [ - ^ joinInExpressions -] - -{ #category : #generated } -CSQueryExpressionNode >> joinInExpressions: anOrderedCollection [ - self setParents: self joinInExpressions to: nil. - joinInExpressions := anOrderedCollection. - self setParents: self joinInExpressions to: self -] - -{ #category : #generated } -CSQueryExpressionNode >> joinOnExpressions [ - ^ joinOnExpressions -] - -{ #category : #generated } -CSQueryExpressionNode >> joinOnExpressions: anOrderedCollection [ - self setParents: self joinOnExpressions to: nil. - joinOnExpressions := anOrderedCollection. - self setParents: self joinOnExpressions to: self -] - -{ #category : #generated } -CSQueryExpressionNode >> joinTokens [ - ^ joinTokens -] - -{ #category : #generated } -CSQueryExpressionNode >> joinTokens: anOrderedCollection [ - joinTokens := anOrderedCollection -] - -{ #category : #generated } -CSQueryExpressionNode >> letTokens [ - ^ letTokens -] - -{ #category : #generated } -CSQueryExpressionNode >> letTokens: anOrderedCollection [ - letTokens := anOrderedCollection -] - -{ #category : #generated } -CSQueryExpressionNode >> onTokens [ - ^ onTokens -] - -{ #category : #generated } -CSQueryExpressionNode >> onTokens: anOrderedCollection [ - onTokens := anOrderedCollection -] - -{ #category : #generated } -CSQueryExpressionNode >> orderbyTokens [ - ^ orderbyTokens -] - -{ #category : #generated } -CSQueryExpressionNode >> orderbyTokens: anOrderedCollection [ - orderbyTokens := anOrderedCollection -] - -{ #category : #generated } -CSQueryExpressionNode >> selectTokens [ - ^ selectTokens -] - -{ #category : #generated } -CSQueryExpressionNode >> selectTokens: anOrderedCollection [ - selectTokens := anOrderedCollection -] - -{ #category : #generated } -CSQueryExpressionNode >> types [ - ^ types -] - -{ #category : #generated } -CSQueryExpressionNode >> types: anOrderedCollection [ - self setParents: self types to: nil. - types := anOrderedCollection. - self setParents: self types to: self -] - -{ #category : #generated } -CSQueryExpressionNode >> whereTokens [ - ^ whereTokens -] - -{ #category : #generated } -CSQueryExpressionNode >> whereTokens: anOrderedCollection [ - whereTokens := anOrderedCollection -] diff --git a/src/SmaCC_CSharp/CSRankSpecifierNode.class.st b/src/SmaCC_CSharp/CSRankSpecifierNode.class.st deleted file mode 100644 index ba84c5dbf..000000000 --- a/src/SmaCC_CSharp/CSRankSpecifierNode.class.st +++ /dev/null @@ -1,61 +0,0 @@ -Class { - #name : #CSRankSpecifierNode, - #superclass : #CSProgramNode, - #instVars : [ - 'leftBracketToken', - 'commaTokens', - 'rightBracketToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSRankSpecifierNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitRankSpecifier: self -] - -{ #category : #generated } -CSRankSpecifierNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -CSRankSpecifierNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -CSRankSpecifierNode >> ignoredCompositeTokenVariables [ - ^ #(#commaTokens) -] - -{ #category : #'generated-initialize-release' } -CSRankSpecifierNode >> initialize [ - super initialize. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -CSRankSpecifierNode >> leftBracketToken [ - ^ leftBracketToken -] - -{ #category : #generated } -CSRankSpecifierNode >> leftBracketToken: aSmaCCToken [ - leftBracketToken := aSmaCCToken -] - -{ #category : #generated } -CSRankSpecifierNode >> rightBracketToken [ - ^ rightBracketToken -] - -{ #category : #generated } -CSRankSpecifierNode >> rightBracketToken: aSmaCCToken [ - rightBracketToken := aSmaCCToken -] - -{ #category : #generated } -CSRankSpecifierNode >> tokenVariables [ - ^ #(#leftBracketToken #rightBracketToken) -] diff --git a/src/SmaCC_CSharp/CSRealLiteralExpressionNode.class.st b/src/SmaCC_CSharp/CSRealLiteralExpressionNode.class.st deleted file mode 100644 index eb627cf01..000000000 --- a/src/SmaCC_CSharp/CSRealLiteralExpressionNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #CSRealLiteralExpressionNode, - #superclass : #CSLiteralExpressionNode, - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSRealLiteralExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitRealLiteralExpression: self -] diff --git a/src/SmaCC_CSharp/CSRemoveAccessorDeclarationNode.class.st b/src/SmaCC_CSharp/CSRemoveAccessorDeclarationNode.class.st deleted file mode 100644 index b153babe7..000000000 --- a/src/SmaCC_CSharp/CSRemoveAccessorDeclarationNode.class.st +++ /dev/null @@ -1,72 +0,0 @@ -Class { - #name : #CSRemoveAccessorDeclarationNode, - #superclass : #CSProgramNode, - #instVars : [ - '_attributes', - 'removeToken', - 'block' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSRemoveAccessorDeclarationNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSRemoveAccessorDeclarationNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSRemoveAccessorDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitRemoveAccessorDeclaration: self -] - -{ #category : #generated } -CSRemoveAccessorDeclarationNode >> block [ - ^ block -] - -{ #category : #generated } -CSRemoveAccessorDeclarationNode >> block: aCSBlockStatementNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aCSBlockStatementNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -CSRemoveAccessorDeclarationNode >> compositeNodeVariables [ - ^ #(#_attributes) -] - -{ #category : #'generated-initialize-release' } -CSRemoveAccessorDeclarationNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. -] - -{ #category : #generated } -CSRemoveAccessorDeclarationNode >> nodeVariables [ - ^ #(#block) -] - -{ #category : #generated } -CSRemoveAccessorDeclarationNode >> removeToken [ - ^ removeToken -] - -{ #category : #generated } -CSRemoveAccessorDeclarationNode >> removeToken: aSmaCCToken [ - removeToken := aSmaCCToken -] - -{ #category : #generated } -CSRemoveAccessorDeclarationNode >> tokenVariables [ - ^ #(#removeToken) -] diff --git a/src/SmaCC_CSharp/CSReturnStatementNode.class.st b/src/SmaCC_CSharp/CSReturnStatementNode.class.st deleted file mode 100644 index 01099c1fd..000000000 --- a/src/SmaCC_CSharp/CSReturnStatementNode.class.st +++ /dev/null @@ -1,64 +0,0 @@ -Class { - #name : #CSReturnStatementNode, - #superclass : #CSStatementNode, - #instVars : [ - 'returnToken', - 'expression', - 'semicolonToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSReturnStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitReturnStatement: self -] - -{ #category : #generated } -CSReturnStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSReturnStatementNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSReturnStatementNode >> ignoredTokenVariables [ - ^ #(#semicolonToken) -] - -{ #category : #generated } -CSReturnStatementNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -CSReturnStatementNode >> returnToken [ - ^ returnToken -] - -{ #category : #generated } -CSReturnStatementNode >> returnToken: aSmaCCToken [ - returnToken := aSmaCCToken -] - -{ #category : #generated } -CSReturnStatementNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -CSReturnStatementNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] - -{ #category : #generated } -CSReturnStatementNode >> tokenVariables [ - ^ #(#returnToken) -] diff --git a/src/SmaCC_CSharp/CSSetAccessorDeclarationNode.class.st b/src/SmaCC_CSharp/CSSetAccessorDeclarationNode.class.st deleted file mode 100644 index ca5a5913d..000000000 --- a/src/SmaCC_CSharp/CSSetAccessorDeclarationNode.class.st +++ /dev/null @@ -1,105 +0,0 @@ -Class { - #name : #CSSetAccessorDeclarationNode, - #superclass : #CSProgramNode, - #instVars : [ - '_attributes', - 'modifiers', - 'setToken', - 'body', - 'semicolonToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSSetAccessorDeclarationNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSSetAccessorDeclarationNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSSetAccessorDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSetAccessorDeclaration: self -] - -{ #category : #generated } -CSSetAccessorDeclarationNode >> body [ - ^ body -] - -{ #category : #generated } -CSSetAccessorDeclarationNode >> body: aCSBlockStatementNode [ - self body notNil - ifTrue: [ self body parent: nil ]. - body := aCSBlockStatementNode. - self body notNil - ifTrue: [ self body parent: self ] -] - -{ #category : #generated } -CSSetAccessorDeclarationNode >> compositeNodeVariables [ - ^ #(#_attributes) -] - -{ #category : #generated } -CSSetAccessorDeclarationNode >> compositeTokenVariables [ - ^ #(#modifiers) -] - -{ #category : #generated } -CSSetAccessorDeclarationNode >> ignoredTokenVariables [ - ^ #(#semicolonToken) -] - -{ #category : #'generated-initialize-release' } -CSSetAccessorDeclarationNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. - modifiers := OrderedCollection new: 2. -] - -{ #category : #generated } -CSSetAccessorDeclarationNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -CSSetAccessorDeclarationNode >> modifiers: anOrderedCollection [ - modifiers := anOrderedCollection -] - -{ #category : #generated } -CSSetAccessorDeclarationNode >> nodeVariables [ - ^ #(#body) -] - -{ #category : #generated } -CSSetAccessorDeclarationNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -CSSetAccessorDeclarationNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] - -{ #category : #generated } -CSSetAccessorDeclarationNode >> setToken [ - ^ setToken -] - -{ #category : #generated } -CSSetAccessorDeclarationNode >> setToken: aSmaCCToken [ - setToken := aSmaCCToken -] - -{ #category : #generated } -CSSetAccessorDeclarationNode >> tokenVariables [ - ^ #(#setToken) -] diff --git a/src/SmaCC_CSharp/CSSimpleNameNode.class.st b/src/SmaCC_CSharp/CSSimpleNameNode.class.st deleted file mode 100644 index baf5cf01c..000000000 --- a/src/SmaCC_CSharp/CSSimpleNameNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #CSSimpleNameNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'identifierToken', - 'typeArguments' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSSimpleNameNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSimpleName: self -] - -{ #category : #generated } -CSSimpleNameNode >> identifierToken [ - ^ identifierToken -] - -{ #category : #generated } -CSSimpleNameNode >> identifierToken: aSmaCCToken [ - identifierToken := aSmaCCToken -] - -{ #category : #generated } -CSSimpleNameNode >> nodeVariables [ - ^ #(#typeArguments) -] - -{ #category : #generated } -CSSimpleNameNode >> tokenVariables [ - ^ #(#identifierToken) -] - -{ #category : #generated } -CSSimpleNameNode >> typeArguments [ - ^ typeArguments -] - -{ #category : #generated } -CSSimpleNameNode >> typeArguments: aCSTypeArgumentListNode [ - self typeArguments notNil - ifTrue: [ self typeArguments parent: nil ]. - typeArguments := aCSTypeArgumentListNode. - self typeArguments notNil - ifTrue: [ self typeArguments parent: self ] -] diff --git a/src/SmaCC_CSharp/CSSimpleTypeNode.class.st b/src/SmaCC_CSharp/CSSimpleTypeNode.class.st deleted file mode 100644 index 0ee909cc1..000000000 --- a/src/SmaCC_CSharp/CSSimpleTypeNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #CSSimpleTypeNode, - #superclass : #CSTypeNode, - #instVars : [ - 'token' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSSimpleTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSimpleType: self -] - -{ #category : #generated } -CSSimpleTypeNode >> token [ - ^ token -] - -{ #category : #generated } -CSSimpleTypeNode >> token: aSmaCCToken [ - token := aSmaCCToken -] - -{ #category : #generated } -CSSimpleTypeNode >> tokenVariables [ - ^ #(#token) -] diff --git a/src/SmaCC_CSharp/CSSizeofExpressionNode.class.st b/src/SmaCC_CSharp/CSSizeofExpressionNode.class.st deleted file mode 100644 index a454e2a69..000000000 --- a/src/SmaCC_CSharp/CSSizeofExpressionNode.class.st +++ /dev/null @@ -1,70 +0,0 @@ -Class { - #name : #CSSizeofExpressionNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'sizeofToken', - 'leftParenToken', - 'type', - 'rightParenToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSSizeofExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSizeofExpression: self -] - -{ #category : #generated } -CSSizeofExpressionNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSSizeofExpressionNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSSizeofExpressionNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -CSSizeofExpressionNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSSizeofExpressionNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSSizeofExpressionNode >> sizeofToken [ - ^ sizeofToken -] - -{ #category : #generated } -CSSizeofExpressionNode >> sizeofToken: aSmaCCToken [ - sizeofToken := aSmaCCToken -] - -{ #category : #generated } -CSSizeofExpressionNode >> tokenVariables [ - ^ #(#sizeofToken #leftParenToken #rightParenToken) -] - -{ #category : #generated } -CSSizeofExpressionNode >> type [ - ^ type -] - -{ #category : #generated } -CSSizeofExpressionNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSStackallocInitializerNode.class.st b/src/SmaCC_CSharp/CSStackallocInitializerNode.class.st deleted file mode 100644 index adcad4e1a..000000000 --- a/src/SmaCC_CSharp/CSStackallocInitializerNode.class.st +++ /dev/null @@ -1,85 +0,0 @@ -Class { - #name : #CSStackallocInitializerNode, - #superclass : #CSProgramNode, - #instVars : [ - 'stackallocToken', - 'type', - 'leftBracketToken', - 'expression', - 'rightBracketToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSStackallocInitializerNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitStackallocInitializer: self -] - -{ #category : #generated } -CSStackallocInitializerNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSStackallocInitializerNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSStackallocInitializerNode >> leftBracketToken [ - ^ leftBracketToken -] - -{ #category : #generated } -CSStackallocInitializerNode >> leftBracketToken: aSmaCCToken [ - leftBracketToken := aSmaCCToken -] - -{ #category : #generated } -CSStackallocInitializerNode >> nodeVariables [ - ^ #(#type #expression) -] - -{ #category : #generated } -CSStackallocInitializerNode >> rightBracketToken [ - ^ rightBracketToken -] - -{ #category : #generated } -CSStackallocInitializerNode >> rightBracketToken: aSmaCCToken [ - rightBracketToken := aSmaCCToken -] - -{ #category : #generated } -CSStackallocInitializerNode >> stackallocToken [ - ^ stackallocToken -] - -{ #category : #generated } -CSStackallocInitializerNode >> stackallocToken: aSmaCCToken [ - stackallocToken := aSmaCCToken -] - -{ #category : #generated } -CSStackallocInitializerNode >> tokenVariables [ - ^ #(#stackallocToken #leftBracketToken #rightBracketToken) -] - -{ #category : #generated } -CSStackallocInitializerNode >> type [ - ^ type -] - -{ #category : #generated } -CSStackallocInitializerNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSStatementListNode.class.st b/src/SmaCC_CSharp/CSStatementListNode.class.st deleted file mode 100644 index b401d246a..000000000 --- a/src/SmaCC_CSharp/CSStatementListNode.class.st +++ /dev/null @@ -1,53 +0,0 @@ -Class { - #name : #CSStatementListNode, - #superclass : #CSProgramNode, - #instVars : [ - 'expressions', - 'commaTokens' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSStatementListNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitStatementList: self -] - -{ #category : #generated } -CSStatementListNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -CSStatementListNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -CSStatementListNode >> compositeNodeVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -CSStatementListNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -CSStatementListNode >> expressions: anOrderedCollection [ - self setParents: self expressions to: nil. - expressions := anOrderedCollection. - self setParents: self expressions to: self -] - -{ #category : #generated } -CSStatementListNode >> ignoredCompositeTokenVariables [ - ^ #(#commaTokens) -] - -{ #category : #'generated-initialize-release' } -CSStatementListNode >> initialize [ - super initialize. - expressions := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] diff --git a/src/SmaCC_CSharp/CSStatementNode.class.st b/src/SmaCC_CSharp/CSStatementNode.class.st deleted file mode 100644 index 8d6ac87b9..000000000 --- a/src/SmaCC_CSharp/CSStatementNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #CSStatementNode, - #superclass : #CSProgramNode, - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitStatement: self -] diff --git a/src/SmaCC_CSharp/CSStaticConstructorDeclarationNode.class.st b/src/SmaCC_CSharp/CSStaticConstructorDeclarationNode.class.st deleted file mode 100644 index 80c320622..000000000 --- a/src/SmaCC_CSharp/CSStaticConstructorDeclarationNode.class.st +++ /dev/null @@ -1,149 +0,0 @@ -Class { - #name : #CSStaticConstructorDeclarationNode, - #superclass : #CSDeclarationNode, - #instVars : [ - '_attributes', - 'modifiers', - 'staticToken', - 'unsafeToken', - 'identifierToken', - 'leftParenToken', - 'rightParenToken', - 'block', - 'semicolonToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSStaticConstructorDeclarationNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSStaticConstructorDeclarationNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSStaticConstructorDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitStaticConstructorDeclaration: self -] - -{ #category : #generated } -CSStaticConstructorDeclarationNode >> block [ - ^ block -] - -{ #category : #generated } -CSStaticConstructorDeclarationNode >> block: aCSBlockStatementNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aCSBlockStatementNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -CSStaticConstructorDeclarationNode >> compositeNodeVariables [ - ^ #(#_attributes) -] - -{ #category : #generated } -CSStaticConstructorDeclarationNode >> compositeTokenVariables [ - ^ #(#modifiers) -] - -{ #category : #generated } -CSStaticConstructorDeclarationNode >> identifierToken [ - ^ identifierToken -] - -{ #category : #generated } -CSStaticConstructorDeclarationNode >> identifierToken: aSmaCCToken [ - identifierToken := aSmaCCToken -] - -{ #category : #generated } -CSStaticConstructorDeclarationNode >> ignoredTokenVariables [ - ^ #(#semicolonToken) -] - -{ #category : #'generated-initialize-release' } -CSStaticConstructorDeclarationNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. - modifiers := OrderedCollection new: 2. -] - -{ #category : #generated } -CSStaticConstructorDeclarationNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSStaticConstructorDeclarationNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSStaticConstructorDeclarationNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -CSStaticConstructorDeclarationNode >> modifiers: anOrderedCollection [ - modifiers := anOrderedCollection -] - -{ #category : #generated } -CSStaticConstructorDeclarationNode >> nodeVariables [ - ^ #(#block) -] - -{ #category : #generated } -CSStaticConstructorDeclarationNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSStaticConstructorDeclarationNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSStaticConstructorDeclarationNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -CSStaticConstructorDeclarationNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] - -{ #category : #generated } -CSStaticConstructorDeclarationNode >> staticToken [ - ^ staticToken -] - -{ #category : #generated } -CSStaticConstructorDeclarationNode >> staticToken: aSmaCCToken [ - staticToken := aSmaCCToken -] - -{ #category : #generated } -CSStaticConstructorDeclarationNode >> tokenVariables [ - ^ #(#staticToken #unsafeToken #identifierToken #leftParenToken #rightParenToken) -] - -{ #category : #generated } -CSStaticConstructorDeclarationNode >> unsafeToken [ - ^ unsafeToken -] - -{ #category : #generated } -CSStaticConstructorDeclarationNode >> unsafeToken: aSmaCCToken [ - unsafeToken := aSmaCCToken -] diff --git a/src/SmaCC_CSharp/CSStringLiteralExpressionNode.class.st b/src/SmaCC_CSharp/CSStringLiteralExpressionNode.class.st deleted file mode 100644 index 1dc88cd5f..000000000 --- a/src/SmaCC_CSharp/CSStringLiteralExpressionNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #CSStringLiteralExpressionNode, - #superclass : #CSLiteralExpressionNode, - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSStringLiteralExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitStringLiteralExpression: self -] diff --git a/src/SmaCC_CSharp/CSStructDeclarationNode.class.st b/src/SmaCC_CSharp/CSStructDeclarationNode.class.st deleted file mode 100644 index c25f44c50..000000000 --- a/src/SmaCC_CSharp/CSStructDeclarationNode.class.st +++ /dev/null @@ -1,209 +0,0 @@ -Class { - #name : #CSStructDeclarationNode, - #superclass : #CSDeclarationNode, - #instVars : [ - '_attributes', - 'modifiers', - 'partialToken', - 'structToken', - 'identifierToken', - 'typeParameters', - 'colonToken', - 'supertypes', - 'commas', - 'constraintClauses', - 'leftBraceToken', - 'declarations', - 'rightBraceToken', - 'semicolon' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSStructDeclarationNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSStructDeclarationNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSStructDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitStructDeclaration: self -] - -{ #category : #generated } -CSStructDeclarationNode >> colonToken [ - ^ colonToken -] - -{ #category : #generated } -CSStructDeclarationNode >> colonToken: aSmaCCToken [ - colonToken := aSmaCCToken -] - -{ #category : #generated } -CSStructDeclarationNode >> commas [ - ^ commas -] - -{ #category : #generated } -CSStructDeclarationNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -CSStructDeclarationNode >> compositeNodeVariables [ - ^ #(#_attributes #supertypes #constraintClauses #declarations) -] - -{ #category : #generated } -CSStructDeclarationNode >> compositeTokenVariables [ - ^ #(#modifiers #commas) -] - -{ #category : #generated } -CSStructDeclarationNode >> constraintClauses [ - ^ constraintClauses -] - -{ #category : #generated } -CSStructDeclarationNode >> constraintClauses: anOrderedCollection [ - self setParents: self constraintClauses to: nil. - constraintClauses := anOrderedCollection. - self setParents: self constraintClauses to: self -] - -{ #category : #generated } -CSStructDeclarationNode >> declarations [ - ^ declarations -] - -{ #category : #generated } -CSStructDeclarationNode >> declarations: anOrderedCollection [ - self setParents: self declarations to: nil. - declarations := anOrderedCollection. - self setParents: self declarations to: self -] - -{ #category : #generated } -CSStructDeclarationNode >> identifierToken [ - ^ identifierToken -] - -{ #category : #generated } -CSStructDeclarationNode >> identifierToken: aSmaCCToken [ - identifierToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -CSStructDeclarationNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. - modifiers := OrderedCollection new: 2. - supertypes := OrderedCollection new: 2. - commas := OrderedCollection new: 2. - constraintClauses := OrderedCollection new: 2. - declarations := OrderedCollection new: 2. -] - -{ #category : #generated } -CSStructDeclarationNode >> leftBraceToken [ - ^ leftBraceToken -] - -{ #category : #generated } -CSStructDeclarationNode >> leftBraceToken: aSmaCCToken [ - leftBraceToken := aSmaCCToken -] - -{ #category : #generated } -CSStructDeclarationNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -CSStructDeclarationNode >> modifiers: anOrderedCollection [ - modifiers := anOrderedCollection -] - -{ #category : #generated } -CSStructDeclarationNode >> nodeVariables [ - ^ #(#typeParameters) -] - -{ #category : #generated } -CSStructDeclarationNode >> partialToken [ - ^ partialToken -] - -{ #category : #generated } -CSStructDeclarationNode >> partialToken: aSmaCCToken [ - partialToken := aSmaCCToken -] - -{ #category : #generated } -CSStructDeclarationNode >> rightBraceToken [ - ^ rightBraceToken -] - -{ #category : #generated } -CSStructDeclarationNode >> rightBraceToken: aSmaCCToken [ - rightBraceToken := aSmaCCToken -] - -{ #category : #generated } -CSStructDeclarationNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -CSStructDeclarationNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -CSStructDeclarationNode >> structToken [ - ^ structToken -] - -{ #category : #generated } -CSStructDeclarationNode >> structToken: aSmaCCToken [ - structToken := aSmaCCToken -] - -{ #category : #generated } -CSStructDeclarationNode >> supertypes [ - ^ supertypes -] - -{ #category : #generated } -CSStructDeclarationNode >> supertypes: anOrderedCollection [ - self setParents: self supertypes to: nil. - supertypes := anOrderedCollection. - self setParents: self supertypes to: self -] - -{ #category : #generated } -CSStructDeclarationNode >> tokenVariables [ - ^ #(#partialToken #structToken #identifierToken #colonToken #leftBraceToken #rightBraceToken #semicolon) -] - -{ #category : #generated } -CSStructDeclarationNode >> typeParameters [ - ^ typeParameters -] - -{ #category : #generated } -CSStructDeclarationNode >> typeParameters: aCSTypeParameterListNode [ - self typeParameters notNil - ifTrue: [ self typeParameters parent: nil ]. - typeParameters := aCSTypeParameterListNode. - self typeParameters notNil - ifTrue: [ self typeParameters parent: self ] -] diff --git a/src/SmaCC_CSharp/CSSwitchLabelNode.class.st b/src/SmaCC_CSharp/CSSwitchLabelNode.class.st deleted file mode 100644 index dc4b46809..000000000 --- a/src/SmaCC_CSharp/CSSwitchLabelNode.class.st +++ /dev/null @@ -1,70 +0,0 @@ -Class { - #name : #CSSwitchLabelNode, - #superclass : #CSProgramNode, - #instVars : [ - 'caseToken', - 'expression', - 'colonToken', - 'defaultToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSSwitchLabelNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSwitchLabel: self -] - -{ #category : #generated } -CSSwitchLabelNode >> caseToken [ - ^ caseToken -] - -{ #category : #generated } -CSSwitchLabelNode >> caseToken: aSmaCCToken [ - caseToken := aSmaCCToken -] - -{ #category : #generated } -CSSwitchLabelNode >> colonToken [ - ^ colonToken -] - -{ #category : #generated } -CSSwitchLabelNode >> colonToken: aSmaCCToken [ - colonToken := aSmaCCToken -] - -{ #category : #generated } -CSSwitchLabelNode >> defaultToken [ - ^ defaultToken -] - -{ #category : #generated } -CSSwitchLabelNode >> defaultToken: aSmaCCToken [ - defaultToken := aSmaCCToken -] - -{ #category : #generated } -CSSwitchLabelNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSSwitchLabelNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSSwitchLabelNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -CSSwitchLabelNode >> tokenVariables [ - ^ #(#caseToken #colonToken #defaultToken) -] diff --git a/src/SmaCC_CSharp/CSSwitchSectionNode.class.st b/src/SmaCC_CSharp/CSSwitchSectionNode.class.st deleted file mode 100644 index a47f5c3a2..000000000 --- a/src/SmaCC_CSharp/CSSwitchSectionNode.class.st +++ /dev/null @@ -1,50 +0,0 @@ -Class { - #name : #CSSwitchSectionNode, - #superclass : #CSProgramNode, - #instVars : [ - 'labels', - 'statements' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSSwitchSectionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSwitchSection: self -] - -{ #category : #generated } -CSSwitchSectionNode >> compositeNodeVariables [ - ^ #(#labels #statements) -] - -{ #category : #'generated-initialize-release' } -CSSwitchSectionNode >> initialize [ - super initialize. - labels := OrderedCollection new: 2. - statements := OrderedCollection new: 2. -] - -{ #category : #generated } -CSSwitchSectionNode >> labels [ - ^ labels -] - -{ #category : #generated } -CSSwitchSectionNode >> labels: anOrderedCollection [ - self setParents: self labels to: nil. - labels := anOrderedCollection. - self setParents: self labels to: self -] - -{ #category : #generated } -CSSwitchSectionNode >> statements [ - ^ statements -] - -{ #category : #generated } -CSSwitchSectionNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] diff --git a/src/SmaCC_CSharp/CSSwitchStatementNode.class.st b/src/SmaCC_CSharp/CSSwitchStatementNode.class.st deleted file mode 100644 index 116681d0d..000000000 --- a/src/SmaCC_CSharp/CSSwitchStatementNode.class.st +++ /dev/null @@ -1,116 +0,0 @@ -Class { - #name : #CSSwitchStatementNode, - #superclass : #CSStatementNode, - #instVars : [ - 'switchToken', - 'leftParenToken', - 'expression', - 'rightParenToken', - 'leftBraceToken', - 'sections', - 'rightBraceToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSSwitchStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSwitchStatement: self -] - -{ #category : #generated } -CSSwitchStatementNode >> compositeNodeVariables [ - ^ #(#sections) -] - -{ #category : #generated } -CSSwitchStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSSwitchStatementNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #'generated-initialize-release' } -CSSwitchStatementNode >> initialize [ - super initialize. - sections := OrderedCollection new: 2. -] - -{ #category : #generated } -CSSwitchStatementNode >> leftBraceToken [ - ^ leftBraceToken -] - -{ #category : #generated } -CSSwitchStatementNode >> leftBraceToken: aSmaCCToken [ - leftBraceToken := aSmaCCToken -] - -{ #category : #generated } -CSSwitchStatementNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSSwitchStatementNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSSwitchStatementNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -CSSwitchStatementNode >> rightBraceToken [ - ^ rightBraceToken -] - -{ #category : #generated } -CSSwitchStatementNode >> rightBraceToken: aSmaCCToken [ - rightBraceToken := aSmaCCToken -] - -{ #category : #generated } -CSSwitchStatementNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSSwitchStatementNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSSwitchStatementNode >> sections [ - ^ sections -] - -{ #category : #generated } -CSSwitchStatementNode >> sections: anOrderedCollection [ - self setParents: self sections to: nil. - sections := anOrderedCollection. - self setParents: self sections to: self -] - -{ #category : #generated } -CSSwitchStatementNode >> switchToken [ - ^ switchToken -] - -{ #category : #generated } -CSSwitchStatementNode >> switchToken: aSmaCCToken [ - switchToken := aSmaCCToken -] - -{ #category : #generated } -CSSwitchStatementNode >> tokenVariables [ - ^ #(#switchToken #leftParenToken #rightParenToken #leftBraceToken #rightBraceToken) -] diff --git a/src/SmaCC_CSharp/CSThisAccessNode.class.st b/src/SmaCC_CSharp/CSThisAccessNode.class.st deleted file mode 100644 index 92160c885..000000000 --- a/src/SmaCC_CSharp/CSThisAccessNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #CSThisAccessNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'thisToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSThisAccessNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitThisAccess: self -] - -{ #category : #generated } -CSThisAccessNode >> thisToken [ - ^ thisToken -] - -{ #category : #generated } -CSThisAccessNode >> thisToken: aSmaCCToken [ - thisToken := aSmaCCToken -] - -{ #category : #generated } -CSThisAccessNode >> tokenVariables [ - ^ #(#thisToken) -] diff --git a/src/SmaCC_CSharp/CSThrowStatementNode.class.st b/src/SmaCC_CSharp/CSThrowStatementNode.class.st deleted file mode 100644 index 49eea8ded..000000000 --- a/src/SmaCC_CSharp/CSThrowStatementNode.class.st +++ /dev/null @@ -1,64 +0,0 @@ -Class { - #name : #CSThrowStatementNode, - #superclass : #CSStatementNode, - #instVars : [ - 'throwToken', - 'expression', - 'semicolonToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSThrowStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitThrowStatement: self -] - -{ #category : #generated } -CSThrowStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSThrowStatementNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSThrowStatementNode >> ignoredTokenVariables [ - ^ #(#semicolonToken) -] - -{ #category : #generated } -CSThrowStatementNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -CSThrowStatementNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -CSThrowStatementNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] - -{ #category : #generated } -CSThrowStatementNode >> throwToken [ - ^ throwToken -] - -{ #category : #generated } -CSThrowStatementNode >> throwToken: aSmaCCToken [ - throwToken := aSmaCCToken -] - -{ #category : #generated } -CSThrowStatementNode >> tokenVariables [ - ^ #(#throwToken) -] diff --git a/src/SmaCC_CSharp/CSTryStatementNode.class.st b/src/SmaCC_CSharp/CSTryStatementNode.class.st deleted file mode 100644 index dde90ef23..000000000 --- a/src/SmaCC_CSharp/CSTryStatementNode.class.st +++ /dev/null @@ -1,87 +0,0 @@ -Class { - #name : #CSTryStatementNode, - #superclass : #CSStatementNode, - #instVars : [ - 'tryToken', - 'block', - 'clauses', - 'finally' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSTryStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitTryStatement: self -] - -{ #category : #generated } -CSTryStatementNode >> block [ - ^ block -] - -{ #category : #generated } -CSTryStatementNode >> block: aCSBlockStatementNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aCSBlockStatementNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -CSTryStatementNode >> clauses [ - ^ clauses -] - -{ #category : #generated } -CSTryStatementNode >> clauses: anOrderedCollection [ - self setParents: self clauses to: nil. - clauses := anOrderedCollection. - self setParents: self clauses to: self -] - -{ #category : #generated } -CSTryStatementNode >> compositeNodeVariables [ - ^ #(#clauses) -] - -{ #category : #generated } -CSTryStatementNode >> finally [ - ^ finally -] - -{ #category : #generated } -CSTryStatementNode >> finally: aCSFinallyClauseNode [ - self finally notNil - ifTrue: [ self finally parent: nil ]. - finally := aCSFinallyClauseNode. - self finally notNil - ifTrue: [ self finally parent: self ] -] - -{ #category : #'generated-initialize-release' } -CSTryStatementNode >> initialize [ - super initialize. - clauses := OrderedCollection new: 2. -] - -{ #category : #generated } -CSTryStatementNode >> nodeVariables [ - ^ #(#block #finally) -] - -{ #category : #generated } -CSTryStatementNode >> tokenVariables [ - ^ #(#tryToken) -] - -{ #category : #generated } -CSTryStatementNode >> tryToken [ - ^ tryToken -] - -{ #category : #generated } -CSTryStatementNode >> tryToken: aSmaCCToken [ - tryToken := aSmaCCToken -] diff --git a/src/SmaCC_CSharp/CSTypeArgumentListNode.class.st b/src/SmaCC_CSharp/CSTypeArgumentListNode.class.st deleted file mode 100644 index c1bc58f85..000000000 --- a/src/SmaCC_CSharp/CSTypeArgumentListNode.class.st +++ /dev/null @@ -1,80 +0,0 @@ -Class { - #name : #CSTypeArgumentListNode, - #superclass : #CSProgramNode, - #instVars : [ - 'lessThanToken', - 'types', - 'commaTokens', - 'greaterThanToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSTypeArgumentListNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitTypeArgumentList: self -] - -{ #category : #generated } -CSTypeArgumentListNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -CSTypeArgumentListNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -CSTypeArgumentListNode >> compositeNodeVariables [ - ^ #(#types) -] - -{ #category : #generated } -CSTypeArgumentListNode >> greaterThanToken [ - ^ greaterThanToken -] - -{ #category : #generated } -CSTypeArgumentListNode >> greaterThanToken: aSmaCCToken [ - greaterThanToken := aSmaCCToken -] - -{ #category : #generated } -CSTypeArgumentListNode >> ignoredCompositeTokenVariables [ - ^ #(#commaTokens) -] - -{ #category : #'generated-initialize-release' } -CSTypeArgumentListNode >> initialize [ - super initialize. - types := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -CSTypeArgumentListNode >> lessThanToken [ - ^ lessThanToken -] - -{ #category : #generated } -CSTypeArgumentListNode >> lessThanToken: aSmaCCToken [ - lessThanToken := aSmaCCToken -] - -{ #category : #generated } -CSTypeArgumentListNode >> tokenVariables [ - ^ #(#lessThanToken #greaterThanToken) -] - -{ #category : #generated } -CSTypeArgumentListNode >> types [ - ^ types -] - -{ #category : #generated } -CSTypeArgumentListNode >> types: anOrderedCollection [ - self setParents: self types to: nil. - types := anOrderedCollection. - self setParents: self types to: self -] diff --git a/src/SmaCC_CSharp/CSTypeConstraintNode.class.st b/src/SmaCC_CSharp/CSTypeConstraintNode.class.st deleted file mode 100644 index 13445baca..000000000 --- a/src/SmaCC_CSharp/CSTypeConstraintNode.class.st +++ /dev/null @@ -1,32 +0,0 @@ -Class { - #name : #CSTypeConstraintNode, - #superclass : #CSProgramNode, - #instVars : [ - 'type' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSTypeConstraintNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitTypeConstraint: self -] - -{ #category : #generated } -CSTypeConstraintNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -CSTypeConstraintNode >> type [ - ^ type -] - -{ #category : #generated } -CSTypeConstraintNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSTypeExpressionNode.class.st b/src/SmaCC_CSharp/CSTypeExpressionNode.class.st deleted file mode 100644 index 47b2bfcb1..000000000 --- a/src/SmaCC_CSharp/CSTypeExpressionNode.class.st +++ /dev/null @@ -1,32 +0,0 @@ -Class { - #name : #CSTypeExpressionNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'type' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSTypeExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitTypeExpression: self -] - -{ #category : #generated } -CSTypeExpressionNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -CSTypeExpressionNode >> type [ - ^ type -] - -{ #category : #generated } -CSTypeExpressionNode >> type: aCSTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_CSharp/CSTypeNameNode.class.st b/src/SmaCC_CSharp/CSTypeNameNode.class.st deleted file mode 100644 index 077321595..000000000 --- a/src/SmaCC_CSharp/CSTypeNameNode.class.st +++ /dev/null @@ -1,74 +0,0 @@ -Class { - #name : #CSTypeNameNode, - #superclass : #CSTypeNode, - #instVars : [ - 'name', - 'typeArguments', - 'namespace', - 'periodToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSTypeNameNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitTypeName: self -] - -{ #category : #generated } -CSTypeNameNode >> name [ - ^ name -] - -{ #category : #generated } -CSTypeNameNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -CSTypeNameNode >> namespace [ - ^ namespace -] - -{ #category : #generated } -CSTypeNameNode >> namespace: aCSTypeNode [ - self namespace notNil - ifTrue: [ self namespace parent: nil ]. - namespace := aCSTypeNode. - self namespace notNil - ifTrue: [ self namespace parent: self ] -] - -{ #category : #generated } -CSTypeNameNode >> nodeVariables [ - ^ #(#typeArguments #namespace) -] - -{ #category : #generated } -CSTypeNameNode >> periodToken [ - ^ periodToken -] - -{ #category : #generated } -CSTypeNameNode >> periodToken: aSmaCCToken [ - periodToken := aSmaCCToken -] - -{ #category : #generated } -CSTypeNameNode >> tokenVariables [ - ^ #(#name #periodToken) -] - -{ #category : #generated } -CSTypeNameNode >> typeArguments [ - ^ typeArguments -] - -{ #category : #generated } -CSTypeNameNode >> typeArguments: aCSTypeArgumentListNode [ - self typeArguments notNil - ifTrue: [ self typeArguments parent: nil ]. - typeArguments := aCSTypeArgumentListNode. - self typeArguments notNil - ifTrue: [ self typeArguments parent: self ] -] diff --git a/src/SmaCC_CSharp/CSTypeNode.class.st b/src/SmaCC_CSharp/CSTypeNode.class.st deleted file mode 100644 index b6a2d7487..000000000 --- a/src/SmaCC_CSharp/CSTypeNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #CSTypeNode, - #superclass : #CSProgramNode, - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitType: self -] diff --git a/src/SmaCC_CSharp/CSTypeParameterConstraintsClauseNode.class.st b/src/SmaCC_CSharp/CSTypeParameterConstraintsClauseNode.class.st deleted file mode 100644 index eb6170cb4..000000000 --- a/src/SmaCC_CSharp/CSTypeParameterConstraintsClauseNode.class.st +++ /dev/null @@ -1,100 +0,0 @@ -Class { - #name : #CSTypeParameterConstraintsClauseNode, - #superclass : #CSProgramNode, - #instVars : [ - 'whereToken', - 'parameter', - 'colon', - 'constraints', - 'commaTokens' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSTypeParameterConstraintsClauseNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitTypeParameterConstraintsClause: self -] - -{ #category : #generated } -CSTypeParameterConstraintsClauseNode >> colon [ - ^ colon -] - -{ #category : #generated } -CSTypeParameterConstraintsClauseNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -CSTypeParameterConstraintsClauseNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -CSTypeParameterConstraintsClauseNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -CSTypeParameterConstraintsClauseNode >> compositeNodeVariables [ - ^ #(#constraints) -] - -{ #category : #generated } -CSTypeParameterConstraintsClauseNode >> constraints [ - ^ constraints -] - -{ #category : #generated } -CSTypeParameterConstraintsClauseNode >> constraints: anOrderedCollection [ - self setParents: self constraints to: nil. - constraints := anOrderedCollection. - self setParents: self constraints to: self -] - -{ #category : #generated } -CSTypeParameterConstraintsClauseNode >> ignoredCompositeTokenVariables [ - ^ #(#commaTokens) -] - -{ #category : #'generated-initialize-release' } -CSTypeParameterConstraintsClauseNode >> initialize [ - super initialize. - constraints := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -CSTypeParameterConstraintsClauseNode >> nodeVariables [ - ^ #(#parameter) -] - -{ #category : #generated } -CSTypeParameterConstraintsClauseNode >> parameter [ - ^ parameter -] - -{ #category : #generated } -CSTypeParameterConstraintsClauseNode >> parameter: aCSTypeNameNode [ - self parameter notNil - ifTrue: [ self parameter parent: nil ]. - parameter := aCSTypeNameNode. - self parameter notNil - ifTrue: [ self parameter parent: self ] -] - -{ #category : #generated } -CSTypeParameterConstraintsClauseNode >> tokenVariables [ - ^ #(#whereToken #colon) -] - -{ #category : #generated } -CSTypeParameterConstraintsClauseNode >> whereToken [ - ^ whereToken -] - -{ #category : #generated } -CSTypeParameterConstraintsClauseNode >> whereToken: aSmaCCToken [ - whereToken := aSmaCCToken -] diff --git a/src/SmaCC_CSharp/CSTypeParameterListNode.class.st b/src/SmaCC_CSharp/CSTypeParameterListNode.class.st deleted file mode 100644 index d41f84e88..000000000 --- a/src/SmaCC_CSharp/CSTypeParameterListNode.class.st +++ /dev/null @@ -1,94 +0,0 @@ -Class { - #name : #CSTypeParameterListNode, - #superclass : #CSProgramNode, - #instVars : [ - 'lessThan', - '_attributes', - 'parameters', - 'commaTokens', - 'greaterThan' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSTypeParameterListNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -CSTypeParameterListNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -CSTypeParameterListNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitTypeParameterList: self -] - -{ #category : #generated } -CSTypeParameterListNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -CSTypeParameterListNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -CSTypeParameterListNode >> compositeNodeVariables [ - ^ #(#_attributes #parameters) -] - -{ #category : #generated } -CSTypeParameterListNode >> greaterThan [ - ^ greaterThan -] - -{ #category : #generated } -CSTypeParameterListNode >> greaterThan: aSmaCCToken [ - greaterThan := aSmaCCToken -] - -{ #category : #generated } -CSTypeParameterListNode >> ignoredCompositeTokenVariables [ - ^ #(#commaTokens) -] - -{ #category : #'generated-initialize-release' } -CSTypeParameterListNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. - parameters := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -CSTypeParameterListNode >> lessThan [ - ^ lessThan -] - -{ #category : #generated } -CSTypeParameterListNode >> lessThan: aSmaCCToken [ - lessThan := aSmaCCToken -] - -{ #category : #generated } -CSTypeParameterListNode >> parameters [ - ^ parameters -] - -{ #category : #generated } -CSTypeParameterListNode >> parameters: anOrderedCollection [ - self setParents: self parameters to: nil. - parameters := anOrderedCollection. - self setParents: self parameters to: self -] - -{ #category : #generated } -CSTypeParameterListNode >> tokenVariables [ - ^ #(#lessThan #greaterThan) -] diff --git a/src/SmaCC_CSharp/CSTypeofExpressionNode.class.st b/src/SmaCC_CSharp/CSTypeofExpressionNode.class.st deleted file mode 100644 index 6c8c9ea85..000000000 --- a/src/SmaCC_CSharp/CSTypeofExpressionNode.class.st +++ /dev/null @@ -1,70 +0,0 @@ -Class { - #name : #CSTypeofExpressionNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'typeofToken', - 'leftParenToken', - 'type', - 'rightParenToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSTypeofExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitTypeofExpression: self -] - -{ #category : #generated } -CSTypeofExpressionNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSTypeofExpressionNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSTypeofExpressionNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -CSTypeofExpressionNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSTypeofExpressionNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSTypeofExpressionNode >> tokenVariables [ - ^ #(#typeofToken #leftParenToken #rightParenToken) -] - -{ #category : #generated } -CSTypeofExpressionNode >> type [ - ^ type -] - -{ #category : #generated } -CSTypeofExpressionNode >> type: aCSProgramNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aCSProgramNode. - self type notNil - ifTrue: [ self type parent: self ] -] - -{ #category : #generated } -CSTypeofExpressionNode >> typeofToken [ - ^ typeofToken -] - -{ #category : #generated } -CSTypeofExpressionNode >> typeofToken: aSmaCCToken [ - typeofToken := aSmaCCToken -] diff --git a/src/SmaCC_CSharp/CSUnboundTypeNameNode.class.st b/src/SmaCC_CSharp/CSUnboundTypeNameNode.class.st deleted file mode 100644 index 0e1a4f57b..000000000 --- a/src/SmaCC_CSharp/CSUnboundTypeNameNode.class.st +++ /dev/null @@ -1,98 +0,0 @@ -Class { - #name : #CSUnboundTypeNameNode, - #superclass : #CSProgramNode, - #instVars : [ - 'identifierTokens', - 'lessThanTokens', - 'commas', - 'gtTokens', - 'colonColonToken', - 'periodTokens' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSUnboundTypeNameNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitUnboundTypeName: self -] - -{ #category : #generated } -CSUnboundTypeNameNode >> colonColonToken [ - ^ colonColonToken -] - -{ #category : #generated } -CSUnboundTypeNameNode >> colonColonToken: aSmaCCToken [ - colonColonToken := aSmaCCToken -] - -{ #category : #generated } -CSUnboundTypeNameNode >> commas [ - ^ commas -] - -{ #category : #generated } -CSUnboundTypeNameNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -CSUnboundTypeNameNode >> compositeTokenVariables [ - ^ #(#identifierTokens #lessThanTokens #commas #gtTokens #periodTokens) -] - -{ #category : #generated } -CSUnboundTypeNameNode >> gtTokens [ - ^ gtTokens -] - -{ #category : #generated } -CSUnboundTypeNameNode >> gtTokens: anOrderedCollection [ - gtTokens := anOrderedCollection -] - -{ #category : #generated } -CSUnboundTypeNameNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -CSUnboundTypeNameNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -CSUnboundTypeNameNode >> initialize [ - super initialize. - identifierTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - commas := OrderedCollection new: 2. - gtTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -CSUnboundTypeNameNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -CSUnboundTypeNameNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -CSUnboundTypeNameNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -CSUnboundTypeNameNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -CSUnboundTypeNameNode >> tokenVariables [ - ^ #(#colonColonToken) -] diff --git a/src/SmaCC_CSharp/CSUncheckedExpressionNode.class.st b/src/SmaCC_CSharp/CSUncheckedExpressionNode.class.st deleted file mode 100644 index c72ddee04..000000000 --- a/src/SmaCC_CSharp/CSUncheckedExpressionNode.class.st +++ /dev/null @@ -1,70 +0,0 @@ -Class { - #name : #CSUncheckedExpressionNode, - #superclass : #CSExpressionNode, - #instVars : [ - 'uncheckedToken', - 'leftParenToken', - 'expression', - 'rightParenToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSUncheckedExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitUncheckedExpression: self -] - -{ #category : #generated } -CSUncheckedExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSUncheckedExpressionNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSUncheckedExpressionNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSUncheckedExpressionNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSUncheckedExpressionNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -CSUncheckedExpressionNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSUncheckedExpressionNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSUncheckedExpressionNode >> tokenVariables [ - ^ #(#uncheckedToken #leftParenToken #rightParenToken) -] - -{ #category : #generated } -CSUncheckedExpressionNode >> uncheckedToken [ - ^ uncheckedToken -] - -{ #category : #generated } -CSUncheckedExpressionNode >> uncheckedToken: aSmaCCToken [ - uncheckedToken := aSmaCCToken -] diff --git a/src/SmaCC_CSharp/CSUncheckedStatementNode.class.st b/src/SmaCC_CSharp/CSUncheckedStatementNode.class.st deleted file mode 100644 index d90bf2acf..000000000 --- a/src/SmaCC_CSharp/CSUncheckedStatementNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #CSUncheckedStatementNode, - #superclass : #CSStatementNode, - #instVars : [ - 'uncheckedToken', - 'block' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSUncheckedStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitUncheckedStatement: self -] - -{ #category : #generated } -CSUncheckedStatementNode >> block [ - ^ block -] - -{ #category : #generated } -CSUncheckedStatementNode >> block: aCSBlockStatementNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aCSBlockStatementNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -CSUncheckedStatementNode >> nodeVariables [ - ^ #(#block) -] - -{ #category : #generated } -CSUncheckedStatementNode >> tokenVariables [ - ^ #(#uncheckedToken) -] - -{ #category : #generated } -CSUncheckedStatementNode >> uncheckedToken [ - ^ uncheckedToken -] - -{ #category : #generated } -CSUncheckedStatementNode >> uncheckedToken: aSmaCCToken [ - uncheckedToken := aSmaCCToken -] diff --git a/src/SmaCC_CSharp/CSUnsafeStatementNode.class.st b/src/SmaCC_CSharp/CSUnsafeStatementNode.class.st deleted file mode 100644 index c29d3ba77..000000000 --- a/src/SmaCC_CSharp/CSUnsafeStatementNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #CSUnsafeStatementNode, - #superclass : #CSStatementNode, - #instVars : [ - 'unsafeToken', - 'block' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSUnsafeStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitUnsafeStatement: self -] - -{ #category : #generated } -CSUnsafeStatementNode >> block [ - ^ block -] - -{ #category : #generated } -CSUnsafeStatementNode >> block: aCSBlockStatementNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aCSBlockStatementNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -CSUnsafeStatementNode >> nodeVariables [ - ^ #(#block) -] - -{ #category : #generated } -CSUnsafeStatementNode >> tokenVariables [ - ^ #(#unsafeToken) -] - -{ #category : #generated } -CSUnsafeStatementNode >> unsafeToken [ - ^ unsafeToken -] - -{ #category : #generated } -CSUnsafeStatementNode >> unsafeToken: aSmaCCToken [ - unsafeToken := aSmaCCToken -] diff --git a/src/SmaCC_CSharp/CSUsingAliasDirectiveNode.class.st b/src/SmaCC_CSharp/CSUsingAliasDirectiveNode.class.st deleted file mode 100644 index bc7e4b316..000000000 --- a/src/SmaCC_CSharp/CSUsingAliasDirectiveNode.class.st +++ /dev/null @@ -1,39 +0,0 @@ -Class { - #name : #CSUsingAliasDirectiveNode, - #superclass : #CSUsingDirectiveNode, - #instVars : [ - 'name', - 'equalToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSUsingAliasDirectiveNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitUsingAliasDirective: self -] - -{ #category : #generated } -CSUsingAliasDirectiveNode >> equalToken [ - ^ equalToken -] - -{ #category : #generated } -CSUsingAliasDirectiveNode >> equalToken: aSmaCCToken [ - equalToken := aSmaCCToken -] - -{ #category : #generated } -CSUsingAliasDirectiveNode >> name [ - ^ name -] - -{ #category : #generated } -CSUsingAliasDirectiveNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -CSUsingAliasDirectiveNode >> tokenVariables [ - ^ #(#name #equalToken #usingToken) -] diff --git a/src/SmaCC_CSharp/CSUsingDirectiveNode.class.st b/src/SmaCC_CSharp/CSUsingDirectiveNode.class.st deleted file mode 100644 index 1307f0ff5..000000000 --- a/src/SmaCC_CSharp/CSUsingDirectiveNode.class.st +++ /dev/null @@ -1,64 +0,0 @@ -Class { - #name : #CSUsingDirectiveNode, - #superclass : #CSProgramNode, - #instVars : [ - 'usingToken', - 'namespace', - 'semicolonToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSUsingDirectiveNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitUsingDirective: self -] - -{ #category : #generated } -CSUsingDirectiveNode >> ignoredTokenVariables [ - ^ #(#semicolonToken) -] - -{ #category : #generated } -CSUsingDirectiveNode >> namespace [ - ^ namespace -] - -{ #category : #generated } -CSUsingDirectiveNode >> namespace: aCSTypeNode [ - self namespace notNil - ifTrue: [ self namespace parent: nil ]. - namespace := aCSTypeNode. - self namespace notNil - ifTrue: [ self namespace parent: self ] -] - -{ #category : #generated } -CSUsingDirectiveNode >> nodeVariables [ - ^ #(#namespace) -] - -{ #category : #generated } -CSUsingDirectiveNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -CSUsingDirectiveNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] - -{ #category : #generated } -CSUsingDirectiveNode >> tokenVariables [ - ^ #(#usingToken) -] - -{ #category : #generated } -CSUsingDirectiveNode >> usingToken [ - ^ usingToken -] - -{ #category : #generated } -CSUsingDirectiveNode >> usingToken: aSmaCCToken [ - usingToken := aSmaCCToken -] diff --git a/src/SmaCC_CSharp/CSUsingNamespaceDirectiveNode.class.st b/src/SmaCC_CSharp/CSUsingNamespaceDirectiveNode.class.st deleted file mode 100644 index 19ef062fc..000000000 --- a/src/SmaCC_CSharp/CSUsingNamespaceDirectiveNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #CSUsingNamespaceDirectiveNode, - #superclass : #CSUsingDirectiveNode, - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSUsingNamespaceDirectiveNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitUsingNamespaceDirective: self -] diff --git a/src/SmaCC_CSharp/CSUsingStatementNode.class.st b/src/SmaCC_CSharp/CSUsingStatementNode.class.st deleted file mode 100644 index 8e316cad7..000000000 --- a/src/SmaCC_CSharp/CSUsingStatementNode.class.st +++ /dev/null @@ -1,85 +0,0 @@ -Class { - #name : #CSUsingStatementNode, - #superclass : #CSStatementNode, - #instVars : [ - 'usingToken', - 'leftParenToken', - 'expression', - 'rightParenToken', - 'statement' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSUsingStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitUsingStatement: self -] - -{ #category : #generated } -CSUsingStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSUsingStatementNode >> expression: aCSProgramNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSProgramNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSUsingStatementNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSUsingStatementNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSUsingStatementNode >> nodeVariables [ - ^ #(#expression #statement) -] - -{ #category : #generated } -CSUsingStatementNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSUsingStatementNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSUsingStatementNode >> statement [ - ^ statement -] - -{ #category : #generated } -CSUsingStatementNode >> statement: aCSStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aCSStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -CSUsingStatementNode >> tokenVariables [ - ^ #(#usingToken #leftParenToken #rightParenToken) -] - -{ #category : #generated } -CSUsingStatementNode >> usingToken [ - ^ usingToken -] - -{ #category : #generated } -CSUsingStatementNode >> usingToken: aSmaCCToken [ - usingToken := aSmaCCToken -] diff --git a/src/SmaCC_CSharp/CSUsingStaticDirectiveNode.class.st b/src/SmaCC_CSharp/CSUsingStaticDirectiveNode.class.st deleted file mode 100644 index 6bcca831d..000000000 --- a/src/SmaCC_CSharp/CSUsingStaticDirectiveNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #CSUsingStaticDirectiveNode, - #superclass : #CSUsingDirectiveNode, - #instVars : [ - 'staticToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSUsingStaticDirectiveNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitUsingStaticDirective: self -] - -{ #category : #generated } -CSUsingStaticDirectiveNode >> staticToken [ - ^ staticToken -] - -{ #category : #generated } -CSUsingStaticDirectiveNode >> staticToken: aSmaCCToken [ - staticToken := aSmaCCToken -] - -{ #category : #generated } -CSUsingStaticDirectiveNode >> tokenVariables [ - ^ #(#staticToken #usingToken) -] diff --git a/src/SmaCC_CSharp/CSVarTypeNode.class.st b/src/SmaCC_CSharp/CSVarTypeNode.class.st deleted file mode 100644 index 8ca009a44..000000000 --- a/src/SmaCC_CSharp/CSVarTypeNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #CSVarTypeNode, - #superclass : #CSTypeNode, - #instVars : [ - 'varToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSVarTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitVarType: self -] - -{ #category : #generated } -CSVarTypeNode >> tokenVariables [ - ^ #(#varToken) -] - -{ #category : #generated } -CSVarTypeNode >> varToken [ - ^ varToken -] - -{ #category : #generated } -CSVarTypeNode >> varToken: aSmaCCToken [ - varToken := aSmaCCToken -] diff --git a/src/SmaCC_CSharp/CSVariableDeclaratorNode.class.st b/src/SmaCC_CSharp/CSVariableDeclaratorNode.class.st deleted file mode 100644 index 7edd748fe..000000000 --- a/src/SmaCC_CSharp/CSVariableDeclaratorNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #CSVariableDeclaratorNode, - #superclass : #CSProgramNode, - #instVars : [ - 'identifierToken', - 'equalToken', - 'initializer' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSVariableDeclaratorNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitVariableDeclarator: self -] - -{ #category : #generated } -CSVariableDeclaratorNode >> equalToken [ - ^ equalToken -] - -{ #category : #generated } -CSVariableDeclaratorNode >> equalToken: aSmaCCToken [ - equalToken := aSmaCCToken -] - -{ #category : #generated } -CSVariableDeclaratorNode >> identifierToken [ - ^ identifierToken -] - -{ #category : #generated } -CSVariableDeclaratorNode >> identifierToken: aSmaCCToken [ - identifierToken := aSmaCCToken -] - -{ #category : #generated } -CSVariableDeclaratorNode >> initializer [ - ^ initializer -] - -{ #category : #generated } -CSVariableDeclaratorNode >> initializer: aCSProgramNode [ - self initializer notNil - ifTrue: [ self initializer parent: nil ]. - initializer := aCSProgramNode. - self initializer notNil - ifTrue: [ self initializer parent: self ] -] - -{ #category : #generated } -CSVariableDeclaratorNode >> nodeVariables [ - ^ #(#initializer) -] - -{ #category : #generated } -CSVariableDeclaratorNode >> tokenVariables [ - ^ #(#identifierToken #equalToken) -] diff --git a/src/SmaCC_CSharp/CSVariantTypeParameterListNode.class.st b/src/SmaCC_CSharp/CSVariantTypeParameterListNode.class.st deleted file mode 100644 index 1b469e4cf..000000000 --- a/src/SmaCC_CSharp/CSVariantTypeParameterListNode.class.st +++ /dev/null @@ -1,34 +0,0 @@ -Class { - #name : #CSVariantTypeParameterListNode, - #superclass : #CSTypeParameterListNode, - #instVars : [ - 'annotations' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSVariantTypeParameterListNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitVariantTypeParameterList: self -] - -{ #category : #generated } -CSVariantTypeParameterListNode >> annotations [ - ^ annotations -] - -{ #category : #generated } -CSVariantTypeParameterListNode >> annotations: anOrderedCollection [ - annotations := anOrderedCollection -] - -{ #category : #generated } -CSVariantTypeParameterListNode >> compositeTokenVariables [ - ^ #(#annotations) -] - -{ #category : #'generated-initialize-release' } -CSVariantTypeParameterListNode >> initialize [ - super initialize. - annotations := OrderedCollection new: 2. -] diff --git a/src/SmaCC_CSharp/CSVoidTypeNode.class.st b/src/SmaCC_CSharp/CSVoidTypeNode.class.st deleted file mode 100644 index 83cccc6c6..000000000 --- a/src/SmaCC_CSharp/CSVoidTypeNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #CSVoidTypeNode, - #superclass : #CSTypeNode, - #instVars : [ - 'voidToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSVoidTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitVoidType: self -] - -{ #category : #generated } -CSVoidTypeNode >> tokenVariables [ - ^ #(#voidToken) -] - -{ #category : #generated } -CSVoidTypeNode >> voidToken [ - ^ voidToken -] - -{ #category : #generated } -CSVoidTypeNode >> voidToken: aSmaCCToken [ - voidToken := aSmaCCToken -] diff --git a/src/SmaCC_CSharp/CSWhileStatementNode.class.st b/src/SmaCC_CSharp/CSWhileStatementNode.class.st deleted file mode 100644 index a26cba25f..000000000 --- a/src/SmaCC_CSharp/CSWhileStatementNode.class.st +++ /dev/null @@ -1,85 +0,0 @@ -Class { - #name : #CSWhileStatementNode, - #superclass : #CSStatementNode, - #instVars : [ - 'whileToken', - 'leftParenToken', - 'expression', - 'rightParenToken', - 'statement' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSWhileStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitWhileStatement: self -] - -{ #category : #generated } -CSWhileStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSWhileStatementNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSWhileStatementNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -CSWhileStatementNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -CSWhileStatementNode >> nodeVariables [ - ^ #(#expression #statement) -] - -{ #category : #generated } -CSWhileStatementNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -CSWhileStatementNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -CSWhileStatementNode >> statement [ - ^ statement -] - -{ #category : #generated } -CSWhileStatementNode >> statement: aCSStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aCSStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -CSWhileStatementNode >> tokenVariables [ - ^ #(#whileToken #leftParenToken #rightParenToken) -] - -{ #category : #generated } -CSWhileStatementNode >> whileToken [ - ^ whileToken -] - -{ #category : #generated } -CSWhileStatementNode >> whileToken: aSmaCCToken [ - whileToken := aSmaCCToken -] diff --git a/src/SmaCC_CSharp/CSYieldStatementNode.class.st b/src/SmaCC_CSharp/CSYieldStatementNode.class.st deleted file mode 100644 index 3310a4498..000000000 --- a/src/SmaCC_CSharp/CSYieldStatementNode.class.st +++ /dev/null @@ -1,86 +0,0 @@ -Class { - #name : #CSYieldStatementNode, - #superclass : #CSStatementNode, - #instVars : [ - 'yieldToken', - 'returnToken', - 'expression', - 'semicolonToken', - 'breakToken' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSYieldStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitYieldStatement: self -] - -{ #category : #generated } -CSYieldStatementNode >> breakToken [ - ^ breakToken -] - -{ #category : #generated } -CSYieldStatementNode >> breakToken: aSmaCCToken [ - breakToken := aSmaCCToken -] - -{ #category : #generated } -CSYieldStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -CSYieldStatementNode >> expression: aCSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aCSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -CSYieldStatementNode >> ignoredTokenVariables [ - ^ #(#semicolonToken) -] - -{ #category : #generated } -CSYieldStatementNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -CSYieldStatementNode >> returnToken [ - ^ returnToken -] - -{ #category : #generated } -CSYieldStatementNode >> returnToken: aSmaCCToken [ - returnToken := aSmaCCToken -] - -{ #category : #generated } -CSYieldStatementNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -CSYieldStatementNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] - -{ #category : #generated } -CSYieldStatementNode >> tokenVariables [ - ^ #(#yieldToken #returnToken #breakToken) -] - -{ #category : #generated } -CSYieldStatementNode >> yieldToken [ - ^ yieldToken -] - -{ #category : #generated } -CSYieldStatementNode >> yieldToken: aSmaCCToken [ - yieldToken := aSmaCCToken -] diff --git a/src/SmaCC_CSharp/CSharpParser.class.st b/src/SmaCC_CSharp/CSharpParser.class.st deleted file mode 100644 index 2ece3985e..000000000 --- a/src/SmaCC_CSharp/CSharpParser.class.st +++ /dev/null @@ -1,8612 +0,0 @@ -Class { - #name : #CSharpParser, - #superclass : #SmaCCGLRParser, - #classInstVars : [ - 'keywords' - ], - #category : #'SmaCC_CSharp' -} - -{ #category : #generated } -CSharpParser class >> ambiguousTransitions [ -^#( -#[ 0 66 0 78 0 82] -#[ 0 254 1 2] -#[ 1 34 1 38] -#[ 1 42 1 46 1 50 1 54 1 58] -#[ 1 62 6 13] -#[ 1 142 6 57] -#[ 2 186 2 190] -#[ 0 149 2 194] -#[ 0 157 2 194] -#[ 0 161 2 194] -#[ 0 177 2 194] -#[ 0 193 2 194] -#[ 0 205 2 194] -#[ 0 225 2 194] -#[ 0 233 2 194] -#[ 0 245 2 194] -#[ 0 253 2 194] -#[ 1 1 2 194] -#[ 1 9 2 194] -#[ 1 37 2 194] -#[ 1 41 2 194] -#[ 1 53 2 194] -#[ 1 65 2 194] -#[ 2 194 4 213] -#[ 2 198 5 73] -#[ 0 254 6 1] -#[ 1 134 1 138] -#[ 3 74 3 78 3 82 3 86] -#[ 3 98 7 129] -#[ 0 66 0 78 0 82 3 78] -#[ 3 98 3 102 7 165] -#[ 3 102 7 169] -#[ 3 98 3 102] -#[ 3 74 3 78 3 82 3 86 3 106] -#[ 3 114 8 49] -#[ 3 182 3 186 3 190 3 194 3 198] -#[ 3 182 3 194 3 198] -#[ 3 182 3 186 3 194 3 198] -#[ 3 202 3 206 3 210 3 214 3 218] -#[ 3 202 3 214 3 218] -#[ 3 202 3 206 3 214 3 218] -#[ 3 222 3 226 3 230 3 234 3 238] -#[ 3 222 3 234 3 238] -#[ 3 222 3 226 3 234 3 238] -#[ 3 242 3 246 3 250 3 254 4 2] -#[ 3 242 3 254 4 2] -#[ 3 242 3 246 3 254 4 2] -#[ 4 6 4 10 4 14 4 18 4 22] -#[ 4 6 4 18 4 22] -#[ 4 6 4 10 4 18 4 22] -#[ 4 34 4 38 4 42 4 46] -#[ 4 34 4 42 4 46] -#[ 0 254 1 2 2 202] -#[ 0 254 1 2 6 1] -#[ 1 126 9 229] -#[ 1 130 9 245] -#[ 4 190 4 194] -#[ 4 202 5 145] -#[ 4 210 10 109] -#[ 4 226 4 230] -#[ 4 226 10 153] -#[ 3 178 5 138 5 142 5 146 5 150] -#[ 5 138 5 142 5 150] -#[ 5 138 5 142 5 146 5 150] -#[ 3 178 5 150] -#[ 3 178 5 142 5 146 5 150] -#[ 5 154 5 158 5 162 5 166] -#[ 5 154 5 158 5 166 5 170] -#[ 5 154 5 158 5 162 5 166 5 170 5 174] -#[ 5 154 5 158 5 162 5 166 5 174] -#[ 5 158 5 162 5 166 5 170 5 178] -#[ 5 154 5 158 5 162 5 166 5 170 5 174 5 178] -#[ 5 154 5 158 5 166 5 170 5 174] -#[ 3 182 5 182 5 186 5 190 5 194] -#[ 5 182 5 190 5 194 5 198] -#[ 5 182 5 186 5 190 5 194 5 206] -#[ 3 182 3 186 3 190 3 194 3 198 5 182 5 186 5 190 5 194 5 198 5 202 5 206] -#[ 3 182 3 186 3 190 3 194 3 198 5 182 5 186 5 190 5 194 5 198 5 202] -#[ 5 182 5 186 5 190 5 194] -#[ 3 182 3 194 3 198 5 194] -#[ 3 182 5 186 5 190 5 194 5 198] -#[ 3 182 3 186 3 194 3 198 5 182 5 186 5 190 5 194 5 198 5 206] -#[ 5 182 5 190 5 194 5 198 5 206] -#[ 3 202 5 210 5 214 5 218 5 222] -#[ 5 210 5 218 5 222 5 226] -#[ 5 210 5 214 5 218 5 222] -#[ 3 202 3 206 3 210 3 214 3 218 5 210 5 214 5 218 5 222 5 226 5 230] -#[ 3 202 3 214 3 218 5 222] -#[ 3 202 5 210 5 214 5 222 5 226] -#[ 3 202 3 206 3 214 3 218 5 210 5 214 5 218 5 222 5 226] -#[ 5 234 5 238 5 242 5 246] -#[ 5 234 5 238 5 246] -#[ 5 234 5 238 5 242] -#[ 3 222 5 250 5 254 6 2 6 6] -#[ 5 250 5 254 6 6 6 10] -#[ 5 250 5 254 6 2 6 6 6 18] -#[ 3 222 3 226 3 230 3 234 3 238 5 250 5 254 6 2 6 6 6 10 6 14 6 18] -#[ 3 222 3 226 3 230 3 234 3 238 5 250 5 254 6 2 6 6 6 10 6 14] -#[ 5 250 5 254 6 2 6 6] -#[ 3 222 3 234 3 238 5 254] -#[ 3 222 5 250 5 254 6 2 6 10] -#[ 3 222 3 226 3 234 3 238 5 250 5 254 6 2 6 6 6 10 6 18] -#[ 5 250 5 254 6 6 6 10 6 18] -#[ 3 242 6 22 6 26 6 30 6 34] -#[ 6 26 6 30 6 34 6 38] -#[ 6 22 6 26 6 30 6 34 6 46] -#[ 3 242 3 246 3 250 3 254 4 2 6 22 6 26 6 30 6 34 6 38 6 42 6 46] -#[ 3 242 3 246 3 250 3 254 4 2 6 22 6 26 6 30 6 34 6 38 6 42] -#[ 6 22 6 26 6 30 6 34] -#[ 3 242 3 254 4 2 6 30] -#[ 3 242 6 22 6 26 6 30 6 38] -#[ 3 242 3 246 3 254 4 2 6 22 6 26 6 30 6 34 6 38 6 46] -#[ 6 26 6 30 6 34 6 38 6 46] -#[ 4 6 6 50 6 54 6 58 6 62] -#[ 6 50 6 54 6 58 6 66 6 70] -#[ 6 50 6 54 6 58 6 62 6 66 6 78] -#[ 4 6 4 10 4 14 4 18 4 22 6 50 6 54 6 58 6 62 6 70 6 74 6 78] -#[ 4 6 4 10 4 14 4 18 4 22 6 50 6 54 6 58 6 62 6 70 6 74] -#[ 6 50 6 54 6 58 6 62] -#[ 4 6 4 18 4 22 6 58] -#[ 4 6 4 10 4 14 4 18 4 22 6 50 6 54 6 58 6 62 6 66 6 70 6 74 6 78] -#[ 4 6 6 54 6 58 6 62 6 66 6 70] -#[ 4 6 4 10 4 18 4 22 6 50 6 54 6 58 6 62 6 66 6 70 6 78] -#[ 6 50 6 54 6 58 6 66 6 70 6 78] -#[ 4 26 6 86 6 90 6 94 6 98] -#[ 6 86 6 94 6 98] -#[ 6 86 6 90 6 94 6 98] -#[ 4 26 6 86] -#[ 4 26 6 86 6 90 6 94] -#[ 4 30 6 102 6 106 6 110] -#[ 6 102 6 106 6 114 6 118] -#[ 3 98 6 102 6 106 6 110 6 114 11 133] -#[ 4 30 6 102 6 106 6 110 6 118] -#[ 6 102 6 106 6 110] -#[ 4 30 6 102] -#[ 4 30 6 102 6 106 6 110 6 114 6 118] -#[ 3 102 4 30 6 102 6 106 6 110 6 114 6 118 11 137] -#[ 3 98 3 102 6 102 6 106 6 114 6 118] -#[ 4 34 6 122 6 126 6 130 6 134] -#[ 6 122 6 126 6 130 6 138 6 142] -#[ 6 122 6 126 6 130 6 134 6 138 6 146 6 150] -#[ 4 34 4 38 4 42 4 46 6 122 6 126 6 130 6 134 6 142 6 146] -#[ 4 34 4 38 4 42 4 46 6 122 6 126 6 130 6 134 6 142] -#[ 6 122 6 126 6 130 6 134] -#[ 4 34 4 42 4 46 6 122] -#[ 4 34 4 38 4 42 4 46 6 122 6 126 6 130 6 134 6 138 6 142 6 146] -#[ 4 34 6 122 6 126 6 134 6 138 6 142 6 150] -#[ 6 122 6 126 6 130 6 138 6 142 6 146] -#[ 6 154 6 158 6 162 6 166] -#[ 6 154 6 158 6 162] -#[ 6 154 6 162 6 166] -#[ 3 98 13 13] -#[ 3 102 13 21] -#[ 6 246 8 49] -#[ 1 66 1 74] -#[ 0 254 1 2 7 210] -#[ 0 254 7 210] -#[ 7 54 14 213] -#[ 1 70 8 78] -#[ 1 74 8 78] -#[ 1 70 8 82] -#[ 1 74 8 82] -#[ 8 150 15 73] -#[ 3 98 8 166] -#[ 6 1 10 46] -#[ 0 254 18 61] -#[ 10 174 18 161] -#[ 5 145 10 210] -#[ 11 102 11 106] -#[ 11 114 11 118] -#[ 5 145 12 66] -#[ 2 206 4 102] -#[ 4 102 6 77] -#[ 4 102 6 81] -#[ 4 102 6 85] -#[ 4 102 6 89] -#[ 4 102 6 93] -#[ 4 102 6 97] -#[ 4 102 6 101] -#[ 4 102 6 105] -#[ 4 102 6 109] -#[ 4 102 6 113] -#[ 4 102 6 117] -#[ 0 181 13 58] -#[ 1 46 1 58] -#[ 3 102 23 161] -#[ 3 182 3 186 3 190 3 194 3 198 5 182 5 186 5 190 5 194 5 198 5 202 5 206 14 250] -#[ 3 182 3 186 3 190 3 194 3 198 5 182 5 186 5 190 5 194 5 198 5 202 14 250] -#[ 3 182 3 186 3 194 3 198 5 182 5 186 5 190 5 194 5 198 5 206 14 250] -#[ 3 202 3 206 3 210 3 214 3 218 5 210 5 214 5 218 5 222 5 226 5 230 14 254] -#[ 3 202 3 206 3 214 3 218 5 210 5 214 5 218 5 222 5 226 14 254] -#[ 3 222 3 226 3 230 3 234 3 238 5 250 5 254 6 2 6 6 6 10 6 14 6 18 15 2] -#[ 3 222 3 226 3 230 3 234 3 238 5 250 5 254 6 2 6 6 6 10 6 14 15 2] -#[ 3 222 3 226 3 234 3 238 5 250 5 254 6 2 6 6 6 10 6 18 15 2] -#[ 3 242 3 246 3 250 3 254 4 2 6 22 6 26 6 30 6 34 6 38 6 42 6 46 15 6] -#[ 3 242 3 246 3 250 3 254 4 2 6 22 6 26 6 30 6 34 6 38 6 42 15 6] -#[ 3 242 3 246 3 254 4 2 6 22 6 26 6 30 6 34 6 38 6 46 15 6] -#[ 4 6 4 10 4 14 4 18 4 22 6 50 6 54 6 58 6 62 6 70 6 74 6 78 15 10] -#[ 4 6 4 10 4 14 4 18 4 22 6 50 6 54 6 58 6 62 6 70 6 74 15 10] -#[ 4 6 4 10 4 14 4 18 4 22 6 50 6 54 6 58 6 62 6 66 6 70 6 74 6 78 15 10] -#[ 4 6 4 10 4 18 4 22 6 50 6 54 6 58 6 62 6 66 6 70 6 78 15 10] -#[ 4 34 4 38 4 42 4 46 6 122 6 126 6 130 6 134 6 142 6 146 15 14] -#[ 4 34 4 38 4 42 4 46 6 122 6 126 6 130 6 134 6 142 15 14] -#[ 4 34 4 38 4 42 4 46 6 122 6 126 6 130 6 134 6 138 6 142 6 146 15 14] -#[ 9 26 24 81] - ). -] - -{ #category : #'generated-accessing' } -CSharpParser class >> cacheId [ - ^'2019-04-15T17:16:06.169027-05:00' -] - -{ #category : #generated } -CSharpParser class >> definitionComment [ -"%glr; -%id ; - -%scopes default interpolatedString interpolatedVerbatimString; - -%start compilation_unit namespace_member_declaration statement expression block class_member_declaration; - -%ignore_variables commaToken _leftParen _rightParen semicolonToken; - -%root Program; -%prefix CS; -%suffix Node; - -%annotate_tokens; - -%hierarchy TypeParameterList ( - VariantTypeParameterList -); -%hierarchy UsingDirective ( - UsingAliasDirective - UsingNamespaceDirective - UsingStaticDirective -); -%hierarchy Declaration ( - ClassDeclaration - ConstantDeclaration - ConstructorDeclaration - DelegateDeclaration - DestructorDeclaration - EnumDeclaration - EventDeclaration - FieldDeclaration - FixedSizeBufferDeclaration - IndexerDeclaration - InterfaceDeclaration - InterfaceEventDeclaration - InterfaceIndexerDeclaration - InterfaceMethodDeclaration - InterfacePropertyDeclaration - LocalConstantDeclaration - LocalVariableDeclaration - MethodDeclaration - NamespaceDeclaration - OperatorDeclaration - PropertyDeclaration - StaticConstructorDeclaration - StructDeclaration -); -%hierarchy Statement ( - BlockStatement - BreakStatement - CheckedStatement - ContinueStatement - DeclarationStatement - DoStatement - EmptyStatement - ExpressionStatement - FixedStatement - ForeachStatement - ForStatement - GotoStatement - IfStatement - LabeledStatement - LockStatement - ReturnStatement - SwitchStatement - ThrowStatement - TryStatement - UncheckedStatement - UnsafeStatement - UsingStatement - WhileStatement - YieldStatement -); -%hierarchy Expression ( - AnonymousMethodExpression - AnonymousObjectCreationExpression - ArrayCreationExpression - Assignment - AwaitExpression - BaseAccess - BaseExpression - BinaryExpression - CastExpression - CheckedExpression - ConditionalExpression - DefaultValueExpression - DelegateCreationExpression - ElementAccess - InterpolatedStringExpression - InvocationExpression - LambdaExpression - LiteralExpression - MemberAccess - NamedEntity - NameofExpression - NullConditionalExpression - ObjectCreationExpression - PrefixExpression - PointerElementAccess - PointerMemberAccess - PostExpression - QueryExpression - SimpleName - SizeofExpression - ThisAccess - TypeExpression - TypeofExpression - UncheckedExpression -); - -%hierarchy LiteralExpression ( - BooleanLiteralExpression - IntegerLiteralExpression - RealLiteralExpression - CharacterLiteralExpression - StringLiteralExpression - NullLiteralExpression -); - -%hierarchy ElementAccess ( - NullConditionalElementAccess -); -%hierarchy InvocationExpression ( - NullConditionalInvocationExpression -); -%hierarchy MemberAccess ( - NullConditionalMemberAccess -); -%hierarchy Type ( - ArrayType - NullableType - PointerType - QualifiedAliasMember - SimpleType - TypeName - VarType - VoidType -); - -default - : \> - ; -default - : - ; -default - : \} - ; - - : \r - | \n - | \r\n -# | \x85 -# | \x2028 -# | \x2029 - ; -default - : \/\/ [^\r\n]* - | (\/\* [^\*]* \*+ ([^\/\*] [^\*]* \*+)* \/) - ; - - : ( | _) ( | | _)* - | \@ ( | _) ( | | _)* - ; - - : [Uu] - | [Ll] - | [Uu][Ll] - | [Ll][Uu] - ; -default - : \d+ ? - | 0[Xx] [0-9A-Fa-f]+ ? - ; - - : [Ee] [\+\-]? \d+ - ; - - : [Ff] - | [Dd] - | [Mm] - ; -default - : \d* \. \d+ ? ? - | \d+ ? ? - | \d+ - ; - - : \\\' - | \\\"" - | \\\\ - | \\0 - | \\a - | \\b - | \\f - | \\n - | \\r - | \\t - | \\v - ; - - : \\x [0-9A-Fa-f]{1,4} - ; - - : \\[Uu] ([0-9A-Fa-f]{4,4}){1,2} - ; - - : [^\'\\\n] - | - | - | - ; -default - : \' \' - ; - - : [^\""\\\n] - ; - - : - | - | - | - ; - - : \"" * \"" - ; - - : [^\""\\\n\{] - ; - - : - | - | - | - | \{ \{ - ; -default - : \$\"" * \"" - ; -default - : \$\"" * \{ - ; -interpolatedString - : \} * \"" - ; -interpolatedString - : \} * \{ - ; - - : [^\""] - | \""\"" - ; - - : \@\"" * \"" - ; - - : [^\""\{] - | \""\"" - | \{ \{ - ; -default - : \$\@\"" * \"" - ; -default - : \$\@\"" * \{ - ; -interpolatedVerbatimString - : \} * \"" - ; -interpolatedVerbatimString - : \} * \{ - ; -default - : - | - ; -default - : null - ; -default - : \s+ - | \# [^\r\n]* - ; - - - - : (\` [^\`]* \`)+ - ; - -# B.2 - -# B.2.6 Namespaces -compilation_unit - : _extern_alias_directives _using_directives _global_attributes _namespace_member_declarations {{}} - ; -namespace_declaration - : ""namespace"" qualified_identifier 'identifier' namespace_body _semicolon {{}} - ; -qualified_identifier - : 'name' {{}} - | qualified_identifier ""."" 'name' {{}} - ; -namespace_body - : ""{"" _extern_alias_directives _using_directives _namespace_member_declarations - ; -_extern_alias_directives - : - | extern_alias_directives - ; -extern_alias_directives - : extern_alias_directive 'directive' - | extern_alias_directives extern_alias_directive 'directive' - ; -extern_alias_directive - : ""extern"" ""alias"" "";"" {{}} - ; -_using_directives - : - | using_directives - ; -using_directives - : using_directive 'directive' - | using_directives using_directive 'directive' - ; -using_directive - : using_alias_directive - | using_namespace_directive - | using_static_directive - ; -using_alias_directive - : ""using"" 'name' ""="" namespace_or_type_name 'namespace' "";"" {{}} - ; -using_namespace_directive - : ""using"" namespace_name 'namespace' "";"" {{}} - ; -using_static_directive - : ""using"" ""static"" type_name 'namespace' "";"" {{}} - ; -_namespace_member_declarations - : - | namespace_member_declarations - ; -namespace_member_declarations - : namespace_member_declaration 'declaration' - | namespace_member_declarations namespace_member_declaration 'declaration' - ; -namespace_member_declaration - : namespace_declaration - | type_declaration - ; -type_declaration - : class_declaration - | struct_declaration - | interface_declaration - | enum_declaration - | delegate_declaration - ; -qualified_alias_member - : 'global' ""::"" 'name' _type_argument_list 'typeArguments' {{}} - ; - -# B.2.1 -namespace_name - : namespace_or_type_name - ; -type_name - : namespace_or_type_name - ; -namespace_or_type_name - : 'name' _type_argument_list 'typeArguments' {{TypeName}} - | namespace_or_type_name 'namespace' ""."" 'name' _type_argument_list 'typeArguments' {{TypeName}} - | qualified_alias_member - ; - -# B.2.2 -_type - : - | type 'type' - ; -type - : value_type - | reference_type - | type_parameter - ; -value_type - : struct_type - | enum_type - ; -struct_type - : type_name - | simple_type - | nullable_type - ; -simple_type - : numeric_type 'token' {{}} - | ""bool"" 'token' {{}} - ; -numeric_type - : integral_type - | floating_point_type - | ""decimal"" - ; -integral_type - : ""sbyte"" - | ""byte"" - | ""short"" - | ""ushort"" - | ""int"" - | ""uint"" - | ""long"" - | ""ulong"" - | ""char"" - ; -floating_point_type - : ""float"" - | ""double"" - ; -nullable_type - : non_nullable_value_type 'type' ""?"" {{}} - ; -non_nullable_value_type - : type - ; -enum_type - : type_name - ; -reference_type - : class_type - | interface_type - | array_type - | delegate_type - ; -class_type - : type_name - | ""object"" 'token' {{SimpleType}} - | ""string"" 'token' {{SimpleType}} - ; -interface_type - : type_name - ; -array_type - : non_array_type 'type' rank_specifiers {{}} - ; -non_array_type - : type - ; -_rank_specifiers - : - | rank_specifiers - ; -rank_specifiers - : rank_specifier 'rankSpecifier' - | rank_specifiers rank_specifier 'rankSpecifier' - ; -rank_specifier - : ""["" _dim_separators ""]"" {{}} - ; -_dim_separators - : - | dim_separators - ; -dim_separators - : "","" - | dim_separators "","" - ; -delegate_type - : type_name - ; -type_argument_list - : ""<"" type_arguments 'greaterThanToken' {{}} - ; -type_arguments - : type_argument 'type' - | type_arguments "","" type_argument 'type' - ; -type_argument - : type - ; - -# B.2.3 Variables -variable_reference - : expression - ; - -# B.2.4 Expressions -_argument_list - : - | argument_list - ; - -# B.2.4 -argument_list - : argument 'argument' - | argument_list "","" argument 'argument' - ; -argument - : _argument_name argument_value {{}} - ; -_argument_name - : - | argument_name - ; -argument_name - : 'identifier' "":"" - ; -argument_value - : expression 'expression' - | ""ref"" variable_reference 'expression' - | ""out"" variable_reference 'expression' - ; -primary_expression - : primary_no_array_creation_expression - | array_creation_expression - ; -primary_no_array_creation_expression - : literal - | interpolated_string_expression - | simple_name - | parenthesized_expression - | member_access - | invocation_expression - | element_access - | this_access - | base_access - | post_increment_expression - | post_decrement_expression - | object_creation_expression - | delegate_creation_expression - | anonymous_object_creation_expression - | typeof_expression - | checked_expression - | unchecked_expression - | default_value_expression - | nameof_expression - | anonymous_method_expression - ; -interpolated_string_expression - : interpolated_regular_string {{}} - | interpolated_verbatim_string {{}} - ; -interpolated_regular_string - : 'stringPart' - | StartInterpolatedString 'stringPart' interpolated_regular_string_body 'stringPart' - ; -StartInterpolatedString - : [#interpolatedString] - ; -interpolated_regular_string_body - : interpolation 'interpolation' - | interpolation 'interpolation' 'stringPart' interpolation 'interpolation' - ; -interpolation - : expression 'expression' {{}} - | expression 'expression' "","" constant_expression 'constant' {{}} - ; -interpolated_verbatim_string - : 'stringPart' - | StartInterpolatedVerbatimString 'stringPart' interpolated_verbatim_string_body 'stringPart' - ; -StartInterpolatedVerbatimString - : [#interpolatedVerbatimString] - ; -interpolated_verbatim_string_body - : interpolation 'interpolation' - | interpolation 'interpolation' 'stringPart' interpolation 'interpolation' - ; -simple_name - : _type_argument_list 'typeArguments' {{}} - ; -_type_argument_list - : - | type_argument_list - ; -parenthesized_expression - : ""("" '_leftParen' expression "")"" '_rightParen' {{Expression}} - ; -member_access - : primary_expression 'expression' ""."" 'identifier' _type_argument_list 'typeArguments' {{}} - | predefined_type_expression 'expression' ""."" 'identifier' _type_argument_list 'typeArguments' {{}} - | qualified_alias_member_expression 'expression' ""."" 'identifier' {{}} - ; -qualified_alias_member_expression - : qualified_alias_member 'type' {{TypeExpression}} - ; -predefined_type_expression - : predefined_type 'type' {{TypeExpression}} - ; -predefined_type - : ""bool"" 'token' {{SimpleType}} - | ""byte"" 'token' {{SimpleType}} - | ""char"" 'token' {{SimpleType}} - | ""decimal"" 'token' {{SimpleType}} - | ""double"" 'token' {{SimpleType}} - | ""float"" 'token' {{SimpleType}} - | ""int"" 'token' {{SimpleType}} - | ""long"" 'token' {{SimpleType}} - | ""object"" 'token' {{SimpleType}} - | ""sbyte"" 'token' {{SimpleType}} - | ""short"" 'token' {{SimpleType}} - | ""string"" 'token' {{SimpleType}} - | ""uint"" 'token' {{SimpleType}} - | ""ulong"" 'token' {{SimpleType}} - | ""ushort"" 'token' {{SimpleType}} - ; -invocation_expression - : primary_expression 'expression' ""("" _argument_list "")"" {{}} - ; -element_access - : primary_no_array_creation_expression 'baseExpression' ""["" expression_list ""]"" {{}} - ; -expression_list - : expression 'expression' - | expression_list "","" expression 'expression' - ; -this_access - : ""this"" {{}} - ; -base_access - : ""base"" ""."" 'identifier' {{}} - | ""base"" ""["" expression_list ""]"" {{}} - ; -post_increment_expression - : primary_expression 'expression' ""++"" 'operator' {{PostExpression}} - ; -post_decrement_expression - : primary_expression 'expression' ""--"" 'operator' {{PostExpression}} - ; -object_creation_expression - : ""new"" type 'type' ""("" _argument_list "")"" _object_or_collection_initializer 'initializer' {{}} - | ""new"" type 'type' object_or_collection_initializer 'initializer' {{}} - ; -_object_or_collection_initializer - : - | object_or_collection_initializer - ; -object_or_collection_initializer - : object_initializer - | collection_initializer - ; -object_initializer - : ""{"" _member_initializer_list {{}} - | ""{"" member_initializer_list "","" {{}} - ; -_member_initializer_list - : - | member_initializer_list - ; -member_initializer_list - : member_initializer 'initializer' - | member_initializer_list "","" member_initializer 'initializer' - ; -member_initializer - : initializer_target ""="" initializer_value 'value' {{}} - ; -initializer_target - : 'identifier' - | ""["" argument_list ""]"" - ; -initializer_value - : expression - | object_or_collection_initializer - ; -collection_initializer - : ""{"" element_initializer_list {{}} - | ""{"" element_initializer_list "","" {{}} - ; -element_initializer_list - : element_initializer 'initializer' - | element_initializer_list "","" element_initializer 'initializer' - ; -element_initializer - : non_assignment_expression 'expression' {{}} - | ""{"" expression_list {{}} - ; -array_creation_expression - : ""new"" non_array_type 'type' ""["" expression_list ""]"" _rank_specifiers _array_initializer 'arrayInitializer' {{}} - | ""new"" array_type 'type' array_initializer 'arrayInitializer' {{}} - | ""new"" rank_specifier 'rankSpecifier' array_initializer 'arrayInitializer' {{}} - ; -delegate_creation_expression - : ""new"" delegate_type 'type' ""("" expression 'expression' "")"" {{}} - ; -anonymous_object_creation_expression - : ""new"" anonymous_object_initializer {{}} - ; -anonymous_object_initializer - : ""{"" _member_declarator_list - | ""{"" member_declarator_list "","" - ; -_member_declarator_list - : - | member_declarator_list - ; -member_declarator_list - : member_declarator 'declarator' - | member_declarator_list "","" member_declarator 'declarator' - ; -member_declarator - : simple_name 'name' {{}} - | member_access 'access' {{}} - | base_access 'access' {{}} - | null_conditional_member_access 'access' {{}} - | ""="" expression 'value' {{}} - ; -typeof_expression - : ""typeof"" ""("" type 'type' "")"" {{}} - | ""typeof"" ""("" unbound_type_name 'type' "")"" {{}} - | ""typeof"" ""("" void_type 'type' "")"" {{}} - ; -unbound_type_name - : _generic_dimension_specifier {{}} - | ""::"" _generic_dimension_specifier {{}} - | unbound_type_name ""."" _generic_dimension_specifier {{}} - ; -_generic_dimension_specifier - : - | generic_dimension_specifier - ; -generic_dimension_specifier - : ""<"" _commas - ; -_commas - : - | commas - ; -commas - : "","" 'comma' - | commas "","" 'comma' - ; -checked_expression - : ""checked"" ""("" expression 'expression' "")"" {{}} - ; -unchecked_expression - : ""unchecked"" ""("" expression 'expression' "")"" {{}} - ; -default_value_expression - : ""default"" ""("" type 'type' "")"" {{}} - ; -nameof_expression - : ""nameof"" ""("" named_entity 'name' "")"" {{}} - ; -named_entity - : simple_name - | named_entity_target 'target' ""."" _type_argument_list 'typeArguments' {{}} - ; -named_entity_target - : ""this"" {{ThisAccess}} - | ""base"" {{BaseExpression}} - | named_entity - | predefined_type_expression - | qualified_alias_member_expression - ; -unary_expression - : primary_expression - | null_conditional_expression - | ""+"" 'operator' unary_expression 'expression' {{PrefixExpression}} - | ""-"" 'operator' unary_expression 'expression' {{PrefixExpression}} - | ""!"" 'operator' unary_expression 'expression' {{PrefixExpression}} - | ""~"" 'operator' unary_expression 'expression' {{PrefixExpression}} - | pre_increment_expression - | pre_decrement_expression - | cast_expression - | await_expression - ; -null_conditional_expression - : primary_expression 'expression' null_conditional_operations 'nullConditionalOperation' {{}} - ; -_null_conditional_operations - : - | null_conditional_operations - ; -null_conditional_operations - : _null_conditional_operations 'baseOperations' ""?"" ""."" _type_argument_list 'typeArguments' {{NullConditionalMemberAccess}} - | _null_conditional_operations 'baseOperations' ""?"" ""["" argument_list ""]"" {{NullConditionalElementAccess}} - | null_conditional_operations 'baseOperations' ""."" _type_argument_list 'typeArguments' {{NullConditionalMemberAccess}} - | null_conditional_operations 'baseOperations' ""["" argument_list ""]"" {{NullConditionalElementAccess}} - | null_conditional_operations 'baseOperations' ""("" _argument_list "")"" {{NullConditionalInvocationExpression}} - ; -null_conditional_member_access - : primary_expression 'expression' _null_conditional_operations 'baseOperations' ""?"" ""."" _type_argument_list 'typeArguments' {{}} - | primary_expression 'expression' null_conditional_operations 'baseOperations' ""."" _type_argument_list 'typeArguments' {{}} - ; -null_conditional_invocation_expression - : primary_expression 'expression' null_conditional_operations 'baseOperations' ""("" _argument_list "")"" {{}} - ; -pre_increment_expression - : ""++"" 'operator' unary_expression 'expression' {{PrefixExpression}} - ; -pre_decrement_expression - : ""--"" 'operator' unary_expression 'expression' {{PrefixExpression}} - ; -cast_expression - : ""("" type 'type' "")"" unary_expression 'expression' {{}} - ; -await_expression - : ""await"" unary_expression 'expression' {{}} - ; -multiplicative_expression - : unary_expression - | multiplicative_expression 'left' ""*"" 'operator' unary_expression 'right' {{BinaryExpression}} - | multiplicative_expression 'left' ""/"" 'operator' unary_expression 'right' {{BinaryExpression}} - | multiplicative_expression 'left' ""%"" 'operator' unary_expression 'right' {{BinaryExpression}} - ; -additive_expression - : multiplicative_expression - | additive_expression 'left' ""+"" 'operator' multiplicative_expression 'right' {{BinaryExpression}} - | additive_expression 'left' ""-"" 'operator' multiplicative_expression 'right' {{BinaryExpression}} - ; -shift_expression - : additive_expression - | shift_expression 'left' ""<<"" 'operator' additive_expression 'right' {{BinaryExpression}} - | shift_expression 'left' 'operator' additive_expression 'right' {{BinaryExpression}} - ; -relational_expression - : shift_expression - | relational_expression 'left' ""<"" 'operator' shift_expression 'right' {{BinaryExpression}} - | relational_expression 'left' 'operator' shift_expression 'right' {{BinaryExpression}} - | relational_expression 'left' ""<="" 'operator' shift_expression 'right' {{BinaryExpression}} - | relational_expression 'left' "">="" 'operator' shift_expression 'right' {{BinaryExpression}} - | relational_expression 'left' ""is"" 'operator' type 'right' {{BinaryExpression}} - | relational_expression 'left' ""as"" 'operator' type 'right' {{BinaryExpression}} - ; -equality_expression - : relational_expression - | equality_expression 'left' ""=="" 'operator' relational_expression 'right' {{BinaryExpression}} - | equality_expression 'left' ""!="" 'operator' relational_expression 'right' {{BinaryExpression}} - ; -and_expression - : equality_expression - | and_expression 'left' ""&"" 'operator' equality_expression 'right' {{BinaryExpression}} - ; -exclusive_or_expression - : and_expression - | exclusive_or_expression 'left' ""^"" 'operator' and_expression 'right' {{BinaryExpression}} - ; -inclusive_or_expression - : exclusive_or_expression - | inclusive_or_expression 'left' ""|"" 'operator' exclusive_or_expression 'right' {{BinaryExpression}} - ; -conditional_and_expression - : inclusive_or_expression - | conditional_and_expression 'left' ""&&"" 'operator' inclusive_or_expression 'right' {{BinaryExpression}} - ; -conditional_or_expression - : conditional_and_expression - | conditional_or_expression 'left' ""||"" 'operator' conditional_and_expression 'right' {{BinaryExpression}} - ; -null_coalescing_expression - : conditional_or_expression - | conditional_or_expression 'left' ""??"" 'operator' null_coalescing_expression 'right' {{BinaryExpression}} - ; -conditional_expression - : null_coalescing_expression - | null_coalescing_expression 'booleanExpression' ""?"" expression 'trueExpression' "":"" expression 'falseExpression' {{}} - ; -lambda_expression - : anonymous_function_signature 'signature' ""=>"" anonymous_function_body 'body' {{}} - ; -anonymous_method_expression - : ""delegate"" _explicit_anonymous_function_signature 'signature' block 'block' {{}} - ; -anonymous_function_signature - : explicit_anonymous_function_signature - | implicit_anonymous_function_signature - ; -_explicit_anonymous_function_signature - : - | explicit_anonymous_function_signature - ; -explicit_anonymous_function_signature - : ""("" _explicit_anonymous_function_paramenter_list "")"" {{}} - ; -_explicit_anonymous_function_paramenter_list - : - | explicit_anonymous_function_paramenter_list - ; -explicit_anonymous_function_paramenter_list - : explicit_anonymous_function_paramenter 'parameter' - | explicit_anonymous_function_paramenter_list "","" explicit_anonymous_function_paramenter 'parameter' - ; -explicit_anonymous_function_paramenter - : _anonymous_function_parameter_modifier type 'type' 'name' {{AnonymousFunctionParameter}} - ; -_anonymous_function_parameter_modifier - : - | anonymous_function_parameter_modifier 'modifier' - ; -anonymous_function_parameter_modifier - : ""ref"" - | ""out"" - ; -implicit_anonymous_function_signature - : ""("" _implicit_anonymous_function_parameter_list "")"" {{}} - | implicit_anonymous_function_parameter 'name' {{}} - ; -_implicit_anonymous_function_parameter_list - : - | implicit_anonymous_function_parameter_list - ; -implicit_anonymous_function_parameter_list - : implicit_anonymous_function_parameter 'name' - | implicit_anonymous_function_parameter_list "","" implicit_anonymous_function_parameter 'name' - ; -implicit_anonymous_function_parameter - : - ; -anonymous_function_body - : expression - | block - ; -query_expression - : from_clause query_body {{}} - ; -from_clause - : ""from"" _type ""in"" expression 'expression' - ; -query_body - : _query_body_clauses select_or_group_clause _query_continuation - ; -_query_body_clauses - : - | query_body_clauses - ; -query_body_clauses - : query_body_clause - | query_body_clauses query_body_clause - ; -query_body_clause - : from_clause - | let_clause - | where_clause - | join_clause - | join_into_clause - | orderby_clause - ; -let_clause - : ""let"" ""="" expression 'expression' - ; -where_clause - : ""where"" boolean_expression 'expression' - ; -join_clause - : ""join"" _type ""in"" expression 'joinInExpression'""on"" expression 'joinOnExpression' ""equals"" expression 'joinEqualsExpression' - ; -join_into_clause - : ""join"" _type ""in"" expression 'joinInExpression' ""on"" expression 'joinOnExpression' ""equals"" expression 'joinEqualsExpression' ""into"" - ; -orderby_clause - : ""orderby"" orderings - ; -orderings - : ordering - | orderings "","" ordering - ; -ordering - : expression 'expression' _ordering_direction - ; -_ordering_direction - : - | ordering_direction - ; -ordering_direction - : ""ascending"" - | ""descending"" - ; -select_or_group_clause - : select_clause - | group_clause - ; -select_clause - : ""select"" expression 'expression' - ; -group_clause - : ""group"" expression 'groupExpression' ""by"" expression 'groupByExpression' - ; -_query_continuation - : - | query_continuation - ; -query_continuation - : ""into"" query_body - ; -assignment - : unary_expression 'lhs' assignment_operator 'operator' expression 'rhs' {{}} - ; -assignment_operator - : ""="" - | ""+="" - | ""-="" - | ""*="" - | ""/="" - | ""%="" - | ""&="" - | ""|="" - | ""^="" - | ""<<="" - | "">>="" - ; -_expression - : - | expression 'expression' - ; -expression - : non_assignment_expression - | assignment - ; -non_assignment_expression - : conditional_expression - | lambda_expression - | query_expression - ; -constant_expression - : expression - ; -boolean_expression - : expression - ; - -# B.2.5 Statements -statement - : labeled_statement - | declaration_statement - | embedded_statement - ; -embedded_statement - : block - | empty_statement - | expression_statement - | selection_statement - | iteration_statement - | jump_statement - | try_statement - | checked_statement - | unchecked_statement - | lock_statement - | using_statement - | yield_statement - ; -block - : ""{"" _statement_list {{BlockStatement}} - ; -_statement_list - : - | statement_list - ; -statement_list - : statement 'statement' - | statement_list statement 'statement' - ; -empty_statement - : "";"" {{}} - ; -labeled_statement - : "":"" statement 'statement' {{}} - ; -declaration_statement - : local_variable_declaration 'declaration' "";"" {{}} - | local_constant_declaration 'declaration' "";"" {{}} - ; -local_variable_declaration - : local_variable_type 'type' local_variable_declarators {{}} - ; -local_variable_type - : type - | ""var"" {{VarType}} - ; -local_variable_declarators - : local_variable_declarator 'declarator' - | local_variable_declarators "","" local_variable_declarator 'declarator' - ; -local_variable_declarator -# : 'name' {{}} -# | 'name' ""="" local_variable_initializer 'expression' {{}} - : _local_variable_declarator_name 'name' {{}} - | _local_variable_declarator_name 'name' ""="" local_variable_initializer 'expression' {{}} - ; -_local_variable_declarator_name # Here to create a parse node - : {{SimpleName}} - ; -local_variable_initializer - : expression - | array_initializer - ; -local_constant_declaration - : ""const"" type 'type' const_declarators {{}} - ; -const_declarators - : const_declarator 'declarator' - | const_declarators "","" const_declarator 'declarator' - ; -const_declarator - : 'name' ""="" constant_expression 'expression' {{}} - ; -expression_statement - : statement_expression 'expression' "";"" {{}} - ; -statement_expression - : invocation_expression - | null_conditional_invocation_expression - | object_creation_expression - | assignment - | post_increment_expression - | post_decrement_expression - | pre_increment_expression - | pre_decrement_expression - | await_expression - ; -selection_statement - : if_statement - | switch_statement - ; -if_statement - : ""if"" ""("" boolean_expression 'expression' "")"" embedded_statement 'thenStatement' {{}} - | ""if"" ""("" boolean_expression 'expression' "")"" embedded_statement 'thenStatement' ""else"" embedded_statement 'elseStatement' {{}} - ; -switch_statement - : ""switch"" ""("" expression 'expression' "")"" switch_block {{}} - ; -switch_block - : ""{"" _switch_sections - ; -_switch_sections - : - | switch_sections - ; -switch_sections - : switch_section 'section' - | switch_sections switch_section 'section' - ; -switch_section - : switch_labels statement_list {{}} - ; -switch_labels - : switch_label 'label' - | switch_labels switch_label 'label' - ; -switch_label - : ""case"" constant_expression 'expression' "":"" {{}} - | ""default"" "":"" {{}} - ; -iteration_statement - : while_statement - | do_statement - | for_statement - | foreach_statement - ; -while_statement - : ""while"" ""("" boolean_expression 'expression' "")"" embedded_statement 'statement' {{}} - ; -do_statement - : ""do"" embedded_statement 'statement' ""while"" ""("" boolean_expression 'expression' "")"" "";"" {{}} - ; -for_statement - : ""for"" ""("" _for_initializer "";"" _for_condition "";"" _for_iterator "")"" embedded_statement 'statement' {{}} - ; -_for_initializer - : - | for_initializer 'initializer' - ; -for_initializer - : local_variable_declaration - | statement_expression_list {{StatementList}} - ; -_for_condition - : - | for_condition 'condition' - ; -for_condition - : boolean_expression - ; -_for_iterator - : - | for_iterator 'iterator' - ; -for_iterator - : statement_expression_list {{StatementList}} - ; -statement_expression_list - : statement_expression 'expression' - | statement_expression_list "","" statement_expression 'expression' - ; -foreach_statement - : ""foreach"" ""("" local_variable_type 'type' 'name' ""in"" expression 'expression' "")"" embedded_statement 'statement' {{}} - ; -jump_statement - : break_statement - | continue_statement - | goto_statement - | return_statement - | throw_statement - ; -break_statement - : ""break"" "";"" {{}} - ; -continue_statement - : ""continue"" "";"" {{}} - ; -goto_statement - : ""goto"" "";"" {{}} - | ""goto"" ""case"" constant_expression 'expression' "";"" {{}} - | ""goto"" ""default"" "";"" {{}} - ; -return_statement - : ""return"" _expression "";"" {{}} - ; -throw_statement - : ""throw"" _expression "";"" {{}} - ; -try_statement - : ""try"" block 'block' catch_clauses {{}} - | ""try"" block 'block' finally_clause 'finally' {{}} - | ""try"" block 'block' catch_clauses finally_clause 'finally' {{}} - ; -catch_clauses - : catch_clause 'clause' - | catch_clauses catch_clause 'clause' - ; -catch_clause - : ""catch"" _exception_specifier _exception_filter block 'block' {{}} - ; -_exception_specifier - : - | exception_specifier - ; -exception_specifier - : ""("" type 'type' _identifier "")"" - ; -_exception_filter - : - | exception_filter 'filter' - ; -exception_filter - : ""when"" ""("" expression 'expression' "")"" {{}} - ; -finally_clause - : ""finally"" block 'block' {{}} - ; -checked_statement - : ""checked"" block 'block' {{}} - ; -unchecked_statement - : ""unchecked"" block 'block' {{}} - ; -lock_statement - : ""lock"" ""("" expression 'expression' "")"" embedded_statement 'statement' {{}} - ; -using_statement - : ""using"" ""("" resource_acquisition 'expression' "")"" embedded_statement 'statement' {{}} - ; -resource_acquisition - : local_variable_declaration - | expression - ; -yield_statement - : ""yield"" ""return"" expression 'expression' "";"" {{}} - | ""yield"" ""break"" "";"" {{}} - ; - - -# B.2.7 Classes -class_declaration - : _attributes _class_modifiers _partial ""class"" 'name' _type_parameter_list _class_base _type_parameter_constraints_clauses class_body _semicolon {{}} - ; -_class_modifiers - : - | class_modifiers - ; -class_modifiers - : class_modifier 'modifier' - | class_modifiers class_modifier 'modifier' - ; -class_modifier - : ""new"" - | ""public"" - | ""protected"" - | ""internal"" - | ""private"" - | ""abstract"" - | ""sealed"" - | ""static"" - ; -_type_parameter_list - : - | type_parameter_list 'typeParameters' - ; -type_parameter_list - : ""<"" 'lessThan' type_parameters 'greaterThan' {{}} - ; -type_parameters - : _attributes type_parameter 'parameter' - | type_parameters "","" _attributes type_parameter 'parameter' - ; -type_parameter - : 'name' {{TypeName}} - ; -_class_base - : - | class_base - ; -class_base - : "":"" class_type 'supertype' - | "":"" interface_type_list - | "":"" class_type 'supertype' "","" interface_type_list - ; -interface_type_list - : interface_type 'supertype' - | interface_type_list "","" 'comma' interface_type 'supertype' - ; -_type_parameter_constraints_clauses - : - | type_parameter_constraints_clauses - ; -type_parameter_constraints_clauses - : type_parameter_constraints_clause 'constraintClause' - | type_parameter_constraints_clauses type_parameter_constraints_clause 'constraintClause' - ; -type_parameter_constraints_clause - : ""where"" 'whereToken' type_parameter 'parameter' "":"" 'colon' type_parameter_constraints {{}} - ; -type_parameter_constraints - : primary_constraint 'constraint' - | secondary_constraints - | constructor_constraint 'constraint' - | primary_constraint 'constraint' "","" secondary_constraints - | primary_constraint 'constraint' "","" constructor_constraint 'constraint' - | secondary_constraints "","" constructor_constraint 'constraint' - | primary_constraint 'constraint' "","" secondary_constraints "","" constructor_constraint 'constraint' - ; -primary_constraint - : class_type 'type' {{TypeConstraint}} - | ""class"" {{}} - | ""struct"" {{}} - ; -secondary_constraints - : interface_type_constraint 'constraint' - | type_parameter 'constraint' - | secondary_constraints "","" interface_type_constraint 'constraint' - | secondary_constraints "","" type_parameter 'constraint' - ; -## added Interface_type_constraint -interface_type_constraint - : interface_type 'type' {{TypeConstraint}} - ; -constructor_constraint - : ""new"" ""("" "")"" {{}} - ; -class_body - : ""{"" _class_member_declarations - ; -_class_member_declarations - : - | class_member_declarations - ; -class_member_declarations - : class_member_declaration 'declaration' - | class_member_declarations class_member_declaration 'declaration' - ; -class_member_declaration - : constant_declaration - | field_declaration - | method_declaration - | property_declaration - | event_declaration - | indexer_declaration - | operator_declaration - | constructor_declaration - | destructor_declaration - | static_constructor_declaration - | type_declaration - ; -constant_declaration - : _attributes _constant_modifiers ""const"" type 'type' constant_declarators "";"" {{}} - ; -_constant_modifiers - : - | constant_modifers - ; -constant_modifers - : constant_modifer 'modifier' - | constant_modifers constant_modifer 'modifier' - ; -constant_modifer - : ""new"" - | ""public"" - | ""protected"" - | ""internal"" - | ""private"" - ; -constant_declarators - : constant_declarator 'declarator' - | constant_declarators "","" constant_declarator 'declarator' - ; -constant_declarator - : ""="" constant_expression 'expression' {{}} - ; -field_declaration - : _attributes _field_modifiers type 'type' variable_declarators "";"" {{}} - ; -_field_modifiers - : - | field_modifiers - ; -field_modifiers - : field_modifier 'modifier' - | field_modifiers field_modifier 'modifier' - ; -field_modifier - : ""new"" - | ""public"" - | ""protected"" - | ""internal"" - | ""private"" - | ""static"" - | ""readonly"" - | ""volatile"" - ; -variable_declarators - : variable_declarator 'declarator' - | variable_declarators "","" variable_declarator 'declarator' - ; -variable_declarator - : {{}} - | ""="" variable_initializer 'initializer' {{}} - ; -variable_initializer - : expression - | array_initializer - ; -method_declaration - : method_header 'header' method_body 'body' {{}} - ; -method_header - : _attributes _method_modifiers _partial return_type 'returnType' member_name _type_parameter_list ""("" _formal_parameters_list "")"" _type_parameter_constraints_clauses {{}} - ; -_method_modifiers - : - | method_modifiers - ; -method_modifiers - : method_modifier 'modifier' - | method_modifiers method_modifier 'modifier' - ; -method_modifier - : ""new"" - | ""public"" - | ""protected"" - | ""internal"" - | ""private"" - | ""static"" - | ""virtual"" - | ""sealed"" - | ""override"" - | ""abstract"" - | ""extern"" - ; -return_type - : type - | void_type - ; -member_name - : 'name' - | interface_type 'interface' ""."" 'name' - ; -method_body - : block 'block' {{}} - | ""=>"" expression 'expression' "";"" {{}} - | "";"" {{}} - ; -_formal_parameters_list - : - | formal_parameters_list - ; -formal_parameters_list - : fixed_parameters - | fixed_parameters "","" 'comma' parameter_array 'parameter' - | parameter_array 'parameter' - ; -fixed_parameters - : fixed_parameter 'parameter' - | fixed_parameters "","" 'comma' fixed_parameter 'parameter' - ; -fixed_parameter - : _attributes _parameter_modifier type 'type' 'name' _default_argument {{FixedParameter}} - ; -_default_argument - : - | default_argument - ; -default_argument - : ""="" expression 'expression' - ; -_parameter_modifier - : - | parameter_modifier 'modifier' - ; -parameter_modifier - : ""ref"" - | ""out"" - | ""this"" - ; -parameter_array - : _attributes ""params"" 'paramsToken' array_type 'type' 'name' {{ArrayParameter}} - ; -property_declaration - : _attributes _property_modifiers type 'type' member_name property_body {{}} - ; -_property_modifiers - : - | property_modifiers - ; -property_modifiers - : property_modifier 'modifier' - | property_modifiers property_modifier 'modifier' - ; -property_modifier - : ""new"" - | ""public"" - | ""protected"" - | ""internal"" - | ""private"" - | ""static"" - | ""virtual"" - | ""sealed"" - | ""override"" - | ""abstract"" - | ""extern"" - ; -property_body - : ""{"" accessor_declarations _property_initializer - | ""=>"" expression 'expression' "";"" 'semicolon' - ; -_property_initializer - : - | property_initializer - ; -property_initializer - : ""="" variable_initializer 'initializer' - ; -accessor_declarations - : get_accessor_declaration 'getAccessor' _set_accessor_declaration 'setAccessor' - | set_accessor_declaration 'setAccessor' _get_accessor_declaration 'getAccessor' - ; -_get_accessor_declaration - : - | get_accessor_declaration - ; -get_accessor_declaration - : _attributes _accessor_modifiers ""get"" accessor_body {{}} - ; -_set_accessor_declaration - : - | set_accessor_declaration - ; -set_accessor_declaration - : _attributes _accessor_modifiers ""set"" accessor_body {{}} - ; -_accessor_modifiers - : - | accessor_modifiers - ; -accessor_modifiers - : ""protected"" 'modifier' - | ""internal"" 'modifier' - | ""private"" 'modifier' - | ""protected"" 'modifier' ""internal"" 'modifier' - | ""internal"" 'modifier' ""protected"" 'modifier' - ; -accessor_body - : block 'body' - | "";"" - ; -event_declaration - : _attributes _event_modifiers ""event"" type 'type' variable_declarators "";"" {{}} - | _attributes _event_modifiers ""event"" type 'type' member_name ""{"" event_accessor_declarations {{}} - ; -_event_modifiers - : - | event_modifiers - ; -event_modifiers - : event_modifier 'modifier' - | event_modifiers event_modifier 'modifier' - ; -event_modifier - : ""new"" - | ""public"" - | ""protected"" - | ""internal"" - | ""private"" - | ""static"" - | ""virtual"" - | ""sealed"" - | ""override"" - | ""abstract"" - | ""extern"" - ; -event_accessor_declarations - : add_accessor_declaration 'addDeclaration' remove_accessor_declaration 'removeDeclaration' - | remove_accessor_declaration 'removeDeclaration' add_accessor_declaration 'addDeclaration' - ; -add_accessor_declaration - : _attributes ""add"" block 'block' {{}} - ; -remove_accessor_declaration - : _attributes ""remove"" block 'block' {{}} - ; -indexer_declaration - : _attributes _indexer_modifiers indexer_declarator indexer_body {{}} - ; -_indexer_modifiers - : - | indexer_modifiers - ; -indexer_modifiers - : indexer_modifier 'modifier' - | indexer_modifiers indexer_modifier 'modifier' - ; -indexer_modifier - : ""new"" - | ""public"" - | ""protected"" - | ""internal"" - | ""private"" - | ""virtual"" - | ""sealed"" - | ""override"" - | ""abstract"" - | ""extern"" - ; -indexer_declarator - : type 'returnType' ""this"" ""["" formal_parameters_list ""]"" - | type 'returnType' interface_type 'type' ""."" ""this"" ""["" formal_parameters_list ""]"" - ; -indexer_body - : ""{"" accessor_declarations - | ""=>"" expression 'expression' "";"" - ; -operator_declaration - : _attributes operator_modifiers operator_declarator operator_body 'body' {{}} - ; -operator_modifiers - : operator_modifier 'modifier' - | operator_modifiers operator_modifier 'modifier' - ; -operator_modifier - : ""public"" - | ""static"" - | ""extern"" - ; -operator_declarator - : unary_operator_declarator - | binary_operator_declarator - | conversion_operator_declarator - ; -unary_operator_declarator - : type 'returnType' ""operator"" overloadable_unary_operator 'operator' ""("" type 'type' 'argument' "")"" - ; -overloadable_unary_operator - : ""+"" - | ""-"" - | ""!"" - | ""~"" - | ""++"" - | ""--"" - | ""true"" - | ""false"" - ; -binary_operator_declarator - : type 'returnType' ""operator"" overloadable_binary_operator 'operator' ""("" type 'type' 'argument' "","" type 'type' 'argument' "")"" - ; -overloadable_binary_operator - : ""+"" - | ""-"" - | ""*"" - | ""/"" - | ""%"" - | ""&"" - | ""|"" - | ""^"" - | ""<<"" - | - | ""=="" - | ""!="" - | - | ""<"" - | "">="" - | ""<="" - ; -conversion_operator_declarator - : ""implicit"" ""operator"" type 'returnType' ""("" type 'type' 'argument' "")"" - | ""explicit"" ""operator"" type 'returnType' ""("" type 'type' 'argument' "")"" - ; -operator_body - : block 'block' {{MethodBody}} - | ""=>"" expression 'expression' "";"" {{MethodBody}} - | "";"" {{MethodBody}} - ; -constructor_declaration - : _attributes _constructor_modifiers constructor_declarator constructor_body {{}} - ; -_constructor_modifiers - : - | constructor_modifiers - ; -constructor_modifiers - : constructor_modifier 'modifier' - | constructor_modifiers constructor_modifier 'modifier' - ; -constructor_modifier - : ""public"" - | ""protected"" - | ""internal"" - | ""private"" - | ""extern"" - ; -constructor_declarator - : ""("" _formal_parameters_list "")"" _constructor_initializer - ; -_constructor_initializer - : - | constructor_initializer 'initializer' - ; -constructor_initializer - : "":"" ""base"" ""("" _argument_list "")"" {{}} - | "":"" ""this"" ""("" _argument_list "")"" {{}} - ; -constructor_body - : block 'block' - | "";"" - ; -static_constructor_declaration - : _attributes static_constructor_modifiers ""("" "")"" static_constructor_body {{}} - ; -# redefined in the unsafe section -static_constructor_modifiers - : _extern ""static"" - | ""static"" _extern - ; -static_constructor_body - : block 'block' - | "";"" - ; -# redefined in the unsafe section -#destructor_declaration -# : _attributes _extern ""~"" ""("" "")"" destructor_body -# ; -#destructor_body -# : block -# | "";"" -# ; - -# B.2.8 Structs -struct_declaration - : _attributes _struct_modifiers _partial ""struct"" _type_parameter_list _struct_interfaces _type_parameter_constraints_clauses struct_body _semicolon {{}} - ; -_struct_modifiers - : - | struct_modifiers - ; -struct_modifiers - : struct_modifier 'modifier' - | struct_modifiers struct_modifier 'modifier' - ; -struct_modifier - : ""new"" - | ""public"" - | ""protected"" - | ""internal"" - | ""private"" - ; -_struct_interfaces - : - | struct_interfaces - ; -struct_interfaces - : "":"" interface_type_list - ; -struct_body - : ""{"" _struct_member_declarations - ; -_struct_member_declarations - : - | struct_member_declarations - ; -struct_member_declarations - : struct_member_declaration 'declaration' - | struct_member_declarations struct_member_declaration 'declaration' - ; -struct_member_declaration - : constant_declaration - | field_declaration - | method_declaration - | property_declaration - | event_declaration - | indexer_declaration - | operator_declaration - | constructor_declaration - | static_constructor_declaration - | type_declaration - ; - -# B.2.9 Arrays -_array_initializer - : - | array_initializer - ; -array_initializer - : ""{"" _variable_initializer_list {{}} - | ""{"" variable_initializer_list "","" {{}} - ; -_variable_initializer_list - : - | variable_initializer_list - ; -variable_initializer_list - : variable_initializer 'initializer' - | variable_initializer_list "","" variable_initializer 'initializer' - ; -variable_initializer - : expression - | array_initializer - ; - -# B.2.10 Interfaces -interface_declaration - : _attributes _interface_modifiers _partial ""interface"" 'interfaceToken' 'name' _variant_type_parameter_list _interface_base _type_parameter_constraints_clauses interface_body _semicolon {{}} - ; -_interface_modifiers - : - | interface_modifiers - ; -interface_modifiers - : interface_modifier 'modifier' - | interface_modifiers interface_modifier 'modifier' - ; -interface_modifier - : ""new"" - | ""public"" - | ""protected"" - | ""internal"" - | ""private"" - ; -_variant_type_parameter_list - : - | variant_type_parameter_list 'typeParameters' - ; -variant_type_parameter_list - : ""<"" 'lessThan' variant_type_parameters 'greaterThan' {{}} - ; -variant_type_parameters - : _attributes _variance_annotation type_parameter 'parameter' - | variant_type_parameters "","" _attributes _variance_annotation type_parameter 'parameter' - ; -_variance_annotation - : - | variance_annotation 'annotation' - ; -variance_annotation - : ""in"" - | ""out"" - ; -_interface_base - : - | interface_base - ; -interface_base - : "":"" 'colon' interface_type_list - ; -interface_body - : ""{"" 'leftBrace' _interface_member_declarations 'rightBrace' - ; -_interface_member_declarations - : - | interface_member_declarations - ; -interface_member_declarations - : interface_member_declaration 'declaration' - | interface_member_declarations interface_member_declaration 'declaration' - ; -interface_member_declaration - : interface_method_declaration - | interface_property_declaration - | interface_event_declaration - | interface_indexer_declaration - ; -interface_method_declaration - : _attributes _new 'modifier' return_type 'type' 'name' _type_parameter_list ""("" 'leftParen' _formal_parameters_list "")"" 'rightParen' _type_parameter_constraints_clauses "";"" 'semicolon' {{}} - ; -interface_property_declaration - : _attributes _new 'modifier' type 'type' 'name' ""{"" 'leftBrace' interface_accessors 'rightBrace' {{}} - ; -interface_accessors #This was changed to use the interface_(g/s)et_accessor - : interface_get_accessor 'getAccessor' - | interface_set_accessor 'setAccessor' - | interface_get_accessor 'getAccessor' interface_set_accessor 'setAccessor' - | interface_set_accessor 'setAccessor' interface_get_accessor 'getAccessor' - ; -interface_get_accessor - : _attributes ""get"" 'accessorType' "";"" 'semicolon' {{InterfacePropertyAccessor}} - ; -interface_set_accessor - : _attributes ""set"" 'accessorType' "";"" 'semicolon' {{InterfacePropertyAccessor}} - ; -interface_event_declaration - : _attributes _new 'modifier' ""event"" 'eventToken' type 'type' 'name' "";"" 'semicolon' {{}} - ; -interface_indexer_declaration - : _attributes _new 'modifier' type 'type' ""this"" 'thisToken' ""["" 'leftBracket' formal_parameters_list ""]"" 'rightBracket' ""{"" 'leftBrace' interface_accessors 'rightBrace' {{}} - ; - -# B.2.11 Enums -enum_declaration - : _attributes _enum_modifers ""enum"" 'enumToken' 'name' _enum_base enum_body _semicolon {{}} - ; -_enum_base - : - | enum_base - ; -enum_base - : "":"" integral_type 'typeToken' - ; -enum_body - : ""{"" 'leftBrace' _enum_member_declarations 'rightBrace' - | ""{"" 'leftBrace' enum_member_declarations "","" 'comma' 'rightBrace' - ; -_enum_modifers - : - | enum_modifers - ; -enum_modifers - : enum_modifer 'modifier' - | enum_modifers enum_modifer 'modifier' - ; -enum_modifer - : ""new"" - | ""public"" - | ""protected"" - | ""internal"" - | ""private"" - ; -_enum_member_declarations - : - | enum_member_declarations - ; -enum_member_declarations - : enum_member_declaration 'declaration' - | enum_member_declarations "","" 'comma' enum_member_declaration 'declaration' - ; -enum_member_declaration - : _attributes 'name' {{EnumDeclaration}} - | _attributes 'name' ""="" 'equal' constant_expression 'value' {{EnumDeclaration}} - ; - -# B.2.12 Delegates -delegate_declaration - : _attributes _delegate_modifiers ""delegate"" 'delegateToken' return_type 'type' 'name' _variant_type_parameter_list ""("" 'leftParen' _formal_parameters_list "")"" 'rightParen' _type_parameter_constraints_clauses "";"" 'semicolon' {{}} - ; -_delegate_modifiers - : - | delegate_modifiers - ; -delegate_modifiers - : delegate_modifier 'modifier' - | delegate_modifiers delegate_modifier 'modifier' - ; -delegate_modifier - : ""new"" - | ""public"" - | ""protected"" - | ""internal"" - | ""private"" - ; - -# B.2.13 Attributes -_global_attributes - : - | global_attributes - ; -global_attributes - : global_attribute_sections - ; -global_attribute_sections - : global_attribute_section 'attribute' - | global_attribute_sections global_attribute_section 'attribute' - ; -global_attribute_section - : ""["" 'leftBracket' global_attribute_target_specifier attribute_list ""]"" 'rightBracket' {{Attribute}} - | ""["" 'leftBracket' global_attribute_target_specifier attribute_list "","" 'comma' ""]"" 'rightBracket' {{Attribute}} - ; -global_attribute_target_specifier - : global_attribute_target 'target' "":"" 'colon' - ; -global_attribute_target - : ""assembly"" - | ""module"" - ; -_attributes - : - | attributes - ; -attributes - : attribute_sections - ; -attribute_sections - : attribute_section 'attribute' - | attribute_sections attribute_section 'attribute' - ; -attribute_section - : ""["" 'leftBracket' _attribute_target_specifier attribute_list ""]"" 'rightBracket' {{Attribute}} - | ""["" 'leftBracket' _attribute_target_specifier attribute_list "","" 'comma' ""]"" 'rightBracket' {{Attribute}} - ; -_attribute_target_specifier - : - | attribute_target_specifier - ; -attribute_target_specifier - : attribute_target 'target' "":"" 'colon' - ; -attribute_target - : ""field"" - | ""event"" - | ""method"" - | ""param"" - | ""property"" - | ""return"" - | ""type"" - ; -attribute_list - : attribute 'attributeValue' - | attribute_list "","" 'comma' attribute 'attributeValue' - ; -attribute - : attribute_name 'name' _attribute_arguments {{AttributeValue}} - ; -attribute_name - : type_name - ; -_attribute_arguments - : - | attribute_arguments - ; -attribute_arguments - : ""("" 'leftParen' _positional_argument_list "")"" 'rightParen' - | ""("" 'leftParen' positional_argument_list "","" 'comma' named_argument_list "")"" 'rightParen' - | ""("" 'leftParen' named_argument_list "")"" 'rightParen' - ; -_positional_argument_list - : - | positional_argument_list - ; -positional_argument_list - : positional_argument 'argument' - | positional_argument_list "","" 'comma' positional_argument 'argument' - ; -positional_argument - : attribute_argument_expression - ; -named_argument_list - : named_argument 'argument' - | named_argument_list "","" 'comma' named_argument 'argument' - ; -named_argument - : 'name' ""="" 'equal' attribute_argument_expression 'value' {{NamedArgument}} - ; -attribute_argument_expression - : expression - ; - -# B.1.8 Literals -literal - : boolean_literal 'token' {{BooleanLiteralExpression}} - | 'token' {{IntegerLiteralExpression}} - | 'token' {{RealLiteralExpression}} - | 'token' {{CharacterLiteralExpression}} - | 'token' {{StringLiteralExpression}} - | 'token' {{NullLiteralExpression}} - ; -boolean_literal - : ""true"" - | ""false"" - ; - -# Misc -_semicolon - : - | "";"" 'semicolon' - ; -_new - : - | ""new"" - ; -_partial - : - | ""partial"" 'partialToken' - ; -_extern - : - | ""extern"" 'modifier' - ; -_identifier - : - | 'name' - ; - -# B.3 Unsafe code -class_modifier - : ""unsafe"" - ; -struct_modifier - : ""unsafe"" - ; -interface_modifier - : ""unsafe"" - ; -delegate_modifier - : ""unsafe"" - ; -field_modifier - : ""unsafe"" - ; -method_modifier - : ""unsafe"" - ; -property_modifier - : ""unsafe"" - ; -event_modifier - : ""unsafe"" - ; -indexer_modifier - : ""unsafe"" - ; -operator_modifier - : ""unsafe"" - ; -constructor_modifier - : ""unsafe"" - ; -destructor_declaration # Changed from destructor_body to method_body since they are the same - : _attributes _extern _unsafe ""~"" ""("" "")"" method_body 'body' {{}} - | _attributes _unsafe _extern ""~"" ""("" "")"" method_body 'body' {{}} - ; -_unsafe - : - | ""unsafe"" 'modifier' - ; -static_constructor_modifiers - : _extern _unsafe ""static"" - | _unsafe _extern ""static"" - | _extern ""static"" ""unsafe"" - | _unsafe ""static"" _extern - | ""static"" _extern _unsafe - | ""static"" _unsafe _extern - ; -embedded_statement - : unsafe_statement - ; -unsafe_statement - : ""unsafe"" block 'block' {{UnsafeStatement}} - ; -type - : pointer_type - ; -pointer_type - : unmanaged_type 'type' ""*"" {{}} - | void_type 'type' ""*"" {{}} - ; -unmanaged_type - : type - ; -primary_no_array_creation_expression - : pointer_member_access - | pointer_element_access - | sizeof_expression - ; -unary_expression - : pointer_indirection_expression - | addressof_expression - ; -pointer_indirection_expression - : ""*"" 'operator' unary_expression 'expression' {{PrefixExpression}} - ; -pointer_member_access - : primary_expression 'expression' ""->"" 'arrowToken' 'name' {{}} - ; -pointer_element_access - : primary_no_array_creation_expression 'expression' ""["" expression 'indexExpression' ""]"" {{}} - ; -addressof_expression - : ""&"" 'operator' unary_expression 'expression' {{PrefixExpression}} - ; -sizeof_expression - : ""sizeof"" ""("" unmanaged_type 'type' "")"" {{}} - ; -embedded_statement - : fixed_statement - ; -fixed_statement - : ""fixed"" ""("" pointer_type 'type' fixed_pointer_declarators "")"" embedded_statement 'statement' {{}} - ; -fixed_pointer_declarators - : fixed_pointer_declarator 'declarator' - | fixed_pointer_declarators "","" fixed_pointer_declarator 'declarator' - ; -fixed_pointer_declarator - : ""="" fixed_pointer_initializer {{}} - ; -fixed_pointer_initializer - : ""&"" variable_reference 'expression' - | expression 'expression' - ; -struct_member_declaration - : fixed_size_buffer_declaration - ; -fixed_size_buffer_declaration - : _attributes _fixed_size_buffer_modifiers ""fixed"" buffer_element_type 'type' fixed_size_buffer_declarators "";"" {{}} - ; -_fixed_size_buffer_modifiers - : - | fixed_size_buffer_modifiers - ; -fixed_size_buffer_modifiers - : fixed_size_buffer_modifier 'modifier' - | fixed_size_buffer_modifiers fixed_size_buffer_modifier 'modifier' - ; -fixed_size_buffer_modifier - : ""new"" - | ""public"" - | ""protected"" - | ""internal"" - | ""private"" - | ""unsafe"" - ; -buffer_element_type - : type - ; -fixed_size_buffer_declarators - : fixed_size_buffer_declarator 'declarator' - | fixed_size_buffer_declarators fixed_size_buffer_declarator 'declarator' - ; -fixed_size_buffer_declarator - : 'name' ""["" constant_expression 'expression' ""]"" {{}} - ; -local_variable_initializer - : stackalloc_initializer - ; -stackalloc_initializer - : ""stackalloc"" unmanaged_type 'type' ""["" expression 'expression' ""]"" {{}} - ; -# Additions -void_type - : ""void"" {{}} - ;" -] - -{ #category : #'file types' } -CSharpParser class >> fileExtension [ - ^ '.cs' -] - -{ #category : #'file types' } -CSharpParser class >> fileExtensionType [ - ^ 'C# files' -] - -{ #category : #private } -CSharpParser class >> keywords [ - ^ keywords - ifNil: - [ keywords := #('abstract' 'as' 'base' 'bool' 'break' 'byte' 'case' 'catch' 'char' 'checked' 'class' 'const' 'continue' 'decimal' 'default' 'delegate' 'do' 'double' 'else' 'enum' 'event' 'explicit' 'extern' 'false' 'finally' 'fixed' 'float' 'for' 'foreach' 'goto' 'if' 'implicit' 'in' 'int' 'interface' 'internal' 'is' 'lock' 'long' 'namespace' 'new' 'null' 'object' 'operator' 'out' 'override' 'params' 'private' 'protected' 'public' 'readonly' 'ref' 'return' 'sbyte' 'sealed' 'short' 'sizeof' 'stackalloc' 'static' 'string' 'struct' 'switch' 'this' 'throw' 'true' 'try' 'typeof' 'uint' 'ulong' 'unchecked' 'unsafe' 'ushort' 'using' 'virtual' 'void' 'volatile' 'while') - asSet ] -] - -{ #category : #accessing } -CSharpParser class >> parseBlock: aString onError: aBlock [ - ^ self - parse: aString - startingAt: self startingStateForblock - onError: aBlock -] - -{ #category : #generated } -CSharpParser class >> reduceTable [ -^#( - #(178 0 #reduceActionFor_extern_alias_directives1: 6237185 false ) - #(564 0 #reduceActionFor_extern_alias_directives1: 49192961 false ) - #(231 0 #reduceActionForStartInterpolatedString1: 10823681 true ) - #(235 0 #reduceActionForStartInterpolatedVerbatimString1: 11426817 true ) - #(181 0 #reduceActionFor_extern_alias_directives1: 6496257 false ) - #(178 1 #reduceActionFor_extern_alias_directives2: 6237186 false ) - #(179 1 #reduceActionForextern_alias_directives1: 6296577 false ) - #(568 0 #reduceActionFor_attribute_target_specifier1: 49604609 false ) - #(189 1 #liftFirstValue: 7238657 false ) - #(189 1 #liftFirstValue: 7238658 false ) - #(190 1 #liftFirstValue: 7317505 false ) - #(190 1 #liftFirstValue: 7317506 false ) - #(190 1 #liftFirstValue: 7317507 false ) - #(190 1 #liftFirstValue: 7317508 false ) - #(190 1 #liftFirstValue: 7317509 false ) - #(407 0 #reduceActionFor_extern_alias_directives1: 31502337 false ) - #(555 0 #reduceActionFor_extern_alias_directives1: 48299009 false ) - #(548 0 #reduceActionFor_extern_alias_directives1: 47404033 false ) - #(523 0 #reduceActionFor_extern_alias_directives1: 44378113 false ) - #(509 0 #reduceActionFor_extern_alias_directives1: 42784769 false ) - #(564 1 #reduceActionFor_extern_alias_directives2: 49192962 false ) - #(565 1 #reduceActionFor_extern_alias_directives2: 49225729 false ) - #(566 1 #reduceActionForextern_alias_directives1: 49262593 false ) - #(351 1 #reduceActionForempty_statement1: 26205185 false ) - #(199 1 #reduceActionForsimple_type2: 8109058 false ) - #(243 1 #reduceActionForsimple_type2: 12394497 false ) - #(201 1 #liftFirstValue: 8248322 false ) - #(243 1 #reduceActionForsimple_type2: 12394498 false ) - #(201 1 #liftFirstValue: 8248329 false ) - #(243 1 #reduceActionForsimple_type2: 12394499 false ) - #(200 1 #liftFirstValue: 8177667 false ) - #(243 1 #reduceActionForsimple_type2: 12394500 false ) - #(307 0 #nil 22268929 false ) - #(202 1 #liftFirstValue: 8361986 false ) - #(243 1 #reduceActionForsimple_type2: 12394501 false ) - #(583 1 #liftFirstValue: 51257346 false ) - #(202 1 #liftFirstValue: 8361985 false ) - #(243 1 #reduceActionForsimple_type2: 12394502 false ) - #(201 1 #liftFirstValue: 8248325 false ) - #(243 1 #reduceActionForsimple_type2: 12394503 false ) - #(201 1 #liftFirstValue: 8248327 false ) - #(243 1 #reduceActionForsimple_type2: 12394504 false ) - #(207 1 #reduceActionForsimple_type2: 8615938 false ) - #(243 1 #reduceActionForsimple_type2: 12394505 false ) - #(341 0 #nil 25365505 false ) - #(201 1 #liftFirstValue: 8248321 false ) - #(243 1 #reduceActionForsimple_type2: 12394506 false ) - #(201 1 #liftFirstValue: 8248323 false ) - #(243 1 #reduceActionForsimple_type2: 12394507 false ) - #(207 1 #reduceActionForsimple_type2: 8615939 false ) - #(243 1 #reduceActionForsimple_type2: 12394508 false ) - #(247 1 #reduceActionForthis_access1: 13227009 false ) - #(583 1 #liftFirstValue: 51257345 false ) - #(201 1 #liftFirstValue: 8248326 false ) - #(243 1 #reduceActionForsimple_type2: 12394509 false ) - #(201 1 #liftFirstValue: 8248328 false ) - #(243 1 #reduceActionForsimple_type2: 12394510 false ) - #(201 1 #liftFirstValue: 8248324 false ) - #(243 1 #reduceActionForsimple_type2: 12394511 false ) - #(355 1 #reduceActionForlocal_variable_type2: 26534914 false ) - #(611 1 #reduceActionForvoid_type1: 54802433 false ) - #(349 0 #reduceActionFor_extern_alias_directives1: 26078209 false ) - #(238 0 #nil 11752449 false ) - #(413 1 #reduceActionFortype_parameter1: 32041985 false ) - #(582 1 #reduceActionForliteral2: 50907138 false ) - #(582 1 #reduceActionForliteral3: 50907139 false ) - #(582 1 #reduceActionForliteral4: 50907140 false ) - #(230 1 #reduceActionForinterpolated_regular_string1: 10588161 false ) - #(234 1 #reduceActionForinterpolated_regular_string1: 11175937 false ) - #(582 1 #reduceActionForliteral5: 50907141 false ) - #(582 1 #reduceActionForliteral6: 50907142 false ) - #(194 1 #liftFirstValue: 7666691 false ) - #(241 1 #reduceActionForqualified_alias_member_expression1: 12226561 false ) - #(216 1 #liftFirstValue: 9125889 false ) - #(208 1 #liftFirstValue: 8715265 false ) - #(205 1 #liftFirstValue: 8506369 false ) - #(198 1 #liftFirstValue: 8047617 false ) - #(207 1 #liftFirstValue: 8615937 false ) - #(193 1 #liftFirstValue: 7626753 false ) - #(593 1 #liftFirstValue: 52590593 false ) - #(204 1 #liftFirstValue: 8470529 false ) - #(210 1 #liftFirstValue: 8808449 false ) - #(355 1 #liftFirstValue: 26534913 false ) - #(196 1 #liftFirstValue: 7945217 false ) - #(197 1 #liftFirstValue: 8004609 false ) - #(198 1 #liftFirstValue: 8047618 false ) - #(199 1 #reduceActionForsimple_type2: 8109057 false ) - #(200 1 #liftFirstValue: 8177665 false ) - #(200 1 #liftFirstValue: 8177666 false ) - #(198 1 #liftFirstValue: 8047619 false ) - #(197 1 #liftFirstValue: 8004610 false ) - #(196 1 #liftFirstValue: 7945218 false ) - #(206 1 #liftFirstValue: 8532993 false ) - #(206 1 #liftFirstValue: 8532994 false ) - #(206 1 #liftFirstValue: 8532995 false ) - #(206 1 #liftFirstValue: 8532996 false ) - #(282 1 #liftFirstValue: 17002497 false ) - #(284 0 #nil 17586177 false ) - #(227 1 #liftFirstValue: 9826305 false ) - #(228 1 #liftFirstValue: 9919490 false ) - #(229 1 #reduceActionForinterpolated_string_expression1: 10478593 false ) - #(229 1 #reduceActionForinterpolated_string_expression1: 10478594 false ) - #(228 1 #liftFirstValue: 9919491 false ) - #(228 1 #liftFirstValue: 9919492 false ) - #(228 1 #liftFirstValue: 9919493 false ) - #(242 1 #reduceActionForqualified_alias_member_expression1: 12317697 false ) - #(228 1 #liftFirstValue: 9919494 false ) - #(364 1 #liftFirstValue: 27526145 false ) - #(228 1 #liftFirstValue: 9919495 false ) - #(228 1 #liftFirstValue: 9919496 false ) - #(228 1 #liftFirstValue: 9919497 false ) - #(228 1 #liftFirstValue: 9919498 false ) - #(364 1 #liftFirstValue: 27526149 false ) - #(228 1 #liftFirstValue: 9919499 false ) - #(364 1 #liftFirstValue: 27526150 false ) - #(228 1 #liftFirstValue: 9919500 false ) - #(364 1 #liftFirstValue: 27526147 false ) - #(227 1 #liftFirstValue: 9826306 false ) - #(228 1 #liftFirstValue: 9919501 false ) - #(228 1 #liftFirstValue: 9919502 false ) - #(228 1 #liftFirstValue: 9919503 false ) - #(228 1 #liftFirstValue: 9919504 false ) - #(228 1 #liftFirstValue: 9919505 false ) - #(228 1 #liftFirstValue: 9919506 false ) - #(228 1 #liftFirstValue: 9919507 false ) - #(282 1 #liftFirstValue: 17002498 false ) - #(364 1 #liftFirstValue: 27526146 false ) - #(282 1 #liftFirstValue: 17002503 false ) - #(364 1 #liftFirstValue: 27526151 false ) - #(282 1 #liftFirstValue: 17002504 false ) - #(364 1 #liftFirstValue: 27526152 false ) - #(282 1 #liftFirstValue: 17002505 false ) - #(282 1 #liftFirstValue: 17002506 false ) - #(364 1 #liftFirstValue: 27526153 false ) - #(228 1 #liftFirstValue: 9919508 false ) - #(364 1 #liftFirstValue: 27526148 false ) - #(346 1 #liftFirstValue: 25668611 false ) - #(347 1 #liftFirstValue: 25751553 false ) - #(347 1 #liftFirstValue: 25751554 false ) - #(346 1 #liftFirstValue: 25668609 false ) - #(346 1 #liftFirstValue: 25668610 false ) - #(347 1 #liftFirstValue: 25751555 false ) - #(347 1 #liftFirstValue: 25751556 false ) - #(365 1 #liftFirstValue: 27801601 false ) - #(365 1 #liftFirstValue: 27801602 false ) - #(347 1 #liftFirstValue: 25751557 false ) - #(374 1 #liftFirstValue: 28605441 false ) - #(374 1 #liftFirstValue: 28605442 false ) - #(374 1 #liftFirstValue: 28605443 false ) - #(374 1 #liftFirstValue: 28605444 false ) - #(347 1 #liftFirstValue: 25751558 false ) - #(386 1 #liftFirstValue: 29709313 false ) - #(386 1 #liftFirstValue: 29709314 false ) - #(386 1 #liftFirstValue: 29709315 false ) - #(386 1 #liftFirstValue: 29709316 false ) - #(386 1 #liftFirstValue: 29709317 false ) - #(347 1 #liftFirstValue: 25751559 false ) - #(347 1 #liftFirstValue: 25751560 false ) - #(347 1 #liftFirstValue: 25751561 false ) - #(347 1 #liftFirstValue: 25751562 false ) - #(347 1 #liftFirstValue: 25751563 false ) - #(347 1 #liftFirstValue: 25751564 false ) - #(196 1 #liftFirstValue: 7945219 false ) - #(228 1 #liftFirstValue: 9919489 false ) - #(582 1 #reduceActionForliteral1: 50907137 false ) - #(347 1 #liftFirstValue: 25751565 false ) - #(196 1 #liftFirstValue: 7945220 false ) - #(282 1 #liftFirstValue: 17002507 false ) - #(228 1 #liftFirstValue: 9919509 false ) - #(228 1 #liftFirstValue: 9919510 false ) - #(282 1 #liftFirstValue: 17002508 false ) - #(228 1 #liftFirstValue: 9919511 false ) - #(347 1 #liftFirstValue: 25751566 false ) - #(309 0 #reduceActionFor_explicit_anonymous_function_paramenter_list1: 22461441 false ) - #(315 0 #reduceActionFor_explicit_anonymous_function_paramenter_list1: 23239681 false ) - #(312 0 #nil 22921217 false ) - #(195 0 #nil 7917569 false ) - #(317 1 #liftFirstValue: 23532545 false ) - #(292 1 #liftFirstValue: 19116033 false ) - #(293 1 #liftFirstValue: 19464193 false ) - #(294 1 #liftFirstValue: 19722241 false ) - #(295 1 #liftFirstValue: 19956737 false ) - #(296 1 #liftFirstValue: 20554753 false ) - #(297 1 #liftFirstValue: 20802561 false ) - #(298 1 #liftFirstValue: 20935681 false ) - #(299 1 #liftFirstValue: 21076993 false ) - #(300 1 #liftFirstValue: 21236737 false ) - #(301 1 #liftFirstValue: 21403649 false ) - #(302 1 #liftFirstValue: 21574657 false ) - #(303 1 #liftFirstValue: 21745665 false ) - #(343 1 #liftFirstValue: 25472001 false ) - #(343 1 #liftFirstValue: 25472002 false ) - #(306 1 #liftFirstValue: 22152193 false ) - #(306 1 #liftFirstValue: 22152194 false ) - #(314 1 #reduceActionForimplicit_anonymous_function_signature2: 23081986 false ) - #(343 1 #liftFirstValue: 25472003 false ) - #(322 0 #reduceActionFor_query_body_clauses1: 23851009 false ) - #(342 1 #liftFirstValue: 25411586 false ) - #(342 1 #liftFirstValue: 25411585 false ) - #(428 1 #liftFirstValue: 33982475 false ) - #(428 1 #liftFirstValue: 33982465 false ) - #(428 1 #liftFirstValue: 33982466 false ) - #(428 1 #liftFirstValue: 33982467 false ) - #(428 1 #liftFirstValue: 33982468 false ) - #(428 1 #liftFirstValue: 33982469 false ) - #(428 1 #liftFirstValue: 33982470 false ) - #(428 1 #liftFirstValue: 33982471 false ) - #(428 1 #liftFirstValue: 33982472 false ) - #(428 1 #liftFirstValue: 33982474 false ) - #(482 0 #reduceActionFor_extern_alias_directives1: 39504897 false ) - #(444 0 #reduceActionFor_extern_alias_directives1: 35759105 false ) - #(436 0 #reduceActionFor_extern_alias_directives1: 34936833 false ) - #(460 0 #reduceActionFor_extern_alias_directives1: 37159937 false ) - #(430 0 #reduceActionFor_extern_alias_directives1: 34395137 false ) - #(475 0 #reduceActionFor_extern_alias_directives1: 38740993 false ) - #(590 0 #nil 52130817 false ) - #(587 0 #nil 51407873 false ) - #(498 0 #reduceActionFor_extern_alias_directives1: 41507841 false ) - #(428 1 #liftFirstValue: 33982473 false ) - #(558 0 #reduceActionFor_extern_alias_directives1: 48563201 false ) - #(181 1 #reduceActionFor_extern_alias_directives2: 6496258 false ) - #(182 1 #reduceActionForextern_alias_directives1: 6541313 false ) - #(183 1 #liftFirstValue: 6642689 false ) - #(183 1 #liftFirstValue: 6642690 false ) - #(183 1 #liftFirstValue: 6642691 false ) - #(179 2 #reduceActionForextern_alias_directives2: 6296578 false ) - #(570 1 #liftFirstValue: 49743874 false ) - #(570 1 #liftFirstValue: 49743873 false ) - #(570 1 #liftFirstValue: 49743875 false ) - #(570 1 #liftFirstValue: 49743876 false ) - #(570 1 #liftFirstValue: 49743877 false ) - #(570 1 #liftFirstValue: 49743878 false ) - #(570 1 #liftFirstValue: 49743879 false ) - #(568 1 #reduceActionFor_extern_alias_directives2: 49604610 false ) - #(176 1 #reduceActionForqualified_identifier1: 6014977 false ) - #(409 1 #liftFirstValue: 31640582 false ) - #(409 1 #liftFirstValue: 31640580 false ) - #(557 1 #liftFirstValue: 48455684 false ) - #(550 1 #liftFirstValue: 47529988 false ) - #(525 1 #liftFirstValue: 44540932 false ) - #(511 1 #liftFirstValue: 42930180 false ) - #(409 1 #liftFirstValue: 31640577 false ) - #(557 1 #liftFirstValue: 48455681 false ) - #(550 1 #liftFirstValue: 47529985 false ) - #(525 1 #liftFirstValue: 44540929 false ) - #(511 1 #liftFirstValue: 42930177 false ) - #(409 1 #liftFirstValue: 31640581 false ) - #(557 1 #liftFirstValue: 48455685 false ) - #(550 1 #liftFirstValue: 47529989 false ) - #(525 1 #liftFirstValue: 44540933 false ) - #(511 1 #liftFirstValue: 42930181 false ) - #(409 1 #liftFirstValue: 31640579 false ) - #(557 1 #liftFirstValue: 48455683 false ) - #(550 1 #liftFirstValue: 47529987 false ) - #(525 1 #liftFirstValue: 44540931 false ) - #(511 1 #liftFirstValue: 42930179 false ) - #(409 1 #liftFirstValue: 31640578 false ) - #(557 1 #liftFirstValue: 48455682 false ) - #(550 1 #liftFirstValue: 47529986 false ) - #(525 1 #liftFirstValue: 44540930 false ) - #(511 1 #liftFirstValue: 42930178 false ) - #(409 1 #liftFirstValue: 31640583 false ) - #(409 1 #liftFirstValue: 31640584 false ) - #(409 1 #liftFirstValue: 31640585 false ) - #(557 1 #liftFirstValue: 48455686 false ) - #(525 1 #liftFirstValue: 44540934 false ) - #(511 1 #liftFirstValue: 42930182 false ) - #(586 0 #nil 51363841 false ) - #(407 1 #reduceActionFor_extern_alias_directives2: 31502338 false ) - #(408 1 #reduceActionForextern_alias_directives1: 31545345 false ) - #(509 1 #reduceActionFor_extern_alias_directives2: 42784770 false ) - #(510 1 #reduceActionForextern_alias_directives1: 42830849 false ) - #(523 1 #reduceActionFor_extern_alias_directives2: 44378114 false ) - #(524 1 #reduceActionForextern_alias_directives1: 44429313 false ) - #(548 1 #reduceActionFor_extern_alias_directives2: 47404034 false ) - #(549 1 #reduceActionForextern_alias_directives1: 47442945 false ) - #(555 1 #reduceActionFor_extern_alias_directives2: 48299010 false ) - #(556 1 #reduceActionForextern_alias_directives1: 48348161 false ) - #(566 2 #reduceActionForextern_alias_directives2: 49262594 false ) - #(282 2 #reduceActionForunary_expression5: 17002501 false ) - #(597 2 #reduceActionForunary_expression5: 53146625 false ) - #(594 2 #reduceActionForunary_expression5: 52811777 false ) - #(282 2 #reduceActionForunary_expression5: 17002499 false ) - #(288 2 #reduceActionForunary_expression5: 18768897 false ) - #(282 2 #reduceActionForunary_expression5: 17002500 false ) - #(289 2 #reduceActionForunary_expression5: 18869249 false ) - #(291 2 #reduceActionForawait_expression1: 19048449 false ) - #(387 2 #reduceActionForbreak_statement1: 29828097 false ) - #(400 2 #reduceActionForchecked_statement1: 30799873 false ) - #(388 2 #reduceActionForcontinue_statement1: 29868033 false ) - #(307 1 #liftFirstValue: 22268930 false ) - #(378 0 #nil 29053953 false ) - #(214 0 #reduceActionFor_extern_alias_directives1: 9035777 false ) - #(267 0 #reduceActionFor_explicit_anonymous_function_paramenter_list1: 15475713 false ) - #(265 2 #reduceActionForanonymous_object_creation_expression1: 15264769 false ) - #(341 1 #liftFirstValue: 25365506 false ) - #(401 2 #reduceActionForunchecked_statement1: 30854145 false ) - #(591 2 #reduceActionForunsafe_statement1: 52417537 false ) - #(350 1 #reduceActionForextern_alias_directives1: 26120193 false ) - #(349 1 #reduceActionFor_extern_alias_directives2: 26078210 false ) - #(282 2 #reduceActionForunary_expression5: 17002502 false ) - #(238 1 #liftFirstValue: 11752450 false ) - #(237 2 #reduceActionForsimple_name1: 11678721 false ) - #(194 2 #reduceActionFornamespace_or_type_name1: 7666689 false ) - #(203 2 #reduceActionFornullable_type1: 8409089 false ) - #(209 2 #reduceActionForarray_type1: 8747009 false ) - #(212 1 #reduceActionForextern_alias_directives1: 8879105 false ) - #(224 0 #reduceActionFor_attribute_target_specifier1: 9604097 false ) - #(221 0 #reduceActionFor_explicit_anonymous_function_paramenter_list1: 9421825 false ) - #(249 2 #reduceActionForpost_increment_expression1: 13359105 false ) - #(250 2 #reduceActionForpost_increment_expression1: 13460481 false ) - #(283 2 #reduceActionFornull_conditional_expression1: 17457153 false ) - #(284 1 #liftFirstValue: 17586178 false ) - #(340 1 #liftFirstValue: 25250822 false ) - #(340 1 #liftFirstValue: 25250823 false ) - #(340 1 #liftFirstValue: 25250820 false ) - #(340 1 #liftFirstValue: 25250818 false ) - #(340 1 #liftFirstValue: 25250819 false ) - #(340 1 #liftFirstValue: 25250821 false ) - #(340 1 #liftFirstValue: 25250826 false ) - #(340 1 #liftFirstValue: 25250817 false ) - #(340 1 #liftFirstValue: 25250827 false ) - #(340 1 #liftFirstValue: 25250825 false ) - #(340 1 #liftFirstValue: 25250824 false ) - #(353 2 #reduceActionFordeclaration_statement1: 26306561 false ) - #(358 1 #reduceActionFor_local_variable_declarator_name1: 27012097 false ) - #(354 2 #reduceActionForlocal_variable_declaration1: 26440705 false ) - #(356 1 #reduceActionForinterpolated_regular_string1: 26588161 false ) - #(357 1 #reduceActionForlocal_variable_declarator1: 26736641 false ) - #(353 2 #reduceActionFordeclaration_statement1: 26306562 false ) - #(363 2 #reduceActionForexpression_statement1: 27454465 false ) - #(592 2 #reduceActionForpointer_type1: 52509697 false ) - #(592 2 #reduceActionForpointer_type1: 52509698 false ) - #(313 1 #liftFirstValue: 23021570 false ) - #(313 1 #liftFirstValue: 23021569 false ) - #(309 1 #reduceActionFor_extern_alias_directives2: 22461442 false ) - #(310 1 #reduceActionForinterpolated_regular_string1: 22562817 false ) - #(312 1 #liftFirstValue: 22921218 false ) - #(315 1 #reduceActionFor_extern_alias_directives2: 23239682 false ) - #(316 1 #reduceActionForinterpolated_regular_string1: 23339009 false ) - #(195 1 #liftFirstValue: 7917570 false ) - #(324 1 #reduceActionForquery_body_clause1: 23986177 false ) - #(319 2 #reduceActionForquery_expression1: 23642113 false ) - #(322 1 #reduceActionFor_extern_alias_directives2: 23851010 false ) - #(323 1 #reduceActionForquery_body_clauses1: 23901185 false ) - #(324 1 #reduceActionForquery_body_clause2: 23986178 false ) - #(324 1 #reduceActionForquery_body_clause3: 23986179 false ) - #(324 1 #reduceActionForquery_body_clause4: 23986180 false ) - #(324 1 #reduceActionForquery_body_clause5: 23986181 false ) - #(324 1 #reduceActionForquery_body_clause6: 23986182 false ) - #(449 1 #reduceActionFormethod_body3: 36198403 false ) - #(449 1 #reduceActionFormethod_body1: 36198401 false ) - #(442 2 #reduceActionFormethod_declaration1: 35490817 false ) - #(484 1 #liftFirstValue: 39655433 false ) - #(462 1 #liftFirstValue: 37316618 false ) - #(477 1 #liftFirstValue: 38879242 false ) - #(446 1 #liftFirstValue: 35904522 false ) - #(484 1 #liftFirstValue: 39655434 false ) - #(462 1 #liftFirstValue: 37316619 false ) - #(477 1 #liftFirstValue: 38879243 false ) - #(446 1 #liftFirstValue: 35904523 false ) - #(489 1 #liftFirstValue: 40287235 false ) - #(500 1 #liftFirstValue: 41683973 false ) - #(587 1 #liftFirstValue: 51407874 false ) - #(484 1 #liftFirstValue: 39655428 false ) - #(477 1 #liftFirstValue: 38879236 false ) - #(462 1 #liftFirstValue: 37316612 false ) - #(446 1 #liftFirstValue: 35904516 false ) - #(438 1 #liftFirstValue: 35076100 false ) - #(432 1 #liftFirstValue: 34547716 false ) - #(500 1 #liftFirstValue: 41683971 false ) - #(462 1 #liftFirstValue: 37316609 false ) - #(477 1 #liftFirstValue: 38879233 false ) - #(484 1 #liftFirstValue: 39655425 false ) - #(446 1 #liftFirstValue: 35904513 false ) - #(438 1 #liftFirstValue: 35076097 false ) - #(432 1 #liftFirstValue: 34547713 false ) - #(462 1 #liftFirstValue: 37316617 false ) - #(446 1 #liftFirstValue: 35904521 false ) - #(477 1 #liftFirstValue: 38879241 false ) - #(484 1 #liftFirstValue: 39655432 false ) - #(462 1 #liftFirstValue: 37316613 false ) - #(446 1 #liftFirstValue: 35904517 false ) - #(477 1 #liftFirstValue: 38879237 false ) - #(484 1 #liftFirstValue: 39655429 false ) - #(438 1 #liftFirstValue: 35076101 false ) - #(432 1 #liftFirstValue: 34547717 false ) - #(500 1 #liftFirstValue: 41683972 false ) - #(477 1 #liftFirstValue: 38879235 false ) - #(462 1 #liftFirstValue: 37316611 false ) - #(446 1 #liftFirstValue: 35904515 false ) - #(484 1 #liftFirstValue: 39655427 false ) - #(438 1 #liftFirstValue: 35076099 false ) - #(432 1 #liftFirstValue: 34547715 false ) - #(500 1 #liftFirstValue: 41683970 false ) - #(484 1 #liftFirstValue: 39655426 false ) - #(462 1 #liftFirstValue: 37316610 false ) - #(446 1 #liftFirstValue: 35904514 false ) - #(477 1 #liftFirstValue: 38879234 false ) - #(489 1 #liftFirstValue: 40287233 false ) - #(438 1 #liftFirstValue: 35076098 false ) - #(432 1 #liftFirstValue: 34547714 false ) - #(500 1 #liftFirstValue: 41683969 false ) - #(438 1 #liftFirstValue: 35076103 false ) - #(446 1 #liftFirstValue: 35904520 false ) - #(477 1 #liftFirstValue: 38879240 false ) - #(462 1 #liftFirstValue: 37316616 false ) - #(484 1 #liftFirstValue: 39655431 false ) - #(446 1 #liftFirstValue: 35904518 false ) - #(462 1 #liftFirstValue: 37316614 false ) - #(477 1 #liftFirstValue: 38879238 false ) - #(489 1 #liftFirstValue: 40287234 false ) - #(438 1 #liftFirstValue: 35076102 false ) - #(446 1 #liftFirstValue: 35904524 false ) - #(462 1 #liftFirstValue: 37316620 false ) - #(484 1 #liftFirstValue: 39655435 false ) - #(477 1 #liftFirstValue: 38879244 false ) - #(489 1 #liftFirstValue: 40287236 false ) - #(438 1 #liftFirstValue: 35076105 false ) - #(500 1 #liftFirstValue: 41683974 false ) - #(590 1 #liftFirstValue: 52130818 false ) - #(462 1 #liftFirstValue: 37316615 false ) - #(484 1 #liftFirstValue: 39655430 false ) - #(446 1 #liftFirstValue: 35904519 false ) - #(477 1 #liftFirstValue: 38879239 false ) - #(438 1 #liftFirstValue: 35076104 false ) - #(430 1 #reduceActionFor_extern_alias_directives2: 34395138 false ) - #(431 1 #reduceActionForextern_alias_directives1: 34444289 false ) - #(436 1 #reduceActionFor_extern_alias_directives2: 34936834 false ) - #(437 1 #reduceActionForextern_alias_directives1: 34980865 false ) - #(444 1 #reduceActionFor_extern_alias_directives2: 35759106 false ) - #(445 1 #reduceActionForextern_alias_directives1: 35805185 false ) - #(460 1 #reduceActionFor_extern_alias_directives2: 37159938 false ) - #(461 1 #reduceActionForextern_alias_directives1: 37209089 false ) - #(475 1 #reduceActionFor_extern_alias_directives2: 38740994 false ) - #(476 1 #reduceActionForextern_alias_directives1: 38784001 false ) - #(482 1 #reduceActionFor_extern_alias_directives2: 39504898 false ) - #(483 1 #reduceActionForextern_alias_directives1: 39552001 false ) - #(488 1 #reduceActionForextern_alias_directives1: 40179713 false ) - #(498 1 #reduceActionFor_extern_alias_directives2: 41507842 false ) - #(499 1 #reduceActionForextern_alias_directives1: 41564161 false ) - #(192 1 #liftFirstValue: 7581697 false ) - #(187 0 #reduceActionFor_extern_alias_directives1: 7007233 false ) - #(558 1 #reduceActionFor_extern_alias_directives2: 48563202 false ) - #(559 1 #reduceActionFor_extern_alias_directives2: 48610305 false ) - #(560 1 #reduceActionForextern_alias_directives1: 48661505 false ) - #(182 2 #reduceActionForextern_alias_directives2: 6541314 false ) - #(573 1 #liftFirstValue: 50034689 false ) - #(571 1 #reduceActionForinterpolated_regular_string1: 49847297 false ) - #(574 0 #reduceActionFor_attribute_arguments1: 50066433 false ) - #(569 2 #reduceActionForattribute_target_specifier1: 49671169 false ) - #(584 0 #nil 51306497 false ) - #(586 1 #liftFirstValue: 51363842 false ) - #(408 2 #reduceActionForextern_alias_directives2: 31545346 false ) - #(510 2 #reduceActionForextern_alias_directives2: 42830850 false ) - #(524 2 #reduceActionForextern_alias_directives2: 44429314 false ) - #(549 2 #reduceActionForextern_alias_directives2: 47442946 false ) - #(556 2 #reduceActionForextern_alias_directives2: 48348162 false ) - #(239 3 #reduceActionForparenthesized_expression1: 11802625 false ) - #(248 3 #reduceActionForbase_access1: 13257729 false ) - #(246 1 #reduceActionForinterpolated_regular_string1: 13131777 false ) - #(360 3 #reduceActionForlocal_constant_declaration1: 27176961 false ) - #(361 1 #reduceActionForinterpolated_regular_string1: 27254785 false ) - #(305 3 #reduceActionForanonymous_method_expression1: 22034433 false ) - #(379 1 #liftFirstValue: 29112321 false ) - #(384 1 #reduceActionForinterpolated_regular_string1: 29415425 false ) - #(378 1 #liftFirstValue: 29053954 false ) - #(379 1 #reduceActionForfor_initializer2: 29112322 false ) - #(344 1 #liftFirstValue: 25573377 false ) - #(389 3 #reduceActionForgoto_statement3: 29914115 false ) - #(389 3 #reduceActionForgoto_statement1: 29914113 false ) - #(345 1 #liftFirstValue: 25611265 false ) - #(281 1 #reduceActionFornamed_entity_target2: 16837634 false ) - #(281 1 #reduceActionForthis_access1: 16837633 false ) - #(280 1 #liftFirstValue: 16713729 false ) - #(281 1 #liftFirstValue: 16837637 false ) - #(281 1 #liftFirstValue: 16837636 false ) - #(281 1 #liftFirstValue: 16837635 false ) - #(215 1 #reduceActionForextern_alias_directives1: 9077761 false ) - #(214 1 #reduceActionFor_extern_alias_directives2: 9035778 false ) - #(269 1 #reduceActionFormember_declarator1: 15657985 false ) - #(269 1 #reduceActionFormember_declarator2: 15657986 false ) - #(269 1 #reduceActionFormember_declarator2: 15657987 false ) - #(267 1 #reduceActionFor_extern_alias_directives2: 15475714 false ) - #(268 1 #reduceActionForinterpolated_regular_string1: 15534081 false ) - #(269 1 #reduceActionFormember_declarator2: 15657988 false ) - #(255 0 #reduceActionFor_explicit_anonymous_function_paramenter_list1: 14058497 false ) - #(251 3 #reduceActionForobject_creation_expression2: 13561858 false ) - #(253 1 #liftFirstValue: 13844481 false ) - #(253 1 #liftFirstValue: 13844482 false ) - #(520 0 #reduceActionFor_explicit_anonymous_function_paramenter_list1: 43857921 false ) - #(263 3 #reduceActionForarray_creation_expression2: 14861314 false ) - #(263 3 #reduceActionForarray_creation_expression3: 14861315 false ) - #(390 3 #reduceActionForreturn_statement1: 30055425 false ) - #(391 3 #reduceActionForthrow_statement1: 30109697 false ) - #(395 0 #reduceActionFor_exception_specifier1: 30515201 false ) - #(392 3 #reduceActionFortry_statement1: 30161921 false ) - #(393 1 #reduceActionForextern_alias_directives1: 30345217 false ) - #(392 3 #reduceActionFortry_statement2: 30161922 false ) - #(272 0 #reduceActionFor_generic_dimension_specifier1: 16232449 false ) - #(404 1 #liftFirstValue: 31121410 false ) - #(404 1 #liftFirstValue: 31121409 false ) - #(405 3 #reduceActionForyield_statement2: 31191042 false ) - #(348 3 #reduceActionForblock1: 26012673 false ) - #(350 2 #reduceActionForextern_alias_directives2: 26120194 false ) - #(352 3 #reduceActionForlabeled_statement1: 26236929 false ) - #(219 1 #liftFirstValue: 9318401 false ) - #(218 1 #reduceActionForinterpolated_regular_string1: 9231361 false ) - #(212 2 #reduceActionForextern_alias_directives2: 8879106 false ) - #(221 1 #reduceActionFor_extern_alias_directives2: 9421826 false ) - #(222 1 #reduceActionForinterpolated_regular_string1: 9469953 false ) - #(224 1 #reduceActionFor_extern_alias_directives2: 9604098 false ) - #(595 3 #reduceActionForpointer_member_access1: 52917249 false ) - #(232 1 #reduceActionForinterpolated_regular_string_body1: 10876929 false ) - #(233 1 #reduceActionForinterpolation1: 11057153 false ) - #(236 1 #reduceActionForinterpolated_regular_string_body1: 11496449 false ) - #(240 3 #reduceActionFormember_access3: 11896835 false ) - #(339 3 #reduceActionForassignment1: 25155585 false ) - #(308 3 #reduceActionForexplicit_anonymous_function_signature1: 22356993 false ) - #(314 3 #reduceActionForimplicit_anonymous_function_signature1: 23081985 false ) - #(292 3 #reduceActionFormultiplicative_expression4: 19116036 false ) - #(292 3 #reduceActionFormultiplicative_expression4: 19116034 false ) - #(292 3 #reduceActionFormultiplicative_expression4: 19116035 false ) - #(293 3 #reduceActionFormultiplicative_expression4: 19464194 false ) - #(293 3 #reduceActionFormultiplicative_expression4: 19464195 false ) - #(294 3 #reduceActionFormultiplicative_expression4: 19722242 false ) - #(294 3 #reduceActionFormultiplicative_expression4: 19722243 false ) - #(295 3 #reduceActionFormultiplicative_expression4: 19956738 false ) - #(295 3 #reduceActionFormultiplicative_expression4: 19956740 false ) - #(295 3 #reduceActionFormultiplicative_expression4: 19956741 false ) - #(295 3 #reduceActionFormultiplicative_expression4: 19956743 false ) - #(295 3 #reduceActionFormultiplicative_expression4: 19956742 false ) - #(295 3 #reduceActionFormultiplicative_expression4: 19956739 false ) - #(296 3 #reduceActionFormultiplicative_expression4: 20554755 false ) - #(296 3 #reduceActionFormultiplicative_expression4: 20554754 false ) - #(297 3 #reduceActionFormultiplicative_expression4: 20802562 false ) - #(298 3 #reduceActionFormultiplicative_expression4: 20935682 false ) - #(299 3 #reduceActionFormultiplicative_expression4: 21076994 false ) - #(300 3 #reduceActionFormultiplicative_expression4: 21236738 false ) - #(302 3 #reduceActionFormultiplicative_expression4: 21574658 false ) - #(301 3 #reduceActionFormultiplicative_expression4: 21403650 false ) - #(304 3 #reduceActionForlambda_expression1: 21925889 false ) - #(318 1 #liftFirstValue: 23590913 false ) - #(318 1 #liftFirstValue: 23590914 false ) - #(329 2 #reduceActionFororderby_clause1: 24580097 false ) - #(330 1 #reduceActionFororderings1: 24622081 false ) - #(332 0 #reduceActionFor_attribute_target_specifier1: 24734721 false ) - #(326 2 #reduceActionForattribute_target_specifier1: 24173569 false ) - #(337 0 #reduceActionFor_query_continuation1: 25048065 false ) - #(334 1 #reduceActionForselect_or_group_clause1: 24839169 false ) - #(334 1 #reduceActionForselect_or_group_clause2: 24839170 false ) - #(323 2 #reduceActionForquery_body_clauses2: 23901186 false ) - #(506 2 #reduceActionForstatic_constructor_modifiers2: 42276866 false ) - #(431 2 #reduceActionForextern_alias_directives2: 34444290 false ) - #(437 2 #reduceActionForextern_alias_directives2: 34980866 false ) - #(445 2 #reduceActionForextern_alias_directives2: 35805186 false ) - #(461 2 #reduceActionForextern_alias_directives2: 37209090 false ) - #(476 2 #reduceActionForextern_alias_directives2: 38784002 false ) - #(483 2 #reduceActionForextern_alias_directives2: 39552002 false ) - #(488 2 #reduceActionForextern_alias_directives2: 40179714 false ) - #(490 1 #reduceActionForoperator_declarator1: 40345601 false ) - #(490 1 #reduceActionForoperator_declarator2: 40345602 false ) - #(490 1 #reduceActionForoperator_declarator3: 40345603 false ) - #(499 2 #reduceActionForextern_alias_directives2: 41564162 false ) - #(506 2 #reduceActionForstatic_constructor_modifiers1: 42276865 false ) - #(180 4 #reduceActionForextern_alias_directive1: 6426625 false ) - #(185 3 #reduceActionForusing_namespace_directive1: 6850561 false ) - #(563 1 #liftFirstValue: 49138689 false ) - #(563 1 #liftFirstValue: 49138690 false ) - #(174 4 #reduceActionForcompilation_unit1: 5783553 false ) - #(187 1 #reduceActionFor_extern_alias_directives2: 7007234 false ) - #(188 1 #reduceActionForextern_alias_directives1: 7079937 false ) - #(560 2 #reduceActionForextern_alias_directives2: 48661506 false ) - #(567 4 #reduceActionForattribute_section1: 49372161 false ) - #(576 0 #reduceActionFor_explicit_anonymous_function_paramenter_list1: 50358273 false ) - #(572 2 #reduceActionForattribute1: 49954817 false ) - #(574 1 #reduceActionFor_attribute_arguments2: 50066434 false ) - #(176 3 #reduceActionForqualified_identifier2: 6014978 false ) - #(584 1 #liftFirstValue: 51306498 false ) - #(175 4 #reduceActionFornamespace_declaration1: 5907457 false ) - #(545 0 #reduceActionFor_attribute_target_specifier1: 47156225 false ) - #(447 1 #liftFirstValue: 36067329 false ) - #(447 1 #liftFirstValue: 36067330 false ) - #(290 4 #reduceActionForcast_expression1: 18969601 false ) - #(248 4 #reduceActionForbase_access2: 13257730 false ) - #(276 4 #reduceActionForchecked_expression1: 16427009 false ) - #(278 4 #reduceActionFordefault_value_expression1: 16578561 false ) - #(600 1 #reduceActionForinterpolated_regular_string1: 53476353 false ) - #(380 0 #nil 29210625 false ) - #(389 4 #reduceActionForgoto_statement2: 29914114 false ) - #(279 4 #reduceActionFornameof_expression1: 16646145 false ) - #(213 3 #reduceActionForrank_specifier1: 8984577 false ) - #(215 2 #reduceActionForextern_alias_directives2: 9077762 false ) - #(266 3 #reduceActionForanonymous_object_initializer1: 15349761 false ) - #(258 1 #reduceActionForinitializer_target1: 14329857 false ) - #(255 1 #reduceActionFor_extern_alias_directives2: 14058498 false ) - #(256 1 #reduceActionForinterpolated_regular_string1: 14118913 false ) - #(261 1 #reduceActionForinterpolated_regular_string1: 14613505 false ) - #(262 1 #reduceActionForelement_initializer1: 14747649 false ) - #(441 1 #liftFirstValue: 35430401 false ) - #(521 1 #reduceActionForinterpolated_regular_string1: 43921409 false ) - #(441 1 #liftFirstValue: 35430402 false ) - #(520 1 #reduceActionFor_extern_alias_directives2: 43857922 false ) - #(598 4 #reduceActionForsizeof_expression1: 53241857 false ) - #(397 0 #nil 30625793 false ) - #(395 1 #reduceActionFor_extern_alias_directives2: 30515202 false ) - #(399 2 #reduceActionForfinally_clause1: 30748673 false ) - #(393 2 #reduceActionForextern_alias_directives2: 30345218 false ) - #(392 4 #reduceActionFortry_statement3: 30161923 false ) - #(274 0 #reduceActionFor_extern_alias_directives1: 16353281 false ) - #(271 2 #reduceActionForunbound_type_name1: 16016385 false ) - #(272 1 #reduceActionFor_extern_alias_directives2: 16232450 false ) - #(270 4 #reduceActionFortypeof_expression1: 15862785 false ) - #(270 4 #reduceActionFortypeof_expression1: 15862786 false ) - #(270 4 #reduceActionFortypeof_expression1: 15862787 false ) - #(277 4 #reduceActionForunchecked_expression1: 16500737 false ) - #(405 4 #reduceActionForyield_statement1: 31191041 false ) - #(191 4 #reduceActionForqualified_alias_member1: 7452673 false ) - #(217 3 #reduceActionFortype_argument_list1: 9156609 false ) - #(194 4 #reduceActionFornamespace_or_type_name2: 7666690 false ) - #(225 2 #reduceActionForattribute_target_specifier1: 9643009 false ) - #(244 4 #reduceActionForinvocation_expression1: 12935169 false ) - #(223 2 #reduceActionForargument1: 9552897 false ) - #(226 1 #reduceActionForargument_value1: 9694209 false ) - #(240 4 #reduceActionFormember_access1: 11896833 false ) - #(245 4 #reduceActionForelement_access1: 13025281 false ) - #(596 4 #reduceActionForpointer_element_access1: 53022721 false ) - #(230 4 #reduceActionForinterpolated_regular_string2: 10588162 false ) - #(234 4 #reduceActionForinterpolated_regular_string2: 11175938 false ) - #(240 4 #reduceActionFormember_access1: 11896834 false ) - #(356 3 #reduceActionForlocal_variable_declarators2: 26588162 false ) - #(359 1 #liftFirstValue: 27110401 false ) - #(357 3 #reduceActionForlocal_variable_declarator2: 26736642 false ) - #(359 1 #liftFirstValue: 27110402 false ) - #(359 1 #liftFirstValue: 27110403 false ) - #(310 3 #reduceActionForlocal_variable_declarators2: 22562818 false ) - #(311 3 #reduceActionForexplicit_anonymous_function_paramenter1: 22770689 false ) - #(316 3 #reduceActionForlocal_variable_declarators2: 23339010 false ) - #(333 1 #reduceActionForordering_direction1: 24784897 false ) - #(333 1 #reduceActionForordering_direction2: 24784898 false ) - #(331 2 #reduceActionForordering1: 24674305 false ) - #(332 1 #reduceActionFor_extern_alias_directives2: 24734722 false ) - #(335 2 #reduceActionForattribute_target_specifier1: 24899585 false ) - #(321 3 #reduceActionForquery_body1: 23769089 false ) - #(337 1 #reduceActionFor_extern_alias_directives2: 25048066 false ) - #(449 3 #reduceActionFormethod_body2: 36198402 false ) - #(506 3 #reduceActionForstatic_constructor_modifiers7: 42276871 false ) - #(506 3 #reduceActionForstatic_constructor_modifiers7: 42276872 false ) - #(440 1 #reduceActionForvariable_declarator1: 35323905 false ) - #(439 1 #reduceActionForinterpolated_regular_string1: 35200001 false ) - #(448 1 #reduceActionForargument_value1: 36104193 false ) - #(481 4 #reduceActionForindexer_declaration1: 39408641 false ) - #(496 1 #reduceActionFormethod_body3: 41270275 false ) - #(496 1 #reduceActionFormethod_body1: 41270273 false ) - #(487 4 #reduceActionForoperator_declaration1: 40073217 false ) - #(450 0 #reduceActionFor_explicit_anonymous_function_paramenter_list1: 36290561 false ) - #(504 1 #reduceActionForordering_direction2: 42065922 false ) - #(504 1 #reduceActionForordering_direction1: 42065921 false ) - #(497 4 #reduceActionForconstructor_declaration1: 41395201 false ) - #(506 3 #reduceActionForstatic_constructor_modifiers5: 42276869 false ) - #(506 3 #reduceActionForstatic_constructor_modifiers3: 42276867 false ) - #(506 3 #reduceActionForstatic_constructor_modifiers6: 42276870 false ) - #(506 3 #reduceActionForstatic_constructor_modifiers3: 42276868 false ) - #(186 4 #reduceActionForusing_static_directive1: 6928385 false ) - #(562 2 #reduceActionForattribute_target_specifier1: 49051649 false ) - #(188 2 #reduceActionForextern_alias_directives2: 7079938 false ) - #(567 5 #reduceActionForattribute_section2: 49372162 false ) - #(571 3 #reduceActionForlocal_variable_declarators2: 49847298 false ) - #(581 1 #liftFirstValue: 50840577 false ) - #(576 1 #reduceActionFor_extern_alias_directives2: 50358274 false ) - #(577 1 #reduceActionForinterpolated_regular_string1: 50419713 false ) - #(579 1 #reduceActionForinterpolated_regular_string1: 50613249 false ) - #(578 1 #liftFirstValue: 50555905 false ) - #(410 0 #nil 31763457 false ) - #(526 0 #nil 44627969 false ) - #(545 1 #reduceActionFor_extern_alias_directives2: 47156226 false ) - #(246 3 #reduceActionForlocal_variable_declarators2: 13131778 false ) - #(362 3 #reduceActionForconst_declarator1: 27367425 false ) - #(361 3 #reduceActionForlocal_variable_declarators2: 27254786 false ) - #(381 1 #liftFirstValue: 29261825 false ) - #(380 1 #liftFirstValue: 29210626 false ) - #(384 3 #reduceActionForlocal_variable_declarators2: 29415426 false ) - #(366 5 #reduceActionForif_statement1: 27862017 false ) - #(402 5 #reduceActionForlock_statement1: 30912513 false ) - #(269 3 #reduceActionFormember_declarator5: 15657989 false ) - #(266 4 #reduceActionForanonymous_object_initializer2: 15349762 false ) - #(268 3 #reduceActionForlocal_variable_declarators2: 15534082 false ) - #(252 0 #nil 13766657 false ) - #(254 3 #reduceActionForobject_initializer1: 13930497 false ) - #(260 3 #reduceActionForcollection_initializer1: 14480385 false ) - #(519 3 #reduceActionForarray_initializer1: 43726849 false ) - #(211 0 #reduceActionFor_extern_alias_directives1: 8835073 false ) - #(264 5 #reduceActionFordelegate_creation_expression1: 15163393 false ) - #(369 0 #reduceActionFor_extern_alias_directives1: 28239873 false ) - #(367 5 #reduceActionForswitch_statement1: 28101633 false ) - #(588 0 #nil 51445761 false ) - #(397 1 #liftFirstValue: 30625794 false ) - #(275 1 #reduceActionForextern_alias_directives1: 16378881 false ) - #(274 1 #reduceActionFor_extern_alias_directives2: 16353282 false ) - #(403 5 #reduceActionForusing_statement1: 31010817 false ) - #(375 5 #reduceActionForwhile_statement1: 28703745 false ) - #(218 3 #reduceActionForlocal_variable_declarators2: 9231362 false ) - #(222 3 #reduceActionForlocal_variable_declarators2: 9469954 false ) - #(226 2 #reduceActionForargument_value3: 9694211 false ) - #(220 1 #liftFirstValue: 9363457 false ) - #(226 2 #reduceActionForargument_value2: 9694210 false ) - #(285 4 #reduceActionFornull_conditional_operations5: 17653765 false ) - #(287 5 #reduceActionFornull_conditional_invocation_expression1: 18615297 false ) - #(285 4 #reduceActionFornull_conditional_operations3: 17653763 false ) - #(285 4 #reduceActionFornull_conditional_operations4: 17653764 false ) - #(232 3 #reduceActionForinterpolated_regular_string_body2: 10876930 false ) - #(233 3 #reduceActionForinterpolation2: 11057154 false ) - #(236 3 #reduceActionForinterpolated_regular_string_body2: 11496450 false ) - #(320 5 #reduceActionForfrom_clause1: 23694337 false ) - #(303 5 #reduceActionForconditional_expression2: 21745666 false ) - #(325 4 #reduceActionForlet_clause1: 24108033 false ) - #(330 3 #reduceActionFororderings2: 24622082 false ) - #(433 1 #reduceActionForinterpolated_regular_string1: 34632705 false ) - #(435 5 #reduceActionForfield_declaration1: 34839553 false ) - #(459 5 #reduceActionForproperty_declaration1: 37055489 false ) - #(469 0 #nil 38079489 false ) - #(467 0 #nil 37927937 false ) - #(471 0 #reduceActionFor_extern_alias_directives1: 38231041 false ) - #(492 1 #liftFirstValue: 40611843 false ) - #(494 1 #liftFirstValue: 40900620 false ) - #(494 1 #liftFirstValue: 40900613 false ) - #(494 1 #liftFirstValue: 40900614 false ) - #(494 1 #liftFirstValue: 40900611 false ) - #(494 1 #liftFirstValue: 40900609 false ) - #(492 1 #liftFirstValue: 40611841 false ) - #(492 1 #liftFirstValue: 40611845 false ) - #(492 1 #liftFirstValue: 40611842 false ) - #(494 1 #liftFirstValue: 40900610 false ) - #(492 1 #liftFirstValue: 40611846 false ) - #(494 1 #liftFirstValue: 40900612 false ) - #(494 1 #liftFirstValue: 40900622 false ) - #(494 1 #liftFirstValue: 40900617 false ) - #(494 1 #liftFirstValue: 40900624 false ) - #(494 1 #liftFirstValue: 40900619 false ) - #(494 1 #liftFirstValue: 40900623 false ) - #(494 1 #liftFirstValue: 40900616 false ) - #(492 1 #liftFirstValue: 40611848 false ) - #(492 1 #liftFirstValue: 40611847 false ) - #(494 1 #liftFirstValue: 40900615 false ) - #(492 1 #liftFirstValue: 40611844 false ) - #(494 1 #liftFirstValue: 40900621 false ) - #(494 1 #liftFirstValue: 40900618 false ) - #(450 1 #reduceActionFor_extern_alias_directives2: 36290562 false ) - #(451 1 #reduceActionFor_extern_alias_directives2: 36348929 false ) - #(452 1 #reduceActionForinterpolated_regular_string1: 36489217 false ) - #(451 1 #reduceActionForinterpolated_regular_string1: 36348931 false ) - #(456 0 #nil 36826113 false ) - #(184 5 #reduceActionForusing_alias_directive1: 6744065 false ) - #(561 4 #reduceActionForattribute_section1: 48799745 false ) - #(575 3 #reduceActionForanonymous_object_initializer1: 50118657 false ) - #(575 3 #reduceActionForanonymous_object_initializer1: 50118659 false ) - #(414 0 #reduceActionFor_class_base1: 32098305 false ) - #(410 1 #liftFirstValue: 31763458 false ) - #(512 0 #reduceActionFor_struct_interfaces1: 43014145 false ) - #(531 0 #reduceActionFor_struct_interfaces1: 45103105 false ) - #(526 1 #liftFirstValue: 44627970 false ) - #(546 2 #reduceActionForattribute_target_specifier1: 47186945 false ) - #(551 0 #reduceActionFor_explicit_anonymous_function_paramenter_list1: 47610881 false ) - #(602 1 #reduceActionForordering_direction2: 53701634 false ) - #(601 3 #reduceActionForfixed_pointer_declarator1: 53620737 false ) - #(599 6 #reduceActionForfixed_statement1: 53353473 false ) - #(600 3 #reduceActionForlocal_variable_declarators2: 53476354 false ) - #(382 0 #nil 29301761 false ) - #(280 4 #reduceActionFornamed_entity2: 16713730 false ) - #(251 6 #reduceActionForobject_creation_expression1: 13561857 false ) - #(252 1 #liftFirstValue: 13766658 false ) - #(258 3 #reduceActionForinitializer_target2: 14329858 false ) - #(262 3 #reduceActionForelement_initializer2: 14747650 false ) - #(254 4 #reduceActionForobject_initializer2: 13930498 false ) - #(256 3 #reduceActionForlocal_variable_declarators2: 14118914 false ) - #(259 1 #liftFirstValue: 14407682 false ) - #(257 3 #reduceActionFormember_initializer1: 14248961 false ) - #(259 1 #liftFirstValue: 14407681 false ) - #(260 4 #reduceActionForcollection_initializer2: 14480386 false ) - #(261 3 #reduceActionForlocal_variable_declarators2: 14613506 false ) - #(519 4 #reduceActionForarray_initializer2: 43726850 false ) - #(521 3 #reduceActionForlocal_variable_declarators2: 43921410 false ) - #(518 0 #nil 43679745 false ) - #(211 1 #reduceActionFor_extern_alias_directives2: 8835074 false ) - #(369 1 #reduceActionFor_extern_alias_directives2: 28239874 false ) - #(370 1 #reduceActionForextern_alias_directives1: 28282881 false ) - #(372 1 #reduceActionForextern_alias_directives1: 28432385 false ) - #(588 1 #liftFirstValue: 51445762 false ) - #(394 4 #reduceActionForcatch_clause1: 30428161 false ) - #(271 4 #reduceActionForunbound_type_name2: 16016386 false ) - #(273 3 #reduceActionForgeneric_dimension_specifier1: 16301057 false ) - #(275 2 #reduceActionForextern_alias_directives2: 16378882 false ) - #(271 4 #reduceActionForunbound_type_name3: 16016387 false ) - #(285 5 #reduceActionFornull_conditional_operations1: 17653761 false ) - #(285 5 #reduceActionFornull_conditional_operations2: 17653762 false ) - #(336 4 #reduceActionForlet_clause1: 24953857 false ) - #(338 3 #reduceActionForquery_continuation1: 25098241 false ) - #(429 6 #reduceActionForconstant_declaration1: 34283521 false ) - #(440 3 #reduceActionForvariable_declarator2: 35323906 false ) - #(439 3 #reduceActionForlocal_variable_declarators2: 35200002 false ) - #(448 3 #reduceActionFormember_name2: 36104194 false ) - #(474 6 #reduceActionForevent_declaration1: 38518785 false ) - #(486 3 #reduceActionForindexer_body2: 39976962 false ) - #(486 3 #reduceActionForindexer_body1: 39976961 false ) - #(466 2 #reduceActionForattribute_target_specifier1: 37734401 false ) - #(469 1 #liftFirstValue: 38079490 false ) - #(466 2 #reduceActionForaccessor_declarations2: 37734402 false ) - #(467 1 #liftFirstValue: 37927938 false ) - #(472 1 #reduceActionForextern_alias_directives1: 38280194 false ) - #(472 1 #reduceActionForextern_alias_directives1: 38280195 false ) - #(472 1 #reduceActionForextern_alias_directives1: 38280193 false ) - #(471 1 #reduceActionFor_extern_alias_directives2: 38231042 false ) - #(496 3 #reduceActionFormethod_body2: 41270274 false ) - #(502 0 #nil 41877505 false ) - #(457 1 #liftFirstValue: 36886530 false ) - #(457 1 #liftFirstValue: 36886529 false ) - #(457 1 #liftFirstValue: 36886531 false ) - #(456 1 #liftFirstValue: 36826114 false ) - #(507 1 #reduceActionForordering_direction2: 42350594 false ) - #(507 1 #reduceActionForordering_direction1: 42350593 false ) - #(505 6 #reduceActionForstatic_constructor_declaration1: 42110977 false ) - #(561 5 #reduceActionForattribute_section2: 48799746 false ) - #(580 3 #reduceActionFornamed_argument1: 50728961 false ) - #(577 3 #reduceActionForlocal_variable_declarators2: 50419714 false ) - #(579 3 #reduceActionForlocal_variable_declarators2: 50613250 false ) - #(177 5 #reduceActionFornamespace_body1: 6122497 false ) - #(417 0 #reduceActionFor_extern_alias_directives1: 32377857 false ) - #(414 1 #reduceActionFor_extern_alias_directives2: 32098306 false ) - #(512 1 #reduceActionFor_extern_alias_directives2: 43014146 false ) - #(529 0 #nil 44997633 false ) - #(531 1 #reduceActionFor_extern_alias_directives2: 45103106 false ) - #(551 1 #reduceActionFor_extern_alias_directives2: 47610882 false ) - #(552 1 #reduceActionForinterpolated_regular_string1: 47672321 false ) - #(544 7 #reduceActionForenum_declaration1: 47027201 false ) - #(376 7 #reduceActionFordo_statement1: 28812289 false ) - #(602 2 #reduceActionForattribute_target_specifier1: 53701633 false ) - #(382 1 #liftFirstValue: 29301762 false ) - #(383 1 #reduceActionForfor_initializer2: 29350913 false ) - #(366 7 #reduceActionForif_statement2: 27862018 false ) - #(286 5 #reduceActionFornull_conditional_member_access2: 18292738 false ) - #(263 7 #reduceActionForarray_creation_expression1: 14861313 false ) - #(518 1 #liftFirstValue: 43679746 false ) - #(373 2 #reduceActionForswitch_label2: 28513282 false ) - #(368 3 #reduceActionForgeneric_dimension_specifier1: 28185601 false ) - #(370 2 #reduceActionForextern_alias_directives2: 28282882 false ) - #(371 2 #reduceActionForswitch_section1: 28376065 false ) - #(372 2 #reduceActionForextern_alias_directives2: 28432386 false ) - #(396 4 #reduceActionForlet_clause1: 30566401 false ) - #(434 3 #reduceActionForconstant_declarator1: 34756609 false ) - #(433 3 #reduceActionForlocal_variable_declarators2: 34632706 false ) - #(463 3 #reduceActionForproperty_body2: 37481474 false ) - #(464 0 #reduceActionFor_attribute_target_specifier1: 37613569 false ) - #(485 5 #reduceActionForindexer_declarator1: 39806977 false ) - #(472 2 #reduceActionForaccessor_modifiers5: 38280197 false ) - #(472 2 #reduceActionForaccessor_modifiers5: 38280196 false ) - #(501 5 #reduceActionForconstructor_declarator1: 41776129 false ) - #(502 1 #liftFirstValue: 41877506 false ) - #(452 3 #reduceActionForlocal_variable_declarators2: 36489218 false ) - #(451 3 #reduceActionForlocal_variable_declarators2: 36348930 false ) - #(575 5 #reduceActionForattribute_arguments2: 50118658 false ) - #(411 3 #reduceActionFortype_parameter_list1: 31833089 false ) - #(412 2 #reduceActionFortype_parameters1: 31916033 false ) - #(415 2 #reduceActionForclass_base1: 32132097 false ) - #(416 1 #reduceActionForinterpolated_regular_string1: 32260097 false ) - #(415 2 #reduceActionForclass_base2: 32132098 false ) - #(417 1 #reduceActionFor_extern_alias_directives2: 32377858 false ) - #(418 1 #reduceActionForextern_alias_directives1: 32460801 false ) - #(513 2 #reduceActionForstruct_interfaces1: 43061249 false ) - #(527 3 #reduceActionForvariant_type_parameter_list1: 44712961 false ) - #(530 1 #liftFirstValue: 45062145 false ) - #(530 1 #liftFirstValue: 45062146 false ) - #(529 1 #liftFirstValue: 44997634 false ) - #(532 2 #reduceActionForstruct_interfaces1: 45145089 false ) - #(547 3 #reduceActionForanonymous_object_initializer1: 47234049 false ) - #(553 2 #reduceActionForenum_member_declaration1: 47822849 false ) - #(385 8 #reduceActionForforeach_statement1: 29551617 false ) - #(286 6 #reduceActionFornull_conditional_member_access1: 18292737 false ) - #(373 3 #reduceActionForswitch_label1: 28513281 false ) - #(398 4 #reduceActionForexception_filter1: 30680065 false ) - #(610 5 #reduceActionForstackalloc_initializer1: 54686721 false ) - #(463 4 #reduceActionForproperty_body1: 37481473 false ) - #(464 1 #reduceActionFor_extern_alias_directives2: 37613570 false ) - #(474 8 #reduceActionForevent_declaration2: 38518786 false ) - #(478 2 #reduceActionForattribute_target_specifier1: 39041025 false ) - #(478 2 #reduceActionForaccessor_declarations2: 39041026 false ) - #(473 1 #reduceActionForordering_direction2: 38477826 false ) - #(473 1 #reduceActionForordering_direction1: 38477825 false ) - #(468 4 #reduceActionForget_accessor_declaration1: 37989377 false ) - #(470 4 #reduceActionForset_accessor_declaration1: 38140929 false ) - #(458 4 #reduceActionForparameter_array1: 36938753 false ) - #(454 0 #reduceActionFor_attribute_target_specifier1: 36728833 false ) - #(589 8 #reduceActionFordestructor_declaration1: 51868673 false ) - #(589 8 #reduceActionFordestructor_declaration1: 51868674 false ) - #(426 0 #reduceActionFor_extern_alias_directives1: 33775617 false ) - #(418 2 #reduceActionForextern_alias_directives2: 32460802 false ) - #(515 0 #reduceActionFor_extern_alias_directives1: 43174913 false ) - #(528 3 #reduceActionForvariant_type_parameters1: 44812289 false ) - #(534 0 #reduceActionFor_extern_alias_directives1: 45295617 false ) - #(547 4 #reduceActionForanonymous_object_initializer2: 47234050 false ) - #(552 3 #reduceActionForlocal_variable_declarators2: 47672322 false ) - #(377 9 #reduceActionForfor_statement1: 28926977 false ) - #(465 2 #reduceActionForattribute_target_specifier1: 37666817 false ) - #(479 3 #reduceActionForadd_accessor_declaration1: 39263233 false ) - #(480 3 #reduceActionForremove_accessor_declaration1: 39332865 false ) - #(485 7 #reduceActionForindexer_declarator2: 39806978 false ) - #(495 7 #reduceActionForconversion_operator_declarator2: 41057282 false ) - #(495 7 #reduceActionForconversion_operator_declarator1: 41057281 false ) - #(491 7 #reduceActionForunary_operator_declarator1: 40464385 false ) - #(453 5 #reduceActionForfixed_parameter1: 36602881 false ) - #(454 1 #reduceActionFor_extern_alias_directives2: 36728834 false ) - #(412 4 #reduceActionFortype_parameters2: 31916034 false ) - #(415 4 #reduceActionForclass_base3: 32132099 false ) - #(416 3 #reduceActionForlocal_variable_declarators2: 32260098 false ) - #(426 1 #reduceActionFor_extern_alias_directives2: 33775618 false ) - #(427 1 #reduceActionForextern_alias_directives1: 33840129 false ) - #(406 10 #reduceActionForclass_declaration1: 31311873 false ) - #(517 1 #liftFirstValue: 43387914 false ) - #(517 1 #liftFirstValue: 43387905 false ) - #(517 1 #liftFirstValue: 43387906 false ) - #(517 1 #liftFirstValue: 43387907 false ) - #(517 1 #liftFirstValue: 43387908 false ) - #(517 1 #liftFirstValue: 43387909 false ) - #(517 1 #liftFirstValue: 43387910 false ) - #(517 1 #liftFirstValue: 43387911 false ) - #(517 1 #liftFirstValue: 43387912 false ) - #(517 1 #liftFirstValue: 43387913 false ) - #(515 1 #reduceActionFor_extern_alias_directives2: 43174914 false ) - #(516 1 #reduceActionForextern_alias_directives1: 43241473 false ) - #(604 0 #reduceActionFor_extern_alias_directives1: 54017025 false ) - #(517 1 #liftFirstValue: 43387915 false ) - #(508 10 #reduceActionForstruct_declaration1: 42590209 false ) - #(534 1 #reduceActionFor_extern_alias_directives2: 45295618 false ) - #(535 1 #reduceActionForextern_alias_directives1: 45367297 false ) - #(536 1 #liftFirstValue: 45526017 false ) - #(536 1 #liftFirstValue: 45526018 false ) - #(536 1 #liftFirstValue: 45526019 false ) - #(536 1 #liftFirstValue: 45526020 false ) - #(585 0 #nil 51343361 false ) - #(522 10 #reduceActionForinterface_declaration1: 44141569 false ) - #(553 4 #reduceActionForenum_member_declaration2: 47822850 false ) - #(327 9 #reduceActionForjoin_clause1: 24233985 false ) - #(443 10 #reduceActionFormethod_header1: 35564545 false ) - #(455 2 #reduceActionForattribute_target_specifier1: 36773889 false ) - #(421 1 #reduceActionForprimary_constraint2: 33227778 false ) - #(421 1 #reduceActionForprimary_constraint3: 33227779 false ) - #(421 1 #reduceActionForprimary_constraint1: 33227777 false ) - #(423 1 #reduceActionForprimary_constraint1: 33589249 false ) - #(422 1 #reduceActionForinterpolated_regular_string1: 33325058 false ) - #(419 4 #reduceActionFortype_parameter_constraints_clause1: 32650241 false ) - #(420 1 #reduceActionForinterpolated_regular_string1: 32785409 false ) - #(420 1 #reduceActionFor_extern_alias_directives2: 32785410 false ) - #(422 1 #reduceActionForinterpolated_regular_string1: 33325057 false ) - #(420 1 #reduceActionForinterpolated_regular_string1: 32785411 false ) - #(425 3 #reduceActionForgeneric_dimension_specifier1: 33713153 false ) - #(427 2 #reduceActionForextern_alias_directives2: 33840130 false ) - #(514 3 #reduceActionForgeneric_dimension_specifier1: 43110401 false ) - #(516 2 #reduceActionForextern_alias_directives2: 43241474 false ) - #(606 1 #liftFirstValue: 54230020 false ) - #(606 1 #liftFirstValue: 54230017 false ) - #(606 1 #liftFirstValue: 54230021 false ) - #(606 1 #liftFirstValue: 54230019 false ) - #(606 1 #liftFirstValue: 54230018 false ) - #(606 1 #liftFirstValue: 54230022 false ) - #(604 1 #reduceActionFor_extern_alias_directives2: 54017026 false ) - #(605 1 #reduceActionForextern_alias_directives1: 54085633 false ) - #(528 5 #reduceActionForvariant_type_parameters2: 44812290 false ) - #(533 3 #reduceActionForgeneric_dimension_specifier1: 45199361 false ) - #(535 2 #reduceActionForextern_alias_directives2: 45367298 false ) - #(585 1 #liftFirstValue: 51343362 false ) - #(554 11 #reduceActionFordelegate_declaration1: 48024577 false ) - #(503 5 #reduceActionForconstructor_initializer1: 41952257 false ) - #(503 5 #reduceActionForconstructor_initializer2: 41952258 false ) - #(605 2 #reduceActionForextern_alias_directives2: 54085634 false ) - #(328 11 #reduceActionForjoin_into_clause1: 24393729 false ) - #(493 10 #reduceActionForbinary_operator_declarator1: 40710145 false ) - #(424 3 #reduceActionForconstructor_constraint1: 33664001 false ) - #(420 3 #reduceActionFortype_parameter_constraints4: 32785412 false ) - #(420 3 #reduceActionFortype_parameter_constraints5: 32785413 false ) - #(422 3 #reduceActionForlocal_variable_declarators2: 33325060 false ) - #(422 3 #reduceActionForlocal_variable_declarators2: 33325059 false ) - #(420 3 #reduceActionForlocal_variable_declarators2: 32785414 false ) - #(607 1 #liftFirstValue: 54337537 false ) - #(608 1 #reduceActionForextern_alias_directives1: 54369281 false ) - #(420 5 #reduceActionFortype_parameter_constraints7: 32785415 false ) - #(603 6 #reduceActionForfixed_size_buffer_declaration1: 53862401 false ) - #(608 2 #reduceActionForextern_alias_directives2: 54369282 false ) - #(542 6 #reduceActionForinterface_event_declaration1: 46644225 false ) - #(539 1 #reduceActionForordering_direction1: 46102529 false ) - #(539 1 #reduceActionForordering_direction2: 46102530 false ) - #(538 7 #reduceActionForinterface_property_declaration1: 45934593 false ) - #(539 2 #reduceActionForattribute_target_specifier1: 46102531 false ) - #(539 2 #reduceActionForaccessor_declarations2: 46102532 false ) - #(609 4 #reduceActionForfixed_size_buffer_declarator1: 54525953 false ) - #(540 3 #reduceActionForinterface_get_accessor1: 46423041 false ) - #(541 3 #reduceActionForinterface_get_accessor1: 46533633 false ) - #(543 10 #reduceActionForinterface_indexer_declaration1: 46783489 false ) - #(537 10 #reduceActionForinterface_method_declaration1: 45691905 false ) - ). -] - -{ #category : #'generated-accessing' } -CSharpParser class >> scannerClass [ - ^CSharpScanner -] - -{ #category : #generated } -CSharpParser class >> startingStateForblock [ - ^ 5 -] - -{ #category : #generated } -CSharpParser class >> startingStateForclass_member_declaration [ - ^ 6 -] - -{ #category : #generated } -CSharpParser class >> startingStateForcompilation_unit [ - ^ 1 -] - -{ #category : #generated } -CSharpParser class >> startingStateForexpression [ - ^ 4 -] - -{ #category : #generated } -CSharpParser class >> startingStateFornamespace_member_declaration [ - ^ 2 -] - -{ #category : #generated } -CSharpParser class >> startingStateForstatement [ - ^ 3 -] - -{ #category : #generated } -CSharpParser class >> symbolNames [ - ^ #('"!"' '"!="' '"%"' '"%="' '"&"' '"&&"' '"&="' '"("' '")"' '"*"' '"*="' '"+"' '"++"' '"+="' '","' '"-"' '"--"' '"-="' '"->"' '"."' '"/"' '"/="' '":"' '"::"' '";"' '"<"' '"<<"' '"<<="' '"<="' '"="' '"=="' '"=>"' '">="' '">>="' '"?"' '"??"' '"["' '"]"' '"^"' '"^="' '"abstract"' '"add"' '"alias"' '"as"' '"ascending"' '"assembly"' '"await"' '"base"' '"bool"' '"break"' '"by"' '"byte"' '"case"' '"catch"' '"char"' '"checked"' '"class"' '"const"' '"continue"' '"decimal"' '"default"' '"delegate"' '"descending"' '"do"' '"double"' '"else"' '"enum"' '"equals"' '"event"' '"explicit"' '"extern"' '"false"' '"field"' '"finally"' '"fixed"' '"float"' '"for"' '"foreach"' '"from"' '"get"' '"goto"' '"group"' '"if"' '"implicit"' '"in"' '"int"' '"interface"' '"internal"' '"into"' '"is"' '"join"' '"let"' '"lock"' '"long"' '"method"' '"module"' '"nameof"' '"namespace"' '"new"' '"object"' '"on"' '"operator"' '"orderby"' '"out"' '"override"' '"param"' '"params"' '"partial"' '"private"' '"property"' '"protected"' '"public"' '"readonly"' '"ref"' '"remove"' '"return"' '"sbyte"' '"sealed"' '"select"' '"set"' '"short"' '"sizeof"' '"stackalloc"' '"static"' '"string"' '"struct"' '"switch"' '"this"' '"throw"' '"true"' '"try"' '"type"' '"typeof"' '"uint"' '"ulong"' '"unchecked"' '"unsafe"' '"ushort"' '"using"' '"var"' '"virtual"' '"void"' '"volatile"' '"when"' '"where"' '"while"' '"yield"' '"{"' '"|"' '"|="' '"||"' '"~"' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'B e g i n' 'compilation_unit' 'namespace_declaration' 'qualified_identifier' 'namespace_body' '_extern_alias_directives' 'extern_alias_directives' 'extern_alias_directive' '_using_directives' 'using_directives' 'using_directive' 'using_alias_directive' 'using_namespace_directive' 'using_static_directive' '_namespace_member_declarations' 'namespace_member_declarations' 'namespace_member_declaration' 'type_declaration' 'qualified_alias_member' 'namespace_name' 'type_name' 'namespace_or_type_name' '_type' 'type' 'value_type' 'struct_type' 'simple_type' 'numeric_type' 'integral_type' 'floating_point_type' 'nullable_type' 'non_nullable_value_type' 'enum_type' 'reference_type' 'class_type' 'interface_type' 'array_type' 'non_array_type' '_rank_specifiers' 'rank_specifiers' 'rank_specifier' '_dim_separators' 'dim_separators' 'delegate_type' 'type_argument_list' 'type_arguments' 'type_argument' 'variable_reference' '_argument_list' 'argument_list' 'argument' '_argument_name' 'argument_name' 'argument_value' 'primary_expression' 'primary_no_array_creation_expression' 'interpolated_string_expression' 'interpolated_regular_string' 'StartInterpolatedString' 'interpolated_regular_string_body' 'interpolation' 'interpolated_verbatim_string' 'StartInterpolatedVerbatimString' 'interpolated_verbatim_string_body' 'simple_name' '_type_argument_list' 'parenthesized_expression' 'member_access' 'qualified_alias_member_expression' 'predefined_type_expression' 'predefined_type' 'invocation_expression' 'element_access' 'expression_list' 'this_access' 'base_access' 'post_increment_expression' 'post_decrement_expression' 'object_creation_expression' '_object_or_collection_initializer' 'object_or_collection_initializer' 'object_initializer' '_member_initializer_list' 'member_initializer_list' 'member_initializer' 'initializer_target' 'initializer_value' 'collection_initializer' 'element_initializer_list' 'element_initializer' 'array_creation_expression' 'delegate_creation_expression' 'anonymous_object_creation_expression' 'anonymous_object_initializer' '_member_declarator_list' 'member_declarator_list' 'member_declarator' 'typeof_expression' 'unbound_type_name' '_generic_dimension_specifier' 'generic_dimension_specifier' '_commas' 'commas' 'checked_expression' 'unchecked_expression' 'default_value_expression' 'nameof_expression' 'named_entity' 'named_entity_target' 'unary_expression' 'null_conditional_expression' '_null_conditional_operations' 'null_conditional_operations' 'null_conditional_member_access' 'null_conditional_invocation_expression' 'pre_increment_expression' 'pre_decrement_expression' 'cast_expression' 'await_expression' 'multiplicative_expression' 'additive_expression' 'shift_expression' 'relational_expression' 'equality_expression' 'and_expression' 'exclusive_or_expression' 'inclusive_or_expression' 'conditional_and_expression' 'conditional_or_expression' 'null_coalescing_expression' 'conditional_expression' 'lambda_expression' 'anonymous_method_expression' 'anonymous_function_signature' '_explicit_anonymous_function_signature' 'explicit_anonymous_function_signature' '_explicit_anonymous_function_paramenter_list' 'explicit_anonymous_function_paramenter_list' 'explicit_anonymous_function_paramenter' '_anonymous_function_parameter_modifier' 'anonymous_function_parameter_modifier' 'implicit_anonymous_function_signature' '_implicit_anonymous_function_parameter_list' 'implicit_anonymous_function_parameter_list' 'implicit_anonymous_function_parameter' 'anonymous_function_body' 'query_expression' 'from_clause' 'query_body' '_query_body_clauses' 'query_body_clauses' 'query_body_clause' 'let_clause' 'where_clause' 'join_clause' 'join_into_clause' 'orderby_clause' 'orderings' 'ordering' '_ordering_direction' 'ordering_direction' 'select_or_group_clause' 'select_clause' 'group_clause' '_query_continuation' 'query_continuation' 'assignment' 'assignment_operator' '_expression' 'expression' 'non_assignment_expression' 'constant_expression' 'boolean_expression' 'statement' 'embedded_statement' 'block' '_statement_list' 'statement_list' 'empty_statement' 'labeled_statement' 'declaration_statement' 'local_variable_declaration' 'local_variable_type' 'local_variable_declarators' 'local_variable_declarator' '_local_variable_declarator_name' 'local_variable_initializer' 'local_constant_declaration' 'const_declarators' 'const_declarator' 'expression_statement' 'statement_expression' 'selection_statement' 'if_statement' 'switch_statement' 'switch_block' '_switch_sections' 'switch_sections' 'switch_section' 'switch_labels' 'switch_label' 'iteration_statement' 'while_statement' 'do_statement' 'for_statement' '_for_initializer' 'for_initializer' '_for_condition' 'for_condition' '_for_iterator' 'for_iterator' 'statement_expression_list' 'foreach_statement' 'jump_statement' 'break_statement' 'continue_statement' 'goto_statement' 'return_statement' 'throw_statement' 'try_statement' 'catch_clauses' 'catch_clause' '_exception_specifier' 'exception_specifier' '_exception_filter' 'exception_filter' 'finally_clause' 'checked_statement' 'unchecked_statement' 'lock_statement' 'using_statement' 'resource_acquisition' 'yield_statement' 'class_declaration' '_class_modifiers' 'class_modifiers' 'class_modifier' '_type_parameter_list' 'type_parameter_list' 'type_parameters' 'type_parameter' '_class_base' 'class_base' 'interface_type_list' '_type_parameter_constraints_clauses' 'type_parameter_constraints_clauses' 'type_parameter_constraints_clause' 'type_parameter_constraints' 'primary_constraint' 'secondary_constraints' 'interface_type_constraint' 'constructor_constraint' 'class_body' '_class_member_declarations' 'class_member_declarations' 'class_member_declaration' 'constant_declaration' '_constant_modifiers' 'constant_modifers' 'constant_modifer' 'constant_declarators' 'constant_declarator' 'field_declaration' '_field_modifiers' 'field_modifiers' 'field_modifier' 'variable_declarators' 'variable_declarator' 'variable_initializer' 'method_declaration' 'method_header' '_method_modifiers' 'method_modifiers' 'method_modifier' 'return_type' 'member_name' 'method_body' '_formal_parameters_list' 'formal_parameters_list' 'fixed_parameters' 'fixed_parameter' '_default_argument' 'default_argument' '_parameter_modifier' 'parameter_modifier' 'parameter_array' 'property_declaration' '_property_modifiers' 'property_modifiers' 'property_modifier' 'property_body' '_property_initializer' 'property_initializer' 'accessor_declarations' '_get_accessor_declaration' 'get_accessor_declaration' '_set_accessor_declaration' 'set_accessor_declaration' '_accessor_modifiers' 'accessor_modifiers' 'accessor_body' 'event_declaration' '_event_modifiers' 'event_modifiers' 'event_modifier' 'event_accessor_declarations' 'add_accessor_declaration' 'remove_accessor_declaration' 'indexer_declaration' '_indexer_modifiers' 'indexer_modifiers' 'indexer_modifier' 'indexer_declarator' 'indexer_body' 'operator_declaration' 'operator_modifiers' 'operator_modifier' 'operator_declarator' 'unary_operator_declarator' 'overloadable_unary_operator' 'binary_operator_declarator' 'overloadable_binary_operator' 'conversion_operator_declarator' 'operator_body' 'constructor_declaration' '_constructor_modifiers' 'constructor_modifiers' 'constructor_modifier' 'constructor_declarator' '_constructor_initializer' 'constructor_initializer' 'constructor_body' 'static_constructor_declaration' 'static_constructor_modifiers' 'static_constructor_body' 'struct_declaration' '_struct_modifiers' 'struct_modifiers' 'struct_modifier' '_struct_interfaces' 'struct_interfaces' 'struct_body' '_struct_member_declarations' 'struct_member_declarations' 'struct_member_declaration' '_array_initializer' 'array_initializer' '_variable_initializer_list' 'variable_initializer_list' 'interface_declaration' '_interface_modifiers' 'interface_modifiers' 'interface_modifier' '_variant_type_parameter_list' 'variant_type_parameter_list' 'variant_type_parameters' '_variance_annotation' 'variance_annotation' '_interface_base' 'interface_base' 'interface_body' '_interface_member_declarations' 'interface_member_declarations' 'interface_member_declaration' 'interface_method_declaration' 'interface_property_declaration' 'interface_accessors' 'interface_get_accessor' 'interface_set_accessor' 'interface_event_declaration' 'interface_indexer_declaration' 'enum_declaration' '_enum_base' 'enum_base' 'enum_body' '_enum_modifers' 'enum_modifers' 'enum_modifer' '_enum_member_declarations' 'enum_member_declarations' 'enum_member_declaration' 'delegate_declaration' '_delegate_modifiers' 'delegate_modifiers' 'delegate_modifier' '_global_attributes' 'global_attributes' 'global_attribute_sections' 'global_attribute_section' 'global_attribute_target_specifier' 'global_attribute_target' '_attributes' 'attributes' 'attribute_sections' 'attribute_section' '_attribute_target_specifier' 'attribute_target_specifier' 'attribute_target' 'attribute_list' 'attribute' 'attribute_name' '_attribute_arguments' 'attribute_arguments' '_positional_argument_list' 'positional_argument_list' 'positional_argument' 'named_argument_list' 'named_argument' 'attribute_argument_expression' 'literal' 'boolean_literal' '_semicolon' '_new' '_partial' '_extern' '_identifier' 'destructor_declaration' '_unsafe' 'unsafe_statement' 'pointer_type' 'unmanaged_type' 'pointer_indirection_expression' 'pointer_member_access' 'pointer_element_access' 'addressof_expression' 'sizeof_expression' 'fixed_statement' 'fixed_pointer_declarators' 'fixed_pointer_declarator' 'fixed_pointer_initializer' 'fixed_size_buffer_declaration' '_fixed_size_buffer_modifiers' 'fixed_size_buffer_modifiers' 'fixed_size_buffer_modifier' 'buffer_element_type' 'fixed_size_buffer_declarators' 'fixed_size_buffer_declarator' 'stackalloc_initializer' 'void_type' 'E O F' 'error') -] - -{ #category : #generated } -CSharpParser class >> symbolTypes [ - ^ #(#SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #CSCompilationUnitNode #CSCompilationUnitNode #CSNamespaceDeclarationNode #CSQualifiedIdentifierNode #OrderedCollection #OrderedCollection #OrderedCollection #CSExternAliasDirectiveNode #OrderedCollection #OrderedCollection #CSUsingDirectiveNode #CSUsingAliasDirectiveNode #CSUsingNamespaceDirectiveNode #CSUsingStaticDirectiveNode #OrderedCollection #OrderedCollection #CSDeclarationNode #CSDeclarationNode #CSQualifiedAliasMemberNode #CSTypeNode #CSTypeNode #CSTypeNode #CSTypeNode #CSTypeNode #CSTypeNode #CSTypeNode #CSSimpleTypeNode #SmaCCToken #SmaCCToken #SmaCCToken #CSNullableTypeNode #CSTypeNode #CSTypeNode #CSTypeNode #CSTypeNode #CSTypeNode #CSArrayTypeNode #CSTypeNode #OrderedCollection #OrderedCollection #CSRankSpecifierNode #OrderedCollection #OrderedCollection #CSTypeNode #CSTypeArgumentListNode #OrderedCollection #CSTypeNode #CSExpressionNode #OrderedCollection #OrderedCollection #CSArgumentNode #OrderedCollection #OrderedCollection #OrderedCollection #CSExpressionNode #CSExpressionNode #CSInterpolatedStringExpressionNode #OrderedCollection #ByteSymbol #OrderedCollection #CSInterpolationNode #OrderedCollection #ByteSymbol #OrderedCollection #CSSimpleNameNode #CSTypeArgumentListNode #CSExpressionNode #CSMemberAccessNode #CSTypeExpressionNode #CSTypeExpressionNode #CSSimpleTypeNode #CSInvocationExpressionNode #CSElementAccessNode #OrderedCollection #CSThisAccessNode #CSBaseAccessNode #CSPostExpressionNode #CSPostExpressionNode #CSObjectCreationExpressionNode #CSProgramNode #CSProgramNode #CSObjectInitializerNode #OrderedCollection #OrderedCollection #CSMemberInitializerNode #OrderedCollection #CSProgramNode #CSCollectionInitializerNode #OrderedCollection #CSElementInitializerNode #CSArrayCreationExpressionNode #CSDelegateCreationExpressionNode #CSAnonymousObjectCreationExpressionNode #OrderedCollection #OrderedCollection #OrderedCollection #CSMemberDeclaratorNode #CSTypeofExpressionNode #CSUnboundTypeNameNode #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #CSCheckedExpressionNode #CSUncheckedExpressionNode #CSDefaultValueExpressionNode #CSNameofExpressionNode #CSExpressionNode #CSExpressionNode #CSExpressionNode #CSNullConditionalExpressionNode #CSExpressionNode #CSExpressionNode #CSNullConditionalMemberAccessNode #CSNullConditionalInvocationExpressionNode #CSPrefixExpressionNode #CSPrefixExpressionNode #CSCastExpressionNode #CSAwaitExpressionNode #CSExpressionNode #CSExpressionNode #CSExpressionNode #CSExpressionNode #CSExpressionNode #CSExpressionNode #CSExpressionNode #CSExpressionNode #CSExpressionNode #CSExpressionNode #CSExpressionNode #CSExpressionNode #CSLambdaExpressionNode #CSAnonymousMethodExpressionNode #CSProgramNode #CSExplicitAnonymousFunctionSignatureNode #CSExplicitAnonymousFunctionSignatureNode #OrderedCollection #OrderedCollection #CSAnonymousFunctionParameterNode #SmaCCToken #SmaCCToken #CSImplicitAnonymousFunctionSignatureNode #OrderedCollection #OrderedCollection #SmaCCToken #CSProgramNode #CSQueryExpressionNode #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #CSAssignmentNode #SmaCCToken #CSExpressionNode #CSExpressionNode #CSExpressionNode #CSExpressionNode #CSExpressionNode #CSStatementNode #CSStatementNode #CSBlockStatementNode #OrderedCollection #OrderedCollection #CSEmptyStatementNode #CSLabeledStatementNode #CSDeclarationStatementNode #CSLocalVariableDeclarationNode #CSTypeNode #OrderedCollection #CSLocalVariableDeclaratorNode #CSSimpleNameNode #CSProgramNode #CSLocalConstantDeclarationNode #OrderedCollection #CSConstDeclaratorNode #CSExpressionStatementNode #CSExpressionNode #CSStatementNode #CSIfStatementNode #CSSwitchStatementNode #OrderedCollection #OrderedCollection #OrderedCollection #CSSwitchSectionNode #OrderedCollection #CSSwitchLabelNode #CSStatementNode #CSWhileStatementNode #CSDoStatementNode #CSForStatementNode #CSProgramNode #CSProgramNode #CSExpressionNode #CSExpressionNode #CSStatementListNode #CSStatementListNode #OrderedCollection #CSForeachStatementNode #CSStatementNode #CSBreakStatementNode #CSContinueStatementNode #CSGotoStatementNode #CSReturnStatementNode #CSThrowStatementNode #CSTryStatementNode #OrderedCollection #CSCatchClauseNode #OrderedCollection #OrderedCollection #CSExceptionFilterNode #CSExceptionFilterNode #CSFinallyClauseNode #CSCheckedStatementNode #CSUncheckedStatementNode #CSLockStatementNode #CSUsingStatementNode #CSProgramNode #CSYieldStatementNode #CSClassDeclarationNode #OrderedCollection #OrderedCollection #SmaCCToken #CSTypeParameterListNode #CSTypeParameterListNode #OrderedCollection #CSTypeNameNode #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #CSTypeParameterConstraintsClauseNode #OrderedCollection #CSProgramNode #OrderedCollection #CSTypeConstraintNode #CSConstructorConstraintNode #OrderedCollection #OrderedCollection #OrderedCollection #CSDeclarationNode #CSConstantDeclarationNode #OrderedCollection #OrderedCollection #SmaCCToken #OrderedCollection #CSConstantDeclaratorNode #CSFieldDeclarationNode #OrderedCollection #OrderedCollection #SmaCCToken #OrderedCollection #CSVariableDeclaratorNode #CSProgramNode #CSMethodDeclarationNode #CSMethodHeaderNode #OrderedCollection #OrderedCollection #SmaCCToken #CSTypeNode #OrderedCollection #CSMethodBodyNode #OrderedCollection #OrderedCollection #OrderedCollection #CSFixedParameterNode #OrderedCollection #OrderedCollection #SmaCCToken #SmaCCToken #CSArrayParameterNode #CSPropertyDeclarationNode #OrderedCollection #OrderedCollection #SmaCCToken #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #CSGetAccessorDeclarationNode #CSGetAccessorDeclarationNode #CSSetAccessorDeclarationNode #CSSetAccessorDeclarationNode #OrderedCollection #OrderedCollection #OrderedCollection #CSEventDeclarationNode #OrderedCollection #OrderedCollection #SmaCCToken #OrderedCollection #CSAddAccessorDeclarationNode #CSRemoveAccessorDeclarationNode #CSIndexerDeclarationNode #OrderedCollection #OrderedCollection #SmaCCToken #OrderedCollection #OrderedCollection #CSOperatorDeclarationNode #OrderedCollection #SmaCCToken #OrderedCollection #OrderedCollection #SmaCCToken #OrderedCollection #SmaCCToken #OrderedCollection #CSMethodBodyNode #CSConstructorDeclarationNode #OrderedCollection #OrderedCollection #SmaCCToken #OrderedCollection #CSConstructorInitializerNode #CSConstructorInitializerNode #OrderedCollection #CSStaticConstructorDeclarationNode #OrderedCollection #OrderedCollection #CSStructDeclarationNode #OrderedCollection #OrderedCollection #SmaCCToken #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #CSDeclarationNode #CSArrayInitializerNode #CSArrayInitializerNode #OrderedCollection #OrderedCollection #CSInterfaceDeclarationNode #OrderedCollection #OrderedCollection #SmaCCToken #CSVariantTypeParameterListNode #CSVariantTypeParameterListNode #OrderedCollection #SmaCCToken #SmaCCToken #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #CSDeclarationNode #CSInterfaceMethodDeclarationNode #CSInterfacePropertyDeclarationNode #OrderedCollection #CSInterfacePropertyAccessorNode #CSInterfacePropertyAccessorNode #CSInterfaceEventDeclarationNode #CSInterfaceIndexerDeclarationNode #CSEnumDeclarationNode #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #SmaCCToken #OrderedCollection #OrderedCollection #CSEnumDeclarationNode #CSDelegateDeclarationNode #OrderedCollection #OrderedCollection #SmaCCToken #OrderedCollection #OrderedCollection #OrderedCollection #CSAttributeNode #OrderedCollection #SmaCCToken #OrderedCollection #OrderedCollection #OrderedCollection #CSAttributeNode #OrderedCollection #OrderedCollection #SmaCCToken #OrderedCollection #CSAttributeValueNode #CSTypeNode #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #CSExpressionNode #OrderedCollection #CSNamedArgumentNode #CSExpressionNode #CSLiteralExpressionNode #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #CSDestructorDeclarationNode #SmaCCToken #CSUnsafeStatementNode #CSPointerTypeNode #CSTypeNode #CSPrefixExpressionNode #CSPointerMemberAccessNode #CSPointerElementAccessNode #CSPrefixExpressionNode #CSSizeofExpressionNode #CSFixedStatementNode #OrderedCollection #CSFixedPointerDeclaratorNode #OrderedCollection #CSFixedSizeBufferDeclarationNode #OrderedCollection #OrderedCollection #SmaCCToken #CSTypeNode #OrderedCollection #CSFixedSizeBufferDeclaratorNode #CSStackallocInitializerNode #CSVoidTypeNode #SmaCCToken #SmaCCErrorNode) -] - -{ #category : #generated } -CSharpParser class >> transitionTable [ -^#( -#[1 0 6 0 37 0 6 0 41 0 6 0 57 0 6 0 62 0 6 0 67 0 29 0 71 0 6 0 87 0 6 0 88 0 6 0 98 0 6 0 99 0 6 0 108 0 6 0 109 0 6 0 111 0 6 0 112 0 6 0 118 0 6 0 124 0 6 0 126 0 6 0 137 0 6 0 139 0 33 0 174 0 37 0 178 0 41 0 179 0 45 0 180 0 6 2 100] -#[1 0 49 0 37 0 10 0 41 0 10 0 57 0 10 0 62 0 10 0 67 0 10 0 87 0 10 0 88 0 53 0 98 0 10 0 99 0 10 0 108 0 10 0 109 0 10 0 111 0 10 0 112 0 10 0 118 0 10 0 124 0 10 0 126 0 10 0 137 0 61 0 175 0 61 0 189 0 61 0 190 0 61 1 150 0 61 1 252 0 61 2 10 0 61 2 32 0 61 2 42 0 89 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 137 0 25 0 141 0 47 0 145 0 48 0 149 0 49 0 153 0 50 0 157 0 52 0 161 0 55 0 165 0 56 0 169 0 58 0 173 0 59 0 177 0 60 0 181 0 61 0 185 0 62 0 189 0 64 0 193 0 65 2 217 0 72 0 201 0 75 0 205 0 76 0 209 0 77 0 213 0 78 0 217 0 81 0 221 0 83 0 225 0 86 0 229 0 93 0 233 0 94 0 237 0 97 0 241 0 99 0 245 0 100 0 249 0 116 0 253 0 117 1 1 0 121 1 5 0 122 1 9 0 125 1 13 0 127 1 17 0 128 1 21 0 129 2 217 0 130 1 29 0 131 1 33 0 133 1 37 0 134 1 41 0 135 1 45 0 136 1 49 0 137 1 53 0 138 1 57 0 139 1 61 0 140 1 65 0 142 1 69 0 146 1 73 0 147 1 77 0 148 1 81 0 152 1 85 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 1 117 0 191 1 121 0 193 1 125 0 194 1 129 0 196 1 129 0 197 1 129 0 198 1 129 0 199 1 145 0 200 1 145 0 201 1 145 0 202 1 129 0 203 1 161 0 204 1 129 0 205 1 129 0 206 1 129 0 207 1 129 0 208 1 129 0 209 1 185 0 210 1 129 0 216 1 193 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 245 0 244 1 197 0 245 1 197 0 247 1 197 0 248 2 5 0 249 2 9 0 250 2 13 0 251 1 193 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 2 49 1 26 2 49 1 27 2 125 1 31 2 61 1 32 2 65 1 33 2 49 1 34 2 73 1 35 1 197 1 49 2 125 1 83 2 85 1 90 2 85 1 91 2 85 1 92 2 85 1 95 2 85 1 96 2 85 1 97 2 109 1 98 2 113 1 99 2 117 1 104 2 85 1 107 2 125 1 108 2 85 1 109 2 85 1 110 2 85 1 111 2 85 1 118 2 85 1 119 2 85 1 120 2 85 1 121 2 85 1 129 2 85 1 130 2 85 1 131 2 85 1 132 2 85 1 133 2 85 1 134 2 85 1 135 2 85 1 136 2 85 1 144 2 85 1 145 2 85 1 146 2 85 1 147 2 85 1 149 1 129 1 157 1 197 2 70 2 217 2 71 2 85 2 79 1 129 2 80 2 229 2 81 2 49 2 82 1 197 2 83 1 197 2 84 2 49 2 85 1 197 2 86 2 85 2 87 3 1 2 99] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 3 205 1 47 3 205 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 3 205 1 63 3 197 1 64 3 205 1 83 3 205 1 86 3 205 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 1 77 0 148 3 213 1 92] -#[1 0 49 0 37 0 10 0 41 0 10 0 49 0 10 0 52 0 10 0 55 0 10 0 57 0 10 0 58 0 10 0 60 0 10 0 62 0 10 0 65 0 10 0 67 0 10 0 69 0 10 0 71 0 10 0 76 0 10 0 86 0 10 0 87 0 10 0 88 0 10 0 94 0 10 0 99 0 10 0 100 0 10 0 105 0 10 0 108 0 10 0 109 0 10 0 111 0 10 0 112 0 10 0 113 0 10 0 117 0 10 0 118 0 10 0 121 0 10 0 124 0 10 0 125 0 10 0 126 0 10 0 134 0 10 0 135 0 10 0 137 0 10 0 138 0 10 0 141 0 10 0 142 0 10 0 143 0 10 0 152 0 10 0 157 3 221 0 190 3 221 1 150 3 221 1 172 3 221 1 173 3 221 1 179 3 221 1 186 3 237 1 187 3 221 1 203 3 221 1 218 3 221 1 225 3 221 1 231 3 221 1 241 3 221 1 249 3 221 1 252 3 221 2 10 3 221 2 32 3 221 2 42 4 9 2 52 0 93 2 53 0 97 2 54 0 101 2 55 3 221 2 77] -#[0 4 17 0 43] -#[0 0 0 2 100] -#[1 0 22 0 37 0 22 0 41 0 22 0 57 0 22 0 62 0 22 0 67 0 22 0 87 0 22 0 88 0 22 0 98 0 22 0 99 0 22 0 108 0 22 0 109 0 22 0 111 0 22 0 112 0 22 0 118 0 22 0 124 0 22 0 126 0 22 0 137 4 21 0 139 4 25 0 181 4 29 0 182 4 33 0 183 4 33 0 184 4 33 0 185 4 33 0 186 0 22 2 100] -#[1 0 26 0 37 0 26 0 41 0 26 0 57 0 26 0 62 0 26 0 67 0 29 0 71 0 26 0 87 0 26 0 88 0 26 0 98 0 26 0 99 0 26 0 108 0 26 0 109 0 26 0 111 0 26 0 112 0 26 0 118 0 26 0 124 0 26 0 126 0 26 0 137 0 26 0 139 0 26 0 155 4 49 0 180 0 26 2 100] -#[0 0 30 0 37 0 41 0 57 0 62 0 67 0 71 0 87 0 88 0 98 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 126 0 137 0 139 0 155 2 100] -#[1 4 89 0 69 4 89 0 73 4 89 0 95 4 89 0 106 4 89 0 110 4 89 0 116 4 89 0 132 0 34 0 157 4 81 2 56 4 85 2 57 4 89 2 58] -#[1 4 93 0 157 4 97 0 176] -#[0 0 38 0 37 0 41 0 57 0 62 0 67 0 87 0 88 0 98 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 126 0 137 0 155 2 100] -#[0 0 0 2 100] -#[0 0 42 0 37 0 41 0 57 0 62 0 67 0 87 0 88 0 98 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 126 0 137 0 155 2 100] -#[0 0 46 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 98 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 0 50 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 98 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 0 54 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 98 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 0 58 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 98 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 0 62 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 98 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[1 4 145 0 41 0 66 0 57 0 70 0 62 0 74 0 67 0 78 0 87 4 105 0 88 4 109 0 99 0 7 0 108 4 113 0 109 4 117 0 111 4 121 0 112 4 145 0 118 4 145 0 124 0 82 0 126 4 133 0 137 4 137 1 151 4 141 1 152 4 145 1 153 4 149 1 253 4 153 1 254 4 157 1 255 4 161 2 11 4 165 2 12 4 169 2 13 4 173 2 36 4 177 2 37 4 181 2 38 4 185 2 43 4 189 2 44 4 193 2 45] -#[0 0 86 0 41 0 42 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 80 0 85 0 86 0 87 0 88 0 94 0 99 0 100 0 104 0 105 0 107 0 108 0 109 0 111 0 112 0 113 0 114 0 115 0 117 0 118 0 120 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 157] -#[1 0 49 0 37 0 90 0 41 0 90 0 42 0 90 0 49 0 90 0 52 0 90 0 55 0 90 0 57 0 90 0 58 0 90 0 60 0 90 0 62 0 90 0 65 0 90 0 67 0 90 0 69 0 90 0 71 0 90 0 75 0 90 0 76 0 90 0 80 0 90 0 85 0 90 0 86 0 90 0 87 0 90 0 88 0 90 0 94 0 90 0 99 0 90 0 100 0 90 0 104 0 90 0 105 0 90 0 107 0 90 0 108 0 90 0 109 0 90 0 111 0 90 0 112 0 90 0 113 0 90 0 114 0 90 0 115 0 90 0 117 0 90 0 118 0 90 0 120 0 90 0 121 0 90 0 124 0 90 0 125 0 90 0 126 0 90 0 128 0 90 0 134 0 90 0 135 0 90 0 137 0 90 0 138 0 90 0 141 0 90 0 142 0 90 0 143 0 90 0 152 0 90 0 157 4 197 2 55] -#[0 0 94 0 37 0 41 0 42 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 80 0 85 0 86 0 87 0 88 0 94 0 99 0 100 0 104 0 105 0 107 0 108 0 109 0 111 0 112 0 113 0 114 0 115 0 117 0 118 0 120 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 157] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 4 205 1 26 4 205 1 27 4 205 1 32 4 205 1 33 4 205 1 34 4 205 1 35 1 197 1 49 1 197 2 70 2 217 2 71 4 205 2 82 1 197 2 83 1 197 2 84 4 205 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 4 209 1 26 4 209 1 27 4 209 1 32 4 209 1 33 4 209 1 34 4 209 1 35 1 197 1 49 1 197 2 70 2 217 2 71 4 209 2 82 1 197 2 83 1 197 2 84 4 209 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 0 149 0 49 0 157 0 52 0 161 0 55 3 21 0 56 0 177 0 60 0 181 0 61 0 185 0 62 0 193 0 65 2 217 0 72 0 205 0 76 3 37 0 79 0 225 0 86 0 233 0 94 0 237 0 97 0 241 0 99 0 245 0 100 0 253 0 117 1 1 0 121 1 5 0 122 1 9 0 125 1 17 0 128 2 217 0 130 1 33 0 133 1 37 0 134 1 41 0 135 3 73 0 136 1 53 0 138 1 65 0 142 1 81 0 152 4 213 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 1 117 0 191 1 121 0 193 1 125 0 194 4 217 0 196 4 217 0 197 4 217 0 198 4 217 0 199 1 145 0 200 1 145 0 201 1 145 0 202 4 217 0 203 1 161 0 204 4 217 0 205 4 217 0 206 4 217 0 207 4 217 0 208 4 217 0 209 1 185 0 210 4 217 0 216 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 4 221 1 47 4 221 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 4 221 1 63 3 197 1 64 4 221 1 83 4 221 1 86 4 221 1 87 4 217 1 157 1 197 2 70 2 217 2 71 4 217 2 80 2 229 2 81 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86 3 1 2 99] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 4 225 1 26 4 225 1 27 4 225 1 32 4 225 1 33 4 225 1 34 4 225 1 35 1 197 1 49 1 197 2 70 2 217 2 71 4 225 2 82 1 197 2 83 1 197 2 84 4 225 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 4 229 1 26 4 229 1 27 4 229 1 32 4 229 1 33 4 229 1 34 4 229 1 35 1 197 1 49 1 197 2 70 2 217 2 71 4 229 2 82 1 197 2 83 1 197 2 84 4 229 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 4 233 1 26 4 233 1 27 4 233 1 32 4 233 1 33 4 233 1 34 4 233 1 35 1 197 1 49 1 197 2 70 2 217 2 71 4 233 2 82 1 197 2 83 1 197 2 84 4 233 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 4 237 1 26 4 237 1 27 4 237 1 32 4 237 1 33 4 237 1 34 4 237 1 35 1 197 1 49 1 197 2 70 2 217 2 71 4 237 2 82 1 197 2 83 1 197 2 84 4 237 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 4 241 1 26 4 241 1 27 4 241 1 32 4 241 1 33 4 241 1 34 4 241 1 35 1 197 1 49 1 197 2 70 2 217 2 71 4 241 2 82 1 197 2 83 1 197 2 84 4 241 2 85 1 197 2 86] -#[0 0 98 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 4 245 1 26 4 245 1 27 4 245 1 32 4 245 1 33 4 245 1 34 4 245 1 35 1 197 1 49 1 197 2 70 2 217 2 71 4 245 2 82 1 197 2 83 1 197 2 84 4 245 2 85 1 197 2 86] -#[1 4 249 0 20 4 253 0 37] -#[1 0 102 0 9 0 102 0 10 0 106 0 20 0 102 0 35 0 102 0 37 0 102 0 157] -#[0 5 1 0 25] -#[1 0 110 0 9 0 110 0 10 0 114 0 20 0 110 0 35 0 110 0 37 0 110 0 157] -#[1 0 118 0 9 0 118 0 10 0 122 0 20 0 118 0 35 0 118 0 37 0 118 0 157] -#[1 5 5 0 8 1 77 0 148 5 9 1 92] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 5 81 0 196 5 81 0 197 5 81 0 198 5 81 0 199 1 145 0 200 1 145 0 201 1 145 0 202 5 81 0 203 1 161 0 204 5 81 0 205 5 81 0 206 5 81 0 207 5 81 0 208 5 81 0 209 1 185 0 210 5 81 0 216 5 81 1 157 5 81 2 80 2 229 2 81 3 1 2 99] -#[0 5 85 0 25] -#[1 0 126 0 9 0 126 0 10 0 130 0 20 0 126 0 35 0 126 0 37 0 126 0 157] -#[0 5 89 0 8] -#[1 5 93 0 8 0 134 0 148 5 97 1 51 5 97 1 52] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 137 0 25 0 141 0 47 0 145 0 48 3 9 0 49 0 153 0 50 3 13 0 52 3 17 0 55 0 165 0 56 0 173 0 59 3 25 0 60 0 181 0 61 0 185 0 62 0 189 0 64 3 29 0 65 2 217 0 72 0 201 0 75 3 33 0 76 0 209 0 77 0 213 0 78 0 217 0 81 0 221 0 83 3 41 0 86 0 229 0 93 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 0 249 0 116 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 13 0 127 1 17 0 128 1 21 0 129 2 217 0 130 1 29 0 131 1 33 0 133 3 65 0 134 3 69 0 135 1 45 0 136 1 49 0 137 3 77 0 138 1 57 0 139 1 69 0 146 1 73 0 147 1 77 0 148 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 1 193 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 245 0 244 1 197 0 245 1 197 0 247 1 197 0 248 2 5 0 249 2 9 0 250 2 13 0 251 1 193 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 2 49 1 26 2 49 1 27 2 125 1 31 2 61 1 32 2 65 1 33 2 49 1 34 2 73 1 35 1 197 1 49 2 125 1 83 5 105 1 91 5 105 1 92 5 105 1 95 5 105 1 107 2 125 1 108 5 105 1 109 5 105 1 110 5 105 1 111 5 105 1 118 5 105 1 119 5 105 1 120 5 105 1 121 5 105 1 129 5 105 1 130 5 105 1 131 5 105 1 132 5 105 1 133 5 105 1 134 5 105 1 135 5 105 1 136 5 105 1 144 5 105 1 145 5 105 1 146 5 105 1 147 5 105 1 149 1 197 2 70 2 217 2 71 5 105 2 79 2 49 2 82 1 197 2 83 1 197 2 84 2 49 2 85 1 197 2 86 5 105 2 87] -#[1 0 138 0 9 0 138 0 10 0 142 0 20 0 138 0 35 0 138 0 37 0 138 0 157] -#[0 0 146 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 5 109 0 8] -#[1 0 150 0 9 0 150 0 10 0 154 0 20 0 150 0 35 0 150 0 37 0 150 0 157] -#[0 5 113 0 8] -#[0 5 117 0 8] -#[1 5 121 0 53 5 125 0 61 5 129 0 157] -#[0 5 133 0 8] -#[1 0 158 0 9 0 158 0 10 0 162 0 20 0 158 0 35 0 158 0 37 0 158 0 157] -#[0 5 137 0 8] -#[1 0 166 0 9 0 166 0 10 0 170 0 20 0 166 0 35 0 166 0 37 0 166 0 157] -#[0 5 141 0 8] -#[1 5 145 0 37 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 149 0 148 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 5 153 0 196 5 153 0 197 5 153 0 198 5 153 0 199 1 145 0 200 1 145 0 201 1 145 0 202 5 153 0 203 1 161 0 204 5 153 0 205 5 153 0 206 5 153 0 207 5 153 0 208 5 157 0 209 5 161 0 210 5 165 0 213 5 169 0 216 5 173 1 10 5 153 1 157 5 153 2 80 2 229 2 81 3 1 2 99] -#[1 0 174 0 9 0 174 0 10 0 178 0 20 0 174 0 35 0 174 0 37 0 174 0 157] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 182 0 25 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 5 177 1 47 5 177 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 5 177 1 63 3 197 1 64 5 177 1 83 5 177 1 85 5 177 1 86 5 177 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 0 186 0 9 0 186 0 10 0 190 0 20 0 186 0 35 0 186 0 37 0 186 0 157] -#[1 0 194 0 9 0 194 0 10 0 198 0 20 0 194 0 35 0 194 0 37 0 194 0 157] -#[0 5 185 0 8] -#[1 0 202 0 9 0 202 0 10 0 206 0 20 0 202 0 35 0 202 0 37 0 202 0 157] -#[0 5 189 0 8] -#[0 0 210 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 182 0 25 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 5 193 1 47 5 193 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 5 193 1 63 3 197 1 64 5 193 1 83 5 193 1 85 5 193 1 86 5 193 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 0 214 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 1 77 0 148 5 197 1 92] -#[0 5 201 0 8] -#[1 0 218 0 9 0 218 0 10 0 222 0 20 0 218 0 35 0 218 0 37 0 218 0 157] -#[1 0 226 0 9 0 226 0 10 0 230 0 20 0 226 0 35 0 226 0 37 0 226 0 157] -#[1 5 205 0 8 1 77 0 148 5 209 1 92] -#[1 1 77 0 148 5 213 1 92] -#[1 0 234 0 9 0 234 0 10 0 238 0 20 0 234 0 35 0 234 0 37 0 234 0 157] -#[0 5 217 0 8] -#[0 0 242 0 157] -#[0 0 246 0 9 0 10 0 157] -#[0 5 221 0 8] -#[1 5 225 0 50 5 229 0 116] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 137 0 25 0 141 0 47 0 145 0 48 0 149 0 49 0 153 0 50 0 157 0 52 0 161 0 55 0 165 0 56 0 169 0 58 0 173 0 59 0 177 0 60 0 181 0 61 0 185 0 62 0 189 0 64 0 193 0 65 2 217 0 72 0 201 0 75 0 205 0 76 0 209 0 77 0 213 0 78 0 217 0 81 0 221 0 83 0 225 0 86 0 229 0 93 0 233 0 94 0 237 0 97 0 241 0 99 0 245 0 100 0 249 0 116 0 253 0 117 1 1 0 121 1 5 0 122 1 9 0 125 1 13 0 127 1 17 0 128 1 21 0 129 2 217 0 130 1 29 0 131 1 33 0 133 1 37 0 134 1 41 0 135 1 45 0 136 1 49 0 137 1 53 0 138 1 57 0 139 1 61 0 140 1 65 0 142 1 69 0 146 1 73 0 147 1 77 0 148 1 81 0 152 0 250 0 155 1 85 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 1 117 0 191 1 121 0 193 1 125 0 194 1 129 0 196 1 129 0 197 1 129 0 198 1 129 0 199 1 145 0 200 1 145 0 201 1 145 0 202 1 129 0 203 1 161 0 204 1 129 0 205 1 129 0 206 1 129 0 207 1 129 0 208 1 129 0 209 1 185 0 210 1 129 0 216 1 193 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 245 0 244 1 197 0 245 1 197 0 247 1 197 0 248 2 5 0 249 2 9 0 250 2 13 0 251 1 193 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 2 49 1 26 2 49 1 27 2 125 1 31 2 61 1 32 2 65 1 33 2 49 1 34 2 73 1 35 1 197 1 49 2 125 1 83 5 233 1 90 5 233 1 91 5 233 1 92 5 237 1 93 5 241 1 94 5 233 1 95 5 233 1 96 5 233 1 97 2 109 1 98 2 113 1 99 2 117 1 104 5 233 1 107 2 125 1 108 5 233 1 109 5 233 1 110 5 233 1 111 5 233 1 118 5 233 1 119 5 233 1 120 5 233 1 121 5 233 1 129 5 233 1 130 5 233 1 131 5 233 1 132 5 233 1 133 5 233 1 134 5 233 1 135 5 233 1 136 5 233 1 144 5 233 1 145 5 233 1 146 5 233 1 147 5 233 1 149 1 129 1 157 1 197 2 70 2 217 2 71 5 233 2 79 1 129 2 80 2 229 2 81 2 49 2 82 1 197 2 83 1 197 2 84 2 49 2 85 1 197 2 86 5 233 2 87 3 1 2 99] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 5 245 1 26 5 245 1 27 5 245 1 32 5 245 1 33 5 245 1 34 5 245 1 35 1 197 1 49 1 197 2 70 2 217 2 71 5 245 2 82 1 197 2 83 1 197 2 84 5 245 2 85 1 197 2 86] -#[1 0 254 0 4 0 254 0 7 0 254 0 8 0 11 0 10 0 254 0 11 0 254 0 13 0 254 0 14 0 254 0 17 0 254 0 18 0 254 0 19 0 254 0 20 0 254 0 22 5 249 0 23 5 253 0 24 6 1 0 26 0 254 0 28 0 254 0 30 0 254 0 34 0 11 0 35 0 11 0 37 0 254 0 40 0 254 0 150 0 11 0 157 6 9 0 217 6 9 0 238] -#[0 1 6 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 10 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 14 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 18 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 22 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 26 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 30 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 1 34 0 9 1 34 0 10 0 15 0 20 1 34 0 35 1 34 0 37 1 34 0 157] -#[0 0 19 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 1 62 0 2 1 62 0 5 1 62 0 6 1 62 0 8 1 62 0 9 1 62 0 10 1 62 0 15 0 23 0 20 1 62 0 23 1 62 0 25 1 62 0 26 1 62 0 29 1 62 0 31 1 62 0 32 1 62 0 33 1 62 0 35 1 62 0 36 1 62 0 37 1 62 0 38 1 62 0 39 1 62 0 41 1 62 0 44 1 62 0 45 1 62 0 49 1 62 0 51 1 62 0 52 1 62 0 55 1 62 0 57 1 62 0 58 1 62 0 60 1 62 0 62 1 62 0 63 1 62 0 65 1 62 0 67 1 62 0 68 1 62 0 69 1 62 0 71 1 62 0 75 1 62 0 76 1 62 0 79 1 62 0 82 1 62 0 86 1 62 0 87 1 62 0 88 1 62 0 89 1 62 0 90 1 62 0 91 1 62 0 92 1 62 0 94 1 62 0 99 1 62 0 100 1 62 0 101 1 62 0 102 1 62 0 103 1 62 0 105 1 62 0 108 1 62 0 109 1 62 0 111 1 62 0 112 1 62 0 113 1 62 0 117 1 62 0 118 1 62 0 119 1 62 0 121 1 62 0 124 1 62 0 125 1 62 0 126 1 62 0 128 1 62 0 134 1 62 0 135 1 62 0 137 1 62 0 138 1 62 0 141 1 62 0 142 1 62 0 143 1 62 0 145 1 62 0 148 1 62 0 149 1 62 0 151 1 62 0 152 1 62 0 153 1 62 0 155 1 62 0 157 1 62 0 163 1 62 0 164 1 62 0 167 1 62 0 168 1 62 2 100] -#[1 1 66 0 10 1 70 0 35 1 74 0 37 1 78 0 157] -#[0 1 82 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 86 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 90 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 94 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 98 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 102 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 106 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 6 17 0 35] -#[0 1 110 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 114 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 118 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 122 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 126 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 5 145 0 37 6 21 0 212 6 25 0 213] -#[0 1 130 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 1 134 0 4 1 134 0 7 6 29 0 8 1 134 0 11 6 33 0 13 1 134 0 14 6 37 0 17 1 134 0 18 6 41 0 19 6 45 0 20 1 134 0 22 1 134 0 28 1 134 0 30 1 134 0 34 1 138 0 35 1 134 0 40 1 134 0 150 6 49 1 28 6 53 1 29] -#[1 1 142 0 2 1 142 0 3 1 142 0 4 1 142 0 5 1 142 0 6 1 142 0 7 1 142 0 8 1 142 0 9 1 142 0 10 1 142 0 11 1 142 0 12 1 142 0 13 1 142 0 14 1 142 0 15 1 142 0 16 1 142 0 17 1 142 0 18 1 142 0 19 1 142 0 20 1 142 0 21 1 142 0 22 1 142 0 23 1 142 0 25 1 142 0 26 1 142 0 27 1 142 0 28 1 142 0 29 1 142 0 30 1 142 0 31 1 142 0 33 1 142 0 34 1 142 0 35 1 142 0 36 0 27 0 37 1 142 0 38 1 142 0 39 1 142 0 40 1 142 0 41 1 142 0 44 1 142 0 45 1 142 0 49 1 142 0 51 1 142 0 52 1 142 0 55 1 142 0 57 1 142 0 58 1 142 0 60 1 142 0 62 1 142 0 63 1 142 0 65 1 142 0 67 1 142 0 68 1 142 0 69 1 142 0 71 1 142 0 75 1 142 0 76 1 142 0 79 1 142 0 82 1 142 0 86 1 142 0 87 1 142 0 88 1 142 0 89 1 142 0 90 1 142 0 91 1 142 0 92 1 142 0 94 1 142 0 99 1 142 0 100 1 142 0 101 1 142 0 103 1 142 0 105 1 142 0 108 1 142 0 109 1 142 0 111 1 142 0 112 1 142 0 113 1 142 0 117 1 142 0 118 1 142 0 119 1 142 0 121 1 142 0 124 1 142 0 125 1 142 0 126 1 142 0 134 1 142 0 135 1 142 0 137 1 142 0 138 1 142 0 141 1 142 0 142 1 142 0 143 1 142 0 145 1 142 0 149 1 142 0 150 1 142 0 151 1 142 0 152 1 142 0 153 1 142 0 154 1 142 0 155 1 142 0 157 1 142 0 163 1 142 0 164 1 142 0 167 1 142 0 168 1 142 2 100] -#[0 1 146 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 150 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 6 61 0 162] -#[0 1 154 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 6 65 0 166] -#[0 1 158 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 162 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 166 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 6 69 0 20] -#[0 6 73 0 20] -#[0 1 170 0 20] -#[1 1 174 0 4 1 174 0 7 1 174 0 8 1 178 0 9 1 174 0 11 1 174 0 13 1 174 0 14 1 178 0 15 1 174 0 17 1 174 0 18 1 174 0 19 1 174 0 20 1 174 0 22 1 178 0 25 1 174 0 28 1 174 0 30 1 174 0 34 1 174 0 35 1 174 0 37 1 174 0 40 1 174 0 150] -#[0 1 182 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 186 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 190 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 1 194 0 4 1 194 0 7 1 194 0 8 1 198 0 9 1 194 0 11 1 194 0 13 1 194 0 14 1 198 0 15 1 194 0 17 1 194 0 18 1 194 0 19 1 194 0 20 1 194 0 22 1 198 0 25 1 194 0 28 1 194 0 30 1 194 0 34 1 194 0 35 1 194 0 37 1 194 0 40 1 194 0 150] -#[1 1 202 0 4 1 202 0 7 1 202 0 8 1 206 0 9 1 202 0 11 1 202 0 13 1 202 0 14 1 206 0 15 1 202 0 17 1 202 0 18 1 202 0 19 1 202 0 20 1 202 0 22 1 206 0 25 1 202 0 28 1 202 0 30 1 202 0 34 1 202 0 35 1 202 0 37 1 202 0 40 1 202 0 150] -#[1 1 210 0 4 1 210 0 7 1 210 0 8 1 214 0 9 1 210 0 11 1 210 0 13 1 210 0 14 1 214 0 15 1 210 0 17 1 210 0 18 1 210 0 19 1 210 0 20 1 210 0 22 1 214 0 25 1 210 0 28 1 210 0 30 1 210 0 34 1 210 0 35 1 210 0 37 1 210 0 40 1 210 0 150] -#[0 1 218 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 222 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 226 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 230 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 234 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 238 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 242 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 246 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 6 121 0 4 0 7 0 11 0 14 0 18 0 22 0 28 0 30 0 34 0 40 0 150 1 84] -#[0 1 250 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 254 0 9 0 15 0 25] -#[1 2 2 0 4 2 2 0 7 2 6 0 9 2 2 0 11 2 2 0 14 2 6 0 15 2 2 0 18 2 2 0 22 2 6 0 25 2 2 0 28 2 2 0 30 2 2 0 34 2 2 0 40 2 2 0 150] -#[1 2 10 0 4 2 10 0 7 2 14 0 9 2 10 0 11 2 10 0 14 2 14 0 15 2 10 0 18 2 10 0 22 2 14 0 25 2 10 0 28 2 10 0 30 2 10 0 34 2 10 0 40 2 10 0 150] -#[0 2 18 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 2 22 0 4 2 22 0 7 2 26 0 9 2 22 0 11 2 22 0 14 2 26 0 15 2 22 0 18 2 22 0 22 2 26 0 25 2 22 0 28 2 22 0 30 2 22 0 34 2 22 0 40 2 22 0 150] -#[0 2 30 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 2 34 0 9 0 15 0 25] -#[0 0 0 2 100] -#[0 2 38 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 2 42 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 2 46 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 2 50 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 2 54 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 6 125 0 25] -#[1 6 129 0 157 6 133 1 100 6 137 1 101 6 141 1 102] -#[0 6 145 0 25] -#[0 2 58 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 6 149 0 25] -#[0 2 62 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 2 66 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 2 70 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 2 74 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 2 78 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 2 82 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 2 86 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 2 90 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 2 94 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 2 98 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 2 102 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 2 106 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 2 110 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 2 114 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 2 118 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 2 122 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 2 126 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 2 130 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 2 134 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 2 138 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 2 142 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 2 146 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 2 150 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 2 154 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 2 158 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 6 153 0 10] -#[0 2 162 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 2 166 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 2 170 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 2 174 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 2 178 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 2 182 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 6 157 0 10] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 31 0 9 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 0 35 0 49 0 39 0 52 0 43 0 55 3 21 0 56 0 47 0 60 0 181 0 61 0 185 0 62 0 51 0 65 2 217 0 72 0 55 0 76 3 37 0 79 0 59 0 86 0 63 0 94 0 237 0 97 0 241 0 99 0 67 0 100 6 181 0 104 6 181 0 114 0 71 0 117 0 75 0 121 1 5 0 122 0 79 0 125 1 17 0 128 2 217 0 130 1 33 0 133 0 83 0 134 0 87 0 135 3 73 0 136 0 91 0 138 0 95 0 142 1 81 0 152 0 99 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 1 117 0 191 1 121 0 193 1 125 0 194 4 217 0 196 4 217 0 197 4 217 0 198 4 217 0 199 1 145 0 200 1 145 0 201 1 145 0 202 4 217 0 203 1 161 0 204 4 217 0 205 4 217 0 206 4 217 0 207 4 217 0 208 4 217 0 209 1 185 0 210 4 217 0 216 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 4 221 1 47 4 221 1 48 1 197 1 49 3 177 1 50 3 177 1 52 6 169 1 53 6 173 1 54 6 177 1 55 6 181 1 56 6 181 1 57 3 177 1 58 6 189 1 59 6 193 1 60 6 197 1 61 4 221 1 63 3 197 1 64 4 221 1 83 4 221 1 86 4 221 1 87 4 217 1 157 1 197 2 70 2 217 2 71 4 217 2 80 2 229 2 81 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86 3 1 2 99] -#[0 0 106 0 20] -#[0 0 114 0 20] -#[0 0 122 0 20] -#[0 5 5 0 8] -#[0 0 130 0 20] -#[0 0 142 0 20] -#[0 0 154 0 20] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 0 103 0 157 1 125 0 191 1 121 0 193 1 125 0 194 6 201 0 195 6 205 0 196 6 205 0 197 6 205 0 198 6 205 0 199 1 145 0 200 1 145 0 201 1 145 0 202 6 205 0 203 1 161 0 204 6 205 0 205 6 205 0 206 6 205 0 207 6 205 0 208 6 205 0 209 1 185 0 210 6 205 0 216 6 205 1 157 6 205 2 80 2 229 2 81 3 1 2 99] -#[0 0 162 0 20] -#[0 0 170 0 20] -#[0 0 178 0 20] -#[0 0 190 0 20] -#[0 0 198 0 20] -#[0 0 206 0 20] -#[0 0 222 0 20] -#[0 0 230 0 20] -#[0 5 205 0 8] -#[0 0 238 0 20] -#[1 0 254 0 2 0 254 0 3 0 254 0 4 0 254 0 5 0 254 0 6 0 254 0 7 0 254 0 8 0 254 0 9 0 254 0 10 0 254 0 11 0 254 0 12 0 254 0 13 0 254 0 14 0 254 0 15 0 254 0 16 0 254 0 17 0 254 0 18 0 254 0 19 0 254 0 20 0 254 0 21 0 254 0 22 0 254 0 23 5 253 0 24 0 254 0 25 0 107 0 26 0 254 0 27 0 254 0 28 0 254 0 29 0 254 0 30 0 254 0 31 2 202 0 32 0 254 0 33 0 254 0 34 0 254 0 35 0 254 0 36 0 254 0 37 0 254 0 38 0 254 0 39 0 254 0 40 0 254 0 41 0 254 0 44 0 254 0 45 0 254 0 49 0 254 0 51 0 254 0 52 0 254 0 55 0 254 0 57 0 254 0 58 0 254 0 60 0 254 0 62 0 254 0 63 0 254 0 65 0 254 0 67 0 254 0 68 0 254 0 69 0 254 0 71 0 254 0 75 0 254 0 76 0 254 0 79 0 254 0 82 0 254 0 86 0 254 0 87 0 254 0 88 0 254 0 89 0 254 0 90 0 254 0 91 0 254 0 92 0 254 0 94 0 254 0 99 0 254 0 100 0 254 0 101 0 254 0 103 0 254 0 105 0 254 0 108 0 254 0 109 0 254 0 111 0 254 0 112 0 254 0 113 0 254 0 117 0 254 0 118 0 254 0 119 0 254 0 121 0 254 0 124 0 254 0 125 0 254 0 126 0 254 0 134 0 254 0 135 0 254 0 137 0 254 0 138 0 254 0 141 0 254 0 142 0 254 0 143 0 254 0 145 0 254 0 149 0 254 0 150 0 254 0 151 0 254 0 152 0 254 0 153 0 254 0 154 0 254 0 155 0 254 0 157 0 254 0 163 0 254 0 164 0 254 0 167 0 254 0 168 6 209 0 217 6 209 0 238 0 254 2 100] -#[0 1 38 0 20] -#[1 1 134 0 2 1 134 0 3 1 134 0 4 1 134 0 5 1 134 0 6 1 134 0 7 6 29 0 8 1 134 0 9 1 134 0 10 1 134 0 11 1 134 0 12 6 33 0 13 1 134 0 14 1 134 0 15 1 134 0 16 6 37 0 17 1 134 0 18 6 41 0 19 6 45 0 20 1 134 0 21 1 134 0 22 1 134 0 23 1 134 0 25 1 134 0 26 1 134 0 27 1 134 0 28 1 134 0 29 1 134 0 30 1 134 0 31 1 134 0 33 1 134 0 34 0 111 0 35 1 134 0 36 1 134 0 37 1 134 0 38 1 134 0 39 1 134 0 40 1 134 0 41 1 134 0 44 1 134 0 45 1 134 0 49 1 134 0 51 1 134 0 52 1 134 0 55 1 134 0 57 1 134 0 58 1 134 0 60 1 134 0 62 1 134 0 63 1 134 0 65 1 134 0 67 1 134 0 68 1 134 0 69 1 134 0 71 1 134 0 75 1 134 0 76 1 134 0 79 1 134 0 82 1 134 0 86 1 134 0 87 1 134 0 88 1 134 0 89 1 134 0 90 1 134 0 91 1 134 0 92 1 134 0 94 1 134 0 99 1 134 0 100 1 134 0 101 1 134 0 103 1 134 0 105 1 134 0 108 1 134 0 109 1 134 0 111 1 134 0 112 1 134 0 113 1 134 0 117 1 134 0 118 1 134 0 119 1 134 0 121 1 134 0 124 1 134 0 125 1 134 0 126 1 134 0 134 1 134 0 135 1 134 0 137 1 134 0 138 1 134 0 141 1 134 0 142 1 134 0 143 1 134 0 145 1 134 0 149 1 134 0 150 1 134 0 151 1 134 0 152 1 134 0 153 1 134 0 154 1 134 0 155 1 134 0 157 1 134 0 163 1 134 0 164 1 134 0 167 1 134 0 168 6 49 1 28 6 213 1 29 1 134 2 100] -#[0 1 174 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 194 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 202 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 1 210 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 2 206 0 2 2 206 0 3 6 121 0 4 2 206 0 5 2 206 0 6 6 121 0 7 2 206 0 9 2 206 0 10 6 121 0 11 2 206 0 12 6 121 0 14 2 206 0 15 2 206 0 16 6 121 0 18 2 206 0 21 6 121 0 22 2 206 0 23 2 206 0 25 2 206 0 26 2 206 0 27 6 121 0 28 2 206 0 29 6 121 0 30 2 206 0 31 2 206 0 33 6 121 0 34 2 206 0 35 2 206 0 36 2 206 0 37 2 206 0 38 2 206 0 39 6 121 0 40 2 206 0 41 2 206 0 44 2 206 0 45 2 206 0 49 2 206 0 51 2 206 0 52 2 206 0 55 2 206 0 57 2 206 0 58 2 206 0 60 2 206 0 62 2 206 0 63 2 206 0 65 2 206 0 67 2 206 0 68 2 206 0 69 2 206 0 71 2 206 0 75 2 206 0 76 2 206 0 79 2 206 0 82 2 206 0 86 2 206 0 87 2 206 0 88 2 206 0 89 2 206 0 90 2 206 0 91 2 206 0 92 2 206 0 94 2 206 0 99 2 206 0 100 2 206 0 101 2 206 0 103 2 206 0 105 2 206 0 108 2 206 0 109 2 206 0 111 2 206 0 112 2 206 0 113 2 206 0 117 2 206 0 118 2 206 0 119 2 206 0 121 2 206 0 124 2 206 0 125 2 206 0 126 2 206 0 134 2 206 0 135 2 206 0 137 2 206 0 138 2 206 0 141 2 206 0 142 2 206 0 143 2 206 0 145 2 206 0 149 6 121 0 150 2 206 0 151 2 206 0 152 2 206 0 153 2 206 0 154 2 206 0 155 2 206 0 157 2 206 0 163 2 206 0 164 2 206 0 167 2 206 0 168 6 121 1 84 2 206 2 100] -#[0 2 2 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 2 10 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 2 22 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 2 210 0 2 6 217 0 3 2 210 0 5 2 210 0 6 2 210 0 9 6 221 0 10 2 210 0 12 2 210 0 15 2 210 0 16 6 225 0 21 2 210 0 23 2 210 0 25 2 210 0 26 2 210 0 27 2 210 0 29 2 210 0 31 2 210 0 33 2 210 0 35 2 210 0 36 2 210 0 37 2 210 0 38 2 210 0 39 2 210 0 41 2 210 0 44 2 210 0 45 2 210 0 49 2 210 0 51 2 210 0 52 2 210 0 55 2 210 0 57 2 210 0 58 2 210 0 60 2 210 0 62 2 210 0 63 2 210 0 65 2 210 0 67 2 210 0 68 2 210 0 69 2 210 0 71 2 210 0 75 2 210 0 76 2 210 0 79 2 210 0 82 2 210 0 86 2 210 0 87 2 210 0 88 2 210 0 89 2 210 0 90 2 210 0 91 2 210 0 92 2 210 0 94 2 210 0 99 2 210 0 100 2 210 0 101 2 210 0 103 2 210 0 105 2 210 0 108 2 210 0 109 2 210 0 111 2 210 0 112 2 210 0 113 2 210 0 117 2 210 0 118 2 210 0 119 2 210 0 121 2 210 0 124 2 210 0 125 2 210 0 126 2 210 0 134 2 210 0 135 2 210 0 137 2 210 0 138 2 210 0 141 2 210 0 142 2 210 0 143 2 210 0 145 2 210 0 149 2 210 0 151 2 210 0 152 2 210 0 153 2 210 0 154 2 210 0 155 2 210 0 157 2 210 0 163 2 210 0 164 2 210 0 167 2 210 0 168 2 210 2 100] -#[1 2 214 0 2 2 214 0 5 2 214 0 6 2 214 0 9 6 229 0 12 2 214 0 15 6 233 0 16 2 214 0 23 2 214 0 25 2 214 0 26 2 214 0 27 2 214 0 29 2 214 0 31 2 214 0 33 2 214 0 35 2 214 0 36 2 214 0 37 2 214 0 38 2 214 0 39 2 214 0 41 2 214 0 44 2 214 0 45 2 214 0 49 2 214 0 51 2 214 0 52 2 214 0 55 2 214 0 57 2 214 0 58 2 214 0 60 2 214 0 62 2 214 0 63 2 214 0 65 2 214 0 67 2 214 0 68 2 214 0 69 2 214 0 71 2 214 0 75 2 214 0 76 2 214 0 79 2 214 0 82 2 214 0 86 2 214 0 87 2 214 0 88 2 214 0 89 2 214 0 90 2 214 0 91 2 214 0 92 2 214 0 94 2 214 0 99 2 214 0 100 2 214 0 101 2 214 0 103 2 214 0 105 2 214 0 108 2 214 0 109 2 214 0 111 2 214 0 112 2 214 0 113 2 214 0 117 2 214 0 118 2 214 0 119 2 214 0 121 2 214 0 124 2 214 0 125 2 214 0 126 2 214 0 134 2 214 0 135 2 214 0 137 2 214 0 138 2 214 0 141 2 214 0 142 2 214 0 143 2 214 0 145 2 214 0 149 2 214 0 151 2 214 0 152 2 214 0 153 2 214 0 154 2 214 0 155 2 214 0 157 2 214 0 163 2 214 0 164 2 214 0 167 2 214 0 168 2 214 2 100] -#[1 2 218 0 2 2 218 0 5 2 218 0 6 2 218 0 9 2 218 0 15 2 218 0 23 2 218 0 25 2 218 0 26 6 237 0 27 2 218 0 29 2 218 0 31 2 218 0 33 2 218 0 35 2 218 0 36 2 218 0 37 2 218 0 38 2 218 0 39 2 218 0 41 2 218 0 44 2 218 0 45 2 218 0 49 2 218 0 51 2 218 0 52 2 218 0 55 2 218 0 57 2 218 0 58 2 218 0 60 2 218 0 62 2 218 0 63 2 218 0 65 2 218 0 67 2 218 0 68 2 218 0 69 2 218 0 71 2 218 0 75 2 218 0 76 2 218 0 79 2 218 0 82 2 218 0 86 2 218 0 87 2 218 0 88 2 218 0 89 2 218 0 90 2 218 0 91 2 218 0 92 2 218 0 94 2 218 0 99 2 218 0 100 2 218 0 101 2 218 0 103 2 218 0 105 2 218 0 108 2 218 0 109 2 218 0 111 2 218 0 112 2 218 0 113 2 218 0 117 2 218 0 118 2 218 0 119 2 218 0 121 2 218 0 124 2 218 0 125 2 218 0 126 2 218 0 134 2 218 0 135 2 218 0 137 2 218 0 138 2 218 0 141 2 218 0 142 2 218 0 143 2 218 0 145 2 218 0 149 2 218 0 151 2 218 0 152 2 218 0 153 6 241 0 154 2 218 0 155 2 218 0 157 2 218 0 163 2 218 0 164 2 218 0 167 2 218 0 168 2 218 2 100] -#[1 2 222 0 2 2 222 0 5 2 222 0 6 2 222 0 9 2 222 0 15 2 222 0 23 2 222 0 25 6 245 0 26 6 249 0 29 2 222 0 31 6 253 0 33 2 222 0 35 2 222 0 36 2 222 0 37 2 222 0 38 2 222 0 39 2 222 0 41 7 1 0 44 2 222 0 45 2 222 0 49 2 222 0 51 2 222 0 52 2 222 0 55 2 222 0 57 2 222 0 58 2 222 0 60 2 222 0 62 2 222 0 63 2 222 0 65 2 222 0 67 2 222 0 68 2 222 0 69 2 222 0 71 2 222 0 75 2 222 0 76 2 222 0 79 2 222 0 82 2 222 0 86 2 222 0 87 2 222 0 88 2 222 0 89 7 5 0 90 2 222 0 91 2 222 0 92 2 222 0 94 2 222 0 99 2 222 0 100 2 222 0 101 2 222 0 103 2 222 0 105 2 222 0 108 2 222 0 109 2 222 0 111 2 222 0 112 2 222 0 113 2 222 0 117 2 222 0 118 2 222 0 119 2 222 0 121 2 222 0 124 2 222 0 125 2 222 0 126 2 222 0 134 2 222 0 135 2 222 0 137 2 222 0 138 2 222 0 141 2 222 0 142 2 222 0 143 2 222 0 145 2 222 0 149 2 222 0 151 2 222 0 152 7 9 0 153 2 222 0 155 2 222 0 157 2 222 0 163 2 222 0 164 2 222 0 167 2 222 0 168 2 222 2 100] -#[1 7 13 0 2 2 226 0 5 2 226 0 6 2 226 0 9 2 226 0 15 2 226 0 23 2 226 0 25 7 17 0 31 2 226 0 35 2 226 0 36 2 226 0 37 2 226 0 38 2 226 0 39 2 226 0 41 2 226 0 45 2 226 0 49 2 226 0 51 2 226 0 52 2 226 0 55 2 226 0 57 2 226 0 58 2 226 0 60 2 226 0 62 2 226 0 63 2 226 0 65 2 226 0 67 2 226 0 68 2 226 0 69 2 226 0 71 2 226 0 75 2 226 0 76 2 226 0 79 2 226 0 82 2 226 0 86 2 226 0 87 2 226 0 88 2 226 0 89 2 226 0 91 2 226 0 92 2 226 0 94 2 226 0 99 2 226 0 100 2 226 0 101 2 226 0 103 2 226 0 105 2 226 0 108 2 226 0 109 2 226 0 111 2 226 0 112 2 226 0 113 2 226 0 117 2 226 0 118 2 226 0 119 2 226 0 121 2 226 0 124 2 226 0 125 2 226 0 126 2 226 0 134 2 226 0 135 2 226 0 137 2 226 0 138 2 226 0 141 2 226 0 142 2 226 0 143 2 226 0 145 2 226 0 149 2 226 0 151 2 226 0 152 2 226 0 155 2 226 0 157 2 226 0 163 2 226 0 164 2 226 0 167 2 226 0 168 2 226 2 100] -#[1 7 21 0 5 2 230 0 6 2 230 0 9 2 230 0 15 2 230 0 23 2 230 0 25 2 230 0 35 2 230 0 36 2 230 0 37 2 230 0 38 2 230 0 39 2 230 0 41 2 230 0 45 2 230 0 49 2 230 0 51 2 230 0 52 2 230 0 55 2 230 0 57 2 230 0 58 2 230 0 60 2 230 0 62 2 230 0 63 2 230 0 65 2 230 0 67 2 230 0 68 2 230 0 69 2 230 0 71 2 230 0 75 2 230 0 76 2 230 0 79 2 230 0 82 2 230 0 86 2 230 0 87 2 230 0 88 2 230 0 89 2 230 0 91 2 230 0 92 2 230 0 94 2 230 0 99 2 230 0 100 2 230 0 101 2 230 0 103 2 230 0 105 2 230 0 108 2 230 0 109 2 230 0 111 2 230 0 112 2 230 0 113 2 230 0 117 2 230 0 118 2 230 0 119 2 230 0 121 2 230 0 124 2 230 0 125 2 230 0 126 2 230 0 134 2 230 0 135 2 230 0 137 2 230 0 138 2 230 0 141 2 230 0 142 2 230 0 143 2 230 0 145 2 230 0 149 2 230 0 151 2 230 0 152 2 230 0 155 2 230 0 157 2 230 0 163 2 230 0 164 2 230 0 167 2 230 0 168 2 230 2 100] -#[1 2 234 0 6 2 234 0 9 2 234 0 15 2 234 0 23 2 234 0 25 2 234 0 35 2 234 0 36 2 234 0 37 2 234 0 38 7 25 0 39 2 234 0 41 2 234 0 45 2 234 0 49 2 234 0 51 2 234 0 52 2 234 0 55 2 234 0 57 2 234 0 58 2 234 0 60 2 234 0 62 2 234 0 63 2 234 0 65 2 234 0 67 2 234 0 68 2 234 0 69 2 234 0 71 2 234 0 75 2 234 0 76 2 234 0 79 2 234 0 82 2 234 0 86 2 234 0 87 2 234 0 88 2 234 0 89 2 234 0 91 2 234 0 92 2 234 0 94 2 234 0 99 2 234 0 100 2 234 0 101 2 234 0 103 2 234 0 105 2 234 0 108 2 234 0 109 2 234 0 111 2 234 0 112 2 234 0 113 2 234 0 117 2 234 0 118 2 234 0 119 2 234 0 121 2 234 0 124 2 234 0 125 2 234 0 126 2 234 0 134 2 234 0 135 2 234 0 137 2 234 0 138 2 234 0 141 2 234 0 142 2 234 0 143 2 234 0 145 2 234 0 149 2 234 0 151 2 234 0 152 2 234 0 155 2 234 0 157 2 234 0 163 2 234 0 164 2 234 0 167 2 234 0 168 2 234 2 100] -#[1 2 238 0 6 2 238 0 9 2 238 0 15 2 238 0 23 2 238 0 25 2 238 0 35 2 238 0 36 2 238 0 37 2 238 0 38 2 238 0 41 2 238 0 45 2 238 0 49 2 238 0 51 2 238 0 52 2 238 0 55 2 238 0 57 2 238 0 58 2 238 0 60 2 238 0 62 2 238 0 63 2 238 0 65 2 238 0 67 2 238 0 68 2 238 0 69 2 238 0 71 2 238 0 75 2 238 0 76 2 238 0 79 2 238 0 82 2 238 0 86 2 238 0 87 2 238 0 88 2 238 0 89 2 238 0 91 2 238 0 92 2 238 0 94 2 238 0 99 2 238 0 100 2 238 0 101 2 238 0 103 2 238 0 105 2 238 0 108 2 238 0 109 2 238 0 111 2 238 0 112 2 238 0 113 2 238 0 117 2 238 0 118 2 238 0 119 2 238 0 121 2 238 0 124 2 238 0 125 2 238 0 126 2 238 0 134 2 238 0 135 2 238 0 137 2 238 0 138 2 238 0 141 2 238 0 142 2 238 0 143 2 238 0 145 7 29 0 149 2 238 0 151 2 238 0 152 2 238 0 155 2 238 0 157 2 238 0 163 2 238 0 164 2 238 0 167 2 238 0 168 2 238 2 100] -#[1 7 33 0 6 2 242 0 9 2 242 0 15 2 242 0 23 2 242 0 25 2 242 0 35 2 242 0 36 2 242 0 37 2 242 0 38 2 242 0 41 2 242 0 45 2 242 0 49 2 242 0 51 2 242 0 52 2 242 0 55 2 242 0 57 2 242 0 58 2 242 0 60 2 242 0 62 2 242 0 63 2 242 0 65 2 242 0 67 2 242 0 68 2 242 0 69 2 242 0 71 2 242 0 75 2 242 0 76 2 242 0 79 2 242 0 82 2 242 0 86 2 242 0 87 2 242 0 88 2 242 0 89 2 242 0 91 2 242 0 92 2 242 0 94 2 242 0 99 2 242 0 100 2 242 0 101 2 242 0 103 2 242 0 105 2 242 0 108 2 242 0 109 2 242 0 111 2 242 0 112 2 242 0 113 2 242 0 117 2 242 0 118 2 242 0 119 2 242 0 121 2 242 0 124 2 242 0 125 2 242 0 126 2 242 0 134 2 242 0 135 2 242 0 137 2 242 0 138 2 242 0 141 2 242 0 142 2 242 0 143 2 242 0 145 2 242 0 151 2 242 0 152 2 242 0 155 2 242 0 157 2 242 0 163 2 242 0 164 2 242 0 167 2 242 0 168 2 242 2 100] -#[1 2 246 0 9 2 246 0 15 2 246 0 23 2 246 0 25 2 246 0 35 7 37 0 36 2 246 0 37 2 246 0 38 2 246 0 41 2 246 0 45 2 246 0 49 2 246 0 51 2 246 0 52 2 246 0 55 2 246 0 57 2 246 0 58 2 246 0 60 2 246 0 62 2 246 0 63 2 246 0 65 2 246 0 67 2 246 0 68 2 246 0 69 2 246 0 71 2 246 0 75 2 246 0 76 2 246 0 79 2 246 0 82 2 246 0 86 2 246 0 87 2 246 0 88 2 246 0 89 2 246 0 91 2 246 0 92 2 246 0 94 2 246 0 99 2 246 0 100 2 246 0 101 2 246 0 103 2 246 0 105 2 246 0 108 2 246 0 109 2 246 0 111 2 246 0 112 2 246 0 113 2 246 0 117 2 246 0 118 2 246 0 119 2 246 0 121 2 246 0 124 2 246 0 125 2 246 0 126 2 246 0 134 2 246 0 135 2 246 0 137 2 246 0 138 2 246 0 141 2 246 0 142 2 246 0 143 2 246 0 145 7 41 0 151 2 246 0 152 2 246 0 155 2 246 0 157 2 246 0 163 2 246 0 164 2 246 0 167 2 246 0 168 2 246 2 100] -#[1 2 250 0 9 2 250 0 15 2 250 0 23 2 250 0 25 7 45 0 35 2 250 0 37 2 250 0 38 2 250 0 41 2 250 0 45 2 250 0 49 2 250 0 51 2 250 0 52 2 250 0 55 2 250 0 57 2 250 0 58 2 250 0 60 2 250 0 62 2 250 0 63 2 250 0 65 2 250 0 67 2 250 0 68 2 250 0 69 2 250 0 71 2 250 0 75 2 250 0 76 2 250 0 79 2 250 0 82 2 250 0 86 2 250 0 87 2 250 0 88 2 250 0 89 2 250 0 91 2 250 0 92 2 250 0 94 2 250 0 99 2 250 0 100 2 250 0 101 2 250 0 103 2 250 0 105 2 250 0 108 2 250 0 109 2 250 0 111 2 250 0 112 2 250 0 113 2 250 0 117 2 250 0 118 2 250 0 119 2 250 0 121 2 250 0 124 2 250 0 125 2 250 0 126 2 250 0 134 2 250 0 135 2 250 0 137 2 250 0 138 2 250 0 141 2 250 0 142 2 250 0 143 2 250 0 145 2 250 0 152 2 250 0 155 2 250 0 157 2 250 0 163 2 250 0 164 2 250 0 167 2 250 0 168 2 250 2 100] -#[0 2 254 0 9 0 15 0 23 0 25 0 37 0 38 0 41 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 152 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 3 2 0 9 0 15 0 23 0 25 0 37 0 38 0 41 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 152 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 7 49 0 32] -#[0 3 6 0 32] -#[0 3 10 0 32] -#[0 3 14 0 32] -#[0 3 18 0 9 0 15 0 23 0 25 0 37 0 38 0 41 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 152 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 3 37 0 79 3 22 0 82 7 53 0 91 7 57 0 92 7 61 0 103 3 22 0 119 7 65 0 145 7 69 1 64 7 73 1 65 7 77 1 66 7 81 1 67 7 85 1 68 7 89 1 69 7 93 1 70 7 97 1 71 7 101 1 72 7 105 1 73] -#[0 3 26 0 9 0 15 0 23 0 25 0 37 0 38 0 41 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 152 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 0 0 2 100] -#[0 3 30 0 9 0 15 0 23 0 25 0 37 0 38 0 41 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 152 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 0 0 2 100] -#[0 3 34 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 0 0 2 100] -#[0 3 38 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 3 42 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 3 46 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[1 7 109 0 25 7 113 0 32 1 77 0 148 7 117 1 92 7 121 1 193] -#[0 3 50 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 3 54 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 3 58 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 3 62 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 3 66 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 3 70 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[1 7 125 0 41 0 115 0 49 0 115 0 52 0 115 0 55 0 66 0 57 3 90 0 58 0 115 0 60 0 70 0 62 0 115 0 65 0 74 0 67 3 94 0 69 0 119 0 71 0 115 0 76 0 115 0 86 0 78 0 87 7 133 0 88 0 115 0 94 7 137 0 99 0 115 0 100 7 141 0 105 0 123 0 108 7 145 0 109 7 149 0 111 7 153 0 112 7 201 0 113 0 115 0 117 7 161 0 118 0 115 0 121 0 127 0 124 0 115 0 125 0 82 0 126 0 115 0 134 0 115 0 135 0 131 0 137 0 115 0 138 7 173 0 141 0 115 0 142 7 201 0 143 0 135 0 152 0 139 0 157 4 137 1 151 4 141 1 152 4 145 1 153 7 181 1 174 7 185 1 175 7 189 1 176 7 193 1 180 7 197 1 181 7 201 1 182 7 205 1 188 7 209 1 189 7 213 1 190 7 217 1 204 7 221 1 205 7 225 1 206 7 229 1 219 7 233 1 220 7 237 1 221 7 241 1 226 7 245 1 227 7 249 1 228 7 253 1 232 8 1 1 233 8 5 1 242 8 9 1 243 8 13 1 244 8 17 1 250 4 149 1 253 4 153 1 254 4 157 1 255 4 161 2 11 4 165 2 12 4 169 2 13 4 173 2 36 4 177 2 37 4 181 2 38 4 185 2 43 4 189 2 44 4 193 2 45 8 21 2 75 8 25 2 78] -#[0 3 110 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 8 29 0 157] -#[1 8 33 0 124 8 37 0 157 8 45 0 191 8 41 0 192 8 45 0 194] -#[1 0 143 0 37 3 114 0 41 3 114 0 57 3 114 0 62 3 114 0 67 3 114 0 87 3 114 0 88 3 114 0 98 3 114 0 99 3 114 0 108 3 114 0 109 3 114 0 111 3 114 0 112 3 114 0 118 3 114 0 124 3 114 0 126 3 114 0 137 8 53 2 46 8 57 2 47 8 61 2 48 8 65 2 49 3 114 2 100] -#[1 3 118 0 37 3 118 0 41 3 118 0 57 3 118 0 62 3 118 0 67 3 118 0 87 3 118 0 88 3 118 0 98 3 118 0 99 3 118 0 108 3 118 0 109 3 118 0 111 3 118 0 112 3 118 0 118 3 118 0 124 3 118 0 126 3 118 0 137 4 21 0 139 3 118 0 155 8 69 0 183 8 69 0 184 8 69 0 185 8 69 0 186 3 118 2 100] -#[0 3 122 0 37 0 41 0 57 0 62 0 67 0 87 0 88 0 98 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 126 0 137 0 139 0 155 2 100] -#[0 3 126 0 37 0 41 0 57 0 62 0 67 0 87 0 88 0 98 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 126 0 137 0 139 0 155 2 100] -#[0 3 130 0 37 0 41 0 57 0 62 0 67 0 87 0 88 0 98 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 126 0 137 0 139 0 155 2 100] -#[0 3 134 0 37 0 41 0 57 0 62 0 67 0 87 0 88 0 98 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 126 0 137 0 139 0 155 2 100] -#[0 3 138 0 37 0 41 0 57 0 62 0 67 0 71 0 87 0 88 0 98 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 126 0 137 0 139 0 155 2 100] -#[0 3 142 0 23] -#[0 3 146 0 23] -#[0 3 150 0 23] -#[0 3 154 0 23] -#[0 3 158 0 23] -#[0 3 162 0 23] -#[0 3 166 0 23] -#[1 8 73 0 157 1 125 0 191 8 89 0 193 1 125 0 194 8 81 2 59 8 85 2 60 8 89 2 61] -#[0 3 170 0 157] -#[0 8 93 0 23] -#[0 3 174 0 20 0 148] -#[1 8 97 0 20 8 101 0 148 8 105 0 177] -#[0 3 178 0 41 0 57 0 88 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 137] -#[1 3 182 0 41 3 182 0 57 3 186 0 62 3 190 0 67 3 194 0 87 0 147 0 88 0 147 0 99 0 151 0 108 0 147 0 109 0 147 0 111 0 147 0 112 3 182 0 118 3 182 0 124 3 198 0 126 0 155 0 137] -#[1 3 202 0 41 3 202 0 57 3 206 0 62 3 210 0 67 3 214 0 87 0 159 0 88 0 159 0 99 0 163 0 108 0 159 0 109 0 159 0 111 0 159 0 112 3 202 0 118 3 202 0 124 3 218 0 126 0 167 0 137] -#[1 3 222 0 41 3 222 0 57 3 226 0 62 3 230 0 67 3 234 0 87 0 171 0 88 0 171 0 99 0 175 0 108 0 171 0 109 0 171 0 111 0 171 0 112 3 222 0 118 3 222 0 124 3 238 0 126 0 179 0 137] -#[1 3 242 0 41 3 242 0 57 3 246 0 62 3 250 0 67 3 254 0 87 0 183 0 88 0 183 0 99 0 187 0 108 0 183 0 109 0 183 0 111 0 183 0 112 3 242 0 118 3 242 0 124 4 2 0 126 0 191 0 137] -#[1 4 6 0 41 4 6 0 57 4 10 0 62 4 14 0 67 4 18 0 87 0 195 0 88 0 195 0 99 0 199 0 108 0 195 0 109 0 195 0 111 0 195 0 112 4 6 0 118 4 6 0 124 4 22 0 126 0 203 0 137] -#[0 4 26 0 41 0 57 0 88 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 137] -#[0 4 30 0 41 0 57 0 88 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 137] -#[1 4 34 0 41 4 34 0 57 4 38 0 62 4 42 0 87 0 207 0 88 0 207 0 99 0 211 0 108 0 207 0 109 0 207 0 111 0 207 0 112 4 34 0 118 4 34 0 124 4 46 0 126 0 207 0 137] -#[1 4 50 0 57 8 113 0 108 8 113 2 74] -#[1 8 141 0 41 4 54 0 57 8 141 0 88 8 141 0 99 4 54 0 108 8 141 0 109 8 141 0 111 8 141 0 112 8 141 0 118 8 141 0 124 8 141 0 137 8 141 1 153] -#[0 4 58 0 41 0 57 0 88 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 137] -#[1 8 145 0 108 4 50 0 126 8 145 2 74] -#[1 8 173 0 88 8 173 0 99 4 62 0 108 8 173 0 109 8 173 0 111 8 173 0 112 4 62 0 126 8 173 0 137 8 173 1 255] -#[0 4 66 0 88 0 99 0 108 0 109 0 111 0 112 0 126 0 137] -#[1 4 50 0 87 8 177 0 108 8 177 2 74] -#[1 4 70 0 87 8 205 0 88 8 205 0 99 4 70 0 108 8 205 0 109 8 205 0 111 8 205 0 112 8 205 0 137 8 205 2 13] -#[0 4 74 0 87 0 88 0 99 0 108 0 109 0 111 0 112 0 137] -#[0 8 209 0 67] -#[1 4 78 0 67 8 233 0 88 8 233 0 99 8 233 0 109 8 233 0 111 8 233 0 112 8 233 2 38] -#[0 4 82 0 67 0 88 0 99 0 109 0 111 0 112] -#[0 8 237 0 62] -#[1 4 86 0 62 9 9 0 88 9 9 0 99 9 9 0 109 9 9 0 111 9 9 0 112 9 9 0 137 9 9 2 45] -#[0 4 90 0 62 0 88 0 99 0 109 0 111 0 112 0 137] -#[0 4 94 0 37 0 41 0 42 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 80 0 85 0 86 0 87 0 88 0 94 0 99 0 100 0 104 0 105 0 107 0 108 0 109 0 111 0 112 0 113 0 114 0 115 0 117 0 118 0 120 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 157] -#[1 0 254 0 2 0 254 0 3 0 254 0 4 0 254 0 5 0 254 0 6 0 254 0 7 0 254 0 8 0 254 0 9 0 254 0 10 0 254 0 11 0 254 0 12 0 254 0 13 0 254 0 14 0 254 0 15 0 254 0 16 0 254 0 17 0 254 0 18 0 254 0 19 0 254 0 20 0 254 0 21 0 254 0 22 0 254 0 23 5 253 0 24 0 254 0 25 0 107 0 26 0 254 0 27 0 254 0 28 0 254 0 29 0 254 0 30 0 254 0 31 0 254 0 33 0 254 0 34 0 254 0 35 0 254 0 36 0 254 0 37 0 254 0 38 0 254 0 39 0 254 0 40 0 254 0 41 0 254 0 44 0 254 0 45 0 254 0 49 0 254 0 51 0 254 0 52 0 254 0 55 0 254 0 57 0 254 0 58 0 254 0 60 0 254 0 62 0 254 0 63 0 254 0 65 0 254 0 67 0 254 0 68 0 254 0 69 0 254 0 71 0 254 0 75 0 254 0 76 0 254 0 79 0 254 0 82 0 254 0 86 0 254 0 87 0 254 0 88 0 254 0 89 0 254 0 90 0 254 0 91 0 254 0 92 0 254 0 94 0 254 0 99 0 254 0 100 0 254 0 101 0 254 0 103 0 254 0 105 0 254 0 108 0 254 0 109 0 254 0 111 0 254 0 112 0 254 0 113 0 254 0 117 0 254 0 118 0 254 0 119 0 254 0 121 0 254 0 124 0 254 0 125 0 254 0 126 0 254 0 134 0 254 0 135 0 254 0 137 0 254 0 138 0 254 0 141 0 254 0 142 0 254 0 143 0 254 0 145 0 254 0 149 0 254 0 150 0 254 0 151 0 254 0 152 0 254 0 153 0 254 0 154 0 254 0 155 0 254 0 157 0 254 0 163 0 254 0 164 0 254 0 167 0 254 0 168 6 209 0 217 6 209 0 238 0 254 2 100] -#[0 4 98 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 4 102 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 0 254 0 2 0 254 0 3 0 254 0 4 0 254 0 5 0 254 0 6 0 254 0 7 0 254 0 8 0 215 0 9 0 11 0 10 0 254 0 11 0 254 0 12 0 254 0 13 0 254 0 14 2 202 0 15 0 254 0 16 0 254 0 17 0 254 0 18 0 254 0 19 0 254 0 20 0 254 0 21 0 254 0 22 5 253 0 24 0 107 0 26 0 254 0 27 0 254 0 28 0 254 0 29 0 254 0 30 0 254 0 31 2 202 0 32 0 254 0 33 0 254 0 34 0 11 0 35 0 254 0 36 0 11 0 37 0 254 0 39 0 254 0 40 0 254 0 44 0 254 0 90 0 254 0 149 0 254 0 150 0 254 0 151 0 254 0 153 0 254 0 154 0 11 0 157 6 9 0 217 6 9 0 238] -#[1 9 13 0 9 1 66 0 10 1 70 0 35 1 74 0 37] -#[0 9 17 0 9] -#[0 4 106 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 4 110 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 4 114 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 4 118 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 4 122 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 4 126 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 9 21 0 157] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 9 25 0 246 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 9 29 1 47 9 29 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 9 29 1 63 3 197 1 64 9 29 1 83 9 29 1 86 9 29 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 4 130 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 9 33 1 47 9 33 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 9 33 1 63 3 197 1 64 9 33 1 83 9 33 1 86 9 33 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 4 134 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 0 102 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 0 110 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 0 118 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 0 126 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 0 138 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 0 150 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 0 158 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 0 166 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 0 174 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 32 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 0 186 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 0 194 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 0 202 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 32 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 0 218 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 0 226 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 0 234 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 0 11 0 2 0 11 0 5 0 11 0 6 0 11 0 8 0 11 0 9 0 11 0 10 0 11 0 15 0 254 0 20 0 11 0 23 5 253 0 24 0 11 0 25 0 219 0 26 0 11 0 29 0 11 0 31 0 11 0 32 0 11 0 33 0 11 0 35 0 11 0 36 0 11 0 37 0 11 0 38 0 11 0 39 0 11 0 41 0 11 0 44 0 11 0 45 0 11 0 49 0 11 0 51 0 11 0 52 0 11 0 55 0 11 0 57 0 11 0 58 0 11 0 60 0 11 0 62 0 11 0 63 0 11 0 65 0 11 0 67 0 11 0 68 0 11 0 69 0 11 0 71 0 11 0 75 0 11 0 76 0 11 0 79 0 11 0 82 0 11 0 86 0 11 0 87 0 11 0 88 0 11 0 89 0 11 0 90 0 11 0 91 0 11 0 92 0 11 0 94 0 11 0 99 0 11 0 100 0 11 0 101 0 11 0 102 0 11 0 103 0 11 0 105 0 11 0 108 0 11 0 109 0 11 0 111 0 11 0 112 0 11 0 113 0 11 0 117 0 11 0 118 0 11 0 119 0 11 0 121 0 11 0 124 0 11 0 125 0 11 0 126 0 11 0 128 0 11 0 134 0 11 0 135 0 11 0 137 0 11 0 138 0 11 0 141 0 11 0 142 0 11 0 143 0 11 0 145 0 11 0 148 0 11 0 149 0 11 0 151 0 11 0 152 0 11 0 153 0 11 0 155 0 11 0 157 0 11 0 163 0 11 0 164 0 11 0 167 0 11 0 168 9 37 0 217 9 37 0 238 0 11 2 100] -#[0 1 34 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 20 0 23 0 25 0 26 0 29 0 31 0 32 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 1 66 0 10 1 70 0 35 1 74 0 37 9 41 0 157 9 45 1 105 9 49 1 106] -#[0 4 138 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 9 53 0 196 9 53 0 197 9 53 0 198 9 53 0 199 1 145 0 200 1 145 0 201 1 145 0 202 9 53 0 203 1 161 0 204 9 53 0 205 9 53 0 206 9 53 0 207 9 53 0 208 9 53 0 209 1 185 0 210 9 53 0 216 9 53 1 157 9 53 2 80 2 229 2 81 3 1 2 99] -#[1 2 186 0 9 2 194 0 49 2 194 0 52 2 194 0 55 2 194 0 60 2 194 0 65 2 194 0 76 2 194 0 86 2 194 0 94 2 194 0 100 6 181 0 104 6 181 0 114 2 194 0 117 2 194 0 121 2 194 0 125 2 194 0 134 2 194 0 135 2 194 0 138 2 194 0 142 2 194 0 157 6 169 1 53 6 173 1 54 6 177 1 55 6 181 1 56 6 181 1 57] -#[1 1 77 0 148 9 57 1 92] -#[0 4 142 0 148] -#[0 9 61 0 146] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 9 65 0 196 9 65 0 197 9 65 0 198 9 65 0 199 1 145 0 200 1 145 0 201 1 145 0 202 9 65 0 203 1 161 0 204 9 65 0 205 9 65 0 206 9 65 0 207 9 65 0 208 9 65 0 209 1 185 0 210 9 65 0 216 9 65 1 157 9 69 2 80 2 229 2 81 3 1 2 99] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 4 146 0 25 0 141 0 47 0 145 0 48 0 149 0 49 0 157 0 52 0 161 0 55 3 21 0 56 0 177 0 60 0 181 0 61 0 185 0 62 0 193 0 65 2 217 0 72 0 205 0 76 0 225 0 86 0 233 0 94 0 237 0 97 0 241 0 99 0 245 0 100 0 253 0 117 1 1 0 121 1 5 0 122 1 9 0 125 1 17 0 128 2 217 0 130 1 33 0 133 1 37 0 134 1 41 0 135 3 73 0 136 1 53 0 138 1 61 0 140 1 65 0 142 1 81 0 152 9 73 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 1 117 0 191 1 121 0 193 1 125 0 194 1 129 0 196 1 129 0 197 1 129 0 198 1 129 0 199 1 145 0 200 1 145 0 201 1 145 0 202 1 129 0 203 1 161 0 204 1 129 0 205 1 129 0 206 1 129 0 207 1 129 0 208 1 129 0 209 1 185 0 210 1 129 0 216 1 193 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 245 0 244 1 197 0 245 1 197 0 247 1 197 0 248 2 5 0 249 2 9 0 250 2 13 0 251 1 193 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 2 49 1 26 2 49 1 27 9 81 1 31 2 61 1 32 2 65 1 33 2 49 1 34 2 73 1 35 1 197 1 49 9 81 1 83 9 85 1 98 2 113 1 99 9 81 1 108 9 85 1 122 9 85 1 123 9 93 1 128 1 129 1 157 1 197 2 70 2 217 2 71 1 129 2 80 2 229 2 81 2 49 2 82 1 197 2 83 1 197 2 84 2 49 2 85 1 197 2 86 3 1 2 99] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 61 0 140 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 1 129 0 196 1 129 0 197 1 129 0 198 1 129 0 199 1 145 0 200 1 145 0 201 1 145 0 202 1 129 0 203 1 161 0 204 1 129 0 205 1 129 0 206 1 129 0 207 1 129 0 208 1 129 0 209 1 185 0 210 1 129 0 216 9 97 1 99 1 129 1 157 1 129 2 80 2 229 2 81 3 1 2 99] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 9 105 1 47 9 105 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 9 105 1 63 3 197 1 64 9 105 1 83 9 105 1 86 9 105 1 87 9 105 1 88 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 9 109 0 25] -#[0 9 113 0 25] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 9 121 1 47 9 121 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 9 121 1 63 3 197 1 64 9 121 1 83 9 121 1 86 9 121 1 87 9 121 1 89 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 9 125 1 47 9 125 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 9 125 1 63 3 197 1 64 9 125 1 83 9 125 1 86 9 125 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 9 129 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 25 0 60 3 29 0 65 3 33 0 76 3 41 0 86 3 45 0 94 3 49 0 100 3 53 0 117 3 57 0 121 3 61 0 125 9 133 0 128 3 65 0 134 3 69 0 135 3 77 0 138 4 201 0 157 3 85 0 191 9 149 0 237 9 153 0 241 9 153 0 242 1 241 0 243 9 149 1 24 9 153 1 25] -#[1 9 157 0 15 4 150 0 38 9 161 0 214 9 165 0 215] -#[1 9 169 0 8 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 4 154 0 155 9 173 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 9 177 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 9 181 0 237 1 197 0 239 9 185 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 9 189 0 248 1 197 0 249 1 197 0 250 1 197 0 251 9 177 1 7 1 197 1 8 1 197 1 9 9 193 1 11 9 197 1 12 9 201 1 13 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 9 205 1 30 1 197 1 49 1 197 2 70 2 217 2 71 1 197 2 83 1 197 2 84 1 197 2 86] -#[1 9 209 0 8 1 66 0 10 1 70 0 35 1 74 0 37 9 213 0 148 9 217 0 253 9 217 0 254 9 217 1 4] -#[1 1 126 0 8 1 126 0 10 1 126 0 35 1 126 0 37 0 223 0 148 9 233 2 7] -#[1 9 237 0 37 6 21 0 212 6 25 0 213] -#[1 9 229 0 148 9 241 2 7] -#[1 0 227 0 8 1 130 0 10 1 130 0 35 1 130 0 37 1 130 0 148] -#[0 4 158 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 9 249 0 25] -#[0 4 162 0 25] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 9 65 0 196 9 65 0 197 9 65 0 198 9 65 0 199 1 145 0 200 1 145 0 201 1 145 0 202 9 65 0 203 1 161 0 204 9 65 0 205 9 65 0 206 9 65 0 207 9 65 0 208 9 65 0 209 1 185 0 210 9 65 0 216 9 65 1 157 9 65 2 80 9 253 2 81 3 1 2 99] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 10 1 1 47 10 1 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 10 1 1 63 3 197 1 64 10 1 1 83 10 1 1 86 10 1 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 10 5 0 25] -#[1 10 9 0 54 10 13 0 74 10 17 1 137 10 21 1 138 10 25 1 143] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 10 29 0 157 1 125 0 191 1 121 0 193 1 125 0 194 10 33 0 196 10 33 0 197 10 33 0 198 10 33 0 199 1 145 0 200 1 145 0 201 1 145 0 202 10 33 0 203 1 161 0 204 10 33 0 205 10 33 0 206 10 33 0 207 10 33 0 208 10 33 0 209 1 185 0 210 10 33 0 216 10 37 1 15 10 33 1 157 10 33 2 80 2 229 2 81 10 41 2 99] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 10 45 1 47 10 45 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 10 45 1 63 3 197 1 64 10 45 1 83 10 45 1 86 10 45 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 4 166 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 4 170 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 0 149 0 49 0 157 0 52 0 161 0 55 3 21 0 56 0 177 0 60 0 181 0 61 0 185 0 62 0 193 0 65 2 217 0 72 0 205 0 76 3 37 0 79 0 225 0 86 0 233 0 94 0 237 0 97 0 241 0 99 0 245 0 100 0 253 0 117 1 1 0 121 1 5 0 122 1 9 0 125 1 17 0 128 2 217 0 130 1 33 0 133 1 37 0 134 1 41 0 135 3 73 0 136 1 53 0 138 1 61 0 140 1 65 0 142 1 81 0 152 4 213 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 1 117 0 191 1 121 0 193 1 125 0 194 1 129 0 196 1 129 0 197 1 129 0 198 1 129 0 199 1 145 0 200 1 145 0 201 1 145 0 202 1 129 0 203 1 161 0 204 1 129 0 205 1 129 0 206 1 129 0 207 1 129 0 208 1 129 0 209 1 185 0 210 1 129 0 216 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 10 57 1 47 10 57 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 10 57 1 63 3 197 1 64 10 57 1 83 10 57 1 86 10 57 1 87 10 57 1 98 2 113 1 99 10 57 1 148 1 129 1 157 1 197 2 70 2 217 2 71 1 129 2 80 2 229 2 81 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86 3 1 2 99] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 10 61 1 47 10 61 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 10 61 1 63 3 197 1 64 10 61 1 83 10 61 1 86 10 61 1 87 10 61 1 89 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 10 65 0 25] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 10 69 1 47 10 69 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 10 69 1 63 3 197 1 64 10 69 1 83 10 69 1 86 10 69 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 4 174 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170] -#[0 10 73 0 155] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 137 0 25 0 141 0 47 0 145 0 48 0 149 0 49 0 153 0 50 0 157 0 52 0 161 0 55 0 165 0 56 0 169 0 58 0 173 0 59 0 177 0 60 0 181 0 61 0 185 0 62 0 189 0 64 0 193 0 65 2 217 0 72 0 201 0 75 0 205 0 76 0 209 0 77 0 213 0 78 0 217 0 81 0 221 0 83 0 225 0 86 0 229 0 93 0 233 0 94 0 237 0 97 0 241 0 99 0 245 0 100 0 249 0 116 0 253 0 117 1 1 0 121 1 5 0 122 1 9 0 125 1 13 0 127 1 17 0 128 1 21 0 129 2 217 0 130 1 29 0 131 1 33 0 133 1 37 0 134 1 41 0 135 1 45 0 136 1 49 0 137 1 53 0 138 1 57 0 139 1 61 0 140 1 65 0 142 1 69 0 146 1 73 0 147 1 77 0 148 1 81 0 152 4 178 0 155 1 85 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 1 117 0 191 1 121 0 193 1 125 0 194 1 129 0 196 1 129 0 197 1 129 0 198 1 129 0 199 1 145 0 200 1 145 0 201 1 145 0 202 1 129 0 203 1 161 0 204 1 129 0 205 1 129 0 206 1 129 0 207 1 129 0 208 1 129 0 209 1 185 0 210 1 129 0 216 1 193 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 245 0 244 1 197 0 245 1 197 0 247 1 197 0 248 2 5 0 249 2 9 0 250 2 13 0 251 1 193 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 2 49 1 26 2 49 1 27 2 125 1 31 2 61 1 32 2 65 1 33 2 49 1 34 2 73 1 35 1 197 1 49 2 125 1 83 10 77 1 90 10 77 1 91 10 77 1 92 10 77 1 95 10 77 1 96 10 77 1 97 2 109 1 98 2 113 1 99 2 117 1 104 10 77 1 107 2 125 1 108 10 77 1 109 10 77 1 110 10 77 1 111 10 77 1 118 10 77 1 119 10 77 1 120 10 77 1 121 10 77 1 129 10 77 1 130 10 77 1 131 10 77 1 132 10 77 1 133 10 77 1 134 10 77 1 135 10 77 1 136 10 77 1 144 10 77 1 145 10 77 1 146 10 77 1 147 10 77 1 149 1 129 1 157 1 197 2 70 2 217 2 71 10 77 2 79 1 129 2 80 2 229 2 81 2 49 2 82 1 197 2 83 1 197 2 84 2 49 2 85 1 197 2 86 10 77 2 87 3 1 2 99] -#[0 4 182 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 137 0 25 0 141 0 47 0 145 0 48 0 149 0 49 0 153 0 50 0 157 0 52 0 161 0 55 0 165 0 56 0 169 0 58 0 173 0 59 0 177 0 60 0 181 0 61 0 185 0 62 0 189 0 64 0 193 0 65 2 217 0 72 0 201 0 75 0 205 0 76 0 209 0 77 0 213 0 78 0 217 0 81 0 221 0 83 0 225 0 86 0 229 0 93 0 233 0 94 0 237 0 97 0 241 0 99 0 245 0 100 0 249 0 116 0 253 0 117 1 1 0 121 1 5 0 122 1 9 0 125 1 13 0 127 1 17 0 128 1 21 0 129 2 217 0 130 1 29 0 131 1 33 0 133 1 37 0 134 1 41 0 135 1 45 0 136 1 49 0 137 1 53 0 138 1 57 0 139 1 61 0 140 1 65 0 142 1 69 0 146 1 73 0 147 1 77 0 148 1 81 0 152 1 85 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 1 117 0 191 1 121 0 193 1 125 0 194 1 129 0 196 1 129 0 197 1 129 0 198 1 129 0 199 1 145 0 200 1 145 0 201 1 145 0 202 1 129 0 203 1 161 0 204 1 129 0 205 1 129 0 206 1 129 0 207 1 129 0 208 1 129 0 209 1 185 0 210 1 129 0 216 1 193 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 245 0 244 1 197 0 245 1 197 0 247 1 197 0 248 2 5 0 249 2 9 0 250 2 13 0 251 1 193 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 2 49 1 26 2 49 1 27 2 125 1 31 2 61 1 32 2 65 1 33 2 49 1 34 2 73 1 35 1 197 1 49 2 125 1 83 10 81 1 90 10 81 1 91 10 81 1 92 10 81 1 95 10 81 1 96 10 81 1 97 2 109 1 98 2 113 1 99 2 117 1 104 10 81 1 107 2 125 1 108 10 81 1 109 10 81 1 110 10 81 1 111 10 81 1 118 10 81 1 119 10 81 1 120 10 81 1 121 10 81 1 129 10 81 1 130 10 81 1 131 10 81 1 132 10 81 1 133 10 81 1 134 10 81 1 135 10 81 1 136 10 81 1 144 10 81 1 145 10 81 1 146 10 81 1 147 10 81 1 149 1 129 1 157 1 197 2 70 2 217 2 71 10 81 2 79 1 129 2 80 2 229 2 81 2 49 2 82 1 197 2 83 1 197 2 84 2 49 2 85 1 197 2 86 10 81 2 87 3 1 2 99] -#[0 10 85 0 157] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 10 89 0 196 10 89 0 197 10 89 0 198 10 89 0 199 1 145 0 200 1 145 0 201 1 145 0 202 10 89 0 203 1 161 0 204 10 89 0 205 10 89 0 206 10 89 0 207 10 89 0 208 10 89 0 209 1 185 0 210 10 89 0 216 10 93 0 218 10 97 0 219 10 89 1 157 10 89 2 80 2 229 2 81 3 1 2 99] -#[0 4 186 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 4 190 0 2 4 190 0 3 4 190 0 4 4 190 0 5 4 190 0 6 4 190 0 7 4 190 0 8 0 231 0 9 0 231 0 10 4 190 0 11 4 190 0 12 4 190 0 13 4 190 0 14 4 190 0 16 4 190 0 17 4 190 0 18 4 190 0 19 0 231 0 20 4 190 0 21 4 190 0 22 4 190 0 26 4 190 0 27 4 190 0 28 4 190 0 29 4 190 0 30 4 190 0 31 4 190 0 33 4 190 0 34 0 231 0 35 4 190 0 36 0 231 0 37 4 190 0 39 4 190 0 40 4 190 0 44 4 190 0 90 4 190 0 149 4 190 0 150 4 190 0 151 4 190 0 153 4 190 0 154 4 194 0 157] -#[0 10 101 0 157] -#[0 4 198 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 4 202 0 2 4 202 0 5 4 202 0 6 4 202 0 8 4 202 0 9 4 202 0 10 4 202 0 15 4 202 0 23 4 202 0 25 4 202 0 26 4 202 0 29 4 202 0 31 4 202 0 33 4 202 0 35 4 202 0 36 0 235 0 37 4 202 0 38 4 202 0 39 4 202 0 41 4 202 0 44 4 202 0 45 4 202 0 49 4 202 0 51 4 202 0 52 4 202 0 55 4 202 0 57 4 202 0 58 4 202 0 60 4 202 0 62 4 202 0 63 4 202 0 65 4 202 0 67 4 202 0 68 4 202 0 69 4 202 0 71 4 202 0 75 4 202 0 76 4 202 0 79 4 202 0 82 4 202 0 86 4 202 0 87 4 202 0 88 4 202 0 89 4 202 0 90 4 202 0 91 4 202 0 92 4 202 0 94 4 202 0 99 4 202 0 100 4 202 0 101 4 202 0 102 4 202 0 103 4 202 0 105 4 202 0 108 4 202 0 109 4 202 0 111 4 202 0 112 4 202 0 113 4 202 0 117 4 202 0 118 4 202 0 119 4 202 0 121 4 202 0 124 4 202 0 125 4 202 0 126 4 202 0 128 4 202 0 134 4 202 0 135 4 202 0 137 4 202 0 138 4 202 0 141 4 202 0 142 4 202 0 143 4 202 0 145 4 202 0 148 4 202 0 149 4 202 0 151 4 202 0 152 4 202 0 153 4 202 0 155 4 202 0 157 4 202 0 163 4 202 0 164 4 202 0 167 4 202 0 168 10 105 0 213 4 202 2 100] -#[0 4 206 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 4 210 0 1 4 210 0 5 4 210 0 8 4 214 0 9 4 210 0 10 4 210 0 12 4 210 0 13 4 210 0 16 4 210 0 17 4 210 0 47 4 210 0 48 4 210 0 49 4 210 0 52 4 210 0 55 4 210 0 56 4 210 0 60 4 210 0 61 4 210 0 62 4 210 0 65 4 210 0 72 4 210 0 76 4 210 0 79 4 210 0 86 4 210 0 94 4 210 0 97 4 210 0 99 4 210 0 100 4 210 0 104 4 210 0 114 4 210 0 117 4 210 0 121 4 210 0 122 4 210 0 125 4 210 0 128 4 210 0 130 4 210 0 133 4 210 0 134 4 210 0 135 4 210 0 136 4 210 0 138 4 210 0 152 0 239 0 157 4 210 0 158 4 210 0 159 4 210 0 160 4 210 0 161 4 210 0 162 4 210 0 165 4 210 0 166 4 210 0 169 4 210 0 170 10 113 0 221 10 117 0 222 10 121 0 223 10 125 0 224 10 129 0 225] -#[0 4 218 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 4 222 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 10 133 0 157] -#[0 10 137 0 157] -#[0 10 141 0 35] -#[1 4 226 0 4 4 226 0 7 10 145 0 8 4 226 0 11 4 226 0 14 4 226 0 18 10 149 0 20 4 226 0 22 4 226 0 28 4 226 0 30 4 226 0 34 4 230 0 35 10 153 0 37 4 226 0 40 4 226 0 150] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 10 157 0 246 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 10 161 1 47 10 161 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 10 161 1 63 3 197 1 64 10 161 1 83 10 161 1 86 10 161 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 10 165 0 232 10 169 0 233 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 10 173 1 47 10 173 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 10 173 1 63 3 197 1 64 10 173 1 83 10 173 1 86 10 173 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 10 177 0 233 1 213 0 234 1 217 0 235 10 181 0 236 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 10 173 1 47 10 173 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 10 173 1 63 3 197 1 64 10 173 1 83 10 173 1 86 10 173 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 10 185 0 157] -#[0 10 189 0 157] -#[0 4 234 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 47 0 48 0 49 0 52 0 55 0 56 0 60 0 61 0 62 0 65 0 72 0 76 0 79 0 86 0 94 0 97 0 99 0 100 0 117 0 121 0 122 0 125 0 128 0 130 0 133 0 134 0 135 0 136 0 138 0 152 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170] -#[0 4 238 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 47 0 48 0 49 0 52 0 55 0 56 0 60 0 61 0 62 0 65 0 72 0 76 0 79 0 86 0 94 0 97 0 99 0 100 0 117 0 121 0 122 0 125 0 128 0 130 0 133 0 134 0 135 0 136 0 138 0 152 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170] -#[0 4 242 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 47 0 48 0 49 0 52 0 55 0 56 0 60 0 61 0 62 0 65 0 72 0 76 0 79 0 86 0 94 0 97 0 99 0 100 0 117 0 121 0 122 0 125 0 128 0 130 0 133 0 134 0 135 0 136 0 138 0 152 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170] -#[0 4 246 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 47 0 48 0 49 0 52 0 55 0 56 0 60 0 61 0 62 0 65 0 72 0 76 0 79 0 86 0 94 0 97 0 99 0 100 0 117 0 121 0 122 0 125 0 128 0 130 0 133 0 134 0 135 0 136 0 138 0 152 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170] -#[0 4 250 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 47 0 48 0 49 0 52 0 55 0 56 0 60 0 61 0 62 0 65 0 72 0 76 0 79 0 86 0 94 0 97 0 99 0 100 0 117 0 121 0 122 0 125 0 128 0 130 0 133 0 134 0 135 0 136 0 138 0 152 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170] -#[0 4 254 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 47 0 48 0 49 0 52 0 55 0 56 0 60 0 61 0 62 0 65 0 72 0 76 0 79 0 86 0 94 0 97 0 99 0 100 0 117 0 121 0 122 0 125 0 128 0 130 0 133 0 134 0 135 0 136 0 138 0 152 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170] -#[0 5 2 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 47 0 48 0 49 0 52 0 55 0 56 0 60 0 61 0 62 0 65 0 72 0 76 0 79 0 86 0 94 0 97 0 99 0 100 0 117 0 121 0 122 0 125 0 128 0 130 0 133 0 134 0 135 0 136 0 138 0 152 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170] -#[0 5 6 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 47 0 48 0 49 0 52 0 55 0 56 0 60 0 61 0 62 0 65 0 72 0 76 0 79 0 86 0 94 0 97 0 99 0 100 0 117 0 121 0 122 0 125 0 128 0 130 0 133 0 134 0 135 0 136 0 138 0 152 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170] -#[0 5 10 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 47 0 48 0 49 0 52 0 55 0 56 0 60 0 61 0 62 0 65 0 72 0 76 0 79 0 86 0 94 0 97 0 99 0 100 0 117 0 121 0 122 0 125 0 128 0 130 0 133 0 134 0 135 0 136 0 138 0 152 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170] -#[0 5 14 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 47 0 48 0 49 0 52 0 55 0 56 0 60 0 61 0 62 0 65 0 72 0 76 0 79 0 86 0 94 0 97 0 99 0 100 0 117 0 121 0 122 0 125 0 128 0 130 0 133 0 134 0 135 0 136 0 138 0 152 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170] -#[0 5 18 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 47 0 48 0 49 0 52 0 55 0 56 0 60 0 61 0 62 0 65 0 72 0 76 0 79 0 86 0 94 0 97 0 99 0 100 0 117 0 121 0 122 0 125 0 128 0 130 0 133 0 134 0 135 0 136 0 138 0 152 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 10 193 1 47 10 193 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 10 193 1 63 3 197 1 64 10 193 1 83 10 193 1 86 10 193 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 5 22 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 5 26 0 9 0 15 0 25 0 30] -#[1 5 30 0 9 10 197 0 15 5 30 0 25] -#[0 5 34 0 9 0 15 0 25] -#[1 5 38 0 9 5 38 0 15 5 38 0 25 10 201 0 30] -#[0 5 42 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 5 46 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 5 50 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 5 54 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 23 0 25 0 26 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 5 58 0 49 0 52 0 55 0 60 0 65 0 76 0 86 0 94 0 100 0 117 0 121 0 125 0 134 0 135 0 138 0 142 0 157] -#[0 5 62 0 49 0 52 0 55 0 60 0 65 0 76 0 86 0 94 0 100 0 117 0 121 0 125 0 134 0 135 0 138 0 142 0 157] -#[0 10 205 0 9] -#[1 5 66 0 9 10 209 0 15] -#[0 5 70 0 9 0 15] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 10 213 0 196 10 213 0 197 10 213 0 198 10 213 0 199 1 145 0 200 1 145 0 201 1 145 0 202 10 213 0 203 1 161 0 204 10 213 0 205 10 213 0 206 10 213 0 207 10 213 0 208 10 213 0 209 1 185 0 210 10 213 0 216 10 213 1 157 10 213 2 80 2 229 2 81 3 1 2 99] -#[0 5 74 0 49 0 52 0 55 0 60 0 65 0 76 0 86 0 94 0 100 0 117 0 121 0 125 0 134 0 135 0 138 0 142 0 157] -#[0 10 217 0 9] -#[1 5 78 0 9 10 221 0 15] -#[1 5 82 0 9 5 82 0 15 3 14 0 32] -#[0 10 225 0 157] -#[1 1 66 0 10 1 70 0 35 1 74 0 37 5 86 0 157] -#[0 4 190 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 4 226 0 2 4 226 0 3 4 226 0 4 4 226 0 5 4 226 0 6 4 226 0 7 10 229 0 8 4 226 0 9 4 226 0 10 4 226 0 11 4 226 0 12 4 226 0 14 4 226 0 15 4 226 0 16 4 226 0 18 10 149 0 20 4 226 0 21 4 226 0 22 4 226 0 23 4 226 0 25 4 226 0 26 4 226 0 27 4 226 0 28 4 226 0 29 4 226 0 30 4 226 0 31 4 226 0 33 4 226 0 34 0 243 0 35 4 226 0 36 0 247 0 37 4 226 0 38 4 226 0 39 4 226 0 40 4 226 0 41 4 226 0 44 4 226 0 45 4 226 0 49 4 226 0 51 4 226 0 52 4 226 0 55 4 226 0 57 4 226 0 58 4 226 0 60 4 226 0 62 4 226 0 63 4 226 0 65 4 226 0 67 4 226 0 68 4 226 0 69 4 226 0 71 4 226 0 75 4 226 0 76 4 226 0 79 4 226 0 82 4 226 0 86 4 226 0 87 4 226 0 88 4 226 0 89 4 226 0 90 4 226 0 91 4 226 0 92 4 226 0 94 4 226 0 99 4 226 0 100 4 226 0 101 4 226 0 103 4 226 0 105 4 226 0 108 4 226 0 109 4 226 0 111 4 226 0 112 4 226 0 113 4 226 0 117 4 226 0 118 4 226 0 119 4 226 0 121 4 226 0 124 4 226 0 125 4 226 0 126 4 226 0 134 4 226 0 135 4 226 0 137 4 226 0 138 4 226 0 141 4 226 0 142 4 226 0 143 4 226 0 145 4 226 0 149 4 226 0 150 4 226 0 151 4 226 0 152 4 226 0 153 4 226 0 154 4 226 0 155 4 226 0 157 4 226 0 163 4 226 0 164 4 226 0 167 4 226 0 168 4 226 2 100] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 10 233 1 26 10 233 1 27 10 233 1 32 10 233 1 33 10 233 1 34 10 233 1 35 1 197 1 49 1 197 2 70 2 217 2 71 10 233 2 82 1 197 2 83 1 197 2 84 10 233 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 10 237 1 26 10 237 1 27 10 237 1 32 10 237 1 33 10 237 1 34 10 237 1 35 1 197 1 49 1 197 2 70 2 217 2 71 10 237 2 82 1 197 2 83 1 197 2 84 10 237 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 10 241 1 26 10 241 1 27 10 241 1 32 10 241 1 33 10 241 1 34 10 241 1 35 1 197 1 49 1 197 2 70 2 217 2 71 10 241 2 82 1 197 2 83 1 197 2 84 10 241 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 10 249 1 26 10 249 1 27 10 249 1 32 10 249 1 33 10 249 1 34 10 249 1 35 10 249 1 36 1 197 1 49 1 197 2 70 2 217 2 71 10 249 2 82 1 197 2 83 1 197 2 84 10 249 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 10 253 1 26 10 253 1 27 10 253 1 32 10 253 1 33 10 253 1 34 10 253 1 35 10 253 1 36 1 197 1 49 1 197 2 70 2 217 2 71 10 253 2 82 1 197 2 83 1 197 2 84 10 253 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 125 1 26 3 125 1 27 3 125 1 32 3 125 1 33 3 125 1 34 3 125 1 35 3 125 1 36 11 1 1 37 1 197 1 49 1 197 2 70 2 217 2 71 3 125 2 82 1 197 2 83 1 197 2 84 3 125 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 125 1 26 3 125 1 27 3 125 1 32 3 125 1 33 3 125 1 34 3 125 1 35 3 125 1 36 11 5 1 37 1 197 1 49 1 197 2 70 2 217 2 71 3 125 2 82 1 197 2 83 1 197 2 84 3 125 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 125 1 26 3 125 1 27 3 125 1 32 3 125 1 33 3 125 1 34 3 125 1 35 3 125 1 36 3 129 1 37 11 9 1 38 1 197 1 49 1 197 2 70 2 217 2 71 3 125 2 82 1 197 2 83 1 197 2 84 3 125 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 125 1 26 3 125 1 27 3 125 1 32 3 125 1 33 3 125 1 34 3 125 1 35 3 125 1 36 3 129 1 37 11 13 1 38 1 197 1 49 1 197 2 70 2 217 2 71 3 125 2 82 1 197 2 83 1 197 2 84 3 125 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 125 1 26 3 125 1 27 3 125 1 32 3 125 1 33 3 125 1 34 3 125 1 35 3 125 1 36 3 129 1 37 11 17 1 38 1 197 1 49 1 197 2 70 2 217 2 71 3 125 2 82 1 197 2 83 1 197 2 84 3 125 2 85 1 197 2 86] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 11 21 0 196 11 21 0 197 11 21 0 198 11 21 0 199 1 145 0 200 1 145 0 201 1 145 0 202 11 21 0 203 1 161 0 204 11 21 0 205 11 21 0 206 11 21 0 207 11 21 0 208 11 21 0 209 1 185 0 210 11 21 0 216 11 21 1 157 11 21 2 80 2 229 2 81 3 1 2 99] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 11 25 0 196 11 25 0 197 11 25 0 198 11 25 0 199 1 145 0 200 1 145 0 201 1 145 0 202 11 25 0 203 1 161 0 204 11 25 0 205 11 25 0 206 11 25 0 207 11 25 0 208 11 25 0 209 1 185 0 210 11 25 0 216 11 25 1 157 11 25 2 80 2 229 2 81 3 1 2 99] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 125 1 26 3 125 1 27 3 125 1 32 3 125 1 33 3 125 1 34 3 125 1 35 3 125 1 36 3 129 1 37 11 29 1 38 1 197 1 49 1 197 2 70 2 217 2 71 3 125 2 82 1 197 2 83 1 197 2 84 3 125 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 125 1 26 3 125 1 27 3 125 1 32 3 125 1 33 3 125 1 34 3 125 1 35 3 125 1 36 3 129 1 37 3 133 1 38 11 33 1 39 1 197 1 49 1 197 2 70 2 217 2 71 3 125 2 82 1 197 2 83 1 197 2 84 3 125 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 125 1 26 3 125 1 27 3 125 1 32 3 125 1 33 3 125 1 34 3 125 1 35 3 125 1 36 3 129 1 37 3 133 1 38 11 37 1 39 1 197 1 49 1 197 2 70 2 217 2 71 3 125 2 82 1 197 2 83 1 197 2 84 3 125 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 125 1 26 3 125 1 27 3 125 1 32 3 125 1 33 3 125 1 34 3 125 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 11 41 1 40 1 197 1 49 1 197 2 70 2 217 2 71 3 125 2 82 1 197 2 83 1 197 2 84 3 125 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 125 1 26 3 125 1 27 3 125 1 32 3 125 1 33 3 125 1 34 3 125 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 11 45 1 41 1 197 1 49 1 197 2 70 2 217 2 71 3 125 2 82 1 197 2 83 1 197 2 84 3 125 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 125 1 26 3 125 1 27 3 125 1 32 3 125 1 33 3 125 1 34 3 125 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 11 49 1 42 1 197 1 49 1 197 2 70 2 217 2 71 3 125 2 82 1 197 2 83 1 197 2 84 3 125 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 125 1 26 3 125 1 27 3 125 1 32 3 125 1 33 3 125 1 34 3 125 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 11 53 1 43 1 197 1 49 1 197 2 70 2 217 2 71 3 125 2 82 1 197 2 83 1 197 2 84 3 125 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 125 1 26 3 125 1 27 3 125 1 32 3 125 1 33 3 125 1 34 3 125 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 11 57 1 46 1 197 1 49 1 197 2 70 2 217 2 71 3 125 2 82 1 197 2 83 1 197 2 84 3 125 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 125 1 26 3 125 1 27 3 125 1 32 3 125 1 33 3 125 1 34 3 125 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 11 61 1 44 1 197 1 49 1 197 2 70 2 217 2 71 3 125 2 82 1 197 2 83 1 197 2 84 3 125 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 11 65 1 47 11 65 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 11 65 1 63 3 197 1 64 11 65 1 83 11 65 1 86 11 65 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 77 0 148 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 11 69 1 47 11 69 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 11 69 1 62 11 69 1 63 3 197 1 64 11 69 1 83 11 69 1 86 11 69 1 87 11 69 1 92 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 0 103 0 157 1 125 0 191 1 121 0 193 1 125 0 194 11 81 0 195 6 205 0 196 6 205 0 197 6 205 0 198 6 205 0 199 1 145 0 200 1 145 0 201 1 145 0 202 6 205 0 203 1 161 0 204 6 205 0 205 6 205 0 206 6 205 0 207 6 205 0 208 6 205 0 209 1 185 0 210 6 205 0 216 6 205 1 157 6 205 2 80 2 229 2 81 3 1 2 99] -#[0 11 85 0 157] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 11 97 1 47 11 97 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 11 97 1 63 3 197 1 64 11 89 1 74 11 93 1 75 11 97 1 83 11 97 1 86 11 97 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 11 101 1 47 11 101 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 11 101 1 63 3 197 1 64 11 101 1 83 11 101 1 86 11 101 1 87 11 101 1 89 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 5 90 0 79 0 82 0 91 0 92 0 103 0 119 0 145] -#[0 5 94 0 9 0 15 0 23 0 25 0 37 0 38 0 41 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 152 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 11 105 0 82 11 109 0 119 11 113 1 78 11 117 1 79 11 121 1 80] -#[1 3 37 0 79 5 98 0 82 7 53 0 91 7 57 0 92 7 61 0 103 5 98 0 119 7 65 0 145 7 69 1 64 11 125 1 68 7 89 1 69 7 93 1 70 7 97 1 71 7 101 1 72 7 105 1 73] -#[0 5 102 0 79 0 82 0 91 0 92 0 103 0 119 0 145] -#[0 5 106 0 79 0 82 0 91 0 92 0 103 0 119 0 145] -#[0 5 110 0 79 0 82 0 91 0 92 0 103 0 119 0 145] -#[0 5 114 0 79 0 82 0 91 0 92 0 103 0 119 0 145] -#[0 5 118 0 79 0 82 0 91 0 92 0 103 0 119 0 145] -#[0 5 122 0 79 0 82 0 91 0 92 0 103 0 119 0 145] -#[0 5 126 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 11 129 1 47 11 129 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 11 129 1 63 3 197 1 64 11 129 1 83 11 129 1 86 11 129 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 5 130 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 5 134 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[1 0 251 0 41 0 255 0 49 0 255 0 52 0 255 0 55 3 178 0 57 0 255 0 60 0 255 0 65 5 146 0 69 1 3 0 71 0 255 0 76 0 255 0 86 0 251 0 88 0 255 0 94 0 251 0 99 0 255 0 100 1 3 0 105 1 7 0 108 0 251 0 109 0 251 0 111 0 251 0 112 0 255 0 117 0 251 0 118 0 255 0 121 1 11 0 124 0 255 0 125 0 255 0 134 0 255 0 135 0 251 0 137 0 255 0 138 1 3 0 141 0 255 0 142 0 255 0 157] -#[1 1 15 0 41 1 19 0 49 1 19 0 52 1 19 0 55 1 19 0 60 1 19 0 65 5 162 0 69 5 170 0 70 1 23 0 71 1 19 0 76 5 170 0 84 1 19 0 86 1 27 0 88 1 19 0 94 1 15 0 99 1 19 0 100 1 15 0 105 5 166 0 108 1 27 0 109 1 27 0 111 1 23 0 112 1 19 0 117 1 15 0 118 1 19 0 121 1 31 0 124 1 19 0 125 1 19 0 134 1 19 0 135 1 35 0 137 1 19 0 138 1 15 0 141 1 19 0 142 5 178 0 152 1 39 0 157] -#[1 1 43 0 41 1 47 0 49 1 47 0 52 1 47 0 55 3 182 0 57 5 202 0 58 1 47 0 60 3 186 0 62 1 47 0 65 3 190 0 67 5 186 0 69 1 51 0 71 1 47 0 76 1 47 0 86 3 194 0 87 1 55 0 88 1 47 0 94 1 59 0 99 1 47 0 100 1 63 0 105 1 67 0 108 1 55 0 109 1 55 0 111 1 55 0 112 5 198 0 113 1 47 0 117 1 43 0 118 1 47 0 121 1 71 0 124 1 47 0 125 3 198 0 126 1 47 0 134 1 47 0 135 1 75 0 137 1 47 0 138 1 63 0 141 1 47 0 142 5 198 0 143 1 79 0 157] -#[1 1 83 0 41 1 87 0 49 1 87 0 52 1 87 0 55 3 202 0 57 5 230 0 58 1 87 0 60 3 206 0 62 1 87 0 65 3 210 0 67 5 214 0 69 1 91 0 71 1 87 0 76 1 87 0 86 3 214 0 87 1 95 0 88 1 87 0 94 1 95 0 99 1 87 0 100 1 91 0 105 1 99 0 108 1 95 0 109 1 95 0 111 1 95 0 112 5 226 0 113 1 87 0 117 1 83 0 118 1 87 0 121 1 103 0 124 1 87 0 125 3 218 0 126 1 87 0 134 1 87 0 135 1 107 0 137 1 87 0 138 1 91 0 141 1 87 0 142 5 226 0 143 1 87 0 157] -#[1 1 111 0 41 1 115 0 49 1 115 0 52 1 115 0 55 1 115 0 60 1 115 0 65 5 242 0 69 1 111 0 71 1 115 0 76 1 115 0 86 1 111 0 88 1 115 0 94 1 111 0 99 1 115 0 100 1 111 0 105 5 238 0 108 1 111 0 109 1 111 0 111 1 111 0 112 1 115 0 117 1 111 0 118 1 115 0 121 1 119 0 124 1 115 0 125 1 115 0 134 1 115 0 135 1 111 0 137 1 115 0 138 1 111 0 141 1 115 0 142 1 115 0 157] -#[1 1 123 0 41 1 127 0 49 1 127 0 52 1 127 0 55 3 222 0 57 6 14 0 58 1 127 0 60 3 226 0 62 1 127 0 65 3 230 0 67 6 2 0 69 1 131 0 71 1 127 0 76 1 127 0 86 3 234 0 87 1 135 0 88 1 127 0 94 1 139 0 99 1 127 0 100 1 143 0 105 1 147 0 108 1 135 0 109 1 135 0 111 1 135 0 112 6 10 0 113 1 127 0 117 1 123 0 118 1 127 0 121 1 151 0 124 1 127 0 125 3 238 0 126 1 127 0 134 1 127 0 135 1 155 0 137 1 127 0 138 1 143 0 141 1 127 0 142 6 10 0 143 1 159 0 157] -#[1 1 163 0 41 1 167 0 49 1 167 0 52 1 167 0 55 3 242 0 57 6 42 0 58 1 167 0 60 3 246 0 62 1 167 0 65 3 250 0 67 6 22 0 69 1 171 0 71 1 167 0 76 1 167 0 86 3 254 0 87 1 175 0 88 1 167 0 94 1 179 0 99 1 167 0 100 1 183 0 105 1 187 0 108 1 175 0 109 1 175 0 111 1 175 0 112 6 38 0 113 1 167 0 117 1 163 0 118 1 167 0 121 1 191 0 124 1 167 0 125 4 2 0 126 1 167 0 134 1 167 0 135 1 195 0 137 1 167 0 138 1 183 0 141 1 167 0 142 6 38 0 143 1 199 0 157] -#[1 1 203 0 41 1 207 0 49 1 207 0 52 1 207 0 55 4 6 0 57 6 74 0 58 1 207 0 60 4 10 0 62 1 207 0 65 4 14 0 67 6 62 0 69 6 66 0 70 1 211 0 71 1 207 0 76 6 66 0 84 1 207 0 86 4 18 0 87 1 215 0 88 1 207 0 94 1 219 0 99 1 207 0 100 1 223 0 105 1 227 0 108 1 215 0 109 1 215 0 111 1 231 0 112 6 70 0 113 1 207 0 117 1 203 0 118 1 207 0 121 1 235 0 124 1 207 0 125 4 22 0 126 1 207 0 134 1 207 0 135 1 239 0 137 1 207 0 138 1 223 0 141 1 207 0 142 6 70 0 143 1 243 0 157] -#[0 6 82 0 49 0 52 0 55 0 60 0 65 0 76 0 86 0 88 0 94 0 99 0 100 0 109 0 111 0 112 0 113 0 117 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 142 0 143 0 157] -#[1 1 247 0 41 1 251 0 49 1 251 0 52 1 251 0 55 4 26 0 57 1 251 0 60 1 251 0 65 6 90 0 69 1 255 0 71 1 251 0 76 1 251 0 86 1 247 0 88 1 251 0 94 1 247 0 99 1 251 0 100 1 255 0 105 2 3 0 108 1 247 0 109 1 247 0 111 1 247 0 112 1 251 0 117 1 247 0 118 1 251 0 121 2 7 0 124 1 251 0 125 1 251 0 134 1 251 0 135 1 247 0 137 1 251 0 138 1 255 0 141 1 251 0 142 1 251 0 157] -#[1 2 11 0 41 2 15 0 49 2 15 0 52 2 15 0 55 4 30 0 57 2 15 0 60 2 15 0 65 6 110 0 69 6 114 0 70 2 19 0 71 2 15 0 76 6 114 0 84 2 15 0 86 2 23 0 88 2 15 0 94 2 23 0 99 2 15 0 100 2 27 0 105 2 31 0 108 2 23 0 109 2 23 0 111 2 35 0 112 6 118 0 113 2 15 0 117 2 11 0 118 2 15 0 121 2 35 0 124 2 15 0 125 2 15 0 134 2 15 0 135 2 39 0 137 2 15 0 138 2 27 0 141 2 15 0 142 6 118 0 143 2 43 0 157 11 141 2 75 11 145 2 78] -#[1 2 47 0 41 2 51 0 49 2 51 0 52 2 51 0 55 4 34 0 57 2 51 0 60 4 38 0 62 2 51 0 65 6 134 0 69 6 138 0 70 2 55 0 71 2 51 0 76 6 138 0 84 2 51 0 86 4 42 0 87 2 59 0 88 2 51 0 94 2 63 0 99 2 51 0 100 2 67 0 105 2 71 0 108 2 59 0 109 2 59 0 111 2 75 0 112 6 142 0 113 2 51 0 117 2 47 0 118 2 51 0 121 2 79 0 124 2 51 0 125 4 46 0 126 2 51 0 134 2 51 0 135 2 75 0 137 2 51 0 138 2 67 0 141 2 51 0 142 6 142 0 143 6 150 0 152 2 83 0 157] -#[1 2 87 0 41 2 91 0 49 2 91 0 52 2 91 0 55 2 91 0 60 2 91 0 65 6 166 0 69 2 87 0 71 2 91 0 76 2 91 0 86 2 87 0 88 2 91 0 94 2 87 0 99 2 91 0 100 2 87 0 105 6 162 0 108 2 87 0 109 2 87 0 111 2 87 0 112 2 91 0 117 2 87 0 118 2 91 0 121 2 95 0 124 2 91 0 125 2 91 0 134 2 91 0 135 2 87 0 137 2 91 0 138 2 87 0 141 2 91 0 142 2 91 0 157] -#[0 6 170 0 49 0 52 0 55 0 60 0 65 0 76 0 86 0 88 0 94 0 99 0 100 0 109 0 111 0 112 0 113 0 117 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 142 0 143 0 157] -#[0 11 149 0 58] -#[1 6 174 0 58 11 173 0 88 11 173 0 99 11 173 0 109 11 173 0 111 11 173 0 112 11 173 1 176] -#[0 6 178 0 58 0 88 0 99 0 109 0 111 0 112] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 11 177 0 196 11 177 0 197 11 177 0 198 11 177 0 199 1 145 0 200 1 145 0 201 1 145 0 202 11 177 0 203 1 161 0 204 11 177 0 205 11 177 0 206 11 177 0 207 11 177 0 208 11 177 0 209 1 185 0 210 11 177 0 216 11 177 1 157 11 177 2 80 2 229 2 81 3 1 2 99] -#[1 6 182 0 49 6 182 0 52 6 182 0 55 6 182 0 60 6 182 0 65 6 182 0 76 6 182 0 86 11 209 0 88 6 182 0 94 11 209 0 99 6 182 0 100 11 209 0 109 11 209 0 111 11 209 0 112 11 209 0 113 6 182 0 117 6 182 0 121 11 209 0 124 6 182 0 125 6 182 0 134 6 182 0 135 11 209 0 137 6 182 0 138 6 182 0 142 11 209 0 143 6 182 0 157 11 209 1 182] -#[0 6 186 0 49 0 52 0 55 0 60 0 65 0 76 0 86 0 88 0 94 0 99 0 100 0 109 0 111 0 112 0 113 0 117 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 142 0 143 0 157] -#[1 4 50 0 49 4 50 0 52 4 50 0 55 4 50 0 60 4 50 0 65 4 50 0 76 4 50 0 86 4 50 0 94 4 50 0 100 11 213 0 108 4 50 0 117 4 50 0 121 4 50 0 125 4 50 0 134 4 50 0 135 4 50 0 138 4 50 0 142 4 50 0 157 11 213 2 74] -#[1 12 9 0 41 6 190 0 49 6 190 0 52 6 190 0 55 6 190 0 60 6 190 0 65 12 9 0 71 6 190 0 76 6 190 0 86 12 9 0 88 6 190 0 94 12 9 0 99 6 190 0 100 12 9 0 105 6 190 0 108 12 9 0 109 12 9 0 111 12 9 0 112 6 190 0 117 12 9 0 118 6 190 0 121 12 9 0 124 6 190 0 125 6 190 0 134 6 190 0 135 12 9 0 137 6 190 0 138 12 9 0 141 6 190 0 142 6 190 0 157 12 9 1 190] -#[0 6 194 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 12 13 0 196 12 13 0 197 12 13 0 198 12 13 0 199 1 145 0 200 1 145 0 201 1 145 0 202 12 13 0 203 1 161 0 204 12 13 0 205 12 13 0 206 12 13 0 207 12 13 0 208 12 13 0 209 1 185 0 210 12 13 0 216 12 13 1 157 12 13 2 80 2 229 2 81 3 1 2 99] -#[1 12 65 0 41 6 198 0 49 6 198 0 52 6 198 0 55 6 198 0 60 6 198 0 65 12 65 0 71 6 198 0 76 6 198 0 86 12 65 0 88 6 198 0 94 12 65 0 99 6 198 0 100 12 65 0 105 12 65 0 109 12 65 0 111 12 65 0 112 6 198 0 117 12 65 0 118 6 198 0 121 12 65 0 124 6 198 0 125 6 198 0 134 6 198 0 135 12 65 0 137 6 198 0 138 12 65 0 141 6 198 0 142 6 198 0 157 12 65 1 206] -#[0 6 202 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 12 69 0 69] -#[1 12 121 0 41 6 206 0 69 12 121 0 71 12 121 0 88 12 121 0 99 12 121 0 105 12 121 0 109 12 121 0 111 12 121 0 112 12 121 0 118 12 121 0 124 12 121 0 137 12 121 0 141 12 121 1 221] -#[0 6 210 0 41 0 69 0 71 0 88 0 99 0 105 0 109 0 111 0 112 0 118 0 124 0 137 0 141] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 12 125 0 196 12 125 0 197 12 125 0 198 12 125 0 199 1 145 0 200 1 145 0 201 1 145 0 202 12 125 0 203 1 161 0 204 12 125 0 205 12 125 0 206 12 125 0 207 12 125 0 208 12 125 0 209 1 185 0 210 12 125 0 216 12 125 1 157 12 129 1 229 12 125 2 80 2 229 2 81 3 1 2 99] -#[1 12 177 0 41 6 214 0 49 6 214 0 52 6 214 0 55 6 214 0 60 6 214 0 65 12 177 0 71 6 214 0 76 6 214 0 86 12 177 0 88 6 214 0 94 12 177 0 99 6 214 0 100 12 177 0 105 12 177 0 109 12 177 0 111 12 177 0 112 6 214 0 117 12 177 0 118 6 214 0 121 6 214 0 125 6 214 0 134 6 214 0 135 12 177 0 137 6 214 0 138 12 177 0 141 6 214 0 142 6 214 0 157 12 177 1 228] -#[0 6 218 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 12 181 0 70 12 209 0 71 1 145 0 76 12 189 0 84 1 145 0 86 1 145 0 94 5 45 0 100 12 209 0 112 1 145 0 117 1 145 0 121 12 209 0 124 5 57 0 125 1 145 0 134 1 145 0 135 12 209 0 137 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 12 205 0 196 12 205 0 197 12 205 0 198 12 205 0 199 1 145 0 200 1 145 0 201 1 145 0 202 12 205 0 203 1 161 0 204 12 205 0 205 12 205 0 206 12 205 0 207 12 205 0 208 12 205 0 209 1 185 0 210 12 205 0 216 12 205 1 157 12 209 1 233 12 213 1 234 12 217 1 235 12 221 1 237 12 225 1 239 12 205 2 80 2 229 2 81 3 1 2 99] -#[0 6 222 0 49 0 52 0 55 0 60 0 65 0 70 0 71 0 76 0 84 0 86 0 94 0 100 0 112 0 117 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 142 0 157] -#[1 12 229 0 157 12 233 1 245] -#[1 13 5 0 71 13 5 0 88 13 5 0 109 13 5 0 111 13 5 0 112 13 5 0 137 6 226 0 157 13 5 1 244] -#[0 6 230 0 71 0 88 0 109 0 111 0 112 0 137 0 157] -#[0 13 9 0 157] -#[1 2 99 0 124 13 17 0 137 3 98 0 152 13 17 2 78] -#[1 13 25 0 71 2 103 0 124 3 102 0 152 13 25 2 75] -#[0 13 29 0 25] -#[1 8 73 0 157 1 125 0 191 13 33 0 193 1 125 0 194] -#[1 0 254 0 20 5 253 0 24 0 254 0 25 6 1 0 26 13 37 0 30 9 37 0 217 9 37 0 238] -#[0 13 41 0 25] -#[1 6 13 0 20 6 234 0 25] -#[1 13 57 0 46 13 57 0 96 13 53 2 50 13 57 2 51] -#[1 0 49 0 37 0 10 0 41 0 10 0 57 0 10 0 62 0 10 0 67 0 10 0 87 0 10 0 88 0 53 0 98 0 10 0 99 0 10 0 108 0 10 0 109 0 10 0 111 0 10 0 112 0 10 0 118 0 10 0 124 0 10 0 126 0 10 0 137 13 69 0 175 13 61 0 187 13 65 0 188 13 69 0 189 13 69 0 190 13 69 1 150 13 69 1 252 13 69 2 10 13 69 2 32 13 69 2 42 0 89 2 52 0 93 2 53 0 97 2 54 0 101 2 55 6 238 2 100] -#[0 6 242 0 37 0 41 0 57 0 62 0 67 0 87 0 88 0 98 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 126 0 137 2 100] -#[1 2 107 0 37 6 246 0 41 6 246 0 57 6 246 0 62 6 246 0 67 6 246 0 87 6 246 0 88 6 246 0 98 6 246 0 99 6 246 0 108 6 246 0 109 6 246 0 111 6 246 0 112 6 246 0 118 6 246 0 124 6 246 0 126 6 246 0 137 13 73 2 49 6 246 2 100] -#[0 6 250 0 37 0 41 0 57 0 62 0 67 0 87 0 88 0 98 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 126 0 137 2 100] -#[0 6 254 0 37 0 41 0 57 0 62 0 67 0 87 0 88 0 98 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 126 0 137 0 139 0 155 2 100] -#[1 0 254 0 8 0 254 0 15 0 254 0 20 5 253 0 24 0 254 0 25 6 1 0 26 0 254 0 38 0 254 0 145 0 254 0 148 9 37 0 217 9 37 0 238] -#[0 7 2 0 8 0 15 0 38] -#[1 13 77 0 15 13 81 0 38] -#[0 7 6 0 15 0 38] -#[1 13 85 0 8 7 10 0 15 7 10 0 38 13 89 2 62 13 93 2 63] -#[0 7 14 0 157] -#[0 13 97 0 157] -#[1 0 6 0 37 0 6 0 41 0 6 0 57 0 6 0 62 0 6 0 67 0 29 0 71 0 6 0 87 0 6 0 88 0 6 0 98 0 6 0 99 0 6 0 108 0 6 0 109 0 6 0 111 0 6 0 112 0 6 0 118 0 6 0 124 0 6 0 126 0 6 0 137 0 6 0 139 0 6 0 155 13 101 0 178 0 41 0 179 0 45 0 180] -#[1 13 109 0 25 7 18 0 37 7 18 0 41 7 18 0 57 7 18 0 62 7 18 0 67 7 18 0 87 7 18 0 88 7 18 0 98 7 18 0 99 7 18 0 108 7 18 0 109 7 18 0 111 7 18 0 112 7 18 0 118 7 18 0 124 7 18 0 126 7 18 0 137 7 18 0 155 13 109 2 72 7 18 2 100] -#[0 7 22 0 49 0 52 0 55 0 57 0 60 0 65 0 76 0 86 0 87 0 94 0 100 0 117 0 121 0 125 0 126 0 134 0 135 0 138 0 142 0 157] -#[0 13 113 0 57] -#[0 3 182 0 41 0 57 0 88 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 137] -#[0 3 202 0 41 0 57 0 88 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 137] -#[0 3 222 0 41 0 57 0 88 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 137] -#[0 3 242 0 41 0 57 0 88 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 137] -#[0 4 6 0 41 0 57 0 88 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 137] -#[0 4 34 0 41 0 57 0 88 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 137] -#[0 7 26 0 41 0 57 0 88 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 137] -#[0 13 117 0 126] -#[0 3 198 0 88 0 99 0 108 0 109 0 111 0 112 0 126 0 137] -#[0 3 218 0 88 0 99 0 108 0 109 0 111 0 112 0 126 0 137] -#[0 3 238 0 88 0 99 0 108 0 109 0 111 0 112 0 126 0 137] -#[0 4 2 0 88 0 99 0 108 0 109 0 111 0 112 0 126 0 137] -#[0 4 22 0 88 0 99 0 108 0 109 0 111 0 112 0 126 0 137] -#[0 4 46 0 88 0 99 0 108 0 109 0 111 0 112 0 126 0 137] -#[0 7 30 0 88 0 99 0 108 0 109 0 111 0 112 0 126 0 137] -#[0 13 121 0 87] -#[0 3 194 0 87 0 88 0 99 0 108 0 109 0 111 0 112 0 137] -#[0 3 214 0 87 0 88 0 99 0 108 0 109 0 111 0 112 0 137] -#[0 3 234 0 87 0 88 0 99 0 108 0 109 0 111 0 112 0 137] -#[0 3 254 0 87 0 88 0 99 0 108 0 109 0 111 0 112 0 137] -#[0 4 18 0 87 0 88 0 99 0 108 0 109 0 111 0 112 0 137] -#[0 4 42 0 87 0 88 0 99 0 108 0 109 0 111 0 112 0 137] -#[0 7 34 0 87 0 88 0 99 0 108 0 109 0 111 0 112 0 137] -#[0 13 125 0 157] -#[0 3 190 0 67 0 88 0 99 0 109 0 111 0 112] -#[0 3 210 0 67 0 88 0 99 0 109 0 111 0 112] -#[0 3 230 0 67 0 88 0 99 0 109 0 111 0 112] -#[0 3 250 0 67 0 88 0 99 0 109 0 111 0 112] -#[0 4 14 0 67 0 88 0 99 0 109 0 111 0 112] -#[0 7 38 0 67 0 88 0 99 0 109 0 111 0 112] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 13 129 0 196 13 129 0 197 13 129 0 198 13 129 0 199 1 145 0 200 1 145 0 201 1 145 0 202 13 129 0 203 1 161 0 204 13 129 0 205 13 129 0 206 13 129 0 207 13 129 0 208 13 129 0 209 1 185 0 210 13 129 0 216 13 129 1 157 13 133 1 191 13 129 2 80 2 229 2 81 13 137 2 99] -#[0 3 186 0 62 0 88 0 99 0 109 0 111 0 112 0 137] -#[0 3 206 0 62 0 88 0 99 0 109 0 111 0 112 0 137] -#[0 3 226 0 62 0 88 0 99 0 109 0 111 0 112 0 137] -#[0 3 246 0 62 0 88 0 99 0 109 0 111 0 112 0 137] -#[0 4 10 0 62 0 88 0 99 0 109 0 111 0 112 0 137] -#[0 4 38 0 62 0 88 0 99 0 109 0 111 0 112 0 137] -#[0 7 42 0 62 0 88 0 99 0 109 0 111 0 112 0 137] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 13 141 1 26 13 141 1 27 13 141 1 32 13 141 1 33 13 141 1 34 13 141 1 35 1 197 1 49 1 197 2 70 2 217 2 71 13 141 2 82 1 197 2 83 1 197 2 84 13 141 2 85 1 197 2 86] -#[0 7 46 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 7 50 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 13 145 0 15 13 149 0 38] -#[0 7 54 0 15 0 38 0 155] -#[0 13 153 0 9] -#[0 4 194 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 20 0 23 0 25 0 26 0 29 0 31 0 32 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 13 157 0 30] -#[1 13 161 0 15 7 58 0 25] -#[0 7 62 0 15 0 25] -#[1 13 165 0 9 1 66 0 10 1 70 0 35 1 74 0 37] -#[0 7 66 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 13 169 0 8] -#[1 1 66 0 9 1 66 0 10 1 70 0 35 2 111 0 37] -#[1 2 158 0 10 2 158 0 35 2 158 0 37 13 173 0 157 13 177 2 88 13 181 2 89] -#[1 0 254 0 4 0 254 0 7 0 254 0 8 0 11 0 10 0 254 0 11 0 254 0 13 0 254 0 14 0 254 0 17 0 254 0 18 0 254 0 19 0 254 0 20 0 254 0 22 5 253 0 24 6 1 0 26 0 254 0 28 0 254 0 30 0 254 0 34 0 11 0 35 0 11 0 37 0 254 0 40 0 254 0 150 0 11 0 157 6 9 0 217 6 9 0 238] -#[0 7 70 0 25] -#[0 7 74 0 9 0 15 0 25] -#[0 13 185 0 25] -#[0 7 78 0 25] -#[1 13 189 0 15 7 82 0 25] -#[0 13 193 0 157] -#[0 7 86 0 15 0 23 0 25 0 38 0 155 0 163 0 164 0 167 0 168] -#[0 13 197 0 25] -#[0 7 90 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 7 94 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 7 98 0 9 0 25 0 79 0 82 0 91 0 92 0 103 0 119 0 145] -#[0 13 201 0 9] -#[0 13 205 0 9] -#[0 7 102 0 20] -#[0 7 106 0 20] -#[0 7 110 0 9 0 20] -#[0 7 114 0 20] -#[0 7 118 0 20] -#[1 13 209 0 9 7 122 0 20] -#[0 13 213 0 20] -#[0 7 126 0 15 0 38] -#[0 13 217 0 38] -#[1 13 221 0 15 7 130 0 38] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 4 221 1 47 4 221 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 4 221 1 63 3 197 1 64 4 221 1 83 4 221 1 86 4 221 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 0 254 0 8 0 254 0 13 0 254 0 15 0 254 0 17 0 254 0 19 0 254 0 20 5 253 0 24 6 1 0 26 13 225 0 30 0 254 0 35 0 254 0 37 0 254 0 155 6 209 0 217 6 209 0 238] -#[1 6 29 0 8 6 33 0 13 6 37 0 17 6 41 0 19 6 45 0 20 1 138 0 35 13 229 1 28 13 233 1 29] -#[1 1 158 0 8 1 158 0 13 7 134 0 15 1 158 0 17 1 158 0 19 1 158 0 20 1 158 0 35 1 158 0 37 7 134 0 155] -#[1 1 166 0 8 1 166 0 13 7 138 0 15 1 166 0 17 1 166 0 19 1 166 0 20 1 166 0 35 1 166 0 37 7 138 0 155] -#[1 1 190 0 8 1 190 0 13 7 142 0 15 1 190 0 17 1 190 0 19 1 190 0 20 1 190 0 35 1 190 0 37 7 142 0 155] -#[0 13 237 0 155] -#[1 13 241 0 15 7 146 0 155] -#[0 7 150 0 15 0 155] -#[0 7 154 0 15 0 155] -#[1 4 210 0 1 4 210 0 5 4 210 0 8 4 214 0 9 4 210 0 10 4 210 0 12 4 210 0 13 4 210 0 16 4 210 0 17 4 210 0 47 4 210 0 48 4 210 0 49 4 210 0 52 4 210 0 55 4 210 0 56 4 210 0 60 4 210 0 61 4 210 0 62 4 210 0 65 4 210 0 72 4 210 0 76 4 210 0 79 4 210 0 86 4 210 0 94 4 210 0 97 4 210 0 99 4 210 0 100 4 210 0 104 4 210 0 114 4 210 0 117 4 210 0 121 4 210 0 122 4 210 0 125 4 210 0 128 4 210 0 130 4 210 0 133 4 210 0 134 4 210 0 135 4 210 0 136 4 210 0 138 4 210 0 152 0 239 0 157 4 210 0 158 4 210 0 159 4 210 0 160 4 210 0 161 4 210 0 162 4 210 0 165 4 210 0 166 4 210 0 169 4 210 0 170 13 245 0 221 10 117 0 222 10 121 0 223 10 125 0 224 10 129 0 225] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 13 249 0 37 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 13 253 0 148 1 81 0 152 7 158 0 155 14 1 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 14 5 0 255 14 9 1 0 14 13 1 1 14 17 1 2 14 21 1 5 14 25 1 6 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 125 1 26 3 125 1 27 3 125 1 32 3 125 1 33 3 125 1 34 3 125 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 14 29 1 47 14 29 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 14 29 1 63 3 197 1 64 14 29 1 87 1 197 2 70 2 217 2 71 3 125 2 82 1 197 2 83 1 197 2 84 3 125 2 85 1 197 2 86] -#[0 7 162 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 7 166 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 7 170 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 9 229 0 148 1 81 0 152 7 174 0 155 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 14 37 1 47 14 37 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 14 37 1 63 3 197 1 64 14 37 1 83 14 37 1 86 14 37 1 87 14 37 1 185 14 37 2 7 14 45 2 8 14 49 2 9 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 7 178 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 9 157 0 15 0 129 0 16 0 133 0 17 4 150 0 38 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 9 161 0 214 9 165 0 215 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 14 53 0 246 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 9 29 1 47 9 29 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 9 29 1 63 3 197 1 64 9 29 1 83 9 29 1 86 9 29 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 7 182 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 14 57 1 47 14 57 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 14 57 1 63 3 197 1 64 14 57 1 83 14 57 1 86 14 57 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 7 186 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[1 14 61 0 9 6 153 0 10] -#[0 14 65 0 9] -#[0 7 190 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[1 14 69 0 8 7 194 0 144 7 194 0 148 14 73 1 139 14 77 1 140] -#[1 1 77 0 148 14 81 1 92] -#[1 7 198 0 1 7 198 0 5 7 198 0 8 7 198 0 10 7 198 0 12 7 198 0 13 7 198 0 16 7 198 0 17 7 198 0 25 7 198 0 47 7 198 0 48 7 198 0 49 7 198 0 50 7 198 0 52 7 198 0 53 10 9 0 54 7 198 0 55 7 198 0 56 7 198 0 58 7 198 0 59 7 198 0 60 7 198 0 61 7 198 0 62 7 198 0 64 7 198 0 65 7 198 0 66 7 198 0 72 10 13 0 74 7 198 0 75 7 198 0 76 7 198 0 77 7 198 0 78 7 198 0 81 7 198 0 83 7 198 0 86 7 198 0 93 7 198 0 94 7 198 0 97 7 198 0 99 7 198 0 100 7 198 0 116 7 198 0 117 7 198 0 121 7 198 0 122 7 198 0 125 7 198 0 127 7 198 0 128 7 198 0 129 7 198 0 130 7 198 0 131 7 198 0 133 7 198 0 134 7 198 0 135 7 198 0 136 7 198 0 137 7 198 0 138 7 198 0 139 7 198 0 140 7 198 0 142 7 198 0 146 7 198 0 147 7 198 0 148 7 198 0 152 7 198 0 155 7 198 0 157 7 198 0 158 7 198 0 159 7 198 0 160 7 198 0 161 7 198 0 162 7 198 0 165 7 198 0 166 7 198 0 169 7 198 0 170 14 85 1 138 14 89 1 143 7 198 2 100] -#[0 7 202 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 74 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 7 206 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[1 2 115 0 9 0 11 0 10 2 119 0 20 14 93 0 24 14 97 0 26 0 11 0 35 0 11 0 37 9 37 0 217 9 37 0 238 14 101 1 16 14 105 1 17] -#[1 14 109 0 9 1 66 0 10 1 70 0 35 1 74 0 37] -#[1 14 113 0 9 14 117 0 20] -#[1 14 121 0 9 6 157 0 10] -#[0 14 125 0 9] -#[0 7 214 0 9] -#[0 7 218 0 9] -#[0 14 129 0 9] -#[0 14 133 0 9] -#[0 7 222 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 14 137 0 25] -#[0 7 226 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 42 0 44 0 45 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 71 0 72 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 93 0 94 0 97 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 115 0 116 0 117 0 118 0 119 0 120 0 121 0 122 0 124 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 141 0 142 0 143 0 145 0 146 0 147 0 148 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 163 0 164 0 165 0 166 0 167 0 168 0 169 0 170 2 100] -#[0 7 230 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170] -#[0 7 234 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[1 0 254 0 2 0 254 0 5 0 254 0 6 0 254 0 8 0 254 0 9 0 254 0 10 0 254 0 15 0 254 0 20 0 254 0 23 0 254 0 25 0 107 0 26 0 254 0 29 0 254 0 31 0 254 0 32 0 254 0 33 0 254 0 35 0 254 0 36 0 254 0 37 0 254 0 38 0 254 0 39 0 254 0 41 0 254 0 44 0 254 0 45 0 254 0 49 0 254 0 51 0 254 0 52 0 254 0 55 0 254 0 57 0 254 0 58 0 254 0 60 0 254 0 62 0 254 0 63 0 254 0 65 0 254 0 67 0 254 0 68 0 254 0 69 0 254 0 71 0 254 0 75 0 254 0 76 0 254 0 79 0 254 0 82 0 254 0 86 0 254 0 87 0 254 0 88 0 254 0 89 0 254 0 90 0 254 0 91 0 254 0 92 0 254 0 94 0 254 0 99 0 254 0 100 0 254 0 101 0 254 0 102 0 254 0 103 0 254 0 105 0 254 0 108 0 254 0 109 0 254 0 111 0 254 0 112 0 254 0 113 0 254 0 117 0 254 0 118 0 254 0 119 0 254 0 121 0 254 0 124 0 254 0 125 0 254 0 126 0 254 0 128 0 254 0 134 0 254 0 135 0 254 0 137 0 254 0 138 0 254 0 141 0 254 0 142 0 254 0 143 0 254 0 145 0 254 0 148 0 254 0 149 0 254 0 151 0 254 0 152 0 254 0 153 0 254 0 155 0 254 0 157 0 254 0 163 0 254 0 164 0 254 0 167 0 254 0 168 14 141 0 217 14 141 0 238 0 254 2 100] -#[1 1 66 0 10 7 238 0 15 1 70 0 35 1 74 0 37 7 238 0 153] -#[1 14 145 0 15 14 149 0 153] -#[0 7 242 0 15 0 153] -#[1 0 254 0 2 0 254 0 5 0 254 0 6 0 254 0 8 0 254 0 9 0 254 0 10 0 254 0 15 0 254 0 20 0 254 0 23 0 254 0 25 0 107 0 26 0 254 0 29 0 254 0 31 0 254 0 32 0 254 0 33 0 254 0 35 0 254 0 36 0 254 0 37 0 254 0 38 0 254 0 39 0 254 0 41 0 254 0 44 0 254 0 45 0 254 0 49 0 254 0 51 0 254 0 52 0 254 0 55 0 254 0 57 0 254 0 58 0 254 0 60 0 254 0 62 0 254 0 63 0 254 0 65 0 254 0 67 0 254 0 68 0 254 0 69 0 254 0 71 0 254 0 75 0 254 0 76 0 254 0 79 0 254 0 82 0 254 0 86 0 254 0 87 0 254 0 88 0 254 0 89 0 254 0 90 0 254 0 91 0 254 0 92 0 254 0 94 0 254 0 99 0 254 0 100 0 254 0 101 0 254 0 102 0 254 0 103 0 254 0 105 0 254 0 108 0 254 0 109 0 254 0 111 0 254 0 112 0 254 0 113 0 254 0 117 0 254 0 118 0 254 0 119 0 254 0 121 0 254 0 124 0 254 0 125 0 254 0 126 0 254 0 128 0 254 0 134 0 254 0 135 0 254 0 137 0 254 0 138 0 254 0 141 0 254 0 142 0 254 0 143 0 254 0 145 0 254 0 148 0 254 0 149 0 254 0 151 0 254 0 152 0 254 0 153 0 254 0 155 0 254 0 157 0 254 0 163 0 254 0 164 0 254 0 167 0 254 0 168 14 153 0 217 14 153 0 238 0 254 2 100] -#[0 7 246 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 14 157 0 23] -#[0 14 161 0 9] -#[1 7 250 0 9 14 165 0 15] -#[0 7 254 0 9 0 15 0 38] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 14 169 0 104 14 173 0 114 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 14 177 0 226 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 14 181 1 47 14 181 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 14 181 1 63 3 197 1 64 14 181 1 83 14 181 1 86 14 181 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 8 2 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 47 0 48 0 49 0 52 0 55 0 56 0 60 0 61 0 62 0 65 0 72 0 76 0 79 0 86 0 94 0 97 0 99 0 100 0 104 0 114 0 117 0 121 0 122 0 125 0 128 0 130 0 133 0 134 0 135 0 136 0 138 0 152 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170] -#[0 8 6 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 0 254 0 2 0 254 0 3 0 254 0 4 0 254 0 5 0 254 0 6 0 254 0 7 0 254 0 8 0 254 0 9 0 254 0 10 0 254 0 11 0 254 0 12 0 254 0 13 0 254 0 14 0 254 0 15 0 254 0 16 0 254 0 17 0 254 0 18 0 254 0 19 0 254 0 20 0 254 0 21 0 254 0 22 0 254 0 23 0 254 0 25 0 107 0 26 0 254 0 27 0 254 0 28 0 254 0 29 0 254 0 30 0 254 0 31 0 254 0 33 0 254 0 34 0 254 0 35 0 254 0 36 0 254 0 37 0 254 0 38 0 254 0 39 0 254 0 40 0 254 0 41 0 254 0 44 0 254 0 45 0 254 0 49 0 254 0 51 0 254 0 52 0 254 0 55 0 254 0 57 0 254 0 58 0 254 0 60 0 254 0 62 0 254 0 63 0 254 0 65 0 254 0 67 0 254 0 68 0 254 0 69 0 254 0 71 0 254 0 75 0 254 0 76 0 254 0 79 0 254 0 82 0 254 0 86 0 254 0 87 0 254 0 88 0 254 0 89 0 254 0 90 0 254 0 91 0 254 0 92 0 254 0 94 0 254 0 99 0 254 0 100 0 254 0 101 0 254 0 103 0 254 0 105 0 254 0 108 0 254 0 109 0 254 0 111 0 254 0 112 0 254 0 113 0 254 0 117 0 254 0 118 0 254 0 119 0 254 0 121 0 254 0 124 0 254 0 125 0 254 0 126 0 254 0 134 0 254 0 135 0 254 0 137 0 254 0 138 0 254 0 141 0 254 0 142 0 254 0 143 0 254 0 145 0 254 0 149 0 254 0 150 0 254 0 151 0 254 0 152 0 254 0 153 0 254 0 154 0 254 0 155 0 254 0 157 0 254 0 163 0 254 0 164 0 254 0 167 0 254 0 168 14 185 0 217 14 185 0 238 0 254 2 100] -#[1 14 189 0 20 14 193 0 37] -#[1 4 210 0 1 4 210 0 5 4 210 0 8 4 214 0 9 4 210 0 10 4 210 0 12 4 210 0 13 4 210 0 16 4 210 0 17 4 210 0 47 4 210 0 48 4 210 0 49 4 210 0 52 4 210 0 55 4 210 0 56 4 210 0 60 4 210 0 61 4 210 0 62 4 210 0 65 4 210 0 72 4 210 0 76 4 210 0 79 4 210 0 86 4 210 0 94 4 210 0 97 4 210 0 99 4 210 0 100 4 210 0 104 4 210 0 114 4 210 0 117 4 210 0 121 4 210 0 122 4 210 0 125 4 210 0 128 4 210 0 130 4 210 0 133 4 210 0 134 4 210 0 135 4 210 0 136 4 210 0 138 4 210 0 152 0 239 0 157 4 210 0 158 4 210 0 159 4 210 0 160 4 210 0 161 4 210 0 162 4 210 0 165 4 210 0 166 4 210 0 169 4 210 0 170 14 197 0 221 10 117 0 222 10 121 0 223 10 125 0 224 10 129 0 225] -#[0 14 201 0 157] -#[1 4 210 0 1 4 210 0 5 4 210 0 8 4 210 0 10 4 210 0 12 4 210 0 13 4 210 0 16 4 210 0 17 4 210 0 47 4 210 0 48 4 210 0 49 4 210 0 52 4 210 0 55 4 210 0 56 4 210 0 60 4 210 0 61 4 210 0 62 4 210 0 65 4 210 0 72 4 210 0 76 4 210 0 79 4 210 0 86 4 210 0 94 4 210 0 97 4 210 0 99 4 210 0 100 4 210 0 104 4 210 0 114 4 210 0 117 4 210 0 121 4 210 0 122 4 210 0 125 4 210 0 128 4 210 0 130 4 210 0 133 4 210 0 134 4 210 0 135 4 210 0 136 4 210 0 138 4 210 0 152 0 239 0 157 4 210 0 158 4 210 0 159 4 210 0 160 4 210 0 161 4 210 0 162 4 210 0 165 4 210 0 166 4 210 0 169 4 210 0 170 14 205 0 222 10 121 0 223 10 125 0 224 10 129 0 225] -#[1 13 145 0 15 14 209 0 38] -#[1 7 54 0 15 2 123 0 38] -#[0 14 217 0 163] -#[1 8 10 0 163 14 221 0 164] -#[1 14 225 0 15 8 14 0 163 8 14 0 164 8 14 0 167 8 14 0 168] -#[1 8 18 0 167 14 229 0 168] -#[0 14 233 0 167] -#[0 8 22 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 0 254 0 2 0 254 0 3 0 254 0 4 0 254 0 5 0 254 0 6 0 254 0 7 0 254 0 8 0 254 0 9 0 254 0 10 0 254 0 11 0 254 0 12 0 254 0 13 0 254 0 14 0 254 0 15 0 254 0 16 0 254 0 17 0 254 0 18 0 254 0 19 0 254 0 20 0 254 0 21 0 254 0 22 0 254 0 23 0 254 0 25 0 107 0 26 0 254 0 27 0 254 0 28 0 254 0 29 0 254 0 30 0 254 0 31 0 254 0 33 0 254 0 34 0 254 0 35 0 254 0 36 0 254 0 37 0 254 0 38 0 254 0 39 0 254 0 40 0 254 0 41 0 254 0 44 0 254 0 45 0 254 0 49 0 254 0 51 0 254 0 52 0 254 0 55 0 254 0 57 0 254 0 58 0 254 0 60 0 254 0 62 0 254 0 63 0 254 0 65 0 254 0 67 0 254 0 68 0 254 0 69 0 254 0 71 0 254 0 75 0 254 0 76 0 254 0 79 0 254 0 82 0 254 0 86 0 254 0 87 0 254 0 88 0 254 0 89 0 254 0 90 0 254 0 91 0 254 0 92 0 254 0 94 0 254 0 99 0 254 0 100 0 254 0 101 0 254 0 103 0 254 0 105 0 254 0 108 0 254 0 109 0 254 0 111 0 254 0 112 0 254 0 113 0 254 0 117 0 254 0 118 0 254 0 119 0 254 0 121 0 254 0 124 0 254 0 125 0 254 0 126 0 254 0 134 0 254 0 135 0 254 0 137 0 254 0 138 0 254 0 141 0 254 0 142 0 254 0 143 0 254 0 145 0 254 0 149 0 254 0 150 0 254 0 151 0 254 0 152 0 254 0 153 0 254 0 154 0 254 0 155 0 254 0 157 0 254 0 163 0 254 0 164 0 254 0 167 0 254 0 168 14 237 0 217 14 237 0 238 0 254 2 100] -#[0 8 26 0 9 0 15 0 23 0 25 0 37 0 38 0 41 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 152 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 6 129 0 157 14 241 1 101 6 141 1 102] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 14 245 0 123 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 9 229 0 148 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 14 253 1 47 14 253 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 14 253 1 63 3 197 1 64 14 253 1 83 14 253 1 86 14 253 1 87 14 253 1 103 14 253 2 7 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86 14 253 2 98] -#[0 8 30 0 32 0 148] -#[1 2 194 0 49 2 194 0 52 2 194 0 55 2 194 0 60 2 194 0 65 2 194 0 76 2 194 0 86 2 194 0 94 2 194 0 100 6 181 0 104 6 181 0 114 2 194 0 117 2 194 0 121 2 194 0 125 2 194 0 134 2 194 0 135 2 194 0 138 2 194 0 142 2 194 0 157 15 9 1 55 6 181 1 56 6 181 1 57] -#[1 1 66 0 10 1 70 0 35 1 74 0 37 15 13 0 157] -#[0 8 34 0 32] -#[0 15 21 0 157 1 61] -#[0 15 25 0 85] -#[1 4 210 0 1 4 210 0 5 4 210 0 8 4 214 0 9 4 210 0 10 4 210 0 12 4 210 0 13 4 210 0 16 4 210 0 17 4 210 0 47 4 210 0 48 4 210 0 49 4 210 0 52 4 210 0 55 4 210 0 56 4 210 0 60 4 210 0 61 4 210 0 62 4 210 0 65 4 210 0 72 4 210 0 76 4 210 0 79 4 210 0 86 4 210 0 94 4 210 0 97 4 210 0 99 4 210 0 100 4 210 0 104 4 210 0 114 4 210 0 117 4 210 0 121 4 210 0 122 4 210 0 125 4 210 0 128 4 210 0 130 4 210 0 133 4 210 0 134 4 210 0 135 4 210 0 136 4 210 0 138 4 210 0 152 0 239 0 157 4 210 0 158 4 210 0 159 4 210 0 160 4 210 0 161 4 210 0 162 4 210 0 165 4 210 0 166 4 210 0 169 4 210 0 170 15 29 0 221 10 117 0 222 10 121 0 223 10 125 0 224 10 129 0 225] -#[0 8 38 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 21 0 23 0 25 0 26 0 27 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 8 42 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 21 0 23 0 25 0 26 0 27 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 8 46 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 21 0 23 0 25 0 26 0 27 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 2 206 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 21 0 23 0 25 0 26 0 27 0 29 0 31 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 8 50 0 2 6 217 0 3 8 50 0 5 8 50 0 6 8 50 0 9 6 221 0 10 8 50 0 12 8 50 0 15 8 50 0 16 6 225 0 21 8 50 0 23 8 50 0 25 8 50 0 26 8 50 0 27 8 50 0 29 8 50 0 31 8 50 0 33 8 50 0 35 8 50 0 36 8 50 0 37 8 50 0 38 8 50 0 39 8 50 0 41 8 50 0 44 8 50 0 45 8 50 0 49 8 50 0 51 8 50 0 52 8 50 0 55 8 50 0 57 8 50 0 58 8 50 0 60 8 50 0 62 8 50 0 63 8 50 0 65 8 50 0 67 8 50 0 68 8 50 0 69 8 50 0 71 8 50 0 75 8 50 0 76 8 50 0 79 8 50 0 82 8 50 0 86 8 50 0 87 8 50 0 88 8 50 0 89 8 50 0 90 8 50 0 91 8 50 0 92 8 50 0 94 8 50 0 99 8 50 0 100 8 50 0 101 8 50 0 103 8 50 0 105 8 50 0 108 8 50 0 109 8 50 0 111 8 50 0 112 8 50 0 113 8 50 0 117 8 50 0 118 8 50 0 119 8 50 0 121 8 50 0 124 8 50 0 125 8 50 0 126 8 50 0 134 8 50 0 135 8 50 0 137 8 50 0 138 8 50 0 141 8 50 0 142 8 50 0 143 8 50 0 145 8 50 0 149 8 50 0 151 8 50 0 152 8 50 0 153 8 50 0 154 8 50 0 155 8 50 0 157 8 50 0 163 8 50 0 164 8 50 0 167 8 50 0 168 8 50 2 100] -#[1 8 54 0 2 6 217 0 3 8 54 0 5 8 54 0 6 8 54 0 9 6 221 0 10 8 54 0 12 8 54 0 15 8 54 0 16 6 225 0 21 8 54 0 23 8 54 0 25 8 54 0 26 8 54 0 27 8 54 0 29 8 54 0 31 8 54 0 33 8 54 0 35 8 54 0 36 8 54 0 37 8 54 0 38 8 54 0 39 8 54 0 41 8 54 0 44 8 54 0 45 8 54 0 49 8 54 0 51 8 54 0 52 8 54 0 55 8 54 0 57 8 54 0 58 8 54 0 60 8 54 0 62 8 54 0 63 8 54 0 65 8 54 0 67 8 54 0 68 8 54 0 69 8 54 0 71 8 54 0 75 8 54 0 76 8 54 0 79 8 54 0 82 8 54 0 86 8 54 0 87 8 54 0 88 8 54 0 89 8 54 0 90 8 54 0 91 8 54 0 92 8 54 0 94 8 54 0 99 8 54 0 100 8 54 0 101 8 54 0 103 8 54 0 105 8 54 0 108 8 54 0 109 8 54 0 111 8 54 0 112 8 54 0 113 8 54 0 117 8 54 0 118 8 54 0 119 8 54 0 121 8 54 0 124 8 54 0 125 8 54 0 126 8 54 0 134 8 54 0 135 8 54 0 137 8 54 0 138 8 54 0 141 8 54 0 142 8 54 0 143 8 54 0 145 8 54 0 149 8 54 0 151 8 54 0 152 8 54 0 153 8 54 0 154 8 54 0 155 8 54 0 157 8 54 0 163 8 54 0 164 8 54 0 167 8 54 0 168 8 54 2 100] -#[1 8 58 0 2 8 58 0 5 8 58 0 6 8 58 0 9 6 229 0 12 8 58 0 15 6 233 0 16 8 58 0 23 8 58 0 25 8 58 0 26 8 58 0 27 8 58 0 29 8 58 0 31 8 58 0 33 8 58 0 35 8 58 0 36 8 58 0 37 8 58 0 38 8 58 0 39 8 58 0 41 8 58 0 44 8 58 0 45 8 58 0 49 8 58 0 51 8 58 0 52 8 58 0 55 8 58 0 57 8 58 0 58 8 58 0 60 8 58 0 62 8 58 0 63 8 58 0 65 8 58 0 67 8 58 0 68 8 58 0 69 8 58 0 71 8 58 0 75 8 58 0 76 8 58 0 79 8 58 0 82 8 58 0 86 8 58 0 87 8 58 0 88 8 58 0 89 8 58 0 90 8 58 0 91 8 58 0 92 8 58 0 94 8 58 0 99 8 58 0 100 8 58 0 101 8 58 0 103 8 58 0 105 8 58 0 108 8 58 0 109 8 58 0 111 8 58 0 112 8 58 0 113 8 58 0 117 8 58 0 118 8 58 0 119 8 58 0 121 8 58 0 124 8 58 0 125 8 58 0 126 8 58 0 134 8 58 0 135 8 58 0 137 8 58 0 138 8 58 0 141 8 58 0 142 8 58 0 143 8 58 0 145 8 58 0 149 8 58 0 151 8 58 0 152 8 58 0 153 8 58 0 154 8 58 0 155 8 58 0 157 8 58 0 163 8 58 0 164 8 58 0 167 8 58 0 168 8 58 2 100] -#[1 8 62 0 2 8 62 0 5 8 62 0 6 8 62 0 9 6 229 0 12 8 62 0 15 6 233 0 16 8 62 0 23 8 62 0 25 8 62 0 26 8 62 0 27 8 62 0 29 8 62 0 31 8 62 0 33 8 62 0 35 8 62 0 36 8 62 0 37 8 62 0 38 8 62 0 39 8 62 0 41 8 62 0 44 8 62 0 45 8 62 0 49 8 62 0 51 8 62 0 52 8 62 0 55 8 62 0 57 8 62 0 58 8 62 0 60 8 62 0 62 8 62 0 63 8 62 0 65 8 62 0 67 8 62 0 68 8 62 0 69 8 62 0 71 8 62 0 75 8 62 0 76 8 62 0 79 8 62 0 82 8 62 0 86 8 62 0 87 8 62 0 88 8 62 0 89 8 62 0 90 8 62 0 91 8 62 0 92 8 62 0 94 8 62 0 99 8 62 0 100 8 62 0 101 8 62 0 103 8 62 0 105 8 62 0 108 8 62 0 109 8 62 0 111 8 62 0 112 8 62 0 113 8 62 0 117 8 62 0 118 8 62 0 119 8 62 0 121 8 62 0 124 8 62 0 125 8 62 0 126 8 62 0 134 8 62 0 135 8 62 0 137 8 62 0 138 8 62 0 141 8 62 0 142 8 62 0 143 8 62 0 145 8 62 0 149 8 62 0 151 8 62 0 152 8 62 0 153 8 62 0 154 8 62 0 155 8 62 0 157 8 62 0 163 8 62 0 164 8 62 0 167 8 62 0 168 8 62 2 100] -#[1 8 66 0 2 8 66 0 5 8 66 0 6 8 66 0 9 8 66 0 15 8 66 0 23 8 66 0 25 8 66 0 26 6 237 0 27 8 66 0 29 8 66 0 31 8 66 0 33 8 66 0 35 8 66 0 36 8 66 0 37 8 66 0 38 8 66 0 39 8 66 0 41 8 66 0 44 8 66 0 45 8 66 0 49 8 66 0 51 8 66 0 52 8 66 0 55 8 66 0 57 8 66 0 58 8 66 0 60 8 66 0 62 8 66 0 63 8 66 0 65 8 66 0 67 8 66 0 68 8 66 0 69 8 66 0 71 8 66 0 75 8 66 0 76 8 66 0 79 8 66 0 82 8 66 0 86 8 66 0 87 8 66 0 88 8 66 0 89 8 66 0 90 8 66 0 91 8 66 0 92 8 66 0 94 8 66 0 99 8 66 0 100 8 66 0 101 8 66 0 103 8 66 0 105 8 66 0 108 8 66 0 109 8 66 0 111 8 66 0 112 8 66 0 113 8 66 0 117 8 66 0 118 8 66 0 119 8 66 0 121 8 66 0 124 8 66 0 125 8 66 0 126 8 66 0 134 8 66 0 135 8 66 0 137 8 66 0 138 8 66 0 141 8 66 0 142 8 66 0 143 8 66 0 145 8 66 0 149 8 66 0 151 8 66 0 152 8 66 0 153 6 241 0 154 8 66 0 155 8 66 0 157 8 66 0 163 8 66 0 164 8 66 0 167 8 66 0 168 8 66 2 100] -#[1 8 70 0 2 8 70 0 5 8 70 0 6 8 70 0 9 8 70 0 15 8 70 0 23 8 70 0 25 8 70 0 26 6 237 0 27 8 70 0 29 8 70 0 31 8 70 0 33 8 70 0 35 8 70 0 36 8 70 0 37 8 70 0 38 8 70 0 39 8 70 0 41 8 70 0 44 8 70 0 45 8 70 0 49 8 70 0 51 8 70 0 52 8 70 0 55 8 70 0 57 8 70 0 58 8 70 0 60 8 70 0 62 8 70 0 63 8 70 0 65 8 70 0 67 8 70 0 68 8 70 0 69 8 70 0 71 8 70 0 75 8 70 0 76 8 70 0 79 8 70 0 82 8 70 0 86 8 70 0 87 8 70 0 88 8 70 0 89 8 70 0 90 8 70 0 91 8 70 0 92 8 70 0 94 8 70 0 99 8 70 0 100 8 70 0 101 8 70 0 103 8 70 0 105 8 70 0 108 8 70 0 109 8 70 0 111 8 70 0 112 8 70 0 113 8 70 0 117 8 70 0 118 8 70 0 119 8 70 0 121 8 70 0 124 8 70 0 125 8 70 0 126 8 70 0 134 8 70 0 135 8 70 0 137 8 70 0 138 8 70 0 141 8 70 0 142 8 70 0 143 8 70 0 145 8 70 0 149 8 70 0 151 8 70 0 152 8 70 0 153 6 241 0 154 8 70 0 155 8 70 0 157 8 70 0 163 8 70 0 164 8 70 0 167 8 70 0 168 8 70 2 100] -#[1 8 74 0 2 8 74 0 5 8 74 0 6 8 74 0 9 8 74 0 15 8 74 0 23 8 74 0 25 8 74 0 26 6 237 0 27 8 74 0 29 8 74 0 31 8 74 0 33 8 74 0 35 8 74 0 36 8 74 0 37 8 74 0 38 8 74 0 39 8 74 0 41 8 74 0 44 8 74 0 45 8 74 0 49 8 74 0 51 8 74 0 52 8 74 0 55 8 74 0 57 8 74 0 58 8 74 0 60 8 74 0 62 8 74 0 63 8 74 0 65 8 74 0 67 8 74 0 68 8 74 0 69 8 74 0 71 8 74 0 75 8 74 0 76 8 74 0 79 8 74 0 82 8 74 0 86 8 74 0 87 8 74 0 88 8 74 0 89 8 74 0 90 8 74 0 91 8 74 0 92 8 74 0 94 8 74 0 99 8 74 0 100 8 74 0 101 8 74 0 103 8 74 0 105 8 74 0 108 8 74 0 109 8 74 0 111 8 74 0 112 8 74 0 113 8 74 0 117 8 74 0 118 8 74 0 119 8 74 0 121 8 74 0 124 8 74 0 125 8 74 0 126 8 74 0 134 8 74 0 135 8 74 0 137 8 74 0 138 8 74 0 141 8 74 0 142 8 74 0 143 8 74 0 145 8 74 0 149 8 74 0 151 8 74 0 152 8 74 0 153 6 241 0 154 8 74 0 155 8 74 0 157 8 74 0 163 8 74 0 164 8 74 0 167 8 74 0 168 8 74 2 100] -#[1 8 78 0 2 8 78 0 5 8 78 0 6 8 78 0 9 1 66 0 10 8 78 0 15 8 78 0 23 8 78 0 25 8 78 0 26 8 78 0 29 8 78 0 31 8 78 0 33 2 127 0 35 8 78 0 36 2 131 0 37 8 78 0 38 8 78 0 39 8 78 0 41 8 78 0 44 8 78 0 45 8 78 0 49 8 78 0 51 8 78 0 52 8 78 0 55 8 78 0 57 8 78 0 58 8 78 0 60 8 78 0 62 8 78 0 63 8 78 0 65 8 78 0 67 8 78 0 68 8 78 0 69 8 78 0 71 8 78 0 75 8 78 0 76 8 78 0 79 8 78 0 82 8 78 0 86 8 78 0 87 8 78 0 88 8 78 0 89 8 78 0 90 8 78 0 91 8 78 0 92 8 78 0 94 8 78 0 99 8 78 0 100 8 78 0 101 8 78 0 103 8 78 0 105 8 78 0 108 8 78 0 109 8 78 0 111 8 78 0 112 8 78 0 113 8 78 0 117 8 78 0 118 8 78 0 119 8 78 0 121 8 78 0 124 8 78 0 125 8 78 0 126 8 78 0 134 8 78 0 135 8 78 0 137 8 78 0 138 8 78 0 141 8 78 0 142 8 78 0 143 8 78 0 145 8 78 0 149 8 78 0 151 8 78 0 152 8 78 0 153 8 78 0 155 8 78 0 157 8 78 0 163 8 78 0 164 8 78 0 167 8 78 0 168 8 78 2 100] -#[1 8 82 0 2 8 82 0 5 8 82 0 6 8 82 0 9 1 66 0 10 8 82 0 15 8 82 0 23 8 82 0 25 8 82 0 26 8 82 0 29 8 82 0 31 8 82 0 33 2 135 0 35 8 82 0 36 2 139 0 37 8 82 0 38 8 82 0 39 8 82 0 41 8 82 0 44 8 82 0 45 8 82 0 49 8 82 0 51 8 82 0 52 8 82 0 55 8 82 0 57 8 82 0 58 8 82 0 60 8 82 0 62 8 82 0 63 8 82 0 65 8 82 0 67 8 82 0 68 8 82 0 69 8 82 0 71 8 82 0 75 8 82 0 76 8 82 0 79 8 82 0 82 8 82 0 86 8 82 0 87 8 82 0 88 8 82 0 89 8 82 0 90 8 82 0 91 8 82 0 92 8 82 0 94 8 82 0 99 8 82 0 100 8 82 0 101 8 82 0 103 8 82 0 105 8 82 0 108 8 82 0 109 8 82 0 111 8 82 0 112 8 82 0 113 8 82 0 117 8 82 0 118 8 82 0 119 8 82 0 121 8 82 0 124 8 82 0 125 8 82 0 126 8 82 0 134 8 82 0 135 8 82 0 137 8 82 0 138 8 82 0 141 8 82 0 142 8 82 0 143 8 82 0 145 8 82 0 149 8 82 0 151 8 82 0 152 8 82 0 153 8 82 0 155 8 82 0 157 8 82 0 163 8 82 0 164 8 82 0 167 8 82 0 168 8 82 2 100] -#[1 8 86 0 2 8 86 0 5 8 86 0 6 8 86 0 9 8 86 0 15 8 86 0 23 8 86 0 25 8 86 0 26 6 237 0 27 8 86 0 29 8 86 0 31 8 86 0 33 8 86 0 35 8 86 0 36 8 86 0 37 8 86 0 38 8 86 0 39 8 86 0 41 8 86 0 44 8 86 0 45 8 86 0 49 8 86 0 51 8 86 0 52 8 86 0 55 8 86 0 57 8 86 0 58 8 86 0 60 8 86 0 62 8 86 0 63 8 86 0 65 8 86 0 67 8 86 0 68 8 86 0 69 8 86 0 71 8 86 0 75 8 86 0 76 8 86 0 79 8 86 0 82 8 86 0 86 8 86 0 87 8 86 0 88 8 86 0 89 8 86 0 90 8 86 0 91 8 86 0 92 8 86 0 94 8 86 0 99 8 86 0 100 8 86 0 101 8 86 0 103 8 86 0 105 8 86 0 108 8 86 0 109 8 86 0 111 8 86 0 112 8 86 0 113 8 86 0 117 8 86 0 118 8 86 0 119 8 86 0 121 8 86 0 124 8 86 0 125 8 86 0 126 8 86 0 134 8 86 0 135 8 86 0 137 8 86 0 138 8 86 0 141 8 86 0 142 8 86 0 143 8 86 0 145 8 86 0 149 8 86 0 151 8 86 0 152 8 86 0 153 6 241 0 154 8 86 0 155 8 86 0 157 8 86 0 163 8 86 0 164 8 86 0 167 8 86 0 168 8 86 2 100] -#[1 8 90 0 2 8 90 0 5 8 90 0 6 8 90 0 9 8 90 0 15 8 90 0 23 8 90 0 25 6 245 0 26 6 249 0 29 8 90 0 31 6 253 0 33 8 90 0 35 8 90 0 36 8 90 0 37 8 90 0 38 8 90 0 39 8 90 0 41 7 1 0 44 8 90 0 45 8 90 0 49 8 90 0 51 8 90 0 52 8 90 0 55 8 90 0 57 8 90 0 58 8 90 0 60 8 90 0 62 8 90 0 63 8 90 0 65 8 90 0 67 8 90 0 68 8 90 0 69 8 90 0 71 8 90 0 75 8 90 0 76 8 90 0 79 8 90 0 82 8 90 0 86 8 90 0 87 8 90 0 88 8 90 0 89 7 5 0 90 8 90 0 91 8 90 0 92 8 90 0 94 8 90 0 99 8 90 0 100 8 90 0 101 8 90 0 103 8 90 0 105 8 90 0 108 8 90 0 109 8 90 0 111 8 90 0 112 8 90 0 113 8 90 0 117 8 90 0 118 8 90 0 119 8 90 0 121 8 90 0 124 8 90 0 125 8 90 0 126 8 90 0 134 8 90 0 135 8 90 0 137 8 90 0 138 8 90 0 141 8 90 0 142 8 90 0 143 8 90 0 145 8 90 0 149 8 90 0 151 8 90 0 152 7 9 0 153 8 90 0 155 8 90 0 157 8 90 0 163 8 90 0 164 8 90 0 167 8 90 0 168 8 90 2 100] -#[1 8 94 0 2 8 94 0 5 8 94 0 6 8 94 0 9 8 94 0 15 8 94 0 23 8 94 0 25 6 245 0 26 6 249 0 29 8 94 0 31 6 253 0 33 8 94 0 35 8 94 0 36 8 94 0 37 8 94 0 38 8 94 0 39 8 94 0 41 7 1 0 44 8 94 0 45 8 94 0 49 8 94 0 51 8 94 0 52 8 94 0 55 8 94 0 57 8 94 0 58 8 94 0 60 8 94 0 62 8 94 0 63 8 94 0 65 8 94 0 67 8 94 0 68 8 94 0 69 8 94 0 71 8 94 0 75 8 94 0 76 8 94 0 79 8 94 0 82 8 94 0 86 8 94 0 87 8 94 0 88 8 94 0 89 7 5 0 90 8 94 0 91 8 94 0 92 8 94 0 94 8 94 0 99 8 94 0 100 8 94 0 101 8 94 0 103 8 94 0 105 8 94 0 108 8 94 0 109 8 94 0 111 8 94 0 112 8 94 0 113 8 94 0 117 8 94 0 118 8 94 0 119 8 94 0 121 8 94 0 124 8 94 0 125 8 94 0 126 8 94 0 134 8 94 0 135 8 94 0 137 8 94 0 138 8 94 0 141 8 94 0 142 8 94 0 143 8 94 0 145 8 94 0 149 8 94 0 151 8 94 0 152 7 9 0 153 8 94 0 155 8 94 0 157 8 94 0 163 8 94 0 164 8 94 0 167 8 94 0 168 8 94 2 100] -#[1 7 13 0 2 8 98 0 5 8 98 0 6 8 98 0 9 8 98 0 15 8 98 0 23 8 98 0 25 7 17 0 31 8 98 0 35 8 98 0 36 8 98 0 37 8 98 0 38 8 98 0 39 8 98 0 41 8 98 0 45 8 98 0 49 8 98 0 51 8 98 0 52 8 98 0 55 8 98 0 57 8 98 0 58 8 98 0 60 8 98 0 62 8 98 0 63 8 98 0 65 8 98 0 67 8 98 0 68 8 98 0 69 8 98 0 71 8 98 0 75 8 98 0 76 8 98 0 79 8 98 0 82 8 98 0 86 8 98 0 87 8 98 0 88 8 98 0 89 8 98 0 91 8 98 0 92 8 98 0 94 8 98 0 99 8 98 0 100 8 98 0 101 8 98 0 103 8 98 0 105 8 98 0 108 8 98 0 109 8 98 0 111 8 98 0 112 8 98 0 113 8 98 0 117 8 98 0 118 8 98 0 119 8 98 0 121 8 98 0 124 8 98 0 125 8 98 0 126 8 98 0 134 8 98 0 135 8 98 0 137 8 98 0 138 8 98 0 141 8 98 0 142 8 98 0 143 8 98 0 145 8 98 0 149 8 98 0 151 8 98 0 152 8 98 0 155 8 98 0 157 8 98 0 163 8 98 0 164 8 98 0 167 8 98 0 168 8 98 2 100] -#[1 7 21 0 5 8 102 0 6 8 102 0 9 8 102 0 15 8 102 0 23 8 102 0 25 8 102 0 35 8 102 0 36 8 102 0 37 8 102 0 38 8 102 0 39 8 102 0 41 8 102 0 45 8 102 0 49 8 102 0 51 8 102 0 52 8 102 0 55 8 102 0 57 8 102 0 58 8 102 0 60 8 102 0 62 8 102 0 63 8 102 0 65 8 102 0 67 8 102 0 68 8 102 0 69 8 102 0 71 8 102 0 75 8 102 0 76 8 102 0 79 8 102 0 82 8 102 0 86 8 102 0 87 8 102 0 88 8 102 0 89 8 102 0 91 8 102 0 92 8 102 0 94 8 102 0 99 8 102 0 100 8 102 0 101 8 102 0 103 8 102 0 105 8 102 0 108 8 102 0 109 8 102 0 111 8 102 0 112 8 102 0 113 8 102 0 117 8 102 0 118 8 102 0 119 8 102 0 121 8 102 0 124 8 102 0 125 8 102 0 126 8 102 0 134 8 102 0 135 8 102 0 137 8 102 0 138 8 102 0 141 8 102 0 142 8 102 0 143 8 102 0 145 8 102 0 149 8 102 0 151 8 102 0 152 8 102 0 155 8 102 0 157 8 102 0 163 8 102 0 164 8 102 0 167 8 102 0 168 8 102 2 100] -#[1 8 106 0 6 8 106 0 9 8 106 0 15 8 106 0 23 8 106 0 25 8 106 0 35 8 106 0 36 8 106 0 37 8 106 0 38 7 25 0 39 8 106 0 41 8 106 0 45 8 106 0 49 8 106 0 51 8 106 0 52 8 106 0 55 8 106 0 57 8 106 0 58 8 106 0 60 8 106 0 62 8 106 0 63 8 106 0 65 8 106 0 67 8 106 0 68 8 106 0 69 8 106 0 71 8 106 0 75 8 106 0 76 8 106 0 79 8 106 0 82 8 106 0 86 8 106 0 87 8 106 0 88 8 106 0 89 8 106 0 91 8 106 0 92 8 106 0 94 8 106 0 99 8 106 0 100 8 106 0 101 8 106 0 103 8 106 0 105 8 106 0 108 8 106 0 109 8 106 0 111 8 106 0 112 8 106 0 113 8 106 0 117 8 106 0 118 8 106 0 119 8 106 0 121 8 106 0 124 8 106 0 125 8 106 0 126 8 106 0 134 8 106 0 135 8 106 0 137 8 106 0 138 8 106 0 141 8 106 0 142 8 106 0 143 8 106 0 145 8 106 0 149 8 106 0 151 8 106 0 152 8 106 0 155 8 106 0 157 8 106 0 163 8 106 0 164 8 106 0 167 8 106 0 168 8 106 2 100] -#[1 8 110 0 6 8 110 0 9 8 110 0 15 8 110 0 23 8 110 0 25 8 110 0 35 8 110 0 36 8 110 0 37 8 110 0 38 8 110 0 41 8 110 0 45 8 110 0 49 8 110 0 51 8 110 0 52 8 110 0 55 8 110 0 57 8 110 0 58 8 110 0 60 8 110 0 62 8 110 0 63 8 110 0 65 8 110 0 67 8 110 0 68 8 110 0 69 8 110 0 71 8 110 0 75 8 110 0 76 8 110 0 79 8 110 0 82 8 110 0 86 8 110 0 87 8 110 0 88 8 110 0 89 8 110 0 91 8 110 0 92 8 110 0 94 8 110 0 99 8 110 0 100 8 110 0 101 8 110 0 103 8 110 0 105 8 110 0 108 8 110 0 109 8 110 0 111 8 110 0 112 8 110 0 113 8 110 0 117 8 110 0 118 8 110 0 119 8 110 0 121 8 110 0 124 8 110 0 125 8 110 0 126 8 110 0 134 8 110 0 135 8 110 0 137 8 110 0 138 8 110 0 141 8 110 0 142 8 110 0 143 8 110 0 145 7 29 0 149 8 110 0 151 8 110 0 152 8 110 0 155 8 110 0 157 8 110 0 163 8 110 0 164 8 110 0 167 8 110 0 168 8 110 2 100] -#[0 8 114 0 9 0 15 0 23 0 25 0 35 0 37 0 38 0 41 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 152 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 7 33 0 6 8 118 0 9 8 118 0 15 8 118 0 23 8 118 0 25 8 118 0 35 8 118 0 36 8 118 0 37 8 118 0 38 8 118 0 41 8 118 0 45 8 118 0 49 8 118 0 51 8 118 0 52 8 118 0 55 8 118 0 57 8 118 0 58 8 118 0 60 8 118 0 62 8 118 0 63 8 118 0 65 8 118 0 67 8 118 0 68 8 118 0 69 8 118 0 71 8 118 0 75 8 118 0 76 8 118 0 79 8 118 0 82 8 118 0 86 8 118 0 87 8 118 0 88 8 118 0 89 8 118 0 91 8 118 0 92 8 118 0 94 8 118 0 99 8 118 0 100 8 118 0 101 8 118 0 103 8 118 0 105 8 118 0 108 8 118 0 109 8 118 0 111 8 118 0 112 8 118 0 113 8 118 0 117 8 118 0 118 8 118 0 119 8 118 0 121 8 118 0 124 8 118 0 125 8 118 0 126 8 118 0 134 8 118 0 135 8 118 0 137 8 118 0 138 8 118 0 141 8 118 0 142 8 118 0 143 8 118 0 145 8 118 0 151 8 118 0 152 8 118 0 155 8 118 0 157 8 118 0 163 8 118 0 164 8 118 0 167 8 118 0 168 8 118 2 100] -#[0 15 33 0 23] -#[0 8 122 0 9 0 15 0 23 0 25 0 37 0 38 0 41 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 152 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 8 126 0 9 0 15 0 23 0 25 0 37 0 38 0 41 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 152 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 8 130 0 9 0 15 0 23 0 25 0 37 0 38 0 41 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 152 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 15 37 0 157] -#[0 15 41 0 30] -#[1 15 45 0 15 8 134 0 79 8 134 0 82 8 134 0 91 8 134 0 92 8 134 0 103 8 134 0 119 8 134 0 145] -#[0 8 138 0 15 0 79 0 82 0 91 0 92 0 103 0 119 0 145] -#[1 8 142 0 15 15 49 0 45 15 53 0 63 8 142 0 79 8 142 0 82 8 142 0 91 8 142 0 92 8 142 0 103 8 142 0 119 8 142 0 145 15 57 1 76 15 61 1 77] -#[0 8 146 0 79 0 82 0 91 0 92 0 103 0 119 0 145] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 15 65 1 47 15 65 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 15 65 1 63 3 197 1 64 15 65 1 83 15 65 1 86 15 65 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 15 69 1 47 15 69 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 15 69 1 63 3 197 1 64 15 69 1 83 15 69 1 86 15 69 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 8 150 0 9 8 150 0 15 8 150 0 23 8 150 0 25 8 150 0 37 8 150 0 38 8 150 0 41 8 150 0 45 8 150 0 49 8 150 0 51 8 150 0 52 8 150 0 55 8 150 0 57 8 150 0 58 8 150 0 60 8 150 0 62 8 150 0 63 8 150 0 65 8 150 0 67 8 150 0 68 8 150 0 69 8 150 0 71 8 150 0 75 8 150 0 76 8 150 0 79 8 150 0 82 8 150 0 86 8 150 0 87 8 150 0 88 2 143 0 89 8 150 0 91 8 150 0 92 8 150 0 94 8 150 0 99 8 150 0 100 8 150 0 101 8 150 0 103 8 150 0 105 8 150 0 108 8 150 0 109 8 150 0 111 8 150 0 112 8 150 0 113 8 150 0 117 8 150 0 118 8 150 0 119 8 150 0 121 8 150 0 124 8 150 0 125 8 150 0 126 8 150 0 134 8 150 0 135 8 150 0 137 8 150 0 138 8 150 0 141 8 150 0 142 8 150 0 143 8 150 0 145 8 150 0 152 8 150 0 155 8 150 0 157 8 150 0 163 8 150 0 164 8 150 0 167 8 150 0 168 15 77 1 81 15 81 1 82 8 150 2 100] -#[0 8 154 0 9 0 15 0 23 0 25 0 37 0 38 0 41 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 152 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 8 158 0 9 0 15 0 23 0 25 0 37 0 38 0 41 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 152 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 8 162 0 79 0 82 0 91 0 92 0 103 0 119 0 145] -#[0 15 85 0 25] -#[0 5 178 0 124 0 137 0 152 0 157] -#[0 6 150 0 71 0 124 0 152 0 157] -#[1 15 89 0 137 2 147 0 157 15 89 2 78] -#[1 15 93 0 71 3 102 0 157 15 93 2 75] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 15 97 0 196 15 97 0 197 15 97 0 198 15 97 0 199 1 145 0 200 1 145 0 201 1 145 0 202 15 97 0 203 1 161 0 204 15 97 0 205 15 97 0 206 15 97 0 207 15 97 0 208 15 97 0 209 1 185 0 210 15 97 0 216 15 97 1 157 15 97 2 80 2 229 2 81 3 1 2 99] -#[0 5 202 0 58 0 88 0 99 0 109 0 111 0 112] -#[0 5 230 0 58 0 88 0 99 0 109 0 111 0 112] -#[0 6 14 0 58 0 88 0 99 0 109 0 111 0 112] -#[0 6 42 0 58 0 88 0 99 0 109 0 111 0 112] -#[0 6 74 0 58 0 88 0 99 0 109 0 111 0 112] -#[0 8 170 0 58 0 88 0 99 0 109 0 111 0 112] -#[1 1 66 0 10 1 70 0 35 1 74 0 37 15 101 0 157 15 105 1 183 15 109 1 184] -#[0 5 198 0 49 0 52 0 55 0 60 0 65 0 76 0 86 0 88 0 94 0 99 0 100 0 109 0 111 0 112 0 113 0 117 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 142 0 143 0 157] -#[0 5 226 0 49 0 52 0 55 0 60 0 65 0 76 0 86 0 88 0 94 0 99 0 100 0 109 0 111 0 112 0 113 0 117 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 142 0 143 0 157] -#[0 6 10 0 49 0 52 0 55 0 60 0 65 0 76 0 86 0 88 0 94 0 99 0 100 0 109 0 111 0 112 0 113 0 117 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 142 0 143 0 157] -#[0 6 38 0 49 0 52 0 55 0 60 0 65 0 76 0 86 0 88 0 94 0 99 0 100 0 109 0 111 0 112 0 113 0 117 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 142 0 143 0 157] -#[0 6 70 0 49 0 52 0 55 0 60 0 65 0 76 0 86 0 88 0 94 0 99 0 100 0 109 0 111 0 112 0 113 0 117 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 142 0 143 0 157] -#[0 6 118 0 49 0 52 0 55 0 60 0 65 0 76 0 86 0 88 0 94 0 99 0 100 0 109 0 111 0 112 0 113 0 117 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 142 0 143 0 157] -#[0 6 142 0 49 0 52 0 55 0 60 0 65 0 76 0 86 0 88 0 94 0 99 0 100 0 109 0 111 0 112 0 113 0 117 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 142 0 143 0 157] -#[0 8 174 0 49 0 52 0 55 0 60 0 65 0 76 0 86 0 88 0 94 0 99 0 100 0 109 0 111 0 112 0 113 0 117 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 142 0 143 0 157] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 13 129 0 196 13 129 0 197 13 129 0 198 13 129 0 199 1 145 0 200 1 145 0 201 1 145 0 202 13 129 0 203 1 161 0 204 13 129 0 205 13 129 0 206 13 129 0 207 13 129 0 208 13 129 0 209 1 185 0 210 13 129 0 216 13 129 1 157 15 113 1 191 13 129 2 80 2 229 2 81 13 137 2 99] -#[0 5 150 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 5 166 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 5 194 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 5 222 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 5 238 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 5 254 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 6 30 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 6 58 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 6 86 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 6 102 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 6 122 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 6 162 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 8 178 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[1 1 66 0 10 1 70 0 35 1 74 0 37 15 117 0 157 1 125 0 191 15 125 0 193 1 125 0 194 15 125 0 208 15 129 1 192] -#[0 5 142 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 5 158 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 5 190 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 5 210 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 5 234 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 5 250 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 6 26 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 6 54 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 6 94 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 6 106 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 6 126 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 6 154 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 8 182 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 15 133 0 196 15 133 0 197 15 133 0 198 15 133 0 199 1 145 0 200 1 145 0 201 1 145 0 202 15 133 0 203 1 161 0 204 15 133 0 205 15 133 0 206 15 133 0 207 15 133 0 208 15 133 0 209 1 185 0 210 15 133 0 216 15 133 1 157 15 133 2 80 2 229 2 81 3 1 2 99] -#[0 5 146 0 41 0 69 0 71 0 88 0 99 0 105 0 109 0 111 0 112 0 118 0 124 0 137 0 141] -#[0 5 162 0 41 0 69 0 71 0 88 0 99 0 105 0 109 0 111 0 112 0 118 0 124 0 137 0 141] -#[0 5 186 0 41 0 69 0 71 0 88 0 99 0 105 0 109 0 111 0 112 0 118 0 124 0 137 0 141] -#[0 5 214 0 41 0 69 0 71 0 88 0 99 0 105 0 109 0 111 0 112 0 118 0 124 0 137 0 141] -#[0 5 242 0 41 0 69 0 71 0 88 0 99 0 105 0 109 0 111 0 112 0 118 0 124 0 137 0 141] -#[0 6 2 0 41 0 69 0 71 0 88 0 99 0 105 0 109 0 111 0 112 0 118 0 124 0 137 0 141] -#[0 6 22 0 41 0 69 0 71 0 88 0 99 0 105 0 109 0 111 0 112 0 118 0 124 0 137 0 141] -#[0 6 62 0 41 0 69 0 71 0 88 0 99 0 105 0 109 0 111 0 112 0 118 0 124 0 137 0 141] -#[0 6 90 0 41 0 69 0 71 0 88 0 99 0 105 0 109 0 111 0 112 0 118 0 124 0 137 0 141] -#[0 6 110 0 41 0 69 0 71 0 88 0 99 0 105 0 109 0 111 0 112 0 118 0 124 0 137 0 141] -#[0 6 134 0 41 0 69 0 71 0 88 0 99 0 105 0 109 0 111 0 112 0 118 0 124 0 137 0 141] -#[0 6 166 0 41 0 69 0 71 0 88 0 99 0 105 0 109 0 111 0 112 0 118 0 124 0 137 0 141] -#[0 8 186 0 41 0 69 0 71 0 88 0 99 0 105 0 109 0 111 0 112 0 118 0 124 0 137 0 141] -#[1 1 66 0 10 1 70 0 35 1 74 0 37 15 137 0 128 8 73 0 157 1 125 0 191 15 141 0 193 1 125 0 194 15 141 0 208] -#[1 15 145 0 32 15 149 0 148 15 153 1 230] -#[0 5 138 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 5 154 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 5 182 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 5 218 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 5 246 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 6 6 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 6 34 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 6 50 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 6 98 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 6 130 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 6 158 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 8 190 0 41 0 49 0 52 0 55 0 60 0 65 0 71 0 76 0 86 0 88 0 94 0 99 0 100 0 105 0 109 0 111 0 112 0 117 0 118 0 121 0 125 0 134 0 135 0 137 0 138 0 141 0 142 0 157] -#[0 15 157 0 102] -#[0 5 170 0 49 0 52 0 55 0 60 0 65 0 70 0 71 0 76 0 84 0 86 0 94 0 100 0 112 0 117 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 142 0 157] -#[0 15 161 0 102] -#[0 6 66 0 49 0 52 0 55 0 60 0 65 0 70 0 71 0 76 0 84 0 86 0 94 0 100 0 112 0 117 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 142 0 157] -#[0 6 114 0 49 0 52 0 55 0 60 0 65 0 70 0 71 0 76 0 84 0 86 0 94 0 100 0 112 0 117 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 142 0 157] -#[0 6 138 0 49 0 52 0 55 0 60 0 65 0 70 0 71 0 76 0 84 0 86 0 94 0 100 0 112 0 117 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 142 0 157] -#[1 1 66 0 10 1 70 0 35 1 74 0 37 15 165 0 102] -#[0 8 194 0 49 0 52 0 55 0 60 0 65 0 70 0 71 0 76 0 84 0 86 0 94 0 100 0 112 0 117 0 121 0 124 0 125 0 134 0 135 0 137 0 138 0 142 0 157] -#[1 15 169 0 25 15 173 0 32 1 77 0 148 15 177 1 92 15 181 1 240] -#[0 8 198 0 25 0 32 0 148] -#[0 8 202 0 25 0 32 0 148] -#[0 8 206 0 25 0 32 0 148] -#[0 15 185 0 8] -#[1 15 189 0 25 1 77 0 148 15 193 1 92 15 197 1 248] -#[0 5 174 0 71 0 88 0 109 0 111 0 112 0 137 0 157] -#[0 5 206 0 71 0 88 0 109 0 111 0 112 0 137 0 157] -#[0 6 18 0 71 0 88 0 109 0 111 0 112 0 137 0 157] -#[0 6 46 0 71 0 88 0 109 0 111 0 112 0 137 0 157] -#[0 6 78 0 71 0 88 0 109 0 111 0 112 0 137 0 157] -#[0 6 146 0 71 0 88 0 109 0 111 0 112 0 137 0 157] -#[0 8 210 0 71 0 88 0 109 0 111 0 112 0 137 0 157] -#[0 15 201 0 8] -#[1 15 205 0 137 8 214 0 157] -#[1 15 209 0 124 15 213 0 152] -#[1 15 217 0 71 3 102 0 157 15 217 2 75] -#[1 15 221 0 124 15 225 0 152] -#[0 8 218 0 37 0 41 0 57 0 62 0 67 0 71 0 87 0 88 0 98 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 126 0 137 0 139 0 155 2 100] -#[0 15 229 0 25] -#[1 8 73 0 157 15 233 0 191 15 233 0 194] -#[0 8 222 0 37 0 41 0 57 0 62 0 67 0 87 0 88 0 98 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 126 0 137 0 139 0 155 2 100] -#[0 8 226 0 23] -#[0 8 230 0 23] -#[1 8 73 0 157 1 125 0 191 8 89 0 193 1 125 0 194 15 237 2 59 8 85 2 60 8 89 2 61] -#[0 15 241 0 23] -#[0 8 234 2 100] -#[1 0 49 0 37 0 10 0 41 0 10 0 57 0 10 0 62 0 10 0 67 0 10 0 87 0 10 0 88 0 53 0 98 0 10 0 99 0 10 0 108 0 10 0 109 0 10 0 111 0 10 0 112 0 10 0 118 0 10 0 124 0 10 0 126 0 10 0 137 8 238 0 155 15 245 0 175 15 245 0 189 15 245 0 190 15 245 1 150 15 245 1 252 15 245 2 10 15 245 2 32 15 245 2 42 0 89 2 52 0 93 2 53 0 97 2 54 0 101 2 55 8 238 2 100] -#[0 8 242 0 37 0 41 0 57 0 62 0 67 0 87 0 88 0 98 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 126 0 137 0 155 2 100] -#[0 8 246 0 37 0 41 0 57 0 62 0 67 0 87 0 88 0 98 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 126 0 137 2 100] -#[1 15 249 0 38 8 73 0 157 1 125 0 191 8 89 0 193 1 125 0 194 15 253 2 60 8 89 2 61] -#[0 8 250 0 37 0 41 0 42 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 80 0 85 0 86 0 87 0 88 0 94 0 99 0 100 0 104 0 105 0 107 0 108 0 109 0 111 0 112 0 113 0 114 0 115 0 117 0 118 0 120 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 157] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 8 254 0 9 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 16 1 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 16 17 1 47 16 17 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 16 17 1 63 3 197 1 64 16 17 1 83 16 17 1 86 16 17 1 87 16 9 2 64 16 13 2 65 16 17 2 66 16 21 2 67 16 25 2 68 16 17 2 69 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 9 2 0 15 0 38] -#[0 9 6 0 15 0 38] -#[0 9 10 0 20 0 148] -#[1 0 22 0 37 0 22 0 41 0 22 0 57 0 22 0 62 0 22 0 67 0 22 0 87 0 22 0 88 0 22 0 98 0 22 0 99 0 22 0 108 0 22 0 109 0 22 0 111 0 22 0 112 0 22 0 118 0 22 0 124 0 22 0 126 0 22 0 137 4 21 0 139 0 22 0 155 16 33 0 181 4 29 0 182 4 33 0 183 4 33 0 184 4 33 0 185 4 33 0 186] -#[0 9 14 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 98 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 9 18 0 37 0 41 0 57 0 62 0 67 0 87 0 88 0 98 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 126 0 137 0 155 2 100] -#[0 16 37 0 157] -#[0 16 41 0 157] -#[0 16 45 0 157] -#[1 16 49 0 23 9 22 0 148 16 53 2 33 16 57 2 34] -#[1 1 66 0 10 1 70 0 35 1 74 0 37 9 26 0 157] -#[0 16 61 0 157] -#[1 6 157 0 10 9 30 0 157] -#[0 9 34 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 16 65 1 47 16 65 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 16 65 1 63 3 197 1 64 16 65 1 83 16 65 1 86 16 65 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 9 38 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 9 42 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 16 69 1 47 16 69 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 16 69 1 63 3 197 1 64 16 69 1 83 16 69 1 86 16 69 1 87 16 69 1 88 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 9 41 0 157 16 73 1 106] -#[0 9 46 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 16 77 1 47 16 77 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 16 77 1 63 3 197 1 64 16 77 1 83 16 77 1 86 16 77 1 87 16 77 1 89 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 16 81 0 30] -#[1 16 85 0 9 16 89 0 15] -#[0 9 50 0 9 0 15] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 9 54 0 25 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 16 97 1 47 16 97 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 16 97 1 63 3 197 1 64 16 97 1 83 16 97 1 86 16 97 1 87 16 97 1 89 16 97 1 124 16 97 1 125 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 1 193 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 245 0 244 1 197 0 245 1 197 0 247 1 197 0 248 2 5 0 249 2 9 0 250 2 13 0 251 1 193 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 2 49 1 26 2 49 1 27 16 105 1 31 2 61 1 32 2 65 1 33 2 49 1 34 2 73 1 35 1 197 1 49 16 105 1 83 16 105 1 108 1 197 2 70 2 217 2 71 2 49 2 82 1 197 2 83 1 197 2 84 2 49 2 85 1 197 2 86] -#[0 16 109 0 85] -#[0 9 58 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 137 0 25 0 141 0 47 0 145 0 48 3 9 0 49 0 153 0 50 3 13 0 52 3 17 0 55 0 165 0 56 0 173 0 59 3 25 0 60 0 181 0 61 0 185 0 62 0 189 0 64 3 29 0 65 2 217 0 72 0 201 0 75 3 33 0 76 0 209 0 77 0 213 0 78 0 217 0 81 0 221 0 83 3 41 0 86 0 229 0 93 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 0 249 0 116 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 13 0 127 1 17 0 128 1 21 0 129 2 217 0 130 1 29 0 131 1 33 0 133 3 65 0 134 3 69 0 135 1 45 0 136 1 49 0 137 3 77 0 138 1 57 0 139 1 69 0 146 1 73 0 147 1 77 0 148 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 1 193 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 245 0 244 1 197 0 245 1 197 0 247 1 197 0 248 2 5 0 249 2 9 0 250 2 13 0 251 1 193 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 2 49 1 26 2 49 1 27 2 125 1 31 2 61 1 32 2 65 1 33 2 49 1 34 2 73 1 35 1 197 1 49 2 125 1 83 16 113 1 91 16 113 1 92 16 113 1 95 16 113 1 107 2 125 1 108 16 113 1 109 16 113 1 110 16 113 1 111 16 113 1 118 16 113 1 119 16 113 1 120 16 113 1 121 16 113 1 129 16 113 1 130 16 113 1 131 16 113 1 132 16 113 1 133 16 113 1 134 16 113 1 135 16 113 1 136 16 113 1 144 16 113 1 145 16 113 1 146 16 113 1 147 16 113 1 149 1 197 2 70 2 217 2 71 16 113 2 79 2 49 2 82 1 197 2 83 1 197 2 84 2 49 2 85 1 197 2 86 16 113 2 87] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 137 0 25 0 141 0 47 0 145 0 48 3 9 0 49 0 153 0 50 3 13 0 52 3 17 0 55 0 165 0 56 0 173 0 59 3 25 0 60 0 181 0 61 0 185 0 62 0 189 0 64 3 29 0 65 2 217 0 72 0 201 0 75 3 33 0 76 0 209 0 77 0 213 0 78 0 217 0 81 0 221 0 83 3 41 0 86 0 229 0 93 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 0 249 0 116 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 13 0 127 1 17 0 128 1 21 0 129 2 217 0 130 1 29 0 131 1 33 0 133 3 65 0 134 3 69 0 135 1 45 0 136 1 49 0 137 3 77 0 138 1 57 0 139 1 69 0 146 1 73 0 147 1 77 0 148 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 1 193 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 245 0 244 1 197 0 245 1 197 0 247 1 197 0 248 2 5 0 249 2 9 0 250 2 13 0 251 1 193 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 2 49 1 26 2 49 1 27 2 125 1 31 2 61 1 32 2 65 1 33 2 49 1 34 2 73 1 35 1 197 1 49 2 125 1 83 16 117 1 91 16 117 1 92 16 117 1 95 16 117 1 107 2 125 1 108 16 117 1 109 16 117 1 110 16 117 1 111 16 117 1 118 16 117 1 119 16 117 1 120 16 117 1 121 16 117 1 129 16 117 1 130 16 117 1 131 16 117 1 132 16 117 1 133 16 117 1 134 16 117 1 135 16 117 1 136 16 117 1 144 16 117 1 145 16 117 1 146 16 117 1 147 16 117 1 149 1 197 2 70 2 217 2 71 16 117 2 79 2 49 2 82 1 197 2 83 1 197 2 84 2 49 2 85 1 197 2 86 16 117 2 87] -#[0 9 62 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 16 121 0 157] -#[0 9 66 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 9 70 0 15 0 38] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 16 125 1 47 16 125 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 16 125 1 63 3 197 1 64 16 125 1 83 16 125 1 86 16 125 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 16 129 0 35] -#[1 10 229 0 8 16 133 0 20 4 230 0 35 10 153 0 37] -#[0 9 74 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 9 169 0 8 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 16 137 0 155 9 173 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 9 177 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 9 181 0 237 1 197 0 239 9 185 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 9 189 0 248 1 197 0 249 1 197 0 250 1 197 0 251 9 177 1 7 1 197 1 8 1 197 1 9 16 141 1 13 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 9 205 1 30 1 197 1 49 1 197 2 70 2 217 2 71 1 197 2 83 1 197 2 84 1 197 2 86] -#[0 16 145 0 9] -#[1 4 210 0 1 4 210 0 5 4 210 0 8 4 210 0 10 4 210 0 12 4 210 0 13 4 210 0 16 4 210 0 17 4 210 0 47 4 210 0 48 4 210 0 49 4 210 0 52 4 210 0 55 4 210 0 56 4 210 0 60 4 210 0 61 4 210 0 62 4 210 0 65 4 210 0 72 4 210 0 76 4 210 0 79 4 210 0 86 4 210 0 94 4 210 0 97 4 210 0 99 4 210 0 100 4 210 0 104 4 210 0 114 4 210 0 117 4 210 0 121 4 210 0 122 4 210 0 125 4 210 0 128 4 210 0 130 4 210 0 133 4 210 0 134 4 210 0 135 4 210 0 136 4 210 0 138 4 210 0 152 0 239 0 157 4 210 0 158 4 210 0 159 4 210 0 160 4 210 0 161 4 210 0 162 4 210 0 165 4 210 0 166 4 210 0 169 4 210 0 170 16 149 0 222 10 121 0 223 10 125 0 224 10 129 0 225] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 16 153 0 246 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 9 29 1 47 9 29 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 9 29 1 63 3 197 1 64 9 29 1 83 9 29 1 86 9 29 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 0 254 0 2 0 254 0 3 0 254 0 5 0 254 0 6 0 254 0 8 0 254 0 10 0 254 0 12 0 254 0 13 0 254 0 15 0 254 0 16 0 254 0 17 0 254 0 19 0 254 0 20 0 254 0 21 5 253 0 24 0 107 0 26 0 254 0 27 0 254 0 29 9 78 0 30 0 254 0 31 2 202 0 32 0 254 0 33 0 254 0 35 0 254 0 36 0 254 0 37 0 254 0 39 0 254 0 44 0 254 0 90 0 254 0 149 0 254 0 151 0 254 0 153 0 254 0 154 0 254 0 155 6 209 0 217 6 209 0 238] -#[0 16 157 0 155] -#[1 16 161 0 15 9 82 0 155] -#[0 9 86 0 15 0 155] -#[0 16 165 0 30] -#[1 16 169 0 15 16 173 0 155] -#[0 9 90 0 15 0 155] -#[0 9 94 0 15 0 155] -#[0 9 98 0 15 0 25 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 9 102 0 15 0 155] -#[0 9 106 0 15 0 25 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 16 177 0 155] -#[1 16 181 0 15 9 110 0 155] -#[1 13 145 0 15 16 185 0 38] -#[0 16 189 0 9] -#[0 9 114 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 16 193 0 148 16 197 1 112] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 16 201 0 196 16 201 0 197 16 201 0 198 16 201 0 199 1 145 0 200 1 145 0 201 1 145 0 202 16 201 0 203 1 161 0 204 16 201 0 205 16 201 0 206 16 201 0 207 16 201 0 208 16 201 0 209 1 185 0 210 16 201 0 216 16 201 1 157 16 201 2 80 2 229 2 81 3 1 2 99] -#[1 16 205 0 144 9 118 0 148 16 209 1 141 16 209 1 142] -#[0 9 122 0 144 0 148] -#[0 9 126 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 9 130 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 74 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 9 134 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 16 217 0 157] -#[1 16 221 0 15 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 9 138 0 153 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 10 89 0 196 10 89 0 197 10 89 0 198 10 89 0 199 1 145 0 200 1 145 0 201 1 145 0 202 10 89 0 203 1 161 0 204 10 89 0 205 10 89 0 206 10 89 0 207 10 89 0 208 10 89 0 209 1 185 0 210 10 89 0 216 10 93 0 218 10 97 0 219 16 225 1 18 16 229 1 19 10 89 1 157 10 89 2 80 2 229 2 81 3 1 2 99] -#[0 9 142 0 9 0 20] -#[0 9 146 0 9 0 20] -#[0 9 150 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 9 154 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 16 233 0 157] -#[0 9 158 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 9 162 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 137 0 25 0 141 0 47 0 145 0 48 3 9 0 49 0 153 0 50 3 13 0 52 3 17 0 55 0 165 0 56 0 173 0 59 3 25 0 60 0 181 0 61 0 185 0 62 0 189 0 64 3 29 0 65 2 217 0 72 0 201 0 75 3 33 0 76 0 209 0 77 0 213 0 78 0 217 0 81 0 221 0 83 3 41 0 86 0 229 0 93 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 0 249 0 116 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 13 0 127 1 17 0 128 1 21 0 129 2 217 0 130 1 29 0 131 1 33 0 133 3 65 0 134 3 69 0 135 1 45 0 136 1 49 0 137 3 77 0 138 1 57 0 139 1 69 0 146 1 73 0 147 1 77 0 148 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 1 193 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 245 0 244 1 197 0 245 1 197 0 247 1 197 0 248 2 5 0 249 2 9 0 250 2 13 0 251 1 193 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 2 49 1 26 2 49 1 27 2 125 1 31 2 61 1 32 2 65 1 33 2 49 1 34 2 73 1 35 1 197 1 49 2 125 1 83 16 237 1 91 16 237 1 92 16 237 1 95 16 237 1 107 2 125 1 108 16 237 1 109 16 237 1 110 16 237 1 111 16 237 1 118 16 237 1 119 16 237 1 120 16 237 1 121 16 237 1 129 16 237 1 130 16 237 1 131 16 237 1 132 16 237 1 133 16 237 1 134 16 237 1 135 16 237 1 136 16 237 1 144 16 237 1 145 16 237 1 146 16 237 1 147 16 237 1 149 1 197 2 70 2 217 2 71 16 237 2 79 2 49 2 82 1 197 2 83 1 197 2 84 2 49 2 85 1 197 2 86 16 237 2 87] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 137 0 25 0 141 0 47 0 145 0 48 3 9 0 49 0 153 0 50 3 13 0 52 3 17 0 55 0 165 0 56 0 173 0 59 3 25 0 60 0 181 0 61 0 185 0 62 0 189 0 64 3 29 0 65 2 217 0 72 0 201 0 75 3 33 0 76 0 209 0 77 0 213 0 78 0 217 0 81 0 221 0 83 3 41 0 86 0 229 0 93 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 0 249 0 116 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 13 0 127 1 17 0 128 1 21 0 129 2 217 0 130 1 29 0 131 1 33 0 133 3 65 0 134 3 69 0 135 1 45 0 136 1 49 0 137 3 77 0 138 1 57 0 139 1 69 0 146 1 73 0 147 1 77 0 148 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 1 193 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 245 0 244 1 197 0 245 1 197 0 247 1 197 0 248 2 5 0 249 2 9 0 250 2 13 0 251 1 193 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 2 49 1 26 2 49 1 27 2 125 1 31 2 61 1 32 2 65 1 33 2 49 1 34 2 73 1 35 1 197 1 49 2 125 1 83 16 241 1 91 16 241 1 92 16 241 1 95 16 241 1 107 2 125 1 108 16 241 1 109 16 241 1 110 16 241 1 111 16 241 1 118 16 241 1 119 16 241 1 120 16 241 1 121 16 241 1 129 16 241 1 130 16 241 1 131 16 241 1 132 16 241 1 133 16 241 1 134 16 241 1 135 16 241 1 136 16 241 1 144 16 241 1 145 16 241 1 146 16 241 1 147 16 241 1 149 1 197 2 70 2 217 2 71 16 241 2 79 2 49 2 82 1 197 2 83 1 197 2 84 2 49 2 85 1 197 2 86 16 241 2 87] -#[0 9 166 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 9 170 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 20 0 23 0 25 0 26 0 29 0 31 0 32 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 10 89 0 196 10 89 0 197 10 89 0 198 10 89 0 199 1 145 0 200 1 145 0 201 1 145 0 202 10 89 0 203 1 161 0 204 10 89 0 205 10 89 0 206 10 89 0 207 10 89 0 208 10 89 0 209 1 185 0 210 10 89 0 216 16 245 0 219 10 89 1 157 10 89 2 80 2 229 2 81 3 1 2 99] -#[0 9 174 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 9 178 0 2 0 5 0 6 0 8 0 9 0 10 0 15 0 20 0 23 0 25 0 26 0 29 0 31 0 32 0 33 0 35 0 36 0 37 0 38 0 39 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 102 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 148 0 149 0 151 0 152 0 153 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 9 182 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 47 0 48 0 49 0 52 0 55 0 56 0 60 0 61 0 62 0 65 0 72 0 76 0 79 0 86 0 94 0 97 0 99 0 100 0 104 0 114 0 117 0 121 0 122 0 125 0 128 0 130 0 133 0 134 0 135 0 136 0 138 0 152 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170] -#[0 9 186 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 4 210 0 1 4 210 0 5 4 210 0 8 4 210 0 10 4 210 0 12 4 210 0 13 4 210 0 16 4 210 0 17 4 210 0 47 4 210 0 48 4 210 0 49 4 210 0 52 4 210 0 55 4 210 0 56 4 210 0 60 4 210 0 61 4 210 0 62 4 210 0 65 4 210 0 72 4 210 0 76 4 210 0 79 4 210 0 86 4 210 0 94 4 210 0 97 4 210 0 99 4 210 0 100 4 210 0 104 4 210 0 114 4 210 0 117 4 210 0 121 4 210 0 122 4 210 0 125 4 210 0 128 4 210 0 130 4 210 0 133 4 210 0 134 4 210 0 135 4 210 0 136 4 210 0 138 4 210 0 152 0 239 0 157 4 210 0 158 4 210 0 159 4 210 0 160 4 210 0 161 4 210 0 162 4 210 0 165 4 210 0 166 4 210 0 169 4 210 0 170 16 249 0 223 10 125 0 224 10 129 0 225] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 16 253 0 220 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 16 253 1 47 16 253 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 16 253 1 63 3 197 1 64 16 253 1 83 16 253 1 86 16 253 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 17 5 0 220 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 17 5 1 47 17 5 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 17 5 1 63 3 197 1 64 17 5 1 83 17 5 1 86 17 5 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 9 190 0 9 0 15 0 38] -#[0 9 194 0 9 0 15 0 38] -#[0 9 198 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 17 9 0 157] -#[1 4 210 0 1 4 210 0 5 4 210 0 8 4 210 0 10 4 210 0 12 4 210 0 13 4 210 0 16 4 210 0 17 4 210 0 47 4 210 0 48 4 210 0 49 4 210 0 52 4 210 0 55 4 210 0 56 4 210 0 60 4 210 0 61 4 210 0 62 4 210 0 65 4 210 0 72 4 210 0 76 4 210 0 79 4 210 0 86 4 210 0 94 4 210 0 97 4 210 0 99 4 210 0 100 4 210 0 104 4 210 0 114 4 210 0 117 4 210 0 121 4 210 0 122 4 210 0 125 4 210 0 128 4 210 0 130 4 210 0 133 4 210 0 134 4 210 0 135 4 210 0 136 4 210 0 138 4 210 0 152 0 239 0 157 4 210 0 158 4 210 0 159 4 210 0 160 4 210 0 161 4 210 0 162 4 210 0 165 4 210 0 166 4 210 0 169 4 210 0 170 17 13 0 222 10 121 0 223 10 125 0 224 10 129 0 225] -#[0 17 17 0 9] -#[1 0 254 0 2 0 254 0 3 0 254 0 4 0 254 0 5 0 254 0 6 0 254 0 7 0 254 0 8 0 254 0 9 0 254 0 10 0 254 0 11 0 254 0 12 0 254 0 14 0 254 0 15 0 254 0 16 0 254 0 18 0 254 0 20 0 254 0 21 0 254 0 22 0 254 0 23 0 254 0 25 0 107 0 26 0 254 0 27 0 254 0 28 0 254 0 29 0 254 0 30 0 254 0 31 0 254 0 33 0 254 0 34 0 254 0 35 0 254 0 36 0 254 0 37 0 254 0 38 0 254 0 39 0 254 0 40 0 254 0 41 0 254 0 44 0 254 0 45 0 254 0 49 0 254 0 51 0 254 0 52 0 254 0 55 0 254 0 57 0 254 0 58 0 254 0 60 0 254 0 62 0 254 0 63 0 254 0 65 0 254 0 67 0 254 0 68 0 254 0 69 0 254 0 71 0 254 0 75 0 254 0 76 0 254 0 79 0 254 0 82 0 254 0 86 0 254 0 87 0 254 0 88 0 254 0 89 0 254 0 90 0 254 0 91 0 254 0 92 0 254 0 94 0 254 0 99 0 254 0 100 0 254 0 101 0 254 0 103 0 254 0 105 0 254 0 108 0 254 0 109 0 254 0 111 0 254 0 112 0 254 0 113 0 254 0 117 0 254 0 118 0 254 0 119 0 254 0 121 0 254 0 124 0 254 0 125 0 254 0 126 0 254 0 134 0 254 0 135 0 254 0 137 0 254 0 138 0 254 0 141 0 254 0 142 0 254 0 143 0 254 0 145 0 254 0 149 0 254 0 150 0 254 0 151 0 254 0 152 0 254 0 153 0 254 0 154 0 254 0 155 0 254 0 157 0 254 0 163 0 254 0 164 0 254 0 167 0 254 0 168 17 21 0 217 17 21 0 238 0 254 2 100] -#[1 14 165 0 15 17 25 0 38] -#[0 9 202 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 9 206 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 9 210 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 17 29 0 233 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 10 173 1 47 10 173 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 10 173 1 63 3 197 1 64 10 173 1 83 10 173 1 86 10 173 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 17 33 1 47 17 33 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 17 33 1 63 3 197 1 64 17 33 1 83 17 33 1 86 17 33 1 87 17 33 1 88 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 17 37 0 233 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 10 173 1 47 10 173 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 10 173 1 63 3 197 1 64 10 173 1 83 10 173 1 86 10 173 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 9 214 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 9 218 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 9 222 0 9 0 15 0 25] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 9 65 0 196 9 65 0 197 9 65 0 198 9 65 0 199 1 145 0 200 1 145 0 201 1 145 0 202 9 65 0 203 1 161 0 204 9 65 0 205 9 65 0 206 9 65 0 207 9 65 0 208 9 65 0 209 1 185 0 210 9 65 0 216 9 65 1 157 9 65 2 80 17 41 2 81 3 1 2 99] -#[0 9 226 0 9 0 15 0 25] -#[0 9 230 0 9 0 15 0 25] -#[0 9 234 0 9 0 15 0 25] -#[0 9 238 0 9 0 15 0 25] -#[0 9 242 0 9 0 15] -#[0 9 246 0 9 0 15] -#[0 2 202 0 9 0 15] -#[0 9 250 0 9 0 15] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 17 45 1 47 17 45 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 17 45 1 63 3 197 1 64 17 45 1 83 17 45 1 86 17 45 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 17 49 0 9] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 17 53 1 47 17 53 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 17 53 1 63 3 197 1 64 17 53 1 83 17 53 1 86 17 53 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 17 57 0 85] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 17 61 1 47 17 61 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 17 61 1 63 3 197 1 64 17 61 1 83 17 61 1 86 17 61 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 11 97 1 47 11 97 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 11 97 1 63 3 197 1 64 17 65 1 75 11 97 1 83 11 97 1 86 11 97 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 9 254 0 15 0 79 0 82 0 91 0 92 0 103 0 119 0 145] -#[0 10 2 0 15 0 79 0 82 0 91 0 92 0 103 0 119 0 145] -#[0 10 6 0 15 0 79 0 82 0 91 0 92 0 103 0 119 0 145] -#[0 10 10 0 15 0 79 0 82 0 91 0 92 0 103 0 119 0 145] -#[0 17 69 0 51] -#[0 10 14 0 9 0 15 0 23 0 25 0 37 0 38 0 41 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 152 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 17 73 0 157] -#[0 10 18 0 9 0 15 0 23 0 25 0 37 0 38 0 41 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 152 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 10 22 0 9 0 15 0 23 0 25 0 37 0 38 0 41 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 152 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 10 26 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 10 30 0 157] -#[0 10 34 0 157] -#[1 1 66 0 10 1 70 0 35 1 74 0 37 17 77 0 157 17 81 1 177 17 85 1 178] -#[1 10 38 0 15 10 38 0 25 17 89 0 30] -#[1 17 93 0 15 17 97 0 25] -#[0 10 42 0 15 0 25] -#[1 15 117 0 157 1 125 0 191 15 125 0 193 1 125 0 194 15 125 0 208 17 101 1 192] -#[1 10 46 0 8 0 254 0 20 5 253 0 24 2 151 0 26 10 46 0 32 10 46 0 148 9 37 0 217 9 37 0 238] -#[0 1 46 0 15 0 20 0 25 0 32 0 145 0 148] -#[0 17 105 0 20] -#[1 17 109 0 32 17 113 0 148 17 117 1 207] -#[1 1 66 0 10 1 70 0 35 1 74 0 37 17 121 0 157 1 125 0 191 15 125 0 193 1 125 0 194 15 125 0 208 17 125 1 183 15 109 1 184 17 129 1 192] -#[0 17 133 0 37] -#[0 17 137 0 20] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 17 141 1 47 17 141 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 17 141 1 63 3 197 1 64 17 141 1 83 17 141 1 86 17 141 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 0 49 0 37 0 10 0 80 0 10 0 88 0 10 0 109 0 10 0 111 0 10 0 120 17 145 1 210 17 149 1 212 17 153 1 214 17 157 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[0 10 50 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 17 161 0 196 17 161 0 197 17 161 0 198 17 161 0 199 1 145 0 200 1 145 0 201 1 145 0 202 17 161 0 203 1 161 0 204 17 161 0 205 17 161 0 206 17 161 0 207 17 161 0 208 17 161 0 209 1 185 0 210 17 161 0 216 17 161 1 157 17 161 2 80 2 229 2 81 3 1 2 99] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 17 165 0 196 17 165 0 197 17 165 0 198 17 165 0 199 1 145 0 200 1 145 0 201 1 145 0 202 17 165 0 203 1 161 0 204 17 165 0 205 17 165 0 206 17 165 0 207 17 165 0 208 17 165 0 209 1 185 0 210 17 165 0 216 17 165 1 157 17 165 2 80 2 229 2 81 3 1 2 99] -#[1 18 1 0 1 18 5 0 2 18 5 0 3 18 5 0 5 18 5 0 10 17 189 0 12 18 1 0 13 17 197 0 16 18 1 0 17 18 5 0 21 18 5 0 26 18 5 0 27 18 5 0 29 18 5 0 31 18 5 0 33 18 5 0 39 18 1 0 72 18 1 0 130 18 5 0 149 18 1 0 152 18 5 0 153 18 5 0 154 18 1 1 236 18 5 1 238] -#[0 10 54 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 18 9 1 47 18 9 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 18 9 1 63 3 197 1 64 18 9 1 83 18 9 1 86 18 9 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 10 58 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 10 62 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[1 10 66 0 9 0 49 0 37 0 10 0 49 0 10 0 52 0 10 0 55 0 10 0 60 0 10 0 65 0 10 0 76 0 10 0 86 0 10 0 94 0 10 0 100 0 10 0 104 0 10 0 107 0 10 0 114 0 10 0 117 0 10 0 121 0 10 0 125 0 10 0 128 0 10 0 134 0 10 0 135 0 10 0 138 0 10 0 142 0 10 0 157 18 13 1 194 18 17 1 195 18 21 1 196 18 25 1 197 18 29 1 202 18 33 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[0 10 70 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 10 74 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 10 78 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 18 37 0 9] -#[0 10 82 0 157] -#[0 10 86 0 157] -#[0 18 41 0 157] -#[0 10 90 0 157] -#[0 10 94 0 157] -#[0 18 45 0 157] -#[0 10 98 0 37 0 41 0 57 0 62 0 67 0 87 0 88 0 98 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 126 0 137 0 139 0 155 2 100] -#[1 6 13 0 20 18 49 0 25] -#[1 18 53 0 15 18 57 0 38] -#[0 10 102 0 157] -#[0 10 106 0 37 0 41 0 57 0 62 0 67 0 87 0 88 0 98 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 126 0 137 0 155 2 100] -#[0 10 110 0 37 0 41 0 42 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 80 0 85 0 86 0 87 0 88 0 94 0 99 0 100 0 104 0 105 0 107 0 108 0 109 0 111 0 112 0 113 0 114 0 115 0 117 0 118 0 120 0 121 0 124 0 125 0 126 0 128 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 157] -#[0 10 114 0 15 0 38] -#[1 0 254 0 2 0 254 0 3 0 254 0 4 0 254 0 5 0 254 0 6 0 254 0 7 0 254 0 8 0 254 0 9 0 254 0 10 0 254 0 11 0 254 0 12 0 254 0 13 0 254 0 14 0 254 0 15 0 254 0 16 0 254 0 17 0 254 0 18 0 254 0 19 0 254 0 20 0 254 0 21 0 254 0 22 5 253 0 24 0 107 0 26 0 254 0 27 0 254 0 28 0 254 0 29 2 155 0 30 0 254 0 31 2 202 0 32 0 254 0 33 0 254 0 34 0 254 0 35 0 254 0 36 0 254 0 37 0 254 0 39 0 254 0 40 0 254 0 44 0 254 0 90 0 254 0 149 0 254 0 150 0 254 0 151 0 254 0 153 0 254 0 154 6 209 0 217 6 209 0 238] -#[0 10 118 0 9 0 15] -#[0 18 65 0 9] -#[1 10 122 0 9 18 69 0 15] -#[0 10 126 0 9 0 15] -#[1 18 73 0 9 18 77 0 15] -#[0 10 130 0 9 0 15] -#[0 10 134 0 9 0 15] -#[1 0 49 0 37 0 10 0 41 0 10 0 57 0 10 0 62 0 10 0 67 0 10 0 87 0 10 0 88 0 53 0 98 0 10 0 99 0 10 0 108 0 10 0 109 0 10 0 111 0 10 0 112 0 10 0 118 0 10 0 124 0 10 0 126 0 10 0 137 6 238 0 155 13 69 0 175 18 81 0 187 13 65 0 188 13 69 0 189 13 69 0 190 13 69 1 150 13 69 1 252 13 69 2 10 13 69 2 32 13 69 2 42 0 89 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[1 10 138 0 23 18 85 0 26 10 138 0 145 10 138 0 148 18 89 1 154 18 89 1 155] -#[1 10 138 0 23 18 85 0 26 10 138 0 145 10 138 0 148 18 97 1 154 18 97 1 155] -#[1 10 142 0 23 18 101 0 26 10 142 0 145 10 142 0 148 18 105 2 14 18 105 2 15] -#[0 18 113 0 52 0 55 0 86 0 94 0 117 0 121 0 134 0 135 0 138 0 201] -#[1 18 117 0 148 18 121 2 35] -#[0 10 146 0 148] -#[1 10 142 0 8 18 101 0 26 18 125 2 14 18 125 2 15] -#[0 10 150 0 15 0 38 0 155] -#[0 10 154 0 15 0 25] -#[0 10 158 0 15 0 25] -#[0 18 129 0 9] -#[1 0 105 0 1 18 133 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 18 137 1 47 18 137 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 18 137 1 63 3 197 1 64 18 137 1 83 18 137 1 86 18 137 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86 18 141 2 90] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 137 0 25 0 141 0 47 0 145 0 48 3 9 0 49 0 153 0 50 3 13 0 52 3 17 0 55 0 165 0 56 0 173 0 59 3 25 0 60 0 181 0 61 0 185 0 62 0 189 0 64 3 29 0 65 2 217 0 72 0 201 0 75 3 33 0 76 0 209 0 77 0 213 0 78 0 217 0 81 0 221 0 83 3 41 0 86 0 229 0 93 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 0 249 0 116 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 13 0 127 1 17 0 128 1 21 0 129 2 217 0 130 1 29 0 131 1 33 0 133 3 65 0 134 3 69 0 135 1 45 0 136 1 49 0 137 3 77 0 138 1 57 0 139 1 69 0 146 1 73 0 147 1 77 0 148 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 1 193 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 245 0 244 1 197 0 245 1 197 0 247 1 197 0 248 2 5 0 249 2 9 0 250 2 13 0 251 1 193 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 2 49 1 26 2 49 1 27 2 125 1 31 2 61 1 32 2 65 1 33 2 49 1 34 2 73 1 35 1 197 1 49 2 125 1 83 18 145 1 91 18 145 1 92 18 145 1 95 18 145 1 107 2 125 1 108 18 145 1 109 18 145 1 110 18 145 1 111 18 145 1 118 18 145 1 119 18 145 1 120 18 145 1 121 18 145 1 129 18 145 1 130 18 145 1 131 18 145 1 132 18 145 1 133 18 145 1 134 18 145 1 135 18 145 1 136 18 145 1 144 18 145 1 145 18 145 1 146 18 145 1 147 18 145 1 149 1 197 2 70 2 217 2 71 18 145 2 79 2 49 2 82 1 197 2 83 1 197 2 84 2 49 2 85 1 197 2 86 18 145 2 87] -#[1 13 173 0 157 18 149 2 89] -#[0 10 162 0 25] -#[0 18 153 0 25] -#[0 10 166 0 25] -#[0 10 170 0 9 0 15 0 25] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 18 157 1 47 18 157 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 18 157 1 63 3 197 1 64 18 157 1 83 18 157 1 86 18 157 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 10 174 0 1 10 174 0 5 10 174 0 8 10 174 0 10 10 174 0 12 10 174 0 13 10 174 0 16 10 174 0 17 10 174 0 25 10 174 0 47 10 174 0 48 10 174 0 49 10 174 0 50 10 174 0 52 10 174 0 53 10 174 0 55 10 174 0 56 10 174 0 58 10 174 0 59 10 174 0 60 10 174 0 61 10 174 0 62 10 174 0 64 10 174 0 65 2 159 0 66 10 174 0 72 10 174 0 75 10 174 0 76 10 174 0 77 10 174 0 78 10 174 0 81 10 174 0 83 10 174 0 86 10 174 0 93 10 174 0 94 10 174 0 97 10 174 0 99 10 174 0 100 10 174 0 116 10 174 0 117 10 174 0 121 10 174 0 122 10 174 0 125 10 174 0 127 10 174 0 128 10 174 0 129 10 174 0 130 10 174 0 131 10 174 0 133 10 174 0 134 10 174 0 135 10 174 0 136 10 174 0 137 10 174 0 138 10 174 0 139 10 174 0 140 10 174 0 142 10 174 0 146 10 174 0 147 10 174 0 148 10 174 0 152 10 174 0 155 10 174 0 157 10 174 0 158 10 174 0 159 10 174 0 160 10 174 0 161 10 174 0 162 10 174 0 165 10 174 0 166 10 174 0 169 10 174 0 170 10 174 2 100] -#[0 10 178 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[1 0 254 0 9 0 254 0 20 6 1 0 26 18 165 0 217 18 165 0 238] -#[0 10 182 0 15 0 155] -#[1 18 169 0 20 14 193 0 37] -#[0 18 173 0 157] -#[0 10 186 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 10 190 0 15 0 155] -#[1 10 194 0 2 10 194 0 3 10 194 0 4 10 194 0 5 10 194 0 6 10 194 0 7 10 194 0 8 10 194 0 9 10 194 0 10 10 194 0 11 10 194 0 12 10 194 0 13 10 194 0 14 10 194 0 15 10 194 0 16 10 194 0 17 10 194 0 18 10 194 0 19 10 194 0 20 10 194 0 21 10 194 0 22 10 194 0 23 10 194 0 25 10 194 0 26 10 194 0 27 10 194 0 28 10 194 0 29 10 194 0 30 10 194 0 31 10 194 0 33 10 194 0 34 10 194 0 35 10 194 0 36 10 194 0 37 10 194 0 38 10 194 0 39 10 194 0 40 10 194 0 41 10 194 0 44 10 194 0 45 10 194 0 49 10 194 0 51 10 194 0 52 10 194 0 55 10 194 0 57 10 194 0 58 10 194 0 60 10 194 0 62 10 194 0 63 10 194 0 65 10 194 0 67 10 194 0 68 10 194 0 69 10 194 0 71 10 194 0 75 10 194 0 76 10 194 0 79 10 194 0 82 10 194 0 86 10 194 0 87 10 194 0 88 10 194 0 89 10 194 0 90 10 194 0 91 10 194 0 92 10 194 0 94 10 194 0 99 10 194 0 100 10 194 0 101 10 194 0 103 10 194 0 105 10 194 0 108 10 194 0 109 10 194 0 111 10 194 0 112 10 194 0 113 10 194 0 117 10 194 0 118 10 194 0 119 10 194 0 121 10 194 0 124 10 194 0 125 10 194 0 126 10 194 0 134 10 194 0 135 10 194 0 137 10 194 0 138 10 194 0 141 10 194 0 142 10 194 0 143 10 194 0 145 9 213 0 148 10 194 0 149 10 194 0 150 10 194 0 151 10 194 0 152 10 194 0 153 10 194 0 154 10 194 0 155 10 194 0 157 10 194 0 163 10 194 0 164 10 194 0 167 10 194 0 168 18 177 0 252 18 177 0 253 18 177 0 254 18 177 1 4 10 194 2 100] -#[1 14 165 0 15 18 185 0 38] -#[1 13 145 0 15 18 189 0 155] -#[0 10 198 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 13 249 0 37 18 193 0 155 18 197 0 157 18 201 1 1 14 17 1 2] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 9 213 0 148 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 18 209 0 253 18 209 0 254 18 209 1 3 18 209 1 4 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 18 209 1 47 18 209 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 18 209 1 63 3 197 1 64 18 209 1 83 18 209 1 86 18 209 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 13 253 0 148 1 81 0 152 18 217 0 155 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 18 221 1 6 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 125 1 26 3 125 1 27 3 125 1 32 3 125 1 33 3 125 1 34 3 125 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 14 29 1 47 14 29 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 14 29 1 63 3 197 1 64 14 29 1 87 1 197 2 70 2 217 2 71 3 125 2 82 1 197 2 83 1 197 2 84 3 125 2 85 1 197 2 86] -#[0 10 202 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 10 206 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 9 229 0 148 1 81 0 152 18 225 0 155 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 18 229 1 47 18 229 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 18 229 1 63 3 197 1 64 18 229 1 83 18 229 1 86 18 229 1 87 18 229 1 185 18 229 2 7 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 10 210 0 2 10 210 0 3 10 210 0 4 10 210 0 5 10 210 0 6 10 210 0 7 10 210 0 8 10 210 0 9 10 210 0 10 10 210 0 11 10 210 0 12 10 210 0 13 10 210 0 14 10 210 0 15 10 210 0 16 10 210 0 17 10 210 0 18 10 210 0 19 10 210 0 20 10 210 0 21 10 210 0 22 10 210 0 23 10 210 0 25 10 210 0 26 10 210 0 27 10 210 0 28 10 210 0 29 10 210 0 30 10 210 0 31 10 210 0 33 10 210 0 34 10 210 0 35 10 210 0 36 2 163 0 37 10 210 0 38 10 210 0 39 10 210 0 40 10 210 0 41 10 210 0 44 10 210 0 45 10 210 0 49 10 210 0 51 10 210 0 52 10 210 0 55 10 210 0 57 10 210 0 58 10 210 0 60 10 210 0 62 10 210 0 63 10 210 0 65 10 210 0 67 10 210 0 68 10 210 0 69 10 210 0 71 10 210 0 75 10 210 0 76 10 210 0 79 10 210 0 82 10 210 0 86 10 210 0 87 10 210 0 88 10 210 0 89 10 210 0 90 10 210 0 91 10 210 0 92 10 210 0 94 10 210 0 99 10 210 0 100 10 210 0 101 10 210 0 103 10 210 0 105 10 210 0 108 10 210 0 109 10 210 0 111 10 210 0 112 10 210 0 113 10 210 0 117 10 210 0 118 10 210 0 119 10 210 0 121 10 210 0 124 10 210 0 125 10 210 0 126 10 210 0 134 10 210 0 135 10 210 0 137 10 210 0 138 10 210 0 141 10 210 0 142 10 210 0 143 10 210 0 145 10 210 0 148 10 210 0 149 10 210 0 150 10 210 0 151 10 210 0 152 10 210 0 153 10 210 0 154 10 210 0 155 10 210 0 157 10 210 0 163 10 210 0 164 10 210 0 167 10 210 0 168 18 233 0 211 18 237 0 212 6 25 0 213 10 210 2 100] -#[0 10 214 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 18 241 0 53 18 245 0 61 10 218 0 155 18 249 1 113 18 253 1 114 19 1 1 115 19 5 1 116 19 9 1 117] -#[0 10 222 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[1 10 226 0 9 1 66 0 10 1 70 0 35 1 74 0 37 19 17 0 157 19 17 2 76] -#[0 19 21 0 8] -#[1 1 77 0 148 19 25 1 92] -#[0 10 230 0 148] -#[1 2 119 0 9 0 254 0 10 2 119 0 20 14 97 0 26 0 254 0 35 0 254 0 37 14 141 0 217 14 141 0 238 19 29 1 16 14 105 1 17] -#[0 10 234 0 15 0 153] -#[0 19 33 0 153] -#[1 19 37 0 15 10 238 0 153] -#[1 7 210 0 9 7 210 0 20 19 41 0 26 19 45 1 16 14 105 1 17] -#[0 10 242 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 10 246 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 10 250 0 15 0 153] -#[0 10 254 0 9 0 15 0 38] -#[0 11 2 0 9 0 15 0 38] -#[0 11 6 0 9 0 15 0 38] -#[0 11 10 0 9 0 15 0 38] -#[1 0 254 0 2 0 254 0 3 0 254 0 4 0 254 0 5 0 254 0 6 0 254 0 7 0 254 0 8 0 254 0 9 0 254 0 10 0 254 0 11 0 254 0 12 0 254 0 14 0 254 0 15 0 254 0 16 0 254 0 18 0 254 0 20 0 254 0 21 0 254 0 22 0 254 0 23 0 254 0 25 0 107 0 26 0 254 0 27 0 254 0 28 0 254 0 29 0 254 0 30 0 254 0 31 0 254 0 33 0 254 0 34 0 254 0 35 0 254 0 36 0 254 0 37 0 254 0 38 0 254 0 39 0 254 0 40 0 254 0 41 0 254 0 44 0 254 0 45 0 254 0 49 0 254 0 51 0 254 0 52 0 254 0 55 0 254 0 57 0 254 0 58 0 254 0 60 0 254 0 62 0 254 0 63 0 254 0 65 0 254 0 67 0 254 0 68 0 254 0 69 0 254 0 71 0 254 0 75 0 254 0 76 0 254 0 79 0 254 0 82 0 254 0 86 0 254 0 87 0 254 0 88 0 254 0 89 0 254 0 90 0 254 0 91 0 254 0 92 0 254 0 94 0 254 0 99 0 254 0 100 0 254 0 101 0 254 0 103 0 254 0 105 0 254 0 108 0 254 0 109 0 254 0 111 0 254 0 112 0 254 0 113 0 254 0 117 0 254 0 118 0 254 0 119 0 254 0 121 0 254 0 124 0 254 0 125 0 254 0 126 0 254 0 134 0 254 0 135 0 254 0 137 0 254 0 138 0 254 0 141 0 254 0 142 0 254 0 143 0 254 0 145 0 254 0 149 0 254 0 150 0 254 0 151 0 254 0 152 0 254 0 153 0 254 0 154 0 254 0 155 0 254 0 157 0 254 0 163 0 254 0 164 0 254 0 167 0 254 0 168 19 49 0 217 19 49 0 238 0 254 2 100] -#[1 14 165 0 15 19 53 0 38] -#[1 11 14 0 4 11 14 0 7 11 14 0 8 11 18 0 9 11 14 0 11 11 14 0 14 11 18 0 15 11 14 0 18 11 14 0 20 11 14 0 22 11 18 0 25 11 14 0 28 11 14 0 30 11 14 0 34 11 14 0 35 11 14 0 37 11 14 0 40 11 14 0 150] -#[0 11 22 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 11 26 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 11 30 0 163] -#[0 11 34 0 163 0 164 0 167 0 168] -#[0 11 38 0 167] -#[1 6 153 0 10 19 57 0 37] -#[0 11 42 0 79 0 82 0 91 0 92 0 103 0 119 0 145] -#[0 11 14 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 11 46 0 9 0 15 0 23 0 25 0 37 0 38 0 41 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 152 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 19 61 1 47 19 61 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 19 61 1 63 3 197 1 64 19 61 1 83 19 61 1 86 19 61 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 11 50 0 79 0 82 0 91 0 92 0 103 0 119 0 145] -#[0 11 54 0 15 0 79 0 82 0 91 0 92 0 103 0 119 0 145] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 19 65 1 47 19 65 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 19 65 1 63 3 197 1 64 19 65 1 83 19 65 1 86 19 65 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 3 37 0 79 3 22 0 82 7 53 0 91 7 57 0 92 7 61 0 103 3 22 0 119 7 65 0 145 7 69 1 64 19 69 1 65 7 77 1 66 7 81 1 67 7 85 1 68 7 89 1 69 7 93 1 70 7 97 1 71 7 101 1 72 7 105 1 73] -#[0 19 73 0 30] -#[1 19 77 0 15 19 81 0 25] -#[0 11 58 0 15 0 25] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 9 229 0 148 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 19 85 1 47 19 85 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 19 85 1 63 3 197 1 64 19 85 1 83 19 85 1 86 19 85 1 87 19 85 1 185 19 85 2 7 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 15 101 0 157 19 89 1 184] -#[0 11 62 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[1 10 138 0 8 18 85 0 26 19 93 1 154 19 93 1 155] -#[0 19 97 0 157] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 19 101 1 47 19 101 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 19 101 1 63 3 197 1 64 19 101 1 83 19 101 1 86 19 101 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 0 49 0 37 0 10 0 80 0 10 0 88 0 10 0 109 0 10 0 111 0 10 0 120 19 105 1 210 17 149 1 212 17 153 1 214 17 157 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[0 11 66 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[1 10 38 0 15 0 254 0 20 5 253 0 24 10 38 0 25 6 1 0 26 17 89 0 30 10 46 0 148 9 37 0 217 9 37 0 238] -#[1 17 93 0 15 19 109 0 25] -#[0 19 113 0 148] -#[1 0 49 0 37 0 10 0 49 0 10 0 52 0 10 0 55 0 10 0 60 0 10 0 65 0 10 0 76 0 10 0 86 0 10 0 94 0 10 0 100 0 10 0 104 0 10 0 107 0 10 0 114 0 10 0 117 0 10 0 121 0 10 0 125 0 10 0 128 0 10 0 134 0 10 0 135 0 10 0 138 0 10 0 142 0 10 0 157 19 117 1 195 18 21 1 196 18 25 1 197 18 29 1 202 18 33 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[0 19 121 0 128] -#[0 19 125 0 25] -#[0 19 129 0 155] -#[1 0 49 0 37 0 10 0 88 0 10 0 109 0 10 0 111 0 10 0 120 11 70 0 155 19 133 1 213 19 133 1 214 19 141 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[1 0 49 0 37 0 10 0 80 0 10 0 88 0 10 0 109 0 10 0 111 11 74 0 155 19 145 1 211 19 145 1 212 19 153 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[1 11 78 0 80 19 157 0 88 19 161 0 109 19 165 0 111 11 78 0 120 19 169 1 215 19 173 1 216] -#[1 19 177 0 8 1 66 0 10 1 70 0 35 1 74 0 37] -#[1 19 181 0 8 1 66 0 10 1 70 0 35 1 74 0 37] -#[0 11 82 0 8] -#[0 11 86 0 8] -#[0 11 90 0 8] -#[0 11 94 0 8] -#[0 11 98 0 8] -#[0 2 167 0 8] -#[0 11 110 0 8] -#[0 2 171 0 8] -#[0 11 122 0 8] -#[0 11 126 0 8] -#[0 11 130 0 8] -#[0 11 134 0 8] -#[0 11 138 0 8] -#[0 11 142 0 8] -#[0 11 146 0 8] -#[0 11 150 0 8] -#[0 11 154 0 8] -#[0 11 158 0 8] -#[0 11 162 0 8] -#[0 11 166 0 8] -#[0 11 170 0 8] -#[0 11 174 0 8] -#[0 19 185 0 8] -#[0 19 189 0 8] -#[0 19 193 0 25] -#[0 19 197 0 9] -#[0 11 178 0 9] -#[1 11 182 0 9 19 201 0 15 11 182 0 38] -#[0 11 186 0 9 0 15 0 38] -#[0 11 190 0 9 0 38] -#[1 11 194 0 49 11 194 0 52 11 194 0 55 11 194 0 60 11 194 0 65 11 194 0 76 11 194 0 86 11 194 0 94 11 194 0 100 19 221 0 104 19 209 0 107 19 221 0 114 11 194 0 117 11 194 0 121 11 194 0 125 19 221 0 128 11 194 0 134 11 194 0 135 11 194 0 138 11 194 0 142 11 194 0 157 19 221 1 200 19 221 1 201] -#[1 19 229 0 25 1 77 0 148 19 233 1 92 19 237 1 251] -#[0 19 241 0 8] -#[0 19 245 0 8] -#[0 11 198 0 37 0 41 0 57 0 62 0 67 0 87 0 88 0 98 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 126 0 137 0 139 0 155 2 100] -#[1 19 249 0 38 8 73 0 157 1 125 0 191 8 89 0 193 1 125 0 194 15 253 2 60 8 89 2 61] -#[0 11 202 0 37 0 41 0 57 0 62 0 67 0 87 0 88 0 98 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 126 0 137 2 100] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 19 253 1 47 19 253 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 19 253 1 63 3 197 1 64 19 253 1 83 19 253 1 86 19 253 1 87 19 253 2 69 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 11 206 0 15 0 38] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 16 1 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 20 1 1 47 20 1 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 20 1 1 63 3 197 1 64 20 1 1 83 20 1 1 86 20 1 1 87 20 1 2 66 20 5 2 67 16 25 2 68 20 1 2 69 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 11 210 0 15 0 38] -#[1 20 9 0 157 20 13 2 68] -#[0 20 17 0 155] -#[1 0 49 0 37 0 10 0 157 20 21 1 156 20 25 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[1 20 29 0 23 11 214 0 145 11 214 0 148 20 33 1 158 20 37 1 159] -#[0 11 218 0 8 0 23 0 145 0 148] -#[1 20 41 0 23 11 222 0 145 11 222 0 148 20 45 2 0 20 49 2 1] -#[1 0 49 0 37 0 10 0 85 0 10 0 104 0 10 0 157 20 53 2 16 20 57 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[1 20 61 0 23 11 226 0 145 11 226 0 148 20 65 2 19 20 69 2 20] -#[0 11 230 0 8 0 23 0 145 0 148] -#[0 11 234 0 148] -#[1 0 49 0 37 11 238 0 155 0 10 0 157 20 73 2 39 20 77 2 40 20 81 2 41 20 85 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[1 20 89 0 25 7 18 0 37 7 18 0 41 7 18 0 49 7 18 0 52 7 18 0 55 7 18 0 57 7 18 0 58 7 18 0 60 7 18 0 62 7 18 0 65 7 18 0 67 7 18 0 69 7 18 0 71 7 18 0 75 7 18 0 76 7 18 0 86 7 18 0 87 7 18 0 88 7 18 0 94 7 18 0 98 7 18 0 99 7 18 0 100 7 18 0 105 7 18 0 108 7 18 0 109 7 18 0 111 7 18 0 112 7 18 0 113 7 18 0 117 7 18 0 118 7 18 0 121 7 18 0 124 7 18 0 125 7 18 0 126 7 18 0 134 7 18 0 135 7 18 0 137 7 18 0 138 7 18 0 141 7 18 0 142 7 18 0 143 7 18 0 152 7 18 0 155 7 18 0 157 20 89 2 72 7 18 2 100] -#[0 20 93 0 8] -#[0 20 97 0 25] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 20 101 0 220 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 20 105 1 26 20 105 1 27 20 105 1 32 20 105 1 33 20 105 1 34 20 105 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 20 101 1 47 20 101 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 20 101 1 63 3 197 1 64 20 101 1 83 20 101 1 86 20 101 1 87 1 197 2 70 2 217 2 71 20 105 2 82 1 197 2 83 1 197 2 84 20 105 2 85 1 197 2 86] -#[0 11 242 0 9 0 15] -#[0 11 246 0 9 0 15] -#[0 11 250 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 11 254 0 9 0 15] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 12 2 0 9 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 1 193 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 245 0 244 1 197 0 245 1 197 0 247 1 197 0 248 2 5 0 249 2 9 0 250 2 13 0 251 1 193 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 2 49 1 26 2 49 1 27 9 81 1 31 2 61 1 32 2 65 1 33 2 49 1 34 2 73 1 35 1 197 1 49 9 81 1 83 9 81 1 108 20 109 1 126 20 109 1 127 20 117 1 128 1 197 2 70 2 217 2 71 2 49 2 82 1 197 2 83 1 197 2 84 2 49 2 85 1 197 2 86] -#[0 20 121 0 9] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 137 0 25 0 141 0 47 0 145 0 48 3 9 0 49 0 153 0 50 3 13 0 52 3 17 0 55 0 165 0 56 0 173 0 59 3 25 0 60 0 181 0 61 0 185 0 62 0 189 0 64 3 29 0 65 2 217 0 72 0 201 0 75 3 33 0 76 0 209 0 77 0 213 0 78 0 217 0 81 0 221 0 83 3 41 0 86 0 229 0 93 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 0 249 0 116 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 13 0 127 1 17 0 128 1 21 0 129 2 217 0 130 1 29 0 131 1 33 0 133 3 65 0 134 3 69 0 135 1 45 0 136 1 49 0 137 3 77 0 138 1 57 0 139 1 69 0 146 1 73 0 147 1 77 0 148 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 1 193 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 245 0 244 1 197 0 245 1 197 0 247 1 197 0 248 2 5 0 249 2 9 0 250 2 13 0 251 1 193 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 2 49 1 26 2 49 1 27 2 125 1 31 2 61 1 32 2 65 1 33 2 49 1 34 2 73 1 35 1 197 1 49 2 125 1 83 20 125 1 91 20 125 1 92 20 125 1 95 20 125 1 107 2 125 1 108 20 125 1 109 20 125 1 110 20 125 1 111 20 125 1 118 20 125 1 119 20 125 1 120 20 125 1 121 20 125 1 129 20 125 1 130 20 125 1 131 20 125 1 132 20 125 1 133 20 125 1 134 20 125 1 135 20 125 1 136 20 125 1 144 20 125 1 145 20 125 1 146 20 125 1 147 20 125 1 149 1 197 2 70 2 217 2 71 20 125 2 79 2 49 2 82 1 197 2 83 1 197 2 84 2 49 2 85 1 197 2 86 20 125 2 87] -#[0 12 6 0 9 0 20] -#[0 20 129 0 157] -#[1 0 254 0 8 0 254 0 15 0 254 0 20 6 1 0 26 0 254 0 35 0 254 0 37 0 254 0 155 20 133 0 217 20 133 0 238] -#[0 12 10 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 12 14 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 12 18 0 30] -#[0 12 22 0 15 0 155] -#[0 12 26 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 9 78 0 30] -#[0 12 30 0 15 0 155] -#[0 12 34 0 15 0 155] -#[0 12 38 0 15 0 155] -#[0 12 42 0 15 0 155] -#[0 12 46 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 12 50 0 15 0 155] -#[0 12 54 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 12 58 0 15 0 155] -#[1 12 62 0 2 12 62 0 3 12 62 0 4 12 62 0 5 12 62 0 6 12 62 0 7 12 62 0 8 12 62 0 9 12 62 0 10 12 62 0 11 12 62 0 12 12 62 0 13 12 62 0 14 12 62 0 15 12 62 0 16 12 62 0 17 12 62 0 18 12 62 0 19 12 62 0 20 12 62 0 21 12 62 0 22 12 62 0 23 12 62 0 25 12 62 0 26 12 62 0 27 12 62 0 28 12 62 0 29 12 62 0 30 12 62 0 31 12 62 0 33 12 62 0 34 12 62 0 35 12 62 0 36 12 62 0 37 12 62 0 38 12 62 0 39 12 62 0 40 12 62 0 41 12 62 0 44 12 62 0 45 12 62 0 49 12 62 0 51 12 62 0 52 12 62 0 55 12 62 0 57 12 62 0 58 12 62 0 60 12 62 0 62 12 62 0 63 12 62 0 65 12 62 0 67 12 62 0 68 12 62 0 69 12 62 0 71 12 62 0 75 12 62 0 76 12 62 0 79 12 62 0 82 12 62 0 86 12 62 0 87 12 62 0 88 12 62 0 89 12 62 0 90 12 62 0 91 12 62 0 92 12 62 0 94 12 62 0 99 12 62 0 100 12 62 0 101 12 62 0 103 12 62 0 105 12 62 0 108 12 62 0 109 12 62 0 111 12 62 0 112 12 62 0 113 12 62 0 117 12 62 0 118 12 62 0 119 12 62 0 121 12 62 0 124 12 62 0 125 12 62 0 126 12 62 0 134 12 62 0 135 12 62 0 137 12 62 0 138 12 62 0 141 12 62 0 142 12 62 0 143 12 62 0 145 9 229 0 148 12 62 0 149 12 62 0 150 12 62 0 151 12 62 0 152 12 62 0 153 12 62 0 154 12 62 0 155 12 62 0 157 12 62 0 163 12 62 0 164 12 62 0 167 12 62 0 168 20 137 2 6 20 137 2 7 12 62 2 100] -#[1 12 66 0 2 12 66 0 3 12 66 0 4 12 66 0 5 12 66 0 6 12 66 0 7 12 66 0 8 12 66 0 9 12 66 0 10 12 66 0 11 12 66 0 12 12 66 0 13 12 66 0 14 12 66 0 15 12 66 0 16 12 66 0 17 12 66 0 18 12 66 0 19 12 66 0 20 12 66 0 21 12 66 0 22 12 66 0 23 12 66 0 25 12 66 0 26 12 66 0 27 12 66 0 28 12 66 0 29 12 66 0 30 12 66 0 31 12 66 0 33 12 66 0 34 12 66 0 35 12 66 0 36 2 175 0 37 12 66 0 38 12 66 0 39 12 66 0 40 12 66 0 41 12 66 0 44 12 66 0 45 12 66 0 49 12 66 0 51 12 66 0 52 12 66 0 55 12 66 0 57 12 66 0 58 12 66 0 60 12 66 0 62 12 66 0 63 12 66 0 65 12 66 0 67 12 66 0 68 12 66 0 69 12 66 0 71 12 66 0 75 12 66 0 76 12 66 0 79 12 66 0 82 12 66 0 86 12 66 0 87 12 66 0 88 12 66 0 89 12 66 0 90 12 66 0 91 12 66 0 92 12 66 0 94 12 66 0 99 12 66 0 100 12 66 0 101 12 66 0 103 12 66 0 105 12 66 0 108 12 66 0 109 12 66 0 111 12 66 0 112 12 66 0 113 12 66 0 117 12 66 0 118 12 66 0 119 12 66 0 121 12 66 0 124 12 66 0 125 12 66 0 126 12 66 0 134 12 66 0 135 12 66 0 137 12 66 0 138 12 66 0 141 12 66 0 142 12 66 0 143 12 66 0 145 12 66 0 148 12 66 0 149 12 66 0 150 12 66 0 151 12 66 0 152 12 66 0 153 12 66 0 154 12 66 0 155 12 66 0 157 12 66 0 163 12 66 0 164 12 66 0 167 12 66 0 168 10 105 0 213 12 66 2 100] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 20 145 1 47 20 145 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 20 145 1 63 3 197 1 64 20 145 1 83 20 145 1 86 20 145 1 87 20 145 1 88 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 20 149 0 23] -#[0 20 153 0 155] -#[1 18 241 0 53 18 245 0 61 12 70 0 155 20 157 1 115 19 5 1 116 19 9 1 117] -#[0 12 74 0 53 0 61 0 155] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 137 0 25 0 141 0 47 0 145 0 48 0 149 0 49 0 153 0 50 0 157 0 52 18 241 0 53 0 161 0 55 0 165 0 56 0 169 0 58 0 173 0 59 0 177 0 60 20 161 0 61 0 185 0 62 0 189 0 64 0 193 0 65 2 217 0 72 0 201 0 75 0 205 0 76 0 209 0 77 0 213 0 78 0 217 0 81 0 221 0 83 0 225 0 86 0 229 0 93 0 233 0 94 0 237 0 97 0 241 0 99 0 245 0 100 0 249 0 116 0 253 0 117 1 1 0 121 1 5 0 122 1 9 0 125 1 13 0 127 1 17 0 128 1 21 0 129 2 217 0 130 1 29 0 131 1 33 0 133 1 37 0 134 1 41 0 135 1 45 0 136 1 49 0 137 1 53 0 138 1 57 0 139 1 61 0 140 1 65 0 142 1 69 0 146 1 73 0 147 1 77 0 148 1 81 0 152 1 85 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 1 117 0 191 1 121 0 193 1 125 0 194 1 129 0 196 1 129 0 197 1 129 0 198 1 129 0 199 1 145 0 200 1 145 0 201 1 145 0 202 1 129 0 203 1 161 0 204 1 129 0 205 1 129 0 206 1 129 0 207 1 129 0 208 1 129 0 209 1 185 0 210 1 129 0 216 1 193 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 245 0 244 1 197 0 245 1 197 0 247 1 197 0 248 2 5 0 249 2 9 0 250 2 13 0 251 1 193 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 2 49 1 26 2 49 1 27 2 125 1 31 2 61 1 32 2 65 1 33 2 49 1 34 2 73 1 35 1 197 1 49 2 125 1 83 5 233 1 90 5 233 1 91 5 233 1 92 20 165 1 94 5 233 1 95 5 233 1 96 5 233 1 97 2 109 1 98 2 113 1 99 2 117 1 104 5 233 1 107 2 125 1 108 5 233 1 109 5 233 1 110 5 233 1 111 20 169 1 117 5 233 1 118 5 233 1 119 5 233 1 120 5 233 1 121 5 233 1 129 5 233 1 130 5 233 1 131 5 233 1 132 5 233 1 133 5 233 1 134 5 233 1 135 5 233 1 136 5 233 1 144 5 233 1 145 5 233 1 146 5 233 1 147 5 233 1 149 1 129 1 157 1 197 2 70 2 217 2 71 5 233 2 79 1 129 2 80 2 229 2 81 2 49 2 82 1 197 2 83 1 197 2 84 2 49 2 85 1 197 2 86 5 233 2 87 3 1 2 99] -#[0 12 78 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170] -#[0 12 82 0 9] -#[0 20 173 0 9] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 20 177 1 47 20 177 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 20 177 1 63 3 197 1 64 20 177 1 83 20 177 1 86 20 177 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 12 86 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 74 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 12 90 0 9 0 20] -#[0 12 94 0 9 0 20] -#[0 12 98 0 15 0 153] -#[1 16 221 0 15 9 138 0 153 16 225 1 18 16 229 1 19] -#[0 12 102 0 9 0 20] -#[0 12 106 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 12 110 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 20 181 1 47 20 181 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 20 181 1 63 3 197 1 64 20 181 1 83 20 181 1 86 20 181 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 20 185 0 101] -#[0 12 114 0 9 0 15 0 23 0 25 0 37 0 38 0 41 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 152 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 12 118 0 9 0 15 0 23 0 25 0 37 0 38 0 41 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 152 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 20 189 1 47 20 189 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 20 189 1 63 3 197 1 64 20 189 1 83 20 189 1 86 20 189 1 87 20 189 1 88 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 17 77 0 157 20 193 1 178] -#[0 12 122 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 12 126 0 15 0 25] -#[0 12 130 0 15 0 25] -#[0 20 197 0 8] -#[0 12 134 0 8 0 26 0 32 0 148] -#[0 20 201 0 25] -#[0 20 205 0 155] -#[0 12 138 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[1 0 49 0 37 0 10 0 42 0 10 0 115 20 209 1 222 20 213 1 223 20 217 1 224 20 221 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[0 20 225 0 38] -#[0 20 229 0 37] -#[0 12 142 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 12 146 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 12 150 0 155] -#[0 12 154 0 155] -#[1 19 157 0 88 19 161 0 109 19 165 0 111 11 78 0 120 20 233 1 215 19 173 1 216] -#[0 12 158 0 155] -#[0 12 162 0 155] -#[1 11 78 0 80 19 157 0 88 19 161 0 109 19 165 0 111 20 237 1 215 19 173 1 216] -#[1 12 166 0 80 20 241 0 111 12 166 0 120] -#[0 12 170 0 80 0 120] -#[1 12 174 0 80 20 245 0 88 12 174 0 120] -#[1 20 249 0 80 20 253 0 120] -#[0 12 178 0 80 0 120] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 21 1 0 196 21 1 0 197 21 1 0 198 21 1 0 199 1 145 0 200 1 145 0 201 1 145 0 202 21 1 0 203 1 161 0 204 21 1 0 205 21 1 0 206 21 1 0 207 21 1 0 208 21 1 0 209 1 185 0 210 21 1 0 216 21 1 1 157 21 1 2 80 2 229 2 81 3 1 2 99] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 21 5 0 196 21 5 0 197 21 5 0 198 21 5 0 199 1 145 0 200 1 145 0 201 1 145 0 202 21 5 0 203 1 161 0 204 21 5 0 205 21 5 0 206 21 5 0 207 21 5 0 208 21 5 0 209 1 185 0 210 21 5 0 216 21 5 1 157 21 5 2 80 2 229 2 81 3 1 2 99] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 21 9 0 196 21 9 0 197 21 9 0 198 21 9 0 199 1 145 0 200 1 145 0 201 1 145 0 202 21 9 0 203 1 161 0 204 21 9 0 205 21 9 0 206 21 9 0 207 21 9 0 208 21 9 0 209 1 185 0 210 21 9 0 216 21 9 1 157 21 9 2 80 2 229 2 81 3 1 2 99] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 21 13 0 196 21 13 0 197 21 13 0 198 21 13 0 199 1 145 0 200 1 145 0 201 1 145 0 202 21 13 0 203 1 161 0 204 21 13 0 205 21 13 0 206 21 13 0 207 21 13 0 208 21 13 0 209 1 185 0 210 21 13 0 216 21 13 1 157 21 13 2 80 2 229 2 81 3 1 2 99] -#[0 12 182 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[1 21 17 0 23 12 186 0 25 12 186 0 148 21 21 1 246 21 21 1 247] -#[1 0 49 0 37 0 10 0 49 0 10 0 52 0 10 0 55 0 10 0 60 0 10 0 65 0 10 0 76 0 10 0 86 0 10 0 94 0 10 0 100 0 10 0 104 0 10 0 107 0 10 0 114 0 10 0 117 0 10 0 121 0 10 0 125 0 10 0 128 0 10 0 134 0 10 0 135 0 10 0 138 0 10 0 142 0 10 0 157 21 29 1 197 21 33 1 202 18 33 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[0 12 190 0 49 0 52 0 55 0 60 0 65 0 76 0 86 0 94 0 100 0 117 0 121 0 125 0 134 0 135 0 138 0 142 0 157] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 9 65 0 196 9 65 0 197 9 65 0 198 9 65 0 199 1 145 0 200 1 145 0 201 1 145 0 202 9 65 0 203 1 161 0 204 9 65 0 205 9 65 0 206 9 65 0 207 9 65 0 208 21 37 0 209 1 185 0 210 9 65 0 216 9 65 1 157 9 65 2 80 2 229 2 81 3 1 2 99] -#[0 12 194 0 49 0 52 0 55 0 60 0 65 0 76 0 86 0 94 0 100 0 117 0 121 0 125 0 134 0 135 0 138 0 142 0 157] -#[0 12 198 0 49 0 52 0 55 0 60 0 65 0 76 0 86 0 94 0 100 0 117 0 121 0 125 0 134 0 135 0 138 0 142 0 157] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 21 41 0 196 21 41 0 197 21 41 0 198 21 41 0 199 1 145 0 200 1 145 0 201 1 145 0 202 21 41 0 203 1 161 0 204 21 41 0 205 21 41 0 206 21 41 0 207 21 41 0 208 21 41 0 209 1 185 0 210 21 41 0 216 21 41 1 157 21 41 2 80 2 229 2 81 3 1 2 99] -#[0 12 202 0 49 0 52 0 55 0 60 0 65 0 76 0 86 0 94 0 100 0 117 0 121 0 125 0 134 0 135 0 138 0 142 0 157] -#[0 12 206 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 12 210 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 12 214 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 21 45 0 9] -#[0 21 49 0 9] -#[0 12 218 0 37 0 41 0 57 0 62 0 67 0 87 0 88 0 98 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 126 0 137 2 100] -#[0 12 222 0 9 0 15] -#[0 12 226 0 9 0 15] -#[1 21 53 0 9 18 77 0 15] -#[0 18 61 0 30] -#[0 12 230 0 9 0 15] -#[0 12 234 0 25 0 37 0 41 0 57 0 62 0 67 0 87 0 88 0 98 0 99 0 108 0 109 0 111 0 112 0 118 0 124 0 126 0 137 0 155 2 100] -#[1 21 57 0 15 21 61 0 153] -#[1 21 65 0 157 21 69 1 157] -#[1 5 45 0 100 5 57 0 125 8 73 0 157 1 125 0 191 21 73 0 193 1 125 0 194 21 77 0 207 21 81 0 208 21 85 1 160] -#[1 21 89 0 145 12 238 0 148 21 93 1 161 21 97 1 162 21 101 1 163] -#[0 12 242 0 145 0 148] -#[1 8 73 0 157 1 125 0 191 21 81 0 193 1 125 0 194 21 81 0 208 21 105 1 160] -#[1 21 89 0 145 12 238 0 148 21 109 1 161 21 97 1 162 21 101 1 163] -#[0 12 246 0 145 0 148] -#[1 21 113 0 15 21 117 0 153] -#[1 21 129 0 85 21 129 0 104 12 250 0 157 21 129 2 17 21 129 2 18] -#[1 8 73 0 157 1 125 0 191 21 81 0 193 1 125 0 194 21 81 0 208 21 137 1 160] -#[1 21 89 0 145 12 238 0 148 21 141 1 161 21 97 1 162 21 101 1 163] -#[0 12 254 0 145 0 148] -#[0 21 145 0 155] -#[1 21 149 0 15 13 2 0 155] -#[0 13 6 0 15 0 155] -#[0 21 153 0 157] -#[0 13 10 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 98 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[1 10 66 0 9 0 49 0 37 0 10 0 49 0 10 0 52 0 10 0 55 0 10 0 60 0 10 0 65 0 10 0 76 0 10 0 86 0 10 0 94 0 10 0 100 0 10 0 104 0 10 0 107 0 10 0 114 0 10 0 117 0 10 0 121 0 10 0 125 0 10 0 128 0 10 0 134 0 10 0 135 0 10 0 138 0 10 0 142 0 10 0 157 21 157 1 194 18 17 1 195 18 21 1 196 18 25 1 197 18 29 1 202 18 33 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[0 13 14 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 13 18 0 9 0 15] -#[1 2 179 0 2 2 179 0 3 2 183 0 4 2 179 0 5 2 179 0 6 2 187 0 7 2 179 0 9 2 179 0 10 2 191 0 11 2 179 0 12 2 195 0 14 2 179 0 15 2 179 0 16 2 199 0 18 2 179 0 21 2 203 0 22 2 179 0 26 2 179 0 27 2 207 0 28 2 179 0 29 2 211 0 30 2 179 0 31 2 179 0 33 2 215 0 34 2 179 0 35 2 179 0 36 2 179 0 39 2 219 0 40 2 179 0 44 2 179 0 90 2 179 0 149 2 223 0 150 2 179 0 151 2 179 0 153 2 179 0 154 6 121 1 84] -#[0 21 161 0 9] -#[0 13 22 0 9] -#[1 13 26 0 9 13 189 0 15] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 137 0 25 0 141 0 47 0 145 0 48 3 9 0 49 0 153 0 50 3 13 0 52 3 17 0 55 0 165 0 56 0 173 0 59 3 25 0 60 0 181 0 61 0 185 0 62 0 189 0 64 3 29 0 65 2 217 0 72 0 201 0 75 3 33 0 76 0 209 0 77 0 213 0 78 0 217 0 81 0 221 0 83 3 41 0 86 0 229 0 93 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 0 249 0 116 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 13 0 127 1 17 0 128 1 21 0 129 2 217 0 130 1 29 0 131 1 33 0 133 3 65 0 134 3 69 0 135 1 45 0 136 1 49 0 137 3 77 0 138 1 57 0 139 1 69 0 146 1 73 0 147 1 77 0 148 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 1 193 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 245 0 244 1 197 0 245 1 197 0 247 1 197 0 248 2 5 0 249 2 9 0 250 2 13 0 251 1 193 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 2 49 1 26 2 49 1 27 2 125 1 31 2 61 1 32 2 65 1 33 2 49 1 34 2 73 1 35 1 197 1 49 2 125 1 83 21 165 1 91 21 165 1 92 21 165 1 95 21 165 1 107 2 125 1 108 21 165 1 109 21 165 1 110 21 165 1 111 21 165 1 118 21 165 1 119 21 165 1 120 21 165 1 121 21 165 1 129 21 165 1 130 21 165 1 131 21 165 1 132 21 165 1 133 21 165 1 134 21 165 1 135 21 165 1 136 21 165 1 144 21 165 1 145 21 165 1 146 21 165 1 147 21 165 1 149 1 197 2 70 2 217 2 71 21 165 2 79 2 49 2 82 1 197 2 83 1 197 2 84 2 49 2 85 1 197 2 86 21 165 2 87] -#[0 13 30 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[1 0 254 0 8 0 254 0 15 0 254 0 20 6 1 0 26 0 254 0 35 0 254 0 37 0 254 0 155 21 169 0 217 21 169 0 238] -#[1 11 22 0 8 13 34 0 15 11 22 0 20 11 22 0 35 11 22 0 37 13 34 0 155] -#[0 13 38 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 13 42 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 44 0 45 0 49 0 51 0 52 0 55 0 57 0 58 0 60 0 62 0 63 0 65 0 67 0 68 0 69 0 71 0 75 0 76 0 79 0 82 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 99 0 100 0 101 0 103 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 119 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 145 0 149 0 150 0 151 0 152 0 153 0 154 0 155 0 157 0 163 0 164 0 167 0 168 2 100] -#[0 21 173 0 23] -#[0 13 46 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170] -#[0 13 50 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[0 13 54 0 53 0 61 0 155] -#[1 5 89 0 8 20 149 0 23] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 137 0 25 0 141 0 47 0 145 0 48 0 149 0 49 0 153 0 50 0 157 0 52 13 58 0 53 0 161 0 55 0 165 0 56 0 169 0 58 0 173 0 59 0 177 0 60 2 227 0 61 0 185 0 62 0 189 0 64 0 193 0 65 2 217 0 72 0 201 0 75 0 205 0 76 0 209 0 77 0 213 0 78 0 217 0 81 0 221 0 83 0 225 0 86 0 229 0 93 0 233 0 94 0 237 0 97 0 241 0 99 0 245 0 100 0 249 0 116 0 253 0 117 1 1 0 121 1 5 0 122 1 9 0 125 1 13 0 127 1 17 0 128 1 21 0 129 2 217 0 130 1 29 0 131 1 33 0 133 1 37 0 134 1 41 0 135 1 45 0 136 1 49 0 137 1 53 0 138 1 57 0 139 1 61 0 140 1 65 0 142 1 69 0 146 1 73 0 147 1 77 0 148 1 81 0 152 13 58 0 155 1 85 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 1 117 0 191 1 121 0 193 1 125 0 194 1 129 0 196 1 129 0 197 1 129 0 198 1 129 0 199 1 145 0 200 1 145 0 201 1 145 0 202 1 129 0 203 1 161 0 204 1 129 0 205 1 129 0 206 1 129 0 207 1 129 0 208 1 129 0 209 1 185 0 210 1 129 0 216 1 193 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 245 0 244 1 197 0 245 1 197 0 247 1 197 0 248 2 5 0 249 2 9 0 250 2 13 0 251 1 193 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 2 49 1 26 2 49 1 27 2 125 1 31 2 61 1 32 2 65 1 33 2 49 1 34 2 73 1 35 1 197 1 49 2 125 1 83 10 77 1 90 10 77 1 91 10 77 1 92 10 77 1 95 10 77 1 96 10 77 1 97 2 109 1 98 2 113 1 99 2 117 1 104 10 77 1 107 2 125 1 108 10 77 1 109 10 77 1 110 10 77 1 111 10 77 1 118 10 77 1 119 10 77 1 120 10 77 1 121 10 77 1 129 10 77 1 130 10 77 1 131 10 77 1 132 10 77 1 133 10 77 1 134 10 77 1 135 10 77 1 136 10 77 1 144 10 77 1 145 10 77 1 146 10 77 1 147 10 77 1 149 1 129 1 157 1 197 2 70 2 217 2 71 10 77 2 79 1 129 2 80 2 229 2 81 2 49 2 82 1 197 2 83 1 197 2 84 2 49 2 85 1 197 2 86 10 77 2 87 3 1 2 99] -#[0 13 62 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170] -#[0 13 66 0 144 0 148] -#[0 21 177 0 9] -#[0 21 181 0 38] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 21 185 1 47 21 185 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 21 185 1 63 3 197 1 64 21 185 1 83 21 185 1 86 21 185 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 13 70 0 15 0 25] -#[0 13 74 0 15 0 25] -#[1 10 66 0 9 0 49 0 37 0 10 0 49 0 10 0 52 0 10 0 55 0 10 0 60 0 10 0 65 0 10 0 76 0 10 0 86 0 10 0 94 0 10 0 100 0 10 0 104 0 10 0 107 0 10 0 114 0 10 0 117 0 10 0 121 0 10 0 125 0 10 0 128 0 10 0 134 0 10 0 135 0 10 0 138 0 10 0 142 0 10 0 157 21 189 1 194 18 17 1 195 18 21 1 196 18 25 1 197 18 29 1 202 18 33 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[0 13 78 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[1 21 193 0 30 13 82 0 37 13 82 0 41 13 82 0 49 13 82 0 52 13 82 0 55 13 82 0 57 13 82 0 58 13 82 0 60 13 82 0 62 13 82 0 65 13 82 0 67 13 82 0 69 13 82 0 71 13 82 0 75 13 82 0 76 13 82 0 86 13 82 0 87 13 82 0 88 13 82 0 94 13 82 0 99 13 82 0 100 13 82 0 105 13 82 0 108 13 82 0 109 13 82 0 111 13 82 0 112 13 82 0 113 13 82 0 117 13 82 0 118 13 82 0 121 13 82 0 124 13 82 0 125 13 82 0 126 13 82 0 134 13 82 0 135 13 82 0 137 13 82 0 138 13 82 0 141 13 82 0 142 13 82 0 143 13 82 0 152 13 82 0 155 13 82 0 157 21 197 1 208 21 201 1 209 13 82 2 100] -#[0 21 205 0 155] -#[1 0 49 0 37 0 10 0 115 21 209 1 224 21 213 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[1 0 49 0 37 0 10 0 42 21 217 1 223 21 221 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[1 21 225 0 42 21 229 0 115] -#[0 13 86 0 32 0 148] -#[1 0 49 0 37 0 10 0 49 0 10 0 52 0 10 0 55 0 10 0 60 0 10 0 65 0 10 0 76 0 10 0 86 0 10 0 94 0 10 0 100 0 10 0 104 0 10 0 107 0 10 0 114 0 10 0 117 0 10 0 121 0 10 0 125 0 10 0 128 0 10 0 134 0 10 0 135 0 10 0 138 0 10 0 142 0 10 0 157 21 233 1 195 18 21 1 196 18 25 1 197 18 29 1 202 18 33 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[0 20 253 0 120] -#[0 20 249 0 80] -#[0 13 90 0 80 0 120] -#[0 13 94 0 80 0 120] -#[1 21 237 0 25 1 77 0 148 21 241 1 92 21 245 1 217] -#[1 21 237 0 25 1 77 0 148 21 241 1 92 21 249 1 217] -#[1 1 66 0 10 1 70 0 35 1 74 0 37 21 253 0 157] -#[1 1 66 0 10 1 70 0 35 1 74 0 37 22 1 0 157] -#[1 1 66 0 10 1 70 0 35 1 74 0 37 22 5 0 157] -#[1 1 66 0 10 1 70 0 35 1 74 0 37 22 9 0 157] -#[1 22 13 0 48 22 17 0 128] -#[0 13 98 0 25 0 148] -#[0 13 102 0 25 0 148] -#[0 13 106 0 9 0 15 0 38] -#[0 13 110 0 9 0 38] -#[1 1 126 0 10 1 126 0 35 1 126 0 37 22 21 0 157] -#[1 1 66 0 10 1 70 0 35 1 74 0 37 22 25 0 157] -#[1 7 109 0 25 7 113 0 32 1 77 0 148 7 117 1 92 22 29 1 193] -#[1 7 109 0 25 7 113 0 32 1 77 0 148 7 117 1 92 22 33 1 193] -#[0 13 114 0 15 0 38] -#[1 0 49 0 37 0 10 0 157 22 37 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[0 13 118 0 8 0 23 0 145 0 148] -#[0 1 2 0 15 0 23 0 153] -#[0 13 122 0 15 0 153] -#[0 2 231 0 15 0 25 0 32 0 145 0 148] -#[1 22 41 0 15 13 126 0 145 13 126 0 148] -#[0 13 130 0 15 0 145 0 148] -#[1 22 45 0 15 13 134 0 145 13 134 0 148] -#[1 21 65 0 157 22 49 1 157] -#[1 22 53 0 148 22 57 1 169] -#[1 13 138 0 25 13 138 0 32 21 89 0 145 13 138 0 148 22 61 1 163] -#[0 13 142 0 25 0 32 0 145 0 148] -#[1 22 45 0 15 13 146 0 145 13 146 0 148] -#[1 22 65 0 148 22 69 2 2] -#[1 0 49 0 37 0 10 0 85 0 10 0 104 0 10 0 157 22 73 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[0 13 150 0 8 0 23 0 145 0 148] -#[0 13 154 0 157] -#[0 13 158 0 157] -#[1 21 65 0 157 22 77 1 157] -#[0 13 162 0 157] -#[1 22 45 0 15 13 166 0 145 13 166 0 148] -#[1 22 81 0 148 22 85 2 21] -#[0 13 170 0 25 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 98 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[1 0 49 0 37 22 89 0 155 0 10 0 157 22 93 2 41 20 85 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[1 13 174 0 15 22 97 0 30 13 174 0 155] -#[0 22 101 0 9] -#[1 0 105 0 1 0 109 0 5 0 113 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 137 0 25 0 141 0 47 0 145 0 48 3 9 0 49 0 153 0 50 3 13 0 52 3 17 0 55 0 165 0 56 0 173 0 59 3 25 0 60 0 181 0 61 0 185 0 62 0 189 0 64 3 29 0 65 2 217 0 72 0 201 0 75 3 33 0 76 0 209 0 77 0 213 0 78 0 217 0 81 0 221 0 83 3 41 0 86 0 229 0 93 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 0 249 0 116 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 13 0 127 1 17 0 128 1 21 0 129 2 217 0 130 1 29 0 131 1 33 0 133 3 65 0 134 3 69 0 135 1 45 0 136 1 49 0 137 3 77 0 138 1 57 0 139 1 69 0 146 1 73 0 147 1 77 0 148 1 81 0 152 4 201 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 1 193 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 245 0 244 1 197 0 245 1 197 0 247 1 197 0 248 2 5 0 249 2 9 0 250 2 13 0 251 1 193 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 2 49 1 26 2 49 1 27 2 125 1 31 2 61 1 32 2 65 1 33 2 49 1 34 2 73 1 35 1 197 1 49 2 125 1 83 22 105 1 91 22 105 1 92 22 105 1 95 22 105 1 107 2 125 1 108 22 105 1 109 22 105 1 110 22 105 1 111 22 105 1 118 22 105 1 119 22 105 1 120 22 105 1 121 22 105 1 129 22 105 1 130 22 105 1 131 22 105 1 132 22 105 1 133 22 105 1 134 22 105 1 135 22 105 1 136 22 105 1 144 22 105 1 145 22 105 1 146 22 105 1 147 22 105 1 149 1 197 2 70 2 217 2 71 22 105 2 79 2 49 2 82 1 197 2 83 1 197 2 84 2 49 2 85 1 197 2 86 22 105 2 87] -#[0 13 178 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[1 12 106 0 8 13 182 0 15 12 106 0 20 12 106 0 35 12 106 0 37 13 182 0 155] -#[0 13 186 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170] -#[0 13 190 0 148] -#[0 13 194 0 9 0 15 0 25] -#[0 22 109 0 68] -#[0 22 113 0 9] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 9 229 0 148 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 22 117 1 47 22 117 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 22 117 1 63 3 197 1 64 22 117 1 83 22 117 1 86 22 117 1 87 22 117 1 185 22 117 2 7 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 13 198 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 13 202 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 13 206 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 13 210 0 155] -#[0 21 229 0 115] -#[0 13 214 0 155] -#[0 21 225 0 42] -#[1 1 77 0 148 22 121 1 92] -#[1 1 77 0 148 22 125 1 92] -#[0 22 129 0 38] -#[0 13 218 0 37 0 80 0 88 0 109 0 111 0 120 0 155] -#[0 13 222 0 37 0 80 0 88 0 109 0 111 0 120 0 155] -#[0 13 226 0 37 0 88 0 109 0 111 0 120 0 155] -#[0 13 230 0 37 0 80 0 88 0 109 0 111 0 155] -#[0 22 133 0 9] -#[0 22 137 0 9] -#[0 22 141 0 9] -#[0 22 145 0 15] -#[0 22 149 0 8] -#[0 22 153 0 8] -#[0 13 234 0 9 0 38] -#[1 13 238 0 9 13 238 0 15 22 157 0 30 13 238 0 38 22 161 1 198 22 165 1 199] -#[0 13 242 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 13 246 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[1 21 65 0 157 22 169 1 157] -#[1 8 73 0 157 1 125 0 191 21 81 0 193 1 125 0 194 21 81 0 208 22 173 1 160] -#[1 8 73 0 157 1 125 0 191 22 177 0 193 1 125 0 194 22 177 0 208] -#[0 22 181 0 23] -#[1 0 49 0 37 0 10 0 41 0 10 0 49 0 10 0 52 0 10 0 55 0 10 0 57 0 10 0 58 0 10 0 60 0 10 0 62 0 10 0 65 0 10 0 67 0 10 0 69 0 10 0 71 0 10 0 76 0 10 0 86 0 10 0 87 0 10 0 88 0 10 0 94 0 10 0 99 0 10 0 100 0 10 0 105 0 10 0 108 0 10 0 109 0 10 0 111 0 10 0 112 0 10 0 113 0 10 0 117 0 10 0 118 0 10 0 121 0 10 0 124 0 10 0 125 0 10 0 126 0 10 0 134 0 10 0 135 0 10 0 137 0 10 0 138 0 10 0 141 0 10 0 142 0 10 0 143 0 10 0 152 13 250 0 155 0 10 0 157 22 193 0 190 22 193 1 150 22 185 1 170 22 189 1 171 22 193 1 172 22 193 1 173 22 193 1 179 22 193 1 186 3 237 1 187 22 193 1 203 22 193 1 218 22 193 1 225 22 193 1 231 22 193 1 241 22 193 1 249 22 193 1 252 22 193 2 10 22 193 2 32 22 193 2 42 4 9 2 52 0 93 2 53 0 97 2 54 0 101 2 55 22 193 2 77] -#[1 22 197 0 25 7 18 0 37 7 18 0 41 7 18 0 49 7 18 0 52 7 18 0 55 7 18 0 57 7 18 0 58 7 18 0 60 7 18 0 62 7 18 0 65 7 18 0 67 7 18 0 69 7 18 0 71 7 18 0 75 7 18 0 76 7 18 0 86 7 18 0 87 7 18 0 88 7 18 0 94 7 18 0 98 7 18 0 99 7 18 0 100 7 18 0 105 7 18 0 108 7 18 0 109 7 18 0 111 7 18 0 112 7 18 0 113 7 18 0 117 7 18 0 118 7 18 0 121 7 18 0 124 7 18 0 125 7 18 0 126 7 18 0 134 7 18 0 135 7 18 0 137 7 18 0 138 7 18 0 141 7 18 0 142 7 18 0 143 7 18 0 152 7 18 0 155 7 18 0 157 22 197 2 72 7 18 2 100] -#[0 13 254 0 25 0 32 0 145 0 148] -#[1 0 49 0 37 0 10 0 41 0 10 0 49 0 10 0 52 0 10 0 55 0 10 0 57 0 10 0 58 0 10 0 60 0 10 0 62 0 10 0 65 0 10 0 67 0 10 0 69 0 10 0 71 0 10 0 75 0 10 0 76 0 10 0 86 0 10 0 87 0 10 0 88 0 10 0 94 0 10 0 99 0 10 0 100 0 10 0 105 0 10 0 108 0 10 0 109 0 10 0 111 0 10 0 112 0 10 0 113 0 10 0 117 0 10 0 118 0 10 0 121 0 10 0 124 0 10 0 125 0 10 0 126 0 10 0 134 0 10 0 135 0 10 0 137 0 10 0 138 0 10 0 141 0 10 0 142 0 10 0 143 14 2 0 155 0 10 0 157 22 249 0 190 22 249 1 150 22 249 1 173 22 249 1 179 22 249 1 186 3 237 1 187 22 249 1 203 22 249 1 218 22 249 1 225 22 249 1 231 22 249 1 241 22 249 1 249 22 249 1 252 22 241 2 3 22 245 2 4 22 249 2 5 22 249 2 10 22 249 2 32 22 249 2 42 22 253 2 52 0 93 2 53 0 97 2 54 0 101 2 55 22 249 2 91] -#[1 23 5 0 25 7 18 0 37 7 18 0 41 7 18 0 49 7 18 0 52 7 18 0 55 7 18 0 57 7 18 0 58 7 18 0 60 7 18 0 62 7 18 0 65 7 18 0 67 7 18 0 69 7 18 0 71 7 18 0 75 7 18 0 76 7 18 0 86 7 18 0 87 7 18 0 88 7 18 0 94 7 18 0 98 7 18 0 99 7 18 0 100 7 18 0 105 7 18 0 108 7 18 0 109 7 18 0 111 7 18 0 112 7 18 0 113 7 18 0 117 7 18 0 118 7 18 0 121 7 18 0 124 7 18 0 125 7 18 0 126 7 18 0 134 7 18 0 135 7 18 0 137 7 18 0 138 7 18 0 141 7 18 0 142 7 18 0 143 7 18 0 152 7 18 0 155 7 18 0 157 23 5 2 72 7 18 2 100] -#[1 23 9 0 85 23 9 0 104 12 250 0 157 23 9 2 17 23 9 2 18] -#[0 14 6 0 15 0 153] -#[1 0 49 0 37 0 10 0 49 0 10 0 52 0 10 0 55 0 10 0 60 0 10 0 65 0 10 0 69 0 10 0 76 0 10 0 86 0 10 0 94 0 10 0 99 0 10 0 100 0 10 0 117 0 10 0 121 0 10 0 125 0 10 0 134 0 10 0 135 0 10 0 138 0 10 0 142 14 10 0 155 0 10 0 157 23 13 2 22 23 17 2 23 23 21 2 24 23 21 2 25 23 21 2 26 23 21 2 30 23 21 2 31 23 41 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[1 23 45 0 25 7 18 0 37 7 18 0 41 7 18 0 49 7 18 0 52 7 18 0 55 7 18 0 57 7 18 0 58 7 18 0 60 7 18 0 62 7 18 0 65 7 18 0 67 7 18 0 69 7 18 0 71 7 18 0 75 7 18 0 76 7 18 0 86 7 18 0 87 7 18 0 88 7 18 0 94 7 18 0 98 7 18 0 99 7 18 0 100 7 18 0 105 7 18 0 108 7 18 0 109 7 18 0 111 7 18 0 112 7 18 0 113 7 18 0 117 7 18 0 118 7 18 0 121 7 18 0 124 7 18 0 125 7 18 0 126 7 18 0 134 7 18 0 135 7 18 0 137 7 18 0 138 7 18 0 141 7 18 0 142 7 18 0 143 7 18 0 152 7 18 0 155 7 18 0 157 23 45 2 72 7 18 2 100] -#[0 14 14 0 25 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 98 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 14 18 0 15 0 155] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 23 49 1 47 23 49 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 23 49 1 63 3 197 1 64 23 49 1 83 23 49 1 86 23 49 1 87 23 49 1 88 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 12 238 0 25 21 89 0 145 23 53 1 161 21 97 1 162 21 101 1 163] -#[0 14 22 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 25 0 47 0 48 0 49 0 50 0 52 0 53 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 64 0 65 0 66 0 72 0 75 0 76 0 77 0 78 0 81 0 83 0 86 0 93 0 94 0 97 0 99 0 100 0 116 0 117 0 121 0 122 0 125 0 127 0 128 0 129 0 130 0 131 0 133 0 134 0 135 0 136 0 137 0 138 0 139 0 140 0 142 0 146 0 147 0 148 0 152 0 155 0 157 0 158 0 159 0 160 0 161 0 162 0 165 0 166 0 169 0 170 2 100] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 23 57 1 47 23 57 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 23 57 1 63 3 197 1 64 23 57 1 83 23 57 1 86 23 57 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[1 12 238 0 25 12 238 0 32 21 89 0 145 12 238 0 148 23 61 1 161 21 97 1 162 21 101 1 163] -#[0 14 26 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 14 30 0 37 0 115 0 155] -#[0 14 34 0 37 0 42 0 155] -#[0 14 38 0 32 0 148] -#[0 14 42 0 25 0 32 0 148] -#[0 14 46 0 25 0 32 0 148] -#[0 14 50 0 25 0 32 0 148] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 23 65 0 196 23 65 0 197 23 65 0 198 23 65 0 199 1 145 0 200 1 145 0 201 1 145 0 202 23 65 0 203 1 161 0 204 23 65 0 205 23 65 0 206 23 65 0 207 23 65 0 208 23 65 0 209 1 185 0 210 23 65 0 216 23 65 1 157 23 65 2 80 2 229 2 81 3 1 2 99] -#[1 4 210 0 1 4 210 0 5 4 210 0 8 4 214 0 9 4 210 0 10 4 210 0 12 4 210 0 13 4 210 0 16 4 210 0 17 4 210 0 47 4 210 0 48 4 210 0 49 4 210 0 52 4 210 0 55 4 210 0 56 4 210 0 60 4 210 0 61 4 210 0 62 4 210 0 65 4 210 0 72 4 210 0 76 4 210 0 79 4 210 0 86 4 210 0 94 4 210 0 97 4 210 0 99 4 210 0 100 4 210 0 104 4 210 0 114 4 210 0 117 4 210 0 121 4 210 0 122 4 210 0 125 4 210 0 128 4 210 0 130 4 210 0 133 4 210 0 134 4 210 0 135 4 210 0 136 4 210 0 138 4 210 0 152 0 239 0 157 4 210 0 158 4 210 0 159 4 210 0 160 4 210 0 161 4 210 0 162 4 210 0 165 4 210 0 166 4 210 0 169 4 210 0 170 23 69 0 221 10 117 0 222 10 121 0 223 10 125 0 224 10 129 0 225] -#[1 4 210 0 1 4 210 0 5 4 210 0 8 4 214 0 9 4 210 0 10 4 210 0 12 4 210 0 13 4 210 0 16 4 210 0 17 4 210 0 47 4 210 0 48 4 210 0 49 4 210 0 52 4 210 0 55 4 210 0 56 4 210 0 60 4 210 0 61 4 210 0 62 4 210 0 65 4 210 0 72 4 210 0 76 4 210 0 79 4 210 0 86 4 210 0 94 4 210 0 97 4 210 0 99 4 210 0 100 4 210 0 104 4 210 0 114 4 210 0 117 4 210 0 121 4 210 0 122 4 210 0 125 4 210 0 128 4 210 0 130 4 210 0 133 4 210 0 134 4 210 0 135 4 210 0 136 4 210 0 138 4 210 0 152 0 239 0 157 4 210 0 158 4 210 0 159 4 210 0 160 4 210 0 161 4 210 0 162 4 210 0 165 4 210 0 166 4 210 0 169 4 210 0 170 23 73 0 221 10 117 0 222 10 121 0 223 10 125 0 224 10 129 0 225] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 23 77 1 47 23 77 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 23 77 1 63 3 197 1 64 23 77 1 83 23 77 1 86 23 77 1 87 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 14 54 0 9 0 15 0 38] -#[0 14 58 0 9 0 15 0 38] -#[0 14 62 0 15 0 153] -#[1 22 45 0 15 14 66 0 145 14 66 0 148] -#[0 14 70 0 15 0 145 0 148] -#[1 23 81 0 57 23 85 0 99 5 45 0 100 5 57 0 125 23 89 0 126 5 73 0 157 1 125 0 191 21 73 0 193 1 125 0 194 23 93 0 207 23 97 0 208 23 101 1 157 23 105 1 164 23 109 1 165 23 113 1 166 23 117 1 167 23 121 1 168] -#[0 23 125 0 155] -#[1 0 49 0 37 0 10 0 41 0 10 0 49 0 10 0 52 0 10 0 55 0 10 0 57 0 10 0 58 0 10 0 60 0 10 0 62 0 10 0 65 0 10 0 67 0 10 0 69 0 10 0 71 0 10 0 76 0 10 0 86 0 10 0 87 0 10 0 88 0 10 0 94 0 10 0 99 0 10 0 100 0 10 0 105 0 10 0 108 0 10 0 109 0 10 0 111 0 10 0 112 0 10 0 113 0 10 0 117 0 10 0 118 0 10 0 121 0 10 0 124 0 10 0 125 0 10 0 126 0 10 0 134 0 10 0 135 0 10 0 137 0 10 0 138 0 10 0 141 0 10 0 142 0 10 0 143 0 10 0 152 14 74 0 155 0 10 0 157 23 129 0 190 23 129 1 150 23 129 1 172 23 129 1 173 23 129 1 179 23 129 1 186 3 237 1 187 23 129 1 203 23 129 1 218 23 129 1 225 23 129 1 231 23 129 1 241 23 129 1 249 23 129 1 252 23 129 2 10 23 129 2 32 23 129 2 42 4 9 2 52 0 93 2 53 0 97 2 54 0 101 2 55 23 129 2 77] -#[0 14 78 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157] -#[0 14 82 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 98 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 14 86 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 155 0 157] -#[0 14 90 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 155 0 157] -#[0 14 94 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 155 0 157] -#[0 14 98 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 155 0 157] -#[0 14 102 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 155 0 157] -#[0 14 106 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 155 0 157] -#[0 14 110 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 155 0 157] -#[0 14 114 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 155 0 157] -#[0 14 118 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 155 0 157] -#[0 14 122 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 155 0 157] -#[0 23 133 0 155] -#[1 0 49 0 37 0 10 0 41 0 10 0 49 0 10 0 52 0 10 0 55 0 10 0 57 0 10 0 58 0 10 0 60 0 10 0 62 0 10 0 65 0 10 0 67 0 10 0 69 0 10 0 71 0 10 0 75 0 10 0 76 0 10 0 86 0 10 0 87 0 10 0 88 0 10 0 94 0 10 0 99 0 10 0 100 0 10 0 105 0 10 0 108 0 10 0 109 0 10 0 111 0 10 0 112 0 10 0 113 0 10 0 117 0 10 0 118 0 10 0 121 0 10 0 124 0 10 0 125 0 10 0 126 0 10 0 134 0 10 0 135 0 10 0 137 0 10 0 138 0 10 0 141 0 10 0 142 0 10 0 143 14 126 0 155 0 10 0 157 23 137 0 190 23 137 1 150 23 137 1 173 23 137 1 179 23 137 1 186 3 237 1 187 23 137 1 203 23 137 1 218 23 137 1 225 23 137 1 231 23 137 1 241 23 137 1 249 23 137 1 252 23 137 2 5 23 137 2 10 23 137 2 32 23 137 2 42 22 253 2 52 0 93 2 53 0 97 2 54 0 101 2 55 23 137 2 91] -#[0 14 130 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 155 0 157] -#[1 7 125 0 41 0 115 0 49 0 115 0 52 0 115 0 55 0 66 0 57 3 90 0 58 0 115 0 60 0 70 0 62 0 115 0 65 0 74 0 67 3 94 0 69 0 119 0 71 14 134 0 75 0 115 0 76 0 115 0 86 0 78 0 87 23 141 0 88 0 115 0 94 23 145 0 99 0 115 0 100 7 141 0 105 0 123 0 108 23 149 0 109 23 153 0 111 23 157 0 112 7 201 0 113 0 115 0 117 7 161 0 118 0 115 0 121 0 127 0 124 0 115 0 125 0 82 0 126 0 115 0 134 0 115 0 135 2 235 0 137 0 115 0 138 7 173 0 141 0 115 0 142 7 201 0 143 0 139 0 157 4 137 1 151 4 141 1 152 4 145 1 153 7 181 1 174 7 185 1 175 7 189 1 176 7 193 1 180 7 197 1 181 7 201 1 182 7 205 1 188 7 209 1 189 7 213 1 190 7 217 1 204 7 221 1 205 7 225 1 206 7 229 1 219 7 233 1 220 7 237 1 221 7 241 1 226 7 245 1 227 7 249 1 228 7 253 1 232 8 1 1 233 8 5 1 242 8 9 1 243 8 13 1 244 8 17 1 250 4 149 1 253 4 153 1 254 4 157 1 255 4 161 2 11 4 165 2 12 4 169 2 13 4 173 2 36 4 177 2 37 4 181 2 38 4 185 2 43 4 189 2 44 4 193 2 45 23 165 2 75 23 169 2 78 23 173 2 92 23 177 2 93 23 181 2 94] -#[0 14 138 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 155 0 157] -#[0 14 142 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 98 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[1 21 65 0 157 23 185 1 157] -#[0 23 189 0 155] -#[1 0 49 0 37 0 10 0 49 0 10 0 52 0 10 0 55 0 10 0 60 0 10 0 65 0 10 0 69 0 10 0 76 0 10 0 86 0 10 0 94 0 10 0 99 0 10 0 100 0 10 0 117 0 10 0 121 0 10 0 125 0 10 0 134 0 10 0 135 0 10 0 138 0 10 0 142 14 146 0 155 0 10 0 157 23 193 2 24 23 193 2 25 23 193 2 26 23 193 2 30 23 193 2 31 23 41 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[0 14 150 0 37 0 49 0 52 0 55 0 60 0 65 0 69 0 76 0 86 0 94 0 99 0 100 0 117 0 121 0 125 0 134 0 135 0 138 0 142 0 155 0 157] -#[0 14 154 0 37 0 49 0 52 0 55 0 60 0 65 0 69 0 76 0 86 0 94 0 99 0 100 0 117 0 121 0 125 0 134 0 135 0 138 0 142 0 155 0 157] -#[0 14 158 0 37 0 49 0 52 0 55 0 60 0 65 0 69 0 76 0 86 0 94 0 99 0 100 0 117 0 121 0 125 0 134 0 135 0 138 0 142 0 155 0 157] -#[0 14 162 0 37 0 49 0 52 0 55 0 60 0 65 0 69 0 76 0 86 0 94 0 99 0 100 0 117 0 121 0 125 0 134 0 135 0 138 0 142 0 155 0 157] -#[0 14 166 0 37 0 49 0 52 0 55 0 60 0 65 0 69 0 76 0 86 0 94 0 99 0 100 0 117 0 121 0 125 0 134 0 135 0 138 0 142 0 155 0 157] -#[1 14 170 0 49 14 170 0 52 14 170 0 55 14 170 0 60 14 170 0 65 14 170 0 69 14 170 0 76 14 170 0 86 14 170 0 94 23 201 0 99 14 170 0 100 14 170 0 117 14 170 0 121 14 170 0 125 14 170 0 134 14 170 0 135 14 170 0 138 14 170 0 142 14 170 0 157 23 201 2 73] -#[0 14 174 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 98 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 14 178 0 15 0 155] -#[0 23 205 0 25] -#[1 14 182 0 79 14 182 0 82 23 209 0 89 14 182 0 91 14 182 0 92 14 182 0 103 14 182 0 119 14 182 0 145] -#[0 14 186 0 25 0 32 0 148] -#[1 1 66 0 10 1 70 0 35 1 74 0 37 23 213 0 157] -#[0 23 217 0 9] -#[0 23 221 0 9] -#[0 14 190 0 9 0 15 0 38] -#[0 14 194 0 15 0 25 0 32 0 145 0 148] -#[0 23 225 0 8] -#[0 14 198 0 15 0 25 0 32 0 145 0 148] -#[0 14 202 0 15 0 25 0 32 0 145 0 148] -#[0 14 206 0 15 0 25 0 32 0 145 0 148] -#[0 14 210 0 15 0 25 0 32 0 145 0 148] -#[0 14 214 0 25 0 32 0 145 0 148] -#[1 23 229 0 15 14 218 0 25 14 218 0 32 14 218 0 145 14 218 0 148] -#[1 23 233 0 15 14 222 0 25 14 222 0 32 14 222 0 145 14 222 0 148] -#[0 14 226 0 15 0 25 0 32 0 145 0 148] -#[0 14 230 0 25 0 32 0 145 0 148] -#[0 14 234 0 25 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 98 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 14 238 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157] -#[0 14 242 0 25 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 98 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 14 246 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 155 0 157] -#[1 1 43 0 41 1 47 0 49 1 47 0 52 1 47 0 55 3 182 0 57 5 202 0 58 1 47 0 60 3 186 0 62 1 47 0 65 3 190 0 67 5 186 0 69 1 51 0 71 14 250 0 75 1 47 0 76 1 47 0 86 3 194 0 87 2 239 0 88 1 47 0 94 2 243 0 99 1 47 0 100 1 63 0 105 1 67 0 108 2 239 0 109 2 239 0 111 2 239 0 112 5 198 0 113 1 47 0 117 1 43 0 118 1 47 0 121 1 71 0 124 1 47 0 125 3 198 0 126 1 47 0 134 1 47 0 135 2 247 0 137 1 47 0 138 1 63 0 141 1 47 0 142 5 198 0 143 1 79 0 157] -#[1 1 83 0 41 1 87 0 49 1 87 0 52 1 87 0 55 3 202 0 57 5 230 0 58 1 87 0 60 3 206 0 62 1 87 0 65 3 210 0 67 5 214 0 69 1 91 0 71 14 254 0 75 1 87 0 76 1 87 0 86 3 214 0 87 2 251 0 88 1 87 0 94 2 251 0 99 1 87 0 100 1 91 0 105 1 99 0 108 2 251 0 109 2 251 0 111 2 251 0 112 5 226 0 113 1 87 0 117 1 83 0 118 1 87 0 121 1 103 0 124 1 87 0 125 3 218 0 126 1 87 0 134 1 87 0 135 2 255 0 137 1 87 0 138 1 91 0 141 1 87 0 142 5 226 0 143 1 87 0 157] -#[1 1 123 0 41 1 127 0 49 1 127 0 52 1 127 0 55 3 222 0 57 6 14 0 58 1 127 0 60 3 226 0 62 1 127 0 65 3 230 0 67 6 2 0 69 1 131 0 71 15 2 0 75 1 127 0 76 1 127 0 86 3 234 0 87 3 3 0 88 1 127 0 94 3 7 0 99 1 127 0 100 1 143 0 105 1 147 0 108 3 3 0 109 3 3 0 111 3 3 0 112 6 10 0 113 1 127 0 117 1 123 0 118 1 127 0 121 1 151 0 124 1 127 0 125 3 238 0 126 1 127 0 134 1 127 0 135 3 11 0 137 1 127 0 138 1 143 0 141 1 127 0 142 6 10 0 143 1 159 0 157] -#[1 1 163 0 41 1 167 0 49 1 167 0 52 1 167 0 55 3 242 0 57 6 42 0 58 1 167 0 60 3 246 0 62 1 167 0 65 3 250 0 67 6 22 0 69 1 171 0 71 15 6 0 75 1 167 0 76 1 167 0 86 3 254 0 87 3 15 0 88 1 167 0 94 3 19 0 99 1 167 0 100 1 183 0 105 1 187 0 108 3 15 0 109 3 15 0 111 3 15 0 112 6 38 0 113 1 167 0 117 1 163 0 118 1 167 0 121 1 191 0 124 1 167 0 125 4 2 0 126 1 167 0 134 1 167 0 135 3 23 0 137 1 167 0 138 1 183 0 141 1 167 0 142 6 38 0 143 1 199 0 157] -#[1 1 203 0 41 1 207 0 49 1 207 0 52 1 207 0 55 4 6 0 57 6 74 0 58 1 207 0 60 4 10 0 62 1 207 0 65 4 14 0 67 6 62 0 69 6 66 0 70 1 211 0 71 15 10 0 75 1 207 0 76 6 66 0 84 1 207 0 86 4 18 0 87 3 27 0 88 1 207 0 94 3 31 0 99 1 207 0 100 1 223 0 105 1 227 0 108 3 27 0 109 3 27 0 111 3 35 0 112 6 70 0 113 1 207 0 117 1 203 0 118 1 207 0 121 1 235 0 124 1 207 0 125 4 22 0 126 1 207 0 134 1 207 0 135 3 39 0 137 1 207 0 138 1 223 0 141 1 207 0 142 6 70 0 143 1 243 0 157] -#[1 2 47 0 41 2 51 0 49 2 51 0 52 2 51 0 55 4 34 0 57 2 51 0 60 4 38 0 62 2 51 0 65 6 134 0 69 6 138 0 70 2 55 0 71 15 14 0 75 2 51 0 76 6 138 0 84 2 51 0 86 4 42 0 87 3 43 0 88 2 51 0 94 3 47 0 99 2 51 0 100 2 67 0 105 2 71 0 108 3 43 0 109 3 43 0 111 3 51 0 112 6 142 0 113 2 51 0 117 2 47 0 118 2 51 0 121 2 79 0 124 2 51 0 125 4 46 0 126 2 51 0 134 2 51 0 135 3 51 0 137 2 51 0 138 2 67 0 141 2 51 0 142 6 142 0 143 2 83 0 157] -#[1 2 99 0 124 23 237 0 137 23 237 2 78] -#[1 23 241 0 71 2 103 0 124 23 241 2 75] -#[0 23 245 0 75] -#[1 15 18 0 75 24 17 0 88 24 17 0 99 24 17 0 109 24 17 0 111 24 17 0 112 24 17 0 137 24 17 2 94] -#[0 15 22 0 75 0 88 0 99 0 109 0 111 0 112 0 137] -#[0 15 26 0 15 0 153] -#[0 15 30 0 25 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 98 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 15 34 0 37 0 49 0 52 0 55 0 60 0 65 0 69 0 76 0 86 0 94 0 99 0 100 0 117 0 121 0 125 0 134 0 135 0 138 0 142 0 155 0 157] -#[0 15 38 0 49 0 52 0 55 0 60 0 65 0 69 0 76 0 86 0 94 0 100 0 117 0 121 0 125 0 134 0 135 0 138 0 142 0 157] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 24 21 0 69 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 24 25 0 196 24 25 0 197 24 25 0 198 24 25 0 199 1 145 0 200 1 145 0 201 1 145 0 202 24 25 0 203 1 161 0 204 24 25 0 205 24 25 0 206 24 25 0 207 24 25 0 208 24 25 0 209 1 185 0 210 24 25 0 216 24 25 1 157 24 29 1 191 24 25 2 80 2 229 2 81 13 137 2 99] -#[0 15 42 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 98 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 152 0 155 0 157 2 100] -#[0 24 33 0 157] -#[0 24 37 0 9] -#[0 15 46 0 25 0 148] -#[0 15 50 0 25 0 148] -#[0 24 41 0 9] -#[1 23 85 0 99 5 73 0 157 1 125 0 191 23 97 0 193 1 125 0 194 23 97 0 208 23 101 1 157 24 45 1 166 23 117 1 167 24 49 1 168] -#[1 23 85 0 99 5 73 0 157 1 125 0 191 23 97 0 193 1 125 0 194 23 97 0 208 24 53 1 157 24 57 1 167 24 61 1 168] -#[0 15 209 0 124] -#[0 15 221 0 124] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 24 65 0 196 24 65 0 197 24 65 0 198 24 65 0 199 1 145 0 200 1 145 0 201 1 145 0 202 24 65 0 203 1 161 0 204 24 65 0 205 24 65 0 206 24 65 0 207 24 65 0 208 24 65 0 209 1 185 0 210 24 65 0 216 24 65 1 157 24 65 2 80 2 229 2 81 24 69 2 95 3 1 2 99] -#[0 14 250 0 75 0 88 0 99 0 109 0 111 0 112 0 137] -#[0 14 254 0 75 0 88 0 99 0 109 0 111 0 112 0 137] -#[0 15 2 0 75 0 88 0 99 0 109 0 111 0 112 0 137] -#[0 15 6 0 75 0 88 0 99 0 109 0 111 0 112 0 137] -#[0 15 10 0 75 0 88 0 99 0 109 0 111 0 112 0 137] -#[0 15 14 0 75 0 88 0 99 0 109 0 111 0 112 0 137] -#[0 15 54 0 75 0 88 0 99 0 109 0 111 0 112 0 137] -#[1 5 13 0 49 1 145 0 52 1 145 0 55 1 145 0 60 1 145 0 65 1 145 0 76 1 145 0 86 1 145 0 94 5 45 0 100 1 145 0 117 1 145 0 121 5 57 0 125 1 145 0 134 1 145 0 135 1 145 0 138 1 65 0 142 5 73 0 157 1 125 0 191 1 121 0 193 1 125 0 194 24 73 0 196 24 73 0 197 24 73 0 198 24 73 0 199 1 145 0 200 1 145 0 201 1 145 0 202 24 73 0 203 1 161 0 204 24 73 0 205 24 73 0 206 24 73 0 207 24 73 0 208 24 73 0 209 1 185 0 210 24 73 0 216 24 73 1 157 24 73 2 80 2 229 2 81 3 1 2 99] -#[1 1 66 0 10 1 70 0 35 1 74 0 37 24 77 0 128 3 55 0 157] -#[0 24 85 0 157] -#[0 15 58 0 79 0 82 0 91 0 92 0 103 0 119 0 145] -#[0 15 62 0 25 0 32 0 148] -#[0 15 66 0 25 0 32 0 145 0 148] -#[1 24 89 0 15 15 70 0 25 15 70 0 32 15 70 0 145 15 70 0 148] -#[0 15 74 0 25 0 32 0 145 0 148] -#[0 15 78 0 15 0 25 0 32 0 145 0 148] -#[0 15 82 0 15 0 25 0 32 0 145 0 148] -#[0 15 86 0 25 0 32 0 145 0 148] -#[1 1 66 0 10 1 70 0 35 1 74 0 37 15 90 0 157] -#[1 24 93 0 157 24 97 2 96 24 101 2 97] -#[1 1 66 0 10 1 70 0 35 1 74 0 37 24 105 0 157] -#[0 24 109 0 37] -#[0 24 113 0 148] -#[1 10 138 0 8 18 85 0 26 24 117 1 154 24 117 1 155] -#[1 23 85 0 99 5 73 0 157 1 125 0 191 23 97 0 193 1 125 0 194 23 97 0 208 24 53 1 157 24 57 1 167 24 121 1 168] -#[0 24 125 0 37] -#[1 24 129 0 25 24 93 0 157 24 133 2 97] -#[0 15 94 0 25 0 157] -#[0 24 137 0 25] -#[1 0 49 0 37 0 10 0 49 0 10 0 52 0 10 0 55 0 10 0 60 0 10 0 65 0 10 0 76 0 10 0 86 0 10 0 94 0 10 0 100 0 10 0 104 0 10 0 107 0 10 0 114 0 10 0 117 0 10 0 121 0 10 0 125 0 10 0 128 0 10 0 134 0 10 0 135 0 10 0 138 0 10 0 142 0 10 0 157 24 141 1 195 18 21 1 196 18 25 1 197 18 29 1 202 18 33 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[1 0 49 0 37 0 10 0 80 0 10 0 120 24 145 2 27 24 149 2 28 24 153 2 29 24 157 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[0 24 161 0 8] -#[0 15 98 0 25 0 32 0 145 0 148] -#[1 0 105 0 1 0 109 0 5 3 5 0 8 0 117 0 10 0 121 0 12 0 125 0 13 0 129 0 16 0 133 0 17 0 141 0 47 0 145 0 48 3 9 0 49 3 13 0 52 3 17 0 55 3 21 0 56 3 25 0 60 0 181 0 61 0 185 0 62 3 29 0 65 2 217 0 72 3 33 0 76 3 37 0 79 3 41 0 86 3 45 0 94 0 237 0 97 0 241 0 99 3 49 0 100 3 53 0 117 3 57 0 121 1 5 0 122 3 61 0 125 1 17 0 128 2 217 0 130 1 33 0 133 3 65 0 134 3 69 0 135 3 73 0 136 3 77 0 138 1 81 0 152 3 81 0 157 1 89 0 158 1 93 0 159 1 97 0 160 1 101 0 161 0 14 0 162 1 105 0 165 0 18 0 166 1 109 0 169 1 113 0 170 3 85 0 191 3 89 0 227 1 197 0 228 1 197 0 229 1 205 0 230 1 209 0 231 1 213 0 234 1 217 0 235 1 197 0 237 1 197 0 239 1 197 0 240 1 233 0 241 1 237 0 242 1 241 0 243 1 197 0 244 1 197 0 245 1 197 0 247 1 197 0 248 1 197 0 249 1 197 0 250 1 197 0 251 3 89 1 7 1 197 1 8 1 197 1 9 1 197 1 14 1 197 1 20 1 197 1 21 1 197 1 22 1 197 1 23 3 109 1 26 3 109 1 27 3 109 1 32 3 109 1 33 3 109 1 34 3 109 1 35 3 125 1 36 3 129 1 37 3 133 1 38 3 137 1 39 3 141 1 40 3 145 1 41 3 149 1 42 3 153 1 43 3 157 1 44 3 161 1 45 3 165 1 46 24 165 1 47 24 165 1 48 1 197 1 49 3 177 1 50 3 177 1 52 3 177 1 58 3 189 1 61 24 165 1 63 3 197 1 64 24 165 1 83 24 165 1 86 24 165 1 87 24 165 1 88 1 197 2 70 2 217 2 71 3 109 2 82 1 197 2 83 1 197 2 84 3 109 2 85 1 197 2 86] -#[0 15 102 0 37 0 41 0 49 0 52 0 55 0 57 0 58 0 60 0 62 0 65 0 67 0 69 0 71 0 75 0 76 0 86 0 87 0 88 0 94 0 99 0 100 0 105 0 108 0 109 0 111 0 112 0 113 0 117 0 118 0 121 0 124 0 125 0 126 0 134 0 135 0 137 0 138 0 141 0 142 0 143 0 155 0 157] -#[0 15 106 0 25 0 157] -#[0 15 110 0 37 0 49 0 52 0 55 0 60 0 65 0 69 0 76 0 86 0 94 0 99 0 100 0 117 0 121 0 125 0 134 0 135 0 138 0 142 0 155 0 157] -#[0 24 169 0 38] -#[0 24 173 0 155] -#[1 0 49 0 37 0 10 0 120 15 114 0 155 24 177 2 29 24 181 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[1 0 49 0 37 0 10 0 80 15 118 0 155 24 185 2 28 24 189 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[1 24 193 0 80 24 197 0 120] -#[1 10 66 0 9 0 49 0 37 0 10 0 49 0 10 0 52 0 10 0 55 0 10 0 60 0 10 0 65 0 10 0 76 0 10 0 86 0 10 0 94 0 10 0 100 0 10 0 104 0 10 0 107 0 10 0 114 0 10 0 117 0 10 0 121 0 10 0 125 0 10 0 128 0 10 0 134 0 10 0 135 0 10 0 138 0 10 0 142 0 10 0 157 24 201 1 194 18 17 1 195 18 21 1 196 18 25 1 197 18 29 1 202 18 33 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[0 24 205 0 38] -#[0 24 209 0 148] -#[0 15 122 0 37 0 49 0 52 0 55 0 60 0 65 0 69 0 76 0 86 0 94 0 99 0 100 0 117 0 121 0 125 0 134 0 135 0 138 0 142 0 155 0 157] -#[0 15 126 0 155] -#[0 24 197 0 120] -#[0 15 130 0 155] -#[0 24 193 0 80] -#[0 24 213 0 25] -#[0 24 217 0 25] -#[0 24 221 0 9] -#[0 15 134 0 25 0 157] -#[1 0 49 0 37 0 10 0 80 0 10 0 120 24 225 2 27 24 149 2 28 24 153 2 29 24 157 2 52 0 93 2 53 0 97 2 54 0 101 2 55] -#[0 15 138 0 37 0 120 0 155] -#[0 15 142 0 37 0 80 0 155] -#[1 12 238 0 25 21 89 0 145 24 229 1 161 21 97 1 162 21 101 1 163] -#[0 24 233 0 155] -#[0 24 237 0 25] -#[0 15 146 0 37 0 49 0 52 0 55 0 60 0 65 0 69 0 76 0 86 0 94 0 99 0 100 0 117 0 121 0 125 0 134 0 135 0 138 0 142 0 155 0 157] -#[0 15 150 0 37 0 49 0 52 0 55 0 60 0 65 0 69 0 76 0 86 0 94 0 99 0 100 0 117 0 121 0 125 0 134 0 135 0 138 0 142 0 155 0 157] - ). -] - -{ #category : #private } -CSharpParser >> actionsForCurrentToken [ - | actions | - actions := super actionsForCurrentToken. - actions isEmpty - ifTrue: [ (currentToken ids includes: scanner rightBraceId) - ifTrue: [ | i scannerState stackItem | - i := nodeStack size. - scannerState := nil. - [ i > 0 and: [ scannerState isNil ] ] - whileTrue: [ stackItem := nodeStack at: i. - (stackItem = #interpolatedString or: [ stackItem = #interpolatedVerbatimString ]) - ifTrue: [ scannerState := stackItem ]. - i := i - 1 ]. - scannerState notNil - ifTrue: [ self scope: scannerState. - self position: currentToken startPosition - 1. - currentToken := nil. - self getNextToken. - self scope: #default. - (currentToken ids includes: scanner rightBraceId) - ifTrue: [ ^ actions ]. - ^ self actionsForCurrentToken ] ]. - (currentToken ids includes: scanner gtgtId) - ifTrue: [ currentToken := currentToken class value: '>' start: currentToken startPosition ids: (Array with: scanner gtId). - self position: currentToken startPosition. - actions := super actionsForCurrentToken ] ]. - ^ actions -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForStartInterpolatedString1: nodes [ - ^ #interpolatedString -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForStartInterpolatedVerbatimString1: nodes [ - ^ #interpolatedVerbatimString -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFor_attribute_arguments1: nodes [ - | result | - result := Array new: 4. - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFor_attribute_arguments2: nodes [ - | result | - result := Array new: 4. - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 1 put: ((nodes at: 1) at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 3). - self addAll: ((nodes at: 1) at: 3) to: (result at: 4). - result at: 2 put: ((nodes at: 1) at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFor_attribute_target_specifier1: nodes [ - | result | - result := Array new: 2. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFor_class_base1: nodes [ - | result | - result := Array new: 4. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFor_exception_specifier1: nodes [ - | result | - result := Array new: 4. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFor_explicit_anonymous_function_paramenter_list1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFor_extern_alias_directives1: nodes [ - | result | - result := OrderedCollection new: 2. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFor_extern_alias_directives2: nodes [ - | result | - result := nodes at: 1. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFor_generic_dimension_specifier1: nodes [ - | result | - result := Array new: 3. - result at: 2 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFor_local_variable_declarator_name1: nodes [ - | result | - result := CSSimpleNameNode new. - result identifierToken: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFor_query_body_clauses1: nodes [ - | result | - result := Array new: 19. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFor_query_continuation1: nodes [ - | result | - result := Array new: 24. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFor_struct_interfaces1: nodes [ - | result | - result := Array new: 3. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForaccessor_declarations2: nodes [ - | result | - result := Array new: 2. - result at: 2 put: (nodes at: 1). - result at: 1 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForaccessor_modifiers5: nodes [ - | result | - result := OrderedCollection new: 2. - self add: (nodes at: 1) to: result. - self add: (nodes at: 2) to: result. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForadd_accessor_declaration1: nodes [ - | result | - result := CSAddAccessorDeclarationNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result addToken: (nodes at: 2). - result block: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForanonymous_method_expression1: nodes [ - | result | - result := CSAnonymousMethodExpressionNode new. - result delegateToken: (nodes at: 1). - result signature: (nodes at: 2). - result block: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForanonymous_object_creation_expression1: nodes [ - | result | - result := CSAnonymousObjectCreationExpressionNode new. - result newToken: (nodes at: 1). - result leftBraceToken: ((nodes at: 2) at: 1). - result addNodes: ((nodes at: 2) at: 2) to: result declarators. - result addTokens: ((nodes at: 2) at: 3) to: result commaTokens. - result rightBraceToken: ((nodes at: 2) at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForanonymous_object_initializer1: nodes [ - | result | - result := Array new: 4. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - result at: 4 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForanonymous_object_initializer2: nodes [ - | result | - result := Array new: 4. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - self add: (nodes at: 3) to: (result at: 3). - result at: 4 put: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForargument1: nodes [ - | result | - result := CSArgumentNode new. - result identifier: ((nodes at: 1) at: 1). - result colonToken: ((nodes at: 1) at: 2). - result expression: ((nodes at: 2) at: 1). - result refToken: ((nodes at: 2) at: 2). - result outToken: ((nodes at: 2) at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForargument_value1: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForargument_value2: nodes [ - | result | - result := Array new: 3. - result at: 2 put: (nodes at: 1). - result at: 1 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForargument_value3: nodes [ - | result | - result := Array new: 3. - result at: 3 put: (nodes at: 1). - result at: 1 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForarray_creation_expression1: nodes [ - | result | - result := CSArrayCreationExpressionNode new. - result newToken: (nodes at: 1). - result type: (nodes at: 2). - result leftBracketToken: (nodes at: 3). - result addNodes: ((nodes at: 4) at: 1) to: result expressions. - result addTokens: ((nodes at: 4) at: 2) to: result commaTokens. - result rightBracketToken: (nodes at: 5). - result addNodes: (nodes at: 6) to: result rankSpecifiers. - result arrayInitializer: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForarray_creation_expression2: nodes [ - | result | - result := CSArrayCreationExpressionNode new. - result newToken: (nodes at: 1). - result type: (nodes at: 2). - result arrayInitializer: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForarray_creation_expression3: nodes [ - | result | - result := CSArrayCreationExpressionNode new. - result newToken: (nodes at: 1). - result addNode: (nodes at: 2) to: result rankSpecifiers. - result arrayInitializer: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForarray_initializer1: nodes [ - | result | - result := CSArrayInitializerNode new. - result leftBraceToken: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result initializers. - result addTokens: ((nodes at: 2) at: 2) to: result commaTokens. - result rightBraceToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForarray_initializer2: nodes [ - | result | - result := CSArrayInitializerNode new. - result leftBraceToken: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result initializers. - result addTokens: ((nodes at: 2) at: 2) to: result commaTokens. - result addToken: (nodes at: 3) to: result commaTokens. - result rightBraceToken: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForarray_type1: nodes [ - | result | - result := CSArrayTypeNode new. - result type: (nodes at: 1). - result addNodes: (nodes at: 2) to: result rankSpecifiers. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForassignment1: nodes [ - | result | - result := CSAssignmentNode new. - result lhs: (nodes at: 1). - result operator: (nodes at: 2). - result rhs: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForattribute1: nodes [ - | result | - result := CSAttributeValueNode new. - result name: (nodes at: 1). - result leftParen: ((nodes at: 2) at: 1). - result rightParen: ((nodes at: 2) at: 2). - result addNodes: ((nodes at: 2) at: 3) to: result arguments. - result addTokens: ((nodes at: 2) at: 4) to: result commas. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForattribute_arguments2: nodes [ - | result | - result := Array new: 4. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - self add: (nodes at: 3) to: (result at: 3). - self addAll: ((nodes at: 4) at: 1) to: (result at: 2). - self addAll: ((nodes at: 4) at: 2) to: (result at: 3). - result at: 4 put: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForattribute_section1: nodes [ - | result | - result := CSAttributeNode new. - result leftBracket: (nodes at: 1). - result target: ((nodes at: 2) at: 1). - result colon: ((nodes at: 2) at: 2). - result addNodes: ((nodes at: 3) at: 1) to: result attributeValues. - result addTokens: ((nodes at: 3) at: 2) to: result commas. - result rightBracket: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForattribute_section2: nodes [ - | result | - result := CSAttributeNode new. - result leftBracket: (nodes at: 1). - result target: ((nodes at: 2) at: 1). - result colon: ((nodes at: 2) at: 2). - result addNodes: ((nodes at: 3) at: 1) to: result attributeValues. - result addTokens: ((nodes at: 3) at: 2) to: result commas. - result addToken: (nodes at: 4) to: result commas. - result rightBracket: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForattribute_target_specifier1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForawait_expression1: nodes [ - | result | - result := CSAwaitExpressionNode new. - result awaitToken: (nodes at: 1). - result expression: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForbase_access1: nodes [ - | result | - result := CSBaseAccessNode new. - result baseToken: (nodes at: 1). - result periodToken: (nodes at: 2). - result identifier: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForbase_access2: nodes [ - | result | - result := CSBaseAccessNode new. - result baseToken: (nodes at: 1). - result leftBracketToken: (nodes at: 2). - result addNodes: ((nodes at: 3) at: 1) to: result expressions. - result addTokens: ((nodes at: 3) at: 2) to: result commaTokens. - result rightBracketToken: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForbinary_operator_declarator1: nodes [ - | result | - result := Array new: 8. - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - result at: 4 put: (nodes at: 4). - self add: (nodes at: 5) to: (result at: 5). - self add: (nodes at: 6) to: (result at: 6). - result at: 7 put: (nodes at: 7). - self add: (nodes at: 8) to: (result at: 5). - self add: (nodes at: 9) to: (result at: 6). - result at: 8 put: (nodes at: 10). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForblock1: nodes [ - | result | - result := CSBlockStatementNode new. - result leftBraceToken: (nodes at: 1). - result addNodes: (nodes at: 2) to: result statements. - result rightBraceToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForbreak_statement1: nodes [ - | result | - result := CSBreakStatementNode new. - result breakToken: (nodes at: 1). - result semicolonToken: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForcast_expression1: nodes [ - | result | - result := CSCastExpressionNode new. - result leftParenToken: (nodes at: 1). - result type: (nodes at: 2). - result rightParenToken: (nodes at: 3). - result expression: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForcatch_clause1: nodes [ - | result | - result := CSCatchClauseNode new. - result catchToken: (nodes at: 1). - result leftParenToken: ((nodes at: 2) at: 1). - result type: ((nodes at: 2) at: 2). - result name: ((nodes at: 2) at: 3). - result rightParenToken: ((nodes at: 2) at: 4). - result filter: (nodes at: 3). - result block: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForchecked_expression1: nodes [ - | result | - result := CSCheckedExpressionNode new. - result checkedToken: (nodes at: 1). - result leftParenToken: (nodes at: 2). - result expression: (nodes at: 3). - result rightParenToken: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForchecked_statement1: nodes [ - | result | - result := CSCheckedStatementNode new. - result checkedToken: (nodes at: 1). - result block: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForclass_base1: nodes [ - | result | - result := Array new: 4. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self add: (nodes at: 2) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForclass_base2: nodes [ - | result | - result := Array new: 4. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForclass_base3: nodes [ - | result | - result := Array new: 4. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self add: (nodes at: 2) to: (result at: 2). - result at: 4 put: (nodes at: 3). - self addAll: ((nodes at: 4) at: 1) to: (result at: 2). - self addAll: ((nodes at: 4) at: 2) to: (result at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForclass_declaration1: nodes [ - | result | - result := CSClassDeclarationNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result addTokens: (nodes at: 2) to: result modifiers. - result partialToken: (nodes at: 3). - result classToken: (nodes at: 4). - result name: (nodes at: 5). - result typeParameters: (nodes at: 6). - result colonToken: ((nodes at: 7) at: 1). - result addNodes: ((nodes at: 7) at: 2) to: result supertypes. - result addTokens: ((nodes at: 7) at: 3) to: result commas. - result commaToken: ((nodes at: 7) at: 4). - result addNodes: (nodes at: 8) to: result constraintClauses. - result leftBraceToken: ((nodes at: 9) at: 1). - result addNodes: ((nodes at: 9) at: 2) to: result declarations. - result rightBraceToken: ((nodes at: 9) at: 3). - result semicolon: (nodes at: 10). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForcollection_initializer1: nodes [ - | result | - result := CSCollectionInitializerNode new. - result leftBraceToken: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result initializers. - result addTokens: ((nodes at: 2) at: 2) to: result commaTokens. - result rightBraceToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForcollection_initializer2: nodes [ - | result | - result := CSCollectionInitializerNode new. - result leftBraceToken: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result initializers. - result addTokens: ((nodes at: 2) at: 2) to: result commaTokens. - result addToken: (nodes at: 3) to: result commaTokens. - result rightBraceToken: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForcompilation_unit1: nodes [ - | result | - result := CSCompilationUnitNode new. - result addNodes: (nodes at: 1) to: result directives. - result addNodes: (nodes at: 2) to: result directives. - result addNodes: (nodes at: 3) to: result _attributes. - result addNodes: (nodes at: 4) to: result declarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForconditional_expression2: nodes [ - | result | - result := CSConditionalExpressionNode new. - result booleanExpression: (nodes at: 1). - result questionMarkToken: (nodes at: 2). - result trueExpression: (nodes at: 3). - result colonToken: (nodes at: 4). - result falseExpression: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForconst_declarator1: nodes [ - | result | - result := CSConstDeclaratorNode new. - result name: (nodes at: 1). - result equalToken: (nodes at: 2). - result expression: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForconstant_declaration1: nodes [ - | result | - result := CSConstantDeclarationNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result addTokens: (nodes at: 2) to: result modifiers. - result constToken: (nodes at: 3). - result type: (nodes at: 4). - result addNodes: ((nodes at: 5) at: 1) to: result declarators. - result addTokens: ((nodes at: 5) at: 2) to: result commaTokens. - result semicolonToken: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForconstant_declarator1: nodes [ - | result | - result := CSConstantDeclaratorNode new. - result identifierToken: (nodes at: 1). - result equalToken: (nodes at: 2). - result expression: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForconstructor_constraint1: nodes [ - | result | - result := CSConstructorConstraintNode new. - result newToken: (nodes at: 1). - result leftParenToken: (nodes at: 2). - result rightParenToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForconstructor_declaration1: nodes [ - | result | - result := CSConstructorDeclarationNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result addTokens: (nodes at: 2) to: result modifiers. - result identifierToken: ((nodes at: 3) at: 1). - result leftParenToken: ((nodes at: 3) at: 2). - result addNodes: ((nodes at: 3) at: 3) to: result parameters. - result addTokens: ((nodes at: 3) at: 4) to: result commas. - result rightParenToken: ((nodes at: 3) at: 5). - result initializer: ((nodes at: 3) at: 6). - result block: ((nodes at: 4) at: 1). - result semicolonToken: ((nodes at: 4) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForconstructor_declarator1: nodes [ - | result | - result := Array new: 6. - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - self addAll: ((nodes at: 3) at: 1) to: (result at: 3). - self addAll: ((nodes at: 3) at: 2) to: (result at: 4). - result at: 5 put: (nodes at: 4). - result at: 6 put: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForconstructor_initializer1: nodes [ - | result | - result := CSConstructorInitializerNode new. - result colonToken: (nodes at: 1). - result baseToken: (nodes at: 2). - result leftParenToken: (nodes at: 3). - result addNodes: ((nodes at: 4) at: 1) to: result arguments. - result addTokens: ((nodes at: 4) at: 2) to: result commaTokens. - result rightParenToken: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForconstructor_initializer2: nodes [ - | result | - result := CSConstructorInitializerNode new. - result colonToken: (nodes at: 1). - result thisToken: (nodes at: 2). - result leftParenToken: (nodes at: 3). - result addNodes: ((nodes at: 4) at: 1) to: result arguments. - result addTokens: ((nodes at: 4) at: 2) to: result commaTokens. - result rightParenToken: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForcontinue_statement1: nodes [ - | result | - result := CSContinueStatementNode new. - result continueToken: (nodes at: 1). - result semicolonToken: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForconversion_operator_declarator1: nodes [ - | result | - result := Array new: 8. - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - result at: 4 put: (nodes at: 4). - result at: 5 put: (nodes at: 5). - result at: 6 put: (nodes at: 6). - result at: 7 put: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForconversion_operator_declarator2: nodes [ - | result | - result := Array new: 8. - result at: 8 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - result at: 4 put: (nodes at: 4). - result at: 5 put: (nodes at: 5). - result at: 6 put: (nodes at: 6). - result at: 7 put: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFordeclaration_statement1: nodes [ - | result | - result := CSDeclarationStatementNode new. - result declaration: (nodes at: 1). - result semicolonToken: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFordefault_value_expression1: nodes [ - | result | - result := CSDefaultValueExpressionNode new. - result defaultToken: (nodes at: 1). - result leftParenToken: (nodes at: 2). - result type: (nodes at: 3). - result rightParenToken: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFordelegate_creation_expression1: nodes [ - | result | - result := CSDelegateCreationExpressionNode new. - result newToken: (nodes at: 1). - result type: (nodes at: 2). - result leftParenToken: (nodes at: 3). - result expression: (nodes at: 4). - result rightParenToken: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFordelegate_declaration1: nodes [ - | result | - result := CSDelegateDeclarationNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result addTokens: (nodes at: 2) to: result modifiers. - result delegateToken: (nodes at: 3). - result type: (nodes at: 4). - result name: (nodes at: 5). - result typeParameters: (nodes at: 6). - result leftParen: (nodes at: 7). - result addNodes: ((nodes at: 8) at: 1) to: result parameters. - result addTokens: ((nodes at: 8) at: 2) to: result commas. - result rightParen: (nodes at: 9). - result addNodes: (nodes at: 10) to: result constraintClauses. - result semicolon: (nodes at: 11). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFordestructor_declaration1: nodes [ - | result | - result := CSDestructorDeclarationNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result addToken: (nodes at: 2) to: result modifiers. - result addToken: (nodes at: 3) to: result modifiers. - result tildeToken: (nodes at: 4). - result identifierToken: (nodes at: 5). - result leftParenToken: (nodes at: 6). - result rightParenToken: (nodes at: 7). - result body: (nodes at: 8). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFordo_statement1: nodes [ - | result | - result := CSDoStatementNode new. - result doToken: (nodes at: 1). - result statement: (nodes at: 2). - result whileToken: (nodes at: 3). - result leftParenToken: (nodes at: 4). - result expression: (nodes at: 5). - result rightParenToken: (nodes at: 6). - result semicolonToken: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForelement_access1: nodes [ - | result | - result := CSElementAccessNode new. - result baseExpression: (nodes at: 1). - result leftBracketToken: (nodes at: 2). - result addNodes: ((nodes at: 3) at: 1) to: result expressions. - result addTokens: ((nodes at: 3) at: 2) to: result commaTokens. - result rightBracketToken: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForelement_initializer1: nodes [ - | result | - result := CSElementInitializerNode new. - result addNode: (nodes at: 1) to: result expressions. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForelement_initializer2: nodes [ - | result | - result := CSElementInitializerNode new. - result leftBraceToken: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result expressions. - result addTokens: ((nodes at: 2) at: 2) to: result commaTokens. - result rightBraceToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForempty_statement1: nodes [ - | result | - result := CSEmptyStatementNode new. - result semicolonToken: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForenum_declaration1: nodes [ - | result | - result := CSEnumDeclarationNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result addTokens: (nodes at: 2) to: result modifiers. - result enumToken: (nodes at: 3). - result name: (nodes at: 4). - result colonToken: ((nodes at: 5) at: 1). - result typeToken: ((nodes at: 5) at: 2). - result leftBrace: ((nodes at: 6) at: 1). - result addNodes: ((nodes at: 6) at: 2) to: result declarations. - result addTokens: ((nodes at: 6) at: 3) to: result commas. - result rightBrace: ((nodes at: 6) at: 4). - result semicolon: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForenum_member_declaration1: nodes [ - | result | - result := CSEnumDeclarationNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result name: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForenum_member_declaration2: nodes [ - | result | - result := CSEnumDeclarationNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result name: (nodes at: 2). - result equal: (nodes at: 3). - result value: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForevent_declaration1: nodes [ - | result | - result := CSEventDeclarationNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result addTokens: (nodes at: 2) to: result modifiers. - result eventToken: (nodes at: 3). - result type: (nodes at: 4). - result addNodes: ((nodes at: 5) at: 1) to: result declarators. - result addTokens: ((nodes at: 5) at: 2) to: result commaTokens. - result semicolonToken: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForevent_declaration2: nodes [ - | result | - result := CSEventDeclarationNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result addTokens: (nodes at: 2) to: result modifiers. - result eventToken: (nodes at: 3). - result type: (nodes at: 4). - result name: ((nodes at: 5) at: 1). - result interface: ((nodes at: 5) at: 2). - result periodToken: ((nodes at: 5) at: 3). - result leftBraceToken: (nodes at: 6). - result addDeclaration: ((nodes at: 7) at: 1). - result removeDeclaration: ((nodes at: 7) at: 2). - result rightBraceToken: (nodes at: 8). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForexception_filter1: nodes [ - | result | - result := CSExceptionFilterNode new. - result whenToken: (nodes at: 1). - result leftParenToken: (nodes at: 2). - result expression: (nodes at: 3). - result rightParenToken: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForexplicit_anonymous_function_paramenter1: nodes [ - | result | - result := CSAnonymousFunctionParameterNode new. - result modifier: (nodes at: 1). - result type: (nodes at: 2). - result name: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForexplicit_anonymous_function_signature1: nodes [ - | result | - result := CSExplicitAnonymousFunctionSignatureNode new. - result leftParenToken: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result parameters. - result addTokens: ((nodes at: 2) at: 2) to: result commaTokens. - result rightParenToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForexpression_statement1: nodes [ - | result | - result := CSExpressionStatementNode new. - result expression: (nodes at: 1). - result semicolonToken: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForextern_alias_directive1: nodes [ - | result | - result := CSExternAliasDirectiveNode new. - result externToken: (nodes at: 1). - result aliasToken: (nodes at: 2). - result identifierToken: (nodes at: 3). - result semicolonToken: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForextern_alias_directives1: nodes [ - | result | - result := OrderedCollection new: 2. - self add: (nodes at: 1) to: result. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForextern_alias_directives2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: result. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForfield_declaration1: nodes [ - | result | - result := CSFieldDeclarationNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result addTokens: (nodes at: 2) to: result modifiers. - result type: (nodes at: 3). - result addNodes: ((nodes at: 4) at: 1) to: result declarators. - result addTokens: ((nodes at: 4) at: 2) to: result commaTokens. - result semicolonToken: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForfinally_clause1: nodes [ - | result | - result := CSFinallyClauseNode new. - result finallyToken: (nodes at: 1). - result block: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForfixed_parameter1: nodes [ - | result | - result := CSFixedParameterNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result modifier: (nodes at: 2). - result type: (nodes at: 3). - result name: (nodes at: 4). - result equalToken: ((nodes at: 5) at: 1). - result expression: ((nodes at: 5) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForfixed_pointer_declarator1: nodes [ - | result | - result := CSFixedPointerDeclaratorNode new. - result identifierToken: (nodes at: 1). - result equalToken: (nodes at: 2). - result andToken: ((nodes at: 3) at: 1). - result expression: ((nodes at: 3) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForfixed_size_buffer_declaration1: nodes [ - | result | - result := CSFixedSizeBufferDeclarationNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result addTokens: (nodes at: 2) to: result modifiers. - result fixedToken: (nodes at: 3). - result type: (nodes at: 4). - result addNodes: (nodes at: 5) to: result declarators. - result semicolonToken: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForfixed_size_buffer_declarator1: nodes [ - | result | - result := CSFixedSizeBufferDeclaratorNode new. - result name: (nodes at: 1). - result leftBracketToken: (nodes at: 2). - result expression: (nodes at: 3). - result rightBracketToken: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForfixed_statement1: nodes [ - | result | - result := CSFixedStatementNode new. - result fixedToken: (nodes at: 1). - result leftParenToken: (nodes at: 2). - result type: (nodes at: 3). - result addNodes: ((nodes at: 4) at: 1) to: result declarators. - result addTokens: ((nodes at: 4) at: 2) to: result commaTokens. - result rightParenToken: (nodes at: 5). - result statement: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForfor_initializer2: nodes [ - | result | - result := CSStatementListNode new. - result addNodes: ((nodes at: 1) at: 1) to: result expressions. - result addTokens: ((nodes at: 1) at: 2) to: result commaTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForfor_statement1: nodes [ - | result | - result := CSForStatementNode new. - result forToken: (nodes at: 1). - result leftParenToken: (nodes at: 2). - result initializer: (nodes at: 3). - result addToken: (nodes at: 4) to: result semicolonTokens. - result condition: (nodes at: 5). - result addToken: (nodes at: 6) to: result semicolonTokens. - result iterator: (nodes at: 7). - result rightParenToken: (nodes at: 8). - result statement: (nodes at: 9). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForforeach_statement1: nodes [ - | result | - result := CSForeachStatementNode new. - result foreachToken: (nodes at: 1). - result leftParenToken: (nodes at: 2). - result type: (nodes at: 3). - result name: (nodes at: 4). - result inToken: (nodes at: 5). - result expression: (nodes at: 6). - result rightParenToken: (nodes at: 7). - result statement: (nodes at: 8). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForfrom_clause1: nodes [ - | result | - result := Array new: 5. - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - result at: 4 put: (nodes at: 4). - result at: 5 put: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForgeneric_dimension_specifier1: nodes [ - | result | - result := Array new: 3. - result at: 2 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: (nodes at: 2) to: (result at: 2). - result at: 3 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForget_accessor_declaration1: nodes [ - | result | - result := CSGetAccessorDeclarationNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result addTokens: (nodes at: 2) to: result modifiers. - result getToken: (nodes at: 3). - result body: ((nodes at: 4) at: 1). - result semicolonToken: ((nodes at: 4) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForgoto_statement1: nodes [ - | result | - result := CSGotoStatementNode new. - result gotoToken: (nodes at: 1). - result identifierToken: (nodes at: 2). - result semicolonToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForgoto_statement2: nodes [ - | result | - result := CSGotoStatementNode new. - result gotoToken: (nodes at: 1). - result caseToken: (nodes at: 2). - result expression: (nodes at: 3). - result semicolonToken: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForgoto_statement3: nodes [ - | result | - result := CSGotoStatementNode new. - result gotoToken: (nodes at: 1). - result defaultToken: (nodes at: 2). - result semicolonToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForif_statement1: nodes [ - | result | - result := CSIfStatementNode new. - result ifToken: (nodes at: 1). - result leftParenToken: (nodes at: 2). - result expression: (nodes at: 3). - result rightParenToken: (nodes at: 4). - result thenStatement: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForif_statement2: nodes [ - | result | - result := CSIfStatementNode new. - result ifToken: (nodes at: 1). - result leftParenToken: (nodes at: 2). - result expression: (nodes at: 3). - result rightParenToken: (nodes at: 4). - result thenStatement: (nodes at: 5). - result elseToken: (nodes at: 6). - result elseStatement: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForimplicit_anonymous_function_signature1: nodes [ - | result | - result := CSImplicitAnonymousFunctionSignatureNode new. - result leftParenToken: (nodes at: 1). - result addTokens: ((nodes at: 2) at: 1) to: result names. - result addTokens: ((nodes at: 2) at: 2) to: result commaTokens. - result rightParenToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForimplicit_anonymous_function_signature2: nodes [ - | result | - result := CSImplicitAnonymousFunctionSignatureNode new. - result addToken: (nodes at: 1) to: result names. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForindexer_body1: nodes [ - | result | - result := Array new: 7. - result at: 1 put: (nodes at: 1). - result at: 2 put: ((nodes at: 2) at: 1). - result at: 3 put: ((nodes at: 2) at: 2). - result at: 4 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForindexer_body2: nodes [ - | result | - result := Array new: 7. - result at: 5 put: (nodes at: 1). - result at: 6 put: (nodes at: 2). - result at: 7 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForindexer_declaration1: nodes [ - | result | - result := CSIndexerDeclarationNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result addTokens: (nodes at: 2) to: result modifiers. - result returnType: ((nodes at: 3) at: 1). - result thisToken: ((nodes at: 3) at: 2). - result leftBracketToken: ((nodes at: 3) at: 3). - result addNodes: ((nodes at: 3) at: 4) to: result parameters. - result addTokens: ((nodes at: 3) at: 5) to: result commas. - result rightBracketToken: ((nodes at: 3) at: 6). - result type: ((nodes at: 3) at: 7). - result periodToken: ((nodes at: 3) at: 8). - result leftBraceToken: ((nodes at: 4) at: 1). - result getAccessor: ((nodes at: 4) at: 2). - result setAccessor: ((nodes at: 4) at: 3). - result rightBraceToken: ((nodes at: 4) at: 4). - result equalGreaterThanToken: ((nodes at: 4) at: 5). - result expression: ((nodes at: 4) at: 6). - result semicolonToken: ((nodes at: 4) at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForindexer_declarator1: nodes [ - | result | - result := Array new: 8. - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - self addAll: ((nodes at: 4) at: 1) to: (result at: 4). - self addAll: ((nodes at: 4) at: 2) to: (result at: 5). - result at: 6 put: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForindexer_declarator2: nodes [ - | result | - result := Array new: 8. - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - result at: 7 put: (nodes at: 2). - result at: 8 put: (nodes at: 3). - result at: 2 put: (nodes at: 4). - result at: 3 put: (nodes at: 5). - self addAll: ((nodes at: 6) at: 1) to: (result at: 4). - self addAll: ((nodes at: 6) at: 2) to: (result at: 5). - result at: 6 put: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForinitializer_target1: nodes [ - | result | - result := Array new: 5. - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForinitializer_target2: nodes [ - | result | - result := Array new: 5. - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 2 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 3). - self addAll: ((nodes at: 2) at: 2) to: (result at: 4). - result at: 5 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForinterface_declaration1: nodes [ - | result | - result := CSInterfaceDeclarationNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result addTokens: (nodes at: 2) to: result modifiers. - result partialToken: (nodes at: 3). - result interfaceToken: (nodes at: 4). - result name: (nodes at: 5). - result typeParameters: (nodes at: 6). - result colon: ((nodes at: 7) at: 1). - result addNodes: ((nodes at: 7) at: 2) to: result supertypes. - result addTokens: ((nodes at: 7) at: 3) to: result commas. - result addNodes: (nodes at: 8) to: result constraintClauses. - result leftBrace: ((nodes at: 9) at: 1). - result addNodes: ((nodes at: 9) at: 2) to: result declarations. - result rightBrace: ((nodes at: 9) at: 3). - result semicolon: (nodes at: 10). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForinterface_event_declaration1: nodes [ - | result | - result := CSInterfaceEventDeclarationNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result modifier: (nodes at: 2). - result eventToken: (nodes at: 3). - result type: (nodes at: 4). - result name: (nodes at: 5). - result semicolon: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForinterface_get_accessor1: nodes [ - | result | - result := CSInterfacePropertyAccessorNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result accessorType: (nodes at: 2). - result semicolon: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForinterface_indexer_declaration1: nodes [ - | result | - result := CSInterfaceIndexerDeclarationNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result modifier: (nodes at: 2). - result type: (nodes at: 3). - result thisToken: (nodes at: 4). - result leftBracket: (nodes at: 5). - result addNodes: ((nodes at: 6) at: 1) to: result parameters. - result addTokens: ((nodes at: 6) at: 2) to: result commas. - result rightBracket: (nodes at: 7). - result leftBrace: (nodes at: 8). - result getAccessor: ((nodes at: 9) at: 1). - result setAccessor: ((nodes at: 9) at: 2). - result rightBrace: (nodes at: 10). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForinterface_method_declaration1: nodes [ - | result | - result := CSInterfaceMethodDeclarationNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result modifier: (nodes at: 2). - result type: (nodes at: 3). - result name: (nodes at: 4). - result typeParameters: (nodes at: 5). - result leftParen: (nodes at: 6). - result addNodes: ((nodes at: 7) at: 1) to: result parameters. - result addTokens: ((nodes at: 7) at: 2) to: result commas. - result rightParen: (nodes at: 8). - result addNodes: (nodes at: 9) to: result constraintClauses. - result semicolon: (nodes at: 10). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForinterface_property_declaration1: nodes [ - | result | - result := CSInterfacePropertyDeclarationNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result modifier: (nodes at: 2). - result type: (nodes at: 3). - result name: (nodes at: 4). - result leftBrace: (nodes at: 5). - result getAccessor: ((nodes at: 6) at: 1). - result setAccessor: ((nodes at: 6) at: 2). - result rightBrace: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForinterpolated_regular_string1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForinterpolated_regular_string2: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - self add: (nodes at: 2) to: (result at: 1). - self addAll: ((nodes at: 3) at: 1) to: (result at: 2). - self add: ((nodes at: 3) at: 2) to: (result at: 1). - self add: (nodes at: 4) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForinterpolated_regular_string_body1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForinterpolated_regular_string_body2: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - result at: 2 put: (nodes at: 2). - self add: (nodes at: 3) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForinterpolated_string_expression1: nodes [ - | result | - result := CSInterpolatedStringExpressionNode new. - result addTokens: ((nodes at: 1) at: 1) to: result stringParts. - result addNodes: ((nodes at: 1) at: 2) to: result interpolations. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForinterpolation1: nodes [ - | result | - result := CSInterpolationNode new. - result expression: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForinterpolation2: nodes [ - | result | - result := CSInterpolationNode new. - result expression: (nodes at: 1). - result commaToken: (nodes at: 2). - result constant: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForinvocation_expression1: nodes [ - | result | - result := CSInvocationExpressionNode new. - result expression: (nodes at: 1). - result leftParenToken: (nodes at: 2). - result addNodes: ((nodes at: 3) at: 1) to: result arguments. - result addTokens: ((nodes at: 3) at: 2) to: result commaTokens. - result rightParenToken: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForjoin_clause1: nodes [ - | result | - result := Array new: 9. - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - result at: 4 put: (nodes at: 4). - result at: 5 put: (nodes at: 5). - result at: 6 put: (nodes at: 6). - result at: 7 put: (nodes at: 7). - result at: 8 put: (nodes at: 8). - result at: 9 put: (nodes at: 9). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForjoin_into_clause1: nodes [ - | result | - result := Array new: 10. - result at: 3 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - self add: (nodes at: 3) to: (result at: 3). - result at: 4 put: (nodes at: 4). - result at: 5 put: (nodes at: 5). - result at: 6 put: (nodes at: 6). - result at: 7 put: (nodes at: 7). - result at: 8 put: (nodes at: 8). - result at: 9 put: (nodes at: 9). - result at: 10 put: (nodes at: 10). - self add: (nodes at: 11) to: (result at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForlabeled_statement1: nodes [ - | result | - result := CSLabeledStatementNode new. - result identifierToken: (nodes at: 1). - result colonToken: (nodes at: 2). - result statement: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForlambda_expression1: nodes [ - | result | - result := CSLambdaExpressionNode new. - result signature: (nodes at: 1). - result equalGreaterThanToken: (nodes at: 2). - result body: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForlet_clause1: nodes [ - | result | - result := Array new: 4. - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - result at: 4 put: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForliteral1: nodes [ - | result | - result := CSBooleanLiteralExpressionNode new. - result token: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForliteral2: nodes [ - | result | - result := CSIntegerLiteralExpressionNode new. - result token: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForliteral3: nodes [ - | result | - result := CSRealLiteralExpressionNode new. - result token: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForliteral4: nodes [ - | result | - result := CSCharacterLiteralExpressionNode new. - result token: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForliteral5: nodes [ - | result | - result := CSStringLiteralExpressionNode new. - result token: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForliteral6: nodes [ - | result | - result := CSNullLiteralExpressionNode new. - result token: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForlocal_constant_declaration1: nodes [ - | result | - result := CSLocalConstantDeclarationNode new. - result constToken: (nodes at: 1). - result type: (nodes at: 2). - result addNodes: ((nodes at: 3) at: 1) to: result declarators. - result addTokens: ((nodes at: 3) at: 2) to: result commaTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForlocal_variable_declaration1: nodes [ - | result | - result := CSLocalVariableDeclarationNode new. - result type: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result declarators. - result addTokens: ((nodes at: 2) at: 2) to: result commaTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForlocal_variable_declarator1: nodes [ - | result | - result := CSLocalVariableDeclaratorNode new. - result name: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForlocal_variable_declarator2: nodes [ - | result | - result := CSLocalVariableDeclaratorNode new. - result name: (nodes at: 1). - result equalToken: (nodes at: 2). - result expression: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForlocal_variable_declarators2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 2). - self add: (nodes at: 3) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForlocal_variable_type2: nodes [ - | result | - result := CSVarTypeNode new. - result varToken: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForlock_statement1: nodes [ - | result | - result := CSLockStatementNode new. - result lockToken: (nodes at: 1). - result leftParenToken: (nodes at: 2). - result expression: (nodes at: 3). - result rightParenToken: (nodes at: 4). - result statement: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFormember_access1: nodes [ - | result | - result := CSMemberAccessNode new. - result expression: (nodes at: 1). - result periodToken: (nodes at: 2). - result identifier: (nodes at: 3). - result typeArguments: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFormember_access3: nodes [ - | result | - result := CSMemberAccessNode new. - result expression: (nodes at: 1). - result periodToken: (nodes at: 2). - result identifier: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFormember_declarator1: nodes [ - | result | - result := CSMemberDeclaratorNode new. - result name: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFormember_declarator2: nodes [ - | result | - result := CSMemberDeclaratorNode new. - result access: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFormember_declarator5: nodes [ - | result | - result := CSMemberDeclaratorNode new. - result identifierToken: (nodes at: 1). - result equalToken: (nodes at: 2). - result value: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFormember_initializer1: nodes [ - | result | - result := CSMemberInitializerNode new. - result identifier: ((nodes at: 1) at: 1). - result leftBracketToken: ((nodes at: 1) at: 2). - result addNodes: ((nodes at: 1) at: 3) to: result arguments. - result addTokens: ((nodes at: 1) at: 4) to: result commaTokens. - result rightBracketToken: ((nodes at: 1) at: 5). - result equalToken: (nodes at: 2). - result value: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFormember_name2: nodes [ - | result | - result := Array new: 3. - result at: 2 put: (nodes at: 1). - result at: 3 put: (nodes at: 2). - result at: 1 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFormethod_body1: nodes [ - | result | - result := CSMethodBodyNode new. - result block: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFormethod_body2: nodes [ - | result | - result := CSMethodBodyNode new. - result equalGreaterThanToken: (nodes at: 1). - result expression: (nodes at: 2). - result semicolonToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFormethod_body3: nodes [ - | result | - result := CSMethodBodyNode new. - result semicolonToken: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFormethod_declaration1: nodes [ - | result | - result := CSMethodDeclarationNode new. - result header: (nodes at: 1). - result body: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFormethod_header1: nodes [ - | result | - result := CSMethodHeaderNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result addTokens: (nodes at: 2) to: result modifiers. - result partialToken: (nodes at: 3). - result returnType: (nodes at: 4). - result name: ((nodes at: 5) at: 1). - result interface: ((nodes at: 5) at: 2). - result periodToken: ((nodes at: 5) at: 3). - result typeParameters: (nodes at: 6). - result leftParenToken: (nodes at: 7). - result addNodes: ((nodes at: 8) at: 1) to: result parameters. - result addTokens: ((nodes at: 8) at: 2) to: result commas. - result rightParenToken: (nodes at: 9). - result addNodes: (nodes at: 10) to: result constraintClauses. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFormultiplicative_expression4: nodes [ - | result | - result := CSBinaryExpressionNode new. - result left: (nodes at: 1). - result operator: (nodes at: 2). - result right: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFornamed_argument1: nodes [ - | result | - result := CSNamedArgumentNode new. - result name: (nodes at: 1). - result equal: (nodes at: 2). - result value: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFornamed_entity2: nodes [ - | result | - result := CSNamedEntityNode new. - result target: (nodes at: 1). - result periodToken: (nodes at: 2). - result identifierToken: (nodes at: 3). - result typeArguments: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFornamed_entity_target2: nodes [ - | result | - result := CSBaseExpressionNode new. - result baseToken: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFornameof_expression1: nodes [ - | result | - result := CSNameofExpressionNode new. - result nameofToken: (nodes at: 1). - result leftParenToken: (nodes at: 2). - result name: (nodes at: 3). - result rightParenToken: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFornamespace_body1: nodes [ - | result | - result := Array new: 4. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: (nodes at: 2) to: (result at: 2). - self addAll: (nodes at: 3) to: (result at: 2). - self addAll: (nodes at: 4) to: (result at: 3). - result at: 4 put: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFornamespace_declaration1: nodes [ - | result | - result := CSNamespaceDeclarationNode new. - result namespaceToken: (nodes at: 1). - result identifier: (nodes at: 2). - result leftBraceToken: ((nodes at: 3) at: 1). - result addNodes: ((nodes at: 3) at: 2) to: result directives. - result addNodes: ((nodes at: 3) at: 3) to: result declarations. - result rightBraceToken: ((nodes at: 3) at: 4). - result semicolon: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFornamespace_or_type_name1: nodes [ - | result | - result := CSTypeNameNode new. - result name: (nodes at: 1). - result typeArguments: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFornamespace_or_type_name2: nodes [ - | result | - result := CSTypeNameNode new. - result namespace: (nodes at: 1). - result periodToken: (nodes at: 2). - result name: (nodes at: 3). - result typeArguments: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFornull_conditional_expression1: nodes [ - | result | - result := CSNullConditionalExpressionNode new. - result expression: (nodes at: 1). - result nullConditionalOperation: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFornull_conditional_invocation_expression1: nodes [ - | result | - result := CSNullConditionalInvocationExpressionNode new. - result expression: (nodes at: 1). - result baseOperations: (nodes at: 2). - result leftParenToken: (nodes at: 3). - result addNodes: ((nodes at: 4) at: 1) to: result arguments. - result addTokens: ((nodes at: 4) at: 2) to: result commaTokens. - result rightParenToken: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFornull_conditional_member_access1: nodes [ - | result | - result := CSNullConditionalMemberAccessNode new. - result expression: (nodes at: 1). - result baseOperations: (nodes at: 2). - result questionMarkToken: (nodes at: 3). - result periodToken: (nodes at: 4). - result identifierToken: (nodes at: 5). - result typeArguments: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFornull_conditional_member_access2: nodes [ - | result | - result := CSNullConditionalMemberAccessNode new. - result expression: (nodes at: 1). - result baseOperations: (nodes at: 2). - result periodToken: (nodes at: 3). - result identifierToken: (nodes at: 4). - result typeArguments: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFornull_conditional_operations1: nodes [ - | result | - result := CSNullConditionalMemberAccessNode new. - result baseOperations: (nodes at: 1). - result questionMarkToken: (nodes at: 2). - result periodToken: (nodes at: 3). - result identifierToken: (nodes at: 4). - result typeArguments: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFornull_conditional_operations2: nodes [ - | result | - result := CSNullConditionalElementAccessNode new. - result baseOperations: (nodes at: 1). - result questionMarkToken: (nodes at: 2). - result leftBracketToken: (nodes at: 3). - result addNodes: ((nodes at: 4) at: 1) to: result arguments. - result addTokens: ((nodes at: 4) at: 2) to: result commaTokens. - result rightBracketToken: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFornull_conditional_operations3: nodes [ - | result | - result := CSNullConditionalMemberAccessNode new. - result baseOperations: (nodes at: 1). - result periodToken: (nodes at: 2). - result identifierToken: (nodes at: 3). - result typeArguments: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFornull_conditional_operations4: nodes [ - | result | - result := CSNullConditionalElementAccessNode new. - result baseOperations: (nodes at: 1). - result leftBracketToken: (nodes at: 2). - result addNodes: ((nodes at: 3) at: 1) to: result arguments. - result addTokens: ((nodes at: 3) at: 2) to: result commaTokens. - result rightBracketToken: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFornull_conditional_operations5: nodes [ - | result | - result := CSNullConditionalInvocationExpressionNode new. - result baseOperations: (nodes at: 1). - result leftParenToken: (nodes at: 2). - result addNodes: ((nodes at: 3) at: 1) to: result arguments. - result addTokens: ((nodes at: 3) at: 2) to: result commaTokens. - result rightParenToken: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFornullable_type1: nodes [ - | result | - result := CSNullableTypeNode new. - result type: (nodes at: 1). - result questionMarkToken: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForobject_creation_expression1: nodes [ - | result | - result := CSObjectCreationExpressionNode new. - result newToken: (nodes at: 1). - result type: (nodes at: 2). - result leftParenToken: (nodes at: 3). - result addNodes: ((nodes at: 4) at: 1) to: result arguments. - result addTokens: ((nodes at: 4) at: 2) to: result commaTokens. - result rightParenToken: (nodes at: 5). - result initializer: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForobject_creation_expression2: nodes [ - | result | - result := CSObjectCreationExpressionNode new. - result newToken: (nodes at: 1). - result type: (nodes at: 2). - result initializer: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForobject_initializer1: nodes [ - | result | - result := CSObjectInitializerNode new. - result leftBraceToken: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result initializers. - result addTokens: ((nodes at: 2) at: 2) to: result commaTokens. - result rightBraceToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForobject_initializer2: nodes [ - | result | - result := CSObjectInitializerNode new. - result leftBraceToken: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result initializers. - result addTokens: ((nodes at: 2) at: 2) to: result commaTokens. - result addToken: (nodes at: 3) to: result commaTokens. - result rightBraceToken: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForoperator_declaration1: nodes [ - | result | - result := CSOperatorDeclarationNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result addTokens: (nodes at: 2) to: result modifiers. - result returnType: ((nodes at: 3) at: 1). - result operatorToken: ((nodes at: 3) at: 2). - result operator: ((nodes at: 3) at: 3). - result leftParenToken: ((nodes at: 3) at: 4). - result addNodes: ((nodes at: 3) at: 5) to: result types. - result addTokens: ((nodes at: 3) at: 6) to: result arguments. - result rightParenToken: ((nodes at: 3) at: 7). - result commaToken: ((nodes at: 3) at: 8). - result implicitToken: ((nodes at: 3) at: 9). - result explicitToken: ((nodes at: 3) at: 10). - result body: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForoperator_declarator1: nodes [ - | result | - result := Array new: 10. - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 1 put: ((nodes at: 1) at: 1). - result at: 2 put: ((nodes at: 1) at: 2). - result at: 3 put: ((nodes at: 1) at: 3). - result at: 4 put: ((nodes at: 1) at: 4). - self add: ((nodes at: 1) at: 5) to: (result at: 5). - self add: ((nodes at: 1) at: 6) to: (result at: 6). - result at: 7 put: ((nodes at: 1) at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForoperator_declarator2: nodes [ - | result | - result := Array new: 10. - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 1 put: ((nodes at: 1) at: 1). - result at: 2 put: ((nodes at: 1) at: 2). - result at: 3 put: ((nodes at: 1) at: 3). - result at: 4 put: ((nodes at: 1) at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - self addAll: ((nodes at: 1) at: 6) to: (result at: 6). - result at: 8 put: ((nodes at: 1) at: 7). - result at: 7 put: ((nodes at: 1) at: 8). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForoperator_declarator3: nodes [ - | result | - result := Array new: 10. - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 9 put: ((nodes at: 1) at: 1). - result at: 2 put: ((nodes at: 1) at: 2). - result at: 1 put: ((nodes at: 1) at: 3). - result at: 4 put: ((nodes at: 1) at: 4). - self add: ((nodes at: 1) at: 5) to: (result at: 5). - self add: ((nodes at: 1) at: 6) to: (result at: 6). - result at: 7 put: ((nodes at: 1) at: 7). - result at: 10 put: ((nodes at: 1) at: 8). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFororderby_clause1: nodes [ - | result | - result := Array new: 5. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - self addAll: ((nodes at: 2) at: 3) to: (result at: 4). - self addAll: ((nodes at: 2) at: 4) to: (result at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForordering1: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (nodes at: 1). - result at: 2 put: ((nodes at: 2) at: 1). - result at: 3 put: ((nodes at: 2) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForordering_direction1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForordering_direction2: nodes [ - | result | - result := Array new: 2. - result at: 2 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFororderings1: nodes [ - | result | - result := Array new: 4. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - self add: ((nodes at: 1) at: 1) to: (result at: 1). - self add: ((nodes at: 1) at: 2) to: (result at: 2). - self add: ((nodes at: 1) at: 3) to: (result at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFororderings2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 4). - self add: ((nodes at: 3) at: 1) to: (result at: 1). - self add: ((nodes at: 3) at: 2) to: (result at: 2). - self add: ((nodes at: 3) at: 3) to: (result at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForparameter_array1: nodes [ - | result | - result := CSArrayParameterNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result paramsToken: (nodes at: 2). - result type: (nodes at: 3). - result name: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForparenthesized_expression1: nodes [ - | result | - result := nodes at: 2. - result addFirstToken: (nodes at: 1) to: result _leftParens. - result addToken: (nodes at: 3) to: result _rightParens. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForpointer_element_access1: nodes [ - | result | - result := CSPointerElementAccessNode new. - result expression: (nodes at: 1). - result leftBracketToken: (nodes at: 2). - result indexExpression: (nodes at: 3). - result rightBracketToken: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForpointer_member_access1: nodes [ - | result | - result := CSPointerMemberAccessNode new. - result expression: (nodes at: 1). - result arrowToken: (nodes at: 2). - result name: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForpointer_type1: nodes [ - | result | - result := CSPointerTypeNode new. - result type: (nodes at: 1). - result timesToken: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForpost_increment_expression1: nodes [ - | result | - result := CSPostExpressionNode new. - result expression: (nodes at: 1). - result operator: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForprimary_constraint1: nodes [ - | result | - result := CSTypeConstraintNode new. - result type: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForprimary_constraint2: nodes [ - | result | - result := CSPrimaryConstraintNode new. - result classToken: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForprimary_constraint3: nodes [ - | result | - result := CSPrimaryConstraintNode new. - result structToken: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForproperty_body1: nodes [ - | result | - result := Array new: 9. - result at: 1 put: (nodes at: 1). - result at: 2 put: ((nodes at: 2) at: 1). - result at: 3 put: ((nodes at: 2) at: 2). - result at: 4 put: (nodes at: 3). - result at: 5 put: ((nodes at: 4) at: 1). - result at: 6 put: ((nodes at: 4) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForproperty_body2: nodes [ - | result | - result := Array new: 9. - result at: 7 put: (nodes at: 1). - result at: 8 put: (nodes at: 2). - result at: 9 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForproperty_declaration1: nodes [ - | result | - result := CSPropertyDeclarationNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result addTokens: (nodes at: 2) to: result modifiers. - result type: (nodes at: 3). - result name: ((nodes at: 4) at: 1). - result interface: ((nodes at: 4) at: 2). - result periodToken: ((nodes at: 4) at: 3). - result leftBraceToken: ((nodes at: 5) at: 1). - result getAccessor: ((nodes at: 5) at: 2). - result setAccessor: ((nodes at: 5) at: 3). - result rightBraceToken: ((nodes at: 5) at: 4). - result equalToken: ((nodes at: 5) at: 5). - result initializer: ((nodes at: 5) at: 6). - result equalGreaterThanToken: ((nodes at: 5) at: 7). - result expression: ((nodes at: 5) at: 8). - result semicolon: ((nodes at: 5) at: 9). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForqualified_alias_member1: nodes [ - | result | - result := CSQualifiedAliasMemberNode new. - result global: (nodes at: 1). - result colonColonToken: (nodes at: 2). - result name: (nodes at: 3). - result typeArguments: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForqualified_alias_member_expression1: nodes [ - | result | - result := CSTypeExpressionNode new. - result type: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForqualified_identifier1: nodes [ - | result | - result := CSQualifiedIdentifierNode new. - result addToken: (nodes at: 1) to: result names. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForqualified_identifier2: nodes [ - | result | - result := nodes at: 1. - result addToken: (nodes at: 2) to: result periodTokens. - result addToken: (nodes at: 3) to: result names. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForquery_body1: nodes [ - | result | - result := Array new: 24. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - self addAll: ((nodes at: 1) at: 6) to: (result at: 6). - self addAll: ((nodes at: 1) at: 7) to: (result at: 7). - self addAll: ((nodes at: 1) at: 8) to: (result at: 8). - self addAll: ((nodes at: 1) at: 9) to: (result at: 9). - self addAll: ((nodes at: 1) at: 10) to: (result at: 10). - self addAll: ((nodes at: 1) at: 11) to: (result at: 11). - self addAll: ((nodes at: 1) at: 12) to: (result at: 12). - self addAll: ((nodes at: 1) at: 13) to: (result at: 13). - self addAll: ((nodes at: 1) at: 14) to: (result at: 14). - self addAll: ((nodes at: 1) at: 15) to: (result at: 15). - self addAll: ((nodes at: 1) at: 16) to: (result at: 16). - self addAll: ((nodes at: 1) at: 17) to: (result at: 17). - self addAll: ((nodes at: 1) at: 18) to: (result at: 18). - self addAll: ((nodes at: 1) at: 19) to: (result at: 19). - self add: ((nodes at: 2) at: 1) to: (result at: 20). - self add: ((nodes at: 2) at: 2) to: (result at: 5). - self add: ((nodes at: 2) at: 3) to: (result at: 21). - self add: ((nodes at: 2) at: 4) to: (result at: 22). - self add: ((nodes at: 2) at: 5) to: (result at: 23). - self add: ((nodes at: 2) at: 6) to: (result at: 24). - self addAll: ((nodes at: 3) at: 1) to: (result at: 15). - self addAll: ((nodes at: 3) at: 2) to: (result at: 3). - self addAll: ((nodes at: 3) at: 3) to: (result at: 1). - self addAll: ((nodes at: 3) at: 4) to: (result at: 2). - self addAll: ((nodes at: 3) at: 5) to: (result at: 4). - self addAll: ((nodes at: 3) at: 6) to: (result at: 5). - self addAll: ((nodes at: 3) at: 7) to: (result at: 6). - self addAll: ((nodes at: 3) at: 8) to: (result at: 7). - self addAll: ((nodes at: 3) at: 9) to: (result at: 8). - self addAll: ((nodes at: 3) at: 10) to: (result at: 9). - self addAll: ((nodes at: 3) at: 11) to: (result at: 10). - self addAll: ((nodes at: 3) at: 12) to: (result at: 11). - self addAll: ((nodes at: 3) at: 13) to: (result at: 12). - self addAll: ((nodes at: 3) at: 14) to: (result at: 13). - self addAll: ((nodes at: 3) at: 15) to: (result at: 14). - self addAll: ((nodes at: 3) at: 16) to: (result at: 16). - self addAll: ((nodes at: 3) at: 17) to: (result at: 17). - self addAll: ((nodes at: 3) at: 18) to: (result at: 18). - self addAll: ((nodes at: 3) at: 19) to: (result at: 19). - self addAll: ((nodes at: 3) at: 20) to: (result at: 20). - self addAll: ((nodes at: 3) at: 21) to: (result at: 21). - self addAll: ((nodes at: 3) at: 22) to: (result at: 22). - self addAll: ((nodes at: 3) at: 23) to: (result at: 23). - self addAll: ((nodes at: 3) at: 24) to: (result at: 24). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForquery_body_clause1: nodes [ - | result | - result := Array new: 19. - result at: 3 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 1 put: ((nodes at: 1) at: 1). - result at: 2 put: ((nodes at: 1) at: 2). - self add: ((nodes at: 1) at: 3) to: (result at: 3). - result at: 4 put: ((nodes at: 1) at: 4). - self add: ((nodes at: 1) at: 5) to: (result at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForquery_body_clause2: nodes [ - | result | - result := Array new: 19. - result at: 3 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 6 put: ((nodes at: 1) at: 1). - self add: ((nodes at: 1) at: 2) to: (result at: 3). - result at: 7 put: ((nodes at: 1) at: 3). - self add: ((nodes at: 1) at: 4) to: (result at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForquery_body_clause3: nodes [ - | result | - result := Array new: 19. - result at: 3 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 8 put: ((nodes at: 1) at: 1). - self add: ((nodes at: 1) at: 2) to: (result at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForquery_body_clause4: nodes [ - | result | - result := Array new: 19. - result at: 3 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 9 put: ((nodes at: 1) at: 1). - result at: 2 put: ((nodes at: 1) at: 2). - self add: ((nodes at: 1) at: 3) to: (result at: 3). - result at: 4 put: ((nodes at: 1) at: 4). - result at: 10 put: ((nodes at: 1) at: 5). - result at: 11 put: ((nodes at: 1) at: 6). - result at: 12 put: ((nodes at: 1) at: 7). - result at: 13 put: ((nodes at: 1) at: 8). - result at: 14 put: ((nodes at: 1) at: 9). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForquery_body_clause5: nodes [ - | result | - result := Array new: 19. - result at: 3 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 9 put: ((nodes at: 1) at: 1). - result at: 2 put: ((nodes at: 1) at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - result at: 4 put: ((nodes at: 1) at: 4). - result at: 10 put: ((nodes at: 1) at: 5). - result at: 11 put: ((nodes at: 1) at: 6). - result at: 12 put: ((nodes at: 1) at: 7). - result at: 13 put: ((nodes at: 1) at: 8). - result at: 14 put: ((nodes at: 1) at: 9). - result at: 15 put: ((nodes at: 1) at: 10). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForquery_body_clause6: nodes [ - | result | - result := Array new: 19. - result at: 3 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 16 put: ((nodes at: 1) at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 5). - self addAll: ((nodes at: 1) at: 3) to: (result at: 17). - self addAll: ((nodes at: 1) at: 4) to: (result at: 18). - self addAll: ((nodes at: 1) at: 5) to: (result at: 19). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForquery_body_clauses1: nodes [ - | result | - result := Array new: 19. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - self add: ((nodes at: 1) at: 1) to: (result at: 1). - self add: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self add: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - self add: ((nodes at: 1) at: 6) to: (result at: 6). - self add: ((nodes at: 1) at: 7) to: (result at: 7). - self add: ((nodes at: 1) at: 8) to: (result at: 8). - self add: ((nodes at: 1) at: 9) to: (result at: 9). - self add: ((nodes at: 1) at: 10) to: (result at: 10). - self add: ((nodes at: 1) at: 11) to: (result at: 11). - self add: ((nodes at: 1) at: 12) to: (result at: 12). - self add: ((nodes at: 1) at: 13) to: (result at: 13). - self add: ((nodes at: 1) at: 14) to: (result at: 14). - self add: ((nodes at: 1) at: 15) to: (result at: 15). - self add: ((nodes at: 1) at: 16) to: (result at: 16). - self addAll: ((nodes at: 1) at: 17) to: (result at: 17). - self addAll: ((nodes at: 1) at: 18) to: (result at: 18). - self addAll: ((nodes at: 1) at: 19) to: (result at: 19). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForquery_body_clauses2: nodes [ - | result | - result := nodes at: 1. - self add: ((nodes at: 2) at: 1) to: (result at: 1). - self add: ((nodes at: 2) at: 2) to: (result at: 2). - self addAll: ((nodes at: 2) at: 3) to: (result at: 3). - self add: ((nodes at: 2) at: 4) to: (result at: 4). - self addAll: ((nodes at: 2) at: 5) to: (result at: 5). - self add: ((nodes at: 2) at: 6) to: (result at: 6). - self add: ((nodes at: 2) at: 7) to: (result at: 7). - self add: ((nodes at: 2) at: 8) to: (result at: 8). - self add: ((nodes at: 2) at: 9) to: (result at: 9). - self add: ((nodes at: 2) at: 10) to: (result at: 10). - self add: ((nodes at: 2) at: 11) to: (result at: 11). - self add: ((nodes at: 2) at: 12) to: (result at: 12). - self add: ((nodes at: 2) at: 13) to: (result at: 13). - self add: ((nodes at: 2) at: 14) to: (result at: 14). - self add: ((nodes at: 2) at: 15) to: (result at: 15). - self add: ((nodes at: 2) at: 16) to: (result at: 16). - self addAll: ((nodes at: 2) at: 17) to: (result at: 17). - self addAll: ((nodes at: 2) at: 18) to: (result at: 18). - self addAll: ((nodes at: 2) at: 19) to: (result at: 19). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForquery_continuation1: nodes [ - | result | - result := Array new: 24. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - self add: (nodes at: 2) to: (result at: 2). - self addAll: ((nodes at: 3) at: 1) to: (result at: 3). - self addAll: ((nodes at: 3) at: 2) to: (result at: 4). - self addAll: ((nodes at: 3) at: 3) to: (result at: 2). - self addAll: ((nodes at: 3) at: 4) to: (result at: 5). - self addAll: ((nodes at: 3) at: 5) to: (result at: 6). - self addAll: ((nodes at: 3) at: 6) to: (result at: 7). - self addAll: ((nodes at: 3) at: 7) to: (result at: 8). - self addAll: ((nodes at: 3) at: 8) to: (result at: 9). - self addAll: ((nodes at: 3) at: 9) to: (result at: 10). - self addAll: ((nodes at: 3) at: 10) to: (result at: 11). - self addAll: ((nodes at: 3) at: 11) to: (result at: 12). - self addAll: ((nodes at: 3) at: 12) to: (result at: 13). - self addAll: ((nodes at: 3) at: 13) to: (result at: 14). - self addAll: ((nodes at: 3) at: 14) to: (result at: 15). - self addAll: ((nodes at: 3) at: 15) to: (result at: 1). - self addAll: ((nodes at: 3) at: 16) to: (result at: 16). - self addAll: ((nodes at: 3) at: 17) to: (result at: 17). - self addAll: ((nodes at: 3) at: 18) to: (result at: 18). - self addAll: ((nodes at: 3) at: 19) to: (result at: 19). - self addAll: ((nodes at: 3) at: 20) to: (result at: 20). - self addAll: ((nodes at: 3) at: 21) to: (result at: 21). - self addAll: ((nodes at: 3) at: 22) to: (result at: 22). - self addAll: ((nodes at: 3) at: 23) to: (result at: 23). - self addAll: ((nodes at: 3) at: 24) to: (result at: 24). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForquery_expression1: nodes [ - | result | - result := CSQueryExpressionNode new. - result addToken: ((nodes at: 1) at: 1) to: result fromTokens. - result addNode: ((nodes at: 1) at: 2) to: result types. - result addToken: ((nodes at: 1) at: 3) to: result identifierTokens. - result addToken: ((nodes at: 1) at: 4) to: result inTokens. - result addNode: ((nodes at: 1) at: 5) to: result expressions. - result addTokens: ((nodes at: 2) at: 1) to: result fromTokens. - result addNodes: ((nodes at: 2) at: 2) to: result types. - result addTokens: ((nodes at: 2) at: 3) to: result identifierTokens. - result addTokens: ((nodes at: 2) at: 4) to: result inTokens. - result addNodes: ((nodes at: 2) at: 5) to: result expressions. - result addTokens: ((nodes at: 2) at: 6) to: result letTokens. - result addTokens: ((nodes at: 2) at: 7) to: result equalTokens. - result addTokens: ((nodes at: 2) at: 8) to: result whereTokens. - result addTokens: ((nodes at: 2) at: 9) to: result joinTokens. - result addNodes: ((nodes at: 2) at: 10) to: result joinInExpressions. - result addTokens: ((nodes at: 2) at: 11) to: result onTokens. - result addNodes: ((nodes at: 2) at: 12) to: result joinOnExpressions. - result addTokens: ((nodes at: 2) at: 13) to: result equalsTokens. - result - addNodes: ((nodes at: 2) at: 14) - to: result joinEqualsExpressions. - result addTokens: ((nodes at: 2) at: 15) to: result intoTokens. - result addTokens: ((nodes at: 2) at: 16) to: result orderbyTokens. - result addTokens: ((nodes at: 2) at: 17) to: result ascendingTokens. - result addTokens: ((nodes at: 2) at: 18) to: result descendingTokens. - result addTokens: ((nodes at: 2) at: 19) to: result commaTokens. - result addTokens: ((nodes at: 2) at: 20) to: result selectTokens. - result addTokens: ((nodes at: 2) at: 21) to: result groupTokens. - result addNodes: ((nodes at: 2) at: 22) to: result groupExpressions. - result addTokens: ((nodes at: 2) at: 23) to: result byTokens. - result addNodes: ((nodes at: 2) at: 24) to: result groupByExpressions. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForrank_specifier1: nodes [ - | result | - result := CSRankSpecifierNode new. - result leftBracketToken: (nodes at: 1). - result addTokens: (nodes at: 2) to: result commaTokens. - result rightBracketToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForremove_accessor_declaration1: nodes [ - | result | - result := CSRemoveAccessorDeclarationNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result removeToken: (nodes at: 2). - result block: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForreturn_statement1: nodes [ - | result | - result := CSReturnStatementNode new. - result returnToken: (nodes at: 1). - result expression: (nodes at: 2). - result semicolonToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForselect_or_group_clause1: nodes [ - | result | - result := Array new: 6. - result at: 1 put: ((nodes at: 1) at: 1). - result at: 2 put: ((nodes at: 1) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForselect_or_group_clause2: nodes [ - | result | - result := Array new: 6. - result at: 3 put: ((nodes at: 1) at: 1). - result at: 4 put: ((nodes at: 1) at: 2). - result at: 5 put: ((nodes at: 1) at: 3). - result at: 6 put: ((nodes at: 1) at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForset_accessor_declaration1: nodes [ - | result | - result := CSSetAccessorDeclarationNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result addTokens: (nodes at: 2) to: result modifiers. - result setToken: (nodes at: 3). - result body: ((nodes at: 4) at: 1). - result semicolonToken: ((nodes at: 4) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForsimple_name1: nodes [ - | result | - result := CSSimpleNameNode new. - result identifierToken: (nodes at: 1). - result typeArguments: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForsimple_type2: nodes [ - | result | - result := CSSimpleTypeNode new. - result token: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForsizeof_expression1: nodes [ - | result | - result := CSSizeofExpressionNode new. - result sizeofToken: (nodes at: 1). - result leftParenToken: (nodes at: 2). - result type: (nodes at: 3). - result rightParenToken: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForstackalloc_initializer1: nodes [ - | result | - result := CSStackallocInitializerNode new. - result stackallocToken: (nodes at: 1). - result type: (nodes at: 2). - result leftBracketToken: (nodes at: 3). - result expression: (nodes at: 4). - result rightBracketToken: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForstatic_constructor_declaration1: nodes [ - | result | - result := CSStaticConstructorDeclarationNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result addTokens: ((nodes at: 2) at: 1) to: result modifiers. - result staticToken: ((nodes at: 2) at: 2). - result unsafeToken: ((nodes at: 2) at: 3). - result identifierToken: (nodes at: 3). - result leftParenToken: (nodes at: 4). - result rightParenToken: (nodes at: 5). - result block: ((nodes at: 6) at: 1). - result semicolonToken: ((nodes at: 6) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForstatic_constructor_modifiers1: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - result at: 2 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForstatic_constructor_modifiers2: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (nodes at: 1). - self add: (nodes at: 2) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForstatic_constructor_modifiers3: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - self add: (nodes at: 2) to: (result at: 1). - result at: 2 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForstatic_constructor_modifiers5: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForstatic_constructor_modifiers6: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - result at: 2 put: (nodes at: 2). - self add: (nodes at: 3) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForstatic_constructor_modifiers7: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (nodes at: 1). - self add: (nodes at: 2) to: (result at: 1). - self add: (nodes at: 3) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForstruct_declaration1: nodes [ - | result | - result := CSStructDeclarationNode new. - result addNodes: (nodes at: 1) to: result _attributes. - result addTokens: (nodes at: 2) to: result modifiers. - result partialToken: (nodes at: 3). - result structToken: (nodes at: 4). - result identifierToken: (nodes at: 5). - result typeParameters: (nodes at: 6). - result colonToken: ((nodes at: 7) at: 1). - result addNodes: ((nodes at: 7) at: 2) to: result supertypes. - result addTokens: ((nodes at: 7) at: 3) to: result commas. - result addNodes: (nodes at: 8) to: result constraintClauses. - result leftBraceToken: ((nodes at: 9) at: 1). - result addNodes: ((nodes at: 9) at: 2) to: result declarations. - result rightBraceToken: ((nodes at: 9) at: 3). - result semicolon: (nodes at: 10). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForstruct_interfaces1: nodes [ - | result | - result := Array new: 3. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForswitch_label1: nodes [ - | result | - result := CSSwitchLabelNode new. - result caseToken: (nodes at: 1). - result expression: (nodes at: 2). - result colonToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForswitch_label2: nodes [ - | result | - result := CSSwitchLabelNode new. - result defaultToken: (nodes at: 1). - result colonToken: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForswitch_section1: nodes [ - | result | - result := CSSwitchSectionNode new. - result addNodes: (nodes at: 1) to: result labels. - result addNodes: (nodes at: 2) to: result statements. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForswitch_statement1: nodes [ - | result | - result := CSSwitchStatementNode new. - result switchToken: (nodes at: 1). - result leftParenToken: (nodes at: 2). - result expression: (nodes at: 3). - result rightParenToken: (nodes at: 4). - result leftBraceToken: ((nodes at: 5) at: 1). - result addNodes: ((nodes at: 5) at: 2) to: result sections. - result rightBraceToken: ((nodes at: 5) at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForthis_access1: nodes [ - | result | - result := CSThisAccessNode new. - result thisToken: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForthrow_statement1: nodes [ - | result | - result := CSThrowStatementNode new. - result throwToken: (nodes at: 1). - result expression: (nodes at: 2). - result semicolonToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFortry_statement1: nodes [ - | result | - result := CSTryStatementNode new. - result tryToken: (nodes at: 1). - result block: (nodes at: 2). - result addNodes: (nodes at: 3) to: result clauses. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFortry_statement2: nodes [ - | result | - result := CSTryStatementNode new. - result tryToken: (nodes at: 1). - result block: (nodes at: 2). - result finally: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFortry_statement3: nodes [ - | result | - result := CSTryStatementNode new. - result tryToken: (nodes at: 1). - result block: (nodes at: 2). - result addNodes: (nodes at: 3) to: result clauses. - result finally: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFortype_argument_list1: nodes [ - | result | - result := CSTypeArgumentListNode new. - result lessThanToken: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result types. - result addTokens: ((nodes at: 2) at: 2) to: result commaTokens. - result greaterThanToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFortype_parameter1: nodes [ - | result | - result := CSTypeNameNode new. - result name: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFortype_parameter_constraints4: nodes [ - | result | - result := nodes at: 3. - self addFirst: (nodes at: 1) to: (result at: 1). - self addFirst: (nodes at: 2) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFortype_parameter_constraints5: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - self add: (nodes at: 2) to: (result at: 2). - self add: (nodes at: 3) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFortype_parameter_constraints7: nodes [ - | result | - result := nodes at: 3. - self addFirst: (nodes at: 1) to: (result at: 1). - self addFirst: (nodes at: 2) to: (result at: 2). - self add: (nodes at: 4) to: (result at: 2). - self add: (nodes at: 5) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFortype_parameter_constraints_clause1: nodes [ - | result | - result := CSTypeParameterConstraintsClauseNode new. - result whereToken: (nodes at: 1). - result parameter: (nodes at: 2). - result colon: (nodes at: 3). - result addNodes: ((nodes at: 4) at: 1) to: result constraints. - result addTokens: ((nodes at: 4) at: 2) to: result commaTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFortype_parameter_list1: nodes [ - | result | - result := CSTypeParameterListNode new. - result lessThan: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result _attributes. - result addNodes: ((nodes at: 2) at: 2) to: result parameters. - result addTokens: ((nodes at: 2) at: 3) to: result commaTokens. - result greaterThan: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFortype_parameters1: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - self addAll: (nodes at: 1) to: (result at: 1). - self add: (nodes at: 2) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFortype_parameters2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 3). - self addAll: (nodes at: 3) to: (result at: 1). - self add: (nodes at: 4) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionFortypeof_expression1: nodes [ - | result | - result := CSTypeofExpressionNode new. - result typeofToken: (nodes at: 1). - result leftParenToken: (nodes at: 2). - result type: (nodes at: 3). - result rightParenToken: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForunary_expression5: nodes [ - | result | - result := CSPrefixExpressionNode new. - result operator: (nodes at: 1). - result expression: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForunary_operator_declarator1: nodes [ - | result | - result := Array new: 7. - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - result at: 4 put: (nodes at: 4). - result at: 5 put: (nodes at: 5). - result at: 6 put: (nodes at: 6). - result at: 7 put: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForunbound_type_name1: nodes [ - | result | - result := CSUnboundTypeNameNode new. - result addToken: (nodes at: 1) to: result identifierTokens. - result addToken: ((nodes at: 2) at: 1) to: result lessThanTokens. - result addTokens: ((nodes at: 2) at: 2) to: result commas. - result addToken: ((nodes at: 2) at: 3) to: result gtTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForunbound_type_name2: nodes [ - | result | - result := CSUnboundTypeNameNode new. - result addToken: (nodes at: 1) to: result identifierTokens. - result colonColonToken: (nodes at: 2). - result addToken: (nodes at: 3) to: result identifierTokens. - result addToken: ((nodes at: 4) at: 1) to: result lessThanTokens. - result addTokens: ((nodes at: 4) at: 2) to: result commas. - result addToken: ((nodes at: 4) at: 3) to: result gtTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForunbound_type_name3: nodes [ - | result | - result := nodes at: 1. - result addToken: (nodes at: 2) to: result periodTokens. - result addToken: (nodes at: 3) to: result identifierTokens. - result addToken: ((nodes at: 4) at: 1) to: result lessThanTokens. - result addTokens: ((nodes at: 4) at: 2) to: result commas. - result addToken: ((nodes at: 4) at: 3) to: result gtTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForunchecked_expression1: nodes [ - | result | - result := CSUncheckedExpressionNode new. - result uncheckedToken: (nodes at: 1). - result leftParenToken: (nodes at: 2). - result expression: (nodes at: 3). - result rightParenToken: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForunchecked_statement1: nodes [ - | result | - result := CSUncheckedStatementNode new. - result uncheckedToken: (nodes at: 1). - result block: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForunsafe_statement1: nodes [ - | result | - result := CSUnsafeStatementNode new. - result unsafeToken: (nodes at: 1). - result block: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForusing_alias_directive1: nodes [ - | result | - result := CSUsingAliasDirectiveNode new. - result usingToken: (nodes at: 1). - result name: (nodes at: 2). - result equalToken: (nodes at: 3). - result namespace: (nodes at: 4). - result semicolonToken: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForusing_namespace_directive1: nodes [ - | result | - result := CSUsingNamespaceDirectiveNode new. - result usingToken: (nodes at: 1). - result namespace: (nodes at: 2). - result semicolonToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForusing_statement1: nodes [ - | result | - result := CSUsingStatementNode new. - result usingToken: (nodes at: 1). - result leftParenToken: (nodes at: 2). - result expression: (nodes at: 3). - result rightParenToken: (nodes at: 4). - result statement: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForusing_static_directive1: nodes [ - | result | - result := CSUsingStaticDirectiveNode new. - result usingToken: (nodes at: 1). - result staticToken: (nodes at: 2). - result namespace: (nodes at: 3). - result semicolonToken: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForvariable_declarator1: nodes [ - | result | - result := CSVariableDeclaratorNode new. - result identifierToken: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForvariable_declarator2: nodes [ - | result | - result := CSVariableDeclaratorNode new. - result identifierToken: (nodes at: 1). - result equalToken: (nodes at: 2). - result initializer: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForvariant_type_parameter_list1: nodes [ - | result | - result := CSVariantTypeParameterListNode new. - result lessThan: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result _attributes. - result addTokens: ((nodes at: 2) at: 2) to: result annotations. - result addNodes: ((nodes at: 2) at: 3) to: result parameters. - result addTokens: ((nodes at: 2) at: 4) to: result commaTokens. - result greaterThan: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForvariant_type_parameters1: nodes [ - | result | - result := Array new: 4. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - self addAll: (nodes at: 1) to: (result at: 1). - self add: (nodes at: 2) to: (result at: 2). - self add: (nodes at: 3) to: (result at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForvariant_type_parameters2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 4). - self addAll: (nodes at: 3) to: (result at: 1). - self add: (nodes at: 4) to: (result at: 2). - self add: (nodes at: 5) to: (result at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForvoid_type1: nodes [ - | result | - result := CSVoidTypeNode new. - result voidToken: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForwhile_statement1: nodes [ - | result | - result := CSWhileStatementNode new. - result whileToken: (nodes at: 1). - result leftParenToken: (nodes at: 2). - result expression: (nodes at: 3). - result rightParenToken: (nodes at: 4). - result statement: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForyield_statement1: nodes [ - | result | - result := CSYieldStatementNode new. - result yieldToken: (nodes at: 1). - result returnToken: (nodes at: 2). - result expression: (nodes at: 3). - result semicolonToken: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -CSharpParser >> reduceActionForyield_statement2: nodes [ - | result | - result := CSYieldStatementNode new. - result yieldToken: (nodes at: 1). - result breakToken: (nodes at: 2). - result semicolonToken: (nodes at: 3). - ^ result -] - -{ #category : #private } -CSharpParser >> tryAllTokens [ - | id ids | - id := scanner IdentifierId. - ids := currentToken ids. - ^ (ids includes: id) - ifTrue: - [ ids first = id - ifTrue: [ ^ false ]. - ^ (self class keywords includes: currentToken value) not ] - ifFalse: [ ^ false ] -] diff --git a/src/SmaCC_CSharp/CSharpScanner.class.st b/src/SmaCC_CSharp/CSharpScanner.class.st deleted file mode 100644 index efed338f7..000000000 --- a/src/SmaCC_CSharp/CSharpScanner.class.st +++ /dev/null @@ -1,1012 +0,0 @@ -Class { - #name : #CSharpScanner, - #superclass : #SmaCCScanner, - #category : #'SmaCC_CSharp' -} - -{ #category : #'generated-initialization' } -CSharpScanner class >> initializeKeywordMap [ - keywordMap := Dictionary new. - #(#(157 'abstract' #(41 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'add' #(42 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'alias' #(43 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'as' #(44 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'ascending' #(45 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'assembly' #(46 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'await' #(47 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'base' #(48 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'bool' #(49 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'break' #(50 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'by' #(51 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'byte' #(52 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'case' #(53 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'catch' #(54 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'char' #(55 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'checked' #(56 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'class' #(57 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'const' #(58 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'continue' #(59 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'decimal' #(60 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'default' #(61 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'delegate' #(62 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'descending' #(63 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'do' #(64 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'double' #(65 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'else' #(66 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'enum' #(67 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'equals' #(68 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'event' #(69 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'explicit' #(70 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'extern' #(71 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'false' #(72 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'field' #(73 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'finally' #(74 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'fixed' #(75 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'float' #(76 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'for' #(77 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'foreach' #(78 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'from' #(79 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'get' #(80 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'goto' #(81 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'group' #(82 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'if' #(83 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'implicit' #(84 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'in' #(85 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'int' #(86 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'interface' #(87 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'internal' #(88 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'into' #(89 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'is' #(90 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'join' #(91 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'let' #(92 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'lock' #(93 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'long' #(94 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'method' #(95 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'module' #(96 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'nameof' #(97 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'namespace' #(98 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'new' #(99 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'null' #(170 #(#default))) #(157 'object' #(100 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'on' #(101 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'operator' #(102 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'orderby' #(103 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'out' #(104 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'override' #(105 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'param' #(106 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'params' #(107 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'partial' #(108 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'private' #(109 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'property' #(110 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'protected' #(111 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'public' #(112 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'readonly' #(113 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'ref' #(114 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'remove' #(115 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'return' #(116 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'sbyte' #(117 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'sealed' #(118 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'select' #(119 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'set' #(120 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'short' #(121 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'sizeof' #(122 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'stackalloc' #(123 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'static' #(124 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'string' #(125 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'struct' #(126 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'switch' #(127 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'this' #(128 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'throw' #(129 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'true' #(130 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'try' #(131 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'type' #(132 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'typeof' #(133 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'uint' #(134 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'ulong' #(135 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'unchecked' #(136 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'unsafe' #(137 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'ushort' #(138 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'using' #(139 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'var' #(140 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'virtual' #(141 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'void' #(142 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'volatile' #(143 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'when' #(144 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'where' #(145 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'while' #(146 #(#default #interpolatedString #interpolatedVerbatimString))) #(157 'yield' #(147 #(#default #interpolatedString #interpolatedVerbatimString)))) - do: [ :each | - (keywordMap at: each first ifAbsentPut: [ Dictionary new ]) - at: (each at: 2) - put: each last ]. - ^ keywordMap -] - -{ #category : #generated } -CSharpScanner >> IdentifierId [ - ^ 157 -] - -{ #category : #generated } -CSharpScanner >> emptySymbolTokenId [ - ^ 612 -] - -{ #category : #generated } -CSharpScanner >> errorTokenId [ - ^ 613 -] - -{ #category : #generated } -CSharpScanner >> gtId [ - ^ 153 -] - -{ #category : #generated } -CSharpScanner >> gtgtId [ - ^ 154 -] - -{ #category : #generated } -CSharpScanner >> rightBraceId [ - ^ 155 -] - -{ #category : #generated } -CSharpScanner >> scan1 [ - self step. - currentCharacter == $! - ifTrue: [ ^ self scan2 ]. - currentCharacter == $" - ifTrue: [ ^ self scan3 ]. - currentCharacter == $# - ifTrue: - [ ^ self scan1X4 ]. - currentCharacter == $$ - ifTrue: - [ ^ self scan1X9 ]. - currentCharacter == $% - ifTrue: [ ^ self scan8 ]. - currentCharacter == $& - ifTrue: [ ^ self scan9 ]. - currentCharacter == $' - ifTrue: - [ ^ self scan1X1 ]. - currentCharacter == $( - ifTrue: [ ^ self recordAndReportMatch: #(8) ]. - currentCharacter == $) - ifTrue: [ ^ self recordAndReportMatch: #(9) ]. - currentCharacter == $* - ifTrue: [ ^ self scan11 ]. - currentCharacter == $+ - ifTrue: [ ^ self scan12 ]. - ^ self scan1X12 -] - -{ #category : #generated } -CSharpScanner >> scan10 [ - self step. - currentCharacter == $' - ifTrue: [ ^ self recordAndReportMatch: #(160) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan11 [ - self recordMatch: #(10). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(11) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan12 [ - self recordMatch: #(12). - self step. - currentCharacter == $+ - ifTrue: [ ^ self recordAndReportMatch: #(13) ]. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(14) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan13 [ - self recordMatch: #(16). - self step. - currentCharacter == $- - ifTrue: [ ^ self recordAndReportMatch: #(17) ]. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(18) ]. - currentCharacter == $> - ifTrue: [ ^ self recordAndReportMatch: #(19) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan14 [ - [ self recordMatch: #(159). - self step. - currentCharacter isDigit ] whileTrue. - ('Ee' includes: currentCharacter) - ifTrue: [ ^ self scan15 ]. - ('DFMdfm' includes: currentCharacter) - ifTrue: [ ^ self recordAndReportMatch: #(159) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan15 [ - self step. - ('+-' includes: currentCharacter) - ifTrue: [ self step ]. - currentCharacter isDigit - ifTrue: [ ^ self scan16 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan16 [ - [ self recordMatch: #(159). - self step. - currentCharacter isDigit ] whileTrue. - ('DFMdfm' includes: currentCharacter) - ifTrue: [ ^ self recordAndReportMatch: #(159) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan17 [ - [ self step. - currentCharacter == $* - ifTrue: [ [ self step. - currentCharacter == $* ] whileTrue. - currentCharacter == $/ - ifTrue: [ ^ self recordAndReportMatch: #(156) ]. - ^ self scan17 ]. - true ] whileTrue -] - -{ #category : #generated } -CSharpScanner >> scan18 [ - self step. - currentCharacter isDigit - ifTrue: [ ^ self scan14 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan19 [ - [ self recordMatch: #(158 159). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan18 ]. - currentCharacter isDigit ] whileTrue. - ('Ee' includes: currentCharacter) - ifTrue: [ ^ self scan15 ]. - ('Ll' includes: currentCharacter) - ifTrue: [ ^ self scan20 ]. - ('Uu' includes: currentCharacter) - ifTrue: [ ^ self scan21 ]. - ('DFMdfm' includes: currentCharacter) - ifTrue: [ ^ self recordAndReportMatch: #(159) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan1X1 [ - self step. - currentCharacter == $\ - ifTrue: [ self step. - currentCharacter == $x - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - currentCharacter == $' - ifTrue: [ ^ self recordAndReportMatch: #(160) ]. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - currentCharacter == $' - ifTrue: [ ^ self recordAndReportMatch: #(160) ]. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - currentCharacter == $' - ifTrue: [ ^ self recordAndReportMatch: #(160) ]. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ ^ self scan10 ] ] ] ]. - ^ self reportLastMatch ]. - ('Uu' includes: currentCharacter) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - currentCharacter == $' - ifTrue: [ ^ self recordAndReportMatch: #(160) ]. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ ^ self scan10 ] ] ] ] ] ] ] ]. - ^ self reportLastMatch ]. - (('"''0\' includes: currentCharacter) - or: [ (currentCharacter between: $a and: $b) - or: - [ 'fnrtv' includes: currentCharacter ] ]) - ifTrue: [ ^ self scan10 ]. - ^ self reportLastMatch ]. - (currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: $&) - or: [ (currentCharacter between: $( and: $[) - or: [ currentCharacter >= $] ] ] ]) - ifTrue: [ ^ self scan10 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan1X10 [ - self recordMatch: #(20). - self step. - currentCharacter isDigit - ifTrue: [ ^ self scan14 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan1X11 [ - currentCharacter == $[ - ifTrue: [ ^ self recordAndReportMatch: #(37) ]. - currentCharacter == $] - ifTrue: [ ^ self recordAndReportMatch: #(38) ]. - currentCharacter == $^ - ifTrue: [ ^ self scan27 ]. - currentCharacter == $` - ifTrue: [ ^ self scan28 ]. - currentCharacter == ${ - ifTrue: [ ^ self recordAndReportMatch: #(148) ]. - currentCharacter == $| - ifTrue: [ ^ self scan29 ]. - currentCharacter == $} - ifTrue: [ ^ self recordAndReportMatch: #(155) ]. - currentCharacter == $~ - ifTrue: [ ^ self recordAndReportMatch: #(152) ]. - currentCharacter isDigit - ifTrue: [ ^ self scan19 ]. - (currentCharacter isSeparator - or: [ currentCharacter == Character pageUp ]) - ifTrue: - [ ^ self scan1X7 ]. - (currentCharacter isLetter or: [ currentCharacter == $_ ]) - ifTrue: - [ self scan1X8 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan1X12 [ - currentCharacter == $, - ifTrue: [ ^ self recordAndReportMatch: #(15) ]. - currentCharacter == $- - ifTrue: [ ^ self scan13 ]. - currentCharacter == $. - ifTrue: - [ ^ self scan1X10 ]. - currentCharacter == $/ - ifTrue: - [ ^ self scan1X3 ]. - currentCharacter == $0 - ifTrue: - [ ^ self scan1X2 ]. - currentCharacter == $: - ifTrue: [ ^ self scan22 ]. - currentCharacter == $; - ifTrue: [ ^ self recordAndReportMatch: #(25) ]. - currentCharacter == $< - ifTrue: [ ^ self scan23 ]. - currentCharacter == $= - ifTrue: [ ^ self scan24 ]. - currentCharacter == $> - ifTrue: - [ ^ self scan1X6 ]. - currentCharacter == $? - ifTrue: [ ^ self scan25 ]. - currentCharacter == $@ - ifTrue: - [ ^ self scan1X5 ]. - ^ self scan1X11 -] - -{ #category : #generated } -CSharpScanner >> scan1X2 [ - self recordMatch: #(158 159). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan18 ]. - currentCharacter isDigit - ifTrue: [ ^ self scan19 ]. - ('Ee' includes: currentCharacter) - ifTrue: [ ^ self scan15 ]. - ('Ll' includes: currentCharacter) - ifTrue: [ ^ self scan20 ]. - ('Uu' includes: currentCharacter) - ifTrue: [ ^ self scan21 ]. - ('Xx' includes: currentCharacter) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ [ self recordMatch: #(158). - self step. - ('Ll' includes: currentCharacter) - ifTrue: [ ^ self scan20 ]. - ('Uu' includes: currentCharacter) - ifTrue: [ ^ self scan21 ]. - currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ] ] whileTrue ]. - ^ self reportLastMatch ]. - ('DFMdfm' includes: currentCharacter) - ifTrue: [ ^ self recordAndReportMatch: #(159) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan1X3 [ - self recordMatch: #(21). - self step. - currentCharacter == $* - ifTrue: [ ^ self scan17 ]. - currentCharacter == $/ - ifTrue: [ [ self recordMatch: #(156). - self step. - currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: Character newPage) - or: [ currentCharacter >= (Character value: 14) ] ] ] whileTrue. - ^ self reportLastMatch ]. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(22) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan1X4 [ - [ self recordMatch: #(171). - self step. - currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: Character newPage) - or: [ currentCharacter >= (Character value: 14) ] ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan1X5 [ - self step. - currentCharacter == $" - ifTrue: [ ^ self scan26 ]. - (currentCharacter isLetter or: [ currentCharacter == $_ ]) - ifTrue: [ [ self recordMatch: #(157). - self step. - currentCharacter isAlphaNumeric or: [ currentCharacter == $_ ] ] - whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan1X6 [ - self recordMatch: #(153). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(33) ]. - currentCharacter == $> - ifTrue: [ self recordMatch: #(154). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(34) ] ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan1X7 [ - [ self recordMatch: #(171). - self step. - currentCharacter isSeparator - or: [ currentCharacter == Character pageUp ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan1X8 [ - [ self recordMatch: #(157). - self step. - currentCharacter isAlphaNumeric or: [ currentCharacter == $_ ] ] - whileTrue -] - -{ #category : #generated } -CSharpScanner >> scan1X9 [ - self step. - currentCharacter == $" - ifTrue: [ ^ self scan5 ]. - currentCharacter == $@ - ifTrue: [ self step. - currentCharacter == $" - ifTrue: [ ^ self scan7 ] ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan2 [ - self recordMatch: #(1). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(2) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan20 [ - self recordMatch: #(158). - self step. - ('Uu' includes: currentCharacter) - ifTrue: [ ^ self recordAndReportMatch: #(158) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan21 [ - self recordMatch: #(158). - self step. - ('Ll' includes: currentCharacter) - ifTrue: [ ^ self recordAndReportMatch: #(158) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan22 [ - self recordMatch: #(23). - self step. - currentCharacter == $: - ifTrue: [ ^ self recordAndReportMatch: #(24) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan23 [ - self recordMatch: #(26). - self step. - currentCharacter == $< - ifTrue: [ self recordMatch: #(27). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(28) ]. - ^ self reportLastMatch ]. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(29) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan24 [ - self recordMatch: #(30). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(31) ]. - currentCharacter == $> - ifTrue: [ ^ self recordAndReportMatch: #(32) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan25 [ - self recordMatch: #(35). - self step. - currentCharacter == $? - ifTrue: [ ^ self recordAndReportMatch: #(36) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan26 [ - [ self step. - currentCharacter == $" - ifTrue: [ self recordMatch: #(169). - self step. - currentCharacter == $" - ifTrue: [ ^ self scan26 ]. - ^ self reportLastMatch ]. - true ] whileTrue -] - -{ #category : #generated } -CSharpScanner >> scan27 [ - self recordMatch: #(39). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(40) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan28 [ - [ self step. - currentCharacter == $` - ifTrue: [ self recordMatch: #(172). - self step. - currentCharacter == $` - ifTrue: [ ^ self scan28 ]. - ^ self reportLastMatch ]. - true ] whileTrue -] - -{ #category : #generated } -CSharpScanner >> scan29 [ - self recordMatch: #(149). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(150) ]. - currentCharacter == $| - ifTrue: [ ^ self recordAndReportMatch: #(151) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan3 [ - [ self step. - currentCharacter == $" - ifTrue: [ ^ self recordAndReportMatch: #(169) ]. - currentCharacter == $\ - ifTrue: - [ ^ self scan3X1 ]. - currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: $!) - or: [ (currentCharacter between: $# and: $[) - or: [ currentCharacter >= $] ] ] ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan30 [ - self recordMatch: #(21). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(22) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan31 [ - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(33) ]. - currentCharacter == $> - ifTrue: [ self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(34) ] ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan32 [ - self step. - (currentCharacter isLetter or: [ currentCharacter == $_ ]) - ifTrue: [ [ self recordMatch: #(157). - self step. - currentCharacter isAlphaNumeric or: [ currentCharacter == $_ ] ] - whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan33 [ - [ self step. - currentCharacter == $" - ifTrue: [ ^ self recordAndReportMatch: #(163) ]. - currentCharacter == $\ - ifTrue: - [ ^ self scan33X1 ]. - currentCharacter == ${ - ifTrue: [ self recordMatch: #(164). - self step. - currentCharacter == ${ - ifTrue: [ ^ self scan33 ]. - ^ self reportLastMatch ]. - currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: $!) - or: [ (currentCharacter between: $# and: $[) - or: [ (currentCharacter between: $] and: $z) - or: [ currentCharacter >= $| ] ] ] ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan33X1 [ - self step. - currentCharacter == $x - ifTrue: [ ^ self scan34 ]. - ('Uu' includes: currentCharacter) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ ^ self scan34 ] ] ]. - ^ self reportLastMatch ]. - (('"''0\' includes: currentCharacter) - or: [ (currentCharacter between: $a and: $b) - or: - [ 'fnrtv' includes: currentCharacter ] ]) - ifTrue: [ ^ self scan33 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan34 [ - self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ ^ self scan33 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan35 [ - [ self step. - currentCharacter == $" - ifTrue: [ self recordMatch: #(167). - self step. - currentCharacter == $" - ifTrue: [ ^ self scan35 ]. - ^ self reportLastMatch ]. - currentCharacter == ${ - ifTrue: [ self recordMatch: #(168). - self step. - currentCharacter == ${ - ifTrue: [ ^ self scan35 ]. - ^ self reportLastMatch ]. - true ] whileTrue -] - -{ #category : #generated } -CSharpScanner >> scan3X1 [ - self step. - currentCharacter == $x - ifTrue: [ ^ self scan4 ]. - ('Uu' includes: currentCharacter) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ ^ self scan4 ] ] ]. - ^ self reportLastMatch ]. - (('"''0\' includes: currentCharacter) - or: [ (currentCharacter between: $a and: $b) - or: - [ 'fnrtv' includes: currentCharacter ] ]) - ifTrue: [ ^ self scan3 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan4 [ - self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ ^ self scan3 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan5 [ - [ self step. - currentCharacter == $" - ifTrue: [ ^ self recordAndReportMatch: #(161) ]. - currentCharacter == $\ - ifTrue: - [ ^ self scan5X1 ]. - currentCharacter == ${ - ifTrue: [ self recordMatch: #(162). - self step. - currentCharacter == ${ - ifTrue: [ ^ self scan5 ]. - ^ self reportLastMatch ]. - currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: $!) - or: [ (currentCharacter between: $# and: $[) - or: [ (currentCharacter between: $] and: $z) - or: [ currentCharacter >= $| ] ] ] ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan5X1 [ - self step. - currentCharacter == $x - ifTrue: [ ^ self scan6 ]. - ('Uu' includes: currentCharacter) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ ^ self scan6 ] ] ]. - ^ self reportLastMatch ]. - (('"''0\' includes: currentCharacter) - or: [ (currentCharacter between: $a and: $b) - or: - [ 'fnrtv' includes: currentCharacter ] ]) - ifTrue: [ ^ self scan5 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan6 [ - self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ ^ self scan5 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan7 [ - [ self step. - currentCharacter == $" - ifTrue: [ self recordMatch: #(165). - self step. - currentCharacter == $" - ifTrue: [ ^ self scan7 ]. - ^ self reportLastMatch ]. - currentCharacter == ${ - ifTrue: [ self recordMatch: #(166). - self step. - currentCharacter == ${ - ifTrue: [ ^ self scan7 ]. - ^ self reportLastMatch ]. - true ] whileTrue -] - -{ #category : #generated } -CSharpScanner >> scan8 [ - self recordMatch: #(3). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(4) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scan9 [ - self recordMatch: #(5). - self step. - currentCharacter == $& - ifTrue: [ ^ self recordAndReportMatch: #(6) ]. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(7) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scanForToken [ - scope == #interpolatedString - ifTrue: - [ ^ self scanForTokenX2 ]. - scope == #interpolatedVerbatimString - ifTrue: - [ ^ self scanForTokenX1 ]. - scope == #default - ifTrue: [ ^ self scan1 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scanForTokenX1 [ - self step. - currentCharacter == $! - ifTrue: [ ^ self scan2 ]. - currentCharacter == $% - ifTrue: [ ^ self scan8 ]. - currentCharacter == $& - ifTrue: [ ^ self scan9 ]. - currentCharacter == $( - ifTrue: [ ^ self recordAndReportMatch: #(8) ]. - ^ self scanForTokenX1X3 -] - -{ #category : #generated } -CSharpScanner >> scanForTokenX1X1 [ - [ self recordMatch: #(157). - self step. - currentCharacter isAlphaNumeric or: [ currentCharacter == $_ ] ] - whileTrue -] - -{ #category : #generated } -CSharpScanner >> scanForTokenX1X2 [ - currentCharacter == $? - ifTrue: [ ^ self scan25 ]. - currentCharacter == $@ - ifTrue: [ ^ self scan32 ]. - currentCharacter == $[ - ifTrue: [ ^ self recordAndReportMatch: #(37) ]. - currentCharacter == $] - ifTrue: [ ^ self recordAndReportMatch: #(38) ]. - currentCharacter == $^ - ifTrue: [ ^ self scan27 ]. - currentCharacter == $` - ifTrue: [ ^ self scan28 ]. - currentCharacter == ${ - ifTrue: [ ^ self recordAndReportMatch: #(148) ]. - currentCharacter == $| - ifTrue: [ ^ self scan29 ]. - currentCharacter == $} - ifTrue: [ ^ self scan35 ]. - currentCharacter == $~ - ifTrue: [ ^ self recordAndReportMatch: #(152) ]. - (currentCharacter isLetter or: [ currentCharacter == $_ ]) - ifTrue: - [ self scanForTokenX1X1 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scanForTokenX1X3 [ - currentCharacter == $) - ifTrue: [ ^ self recordAndReportMatch: #(9) ]. - currentCharacter == $* - ifTrue: [ ^ self scan11 ]. - currentCharacter == $+ - ifTrue: [ ^ self scan12 ]. - currentCharacter == $, - ifTrue: [ ^ self recordAndReportMatch: #(15) ]. - currentCharacter == $- - ifTrue: [ ^ self scan13 ]. - currentCharacter == $. - ifTrue: [ ^ self recordAndReportMatch: #(20) ]. - currentCharacter == $/ - ifTrue: [ ^ self scan30 ]. - currentCharacter == $: - ifTrue: [ ^ self scan22 ]. - currentCharacter == $; - ifTrue: [ ^ self recordAndReportMatch: #(25) ]. - currentCharacter == $< - ifTrue: [ ^ self scan23 ]. - currentCharacter == $= - ifTrue: [ ^ self scan24 ]. - currentCharacter == $> - ifTrue: [ ^ self scan31 ]. - ^ self scanForTokenX1X2 -] - -{ #category : #generated } -CSharpScanner >> scanForTokenX2 [ - self step. - currentCharacter == $! - ifTrue: [ ^ self scan2 ]. - currentCharacter == $% - ifTrue: [ ^ self scan8 ]. - currentCharacter == $& - ifTrue: [ ^ self scan9 ]. - currentCharacter == $( - ifTrue: [ ^ self recordAndReportMatch: #(8) ]. - ^ self scanForTokenX2X3 -] - -{ #category : #generated } -CSharpScanner >> scanForTokenX2X1 [ - [ self recordMatch: #(157). - self step. - currentCharacter isAlphaNumeric or: [ currentCharacter == $_ ] ] - whileTrue -] - -{ #category : #generated } -CSharpScanner >> scanForTokenX2X2 [ - currentCharacter == $? - ifTrue: [ ^ self scan25 ]. - currentCharacter == $@ - ifTrue: [ ^ self scan32 ]. - currentCharacter == $[ - ifTrue: [ ^ self recordAndReportMatch: #(37) ]. - currentCharacter == $] - ifTrue: [ ^ self recordAndReportMatch: #(38) ]. - currentCharacter == $^ - ifTrue: [ ^ self scan27 ]. - currentCharacter == $` - ifTrue: [ ^ self scan28 ]. - currentCharacter == ${ - ifTrue: [ ^ self recordAndReportMatch: #(148) ]. - currentCharacter == $| - ifTrue: [ ^ self scan29 ]. - currentCharacter == $} - ifTrue: [ ^ self scan33 ]. - currentCharacter == $~ - ifTrue: [ ^ self recordAndReportMatch: #(152) ]. - (currentCharacter isLetter or: [ currentCharacter == $_ ]) - ifTrue: - [ self scanForTokenX2X1 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CSharpScanner >> scanForTokenX2X3 [ - currentCharacter == $) - ifTrue: [ ^ self recordAndReportMatch: #(9) ]. - currentCharacter == $* - ifTrue: [ ^ self scan11 ]. - currentCharacter == $+ - ifTrue: [ ^ self scan12 ]. - currentCharacter == $, - ifTrue: [ ^ self recordAndReportMatch: #(15) ]. - currentCharacter == $- - ifTrue: [ ^ self scan13 ]. - currentCharacter == $. - ifTrue: [ ^ self recordAndReportMatch: #(20) ]. - currentCharacter == $/ - ifTrue: [ ^ self scan30 ]. - currentCharacter == $: - ifTrue: [ ^ self scan22 ]. - currentCharacter == $; - ifTrue: [ ^ self recordAndReportMatch: #(25) ]. - currentCharacter == $< - ifTrue: [ ^ self scan23 ]. - currentCharacter == $= - ifTrue: [ ^ self scan24 ]. - currentCharacter == $> - ifTrue: [ ^ self scan31 ]. - ^ self scanForTokenX2X2 -] - -{ #category : #generated } -CSharpScanner >> tokenActions [ - ^ #(nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil #comment nil nil nil nil nil nil nil nil nil nil nil nil nil nil #whitespace #patternToken) -] diff --git a/src/SmaCC_CSharp/package.st b/src/SmaCC_CSharp/package.st deleted file mode 100644 index f5457d5c3..000000000 --- a/src/SmaCC_CSharp/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_CSharp' } diff --git a/src/SmaCC_C_Parser/CParser.class.st b/src/SmaCC_C_Parser/CParser.class.st deleted file mode 100644 index c2b4e98f1..000000000 --- a/src/SmaCC_C_Parser/CParser.class.st +++ /dev/null @@ -1,1033 +0,0 @@ -Class { - #name : #CParser, - #superclass : #SmaCCParser, - #category : #'SmaCC_C_Parser' -} - -{ #category : #'generated-accessing' } -CParser class >> cacheId [ - ^'2019-04-15T17:15:42.567645-05:00' -] - -{ #category : #generated } -CParser class >> definitionComment [ -" - : [a-fA-F0-9] - ; - - : [uUlL] - ; - - : [0-9] - ; - - : [Ee][\+\-]?+ - ; - - : [fFlL] - ; - - : \.\.\. - ; - - : (\/\* [^\*]* \*+ ([^\/\*] [^\*]* \*+)* \/) - ; - - : [a-zA-Z_] - ; - - : [0-9] - ; - - : (|)* - ; - - : (0[xX]+?) - | (+?) - | (+?) - | *\.+?? - | (L? \' ( (\\ .) | ([^\\\""]) )+ \') - ; - - : L? \"" ( (\\ .) | ([^\\\""]) )* \"" - ; - - : \[ | (\< \:) - ; - - : \] | (\: \>) - ; - - : \{ | (\< \%) - ; - - : \} | (\% \>) - ; - - : \s+ - ; - -%id ; - -translationUnit - : external_declaration - | translationUnit external_declaration - ; -primary_expression - : - | - | - | ""("" expression "")"" - ; -postfix_expression - : primary_expression - | postfix_expression expression - | postfix_expression ""("" "")"" - | postfix_expression ""("" argument_expression_list "")"" - | postfix_expression ""."" - | postfix_expression ""->"" - | postfix_expression ""++"" - | postfix_expression ""--"" - ; -argument_expression_list - : assignment_expression - | argument_expression_list "","" assignment_expression - ; -unary_expression - : postfix_expression - | ""++"" unary_expression - | ""--"" unary_expression - | unary_operator cast_expression - | ""sizeof"" unary_expression - | ""sizeof"" ""("" type_name "")"" - ; -unary_operator - : ""&"" - | ""*"" - | ""+"" - | ""-"" - | ""~"" - | ""!"" - ; -cast_expression - : unary_expression - | ""("" type_name "")"" cast_expression - ; -multiplicative_expression - : cast_expression - | multiplicative_expression ""*"" cast_expression - | multiplicative_expression ""/"" cast_expression - | multiplicative_expression ""%"" cast_expression - ; -additive_expression - : multiplicative_expression - | additive_expression ""+"" multiplicative_expression - | additive_expression ""-"" multiplicative_expression - ; -shift_expression - : additive_expression - | shift_expression ""<<"" additive_expression - | shift_expression "">>"" additive_expression - ; -relational_expression - : shift_expression - | relational_expression ""<"" shift_expression - | relational_expression "">"" shift_expression - | relational_expression ""<="" shift_expression - | relational_expression "">="" shift_expression - ; -equality_expression - : relational_expression - | equality_expression ""=="" relational_expression - | equality_expression ""!="" relational_expression - ; -and_expression - : equality_expression - | and_expression ""&"" equality_expression - ; -exclusive_or_expression - : and_expression - | exclusive_or_expression ""^"" and_expression - ; -inclusive_or_expression - : exclusive_or_expression - | inclusive_or_expression ""|"" exclusive_or_expression - ; -logical_and_expression - : inclusive_or_expression - | logical_and_expression ""&&"" inclusive_or_expression - ; -logical_or_expression - : logical_and_expression - | logical_or_expression ""||"" logical_and_expression - ; -conditional_expression - : logical_or_expression - | logical_or_expression ""?"" expression "":"" conditional_expression - ; -assignment_expression - : conditional_expression - | unary_expression assignment_operator assignment_expression - ; -assignment_operator - : ""="" - | ""*="" - | ""/="" - | ""%="" - | ""+="" - | ""-="" - | ""<<="" - | "">>="" - | ""&="" - | ""^="" - | ""|="" - ; -expression - : assignment_expression - | expression "","" assignment_expression - ; -constant_expression - : conditional_expression - ; -declaration - : declaration_specifiers "";"" - | init_declaration "";"" - ; -init_declaration - : declaration_specifiers init_declarator_list - {'1' first value = 'typedef' - ifTrue: - [1 to: '2' size by: 2 do: [:i | self addTypeName: ('2' at: i) value]]. - self reduceFor: nodes} - ; -declaration_specifiers - : storage_class_specifier - | storage_class_specifier declaration_specifiers - | type_specifier - | type_specifier declaration_specifiers - | type_qualifier - | type_qualifier declaration_specifiers - ; -init_declarator_list - : init_declarator - | init_declarator_list "","" init_declarator - ; -init_declarator - : declarator - | declarator ""="" initializer - ; -storage_class_specifier - : ""typedef"" - | ""extern"" - | ""static"" - | ""auto"" - | ""register"" - ; -type_specifier - : ""void"" - | ""char"" - | ""short"" - | ""int"" - | ""long"" - | ""float"" - | ""double"" - | ""signed"" - | ""unsigned"" - | struct_or_union_specifier - | enum_specifier - | - ; -struct_or_union_specifier - : struct_or_union struct_declaration_list {self addTypeName: '2' value. self reduceFor: nodes} - | struct_or_union struct_declaration_list - | struct_or_union {self addTypeName: '2' value. self reduceFor: nodes} - ; -struct_or_union - : ""struct"" - | ""union"" - ; -struct_declaration_list - : struct_declaration - | struct_declaration_list struct_declaration - ; -struct_declaration - : specifier_qualifier_list struct_declarator_list "";"" - ; -specifier_qualifier_list - : type_specifier specifier_qualifier_list - | type_specifier - | type_qualifier specifier_qualifier_list - | type_qualifier - ; -struct_declarator_list - : struct_declarator - | struct_declarator_list "","" struct_declarator - ; -struct_declarator - : declarator - | "":"" constant_expression - | declarator "":"" constant_expression - ; -enum_specifier - : ""enum"" enumerator_list - | ""enum"" enumerator_list {self addTypeName: '2' value. self reduceFor: nodes} - | ""enum"" {self addTypeName: '2' value. self reduceFor: nodes} - ; -enumerator_list - : enumerator - | enumerator_list "","" enumerator - ; -enumerator - : - | ""="" constant_expression - ; -type_qualifier - : ""const"" - | ""volatile"" - ; -declarator - : pointer direct_declarator - | direct_declarator - ; -direct_declarator - : - | ""("" declarator "")"" - | direct_declarator constant_expression - | direct_declarator - | direct_declarator ""("" parameter_type_list "")"" - | direct_declarator ""("" identifier_list "")"" - | direct_declarator ""("" "")"" - ; -pointer - : ""*"" - | ""*"" type_qualifier_list - | ""*"" pointer - | ""*"" type_qualifier_list pointer - ; -type_qualifier_list - : type_qualifier - | type_qualifier_list type_qualifier - ; -parameter_type_list - : parameter_list - | parameter_list "","" - ; -parameter_list - : parameter_declaration - | parameter_list "","" parameter_declaration - ; -parameter_declaration - : declaration_specifiers declarator - | declaration_specifiers abstract_declarator - | declaration_specifiers - ; -identifier_list - : - | identifier_list "","" - ; -type_name - : specifier_qualifier_list - | specifier_qualifier_list abstract_declarator - ; -abstract_declarator - : pointer - | direct_abstract_declarator - | pointer direct_abstract_declarator - ; -direct_abstract_declarator - : ""("" abstract_declarator "")"" - | - | constant_expression - | direct_abstract_declarator - | direct_abstract_declarator constant_expression - | ""("" "")"" - | ""("" parameter_type_list "")"" - | direct_abstract_declarator ""("" "")"" - | direct_abstract_declarator ""("" parameter_type_list "")"" - ; -initializer - : assignment_expression - | initializer_list - | initializer_list "","" - ; -initializer_list - : initializer - | initializer_list "","" initializer - ; -statement - : labeled_statement - | compound_statement - | expression_statement - | selection_statement - | iteration_statement - | jump_statement - ; -labeled_statement - : "":"" statement - | ""case"" constant_expression "":"" statement - | ""default"" "":"" statement - ; -compound_statement - : - | statement_list - | declaration_list - | declaration_list statement_list - ; -declaration_list - : declaration - | declaration_list declaration - ; -statement_list - : statement - | statement_list statement - ; -expression_statement - : "";"" - | expression "";"" - ; -selection_statement - : ""if"" ""("" expression "")"" statement - | ""if"" ""("" expression "")"" statement ""else"" statement - | ""switch"" ""("" expression "")"" statement - ; -iteration_statement - : ""while"" ""("" expression "")"" statement - | ""do"" statement ""while"" ""("" expression "")"" "";"" - | ""for"" ""("" expression_statement expression_statement "")"" statement - | ""for"" ""("" expression_statement expression_statement expression "")"" statement - ; -jump_statement - : ""goto"" "";"" - | ""continue"" "";"" - | ""break"" "";"" - | ""return"" "";"" - | ""return"" expression "";"" - ; -external_declaration - : function_definition - | declaration - ; -function_definition - : declaration_specifiers declarator declaration_list compound_statement - | declaration_specifiers declarator compound_statement - | declarator declaration_list compound_statement - | declarator compound_statement - ;" -] - -{ #category : #'file types' } -CParser class >> fileExtension [ - ^ '.c' -] - -{ #category : #'file types' } -CParser class >> fileExtensionType [ - ^ 'C files' -] - -{ #category : #generated } -CParser class >> reduceTable [ -^#( - #(127 1 #reduceFor: 6178817 false ) - #(112 1 #reduceFor: 4176900 false ) - #(113 1 #reduceFor: 4267010 false ) - #(124 1 #reduceFor: 5764097 false ) - #(113 1 #reduceFor: 4267015 false ) - #(112 1 #reduceFor: 4176898 false ) - #(113 1 #reduceFor: 4267014 false ) - #(113 1 #reduceFor: 4267012 false ) - #(113 1 #reduceFor: 4267013 false ) - #(112 1 #reduceFor: 4176901 false ) - #(113 1 #reduceFor: 4267011 false ) - #(113 1 #reduceFor: 4267016 false ) - #(112 1 #reduceFor: 4176899 false ) - #(115 1 #reduceFor: 4776961 false ) - #(112 1 #reduceFor: 4176897 false ) - #(115 1 #reduceFor: 4776962 false ) - #(113 1 #reduceFor: 4267017 false ) - #(113 1 #reduceFor: 4267009 false ) - #(124 1 #reduceFor: 5764098 false ) - #(126 1 #reduceFor: 5873665 false ) - #(147 1 #reduceFor: 8776706 false ) - #(109 1 #reduceFor: 3796993 false ) - #(109 1 #reduceFor: 3796995 false ) - #(113 1 #reduceFor: 4267018 false ) - #(113 1 #reduceFor: 4267019 false ) - #(109 1 #reduceFor: 3796997 false ) - #(125 1 #reduceFor: 5808130 false ) - #(85 1 #reduceFor: 686081 false ) - #(147 1 #reduceFor: 8776705 false ) - #(113 1 #reduceFor: 4267020 false ) - #(128 1 #reduceFor: 6276097 false ) - #(127 2 #reduceFor: 6178819 false ) - #(127 2 #reduceFor: 6178818 false ) - #(121 2 #reduceActionForenum_specifier3: 5349379 false ) - #(85 2 #reduceFor: 686082 false ) - #(107 2 #reduceFor: 3510274 false ) - #(107 2 #reduceFor: 3510273 false ) - #(108 2 #reduceActionForinit_declaration1: 3580929 false ) - #(110 1 #reduceFor: 4023297 false ) - #(111 1 #reduceFor: 4112385 false ) - #(109 2 #reduceFor: 3796994 false ) - #(109 2 #reduceFor: 3796996 false ) - #(114 2 #reduceActionForenum_specifier3: 4449283 false ) - #(109 2 #reduceFor: 3796998 false ) - #(141 1 #reduceFor: 8047617 false ) - #(148 2 #reduceFor: 8840196 false ) - #(125 2 #reduceFor: 5808129 false ) - #(126 3 #reduceFor: 5873666 false ) - #(128 2 #reduceFor: 6276098 false ) - #(127 3 #reduceFor: 6178820 false ) - #(123 1 #reduceFor: 5692417 false ) - #(122 1 #reduceFor: 5623809 false ) - #(148 3 #reduceFor: 8840194 false ) - #(118 1 #reduceFor: 4996098 false ) - #(116 1 #reduceFor: 4819969 false ) - #(118 1 #reduceFor: 4996100 false ) - #(90 1 #reduceFor: 1496070 false ) - #(90 1 #reduceFor: 1496065 false ) - #(90 1 #reduceFor: 1496066 false ) - #(90 1 #reduceFor: 1496067 false ) - #(90 1 #reduceFor: 1496068 false ) - #(143 1 #reduceFor: 8176641 false ) - #(90 1 #reduceFor: 1496069 false ) - #(86 1 #reduceFor: 771073 false ) - #(86 1 #reduceFor: 771074 false ) - #(86 1 #reduceFor: 771075 false ) - #(140 2 #reduceFor: 7836673 false ) - #(87 1 #reduceFor: 867329 false ) - #(89 1 #reduceFor: 1306625 false ) - #(91 1 #reduceFor: 1557505 false ) - #(92 1 #reduceFor: 1635329 false ) - #(93 1 #reduceFor: 1835009 false ) - #(94 1 #reduceFor: 1996801 false ) - #(95 1 #reduceFor: 2132993 false ) - #(96 1 #reduceFor: 2369537 false ) - #(97 1 #reduceFor: 2521089 false ) - #(98 1 #reduceFor: 2606081 false ) - #(99 1 #reduceFor: 2699265 false ) - #(100 1 #reduceFor: 2810881 false ) - #(101 1 #reduceFor: 2921473 false ) - #(102 1 #reduceFor: 3027969 false ) - #(103 1 #reduceFor: 3148801 false ) - #(105 1 #reduceFor: 3379201 false ) - #(142 1 #reduceFor: 8116225 false ) - #(138 1 #reduceFor: 7564289 false ) - #(138 1 #reduceFor: 7564290 false ) - #(138 1 #reduceFor: 7564291 false ) - #(138 1 #reduceFor: 7564292 false ) - #(138 1 #reduceFor: 7564293 false ) - #(138 1 #reduceFor: 7564294 false ) - #(141 2 #reduceFor: 8047618 false ) - #(148 3 #reduceFor: 8840195 false ) - #(126 3 #reduceFor: 5873671 false ) - #(132 1 #reduceFor: 6659073 false ) - #(131 1 #reduceFor: 6521859 false ) - #(129 1 #reduceFor: 6356993 false ) - #(130 1 #reduceFor: 6432769 false ) - #(126 3 #reduceFor: 5873668 false ) - #(106 1 #reduceFor: 3460097 false ) - #(121 4 #reduceFor: 5349377 false ) - #(110 3 #reduceFor: 4023298 false ) - #(136 1 #reduceFor: 7350273 false ) - #(111 3 #reduceFor: 4112386 false ) - #(148 4 #reduceFor: 8840193 false ) - #(118 2 #reduceFor: 4996097 false ) - #(114 4 #reduceFor: 4449282 false ) - #(116 2 #reduceFor: 4819970 false ) - #(119 1 #reduceFor: 5149697 false ) - #(120 1 #reduceFor: 5246977 false ) - #(118 2 #reduceFor: 4996099 false ) - #(133 1 #reduceFor: 6731777 false ) - #(89 2 #reduceFor: 1306626 false ) - #(89 2 #reduceFor: 1306627 false ) - #(146 2 #reduceFor: 8652803 false ) - #(146 2 #reduceFor: 8652802 false ) - #(146 2 #reduceFor: 8652804 false ) - #(89 2 #reduceFor: 1306629 false ) - #(87 2 #reduceFor: 867335 false ) - #(87 2 #reduceFor: 867336 false ) - #(104 1 #reduceFor: 3264516 false ) - #(104 1 #reduceFor: 3264521 false ) - #(104 1 #reduceFor: 3264514 false ) - #(104 1 #reduceFor: 3264517 false ) - #(104 1 #reduceFor: 3264518 false ) - #(104 1 #reduceFor: 3264515 false ) - #(104 1 #reduceFor: 3264519 false ) - #(104 1 #reduceFor: 3264513 false ) - #(104 1 #reduceFor: 3264520 false ) - #(104 1 #reduceFor: 3264522 false ) - #(104 1 #reduceFor: 3264523 false ) - #(89 2 #reduceFor: 1306628 false ) - #(143 2 #reduceFor: 8176642 false ) - #(140 3 #reduceFor: 7836675 false ) - #(140 3 #reduceFor: 7836674 false ) - #(142 2 #reduceFor: 8116226 false ) - #(131 2 #reduceFor: 6521857 false ) - #(134 1 #reduceFor: 6822913 false ) - #(131 2 #reduceFor: 6521858 false ) - #(134 1 #reduceFor: 6822914 false ) - #(126 4 #reduceFor: 5873669 false ) - #(126 4 #reduceFor: 5873670 false ) - #(126 4 #reduceFor: 5873667 false ) - #(121 5 #reduceActionForenum_specifier3: 5349378 false ) - #(123 3 #reduceFor: 5692418 false ) - #(122 3 #reduceFor: 5623810 false ) - #(137 1 #reduceFor: 7491585 false ) - #(114 5 #reduceActionForenum_specifier3: 4449281 false ) - #(120 2 #reduceFor: 5246978 false ) - #(117 3 #reduceFor: 4917249 false ) - #(86 3 #reduceFor: 771076 false ) - #(133 2 #reduceFor: 6731778 false ) - #(139 3 #reduceFor: 7711747 false ) - #(146 3 #reduceFor: 8652801 false ) - #(146 3 #reduceFor: 8652805 false ) - #(139 3 #reduceFor: 7711745 false ) - #(87 3 #reduceFor: 867331 false ) - #(88 1 #reduceFor: 1197057 false ) - #(87 3 #reduceFor: 867334 false ) - #(87 3 #reduceFor: 867333 false ) - #(103 3 #reduceFor: 3148802 false ) - #(92 3 #reduceFor: 1635332 false ) - #(92 3 #reduceFor: 1635330 false ) - #(92 3 #reduceFor: 1635331 false ) - #(93 3 #reduceFor: 1835010 false ) - #(93 3 #reduceFor: 1835011 false ) - #(94 3 #reduceFor: 1996802 false ) - #(94 3 #reduceFor: 1996803 false ) - #(95 3 #reduceFor: 2132994 false ) - #(95 3 #reduceFor: 2132996 false ) - #(95 3 #reduceFor: 2132995 false ) - #(95 3 #reduceFor: 2132997 false ) - #(96 3 #reduceFor: 2369539 false ) - #(96 3 #reduceFor: 2369538 false ) - #(97 3 #reduceFor: 2521090 false ) - #(98 3 #reduceFor: 2606082 false ) - #(99 3 #reduceFor: 2699266 false ) - #(100 3 #reduceFor: 2810882 false ) - #(101 3 #reduceFor: 2921474 false ) - #(105 3 #reduceFor: 3379202 false ) - #(140 4 #reduceFor: 7836676 false ) - #(135 2 #reduceFor: 6927366 false ) - #(135 2 #reduceFor: 6927362 false ) - #(134 2 #reduceFor: 6822915 false ) - #(129 3 #reduceFor: 6356994 false ) - #(130 3 #reduceFor: 6432770 false ) - #(132 3 #reduceFor: 6659074 false ) - #(136 3 #reduceFor: 7350274 false ) - #(119 3 #reduceFor: 5149698 false ) - #(120 3 #reduceFor: 5246979 false ) - #(91 4 #reduceFor: 1557506 false ) - #(139 4 #reduceFor: 7711746 false ) - #(89 4 #reduceFor: 1306630 false ) - #(87 4 #reduceFor: 867332 false ) - #(87 4 #reduceFor: 867330 false ) - #(135 3 #reduceFor: 6927367 false ) - #(135 3 #reduceFor: 6927361 false ) - #(135 3 #reduceFor: 6927363 false ) - #(135 3 #reduceFor: 6927368 false ) - #(135 3 #reduceFor: 6927364 false ) - #(136 4 #reduceFor: 7350275 false ) - #(137 3 #reduceFor: 7491586 false ) - #(144 5 #reduceFor: 8226817 false ) - #(144 5 #reduceFor: 8226819 false ) - #(145 5 #reduceFor: 8385537 false ) - #(88 3 #reduceFor: 1197058 false ) - #(102 5 #reduceFor: 3027970 false ) - #(135 4 #reduceFor: 6927369 false ) - #(135 4 #reduceFor: 6927365 false ) - #(145 6 #reduceFor: 8385539 false ) - #(145 7 #reduceFor: 8385538 false ) - #(145 7 #reduceFor: 8385540 false ) - #(144 7 #reduceFor: 8226818 false ) - ). -] - -{ #category : #'generated-accessing' } -CParser class >> scannerClass [ - ^CScanner -] - -{ #category : #generated } -CParser class >> startingStateFortranslationUnit [ - ^ 1 -] - -{ #category : #generated } -CParser class >> symbolNames [ - ^ #('"!"' '"!="' '"%"' '"%="' '"&"' '"&&"' '"&="' '"("' '")"' '"*"' '"*="' '"+"' '"++"' '"+="' '","' '"-"' '"--"' '"-="' '"->"' '"."' '"/"' '"/="' '":"' '";"' '"<"' '"<<"' '"<<="' '"<="' '"="' '"=="' '">"' '">="' '">>"' '">>="' '"?"' '"^"' '"^="' '"auto"' '"break"' '"case"' '"char"' '"const"' '"continue"' '"default"' '"do"' '"double"' '"else"' '"enum"' '"extern"' '"float"' '"for"' '"goto"' '"if"' '"int"' '"long"' '"register"' '"return"' '"short"' '"signed"' '"sizeof"' '"static"' '"struct"' '"switch"' '"typedef"' '"union"' '"unsigned"' '"void"' '"volatile"' '"while"' '"|"' '"|="' '"||"' '"~"' '' '' '' '' '' '' '' '' '' '' 'B e g i n' 'translationUnit' 'primary_expression' 'postfix_expression' 'argument_expression_list' 'unary_expression' 'unary_operator' 'cast_expression' 'multiplicative_expression' 'additive_expression' 'shift_expression' 'relational_expression' 'equality_expression' 'and_expression' 'exclusive_or_expression' 'inclusive_or_expression' 'logical_and_expression' 'logical_or_expression' 'conditional_expression' 'assignment_expression' 'assignment_operator' 'expression' 'constant_expression' 'declaration' 'init_declaration' 'declaration_specifiers' 'init_declarator_list' 'init_declarator' 'storage_class_specifier' 'type_specifier' 'struct_or_union_specifier' 'struct_or_union' 'struct_declaration_list' 'struct_declaration' 'specifier_qualifier_list' 'struct_declarator_list' 'struct_declarator' 'enum_specifier' 'enumerator_list' 'enumerator' 'type_qualifier' 'declarator' 'direct_declarator' 'pointer' 'type_qualifier_list' 'parameter_type_list' 'parameter_list' 'parameter_declaration' 'identifier_list' 'type_name' 'abstract_declarator' 'direct_abstract_declarator' 'initializer' 'initializer_list' 'statement' 'labeled_statement' 'compound_statement' 'declaration_list' 'statement_list' 'expression_statement' 'selection_statement' 'iteration_statement' 'jump_statement' 'external_declaration' 'function_definition' '' 'E O F' 'error') -] - -{ #category : #generated } -CParser class >> transitionTable [ -^#( -#[1 0 9 0 8 0 13 0 10 0 17 0 38 0 21 0 41 0 25 0 42 0 29 0 46 0 33 0 48 0 37 0 49 0 41 0 50 0 45 0 54 0 49 0 55 0 53 0 56 0 57 0 58 0 61 0 59 0 65 0 61 0 69 0 62 0 73 0 64 0 77 0 65 0 81 0 66 0 85 0 67 0 89 0 68 0 93 0 76 0 97 0 85 0 101 0 107 0 105 0 108 0 109 0 109 0 113 0 112 0 117 0 113 0 121 0 114 0 125 0 115 0 129 0 121 0 133 0 124 0 137 0 125 0 141 0 126 0 145 0 127 0 149 0 147 0 153 0 148 0 157 0 149] -#[1 0 9 0 8 0 13 0 10 0 93 0 76 0 161 0 125 0 141 0 126 0 145 0 127] -#[1 0 6 0 8 0 6 0 9 0 13 0 10 0 6 0 15 0 25 0 42 0 89 0 68 0 6 0 76 0 6 0 79 0 165 0 124 0 169 0 127 0 173 0 128] -#[0 0 10 0 8 0 9 0 10 0 15 0 24 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 79 0 149] -#[0 0 14 0 8 0 9 0 10 0 15 0 23 0 24 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 79 0 149] -#[0 0 18 0 8 0 9 0 10 0 15 0 23 0 24 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 79 0 149] -#[0 0 22 0 8 0 9 0 10 0 15 0 23 0 24 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 79 0 149] -#[1 0 177 0 76 0 181 0 81] -#[0 0 26 0 8 0 9 0 10 0 15 0 24 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 79 0 149] -#[0 0 30 0 8 0 9 0 10 0 15 0 23 0 24 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 79 0 149] -#[0 0 34 0 8 0 9 0 10 0 15 0 23 0 24 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 79 0 149] -#[0 0 38 0 8 0 9 0 10 0 15 0 23 0 24 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 79 0 149] -#[0 0 42 0 8 0 9 0 10 0 15 0 24 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 79 0 149] -#[0 0 46 0 8 0 9 0 10 0 15 0 23 0 24 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 79 0 149] -#[0 0 50 0 8 0 9 0 10 0 15 0 23 0 24 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 79 0 149] -#[0 0 54 0 8 0 9 0 10 0 15 0 24 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 79 0 149] -#[0 0 58 0 76 0 81] -#[0 0 62 0 8 0 9 0 10 0 15 0 24 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 79 0 149] -#[0 0 66 0 76 0 81] -#[0 0 70 0 8 0 9 0 10 0 15 0 23 0 24 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 79 0 149] -#[0 0 74 0 8 0 9 0 10 0 15 0 23 0 24 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 79 0 149] -#[0 0 78 0 8 0 9 0 10 0 15 0 23 0 24 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 79 0 149] -#[0 0 82 0 8 0 9 0 15 0 23 0 24 0 29 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 79 0 81 0 149] -#[1 0 9 0 8 0 13 0 10 0 17 0 38 0 21 0 41 0 25 0 42 0 29 0 46 0 33 0 48 0 37 0 49 0 41 0 50 0 45 0 54 0 49 0 55 0 53 0 56 0 57 0 58 0 61 0 59 0 65 0 61 0 69 0 62 0 73 0 64 0 77 0 65 0 81 0 66 0 85 0 67 0 89 0 68 0 93 0 76 0 101 0 107 0 105 0 108 0 109 0 109 0 113 0 112 0 117 0 113 0 121 0 114 0 125 0 115 0 129 0 121 0 133 0 124 0 137 0 125 0 141 0 126 0 145 0 127 0 185 0 147 0 153 0 148 0 157 0 149 0 0 0 150] -#[0 0 86 0 8 0 10 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 149 0 150] -#[0 0 189 0 24] -#[1 0 9 0 8 0 13 0 10 0 193 0 24 0 93 0 76 0 197 0 110 0 201 0 111 0 205 0 125 0 141 0 126 0 145 0 127] -#[1 0 90 0 8 0 90 0 9 0 90 0 10 0 90 0 15 0 90 0 24 0 17 0 38 0 21 0 41 0 25 0 42 0 29 0 46 0 33 0 48 0 37 0 49 0 41 0 50 0 45 0 54 0 49 0 55 0 53 0 56 0 57 0 58 0 61 0 59 0 65 0 61 0 69 0 62 0 73 0 64 0 77 0 65 0 81 0 66 0 85 0 67 0 89 0 68 0 90 0 76 0 90 0 79 0 209 0 109 0 113 0 112 0 117 0 113 0 121 0 114 0 125 0 115 0 129 0 121 0 133 0 124 0 157 0 149] -#[1 0 94 0 8 0 94 0 9 0 94 0 10 0 94 0 15 0 94 0 24 0 17 0 38 0 21 0 41 0 25 0 42 0 29 0 46 0 33 0 48 0 37 0 49 0 41 0 50 0 45 0 54 0 49 0 55 0 53 0 56 0 57 0 58 0 61 0 59 0 65 0 61 0 69 0 62 0 73 0 64 0 77 0 65 0 81 0 66 0 85 0 67 0 89 0 68 0 94 0 76 0 94 0 79 0 213 0 109 0 113 0 112 0 117 0 113 0 121 0 114 0 125 0 115 0 129 0 121 0 133 0 124 0 157 0 149] -#[0 0 98 0 8 0 9 0 10 0 15 0 23 0 24 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 79 0 149] -#[1 0 217 0 76 0 221 0 81] -#[0 0 102 0 8 0 9 0 10 0 15 0 23 0 24 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 79 0 149] -#[1 0 106 0 8 0 106 0 9 0 106 0 10 0 106 0 15 0 106 0 24 0 17 0 38 0 21 0 41 0 25 0 42 0 29 0 46 0 33 0 48 0 37 0 49 0 41 0 50 0 45 0 54 0 49 0 55 0 53 0 56 0 57 0 58 0 61 0 59 0 65 0 61 0 69 0 62 0 73 0 64 0 77 0 65 0 81 0 66 0 85 0 67 0 89 0 68 0 106 0 76 0 106 0 79 0 225 0 109 0 113 0 112 0 117 0 113 0 121 0 114 0 125 0 115 0 129 0 121 0 133 0 124 0 157 0 149] -#[1 0 17 0 38 0 21 0 41 0 25 0 42 0 29 0 46 0 33 0 48 0 37 0 49 0 41 0 50 0 45 0 54 0 49 0 55 0 53 0 56 0 57 0 58 0 61 0 59 0 65 0 61 0 69 0 62 0 73 0 64 0 77 0 65 0 81 0 66 0 85 0 67 0 89 0 68 0 229 0 81 0 233 0 107 0 105 0 108 0 237 0 109 0 113 0 112 0 117 0 113 0 121 0 114 0 125 0 115 0 129 0 121 0 133 0 124 0 241 0 140 0 245 0 141 0 157 0 149] -#[1 0 249 0 8 0 110 0 9 0 110 0 15 0 110 0 23 0 110 0 24 0 110 0 29 0 110 0 38 0 110 0 41 0 110 0 42 0 110 0 46 0 110 0 48 0 110 0 49 0 110 0 50 0 110 0 54 0 110 0 55 0 110 0 56 0 110 0 58 0 110 0 59 0 110 0 61 0 110 0 62 0 110 0 64 0 110 0 65 0 110 0 66 0 110 0 67 0 110 0 68 0 253 0 79 0 110 0 81 0 110 0 149] -#[1 0 9 0 8 0 93 0 76 1 1 0 126] -#[0 0 114 0 8 0 10 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 149 0 150] -#[0 0 118 0 8 0 10 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 149 0 150] -#[0 0 122 0 8 0 9 0 10 0 15 0 23 0 24 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 79 0 149] -#[0 1 5 0 9] -#[0 0 126 0 8 0 9 0 10 0 15 0 42 0 68 0 76 0 79] -#[0 0 130 0 8 0 9 0 15 0 76 0 79] -#[1 0 134 0 8 0 134 0 9 0 13 0 10 0 134 0 15 0 25 0 42 0 89 0 68 0 134 0 76 0 134 0 79 1 9 0 124 1 13 0 127] -#[1 0 138 0 8 0 138 0 9 0 138 0 10 0 138 0 15 0 138 0 23 0 138 0 24 0 138 0 38 0 138 0 41 0 138 0 42 0 138 0 46 0 138 0 48 0 138 0 49 0 138 0 50 0 138 0 54 0 138 0 55 0 138 0 56 0 138 0 58 0 138 0 59 0 138 0 61 0 138 0 62 0 138 0 64 0 138 0 65 0 138 0 66 0 138 0 67 0 138 0 68 0 138 0 76 0 138 0 79 1 17 0 81 0 138 0 149] -#[1 1 21 0 76 1 25 0 122 1 29 0 123] -#[0 0 142 0 8 0 10 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 149 0 150] -#[0 0 146 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 73 0 76 0 77 0 78 0 81 0 82 0 149 0 150] -#[0 0 150 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 73 0 76 0 77 0 78 0 81 0 82 0 149 0 150] -#[1 1 33 0 15 0 154 0 24] -#[0 0 158 0 15 0 24] -#[1 0 162 0 15 0 162 0 24 1 37 0 29 0 17 0 38 0 21 0 41 0 25 0 42 0 29 0 46 0 33 0 48 0 37 0 49 0 41 0 50 0 45 0 54 0 49 0 55 0 53 0 56 0 57 0 58 0 61 0 59 0 65 0 61 0 69 0 62 0 73 0 64 0 77 0 65 0 81 0 66 0 85 0 67 0 89 0 68 0 229 0 81 0 233 0 107 0 105 0 108 0 237 0 109 0 113 0 112 0 117 0 113 0 121 0 114 0 125 0 115 0 129 0 121 0 133 0 124 1 41 0 140 1 45 0 141 0 157 0 149] -#[0 0 166 0 8 0 9 0 10 0 15 0 24 0 76 0 79] -#[0 0 170 0 8 0 9 0 10 0 15 0 24 0 76 0 79] -#[1 0 174 0 8 0 174 0 9 0 174 0 10 0 174 0 15 0 174 0 23 0 174 0 24 0 174 0 38 0 174 0 41 0 174 0 42 0 174 0 46 0 174 0 48 0 174 0 49 0 174 0 50 0 174 0 54 0 174 0 55 0 174 0 56 0 174 0 58 0 174 0 59 0 174 0 61 0 174 0 62 0 174 0 64 0 174 0 65 0 174 0 66 0 174 0 67 0 174 0 68 0 174 0 76 0 174 0 79 1 49 0 81 0 174 0 149] -#[1 0 21 0 41 0 25 0 42 0 29 0 46 0 33 0 48 0 41 0 50 0 45 0 54 0 49 0 55 0 57 0 58 0 61 0 59 0 69 0 62 0 77 0 65 0 81 0 66 0 85 0 67 0 89 0 68 1 53 0 113 0 121 0 114 0 125 0 115 1 57 0 116 1 61 0 117 1 65 0 118 0 129 0 121 1 69 0 124 0 157 0 149] -#[0 0 178 0 8 0 9 0 10 0 15 0 24 0 76 0 79] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 105 0 24 0 17 0 38 1 109 0 39 1 113 0 40 0 21 0 41 0 25 0 42 1 117 0 43 1 121 0 44 1 125 0 45 0 29 0 46 0 33 0 48 0 37 0 49 0 41 0 50 1 129 0 51 1 133 0 52 1 137 0 53 0 45 0 54 0 49 0 55 0 53 0 56 1 141 0 57 0 57 0 58 0 61 0 59 1 145 0 60 0 65 0 61 0 69 0 62 1 149 0 63 0 73 0 64 0 77 0 65 0 81 0 66 0 85 0 67 0 89 0 68 1 153 0 69 1 157 0 73 1 161 0 76 1 165 0 77 1 169 0 78 0 229 0 81 1 173 0 82 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 1 245 0 105 0 233 0 107 0 105 0 108 0 237 0 109 0 113 0 112 0 117 0 113 0 121 0 114 0 125 0 115 0 129 0 121 0 133 0 124 1 249 0 138 1 253 0 139 2 1 0 140 2 5 0 141 2 9 0 142 2 13 0 143 2 17 0 144 2 21 0 145 2 25 0 146 0 157 0 149] -#[0 0 182 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 73 0 76 0 77 0 78 0 81 0 82 0 149] -#[1 0 9 0 8 0 13 0 10 0 193 0 24 0 93 0 76 0 197 0 110 0 201 0 111 2 29 0 125 0 141 0 126 0 145 0 127] -#[0 0 186 0 8 0 10 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 149 0 150] -#[1 0 17 0 38 0 21 0 41 0 25 0 42 0 29 0 46 0 33 0 48 0 37 0 49 0 41 0 50 0 45 0 54 0 49 0 55 0 53 0 56 0 57 0 58 0 61 0 59 0 65 0 61 0 69 0 62 0 73 0 64 0 77 0 65 0 81 0 66 0 85 0 67 0 89 0 68 0 229 0 81 2 33 0 107 0 105 0 108 0 237 0 109 0 113 0 112 0 117 0 113 0 121 0 114 0 125 0 115 0 129 0 121 0 133 0 124 2 37 0 140 0 157 0 149] -#[1 2 41 0 9 0 17 0 38 0 21 0 41 0 25 0 42 0 29 0 46 0 33 0 48 0 37 0 49 0 41 0 50 0 45 0 54 0 49 0 55 0 53 0 56 0 57 0 58 0 61 0 59 0 65 0 61 0 69 0 62 0 73 0 64 0 77 0 65 0 81 0 66 0 85 0 67 0 89 0 68 2 45 0 76 2 49 0 109 0 113 0 112 0 117 0 113 0 121 0 114 0 125 0 115 0 129 0 121 0 133 0 124 2 53 0 129 2 57 0 130 2 61 0 131 2 65 0 132 0 157 0 149] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 2 73 0 80 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 2 81 0 102 2 85 0 106] -#[1 0 249 0 8 0 190 0 9 0 190 0 15 0 190 0 23 0 190 0 24 0 190 0 29 0 190 0 38 0 190 0 41 0 190 0 42 0 190 0 46 0 190 0 48 0 190 0 49 0 190 0 50 0 190 0 54 0 190 0 55 0 190 0 56 0 190 0 58 0 190 0 59 0 190 0 61 0 190 0 62 0 190 0 64 0 190 0 65 0 190 0 66 0 190 0 67 0 190 0 68 0 253 0 79 0 190 0 81 0 190 0 149] -#[0 0 194 0 8 0 9 0 15 0 23 0 24 0 29 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 79 0 81 0 149] -#[0 0 198 0 8 0 9 0 10 0 15 0 42 0 68 0 76 0 79] -#[0 0 202 0 8 0 9 0 15 0 76 0 79] -#[1 1 21 0 76 2 89 0 122 1 29 0 123] -#[1 0 206 0 15 2 93 0 29 0 206 0 82] -#[1 2 97 0 15 2 101 0 82] -#[0 0 210 0 15 0 82] -#[1 0 9 0 8 0 13 0 10 0 93 0 76 2 105 0 111 2 29 0 125 0 141 0 126 0 145 0 127] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 2 109 0 81 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 2 113 0 103 2 117 0 136] -#[0 0 214 0 8 0 10 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 149 0 150] -#[1 0 17 0 38 0 21 0 41 0 25 0 42 0 29 0 46 0 33 0 48 0 37 0 49 0 41 0 50 0 45 0 54 0 49 0 55 0 53 0 56 0 57 0 58 0 61 0 59 0 65 0 61 0 69 0 62 0 73 0 64 0 77 0 65 0 81 0 66 0 85 0 67 0 89 0 68 0 229 0 81 2 33 0 107 0 105 0 108 0 237 0 109 0 113 0 112 0 117 0 113 0 121 0 114 0 125 0 115 0 129 0 121 0 133 0 124 2 121 0 140 0 157 0 149] -#[1 0 21 0 41 0 25 0 42 0 29 0 46 0 33 0 48 0 41 0 50 0 45 0 54 0 49 0 55 0 57 0 58 0 61 0 59 0 69 0 62 0 77 0 65 0 81 0 66 0 85 0 67 0 89 0 68 1 53 0 113 0 121 0 114 0 125 0 115 2 125 0 116 1 61 0 117 1 65 0 118 0 129 0 121 1 69 0 124 0 157 0 149] -#[1 0 218 0 8 0 218 0 9 0 218 0 10 0 218 0 23 0 21 0 41 0 25 0 42 0 29 0 46 0 33 0 48 0 41 0 50 0 45 0 54 0 49 0 55 0 57 0 58 0 61 0 59 0 69 0 62 0 77 0 65 0 81 0 66 0 85 0 67 0 89 0 68 0 218 0 76 0 218 0 79 1 53 0 113 0 121 0 114 0 125 0 115 2 129 0 118 0 129 0 121 1 69 0 124 0 157 0 149] -#[1 0 21 0 41 0 25 0 42 0 29 0 46 0 33 0 48 0 41 0 50 0 45 0 54 0 49 0 55 0 57 0 58 0 61 0 59 0 69 0 62 0 77 0 65 0 81 0 66 0 85 0 67 0 89 0 68 2 133 0 82 1 53 0 113 0 121 0 114 0 125 0 115 2 137 0 117 1 65 0 118 0 129 0 121 1 69 0 124 0 157 0 149] -#[0 0 222 0 41 0 42 0 46 0 48 0 50 0 54 0 55 0 58 0 59 0 62 0 65 0 66 0 67 0 68 0 82 0 149] -#[1 0 9 0 8 0 13 0 10 2 141 0 23 0 93 0 76 2 145 0 119 2 149 0 120 2 153 0 125 0 141 0 126 0 145 0 127] -#[1 0 226 0 8 0 226 0 9 0 226 0 10 0 226 0 23 0 21 0 41 0 25 0 42 0 29 0 46 0 33 0 48 0 41 0 50 0 45 0 54 0 49 0 55 0 57 0 58 0 61 0 59 0 69 0 62 0 77 0 65 0 81 0 66 0 85 0 67 0 89 0 68 0 226 0 76 0 226 0 79 1 53 0 113 0 121 0 114 0 125 0 115 2 157 0 118 0 129 0 121 1 69 0 124 0 157 0 149] -#[0 0 230 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 60 0 73 0 76 0 77 0 78] -#[0 0 234 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 60 0 73 0 76 0 77 0 78] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 0 21 0 41 0 25 0 42 0 29 0 46 0 33 0 48 0 41 0 50 0 45 0 54 0 49 0 55 0 57 0 58 0 61 0 59 1 145 0 60 0 69 0 62 0 77 0 65 0 81 0 66 0 85 0 67 0 89 0 68 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 2 161 0 105 1 53 0 113 0 121 0 114 0 125 0 115 2 165 0 118 0 129 0 121 1 69 0 124 2 169 0 133 0 157 0 149] -#[0 0 238 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 60 0 73 0 76 0 77 0 78] -#[0 0 242 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 60 0 73 0 76 0 77 0 78] -#[1 1 73 0 1 1 77 0 5 2 173 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 177 0 89 1 189 0 90] -#[0 0 246 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 60 0 73 0 76 0 77 0 78] -#[1 1 73 0 1 1 77 0 5 2 173 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 181 0 89 1 189 0 90] -#[0 0 250 0 1 0 5 0 8 0 9 0 10 0 12 0 13 0 16 0 17 0 24 0 39 0 40 0 43 0 44 0 45 0 47 0 51 0 52 0 53 0 57 0 60 0 63 0 69 0 73 0 76 0 77 0 78 0 81 0 82] -#[0 2 185 0 24] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 2 81 0 102 2 189 0 106] -#[0 2 193 0 24] -#[0 2 197 0 23] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 105 0 24 1 109 0 39 1 113 0 40 1 117 0 43 1 121 0 44 1 125 0 45 1 129 0 51 1 133 0 52 1 137 0 53 1 141 0 57 1 145 0 60 1 149 0 63 1 153 0 69 1 157 0 73 1 161 0 76 1 165 0 77 1 169 0 78 0 229 0 81 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 1 245 0 105 2 201 0 138 1 253 0 139 2 1 0 140 2 13 0 143 2 17 0 144 2 21 0 145 2 25 0 146] -#[0 2 205 0 8] -#[0 2 209 0 76] -#[0 2 213 0 8] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 2 217 0 24 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 2 221 0 105] -#[1 1 73 0 1 1 77 0 5 2 225 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 229 0 89 1 189 0 90] -#[0 2 233 0 8] -#[0 2 237 0 8] -#[0 0 254 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 60 0 73 0 76 0 77 0 78] -#[1 1 2 0 2 1 2 0 3 1 2 0 4 1 2 0 5 1 2 0 6 1 2 0 7 1 2 0 8 1 2 0 10 1 2 0 11 1 2 0 12 1 2 0 13 1 2 0 14 1 2 0 15 1 2 0 16 1 2 0 17 1 2 0 18 1 2 0 19 1 2 0 20 1 2 0 21 1 2 0 22 2 241 0 23 1 2 0 24 1 2 0 25 1 2 0 26 1 2 0 27 1 2 0 28 1 2 0 29 1 2 0 30 1 2 0 31 1 2 0 32 1 2 0 33 1 2 0 34 1 2 0 35 1 2 0 36 1 2 0 37 1 2 0 70 1 2 0 71 1 2 0 72 1 2 0 79] -#[0 1 6 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 70 0 71 0 72 0 79 0 80 0 82] -#[0 1 10 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 70 0 71 0 72 0 79 0 80 0 82] -#[0 1 14 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 73 0 76 0 77 0 78 0 81 0 82 0 149 0 150] -#[0 1 18 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 70 0 71 0 72 0 79 0 80 0 82] -#[1 1 22 0 2 1 22 0 3 1 22 0 4 1 22 0 5 1 22 0 6 1 22 0 7 2 245 0 8 1 22 0 9 1 22 0 10 1 22 0 11 1 22 0 12 2 249 0 13 1 22 0 14 1 22 0 15 1 22 0 16 2 253 0 17 1 22 0 18 3 1 0 19 3 5 0 20 1 22 0 21 1 22 0 22 1 22 0 23 1 22 0 24 1 22 0 25 1 22 0 26 1 22 0 27 1 22 0 28 1 22 0 29 1 22 0 30 1 22 0 31 1 22 0 32 1 22 0 33 1 22 0 34 1 22 0 35 1 22 0 36 1 22 0 37 1 22 0 70 1 22 0 71 1 22 0 72 3 9 0 79 1 22 0 80 1 22 0 82] -#[1 1 26 0 2 1 26 0 3 3 13 0 4 1 26 0 5 1 26 0 6 3 17 0 7 1 26 0 9 1 26 0 10 3 21 0 11 1 26 0 12 3 25 0 14 1 26 0 15 1 26 0 16 3 29 0 18 1 26 0 21 3 33 0 22 1 26 0 23 1 26 0 24 1 26 0 25 1 26 0 26 3 37 0 27 1 26 0 28 3 41 0 29 1 26 0 30 1 26 0 31 1 26 0 32 1 26 0 33 3 45 0 34 1 26 0 35 1 26 0 36 3 49 0 37 1 26 0 70 3 53 0 71 1 26 0 72 1 26 0 80 1 26 0 82 3 57 0 104] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 3 61 0 91] -#[0 1 30 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 21 0 23 0 24 0 25 0 26 0 28 0 30 0 31 0 32 0 33 0 35 0 36 0 70 0 72 0 80 0 82] -#[1 1 34 0 2 3 65 0 3 1 34 0 5 1 34 0 6 1 34 0 9 3 69 0 10 1 34 0 12 1 34 0 15 1 34 0 16 3 73 0 21 1 34 0 23 1 34 0 24 1 34 0 25 1 34 0 26 1 34 0 28 1 34 0 30 1 34 0 31 1 34 0 32 1 34 0 33 1 34 0 35 1 34 0 36 1 34 0 70 1 34 0 72 1 34 0 80 1 34 0 82] -#[1 1 38 0 2 1 38 0 5 1 38 0 6 1 38 0 9 3 77 0 12 1 38 0 15 3 81 0 16 1 38 0 23 1 38 0 24 1 38 0 25 1 38 0 26 1 38 0 28 1 38 0 30 1 38 0 31 1 38 0 32 1 38 0 33 1 38 0 35 1 38 0 36 1 38 0 70 1 38 0 72 1 38 0 80 1 38 0 82] -#[1 1 42 0 2 1 42 0 5 1 42 0 6 1 42 0 9 1 42 0 15 1 42 0 23 1 42 0 24 1 42 0 25 3 85 0 26 1 42 0 28 1 42 0 30 1 42 0 31 1 42 0 32 3 89 0 33 1 42 0 35 1 42 0 36 1 42 0 70 1 42 0 72 1 42 0 80 1 42 0 82] -#[1 1 46 0 2 1 46 0 5 1 46 0 6 1 46 0 9 1 46 0 15 1 46 0 23 1 46 0 24 3 93 0 25 3 97 0 28 1 46 0 30 3 101 0 31 3 105 0 32 1 46 0 35 1 46 0 36 1 46 0 70 1 46 0 72 1 46 0 80 1 46 0 82] -#[1 3 109 0 2 1 50 0 5 1 50 0 6 1 50 0 9 1 50 0 15 1 50 0 23 1 50 0 24 3 113 0 30 1 50 0 35 1 50 0 36 1 50 0 70 1 50 0 72 1 50 0 80 1 50 0 82] -#[1 3 117 0 5 1 54 0 6 1 54 0 9 1 54 0 15 1 54 0 23 1 54 0 24 1 54 0 35 1 54 0 36 1 54 0 70 1 54 0 72 1 54 0 80 1 54 0 82] -#[1 1 58 0 6 1 58 0 9 1 58 0 15 1 58 0 23 1 58 0 24 1 58 0 35 3 121 0 36 1 58 0 70 1 58 0 72 1 58 0 80 1 58 0 82] -#[1 1 62 0 6 1 62 0 9 1 62 0 15 1 62 0 23 1 62 0 24 1 62 0 35 3 125 0 70 1 62 0 72 1 62 0 80 1 62 0 82] -#[1 3 129 0 6 1 66 0 9 1 66 0 15 1 66 0 23 1 66 0 24 1 66 0 35 1 66 0 72 1 66 0 80 1 66 0 82] -#[1 1 70 0 9 1 70 0 15 1 70 0 23 1 70 0 24 3 133 0 35 3 137 0 72 1 70 0 80 1 70 0 82] -#[0 1 74 0 9 0 15 0 23 0 24 0 80 0 82] -#[0 1 78 0 9 0 15 0 23 0 24 0 80] -#[1 3 141 0 15 3 145 0 24] -#[0 1 82 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 39 0 40 0 43 0 44 0 45 0 51 0 52 0 53 0 57 0 60 0 63 0 69 0 73 0 76 0 77 0 78 0 81 0 82] -#[0 1 86 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 39 0 40 0 43 0 44 0 45 0 47 0 51 0 52 0 53 0 57 0 60 0 63 0 69 0 73 0 76 0 77 0 78 0 81 0 82] -#[0 1 90 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 39 0 40 0 43 0 44 0 45 0 47 0 51 0 52 0 53 0 57 0 60 0 63 0 69 0 73 0 76 0 77 0 78 0 81 0 82] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 105 0 24 0 17 0 38 1 109 0 39 1 113 0 40 0 21 0 41 0 25 0 42 1 117 0 43 1 121 0 44 1 125 0 45 0 29 0 46 0 33 0 48 0 37 0 49 0 41 0 50 1 129 0 51 1 133 0 52 1 137 0 53 0 45 0 54 0 49 0 55 0 53 0 56 1 141 0 57 0 57 0 58 0 61 0 59 1 145 0 60 0 65 0 61 0 69 0 62 1 149 0 63 0 73 0 64 0 77 0 65 0 81 0 66 0 85 0 67 0 89 0 68 1 153 0 69 1 157 0 73 1 161 0 76 1 165 0 77 1 169 0 78 0 229 0 81 3 149 0 82 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 1 245 0 105 2 33 0 107 0 105 0 108 0 237 0 109 0 113 0 112 0 117 0 113 0 121 0 114 0 125 0 115 0 129 0 121 0 133 0 124 1 249 0 138 1 253 0 139 2 1 0 140 3 153 0 142 2 13 0 143 2 17 0 144 2 21 0 145 2 25 0 146 0 157 0 149] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 105 0 24 1 109 0 39 1 113 0 40 1 117 0 43 1 121 0 44 1 125 0 45 1 129 0 51 1 133 0 52 1 137 0 53 1 141 0 57 1 145 0 60 1 149 0 63 1 153 0 69 1 157 0 73 1 161 0 76 1 165 0 77 1 169 0 78 0 229 0 81 3 157 0 82 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 1 245 0 105 3 161 0 138 1 253 0 139 2 1 0 140 2 13 0 143 2 17 0 144 2 21 0 145 2 25 0 146] -#[0 1 94 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 39 0 40 0 43 0 44 0 45 0 47 0 51 0 52 0 53 0 57 0 60 0 63 0 69 0 73 0 76 0 77 0 78 0 81 0 82] -#[0 1 98 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 39 0 40 0 43 0 44 0 45 0 47 0 51 0 52 0 53 0 57 0 60 0 63 0 69 0 73 0 76 0 77 0 78 0 81 0 82] -#[0 1 102 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 39 0 40 0 43 0 44 0 45 0 47 0 51 0 52 0 53 0 57 0 60 0 63 0 69 0 73 0 76 0 77 0 78 0 81 0 82] -#[0 1 106 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 39 0 40 0 43 0 44 0 45 0 47 0 51 0 52 0 53 0 57 0 60 0 63 0 69 0 73 0 76 0 77 0 78 0 81 0 82] -#[1 0 162 0 15 0 162 0 24 1 37 0 29] -#[0 1 110 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 73 0 76 0 77 0 78 0 81 0 82 0 149] -#[0 1 114 0 8 0 10 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 149 0 150] -#[0 1 118 0 8 0 9 0 15 0 23 0 24 0 29 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 79 0 81 0 149] -#[0 1 122 0 9 0 15] -#[1 3 165 0 8 1 126 0 9 0 13 0 10 1 126 0 15 0 93 0 76 3 169 0 79 3 173 0 125 0 141 0 126 3 177 0 127 3 181 0 134 3 185 0 135] -#[0 3 189 0 9] -#[1 1 130 0 9 3 193 0 15] -#[0 1 134 0 9 0 15] -#[1 3 197 0 9 3 201 0 15] -#[0 1 2 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 70 0 71 0 72 0 79 0 80 0 82] -#[0 1 138 0 8 0 9 0 15 0 23 0 24 0 29 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 79 0 81 0 149] -#[0 1 26 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 70 0 71 0 72 0 80 0 82] -#[0 1 142 0 15 0 23 0 24 0 80 0 82] -#[0 3 205 0 80] -#[1 2 97 0 15 3 209 0 82] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 2 81 0 102 3 213 0 106] -#[1 1 21 0 76 3 217 0 123] -#[0 1 146 0 8 0 9 0 10 0 15 0 23 0 24 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 79 0 149] -#[0 1 150 0 15 0 24] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 2 109 0 81 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 2 113 0 103 3 221 0 136 3 225 0 137] -#[0 1 154 0 15 0 24 0 82] -#[0 1 158 0 15 0 24] -#[0 1 162 0 8 0 10 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 149 0 150] -#[1 0 21 0 41 0 25 0 42 0 29 0 46 0 33 0 48 0 41 0 50 0 45 0 54 0 49 0 55 0 57 0 58 0 61 0 59 0 69 0 62 0 77 0 65 0 81 0 66 0 85 0 67 0 89 0 68 3 229 0 82 1 53 0 113 0 121 0 114 0 125 0 115 2 137 0 117 1 65 0 118 0 129 0 121 1 69 0 124 0 157 0 149] -#[0 1 166 0 8 0 9 0 10 0 23 0 76 0 79] -#[0 1 170 0 8 0 9 0 10 0 15 0 23 0 24 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 79 0 149] -#[0 1 174 0 41 0 42 0 46 0 48 0 50 0 54 0 55 0 58 0 59 0 62 0 65 0 66 0 67 0 68 0 82 0 149] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 2 81 0 102 3 233 0 106] -#[1 3 237 0 15 3 241 0 24] -#[0 1 178 0 15 0 24] -#[1 1 182 0 15 3 245 0 23 1 182 0 24] -#[0 1 186 0 8 0 9 0 10 0 23 0 76 0 79] -#[1 3 249 0 9 3 141 0 15] -#[1 3 253 0 8 1 190 0 9 0 13 0 10 3 169 0 79 4 1 0 127 4 5 0 134 3 185 0 135] -#[0 4 9 0 9] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 2 161 0 105] -#[0 1 194 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 70 0 71 0 72 0 80 0 82] -#[0 1 198 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 70 0 71 0 72 0 80 0 82] -#[0 1 202 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 39 0 40 0 43 0 44 0 45 0 47 0 51 0 52 0 53 0 57 0 60 0 63 0 69 0 73 0 76 0 77 0 78 0 81 0 82] -#[0 4 13 0 23] -#[0 1 206 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 39 0 40 0 43 0 44 0 45 0 47 0 51 0 52 0 53 0 57 0 60 0 63 0 69 0 73 0 76 0 77 0 78 0 81 0 82] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 105 0 24 1 109 0 39 1 113 0 40 1 117 0 43 1 121 0 44 1 125 0 45 1 129 0 51 1 133 0 52 1 137 0 53 1 141 0 57 1 145 0 60 1 149 0 63 1 153 0 69 1 157 0 73 1 161 0 76 1 165 0 77 1 169 0 78 0 229 0 81 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 1 245 0 105 4 17 0 138 1 253 0 139 2 1 0 140 2 13 0 143 2 17 0 144 2 21 0 145 2 25 0 146] -#[0 4 21 0 69] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 105 0 24 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 1 245 0 105 4 25 0 143] -#[0 4 29 0 24] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 4 33 0 105] -#[0 1 210 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 39 0 40 0 43 0 44 0 45 0 47 0 51 0 52 0 53 0 57 0 60 0 63 0 69 0 73 0 76 0 77 0 78 0 81 0 82] -#[1 3 141 0 15 4 37 0 24] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 0 21 0 41 0 25 0 42 0 29 0 46 0 33 0 48 0 41 0 50 0 45 0 54 0 49 0 55 0 57 0 58 0 61 0 59 1 145 0 60 0 69 0 62 0 77 0 65 0 81 0 66 0 85 0 67 0 89 0 68 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 2 161 0 105 1 53 0 113 0 121 0 114 0 125 0 115 2 165 0 118 0 129 0 121 1 69 0 124 4 41 0 133 0 157 0 149] -#[0 1 214 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 70 0 71 0 72 0 80 0 82] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 4 45 0 105] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 4 49 0 105] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 105 0 24 1 109 0 39 1 113 0 40 1 117 0 43 1 121 0 44 1 125 0 45 1 129 0 51 1 133 0 52 1 137 0 53 1 141 0 57 1 145 0 60 1 149 0 63 1 153 0 69 1 157 0 73 1 161 0 76 1 165 0 77 1 169 0 78 0 229 0 81 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 1 245 0 105 4 53 0 138 1 253 0 139 2 1 0 140 2 13 0 143 2 17 0 144 2 21 0 145 2 25 0 146] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 4 57 0 9 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 4 61 0 88 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 4 65 0 103] -#[0 1 218 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 70 0 71 0 72 0 79 0 80 0 82] -#[0 1 222 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 70 0 71 0 72 0 79 0 80 0 82] -#[0 4 69 0 76] -#[0 4 73 0 76] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 4 77 0 105] -#[0 1 226 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 60 0 73 0 76 0 77 0 78] -#[0 1 230 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 60 0 73 0 76 0 77 0 78] -#[0 1 234 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 60 0 73 0 76 0 77 0 78] -#[0 1 238 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 60 0 73 0 76 0 77 0 78] -#[0 1 242 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 60 0 73 0 76 0 77 0 78] -#[0 1 246 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 60 0 73 0 76 0 77 0 78] -#[0 1 250 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 60 0 73 0 76 0 77 0 78] -#[0 1 254 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 60 0 73 0 76 0 77 0 78] -#[0 2 2 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 60 0 73 0 76 0 77 0 78] -#[0 2 6 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 60 0 73 0 76 0 77 0 78] -#[0 2 10 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 60 0 73 0 76 0 77 0 78] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 4 81 0 103] -#[0 2 14 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 70 0 71 0 72 0 80 0 82] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 4 85 0 91] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 4 89 0 91] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 4 93 0 91] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 1 193 0 91 4 97 0 92] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 1 193 0 91 4 101 0 92] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 1 193 0 91 1 197 0 92 4 105 0 93] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 1 193 0 91 1 197 0 92 4 109 0 93] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 4 113 0 94] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 4 117 0 94] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 4 121 0 94] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 4 125 0 94] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 4 129 0 95] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 4 133 0 95] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 4 137 0 96] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 4 141 0 97] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 4 145 0 98] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 4 149 0 99] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 4 153 0 105] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 4 157 0 100] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 4 161 0 103] -#[0 2 18 0 1 0 5 0 8 0 9 0 10 0 12 0 13 0 16 0 17 0 24 0 39 0 40 0 43 0 44 0 45 0 47 0 51 0 52 0 53 0 57 0 60 0 63 0 69 0 73 0 76 0 77 0 78 0 81 0 82] -#[0 2 22 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 73 0 76 0 77 0 78 0 81 0 82 0 149 0 150] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 105 0 24 1 109 0 39 1 113 0 40 1 117 0 43 1 121 0 44 1 125 0 45 1 129 0 51 1 133 0 52 1 137 0 53 1 141 0 57 1 145 0 60 1 149 0 63 1 153 0 69 1 157 0 73 1 161 0 76 1 165 0 77 1 169 0 78 0 229 0 81 4 165 0 82 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 1 245 0 105 3 161 0 138 1 253 0 139 2 1 0 140 2 13 0 143 2 17 0 144 2 21 0 145 2 25 0 146] -#[0 2 26 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 73 0 76 0 77 0 78 0 81 0 82 0 149 0 150] -#[0 2 30 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 39 0 40 0 43 0 44 0 45 0 51 0 52 0 53 0 57 0 60 0 63 0 69 0 73 0 76 0 77 0 78 0 81 0 82] -#[1 3 165 0 8 4 169 0 9 0 13 0 10 0 17 0 38 0 21 0 41 0 25 0 42 0 29 0 46 0 33 0 48 0 37 0 49 0 41 0 50 0 45 0 54 0 49 0 55 0 53 0 56 0 57 0 58 0 61 0 59 0 65 0 61 0 69 0 62 0 73 0 64 0 77 0 65 0 81 0 66 0 85 0 67 0 89 0 68 0 93 0 76 3 169 0 79 2 49 0 109 0 113 0 112 0 117 0 113 0 121 0 114 0 125 0 115 0 129 0 121 0 133 0 124 0 161 0 125 0 141 0 126 3 177 0 127 4 173 0 129 2 57 0 130 2 61 0 131 4 177 0 134 3 185 0 135 0 157 0 149] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 4 181 0 80 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 2 81 0 102 4 185 0 106] -#[0 2 34 0 9 0 15] -#[1 3 165 0 8 2 38 0 9 2 38 0 15 0 93 0 76 3 169 0 79 1 1 0 126 4 189 0 135] -#[0 2 42 0 9 0 15] -#[1 4 193 0 8 2 46 0 9 2 46 0 15 4 197 0 79] -#[0 2 50 0 8 0 9 0 15 0 23 0 24 0 29 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 79 0 81 0 149] -#[1 0 17 0 38 0 21 0 41 0 25 0 42 0 29 0 46 0 33 0 48 0 37 0 49 0 41 0 50 0 45 0 54 0 49 0 55 0 53 0 56 0 57 0 58 0 61 0 59 0 65 0 61 0 69 0 62 0 73 0 64 0 77 0 65 0 81 0 66 0 85 0 67 0 89 0 68 4 201 0 74 2 49 0 109 0 113 0 112 0 117 0 113 0 121 0 114 0 125 0 115 0 129 0 121 0 133 0 124 4 205 0 131 0 157 0 149] -#[0 2 54 0 8 0 9 0 15 0 23 0 24 0 29 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 79 0 81 0 149] -#[0 4 209 0 76] -#[0 2 58 0 8 0 9 0 15 0 23 0 24 0 29 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 79 0 81 0 149] -#[0 2 62 0 8 0 9 0 10 0 15 0 23 0 24 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 79 0 149] -#[0 2 66 0 15 0 82] -#[0 2 70 0 15 0 82] -#[0 2 74 0 15 0 82] -#[1 4 213 0 15 4 217 0 82] -#[0 2 78 0 8 0 9 0 10 0 15 0 23 0 24 0 38 0 41 0 42 0 46 0 48 0 49 0 50 0 54 0 55 0 56 0 58 0 59 0 61 0 62 0 64 0 65 0 66 0 67 0 68 0 76 0 79 0 149] -#[0 2 82 0 15 0 24] -#[1 0 9 0 8 0 13 0 10 2 141 0 23 0 93 0 76 4 221 0 120 2 153 0 125 0 141 0 126 0 145 0 127] -#[0 2 86 0 41 0 42 0 46 0 48 0 50 0 54 0 55 0 58 0 59 0 62 0 65 0 66 0 67 0 68 0 82 0 149] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 2 81 0 102 4 225 0 106] -#[0 2 90 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 70 0 71 0 72 0 79 0 80 0 82] -#[1 3 253 0 8 4 169 0 9 0 13 0 10 0 17 0 38 0 21 0 41 0 25 0 42 0 29 0 46 0 33 0 48 0 37 0 49 0 41 0 50 0 45 0 54 0 49 0 55 0 53 0 56 0 57 0 58 0 61 0 59 0 65 0 61 0 69 0 62 0 73 0 64 0 77 0 65 0 81 0 66 0 85 0 67 0 89 0 68 3 169 0 79 2 49 0 109 0 113 0 112 0 117 0 113 0 121 0 114 0 125 0 115 0 129 0 121 0 133 0 124 4 1 0 127 4 173 0 129 2 57 0 130 2 61 0 131 4 177 0 134 3 185 0 135 0 157 0 149] -#[1 3 253 0 8 2 38 0 9 3 169 0 79 4 189 0 135] -#[0 2 94 0 9] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 4 229 0 91] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 105 0 24 1 109 0 39 1 113 0 40 1 117 0 43 1 121 0 44 1 125 0 45 1 129 0 51 1 133 0 52 1 137 0 53 1 141 0 57 1 145 0 60 1 149 0 63 1 153 0 69 1 157 0 73 1 161 0 76 1 165 0 77 1 169 0 78 0 229 0 81 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 1 245 0 105 4 233 0 138 1 253 0 139 2 1 0 140 2 13 0 143 2 17 0 144 2 21 0 145 2 25 0 146] -#[0 2 98 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 39 0 40 0 43 0 44 0 45 0 47 0 51 0 52 0 53 0 57 0 60 0 63 0 69 0 73 0 76 0 77 0 78 0 81 0 82] -#[0 4 237 0 8] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 105 0 24 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 1 245 0 105 4 241 0 143] -#[0 2 102 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 39 0 40 0 43 0 44 0 45 0 47 0 51 0 52 0 53 0 57 0 60 0 63 0 69 0 73 0 76 0 77 0 78 0 81 0 82] -#[1 4 245 0 9 3 141 0 15] -#[0 2 106 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 39 0 40 0 43 0 44 0 45 0 47 0 51 0 52 0 53 0 57 0 60 0 63 0 69 0 73 0 76 0 77 0 78 0 81 0 82] -#[0 4 249 0 9] -#[1 4 253 0 9 3 141 0 15] -#[1 5 1 0 9 3 141 0 15] -#[0 2 110 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 39 0 40 0 43 0 44 0 45 0 47 0 51 0 52 0 53 0 57 0 60 0 63 0 69 0 73 0 76 0 77 0 78 0 81 0 82] -#[0 2 114 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 70 0 71 0 72 0 79 0 80 0 82] -#[1 5 5 0 9 5 9 0 15] -#[0 2 118 0 9 0 15] -#[0 2 122 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 70 0 71 0 72 0 79 0 80 0 82] -#[0 2 126 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 70 0 71 0 72 0 79 0 80 0 82] -#[1 3 141 0 15 5 13 0 80] -#[0 2 130 0 9 0 15 0 23 0 24 0 80 0 82] -#[0 2 134 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 21 0 23 0 24 0 25 0 26 0 28 0 30 0 31 0 32 0 33 0 35 0 36 0 70 0 72 0 80 0 82] -#[0 2 138 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 21 0 23 0 24 0 25 0 26 0 28 0 30 0 31 0 32 0 33 0 35 0 36 0 70 0 72 0 80 0 82] -#[0 2 142 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 21 0 23 0 24 0 25 0 26 0 28 0 30 0 31 0 32 0 33 0 35 0 36 0 70 0 72 0 80 0 82] -#[1 2 146 0 2 3 65 0 3 2 146 0 5 2 146 0 6 2 146 0 9 3 69 0 10 2 146 0 12 2 146 0 15 2 146 0 16 3 73 0 21 2 146 0 23 2 146 0 24 2 146 0 25 2 146 0 26 2 146 0 28 2 146 0 30 2 146 0 31 2 146 0 32 2 146 0 33 2 146 0 35 2 146 0 36 2 146 0 70 2 146 0 72 2 146 0 80 2 146 0 82] -#[1 2 150 0 2 3 65 0 3 2 150 0 5 2 150 0 6 2 150 0 9 3 69 0 10 2 150 0 12 2 150 0 15 2 150 0 16 3 73 0 21 2 150 0 23 2 150 0 24 2 150 0 25 2 150 0 26 2 150 0 28 2 150 0 30 2 150 0 31 2 150 0 32 2 150 0 33 2 150 0 35 2 150 0 36 2 150 0 70 2 150 0 72 2 150 0 80 2 150 0 82] -#[1 2 154 0 2 2 154 0 5 2 154 0 6 2 154 0 9 3 77 0 12 2 154 0 15 3 81 0 16 2 154 0 23 2 154 0 24 2 154 0 25 2 154 0 26 2 154 0 28 2 154 0 30 2 154 0 31 2 154 0 32 2 154 0 33 2 154 0 35 2 154 0 36 2 154 0 70 2 154 0 72 2 154 0 80 2 154 0 82] -#[1 2 158 0 2 2 158 0 5 2 158 0 6 2 158 0 9 3 77 0 12 2 158 0 15 3 81 0 16 2 158 0 23 2 158 0 24 2 158 0 25 2 158 0 26 2 158 0 28 2 158 0 30 2 158 0 31 2 158 0 32 2 158 0 33 2 158 0 35 2 158 0 36 2 158 0 70 2 158 0 72 2 158 0 80 2 158 0 82] -#[1 2 162 0 2 2 162 0 5 2 162 0 6 2 162 0 9 2 162 0 15 2 162 0 23 2 162 0 24 2 162 0 25 3 85 0 26 2 162 0 28 2 162 0 30 2 162 0 31 2 162 0 32 3 89 0 33 2 162 0 35 2 162 0 36 2 162 0 70 2 162 0 72 2 162 0 80 2 162 0 82] -#[1 2 166 0 2 2 166 0 5 2 166 0 6 2 166 0 9 2 166 0 15 2 166 0 23 2 166 0 24 2 166 0 25 3 85 0 26 2 166 0 28 2 166 0 30 2 166 0 31 2 166 0 32 3 89 0 33 2 166 0 35 2 166 0 36 2 166 0 70 2 166 0 72 2 166 0 80 2 166 0 82] -#[1 2 170 0 2 2 170 0 5 2 170 0 6 2 170 0 9 2 170 0 15 2 170 0 23 2 170 0 24 2 170 0 25 3 85 0 26 2 170 0 28 2 170 0 30 2 170 0 31 2 170 0 32 3 89 0 33 2 170 0 35 2 170 0 36 2 170 0 70 2 170 0 72 2 170 0 80 2 170 0 82] -#[1 2 174 0 2 2 174 0 5 2 174 0 6 2 174 0 9 2 174 0 15 2 174 0 23 2 174 0 24 2 174 0 25 3 85 0 26 2 174 0 28 2 174 0 30 2 174 0 31 2 174 0 32 3 89 0 33 2 174 0 35 2 174 0 36 2 174 0 70 2 174 0 72 2 174 0 80 2 174 0 82] -#[1 2 178 0 2 2 178 0 5 2 178 0 6 2 178 0 9 2 178 0 15 2 178 0 23 2 178 0 24 3 93 0 25 3 97 0 28 2 178 0 30 3 101 0 31 3 105 0 32 2 178 0 35 2 178 0 36 2 178 0 70 2 178 0 72 2 178 0 80 2 178 0 82] -#[1 2 182 0 2 2 182 0 5 2 182 0 6 2 182 0 9 2 182 0 15 2 182 0 23 2 182 0 24 3 93 0 25 3 97 0 28 2 182 0 30 3 101 0 31 3 105 0 32 2 182 0 35 2 182 0 36 2 182 0 70 2 182 0 72 2 182 0 80 2 182 0 82] -#[1 3 109 0 2 2 186 0 5 2 186 0 6 2 186 0 9 2 186 0 15 2 186 0 23 2 186 0 24 3 113 0 30 2 186 0 35 2 186 0 36 2 186 0 70 2 186 0 72 2 186 0 80 2 186 0 82] -#[1 3 117 0 5 2 190 0 6 2 190 0 9 2 190 0 15 2 190 0 23 2 190 0 24 2 190 0 35 2 190 0 36 2 190 0 70 2 190 0 72 2 190 0 80 2 190 0 82] -#[1 2 194 0 6 2 194 0 9 2 194 0 15 2 194 0 23 2 194 0 24 2 194 0 35 3 121 0 36 2 194 0 70 2 194 0 72 2 194 0 80 2 194 0 82] -#[1 2 198 0 6 2 198 0 9 2 198 0 15 2 198 0 23 2 198 0 24 2 198 0 35 3 125 0 70 2 198 0 72 2 198 0 80 2 198 0 82] -#[1 3 141 0 15 5 17 0 23] -#[1 3 129 0 6 2 202 0 9 2 202 0 15 2 202 0 23 2 202 0 24 2 202 0 35 2 202 0 72 2 202 0 80 2 202 0 82] -#[0 2 206 0 9 0 15 0 23 0 24 0 80] -#[0 2 210 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 62 0 63 0 64 0 65 0 66 0 67 0 68 0 69 0 73 0 76 0 77 0 78 0 81 0 82 0 149 0 150] -#[0 2 214 0 8 0 9 0 15 0 79] -#[0 5 21 0 9] -#[0 5 25 0 9] -#[0 2 218 0 8 0 9 0 15 0 79] -#[0 5 29 0 80] -#[1 4 193 0 8 2 222 0 9 2 222 0 15 4 197 0 79] -#[1 5 33 0 9 0 17 0 38 0 21 0 41 0 25 0 42 0 29 0 46 0 33 0 48 0 37 0 49 0 41 0 50 0 45 0 54 0 49 0 55 0 53 0 56 0 57 0 58 0 61 0 59 0 65 0 61 0 69 0 62 0 73 0 64 0 77 0 65 0 81 0 66 0 85 0 67 0 89 0 68 2 49 0 109 0 113 0 112 0 117 0 113 0 121 0 114 0 125 0 115 0 129 0 121 0 133 0 124 5 37 0 129 2 57 0 130 2 61 0 131 0 157 0 149] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 5 41 0 80 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 2 81 0 102 5 45 0 106] -#[0 2 226 0 9] -#[0 2 230 0 9 0 15] -#[0 2 234 0 9 0 15] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 2 109 0 81 5 49 0 82 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 2 113 0 103 5 53 0 136] -#[0 2 238 0 15 0 24 0 82] -#[0 2 242 0 15 0 24] -#[0 2 246 0 15 0 24] -#[0 2 250 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 70 0 71 0 72 0 80 0 82] -#[0 2 254 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 39 0 40 0 43 0 44 0 45 0 47 0 51 0 52 0 53 0 57 0 60 0 63 0 69 0 73 0 76 0 77 0 78 0 81 0 82] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 5 57 0 105] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 5 61 0 9 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 5 65 0 105] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 105 0 24 1 109 0 39 1 113 0 40 1 117 0 43 1 121 0 44 1 125 0 45 1 129 0 51 1 133 0 52 1 137 0 53 1 141 0 57 1 145 0 60 1 149 0 63 1 153 0 69 1 157 0 73 1 161 0 76 1 165 0 77 1 169 0 78 0 229 0 81 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 1 245 0 105 5 69 0 138 1 253 0 139 2 1 0 140 2 13 0 143 2 17 0 144 2 21 0 145 2 25 0 146] -#[0 3 2 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 14 0 15 0 16 0 18 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 70 0 71 0 72 0 80 0 82] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 105 0 24 1 109 0 39 1 113 0 40 1 117 0 43 1 121 0 44 1 125 0 45 1 129 0 51 1 133 0 52 1 137 0 53 1 141 0 57 1 145 0 60 1 149 0 63 1 153 0 69 1 157 0 73 1 161 0 76 1 165 0 77 1 169 0 78 0 229 0 81 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 1 245 0 105 5 73 0 138 1 253 0 139 2 1 0 140 2 13 0 143 2 17 0 144 2 21 0 145 2 25 0 146] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 105 0 24 1 109 0 39 1 113 0 40 1 117 0 43 1 121 0 44 1 125 0 45 1 129 0 51 1 133 0 52 1 137 0 53 1 141 0 57 1 145 0 60 1 149 0 63 1 153 0 69 1 157 0 73 1 161 0 76 1 165 0 77 1 169 0 78 0 229 0 81 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 1 245 0 105 5 77 0 138 1 253 0 139 2 1 0 140 2 13 0 143 2 17 0 144 2 21 0 145 2 25 0 146] -#[0 3 6 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 70 0 71 0 72 0 79 0 80 0 82] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 5 81 0 103] -#[0 3 10 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 70 0 71 0 72 0 79 0 80 0 82] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 145 0 60 1 157 0 73 2 69 0 76 1 165 0 77 1 169 0 78 1 177 0 86 1 181 0 87 2 77 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 5 85 0 102] -#[0 3 14 0 8 0 9 0 15 0 79] -#[0 3 18 0 8 0 9 0 15 0 79] -#[0 3 22 0 8 0 9 0 15 0 79] -#[0 3 26 0 8 0 9 0 15 0 79] -#[0 5 89 0 9] -#[0 3 30 0 8 0 9 0 15 0 79] -#[0 5 93 0 80] -#[0 3 34 0 15 0 24 0 82] -#[0 3 38 0 15 0 82] -#[1 5 97 0 9 3 141 0 15] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 105 0 24 1 109 0 39 1 113 0 40 1 117 0 43 1 121 0 44 1 125 0 45 1 129 0 51 1 133 0 52 1 137 0 53 1 141 0 57 1 145 0 60 1 149 0 63 1 153 0 69 1 157 0 73 1 161 0 76 1 165 0 77 1 169 0 78 0 229 0 81 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 1 245 0 105 5 101 0 138 1 253 0 139 2 1 0 140 2 13 0 143 2 17 0 144 2 21 0 145 2 25 0 146] -#[1 5 105 0 9 3 141 0 15] -#[1 3 42 0 1 3 42 0 5 3 42 0 8 3 42 0 10 3 42 0 12 3 42 0 13 3 42 0 16 3 42 0 17 3 42 0 24 3 42 0 39 3 42 0 40 3 42 0 43 3 42 0 44 3 42 0 45 5 109 0 47 3 42 0 51 3 42 0 52 3 42 0 53 3 42 0 57 3 42 0 60 3 42 0 63 3 42 0 69 3 42 0 73 3 42 0 76 3 42 0 77 3 42 0 78 3 42 0 81 3 42 0 82] -#[0 3 46 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 39 0 40 0 43 0 44 0 45 0 47 0 51 0 52 0 53 0 57 0 60 0 63 0 69 0 73 0 76 0 77 0 78 0 81 0 82] -#[0 3 50 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 39 0 40 0 43 0 44 0 45 0 47 0 51 0 52 0 53 0 57 0 60 0 63 0 69 0 73 0 76 0 77 0 78 0 81 0 82] -#[0 3 54 0 9 0 15] -#[0 3 58 0 9 0 15 0 23 0 24 0 80 0 82] -#[0 3 62 0 8 0 9 0 15 0 79] -#[0 3 66 0 8 0 9 0 15 0 79] -#[0 5 113 0 24] -#[0 3 70 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 39 0 40 0 43 0 44 0 45 0 47 0 51 0 52 0 53 0 57 0 60 0 63 0 69 0 73 0 76 0 77 0 78 0 81 0 82] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 105 0 24 1 109 0 39 1 113 0 40 1 117 0 43 1 121 0 44 1 125 0 45 1 129 0 51 1 133 0 52 1 137 0 53 1 141 0 57 1 145 0 60 1 149 0 63 1 153 0 69 1 157 0 73 1 161 0 76 1 165 0 77 1 169 0 78 0 229 0 81 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 1 245 0 105 5 117 0 138 1 253 0 139 2 1 0 140 2 13 0 143 2 17 0 144 2 21 0 145 2 25 0 146] -#[1 1 73 0 1 1 77 0 5 1 81 0 8 1 85 0 10 1 89 0 12 1 93 0 13 1 97 0 16 1 101 0 17 1 105 0 24 1 109 0 39 1 113 0 40 1 117 0 43 1 121 0 44 1 125 0 45 1 129 0 51 1 133 0 52 1 137 0 53 1 141 0 57 1 145 0 60 1 149 0 63 1 153 0 69 1 157 0 73 1 161 0 76 1 165 0 77 1 169 0 78 0 229 0 81 1 177 0 86 1 181 0 87 1 185 0 89 1 189 0 90 1 193 0 91 1 197 0 92 1 201 0 93 1 205 0 94 1 209 0 95 1 213 0 96 1 217 0 97 1 221 0 98 1 225 0 99 1 229 0 100 1 233 0 101 1 237 0 102 1 241 0 103 1 245 0 105 5 121 0 138 1 253 0 139 2 1 0 140 2 13 0 143 2 17 0 144 2 21 0 145 2 25 0 146] -#[0 3 74 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 39 0 40 0 43 0 44 0 45 0 47 0 51 0 52 0 53 0 57 0 60 0 63 0 69 0 73 0 76 0 77 0 78 0 81 0 82] -#[0 3 78 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 39 0 40 0 43 0 44 0 45 0 47 0 51 0 52 0 53 0 57 0 60 0 63 0 69 0 73 0 76 0 77 0 78 0 81 0 82] -#[0 3 82 0 1 0 5 0 8 0 10 0 12 0 13 0 16 0 17 0 24 0 39 0 40 0 43 0 44 0 45 0 47 0 51 0 52 0 53 0 57 0 60 0 63 0 69 0 73 0 76 0 77 0 78 0 81 0 82] - ). -] - -{ #category : #scanning } -CParser >> addTypeName: aString [ - scanner addTypeName: aString -] - -{ #category : #'generated-reduction actions' } -CParser >> reduceActionForenum_specifier3: nodes [ - self addTypeName: (nodes at: 2) value. - ^ self reduceFor: nodes -] - -{ #category : #'generated-reduction actions' } -CParser >> reduceActionForinit_declaration1: nodes [ - (nodes at: 1) first value = 'typedef' - ifTrue: [ 1 to: (nodes at: 2) size by: 2 do: [ :i | self addTypeName: ((nodes at: 2) at: i) value ] ]. - ^ self reduceFor: nodes -] diff --git a/src/SmaCC_C_Parser/CScanner.class.st b/src/SmaCC_C_Parser/CScanner.class.st deleted file mode 100644 index 4f5d5085b..000000000 --- a/src/SmaCC_C_Parser/CScanner.class.st +++ /dev/null @@ -1,521 +0,0 @@ -Class { - #name : #CScanner, - #superclass : #SmaCCScanner, - #instVars : [ - 'typeNames' - ], - #category : #'SmaCC_C_Parser' -} - -{ #category : #'generated-initialization' } -CScanner class >> initializeKeywordMap [ - keywordMap := Dictionary new. - #(#(76 'auto' 38) #(76 'break' 39) #(76 'case' 40) #(76 'char' 41) #(76 'const' 42) #(76 'continue' 43) #(76 'default' 44) #(76 'do' 45) #(76 'double' 46) #(76 'else' 47) #(76 'enum' 48) #(76 'extern' 49) #(76 'float' 50) #(76 'for' 51) #(76 'goto' 52) #(76 'if' 53) #(76 'int' 54) #(76 'long' 55) #(76 'register' 56) #(76 'return' 57) #(76 'short' 58) #(76 'signed' 59) #(76 'sizeof' 60) #(76 'static' 61) #(76 'struct' 62) #(76 'switch' 63) #(76 'typedef' 64) #(76 'union' 65) #(76 'unsigned' 66) #(76 'void' 67) #(76 'volatile' 68) #(76 'while' 69)) - do: [ :each | - (keywordMap at: each first ifAbsentPut: [ Dictionary new ]) - at: (each at: 2) - put: each last ]. - ^ keywordMap -] - -{ #category : #testing } -CScanner class >> needsLineNumbers [ - ^ true -] - -{ #category : #generated } -CScanner >> CONSTANTId [ - ^ 77 -] - -{ #category : #scanning } -CScanner >> IDENTIFIER [ - | name | - name := outputStream contents. - matchActions := (typeNames includes: name) - ifTrue: [ Array with: self TypeNameId ] - ifFalse: [ Array with: self IDENTIFIERId ]. - outputStream reset. - ^ SmaCCToken value: name start: start ids: matchActions -] - -{ #category : #generated } -CScanner >> IDENTIFIERId [ - ^ 76 -] - -{ #category : #generated } -CScanner >> TypeNameId [ - ^ 149 -] - -{ #category : #scanning } -CScanner >> addTypeName: aString [ - typeNames add: aString -] - -{ #category : #generated } -CScanner >> emptySymbolTokenId [ - ^ 150 -] - -{ #category : #generated } -CScanner >> errorTokenId [ - ^ 151 -] - -{ #category : #'initialize-release' } -CScanner >> initialize [ - super initialize. - typeNames := Set new -] - -{ #category : #generated } -CScanner >> scan1 [ - [ self step. - currentCharacter == $" - ifTrue: [ ^ self recordAndReportMatch: #(78) ]. - currentCharacter == $\ - ifTrue: [ self step. - ^ self scan1 ]. - true ] whileTrue -] - -{ #category : #generated } -CScanner >> scan10 [ - [ self recordMatch: #(77). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan9 ]. - currentCharacter isDigit ] whileTrue. - ('Ee' includes: currentCharacter) - ifTrue: [ ^ self scan6 ]. - ('LUlu' includes: currentCharacter) - ifTrue: [ ^ self recordAndReportMatch: #(77) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CScanner >> scan2 [ - self step. - currentCharacter == $\ - ifTrue: [ ^ self scan4 ]. - (currentCharacter <= $! - or: [ (currentCharacter between: $# and: $[) - or: [ currentCharacter >= $] ] ]) - ifTrue: [ ^ self scan3 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CScanner >> scan3 [ - [ self step. - currentCharacter == $' - ifTrue: [ [ self recordMatch: #(77). - self step. - currentCharacter == $' ] whileTrue. - currentCharacter == $\ - ifTrue: [ ^ self scan4 ]. - (currentCharacter <= $! - or: [ (currentCharacter between: $# and: $&) - or: [ (currentCharacter between: $( and: $[) - or: [ currentCharacter >= $] ] ] ]) - ifTrue: [ ^ self scan3 ]. - ^ self reportLastMatch ]. - currentCharacter == $\ - ifTrue: [ ^ self scan4 ]. - currentCharacter <= $! - or: [ (currentCharacter between: $# and: $&) - or: [ (currentCharacter between: $( and: $[) - or: [ currentCharacter >= $] ] ] ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -CScanner >> scan4 [ - self step. - ^ self scan3 -] - -{ #category : #generated } -CScanner >> scan5 [ - [ self recordMatch: #(77). - self step. - currentCharacter isDigit ] whileTrue. - ('Ee' includes: currentCharacter) - ifTrue: [ ^ self scan6 ]. - ('FLfl' includes: currentCharacter) - ifTrue: [ ^ self recordAndReportMatch: #(77) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CScanner >> scan6 [ - self step. - ('+-' includes: currentCharacter) - ifTrue: [ self step ]. - currentCharacter isDigit - ifTrue: [ ^ self scan7 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CScanner >> scan7 [ - [ self recordMatch: #(77). - self step. - currentCharacter isDigit ] whileTrue. - ('FLfl' includes: currentCharacter) - ifTrue: [ ^ self recordAndReportMatch: #(77) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CScanner >> scan8 [ - [ self step. - currentCharacter == $* - ifTrue: [ [ self step. - currentCharacter == $* ] whileTrue. - currentCharacter == $/ - ifTrue: [ ^ self recordAndReportMatch: #(75) ]. - ^ self scan8 ]. - true ] whileTrue -] - -{ #category : #generated } -CScanner >> scan9 [ - self step. - currentCharacter isDigit - ifTrue: [ ^ self scan5 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CScanner >> scanForToken [ - self step. - currentCharacter == $! - ifTrue: - [ ^ self scanForTokenX18 ]. - currentCharacter == $" - ifTrue: [ ^ self scan1 ]. - currentCharacter == $% - ifTrue: - [ ^ self scanForTokenX12 ]. - currentCharacter == $& - ifTrue: - [ ^ self scanForTokenX11 ]. - currentCharacter == $' - ifTrue: [ ^ self scan2 ]. - currentCharacter == $( - ifTrue: [ ^ self recordAndReportMatch: #(8) ]. - currentCharacter == $) - ifTrue: [ ^ self recordAndReportMatch: #(9) ]. - currentCharacter == $* - ifTrue: - [ ^ self scanForTokenX17 ]. - currentCharacter == $+ - ifTrue: - [ ^ self scanForTokenX10 ]. - currentCharacter == $, - ifTrue: [ ^ self recordAndReportMatch: #(15) ]. - currentCharacter == $- - ifTrue: - [ ^ self scanForTokenX5 ]. - ^ self scanForTokenX20 -] - -{ #category : #generated } -CScanner >> scanForTokenX1 [ - self recordMatch: #(77). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan9 ]. - currentCharacter isDigit - ifTrue: [ ^ self scan10 ]. - ('Ee' includes: currentCharacter) - ifTrue: [ ^ self scan6 ]. - ('Xx' includes: currentCharacter) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ [ self recordMatch: #(77). - self step. - currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ] ] whileTrue. - ('LUlu' includes: currentCharacter) - ifTrue: [ ^ self recordAndReportMatch: #(77) ] ]. - ^ self reportLastMatch ]. - ('LUlu' includes: currentCharacter) - ifTrue: [ ^ self recordAndReportMatch: #(77) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CScanner >> scanForTokenX10 [ - self recordMatch: #(12). - self step. - currentCharacter == $+ - ifTrue: [ ^ self recordAndReportMatch: #(13) ]. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(14) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CScanner >> scanForTokenX11 [ - self recordMatch: #(5). - self step. - currentCharacter == $& - ifTrue: [ ^ self recordAndReportMatch: #(6) ]. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(7) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CScanner >> scanForTokenX12 [ - self recordMatch: #(3). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(4) ]. - currentCharacter == $> - ifTrue: [ ^ self recordAndReportMatch: #(82) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CScanner >> scanForTokenX13 [ - [ self recordMatch: #(83). - self step. - currentCharacter isSeparator - or: [ currentCharacter == Character pageUp ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -CScanner >> scanForTokenX14 [ - self recordMatch: #(36). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(37) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CScanner >> scanForTokenX15 [ - self recordMatch: #(29). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(30) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CScanner >> scanForTokenX16 [ - self recordMatch: #(23). - self step. - currentCharacter == $> - ifTrue: [ ^ self recordAndReportMatch: #(80) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CScanner >> scanForTokenX17 [ - self recordMatch: #(10). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(11) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CScanner >> scanForTokenX18 [ - self recordMatch: #(1). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(2) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CScanner >> scanForTokenX19 [ - currentCharacter == $^ - ifTrue: - [ ^ self scanForTokenX14 ]. - currentCharacter == ${ - ifTrue: [ ^ self recordAndReportMatch: #(81) ]. - currentCharacter == $| - ifTrue: - [ ^ self scanForTokenX7 ]. - currentCharacter == $} - ifTrue: [ ^ self recordAndReportMatch: #(82) ]. - currentCharacter == $~ - ifTrue: [ ^ self recordAndReportMatch: #(73) ]. - currentCharacter isDigit - ifTrue: [ ^ self scan10 ]. - (currentCharacter isSeparator - or: [ currentCharacter == Character pageUp ]) - ifTrue: - [ ^ self scanForTokenX13 ]. - ((currentCharacter between: $A and: $K) - or: [ (currentCharacter between: $M and: $Z) - or: [ currentCharacter == $_ or: [ currentCharacter between: $a and: $z ] ] ]) - ifTrue: - [ self scanForTokenX4 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CScanner >> scanForTokenX2 [ - self recordMatch: #(76). - self step. - currentCharacter == $" - ifTrue: [ ^ self scan1 ]. - currentCharacter == $' - ifTrue: [ ^ self scan2 ]. - ((currentCharacter between: $0 and: $9) - or: [ (currentCharacter between: $A and: $Z) - or: [ currentCharacter == $_ or: [ currentCharacter between: $a and: $z ] ] ]) - ifTrue: [ [ self recordMatch: #(76). - self step. - (currentCharacter between: $0 and: $9) - or: [ (currentCharacter between: $A and: $Z) - or: [ currentCharacter == $_ or: [ currentCharacter between: $a and: $z ] ] ] ] - whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CScanner >> scanForTokenX20 [ - currentCharacter == $. - ifTrue: - [ ^ self scanForTokenX9 ]. - currentCharacter == $/ - ifTrue: - [ ^ self scanForTokenX8 ]. - currentCharacter == $0 - ifTrue: - [ ^ self scanForTokenX1 ]. - currentCharacter == $: - ifTrue: - [ ^ self scanForTokenX16 ]. - currentCharacter == $; - ifTrue: [ ^ self recordAndReportMatch: #(24) ]. - currentCharacter == $< - ifTrue: - [ ^ self scanForTokenX3 ]. - currentCharacter == $= - ifTrue: - [ ^ self scanForTokenX15 ]. - currentCharacter == $> - ifTrue: - [ ^ self scanForTokenX6 ]. - currentCharacter == $? - ifTrue: [ ^ self recordAndReportMatch: #(35) ]. - currentCharacter == $L - ifTrue: - [ ^ self scanForTokenX2 ]. - currentCharacter == $[ - ifTrue: [ ^ self recordAndReportMatch: #(79) ]. - currentCharacter == $] - ifTrue: [ ^ self recordAndReportMatch: #(80) ]. - ^ self scanForTokenX19 -] - -{ #category : #generated } -CScanner >> scanForTokenX3 [ - self recordMatch: #(25). - self step. - currentCharacter == $% - ifTrue: [ ^ self recordAndReportMatch: #(81) ]. - currentCharacter == $: - ifTrue: [ ^ self recordAndReportMatch: #(79) ]. - currentCharacter == $< - ifTrue: [ self recordMatch: #(26). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(27) ]. - ^ self reportLastMatch ]. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(28) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CScanner >> scanForTokenX4 [ - [ self recordMatch: #(76). - self step. - (currentCharacter between: $0 and: $9) - or: [ (currentCharacter between: $A and: $Z) - or: [ currentCharacter == $_ or: [ currentCharacter between: $a and: $z ] ] ] ] - whileTrue -] - -{ #category : #generated } -CScanner >> scanForTokenX5 [ - self recordMatch: #(16). - self step. - currentCharacter == $- - ifTrue: [ ^ self recordAndReportMatch: #(17) ]. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(18) ]. - currentCharacter == $> - ifTrue: [ ^ self recordAndReportMatch: #(19) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CScanner >> scanForTokenX6 [ - self recordMatch: #(31). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(32) ]. - currentCharacter == $> - ifTrue: [ self recordMatch: #(33). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(34) ] ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CScanner >> scanForTokenX7 [ - self recordMatch: #(70). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(71) ]. - currentCharacter == $| - ifTrue: [ ^ self recordAndReportMatch: #(72) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CScanner >> scanForTokenX8 [ - self recordMatch: #(21). - self step. - currentCharacter == $* - ifTrue: [ ^ self scan8 ]. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(22) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CScanner >> scanForTokenX9 [ - self recordMatch: #(20). - self step. - currentCharacter == $. - ifTrue: [ self step. - currentCharacter == $. - ifTrue: [ ^ self recordAndReportMatch: #(74) ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan5 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -CScanner >> tokenActions [ - ^ #(nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil #comment #IDENTIFIER nil nil nil nil nil nil #whitespace) -] diff --git a/src/SmaCC_C_Parser/package.st b/src/SmaCC_C_Parser/package.st deleted file mode 100644 index d35d21774..000000000 --- a/src/SmaCC_C_Parser/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_C_Parser' } diff --git a/src/SmaCC_Debugging_Support/AbstractFileReference.extension.st b/src/SmaCC_Debugging_Support/AbstractFileReference.extension.st deleted file mode 100644 index 9ba9cc867..000000000 --- a/src/SmaCC_Debugging_Support/AbstractFileReference.extension.st +++ /dev/null @@ -1,53 +0,0 @@ -Extension { #name : #AbstractFileReference } - -{ #category : #'*SmaCC_Debugging_Support' } -AbstractFileReference >> gtParseInspectorViewIn: composite [ - - | extension tabulator | - extension := self extension. - extension isEmpty - ifTrue: [ ^ self ]. - extension := '.' , extension. - SmaCCParser allSubclasses - do: [ :parser | - (parser fileExtensions includes: extension) - ifTrue: [ tabulator := composite tabulator. - tabulator - title: [ parser name asString ]; - row: #buttons size: 35; - row: #result. - tabulator transmit - to: #buttons; - andShow: [ :presentation | - presentation actionList - act: [ :l | - ((tabulator paneNamed: #buttons) port: #result) - value: - ([ self smaCCParseUsing: parser ] - on: SmaCCParserError - do: [ :ex | ex return: ex ]) ] - entitled: 'Parse'; - act: [ [ self smaCCParseUsing: parser. - UIManager default message: 'Parses without errors' ] - on: SmaCCParserError - do: [ :ex | Processor activeProcess debug: thisContext title: ex description full: true ] ] - entitled: 'Debug' ]. - tabulator transmit - from: #buttons port: #result; - to: #result; - andShow: [ :presentation :obj | - | inspector | - inspector := GTInspector new. - inspector startOn: obj. - (presentation custom: inspector) title: 'Result' ] ] ] -] - -{ #category : #'*SmaCC_Debugging_Support' } -AbstractFileReference >> smaCCParseUsing: parserClass [ - | contents | - self - readStreamDo: [ :str | - parserClass setEncodingOn: str. - contents := str contents ]. - ^ parserClass parse: contents -] diff --git a/src/SmaCC_Debugging_Support/SmaCCAcceptAction.extension.st b/src/SmaCC_Debugging_Support/SmaCCAcceptAction.extension.st deleted file mode 100644 index 3706cdd1d..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCAcceptAction.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #SmaCCAcceptAction } - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCAcceptAction >> simulateOn: aParserSimulator token: aSmaCCToken [ - aParserSimulator accept. - aParserSimulator processedToken -] diff --git a/src/SmaCC_Debugging_Support/SmaCCAmbiguousAction.extension.st b/src/SmaCC_Debugging_Support/SmaCCAmbiguousAction.extension.st deleted file mode 100644 index 5324186da..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCAmbiguousAction.extension.st +++ /dev/null @@ -1,27 +0,0 @@ -Extension { #name : #SmaCCAmbiguousAction } - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCAmbiguousAction >> simulateOn: aParserSimulator token: aSmaCCToken [ - | currentState uniqueActions | - currentState := aParserSimulator currentParserState. - uniqueActions := self uniqueActions. - 2 to: uniqueActions size do: [ :i | - aParserSimulator duplicateState. - (actions at: i) simulateOn: aParserSimulator token: aSmaCCToken. - aParserSimulator processToken. - aParserSimulator restoreState: currentState andToken: aSmaCCToken ]. - uniqueActions first simulateOn: aParserSimulator token: aSmaCCToken -] - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCAmbiguousAction >> uniqueActions [ - | hasShift | - hasShift := false. - ^ actions - reject: [ :each | - | previousHasShift | - each isShift - and: [ previousHasShift := hasShift. - hasShift := true. - previousHasShift ] ] -] diff --git a/src/SmaCC_Debugging_Support/SmaCCDebugMatchResult.class.st b/src/SmaCC_Debugging_Support/SmaCCDebugMatchResult.class.st deleted file mode 100644 index 57d1ee6fe..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCDebugMatchResult.class.st +++ /dev/null @@ -1,332 +0,0 @@ -Class { - #name : #SmaCCDebugMatchResult, - #superclass : #Object, - #instVars : [ - 'patternNode', - 'matchedNodes', - 'matched', - 'children', - 'parent' - ], - #category : #'SmaCC_Debugging_Support-Pattern Matching' -} - -{ #category : #examples } -SmaCCDebugMatchResult class >> exampleFailure [ - - | jsParser result | - jsParser := Smalltalk at: #JSParser ifAbsent: [ ^ nil ]. - result := (jsParser parse: '`?a` + `?a` + `?a`' startingAt: jsParser startingStateForExpression) - debugMatch: (jsParser parse: '2 + 2 + 3' startingAt: jsParser startingStateForExpression). - self assert: result matched not. - ^ result -] - -{ #category : #examples } -SmaCCDebugMatchResult class >> exampleSuccess [ - - | jsParser result | - jsParser := Smalltalk at: #JSParser ifAbsent: [ ^ nil ]. - result := (jsParser parse: 'f(`?a{beList}`,1,`?b{beList}`,4,`?c{beList}`)' startingAt: jsParser startingStateForExpression) - debugMatch: (jsParser parse: 'f(0,1,2,3,4)' startingAt: jsParser startingStateForExpression). - self assert: result matched. - ^ result -] - -{ #category : #'instance creation' } -SmaCCDebugMatchResult class >> forPattern: patternNode [ - ^ self new - patternNode: patternNode; - yourself -] - -{ #category : #inspector } -SmaCCDebugMatchResult >> allNodeChildren [ - | allChildren | - children isEmpty - ifTrue: [ ^ #() ]. - allChildren := OrderedCollection new. - matchedNodes - do: [ :node | - node node - nodesDo: [ :each | allChildren add: (self nodeChildFor: each) ] - andTokensDo: [ :each | allChildren add: (self nodeChildFor: each) ] ]. - ^ allChildren asSortedCollection: [ :a :b | a node startPosition < b node startPosition ] -] - -{ #category : #inspector } -SmaCCDebugMatchResult >> allPatternChildren [ - | allChildren | - children isEmpty - ifTrue: [ ^ #() ]. - allChildren := OrderedCollection new. - patternNode - nodesDo: [ :each | allChildren add: (self patternChildFor: each) ] - andTokensDo: [ :each | allChildren add: (self patternChildFor: each) ]. - ^ allChildren asSortedCollection: [ :a :b | a patternNode startPosition < b patternNode startPosition ] -] - -{ #category : #accessing } -SmaCCDebugMatchResult >> children [ - ^ children -] - -{ #category : #accessing } -SmaCCDebugMatchResult >> children: anObject [ - children := anObject -] - -{ #category : #private } -SmaCCDebugMatchResult >> createResultFor: anObject [ - | found search | - (patternNode isKindOf: SmaCCToken) - ifTrue: [ ^ nil ]. - found := false. - search := [ :each | found := found or: [ each == anObject ] ]. - patternNode nodesDo: search andTokensDo: search. - found - ifTrue: [ ^ children - add: - ((self class forPattern: anObject) - parent: self; - yourself) ]. - patternNode - nodesDo: [ :each | - (self doesNode: each contain: anObject) - ifTrue: [ | result | - result := self class forPattern: each. - result parent: self. - children add: result. - ^ result createResultFor: anObject ] ]. - ^ nil -] - -{ #category : #private } -SmaCCDebugMatchResult >> doesNode: aNode contain: anObject [ - aNode - allNodesDo: [ :each | - each == anObject - ifTrue: [ ^ true ] ] - andTokensDo: [ :each | - each == anObject - ifTrue: [ ^ true ] ]. - ^ false -] - -{ #category : #private } -SmaCCDebugMatchResult >> findResultFor: anObject [ - patternNode == anObject - ifTrue: [ ^ self ]. - 1 to: children size do: [ :i | - | result | - result := (children at: i) findResultFor: anObject. - result notNil - ifTrue: [ [ children size > i ] whileTrue: [ children removeLast ]. - ^ result ] ]. - ^ self createResultFor: anObject -] - -{ #category : #inspector } -SmaCCDebugMatchResult >> formatText: text matched: isMatched [ - isMatched isNil - ifTrue: [ text addAttribute: (TextColor new color: Color lightGray) ] - ifFalse: [ isMatched - ifFalse: [ text - addAttribute: (TextColor new color: Color red); - allBold ] ] -] - -{ #category : #inspector } -SmaCCDebugMatchResult >> gtInspectorIn: aComposite [ - - | tabulator | - tabulator := aComposite tabulator. - tabulator - title: 'Pattern matching'; - column: [ :c | - c - row: #patternTree; - row: #patternSource ]; - column: [ :c | - c - row: #nodeTree; - row: #nodeSource ]. - tabulator transmit - to: #patternTree; - andShow: [ :p | - p fastTreeTable - title: 'Pattern'; - display: [ Array with: self ]; - children: [ :each | each allPatternChildren ]; - allExpanded; - column: 'Variable' - evaluated: [ :each | self patternLabelFor: each ]; - column: 'Type' - evaluated: [ :each | '' ] - tags: [ :each | {each patternNode class name} ] ]. - tabulator transmit - to: #patternSource; - andShow: - [ :p | p text display: [ patternNode topParent completeSource ifNil: [ '' ] ] ]. - tabulator transmit - from: #patternTree port: #selection; - to: #patternSource port: #selectionInterval; - transformation: [ :e | - e isNil - ifTrue: [ 1 to: 0 ] - ifFalse: [ e patternNode sourceInterval ] ]. - tabulator transmit - to: #nodeTree; - andShow: [ :p | - p fastTreeTable - beMultiple; - title: 'AST'; - display: [ matchedNodes ]; - children: [ :each | each matchResult allNodeChildren ]; - allExpanded; - column: 'Variable' evaluated: [ :each | self nodeLabelFor: each ]; - column: 'Type' - evaluated: [ :each | '' ] - tags: [ :each | {each node class name} ] ]. - tabulator transmit - to: #nodeSource; - andShow: [ :p | - p text - display: [ matchedNodes isEmpty - ifTrue: [ '' ] - ifFalse: [ matchedNodes first node topParent completeSource ifNil: [ '' ] ] ] ]. - tabulator transmit - from: #patternTree port: #selection; - to: #nodeTree port: #selection; - transformation: [ :e | - e isNil - ifTrue: [ #() ] - ifFalse: [ e matchedNodes ] ]. - tabulator transmit - from: #nodeTree port: #selection; - to: #nodeSource port: #selectionInterval; - transformation: [ :e | - | start end | - start := SmallInteger maxVal. - end := 0. - e - do: [ :each | - start := start min: each node startPosition. - end := end max: each node stopPosition ]. - start = SmallInteger maxVal - ifTrue: [ start := 1 ]. - start to: end ] -] - -{ #category : #'initialize-release' } -SmaCCDebugMatchResult >> initialize [ - super initialize. - children := OrderedCollection new. - matchedNodes := #(). - matched := nil -] - -{ #category : #accessing } -SmaCCDebugMatchResult >> matched [ - ^ matched -] - -{ #category : #accessing } -SmaCCDebugMatchResult >> matched: aBoolean [ - matched := aBoolean -] - -{ #category : #accessing } -SmaCCDebugMatchResult >> matchedNodes [ - ^ matchedNodes -] - -{ #category : #inspector } -SmaCCDebugMatchResult >> nodeChildFor: aNode [ - ^ (children - detect: [ :each | each nodes identityIncludes: aNode ] - ifNone: [ self class new - parent: self; - nodes: {aNode}; - yourself ]) matchedNodes detect: [ :each | each node == aNode ] -] - -{ #category : #inspector } -SmaCCDebugMatchResult >> nodeLabelFor: each [ - | text | - text := (each matchResult parent isNil - ifTrue: [ 'aNode' ] - ifFalse: [ each matchResult parent nodeLabelForChild: each node ]) asText. - self formatText: text matched: each matchResult matched. - ^ text -] - -{ #category : #inspector } -SmaCCDebugMatchResult >> nodeLabelForChild: aNode [ - ^ (self nodes - detect: [ :node | - | found | - found := false. - node nodesDo: [ :each | found := found or: [ each == aNode ] ] andTokensDo: [ :each | found := found or: [ each == aNode ] ]. - found ]) debugLabelForChild: aNode -] - -{ #category : #accessing } -SmaCCDebugMatchResult >> nodes [ - ^ matchedNodes collect: [ :each | each node ] -] - -{ #category : #accessing } -SmaCCDebugMatchResult >> nodes: aCollection [ - matchedNodes := aCollection collect: [ :each | SmaCCDebugMatchedNode forResult: self andNode: each ] -] - -{ #category : #accessing } -SmaCCDebugMatchResult >> parent [ - ^ parent -] - -{ #category : #accessing } -SmaCCDebugMatchResult >> parent: anObject [ - parent := anObject -] - -{ #category : #inspector } -SmaCCDebugMatchResult >> patternChildFor: aNode [ - ^ children - detect: [ :each | each patternNode == aNode ] - ifNone: [ self class new - parent: self; - patternNode: aNode; - yourself ] -] - -{ #category : #inspector } -SmaCCDebugMatchResult >> patternLabelFor: each [ - | text | - text := (each parent isNil - ifTrue: [ 'self' ] - ifFalse: [ each parent patternNode debugLabelForChild: each patternNode ]) asText. - self formatText: text matched: each matched. - ^ text -] - -{ #category : #accessing } -SmaCCDebugMatchResult >> patternNode [ - ^ patternNode -] - -{ #category : #accessing } -SmaCCDebugMatchResult >> patternNode: anObject [ - patternNode := anObject -] - -{ #category : #processing } -SmaCCDebugMatchResult >> processMatchFor: pattern and: anAstNode result: aBoolean [ - (self findResultFor: pattern) - nodes: - (anAstNode isCollection - ifTrue: [ anAstNode ] - ifFalse: [ Array with: anAstNode ]); - matched: aBoolean -] diff --git a/src/SmaCC_Debugging_Support/SmaCCDebugMatchedNode.class.st b/src/SmaCC_Debugging_Support/SmaCCDebugMatchedNode.class.st deleted file mode 100644 index 50cb4190c..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCDebugMatchedNode.class.st +++ /dev/null @@ -1,37 +0,0 @@ -Class { - #name : #SmaCCDebugMatchedNode, - #superclass : #Object, - #instVars : [ - 'matchResult', - 'node' - ], - #category : #'SmaCC_Debugging_Support-Pattern Matching' -} - -{ #category : #'instance creation' } -SmaCCDebugMatchedNode class >> forResult: matchResult andNode: aNode [ - ^ self new - matchResult: matchResult; - node: aNode; - yourself -] - -{ #category : #accessing } -SmaCCDebugMatchedNode >> matchResult [ - ^ matchResult -] - -{ #category : #accessing } -SmaCCDebugMatchedNode >> matchResult: anObject [ - matchResult := anObject -] - -{ #category : #accessing } -SmaCCDebugMatchedNode >> node [ - ^ node -] - -{ #category : #accessing } -SmaCCDebugMatchedNode >> node: anObject [ - node := anObject -] diff --git a/src/SmaCC_Debugging_Support/SmaCCDebuggingAction.class.st b/src/SmaCC_Debugging_Support/SmaCCDebuggingAction.class.st deleted file mode 100644 index abbb931ed..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCDebuggingAction.class.st +++ /dev/null @@ -1,36 +0,0 @@ -Class { - #name : #SmaCCDebuggingAction, - #superclass : #DebugAction, - #category : #'SmaCC_Debugging_Support-Debugger' -} - -{ #category : #testing } -SmaCCDebuggingAction >> appliesToContext: aContext [ - ^ self session isActive -] - -{ #category : #accessing } -SmaCCDebuggingAction >> help [ - ^ '' -] - -{ #category : #private } -SmaCCDebuggingAction >> stepUntil: aBlock [ - self stepUntil: aBlock context: self session rootContext -] - -{ #category : #private } -SmaCCDebuggingAction >> stepUntil: aBlock context: rootContext [ - | context process previousContext | - process := self session process. - context := self currentContext. - (process suspendedContext findContextSuchThat: [ :c | c == context ]) ifNil: [ ^ self ]. - previousContext := nil. - [ context notNil and: [ process isTerminating not and: [ process isTerminated not and: [ process suspendedContext notNil and: [ aBlock value: context ] ] ] ] ] - whileFalse: [ previousContext == context - ifFalse: [ (context findContextSuchThat: [ :c | c == rootContext ]) isNil - ifTrue: [ ^ self session updateContextTo: context ]. - previousContext := context ]. - context := process step: context ]. - self session updateContextTo: context -] diff --git a/src/SmaCC_Debugging_Support/SmaCCGraphNode.class.st b/src/SmaCC_Debugging_Support/SmaCCGraphNode.class.st deleted file mode 100644 index e73c29b03..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCGraphNode.class.st +++ /dev/null @@ -1,177 +0,0 @@ -Class { - #name : #SmaCCGraphNode, - #superclass : #Object, - #instVars : [ - 'state', - 'name', - 'success', - 'followed', - 'directLinks', - 'previousNodes', - 'reductions', - 'parser' - ], - #category : #'SmaCC_Debugging_Support-Roassal' -} - -{ #category : #inspecting } -SmaCCGraphNode class >> gtExampleSmaCCGraphNode [ - - - | parser | - parser := SmaCCDefinitionParser new. - ^ SmaCCGraphNode - named: '' - state: parser class defaultStartingState - parser: parser -] - -{ #category : #'instance creation' } -SmaCCGraphNode class >> named: aString state: anInteger parser: aSmaCCParser [ - ^ self new - name: aString; - state: anInteger; - parser: aSmaCCParser; - yourself -] - -{ #category : #accessing } -SmaCCGraphNode >> addDirectLinkToNodeNamed: aString state: anInteger [ - | node | - (followed notNil and: [ followed name = aString ]) - ifTrue: [ ^ followed ]. - directLinks - do: [ :each | - each name = aString - ifTrue: [ ^ each ] ]. - node := self class named: aString state: anInteger parser: parser. - node addPrevious: self. - ^ directLinks add: node -] - -{ #category : #private } -SmaCCGraphNode >> addPrevious: aSmaCCGraphNode [ - previousNodes add: aSmaCCGraphNode -] - -{ #category : #accessing } -SmaCCGraphNode >> addReduction: aString [ - reductions add: aString -] - -{ #category : #accessing } -SmaCCGraphNode >> allNodes [ - | nodes | - nodes := IdentitySet new. - self allNodesInto: nodes. - ^ nodes -] - -{ #category : #private } -SmaCCGraphNode >> allNodesInto: aCollection [ - (aCollection includes: self) - ifTrue: [ ^ self ]. - aCollection add: self. - followed notNil - ifTrue: [ followed allNodesInto: aCollection ]. - directLinks do: [ :each | each allNodesInto: aCollection ] -] - -{ #category : #accessing } -SmaCCGraphNode >> description [ - | stream | - previousNodes isEmpty - ifTrue: [ ^ 'Start' ]. - success - ifTrue: [ ^ 'Parsing was successful' ]. - stream := WriteStream on: String new. - reductions asSortedCollection do: [ :each | stream nextPutAll: each ] separatedBy: [ stream cr ]. - ^ stream contents -] - -{ #category : #accessing } -SmaCCGraphNode >> directLinks [ - ^ directLinks -] - -{ #category : #accessing } -SmaCCGraphNode >> followed [ - ^ followed -] - -{ #category : #accessing } -SmaCCGraphNode >> followed: aSmaCCGraphNode [ - followed := aSmaCCGraphNode. - aSmaCCGraphNode notNil - ifTrue: [ aSmaCCGraphNode addPrevious: self ] -] - -{ #category : #inspecting } -SmaCCGraphNode >> gtGraphInspectorViewIn: composite [ - - (composite respondsTo: #roassal2) - ifFalse: [ ^ self ]. - composite roassal2 - title: 'Graph'; - initializeView: [ parser roassalViewForStack: self stack ] -] - -{ #category : #'initialize-release' } -SmaCCGraphNode >> initialize [ - super initialize. - name := ''. - success := false. - directLinks := OrderedCollection new. - previousNodes := OrderedCollection new. - reductions := Set new -] - -{ #category : #testing } -SmaCCGraphNode >> isFollowed [ - ^ previousNodes isEmpty or: [ previousNodes anySatisfy: [ :each | each followed == self ] ] -] - -{ #category : #accessing } -SmaCCGraphNode >> name [ - ^ name -] - -{ #category : #accessing } -SmaCCGraphNode >> name: aString [ - name := aString -] - -{ #category : #accessing } -SmaCCGraphNode >> parser: aSmaCCParser [ - parser := aSmaCCParser -] - -{ #category : #private } -SmaCCGraphNode >> stack [ - | stack | - stack := previousNodes notEmpty - ifTrue: [ previousNodes first stack ] - ifFalse: [ OrderedCollection new ]. - stack add: state. - ^ stack -] - -{ #category : #accessing } -SmaCCGraphNode >> state [ - ^ state -] - -{ #category : #accessing } -SmaCCGraphNode >> state: anInteger [ - state := anInteger -] - -{ #category : #accessing } -SmaCCGraphNode >> success [ - ^ success -] - -{ #category : #accessing } -SmaCCGraphNode >> success: aBoolean [ - success := aBoolean -] diff --git a/src/SmaCC_Debugging_Support/SmaCCNode.extension.st b/src/SmaCC_Debugging_Support/SmaCCNode.extension.st deleted file mode 100644 index 3b2796f3b..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCNode.extension.st +++ /dev/null @@ -1,64 +0,0 @@ -Extension { #name : #SmaCCNode } - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCNode >> gtGraphInspectorViewIn: composite [ - - (Smalltalk includesKey: #RTView) not - ifTrue: [ ^ nil ]. - composite roassal2 - title: 'Graph'; - initializeView: [ | nodes view shape elements | - nodes := self allStates. - view := (Smalltalk at: #RTView) new. - shape := ((Smalltalk at: #RTRoundedBox) new - borderRadius: 10; - color: Color white; - borderWidth: [ :n | - n hasSimpleLoop - ifTrue: [ 2 ] - ifFalse: [ 1 ] ]; - borderColor: [ :n | - n == self - ifTrue: [ Color green ] - ifFalse: [ n action isNil - ifTrue: [ Color red ] - ifFalse: [ n action isEmpty - ifTrue: [ Color lightGray ] - ifFalse: [ Color black ] ] ] ]; - yourself) - + - ((Smalltalk at: #RTLabel) new - color: Color black; - text: [ :n | - | label | - label := n id printString , String cr - , - (n action isSymbol - ifTrue: [ n ] - ifFalse: [ (n action ifNotNil: [ :a | a asArray ]) printString ]). - label copyFrom: 1 to: (label size min: 25) ]; - yourself). - shape allOfSameSizeWithPadding. - elements := shape elementsOn: nodes. - elements @ (Smalltalk at: #RTDraggable). - view addAll: elements. - (Smalltalk at: #RTEdgeBuilder) new - view: view; - objects: nodes; - label: - [ :from :to | (from transitions detect: [ :each | each to == to ]) edgeLabel ]; - shape: - ((Smalltalk at: #RTStyledMultiLine) new - color: (Color blue alpha: 0.4); - arrowHead; - attachPoint: (Smalltalk at: #RTShorterDistanceAttachPoint) instance; - yourself); - connectFrom: #yourself - toAll: [ :node | node transitions collect: [ :each | each to ] ]. - view @ (Smalltalk at: #RTDraggableView). - (Smalltalk at: #RTForceBasedLayout) new - charge: -6000; - nbIterations: 50; - on: elements edges: view edges. - view ] -] diff --git a/src/SmaCC_Debugging_Support/SmaCCParseNode.extension.st b/src/SmaCC_Debugging_Support/SmaCCParseNode.extension.st deleted file mode 100644 index fddbc17f0..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCParseNode.extension.st +++ /dev/null @@ -1,165 +0,0 @@ -Extension { #name : #SmaCCParseNode } - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCParseNode >> debugLabelForChild: anObject [ - self singularVariableSelectors - do: [ :each | - (self perform: each) - do: [ :sel | - (self perform: sel) == anObject - ifTrue: [ ^ sel ] ] ]. - self compositeVariableSelectors - do: [ :each | - (self perform: each) - do: [ :sel | - | index | - index := (self perform: sel) identityIndexOf: anObject. - index > 0 - ifTrue: [ ^ index printString , ': ' , sel ] ] ]. - ^ anObject class name -] - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCParseNode >> debugMatch: aNode [ - | process done value match context arg | - match := SmaCCDebugMatchResult forPattern: self. - done := false. - process := [ [ value := self match: aNode inContext: Dictionary new ] - ensure: [ done := true ] ] newProcess. - [ [ done ] - whileFalse: [ context := process suspendedContext. - (context isBlockContext not and: [ context method selector = #match:inContext: ]) - ifTrue: [ arg := context arguments at: 1 ]. - process step: process suspendedContext. - (context isDead and: [ context isBlockContext not and: [ context method selector = #match:inContext: ] ]) - ifTrue: [ match processMatchFor: context receiver and: arg result: process suspendedContext top ] ] ] - ensure: [ process terminate ]. - ^ match -] - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCParseNode >> gtAttributesIn: aComposite [ - - | tabulator | - (attributes notNil and: [ attributes notEmpty ]) - ifFalse: [ ^ self ]. - tabulator := aComposite tabulator. - tabulator - title: 'Attributes'; - row: #attributes. - tabulator transmit - to: #attributes; - andShow: [ :pres | - pres fastTable - display: [ attributes keys asSortedCollection ]; - column: 'Name' evaluated: [ :each | each ]; - column: 'Value' evaluated: [ :each | self attributeNamed: each ifAbsent: [ ] ] ]. - tabulator transmit - toOutsidePort: #selection; - from: #attributes port: #selection; - transformed: [ :name | self attributeNamed: name ifAbsent: [ ] ] -] - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCParseNode >> gtChildrenOf: each [ - ^ (each at: 2) = #node - ifTrue: [ each last gtInspectorItems ] - ifFalse: [ (each at: 2) = #nodes - ifTrue: [ self gtCollectionItems: each last type: #node ] - ifFalse: [ (each at: 2) = #tokens - ifTrue: [ self gtCollectionItems: each last type: #token ] - ifFalse: [ #() ] ] ] -] - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCParseNode >> gtCollectionItems: aCollection type: aSymbol [ - ^ (1 to: aCollection size) collect: [ :i | Array with: i printString with: aSymbol with: (aCollection at: i) ] -] - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCParseNode class >> gtExampleSimple [ - - ^ self new -] - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCParseNode >> gtInspectorItems [ - | items | - items := OrderedCollection new. - self class allInstVarNames - do: - [ :each | - | selector tag value | - selector := each asSymbol. - (value := self perform: selector) notNil - ifTrue: - [ tag := nil. - ((self otherVariables includes: selector) or: [ self ignoredOtherVariables includes: selector ]) - ifTrue: [ tag := #other ]. - ((self nodeVariables includes: selector) or: [ self ignoredNodeVariables includes: selector ]) - ifTrue: [ tag := #node ]. - (((self compositeNodeVariables includes: selector) or: [ self ignoredCompositeNodeVariables includes: selector ]) - and: [ value notEmpty ]) - ifTrue: [ tag := #nodes ]. - ((self tokenVariables includes: selector) or: [ self ignoredTokenVariables includes: selector ]) - ifTrue: [ tag := #token ]. - (((self compositeTokenVariables includes: selector) or: [ self ignoredCompositeTokenVariables includes: selector ]) - and: [ value notEmpty ]) - ifTrue: [ tag := #tokens ]. - tag notNil - ifTrue: [ items add: (Array with: each with: tag with: value) ] ] ]. - ^ items -] - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCParseNode >> gtInspectorSourceIn: aComposite [ - - aComposite text - title: 'Source'; - withLineNumbers: true; - display: [ self topParent completeSource ]; - initialize: - [ :textPresentation | textPresentation selectionInterval: self sourceInterval ] -] - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCParseNode >> gtInspectorTreeIn: aComposite [ - - aComposite tabulator - with: [ :browser | - browser title: 'Tree'. - browser row: #variables. - browser transmit - from: #variables; - toOutsidePort: #selection; - transformed: [ :each | each ifNotNil: [ each last ] ]. - browser transmit - to: #variables; - andShow: [ :composite | - composite table - display: [ Array with: (Array with: 'self' with: #node with: self) ]; - children: [ :each | self gtChildrenOf: each ]; - format: [ :each | each first ]; - column: 'Variable' evaluated: [ :each | each first ]; - column: 'Type' - evaluated: [ :each | - (each at: 2) = #node - ifTrue: [ each last class name ] - ifFalse: [ '' ] ] - tags: [ :each | Array with: (each at: 2) ] ] ] -] - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCParseNode >> gtParentsIn: aComposite [ - - parent isNil - ifTrue: [ ^ self ]. - aComposite tree - title: 'Parents'; - allExpanded; - display: [ Array with: self ]; - format: [ :each | each class name ]; - children: [ :each | - (each notNil and: [ each parent notNil ]) - ifTrue: [ Array with: each parent ] ] -] diff --git a/src/SmaCC_Debugging_Support/SmaCCParser.extension.st b/src/SmaCC_Debugging_Support/SmaCCParser.extension.st deleted file mode 100644 index ec9e586c9..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCParser.extension.st +++ /dev/null @@ -1,241 +0,0 @@ -Extension { #name : #SmaCCParser } - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCParser class >> filesWithParserErrorsIn: aDirectory [ - ^ (self sourceFilesIn: aDirectory) - select: [ :each | - [ self parseFile: each. - false ] - on: Error - do: [ :ex | ex return: true ] ] -] - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCParser >> fillInGraphFromStack: nodeCollection returnTable: tableArray size: sizeInteger [ - self - allActionsAndSymbolsForState: nodeCollection last state - do: [ :action :symbol | - | id type next name entry top stream reduction | - id := action bitShift: -2. - type := action bitAnd: self actionMask. - type = self acceptAction - ifTrue: [ nodeCollection last success: true ]. - type = self shiftAction - ifTrue: [ ((tableArray at: id) > sizeInteger or: [ self isAcceptState: id ]) - ifTrue: [ name := self symbolNameFor: symbol. - next := nodeCollection last addDirectLinkToNodeNamed: name state: id. - nodeCollection add: next. - [ self fillInGraphFromStack: nodeCollection returnTable: tableArray size: sizeInteger + 1 ] - ensure: [ nodeCollection removeLast ] ] ]. - type = self reduceAction - ifTrue: [ entry := self reduceTable at: id. - (entry at: 2) >= sizeInteger - ifTrue: [ name := self symbolNameFor: entry first. - stream := WriteStream on: String new. - stream - nextPutAll: name; - nextPutAll: ' :'. - nodeCollection size - (entry at: 2) + 1 to: nodeCollection size do: [ :i | - stream - nextPut: $ ; - nextPutAll: (nodeCollection at: i) name ]. - stream nextPut: $;. - reduction := stream contents. - top := nodeCollection at: nodeCollection size - (entry at: 2). - nodeCollection size - (entry at: 2) + 1 to: nodeCollection size do: [ :i | (nodeCollection at: i) addReduction: reduction ]. - next := top addDirectLinkToNodeNamed: name state: ((self actionForState: top state and: entry first) bitShift: -2) ] ] ] -] - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCParser >> graphForStack: aCollection [ - | id name next graphNodeStack returnTable | - graphNodeStack := OrderedCollection new. - graphNodeStack add: (SmaCCGraphNode named: '' state: aCollection first parser: self). - 2 to: aCollection size do: [ :i | - id := self symbolIdForTransitionFrom: (aCollection at: i - 1) to: (aCollection at: i). - name := self symbolNameFor: id. - next := SmaCCGraphNode named: name state: (aCollection at: i) parser: self. - graphNodeStack last followed: next. - graphNodeStack add: next ]. - returnTable := self maxReturnSizeTable. - self fillInGraphFromStack: graphNodeStack returnTable: returnTable size: 0. - ^ graphNodeStack first -] - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCParser class >> gtExampleSmaCCParser [ - - - - ^ SmaCCDefinitionParser new. - -] - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCParser class >> gtGraphInspectorViewIn: composite [ - - self new gtGraphInspectorViewIn: composite -] - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCParser >> gtGraphInspectorViewIn: composite [ - - ((Smalltalk includesKey: #RTView) not - or: [ ((self class class whichClassIncludesSelector: #transitionTable) >> #transitionTable) methodClass = SmaCCParser class ]) - ifTrue: [ ^ nil ]. - composite roassal2 - title: 'Graph'; - initializeView: [ self roassalView ] -] - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCParser >> isAcceptState: stateIndex [ - self - allActionsAndSymbolsForState: stateIndex - do: [ :action :symbol | - action = self acceptAction - ifTrue: [ ^ true ] ]. - ^ false -] - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCParser >> layout: aView from: aNode position: aPoint [ - | element bottom nextLeft horizontalGap verticalGap position | - horizontalGap := 20. - verticalGap := 3. - element := aView elementFromModel: aNode. - nextLeft := aPoint x + element width + horizontalGap. - bottom := aPoint y. - aNode followed notNil - ifTrue: [ bottom := (self layout: aView from: aNode followed position: nextLeft @ bottom) + verticalGap ]. - (aNode directLinks asSortedCollection: [ :a :b | a name < b name ]) do: [ :each | bottom := (self layout: aView from: each position: nextLeft @ bottom) + verticalGap ]. - bottom = aPoint y - ifTrue: [ bottom := bottom + element height + verticalGap ]. - bottom := bottom - verticalGap. - bottom := bottom max: aPoint y + element height. - position := aPoint x @ ((bottom + aPoint y) / 2 - (element height / 2)). - (Smalltalk at: #RTLayoutTranslator) default translateTopLeftOf: element to: position. - ^ bottom -] - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCParser >> maxReturnSizeTable [ - | table | - table := Array new: self transitionTable size withAll: 0. - 1 to: table size do: [ :i | - self - allActionsAndSymbolsForState: i - do: [ :action :symbol | - (action bitAnd: self actionMask) = self reduceAction - ifTrue: [ | size | - size := (self reduceTable at: (action bitShift: -2)) at: 2. - table at: i put: ((table at: i) max: size) ] ] ]. - table max - timesRepeat: [ 1 to: table size do: [ :i | - self - allActionsAndSymbolsForState: i - do: [ :action :symbol | - (action bitAnd: self actionMask) = self shiftAction - ifTrue: [ | size | - size := (table at: (action bitShift: -2)) - 1. - table at: i put: ((table at: i) max: size) ] ] ] ]. - ^ table -] - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCParser >> roassalView [ - ^ self roassalViewForStack: (stateStack ifNil: [ Array with: self class defaultStartingState ]) -] - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCParser >> roassalViewForStack: stack [ - | shape nodes es root view | - root := self graphForStack: stack. - nodes := root allNodes. - view := (Smalltalk at: #RTView) new. - shape := (Smalltalk at: #RTEllipse) new - color: Color white; - borderColor: Color black; - width: 25; - height: 25; - yourself. - view add: (shape elementOn: root). - shape := ((Smalltalk at: #RTRoundedBox) new - borderRadius: [ :n | - ('<"' includes: n name first) - ifTrue: [ 0 ] - ifFalse: [ 10 ] ]; - color: Color white; - borderColor: [ :n | - n success - ifTrue: [ Color green ] - ifFalse: [ n isFollowed - ifTrue: [ Color black ] - ifFalse: [ Color lightGray ] ] ]; - yourself) - + - ((Smalltalk at: #RTLabel) new - color: [ :n | - n success - ifTrue: [ Color green ] - ifFalse: [ n isFollowed - ifTrue: [ Color black ] - ifFalse: [ Color lightGray ] ] ]; - text: [ :n | n name ]; - yourself). - shape allOfSameSizeWithPadding. - es := shape - elementsOn: - (nodes copy - remove: root; - yourself). - view addAll: es. - shape := (Smalltalk at: #RTMultiLine) new. - shape orthoHorizontal. - shape color: Color black. - shape attachPoint: (Smalltalk at: #RTHorizontalAttachPoint) instance. - (Smalltalk at: #RTEdgeBuilder) new - view: view; - objects: nodes; - shape: shape; - connectTo: [ :n | n followed ]. - shape := (Smalltalk at: #RTMultiLine) new. - shape orthoHorizontal. - shape color: Color lightGray. - shape attachPoint: (Smalltalk at: #RTHorizontalAttachPoint) instance. - (Smalltalk at: #RTEdgeBuilder) new - view: view; - objects: nodes; - shape: shape; - connectToAll: [ :n | n directLinks ]. - view elements @ ((Smalltalk at: #RTPopup) text: [ :n | n description ]). - view @ (Smalltalk at: #RTDraggableView). - self layout: view from: root position: 0 @ 0. - ^ view -] - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCParser class >> sourceFilesIn: aDirectory [ - ^ aDirectory asFileReference allFiles - select: [ :each | - | extension | - extension := '.' , each extension. - self fileExtensions includes: extension ] -] - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCParser >> symbolIdForTransitionFrom: fromState to: toState [ - | toValue | - toValue := (toState bitShift: 2) bitOr: self shiftAction. - self - allActionsAndSymbolsForState: fromState - do: [ :action :symbol | - toValue = action - ifTrue: [ ^ symbol ] ]. - ^ 0 -] - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCParser >> symbolNameFor: anInteger [ - ^ self symbolNames at: anInteger ifAbsent: [ '?' ] -] diff --git a/src/SmaCC_Debugging_Support/SmaCCParserDebugSession.class.st b/src/SmaCC_Debugging_Support/SmaCCParserDebugSession.class.st deleted file mode 100644 index 56a626936..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCParserDebugSession.class.st +++ /dev/null @@ -1,31 +0,0 @@ -Class { - #name : #SmaCCParserDebugSession, - #superclass : #DebugSession, - #instVars : [ - 'rootContext' - ], - #category : #'SmaCC_Debugging_Support-Debugger' -} - -{ #category : #testing } -SmaCCParserDebugSession >> isActive [ - ^ rootContext notNil and: [ rootContext isDead not and: [ rootContext ~= self process suspendedContext or: [ rootContext willReturn not ] ] ] -] - -{ #category : #accessing } -SmaCCParserDebugSession >> parser [ - ^ self rootContext ifNotNil: [ :context | context receiver ] -] - -{ #category : #accessing } -SmaCCParserDebugSession >> rootContext [ - ^ rootContext - ifNil: - [ rootContext := interruptedContext - findContextSuchThat: [ :each | each selector = #parse and: [ each receiver isKindOf: SmaCCParser ] ] ] -] - -{ #category : #accessing } -SmaCCParserDebugSession >> scanner [ - ^ self parser scanner -] diff --git a/src/SmaCC_Debugging_Support/SmaCCParserDebugger.class.st b/src/SmaCC_Debugging_Support/SmaCCParserDebugger.class.st deleted file mode 100644 index 9a7db60d2..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCParserDebugger.class.st +++ /dev/null @@ -1,384 +0,0 @@ -Class { - #name : #SmaCCParserDebugger, - #superclass : #GTGenericStackDebugger, - #instVars : [ - 'isGLR' - ], - #classInstVars : [ - 'availableAutomatically' - ], - #category : #'SmaCC_Debugging_Support-Debugger' -} - -{ #category : #accessing } -SmaCCParserDebugger class >> availableAutomatically [ - ^ availableAutomatically ifNil: [ false ] -] - -{ #category : #accessing } -SmaCCParserDebugger class >> availableAutomatically: aBoolean [ - availableAutomatically := aBoolean -] - -{ #category : #accessing } -SmaCCParserDebugger class >> defaultTitle [ - ^ 'SmaCCParser' -] - -{ #category : #testing } -SmaCCParserDebugger class >> handlesContext: aContext [ - ^ (aContext findContextSuchThat: [ :each | self isParseContext: each ]) notNil -] - -{ #category : #'class initialization' } -SmaCCParserDebugger class >> initialize [ - self register -] - -{ #category : #testing } -SmaCCParserDebugger class >> isParseContext: each [ - ^ each selector = #parse and: [ each receiver isKindOf: SmaCCParser ] -] - -{ #category : #'instance creation' } -SmaCCParserDebugger class >> on: aDebugSession [ - | glrClass | - glrClass := Smalltalk at: #SmaCCGLRParser ifAbsent: [ self ]. - ^ self basicNew - isGLR: (aDebugSession parser isKindOf: glrClass); - initialize; - session: aDebugSession -] - -{ #category : #'tools registry' } -SmaCCParserDebugger class >> register [ - self registerToolsOn: Smalltalk tools -] - -{ #category : #'tools registry' } -SmaCCParserDebugger class >> registerToolsOn: aRegistry [ - aRegistry registerDebugger: self withRank: 60 -] - -{ #category : #accessing } -SmaCCParserDebugger class >> sessionClass [ - ^ SmaCCParserDebugSession -] - -{ #category : #building } -SmaCCParserDebugger >> actionLabelFor: anInteger [ - | type parser | - parser := self parser. - type := anInteger bitAnd: parser actionMask. - type = parser acceptAction - ifTrue: [ ^ 'Accept' ]. - type = parser shiftAction - ifTrue: [ ^ 'Shift' ]. - type = parser reduceAction - ifTrue: [ ^ self reduceActionName: (anInteger bitShift: -2) ]. - ^ 'Multiple' -] - -{ #category : #building } -SmaCCParserDebugger >> buildGLRTransmissionsIn: browser [ - self isGLR - ifTrue: - [ browser transmit - from: #stack port: #selection; - to: #glrStates; - transformed: [ :context | self glrParserStates ]; - andShow: - [ :composite | - composite table - title: 'GLR'; - format: - [ :each | (self session parser states identityIndexOf: each) printString ] ] ] -] - -{ #category : #building } -SmaCCParserDebugger >> buildInputIn: browser [ - browser transmit - fromOutsideEntityPort; - to: #input; - andShowIfNone: [ :composite | - | text | - text := composite text. - text - title: 'Input'; - display: [ self inputText ]; - withLineNumbers: true. - text with: [ :c | self installActionsForRootPragmas: #(#SmaCCDebuggingInputAction) in: c ] ]. - browser transmit - from: #stack port: #selection; - to: #input port: #selectionInterval; - transformed: [ :each | self inputSelectionInterval ]. - browser transmit - from: #stackState port: #selection; - to: #input port: #selectionInterval; - transformed: [ :each | - each notNil - ifTrue: [ (self tokenIntervalFor: each last) ifNil: [ self inputSelectionInterval ] ] ] -] - -{ #category : #building } -SmaCCParserDebugger >> buildPotentialTokensIn: browser [ - browser transmit - from: #stack port: #selection; - to: #potential; - transformed: [ :context | self potentialStateActions ]; - andShow: [ :composite | - composite table - title: 'Possible Actions'; - column: 'Symbol' evaluated: [ :each | each first ]; - column: 'Action' evaluated: [ :each | each last ] ] -] - -{ #category : #building } -SmaCCParserDebugger >> buildScannerStateIn: browser [ - browser transmit - from: #stack port: #selection; - to: #scannerState; - transformed: [ :context | self scannerProperties ]; - andShow: - [ :composite | - composite table - title: 'Scanner'; - column: 'Name' evaluated: [ :each | each first ]; - column: 'Value' evaluated: [ :each | each last ]; - with: [ :c | self installActionsForRootPragmas: #(#SmaCCDebuggingScannerAction) in: c ] ] -] - -{ #category : #building } -SmaCCParserDebugger >> buildStackStateIn: browser [ - browser transmit - from: #stack port: #selection; - to: #stackState; - transformed: [ :context | self parserStack ]; - andShow: [ :composite | - composite table - title: 'Parser Stack'; - column: 'Symbol' evaluated: [ :each | each first ]; - column: 'Value' evaluated: [ :each | each last ]; - morphicSelectionAct: [ :list | list selection last inspect ] - icon: GLMUIThemeExtraIcons glamorousInspect - on: $i - entitled: 'Inspect'; - with: [ :c | self installActionsForRootPragmas: #(#SmaCCDebuggingParserAction) in: c ] ] -] - -{ #category : #private } -SmaCCParserDebugger >> currentInputSelectionInterval [ - ^ self selectionIntervalForPane: #input -] - -{ #category : #building } -SmaCCParserDebugger >> debuggerStructureIn: browser [ - browser - row: [ :row | - row - column: #stackState span: 6; - column: #potential span: 6. - self isGLR - ifTrue: [ row column: #glrStates ] ]. - browser - row: [ :row | - row - column: #input span: 2; - column: #scannerState ]; - row: [ :row | - row - column: #stack; - column: #code ]; - row: #inspector span: 0 -] - -{ #category : #building } -SmaCCParserDebugger >> debuggerTransmissionsIn: browser [ - super debuggerTransmissionsIn: browser. - self buildGLRTransmissionsIn: browser. - self buildStackStateIn: browser. - self buildPotentialTokensIn: browser. - self buildScannerStateIn: browser. - self buildInputIn: browser -] - -{ #category : #private } -SmaCCParserDebugger >> glrParserStates [ - | states | - states := self parser states. - ^ states isEmpty - ifTrue: [ Array with: self parser currentGLRState ] - ifFalse: [ states ] -] - -{ #category : #private } -SmaCCParserDebugger >> inputSelectionInterval [ - | context receiver | - context := self session context - findContextSuchThat: [ :each | - (each receiver isKindOf: SmaCCScanner) - or: [ each receiver isKindOf: SmaCCParser ] ]. - context isNil - ifTrue: [ ^ 1 to: 0 ]. - receiver := context receiver. - ^ (receiver isKindOf: SmaCCParser) - ifTrue: [ (receiver currentToken isNil - or: [ receiver currentToken startPosition isNil ]) - ifTrue: [ self scanner position + 1 to: self scanner position ] - ifFalse: [ receiver currentToken sourceInterval ] ] - ifFalse: [ self scanner debugStart + 1 to: self scanner position ] -] - -{ #category : #private } -SmaCCParserDebugger >> inputText [ - ^ self parser scanner debugSource -] - -{ #category : #accessing } -SmaCCParserDebugger >> isGLR [ - - ^ isGLR ifNil: [ false ] -] - -{ #category : #accessing } -SmaCCParserDebugger >> isGLR: aBoolean [ - isGLR := aBoolean -] - -{ #category : #private } -SmaCCParserDebugger >> parser [ - ^ self session parser -] - -{ #category : #private } -SmaCCParserDebugger >> parserStack [ - | states nodes items context reduceContext | - states := self parser stateStack. - nodes := self parser nodeStack. - items := OrderedCollection new. - 1 to: states size - 1 do: [ :i | items addFirst: (Array with: (self symbolForTransitionFrom: (states at: i) to: (states at: i + 1)) with: (nodes at: i)) ]. - context := self session context - findContextSuchThat: [ :each | (each receiver isKindOf: SmaCCParser) and: [ each selector = #performReduceEntry:with: ] ]. - context notNil - ifTrue: [ items add: #('' ''). - reduceContext := context findContextSuchThat: [ :each | (each receiver isKindOf: SmaCCParser) and: [ each selector = #reduce: ] ]. - items addFirst: #('' ''). - (context tempAt: 2) size to: 1 by: -1 do: [ :i | items addFirst: (Array with: 'nodes at: ' , i printString with: ((context tempAt: 2) at: i)) ]. - items addFirst: (Array with: 'Reducing:' with: (self parser symbolNameFor: (reduceContext receiver reduceTable at: (reduceContext tempAt: 1)) first)) ]. - self parser currentToken - ifNotNil: [ :token | - | stream | - stream := WriteStream on: String new. - token ids do: [ :each | stream nextPutAll: (self parser symbolNameFor: each) ] separatedBy: [ stream nextPut: $; ]. - items - addFirst: #('' ''); - addFirst: (Array with: stream contents with: token); - addFirst: (Array with: 'Lookahead:' with: '') ]. - ^ items -] - -{ #category : #building } -SmaCCParserDebugger >> potentialStateActions [ - | items ids | - items := OrderedCollection new. - self parser - actionsAndSymbolsForState: self parser stateStack last - do: [ :action :symbol | items add: (Array with: (self parser symbolNameFor: symbol) with: symbol with: (self actionLabelFor: action)) ]. - ids := self parser currentToken ifNotNil: [ :token | token ids ] ifNil: [ #() ]. - items := items - asSortedCollection: [ :a :b | - | aIncluded | - (aIncluded := ids includes: (a at: 2)) = (ids includes: (b at: 2)) - ifTrue: [ (a at: 2) < (b at: 2) ] - ifFalse: [ aIncluded ] ]. - ids notEmpty - ifTrue: [ items - do: [ :each | - (ids includes: (each at: 2)) - ifTrue: [ each at: 1 put: each first asText allBold. - each at: 3 put: each last asText allBold ] - ifFalse: [ each at: 1 put: (each first asText makeAllColor: Color red). - each at: 3 put: (each last asText makeAllColor: Color red) ] ] ]. - ^ items -] - -{ #category : #building } -SmaCCParserDebugger >> reduceActionName: anInteger [ - | entry | - entry := self parser reduceTable at: anInteger. - ^ 'Reduce(' , (entry at: 2) printString , ') as ' , (self parser symbolNameFor: entry first) -] - -{ #category : #private } -SmaCCParserDebugger >> scanner [ - ^ self parser scanner -] - -{ #category : #building } -SmaCCParserDebugger >> scannerProperties [ - | items scanner string | - scanner := self scanner. - items := OrderedCollection new. - string := scanner outputStream ifNil: [ '' ] ifNotNil: [ :stream | stream contents ]. - items add: (Array with: 'Scope' with: scanner scope). - (self currentContext receiver isKindOf: SmaCCScanner) - ifTrue: [ items - add: (Array with: 'Current Character' with: scanner currentCharacter); - add: (Array with: 'Start Index' with: scanner debugStart). - string isEmpty - ifFalse: [ items - add: (Array with: 'Scan String' with: string); - add: (Array with: 'Match String' with: (string copyFrom: 1 to: scanner lastOutputStreamMatchPosition)); - add: - (Array - with: 'Match Type' - with: - (scanner matchActions - ifNil: [ '' ] - ifNotNil: [ :symbols | - | stream | - stream := WriteStream on: String new. - symbols do: [ :each | stream nextPutAll: (self parser symbolNameFor: each) ] separatedBy: [ stream space ]. - stream contents ])) ] ]. - ^ items -] - -{ #category : #private } -SmaCCParserDebugger >> symbolForTransitionFrom: fromState to: toState [ - | id | - id := self parser symbolIdForTransitionFrom: fromState to: toState. - ^ self parser symbolNameFor: id -] - -{ #category : #building } -SmaCCParserDebugger >> tokenIntervalFor: anObject [ - (anObject isKindOf: OrderedCollection) - ifTrue: [ | interval | - anObject - do: [ :each | - | newInterval | - newInterval := self tokenIntervalFor: each. - interval isNil - ifTrue: [ interval := newInterval ] - ifFalse: [ newInterval notNil - ifTrue: - [ interval := (interval first min: newInterval first) to: (interval last max: newInterval last) ] ] ]. - ^ interval ]. - (anObject isKindOf: SmaCCToken) - ifTrue: [ (anObject startPosition notNil and: [ anObject startPosition > 0 ]) - ifTrue: [ ^ anObject sourceInterval ] ]. - (anObject isKindOf: SmaCCParseNode) - ifTrue: [ | start end tokens | - start := SmallInteger maxVal. - end := 0. - tokens := OrderedCollection new. - anObject allTokensInto: tokens. - tokens - do: [ :each | - (each startPosition notNil and: [ each startPosition > 0 ]) - ifTrue: [ start := start min: each startPosition. - end := end max: each stopPosition ] ]. - start <= end - ifTrue: [ ^ start to: end ] ]. - ^ nil -] diff --git a/src/SmaCC_Debugging_Support/SmaCCParserError.extension.st b/src/SmaCC_Debugging_Support/SmaCCParserError.extension.st deleted file mode 100644 index 4bf2b288d..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCParserError.extension.st +++ /dev/null @@ -1,15 +0,0 @@ -Extension { #name : #SmaCCParserError } - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCParserError >> gtParserErrorInspectorViewIn: composite [ - - composite text - title: 'Error'; - display: [ | source | - source := self tag scanner debugSource. - (source isEmpty and: [ self tag position > 1 ]) - ifTrue: [ 'No source available' ] - ifFalse: [ (source copyFrom: 1 to: self tag position - 1) , self description , ' ->' , (source copyFrom: self tag position to: source size) ] ]; - primarySelectionInterval: (self tag position to: self tag position + self description size + 2); - withLineNumbers: true -] diff --git a/src/SmaCC_Debugging_Support/SmaCCParserNextTokenAction.class.st b/src/SmaCC_Debugging_Support/SmaCCParserNextTokenAction.class.st deleted file mode 100644 index 3188ebd1c..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCParserNextTokenAction.class.st +++ /dev/null @@ -1,33 +0,0 @@ -Class { - #name : #SmaCCParserNextTokenAction, - #superclass : #SmaCCParserStepAction, - #category : #'SmaCC_Debugging_Support-Debugger' -} - -{ #category : #registration } -SmaCCParserNextTokenAction class >> gtActionFor: aDebugger [ - - ^ (self forDebugger: aDebugger) icon: GLMUIThemeExtraIcons glamorousInto -] - -{ #category : #accessing } -SmaCCParserNextTokenAction >> defaultLabel [ - ^ 'Next Token' -] - -{ #category : #accessing } -SmaCCParserNextTokenAction >> defaultOrder [ - ^ 100 -] - -{ #category : #actions } -SmaCCParserNextTokenAction >> executeAction [ - | token | - token := self session parser currentToken. - self stepUntil: [ :context | self session parser currentToken ~~ token and: [ self session parser currentToken notNil ] ] -] - -{ #category : #accessing } -SmaCCParserNextTokenAction >> help [ - ^ 'Run until we get the next token or a parse error is encountered.' -] diff --git a/src/SmaCC_Debugging_Support/SmaCCParserSimulationError.class.st b/src/SmaCC_Debugging_Support/SmaCCParserSimulationError.class.st deleted file mode 100644 index 872559342..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCParserSimulationError.class.st +++ /dev/null @@ -1,32 +0,0 @@ -Class { - #name : #SmaCCParserSimulationError, - #superclass : #Error, - #category : #'SmaCC_Debugging_Support-Simulation' -} - -{ #category : #testing } -SmaCCParserSimulationError >> isInputIncomplete [ - self token isSyntaxError - ifTrue: [ ^ false ]. - ^ (self simulator symbolForId: self token ids first) name = 'E O F' -] - -{ #category : #accessing } -SmaCCParserSimulationError >> nodeStack [ - ^ self simulator currentParserState nodeStack copy -] - -{ #category : #accessing } -SmaCCParserSimulationError >> simulator [ - ^ self tag first -] - -{ #category : #accessing } -SmaCCParserSimulationError >> stateStack [ - ^ self simulator currentParserState stateStack copy -] - -{ #category : #accessing } -SmaCCParserSimulationError >> token [ - ^ self tag last -] diff --git a/src/SmaCC_Debugging_Support/SmaCCParserSimulator.class.st b/src/SmaCC_Debugging_Support/SmaCCParserSimulator.class.st deleted file mode 100644 index 893da3688..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCParserSimulator.class.st +++ /dev/null @@ -1,287 +0,0 @@ -Class { - #name : #SmaCCParserSimulator, - #superclass : #SmaCCGrammarCompiler, - #instVars : [ - 'parserStates', - 'currentParserState', - 'currentToken', - 'scannerSimulator', - 'lastToken', - 'lastState', - 'nextScannerState' - ], - #category : #'SmaCC_Debugging_Support-Simulation' -} - -{ #category : #examples } -SmaCCParserSimulator class >> csharpIfStatement [ - - | simulator result | - (Smalltalk includesKey: #CSharpParser) - ifFalse: [ ^ nil ]. - simulator := SmaCCParserSimulator - on: #CSharpParser asClass definitionString. - simulator setupFor: 'if_statement'. - result := (simulator simulateParse: 'if (a == 2) return 4;') first. - self assert: result rhs productionSymbol name = 'if_statement'. - self assert: result items first source = 'if'. - self assert: result items second source = '('. - self assert: result items third class = SmaCCReducedItem. - self assert: result items fourth source = ')'. - self assert: result items last class = SmaCCReducedItem. - ^ result -] - -{ #category : #examples } -SmaCCParserSimulator class >> csharpIncompleteIfStatement [ - - | simulator | - (Smalltalk includesKey: #CSharpParser) - ifFalse: [ ^ nil ]. - simulator := SmaCCParserSimulator - on: #CSharpParser asClass definitionString. - simulator setupFor: 'if_statement'. - [ simulator simulateParse: 'if (a == 2' ] - on: SmaCCParserSimulationError - do: [ :ex | - self assert: ex isInputIncomplete. - ^ ex ]. - self error: 'Shouldn''t get here' -] - -{ #category : #examples } -SmaCCParserSimulator class >> csharpInvalidInput [ - - | simulator | - (Smalltalk includesKey: #CSharpParser) - ifFalse: [ ^ nil ]. - simulator := SmaCCParserSimulator - on: #CSharpParser asClass definitionString. - simulator setupFor: 'if_statement'. - [ simulator simulateParse: 'if (if = 3) return 3;' ] - on: SmaCCParserSimulationError - do: [ :ex | - self assert: ex token source = 'if'. - self assert: ex token startPosition = 5. - ^ ex ]. - self error: 'Shouldn''t get here' -] - -{ #category : #examples } -SmaCCParserSimulator class >> csharpInvalidToken [ - - | simulator | - (Smalltalk includesKey: #CSharpParser) - ifFalse: [ ^ nil ]. - simulator := SmaCCParserSimulator - on: #CSharpParser asClass definitionString. - simulator setupFor: 'if_statement'. - [ simulator simulateParse: 'if (''' ] - on: SmaCCParserSimulationError - do: [ :ex | - self assert: ex token isSyntaxError. - ^ ex ]. - self error: 'Shouldn''t get here' -] - -{ #category : #examples } -SmaCCParserSimulator class >> javaAmbiguousActions [ - - | simulator items | - (Smalltalk includesKey: #JavaParser) - ifFalse: [ ^ nil ]. - simulator := SmaCCParserSimulator - on: #JavaParser asClass definitionString. - simulator setupFor: 'expression'. - items := simulator simulateParse: 'a(b)'. - self assert: items size = 1. - ^ items first -] - -{ #category : #'instance creation' } -SmaCCParserSimulator class >> on: aString [ - ^ self new - buildDefinition: aString; - yourself -] - -{ #category : #'parsing support' } -SmaCCParserSimulator >> accept [ - currentParserState markAccepted -] - -{ #category : #'initialize-release' } -SmaCCParserSimulator >> buildDefinition: aString [ - super buildDefinition: aString. - scannerSimulator := SmaCCScannerSimulator - forGrammar: grammar - nfa: scannerCompiler createFullRegex asNFA -] - -{ #category : #'private-item sets' } -SmaCCParserSimulator >> createInitialItemSetFor: smaccSymbol [ - | start | - startingStateMap := Dictionary new. - grammar calculateFirstSets. - start := grammar createStartingSymbolFor: smaccSymbol. - itemSets := OrderedCollection new. - itemSets add: (grammar initialItemSetFor: start). - startingStateMap at: start put: itemSets size. - shiftTable := Dictionary new -] - -{ #category : #'parsing support' } -SmaCCParserSimulator >> currentParserState [ - ^ currentParserState -] - -{ #category : #'parsing support' } -SmaCCParserSimulator >> duplicateState [ - parserStates - add: - (currentParserState := SmaCCParserState - stateStack: currentParserState stateStack copy - nodeStack: currentParserState nodeStack copy - scannerState: currentParserState scannerState copy) -] - -{ #category : #private } -SmaCCParserSimulator >> getNextToken [ - currentToken isNil - ifFalse: [ ^ self ]. - lastState = currentParserState scannerState - ifTrue: [ currentToken := lastToken. - scannerSimulator restoreState: nextScannerState. - currentParserState scannerState: nextScannerState ] - ifFalse: [ lastState := currentParserState scannerState. - scannerSimulator restoreState: currentParserState scannerState. - lastToken := currentToken := scannerSimulator next. - nextScannerState := scannerSimulator currentState ]. - currentParserState scannerState: nextScannerState -] - -{ #category : #parsing } -SmaCCParserSimulator >> isAccepted [ - ^ parserStates allSatisfy: [ :each | each isAccepted ] -] - -{ #category : #'parsing support' } -SmaCCParserSimulator >> killStateFrom: aSmaCCToken [ - | index | - index := parserStates identityIndexOf: currentParserState. - parserStates size > 1 - ifTrue: [ parserStates removeAt: index. - currentParserState := parserStates - at: (index min: parserStates size) ] - ifFalse: [ self signalErrorFrom: aSmaCCToken ] -] - -{ #category : #'private-item sets' } -SmaCCParserSimulator >> moveOn: smaccSymbol from: state [ - ^ shiftTable - at: (self shiftTableKeyForIndex: state symbol: smaccSymbol) - ifAbsentPut: [ self indexOfState: ((itemSets at: state) moveOn: smaccSymbol) ] -] - -{ #category : #'parsing support' } -SmaCCParserSimulator >> parserStateId [ - ^ currentParserState stateStack last -] - -{ #category : #'parsing support' } -SmaCCParserSimulator >> popItems: anInteger [ - | items | - items := OrderedCollection new: anInteger. - anInteger - timesRepeat: [ items addFirst: currentParserState nodeStack removeLast. - currentParserState stateStack removeLast ]. - ^ items -] - -{ #category : #private } -SmaCCParserSimulator >> processToken [ - | action state symbol itemSet | - [ currentToken notNil ] - whileTrue: [ state := currentParserState stateStack last. - currentToken ids - do: [ :id | - id > 0 - ifTrue: [ self moveOn: (self symbolForId: id) from: state ] ]. - currentToken isSyntaxError - ifTrue: [ action := SmaCCRejectAction new ] - ifFalse: [ symbol := grammar symbols at: currentToken ids first. - itemSet := itemSets at: state. - action := itemSet isEmpty - ifTrue: [ SmaCCRejectAction new ] - ifFalse: - [ itemSet action: symbol prefer: (grammar preferredActionFor: symbol) ] ]. - action simulateOn: self token: currentToken ] -] - -{ #category : #'parsing support' } -SmaCCParserSimulator >> processedToken [ - currentToken := nil -] - -{ #category : #'parsing support' } -SmaCCParserSimulator >> pushObject: anObject andState: anInteger [ - currentParserState stateStack add: anInteger. - currentParserState nodeStack add: anObject -] - -{ #category : #private } -SmaCCParserSimulator >> resetParser [ - lastState := nil. - currentToken := nil. - parserStates := OrderedCollection - with: - (currentParserState := SmaCCParserState - stateStack: (OrderedCollection with: 1) - nodeStack: OrderedCollection new - scannerState: (SmaCCScannerState position: 0 scope: #default)) -] - -{ #category : #'parsing support' } -SmaCCParserSimulator >> restoreState: aParserState [ - currentParserState := aParserState. - scannerSimulator restoreState: currentParserState scannerState -] - -{ #category : #'parsing support' } -SmaCCParserSimulator >> restoreState: aParserState andToken: aSmaCCToken [ - currentParserState := aParserState. - currentToken := aSmaCCToken -] - -{ #category : #setup } -SmaCCParserSimulator >> setupFor: productionName [ - self createInitialItemSetFor: (grammar symbolNamed: productionName) -] - -{ #category : #'parsing support' } -SmaCCParserSimulator >> signalErrorFrom: aSmaCCToken [ - SmaCCParserSimulationError - signal: 'Cannot parse input' - withTag: - {self. - aSmaCCToken} -] - -{ #category : #parsing } -SmaCCParserSimulator >> simulateParse: aString [ - "Returns all possible interpretations of the parse" - - scannerSimulator on: aString readStream. - self resetParser. - [ parserStates size to: 1 by: -1 do: [ :i | - self restoreState: (parserStates at: i). - self getNextToken. - self processToken ]. - self isAccepted ] whileFalse. - ^ parserStates collect: [ :each | each nodeStack first ] -] - -{ #category : #private } -SmaCCParserSimulator >> symbolForId: id [ - ^ grammar symbols at: id -] diff --git a/src/SmaCC_Debugging_Support/SmaCCParserStepAction.class.st b/src/SmaCC_Debugging_Support/SmaCCParserStepAction.class.st deleted file mode 100644 index 20bfddbca..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCParserStepAction.class.st +++ /dev/null @@ -1,5 +0,0 @@ -Class { - #name : #SmaCCParserStepAction, - #superclass : #SmaCCDebuggingAction, - #category : #'SmaCC_Debugging_Support-Debugger' -} diff --git a/src/SmaCC_Debugging_Support/SmaCCParserStepThroughAction.class.st b/src/SmaCC_Debugging_Support/SmaCCParserStepThroughAction.class.st deleted file mode 100644 index 06c1de0f0..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCParserStepThroughAction.class.st +++ /dev/null @@ -1,39 +0,0 @@ -Class { - #name : #SmaCCParserStepThroughAction, - #superclass : #SmaCCParserStepAction, - #category : #'SmaCC_Debugging_Support-Debugger' -} - -{ #category : #registration } -SmaCCParserStepThroughAction class >> gtActionFor: aDebugger [ - - ^ (self forDebugger: aDebugger) icon: GLMUIThemeExtraIcons glamorousInto -] - -{ #category : #accessing } -SmaCCParserStepThroughAction >> defaultLabel [ - ^ 'Through Action' -] - -{ #category : #accessing } -SmaCCParserStepThroughAction >> defaultOrder [ - ^ 1 -] - -{ #category : #actions } -SmaCCParserStepThroughAction >> executeAction [ - | insidePerform performBlock | - performBlock := [ :context | (context receiver isKindOf: SmaCCParser) and: [ context selector = #performAction: ] ]. - insidePerform := (self session context findContextSuchThat: performBlock) notNil. - self - stepUntil: [ :context | - insidePerform - ifTrue: [ (context findContextSuchThat: performBlock) isNil ] - ifFalse: [ insidePerform := performBlock value: context. - false ] ] -] - -{ #category : #accessing } -SmaCCParserStepThroughAction >> help [ - ^ 'Run until we perform the next action (shift or reduce) or a parse error is encountered.' -] diff --git a/src/SmaCC_Debugging_Support/SmaCCParserStepToReduceAction.class.st b/src/SmaCC_Debugging_Support/SmaCCParserStepToReduceAction.class.st deleted file mode 100644 index 61d7c0fc1..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCParserStepToReduceAction.class.st +++ /dev/null @@ -1,43 +0,0 @@ -Class { - #name : #SmaCCParserStepToReduceAction, - #superclass : #SmaCCParserStepAction, - #category : #'SmaCC_Debugging_Support-Debugger' -} - -{ #category : #registration } -SmaCCParserStepToReduceAction class >> gtActionFor: aDebugger [ - - ^ (self forDebugger: aDebugger) icon: GLMUIThemeExtraIcons glamorousInto -] - -{ #category : #accessing } -SmaCCParserStepToReduceAction >> defaultLabel [ - ^ 'Into Reduce' -] - -{ #category : #accessing } -SmaCCParserStepToReduceAction >> defaultOrder [ - ^ 50 -] - -{ #category : #actions } -SmaCCParserStepToReduceAction >> executeAction [ - | selectors | - selectors := self session parser reduceTable - inject: Set new - into: [ :sum :each | - sum - add: (each at: 3); - yourself ]. - self - stepUntil: [ :context | - (context - findContextSuchThat: [ :each | - (each receiver isKindOf: SmaCCParser) - and: [ selectors includes: each selector ] ]) notNil ] -] - -{ #category : #accessing } -SmaCCParserStepToReduceAction >> help [ - ^ 'Run until we get to the start of a reduction action or a parse error is encountered.' -] diff --git a/src/SmaCC_Debugging_Support/SmaCCPreferredCompositeAction.extension.st b/src/SmaCC_Debugging_Support/SmaCCPreferredCompositeAction.extension.st deleted file mode 100644 index ee6176ce5..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCPreferredCompositeAction.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #SmaCCPreferredCompositeAction } - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCPreferredCompositeAction >> simulateOn: aParserSimulator token: aSmaCCToken [ - preferredAction simulateOn: aParserSimulator token: aSmaCCToken -] diff --git a/src/SmaCC_Debugging_Support/SmaCCReduceAction.extension.st b/src/SmaCC_Debugging_Support/SmaCCReduceAction.extension.st deleted file mode 100644 index 050fe20a4..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCReduceAction.extension.st +++ /dev/null @@ -1,13 +0,0 @@ -Extension { #name : #SmaCCReduceAction } - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCReduceAction >> simulateOn: aParserSimulator token: aSmaCCToken [ - | items | - items := aParserSimulator popItems: lr1Item rhs size. - aParserSimulator - pushObject: (SmaCCReducedItem reduced: lr1Item rhs with: items) - andState: - (aParserSimulator - moveOn: lr1Item rhs productionSymbol - from: aParserSimulator parserStateId) -] diff --git a/src/SmaCC_Debugging_Support/SmaCCReducedItem.class.st b/src/SmaCC_Debugging_Support/SmaCCReducedItem.class.st deleted file mode 100644 index ef1304606..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCReducedItem.class.st +++ /dev/null @@ -1,78 +0,0 @@ -Class { - #name : #SmaCCReducedItem, - #superclass : #Object, - #instVars : [ - 'rhs', - 'items' - ], - #category : #'SmaCC_Debugging_Support-Simulation' -} - -{ #category : #'instance creation' } -SmaCCReducedItem class >> reduced: aRhs with: aCollection [ - ^ self new - rhs: aRhs; - items: aCollection; - yourself -] - -{ #category : #accessing } -SmaCCReducedItem >> items [ - ^ items -] - -{ #category : #accessing } -SmaCCReducedItem >> items: anObject [ - items := anObject -] - -{ #category : #printing } -SmaCCReducedItem >> printOn: aStream [ - | first | - first := true. - aStream nextPut: $(. - aStream - nextPutAll: rhs productionSymbol name; - nextPutAll: ' : '. - rhs collection - with: items - do: [ :symbol :value | - first - ifFalse: [ aStream space ]. - first := false. - aStream - nextPutAll: symbol name; - nextPutAll: ' = '; - print: value ]. - aStream nextPut: $) -] - -{ #category : #accessing } -SmaCCReducedItem >> rhs [ - ^ rhs -] - -{ #category : #accessing } -SmaCCReducedItem >> rhs: anObject [ - rhs := anObject -] - -{ #category : #accessing } -SmaCCReducedItem >> sourceInterval [ - ^ self startPosition - ifNil: [ nil ] - ifNotNil: [ :pos | pos to: self stopPosition ] -] - -{ #category : #accessing } -SmaCCReducedItem >> startPosition [ - items do: [ :each | each startPosition ifNotNil: [ :int | ^ int ] ]. - ^ nil -] - -{ #category : #accessing } -SmaCCReducedItem >> stopPosition [ - items - reverseDo: [ :each | each stopPosition ifNotNil: [ :int | ^ int ] ]. - ^ nil -] diff --git a/src/SmaCC_Debugging_Support/SmaCCRegexSimulator.class.st b/src/SmaCC_Debugging_Support/SmaCCRegexSimulator.class.st deleted file mode 100644 index 7ade1f0f6..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCRegexSimulator.class.st +++ /dev/null @@ -1,117 +0,0 @@ -Class { - #name : #SmaCCRegexSimulator, - #superclass : #Object, - #instVars : [ - 'grammar', - 'nfa', - 'actionMap' - ], - #category : #'SmaCC_Debugging_Support-Simulation' -} - -{ #category : #examples } -SmaCCRegexSimulator class >> example [ - - ^ self on: SmaCCDefinitionParser definitionAST tokenName: '' -] - -{ #category : #examples } -SmaCCRegexSimulator class >> matchingExample [ - - self example - matchesOn: 't_1' - do: [ :i :nodes | self inform: 'Match at: ' , i printString , ' nodes: ' , nodes printString ] -] - -{ #category : #'instance creation' } -SmaCCRegexSimulator class >> on: aSmaCCGrammarDefinitionNode tokenName: aString [ - ^ self new - grammar: aSmaCCGrammarDefinitionNode; - tokenName: aString; - yourself -] - -{ #category : #private } -SmaCCRegexSimulator >> buildErrorNFA [ - nfa := SmaCCNode new -] - -{ #category : #private } -SmaCCRegexSimulator >> expandEpsilonAndSymbolTransitions: aCollection [ - | todo | - todo := OrderedCollection withAll: aCollection. - [ todo notEmpty ] - whileTrue: [ todo removeFirst transitions - do: [ :each | - (each isEpsilonTransition or: [ each isCharacterTransition not ]) - ifTrue: [ (aCollection includes: each to) - ifFalse: [ aCollection add: each to. - todo add: each to ] ] ] ]. - ^ aCollection -] - -{ #category : #'initialize-release' } -SmaCCRegexSimulator >> grammar: aSmaCCGrammarDefinitionNode [ - grammar := aSmaCCGrammarDefinitionNode -] - -{ #category : #private } -SmaCCRegexSimulator >> mapNodesToActionsFor: aNode [ - aNode - allNodesDo: [ :each | - (each isKindOf: SmaCCTokenRegexNode) - ifTrue: [ (aNode topParent tokenNamed: each name value) - ifNotNil: [ :token | self mapNodesToActionsFor: token ] ]. - actionMap add: each. - each regularExpression - ifNotNil: [ :re | re action: actionMap size ] ] -] - -{ #category : #private } -SmaCCRegexSimulator >> matchedNodesFrom: stateCollection [ - | indices | - indices := IdentitySet new. - stateCollection do: [ :each | indices addAll: (each action ifNil: [ #() ]) ]. - ^ indices collect: [ :each | actionMap at: each ] -] - -{ #category : #running } -SmaCCRegexSimulator >> matchesOn: aString do: aBlock [ - | states | - states := self expandEpsilonAndSymbolTransitions: (IdentitySet with: nfa). - aBlock value: 0 value: (self matchedNodesFrom: states). - 1 to: aString size do: [ :i | - states := self moveFrom: states on: (aString at: i). - states isEmpty - ifTrue: [ ^ aBlock value: i value: nil ]. - aBlock value: i value: (self matchedNodesFrom: states) ] -] - -{ #category : #private } -SmaCCRegexSimulator >> moveFrom: stateCollection on: aCharacter [ - | newStates | - newStates := IdentitySet new. - stateCollection - do: [ :each | - each transitions - do: [ :edge | - (edge includes: aCharacter) - ifTrue: [ newStates add: edge to ] ] ]. - ^ self expandEpsilonAndSymbolTransitions: newStates -] - -{ #category : #'initialize-release' } -SmaCCRegexSimulator >> tokenName: aString [ - | node regex | - node := grammar tokenNamed: aString. - node isNil - ifTrue: [ ^ self buildErrorNFA ]. - actionMap := OrderedCollection new. - [ regex := SmaCCSequenceRENode nodes: {node regularExpression}. - actionMap add: node. - regex action: 1. - self mapNodesToActionsFor: node. - nfa := regex asNFA ] - ensure: [ grammar - withAllNodesDo: [ :each | each removeAttributeNamed: #regularExpression ] ] -] diff --git a/src/SmaCC_Debugging_Support/SmaCCRejectAction.extension.st b/src/SmaCC_Debugging_Support/SmaCCRejectAction.extension.st deleted file mode 100644 index beda01f2f..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCRejectAction.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #SmaCCRejectAction } - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCRejectAction >> simulateOn: aParserSimulator token: aSmaCCToken [ - aParserSimulator killStateFrom: aSmaCCToken. - aParserSimulator processedToken -] diff --git a/src/SmaCC_Debugging_Support/SmaCCScanner.extension.st b/src/SmaCC_Debugging_Support/SmaCCScanner.extension.st deleted file mode 100644 index d5a5ddcdd..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCScanner.extension.st +++ /dev/null @@ -1,13 +0,0 @@ -Extension { #name : #SmaCCScanner } - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCScanner >> debugSource [ - | str position | - str := self stream. - (str respondsTo: #position:) - ifFalse: [ ^ '' ]. - position := str position. - ^ [ str position: 0. - str contents ] - ensure: [ str position: position ] -] diff --git a/src/SmaCC_Debugging_Support/SmaCCScannerSimulator.class.st b/src/SmaCC_Debugging_Support/SmaCCScannerSimulator.class.st deleted file mode 100644 index 9a17b8ba1..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCScannerSimulator.class.st +++ /dev/null @@ -1,120 +0,0 @@ -Class { - #name : #SmaCCScannerSimulator, - #superclass : #SmaCCScanner, - #instVars : [ - 'grammar', - 'nfa', - 'methodMap', - 'emptyId', - 'errorId' - ], - #category : #'SmaCC_Debugging_Support-Simulation' -} - -{ #category : #'instance creation' } -SmaCCScannerSimulator class >> forGrammar: aSmaCCGrammar nfa: aSmaCCNode [ - ^ self new - grammar: aSmaCCGrammar; - nfa: aSmaCCNode; - yourself -] - -{ #category : #private } -SmaCCScannerSimulator >> buildMethodMap [ - methodMap := Dictionary new. - grammar tokens - keysDo: [ :each | - | selector | - each first = $< - ifTrue: [ selector := (each copyFrom: 2 to: each size - 1) asSymbol. - ((SmaCCScanner organization - listAtCategoryNamed: #'default token handling') - includes: selector) - ifTrue: [ methodMap - at: (grammar symbols identityIndexOf: (grammar symbolNamed: each)) - put: selector ] ] ] -] - -{ #category : #accessing } -SmaCCScannerSimulator >> emptySymbolTokenId [ - ^ emptyId - ifNil: [ emptyId := grammar symbols identityIndexOf: grammar emptySymbol ] -] - -{ #category : #accessing } -SmaCCScannerSimulator >> errorTokenId [ - ^ errorId - ifNil: [ errorId := grammar symbols identityIndexOf: grammar errorSymbol ] -] - -{ #category : #private } -SmaCCScannerSimulator >> expandStates: aCollection [ - | todo ids | - todo := aCollection copy. - todo do: [ :each | self expandStates: aCollection from: each ]. - ids := Set new. - aCollection - do: [ :each | each action ifNotNil: [ :action | ids addAll: action ] ]. - ids notEmpty - ifTrue: [ self recordMatch: ids asSortedCollection asArray ] -] - -{ #category : #private } -SmaCCScannerSimulator >> expandStates: aCollection from: aSmaCCNode [ - aSmaCCNode transitions - do: [ :each | - (each isEpsilonTransition - or: [ each isCharacterTransition not - and: [ each transitionObjects includes: scope ] ]) - ifTrue: [ (aCollection includes: each to) - ifFalse: [ aCollection add: each to. - self expandStates: aCollection from: each to ] ] ] -] - -{ #category : #'initialize-release' } -SmaCCScannerSimulator >> grammar: smaccGrammar [ - grammar := smaccGrammar. - self buildMethodMap -] - -{ #category : #private } -SmaCCScannerSimulator >> moveFrom: currentStates [ - | newStates | - newStates := IdentitySet new. - currentStates - do: [ :each | - each transitions - do: [ :edge | - (edge isEpsilonTransition not - and: [ edge isCharacterTransition - and: [ edge transitionObjects includes: currentCharacter ] ]) - ifTrue: [ newStates add: edge to ] ] ]. - ^ newStates -] - -{ #category : #'initialize-release' } -SmaCCScannerSimulator >> nfa: aSmaCCNode [ - nfa := aSmaCCNode -] - -{ #category : #private } -SmaCCScannerSimulator >> reportLastMatch: isError [ - matchActions isNil - ifTrue: [ isError - ifTrue: [ matchActions := #(0) ] ] - ifFalse: [ (matchActions notEmpty - and: [ methodMap includesKey: matchActions first ]) - ifTrue: [ matchActions := methodMap at: matchActions first ] ]. - ^ self reportLastMatch -] - -{ #category : #accessing } -SmaCCScannerSimulator >> scanForToken [ - | currentStates | - currentStates := IdentitySet with: nfa. - [ self expandStates: currentStates. - currentStates notEmpty and: [ stream atEnd not ] ] - whileTrue: [ self step. - currentStates := self moveFrom: currentStates ]. - ^ self reportLastMatch: currentStates isEmpty -] diff --git a/src/SmaCC_Debugging_Support/SmaCCScannerStepToAction.class.st b/src/SmaCC_Debugging_Support/SmaCCScannerStepToAction.class.st deleted file mode 100644 index da921343a..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCScannerStepToAction.class.st +++ /dev/null @@ -1,22 +0,0 @@ -Class { - #name : #SmaCCScannerStepToAction, - #superclass : #SmaCCDebuggingAction, - #category : #'SmaCC_Debugging_Support-Debugger' -} - -{ #category : #actions } -SmaCCScannerStepToAction >> executeAction [ - | scanner toIndex | - toIndex := self stepToIndex. - scanner := self session scanner. - self - stepUntil: [ :context | - scanner stream position >= toIndex - and: - [ (context findContextSuchThat: [ :each | (each receiver isKindOf: SmaCCScanner) and: [ each selector = #step ] ]) isNil ] ] -] - -{ #category : #accessing } -SmaCCScannerStepToAction >> stepToIndex [ - ^ self subclassResponsibility -] diff --git a/src/SmaCC_Debugging_Support/SmaCCShiftAction.extension.st b/src/SmaCC_Debugging_Support/SmaCCShiftAction.extension.st deleted file mode 100644 index 228720759..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCShiftAction.extension.st +++ /dev/null @@ -1,12 +0,0 @@ -Extension { #name : #SmaCCShiftAction } - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCShiftAction >> simulateOn: aParserSimulator token: aSmaCCToken [ - aParserSimulator - pushObject: aSmaCCToken - andState: - (aParserSimulator - moveOn: (aParserSimulator symbolForId: aSmaCCToken ids first) - from: aParserSimulator parserStateId). - aParserSimulator processedToken -] diff --git a/src/SmaCC_Debugging_Support/SmaCCStepToCursorAction.class.st b/src/SmaCC_Debugging_Support/SmaCCStepToCursorAction.class.st deleted file mode 100644 index a5a4e19aa..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCStepToCursorAction.class.st +++ /dev/null @@ -1,26 +0,0 @@ -Class { - #name : #SmaCCStepToCursorAction, - #superclass : #SmaCCScannerStepToAction, - #category : #'SmaCC_Debugging_Support-Debugger' -} - -{ #category : #registration } -SmaCCStepToCursorAction class >> gtActionFor: aDebugger [ - - ^ (self forDebugger: aDebugger) icon: GLMUIThemeExtraIcons glamorousInto -] - -{ #category : #accessing } -SmaCCStepToCursorAction >> defaultLabel [ - ^ 'Step to Cursor' -] - -{ #category : #accessing } -SmaCCStepToCursorAction >> help [ - ^ 'Run until we get to the cursor position or a parse error is encountered.' -] - -{ #category : #accessing } -SmaCCStepToCursorAction >> stepToIndex [ - ^ self debugger currentInputSelectionInterval last -] diff --git a/src/SmaCC_Debugging_Support/SmaCCStepToDebugger.class.st b/src/SmaCC_Debugging_Support/SmaCCStepToDebugger.class.st deleted file mode 100644 index 2e76e2599..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCStepToDebugger.class.st +++ /dev/null @@ -1,53 +0,0 @@ -Class { - #name : #SmaCCStepToDebugger, - #superclass : #SmaCCDebuggingAction, - #category : #'SmaCC_Debugging_Support-Debugger' -} - -{ #category : #registration } -SmaCCStepToDebugger class >> gtActionType [ - -] - -{ #category : #testing } -SmaCCStepToDebugger >> appliesToContext: aContext [ - ^ self debugger class ~= self debuggerClass -] - -{ #category : #accessing } -SmaCCStepToDebugger >> debuggerClass [ - ^ SmaCCParserDebugger -] - -{ #category : #accessing } -SmaCCStepToDebugger >> defaultCategory [ - ^ 'Step to debugger' -] - -{ #category : #accessing } -SmaCCStepToDebugger >> defaultLabel [ - ^ self debuggerClass defaultTitle -] - -{ #category : #accessing } -SmaCCStepToDebugger >> defaultOrder [ - ^ 200 -] - -{ #category : #actions } -SmaCCStepToDebugger >> executeAction [ - self stepUntil: [ :context | self debuggerClass isParseContext: context ] context: self session process suspendedContext. - (self debuggerClass isParseContext: self interruptedContext) - ifTrue: [ self debugger debug: self interruptedContext using: self debuggerClass ] -] - -{ #category : #accessing } -SmaCCStepToDebugger >> help [ - ^ 'Execute the current method until it starts to parse something.' -] - -{ #category : #'initialize-release' } -SmaCCStepToDebugger >> initialize [ - super initialize. - self needsUpdate: false -] diff --git a/src/SmaCC_Debugging_Support/SmaCCStepToNextCharacterAction.class.st b/src/SmaCC_Debugging_Support/SmaCCStepToNextCharacterAction.class.st deleted file mode 100644 index 04a3c72c1..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCStepToNextCharacterAction.class.st +++ /dev/null @@ -1,26 +0,0 @@ -Class { - #name : #SmaCCStepToNextCharacterAction, - #superclass : #SmaCCScannerStepToAction, - #category : #'SmaCC_Debugging_Support-Debugger' -} - -{ #category : #registration } -SmaCCStepToNextCharacterAction class >> gtActionFor: aDebugger [ - - ^ (self forDebugger: aDebugger) icon: GLMUIThemeExtraIcons glamorousInto -] - -{ #category : #accessing } -SmaCCStepToNextCharacterAction >> defaultLabel [ - ^ 'Step Next Character' -] - -{ #category : #accessing } -SmaCCStepToNextCharacterAction >> help [ - ^ 'Run until we get to the character or a parse error is encountered.' -] - -{ #category : #accessing } -SmaCCStepToNextCharacterAction >> stepToIndex [ - ^ self session scanner stream position + 1 -] diff --git a/src/SmaCC_Debugging_Support/SmaCCString.extension.st b/src/SmaCC_Debugging_Support/SmaCCString.extension.st deleted file mode 100644 index e0f8285b3..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCString.extension.st +++ /dev/null @@ -1,10 +0,0 @@ -Extension { #name : #SmaCCString } - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCString >> gtStringIn: aComposite [ - - aComposite text - title: 'String'; - withLineNumbers: true; - display: [ self asString ] -] diff --git a/src/SmaCC_Debugging_Support/SmaCCToken.extension.st b/src/SmaCC_Debugging_Support/SmaCCToken.extension.st deleted file mode 100644 index 41f7784b8..000000000 --- a/src/SmaCC_Debugging_Support/SmaCCToken.extension.st +++ /dev/null @@ -1,27 +0,0 @@ -Extension { #name : #SmaCCToken } - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCToken class >> gtExampleSimple [ - - ^ self value: 'simple' -] - -{ #category : #'*SmaCC_Debugging_Support' } -SmaCCToken >> gtInspectorSourceIn: aComposite inContext: aGTInspector [ - - aComposite text - title: 'Source'; - withLineNumbers: true; - when: [ (aGTInspector panes reversed - collect: [ :each | (each port: #entity) value ]) - anySatisfy: [ :each | - (each isKindOf: SmaCCParseNode) - and: [ each topParent completeSource notNil ] ] ]; - display: [ ((aGTInspector panes reversed - collect: [ :each | (each port: #entity) value ]) - detect: [ :each | each isKindOf: SmaCCParseNode ]) topParent - completeSource ]; - initialize: [ :textPresentation | - self startPosition - ifNotNil: [ textPresentation selectionInterval: self sourceInterval ] ] -] diff --git a/src/SmaCC_Debugging_Support/package.st b/src/SmaCC_Debugging_Support/package.st deleted file mode 100644 index dca8dc7e2..000000000 --- a/src/SmaCC_Debugging_Support/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_Debugging_Support' } diff --git a/src/SmaCC_Delphi/DelphiAbsoluteTypeNode.class.st b/src/SmaCC_Delphi/DelphiAbsoluteTypeNode.class.st deleted file mode 100644 index a855e690f..000000000 --- a/src/SmaCC_Delphi/DelphiAbsoluteTypeNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #DelphiAbsoluteTypeNode, - #superclass : #DelphiTypeNode, - #instVars : [ - 'type', - 'absoluteToken', - 'variable' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiAbsoluteTypeNode >> absoluteToken [ - ^ absoluteToken -] - -{ #category : #generated } -DelphiAbsoluteTypeNode >> absoluteToken: aSmaCCToken [ - absoluteToken := aSmaCCToken -] - -{ #category : #generated } -DelphiAbsoluteTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitAbsoluteType: self -] - -{ #category : #generated } -DelphiAbsoluteTypeNode >> nodeVariables [ - ^ #(#type #variable) -] - -{ #category : #generated } -DelphiAbsoluteTypeNode >> tokenVariables [ - ^ #(#absoluteToken) -] - -{ #category : #generated } -DelphiAbsoluteTypeNode >> type [ - ^ type -] - -{ #category : #generated } -DelphiAbsoluteTypeNode >> type: aDelphiProgramNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aDelphiProgramNode. - self type notNil - ifTrue: [ self type parent: self ] -] - -{ #category : #generated } -DelphiAbsoluteTypeNode >> variable [ - ^ variable -] - -{ #category : #generated } -DelphiAbsoluteTypeNode >> variable: aDelphiProgramNode [ - self variable notNil - ifTrue: [ self variable parent: nil ]. - variable := aDelphiProgramNode. - self variable notNil - ifTrue: [ self variable parent: self ] -] diff --git a/src/SmaCC_Delphi/DelphiAddressExpressionNode.class.st b/src/SmaCC_Delphi/DelphiAddressExpressionNode.class.st deleted file mode 100644 index 3f583866f..000000000 --- a/src/SmaCC_Delphi/DelphiAddressExpressionNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #DelphiAddressExpressionNode, - #superclass : #DelphiExpressionNode, - #instVars : [ - 'atToken', - 'expression' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiAddressExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitAddressExpression: self -] - -{ #category : #generated } -DelphiAddressExpressionNode >> atToken [ - ^ atToken -] - -{ #category : #generated } -DelphiAddressExpressionNode >> atToken: aSmaCCToken [ - atToken := aSmaCCToken -] - -{ #category : #generated } -DelphiAddressExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -DelphiAddressExpressionNode >> expression: aDelphiExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aDelphiExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -DelphiAddressExpressionNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -DelphiAddressExpressionNode >> tokenVariables [ - ^ #(#atToken) -] diff --git a/src/SmaCC_Delphi/DelphiAnonymousFunctionTypeNode.class.st b/src/SmaCC_Delphi/DelphiAnonymousFunctionTypeNode.class.st deleted file mode 100644 index 74a8ba082..000000000 --- a/src/SmaCC_Delphi/DelphiAnonymousFunctionTypeNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #DelphiAnonymousFunctionTypeNode, - #superclass : #DelphiAnonymousMethodTypeNode, - #instVars : [ - 'functionToken', - 'colon', - 'type' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiAnonymousFunctionTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitAnonymousFunctionType: self -] - -{ #category : #generated } -DelphiAnonymousFunctionTypeNode >> colon [ - ^ colon -] - -{ #category : #generated } -DelphiAnonymousFunctionTypeNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -DelphiAnonymousFunctionTypeNode >> functionToken [ - ^ functionToken -] - -{ #category : #generated } -DelphiAnonymousFunctionTypeNode >> functionToken: aSmaCCToken [ - functionToken := aSmaCCToken -] - -{ #category : #generated } -DelphiAnonymousFunctionTypeNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -DelphiAnonymousFunctionTypeNode >> tokenVariables [ - ^ #(#functionToken #colon #left #right #ofToken #objectToken) -] - -{ #category : #generated } -DelphiAnonymousFunctionTypeNode >> type [ - ^ type -] - -{ #category : #generated } -DelphiAnonymousFunctionTypeNode >> type: aDelphiProgramNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aDelphiProgramNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_Delphi/DelphiAnonymousMethodTypeNode.class.st b/src/SmaCC_Delphi/DelphiAnonymousMethodTypeNode.class.st deleted file mode 100644 index a06614ccc..000000000 --- a/src/SmaCC_Delphi/DelphiAnonymousMethodTypeNode.class.st +++ /dev/null @@ -1,116 +0,0 @@ -Class { - #name : #DelphiAnonymousMethodTypeNode, - #superclass : #DelphiTypeNode, - #instVars : [ - 'left', - 'arguments', - 'semicolons', - 'right', - 'ofToken', - 'objectToken', - 'modifiers' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiAnonymousMethodTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitAnonymousMethodType: self -] - -{ #category : #generated } -DelphiAnonymousMethodTypeNode >> arguments [ - ^ arguments -] - -{ #category : #generated } -DelphiAnonymousMethodTypeNode >> arguments: anOrderedCollection [ - self setParents: self arguments to: nil. - arguments := anOrderedCollection. - self setParents: self arguments to: self -] - -{ #category : #generated } -DelphiAnonymousMethodTypeNode >> compositeNodeVariables [ - ^ #(#arguments #modifiers) -] - -{ #category : #generated } -DelphiAnonymousMethodTypeNode >> ignoredCompositeTokenVariables [ - ^ #(#semicolons) -] - -{ #category : #'generated-initialize-release' } -DelphiAnonymousMethodTypeNode >> initialize [ - super initialize. - arguments := OrderedCollection new: 2. - semicolons := OrderedCollection new: 2. - modifiers := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiAnonymousMethodTypeNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiAnonymousMethodTypeNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -DelphiAnonymousMethodTypeNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -DelphiAnonymousMethodTypeNode >> modifiers: anOrderedCollection [ - self setParents: self modifiers to: nil. - modifiers := anOrderedCollection. - self setParents: self modifiers to: self -] - -{ #category : #generated } -DelphiAnonymousMethodTypeNode >> objectToken [ - ^ objectToken -] - -{ #category : #generated } -DelphiAnonymousMethodTypeNode >> objectToken: aSmaCCToken [ - objectToken := aSmaCCToken -] - -{ #category : #generated } -DelphiAnonymousMethodTypeNode >> ofToken [ - ^ ofToken -] - -{ #category : #generated } -DelphiAnonymousMethodTypeNode >> ofToken: aSmaCCToken [ - ofToken := aSmaCCToken -] - -{ #category : #generated } -DelphiAnonymousMethodTypeNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiAnonymousMethodTypeNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiAnonymousMethodTypeNode >> semicolons [ - ^ semicolons -] - -{ #category : #generated } -DelphiAnonymousMethodTypeNode >> semicolons: anOrderedCollection [ - semicolons := anOrderedCollection -] - -{ #category : #generated } -DelphiAnonymousMethodTypeNode >> tokenVariables [ - ^ #(#left #right #ofToken #objectToken) -] diff --git a/src/SmaCC_Delphi/DelphiAnonymousProcedureTypeNode.class.st b/src/SmaCC_Delphi/DelphiAnonymousProcedureTypeNode.class.st deleted file mode 100644 index bfd525bd6..000000000 --- a/src/SmaCC_Delphi/DelphiAnonymousProcedureTypeNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #DelphiAnonymousProcedureTypeNode, - #superclass : #DelphiAnonymousMethodTypeNode, - #instVars : [ - 'procedureToken' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiAnonymousProcedureTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitAnonymousProcedureType: self -] - -{ #category : #generated } -DelphiAnonymousProcedureTypeNode >> procedureToken [ - ^ procedureToken -] - -{ #category : #generated } -DelphiAnonymousProcedureTypeNode >> procedureToken: aSmaCCToken [ - procedureToken := aSmaCCToken -] - -{ #category : #generated } -DelphiAnonymousProcedureTypeNode >> tokenVariables [ - ^ #(#procedureToken #left #right #ofToken #objectToken) -] diff --git a/src/SmaCC_Delphi/DelphiArgumentNode.class.st b/src/SmaCC_Delphi/DelphiArgumentNode.class.st deleted file mode 100644 index fbcf5e9e1..000000000 --- a/src/SmaCC_Delphi/DelphiArgumentNode.class.st +++ /dev/null @@ -1,124 +0,0 @@ -Class { - #name : #DelphiArgumentNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'typeToken', - 'names', - 'commas', - 'colon', - 'type', - 'equal', - 'value' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiArgumentNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitArgument: self -] - -{ #category : #generated } -DelphiArgumentNode >> colon [ - ^ colon -] - -{ #category : #generated } -DelphiArgumentNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -DelphiArgumentNode >> commas [ - ^ commas -] - -{ #category : #generated } -DelphiArgumentNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -DelphiArgumentNode >> compositeTokenVariables [ - ^ #(#names) -] - -{ #category : #generated } -DelphiArgumentNode >> equal [ - ^ equal -] - -{ #category : #generated } -DelphiArgumentNode >> equal: aSmaCCToken [ - equal := aSmaCCToken -] - -{ #category : #generated } -DelphiArgumentNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #'generated-initialize-release' } -DelphiArgumentNode >> initialize [ - super initialize. - names := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiArgumentNode >> names [ - ^ names -] - -{ #category : #generated } -DelphiArgumentNode >> names: anOrderedCollection [ - names := anOrderedCollection -] - -{ #category : #generated } -DelphiArgumentNode >> nodeVariables [ - ^ #(#type #value) -] - -{ #category : #generated } -DelphiArgumentNode >> tokenVariables [ - ^ #(#typeToken #colon #equal) -] - -{ #category : #generated } -DelphiArgumentNode >> type [ - ^ type -] - -{ #category : #generated } -DelphiArgumentNode >> type: aDelphiProgramNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aDelphiProgramNode. - self type notNil - ifTrue: [ self type parent: self ] -] - -{ #category : #generated } -DelphiArgumentNode >> typeToken [ - ^ typeToken -] - -{ #category : #generated } -DelphiArgumentNode >> typeToken: aSmaCCToken [ - typeToken := aSmaCCToken -] - -{ #category : #generated } -DelphiArgumentNode >> value [ - ^ value -] - -{ #category : #generated } -DelphiArgumentNode >> value: aDelphiExpressionNode [ - self value notNil - ifTrue: [ self value parent: nil ]. - value := aDelphiExpressionNode. - self value notNil - ifTrue: [ self value parent: self ] -] diff --git a/src/SmaCC_Delphi/DelphiArrayExpressionNode.class.st b/src/SmaCC_Delphi/DelphiArrayExpressionNode.class.st deleted file mode 100644 index 645434e55..000000000 --- a/src/SmaCC_Delphi/DelphiArrayExpressionNode.class.st +++ /dev/null @@ -1,100 +0,0 @@ -Class { - #name : #DelphiArrayExpressionNode, - #superclass : #DelphiExpressionNode, - #instVars : [ - 'expression', - 'left', - 'indexes', - 'commas', - 'right' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiArrayExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitArrayExpression: self -] - -{ #category : #generated } -DelphiArrayExpressionNode >> commas [ - ^ commas -] - -{ #category : #generated } -DelphiArrayExpressionNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -DelphiArrayExpressionNode >> compositeNodeVariables [ - ^ #(#indexes) -] - -{ #category : #generated } -DelphiArrayExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -DelphiArrayExpressionNode >> expression: aDelphiExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aDelphiExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -DelphiArrayExpressionNode >> ignoredCompositeTokenVariables [ - ^ #(#commas #leftParens #rightParens) -] - -{ #category : #generated } -DelphiArrayExpressionNode >> indexes [ - ^ indexes -] - -{ #category : #generated } -DelphiArrayExpressionNode >> indexes: anOrderedCollection [ - self setParents: self indexes to: nil. - indexes := anOrderedCollection. - self setParents: self indexes to: self -] - -{ #category : #'generated-initialize-release' } -DelphiArrayExpressionNode >> initialize [ - super initialize. - indexes := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiArrayExpressionNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiArrayExpressionNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -DelphiArrayExpressionNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -DelphiArrayExpressionNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiArrayExpressionNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiArrayExpressionNode >> tokenVariables [ - ^ #(#left #right) -] diff --git a/src/SmaCC_Delphi/DelphiArrayTypeNode.class.st b/src/SmaCC_Delphi/DelphiArrayTypeNode.class.st deleted file mode 100644 index 496673ba8..000000000 --- a/src/SmaCC_Delphi/DelphiArrayTypeNode.class.st +++ /dev/null @@ -1,144 +0,0 @@ -Class { - #name : #DelphiArrayTypeNode, - #superclass : #DelphiTypeNode, - #instVars : [ - 'packedToken', - 'arrayToken', - 'left', - 'indexes', - 'commas', - 'right', - 'ofToken', - 'type', - 'constToken' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiArrayTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitArrayType: self -] - -{ #category : #generated } -DelphiArrayTypeNode >> arrayToken [ - ^ arrayToken -] - -{ #category : #generated } -DelphiArrayTypeNode >> arrayToken: aSmaCCToken [ - arrayToken := aSmaCCToken -] - -{ #category : #generated } -DelphiArrayTypeNode >> commas [ - ^ commas -] - -{ #category : #generated } -DelphiArrayTypeNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -DelphiArrayTypeNode >> compositeNodeVariables [ - ^ #(#indexes) -] - -{ #category : #generated } -DelphiArrayTypeNode >> constToken [ - ^ constToken -] - -{ #category : #generated } -DelphiArrayTypeNode >> constToken: aSmaCCToken [ - constToken := aSmaCCToken -] - -{ #category : #generated } -DelphiArrayTypeNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -DelphiArrayTypeNode >> indexes [ - ^ indexes -] - -{ #category : #generated } -DelphiArrayTypeNode >> indexes: anOrderedCollection [ - self setParents: self indexes to: nil. - indexes := anOrderedCollection. - self setParents: self indexes to: self -] - -{ #category : #'generated-initialize-release' } -DelphiArrayTypeNode >> initialize [ - super initialize. - indexes := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiArrayTypeNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiArrayTypeNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -DelphiArrayTypeNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -DelphiArrayTypeNode >> ofToken [ - ^ ofToken -] - -{ #category : #generated } -DelphiArrayTypeNode >> ofToken: aSmaCCToken [ - ofToken := aSmaCCToken -] - -{ #category : #generated } -DelphiArrayTypeNode >> packedToken [ - ^ packedToken -] - -{ #category : #generated } -DelphiArrayTypeNode >> packedToken: aSmaCCToken [ - packedToken := aSmaCCToken -] - -{ #category : #generated } -DelphiArrayTypeNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiArrayTypeNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiArrayTypeNode >> tokenVariables [ - ^ #(#packedToken #arrayToken #left #right #ofToken #constToken) -] - -{ #category : #generated } -DelphiArrayTypeNode >> type [ - ^ type -] - -{ #category : #generated } -DelphiArrayTypeNode >> type: aDelphiProgramNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aDelphiProgramNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_Delphi/DelphiAsmBlockNode.class.st b/src/SmaCC_Delphi/DelphiAsmBlockNode.class.st deleted file mode 100644 index 8e9852614..000000000 --- a/src/SmaCC_Delphi/DelphiAsmBlockNode.class.st +++ /dev/null @@ -1,39 +0,0 @@ -Class { - #name : #DelphiAsmBlockNode, - #superclass : #DelphiStatementNode, - #instVars : [ - 'asmToken', - 'endToken' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiAsmBlockNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitAsmBlock: self -] - -{ #category : #generated } -DelphiAsmBlockNode >> asmToken [ - ^ asmToken -] - -{ #category : #generated } -DelphiAsmBlockNode >> asmToken: aSmaCCToken [ - asmToken := aSmaCCToken -] - -{ #category : #generated } -DelphiAsmBlockNode >> endToken [ - ^ endToken -] - -{ #category : #generated } -DelphiAsmBlockNode >> endToken: aSmaCCToken [ - endToken := aSmaCCToken -] - -{ #category : #generated } -DelphiAsmBlockNode >> tokenVariables [ - ^ #(#asmToken #endToken) -] diff --git a/src/SmaCC_Delphi/DelphiAssignmentExpressionNode.class.st b/src/SmaCC_Delphi/DelphiAssignmentExpressionNode.class.st deleted file mode 100644 index 5a763fd85..000000000 --- a/src/SmaCC_Delphi/DelphiAssignmentExpressionNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #DelphiAssignmentExpressionNode, - #superclass : #DelphiExpressionNode, - #instVars : [ - 'lhs', - 'assignment', - 'value' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiAssignmentExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitAssignmentExpression: self -] - -{ #category : #generated } -DelphiAssignmentExpressionNode >> assignment [ - ^ assignment -] - -{ #category : #generated } -DelphiAssignmentExpressionNode >> assignment: aSmaCCToken [ - assignment := aSmaCCToken -] - -{ #category : #generated } -DelphiAssignmentExpressionNode >> lhs [ - ^ lhs -] - -{ #category : #generated } -DelphiAssignmentExpressionNode >> lhs: aDelphiExpressionNode [ - self lhs notNil - ifTrue: [ self lhs parent: nil ]. - lhs := aDelphiExpressionNode. - self lhs notNil - ifTrue: [ self lhs parent: self ] -] - -{ #category : #generated } -DelphiAssignmentExpressionNode >> nodeVariables [ - ^ #(#lhs #value) -] - -{ #category : #generated } -DelphiAssignmentExpressionNode >> tokenVariables [ - ^ #(#assignment) -] - -{ #category : #generated } -DelphiAssignmentExpressionNode >> value [ - ^ value -] - -{ #category : #generated } -DelphiAssignmentExpressionNode >> value: aDelphiExpressionNode [ - self value notNil - ifTrue: [ self value parent: nil ]. - value := aDelphiExpressionNode. - self value notNil - ifTrue: [ self value parent: self ] -] diff --git a/src/SmaCC_Delphi/DelphiBinaryExpressionNode.class.st b/src/SmaCC_Delphi/DelphiBinaryExpressionNode.class.st deleted file mode 100644 index 056691549..000000000 --- a/src/SmaCC_Delphi/DelphiBinaryExpressionNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #DelphiBinaryExpressionNode, - #superclass : #DelphiExpressionNode, - #instVars : [ - 'leftExpression', - 'operator', - 'rightExpression' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiBinaryExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitBinaryExpression: self -] - -{ #category : #generated } -DelphiBinaryExpressionNode >> leftExpression [ - ^ leftExpression -] - -{ #category : #generated } -DelphiBinaryExpressionNode >> leftExpression: aDelphiExpressionNode [ - self leftExpression notNil - ifTrue: [ self leftExpression parent: nil ]. - leftExpression := aDelphiExpressionNode. - self leftExpression notNil - ifTrue: [ self leftExpression parent: self ] -] - -{ #category : #generated } -DelphiBinaryExpressionNode >> nodeVariables [ - ^ #(#leftExpression #rightExpression) -] - -{ #category : #generated } -DelphiBinaryExpressionNode >> operator [ - ^ operator -] - -{ #category : #generated } -DelphiBinaryExpressionNode >> operator: aSmaCCToken [ - operator := aSmaCCToken -] - -{ #category : #generated } -DelphiBinaryExpressionNode >> rightExpression [ - ^ rightExpression -] - -{ #category : #generated } -DelphiBinaryExpressionNode >> rightExpression: aDelphiExpressionNode [ - self rightExpression notNil - ifTrue: [ self rightExpression parent: nil ]. - rightExpression := aDelphiExpressionNode. - self rightExpression notNil - ifTrue: [ self rightExpression parent: self ] -] - -{ #category : #generated } -DelphiBinaryExpressionNode >> tokenVariables [ - ^ #(#operator) -] diff --git a/src/SmaCC_Delphi/DelphiBinaryExpressionVisitor.class.st b/src/SmaCC_Delphi/DelphiBinaryExpressionVisitor.class.st deleted file mode 100644 index 5ed61ad1c..000000000 --- a/src/SmaCC_Delphi/DelphiBinaryExpressionVisitor.class.st +++ /dev/null @@ -1,90 +0,0 @@ -Class { - #name : #DelphiBinaryExpressionVisitor, - #superclass : #DelphiProgramNodeVisitor, - #classInstVars : [ - 'operators' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #private } -DelphiBinaryExpressionVisitor class >> operators [ - ^ operators - ifNil: - [ operators := #('OR' 'AND' 'XOR' ',' '+' '-' 'DIV' 'MOD' 'SHL' 'SHR' '*' '/' '@' '.' '^') - asSet ] -] - -{ #category : #testing } -DelphiBinaryExpressionVisitor >> isLeftAssociative: aString [ - ^ self class operators includes: aString asUppercase -] - -{ #category : #testing } -DelphiBinaryExpressionVisitor >> isPrecedenceOf: op1String higherThan: op2String [ - | index1 index2 | - index1 := self precedenceOf: op1String. - index2 := self precedenceOf: op2String. - ^ index1 notNil - and: - [ index2 notNil - and: - [ index1 > index2 - or: [ index1 = index2 and: [ self isLeftAssociative: op1String ] ] ] ] -] - -{ #category : #testing } -DelphiBinaryExpressionVisitor >> precedenceOf: aString [ - | string table | - string := aString asUppercase. - table := #(#(':=') #('OR') #('AND') #('XOR') #(',') #('<>' '>' '<' '=' '<=' '>=' 'IN') #('AS' 'IS' 'ABSOLUTE') #('+' '-') #('DIV' 'MOD' 'SHL' 'SHR' '*' '/') #('@') #('.' '^')). - 1 to: table size do: [ :i | - ((table at: i) includes: string) - ifTrue: [ ^ i ] ]. - ^ nil -] - -{ #category : #visiting } -DelphiBinaryExpressionVisitor >> visitBinaryExpression: aBinaryExpression [ - | pulledUp temp parent current | - current := aBinaryExpression. - [ (current rightExpression isKindOf: DelphiBinaryExpressionNode) - and: - [ current rightExpression leftParens isEmpty - and: - [ self - isPrecedenceOf: current operator value - higherThan: current rightExpression operator value ] ] ] - whileTrue: - [ parent := current parent. - pulledUp := current rightExpression. - temp := pulledUp leftExpression. - pulledUp leftExpression: current. - current rightExpression: temp. - pulledUp parent: parent. - temp := pulledUp leftParens. - pulledUp leftParens: pulledUp leftExpression leftParens. - pulledUp leftExpression leftParens: temp. - temp := pulledUp rightParens. - pulledUp rightParens: pulledUp leftExpression rightParens. - pulledUp leftExpression rightParens: temp. - pulledUp removePositions. - pulledUp leftExpression removePositions. - 1 to: pulledUp parent class instSize do: - [ :i | - | var index | - var := pulledUp parent instVarAt: i. - var == current - ifTrue: [ pulledUp parent instVarAt: i put: pulledUp ]. - (var isKindOf: SequenceableCollection) - ifTrue: - [ index := var identityIndexOf: current. - index > 0 - ifTrue: [ var at: index put: pulledUp ] ] ]. - pulledUp removeAttributeNamed: #startPosition. - current removeAttributeNamed: #stopPosition. - current := pulledUp ]. - self acceptNode: current leftExpression. - self acceptNode: current rightExpression. - ^ current -] diff --git a/src/SmaCC_Delphi/DelphiCaseLabelNode.class.st b/src/SmaCC_Delphi/DelphiCaseLabelNode.class.st deleted file mode 100644 index 4041223d3..000000000 --- a/src/SmaCC_Delphi/DelphiCaseLabelNode.class.st +++ /dev/null @@ -1,32 +0,0 @@ -Class { - #name : #DelphiCaseLabelNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'value' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiCaseLabelNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitCaseLabel: self -] - -{ #category : #generated } -DelphiCaseLabelNode >> nodeVariables [ - ^ #(#value) -] - -{ #category : #generated } -DelphiCaseLabelNode >> value [ - ^ value -] - -{ #category : #generated } -DelphiCaseLabelNode >> value: aDelphiExpressionNode [ - self value notNil - ifTrue: [ self value parent: nil ]. - value := aDelphiExpressionNode. - self value notNil - ifTrue: [ self value parent: self ] -] diff --git a/src/SmaCC_Delphi/DelphiCaseOptionNode.class.st b/src/SmaCC_Delphi/DelphiCaseOptionNode.class.st deleted file mode 100644 index 085418b62..000000000 --- a/src/SmaCC_Delphi/DelphiCaseOptionNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #DelphiCaseOptionNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'label', - 'colon', - 'statement' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiCaseOptionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitCaseOption: self -] - -{ #category : #generated } -DelphiCaseOptionNode >> colon [ - ^ colon -] - -{ #category : #generated } -DelphiCaseOptionNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -DelphiCaseOptionNode >> label [ - ^ label -] - -{ #category : #generated } -DelphiCaseOptionNode >> label: aDelphiProgramNode [ - self label notNil - ifTrue: [ self label parent: nil ]. - label := aDelphiProgramNode. - self label notNil - ifTrue: [ self label parent: self ] -] - -{ #category : #generated } -DelphiCaseOptionNode >> nodeVariables [ - ^ #(#label #statement) -] - -{ #category : #generated } -DelphiCaseOptionNode >> statement [ - ^ statement -] - -{ #category : #generated } -DelphiCaseOptionNode >> statement: aDelphiStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aDelphiStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -DelphiCaseOptionNode >> tokenVariables [ - ^ #(#colon) -] diff --git a/src/SmaCC_Delphi/DelphiCaseStatementNode.class.st b/src/SmaCC_Delphi/DelphiCaseStatementNode.class.st deleted file mode 100644 index 3f1bd9ad4..000000000 --- a/src/SmaCC_Delphi/DelphiCaseStatementNode.class.st +++ /dev/null @@ -1,105 +0,0 @@ -Class { - #name : #DelphiCaseStatementNode, - #superclass : #DelphiMultiStatementNode, - #instVars : [ - 'caseToken', - 'expression', - 'ofToken', - 'options', - 'elseToken', - 'endToken' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiCaseStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitCaseStatement: self -] - -{ #category : #generated } -DelphiCaseStatementNode >> caseToken [ - ^ caseToken -] - -{ #category : #generated } -DelphiCaseStatementNode >> caseToken: aSmaCCToken [ - caseToken := aSmaCCToken -] - -{ #category : #generated } -DelphiCaseStatementNode >> compositeNodeVariables [ - ^ #(#options #statements) -] - -{ #category : #generated } -DelphiCaseStatementNode >> elseToken [ - ^ elseToken -] - -{ #category : #generated } -DelphiCaseStatementNode >> elseToken: aSmaCCToken [ - elseToken := aSmaCCToken -] - -{ #category : #generated } -DelphiCaseStatementNode >> endToken [ - ^ endToken -] - -{ #category : #generated } -DelphiCaseStatementNode >> endToken: aSmaCCToken [ - endToken := aSmaCCToken -] - -{ #category : #generated } -DelphiCaseStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -DelphiCaseStatementNode >> expression: aDelphiExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aDelphiExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #'generated-initialize-release' } -DelphiCaseStatementNode >> initialize [ - super initialize. - options := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiCaseStatementNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -DelphiCaseStatementNode >> ofToken [ - ^ ofToken -] - -{ #category : #generated } -DelphiCaseStatementNode >> ofToken: aSmaCCToken [ - ofToken := aSmaCCToken -] - -{ #category : #generated } -DelphiCaseStatementNode >> options [ - ^ options -] - -{ #category : #generated } -DelphiCaseStatementNode >> options: anOrderedCollection [ - self setParents: self options to: nil. - options := anOrderedCollection. - self setParents: self options to: self -] - -{ #category : #generated } -DelphiCaseStatementNode >> tokenVariables [ - ^ #(#caseToken #ofToken #elseToken #endToken) -] diff --git a/src/SmaCC_Delphi/DelphiClassFunctionDefinitionNode.class.st b/src/SmaCC_Delphi/DelphiClassFunctionDefinitionNode.class.st deleted file mode 100644 index e88c86246..000000000 --- a/src/SmaCC_Delphi/DelphiClassFunctionDefinitionNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #DelphiClassFunctionDefinitionNode, - #superclass : #DelphiFunctionDefinitionNode, - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiClassFunctionDefinitionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitClassFunctionDefinition: self -] diff --git a/src/SmaCC_Delphi/DelphiClassFunctionHeaderNode.class.st b/src/SmaCC_Delphi/DelphiClassFunctionHeaderNode.class.st deleted file mode 100644 index b4659d7fe..000000000 --- a/src/SmaCC_Delphi/DelphiClassFunctionHeaderNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #DelphiClassFunctionHeaderNode, - #superclass : #DelphiFunctionHeaderNode, - #instVars : [ - 'classToken' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiClassFunctionHeaderNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitClassFunctionHeader: self -] - -{ #category : #generated } -DelphiClassFunctionHeaderNode >> classToken [ - ^ classToken -] - -{ #category : #generated } -DelphiClassFunctionHeaderNode >> classToken: aSmaCCToken [ - classToken := aSmaCCToken -] - -{ #category : #generated } -DelphiClassFunctionHeaderNode >> tokenVariables [ - ^ #(#classToken #functionToken #colon #left #right) -] diff --git a/src/SmaCC_Delphi/DelphiClassHelperTypeNode.class.st b/src/SmaCC_Delphi/DelphiClassHelperTypeNode.class.st deleted file mode 100644 index 801fecdda..000000000 --- a/src/SmaCC_Delphi/DelphiClassHelperTypeNode.class.st +++ /dev/null @@ -1,92 +0,0 @@ -Class { - #name : #DelphiClassHelperTypeNode, - #superclass : #DelphiClassTypeNode, - #instVars : [ - 'classToken', - 'classAttributes', - 'helperToken', - 'forToken', - '_class' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiClassHelperTypeNode >> _class [ - ^ _class -] - -{ #category : #generated } -DelphiClassHelperTypeNode >> _class: aDelphiQualifiedNameNode [ - self _class notNil - ifTrue: [ self _class parent: nil ]. - _class := aDelphiQualifiedNameNode. - self _class notNil - ifTrue: [ self _class parent: self ] -] - -{ #category : #generated } -DelphiClassHelperTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitClassHelperType: self -] - -{ #category : #generated } -DelphiClassHelperTypeNode >> classAttributes [ - ^ classAttributes -] - -{ #category : #generated } -DelphiClassHelperTypeNode >> classAttributes: anOrderedCollection [ - classAttributes := anOrderedCollection -] - -{ #category : #generated } -DelphiClassHelperTypeNode >> classToken [ - ^ classToken -] - -{ #category : #generated } -DelphiClassHelperTypeNode >> classToken: aSmaCCToken [ - classToken := aSmaCCToken -] - -{ #category : #generated } -DelphiClassHelperTypeNode >> compositeTokenVariables [ - ^ #(#classAttributes) -] - -{ #category : #generated } -DelphiClassHelperTypeNode >> forToken [ - ^ forToken -] - -{ #category : #generated } -DelphiClassHelperTypeNode >> forToken: aSmaCCToken [ - forToken := aSmaCCToken -] - -{ #category : #generated } -DelphiClassHelperTypeNode >> helperToken [ - ^ helperToken -] - -{ #category : #generated } -DelphiClassHelperTypeNode >> helperToken: aSmaCCToken [ - helperToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -DelphiClassHelperTypeNode >> initialize [ - super initialize. - classAttributes := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiClassHelperTypeNode >> nodeVariables [ - ^ #(#_class #implicitClassSection) -] - -{ #category : #generated } -DelphiClassHelperTypeNode >> tokenVariables [ - ^ #(#classToken #helperToken #forToken #left #right #endToken) -] diff --git a/src/SmaCC_Delphi/DelphiClassOperatorDefinitionNode.class.st b/src/SmaCC_Delphi/DelphiClassOperatorDefinitionNode.class.st deleted file mode 100644 index d3c2b002d..000000000 --- a/src/SmaCC_Delphi/DelphiClassOperatorDefinitionNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #DelphiClassOperatorDefinitionNode, - #superclass : #DelphiFunctionDefinitionNode, - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiClassOperatorDefinitionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitClassOperatorDefinition: self -] diff --git a/src/SmaCC_Delphi/DelphiClassOperatorHeaderNode.class.st b/src/SmaCC_Delphi/DelphiClassOperatorHeaderNode.class.st deleted file mode 100644 index 2fcc6891b..000000000 --- a/src/SmaCC_Delphi/DelphiClassOperatorHeaderNode.class.st +++ /dev/null @@ -1,111 +0,0 @@ -Class { - #name : #DelphiClassOperatorHeaderNode, - #superclass : #DelphiMethodHeaderNode, - #instVars : [ - 'classToken', - 'operatorToken', - 'arguments', - 'semicolons', - 'colon', - 'type' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiClassOperatorHeaderNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitClassOperatorHeader: self -] - -{ #category : #generated } -DelphiClassOperatorHeaderNode >> arguments [ - ^ arguments -] - -{ #category : #generated } -DelphiClassOperatorHeaderNode >> arguments: anOrderedCollection [ - self setParents: self arguments to: nil. - arguments := anOrderedCollection. - self setParents: self arguments to: self -] - -{ #category : #generated } -DelphiClassOperatorHeaderNode >> classToken [ - ^ classToken -] - -{ #category : #generated } -DelphiClassOperatorHeaderNode >> classToken: aSmaCCToken [ - classToken := aSmaCCToken -] - -{ #category : #generated } -DelphiClassOperatorHeaderNode >> colon [ - ^ colon -] - -{ #category : #generated } -DelphiClassOperatorHeaderNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -DelphiClassOperatorHeaderNode >> compositeNodeVariables [ - ^ #(#arguments #modifiers) -] - -{ #category : #generated } -DelphiClassOperatorHeaderNode >> ignoredCompositeTokenVariables [ - ^ #(#semicolons) -] - -{ #category : #'generated-initialize-release' } -DelphiClassOperatorHeaderNode >> initialize [ - super initialize. - arguments := OrderedCollection new: 2. - semicolons := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiClassOperatorHeaderNode >> nodeVariables [ - ^ #(#type #attribute #qualifiedName) -] - -{ #category : #generated } -DelphiClassOperatorHeaderNode >> operatorToken [ - ^ operatorToken -] - -{ #category : #generated } -DelphiClassOperatorHeaderNode >> operatorToken: aSmaCCToken [ - operatorToken := aSmaCCToken -] - -{ #category : #generated } -DelphiClassOperatorHeaderNode >> semicolons [ - ^ semicolons -] - -{ #category : #generated } -DelphiClassOperatorHeaderNode >> semicolons: anOrderedCollection [ - semicolons := anOrderedCollection -] - -{ #category : #generated } -DelphiClassOperatorHeaderNode >> tokenVariables [ - ^ #(#classToken #operatorToken #colon #left #right) -] - -{ #category : #generated } -DelphiClassOperatorHeaderNode >> type [ - ^ type -] - -{ #category : #generated } -DelphiClassOperatorHeaderNode >> type: aDelphiProgramNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aDelphiProgramNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_Delphi/DelphiClassOrInterfaceTypeNode.class.st b/src/SmaCC_Delphi/DelphiClassOrInterfaceTypeNode.class.st deleted file mode 100644 index 227484f38..000000000 --- a/src/SmaCC_Delphi/DelphiClassOrInterfaceTypeNode.class.st +++ /dev/null @@ -1,91 +0,0 @@ -Class { - #name : #DelphiClassOrInterfaceTypeNode, - #superclass : #DelphiTypeNode, - #instVars : [ - 'left', - 'superclasses', - 'commas', - 'right', - 'endToken' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiClassOrInterfaceTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitClassOrInterfaceType: self -] - -{ #category : #generated } -DelphiClassOrInterfaceTypeNode >> commas [ - ^ commas -] - -{ #category : #generated } -DelphiClassOrInterfaceTypeNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -DelphiClassOrInterfaceTypeNode >> compositeNodeVariables [ - ^ #(#superclasses) -] - -{ #category : #generated } -DelphiClassOrInterfaceTypeNode >> endToken [ - ^ endToken -] - -{ #category : #generated } -DelphiClassOrInterfaceTypeNode >> endToken: aSmaCCToken [ - endToken := aSmaCCToken -] - -{ #category : #generated } -DelphiClassOrInterfaceTypeNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #'generated-initialize-release' } -DelphiClassOrInterfaceTypeNode >> initialize [ - super initialize. - superclasses := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiClassOrInterfaceTypeNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiClassOrInterfaceTypeNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -DelphiClassOrInterfaceTypeNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiClassOrInterfaceTypeNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiClassOrInterfaceTypeNode >> superclasses [ - ^ superclasses -] - -{ #category : #generated } -DelphiClassOrInterfaceTypeNode >> superclasses: anOrderedCollection [ - self setParents: self superclasses to: nil. - superclasses := anOrderedCollection. - self setParents: self superclasses to: self -] - -{ #category : #generated } -DelphiClassOrInterfaceTypeNode >> tokenVariables [ - ^ #(#left #right #endToken) -] diff --git a/src/SmaCC_Delphi/DelphiClassProcedureDefinitionNode.class.st b/src/SmaCC_Delphi/DelphiClassProcedureDefinitionNode.class.st deleted file mode 100644 index 0fb2305ae..000000000 --- a/src/SmaCC_Delphi/DelphiClassProcedureDefinitionNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #DelphiClassProcedureDefinitionNode, - #superclass : #DelphiProcedureDefinitionNode, - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiClassProcedureDefinitionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitClassProcedureDefinition: self -] diff --git a/src/SmaCC_Delphi/DelphiClassProcedureHeaderNode.class.st b/src/SmaCC_Delphi/DelphiClassProcedureHeaderNode.class.st deleted file mode 100644 index 5cb82856c..000000000 --- a/src/SmaCC_Delphi/DelphiClassProcedureHeaderNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #DelphiClassProcedureHeaderNode, - #superclass : #DelphiProcedureHeaderNode, - #instVars : [ - 'classToken' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiClassProcedureHeaderNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitClassProcedureHeader: self -] - -{ #category : #generated } -DelphiClassProcedureHeaderNode >> classToken [ - ^ classToken -] - -{ #category : #generated } -DelphiClassProcedureHeaderNode >> classToken: aSmaCCToken [ - classToken := aSmaCCToken -] - -{ #category : #generated } -DelphiClassProcedureHeaderNode >> tokenVariables [ - ^ #(#classToken #procedureToken #left #right) -] diff --git a/src/SmaCC_Delphi/DelphiClassPropertyHeaderNode.class.st b/src/SmaCC_Delphi/DelphiClassPropertyHeaderNode.class.st deleted file mode 100644 index 970c53c49..000000000 --- a/src/SmaCC_Delphi/DelphiClassPropertyHeaderNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #DelphiClassPropertyHeaderNode, - #superclass : #DelphiPropertyHeaderNode, - #instVars : [ - 'classToken' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiClassPropertyHeaderNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitClassPropertyHeader: self -] - -{ #category : #generated } -DelphiClassPropertyHeaderNode >> classToken [ - ^ classToken -] - -{ #category : #generated } -DelphiClassPropertyHeaderNode >> classToken: aSmaCCToken [ - classToken := aSmaCCToken -] - -{ #category : #generated } -DelphiClassPropertyHeaderNode >> tokenVariables [ - ^ #(#classToken #propertyToken #name #colon) -] diff --git a/src/SmaCC_Delphi/DelphiClassSectionNode.class.st b/src/SmaCC_Delphi/DelphiClassSectionNode.class.st deleted file mode 100644 index 5b0ef1d6f..000000000 --- a/src/SmaCC_Delphi/DelphiClassSectionNode.class.st +++ /dev/null @@ -1,36 +0,0 @@ -Class { - #name : #DelphiClassSectionNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'components' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiClassSectionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitClassSection: self -] - -{ #category : #generated } -DelphiClassSectionNode >> components [ - ^ components -] - -{ #category : #generated } -DelphiClassSectionNode >> components: anOrderedCollection [ - self setParents: self components to: nil. - components := anOrderedCollection. - self setParents: self components to: self -] - -{ #category : #generated } -DelphiClassSectionNode >> compositeNodeVariables [ - ^ #(#components) -] - -{ #category : #'generated-initialize-release' } -DelphiClassSectionNode >> initialize [ - super initialize. - components := OrderedCollection new: 2. -] diff --git a/src/SmaCC_Delphi/DelphiClassTypeNode.class.st b/src/SmaCC_Delphi/DelphiClassTypeNode.class.st deleted file mode 100644 index 879520c38..000000000 --- a/src/SmaCC_Delphi/DelphiClassTypeNode.class.st +++ /dev/null @@ -1,56 +0,0 @@ -Class { - #name : #DelphiClassTypeNode, - #superclass : #DelphiClassOrInterfaceTypeNode, - #instVars : [ - 'implicitClassSection', - 'sections' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiClassTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitClassType: self -] - -{ #category : #generated } -DelphiClassTypeNode >> compositeNodeVariables [ - ^ #(#sections #superclasses) -] - -{ #category : #generated } -DelphiClassTypeNode >> implicitClassSection [ - ^ implicitClassSection -] - -{ #category : #generated } -DelphiClassTypeNode >> implicitClassSection: aDelphiImplicitClassSectionNode [ - self implicitClassSection notNil - ifTrue: [ self implicitClassSection parent: nil ]. - implicitClassSection := aDelphiImplicitClassSectionNode. - self implicitClassSection notNil - ifTrue: [ self implicitClassSection parent: self ] -] - -{ #category : #'generated-initialize-release' } -DelphiClassTypeNode >> initialize [ - super initialize. - sections := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiClassTypeNode >> nodeVariables [ - ^ #(#implicitClassSection) -] - -{ #category : #generated } -DelphiClassTypeNode >> sections [ - ^ sections -] - -{ #category : #generated } -DelphiClassTypeNode >> sections: anOrderedCollection [ - self setParents: self sections to: nil. - sections := anOrderedCollection. - self setParents: self sections to: self -] diff --git a/src/SmaCC_Delphi/DelphiClassVarsNode.class.st b/src/SmaCC_Delphi/DelphiClassVarsNode.class.st deleted file mode 100644 index 39afe3477..000000000 --- a/src/SmaCC_Delphi/DelphiClassVarsNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #DelphiClassVarsNode, - #superclass : #DelphiVarsNode, - #instVars : [ - 'classToken' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiClassVarsNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitClassVars: self -] - -{ #category : #generated } -DelphiClassVarsNode >> classToken [ - ^ classToken -] - -{ #category : #generated } -DelphiClassVarsNode >> classToken: aSmaCCToken [ - classToken := aSmaCCToken -] - -{ #category : #generated } -DelphiClassVarsNode >> tokenVariables [ - ^ #(#classToken #varToken) -] diff --git a/src/SmaCC_Delphi/DelphiCodeSectionNode.class.st b/src/SmaCC_Delphi/DelphiCodeSectionNode.class.st deleted file mode 100644 index 940c45047..000000000 --- a/src/SmaCC_Delphi/DelphiCodeSectionNode.class.st +++ /dev/null @@ -1,53 +0,0 @@ -Class { - #name : #DelphiCodeSectionNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'statements', - 'semicolons' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiCodeSectionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitCodeSection: self -] - -{ #category : #generated } -DelphiCodeSectionNode >> compositeNodeVariables [ - ^ #(#statements) -] - -{ #category : #generated } -DelphiCodeSectionNode >> ignoredCompositeTokenVariables [ - ^ #(#semicolons) -] - -{ #category : #'generated-initialize-release' } -DelphiCodeSectionNode >> initialize [ - super initialize. - statements := OrderedCollection new: 2. - semicolons := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiCodeSectionNode >> semicolons [ - ^ semicolons -] - -{ #category : #generated } -DelphiCodeSectionNode >> semicolons: anOrderedCollection [ - semicolons := anOrderedCollection -] - -{ #category : #generated } -DelphiCodeSectionNode >> statements [ - ^ statements -] - -{ #category : #generated } -DelphiCodeSectionNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] diff --git a/src/SmaCC_Delphi/DelphiCommentParser.class.st b/src/SmaCC_Delphi/DelphiCommentParser.class.st deleted file mode 100644 index d3c5c9e80..000000000 --- a/src/SmaCC_Delphi/DelphiCommentParser.class.st +++ /dev/null @@ -1,14 +0,0 @@ -Class { - #name : #DelphiCommentParser, - #superclass : #DelphiParser, - #category : #'SmaCC_Delphi' -} - -{ #category : #public } -DelphiCommentParser >> parse [ - | node | - [ scanner next ids first = self emptySymbolTokenId ] whileFalse. - node := SmaCCParseNode new. - node comments: scanner comments. - ^ node -] diff --git a/src/SmaCC_Delphi/DelphiConstantArrayExpressionNode.class.st b/src/SmaCC_Delphi/DelphiConstantArrayExpressionNode.class.st deleted file mode 100644 index 6270809a3..000000000 --- a/src/SmaCC_Delphi/DelphiConstantArrayExpressionNode.class.st +++ /dev/null @@ -1,111 +0,0 @@ -Class { - #name : #DelphiConstantArrayExpressionNode, - #superclass : #DelphiExpressionNode, - #instVars : [ - 'left', - 'expressions', - 'equalTokens', - 'values', - 'commas', - 'right' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiConstantArrayExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitConstantArrayExpression: self -] - -{ #category : #generated } -DelphiConstantArrayExpressionNode >> commas [ - ^ commas -] - -{ #category : #generated } -DelphiConstantArrayExpressionNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -DelphiConstantArrayExpressionNode >> compositeNodeVariables [ - ^ #(#expressions #values) -] - -{ #category : #generated } -DelphiConstantArrayExpressionNode >> compositeTokenVariables [ - ^ #(#equalTokens) -] - -{ #category : #generated } -DelphiConstantArrayExpressionNode >> equalTokens [ - ^ equalTokens -] - -{ #category : #generated } -DelphiConstantArrayExpressionNode >> equalTokens: anOrderedCollection [ - equalTokens := anOrderedCollection -] - -{ #category : #generated } -DelphiConstantArrayExpressionNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -DelphiConstantArrayExpressionNode >> expressions: anOrderedCollection [ - self setParents: self expressions to: nil. - expressions := anOrderedCollection. - self setParents: self expressions to: self -] - -{ #category : #generated } -DelphiConstantArrayExpressionNode >> ignoredCompositeTokenVariables [ - ^ #(#commas #leftParens #rightParens) -] - -{ #category : #'generated-initialize-release' } -DelphiConstantArrayExpressionNode >> initialize [ - super initialize. - expressions := OrderedCollection new: 2. - equalTokens := OrderedCollection new: 2. - values := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiConstantArrayExpressionNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiConstantArrayExpressionNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -DelphiConstantArrayExpressionNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiConstantArrayExpressionNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiConstantArrayExpressionNode >> tokenVariables [ - ^ #(#left #right) -] - -{ #category : #generated } -DelphiConstantArrayExpressionNode >> values [ - ^ values -] - -{ #category : #generated } -DelphiConstantArrayExpressionNode >> values: anOrderedCollection [ - self setParents: self values to: nil. - values := anOrderedCollection. - self setParents: self values to: self -] diff --git a/src/SmaCC_Delphi/DelphiConstantDefinitionNode.class.st b/src/SmaCC_Delphi/DelphiConstantDefinitionNode.class.st deleted file mode 100644 index 7d18a6098..000000000 --- a/src/SmaCC_Delphi/DelphiConstantDefinitionNode.class.st +++ /dev/null @@ -1,123 +0,0 @@ -Class { - #name : #DelphiConstantDefinitionNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'name', - 'colon', - 'type', - 'equalToken', - 'expression', - 'modifier', - 'deprecatedToken', - 'semicolon' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiConstantDefinitionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitConstantDefinition: self -] - -{ #category : #generated } -DelphiConstantDefinitionNode >> colon [ - ^ colon -] - -{ #category : #generated } -DelphiConstantDefinitionNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -DelphiConstantDefinitionNode >> deprecatedToken [ - ^ deprecatedToken -] - -{ #category : #generated } -DelphiConstantDefinitionNode >> deprecatedToken: aSmaCCToken [ - deprecatedToken := aSmaCCToken -] - -{ #category : #generated } -DelphiConstantDefinitionNode >> equalToken [ - ^ equalToken -] - -{ #category : #generated } -DelphiConstantDefinitionNode >> equalToken: aSmaCCToken [ - equalToken := aSmaCCToken -] - -{ #category : #generated } -DelphiConstantDefinitionNode >> expression [ - ^ expression -] - -{ #category : #generated } -DelphiConstantDefinitionNode >> expression: aDelphiExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aDelphiExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -DelphiConstantDefinitionNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -DelphiConstantDefinitionNode >> modifier [ - ^ modifier -] - -{ #category : #generated } -DelphiConstantDefinitionNode >> modifier: aSmaCCToken [ - modifier := aSmaCCToken -] - -{ #category : #generated } -DelphiConstantDefinitionNode >> name [ - ^ name -] - -{ #category : #generated } -DelphiConstantDefinitionNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -DelphiConstantDefinitionNode >> nodeVariables [ - ^ #(#type #expression) -] - -{ #category : #generated } -DelphiConstantDefinitionNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -DelphiConstantDefinitionNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -DelphiConstantDefinitionNode >> tokenVariables [ - ^ #(#name #colon #equalToken #modifier #deprecatedToken) -] - -{ #category : #generated } -DelphiConstantDefinitionNode >> type [ - ^ type -] - -{ #category : #generated } -DelphiConstantDefinitionNode >> type: aDelphiProgramNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aDelphiProgramNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_Delphi/DelphiConstantListNode.class.st b/src/SmaCC_Delphi/DelphiConstantListNode.class.st deleted file mode 100644 index 1bd3894bb..000000000 --- a/src/SmaCC_Delphi/DelphiConstantListNode.class.st +++ /dev/null @@ -1,52 +0,0 @@ -Class { - #name : #DelphiConstantListNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'constToken', - 'definitions' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiConstantListNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitConstantList: self -] - -{ #category : #generated } -DelphiConstantListNode >> compositeNodeVariables [ - ^ #(#definitions) -] - -{ #category : #generated } -DelphiConstantListNode >> constToken [ - ^ constToken -] - -{ #category : #generated } -DelphiConstantListNode >> constToken: aSmaCCToken [ - constToken := aSmaCCToken -] - -{ #category : #generated } -DelphiConstantListNode >> definitions [ - ^ definitions -] - -{ #category : #generated } -DelphiConstantListNode >> definitions: anOrderedCollection [ - self setParents: self definitions to: nil. - definitions := anOrderedCollection. - self setParents: self definitions to: self -] - -{ #category : #'generated-initialize-release' } -DelphiConstantListNode >> initialize [ - super initialize. - definitions := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiConstantListNode >> tokenVariables [ - ^ #(#constToken) -] diff --git a/src/SmaCC_Delphi/DelphiConstantRecordFieldNode.class.st b/src/SmaCC_Delphi/DelphiConstantRecordFieldNode.class.st deleted file mode 100644 index a4f2030a4..000000000 --- a/src/SmaCC_Delphi/DelphiConstantRecordFieldNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #DelphiConstantRecordFieldNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'name', - 'colon', - 'expression' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiConstantRecordFieldNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitConstantRecordField: self -] - -{ #category : #generated } -DelphiConstantRecordFieldNode >> colon [ - ^ colon -] - -{ #category : #generated } -DelphiConstantRecordFieldNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -DelphiConstantRecordFieldNode >> expression [ - ^ expression -] - -{ #category : #generated } -DelphiConstantRecordFieldNode >> expression: aDelphiExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aDelphiExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -DelphiConstantRecordFieldNode >> name [ - ^ name -] - -{ #category : #generated } -DelphiConstantRecordFieldNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -DelphiConstantRecordFieldNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -DelphiConstantRecordFieldNode >> tokenVariables [ - ^ #(#name #colon) -] diff --git a/src/SmaCC_Delphi/DelphiConstructorDefinitionNode.class.st b/src/SmaCC_Delphi/DelphiConstructorDefinitionNode.class.st deleted file mode 100644 index 7f7c2e4b4..000000000 --- a/src/SmaCC_Delphi/DelphiConstructorDefinitionNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #DelphiConstructorDefinitionNode, - #superclass : #DelphiMethodDefinitionNode, - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiConstructorDefinitionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitConstructorDefinition: self -] diff --git a/src/SmaCC_Delphi/DelphiConstructorHeaderNode.class.st b/src/SmaCC_Delphi/DelphiConstructorHeaderNode.class.st deleted file mode 100644 index 1ba284be7..000000000 --- a/src/SmaCC_Delphi/DelphiConstructorHeaderNode.class.st +++ /dev/null @@ -1,69 +0,0 @@ -Class { - #name : #DelphiConstructorHeaderNode, - #superclass : #DelphiMethodHeaderNode, - #instVars : [ - 'constructorToken', - 'arguments', - 'semicolons' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiConstructorHeaderNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitConstructorHeader: self -] - -{ #category : #generated } -DelphiConstructorHeaderNode >> arguments [ - ^ arguments -] - -{ #category : #generated } -DelphiConstructorHeaderNode >> arguments: anOrderedCollection [ - self setParents: self arguments to: nil. - arguments := anOrderedCollection. - self setParents: self arguments to: self -] - -{ #category : #generated } -DelphiConstructorHeaderNode >> compositeNodeVariables [ - ^ #(#arguments #modifiers) -] - -{ #category : #generated } -DelphiConstructorHeaderNode >> constructorToken [ - ^ constructorToken -] - -{ #category : #generated } -DelphiConstructorHeaderNode >> constructorToken: aSmaCCToken [ - constructorToken := aSmaCCToken -] - -{ #category : #generated } -DelphiConstructorHeaderNode >> ignoredCompositeTokenVariables [ - ^ #(#semicolons) -] - -{ #category : #'generated-initialize-release' } -DelphiConstructorHeaderNode >> initialize [ - super initialize. - arguments := OrderedCollection new: 2. - semicolons := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiConstructorHeaderNode >> semicolons [ - ^ semicolons -] - -{ #category : #generated } -DelphiConstructorHeaderNode >> semicolons: anOrderedCollection [ - semicolons := anOrderedCollection -] - -{ #category : #generated } -DelphiConstructorHeaderNode >> tokenVariables [ - ^ #(#constructorToken #left #right) -] diff --git a/src/SmaCC_Delphi/DelphiDefinedTypeListNode.class.st b/src/SmaCC_Delphi/DelphiDefinedTypeListNode.class.st deleted file mode 100644 index 019723aaa..000000000 --- a/src/SmaCC_Delphi/DelphiDefinedTypeListNode.class.st +++ /dev/null @@ -1,52 +0,0 @@ -Class { - #name : #DelphiDefinedTypeListNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'typeToken', - 'definitions' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiDefinedTypeListNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitDefinedTypeList: self -] - -{ #category : #generated } -DelphiDefinedTypeListNode >> compositeNodeVariables [ - ^ #(#definitions) -] - -{ #category : #generated } -DelphiDefinedTypeListNode >> definitions [ - ^ definitions -] - -{ #category : #generated } -DelphiDefinedTypeListNode >> definitions: anOrderedCollection [ - self setParents: self definitions to: nil. - definitions := anOrderedCollection. - self setParents: self definitions to: self -] - -{ #category : #'generated-initialize-release' } -DelphiDefinedTypeListNode >> initialize [ - super initialize. - definitions := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiDefinedTypeListNode >> tokenVariables [ - ^ #(#typeToken) -] - -{ #category : #generated } -DelphiDefinedTypeListNode >> typeToken [ - ^ typeToken -] - -{ #category : #generated } -DelphiDefinedTypeListNode >> typeToken: aSmaCCToken [ - typeToken := aSmaCCToken -] diff --git a/src/SmaCC_Delphi/DelphiDestructorDefinitionNode.class.st b/src/SmaCC_Delphi/DelphiDestructorDefinitionNode.class.st deleted file mode 100644 index 1b2f4c81a..000000000 --- a/src/SmaCC_Delphi/DelphiDestructorDefinitionNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #DelphiDestructorDefinitionNode, - #superclass : #DelphiMethodDefinitionNode, - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiDestructorDefinitionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitDestructorDefinition: self -] diff --git a/src/SmaCC_Delphi/DelphiDestructorHeaderNode.class.st b/src/SmaCC_Delphi/DelphiDestructorHeaderNode.class.st deleted file mode 100644 index 0b74a0b42..000000000 --- a/src/SmaCC_Delphi/DelphiDestructorHeaderNode.class.st +++ /dev/null @@ -1,44 +0,0 @@ -Class { - #name : #DelphiDestructorHeaderNode, - #superclass : #DelphiMethodHeaderNode, - #instVars : [ - 'destructorToken', - 'semicolon' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiDestructorHeaderNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitDestructorHeader: self -] - -{ #category : #generated } -DelphiDestructorHeaderNode >> destructorToken [ - ^ destructorToken -] - -{ #category : #generated } -DelphiDestructorHeaderNode >> destructorToken: aSmaCCToken [ - destructorToken := aSmaCCToken -] - -{ #category : #generated } -DelphiDestructorHeaderNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -DelphiDestructorHeaderNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -DelphiDestructorHeaderNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -DelphiDestructorHeaderNode >> tokenVariables [ - ^ #(#destructorToken #left #right) -] diff --git a/src/SmaCC_Delphi/DelphiEmptyStatementNode.class.st b/src/SmaCC_Delphi/DelphiEmptyStatementNode.class.st deleted file mode 100644 index dca83032a..000000000 --- a/src/SmaCC_Delphi/DelphiEmptyStatementNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #DelphiEmptyStatementNode, - #superclass : #DelphiStatementNode, - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiEmptyStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitEmptyStatement: self -] diff --git a/src/SmaCC_Delphi/DelphiEnumNameNode.class.st b/src/SmaCC_Delphi/DelphiEnumNameNode.class.st deleted file mode 100644 index 1f19798de..000000000 --- a/src/SmaCC_Delphi/DelphiEnumNameNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #DelphiEnumNameNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'name', - 'equal', - 'value' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiEnumNameNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitEnumName: self -] - -{ #category : #generated } -DelphiEnumNameNode >> equal [ - ^ equal -] - -{ #category : #generated } -DelphiEnumNameNode >> equal: aSmaCCToken [ - equal := aSmaCCToken -] - -{ #category : #generated } -DelphiEnumNameNode >> name [ - ^ name -] - -{ #category : #generated } -DelphiEnumNameNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -DelphiEnumNameNode >> nodeVariables [ - ^ #(#value) -] - -{ #category : #generated } -DelphiEnumNameNode >> tokenVariables [ - ^ #(#name #equal) -] - -{ #category : #generated } -DelphiEnumNameNode >> value [ - ^ value -] - -{ #category : #generated } -DelphiEnumNameNode >> value: aDelphiExpressionNode [ - self value notNil - ifTrue: [ self value parent: nil ]. - value := aDelphiExpressionNode. - self value notNil - ifTrue: [ self value parent: self ] -] diff --git a/src/SmaCC_Delphi/DelphiEnumTypeNode.class.st b/src/SmaCC_Delphi/DelphiEnumTypeNode.class.st deleted file mode 100644 index a89d766c3..000000000 --- a/src/SmaCC_Delphi/DelphiEnumTypeNode.class.st +++ /dev/null @@ -1,80 +0,0 @@ -Class { - #name : #DelphiEnumTypeNode, - #superclass : #DelphiTypeNode, - #instVars : [ - 'left', - 'names', - 'commas', - 'right' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiEnumTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitEnumType: self -] - -{ #category : #generated } -DelphiEnumTypeNode >> commas [ - ^ commas -] - -{ #category : #generated } -DelphiEnumTypeNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -DelphiEnumTypeNode >> compositeNodeVariables [ - ^ #(#names) -] - -{ #category : #generated } -DelphiEnumTypeNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #'generated-initialize-release' } -DelphiEnumTypeNode >> initialize [ - super initialize. - names := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiEnumTypeNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiEnumTypeNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -DelphiEnumTypeNode >> names [ - ^ names -] - -{ #category : #generated } -DelphiEnumTypeNode >> names: anOrderedCollection [ - self setParents: self names to: nil. - names := anOrderedCollection. - self setParents: self names to: self -] - -{ #category : #generated } -DelphiEnumTypeNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiEnumTypeNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiEnumTypeNode >> tokenVariables [ - ^ #(#left #right) -] diff --git a/src/SmaCC_Delphi/DelphiExceptElseNode.class.st b/src/SmaCC_Delphi/DelphiExceptElseNode.class.st deleted file mode 100644 index 14d671800..000000000 --- a/src/SmaCC_Delphi/DelphiExceptElseNode.class.st +++ /dev/null @@ -1,69 +0,0 @@ -Class { - #name : #DelphiExceptElseNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'elseToken', - 'statements', - 'semicolons' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiExceptElseNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitExceptElse: self -] - -{ #category : #generated } -DelphiExceptElseNode >> compositeNodeVariables [ - ^ #(#statements) -] - -{ #category : #generated } -DelphiExceptElseNode >> elseToken [ - ^ elseToken -] - -{ #category : #generated } -DelphiExceptElseNode >> elseToken: aSmaCCToken [ - elseToken := aSmaCCToken -] - -{ #category : #generated } -DelphiExceptElseNode >> ignoredCompositeTokenVariables [ - ^ #(#semicolons) -] - -{ #category : #'generated-initialize-release' } -DelphiExceptElseNode >> initialize [ - super initialize. - statements := OrderedCollection new: 2. - semicolons := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiExceptElseNode >> semicolons [ - ^ semicolons -] - -{ #category : #generated } -DelphiExceptElseNode >> semicolons: anOrderedCollection [ - semicolons := anOrderedCollection -] - -{ #category : #generated } -DelphiExceptElseNode >> statements [ - ^ statements -] - -{ #category : #generated } -DelphiExceptElseNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] - -{ #category : #generated } -DelphiExceptElseNode >> tokenVariables [ - ^ #(#elseToken) -] diff --git a/src/SmaCC_Delphi/DelphiExceptNode.class.st b/src/SmaCC_Delphi/DelphiExceptNode.class.st deleted file mode 100644 index 2d55c2ff3..000000000 --- a/src/SmaCC_Delphi/DelphiExceptNode.class.st +++ /dev/null @@ -1,103 +0,0 @@ -Class { - #name : #DelphiExceptNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'exceptToken', - 'exceptionCases', - 'else', - 'statements', - 'semicolons' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiExceptNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitExcept: self -] - -{ #category : #generated } -DelphiExceptNode >> compositeNodeVariables [ - ^ #(#exceptionCases #statements) -] - -{ #category : #generated } -DelphiExceptNode >> else [ - ^ else -] - -{ #category : #generated } -DelphiExceptNode >> else: aDelphiExceptElseNode [ - self else notNil - ifTrue: [ self else parent: nil ]. - else := aDelphiExceptElseNode. - self else notNil - ifTrue: [ self else parent: self ] -] - -{ #category : #generated } -DelphiExceptNode >> exceptToken [ - ^ exceptToken -] - -{ #category : #generated } -DelphiExceptNode >> exceptToken: aSmaCCToken [ - exceptToken := aSmaCCToken -] - -{ #category : #generated } -DelphiExceptNode >> exceptionCases [ - ^ exceptionCases -] - -{ #category : #generated } -DelphiExceptNode >> exceptionCases: anOrderedCollection [ - self setParents: self exceptionCases to: nil. - exceptionCases := anOrderedCollection. - self setParents: self exceptionCases to: self -] - -{ #category : #generated } -DelphiExceptNode >> ignoredCompositeTokenVariables [ - ^ #(#semicolons) -] - -{ #category : #'generated-initialize-release' } -DelphiExceptNode >> initialize [ - super initialize. - exceptionCases := OrderedCollection new: 2. - statements := OrderedCollection new: 2. - semicolons := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiExceptNode >> nodeVariables [ - ^ #(#else) -] - -{ #category : #generated } -DelphiExceptNode >> semicolons [ - ^ semicolons -] - -{ #category : #generated } -DelphiExceptNode >> semicolons: anOrderedCollection [ - semicolons := anOrderedCollection -] - -{ #category : #generated } -DelphiExceptNode >> statements [ - ^ statements -] - -{ #category : #generated } -DelphiExceptNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] - -{ #category : #generated } -DelphiExceptNode >> tokenVariables [ - ^ #(#exceptToken) -] diff --git a/src/SmaCC_Delphi/DelphiExpressionNode.class.st b/src/SmaCC_Delphi/DelphiExpressionNode.class.st deleted file mode 100644 index eab705088..000000000 --- a/src/SmaCC_Delphi/DelphiExpressionNode.class.st +++ /dev/null @@ -1,46 +0,0 @@ -Class { - #name : #DelphiExpressionNode, - #superclass : #DelphiStatementNode, - #instVars : [ - 'leftParens', - 'rightParens' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitExpression: self -] - -{ #category : #generated } -DelphiExpressionNode >> ignoredCompositeTokenVariables [ - ^ #(#leftParens #rightParens) -] - -{ #category : #'generated-initialize-release' } -DelphiExpressionNode >> initialize [ - super initialize. - leftParens := OrderedCollection new: 2. - rightParens := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiExpressionNode >> leftParens [ - ^ leftParens -] - -{ #category : #generated } -DelphiExpressionNode >> leftParens: anOrderedCollection [ - leftParens := anOrderedCollection -] - -{ #category : #generated } -DelphiExpressionNode >> rightParens [ - ^ rightParens -] - -{ #category : #generated } -DelphiExpressionNode >> rightParens: anOrderedCollection [ - rightParens := anOrderedCollection -] diff --git a/src/SmaCC_Delphi/DelphiExpressionSetTypeNode.class.st b/src/SmaCC_Delphi/DelphiExpressionSetTypeNode.class.st deleted file mode 100644 index 408bd51cb..000000000 --- a/src/SmaCC_Delphi/DelphiExpressionSetTypeNode.class.st +++ /dev/null @@ -1,32 +0,0 @@ -Class { - #name : #DelphiExpressionSetTypeNode, - #superclass : #DelphiSetTypeNode, - #instVars : [ - 'setValue' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiExpressionSetTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitExpressionSetType: self -] - -{ #category : #generated } -DelphiExpressionSetTypeNode >> nodeVariables [ - ^ #(#setValue) -] - -{ #category : #generated } -DelphiExpressionSetTypeNode >> setValue [ - ^ setValue -] - -{ #category : #generated } -DelphiExpressionSetTypeNode >> setValue: aDelphiExpressionNode [ - self setValue notNil - ifTrue: [ self setValue parent: nil ]. - setValue := aDelphiExpressionNode. - self setValue notNil - ifTrue: [ self setValue parent: self ] -] diff --git a/src/SmaCC_Delphi/DelphiExternalMethodModifierNode.class.st b/src/SmaCC_Delphi/DelphiExternalMethodModifierNode.class.st deleted file mode 100644 index 3417754eb..000000000 --- a/src/SmaCC_Delphi/DelphiExternalMethodModifierNode.class.st +++ /dev/null @@ -1,50 +0,0 @@ -Class { - #name : #DelphiExternalMethodModifierNode, - #superclass : #DelphiMethodModifierNode, - #instVars : [ - 'library', - 'nameToken', - 'methodName' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiExternalMethodModifierNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitExternalMethodModifier: self -] - -{ #category : #generated } -DelphiExternalMethodModifierNode >> library [ - ^ library -] - -{ #category : #generated } -DelphiExternalMethodModifierNode >> library: aSmaCCToken [ - library := aSmaCCToken -] - -{ #category : #generated } -DelphiExternalMethodModifierNode >> methodName [ - ^ methodName -] - -{ #category : #generated } -DelphiExternalMethodModifierNode >> methodName: aSmaCCToken [ - methodName := aSmaCCToken -] - -{ #category : #generated } -DelphiExternalMethodModifierNode >> nameToken [ - ^ nameToken -] - -{ #category : #generated } -DelphiExternalMethodModifierNode >> nameToken: aSmaCCToken [ - nameToken := aSmaCCToken -] - -{ #category : #generated } -DelphiExternalMethodModifierNode >> tokenVariables [ - ^ #(#library #nameToken #methodName #modifier) -] diff --git a/src/SmaCC_Delphi/DelphiFileTypeNode.class.st b/src/SmaCC_Delphi/DelphiFileTypeNode.class.st deleted file mode 100644 index 0e46da788..000000000 --- a/src/SmaCC_Delphi/DelphiFileTypeNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #DelphiFileTypeNode, - #superclass : #DelphiTypeNode, - #instVars : [ - 'fileToken', - 'ofToken', - 'type' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiFileTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitFileType: self -] - -{ #category : #generated } -DelphiFileTypeNode >> fileToken [ - ^ fileToken -] - -{ #category : #generated } -DelphiFileTypeNode >> fileToken: aSmaCCToken [ - fileToken := aSmaCCToken -] - -{ #category : #generated } -DelphiFileTypeNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -DelphiFileTypeNode >> ofToken [ - ^ ofToken -] - -{ #category : #generated } -DelphiFileTypeNode >> ofToken: aSmaCCToken [ - ofToken := aSmaCCToken -] - -{ #category : #generated } -DelphiFileTypeNode >> tokenVariables [ - ^ #(#fileToken #ofToken) -] - -{ #category : #generated } -DelphiFileTypeNode >> type [ - ^ type -] - -{ #category : #generated } -DelphiFileTypeNode >> type: aDelphiProgramNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aDelphiProgramNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_Delphi/DelphiFinalizationSectionNode.class.st b/src/SmaCC_Delphi/DelphiFinalizationSectionNode.class.st deleted file mode 100644 index b0ecdcbe0..000000000 --- a/src/SmaCC_Delphi/DelphiFinalizationSectionNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #DelphiFinalizationSectionNode, - #superclass : #DelphiCodeSectionNode, - #instVars : [ - 'finalizationToken' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiFinalizationSectionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitFinalizationSection: self -] - -{ #category : #generated } -DelphiFinalizationSectionNode >> finalizationToken [ - ^ finalizationToken -] - -{ #category : #generated } -DelphiFinalizationSectionNode >> finalizationToken: aSmaCCToken [ - finalizationToken := aSmaCCToken -] - -{ #category : #generated } -DelphiFinalizationSectionNode >> tokenVariables [ - ^ #(#finalizationToken) -] diff --git a/src/SmaCC_Delphi/DelphiFinallyNode.class.st b/src/SmaCC_Delphi/DelphiFinallyNode.class.st deleted file mode 100644 index a475e70f2..000000000 --- a/src/SmaCC_Delphi/DelphiFinallyNode.class.st +++ /dev/null @@ -1,69 +0,0 @@ -Class { - #name : #DelphiFinallyNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'finallyToken', - 'statements', - 'semicolons' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiFinallyNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitFinally: self -] - -{ #category : #generated } -DelphiFinallyNode >> compositeNodeVariables [ - ^ #(#statements) -] - -{ #category : #generated } -DelphiFinallyNode >> finallyToken [ - ^ finallyToken -] - -{ #category : #generated } -DelphiFinallyNode >> finallyToken: aSmaCCToken [ - finallyToken := aSmaCCToken -] - -{ #category : #generated } -DelphiFinallyNode >> ignoredCompositeTokenVariables [ - ^ #(#semicolons) -] - -{ #category : #'generated-initialize-release' } -DelphiFinallyNode >> initialize [ - super initialize. - statements := OrderedCollection new: 2. - semicolons := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiFinallyNode >> semicolons [ - ^ semicolons -] - -{ #category : #generated } -DelphiFinallyNode >> semicolons: anOrderedCollection [ - semicolons := anOrderedCollection -] - -{ #category : #generated } -DelphiFinallyNode >> statements [ - ^ statements -] - -{ #category : #generated } -DelphiFinallyNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] - -{ #category : #generated } -DelphiFinallyNode >> tokenVariables [ - ^ #(#finallyToken) -] diff --git a/src/SmaCC_Delphi/DelphiForInStatementNode.class.st b/src/SmaCC_Delphi/DelphiForInStatementNode.class.st deleted file mode 100644 index cb885205a..000000000 --- a/src/SmaCC_Delphi/DelphiForInStatementNode.class.st +++ /dev/null @@ -1,100 +0,0 @@ -Class { - #name : #DelphiForInStatementNode, - #superclass : #DelphiStatementNode, - #instVars : [ - 'forToken', - 'variable', - 'inToken', - 'fromExpr', - 'doToken', - 'statement' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiForInStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitForInStatement: self -] - -{ #category : #generated } -DelphiForInStatementNode >> doToken [ - ^ doToken -] - -{ #category : #generated } -DelphiForInStatementNode >> doToken: aSmaCCToken [ - doToken := aSmaCCToken -] - -{ #category : #generated } -DelphiForInStatementNode >> forToken [ - ^ forToken -] - -{ #category : #generated } -DelphiForInStatementNode >> forToken: aSmaCCToken [ - forToken := aSmaCCToken -] - -{ #category : #generated } -DelphiForInStatementNode >> fromExpr [ - ^ fromExpr -] - -{ #category : #generated } -DelphiForInStatementNode >> fromExpr: aDelphiExpressionNode [ - self fromExpr notNil - ifTrue: [ self fromExpr parent: nil ]. - fromExpr := aDelphiExpressionNode. - self fromExpr notNil - ifTrue: [ self fromExpr parent: self ] -] - -{ #category : #generated } -DelphiForInStatementNode >> inToken [ - ^ inToken -] - -{ #category : #generated } -DelphiForInStatementNode >> inToken: aSmaCCToken [ - inToken := aSmaCCToken -] - -{ #category : #generated } -DelphiForInStatementNode >> nodeVariables [ - ^ #(#variable #fromExpr #statement) -] - -{ #category : #generated } -DelphiForInStatementNode >> statement [ - ^ statement -] - -{ #category : #generated } -DelphiForInStatementNode >> statement: aDelphiStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aDelphiStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -DelphiForInStatementNode >> tokenVariables [ - ^ #(#forToken #inToken #doToken) -] - -{ #category : #generated } -DelphiForInStatementNode >> variable [ - ^ variable -] - -{ #category : #generated } -DelphiForInStatementNode >> variable: aDelphiVariableExpressionNode [ - self variable notNil - ifTrue: [ self variable parent: nil ]. - variable := aDelphiVariableExpressionNode. - self variable notNil - ifTrue: [ self variable parent: self ] -] diff --git a/src/SmaCC_Delphi/DelphiForStatementNode.class.st b/src/SmaCC_Delphi/DelphiForStatementNode.class.st deleted file mode 100644 index 250864732..000000000 --- a/src/SmaCC_Delphi/DelphiForStatementNode.class.st +++ /dev/null @@ -1,126 +0,0 @@ -Class { - #name : #DelphiForStatementNode, - #superclass : #DelphiStatementNode, - #instVars : [ - 'forToken', - 'variable', - 'assignmentToken', - 'fromExpr', - 'toToken', - 'toExpr', - 'doToken', - 'statement' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiForStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitForStatement: self -] - -{ #category : #generated } -DelphiForStatementNode >> assignmentToken [ - ^ assignmentToken -] - -{ #category : #generated } -DelphiForStatementNode >> assignmentToken: aSmaCCToken [ - assignmentToken := aSmaCCToken -] - -{ #category : #generated } -DelphiForStatementNode >> doToken [ - ^ doToken -] - -{ #category : #generated } -DelphiForStatementNode >> doToken: aSmaCCToken [ - doToken := aSmaCCToken -] - -{ #category : #generated } -DelphiForStatementNode >> forToken [ - ^ forToken -] - -{ #category : #generated } -DelphiForStatementNode >> forToken: aSmaCCToken [ - forToken := aSmaCCToken -] - -{ #category : #generated } -DelphiForStatementNode >> fromExpr [ - ^ fromExpr -] - -{ #category : #generated } -DelphiForStatementNode >> fromExpr: aDelphiExpressionNode [ - self fromExpr notNil - ifTrue: [ self fromExpr parent: nil ]. - fromExpr := aDelphiExpressionNode. - self fromExpr notNil - ifTrue: [ self fromExpr parent: self ] -] - -{ #category : #generated } -DelphiForStatementNode >> nodeVariables [ - ^ #(#variable #fromExpr #toExpr #statement) -] - -{ #category : #generated } -DelphiForStatementNode >> statement [ - ^ statement -] - -{ #category : #generated } -DelphiForStatementNode >> statement: aDelphiStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aDelphiStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -DelphiForStatementNode >> toExpr [ - ^ toExpr -] - -{ #category : #generated } -DelphiForStatementNode >> toExpr: aDelphiExpressionNode [ - self toExpr notNil - ifTrue: [ self toExpr parent: nil ]. - toExpr := aDelphiExpressionNode. - self toExpr notNil - ifTrue: [ self toExpr parent: self ] -] - -{ #category : #generated } -DelphiForStatementNode >> toToken [ - ^ toToken -] - -{ #category : #generated } -DelphiForStatementNode >> toToken: aSmaCCToken [ - toToken := aSmaCCToken -] - -{ #category : #generated } -DelphiForStatementNode >> tokenVariables [ - ^ #(#forToken #assignmentToken #toToken #doToken) -] - -{ #category : #generated } -DelphiForStatementNode >> variable [ - ^ variable -] - -{ #category : #generated } -DelphiForStatementNode >> variable: aDelphiVariableExpressionNode [ - self variable notNil - ifTrue: [ self variable parent: nil ]. - variable := aDelphiVariableExpressionNode. - self variable notNil - ifTrue: [ self variable parent: self ] -] diff --git a/src/SmaCC_Delphi/DelphiFormattedMethodArgumentNode.class.st b/src/SmaCC_Delphi/DelphiFormattedMethodArgumentNode.class.st deleted file mode 100644 index 2bafb7b68..000000000 --- a/src/SmaCC_Delphi/DelphiFormattedMethodArgumentNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #DelphiFormattedMethodArgumentNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'argument', - 'colon', - 'formatExpression' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiFormattedMethodArgumentNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitFormattedMethodArgument: self -] - -{ #category : #generated } -DelphiFormattedMethodArgumentNode >> argument [ - ^ argument -] - -{ #category : #generated } -DelphiFormattedMethodArgumentNode >> argument: aDelphiProgramNode [ - self argument notNil - ifTrue: [ self argument parent: nil ]. - argument := aDelphiProgramNode. - self argument notNil - ifTrue: [ self argument parent: self ] -] - -{ #category : #generated } -DelphiFormattedMethodArgumentNode >> colon [ - ^ colon -] - -{ #category : #generated } -DelphiFormattedMethodArgumentNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -DelphiFormattedMethodArgumentNode >> formatExpression [ - ^ formatExpression -] - -{ #category : #generated } -DelphiFormattedMethodArgumentNode >> formatExpression: aDelphiExpressionNode [ - self formatExpression notNil - ifTrue: [ self formatExpression parent: nil ]. - formatExpression := aDelphiExpressionNode. - self formatExpression notNil - ifTrue: [ self formatExpression parent: self ] -] - -{ #category : #generated } -DelphiFormattedMethodArgumentNode >> nodeVariables [ - ^ #(#argument #formatExpression) -] - -{ #category : #generated } -DelphiFormattedMethodArgumentNode >> tokenVariables [ - ^ #(#colon) -] diff --git a/src/SmaCC_Delphi/DelphiFunctionDefinitionNode.class.st b/src/SmaCC_Delphi/DelphiFunctionDefinitionNode.class.st deleted file mode 100644 index 672afabb4..000000000 --- a/src/SmaCC_Delphi/DelphiFunctionDefinitionNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #DelphiFunctionDefinitionNode, - #superclass : #DelphiMethodDefinitionNode, - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiFunctionDefinitionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitFunctionDefinition: self -] diff --git a/src/SmaCC_Delphi/DelphiFunctionHeaderNode.class.st b/src/SmaCC_Delphi/DelphiFunctionHeaderNode.class.st deleted file mode 100644 index 5fd1ae0b6..000000000 --- a/src/SmaCC_Delphi/DelphiFunctionHeaderNode.class.st +++ /dev/null @@ -1,100 +0,0 @@ -Class { - #name : #DelphiFunctionHeaderNode, - #superclass : #DelphiMethodHeaderNode, - #instVars : [ - 'functionToken', - 'colon', - 'type', - 'semicolons', - 'arguments' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiFunctionHeaderNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitFunctionHeader: self -] - -{ #category : #generated } -DelphiFunctionHeaderNode >> arguments [ - ^ arguments -] - -{ #category : #generated } -DelphiFunctionHeaderNode >> arguments: anOrderedCollection [ - self setParents: self arguments to: nil. - arguments := anOrderedCollection. - self setParents: self arguments to: self -] - -{ #category : #generated } -DelphiFunctionHeaderNode >> colon [ - ^ colon -] - -{ #category : #generated } -DelphiFunctionHeaderNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -DelphiFunctionHeaderNode >> compositeNodeVariables [ - ^ #(#arguments #modifiers) -] - -{ #category : #generated } -DelphiFunctionHeaderNode >> functionToken [ - ^ functionToken -] - -{ #category : #generated } -DelphiFunctionHeaderNode >> functionToken: aSmaCCToken [ - functionToken := aSmaCCToken -] - -{ #category : #generated } -DelphiFunctionHeaderNode >> ignoredCompositeTokenVariables [ - ^ #(#semicolons) -] - -{ #category : #'generated-initialize-release' } -DelphiFunctionHeaderNode >> initialize [ - super initialize. - arguments := OrderedCollection new: 2. - semicolons := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiFunctionHeaderNode >> nodeVariables [ - ^ #(#type #attribute #qualifiedName) -] - -{ #category : #generated } -DelphiFunctionHeaderNode >> semicolons [ - ^ semicolons -] - -{ #category : #generated } -DelphiFunctionHeaderNode >> semicolons: anOrderedCollection [ - semicolons := anOrderedCollection -] - -{ #category : #generated } -DelphiFunctionHeaderNode >> tokenVariables [ - ^ #(#functionToken #colon #left #right) -] - -{ #category : #generated } -DelphiFunctionHeaderNode >> type [ - ^ type -] - -{ #category : #generated } -DelphiFunctionHeaderNode >> type: aDelphiProgramNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aDelphiProgramNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_Delphi/DelphiGotoStatementNode.class.st b/src/SmaCC_Delphi/DelphiGotoStatementNode.class.st deleted file mode 100644 index a71a4c439..000000000 --- a/src/SmaCC_Delphi/DelphiGotoStatementNode.class.st +++ /dev/null @@ -1,39 +0,0 @@ -Class { - #name : #DelphiGotoStatementNode, - #superclass : #DelphiStatementNode, - #instVars : [ - 'gotoToken', - 'label' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiGotoStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitGotoStatement: self -] - -{ #category : #generated } -DelphiGotoStatementNode >> gotoToken [ - ^ gotoToken -] - -{ #category : #generated } -DelphiGotoStatementNode >> gotoToken: aSmaCCToken [ - gotoToken := aSmaCCToken -] - -{ #category : #generated } -DelphiGotoStatementNode >> label [ - ^ label -] - -{ #category : #generated } -DelphiGotoStatementNode >> label: aSmaCCToken [ - label := aSmaCCToken -] - -{ #category : #generated } -DelphiGotoStatementNode >> tokenVariables [ - ^ #(#gotoToken #label) -] diff --git a/src/SmaCC_Delphi/DelphiGuidNode.class.st b/src/SmaCC_Delphi/DelphiGuidNode.class.st deleted file mode 100644 index 6a9d6b55a..000000000 --- a/src/SmaCC_Delphi/DelphiGuidNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #DelphiGuidNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'left', - 'string', - 'right' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiGuidNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitGuid: self -] - -{ #category : #generated } -DelphiGuidNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiGuidNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -DelphiGuidNode >> nodeVariables [ - ^ #(#string) -] - -{ #category : #generated } -DelphiGuidNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiGuidNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiGuidNode >> string [ - ^ string -] - -{ #category : #generated } -DelphiGuidNode >> string: aDelphiExpressionNode [ - self string notNil - ifTrue: [ self string parent: nil ]. - string := aDelphiExpressionNode. - self string notNil - ifTrue: [ self string parent: self ] -] - -{ #category : #generated } -DelphiGuidNode >> tokenVariables [ - ^ #(#left #right) -] diff --git a/src/SmaCC_Delphi/DelphiIfStatementNode.class.st b/src/SmaCC_Delphi/DelphiIfStatementNode.class.st deleted file mode 100644 index 0eca02d80..000000000 --- a/src/SmaCC_Delphi/DelphiIfStatementNode.class.st +++ /dev/null @@ -1,100 +0,0 @@ -Class { - #name : #DelphiIfStatementNode, - #superclass : #DelphiStatementNode, - #instVars : [ - 'ifToken', - 'expression', - 'thenToken', - 'thenStatement', - 'elseToken', - 'elseStatement' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiIfStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitIfStatement: self -] - -{ #category : #generated } -DelphiIfStatementNode >> elseStatement [ - ^ elseStatement -] - -{ #category : #generated } -DelphiIfStatementNode >> elseStatement: aDelphiStatementNode [ - self elseStatement notNil - ifTrue: [ self elseStatement parent: nil ]. - elseStatement := aDelphiStatementNode. - self elseStatement notNil - ifTrue: [ self elseStatement parent: self ] -] - -{ #category : #generated } -DelphiIfStatementNode >> elseToken [ - ^ elseToken -] - -{ #category : #generated } -DelphiIfStatementNode >> elseToken: aSmaCCToken [ - elseToken := aSmaCCToken -] - -{ #category : #generated } -DelphiIfStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -DelphiIfStatementNode >> expression: aDelphiExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aDelphiExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -DelphiIfStatementNode >> ifToken [ - ^ ifToken -] - -{ #category : #generated } -DelphiIfStatementNode >> ifToken: aSmaCCToken [ - ifToken := aSmaCCToken -] - -{ #category : #generated } -DelphiIfStatementNode >> nodeVariables [ - ^ #(#expression #thenStatement #elseStatement) -] - -{ #category : #generated } -DelphiIfStatementNode >> thenStatement [ - ^ thenStatement -] - -{ #category : #generated } -DelphiIfStatementNode >> thenStatement: aDelphiStatementNode [ - self thenStatement notNil - ifTrue: [ self thenStatement parent: nil ]. - thenStatement := aDelphiStatementNode. - self thenStatement notNil - ifTrue: [ self thenStatement parent: self ] -] - -{ #category : #generated } -DelphiIfStatementNode >> thenToken [ - ^ thenToken -] - -{ #category : #generated } -DelphiIfStatementNode >> thenToken: aSmaCCToken [ - thenToken := aSmaCCToken -] - -{ #category : #generated } -DelphiIfStatementNode >> tokenVariables [ - ^ #(#ifToken #thenToken #elseToken) -] diff --git a/src/SmaCC_Delphi/DelphiImplementationCodeNode.class.st b/src/SmaCC_Delphi/DelphiImplementationCodeNode.class.st deleted file mode 100644 index e412680d1..000000000 --- a/src/SmaCC_Delphi/DelphiImplementationCodeNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #DelphiImplementationCodeNode, - #superclass : #DelphiCodeSectionNode, - #instVars : [ - 'beginToken' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiImplementationCodeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitImplementationCode: self -] - -{ #category : #generated } -DelphiImplementationCodeNode >> beginToken [ - ^ beginToken -] - -{ #category : #generated } -DelphiImplementationCodeNode >> beginToken: aSmaCCToken [ - beginToken := aSmaCCToken -] - -{ #category : #generated } -DelphiImplementationCodeNode >> tokenVariables [ - ^ #(#beginToken) -] diff --git a/src/SmaCC_Delphi/DelphiImplementationSectionNode.class.st b/src/SmaCC_Delphi/DelphiImplementationSectionNode.class.st deleted file mode 100644 index a6234c342..000000000 --- a/src/SmaCC_Delphi/DelphiImplementationSectionNode.class.st +++ /dev/null @@ -1,159 +0,0 @@ -Class { - #name : #DelphiImplementationSectionNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'implementationToken', - 'usesToken', - 'moduleNames', - 'inTokens', - 'filenames', - 'commas', - 'semicolon', - 'definitions', - 'code' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiImplementationSectionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitImplementationSection: self -] - -{ #category : #generated } -DelphiImplementationSectionNode >> code [ - ^ code -] - -{ #category : #generated } -DelphiImplementationSectionNode >> code: aDelphiImplementationCodeNode [ - self code notNil - ifTrue: [ self code parent: nil ]. - code := aDelphiImplementationCodeNode. - self code notNil - ifTrue: [ self code parent: self ] -] - -{ #category : #generated } -DelphiImplementationSectionNode >> commas [ - ^ commas -] - -{ #category : #generated } -DelphiImplementationSectionNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -DelphiImplementationSectionNode >> compositeNodeVariables [ - ^ #(#moduleNames #definitions) -] - -{ #category : #generated } -DelphiImplementationSectionNode >> compositeTokenVariables [ - ^ #(#inTokens #filenames) -] - -{ #category : #generated } -DelphiImplementationSectionNode >> definitions [ - ^ definitions -] - -{ #category : #generated } -DelphiImplementationSectionNode >> definitions: anOrderedCollection [ - self setParents: self definitions to: nil. - definitions := anOrderedCollection. - self setParents: self definitions to: self -] - -{ #category : #generated } -DelphiImplementationSectionNode >> filenames [ - ^ filenames -] - -{ #category : #generated } -DelphiImplementationSectionNode >> filenames: anOrderedCollection [ - filenames := anOrderedCollection -] - -{ #category : #generated } -DelphiImplementationSectionNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -DelphiImplementationSectionNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -DelphiImplementationSectionNode >> implementationToken [ - ^ implementationToken -] - -{ #category : #generated } -DelphiImplementationSectionNode >> implementationToken: aSmaCCToken [ - implementationToken := aSmaCCToken -] - -{ #category : #generated } -DelphiImplementationSectionNode >> inTokens [ - ^ inTokens -] - -{ #category : #generated } -DelphiImplementationSectionNode >> inTokens: anOrderedCollection [ - inTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -DelphiImplementationSectionNode >> initialize [ - super initialize. - moduleNames := OrderedCollection new: 2. - inTokens := OrderedCollection new: 2. - filenames := OrderedCollection new: 2. - commas := OrderedCollection new: 2. - definitions := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiImplementationSectionNode >> moduleNames [ - ^ moduleNames -] - -{ #category : #generated } -DelphiImplementationSectionNode >> moduleNames: anOrderedCollection [ - self setParents: self moduleNames to: nil. - moduleNames := anOrderedCollection. - self setParents: self moduleNames to: self -] - -{ #category : #generated } -DelphiImplementationSectionNode >> nodeVariables [ - ^ #(#code) -] - -{ #category : #generated } -DelphiImplementationSectionNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -DelphiImplementationSectionNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -DelphiImplementationSectionNode >> tokenVariables [ - ^ #(#implementationToken #usesToken) -] - -{ #category : #generated } -DelphiImplementationSectionNode >> usesToken [ - ^ usesToken -] - -{ #category : #generated } -DelphiImplementationSectionNode >> usesToken: aSmaCCToken [ - usesToken := aSmaCCToken -] diff --git a/src/SmaCC_Delphi/DelphiImplicitClassSectionNode.class.st b/src/SmaCC_Delphi/DelphiImplicitClassSectionNode.class.st deleted file mode 100644 index a71351829..000000000 --- a/src/SmaCC_Delphi/DelphiImplicitClassSectionNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #DelphiImplicitClassSectionNode, - #superclass : #DelphiClassSectionNode, - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiImplicitClassSectionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitImplicitClassSection: self -] diff --git a/src/SmaCC_Delphi/DelphiInheritedFunctionCallNode.class.st b/src/SmaCC_Delphi/DelphiInheritedFunctionCallNode.class.st deleted file mode 100644 index 6a2edbc8f..000000000 --- a/src/SmaCC_Delphi/DelphiInheritedFunctionCallNode.class.st +++ /dev/null @@ -1,102 +0,0 @@ -Class { - #name : #DelphiInheritedFunctionCallNode, - #superclass : #DelphiExpressionNode, - #instVars : [ - 'inheritedToken', - 'name', - 'left', - 'arguments', - 'commas', - 'right' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiInheritedFunctionCallNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitInheritedFunctionCall: self -] - -{ #category : #generated } -DelphiInheritedFunctionCallNode >> arguments [ - ^ arguments -] - -{ #category : #generated } -DelphiInheritedFunctionCallNode >> arguments: anOrderedCollection [ - self setParents: self arguments to: nil. - arguments := anOrderedCollection. - self setParents: self arguments to: self -] - -{ #category : #generated } -DelphiInheritedFunctionCallNode >> commas [ - ^ commas -] - -{ #category : #generated } -DelphiInheritedFunctionCallNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -DelphiInheritedFunctionCallNode >> compositeNodeVariables [ - ^ #(#arguments) -] - -{ #category : #generated } -DelphiInheritedFunctionCallNode >> ignoredCompositeTokenVariables [ - ^ #(#commas #leftParens #rightParens) -] - -{ #category : #generated } -DelphiInheritedFunctionCallNode >> inheritedToken [ - ^ inheritedToken -] - -{ #category : #generated } -DelphiInheritedFunctionCallNode >> inheritedToken: aSmaCCToken [ - inheritedToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -DelphiInheritedFunctionCallNode >> initialize [ - super initialize. - arguments := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiInheritedFunctionCallNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiInheritedFunctionCallNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -DelphiInheritedFunctionCallNode >> name [ - ^ name -] - -{ #category : #generated } -DelphiInheritedFunctionCallNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -DelphiInheritedFunctionCallNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiInheritedFunctionCallNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiInheritedFunctionCallNode >> tokenVariables [ - ^ #(#inheritedToken #name #left #right) -] diff --git a/src/SmaCC_Delphi/DelphiInitializationSectionNode.class.st b/src/SmaCC_Delphi/DelphiInitializationSectionNode.class.st deleted file mode 100644 index 229e9649f..000000000 --- a/src/SmaCC_Delphi/DelphiInitializationSectionNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #DelphiInitializationSectionNode, - #superclass : #DelphiCodeSectionNode, - #instVars : [ - 'initializationToken' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiInitializationSectionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitInitializationSection: self -] - -{ #category : #generated } -DelphiInitializationSectionNode >> initializationToken [ - ^ initializationToken -] - -{ #category : #generated } -DelphiInitializationSectionNode >> initializationToken: aSmaCCToken [ - initializationToken := aSmaCCToken -] - -{ #category : #generated } -DelphiInitializationSectionNode >> tokenVariables [ - ^ #(#initializationToken) -] diff --git a/src/SmaCC_Delphi/DelphiInstantiatedGenericTypeNode.class.st b/src/SmaCC_Delphi/DelphiInstantiatedGenericTypeNode.class.st deleted file mode 100644 index 7be861081..000000000 --- a/src/SmaCC_Delphi/DelphiInstantiatedGenericTypeNode.class.st +++ /dev/null @@ -1,100 +0,0 @@ -Class { - #name : #DelphiInstantiatedGenericTypeNode, - #superclass : #DelphiTypeNode, - #instVars : [ - 'type', - 'left', - 'typeArguments', - 'commas', - 'right' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiInstantiatedGenericTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitInstantiatedGenericType: self -] - -{ #category : #generated } -DelphiInstantiatedGenericTypeNode >> commas [ - ^ commas -] - -{ #category : #generated } -DelphiInstantiatedGenericTypeNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -DelphiInstantiatedGenericTypeNode >> compositeNodeVariables [ - ^ #(#typeArguments) -] - -{ #category : #generated } -DelphiInstantiatedGenericTypeNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #'generated-initialize-release' } -DelphiInstantiatedGenericTypeNode >> initialize [ - super initialize. - typeArguments := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiInstantiatedGenericTypeNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiInstantiatedGenericTypeNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -DelphiInstantiatedGenericTypeNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -DelphiInstantiatedGenericTypeNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiInstantiatedGenericTypeNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiInstantiatedGenericTypeNode >> tokenVariables [ - ^ #(#left #right) -] - -{ #category : #generated } -DelphiInstantiatedGenericTypeNode >> type [ - ^ type -] - -{ #category : #generated } -DelphiInstantiatedGenericTypeNode >> type: aDelphiProgramNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aDelphiProgramNode. - self type notNil - ifTrue: [ self type parent: self ] -] - -{ #category : #generated } -DelphiInstantiatedGenericTypeNode >> typeArguments [ - ^ typeArguments -] - -{ #category : #generated } -DelphiInstantiatedGenericTypeNode >> typeArguments: anOrderedCollection [ - self setParents: self typeArguments to: nil. - typeArguments := anOrderedCollection. - self setParents: self typeArguments to: self -] diff --git a/src/SmaCC_Delphi/DelphiInstantiatedGenericVariableExpressionNode.class.st b/src/SmaCC_Delphi/DelphiInstantiatedGenericVariableExpressionNode.class.st deleted file mode 100644 index 68c84f7d9..000000000 --- a/src/SmaCC_Delphi/DelphiInstantiatedGenericVariableExpressionNode.class.st +++ /dev/null @@ -1,80 +0,0 @@ -Class { - #name : #DelphiInstantiatedGenericVariableExpressionNode, - #superclass : #DelphiVariableExpressionNode, - #instVars : [ - 'left', - 'typeArguments', - 'commas', - 'right' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiInstantiatedGenericVariableExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitInstantiatedGenericVariableExpression: self -] - -{ #category : #generated } -DelphiInstantiatedGenericVariableExpressionNode >> commas [ - ^ commas -] - -{ #category : #generated } -DelphiInstantiatedGenericVariableExpressionNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -DelphiInstantiatedGenericVariableExpressionNode >> compositeNodeVariables [ - ^ #(#typeArguments) -] - -{ #category : #generated } -DelphiInstantiatedGenericVariableExpressionNode >> ignoredCompositeTokenVariables [ - ^ #(#commas #leftParens #rightParens) -] - -{ #category : #'generated-initialize-release' } -DelphiInstantiatedGenericVariableExpressionNode >> initialize [ - super initialize. - typeArguments := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiInstantiatedGenericVariableExpressionNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiInstantiatedGenericVariableExpressionNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -DelphiInstantiatedGenericVariableExpressionNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiInstantiatedGenericVariableExpressionNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiInstantiatedGenericVariableExpressionNode >> tokenVariables [ - ^ #(#left #right #name) -] - -{ #category : #generated } -DelphiInstantiatedGenericVariableExpressionNode >> typeArguments [ - ^ typeArguments -] - -{ #category : #generated } -DelphiInstantiatedGenericVariableExpressionNode >> typeArguments: anOrderedCollection [ - self setParents: self typeArguments to: nil. - typeArguments := anOrderedCollection. - self setParents: self typeArguments to: self -] diff --git a/src/SmaCC_Delphi/DelphiInterfaceFunctionAssignmentNode.class.st b/src/SmaCC_Delphi/DelphiInterfaceFunctionAssignmentNode.class.st deleted file mode 100644 index d9717a511..000000000 --- a/src/SmaCC_Delphi/DelphiInterfaceFunctionAssignmentNode.class.st +++ /dev/null @@ -1,86 +0,0 @@ -Class { - #name : #DelphiInterfaceFunctionAssignmentNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'function', - 'qualifiedName', - 'equalToken', - 'name', - 'semicolon' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiInterfaceFunctionAssignmentNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitInterfaceFunctionAssignment: self -] - -{ #category : #generated } -DelphiInterfaceFunctionAssignmentNode >> equalToken [ - ^ equalToken -] - -{ #category : #generated } -DelphiInterfaceFunctionAssignmentNode >> equalToken: aSmaCCToken [ - equalToken := aSmaCCToken -] - -{ #category : #generated } -DelphiInterfaceFunctionAssignmentNode >> function [ - ^ function -] - -{ #category : #generated } -DelphiInterfaceFunctionAssignmentNode >> function: aSmaCCToken [ - function := aSmaCCToken -] - -{ #category : #generated } -DelphiInterfaceFunctionAssignmentNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -DelphiInterfaceFunctionAssignmentNode >> name [ - ^ name -] - -{ #category : #generated } -DelphiInterfaceFunctionAssignmentNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -DelphiInterfaceFunctionAssignmentNode >> nodeVariables [ - ^ #(#qualifiedName) -] - -{ #category : #generated } -DelphiInterfaceFunctionAssignmentNode >> qualifiedName [ - ^ qualifiedName -] - -{ #category : #generated } -DelphiInterfaceFunctionAssignmentNode >> qualifiedName: aDelphiQualifiedNameNode [ - self qualifiedName notNil - ifTrue: [ self qualifiedName parent: nil ]. - qualifiedName := aDelphiQualifiedNameNode. - self qualifiedName notNil - ifTrue: [ self qualifiedName parent: self ] -] - -{ #category : #generated } -DelphiInterfaceFunctionAssignmentNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -DelphiInterfaceFunctionAssignmentNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -DelphiInterfaceFunctionAssignmentNode >> tokenVariables [ - ^ #(#function #equalToken #name) -] diff --git a/src/SmaCC_Delphi/DelphiInterfaceProcedureAssignmentNode.class.st b/src/SmaCC_Delphi/DelphiInterfaceProcedureAssignmentNode.class.st deleted file mode 100644 index 5590e1792..000000000 --- a/src/SmaCC_Delphi/DelphiInterfaceProcedureAssignmentNode.class.st +++ /dev/null @@ -1,86 +0,0 @@ -Class { - #name : #DelphiInterfaceProcedureAssignmentNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'procedureToken', - 'qualifiedName', - 'equalToken', - 'name', - 'semicolon' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiInterfaceProcedureAssignmentNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitInterfaceProcedureAssignment: self -] - -{ #category : #generated } -DelphiInterfaceProcedureAssignmentNode >> equalToken [ - ^ equalToken -] - -{ #category : #generated } -DelphiInterfaceProcedureAssignmentNode >> equalToken: aSmaCCToken [ - equalToken := aSmaCCToken -] - -{ #category : #generated } -DelphiInterfaceProcedureAssignmentNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -DelphiInterfaceProcedureAssignmentNode >> name [ - ^ name -] - -{ #category : #generated } -DelphiInterfaceProcedureAssignmentNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -DelphiInterfaceProcedureAssignmentNode >> nodeVariables [ - ^ #(#qualifiedName) -] - -{ #category : #generated } -DelphiInterfaceProcedureAssignmentNode >> procedureToken [ - ^ procedureToken -] - -{ #category : #generated } -DelphiInterfaceProcedureAssignmentNode >> procedureToken: aSmaCCToken [ - procedureToken := aSmaCCToken -] - -{ #category : #generated } -DelphiInterfaceProcedureAssignmentNode >> qualifiedName [ - ^ qualifiedName -] - -{ #category : #generated } -DelphiInterfaceProcedureAssignmentNode >> qualifiedName: aDelphiQualifiedNameNode [ - self qualifiedName notNil - ifTrue: [ self qualifiedName parent: nil ]. - qualifiedName := aDelphiQualifiedNameNode. - self qualifiedName notNil - ifTrue: [ self qualifiedName parent: self ] -] - -{ #category : #generated } -DelphiInterfaceProcedureAssignmentNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -DelphiInterfaceProcedureAssignmentNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -DelphiInterfaceProcedureAssignmentNode >> tokenVariables [ - ^ #(#procedureToken #equalToken #name) -] diff --git a/src/SmaCC_Delphi/DelphiInterfaceSectionNode.class.st b/src/SmaCC_Delphi/DelphiInterfaceSectionNode.class.st deleted file mode 100644 index e9b945fe2..000000000 --- a/src/SmaCC_Delphi/DelphiInterfaceSectionNode.class.st +++ /dev/null @@ -1,139 +0,0 @@ -Class { - #name : #DelphiInterfaceSectionNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'interfaceToken', - 'usesToken', - 'moduleNames', - 'inTokens', - 'filenames', - 'commas', - 'semicolon', - 'values' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiInterfaceSectionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitInterfaceSection: self -] - -{ #category : #generated } -DelphiInterfaceSectionNode >> commas [ - ^ commas -] - -{ #category : #generated } -DelphiInterfaceSectionNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -DelphiInterfaceSectionNode >> compositeNodeVariables [ - ^ #(#moduleNames #values) -] - -{ #category : #generated } -DelphiInterfaceSectionNode >> compositeTokenVariables [ - ^ #(#inTokens #filenames) -] - -{ #category : #generated } -DelphiInterfaceSectionNode >> filenames [ - ^ filenames -] - -{ #category : #generated } -DelphiInterfaceSectionNode >> filenames: anOrderedCollection [ - filenames := anOrderedCollection -] - -{ #category : #generated } -DelphiInterfaceSectionNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -DelphiInterfaceSectionNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -DelphiInterfaceSectionNode >> inTokens [ - ^ inTokens -] - -{ #category : #generated } -DelphiInterfaceSectionNode >> inTokens: anOrderedCollection [ - inTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -DelphiInterfaceSectionNode >> initialize [ - super initialize. - moduleNames := OrderedCollection new: 2. - inTokens := OrderedCollection new: 2. - filenames := OrderedCollection new: 2. - commas := OrderedCollection new: 2. - values := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiInterfaceSectionNode >> interfaceToken [ - ^ interfaceToken -] - -{ #category : #generated } -DelphiInterfaceSectionNode >> interfaceToken: aSmaCCToken [ - interfaceToken := aSmaCCToken -] - -{ #category : #generated } -DelphiInterfaceSectionNode >> moduleNames [ - ^ moduleNames -] - -{ #category : #generated } -DelphiInterfaceSectionNode >> moduleNames: anOrderedCollection [ - self setParents: self moduleNames to: nil. - moduleNames := anOrderedCollection. - self setParents: self moduleNames to: self -] - -{ #category : #generated } -DelphiInterfaceSectionNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -DelphiInterfaceSectionNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -DelphiInterfaceSectionNode >> tokenVariables [ - ^ #(#interfaceToken #usesToken) -] - -{ #category : #generated } -DelphiInterfaceSectionNode >> usesToken [ - ^ usesToken -] - -{ #category : #generated } -DelphiInterfaceSectionNode >> usesToken: aSmaCCToken [ - usesToken := aSmaCCToken -] - -{ #category : #generated } -DelphiInterfaceSectionNode >> values [ - ^ values -] - -{ #category : #generated } -DelphiInterfaceSectionNode >> values: anOrderedCollection [ - self setParents: self values to: nil. - values := anOrderedCollection. - self setParents: self values to: self -] diff --git a/src/SmaCC_Delphi/DelphiInterfaceTypeNode.class.st b/src/SmaCC_Delphi/DelphiInterfaceTypeNode.class.st deleted file mode 100644 index 19880835b..000000000 --- a/src/SmaCC_Delphi/DelphiInterfaceTypeNode.class.st +++ /dev/null @@ -1,72 +0,0 @@ -Class { - #name : #DelphiInterfaceTypeNode, - #superclass : #DelphiClassOrInterfaceTypeNode, - #instVars : [ - 'interfaceToken', - 'guid', - 'components' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiInterfaceTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitInterfaceType: self -] - -{ #category : #generated } -DelphiInterfaceTypeNode >> components [ - ^ components -] - -{ #category : #generated } -DelphiInterfaceTypeNode >> components: anOrderedCollection [ - self setParents: self components to: nil. - components := anOrderedCollection. - self setParents: self components to: self -] - -{ #category : #generated } -DelphiInterfaceTypeNode >> compositeNodeVariables [ - ^ #(#components #superclasses) -] - -{ #category : #generated } -DelphiInterfaceTypeNode >> guid [ - ^ guid -] - -{ #category : #generated } -DelphiInterfaceTypeNode >> guid: aDelphiGuidNode [ - self guid notNil - ifTrue: [ self guid parent: nil ]. - guid := aDelphiGuidNode. - self guid notNil - ifTrue: [ self guid parent: self ] -] - -{ #category : #'generated-initialize-release' } -DelphiInterfaceTypeNode >> initialize [ - super initialize. - components := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiInterfaceTypeNode >> interfaceToken [ - ^ interfaceToken -] - -{ #category : #generated } -DelphiInterfaceTypeNode >> interfaceToken: aSmaCCToken [ - interfaceToken := aSmaCCToken -] - -{ #category : #generated } -DelphiInterfaceTypeNode >> nodeVariables [ - ^ #(#guid) -] - -{ #category : #generated } -DelphiInterfaceTypeNode >> tokenVariables [ - ^ #(#interfaceToken #left #right #endToken) -] diff --git a/src/SmaCC_Delphi/DelphiLabelVariableNode.class.st b/src/SmaCC_Delphi/DelphiLabelVariableNode.class.st deleted file mode 100644 index c3423b8cc..000000000 --- a/src/SmaCC_Delphi/DelphiLabelVariableNode.class.st +++ /dev/null @@ -1,83 +0,0 @@ -Class { - #name : #DelphiLabelVariableNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'labelToken', - 'names', - 'commas', - 'semicolon' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiLabelVariableNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitLabelVariable: self -] - -{ #category : #generated } -DelphiLabelVariableNode >> commas [ - ^ commas -] - -{ #category : #generated } -DelphiLabelVariableNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -DelphiLabelVariableNode >> compositeTokenVariables [ - ^ #(#names) -] - -{ #category : #generated } -DelphiLabelVariableNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -DelphiLabelVariableNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #'generated-initialize-release' } -DelphiLabelVariableNode >> initialize [ - super initialize. - names := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiLabelVariableNode >> labelToken [ - ^ labelToken -] - -{ #category : #generated } -DelphiLabelVariableNode >> labelToken: aSmaCCToken [ - labelToken := aSmaCCToken -] - -{ #category : #generated } -DelphiLabelVariableNode >> names [ - ^ names -] - -{ #category : #generated } -DelphiLabelVariableNode >> names: anOrderedCollection [ - names := anOrderedCollection -] - -{ #category : #generated } -DelphiLabelVariableNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -DelphiLabelVariableNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -DelphiLabelVariableNode >> tokenVariables [ - ^ #(#labelToken) -] diff --git a/src/SmaCC_Delphi/DelphiLabeledStatementNode.class.st b/src/SmaCC_Delphi/DelphiLabeledStatementNode.class.st deleted file mode 100644 index 3020968c7..000000000 --- a/src/SmaCC_Delphi/DelphiLabeledStatementNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #DelphiLabeledStatementNode, - #superclass : #DelphiStatementNode, - #instVars : [ - 'label', - 'colon', - 'statement' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiLabeledStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitLabeledStatement: self -] - -{ #category : #generated } -DelphiLabeledStatementNode >> colon [ - ^ colon -] - -{ #category : #generated } -DelphiLabeledStatementNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -DelphiLabeledStatementNode >> label [ - ^ label -] - -{ #category : #generated } -DelphiLabeledStatementNode >> label: aSmaCCToken [ - label := aSmaCCToken -] - -{ #category : #generated } -DelphiLabeledStatementNode >> nodeVariables [ - ^ #(#statement) -] - -{ #category : #generated } -DelphiLabeledStatementNode >> statement [ - ^ statement -] - -{ #category : #generated } -DelphiLabeledStatementNode >> statement: aDelphiStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aDelphiStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -DelphiLabeledStatementNode >> tokenVariables [ - ^ #(#label #colon) -] diff --git a/src/SmaCC_Delphi/DelphiLibraryExportNode.class.st b/src/SmaCC_Delphi/DelphiLibraryExportNode.class.st deleted file mode 100644 index 4971308cb..000000000 --- a/src/SmaCC_Delphi/DelphiLibraryExportNode.class.st +++ /dev/null @@ -1,55 +0,0 @@ -Class { - #name : #DelphiLibraryExportNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'exportsToken', - 'name', - 'semicolon' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiLibraryExportNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitLibraryExport: self -] - -{ #category : #generated } -DelphiLibraryExportNode >> exportsToken [ - ^ exportsToken -] - -{ #category : #generated } -DelphiLibraryExportNode >> exportsToken: aSmaCCToken [ - exportsToken := aSmaCCToken -] - -{ #category : #generated } -DelphiLibraryExportNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -DelphiLibraryExportNode >> name [ - ^ name -] - -{ #category : #generated } -DelphiLibraryExportNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -DelphiLibraryExportNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -DelphiLibraryExportNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -DelphiLibraryExportNode >> tokenVariables [ - ^ #(#exportsToken #name) -] diff --git a/src/SmaCC_Delphi/DelphiLibraryFileNode.class.st b/src/SmaCC_Delphi/DelphiLibraryFileNode.class.st deleted file mode 100644 index ff4d78165..000000000 --- a/src/SmaCC_Delphi/DelphiLibraryFileNode.class.st +++ /dev/null @@ -1,192 +0,0 @@ -Class { - #name : #DelphiLibraryFileNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'libraryToken', - 'libraryName', - 'modifier', - 'semicolons', - 'usesToken', - 'moduleNames', - 'inTokens', - 'filenames', - 'commas', - 'exports', - 'main', - 'period' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiLibraryFileNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitLibraryFile: self -] - -{ #category : #generated } -DelphiLibraryFileNode >> commas [ - ^ commas -] - -{ #category : #generated } -DelphiLibraryFileNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -DelphiLibraryFileNode >> compositeNodeVariables [ - ^ #(#moduleNames #exports) -] - -{ #category : #generated } -DelphiLibraryFileNode >> compositeTokenVariables [ - ^ #(#inTokens #filenames) -] - -{ #category : #generated } -DelphiLibraryFileNode >> exports [ - ^ exports -] - -{ #category : #generated } -DelphiLibraryFileNode >> exports: anOrderedCollection [ - self setParents: self exports to: nil. - exports := anOrderedCollection. - self setParents: self exports to: self -] - -{ #category : #generated } -DelphiLibraryFileNode >> filenames [ - ^ filenames -] - -{ #category : #generated } -DelphiLibraryFileNode >> filenames: anOrderedCollection [ - filenames := anOrderedCollection -] - -{ #category : #generated } -DelphiLibraryFileNode >> ignoredCompositeTokenVariables [ - ^ #(#semicolons #commas) -] - -{ #category : #generated } -DelphiLibraryFileNode >> inTokens [ - ^ inTokens -] - -{ #category : #generated } -DelphiLibraryFileNode >> inTokens: anOrderedCollection [ - inTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -DelphiLibraryFileNode >> initialize [ - super initialize. - semicolons := OrderedCollection new: 2. - moduleNames := OrderedCollection new: 2. - inTokens := OrderedCollection new: 2. - filenames := OrderedCollection new: 2. - commas := OrderedCollection new: 2. - exports := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiLibraryFileNode >> libraryName [ - ^ libraryName -] - -{ #category : #generated } -DelphiLibraryFileNode >> libraryName: aDelphiModuleNameNode [ - self libraryName notNil - ifTrue: [ self libraryName parent: nil ]. - libraryName := aDelphiModuleNameNode. - self libraryName notNil - ifTrue: [ self libraryName parent: self ] -] - -{ #category : #generated } -DelphiLibraryFileNode >> libraryToken [ - ^ libraryToken -] - -{ #category : #generated } -DelphiLibraryFileNode >> libraryToken: aSmaCCToken [ - libraryToken := aSmaCCToken -] - -{ #category : #generated } -DelphiLibraryFileNode >> main [ - ^ main -] - -{ #category : #generated } -DelphiLibraryFileNode >> main: aDelphiMainMethodDefinitionNode [ - self main notNil - ifTrue: [ self main parent: nil ]. - main := aDelphiMainMethodDefinitionNode. - self main notNil - ifTrue: [ self main parent: self ] -] - -{ #category : #generated } -DelphiLibraryFileNode >> modifier [ - ^ modifier -] - -{ #category : #generated } -DelphiLibraryFileNode >> modifier: aSmaCCToken [ - modifier := aSmaCCToken -] - -{ #category : #generated } -DelphiLibraryFileNode >> moduleNames [ - ^ moduleNames -] - -{ #category : #generated } -DelphiLibraryFileNode >> moduleNames: anOrderedCollection [ - self setParents: self moduleNames to: nil. - moduleNames := anOrderedCollection. - self setParents: self moduleNames to: self -] - -{ #category : #generated } -DelphiLibraryFileNode >> nodeVariables [ - ^ #(#libraryName #main) -] - -{ #category : #generated } -DelphiLibraryFileNode >> period [ - ^ period -] - -{ #category : #generated } -DelphiLibraryFileNode >> period: aSmaCCToken [ - period := aSmaCCToken -] - -{ #category : #generated } -DelphiLibraryFileNode >> semicolons [ - ^ semicolons -] - -{ #category : #generated } -DelphiLibraryFileNode >> semicolons: anOrderedCollection [ - semicolons := anOrderedCollection -] - -{ #category : #generated } -DelphiLibraryFileNode >> tokenVariables [ - ^ #(#libraryToken #modifier #usesToken #period) -] - -{ #category : #generated } -DelphiLibraryFileNode >> usesToken [ - ^ usesToken -] - -{ #category : #generated } -DelphiLibraryFileNode >> usesToken: aSmaCCToken [ - usesToken := aSmaCCToken -] diff --git a/src/SmaCC_Delphi/DelphiLiteralExpressionNode.class.st b/src/SmaCC_Delphi/DelphiLiteralExpressionNode.class.st deleted file mode 100644 index b2d2cadd1..000000000 --- a/src/SmaCC_Delphi/DelphiLiteralExpressionNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #DelphiLiteralExpressionNode, - #superclass : #DelphiExpressionNode, - #instVars : [ - 'value' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiLiteralExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitLiteralExpression: self -] - -{ #category : #generated } -DelphiLiteralExpressionNode >> tokenVariables [ - ^ #(#value) -] - -{ #category : #generated } -DelphiLiteralExpressionNode >> value [ - ^ value -] - -{ #category : #generated } -DelphiLiteralExpressionNode >> value: aSmaCCToken [ - value := aSmaCCToken -] diff --git a/src/SmaCC_Delphi/DelphiMainMethodDefinitionNode.class.st b/src/SmaCC_Delphi/DelphiMainMethodDefinitionNode.class.st deleted file mode 100644 index 27461461b..000000000 --- a/src/SmaCC_Delphi/DelphiMainMethodDefinitionNode.class.st +++ /dev/null @@ -1,72 +0,0 @@ -Class { - #name : #DelphiMainMethodDefinitionNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'definitions', - 'block', - 'semicolon' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiMainMethodDefinitionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitMainMethodDefinition: self -] - -{ #category : #generated } -DelphiMainMethodDefinitionNode >> block [ - ^ block -] - -{ #category : #generated } -DelphiMainMethodDefinitionNode >> block: aDelphiStatementNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aDelphiStatementNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -DelphiMainMethodDefinitionNode >> compositeNodeVariables [ - ^ #(#definitions) -] - -{ #category : #generated } -DelphiMainMethodDefinitionNode >> definitions [ - ^ definitions -] - -{ #category : #generated } -DelphiMainMethodDefinitionNode >> definitions: anOrderedCollection [ - self setParents: self definitions to: nil. - definitions := anOrderedCollection. - self setParents: self definitions to: self -] - -{ #category : #generated } -DelphiMainMethodDefinitionNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #'generated-initialize-release' } -DelphiMainMethodDefinitionNode >> initialize [ - super initialize. - definitions := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiMainMethodDefinitionNode >> nodeVariables [ - ^ #(#block) -] - -{ #category : #generated } -DelphiMainMethodDefinitionNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -DelphiMainMethodDefinitionNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] diff --git a/src/SmaCC_Delphi/DelphiMemExpressionNode.class.st b/src/SmaCC_Delphi/DelphiMemExpressionNode.class.st deleted file mode 100644 index 594c0981e..000000000 --- a/src/SmaCC_Delphi/DelphiMemExpressionNode.class.st +++ /dev/null @@ -1,96 +0,0 @@ -Class { - #name : #DelphiMemExpressionNode, - #superclass : #DelphiExpressionNode, - #instVars : [ - 'mem', - 'leftBrace', - 'baseExpression', - 'colon', - 'addressExpression', - 'rightBrace' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiMemExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitMemExpression: self -] - -{ #category : #generated } -DelphiMemExpressionNode >> addressExpression [ - ^ addressExpression -] - -{ #category : #generated } -DelphiMemExpressionNode >> addressExpression: aDelphiExpressionNode [ - self addressExpression notNil - ifTrue: [ self addressExpression parent: nil ]. - addressExpression := aDelphiExpressionNode. - self addressExpression notNil - ifTrue: [ self addressExpression parent: self ] -] - -{ #category : #generated } -DelphiMemExpressionNode >> baseExpression [ - ^ baseExpression -] - -{ #category : #generated } -DelphiMemExpressionNode >> baseExpression: aDelphiExpressionNode [ - self baseExpression notNil - ifTrue: [ self baseExpression parent: nil ]. - baseExpression := aDelphiExpressionNode. - self baseExpression notNil - ifTrue: [ self baseExpression parent: self ] -] - -{ #category : #generated } -DelphiMemExpressionNode >> colon [ - ^ colon -] - -{ #category : #generated } -DelphiMemExpressionNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -DelphiMemExpressionNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -DelphiMemExpressionNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -DelphiMemExpressionNode >> mem [ - ^ mem -] - -{ #category : #generated } -DelphiMemExpressionNode >> mem: aSmaCCToken [ - mem := aSmaCCToken -] - -{ #category : #generated } -DelphiMemExpressionNode >> nodeVariables [ - ^ #(#baseExpression #addressExpression) -] - -{ #category : #generated } -DelphiMemExpressionNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -DelphiMemExpressionNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] - -{ #category : #generated } -DelphiMemExpressionNode >> tokenVariables [ - ^ #(#mem #leftBrace #colon #rightBrace) -] diff --git a/src/SmaCC_Delphi/DelphiMessageMethodModifierNode.class.st b/src/SmaCC_Delphi/DelphiMessageMethodModifierNode.class.st deleted file mode 100644 index 0133d3ad3..000000000 --- a/src/SmaCC_Delphi/DelphiMessageMethodModifierNode.class.st +++ /dev/null @@ -1,32 +0,0 @@ -Class { - #name : #DelphiMessageMethodModifierNode, - #superclass : #DelphiMethodModifierNode, - #instVars : [ - 'expression' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiMessageMethodModifierNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitMessageMethodModifier: self -] - -{ #category : #generated } -DelphiMessageMethodModifierNode >> expression [ - ^ expression -] - -{ #category : #generated } -DelphiMessageMethodModifierNode >> expression: aDelphiExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aDelphiExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -DelphiMessageMethodModifierNode >> nodeVariables [ - ^ #(#expression) -] diff --git a/src/SmaCC_Delphi/DelphiMetaclassTypeNode.class.st b/src/SmaCC_Delphi/DelphiMetaclassTypeNode.class.st deleted file mode 100644 index 8f50199c4..000000000 --- a/src/SmaCC_Delphi/DelphiMetaclassTypeNode.class.st +++ /dev/null @@ -1,50 +0,0 @@ -Class { - #name : #DelphiMetaclassTypeNode, - #superclass : #DelphiTypeNode, - #instVars : [ - 'classToken', - 'ofToken', - 'name' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiMetaclassTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitMetaclassType: self -] - -{ #category : #generated } -DelphiMetaclassTypeNode >> classToken [ - ^ classToken -] - -{ #category : #generated } -DelphiMetaclassTypeNode >> classToken: aSmaCCToken [ - classToken := aSmaCCToken -] - -{ #category : #generated } -DelphiMetaclassTypeNode >> name [ - ^ name -] - -{ #category : #generated } -DelphiMetaclassTypeNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -DelphiMetaclassTypeNode >> ofToken [ - ^ ofToken -] - -{ #category : #generated } -DelphiMetaclassTypeNode >> ofToken: aSmaCCToken [ - ofToken := aSmaCCToken -] - -{ #category : #generated } -DelphiMetaclassTypeNode >> tokenVariables [ - ^ #(#classToken #ofToken #name) -] diff --git a/src/SmaCC_Delphi/DelphiMethodAttributeNode.class.st b/src/SmaCC_Delphi/DelphiMethodAttributeNode.class.st deleted file mode 100644 index dec960ed4..000000000 --- a/src/SmaCC_Delphi/DelphiMethodAttributeNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #DelphiMethodAttributeNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'left', - 'expression', - 'right' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiMethodAttributeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitMethodAttribute: self -] - -{ #category : #generated } -DelphiMethodAttributeNode >> expression [ - ^ expression -] - -{ #category : #generated } -DelphiMethodAttributeNode >> expression: aDelphiExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aDelphiExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -DelphiMethodAttributeNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiMethodAttributeNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -DelphiMethodAttributeNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -DelphiMethodAttributeNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiMethodAttributeNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiMethodAttributeNode >> tokenVariables [ - ^ #(#left #right) -] diff --git a/src/SmaCC_Delphi/DelphiMethodCallExpressionNode.class.st b/src/SmaCC_Delphi/DelphiMethodCallExpressionNode.class.st deleted file mode 100644 index f049d9f3e..000000000 --- a/src/SmaCC_Delphi/DelphiMethodCallExpressionNode.class.st +++ /dev/null @@ -1,100 +0,0 @@ -Class { - #name : #DelphiMethodCallExpressionNode, - #superclass : #DelphiExpressionNode, - #instVars : [ - 'receiver', - 'left', - 'arguments', - 'commas', - 'right' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiMethodCallExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitMethodCallExpression: self -] - -{ #category : #generated } -DelphiMethodCallExpressionNode >> arguments [ - ^ arguments -] - -{ #category : #generated } -DelphiMethodCallExpressionNode >> arguments: anOrderedCollection [ - self setParents: self arguments to: nil. - arguments := anOrderedCollection. - self setParents: self arguments to: self -] - -{ #category : #generated } -DelphiMethodCallExpressionNode >> commas [ - ^ commas -] - -{ #category : #generated } -DelphiMethodCallExpressionNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -DelphiMethodCallExpressionNode >> compositeNodeVariables [ - ^ #(#arguments) -] - -{ #category : #generated } -DelphiMethodCallExpressionNode >> ignoredCompositeTokenVariables [ - ^ #(#commas #leftParens #rightParens) -] - -{ #category : #'generated-initialize-release' } -DelphiMethodCallExpressionNode >> initialize [ - super initialize. - arguments := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiMethodCallExpressionNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiMethodCallExpressionNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -DelphiMethodCallExpressionNode >> nodeVariables [ - ^ #(#receiver) -] - -{ #category : #generated } -DelphiMethodCallExpressionNode >> receiver [ - ^ receiver -] - -{ #category : #generated } -DelphiMethodCallExpressionNode >> receiver: aDelphiExpressionNode [ - self receiver notNil - ifTrue: [ self receiver parent: nil ]. - receiver := aDelphiExpressionNode. - self receiver notNil - ifTrue: [ self receiver parent: self ] -] - -{ #category : #generated } -DelphiMethodCallExpressionNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiMethodCallExpressionNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiMethodCallExpressionNode >> tokenVariables [ - ^ #(#left #right) -] diff --git a/src/SmaCC_Delphi/DelphiMethodDefinitionNode.class.st b/src/SmaCC_Delphi/DelphiMethodDefinitionNode.class.st deleted file mode 100644 index 087e76186..000000000 --- a/src/SmaCC_Delphi/DelphiMethodDefinitionNode.class.st +++ /dev/null @@ -1,87 +0,0 @@ -Class { - #name : #DelphiMethodDefinitionNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'header', - 'definitions', - 'block', - 'semicolon' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiMethodDefinitionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitMethodDefinition: self -] - -{ #category : #generated } -DelphiMethodDefinitionNode >> block [ - ^ block -] - -{ #category : #generated } -DelphiMethodDefinitionNode >> block: aDelphiStatementNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aDelphiStatementNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -DelphiMethodDefinitionNode >> compositeNodeVariables [ - ^ #(#definitions) -] - -{ #category : #generated } -DelphiMethodDefinitionNode >> definitions [ - ^ definitions -] - -{ #category : #generated } -DelphiMethodDefinitionNode >> definitions: anOrderedCollection [ - self setParents: self definitions to: nil. - definitions := anOrderedCollection. - self setParents: self definitions to: self -] - -{ #category : #generated } -DelphiMethodDefinitionNode >> header [ - ^ header -] - -{ #category : #generated } -DelphiMethodDefinitionNode >> header: aDelphiMethodHeaderNode [ - self header notNil - ifTrue: [ self header parent: nil ]. - header := aDelphiMethodHeaderNode. - self header notNil - ifTrue: [ self header parent: self ] -] - -{ #category : #generated } -DelphiMethodDefinitionNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #'generated-initialize-release' } -DelphiMethodDefinitionNode >> initialize [ - super initialize. - definitions := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiMethodDefinitionNode >> nodeVariables [ - ^ #(#header #block) -] - -{ #category : #generated } -DelphiMethodDefinitionNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -DelphiMethodDefinitionNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] diff --git a/src/SmaCC_Delphi/DelphiMethodHeaderNode.class.st b/src/SmaCC_Delphi/DelphiMethodHeaderNode.class.st deleted file mode 100644 index 65081e1b0..000000000 --- a/src/SmaCC_Delphi/DelphiMethodHeaderNode.class.st +++ /dev/null @@ -1,98 +0,0 @@ -Class { - #name : #DelphiMethodHeaderNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'attribute', - 'qualifiedName', - 'left', - 'right', - 'modifiers' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiMethodHeaderNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitMethodHeader: self -] - -{ #category : #generated } -DelphiMethodHeaderNode >> attribute [ - ^ attribute -] - -{ #category : #generated } -DelphiMethodHeaderNode >> attribute: aDelphiMethodAttributeNode [ - self attribute notNil - ifTrue: [ self attribute parent: nil ]. - attribute := aDelphiMethodAttributeNode. - self attribute notNil - ifTrue: [ self attribute parent: self ] -] - -{ #category : #generated } -DelphiMethodHeaderNode >> compositeNodeVariables [ - ^ #(#modifiers) -] - -{ #category : #'generated-initialize-release' } -DelphiMethodHeaderNode >> initialize [ - super initialize. - modifiers := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiMethodHeaderNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiMethodHeaderNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -DelphiMethodHeaderNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -DelphiMethodHeaderNode >> modifiers: anOrderedCollection [ - self setParents: self modifiers to: nil. - modifiers := anOrderedCollection. - self setParents: self modifiers to: self -] - -{ #category : #generated } -DelphiMethodHeaderNode >> nodeVariables [ - ^ #(#attribute #qualifiedName) -] - -{ #category : #generated } -DelphiMethodHeaderNode >> qualifiedName [ - ^ qualifiedName -] - -{ #category : #generated } -DelphiMethodHeaderNode >> qualifiedName: aDelphiQualifiedNameNode [ - self qualifiedName notNil - ifTrue: [ self qualifiedName parent: nil ]. - qualifiedName := aDelphiQualifiedNameNode. - self qualifiedName notNil - ifTrue: [ self qualifiedName parent: self ] -] - -{ #category : #generated } -DelphiMethodHeaderNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiMethodHeaderNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiMethodHeaderNode >> tokenVariables [ - ^ #(#left #right) -] diff --git a/src/SmaCC_Delphi/DelphiMethodModifierNode.class.st b/src/SmaCC_Delphi/DelphiMethodModifierNode.class.st deleted file mode 100644 index 58e554445..000000000 --- a/src/SmaCC_Delphi/DelphiMethodModifierNode.class.st +++ /dev/null @@ -1,44 +0,0 @@ -Class { - #name : #DelphiMethodModifierNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'modifier', - 'semicolon' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiMethodModifierNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitMethodModifier: self -] - -{ #category : #generated } -DelphiMethodModifierNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -DelphiMethodModifierNode >> modifier [ - ^ modifier -] - -{ #category : #generated } -DelphiMethodModifierNode >> modifier: aSmaCCToken [ - modifier := aSmaCCToken -] - -{ #category : #generated } -DelphiMethodModifierNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -DelphiMethodModifierNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -DelphiMethodModifierNode >> tokenVariables [ - ^ #(#modifier) -] diff --git a/src/SmaCC_Delphi/DelphiMinusExpressionNode.class.st b/src/SmaCC_Delphi/DelphiMinusExpressionNode.class.st deleted file mode 100644 index 17f357c1a..000000000 --- a/src/SmaCC_Delphi/DelphiMinusExpressionNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #DelphiMinusExpressionNode, - #superclass : #DelphiExpressionNode, - #instVars : [ - 'minus', - 'expression' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiMinusExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitMinusExpression: self -] - -{ #category : #generated } -DelphiMinusExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -DelphiMinusExpressionNode >> expression: aDelphiExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aDelphiExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -DelphiMinusExpressionNode >> minus [ - ^ minus -] - -{ #category : #generated } -DelphiMinusExpressionNode >> minus: aSmaCCToken [ - minus := aSmaCCToken -] - -{ #category : #generated } -DelphiMinusExpressionNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -DelphiMinusExpressionNode >> tokenVariables [ - ^ #(#minus) -] diff --git a/src/SmaCC_Delphi/DelphiModuleNameNode.class.st b/src/SmaCC_Delphi/DelphiModuleNameNode.class.st deleted file mode 100644 index e171058fa..000000000 --- a/src/SmaCC_Delphi/DelphiModuleNameNode.class.st +++ /dev/null @@ -1,46 +0,0 @@ -Class { - #name : #DelphiModuleNameNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'names', - 'periods' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiModuleNameNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitModuleName: self -] - -{ #category : #generated } -DelphiModuleNameNode >> compositeTokenVariables [ - ^ #(#names #periods) -] - -{ #category : #'generated-initialize-release' } -DelphiModuleNameNode >> initialize [ - super initialize. - names := OrderedCollection new: 2. - periods := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiModuleNameNode >> names [ - ^ names -] - -{ #category : #generated } -DelphiModuleNameNode >> names: anOrderedCollection [ - names := anOrderedCollection -] - -{ #category : #generated } -DelphiModuleNameNode >> periods [ - ^ periods -] - -{ #category : #generated } -DelphiModuleNameNode >> periods: anOrderedCollection [ - periods := anOrderedCollection -] diff --git a/src/SmaCC_Delphi/DelphiMultiStatementNode.class.st b/src/SmaCC_Delphi/DelphiMultiStatementNode.class.st deleted file mode 100644 index 9c6a943f2..000000000 --- a/src/SmaCC_Delphi/DelphiMultiStatementNode.class.st +++ /dev/null @@ -1,53 +0,0 @@ -Class { - #name : #DelphiMultiStatementNode, - #superclass : #DelphiStatementNode, - #instVars : [ - 'semicolons', - 'statements' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiMultiStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitMultiStatement: self -] - -{ #category : #generated } -DelphiMultiStatementNode >> compositeNodeVariables [ - ^ #(#statements) -] - -{ #category : #generated } -DelphiMultiStatementNode >> ignoredCompositeTokenVariables [ - ^ #(#semicolons) -] - -{ #category : #'generated-initialize-release' } -DelphiMultiStatementNode >> initialize [ - super initialize. - semicolons := OrderedCollection new: 2. - statements := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiMultiStatementNode >> semicolons [ - ^ semicolons -] - -{ #category : #generated } -DelphiMultiStatementNode >> semicolons: anOrderedCollection [ - semicolons := anOrderedCollection -] - -{ #category : #generated } -DelphiMultiStatementNode >> statements [ - ^ statements -] - -{ #category : #generated } -DelphiMultiStatementNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] diff --git a/src/SmaCC_Delphi/DelphiMultiValueCaseLabelNode.class.st b/src/SmaCC_Delphi/DelphiMultiValueCaseLabelNode.class.st deleted file mode 100644 index fb164194c..000000000 --- a/src/SmaCC_Delphi/DelphiMultiValueCaseLabelNode.class.st +++ /dev/null @@ -1,53 +0,0 @@ -Class { - #name : #DelphiMultiValueCaseLabelNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'labels', - 'commas' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiMultiValueCaseLabelNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitMultiValueCaseLabel: self -] - -{ #category : #generated } -DelphiMultiValueCaseLabelNode >> commas [ - ^ commas -] - -{ #category : #generated } -DelphiMultiValueCaseLabelNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -DelphiMultiValueCaseLabelNode >> compositeNodeVariables [ - ^ #(#labels) -] - -{ #category : #generated } -DelphiMultiValueCaseLabelNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #'generated-initialize-release' } -DelphiMultiValueCaseLabelNode >> initialize [ - super initialize. - labels := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiMultiValueCaseLabelNode >> labels [ - ^ labels -] - -{ #category : #generated } -DelphiMultiValueCaseLabelNode >> labels: anOrderedCollection [ - self setParents: self labels to: nil. - labels := anOrderedCollection. - self setParents: self labels to: self -] diff --git a/src/SmaCC_Delphi/DelphiNamedDefinedTypeNode.class.st b/src/SmaCC_Delphi/DelphiNamedDefinedTypeNode.class.st deleted file mode 100644 index a7bece612..000000000 --- a/src/SmaCC_Delphi/DelphiNamedDefinedTypeNode.class.st +++ /dev/null @@ -1,147 +0,0 @@ -Class { - #name : #DelphiNamedDefinedTypeNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'name', - 'left', - 'genericTypeArguments', - 'commas', - 'right', - 'equalToken', - 'type', - 'modifier', - 'semicolon' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiNamedDefinedTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNamedDefinedType: self -] - -{ #category : #generated } -DelphiNamedDefinedTypeNode >> commas [ - ^ commas -] - -{ #category : #generated } -DelphiNamedDefinedTypeNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -DelphiNamedDefinedTypeNode >> compositeTokenVariables [ - ^ #(#genericTypeArguments) -] - -{ #category : #generated } -DelphiNamedDefinedTypeNode >> equalToken [ - ^ equalToken -] - -{ #category : #generated } -DelphiNamedDefinedTypeNode >> equalToken: aSmaCCToken [ - equalToken := aSmaCCToken -] - -{ #category : #generated } -DelphiNamedDefinedTypeNode >> genericTypeArguments [ - ^ genericTypeArguments -] - -{ #category : #generated } -DelphiNamedDefinedTypeNode >> genericTypeArguments: anOrderedCollection [ - genericTypeArguments := anOrderedCollection -] - -{ #category : #generated } -DelphiNamedDefinedTypeNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -DelphiNamedDefinedTypeNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #'generated-initialize-release' } -DelphiNamedDefinedTypeNode >> initialize [ - super initialize. - genericTypeArguments := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiNamedDefinedTypeNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiNamedDefinedTypeNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -DelphiNamedDefinedTypeNode >> modifier [ - ^ modifier -] - -{ #category : #generated } -DelphiNamedDefinedTypeNode >> modifier: aSmaCCToken [ - modifier := aSmaCCToken -] - -{ #category : #generated } -DelphiNamedDefinedTypeNode >> name [ - ^ name -] - -{ #category : #generated } -DelphiNamedDefinedTypeNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -DelphiNamedDefinedTypeNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -DelphiNamedDefinedTypeNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiNamedDefinedTypeNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiNamedDefinedTypeNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -DelphiNamedDefinedTypeNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -DelphiNamedDefinedTypeNode >> tokenVariables [ - ^ #(#name #left #right #equalToken #modifier) -] - -{ #category : #generated } -DelphiNamedDefinedTypeNode >> type [ - ^ type -] - -{ #category : #generated } -DelphiNamedDefinedTypeNode >> type: aDelphiProgramNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aDelphiProgramNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_Delphi/DelphiNamedTypeNode.class.st b/src/SmaCC_Delphi/DelphiNamedTypeNode.class.st deleted file mode 100644 index 838cb5c41..000000000 --- a/src/SmaCC_Delphi/DelphiNamedTypeNode.class.st +++ /dev/null @@ -1,32 +0,0 @@ -Class { - #name : #DelphiNamedTypeNode, - #superclass : #DelphiTypeNode, - #instVars : [ - 'typeExpression' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiNamedTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNamedType: self -] - -{ #category : #generated } -DelphiNamedTypeNode >> nodeVariables [ - ^ #(#typeExpression) -] - -{ #category : #generated } -DelphiNamedTypeNode >> typeExpression [ - ^ typeExpression -] - -{ #category : #generated } -DelphiNamedTypeNode >> typeExpression: aDelphiExpressionNode [ - self typeExpression notNil - ifTrue: [ self typeExpression parent: nil ]. - typeExpression := aDelphiExpressionNode. - self typeExpression notNil - ifTrue: [ self typeExpression parent: self ] -] diff --git a/src/SmaCC_Delphi/DelphiNewClassTypeNode.class.st b/src/SmaCC_Delphi/DelphiNewClassTypeNode.class.st deleted file mode 100644 index 4e4781a05..000000000 --- a/src/SmaCC_Delphi/DelphiNewClassTypeNode.class.st +++ /dev/null @@ -1,50 +0,0 @@ -Class { - #name : #DelphiNewClassTypeNode, - #superclass : #DelphiClassTypeNode, - #instVars : [ - 'classToken', - 'classAttributes' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiNewClassTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNewClassType: self -] - -{ #category : #generated } -DelphiNewClassTypeNode >> classAttributes [ - ^ classAttributes -] - -{ #category : #generated } -DelphiNewClassTypeNode >> classAttributes: anOrderedCollection [ - classAttributes := anOrderedCollection -] - -{ #category : #generated } -DelphiNewClassTypeNode >> classToken [ - ^ classToken -] - -{ #category : #generated } -DelphiNewClassTypeNode >> classToken: aSmaCCToken [ - classToken := aSmaCCToken -] - -{ #category : #generated } -DelphiNewClassTypeNode >> compositeTokenVariables [ - ^ #(#classAttributes) -] - -{ #category : #'generated-initialize-release' } -DelphiNewClassTypeNode >> initialize [ - super initialize. - classAttributes := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiNewClassTypeNode >> tokenVariables [ - ^ #(#classToken #left #right #endToken) -] diff --git a/src/SmaCC_Delphi/DelphiNotExpressionNode.class.st b/src/SmaCC_Delphi/DelphiNotExpressionNode.class.st deleted file mode 100644 index 94b7cd3a4..000000000 --- a/src/SmaCC_Delphi/DelphiNotExpressionNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #DelphiNotExpressionNode, - #superclass : #DelphiExpressionNode, - #instVars : [ - 'notToken', - 'expression' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiNotExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNotExpression: self -] - -{ #category : #generated } -DelphiNotExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -DelphiNotExpressionNode >> expression: aDelphiExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aDelphiExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -DelphiNotExpressionNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -DelphiNotExpressionNode >> notToken [ - ^ notToken -] - -{ #category : #generated } -DelphiNotExpressionNode >> notToken: aSmaCCToken [ - notToken := aSmaCCToken -] - -{ #category : #generated } -DelphiNotExpressionNode >> tokenVariables [ - ^ #(#notToken) -] diff --git a/src/SmaCC_Delphi/DelphiOldClassTypeNode.class.st b/src/SmaCC_Delphi/DelphiOldClassTypeNode.class.st deleted file mode 100644 index 73c985238..000000000 --- a/src/SmaCC_Delphi/DelphiOldClassTypeNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #DelphiOldClassTypeNode, - #superclass : #DelphiClassTypeNode, - #instVars : [ - 'objectToken' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiOldClassTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitOldClassType: self -] - -{ #category : #generated } -DelphiOldClassTypeNode >> objectToken [ - ^ objectToken -] - -{ #category : #generated } -DelphiOldClassTypeNode >> objectToken: aSmaCCToken [ - objectToken := aSmaCCToken -] - -{ #category : #generated } -DelphiOldClassTypeNode >> tokenVariables [ - ^ #(#objectToken #left #right #endToken) -] diff --git a/src/SmaCC_Delphi/DelphiOnDoNode.class.st b/src/SmaCC_Delphi/DelphiOnDoNode.class.st deleted file mode 100644 index 145360ab1..000000000 --- a/src/SmaCC_Delphi/DelphiOnDoNode.class.st +++ /dev/null @@ -1,126 +0,0 @@ -Class { - #name : #DelphiOnDoNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'onToken', - 'exception', - 'colon', - 'type', - 'doToken', - 'statements', - 'semicolons' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiOnDoNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitOnDo: self -] - -{ #category : #generated } -DelphiOnDoNode >> colon [ - ^ colon -] - -{ #category : #generated } -DelphiOnDoNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -DelphiOnDoNode >> compositeNodeVariables [ - ^ #(#statements) -] - -{ #category : #generated } -DelphiOnDoNode >> doToken [ - ^ doToken -] - -{ #category : #generated } -DelphiOnDoNode >> doToken: aSmaCCToken [ - doToken := aSmaCCToken -] - -{ #category : #generated } -DelphiOnDoNode >> exception [ - ^ exception -] - -{ #category : #generated } -DelphiOnDoNode >> exception: aDelphiQualifiedNameNode [ - self exception notNil - ifTrue: [ self exception parent: nil ]. - exception := aDelphiQualifiedNameNode. - self exception notNil - ifTrue: [ self exception parent: self ] -] - -{ #category : #generated } -DelphiOnDoNode >> ignoredCompositeTokenVariables [ - ^ #(#semicolons) -] - -{ #category : #'generated-initialize-release' } -DelphiOnDoNode >> initialize [ - super initialize. - statements := OrderedCollection new: 2. - semicolons := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiOnDoNode >> nodeVariables [ - ^ #(#exception #type) -] - -{ #category : #generated } -DelphiOnDoNode >> onToken [ - ^ onToken -] - -{ #category : #generated } -DelphiOnDoNode >> onToken: aSmaCCToken [ - onToken := aSmaCCToken -] - -{ #category : #generated } -DelphiOnDoNode >> semicolons [ - ^ semicolons -] - -{ #category : #generated } -DelphiOnDoNode >> semicolons: anOrderedCollection [ - semicolons := anOrderedCollection -] - -{ #category : #generated } -DelphiOnDoNode >> statements [ - ^ statements -] - -{ #category : #generated } -DelphiOnDoNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] - -{ #category : #generated } -DelphiOnDoNode >> tokenVariables [ - ^ #(#onToken #colon #doToken) -] - -{ #category : #generated } -DelphiOnDoNode >> type [ - ^ type -] - -{ #category : #generated } -DelphiOnDoNode >> type: aDelphiProgramNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aDelphiProgramNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_Delphi/DelphiOptParser.class.st b/src/SmaCC_Delphi/DelphiOptParser.class.st deleted file mode 100644 index 1de67080c..000000000 --- a/src/SmaCC_Delphi/DelphiOptParser.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #DelphiOptParser, - #superclass : #DelphiParser, - #category : #'SmaCC_Delphi' -} - -{ #category : #public } -DelphiOptParser class >> on: aStream [ - | parser scanner | - scanner := self scannerClass on: aStream. - scanner parseOpt: true. - parser := self new. - parser scanner: scanner. - ^ parser -] diff --git a/src/SmaCC_Delphi/DelphiParser.class.st b/src/SmaCC_Delphi/DelphiParser.class.st deleted file mode 100644 index b8d370748..000000000 --- a/src/SmaCC_Delphi/DelphiParser.class.st +++ /dev/null @@ -1,5320 +0,0 @@ -Class { - #name : #DelphiParser, - #superclass : #SmaCCGLRParser, - #instVars : [ - 'lastInsertPosition' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiParser class >> ambiguousTransitions [ -^#( -#[ 0 58 2 49] -#[ 0 178 0 182] -#[ 0 222 2 85] -#[ 0 222 2 101] -#[ 1 22 2 85] -#[ 1 22 2 89] -#[ 1 22 2 93] -#[ 1 22 2 97] -#[ 1 22 2 101] -#[ 1 22 2 105] -#[ 1 22 2 121] -#[ 1 42 2 85] -#[ 1 42 2 89] -#[ 1 42 2 93] -#[ 1 42 2 97] -#[ 1 42 2 101] -#[ 1 42 2 105] -#[ 1 42 2 121] -#[ 1 70 2 85] -#[ 1 70 2 89] -#[ 1 70 2 93] -#[ 1 70 2 97] -#[ 1 70 2 101] -#[ 1 70 2 105] -#[ 1 70 2 121] -#[ 1 74 2 85] -#[ 1 74 2 89] -#[ 1 74 2 93] -#[ 1 74 2 97] -#[ 1 74 2 101] -#[ 1 74 2 105] -#[ 1 74 2 121] -#[ 1 190 4 125] -#[ 1 198 2 85] -#[ 1 198 2 89] -#[ 1 198 2 93] -#[ 1 198 2 101] -#[ 1 198 2 105] -#[ 1 198 2 121] -#[ 1 210 2 85] -#[ 1 210 2 89] -#[ 1 210 2 93] -#[ 1 210 2 101] -#[ 1 210 2 105] -#[ 1 210 2 121] -#[ 0 246 3 49] -#[ 1 222 2 85] -#[ 1 222 2 89] -#[ 1 222 2 93] -#[ 1 222 2 101] -#[ 1 222 2 105] -#[ 1 222 2 121] -#[ 1 226 2 85] -#[ 1 226 2 89] -#[ 1 226 2 93] -#[ 1 226 2 101] -#[ 1 226 2 105] -#[ 1 226 2 121] -#[ 1 230 2 49] -#[ 2 85 2 126] -#[ 2 89 2 126] -#[ 2 93 2 126] -#[ 2 97 2 126] -#[ 2 101 2 126] -#[ 2 105 2 126] -#[ 2 121 2 126] -#[ 2 85 2 134] -#[ 2 89 2 134] -#[ 2 93 2 134] -#[ 2 97 2 134] -#[ 2 101 2 134] -#[ 2 105 2 134] -#[ 2 121 2 134] -#[ 2 49 2 146] -#[ 2 85 2 174] -#[ 2 101 2 174] -#[ 2 85 2 206] -#[ 2 89 2 206] -#[ 2 93 2 206] -#[ 2 101 2 206] -#[ 2 105 2 206] -#[ 2 121 2 206] -#[ 2 49 2 210] -#[ 0 178 8 85] -#[ 4 254 9 233] -#[ 4 254 9 237] -#[ 4 254 10 29] -#[ 2 49 5 18] -#[ 0 254 3 61] -#[ 7 10 9 233] -#[ 7 10 9 237] -#[ 7 10 10 29] - ). -] - -{ #category : #'generated-accessing' } -DelphiParser class >> cacheId [ - ^'2019-06-06T11:31:04.669916-05:00' -] - -{ #category : #generated } -DelphiParser class >> definitionComment [ -"%start File Statement SimpleDefinedType NamedDefinedType; - -%glr; -%ignorecase; - -%ignore_variables leftParen rightParen semicolon comma; - -# Binary precedence handled by parser -- this grammar is ambiguous -%right ""ELSE"" ""OF"" ; -%right "":=""; -%left ""OR""; -%left ""AND""; -%left ""XOR"" ; -#%left "","" ; -#%nonassoc ""<>"" "">"" ""<"" ""="" ""<="" "">="" ""IN"" ; -%nonassoc ""AS"" ""IS"" ""ABSOLUTE"" ; -%left ; -%left ""DIV"" ""MOD"" ""SHL"" ""SHR"" ""*"" ""/""; -%left ""@""; -%left ""."" ; -%left ""["" ""(""; - -%id ; - -%prefix Delphi ; -%suffix Node; -%root Program; - -%hierarchy MethodModifier ( - ExternalMethodModifier - MessageMethodModifier -); -%hierarchy Expression ( - AddressExpression - ArrayExpression - AssignmentExpression - BinaryExpression - ConstantArrayExpression - InheritedFunctionCall - LiteralExpression - MemExpression - MethodCallExpression - MinusExpression - PlusExpression - NotExpression - PointerExpression - PropertyExpression - RecordExpression - SetExpression - VariableExpression -) ; -%hierarchy VariableExpression ( - InstantiatedGenericVariableExpression -); -%hierarchy AnonymousMethodType ( - AnonymousFunctionType - AnonymousProcedureType -); -%hierarchy SetType ( - ExpressionSetType - RangeSetType - ValuesSetType -); -%hierarchy Type ( - AbsoluteType - AnonymousMethodType - ArrayType - ClassOrInterfaceType - EnumType - FileType - InstantiatedGenericType - MetaclassType - NamedType - PointerType - RangeType - RecordType - SetType - SimpleArrayType -); -%hierarchy ClassOrInterfaceType ( - ClassType - InterfaceType -); -%hierarchy ClassSection ( - ImplicitClassSection - PrivateClassSection - ProtectedClassSection - PublicClassSection - PublishedClassSection -); -%hierarchy Statement ( - AsmBlock - EmptyStatement - Expression - ForStatement - ForInStatement - GotoStatement - IfStatement - LabeledStatement - MultiStatement - RaiseStatement - WhileStatement - WithStatement -); -%hierarchy MultiStatement ( - CaseStatement - TryStatement - StatementBlock - RepeatStatement -); -%hierarchy ClassType ( - NewClassType - OldClassType - ClassHelperType -) ; -%hierarchy SetValue ( - RangeSetValue - SingleSetValue -) ; -%hierarchy MethodHeader ( - ClassOperatorHeader - ConstructorHeader - DestructorHeader - FunctionHeader - ProcedureHeader -); -%hierarchy FunctionHeader ( - ClassFunctionHeader -); -%hierarchy ProcedureHeader ( - ClassProcedureHeader -); -%hierarchy MethodDefinition ( - ConstructorDefinition - DestructorDefinition - FunctionDefinition - ProcedureDefinition -); -%hierarchy FunctionDefinition ( - ClassFunctionDefinition - ClassOperatorDefinition -); -%hierarchy ProcedureDefinition ( - ClassProcedureDefinition -); -%hierarchy PropertyHeader ( - ClassPropertyHeader -); -%hierarchy CodeSection ( - FinalizationSection - ImplementationCode - InitializationSection -); -%hierarchy Vars ( - ClassVars -); - - - - : AT - ; - - : \- - ; - - : \+ - ; - - : \; - ; - - : \^ - ; - - : |_ - ; - - : [0-9] - ; - - : [a-fA-F0-9] - ; - - : [0-9] - ; - - : [Ee][\+\-]?+ - ; - - : (|)* - ; - - : - ; - - : (\$+) - | (+) - ; - - : + - | (+\.* | \.+)? - ; - - : [\-\+]? ( | ) - ; - - : [\-\+]? +\.\. - ; - - : \# - ; - - : \^ [a-z] - ; - - : ( | )* (\' [^\']* \' ( | )*)+ - | + - ; - - : \{[^\}]*\} - | \(\*([^*]|[\r\n]|(\*+([^*)]|[\r\n])))*\*+\) - | \/\/ [^\r\n]* [\r\n] - ; - - : (\s|\x1A)+ - ; - - : (\` [^\`]* \`)+ - ; - - - : + - ; - -#These below are probably wrong - - - : - ; -# : ; - - : \\\@ - ; - -File - : UnitFile {{UnitFile}} - | ProgramFile {{ProgramFile}} - | LibraryFile {{LibraryFile}} - ; -ProgramFile - : ProgramLine UsesList MainMethod 'main' ""."" 'period' - | UsesList MainMethod 'main' ""."" 'period' - ; -ProgramLine - : ""PROGRAM"" 'programToken' FullModuleName 'programName' OptionalPlatform 'semicolon' - ; -LibraryFile - : LibraryLine UsesList Exports MainMethod 'main' ""."" 'period' - ; -LibraryLine - : ""LIBRARY"" 'libraryToken' FullModuleName 'libraryName' OptionalPlatform 'semicolon' - ; -Exports - : - | Exports LibraryExport 'export' - ; -LibraryExport - : ""EXPORTS"" 'exportsToken' 'name' 'semicolon' {{LibraryExport}} - ; -MainMethod - : MethodComponents {{MainMethodDefinition}} - ; -UnitFile - : UnitLine InterfaceSection 'interfaceSection' ImplementationSection 'implementationSection' InitializationSection 'initializationSection' FinalizationSection 'finalizationSection' EndFile - | UnitLine - ; -UnitLine - : ""UNIT"" 'unitToken' FullModuleName 'unitName' OptionalPlatform 'semicolon' - ; -InterfaceSection - : - | ""INTERFACE"" 'interfaceToken' UsesList InterfaceSectionValueList {{InterfaceSection}} - ; -UsesList - : - | ""USES"" 'usesToken' UsesModuleList 'semicolon' - ; -UsesModuleList - : UsesModule - | UsesModuleList "","" 'comma' UsesModule - ; -UsesModule - : FullModuleName 'moduleName' - | FullModuleName 'moduleName' ""IN"" 'inToken' 'filename' - ; -FullModuleName - : 'name' {{ModuleName}} - | FullModuleName ""."" 'period' 'name' {{ModuleName}} - ; -InterfaceSectionValueList - : - | InterfaceSectionValueList InterfaceSectionValue 'value' - ; -InterfaceSectionValue - : DefinedTypeList - | ResourceStringList - | ConstantValueList - | ProcedureHeader - | FunctionHeader - | Vars - ; -ConstantValueList - : ""CONST"" 'constToken' ConstantValues {{ConstantList}} - ; -ConstantValues - : ConstantValue 'definition' - | ConstantValues ConstantValue 'definition' - ; -ConstantValue - : 'name' OptionalType ""="" 'equalToken' ConstantExpression 'expression' OptionalPlatform OptionalDeprecated 'semicolon' {{ConstantDefinition}} - ; -ResourceStringList - : ""RESOURCESTRING"" 'resourceStringToken' Resources {{ResourceStringList}} - ; -Resources - : Resource 'definition' - | Resources Resource 'definition' - ; -Resource - : 'name' ""="" 'equalToken' ConstantExpression 'value' OptionalDeprecated 'semicolon' {{ResourceStringDefinition}} - ; -DefinedTypeList - : ""TYPE"" 'typeToken' NamedDefinedTypes {{DefinedTypeList}} - ; -NamedDefinedTypes - : NamedDefinedType 'definition' - | NamedDefinedTypes NamedDefinedType 'definition' - ; -NamedDefinedType - : 'name' OptionalGenericTypeArguments ""="" 'equalToken' DefinedType {{NamedDefinedType}} - ; -OptionalGenericTypeArguments - : - | ""<"" 'left' GenericTypeArgumentList "">"" 'right' - ; -GenericTypeArgumentList - : 'genericTypeArgument' - | GenericTypeArgumentList "","" 'comma' 'genericTypeArgument' - ; -DefinedType - : SimpleDefinedType 'type' OptionalPlatform 'semicolon' - | EnumType 'type' 'semicolon' - | AnonymousProcedureType 'type' - | AnonymousFunctionType 'type' - | ClassOrInterfaceType 'type' OptionalPlatform 'semicolon' - ; -EnumType - : ""("" 'left' EnumList "")"" 'right' {{}} - ; -EnumList - : EnumName 'name' - | EnumList "","" 'comma' EnumName 'name' - ; -EnumName - : 'name' {{}} - | 'name' ""="" 'equal' ConstantExpression 'value' {{}} - ; -ClassOrInterfaceType - : NewClassType - | OldClassType - | InterfaceType - | MetaclassType - | ClassHelperType - ; -SimpleDefinedType - : NamedType 'typeExpression' {{NamedType}} - | 'upArrowToken' Type 'type' {{PointerType}} - | ArrayType - | RecordType - | Type 'type' InstantiatedGenericTypeArguments {{InstantiatedGenericType}} - | Type 'type' ""["" 'left' ConstantExpression 'bounds' ""]"" 'right' {{SimpleArrayType}} - | FileType - | Type 'type' ""ABSOLUTE"" 'absoluteToken' Type 'variable' {{AbsoluteType}} - | SetType - | RangeType - | ""TYPE"" 'typeToken' QualifiedName 'typeName' {{TypeType}} - ; -InstantiatedGenericTypeArguments - : ""<"" 'left' InstantiatedGenericTypeArgumentList "">"" 'right' - ; -InstantiatedGenericTypeArgumentList - : SimpleDefinedType 'typeArgument' - | InstantiatedGenericTypeArgumentList "","" 'comma' SimpleDefinedType 'typeArgument' - ; -NamedType - : | 'name' {{VariableExpression}} - | NamedType 'expression' ""."" 'period' 'name' {{PropertyExpression}} - #: ConstantExpression 'typeExpression' {{NamedType}} #should be check if we have a valid type - ; -OptionalPlatform - : - | ""PLATFORM"" 'modifier' - | ""DEPRECATED"" 'modifier' - ; -AnonymousProcedureType - : ""PROCEDURE"" 'procedureToken' OptionalArguments OptionalOfObject 'semicolon' MethodModifiers {{AnonymousProcedureType}} - ; -AnonymousFunctionType - : ""FUNCTION"" 'functionToken' OptionalArguments "":"" 'colon' Type 'type' OptionalOfObject 'semicolon' MethodModifiers {{AnonymousFunctionType}} - ; -OptionalArguments - : - | ""("" 'left' ArgumentList "")"" 'right' - ; -SetType - : ""SET"" 'setToken' ""OF"" 'ofToken' ConstantExpression 'setValue' {{ExpressionSetType}} - | ""SET"" 'setToken' ""OF"" 'ofToken' RangeType 'setValue' {{RangeSetType}} - | ""SET"" 'setToken' ""OF"" 'ofToken' ""("" 'left' TwoItemSetNameList "")"" 'right' {{ValuesSetType}} ### - ; -TwoItemSetNameList #hacked for two items since one item conflicts with constant expression set - : 'name' "","" 'comma' SetNameList - ; -SetNameList - : 'name' - | SetNameList "","" 'comma' 'name' - ; -MetaclassType - : ""CLASS"" 'classToken' ""OF"" 'ofToken' 'name' {{MetaclassType}} - ; -RecordType - : OptionalPacked ""RECORD"" 'recordToken' RecordFieldList ""END"" 'endToken' {{RecordType}} - ; -RecordFieldList - : ImplicitClassSection 'section' ClassSections - | ImplicitClassSection 'section' ClassSections VariantRecordPart - ; -OptionalPacked - : - | ""PACKED"" 'packedToken' - ; -VariantRecordPart - : ""CASE"" 'caseToken' 'value' OptionalType ""OF"" 'ofToken' VariantTypes OptionalSemicolon #{{VariantRecordPart}} - ; -VariantTypes - : VariantType 'variantType' - | VariantTypes 'semicolon' VariantType 'variantType' - ; -VariantType - : VariantNames "":"" 'colon' ""("" 'left' RecordFieldList "")"" 'right' {{VariantType}} - ; -VariantNames - : VariantName 'name' - | VariantNames "","" 'comma' VariantName 'name' - ; -VariantName - : ConstantExpression - ; -RangeType - : RangeValue 'startValue' "".."" 'dots' RangeValue 'endValue' {{RangeType}} - ; -RangeValue - : ConstantExpression #should really be numbers - ; -Number - : - ; -ConstantExpression - : Number 'value' {{LiteralExpression}} - | 'value' {{LiteralExpression}} - | 'name' {{VariableExpression}} - | ConstantExpression 'expression' ""."" 'period' 'name' {{PropertyExpression}} - | ConstantExpression 'leftExpression' ConstantOperator 'operator' ConstantExpression 'rightExpression' {{BinaryExpression}} - | String 'value' {{LiteralExpression}} - | 'value' {{LiteralExpression}} - | ConstantExpression 'receiver' ""("" 'left' ConstantArguments "")"" 'right' {{MethodCallExpression}} - | SetConstructor - | ""("" 'left' ConstantRecord OptionalSemicolon "")"" 'right' {{RecordExpression}} - | ""("" 'left' ConstantArray "")"" 'right' {{ConstantArrayExpression}} - | ""NOT"" 'notToken' ConstantExpression 'expression' {{NotExpression}} - | 'minus' ConstantExpression 'expression' {{MinusExpression}} - | 'plus' ConstantExpression 'expression' {{PlusExpression}} - | ""@"" 'atToken' ConstantExpression 'expression' {{AddressExpression}} - ; -ConstantArray - : ConstantExpressionList - | - ; -ConstantExpressionList - : EnumExpression # hacked -- need one value arrays but that conflicts with parened expressions - | ConstantExpressionList "","" 'comma' EnumExpression - ; -EnumExpression - : ConstantExpression 'expression' - | ConstantExpression 'expression' ""="" 'equalToken' ConstantExpression 'value' - ; -ConstantRecord - : ConstantRecordFields - ; -ConstantRecordFields - : ConstantRecordField 'field' - | ConstantRecordFields 'semicolon' ConstantRecordField 'field' - ; -ConstantRecordField - : 'name' "":"" 'colon' ConstantExpression 'expression' {{ConstantRecordField}} - ; -ConstantArguments - : ConstantExpression 'argument' - | ConstantArguments "","" 'comma' ConstantExpression 'argument' - ; -NewClassType - : ""CLASS"" 'classToken' ClassAttributes Superclass ImplicitClassSection 'implicitClassSection' ClassSections ""END"" 'endToken' {{NewClassType}} - | ""CLASS"" 'classToken' ClassAttributes Superclass {{NewClassType}} - ; -ClassHelperType # attributes and superclass are likely not used - : ""CLASS""'classToken' ClassAttributes ""HELPER"" 'helperToken' ""FOR"" 'forToken' QualifiedName 'class' Superclass ImplicitClassSection 'implicitClassSection' ClassSections ""END"" 'endToken' {{ClassHelperType}} - | ""CLASS""'classToken' ClassAttributes ""HELPER"" 'helperToken' ""FOR"" 'forToken' QualifiedName 'class' Superclass {{ClassHelperType}} - ; -ClassAttributes - : - | ClassAttributes ClassAttribute 'classAttribute' - ; -ClassAttribute - : ""ABSTRACT"" - | ""SEALED"" - ; -OldClassType - : ""OBJECT"" 'objectToken' Superclass ImplicitClassSection 'implicitClassSection' ClassSections ""END"" 'endToken' {{OldClassType}} - ; -OptionalDeprecated - : - | ""DEPRECATED"" 'deprecatedToken' - ; -ImplicitClassSection - : NewClassComponents {{ImplicitClassSection}} - ; -ClassSections - : - | ClassSections ClassSection 'section' - ; -ClassSection - : PrivateClassSection - | ProtectedClassSection - | PublicClassSection - | PublishedClassSection - ; -PrivateClassSection - : ""STRICT"" 'strictToken' ""PRIVATE"" 'privateToken' NewClassComponents {{PrivateClassSection}} - | ""PRIVATE"" 'privateToken' NewClassComponents {{PrivateClassSection}} - ; -ProtectedClassSection - : ""STRICT"" 'strictToken' ""PROTECTED"" 'protectedToken' NewClassComponents {{ProtectedClassSection}} - | ""PROTECTED"" 'protectedToken' NewClassComponents {{ProtectedClassSection}} - ; -PublicClassSection - : ""PUBLIC"" 'publicToken' NewClassComponents {{PublicClassSection}} - ; -PublishedClassSection - : ""PUBLISHED"" 'publishedToken' NewClassComponents {{PublishedClassSection}} - ; -Superclass - : - | ""("" 'left' SuperclassList "")"" 'right' - ; -SuperclassList - : NamedType 'superclass' - | SuperclassList "","" 'comma' NamedType 'superclass' - ; -QualifiedName - : 'name' OptionalGenericTypeArguments {{QualifiedName}} - | 'namespace' OptionalGenericTypeArguments ""."" 'period' 'name' {{QualifiedName}} - ; -NewClassComponents - : - | NewClassComponents NewClassComponent 'component' - ; -NewClassComponent - : VariableNames "":"" 'colon' Type 'type' OptionalPlatform 'semicolon' {{VariableDefinition}} - | ""CLASS"" 'classToken' VarsVars {{ClassVars}} - | Vars - | ConstructorHeader - | MethodAttribute 'attribute' ConstructorHeader {{ConstructorHeader}} - | DestructorHeader - | MethodAttribute 'attribute' DestructorHeader {{DestructorHeader}} - | NewClassMethodComponent - | InterfacePropertyComponent - | InterfaceFunctionAssignment - | InterfaceProcedureAssignment - | ConstantValueList - ; -NewClassMethodComponent - : MethodAttribute 'attribute' ProcedureHeader {{ProcedureHeader}} - | MethodAttribute 'attribute' ClassProcedureHeader {{ClassProcedureHeader}} - | MethodAttribute 'attribute' FunctionHeader {{FunctionHeader}} - | MethodAttribute 'attribute' ClassFunctionHeader {{ClassFunctionHeader}} - | MethodAttribute 'attribute' ClassOperatorHeader {{ClassOperatorHeader}} - | InterfaceMethodComponent - ; -MethodAttribute - : ""["" 'left' ConstantExpression 'expression' ""]"" 'right' {{MethodAttribute}} - ; -InterfaceFunctionAssignment - : ""FUNCTION"" 'function' QualifiedName 'qualifiedName' ""="" 'equalToken' 'name' 'semicolon' {{InterfaceFunctionAssignment}} - ; -InterfaceProcedureAssignment - : ""PROCEDURE"" 'procedureToken' QualifiedName 'qualifiedName' ""="" 'equalToken' 'name' 'semicolon' {{InterfaceProcedureAssignment}} - ; -Type - : SimpleDefinedType - | AnonymousProcedureType - | AnonymousFunctionType - ; -FileType - : ""FILE"" 'fileToken' ""OF"" 'ofToken' Type 'type' {{FileType}} - | ""FILE"" 'fileToken' {{FileType}} - ; -ArrayType - : OptionalPacked ""ARRAY"" 'arrayToken' ArrayBounds ""OF"" 'ofToken' Type 'type' {{ArrayType}} - | OptionalPacked ""ARRAY"" 'arrayToken' ArrayBounds ""OF"" 'ofToken' ""CONST"" 'constToken' {{ArrayType}} - ; -ArrayBounds - : ""["" 'left' ArrayBoundsIndices ""]"" 'right' - | - ; -ArrayBoundsIndices - : ArrayBoundsIndex 'index' - | ArrayBoundsIndices "","" 'comma' ArrayBoundsIndex 'index' - ; -ArrayBoundsIndex - : ConstantExpression - | RangeType - ; -InterfaceType - : InterfaceKeyword 'interfaceToken' Superclass Guid 'guid' NewInterfaceComponents ""END"" 'endToken' {{InterfaceType}} - | InterfaceKeyword 'interfaceToken' {{InterfaceType}} - ; -InterfaceKeyword - : ""INTERFACE"" - | ""DISPINTERFACE"" - ; -Guid - : - | ""["" 'left' ConstantExpression 'string' ""]"" 'right' {{Guid}} - ; -NewInterfaceComponents - : - | NewInterfaceComponents NewInterfaceComponent 'component' - ; -NewInterfaceComponent - : InterfaceMethodComponent - | InterfacePropertyComponent - ; -InterfacePropertyComponent - : PropertyHeader - | ClassPropertyHeader - ; -InterfaceMethodComponent - : ProcedureHeader - | ClassProcedureHeader - | FunctionHeader - | ClassFunctionHeader - | ClassOperatorHeader - ; -ConstructorHeader - : ExternalConstructorHeader - | NonExternalConstructorHeader - ; -DestructorHeader - : ExternalDestructorHeader - | NonExternalDestructorHeader - ; -ProcedureHeader - : ExternalProcedureHeader - | NonExternalProcedureHeader - ; -ClassProcedureHeader - : ExternalClassProcedureHeader - | NonExternalClassProcedureHeader - ; -OptionalOfObject # Don't know what this is - : - | ""OF"" 'ofToken' ""OBJECT"" 'objectToken' - ; -FunctionHeader - : ExternalFunctionHeader - | NonExternalFunctionHeader - ; -ClassFunctionHeader - : ExternalClassFunctionHeader - | NonExternalClassFunctionHeader - ; -ClassOperatorHeader - : ExternalClassOperatorHeader - | NonExternalClassOperatorHeader - ; -OptionalType - : - | "":"" 'colon' Type 'type' - ; -PropertyHeader - : PropertyHeaderVars {{PropertyHeader}} - ; -PropertyHeaderVars - : ""PROPERTY"" 'propertyToken' 'name' PropertyArrayAccessors 'arrayAccessors' OptionalType PropertyValues 'semicolon' PropertyModifiers 'modifier' - ; -ClassPropertyHeader - : ""CLASS"" 'classToken' PropertyHeaderVars {{ClassPropertyHeader}} - ; -PropertyValues - : - | PropertyValues PropertyIndex 'index' - | PropertyValues PropertyReader 'reader' - | PropertyValues PropertyWriter 'writer' - | PropertyValues PropertyDefault 'default' - | PropertyValues PropertyStored 'stored' - | PropertyValues PropertyImplements 'implements' - | PropertyValues PropertyDispid 'dispid' - ; -PropertyArrayAccessors - : - | ""["" 'left' ArgumentList ""]"" 'right' {{PropertyArrayAccessors}} - ; -PropertyIndex - : ""INDEX"" 'indexToken' ConstantExpression 'expression' {{PropertyIndex}} - ; -PropertyReader - : ""READ"" 'readToken' Expression 'expression' {{PropertyReader}} - ; -PropertyWriter - : ""WRITE"" 'writeToken' Expression 'expression' {{PropertyWriter}} - ; -PropertyDispid - : ""DISPID"" 'dispidToken' ConstantExpression 'expression' {{PropertyDispid}} - | ""READONLY"" 'readOnlyToken' ""DISPID"" 'dispidToken' ConstantExpression 'expression' {{PropertyDispid}} - | ""WRITEONLY"" 'writeOnlyToken' ""DISPID"" 'dispidToken' ConstantExpression 'expression' {{PropertyDispid}} - ; -PropertyDefault - : ""DEFAULT"" 'defaultToken' ConstantExpression 'expression' {{PropertyDefault}} - | ""DEFAULT"" 'defaultToken' {{PropertyDefault}} - | ""NODEFAULT"" 'nodefaultToken' {{PropertyDefault}} - ; -PropertyImplements - : ""IMPLEMENTS"" 'implementsToken' PropertyImplementsList {{PropertyImplements}} - ; -PropertyImplementsList - : 'interface' - | PropertyImplementsList "","" 'comma' 'interface' - ; -PropertyStored - : ""STORED"" 'storedToken' 'isStored' {{PropertyStored}} - ; -PropertyModifiers - : - | ""DEFAULT"" 'defaultToken' 'semicolon' {{PropertyModifier}} - ; -MethodModifiers - : - | MethodModifiers MethodModifier 'modifier' - ; -NonExternalMethodModifiers - : - | NonExternalMethodModifiers NonExternalMethodModifier 'modifier' - ; -MethodModifier - : NonExternalMethodModifier - | ExternalMethodModifier - ; -NonExternalMethodModifier - : ModifierKeyword 'modifier' 'semicolon' {{MethodModifier}} - | ""MESSAGE"" 'modifier' ConstantExpression 'expression' 'semicolon' {{MessageMethodModifier}} - | ""DISPID"" 'modifier' ConstantExpression 'expression' 'semicolon' {{MessageMethodModifier}} - ; -ExternalMethodModifier - : ""EXTERNAL"" 'modifier' 'semicolon' {{ExternalMethodModifier}} - | ""EXTERNAL"" 'modifier' 'library' 'semicolon' {{ExternalMethodModifier}} - | ""EXTERNAL"" 'modifier' 'library' ""NAME"" 'nameToken' 'methodName' 'semicolon' {{ExternalMethodModifier}} - | ""EXTERNAL"" 'modifier' 'library' 'semicolon' {{ExternalMethodModifier}} - | ""EXTERNAL"" 'modifier' 'library' ""NAME"" 'nameToken' 'methodName' 'semicolon' {{ExternalMethodModifier}} - | ""FORWARD"" 'modifier' 'semicolon' {{MethodModifier}} - ; -ModifierKeyword - : ""OVERLOAD"" | ""OVERRIDE"" | ""STDCALL"" | ""REGISTER"" | ""ASSEMBLER"" | ""PASCAL"" | ""REINTRODUCE"" | ""VIRTUAL"" | ""DEPRECATED"" | ""UNSAFE"" - | ""ABSTRACT"" | ""NEAR"" | ""FAR"" | ""CDECL"" | ""DYNAMIC"" | ""STATIC"" | ""PLATFORM"" | ""EXPORT"" | ""LOCAL"" | ""INLINE"" | ""FINAL"" | ""SAFECALL"" - ; -ArgumentList - : - | Arguments - ; -Arguments - : Argument 'argument' - | Arguments 'semicolon' Argument 'argument' - ; -Argument - : ArgumentType VariableNames "":"" 'colon' Type 'type' OptionalValue {{Argument}} - | ArgumentType VariableNames {{Argument}} - ; -VariableNames - : 'name' - | VariableNames "","" 'comma' 'name' - ; -OptionalValue - : - | ""="" 'equal' ConstantExpression 'value' - ; -ArgumentType - : - | ""VAR"" 'typeToken' - | ""CONST"" 'typeToken' - | ""OUT"" 'typeToken' - ; -ImplementationSection - : - | ""IMPLEMENTATION"" 'implementationToken' UsesList Definitions ImplementationCode 'code' {{ImplementationSection}} - ; -ImplementationCode - : - | ""BEGIN"" 'beginToken' Statements {{ImplementationCode}} - ; -Definitions - : - | Definitions Definition 'definition' - ; -Definition - : ConstructorDefinition - | DestructorDefinition - | ProcedureDefinition - | ClassProcedureDefinition - | FunctionDefinition - | ClassFunctionDefinition - | ClassOperatorDefinition - | DefinedTypeList - | Vars - | ConstantValueList - | ResourceStringList - ; -ConstructorDefinition - : NonExternalConstructorHeader 'header' MethodComponents {{ConstructorDefinition}} - | ExternalConstructorHeader 'header' {{ConstructorDefinition}} - ; -ExternalConstructorHeader - : NonExternalConstructorHeader ExternalMethodModifier 'modifier' MethodModifiers {{ConstructorHeader}} - ; -NonExternalConstructorHeader - : ""CONSTRUCTOR"" 'constructorToken' QualifiedName 'qualifiedName' OptionalArguments 'semicolon' NonExternalMethodModifiers {{ConstructorHeader}} - ; -DestructorDefinition - : NonExternalDestructorHeader 'header' MethodComponents {{DestructorDefinition}} - | ExternalDestructorHeader 'header' {{DestructorDefinition}} - ; -ExternalDestructorHeader - : NonExternalDestructorHeader ExternalMethodModifier 'modifier' MethodModifiers {{DestructorHeader}} - ; -NonExternalDestructorHeader - : ""DESTRUCTOR"" 'destructorToken' QualifiedName 'qualifiedName' OptionalParens 'semicolon' NonExternalMethodModifiers {{DestructorHeader}} - ; -OptionalParens - : - | ""("" 'left' "")"" 'right' - ; -ProcedureDefinition - : NonExternalProcedureHeader 'header' MethodComponents {{ProcedureDefinition}} - | ExternalProcedureHeader 'header' {{ProcedureDefinition}} - ; -ExternalProcedureHeader - : ExternalProcedureHeaderVars {{ProcedureHeader}} - ; -ExternalProcedureHeaderVars - : NonExternalProcedureHeaderVars ExternalMethodModifier 'modifier' MethodModifiers - ; -NonExternalProcedureHeader - : NonExternalProcedureHeaderVars {{ProcedureHeader}} - ; -NonExternalProcedureHeaderVars - : ""PROCEDURE"" 'procedureToken' QualifiedName 'qualifiedName' OptionalArguments 'semicolon' NonExternalMethodModifiers - ; -ClassProcedureDefinition - : NonExternalClassProcedureHeader 'header' MethodComponents {{ClassProcedureDefinition}} - | ExternalClassProcedureHeader 'header' {{ClassProcedureDefinition}} - ; -ExternalClassProcedureHeader - : ""CLASS"" 'classToken' ExternalProcedureHeaderVars {{ClassProcedureHeader}} - ; -NonExternalClassProcedureHeader - : ""CLASS"" 'classToken' NonExternalProcedureHeaderVars {{ClassProcedureHeader}} - ; -FunctionDefinition - : NonExternalFunctionHeader 'header' MethodComponents {{FunctionDefinition}} - | ExternalFunctionHeader 'header' {{FunctionDefinition}} - ; -ExternalFunctionHeader - : ExternalFunctionHeaderVars {{FunctionHeader}} - ; -ExternalFunctionHeaderVars - : NonExternalFunctionHeaderVars ExternalMethodModifier 'modifier' MethodModifiers - ; -NonExternalFunctionHeader - : NonExternalFunctionHeaderVars {{FunctionHeader}} - ; -NonExternalFunctionHeaderVars - : ""FUNCTION"" 'functionToken' QualifiedName 'qualifiedName' OptionalArguments OptionalType 'semicolon' NonExternalMethodModifiers - ; -ClassFunctionDefinition - : NonExternalClassFunctionHeader 'header' MethodComponents {{ClassFunctionDefinition}} - | ExternalClassFunctionHeader 'header' {{ClassFunctionDefinition}} - ; -ExternalClassFunctionHeader - : ""CLASS"" 'classToken' ExternalFunctionHeaderVars {{ClassFunctionHeader}} - ; -NonExternalClassFunctionHeader - : ""CLASS"" 'classToken' NonExternalFunctionHeaderVars {{ClassFunctionHeader}} - ; -ClassOperatorDefinition - : NonExternalClassOperatorHeader 'header' MethodComponents {{ClassOperatorDefinition}} - | ExternalClassOperatorHeader 'header' {{ClassOperatorDefinition}} - ; -ExternalClassOperatorHeader - : NonExternalClassOperatorHeader ExternalMethodModifier 'modifier' MethodModifiers {{ClassOperatorHeader}} - ; -NonExternalClassOperatorHeader - : ""CLASS"" 'classToken' ""OPERATOR"" 'operatorToken' QualifiedName 'qualifiedName' OptionalArguments OptionalType 'semicolon' NonExternalMethodModifiers {{ClassOperatorHeader}} - ; -MethodComponents - : MethodVariables StatementBlock 'block' 'semicolon' - ; -MethodVariables - : MethodVariables MethodVariable 'definition' - | - ; -MethodVariable - : Vars - | DefinedTypeList - | ConstantValueList - | ProcedureDefinition - | FunctionDefinition - | Labels - ; -Labels - : ""LABEL"" 'labelToken' VariableNames 'semicolon' {{LabelVariable}} - ; -Vars - : VarsVars {{Vars}} - ; -VarsVars - : ""VAR"" 'varToken' VariablesList - | ""THREADVAR"" 'varToken' VariablesList - ; -VariablesList - : Variable 'variableDefinition' - | VariablesList Variable 'variableDefinition' - ; -Variable - : VariableNames "":"" 'colon' Type 'type' OptionalPlatform OptionalValue 'semicolon' {{Variable}} - ; -Statements - : Statement 'statement' - | Statements 'semicolon' Statement 'statement' - ; -Statement - : Expression - | RepeatStatement {{RepeatStatement}} - | IfStatement {{IfStatement}} - | WithStatement {{WithStatement}} - | TryStatement {{TryStatement}} - | CaseStatement {{CaseStatement}} - | RaiseStatement {{RaiseStatement}} - | ForStatement {{ForStatement}} - | ForInStatement {{ForInStatement}} - | WhileStatement {{WhileStatement}} - | GotoStatement {{GotoStatement}} - | StatementBlock - | LabeledStatement {{LabeledStatement}} - | {{EmptyStatement}} - ; -LabeledStatement - : 'label' "":"" 'colon' Statement 'statement' - | 'label' "":"" 'colon' Statement 'statement' - ; -GotoStatement - : ""GOTO"" 'gotoToken' 'label' - | ""GOTO"" 'gotoToken' 'label' - ; -RepeatStatement - : ""REPEAT"" 'repeatToken' Statements ""UNTIL"" 'untilToken' Expression 'expression' - ; -IfStatement - : ""IF"" 'ifToken' Expression 'expression' ""THEN"" 'thenToken' Statement 'thenStatement' - | ""IF"" 'ifToken' Expression 'expression' ""THEN"" 'thenToken' Statement 'thenStatement' ""ELSE"" 'elseToken' Statement 'elseStatement' - ; -WithStatement - : ""WITH"" 'withToken' WithExpressions ""DO"" 'doToken' Statement 'statement' - ; -WithExpressions - : Expression 'expression' - | WithExpressions "","" 'comma' Expression 'expression' - ; -TryStatement - : ""TRY"" 'tryToken' Statements Except 'except' Finally 'finally' ""END"" 'endToken' - ; -Except - : - | ""EXCEPT"" 'exceptToken' OnDos PossibleExceptElse 'else' {{Except}} - | ""EXCEPT"" 'exceptToken' Statements PossibleExceptElse 'else' {{Except}} - ; -OnDos - : OnDo 'exceptionCase' - | OnDos OnDo 'exceptionCase' - ; -OnDo - : ""ON"" 'onToken' QualifiedName 'exception' OptionalType ""DO"" 'doToken' Statements {{OnDo}} - ; -PossibleExceptElse - : - | ""ELSE"" 'elseToken' Statements {{ExceptElse}} - ; -Finally - : - | ""FINALLY"" 'finallyToken' Statements {{Finally}} - ; -CaseStatement - : ""CASE"" 'caseToken' Expression 'expression' ""OF"" 'ofToken' CaseOptionList ElseCase ""END"" 'endToken' - ; -OptionalSemicolon - : - | 'semicolon' - ; -CaseOptionList - : CaseOptions OptionalSemicolon - ; -CaseOptions - : CaseOption 'option' - | CaseOptions 'semicolon' CaseOption 'option' - ; -CaseOption - : CaseLabel 'label' "":"" 'colon' Statement 'statement' {{CaseOption}} - ; -CaseLabel - : BaseCaseLabel - | CaseLabels "","" 'comma' BaseCaseLabel 'label' {{MultiValueCaseLabel}} - ; -CaseLabels - : BaseCaseLabel 'label' - | CaseLabels "","" 'comma' BaseCaseLabel 'label' - ; -BaseCaseLabel - : ConstantExpression 'value' {{CaseLabel}} - | ConstantExpression 'fromValue' "".."" 'dots' ConstantExpression 'toValue' {{RangeCaseLabel}} - ; -ElseCase - : - | ""ELSE"" 'elseToken' Statements - ; -RaiseStatement - : ""RAISE"" 'raiseToken' Expression 'expression' OptionalRaiseAt - | ""RAISE"" 'raiseToken' - ; -OptionalRaiseAt - : - | 'atToken' QualifiedName 'location' - ; -ForStatement - : ""FOR"" 'forToken' VariableExpression 'variable' "":="" 'assignmentToken' Expression 'fromExpr' ToDownTo 'toToken' Expression 'toExpr' ""DO"" 'doToken' Statement 'statement' - ; -ForInStatement - : ""FOR"" 'forToken' VariableExpression 'variable' ""IN"" 'inToken' Expression 'fromExpr' ""DO"" 'doToken' Statement 'statement' - ; -ToDownTo - : ""TO"" - | ""DOWNTO"" - ; -WhileStatement - : ""WHILE"" 'whileToken' Expression 'expression' ""DO"" 'doToken' Statement 'statement' - ; -StatementBlock - : ""BEGIN"" 'beginToken' Statements ""END"" 'endToken' {{StatementBlock}} - | AsmBlock - ; -AsmBlock - : BeforeAsm ""ASM"" 'asmToken' ""END"" 'endToken' {{AsmBlock}} - ; -BeforeAsm - : {parseAll ifFalse: [scanner skipToEndToken. currentState scannerState: scanner currentState]. nil} - ; -Expression - : VariableExpression - | InstantiatedGenericVariableExpression - | Expression 'expression' ""."" 'period' 'name' {{PropertyExpression}} - | Expression 'expression' ""."" 'period' ""&OPERATOR"" 'name' {{PropertyExpression}} - | Expression 'receiver' ""("" 'left' MethodArguments "")"" 'right' {{MethodCallExpression}} - | Expression 'receiver' ""("" 'left' "")"" 'right' {{MethodCallExpression}} - | InheritedFunctionCall - | Number 'value' {{LiteralExpression}} - | String 'value' {{LiteralExpression}} - | 'value' {{LiteralExpression}} - | Expression 'leftExpression' Operator 'operator' Expression 'rightExpression' {{BinaryExpression}} - | ""("" 'leftParen' Expression "")"" 'rightParen' {{Expression}} - | Expression 'lhs' "":="" 'assignment' Expression 'value' {{AssignmentExpression}} # allows for non-sense assignments - | Expression 'expression' ArrayIndex {{ArrayExpression}} - | ""@"" 'atToken' Expression 'expression' {{AddressExpression}} # should only be variables - | ""NOT"" 'notToken' Expression 'expression' {{NotExpression}} - | 'minus' Expression 'expression' {{MinusExpression}} - | 'plus' Expression 'expression' {{PlusExpression}} - | SetConstructor - | Expression 'expression' 'upArrow' {{PointerExpression}} - | 'value' {{LiteralExpression}} - | MemExpression - ; -MemExpression - : ""MEM"" 'mem' ""["" 'leftBrace' Expression 'baseExpression' "":"" 'colon' Expression 'addressExpression' ""]"" 'rightBrace' {{}} - | ""MEMW"" 'mem' ""["" 'leftBrace' Expression 'baseExpression' "":"" 'colon' Expression 'addressExpression' ""]"" 'rightBrace' {{}} - ; -VariableExpression - : 'name' {{VariableExpression}} - ; -InstantiatedGenericVariableExpression - : 'name' InstantiatedGenericTypeArguments {{}} - ; -SetConstructor - : ""["" 'left' SetConstructorValues ""]"" 'right' {{SetExpression}} - | ""["" 'left' ""]"" 'right' {{SetExpression}} - ; -SetConstructorValues - : SetValue 'value' - | SetConstructorValues "","" 'comma' SetValue 'value' - ; -SetValue - : Expression 'value' {{SingleSetValue}} - | Expression 'fromValue' "".."" 'dots' Expression 'toValue' {{RangeSetValue}} - ; -ArrayIndex - : ""["" 'left' ArrayIndices ""]"" 'right' - ; -ArrayIndices - : Expression 'index' - | ArrayIndices "","" 'comma' Expression 'index' - ; -String - : - ; -InheritedFunctionCall - : ""INHERITED"" 'inheritedToken' 'name' ""("" 'left' MethodArguments "")"" 'right' {{InheritedFunctionCall}} - | ""INHERITED"" 'inheritedToken' 'name' ""("" 'left' "")"" 'right' {{InheritedFunctionCall}} - | ""INHERITED"" 'inheritedToken' 'name' {{InheritedFunctionCall}} - | ""INHERITED"" 'inheritedToken' {{InheritedFunctionCall}} - ; -MethodArguments - : MethodArgument 'argument' - | MethodArguments "","" 'comma' MethodArgument 'argument' - ; -MethodArgument - : Expression - | MethodArgument 'argument' "":"" 'colon' Expression 'formatExpression' {{FormattedMethodArgument}} - ; -Operator - : ""="" 'operator' - | ConstantOperator 'operator' - ; -ConstantOperator - : ""AND"" - | ""OR"" - | ""XOR"" - | ""<>"" - | ""DIV"" - | ""MOD"" - | ""*"" - | ""/"" - | - | - | ""SHL"" - | ""SHR"" - | ""AS"" - | "">"" - | ""<"" - | ""<="" - | "">="" - | ""IN"" - | ""IS"" - ; -InitializationSection - : - | ""INITIALIZATION"" 'initializationToken' Statements {{InitializationSection}} - ; -FinalizationSection - : - | ""FINALIZATION"" 'finalizationToken' Statements {{FinalizationSection}} - ; -EndFile - : ""END"" 'endToken' ""."" 'period' - ;" -] - -{ #category : #'file types' } -DelphiParser class >> fileExtension [ - ^ '.pas' -] - -{ #category : #'file types' } -DelphiParser class >> fileExtensionType [ - ^ 'Delphi files' -] - -{ #category : #generated } -DelphiParser class >> reduceTable [ -^#( - #(156 0 #reduceActionForUsesList1: 5200897 false ) - #(348 0 #reduceActionForBeforeAsm1: 30911489 false ) - #(318 0 #reduceActionForStatement14: 27430926 false ) - #(181 0 #nil 8436737 false ) - #(192 0 #nil 10063873 false ) - #(145 1 #reduceActionForFile2: 4014082 false ) - #(145 1 #reduceActionForFile3: 4014083 false ) - #(145 1 #reduceActionForFile1: 4014081 false ) - #(155 0 #nil 5086209 false ) - #(153 1 #reduceActionForUnitFile2: 4761602 false ) - #(310 0 #reduceActionForMethodVariables2: 26698754 false ) - #(359 1 #reduceActionForInheritedFunctionCall4: 33376260 false ) - #(340 1 #reduceActionForRaiseStatement2: 30077954 false ) - #(351 1 #reduceActionForVariableExpression1: 32673793 false ) - #(200 1 #liftFirstValue: 10756097 false ) - #(358 1 #liftFirstValue: 33353729 false ) - #(349 1 #reduceActionForExpression10: 31029258 false ) - #(349 1 #reduceActionForExpression10: 31029256 false ) - #(318 1 #reduceActionForStatement13: 27430925 false ) - #(318 1 #reduceActionForStatement11: 27430923 false ) - #(318 1 #reduceActionForStatement2: 27430914 false ) - #(318 1 #reduceActionForStatement3: 27430915 false ) - #(318 1 #reduceActionForStatement4: 27430916 false ) - #(318 1 #reduceActionForStatement5: 27430917 false ) - #(318 1 #reduceActionForStatement6: 27430918 false ) - #(318 1 #reduceActionForStatement7: 27430919 false ) - #(318 1 #reduceActionForStatement8: 27430920 false ) - #(318 1 #reduceActionForStatement9: 27430921 false ) - #(318 1 #reduceActionForStatement10: 27430922 false ) - #(318 1 #liftFirstValue: 27430924 false ) - #(346 1 #liftFirstValue: 30732290 false ) - #(318 1 #liftFirstValue: 27430913 false ) - #(349 1 #liftFirstValue: 31029270 false ) - #(349 1 #liftFirstValue: 31029249 false ) - #(349 1 #liftFirstValue: 31029250 false ) - #(349 1 #liftFirstValue: 31029267 false ) - #(349 1 #reduceActionForExpression10: 31029257 false ) - #(349 1 #liftFirstValue: 31029255 false ) - #(349 1 #reduceActionForExpression10: 31029269 false ) - #(202 0 #reduceActionForConstantArray2: 11838466 false ) - #(232 1 #reduceActionForFileType2: 16382978 false ) - #(185 0 #reduceActionForOptionalArguments1: 9123841 false ) - #(192 1 #liftFirstValue: 10063874 false ) - #(201 1 #reduceActionForVariableExpression1: 10778627 false ) - #(181 1 #reduceActionForVariableExpression1: 8436738 false ) - #(201 1 #reduceActionForExpression10: 10778631 false ) - #(231 1 #liftFirstValue: 16301057 false ) - #(178 1 #reduceActionForSimpleDefinedType1: 7680001 false ) - #(231 1 #liftFirstValue: 16301058 false ) - #(231 1 #liftFirstValue: 16301059 false ) - #(178 1 #liftFirstValue: 7680009 false ) - #(178 1 #liftFirstValue: 7680004 false ) - #(178 1 #liftFirstValue: 7680010 false ) - #(201 1 #reduceActionForExpression10: 10778625 false ) - #(199 1 #liftFirstValue: 10692609 false ) - #(178 1 #liftFirstValue: 7680007 false ) - #(178 1 #liftFirstValue: 7680003 false ) - #(201 1 #liftFirstValue: 10778633 false ) - #(201 1 #reduceActionForExpression10: 10778630 false ) - #(201 1 #reduceActionForExpression10: 10778626 false ) - #(171 0 #reduceActionForOptionalArguments1: 6831105 false ) - #(159 1 #reduceActionForFullModuleName1: 5468161 false ) - #(182 0 #nil 8697857 false ) - #(157 1 #reduceActionForUsesModuleList1: 5279745 false ) - #(158 1 #reduceActionForUsesModule1: 5354497 false ) - #(150 0 #reduceActionForMethodVariables2: 4541441 false ) - #(279 0 #nil 22380545 false ) - #(152 1 #reduceActionForMainMethod1: 4701185 false ) - #(349 2 #reduceActionForExpression15: 31029263 false ) - #(317 1 #reduceActionForStatements1: 27327489 false ) - #(320 2 #reduceActionForGotoStatement1: 28042241 false ) - #(320 2 #reduceActionForGotoStatement1: 28042242 false ) - #(359 2 #reduceActionForInheritedFunctionCall3: 33376259 false ) - #(349 2 #reduceActionForExpression16: 31029264 false ) - #(341 0 #reduceActionForOptionalRaiseAt1: 30186497 false ) - #(326 0 #nil 28786689 false ) - #(324 1 #reduceActionForStatements1: 28580865 false ) - #(353 2 #reduceActionForSetConstructor2: 32847874 false ) - #(355 1 #reduceActionForSetValue1: 33078273 false ) - #(354 1 #reduceActionForStatements1: 32977921 false ) - #(349 2 #reduceActionForExpression17: 31029265 false ) - #(349 2 #reduceActionForExpression18: 31029266 false ) - #(352 2 #reduceActionForInstantiatedGenericVariableExpression1: 32743425 false ) - #(363 1 #liftFirstValue: 34074631 false ) - #(363 1 #liftFirstValue: 34074632 false ) - #(363 1 #liftFirstValue: 34074639 false ) - #(363 1 #liftFirstValue: 34074640 false ) - #(363 1 #liftFirstValue: 34074628 false ) - #(362 1 #liftFirstValue: 34010113 false ) - #(363 1 #liftFirstValue: 34074638 false ) - #(363 1 #liftFirstValue: 34074641 false ) - #(363 1 #liftFirstValue: 34074625 false ) - #(363 1 #liftFirstValue: 34074637 false ) - #(363 1 #liftFirstValue: 34074629 false ) - #(363 1 #liftFirstValue: 34074642 false ) - #(363 1 #liftFirstValue: 34074643 false ) - #(363 1 #liftFirstValue: 34074630 false ) - #(363 1 #liftFirstValue: 34074626 false ) - #(363 1 #liftFirstValue: 34074635 false ) - #(363 1 #liftFirstValue: 34074636 false ) - #(363 1 #liftFirstValue: 34074627 false ) - #(363 1 #liftFirstValue: 34074634 false ) - #(363 1 #liftFirstValue: 34074633 false ) - #(349 2 #reduceActionForExpression20: 31029268 false ) - #(349 2 #reduceActionForExpression14: 31029262 false ) - #(362 1 #liftFirstValue: 34010114 false ) - #(204 1 #reduceActionForUsesModule1: 12065793 false ) - #(202 1 #reduceActionForConstantArray1: 11838465 false ) - #(203 1 #reduceActionForUsesModuleList1: 11885569 false ) - #(332 0 #nil 29378561 false ) - #(205 1 #reduceActionForConstantArray1: 12200961 false ) - #(206 1 #reduceActionForStatements1: 12243969 false ) - #(201 2 #reduceActionForExpression15: 10778639 false ) - #(273 0 #reduceActionForArgumentList1: 21869569 false ) - #(278 0 #nil 22293505 false ) - #(201 2 #reduceActionForExpression16: 10778636 false ) - #(248 0 #reduceActionForOptionalRaiseAt1: 17988609 false ) - #(178 2 #reduceActionForSimpleDefinedType11: 7680011 false ) - #(201 2 #reduceActionForExpression17: 10778637 false ) - #(201 2 #reduceActionForExpression18: 10778638 false ) - #(178 2 #reduceActionForSimpleDefinedType2: 7680002 false ) - #(234 0 #reduceActionForOptionalArguments1: 16705538 false ) - #(225 0 #reduceActionForMethodVariables2: 14807041 false ) - #(178 2 #reduceActionForSimpleDefinedType5: 7680005 false ) - #(182 1 #liftFirstValue: 8697859 false ) - #(182 1 #liftFirstValue: 8697858 false ) - #(156 3 #reduceActionForUsesList2: 5200898 false ) - #(160 0 #reduceActionForMethodVariables2: 5593089 false ) - #(364 0 #nil 34257921 false ) - #(146 3 #reduceActionForProgramFile2: 4112386 false ) - #(311 1 #liftFirstValue: 26770435 false ) - #(311 1 #liftFirstValue: 26770434 false ) - #(311 1 #liftFirstValue: 26770436 false ) - #(290 1 #reduceActionForProcedureDefinition2: 23985154 false ) - #(291 1 #reduceActionForExternalProcedureHeader1: 24152065 false ) - #(293 1 #reduceActionForExternalProcedureHeader1: 24349697 false ) - #(311 1 #liftFirstValue: 26770437 false ) - #(298 1 #reduceActionForFunctionDefinition2: 25027586 false ) - #(299 1 #reduceActionForExternalFunctionHeader1: 25189377 false ) - #(301 1 #reduceActionForExternalFunctionHeader1: 25381889 false ) - #(310 2 #reduceActionForMethodVariables1: 26698753 false ) - #(311 1 #liftFirstValue: 26770438 false ) - #(311 1 #liftFirstValue: 26770433 false ) - #(313 1 #reduceActionForVars1: 26986497 false ) - #(349 3 #reduceActionForExpression12: 31029260 false ) - #(346 3 #reduceActionForStatementBlock1: 30732289 false ) - #(340 3 #reduceActionForRaiseStatement1: 30077953 false ) - #(330 0 #nil 29189121 false ) - #(353 3 #reduceActionForSetConstructor1: 32847873 false ) - #(319 3 #reduceActionForLabeledStatement1: 27907073 false ) - #(180 1 #reduceActionForStatements1: 8273921 false ) - #(319 3 #reduceActionForLabeledStatement1: 27907074 false ) - #(347 3 #reduceActionForAsmBlock1: 30836737 false ) - #(349 3 #reduceActionForExpression6: 31029254 false ) - #(361 1 #liftFirstValue: 33875969 false ) - #(360 1 #reduceActionForStatements1: 33768449 false ) - #(349 3 #reduceActionForExpression4: 31029252 false ) - #(349 3 #reduceActionForExpression4: 31029251 false ) - #(349 3 #reduceActionForExpression13: 31029261 false ) - #(357 1 #reduceActionForStatements1: 33265665 false ) - #(349 3 #reduceActionForExpression11: 31029259 false ) - #(201 3 #reduceActionForConstantExpression11: 10778635 false ) - #(332 1 #liftFirstValue: 29378562 false ) - #(232 3 #reduceActionForFileType1: 16382977 false ) - #(278 1 #liftFirstValue: 22293507 false ) - #(278 1 #liftFirstValue: 22293508 false ) - #(278 1 #liftFirstValue: 22293506 false ) - #(273 1 #reduceActionForConstantArray1: 21869570 false ) - #(274 1 #reduceActionForStatements1: 21903361 false ) - #(186 3 #reduceActionForSetType2: 9188354 false ) - #(186 3 #reduceActionForSetType1: 9188353 false ) - #(224 2 #reduceActionForQualifiedName1: 14606337 false ) - #(181 3 #reduceActionForExpression4: 8436739 false ) - #(216 0 #reduceActionForMethodVariables2: 13673473 false ) - #(215 1 #reduceActionForImplicitClassSection1: 13600769 false ) - #(198 3 #reduceActionForRangeType1: 10602497 false ) - #(208 1 #reduceActionForStatements1: 12503041 false ) - #(201 3 #reduceActionForExpression4: 10778628 false ) - #(201 3 #reduceActionForExpression11: 10778629 false ) - #(178 3 #reduceActionForSimpleDefinedType8: 7680008 false ) - #(172 1 #reduceActionForStatements1: 6918145 false ) - #(159 3 #reduceActionForFullModuleName2: 5468162 false ) - #(149 4 #reduceActionForLibraryLine1: 4424705 false ) - #(147 4 #reduceActionForLibraryLine1: 4228097 false ) - #(154 4 #reduceActionForLibraryLine1: 4981761 false ) - #(157 3 #reduceActionForUsesModuleList2: 5279746 false ) - #(158 3 #reduceActionForLabeledStatement1: 5354498 false ) - #(146 4 #reduceActionForProgramFile1: 4112385 false ) - #(150 2 #reduceActionForMethodVariables1: 4541442 false ) - #(155 3 #reduceActionForInterfaceSection2: 5086210 false ) - #(281 0 #reduceActionForMethodVariables2: 22612993 false ) - #(365 0 #nil 34368513 false ) - #(252 0 #reduceActionForOptionalRaiseAt1: 18335745 false ) - #(162 2 #reduceActionForConstantValueList1: 5822465 false ) - #(163 1 #reduceActionForConstantValues1: 5901313 false ) - #(276 1 #reduceActionForStatements1: 22137857 false ) - #(314 2 #reduceActionForVarsVars2: 27016194 false ) - #(315 1 #reduceActionForConstantValues1: 27104257 false ) - #(168 2 #reduceActionForDefinedTypeList1: 6516737 false ) - #(169 1 #reduceActionForConstantValues1: 6597633 false ) - #(314 2 #reduceActionForVarsVars2: 27016193 false ) - #(290 2 #reduceActionForProcedureDefinition1: 23985153 false ) - #(267 0 #reduceActionForMethodVariables2: 20357121 false ) - #(298 2 #reduceActionForFunctionDefinition1: 25027585 false ) - #(309 3 #reduceActionForMethodComponents1: 26610689 false ) - #(317 3 #reduceActionForStatements2: 27327490 false ) - #(338 1 #reduceActionForBaseCaseLabel1: 29865985 false ) - #(339 0 #reduceActionForElseCase1: 30027777 false ) - #(334 1 #reduceActionForStatements1: 29483009 false ) - #(337 1 #reduceActionForStatements1: 29776897 false ) - #(336 1 #liftFirstValue: 29671425 false ) - #(322 4 #reduceActionForIfStatement1: 28247041 false ) - #(359 4 #reduceActionForInheritedFunctionCall2: 33376258 false ) - #(341 2 #reduceActionForGotoStatement1: 30186498 false ) - #(321 4 #reduceActionForRepeatStatement1: 28143617 false ) - #(329 0 #nil 29113345 false ) - #(327 1 #reduceActionForConstantValues1: 28946433 false ) - #(345 4 #reduceActionForLibraryLine1: 30626817 false ) - #(324 3 #reduceActionForStatements2: 28580866 false ) - #(323 4 #reduceActionForRepeatStatement1: 28486657 false ) - #(355 3 #reduceActionForSetValue2: 33078274 false ) - #(354 3 #reduceActionForStatements2: 32977922 false ) - #(179 3 #reduceActionForInstantiatedGenericTypeArguments1: 8173569 false ) - #(349 4 #reduceActionForExpression5: 31029253 false ) - #(356 3 #reduceActionForInstantiatedGenericTypeArguments1: 33211393 false ) - #(207 3 #reduceActionForConstantRecordField1: 12378113 false ) - #(204 3 #reduceActionForLabeledStatement1: 12065794 false ) - #(203 3 #reduceActionForUsesModuleList2: 11885570 false ) - #(201 4 #reduceActionForConstantExpression10: 10778634 false ) - #(206 3 #reduceActionForStatements2: 12243970 false ) - #(185 3 #reduceActionForInstantiatedGenericTypeArguments1: 9123842 false ) - #(275 2 #reduceActionForArgument2: 21998594 false ) - #(248 2 #reduceActionForGotoStatement1: 17988610 false ) - #(236 1 #liftFirstValue: 16882690 false ) - #(236 1 #liftFirstValue: 16882689 false ) - #(235 1 #reduceActionForStatements1: 16771073 false ) - #(190 4 #reduceActionForRecordType1: 9822209 false ) - #(191 2 #reduceActionForRecordFieldList1: 9927681 false ) - #(226 1 #liftFirstValue: 14886924 false ) - #(225 2 #reduceActionForMethodVariables1: 14807042 false ) - #(226 1 #liftFirstValue: 14886920 false ) - #(226 1 #liftFirstValue: 14886922 false ) - #(226 1 #liftFirstValue: 14886923 false ) - #(226 1 #liftFirstValue: 14886921 false ) - #(227 1 #liftFirstValue: 15401990 false ) - #(226 1 #liftFirstValue: 14886916 false ) - #(226 1 #liftFirstValue: 14886918 false ) - #(243 1 #liftFirstValue: 17514497 false ) - #(243 1 #liftFirstValue: 17514498 false ) - #(243 1 #liftFirstValue: 17514499 false ) - #(243 1 #liftFirstValue: 17514500 false ) - #(243 1 #liftFirstValue: 17514501 false ) - #(242 1 #liftFirstValue: 17441793 false ) - #(253 1 #reduceActionForPropertyHeader1: 18383873 false ) - #(242 1 #liftFirstValue: 17441794 false ) - #(244 1 #liftFirstValue: 17652737 false ) - #(244 1 #liftFirstValue: 17652738 false ) - #(245 1 #liftFirstValue: 17736705 false ) - #(245 1 #liftFirstValue: 17736706 false ) - #(246 1 #liftFirstValue: 17817601 false ) - #(246 1 #liftFirstValue: 17817602 false ) - #(247 1 #liftFirstValue: 17895425 false ) - #(247 1 #liftFirstValue: 17895426 false ) - #(249 1 #liftFirstValue: 18080769 false ) - #(249 1 #liftFirstValue: 18080770 false ) - #(250 1 #liftFirstValue: 18155521 false ) - #(250 1 #liftFirstValue: 18155522 false ) - #(251 1 #liftFirstValue: 18245633 false ) - #(251 1 #liftFirstValue: 18245634 false ) - #(226 1 #liftFirstValue: 14886915 false ) - #(201 4 #reduceActionForExpression5: 10778632 false ) - #(178 4 #reduceActionForSimpleDefinedType6: 7680006 false ) - #(171 3 #reduceActionForInstantiatedGenericTypeArguments1: 6831106 false ) - #(211 0 #reduceActionForMethodVariables2: 13271041 false ) - #(238 1 #liftFirstValue: 17133570 false ) - #(238 1 #liftFirstValue: 17133569 false ) - #(222 0 #reduceActionForOptionalArguments1: 14445569 false ) - #(170 4 #reduceActionForNamedDefinedType1: 6705153 false ) - #(173 1 #reduceActionForUsesModule1: 7061507 false ) - #(173 1 #reduceActionForUsesModule1: 7061508 false ) - #(177 1 #liftFirstValue: 7568388 false ) - #(177 1 #liftFirstValue: 7568385 false ) - #(177 1 #liftFirstValue: 7568389 false ) - #(177 1 #liftFirstValue: 7568386 false ) - #(177 1 #liftFirstValue: 7568387 false ) - #(237 1 #reduceActionForInterfaceType2: 16939010 false ) - #(148 5 #reduceActionForLibraryFile1: 4344833 false ) - #(160 2 #reduceActionForMethodVariables1: 5593090 false ) - #(161 1 #liftFirstValue: 5687299 false ) - #(161 1 #liftFirstValue: 5687298 false ) - #(161 1 #liftFirstValue: 5687297 false ) - #(161 1 #liftFirstValue: 5687300 false ) - #(161 1 #liftFirstValue: 5687301 false ) - #(161 1 #liftFirstValue: 5687302 false ) - #(280 0 #nil 22526977 false ) - #(364 2 #reduceActionForInitializationSection2: 34257922 false ) - #(163 2 #reduceActionForMethodVariables1: 5901314 false ) - #(312 3 #reduceActionForLabels1: 26894337 false ) - #(315 2 #reduceActionForMethodVariables1: 27104258 false ) - #(169 2 #reduceActionForMethodVariables1: 6597634 false ) - #(271 2 #reduceActionForExternalMethodModifier1: 20926465 false ) - #(271 2 #reduceActionForExternalMethodModifier6: 20926470 false ) - #(292 3 #reduceActionForExternalProcedureHeaderVars1: 24231937 false ) - #(300 3 #reduceActionForExternalFunctionHeaderVars1: 25266177 false ) - #(333 2 #reduceActionForCaseOptionList1: 29430785 false ) - #(344 1 #liftFirstValue: 30594050 false ) - #(344 1 #liftFirstValue: 30594049 false ) - #(359 5 #reduceActionForInheritedFunctionCall1: 33376257 false ) - #(326 3 #reduceActionForExcept3: 28786691 false ) - #(327 2 #reduceActionForMethodVariables1: 28946434 false ) - #(326 3 #reduceActionForExcept2: 28786690 false ) - #(330 2 #reduceActionForFinally2: 29189122 false ) - #(325 5 #reduceActionForTryStatement1: 28686337 false ) - #(180 3 #reduceActionForStatements2: 8273922 false ) - #(360 3 #reduceActionForStatements2: 33768450 false ) - #(361 3 #reduceActionForMethodArgument2: 33875970 false ) - #(357 3 #reduceActionForStatements2: 33265666 false ) - #(274 3 #reduceActionForStatements2: 21903362 false ) - #(183 5 #reduceActionForAnonymousProcedureType1: 8774657 false ) - #(186 5 #reduceActionForSetType3: 9188355 false ) - #(224 4 #reduceActionForQualifiedName2: 14606338 false ) - #(234 3 #reduceActionForInstantiatedGenericTypeArguments1: 16705537 false ) - #(233 5 #reduceActionForArrayType2: 16494594 false ) - #(233 5 #reduceActionForArrayType1: 16494593 false ) - #(191 3 #reduceActionForRecordFieldList2: 9927682 false ) - #(216 2 #reduceActionForMethodVariables1: 13673474 false ) - #(217 1 #liftFirstValue: 13735937 false ) - #(217 1 #liftFirstValue: 13735938 false ) - #(217 1 #liftFirstValue: 13735939 false ) - #(217 1 #liftFirstValue: 13735940 false ) - #(255 2 #reduceActionForClassPropertyHeader1: 18641921 false ) - #(296 2 #reduceActionForExternalClassProcedureHeader1: 24798209 false ) - #(297 2 #reduceActionForExternalClassProcedureHeader1: 24909825 false ) - #(304 2 #reduceActionForExternalClassFunctionHeader1: 25831425 false ) - #(305 2 #reduceActionForExternalClassFunctionHeader1: 25939969 false ) - #(226 2 #reduceActionForNewClassComponent2: 14886914 false ) - #(289 0 #reduceActionForOptionalRaiseAt1: 23937025 false ) - #(257 0 #nil 19064833 false ) - #(226 2 #reduceActionForNewClassComponent5: 14886917 false ) - #(226 2 #reduceActionForNewClassComponent5: 14886919 false ) - #(227 2 #reduceActionForNewClassComponent5: 15401985 false ) - #(227 2 #reduceActionForNewClassComponent5: 15401986 false ) - #(227 2 #reduceActionForNewClassComponent5: 15401987 false ) - #(227 2 #reduceActionForNewClassComponent5: 15401988 false ) - #(227 2 #reduceActionForNewClassComponent5: 15401989 false ) - #(208 3 #reduceActionForStatements2: 12503042 false ) - #(172 3 #reduceActionForStatements2: 6918146 false ) - #(176 1 #reduceActionForEnumName1: 7458817 false ) - #(175 1 #reduceActionForStatements1: 7386113 false ) - #(173 2 #reduceActionForDefinedType2: 7061506 false ) - #(239 0 #nil 17188865 false ) - #(151 3 #reduceActionForLibraryExport1: 4591617 false ) - #(165 2 #reduceActionForResourceStringList1: 6187009 false ) - #(166 1 #reduceActionForConstantValues1: 6286337 false ) - #(282 1 #liftFirstValue: 22672394 false ) - #(282 1 #liftFirstValue: 22672395 false ) - #(282 1 #liftFirstValue: 22672392 false ) - #(279 4 #reduceActionForImplementationSection2: 22380546 false ) - #(281 2 #reduceActionForMethodVariables1: 22612994 false ) - #(282 1 #liftFirstValue: 22672385 false ) - #(283 1 #reduceActionForConstructorDefinition2: 22938626 false ) - #(282 1 #liftFirstValue: 22672386 false ) - #(286 1 #reduceActionForDestructorDefinition2: 23445506 false ) - #(282 1 #liftFirstValue: 22672387 false ) - #(282 1 #liftFirstValue: 22672388 false ) - #(295 1 #reduceActionForClassProcedureDefinition2: 24605698 false ) - #(282 1 #liftFirstValue: 22672389 false ) - #(282 1 #liftFirstValue: 22672390 false ) - #(303 1 #reduceActionForClassFunctionDefinition2: 25644034 false ) - #(282 1 #liftFirstValue: 22672391 false ) - #(306 1 #reduceActionForClassOperatorDefinition2: 26054658 false ) - #(282 1 #liftFirstValue: 22672393 false ) - #(365 2 #reduceActionForFinalizationSection2: 34368514 false ) - #(153 6 #reduceActionForUnitFile1: 4761601 false ) - #(252 2 #reduceActionForGotoStatement1: 18335746 false ) - #(276 3 #reduceActionForStatements2: 22137858 false ) - #(268 0 #reduceActionForMethodVariables2: 20427777 false ) - #(271 3 #reduceActionForExternalMethodModifier4: 20926468 false ) - #(271 3 #reduceActionForExternalMethodModifier4: 20926466 false ) - #(272 1 #liftFirstValue: 21580811 false ) - #(272 1 #liftFirstValue: 21580805 false ) - #(272 1 #liftFirstValue: 21580814 false ) - #(272 1 #liftFirstValue: 21580809 false ) - #(272 1 #liftFirstValue: 21580815 false ) - #(272 1 #liftFirstValue: 21580818 false ) - #(272 1 #liftFirstValue: 21580813 false ) - #(272 1 #liftFirstValue: 21580821 false ) - #(272 1 #liftFirstValue: 21580820 false ) - #(272 1 #liftFirstValue: 21580819 false ) - #(272 1 #liftFirstValue: 21580812 false ) - #(272 1 #liftFirstValue: 21580801 false ) - #(272 1 #liftFirstValue: 21580802 false ) - #(272 1 #liftFirstValue: 21580806 false ) - #(272 1 #liftFirstValue: 21580817 false ) - #(272 1 #liftFirstValue: 21580804 false ) - #(272 1 #liftFirstValue: 21580807 false ) - #(272 1 #liftFirstValue: 21580822 false ) - #(272 1 #liftFirstValue: 21580816 false ) - #(272 1 #liftFirstValue: 21580803 false ) - #(272 1 #liftFirstValue: 21580810 false ) - #(272 1 #liftFirstValue: 21580808 false ) - #(267 2 #reduceActionForMethodVariables1: 20357122 false ) - #(269 1 #liftFirstValue: 20531201 false ) - #(269 1 #liftFirstValue: 20531202 false ) - #(338 3 #reduceActionForBaseCaseLabel2: 29865986 false ) - #(339 2 #reduceActionForElseCase2: 30027778 false ) - #(331 6 #reduceActionForCaseStatement1: 29256705 false ) - #(334 3 #reduceActionForStatements2: 29483010 false ) - #(335 3 #reduceActionForCaseOption1: 29585409 false ) - #(337 3 #reduceActionForStatements2: 29776898 false ) - #(336 3 #reduceActionForCaseLabel2: 29671426 false ) - #(343 6 #reduceActionForForInStatement1: 30447617 false ) - #(322 6 #reduceActionForForInStatement1: 28247042 false ) - #(350 6 #reduceActionForMemExpression1: 32401409 false ) - #(350 6 #reduceActionForMemExpression1: 32401410 false ) - #(329 2 #reduceActionForPossibleExceptElse2: 29113346 false ) - #(277 0 #reduceActionForOptionalRaiseAt1: 22228993 false ) - #(188 1 #reduceActionForStatements1: 9622529 false ) - #(187 3 #reduceActionForTwoItemSetNameList1: 9465857 false ) - #(235 3 #reduceActionForStatements2: 16771074 false ) - #(218 2 #reduceActionForPrivateClassSection2: 13849602 false ) - #(219 2 #reduceActionForProtectedClassSection2: 14042114 false ) - #(220 2 #reduceActionForPublicClassSection1: 14248961 false ) - #(221 2 #reduceActionForPublishedClassSection1: 14341121 false ) - #(228 3 #reduceActionForMethodAttribute1: 15825921 false ) - #(284 3 #reduceActionForExternalConstructorHeader1: 23115777 false ) - #(287 3 #reduceActionForExternalConstructorHeader1: 23617537 false ) - #(307 3 #reduceActionForExternalConstructorHeader1: 26242049 false ) - #(174 3 #reduceActionForEnumType1: 7332865 false ) - #(189 3 #reduceActionForMetaclassType1: 9725953 false ) - #(212 1 #liftFirstValue: 13345793 false ) - #(212 1 #liftFirstValue: 13345794 false ) - #(211 2 #reduceActionForMethodVariables1: 13271042 false ) - #(209 3 #reduceActionForNewClassType2: 12622850 false ) - #(223 1 #reduceActionForStatements1: 14507009 false ) - #(173 3 #reduceActionForLabeledStatement1: 7061509 false ) - #(173 3 #reduceActionForLabeledStatement1: 7061505 false ) - #(240 0 #reduceActionForMethodVariables2: 17264641 false ) - #(166 2 #reduceActionForMethodVariables1: 6286338 false ) - #(280 2 #reduceActionForImplementationCode2: 22526978 false ) - #(283 2 #reduceActionForConstructorDefinition1: 22938625 false ) - #(286 2 #reduceActionForDestructorDefinition1: 23445505 false ) - #(295 2 #reduceActionForClassProcedureDefinition1: 24605697 false ) - #(303 2 #reduceActionForClassFunctionDefinition1: 25644033 false ) - #(306 2 #reduceActionForClassOperatorDefinition1: 26054657 false ) - #(366 2 #reduceActionForGotoStatement1: 34471937 false ) - #(294 5 #reduceActionForNonExternalProcedureHeaderVars1: 24435713 false ) - #(270 2 #reduceActionForExternalMethodModifier6: 20605953 false ) - #(275 5 #reduceActionForArgument1: 21998593 false ) - #(184 7 #reduceActionForAnonymousFunctionType1: 8938497 false ) - #(218 3 #reduceActionForPrivateClassSection1: 13849601 false ) - #(219 3 #reduceActionForProtectedClassSection1: 14042113 false ) - #(289 2 #reduceActionForGotoStatement1: 23937026 false ) - #(256 0 #reduceActionForPropertyValues1: 18734081 false ) - #(176 3 #reduceActionForEnumName2: 7458818 false ) - #(175 3 #reduceActionForStatements2: 7386114 false ) - #(222 3 #reduceActionForInstantiatedGenericTypeArguments1: 14445570 false ) - #(214 0 #nil 13540353 false ) - #(302 6 #reduceActionForNonExternalFunctionHeaderVars1: 25464833 false ) - #(268 2 #reduceActionForMethodVariables1: 20427778 false ) - #(271 5 #reduceActionForExternalMethodModifier5: 20926469 false ) - #(271 5 #reduceActionForExternalMethodModifier5: 20926467 false ) - #(270 3 #reduceActionForNonExternalMethodModifier3: 20605955 false ) - #(270 3 #reduceActionForNonExternalMethodModifier3: 20605954 false ) - #(342 8 #reduceActionForForStatement1: 30254081 false ) - #(328 5 #reduceActionForOnDo1: 29010945 false ) - #(277 2 #reduceActionForGotoStatement1: 22228994 false ) - #(188 3 #reduceActionForStatements2: 9622530 false ) - #(285 5 #reduceActionForNonExternalConstructorHeader1: 23251969 false ) - #(288 5 #reduceActionForNonExternalDestructorHeader1: 23750657 false ) - #(229 5 #reduceActionForInterfaceFunctionAssignment1: 15925249 false ) - #(230 5 #reduceActionForInterfaceProcedureAssignment1: 16108545 false ) - #(257 3 #reduceActionForPropertyArrayAccessors2: 19064834 false ) - #(226 5 #reduceActionForNewClassComponent1: 14886913 false ) - #(223 3 #reduceActionForStatements2: 14507010 false ) - #(213 5 #reduceActionForOldClassType1: 13390849 false ) - #(239 3 #reduceActionForGuid2: 17188866 false ) - #(237 5 #reduceActionForInterfaceType1: 16939009 false ) - #(240 2 #reduceActionForMethodVariables1: 17264642 false ) - #(241 1 #liftFirstValue: 17356802 false ) - #(241 1 #liftFirstValue: 17356801 false ) - #(214 1 #liftFirstValue: 13540354 false ) - #(316 6 #reduceActionForVariable1: 27203585 false ) - #(194 1 #reduceActionForStatements1: 10262529 false ) - #(196 1 #reduceActionForStatements1: 10477569 false ) - #(197 1 #liftFirstValue: 10564609 false ) - #(262 1 #reduceActionForPropertyDefault2: 19739650 false ) - #(262 1 #reduceActionForPropertyDefault3: 19739651 false ) - #(266 0 #nil 20256769 false ) - #(256 2 #reduceActionForPropertyValues2: 18734082 false ) - #(256 2 #reduceActionForCaseOptionList1: 18734083 false ) - #(256 2 #reduceActionForPropertyValues4: 18734084 false ) - #(256 2 #reduceActionForPropertyValues8: 18734088 false ) - #(256 2 #reduceActionForPropertyValues5: 18734085 false ) - #(256 2 #reduceActionForPropertyValues7: 18734087 false ) - #(256 2 #reduceActionForPropertyValues6: 18734086 false ) - #(210 6 #reduceActionForClassHelperType2: 12855298 false ) - #(209 6 #reduceActionForNewClassType1: 12622849 false ) - #(167 5 #reduceActionForResource1: 6361089 false ) - #(164 7 #reduceActionForConstantValue1: 5996545 false ) - #(193 6 #reduceActionForVariantRecordPart1: 10113025 false ) - #(308 7 #reduceActionForNonExternalClassOperatorHeader1: 26384385 false ) - #(262 2 #reduceActionForPropertyDefault1: 19739649 false ) - #(261 2 #reduceActionForPropertyDispid1: 19427329 false ) - #(264 1 #reduceActionForStatements1: 20047873 false ) - #(263 2 #reduceActionForPropertyImplements1: 19943425 false ) - #(258 2 #reduceActionForPropertyIndex1: 19162113 false ) - #(259 2 #reduceActionForPropertyReader1: 19255297 false ) - #(265 2 #reduceActionForPropertyStored1: 20167681 false ) - #(260 2 #reduceActionForPropertyWriter1: 19340289 false ) - #(254 7 #reduceActionForPropertyHeaderVars1: 18444289 false ) - #(194 3 #reduceActionForStatements2: 10262530 false ) - #(196 3 #reduceActionForStatements2: 10477570 false ) - #(261 3 #reduceActionForPropertyDispid2: 19427330 false ) - #(261 3 #reduceActionForPropertyDispid3: 19427331 false ) - #(266 2 #reduceActionForPropertyModifiers2: 20256770 false ) - #(264 3 #reduceActionForStatements2: 20047874 false ) - #(210 9 #reduceActionForClassHelperType1: 12855297 false ) - #(195 5 #reduceActionForVariantType1: 10377217 false ) - ). -] - -{ #category : #'generated-accessing' } -DelphiParser class >> scannerClass [ - ^DelphiScanner -] - -{ #category : #generated } -DelphiParser class >> startingStateForFile [ - ^ 1 -] - -{ #category : #generated } -DelphiParser class >> startingStateForNamedDefinedType [ - ^ 4 -] - -{ #category : #generated } -DelphiParser class >> startingStateForSimpleDefinedType [ - ^ 3 -] - -{ #category : #generated } -DelphiParser class >> startingStateForStatement [ - ^ 2 -] - -{ #category : #generated } -DelphiParser class >> symbolNames [ - ^ #('"&OPERATOR"' '"("' '")"' '"*"' '","' '"."' '".."' '"/"' '":"' '":="' '"<"' '"<="' '"<>"' '"="' '">"' '">="' '"@"' '"ABSOLUTE"' '"ABSTRACT"' '"AND"' '"ARRAY"' '"AS"' '"ASM"' '"ASSEMBLER"' '"BEGIN"' '"CASE"' '"CDECL"' '"CLASS"' '"CONST"' '"CONSTRUCTOR"' '"DEFAULT"' '"DEPRECATED"' '"DESTRUCTOR"' '"DISPID"' '"DISPINTERFACE"' '"DIV"' '"DO"' '"DOWNTO"' '"DYNAMIC"' '"ELSE"' '"END"' '"EXCEPT"' '"EXPORT"' '"EXPORTS"' '"EXTERNAL"' '"FAR"' '"FILE"' '"FINAL"' '"FINALIZATION"' '"FINALLY"' '"FOR"' '"FORWARD"' '"FUNCTION"' '"GOTO"' '"HELPER"' '"IF"' '"IMPLEMENTATION"' '"IMPLEMENTS"' '"IN"' '"INDEX"' '"INHERITED"' '"INITIALIZATION"' '"INLINE"' '"INTERFACE"' '"IS"' '"LABEL"' '"LIBRARY"' '"LOCAL"' '"MEM"' '"MEMW"' '"MESSAGE"' '"MOD"' '"NAME"' '"NEAR"' '"NODEFAULT"' '"NOT"' '"OBJECT"' '"OF"' '"ON"' '"OPERATOR"' '"OR"' '"OUT"' '"OVERLOAD"' '"OVERRIDE"' '"PACKED"' '"PASCAL"' '"PLATFORM"' '"PRIVATE"' '"PROCEDURE"' '"PROGRAM"' '"PROPERTY"' '"PROTECTED"' '"PUBLIC"' '"PUBLISHED"' '"RAISE"' '"READ"' '"READONLY"' '"RECORD"' '"REGISTER"' '"REINTRODUCE"' '"REPEAT"' '"RESOURCESTRING"' '"SAFECALL"' '"SEALED"' '"SET"' '"SHL"' '"SHR"' '"STATIC"' '"STDCALL"' '"STORED"' '"STRICT"' '"THEN"' '"THREADVAR"' '"TO"' '"TRY"' '"TYPE"' '"UNIT"' '"UNSAFE"' '"UNTIL"' '"USES"' '"VAR"' '"VIRTUAL"' '"WHILE"' '"WITH"' '"WRITE"' '"WRITEONLY"' '"XOR"' '"["' '"]"' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'B e g i n' 'File' 'ProgramFile' 'ProgramLine' 'LibraryFile' 'LibraryLine' 'Exports' 'LibraryExport' 'MainMethod' 'UnitFile' 'UnitLine' 'InterfaceSection' 'UsesList' 'UsesModuleList' 'UsesModule' 'FullModuleName' 'InterfaceSectionValueList' 'InterfaceSectionValue' 'ConstantValueList' 'ConstantValues' 'ConstantValue' 'ResourceStringList' 'Resources' 'Resource' 'DefinedTypeList' 'NamedDefinedTypes' 'NamedDefinedType' 'OptionalGenericTypeArguments' 'GenericTypeArgumentList' 'DefinedType' 'EnumType' 'EnumList' 'EnumName' 'ClassOrInterfaceType' 'SimpleDefinedType' 'InstantiatedGenericTypeArguments' 'InstantiatedGenericTypeArgumentList' 'NamedType' 'OptionalPlatform' 'AnonymousProcedureType' 'AnonymousFunctionType' 'OptionalArguments' 'SetType' 'TwoItemSetNameList' 'SetNameList' 'MetaclassType' 'RecordType' 'RecordFieldList' 'OptionalPacked' 'VariantRecordPart' 'VariantTypes' 'VariantType' 'VariantNames' 'VariantName' 'RangeType' 'RangeValue' 'Number' 'ConstantExpression' 'ConstantArray' 'ConstantExpressionList' 'EnumExpression' 'ConstantRecord' 'ConstantRecordFields' 'ConstantRecordField' 'ConstantArguments' 'NewClassType' 'ClassHelperType' 'ClassAttributes' 'ClassAttribute' 'OldClassType' 'OptionalDeprecated' 'ImplicitClassSection' 'ClassSections' 'ClassSection' 'PrivateClassSection' 'ProtectedClassSection' 'PublicClassSection' 'PublishedClassSection' 'Superclass' 'SuperclassList' 'QualifiedName' 'NewClassComponents' 'NewClassComponent' 'NewClassMethodComponent' 'MethodAttribute' 'InterfaceFunctionAssignment' 'InterfaceProcedureAssignment' 'Type' 'FileType' 'ArrayType' 'ArrayBounds' 'ArrayBoundsIndices' 'ArrayBoundsIndex' 'InterfaceType' 'InterfaceKeyword' 'Guid' 'NewInterfaceComponents' 'NewInterfaceComponent' 'InterfacePropertyComponent' 'InterfaceMethodComponent' 'ConstructorHeader' 'DestructorHeader' 'ProcedureHeader' 'ClassProcedureHeader' 'OptionalOfObject' 'FunctionHeader' 'ClassFunctionHeader' 'ClassOperatorHeader' 'OptionalType' 'PropertyHeader' 'PropertyHeaderVars' 'ClassPropertyHeader' 'PropertyValues' 'PropertyArrayAccessors' 'PropertyIndex' 'PropertyReader' 'PropertyWriter' 'PropertyDispid' 'PropertyDefault' 'PropertyImplements' 'PropertyImplementsList' 'PropertyStored' 'PropertyModifiers' 'MethodModifiers' 'NonExternalMethodModifiers' 'MethodModifier' 'NonExternalMethodModifier' 'ExternalMethodModifier' 'ModifierKeyword' 'ArgumentList' 'Arguments' 'Argument' 'VariableNames' 'OptionalValue' 'ArgumentType' 'ImplementationSection' 'ImplementationCode' 'Definitions' 'Definition' 'ConstructorDefinition' 'ExternalConstructorHeader' 'NonExternalConstructorHeader' 'DestructorDefinition' 'ExternalDestructorHeader' 'NonExternalDestructorHeader' 'OptionalParens' 'ProcedureDefinition' 'ExternalProcedureHeader' 'ExternalProcedureHeaderVars' 'NonExternalProcedureHeader' 'NonExternalProcedureHeaderVars' 'ClassProcedureDefinition' 'ExternalClassProcedureHeader' 'NonExternalClassProcedureHeader' 'FunctionDefinition' 'ExternalFunctionHeader' 'ExternalFunctionHeaderVars' 'NonExternalFunctionHeader' 'NonExternalFunctionHeaderVars' 'ClassFunctionDefinition' 'ExternalClassFunctionHeader' 'NonExternalClassFunctionHeader' 'ClassOperatorDefinition' 'ExternalClassOperatorHeader' 'NonExternalClassOperatorHeader' 'MethodComponents' 'MethodVariables' 'MethodVariable' 'Labels' 'Vars' 'VarsVars' 'VariablesList' 'Variable' 'Statements' 'Statement' 'LabeledStatement' 'GotoStatement' 'RepeatStatement' 'IfStatement' 'WithStatement' 'WithExpressions' 'TryStatement' 'Except' 'OnDos' 'OnDo' 'PossibleExceptElse' 'Finally' 'CaseStatement' 'OptionalSemicolon' 'CaseOptionList' 'CaseOptions' 'CaseOption' 'CaseLabel' 'CaseLabels' 'BaseCaseLabel' 'ElseCase' 'RaiseStatement' 'OptionalRaiseAt' 'ForStatement' 'ForInStatement' 'ToDownTo' 'WhileStatement' 'StatementBlock' 'AsmBlock' 'BeforeAsm' 'Expression' 'MemExpression' 'VariableExpression' 'InstantiatedGenericVariableExpression' 'SetConstructor' 'SetConstructorValues' 'SetValue' 'ArrayIndex' 'ArrayIndices' 'String' 'InheritedFunctionCall' 'MethodArguments' 'MethodArgument' 'Operator' 'ConstantOperator' 'InitializationSection' 'FinalizationSection' 'EndFile' '' 'E O F' 'error') -] - -{ #category : #generated } -DelphiParser class >> symbolTypes [ - ^ #(#SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #DelphiProgramNode #DelphiProgramNode #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #DelphiLibraryExportNode #DelphiMainMethodDefinitionNode #OrderedCollection #OrderedCollection #DelphiInterfaceSectionNode #OrderedCollection #OrderedCollection #OrderedCollection #DelphiModuleNameNode #OrderedCollection #DelphiProgramNode #DelphiConstantListNode #OrderedCollection #DelphiConstantDefinitionNode #DelphiResourceStringListNode #OrderedCollection #DelphiResourceStringDefinitionNode #DelphiDefinedTypeListNode #OrderedCollection #DelphiNamedDefinedTypeNode #OrderedCollection #OrderedCollection #OrderedCollection #DelphiEnumTypeNode #OrderedCollection #DelphiEnumNameNode #DelphiTypeNode #DelphiProgramNode #OrderedCollection #OrderedCollection #DelphiExpressionNode #SmaCCToken #DelphiAnonymousProcedureTypeNode #DelphiAnonymousFunctionTypeNode #OrderedCollection #DelphiSetTypeNode #OrderedCollection #OrderedCollection #DelphiMetaclassTypeNode #DelphiRecordTypeNode #OrderedCollection #SmaCCToken #OrderedCollection #OrderedCollection #DelphiVariantTypeNode #OrderedCollection #DelphiExpressionNode #DelphiRangeTypeNode #DelphiExpressionNode #SmaCCToken #DelphiExpressionNode #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #DelphiConstantRecordFieldNode #OrderedCollection #DelphiNewClassTypeNode #DelphiClassHelperTypeNode #OrderedCollection #SmaCCToken #DelphiOldClassTypeNode #SmaCCToken #DelphiImplicitClassSectionNode #OrderedCollection #DelphiClassSectionNode #DelphiPrivateClassSectionNode #DelphiProtectedClassSectionNode #DelphiPublicClassSectionNode #DelphiPublishedClassSectionNode #OrderedCollection #OrderedCollection #DelphiQualifiedNameNode #OrderedCollection #DelphiProgramNode #DelphiMethodHeaderNode #DelphiMethodAttributeNode #DelphiInterfaceFunctionAssignmentNode #DelphiInterfaceProcedureAssignmentNode #DelphiProgramNode #DelphiFileTypeNode #DelphiArrayTypeNode #OrderedCollection #OrderedCollection #DelphiProgramNode #DelphiInterfaceTypeNode #SmaCCToken #DelphiGuidNode #OrderedCollection #DelphiProgramNode #DelphiPropertyHeaderNode #DelphiMethodHeaderNode #DelphiConstructorHeaderNode #DelphiDestructorHeaderNode #DelphiProcedureHeaderNode #DelphiClassProcedureHeaderNode #OrderedCollection #DelphiFunctionHeaderNode #DelphiClassFunctionHeaderNode #DelphiClassOperatorHeaderNode #OrderedCollection #DelphiPropertyHeaderNode #OrderedCollection #DelphiClassPropertyHeaderNode #OrderedCollection #DelphiPropertyArrayAccessorsNode #DelphiPropertyIndexNode #DelphiPropertyReaderNode #DelphiPropertyWriterNode #DelphiPropertyDispidNode #DelphiPropertyDefaultNode #DelphiPropertyImplementsNode #OrderedCollection #DelphiPropertyStoredNode #DelphiPropertyModifierNode #OrderedCollection #OrderedCollection #DelphiMethodModifierNode #DelphiMethodModifierNode #DelphiMethodModifierNode #SmaCCToken #OrderedCollection #OrderedCollection #DelphiArgumentNode #OrderedCollection #OrderedCollection #SmaCCToken #DelphiImplementationSectionNode #DelphiImplementationCodeNode #OrderedCollection #DelphiProgramNode #DelphiConstructorDefinitionNode #DelphiConstructorHeaderNode #DelphiConstructorHeaderNode #DelphiDestructorDefinitionNode #DelphiDestructorHeaderNode #DelphiDestructorHeaderNode #OrderedCollection #DelphiProcedureDefinitionNode #DelphiProcedureHeaderNode #OrderedCollection #DelphiProcedureHeaderNode #OrderedCollection #DelphiClassProcedureDefinitionNode #DelphiClassProcedureHeaderNode #DelphiClassProcedureHeaderNode #DelphiFunctionDefinitionNode #DelphiFunctionHeaderNode #OrderedCollection #DelphiFunctionHeaderNode #OrderedCollection #DelphiClassFunctionDefinitionNode #DelphiClassFunctionHeaderNode #DelphiClassFunctionHeaderNode #DelphiClassOperatorDefinitionNode #DelphiClassOperatorHeaderNode #DelphiClassOperatorHeaderNode #OrderedCollection #OrderedCollection #DelphiProgramNode #DelphiLabelVariableNode #DelphiVarsNode #OrderedCollection #OrderedCollection #DelphiVariableNode #OrderedCollection #DelphiStatementNode #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #DelphiExceptNode #OrderedCollection #DelphiOnDoNode #DelphiExceptElseNode #DelphiFinallyNode #OrderedCollection #SmaCCToken #OrderedCollection #OrderedCollection #DelphiCaseOptionNode #DelphiProgramNode #OrderedCollection #DelphiProgramNode #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #SmaCCToken #OrderedCollection #DelphiStatementNode #DelphiAsmBlockNode nil #DelphiExpressionNode #DelphiMemExpressionNode #DelphiVariableExpressionNode #DelphiInstantiatedGenericVariableExpressionNode #DelphiSetExpressionNode #OrderedCollection #DelphiSetValueNode #OrderedCollection #OrderedCollection #SmaCCToken #DelphiInheritedFunctionCallNode #OrderedCollection #DelphiProgramNode #SmaCCToken #SmaCCToken #DelphiInitializationSectionNode #DelphiFinalizationSectionNode #OrderedCollection #SmaCCToken #SmaCCToken #SmaCCErrorNode) -] - -{ #category : #generated } -DelphiParser class >> transitionTable [ -^#( -#[1 0 6 0 23 0 6 0 25 0 6 0 29 0 6 0 53 0 6 0 66 0 21 0 67 0 6 0 89 0 25 0 90 0 6 0 113 0 6 0 116 0 29 0 117 0 33 0 120 0 6 0 121 0 37 0 145 0 41 0 146 0 45 0 147 0 49 0 148 0 53 0 149 0 57 0 153 0 61 0 154 0 65 0 156] -#[1 0 69 0 2 0 73 0 17 0 10 0 23 0 77 0 25 0 81 0 26 0 85 0 51 0 89 0 54 0 93 0 56 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 113 0 95 0 117 0 101 0 121 0 115 0 125 0 123 0 129 0 124 0 133 0 128 0 137 0 131 0 141 0 132 0 145 0 135 0 149 0 137 0 245 0 139 0 157 0 143 0 161 0 200 0 165 1 62 0 169 1 63 0 173 1 64 0 177 1 65 0 181 1 66 0 185 1 67 0 189 1 69 0 193 1 75 0 197 1 84 0 201 1 86 0 205 1 87 0 209 1 89 0 165 1 90 0 165 1 91 0 221 1 92 0 225 1 93 0 225 1 94 0 225 1 95 0 225 1 96 0 225 1 97 0 245 1 102 0 225 1 103 0 253 1 111 0 14 1 112] -#[1 1 1 0 2 0 18 0 6 0 18 0 11 1 5 0 17 0 18 0 18 0 22 0 21 1 9 0 47 1 13 0 53 1 17 0 76 1 85 0 85 1 25 0 89 0 22 0 98 1 29 0 105 1 33 0 116 0 133 0 128 1 37 0 131 1 41 0 132 1 45 0 134 1 49 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 61 0 178 1 65 0 181 1 105 0 183 1 105 0 184 1 61 0 186 1 61 0 190 1 85 0 192 1 61 0 198 1 93 0 199 1 97 0 200 1 101 0 201 1 105 0 231 1 61 0 232 1 61 0 233 1 101 1 97 1 121 1 102 1 125 1 111 0 18 1 112] -#[1 1 129 0 135 1 133 0 170] -#[1 1 137 0 135 1 141 0 159] -#[1 1 137 0 135 1 145 0 159] -#[1 1 137 0 135 1 149 0 159] -#[1 1 137 0 135 1 153 0 157 1 157 0 158 1 161 0 159] -#[0 0 0 1 112] -#[0 0 26 1 112] -#[1 0 6 0 23 0 6 0 25 0 6 0 29 0 6 0 53 0 6 0 66 0 6 0 89 0 6 0 113 0 6 0 116 0 33 0 120 0 6 0 121 1 165 0 156] -#[0 0 30 1 112] -#[1 0 6 0 23 0 6 0 25 0 6 0 29 0 6 0 44 0 6 0 53 0 6 0 66 0 6 0 89 0 6 0 113 0 6 0 116 0 33 0 120 0 6 0 121 1 169 0 156] -#[0 0 34 1 112] -#[1 0 38 0 41 0 38 0 49 0 38 0 57 0 38 0 62 1 173 0 64 1 177 0 155 0 42 1 112] -#[1 0 46 0 23 0 46 0 25 0 46 0 29 0 46 0 53 0 46 0 66 0 46 0 89 0 46 0 113 0 46 0 116 0 46 0 121 1 181 0 152 1 185 1 53 1 189 1 54] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 1 197 1 93 1 197 1 94 1 197 1 95 1 197 1 96 1 197 1 97 0 245 1 102 1 197 1 103 0 253 1 111] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 1 201 1 93 1 201 1 94 1 201 1 95 1 201 1 96 1 201 1 97 0 245 1 102 1 201 1 103 0 253 1 111] -#[1 0 69 0 2 0 73 0 17 0 10 0 23 0 77 0 25 0 81 0 26 0 14 0 41 0 85 0 51 0 89 0 54 0 93 0 56 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 113 0 95 0 117 0 101 0 121 0 115 0 125 0 123 0 129 0 124 0 133 0 128 0 137 0 131 0 141 0 132 0 14 0 133 0 145 0 135 0 149 0 137 0 245 0 139 0 157 0 143 0 161 0 200 1 205 1 61 1 209 1 62 0 169 1 63 0 173 1 64 0 177 1 65 0 181 1 66 0 185 1 67 0 189 1 69 0 193 1 75 0 197 1 84 0 201 1 86 0 205 1 87 0 209 1 89 1 209 1 90 1 209 1 91 0 221 1 92 0 225 1 93 0 225 1 94 0 225 1 95 0 225 1 96 0 225 1 97 0 245 1 102 0 225 1 103 0 253 1 111] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 1 213 1 93 1 213 1 94 1 213 1 95 1 213 1 96 1 213 1 97 0 245 1 102 1 213 1 103 0 253 1 111] -#[1 1 217 0 135 1 221 1 95] -#[1 1 225 0 135 1 229 0 137] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 1 233 1 93 1 233 1 94 1 233 1 95 1 233 1 96 1 233 1 97 0 245 1 102 1 233 1 103 0 253 1 111] -#[1 0 50 0 2 0 50 0 3 0 50 0 4 0 50 0 5 0 50 0 6 0 50 0 7 0 50 0 8 0 50 0 9 0 50 0 10 0 50 0 11 0 50 0 12 0 50 0 13 0 50 0 14 0 50 0 15 0 50 0 16 0 50 0 20 0 50 0 22 0 50 0 31 0 50 0 34 0 50 0 36 0 50 0 37 0 50 0 38 0 50 0 40 0 50 0 41 0 50 0 42 0 50 0 49 0 50 0 50 0 50 0 58 0 50 0 59 0 50 0 60 0 50 0 62 0 50 0 65 0 50 0 72 0 50 0 75 0 50 0 78 0 50 0 79 0 50 0 81 0 50 0 96 0 50 0 97 0 50 0 106 0 50 0 107 0 50 0 110 0 50 0 112 0 50 0 114 0 50 0 119 0 50 0 125 0 50 0 126 0 50 0 127 0 50 0 128 0 50 0 129 0 50 0 130 0 50 0 131 0 50 0 132 0 50 0 133 0 50 0 134 1 237 0 135 0 50 1 112] -#[0 1 241 0 128] -#[0 1 245 0 128] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 1 249 1 93 1 249 1 94 1 249 1 95 1 249 1 96 1 249 1 97 0 245 1 102 1 249 1 103 0 253 1 111] -#[1 0 69 0 2 0 73 0 17 0 54 0 40 0 54 0 41 0 54 0 42 0 54 0 49 0 54 0 50 0 97 0 61 0 54 0 62 0 101 0 69 0 105 0 70 0 109 0 76 0 54 0 79 0 54 0 119 0 133 0 128 0 137 0 131 0 141 0 132 0 54 0 133 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 1 253 1 93 1 253 1 94 1 253 1 95 1 253 1 96 1 253 1 97 0 245 1 102 1 253 1 103 0 253 1 111 0 54 1 112] -#[1 0 69 0 2 0 73 0 17 0 10 0 23 0 77 0 25 0 81 0 26 0 85 0 51 0 89 0 54 0 93 0 56 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 113 0 95 0 117 0 101 0 121 0 115 0 14 0 119 0 125 0 123 0 129 0 124 0 133 0 128 0 137 0 131 0 141 0 132 0 14 0 133 0 145 0 135 0 149 0 137 0 245 0 139 0 157 0 143 0 161 0 200 2 1 1 61 1 209 1 62 0 169 1 63 0 173 1 64 0 177 1 65 0 181 1 66 0 185 1 67 0 189 1 69 0 193 1 75 0 197 1 84 0 201 1 86 0 205 1 87 0 209 1 89 1 209 1 90 1 209 1 91 0 221 1 92 0 225 1 93 0 225 1 94 0 225 1 95 0 225 1 96 0 225 1 97 0 245 1 102 0 225 1 103 0 253 1 111] -#[1 0 69 0 2 0 73 0 17 0 10 0 23 0 77 0 25 0 81 0 26 0 14 0 41 0 14 0 42 0 14 0 50 0 85 0 51 0 89 0 54 0 93 0 56 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 113 0 95 0 117 0 101 0 121 0 115 0 125 0 123 0 129 0 124 0 133 0 128 0 137 0 131 0 141 0 132 0 14 0 133 0 145 0 135 0 149 0 137 0 245 0 139 0 157 0 143 0 161 0 200 2 5 1 61 1 209 1 62 0 169 1 63 0 173 1 64 0 177 1 65 0 181 1 66 0 185 1 67 0 189 1 69 0 193 1 75 0 197 1 84 0 201 1 86 0 205 1 87 0 209 1 89 1 209 1 90 1 209 1 91 0 221 1 92 0 225 1 93 0 225 1 94 0 225 1 95 0 225 1 96 0 225 1 97 0 245 1 102 0 225 1 103 0 253 1 111] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 2 9 1 93 2 9 1 94 2 9 1 95 2 9 1 96 2 9 1 97 0 245 1 102 2 9 1 103 0 253 1 111] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 2 13 1 68 2 17 1 93 2 17 1 94 2 17 1 95 2 17 1 96 2 17 1 97 0 245 1 102 2 17 1 103 0 253 1 111] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 2 21 0 129 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 2 25 1 93 2 25 1 94 2 25 1 95 2 25 1 96 2 25 1 97 2 29 1 98 2 33 1 99 0 245 1 102 2 25 1 103 0 253 1 111] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 2 37 1 93 2 37 1 94 2 37 1 95 2 37 1 96 2 37 1 97 0 245 1 102 2 37 1 103 0 253 1 111] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 2 41 1 93 2 41 1 94 2 41 1 95 2 41 1 96 2 41 1 97 0 245 1 102 2 41 1 103 0 253 1 111] -#[1 0 58 0 2 0 58 0 4 0 58 0 6 0 58 0 8 2 45 0 9 0 58 0 10 0 7 0 11 0 58 0 12 0 58 0 13 0 58 0 14 0 58 0 15 0 58 0 16 0 58 0 20 0 58 0 22 0 58 0 36 0 58 0 40 0 58 0 41 0 58 0 42 0 58 0 49 0 58 0 50 0 58 0 59 0 58 0 62 0 58 0 65 0 58 0 72 0 58 0 79 0 58 0 81 0 58 0 106 0 58 0 107 0 58 0 119 0 58 0 127 0 58 0 128 0 58 0 131 0 58 0 132 0 58 0 133 0 58 0 134 2 53 0 179 0 58 1 112] -#[1 0 62 0 2 0 62 0 4 0 62 0 6 0 62 0 8 2 57 0 9 0 62 0 10 0 62 0 11 0 62 0 12 0 62 0 13 0 62 0 14 0 62 0 15 0 62 0 16 0 62 0 20 0 62 0 22 0 62 0 36 0 62 0 40 0 62 0 41 0 62 0 42 0 62 0 49 0 62 0 50 0 62 0 59 0 62 0 62 0 62 0 65 0 62 0 72 0 62 0 79 0 62 0 81 0 62 0 106 0 62 0 107 0 62 0 119 0 62 0 127 0 62 0 128 0 62 0 131 0 62 0 132 0 62 0 133 0 62 0 134 0 62 1 112] -#[0 0 66 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 20 0 22 0 31 0 32 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 87 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[0 0 70 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 20 0 22 0 31 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[0 0 74 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 20 0 22 0 31 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[0 0 0 1 112] -#[0 0 78 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[0 0 82 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[0 0 86 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[0 0 90 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[0 0 94 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[0 0 98 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[0 0 102 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[0 0 106 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[0 0 110 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[0 0 114 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[0 0 118 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[0 0 122 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[0 0 126 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[0 2 61 0 23] -#[1 2 65 0 2 2 169 0 4 2 73 0 6 2 169 0 8 2 81 0 10 2 169 0 11 2 169 0 12 2 169 0 13 2 169 0 14 2 169 0 15 2 169 0 16 2 169 0 20 2 169 0 22 2 169 0 36 0 130 0 40 0 130 0 41 0 130 0 42 0 130 0 49 0 130 0 50 2 169 0 59 0 130 0 62 2 169 0 65 2 169 0 72 0 130 0 79 2 169 0 81 2 169 0 106 2 169 0 107 0 130 0 119 2 169 0 127 2 149 0 128 2 169 0 131 2 169 0 132 0 130 0 133 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107 0 130 1 112] -#[0 0 134 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 20 0 22 0 31 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[0 0 138 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 20 0 22 0 31 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[0 0 142 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 20 0 22 0 31 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[0 0 146 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 20 0 22 0 31 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[0 0 150 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 20 0 22 0 31 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[0 0 154 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 20 0 22 0 31 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[0 0 158 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 20 0 22 0 31 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[1 1 1 0 2 0 162 0 3 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 177 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 2 181 0 201 2 185 0 202 2 189 0 203 2 193 0 204 2 197 0 205 2 201 0 206 2 205 0 207 2 181 1 97 1 121 1 102 1 125 1 111] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 2 213 0 201 2 213 1 97 1 121 1 102 1 125 1 111] -#[1 0 166 0 3 0 166 0 5 0 166 0 11 0 166 0 14 0 166 0 15 0 166 0 18 0 166 0 31 0 166 0 32 0 166 0 34 0 166 0 37 0 166 0 58 0 166 0 60 0 166 0 75 2 217 0 78 0 166 0 87 0 166 0 96 0 166 0 97 0 166 0 110 0 166 0 125 0 166 0 126 0 166 0 128 0 166 0 129 0 166 0 133 0 166 1 112] -#[1 2 221 0 2 0 170 0 9 2 225 0 185] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 2 229 0 201 2 229 1 97 1 121 1 102 1 125 1 111] -#[0 0 174 0 21 0 98] -#[1 2 221 0 2 0 170 0 78 0 170 0 133 2 233 0 185] -#[0 2 237 0 78] -#[1 2 241 0 135 2 245 0 224] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 2 249 0 201 2 249 1 97 1 121 1 102 1 125 1 111] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 2 253 0 201 2 253 1 97 1 121 1 102 1 125 1 111] -#[1 1 1 0 2 0 18 0 3 0 18 0 5 0 18 0 6 0 18 0 11 0 18 0 14 0 18 0 15 1 5 0 17 0 18 0 18 0 22 0 21 0 18 0 31 0 18 0 32 0 18 0 34 0 18 0 37 1 9 0 47 1 13 0 53 0 18 0 58 0 18 0 60 0 18 0 75 1 17 0 76 0 18 0 78 1 85 0 85 0 18 0 87 1 25 0 89 0 18 0 96 0 18 0 97 0 22 0 98 1 29 0 105 0 18 0 110 1 33 0 116 0 18 0 125 0 18 0 126 0 133 0 128 0 18 0 129 1 37 0 131 1 41 0 132 0 18 0 133 1 45 0 134 1 49 0 136 1 97 0 137 1 121 0 139 1 57 0 143 3 5 0 178 1 65 0 181 3 5 0 183 3 5 0 184 3 5 0 186 3 5 0 190 1 85 0 192 3 5 0 198 1 93 0 199 1 97 0 200 1 101 0 201 3 5 0 231 3 5 0 232 3 5 0 233 1 101 1 97 1 121 1 102 1 125 1 111 0 18 1 112] -#[1 0 178 0 2 0 182 0 3 0 178 0 4 0 182 0 5 0 11 0 6 0 178 0 7 0 178 0 8 0 11 0 11 0 178 0 12 0 178 0 13 0 182 0 14 0 11 0 15 0 178 0 16 0 182 0 18 0 178 0 20 0 178 0 22 0 182 0 31 0 182 0 32 0 182 0 34 0 178 0 36 0 182 0 37 0 182 0 58 0 178 0 59 0 182 0 60 0 178 0 65 0 178 0 72 0 182 0 75 0 182 0 78 0 178 0 81 0 182 0 87 0 182 0 96 0 182 0 97 0 178 0 106 0 178 0 107 0 182 0 110 0 182 0 125 0 182 0 126 0 178 0 127 0 182 0 128 0 182 0 129 0 178 0 131 0 178 0 132 0 182 0 133 0 182 1 112] -#[0 0 62 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 20 0 22 0 31 0 32 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 87 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[0 0 186 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 20 0 22 0 31 0 32 0 34 0 36 0 37 0 58 0 59 0 60 0 65 0 72 0 75 0 78 0 81 0 87 0 96 0 97 0 106 0 107 0 110 0 125 0 126 0 127 0 128 0 129 0 131 0 132 0 133 1 112] -#[1 0 190 0 11 0 190 0 18 0 190 0 128 0 0 1 112] -#[1 0 194 0 3 0 194 0 5 3 9 0 6 0 194 0 11 0 194 0 14 0 194 0 15 0 194 0 18 0 194 0 31 0 194 0 32 0 194 0 34 0 194 0 37 0 194 0 58 0 194 0 60 0 194 0 75 0 194 0 78 0 194 0 87 0 194 0 96 0 194 0 97 0 194 0 110 0 194 0 125 0 194 0 126 0 194 0 128 0 194 0 129 0 194 0 133 0 194 1 112] -#[0 0 198 0 3 0 5 0 11 0 14 0 15 0 18 0 31 0 32 0 34 0 37 0 58 0 60 0 75 0 78 0 87 0 96 0 97 0 110 0 125 0 126 0 128 0 129 0 133 1 112] -#[0 0 202 0 3 0 5 0 11 0 14 0 15 0 18 0 31 0 32 0 34 0 37 0 58 0 60 0 75 0 78 0 87 0 96 0 97 0 110 0 125 0 126 0 128 0 129 0 133 1 112] -#[0 0 206 0 3 0 5 0 11 0 14 0 15 0 18 0 31 0 32 0 34 0 37 0 58 0 60 0 75 0 78 0 87 0 96 0 97 0 110 0 125 0 126 0 128 0 129 0 133 1 112] -#[0 0 210 0 3 0 5 0 11 0 14 0 15 0 18 0 31 0 32 0 34 0 37 0 58 0 60 0 75 0 78 0 87 0 96 0 97 0 110 0 125 0 126 0 128 0 129 0 133 1 112] -#[1 3 13 0 21 3 17 0 98] -#[0 0 214 0 3 0 5 0 11 0 14 0 15 0 18 0 31 0 32 0 34 0 37 0 58 0 60 0 75 0 78 0 87 0 96 0 97 0 110 0 125 0 126 0 128 0 129 0 133 1 112] -#[0 3 21 0 7] -#[0 0 218 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 20 0 22 0 31 0 32 0 34 0 36 0 37 0 58 0 59 0 60 0 65 0 72 0 75 0 78 0 81 0 87 0 96 0 97 0 106 0 107 0 110 0 125 0 126 0 127 0 128 0 129 0 131 0 132 0 133 1 112] -#[1 3 25 0 2 0 222 0 3 3 33 0 4 0 222 0 5 3 29 0 6 0 222 0 7 3 33 0 8 0 15 0 11 3 33 0 12 3 33 0 13 0 222 0 14 0 19 0 15 3 33 0 16 0 222 0 18 3 33 0 20 3 33 0 22 0 222 0 31 0 222 0 32 0 222 0 34 3 33 0 36 0 222 0 37 0 222 0 58 3 33 0 59 0 222 0 60 3 33 0 65 3 33 0 72 0 222 0 75 0 222 0 78 3 33 0 81 0 222 0 87 0 222 0 96 0 222 0 97 3 33 0 106 3 33 0 107 0 222 0 110 0 222 0 125 0 222 0 126 3 33 0 127 0 222 0 128 0 222 0 129 3 33 0 131 3 33 0 132 0 222 0 133 3 33 1 107 0 222 1 112] -#[1 2 49 0 11 3 37 0 18 3 41 0 128 3 45 0 179] -#[0 0 226 0 3 0 5 0 11 0 14 0 15 0 18 0 31 0 32 0 34 0 37 0 58 0 60 0 75 0 78 0 87 0 96 0 97 0 110 0 125 0 126 0 128 0 129 0 133 1 112] -#[0 0 230 0 3 0 5 0 11 0 14 0 15 0 18 0 31 0 32 0 34 0 37 0 58 0 60 0 75 0 78 0 87 0 96 0 97 0 110 0 125 0 126 0 128 0 129 0 133 1 112] -#[0 0 234 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 20 0 22 0 31 0 32 0 34 0 36 0 37 0 58 0 59 0 60 0 65 0 72 0 75 0 78 0 81 0 87 0 96 0 97 0 106 0 107 0 110 0 125 0 126 0 127 0 128 0 129 0 131 0 132 0 133 1 112] -#[0 0 238 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 20 0 22 0 31 0 32 0 34 0 36 0 37 0 58 0 59 0 60 0 65 0 72 0 75 0 78 0 81 0 87 0 96 0 97 0 106 0 107 0 110 0 125 0 126 0 127 0 128 0 129 0 131 0 132 0 133 1 112] -#[0 0 242 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 20 0 22 0 31 0 32 0 34 0 36 0 37 0 58 0 59 0 60 0 65 0 72 0 75 0 78 0 81 0 87 0 96 0 97 0 106 0 107 0 110 0 125 0 126 0 127 0 128 0 129 0 131 0 132 0 133 1 112] -#[1 3 49 0 11 0 246 0 14 3 53 0 171] -#[0 0 0 1 112] -#[0 0 250 0 5 0 6 0 32 0 59 0 87 0 133] -#[1 3 57 0 6 3 69 0 32 3 69 0 87 0 254 0 133 3 69 0 182] -#[1 3 57 0 6 3 73 0 32 3 73 0 87 0 254 0 133 3 73 0 182] -#[1 3 57 0 6 3 77 0 32 3 77 0 87 0 254 0 133 3 77 0 182] -#[1 3 81 0 5 3 85 0 133] -#[0 1 2 0 5 0 133] -#[1 1 6 0 5 3 57 0 6 3 89 0 59 1 6 0 133] -#[1 0 46 0 23 0 46 0 25 0 46 0 29 0 46 0 53 0 46 0 66 0 46 0 89 0 46 0 113 0 46 0 116 0 46 0 121 3 93 0 152 1 185 1 53 1 189 1 54] -#[1 1 10 0 23 1 10 0 25 1 10 0 29 1 10 0 44 1 10 0 53 1 10 0 66 1 10 0 89 1 10 0 113 1 10 0 116 1 10 0 121 3 97 0 150] -#[1 0 6 0 29 0 6 0 41 0 6 0 49 0 6 0 53 0 6 0 57 0 6 0 62 0 6 0 89 0 6 0 102 0 6 0 113 0 6 0 116 0 33 0 120 0 6 0 121 3 101 0 156] -#[1 1 14 0 41 1 14 0 49 3 105 0 57 1 14 0 62 3 109 1 23] -#[0 3 113 0 6] -#[0 1 18 0 6] -#[1 0 10 0 23 0 77 0 25 3 117 0 29 3 121 0 53 3 125 0 66 3 129 0 89 3 133 0 113 3 137 0 116 3 141 0 121 3 193 0 162 3 193 0 168 3 193 1 34 3 157 1 35 3 161 1 36 3 165 1 37 3 169 1 38 3 193 1 42 3 177 1 43 3 181 1 44 3 185 1 45 3 189 1 46 3 193 1 55 3 193 1 56 3 193 1 57 3 205 1 58 3 209 1 90 3 209 1 91 0 221 1 92] -#[1 0 58 0 2 0 58 0 3 0 58 0 4 0 58 0 5 0 58 0 6 0 58 0 7 0 58 0 8 0 58 0 9 0 58 0 10 0 7 0 11 0 58 0 12 0 58 0 13 0 58 0 14 0 58 0 15 0 58 0 16 0 58 0 20 0 58 0 22 0 58 0 31 0 58 0 34 0 58 0 36 0 58 0 37 0 58 0 38 0 58 0 40 0 58 0 41 0 58 0 42 0 58 0 49 0 58 0 50 0 58 0 58 0 58 0 59 0 58 0 60 0 58 0 62 0 58 0 65 0 58 0 72 0 58 0 75 0 58 0 78 0 58 0 79 0 58 0 81 0 58 0 96 0 58 0 97 0 58 0 106 0 58 0 107 0 58 0 110 0 58 0 112 0 58 0 114 0 58 0 119 0 58 0 125 0 58 0 126 0 58 0 127 0 58 0 128 0 58 0 129 0 58 0 130 0 58 0 131 0 58 0 132 0 58 0 133 0 58 0 134 2 53 0 179 0 58 1 112] -#[1 2 65 0 2 3 213 0 3 2 169 0 4 2 73 0 6 2 169 0 8 2 81 0 10 2 169 0 11 2 169 0 12 2 169 0 13 2 169 0 14 2 169 0 15 2 169 0 16 2 169 0 20 2 169 0 22 2 169 0 36 2 169 0 59 2 169 0 65 2 169 0 72 2 169 0 81 2 169 0 106 2 169 0 107 2 169 0 127 2 149 0 128 2 169 0 131 2 169 0 132 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107] -#[1 2 65 0 2 1 22 0 3 1 22 0 4 1 22 0 5 2 73 0 6 1 22 0 7 1 22 0 8 1 22 0 9 1 22 0 10 0 23 0 11 0 27 0 12 0 31 0 13 0 35 0 14 0 39 0 15 0 43 0 16 1 22 0 20 1 22 0 22 1 22 0 31 1 22 0 34 1 22 0 36 1 22 0 37 1 22 0 38 1 22 0 40 1 22 0 41 1 22 0 42 1 22 0 49 1 22 0 50 1 22 0 58 0 47 0 59 1 22 0 60 1 22 0 62 1 22 0 65 1 22 0 72 1 22 0 75 1 22 0 78 1 22 0 79 1 22 0 81 1 22 0 96 1 22 0 97 1 22 0 106 1 22 0 107 1 22 0 110 1 22 0 112 1 22 0 114 1 22 0 119 1 22 0 125 1 22 0 126 1 22 0 127 2 149 0 128 1 22 0 129 1 22 0 130 1 22 0 131 1 22 0 132 1 22 0 133 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107 1 22 1 112] -#[1 3 217 0 41 3 221 0 133] -#[0 1 26 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133] -#[1 2 65 0 2 2 169 0 4 2 73 0 6 2 169 0 8 2 81 0 10 2 169 0 11 2 169 0 12 2 169 0 13 2 169 0 14 2 169 0 15 2 169 0 16 2 169 0 20 2 169 0 22 2 169 0 36 2 169 0 59 2 169 0 65 2 169 0 72 3 225 0 78 2 169 0 81 2 169 0 106 2 169 0 107 2 169 0 127 2 149 0 128 2 169 0 131 2 169 0 132 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107] -#[0 0 58 0 10 0 59] -#[1 3 229 0 10 3 233 0 59] -#[0 1 30 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[0 1 34 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[1 2 65 0 2 2 169 0 4 2 73 0 6 2 169 0 8 2 81 0 10 2 169 0 11 2 169 0 12 2 169 0 13 2 169 0 14 2 169 0 15 2 169 0 16 2 169 0 20 2 169 0 22 2 169 0 36 2 169 0 59 2 169 0 65 2 169 0 72 2 169 0 81 2 169 0 106 2 169 0 107 3 237 0 112 2 169 0 127 2 149 0 128 2 169 0 131 2 169 0 132 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107] -#[1 3 241 0 2 1 38 0 3 1 38 0 4 1 38 0 5 1 38 0 6 1 38 0 7 1 38 0 8 1 38 0 9 1 38 0 10 1 38 0 11 1 38 0 12 1 38 0 13 1 38 0 14 1 38 0 15 1 38 0 16 1 38 0 20 1 38 0 22 1 38 0 31 1 38 0 34 1 38 0 36 1 38 0 37 1 38 0 38 1 38 0 40 1 38 0 41 1 38 0 42 1 38 0 49 1 38 0 50 1 38 0 58 1 38 0 59 1 38 0 60 1 38 0 62 1 38 0 65 1 38 0 72 1 38 0 75 1 38 0 78 1 38 0 79 1 38 0 81 1 38 0 96 1 38 0 97 1 38 0 106 1 38 0 107 1 38 0 110 1 38 0 112 1 38 0 114 1 38 0 119 1 38 0 125 1 38 0 126 1 38 0 127 1 38 0 128 1 38 0 129 1 38 0 130 1 38 0 131 1 38 0 132 1 38 0 133 1 38 0 134 1 38 1 112] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 3 245 1 93 3 245 1 94 3 245 1 95 3 245 1 96 3 245 1 97 0 245 1 102 3 245 1 103 0 253 1 111] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 3 249 1 93 3 249 1 94 3 249 1 95 3 249 1 96 3 249 1 97 0 245 1 102 3 249 1 103 0 253 1 111] -#[1 2 65 0 2 1 42 0 3 2 169 0 4 1 42 0 5 2 73 0 6 1 42 0 7 2 169 0 8 1 42 0 9 2 81 0 10 0 51 0 11 0 55 0 12 0 59 0 13 0 63 0 14 0 67 0 15 0 71 0 16 2 169 0 20 2 169 0 22 1 42 0 31 1 42 0 34 2 169 0 36 1 42 0 37 1 42 0 38 1 42 0 40 1 42 0 41 1 42 0 42 1 42 0 49 1 42 0 50 1 42 0 58 0 75 0 59 1 42 0 60 1 42 0 62 2 169 0 65 2 169 0 72 1 42 0 75 1 42 0 78 1 42 0 79 2 169 0 81 1 42 0 96 1 42 0 97 2 169 0 106 2 169 0 107 1 42 0 110 1 42 0 112 1 42 0 114 1 42 0 119 1 42 0 125 1 42 0 126 2 169 0 127 2 149 0 128 1 42 0 129 1 42 0 130 2 169 0 131 2 169 0 132 1 42 0 133 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107 1 42 1 112] -#[1 2 65 0 2 2 169 0 4 2 73 0 6 2 169 0 8 2 81 0 10 2 169 0 11 2 169 0 12 2 169 0 13 2 169 0 14 2 169 0 15 2 169 0 16 2 169 0 20 2 169 0 22 2 169 0 36 1 46 0 40 1 46 0 41 1 46 0 42 1 46 0 49 1 46 0 50 2 169 0 59 1 46 0 62 2 169 0 65 2 169 0 72 1 46 0 79 2 169 0 81 2 169 0 106 2 169 0 107 1 46 0 119 2 169 0 127 2 149 0 128 3 253 0 130 2 169 0 131 2 169 0 132 1 46 0 133 2 161 0 134 4 1 1 85 2 165 1 100 2 169 1 106 2 169 1 107 1 46 1 112] -#[1 4 5 0 119 3 221 0 133] -#[1 1 50 0 41 4 9 0 42 1 50 0 50 3 221 0 133 4 13 1 70] -#[1 2 65 0 2 2 169 0 4 2 73 0 6 2 169 0 8 2 81 0 10 2 169 0 11 2 169 0 12 2 169 0 13 2 169 0 14 2 169 0 15 2 169 0 16 2 169 0 20 2 169 0 22 2 169 0 36 4 17 0 37 2 169 0 59 2 169 0 65 2 169 0 72 2 169 0 81 2 169 0 106 2 169 0 107 2 169 0 127 2 149 0 128 2 169 0 131 2 169 0 132 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107] -#[1 4 21 0 5 4 25 0 37] -#[1 2 65 0 2 2 169 0 4 1 54 0 5 2 73 0 6 2 169 0 8 2 81 0 10 2 169 0 11 2 169 0 12 2 169 0 13 2 169 0 14 2 169 0 15 2 169 0 16 2 169 0 20 2 169 0 22 2 169 0 36 1 54 0 37 2 169 0 59 2 169 0 65 2 169 0 72 2 169 0 81 2 169 0 106 2 169 0 107 2 169 0 127 2 149 0 128 2 169 0 131 2 169 0 132 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107] -#[0 1 58 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 20 0 22 0 31 0 32 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 87 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[1 2 65 0 2 2 169 0 4 1 62 0 5 2 73 0 6 4 29 0 7 2 169 0 8 2 81 0 10 2 169 0 11 2 169 0 12 2 169 0 13 2 169 0 14 2 169 0 15 2 169 0 16 2 169 0 20 2 169 0 22 2 169 0 36 2 169 0 59 2 169 0 65 2 169 0 72 2 169 0 81 2 169 0 106 2 169 0 107 2 169 0 127 2 149 0 128 1 62 0 129 2 169 0 131 2 169 0 132 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107] -#[1 4 33 0 5 4 37 0 129] -#[0 1 66 0 5 0 129] -#[1 2 65 0 2 1 70 0 3 2 169 0 4 1 70 0 5 2 73 0 6 1 70 0 7 2 169 0 8 1 70 0 9 1 70 0 10 0 79 0 11 0 83 0 12 0 87 0 13 0 91 0 14 0 95 0 15 0 99 0 16 1 70 0 20 1 70 0 22 1 70 0 31 1 70 0 34 2 169 0 36 1 70 0 37 1 70 0 38 1 70 0 40 1 70 0 41 1 70 0 42 1 70 0 49 1 70 0 50 1 70 0 58 0 103 0 59 1 70 0 60 1 70 0 62 1 70 0 65 2 169 0 72 1 70 0 75 1 70 0 78 1 70 0 79 1 70 0 81 1 70 0 96 1 70 0 97 2 169 0 106 2 169 0 107 1 70 0 110 1 70 0 112 1 70 0 114 1 70 0 119 1 70 0 125 1 70 0 126 1 70 0 127 2 149 0 128 1 70 0 129 1 70 0 130 1 70 0 131 1 70 0 132 1 70 0 133 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107 1 70 1 112] -#[1 2 65 0 2 1 74 0 3 2 169 0 4 1 74 0 5 2 73 0 6 1 74 0 7 2 169 0 8 1 74 0 9 1 74 0 10 0 107 0 11 0 111 0 12 0 115 0 13 0 119 0 14 0 123 0 15 0 127 0 16 1 74 0 20 1 74 0 22 1 74 0 31 1 74 0 34 2 169 0 36 1 74 0 37 1 74 0 38 1 74 0 40 1 74 0 41 1 74 0 42 1 74 0 49 1 74 0 50 1 74 0 58 0 131 0 59 1 74 0 60 1 74 0 62 1 74 0 65 2 169 0 72 1 74 0 75 1 74 0 78 1 74 0 79 1 74 0 81 1 74 0 96 1 74 0 97 2 169 0 106 2 169 0 107 1 74 0 110 1 74 0 112 1 74 0 114 1 74 0 119 1 74 0 125 1 74 0 126 1 74 0 127 2 149 0 128 1 74 0 129 1 74 0 130 1 74 0 131 1 74 0 132 1 74 0 133 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107 1 74 1 112] -#[1 0 69 0 2 0 73 0 17 0 10 0 23 0 77 0 25 0 81 0 26 0 14 0 40 0 14 0 41 0 14 0 42 0 14 0 49 0 14 0 50 0 85 0 51 0 89 0 54 0 93 0 56 0 97 0 61 0 14 0 62 0 101 0 69 0 105 0 70 0 109 0 76 0 14 0 79 0 113 0 95 0 117 0 101 0 121 0 115 0 14 0 119 0 125 0 123 0 129 0 124 0 133 0 128 0 137 0 131 0 141 0 132 0 14 0 133 0 145 0 135 0 149 0 137 0 245 0 139 0 157 0 143 0 161 0 200 4 41 1 62 0 169 1 63 0 173 1 64 0 177 1 65 0 181 1 66 0 185 1 67 0 189 1 69 0 193 1 75 0 197 1 84 0 201 1 86 0 205 1 87 0 209 1 89 4 41 1 90 4 41 1 91 0 221 1 92 0 225 1 93 0 225 1 94 0 225 1 95 0 225 1 96 0 225 1 97 0 245 1 102 0 225 1 103 0 253 1 111 0 14 1 112] -#[1 1 1 0 2 0 18 0 5 0 18 0 6 0 18 0 11 0 18 0 15 1 5 0 17 0 18 0 18 0 22 0 21 1 9 0 47 1 13 0 53 1 17 0 76 1 85 0 85 1 25 0 89 0 22 0 98 1 29 0 105 1 33 0 116 0 133 0 128 1 37 0 131 1 41 0 132 1 45 0 134 1 49 0 136 1 97 0 137 1 121 0 139 1 57 0 143 4 45 0 178 4 49 0 180 1 65 0 181 1 105 0 183 1 105 0 184 4 45 0 186 4 45 0 190 1 85 0 192 4 45 0 198 1 93 0 199 1 97 0 200 1 101 0 201 1 105 0 231 4 45 0 232 4 45 0 233 1 101 1 97 1 121 1 102 1 125 1 111] -#[0 1 78 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 20 0 22 0 31 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[1 0 69 0 2 0 73 0 17 0 10 0 23 0 77 0 25 0 81 0 26 0 14 0 40 0 14 0 41 0 14 0 42 0 14 0 49 0 14 0 50 0 85 0 51 0 89 0 54 0 93 0 56 0 97 0 61 0 14 0 62 0 101 0 69 0 105 0 70 0 109 0 76 0 14 0 79 0 113 0 95 0 117 0 101 0 121 0 115 0 14 0 119 0 125 0 123 0 129 0 124 0 133 0 128 0 137 0 131 0 141 0 132 0 14 0 133 0 145 0 135 0 149 0 137 0 245 0 139 0 157 0 143 0 161 0 200 4 53 1 62 0 169 1 63 0 173 1 64 0 177 1 65 0 181 1 66 0 185 1 67 0 189 1 69 0 193 1 75 0 197 1 84 0 201 1 86 0 205 1 87 0 209 1 89 4 53 1 90 4 53 1 91 0 221 1 92 0 225 1 93 0 225 1 94 0 225 1 95 0 225 1 96 0 225 1 97 0 245 1 102 0 225 1 103 0 253 1 111 0 14 1 112] -#[0 4 57 0 41] -#[1 0 69 0 2 4 61 0 3 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 4 65 1 93 4 65 1 94 4 65 1 95 4 65 1 96 4 65 1 97 0 245 1 102 4 65 1 103 4 69 1 104 4 73 1 105 0 253 1 111] -#[0 1 82 0 2 0 17 0 61 0 69 0 70 0 76 0 128 0 131 0 132 0 135 0 136 0 137 0 139 0 143 1 111] -#[1 4 77 0 1 4 81 0 135] -#[0 1 86 0 2 0 17 0 61 0 69 0 70 0 76 0 128 0 131 0 132 0 135 0 136 0 137 0 139 0 143 1 111] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 4 85 1 93 4 85 1 94 4 85 1 95 4 85 1 96 4 85 1 97 0 245 1 102 4 85 1 103 0 253 1 111] -#[0 1 90 0 2 0 17 0 61 0 69 0 70 0 76 0 128 0 131 0 132 0 135 0 136 0 137 0 139 0 143 1 111] -#[0 1 94 0 2 0 17 0 61 0 69 0 70 0 76 0 128 0 131 0 132 0 135 0 136 0 137 0 139 0 143 1 111] -#[0 1 98 0 2 0 17 0 61 0 69 0 70 0 76 0 128 0 131 0 132 0 135 0 136 0 137 0 139 0 143 1 111] -#[0 1 102 0 2 0 17 0 61 0 69 0 70 0 76 0 128 0 131 0 132 0 135 0 137 0 139 0 143 1 111] -#[0 1 106 0 2 0 17 0 61 0 69 0 70 0 76 0 128 0 131 0 132 0 135 0 136 0 137 0 139 0 143 1 111] -#[0 1 110 0 2 0 17 0 61 0 69 0 70 0 76 0 128 0 131 0 132 0 135 0 136 0 137 0 139 0 143 1 111] -#[0 1 114 0 2 0 17 0 61 0 69 0 70 0 76 0 128 0 131 0 132 0 135 0 136 0 137 0 139 0 143 1 111] -#[0 1 118 0 2 0 17 0 61 0 69 0 70 0 76 0 128 0 131 0 132 0 135 0 136 0 137 0 139 0 143 1 111] -#[0 1 122 0 2 0 17 0 61 0 69 0 70 0 76 0 128 0 131 0 132 0 135 0 136 0 137 0 139 0 143 1 111] -#[0 1 126 0 2 0 17 0 61 0 69 0 70 0 76 0 128 0 131 0 132 0 135 0 136 0 137 0 139 0 143 1 111] -#[0 1 130 0 2 0 17 0 61 0 69 0 70 0 76 0 128 0 131 0 132 0 135 0 136 0 137 0 139 0 143 1 111] -#[0 1 134 0 2 0 17 0 61 0 69 0 70 0 76 0 128 0 131 0 132 0 135 0 136 0 137 0 139 0 143 1 111] -#[0 1 138 0 2 0 17 0 61 0 69 0 70 0 76 0 128 0 131 0 132 0 135 0 136 0 137 0 139 0 143 1 111] -#[0 1 142 0 2 0 17 0 61 0 69 0 70 0 76 0 128 0 131 0 132 0 135 0 136 0 137 0 139 0 143 1 111] -#[0 1 146 0 2 0 17 0 61 0 69 0 70 0 76 0 128 0 131 0 132 0 135 0 136 0 137 0 139 0 143 1 111] -#[0 1 150 0 2 0 17 0 61 0 69 0 70 0 76 0 128 0 131 0 132 0 135 0 136 0 137 0 139 0 143 1 111] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 4 89 1 93 4 89 1 94 4 89 1 95 4 89 1 96 4 89 1 97 4 93 1 101 0 245 1 102 4 89 1 103 0 253 1 111] -#[0 1 154 0 2 0 17 0 61 0 69 0 70 0 76 0 128 0 131 0 132 0 135 0 136 0 137 0 139 0 143 1 111] -#[0 1 158 0 2 0 17 0 61 0 69 0 70 0 76 0 128 0 131 0 132 0 135 0 136 0 137 0 139 0 143 1 111] -#[0 1 162 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 20 0 22 0 31 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[0 1 166 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 20 0 22 0 31 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 4 97 1 93 4 97 1 94 4 97 1 95 4 97 1 96 4 97 1 97 0 245 1 102 4 97 1 103 0 253 1 111] -#[0 1 170 0 2 0 17 0 61 0 69 0 70 0 76 0 128 0 131 0 132 0 135 0 137 0 139 0 143 1 111] -#[1 0 178 0 2 0 178 0 3 0 178 0 4 0 178 0 5 0 178 0 6 0 178 0 8 4 101 0 9 0 178 0 11 0 178 0 12 0 178 0 13 0 178 0 14 0 178 0 15 0 178 0 16 0 178 0 20 0 178 0 22 0 178 0 36 0 178 0 59 0 178 0 65 0 178 0 72 0 178 0 81 0 178 0 106 0 178 0 107 0 178 0 127 0 178 0 131 0 178 0 132] -#[1 3 25 0 2 1 174 0 3 3 33 0 4 1 174 0 5 3 29 0 6 3 33 0 8 3 33 0 11 3 33 0 12 3 33 0 13 4 105 0 14 3 33 0 15 3 33 0 16 3 33 0 20 3 33 0 22 3 33 0 36 3 33 0 59 3 33 0 65 3 33 0 72 3 33 0 81 3 33 0 106 3 33 0 107 3 33 0 127 3 33 0 131 3 33 0 132 3 33 1 107] -#[0 4 109 0 3] -#[1 1 178 0 3 4 113 0 5] -#[0 1 182 0 3 0 5] -#[1 1 186 0 3 4 121 0 133 4 121 1 76] -#[1 1 190 0 3 0 135 0 133] -#[0 1 194 0 3 0 133] -#[0 0 178 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 20 0 22 0 31 0 32 0 34 0 36 0 37 0 58 0 59 0 60 0 65 0 72 0 75 0 78 0 81 0 87 0 96 0 97 0 106 0 107 0 110 0 125 0 126 0 127 0 128 0 129 0 131 0 132 0 133 1 112] -#[1 3 25 0 2 1 198 0 3 1 198 0 4 1 198 0 5 3 29 0 6 1 198 0 7 1 198 0 8 1 198 0 9 0 139 0 11 0 143 0 12 0 147 0 13 1 198 0 14 0 151 0 15 0 155 0 16 1 198 0 18 1 198 0 20 1 198 0 22 1 198 0 31 1 198 0 32 1 198 0 34 1 198 0 36 1 198 0 37 1 198 0 58 0 159 0 59 1 198 0 60 1 198 0 65 1 198 0 72 1 198 0 75 1 198 0 78 1 198 0 81 1 198 0 87 1 198 0 96 1 198 0 97 1 198 0 106 1 198 0 107 1 198 0 110 1 198 0 125 1 198 0 126 1 198 0 127 1 198 0 128 1 198 0 129 1 198 0 131 1 198 0 132 1 198 0 133 3 33 1 107 1 198 1 112] -#[1 1 1 0 2 0 18 0 3 0 18 0 5 0 18 0 6 0 18 0 11 0 18 0 14 0 18 0 15 1 5 0 17 0 18 0 18 0 22 0 21 0 18 0 31 0 18 0 32 0 18 0 34 0 18 0 37 1 9 0 47 1 13 0 53 0 18 0 58 0 18 0 60 0 18 0 75 1 17 0 76 0 18 0 78 1 85 0 85 0 18 0 87 1 25 0 89 0 18 0 96 0 18 0 97 0 22 0 98 1 29 0 105 0 18 0 110 1 33 0 116 0 18 0 125 0 18 0 126 0 133 0 128 0 18 0 129 1 37 0 131 1 41 0 132 0 18 0 133 1 45 0 134 1 49 0 136 1 97 0 137 1 121 0 139 1 57 0 143 4 129 0 178 1 65 0 181 4 129 0 183 4 129 0 184 4 129 0 186 4 129 0 190 1 85 0 192 4 129 0 198 1 93 0 199 1 97 0 200 1 101 0 201 4 129 0 231 4 129 0 232 4 129 0 233 1 101 1 97 1 121 1 102 1 125 1 111 0 18 1 112] -#[1 1 202 0 3 4 157 0 29 4 157 0 82 4 157 0 121 1 206 0 135 4 145 1 17 4 149 1 18 4 153 1 19 4 157 1 22] -#[0 4 161 0 9] -#[1 3 25 0 2 1 210 0 3 3 33 0 4 1 210 0 5 3 29 0 6 1 210 0 7 3 33 0 8 1 210 0 9 0 163 0 11 0 167 0 12 0 171 0 13 1 210 0 14 0 175 0 15 0 179 0 16 1 210 0 18 3 33 0 20 3 33 0 22 1 210 0 31 1 210 0 32 1 210 0 34 3 33 0 36 1 210 0 37 1 210 0 58 0 183 0 59 1 210 0 60 3 33 0 65 3 33 0 72 1 210 0 75 1 210 0 78 3 33 0 81 1 210 0 87 1 210 0 96 1 210 0 97 3 33 0 106 3 33 0 107 1 210 0 110 1 210 0 125 1 210 0 126 3 33 0 127 1 210 0 128 1 210 0 129 3 33 0 131 3 33 0 132 1 210 0 133 3 33 1 107 1 210 1 112] -#[1 4 165 0 78 1 214 0 133 4 169 0 248] -#[1 4 173 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 4 177 0 198 1 93 0 199 1 97 0 200 4 181 0 201 4 181 1 97 1 121 1 102 1 125 1 111] -#[1 0 246 0 2 0 246 0 3 0 246 0 5 0 246 0 6 0 246 0 9 0 187 0 11 0 246 0 14 0 246 0 15 0 246 0 18 0 246 0 28 0 246 0 29 0 246 0 30 0 246 0 31 0 246 0 32 0 246 0 33 0 246 0 34 0 246 0 37 0 246 0 40 0 246 0 41 0 246 0 42 0 246 0 49 0 246 0 50 0 246 0 53 0 246 0 58 0 246 0 60 0 246 0 62 0 246 0 75 0 246 0 78 0 246 0 79 0 246 0 87 0 246 0 88 0 246 0 89 0 246 0 91 0 246 0 92 0 246 0 93 0 246 0 94 0 246 0 96 0 246 0 97 0 246 0 110 0 246 0 111 0 246 0 113 0 246 0 119 0 246 0 121 0 246 0 125 0 246 0 126 0 246 0 128 0 246 0 129 0 246 0 133 0 246 0 135 4 185 0 171 0 246 1 112] -#[0 1 218 0 3 0 5 0 11 0 14 0 15 0 18 0 31 0 32 0 34 0 37 0 58 0 60 0 75 0 78 0 87 0 96 0 97 0 110 0 125 0 126 0 128 0 129 0 133 1 112] -#[1 3 25 0 2 1 222 0 3 3 33 0 4 1 222 0 5 3 29 0 6 1 222 0 7 3 33 0 8 1 222 0 9 0 191 0 11 0 195 0 12 0 199 0 13 1 222 0 14 0 203 0 15 0 207 0 16 1 222 0 18 1 222 0 20 1 222 0 22 1 222 0 31 1 222 0 32 1 222 0 34 3 33 0 36 1 222 0 37 1 222 0 58 0 211 0 59 1 222 0 60 1 222 0 65 3 33 0 72 1 222 0 75 1 222 0 78 1 222 0 81 1 222 0 87 1 222 0 96 1 222 0 97 3 33 0 106 3 33 0 107 1 222 0 110 1 222 0 125 1 222 0 126 1 222 0 127 1 222 0 128 1 222 0 129 1 222 0 131 1 222 0 132 1 222 0 133 3 33 1 107 1 222 1 112] -#[1 3 25 0 2 1 226 0 3 3 33 0 4 1 226 0 5 3 29 0 6 1 226 0 7 3 33 0 8 1 226 0 9 0 215 0 11 0 219 0 12 0 223 0 13 1 226 0 14 0 227 0 15 0 231 0 16 1 226 0 18 1 226 0 20 1 226 0 22 1 226 0 31 1 226 0 32 1 226 0 34 3 33 0 36 1 226 0 37 1 226 0 58 0 235 0 59 1 226 0 60 1 226 0 65 3 33 0 72 1 226 0 75 1 226 0 78 1 226 0 81 1 226 0 87 1 226 0 96 1 226 0 97 3 33 0 106 3 33 0 107 1 226 0 110 1 226 0 125 1 226 0 126 1 226 0 127 1 226 0 128 1 226 0 129 1 226 0 131 1 226 0 132 1 226 0 133 3 33 1 107 1 226 1 112] -#[0 0 190 0 3 0 5 0 11 0 14 0 15 0 18 0 31 0 32 0 34 0 37 0 58 0 60 0 75 0 78 0 87 0 96 0 97 0 110 0 125 0 126 0 128 0 129 0 133 1 112] -#[1 1 230 0 3 1 230 0 5 0 239 0 11 1 230 0 14 1 230 0 15 1 230 0 18 1 230 0 31 1 230 0 32 1 230 0 34 1 230 0 37 1 230 0 58 1 230 0 60 1 230 0 75 1 230 0 78 1 230 0 87 1 230 0 96 1 230 0 97 1 230 0 110 1 230 0 125 1 230 0 126 3 41 0 128 1 230 0 129 1 230 0 133 3 45 0 179 1 230 1 112] -#[0 4 189 0 136] -#[1 1 234 0 78 4 193 0 128 4 197 0 234] -#[1 1 238 0 26 1 238 0 28 1 238 0 29 1 238 0 30 1 238 0 33 1 238 0 41 1 238 0 53 1 238 0 88 1 238 0 89 1 238 0 91 1 238 0 92 1 238 0 93 1 238 0 94 1 238 0 111 1 238 0 113 1 238 0 121 1 238 0 128 1 238 0 135 4 201 0 191 4 205 0 215 4 209 0 225] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 4 213 0 199 1 97 0 200 1 101 0 201 1 101 1 97 1 121 1 102 1 125 1 111] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 4 217 0 201 4 221 0 208 4 217 1 97 1 121 1 102 1 125 1 111] -#[0 4 225 0 136] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 4 229 0 201 4 229 1 97 1 121 1 102 1 125 1 111] -#[1 1 1 0 2 0 18 0 3 0 18 0 5 0 18 0 6 0 18 0 11 0 18 0 14 0 18 0 15 1 5 0 17 0 18 0 18 0 22 0 21 0 18 0 31 0 18 0 32 0 18 0 34 0 18 0 37 1 9 0 47 1 13 0 53 0 18 0 58 0 18 0 60 0 18 0 75 1 17 0 76 0 18 0 78 1 85 0 85 0 18 0 87 1 25 0 89 0 18 0 96 0 18 0 97 0 22 0 98 1 29 0 105 0 18 0 110 1 33 0 116 0 18 0 125 0 18 0 126 0 133 0 128 0 18 0 129 1 37 0 131 1 41 0 132 0 18 0 133 1 45 0 134 1 49 0 136 1 97 0 137 1 121 0 139 1 57 0 143 4 233 0 178 1 65 0 181 4 233 0 183 4 233 0 184 4 233 0 186 4 233 0 190 1 85 0 192 4 233 0 198 1 93 0 199 1 97 0 200 1 101 0 201 4 233 0 231 4 233 0 232 4 233 0 233 1 101 1 97 1 121 1 102 1 125 1 111 0 18 1 112] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 4 237 0 201 4 237 1 97 1 121 1 102 1 125 1 111] -#[0 1 242 0 3 0 5 0 11 0 14 0 15 0 18 0 31 0 32 0 34 0 37 0 58 0 60 0 75 0 78 0 87 0 96 0 97 0 110 0 125 0 126 0 128 0 129 0 133 1 112] -#[1 4 241 0 135 4 245 0 172] -#[0 4 249 0 14] -#[0 4 253 0 135] -#[0 1 246 0 14 0 32 0 133] -#[0 1 250 0 14 0 32 0 133] -#[0 5 1 0 133] -#[0 5 5 0 133] -#[0 5 9 0 133] -#[1 1 137 0 135 5 13 0 158 1 161 0 159] -#[0 1 254 0 23 0 25 0 28 0 29 0 30 0 33 0 41 0 44 0 49 0 53 0 57 0 62 0 66 0 89 0 102 0 113 0 116 0 121] -#[0 5 17 0 139] -#[0 5 21 0 6] -#[1 0 46 0 23 0 46 0 25 0 46 0 29 5 25 0 44 0 46 0 53 0 46 0 66 0 46 0 89 0 46 0 113 0 46 0 116 0 46 0 121 5 29 0 151 5 33 0 152 1 185 1 53 1 189 1 54] -#[1 2 2 0 29 2 2 0 41 2 2 0 49 2 2 0 53 2 2 0 57 2 2 0 62 2 2 0 89 2 2 0 102 2 2 0 113 2 2 0 116 2 2 0 121 5 37 0 160] -#[1 0 6 0 25 0 6 0 28 0 6 0 29 0 6 0 30 0 6 0 33 0 6 0 41 0 6 0 49 0 6 0 53 0 6 0 62 0 6 0 89 0 6 0 102 0 6 0 113 0 6 0 116 0 33 0 120 0 6 0 121 5 41 0 156] -#[1 2 6 0 41 2 6 0 49 5 45 0 62 5 49 1 108] -#[0 2 10 1 112] -#[1 5 53 0 135 5 57 0 163 5 61 0 164] -#[1 2 241 0 135 5 65 0 224] -#[1 5 69 0 135 5 73 1 20] -#[1 2 241 0 135 5 77 0 224] -#[1 5 69 0 135 5 81 1 20 5 85 1 59 5 89 1 60] -#[1 1 129 0 135 5 93 0 169 5 97 0 170] -#[1 5 69 0 135 5 81 1 20 5 101 1 59 5 89 1 60] -#[0 2 14 0 23 0 25 0 29 0 53 0 66 0 89 0 113 0 116 0 121] -#[0 2 18 0 23 0 25 0 29 0 53 0 66 0 89 0 113 0 116 0 121] -#[0 2 22 0 23 0 25 0 29 0 53 0 66 0 89 0 113 0 116 0 121] -#[0 2 26 0 23 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 66 0 89 0 102 0 113 0 116 0 121] -#[0 2 30 0 3 0 23 0 25 0 26 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 57 0 62 0 66 0 88 0 89 0 91 0 92 0 93 0 94 0 102 0 111 0 113 0 116 0 121 0 128 0 135] -#[1 0 46 0 23 0 46 0 25 0 46 0 29 0 46 0 53 0 46 0 66 0 46 0 89 0 46 0 113 0 46 0 116 0 46 0 121 5 105 1 53 1 189 1 54] -#[1 2 34 0 3 2 34 0 23 2 34 0 25 2 34 0 26 2 34 0 28 2 34 0 29 2 34 0 30 2 34 0 33 2 34 0 41 5 109 0 45 2 34 0 49 5 113 0 52 2 34 0 53 2 34 0 57 2 34 0 62 2 34 0 66 2 34 0 88 2 34 0 89 2 34 0 91 2 34 0 92 2 34 0 93 2 34 0 94 2 34 0 102 2 34 0 111 2 34 0 113 2 34 0 116 2 34 0 121 2 34 0 128 2 34 0 135 5 117 1 15] -#[0 2 38 0 23 0 25 0 29 0 53 0 66 0 89 0 113 0 116 0 121] -#[0 2 42 0 23 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 66 0 89 0 102 0 113 0 116 0 121] -#[0 2 46 0 3 0 23 0 25 0 26 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 57 0 62 0 66 0 88 0 89 0 91 0 92 0 93 0 94 0 102 0 111 0 113 0 116 0 121 0 128 0 135] -#[1 0 46 0 23 0 46 0 25 0 46 0 29 0 46 0 53 0 46 0 66 0 46 0 89 0 46 0 113 0 46 0 116 0 46 0 121 5 121 1 53 1 189 1 54] -#[1 2 50 0 3 2 50 0 23 2 50 0 25 2 50 0 26 2 50 0 28 2 50 0 29 2 50 0 30 2 50 0 33 2 50 0 41 5 109 0 45 2 50 0 49 5 113 0 52 2 50 0 53 2 50 0 57 2 50 0 62 2 50 0 66 2 50 0 88 2 50 0 89 2 50 0 91 2 50 0 92 2 50 0 93 2 50 0 94 2 50 0 102 2 50 0 111 2 50 0 113 2 50 0 116 2 50 0 121 2 50 0 128 2 50 0 135 5 125 1 15] -#[0 2 54 0 23 0 25 0 29 0 53 0 66 0 89 0 113 0 116 0 121] -#[0 2 58 0 23 0 25 0 29 0 53 0 66 0 89 0 113 0 116 0 121] -#[0 2 62 0 23 0 25 0 29 0 53 0 66 0 89 0 113 0 116 0 121] -#[0 2 66 0 3 0 23 0 25 0 26 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 57 0 62 0 66 0 88 0 89 0 91 0 92 0 93 0 94 0 102 0 111 0 113 0 116 0 121 0 128 0 135] -#[0 5 129 0 133] -#[0 2 70 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 20 0 22 0 31 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[0 2 74 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[1 0 69 0 2 0 73 0 17 0 10 0 23 0 77 0 25 0 81 0 26 0 14 0 40 0 14 0 41 0 14 0 42 0 14 0 49 0 14 0 50 0 85 0 51 0 89 0 54 0 93 0 56 0 97 0 61 0 14 0 62 0 101 0 69 0 105 0 70 0 109 0 76 0 14 0 79 0 113 0 95 0 117 0 101 0 121 0 115 0 14 0 119 0 125 0 123 0 129 0 124 0 133 0 128 0 137 0 131 0 141 0 132 0 14 0 133 0 145 0 135 0 149 0 137 0 245 0 139 0 157 0 143 0 161 0 200 5 133 1 62 0 169 1 63 0 173 1 64 0 177 1 65 0 181 1 66 0 185 1 67 0 189 1 69 0 193 1 75 0 197 1 84 0 201 1 86 0 205 1 87 0 209 1 89 5 133 1 90 5 133 1 91 0 221 1 92 0 225 1 93 0 225 1 94 0 225 1 95 0 225 1 96 0 225 1 97 0 245 1 102 0 225 1 103 0 253 1 111] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 5 137 0 201 5 141 1 77 5 145 1 78 5 149 1 79 5 153 1 80 5 157 1 81 5 161 1 82 5 137 1 97 1 121 1 102 1 125 1 111] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 5 165 1 93 5 165 1 94 5 165 1 95 5 165 1 96 5 165 1 97 0 245 1 102 5 165 1 103 0 253 1 111] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 5 169 1 93 5 169 1 94 5 169 1 95 5 169 1 96 5 169 1 97 0 245 1 102 5 169 1 103 0 253 1 111] -#[1 0 69 0 2 0 73 0 17 0 10 0 23 0 77 0 25 0 81 0 26 0 14 0 40 0 14 0 41 0 14 0 42 0 14 0 49 0 14 0 50 0 85 0 51 0 89 0 54 0 93 0 56 0 97 0 61 0 14 0 62 0 101 0 69 0 105 0 70 0 109 0 76 0 14 0 79 0 113 0 95 0 117 0 101 0 121 0 115 0 14 0 119 0 125 0 123 0 129 0 124 0 133 0 128 0 137 0 131 0 141 0 132 0 14 0 133 0 145 0 135 0 149 0 137 0 245 0 139 0 157 0 143 0 161 0 200 5 173 1 62 0 169 1 63 0 173 1 64 0 177 1 65 0 181 1 66 0 185 1 67 0 189 1 69 0 193 1 75 0 197 1 84 0 201 1 86 0 205 1 87 0 209 1 89 5 173 1 90 5 173 1 91 0 221 1 92 0 225 1 93 0 225 1 94 0 225 1 95 0 225 1 96 0 225 1 97 0 245 1 102 0 225 1 103 0 253 1 111 0 14 1 112] -#[1 0 69 0 2 5 177 0 3 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 4 65 1 93 4 65 1 94 4 65 1 95 4 65 1 96 4 65 1 97 0 245 1 102 4 65 1 103 5 181 1 104 4 73 1 105 0 253 1 111] -#[1 2 65 0 2 2 169 0 4 2 73 0 6 2 169 0 8 5 185 0 9 2 81 0 10 2 169 0 11 2 169 0 12 2 169 0 13 2 169 0 14 2 169 0 15 2 169 0 16 2 169 0 20 2 169 0 22 2 169 0 36 2 169 0 59 2 169 0 65 2 169 0 72 2 169 0 81 2 169 0 106 2 169 0 107 2 169 0 127 2 149 0 128 2 169 0 131 2 169 0 132 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107] -#[1 2 65 0 2 2 169 0 4 2 73 0 6 2 169 0 8 5 189 0 9 2 81 0 10 2 169 0 11 2 169 0 12 2 169 0 13 2 169 0 14 2 169 0 15 2 169 0 16 2 169 0 20 2 169 0 22 2 169 0 36 2 169 0 59 2 169 0 65 2 169 0 72 2 169 0 81 2 169 0 106 2 169 0 107 2 169 0 127 2 149 0 128 2 169 0 131 2 169 0 132 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107] -#[1 2 241 0 135 5 193 0 224] -#[0 2 78 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 5 197 1 93 5 197 1 94 5 197 1 95 5 197 1 96 5 197 1 97 0 245 1 102 5 197 1 103 0 253 1 111] -#[1 0 69 0 2 0 73 0 17 0 10 0 23 0 77 0 25 0 81 0 26 0 14 0 40 0 14 0 41 0 14 0 50 0 85 0 51 0 89 0 54 0 93 0 56 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 5 201 0 79 0 113 0 95 0 117 0 101 0 121 0 115 0 125 0 123 0 129 0 124 0 133 0 128 0 137 0 131 0 141 0 132 0 14 0 133 0 145 0 135 0 149 0 137 0 245 0 139 0 157 0 143 0 161 0 200 5 205 1 61 1 209 1 62 0 169 1 63 0 173 1 64 0 177 1 65 0 181 1 66 0 185 1 67 0 189 1 69 5 209 1 71 5 213 1 72 0 193 1 75 0 197 1 84 0 201 1 86 0 205 1 87 0 209 1 89 1 209 1 90 1 209 1 91 0 221 1 92 0 225 1 93 0 225 1 94 0 225 1 95 0 225 1 96 0 225 1 97 0 245 1 102 0 225 1 103 0 253 1 111] -#[1 2 82 0 41 5 217 0 50 5 221 1 74] -#[1 0 69 0 2 0 73 0 17 0 10 0 23 0 77 0 25 0 81 0 26 0 14 0 40 0 14 0 41 0 14 0 42 0 14 0 49 0 14 0 50 0 85 0 51 0 89 0 54 0 93 0 56 0 97 0 61 0 14 0 62 0 101 0 69 0 105 0 70 0 109 0 76 0 14 0 79 0 113 0 95 0 117 0 101 0 121 0 115 0 14 0 119 0 125 0 123 0 129 0 124 0 133 0 128 0 137 0 131 0 141 0 132 0 14 0 133 0 145 0 135 0 149 0 137 0 245 0 139 0 157 0 143 0 161 0 200 5 225 1 62 0 169 1 63 0 173 1 64 0 177 1 65 0 181 1 66 0 185 1 67 0 189 1 69 0 193 1 75 0 197 1 84 0 201 1 86 0 205 1 87 0 209 1 89 5 225 1 90 5 225 1 91 0 221 1 92 0 225 1 93 0 225 1 94 0 225 1 95 0 225 1 96 0 225 1 97 0 245 1 102 0 225 1 103 0 253 1 111 0 14 1 112] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 5 229 1 93 5 229 1 94 5 229 1 95 5 229 1 96 5 229 1 97 0 245 1 102 5 229 1 103 0 253 1 111] -#[1 0 69 0 2 0 73 0 17 0 10 0 23 0 77 0 25 0 81 0 26 0 14 0 40 0 14 0 41 0 14 0 42 0 14 0 49 0 14 0 50 0 85 0 51 0 89 0 54 0 93 0 56 0 97 0 61 0 14 0 62 0 101 0 69 0 105 0 70 0 109 0 76 0 14 0 79 0 113 0 95 0 117 0 101 0 121 0 115 0 14 0 119 0 125 0 123 0 129 0 124 0 133 0 128 0 137 0 131 0 141 0 132 0 14 0 133 0 145 0 135 0 149 0 137 0 245 0 139 0 157 0 143 0 161 0 200 5 233 1 62 0 169 1 63 0 173 1 64 0 177 1 65 0 181 1 66 0 185 1 67 0 189 1 69 0 193 1 75 0 197 1 84 0 201 1 86 0 205 1 87 0 209 1 89 5 233 1 90 5 233 1 91 0 221 1 92 0 225 1 93 0 225 1 94 0 225 1 95 0 225 1 96 0 225 1 97 0 245 1 102 0 225 1 103 0 253 1 111 0 14 1 112] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 5 237 1 93 5 237 1 94 5 237 1 95 5 237 1 96 5 237 1 97 0 245 1 102 5 237 1 103 0 253 1 111] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 2 25 1 93 2 25 1 94 2 25 1 95 2 25 1 96 2 25 1 97 5 241 1 99 0 245 1 102 2 25 1 103 0 253 1 111] -#[0 2 86 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 20 0 22 0 31 0 32 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 87 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[0 2 90 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[1 2 94 0 5 0 190 0 11 2 94 0 15 0 190 0 18 0 190 0 128] -#[1 5 245 0 5 5 249 0 15] -#[0 2 98 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[0 2 102 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[0 2 106 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 20 0 22 0 31 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[1 2 65 0 2 2 110 0 3 2 169 0 4 2 110 0 5 2 73 0 6 2 169 0 8 2 110 0 9 2 81 0 10 2 169 0 11 2 169 0 12 2 169 0 13 2 169 0 14 2 169 0 15 2 169 0 16 2 169 0 20 2 169 0 22 2 169 0 36 2 169 0 59 2 169 0 65 2 169 0 72 2 169 0 81 2 169 0 106 2 169 0 107 2 169 0 127 2 149 0 128 2 169 0 131 2 169 0 132 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107] -#[1 5 253 0 3 6 1 0 5] -#[1 2 114 0 3 2 114 0 5 6 5 0 9] -#[0 2 118 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 20 0 22 0 31 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[0 2 122 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 20 0 22 0 31 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[1 2 65 0 2 2 126 0 3 2 169 0 4 2 126 0 5 2 73 0 6 2 126 0 7 2 169 0 8 2 126 0 9 2 81 0 10 0 243 0 11 0 247 0 12 0 251 0 13 0 255 0 14 1 3 0 15 1 7 0 16 2 169 0 20 2 169 0 22 2 126 0 31 2 126 0 34 2 169 0 36 2 126 0 37 2 126 0 38 2 126 0 40 2 126 0 41 2 126 0 42 2 126 0 49 2 126 0 50 2 126 0 58 1 11 0 59 2 126 0 60 2 126 0 62 2 169 0 65 2 169 0 72 2 126 0 75 2 126 0 78 2 126 0 79 2 169 0 81 2 126 0 96 2 126 0 97 2 169 0 106 2 169 0 107 2 126 0 110 2 126 0 112 2 126 0 114 2 126 0 119 2 126 0 125 2 126 0 126 2 169 0 127 2 149 0 128 2 126 0 129 2 126 0 130 2 169 0 131 2 169 0 132 2 126 0 133 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107 2 126 1 112] -#[1 2 65 0 2 2 169 0 4 2 130 0 5 2 73 0 6 2 169 0 8 2 81 0 10 2 169 0 11 2 169 0 12 2 169 0 13 2 169 0 14 2 169 0 15 2 169 0 16 2 169 0 20 2 169 0 22 2 169 0 36 2 169 0 59 2 169 0 65 2 169 0 72 2 169 0 81 2 169 0 106 2 169 0 107 2 169 0 127 2 149 0 128 2 130 0 129 2 169 0 131 2 169 0 132 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107] -#[1 6 9 0 5 6 13 0 129] -#[1 2 65 0 2 2 134 0 3 2 169 0 4 2 134 0 5 2 73 0 6 2 134 0 7 2 169 0 8 2 134 0 9 2 81 0 10 1 15 0 11 1 19 0 12 1 23 0 13 1 27 0 14 1 31 0 15 1 35 0 16 2 169 0 20 2 169 0 22 2 134 0 31 2 134 0 34 2 169 0 36 2 134 0 37 2 134 0 38 2 134 0 40 2 134 0 41 2 134 0 42 2 134 0 49 2 134 0 50 2 134 0 58 1 39 0 59 2 134 0 60 2 134 0 62 2 169 0 65 2 169 0 72 2 134 0 75 2 134 0 78 2 134 0 79 2 169 0 81 2 134 0 96 2 134 0 97 2 169 0 106 2 169 0 107 2 134 0 110 2 134 0 112 2 134 0 114 2 134 0 119 2 134 0 125 2 134 0 126 2 169 0 127 2 149 0 128 2 134 0 129 2 134 0 130 2 169 0 131 2 169 0 132 2 134 0 133 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107 2 134 1 112] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 6 17 0 201 6 17 1 97 1 121 1 102 1 125 1 111] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 6 21 0 201 6 21 1 97 1 121 1 102 1 125 1 111] -#[0 2 138 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 20 0 22 0 31 0 32 0 34 0 36 0 37 0 58 0 59 0 60 0 65 0 72 0 75 0 78 0 81 0 87 0 96 0 97 0 106 0 107 0 110 0 125 0 126 0 127 0 128 0 129 0 131 0 132 0 133 1 112] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 2 181 0 201 6 25 0 204 2 181 1 97 1 121 1 102 1 125 1 111] -#[0 2 142 0 3] -#[0 6 29 0 3] -#[1 6 33 0 136 6 37 0 207] -#[1 2 146 0 3 2 146 0 5 1 43 0 11 2 146 0 14 2 146 0 15 3 37 0 18 2 146 0 31 2 146 0 32 2 146 0 34 2 146 0 37 2 146 0 58 2 146 0 60 2 146 0 75 2 146 0 78 2 146 0 87 2 146 0 96 2 146 0 97 2 146 0 110 2 146 0 125 2 146 0 126 3 41 0 128 2 146 0 129 2 146 0 133 3 45 0 179 2 146 1 112] -#[0 2 150 0 135] -#[0 2 154 0 135] -#[0 2 158 0 135] -#[0 6 41 0 3] -#[1 2 162 0 3 2 162 0 129 6 45 0 133] -#[0 2 166 0 3 0 129 0 133] -#[1 5 69 0 135 6 49 1 20] -#[1 1 1 0 2 0 18 0 6 0 18 0 11 1 5 0 17 0 18 0 18 0 22 0 21 1 9 0 47 1 13 0 53 1 17 0 76 0 18 0 78 1 85 0 85 1 25 0 89 0 22 0 98 1 29 0 105 1 33 0 116 0 133 0 128 1 37 0 131 1 41 0 132 0 18 0 133 1 45 0 134 1 49 0 136 1 97 0 137 1 121 0 139 1 57 0 143 6 53 0 178 1 65 0 181 6 53 0 183 6 53 0 184 6 53 0 186 6 53 0 190 1 85 0 192 6 53 0 198 1 93 0 199 1 97 0 200 1 101 0 201 6 53 0 231 6 53 0 232 6 53 0 233 1 101 1 97 1 121 1 102 1 125 1 111] -#[0 6 57 0 77] -#[0 6 61 0 133] -#[1 1 1 0 2 0 162 0 3 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 6 65 0 136 1 97 0 137 1 121 0 139 1 57 0 143 6 69 0 187 1 97 0 200 2 181 0 201 2 185 0 202 2 189 0 203 2 193 0 204 2 197 0 205 2 201 0 206 2 205 0 207 2 181 1 97 1 121 1 102 1 125 1 111] -#[0 2 170 0 3 0 5 0 11 0 14 0 15 0 18 0 31 0 32 0 34 0 37 0 58 0 60 0 75 0 78 0 87 0 96 0 97 0 110 0 125 0 126 0 128 0 129 0 133 1 112] -#[1 3 25 0 2 2 174 0 3 3 33 0 4 2 174 0 5 3 29 0 6 0 222 0 7 3 33 0 8 1 47 0 11 3 33 0 12 3 33 0 13 2 174 0 14 1 51 0 15 3 33 0 16 2 174 0 18 3 33 0 20 3 33 0 22 2 174 0 31 2 174 0 32 2 174 0 34 3 33 0 36 2 174 0 37 2 174 0 58 3 33 0 59 2 174 0 60 3 33 0 65 3 33 0 72 2 174 0 75 2 174 0 78 3 33 0 81 2 174 0 87 2 174 0 96 2 174 0 97 3 33 0 106 3 33 0 107 2 174 0 110 2 174 0 125 2 174 0 126 3 33 0 127 2 174 0 128 2 174 0 129 3 33 0 131 3 33 0 132 2 174 0 133 3 33 1 107 2 174 1 112] -#[1 2 178 0 2 2 178 0 3 2 178 0 5 6 73 0 6 2 178 0 9 2 178 0 11 2 178 0 14 2 178 0 15 2 178 0 18 2 178 0 28 2 178 0 29 2 178 0 30 2 178 0 31 2 178 0 32 2 178 0 33 2 178 0 34 2 178 0 37 2 178 0 40 2 178 0 41 2 178 0 42 2 178 0 49 2 178 0 50 2 178 0 53 2 178 0 58 2 178 0 60 2 178 0 62 2 178 0 75 2 178 0 78 2 178 0 79 2 178 0 87 2 178 0 88 2 178 0 89 2 178 0 91 2 178 0 92 2 178 0 93 2 178 0 94 2 178 0 96 2 178 0 97 2 178 0 110 2 178 0 111 2 178 0 113 2 178 0 119 2 178 0 121 2 178 0 125 2 178 0 126 2 178 0 128 2 178 0 129 2 178 0 133 2 178 0 135 2 178 1 112] -#[0 2 182 0 3 0 5 0 6 0 11 0 14 0 15 0 18 0 31 0 32 0 34 0 37 0 58 0 60 0 75 0 78 0 87 0 96 0 97 0 110 0 125 0 126 0 128 0 129 0 133 1 112] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 6 89 0 198 1 93 0 199 1 97 0 200 6 81 0 201 6 85 0 235 6 89 0 236 6 81 1 97 1 121 1 102 1 125 1 111] -#[0 6 93 0 78] -#[0 6 97 0 41] -#[1 2 186 0 3 2 186 0 26 2 186 0 41 2 186 0 88 2 186 0 92 2 186 0 93 2 186 0 94 2 186 0 111 6 101 0 216] -#[1 2 190 0 3 2 190 0 26 6 105 0 28 3 117 0 29 6 109 0 30 6 113 0 33 2 190 0 41 6 117 0 53 2 190 0 88 6 121 0 89 6 125 0 91 2 190 0 92 2 190 0 93 2 190 0 94 2 190 0 111 3 133 0 113 3 141 0 121 6 129 0 128 5 69 0 135 6 137 0 162 6 137 0 226 6 137 0 227 6 145 0 228 6 137 0 229 6 137 0 230 6 137 0 242 6 137 0 243 6 137 0 244 6 137 0 245 6 137 0 246 6 137 0 247 6 137 0 249 6 137 0 250 6 137 0 251 6 137 0 253 6 197 0 254 6 137 0 255 6 205 1 20 6 137 1 28 6 213 1 29 6 137 1 31 6 221 1 32 6 137 1 35 3 161 1 36 6 137 1 37 3 169 1 38 6 137 1 40 6 137 1 41 6 137 1 43 3 181 1 44 6 137 1 45 3 189 1 46 6 137 1 48 6 137 1 49 6 137 1 51 7 5 1 52 6 137 1 57 3 205 1 58] -#[0 2 194 0 3 0 5 0 11 0 14 0 15 0 18 0 31 0 32 0 34 0 37 0 58 0 60 0 75 0 78 0 87 0 96 0 97 0 110 0 125 0 126 0 128 0 129 0 133 1 112] -#[1 3 25 0 2 2 198 0 3 3 33 0 4 2 198 0 5 3 29 0 6 3 33 0 8 3 33 0 11 3 33 0 12 3 33 0 13 3 33 0 15 3 33 0 16 3 33 0 20 3 33 0 22 3 33 0 36 3 33 0 59 3 33 0 65 3 33 0 72 3 33 0 81 3 33 0 106 3 33 0 107 3 33 0 127 3 33 0 131 3 33 0 132 3 33 1 107] -#[1 7 13 0 3 7 17 0 5] -#[0 2 202 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 20 0 22 0 31 0 32 0 34 0 36 0 37 0 58 0 59 0 60 0 65 0 72 0 75 0 78 0 81 0 87 0 96 0 97 0 106 0 107 0 110 0 125 0 126 0 127 0 128 0 129 0 131 0 132 0 133 1 112] -#[1 3 25 0 2 2 206 0 3 3 33 0 4 2 206 0 5 3 29 0 6 2 206 0 7 3 33 0 8 2 206 0 9 1 55 0 11 1 59 0 12 1 63 0 13 2 206 0 14 1 67 0 15 1 71 0 16 2 206 0 18 3 33 0 20 3 33 0 22 2 206 0 31 2 206 0 32 2 206 0 34 3 33 0 36 2 206 0 37 2 206 0 58 1 75 0 59 2 206 0 60 3 33 0 65 3 33 0 72 2 206 0 75 2 206 0 78 3 33 0 81 2 206 0 87 2 206 0 96 2 206 0 97 3 33 0 106 3 33 0 107 2 206 0 110 2 206 0 125 2 206 0 126 3 33 0 127 2 206 0 128 2 206 0 129 3 33 0 131 3 33 0 132 2 206 0 133 3 33 1 107 2 206 1 112] -#[1 2 210 0 3 2 210 0 5 1 79 0 11 2 210 0 14 2 210 0 15 2 210 0 31 2 210 0 32 2 210 0 34 2 210 0 37 2 210 0 58 2 210 0 60 2 210 0 75 2 210 0 78 2 210 0 87 2 210 0 96 2 210 0 97 2 210 0 110 2 210 0 125 2 210 0 126 3 41 0 128 2 210 0 129 2 210 0 133 3 45 0 179 2 210 1 112] -#[1 3 25 0 2 3 33 0 4 3 29 0 6 3 33 0 8 3 33 0 11 3 33 0 12 3 33 0 13 3 33 0 15 3 33 0 16 3 33 0 20 3 33 0 22 3 33 0 36 3 33 0 59 3 33 0 65 3 33 0 72 3 33 0 81 3 33 0 106 3 33 0 107 3 33 0 127 7 21 0 129 3 33 0 131 3 33 0 132 3 33 1 107] -#[0 2 214 0 5 0 15] -#[1 7 25 0 5 7 29 0 15] -#[1 7 33 0 2 0 18 0 6 0 18 0 11 1 5 0 17 0 18 0 18 0 22 0 21 7 37 0 28 0 18 0 32 7 97 0 35 1 9 0 47 1 13 0 53 7 97 0 64 1 17 0 76 7 49 0 77 1 85 0 85 0 18 0 87 1 25 0 89 0 22 0 98 1 29 0 105 1 33 0 116 0 133 0 128 1 37 0 131 1 41 0 132 0 18 0 133 1 45 0 134 1 49 0 136 1 97 0 137 1 121 0 139 1 57 0 143 7 53 0 173 7 57 0 174 7 61 0 177 7 65 0 178 1 65 0 181 7 69 0 183 7 73 0 184 7 65 0 186 7 61 0 189 7 65 0 190 1 85 0 192 7 65 0 198 1 93 0 199 1 97 0 200 1 101 0 201 7 61 0 209 7 61 0 210 7 61 0 213 1 105 0 231 7 65 0 232 7 65 0 233 7 61 0 237 7 97 0 238 1 101 1 97 1 121 1 102 1 125 1 111] -#[0 2 218 0 5 0 6 0 32 0 59 0 87 0 133] -#[0 2 222 0 23 0 25 0 29 0 44 0 53 0 66 0 89 0 113 0 116 0 120 0 121] -#[0 2 226 0 23 0 25 0 29 0 53 0 66 0 89 0 113 0 116 0 120 0 121] -#[0 2 230 0 41 0 49 0 57 0 62 0 64 1 112] -#[0 2 234 0 5 0 133] -#[0 2 238 0 5 0 133] -#[0 2 242 1 112] -#[0 7 101 0 135] -#[0 2 246 0 23 0 25 0 29 0 44 0 53 0 66 0 89 0 113 0 116 0 121] -#[0 7 105 0 6] -#[1 3 117 0 29 2 250 0 41 2 250 0 49 3 121 0 53 2 250 0 57 2 250 0 62 3 129 0 89 7 109 0 102 3 133 0 113 3 137 0 116 3 141 0 121 7 113 0 161 7 113 0 162 7 113 0 165 7 113 0 168 7 113 0 246 7 113 0 249 7 113 1 35 3 161 1 36 7 113 1 37 3 169 1 38 7 113 1 43 3 181 1 44 7 113 1 45 3 189 1 46 7 113 1 57 3 205 1 58] -#[1 2 254 0 25 2 254 0 28 2 254 0 29 2 254 0 30 2 254 0 33 2 254 0 41 2 254 0 49 2 254 0 53 2 254 0 62 2 254 0 89 2 254 0 102 2 254 0 113 2 254 0 116 2 254 0 121 7 141 1 25] -#[1 0 69 0 2 0 73 0 17 0 10 0 23 0 77 0 25 0 81 0 26 0 14 0 41 0 14 0 49 0 85 0 51 0 89 0 54 0 93 0 56 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 113 0 95 0 117 0 101 0 121 0 115 0 125 0 123 0 129 0 124 0 133 0 128 0 137 0 131 0 141 0 132 0 14 0 133 0 145 0 135 0 149 0 137 0 245 0 139 0 157 0 143 0 161 0 200 7 145 1 61 1 209 1 62 0 169 1 63 0 173 1 64 0 177 1 65 0 181 1 66 0 185 1 67 0 189 1 69 0 193 1 75 0 197 1 84 0 201 1 86 0 205 1 87 0 209 1 89 1 209 1 90 1 209 1 91 0 221 1 92 0 225 1 93 0 225 1 94 0 225 1 95 0 225 1 96 0 225 1 97 0 245 1 102 0 225 1 103 0 253 1 111] -#[1 3 2 0 41 7 149 0 49 7 153 1 109] -#[1 7 157 0 9 3 6 0 14 7 161 0 252] -#[1 3 10 0 3 3 10 0 23 3 10 0 25 3 10 0 26 3 10 0 28 3 10 0 29 3 10 0 30 3 10 0 33 3 10 0 41 3 10 0 49 3 10 0 53 3 10 0 57 3 10 0 62 3 10 0 66 3 10 0 88 3 10 0 89 3 10 0 91 3 10 0 92 3 10 0 93 3 10 0 94 3 10 0 102 3 10 0 111 3 10 0 113 3 10 0 116 3 10 0 121 3 10 0 128 5 53 0 135 7 165 0 164] -#[0 3 14 0 3 0 23 0 25 0 26 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 57 0 62 0 66 0 88 0 89 0 91 0 92 0 93 0 94 0 102 0 111 0 113 0 116 0 121 0 128 0 135] -#[1 2 221 0 2 0 170 0 9 0 170 0 133 7 169 0 185] -#[0 3 18 0 3 0 5 0 9 0 129 0 133] -#[1 7 173 0 5 7 177 0 133] -#[1 2 221 0 2 0 170 0 133 7 181 0 185] -#[1 7 173 0 5 7 185 0 9] -#[1 3 22 0 3 3 22 0 23 3 22 0 25 3 22 0 26 3 22 0 28 3 22 0 29 3 22 0 30 3 22 0 33 3 22 0 41 3 22 0 49 3 22 0 53 3 22 0 57 3 22 0 62 3 22 0 66 3 22 0 88 3 22 0 89 3 22 0 91 3 22 0 92 3 22 0 93 3 22 0 94 3 22 0 102 3 22 0 111 3 22 0 113 3 22 0 116 3 22 0 121 3 22 0 128 5 69 0 135 5 81 1 20 7 189 1 60] -#[0 3 26 0 3 0 23 0 25 0 26 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 57 0 62 0 66 0 88 0 89 0 91 0 92 0 93 0 94 0 102 0 111 0 113 0 116 0 121 0 128 0 135] -#[1 3 30 0 23 3 30 0 25 3 30 0 28 3 30 0 29 3 30 0 30 3 30 0 33 3 30 0 41 3 30 0 49 3 30 0 53 3 30 0 57 3 30 0 62 3 30 0 66 3 30 0 89 3 30 0 102 3 30 0 113 3 30 0 116 3 30 0 121 1 129 0 135 7 193 0 170] -#[0 3 34 0 23 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 57 0 62 0 66 0 89 0 102 0 113 0 116 0 121 0 135] -#[1 3 38 0 3 3 38 0 23 3 38 0 25 3 38 0 26 3 38 0 28 3 38 0 29 3 38 0 30 3 38 0 33 3 38 0 41 3 38 0 49 3 38 0 53 3 38 0 57 3 38 0 62 3 38 0 66 3 38 0 88 3 38 0 89 3 38 0 91 3 38 0 92 3 38 0 93 3 38 0 94 3 38 0 102 3 38 0 111 3 38 0 113 3 38 0 116 3 38 0 121 3 38 0 128 5 69 0 135 5 81 1 20 7 189 1 60] -#[0 3 42 0 23 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 66 0 89 0 102 0 113 0 116 0 121] -#[1 7 197 0 133 7 201 0 135 7 205 0 139] -#[0 7 209 0 133] -#[1 3 46 0 3 3 46 0 19 3 46 0 23 3 46 0 24 3 46 0 25 3 46 0 26 3 46 0 27 3 46 0 28 3 46 0 29 3 46 0 30 3 46 0 32 3 46 0 33 3 46 0 34 3 46 0 39 3 46 0 41 3 46 0 43 3 46 0 45 3 46 0 46 3 46 0 48 3 46 0 49 3 46 0 52 3 46 0 53 3 46 0 57 3 46 0 62 3 46 0 63 3 46 0 66 3 46 0 68 3 46 0 71 3 46 0 74 3 46 0 83 3 46 0 84 3 46 0 86 3 46 0 87 3 46 0 88 3 46 0 89 3 46 0 91 3 46 0 92 3 46 0 93 3 46 0 94 3 46 0 99 3 46 0 100 3 46 0 102 3 46 0 103 3 46 0 108 3 46 0 109 3 46 0 111 3 46 0 113 3 46 0 116 3 46 0 118 3 46 0 121 3 46 0 122 3 46 0 128 3 46 0 135 7 213 1 11] -#[0 3 50 0 23 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 66 0 89 0 102 0 113 0 116 0 121] -#[1 3 46 0 3 3 46 0 19 3 46 0 23 3 46 0 24 3 46 0 25 3 46 0 26 3 46 0 27 3 46 0 28 3 46 0 29 3 46 0 30 3 46 0 32 3 46 0 33 3 46 0 34 3 46 0 39 3 46 0 41 3 46 0 43 3 46 0 45 3 46 0 46 3 46 0 48 3 46 0 49 3 46 0 52 3 46 0 53 3 46 0 57 3 46 0 62 3 46 0 63 3 46 0 66 3 46 0 68 3 46 0 71 3 46 0 74 3 46 0 83 3 46 0 84 3 46 0 86 3 46 0 87 3 46 0 88 3 46 0 89 3 46 0 91 3 46 0 92 3 46 0 93 3 46 0 94 3 46 0 99 3 46 0 100 3 46 0 102 3 46 0 103 3 46 0 108 3 46 0 109 3 46 0 111 3 46 0 113 3 46 0 116 3 46 0 118 3 46 0 121 3 46 0 122 3 46 0 128 3 46 0 135 7 217 1 11] -#[0 3 54 0 6 0 23 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 66 0 89 0 102 0 113 0 116 0 121] -#[0 3 58 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133] -#[1 3 25 0 2 3 33 0 4 3 62 0 5 3 29 0 6 7 221 0 7 3 33 0 8 3 62 0 9 3 33 0 11 3 33 0 12 3 33 0 13 3 33 0 15 3 33 0 16 3 33 0 20 3 33 0 22 3 33 0 36 3 33 0 59 3 33 0 65 3 33 0 72 3 33 0 81 3 33 0 106 3 33 0 107 3 33 0 127 3 33 0 131 3 33 0 132 3 33 1 107] -#[1 7 225 0 40 3 66 0 41 7 229 1 83] -#[1 1 186 0 40 1 186 0 41 7 233 0 133 7 237 1 76] -#[0 3 70 0 40 0 41 0 133] -#[0 7 241 0 9] -#[0 7 245 0 5] -#[1 3 74 0 5 3 78 0 9] -#[1 2 65 0 2 2 169 0 4 2 73 0 6 2 169 0 8 2 81 0 10 2 169 0 11 2 169 0 12 2 169 0 13 2 169 0 14 2 169 0 15 2 169 0 16 2 169 0 20 2 169 0 22 2 169 0 36 8 1 0 38 2 169 0 59 2 169 0 65 2 169 0 72 2 169 0 81 2 169 0 106 2 169 0 107 8 1 0 114 2 169 0 127 2 149 0 128 2 169 0 131 2 169 0 132 2 161 0 134 8 1 1 88 2 165 1 100 2 169 1 106 2 169 1 107] -#[1 2 65 0 2 2 169 0 4 2 73 0 6 2 169 0 8 2 81 0 10 2 169 0 11 2 169 0 12 2 169 0 13 2 169 0 14 2 169 0 15 2 169 0 16 2 169 0 20 2 169 0 22 2 169 0 36 8 5 0 37 2 169 0 59 2 169 0 65 2 169 0 72 2 169 0 81 2 169 0 106 2 169 0 107 2 169 0 127 2 149 0 128 2 169 0 131 2 169 0 132 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107] -#[1 8 9 0 40 3 82 0 41 3 82 0 42 3 82 0 49 3 82 0 50 3 82 0 62 3 82 0 79 3 82 0 119 3 82 0 133 3 82 1 112] -#[0 3 86 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 20 0 22 0 31 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[1 8 13 0 3 6 1 0 5] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 8 17 1 93 8 17 1 94 8 17 1 95 8 17 1 96 8 17 1 97 0 245 1 102 8 17 1 103 0 253 1 111] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 8 21 1 93 8 21 1 94 8 21 1 95 8 21 1 96 8 21 1 97 0 245 1 102 8 21 1 103 0 253 1 111] -#[0 3 90 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[1 2 65 0 2 2 169 0 4 2 73 0 6 2 169 0 8 2 81 0 10 2 169 0 11 2 169 0 12 2 169 0 13 2 169 0 14 2 169 0 15 2 169 0 16 2 169 0 20 2 169 0 22 2 169 0 36 3 94 0 40 3 94 0 41 3 94 0 42 3 94 0 49 3 94 0 50 2 169 0 59 3 94 0 62 2 169 0 65 2 169 0 72 3 94 0 79 2 169 0 81 2 169 0 106 2 169 0 107 3 94 0 119 2 169 0 127 2 149 0 128 2 169 0 131 2 169 0 132 3 94 0 133 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107 3 94 1 112] -#[1 2 241 0 135 8 25 0 224] -#[1 8 29 0 40 3 98 0 41 3 98 0 50 3 221 0 133 8 33 1 73] -#[1 8 29 0 40 3 98 0 41 3 98 0 50 5 201 0 79 8 37 1 72 8 41 1 73] -#[0 3 102 0 40 0 41 0 50 0 79] -#[1 0 69 0 2 0 73 0 17 0 10 0 23 0 77 0 25 0 81 0 26 0 14 0 41 0 85 0 51 0 89 0 54 0 93 0 56 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 113 0 95 0 117 0 101 0 121 0 115 0 125 0 123 0 129 0 124 0 133 0 128 0 137 0 131 0 141 0 132 0 14 0 133 0 145 0 135 0 149 0 137 0 245 0 139 0 157 0 143 0 161 0 200 8 45 1 61 1 209 1 62 0 169 1 63 0 173 1 64 0 177 1 65 0 181 1 66 0 185 1 67 0 189 1 69 0 193 1 75 0 197 1 84 0 201 1 86 0 205 1 87 0 209 1 89 1 209 1 90 1 209 1 91 0 221 1 92 0 225 1 93 0 225 1 94 0 225 1 95 0 225 1 96 0 225 1 97 0 245 1 102 0 225 1 103 0 253 1 111] -#[0 8 49 0 41] -#[0 3 106 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[1 2 65 0 2 2 169 0 4 3 110 0 5 2 73 0 6 2 169 0 8 2 81 0 10 2 169 0 11 2 169 0 12 2 169 0 13 2 169 0 14 2 169 0 15 2 169 0 16 2 169 0 20 2 169 0 22 2 169 0 36 3 110 0 37 2 169 0 59 2 169 0 65 2 169 0 72 2 169 0 81 2 169 0 106 2 169 0 107 2 169 0 127 2 149 0 128 2 169 0 131 2 169 0 132 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107] -#[0 3 114 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[1 2 65 0 2 2 169 0 4 3 118 0 5 2 73 0 6 2 169 0 8 2 81 0 10 2 169 0 11 2 169 0 12 2 169 0 13 2 169 0 14 2 169 0 15 2 169 0 16 2 169 0 20 2 169 0 22 2 169 0 36 2 169 0 59 2 169 0 65 2 169 0 72 2 169 0 81 2 169 0 106 2 169 0 107 2 169 0 127 2 149 0 128 3 118 0 129 2 169 0 131 2 169 0 132 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107] -#[0 3 122 0 5 0 129] -#[1 1 1 0 2 0 18 0 5 0 18 0 6 0 18 0 11 0 18 0 15 1 5 0 17 0 18 0 18 0 22 0 21 1 9 0 47 1 13 0 53 1 17 0 76 1 85 0 85 1 25 0 89 0 22 0 98 1 29 0 105 1 33 0 116 0 133 0 128 1 37 0 131 1 41 0 132 1 45 0 134 1 49 0 136 1 97 0 137 1 121 0 139 1 57 0 143 8 53 0 178 1 65 0 181 1 105 0 183 1 105 0 184 8 53 0 186 8 53 0 190 1 85 0 192 8 53 0 198 1 93 0 199 1 97 0 200 1 101 0 201 1 105 0 231 8 53 0 232 8 53 0 233 1 101 1 97 1 121 1 102 1 125 1 111] -#[0 3 126 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 20 0 22 0 31 0 32 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 87 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[0 3 130 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 20 0 22 0 31 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 4 65 1 93 4 65 1 94 4 65 1 95 4 65 1 96 4 65 1 97 0 245 1 102 4 65 1 103 8 57 1 105 0 253 1 111] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 8 61 1 93 8 61 1 94 8 61 1 95 8 61 1 96 8 61 1 97 0 245 1 102 8 61 1 103 0 253 1 111] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 8 65 1 93 8 65 1 94 8 65 1 95 8 65 1 96 8 65 1 97 0 245 1 102 8 65 1 103 0 253 1 111] -#[0 3 134 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 20 0 22 0 31 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[1 3 25 0 2 3 138 0 3 3 33 0 4 3 29 0 6 3 33 0 8 3 33 0 11 3 33 0 12 3 33 0 13 3 33 0 15 3 33 0 16 3 33 0 20 3 33 0 22 3 33 0 36 3 33 0 59 3 33 0 65 3 33 0 72 3 33 0 81 3 33 0 106 3 33 0 107 3 33 0 127 3 33 0 131 3 33 0 132 3 138 0 133 3 33 1 107] -#[1 3 25 0 2 3 142 0 3 3 33 0 4 3 142 0 5 3 29 0 6 3 33 0 8 3 33 0 11 3 33 0 12 3 33 0 13 3 33 0 15 3 33 0 16 3 33 0 20 3 33 0 22 3 33 0 36 3 33 0 59 3 33 0 65 3 33 0 72 3 33 0 81 3 33 0 106 3 33 0 107 3 33 0 127 3 33 0 131 3 33 0 132 3 33 1 107] -#[0 3 146 0 3 0 5] -#[0 3 150 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 20 0 22 0 31 0 32 0 34 0 36 0 37 0 58 0 59 0 60 0 65 0 72 0 75 0 78 0 81 0 87 0 96 0 97 0 106 0 107 0 110 0 125 0 126 0 127 0 128 0 129 0 131 0 132 0 133 1 112] -#[0 4 101 0 9] -#[0 3 154 0 3 0 133] -#[0 3 158 0 9 0 78 0 133] -#[1 4 157 0 29 4 157 0 82 4 157 0 121 1 206 0 135 8 69 1 19 4 157 1 22] -#[1 3 162 0 3 7 173 0 5 8 73 0 9 3 162 0 129 3 162 0 133] -#[1 2 49 0 11 3 37 0 18 4 165 0 78 3 41 0 128 1 214 0 133 3 45 0 179 8 77 0 248] -#[0 3 166 0 133] -#[1 3 46 0 3 3 46 0 5 3 46 0 11 3 46 0 14 3 46 0 15 3 46 0 18 3 46 0 19 3 46 0 23 3 46 0 24 3 46 0 25 3 46 0 27 3 46 0 28 3 46 0 29 3 46 0 30 3 46 0 31 3 46 0 32 3 46 0 33 3 46 0 34 3 46 0 37 3 46 0 39 3 46 0 41 3 46 0 43 3 46 0 45 3 46 0 46 3 46 0 48 3 46 0 49 3 46 0 52 3 46 0 53 3 46 0 57 3 46 0 58 3 46 0 60 3 46 0 62 3 46 0 63 3 46 0 66 3 46 0 68 3 46 0 71 3 46 0 74 3 46 0 75 3 46 0 78 3 46 0 83 3 46 0 84 3 46 0 86 3 46 0 87 3 46 0 89 3 46 0 96 3 46 0 97 3 46 0 99 3 46 0 100 3 46 0 102 3 46 0 103 3 46 0 108 3 46 0 109 3 46 0 110 3 46 0 113 3 46 0 116 3 46 0 118 3 46 0 121 3 46 0 122 3 46 0 125 3 46 0 126 3 46 0 128 3 46 0 129 3 46 0 133 3 46 0 135 8 81 1 11 3 46 1 112] -#[1 0 178 0 2 0 178 0 3 0 178 0 4 1 83 0 5 0 178 0 6 0 178 0 8 4 101 0 9 0 178 0 11 0 178 0 12 0 178 0 13 0 178 0 14 0 178 0 15 0 178 0 16 0 178 0 20 0 178 0 22 0 178 0 36 0 178 0 59 0 178 0 65 0 178 0 72 0 178 0 81 0 178 0 106 0 178 0 107 0 178 0 127 0 178 0 131 0 178 0 132] -#[0 8 89 0 3] -#[0 8 93 0 135] -#[0 3 170 0 5 0 129] -#[1 3 25 0 2 3 33 0 4 3 174 0 5 3 29 0 6 0 222 0 7 3 33 0 8 3 33 0 11 3 33 0 12 3 33 0 13 3 33 0 15 3 33 0 16 3 33 0 20 3 33 0 22 3 33 0 36 3 33 0 59 3 33 0 65 3 33 0 72 3 33 0 81 3 33 0 106 3 33 0 107 3 33 0 127 3 174 0 129 3 33 0 131 3 33 0 132 3 33 1 107] -#[1 8 97 0 5 8 101 0 129] -#[0 3 178 0 5 0 129] -#[1 1 1 0 2 0 18 0 3 0 18 0 5 0 18 0 6 0 18 0 11 0 18 0 14 0 18 0 15 1 5 0 17 0 18 0 18 0 22 0 21 8 105 0 29 0 18 0 31 0 18 0 32 0 18 0 34 0 18 0 37 1 9 0 47 1 13 0 53 0 18 0 58 0 18 0 60 0 18 0 75 1 17 0 76 0 18 0 78 1 85 0 85 0 18 0 87 1 25 0 89 0 18 0 96 0 18 0 97 0 22 0 98 1 29 0 105 0 18 0 110 1 33 0 116 0 18 0 125 0 18 0 126 0 133 0 128 0 18 0 129 1 37 0 131 1 41 0 132 0 18 0 133 1 45 0 134 1 49 0 136 1 97 0 137 1 121 0 139 1 57 0 143 8 109 0 178 1 65 0 181 8 109 0 183 8 109 0 184 8 109 0 186 8 109 0 190 1 85 0 192 8 109 0 198 1 93 0 199 1 97 0 200 1 101 0 201 8 109 0 231 8 109 0 232 8 109 0 233 1 101 1 97 1 121 1 102 1 125 1 111 0 18 1 112] -#[0 3 182 0 3 0 5 0 11 0 14 0 15 0 18 0 31 0 32 0 34 0 37 0 58 0 60 0 75 0 78 0 87 0 96 0 97 0 110 0 125 0 126 0 128 0 129 0 133 1 112] -#[1 3 186 0 3 8 113 0 26 3 186 0 41 8 117 0 88 8 121 0 92 8 125 0 93 8 129 0 94 8 133 0 111 8 137 0 193 8 141 0 217 8 141 0 218 8 141 0 219 8 141 0 220 8 141 0 221] -#[1 3 121 0 53 8 161 0 80 3 129 0 89 6 125 0 91 3 133 0 113 3 141 0 121 8 165 0 254 8 169 1 36 8 173 1 38 8 177 1 44 8 181 1 46 8 185 1 58] -#[1 2 241 0 135 8 189 0 224] -#[1 2 241 0 135 8 193 0 224] -#[1 2 241 0 135 8 197 0 224] -#[1 2 241 0 135 8 201 0 224] -#[0 8 205 0 135] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 8 209 0 201 8 209 1 97 1 121 1 102 1 125 1 111] -#[0 3 190 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 3 194 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 3 198 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[1 8 213 0 28 6 109 0 30 6 113 0 33 3 121 0 53 3 129 0 89 8 217 0 244 8 221 0 245 8 225 0 246 8 229 0 247 8 233 0 249 8 237 0 250 8 241 0 251 8 217 1 28 6 213 1 29 8 221 1 31 6 221 1 32 8 225 1 35 3 161 1 36 8 225 1 37 3 169 1 38 8 229 1 40 8 229 1 41 8 233 1 43 3 181 1 44 8 233 1 45 3 189 1 46 8 237 1 48 8 237 1 49 8 241 1 51 7 5 1 52] -#[0 3 202 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 3 206 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 3 210 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 3 214 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 3 218 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 3 222 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 3 226 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 3 230 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 3 234 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 3 238 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 3 242 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 3 246 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 3 250 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 3 254 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[1 7 173 0 5 8 245 0 9] -#[0 4 2 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[1 4 6 0 3 4 6 0 26 4 6 0 28 4 6 0 29 4 6 0 30 4 6 0 33 4 6 0 41 5 109 0 45 5 113 0 52 4 6 0 53 4 6 0 88 4 6 0 89 4 6 0 91 4 6 0 92 4 6 0 93 4 6 0 94 4 6 0 111 4 6 0 113 4 6 0 121 4 6 0 128 4 6 0 135 8 249 1 15] -#[0 4 10 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[1 4 14 0 3 4 14 0 26 4 14 0 28 4 14 0 29 4 14 0 30 4 14 0 33 4 14 0 41 5 109 0 45 5 113 0 52 4 14 0 53 4 14 0 88 4 14 0 89 4 14 0 91 4 14 0 92 4 14 0 93 4 14 0 94 4 14 0 111 4 14 0 113 4 14 0 121 4 14 0 128 4 14 0 135 8 253 1 15] -#[0 4 18 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 57 0 62 0 88 0 89 0 91 0 92 0 93 0 94 0 102 0 111 0 113 0 116 0 121 0 128 0 135] -#[0 4 22 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 57 0 62 0 88 0 89 0 91 0 92 0 93 0 94 0 102 0 111 0 113 0 116 0 121 0 128 0 135] -#[0 4 26 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 4 30 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 4 34 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 57 0 62 0 88 0 89 0 91 0 92 0 93 0 94 0 102 0 111 0 113 0 116 0 121 0 128 0 135] -#[0 4 38 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 57 0 62 0 88 0 89 0 91 0 92 0 93 0 94 0 102 0 111 0 113 0 116 0 121 0 128 0 135] -#[0 4 42 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 4 46 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 4 50 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[1 4 54 0 3 4 54 0 26 4 54 0 28 4 54 0 29 4 54 0 30 4 54 0 33 4 54 0 41 5 109 0 45 5 113 0 52 4 54 0 53 4 54 0 88 4 54 0 89 4 54 0 91 4 54 0 92 4 54 0 93 4 54 0 94 4 54 0 111 4 54 0 113 4 54 0 121 4 54 0 128 4 54 0 135 9 1 1 15] -#[0 4 58 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 4 62 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 18 0 20 0 22 0 31 0 32 0 34 0 36 0 37 0 58 0 59 0 60 0 65 0 72 0 75 0 78 0 81 0 87 0 96 0 97 0 106 0 107 0 110 0 125 0 126 0 127 0 128 0 129 0 131 0 132 0 133 1 112] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 9 5 0 201 9 5 1 97 1 121 1 102 1 125 1 111] -#[0 4 66 0 3 0 5 0 11 0 14 0 15 0 18 0 31 0 32 0 34 0 37 0 58 0 60 0 75 0 78 0 87 0 96 0 97 0 110 0 125 0 126 0 128 0 129 0 133 1 112] -#[0 9 9 0 135] -#[0 4 70 0 2 0 3 0 5 0 6 0 9 0 11 0 14 0 15 0 18 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 37 0 40 0 41 0 42 0 49 0 50 0 53 0 58 0 60 0 62 0 75 0 78 0 79 0 87 0 88 0 89 0 91 0 92 0 93 0 94 0 96 0 97 0 110 0 111 0 113 0 119 0 121 0 125 0 126 0 128 0 129 0 133 0 135 1 112] -#[1 1 1 0 2 0 162 0 3 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 9 13 0 135 2 177 0 136 1 97 0 137 1 121 0 139 1 57 0 143 9 17 0 175 9 21 0 176 1 97 0 200 2 181 0 201 2 185 0 202 2 189 0 203 2 193 0 204 2 197 0 205 2 201 0 206 2 205 0 207 2 181 1 97 1 121 1 102 1 125 1 111] -#[1 4 74 0 2 4 74 0 19 4 74 0 28 4 74 0 29 4 74 0 30 4 74 0 32 4 74 0 33 4 74 0 41 4 74 0 53 4 74 0 55 9 25 0 78 4 74 0 87 4 74 0 88 4 74 0 89 4 74 0 91 4 74 0 92 4 74 0 93 4 74 0 94 4 74 0 104 4 74 0 111 4 74 0 113 4 74 0 121 4 74 0 128 4 74 0 133 4 74 0 135 9 29 0 211] -#[0 4 78 0 2 0 28 0 32 0 41 0 53 0 87 0 89 0 91 0 128 0 133] -#[0 4 82 0 2 0 28 0 32 0 41 0 53 0 87 0 89 0 91 0 128 0 133] -#[1 9 33 0 2 4 86 0 28 4 86 0 29 4 86 0 30 4 86 0 33 4 86 0 41 4 86 0 53 4 86 0 88 4 86 0 89 4 86 0 91 4 86 0 92 4 86 0 93 4 86 0 94 4 86 0 111 4 86 0 113 4 86 0 121 4 86 0 128 4 86 0 135 9 37 0 222] -#[0 4 90 0 23 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 57 0 62 0 66 0 89 0 102 0 113 0 116 0 121 0 135 1 112] -#[0 9 41 0 133] -#[1 9 45 0 32 9 45 0 87 0 254 0 133 9 45 0 182] -#[1 0 190 0 11 0 190 0 18 9 49 0 32 9 49 0 87 0 190 0 128 0 254 0 133 9 49 0 182] -#[1 0 198 0 11 0 198 0 18 4 94 0 23 4 94 0 25 4 94 0 28 4 94 0 29 4 94 0 30 4 94 0 33 4 94 0 41 4 94 0 49 4 94 0 53 4 94 0 57 4 94 0 62 4 94 0 66 4 94 0 89 4 94 0 102 4 94 0 113 4 94 0 116 4 94 0 121 0 198 0 128 4 94 0 135 4 94 1 112] -#[1 0 202 0 11 0 202 0 18 4 98 0 23 4 98 0 25 4 98 0 28 4 98 0 29 4 98 0 30 4 98 0 33 4 98 0 41 4 98 0 49 4 98 0 53 4 98 0 57 4 98 0 62 4 98 0 66 4 98 0 89 4 98 0 102 4 98 0 113 4 98 0 116 4 98 0 121 0 202 0 128 4 98 0 135 4 98 1 112] -#[0 4 102 0 32 0 87 0 133] -#[0 4 106 0 32 0 87 0 133] -#[0 4 110 0 32 0 87 0 133] -#[0 4 114 0 32 0 87 0 133] -#[0 4 118 0 32 0 87 0 133] -#[1 9 33 0 2 4 86 0 28 4 122 0 32 4 86 0 41 4 86 0 53 4 122 0 87 4 86 0 89 4 86 0 91 4 86 0 128 4 122 0 133 9 53 0 222] -#[0 9 57 0 133] -#[0 4 126 1 112] -#[1 9 61 0 135 9 65 0 166 9 69 0 167] -#[0 4 130 0 29 0 41 0 49 0 53 0 57 0 62 0 89 0 102 0 113 0 116 0 121] -#[0 4 134 0 29 0 41 0 49 0 53 0 57 0 62 0 89 0 102 0 113 0 116 0 121] -#[0 4 138 0 29 0 41 0 49 0 53 0 57 0 62 0 89 0 102 0 113 0 116 0 121] -#[0 4 142 0 29 0 41 0 49 0 53 0 57 0 62 0 89 0 102 0 113 0 116 0 121] -#[0 4 146 0 29 0 41 0 49 0 53 0 57 0 62 0 89 0 102 0 113 0 116 0 121] -#[0 4 150 0 29 0 41 0 49 0 53 0 57 0 62 0 89 0 102 0 113 0 116 0 121] -#[0 4 154 0 29 0 41 0 49 0 53 0 57 0 62 0 89 0 102 0 113 0 116 0 121] -#[1 9 73 0 25 8 213 0 28 3 117 0 29 6 109 0 30 6 113 0 33 4 158 0 41 4 158 0 49 3 121 0 53 4 158 0 62 3 129 0 89 7 109 0 102 3 133 0 113 3 137 0 116 3 141 0 121 9 93 0 162 9 93 0 165 9 93 0 168 9 89 1 24 9 93 1 26 9 93 1 27 9 101 1 28 9 105 1 29 9 93 1 30 9 113 1 31 9 117 1 32 9 93 1 34 3 157 1 35 3 161 1 36 3 165 1 37 3 169 1 38 9 93 1 39 9 129 1 40 9 133 1 41 9 93 1 42 3 177 1 43 3 181 1 44 3 185 1 45 3 189 1 46 9 93 1 47 9 145 1 48 9 149 1 49 9 93 1 50 9 157 1 51 9 161 1 52 9 93 1 57 3 205 1 58] -#[1 4 162 0 41 4 162 0 49 3 221 0 133] -#[1 0 69 0 2 0 73 0 17 0 10 0 23 0 77 0 25 0 81 0 26 0 14 0 41 0 85 0 51 0 89 0 54 0 93 0 56 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 113 0 95 0 117 0 101 0 121 0 115 0 125 0 123 0 129 0 124 0 133 0 128 0 137 0 131 0 141 0 132 0 14 0 133 0 145 0 135 0 149 0 137 0 245 0 139 0 157 0 143 0 161 0 200 9 169 1 61 1 209 1 62 0 169 1 63 0 173 1 64 0 177 1 65 0 181 1 66 0 185 1 67 0 189 1 69 0 193 1 75 0 197 1 84 0 201 1 86 0 205 1 87 0 209 1 89 1 209 1 90 1 209 1 91 0 221 1 92 0 225 1 93 0 225 1 94 0 225 1 95 0 225 1 96 0 225 1 97 0 245 1 102 0 225 1 103 0 253 1 111] -#[1 9 173 0 41 9 177 1 110] -#[1 1 1 0 2 0 18 0 6 0 18 0 11 0 18 0 14 1 5 0 17 0 18 0 18 0 22 0 21 0 18 0 31 0 18 0 34 0 18 0 37 1 9 0 47 1 13 0 53 0 18 0 58 0 18 0 60 0 18 0 75 1 17 0 76 0 18 0 78 1 85 0 85 1 25 0 89 0 18 0 96 0 18 0 97 0 22 0 98 1 29 0 105 0 18 0 110 1 33 0 116 0 18 0 125 0 18 0 126 0 133 0 128 1 37 0 131 1 41 0 132 0 18 0 133 1 45 0 134 1 49 0 136 1 97 0 137 1 121 0 139 1 57 0 143 9 181 0 178 1 65 0 181 9 181 0 183 9 181 0 184 9 181 0 186 9 181 0 190 1 85 0 192 9 181 0 198 1 93 0 199 1 97 0 200 1 101 0 201 9 181 0 231 9 181 0 232 9 181 0 233 1 101 1 97 1 121 1 102 1 125 1 111] -#[0 9 185 0 14] -#[0 4 166 0 3 0 23 0 25 0 26 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 57 0 62 0 66 0 88 0 89 0 91 0 92 0 93 0 94 0 102 0 111 0 113 0 116 0 121 0 128 0 135] -#[1 7 157 0 9 3 6 0 133 9 189 0 252] -#[0 9 193 0 135] -#[0 4 170 0 23 0 25 0 29 0 53 0 66 0 89 0 113 0 116 0 121] -#[0 9 197 0 133] -#[1 1 1 0 2 0 18 0 6 0 18 0 11 0 18 0 14 1 5 0 17 0 18 0 18 0 22 0 21 0 18 0 32 1 9 0 47 1 13 0 53 1 17 0 76 1 85 0 85 0 18 0 87 1 25 0 89 0 22 0 98 1 29 0 105 1 33 0 116 0 133 0 128 1 37 0 131 1 41 0 132 0 18 0 133 1 45 0 134 1 49 0 136 1 97 0 137 1 121 0 139 1 57 0 143 9 201 0 178 1 65 0 181 9 201 0 183 9 201 0 184 9 201 0 186 9 201 0 190 1 85 0 192 9 201 0 198 1 93 0 199 1 97 0 200 1 101 0 201 9 201 0 231 9 201 0 232 9 201 0 233 1 101 1 97 1 121 1 102 1 125 1 111] -#[0 4 174 0 3 0 23 0 25 0 26 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 57 0 62 0 66 0 88 0 89 0 91 0 92 0 93 0 94 0 102 0 111 0 113 0 116 0 121 0 128 0 135] -#[0 4 178 0 23 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 57 0 62 0 66 0 89 0 102 0 113 0 116 0 121 0 135] -#[0 4 182 0 3 0 5 0 11 0 14 0 15 0 18 0 19 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 37 0 39 0 41 0 43 0 45 0 46 0 48 0 49 0 52 0 53 0 57 0 58 0 60 0 62 0 63 0 66 0 68 0 71 0 74 0 75 0 78 0 83 0 84 0 86 0 87 0 88 0 89 0 91 0 92 0 93 0 94 0 96 0 97 0 99 0 100 0 102 0 103 0 108 0 109 0 110 0 111 0 113 0 116 0 118 0 121 0 122 0 125 0 126 0 128 0 129 0 133 0 135 1 112] -#[1 9 205 0 73 9 209 0 133] -#[1 9 213 0 73 9 217 0 133] -#[0 4 186 0 3 0 5 0 11 0 14 0 15 0 18 0 19 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 37 0 39 0 41 0 43 0 45 0 46 0 48 0 49 0 52 0 53 0 57 0 58 0 60 0 62 0 63 0 66 0 68 0 71 0 74 0 75 0 78 0 83 0 84 0 86 0 87 0 88 0 89 0 91 0 92 0 93 0 94 0 96 0 97 0 99 0 100 0 102 0 103 0 108 0 109 0 110 0 111 0 113 0 116 0 118 0 121 0 122 0 125 0 126 0 128 0 129 0 133 0 135 1 112] -#[1 4 190 0 3 10 73 0 19 4 190 0 23 10 73 0 24 4 190 0 25 4 190 0 26 10 73 0 27 4 190 0 28 4 190 0 29 4 190 0 30 10 73 0 32 4 190 0 33 9 237 0 34 10 73 0 39 4 190 0 41 10 73 0 43 5 109 0 45 10 73 0 46 10 73 0 48 4 190 0 49 5 113 0 52 4 190 0 53 4 190 0 57 4 190 0 62 10 73 0 63 4 190 0 66 10 73 0 68 10 9 0 71 10 73 0 74 10 73 0 83 10 73 0 84 10 73 0 86 10 73 0 87 4 190 0 88 4 190 0 89 4 190 0 91 4 190 0 92 4 190 0 93 4 190 0 94 10 73 0 99 10 73 0 100 4 190 0 102 10 73 0 103 10 73 0 108 10 73 0 109 4 190 0 111 4 190 0 113 4 190 0 116 10 73 0 118 4 190 0 121 10 73 0 122 4 190 0 128 4 190 0 135 10 61 1 13 10 61 1 14 10 61 1 15 10 73 1 16] -#[1 4 194 0 3 10 73 0 19 4 194 0 23 10 73 0 24 4 194 0 25 4 194 0 26 10 73 0 27 4 194 0 28 4 194 0 29 4 194 0 30 10 73 0 32 4 194 0 33 9 237 0 34 10 73 0 39 4 194 0 41 10 73 0 43 5 109 0 45 10 73 0 46 10 73 0 48 4 194 0 49 5 113 0 52 4 194 0 53 4 194 0 57 4 194 0 62 10 73 0 63 4 194 0 66 10 73 0 68 10 9 0 71 10 73 0 74 10 73 0 83 10 73 0 84 10 73 0 86 10 73 0 87 4 194 0 88 4 194 0 89 4 194 0 91 4 194 0 92 4 194 0 93 4 194 0 94 10 73 0 99 10 73 0 100 4 194 0 102 10 73 0 103 10 73 0 108 10 73 0 109 4 194 0 111 4 194 0 113 4 194 0 116 10 73 0 118 4 194 0 121 10 73 0 122 4 194 0 128 4 194 0 135 10 61 1 13 10 61 1 14 10 61 1 15 10 73 1 16] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 10 77 0 201 10 77 1 97 1 121 1 102 1 125 1 111] -#[1 0 69 0 2 0 73 0 17 0 10 0 23 0 77 0 25 0 81 0 26 0 14 0 41 0 85 0 51 0 89 0 54 0 93 0 56 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 113 0 95 0 117 0 101 0 121 0 115 0 125 0 123 0 129 0 124 0 133 0 128 0 137 0 131 0 141 0 132 0 14 0 133 0 145 0 135 0 149 0 137 0 245 0 139 0 157 0 143 0 161 0 200 10 81 1 61 1 209 1 62 0 169 1 63 0 173 1 64 0 177 1 65 0 181 1 66 0 185 1 67 0 189 1 69 0 193 1 75 0 197 1 84 0 201 1 86 0 205 1 87 0 209 1 89 1 209 1 90 1 209 1 91 0 221 1 92 0 225 1 93 0 225 1 94 0 225 1 95 0 225 1 96 0 225 1 97 0 245 1 102 0 225 1 103 0 253 1 111] -#[0 10 85 0 41] -#[1 1 1 0 2 1 5 0 17 2 142 0 40 2 142 0 41 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 5 137 0 201 10 89 1 79 5 153 1 80 5 157 1 81 5 161 1 82 5 137 1 97 1 121 1 102 1 125 1 111] -#[0 4 198 0 40 0 41] -#[1 0 69 0 2 0 73 0 17 0 10 0 23 0 77 0 25 0 81 0 26 0 14 0 40 0 14 0 41 0 85 0 51 0 89 0 54 0 93 0 56 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 113 0 95 0 117 0 101 0 121 0 115 0 125 0 123 0 129 0 124 0 133 0 128 0 137 0 131 0 141 0 132 0 14 0 133 0 145 0 135 0 149 0 137 0 245 0 139 0 157 0 143 0 161 0 200 10 93 1 62 0 169 1 63 0 173 1 64 0 177 1 65 0 181 1 66 0 185 1 67 0 189 1 69 0 193 1 75 0 197 1 84 0 201 1 86 0 205 1 87 0 209 1 89 10 93 1 90 10 93 1 91 0 221 1 92 0 225 1 93 0 225 1 94 0 225 1 95 0 225 1 96 0 225 1 97 0 245 1 102 0 225 1 103 0 253 1 111] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 5 137 0 201 10 97 1 82 5 137 1 97 1 121 1 102 1 125 1 111] -#[0 4 202 0 2 0 17 0 61 0 69 0 70 0 76 0 128 0 131 0 132 0 135 0 137 0 139 0 143 1 111] -#[0 4 206 0 2 0 17 0 61 0 69 0 70 0 76 0 128 0 131 0 132 0 135 0 137 0 139 0 143 1 111] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 10 101 1 93 10 101 1 94 10 101 1 95 10 101 1 96 10 101 1 97 0 245 1 102 10 101 1 103 0 253 1 111] -#[1 0 69 0 2 0 73 0 17 0 10 0 23 0 77 0 25 0 81 0 26 0 14 0 40 0 14 0 41 0 14 0 42 0 14 0 49 0 14 0 50 0 85 0 51 0 89 0 54 0 93 0 56 0 97 0 61 0 14 0 62 0 101 0 69 0 105 0 70 0 109 0 76 0 14 0 79 0 113 0 95 0 117 0 101 0 121 0 115 0 14 0 119 0 125 0 123 0 129 0 124 0 133 0 128 0 137 0 131 0 141 0 132 0 14 0 133 0 145 0 135 0 149 0 137 0 245 0 139 0 157 0 143 0 161 0 200 10 105 1 62 0 169 1 63 0 173 1 64 0 177 1 65 0 181 1 66 0 185 1 67 0 189 1 69 0 193 1 75 0 197 1 84 0 201 1 86 0 205 1 87 0 209 1 89 10 105 1 90 10 105 1 91 0 221 1 92 0 225 1 93 0 225 1 94 0 225 1 95 0 225 1 96 0 225 1 97 0 245 1 102 0 225 1 103 0 253 1 111 0 14 1 112] -#[1 0 69 0 2 0 73 0 17 0 10 0 23 0 77 0 25 0 81 0 26 0 14 0 40 0 14 0 41 0 14 0 42 0 14 0 49 0 14 0 50 0 85 0 51 0 89 0 54 0 93 0 56 0 97 0 61 0 14 0 62 0 101 0 69 0 105 0 70 0 109 0 76 0 14 0 79 0 113 0 95 0 117 0 101 0 121 0 115 0 14 0 119 0 125 0 123 0 129 0 124 0 133 0 128 0 137 0 131 0 141 0 132 0 14 0 133 0 145 0 135 0 149 0 137 0 245 0 139 0 157 0 143 0 161 0 200 10 109 1 62 0 169 1 63 0 173 1 64 0 177 1 65 0 181 1 66 0 185 1 67 0 189 1 69 0 193 1 75 0 197 1 84 0 201 1 86 0 205 1 87 0 209 1 89 10 109 1 90 10 109 1 91 0 221 1 92 0 225 1 93 0 225 1 94 0 225 1 95 0 225 1 96 0 225 1 97 0 245 1 102 0 225 1 103 0 253 1 111 0 14 1 112] -#[0 4 210 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 20 0 22 0 31 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[1 2 65 0 2 2 169 0 4 2 73 0 6 2 169 0 8 2 81 0 10 2 169 0 11 2 169 0 12 2 169 0 13 2 169 0 14 2 169 0 15 2 169 0 16 2 169 0 20 2 169 0 22 2 169 0 36 2 169 0 59 2 169 0 65 2 169 0 72 2 169 0 81 2 169 0 106 2 169 0 107 2 169 0 127 2 149 0 128 10 113 0 129 2 169 0 131 2 169 0 132 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107] -#[1 2 65 0 2 2 169 0 4 2 73 0 6 2 169 0 8 2 81 0 10 2 169 0 11 2 169 0 12 2 169 0 13 2 169 0 14 2 169 0 15 2 169 0 16 2 169 0 20 2 169 0 22 2 169 0 36 2 169 0 59 2 169 0 65 2 169 0 72 2 169 0 81 2 169 0 106 2 169 0 107 2 169 0 127 2 149 0 128 10 117 0 129 2 169 0 131 2 169 0 132 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107] -#[1 7 157 0 9 3 6 0 37 10 121 0 252] -#[1 0 69 0 2 0 73 0 17 0 10 0 23 0 77 0 25 0 81 0 26 0 14 0 41 0 14 0 50 0 85 0 51 0 89 0 54 0 93 0 56 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 113 0 95 0 117 0 101 0 121 0 115 0 125 0 123 0 129 0 124 0 133 0 128 0 137 0 131 0 141 0 132 0 14 0 133 0 145 0 135 0 149 0 137 0 245 0 139 0 157 0 143 0 161 0 200 10 125 1 61 1 209 1 62 0 169 1 63 0 173 1 64 0 177 1 65 0 181 1 66 0 185 1 67 0 189 1 69 0 193 1 75 0 197 1 84 0 201 1 86 0 205 1 87 0 209 1 89 1 209 1 90 1 209 1 91 0 221 1 92 0 225 1 93 0 225 1 94 0 225 1 95 0 225 1 96 0 225 1 97 0 245 1 102 0 225 1 103 0 253 1 111] -#[0 4 214 0 41 0 50] -#[0 4 218 0 40 0 41 0 50 0 79] -#[0 4 222 0 41 0 50] -#[1 4 226 0 41 3 221 0 133] -#[0 4 230 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[1 4 234 0 5 0 190 0 11 4 234 0 15 0 190 0 18 0 190 0 128] -#[1 4 238 0 3 4 238 0 5 6 5 0 9] -#[1 2 65 0 2 4 242 0 3 2 169 0 4 4 242 0 5 2 73 0 6 2 169 0 8 4 242 0 9 2 81 0 10 2 169 0 11 2 169 0 12 2 169 0 13 2 169 0 14 2 169 0 15 2 169 0 16 2 169 0 20 2 169 0 22 2 169 0 36 2 169 0 59 2 169 0 65 2 169 0 72 2 169 0 81 2 169 0 106 2 169 0 107 2 169 0 127 2 149 0 128 2 169 0 131 2 169 0 132 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107] -#[1 2 65 0 2 2 169 0 4 4 246 0 5 2 73 0 6 2 169 0 8 2 81 0 10 2 169 0 11 2 169 0 12 2 169 0 13 2 169 0 14 2 169 0 15 2 169 0 16 2 169 0 20 2 169 0 22 2 169 0 36 2 169 0 59 2 169 0 65 2 169 0 72 2 169 0 81 2 169 0 106 2 169 0 107 2 169 0 127 2 149 0 128 4 246 0 129 2 169 0 131 2 169 0 132 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107] -#[0 4 250 0 3 0 129 0 133] -#[1 1 1 0 2 0 18 0 3 0 18 0 6 0 18 0 11 0 18 0 14 1 5 0 17 0 18 0 18 0 22 0 21 1 9 0 47 1 13 0 53 1 17 0 76 1 85 0 85 1 25 0 89 0 22 0 98 1 29 0 105 1 33 0 116 0 133 0 128 0 18 0 129 1 37 0 131 1 41 0 132 0 18 0 133 1 45 0 134 1 49 0 136 1 97 0 137 1 121 0 139 1 57 0 143 10 129 0 178 1 65 0 181 10 129 0 183 10 129 0 184 10 129 0 186 10 129 0 190 1 85 0 192 10 129 0 198 1 93 0 199 1 97 0 200 1 101 0 201 10 129 0 231 10 129 0 232 10 129 0 233 1 101 1 97 1 121 1 102 1 125 1 111] -#[0 10 133 0 133] -#[1 4 254 0 3 4 254 0 5 4 254 0 11 4 254 0 14 4 254 0 15 4 254 0 18 10 73 0 19 4 254 0 23 10 73 0 24 4 254 0 25 10 73 0 27 4 254 0 28 4 254 0 29 4 254 0 30 4 254 0 31 1 87 0 32 4 254 0 33 1 91 0 34 4 254 0 37 10 73 0 39 4 254 0 41 10 73 0 43 5 109 0 45 10 73 0 46 10 73 0 48 4 254 0 49 5 113 0 52 4 254 0 53 4 254 0 57 4 254 0 58 4 254 0 60 4 254 0 62 10 73 0 63 4 254 0 66 10 73 0 68 10 9 0 71 10 73 0 74 4 254 0 75 4 254 0 78 10 73 0 83 10 73 0 84 10 73 0 86 1 95 0 87 4 254 0 89 4 254 0 96 4 254 0 97 10 73 0 99 10 73 0 100 4 254 0 102 10 73 0 103 10 73 0 108 10 73 0 109 4 254 0 110 4 254 0 113 4 254 0 116 10 73 0 118 4 254 0 121 10 73 0 122 4 254 0 125 4 254 0 126 4 254 0 128 4 254 0 129 4 254 0 133 4 254 0 135 10 61 1 13 10 61 1 14 10 61 1 15 10 73 1 16 4 254 1 112] -#[1 10 137 0 136 10 141 0 188] -#[0 5 2 0 3 0 5 0 11 0 14 0 15 0 18 0 31 0 32 0 34 0 37 0 58 0 60 0 75 0 78 0 87 0 96 0 97 0 110 0 125 0 126 0 128 0 129 0 133 1 112] -#[0 5 6 0 2 0 3 0 5 0 9 0 11 0 14 0 15 0 18 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 37 0 40 0 41 0 42 0 49 0 50 0 53 0 58 0 60 0 62 0 75 0 78 0 79 0 87 0 88 0 89 0 91 0 92 0 93 0 94 0 96 0 97 0 110 0 111 0 113 0 119 0 121 0 125 0 126 0 128 0 129 0 133 0 135 1 112] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 10 145 0 198 1 93 0 199 1 97 0 200 6 81 0 201 10 145 0 236 6 81 1 97 1 121 1 102 1 125 1 111] -#[0 5 10 0 78] -#[0 5 14 0 3 0 5 0 11 0 14 0 15 0 18 0 31 0 32 0 34 0 37 0 58 0 60 0 75 0 78 0 87 0 96 0 97 0 110 0 125 0 126 0 128 0 129 0 133 1 112] -#[1 5 18 0 3 5 18 0 5 1 99 0 11 5 18 0 14 5 18 0 15 3 37 0 18 5 18 0 31 5 18 0 32 5 18 0 34 5 18 0 37 5 18 0 58 5 18 0 60 5 18 0 75 5 18 0 78 5 18 0 87 5 18 0 96 5 18 0 97 5 18 0 110 5 18 0 125 5 18 0 126 3 41 0 128 5 18 0 129 5 18 0 133 3 45 0 179 5 18 1 112] -#[0 10 149 0 135] -#[1 1 238 0 3 1 238 0 26 1 238 0 28 1 238 0 29 1 238 0 30 1 238 0 33 1 238 0 41 1 238 0 53 1 238 0 88 1 238 0 89 1 238 0 91 1 238 0 92 1 238 0 93 1 238 0 94 1 238 0 111 1 238 0 113 1 238 0 121 1 238 0 128 1 238 0 135 10 153 0 225] -#[1 1 238 0 3 1 238 0 26 1 238 0 28 1 238 0 29 1 238 0 30 1 238 0 33 1 238 0 41 1 238 0 53 1 238 0 88 1 238 0 89 1 238 0 91 1 238 0 92 1 238 0 93 1 238 0 94 1 238 0 111 1 238 0 113 1 238 0 121 1 238 0 128 1 238 0 135 10 157 0 225] -#[1 1 238 0 3 1 238 0 26 1 238 0 28 1 238 0 29 1 238 0 30 1 238 0 33 1 238 0 41 1 238 0 53 1 238 0 88 1 238 0 89 1 238 0 91 1 238 0 92 1 238 0 93 1 238 0 94 1 238 0 111 1 238 0 113 1 238 0 121 1 238 0 128 1 238 0 135 10 161 0 225] -#[1 1 238 0 3 1 238 0 26 1 238 0 28 1 238 0 29 1 238 0 30 1 238 0 33 1 238 0 41 1 238 0 53 1 238 0 88 1 238 0 89 1 238 0 91 1 238 0 92 1 238 0 93 1 238 0 94 1 238 0 111 1 238 0 113 1 238 0 121 1 238 0 128 1 238 0 135 10 165 0 225] -#[1 10 169 0 88 10 173 0 92] -#[0 5 22 0 3 0 41] -#[0 5 26 0 3 0 26 0 41 0 88 0 92 0 93 0 94 0 111] -#[0 5 30 0 3 0 26 0 41 0 88 0 92 0 93 0 94 0 111] -#[0 5 34 0 3 0 26 0 41 0 88 0 92 0 93 0 94 0 111] -#[0 5 38 0 3 0 26 0 41 0 88 0 92 0 93 0 94 0 111] -#[0 5 42 0 3 0 26 0 41 0 88 0 92 0 93 0 94 0 111] -#[1 2 241 0 135 10 177 0 224] -#[0 5 46 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 5 50 0 3 0 25 0 26 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 88 0 89 0 91 0 92 0 93 0 94 0 102 0 111 0 113 0 116 0 121 0 128 0 135] -#[1 5 54 0 3 5 54 0 23 5 54 0 25 5 54 0 26 5 54 0 28 5 54 0 29 5 54 0 30 5 54 0 33 5 54 0 41 5 109 0 45 5 113 0 52 5 54 0 53 5 54 0 66 5 54 0 88 5 54 0 89 5 54 0 91 5 54 0 92 5 54 0 93 5 54 0 94 5 54 0 111 5 54 0 113 5 54 0 116 5 54 0 121 5 54 0 128 5 54 0 135 5 117 1 15] -#[0 5 58 0 3 0 25 0 26 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 88 0 89 0 91 0 92 0 93 0 94 0 102 0 111 0 113 0 116 0 121 0 128 0 135] -#[1 5 62 0 3 5 62 0 23 5 62 0 25 5 62 0 26 5 62 0 28 5 62 0 29 5 62 0 30 5 62 0 33 5 62 0 41 5 109 0 45 5 113 0 52 5 62 0 53 5 62 0 66 5 62 0 88 5 62 0 89 5 62 0 91 5 62 0 92 5 62 0 93 5 62 0 94 5 62 0 111 5 62 0 113 5 62 0 116 5 62 0 121 5 62 0 128 5 62 0 135 5 125 1 15] -#[0 5 66 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[1 2 221 0 2 0 170 0 133 10 181 0 185] -#[1 10 185 0 2 5 70 0 133 10 189 1 33] -#[1 2 221 0 2 0 170 0 9 10 193 0 14 0 170 0 133 7 169 0 185] -#[1 2 221 0 2 10 197 0 14 0 170 0 133 7 181 0 185] -#[1 5 74 0 9 5 74 0 31 5 74 0 34 5 74 0 58 5 74 0 60 5 74 0 75 5 74 0 96 5 74 0 97 5 74 0 110 5 74 0 125 5 74 0 126 10 201 0 128 5 74 0 133 10 205 1 1] -#[1 3 25 0 2 3 33 0 4 3 29 0 6 3 33 0 8 3 33 0 11 3 33 0 12 3 33 0 13 3 33 0 15 3 33 0 16 3 33 0 20 3 33 0 22 3 33 0 36 3 33 0 59 3 33 0 65 3 33 0 72 3 33 0 81 3 33 0 106 3 33 0 107 3 33 0 127 10 209 0 129 3 33 0 131 3 33 0 132 3 33 1 107] -#[1 3 121 0 53 8 161 0 80 3 129 0 89 8 169 1 36 8 173 1 38 8 177 1 44 8 181 1 46] -#[0 5 78 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 5 82 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 5 86 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 5 90 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 5 94 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 5 98 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 5 102 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[1 1 1 0 2 0 18 0 6 0 18 0 11 1 5 0 17 0 18 0 18 0 22 0 21 0 18 0 32 1 9 0 47 1 13 0 53 1 17 0 76 1 85 0 85 0 18 0 87 1 25 0 89 0 22 0 98 1 29 0 105 1 33 0 116 0 133 0 128 1 37 0 131 1 41 0 132 0 18 0 133 1 45 0 134 1 49 0 136 1 97 0 137 1 121 0 139 1 57 0 143 10 213 0 178 1 65 0 181 10 213 0 183 10 213 0 184 10 213 0 186 10 213 0 190 1 85 0 192 10 213 0 198 1 93 0 199 1 97 0 200 1 101 0 201 10 213 0 231 10 213 0 232 10 213 0 233 1 101 1 97 1 121 1 102 1 125 1 111] -#[1 3 46 0 3 3 46 0 19 3 46 0 24 3 46 0 25 3 46 0 26 3 46 0 27 3 46 0 28 3 46 0 29 3 46 0 30 3 46 0 32 3 46 0 33 3 46 0 34 3 46 0 39 3 46 0 41 3 46 0 43 3 46 0 45 3 46 0 46 3 46 0 48 3 46 0 49 3 46 0 52 3 46 0 53 3 46 0 62 3 46 0 63 3 46 0 68 3 46 0 71 3 46 0 74 3 46 0 83 3 46 0 84 3 46 0 86 3 46 0 87 3 46 0 88 3 46 0 89 3 46 0 91 3 46 0 92 3 46 0 93 3 46 0 94 3 46 0 99 3 46 0 100 3 46 0 102 3 46 0 103 3 46 0 108 3 46 0 109 3 46 0 111 3 46 0 113 3 46 0 116 3 46 0 118 3 46 0 121 3 46 0 122 3 46 0 128 3 46 0 135 10 217 1 11] -#[1 3 46 0 3 3 46 0 19 3 46 0 24 3 46 0 25 3 46 0 26 3 46 0 27 3 46 0 28 3 46 0 29 3 46 0 30 3 46 0 32 3 46 0 33 3 46 0 34 3 46 0 39 3 46 0 41 3 46 0 43 3 46 0 45 3 46 0 46 3 46 0 48 3 46 0 49 3 46 0 52 3 46 0 53 3 46 0 62 3 46 0 63 3 46 0 68 3 46 0 71 3 46 0 74 3 46 0 83 3 46 0 84 3 46 0 86 3 46 0 87 3 46 0 88 3 46 0 89 3 46 0 91 3 46 0 92 3 46 0 93 3 46 0 94 3 46 0 99 3 46 0 100 3 46 0 102 3 46 0 103 3 46 0 108 3 46 0 109 3 46 0 111 3 46 0 113 3 46 0 116 3 46 0 118 3 46 0 121 3 46 0 122 3 46 0 128 3 46 0 135 10 221 1 11] -#[1 3 46 0 3 3 46 0 19 3 46 0 24 3 46 0 25 3 46 0 26 3 46 0 27 3 46 0 28 3 46 0 29 3 46 0 30 3 46 0 32 3 46 0 33 3 46 0 34 3 46 0 39 3 46 0 41 3 46 0 43 3 46 0 45 3 46 0 46 3 46 0 48 3 46 0 49 3 46 0 52 3 46 0 53 3 46 0 62 3 46 0 63 3 46 0 68 3 46 0 71 3 46 0 74 3 46 0 83 3 46 0 84 3 46 0 86 3 46 0 87 3 46 0 88 3 46 0 89 3 46 0 91 3 46 0 92 3 46 0 93 3 46 0 94 3 46 0 99 3 46 0 100 3 46 0 102 3 46 0 103 3 46 0 108 3 46 0 109 3 46 0 111 3 46 0 113 3 46 0 116 3 46 0 118 3 46 0 121 3 46 0 122 3 46 0 128 3 46 0 135 10 225 1 11] -#[1 3 25 0 2 5 106 0 3 3 33 0 4 5 106 0 5 3 29 0 6 3 33 0 8 3 33 0 11 3 33 0 12 3 33 0 13 3 33 0 15 3 33 0 16 3 33 0 20 3 33 0 22 3 33 0 36 3 33 0 59 3 33 0 65 3 33 0 72 3 33 0 81 3 33 0 106 3 33 0 107 3 33 0 127 3 33 0 131 3 33 0 132 3 33 1 107] -#[0 5 110 0 5 0 15] -#[1 5 114 0 3 5 114 0 5 10 229 0 14] -#[1 10 233 0 3 10 237 0 5] -#[0 5 118 0 3 0 5] -#[0 10 241 0 135] -#[1 9 33 0 2 11 1 0 19 4 86 0 28 4 86 0 29 4 86 0 30 4 86 0 32 4 86 0 33 4 86 0 41 4 86 0 53 10 249 0 55 4 86 0 87 4 86 0 88 4 86 0 89 4 86 0 91 4 86 0 92 4 86 0 93 4 86 0 94 11 1 0 104 4 86 0 111 4 86 0 113 4 86 0 121 4 86 0 128 4 86 0 133 4 86 0 135 11 1 0 212 11 5 0 222] -#[1 0 18 0 3 0 18 0 5 0 18 0 6 11 9 0 136 11 13 0 181 11 17 0 223] -#[1 1 238 0 28 1 238 0 29 1 238 0 30 1 238 0 33 1 238 0 41 1 238 0 53 1 238 0 88 1 238 0 89 1 238 0 91 1 238 0 92 1 238 0 93 1 238 0 94 1 238 0 111 1 238 0 113 1 238 0 121 1 238 0 128 1 238 0 135 11 21 0 215 4 209 0 225] -#[0 5 122 0 23 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 57 0 62 0 66 0 89 0 102 0 113 0 116 0 121 0 135 1 112] -#[0 11 25 0 133] -#[0 11 29 0 133] -#[1 5 126 0 28 5 126 0 41 5 126 0 53 5 126 0 89 5 126 0 91 11 33 0 128 11 37 0 239] -#[0 5 130 0 23 0 25 0 29 0 44 0 53 0 66 0 89 0 113 0 116 0 121] -#[0 11 41 0 14] -#[1 5 134 0 25 5 134 0 28 5 134 0 29 5 134 0 30 5 134 0 33 5 134 0 41 5 134 0 49 5 134 0 53 5 134 0 57 5 134 0 62 5 134 0 89 5 134 0 102 5 134 0 113 5 134 0 116 5 134 0 121 9 61 0 135 11 45 0 167] -#[0 5 138 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 57 0 62 0 89 0 102 0 113 0 116 0 121 0 135] -#[1 0 69 0 2 0 73 0 17 0 10 0 23 0 77 0 25 0 81 0 26 0 14 0 41 0 14 0 49 0 85 0 51 0 89 0 54 0 93 0 56 0 97 0 61 0 14 0 62 0 101 0 69 0 105 0 70 0 109 0 76 0 113 0 95 0 117 0 101 0 121 0 115 0 125 0 123 0 129 0 124 0 133 0 128 0 137 0 131 0 141 0 132 0 14 0 133 0 145 0 135 0 149 0 137 0 245 0 139 0 157 0 143 0 161 0 200 11 49 1 61 1 209 1 62 0 169 1 63 0 173 1 64 0 177 1 65 0 181 1 66 0 185 1 67 0 189 1 69 0 193 1 75 0 197 1 84 0 201 1 86 0 205 1 87 0 209 1 89 1 209 1 90 1 209 1 91 0 221 1 92 0 225 1 93 0 225 1 94 0 225 1 95 0 225 1 96 0 225 1 97 0 245 1 102 0 225 1 103 0 253 1 111] -#[0 5 142 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 89 0 102 0 113 0 116 0 121] -#[0 5 146 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 89 0 102 0 113 0 116 0 121] -#[0 5 150 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 89 0 102 0 113 0 116 0 121] -#[0 5 154 0 41 0 49 0 62] -#[0 5 158 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 89 0 102 0 113 0 116 0 121] -#[0 5 162 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 89 0 102 0 113 0 116 0 121] -#[0 5 166 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 89 0 102 0 113 0 116 0 121] -#[1 0 46 0 23 0 46 0 25 0 46 0 29 5 109 0 45 5 113 0 52 0 46 0 53 0 46 0 66 0 46 0 89 0 46 0 113 0 46 0 116 0 46 0 121 8 249 1 15 11 53 1 53 1 189 1 54] -#[0 5 170 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 89 0 102 0 113 0 116 0 121] -#[0 5 174 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 89 0 102 0 113 0 116 0 121] -#[1 0 46 0 23 0 46 0 25 0 46 0 29 5 109 0 45 5 113 0 52 0 46 0 53 0 46 0 66 0 46 0 89 0 46 0 113 0 46 0 116 0 46 0 121 8 253 1 15 11 57 1 53 1 189 1 54] -#[0 5 178 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 89 0 102 0 113 0 116 0 121] -#[0 5 182 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 89 0 102 0 113 0 116 0 121] -#[0 5 186 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 89 0 102 0 113 0 116 0 121] -#[1 0 46 0 23 0 46 0 25 0 46 0 29 0 46 0 53 0 46 0 66 0 46 0 89 0 46 0 113 0 46 0 116 0 46 0 121 11 61 1 53 1 189 1 54] -#[0 5 190 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 89 0 102 0 113 0 116 0 121] -#[0 5 194 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 89 0 102 0 113 0 116 0 121] -#[0 5 198 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 89 0 102 0 113 0 116 0 121] -#[1 0 46 0 23 0 46 0 25 0 46 0 29 0 46 0 53 0 46 0 66 0 46 0 89 0 46 0 113 0 46 0 116 0 46 0 121 11 65 1 53 1 189 1 54] -#[0 5 202 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 89 0 102 0 113 0 116 0 121] -#[0 5 206 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 89 0 102 0 113 0 116 0 121] -#[1 0 46 0 23 0 46 0 25 0 46 0 29 5 109 0 45 5 113 0 52 0 46 0 53 0 46 0 66 0 46 0 89 0 46 0 113 0 46 0 116 0 46 0 121 9 1 1 15 11 69 1 53 1 189 1 54] -#[0 5 210 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 89 0 102 0 113 0 116 0 121] -#[1 5 214 0 41 3 221 0 133] -#[0 11 73 0 6] -#[0 5 218 1 112] -#[1 2 49 0 11 5 222 0 14 3 37 0 18 5 222 0 31 5 222 0 34 5 222 0 37 5 222 0 58 5 222 0 60 5 222 0 75 5 222 0 78 5 222 0 96 5 222 0 97 5 222 0 110 5 222 0 125 5 222 0 126 3 41 0 128 5 222 0 133 3 45 0 179] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 11 77 0 201 11 77 1 97 1 121 1 102 1 125 1 111] -#[0 11 81 0 133] -#[0 5 226 0 3 0 5 0 9 0 129 0 133] -#[1 5 230 0 3 5 230 0 19 5 230 0 23 5 230 0 24 5 230 0 25 5 230 0 26 5 230 0 27 5 230 0 28 5 230 0 29 5 230 0 30 5 230 0 32 5 230 0 33 5 230 0 34 5 230 0 39 5 230 0 41 5 230 0 43 5 230 0 45 5 230 0 46 5 230 0 48 5 230 0 49 5 230 0 52 5 230 0 53 5 230 0 57 5 230 0 62 5 230 0 63 5 230 0 66 5 230 0 68 5 230 0 71 5 230 0 74 5 230 0 83 5 230 0 84 5 230 0 86 5 230 0 87 5 230 0 88 5 230 0 89 5 230 0 91 5 230 0 92 5 230 0 93 5 230 0 94 5 230 0 99 5 230 0 100 5 230 0 102 5 230 0 103 5 230 0 108 5 230 0 109 5 230 0 111 5 230 0 113 5 230 0 116 5 230 0 118 5 230 0 121 5 230 0 122 5 230 0 128 5 230 0 135 11 85 1 12] -#[1 2 49 0 11 0 254 0 14 3 37 0 18 11 89 0 32 11 89 0 87 3 41 0 128 0 254 0 133 3 45 0 179 11 89 0 182] -#[0 11 93 0 139] -#[0 5 234 0 3 0 5 0 11 0 14 0 15 0 18 0 19 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 37 0 39 0 41 0 43 0 45 0 46 0 48 0 49 0 52 0 53 0 57 0 58 0 60 0 62 0 63 0 66 0 68 0 71 0 74 0 75 0 78 0 83 0 84 0 86 0 87 0 88 0 89 0 91 0 92 0 93 0 94 0 96 0 97 0 99 0 100 0 102 0 103 0 108 0 109 0 110 0 111 0 113 0 116 0 118 0 121 0 122 0 125 0 126 0 128 0 129 0 133 0 135 1 112] -#[0 11 97 0 139] -#[0 5 238 0 3 0 5 0 11 0 14 0 15 0 18 0 19 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 37 0 39 0 41 0 43 0 45 0 46 0 48 0 49 0 52 0 53 0 57 0 58 0 60 0 62 0 63 0 66 0 68 0 71 0 74 0 75 0 78 0 83 0 84 0 86 0 87 0 88 0 89 0 91 0 92 0 93 0 94 0 96 0 97 0 99 0 100 0 102 0 103 0 108 0 109 0 110 0 111 0 113 0 116 0 118 0 121 0 122 0 125 0 126 0 128 0 129 0 133 0 135 1 112] -#[0 5 242 0 133] -#[0 5 246 0 133] -#[0 5 250 0 133] -#[0 5 254 0 133] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 11 101 0 201 11 101 1 97 1 121 1 102 1 125 1 111] -#[0 6 2 0 133] -#[0 6 6 0 133] -#[0 6 10 0 133] -#[0 6 14 0 133] -#[0 6 18 0 133] -#[0 6 22 0 133] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 11 105 0 201 11 105 1 97 1 121 1 102 1 125 1 111] -#[0 6 26 0 133] -#[0 6 30 0 133] -#[0 6 34 0 133] -#[0 6 38 0 133] -#[0 6 42 0 133] -#[0 6 46 0 133] -#[0 6 50 0 133] -#[0 6 54 0 133] -#[0 6 58 0 133] -#[0 6 62 0 133] -#[0 6 66 0 133] -#[0 6 70 0 133] -#[0 6 74 0 3 0 5 0 11 0 14 0 15 0 18 0 19 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 37 0 39 0 41 0 43 0 45 0 46 0 48 0 49 0 52 0 53 0 57 0 58 0 60 0 62 0 63 0 66 0 68 0 71 0 74 0 75 0 78 0 83 0 84 0 86 0 87 0 88 0 89 0 91 0 92 0 93 0 94 0 96 0 97 0 99 0 100 0 102 0 103 0 108 0 109 0 110 0 111 0 113 0 116 0 118 0 121 0 122 0 125 0 126 0 128 0 129 0 133 0 135 1 112] -#[0 6 78 0 3 0 5 0 11 0 14 0 15 0 18 0 19 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 37 0 39 0 41 0 43 0 45 0 46 0 48 0 49 0 52 0 53 0 57 0 58 0 60 0 62 0 63 0 66 0 68 0 71 0 74 0 75 0 78 0 83 0 84 0 86 0 87 0 88 0 89 0 91 0 92 0 93 0 94 0 96 0 97 0 99 0 100 0 102 0 103 0 108 0 109 0 110 0 111 0 113 0 116 0 118 0 121 0 122 0 125 0 126 0 128 0 129 0 133 0 135 1 112] -#[0 6 82 0 3 0 5 0 11 0 14 0 15 0 18 0 19 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 37 0 39 0 41 0 43 0 45 0 46 0 48 0 49 0 52 0 53 0 57 0 58 0 60 0 62 0 63 0 66 0 68 0 71 0 74 0 75 0 78 0 83 0 84 0 86 0 87 0 88 0 89 0 91 0 92 0 93 0 94 0 96 0 97 0 99 0 100 0 102 0 103 0 108 0 109 0 110 0 111 0 113 0 116 0 118 0 121 0 122 0 125 0 126 0 128 0 129 0 133 0 135 1 112] -#[0 11 109 0 133] -#[1 3 25 0 2 3 33 0 4 6 86 0 5 3 29 0 6 3 33 0 8 6 86 0 9 3 33 0 11 3 33 0 12 3 33 0 13 3 33 0 15 3 33 0 16 3 33 0 20 3 33 0 22 3 33 0 36 3 33 0 59 3 33 0 65 3 33 0 72 3 33 0 81 3 33 0 106 3 33 0 107 3 33 0 127 3 33 0 131 3 33 0 132 3 33 1 107] -#[1 6 90 0 41 3 221 0 133] -#[0 6 94 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[0 6 98 0 40 0 41 0 133] -#[0 6 102 0 40 0 41 0 133] -#[1 6 106 0 5 6 110 0 9] -#[1 2 65 0 2 2 169 0 4 2 73 0 6 2 169 0 8 2 81 0 10 2 169 0 11 2 169 0 12 2 169 0 13 2 169 0 14 2 169 0 15 2 169 0 16 2 169 0 20 2 169 0 22 2 169 0 36 11 113 0 37 2 169 0 59 2 169 0 65 2 169 0 72 2 169 0 81 2 169 0 106 2 169 0 107 2 169 0 127 2 149 0 128 2 169 0 131 2 169 0 132 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107] -#[0 6 114 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[0 6 118 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[0 6 122 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 20 0 22 0 31 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[0 6 126 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 20 0 22 0 31 0 34 0 36 0 37 0 38 0 40 0 41 0 42 0 49 0 50 0 58 0 59 0 60 0 62 0 65 0 72 0 75 0 78 0 79 0 81 0 96 0 97 0 106 0 107 0 110 0 112 0 114 0 119 0 125 0 126 0 127 0 128 0 129 0 130 0 131 0 132 0 133 0 134 1 112] -#[0 11 117 0 37] -#[1 6 130 0 41 6 130 0 50 3 221 0 133] -#[1 6 134 0 3 2 49 0 11 11 121 0 14 3 37 0 18 3 41 0 128 6 134 0 129 6 134 0 133 3 45 0 179 11 125 1 21] -#[1 3 46 0 3 3 46 0 5 3 46 0 11 3 46 0 14 3 46 0 15 3 46 0 18 3 46 0 19 3 46 0 23 3 46 0 24 3 46 0 25 3 46 0 27 3 46 0 28 3 46 0 29 3 46 0 30 3 46 0 31 3 46 0 32 3 46 0 33 3 46 0 34 3 46 0 37 3 46 0 39 3 46 0 41 3 46 0 43 3 46 0 45 3 46 0 46 3 46 0 48 3 46 0 49 3 46 0 52 3 46 0 53 3 46 0 57 3 46 0 58 3 46 0 60 3 46 0 62 3 46 0 63 3 46 0 66 3 46 0 68 3 46 0 71 3 46 0 74 3 46 0 75 3 46 0 78 3 46 0 83 3 46 0 84 3 46 0 86 3 46 0 87 3 46 0 89 3 46 0 96 3 46 0 97 3 46 0 99 3 46 0 100 3 46 0 102 3 46 0 103 3 46 0 108 3 46 0 109 3 46 0 110 3 46 0 113 3 46 0 116 3 46 0 118 3 46 0 121 3 46 0 122 3 46 0 125 3 46 0 126 3 46 0 128 3 46 0 129 3 46 0 133 3 46 0 135 11 129 1 11 3 46 1 112] -#[0 6 138 0 3 0 5] -#[1 6 142 0 3 11 133 0 5] -#[0 6 146 0 5 0 129] -#[1 7 157 0 9 3 6 0 78 11 137 0 252] -#[1 6 150 0 3 6 150 0 26 6 105 0 28 3 117 0 29 6 109 0 30 6 113 0 33 6 150 0 41 6 117 0 53 6 150 0 88 6 121 0 89 6 125 0 91 6 150 0 92 6 150 0 93 6 150 0 94 6 150 0 111 3 133 0 113 3 141 0 121 6 129 0 128 5 69 0 135 6 137 0 162 6 137 0 226 6 137 0 227 6 145 0 228 6 137 0 229 6 137 0 230 6 137 0 242 6 137 0 243 6 137 0 244 6 137 0 245 6 137 0 246 6 137 0 247 6 137 0 249 6 137 0 250 6 137 0 251 6 137 0 253 6 197 0 254 6 137 0 255 6 205 1 20 6 137 1 28 6 213 1 29 6 137 1 31 6 221 1 32 6 137 1 35 3 161 1 36 6 137 1 37 3 169 1 38 6 137 1 40 6 137 1 41 6 137 1 43 3 181 1 44 6 137 1 45 3 189 1 46 6 137 1 48 6 137 1 49 6 137 1 51 7 5 1 52 6 137 1 57 3 205 1 58] -#[1 6 154 0 3 6 154 0 26 6 105 0 28 3 117 0 29 6 109 0 30 6 113 0 33 6 154 0 41 6 117 0 53 6 154 0 88 6 121 0 89 6 125 0 91 6 154 0 92 6 154 0 93 6 154 0 94 6 154 0 111 3 133 0 113 3 141 0 121 6 129 0 128 5 69 0 135 6 137 0 162 6 137 0 226 6 137 0 227 6 145 0 228 6 137 0 229 6 137 0 230 6 137 0 242 6 137 0 243 6 137 0 244 6 137 0 245 6 137 0 246 6 137 0 247 6 137 0 249 6 137 0 250 6 137 0 251 6 137 0 253 6 197 0 254 6 137 0 255 6 205 1 20 6 137 1 28 6 213 1 29 6 137 1 31 6 221 1 32 6 137 1 35 3 161 1 36 6 137 1 37 3 169 1 38 6 137 1 40 6 137 1 41 6 137 1 43 3 181 1 44 6 137 1 45 3 189 1 46 6 137 1 48 6 137 1 49 6 137 1 51 7 5 1 52 6 137 1 57 3 205 1 58] -#[1 6 158 0 3 6 158 0 26 6 105 0 28 3 117 0 29 6 109 0 30 6 113 0 33 6 158 0 41 6 117 0 53 6 158 0 88 6 121 0 89 6 125 0 91 6 158 0 92 6 158 0 93 6 158 0 94 6 158 0 111 3 133 0 113 3 141 0 121 6 129 0 128 5 69 0 135 6 137 0 162 6 137 0 226 6 137 0 227 6 145 0 228 6 137 0 229 6 137 0 230 6 137 0 242 6 137 0 243 6 137 0 244 6 137 0 245 6 137 0 246 6 137 0 247 6 137 0 249 6 137 0 250 6 137 0 251 6 137 0 253 6 197 0 254 6 137 0 255 6 205 1 20 6 137 1 28 6 213 1 29 6 137 1 31 6 221 1 32 6 137 1 35 3 161 1 36 6 137 1 37 3 169 1 38 6 137 1 40 6 137 1 41 6 137 1 43 3 181 1 44 6 137 1 45 3 189 1 46 6 137 1 48 6 137 1 49 6 137 1 51 7 5 1 52 6 137 1 57 3 205 1 58] -#[1 6 162 0 3 6 162 0 26 6 105 0 28 3 117 0 29 6 109 0 30 6 113 0 33 6 162 0 41 6 117 0 53 6 162 0 88 6 121 0 89 6 125 0 91 6 162 0 92 6 162 0 93 6 162 0 94 6 162 0 111 3 133 0 113 3 141 0 121 6 129 0 128 5 69 0 135 6 137 0 162 6 137 0 226 6 137 0 227 6 145 0 228 6 137 0 229 6 137 0 230 6 137 0 242 6 137 0 243 6 137 0 244 6 137 0 245 6 137 0 246 6 137 0 247 6 137 0 249 6 137 0 250 6 137 0 251 6 137 0 253 6 197 0 254 6 137 0 255 6 205 1 20 6 137 1 28 6 213 1 29 6 137 1 31 6 221 1 32 6 137 1 35 3 161 1 36 6 137 1 37 3 169 1 38 6 137 1 40 6 137 1 41 6 137 1 43 3 181 1 44 6 137 1 45 3 189 1 46 6 137 1 48 6 137 1 49 6 137 1 51 7 5 1 52 6 137 1 57 3 205 1 58] -#[1 1 238 0 3 1 238 0 26 1 238 0 28 1 238 0 29 1 238 0 30 1 238 0 33 1 238 0 41 1 238 0 53 1 238 0 88 1 238 0 89 1 238 0 91 1 238 0 92 1 238 0 93 1 238 0 94 1 238 0 111 1 238 0 113 1 238 0 121 1 238 0 128 1 238 0 135 11 141 0 225] -#[1 1 238 0 3 1 238 0 26 1 238 0 28 1 238 0 29 1 238 0 30 1 238 0 33 1 238 0 41 1 238 0 53 1 238 0 88 1 238 0 89 1 238 0 91 1 238 0 92 1 238 0 93 1 238 0 94 1 238 0 111 1 238 0 113 1 238 0 121 1 238 0 128 1 238 0 135 11 145 0 225] -#[1 2 221 0 2 0 170 0 9 0 170 0 133 11 149 0 185] -#[0 11 153 0 133] -#[0 11 157 0 3] -#[0 11 161 0 133] -#[0 11 165 0 135] -#[0 11 169 0 135] -#[1 4 157 0 29 4 157 0 82 4 157 0 121 1 202 0 129 1 206 0 135 11 173 1 17 4 149 1 18 4 153 1 19 4 157 1 22] -#[1 7 157 0 9 3 6 0 31 3 6 0 34 3 6 0 58 3 6 0 60 3 6 0 75 3 6 0 96 3 6 0 97 3 6 0 110 3 6 0 125 3 6 0 126 3 6 0 133 11 177 0 252] -#[0 6 166 0 28 0 30 0 33 0 53 0 89] -#[1 2 49 0 11 3 37 0 18 11 181 0 32 11 181 0 87 3 41 0 128 0 254 0 133 3 45 0 179 11 181 0 182] -#[1 6 170 0 3 10 73 0 19 10 73 0 24 6 170 0 25 6 170 0 26 10 73 0 27 6 170 0 28 6 170 0 29 6 170 0 30 10 73 0 32 6 170 0 33 9 237 0 34 10 73 0 39 6 170 0 41 10 73 0 43 5 109 0 45 10 73 0 46 10 73 0 48 6 170 0 49 5 113 0 52 6 170 0 53 6 170 0 62 10 73 0 63 10 73 0 68 10 9 0 71 10 73 0 74 10 73 0 83 10 73 0 84 10 73 0 86 10 73 0 87 6 170 0 88 6 170 0 89 6 170 0 91 6 170 0 92 6 170 0 93 6 170 0 94 10 73 0 99 10 73 0 100 6 170 0 102 10 73 0 103 10 73 0 108 10 73 0 109 6 170 0 111 6 170 0 113 6 170 0 116 10 73 0 118 6 170 0 121 10 73 0 122 6 170 0 128 6 170 0 135 10 61 1 13 10 61 1 14 10 61 1 15 10 73 1 16] -#[1 6 174 0 3 10 73 0 19 10 73 0 24 6 174 0 25 6 174 0 26 10 73 0 27 6 174 0 28 6 174 0 29 6 174 0 30 10 73 0 32 6 174 0 33 9 237 0 34 10 73 0 39 6 174 0 41 10 73 0 43 5 109 0 45 10 73 0 46 10 73 0 48 6 174 0 49 5 113 0 52 6 174 0 53 6 174 0 62 10 73 0 63 10 73 0 68 10 9 0 71 10 73 0 74 10 73 0 83 10 73 0 84 10 73 0 86 10 73 0 87 6 174 0 88 6 174 0 89 6 174 0 91 6 174 0 92 6 174 0 93 6 174 0 94 10 73 0 99 10 73 0 100 6 174 0 102 10 73 0 103 10 73 0 108 10 73 0 109 6 174 0 111 6 174 0 113 6 174 0 116 10 73 0 118 6 174 0 121 10 73 0 122 6 174 0 128 6 174 0 135 10 61 1 13 10 61 1 14 10 61 1 15 10 73 1 16] -#[1 6 178 0 3 10 73 0 19 10 73 0 24 6 178 0 25 6 178 0 26 10 73 0 27 6 178 0 28 6 178 0 29 6 178 0 30 10 73 0 32 6 178 0 33 9 237 0 34 10 73 0 39 6 178 0 41 10 73 0 43 5 109 0 45 10 73 0 46 10 73 0 48 6 178 0 49 5 113 0 52 6 178 0 53 6 178 0 62 10 73 0 63 10 73 0 68 10 9 0 71 10 73 0 74 10 73 0 83 10 73 0 84 10 73 0 86 10 73 0 87 6 178 0 88 6 178 0 89 6 178 0 91 6 178 0 92 6 178 0 93 6 178 0 94 10 73 0 99 10 73 0 100 6 178 0 102 10 73 0 103 10 73 0 108 10 73 0 109 6 178 0 111 6 178 0 113 6 178 0 116 10 73 0 118 6 178 0 121 10 73 0 122 6 178 0 128 6 178 0 135 10 61 1 13 10 61 1 14 10 61 1 15 10 73 1 16] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 11 185 0 201 11 185 1 97 1 121 1 102 1 125 1 111] -#[0 6 182 0 133] -#[1 9 13 0 135 11 189 0 176] -#[0 6 186 0 32 0 87 0 133] -#[0 6 190 0 2 0 19 0 28 0 29 0 30 0 32 0 33 0 41 0 53 0 55 0 87 0 88 0 89 0 91 0 92 0 93 0 94 0 104 0 111 0 113 0 121 0 128 0 133 0 135] -#[0 11 193 0 51] -#[0 6 194 0 2 0 19 0 28 0 29 0 30 0 32 0 33 0 41 0 53 0 55 0 87 0 88 0 89 0 91 0 92 0 93 0 94 0 104 0 111 0 113 0 121 0 128 0 133 0 135] -#[0 6 198 0 2 0 19 0 28 0 29 0 30 0 32 0 33 0 41 0 53 0 55 0 87 0 88 0 89 0 91 0 92 0 93 0 94 0 104 0 111 0 113 0 121 0 128 0 133 0 135] -#[1 1 238 0 28 1 238 0 29 1 238 0 30 6 202 0 32 1 238 0 33 1 238 0 41 1 238 0 53 6 202 0 87 1 238 0 88 1 238 0 89 1 238 0 91 1 238 0 92 1 238 0 93 1 238 0 94 1 238 0 111 1 238 0 113 1 238 0 121 1 238 0 128 6 202 0 133 1 238 0 135 11 197 0 215 4 209 0 225] -#[0 0 182 0 3 0 5 0 6] -#[1 6 206 0 3 6 206 0 5 3 9 0 6] -#[1 11 201 0 3 11 205 0 5] -#[1 2 186 0 41 2 186 0 88 2 186 0 92 2 186 0 93 2 186 0 94 2 186 0 111 11 209 0 216] -#[0 6 210 0 23 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 57 0 62 0 66 0 89 0 102 0 113 0 116 0 121 0 135 1 112] -#[0 6 214 0 23 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 57 0 62 0 66 0 89 0 102 0 113 0 116 0 121 0 135 1 112] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 11 213 0 201 11 213 1 97 1 121 1 102 1 125 1 111] -#[1 6 218 0 28 6 218 0 41 6 218 0 53 6 218 0 89 6 218 0 91 11 217 0 240] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 11 221 0 201 11 221 1 97 1 121 1 102 1 125 1 111] -#[0 6 222 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 57 0 62 0 89 0 102 0 113 0 116 0 121 0 135] -#[1 6 226 0 41 6 226 0 49 6 226 0 62 3 221 0 133] -#[0 6 230 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 89 0 102 0 113 0 116 0 121] -#[0 6 234 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 89 0 102 0 113 0 116 0 121] -#[0 6 238 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 89 0 102 0 113 0 116 0 121] -#[0 6 242 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 89 0 102 0 113 0 116 0 121] -#[0 6 246 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 62 0 89 0 102 0 113 0 116 0 121] -#[0 6 250 1 112] -#[1 3 25 0 2 3 33 0 4 3 29 0 6 3 33 0 8 3 33 0 11 3 33 0 12 3 33 0 13 3 33 0 15 3 33 0 16 3 33 0 20 3 33 0 22 1 103 0 32 3 33 0 36 3 33 0 59 3 33 0 65 3 33 0 72 3 33 0 81 11 225 0 87 3 33 0 106 3 33 0 107 3 33 0 127 3 33 0 131 3 33 0 132 0 254 0 133 11 225 0 182 3 33 1 107] -#[1 5 230 0 3 5 230 0 19 5 230 0 23 5 230 0 24 5 230 0 25 5 230 0 26 5 230 0 27 5 230 0 28 5 230 0 29 5 230 0 30 5 230 0 32 5 230 0 33 5 230 0 34 5 230 0 39 5 230 0 41 5 230 0 43 5 230 0 45 5 230 0 46 5 230 0 48 5 230 0 49 5 230 0 52 5 230 0 53 5 230 0 57 5 230 0 62 5 230 0 63 5 230 0 66 5 230 0 68 5 230 0 71 5 230 0 74 5 230 0 83 5 230 0 84 5 230 0 86 5 230 0 87 5 230 0 88 5 230 0 89 5 230 0 91 5 230 0 92 5 230 0 93 5 230 0 94 5 230 0 99 5 230 0 100 5 230 0 102 5 230 0 103 5 230 0 108 5 230 0 109 5 230 0 111 5 230 0 113 5 230 0 116 5 230 0 118 5 230 0 121 5 230 0 122 5 230 0 128 5 230 0 135 11 229 1 12] -#[1 6 254 0 3 10 73 0 19 6 254 0 23 10 73 0 24 6 254 0 25 6 254 0 26 10 73 0 27 6 254 0 28 6 254 0 29 6 254 0 30 10 73 0 32 6 254 0 33 9 237 0 34 10 73 0 39 6 254 0 41 10 73 0 43 6 254 0 45 10 73 0 46 10 73 0 48 6 254 0 49 6 254 0 52 6 254 0 53 6 254 0 57 6 254 0 62 10 73 0 63 6 254 0 66 10 73 0 68 10 9 0 71 10 73 0 74 10 73 0 83 10 73 0 84 10 73 0 86 10 73 0 87 6 254 0 88 6 254 0 89 6 254 0 91 6 254 0 92 6 254 0 93 6 254 0 94 10 73 0 99 10 73 0 100 6 254 0 102 10 73 0 103 10 73 0 108 10 73 0 109 6 254 0 111 6 254 0 113 6 254 0 116 10 73 0 118 6 254 0 121 10 73 0 122 6 254 0 128 6 254 0 135 11 233 1 14 10 73 1 16] -#[1 11 121 0 14 6 134 0 133 11 237 1 21] -#[0 11 241 0 133] -#[0 11 245 0 133] -#[1 3 25 0 2 3 33 0 4 3 29 0 6 3 33 0 8 3 33 0 11 3 33 0 12 3 33 0 13 3 33 0 15 3 33 0 16 3 33 0 20 3 33 0 22 3 33 0 36 3 33 0 59 3 33 0 65 3 33 0 72 3 33 0 81 3 33 0 106 3 33 0 107 3 33 0 127 3 33 0 131 3 33 0 132 11 249 0 133 3 33 1 107] -#[1 3 25 0 2 3 33 0 4 3 29 0 6 3 33 0 8 3 33 0 11 3 33 0 12 3 33 0 13 3 33 0 15 3 33 0 16 3 33 0 20 3 33 0 22 3 33 0 36 3 33 0 59 3 33 0 65 3 33 0 72 3 33 0 81 3 33 0 106 3 33 0 107 3 33 0 127 3 33 0 131 3 33 0 132 11 253 0 133 3 33 1 107] -#[0 7 2 0 3 0 5 0 11 0 14 0 15 0 18 0 19 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 37 0 39 0 41 0 43 0 45 0 46 0 48 0 49 0 52 0 53 0 57 0 58 0 60 0 62 0 63 0 66 0 68 0 71 0 74 0 75 0 78 0 83 0 84 0 86 0 87 0 88 0 89 0 91 0 92 0 93 0 94 0 96 0 97 0 99 0 100 0 102 0 103 0 108 0 109 0 110 0 111 0 113 0 116 0 118 0 121 0 122 0 125 0 126 0 128 0 129 0 133 0 135 1 112] -#[1 0 69 0 2 0 73 0 17 0 10 0 23 0 77 0 25 0 81 0 26 0 14 0 40 0 14 0 41 0 14 0 42 0 14 0 49 0 14 0 50 0 85 0 51 0 89 0 54 0 93 0 56 0 97 0 61 0 14 0 62 0 101 0 69 0 105 0 70 0 109 0 76 0 14 0 79 0 113 0 95 0 117 0 101 0 121 0 115 0 14 0 119 0 125 0 123 0 129 0 124 0 133 0 128 0 137 0 131 0 141 0 132 0 14 0 133 0 145 0 135 0 149 0 137 0 245 0 139 0 157 0 143 0 161 0 200 12 1 1 62 0 169 1 63 0 173 1 64 0 177 1 65 0 181 1 66 0 185 1 67 0 189 1 69 0 193 1 75 0 197 1 84 0 201 1 86 0 205 1 87 0 209 1 89 12 1 1 90 12 1 1 91 0 221 1 92 0 225 1 93 0 225 1 94 0 225 1 95 0 225 1 96 0 225 1 97 0 245 1 102 0 225 1 103 0 253 1 111 0 14 1 112] -#[1 0 69 0 2 0 73 0 17 0 10 0 23 0 77 0 25 0 81 0 26 0 14 0 40 0 14 0 41 0 14 0 50 0 85 0 51 0 89 0 54 0 93 0 56 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 14 0 79 0 113 0 95 0 117 0 101 0 121 0 115 0 125 0 123 0 129 0 124 0 133 0 128 0 137 0 131 0 141 0 132 0 14 0 133 0 145 0 135 0 149 0 137 0 245 0 139 0 157 0 143 0 161 0 200 12 5 1 61 1 209 1 62 0 169 1 63 0 173 1 64 0 177 1 65 0 181 1 66 0 185 1 67 0 189 1 69 0 193 1 75 0 197 1 84 0 201 1 86 0 205 1 87 0 209 1 89 1 209 1 90 1 209 1 91 0 221 1 92 0 225 1 93 0 225 1 94 0 225 1 95 0 225 1 96 0 225 1 97 0 245 1 102 0 225 1 103 0 253 1 111] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 12 9 0 201 12 9 1 97 1 121 1 102 1 125 1 111] -#[0 7 6 0 3 0 129 0 133] -#[1 7 10 0 3 7 10 0 5 7 10 0 11 7 10 0 14 7 10 0 15 7 10 0 18 10 73 0 19 7 10 0 23 10 73 0 24 7 10 0 25 10 73 0 27 7 10 0 28 7 10 0 29 7 10 0 30 7 10 0 31 1 107 0 32 7 10 0 33 1 111 0 34 7 10 0 37 10 73 0 39 7 10 0 41 10 73 0 43 5 109 0 45 10 73 0 46 10 73 0 48 7 10 0 49 5 113 0 52 7 10 0 53 7 10 0 57 7 10 0 58 7 10 0 60 7 10 0 62 10 73 0 63 7 10 0 66 10 73 0 68 10 9 0 71 10 73 0 74 7 10 0 75 7 10 0 78 10 73 0 83 10 73 0 84 10 73 0 86 1 115 0 87 7 10 0 89 7 10 0 96 7 10 0 97 10 73 0 99 10 73 0 100 7 10 0 102 10 73 0 103 10 73 0 108 10 73 0 109 7 10 0 110 7 10 0 113 7 10 0 116 10 73 0 118 7 10 0 121 10 73 0 122 7 10 0 125 7 10 0 126 7 10 0 128 7 10 0 129 7 10 0 133 7 10 0 135 10 61 1 13 10 61 1 14 10 61 1 15 10 73 1 16 7 10 1 112] -#[0 12 13 0 136] -#[0 12 17 0 78] -#[1 7 14 0 3 7 14 0 26 6 105 0 28 3 117 0 29 6 109 0 30 6 113 0 33 7 14 0 41 6 117 0 53 7 14 0 88 6 121 0 89 6 125 0 91 7 14 0 92 7 14 0 93 7 14 0 94 7 14 0 111 3 133 0 113 3 141 0 121 6 129 0 128 5 69 0 135 6 137 0 162 6 137 0 226 6 137 0 227 6 145 0 228 6 137 0 229 6 137 0 230 6 137 0 242 6 137 0 243 6 137 0 244 6 137 0 245 6 137 0 246 6 137 0 247 6 137 0 249 6 137 0 250 6 137 0 251 6 137 0 253 6 197 0 254 6 137 0 255 6 205 1 20 6 137 1 28 6 213 1 29 6 137 1 31 6 221 1 32 6 137 1 35 3 161 1 36 6 137 1 37 3 169 1 38 6 137 1 40 6 137 1 41 6 137 1 43 3 181 1 44 6 137 1 45 3 189 1 46 6 137 1 48 6 137 1 49 6 137 1 51 7 5 1 52 6 137 1 57 3 205 1 58] -#[1 7 18 0 3 7 18 0 26 6 105 0 28 3 117 0 29 6 109 0 30 6 113 0 33 7 18 0 41 6 117 0 53 7 18 0 88 6 121 0 89 6 125 0 91 7 18 0 92 7 18 0 93 7 18 0 94 7 18 0 111 3 133 0 113 3 141 0 121 6 129 0 128 5 69 0 135 6 137 0 162 6 137 0 226 6 137 0 227 6 145 0 228 6 137 0 229 6 137 0 230 6 137 0 242 6 137 0 243 6 137 0 244 6 137 0 245 6 137 0 246 6 137 0 247 6 137 0 249 6 137 0 250 6 137 0 251 6 137 0 253 6 197 0 254 6 137 0 255 6 205 1 20 6 137 1 28 6 213 1 29 6 137 1 31 6 221 1 32 6 137 1 35 3 161 1 36 6 137 1 37 3 169 1 38 6 137 1 40 6 137 1 41 6 137 1 43 3 181 1 44 6 137 1 45 3 189 1 46 6 137 1 48 6 137 1 49 6 137 1 51 7 5 1 52 6 137 1 57 3 205 1 58] -#[1 7 157 0 9 3 6 0 133 12 21 0 252] -#[1 5 230 0 3 5 230 0 19 5 230 0 23 5 230 0 24 5 230 0 25 5 230 0 26 5 230 0 27 5 230 0 28 5 230 0 29 5 230 0 30 5 230 0 32 5 230 0 33 5 230 0 34 5 230 0 39 5 230 0 41 5 230 0 43 5 230 0 45 5 230 0 46 5 230 0 48 5 230 0 52 5 230 0 53 5 230 0 63 5 230 0 66 5 230 0 68 5 230 0 71 5 230 0 74 5 230 0 83 5 230 0 84 5 230 0 86 5 230 0 87 5 230 0 88 5 230 0 89 5 230 0 91 5 230 0 92 5 230 0 93 5 230 0 94 5 230 0 99 5 230 0 100 5 230 0 103 5 230 0 108 5 230 0 109 5 230 0 111 5 230 0 113 5 230 0 116 5 230 0 118 5 230 0 121 5 230 0 122 5 230 0 128 5 230 0 135 12 25 1 12] -#[0 7 22 0 133] -#[1 5 230 0 3 5 230 0 19 5 230 0 23 5 230 0 24 5 230 0 25 5 230 0 26 5 230 0 27 5 230 0 28 5 230 0 29 5 230 0 30 5 230 0 32 5 230 0 33 5 230 0 34 5 230 0 39 5 230 0 41 5 230 0 43 5 230 0 45 5 230 0 46 5 230 0 48 5 230 0 52 5 230 0 53 5 230 0 63 5 230 0 66 5 230 0 68 5 230 0 71 5 230 0 74 5 230 0 83 5 230 0 84 5 230 0 86 5 230 0 87 5 230 0 88 5 230 0 89 5 230 0 91 5 230 0 92 5 230 0 93 5 230 0 94 5 230 0 99 5 230 0 100 5 230 0 103 5 230 0 108 5 230 0 109 5 230 0 111 5 230 0 113 5 230 0 116 5 230 0 118 5 230 0 121 5 230 0 122 5 230 0 128 5 230 0 135 12 29 1 12] -#[0 12 33 0 133] -#[0 12 37 0 133] -#[0 12 41 0 129] -#[1 7 26 0 31 7 26 0 34 7 26 0 58 7 26 0 60 7 26 0 75 7 26 0 96 7 26 0 97 7 26 0 110 7 26 0 125 7 26 0 126 7 26 0 133 12 45 1 0] -#[0 12 49 0 133] -#[1 3 25 0 2 7 30 0 3 3 33 0 4 7 30 0 5 3 29 0 6 3 33 0 8 3 33 0 11 3 33 0 12 3 33 0 13 3 33 0 15 3 33 0 16 3 33 0 20 3 33 0 22 3 33 0 36 3 33 0 59 3 33 0 65 3 33 0 72 3 33 0 81 3 33 0 106 3 33 0 107 3 33 0 127 3 33 0 131 3 33 0 132 3 33 1 107] -#[0 7 34 0 3 0 5] -#[1 2 241 0 135 12 53 0 224] -#[1 2 186 0 41 2 186 0 88 2 186 0 92 2 186 0 93 2 186 0 94 2 186 0 111 12 57 0 216] -#[0 7 38 0 28 0 29 0 30 0 32 0 33 0 41 0 53 0 87 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 133 0 135] -#[1 0 18 0 3 0 18 0 5 0 18 0 6 11 9 0 136 12 61 0 181] -#[1 12 65 0 41 8 117 0 88 8 121 0 92 8 125 0 93 8 129 0 94 8 133 0 111 8 141 0 217 8 141 0 218 8 141 0 219 8 141 0 220 8 141 0 221] -#[1 3 25 0 2 3 33 0 4 3 29 0 6 3 33 0 8 3 33 0 11 3 33 0 12 3 33 0 13 3 33 0 15 3 33 0 16 3 33 0 20 3 33 0 22 3 33 0 36 3 33 0 59 3 33 0 65 3 33 0 72 3 33 0 81 3 33 0 106 3 33 0 107 3 33 0 127 12 69 0 129 3 33 0 131 3 33 0 132 3 33 1 107] -#[1 12 73 0 28 12 77 0 41 3 121 0 53 3 129 0 89 6 125 0 91 12 81 0 241 12 81 0 242 12 81 0 243 12 81 0 246 12 81 0 247 12 81 0 249 12 81 0 250 12 81 0 251 12 81 0 253 6 197 0 254 12 81 0 255 12 81 1 35 3 161 1 36 12 81 1 37 3 169 1 38 12 81 1 40 12 81 1 41 12 81 1 43 3 181 1 44 12 81 1 45 3 189 1 46 12 81 1 48 12 81 1 49 12 81 1 51 7 5 1 52] -#[1 3 25 0 2 3 33 0 4 3 29 0 6 3 33 0 8 3 33 0 11 3 33 0 12 3 33 0 13 3 33 0 15 3 33 0 16 3 33 0 20 3 33 0 22 12 97 0 32 3 33 0 36 3 33 0 59 3 33 0 65 3 33 0 72 3 33 0 81 3 33 0 106 3 33 0 107 3 33 0 127 3 33 0 131 3 33 0 132 7 42 0 133 12 97 0 214 3 33 1 107] -#[1 12 101 0 32 7 42 0 133 12 101 0 214] -#[1 7 46 0 3 10 73 0 19 7 46 0 23 10 73 0 24 7 46 0 25 7 46 0 26 10 73 0 27 7 46 0 28 7 46 0 29 7 46 0 30 10 73 0 32 7 46 0 33 9 237 0 34 10 73 0 39 7 46 0 41 10 73 0 43 7 46 0 45 10 73 0 46 10 73 0 48 7 46 0 49 7 46 0 52 7 46 0 53 7 46 0 57 7 46 0 62 10 73 0 63 7 46 0 66 10 73 0 68 10 9 0 71 10 73 0 74 10 73 0 83 10 73 0 84 10 73 0 86 10 73 0 87 7 46 0 88 7 46 0 89 7 46 0 91 7 46 0 92 7 46 0 93 7 46 0 94 10 73 0 99 10 73 0 100 7 46 0 102 10 73 0 103 10 73 0 108 10 73 0 109 7 46 0 111 7 46 0 113 7 46 0 116 10 73 0 118 7 46 0 121 10 73 0 122 7 46 0 128 7 46 0 135 11 233 1 14 10 73 1 16] -#[0 7 50 0 3 0 19 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 32 0 33 0 34 0 39 0 41 0 43 0 45 0 46 0 48 0 49 0 52 0 53 0 57 0 62 0 63 0 66 0 68 0 71 0 74 0 83 0 84 0 86 0 87 0 88 0 89 0 91 0 92 0 93 0 94 0 99 0 100 0 102 0 103 0 108 0 109 0 111 0 113 0 116 0 118 0 121 0 122 0 128 0 135] -#[0 12 105 0 133] -#[0 7 54 0 3 0 5 0 11 0 14 0 15 0 18 0 19 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 37 0 39 0 41 0 43 0 45 0 46 0 48 0 49 0 52 0 53 0 57 0 58 0 60 0 62 0 63 0 66 0 68 0 71 0 74 0 75 0 78 0 83 0 84 0 86 0 87 0 88 0 89 0 91 0 92 0 93 0 94 0 96 0 97 0 99 0 100 0 102 0 103 0 108 0 109 0 110 0 111 0 113 0 116 0 118 0 121 0 122 0 125 0 126 0 128 0 129 0 133 0 135 1 112] -#[0 7 58 0 3 0 5 0 11 0 14 0 15 0 18 0 19 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 37 0 39 0 41 0 43 0 45 0 46 0 48 0 49 0 52 0 53 0 57 0 58 0 60 0 62 0 63 0 66 0 68 0 71 0 74 0 75 0 78 0 83 0 84 0 86 0 87 0 88 0 89 0 91 0 92 0 93 0 94 0 96 0 97 0 99 0 100 0 102 0 103 0 108 0 109 0 110 0 111 0 113 0 116 0 118 0 121 0 122 0 125 0 126 0 128 0 129 0 133 0 135 1 112] -#[0 7 62 0 3 0 5 0 11 0 14 0 15 0 18 0 19 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 37 0 39 0 41 0 43 0 45 0 46 0 48 0 49 0 52 0 53 0 57 0 58 0 60 0 62 0 63 0 66 0 68 0 71 0 74 0 75 0 78 0 83 0 84 0 86 0 87 0 88 0 89 0 91 0 92 0 93 0 94 0 96 0 97 0 99 0 100 0 102 0 103 0 108 0 109 0 110 0 111 0 113 0 116 0 118 0 121 0 122 0 125 0 126 0 128 0 129 0 133 0 135 1 112] -#[0 7 66 0 3 0 5 0 11 0 14 0 15 0 18 0 19 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 37 0 39 0 41 0 43 0 45 0 46 0 48 0 49 0 52 0 53 0 57 0 58 0 60 0 62 0 63 0 66 0 68 0 71 0 74 0 75 0 78 0 83 0 84 0 86 0 87 0 88 0 89 0 91 0 92 0 93 0 94 0 96 0 97 0 99 0 100 0 102 0 103 0 108 0 109 0 110 0 111 0 113 0 116 0 118 0 121 0 122 0 125 0 126 0 128 0 129 0 133 0 135 1 112] -#[0 7 70 0 40 0 41 0 42 0 49 0 50 0 62 0 79 0 119 0 133 1 112] -#[1 7 74 0 40 7 74 0 41 7 74 0 50 7 74 0 79 3 221 0 133] -#[1 3 25 0 2 7 78 0 3 3 33 0 4 3 29 0 6 3 33 0 8 3 33 0 11 3 33 0 12 3 33 0 13 3 33 0 15 3 33 0 16 3 33 0 20 3 33 0 22 3 33 0 36 3 33 0 59 3 33 0 65 3 33 0 72 3 33 0 81 3 33 0 106 3 33 0 107 3 33 0 127 7 78 0 129 3 33 0 131 3 33 0 132 7 78 0 133 3 33 1 107] -#[0 7 82 0 3 0 5] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 12 109 0 194 12 113 0 195 12 117 0 196 12 121 0 197 1 97 0 200 12 125 0 201 12 125 1 97 1 121 1 102 1 125 1 111] -#[0 12 129 0 133] -#[1 7 86 0 3 10 73 0 19 7 86 0 23 10 73 0 24 7 86 0 25 7 86 0 26 10 73 0 27 7 86 0 28 7 86 0 29 7 86 0 30 10 73 0 32 7 86 0 33 9 237 0 34 10 73 0 39 7 86 0 41 10 73 0 43 7 86 0 45 10 73 0 46 10 73 0 48 7 86 0 52 7 86 0 53 10 73 0 63 7 86 0 66 10 73 0 68 10 9 0 71 10 73 0 74 10 73 0 83 10 73 0 84 10 73 0 86 10 73 0 87 7 86 0 88 7 86 0 89 7 86 0 91 7 86 0 92 7 86 0 93 7 86 0 94 10 73 0 99 10 73 0 100 10 73 0 103 10 73 0 108 10 73 0 109 7 86 0 111 7 86 0 113 7 86 0 116 10 73 0 118 7 86 0 121 10 73 0 122 7 86 0 128 7 86 0 135 11 233 1 14 10 73 1 16] -#[1 7 90 0 3 10 73 0 19 7 90 0 23 10 73 0 24 7 90 0 25 7 90 0 26 10 73 0 27 7 90 0 28 7 90 0 29 7 90 0 30 10 73 0 32 7 90 0 33 9 237 0 34 10 73 0 39 7 90 0 41 10 73 0 43 7 90 0 45 10 73 0 46 10 73 0 48 7 90 0 52 7 90 0 53 10 73 0 63 7 90 0 66 10 73 0 68 10 9 0 71 10 73 0 74 10 73 0 83 10 73 0 84 10 73 0 86 10 73 0 87 7 90 0 88 7 90 0 89 7 90 0 91 7 90 0 92 7 90 0 93 7 90 0 94 10 73 0 99 10 73 0 100 10 73 0 103 10 73 0 108 10 73 0 109 7 90 0 111 7 90 0 113 7 90 0 116 10 73 0 118 7 90 0 121 10 73 0 122 7 90 0 128 7 90 0 135 11 233 1 14 10 73 1 16] -#[0 7 94 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 7 98 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[0 7 102 0 9 0 31 0 34 0 58 0 60 0 75 0 96 0 97 0 110 0 125 0 126 0 133] -#[1 12 133 0 31 12 137 0 34 12 141 0 58 12 145 0 60 12 149 0 75 12 153 0 96 12 157 0 97 12 161 0 110 12 165 0 125 12 169 0 126 12 173 0 133 12 177 1 2 12 181 1 3 12 185 1 4 12 189 1 5 12 193 1 6 12 197 1 7 12 201 1 9] -#[0 7 106 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[1 9 33 0 2 4 86 0 28 4 86 0 29 4 86 0 30 4 86 0 32 4 86 0 33 4 86 0 41 4 86 0 53 4 86 0 87 4 86 0 88 4 86 0 89 4 86 0 91 4 86 0 92 4 86 0 93 4 86 0 94 4 86 0 111 4 86 0 113 4 86 0 121 4 86 0 128 4 86 0 133 4 86 0 135 12 205 0 222] -#[1 12 209 0 41 8 117 0 88 8 121 0 92 8 125 0 93 8 129 0 94 8 133 0 111 8 141 0 217 8 141 0 218 8 141 0 219 8 141 0 220 8 141 0 221] -#[1 7 110 0 3 7 110 0 5 3 9 0 6] -#[0 7 114 0 32 0 87 0 133] -#[0 7 118 0 28 0 41 0 53 0 89 0 91] -#[1 3 121 0 53 8 161 0 80 3 129 0 89 6 125 0 91 8 165 0 254 8 169 1 36 8 173 1 38 8 177 1 44 8 181 1 46] -#[0 7 122 0 32 0 87 0 133] -#[0 7 126 0 28 0 41 0 53 0 89 0 91] -#[0 7 130 0 28 0 41 0 53 0 89 0 91] -#[0 7 134 0 28 0 41 0 53 0 89 0 91] -#[0 7 138 0 133] -#[0 12 213 0 133] -#[0 12 217 0 133] -#[0 7 142 0 3 0 23 0 25 0 26 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 57 0 62 0 66 0 88 0 89 0 91 0 92 0 93 0 94 0 102 0 111 0 113 0 116 0 121 0 128 0 135] -#[1 1 186 0 3 1 186 0 41 12 221 0 133 12 225 1 76] -#[0 7 146 0 3 0 41 0 133] -#[1 12 229 0 5 12 233 0 9] -#[0 7 150 0 5 0 9] -#[1 3 25 0 2 3 33 0 4 7 154 0 5 3 29 0 6 3 33 0 8 7 154 0 9 3 33 0 11 3 33 0 12 3 33 0 13 3 33 0 15 3 33 0 16 3 33 0 20 3 33 0 22 3 33 0 36 3 33 0 59 3 33 0 65 3 33 0 72 3 33 0 81 3 33 0 106 3 33 0 107 3 33 0 127 3 33 0 131 3 33 0 132 3 33 1 107] -#[1 5 230 0 3 5 230 0 19 5 230 0 23 5 230 0 24 5 230 0 25 5 230 0 26 5 230 0 27 5 230 0 28 5 230 0 29 5 230 0 30 5 230 0 32 5 230 0 33 5 230 0 34 5 230 0 39 5 230 0 41 5 230 0 43 5 230 0 45 5 230 0 46 5 230 0 48 5 230 0 52 5 230 0 53 5 230 0 63 5 230 0 66 5 230 0 68 5 230 0 71 5 230 0 74 5 230 0 83 5 230 0 84 5 230 0 86 5 230 0 87 5 230 0 88 5 230 0 89 5 230 0 91 5 230 0 92 5 230 0 93 5 230 0 94 5 230 0 99 5 230 0 100 5 230 0 103 5 230 0 108 5 230 0 109 5 230 0 111 5 230 0 113 5 230 0 116 5 230 0 118 5 230 0 121 5 230 0 122 5 230 0 128 5 230 0 135 12 237 1 12] -#[1 1 1 0 2 1 5 0 17 7 158 0 31 7 158 0 34 7 158 0 58 7 158 0 60 7 158 0 75 1 17 0 76 7 158 0 96 7 158 0 97 7 158 0 110 7 158 0 125 7 158 0 126 0 133 0 128 1 37 0 131 1 41 0 132 7 158 0 133 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 12 241 0 201 12 241 1 97 1 121 1 102 1 125 1 111] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 12 245 0 201 12 245 1 97 1 121 1 102 1 125 1 111] -#[1 12 249 0 135 12 253 1 8] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 13 1 0 201 13 1 1 97 1 121 1 102 1 125 1 111] -#[0 7 162 0 31 0 34 0 58 0 60 0 75 0 96 0 97 0 110 0 125 0 126 0 133] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 13 5 1 93 13 5 1 94 13 5 1 95 13 5 1 96 13 5 1 97 0 245 1 102 13 5 1 103 0 253 1 111] -#[0 13 9 0 34] -#[0 13 13 0 135] -#[1 0 69 0 2 0 73 0 17 0 97 0 61 0 101 0 69 0 105 0 70 0 109 0 76 0 133 0 128 0 137 0 131 0 141 0 132 1 193 0 135 0 161 0 137 0 245 0 139 0 157 0 143 0 161 0 200 13 17 1 93 13 17 1 94 13 17 1 95 13 17 1 96 13 17 1 97 0 245 1 102 13 17 1 103 0 253 1 111] -#[0 13 21 0 34] -#[1 7 166 0 3 7 166 0 26 7 166 0 28 7 166 0 29 7 166 0 30 13 25 0 31 7 166 0 33 7 166 0 41 7 166 0 53 7 166 0 88 7 166 0 89 7 166 0 91 7 166 0 92 7 166 0 93 7 166 0 94 7 166 0 111 7 166 0 113 7 166 0 121 7 166 0 128 7 166 0 135 13 29 1 10] -#[0 7 170 0 31 0 34 0 58 0 60 0 75 0 96 0 97 0 110 0 125 0 126 0 133] -#[0 7 174 0 31 0 34 0 58 0 60 0 75 0 96 0 97 0 110 0 125 0 126 0 133] -#[0 7 178 0 31 0 34 0 58 0 60 0 75 0 96 0 97 0 110 0 125 0 126 0 133] -#[0 7 182 0 31 0 34 0 58 0 60 0 75 0 96 0 97 0 110 0 125 0 126 0 133] -#[0 7 186 0 31 0 34 0 58 0 60 0 75 0 96 0 97 0 110 0 125 0 126 0 133] -#[0 7 190 0 31 0 34 0 58 0 60 0 75 0 96 0 97 0 110 0 125 0 126 0 133] -#[0 7 194 0 31 0 34 0 58 0 60 0 75 0 96 0 97 0 110 0 125 0 126 0 133] -#[1 1 238 0 28 1 238 0 29 1 238 0 30 7 198 0 32 1 238 0 33 1 238 0 41 1 238 0 53 7 198 0 87 1 238 0 88 1 238 0 89 1 238 0 91 1 238 0 92 1 238 0 93 1 238 0 94 1 238 0 111 1 238 0 113 1 238 0 121 1 238 0 128 7 198 0 133 1 238 0 135 13 33 0 215 4 209 0 225] -#[0 7 202 0 32 0 87 0 133] -#[0 7 206 0 25 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 57 0 62 0 89 0 102 0 113 0 116 0 121 0 135] -#[0 7 210 0 3 0 23 0 25 0 26 0 28 0 29 0 30 0 33 0 41 0 49 0 53 0 57 0 62 0 66 0 88 0 89 0 91 0 92 0 93 0 94 0 102 0 111 0 113 0 116 0 121 0 128 0 135] -#[1 1 1 0 2 2 142 0 3 1 5 0 17 2 142 0 41 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 13 37 0 195 12 117 0 196 12 121 0 197 1 97 0 200 12 125 0 201 12 125 1 97 1 121 1 102 1 125 1 111] -#[0 7 214 0 3 0 41] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 13 41 0 197 1 97 0 200 12 125 0 201 12 125 1 97 1 121 1 102 1 125 1 111] -#[0 13 45 0 2] -#[1 7 218 0 3 10 73 0 19 7 218 0 23 10 73 0 24 7 218 0 25 7 218 0 26 10 73 0 27 7 218 0 28 7 218 0 29 7 218 0 30 10 73 0 32 7 218 0 33 9 237 0 34 10 73 0 39 7 218 0 41 10 73 0 43 7 218 0 45 10 73 0 46 10 73 0 48 7 218 0 52 7 218 0 53 10 73 0 63 7 218 0 66 10 73 0 68 10 9 0 71 10 73 0 74 10 73 0 83 10 73 0 84 10 73 0 86 10 73 0 87 7 218 0 88 7 218 0 89 7 218 0 91 7 218 0 92 7 218 0 93 7 218 0 94 10 73 0 99 10 73 0 100 10 73 0 103 10 73 0 108 10 73 0 109 7 218 0 111 7 218 0 113 7 218 0 116 10 73 0 118 7 218 0 121 10 73 0 122 7 218 0 128 7 218 0 135 11 233 1 14 10 73 1 16] -#[1 3 25 0 2 3 33 0 4 3 29 0 6 3 33 0 8 3 33 0 11 3 33 0 12 3 33 0 13 3 33 0 15 3 33 0 16 3 33 0 20 3 33 0 22 7 222 0 31 7 222 0 34 3 33 0 36 7 222 0 58 3 33 0 59 7 222 0 60 3 33 0 65 3 33 0 72 7 222 0 75 3 33 0 81 7 222 0 96 7 222 0 97 3 33 0 106 3 33 0 107 7 222 0 110 7 222 0 125 7 222 0 126 3 33 0 127 3 33 0 131 3 33 0 132 7 222 0 133 3 33 1 107] -#[1 3 25 0 2 3 33 0 4 3 29 0 6 3 33 0 8 3 33 0 11 3 33 0 12 3 33 0 13 3 33 0 15 3 33 0 16 3 33 0 20 3 33 0 22 7 226 0 31 7 226 0 34 3 33 0 36 7 226 0 58 3 33 0 59 7 226 0 60 3 33 0 65 3 33 0 72 7 226 0 75 3 33 0 81 7 226 0 96 7 226 0 97 3 33 0 106 3 33 0 107 7 226 0 110 7 226 0 125 7 226 0 126 3 33 0 127 3 33 0 131 3 33 0 132 7 226 0 133 3 33 1 107] -#[0 7 230 0 5 0 31 0 34 0 58 0 60 0 75 0 96 0 97 0 110 0 125 0 126 0 133] -#[1 13 49 0 5 7 234 0 31 7 234 0 34 7 234 0 58 7 234 0 60 7 234 0 75 7 234 0 96 7 234 0 97 7 234 0 110 7 234 0 125 7 234 0 126 7 234 0 133] -#[1 3 25 0 2 3 33 0 4 3 29 0 6 3 33 0 8 3 33 0 11 3 33 0 12 3 33 0 13 3 33 0 15 3 33 0 16 3 33 0 20 3 33 0 22 7 238 0 31 7 238 0 34 3 33 0 36 7 238 0 58 3 33 0 59 7 238 0 60 3 33 0 65 3 33 0 72 7 238 0 75 3 33 0 81 7 238 0 96 7 238 0 97 3 33 0 106 3 33 0 107 7 238 0 110 7 238 0 125 7 238 0 126 3 33 0 127 3 33 0 131 3 33 0 132 7 238 0 133 3 33 1 107] -#[1 2 65 0 2 2 169 0 4 2 73 0 6 2 169 0 8 2 81 0 10 2 169 0 11 2 169 0 12 2 169 0 13 2 169 0 14 2 169 0 15 2 169 0 16 2 169 0 20 2 169 0 22 7 242 0 31 7 242 0 34 2 169 0 36 7 242 0 58 2 169 0 59 7 242 0 60 2 169 0 65 2 169 0 72 7 242 0 75 2 169 0 81 7 242 0 96 7 242 0 97 2 169 0 106 2 169 0 107 7 242 0 110 7 242 0 125 7 242 0 126 2 169 0 127 2 149 0 128 2 169 0 131 2 169 0 132 7 242 0 133 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 13 53 0 201 13 53 1 97 1 121 1 102 1 125 1 111] -#[0 7 246 0 31 0 34 0 58 0 60 0 75 0 96 0 97 0 110 0 125 0 126 0 133] -#[1 2 65 0 2 2 169 0 4 2 73 0 6 2 169 0 8 2 81 0 10 2 169 0 11 2 169 0 12 2 169 0 13 2 169 0 14 2 169 0 15 2 169 0 16 2 169 0 20 2 169 0 22 7 250 0 31 7 250 0 34 2 169 0 36 7 250 0 58 2 169 0 59 7 250 0 60 2 169 0 65 2 169 0 72 7 250 0 75 2 169 0 81 7 250 0 96 7 250 0 97 2 169 0 106 2 169 0 107 7 250 0 110 7 250 0 125 7 250 0 126 2 169 0 127 2 149 0 128 2 169 0 131 2 169 0 132 7 250 0 133 2 161 0 134 2 165 1 100 2 169 1 106 2 169 1 107] -#[1 1 1 0 2 1 5 0 17 1 17 0 76 0 133 0 128 1 37 0 131 1 41 0 132 2 209 0 136 1 97 0 137 1 121 0 139 1 57 0 143 1 97 0 200 13 57 0 201 13 57 1 97 1 121 1 102 1 125 1 111] -#[0 13 61 0 133] -#[0 7 254 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[1 2 186 0 41 2 186 0 88 2 186 0 92 2 186 0 93 2 186 0 94 2 186 0 111 13 65 0 216] -#[0 8 2 0 3 0 41 0 133] -#[0 8 6 0 5 0 9] -#[1 1 238 0 3 1 238 0 26 1 238 0 28 1 238 0 29 1 238 0 30 1 238 0 33 1 238 0 53 1 238 0 88 1 238 0 89 1 238 0 91 1 238 0 92 1 238 0 93 1 238 0 94 1 238 0 111 1 238 0 113 1 238 0 121 1 238 0 128 1 238 0 135 13 69 0 191 4 205 0 215 4 209 0 225] -#[0 13 73 0 135] -#[1 3 25 0 2 3 33 0 4 3 29 0 6 3 33 0 8 3 33 0 11 3 33 0 12 3 33 0 13 3 33 0 15 3 33 0 16 3 33 0 20 3 33 0 22 8 10 0 31 8 10 0 34 3 33 0 36 8 10 0 58 3 33 0 59 8 10 0 60 3 33 0 65 3 33 0 72 8 10 0 75 3 33 0 81 8 10 0 96 8 10 0 97 3 33 0 106 3 33 0 107 8 10 0 110 8 10 0 125 8 10 0 126 3 33 0 127 3 33 0 131 3 33 0 132 8 10 0 133 3 33 1 107] -#[1 3 25 0 2 3 33 0 4 3 29 0 6 3 33 0 8 3 33 0 11 3 33 0 12 3 33 0 13 3 33 0 15 3 33 0 16 3 33 0 20 3 33 0 22 8 14 0 31 8 14 0 34 3 33 0 36 8 14 0 58 3 33 0 59 8 14 0 60 3 33 0 65 3 33 0 72 8 14 0 75 3 33 0 81 8 14 0 96 8 14 0 97 3 33 0 106 3 33 0 107 8 14 0 110 8 14 0 125 8 14 0 126 3 33 0 127 3 33 0 131 3 33 0 132 8 14 0 133 3 33 1 107] -#[0 8 18 0 3 0 26 0 28 0 29 0 30 0 33 0 41 0 53 0 88 0 89 0 91 0 92 0 93 0 94 0 111 0 113 0 121 0 128 0 135] -#[1 13 77 0 41 8 117 0 88 8 121 0 92 8 125 0 93 8 129 0 94 8 133 0 111 8 141 0 217 8 141 0 218 8 141 0 219 8 141 0 220 8 141 0 221] -#[0 13 81 0 3] -#[0 8 22 0 5 0 31 0 34 0 58 0 60 0 75 0 96 0 97 0 110 0 125 0 126 0 133] -#[0 8 26 0 32 0 87 0 133] -#[0 8 30 0 3 0 41 0 133] - ). -] - -{ #category : #private } -DelphiParser >> actionsForCurrentToken [ - | actions action ids newToken | - actions := OrderedCollection new: 1. - ids := currentToken ids. - ids - do: [ :anInteger | - self addActionsFor: anInteger to: actions. - (anInteger = scanner atId or: [ currentToken value sameAs: 'on' ]) - ifTrue: [ self - addActionsFor: scanner identifierId to: actions; - addActionsFor: scanner constantIdentifierId to: actions ]. - actions notEmpty - ifTrue: [ ^ actions ] ]. - ((ids includes: scanner identifierId) - and: [ (ids includes: scanner constantIdentifierId) not ]) - ifTrue: [ action := self actionFor: scanner constantIdentifierId. - (action bitAnd: self actionMask) ~= self errorAction - ifTrue: [ actions add: action. - ^ actions ] ]. - (ids includes: scanner upArrowId) - ifTrue: [ newToken := scanner scanControlCharacter. - newToken notNil - ifTrue: [ currentToken := newToken. - currentState scannerState: scanner currentState. - self addActionsFor: scanner controlCharacterId to: actions. - actions notEmpty - ifTrue: [ ^ actions ] ] ]. - action := self actionFor: scanner semicolonId. - ((action bitAnd: self actionMask) ~= self errorAction - and: [ states size = 1 ]) - ifTrue: [ lastInsertPosition = currentToken startPosition - ifTrue: [ ^ actions ]. "Don't get into a loop inserting ;'s" - lastInsertPosition := currentToken startPosition. - self position: currentToken startPosition - 1. - currentToken := scanner tokenClass - value: ';' - start: nil - ids: (Array with: scanner semicolonId). - self addActionsFor: scanner semicolonId to: actions. - actions notEmpty - ifTrue: [ ^ actions ] ]. - ^ actions -] - -{ #category : #private } -DelphiParser >> addActionsFor: anInteger to: anOrderedCollection [ - | action | - action := self actionForState: self currentState and: anInteger. - action = self errorAction - ifTrue: - [ action := self actionFor: anInteger. - (action bitAnd: self actionMask) = self errorAction - ifFalse: [ ^ anOrderedCollection add: action ]. - (anInteger = scanner numberId - and: - [ currentToken value notEmpty - and: [ '+-' includes: currentToken value first ] ]) - ifTrue: - [ currentToken := scanner tokenClass - value: (currentToken value copyFrom: 1 to: 1) - start: currentToken startPosition - ids: - (Array - with: - (currentToken value first = $- - ifTrue: [ scanner minusId ] - ifFalse: [ scanner plusId ])). - self position: currentToken stopPosition. - ^ self - addActionsFor: - (currentToken value first = $- - ifTrue: [ scanner minusId ] - ifFalse: [ scanner plusId ]) - to: anOrderedCollection ]. - ^ self ]. - (action bitAnd: self actionMask) = 2r11 - ifTrue: - [ self - ambiguousTransitionsAt: (action bitShift: -2) - into: anOrderedCollection ] - ifFalse: [ anOrderedCollection add: action ] -] - -{ #category : #private } -DelphiParser >> parse [ - | node expressionVisitor result | - expressionVisitor := DelphiBinaryExpressionVisitor new. "Hack to handle the incorrect parsing of a * b + c as a * (b + c)" - result := super parse. - ^ parseAll - ifTrue: - [ result - collect: - [ :each | - node := expressionVisitor accept: each. - (node isKindOf: SmaCCParseNode) - ifTrue: - [ node - attributeNamed: #ifDefs put: scanner ifDefs; - attributeNamed: #opts put: scanner optComments ]. - node ] ] - ifFalse: - [ node := expressionVisitor accept: result. - (node isKindOf: SmaCCParseNode) - ifTrue: - [ node - attributeNamed: #ifDefs put: scanner ifDefs; - attributeNamed: #opts put: scanner optComments ]. - node ] -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForAnonymousFunctionType1: nodes [ - | result | - result := DelphiAnonymousFunctionTypeNode new. - result functionToken: (nodes at: 1). - result left: ((nodes at: 2) at: 1). - result addNodes: ((nodes at: 2) at: 2) to: result arguments. - result addTokens: ((nodes at: 2) at: 3) to: result semicolons. - result right: ((nodes at: 2) at: 4). - result colon: (nodes at: 3). - result type: (nodes at: 4). - result ofToken: ((nodes at: 5) at: 1). - result objectToken: ((nodes at: 5) at: 2). - result addToken: (nodes at: 6) to: result semicolons. - result addNodes: (nodes at: 7) to: result modifiers. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForAnonymousProcedureType1: nodes [ - | result | - result := DelphiAnonymousProcedureTypeNode new. - result procedureToken: (nodes at: 1). - result left: ((nodes at: 2) at: 1). - result addNodes: ((nodes at: 2) at: 2) to: result arguments. - result addTokens: ((nodes at: 2) at: 3) to: result semicolons. - result right: ((nodes at: 2) at: 4). - result ofToken: ((nodes at: 3) at: 1). - result objectToken: ((nodes at: 3) at: 2). - result addToken: (nodes at: 4) to: result semicolons. - result addNodes: (nodes at: 5) to: result modifiers. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForArgument1: nodes [ - | result | - result := DelphiArgumentNode new. - result typeToken: (nodes at: 1). - result addTokens: ((nodes at: 2) at: 1) to: result names. - result addTokens: ((nodes at: 2) at: 2) to: result commas. - result colon: (nodes at: 3). - result type: (nodes at: 4). - result equal: ((nodes at: 5) at: 1). - result value: ((nodes at: 5) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForArgument2: nodes [ - | result | - result := DelphiArgumentNode new. - result typeToken: (nodes at: 1). - result addTokens: ((nodes at: 2) at: 1) to: result names. - result addTokens: ((nodes at: 2) at: 2) to: result commas. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForArgumentList1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForArrayType1: nodes [ - | result | - result := DelphiArrayTypeNode new. - result packedToken: (nodes at: 1). - result arrayToken: (nodes at: 2). - result left: ((nodes at: 3) at: 1). - result addNodes: ((nodes at: 3) at: 2) to: result indexes. - result addTokens: ((nodes at: 3) at: 3) to: result commas. - result right: ((nodes at: 3) at: 4). - result ofToken: (nodes at: 4). - result type: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForArrayType2: nodes [ - | result | - result := DelphiArrayTypeNode new. - result packedToken: (nodes at: 1). - result arrayToken: (nodes at: 2). - result left: ((nodes at: 3) at: 1). - result addNodes: ((nodes at: 3) at: 2) to: result indexes. - result addTokens: ((nodes at: 3) at: 3) to: result commas. - result right: ((nodes at: 3) at: 4). - result ofToken: (nodes at: 4). - result constToken: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForAsmBlock1: nodes [ - | result | - result := DelphiAsmBlockNode new. - result asmToken: (nodes at: 2). - result endToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForBaseCaseLabel1: nodes [ - | result | - result := DelphiCaseLabelNode new. - result value: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForBaseCaseLabel2: nodes [ - | result | - result := DelphiRangeCaseLabelNode new. - result fromValue: (nodes at: 1). - result dots: (nodes at: 2). - result toValue: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForBeforeAsm1: nodes [ - parseAll - ifFalse: [ scanner skipToEndToken. - currentState scannerState: scanner currentState ]. - ^ nil -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForCaseLabel2: nodes [ - | result | - result := DelphiMultiValueCaseLabelNode new. - result addNodes: ((nodes at: 1) at: 1) to: result labels. - result addTokens: ((nodes at: 1) at: 2) to: result commas. - result addToken: (nodes at: 2) to: result commas. - result addNode: (nodes at: 3) to: result labels. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForCaseOption1: nodes [ - | result | - result := DelphiCaseOptionNode new. - result label: (nodes at: 1). - result colon: (nodes at: 2). - result statement: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForCaseOptionList1: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForCaseStatement1: nodes [ - | result | - result := Array new: 8. - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - self addAll: ((nodes at: 4) at: 1) to: (result at: 4). - self addAll: ((nodes at: 4) at: 2) to: (result at: 5). - result at: 6 put: ((nodes at: 5) at: 1). - self addAll: ((nodes at: 5) at: 2) to: (result at: 7). - self addAll: ((nodes at: 5) at: 3) to: (result at: 5). - result at: 8 put: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForClassFunctionDefinition1: nodes [ - | result | - result := DelphiClassFunctionDefinitionNode new. - result header: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result definitions. - result block: ((nodes at: 2) at: 2). - result semicolon: ((nodes at: 2) at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForClassFunctionDefinition2: nodes [ - | result | - result := DelphiClassFunctionDefinitionNode new. - result header: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForClassHelperType1: nodes [ - | result | - result := DelphiClassHelperTypeNode new. - result classToken: (nodes at: 1). - result addTokens: (nodes at: 2) to: result classAttributes. - result helperToken: (nodes at: 3). - result forToken: (nodes at: 4). - result _class: (nodes at: 5). - result left: ((nodes at: 6) at: 1). - result addNodes: ((nodes at: 6) at: 2) to: result superclasses. - result addTokens: ((nodes at: 6) at: 3) to: result commas. - result right: ((nodes at: 6) at: 4). - result implicitClassSection: (nodes at: 7). - result addNodes: (nodes at: 8) to: result sections. - result endToken: (nodes at: 9). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForClassHelperType2: nodes [ - | result | - result := DelphiClassHelperTypeNode new. - result classToken: (nodes at: 1). - result addTokens: (nodes at: 2) to: result classAttributes. - result helperToken: (nodes at: 3). - result forToken: (nodes at: 4). - result _class: (nodes at: 5). - result left: ((nodes at: 6) at: 1). - result addNodes: ((nodes at: 6) at: 2) to: result superclasses. - result addTokens: ((nodes at: 6) at: 3) to: result commas. - result right: ((nodes at: 6) at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForClassOperatorDefinition1: nodes [ - | result | - result := DelphiClassOperatorDefinitionNode new. - result header: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result definitions. - result block: ((nodes at: 2) at: 2). - result semicolon: ((nodes at: 2) at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForClassOperatorDefinition2: nodes [ - | result | - result := DelphiClassOperatorDefinitionNode new. - result header: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForClassProcedureDefinition1: nodes [ - | result | - result := DelphiClassProcedureDefinitionNode new. - result header: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result definitions. - result block: ((nodes at: 2) at: 2). - result semicolon: ((nodes at: 2) at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForClassProcedureDefinition2: nodes [ - | result | - result := DelphiClassProcedureDefinitionNode new. - result header: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForClassPropertyHeader1: nodes [ - | result | - result := DelphiClassPropertyHeaderNode new. - result classToken: (nodes at: 1). - result propertyToken: ((nodes at: 2) at: 1). - result name: ((nodes at: 2) at: 2). - result arrayAccessors: ((nodes at: 2) at: 3). - result colon: ((nodes at: 2) at: 4). - result type: ((nodes at: 2) at: 5). - result addNodes: ((nodes at: 2) at: 6) to: result indexes. - result addNodes: ((nodes at: 2) at: 7) to: result readers. - result addNodes: ((nodes at: 2) at: 8) to: result writers. - result addNodes: ((nodes at: 2) at: 9) to: result defaults. - result addNodes: ((nodes at: 2) at: 10) to: result storeds. - result addNodes: ((nodes at: 2) at: 11) to: result implementses. - result addNodes: ((nodes at: 2) at: 12) to: result dispids. - result semicolon: ((nodes at: 2) at: 13). - result modifier: ((nodes at: 2) at: 14). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForConstantArray1: nodes [ - | result | - result := nodes at: 1. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForConstantArray2: nodes [ - | result | - result := Array new: 4. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForConstantExpression10: nodes [ - | result | - result := DelphiRecordExpressionNode new. - result left: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result fields. - result addTokens: ((nodes at: 2) at: 2) to: result semicolons. - result addToken: (nodes at: 3) to: result semicolons. - result right: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForConstantExpression11: nodes [ - | result | - result := DelphiConstantArrayExpressionNode new. - result left: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result expressions. - result addTokens: ((nodes at: 2) at: 2) to: result equalTokens. - result addNodes: ((nodes at: 2) at: 3) to: result values. - result addTokens: ((nodes at: 2) at: 4) to: result commas. - result right: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForConstantRecordField1: nodes [ - | result | - result := DelphiConstantRecordFieldNode new. - result name: (nodes at: 1). - result colon: (nodes at: 2). - result expression: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForConstantValue1: nodes [ - | result | - result := DelphiConstantDefinitionNode new. - result name: (nodes at: 1). - result colon: ((nodes at: 2) at: 1). - result type: ((nodes at: 2) at: 2). - result equalToken: (nodes at: 3). - result expression: (nodes at: 4). - result modifier: (nodes at: 5). - result deprecatedToken: (nodes at: 6). - result semicolon: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForConstantValueList1: nodes [ - | result | - result := DelphiConstantListNode new. - result constToken: (nodes at: 1). - result addNodes: (nodes at: 2) to: result definitions. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForConstantValues1: nodes [ - | result | - result := OrderedCollection new: 2. - self add: (nodes at: 1) to: result. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForConstructorDefinition1: nodes [ - | result | - result := DelphiConstructorDefinitionNode new. - result header: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result definitions. - result block: ((nodes at: 2) at: 2). - result semicolon: ((nodes at: 2) at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForConstructorDefinition2: nodes [ - | result | - result := DelphiConstructorDefinitionNode new. - result header: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForDefinedType2: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (nodes at: 1). - result at: 3 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForDefinedTypeList1: nodes [ - | result | - result := DelphiDefinedTypeListNode new. - result typeToken: (nodes at: 1). - result addNodes: (nodes at: 2) to: result definitions. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForDestructorDefinition1: nodes [ - | result | - result := DelphiDestructorDefinitionNode new. - result header: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result definitions. - result block: ((nodes at: 2) at: 2). - result semicolon: ((nodes at: 2) at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForDestructorDefinition2: nodes [ - | result | - result := DelphiDestructorDefinitionNode new. - result header: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForElseCase1: nodes [ - | result | - result := Array new: 3. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForElseCase2: nodes [ - | result | - result := Array new: 3. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForEnumName1: nodes [ - | result | - result := DelphiEnumNameNode new. - result name: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForEnumName2: nodes [ - | result | - result := DelphiEnumNameNode new. - result name: (nodes at: 1). - result equal: (nodes at: 2). - result value: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForEnumType1: nodes [ - | result | - result := DelphiEnumTypeNode new. - result left: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result names. - result addTokens: ((nodes at: 2) at: 2) to: result commas. - result right: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForExcept2: nodes [ - | result | - result := DelphiExceptNode new. - result exceptToken: (nodes at: 1). - result addNodes: (nodes at: 2) to: result exceptionCases. - result else: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForExcept3: nodes [ - | result | - result := DelphiExceptNode new. - result exceptToken: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result statements. - result addTokens: ((nodes at: 2) at: 2) to: result semicolons. - result else: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForExpression10: nodes [ - | result | - result := DelphiLiteralExpressionNode new. - result value: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForExpression11: nodes [ - | result | - result := DelphiBinaryExpressionNode new. - result leftExpression: (nodes at: 1). - result operator: (nodes at: 2). - result rightExpression: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForExpression12: nodes [ - | result | - result := nodes at: 2. - result addFirstToken: (nodes at: 1) to: result leftParens. - result addToken: (nodes at: 3) to: result rightParens. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForExpression13: nodes [ - | result | - result := DelphiAssignmentExpressionNode new. - result lhs: (nodes at: 1). - result assignment: (nodes at: 2). - result value: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForExpression14: nodes [ - | result | - result := DelphiArrayExpressionNode new. - result expression: (nodes at: 1). - result left: ((nodes at: 2) at: 1). - result addNodes: ((nodes at: 2) at: 2) to: result indexes. - result addTokens: ((nodes at: 2) at: 3) to: result commas. - result right: ((nodes at: 2) at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForExpression15: nodes [ - | result | - result := DelphiAddressExpressionNode new. - result atToken: (nodes at: 1). - result expression: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForExpression16: nodes [ - | result | - result := DelphiNotExpressionNode new. - result notToken: (nodes at: 1). - result expression: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForExpression17: nodes [ - | result | - result := DelphiMinusExpressionNode new. - result minus: (nodes at: 1). - result expression: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForExpression18: nodes [ - | result | - result := DelphiPlusExpressionNode new. - result plus: (nodes at: 1). - result expression: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForExpression20: nodes [ - | result | - result := DelphiPointerExpressionNode new. - result expression: (nodes at: 1). - result upArrow: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForExpression4: nodes [ - | result | - result := DelphiPropertyExpressionNode new. - result expression: (nodes at: 1). - result period: (nodes at: 2). - result name: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForExpression5: nodes [ - | result | - result := DelphiMethodCallExpressionNode new. - result receiver: (nodes at: 1). - result left: (nodes at: 2). - result addNodes: ((nodes at: 3) at: 1) to: result arguments. - result addTokens: ((nodes at: 3) at: 2) to: result commas. - result right: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForExpression6: nodes [ - | result | - result := DelphiMethodCallExpressionNode new. - result receiver: (nodes at: 1). - result left: (nodes at: 2). - result right: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForExternalClassFunctionHeader1: nodes [ - | result | - result := DelphiClassFunctionHeaderNode new. - result classToken: (nodes at: 1). - result functionToken: ((nodes at: 2) at: 1). - result qualifiedName: ((nodes at: 2) at: 2). - result left: ((nodes at: 2) at: 3). - result addNodes: ((nodes at: 2) at: 4) to: result arguments. - result addTokens: ((nodes at: 2) at: 5) to: result semicolons. - result right: ((nodes at: 2) at: 6). - result colon: ((nodes at: 2) at: 7). - result type: ((nodes at: 2) at: 8). - result addNodes: ((nodes at: 2) at: 9) to: result modifiers. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForExternalClassProcedureHeader1: nodes [ - | result | - result := DelphiClassProcedureHeaderNode new. - result classToken: (nodes at: 1). - result procedureToken: ((nodes at: 2) at: 1). - result qualifiedName: ((nodes at: 2) at: 2). - result left: ((nodes at: 2) at: 3). - result addNodes: ((nodes at: 2) at: 4) to: result arguments. - result addTokens: ((nodes at: 2) at: 5) to: result semicolons. - result right: ((nodes at: 2) at: 6). - result addNodes: ((nodes at: 2) at: 7) to: result modifiers. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForExternalConstructorHeader1: nodes [ - | result | - result := nodes at: 1. - result addNode: (nodes at: 2) to: result modifiers. - result addNodes: (nodes at: 3) to: result modifiers. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForExternalFunctionHeader1: nodes [ - | result | - result := DelphiFunctionHeaderNode new. - result functionToken: ((nodes at: 1) at: 1). - result qualifiedName: ((nodes at: 1) at: 2). - result left: ((nodes at: 1) at: 3). - result addNodes: ((nodes at: 1) at: 4) to: result arguments. - result addTokens: ((nodes at: 1) at: 5) to: result semicolons. - result right: ((nodes at: 1) at: 6). - result colon: ((nodes at: 1) at: 7). - result type: ((nodes at: 1) at: 8). - result addNodes: ((nodes at: 1) at: 9) to: result modifiers. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForExternalFunctionHeaderVars1: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 9). - self addAll: (nodes at: 3) to: (result at: 9). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForExternalMethodModifier1: nodes [ - | result | - result := DelphiExternalMethodModifierNode new. - result modifier: (nodes at: 1). - result semicolon: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForExternalMethodModifier4: nodes [ - | result | - result := DelphiExternalMethodModifierNode new. - result modifier: (nodes at: 1). - result library: (nodes at: 2). - result semicolon: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForExternalMethodModifier5: nodes [ - | result | - result := DelphiExternalMethodModifierNode new. - result modifier: (nodes at: 1). - result library: (nodes at: 2). - result nameToken: (nodes at: 3). - result methodName: (nodes at: 4). - result semicolon: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForExternalMethodModifier6: nodes [ - | result | - result := DelphiMethodModifierNode new. - result modifier: (nodes at: 1). - result semicolon: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForExternalProcedureHeader1: nodes [ - | result | - result := DelphiProcedureHeaderNode new. - result procedureToken: ((nodes at: 1) at: 1). - result qualifiedName: ((nodes at: 1) at: 2). - result left: ((nodes at: 1) at: 3). - result addNodes: ((nodes at: 1) at: 4) to: result arguments. - result addTokens: ((nodes at: 1) at: 5) to: result semicolons. - result right: ((nodes at: 1) at: 6). - result addNodes: ((nodes at: 1) at: 7) to: result modifiers. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForExternalProcedureHeaderVars1: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 7). - self addAll: (nodes at: 3) to: (result at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForFile1: nodes [ - | result | - result := DelphiUnitFileNode new. - result unitToken: ((nodes at: 1) at: 1). - result unitName: ((nodes at: 1) at: 2). - result modifier: ((nodes at: 1) at: 3). - result semicolon: ((nodes at: 1) at: 4). - result interfaceSection: ((nodes at: 1) at: 5). - result implementationSection: ((nodes at: 1) at: 6). - result initializationSection: ((nodes at: 1) at: 7). - result finalizationSection: ((nodes at: 1) at: 8). - result endToken: ((nodes at: 1) at: 9). - result period: ((nodes at: 1) at: 10). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForFile2: nodes [ - | result | - result := DelphiProgramFileNode new. - result programToken: ((nodes at: 1) at: 1). - result programName: ((nodes at: 1) at: 2). - result modifier: ((nodes at: 1) at: 3). - result addTokens: ((nodes at: 1) at: 4) to: result semicolons. - result usesToken: ((nodes at: 1) at: 5). - result addNodes: ((nodes at: 1) at: 6) to: result moduleNames. - result addTokens: ((nodes at: 1) at: 7) to: result inTokens. - result addTokens: ((nodes at: 1) at: 8) to: result filenames. - result addTokens: ((nodes at: 1) at: 9) to: result commas. - result main: ((nodes at: 1) at: 10). - result period: ((nodes at: 1) at: 11). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForFile3: nodes [ - | result | - result := DelphiLibraryFileNode new. - result libraryToken: ((nodes at: 1) at: 1). - result libraryName: ((nodes at: 1) at: 2). - result modifier: ((nodes at: 1) at: 3). - result addTokens: ((nodes at: 1) at: 4) to: result semicolons. - result usesToken: ((nodes at: 1) at: 5). - result addNodes: ((nodes at: 1) at: 6) to: result moduleNames. - result addTokens: ((nodes at: 1) at: 7) to: result inTokens. - result addTokens: ((nodes at: 1) at: 8) to: result filenames. - result addTokens: ((nodes at: 1) at: 9) to: result commas. - result addNodes: ((nodes at: 1) at: 10) to: result exports. - result main: ((nodes at: 1) at: 11). - result period: ((nodes at: 1) at: 12). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForFileType1: nodes [ - | result | - result := DelphiFileTypeNode new. - result fileToken: (nodes at: 1). - result ofToken: (nodes at: 2). - result type: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForFileType2: nodes [ - | result | - result := DelphiFileTypeNode new. - result fileToken: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForFinalizationSection2: nodes [ - | result | - result := DelphiFinalizationSectionNode new. - result finalizationToken: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result statements. - result addTokens: ((nodes at: 2) at: 2) to: result semicolons. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForFinally2: nodes [ - | result | - result := DelphiFinallyNode new. - result finallyToken: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result statements. - result addTokens: ((nodes at: 2) at: 2) to: result semicolons. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForForInStatement1: nodes [ - | result | - result := Array new: 6. - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - result at: 4 put: (nodes at: 4). - result at: 5 put: (nodes at: 5). - result at: 6 put: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForForStatement1: nodes [ - | result | - result := Array new: 8. - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - result at: 4 put: (nodes at: 4). - result at: 5 put: (nodes at: 5). - result at: 6 put: (nodes at: 6). - result at: 7 put: (nodes at: 7). - result at: 8 put: (nodes at: 8). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForFullModuleName1: nodes [ - | result | - result := DelphiModuleNameNode new. - result addToken: (nodes at: 1) to: result names. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForFullModuleName2: nodes [ - | result | - result := nodes at: 1. - result addToken: (nodes at: 2) to: result periods. - result addToken: (nodes at: 3) to: result names. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForFunctionDefinition1: nodes [ - | result | - result := DelphiFunctionDefinitionNode new. - result header: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result definitions. - result block: ((nodes at: 2) at: 2). - result semicolon: ((nodes at: 2) at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForFunctionDefinition2: nodes [ - | result | - result := DelphiFunctionDefinitionNode new. - result header: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForGotoStatement1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForGuid2: nodes [ - | result | - result := DelphiGuidNode new. - result left: (nodes at: 1). - result string: (nodes at: 2). - result right: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForIfStatement1: nodes [ - | result | - result := Array new: 6. - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - result at: 4 put: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForImplementationCode2: nodes [ - | result | - result := DelphiImplementationCodeNode new. - result beginToken: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result statements. - result addTokens: ((nodes at: 2) at: 2) to: result semicolons. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForImplementationSection2: nodes [ - | result | - result := DelphiImplementationSectionNode new. - result implementationToken: (nodes at: 1). - result usesToken: ((nodes at: 2) at: 1). - result addNodes: ((nodes at: 2) at: 2) to: result moduleNames. - result addTokens: ((nodes at: 2) at: 3) to: result inTokens. - result addTokens: ((nodes at: 2) at: 4) to: result filenames. - result addTokens: ((nodes at: 2) at: 5) to: result commas. - result semicolon: ((nodes at: 2) at: 6). - result addNodes: (nodes at: 3) to: result definitions. - result code: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForImplicitClassSection1: nodes [ - | result | - result := DelphiImplicitClassSectionNode new. - result addNodes: (nodes at: 1) to: result components. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForInheritedFunctionCall1: nodes [ - | result | - result := DelphiInheritedFunctionCallNode new. - result inheritedToken: (nodes at: 1). - result name: (nodes at: 2). - result left: (nodes at: 3). - result addNodes: ((nodes at: 4) at: 1) to: result arguments. - result addTokens: ((nodes at: 4) at: 2) to: result commas. - result right: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForInheritedFunctionCall2: nodes [ - | result | - result := DelphiInheritedFunctionCallNode new. - result inheritedToken: (nodes at: 1). - result name: (nodes at: 2). - result left: (nodes at: 3). - result right: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForInheritedFunctionCall3: nodes [ - | result | - result := DelphiInheritedFunctionCallNode new. - result inheritedToken: (nodes at: 1). - result name: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForInheritedFunctionCall4: nodes [ - | result | - result := DelphiInheritedFunctionCallNode new. - result inheritedToken: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForInitializationSection2: nodes [ - | result | - result := DelphiInitializationSectionNode new. - result initializationToken: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result statements. - result addTokens: ((nodes at: 2) at: 2) to: result semicolons. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForInstantiatedGenericTypeArguments1: nodes [ - | result | - result := Array new: 4. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - result at: 4 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForInstantiatedGenericVariableExpression1: nodes [ - | result | - result := DelphiInstantiatedGenericVariableExpressionNode new. - result name: (nodes at: 1). - result left: ((nodes at: 2) at: 1). - result addNodes: ((nodes at: 2) at: 2) to: result typeArguments. - result addTokens: ((nodes at: 2) at: 3) to: result commas. - result right: ((nodes at: 2) at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForInterfaceFunctionAssignment1: nodes [ - | result | - result := DelphiInterfaceFunctionAssignmentNode new. - result function: (nodes at: 1). - result qualifiedName: (nodes at: 2). - result equalToken: (nodes at: 3). - result name: (nodes at: 4). - result semicolon: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForInterfaceProcedureAssignment1: nodes [ - | result | - result := DelphiInterfaceProcedureAssignmentNode new. - result procedureToken: (nodes at: 1). - result qualifiedName: (nodes at: 2). - result equalToken: (nodes at: 3). - result name: (nodes at: 4). - result semicolon: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForInterfaceSection2: nodes [ - | result | - result := DelphiInterfaceSectionNode new. - result interfaceToken: (nodes at: 1). - result usesToken: ((nodes at: 2) at: 1). - result addNodes: ((nodes at: 2) at: 2) to: result moduleNames. - result addTokens: ((nodes at: 2) at: 3) to: result inTokens. - result addTokens: ((nodes at: 2) at: 4) to: result filenames. - result addTokens: ((nodes at: 2) at: 5) to: result commas. - result semicolon: ((nodes at: 2) at: 6). - result addNodes: (nodes at: 3) to: result values. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForInterfaceType1: nodes [ - | result | - result := DelphiInterfaceTypeNode new. - result interfaceToken: (nodes at: 1). - result left: ((nodes at: 2) at: 1). - result addNodes: ((nodes at: 2) at: 2) to: result superclasses. - result addTokens: ((nodes at: 2) at: 3) to: result commas. - result right: ((nodes at: 2) at: 4). - result guid: (nodes at: 3). - result addNodes: (nodes at: 4) to: result components. - result endToken: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForInterfaceType2: nodes [ - | result | - result := DelphiInterfaceTypeNode new. - result interfaceToken: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForLabeledStatement1: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForLabels1: nodes [ - | result | - result := DelphiLabelVariableNode new. - result labelToken: (nodes at: 1). - result addTokens: ((nodes at: 2) at: 1) to: result names. - result addTokens: ((nodes at: 2) at: 2) to: result commas. - result semicolon: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForLibraryExport1: nodes [ - | result | - result := DelphiLibraryExportNode new. - result exportsToken: (nodes at: 1). - result name: (nodes at: 2). - result semicolon: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForLibraryFile1: nodes [ - | result | - result := Array new: 12. - result at: 4 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 1 put: ((nodes at: 1) at: 1). - result at: 2 put: ((nodes at: 1) at: 2). - result at: 3 put: ((nodes at: 1) at: 3). - self add: ((nodes at: 1) at: 4) to: (result at: 4). - result at: 5 put: ((nodes at: 2) at: 1). - self addAll: ((nodes at: 2) at: 2) to: (result at: 6). - self addAll: ((nodes at: 2) at: 3) to: (result at: 7). - self addAll: ((nodes at: 2) at: 4) to: (result at: 8). - self addAll: ((nodes at: 2) at: 5) to: (result at: 9). - self add: ((nodes at: 2) at: 6) to: (result at: 4). - self addAll: (nodes at: 3) to: (result at: 10). - result at: 11 put: (nodes at: 4). - result at: 12 put: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForLibraryLine1: nodes [ - | result | - result := Array new: 4. - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - result at: 4 put: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForMainMethod1: nodes [ - | result | - result := DelphiMainMethodDefinitionNode new. - result addNodes: ((nodes at: 1) at: 1) to: result definitions. - result block: ((nodes at: 1) at: 2). - result semicolon: ((nodes at: 1) at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForMemExpression1: nodes [ - | result | - result := DelphiMemExpressionNode new. - result mem: (nodes at: 1). - result leftBrace: (nodes at: 2). - result baseExpression: (nodes at: 3). - result colon: (nodes at: 4). - result addressExpression: (nodes at: 5). - result rightBrace: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForMetaclassType1: nodes [ - | result | - result := DelphiMetaclassTypeNode new. - result classToken: (nodes at: 1). - result ofToken: (nodes at: 2). - result name: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForMethodArgument2: nodes [ - | result | - result := DelphiFormattedMethodArgumentNode new. - result argument: (nodes at: 1). - result colon: (nodes at: 2). - result formatExpression: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForMethodAttribute1: nodes [ - | result | - result := DelphiMethodAttributeNode new. - result left: (nodes at: 1). - result expression: (nodes at: 2). - result right: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForMethodComponents1: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (OrderedCollection new: 2). - self addAll: (nodes at: 1) to: (result at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForMethodVariables1: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: result. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForMethodVariables2: nodes [ - | result | - result := OrderedCollection new: 2. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForNamedDefinedType1: nodes [ - | result | - result := DelphiNamedDefinedTypeNode new. - result name: (nodes at: 1). - result left: ((nodes at: 2) at: 1). - result - addTokens: ((nodes at: 2) at: 2) - to: result genericTypeArguments. - result addTokens: ((nodes at: 2) at: 3) to: result commas. - result right: ((nodes at: 2) at: 4). - result equalToken: (nodes at: 3). - result type: ((nodes at: 4) at: 1). - result modifier: ((nodes at: 4) at: 2). - result semicolon: ((nodes at: 4) at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForNewClassComponent1: nodes [ - | result | - result := DelphiVariableDefinitionNode new. - result addTokens: ((nodes at: 1) at: 1) to: result names. - result addTokens: ((nodes at: 1) at: 2) to: result commas. - result colon: (nodes at: 2). - result type: (nodes at: 3). - result modifier: (nodes at: 4). - result semicolon: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForNewClassComponent2: nodes [ - | result | - result := DelphiClassVarsNode new. - result classToken: (nodes at: 1). - result varToken: ((nodes at: 2) at: 1). - result addNodes: ((nodes at: 2) at: 2) to: result variableDefinitions. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForNewClassComponent5: nodes [ - | result | - result := nodes at: 2. - result attribute: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForNewClassType1: nodes [ - | result | - result := DelphiNewClassTypeNode new. - result classToken: (nodes at: 1). - result addTokens: (nodes at: 2) to: result classAttributes. - result left: ((nodes at: 3) at: 1). - result addNodes: ((nodes at: 3) at: 2) to: result superclasses. - result addTokens: ((nodes at: 3) at: 3) to: result commas. - result right: ((nodes at: 3) at: 4). - result implicitClassSection: (nodes at: 4). - result addNodes: (nodes at: 5) to: result sections. - result endToken: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForNewClassType2: nodes [ - | result | - result := DelphiNewClassTypeNode new. - result classToken: (nodes at: 1). - result addTokens: (nodes at: 2) to: result classAttributes. - result left: ((nodes at: 3) at: 1). - result addNodes: ((nodes at: 3) at: 2) to: result superclasses. - result addTokens: ((nodes at: 3) at: 3) to: result commas. - result right: ((nodes at: 3) at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForNonExternalClassOperatorHeader1: nodes [ - | result | - result := DelphiClassOperatorHeaderNode new. - result classToken: (nodes at: 1). - result operatorToken: (nodes at: 2). - result qualifiedName: (nodes at: 3). - result left: ((nodes at: 4) at: 1). - result addNodes: ((nodes at: 4) at: 2) to: result arguments. - result addTokens: ((nodes at: 4) at: 3) to: result semicolons. - result right: ((nodes at: 4) at: 4). - result colon: ((nodes at: 5) at: 1). - result type: ((nodes at: 5) at: 2). - result addToken: (nodes at: 6) to: result semicolons. - result addNodes: (nodes at: 7) to: result modifiers. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForNonExternalConstructorHeader1: nodes [ - | result | - result := DelphiConstructorHeaderNode new. - result constructorToken: (nodes at: 1). - result qualifiedName: (nodes at: 2). - result left: ((nodes at: 3) at: 1). - result addNodes: ((nodes at: 3) at: 2) to: result arguments. - result addTokens: ((nodes at: 3) at: 3) to: result semicolons. - result right: ((nodes at: 3) at: 4). - result addToken: (nodes at: 4) to: result semicolons. - result addNodes: (nodes at: 5) to: result modifiers. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForNonExternalDestructorHeader1: nodes [ - | result | - result := DelphiDestructorHeaderNode new. - result destructorToken: (nodes at: 1). - result qualifiedName: (nodes at: 2). - result left: ((nodes at: 3) at: 1). - result right: ((nodes at: 3) at: 2). - result semicolon: (nodes at: 4). - result addNodes: (nodes at: 5) to: result modifiers. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForNonExternalFunctionHeaderVars1: nodes [ - | result | - result := Array new: 9. - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: ((nodes at: 3) at: 1). - self addAll: ((nodes at: 3) at: 2) to: (result at: 4). - self addAll: ((nodes at: 3) at: 3) to: (result at: 5). - result at: 6 put: ((nodes at: 3) at: 4). - result at: 7 put: ((nodes at: 4) at: 1). - result at: 8 put: ((nodes at: 4) at: 2). - self add: (nodes at: 5) to: (result at: 5). - self addAll: (nodes at: 6) to: (result at: 9). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForNonExternalMethodModifier3: nodes [ - | result | - result := DelphiMessageMethodModifierNode new. - result modifier: (nodes at: 1). - result expression: (nodes at: 2). - result semicolon: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForNonExternalProcedureHeaderVars1: nodes [ - | result | - result := Array new: 7. - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: ((nodes at: 3) at: 1). - self addAll: ((nodes at: 3) at: 2) to: (result at: 4). - self addAll: ((nodes at: 3) at: 3) to: (result at: 5). - result at: 6 put: ((nodes at: 3) at: 4). - self add: (nodes at: 4) to: (result at: 5). - self addAll: (nodes at: 5) to: (result at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForOldClassType1: nodes [ - | result | - result := DelphiOldClassTypeNode new. - result objectToken: (nodes at: 1). - result left: ((nodes at: 2) at: 1). - result addNodes: ((nodes at: 2) at: 2) to: result superclasses. - result addTokens: ((nodes at: 2) at: 3) to: result commas. - result right: ((nodes at: 2) at: 4). - result implicitClassSection: (nodes at: 3). - result addNodes: (nodes at: 4) to: result sections. - result endToken: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForOnDo1: nodes [ - | result | - result := DelphiOnDoNode new. - result onToken: (nodes at: 1). - result exception: (nodes at: 2). - result colon: ((nodes at: 3) at: 1). - result type: ((nodes at: 3) at: 2). - result doToken: (nodes at: 4). - result addNodes: ((nodes at: 5) at: 1) to: result statements. - result addTokens: ((nodes at: 5) at: 2) to: result semicolons. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForOptionalArguments1: nodes [ - | result | - result := Array new: 4. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForOptionalRaiseAt1: nodes [ - | result | - result := Array new: 2. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPossibleExceptElse2: nodes [ - | result | - result := DelphiExceptElseNode new. - result elseToken: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result statements. - result addTokens: ((nodes at: 2) at: 2) to: result semicolons. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPrivateClassSection1: nodes [ - | result | - result := DelphiPrivateClassSectionNode new. - result strictToken: (nodes at: 1). - result privateToken: (nodes at: 2). - result addNodes: (nodes at: 3) to: result components. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPrivateClassSection2: nodes [ - | result | - result := DelphiPrivateClassSectionNode new. - result privateToken: (nodes at: 1). - result addNodes: (nodes at: 2) to: result components. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForProcedureDefinition1: nodes [ - | result | - result := DelphiProcedureDefinitionNode new. - result header: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result definitions. - result block: ((nodes at: 2) at: 2). - result semicolon: ((nodes at: 2) at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForProcedureDefinition2: nodes [ - | result | - result := DelphiProcedureDefinitionNode new. - result header: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForProgramFile1: nodes [ - | result | - result := Array new: 11. - result at: 4 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 1 put: ((nodes at: 1) at: 1). - result at: 2 put: ((nodes at: 1) at: 2). - result at: 3 put: ((nodes at: 1) at: 3). - self add: ((nodes at: 1) at: 4) to: (result at: 4). - result at: 5 put: ((nodes at: 2) at: 1). - self addAll: ((nodes at: 2) at: 2) to: (result at: 6). - self addAll: ((nodes at: 2) at: 3) to: (result at: 7). - self addAll: ((nodes at: 2) at: 4) to: (result at: 8). - self addAll: ((nodes at: 2) at: 5) to: (result at: 9). - self add: ((nodes at: 2) at: 6) to: (result at: 4). - result at: 10 put: (nodes at: 3). - result at: 11 put: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForProgramFile2: nodes [ - | result | - result := Array new: 11. - result at: 4 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 5 put: ((nodes at: 1) at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 6). - self addAll: ((nodes at: 1) at: 3) to: (result at: 7). - self addAll: ((nodes at: 1) at: 4) to: (result at: 8). - self addAll: ((nodes at: 1) at: 5) to: (result at: 9). - self add: ((nodes at: 1) at: 6) to: (result at: 4). - result at: 10 put: (nodes at: 2). - result at: 11 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPropertyArrayAccessors2: nodes [ - | result | - result := DelphiPropertyArrayAccessorsNode new. - result left: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result arguments. - result addTokens: ((nodes at: 2) at: 2) to: result semicolons. - result right: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPropertyDefault1: nodes [ - | result | - result := DelphiPropertyDefaultNode new. - result defaultToken: (nodes at: 1). - result expression: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPropertyDefault2: nodes [ - | result | - result := DelphiPropertyDefaultNode new. - result defaultToken: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPropertyDefault3: nodes [ - | result | - result := DelphiPropertyDefaultNode new. - result nodefaultToken: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPropertyDispid1: nodes [ - | result | - result := DelphiPropertyDispidNode new. - result dispidToken: (nodes at: 1). - result expression: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPropertyDispid2: nodes [ - | result | - result := DelphiPropertyDispidNode new. - result readOnlyToken: (nodes at: 1). - result dispidToken: (nodes at: 2). - result expression: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPropertyDispid3: nodes [ - | result | - result := DelphiPropertyDispidNode new. - result writeOnlyToken: (nodes at: 1). - result dispidToken: (nodes at: 2). - result expression: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPropertyHeader1: nodes [ - | result | - result := DelphiPropertyHeaderNode new. - result propertyToken: ((nodes at: 1) at: 1). - result name: ((nodes at: 1) at: 2). - result arrayAccessors: ((nodes at: 1) at: 3). - result colon: ((nodes at: 1) at: 4). - result type: ((nodes at: 1) at: 5). - result addNodes: ((nodes at: 1) at: 6) to: result indexes. - result addNodes: ((nodes at: 1) at: 7) to: result readers. - result addNodes: ((nodes at: 1) at: 8) to: result writers. - result addNodes: ((nodes at: 1) at: 9) to: result defaults. - result addNodes: ((nodes at: 1) at: 10) to: result storeds. - result addNodes: ((nodes at: 1) at: 11) to: result implementses. - result addNodes: ((nodes at: 1) at: 12) to: result dispids. - result semicolon: ((nodes at: 1) at: 13). - result modifier: ((nodes at: 1) at: 14). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPropertyHeaderVars1: nodes [ - | result | - result := Array new: 14. - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - result at: 4 put: ((nodes at: 4) at: 1). - result at: 5 put: ((nodes at: 4) at: 2). - self addAll: ((nodes at: 5) at: 1) to: (result at: 6). - self addAll: ((nodes at: 5) at: 2) to: (result at: 7). - self addAll: ((nodes at: 5) at: 3) to: (result at: 8). - self addAll: ((nodes at: 5) at: 4) to: (result at: 9). - self addAll: ((nodes at: 5) at: 5) to: (result at: 10). - self addAll: ((nodes at: 5) at: 6) to: (result at: 11). - self addAll: ((nodes at: 5) at: 7) to: (result at: 12). - result at: 13 put: (nodes at: 6). - result at: 14 put: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPropertyImplements1: nodes [ - | result | - result := DelphiPropertyImplementsNode new. - result implementsToken: (nodes at: 1). - result addTokens: ((nodes at: 2) at: 1) to: result interfaces. - result addTokens: ((nodes at: 2) at: 2) to: result commas. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPropertyIndex1: nodes [ - | result | - result := DelphiPropertyIndexNode new. - result indexToken: (nodes at: 1). - result expression: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPropertyModifiers2: nodes [ - | result | - result := DelphiPropertyModifierNode new. - result defaultToken: (nodes at: 1). - result semicolon: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPropertyReader1: nodes [ - | result | - result := DelphiPropertyReaderNode new. - result readToken: (nodes at: 1). - result expression: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPropertyStored1: nodes [ - | result | - result := DelphiPropertyStoredNode new. - result storedToken: (nodes at: 1). - result isStored: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPropertyValues1: nodes [ - | result | - result := Array new: 7. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPropertyValues2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPropertyValues4: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPropertyValues5: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPropertyValues6: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPropertyValues7: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPropertyValues8: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPropertyWriter1: nodes [ - | result | - result := DelphiPropertyWriterNode new. - result writeToken: (nodes at: 1). - result expression: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForProtectedClassSection1: nodes [ - | result | - result := DelphiProtectedClassSectionNode new. - result strictToken: (nodes at: 1). - result protectedToken: (nodes at: 2). - result addNodes: (nodes at: 3) to: result components. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForProtectedClassSection2: nodes [ - | result | - result := DelphiProtectedClassSectionNode new. - result protectedToken: (nodes at: 1). - result addNodes: (nodes at: 2) to: result components. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPublicClassSection1: nodes [ - | result | - result := DelphiPublicClassSectionNode new. - result publicToken: (nodes at: 1). - result addNodes: (nodes at: 2) to: result components. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForPublishedClassSection1: nodes [ - | result | - result := DelphiPublishedClassSectionNode new. - result publishedToken: (nodes at: 1). - result addNodes: (nodes at: 2) to: result components. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForQualifiedName1: nodes [ - | result | - result := DelphiQualifiedNameNode new. - result name: (nodes at: 1). - result left: ((nodes at: 2) at: 1). - result - addTokens: ((nodes at: 2) at: 2) - to: result genericTypeArguments. - result addTokens: ((nodes at: 2) at: 3) to: result commas. - result right: ((nodes at: 2) at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForQualifiedName2: nodes [ - | result | - result := DelphiQualifiedNameNode new. - result namespace: (nodes at: 1). - result left: ((nodes at: 2) at: 1). - result - addTokens: ((nodes at: 2) at: 2) - to: result genericTypeArguments. - result addTokens: ((nodes at: 2) at: 3) to: result commas. - result right: ((nodes at: 2) at: 4). - result period: (nodes at: 3). - result name: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForRaiseStatement1: nodes [ - | result | - result := Array new: 4. - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: ((nodes at: 3) at: 1). - result at: 4 put: ((nodes at: 3) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForRaiseStatement2: nodes [ - | result | - result := Array new: 4. - result at: 1 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForRangeType1: nodes [ - | result | - result := DelphiRangeTypeNode new. - result startValue: (nodes at: 1). - result dots: (nodes at: 2). - result endValue: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForRecordFieldList1: nodes [ - | result | - result := Array new: 8. - result at: 1 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - self addAll: (nodes at: 2) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForRecordFieldList2: nodes [ - | result | - result := Array new: 8. - result at: 1 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - self addAll: (nodes at: 2) to: (result at: 1). - result at: 2 put: ((nodes at: 3) at: 1). - result at: 3 put: ((nodes at: 3) at: 2). - result at: 4 put: ((nodes at: 3) at: 3). - result at: 5 put: ((nodes at: 3) at: 4). - result at: 6 put: ((nodes at: 3) at: 5). - self addAll: ((nodes at: 3) at: 6) to: (result at: 7). - self addAll: ((nodes at: 3) at: 7) to: (result at: 8). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForRecordType1: nodes [ - | result | - result := DelphiRecordTypeNode new. - result packedToken: (nodes at: 1). - result recordToken: (nodes at: 2). - result addNodes: ((nodes at: 3) at: 1) to: result sections. - result caseToken: ((nodes at: 3) at: 2). - result value: ((nodes at: 3) at: 3). - result colon: ((nodes at: 3) at: 4). - result type: ((nodes at: 3) at: 5). - result ofToken: ((nodes at: 3) at: 6). - result addNodes: ((nodes at: 3) at: 7) to: result variantTypes. - result addTokens: ((nodes at: 3) at: 8) to: result semicolons. - result endToken: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForRepeatStatement1: nodes [ - | result | - result := Array new: 5. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - result at: 4 put: (nodes at: 3). - result at: 5 put: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForResource1: nodes [ - | result | - result := DelphiResourceStringDefinitionNode new. - result name: (nodes at: 1). - result equalToken: (nodes at: 2). - result value: (nodes at: 3). - result deprecatedToken: (nodes at: 4). - result semicolon: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForResourceStringList1: nodes [ - | result | - result := DelphiResourceStringListNode new. - result resourceStringToken: (nodes at: 1). - result addNodes: (nodes at: 2) to: result definitions. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForSetConstructor1: nodes [ - | result | - result := DelphiSetExpressionNode new. - result left: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result values. - result addTokens: ((nodes at: 2) at: 2) to: result commas. - result right: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForSetConstructor2: nodes [ - | result | - result := DelphiSetExpressionNode new. - result left: (nodes at: 1). - result right: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForSetType1: nodes [ - | result | - result := DelphiExpressionSetTypeNode new. - result setToken: (nodes at: 1). - result ofToken: (nodes at: 2). - result setValue: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForSetType2: nodes [ - | result | - result := DelphiRangeSetTypeNode new. - result setToken: (nodes at: 1). - result ofToken: (nodes at: 2). - result setValue: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForSetType3: nodes [ - | result | - result := DelphiValuesSetTypeNode new. - result setToken: (nodes at: 1). - result ofToken: (nodes at: 2). - result left: (nodes at: 3). - result addTokens: ((nodes at: 4) at: 1) to: result names. - result addTokens: ((nodes at: 4) at: 2) to: result commas. - result right: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForSetValue1: nodes [ - | result | - result := DelphiSingleSetValueNode new. - result value: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForSetValue2: nodes [ - | result | - result := DelphiRangeSetValueNode new. - result fromValue: (nodes at: 1). - result dots: (nodes at: 2). - result toValue: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForSimpleDefinedType11: nodes [ - | result | - result := DelphiTypeTypeNode new. - result typeToken: (nodes at: 1). - result typeName: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForSimpleDefinedType1: nodes [ - | result | - result := DelphiNamedTypeNode new. - result typeExpression: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForSimpleDefinedType2: nodes [ - | result | - result := DelphiPointerTypeNode new. - result upArrowToken: (nodes at: 1). - result type: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForSimpleDefinedType5: nodes [ - | result | - result := DelphiInstantiatedGenericTypeNode new. - result type: (nodes at: 1). - result left: ((nodes at: 2) at: 1). - result addNodes: ((nodes at: 2) at: 2) to: result typeArguments. - result addTokens: ((nodes at: 2) at: 3) to: result commas. - result right: ((nodes at: 2) at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForSimpleDefinedType6: nodes [ - | result | - result := DelphiSimpleArrayTypeNode new. - result type: (nodes at: 1). - result left: (nodes at: 2). - result bounds: (nodes at: 3). - result right: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForSimpleDefinedType8: nodes [ - | result | - result := DelphiAbsoluteTypeNode new. - result type: (nodes at: 1). - result absoluteToken: (nodes at: 2). - result variable: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForStatement10: nodes [ - | result | - result := DelphiWhileStatementNode new. - result whileToken: ((nodes at: 1) at: 1). - result expression: ((nodes at: 1) at: 2). - result doToken: ((nodes at: 1) at: 3). - result statement: ((nodes at: 1) at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForStatement11: nodes [ - | result | - result := DelphiGotoStatementNode new. - result gotoToken: ((nodes at: 1) at: 1). - result label: ((nodes at: 1) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForStatement13: nodes [ - | result | - result := DelphiLabeledStatementNode new. - result label: ((nodes at: 1) at: 1). - result colon: ((nodes at: 1) at: 2). - result statement: ((nodes at: 1) at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForStatement14: nodes [ - | result | - result := DelphiEmptyStatementNode new. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForStatement2: nodes [ - | result | - result := DelphiRepeatStatementNode new. - result repeatToken: ((nodes at: 1) at: 1). - result addNodes: ((nodes at: 1) at: 2) to: result statements. - result addTokens: ((nodes at: 1) at: 3) to: result semicolons. - result untilToken: ((nodes at: 1) at: 4). - result expression: ((nodes at: 1) at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForStatement3: nodes [ - | result | - result := DelphiIfStatementNode new. - result ifToken: ((nodes at: 1) at: 1). - result expression: ((nodes at: 1) at: 2). - result thenToken: ((nodes at: 1) at: 3). - result thenStatement: ((nodes at: 1) at: 4). - result elseToken: ((nodes at: 1) at: 5). - result elseStatement: ((nodes at: 1) at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForStatement4: nodes [ - | result | - result := DelphiWithStatementNode new. - result withToken: ((nodes at: 1) at: 1). - result addNodes: ((nodes at: 1) at: 2) to: result expressions. - result addTokens: ((nodes at: 1) at: 3) to: result commas. - result doToken: ((nodes at: 1) at: 4). - result statement: ((nodes at: 1) at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForStatement5: nodes [ - | result | - result := DelphiTryStatementNode new. - result tryToken: ((nodes at: 1) at: 1). - result addNodes: ((nodes at: 1) at: 2) to: result statements. - result addTokens: ((nodes at: 1) at: 3) to: result semicolons. - result except: ((nodes at: 1) at: 4). - result finally: ((nodes at: 1) at: 5). - result endToken: ((nodes at: 1) at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForStatement6: nodes [ - | result | - result := DelphiCaseStatementNode new. - result caseToken: ((nodes at: 1) at: 1). - result expression: ((nodes at: 1) at: 2). - result ofToken: ((nodes at: 1) at: 3). - result addNodes: ((nodes at: 1) at: 4) to: result options. - result addTokens: ((nodes at: 1) at: 5) to: result semicolons. - result elseToken: ((nodes at: 1) at: 6). - result addNodes: ((nodes at: 1) at: 7) to: result statements. - result endToken: ((nodes at: 1) at: 8). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForStatement7: nodes [ - | result | - result := DelphiRaiseStatementNode new. - result raiseToken: ((nodes at: 1) at: 1). - result expression: ((nodes at: 1) at: 2). - result atToken: ((nodes at: 1) at: 3). - result location: ((nodes at: 1) at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForStatement8: nodes [ - | result | - result := DelphiForStatementNode new. - result forToken: ((nodes at: 1) at: 1). - result variable: ((nodes at: 1) at: 2). - result assignmentToken: ((nodes at: 1) at: 3). - result fromExpr: ((nodes at: 1) at: 4). - result toToken: ((nodes at: 1) at: 5). - result toExpr: ((nodes at: 1) at: 6). - result doToken: ((nodes at: 1) at: 7). - result statement: ((nodes at: 1) at: 8). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForStatement9: nodes [ - | result | - result := DelphiForInStatementNode new. - result forToken: ((nodes at: 1) at: 1). - result variable: ((nodes at: 1) at: 2). - result inToken: ((nodes at: 1) at: 3). - result fromExpr: ((nodes at: 1) at: 4). - result doToken: ((nodes at: 1) at: 5). - result statement: ((nodes at: 1) at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForStatementBlock1: nodes [ - | result | - result := DelphiStatementBlockNode new. - result beginToken: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result statements. - result addTokens: ((nodes at: 2) at: 2) to: result semicolons. - result endToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForStatements1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForStatements2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 2). - self add: (nodes at: 3) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForTryStatement1: nodes [ - | result | - result := Array new: 6. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - result at: 4 put: (nodes at: 3). - result at: 5 put: (nodes at: 4). - result at: 6 put: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForTwoItemSetNameList1: nodes [ - | result | - result := nodes at: 3. - self addFirst: (nodes at: 1) to: (result at: 1). - self addFirst: (nodes at: 2) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForUnitFile1: nodes [ - | result | - result := Array new: 10. - result at: 1 put: ((nodes at: 1) at: 1). - result at: 2 put: ((nodes at: 1) at: 2). - result at: 3 put: ((nodes at: 1) at: 3). - result at: 4 put: ((nodes at: 1) at: 4). - result at: 5 put: (nodes at: 2). - result at: 6 put: (nodes at: 3). - result at: 7 put: (nodes at: 4). - result at: 8 put: (nodes at: 5). - result at: 9 put: ((nodes at: 6) at: 1). - result at: 10 put: ((nodes at: 6) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForUnitFile2: nodes [ - | result | - result := Array new: 10. - result at: 1 put: ((nodes at: 1) at: 1). - result at: 2 put: ((nodes at: 1) at: 2). - result at: 3 put: ((nodes at: 1) at: 3). - result at: 4 put: ((nodes at: 1) at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForUsesList1: nodes [ - | result | - result := Array new: 6. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForUsesList2: nodes [ - | result | - result := Array new: 6. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - self addAll: ((nodes at: 2) at: 3) to: (result at: 4). - self addAll: ((nodes at: 2) at: 4) to: (result at: 5). - result at: 6 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForUsesModule1: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForUsesModuleList1: nodes [ - | result | - result := Array new: 4. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - self add: ((nodes at: 1) at: 1) to: (result at: 1). - self add: ((nodes at: 1) at: 2) to: (result at: 2). - self add: ((nodes at: 1) at: 3) to: (result at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForUsesModuleList2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 4). - self add: ((nodes at: 3) at: 1) to: (result at: 1). - self add: ((nodes at: 3) at: 2) to: (result at: 2). - self add: ((nodes at: 3) at: 3) to: (result at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForVariable1: nodes [ - | result | - result := DelphiVariableNode new. - result addTokens: ((nodes at: 1) at: 1) to: result names. - result addTokens: ((nodes at: 1) at: 2) to: result commas. - result colon: (nodes at: 2). - result type: (nodes at: 3). - result modifier: (nodes at: 4). - result equal: ((nodes at: 5) at: 1). - result value: ((nodes at: 5) at: 2). - result semicolon: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForVariableExpression1: nodes [ - | result | - result := DelphiVariableExpressionNode new. - result name: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForVariantRecordPart1: nodes [ - | result | - result := Array new: 7. - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: ((nodes at: 3) at: 1). - result at: 4 put: ((nodes at: 3) at: 2). - result at: 5 put: (nodes at: 4). - self addAll: ((nodes at: 5) at: 1) to: (result at: 6). - self addAll: ((nodes at: 5) at: 2) to: (result at: 7). - self add: (nodes at: 6) to: (result at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForVariantType1: nodes [ - | result | - result := DelphiVariantTypeNode new. - result addNodes: ((nodes at: 1) at: 1) to: result names. - result addTokens: ((nodes at: 1) at: 2) to: result commas. - result addToken: (nodes at: 2) to: result colons. - result left: (nodes at: 3). - result addNodes: ((nodes at: 4) at: 1) to: result sections. - result caseToken: ((nodes at: 4) at: 2). - result value: ((nodes at: 4) at: 3). - result addToken: ((nodes at: 4) at: 4) to: result colons. - result type: ((nodes at: 4) at: 5). - result ofToken: ((nodes at: 4) at: 6). - result addNodes: ((nodes at: 4) at: 7) to: result variantTypes. - result addTokens: ((nodes at: 4) at: 8) to: result semicolons. - result right: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForVars1: nodes [ - | result | - result := DelphiVarsNode new. - result varToken: ((nodes at: 1) at: 1). - result addNodes: ((nodes at: 1) at: 2) to: result variableDefinitions. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiParser >> reduceActionForVarsVars2: nodes [ - | result | - result := Array new: 2. - result at: 2 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: (nodes at: 2) to: (result at: 2). - ^ result -] diff --git a/src/SmaCC_Delphi/DelphiPlusExpressionNode.class.st b/src/SmaCC_Delphi/DelphiPlusExpressionNode.class.st deleted file mode 100644 index 665ab451a..000000000 --- a/src/SmaCC_Delphi/DelphiPlusExpressionNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #DelphiPlusExpressionNode, - #superclass : #DelphiExpressionNode, - #instVars : [ - 'plus', - 'expression' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiPlusExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPlusExpression: self -] - -{ #category : #generated } -DelphiPlusExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -DelphiPlusExpressionNode >> expression: aDelphiExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aDelphiExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -DelphiPlusExpressionNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -DelphiPlusExpressionNode >> plus [ - ^ plus -] - -{ #category : #generated } -DelphiPlusExpressionNode >> plus: aSmaCCToken [ - plus := aSmaCCToken -] - -{ #category : #generated } -DelphiPlusExpressionNode >> tokenVariables [ - ^ #(#plus) -] diff --git a/src/SmaCC_Delphi/DelphiPointerExpressionNode.class.st b/src/SmaCC_Delphi/DelphiPointerExpressionNode.class.st deleted file mode 100644 index e51ca8f21..000000000 --- a/src/SmaCC_Delphi/DelphiPointerExpressionNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #DelphiPointerExpressionNode, - #superclass : #DelphiExpressionNode, - #instVars : [ - 'expression', - 'upArrow' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiPointerExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPointerExpression: self -] - -{ #category : #generated } -DelphiPointerExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -DelphiPointerExpressionNode >> expression: aDelphiExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aDelphiExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -DelphiPointerExpressionNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -DelphiPointerExpressionNode >> tokenVariables [ - ^ #(#upArrow) -] - -{ #category : #generated } -DelphiPointerExpressionNode >> upArrow [ - ^ upArrow -] - -{ #category : #generated } -DelphiPointerExpressionNode >> upArrow: aSmaCCToken [ - upArrow := aSmaCCToken -] diff --git a/src/SmaCC_Delphi/DelphiPointerTypeNode.class.st b/src/SmaCC_Delphi/DelphiPointerTypeNode.class.st deleted file mode 100644 index c95c7eb7b..000000000 --- a/src/SmaCC_Delphi/DelphiPointerTypeNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #DelphiPointerTypeNode, - #superclass : #DelphiTypeNode, - #instVars : [ - 'upArrowToken', - 'type' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiPointerTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPointerType: self -] - -{ #category : #generated } -DelphiPointerTypeNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -DelphiPointerTypeNode >> tokenVariables [ - ^ #(#upArrowToken) -] - -{ #category : #generated } -DelphiPointerTypeNode >> type [ - ^ type -] - -{ #category : #generated } -DelphiPointerTypeNode >> type: aDelphiProgramNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aDelphiProgramNode. - self type notNil - ifTrue: [ self type parent: self ] -] - -{ #category : #generated } -DelphiPointerTypeNode >> upArrowToken [ - ^ upArrowToken -] - -{ #category : #generated } -DelphiPointerTypeNode >> upArrowToken: aSmaCCToken [ - upArrowToken := aSmaCCToken -] diff --git a/src/SmaCC_Delphi/DelphiPrivateClassSectionNode.class.st b/src/SmaCC_Delphi/DelphiPrivateClassSectionNode.class.st deleted file mode 100644 index c22110230..000000000 --- a/src/SmaCC_Delphi/DelphiPrivateClassSectionNode.class.st +++ /dev/null @@ -1,39 +0,0 @@ -Class { - #name : #DelphiPrivateClassSectionNode, - #superclass : #DelphiClassSectionNode, - #instVars : [ - 'strictToken', - 'privateToken' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiPrivateClassSectionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPrivateClassSection: self -] - -{ #category : #generated } -DelphiPrivateClassSectionNode >> privateToken [ - ^ privateToken -] - -{ #category : #generated } -DelphiPrivateClassSectionNode >> privateToken: aSmaCCToken [ - privateToken := aSmaCCToken -] - -{ #category : #generated } -DelphiPrivateClassSectionNode >> strictToken [ - ^ strictToken -] - -{ #category : #generated } -DelphiPrivateClassSectionNode >> strictToken: aSmaCCToken [ - strictToken := aSmaCCToken -] - -{ #category : #generated } -DelphiPrivateClassSectionNode >> tokenVariables [ - ^ #(#strictToken #privateToken) -] diff --git a/src/SmaCC_Delphi/DelphiProcedureDefinitionNode.class.st b/src/SmaCC_Delphi/DelphiProcedureDefinitionNode.class.st deleted file mode 100644 index 98081dfd0..000000000 --- a/src/SmaCC_Delphi/DelphiProcedureDefinitionNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #DelphiProcedureDefinitionNode, - #superclass : #DelphiMethodDefinitionNode, - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiProcedureDefinitionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitProcedureDefinition: self -] diff --git a/src/SmaCC_Delphi/DelphiProcedureHeaderNode.class.st b/src/SmaCC_Delphi/DelphiProcedureHeaderNode.class.st deleted file mode 100644 index b99321ba8..000000000 --- a/src/SmaCC_Delphi/DelphiProcedureHeaderNode.class.st +++ /dev/null @@ -1,69 +0,0 @@ -Class { - #name : #DelphiProcedureHeaderNode, - #superclass : #DelphiMethodHeaderNode, - #instVars : [ - 'procedureToken', - 'arguments', - 'semicolons' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiProcedureHeaderNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitProcedureHeader: self -] - -{ #category : #generated } -DelphiProcedureHeaderNode >> arguments [ - ^ arguments -] - -{ #category : #generated } -DelphiProcedureHeaderNode >> arguments: anOrderedCollection [ - self setParents: self arguments to: nil. - arguments := anOrderedCollection. - self setParents: self arguments to: self -] - -{ #category : #generated } -DelphiProcedureHeaderNode >> compositeNodeVariables [ - ^ #(#arguments #modifiers) -] - -{ #category : #generated } -DelphiProcedureHeaderNode >> ignoredCompositeTokenVariables [ - ^ #(#semicolons) -] - -{ #category : #'generated-initialize-release' } -DelphiProcedureHeaderNode >> initialize [ - super initialize. - semicolons := OrderedCollection new: 2. - arguments := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiProcedureHeaderNode >> procedureToken [ - ^ procedureToken -] - -{ #category : #generated } -DelphiProcedureHeaderNode >> procedureToken: aSmaCCToken [ - procedureToken := aSmaCCToken -] - -{ #category : #generated } -DelphiProcedureHeaderNode >> semicolons [ - ^ semicolons -] - -{ #category : #generated } -DelphiProcedureHeaderNode >> semicolons: anOrderedCollection [ - semicolons := anOrderedCollection -] - -{ #category : #generated } -DelphiProcedureHeaderNode >> tokenVariables [ - ^ #(#procedureToken #left #right) -] diff --git a/src/SmaCC_Delphi/DelphiProgramFileNode.class.st b/src/SmaCC_Delphi/DelphiProgramFileNode.class.st deleted file mode 100644 index c3a0514ed..000000000 --- a/src/SmaCC_Delphi/DelphiProgramFileNode.class.st +++ /dev/null @@ -1,178 +0,0 @@ -Class { - #name : #DelphiProgramFileNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'programToken', - 'programName', - 'modifier', - 'semicolons', - 'usesToken', - 'moduleNames', - 'inTokens', - 'filenames', - 'commas', - 'main', - 'period' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiProgramFileNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitProgramFile: self -] - -{ #category : #generated } -DelphiProgramFileNode >> commas [ - ^ commas -] - -{ #category : #generated } -DelphiProgramFileNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -DelphiProgramFileNode >> compositeNodeVariables [ - ^ #(#moduleNames) -] - -{ #category : #generated } -DelphiProgramFileNode >> compositeTokenVariables [ - ^ #(#inTokens #filenames) -] - -{ #category : #generated } -DelphiProgramFileNode >> filenames [ - ^ filenames -] - -{ #category : #generated } -DelphiProgramFileNode >> filenames: anOrderedCollection [ - filenames := anOrderedCollection -] - -{ #category : #generated } -DelphiProgramFileNode >> ignoredCompositeTokenVariables [ - ^ #(#semicolons #commas) -] - -{ #category : #generated } -DelphiProgramFileNode >> inTokens [ - ^ inTokens -] - -{ #category : #generated } -DelphiProgramFileNode >> inTokens: anOrderedCollection [ - inTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -DelphiProgramFileNode >> initialize [ - super initialize. - semicolons := OrderedCollection new: 2. - moduleNames := OrderedCollection new: 2. - inTokens := OrderedCollection new: 2. - filenames := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiProgramFileNode >> main [ - ^ main -] - -{ #category : #generated } -DelphiProgramFileNode >> main: aDelphiMainMethodDefinitionNode [ - self main notNil - ifTrue: [ self main parent: nil ]. - main := aDelphiMainMethodDefinitionNode. - self main notNil - ifTrue: [ self main parent: self ] -] - -{ #category : #generated } -DelphiProgramFileNode >> modifier [ - ^ modifier -] - -{ #category : #generated } -DelphiProgramFileNode >> modifier: aSmaCCToken [ - modifier := aSmaCCToken -] - -{ #category : #generated } -DelphiProgramFileNode >> moduleNames [ - ^ moduleNames -] - -{ #category : #generated } -DelphiProgramFileNode >> moduleNames: anOrderedCollection [ - self setParents: self moduleNames to: nil. - moduleNames := anOrderedCollection. - self setParents: self moduleNames to: self -] - -{ #category : #generated } -DelphiProgramFileNode >> nodeVariables [ - ^ #(#programName #main) -] - -{ #category : #generated } -DelphiProgramFileNode >> period [ - ^ period -] - -{ #category : #generated } -DelphiProgramFileNode >> period: aSmaCCToken [ - period := aSmaCCToken -] - -{ #category : #generated } -DelphiProgramFileNode >> programName [ - ^ programName -] - -{ #category : #generated } -DelphiProgramFileNode >> programName: aDelphiModuleNameNode [ - self programName notNil - ifTrue: [ self programName parent: nil ]. - programName := aDelphiModuleNameNode. - self programName notNil - ifTrue: [ self programName parent: self ] -] - -{ #category : #generated } -DelphiProgramFileNode >> programToken [ - ^ programToken -] - -{ #category : #generated } -DelphiProgramFileNode >> programToken: aSmaCCToken [ - programToken := aSmaCCToken -] - -{ #category : #generated } -DelphiProgramFileNode >> semicolons [ - ^ semicolons -] - -{ #category : #generated } -DelphiProgramFileNode >> semicolons: anOrderedCollection [ - semicolons := anOrderedCollection -] - -{ #category : #generated } -DelphiProgramFileNode >> tokenVariables [ - ^ #(#programToken #modifier #usesToken #period) -] - -{ #category : #generated } -DelphiProgramFileNode >> usesToken [ - ^ usesToken -] - -{ #category : #generated } -DelphiProgramFileNode >> usesToken: aSmaCCToken [ - usesToken := aSmaCCToken -] diff --git a/src/SmaCC_Delphi/DelphiProgramNode.class.st b/src/SmaCC_Delphi/DelphiProgramNode.class.st deleted file mode 100644 index cfcdf46b1..000000000 --- a/src/SmaCC_Delphi/DelphiProgramNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #DelphiProgramNode, - #superclass : #SmaCCParseNode, - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiProgramNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitProgram: self -] diff --git a/src/SmaCC_Delphi/DelphiProgramNodeVisitor.class.st b/src/SmaCC_Delphi/DelphiProgramNodeVisitor.class.st deleted file mode 100644 index ef07475f8..000000000 --- a/src/SmaCC_Delphi/DelphiProgramNodeVisitor.class.st +++ /dev/null @@ -1,716 +0,0 @@ -Class { - #name : #DelphiProgramNodeVisitor, - #superclass : #SmaCCParseNodeVisitor, - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitAbsoluteType: anAbsoluteType [ - ^ self visitType: anAbsoluteType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitAddressExpression: anAddressExpression [ - ^ self visitExpression: anAddressExpression -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitAnonymousFunctionType: anAnonymousFunctionType [ - ^ self visitAnonymousMethodType: anAnonymousFunctionType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitAnonymousMethodType: anAnonymousMethodType [ - ^ self visitType: anAnonymousMethodType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitAnonymousProcedureType: anAnonymousProcedureType [ - ^ self visitAnonymousMethodType: anAnonymousProcedureType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitArgument: anArgument [ - ^ self visitProgram: anArgument -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitArrayExpression: anArrayExpression [ - ^ self visitExpression: anArrayExpression -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitArrayType: anArrayType [ - ^ self visitType: anArrayType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitAsmBlock: anAsmBlock [ - ^ self visitStatement: anAsmBlock -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitAssignmentExpression: anAssignmentExpression [ - ^ self visitExpression: anAssignmentExpression -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitBinaryExpression: aBinaryExpression [ - ^ self visitExpression: aBinaryExpression -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitCaseLabel: aCaseLabel [ - ^ self visitProgram: aCaseLabel -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitCaseOption: aCaseOption [ - ^ self visitProgram: aCaseOption -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitCaseStatement: aCaseStatement [ - ^ self visitMultiStatement: aCaseStatement -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitClassFunctionDefinition: aClassFunctionDefinition [ - ^ self visitFunctionDefinition: aClassFunctionDefinition -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitClassFunctionHeader: aClassFunctionHeader [ - ^ self visitFunctionHeader: aClassFunctionHeader -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitClassHelperType: aClassHelperType [ - ^ self visitClassType: aClassHelperType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitClassOperatorDefinition: aClassOperatorDefinition [ - ^ self visitFunctionDefinition: aClassOperatorDefinition -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitClassOperatorHeader: aClassOperatorHeader [ - ^ self visitMethodHeader: aClassOperatorHeader -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitClassOrInterfaceType: aClassOrInterfaceType [ - ^ self visitType: aClassOrInterfaceType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitClassProcedureDefinition: aClassProcedureDefinition [ - ^ self visitProcedureDefinition: aClassProcedureDefinition -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitClassProcedureHeader: aClassProcedureHeader [ - ^ self visitProcedureHeader: aClassProcedureHeader -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitClassPropertyHeader: aClassPropertyHeader [ - ^ self visitPropertyHeader: aClassPropertyHeader -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitClassSection: aClassSection [ - ^ self visitProgram: aClassSection -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitClassType: aClassType [ - ^ self visitClassOrInterfaceType: aClassType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitClassVars: aClassVars [ - ^ self visitVars: aClassVars -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitCodeSection: aCodeSection [ - ^ self visitProgram: aCodeSection -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitConstantArrayExpression: aConstantArrayExpression [ - ^ self visitExpression: aConstantArrayExpression -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitConstantDefinition: aConstantDefinition [ - ^ self visitProgram: aConstantDefinition -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitConstantList: aConstantList [ - ^ self visitProgram: aConstantList -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitConstantRecordField: aConstantRecordField [ - ^ self visitProgram: aConstantRecordField -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitConstructorDefinition: aConstructorDefinition [ - ^ self visitMethodDefinition: aConstructorDefinition -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitConstructorHeader: aConstructorHeader [ - ^ self visitMethodHeader: aConstructorHeader -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitDefinedTypeList: aDefinedTypeList [ - ^ self visitProgram: aDefinedTypeList -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitDestructorDefinition: aDestructorDefinition [ - ^ self visitMethodDefinition: aDestructorDefinition -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitDestructorHeader: aDestructorHeader [ - ^ self visitMethodHeader: aDestructorHeader -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitEmptyStatement: anEmptyStatement [ - ^ self visitStatement: anEmptyStatement -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitEnumName: anEnumName [ - ^ self visitProgram: anEnumName -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitEnumType: anEnumType [ - ^ self visitType: anEnumType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitExcept: anExcept [ - ^ self visitProgram: anExcept -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitExceptElse: anExceptElse [ - ^ self visitProgram: anExceptElse -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitExpression: anExpression [ - ^ self visitStatement: anExpression -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitExpressionSetType: anExpressionSetType [ - ^ self visitSetType: anExpressionSetType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitExternalMethodModifier: anExternalMethodModifier [ - ^ self visitMethodModifier: anExternalMethodModifier -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitFileType: aFileType [ - ^ self visitType: aFileType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitFinalizationSection: aFinalizationSection [ - ^ self visitCodeSection: aFinalizationSection -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitFinally: aFinally [ - ^ self visitProgram: aFinally -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitForInStatement: aForInStatement [ - ^ self visitStatement: aForInStatement -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitForStatement: aForStatement [ - ^ self visitStatement: aForStatement -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitFormattedMethodArgument: aFormattedMethodArgument [ - ^ self visitProgram: aFormattedMethodArgument -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitFunctionDefinition: aFunctionDefinition [ - ^ self visitMethodDefinition: aFunctionDefinition -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitFunctionHeader: aFunctionHeader [ - ^ self visitMethodHeader: aFunctionHeader -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitGotoStatement: aGotoStatement [ - ^ self visitStatement: aGotoStatement -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitGuid: aGuid [ - ^ self visitProgram: aGuid -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitIfStatement: anIfStatement [ - ^ self visitStatement: anIfStatement -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitImplementationCode: anImplementationCode [ - ^ self visitCodeSection: anImplementationCode -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitImplementationSection: anImplementationSection [ - ^ self visitProgram: anImplementationSection -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitImplicitClassSection: anImplicitClassSection [ - ^ self visitClassSection: anImplicitClassSection -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitInheritedFunctionCall: anInheritedFunctionCall [ - ^ self visitExpression: anInheritedFunctionCall -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitInitializationSection: anInitializationSection [ - ^ self visitCodeSection: anInitializationSection -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitInstantiatedGenericType: anInstantiatedGenericType [ - ^ self visitType: anInstantiatedGenericType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitInstantiatedGenericVariableExpression: anInstantiatedGenericVariableExpression [ - ^ self - visitVariableExpression: anInstantiatedGenericVariableExpression -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitInterfaceFunctionAssignment: anInterfaceFunctionAssignment [ - ^ self visitProgram: anInterfaceFunctionAssignment -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitInterfaceProcedureAssignment: anInterfaceProcedureAssignment [ - ^ self visitProgram: anInterfaceProcedureAssignment -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitInterfaceSection: anInterfaceSection [ - ^ self visitProgram: anInterfaceSection -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitInterfaceType: anInterfaceType [ - ^ self visitClassOrInterfaceType: anInterfaceType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitLabelVariable: aLabelVariable [ - ^ self visitProgram: aLabelVariable -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitLabeledStatement: aLabeledStatement [ - ^ self visitStatement: aLabeledStatement -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitLibraryExport: aLibraryExport [ - ^ self visitProgram: aLibraryExport -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitLibraryFile: aLibraryFile [ - ^ self visitProgram: aLibraryFile -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitLiteralExpression: aLiteralExpression [ - ^ self visitExpression: aLiteralExpression -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitMainMethodDefinition: aMainMethodDefinition [ - ^ self visitProgram: aMainMethodDefinition -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitMemExpression: aMemExpression [ - ^ self visitExpression: aMemExpression -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitMessageMethodModifier: aMessageMethodModifier [ - ^ self visitMethodModifier: aMessageMethodModifier -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitMetaclassType: aMetaclassType [ - ^ self visitType: aMetaclassType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitMethodAttribute: aMethodAttribute [ - ^ self visitProgram: aMethodAttribute -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitMethodCallExpression: aMethodCallExpression [ - ^ self visitExpression: aMethodCallExpression -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitMethodDefinition: aMethodDefinition [ - ^ self visitProgram: aMethodDefinition -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitMethodHeader: aMethodHeader [ - ^ self visitProgram: aMethodHeader -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitMethodModifier: aMethodModifier [ - ^ self visitProgram: aMethodModifier -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitMinusExpression: aMinusExpression [ - ^ self visitExpression: aMinusExpression -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitModuleName: aModuleName [ - ^ self visitProgram: aModuleName -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitMultiStatement: aMultiStatement [ - ^ self visitStatement: aMultiStatement -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitMultiValueCaseLabel: aMultiValueCaseLabel [ - ^ self visitProgram: aMultiValueCaseLabel -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitNamedDefinedType: aNamedDefinedType [ - ^ self visitProgram: aNamedDefinedType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitNamedType: aNamedType [ - ^ self visitType: aNamedType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitNewClassType: aNewClassType [ - ^ self visitClassType: aNewClassType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitNotExpression: aNotExpression [ - ^ self visitExpression: aNotExpression -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitOldClassType: anOldClassType [ - ^ self visitClassType: anOldClassType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitOnDo: anOnDo [ - ^ self visitProgram: anOnDo -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitPlusExpression: aPlusExpression [ - ^ self visitExpression: aPlusExpression -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitPointerExpression: aPointerExpression [ - ^ self visitExpression: aPointerExpression -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitPointerType: aPointerType [ - ^ self visitType: aPointerType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitPrivateClassSection: aPrivateClassSection [ - ^ self visitClassSection: aPrivateClassSection -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitProcedureDefinition: aProcedureDefinition [ - ^ self visitMethodDefinition: aProcedureDefinition -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitProcedureHeader: aProcedureHeader [ - ^ self visitMethodHeader: aProcedureHeader -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitProgram: aProgram [ - ^ self visitSmaCCParseNode: aProgram -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitProgramFile: aProgramFile [ - ^ self visitProgram: aProgramFile -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitPropertyArrayAccessors: aPropertyArrayAccessors [ - ^ self visitProgram: aPropertyArrayAccessors -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitPropertyDefault: aPropertyDefault [ - ^ self visitProgram: aPropertyDefault -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitPropertyDispid: aPropertyDispid [ - ^ self visitProgram: aPropertyDispid -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitPropertyExpression: aPropertyExpression [ - ^ self visitExpression: aPropertyExpression -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitPropertyHeader: aPropertyHeader [ - ^ self visitProgram: aPropertyHeader -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitPropertyImplements: aPropertyImplements [ - ^ self visitProgram: aPropertyImplements -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitPropertyIndex: aPropertyIndex [ - ^ self visitProgram: aPropertyIndex -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitPropertyModifier: aPropertyModifier [ - ^ self visitProgram: aPropertyModifier -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitPropertyReader: aPropertyReader [ - ^ self visitProgram: aPropertyReader -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitPropertyStored: aPropertyStored [ - ^ self visitProgram: aPropertyStored -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitPropertyWriter: aPropertyWriter [ - ^ self visitProgram: aPropertyWriter -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitProtectedClassSection: aProtectedClassSection [ - ^ self visitClassSection: aProtectedClassSection -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitPublicClassSection: aPublicClassSection [ - ^ self visitClassSection: aPublicClassSection -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitPublishedClassSection: aPublishedClassSection [ - ^ self visitClassSection: aPublishedClassSection -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitQualifiedName: aQualifiedName [ - ^ self visitProgram: aQualifiedName -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitRaiseStatement: aRaiseStatement [ - ^ self visitStatement: aRaiseStatement -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitRangeCaseLabel: aRangeCaseLabel [ - ^ self visitProgram: aRangeCaseLabel -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitRangeSetType: aRangeSetType [ - ^ self visitSetType: aRangeSetType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitRangeSetValue: aRangeSetValue [ - ^ self visitSetValue: aRangeSetValue -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitRangeType: aRangeType [ - ^ self visitType: aRangeType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitRecordExpression: aRecordExpression [ - ^ self visitExpression: aRecordExpression -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitRecordType: aRecordType [ - ^ self visitType: aRecordType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitRepeatStatement: aRepeatStatement [ - ^ self visitMultiStatement: aRepeatStatement -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitResourceStringDefinition: aResourceStringDefinition [ - ^ self visitProgram: aResourceStringDefinition -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitResourceStringList: aResourceStringList [ - ^ self visitProgram: aResourceStringList -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitSetExpression: aSetExpression [ - ^ self visitExpression: aSetExpression -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitSetType: aSetType [ - ^ self visitType: aSetType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitSetValue: aSetValue [ - ^ self visitProgram: aSetValue -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitSimpleArrayType: aSimpleArrayType [ - ^ self visitType: aSimpleArrayType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitSingleSetValue: aSingleSetValue [ - ^ self visitSetValue: aSingleSetValue -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitStatement: aStatement [ - ^ self visitProgram: aStatement -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitStatementBlock: aStatementBlock [ - ^ self visitMultiStatement: aStatementBlock -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitTryStatement: aTryStatement [ - ^ self visitMultiStatement: aTryStatement -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitType: aType [ - ^ self visitProgram: aType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitTypeType: aTypeType [ - ^ self visitProgram: aTypeType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitUnitFile: anUnitFile [ - ^ self visitProgram: anUnitFile -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitValuesSetType: aValuesSetType [ - ^ self visitSetType: aValuesSetType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitVariable: aVariable [ - ^ self visitProgram: aVariable -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitVariableDefinition: aVariableDefinition [ - ^ self visitProgram: aVariableDefinition -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitVariableExpression: aVariableExpression [ - ^ self visitExpression: aVariableExpression -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitVariantType: aVariantType [ - ^ self visitProgram: aVariantType -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitVars: aVars [ - ^ self visitProgram: aVars -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitWhileStatement: aWhileStatement [ - ^ self visitStatement: aWhileStatement -] - -{ #category : #generated } -DelphiProgramNodeVisitor >> visitWithStatement: aWithStatement [ - ^ self visitStatement: aWithStatement -] diff --git a/src/SmaCC_Delphi/DelphiProgramParser.class.st b/src/SmaCC_Delphi/DelphiProgramParser.class.st deleted file mode 100644 index c30b95ad5..000000000 --- a/src/SmaCC_Delphi/DelphiProgramParser.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #DelphiProgramParser, - #superclass : #DelphiParser, - #category : #'SmaCC_Delphi' -} - -{ #category : #'file types' } -DelphiProgramParser class >> fileExtension [ - ^ '.dpr' -] - -{ #category : #'file types' } -DelphiProgramParser class >> fileExtensionType [ - ^ 'Delphi project files' -] diff --git a/src/SmaCC_Delphi/DelphiPropertyArrayAccessorsNode.class.st b/src/SmaCC_Delphi/DelphiPropertyArrayAccessorsNode.class.st deleted file mode 100644 index 395433d01..000000000 --- a/src/SmaCC_Delphi/DelphiPropertyArrayAccessorsNode.class.st +++ /dev/null @@ -1,80 +0,0 @@ -Class { - #name : #DelphiPropertyArrayAccessorsNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'left', - 'arguments', - 'semicolons', - 'right' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiPropertyArrayAccessorsNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPropertyArrayAccessors: self -] - -{ #category : #generated } -DelphiPropertyArrayAccessorsNode >> arguments [ - ^ arguments -] - -{ #category : #generated } -DelphiPropertyArrayAccessorsNode >> arguments: anOrderedCollection [ - self setParents: self arguments to: nil. - arguments := anOrderedCollection. - self setParents: self arguments to: self -] - -{ #category : #generated } -DelphiPropertyArrayAccessorsNode >> compositeNodeVariables [ - ^ #(#arguments) -] - -{ #category : #generated } -DelphiPropertyArrayAccessorsNode >> ignoredCompositeTokenVariables [ - ^ #(#semicolons) -] - -{ #category : #'generated-initialize-release' } -DelphiPropertyArrayAccessorsNode >> initialize [ - super initialize. - arguments := OrderedCollection new: 2. - semicolons := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiPropertyArrayAccessorsNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiPropertyArrayAccessorsNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -DelphiPropertyArrayAccessorsNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiPropertyArrayAccessorsNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiPropertyArrayAccessorsNode >> semicolons [ - ^ semicolons -] - -{ #category : #generated } -DelphiPropertyArrayAccessorsNode >> semicolons: anOrderedCollection [ - semicolons := anOrderedCollection -] - -{ #category : #generated } -DelphiPropertyArrayAccessorsNode >> tokenVariables [ - ^ #(#left #right) -] diff --git a/src/SmaCC_Delphi/DelphiPropertyDefaultNode.class.st b/src/SmaCC_Delphi/DelphiPropertyDefaultNode.class.st deleted file mode 100644 index c0f5dace1..000000000 --- a/src/SmaCC_Delphi/DelphiPropertyDefaultNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #DelphiPropertyDefaultNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'defaultToken', - 'expression', - 'nodefaultToken' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiPropertyDefaultNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPropertyDefault: self -] - -{ #category : #generated } -DelphiPropertyDefaultNode >> defaultToken [ - ^ defaultToken -] - -{ #category : #generated } -DelphiPropertyDefaultNode >> defaultToken: aSmaCCToken [ - defaultToken := aSmaCCToken -] - -{ #category : #generated } -DelphiPropertyDefaultNode >> expression [ - ^ expression -] - -{ #category : #generated } -DelphiPropertyDefaultNode >> expression: aDelphiExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aDelphiExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -DelphiPropertyDefaultNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -DelphiPropertyDefaultNode >> nodefaultToken [ - ^ nodefaultToken -] - -{ #category : #generated } -DelphiPropertyDefaultNode >> nodefaultToken: aSmaCCToken [ - nodefaultToken := aSmaCCToken -] - -{ #category : #generated } -DelphiPropertyDefaultNode >> tokenVariables [ - ^ #(#defaultToken #nodefaultToken) -] diff --git a/src/SmaCC_Delphi/DelphiPropertyDispidNode.class.st b/src/SmaCC_Delphi/DelphiPropertyDispidNode.class.st deleted file mode 100644 index 4d80d9473..000000000 --- a/src/SmaCC_Delphi/DelphiPropertyDispidNode.class.st +++ /dev/null @@ -1,70 +0,0 @@ -Class { - #name : #DelphiPropertyDispidNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'dispidToken', - 'expression', - 'readOnlyToken', - 'writeOnlyToken' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiPropertyDispidNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPropertyDispid: self -] - -{ #category : #generated } -DelphiPropertyDispidNode >> dispidToken [ - ^ dispidToken -] - -{ #category : #generated } -DelphiPropertyDispidNode >> dispidToken: aSmaCCToken [ - dispidToken := aSmaCCToken -] - -{ #category : #generated } -DelphiPropertyDispidNode >> expression [ - ^ expression -] - -{ #category : #generated } -DelphiPropertyDispidNode >> expression: aDelphiExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aDelphiExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -DelphiPropertyDispidNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -DelphiPropertyDispidNode >> readOnlyToken [ - ^ readOnlyToken -] - -{ #category : #generated } -DelphiPropertyDispidNode >> readOnlyToken: aSmaCCToken [ - readOnlyToken := aSmaCCToken -] - -{ #category : #generated } -DelphiPropertyDispidNode >> tokenVariables [ - ^ #(#dispidToken #readOnlyToken #writeOnlyToken) -] - -{ #category : #generated } -DelphiPropertyDispidNode >> writeOnlyToken [ - ^ writeOnlyToken -] - -{ #category : #generated } -DelphiPropertyDispidNode >> writeOnlyToken: aSmaCCToken [ - writeOnlyToken := aSmaCCToken -] diff --git a/src/SmaCC_Delphi/DelphiPropertyExpressionNode.class.st b/src/SmaCC_Delphi/DelphiPropertyExpressionNode.class.st deleted file mode 100644 index 4089ee57e..000000000 --- a/src/SmaCC_Delphi/DelphiPropertyExpressionNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #DelphiPropertyExpressionNode, - #superclass : #DelphiExpressionNode, - #instVars : [ - 'expression', - 'period', - 'name' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiPropertyExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPropertyExpression: self -] - -{ #category : #generated } -DelphiPropertyExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -DelphiPropertyExpressionNode >> expression: aDelphiExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aDelphiExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -DelphiPropertyExpressionNode >> name [ - ^ name -] - -{ #category : #generated } -DelphiPropertyExpressionNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -DelphiPropertyExpressionNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -DelphiPropertyExpressionNode >> period [ - ^ period -] - -{ #category : #generated } -DelphiPropertyExpressionNode >> period: aSmaCCToken [ - period := aSmaCCToken -] - -{ #category : #generated } -DelphiPropertyExpressionNode >> tokenVariables [ - ^ #(#period #name) -] diff --git a/src/SmaCC_Delphi/DelphiPropertyHeaderNode.class.st b/src/SmaCC_Delphi/DelphiPropertyHeaderNode.class.st deleted file mode 100644 index 792531f5b..000000000 --- a/src/SmaCC_Delphi/DelphiPropertyHeaderNode.class.st +++ /dev/null @@ -1,224 +0,0 @@ -Class { - #name : #DelphiPropertyHeaderNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'propertyToken', - 'name', - 'arrayAccessors', - 'colon', - 'type', - 'indexes', - 'readers', - 'writers', - 'defaults', - 'storeds', - 'implementses', - 'dispids', - 'semicolon', - 'modifier' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiPropertyHeaderNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPropertyHeader: self -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> arrayAccessors [ - ^ arrayAccessors -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> arrayAccessors: aDelphiPropertyArrayAccessorsNode [ - self arrayAccessors notNil - ifTrue: [ self arrayAccessors parent: nil ]. - arrayAccessors := aDelphiPropertyArrayAccessorsNode. - self arrayAccessors notNil - ifTrue: [ self arrayAccessors parent: self ] -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> colon [ - ^ colon -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> compositeNodeVariables [ - ^ #(#indexes #readers #writers #defaults #storeds #implementses #dispids) -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> defaults [ - ^ defaults -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> defaults: anOrderedCollection [ - self setParents: self defaults to: nil. - defaults := anOrderedCollection. - self setParents: self defaults to: self -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> dispids [ - ^ dispids -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> dispids: anOrderedCollection [ - self setParents: self dispids to: nil. - dispids := anOrderedCollection. - self setParents: self dispids to: self -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> implementses [ - ^ implementses -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> implementses: anOrderedCollection [ - self setParents: self implementses to: nil. - implementses := anOrderedCollection. - self setParents: self implementses to: self -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> indexes [ - ^ indexes -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> indexes: anOrderedCollection [ - self setParents: self indexes to: nil. - indexes := anOrderedCollection. - self setParents: self indexes to: self -] - -{ #category : #'generated-initialize-release' } -DelphiPropertyHeaderNode >> initialize [ - super initialize. - indexes := OrderedCollection new: 2. - readers := OrderedCollection new: 2. - writers := OrderedCollection new: 2. - defaults := OrderedCollection new: 2. - storeds := OrderedCollection new: 2. - implementses := OrderedCollection new: 2. - dispids := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> modifier [ - ^ modifier -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> modifier: aDelphiPropertyModifierNode [ - self modifier notNil - ifTrue: [ self modifier parent: nil ]. - modifier := aDelphiPropertyModifierNode. - self modifier notNil - ifTrue: [ self modifier parent: self ] -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> name [ - ^ name -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> nodeVariables [ - ^ #(#arrayAccessors #type #modifier) -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> propertyToken [ - ^ propertyToken -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> propertyToken: aSmaCCToken [ - propertyToken := aSmaCCToken -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> readers [ - ^ readers -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> readers: anOrderedCollection [ - self setParents: self readers to: nil. - readers := anOrderedCollection. - self setParents: self readers to: self -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> storeds [ - ^ storeds -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> storeds: anOrderedCollection [ - self setParents: self storeds to: nil. - storeds := anOrderedCollection. - self setParents: self storeds to: self -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> tokenVariables [ - ^ #(#propertyToken #name #colon) -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> type [ - ^ type -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> type: aDelphiProgramNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aDelphiProgramNode. - self type notNil - ifTrue: [ self type parent: self ] -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> writers [ - ^ writers -] - -{ #category : #generated } -DelphiPropertyHeaderNode >> writers: anOrderedCollection [ - self setParents: self writers to: nil. - writers := anOrderedCollection. - self setParents: self writers to: self -] diff --git a/src/SmaCC_Delphi/DelphiPropertyImplementsNode.class.st b/src/SmaCC_Delphi/DelphiPropertyImplementsNode.class.st deleted file mode 100644 index 5614fc8e8..000000000 --- a/src/SmaCC_Delphi/DelphiPropertyImplementsNode.class.st +++ /dev/null @@ -1,67 +0,0 @@ -Class { - #name : #DelphiPropertyImplementsNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'implementsToken', - 'interfaces', - 'commas' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiPropertyImplementsNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPropertyImplements: self -] - -{ #category : #generated } -DelphiPropertyImplementsNode >> commas [ - ^ commas -] - -{ #category : #generated } -DelphiPropertyImplementsNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -DelphiPropertyImplementsNode >> compositeTokenVariables [ - ^ #(#interfaces) -] - -{ #category : #generated } -DelphiPropertyImplementsNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -DelphiPropertyImplementsNode >> implementsToken [ - ^ implementsToken -] - -{ #category : #generated } -DelphiPropertyImplementsNode >> implementsToken: aSmaCCToken [ - implementsToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -DelphiPropertyImplementsNode >> initialize [ - super initialize. - interfaces := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiPropertyImplementsNode >> interfaces [ - ^ interfaces -] - -{ #category : #generated } -DelphiPropertyImplementsNode >> interfaces: anOrderedCollection [ - interfaces := anOrderedCollection -] - -{ #category : #generated } -DelphiPropertyImplementsNode >> tokenVariables [ - ^ #(#implementsToken) -] diff --git a/src/SmaCC_Delphi/DelphiPropertyIndexNode.class.st b/src/SmaCC_Delphi/DelphiPropertyIndexNode.class.st deleted file mode 100644 index f3a14fc21..000000000 --- a/src/SmaCC_Delphi/DelphiPropertyIndexNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #DelphiPropertyIndexNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'indexToken', - 'expression' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiPropertyIndexNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPropertyIndex: self -] - -{ #category : #generated } -DelphiPropertyIndexNode >> expression [ - ^ expression -] - -{ #category : #generated } -DelphiPropertyIndexNode >> expression: aDelphiExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aDelphiExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -DelphiPropertyIndexNode >> indexToken [ - ^ indexToken -] - -{ #category : #generated } -DelphiPropertyIndexNode >> indexToken: aSmaCCToken [ - indexToken := aSmaCCToken -] - -{ #category : #generated } -DelphiPropertyIndexNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -DelphiPropertyIndexNode >> tokenVariables [ - ^ #(#indexToken) -] diff --git a/src/SmaCC_Delphi/DelphiPropertyModifierNode.class.st b/src/SmaCC_Delphi/DelphiPropertyModifierNode.class.st deleted file mode 100644 index 9ba91d85d..000000000 --- a/src/SmaCC_Delphi/DelphiPropertyModifierNode.class.st +++ /dev/null @@ -1,44 +0,0 @@ -Class { - #name : #DelphiPropertyModifierNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'defaultToken', - 'semicolon' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiPropertyModifierNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPropertyModifier: self -] - -{ #category : #generated } -DelphiPropertyModifierNode >> defaultToken [ - ^ defaultToken -] - -{ #category : #generated } -DelphiPropertyModifierNode >> defaultToken: aSmaCCToken [ - defaultToken := aSmaCCToken -] - -{ #category : #generated } -DelphiPropertyModifierNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -DelphiPropertyModifierNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -DelphiPropertyModifierNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -DelphiPropertyModifierNode >> tokenVariables [ - ^ #(#defaultToken) -] diff --git a/src/SmaCC_Delphi/DelphiPropertyReaderNode.class.st b/src/SmaCC_Delphi/DelphiPropertyReaderNode.class.st deleted file mode 100644 index efb2c2d1d..000000000 --- a/src/SmaCC_Delphi/DelphiPropertyReaderNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #DelphiPropertyReaderNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'readToken', - 'expression' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiPropertyReaderNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPropertyReader: self -] - -{ #category : #generated } -DelphiPropertyReaderNode >> expression [ - ^ expression -] - -{ #category : #generated } -DelphiPropertyReaderNode >> expression: aDelphiExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aDelphiExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -DelphiPropertyReaderNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -DelphiPropertyReaderNode >> readToken [ - ^ readToken -] - -{ #category : #generated } -DelphiPropertyReaderNode >> readToken: aSmaCCToken [ - readToken := aSmaCCToken -] - -{ #category : #generated } -DelphiPropertyReaderNode >> tokenVariables [ - ^ #(#readToken) -] diff --git a/src/SmaCC_Delphi/DelphiPropertyStoredNode.class.st b/src/SmaCC_Delphi/DelphiPropertyStoredNode.class.st deleted file mode 100644 index de7d361ee..000000000 --- a/src/SmaCC_Delphi/DelphiPropertyStoredNode.class.st +++ /dev/null @@ -1,39 +0,0 @@ -Class { - #name : #DelphiPropertyStoredNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'storedToken', - 'isStored' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiPropertyStoredNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPropertyStored: self -] - -{ #category : #generated } -DelphiPropertyStoredNode >> isStored [ - ^ isStored -] - -{ #category : #generated } -DelphiPropertyStoredNode >> isStored: aSmaCCToken [ - isStored := aSmaCCToken -] - -{ #category : #generated } -DelphiPropertyStoredNode >> storedToken [ - ^ storedToken -] - -{ #category : #generated } -DelphiPropertyStoredNode >> storedToken: aSmaCCToken [ - storedToken := aSmaCCToken -] - -{ #category : #generated } -DelphiPropertyStoredNode >> tokenVariables [ - ^ #(#storedToken #isStored) -] diff --git a/src/SmaCC_Delphi/DelphiPropertyWriterNode.class.st b/src/SmaCC_Delphi/DelphiPropertyWriterNode.class.st deleted file mode 100644 index 1444f5346..000000000 --- a/src/SmaCC_Delphi/DelphiPropertyWriterNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #DelphiPropertyWriterNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'writeToken', - 'expression' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiPropertyWriterNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPropertyWriter: self -] - -{ #category : #generated } -DelphiPropertyWriterNode >> expression [ - ^ expression -] - -{ #category : #generated } -DelphiPropertyWriterNode >> expression: aDelphiExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aDelphiExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -DelphiPropertyWriterNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -DelphiPropertyWriterNode >> tokenVariables [ - ^ #(#writeToken) -] - -{ #category : #generated } -DelphiPropertyWriterNode >> writeToken [ - ^ writeToken -] - -{ #category : #generated } -DelphiPropertyWriterNode >> writeToken: aSmaCCToken [ - writeToken := aSmaCCToken -] diff --git a/src/SmaCC_Delphi/DelphiProtectedClassSectionNode.class.st b/src/SmaCC_Delphi/DelphiProtectedClassSectionNode.class.st deleted file mode 100644 index 46cd88bc9..000000000 --- a/src/SmaCC_Delphi/DelphiProtectedClassSectionNode.class.st +++ /dev/null @@ -1,39 +0,0 @@ -Class { - #name : #DelphiProtectedClassSectionNode, - #superclass : #DelphiClassSectionNode, - #instVars : [ - 'strictToken', - 'protectedToken' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiProtectedClassSectionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitProtectedClassSection: self -] - -{ #category : #generated } -DelphiProtectedClassSectionNode >> protectedToken [ - ^ protectedToken -] - -{ #category : #generated } -DelphiProtectedClassSectionNode >> protectedToken: aSmaCCToken [ - protectedToken := aSmaCCToken -] - -{ #category : #generated } -DelphiProtectedClassSectionNode >> strictToken [ - ^ strictToken -] - -{ #category : #generated } -DelphiProtectedClassSectionNode >> strictToken: aSmaCCToken [ - strictToken := aSmaCCToken -] - -{ #category : #generated } -DelphiProtectedClassSectionNode >> tokenVariables [ - ^ #(#strictToken #protectedToken) -] diff --git a/src/SmaCC_Delphi/DelphiPublicClassSectionNode.class.st b/src/SmaCC_Delphi/DelphiPublicClassSectionNode.class.st deleted file mode 100644 index 2f7da9fe0..000000000 --- a/src/SmaCC_Delphi/DelphiPublicClassSectionNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #DelphiPublicClassSectionNode, - #superclass : #DelphiClassSectionNode, - #instVars : [ - 'publicToken' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiPublicClassSectionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPublicClassSection: self -] - -{ #category : #generated } -DelphiPublicClassSectionNode >> publicToken [ - ^ publicToken -] - -{ #category : #generated } -DelphiPublicClassSectionNode >> publicToken: aSmaCCToken [ - publicToken := aSmaCCToken -] - -{ #category : #generated } -DelphiPublicClassSectionNode >> tokenVariables [ - ^ #(#publicToken) -] diff --git a/src/SmaCC_Delphi/DelphiPublishedClassSectionNode.class.st b/src/SmaCC_Delphi/DelphiPublishedClassSectionNode.class.st deleted file mode 100644 index fbd3ada8c..000000000 --- a/src/SmaCC_Delphi/DelphiPublishedClassSectionNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #DelphiPublishedClassSectionNode, - #superclass : #DelphiClassSectionNode, - #instVars : [ - 'publishedToken' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiPublishedClassSectionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPublishedClassSection: self -] - -{ #category : #generated } -DelphiPublishedClassSectionNode >> publishedToken [ - ^ publishedToken -] - -{ #category : #generated } -DelphiPublishedClassSectionNode >> publishedToken: aSmaCCToken [ - publishedToken := aSmaCCToken -] - -{ #category : #generated } -DelphiPublishedClassSectionNode >> tokenVariables [ - ^ #(#publishedToken) -] diff --git a/src/SmaCC_Delphi/DelphiQualifiedNameNode.class.st b/src/SmaCC_Delphi/DelphiQualifiedNameNode.class.st deleted file mode 100644 index 4e161997c..000000000 --- a/src/SmaCC_Delphi/DelphiQualifiedNameNode.class.st +++ /dev/null @@ -1,111 +0,0 @@ -Class { - #name : #DelphiQualifiedNameNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'name', - 'left', - 'genericTypeArguments', - 'commas', - 'right', - 'namespace', - 'period' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiQualifiedNameNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitQualifiedName: self -] - -{ #category : #generated } -DelphiQualifiedNameNode >> commas [ - ^ commas -] - -{ #category : #generated } -DelphiQualifiedNameNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -DelphiQualifiedNameNode >> compositeTokenVariables [ - ^ #(#genericTypeArguments) -] - -{ #category : #generated } -DelphiQualifiedNameNode >> genericTypeArguments [ - ^ genericTypeArguments -] - -{ #category : #generated } -DelphiQualifiedNameNode >> genericTypeArguments: anOrderedCollection [ - genericTypeArguments := anOrderedCollection -] - -{ #category : #generated } -DelphiQualifiedNameNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #'generated-initialize-release' } -DelphiQualifiedNameNode >> initialize [ - super initialize. - genericTypeArguments := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiQualifiedNameNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiQualifiedNameNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -DelphiQualifiedNameNode >> name [ - ^ name -] - -{ #category : #generated } -DelphiQualifiedNameNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -DelphiQualifiedNameNode >> namespace [ - ^ namespace -] - -{ #category : #generated } -DelphiQualifiedNameNode >> namespace: aSmaCCToken [ - namespace := aSmaCCToken -] - -{ #category : #generated } -DelphiQualifiedNameNode >> period [ - ^ period -] - -{ #category : #generated } -DelphiQualifiedNameNode >> period: aSmaCCToken [ - period := aSmaCCToken -] - -{ #category : #generated } -DelphiQualifiedNameNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiQualifiedNameNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiQualifiedNameNode >> tokenVariables [ - ^ #(#name #left #right #namespace #period) -] diff --git a/src/SmaCC_Delphi/DelphiRaiseStatementNode.class.st b/src/SmaCC_Delphi/DelphiRaiseStatementNode.class.st deleted file mode 100644 index 9503b9898..000000000 --- a/src/SmaCC_Delphi/DelphiRaiseStatementNode.class.st +++ /dev/null @@ -1,74 +0,0 @@ -Class { - #name : #DelphiRaiseStatementNode, - #superclass : #DelphiStatementNode, - #instVars : [ - 'raiseToken', - 'expression', - 'atToken', - 'location' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiRaiseStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitRaiseStatement: self -] - -{ #category : #generated } -DelphiRaiseStatementNode >> atToken [ - ^ atToken -] - -{ #category : #generated } -DelphiRaiseStatementNode >> atToken: aSmaCCToken [ - atToken := aSmaCCToken -] - -{ #category : #generated } -DelphiRaiseStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -DelphiRaiseStatementNode >> expression: aDelphiExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aDelphiExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -DelphiRaiseStatementNode >> location [ - ^ location -] - -{ #category : #generated } -DelphiRaiseStatementNode >> location: aDelphiQualifiedNameNode [ - self location notNil - ifTrue: [ self location parent: nil ]. - location := aDelphiQualifiedNameNode. - self location notNil - ifTrue: [ self location parent: self ] -] - -{ #category : #generated } -DelphiRaiseStatementNode >> nodeVariables [ - ^ #(#expression #location) -] - -{ #category : #generated } -DelphiRaiseStatementNode >> raiseToken [ - ^ raiseToken -] - -{ #category : #generated } -DelphiRaiseStatementNode >> raiseToken: aSmaCCToken [ - raiseToken := aSmaCCToken -] - -{ #category : #generated } -DelphiRaiseStatementNode >> tokenVariables [ - ^ #(#raiseToken #atToken) -] diff --git a/src/SmaCC_Delphi/DelphiRangeCaseLabelNode.class.st b/src/SmaCC_Delphi/DelphiRangeCaseLabelNode.class.st deleted file mode 100644 index 6ba4f424f..000000000 --- a/src/SmaCC_Delphi/DelphiRangeCaseLabelNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #DelphiRangeCaseLabelNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'fromValue', - 'dots', - 'toValue' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiRangeCaseLabelNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitRangeCaseLabel: self -] - -{ #category : #generated } -DelphiRangeCaseLabelNode >> dots [ - ^ dots -] - -{ #category : #generated } -DelphiRangeCaseLabelNode >> dots: aSmaCCToken [ - dots := aSmaCCToken -] - -{ #category : #generated } -DelphiRangeCaseLabelNode >> fromValue [ - ^ fromValue -] - -{ #category : #generated } -DelphiRangeCaseLabelNode >> fromValue: aDelphiExpressionNode [ - self fromValue notNil - ifTrue: [ self fromValue parent: nil ]. - fromValue := aDelphiExpressionNode. - self fromValue notNil - ifTrue: [ self fromValue parent: self ] -] - -{ #category : #generated } -DelphiRangeCaseLabelNode >> nodeVariables [ - ^ #(#fromValue #toValue) -] - -{ #category : #generated } -DelphiRangeCaseLabelNode >> toValue [ - ^ toValue -] - -{ #category : #generated } -DelphiRangeCaseLabelNode >> toValue: aDelphiExpressionNode [ - self toValue notNil - ifTrue: [ self toValue parent: nil ]. - toValue := aDelphiExpressionNode. - self toValue notNil - ifTrue: [ self toValue parent: self ] -] - -{ #category : #generated } -DelphiRangeCaseLabelNode >> tokenVariables [ - ^ #(#dots) -] diff --git a/src/SmaCC_Delphi/DelphiRangeSetTypeNode.class.st b/src/SmaCC_Delphi/DelphiRangeSetTypeNode.class.st deleted file mode 100644 index 0d93ee520..000000000 --- a/src/SmaCC_Delphi/DelphiRangeSetTypeNode.class.st +++ /dev/null @@ -1,32 +0,0 @@ -Class { - #name : #DelphiRangeSetTypeNode, - #superclass : #DelphiSetTypeNode, - #instVars : [ - 'setValue' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiRangeSetTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitRangeSetType: self -] - -{ #category : #generated } -DelphiRangeSetTypeNode >> nodeVariables [ - ^ #(#setValue) -] - -{ #category : #generated } -DelphiRangeSetTypeNode >> setValue [ - ^ setValue -] - -{ #category : #generated } -DelphiRangeSetTypeNode >> setValue: aDelphiRangeTypeNode [ - self setValue notNil - ifTrue: [ self setValue parent: nil ]. - setValue := aDelphiRangeTypeNode. - self setValue notNil - ifTrue: [ self setValue parent: self ] -] diff --git a/src/SmaCC_Delphi/DelphiRangeSetValueNode.class.st b/src/SmaCC_Delphi/DelphiRangeSetValueNode.class.st deleted file mode 100644 index 64ea0f655..000000000 --- a/src/SmaCC_Delphi/DelphiRangeSetValueNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #DelphiRangeSetValueNode, - #superclass : #DelphiSetValueNode, - #instVars : [ - 'fromValue', - 'dots', - 'toValue' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiRangeSetValueNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitRangeSetValue: self -] - -{ #category : #generated } -DelphiRangeSetValueNode >> dots [ - ^ dots -] - -{ #category : #generated } -DelphiRangeSetValueNode >> dots: aSmaCCToken [ - dots := aSmaCCToken -] - -{ #category : #generated } -DelphiRangeSetValueNode >> fromValue [ - ^ fromValue -] - -{ #category : #generated } -DelphiRangeSetValueNode >> fromValue: aDelphiExpressionNode [ - self fromValue notNil - ifTrue: [ self fromValue parent: nil ]. - fromValue := aDelphiExpressionNode. - self fromValue notNil - ifTrue: [ self fromValue parent: self ] -] - -{ #category : #generated } -DelphiRangeSetValueNode >> nodeVariables [ - ^ #(#fromValue #toValue) -] - -{ #category : #generated } -DelphiRangeSetValueNode >> toValue [ - ^ toValue -] - -{ #category : #generated } -DelphiRangeSetValueNode >> toValue: aDelphiExpressionNode [ - self toValue notNil - ifTrue: [ self toValue parent: nil ]. - toValue := aDelphiExpressionNode. - self toValue notNil - ifTrue: [ self toValue parent: self ] -] - -{ #category : #generated } -DelphiRangeSetValueNode >> tokenVariables [ - ^ #(#dots) -] diff --git a/src/SmaCC_Delphi/DelphiRangeTypeNode.class.st b/src/SmaCC_Delphi/DelphiRangeTypeNode.class.st deleted file mode 100644 index 4dd5bf16a..000000000 --- a/src/SmaCC_Delphi/DelphiRangeTypeNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #DelphiRangeTypeNode, - #superclass : #DelphiTypeNode, - #instVars : [ - 'startValue', - 'dots', - 'endValue' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiRangeTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitRangeType: self -] - -{ #category : #generated } -DelphiRangeTypeNode >> dots [ - ^ dots -] - -{ #category : #generated } -DelphiRangeTypeNode >> dots: aSmaCCToken [ - dots := aSmaCCToken -] - -{ #category : #generated } -DelphiRangeTypeNode >> endValue [ - ^ endValue -] - -{ #category : #generated } -DelphiRangeTypeNode >> endValue: aDelphiExpressionNode [ - self endValue notNil - ifTrue: [ self endValue parent: nil ]. - endValue := aDelphiExpressionNode. - self endValue notNil - ifTrue: [ self endValue parent: self ] -] - -{ #category : #generated } -DelphiRangeTypeNode >> nodeVariables [ - ^ #(#startValue #endValue) -] - -{ #category : #generated } -DelphiRangeTypeNode >> startValue [ - ^ startValue -] - -{ #category : #generated } -DelphiRangeTypeNode >> startValue: aDelphiExpressionNode [ - self startValue notNil - ifTrue: [ self startValue parent: nil ]. - startValue := aDelphiExpressionNode. - self startValue notNil - ifTrue: [ self startValue parent: self ] -] - -{ #category : #generated } -DelphiRangeTypeNode >> tokenVariables [ - ^ #(#dots) -] diff --git a/src/SmaCC_Delphi/DelphiRecordExpressionNode.class.st b/src/SmaCC_Delphi/DelphiRecordExpressionNode.class.st deleted file mode 100644 index a6b32e767..000000000 --- a/src/SmaCC_Delphi/DelphiRecordExpressionNode.class.st +++ /dev/null @@ -1,80 +0,0 @@ -Class { - #name : #DelphiRecordExpressionNode, - #superclass : #DelphiExpressionNode, - #instVars : [ - 'left', - 'fields', - 'semicolons', - 'right' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiRecordExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitRecordExpression: self -] - -{ #category : #generated } -DelphiRecordExpressionNode >> compositeNodeVariables [ - ^ #(#fields) -] - -{ #category : #generated } -DelphiRecordExpressionNode >> fields [ - ^ fields -] - -{ #category : #generated } -DelphiRecordExpressionNode >> fields: anOrderedCollection [ - self setParents: self fields to: nil. - fields := anOrderedCollection. - self setParents: self fields to: self -] - -{ #category : #generated } -DelphiRecordExpressionNode >> ignoredCompositeTokenVariables [ - ^ #(#semicolons #leftParens #rightParens) -] - -{ #category : #'generated-initialize-release' } -DelphiRecordExpressionNode >> initialize [ - super initialize. - fields := OrderedCollection new: 2. - semicolons := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiRecordExpressionNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiRecordExpressionNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -DelphiRecordExpressionNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiRecordExpressionNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiRecordExpressionNode >> semicolons [ - ^ semicolons -] - -{ #category : #generated } -DelphiRecordExpressionNode >> semicolons: anOrderedCollection [ - semicolons := anOrderedCollection -] - -{ #category : #generated } -DelphiRecordExpressionNode >> tokenVariables [ - ^ #(#left #right) -] diff --git a/src/SmaCC_Delphi/DelphiRecordTypeNode.class.st b/src/SmaCC_Delphi/DelphiRecordTypeNode.class.st deleted file mode 100644 index 4a2084823..000000000 --- a/src/SmaCC_Delphi/DelphiRecordTypeNode.class.st +++ /dev/null @@ -1,169 +0,0 @@ -Class { - #name : #DelphiRecordTypeNode, - #superclass : #DelphiTypeNode, - #instVars : [ - 'packedToken', - 'recordToken', - 'sections', - 'caseToken', - 'value', - 'colon', - 'type', - 'ofToken', - 'variantTypes', - 'semicolons', - 'endToken' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiRecordTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitRecordType: self -] - -{ #category : #generated } -DelphiRecordTypeNode >> caseToken [ - ^ caseToken -] - -{ #category : #generated } -DelphiRecordTypeNode >> caseToken: aSmaCCToken [ - caseToken := aSmaCCToken -] - -{ #category : #generated } -DelphiRecordTypeNode >> colon [ - ^ colon -] - -{ #category : #generated } -DelphiRecordTypeNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -DelphiRecordTypeNode >> compositeNodeVariables [ - ^ #(#sections #variantTypes) -] - -{ #category : #generated } -DelphiRecordTypeNode >> endToken [ - ^ endToken -] - -{ #category : #generated } -DelphiRecordTypeNode >> endToken: aSmaCCToken [ - endToken := aSmaCCToken -] - -{ #category : #generated } -DelphiRecordTypeNode >> ignoredCompositeTokenVariables [ - ^ #(#semicolons) -] - -{ #category : #'generated-initialize-release' } -DelphiRecordTypeNode >> initialize [ - super initialize. - sections := OrderedCollection new: 2. - variantTypes := OrderedCollection new: 2. - semicolons := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiRecordTypeNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -DelphiRecordTypeNode >> ofToken [ - ^ ofToken -] - -{ #category : #generated } -DelphiRecordTypeNode >> ofToken: aSmaCCToken [ - ofToken := aSmaCCToken -] - -{ #category : #generated } -DelphiRecordTypeNode >> packedToken [ - ^ packedToken -] - -{ #category : #generated } -DelphiRecordTypeNode >> packedToken: aSmaCCToken [ - packedToken := aSmaCCToken -] - -{ #category : #generated } -DelphiRecordTypeNode >> recordToken [ - ^ recordToken -] - -{ #category : #generated } -DelphiRecordTypeNode >> recordToken: aSmaCCToken [ - recordToken := aSmaCCToken -] - -{ #category : #generated } -DelphiRecordTypeNode >> sections [ - ^ sections -] - -{ #category : #generated } -DelphiRecordTypeNode >> sections: anOrderedCollection [ - self setParents: self sections to: nil. - sections := anOrderedCollection. - self setParents: self sections to: self -] - -{ #category : #generated } -DelphiRecordTypeNode >> semicolons [ - ^ semicolons -] - -{ #category : #generated } -DelphiRecordTypeNode >> semicolons: anOrderedCollection [ - semicolons := anOrderedCollection -] - -{ #category : #generated } -DelphiRecordTypeNode >> tokenVariables [ - ^ #(#packedToken #recordToken #caseToken #value #colon #ofToken #endToken) -] - -{ #category : #generated } -DelphiRecordTypeNode >> type [ - ^ type -] - -{ #category : #generated } -DelphiRecordTypeNode >> type: aDelphiProgramNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aDelphiProgramNode. - self type notNil - ifTrue: [ self type parent: self ] -] - -{ #category : #generated } -DelphiRecordTypeNode >> value [ - ^ value -] - -{ #category : #generated } -DelphiRecordTypeNode >> value: aSmaCCToken [ - value := aSmaCCToken -] - -{ #category : #generated } -DelphiRecordTypeNode >> variantTypes [ - ^ variantTypes -] - -{ #category : #generated } -DelphiRecordTypeNode >> variantTypes: anOrderedCollection [ - self setParents: self variantTypes to: nil. - variantTypes := anOrderedCollection. - self setParents: self variantTypes to: self -] diff --git a/src/SmaCC_Delphi/DelphiRepeatStatementNode.class.st b/src/SmaCC_Delphi/DelphiRepeatStatementNode.class.st deleted file mode 100644 index 19643cb4d..000000000 --- a/src/SmaCC_Delphi/DelphiRepeatStatementNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #DelphiRepeatStatementNode, - #superclass : #DelphiMultiStatementNode, - #instVars : [ - 'repeatToken', - 'untilToken', - 'expression' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiRepeatStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitRepeatStatement: self -] - -{ #category : #generated } -DelphiRepeatStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -DelphiRepeatStatementNode >> expression: aDelphiExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aDelphiExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -DelphiRepeatStatementNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -DelphiRepeatStatementNode >> repeatToken [ - ^ repeatToken -] - -{ #category : #generated } -DelphiRepeatStatementNode >> repeatToken: aSmaCCToken [ - repeatToken := aSmaCCToken -] - -{ #category : #generated } -DelphiRepeatStatementNode >> tokenVariables [ - ^ #(#repeatToken #untilToken) -] - -{ #category : #generated } -DelphiRepeatStatementNode >> untilToken [ - ^ untilToken -] - -{ #category : #generated } -DelphiRepeatStatementNode >> untilToken: aSmaCCToken [ - untilToken := aSmaCCToken -] diff --git a/src/SmaCC_Delphi/DelphiResourceStringDefinitionNode.class.st b/src/SmaCC_Delphi/DelphiResourceStringDefinitionNode.class.st deleted file mode 100644 index 40fff4c2d..000000000 --- a/src/SmaCC_Delphi/DelphiResourceStringDefinitionNode.class.st +++ /dev/null @@ -1,86 +0,0 @@ -Class { - #name : #DelphiResourceStringDefinitionNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'name', - 'equalToken', - 'value', - 'deprecatedToken', - 'semicolon' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiResourceStringDefinitionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitResourceStringDefinition: self -] - -{ #category : #generated } -DelphiResourceStringDefinitionNode >> deprecatedToken [ - ^ deprecatedToken -] - -{ #category : #generated } -DelphiResourceStringDefinitionNode >> deprecatedToken: aSmaCCToken [ - deprecatedToken := aSmaCCToken -] - -{ #category : #generated } -DelphiResourceStringDefinitionNode >> equalToken [ - ^ equalToken -] - -{ #category : #generated } -DelphiResourceStringDefinitionNode >> equalToken: aSmaCCToken [ - equalToken := aSmaCCToken -] - -{ #category : #generated } -DelphiResourceStringDefinitionNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -DelphiResourceStringDefinitionNode >> name [ - ^ name -] - -{ #category : #generated } -DelphiResourceStringDefinitionNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -DelphiResourceStringDefinitionNode >> nodeVariables [ - ^ #(#value) -] - -{ #category : #generated } -DelphiResourceStringDefinitionNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -DelphiResourceStringDefinitionNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -DelphiResourceStringDefinitionNode >> tokenVariables [ - ^ #(#name #equalToken #deprecatedToken) -] - -{ #category : #generated } -DelphiResourceStringDefinitionNode >> value [ - ^ value -] - -{ #category : #generated } -DelphiResourceStringDefinitionNode >> value: aDelphiExpressionNode [ - self value notNil - ifTrue: [ self value parent: nil ]. - value := aDelphiExpressionNode. - self value notNil - ifTrue: [ self value parent: self ] -] diff --git a/src/SmaCC_Delphi/DelphiResourceStringListNode.class.st b/src/SmaCC_Delphi/DelphiResourceStringListNode.class.st deleted file mode 100644 index cf020b568..000000000 --- a/src/SmaCC_Delphi/DelphiResourceStringListNode.class.st +++ /dev/null @@ -1,52 +0,0 @@ -Class { - #name : #DelphiResourceStringListNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'resourceStringToken', - 'definitions' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiResourceStringListNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitResourceStringList: self -] - -{ #category : #generated } -DelphiResourceStringListNode >> compositeNodeVariables [ - ^ #(#definitions) -] - -{ #category : #generated } -DelphiResourceStringListNode >> definitions [ - ^ definitions -] - -{ #category : #generated } -DelphiResourceStringListNode >> definitions: anOrderedCollection [ - self setParents: self definitions to: nil. - definitions := anOrderedCollection. - self setParents: self definitions to: self -] - -{ #category : #'generated-initialize-release' } -DelphiResourceStringListNode >> initialize [ - super initialize. - definitions := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiResourceStringListNode >> resourceStringToken [ - ^ resourceStringToken -] - -{ #category : #generated } -DelphiResourceStringListNode >> resourceStringToken: aSmaCCToken [ - resourceStringToken := aSmaCCToken -] - -{ #category : #generated } -DelphiResourceStringListNode >> tokenVariables [ - ^ #(#resourceStringToken) -] diff --git a/src/SmaCC_Delphi/DelphiScanner.class.st b/src/SmaCC_Delphi/DelphiScanner.class.st deleted file mode 100644 index 507f0d68c..000000000 --- a/src/SmaCC_Delphi/DelphiScanner.class.st +++ /dev/null @@ -1,778 +0,0 @@ -Class { - #name : #DelphiScanner, - #superclass : #SmaCCScanner, - #instVars : [ - 'ifDefCount', - 'definedItems', - 'undefinedItems', - 'ifDefs', - 'optComments', - 'optDepths', - 'parseOpt' - ], - #classInstVars : [ - 'definedItems', - 'undefinedItems' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #accessing } -DelphiScanner class >> definedItems [ - definedItems isNil - ifTrue: [ self - definedItems: - #('MSWINDOWS' 'PC_MAPPED_EXCEPTIONS' 'PIC' 'VERSION3' 'CHAR_TYPES_INITIALIZED' 'CASE_MAP_INITIALIZED' 'USEGREEDYPASCAL' 'ADSDELPHI2006' 'CONDITIONALEXPRESSIONS' 'USEJCLDEBUG' 'WIN32' 'VER36') ]. - ^ definedItems -] - -{ #category : #accessing } -DelphiScanner class >> definedItems: aCollection [ - definedItems := Set withAll: (aCollection collect: [ :each | each asUppercase ]) -] - -{ #category : #'generated-initialization' } -DelphiScanner class >> initializeKeywordMap [ - keywordMap := Dictionary new. - #(#(135 'ABSOLUTE' 18) #(135 'ABSTRACT' 19) #(135 'AND' 20) #(135 'ARRAY' 21) #(135 'AS' 22) #(135 'ASM' 23) #(135 'ASSEMBLER' 24) #(135 'AT' 130) #(135 'BEGIN' 25) #(135 'CASE' 26) #(135 'CDECL' 27) #(135 'CLASS' 28) #(135 'CONST' 29) #(135 'CONSTRUCTOR' 30) #(135 'DEFAULT' 31) #(135 'DEPRECATED' 32) #(135 'DESTRUCTOR' 33) #(135 'DISPID' 34) #(135 'DISPINTERFACE' 35) #(135 'DIV' 36) #(135 'DO' 37) #(135 'DOWNTO' 38) #(135 'DYNAMIC' 39) #(135 'ELSE' 40) #(135 'END' 41) #(135 'EXCEPT' 42) #(135 'EXPORT' 43) #(135 'EXPORTS' 44) #(135 'EXTERNAL' 45) #(135 'FAR' 46) #(135 'FILE' 47) #(135 'FINAL' 48) #(135 'FINALIZATION' 49) #(135 'FINALLY' 50) #(135 'FOR' 51) #(135 'FORWARD' 52) #(135 'FUNCTION' 53) #(135 'GOTO' 54) #(135 'HELPER' 55) #(135 'IF' 56) #(135 'IMPLEMENTATION' 57) #(135 'IMPLEMENTS' 58) #(135 'IN' 59) #(135 'INDEX' 60) #(135 'INHERITED' 61) #(135 'INITIALIZATION' 62) #(135 'INLINE' 63) #(135 'INTERFACE' 64) #(135 'IS' 65) #(135 'LABEL' 66) #(135 'LIBRARY' 67) #(135 'LOCAL' 68) #(135 'MEM' 69) #(135 'MEMW' 70) #(135 'MESSAGE' 71) #(135 'MOD' 72) #(135 'NAME' 73) #(135 'NEAR' 74) #(135 'NODEFAULT' 75) #(135 'NOT' 76) #(135 'OBJECT' 77) #(135 'OF' 78) #(135 'ON' 79) #(135 'OPERATOR' 80) #(135 'OR' 81) #(135 'OUT' 82) #(135 'OVERLOAD' 83) #(135 'OVERRIDE' 84) #(135 'PACKED' 85) #(135 'PASCAL' 86) #(135 'PLATFORM' 87) #(135 'PRIVATE' 88) #(135 'PROCEDURE' 89) #(135 'PROGRAM' 90) #(135 'PROPERTY' 91) #(135 'PROTECTED' 92) #(135 'PUBLIC' 93) #(135 'PUBLISHED' 94) #(135 'RAISE' 95) #(135 'READ' 96) #(135 'READONLY' 97) #(135 'RECORD' 98) #(135 'REGISTER' 99) #(135 'REINTRODUCE' 100) #(135 'REPEAT' 101) #(135 'RESOURCESTRING' 102) #(135 'SAFECALL' 103) #(135 'SEALED' 104) #(135 'SET' 105) #(135 'SHL' 106) #(135 'SHR' 107) #(135 'STATIC' 108) #(135 'STDCALL' 109) #(135 'STORED' 110) #(135 'STRICT' 111) #(135 'THEN' 112) #(135 'THREADVAR' 113) #(135 'TO' 114) #(135 'TRY' 115) #(135 'TYPE' 116) #(135 'UNIT' 117) #(135 'UNSAFE' 118) #(135 'UNTIL' 119) #(135 'USES' 120) #(135 'VAR' 121) #(135 'VIRTUAL' 122) #(135 'WHILE' 123) #(135 'WITH' 124) #(135 'WRITE' 125) #(135 'WRITEONLY' 126) #(135 'XOR' 127) #(136 'ABSOLUTE' 18) #(136 'ABSTRACT' 19) #(136 'AND' 20) #(136 'ARRAY' 21) #(136 'AS' 22) #(136 'ASM' 23) #(136 'ASSEMBLER' 24) #(136 'AT' 130) #(136 'BEGIN' 25) #(136 'CASE' 26) #(136 'CDECL' 27) #(136 'CLASS' 28) #(136 'CONST' 29) #(136 'CONSTRUCTOR' 30) #(136 'DEFAULT' 31) #(136 'DEPRECATED' 32) #(136 'DESTRUCTOR' 33) #(136 'DISPID' 34) #(136 'DISPINTERFACE' 35) #(136 'DIV' 36) #(136 'DO' 37) #(136 'DOWNTO' 38) #(136 'DYNAMIC' 39) #(136 'ELSE' 40) #(136 'END' 41) #(136 'EXCEPT' 42) #(136 'EXPORT' 43) #(136 'EXPORTS' 44) #(136 'EXTERNAL' 45) #(136 'FAR' 46) #(136 'FILE' 47) #(136 'FINAL' 48) #(136 'FINALIZATION' 49) #(136 'FINALLY' 50) #(136 'FOR' 51) #(136 'FORWARD' 52) #(136 'FUNCTION' 53) #(136 'GOTO' 54) #(136 'HELPER' 55) #(136 'IF' 56) #(136 'IMPLEMENTATION' 57) #(136 'IMPLEMENTS' 58) #(136 'IN' 59) #(136 'INDEX' 60) #(136 'INHERITED' 61) #(136 'INITIALIZATION' 62) #(136 'INLINE' 63) #(136 'INTERFACE' 64) #(136 'IS' 65) #(136 'LABEL' 66) #(136 'LIBRARY' 67) #(136 'LOCAL' 68) #(136 'MEM' 69) #(136 'MEMW' 70) #(136 'MESSAGE' 71) #(136 'MOD' 72) #(136 'NAME' 73) #(136 'NEAR' 74) #(136 'NODEFAULT' 75) #(136 'NOT' 76) #(136 'OBJECT' 77) #(136 'OF' 78) #(136 'ON' 79) #(136 'OPERATOR' 80) #(136 'OR' 81) #(136 'OUT' 82) #(136 'OVERLOAD' 83) #(136 'OVERRIDE' 84) #(136 'PACKED' 85) #(136 'PASCAL' 86) #(136 'PLATFORM' 87) #(136 'PRIVATE' 88) #(136 'PROCEDURE' 89) #(136 'PROGRAM' 90) #(136 'PROPERTY' 91) #(136 'PROTECTED' 92) #(136 'PUBLIC' 93) #(136 'PUBLISHED' 94) #(136 'RAISE' 95) #(136 'READ' 96) #(136 'READONLY' 97) #(136 'RECORD' 98) #(136 'REGISTER' 99) #(136 'REINTRODUCE' 100) #(136 'REPEAT' 101) #(136 'RESOURCESTRING' 102) #(136 'SAFECALL' 103) #(136 'SEALED' 104) #(136 'SET' 105) #(136 'SHL' 106) #(136 'SHR' 107) #(136 'STATIC' 108) #(136 'STDCALL' 109) #(136 'STORED' 110) #(136 'STRICT' 111) #(136 'THEN' 112) #(136 'THREADVAR' 113) #(136 'TO' 114) #(136 'TRY' 115) #(136 'TYPE' 116) #(136 'UNIT' 117) #(136 'UNSAFE' 118) #(136 'UNTIL' 119) #(136 'USES' 120) #(136 'VAR' 121) #(136 'VIRTUAL' 122) #(136 'WHILE' 123) #(136 'WITH' 124) #(136 'WRITE' 125) #(136 'WRITEONLY' 126) #(136 'XOR' 127)) - do: [ :each | - (keywordMap at: each first ifAbsentPut: [ Dictionary new ]) - at: (each at: 2) - put: each last ]. - ^ keywordMap -] - -{ #category : #accessing } -DelphiScanner class >> undefinedItems [ - undefinedItems isNil - ifTrue: [ self - undefinedItems: - #('LINUX' 'DECLARE_GPL' 'DEBUG' 'ELF' 'STATIC_UNWIND' 'UNIX' 'KYLIX' 'HOOK_DLL_EXCEPTIONS' 'COMPILER_7_UP' 'WPDF_SOURCE' 'USECOMPATIBLEDC' 'ADSDELPHI4_OR_NEWER' 'USEGREEDYASM' 'CLR' 'BCB' 'DELPHI3' 'DELPHI4' 'DELPHI5' 'DELPHI6' 'DELPHI7' 'DEMO' 'LISTSERVER' 'METAFILE' 'PRNDIB_CKBOOL' 'PRNDIB_CKOVERFLOW' 'VSNET' 'TMSDOTNET' 'VER80' 'DOTNET' 'GRAPHICONTROL' 'CLX' 'TMSCLX' 'UMB') ]. - ^ undefinedItems -] - -{ #category : #accessing } -DelphiScanner class >> undefinedItems: aCollection [ - undefinedItems := Set withAll: (aCollection collect: [ :each | each asUppercase ]) -] - -{ #category : #generated } -DelphiScanner >> atId [ - ^ 130 -] - -{ #category : #private } -DelphiScanner >> comment [ - | comment | - comment := outputStream contents. - (optDepths includes: ifDefCount) - ifTrue: - [ ('{$ELSE*' match: comment) - ifTrue: - [ optComments add: (Array with: start + 1 with: matchEnd). - ^ super comment ]. - (('{$ENDIF*' match: comment) or: [ '{$IFEND*' match: comment ]) - ifTrue: - [ optComments add: (Array with: start + 1 with: matchEnd). - optDepths remove: ifDefCount. - ^ super comment ] ]. - ifDefCount > 0 - ifTrue: - [ ((('{$ELSE*' match: comment) and: [ ifDefCount = 1 ]) - or: [ ('{$ENDIF*' match: comment) or: [ '{$IFEND*' match: comment ] ]) - ifTrue: - [ ifDefCount := ifDefCount - 1. - ifDefCount = 0 - ifTrue: [ ifDefs last at: 2 put: start + comment size ] ] - ifFalse: [ ('{$IF*' match: comment) - ifTrue: [ ifDefCount := ifDefCount + 1 ] ] ] - ifFalse: - [ ('{$IF*' match: comment) - ifTrue: [ ^ self processIfMacro: comment ]. - ('{$ELSE*' match: comment) - ifTrue: [ ^ self skipUntilEndDef ] ]. - ^ super comment -] - -{ #category : #generated } -DelphiScanner >> constantIdentifierId [ - ^ 136 -] - -{ #category : #generated } -DelphiScanner >> controlCharacterId [ - ^ 367 -] - -{ #category : #accessing } -DelphiScanner >> definedItems [ - ^ definedItems -] - -{ #category : #accessing } -DelphiScanner >> definedItems: aCollection [ - definedItems := aCollection -] - -{ #category : #generated } -DelphiScanner >> emptySymbolTokenId [ - ^ 368 -] - -{ #category : #generated } -DelphiScanner >> errorTokenId [ - ^ 369 -] - -{ #category : #generated } -DelphiScanner >> identifierId [ - ^ 135 -] - -{ #category : #'initialize-release' } -DelphiScanner >> ifDefs [ - ^ ifDefs -] - -{ #category : #'initialize-release' } -DelphiScanner >> initialize [ - super initialize. - ifDefCount := 0. - definedItems := self class definedItems. - undefinedItems := self class undefinedItems. - comments := OrderedCollection new. - optComments := OrderedCollection new. - optDepths := OrderedCollection new. - ifDefs := OrderedCollection new -] - -{ #category : #private } -DelphiScanner >> integerWithRange [ - stream position: stream position - 2. - matchEnd := matchEnd - 2. - matchActions := Array with: self numberId. - ^ self - createTokenFor: - (outputStream - position: outputStream position - 2; - contents) -] - -{ #category : #generated } -DelphiScanner >> keywordFor: aString [ - ^ aString asUppercase -] - -{ #category : #generated } -DelphiScanner >> minusId [ - ^ 131 -] - -{ #category : #generated } -DelphiScanner >> numberId [ - ^ 137 -] - -{ #category : #accessing } -DelphiScanner >> optComments [ - ^ optComments -] - -{ #category : #accessing } -DelphiScanner >> optComments: anObject [ - optComments := anObject -] - -{ #category : #accessing } -DelphiScanner >> parseOpt [ - ^ parseOpt ifNil: [ false ] -] - -{ #category : #accessing } -DelphiScanner >> parseOpt: aBoolean [ - parseOpt := aBoolean -] - -{ #category : #generated } -DelphiScanner >> plusId [ - ^ 132 -] - -{ #category : #private } -DelphiScanner >> processIfMacro: comment [ - | command name index bad | - index := (1 to: comment size) - detect: [ :each | (comment at: each) isSeparator ] - ifNone: [ comment size ]. - command := comment copyFrom: 3 to: index - 1. - name := index = comment size - ifTrue: [ '' ] - ifFalse: [ (comment copyFrom: index + 1 to: comment size - 1) trim ]. - bad := #(). - ('DEFINED(*)' match: name) - ifTrue: - [ bad := self undefinedItems. - name := name copyFrom: 9 to: name size - 1 ]. - (command sameAs: 'IFDEF') - ifTrue: [ bad := self undefinedItems ]. - (command sameAs: 'IFNDEF') - ifTrue: [ bad := self definedItems ]. - (bad includes: name asUppercase) - ifTrue: [ ^ self skipUntilEndDef ]. - (self parseOpt - and: [ (command sameAs: 'IFOPT') and: [ name sameAs: 'C+' ] ]) - ifTrue: - [ optDepths add: ifDefCount. - optComments add: (Array with: start + 1 with: matchEnd) ]. - ^ super comment -] - -{ #category : #private } -DelphiScanner >> processIncludeFile: aString [ - ^ self next -] - -{ #category : #generated } -DelphiScanner >> scan1 [ - self step. - currentCharacter == $$ - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ [ self recordMatch: #(139). - self step. - currentCharacter == $# - ifTrue: [ ^ self scan1 ]. - currentCharacter == $' - ifTrue: [ ^ self scan2 ]. - currentCharacter == $^ - ifTrue: [ ^ self scan6 ]. - currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ [ self recordMatch: #(139). - self step. - currentCharacter == $# - ifTrue: [ ^ self scan1 ]. - currentCharacter == $' - ifTrue: [ ^ self scan2 ]. - currentCharacter == $^ - ifTrue: [ ^ self scan6 ]. - currentCharacter isDigit ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiScanner >> scan10 [ - self step. - currentCharacter isDigit - ifTrue: [ ^ self scan11 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiScanner >> scan11 [ - [ self recordMatch: #(137). - self step. - currentCharacter isDigit ] whileTrue. - ('Ee' includes: currentCharacter) - ifTrue: [ ^ self scan12 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiScanner >> scan12 [ - self step. - currentCharacter isDigit - ifTrue: [ [ self recordMatch: #(137). - self step. - currentCharacter isDigit ] whileTrue. - ^ self reportLastMatch ]. - ('+-' includes: currentCharacter) - ifTrue: [ self step. - currentCharacter isDigit - ifTrue: [ [ self recordMatch: #(137). - self step. - currentCharacter isDigit ] whileTrue ] ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiScanner >> scan13 [ - [ self recordMatch: #(137). - self step. - currentCharacter == $. - ifTrue: [ self recordMatch: #(137). - self step. - currentCharacter == $. - ifTrue: [ ^ self recordAndReportMatch: #(138) ]. - currentCharacter isDigit - ifTrue: [ ^ self scan11 ]. - ('Ee' includes: currentCharacter) - ifTrue: [ ^ self scan12 ]. - ^ self reportLastMatch ]. - currentCharacter isDigit ] whileTrue. - ('Ee' includes: currentCharacter) - ifTrue: [ ^ self scan12 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiScanner >> scan14 [ - self step. - ((currentCharacter between: $A and: $Z) - or: [ currentCharacter between: $a and: $z ]) - ifTrue: [ self recordMatch: #(143). - self step. - currentCharacter == $# - ifTrue: [ ^ self scan7 ]. - currentCharacter == $' - ifTrue: [ ^ self scan2 ]. - currentCharacter == $^ - ifTrue: [ ^ self scan14 ] ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiScanner >> scan15 [ - [ self step. - currentCharacter == $` - ifTrue: [ self recordMatch: #(142). - self step. - currentCharacter == $` - ifTrue: [ ^ self scan15 ]. - ^ self reportLastMatch ]. - true ] whileTrue -] - -{ #category : #generated } -DelphiScanner >> scan2 [ - [ self step. - currentCharacter == $' - ifTrue: [ ^ self scan3 ]. - true ] whileTrue -] - -{ #category : #generated } -DelphiScanner >> scan3 [ - self recordMatch: #(139). - self step. - currentCharacter == $# - ifTrue: [ ^ self scan4 ]. - currentCharacter == $' - ifTrue: [ ^ self scan2 ]. - currentCharacter == $^ - ifTrue: [ ^ self scan5 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiScanner >> scan4 [ - self step. - currentCharacter == $$ - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ [ self recordMatch: #(139). - self step. - currentCharacter == $# - ifTrue: [ ^ self scan4 ]. - currentCharacter == $' - ifTrue: [ ^ self scan2 ]. - currentCharacter == $^ - ifTrue: [ ^ self scan5 ]. - currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ [ self recordMatch: #(139). - self step. - currentCharacter == $# - ifTrue: [ ^ self scan4 ]. - currentCharacter == $' - ifTrue: [ ^ self scan2 ]. - currentCharacter == $^ - ifTrue: [ ^ self scan5 ]. - currentCharacter isDigit ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiScanner >> scan5 [ - self step. - ((currentCharacter between: $A and: $Z) - or: [ currentCharacter between: $a and: $z ]) - ifTrue: [ ^ self scan3 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiScanner >> scan6 [ - self step. - ((currentCharacter between: $A and: $Z) - or: [ currentCharacter between: $a and: $z ]) - ifTrue: [ self step. - currentCharacter == $# - ifTrue: [ ^ self scan7 ]. - currentCharacter == $' - ifTrue: [ ^ self scan2 ]. - currentCharacter == $^ - ifTrue: [ ^ self scan6 ] ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiScanner >> scan7 [ - self step. - currentCharacter == $$ - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ [ self step. - currentCharacter == $# - ifTrue: [ ^ self scan7 ]. - currentCharacter == $' - ifTrue: [ ^ self scan2 ]. - currentCharacter == $^ - ifTrue: [ ^ self scan6 ]. - currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ [ self step. - currentCharacter == $# - ifTrue: [ ^ self scan7 ]. - currentCharacter == $' - ifTrue: [ ^ self scan2 ]. - currentCharacter == $^ - ifTrue: [ ^ self scan6 ]. - currentCharacter isDigit ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiScanner >> scan8 [ - self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ [ self recordMatch: #(137). - self step. - currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ] ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiScanner >> scan9 [ - [ self step. - currentCharacter == $* - ifTrue: [ [ self step. - currentCharacter == $) - ifTrue: [ ^ self recordAndReportMatch: #(140) ]. - currentCharacter == $* ] whileTrue. - ^ self scan9 ]. - true ] whileTrue -] - -{ #category : #private } -DelphiScanner >> scanControlCharacter [ - stream peek isLetter - ifFalse: [ ^ nil ]. - start := stream position - 1. - matchActions := Array with: self controlCharacterId. - ^ self createTokenFor: (String with: $^ with: stream next) -] - -{ #category : #generated } -DelphiScanner >> scanForToken [ - self step. - currentCharacter == $# - ifTrue: [ ^ self scan1 ]. - currentCharacter == $$ - ifTrue: [ ^ self scan8 ]. - currentCharacter == $& - ifTrue: - [ ^ self scanForTokenX6 ]. - currentCharacter == $' - ifTrue: [ ^ self scan2 ]. - currentCharacter == $( - ifTrue: - [ ^ self scanForTokenX12 ]. - currentCharacter == $) - ifTrue: [ ^ self recordAndReportMatch: #(3) ]. - currentCharacter == $* - ifTrue: [ ^ self recordAndReportMatch: #(4) ]. - ^ self scanForTokenX14 -] - -{ #category : #generated } -DelphiScanner >> scanForTokenX1 [ - self recordMatch: #(134). - self step. - ((currentCharacter between: $A and: $Z) - or: [ currentCharacter between: $a and: $z ]) - ifTrue: [ self step. - currentCharacter == $# - ifTrue: [ ^ self scan7 ]. - currentCharacter == $' - ifTrue: [ ^ self scan2 ]. - currentCharacter == $^ - ifTrue: [ ^ self scan14 ] ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiScanner >> scanForTokenX10 [ - self recordMatch: #(9). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(10) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiScanner >> scanForTokenX11 [ - [ self recordMatch: #(135 136). - self step. - currentCharacter isAlphaNumeric or: [ currentCharacter == $_ ] ] - whileTrue -] - -{ #category : #generated } -DelphiScanner >> scanForTokenX12 [ - self recordMatch: #(2). - self step. - currentCharacter == $* - ifTrue: [ ^ self scan9 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiScanner >> scanForTokenX13 [ - currentCharacter == $] - ifTrue: [ ^ self recordAndReportMatch: #(129) ]. - currentCharacter == $^ - ifTrue: - [ ^ self scanForTokenX1 ]. - currentCharacter == $` - ifTrue: [ ^ self scan15 ]. - currentCharacter == ${ - ifTrue: [ [ self step. - currentCharacter == $} - ifTrue: [ ^ self recordAndReportMatch: #(140) ]. - true ] whileTrue ]. - currentCharacter isDigit - ifTrue: [ ^ self scan13 ]. - (currentCharacter isSeparator - or: [ currentCharacter == Character pageUp - or: [ currentCharacter = - (Character value: 26) ] ]) - ifTrue: - [ ^ self scanForTokenX3 ]. - (currentCharacter isLetter or: [ currentCharacter == $_ ]) - ifTrue: - [ self scanForTokenX11 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiScanner >> scanForTokenX14 [ - currentCharacter == $+ - ifTrue: - [ ^ self scanForTokenX5 ]. - currentCharacter == $, - ifTrue: [ ^ self recordAndReportMatch: #(5) ]. - currentCharacter == $- - ifTrue: - [ ^ self scanForTokenX4 ]. - currentCharacter == $. - ifTrue: - [ ^ self scanForTokenX8 ]. - currentCharacter == $/ - ifTrue: - [ ^ self scanForTokenX2 ]. - currentCharacter == $: - ifTrue: - [ ^ self scanForTokenX10 ]. - currentCharacter == $; - ifTrue: [ ^ self recordAndReportMatch: #(133) ]. - currentCharacter == $< - ifTrue: - [ ^ self scanForTokenX7 ]. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(14) ]. - currentCharacter == $> - ifTrue: - [ ^ self scanForTokenX9 ]. - currentCharacter == $@ - ifTrue: [ ^ self recordAndReportMatch: #(17) ]. - currentCharacter == $[ - ifTrue: [ ^ self recordAndReportMatch: #(128) ]. - ^ self scanForTokenX13 -] - -{ #category : #generated } -DelphiScanner >> scanForTokenX2 [ - self recordMatch: #(8). - self step. - currentCharacter == $/ - ifTrue: [ [ self step. - (currentCharacter == Character lf - or: [ currentCharacter == Character cr ]) - ifTrue: [ ^ self recordAndReportMatch: #(140) ]. - true ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiScanner >> scanForTokenX3 [ - [ self recordMatch: #(141). - self step. - currentCharacter isSeparator - or: [ currentCharacter == Character pageUp - or: [ currentCharacter = - (Character value: 26) ] ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiScanner >> scanForTokenX4 [ - self recordMatch: #(131). - self step. - currentCharacter == $$ - ifTrue: [ ^ self scan8 ]. - currentCharacter == $. - ifTrue: [ ^ self scan10 ]. - currentCharacter isDigit - ifTrue: [ ^ self scan13 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiScanner >> scanForTokenX5 [ - self recordMatch: #(132). - self step. - currentCharacter == $$ - ifTrue: [ ^ self scan8 ]. - currentCharacter == $. - ifTrue: [ ^ self scan10 ]. - currentCharacter isDigit - ifTrue: [ ^ self scan13 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiScanner >> scanForTokenX6 [ - self step. - ('Oo' includes: currentCharacter) - ifTrue: [ self step. - ('Pp' includes: currentCharacter) - ifTrue: [ self step. - ('Ee' includes: currentCharacter) - ifTrue: [ self step. - ('Rr' includes: currentCharacter) - ifTrue: [ self step. - ('Aa' includes: currentCharacter) - ifTrue: [ self step. - ('Tt' includes: currentCharacter) - ifTrue: [ self step. - ('Oo' includes: currentCharacter) - ifTrue: [ self step. - ('Rr' includes: currentCharacter) - ifTrue: [ ^ self recordAndReportMatch: #(1) ] ] ] ] ] ] ] ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiScanner >> scanForTokenX7 [ - self recordMatch: #(11). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(12) ]. - currentCharacter == $> - ifTrue: [ ^ self recordAndReportMatch: #(13) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiScanner >> scanForTokenX8 [ - self recordMatch: #(6). - self step. - currentCharacter == $. - ifTrue: [ ^ self recordAndReportMatch: #(7) ]. - currentCharacter isDigit - ifTrue: [ ^ self scan11 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiScanner >> scanForTokenX9 [ - self recordMatch: #(15). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(16) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiScanner >> semicolonId [ - ^ 133 -] - -{ #category : #private } -DelphiScanner >> skipToEndToken [ - | token previous | - previous := SmaCCToken value: ''. - [ [ stream atEnd - or: [ (token := self next) value asUppercase ~= 'END' ] ] - whileTrue: [ previous := token ]. - previous value = '@' ] whileTrue. - (token value sameAs: 'END') - ifTrue: [ stream position: token startPosition - 1 ] -] - -{ #category : #private } -DelphiScanner >> skipUntilEndDef [ - | value entry | - entry := Array with: start + 1 with: nil. - ifDefs add: entry. - comments add: (Array with: start + 1 with: matchEnd). - ifDefCount := 1. - [ value := self next. - ifDefCount > 0 ] whileTrue. - ^ value -] - -{ #category : #generated } -DelphiScanner >> tokenActions [ - ^ #(nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil #integerWithRange nil #comment #whitespace #patternToken) -] - -{ #category : #generated } -DelphiScanner >> tokenClass [ - ^SmaCCCaseInsensitiveToken -] - -{ #category : #private } -DelphiScanner >> undefinedItems [ - ^ undefinedItems -] - -{ #category : #accessing } -DelphiScanner >> undefinedItems: aCollection [ - undefinedItems := aCollection -] - -{ #category : #generated } -DelphiScanner >> upArrowId [ - ^ 134 -] diff --git a/src/SmaCC_Delphi/DelphiSetExpressionNode.class.st b/src/SmaCC_Delphi/DelphiSetExpressionNode.class.st deleted file mode 100644 index 694c7cffb..000000000 --- a/src/SmaCC_Delphi/DelphiSetExpressionNode.class.st +++ /dev/null @@ -1,80 +0,0 @@ -Class { - #name : #DelphiSetExpressionNode, - #superclass : #DelphiExpressionNode, - #instVars : [ - 'left', - 'values', - 'commas', - 'right' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiSetExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSetExpression: self -] - -{ #category : #generated } -DelphiSetExpressionNode >> commas [ - ^ commas -] - -{ #category : #generated } -DelphiSetExpressionNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -DelphiSetExpressionNode >> compositeNodeVariables [ - ^ #(#values) -] - -{ #category : #generated } -DelphiSetExpressionNode >> ignoredCompositeTokenVariables [ - ^ #(#commas #leftParens #rightParens) -] - -{ #category : #'generated-initialize-release' } -DelphiSetExpressionNode >> initialize [ - super initialize. - values := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiSetExpressionNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiSetExpressionNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -DelphiSetExpressionNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiSetExpressionNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiSetExpressionNode >> tokenVariables [ - ^ #(#left #right) -] - -{ #category : #generated } -DelphiSetExpressionNode >> values [ - ^ values -] - -{ #category : #generated } -DelphiSetExpressionNode >> values: anOrderedCollection [ - self setParents: self values to: nil. - values := anOrderedCollection. - self setParents: self values to: self -] diff --git a/src/SmaCC_Delphi/DelphiSetTypeNode.class.st b/src/SmaCC_Delphi/DelphiSetTypeNode.class.st deleted file mode 100644 index e9c2ead14..000000000 --- a/src/SmaCC_Delphi/DelphiSetTypeNode.class.st +++ /dev/null @@ -1,39 +0,0 @@ -Class { - #name : #DelphiSetTypeNode, - #superclass : #DelphiTypeNode, - #instVars : [ - 'setToken', - 'ofToken' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiSetTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSetType: self -] - -{ #category : #generated } -DelphiSetTypeNode >> ofToken [ - ^ ofToken -] - -{ #category : #generated } -DelphiSetTypeNode >> ofToken: aSmaCCToken [ - ofToken := aSmaCCToken -] - -{ #category : #generated } -DelphiSetTypeNode >> setToken [ - ^ setToken -] - -{ #category : #generated } -DelphiSetTypeNode >> setToken: aSmaCCToken [ - setToken := aSmaCCToken -] - -{ #category : #generated } -DelphiSetTypeNode >> tokenVariables [ - ^ #(#setToken #ofToken) -] diff --git a/src/SmaCC_Delphi/DelphiSetValueNode.class.st b/src/SmaCC_Delphi/DelphiSetValueNode.class.st deleted file mode 100644 index 632b113bf..000000000 --- a/src/SmaCC_Delphi/DelphiSetValueNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #DelphiSetValueNode, - #superclass : #DelphiProgramNode, - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiSetValueNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSetValue: self -] diff --git a/src/SmaCC_Delphi/DelphiSimpleArrayTypeNode.class.st b/src/SmaCC_Delphi/DelphiSimpleArrayTypeNode.class.st deleted file mode 100644 index 6837194ab..000000000 --- a/src/SmaCC_Delphi/DelphiSimpleArrayTypeNode.class.st +++ /dev/null @@ -1,74 +0,0 @@ -Class { - #name : #DelphiSimpleArrayTypeNode, - #superclass : #DelphiTypeNode, - #instVars : [ - 'type', - 'left', - 'bounds', - 'right' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiSimpleArrayTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSimpleArrayType: self -] - -{ #category : #generated } -DelphiSimpleArrayTypeNode >> bounds [ - ^ bounds -] - -{ #category : #generated } -DelphiSimpleArrayTypeNode >> bounds: aDelphiExpressionNode [ - self bounds notNil - ifTrue: [ self bounds parent: nil ]. - bounds := aDelphiExpressionNode. - self bounds notNil - ifTrue: [ self bounds parent: self ] -] - -{ #category : #generated } -DelphiSimpleArrayTypeNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiSimpleArrayTypeNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -DelphiSimpleArrayTypeNode >> nodeVariables [ - ^ #(#type #bounds) -] - -{ #category : #generated } -DelphiSimpleArrayTypeNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiSimpleArrayTypeNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiSimpleArrayTypeNode >> tokenVariables [ - ^ #(#left #right) -] - -{ #category : #generated } -DelphiSimpleArrayTypeNode >> type [ - ^ type -] - -{ #category : #generated } -DelphiSimpleArrayTypeNode >> type: aDelphiProgramNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aDelphiProgramNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_Delphi/DelphiSingleSetValueNode.class.st b/src/SmaCC_Delphi/DelphiSingleSetValueNode.class.st deleted file mode 100644 index 1a4d88dba..000000000 --- a/src/SmaCC_Delphi/DelphiSingleSetValueNode.class.st +++ /dev/null @@ -1,32 +0,0 @@ -Class { - #name : #DelphiSingleSetValueNode, - #superclass : #DelphiSetValueNode, - #instVars : [ - 'value' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiSingleSetValueNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSingleSetValue: self -] - -{ #category : #generated } -DelphiSingleSetValueNode >> nodeVariables [ - ^ #(#value) -] - -{ #category : #generated } -DelphiSingleSetValueNode >> value [ - ^ value -] - -{ #category : #generated } -DelphiSingleSetValueNode >> value: aDelphiExpressionNode [ - self value notNil - ifTrue: [ self value parent: nil ]. - value := aDelphiExpressionNode. - self value notNil - ifTrue: [ self value parent: self ] -] diff --git a/src/SmaCC_Delphi/DelphiStatementBlockNode.class.st b/src/SmaCC_Delphi/DelphiStatementBlockNode.class.st deleted file mode 100644 index 02d225159..000000000 --- a/src/SmaCC_Delphi/DelphiStatementBlockNode.class.st +++ /dev/null @@ -1,39 +0,0 @@ -Class { - #name : #DelphiStatementBlockNode, - #superclass : #DelphiMultiStatementNode, - #instVars : [ - 'beginToken', - 'endToken' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiStatementBlockNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitStatementBlock: self -] - -{ #category : #generated } -DelphiStatementBlockNode >> beginToken [ - ^ beginToken -] - -{ #category : #generated } -DelphiStatementBlockNode >> beginToken: aSmaCCToken [ - beginToken := aSmaCCToken -] - -{ #category : #generated } -DelphiStatementBlockNode >> endToken [ - ^ endToken -] - -{ #category : #generated } -DelphiStatementBlockNode >> endToken: aSmaCCToken [ - endToken := aSmaCCToken -] - -{ #category : #generated } -DelphiStatementBlockNode >> tokenVariables [ - ^ #(#beginToken #endToken) -] diff --git a/src/SmaCC_Delphi/DelphiStatementNode.class.st b/src/SmaCC_Delphi/DelphiStatementNode.class.st deleted file mode 100644 index f2d06eedd..000000000 --- a/src/SmaCC_Delphi/DelphiStatementNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #DelphiStatementNode, - #superclass : #DelphiProgramNode, - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitStatement: self -] diff --git a/src/SmaCC_Delphi/DelphiTryStatementNode.class.st b/src/SmaCC_Delphi/DelphiTryStatementNode.class.st deleted file mode 100644 index 9141206b5..000000000 --- a/src/SmaCC_Delphi/DelphiTryStatementNode.class.st +++ /dev/null @@ -1,74 +0,0 @@ -Class { - #name : #DelphiTryStatementNode, - #superclass : #DelphiMultiStatementNode, - #instVars : [ - 'tryToken', - 'except', - 'finally', - 'endToken' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiTryStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitTryStatement: self -] - -{ #category : #generated } -DelphiTryStatementNode >> endToken [ - ^ endToken -] - -{ #category : #generated } -DelphiTryStatementNode >> endToken: aSmaCCToken [ - endToken := aSmaCCToken -] - -{ #category : #generated } -DelphiTryStatementNode >> except [ - ^ except -] - -{ #category : #generated } -DelphiTryStatementNode >> except: aDelphiExceptNode [ - self except notNil - ifTrue: [ self except parent: nil ]. - except := aDelphiExceptNode. - self except notNil - ifTrue: [ self except parent: self ] -] - -{ #category : #generated } -DelphiTryStatementNode >> finally [ - ^ finally -] - -{ #category : #generated } -DelphiTryStatementNode >> finally: aDelphiFinallyNode [ - self finally notNil - ifTrue: [ self finally parent: nil ]. - finally := aDelphiFinallyNode. - self finally notNil - ifTrue: [ self finally parent: self ] -] - -{ #category : #generated } -DelphiTryStatementNode >> nodeVariables [ - ^ #(#except #finally) -] - -{ #category : #generated } -DelphiTryStatementNode >> tokenVariables [ - ^ #(#tryToken #endToken) -] - -{ #category : #generated } -DelphiTryStatementNode >> tryToken [ - ^ tryToken -] - -{ #category : #generated } -DelphiTryStatementNode >> tryToken: aSmaCCToken [ - tryToken := aSmaCCToken -] diff --git a/src/SmaCC_Delphi/DelphiTypeNode.class.st b/src/SmaCC_Delphi/DelphiTypeNode.class.st deleted file mode 100644 index 058a73c8b..000000000 --- a/src/SmaCC_Delphi/DelphiTypeNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #DelphiTypeNode, - #superclass : #DelphiProgramNode, - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitType: self -] diff --git a/src/SmaCC_Delphi/DelphiTypeTypeNode.class.st b/src/SmaCC_Delphi/DelphiTypeTypeNode.class.st deleted file mode 100644 index 03255593e..000000000 --- a/src/SmaCC_Delphi/DelphiTypeTypeNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #DelphiTypeTypeNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'typeToken', - 'typeName' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiTypeTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitTypeType: self -] - -{ #category : #generated } -DelphiTypeTypeNode >> nodeVariables [ - ^ #(#typeName) -] - -{ #category : #generated } -DelphiTypeTypeNode >> tokenVariables [ - ^ #(#typeToken) -] - -{ #category : #generated } -DelphiTypeTypeNode >> typeName [ - ^ typeName -] - -{ #category : #generated } -DelphiTypeTypeNode >> typeName: aDelphiQualifiedNameNode [ - self typeName notNil - ifTrue: [ self typeName parent: nil ]. - typeName := aDelphiQualifiedNameNode. - self typeName notNil - ifTrue: [ self typeName parent: self ] -] - -{ #category : #generated } -DelphiTypeTypeNode >> typeToken [ - ^ typeToken -] - -{ #category : #generated } -DelphiTypeTypeNode >> typeToken: aSmaCCToken [ - typeToken := aSmaCCToken -] diff --git a/src/SmaCC_Delphi/DelphiUnitFileNode.class.st b/src/SmaCC_Delphi/DelphiUnitFileNode.class.st deleted file mode 100644 index fcc1705fe..000000000 --- a/src/SmaCC_Delphi/DelphiUnitFileNode.class.st +++ /dev/null @@ -1,157 +0,0 @@ -Class { - #name : #DelphiUnitFileNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'unitToken', - 'unitName', - 'modifier', - 'semicolon', - 'interfaceSection', - 'implementationSection', - 'initializationSection', - 'finalizationSection', - 'endToken', - 'period' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiUnitFileNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitUnitFile: self -] - -{ #category : #generated } -DelphiUnitFileNode >> endToken [ - ^ endToken -] - -{ #category : #generated } -DelphiUnitFileNode >> endToken: aSmaCCToken [ - endToken := aSmaCCToken -] - -{ #category : #generated } -DelphiUnitFileNode >> finalizationSection [ - ^ finalizationSection -] - -{ #category : #generated } -DelphiUnitFileNode >> finalizationSection: aDelphiFinalizationSectionNode [ - self finalizationSection notNil - ifTrue: [ self finalizationSection parent: nil ]. - finalizationSection := aDelphiFinalizationSectionNode. - self finalizationSection notNil - ifTrue: [ self finalizationSection parent: self ] -] - -{ #category : #generated } -DelphiUnitFileNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -DelphiUnitFileNode >> implementationSection [ - ^ implementationSection -] - -{ #category : #generated } -DelphiUnitFileNode >> implementationSection: aDelphiImplementationSectionNode [ - self implementationSection notNil - ifTrue: [ self implementationSection parent: nil ]. - implementationSection := aDelphiImplementationSectionNode. - self implementationSection notNil - ifTrue: [ self implementationSection parent: self ] -] - -{ #category : #generated } -DelphiUnitFileNode >> initializationSection [ - ^ initializationSection -] - -{ #category : #generated } -DelphiUnitFileNode >> initializationSection: aDelphiInitializationSectionNode [ - self initializationSection notNil - ifTrue: [ self initializationSection parent: nil ]. - initializationSection := aDelphiInitializationSectionNode. - self initializationSection notNil - ifTrue: [ self initializationSection parent: self ] -] - -{ #category : #generated } -DelphiUnitFileNode >> interfaceSection [ - ^ interfaceSection -] - -{ #category : #generated } -DelphiUnitFileNode >> interfaceSection: aDelphiInterfaceSectionNode [ - self interfaceSection notNil - ifTrue: [ self interfaceSection parent: nil ]. - interfaceSection := aDelphiInterfaceSectionNode. - self interfaceSection notNil - ifTrue: [ self interfaceSection parent: self ] -] - -{ #category : #generated } -DelphiUnitFileNode >> modifier [ - ^ modifier -] - -{ #category : #generated } -DelphiUnitFileNode >> modifier: aSmaCCToken [ - modifier := aSmaCCToken -] - -{ #category : #generated } -DelphiUnitFileNode >> nodeVariables [ - ^ #(#unitName #interfaceSection #implementationSection #initializationSection #finalizationSection) -] - -{ #category : #generated } -DelphiUnitFileNode >> period [ - ^ period -] - -{ #category : #generated } -DelphiUnitFileNode >> period: aSmaCCToken [ - period := aSmaCCToken -] - -{ #category : #generated } -DelphiUnitFileNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -DelphiUnitFileNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -DelphiUnitFileNode >> tokenVariables [ - ^ #(#unitToken #modifier #endToken #period) -] - -{ #category : #generated } -DelphiUnitFileNode >> unitName [ - ^ unitName -] - -{ #category : #generated } -DelphiUnitFileNode >> unitName: aDelphiModuleNameNode [ - self unitName notNil - ifTrue: [ self unitName parent: nil ]. - unitName := aDelphiModuleNameNode. - self unitName notNil - ifTrue: [ self unitName parent: self ] -] - -{ #category : #generated } -DelphiUnitFileNode >> unitToken [ - ^ unitToken -] - -{ #category : #generated } -DelphiUnitFileNode >> unitToken: aSmaCCToken [ - unitToken := aSmaCCToken -] diff --git a/src/SmaCC_Delphi/DelphiValuesSetTypeNode.class.st b/src/SmaCC_Delphi/DelphiValuesSetTypeNode.class.st deleted file mode 100644 index a2b73bbf7..000000000 --- a/src/SmaCC_Delphi/DelphiValuesSetTypeNode.class.st +++ /dev/null @@ -1,78 +0,0 @@ -Class { - #name : #DelphiValuesSetTypeNode, - #superclass : #DelphiSetTypeNode, - #instVars : [ - 'left', - 'names', - 'commas', - 'right' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiValuesSetTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitValuesSetType: self -] - -{ #category : #generated } -DelphiValuesSetTypeNode >> commas [ - ^ commas -] - -{ #category : #generated } -DelphiValuesSetTypeNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -DelphiValuesSetTypeNode >> compositeTokenVariables [ - ^ #(#names) -] - -{ #category : #generated } -DelphiValuesSetTypeNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #'generated-initialize-release' } -DelphiValuesSetTypeNode >> initialize [ - super initialize. - names := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiValuesSetTypeNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiValuesSetTypeNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -DelphiValuesSetTypeNode >> names [ - ^ names -] - -{ #category : #generated } -DelphiValuesSetTypeNode >> names: anOrderedCollection [ - names := anOrderedCollection -] - -{ #category : #generated } -DelphiValuesSetTypeNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiValuesSetTypeNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiValuesSetTypeNode >> tokenVariables [ - ^ #(#left #right #setToken #ofToken) -] diff --git a/src/SmaCC_Delphi/DelphiVariableDefinitionNode.class.st b/src/SmaCC_Delphi/DelphiVariableDefinitionNode.class.st deleted file mode 100644 index 1c259de04..000000000 --- a/src/SmaCC_Delphi/DelphiVariableDefinitionNode.class.st +++ /dev/null @@ -1,114 +0,0 @@ -Class { - #name : #DelphiVariableDefinitionNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'names', - 'commas', - 'colon', - 'type', - 'modifier', - 'semicolon' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiVariableDefinitionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitVariableDefinition: self -] - -{ #category : #generated } -DelphiVariableDefinitionNode >> colon [ - ^ colon -] - -{ #category : #generated } -DelphiVariableDefinitionNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -DelphiVariableDefinitionNode >> commas [ - ^ commas -] - -{ #category : #generated } -DelphiVariableDefinitionNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -DelphiVariableDefinitionNode >> compositeTokenVariables [ - ^ #(#names) -] - -{ #category : #generated } -DelphiVariableDefinitionNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -DelphiVariableDefinitionNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #'generated-initialize-release' } -DelphiVariableDefinitionNode >> initialize [ - super initialize. - names := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiVariableDefinitionNode >> modifier [ - ^ modifier -] - -{ #category : #generated } -DelphiVariableDefinitionNode >> modifier: aSmaCCToken [ - modifier := aSmaCCToken -] - -{ #category : #generated } -DelphiVariableDefinitionNode >> names [ - ^ names -] - -{ #category : #generated } -DelphiVariableDefinitionNode >> names: anOrderedCollection [ - names := anOrderedCollection -] - -{ #category : #generated } -DelphiVariableDefinitionNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -DelphiVariableDefinitionNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -DelphiVariableDefinitionNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -DelphiVariableDefinitionNode >> tokenVariables [ - ^ #(#colon #modifier) -] - -{ #category : #generated } -DelphiVariableDefinitionNode >> type [ - ^ type -] - -{ #category : #generated } -DelphiVariableDefinitionNode >> type: aDelphiProgramNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aDelphiProgramNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_Delphi/DelphiVariableExpressionNode.class.st b/src/SmaCC_Delphi/DelphiVariableExpressionNode.class.st deleted file mode 100644 index 32e7569b3..000000000 --- a/src/SmaCC_Delphi/DelphiVariableExpressionNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #DelphiVariableExpressionNode, - #superclass : #DelphiExpressionNode, - #instVars : [ - 'name' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiVariableExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitVariableExpression: self -] - -{ #category : #generated } -DelphiVariableExpressionNode >> name [ - ^ name -] - -{ #category : #generated } -DelphiVariableExpressionNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -DelphiVariableExpressionNode >> tokenVariables [ - ^ #(#name) -] diff --git a/src/SmaCC_Delphi/DelphiVariableNode.class.st b/src/SmaCC_Delphi/DelphiVariableNode.class.st deleted file mode 100644 index aef8dfd53..000000000 --- a/src/SmaCC_Delphi/DelphiVariableNode.class.st +++ /dev/null @@ -1,140 +0,0 @@ -Class { - #name : #DelphiVariableNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'names', - 'commas', - 'colon', - 'type', - 'modifier', - 'equal', - 'value', - 'semicolon' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiVariableNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitVariable: self -] - -{ #category : #generated } -DelphiVariableNode >> colon [ - ^ colon -] - -{ #category : #generated } -DelphiVariableNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -DelphiVariableNode >> commas [ - ^ commas -] - -{ #category : #generated } -DelphiVariableNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -DelphiVariableNode >> compositeTokenVariables [ - ^ #(#names) -] - -{ #category : #generated } -DelphiVariableNode >> equal [ - ^ equal -] - -{ #category : #generated } -DelphiVariableNode >> equal: aSmaCCToken [ - equal := aSmaCCToken -] - -{ #category : #generated } -DelphiVariableNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -DelphiVariableNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #'generated-initialize-release' } -DelphiVariableNode >> initialize [ - super initialize. - names := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiVariableNode >> modifier [ - ^ modifier -] - -{ #category : #generated } -DelphiVariableNode >> modifier: aSmaCCToken [ - modifier := aSmaCCToken -] - -{ #category : #generated } -DelphiVariableNode >> names [ - ^ names -] - -{ #category : #generated } -DelphiVariableNode >> names: anOrderedCollection [ - names := anOrderedCollection -] - -{ #category : #generated } -DelphiVariableNode >> nodeVariables [ - ^ #(#type #value) -] - -{ #category : #generated } -DelphiVariableNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -DelphiVariableNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -DelphiVariableNode >> tokenVariables [ - ^ #(#colon #modifier #equal) -] - -{ #category : #generated } -DelphiVariableNode >> type [ - ^ type -] - -{ #category : #generated } -DelphiVariableNode >> type: aDelphiProgramNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aDelphiProgramNode. - self type notNil - ifTrue: [ self type parent: self ] -] - -{ #category : #generated } -DelphiVariableNode >> value [ - ^ value -] - -{ #category : #generated } -DelphiVariableNode >> value: aDelphiExpressionNode [ - self value notNil - ifTrue: [ self value parent: nil ]. - value := aDelphiExpressionNode. - self value notNil - ifTrue: [ self value parent: self ] -] diff --git a/src/SmaCC_Delphi/DelphiVariantTypeNode.class.st b/src/SmaCC_Delphi/DelphiVariantTypeNode.class.st deleted file mode 100644 index 02106ffbe..000000000 --- a/src/SmaCC_Delphi/DelphiVariantTypeNode.class.st +++ /dev/null @@ -1,190 +0,0 @@ -Class { - #name : #DelphiVariantTypeNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'names', - 'commas', - 'colons', - 'left', - 'sections', - 'caseToken', - 'value', - 'type', - 'ofToken', - 'variantTypes', - 'semicolons', - 'right' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiVariantTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitVariantType: self -] - -{ #category : #generated } -DelphiVariantTypeNode >> caseToken [ - ^ caseToken -] - -{ #category : #generated } -DelphiVariantTypeNode >> caseToken: aSmaCCToken [ - caseToken := aSmaCCToken -] - -{ #category : #generated } -DelphiVariantTypeNode >> colons [ - ^ colons -] - -{ #category : #generated } -DelphiVariantTypeNode >> colons: anOrderedCollection [ - colons := anOrderedCollection -] - -{ #category : #generated } -DelphiVariantTypeNode >> commas [ - ^ commas -] - -{ #category : #generated } -DelphiVariantTypeNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -DelphiVariantTypeNode >> compositeNodeVariables [ - ^ #(#names #sections #variantTypes) -] - -{ #category : #generated } -DelphiVariantTypeNode >> compositeTokenVariables [ - ^ #(#colons) -] - -{ #category : #generated } -DelphiVariantTypeNode >> ignoredCompositeTokenVariables [ - ^ #(#commas #semicolons) -] - -{ #category : #'generated-initialize-release' } -DelphiVariantTypeNode >> initialize [ - super initialize. - names := OrderedCollection new: 2. - commas := OrderedCollection new: 2. - colons := OrderedCollection new: 2. - sections := OrderedCollection new: 2. - variantTypes := OrderedCollection new: 2. - semicolons := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiVariantTypeNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiVariantTypeNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -DelphiVariantTypeNode >> names [ - ^ names -] - -{ #category : #generated } -DelphiVariantTypeNode >> names: anOrderedCollection [ - self setParents: self names to: nil. - names := anOrderedCollection. - self setParents: self names to: self -] - -{ #category : #generated } -DelphiVariantTypeNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -DelphiVariantTypeNode >> ofToken [ - ^ ofToken -] - -{ #category : #generated } -DelphiVariantTypeNode >> ofToken: aSmaCCToken [ - ofToken := aSmaCCToken -] - -{ #category : #generated } -DelphiVariantTypeNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiVariantTypeNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiVariantTypeNode >> sections [ - ^ sections -] - -{ #category : #generated } -DelphiVariantTypeNode >> sections: anOrderedCollection [ - self setParents: self sections to: nil. - sections := anOrderedCollection. - self setParents: self sections to: self -] - -{ #category : #generated } -DelphiVariantTypeNode >> semicolons [ - ^ semicolons -] - -{ #category : #generated } -DelphiVariantTypeNode >> semicolons: anOrderedCollection [ - semicolons := anOrderedCollection -] - -{ #category : #generated } -DelphiVariantTypeNode >> tokenVariables [ - ^ #(#left #caseToken #value #ofToken #right) -] - -{ #category : #generated } -DelphiVariantTypeNode >> type [ - ^ type -] - -{ #category : #generated } -DelphiVariantTypeNode >> type: aDelphiProgramNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aDelphiProgramNode. - self type notNil - ifTrue: [ self type parent: self ] -] - -{ #category : #generated } -DelphiVariantTypeNode >> value [ - ^ value -] - -{ #category : #generated } -DelphiVariantTypeNode >> value: aSmaCCToken [ - value := aSmaCCToken -] - -{ #category : #generated } -DelphiVariantTypeNode >> variantTypes [ - ^ variantTypes -] - -{ #category : #generated } -DelphiVariantTypeNode >> variantTypes: anOrderedCollection [ - self setParents: self variantTypes to: nil. - variantTypes := anOrderedCollection. - self setParents: self variantTypes to: self -] diff --git a/src/SmaCC_Delphi/DelphiVarsNode.class.st b/src/SmaCC_Delphi/DelphiVarsNode.class.st deleted file mode 100644 index e92331608..000000000 --- a/src/SmaCC_Delphi/DelphiVarsNode.class.st +++ /dev/null @@ -1,52 +0,0 @@ -Class { - #name : #DelphiVarsNode, - #superclass : #DelphiProgramNode, - #instVars : [ - 'varToken', - 'variableDefinitions' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiVarsNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitVars: self -] - -{ #category : #generated } -DelphiVarsNode >> compositeNodeVariables [ - ^ #(#variableDefinitions) -] - -{ #category : #'generated-initialize-release' } -DelphiVarsNode >> initialize [ - super initialize. - variableDefinitions := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiVarsNode >> tokenVariables [ - ^ #(#varToken) -] - -{ #category : #generated } -DelphiVarsNode >> varToken [ - ^ varToken -] - -{ #category : #generated } -DelphiVarsNode >> varToken: aSmaCCToken [ - varToken := aSmaCCToken -] - -{ #category : #generated } -DelphiVarsNode >> variableDefinitions [ - ^ variableDefinitions -] - -{ #category : #generated } -DelphiVarsNode >> variableDefinitions: anOrderedCollection [ - self setParents: self variableDefinitions to: nil. - variableDefinitions := anOrderedCollection. - self setParents: self variableDefinitions to: self -] diff --git a/src/SmaCC_Delphi/DelphiWhileStatementNode.class.st b/src/SmaCC_Delphi/DelphiWhileStatementNode.class.st deleted file mode 100644 index 1c74758a9..000000000 --- a/src/SmaCC_Delphi/DelphiWhileStatementNode.class.st +++ /dev/null @@ -1,74 +0,0 @@ -Class { - #name : #DelphiWhileStatementNode, - #superclass : #DelphiStatementNode, - #instVars : [ - 'whileToken', - 'expression', - 'doToken', - 'statement' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiWhileStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitWhileStatement: self -] - -{ #category : #generated } -DelphiWhileStatementNode >> doToken [ - ^ doToken -] - -{ #category : #generated } -DelphiWhileStatementNode >> doToken: aSmaCCToken [ - doToken := aSmaCCToken -] - -{ #category : #generated } -DelphiWhileStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -DelphiWhileStatementNode >> expression: aDelphiExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aDelphiExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -DelphiWhileStatementNode >> nodeVariables [ - ^ #(#expression #statement) -] - -{ #category : #generated } -DelphiWhileStatementNode >> statement [ - ^ statement -] - -{ #category : #generated } -DelphiWhileStatementNode >> statement: aDelphiStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aDelphiStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -DelphiWhileStatementNode >> tokenVariables [ - ^ #(#whileToken #doToken) -] - -{ #category : #generated } -DelphiWhileStatementNode >> whileToken [ - ^ whileToken -] - -{ #category : #generated } -DelphiWhileStatementNode >> whileToken: aSmaCCToken [ - whileToken := aSmaCCToken -] diff --git a/src/SmaCC_Delphi/DelphiWithStatementNode.class.st b/src/SmaCC_Delphi/DelphiWithStatementNode.class.st deleted file mode 100644 index b5f49b610..000000000 --- a/src/SmaCC_Delphi/DelphiWithStatementNode.class.st +++ /dev/null @@ -1,100 +0,0 @@ -Class { - #name : #DelphiWithStatementNode, - #superclass : #DelphiStatementNode, - #instVars : [ - 'withToken', - 'expressions', - 'commas', - 'doToken', - 'statement' - ], - #category : #'SmaCC_Delphi' -} - -{ #category : #generated } -DelphiWithStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitWithStatement: self -] - -{ #category : #generated } -DelphiWithStatementNode >> commas [ - ^ commas -] - -{ #category : #generated } -DelphiWithStatementNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -DelphiWithStatementNode >> compositeNodeVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -DelphiWithStatementNode >> doToken [ - ^ doToken -] - -{ #category : #generated } -DelphiWithStatementNode >> doToken: aSmaCCToken [ - doToken := aSmaCCToken -] - -{ #category : #generated } -DelphiWithStatementNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -DelphiWithStatementNode >> expressions: anOrderedCollection [ - self setParents: self expressions to: nil. - expressions := anOrderedCollection. - self setParents: self expressions to: self -] - -{ #category : #generated } -DelphiWithStatementNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #'generated-initialize-release' } -DelphiWithStatementNode >> initialize [ - super initialize. - expressions := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiWithStatementNode >> nodeVariables [ - ^ #(#statement) -] - -{ #category : #generated } -DelphiWithStatementNode >> statement [ - ^ statement -] - -{ #category : #generated } -DelphiWithStatementNode >> statement: aDelphiStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aDelphiStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -DelphiWithStatementNode >> tokenVariables [ - ^ #(#withToken #doToken) -] - -{ #category : #generated } -DelphiWithStatementNode >> withToken [ - ^ withToken -] - -{ #category : #generated } -DelphiWithStatementNode >> withToken: aSmaCCToken [ - withToken := aSmaCCToken -] diff --git a/src/SmaCC_Delphi/package.st b/src/SmaCC_Delphi/package.st deleted file mode 100644 index 69b96fa73..000000000 --- a/src/SmaCC_Delphi/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_Delphi' } diff --git a/src/SmaCC_Delphi_Forms/DelphiFormArrayNode.class.st b/src/SmaCC_Delphi_Forms/DelphiFormArrayNode.class.st deleted file mode 100644 index 93543b223..000000000 --- a/src/SmaCC_Delphi_Forms/DelphiFormArrayNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #DelphiFormArrayNode, - #superclass : #DelphiFormParseNode, - #instVars : [ - 'left', - 'values', - 'right' - ], - #category : #'SmaCC_Delphi_Forms' -} - -{ #category : #generated } -DelphiFormArrayNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitArray: self -] - -{ #category : #generated } -DelphiFormArrayNode >> compositeNodeVariables [ - ^ #(#values) -] - -{ #category : #'generated-initialize-release' } -DelphiFormArrayNode >> initialize [ - super initialize. - values := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiFormArrayNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiFormArrayNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -DelphiFormArrayNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiFormArrayNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiFormArrayNode >> tokenVariables [ - ^ #(#left #right) -] - -{ #category : #generated } -DelphiFormArrayNode >> values [ - ^ values -] - -{ #category : #generated } -DelphiFormArrayNode >> values: anOrderedCollection [ - self setParents: self values to: nil. - values := anOrderedCollection. - self setParents: self values to: self -] diff --git a/src/SmaCC_Delphi_Forms/DelphiFormBooleanNode.class.st b/src/SmaCC_Delphi_Forms/DelphiFormBooleanNode.class.st deleted file mode 100644 index da95b2c7f..000000000 --- a/src/SmaCC_Delphi_Forms/DelphiFormBooleanNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #DelphiFormBooleanNode, - #superclass : #DelphiFormLiteralNode, - #category : #'SmaCC_Delphi_Forms' -} - -{ #category : #generated } -DelphiFormBooleanNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitBoolean: self -] diff --git a/src/SmaCC_Delphi_Forms/DelphiFormByteArrayNode.class.st b/src/SmaCC_Delphi_Forms/DelphiFormByteArrayNode.class.st deleted file mode 100644 index 1caf6019d..000000000 --- a/src/SmaCC_Delphi_Forms/DelphiFormByteArrayNode.class.st +++ /dev/null @@ -1,61 +0,0 @@ -Class { - #name : #DelphiFormByteArrayNode, - #superclass : #DelphiFormParseNode, - #instVars : [ - 'left', - 'lines', - 'right' - ], - #category : #'SmaCC_Delphi_Forms' -} - -{ #category : #generated } -DelphiFormByteArrayNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitByteArray: self -] - -{ #category : #generated } -DelphiFormByteArrayNode >> compositeTokenVariables [ - ^ #(#lines) -] - -{ #category : #'generated-initialize-release' } -DelphiFormByteArrayNode >> initialize [ - super initialize. - lines := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiFormByteArrayNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiFormByteArrayNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -DelphiFormByteArrayNode >> lines [ - ^ lines -] - -{ #category : #generated } -DelphiFormByteArrayNode >> lines: anOrderedCollection [ - lines := anOrderedCollection -] - -{ #category : #generated } -DelphiFormByteArrayNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiFormByteArrayNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiFormByteArrayNode >> tokenVariables [ - ^ #(#left #right) -] diff --git a/src/SmaCC_Delphi_Forms/DelphiFormCombinedStringNode.class.st b/src/SmaCC_Delphi_Forms/DelphiFormCombinedStringNode.class.st deleted file mode 100644 index ebaaae7b8..000000000 --- a/src/SmaCC_Delphi_Forms/DelphiFormCombinedStringNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #DelphiFormCombinedStringNode, - #superclass : #DelphiFormParseNode, - #instVars : [ - 'left', - 'plus', - 'right' - ], - #category : #'SmaCC_Delphi_Forms' -} - -{ #category : #generated } -DelphiFormCombinedStringNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitCombinedString: self -] - -{ #category : #generated } -DelphiFormCombinedStringNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiFormCombinedStringNode >> left: aDelphiFormParseNode [ - self left notNil - ifTrue: [ self left parent: nil ]. - left := aDelphiFormParseNode. - self left notNil - ifTrue: [ self left parent: self ] -] - -{ #category : #generated } -DelphiFormCombinedStringNode >> nodeVariables [ - ^ #(#left) -] - -{ #category : #generated } -DelphiFormCombinedStringNode >> plus [ - ^ plus -] - -{ #category : #generated } -DelphiFormCombinedStringNode >> plus: aSmaCCToken [ - plus := aSmaCCToken -] - -{ #category : #generated } -DelphiFormCombinedStringNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiFormCombinedStringNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiFormCombinedStringNode >> tokenVariables [ - ^ #(#plus #right) -] diff --git a/src/SmaCC_Delphi_Forms/DelphiFormFloatNode.class.st b/src/SmaCC_Delphi_Forms/DelphiFormFloatNode.class.st deleted file mode 100644 index ce44f327b..000000000 --- a/src/SmaCC_Delphi_Forms/DelphiFormFloatNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #DelphiFormFloatNode, - #superclass : #DelphiFormLiteralNode, - #category : #'SmaCC_Delphi_Forms' -} - -{ #category : #generated } -DelphiFormFloatNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitFloat: self -] diff --git a/src/SmaCC_Delphi_Forms/DelphiFormIntegerNode.class.st b/src/SmaCC_Delphi_Forms/DelphiFormIntegerNode.class.st deleted file mode 100644 index 6fc34915c..000000000 --- a/src/SmaCC_Delphi_Forms/DelphiFormIntegerNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #DelphiFormIntegerNode, - #superclass : #DelphiFormLiteralNode, - #category : #'SmaCC_Delphi_Forms' -} - -{ #category : #generated } -DelphiFormIntegerNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitInteger: self -] diff --git a/src/SmaCC_Delphi_Forms/DelphiFormItemNode.class.st b/src/SmaCC_Delphi_Forms/DelphiFormItemNode.class.st deleted file mode 100644 index ff116b459..000000000 --- a/src/SmaCC_Delphi_Forms/DelphiFormItemNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #DelphiFormItemNode, - #superclass : #DelphiFormParseNode, - #instVars : [ - 'itemToken', - 'properties', - 'endToken' - ], - #category : #'SmaCC_Delphi_Forms' -} - -{ #category : #generated } -DelphiFormItemNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitItem: self -] - -{ #category : #generated } -DelphiFormItemNode >> compositeNodeVariables [ - ^ #(#properties) -] - -{ #category : #generated } -DelphiFormItemNode >> endToken [ - ^ endToken -] - -{ #category : #generated } -DelphiFormItemNode >> endToken: aSmaCCToken [ - endToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -DelphiFormItemNode >> initialize [ - super initialize. - properties := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiFormItemNode >> itemToken [ - ^ itemToken -] - -{ #category : #generated } -DelphiFormItemNode >> itemToken: aSmaCCToken [ - itemToken := aSmaCCToken -] - -{ #category : #generated } -DelphiFormItemNode >> properties [ - ^ properties -] - -{ #category : #generated } -DelphiFormItemNode >> properties: anOrderedCollection [ - self setParents: self properties to: nil. - properties := anOrderedCollection. - self setParents: self properties to: self -] - -{ #category : #generated } -DelphiFormItemNode >> tokenVariables [ - ^ #(#itemToken #endToken) -] diff --git a/src/SmaCC_Delphi_Forms/DelphiFormLiteralNode.class.st b/src/SmaCC_Delphi_Forms/DelphiFormLiteralNode.class.st deleted file mode 100644 index 1a34b5302..000000000 --- a/src/SmaCC_Delphi_Forms/DelphiFormLiteralNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #DelphiFormLiteralNode, - #superclass : #DelphiFormParseNode, - #instVars : [ - 'value' - ], - #category : #'SmaCC_Delphi_Forms' -} - -{ #category : #generated } -DelphiFormLiteralNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitLiteral: self -] - -{ #category : #generated } -DelphiFormLiteralNode >> tokenVariables [ - ^ #(#value) -] - -{ #category : #generated } -DelphiFormLiteralNode >> value [ - ^ value -] - -{ #category : #generated } -DelphiFormLiteralNode >> value: aSmaCCToken [ - value := aSmaCCToken -] diff --git a/src/SmaCC_Delphi_Forms/DelphiFormNamedValueNode.class.st b/src/SmaCC_Delphi_Forms/DelphiFormNamedValueNode.class.st deleted file mode 100644 index 674f526b7..000000000 --- a/src/SmaCC_Delphi_Forms/DelphiFormNamedValueNode.class.st +++ /dev/null @@ -1,32 +0,0 @@ -Class { - #name : #DelphiFormNamedValueNode, - #superclass : #DelphiFormParseNode, - #instVars : [ - 'name' - ], - #category : #'SmaCC_Delphi_Forms' -} - -{ #category : #generated } -DelphiFormNamedValueNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitNamedValue: self -] - -{ #category : #generated } -DelphiFormNamedValueNode >> name [ - ^ name -] - -{ #category : #generated } -DelphiFormNamedValueNode >> name: aDelphiFormQualifiedNameNode [ - self name notNil - ifTrue: [ self name parent: nil ]. - name := aDelphiFormQualifiedNameNode. - self name notNil - ifTrue: [ self name parent: self ] -] - -{ #category : #generated } -DelphiFormNamedValueNode >> nodeVariables [ - ^ #(#name) -] diff --git a/src/SmaCC_Delphi_Forms/DelphiFormObjectArrayNode.class.st b/src/SmaCC_Delphi_Forms/DelphiFormObjectArrayNode.class.st deleted file mode 100644 index 57c37f6fb..000000000 --- a/src/SmaCC_Delphi_Forms/DelphiFormObjectArrayNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #DelphiFormObjectArrayNode, - #superclass : #DelphiFormParseNode, - #instVars : [ - 'left', - 'items', - 'right' - ], - #category : #'SmaCC_Delphi_Forms' -} - -{ #category : #generated } -DelphiFormObjectArrayNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitObjectArray: self -] - -{ #category : #generated } -DelphiFormObjectArrayNode >> compositeNodeVariables [ - ^ #(#items) -] - -{ #category : #'generated-initialize-release' } -DelphiFormObjectArrayNode >> initialize [ - super initialize. - items := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiFormObjectArrayNode >> items [ - ^ items -] - -{ #category : #generated } -DelphiFormObjectArrayNode >> items: anOrderedCollection [ - self setParents: self items to: nil. - items := anOrderedCollection. - self setParents: self items to: self -] - -{ #category : #generated } -DelphiFormObjectArrayNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiFormObjectArrayNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -DelphiFormObjectArrayNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiFormObjectArrayNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiFormObjectArrayNode >> tokenVariables [ - ^ #(#left #right) -] diff --git a/src/SmaCC_Delphi_Forms/DelphiFormObjectNode.class.st b/src/SmaCC_Delphi_Forms/DelphiFormObjectNode.class.st deleted file mode 100644 index 1d4a65b93..000000000 --- a/src/SmaCC_Delphi_Forms/DelphiFormObjectNode.class.st +++ /dev/null @@ -1,129 +0,0 @@ -Class { - #name : #DelphiFormObjectNode, - #superclass : #DelphiFormParseNode, - #instVars : [ - 'objectTypeToken', - 'nameToken', - 'colonToken', - 'typeToken', - 'left', - 'indexToken', - 'right', - 'properties', - 'endToken' - ], - #category : #'SmaCC_Delphi_Forms' -} - -{ #category : #generated } -DelphiFormObjectNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitObject: self -] - -{ #category : #generated } -DelphiFormObjectNode >> colonToken [ - ^ colonToken -] - -{ #category : #generated } -DelphiFormObjectNode >> colonToken: aSmaCCToken [ - colonToken := aSmaCCToken -] - -{ #category : #generated } -DelphiFormObjectNode >> compositeNodeVariables [ - ^ #(#properties) -] - -{ #category : #generated } -DelphiFormObjectNode >> endToken [ - ^ endToken -] - -{ #category : #generated } -DelphiFormObjectNode >> endToken: aSmaCCToken [ - endToken := aSmaCCToken -] - -{ #category : #generated } -DelphiFormObjectNode >> indexToken [ - ^ indexToken -] - -{ #category : #generated } -DelphiFormObjectNode >> indexToken: aSmaCCToken [ - indexToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -DelphiFormObjectNode >> initialize [ - super initialize. - properties := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiFormObjectNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiFormObjectNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -DelphiFormObjectNode >> nameToken [ - ^ nameToken -] - -{ #category : #generated } -DelphiFormObjectNode >> nameToken: aSmaCCToken [ - nameToken := aSmaCCToken -] - -{ #category : #generated } -DelphiFormObjectNode >> objectTypeToken [ - ^ objectTypeToken -] - -{ #category : #generated } -DelphiFormObjectNode >> objectTypeToken: aSmaCCToken [ - objectTypeToken := aSmaCCToken -] - -{ #category : #generated } -DelphiFormObjectNode >> properties [ - ^ properties -] - -{ #category : #generated } -DelphiFormObjectNode >> properties: anOrderedCollection [ - self setParents: self properties to: nil. - properties := anOrderedCollection. - self setParents: self properties to: self -] - -{ #category : #generated } -DelphiFormObjectNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiFormObjectNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiFormObjectNode >> tokenVariables [ - ^ #(#objectTypeToken #nameToken #colonToken #typeToken #left #indexToken #right #endToken) -] - -{ #category : #generated } -DelphiFormObjectNode >> typeToken [ - ^ typeToken -] - -{ #category : #generated } -DelphiFormObjectNode >> typeToken: aSmaCCToken [ - typeToken := aSmaCCToken -] diff --git a/src/SmaCC_Delphi_Forms/DelphiFormParseNode.class.st b/src/SmaCC_Delphi_Forms/DelphiFormParseNode.class.st deleted file mode 100644 index f84ab967a..000000000 --- a/src/SmaCC_Delphi_Forms/DelphiFormParseNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #DelphiFormParseNode, - #superclass : #SmaCCParseNode, - #category : #'SmaCC_Delphi_Forms' -} - -{ #category : #generated } -DelphiFormParseNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitParse: self -] diff --git a/src/SmaCC_Delphi_Forms/DelphiFormParseNodeVisitor.class.st b/src/SmaCC_Delphi_Forms/DelphiFormParseNodeVisitor.class.st deleted file mode 100644 index 5528ff15e..000000000 --- a/src/SmaCC_Delphi_Forms/DelphiFormParseNodeVisitor.class.st +++ /dev/null @@ -1,85 +0,0 @@ -Class { - #name : #DelphiFormParseNodeVisitor, - #superclass : #SmaCCParseNodeVisitor, - #category : #'SmaCC_Delphi_Forms' -} - -{ #category : #generated } -DelphiFormParseNodeVisitor >> visitArray: anArray [ - ^ self visitParse: anArray -] - -{ #category : #generated } -DelphiFormParseNodeVisitor >> visitBoolean: aBoolean [ - ^ self visitLiteral: aBoolean -] - -{ #category : #generated } -DelphiFormParseNodeVisitor >> visitByteArray: aByteArray [ - ^ self visitParse: aByteArray -] - -{ #category : #generated } -DelphiFormParseNodeVisitor >> visitCombinedString: aCombinedString [ - ^ self visitParse: aCombinedString -] - -{ #category : #generated } -DelphiFormParseNodeVisitor >> visitFloat: aFloat [ - ^ self visitLiteral: aFloat -] - -{ #category : #generated } -DelphiFormParseNodeVisitor >> visitInteger: anInteger [ - ^ self visitLiteral: anInteger -] - -{ #category : #generated } -DelphiFormParseNodeVisitor >> visitItem: anItem [ - ^ self visitParse: anItem -] - -{ #category : #generated } -DelphiFormParseNodeVisitor >> visitLiteral: aLiteral [ - ^ self visitParse: aLiteral -] - -{ #category : #generated } -DelphiFormParseNodeVisitor >> visitNamedValue: aNamedValue [ - ^ self visitParse: aNamedValue -] - -{ #category : #generated } -DelphiFormParseNodeVisitor >> visitObject: anObject [ - ^ self visitParse: anObject -] - -{ #category : #generated } -DelphiFormParseNodeVisitor >> visitObjectArray: anObjectArray [ - ^ self visitParse: anObjectArray -] - -{ #category : #generated } -DelphiFormParseNodeVisitor >> visitParse: aParse [ - ^ self visitSmaCCParseNode: aParse -] - -{ #category : #generated } -DelphiFormParseNodeVisitor >> visitProperty: aProperty [ - ^ self visitParse: aProperty -] - -{ #category : #generated } -DelphiFormParseNodeVisitor >> visitQualifiedName: aQualifiedName [ - ^ self visitParse: aQualifiedName -] - -{ #category : #generated } -DelphiFormParseNodeVisitor >> visitSet: aSet [ - ^ self visitParse: aSet -] - -{ #category : #generated } -DelphiFormParseNodeVisitor >> visitString: aString [ - ^ self visitLiteral: aString -] diff --git a/src/SmaCC_Delphi_Forms/DelphiFormParser.class.st b/src/SmaCC_Delphi_Forms/DelphiFormParser.class.st deleted file mode 100644 index 341bd3243..000000000 --- a/src/SmaCC_Delphi_Forms/DelphiFormParser.class.st +++ /dev/null @@ -1,549 +0,0 @@ -Class { - #name : #DelphiFormParser, - #superclass : #SmaCCGLRParser, - #category : #'SmaCC_Delphi_Forms' -} - -{ #category : #'generated-accessing' } -DelphiFormParser class >> cacheId [ - ^'2019-06-10T21:38:33.313871-05:00' -] - -{ #category : #generated } -DelphiFormParser class >> definitionComment [ -"%glr; -%ignorecase; -%id ; -%prefix DelphiForm; -%suffix Node; -%root Parse; -%hierarchy Literal (Boolean Float Integer String); -%start Property Object Value Item; - - : true | false - ; - - : | _ - ; - - : [0-9] - ; - - : (|)* - ; - - : \d+ - ; - - : \-? - ; - - : (\. | d | (\. ?)? e [\+\-]? ) - ; - - : (\' [^\']* \' | (\#\d+))+ - ; - - : ([0-9a-f]{2,2})+ - ; - - : \s+ - ; - - : (\` [^\`]* \`)+ - ; -Form - : Object - ; -Object - : ObjectType 'objectTypeToken' 'nameToken' "":"" 'colonToken' 'typeToken' Index Properties ""end"" 'endToken' {{Object}} - | ObjectType 'objectTypeToken' 'typeToken' Index Properties ""end"" 'endToken' {{Object}} - ; -ObjectType - : ""object"" - | ""inherited"" - | ""inline"" - ; -Index - : - | ""["" 'left' 'indexToken' ""]"" 'right' - ; -Properties - : - | Properties Property 'property' - ; -Property - : Assignment - | Object - ; -Assignment - : QualifiedName 'name' ""="" 'equalsToken' Value 'value' {{Property}} - ; -Value - : Number - | String - | Set - | QualifiedName 'name' {{NamedValue}} - | Array - | ByteArray - | Boolean - | ObjectArray - ; -Number - : 'value' {{Integer}} - | 'value' {{Float}} - ; -String - : 'value' {{String}} - | String 'left' ""+"" 'plus' 'right' {{CombinedString}} - ; -Set - : ""["" 'left' SetItems_ ""]"" 'right' {{Set}} - ; -SetItems_ - : - | SetItems - ; -SetItems - : 'item' - | SetItems "","" 'comma' 'item' - ; -Array - : ""("" 'left' Values "")"" 'right' {{Array}} - ; -Values - : - | Values Value 'value' - ; -ByteArray - : ""{"" 'left' ByteData ""}"" 'right' {{ByteArray}} - ; -ByteData - : - | ByteData 'line' - ; -Boolean - : 'value' {{Boolean}} - ; -ObjectArray - : ""<"" 'left' Items "">"" 'right' {{ObjectArray}} - ; -Items - : - | Items Item 'item' - ; -Item - : ""item"" 'itemToken' Properties ""end"" 'endToken' {{Item}} - ; -QualifiedName - : 'name' {{QualifiedName}} - | QualifiedName ""."" 'period' 'name' {{QualifiedName}} - ;" -] - -{ #category : #'file types' } -DelphiFormParser class >> fileExtension [ - ^ '.dfm' -] - -{ #category : #'file types' } -DelphiFormParser class >> fileExtensionType [ - ^ 'Delphi form files' -] - -{ #category : #generated } -DelphiFormParser class >> reduceTable [ -^#( - #(30 1 #liftFirstValue: 876546 false ) - #(30 1 #liftFirstValue: 876547 false ) - #(30 1 #liftFirstValue: 876545 false ) - #(28 1 #liftFirstValue: 614401 false ) - #(49 1 #reduceActionForQualifiedName1: 2039809 false ) - #(33 1 #liftFirstValue: 1045506 false ) - #(33 1 #liftFirstValue: 1045505 false ) - #(42 0 #reduceActionForValues1: 1679361 false ) - #(47 0 #reduceActionForValues1: 1935361 false ) - #(39 0 #reduceActionForSetItems_1: 1526785 false ) - #(44 0 #reduceActionForValues1: 1781761 false ) - #(45 1 #reduceActionForBoolean1: 1825793 false ) - #(36 1 #reduceActionForNumber1: 1293313 false ) - #(36 1 #reduceActionForNumber2: 1293314 false ) - #(37 1 #reduceActionForString1: 1367041 false ) - #(35 1 #liftFirstValue: 1167361 false ) - #(35 1 #liftFirstValue: 1167362 false ) - #(35 1 #liftFirstValue: 1167363 false ) - #(35 1 #liftFirstValue: 1167365 false ) - #(35 1 #liftFirstValue: 1167366 false ) - #(35 1 #liftFirstValue: 1167367 false ) - #(35 1 #liftFirstValue: 1167368 false ) - #(35 1 #reduceActionForValue4: 1167364 false ) - #(32 0 #reduceActionForValues1: 993281 false ) - #(31 0 #reduceActionForIndex1: 930817 false ) - #(40 1 #reduceActionForSetItems1: 1555457 false ) - #(39 1 #reduceActionForSetItems_2: 1526786 false ) - #(49 3 #reduceActionForQualifiedName2: 2039810 false ) - #(34 3 #reduceActionForAssignment1: 1082369 false ) - #(41 3 #reduceActionForArray1: 1626113 false ) - #(42 2 #reduceActionForValues2: 1679362 false ) - #(46 3 #reduceActionForObjectArray1: 1870849 false ) - #(47 2 #reduceActionForValues2: 1935362 false ) - #(38 3 #reduceActionForSet1: 1474561 false ) - #(43 3 #reduceActionForByteArray1: 1718273 false ) - #(44 2 #reduceActionForValues2: 1781762 false ) - #(37 3 #reduceActionForString2: 1367042 false ) - #(48 3 #reduceActionForItem1: 1971201 false ) - #(32 2 #reduceActionForValues2: 993282 false ) - #(40 3 #reduceActionForSetItems2: 1555458 false ) - #(31 3 #reduceActionForIndex2: 930818 false ) - #(29 5 #reduceActionForObject2: 632834 false ) - #(29 7 #reduceActionForObject1: 632833 false ) - ). -] - -{ #category : #'generated-accessing' } -DelphiFormParser class >> scannerClass [ - ^DelphiFormScanner -] - -{ #category : #generated } -DelphiFormParser class >> startingStateForForm [ - ^ 1 -] - -{ #category : #generated } -DelphiFormParser class >> startingStateForItem [ - ^ 5 -] - -{ #category : #generated } -DelphiFormParser class >> startingStateForObject [ - ^ 3 -] - -{ #category : #generated } -DelphiFormParser class >> startingStateForProperty [ - ^ 2 -] - -{ #category : #generated } -DelphiFormParser class >> startingStateForValue [ - ^ 4 -] - -{ #category : #generated } -DelphiFormParser class >> symbolNames [ - ^ #('"("' '")"' '"+"' '","' '"."' '":"' '"<"' '"="' '">"' '"["' '"]"' '"end"' '"inherited"' '"inline"' '"item"' '"object"' '"{"' '"}"' '' '' '' '' '' '' '' '' 'B e g i n' 'Form' 'Object' 'ObjectType' 'Index' 'Properties' 'Property' 'Assignment' 'Value' 'Number' 'String' 'Set' 'SetItems_' 'SetItems' 'Array' 'Values' 'ByteArray' 'ByteData' 'Boolean' 'ObjectArray' 'Items' 'Item' 'QualifiedName' 'E O F' 'error') -] - -{ #category : #generated } -DelphiFormParser class >> symbolTypes [ - ^ #(#SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #DelphiFormObjectNode #DelphiFormObjectNode #DelphiFormObjectNode #SmaCCToken #OrderedCollection #OrderedCollection #DelphiFormParseNode #DelphiFormPropertyNode #DelphiFormParseNode #DelphiFormLiteralNode #DelphiFormParseNode #DelphiFormSetNode #OrderedCollection #OrderedCollection #DelphiFormArrayNode #OrderedCollection #DelphiFormByteArrayNode #OrderedCollection #DelphiFormBooleanNode #DelphiFormObjectArrayNode #OrderedCollection #DelphiFormItemNode #DelphiFormQualifiedNameNode #SmaCCToken #SmaCCErrorNode) -] - -{ #category : #generated } -DelphiFormParser class >> transitionTable [ -^#( -#[1 0 45 0 13 0 45 0 14 0 45 0 16 0 37 0 28 0 37 0 29 0 45 0 30] -#[1 0 45 0 13 0 45 0 14 0 45 0 16 0 49 0 20 0 57 0 29 0 45 0 30 0 57 0 33 0 57 0 34 0 65 0 49] -#[1 0 45 0 13 0 45 0 14 0 45 0 16 0 69 0 29 0 45 0 30] -#[1 0 73 0 1 0 77 0 7 0 81 0 10 0 85 0 17 0 89 0 19 0 49 0 20 0 93 0 21 0 97 0 22 0 101 0 23 0 105 0 35 0 105 0 36 0 113 0 37 0 105 0 38 0 105 0 41 0 105 0 43 0 105 0 45 0 105 0 46 0 137 0 49] -#[1 0 141 0 15 0 145 0 48] -#[0 0 6 0 20] -#[0 0 10 0 20] -#[0 0 14 0 20] -#[0 0 0 0 50] -#[0 0 18 0 50] -#[0 0 149 0 20] -#[0 0 22 0 1 0 2 0 5 0 7 0 8 0 10 0 12 0 13 0 14 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 50] -#[0 0 26 0 12 0 13 0 14 0 16 0 20 0 50] -#[0 0 0 0 50] -#[0 0 30 0 12 0 13 0 14 0 16 0 20 0 50] -#[1 0 153 0 5 0 157 0 8] -#[0 0 0 0 50] -#[1 0 34 0 1 0 34 0 2 0 34 0 7 0 34 0 10 0 34 0 17 0 34 0 19 0 34 0 20 0 34 0 21 0 34 0 22 0 34 0 23 0 161 0 42] -#[1 0 38 0 9 0 38 0 15 0 165 0 47] -#[1 0 42 0 11 0 169 0 20 0 173 0 39 0 177 0 40] -#[1 0 46 0 18 0 46 0 24 0 181 0 44] -#[0 0 50 0 1 0 2 0 7 0 10 0 12 0 13 0 14 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 50] -#[0 0 54 0 1 0 2 0 7 0 10 0 12 0 13 0 14 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 50] -#[0 0 58 0 1 0 2 0 7 0 10 0 12 0 13 0 14 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 50] -#[0 0 62 0 1 0 2 0 3 0 7 0 10 0 12 0 13 0 14 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 50] -#[0 0 0 0 50] -#[0 0 66 0 1 0 2 0 7 0 10 0 12 0 13 0 14 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 50] -#[1 0 70 0 1 0 70 0 2 0 185 0 3 0 70 0 7 0 70 0 10 0 70 0 12 0 70 0 13 0 70 0 14 0 70 0 16 0 70 0 17 0 70 0 19 0 70 0 20 0 70 0 21 0 70 0 22 0 70 0 23 0 70 0 50] -#[0 0 74 0 1 0 2 0 7 0 10 0 12 0 13 0 14 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 50] -#[0 0 78 0 1 0 2 0 7 0 10 0 12 0 13 0 14 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 50] -#[0 0 82 0 1 0 2 0 7 0 10 0 12 0 13 0 14 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 50] -#[0 0 86 0 1 0 2 0 7 0 10 0 12 0 13 0 14 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 50] -#[0 0 90 0 1 0 2 0 7 0 10 0 12 0 13 0 14 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 50] -#[1 0 94 0 1 0 94 0 2 0 153 0 5 0 94 0 7 0 94 0 10 0 94 0 12 0 94 0 13 0 94 0 14 0 94 0 16 0 94 0 17 0 94 0 19 0 94 0 20 0 94 0 21 0 94 0 22 0 94 0 23 0 94 0 50] -#[1 0 98 0 12 0 98 0 13 0 98 0 14 0 98 0 16 0 98 0 20 0 189 0 32] -#[0 0 0 0 50] -#[1 0 193 0 6 0 197 0 10 0 102 0 12 0 102 0 13 0 102 0 14 0 102 0 16 0 102 0 20 0 201 0 31] -#[0 0 205 0 20] -#[1 0 73 0 1 0 77 0 7 0 81 0 10 0 85 0 17 0 89 0 19 0 49 0 20 0 93 0 21 0 97 0 22 0 101 0 23 0 209 0 35 0 209 0 36 0 113 0 37 0 209 0 38 0 209 0 41 0 209 0 43 0 209 0 45 0 209 0 46 0 137 0 49] -#[1 0 73 0 1 0 213 0 2 0 77 0 7 0 81 0 10 0 85 0 17 0 89 0 19 0 49 0 20 0 93 0 21 0 97 0 22 0 101 0 23 0 217 0 35 0 217 0 36 0 113 0 37 0 217 0 38 0 217 0 41 0 217 0 43 0 217 0 45 0 217 0 46 0 137 0 49] -#[1 0 221 0 9 0 141 0 15 0 225 0 48] -#[0 0 106 0 4 0 11] -#[0 0 229 0 11] -#[1 0 233 0 4 0 110 0 11] -#[1 0 237 0 18 0 241 0 24] -#[0 0 245 0 23] -#[1 0 249 0 12 0 45 0 13 0 45 0 14 0 45 0 16 0 49 0 20 0 253 0 29 0 45 0 30 0 253 0 33 0 253 0 34 0 65 0 49] -#[0 1 1 0 20] -#[0 1 5 0 21] -#[1 0 98 0 12 0 98 0 13 0 98 0 14 0 98 0 16 0 98 0 20 1 9 0 32] -#[0 0 114 0 1 0 2 0 5 0 7 0 8 0 10 0 12 0 13 0 14 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 50] -#[0 0 118 0 12 0 13 0 14 0 16 0 20 0 50] -#[0 0 122 0 1 0 2 0 7 0 10 0 12 0 13 0 14 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 50] -#[0 0 126 0 1 0 2 0 7 0 10 0 17 0 19 0 20 0 21 0 22 0 23] -#[0 0 130 0 1 0 2 0 7 0 10 0 12 0 13 0 14 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 50] -#[0 0 134 0 9 0 15] -#[0 0 138 0 1 0 2 0 7 0 10 0 12 0 13 0 14 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 50] -#[0 1 13 0 20] -#[0 0 142 0 1 0 2 0 7 0 10 0 12 0 13 0 14 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 50] -#[0 0 146 0 18 0 24] -#[0 0 150 0 1 0 2 0 3 0 7 0 10 0 12 0 13 0 14 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 50] -#[0 0 154 0 9 0 15 0 50] -#[0 0 158 0 12 0 13 0 14 0 16 0 20] -#[1 0 197 0 10 0 102 0 12 0 102 0 13 0 102 0 14 0 102 0 16 0 102 0 20 1 17 0 31] -#[0 1 21 0 11] -#[1 1 25 0 12 0 45 0 13 0 45 0 14 0 45 0 16 0 49 0 20 0 253 0 29 0 45 0 30 0 253 0 33 0 253 0 34 0 65 0 49] -#[0 0 162 0 4 0 11] -#[1 0 98 0 12 0 98 0 13 0 98 0 14 0 98 0 16 0 98 0 20 1 29 0 32] -#[0 0 166 0 12 0 13 0 14 0 16 0 20] -#[0 0 170 0 12 0 13 0 14 0 16 0 20 0 50] -#[1 1 33 0 12 0 45 0 13 0 45 0 14 0 45 0 16 0 49 0 20 0 253 0 29 0 45 0 30 0 253 0 33 0 253 0 34 0 65 0 49] -#[0 0 174 0 12 0 13 0 14 0 16 0 20 0 50] - ). -] - -{ #category : #'generated-reduction actions' } -DelphiFormParser >> reduceActionForArray1: nodes [ - | result | - result := DelphiFormArrayNode new. - result left: (nodes at: 1). - result addNodes: (nodes at: 2) to: result values. - result right: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiFormParser >> reduceActionForAssignment1: nodes [ - | result | - result := DelphiFormPropertyNode new. - result name: (nodes at: 1). - result equalsToken: (nodes at: 2). - result value: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiFormParser >> reduceActionForBoolean1: nodes [ - | result | - result := DelphiFormBooleanNode new. - result value: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiFormParser >> reduceActionForByteArray1: nodes [ - | result | - result := DelphiFormByteArrayNode new. - result left: (nodes at: 1). - result addTokens: (nodes at: 2) to: result lines. - result right: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiFormParser >> reduceActionForIndex1: nodes [ - | result | - result := Array new: 3. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiFormParser >> reduceActionForIndex2: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiFormParser >> reduceActionForItem1: nodes [ - | result | - result := DelphiFormItemNode new. - result itemToken: (nodes at: 1). - result addNodes: (nodes at: 2) to: result properties. - result endToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiFormParser >> reduceActionForNumber1: nodes [ - | result | - result := DelphiFormIntegerNode new. - result value: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiFormParser >> reduceActionForNumber2: nodes [ - | result | - result := DelphiFormFloatNode new. - result value: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiFormParser >> reduceActionForObject1: nodes [ - | result | - result := DelphiFormObjectNode new. - result objectTypeToken: (nodes at: 1). - result nameToken: (nodes at: 2). - result colonToken: (nodes at: 3). - result typeToken: (nodes at: 4). - result left: ((nodes at: 5) at: 1). - result indexToken: ((nodes at: 5) at: 2). - result right: ((nodes at: 5) at: 3). - result addNodes: (nodes at: 6) to: result properties. - result endToken: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiFormParser >> reduceActionForObject2: nodes [ - | result | - result := DelphiFormObjectNode new. - result objectTypeToken: (nodes at: 1). - result typeToken: (nodes at: 2). - result left: ((nodes at: 3) at: 1). - result indexToken: ((nodes at: 3) at: 2). - result right: ((nodes at: 3) at: 3). - result addNodes: (nodes at: 4) to: result properties. - result endToken: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiFormParser >> reduceActionForObjectArray1: nodes [ - | result | - result := DelphiFormObjectArrayNode new. - result left: (nodes at: 1). - result addNodes: (nodes at: 2) to: result items. - result right: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiFormParser >> reduceActionForQualifiedName1: nodes [ - | result | - result := DelphiFormQualifiedNameNode new. - result addToken: (nodes at: 1) to: result names. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiFormParser >> reduceActionForQualifiedName2: nodes [ - | result | - result := nodes at: 1. - result addToken: (nodes at: 2) to: result periods. - result addToken: (nodes at: 3) to: result names. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiFormParser >> reduceActionForSet1: nodes [ - | result | - result := DelphiFormSetNode new. - result left: (nodes at: 1). - result addTokens: ((nodes at: 2) at: 1) to: result items. - result addTokens: ((nodes at: 2) at: 2) to: result commas. - result right: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiFormParser >> reduceActionForSetItems1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiFormParser >> reduceActionForSetItems2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 2). - self add: (nodes at: 3) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiFormParser >> reduceActionForSetItems_1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiFormParser >> reduceActionForSetItems_2: nodes [ - | result | - result := nodes at: 1. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiFormParser >> reduceActionForString1: nodes [ - | result | - result := DelphiFormStringNode new. - result value: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiFormParser >> reduceActionForString2: nodes [ - | result | - result := DelphiFormCombinedStringNode new. - result left: (nodes at: 1). - result plus: (nodes at: 2). - result right: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiFormParser >> reduceActionForValue4: nodes [ - | result | - result := DelphiFormNamedValueNode new. - result name: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiFormParser >> reduceActionForValues1: nodes [ - | result | - result := OrderedCollection new: 2. - ^ result -] - -{ #category : #'generated-reduction actions' } -DelphiFormParser >> reduceActionForValues2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: result. - ^ result -] - -{ #category : #testing } -DelphiFormParser >> tryAllTokens [ - ^ currentToken ids includes: scanner bytesId -] diff --git a/src/SmaCC_Delphi_Forms/DelphiFormPropertyNode.class.st b/src/SmaCC_Delphi_Forms/DelphiFormPropertyNode.class.st deleted file mode 100644 index ea6f55918..000000000 --- a/src/SmaCC_Delphi_Forms/DelphiFormPropertyNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #DelphiFormPropertyNode, - #superclass : #DelphiFormParseNode, - #instVars : [ - 'name', - 'equalsToken', - 'value' - ], - #category : #'SmaCC_Delphi_Forms' -} - -{ #category : #generated } -DelphiFormPropertyNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitProperty: self -] - -{ #category : #generated } -DelphiFormPropertyNode >> equalsToken [ - ^ equalsToken -] - -{ #category : #generated } -DelphiFormPropertyNode >> equalsToken: aSmaCCToken [ - equalsToken := aSmaCCToken -] - -{ #category : #generated } -DelphiFormPropertyNode >> name [ - ^ name -] - -{ #category : #generated } -DelphiFormPropertyNode >> name: aDelphiFormQualifiedNameNode [ - self name notNil - ifTrue: [ self name parent: nil ]. - name := aDelphiFormQualifiedNameNode. - self name notNil - ifTrue: [ self name parent: self ] -] - -{ #category : #generated } -DelphiFormPropertyNode >> nodeVariables [ - ^ #(#name #value) -] - -{ #category : #generated } -DelphiFormPropertyNode >> tokenVariables [ - ^ #(#equalsToken) -] - -{ #category : #generated } -DelphiFormPropertyNode >> value [ - ^ value -] - -{ #category : #generated } -DelphiFormPropertyNode >> value: aDelphiFormParseNode [ - self value notNil - ifTrue: [ self value parent: nil ]. - value := aDelphiFormParseNode. - self value notNil - ifTrue: [ self value parent: self ] -] diff --git a/src/SmaCC_Delphi_Forms/DelphiFormQualifiedNameNode.class.st b/src/SmaCC_Delphi_Forms/DelphiFormQualifiedNameNode.class.st deleted file mode 100644 index 1a588a855..000000000 --- a/src/SmaCC_Delphi_Forms/DelphiFormQualifiedNameNode.class.st +++ /dev/null @@ -1,46 +0,0 @@ -Class { - #name : #DelphiFormQualifiedNameNode, - #superclass : #DelphiFormParseNode, - #instVars : [ - 'names', - 'periods' - ], - #category : #'SmaCC_Delphi_Forms' -} - -{ #category : #generated } -DelphiFormQualifiedNameNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitQualifiedName: self -] - -{ #category : #generated } -DelphiFormQualifiedNameNode >> compositeTokenVariables [ - ^ #(#names #periods) -] - -{ #category : #'generated-initialize-release' } -DelphiFormQualifiedNameNode >> initialize [ - super initialize. - names := OrderedCollection new: 2. - periods := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiFormQualifiedNameNode >> names [ - ^ names -] - -{ #category : #generated } -DelphiFormQualifiedNameNode >> names: anOrderedCollection [ - names := anOrderedCollection -] - -{ #category : #generated } -DelphiFormQualifiedNameNode >> periods [ - ^ periods -] - -{ #category : #generated } -DelphiFormQualifiedNameNode >> periods: anOrderedCollection [ - periods := anOrderedCollection -] diff --git a/src/SmaCC_Delphi_Forms/DelphiFormScanner.class.st b/src/SmaCC_Delphi_Forms/DelphiFormScanner.class.st deleted file mode 100644 index 925ddbd98..000000000 --- a/src/SmaCC_Delphi_Forms/DelphiFormScanner.class.st +++ /dev/null @@ -1,348 +0,0 @@ -Class { - #name : #DelphiFormScanner, - #superclass : #SmaCCScanner, - #category : #'SmaCC_Delphi_Forms' -} - -{ #category : #'generated-initialization' } -DelphiFormScanner class >> initializeKeywordMap [ - keywordMap := Dictionary new. - #(#(20 'END' 12) #(20 'FALSE' 19) #(20 'INHERITED' 13) #(20 'INLINE' 14) #(20 'ITEM' 15) #(20 'OBJECT' 16) #(20 'TRUE' 19)) - do: [ :each | - (keywordMap at: each first ifAbsentPut: [ Dictionary new ]) - at: (each at: 2) - put: each last ]. - ^ keywordMap -] - -{ #category : #generated } -DelphiFormScanner >> bytesId [ - ^ 24 -] - -{ #category : #generated } -DelphiFormScanner >> emptySymbolTokenId [ - ^ 50 -] - -{ #category : #generated } -DelphiFormScanner >> errorTokenId [ - ^ 51 -] - -{ #category : #generated } -DelphiFormScanner >> keywordFor: aString [ - ^ aString asUppercase -] - -{ #category : #generated } -DelphiFormScanner >> scan1 [ - self step. - currentCharacter isDigit - ifTrue: [ [ self recordMatch: #(23). - self step. - currentCharacter == $# - ifTrue: [ ^ self scan1 ]. - currentCharacter == $' - ifTrue: [ ^ self scan2 ]. - currentCharacter isDigit ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiFormScanner >> scan10 [ - self recordMatch: #(22 24). - self step. - currentCharacter isDigit - ifTrue: [ ^ self scan9 ]. - ((currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ]) - ifTrue: [ ^ self scan8 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiFormScanner >> scan11 [ - self recordMatch: #(20). - self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self recordMatch: #(20 24). - self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ ^ self scan11 ] ]. - (currentCharacter isLetter or: [ currentCharacter == $_ ]) - ifTrue: [ [ self recordMatch: #(20). - self step. - currentCharacter isAlphaNumeric or: [ currentCharacter == $_ ] ] - whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiFormScanner >> scan12 [ - [ self step. - currentCharacter == $` - ifTrue: [ self recordMatch: #(26). - self step. - currentCharacter == $` - ifTrue: [ ^ self scan12 ]. - ^ self reportLastMatch ]. - true ] whileTrue -] - -{ #category : #generated } -DelphiFormScanner >> scan2 [ - [ self step. - currentCharacter == $' - ifTrue: [ self recordMatch: #(23). - self step. - currentCharacter == $# - ifTrue: [ ^ self scan1 ]. - currentCharacter == $' - ifTrue: [ ^ self scan2 ]. - ^ self reportLastMatch ]. - true ] whileTrue -] - -{ #category : #generated } -DelphiFormScanner >> scan3 [ - self step. - currentCharacter isDigit - ifTrue: [ [ self recordMatch: #(22). - self step. - currentCharacter isDigit ] whileTrue ]. - ('Ee' includes: currentCharacter) - ifTrue: [ ^ self scan4 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiFormScanner >> scan4 [ - self step. - currentCharacter isDigit - ifTrue: [ [ self recordMatch: #(22). - self step. - currentCharacter isDigit ] whileTrue. - ^ self reportLastMatch ]. - ('+-' includes: currentCharacter) - ifTrue: [ ^ self scan5 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiFormScanner >> scan5 [ - self step. - currentCharacter isDigit - ifTrue: [ [ self recordMatch: #(22). - self step. - currentCharacter isDigit ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiFormScanner >> scan6 [ - self recordMatch: #(21). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan3 ]. - currentCharacter isDigit - ifTrue: - [ ^ self scan6X1 ]. - ('Dd' includes: currentCharacter) - ifTrue: [ self recordMatch: #(22 24). - self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ ^ self scan8 ]. - ^ self reportLastMatch ]. - ('Ee' includes: currentCharacter) - ifTrue: [ self recordMatch: #(24). - self step. - currentCharacter isDigit - ifTrue: [ ^ self scan9 ]. - ('+-' includes: currentCharacter) - ifTrue: [ ^ self scan5 ]. - ((currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ]) - ifTrue: [ ^ self scan8 ]. - ^ self reportLastMatch ]. - ((currentCharacter between: $A and: $C) - or: [ currentCharacter == $F - or: [ (currentCharacter between: $a and: $c) - or: [ currentCharacter == $f ] ] ]) - ifTrue: [ ^ self scan7 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiFormScanner >> scan6X1 [ - self recordMatch: #(21 24). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan3 ]. - currentCharacter isDigit - ifTrue: [ ^ self scan6 ]. - ('Dd' includes: currentCharacter) - ifTrue: [ self recordMatch: #(22). - self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ ^ self scan7 ]. - ^ self reportLastMatch ]. - ('Ee' includes: currentCharacter) - ifTrue: [ self step. - currentCharacter isDigit - ifTrue: [ ^ self scan10 ]. - ('+-' includes: currentCharacter) - ifTrue: [ ^ self scan5 ]. - ((currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ]) - ifTrue: [ ^ self scan7 ]. - ^ self reportLastMatch ]. - ((currentCharacter between: $A and: $C) - or: [ currentCharacter == $F - or: [ (currentCharacter between: $a and: $c) - or: [ currentCharacter == $f ] ] ]) - ifTrue: [ ^ self scan8 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiFormScanner >> scan7 [ - self recordMatch: #(24). - self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ ^ self scan8 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiFormScanner >> scan8 [ - self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ ^ self scan7 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiFormScanner >> scan9 [ - self recordMatch: #(22). - self step. - currentCharacter isDigit - ifTrue: [ ^ self scan10 ]. - ((currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ]) - ifTrue: [ ^ self scan7 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiFormScanner >> scanForToken [ - self step. - currentCharacter == $# - ifTrue: [ ^ self scan1 ]. - currentCharacter == $' - ifTrue: [ ^ self scan2 ]. - currentCharacter == $( - ifTrue: [ ^ self recordAndReportMatch: #(1) ]. - currentCharacter == $) - ifTrue: [ ^ self recordAndReportMatch: #(2) ]. - currentCharacter == $+ - ifTrue: [ ^ self recordAndReportMatch: #(3) ]. - currentCharacter == $, - ifTrue: [ ^ self recordAndReportMatch: #(4) ]. - currentCharacter == $- - ifTrue: - [ ^ self scanForTokenX1 ]. - currentCharacter == $. - ifTrue: [ ^ self recordAndReportMatch: #(5) ]. - currentCharacter == $: - ifTrue: [ ^ self recordAndReportMatch: #(6) ]. - currentCharacter == $< - ifTrue: [ ^ self recordAndReportMatch: #(7) ]. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(8) ]. - currentCharacter == $> - ifTrue: [ ^ self recordAndReportMatch: #(9) ]. - ^ self scanForTokenX4 -] - -{ #category : #generated } -DelphiFormScanner >> scanForTokenX1 [ - self step. - currentCharacter isDigit - ifTrue: [ [ self recordMatch: #(21). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan3 ]. - currentCharacter isDigit ] whileTrue. - ('Dd' includes: currentCharacter) - ifTrue: [ ^ self recordAndReportMatch: #(22) ]. - ('Ee' includes: currentCharacter) - ifTrue: [ ^ self scan4 ] ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiFormScanner >> scanForTokenX2 [ - [ self recordMatch: #(25). - self step. - currentCharacter isSeparator - or: [ currentCharacter == Character pageUp ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiFormScanner >> scanForTokenX3 [ - [ self recordMatch: #(20). - self step. - currentCharacter isAlphaNumeric or: [ currentCharacter == $_ ] ] - whileTrue -] - -{ #category : #generated } -DelphiFormScanner >> scanForTokenX4 [ - currentCharacter == $[ - ifTrue: [ ^ self recordAndReportMatch: #(10) ]. - currentCharacter == $] - ifTrue: [ ^ self recordAndReportMatch: #(11) ]. - currentCharacter == $` - ifTrue: [ ^ self scan12 ]. - currentCharacter == ${ - ifTrue: [ ^ self recordAndReportMatch: #(17) ]. - currentCharacter == $} - ifTrue: [ ^ self recordAndReportMatch: #(18) ]. - currentCharacter isDigit - ifTrue: [ ^ self scan6 ]. - (currentCharacter isSeparator - or: [ currentCharacter == Character pageUp ]) - ifTrue: - [ ^ self scanForTokenX2 ]. - ((currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ]) - ifTrue: [ ^ self scan11 ]. - (currentCharacter isLetter or: [ currentCharacter == $_ ]) - ifTrue: - [ self scanForTokenX3 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -DelphiFormScanner >> tokenActions [ - ^ #(nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil #whitespace #patternToken) -] - -{ #category : #generated } -DelphiFormScanner >> tokenClass [ - ^SmaCCCaseInsensitiveToken -] diff --git a/src/SmaCC_Delphi_Forms/DelphiFormSetNode.class.st b/src/SmaCC_Delphi_Forms/DelphiFormSetNode.class.st deleted file mode 100644 index 8ac13f945..000000000 --- a/src/SmaCC_Delphi_Forms/DelphiFormSetNode.class.st +++ /dev/null @@ -1,73 +0,0 @@ -Class { - #name : #DelphiFormSetNode, - #superclass : #DelphiFormParseNode, - #instVars : [ - 'left', - 'items', - 'commas', - 'right' - ], - #category : #'SmaCC_Delphi_Forms' -} - -{ #category : #generated } -DelphiFormSetNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitSet: self -] - -{ #category : #generated } -DelphiFormSetNode >> commas [ - ^ commas -] - -{ #category : #generated } -DelphiFormSetNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -DelphiFormSetNode >> compositeTokenVariables [ - ^ #(#items #commas) -] - -{ #category : #'generated-initialize-release' } -DelphiFormSetNode >> initialize [ - super initialize. - items := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -DelphiFormSetNode >> items [ - ^ items -] - -{ #category : #generated } -DelphiFormSetNode >> items: anOrderedCollection [ - items := anOrderedCollection -] - -{ #category : #generated } -DelphiFormSetNode >> left [ - ^ left -] - -{ #category : #generated } -DelphiFormSetNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -DelphiFormSetNode >> right [ - ^ right -] - -{ #category : #generated } -DelphiFormSetNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -DelphiFormSetNode >> tokenVariables [ - ^ #(#left #right) -] diff --git a/src/SmaCC_Delphi_Forms/DelphiFormStringNode.class.st b/src/SmaCC_Delphi_Forms/DelphiFormStringNode.class.st deleted file mode 100644 index 2e2244182..000000000 --- a/src/SmaCC_Delphi_Forms/DelphiFormStringNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #DelphiFormStringNode, - #superclass : #DelphiFormLiteralNode, - #category : #'SmaCC_Delphi_Forms' -} - -{ #category : #generated } -DelphiFormStringNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitString: self -] diff --git a/src/SmaCC_Delphi_Forms/package.st b/src/SmaCC_Delphi_Forms/package.st deleted file mode 100644 index f2ae266e3..000000000 --- a/src/SmaCC_Delphi_Forms/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_Delphi_Forms' } diff --git a/src/SmaCC_Development/Collection.extension.st b/src/SmaCC_Development/Collection.extension.st deleted file mode 100644 index e0dd0a09a..000000000 --- a/src/SmaCC_Development/Collection.extension.st +++ /dev/null @@ -1,12 +0,0 @@ -Extension { #name : #Collection } - -{ #category : #'*SmaCC_Development' } -Collection >> smaccIntersect: aCollection [ - ^ self select: [ :each | aCollection includes: each ] -] - -{ #category : #'*SmaCC_Development' } -Collection >> smaccRemoveAll: aCollection [ - aCollection do: [ :each | self remove: each ifAbsent: [ ] ]. - ^ aCollection -] diff --git a/src/SmaCC_Development/SmaCCAcceptAction.class.st b/src/SmaCC_Development/SmaCCAcceptAction.class.st deleted file mode 100644 index 589a6bec6..000000000 --- a/src/SmaCC_Development/SmaCCAcceptAction.class.st +++ /dev/null @@ -1,20 +0,0 @@ -" -SmaCCAcceptAction represents the LR accept action. - - -" -Class { - #name : #SmaCCAcceptAction, - #superclass : #SmaCCPrimitiveAction, - #category : #'SmaCC_Development-Actions' -} - -{ #category : #accessing } -SmaCCAcceptAction class >> id [ - ^ 2r00 -] - -{ #category : #merging } -SmaCCAcceptAction >> mergeWith: aSmaCCAction prefer: aClass [ - ^ self -] diff --git a/src/SmaCC_Development/SmaCCAction.class.st b/src/SmaCC_Development/SmaCCAction.class.st deleted file mode 100644 index 70ad158b0..000000000 --- a/src/SmaCC_Development/SmaCCAction.class.st +++ /dev/null @@ -1,93 +0,0 @@ -" -SmaCCAction is an abstract class that represent actions (shift, reduce, accept, reject) in the LR parser to be performed for a specific state/symbol pair. - -Subclasses must implement the following messages: - accessing - id - lr1Item - private - mergeWith:prefer: - - -" -Class { - #name : #SmaCCAction, - #superclass : #Object, - #category : #'SmaCC_Development-Actions' -} - -{ #category : #comparing } -SmaCCAction >> = anObject [ - ^ self class = anObject class - and: [ self symbol = anObject symbol and: [ self rhs = anObject rhs ] ] -] - -{ #category : #comparing } -SmaCCAction >> hash [ - ^ self symbol hash bitXor: self rhs hash -] - -{ #category : #accessing } -SmaCCAction >> id [ - ^ self subclassResponsibility -] - -{ #category : #testing } -SmaCCAction >> isAmbiguous [ - ^ false -] - -{ #category : #testing } -SmaCCAction >> isReduce [ - ^ false -] - -{ #category : #testing } -SmaCCAction >> isReject [ - ^ false -] - -{ #category : #testing } -SmaCCAction >> isShift [ - ^ false -] - -{ #category : #accessing } -SmaCCAction >> lr1Item [ - ^ self subclassResponsibility -] - -{ #category : #merging } -SmaCCAction >> mergeWith: aSmaCCAction prefer: aClass [ - ^ self subclassResponsibility -] - -{ #category : #accessing } -SmaCCAction >> precedence [ - ^ self lr1Item precedence -] - -{ #category : #accessing } -SmaCCAction >> preferredAction [ - ^ self -] - -{ #category : #accessing } -SmaCCAction >> rhs [ - ^ self lr1Item rhs -] - -{ #category : #'error handling' } -SmaCCAction >> signalAllWarnings [ - -] - -{ #category : #accessing } -SmaCCAction >> size [ - ^ self rhs size -] - -{ #category : #accessing } -SmaCCAction >> symbol [ - ^ self rhs productionSymbol -] diff --git a/src/SmaCC_Development/SmaCCAlternationRegexNode.extension.st b/src/SmaCC_Development/SmaCCAlternationRegexNode.extension.st deleted file mode 100644 index 6ac68e294..000000000 --- a/src/SmaCC_Development/SmaCCAlternationRegexNode.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #SmaCCAlternationRegexNode } - -{ #category : #'*SmaCC_Development' } -SmaCCAlternationRegexNode >> asRegularExpression [ - ^ SmaCCOrRENode nodes: (self items collect: [ :each | each regularExpression ]) -] diff --git a/src/SmaCC_Development/SmaCCAmbiguousAction.class.st b/src/SmaCC_Development/SmaCCAmbiguousAction.class.st deleted file mode 100644 index cdfe890cb..000000000 --- a/src/SmaCC_Development/SmaCCAmbiguousAction.class.st +++ /dev/null @@ -1,51 +0,0 @@ -" -SmaCCAmbiguousAction represents several conflicting actions for a state/symbol. If we are creating a GLR parser then all actions will be performed. Otherwise, we'll pick one of the actions to be performed preferring shift actions over reduce actions. -" -Class { - #name : #SmaCCAmbiguousAction, - #superclass : #SmaCCCompositeAction, - #category : #'SmaCC_Development-Actions' -} - -{ #category : #'accessing-actions' } -SmaCCAmbiguousAction >> addAction: aSmaCCAction [ - aSmaCCAction isAmbiguous - ifTrue: [ actions addAll: aSmaCCAction actions ] - ifFalse: [ super addAction: aSmaCCAction ] -] - -{ #category : #'error handling' } -SmaCCAmbiguousAction >> errorType [ - | sortedActions | - sortedActions := self sortedActions. - ^ sortedActions first class = sortedActions last class - ifTrue: [ 'Reduce/Reduce Conflict' ] - ifFalse: [ 'Shift/Reduce Conflict' ] -] - -{ #category : #testing } -SmaCCAmbiguousAction >> isAmbiguous [ - ^ true -] - -{ #category : #merging } -SmaCCAmbiguousAction >> mergeWith: aSmaCCAction prefer: aClass [ - aSmaCCAction isReject - ifTrue: [ ^ self ]. - aSmaCCAction isAmbiguous - ifTrue: [ actions addAll: aSmaCCAction actions ] - ifFalse: [ actions add: aSmaCCAction ]. - ^ self -] - -{ #category : #accessing } -SmaCCAmbiguousAction >> preferredAction [ - ^ self sortedActions first -] - -{ #category : #accessing } -SmaCCAmbiguousAction >> sortedActions [ - "When in doubt shift the token" - - ^ actions asSortedCollection: [ :a :b | a id <= b id ] -] diff --git a/src/SmaCC_Development/SmaCCCharacterBlockRegexNode.extension.st b/src/SmaCC_Development/SmaCCCharacterBlockRegexNode.extension.st deleted file mode 100644 index 2222b3328..000000000 --- a/src/SmaCC_Development/SmaCCCharacterBlockRegexNode.extension.st +++ /dev/null @@ -1,39 +0,0 @@ -Extension { #name : #SmaCCCharacterBlockRegexNode } - -{ #category : #'*SmaCC_Development' } -SmaCCCharacterBlockRegexNode >> asRegularExpression [ - | characters aStream invert node | - aStream := ReadStream on: (block value copyFrom: 2 to: block value size - 1). - characters := OrderedCollection new. - invert := aStream peekFor: $^. - [ aStream atEnd ] whileFalse: [ characters addAll: (self charactersFor: aStream) ]. - node := SmaCCCharacterRENode characters: (SmaCCCharacterSet withAll: characters). - invert - ifTrue: [ node := SmaCCNotRENode on: node ]. - ^ node -] - -{ #category : #'*SmaCC_Development' } -SmaCCCharacterBlockRegexNode >> charactersFor: aStream [ - | characters char endCharacters | - aStream atEnd - ifTrue: [ self reportCharacterBlockError ]. - char := aStream next. - characters := char == $\ - ifTrue: [ (self nodeFor: aStream) characters ] - ifFalse: [ OrderedCollection with: char ]. - (characters size = 1 and: [ aStream peekFor: $- ]) - ifFalse: [ ^ characters ]. - endCharacters := self charactersFor: aStream. - endCharacters size > 1 - ifTrue: [ self reportCharacterBlockError ]. - ^ (characters first asInteger to: endCharacters first asInteger) collect: [ :each | Character value: each ] -] - -{ #category : #'*SmaCC_Development' } -SmaCCCharacterBlockRegexNode >> reportCharacterBlockError [ - SmaCCParserError new - messageText: 'Invalid character block'; - tag: block; - signal -] diff --git a/src/SmaCC_Development/SmaCCCharacterEdge.class.st b/src/SmaCC_Development/SmaCCCharacterEdge.class.st deleted file mode 100644 index 585cd436c..000000000 --- a/src/SmaCC_Development/SmaCCCharacterEdge.class.st +++ /dev/null @@ -1,72 +0,0 @@ -" -SmaCCCharacterEdge is a SmaCCEdge for Characters. - -" -Class { - #name : #SmaCCCharacterEdge, - #superclass : #SmaCCEdge, - #instVars : [ - 'codeSizeEstimate' - ], - #category : #'SmaCC_Development-DFA/NFA' -} - -{ #category : #comparing } -SmaCCCharacterEdge >> <= aSmaCCEdge [ - ^ self class = aSmaCCEdge class - and: [ self transitionObjects <= aSmaCCEdge transitionObjects ] -] - -{ #category : #compiling } -SmaCCCharacterEdge >> codeSizeEstimate [ - ^ codeSizeEstimate - ifNil: [ | last size | - size := 1. - last := transitionObjects first asInteger - 1. - transitionObjects - do: [ :each | - each asInteger - 1 = last - ifFalse: [ size := size + 1 ]. - last := each asInteger ]. - codeSizeEstimate := size * 8 + 4 ] -] - -{ #category : #compiling } -SmaCCCharacterEdge >> dispatchTo: aSmaCCCodeGenerator seen: aCollection [ - ^ aSmaCCCodeGenerator acceptCharacterEdge: self seen: aCollection -] - -{ #category : #printing } -SmaCCCharacterEdge >> edgeLabel [ - ^ transitionObjects asString -] - -{ #category : #testing } -SmaCCCharacterEdge >> isCharacterTransition [ - ^ true -] - -{ #category : #merging } -SmaCCCharacterEdge >> mergeWith: aSmaCCEdge [ - transitionObjects := transitionObjects copy. - transitionObjects addAll: aSmaCCEdge transitionObjects -] - -{ #category : #private } -SmaCCCharacterEdge >> remove: aCollection [ - transitionObjects := transitionObjects copy. - transitionObjects smaccRemoveAll: aCollection -] - -{ #category : #accessing } -SmaCCCharacterEdge >> setClass [ - ^ SmaCCCharacterSet -] - -{ #category : #'initialize-release' } -SmaCCCharacterEdge >> to: aSmaCCNode on: aStringOrNil [ - toNode := aSmaCCNode. - transitionObjects := aStringOrNil notNil - ifTrue: [ SmaCCCharacterSet withAll: aStringOrNil ] - ifFalse: [ nil ] -] diff --git a/src/SmaCC_Development/SmaCCCharacterRENode.class.st b/src/SmaCC_Development/SmaCCCharacterRENode.class.st deleted file mode 100644 index ae2e1373c..000000000 --- a/src/SmaCC_Development/SmaCCCharacterRENode.class.st +++ /dev/null @@ -1,131 +0,0 @@ -" -SmaCCCharacterRENode is a SmaCCRegularExpressionNode that matches a character. - -Instance Variables: - characters the characters we accept - ignoreCase should we ignore case when accepting the characters - - -" -Class { - #name : #SmaCCCharacterRENode, - #superclass : #SmaCCRegularExpressionNode, - #instVars : [ - 'characters', - 'ignoreCase' - ], - #category : #'SmaCC_Development-Regular Expressions' -} - -{ #category : #'instance creation' } -SmaCCCharacterRENode class >> characters: aSmaCCCharacterSet [ - ^ self new - characters: aSmaCCCharacterSet; - yourself -] - -{ #category : #private } -SmaCCCharacterRENode >> asNFAStartingWith: aSmaCCNode [ - | endNode startNode | - startNode := self addStateTransitionsTo: aSmaCCNode. - endNode := SmaCCNode new. - endNode action: action. - startNode addEdgeTo: endNode onCharacters: characters. - ^ endNode -] - -{ #category : #testing } -SmaCCCharacterRENode >> canMergeWith: aSmaCCRegularExpressionNode [ - ^ self class = aSmaCCRegularExpressionNode class - and: - [ characters notNil - and: - [ aSmaCCRegularExpressionNode characters notNil - and: [ self action = aSmaCCRegularExpressionNode action ] ] ] -] - -{ #category : #accessing } -SmaCCCharacterRENode >> characters [ - ^ characters -] - -{ #category : #'initialize-release' } -SmaCCCharacterRENode >> characters: aSmaCCCharacterSet [ - characters := aSmaCCCharacterSet -] - -{ #category : #'initialize-release' } -SmaCCCharacterRENode >> initialize [ - super initialize. - ignoreCase := false -] - -{ #category : #constructing } -SmaCCCharacterRENode >> makeCaseInsensitive [ - | newCharacters | - ignoreCase := true. - newCharacters := characters copy. - characters - do: [ :each | - | upper lower | - upper := each asUppercase. - lower := each asLowercase. - upper asInteger > SmaCCGrammar maximumCharacterValue - ifFalse: [ newCharacters add: upper ]. - lower asInteger > SmaCCGrammar maximumCharacterValue - ifFalse: [ newCharacters add: lower ] ]. - characters := newCharacters -] - -{ #category : #accessing } -SmaCCCharacterRENode >> matchingCharacters [ - ^ ignoreCase - ifTrue: [ characters reject: [ :each | each isLowercase ] ] - ifFalse: [ characters ] -] - -{ #category : #private } -SmaCCCharacterRENode >> possibleMatchesDo: aBlock on: aStream [ - self matchingCharacters - do: [ :each | - aStream nextPut: each. - aBlock value. - aStream position: aStream position - 1 ] -] - -{ #category : #accessing } -SmaCCCharacterRENode >> possibleMatchesSize [ - ^ self matchingCharacters size -] - -{ #category : #printing } -SmaCCCharacterRENode >> printCharacter: aCharacter on: aStream [ - (aCharacter asInteger between: 32 and: 126) - ifTrue: [ ^ aStream nextPut: aCharacter ]. - aStream nextPutAll: '\x'. - aCharacter asInteger printOn: aStream base: 16 showRadix: false -] - -{ #category : #printing } -SmaCCCharacterRENode >> printOn: aStream [ - | allCharacters | - characters size = 1 - ifTrue: [ ^ self printCharacter: characters first on: aStream ]. - aStream nextPut: $[. - allCharacters := characters. - characters size > 128 - ifTrue: [ allCharacters := ((0 to: SmaCCGrammar maximumCharacterValue) collect: [ :each | Character value: each ]) - reject: [ :each | characters includes: each ]. - allCharacters size < characters size - ifTrue: [ aStream nextPut: $^ ] ]. - allCharacters do: [ :each | self printCharacter: each on: aStream ]. - aStream nextPut: $] -] - -{ #category : #constructing } -SmaCCCharacterRENode >> | aSmaCCRegularExpressionNode [ - (self canMergeWith: aSmaCCRegularExpressionNode) - ifFalse: [ ^ super | aSmaCCRegularExpressionNode ]. - characters := characters , aSmaCCRegularExpressionNode characters. - ^ self -] diff --git a/src/SmaCC_Development/SmaCCCharacterRegexNode.extension.st b/src/SmaCC_Development/SmaCCCharacterRegexNode.extension.st deleted file mode 100644 index c6f91d13c..000000000 --- a/src/SmaCC_Development/SmaCCCharacterRegexNode.extension.st +++ /dev/null @@ -1,12 +0,0 @@ -Extension { #name : #SmaCCCharacterRegexNode } - -{ #category : #'*SmaCC_Development' } -SmaCCCharacterRegexNode >> asRegularExpression [ - | ch | - ch := self char value. - ch = '.' - ifTrue: [ ^ SmaCCCharacterRENode characters: self allCharacters ]. - ch first = $\ - ifTrue: [ ^ self nodeFor: (ReadStream on: (ch copyFrom: 2 to: ch size)) ]. - ^ SmaCCCharacterRENode characters: (SmaCCCharacterSet withAll: ch) -] diff --git a/src/SmaCC_Development/SmaCCCharacterSet.class.st b/src/SmaCC_Development/SmaCCCharacterSet.class.st deleted file mode 100644 index dc1856084..000000000 --- a/src/SmaCC_Development/SmaCCCharacterSet.class.st +++ /dev/null @@ -1,64 +0,0 @@ -Class { - #name : #SmaCCCharacterSet, - #superclass : #SmaCCIntegerSet, - #category : #'SmaCC_Development-Collections' -} - -{ #category : #'instance creation' } -SmaCCCharacterSet class >> withAllCharactersTo: aCharacter [ - ^ self new - initializeWithAllCharactersTo: aCharacter; - yourself -] - -{ #category : #adding } -SmaCCCharacterSet >> add: aCharacter [ - super add: aCharacter asInteger. - ^ aCharacter -] - -{ #category : #converting } -SmaCCCharacterSet >> asString [ - | stream | - stream := WriteStream on: String new. - self do: [ :each | stream nextPut: each ]. - ^ stream contents -] - -{ #category : #enumerating } -SmaCCCharacterSet >> do: aBlock [ - ^ super do: [ :each | aBlock value: (Character value: each) ] -] - -{ #category : #testing } -SmaCCCharacterSet >> includes: aCharacter [ - ^ super includes: aCharacter asInteger -] - -{ #category : #'initialize-release' } -SmaCCCharacterSet >> initializeWithAllCharactersTo: aCharacter [ - | current index value | - self add: aCharacter. - current := data. - [ current isKindOf: Collection ] - whileTrue: [ index := 1. - [ (value := current at: index) = 0 ] - whileTrue: [ current - at: index - put: - ((current isKindOf: ByteArray) - ifTrue: [ 255 ] - ifFalse: [ 1 ]). - index := index + 1 ]. - (value isKindOf: Collection) - ifFalse: [ current at: index put: (value bitOr: value - 1) ]. - current := value ] -] - -{ #category : #removing } -SmaCCCharacterSet >> remove: aCharacter ifAbsent: aBlock [ - (self includes: aCharacter) - ifFalse: [ ^ aBlock value ]. - super remove: aCharacter asInteger ifAbsent: aBlock. - ^ aCharacter -] diff --git a/src/SmaCC_Development/SmaCCClassDefinition.class.st b/src/SmaCC_Development/SmaCCClassDefinition.class.st deleted file mode 100644 index 79e848873..000000000 --- a/src/SmaCC_Development/SmaCCClassDefinition.class.st +++ /dev/null @@ -1,180 +0,0 @@ -" -SmaCCClassDefinition is an abstract class that represents a class to be created when compiling the parser's parse trees. - -Instance Variables: - class the model's class object that is created - grammar the grammar that owns this class - isRoot is this the root class that we are generating - name the name of the class - subclasses our subclasses - superclass our superclass - - -" -Class { - #name : #SmaCCClassDefinition, - #superclass : #Object, - #instVars : [ - 'name', - 'subclasses', - 'grammar', - 'class', - 'superclass', - 'isRoot' - ], - #category : #'SmaCC_Development-Compilation Model' -} - -{ #category : #'accessing-hierarchy' } -SmaCCClassDefinition >> addSubclass: aSmaCCClassDefinition [ - subclasses add: aSmaCCClassDefinition -] - -{ #category : #accessing } -SmaCCClassDefinition >> beRoot [ - isRoot := true -] - -{ #category : #accessing } -SmaCCClassDefinition >> codeGenerator [ - ^ grammar codeGenerator -] - -{ #category : #compiling } -SmaCCClassDefinition >> compileMethodsAndVariables [ - -] - -{ #category : #accessing } -SmaCCClassDefinition >> fullName [ - ^ self codeGenerator namespaceName , self name -] - -{ #category : #'initialize-release' } -SmaCCClassDefinition >> grammar: aSmaCCGrammar [ - grammar := aSmaCCGrammar -] - -{ #category : #'accessing-hierarchy' } -SmaCCClassDefinition >> hierarchyCount [ - ^ superclass isNil - ifTrue: [ 0 ] - ifFalse: [ superclass hierarchyCount + 1 ] -] - -{ #category : #testing } -SmaCCClassDefinition >> hierarchyIncludes: aSmaCCClassDefinition [ - ^ self = aSmaCCClassDefinition - or: - [ superclass notNil - and: [ superclass hierarchyIncludes: aSmaCCClassDefinition ] ] -] - -{ #category : #'initialize-release' } -SmaCCClassDefinition >> initialize [ - super initialize. - isRoot := false. - subclasses := OrderedCollection new -] - -{ #category : #testing } -SmaCCClassDefinition >> isRoot [ - ^ isRoot -] - -{ #category : #testing } -SmaCCClassDefinition >> isSortedBefore: aSmaCCClassDefinition [ - ^ self hierarchyCount < aSmaCCClassDefinition hierarchyCount - or: - [ self hierarchyCount = aSmaCCClassDefinition hierarchyCount - and: [ self name < aSmaCCClassDefinition name ] ] -] - -{ #category : #accessing } -SmaCCClassDefinition >> modelClass [ - ^ class -] - -{ #category : #'initialize-release' } -SmaCCClassDefinition >> modelClass: aRBClass [ - class := aRBClass -] - -{ #category : #accessing } -SmaCCClassDefinition >> name [ - ^ name -] - -{ #category : #'initialize-release' } -SmaCCClassDefinition >> name: anObject [ - name := anObject -] - -{ #category : #printing } -SmaCCClassDefinition >> printOn: aStream [ - aStream - nextPutAll: self class name; - nextPutAll: '-class('; - nextPutAll: self name; - nextPut: $) -] - -{ #category : #'accessing-hierarchy' } -SmaCCClassDefinition >> removeSubclass: aSmaCCClassDefinition [ - subclasses remove: aSmaCCClassDefinition ifAbsent: [ ] -] - -{ #category : #private } -SmaCCClassDefinition >> rootClassName [ - ^ Object name -] - -{ #category : #'accessing-hierarchy' } -SmaCCClassDefinition >> subclasses [ - ^ subclasses -] - -{ #category : #accessing } -SmaCCClassDefinition >> superclass [ - ^ superclass -] - -{ #category : #'initialize-release' } -SmaCCClassDefinition >> superclass: anObject [ - superclass notNil - ifTrue: [ superclass removeSubclass: self ]. - superclass := anObject. - superclass notNil - ifTrue: [ superclass addSubclass: self ] -] - -{ #category : #accessing } -SmaCCClassDefinition >> superclassName [ - ^ self isRoot - ifTrue: [ self rootClassName ] - ifFalse: [ superclass fullName ] -] - -{ #category : #compiling } -SmaCCClassDefinition >> temporaryNameFor: fullName [ - ^ (fullName first isVowel - ifTrue: [ 'an' ] - ifFalse: [ 'a' ]) , fullName -] - -{ #category : #accessing } -SmaCCClassDefinition >> temporaryVariableName [ - ^ self temporaryNameFor: self name -] - -{ #category : #'accessing-hierarchy' } -SmaCCClassDefinition >> withAllSubclasses [ - | classes index | - classes := OrderedCollection with: self. - index := 1. - [ index <= classes size ] - whileTrue: - [ classes addAll: (classes at: index) subclasses. - index := index + 1 ]. - ^ classes -] diff --git a/src/SmaCC_Development/SmaCCCodeGenerator.class.st b/src/SmaCC_Development/SmaCCCodeGenerator.class.st deleted file mode 100644 index 410f20812..000000000 --- a/src/SmaCC_Development/SmaCCCodeGenerator.class.st +++ /dev/null @@ -1,1456 +0,0 @@ -" -SmaCCCodeGenerator is an abstract class that is used to generate code. Subclasses are used to generate code for a particular language (e.g., Smalltalk, Java, etc.). - -Subclasses must implement the following messages: - code generation templates - comment: - method:type: - method:type:argumentName:argumentType: - method:type:argumentName:argumentType:argumentName:argumentType: - reduceAction: - send:to:with: - send:to:with:with: - send:to:with:with:with: - superMessage: - superMessage:argument: - superMessage:argument:argument: - variableReference:in: - compiling - compileChanges - compileMethodWithoutFormattingIn: - compileScannerClassIntoParser - outputStreamClass - removeOldMethods - compiling-nodes - compileInitializeMethod: - compiling-scanner - acceptStateEdge: - closestIsExpressionsFor:seen: - compileKeywordInitializerUsing: - defineClass:asSubclassOf: - outputInvertedMatchFor:on: - outputIsSelector:on: - outputMatchFor:on:without: - scannerActionFor: - scannerClass: - selectorMap: - writeMatchingCodeFor: - private - addVariable:forDefinition: - defaultNodeReductionSource: - removeOldMethodsFrom: - send:to: - writeTransitionTableEntry:on:firstIsType: - reduction table - basicCompileSourceFor: - defaultReductionSource - -Instance Variables - ambiguousActions the ambiguous actions for the grammar - codeStream a stream for writing the code - grammar the grammar we are compiling - model the model for the system that we are compiling - parserClass the model's class for the parser - reduceActionCache mapping from reduce actions to their code - scannerClass the model's class for the scanner -" -Class { - #name : #SmaCCCodeGenerator, - #superclass : #Object, - #instVars : [ - 'parserClass', - 'scannerClass', - 'model', - 'codeStream', - 'reduceActionCache', - 'ambiguousActions', - 'grammar', - 'defaultCategory' - ], - #classInstVars : [ - 'codeTemplates' - ], - #category : #'SmaCC_Development-Compiler' -} - -{ #category : #'code generation templates' } -SmaCCCodeGenerator class >> codeTemplates [ - ^ codeTemplates - ifNil: - [ codeTemplates := IdentityDictionary new. - self codeTemplatesArray - do: [ :each | codeTemplates at: each first put: each last ]. - codeTemplates ] -] - -{ #category : #'code generation templates' } -SmaCCCodeGenerator class >> codeTemplatesArray [ - ^ #(#(#override '') #(#trueValue 'true')) -] - -{ #category : #accessing } -SmaCCCodeGenerator class >> parseSourceSelector [ - self subclassResponsibility -] - -{ #category : #'class initialization' } -SmaCCCodeGenerator class >> reset [ - "self reset" - - codeTemplates := nil. - self allSubclassesDo: [ :each | each reset ] -] - -{ #category : #accessing } -SmaCCCodeGenerator class >> typeName [ - ^ nil -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> acceptCharacterEdge: aSmaCCCharacterEdge seen: aCollection [ - | stream | - stream := WriteStream with: String new. - aSmaCCCharacterEdge transitionObjects size + aCollection size - > SmaCCGrammar maximumCharacterValue - ifTrue: [ ^ self trueValue ]. - stream nextPut: $(. - aSmaCCCharacterEdge transitionObjects size - = SmaCCGrammar maximumCharacterValue - ifTrue: [ self - outputInvertedMatchFor: aSmaCCCharacterEdge - on: stream ] - ifFalse: - [ self - outputMatchFor: aSmaCCCharacterEdge - seen: aCollection - on: stream ]. - stream nextPut: $). - ^ stream contents -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> acceptStateEdge: aSmaCCStateEdge [ - self subclassResponsibility -] - -{ #category : #private } -SmaCCCodeGenerator >> addParentAssignmentFor: aSmaCCVariableDefinition to: valueString [ - aSmaCCVariableDefinition isBaseNodeType - ifFalse: [ ^ self ]. - aSmaCCVariableDefinition isCollection - ifTrue: - [ self - nextPutStatement: - (self - send: #setParents:to: - to: self receiverName - with: - (self - cast: - (self - variableReference: aSmaCCVariableDefinition - in: self receiverName) - to: self collectionType) - with: valueString) ] - ifFalse: - [ self - nextPutLine: - (self - notNilCheckFor: - (self - variableReference: aSmaCCVariableDefinition - in: self receiverName)). - self - nextPutStatement: - (self - send: #parent: - to: - (self - cast: - (self - variableReference: aSmaCCVariableDefinition - in: self receiverName) - to: 'ParseNode') - with: valueString). - self nextPutStatement: self endConditionalString ] -] - -{ #category : #private } -SmaCCCodeGenerator >> addVariable: aSmaCCVariableDefinition forDefinition: aSmaCCNodeClassDefinition [ - self subclassResponsibility -] - -{ #category : #'compiling-parser' } -SmaCCCodeGenerator >> ambiguousTableEntryFor: aCollection [ - | entry | - entry := aCollection asArray. - ^ ambiguousActions - indexOf: entry - ifAbsent: [ ambiguousActions add: entry. - ambiguousActions size ] -] - -{ #category : #'code generation templates' } -SmaCCCodeGenerator >> argumentIndex: anInteger [ - ^ self at: 'nodes' index: anInteger -] - -{ #category : #'code generation templates' } -SmaCCCodeGenerator >> argumentIndex: anInteger subIndex: subIndex [ - ^ self - at: (self cast: (self argumentIndex: anInteger) to: self collectionType) - index: subIndex -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> asStatement: methodMap forNode: aSmaCCNode lastNeedsReturn: aBoolean [ - | transitions seen | - aSmaCCNode hasSimpleLoop - ifTrue: [ self nextPutLine: self startDoWhileLoop ]. - self writeMatchingCodeFor: aSmaCCNode. - transitions := self sortedTransitionsForNode: aSmaCCNode. - seen := (transitions notEmpty - ifTrue: [ transitions first setClass ] - ifFalse: [ Set ]) new. - transitions - do: - [ :each | - each to = aSmaCCNode - ifTrue: - [ self - nextPutStatement: (self endDoWhileLoopWithClause: (each dispatchTo: self seen: seen)) ] - ifFalse: - [ self - nextPutLine: (self startIfWithClause: (each dispatchTo: self seen: seen)). - (methodMap at: each to ifAbsent: [ nil ]) - ifNil: - [ self - asStatement: methodMap - forNode: each to - lastNeedsReturn: each ~= transitions last ] - ifNotNil: - [ :methodCall | - self - nextPutStatement: (self return: (self send: methodCall to: self receiverName)) ]. - self nextPutStatement: self endConditionalString ]. - seen addAll: each transitionObjects ]. - (aBoolean - and: [ aSmaCCNode transitions notEmpty or: [ aSmaCCNode action isNil ] ]) - ifTrue: - [ self - nextPutStatement: (self return: (self send: #reportLastMatch to: self receiverName)) ] -] - -{ #category : #'reduction table' } -SmaCCCodeGenerator >> assignVariable: variableName in: aSmaCCRHS at: key first: aBoolean [ - | variableIndex value | - variableIndex := aSmaCCRHS productionSymbol indexOfVariable: variableName. - value := self argumentIndex: key. - self - nextPutStatement: ((aSmaCCRHS productionSymbol isCollection: variableName) - ifTrue: - [self - perform: (aBoolean - ifTrue: [#addFirstSendTo:with:] - ifFalse: [#addSendTo:with:]) - with: (self cast: (self at: 'result' index: variableIndex) - to: self collectionType) - with: value] - ifFalse: [self assignArray: 'result' index: variableIndex to: value]) -] - -{ #category : #'reduction table' } -SmaCCCodeGenerator >> basicCompileSourceFor: aSmaCCReduceAction [ - self subclassResponsibility -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> closestIsExpressionsFor: aSmaCCCharacterEdge seen: anObject [ - self subclassResponsibility -] - -{ #category : #private } -SmaCCCodeGenerator >> codeStream [ - codeStream isNil - ifTrue: [ codeStream := self outputStream ]. - ^ codeStream -] - -{ #category : #'code generation templates' } -SmaCCCodeGenerator >> comment: aString [ - self subclassResponsibility -] - -{ #category : #accessing } -SmaCCCodeGenerator >> commonSupertypeBetween: modelClass and: anotherModelClass [ - ^ (anotherModelClass includesClass: modelClass) - ifTrue: [ modelClass ] - ifFalse: - [ (modelClass includesClass: anotherModelClass) - ifTrue: [ anotherModelClass ] - ifFalse: - [ self - commonSupertypeBetween: modelClass superclass - and: anotherModelClass ] ] -] - -{ #category : #accessing } -SmaCCCodeGenerator >> commonSupertypeOf: aCollection [ - aCollection isEmpty - ifTrue: [ ^ self objectClass ]. - ^ aCollection - inject: aCollection anyOne - into: [ :sum :each | self commonSupertypeBetween: sum and: each ] -] - -{ #category : #'compiling-parser' } -SmaCCCodeGenerator >> compileAcceptNodeMethodFor: aSmaCCVisitorClassDefinition rootNode: aSmaCCClassDefinition [ - "Only needed if we are using a brain dead type system" - - -] - -{ #category : #private } -SmaCCCodeGenerator >> compileAcceptVisitorMethod: aSmaCCNodeClassDefinition visitor: aSmaCCVisitorClassDefinition [ - aSmaCCNodeClassDefinition isRoot - ifTrue: [ self startPublicVirtualMethod ] - ifFalse: [ self startPublicOverrideMethod ]. - self - nextPutLine: - (self - method: #acceptVisitor: - type: self objectType - argumentName: aSmaCCNodeClassDefinition tempNodeName , 'Visitor' - argumentType: aSmaCCVisitorClassDefinition fullName); - nextPutStatement: - (self - return: - (self - send: 'visit' , aSmaCCNodeClassDefinition name , ':' - to: aSmaCCNodeClassDefinition tempNodeName , 'Visitor' - with: self receiverName)); - endMethod; - compileMethodIn: aSmaCCNodeClassDefinition modelClass -] - -{ #category : #'compiling-parser' } -SmaCCCodeGenerator >> compileAmbiguousTransitions [ - | stream | - ambiguousActions isEmpty - ifTrue: [ ^ self ]. - stream := self outputStream. - stream nextPutAll: self newUnsignedShortArrayArray. - ambiguousActions - do: - [ :each | self writeTransitionTableEntry: each on: stream firstIsType: false ] - separatedBy: [ stream nextPutAll: self literalArraySeparator ]. - stream - cr; - tab; - nextPutAll: self endLiteralArray. - self - startPublicOverrideMethod; - nextPutLine: - (self - method: 'ambiguousTransitions' - type: self unsignedShortArrayArray); - nextPutStatement: (self return: stream contents); - endMethod; - compileMethodWithoutFormattingIn: parserClass theMetaClass -] - -{ #category : #'compiling-parser' } -SmaCCCodeGenerator >> compileCacheId [ -] - -{ #category : #compiling } -SmaCCCodeGenerator >> compileChanges [ - self subclassResponsibility -] - -{ #category : #'compiling-nodes' } -SmaCCCodeGenerator >> compileChildrenMethod: aSmaCCNodeClassDefinition [ - self subclassResponsibility -] - -{ #category : #'compiling-nodes' } -SmaCCCodeGenerator >> compileCopyInContextMethod: aSmaCCNodeClassDefinition [ - self subclassResponsibility -] - -{ #category : #compiling } -SmaCCCodeGenerator >> compileDefinitionComment: aString [ - self - startPublicVirtualMethod; - nextPutLine: (self method: #definitionComment type: self voidType); - nextPutLine: (self comment: aString); - endMethod. - self compileMethodWithoutFormattingIn: parserClass theMetaClass -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> compileEmptySymbolTokenId: emptySymbolId [ - self - compileTokenIdMethodNamed: 'emptySymbolToken' - withId: emptySymbolId -] - -{ #category : #'compiling-nodes' } -SmaCCCodeGenerator >> compileEqualMethod: aSmaCCNodeClassDefinition [ - self subclassResponsibility -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> compileErrorSymbolTokenId: errorTokenId [ - self compileTokenIdMethodNamed: 'errorToken' withId: errorTokenId -] - -{ #category : #'compiling-nodes' } -SmaCCCodeGenerator >> compileGetterAndSetter: aSmaCCVariableDefinition forDefinition: aSmaCCNodeClassDefinition [ - | type typeName variableName definer | - variableName := self - nonKeywordNameFor: aSmaCCVariableDefinition sourceVariableName. - type := aSmaCCVariableDefinition type. - self - setGetterMethodNameTo: aSmaCCVariableDefinition - withName: variableName. - definer := aSmaCCNodeClassDefinition modelClass - whoDefinesMethod: aSmaCCVariableDefinition getterMethodName asSymbol. - (definer isNil or: [ definer = self objectClass ]) - ifTrue: - [ self - startPublicVirtualMethod; - nextPutLine: - (self - method: aSmaCCVariableDefinition getterMethodName - type: type name); - nextPutStatement: (self return: (self variableReference: aSmaCCVariableDefinition)); - endMethod; - compileMethodIn: aSmaCCNodeClassDefinition modelClass ]. - aSmaCCVariableDefinition setterMethodName: variableName , ':'. - definer := aSmaCCNodeClassDefinition modelClass - whoDefinesMethod: aSmaCCVariableDefinition setterMethodName asSymbol. - (definer isNil or: [ definer = self objectClass ]) - ifFalse: [ ^ self ]. - typeName := aSmaCCNodeClassDefinition temporaryNameFor: type name. - self - startPublicVirtualMethod; - nextPutLine: - (self - method: aSmaCCVariableDefinition setterMethodName - type: self voidType - argumentName: typeName - argumentType: type name); - addParentAssignmentFor: aSmaCCVariableDefinition - to: self undefinedObject; - nextPutStatement: (self assignmentTo: variableName from: typeName); - addParentAssignmentFor: aSmaCCVariableDefinition - to: self receiverName; - endMethod; - compileMethodIn: aSmaCCNodeClassDefinition modelClass -] - -{ #category : #'compiling-nodes' } -SmaCCCodeGenerator >> compileHashMethod: aSmaCCNodeClassDefinition [ - self subclassResponsibility -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> compileIgnoreCaseMethods [ - self grammar ignoreCase - ifFalse: [ ^ self ]. - self - startPublicOverrideMethod; - nextPutLine: - (self - method: #keywordFor: - type: self stringType - argumentName: 'aString' - argumentType: self stringType); - nextPutStatement: (self return: (self uppercaseString: 'aString')); - endMethod; - compileMethodIn: scannerClass -] - -{ #category : #'compiling-nodes' } -SmaCCCodeGenerator >> compileInitializeMethod: aSmaCCNodeClassDefinition [ - self subclassResponsibility -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> compileKeywordInitializerUsing: keywordMapDictionary [ - self subclassResponsibility -] - -{ #category : #'compiling-nodes' } -SmaCCCodeGenerator >> compileMatchInContextMethod: aSmaCCNodeClassDefinition [ - self subclassResponsibility -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> compileMethodIn: modelClass [ - self subclassResponsibility -] - -{ #category : #compiling } -SmaCCCodeGenerator >> compileMethodWithoutFormattingIn: modelClass [ - self subclassResponsibility -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> compileNode: aSmaCCNode [ - | methodNodes methodMap | - methodNodes := self statesToMakeIntoMethodsFor: aSmaCCNode. - methodMap := self methodNameMap: aSmaCCNode forMethods: methodNodes. - methodNodes - do: - [ :each | - each = aSmaCCNode - ifTrue: [ self startProtectedOverrideMethod ] - ifFalse: [ self startProtectedVirtualMethod ]. - self - nextPutLine: - (self - method: (methodMap at: each) - type: (model classFor: SmaCCToken) name). - self asStatement: methodMap forNode: each lastNeedsReturn: true. - self endMethod. - self compileOptimizedMethodIn: scannerClass ] -] - -{ #category : #compiling } -SmaCCCodeGenerator >> compileNodeClassDefinition: aSmaCCClassDefinition [ - | class | - class := self - defineClass: aSmaCCClassDefinition fullName - asSubclassOf: (self model classNamed: aSmaCCClassDefinition superclassName asSymbol). - aSmaCCClassDefinition modelClass: class. - self removeOldMethodsFrom: class. - self removeOldMethodsFrom: class theMetaClass -] - -{ #category : #compiling } -SmaCCCodeGenerator >> compileOptimizedMethodIn: modelClass [ - self subclassResponsibility -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> compilePostCopyMethod: aSmaCCNodeClassDefinition [ - self subclassResponsibility -] - -{ #category : #'compiling-parser' } -SmaCCCodeGenerator >> compileReductionActions [ - -] - -{ #category : #compiling } -SmaCCCodeGenerator >> compileReductionTable: reductionTable [ - | stream | - stream := self outputStream. - stream nextPutAll: self reduceActionLiteralStart. - reductionTable - do: - [ :each | - stream - cr; - tab; - nextPutAll: (self reduceAction: each) ] - separatedBy: [ stream nextPutAll: self literalArraySeparator ]. - stream - cr; - tab; - nextPutAll: self endLiteralArray. - self - startProtectedOverrideMethod; - nextPutLine: (self method: 'reduceTable' type: self reduceActionArrayType); - nextPutStatement: (self return: stream contents); - endMethod; - compileMethodWithoutFormattingIn: parserClass theMetaClass -] - -{ #category : #compiling } -SmaCCCodeGenerator >> compileScannerClassIntoParser [ - self subclassResponsibility -] - -{ #category : #'reduction table' } -SmaCCCodeGenerator >> compileSourceFor: aSmaCCReduceAction [ - ^ reduceActionCache - at: aSmaCCReduceAction - ifAbsentPut: [ self basicCompileSourceFor: aSmaCCReduceAction ] -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> compileStartingStateIds: startingStates [ - startingStates - keysAndValuesDo: - [ :symbol :position | - self - startStaticMethod; - nextPutLine: - (self - method: 'startingStateFor' , symbol compileName - type: self unsignedShort); - nextPutStatement: (self return: position printString); - endMethod; - compileMethodIn: parserClass theMetaClass ] -] - -{ #category : #'compiling-parser' } -SmaCCCodeGenerator >> compileSymbolNames [ - | names | - names := grammar symbols collect: [ :each | each name ]. - self compileSymbolNames: names asArray -] - -{ #category : #'compiling-parser' } -SmaCCCodeGenerator >> compileSymbolNames: anArray [ - self - startPublicVirtualMethod; - nextPutLine: (self method: 'symbolNames' type: self arrayType); - nextPutStatement: (self return: anArray storeString); - endMethod; - compileMethodIn: self parserClass theMetaClass -] - -{ #category : #'compiling-parser' } -SmaCCCodeGenerator >> compileSymbolTypes [ - | names | - names := grammar symbols - collect: - [ :each | - | types previousSize | - types := each modelTypes. - previousSize := types size. - types remove: (self model classFor: nil class) ifAbsent: [ ]. - (types isEmpty and: [ previousSize = 1 ]) - ifTrue: [ nil ] - ifFalse: [ (self commonSupertypeOf: types) name ] ]. - self compileSymbolTypes: names asArray -] - -{ #category : #'compiling-parser' } -SmaCCCodeGenerator >> compileSymbolTypes: anArray [ - -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> compileTokenIdMethodNamed: aString withId: symbolId [ - self - startPublicOverrideMethod; - nextPutLine: (self method: aString , 'Id' type: self unsignedShort); - nextPutStatement: (self return: symbolId printString); - endMethod; - compileMethodIn: scannerClass -] - -{ #category : #'compiling-parser' } -SmaCCCodeGenerator >> compileTransitionTable: transitionTable [ - | stream | - stream := self outputStream. - stream nextPutAll: self newUnsignedShortArrayArray. - transitionTable - do: - [ :each | self writeTransitionTableEntry: each on: stream firstIsType: true ] - separatedBy: [ stream nextPutAll: self literalArraySeparator ]. - stream - cr; - tab; - nextPutAll: self endLiteralArray. - self - startPublicOverrideMethod; - nextPutLine: (self method: 'transitionTable' type: self unsignedShortArrayArray); - nextPutStatement: (self return: stream contents); - endMethod; - compileMethodWithoutFormattingIn: parserClass theMetaClass. - self compileAmbiguousTransitions -] - -{ #category : #'compiling-nodes' } -SmaCCCodeGenerator >> compileVariablesMethods: aSmaCCNodeClassDefinition [ - -] - -{ #category : #'compiling-nodes' } -SmaCCCodeGenerator >> compileVisitMethodFor: aSmaCCNodeClassDefinition visitor: aSmaCCVisitorClassDefinition [ - | tempName | - self - compileAcceptVisitorMethod: aSmaCCNodeClassDefinition - visitor: aSmaCCVisitorClassDefinition. - tempName := aSmaCCNodeClassDefinition temporaryVariableName. - self - startPublicVirtualMethod; - nextPutLine: - (self - method: 'visit' , aSmaCCNodeClassDefinition name , ':' - type: self objectType - argumentName: tempName - argumentType: aSmaCCNodeClassDefinition fullName). - self - nextPutStatement: - (self - return: - (self - send: - (aSmaCCNodeClassDefinition superclass notNil - ifTrue: [ 'visit' , aSmaCCNodeClassDefinition superclass name - , ':' ] - ifFalse: [ 'visitSmaCCParseNode:' ]) - to: self receiverName - with: tempName)); - endMethod; - compileMethodIn: aSmaCCVisitorClassDefinition modelClass -] - -{ #category : #'reduction table' } -SmaCCCodeGenerator >> createNodeReduceAction: aSmaCCRHS [ - ^ self createNodeReduceAction: aSmaCCRHS pullUpFrom: 0 -] - -{ #category : #'reduction table' } -SmaCCCodeGenerator >> createNodeReduceAction: aSmaCCRHS pullUpFrom: anInteger [ - self resetCodeStream. - self - nextPutLine: (self variableDeclaration: 'result' ofType: aSmaCCRHS modelType name). - self - nextPutStatement: - (self - assignmentTo: 'result' - from: - (anInteger isZero - ifTrue: [ self newObject: aSmaCCRHS modelType name ] - ifFalse: - [ self - cast: (self argumentIndex: anInteger) - to: aSmaCCRHS modelType name ])). - SmaCCReduceActionGenerator - generate: aSmaCCRHS - pullUp: anInteger - on: self. - self nextPutStatement: (self return: 'result'). - ^ self codeStream contents -] - -{ #category : #'reduction table' } -SmaCCCodeGenerator >> createVariableArrayFor: aSmaCCRHS [ - self - nextPutLine: (self variableDeclaration: 'result' ofType: self arrayType). - self - nextPutStatement: - (self - assignmentTo: 'result' - from: (self initializeResultForReduceAction: aSmaCCRHS)). - self initializeArrayContentsToNull: aSmaCCRHS. - aSmaCCRHS productionSymbol collectionVariableDefinitions - do: - [ :each | - self - nextPutStatement: - (self - assignArray: 'result' - index: each index - to: (self newCollectionOfSize: 2)) ] -] - -{ #category : #'initialize-release' } -SmaCCCodeGenerator >> defaultCategory: aSymbol [ - defaultCategory := aSymbol -] - -{ #category : #private } -SmaCCCodeGenerator >> defaultNodeReductionSource: aReduction [ - self subclassResponsibility -] - -{ #category : #'reduction table' } -SmaCCCodeGenerator >> defaultReductionSource [ - self subclassResponsibility -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> defineClass: aString asSubclassOf: aSmaCCClass [ - self subclassResponsibility -] - -{ #category : #'code generation templates' } -SmaCCCodeGenerator >> doesNotUnderstand: failedMessage [ - "Use the code templates to expand the string." - - ^ (self class codeTemplates - at: failedMessage selector - ifAbsent: [ ^ super doesNotUnderstand: failedMessage ]) - expandMacrosWithArguments: failedMessage arguments -] - -{ #category : #'code generation templates' } -SmaCCCodeGenerator >> endIteratorString [ - ^ self endConditionalString -] - -{ #category : #private } -SmaCCCodeGenerator >> endMethod [ - self codeStream nextPutAll: self endMethodString -] - -{ #category : #'compiling-parser' } -SmaCCCodeGenerator >> glrParserClass: aClassOrString [ - | name existingClass superclass | - name := (aClassOrString isKindOf: Behavior) - ifTrue: [ aClassOrString name ] - ifFalse: [ aClassOrString ]. - superclass := SmaCCGLRParser. - existingClass := Smalltalk at: name asSymbol ifAbsent: [ nil ]. - (existingClass notNil and: [ existingClass superclass includesBehavior: superclass ]) - ifTrue: [ superclass := existingClass superclass ]. - (existingClass notNil and: [ defaultCategory isNil ]) - ifTrue: [ defaultCategory := existingClass category ]. - parserClass := self defineClass: name asSubclassOf: superclass -] - -{ #category : #accessing } -SmaCCCodeGenerator >> grammar [ - ^ grammar -] - -{ #category : #accessing } -SmaCCCodeGenerator >> grammar: aSmaCCGrammar [ - grammar := aSmaCCGrammar -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> initialMethodStatesFor: aSmaCCNode [ - | allStates incoming | - allStates := aSmaCCNode allStates. - incoming := Dictionary new. - allStates - do: - [ :each | - each transitions - do: - [ :edge | - each ~= edge to - ifTrue: [ (incoming at: edge to ifAbsentPut: [ Set new ]) - add: each ] ] ]. - ^ allStates - select: - [ :each | - aSmaCCNode = each - or: - [ each isTerminalNode not - and: [ (incoming at: each ifAbsent: [ #() ]) size > 1 ] ] ] -] - -{ #category : #'initialize-release' } -SmaCCCodeGenerator >> initialize [ - super initialize. - reduceActionCache := Dictionary new. - ambiguousActions := OrderedCollection new -] - -{ #category : #'compiling-parser' } -SmaCCCodeGenerator >> initializeArrayContentsToNull: aSmaCCRHS [ - -] - -{ #category : #'compiling-parser' } -SmaCCCodeGenerator >> initializeResultForReduceAction: aSmaCCRHS [ - ^ self - newArrayOfSize: aSmaCCRHS productionSymbol variableDefinitions size -] - -{ #category : #private } -SmaCCCodeGenerator >> keywords [ - ^ #() -] - -{ #category : #private } -SmaCCCodeGenerator >> maxJumpSize [ - ^ SmallInteger maxVal -] - -{ #category : #'code generation templates' } -SmaCCCodeGenerator >> method: aString type: typeString [ - self subclassResponsibility -] - -{ #category : #'code generation templates' } -SmaCCCodeGenerator >> method: aString type: anObject argumentName: argumentNameString argumentType: argumentTypeString [ - self subclassResponsibility -] - -{ #category : #'code generation templates' } -SmaCCCodeGenerator >> method: aString type: anObject argumentName: firstArgumentNameString argumentType: firstArgumentTypeString argumentName: secondArgumentNameString argumentType: secondArgumentTypeString [ - self subclassResponsibility -] - -{ #category : #private } -SmaCCCodeGenerator >> methodNameFor: aString [ - ^ aString -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> methodNameMap: aSmaCCNode forMethods: methodNodes [ - | index methodMap | - methodMap := Dictionary new. - index := 0. - methodNodes - do: - [ :value | - methodMap - at: value - put: - (value = aSmaCCNode - ifTrue: [ #scanForToken ] - ifFalse: [ 'scan' , (index := index + 1) printString ]) ]. - ^ methodMap -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> minMaxPairsFor: aSmaCCCharacterEdge without: isSelectors [ - | start last pairs charsLeft | - charsLeft := aSmaCCCharacterEdge transitionObjects. - isSelectors notEmpty - ifTrue: [ charsLeft := charsLeft copy. - isSelectors do: [ :each | charsLeft smaccRemoveAll: (SmaCCGrammar isExpressionMap at: each) ] ]. - pairs := OrderedCollection new. - charsLeft isEmpty - ifTrue: [ ^ pairs ]. - last := charsLeft first. - start := nil. - charsLeft - do: [ :each | - last asInteger + 1 = each asInteger - ifFalse: [ start notNil - ifTrue: [ pairs add: (Array with: start with: last) ]. - start := each ]. - last := each ]. - pairs add: (Array with: start with: last). - ^ pairs -] - -{ #category : #private } -SmaCCCodeGenerator >> model [ - ^ model -] - -{ #category : #accessing } -SmaCCCodeGenerator >> namespaceName [ - ^ '' -] - -{ #category : #'compiling-parser' } -SmaCCCodeGenerator >> nextPut: aCharacter [ - self codeStream nextPut: aCharacter -] - -{ #category : #private } -SmaCCCodeGenerator >> nextPutLine: aString [ - self codeStream - nextPutAll: aString; - cr -] - -{ #category : #private } -SmaCCCodeGenerator >> nextPutStatement: aString [ - self codeStream - nextPutAll: aString; - nextPutAll: self statementSeparator; - cr -] - -{ #category : #private } -SmaCCCodeGenerator >> nodeType [ - ^ (model classFor: SmaCCParseNode) name -] - -{ #category : #private } -SmaCCCodeGenerator >> nonKeywordNameFor: aString [ - | word | - word := aString. - [ self keywords includes: word ] whileTrue: [ word := '_' , word ]. - ^ word -] - -{ #category : #accessing } -SmaCCCodeGenerator >> objectClass [ - ^ model classFor: Object -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> outputInvertedMatchFor: aSmaCCCharacterEdge on: stream [ - self subclassResponsibility -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> outputIsSelector: isSelector on: stream [ - self subclassResponsibility -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> outputMatchFor: aSmaCCCharacterEdge on: aStream without: aSelector [ - self subclassResponsibility -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> outputMatchFor: aSmaCCCharacterEdge seen: aCollection on: stream [ - | isSelectors | - isSelectors := self - closestIsExpressionsFor: aSmaCCCharacterEdge - seen: aCollection. - isSelectors - do: [ :each | self outputIsSelector: each on: stream ] - separatedBy: [ stream nextPutAll: ' or: [' ]. - self - outputMatchFor: aSmaCCCharacterEdge - on: stream - without: isSelectors -] - -{ #category : #private } -SmaCCCodeGenerator >> outputStream [ - ^ self outputStreamClass with: String new -] - -{ #category : #compiling } -SmaCCCodeGenerator >> outputStreamClass [ - self subclassResponsibility -] - -{ #category : #private } -SmaCCCodeGenerator >> parseSourceSelector [ - ^ self class parseSourceSelector -] - -{ #category : #compiling } -SmaCCCodeGenerator >> parserClass [ - ^ parserClass -] - -{ #category : #'compiling-parser' } -SmaCCCodeGenerator >> parserClass: aClassOrString [ - | name existingClass superclass | - name := (aClassOrString isKindOf: Behavior) - ifTrue: [ aClassOrString name ] - ifFalse: [ aClassOrString ]. - superclass := SmaCCParser. - existingClass := Smalltalk at: name asSymbol ifAbsent: [ nil ]. - (existingClass notNil - and: - [ (existingClass superclass includesBehavior: superclass) - and: [ (existingClass includesBehavior: SmaCCGLRParser) not ] ]) - ifTrue: [ superclass := existingClass superclass ]. - (existingClass notNil and: [ defaultCategory isNil ]) - ifTrue: [ defaultCategory := existingClass category ]. - parserClass := self defineClass: name asSubclassOf: superclass -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> possiblyGuardNil: each around: aBlock [ - each isAlwaysAssigned - ifTrue: [ aBlock value ] - ifFalse: - [ self - nextPutLine: - (self - notNilCheckFor: (self variableReference: each in: self receiverName)). - aBlock - ensure: [ self nextPutStatement: self endConditionalString ] ] -] - -{ #category : #'compiling-parser' } -SmaCCCodeGenerator >> processTransitionTable: transitionTable [ - | table | - table := OrderedCollection new. - transitionTable do: [ :each | table addLast: each ]. - ^ table -] - -{ #category : #'reduction table' } -SmaCCCodeGenerator >> pullUpVariableArrayFor: aSmaCCRHS index: recursionIndex [ - self nextPutLine: (self variableDeclaration: 'result' ofType: self arrayType). - self nextPutStatement: (self assignmentTo: 'result' from: (self cast: (self argumentIndex: recursionIndex) to: self collectionType)) -] - -{ #category : #'reduction table' } -SmaCCCodeGenerator >> pullUpVariableFrom: aSmaCCSymbol into: aSmaCCRHS index: anInteger first: aBoolean [ - | variableValue rhsIndex variable | - variable := aSmaCCSymbol variableDefinitions first. - variableValue := self argumentIndex: anInteger. - rhsIndex := aSmaCCRHS productionSymbol - indexOfVariable: variable variableName. - self - nextPutStatement: ((aSmaCCRHS productionSymbol - isCollection: variable variableName) - ifTrue: - [| collectionValue | - collectionValue := self cast: (self at: 'result' index: rhsIndex) - to: self collectionType. - (aSmaCCSymbol isCollection: variable variableName) - ifTrue: - [self - perform: (aBoolean - ifTrue: [#addAllFirstSendTo:with:] - ifFalse: [#addAllSendTo:with:]) - with: collectionValue - with: (self cast: variableValue to: self collectionType)] - ifFalse: - [self - perform: (aBoolean - ifTrue: [#addFirstSendTo:with:] - ifFalse: [#addSendTo:with:]) - with: collectionValue - with: variableValue]] - ifFalse: [self assignArray: 'result' index: rhsIndex to: variableValue]) -] - -{ #category : #'reduction table' } -SmaCCCodeGenerator >> pullUpVariablesFrom: aSmaCCSymbol into: aSmaCCRHS index: anInteger first: aBoolean [ - aSmaCCSymbol variableDefinitions do: - [:each | - | variableValue rhsIndex | - variableValue := self argumentIndex: anInteger - subIndex: (aSmaCCSymbol indexOfVariable: each variableName). - rhsIndex := aSmaCCRHS productionSymbol indexOfVariable: each variableName. - self - nextPutStatement: ((aSmaCCRHS productionSymbol - isCollection: each variableName) - ifTrue: - [| collectionValue | - collectionValue := self cast: (self at: 'result' index: rhsIndex) - to: self collectionType. - (aSmaCCSymbol isCollection: each variableName) - ifTrue: - [self - perform: (aBoolean - ifTrue: [#addAllFirstSendTo:with:] - ifFalse: [#addAllSendTo:with:]) - with: collectionValue - with: (self cast: variableValue to: self collectionType)] - ifFalse: - [self - perform: (aBoolean - ifTrue: [#addFirstSendTo:with:] - ifFalse: [#addSendTo:with:]) - with: collectionValue - with: variableValue]] - ifFalse: [self assignArray: 'result' index: rhsIndex to: variableValue])] -] - -{ #category : #private } -SmaCCCodeGenerator >> recursionIndexFor: aSmaCCRHS [ - | vars index recursionIndex | - index := 1. - recursionIndex := 0. - vars := aSmaCCRHS productionSymbol variableDefinitions. - aSmaCCRHS do: - [:each | - (each returnsVariableCollection and: - [| rhsVars | - rhsVars := each variableDefinitions. - rhsVars size = vars size and: - [(1 to: rhsVars size) allSatisfy: - [:i | - | var otherVar | - var := rhsVars at: i. - otherVar := vars at: i. - var variableName = otherVar variableName - and: [var isCollection = otherVar isCollection]]]]) - ifTrue: [recursionIndex := index]. - index := index + 1]. - ^recursionIndex -] - -{ #category : #'code generation templates' } -SmaCCCodeGenerator >> reduceAction: anArray [ - self subclassResponsibility -] - -{ #category : #compiling } -SmaCCCodeGenerator >> removeOldMethods [ - self subclassResponsibility -] - -{ #category : #private } -SmaCCCodeGenerator >> removeOldMethodsFrom: aRBClass [ - self subclassResponsibility -] - -{ #category : #private } -SmaCCCodeGenerator >> resetCodeStream [ - codeStream := nil -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> scannerActionFor: aString [ - self subclassResponsibility -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> scannerClass: aString [ - self subclassResponsibility -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> selectorMap: aDictionary [ - self subclassResponsibility -] - -{ #category : #private } -SmaCCCodeGenerator >> send: selector to: aString [ - self subclassResponsibility -] - -{ #category : #'code generation templates' } -SmaCCCodeGenerator >> send: selectorString to: receiverString with: argumentString [ - self subclassResponsibility -] - -{ #category : #'code generation templates' } -SmaCCCodeGenerator >> send: selectorString to: receiverString with: firstArgumentString with: secondArgumentString [ - self subclassResponsibility -] - -{ #category : #'code generation templates' } -SmaCCCodeGenerator >> send: selectorString to: receiverString with: firstArgumentString with: secondArgumentString with: thirdArgumentString [ - self subclassResponsibility -] - -{ #category : #'compiling-parser' } -SmaCCCodeGenerator >> setGetterMethodNameTo: aSmaCCVariableDefinition withName: variableName [ - aSmaCCVariableDefinition - getterMethodName: (self methodNameFor: variableName) -] - -{ #category : #'reduction table' } -SmaCCCodeGenerator >> singleVariableCollectionFor: reduceCode [ - | variable recursionIndex | - variable := reduceCode rhs productionSymbol variableDefinitions asArray first variableName. - self resetCodeStream. - recursionIndex := reduceCode indices - detect: - [:i | - | symbol | - symbol := reduceCode rhs at: i. - symbol isNode not and: [symbol isCollection: variable]] - ifNone: [0]. - self nextPutLine: (self variableDeclaration: 'result' ofType: self arrayType). - self - nextPutStatement: - (self - assignmentTo: 'result' - from: - (recursionIndex = 0 - ifTrue: [self newCollectionOfSize: 2] - ifFalse: [self cast: (self argumentIndex: recursionIndex) to: self collectionType])). - reduceCode indices - do: - [:i | - i = recursionIndex - ifFalse: - [| symbol | - symbol := reduceCode rhs at: i. - self - nextPutStatement: - ((symbol isNode not and: [symbol isCollection: variable]) - ifTrue: - [self - perform: (recursionIndex > i ifTrue: [#addAllFirstSendTo:with:] ifFalse: [#addAllSendTo:with:]) - with: 'result' - with: (self argumentIndex: i)] - ifFalse: - [self - perform: (recursionIndex > i ifTrue: [#addFirstSendTo:with:] ifFalse: [#addSendTo:with:]) - with: 'result' - with: (self argumentIndex: i)])]]. - self nextPutStatement: (self return: 'result'). - self nextPutLine: ''. - ^self codeStream contents -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> sortedTransitionsForNode: aSmaCCNode [ - ^ aSmaCCNode transitions - asSortedCollection: - [ :a :b | - a isCharacterTransition - and: - [ b isCharacterTransition not - or: - [ | aPairs bPairs | - aPairs := self minMaxPairsFor: a without: #(). - bPairs := self minMaxPairsFor: b without: #(). - aPairs size < bPairs size - or: - [ aPairs size = bPairs size - and: - [ a transitionObjects size < b transitionObjects size - or: [ a transitionObjects size = b transitionObjects size and: [ a <= b ] ] ] ] ] ] ] -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> splitLargeNodes: methodStates [ - "Split nodes that might generate long jumps that may not compile (longer than 16 bit offset)." - - | todo | - todo := OrderedCollection withAll: methodStates. - [ todo notEmpty ] - whileTrue: [ | node | - node := todo removeFirst. - node transitions - do: [ :edge | - ((methodStates includes: edge to) not and: [ (edge to codeSizeEstimate: methodStates) > self maxJumpSize ]) - ifTrue: [ methodStates add: edge to. - todo addLast: edge to ] ] ] -] - -{ #category : #private } -SmaCCCodeGenerator >> startProtectedOverrideMethod [ - self resetCodeStream. - self codeStream - nextPutAll: self protected; - nextPutAll: self override -] - -{ #category : #private } -SmaCCCodeGenerator >> startProtectedVirtualMethod [ - self resetCodeStream. - self codeStream - nextPutAll: self protected; - nextPutAll: self virtual -] - -{ #category : #private } -SmaCCCodeGenerator >> startPublicOverrideMethod [ - self resetCodeStream. - self codeStream - nextPutAll: self public; - nextPutAll: self override -] - -{ #category : #private } -SmaCCCodeGenerator >> startPublicVirtualMethod [ - self resetCodeStream. - self codeStream - nextPutAll: self public; - nextPutAll: self virtual -] - -{ #category : #private } -SmaCCCodeGenerator >> startStaticMethod [ - self resetCodeStream. - self codeStream nextPutAll: self static -] - -{ #category : #private } -SmaCCCodeGenerator >> startStaticPrivateMethod [ - self resetCodeStream. - self codeStream - nextPutAll: self static; - nextPutAll: self private -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> statesToMakeIntoMethodsFor: aSmaCCNode [ - | methodStates | - methodStates := self initialMethodStatesFor: aSmaCCNode. - self splitLargeNodes: methodStates. - ^ methodStates asSortedCollection: [ :a :b | a id < b id ] -] - -{ #category : #'code generation templates' } -SmaCCCodeGenerator >> superMessage: aString [ - self subclassResponsibility -] - -{ #category : #'code generation templates' } -SmaCCCodeGenerator >> superMessage: aString argument: argumentString [ - self subclassResponsibility -] - -{ #category : #'code generation templates' } -SmaCCCodeGenerator >> superMessage: aString argument: firstArgumentString argument: secondArgumentString [ - self subclassResponsibility -] - -{ #category : #'reduction table' } -SmaCCCodeGenerator >> variableArrayAction: aSmaCCRHS [ - | recursionIndex | - self resetCodeStream. - recursionIndex := self recursionIndexFor: aSmaCCRHS. - recursionIndex = 0 - ifTrue: [self createVariableArrayFor: aSmaCCRHS] - ifFalse: [self pullUpVariableArrayFor: aSmaCCRHS index: recursionIndex]. - aSmaCCRHS collection keysAndValuesDo: - [:key :value | - key = recursionIndex - ifFalse: - [| variableName | - variableName := aSmaCCRHS variableNameForIndex: key. - variableName isNil - ifTrue: - [value returnsVariableCollection - ifTrue: - [self - pullUpVariablesFrom: value - into: aSmaCCRHS - index: key - first: recursionIndex > key] - ifFalse: - [value returnsSingleVariable - ifTrue: - [self - pullUpVariableFrom: value - into: aSmaCCRHS - index: key - first: recursionIndex > key] - ifFalse: - [value modelType = (self model classFor: nil class) - ifFalse: [aSmaCCRHS generateUnnamedSymbolWarningFor: key]]]] - ifFalse: - [value returnsVariableCollection - ifTrue: [aSmaCCRHS generateNamedVariableCollectionWarningFor: key]. - self - assignVariable: variableName - in: aSmaCCRHS - at: key - first: recursionIndex > key]]]. - self nextPutStatement: (self return: 'result'). - self nextPutLine: ''. - ^self codeStream contents -] - -{ #category : #'code generation templates' } -SmaCCCodeGenerator >> variableReference: aSmaCCVariableDefinition [ - ^ self nonKeywordNameFor: aSmaCCVariableDefinition sourceVariableName -] - -{ #category : #'code generation templates' } -SmaCCCodeGenerator >> variableReference: aSmaCCVariableDefinition in: aString [ - self subclassResponsibility -] - -{ #category : #'compiling-scanner' } -SmaCCCodeGenerator >> writeMatchingCodeFor: aSmaCCNode [ - self subclassResponsibility -] - -{ #category : #private } -SmaCCCodeGenerator >> writeTransitionTableEntry: anArray on: aStream firstIsType: aBoolean [ - self subclassResponsibility -] - -{ #category : #private } -SmaCCCodeGenerator >> writeTransitionTableMethod: stream withIndex: index withArray: array [ - self - startStaticPrivateMethod; - nextPutLine: - (self - method: 'transitionTable' , index printString - type: self voidType - argumentName: array - argumentType: self unsignedShortArrayArray); - nextPutStatement: stream contents; - endMethod; - compileMethodWithoutFormattingIn: parserClass -] diff --git a/src/SmaCC_Development/SmaCCCompilationNotification.class.st b/src/SmaCC_Development/SmaCCCompilationNotification.class.st deleted file mode 100644 index 9a307d77e..000000000 --- a/src/SmaCC_Development/SmaCCCompilationNotification.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -SmaCCCompilationNotification is a Notification that is signaled when a problem occurs when compiling the parser. It is mainly used to show the user problems with their grammar. -" -Class { - #name : #SmaCCCompilationNotification, - #superclass : #Notification, - #category : #'SmaCC_Development-Compiler' -} diff --git a/src/SmaCC_Development/SmaCCCompositeAction.class.st b/src/SmaCC_Development/SmaCCCompositeAction.class.st deleted file mode 100644 index c029b8c9f..000000000 --- a/src/SmaCC_Development/SmaCCCompositeAction.class.st +++ /dev/null @@ -1,93 +0,0 @@ -" -SmaCCCompositeAction is an abstract class that represents multiple actions. - -Subclasses must implement the following messages: - accessing - errorType - preferredAction - -Instance Variables: - actions all valid non-reject actions - - -" -Class { - #name : #SmaCCCompositeAction, - #superclass : #SmaCCAction, - #instVars : [ - 'actions' - ], - #category : #'SmaCC_Development-Actions' -} - -{ #category : #'accessing-actions' } -SmaCCCompositeAction >> actions [ - ^ actions -] - -{ #category : #'accessing-actions' } -SmaCCCompositeAction >> addAction: aSmaCCAction [ - actions add: aSmaCCAction -] - -{ #category : #'accessing-actions' } -SmaCCCompositeAction >> addActions: aSmaCCActionCollection [ - actions addAll: aSmaCCActionCollection -] - -{ #category : #'error handling' } -SmaCCCompositeAction >> errorType [ - self subclassResponsibility -] - -{ #category : #accessing } -SmaCCCompositeAction >> id [ - ^ self preferredAction id -] - -{ #category : #'initialize-release' } -SmaCCCompositeAction >> initialize [ - super initialize. - actions := OrderedCollection new -] - -{ #category : #accessing } -SmaCCCompositeAction >> lr1Item [ - ^ self preferredAction lr1Item -] - -{ #category : #accessing } -SmaCCCompositeAction >> preferredAction [ - self subclassResponsibility -] - -{ #category : #printing } -SmaCCCompositeAction >> printPathOn: aStream [ - self lr1Item path - do: [ :each | aStream nextPutAll: each name ] - separatedBy: [ aStream space ] -] - -{ #category : #'error handling' } -SmaCCCompositeAction >> raiseXReduceNotification [ - | stream | - stream := WriteStream with: String new. - actions - do: - [ :each | - stream nextPutAll: each lr1Item printString. - each == self preferredAction - ifTrue: [ stream nextPutAll: ' *****' ]. - stream cr ]. - stream cr. - self printPathOn: stream. - SmaCCCompilationNotification new - messageText: self errorType; - tag: stream contents; - signal -] - -{ #category : #'error handling' } -SmaCCCompositeAction >> signalAllWarnings [ - self raiseXReduceNotification -] diff --git a/src/SmaCC_Development/SmaCCConcatenationRegexNode.extension.st b/src/SmaCC_Development/SmaCCConcatenationRegexNode.extension.st deleted file mode 100644 index 22468ffba..000000000 --- a/src/SmaCC_Development/SmaCCConcatenationRegexNode.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #SmaCCConcatenationRegexNode } - -{ #category : #'*SmaCC_Development' } -SmaCCConcatenationRegexNode >> asRegularExpression [ - ^ SmaCCSequenceRENode nodes: (self items collect: [ :each | each regularExpression ]) -] diff --git a/src/SmaCC_Development/SmaCCCreateNodeReduceCode.class.st b/src/SmaCC_Development/SmaCCCreateNodeReduceCode.class.st deleted file mode 100644 index 84228b54f..000000000 --- a/src/SmaCC_Development/SmaCCCreateNodeReduceCode.class.st +++ /dev/null @@ -1,67 +0,0 @@ -" -SmaCCCreateNodeReduceCode represents a reduce action that creates a parse node. - -Instance Variables - classDefinition the parse node class to create - index index in the RHS of a symbol that returns parse node, if no symbol returns the parse node, then the index = 0 -" -Class { - #name : #SmaCCCreateNodeReduceCode, - #superclass : #SmaCCReduceCode, - #instVars : [ - 'classDefinition', - 'index' - ], - #category : #'SmaCC_Development-Compilation Model' -} - -{ #category : #comparing } -SmaCCCreateNodeReduceCode >> = anObject [ - ^ super = anObject - and: - [ self classDefinition = anObject classDefinition - and: [ self index = anObject index ] ] -] - -{ #category : #private } -SmaCCCreateNodeReduceCode >> basicModelTypes: aSet [ - ^ Array with: self classDefinition modelClass -] - -{ #category : #accessing } -SmaCCCreateNodeReduceCode >> classDefinition [ - classDefinition isNil - ifTrue: [ classDefinition := rhs nodeClassDefinition - ifNil: [ rhs nodeType ] ]. - ^ classDefinition -] - -{ #category : #accessing } -SmaCCCreateNodeReduceCode >> index [ - ^ index ifNil: [ index := rhs componentIndex ] -] - -{ #category : #'initialize-release' } -SmaCCCreateNodeReduceCode >> index: anInteger [ - index := anInteger -] - -{ #category : #testing } -SmaCCCreateNodeReduceCode >> isPullUpAction [ - ^ self index > 0 -] - -{ #category : #'accessing-types' } -SmaCCCreateNodeReduceCode >> nodeType: anIdentitySet [ - ^ self classDefinition -] - -{ #category : #accessing } -SmaCCCreateNodeReduceCode >> source [ - ^ self isPullUpAction - ifTrue: - [ self codeGenerator - createNodeReduceAction: rhs - pullUpFrom: self index ] - ifFalse: [ self codeGenerator createNodeReduceAction: rhs ] -] diff --git a/src/SmaCC_Development/SmaCCDefaultNodeReduceCode.class.st b/src/SmaCC_Development/SmaCCDefaultNodeReduceCode.class.st deleted file mode 100644 index 225f89f62..000000000 --- a/src/SmaCC_Development/SmaCCDefaultNodeReduceCode.class.st +++ /dev/null @@ -1,101 +0,0 @@ -" -SmaCCDefaultNodeReduceCode represents a reduce action that returns an item in the rhs. It returns the first symbol that is a non-terminal. If all symbols are terminals, then it returns the first terminal symbol. If there aren't any symbols, then it returns nil. - -Instance Variables - index the index in the rhs to return; if 0 then return nil - -" -Class { - #name : #SmaCCDefaultNodeReduceCode, - #superclass : #SmaCCReduceCode, - #instVars : [ - 'index' - ], - #classVars : [ - 'IsCaching' - ], - #category : #'SmaCC_Development-Compilation Model' -} - -{ #category : #'class initialization' } -SmaCCDefaultNodeReduceCode class >> initialize [ - IsCaching := false -] - -{ #category : #comparing } -SmaCCDefaultNodeReduceCode >> = anObject [ - ^ super = anObject and: [ self index = anObject index ] -] - -{ #category : #private } -SmaCCDefaultNodeReduceCode >> basicModelTypes: aSet [ - ^ self index = 0 - ifTrue: [ Array with: (self model classFor: nil class) ] - ifFalse: [ self basicModelTypes: aSet forIndex: self index ] -] - -{ #category : #accessing } -SmaCCDefaultNodeReduceCode >> index [ - index isNil - ifTrue: - [ rhs size to: 1 by: -1 do: [ :i | - (rhs at: i) isTerminal - ifFalse: [ index := i ] ]. - index isNil - ifTrue: [ index := 1 min: rhs size ]. - (rhs size = index and: [ index <= 1 ]) - ifFalse: [ self signalNodeCreationWarning ] ]. - ^ index -] - -{ #category : #public } -SmaCCDefaultNodeReduceCode >> modelTypes: anIdentitySet [ - "Yes, I know it is a hack" - - IsCaching - ifTrue: [ ^ self basicModelTypes: anIdentitySet ]. - IsCaching := true. - ^ [ super modelTypes: anIdentitySet ] - ensure: [ IsCaching := false ] -] - -{ #category : #private } -SmaCCDefaultNodeReduceCode >> returnedNodeIndex [ - self index = 0 - ifTrue: [ ^ nil ]. - ^ self index -] - -{ #category : #accessing } -SmaCCDefaultNodeReduceCode >> signalNodeCreationWarning [ - | stream | - stream := WriteStream on: String new. - stream - nextPutAll: 'Unable to determine what should be returned from the production. '; - nextPutAll: - (index > 0 - ifTrue: [ 'A default item has been chosen, and all other ' ] - ifFalse: [ 'All ' ]); - nextPutAll: 'values will be dropped from the AST:'; - cr; - cr; - nextPutAll: rhs productionSymbol name; - nextPutAll: ' : '. - 1 to: rhs size do: - [ :i | - i == index - ifTrue: [ stream nextPutAll: '>>>' ]. - stream nextPutAll: (rhs at: i) name. - i == index - ifTrue: [ stream nextPutAll: '<<<' ]. - stream space ]. - SmaCCCompilationNotification new - messageText: 'Node creation'; - tag: stream contents; - signal -] - -{ #category : #accessing } -SmaCCDefaultNodeReduceCode >> source [ - ^ self codeGenerator defaultNodeReductionSource: self -] diff --git a/src/SmaCC_Development/SmaCCDefaultReduceCode.class.st b/src/SmaCC_Development/SmaCCDefaultReduceCode.class.st deleted file mode 100644 index 456add1f4..000000000 --- a/src/SmaCC_Development/SmaCCDefaultReduceCode.class.st +++ /dev/null @@ -1,23 +0,0 @@ -" -SmaCCDefaultReduceCode represents a reduce action that returns a collection of all items in the rhs. -" -Class { - #name : #SmaCCDefaultReduceCode, - #superclass : #SmaCCReduceCode, - #category : #'SmaCC_Development-Compilation Model' -} - -{ #category : #private } -SmaCCDefaultReduceCode >> basicModelTypes: aSet [ - ^ Array with: (self model classFor: OrderedCollection) -] - -{ #category : #testing } -SmaCCDefaultReduceCode >> hasReduceAction [ - ^ false -] - -{ #category : #accessing } -SmaCCDefaultReduceCode >> source [ - ^ self codeGenerator defaultReductionSource -] diff --git a/src/SmaCC_Development/SmaCCDuplicateNodeEliminator.class.st b/src/SmaCC_Development/SmaCCDuplicateNodeEliminator.class.st deleted file mode 100644 index ef48a85d4..000000000 --- a/src/SmaCC_Development/SmaCCDuplicateNodeEliminator.class.st +++ /dev/null @@ -1,146 +0,0 @@ -" -SmaCCDuplicateNodeEliminator removes duplicate nodes from a scanner's DFA. - -Instance Variables: - comparisonState a dictionary of ""equal"" objects when testing nodes for equality - root the root node for the DFA - - -" -Class { - #name : #SmaCCDuplicateNodeEliminator, - #superclass : #SmaCCGraphAlgorithm, - #instVars : [ - 'comparisonState', - 'root' - ], - #category : #'SmaCC_Development-DFA/NFA' -} - -{ #category : #algorithm } -SmaCCDuplicateNodeEliminator class >> removeDuplicateNodesIn: aSmaCCNode [ - ^ self new removeDuplicateNodesIn: aSmaCCNode -] - -{ #category : #'graph copying' } -SmaCCDuplicateNodeEliminator >> copyEdgesWith: aDictionary [ - | todo | - todo := OrderedCollection with: root. - [ todo notEmpty ] - whileTrue: - [ | node | - node := todo removeFirst. - (aDictionary at: node) - transitions: - (node sortedTransitions - do: - [ :each | - | copy | - copy := each copy. - copy to: (aDictionary at: each to). - copy ]) ] -] - -{ #category : #'graph copying' } -SmaCCDuplicateNodeEliminator >> copyGraph [ - | map | - map := Dictionary new. - self copyNodesInto: map. - self copyEdgesWith: map. - ^ map at: root -] - -{ #category : #'graph copying' } -SmaCCDuplicateNodeEliminator >> copyNodesInto: aDictionary [ - root allStates - do: [ :each | aDictionary at: each put: each shallowCopy ] -] - -{ #category : #testing } -SmaCCDuplicateNodeEliminator >> isNode: firstSmaCCNode equivalentTo: secondSmaCCNode [ - firstSmaCCNode = secondSmaCCNode - ifTrue: [ ^ true ]. - firstSmaCCNode transitions size = secondSmaCCNode transitions size - ifFalse: [ ^ false ]. - firstSmaCCNode action = secondSmaCCNode action - ifFalse: [ ^ false ]. - ((comparisonState at: firstSmaCCNode ifAbsent: [ #() ]) - includes: secondSmaCCNode) - ifTrue: [ ^ true ]. - (comparisonState at: firstSmaCCNode ifAbsentPut: [ Set new ]) - add: secondSmaCCNode. - (comparisonState at: secondSmaCCNode ifAbsentPut: [ Set new ]) - add: firstSmaCCNode. - firstSmaCCNode sortedTransitions - with: secondSmaCCNode sortedTransitions - do: - [ :first :second | - first transitionObjects = second transitionObjects - ifFalse: [ ^ false ]. - (self isNode: first to equivalentTo: second to) - ifFalse: [ ^ false ] ]. - ^ true -] - -{ #category : #algorithm } -SmaCCDuplicateNodeEliminator >> mergeAllTransitions [ - root allStates do: [ :each | each mergeTransitions ] -] - -{ #category : #algorithm } -SmaCCDuplicateNodeEliminator >> mergeNodeUsing: aDictionary [ - | seen todo mappings | - mappings := Dictionary new. - aDictionary - keysAndValuesDo: [ :key :value | value do: [ :each | mappings at: each put: key ] ]. - seen := IdentitySet new. - todo := OrderedCollection with: root. - [ todo notEmpty ] - whileTrue: - [ | node mergedNode | - node := todo removeFirst. - node transitions - do: - [ :each | - (seen includes: each to) - ifFalse: [ todo add: each to. - seen add: each to ] ]. - mergedNode := mappings at: node ifAbsent: [ nil ]. - mergedNode notNil - ifTrue: [ node mergeWith: mergedNode ] ] -] - -{ #category : #private } -SmaCCDuplicateNodeEliminator >> pairsDo: aBlock [ - | nodes | - nodes := root allStates asSortedCollection. - 1 to: nodes size - 1 do: - [ :i | i + 1 to: nodes size do: [ :j | aBlock value: (nodes at: i) value: (nodes at: j) ] ] -] - -{ #category : #algorithm } -SmaCCDuplicateNodeEliminator >> removeDuplicateNodesIn: aSmaCCNode [ - root := aSmaCCNode. - self removeDuplicates. - self copyGraph. - ^ root -] - -{ #category : #algorithm } -SmaCCDuplicateNodeEliminator >> removeDuplicates [ - | toMerge | - [ toMerge := Dictionary new. - self mergeAllTransitions. - self - pairsDo: - [ :firstNode :secondNode | - comparisonState := Dictionary new. - (self isNode: firstNode equivalentTo: secondNode) - ifTrue: [ (toMerge at: firstNode ifAbsentPut: [ Set new ]) - add: secondNode ] ]. - toMerge notEmpty ] - whileTrue: - [ toMerge values - do: [ :each | each do: [ :node | toMerge removeKey: node ifAbsent: [ ] ] ]. - self mergeNodeUsing: toMerge ] -] diff --git a/src/SmaCC_Development/SmaCCEdge.class.st b/src/SmaCC_Development/SmaCCEdge.class.st deleted file mode 100644 index 54e5f79a1..000000000 --- a/src/SmaCC_Development/SmaCCEdge.class.st +++ /dev/null @@ -1,144 +0,0 @@ -" -SmaCCEdge is an edge in the DFA/NFA for the scanner. It contains the objects (characters or symbols) that we transition on and the node we transition to. - -Subclasses must implement the following messages: - private - dispatchTo:seen: - -Instance Variables: - toNode the next node in the graph - transitionObjects the characters or states that we transition on - - -" -Class { - #name : #SmaCCEdge, - #superclass : #Object, - #instVars : [ - 'toNode', - 'transitionObjects' - ], - #category : #'SmaCC_Development-DFA/NFA' -} - -{ #category : #'instance creation' } -SmaCCEdge class >> to: aSmaCCNode on: aCollectionOrNil [ - | edge | - edge := self new. - edge to: aSmaCCNode on: aCollectionOrNil. - ^ edge -] - -{ #category : #comparing } -SmaCCEdge >> <= aSmaCCEdge [ - ^ true -] - -{ #category : #comparing } -SmaCCEdge >> = aSmaCCEdge [ - ^ self class = aSmaCCEdge class - and: - [ self to = aSmaCCEdge to - and: [ self transitionObjects = aSmaCCEdge transitionObjects ] ] -] - -{ #category : #testing } -SmaCCEdge >> canMergeWith: aSmaCCEdge [ - ^ self class = aSmaCCEdge class -] - -{ #category : #compiling } -SmaCCEdge >> codeSizeEstimate [ - "Estimate how many bytecodes will be used to generate the comparison." - - ^ self subclassResponsibility -] - -{ #category : #compiling } -SmaCCEdge >> dispatchTo: aSmaCCCodeGenerator seen: aCollection [ - ^ self subclassResponsibility -] - -{ #category : #printing } -SmaCCEdge >> edgeLabel [ - ^ transitionObjects isNil - ifTrue: [ 'epsilon' ] - ifFalse: - [ transitionObjects - inject: '' - into: [ :sum :each | sum , each printString ] ] -] - -{ #category : #comparing } -SmaCCEdge >> hash [ - ^ self to hash hashMultiply bitXor: transitionObjects hash -] - -{ #category : #testing } -SmaCCEdge >> includes: anObject [ - ^ transitionObjects notNil and: [ transitionObjects includes: anObject ] -] - -{ #category : #testing } -SmaCCEdge >> isCharacterTransition [ - ^ false -] - -{ #category : #testing } -SmaCCEdge >> isEmpty [ - ^ transitionObjects isEmpty -] - -{ #category : #testing } -SmaCCEdge >> isEpsilonTransition [ - ^ transitionObjects isNil -] - -{ #category : #merging } -SmaCCEdge >> mergeWith: aSmaCCEdge [ - transitionObjects := Array - withAll: - (transitionObjects , aSmaCCEdge transitionObjects) asSet - asSortedCollection -] - -{ #category : #printing } -SmaCCEdge >> printOn: aStream [ - aStream - nextPutAll: '---'; - nextPutAll: self edgeLabel; - nextPutAll: '--->'; - nextPutAll: toNode printString -] - -{ #category : #private } -SmaCCEdge >> remove: aCollection [ - transitionObjects := transitionObjects - reject: [ :each | aCollection includes: each ] -] - -{ #category : #accessing } -SmaCCEdge >> setClass [ - ^ Set -] - -{ #category : #accessing } -SmaCCEdge >> to [ - ^ toNode -] - -{ #category : #'initialize-release' } -SmaCCEdge >> to: aSmaCCNode [ - toNode := aSmaCCNode -] - -{ #category : #'initialize-release' } -SmaCCEdge >> to: aSmaCCNode on: aStringOrNil [ - toNode := aSmaCCNode. - transitionObjects := aStringOrNil -] - -{ #category : #accessing } -SmaCCEdge >> transitionObjects [ - ^ transitionObjects -] diff --git a/src/SmaCC_Development/SmaCCEpsilonRemoval.class.st b/src/SmaCC_Development/SmaCCEpsilonRemoval.class.st deleted file mode 100644 index 1deeda65c..000000000 --- a/src/SmaCC_Development/SmaCCEpsilonRemoval.class.st +++ /dev/null @@ -1,74 +0,0 @@ -" -SmaCCEpsilonRemoval removes all epsilon edges from the scanner's NFA. - -Instance Variables: - nodeMap map from nodes in old graph to nodes in new graph - - -" -Class { - #name : #SmaCCEpsilonRemoval, - #superclass : #SmaCCGraphAlgorithm, - #instVars : [ - 'nodeMap' - ], - #category : #'SmaCC_Development-DFA/NFA' -} - -{ #category : #algorithm } -SmaCCEpsilonRemoval class >> removeEpsilonEdgesFrom: aSmaCCNode [ - "Returns an equivalent graph to aSmaCCNode that doesn't contain any epsilon transitions" - - ^ self new removeEpsilonEdgesFrom: aSmaCCNode -] - -{ #category : #algorithm } -SmaCCEpsilonRemoval >> createNodeWithoutEpsilonEdges: aSmaCCNode [ - | newNode newTransitions | - newNode := self - createMergedNodeFrom: (self epsilonReachableNodesFrom: aSmaCCNode). - nodeMap at: aSmaCCNode put: newNode. - newTransitions := OrderedCollection new. - newNode transitions - do: - [ :each | - each isEpsilonTransition - ifFalse: - [ newTransitions - add: - (each class - to: (self removeEpsilonEdgesFrom: each to) - on: each transitionObjects) ] ]. - newNode transitions: newTransitions. - ^ newNode -] - -{ #category : #algorithm } -SmaCCEpsilonRemoval >> epsilonReachableNodesFrom: aSmaCCNode [ - | todo reachable node | - reachable := Set with: aSmaCCNode. - todo := OrderedCollection with: aSmaCCNode. - [ todo notEmpty ] - whileTrue: - [ node := todo removeLast. - node transitions - do: - [ :each | - (each isEpsilonTransition and: [ (reachable includes: each to) not ]) - ifTrue: [ reachable add: each to. - todo add: each to ] ] ]. - ^ reachable -] - -{ #category : #'initialize-release' } -SmaCCEpsilonRemoval >> initialize [ - super initialize. - nodeMap := Dictionary new -] - -{ #category : #algorithm } -SmaCCEpsilonRemoval >> removeEpsilonEdgesFrom: aSmaCCNode [ - ^ nodeMap - at: aSmaCCNode - ifAbsent: [ self createNodeWithoutEpsilonEdges: aSmaCCNode ] -] diff --git a/src/SmaCC_Development/SmaCCErrorTerminalSymbol.class.st b/src/SmaCC_Development/SmaCCErrorTerminalSymbol.class.st deleted file mode 100644 index 25052b29a..000000000 --- a/src/SmaCC_Development/SmaCCErrorTerminalSymbol.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #SmaCCErrorTerminalSymbol, - #superclass : #SmaCCTerminalSymbol, - #category : #'SmaCC_Development-Model' -} - -{ #category : #accessing } -SmaCCErrorTerminalSymbol >> modelTypes: anIdentitySet [ - ^ Set with: (self model classFor: SmaCCErrorNode) -] diff --git a/src/SmaCC_Development/SmaCCGrammar.class.st b/src/SmaCC_Development/SmaCCGrammar.class.st deleted file mode 100644 index 48aeab5dd..000000000 --- a/src/SmaCC_Development/SmaCCGrammar.class.st +++ /dev/null @@ -1,660 +0,0 @@ -Class { - #name : #SmaCCGrammar, - #superclass : #Object, - #instVars : [ - 'type', - 'shiftReduceTable', - 'symbols', - 'scannerDefinition', - 'otherStartingSymbols', - 'classDefinitions', - 'prefix', - 'suffix', - 'codeGenerator', - 'isGLR', - 'ignoreCase', - 'ignoredVariables', - 'annotateTokens', - 'errorSymbol', - 'emptySymbol', - 'sentinelSymbol' - ], - #classVars : [ - 'IsExpressionMap', - 'IsExpressionMaxCharacter', - 'IsExpressions', - 'MaximumCharacterValue', - 'TokenNameBlock', - 'TokenNameMap' - ], - #category : #'SmaCC_Development-Model' -} - -{ #category : #accessing } -SmaCCGrammar class >> allCharacters [ - ^ SmaCCCharacterSet withAllCharactersTo: (Character value: self maximumCharacterValue) -] - -{ #category : #private } -SmaCCGrammar class >> charactersFor: aSymbol [ - | isExpressionMap | - isExpressionMap := self isExpressionMap. - ^ isExpressionMap at: aSymbol ifAbsentPut: [ self generateCharacterSetFor: aSymbol ] -] - -{ #category : #accessing } -SmaCCGrammar class >> defaultTokenNameFor: aString [ - | stream string | - stream := WriteStream on: String new. - aString - do: - [ :each | - | value | - value := self tokenNameMap at: each ifAbsent: [ each ]. - value isString - ifTrue: - [ stream - nextPutAll: - (stream position = 0 - ifTrue: [ value ] - ifFalse: [ value capitalized ]) ] - ifFalse: [ stream - nextPut: - (value isAlphaNumeric - ifTrue: [ value ] - ifFalse: [ $_ ]) ] ]. - string := stream contents. - string first isDigit - ifTrue: [ string := '_' , string ]. - string first isUppercase - ifTrue: [ string at: 1 put: string first asLowercase ]. - ^ string , 'Token' -] - -{ #category : #accessing } -SmaCCGrammar class >> defaultTokenNameMap [ - | map | - map := Dictionary new. - #(#($< 'lessThan') #($> 'greaterThan') #($= 'equal') #($( 'leftParen') #($) 'rightParen') #(${ 'leftBrace') #($} 'rightBrace') #($[ 'leftBracket') #($] 'rightBracket') #($, 'comma') #($; 'semicolon') #($- 'minus') #($+ 'plus') #($* 'times') #($/ 'divide') #($: 'colon') #($. 'period') #($? 'questionMark') #($! 'bang') #($% 'percent') #($^ 'upArrow') #($& 'and') #($| 'or') #($~ 'tilde')) - do: [ :each | map at: each first put: each last ]. - ^ map -] - -{ #category : #private } -SmaCCGrammar class >> generateCharacterSetFor: aSelector [ - | set | - set := SmaCCCharacterSet new. - 0 to: self maximumCharacterValue do: [ :i | - | ch | - ch := Character value: i. - (ch perform: aSelector) - ifTrue: [ set add: ch ] ]. - ^ set -] - -{ #category : #accessing } -SmaCCGrammar class >> implicitToken: aString [ - | symbol node | - symbol := (aString copyFrom: 2 to: aString size - 1) asSymbol. - (Character canUnderstand: symbol) - ifFalse: [ ^ nil ]. - node := SmaCCCharacterRENode characters: (self charactersFor: symbol). - node position: SmallInteger maxVal. "Implicit nodes have least precedence" - ^ node -] - -{ #category : #'class initialization' } -SmaCCGrammar class >> initialize [ - self maximumCharacterValue: 255. - "A good default of isExpressions -- you can set to nil to have it compute from the image" - self isExpressions: #(isAlphaNumeric isDigit isLetter isLiteral isLowercase isSeparator isSpecial isUppercase isVowel) -] - -{ #category : #accessing } -SmaCCGrammar class >> isExpressionMap [ - "Creates a map from selectors that start with 'is' on Character to sets of characters. This allows generated scanners to take - full advantage of selectors that are already implemented on Character" - - (IsExpressionMap isNil or: [ IsExpressionMaxCharacter ~= self maximumCharacterValue ]) - ifTrue: [ | selectors | - IsExpressionMaxCharacter := self maximumCharacterValue. - IsExpressionMap := Dictionary new. - selectors := IsExpressions - ifNil: [ Character selectors select: [ :each | each size > 2 and: [ (each beginsWith: 'is') and: [ each numArgs = 0 and: [ (each at: 3) isUppercase ] ] ] ] ]. - selectors - do: [ :sel | - | string | - string := self generateCharacterSetFor: sel. - string isEmpty - ifFalse: [ IsExpressionMap at: sel put: string ] ] ]. - ^ IsExpressionMap -] - -{ #category : #accessing } -SmaCCGrammar class >> isExpressions [ - ^ IsExpressions -] - -{ #category : #accessing } -SmaCCGrammar class >> isExpressions: aCollection [ - "Assign a collection of Character is___ selectors that can be used to create the scanner. These can make the generated scanners easier to read as a test like currentCharacter isAlphaNumeric is easier to read than a test of '(currentCharacter >= $A and: [currentCharacter <= $Z]) or: [(currentCharacter >= $a and: [currentCharacter <= $z]) or: [currentCharacter >= $0 and: [currentCharacter <= $9]]]'. If the collection is nil, SmaCC will automatically create the set of all is___ methods that are in the current image. This may result in a scanner that doesn't work in a different image. If you wish to limit the selectors that can be used, you can set them here: - - self isExpressions: #(isAlphaNumeric isDigit isLetter isLiteral isLowercase isSeparator isSpecial isUppercase isVowel) - - " - - IsExpressions := aCollection. - IsExpressionMap := nil -] - -{ #category : #accessing } -SmaCCGrammar class >> maximumCharacterValue [ - ^ MaximumCharacterValue -] - -{ #category : #accessing } -SmaCCGrammar class >> maximumCharacterValue: anInteger [ - MaximumCharacterValue := anInteger -] - -{ #category : #accessing } -SmaCCGrammar class >> tokenNameBlock [ - ^ TokenNameBlock - ifNil: [ [ :string | self defaultTokenNameFor: string ] ] -] - -{ #category : #accessing } -SmaCCGrammar class >> tokenNameBlock: aBlock [ - TokenNameBlock := aBlock -] - -{ #category : #accessing } -SmaCCGrammar class >> tokenNameMap [ - ^ TokenNameMap ifNil: [ TokenNameMap := self defaultTokenNameMap ] -] - -{ #category : #accessing } -SmaCCGrammar class >> tokenNameMap: aDictionary [ - TokenNameMap := aDictionary -] - -{ #category : #accessing } -SmaCCGrammar >> addExtraSymbols [ - self addSymbol: self emptySymbol. - self addSymbol: self errorSymbol -] - -{ #category : #accessing } -SmaCCGrammar >> addStartingSymbol: aSmaCCSymbol [ - (otherStartingSymbols includes: aSmaCCSymbol) - ifFalse: [ otherStartingSymbols add: aSmaCCSymbol ] -] - -{ #category : #private } -SmaCCGrammar >> addSymbol: aSmaCCSymbol [ - aSmaCCSymbol grammar: self. - self symbols add: aSmaCCSymbol. - ^ aSmaCCSymbol -] - -{ #category : #private } -SmaCCGrammar >> addSymbolFirst: aSmaCCSymbol [ - aSmaCCSymbol grammar: self. - ^ self symbols addFirst: aSmaCCSymbol -] - -{ #category : #accessing } -SmaCCGrammar >> allStartingSymbols [ - "Return all starting symbols with the default starting symbol listed first." - - | startingSymbols default | - default := self startSymbol. - startingSymbols := otherStartingSymbols copy. - startingSymbols remove: default symbol ifAbsent: [ ]. - startingSymbols := startingSymbols - collect: - [ :each | self createStartingSymbolFor: each ]. - startingSymbols addFirst: default. - ^ startingSymbols -] - -{ #category : #accessing } -SmaCCGrammar >> annotateTokens: aBoolean [ - annotateTokens := aBoolean -] - -{ #category : #private } -SmaCCGrammar >> calculateFirstSets [ - | changed | - changed := true. - [ changed ] - whileTrue: - [ changed := false. - self symbols - do: [ :each | changed := changed | each calculateFirstTerminals ] ] -] - -{ #category : #accessing } -SmaCCGrammar >> classDefinitions [ - | defs root | - root := self rootDefinition. - (root isNil and: [ classDefinitions notEmpty ]) - ifTrue: - [ SmaCCCompilationNotification new - messageText: 'Node generation'; - tag: 'Cannot generate node classes without specifying a "%root" node.'; - signal ]. - root isNil - ifTrue: [ ^ #() ]. - defs := classDefinitions asOrderedCollection. - defs - do: - [ :each | - (each isRoot not and: [ each superclass isNil ]) - ifTrue: [ each superclass: root ] ]. - ^ defs -] - -{ #category : #accessing } -SmaCCGrammar >> classNamed: aSymbol [ - ^ classDefinitions - at: aSymbol - ifAbsentPut: [ SmaCCNodeClassDefinition named: aSymbol grammar: self ] -] - -{ #category : #accessing } -SmaCCGrammar >> codeGenerator [ - ^ codeGenerator -] - -{ #category : #'initialize-release' } -SmaCCGrammar >> codeGenerator: aSmaCCCodeGenerator [ - codeGenerator := aSmaCCCodeGenerator. - aSmaCCCodeGenerator grammar: self -] - -{ #category : #accessing } -SmaCCGrammar >> createStartingSymbolFor: smaccSymbol [ - ^ (self newStartingSymbolNamed: smaccSymbol name) - addProduction: - (self newRHS - add: smaccSymbol; - yourself); - yourself -] - -{ #category : #accessing } -SmaCCGrammar >> emptySymbol [ - ^ emptySymbol - ifNil: [ emptySymbol := self newTerminalSymbolNamed: 'E O F' ] -] - -{ #category : #accessing } -SmaCCGrammar >> emptySymbols [ - ^ self symbols - select: [ :each | each isTerminal not and: [ each isEmpty ] ] -] - -{ #category : #accessing } -SmaCCGrammar >> errorSymbol [ - ^ errorSymbol - ifNil: [ errorSymbol := (SmaCCErrorTerminalSymbol name: 'error') - grammar: self; - yourself ] -] - -{ #category : #private } -SmaCCGrammar >> findSymbolNamed: aString ifAbsent: aBlock [ - ^ self symbols detect: [ :each | each name = aString ] ifNone: aBlock -] - -{ #category : #private } -SmaCCGrammar >> findSymbolNamed: aString ifAbsentAdd: aBlock [ - ^ self - findSymbolNamed: aString - ifAbsent: [ self addSymbol: aBlock value ] -] - -{ #category : #private } -SmaCCGrammar >> findSymbolNamed: aString ifAbsentAddFirst: aBlock [ - ^ self - findSymbolNamed: aString - ifAbsent: [ self addSymbolFirst: aBlock value ] -] - -{ #category : #private } -SmaCCGrammar >> finishBuilding [ - self ignoreCase - ifTrue: - [ self symbols do: [ :each | each makeCaseInsensitive ]. - self mergeCaseSensitiveKeywords ]. - annotateTokens - ifTrue: - [ self symbols - do: [ :each | each annotateTokenVariables: self class tokenNameBlock ] ] -] - -{ #category : #testing } -SmaCCGrammar >> hasMultipleScannerStates [ - ^ self scannerStates size > 1 -] - -{ #category : #testing } -SmaCCGrammar >> ignoreCase [ - ^ ignoreCase -] - -{ #category : #private } -SmaCCGrammar >> ignoreCase: aBoolean [ - ignoreCase := aBoolean -] - -{ #category : #private } -SmaCCGrammar >> ignoredVariables [ - ^ ignoredVariables -] - -{ #category : #private } -SmaCCGrammar >> ignoredVariables: aCollection [ - ignoredVariables := aCollection asSet -] - -{ #category : #accessing } -SmaCCGrammar >> initialItemSetFor: aSmaCCSymbol [ - ^ aSmaCCSymbol asLRItemSet - type: type; - yourself -] - -{ #category : #'initialize-release' } -SmaCCGrammar >> initialize [ - super initialize. - scannerDefinition := SmaCCScannerDefinition new. - type := #LALR1. - symbols := OrderedCollection new. - shiftReduceTable := Dictionary new. - otherStartingSymbols := OrderedCollection new. - classDefinitions := Dictionary new. - prefix := suffix := ''. - isGLR := false. - ignoreCase := false. - ignoredVariables := Set new. - annotateTokens := false -] - -{ #category : #testing } -SmaCCGrammar >> isGLR [ - ^ isGLR -] - -{ #category : #'initialize-release' } -SmaCCGrammar >> isGLR: aBoolean [ - isGLR := aBoolean -] - -{ #category : #private } -SmaCCGrammar >> keywordRegularExpressionFor: aString [ - | regularExpressionString regex | - regularExpressionString := (aString copyFrom: 2 to: aString size - 1) copyReplaceAll: '""' with: '"'. - regex := regularExpressionString - inject: nil - into: [ :sum :each | - sum isNil - ifTrue: [ SmaCCCharacterRENode characters: (SmaCCCharacterSet with: each) ] - ifFalse: [ sum , (SmaCCCharacterRENode characters: (SmaCCCharacterSet with: each)) ] ]. - regex addStates: self scannerStates. - ^ regex -] - -{ #category : #private } -SmaCCGrammar >> keywordTerminalNamed: aString [ - ^ self - findSymbolNamed: aString - ifAbsentAddFirst: - [ (self newTerminalSymbolNamed: aString) - regularExpression: (self keywordRegularExpressionFor: aString); - yourself ] -] - -{ #category : #precedence } -SmaCCGrammar >> leftPrecedenceFor: aSmaCCSymbol [ - shiftReduceTable at: aSmaCCSymbol put: SmaCCReduceAction -] - -{ #category : #accessing } -SmaCCGrammar >> makeTokenIdMethodFor: aString [ - | token | - token := (scannerDefinition includesTokenNamed: aString) - ifTrue: [ self terminalSymbolNamed: aString ] - ifFalse: - [ self - findSymbolNamed: aString - ifAbsentAdd: [ self newTerminalSymbolNamed: aString ] ]. - token createIdMethod: true -] - -{ #category : #private } -SmaCCGrammar >> mergeAll: anOrderedCollection [ - | new first set | - first := anOrderedCollection first. - new := self newTerminalSymbolNamed: first name asUppercase. - new regularExpression: first regularExpression. - symbols add: new before: first. - symbols removeAll: anOrderedCollection. - set := anOrderedCollection asSet. - self - rhsDo: - [ :each | - 1 to: each size do: - [ :i | - (set includes: (each at: i)) - ifTrue: [ each collection at: i put: new ] ] ] -] - -{ #category : #private } -SmaCCGrammar >> mergeCaseSensitiveKeywords [ - | duplicateMap | - duplicateMap := Dictionary new. - self symbols - do: - [ :each | - (each isTerminal and: [ each name first = $" ]) - ifTrue: - [ (duplicateMap - at: each name asUppercase - ifAbsentPut: [ OrderedCollection new ]) add: each ] ]. - duplicateMap - keysAndValuesDo: [ :name :value | - value size > 1 - ifTrue: [ self mergeAll: value ] ] -] - -{ #category : #'item creation' } -SmaCCGrammar >> newItemSet [ - ^ SmaCCItemSet new - grammar: self; - yourself -] - -{ #category : #'item creation' } -SmaCCGrammar >> newNonTerminalSymbolNamed: aString [ - ^ (SmaCCNonTerminalSymbol name: aString) - grammar: self; - yourself -] - -{ #category : #'item creation' } -SmaCCGrammar >> newRHS [ - ^ SmaCCRHS new - grammar: self; - yourself -] - -{ #category : #'item creation' } -SmaCCGrammar >> newStartingSymbolNamed: aString [ - ^ (SmaCCStartingSymbol name: 'B e g i n' , aString) - grammar: self; - yourself -] - -{ #category : #'item creation' } -SmaCCGrammar >> newTerminalSymbolNamed: aString [ - ^ (SmaCCTerminalSymbol name: aString) - grammar: self; - yourself -] - -{ #category : #precedence } -SmaCCGrammar >> nonAssociativePrecedenceFor: aSmaCCSymbol [ - shiftReduceTable at: aSmaCCSymbol put: SmaCCRejectAction -] - -{ #category : #private } -SmaCCGrammar >> nonTerminalSymbolNamed: aString [ - ^ self - findSymbolNamed: aString - ifAbsentAdd: [ self newNonTerminalSymbolNamed: aString ] -] - -{ #category : #accessing } -SmaCCGrammar >> preferredActionFor: aSmaCCSymbol [ - ^ shiftReduceTable at: aSmaCCSymbol ifAbsent: [ nil ] -] - -{ #category : #accessing } -SmaCCGrammar >> prefix [ - ^ prefix -] - -{ #category : #'initialize-release' } -SmaCCGrammar >> prefix: aString [ - prefix := aString -] - -{ #category : #accessing } -SmaCCGrammar >> rhsDo: aBlock [ - self symbols do: [ :each | each productionsDo: aBlock ] -] - -{ #category : #precedence } -SmaCCGrammar >> rightPrecedenceFor: aSmaCCSymbol [ - shiftReduceTable at: aSmaCCSymbol put: SmaCCShiftAction -] - -{ #category : #accessing } -SmaCCGrammar >> rootDefinition [ - ^ classDefinitions detect: [ :each | each isRoot ] ifNone: [ nil ] -] - -{ #category : #'initialize-release' } -SmaCCGrammar >> scannerDefinition [ - ^ scannerDefinition -] - -{ #category : #'initialize-release' } -SmaCCGrammar >> scannerDefinition: aSmaCCScannerDefinition [ - scannerDefinition := aSmaCCScannerDefinition -] - -{ #category : #accessing } -SmaCCGrammar >> scannerStates [ - ^ scannerDefinition states -] - -{ #category : #accessing } -SmaCCGrammar >> sentinelSymbol [ - ^ sentinelSymbol - ifNil: [ sentinelSymbol := self newTerminalSymbolNamed: 'S e n t i n e l' ] -] - -{ #category : #precedence } -SmaCCGrammar >> setOperatorPrecedenceFor: aSmaCCSymbol to: anInteger [ - aSmaCCSymbol precedence: anInteger -] - -{ #category : #accessing } -SmaCCGrammar >> setStartSymbolIfNone: aSmaCCSymbol [ - | startSymbol | - self startSymbol notNil - ifTrue: [ ^ self ]. - startSymbol := self newStartingSymbolNamed: ''. - self addSymbol: startSymbol. - startSymbol - addProduction: - (self newRHS - add: aSmaCCSymbol; - yourself) -] - -{ #category : #accessing } -SmaCCGrammar >> startSymbol [ - ^ self symbols - detect: [ :each | each isStartingSymbol ] - ifNone: [ nil ] -] - -{ #category : #accessing } -SmaCCGrammar >> suffix [ - ^ suffix -] - -{ #category : #'initialize-release' } -SmaCCGrammar >> suffix: aString [ - suffix := aString -] - -{ #category : #accessing } -SmaCCGrammar >> symbolNamed: aString [ - ^self findSymbolNamed: aString ifAbsent: [ nil ] -] - -{ #category : #private } -SmaCCGrammar >> symbols [ - ^ symbols -] - -{ #category : #private } -SmaCCGrammar >> symbols: aCollection [ - symbols := aCollection -] - -{ #category : #private } -SmaCCGrammar >> terminalSymbolNamed: aString [ - ^ self - findSymbolNamed: aString - ifAbsentAdd: - [ (self newTerminalSymbolNamed: aString) - regularExpression: (scannerDefinition tokenNamed: aString); - yourself ] -] - -{ #category : #accessing } -SmaCCGrammar >> tokens [ - ^ scannerDefinition tokens -] - -{ #category : #'initialize-release' } -SmaCCGrammar >> type: aSmaCCSymbol [ - type := aSmaCCSymbol -] - -{ #category : #accessing } -SmaCCGrammar >> unusedSymbols [ - | nonTerminals problemSymbols todo | - nonTerminals := self symbols reject: [ :each | each isTerminal ]. - todo := OrderedCollection withAll: self allStartingSymbols. - problemSymbols := nonTerminals asSet - reject: [ :each | todo includes: each ]. - [ todo isEmpty ] - whileFalse: - [ todo removeFirst - productionsDo: - [ :rhs | - rhs - do: - [ :each | - (problemSymbols includes: each) - ifTrue: [ todo add: each. - problemSymbols remove: each ] ] ] ]. - ^ problemSymbols -] diff --git a/src/SmaCC_Development/SmaCCGrammarCompiler.class.st b/src/SmaCC_Development/SmaCCGrammarCompiler.class.st deleted file mode 100644 index 4c61f2a54..000000000 --- a/src/SmaCC_Development/SmaCCGrammarCompiler.class.st +++ /dev/null @@ -1,407 +0,0 @@ -Class { - #name : #SmaCCGrammarCompiler, - #superclass : #Object, - #instVars : [ - 'shiftTable', - 'itemSets', - 'startingStateMap', - 'actions', - 'parserDefinitionString', - 'scannerCompiler', - 'grammar', - 'codeGenerator', - 'reduceTable' - ], - #classVars : [ - 'OptimizeTransitionTable' - ], - #category : #'SmaCC_Development-Compiler' -} - -{ #category : #accessing } -SmaCCGrammarCompiler class >> optimizeTransitionTable [ - ^ OptimizeTransitionTable ifNil: [ true ] -] - -{ #category : #accessing } -SmaCCGrammarCompiler class >> optimizeTransitionTable: aBoolean [ - OptimizeTransitionTable := aBoolean -] - -{ #category : #accessing } -SmaCCGrammarCompiler class >> toggleOptimizeTransitionTable [ - self optimizeTransitionTable: self optimizeTransitionTable not -] - -{ #category : #'action table' } -SmaCCGrammarCompiler >> actionForState: anInteger on: aSmaCCSymbol [ - | action | - action := (itemSets at: anInteger) - action: aSmaCCSymbol - prefer: (grammar preferredActionFor: aSmaCCSymbol). - ^ self idForAction: action state: anInteger on: aSmaCCSymbol -] - -{ #category : #'initialize-release' } -SmaCCGrammarCompiler >> buildDefinition: definitionString [ - | parser tree | - scannerCompiler grammar: self grammar. - parserDefinitionString := definitionString. - parser := SmaCCDefinitionParser on: (ReadStream on: definitionString). - parser scanner parseSourceSelector: self codeGenerator parseSourceSelector. - tree := parser parse. - tree completeSource: definitionString. - SmaCCGrammarCreator buildGrammar: grammar from: tree. - grammar finishBuilding -] - -{ #category : #private } -SmaCCGrammarCompiler >> checkFor: problemSymbols errorMessage: errorMessage [ - | stream | - problemSymbols isEmpty - ifTrue: [ ^ self ]. - stream := WriteStream with: String new. - problemSymbols - do: [ :each | stream nextPutAll: each printString ] - separatedBy: [ stream space ]. - SmaCCCompilationNotification new - messageText: errorMessage; - tag: stream contents; - signal -] - -{ #category : #private } -SmaCCGrammarCompiler >> checkForEmptySymbols [ - self - checkFor: grammar emptySymbols - errorMessage: 'Missing non-terminal productions' -] - -{ #category : #private } -SmaCCGrammarCompiler >> checkForUnusedSymbols [ - self - checkFor: grammar unusedSymbols - errorMessage: 'Unused non-terminal symbols' -] - -{ #category : #accessing } -SmaCCGrammarCompiler >> codeGenerator [ - ^ codeGenerator - ifNil: [ self codeGenerator: SmaCCSmalltalkCodeGenerator new ] -] - -{ #category : #'initialize-release' } -SmaCCGrammarCompiler >> codeGenerator: aSmaCCCodeGenerator [ - codeGenerator := aSmaCCCodeGenerator. - self grammar codeGenerator: aSmaCCCodeGenerator. - scannerCompiler codeGenerator: aSmaCCCodeGenerator. - ^ codeGenerator -] - -{ #category : #compiling } -SmaCCGrammarCompiler >> compileInto: sClass andParser: pClass [ - self scannerClass: sClass. - self parserClass: pClass. - self createChanges. - self codeGenerator compileChanges -] - -{ #category : #compiling } -SmaCCGrammarCompiler >> compileNodeClasses [ - SmaCCNodeCalculation compileForGrammar: grammar -] - -{ #category : #compiling } -SmaCCGrammarCompiler >> compileParser [ - self compileNodeClasses. - self codeGenerator - compileTransitionTable: self transitionTable; - compileStartingStateIds: startingStateMap; - compileReductionTable: self reduceTable; - compileReductionActions; - compileScannerClassIntoParser; - compileSymbolNames; - compileCacheId -] - -{ #category : #compiling } -SmaCCGrammarCompiler >> compileScanner [ - scannerCompiler compileScanner -] - -{ #category : #'action table' } -SmaCCGrammarCompiler >> compressTable: table [ - ^ table collect: [ :row | self compressTableRow: row ] -] - -{ #category : #'action table' } -SmaCCGrammarCompiler >> compressTableRow: row [ - | uniqueItems | - uniqueItems := self uniqueNonErrorActionsForTableRow: row. - ^ uniqueItems size = 1 - ifTrue: [ self - singleActionTableRow: row - forAction: uniqueItems first ] - ifFalse: [ self multipleActionTableRow: row ] -] - -{ #category : #'action table' } -SmaCCGrammarCompiler >> compressedRowStream [ - ^ WriteStream with: Array new -] - -{ #category : #compiling } -SmaCCGrammarCompiler >> createChanges [ - self codeGenerator removeOldMethods. - self checkForEmptySymbols. - self checkForUnusedSymbols. - self compileScanner. - self compileParser. - self codeGenerator compileDefinitionComment: parserDefinitionString -] - -{ #category : #'action table' } -SmaCCGrammarCompiler >> createItemSets [ - | itemSet newState index | - startingStateMap := Dictionary new. - grammar calculateFirstSets. - itemSets := OrderedCollection new. - grammar allStartingSymbols - do: - [ :each | - itemSets add: (grammar initialItemSetFor: each). - startingStateMap at: each put: itemSets size ]. - shiftTable := Dictionary new. - index := 1. - [ index <= itemSets size ] - whileTrue: - [ itemSet := itemSets at: index. - grammar symbols - do: - [ :each | - newState := itemSet moveOn: each. - newState notEmpty - ifTrue: - [ shiftTable - at: (self shiftTableKeyForIndex: index symbol: each) - put: (self indexOfState: newState) ] ]. - index := index + 1 ] -] - -{ #category : #'action table' } -SmaCCGrammarCompiler >> createTransitionTable [ - | table optimizedTable | - table := (1 to: itemSets size) collect: [ :index | scannerCompiler symbols collect: [ :each | self actionForState: index on: each ] ]. - optimizedTable := self class optimizeTransitionTable - ifTrue: [ self optimizeTransitionTable: table ] - ifFalse: [ table ]. - actions := self compressTable: optimizedTable -] - -{ #category : #accessing } -SmaCCGrammarCompiler >> grammar [ - ^ grammar isNil - ifTrue: [ grammar := SmaCCGrammar new ] - ifFalse: [ grammar ] -] - -{ #category : #'action table' } -SmaCCGrammarCompiler >> idForAction: aSmaCCAction state: anInteger on: aSmaCCSymbol [ - | index preferredAction newStateIndex | - (aSmaCCAction isAmbiguous and: [ grammar isGLR ]) - ifTrue: - [ index := codeGenerator - ambiguousTableEntryFor: - (aSmaCCAction actions - collect: - [ :each | self idForAction: each state: anInteger on: aSmaCCSymbol ]) - asSet asSortedCollection. - ^ (index bitShift: 2) + 3 ] - ifFalse: - [ preferredAction := aSmaCCAction preferredAction. - preferredAction isShift - ifTrue: - [ newStateIndex := shiftTable - at: (self shiftTableKeyForIndex: anInteger symbol: aSmaCCSymbol). - ^ (newStateIndex bitShift: 2) + preferredAction id ]. - preferredAction isReduce - ifTrue: - [ ^ ((self reduceTableIndexFor: preferredAction) bitShift: 2) - + preferredAction id ]. - ^ aSmaCCAction id ] -] - -{ #category : #'action table' } -SmaCCGrammarCompiler >> indexOfState: newState [ - | newStateIndex | - newStateIndex := itemSets indexOf: newState. - newStateIndex = 0 - ifTrue: [ itemSets add: newState. - newStateIndex := itemSets size ] - ifFalse: [ (itemSets at: newStateIndex) mergeWith: newState ]. - ^ newStateIndex -] - -{ #category : #'initialize-release' } -SmaCCGrammarCompiler >> initialize [ - super initialize. - scannerCompiler := SmaCCScannerCompiler new. - startingStateMap := Dictionary new. - reduceTable := OrderedCollection new -] - -{ #category : #accessing } -SmaCCGrammarCompiler >> itemSetsComment [ - | stream | - stream := WriteStream on: String new. - itemSets - keysAndValuesDo: - [ :index :each | - stream - nextPutAll: index printString; - nextPutAll: each printString; - cr ]. - ^ stream contents -] - -{ #category : #'action table' } -SmaCCGrammarCompiler >> multipleActionTableRow: row [ - | stream | - stream := self compressedRowStream. - stream nextPut: 1. - row - keysAndValuesDo: - [ :index :each | - each ~= 3 - ifTrue: - [ self writeInteger: each on: stream. - self writeInteger: index on: stream ] ]. - ^ stream contents -] - -{ #category : #'action table' } -SmaCCGrammarCompiler >> optimizeTransitionTable: anArray [ - ^ anArray - collect: [ :row | - row - collect: [ :action | - | newShiftAction | - (action bitAnd: 2r11) = SmaCCShiftAction id - ifTrue: [ newShiftAction := self optimizedShiftFrom: row to: (action bitShift: -2) inTable: anArray ]. - newShiftAction notNil - ifTrue: [ newShiftAction ] - ifFalse: [ action ] ] ] -] - -{ #category : #'action table' } -SmaCCGrammarCompiler >> optimizedShiftFrom: row to: stateIndex inTable: anArray [ - | items action reduceEntry otherAction | - items := (anArray at: stateIndex) asSet. - items remove: SmaCCRejectAction id ifAbsent: [ ]. - items size ~= 1 - ifTrue: [ ^ nil ]. - action := items asArray first. - (action bitAnd: 2r11) = SmaCCReduceAction id - ifFalse: [ ^ nil ]. - reduceEntry := reduceTable at: (action bitShift: -2). - (reduceEntry at: 3) = #liftFirstValue: - ifFalse: [ ^ nil ]. - (reduceEntry at: 2) = 1 - ifFalse: [ ^ nil ]. - otherAction := row at: reduceEntry first. - ^ (self - optimizedShiftFrom: row - to: (otherAction bitShift: -2) - inTable: anArray) ifNil: [ otherAction ] -] - -{ #category : #accessing } -SmaCCGrammarCompiler >> parserClass [ - ^ self codeGenerator parserClass -] - -{ #category : #accessing } -SmaCCGrammarCompiler >> parserClass: aClassOrString [ - grammar isGLR - ifTrue: [ self codeGenerator glrParserClass: aClassOrString ] - ifFalse: [ self codeGenerator parserClass: aClassOrString ] -] - -{ #category : #'reduction table' } -SmaCCGrammarCompiler >> reduceTable [ - ^ reduceTable -] - -{ #category : #'reduction table' } -SmaCCGrammarCompiler >> reduceTableIndexFor: aSmaCCReduceAction [ - | value | - value := {(scannerCompiler symbols indexOf: aSmaCCReduceAction symbol). - aSmaCCReduceAction rhs size. - (self codeGenerator compileSourceFor: aSmaCCReduceAction). - aSmaCCReduceAction rhs ruleNumber. - aSmaCCReduceAction rhs reduceCode isImmediate}. - ^ reduceTable - indexOf: value - ifAbsent: [ reduceTable - add: value; - size ] -] - -{ #category : #accessing } -SmaCCGrammarCompiler >> scannerClass: aClassOrString [ - self codeGenerator scannerClass: aClassOrString -] - -{ #category : #'action table' } -SmaCCGrammarCompiler >> shiftTableKeyForIndex: anInteger symbol: aSmaCCSymbol [ - ^ SmaCCSymbolTableIndex forIndex: anInteger symbol: aSmaCCSymbol -] - -{ #category : #'action table' } -SmaCCGrammarCompiler >> singleActionTableRow: row forAction: anInteger [ - | stream | - stream := self compressedRowStream. - stream nextPut: 0. - self writeInteger: anInteger on: stream. - row - keysAndValuesDo: - [ :index :each | - each ~= 3 - ifTrue: [ self writeInteger: index on: stream ] ]. - ^ stream contents -] - -{ #category : #accessing } -SmaCCGrammarCompiler >> symbolsComment [ - | stream | - stream := WriteStream on: String new. - scannerCompiler symbols - keysAndValuesDo: - [ :index :each | - stream - nextPutAll: index printString; - nextPutAll: '. '; - nextPutAll: each printString; - cr ]. - ^ stream contents -] - -{ #category : #'action table' } -SmaCCGrammarCompiler >> transitionTable [ - actions isNil - ifTrue: [ self createItemSets. - self createTransitionTable ]. - ^ actions -] - -{ #category : #'action table' } -SmaCCGrammarCompiler >> uniqueNonErrorActionsForTableRow: row [ - ^ row asSet - remove: 3 ifAbsent: [ ]; - asArray -] - -{ #category : #'action table' } -SmaCCGrammarCompiler >> writeInteger: anInteger on: aStream [ - aStream nextPut: anInteger -] diff --git a/src/SmaCC_Development/SmaCCGrammarCreator.class.st b/src/SmaCC_Development/SmaCCGrammarCreator.class.st deleted file mode 100644 index 69a141646..000000000 --- a/src/SmaCC_Development/SmaCCGrammarCreator.class.st +++ /dev/null @@ -1,380 +0,0 @@ -Class { - #name : #SmaCCGrammarCreator, - #superclass : #SmaCCDefinitionNodeVisitor, - #instVars : [ - 'grammar', - 'defaultClasses', - 'expansionCount' - ], - #classVars : [ - 'MaxExpansions' - ], - #category : #'SmaCC_Development-Model' -} - -{ #category : #building } -SmaCCGrammarCreator class >> buildGrammar: aSmaCCGrammar from: aSmaCCDefinitionNode [ - self new - grammar: aSmaCCGrammar; - accept: aSmaCCDefinitionNode. - ^ aSmaCCGrammar -] - -{ #category : #'class initialization' } -SmaCCGrammarCreator class >> initialize [ - MaxExpansions := 16 -] - -{ #category : #private } -SmaCCGrammarCreator >> addItems: aCollection to: rhs [ - aCollection - do: [ :each | - rhs add: (self acceptNode: each). - each variableNameToken notNil - ifTrue: [ rhs - nameLastItem: - (each variableNameToken value - copyFrom: 2 - to: each variableNameToken value size - 1) ] ] -] - -{ #category : #private } -SmaCCGrammarCreator >> buildItemsFrom: aCollection [ - ^ aCollection - collect: [ :item | - | items | - items := OrderedCollection new. - ((item possibilities > 1 and: [ item possibilities * expansionCount <= MaxExpansions ]) or: [ item isGroup and: [ item hasReductionExpression not ] ]) - ifTrue: [ expansionCount := item possibilities * expansionCount. - item alternativesDo: [ :each | items addAll: (self combineItems: (self buildItemsFrom: each)) ] ] - ifFalse: [ items add: (Array with: item) ]. - items ] -] - -{ #category : #private } -SmaCCGrammarCreator >> combineItems: aCollection [ - | items | - items := OrderedCollection new. - self combineStream: (ReadStream on: aCollection) into: OrderedCollection new andDo: [ :each | items add: each ]. - ^ items -] - -{ #category : #private } -SmaCCGrammarCreator >> combineStream: aStream into: aCollection andDo: aBlock [ - | size position | - aStream atEnd - ifTrue: [ ^ aBlock value: aCollection copy ]. - size := aCollection size. - position := aStream position + 1. - aStream next - do: [ :each | - aCollection addAll: each. - self combineStream: aStream into: aCollection andDo: aBlock ] - separatedBy: [ [ aCollection size > size ] whileTrue: [ aCollection removeLast ]. - aStream position: position ] -] - -{ #category : #private } -SmaCCGrammarCreator >> createClass: aSymbol for: aSmaCCRHS [ - (grammar classNamed: aSymbol) addProduction: aSmaCCRHS. - ^ aSmaCCRHS -] - -{ #category : #private } -SmaCCGrammarCreator >> createDefaultClassFor: aSmaCCRHS [ - defaultClasses add: aSmaCCRHS. - ^ aSmaCCRHS -] - -{ #category : #private } -SmaCCGrammarCreator >> createDefaultClassesForSymbol: aString [ - | className index | - className := aString capitalized. - [ index := className indexOf: $_. - index > 0 and: [ className size > 1 ] ] - whileTrue: [ className := (className copyFrom: 1 to: index - 1) , (className copyFrom: index + 1 to: className size) capitalized ]. - className := className asSymbol. - defaultClasses do: [ :each | self createClass: className for: each ]. - defaultClasses := OrderedCollection new -] - -{ #category : #private } -SmaCCGrammarCreator >> generateRHS: aCollection [ - | rhs | - rhs := grammar newRHS. - self addItems: aCollection to: rhs. - ^ rhs -] - -{ #category : #'initialize-release' } -SmaCCGrammarCreator >> grammar: aSmaCCGrammar [ - grammar := aSmaCCGrammar -] - -{ #category : #'initialize-release' } -SmaCCGrammarCreator >> initialize [ - super initialize. - defaultClasses := OrderedCollection new -] - -{ #category : #testing } -SmaCCGrammarCreator >> isDigit: each [ - ^ each between: $0 and: $9 -] - -{ #category : #testing } -SmaCCGrammarCreator >> isLetterOrDigit: each [ - ^ (each between: $a and: $z) - or: - [ (each between: $A and: $Z) - or: [ (each between: $0 and: $9) or: [ each == $_ ] ] ] -] - -{ #category : #private } -SmaCCGrammarCreator >> reportErrorMessage: aString on: aSmaCCToken [ - SmaCCParserError new - messageText: aString; - tag: aSmaCCToken; - signal -] - -{ #category : #private } -SmaCCGrammarCreator >> verifyCodeToken: codeToken for: aSmaCCRHS [ - | code | - code := codeToken value copyFrom: 2 to: codeToken value size - 1. - RBParser - parseExpression: code - onError: [ :string :position | - self - reportErrorMessage: string - on: - (SmaCCToken - value: (code copyFrom: position to: position) - start: codeToken startPosition + position - ids: #()) ]. - aSmaCCRHS reduceCodeSource: code. - aSmaCCRHS reduceCode isImmediate: codeToken value first = $[. - ^ aSmaCCRHS -] - -{ #category : #visiting } -SmaCCGrammarCreator >> visitAssociativeDirective: anAssociativeDirective [ - | type | - type := anAssociativeDirective typeToken value = 'left' - ifTrue: [ #leftPrecedenceFor: ] - ifFalse: [ anAssociativeDirective typeToken value = 'right' - ifTrue: [ #rightPrecedenceFor: ] - ifFalse: [ #nonAssociativePrecedenceFor: ] ]. - anAssociativeDirective symbols - do: [ :each | - | symbol | - symbol := self acceptNode: each. - grammar - perform: type with: symbol; - setOperatorPrecedenceFor: symbol to: anAssociativeDirective typeToken startPosition ] -] - -{ #category : #visiting } -SmaCCGrammarCreator >> visitAttributeDirective: anAttributeDirective [ - (grammar classNamed: anAttributeDirective classname value asSymbol) - extraAttributes: (anAttributeDirective names collect: [ :each | SmaCCVariableDefinition variableName: each value ]) -] - -{ #category : #visiting } -SmaCCGrammarCreator >> visitClassProductionExpression: aClassProductionExpression [ - | items | - items := super visitClassProductionExpression: aClassProductionExpression. - items - do: [ :rhs | - aClassProductionExpression classname isNil - ifTrue: [ self createDefaultClassFor: rhs ] - ifFalse: [ self createClass: aClassProductionExpression classname value asSymbol for: rhs ] ]. - ^ items -] - -{ #category : #visiting } -SmaCCGrammarCreator >> visitCodeProductionExpression: aCodeProdutionExpression [ - | items | - items := super visitCodeProductionExpression: aCodeProdutionExpression. - items do: [ :rhs | self verifyCodeToken: aCodeProdutionExpression code for: rhs ]. - ^ items -] - -{ #category : #visiting } -SmaCCGrammarCreator >> visitDefinitionError: anError [ - "We shouldn't get here, but in case someone is passing an AST with errors, signal an error." - - self error: 'There was a parse error' -] - -{ #category : #visiting } -SmaCCGrammarCreator >> visitErrorSymbol: anErrorSymbol [ - ^ grammar errorSymbol -] - -{ #category : #visiting } -SmaCCGrammarCreator >> visitFlagDirective: aFlagDirective [ - | name | - name := aFlagDirective typeToken value. - name = 'glr' - ifTrue: [ ^ grammar isGLR: true ]. - name = 'ignorecase' - ifTrue: [ ^ grammar ignoreCase: true ]. - name = 'annotate_tokens' - ifTrue: [ ^ grammar annotateTokens: true ]. - name = 'lr1' - ifTrue: [ ^ grammar type: #LR1 ]. - name = 'unicode' - ifTrue: [ ^ SmaCCGrammar maximumCharacterValue: 16rE01EF ]. - name = 'byte' - ifTrue: [ ^ SmaCCGrammar maximumCharacterValue: 255 ]. - self - reportErrorMessage: 'Unknown directive' - on: aFlagDirective typeToken -] - -{ #category : #visiting } -SmaCCGrammarCreator >> visitGrammarDefinition: aGrammarDefinition [ - self acceptNodes: aGrammarDefinition rules. - grammar addExtraSymbols. - ^ grammar -] - -{ #category : #visiting } -SmaCCGrammarCreator >> visitGroupTerm: aGroupTerm [ - | symbol | - symbol := grammar nonTerminalSymbolNamed: aGroupTerm source. - symbol size = 0 - ifTrue: [ symbol position: aGroupTerm startPosition. - aGroupTerm expressions do: [ :each | (self acceptNode: each) do: [ :rhs | symbol addProduction: rhs ] ] ]. - ^ symbol -] - -{ #category : #visiting } -SmaCCGrammarCreator >> visitIdDirective: anIdDirective [ - anIdDirective names do: [ :each | grammar makeTokenIdMethodFor: each value ] -] - -{ #category : #visiting } -SmaCCGrammarCreator >> visitIgnoreVariableDirective: anIgnoreVariableDirective [ - grammar ignoredVariables: (anIgnoreVariableDirective names collect: [ :each | each value ]) -] - -{ #category : #visiting } -SmaCCGrammarCreator >> visitKeywordSymbol: aKeywordSymbol [ - ^ grammar keywordTerminalNamed: aKeywordSymbol name value -] - -{ #category : #visiting } -SmaCCGrammarCreator >> visitNodeNameDirective: aNodeNameDirective [ - | type name | - type := aNodeNameDirective typeToken value. - name := aNodeNameDirective name value. - type = 'prefix' - ifTrue: [ ^ grammar prefix: name ]. - type = 'suffix' - ifTrue: [ ^ grammar suffix: name ]. - type = 'root' - ifTrue: [ ^ (grammar classNamed: name asSymbol) beRoot ]. - self reportErrorMessage: 'Unknown directive' on: aNodeNameDirective typeToken -] - -{ #category : #visiting } -SmaCCGrammarCreator >> visitPostfixTerm: aPostfixTerm [ - | operator expression symbol rhs varNameToken hasOne hasMany addBlock | - operator := aPostfixTerm operator value. - expression := self acceptNode: aPostfixTerm term. - symbol := grammar nonTerminalSymbolNamed: aPostfixTerm source. - symbol size = 0 - ifTrue: [ symbol position: aPostfixTerm startPosition. - hasOne := operator = '+'. - hasMany := operator ~= '?'. - varNameToken := (aPostfixTerm term isKindOf: SmaCCSymbolNode) - ifTrue: [ aPostfixTerm term variableNameToken ]. - rhs := grammar newRHS. - addBlock := [ rhs add: expression. - varNameToken notNil - ifTrue: [ rhs nameLastItem: (varNameToken value copyFrom: 2 to: varNameToken value size - 1) ] ]. - hasOne - ifTrue: [ addBlock value ]. - symbol addProduction: rhs. - rhs := grammar newRHS. - hasMany - ifTrue: [ rhs add: symbol ]. - addBlock value. - symbol addProduction: rhs ]. - ^ symbol -] - -{ #category : #visiting } -SmaCCGrammarCreator >> visitProductionExpression: aClassProductionExpression [ - expansionCount := 1. - ^ (self combineItems: (self buildItemsFrom: aClassProductionExpression terms)) collect: [ :items | self generateRHS: items ] -] - -{ #category : #visiting } -SmaCCGrammarCreator >> visitProductionRule: aProductionRule [ - | symbol | - symbol := grammar nonTerminalSymbolNamed: aProductionRule name value. - symbol position: aProductionRule name startPosition. - aProductionRule expressions do: [ :each | (self acceptNode: each) do: [ :rhs | symbol addProduction: rhs ] ]. - self createDefaultClassesForSymbol: aProductionRule name value. - grammar setStartSymbolIfNone: symbol. - ^ symbol -] - -{ #category : #visiting } -SmaCCGrammarCreator >> visitProductionSymbol: aProductionSymbol [ - ^ grammar nonTerminalSymbolNamed: aProductionSymbol name value -] - -{ #category : #visiting } -SmaCCGrammarCreator >> visitScopeDirective: aScopeDirective [ - | type | - type := aScopeDirective typeToken value. - (type = 'scopes' or: [ type = 'states' ]) - ifTrue: [ ^ aScopeDirective names do: [ :each | grammar scannerDefinition addState: each value asSymbol ] ]. - type = 'excludes' - ifTrue: [ ^ aScopeDirective names do: [ :each | grammar scannerDefinition addExcludeState: each value asSymbol ] ]. - self reportErrorMessage: 'Unknown directive' on: aScopeDirective typeToken -] - -{ #category : #visiting } -SmaCCGrammarCreator >> visitStartDirective: aStartDirective [ - aStartDirective symbols do: [ :each | grammar addStartingSymbol: (grammar nonTerminalSymbolNamed: each value) ] -] - -{ #category : #visiting } -SmaCCGrammarCreator >> visitSuperclassDirective: aSuperclassDirective [ - | superclass | - superclass := grammar classNamed: aSuperclassDirective superclass value asSymbol. - aSuperclassDirective names do: [ :each | (grammar classNamed: each value) superclass: superclass ] -] - -{ #category : #visiting } -SmaCCGrammarCreator >> visitTokenRule: aTokenRule [ - | symbol regex | - regex := aTokenRule regularExpression. - regex states isEmpty - ifTrue: [ regex addStates: grammar scannerDefinition nonExcludeStates ]. - grammar scannerDefinition addToken: regex withName: aTokenRule name value. - symbol := grammar findSymbolNamed: aTokenRule name value ifAbsent: [ nil ]. - symbol notNil - ifTrue: [ symbol regularExpression: regex ]. - ^ regex -] - -{ #category : #visiting } -SmaCCGrammarCreator >> visitTokenSymbol: aTokenSymbol [ - ^ grammar - findSymbolNamed: aTokenSymbol name value - ifAbsentAdd: [ | node symbol | - symbol := grammar newTerminalSymbolNamed: aTokenSymbol name value. - (grammar scannerDefinition includesTokenNamed: aTokenSymbol name value) - ifTrue: [ symbol regularExpression: (grammar scannerDefinition tokenNamed: aTokenSymbol name value) ] - ifFalse: [ node := SmaCCGrammar implicitToken: aTokenSymbol name value. - node notNil - ifTrue: [ node addStates: grammar scannerDefinition nonExcludeStates. - symbol regularExpression: node ] ]. - symbol ] -] diff --git a/src/SmaCC_Development/SmaCCGrammarItem.class.st b/src/SmaCC_Development/SmaCCGrammarItem.class.st deleted file mode 100644 index c70decfce..000000000 --- a/src/SmaCC_Development/SmaCCGrammarItem.class.st +++ /dev/null @@ -1,169 +0,0 @@ -" -SmaCCGrammarItem is an abstract class that represents something defined by the grammar. - -Subclasses must implement the following messages: - accessing - modelTypes: - private - annotateTokenVariables: - basicModelTypesForVariable:into:seen: - firstTerminals - -Instance Variables - grammar the grammar that we are defined in - variableDefinitions the variables defined by this item -" -Class { - #name : #SmaCCGrammarItem, - #superclass : #Object, - #instVars : [ - 'variableDefinitions', - 'grammar' - ], - #category : #'SmaCC_Development-Model' -} - -{ #category : #private } -SmaCCGrammarItem >> annotateTokenVariables: aBlock [ - self subclassResponsibility -] - -{ #category : #private } -SmaCCGrammarItem >> basicModelTypesForVariable: aString into: aCollection seen: anIdentitySet [ - self subclassResponsibility -] - -{ #category : #variables } -SmaCCGrammarItem >> collectionVariableDefinitions [ - ^ self variableDefinitions select: [ :each | each isCollection ] -] - -{ #category : #variables } -SmaCCGrammarItem >> computeVariableDefinitions [ - ^ #() -] - -{ #category : #private } -SmaCCGrammarItem >> firstTerminals [ - ^ self subclassResponsibility -] - -{ #category : #accessing } -SmaCCGrammarItem >> grammar [ - ^ grammar -] - -{ #category : #'initialize-release' } -SmaCCGrammarItem >> grammar: aSmaCCGrammar [ - grammar := aSmaCCGrammar -] - -{ #category : #variables } -SmaCCGrammarItem >> hasVariableNamed: aString [ - ^ self variableDefinitions - anySatisfy: [ :each | each variableName = aString ] -] - -{ #category : #variables } -SmaCCGrammarItem >> indexOfVariable: aString [ - self variableDefinitions - keysAndValuesDo: [ :index :each | - each variableName = aString - ifTrue: [ ^ index ] ]. - self error: 'Variable not found' -] - -{ #category : #variables } -SmaCCGrammarItem >> isCollection: aString [ - ^ self collectionVariableDefinitions - anySatisfy: [ :each | each variableName = aString ] -] - -{ #category : #'reduce actions' } -SmaCCGrammarItem >> isNode [ - ^ self modelType includesClass: (self model classFor: SmaCCParseNode) -] - -{ #category : #testing } -SmaCCGrammarItem >> isSubtypeOf: aSmaCCGrammarItem [ - ^ self modelType includesClass: aSmaCCGrammarItem modelType -] - -{ #category : #accessing } -SmaCCGrammarItem >> model [ - ^ self grammar codeGenerator model -] - -{ #category : #'reduce actions' } -SmaCCGrammarItem >> modelType [ - ^ self modelType: IdentitySet new -] - -{ #category : #'reduce actions' } -SmaCCGrammarItem >> modelType: anIdentitySet [ - | types | - types := self modelTypes: anIdentitySet. - ^ self grammar codeGenerator commonSupertypeOf: types -] - -{ #category : #accessing } -SmaCCGrammarItem >> modelTypes [ - ^ self modelTypes: IdentitySet new -] - -{ #category : #accessing } -SmaCCGrammarItem >> modelTypes: anIdentitySet [ - ^ self subclassResponsibility -] - -{ #category : #private } -SmaCCGrammarItem >> modelTypesForVariable: aString [ - ^ self modelTypesForVariable: aString seen: IdentitySet new -] - -{ #category : #private } -SmaCCGrammarItem >> modelTypesForVariable: aString seen: anIdentitySet [ - | productionTypes | - (anIdentitySet includes: self) - ifTrue: [ ^ #() ]. - anIdentitySet add: self. - productionTypes := Set new. - self - basicModelTypesForVariable: aString - into: productionTypes - seen: anIdentitySet. - ^ productionTypes -] - -{ #category : #'reduce actions' } -SmaCCGrammarItem >> nodeType [ - ^ self nodeType: IdentitySet new -] - -{ #category : #'reduce actions' } -SmaCCGrammarItem >> nodeType: anIdentitySet [ - | node rootType | - rootType := self modelType: anIdentitySet. - node := nil. - (rootType includesClass: (self model classNamed: #SmaCCParseNode)) - ifTrue: - [ node := self grammar classDefinitions - detect: [ :e | e modelClass = rootType ] - ifNone: [ nil ] ]. - ^ node -] - -{ #category : #testing } -SmaCCGrammarItem >> returnsSingleVariable [ - ^ false -] - -{ #category : #testing } -SmaCCGrammarItem >> returnsVariableCollection [ - ^ false -] - -{ #category : #variables } -SmaCCGrammarItem >> variableDefinitions [ - ^ variableDefinitions ifNil: [ self computeVariableDefinitions ] -] diff --git a/src/SmaCC_Development/SmaCCGraphAlgorithm.class.st b/src/SmaCC_Development/SmaCCGraphAlgorithm.class.st deleted file mode 100644 index ff3b5e87e..000000000 --- a/src/SmaCC_Development/SmaCCGraphAlgorithm.class.st +++ /dev/null @@ -1,29 +0,0 @@ -Class { - #name : #SmaCCGraphAlgorithm, - #superclass : #Object, - #category : #'SmaCC_Development-DFA/NFA' -} - -{ #category : #nodes } -SmaCCGraphAlgorithm >> createMergedNodeFrom: nodeCollection [ - | newNode | - newNode := SmaCCNode new. - self mergeTransitionsFrom: nodeCollection into: newNode. - self mergeActionsFrom: nodeCollection into: newNode. - ^ newNode -] - -{ #category : #nodes } -SmaCCGraphAlgorithm >> mergeActionsFrom: nodeCollection into: aSmaCCNode [ - nodeCollection do: [ :each | aSmaCCNode addActions: each action ] -] - -{ #category : #nodes } -SmaCCGraphAlgorithm >> mergeTransitionsFrom: nodeCollection into: aSmaCCNode [ - | transitions | - transitions := Set new. - nodeCollection - do: [ :each | each transitions do: [ :edge | transitions add: edge copy ] ]. - aSmaCCNode transitions: transitions. - aSmaCCNode mergeTransitions -] diff --git a/src/SmaCC_Development/SmaCCIntegerSet.class.st b/src/SmaCC_Development/SmaCCIntegerSet.class.st deleted file mode 100644 index c1c5a6ddb..000000000 --- a/src/SmaCC_Development/SmaCCIntegerSet.class.st +++ /dev/null @@ -1,682 +0,0 @@ -Class { - #name : #SmaCCIntegerSet, - #superclass : #Collection, - #instVars : [ - 'start', - 'run', - 'data', - 'normalized' - ], - #category : #'SmaCC_Development-Collections' -} - -{ #category : #'instance creation' } -SmaCCIntegerSet class >> new: aSize [ - ^ self new -] - -{ #category : #'instance creation' } -SmaCCIntegerSet class >> withAll: aCollection [ - self == aCollection class - ifTrue: [ ^ aCollection copy ]. - ^ super withAll: aCollection -] - -{ #category : #comparing } -SmaCCIntegerSet >> < aSmaCCIntegerCollection [ - | otherData otherRun myData myRun compare | - self isEmpty - ifTrue: [ ^ aSmaCCIntegerCollection isEmpty not ]. - aSmaCCIntegerCollection isEmpty - ifTrue: [ ^ false ]. - self normalize. - aSmaCCIntegerCollection normalize. - otherData := aSmaCCIntegerCollection data. - otherRun := aSmaCCIntegerCollection run. - myData := data. - myRun := run. - [ myRun < otherRun ] - whileTrue: [ otherRun := self nextRunFrom: otherRun. - otherData := self reduceData: otherData ]. - [ otherRun < myRun ] - whileTrue: [ myRun := self nextRunFrom: myRun. - myData := self reduceData: myData ]. - compare := self - compareData: myData - to: otherData - hasMore: [ :isMine | - isMine - ifTrue: [ run > aSmaCCIntegerCollection run ] - ifFalse: [ run < aSmaCCIntegerCollection run ] ]. - compare = 0 - ifTrue: [ ^ run < aSmaCCIntegerCollection run ]. - compare < 0 - ifTrue: [ ^ true ]. - ^ false -] - -{ #category : #comparing } -SmaCCIntegerSet >> <= aSmaCCIntegerCollection [ - ^ (aSmaCCIntegerCollection < self) not -] - -{ #category : #comparing } -SmaCCIntegerSet >> = anObject [ - self class = anObject class - ifFalse: [ ^ false ]. - self normalize. - anObject normalize. - ^ self start = anObject start and: [ self run = anObject run and: [ self data = anObject data ] ] -] - -{ #category : #comparing } -SmaCCIntegerSet >> > aSmaCCIntegerCollection [ - ^ aSmaCCIntegerCollection < self -] - -{ #category : #comparing } -SmaCCIntegerSet >> >= aSmaCCIntegerCollection [ - ^ (self < aSmaCCIntegerCollection) not -] - -{ #category : #adding } -SmaCCIntegerSet >> add: anInteger [ - | newData | - [ anInteger < start ] - whileTrue: - [ run := run * self defaultRunSize. - start := start - run. - data == 0 - ifFalse: - [ newData := Array new: self defaultRunSize withAll: 0. - newData at: 2 put: data. - data := newData ] ]. - [ self defaultRunSize * run + start <= anInteger ] - whileTrue: - [ run := run * self defaultRunSize. - data == 0 - ifFalse: - [ newData := Array new: self defaultRunSize withAll: 0. - newData at: 1 put: data. - data := newData ] ]. - data := self - add: anInteger - to: data - startingAt: start - withRun: run. - normalized := false. - ^ anInteger -] - -{ #category : #private } -SmaCCIntegerSet >> add: anInteger to: currentData startingAt: currentStart withRun: currentRun [ - | newData isBits offset value | - currentData == 1 - ifTrue: [ ^ 1 ]. - isBits := currentRun = self byteSize. - newData := currentData == 0 - ifTrue: [ (isBits - ifTrue: [ ByteArray ] - ifFalse: [ Array ]) new: self defaultRunSize withAll: 0 ] - ifFalse: [ currentData ]. - offset := (anInteger - currentStart) // currentRun + 1. - ^ isBits - ifTrue: [ newData at: offset put: (value := (newData at: offset) bitOr: (1 bitShift: (anInteger - currentStart) \\ currentRun)). - (value == 16rFF and: [ newData allSatisfy: [ :each | each == 16rFF ] ]) - ifTrue: [ 1 ] - ifFalse: [ newData ] ] - ifFalse: [ newData - at: offset - put: - (value := self - add: anInteger - to: (newData at: offset) - startingAt: currentStart + ((offset - 1) * currentRun) - withRun: (self nextRunFrom: currentRun)). - (value == 1 and: [ newData allSatisfy: [ :each | each == 1 ] ]) - ifTrue: [ 1 ] - ifFalse: [ newData ] ] -] - -{ #category : #adding } -SmaCCIntegerSet >> addAll: aCollection [ - | otherData otherRun tempData | - (self class == aCollection class and: [ start = aCollection start ]) - ifFalse: [ ^ super addAll: aCollection ]. - data == 0 - ifTrue: [ data := self copyData: aCollection data. - run := aCollection run ] - ifFalse: [ otherRun := aCollection run. - otherData := aCollection data. - [ run < otherRun ] - whileTrue: [ run := run * self defaultRunSize. - tempData := Array new: self defaultRunSize withAll: 0. - tempData at: 1 put: data. - data := tempData ]. - [ run > otherRun ] - whileTrue: [ otherRun := otherRun * self defaultRunSize. - tempData := Array new: self defaultRunSize withAll: 0. - tempData at: 1 put: otherData. - otherData := tempData ]. - data := self merge: data with: otherData ]. - normalized := false. - ^ aCollection -] - -{ #category : #private } -SmaCCIntegerSet >> byteSize [ - ^ 8 -] - -{ #category : #private } -SmaCCIntegerSet >> compareByte: myByte to: otherByte hasMore: aBlock [ - | mine other | - myByte == otherByte - ifTrue: [ ^ 0 ]. - myByte == 0 - ifTrue: [ ^ (aBlock value: true) - ifTrue: [ 1 ] - ifFalse: [ -1 ] ]. - otherByte == 0 - ifTrue: [ ^ (aBlock value: false) - ifTrue: [ -1 ] - ifFalse: [ 1 ] ]. - mine := myByte. - other := otherByte. - [ mine odd = other odd ] - whileTrue: [ mine := mine bitShift: -1. - other := other bitShift: -1 ]. - ^ mine odd - ifTrue: [ (other ~~ 0 or: [ aBlock value: false ]) - ifTrue: [ -1 ] - ifFalse: [ 1 ] ] - ifFalse: [ (mine ~~ 0 or: [ aBlock value: true ]) - ifTrue: [ 1 ] - ifFalse: [ -1 ] ] -] - -{ #category : #private } -SmaCCIntegerSet >> compareData: myData to: otherData hasMore: aBlock [ - | value | - myData == 0 - ifTrue: [ otherData == 0 - ifTrue: [ ^ 0 ]. - ^ (aBlock value: true) - ifTrue: [ 1 ] - ifFalse: [ -1 ] ]. - myData == 1 - ifTrue: [ otherData == 1 - ifTrue: [ ^ 0 ]. - otherData == 0 - ifTrue: [ ^ (aBlock value: false) - ifTrue: [ -1 ] - ifFalse: [ 1 ] ]. - ^ ((self endsWithZeros: otherData) and: [ (aBlock value: false) not ]) - ifTrue: [ 1 ] - ifFalse: [ -1 ] ]. - otherData == 0 - ifTrue: [ ^ (aBlock value: false) - ifTrue: [ -1 ] - ifFalse: [ 1 ] ]. - otherData == 1 - ifTrue: [ ^ ((self endsWithZeros: myData) and: [ (aBlock value: true) not ]) - ifTrue: [ -1 ] - ifFalse: [ 1 ] ]. - (myData isKindOf: ByteArray) - ifTrue: [ 1 to: myData size do: [ :i | - value := self - compareByte: (myData at: i) - to: (otherData at: i) - hasMore: [ :isMine | - (self - hasMore: - (isMine - ifTrue: [ myData ] - ifFalse: [ otherData ]) - after: i) or: [ aBlock value: isMine ] ]. - value ~~ 0 - ifTrue: [ ^ value ] ] ] - ifFalse: [ 1 to: myData size do: [ :i | - value := self - compareData: (myData at: i) - to: (otherData at: i) - hasMore: [ :isMine | - (self - hasMore: - (isMine - ifTrue: [ myData ] - ifFalse: [ otherData ]) - after: i) or: [ aBlock value: isMine ] ]. - value ~~ 0 - ifTrue: [ ^ value ] ] ]. - ^ 0 -] - -{ #category : #private } -SmaCCIntegerSet >> copyData: anObject [ - | copy | - ^ (anObject isKindOf: Collection) - ifTrue: - [ copy := anObject copy. - 1 to: copy size do: [ :i | copy at: i put: (self copyData: (copy at: i)) ]. - copy ] - ifFalse: [ anObject ] -] - -{ #category : #private } -SmaCCIntegerSet >> countBits: anInteger [ - | count current | - count := 0. - current := anInteger. - [ current = 0 ] - whileFalse: [ (current bitAnd: 1) == 1 - ifTrue: [ count := count + 1 ]. - current := current bitShift: -1 ]. - ^ count -] - -{ #category : #private } -SmaCCIntegerSet >> data [ - ^ data -] - -{ #category : #private } -SmaCCIntegerSet >> defaultRunSize [ - ^ 32 -] - -{ #category : #enumerating } -SmaCCIntegerSet >> do: aBlock [ - self - do: aBlock - over: data - startingAt: start - withRun: run -] - -{ #category : #private } -SmaCCIntegerSet >> do: aBlock over: currentData startingAt: currentStart withRun: currentRun [ - | index offset nextRun | - currentData == 0 - ifTrue: [ ^ self ]. - currentData == 1 - ifTrue: - [ ^ currentStart to: currentStart + (currentRun * self defaultRunSize) - 1 - do: [ :i | aBlock value: i ] ]. - index := currentStart. - currentRun = self byteSize - ifTrue: - [ currentData - do: - [ :each | - | bits | - bits := each. - offset := 0. - [ bits = 0 ] - whileFalse: - [ bits odd - ifTrue: [ aBlock value: offset + index ]. - offset := offset + 1. - bits := bits bitShift: -1 ]. - index := index + currentRun ]. - ^ self ]. - nextRun := self nextRunFrom: currentRun. - currentData - do: - [ :each | - self - do: aBlock - over: each - startingAt: index - withRun: nextRun. - index := index + currentRun ] -] - -{ #category : #private } -SmaCCIntegerSet >> endsWithZeros: aCollection [ - | index isBytes all value | - isBytes := aCollection isKindOf: ByteArray. - index := 1. - all := isBytes - ifTrue: [ 255 ] - ifFalse: [ 1 ]. - [ index <= aCollection size and: [ (aCollection at: index) = all ] ] whileTrue: [ index := index + 1 ]. - index > aCollection size - ifTrue: [ ^ true ]. - index + 1 to: aCollection size do: [ :i | - (aCollection at: i) ~~ 0 - ifTrue: [ ^ false ] ]. - value := aCollection at: index. - value == 0 - ifTrue: [ ^ true ]. - ^ isBytes - ifTrue: [ #[2r1 2r11 2r111 2r1111 2r11111 2r111111 2r1111111] includes: value ] - ifFalse: [ self endsWithZeros: value ] -] - -{ #category : #accessing } -SmaCCIntegerSet >> first [ - self do: [ :each | ^ each ]. - self error: 'Collection is empty' -] - -{ #category : #private } -SmaCCIntegerSet >> hasMore: aCollection after: index [ - ^ ((index + 1 to: aCollection size) allSatisfy: [ :i | (aCollection at: i) == 0 ]) not -] - -{ #category : #comparing } -SmaCCIntegerSet >> hash [ - self normalize. - ^ data hash hashMultiply bitXor: self size hash -] - -{ #category : #testing } -SmaCCIntegerSet >> includes: anInteger [ - anInteger < start - ifTrue: [ ^ false ]. - self defaultRunSize * run + start <= anInteger - ifTrue: [ ^ false ]. - ^ self - includes: anInteger - in: data - startingAt: start - withRun: run -] - -{ #category : #private } -SmaCCIntegerSet >> includes: anInteger in: currentData startingAt: currentStart withRun: currentRun [ - | isBits offset | - currentData == 1 - ifTrue: [ ^ true ]. - currentData == 0 - ifTrue: [ ^ false ]. - isBits := currentRun = self byteSize. - offset := (anInteger - currentStart) // currentRun + 1. - ^ isBits - ifTrue: [ ((currentData at: offset) bitAnd: (1 bitShift: (anInteger - currentStart) \\ currentRun)) ~~ 0 ] - ifFalse: [ self - includes: anInteger - in: (currentData at: offset) - startingAt: currentStart + ((offset - 1) * currentRun) - withRun: (self nextRunFrom: currentRun) ] -] - -{ #category : #'initialize-release' } -SmaCCIntegerSet >> initialize [ - start := 0. - run := self byteSize. - data := 0. - normalized := true -] - -{ #category : #private } -SmaCCIntegerSet >> intersect: myData with: otherData [ - | value includeNone | - (myData == 0 or: [ otherData == 1 ]) - ifTrue: [ ^ myData ]. - (myData == 1 or: [ otherData == 0 ]) - ifTrue: [ ^ self copyData: otherData ]. - includeNone := true. - (myData isKindOf: ByteArray) - ifTrue: [ 1 to: myData size do: [ :i | - myData at: i put: (value := (myData at: i) bitAnd: (otherData at: i)). - includeNone := includeNone and: [ value == 0 ] ] ] - ifFalse: [ 1 to: myData size do: [ :i | - myData at: i put: (value := self intersect: (myData at: i) with: (otherData at: i)). - includeNone := includeNone and: [ value == 0 ] ] ]. - includeNone - ifTrue: [ ^ 0 ]. - ^ myData -] - -{ #category : #private } -SmaCCIntegerSet >> invertData: otherData [ - otherData == 0 - ifTrue: [ ^ 1 ]. - otherData == 1 - ifTrue: [ ^ 0 ]. - ^ (otherData isKindOf: ByteArray) - ifTrue: [ otherData collect: [ :each | each bitInvert bitAnd: 16rFF ] ] - ifFalse: [ otherData collect: [ :each | self invertData: each ] ] -] - -{ #category : #testing } -SmaCCIntegerSet >> isEmpty [ - self normalize. - ^ data == 0 -] - -{ #category : #private } -SmaCCIntegerSet >> merge: myData with: otherData [ - | value includeAll | - (myData == 0 or: [ otherData == 1 ]) - ifTrue: [ ^ self copyData: otherData ]. - (myData == 1 or: [ otherData == 0 ]) - ifTrue: [ ^ myData ]. - includeAll := true. - (myData isKindOf: ByteArray) - ifTrue: [ 1 to: myData size do: [ :i | - myData at: i put: (value := (myData at: i) bitOr: (otherData at: i)). - includeAll := includeAll and: [ value == 255 ] ] ] - ifFalse: [ 1 to: myData size do: [ :i | - myData at: i put: (value := self merge: (myData at: i) with: (otherData at: i)). - includeAll := includeAll and: [ value == 1 ] ] ]. - includeAll - ifTrue: [ ^ 1 ]. - ^ myData -] - -{ #category : #private } -SmaCCIntegerSet >> nextRunFrom: currentRun [ - ^ currentRun // self defaultRunSize -] - -{ #category : #converting } -SmaCCIntegerSet >> normalize [ - normalized - ifTrue: [ ^ self ]. - normalized := true. - data := self normalizeData: data. - [ data = 0 - ifTrue: [ ^ run := self defaultRunSize ]. - data = 1 - ifTrue: [ ^ self ]. - run > self defaultRunSize - ifFalse: [ ^ self ]. - 2 to: data size do: [ :i | - (data at: i) = 0 - ifFalse: [ ^ self ] ]. - data := data first. - run := self nextRunFrom: run ] repeat -] - -{ #category : #private } -SmaCCIntegerSet >> normalizeData: oldData [ - | value allAreIntegers | - (oldData isKindOf: ByteArray) - ifTrue: [ value := oldData first. - (value == 0 or: [ value == 255 ]) - ifFalse: [ ^ oldData ]. - 2 to: oldData size do: [ :i | - (oldData at: i) = value - ifFalse: [ ^ oldData ] ]. - ^ value == 255 - ifTrue: [ 1 ] - ifFalse: [ 0 ] ]. - (oldData isKindOf: Array) - ifTrue: [ allAreIntegers := true. - 1 to: oldData size do: [ :i | - oldData at: i put: (value := self normalizeData: (oldData at: i)). - allAreIntegers := allAreIntegers and: [ value isInteger ] ]. - allAreIntegers - ifTrue: [ (oldData allSatisfy: [ :each | each = value ]) - ifTrue: [ ^ value ] ] ]. - ^ oldData -] - -{ #category : #copying } -SmaCCIntegerSet >> postCopy [ - super postCopy. - data := self copyData: data -] - -{ #category : #private } -SmaCCIntegerSet >> privateIntersect: aCollection [ - | otherRun otherData | - otherRun := aCollection run. - otherData := aCollection data. - [ run > otherRun ] - whileTrue: [ run := self nextRunFrom: run. - data := self reduceData: data ]. - [ otherRun > run ] - whileTrue: [ otherRun := self nextRunFrom: otherRun. - otherData := self reduceData: otherData ]. - data := self intersect: data with: otherData. - normalized := false. - ^ self -] - -{ #category : #private } -SmaCCIntegerSet >> reduceData: myData [ - ^ myData isInteger - ifTrue: [ myData ] - ifFalse: [ myData first ] -] - -{ #category : #private } -SmaCCIntegerSet >> remove: anInteger from: currentData startingAt: currentStart withRun: currentRun [ - | newData isBits offset value | - currentData == 0 - ifTrue: [ ^ 0 ]. - isBits := currentRun = self byteSize. - newData := currentData == 1 - ifTrue: [ isBits - ifTrue: [ ByteArray new: self defaultRunSize withAll: 16rFF ] - ifFalse: [ Array new: self defaultRunSize withAll: 1 ] ] - ifFalse: [ currentData ]. - offset := (anInteger - currentStart) // currentRun + 1. - isBits - ifTrue: [ newData at: offset put: (value := (newData at: offset) bitAt: (anInteger - currentStart) \\ currentRun + 1 put: 0) ] - ifFalse: [ newData - at: offset - put: - (value := self - remove: anInteger - from: (newData at: offset) - startingAt: currentStart + ((offset - 1) * currentRun) - withRun: (self nextRunFrom: currentRun)) ]. - ^ (value = 0 and: [ newData allSatisfy: [ :each | each == 0 ] ]) - ifTrue: [ 0 ] - ifFalse: [ newData ] -] - -{ #category : #removing } -SmaCCIntegerSet >> remove: anInteger ifAbsent: aBlock [ - (self includes: anInteger) - ifFalse: [ ^ aBlock value ]. - data := self - remove: anInteger - from: data - startingAt: start - withRun: run. - normalized := false. - ^ anInteger -] - -{ #category : #private } -SmaCCIntegerSet >> removeData: otherData from: myData [ - | includeNone value | - (myData == 0 or: [ otherData == 1 ]) - ifTrue: [ ^ 0 ]. - otherData == 0 - ifTrue: [ ^ myData ]. - myData = 1 - ifTrue: [ ^ self invertData: otherData ]. - includeNone := true. - (myData isKindOf: ByteArray) - ifTrue: [ 1 to: myData size do: [ :i | - myData at: i put: (value := (myData at: i) bitAnd: (otherData at: i) bitInvert). - includeNone := includeNone and: [ value == 0 ] ] ] - ifFalse: [ 1 to: myData size do: [ :i | - myData at: i put: (value := self removeData: (otherData at: i) from: (myData at: i)). - includeNone := includeNone and: [ value == 0 ] ] ]. - includeNone - ifTrue: [ ^ 0 ]. - ^ myData -] - -{ #category : #private } -SmaCCIntegerSet >> run [ - ^ run -] - -{ #category : #enumerating } -SmaCCIntegerSet >> select: aBlock [ - | selected | - selected := self copy. - self - do: [ :each | - (aBlock value: each) - ifFalse: [ selected remove: each ] ]. - selected normalize. - ^ selected -] - -{ #category : #accessing } -SmaCCIntegerSet >> size [ - ^ self sizeOf: data withRun: run -] - -{ #category : #private } -SmaCCIntegerSet >> sizeOf: currentData withRun: currentRun [ - | nextRun | - currentData == 0 - ifTrue: [ ^ 0 ]. - currentData == 1 - ifTrue: [ ^ currentRun * self defaultRunSize ]. - currentRun == self byteSize - ifTrue: [ ^ currentData inject: 0 into: [ :sum :each | sum + (self countBits: each) ] ] - ifFalse: [ nextRun := self nextRunFrom: currentRun. - ^ currentData inject: 0 into: [ :sum :each | sum + (self sizeOf: each withRun: nextRun) ] ] -] - -{ #category : #enumerating } -SmaCCIntegerSet >> smaccIntersect: aCollection [ - aCollection class == self class - ifFalse: [ ^ super smaccIntersect: aCollection ]. - self normalize. - aCollection normalize. - (self == aCollection or: [ data == 0 or: [ aCollection data = 1 and: [ aCollection run >= run ] ] ]) - ifTrue: [ ^ self copy ]. - (aCollection data == 0 or: [ data = 1 and: [ run >= aCollection run ] ]) - ifTrue: [ ^ aCollection copy ]. - ^ self copy privateIntersect: aCollection -] - -{ #category : #removing } -SmaCCIntegerSet >> smaccRemoveAll: aCollection [ - | otherRun otherData tempData | - self class == aCollection class - ifFalse: [ ^ super smaccRemoveAll: aCollection ]. - data == 0 - ifTrue: [ ^ self ]. - otherRun := aCollection run. - otherData := aCollection data. - [ run < otherRun ] - whileTrue: [ otherRun := self nextRunFrom: otherRun. - otherData := self reduceData: otherData ]. - [ run > otherRun ] - whileTrue: [ otherRun := otherRun * self defaultRunSize. - tempData := Array new: self defaultRunSize withAll: 0. - tempData at: 1 put: otherData. - otherData := tempData ]. - data := self removeData: otherData from: data. - normalized := false. - ^ aCollection -] - -{ #category : #private } -SmaCCIntegerSet >> start [ - ^ start -] diff --git a/src/SmaCC_Development/SmaCCItemSet.class.st b/src/SmaCC_Development/SmaCCItemSet.class.st deleted file mode 100644 index e0f1e3b3e..000000000 --- a/src/SmaCC_Development/SmaCCItemSet.class.st +++ /dev/null @@ -1,213 +0,0 @@ -Class { - #name : #SmaCCItemSet, - #superclass : #Set, - #instVars : [ - 'type', - 'previousItemSets', - 'grammar' - ], - #category : #'SmaCC_Development-Item Sets' -} - -{ #category : #'instance creation' } -SmaCCItemSet class >> new [ - ^self new: 5 -] - -{ #category : #'instance creation' } -SmaCCItemSet class >> new: anInteger [ - ^ (super new: anInteger) - initialize; - yourself -] - -{ #category : #comparing } -SmaCCItemSet >> = aSmaCCItemSet [ - self class = aSmaCCItemSet class - ifTrue: - [ type == #LALR1 - ifTrue: [ ^ self isLALREqualTo: aSmaCCItemSet ] - ifFalse: [ ^ self isLREqualTo: aSmaCCItemSet ] ]. - ^ false -] - -{ #category : #accessing } -SmaCCItemSet >> action: aSmaCCSymbol prefer: aClass [ - | action | - action := nil. - self - do: - [ :each | - | eachAction | - eachAction := each action: aSmaCCSymbol. - action := action isNil - ifTrue: [ eachAction ] - ifFalse: [ action mergeWith: eachAction prefer: aClass ] ]. - action signalAllWarnings. - ^ action -] - -{ #category : #adding } -SmaCCItemSet >> add: aSmaCCLR1Item [ - | index item | - aSmaCCLR1Item isNil - ifTrue: [ ^ aSmaCCLR1Item ]. - index := self findElementOrNil: aSmaCCLR1Item. - item := array at: index. - item isNil - ifTrue: - [ self atNewIndex: index put: aSmaCCLR1Item. - aSmaCCLR1Item itemSet: self. - self performClosureOn: aSmaCCLR1Item ] - ifFalse: [ item mergeWith: aSmaCCLR1Item ]. - ^ aSmaCCLR1Item -] - -{ #category : #accessing } -SmaCCItemSet >> addPrevious: aSmaCCItemSet [ - previousItemSets add: aSmaCCItemSet -] - -{ #category : #accessing } -SmaCCItemSet >> grammar [ - ^ grammar -] - -{ #category : #accessing } -SmaCCItemSet >> grammar: aSmaCCGrammar [ - grammar := aSmaCCGrammar -] - -{ #category : #comparing } -SmaCCItemSet >> hash [ - ^ self - inject: self class hash - into: [ :sum :each | sum bitXor: each hash ] -] - -{ #category : #'initialize-release' } -SmaCCItemSet >> initialize [ - (self class superclass canUnderstand: #initialize) - ifTrue: [ super initialize ]. - type := #LALR1. - previousItemSets := OrderedCollection new -] - -{ #category : #testing } -SmaCCItemSet >> isLALREqualTo: aSmaCCItemSet [ - ^ aSmaCCItemSet size = self size - and: [ self allSatisfy: [ :each | aSmaCCItemSet includes: each ] ] -] - -{ #category : #testing } -SmaCCItemSet >> isLREqualTo: anItemSet [ - ^ anItemSet size = self size - and: - [ self - allSatisfy: - [ :each | - | item | - (item := anItemSet itemFor: each) notNil - and: [ each isLR1EqualTo: item ] ] ] -] - -{ #category : #private } -SmaCCItemSet >> itemFor: anObject [ - ^ array at: (self findElementOrNil: anObject) -] - -{ #category : #accessing } -SmaCCItemSet >> mergeWith: aSmaCCItemSet [ - self == aSmaCCItemSet - ifTrue: [ ^ self ]. - self addAll: aSmaCCItemSet. - previousItemSets addAll: aSmaCCItemSet previousItemSets -] - -{ #category : #accessing } -SmaCCItemSet >> moveOn: aSmaCCSymbol [ - | anItemSet | - anItemSet := self class new. - anItemSet grammar: grammar. - anItemSet addPrevious: self. - anItemSet type: type. - self - do: - [ :each | - each nextSymbol == aSmaCCSymbol - ifTrue: [ anItemSet add: each moveNext ] ]. - ^ anItemSet -] - -{ #category : #accessing } -SmaCCItemSet >> path [ - | result | - result := OrderedCollection new. - self pathInto: result. - ^ result -] - -{ #category : #accessing } -SmaCCItemSet >> pathInto: anOrderedCollection [ - | item | - self previousState isNil - ifTrue: [ ^ self ]. - self previousState pathInto: anOrderedCollection. - item := self detect: [ :each | each location > 1 ]. - anOrderedCollection add: (item rhs at: item location - 1) -] - -{ #category : #private } -SmaCCItemSet >> performClosureOn: aSmaCCLR1Item [ - | nextSymbol rest first followers | - nextSymbol := aSmaCCLR1Item nextSymbol. - nextSymbol isTerminal - ifTrue: [ ^ self ]. - rest := aSmaCCLR1Item rest. - first := rest firstTerminals. - followers := SmaCCSymbolSet new. - (first includes: grammar emptySymbol) - ifTrue: - [ first remove: grammar emptySymbol. - followers baseOn: aSmaCCLR1Item followers ]. - followers addAll: first. - nextSymbol - productionsDo: [ :each | self add: (SmaCCLR1Item rhs: each follow: followers) ] -] - -{ #category : #accessing } -SmaCCItemSet >> previousItemSets [ - ^ previousItemSets -] - -{ #category : #accessing } -SmaCCItemSet >> previousItemSets: aCollection [ - previousItemSets := aCollection -] - -{ #category : #accessing } -SmaCCItemSet >> previousState [ - "Pick some previous item set" - - previousItemSets isEmpty - ifTrue: [ ^ nil ]. - ^ previousItemSets first -] - -{ #category : #printing } -SmaCCItemSet >> printOn: aStream [ - | strings | - strings := OrderedCollection new: self size. - self do: [ :each | strings add: each printString ]. - strings asSortedCollection - do: [ :each | - aStream - tab; - nextPutAll: each; - cr ] -] - -{ #category : #'initialize-release' } -SmaCCItemSet >> type: aSymbol [ - type := aSymbol -] diff --git a/src/SmaCC_Development/SmaCCLR1Item.class.st b/src/SmaCC_Development/SmaCCLR1Item.class.st deleted file mode 100644 index 5a57da317..000000000 --- a/src/SmaCC_Development/SmaCCLR1Item.class.st +++ /dev/null @@ -1,176 +0,0 @@ -Class { - #name : #SmaCCLR1Item, - #superclass : #Object, - #instVars : [ - 'rhs', - 'location', - 'followers', - 'itemSet' - ], - #category : #'SmaCC_Development-Item Sets' -} - -{ #category : #'instance creation' } -SmaCCLR1Item class >> rhs: aSmaCCRHS follow: aSmaCCSymbolCollection [ - ^ self new - rhs: aSmaCCRHS follow: aSmaCCSymbolCollection; - yourself -] - -{ #category : #comparing } -SmaCCLR1Item >> = aSmaCCLR1Item [ - ^ self class == aSmaCCLR1Item class - and: - [ location = aSmaCCLR1Item location - and: [ rhs == aSmaCCLR1Item rhs - and: [ self symbol == aSmaCCLR1Item symbol ] ] ] -] - -{ #category : #accessing } -SmaCCLR1Item >> action: aSmaCCSymbol [ - self isAtEnd - ifTrue: - [ (self symbol isStartingSymbol and: [ aSmaCCSymbol isEmptySymbol ]) - ifTrue: [ ^ SmaCCAcceptAction item: self ]. - (followers includes: aSmaCCSymbol) - ifTrue: [ ^ SmaCCReduceAction item: self ] ] - ifFalse: - [ (rhs at: location) = aSmaCCSymbol - ifTrue: [ ^ SmaCCShiftAction item: self ] ]. - ^ SmaCCRejectAction item: self -] - -{ #category : #accessing } -SmaCCLR1Item >> followers [ - ^ followers -] - -{ #category : #'initialize-release' } -SmaCCLR1Item >> followers: aSmaCCSymbolSet [ - followers := aSmaCCSymbolSet -] - -{ #category : #accessing } -SmaCCLR1Item >> grammar [ - ^ rhs grammar -] - -{ #category : #comparing } -SmaCCLR1Item >> hash [ - ^ (self symbol identityHash hashMultiply bitXor: location) - hashMultiply bitXor: rhs identityHash -] - -{ #category : #accessing } -SmaCCLR1Item >> isAtEnd [ - ^ location > rhs size -] - -{ #category : #testing } -SmaCCLR1Item >> isLR1EqualTo: aSmaCCLR1Item [ - ^ self followers size = aSmaCCLR1Item followers size - and: - [ self followers - allSatisfy: [ :each | aSmaCCLR1Item followers includes: each ] ] -] - -{ #category : #accessing } -SmaCCLR1Item >> itemSet: aSmaCCItemSet [ - itemSet := aSmaCCItemSet -] - -{ #category : #accessing } -SmaCCLR1Item >> location [ - ^ location -] - -{ #category : #'initialize-release' } -SmaCCLR1Item >> location: anInteger [ - location := anInteger -] - -{ #category : #accessing } -SmaCCLR1Item >> mergeWith: aSmaCCLR1Item [ - followers mergeWith: aSmaCCLR1Item followers -] - -{ #category : #accessing } -SmaCCLR1Item >> moveNext [ - ^ self copy - followers: (followers class basedOn: followers); - location: location + 1; - yourself -] - -{ #category : #accessing } -SmaCCLR1Item >> nextSymbol [ - ^ location > rhs size - ifTrue: [ self grammar sentinelSymbol ] - ifFalse: [ rhs at: location ] -] - -{ #category : #accessing } -SmaCCLR1Item >> path [ - ^ itemSet path -] - -{ #category : #accessing } -SmaCCLR1Item >> precedence [ - | max | - self isAtEnd - ifTrue: - [ max := -1. "If we don't have a precedence, then assume we are the lowest precedence (which will cause a shift action)." - rhs - do: [ :each | max := max max: (each precedence ifNil: [ max ]) ]. - ^ max ] - ifFalse: [ ^ (rhs at: location) precedence ] -] - -{ #category : #printing } -SmaCCLR1Item >> printOn: aStream [ - | i | - aStream - nextPut: $[; - nextPutAll: self symbol printString; - nextPutAll: ' :'. - i := 1. - rhs - do: - [ :each | - i = location - ifTrue: [ aStream nextPutAll: ' . ' ]. - aStream - space; - nextPutAll: each printString. - i := i + 1 ]. - location > rhs size - ifTrue: [ aStream nextPutAll: ' . ' ]. - aStream nextPut: $;. - followers printOn: aStream. - aStream nextPut: $] -] - -{ #category : #accessing } -SmaCCLR1Item >> rest [ - | newRHS | - newRHS := self grammar newRHS. - location + 1 to: rhs size do: [ :each | newRHS add: (rhs at: each) ]. - ^ newRHS -] - -{ #category : #accessing } -SmaCCLR1Item >> rhs [ - ^ rhs -] - -{ #category : #'initialize-release' } -SmaCCLR1Item >> rhs: aSmaCCRHS follow: aSmaCCSymbolCollection [ - rhs := aSmaCCRHS. - location := 1. - followers := aSmaCCSymbolCollection -] - -{ #category : #accessing } -SmaCCLR1Item >> symbol [ - ^ self rhs productionSymbol -] diff --git a/src/SmaCC_Development/SmaCCNFAtoDFA.class.st b/src/SmaCC_Development/SmaCCNFAtoDFA.class.st deleted file mode 100644 index f892b17d0..000000000 --- a/src/SmaCC_Development/SmaCCNFAtoDFA.class.st +++ /dev/null @@ -1,103 +0,0 @@ -Class { - #name : #SmaCCNFAtoDFA, - #superclass : #SmaCCGraphAlgorithm, - #instVars : [ - 'mergedStates', - 'reverseMap' - ], - #category : #'SmaCC_Development-DFA/NFA' -} - -{ #category : #accessing } -SmaCCNFAtoDFA class >> convertToDFA: aSmaCCNode [ - "Returns an equivalent DFA from the NFA specified by aSmaCCNode -- the NFA must not contain epsilon edges." - - ^ self new convertToDFA: aSmaCCNode -] - -{ #category : #edges } -SmaCCNFAtoDFA >> commonTransitionObjectsForEdges: edgeCollection [ - ^ edgeCollection - inject: edgeCollection first transitionObjects - into: [ :sum :each | sum smaccIntersect: each transitionObjects ] -] - -{ #category : #algorithm } -SmaCCNFAtoDFA >> convertToDFA: aSmaCCNode [ - ^ self mergedNodeFor: (Array with: aSmaCCNode) -] - -{ #category : #edges } -SmaCCNFAtoDFA >> createEdgeMerging: conflictingEdgeCollection [ - | newNode common newEdge | - newNode := self - mergedNodeFor: (conflictingEdgeCollection collect: [ :each | each to ]). - common := self - commonTransitionObjectsForEdges: conflictingEdgeCollection. - newEdge := conflictingEdgeCollection first class - to: newNode - on: common. - conflictingEdgeCollection do: [ :each | each remove: common ]. - ^ newEdge -] - -{ #category : #'merging nodes' } -SmaCCNFAtoDFA >> eliminateDuplicateTransitionsIn: aSmaCCNode [ - | newTransitions conflictingObject | - newTransitions := aSmaCCNode transitions - collect: [ :each | each copy ]. - [ conflictingObject := self someDuplicateIn: newTransitions. - conflictingObject notNil ] - whileTrue: - [ | conflictingEdges newEdge | - conflictingEdges := newTransitions - select: [ :each | each includes: conflictingObject ]. - newEdge := self createEdgeMerging: conflictingEdges. - newTransitions add: newEdge ]. - self setTransitionsOn: aSmaCCNode to: newTransitions -] - -{ #category : #'initialize-release' } -SmaCCNFAtoDFA >> initialize [ - super initialize. - mergedStates := Dictionary new. - reverseMap := IdentityDictionary new. -] - -{ #category : #'merging nodes' } -SmaCCNFAtoDFA >> mergedNodeFor: nodeCollection [ - | mergedNodes | - mergedNodes := IdentitySet new: nodeCollection size. - nodeCollection - do: [ :each | mergedNodes addAll: (reverseMap at: each ifAbsent: [ {each} ]) ]. - mergedNodes := mergedNodes asSortedCollection asArray. - ^ mergedStates - at: mergedNodes - ifAbsent: [ | newNode | - newNode := self createMergedNodeFrom: mergedNodes. - reverseMap at: newNode put: mergedNodes. - mergedStates - at: mergedNodes put: newNode; - at: (Array with: newNode) put: newNode. - self eliminateDuplicateTransitionsIn: newNode. - newNode ] -] - -{ #category : #edges } -SmaCCNFAtoDFA >> setTransitionsOn: aSmaCCNode to: edgeCollection [ - aSmaCCNode - transitions: (edgeCollection reject: [ :each | each isEmpty ]). - aSmaCCNode transitions - do: [ :each | each to: (self convertToDFA: each to) ] -] - -{ #category : #edges } -SmaCCNFAtoDFA >> someDuplicateIn: edgeCollection [ - | objects | - objects := SmaCCSet new. - edgeCollection - do: [ :edge | - (objects commonElementWith: edge transitionObjects) ifNotNil: [ :each | ^ each ]. - objects addAll: edge transitionObjects ]. - ^ nil -] diff --git a/src/SmaCC_Development/SmaCCNode.class.st b/src/SmaCC_Development/SmaCCNode.class.st deleted file mode 100644 index 0f454d005..000000000 --- a/src/SmaCC_Development/SmaCCNode.class.st +++ /dev/null @@ -1,345 +0,0 @@ -Class { - #name : #SmaCCNode, - #superclass : #Object, - #instVars : [ - 'transitions', - 'action', - 'id' - ], - #classVars : [ - 'NextId' - ], - #category : #'SmaCC_Development-DFA/NFA' -} - -{ #category : #'class initialization' } -SmaCCNode class >> initialize [ - NextId := 0 -] - -{ #category : #comparing } -SmaCCNode >> <= aSmaCCNode [ - ^ self id <= aSmaCCNode id -] - -{ #category : #comparing } -SmaCCNode >> = anObject [ - ^ self class = anObject class and: [ self id = anObject id ] -] - -{ #category : #accessing } -SmaCCNode >> action [ - ^ action -] - -{ #category : #'initialize-release' } -SmaCCNode >> action: anObject [ - anObject isNil - ifTrue: [ ^ self ]. - action := anObject isSymbol - ifTrue: [ anObject ] - ifFalse: [ SortedCollection with: anObject ] -] - -{ #category : #'compiling-scanner' } -SmaCCNode >> actionForSpecificRegularExpression: aSmaCCRegularExpression [ - | matchedAction strings startingStates first | - strings := aSmaCCRegularExpression possibleMatches. - startingStates := transitions first isCharacterTransition - ifTrue: [ Array with: self ] - ifFalse: - [ aSmaCCRegularExpression states - collect: - [ :each | - (transitions detect: [ :edge | edge includes: each ] ifNone: [ nil ]) - ifNotNil: [ :edge | edge to ] ] ]. - (startingStates includes: nil) - ifTrue: [ ^ nil ]. - first := true. - strings - do: - [ :each | - startingStates - do: - [ :node | - first - ifTrue: - [ matchedAction := node simulate: (ReadStream on: each). - first := false ] - ifFalse: - [ matchedAction = (node simulate: (ReadStream on: each)) - ifFalse: [ ^ nil ] ] ] ]. - ^ matchedAction -] - -{ #category : #accessing } -SmaCCNode >> addActions: aCollection [ - aCollection isNil - ifTrue: [ ^ self ]. - action isNil - ifTrue: [ ^ action := aCollection copy ]. - action isSymbol - ifTrue: [ ^ self ]. - aCollection isSymbol - ifTrue: [ ^ action := aCollection ]. - aCollection - do: [ :each | - (action includes: each) - ifFalse: [ action add: each ] ] -] - -{ #category : #edges } -SmaCCNode >> addEdgeTo: aSmaCCNode [ - transitions add: (SmaCCEdge to: aSmaCCNode on: nil) -] - -{ #category : #edges } -SmaCCNode >> addEdgeTo: aSmaCCNode onCharacters: characterCollection [ - transitions - add: (SmaCCCharacterEdge to: aSmaCCNode on: characterCollection) -] - -{ #category : #edges } -SmaCCNode >> addEdgeTo: aSmaCCNode onStates: symbolCollection [ - transitions add: (SmaCCStateEdge to: aSmaCCNode on: symbolCollection) -] - -{ #category : #accessing } -SmaCCNode >> allStates [ - | nodes | - nodes := Set new. - self allStatesInto: nodes. - ^ nodes -] - -{ #category : #accessing } -SmaCCNode >> allStatesInto: aSet [ - (aSet includes: self) - ifTrue: [ ^ self ]. - aSet add: self. - transitions do: [ :each | each to allStatesInto: aSet ] -] - -{ #category : #converting } -SmaCCNode >> asDFA [ - | new | - new := (SmaCCNFAtoDFA - convertToDFA: self asNFAWithoutEpsilonTransitions) - startingNodeWithoutUnnecessaryDefaultTransition. - new removeDuplicateNodes. - new orderNodes. - ^ new -] - -{ #category : #accessing } -SmaCCNode >> asDOTstring [ - | nodeStream mapStream | - nodeStream := WriteStream on: String new. - nodeStream - nextPutAll: - 'digraph finite_state_machine { - rankdir=LR; - size="100,100"'; - cr. - mapStream := WriteStream on: String new. - self allStates - do: - [ :each | - nodeStream - nextPutAll: 'node [ style=filled, shape = circle, fillcolor = '; - nextPutAll: - (each action notNil - ifTrue: [ 'green' ] - ifFalse: [ 'white' ]); - nextPutAll: '];'; - nextPutAll: each id printString; - nextPut: $;; - cr. - each transitions - do: - [ :trans | - | edge | - mapStream - nextPutAll: each id printString; - nextPutAll: ' -> '; - nextPutAll: trans to id printString; - nextPutAll: '[ label = "'. - edge := trans edgeLabel displayString. - edge size > 100 - ifTrue: [ edge := '...' ]. - mapStream - nextPutAll: edge; - nextPutAll: '"];'; - cr ] ]. - mapStream nextPut: $}. - ^ nodeStream contents , mapStream contents -] - -{ #category : #converting } -SmaCCNode >> asNFAWithoutEpsilonTransitions [ - ^ SmaCCEpsilonRemoval removeEpsilonEdgesFrom: self -] - -{ #category : #'compiling-scanner' } -SmaCCNode >> codeSizeEstimate: methodStates [ - "Estimate how many bytecodes will be generated from this node and its containing nodes." - - ^ 8 - + - (self transitions - inject: 0 - into: - [ :sum :each | - sum - + - (each codeSizeEstimate - + - ((self == each to or: [ methodStates includes: each to ]) - ifTrue: [ 4 ] - ifFalse: [ each to codeSizeEstimate: methodStates ])) ]) -] - -{ #category : #'initialize-release' } -SmaCCNode >> getId [ - ^ NextId := NextId + 1 -] - -{ #category : #accessing } -SmaCCNode >> groupedTransitions [ - ^ transitions - inject: OrderedCollection new - into: - [ :sum :each | - (sum - detect: [ :edgeCollection | edgeCollection first canMergeWith: each ] - ifNone: [ sum add: OrderedCollection new ]) add: each. - sum ] -] - -{ #category : #testing } -SmaCCNode >> hasSimpleLoop [ - ^ transitions anySatisfy: [ :each | each to = self ] -] - -{ #category : #comparing } -SmaCCNode >> hash [ - ^ id hashMultiply -] - -{ #category : #accessing } -SmaCCNode >> id [ - ^ id -] - -{ #category : #'initialize-release' } -SmaCCNode >> initialize [ - super initialize. - id := self getId. - transitions := SortedCollection new -] - -{ #category : #testing } -SmaCCNode >> isTerminalNode [ - ^ transitions isEmpty - or: [ transitions size = 1 and: [ self hasSimpleLoop ] ] -] - -{ #category : #accessing } -SmaCCNode >> mergeTransitions [ - self groupedTransitions - do: - [ :edges | - | toMap | - toMap := Dictionary new. - edges - do: - [ :each | - (toMap includesKey: each to) - ifTrue: - [ (toMap at: each to) mergeWith: each. - transitions remove: each ] - ifFalse: [ toMap at: each to put: each ] ] ] -] - -{ #category : #accessing } -SmaCCNode >> mergeWith: aSmaCCNode [ - id := aSmaCCNode id. - transitions := aSmaCCNode transitions. - action := aSmaCCNode action -] - -{ #category : #converting } -SmaCCNode >> orderNodes [ - self orderNodesWithId: NextId map: Dictionary new -] - -{ #category : #converting } -SmaCCNode >> orderNodesWithId: anInteger map: aDictionary [ - anInteger <= id - ifTrue: [ ^ self ]. - id := aDictionary at: id ifAbsentPut: [ self getId ]. - self sortedTransitions - do: [ :each | each to orderNodesWithId: anInteger map: aDictionary ] -] - -{ #category : #printing } -SmaCCNode >> printOn: aStream [ - aStream - nextPutAll: self class name; - nextPut: $(; - nextPutAll: id printString; - nextPut: $) -] - -{ #category : #accessing } -SmaCCNode >> removeDuplicateNodes [ - ^ SmaCCDuplicateNodeEliminator removeDuplicateNodesIn: self -] - -{ #category : #copying } -SmaCCNode >> shallowCopy [ - | copy | - copy := self class new. - copy action: action. - ^ copy -] - -{ #category : #simulating } -SmaCCNode >> simulate: aStream [ - | char | - aStream atEnd - ifTrue: [ ^ action ]. - char := aStream next. - transitions - do: [ :each | - (each includes: char) - ifTrue: [ ^ each to simulate: aStream ] ]. - ^ nil -] - -{ #category : #converting } -SmaCCNode >> sortedTransitions [ - ^ transitions asSortedCollection: [ :a :b | a <= b ] -] - -{ #category : #accessing } -SmaCCNode >> startingNodeWithoutUnnecessaryDefaultTransition [ - | edge | - self transitions size = 1 - ifFalse: [ ^ self ]. - edge := self transitions first. - (edge includes: #default) - ifTrue: [ ^ edge to ]. - ^ self -] - -{ #category : #accessing } -SmaCCNode >> transitions [ - ^ transitions -] - -{ #category : #accessing } -SmaCCNode >> transitions: aCollection [ - transitions size to: 1 by: -1 do: [ :i | transitions removeAt: i ]. - transitions addAll: aCollection -] diff --git a/src/SmaCC_Development/SmaCCNodeCalculation.class.st b/src/SmaCC_Development/SmaCCNodeCalculation.class.st deleted file mode 100644 index 11f8ee20e..000000000 --- a/src/SmaCC_Development/SmaCCNodeCalculation.class.st +++ /dev/null @@ -1,182 +0,0 @@ -Class { - #name : #SmaCCNodeCalculation, - #superclass : #Object, - #instVars : [ - 'grammar', - 'classes', - 'variableSymbols', - 'singleVariableSymbols' - ], - #category : #'SmaCC_Development-Compilation Model' -} - -{ #category : #accessing } -SmaCCNodeCalculation class >> compileForGrammar: aSmaCCGrammar [ - self new - grammar: aSmaCCGrammar; - compileNodeClasses -] - -{ #category : #private } -SmaCCNodeCalculation >> calculateReduceActions [ - variableSymbols - do: [ :each | - each - productionsDo: [ :rhs | rhs reduceCode: (SmaCCVariableReduceCode onRHS: rhs) ] ]. - singleVariableSymbols - do: [ :each | - each - productionsDo: [ :rhs | rhs reduceCode: (SmaCCSingleVariableReduceCode onRHS: rhs) ] ]. - grammar - rhsDo: [ :each | - each hasNodeClassDefinition - ifTrue: [ each reduceCode: (SmaCCCreateNodeReduceCode onRHS: each) ] - ifFalse: [ each hasReduceAction - ifFalse: [ each reduceCode: (SmaCCDefaultNodeReduceCode onRHS: each) ] ] ] -] - -{ #category : #private } -SmaCCNodeCalculation >> calculateVariableSymbols [ - variableSymbols := Set new. - grammar symbols - do: - [ :each | - each requiresNodeType - ifTrue: - [ each - productionsDo: - [ :rhs | rhs unnamedSymbolsDo: [ :sym | self calculateVariableSymbolsFor: sym ] ] ] ]. - variableSymbols := variableSymbols - select: [ :each | self hasVariables: each seen: IdentitySet new ]. - singleVariableSymbols := variableSymbols - select: [ :each | self hasSingleVariableName: each ]. - variableSymbols removeAll: singleVariableSymbols -] - -{ #category : #private } -SmaCCNodeCalculation >> calculateVariableSymbolsFor: aSmaCCSymbol [ - aSmaCCSymbol isTerminal - ifTrue: [ ^ self ]. - aSmaCCSymbol requiresNodeType - ifTrue: [ ^ self ]. - (variableSymbols includes: aSmaCCSymbol) - ifTrue: [ ^ self ]. - variableSymbols add: aSmaCCSymbol. - aSmaCCSymbol - productionsDo: - [ :rhs | - rhs - unnamedSymbolsDo: [ :each | self calculateVariableSymbolsFor: each ] ] -] - -{ #category : #private } -SmaCCNodeCalculation >> calculateVariables [ - SmaCCVariableCalculation calculateVariablesForGrammar: grammar -] - -{ #category : #private } -SmaCCNodeCalculation >> codeGenerator [ - ^ grammar codeGenerator -] - -{ #category : #private } -SmaCCNodeCalculation >> compileMethodsAndVariables [ - self sortedClasses do: [ :each | each compileMethodsAndVariables ] -] - -{ #category : #private } -SmaCCNodeCalculation >> compileNodeClasses [ - self sortedClasses isEmpty - ifTrue: [ ^ self ]. - self defineNodeClasses. - self calculateVariableSymbols. - self calculateReduceActions. - self calculateVariables. - self compileMethodsAndVariables. - self compileVisitor. - self compileTypes -] - -{ #category : #private } -SmaCCNodeCalculation >> compileTypes [ - self codeGenerator compileSymbolTypes -] - -{ #category : #private } -SmaCCNodeCalculation >> compileVisitor [ - | class | - class := self codeGenerator - defineClass: grammar rootDefinition fullName , 'Visitor' - asSubclassOf: (self codeGenerator model classFor: SmaCCParseNodeVisitor). - self codeGenerator removeOldMethodsFrom: class. - self codeGenerator removeOldMethodsFrom: class theMetaClass. - (SmaCCVisitorClassDefinition forClassDefinitions: self sortedClasses) - grammar: grammar; - modelClass: class; - compileMethodsAndVariables -] - -{ #category : #private } -SmaCCNodeCalculation >> defineNodeClasses [ - self sortedClasses - do: [ :each | self codeGenerator compileNodeClassDefinition: each ] -] - -{ #category : #private } -SmaCCNodeCalculation >> grammar: aSmaCCGrammar [ - grammar := aSmaCCGrammar -] - -{ #category : #private } -SmaCCNodeCalculation >> hasSingleVariableName: aSymbol [ - ^ self - hasSingleVariableName: aSymbol - using: Set new - seen: IdentitySet new -] - -{ #category : #private } -SmaCCNodeCalculation >> hasSingleVariableName: aSymbol using: nameSet seen: seen [ - (seen includes: aSymbol) - ifTrue: [ ^ true ]. - seen add: aSymbol. - aSymbol - productionsDo: - [ :rhs | - nameSet addAll: rhs variableNames. - nameSet size > 1 - ifTrue: [ ^ false ]. - rhs - unnamedSymbolsDo: - [ :sym | - (self hasSingleVariableName: sym using: nameSet seen: seen) - ifFalse: [ ^ false ] ] ]. - ^ true -] - -{ #category : #private } -SmaCCNodeCalculation >> hasVariables: aSmaCCSymbol seen: aSet [ - aSmaCCSymbol requiresNodeType - ifTrue: [ ^ false ]. - (aSet includes: aSmaCCSymbol) - ifTrue: [ ^ false ]. - aSet add: aSmaCCSymbol. - aSmaCCSymbol - productionsDo: - [ :each | - each hasNamedVariable - ifTrue: [ ^ true ]. - each - do: [ :symbol | - (self hasVariables: symbol seen: aSet) - ifTrue: [ ^ true ] ] ]. - ^ false -] - -{ #category : #private } -SmaCCNodeCalculation >> sortedClasses [ - ^ classes - ifNil: - [ classes := grammar classDefinitions - asSortedCollection: [ :a :b | a isSortedBefore: b ] ] -] diff --git a/src/SmaCC_Development/SmaCCNodeClassDefinition.class.st b/src/SmaCC_Development/SmaCCNodeClassDefinition.class.st deleted file mode 100644 index d5a40539b..000000000 --- a/src/SmaCC_Development/SmaCCNodeClassDefinition.class.st +++ /dev/null @@ -1,327 +0,0 @@ -" -SmaCCNodeClassDefinition represents a class to compile. - -Instance Variables - extraAttributes extra variables that should be added to the class - productions all of the rhs that return/create this class - variables the variables defined by the grammar for this class - -" -Class { - #name : #SmaCCNodeClassDefinition, - #superclass : #SmaCCClassDefinition, - #instVars : [ - 'productions', - 'variables', - 'extraAttributes' - ], - #category : #'SmaCC_Development-Compilation Model' -} - -{ #category : #'instance creation' } -SmaCCNodeClassDefinition class >> named: aSymbol grammar: aSmaCCGrammar [ - ^ self new - name: aSymbol; - grammar: aSmaCCGrammar; - yourself -] - -{ #category : #accessing } -SmaCCNodeClassDefinition >> addProduction: aSmaCCRHS [ - productions add: aSmaCCRHS. - aSmaCCRHS nodeClassDefinition: self -] - -{ #category : #compiling } -SmaCCNodeClassDefinition >> addVariable: aSmaCCVariableDefinition [ - self codeGenerator - addVariable: aSmaCCVariableDefinition - forDefinition: self -] - -{ #category : #'private-variables' } -SmaCCNodeClassDefinition >> baseTypeOf: aVariableName [ - | allTypes aRBRootNamespace | - aRBRootNamespace := class model. - allTypes := self modelTypesForVariable: aVariableName. - allTypes - remove: (aRBRootNamespace classFor: nil class) - ifAbsent: [ nil ]. - allTypes isEmpty - ifTrue: [ ^ aRBRootNamespace classFor: Object ]. - allTypes := allTypes asOrderedCollection. - ^ allTypes - inject: allTypes first - into: - [ :sum :each | - | current | - current := sum. - [ current notNil and: [ (each includesClass: current) not ] ] - whileTrue: [ current := current superclass ]. - current ] -] - -{ #category : #'private-variables' } -SmaCCNodeClassDefinition >> calculateCommonSubclassVariables [ - | allSubclassVars includedVariables | - allSubclassVars := Bag new. - subclasses - do: [ :each | allSubclassVars addAll: each variableDefinitions ]. - includedVariables := allSubclassVars asSet - select: [ :each | (allSubclassVars occurrencesOf: each) = subclasses size ]. - ^ self subclassProductionVariables - select: [ :each | includedVariables includes: each ] -] - -{ #category : #'private-variables' } -SmaCCNodeClassDefinition >> collectionVariableDefinitions [ - ^ self variableDefinitions select: [ :each | each isCollection ] -] - -{ #category : #compiling } -SmaCCNodeClassDefinition >> compileChildrenMethod [ - self codeGenerator compileChildrenMethod: self -] - -{ #category : #compiling } -SmaCCNodeClassDefinition >> compileCopyInContextMethod [ - self codeGenerator compileCopyInContextMethod: self -] - -{ #category : #compiling } -SmaCCNodeClassDefinition >> compileEqualMethod [ - self codeGenerator compileEqualMethod: self -] - -{ #category : #compiling } -SmaCCNodeClassDefinition >> compileGetterAndSetter: aSmaCCVariableDefinition [ - self codeGenerator - compileGetterAndSetter: aSmaCCVariableDefinition - forDefinition: self -] - -{ #category : #compiling } -SmaCCNodeClassDefinition >> compileHashMethod [ - self codeGenerator compileHashMethod: self -] - -{ #category : #compiling } -SmaCCNodeClassDefinition >> compileInitializeMethod [ - self codeGenerator compileInitializeMethod: self -] - -{ #category : #compiling } -SmaCCNodeClassDefinition >> compileMatchInContextMethod [ - self codeGenerator compileMatchInContextMethod: self -] - -{ #category : #compiling } -SmaCCNodeClassDefinition >> compileMethodsAndVariables [ - self - compileVariablesAndAccessors; - compileInitializeMethod; - compileHashMethod; - compileEqualMethod; - compilePostCopyMethod; - compileChildrenMethod; - compileCopyInContextMethod; - compileMatchInContextMethod; - compileVariablesMethods -] - -{ #category : #compiling } -SmaCCNodeClassDefinition >> compilePostCopyMethod [ - self codeGenerator compilePostCopyMethod: self -] - -{ #category : #compiling } -SmaCCNodeClassDefinition >> compileVariableAndAccessor: aSmaCCVariableDefinition [ - aSmaCCVariableDefinition - baseType: (self baseTypeOf: aSmaCCVariableDefinition variableName). - aSmaCCVariableDefinition - isAlwaysAssigned: (self isAlwaysAssigned: aSmaCCVariableDefinition variableName). - self addVariable: aSmaCCVariableDefinition. - self compileGetterAndSetter: aSmaCCVariableDefinition -] - -{ #category : #compiling } -SmaCCNodeClassDefinition >> compileVariablesAndAccessors [ - self variableDefinitions - do: [ :each | self compileVariableAndAccessor: each ]. - self extraAttributes - do: [ :each | self compileVariableAndAccessor: each ] -] - -{ #category : #compiling } -SmaCCNodeClassDefinition >> compileVariablesMethods [ - self codeGenerator compileVariablesMethods: self -] - -{ #category : #accessing } -SmaCCNodeClassDefinition >> extraAttributes [ - ^ extraAttributes -] - -{ #category : #'initialize-release' } -SmaCCNodeClassDefinition >> extraAttributes: aCollection [ - extraAttributes := aCollection -] - -{ #category : #accessing } -SmaCCNodeClassDefinition >> fullName [ - ^ self codeGenerator namespaceName , grammar prefix , name - , grammar suffix -] - -{ #category : #accessing } -SmaCCNodeClassDefinition >> grammar [ - ^ grammar -] - -{ #category : #'initialize-release' } -SmaCCNodeClassDefinition >> initialize [ - super initialize. - productions := OrderedCollection new. - extraAttributes := OrderedCollection new -] - -{ #category : #accessing } -SmaCCNodeClassDefinition >> instanceVariableNames [ - ^ self variableDefinitions collect: [ :each | each variableName ] -] - -{ #category : #testing } -SmaCCNodeClassDefinition >> isAlwaysAssigned: aString [ - ^ ((self modelTypesForVariable: aString) - includes: (class model classFor: nil class)) - and: - [ self withAllSubclasses - allSatisfy: - [ :sub | - sub productions - allSatisfy: [ :each | each locallyDefinesVariable: aString ] ] ] -] - -{ #category : #testing } -SmaCCNodeClassDefinition >> isCollectionVariable: aVariableName [ - | definition | - definition := self variableDefinitionNamed: aVariableName. - definition notNil - ifTrue: [ ^ definition isCollection ]. - ^ superclass notNil - and: [ superclass isCollectionVariable: aVariableName ] -] - -{ #category : #testing } -SmaCCNodeClassDefinition >> isLocalVariable: aSmaCCVariableDefinition [ - ^ superclass isNil - or: - [ (superclass - variableDefinitionNamed: aSmaCCVariableDefinition variableName) - isNil ] -] - -{ #category : #'private-variables' } -SmaCCNodeClassDefinition >> modelTypesForVariable: aVariableName [ - | allTypes | - allTypes := Set new. - self withAllSubclasses - do: - [ :each | - each productions - do: - [ :production | allTypes addAll: (production modelTypesForVariable: aVariableName) ] ]. - ^ allTypes -] - -{ #category : #accessing } -SmaCCNodeClassDefinition >> nodeVariableDefinitions [ - ^ self variableDefinitions - select: [ :each | each isBasePossibleNodeType ] -] - -{ #category : #'private-variables' } -SmaCCNodeClassDefinition >> productionVariables [ - | vars | - vars := productions collect: [ :each | each variableDefinitions ]. - ^ SmaCCSymbol mergeOrderedVariableDefinitions: vars -] - -{ #category : #accessing } -SmaCCNodeClassDefinition >> productions [ - ^ productions -] - -{ #category : #'private-variables' } -SmaCCNodeClassDefinition >> removeDuplicateSubclassVariables [ - variables - do: - [ :each | - self withAllSubclasses - do: - [ :sub | - sub == self - ifFalse: [ sub removeInstanceVariable: each variableName ] ] ] -] - -{ #category : #'private-variables' } -SmaCCNodeClassDefinition >> removeInstanceVariable: aString [ - | variable | - variable := self variableDefinitions - detect: [ :each | each variableName = aString ] - ifNone: [ nil ]. - variable isNil - ifTrue: [ ^ self ]. - variables remove: variable. - SmaCCVariableDefinition assignIndices: variables -] - -{ #category : #private } -SmaCCNodeClassDefinition >> rootClassName [ - ^ SmaCCParseNode name -] - -{ #category : #'private-variables' } -SmaCCNodeClassDefinition >> subclassProductionVariables [ - | vars | - vars := self withAllSubclasses - collect: [ :sub | sub productionVariables ]. - ^ SmaCCSymbol mergeOrderedVariableDefinitions: vars -] - -{ #category : #compiling } -SmaCCNodeClassDefinition >> tempNodeName [ - ^ self temporaryNameFor: grammar rootDefinition name -] - -{ #category : #'private-variables' } -SmaCCNodeClassDefinition >> variableDefinitionNamed: aString [ - ^ self variableDefinitions - detect: [ :each | each variableName = aString ] - ifNone: - [ superclass isNil - ifTrue: [ nil ] - ifFalse: [ superclass variableDefinitionNamed: aString ] ] -] - -{ #category : #accessing } -SmaCCNodeClassDefinition >> variableDefinitions [ - variables isNil - ifTrue: - [ variables := productions isEmpty - ifTrue: [ self calculateCommonSubclassVariables ] - ifFalse: [ self productionVariables ]. - self removeDuplicateSubclassVariables. - SmaCCVariableDefinition assignIndices: variables ]. - ^ variables -] - -{ #category : #accessing } -SmaCCNodeClassDefinition >> variables [ - ^ superclass isNil - ifTrue: [ self instanceVariableNames copy ] - ifFalse: - [ superclass variables - addAll: self instanceVariableNames; - yourself ] -] diff --git a/src/SmaCC_Development/SmaCCNonTerminalSymbol.class.st b/src/SmaCC_Development/SmaCCNonTerminalSymbol.class.st deleted file mode 100644 index d3a34fc12..000000000 --- a/src/SmaCC_Development/SmaCCNonTerminalSymbol.class.st +++ /dev/null @@ -1,109 +0,0 @@ -Class { - #name : #SmaCCNonTerminalSymbol, - #superclass : #SmaCCSymbol, - #instVars : [ - 'productions', - 'position' - ], - #category : #'SmaCC_Development-Model' -} - -{ #category : #accessing } -SmaCCNonTerminalSymbol >> addProduction: aSmaCCRHS [ - productions add: aSmaCCRHS. - aSmaCCRHS symbol: self -] - -{ #category : #accessing } -SmaCCNonTerminalSymbol >> calculateFirstTerminals [ - | initialSize | - initialSize := firstTerminals size. - productions isEmpty - ifTrue: [ firstTerminals add: grammar emptySymbol ] - ifFalse: [ productions - do: [ :each | firstTerminals addAll: each firstTerminals ] ]. - ^ initialSize ~= firstTerminals size -] - -{ #category : #'initialize-release' } -SmaCCNonTerminalSymbol >> initialize [ - super initialize. - productions := OrderedCollection new -] - -{ #category : #testing } -SmaCCNonTerminalSymbol >> isEmpty [ - ^ productions isEmpty -] - -{ #category : #testing } -SmaCCNonTerminalSymbol >> isTerminal [ - ^ false -] - -{ #category : #accessing } -SmaCCNonTerminalSymbol >> modelTypes: anIdentitySet [ - | types | - (anIdentitySet includes: self) - ifTrue: [ ^ #() ]. - anIdentitySet add: self. - types := Set new. - productions - do: [ :each | types addAll: (each modelTypes: anIdentitySet) ]. - anIdentitySet remove: self. - ^ types -] - -{ #category : #accessing } -SmaCCNonTerminalSymbol >> position [ - ^ (position ifNil: [ 0 ]) + 10000000 -] - -{ #category : #accessing } -SmaCCNonTerminalSymbol >> position: anInteger [ - position ifNil: [ position := anInteger ] -] - -{ #category : #accessing } -SmaCCNonTerminalSymbol >> positionOf: aSmaCCRHS [ - ^ productions indexOf: aSmaCCRHS -] - -{ #category : #accessing } -SmaCCNonTerminalSymbol >> productionsDo: aBlock [ - productions do: aBlock -] - -{ #category : #testing } -SmaCCNonTerminalSymbol >> returnsSingleVariable [ - ^ productions anySatisfy: [ :each | each returnsSingleVariable ] -] - -{ #category : #testing } -SmaCCNonTerminalSymbol >> returnsVariableCollection [ - ^ productions anySatisfy: [ :each | each returnsVariableCollection ] -] - -{ #category : #accessing } -SmaCCNonTerminalSymbol >> ruleNumber [ - ^ position ifNil: [ 0 ] -] - -{ #category : #accessing } -SmaCCNonTerminalSymbol >> size [ - ^ productions size -] - -{ #category : #accessing } -SmaCCNonTerminalSymbol >> variableName [ - self - productionsDo: - [ :each | - | vars | - vars := each variableNames asArray. - vars notEmpty - ifTrue: [ ^ vars first ] ]. - ^ self - error: - 'No variable found -- should only be called when returnsSingleVariable is true' -] diff --git a/src/SmaCC_Development/SmaCCNotRENode.class.st b/src/SmaCC_Development/SmaCCNotRENode.class.st deleted file mode 100644 index 0342049fb..000000000 --- a/src/SmaCC_Development/SmaCCNotRENode.class.st +++ /dev/null @@ -1,67 +0,0 @@ -" -SmaCCNotRENode is a SmaCCRegularExpressionNode that inverts another SmaCCRegularExpressionNode matches. - -Instance Variables: - node the node whose match is being inverted - - -" -Class { - #name : #SmaCCNotRENode, - #superclass : #SmaCCRegularExpressionNode, - #instVars : [ - 'node' - ], - #category : #'SmaCC_Development-Regular Expressions' -} - -{ #category : #'instance creation' } -SmaCCNotRENode class >> on: aSmaCCCharacterRENode [ - ^ self new - node: aSmaCCCharacterRENode; - yourself -] - -{ #category : #private } -SmaCCNotRENode >> asNFAStartingWith: aSmaCCNode [ - ^ self characterNode asNFAStartingWith: aSmaCCNode -] - -{ #category : #private } -SmaCCNotRENode >> characterNode [ - ^ (SmaCCCharacterRENode characters: self characters) - addStates: states; - action: action; - yourself -] - -{ #category : #private } -SmaCCNotRENode >> characters [ - ^ SmaCCGrammar allCharacters - reject: [ :each | node characters includes: each ] -] - -{ #category : #constructing } -SmaCCNotRENode >> makeCaseInsensitive [ - node makeCaseInsensitive -] - -{ #category : #'initialize-release' } -SmaCCNotRENode >> node: aSmaCCCharacterRENode [ - node := aSmaCCCharacterRENode -] - -{ #category : #private } -SmaCCNotRENode >> possibleMatchesDo: aBlock on: aStream [ - self characterNode possibleMatchesDo: aBlock on: aStream -] - -{ #category : #accessing } -SmaCCNotRENode >> possibleMatchesSize [ - ^ self characterNode possibleMatchesSize -] - -{ #category : #printing } -SmaCCNotRENode >> printOn: aStream [ - self characterNode printOn: aStream -] diff --git a/src/SmaCC_Development/SmaCCOrRENode.class.st b/src/SmaCC_Development/SmaCCOrRENode.class.st deleted file mode 100644 index b969ab3a5..000000000 --- a/src/SmaCC_Development/SmaCCOrRENode.class.st +++ /dev/null @@ -1,88 +0,0 @@ -" -SmaCCOrRENode is a SmaCCRegularExpressionNode that represents several possible regular expression choices. For example, we may have an SmaCCOrRENode that contains a character RE that matches letters when the state is #foo, and another character RE that matches whitespace when the state is #bar. - -Instance Variables: - nodes all RE nodes that are being ORed together -" -Class { - #name : #SmaCCOrRENode, - #superclass : #SmaCCRegularExpressionNode, - #instVars : [ - 'nodes' - ], - #category : #'SmaCC_Development-Regular Expressions' -} - -{ #category : #'instance creation' } -SmaCCOrRENode class >> nodes: aCollection [ - ^ self new - nodes: aCollection; - yourself -] - -{ #category : #private } -SmaCCOrRENode >> asNFAStartingWith: aSmaCCNode [ - | endNode startNode | - startNode := self addStateTransitionsTo: aSmaCCNode. - endNode := SmaCCNode new. - endNode action: action. - nodes - do: - [ :each | - | componentStart | - componentStart := SmaCCNode new. - startNode addEdgeTo: componentStart. - (each asNFAStartingWith: componentStart) addEdgeTo: endNode ]. - ^ endNode -] - -{ #category : #constructing } -SmaCCOrRENode >> makeCaseInsensitive [ - nodes do: [ :each | each makeCaseInsensitive ] -] - -{ #category : #'initialize-release' } -SmaCCOrRENode >> nodes: aCollection [ - nodes := aCollection -] - -{ #category : #private } -SmaCCOrRENode >> possibleMatchesDo: aBlock on: aStream [ - nodes - do: - [ :each | - | pos | - pos := aStream position. - each possibleMatchesDo: aBlock on: aStream. - aStream position: pos ] -] - -{ #category : #accessing } -SmaCCOrRENode >> possibleMatchesSize [ - ^ nodes - inject: 0 - into: [ :sum :each | sum + each possibleMatchesSize ] -] - -{ #category : #copying } -SmaCCOrRENode >> postCopy [ - super postCopy. - nodes := nodes copy -] - -{ #category : #printing } -SmaCCOrRENode >> printOn: aStream [ - aStream nextPut: $(. - nodes - do: [ :each | each printOn: aStream ] - separatedBy: [ aStream nextPutAll: ' | ' ]. - aStream nextPut: $) -] - -{ #category : #constructing } -SmaCCOrRENode >> | aSmaCCRegularExpressionNode [ - self action = aSmaCCRegularExpressionNode action - ifFalse: [ ^ super | aSmaCCRegularExpressionNode ]. - nodes add: aSmaCCRegularExpressionNode. - ^ self -] diff --git a/src/SmaCC_Development/SmaCCParser.extension.st b/src/SmaCC_Development/SmaCCParser.extension.st deleted file mode 100644 index 77f127108..000000000 --- a/src/SmaCC_Development/SmaCCParser.extension.st +++ /dev/null @@ -1,59 +0,0 @@ -Extension { #name : #SmaCCParser } - -{ #category : #'*SmaCC_Development' } -SmaCCParser class >> compileGrammar: aString [ - | oldCharacterSize | - (aString isNil or: [ aString isEmpty ]) - ifTrue: [ ^ self ]. - oldCharacterSize := SmaCCGrammar maximumCharacterValue. - [ SmaCCGrammarCompiler new - buildDefinition: aString; - compileInto: self scannerClass andParser: self ] - ensure: [ SmaCCGrammar maximumCharacterValue: oldCharacterSize ] -] - -{ #category : #'*SmaCC_Development' } -SmaCCParser class >> definitionAST [ - ^ [ SmaCCDefinitionParser parse: self definitionString ] - on: SmaCCParserError - do: [ :ex | ex return: nil ] -] - -{ #category : #'*SmaCC_Development' } -SmaCCParser class >> definitionString [ - | scannerClass source | - scannerClass := [ self scannerClass ] - on: Error - do: [ :ex | ex return: nil ]. - (self class includesSelector: #definitionComment) - ifTrue: [ source := self removeCommentedPartOf: (self class sourceCodeAt: #definitionComment) ] - ifFalse: [ source := ''. - (self class includesSelector: #parserDefinitionComment) - ifTrue: [ source := self removeCommentedPartOf: (self class sourceCodeAt: #parserDefinitionComment) ]. - (scannerClass notNil and: [ scannerClass class includesSelector: #scannerDefinitionComment ]) - ifTrue: - [ source := (self removeCommentedPartOf: (scannerClass class sourceCodeAt: #scannerDefinitionComment)) , '\' withCRs , source ] ]. - ^ source -] - -{ #category : #'*SmaCC_Development' } -SmaCCParser class >> recompileAll [ - "self recompileAll" - - self withAllSubclasses - do: [ :each | each compileGrammar: each definitionString ] - displayingProgress: [ :each | 'Compiling ' , each instanceSide name ] -] - -{ #category : #'*SmaCC_Development' } -SmaCCParser class >> removeCommentedPartOf: aString [ - | inStream outStream | - inStream := ReadStream on: aString. - outStream := WriteStream with: String new. - inStream upTo: $". - [ inStream atEnd ] - whileFalse: [ (inStream peekFor: $") - ifTrue: [ outStream nextPut: $" ]. - outStream nextPutAll: (inStream upTo: $") ]. - ^ outStream contents -] diff --git a/src/SmaCC_Development/SmaCCPreferredCompositeAction.class.st b/src/SmaCC_Development/SmaCCPreferredCompositeAction.class.st deleted file mode 100644 index 1db306f85..000000000 --- a/src/SmaCC_Development/SmaCCPreferredCompositeAction.class.st +++ /dev/null @@ -1,52 +0,0 @@ -" -SmaCCPreferredCompositeAction is a composite action that has a preferred action. The preferred action is used in the state/symbol table. - -Instance Variables: - preferredAction the preferred action - - -" -Class { - #name : #SmaCCPreferredCompositeAction, - #superclass : #SmaCCCompositeAction, - #instVars : [ - 'preferredAction' - ], - #category : #'SmaCC_Development-Actions' -} - -{ #category : #'error handling' } -SmaCCPreferredCompositeAction >> errorType [ - ^ 'Shift/Reduce Conflict (handled by precedence rules)' -] - -{ #category : #merging } -SmaCCPreferredCompositeAction >> mergeWith: aSmaCCAction prefer: aClass [ - aSmaCCAction isReduce - ifTrue: - [ self reduceAction = aSmaCCAction - ifTrue: [ ^ self ]. - ^ SmaCCAmbiguousAction new - addAction: aSmaCCAction; - addActions: actions; - yourself ]. - aSmaCCAction isShift - ifTrue: [ self addAction: aSmaCCAction. - ^ self ]. - ^ aSmaCCAction mergeWith: self prefer: aClass -] - -{ #category : #accessing } -SmaCCPreferredCompositeAction >> preferredAction [ - ^ preferredAction -] - -{ #category : #'initialize-release' } -SmaCCPreferredCompositeAction >> preferredAction: aSmaCCAction [ - preferredAction := aSmaCCAction -] - -{ #category : #private } -SmaCCPreferredCompositeAction >> reduceAction [ - ^ actions detect: [ :each | each isReduce ] -] diff --git a/src/SmaCC_Development/SmaCCPrimitiveAction.class.st b/src/SmaCC_Development/SmaCCPrimitiveAction.class.st deleted file mode 100644 index 0ad124e03..000000000 --- a/src/SmaCC_Development/SmaCCPrimitiveAction.class.st +++ /dev/null @@ -1,43 +0,0 @@ -" -SmaCCPrimitiveAction is an abstract class that represents a basic LR state/symbol action (shift, reduce, accept, or reject). - -Instance Variables: - lr1Item the item that the action is for - - -" -Class { - #name : #SmaCCPrimitiveAction, - #superclass : #SmaCCAction, - #instVars : [ - 'lr1Item' - ], - #category : #'SmaCC_Development-Actions' -} - -{ #category : #accessing } -SmaCCPrimitiveAction class >> id [ - ^ nil -] - -{ #category : #'instance creation' } -SmaCCPrimitiveAction class >> item: aSmaCCLR1Item [ - ^ self new - lr1Item: aSmaCCLR1Item; - yourself -] - -{ #category : #accessing } -SmaCCPrimitiveAction >> id [ - ^ self class id -] - -{ #category : #accessing } -SmaCCPrimitiveAction >> lr1Item [ - ^ lr1Item -] - -{ #category : #'initialize-release' } -SmaCCPrimitiveAction >> lr1Item: aSmaCCLR1Item [ - lr1Item := aSmaCCLR1Item -] diff --git a/src/SmaCC_Development/SmaCCRHS.class.st b/src/SmaCC_Development/SmaCCRHS.class.st deleted file mode 100644 index 69b265db6..000000000 --- a/src/SmaCC_Development/SmaCCRHS.class.st +++ /dev/null @@ -1,303 +0,0 @@ -Class { - #name : #SmaCCRHS, - #superclass : #SmaCCGrammarItem, - #instVars : [ - 'collection', - 'variableNameMap', - 'nodeClassDefinition', - 'productionSymbol', - 'reduceCode' - ], - #category : #'SmaCC_Development-Model' -} - -{ #category : #comparing } -SmaCCRHS >> = aSmaCCRHS [ - ^ self class = aSmaCCRHS class - and: [ collection = aSmaCCRHS collection ] -] - -{ #category : #accessing } -SmaCCRHS >> add: aSmaCCSymbol [ - collection add: aSmaCCSymbol -] - -{ #category : #private } -SmaCCRHS >> annotateTokenVariables: aBlock [ - collection - keysAndValuesDo: - [ :i :each | - (each isTerminal and: [ (self variableNameForIndex: i) isNil ]) - ifTrue: - [ (aBlock value: each unsafeMethodName) - ifNotNil: - [ :value | - (variableNameMap at: value ifAbsentPut: [ OrderedCollection new ]) - add: i ] ] ] -] - -{ #category : #accessing } -SmaCCRHS >> at: anInteger [ - ^ collection at: anInteger -] - -{ #category : #private } -SmaCCRHS >> basicModelTypesForVariable: aString into: productionTypes seen: aSet [ - (self symbolsForVariableName: aString) - do: - [ :symbol | - symbol returnsSingleVariable - ifTrue: - [ productionTypes - addAll: (symbol modelTypesForVariable: symbol variableName) ] - ifFalse: [ productionTypes addAll: symbol modelTypes ] ]. - self - unnamedSymbolsDo: - [ :each | - (each hasVariableNamed: aString) - ifTrue: - [ productionTypes - addAll: (each modelTypesForVariable: aString seen: aSet) ] ] -] - -{ #category : #private } -SmaCCRHS >> collection [ - ^ collection -] - -{ #category : #'reduce actions' } -SmaCCRHS >> componentIndex [ - collection - keysAndValuesDo: - [ :index :each | - ((self variableNameForIndex: index) isNil - and: [ each isSubtypeOf: self ]) - ifTrue: [ ^ index ] ]. - ^ 0 -] - -{ #category : #accessing } -SmaCCRHS >> do: aBlock [ - collection do: aBlock -] - -{ #category : #private } -SmaCCRHS >> firstTerminals [ - | items | - collection isEmpty - ifTrue: [ ^ Set with: self grammar emptySymbol ]. - items := Set new. - 1 to: collection size do: - [ :index | - items addAll: (collection at: index) firstTerminals. - (items includes: self grammar emptySymbol) - ifTrue: - [ index < collection size - ifTrue: [ items remove: self grammar emptySymbol ] ] - ifFalse: [ ^ items ] ]. - ^ items -] - -{ #category : #'reduce actions' } -SmaCCRHS >> generateNamedVariableCollectionWarningFor: problemIndex [ - | stream | - stream := WriteStream on: String new. - stream - nextPutAll: - 'Non terminal symbol that returns a variable collection is assigned to a variable. The non terminal should be changed to return an AST node:'; - cr; - cr; - nextPutAll: self productionSymbol name; - nextPutAll: ' : '. - 1 to: self size do: - [ :i | - i == problemIndex - ifTrue: [ stream nextPutAll: '>>>' ]. - stream nextPutAll: (self at: i) name. - i == problemIndex - ifTrue: [ stream nextPutAll: '<<<' ]. - stream space ]. - SmaCCCompilationNotification new - messageText: 'Node creation'; - tag: stream contents; - signal -] - -{ #category : #'reduce actions' } -SmaCCRHS >> generateUnnamedSymbolWarningFor: problemIndex [ - | stream | - stream := WriteStream on: String new. - stream - nextPutAll: - 'Unnamed symbol in production. Without a variable name the value will be dropped from the parsed AST.'; - cr; - cr; - nextPutAll: self productionSymbol name; - nextPutAll: ' : '. - 1 to: self size do: - [ :i | - i == problemIndex - ifTrue: [ stream nextPutAll: '>>>' ]. - stream nextPutAll: (self at: i) name. - i == problemIndex - ifTrue: [ stream nextPutAll: '<<<' ]. - stream space ]. - SmaCCCompilationNotification new - messageText: 'Node creation'; - tag: stream contents; - signal -] - -{ #category : #testing } -SmaCCRHS >> hasNamedVariable [ - ^ variableNameMap notEmpty -] - -{ #category : #testing } -SmaCCRHS >> hasNodeClassDefinition [ - ^ self nodeClassDefinition notNil -] - -{ #category : #testing } -SmaCCRHS >> hasReduceAction [ - ^ reduceCode hasReduceAction -] - -{ #category : #comparing } -SmaCCRHS >> hash [ - ^ self class hash hashMultiply bitXor: collection hash -] - -{ #category : #variables } -SmaCCRHS >> indexOfVariable: aString [ - ^ (variableNameMap at: aString ifAbsent: [ ^ nil ]) first -] - -{ #category : #'initialize-release' } -SmaCCRHS >> initialize [ - super initialize. - collection := OrderedCollection new. - reduceCode := SmaCCDefaultReduceCode onRHS: self. - variableNameMap := Dictionary new -] - -{ #category : #testing } -SmaCCRHS >> locallyDefinesVariable: aString [ - ^ (self indexOfVariable: aString) notNil -] - -{ #category : #accessing } -SmaCCRHS >> modelTypes: anIdentitySet [ - ^ reduceCode modelTypes: anIdentitySet -] - -{ #category : #accessing } -SmaCCRHS >> nameLastItem: aString [ - (variableNameMap at: aString ifAbsentPut: [ OrderedCollection new ]) - add: collection size -] - -{ #category : #accessing } -SmaCCRHS >> nodeClassDefinition [ - ^ nodeClassDefinition -] - -{ #category : #accessing } -SmaCCRHS >> nodeClassDefinition: aSmaCCNodeClassDefinition [ - nodeClassDefinition := aSmaCCNodeClassDefinition -] - -{ #category : #printing } -SmaCCRHS >> printOn: aStream [ - ^ collection - do: [ :each | each printOn: aStream ] - separatedBy: [ aStream space ] -] - -{ #category : #accessing } -SmaCCRHS >> productionSymbol [ - ^ productionSymbol -] - -{ #category : #'reduce actions' } -SmaCCRHS >> reduceCode [ - ^ reduceCode -] - -{ #category : #'reduce actions' } -SmaCCRHS >> reduceCode: aSmaCCReduceCode [ - reduceCode := aSmaCCReduceCode -] - -{ #category : #'reduce actions' } -SmaCCRHS >> reduceCodeSource: aString [ - reduceCode := SmaCCSourceReduceCode onRHS: self source: aString -] - -{ #category : #testing } -SmaCCRHS >> returnsSingleVariable [ - ^ reduceCode returnsSingleVariable -] - -{ #category : #testing } -SmaCCRHS >> returnsVariableCollection [ - ^ reduceCode returnsVariableCollection -] - -{ #category : #accessing } -SmaCCRHS >> ruleNumber [ - ^ (productionSymbol ruleNumber bitShift: 10) - + (productionSymbol positionOf: self) -] - -{ #category : #accessing } -SmaCCRHS >> size [ - ^ collection size -] - -{ #category : #'initialize-release' } -SmaCCRHS >> symbol: aSmaCCNonTerminalSymbol [ - productionSymbol := aSmaCCNonTerminalSymbol -] - -{ #category : #accessing } -SmaCCRHS >> symbolsForVariableName: aString [ - | indices | - indices := variableNameMap at: aString ifAbsent: [ #() ]. - ^ indices collect: [ :i | self at: i ] -] - -{ #category : #private } -SmaCCRHS >> unnamedSymbolsDo: aBlock [ - self - variablesAndSymbolsDo: [ :var :each | - var isNil - ifTrue: [ aBlock value: each ] ] -] - -{ #category : #accessing } -SmaCCRHS >> variableDefinitions: aCollection [ - variableDefinitions := aCollection. - SmaCCVariableDefinition assignIndices: variableDefinitions -] - -{ #category : #private } -SmaCCRHS >> variableNameForIndex: anInteger [ - variableNameMap - keysAndValuesDo: [ :key :value | - (value includes: anInteger) - ifTrue: [ ^ key ] ]. - ^ nil -] - -{ #category : #private } -SmaCCRHS >> variableNames [ - ^ variableNameMap keys -] - -{ #category : #private } -SmaCCRHS >> variablesAndSymbolsDo: aBlock [ - collection - keysAndValuesDo: - [ :key :value | aBlock value: (self variableNameForIndex: key) value: value ] -] diff --git a/src/SmaCC_Development/SmaCCReduceAction.class.st b/src/SmaCC_Development/SmaCCReduceAction.class.st deleted file mode 100644 index 26ef51127..000000000 --- a/src/SmaCC_Development/SmaCCReduceAction.class.st +++ /dev/null @@ -1,43 +0,0 @@ -" -SmaCCReduceAction represents the LR reduce action. - -" -Class { - #name : #SmaCCReduceAction, - #superclass : #SmaCCPrimitiveAction, - #category : #'SmaCC_Development-Actions' -} - -{ #category : #accessing } -SmaCCReduceAction class >> id [ - ^ 2r10 -] - -{ #category : #'instance creation' } -SmaCCReduceAction class >> rhs: aSmaCCRHS [ - ^ self new - rhs: aSmaCCRHS; - yourself -] - -{ #category : #testing } -SmaCCReduceAction >> isReduce [ - ^ true -] - -{ #category : #merging } -SmaCCReduceAction >> mergeWith: aSmaCCAction prefer: aClass [ - aSmaCCAction isReduce - ifTrue: [ ^ self mergeWithReduceAction: aSmaCCAction ]. - ^ aSmaCCAction mergeWith: self prefer: aClass -] - -{ #category : #merging } -SmaCCReduceAction >> mergeWithReduceAction: aSmaCCAction [ - self = aSmaCCAction - ifTrue: [ ^ self ]. - ^ SmaCCAmbiguousAction new - addAction: self; - addAction: aSmaCCAction; - yourself -] diff --git a/src/SmaCC_Development/SmaCCReduceActionGenerator.class.st b/src/SmaCC_Development/SmaCCReduceActionGenerator.class.st deleted file mode 100644 index 34f5e9546..000000000 --- a/src/SmaCC_Development/SmaCCReduceActionGenerator.class.st +++ /dev/null @@ -1,181 +0,0 @@ -Class { - #name : #SmaCCReduceActionGenerator, - #superclass : #Object, - #instVars : [ - 'rhs', - 'index', - 'generator', - 'variableName', - 'currentIndex', - 'currentSymbol' - ], - #category : #'SmaCC_Development-Compiler' -} - -{ #category : #accessing } -SmaCCReduceActionGenerator class >> generate: aSmaCCRHS pullUp: anInteger on: aCodeGenerator [ - ^ self new generate: aSmaCCRHS pullUp: anInteger on: aCodeGenerator -] - -{ #category : #'reduction table' } -SmaCCReduceActionGenerator >> compileAddToVariable: aSmaCCVariableDefinition from: argument collection: isCollection [ - ^ aSmaCCVariableDefinition isCollection - ifTrue: - [ | selector var | - var := rhs nodeType - variableDefinitionNamed: aSmaCCVariableDefinition variableName. - selector := 'add'. - currentIndex < index - ifTrue: [ selector := selector , 'First' ]. - selector := selector - , - (var isBaseNodeType - ifTrue: [ 'Node' ] - ifFalse: [ var isBaseTokenType - ifTrue: [ 'Token' ] - ifFalse: [ 'Object' ] ]). - isCollection - ifTrue: [ selector := selector , 's' ]. - selector := (selector , ':to:') asSymbol. - generator - send: selector - to: 'result' - with: argument - with: (generator send: var getterMethodName to: 'result') ] - ifFalse: - [ generator - send: aSmaCCVariableDefinition setterMethodName - to: 'result' - with: argument ] -] - -{ #category : #'reduction table' } -SmaCCReduceActionGenerator >> connectChild [ - | variableDefinition argument symbol isCollection | - variableDefinition := rhs nodeType - variableDefinitionNamed: variableName. - argument := generator - cast: (generator argumentIndex: currentIndex) - to: variableDefinition baseType name. - isCollection := false. - symbol := rhs at: currentIndex. - symbol returnsSingleVariable - ifTrue: [ isCollection := symbol isCollection: symbol variableName ]. - ^ self - compileAddToVariable: variableDefinition - from: argument - collection: isCollection -] - -{ #category : #'reduction table' } -SmaCCReduceActionGenerator >> generate: aSmaCCRHS pullUp: anInteger on: aCodeGenerator [ - rhs := aSmaCCRHS. - index := anInteger. - generator := aCodeGenerator. - rhs collection - keysAndValuesDo: - [ :i :each | - currentIndex := i. - currentSymbol := each. - index ~= currentIndex - ifTrue: - [ variableName := rhs variableNameForIndex: currentIndex. - variableName notNil - ifTrue: - [ currentSymbol returnsVariableCollection - ifTrue: [ rhs - generateNamedVariableCollectionWarningFor: currentIndex ]. - generator nextPutStatement: self connectChild ] - ifFalse: [ self pullUpChildren ] ] ] -] - -{ #category : #'reduction table' } -SmaCCReduceActionGenerator >> getSubIndex: subIndex ofType: collectionType [ - ^ generator - cast: (generator argumentIndex: currentIndex subIndex: subIndex) - to: collectionType -] - -{ #category : #'reduction table' } -SmaCCReduceActionGenerator >> pullUpChildren [ - currentSymbol returnsVariableCollection - ifTrue: [ ^ self pullUpVariableArray ]. - currentSymbol returnsSingleVariable - ifTrue: [ ^ self pullUpVariable ]. - currentSymbol modelType = (generator model classFor: nil class) - ifFalse: [ rhs generateUnnamedSymbolWarningFor: currentIndex ] -] - -{ #category : #'reduction table' } -SmaCCReduceActionGenerator >> pullUpVariable [ - currentSymbol variableDefinitions - keysAndValuesDo: - [ :subIndex :var | - generator - nextPutStatement: - (var isCollection - ifTrue: - [ self - compileAddToVariable: var - from: - (generator - cast: (generator argumentIndex: currentIndex) - to: generator collectionType) - collection: true ] - ifFalse: - [ | nodesVariable | - nodesVariable := rhs nodeType - variableDefinitionNamed: var variableName. - nodesVariable isCollection - ifTrue: - [ self - compileAddToVariable: nodesVariable - from: - (generator - cast: (generator argumentIndex: currentIndex) - to: nodesVariable type name) - collection: false ] - ifFalse: - [ generator - send: nodesVariable setterMethodName - to: 'result' - with: - (generator - cast: (generator argumentIndex: currentIndex) - to: nodesVariable type name) ] ]) ] -] - -{ #category : #'reduction table' } -SmaCCReduceActionGenerator >> pullUpVariableArray [ - currentSymbol variableDefinitions - keysAndValuesDo: - [ :subIndex :var | - generator - nextPutStatement: - (var isCollection - ifTrue: - [ | collectionType | - collectionType := generator collectionType. - self - compileAddToVariable: var - from: (self getSubIndex: subIndex ofType: collectionType) - collection: true ] - ifFalse: - [ | nodesVariable | - nodesVariable := rhs nodeType - variableDefinitionNamed: var variableName. - nodesVariable isCollection - ifTrue: - [ self - compileAddToVariable: nodesVariable - from: (self getSubIndex: subIndex ofType: nodesVariable type name) - collection: false ] - ifFalse: - [ generator - send: nodesVariable setterMethodName - to: 'result' - with: - (generator - cast: (generator argumentIndex: currentIndex subIndex: subIndex) - to: nodesVariable type name) ] ]) ] -] diff --git a/src/SmaCC_Development/SmaCCReduceCode.class.st b/src/SmaCC_Development/SmaCCReduceCode.class.st deleted file mode 100644 index c2e531f53..000000000 --- a/src/SmaCC_Development/SmaCCReduceCode.class.st +++ /dev/null @@ -1,148 +0,0 @@ -" -SmaCCReduceCode represents the code to be run when we match the rhs. - -Subclasses must implement the following messages: - accessing - source - returns the code to be run after matching the rhs - private - basicModelTypes: - returns the types the source can return (e.g., OrderedCollection, SmaCCToken, etc.) - -Instance Variables - cachedTypes the type of object that is returned when this reduce action is run - rhs the RHS that contains this reduce code - -" -Class { - #name : #SmaCCReduceCode, - #superclass : #Object, - #instVars : [ - 'rhs', - 'cachedTypes' - ], - #category : #'SmaCC_Development-Compilation Model' -} - -{ #category : #'instance creation' } -SmaCCReduceCode class >> onRHS: aSmaCCRHS [ - ^ self new - rhs: aSmaCCRHS; - yourself -] - -{ #category : #comparing } -SmaCCReduceCode >> = anObject [ - ^ self class = anObject class and: [ self rhs == anObject rhs ] -] - -{ #category : #private } -SmaCCReduceCode >> baseClassType [ - ^ rhs grammar rootDefinition -] - -{ #category : #private } -SmaCCReduceCode >> basicModelTypes: aSet [ - self subclassResponsibility -] - -{ #category : #private } -SmaCCReduceCode >> basicModelTypes: aSet forIndex: index [ - ^ (rhs at: index) modelTypes: aSet -] - -{ #category : #accessing } -SmaCCReduceCode >> codeGenerator [ - ^ rhs grammar codeGenerator -] - -{ #category : #testing } -SmaCCReduceCode >> hasReduceAction [ - ^ true -] - -{ #category : #comparing } -SmaCCReduceCode >> hash [ - ^ self class hash bitXor: self rhs hash -] - -{ #category : #testing } -SmaCCReduceCode >> isImmediate [ - ^ false -] - -{ #category : #accessing } -SmaCCReduceCode >> model [ - ^ rhs model -] - -{ #category : #'accessing-types' } -SmaCCReduceCode >> modelTypes: anIdentitySet [ - cachedTypes isNil - ifTrue: [ cachedTypes := self basicModelTypes: anIdentitySet ]. - ^ cachedTypes -] - -{ #category : #'accessing-types' } -SmaCCReduceCode >> nodeType: anIdentitySet [ - | index | - index := self returnedNodeIndex. - ^ index notNil - ifTrue: [ (rhs at: index) nodeType: anIdentitySet ] - ifFalse: [ self baseClassType ] -] - -{ #category : #'reduce actions' } -SmaCCReduceCode >> reduceExpressionParseTree [ - ^ RBParser parseExpression: self source -] - -{ #category : #private } -SmaCCReduceCode >> returnedNodeIndex [ - ^ self returnedNodeIndexFor: self reduceExpressionParseTree -] - -{ #category : #private } -SmaCCReduceCode >> returnedNodeIndexFor: parseTree [ - | index | - parseTree isCascade - ifTrue: [ ^ self returnedNodeIndexFor: parseTree messages last ]. - (parseTree isMessage and: [ parseTree selector == #yourself ]) - ifTrue: [ ^ self returnedNodeIndexFor: parseTree receiver ]. - (parseTree isVariable or: [ parseTree isLiteralNode ]) - ifFalse: [ ^ nil ]. - parseTree isVariable - ifTrue: [ index := rhs indexOfVariable: parseTree name. - (index between: 1 and: rhs size) - ifTrue: [ ^ index ] ]. - (parseTree isLiteralNode and: [ parseTree value isString ]) - ifFalse: [ ^ nil ]. - (parseTree value allSatisfy: [ :each | each isDigit ]) - ifTrue: [ index := Integer readFrom: (ReadStream on: parseTree value). - (index between: 1 and: rhs size) - ifTrue: [ ^ index ] ]. - ^ nil -] - -{ #category : #testing } -SmaCCReduceCode >> returnsSingleVariable [ - ^ false -] - -{ #category : #testing } -SmaCCReduceCode >> returnsVariableCollection [ - ^ false -] - -{ #category : #accessing } -SmaCCReduceCode >> rhs [ - ^ rhs -] - -{ #category : #'initialize-release' } -SmaCCReduceCode >> rhs: aSmaCCRHS [ - rhs := aSmaCCRHS -] - -{ #category : #accessing } -SmaCCReduceCode >> source [ - ^ self subclassResponsibility -] diff --git a/src/SmaCC_Development/SmaCCReferenceRENode.class.st b/src/SmaCC_Development/SmaCCReferenceRENode.class.st deleted file mode 100644 index 8fbf3b30b..000000000 --- a/src/SmaCC_Development/SmaCCReferenceRENode.class.st +++ /dev/null @@ -1,46 +0,0 @@ -Class { - #name : #SmaCCReferenceRENode, - #superclass : #SmaCCRegularExpressionNode, - #instVars : [ - 'regexNode', - 'creationBlock' - ], - #category : #'SmaCC_Development-Regular Expressions' -} - -{ #category : #'instance creation' } -SmaCCReferenceRENode class >> creationBlock: aBlock [ - ^ self new - creationBlock: aBlock; - yourself -] - -{ #category : #private } -SmaCCReferenceRENode >> asNFAStartingWith: aSmaCCNode [ - ^ self regexNode asNFAStartingWith: aSmaCCNode -] - -{ #category : #'initialize-release' } -SmaCCReferenceRENode >> creationBlock: aBlock [ - creationBlock := aBlock -] - -{ #category : #private } -SmaCCReferenceRENode >> possibleMatchesDo: aBlock on: aStream [ - ^ self regexNode possibleMatchesDo: aBlock on: aStream -] - -{ #category : #accessing } -SmaCCReferenceRENode >> possibleMatchesSize [ - ^ self regexNode possibleMatchesSize -] - -{ #category : #private } -SmaCCReferenceRENode >> regexNode [ - regexNode isNil - ifTrue: [ regexNode := creationBlock value copy. - regexNode action: self action. - regexNode position: self position. - regexNode addStates: self states ]. - ^ regexNode -] diff --git a/src/SmaCC_Development/SmaCCRegexNode.extension.st b/src/SmaCC_Development/SmaCCRegexNode.extension.st deleted file mode 100644 index 38f00cc1a..000000000 --- a/src/SmaCC_Development/SmaCCRegexNode.extension.st +++ /dev/null @@ -1,115 +0,0 @@ -Extension { #name : #SmaCCRegexNode } - -{ #category : #'*SmaCC_Development' } -SmaCCRegexNode >> allCharacters [ - ^ SmaCCGrammar allCharacters -] - -{ #category : #'*SmaCC_Development' } -SmaCCRegexNode >> asRegularExpression [ - ^ self subclassResponsibility -] - -{ #category : #'*SmaCC_Development' } -SmaCCRegexNode >> carriageReturnString [ - ^ SmaCCCharacterSet with: (Character value: 13) -] - -{ #category : #'*SmaCC_Development' } -SmaCCRegexNode >> formFeedString [ - ^ SmaCCCharacterSet with: (Character value: 12) -] - -{ #category : #'*SmaCC_Development' } -SmaCCRegexNode >> hexStringFrom: aStream [ - ^ SmaCCCharacterSet with: (Character value: (self hexValueFrom: aStream)) -] - -{ #category : #'*SmaCC_Development' } -SmaCCRegexNode >> hexValueFrom: aStream [ - | char value count | - count := value := 0. - [ aStream atEnd not - and: [ count < 4 - and: [ char := aStream peek. - (char between: $0 and: $9) or: [ (char between: $A and: $F) or: [ char between: $a and: $f ] ] ] ] ] - whileTrue: [ count := count + 1. - value := value * 16 + aStream next digitValue ]. - ^ value -] - -{ #category : #'*SmaCC_Development' } -SmaCCRegexNode >> isDigit: each [ - ^ each between: $0 and: $9 -] - -{ #category : #'*SmaCC_Development' } -SmaCCRegexNode >> isLetterOrDigit: each [ - ^ (each between: $a and: $z) or: [ (each between: $A and: $Z) or: [ (self isDigit: each) or: [ each == $_ ] ] ] -] - -{ #category : #'*SmaCC_Development' } -SmaCCRegexNode >> isWhitespace: each [ - ^ self whitespaceValues includes: each asInteger -] - -{ #category : #'*SmaCC_Development' } -SmaCCRegexNode >> newlineString [ - ^ SmaCCCharacterSet with: (Character value: 10) -] - -{ #category : #'*SmaCC_Development' } -SmaCCRegexNode >> nodeFor: aStream [ - | block char | - block := nil. - char := aStream next. - char == $f - ifTrue: [ ^ SmaCCCharacterRENode characters: self formFeedString ]. - char == $n - ifTrue: [ ^ SmaCCCharacterRENode characters: self newlineString ]. - char == $r - ifTrue: [ ^ SmaCCCharacterRENode characters: self carriageReturnString ]. - char == $t - ifTrue: [ ^ SmaCCCharacterRENode characters: self tabString ]. - char == $v - ifTrue: [ ^ SmaCCCharacterRENode characters: self verticalTabString ]. - char == $c - ifTrue: [ ^ SmaCCCharacterRENode characters: (SmaCCCharacterSet with: (Character value: aStream next asInteger - $A asInteger)) ]. - char == $x - ifTrue: [ ^ SmaCCCharacterRENode characters: (self hexStringFrom: aStream) ]. - char == $d - ifTrue: [ block := [ :each | self isDigit: each ] ]. - char == $D - ifTrue: [ block := [ :each | (self isDigit: each) not ] ]. - char == $s - ifTrue: [ block := [ :each | self isWhitespace: each ] ]. - char == $S - ifTrue: [ block := [ :each | (self isWhitespace: each) not ] ]. - char == $w - ifTrue: [ block := [ :each | self isLetterOrDigit: each ] ]. - char == $W - ifTrue: [ block := [ :each | (self isLetterOrDigit: each) not ] ]. - block isNil - ifTrue: [ ^ SmaCCCharacterRENode characters: (SmaCCCharacterSet with: char) ]. - ^ SmaCCCharacterRENode characters: (self allCharacters select: block) -] - -{ #category : #'*SmaCC_Development' } -SmaCCRegexNode >> regularExpression [ - ^ self attributeNamed: #regularExpression ifAbsentPut: [ self asRegularExpression ] -] - -{ #category : #'*SmaCC_Development' } -SmaCCRegexNode >> tabString [ - ^ SmaCCCharacterSet withAll: ' ' -] - -{ #category : #'*SmaCC_Development' } -SmaCCRegexNode >> verticalTabString [ - ^ SmaCCCharacterSet with: (Character value: 11) -] - -{ #category : #'*SmaCC_Development' } -SmaCCRegexNode >> whitespaceValues [ - ^ #[9 10 11 12 13 32] -] diff --git a/src/SmaCC_Development/SmaCCRegularExpressionNode.class.st b/src/SmaCC_Development/SmaCCRegularExpressionNode.class.st deleted file mode 100644 index d01eebfa1..000000000 --- a/src/SmaCC_Development/SmaCCRegularExpressionNode.class.st +++ /dev/null @@ -1,176 +0,0 @@ -" -SmaCCRegularExpressionNode is an abstract class that is used during the construction of the scanner. When the scanner definition is parsed, it creates the SmaCCRegularExpressionNode objects. These objects are then converted to an NFA graph that is converted to a DFA that is compiled. - -Subclasses must implement the following messages: - accessing - possibleMatchesSize - private - asNFAStartingWith: - possibleMatchesDo:on: - -Instance Variables: - action this is a symbol that is performed on the scanner, an integer for the token id, or nil if we can't accept a token at this position - position the position in the scanner definition for this RE -- this is only used for overlapping tokens. Tokens that are defined earlier in the definition are preferred over later ones (except for those used in the parser's definition) - states the states where this RE is valid - -" -Class { - #name : #SmaCCRegularExpressionNode, - #superclass : #Object, - #instVars : [ - 'action', - 'position', - 'states' - ], - #category : #'SmaCC_Development-Regular Expressions' -} - -{ #category : #constructing } -SmaCCRegularExpressionNode >> , aSmaCCRegularExpressionNode [ - ^ SmaCCSequenceRENode - nodes: (OrderedCollection with: self with: aSmaCCRegularExpressionNode) -] - -{ #category : #accessing } -SmaCCRegularExpressionNode >> action [ - ^ action -] - -{ #category : #'initialize-release' } -SmaCCRegularExpressionNode >> action: aString [ - action := aString -] - -{ #category : #'accessing-states' } -SmaCCRegularExpressionNode >> addState: aSymbol [ - states add: aSymbol -] - -{ #category : #private } -SmaCCRegularExpressionNode >> addStateTransitionsTo: aSmaCCNode [ - | endNode | - states isEmpty - ifTrue: [ ^ aSmaCCNode ]. - endNode := SmaCCNode new. - aSmaCCNode - addEdgeTo: endNode - onStates: states asSortedCollection asArray. - ^ endNode -] - -{ #category : #'accessing-states' } -SmaCCRegularExpressionNode >> addStates: aCollection [ - states addAll: aCollection -] - -{ #category : #converting } -SmaCCRegularExpressionNode >> asDFA [ - | startNode | - startNode := self asNFA. - ^ startNode asDFA -] - -{ #category : #converting } -SmaCCRegularExpressionNode >> asNFA [ - | startNode | - startNode := SmaCCNode new. - self asNFAStartingWith: startNode. - ^ startNode -] - -{ #category : #private } -SmaCCRegularExpressionNode >> asNFAStartingWith: aSmaCCNode [ - ^ self subclassResponsibility -] - -{ #category : #'initialize-release' } -SmaCCRegularExpressionNode >> initialize [ - super initialize. - states := Set new -] - -{ #category : #testing } -SmaCCRegularExpressionNode >> isKeywordLiteral [ - ^ self possibleMatchesSize < 50 - and: - [ self - possibleMatchesDo: [ :each | - each size > 1 - ifTrue: [ ^ true ] ]. - false ] -] - -{ #category : #constructing } -SmaCCRegularExpressionNode >> makeCaseInsensitive [ - -] - -{ #category : #accessing } -SmaCCRegularExpressionNode >> position [ - ^ position -] - -{ #category : #'initialize-release' } -SmaCCRegularExpressionNode >> position: anInteger [ - position := anInteger -] - -{ #category : #accessing } -SmaCCRegularExpressionNode >> possibleMatches [ - | matches | - matches := OrderedCollection new. - self possibleMatchesDo: [ :each | matches add: each ]. - ^ matches -] - -{ #category : #accessing } -SmaCCRegularExpressionNode >> possibleMatchesDo: aBlock [ - | stream | - stream := WriteStream with: String new. - self possibleMatchesDo: [ aBlock value: stream contents ] on: stream -] - -{ #category : #private } -SmaCCRegularExpressionNode >> possibleMatchesDo: aBlock on: aStream [ - self subclassResponsibility -] - -{ #category : #accessing } -SmaCCRegularExpressionNode >> possibleMatchesSize [ - ^ self subclassResponsibility -] - -{ #category : #copying } -SmaCCRegularExpressionNode >> postCopy [ - super postCopy. - states := Set new -] - -{ #category : #constructing } -SmaCCRegularExpressionNode >> repeat [ - ^ SmaCCRepeatingRENode component: self -] - -{ #category : #constructing } -SmaCCRegularExpressionNode >> repeatFor: minimum to: maximum [ - ^ SmaCCRepeatingRENode - component: self - minimum: minimum - maximum: maximum -] - -{ #category : #constructing } -SmaCCRegularExpressionNode >> repeatForAtLeast: minimum [ - ^ SmaCCRepeatingRENode component: self minimum: minimum -] - -{ #category : #'accessing-states' } -SmaCCRegularExpressionNode >> states [ - ^ states -] - -{ #category : #constructing } -SmaCCRegularExpressionNode >> | aSmaCCRegularExpressionNode [ - ^ SmaCCOrRENode - nodes: (OrderedCollection with: self with: aSmaCCRegularExpressionNode) -] diff --git a/src/SmaCC_Development/SmaCCRejectAction.class.st b/src/SmaCC_Development/SmaCCRejectAction.class.st deleted file mode 100644 index 9f760bc01..000000000 --- a/src/SmaCC_Development/SmaCCRejectAction.class.st +++ /dev/null @@ -1,25 +0,0 @@ -" -SmaCCRejectAction represents the LR reject action. - - -" -Class { - #name : #SmaCCRejectAction, - #superclass : #SmaCCPrimitiveAction, - #category : #'SmaCC_Development-Actions' -} - -{ #category : #accessing } -SmaCCRejectAction class >> id [ - ^ 2r11 -] - -{ #category : #testing } -SmaCCRejectAction >> isReject [ - ^ true -] - -{ #category : #merging } -SmaCCRejectAction >> mergeWith: aSmaCCAction prefer: aClass [ - ^ aSmaCCAction -] diff --git a/src/SmaCC_Development/SmaCCRepeatRegexNode.extension.st b/src/SmaCC_Development/SmaCCRepeatRegexNode.extension.st deleted file mode 100644 index e6040819d..000000000 --- a/src/SmaCC_Development/SmaCCRepeatRegexNode.extension.st +++ /dev/null @@ -1,36 +0,0 @@ -Extension { #name : #SmaCCRepeatRegexNode } - -{ #category : #'*SmaCC_Development' } -SmaCCRepeatRegexNode >> asRegularExpression [ - | re | - re := self regex regularExpression. - count value = '*' - ifTrue: [ ^ re repeat ]. - count value = '+' - ifTrue: [ ^ re repeatForAtLeast: 1 ]. - count value = '?' - ifTrue: [ ^ re repeatFor: 0 to: 1 ]. - count value first = ${ - ifTrue: [ | readStream start stop | - readStream := ReadStream on: (count value copyFrom: 2 to: count value size - 1). - start := readStream upTo: $,. - stop := readStream upToEnd. - ^ re - repeatFor: - (start isEmpty - ifTrue: [ 0 ] - ifFalse: [ start asNumber ]) - to: - (stop isEmpty - ifTrue: [ 1 bitShift: 31 ] - ifFalse: [ stop asNumber ]) ]. - self reportCountError -] - -{ #category : #'*SmaCC_Development' } -SmaCCRepeatRegexNode >> reportCountError [ - SmaCCParserError new - messageText: 'Unknown repeat count'; - tag: count; - signal -] diff --git a/src/SmaCC_Development/SmaCCRepeatingRENode.class.st b/src/SmaCC_Development/SmaCCRepeatingRENode.class.st deleted file mode 100644 index b700540b8..000000000 --- a/src/SmaCC_Development/SmaCCRepeatingRENode.class.st +++ /dev/null @@ -1,132 +0,0 @@ -" -SmaCCRepeatingRENode is a SmaCCRegularExpressionNode that matches a particular RE node multiple times. - -Instance Variables: - maximumMatches the maximum amount of matches (or #finiteInfinity if we can repeat unlimited number of times) - minimumMatches the minimum amount of matches we must accept - node the node we are matching -" -Class { - #name : #SmaCCRepeatingRENode, - #superclass : #SmaCCRegularExpressionNode, - #instVars : [ - 'node', - 'minimumMatches', - 'maximumMatches' - ], - #category : #'SmaCC_Development-Regular Expressions' -} - -{ #category : #'instance creation' } -SmaCCRepeatingRENode class >> component: aSmaCCRegularExpressionNode [ - ^ self component: aSmaCCRegularExpressionNode minimum: 0 -] - -{ #category : #'instance creation' } -SmaCCRepeatingRENode class >> component: aSmaCCRegularExpressionNode minimum: anInteger [ - ^ self - component: aSmaCCRegularExpressionNode - minimum: anInteger - maximum: self finiteInfinity -] - -{ #category : #'instance creation' } -SmaCCRepeatingRENode class >> component: aSmaCCRegularExpressionNode minimum: minInteger maximum: maxInteger [ - ^ self new - component: aSmaCCRegularExpressionNode - minimum: minInteger - maximum: maxInteger; - yourself -] - -{ #category : #constants } -SmaCCRepeatingRENode class >> finiteInfinity [ - "The number that we consider to be 'infinite'" - - ^ 2147483648 -] - -{ #category : #private } -SmaCCRepeatingRENode >> asNFAStartingWith: aSmaCCNode [ - | endNode start | - start := SmaCCNode new. - (self addStateTransitionsTo: aSmaCCNode) addEdgeTo: start. - endNode := SmaCCNode new. - endNode action: action. - minimumMatches timesRepeat: [ start := node asNFAStartingWith: start ]. - start addEdgeTo: endNode. - maximumMatches < self class finiteInfinity - ifTrue: [ maximumMatches - minimumMatches - timesRepeat: [ start := node asNFAStartingWith: start. - start addEdgeTo: endNode ] ] - ifFalse: [ (node asNFAStartingWith: start) addEdgeTo: start ]. - ^ endNode -] - -{ #category : #'initialize-release' } -SmaCCRepeatingRENode >> component: aSmaCCRegularExpressionNode minimum: minInteger maximum: maxInteger [ - node := aSmaCCRegularExpressionNode. - minimumMatches := minInteger. - maximumMatches := maxInteger -] - -{ #category : #constructing } -SmaCCRepeatingRENode >> makeCaseInsensitive [ - node makeCaseInsensitive -] - -{ #category : #private } -SmaCCRepeatingRENode >> possibleMatchesDo: aBlock on: aStream [ - self possibleMatchesDo: aBlock on: aStream startingAt: 0 -] - -{ #category : #private } -SmaCCRepeatingRENode >> possibleMatchesDo: aBlock on: aStream startingAt: anInteger [ - (anInteger between: minimumMatches and: maximumMatches) - ifTrue: [ aBlock value ]. - anInteger < maximumMatches - ifTrue: - [ node - possibleMatchesDo: - [ self possibleMatchesDo: aBlock on: aStream startingAt: anInteger + 1 ] - on: aStream ] -] - -{ #category : #accessing } -SmaCCRepeatingRENode >> possibleMatchesSize [ - "This does not return the exact number for expressions with over 50 potential matches since we don't need that detail and computing the exact value may be expensive." - - | baseSize | - baseSize := node possibleMatchesSize. - baseSize = 1 - ifTrue: [ ^ node possibleMatchesSize - * (maximumMatches - minimumMatches + 1) ]. - maximumMatches >= 6 - ifTrue: [ ^ SmallInteger maxVal ]. - ^ (minimumMatches to: maximumMatches) - inject: 0 - into: [ :sum :each | sum + (baseSize raisedTo: each) ] -] - -{ #category : #printing } -SmaCCRepeatingRENode >> printOn: aStream [ - aStream nextPut: $(. - node printOn: aStream. - aStream nextPut: $). - maximumMatches = (1 bitShift: 31) - ifTrue: - [ minimumMatches = 0 - ifTrue: [ ^ aStream nextPut: $* ]. - minimumMatches = 1 - ifTrue: [ ^ aStream nextPut: $+ ]. - ^ aStream - nextPut: ${; - nextPutAll: minimumMatches printString; - nextPutAll: ',}' ]. - aStream - nextPut: ${; - nextPutAll: minimumMatches printString; - nextPut: $,; - nextPutAll: maximumMatches printString; - nextPut: $} -] diff --git a/src/SmaCC_Development/SmaCCScannerCompiler.class.st b/src/SmaCC_Development/SmaCCScannerCompiler.class.st deleted file mode 100644 index c1af52734..000000000 --- a/src/SmaCC_Development/SmaCCScannerCompiler.class.st +++ /dev/null @@ -1,216 +0,0 @@ -Class { - #name : #SmaCCScannerCompiler, - #superclass : #Object, - #instVars : [ - 'grammar', - 'codeGenerator' - ], - #category : #'SmaCC_Development-Compiler' -} - -{ #category : #'regular expression construction' } -SmaCCScannerCompiler >> addActions [ - self symbols - keysAndValuesDo: - [ :index :each | - each regularExpression - ifNotNil: [ :eachRegex | eachRegex action: index ] ] -] - -{ #category : #'regular expression construction' } -SmaCCScannerCompiler >> addActionsFrom: aRegularExpression to: aKeywordMap at: states [ - ^ states - do: - [ :state | - state ~= aRegularExpression action - ifTrue: - [ | keywordData | - keywordData := grammar hasMultipleScannerStates - ifTrue: - [ Array - with: aRegularExpression action - with: aRegularExpression states asSortedCollection asArray ] - ifFalse: [ aRegularExpression action ]. - aRegularExpression - possibleMatchesDo: - [ :string | - (aKeywordMap at: state ifAbsentPut: [ Dictionary new ]) - at: string - put: keywordData ] ] ] -] - -{ #category : #'regular expression construction' } -SmaCCScannerCompiler >> addNormalSymbols [ - grammar symbols: (self symbols asSortedCollection: [ :a :b | a < b ]) -] - -{ #category : #'regular expression construction' } -SmaCCScannerCompiler >> addSpecialSymbols [ - grammar tokens - keysDo: - [ :each | - (codeGenerator scannerActionFor: each) notNil - ifTrue: [ grammar terminalSymbolNamed: each ] ] -] - -{ #category : #'regular expression construction' } -SmaCCScannerCompiler >> addSpecificREsWithoutActionsTo: aRegularExpression [ - | dfa regex | - regex := aRegularExpression. - dfa := regex isNil - ifTrue: [ nil ] - ifFalse: [ regex asDFA ]. - self - specificRegularExpressionsDo: - [ :each | - | actions | - actions := dfa isNil - ifTrue: [ nil ] - ifFalse: [ dfa actionForSpecificRegularExpression: each ]. - actions isNil - ifTrue: [ regex := regex isNil - ifTrue: [ each ] - ifFalse: [ regex | each ] ] ]. - ^ regex -] - -{ #category : #'initialize-release' } -SmaCCScannerCompiler >> codeGenerator: aSmaCCCodeGenerator [ - codeGenerator := aSmaCCCodeGenerator -] - -{ #category : #'regular expression construction' } -SmaCCScannerCompiler >> combinedGeneralRegexes [ - | combinedRegex | - combinedRegex := nil. - self - generalRegularExpressionsDo: - [ :each | - combinedRegex := combinedRegex isNil - ifTrue: [ each ] - ifFalse: [ combinedRegex | each ] ]. - ^ combinedRegex -] - -{ #category : #'regular expression construction' } -SmaCCScannerCompiler >> combinedRegexes [ - | combinedRegex | - combinedRegex := nil. - self - regularExpressionsDo: [ :each | - combinedRegex := combinedRegex isNil - ifTrue: [ each ] - ifFalse: [ combinedRegex | each ] ]. - ^ combinedRegex -] - -{ #category : #'compiling-scanner' } -SmaCCScannerCompiler >> compileMethodsFor: regex [ - | keywordmap dfa selectorMap | - dfa := regex asDFA. - selectorMap := self computeSelectorMap. - keywordmap := self computeKeywordMapFor: dfa. - codeGenerator selectorMap: selectorMap. - codeGenerator compileKeywordInitializerUsing: keywordmap. - codeGenerator compileNode: dfa. - codeGenerator - compileEmptySymbolTokenId: (self symbols indexOf: grammar emptySymbol). - codeGenerator - compileErrorSymbolTokenId: (self symbols indexOf: grammar errorSymbol). - codeGenerator compileIgnoreCaseMethods -] - -{ #category : #'compiling-scanner' } -SmaCCScannerCompiler >> compileScanner [ - | regex | - regex := self createRegex. - self compileTokenIdMethods. - self compileMethodsFor: regex -] - -{ #category : #'compiling-scanner' } -SmaCCScannerCompiler >> compileTokenIdMethods [ - (self symbols select: [ :each | each createIdMethod ]) - do: - [ :each | - codeGenerator - compileTokenIdMethodNamed: each safeMethodName - withId: (self symbols indexOf: each) ] -] - -{ #category : #'regular expression construction' } -SmaCCScannerCompiler >> computeKeywordMapFor: dfa [ - | keywordmap | - keywordmap := Dictionary new. - self - specificRegularExpressionsDo: - [ :each | - | actions | - actions := dfa actionForSpecificRegularExpression: each. - actions isNil - ifFalse: - [ self addActionsFrom: each to: keywordmap at: actions ] ]. - ^ keywordmap -] - -{ #category : #'regular expression construction' } -SmaCCScannerCompiler >> computeSelectorMap [ - | selectorMap | - selectorMap := Dictionary new. - self symbols - keysAndValuesDo: - [ :index :each | - (codeGenerator scannerActionFor: each name) - ifNotNil: [ :selector | selectorMap at: index put: selector ] ]. - ^ selectorMap -] - -{ #category : #'compiling-scanner' } -SmaCCScannerCompiler >> createFullRegex [ - self updateSymbolsAndActions. - ^ self combinedRegexes -] - -{ #category : #'compiling-scanner' } -SmaCCScannerCompiler >> createRegex [ - self updateSymbolsAndActions. - ^ self addSpecificREsWithoutActionsTo: self combinedGeneralRegexes -] - -{ #category : #'regular expression construction' } -SmaCCScannerCompiler >> generalRegularExpressionsDo: aBlock [ - self - regularExpressionsDo: [ :each | - each isKeywordLiteral - ifFalse: [ aBlock value: each ] ] -] - -{ #category : #'initialize-release' } -SmaCCScannerCompiler >> grammar: aGrammar [ - grammar := aGrammar -] - -{ #category : #'compiling-scanner' } -SmaCCScannerCompiler >> regularExpressionsDo: aBlock [ - self symbols do: [ :each | each regularExpression ifNotNil: aBlock ] -] - -{ #category : #'regular expression construction' } -SmaCCScannerCompiler >> specificRegularExpressionsDo: aBlock [ - self - regularExpressionsDo: [ :each | - each isKeywordLiteral - ifTrue: [ aBlock value: each ] ] -] - -{ #category : #accessing } -SmaCCScannerCompiler >> symbols [ - ^ grammar symbols -] - -{ #category : #'compiling-scanner' } -SmaCCScannerCompiler >> updateSymbolsAndActions [ - self addSpecialSymbols. - self addNormalSymbols. - self addActions -] diff --git a/src/SmaCC_Development/SmaCCScannerDefinition.class.st b/src/SmaCC_Development/SmaCCScannerDefinition.class.st deleted file mode 100644 index 3cba04c40..000000000 --- a/src/SmaCC_Development/SmaCCScannerDefinition.class.st +++ /dev/null @@ -1,78 +0,0 @@ -Class { - #name : #SmaCCScannerDefinition, - #superclass : #Object, - #instVars : [ - 'tokens', - 'states', - 'excludeStates' - ], - #category : #'SmaCC_Development-Model' -} - -{ #category : #accessing } -SmaCCScannerDefinition >> addExcludeState: aSymbol [ - excludeStates add: aSymbol. - self addState: aSymbol -] - -{ #category : #accessing } -SmaCCScannerDefinition >> addState: aSymbol [ - states add: aSymbol -] - -{ #category : #accessing } -SmaCCScannerDefinition >> addToken: aSmaCCRENode withName: aString [ - tokens at: aString put: aSmaCCRENode -] - -{ #category : #accessing } -SmaCCScannerDefinition >> defaultState [ - ^ #default -] - -{ #category : #testing } -SmaCCScannerDefinition >> includesTokenNamed: aString [ - ^ tokens includesKey: aString -] - -{ #category : #'initialize-release' } -SmaCCScannerDefinition >> initialize [ - super initialize. - tokens := Dictionary new. - states := Set with: self defaultState. - excludeStates := Set new -] - -{ #category : #testing } -SmaCCScannerDefinition >> isExcludeState: aSymbol [ - ^ excludeStates includes: aSymbol -] - -{ #category : #accessing } -SmaCCScannerDefinition >> nonExcludeStates [ - | nonExcludeStates | - nonExcludeStates := states - reject: [ :each | self isExcludeState: each ]. - nonExcludeStates add: self defaultState. - ^ nonExcludeStates -] - -{ #category : #accessing } -SmaCCScannerDefinition >> states [ - ^ states -] - -{ #category : #accessing } -SmaCCScannerDefinition >> tokenNamed: aString [ - ^ tokens at: aString -] - -{ #category : #accessing } -SmaCCScannerDefinition >> tokenNamed: aString ifAbsentPut: aBlock [ - ^ tokens at: aString ifAbsentPut: aBlock -] - -{ #category : #accessing } -SmaCCScannerDefinition >> tokens [ - ^ tokens -] diff --git a/src/SmaCC_Development/SmaCCSequenceRENode.class.st b/src/SmaCC_Development/SmaCCSequenceRENode.class.st deleted file mode 100644 index 5bf86011b..000000000 --- a/src/SmaCC_Development/SmaCCSequenceRENode.class.st +++ /dev/null @@ -1,92 +0,0 @@ -" -SmaCCSequenceRENode is a SmaCCRegularExpressionNode that matches a sequence of other RE nodes. - -Instance Variables: - nodes an ordered list of nodes to match - - -" -Class { - #name : #SmaCCSequenceRENode, - #superclass : #SmaCCRegularExpressionNode, - #instVars : [ - 'nodes' - ], - #category : #'SmaCC_Development-Regular Expressions' -} - -{ #category : #'instance creation' } -SmaCCSequenceRENode class >> nodes: aCollection [ - ^ self new - nodes: aCollection; - yourself -] - -{ #category : #constructing } -SmaCCSequenceRENode >> , aSmaCCRegularExpressionNode [ - self action = aSmaCCRegularExpressionNode action - ifFalse: [ ^ super , aSmaCCRegularExpressionNode ]. - nodes add: aSmaCCRegularExpressionNode. - ^ self -] - -{ #category : #private } -SmaCCSequenceRENode >> asNFAStartingWith: aSmaCCNode [ - | endNode startNode | - startNode := self addStateTransitionsTo: aSmaCCNode. - endNode := SmaCCNode new. - endNode action: action. - (nodes - inject: startNode - into: [ :sum :each | each asNFAStartingWith: sum ]) - addEdgeTo: endNode. - ^ endNode -] - -{ #category : #constructing } -SmaCCSequenceRENode >> makeCaseInsensitive [ - nodes do: [ :each | each makeCaseInsensitive ] -] - -{ #category : #'initialize-release' } -SmaCCSequenceRENode >> nodes: aCollection [ - nodes := aCollection -] - -{ #category : #private } -SmaCCSequenceRENode >> possibleMatchesDo: aBlock on: aStream [ - self possibleMatchesDo: aBlock on: aStream startingAt: 1 -] - -{ #category : #private } -SmaCCSequenceRENode >> possibleMatchesDo: aBlock on: aStream startingAt: anInteger [ - | node | - node := nodes at: anInteger. - nodes size = anInteger - ifTrue: [ node possibleMatchesDo: aBlock on: aStream ] - ifFalse: - [ node - possibleMatchesDo: - [ self possibleMatchesDo: aBlock on: aStream startingAt: anInteger + 1 ] - on: aStream ] -] - -{ #category : #accessing } -SmaCCSequenceRENode >> possibleMatchesSize [ - ^ nodes - inject: 1 - into: [ :sum :each | sum * each possibleMatchesSize ] -] - -{ #category : #copying } -SmaCCSequenceRENode >> postCopy [ - super postCopy. - nodes := nodes copy -] - -{ #category : #printing } -SmaCCSequenceRENode >> printOn: aStream [ - nodes - do: [ :each | each printOn: aStream ] - separatedBy: [ aStream space ] -] diff --git a/src/SmaCC_Development/SmaCCSet.class.st b/src/SmaCC_Development/SmaCCSet.class.st deleted file mode 100644 index 6c36c2509..000000000 --- a/src/SmaCC_Development/SmaCCSet.class.st +++ /dev/null @@ -1,70 +0,0 @@ -Class { - #name : #SmaCCSet, - #superclass : #Collection, - #instVars : [ - 'characters', - 'objects' - ], - #category : #'SmaCC_Development-Collections' -} - -{ #category : #adding } -SmaCCSet >> add: newObject [ - ^ (newObject isKindOf: Character) - ifTrue: [ characters add: newObject ] - ifFalse: [ objects add: newObject ] -] - -{ #category : #adding } -SmaCCSet >> addAll: aCollection [ - (aCollection isKindOf: SmaCCCharacterSet) - ifTrue: [ ^ characters addAll: aCollection ]. - ^ super addAll: aCollection -] - -{ #category : #enumerating } -SmaCCSet >> commonElementWith: aCollection [ - | intersected | - characters class = aCollection class - ifTrue: [ intersected := characters smaccIntersect: aCollection. - ^ intersected isEmpty - ifTrue: [ nil ] - ifFalse: [ intersected first ] ]. - aCollection - do: [ :each | - (self includes: each) - ifTrue: [ ^ each ] ]. - ^ nil -] - -{ #category : #enumerating } -SmaCCSet >> do: aBlock [ - objects do: aBlock. - characters do: aBlock -] - -{ #category : #testing } -SmaCCSet >> includes: anObject [ - ^ (anObject isKindOf: Character) - ifTrue: [ characters includes: anObject ] - ifFalse: [ objects includes: anObject ] -] - -{ #category : #'initialize-release' } -SmaCCSet >> initialize [ - super initialize. - characters := SmaCCCharacterSet new. - objects := Set new -] - -{ #category : #testing } -SmaCCSet >> isEmpty [ - ^ characters isEmpty and: [ objects isEmpty ] -] - -{ #category : #removing } -SmaCCSet >> remove: oldObject ifAbsent: aBlock [ - ^ (oldObject isKindOf: Character) - ifTrue: [ characters remove: oldObject ifAbsent: aBlock ] - ifFalse: [ objects remove: oldObject ifAbsent: aBlock ] -] diff --git a/src/SmaCC_Development/SmaCCShiftAction.class.st b/src/SmaCC_Development/SmaCCShiftAction.class.st deleted file mode 100644 index 87dbb64e6..000000000 --- a/src/SmaCC_Development/SmaCCShiftAction.class.st +++ /dev/null @@ -1,52 +0,0 @@ -" -SmaCCShiftAction represents the LR shift action. -" -Class { - #name : #SmaCCShiftAction, - #superclass : #SmaCCPrimitiveAction, - #category : #'SmaCC_Development-Actions' -} - -{ #category : #accessing } -SmaCCShiftAction class >> id [ - ^ 2r01 -] - -{ #category : #testing } -SmaCCShiftAction >> isShift [ - ^ true -] - -{ #category : #merging } -SmaCCShiftAction >> mergeWith: aSmaCCAction prefer: aClass [ - aSmaCCAction isShift - ifTrue: [ ^ self ]. - aSmaCCAction isReduce - ifTrue: [ ^ self mergeWithReduceAction: aSmaCCAction prefer: aClass ]. - ^ aSmaCCAction mergeWith: self prefer: aClass -] - -{ #category : #merging } -SmaCCShiftAction >> mergeWithReduceAction: aSmaCCAction prefer: aClass [ - | result | - (self precedence isNil or: [ aSmaCCAction precedence isNil ]) - ifTrue: - [ ^ SmaCCAmbiguousAction new - addAction: self; - addAction: aSmaCCAction; - yourself ]. - result := self. - self precedence < aSmaCCAction precedence - ifTrue: [ result := aSmaCCAction ]. - self precedence = aSmaCCAction precedence - ifTrue: - [ aSmaCCAction class = aClass - ifTrue: [ result := aSmaCCAction ]. - aClass = SmaCCRejectAction - ifTrue: [ result := SmaCCRejectAction item: self lr1Item ] ]. - ^ SmaCCPreferredCompositeAction new - addAction: self; - addAction: aSmaCCAction; - preferredAction: result; - yourself -] diff --git a/src/SmaCC_Development/SmaCCSingleVariableReduceCode.class.st b/src/SmaCC_Development/SmaCCSingleVariableReduceCode.class.st deleted file mode 100644 index 8b86ec832..000000000 --- a/src/SmaCC_Development/SmaCCSingleVariableReduceCode.class.st +++ /dev/null @@ -1,70 +0,0 @@ -Class { - #name : #SmaCCSingleVariableReduceCode, - #superclass : #SmaCCReduceCode, - #instVars : [ - 'indices' - ], - #category : #'SmaCC_Development-Compilation Model' -} - -{ #category : #private } -SmaCCSingleVariableReduceCode >> basicModelTypes: aSet [ - | types isCollection | - isCollection := false. - types := Set new. - self indices size <= 1 - ifTrue: [ rhs productionSymbol - productionsDo: [ :each | - (isCollection := isCollection or: [ each reduceCode indices size > 1 ]) - ifFalse: [ each reduceCode indices notEmpty - ifTrue: [ types - addAll: - (each reduceCode - basicModelTypes: aSet - forIndex: each reduceCode indices first) ] ] ] ] - ifFalse: [ isCollection := true ]. - ^ isCollection - ifTrue: [ Array with: (self model classFor: OrderedCollection) ] - ifFalse: [ types asArray ] -] - -{ #category : #private } -SmaCCSingleVariableReduceCode >> computeIndices [ - indices := OrderedCollection new. - 1 to: rhs size do: - [ :i | - | symbol | - symbol := rhs at: i. - (rhs variableNameForIndex: i) notNil - ifTrue: [ indices add: i ] - ifFalse: [ symbol returnsSingleVariable - ifTrue: [ indices add: i ] ] ]. - ^ indices -] - -{ #category : #accessing } -SmaCCSingleVariableReduceCode >> index [ - ^ indices isEmpty - ifTrue: [ 0 ] - ifFalse: [ indices first ] -] - -{ #category : #accessing } -SmaCCSingleVariableReduceCode >> indices [ - ^ indices ifNil: [ self computeIndices ] -] - -{ #category : #testing } -SmaCCSingleVariableReduceCode >> returnsSingleVariable [ - ^ true -] - -{ #category : #accessing } -SmaCCSingleVariableReduceCode >> source [ - ^ (indices size < 2 - and: - [ rhs productionSymbol variableDefinitions asArray first isCollection - not ]) - ifTrue: [ self codeGenerator defaultNodeReductionSource: self ] - ifFalse: [ self codeGenerator singleVariableCollectionFor: self ] -] diff --git a/src/SmaCC_Development/SmaCCSmalltalkCodeGenerator.class.st b/src/SmaCC_Development/SmaCCSmalltalkCodeGenerator.class.st deleted file mode 100644 index 42c6c375b..000000000 --- a/src/SmaCC_Development/SmaCCSmalltalkCodeGenerator.class.st +++ /dev/null @@ -1,1276 +0,0 @@ -" -SmaCCSmalltalkCodeGenerator represents a code generator for Smalltalk. - -Instance Variables - isExpressions a map of strings to is??? methods on String that answer true for those strings (e.g., '0123456789' -> #isDigit) - parseTreeCache mapping from selector names to code compiled in the method - -" -Class { - #name : #SmaCCSmalltalkCodeGenerator, - #superclass : #SmaCCCodeGenerator, - #instVars : [ - 'isExpressions', - 'parseTreeCache' - ], - #classVars : [ - 'MaxJumpSize', - 'MaxLiterals' - ], - #classInstVars : [ - 'keywords' - ], - #category : #'SmaCC_Development-Compiler' -} - -{ #category : #accessing } -SmaCCSmalltalkCodeGenerator class >> codeTemplatesArray [ - ^super codeTemplatesArray , - #( - #(#addAllSendTo:with: 'self addAll: (<2s>) to: (<1s>)') - #(#addAllFirstSendTo:with: 'self addAllFirst: (<2s>) to: (<1s>)') - #(#addSendTo:with: 'self add: (<2s>) to: (<1s>)') - #(#addFirstSendTo:with: 'self addFirst: (<2s>) to: (<1s>)') - #(#arrayType '') - #(#assignArray:index:to: '(<1s>) at: (<2p>) put: (<3s>)') - #(#assignmentTo:from: '<1s> := <2s>') - #(#at:index: '(<1s>) at: <2p>') - #(#bitXor:with: '(<1s>) bitXor: (<2s>)') - #(#booleanType '') - #(#cast:to: '<1s>') - #(#collectionType '') - #(#collectionVariableItemsIn:forCollectionGetter:andVariableGetter: 'SmaCCParseNode collectionVariableIn: (<1s>) collectionGetter: <2p> variableGetter: <3p>') - #(#compareEqual:to: '(<1s>) = (<2s>)') - #(#copy:inContext:onlyNodes: '<1s> collect: [:each | <3?:(each isKindOf: SmaCCParseNode) ifTrue: [>each copyInContext: <2s>]<3?:]>') - #(#copyNode: '(<1s>) copy') - #(#copyNodeCollection: '(<1s>) collect: [:each | each copy]') - #(#dictionaryType '') - #(#endConditionalString ']') - #(#endDoWhileLoopWithClause: '<1s>] whileTrue') - #(#endLiteralArray ')') - #(#endMethodString '') - #(#hashFor: '(<1s>) hash') - #(#ifFalseReturn: '(<1s>) ifFalse: [^false]') - #(#integerType '') - #(#isKindOfTest:class: '(<1s> isKindOf: <2s>) ifTrue: [') - #(#iterateObjects:name: '(<1s>) do: [:<2s> |') - #(#literalArraySeparator ' ') - #(#newArrayOfSize: 'Array new: <1p>') - #(#newCollectionOfSize: 'OrderedCollection new: <1p>') - #(#newObject: '<1s> new') - #(#newUnsignedShortArrayArray '#(') - #(#nodeCollectionType 'OrderedCollection') - #(#notNilCheckFor: '(<1s>) notNil ifTrue: [') - #(#objectType 'Object') - #(#private '') - #(#protected '') - #(#public '') - #(#receiverName 'self') - #(#reduceActionArrayType '') - #(#reduceActionLiteralStart '#(') - #(#return: '^<1s>') - #(#startDoWhileLoop '[') - #(#startIfWithClause: '(<1s>) ifTrue: [') - #(#statementSeparator '.') - #(#static '') - #(#stringType '') - #(#undefinedObject 'nil') - #(#unsignedShort '') - #(#unsignedShortArrayArray '') - #(#uppercaseString: '(<1s>) asUppercase') - #(#variableDeclaration:ofType: '| <1s> |') - #(#variableItemIn:forVariableGetter: 'SmaCCParseNode variableIn: (<1s>) getter: <2p>') - #(#virtual '') - #(#voidType '') - ) -] - -{ #category : #'class initialization' } -SmaCCSmalltalkCodeGenerator class >> initialize [ - MaxJumpSize := 900. - MaxLiterals := 30 -] - -{ #category : #private } -SmaCCSmalltalkCodeGenerator class >> keywords [ - "While Smalltalk doesn't have many keywords, we don't want to overwrite any existing method." - - ^ keywords - ifNil: - [ keywords := (SmaCCParseNode allSelectors - inject: #('self' 'super' 'nil' 'true' 'false') asSet - into: - [ :sum :each | - (each numArgs <= 1 and: [ each isInfix not ]) - ifTrue: - [ sum - add: - (each last = $: - ifTrue: [ each first: each size - 1 ] - ifFalse: [ each ]) asString ]. - sum ]) - remove: 'name' ifAbsent: [ ]; - remove: 'value' ifAbsent: [ ]; - remove: 'annotations' ifAbsent: [ ]; - yourself ] -] - -{ #category : #accessing } -SmaCCSmalltalkCodeGenerator class >> parseSourceSelector [ - ^ #canParseSmalltalk: -] - -{ #category : #accessing } -SmaCCSmalltalkCodeGenerator class >> typeName [ - ^ #Smalltalk -] - -{ #category : #'compiling-scanner' } -SmaCCSmalltalkCodeGenerator >> acceptStateEdge: aSmaCCStateEdge [ - ^ aSmaCCStateEdge transitionObjects size = 1 - ifTrue: [ 'scope == #' - , aSmaCCStateEdge transitionObjects asArray first ] - ifFalse: - [ '(' , aSmaCCStateEdge transitionObjects asArray storeString - , ' includes: scope)' ] -] - -{ #category : #private } -SmaCCSmalltalkCodeGenerator >> addImplementationSpecificRewritesTo: rewriter [ - rewriter - replace: - '`{:node :dict | (node isLiteralNode and: [(node value isKindOf: Character) and: [(node value codePoint between: 32 and: 126) not]]) ifTrue: [dict at: ''literal'' put: node. true] ifFalse: [false]}' - with: '(Character value: `{:dict | RBLiteralNode value: (dict at: ''literal'') value codePoint})'; - replace: - '``@.Stmts1. - (`@a ifTrue: [``@.Stmts2]) `{:node :dictionary | | index myStatements | - index := node parent statements indexOf: node. - myStatements := node parent statements. - dictionary at: #size put: ``@.Stmts2 size - (myStatements size - index). - index ~~ myStatements size and: [``@.Stmts2 size >= (myStatements size - index) and: [ - (index + 1 to: myStatements size) allSatisfy: [:each | - (myStatements at: each) = (``@.Stmts2 at: ``@.Stmts2 size - (myStatements size - each))]]] - }. - ``@.Stmts3' - with: - '``@.Stmts1. - `{:dictionary | RBMessageNode receiver: `@a selector: #ifTrue: arguments: (Array with: (RBBlockNode body: (RBSequenceNode statements: (``@.Stmts2 copyFrom: 1 to: (dictionary at: #size)))))}. - ``@.Stmts3'; - replace: 'currentCharacter == `#l1 or: [currentCharacter == `#l2]' - with: - '`{RBLiteralNode value: (String with: `#l1 value with: `#l2 value)} includes: currentCharacter'; - replace: 'currentCharacter == `#l1 or: [currentCharacter == `#l2 or: `@a]' - with: - '(`{RBLiteralNode value: (String with: `#l1 value with: `#l2 value)} includes: currentCharacter) or: `@a'; - replace: '(`#l1 includes: currentCharacter) or: [currentCharacter == `#l2]' - with: - '`{RBLiteralNode value: `#l1 value , (String with: `#l2 value)} includes: currentCharacter'; - replace: - '(`#l1 includes: currentCharacter) or: [currentCharacter == `#l2 or: `@a]' - with: - '(`{RBLiteralNode value: `#l1 value , (String with: `#l2 value)} includes: currentCharacter) or: `@a'; - replace: - '`@.Stmts1. - currentCharacter isLiteral ifTrue: [`@.Stmts2]. - `@.Stmts3' - with: - '`@.Stmts1. - `@.Stmts2'. - rewriter - replace: 'currentCharacter == (Character value: `@a)' - with: 'currentCharacter = (Character value: `@a)' -] - -{ #category : #compiling } -SmaCCSmalltalkCodeGenerator >> addVariable: aSmaCCVariableDefinition forDefinition: aSmaCCNodeClassDefinition [ - | instVarName | - instVarName := self - nonKeywordNameFor: aSmaCCVariableDefinition sourceVariableName. - (aSmaCCNodeClassDefinition modelClass - definesInstanceVariable: instVarName) - ifTrue: [ ^ self ]. - aSmaCCNodeClassDefinition modelClass addInstanceVariable: instVarName -] - -{ #category : #'reduction table' } -SmaCCSmalltalkCodeGenerator >> basicCompileSourceFor: aSmaCCReduceAction [ - | parseTree rewriter methodName existing | - parseTree := RBParser - parseExpression: aSmaCCReduceAction rhs reduceCode source. - (parseTree isLiteralNode - and: [ parseTree value isSymbol - and: [ parseTree value numArgs <= 1 - and: [ self parserClass definesMethod: parseTree value ] ] ]) - ifTrue: [ ^ parseTree value ]. - rewriter := self parseTreeRewriterFor: aSmaCCReduceAction rhs. - rewriter executeTree: parseTree. - parseTree := rewriter tree. - methodName := ('reduceActionFor' - , aSmaCCReduceAction symbol safeMethodName - , - (aSmaCCReduceAction symbol positionOf: aSmaCCReduceAction rhs) - printString , ':') asSymbol. - parseTree isSequence - ifFalse: - [ parseTree := RBSequenceNode statements: (Array with: parseTree) ]. - parseTree := RBMethodNode - selector: methodName - arguments: (Array with: (RBVariableNode named: 'nodes')) - body: parseTree. - parseTree addReturn. - existing := self findExistingMethodFor: parseTree. - existing notNil - ifTrue: [ ^ existing ]. - self parserClass - compile: parseTree formattedCode - classified: 'generated-reduction actions'. - ^ methodName -] - -{ #category : #accessing } -SmaCCSmalltalkCodeGenerator >> changes [ - ^ model changes -] - -{ #category : #'compiling-scanner' } -SmaCCSmalltalkCodeGenerator >> closestIsExpressionsFor: aSmaCCCharacterEdge seen: aCollection [ - | expressions | - expressions := OrderedCollection new. - self isExpressions - keysAndValuesDo: [ :string :selector | - | isInString | - isInString := false. - ((string - allSatisfy: [ :each | - (aSmaCCCharacterEdge transitionObjects includes: each) - ifTrue: [ isInString := true ] - ifFalse: [ aCollection includes: each ] ]) and: [ isInString ]) - ifTrue: [ expressions add: selector ] ]. - (expressions isEmpty - or: [ (self minMaxPairsFor: aSmaCCCharacterEdge without: expressions) size - > (self minMaxPairsFor: aSmaCCCharacterEdge without: #()) size ]) - ifTrue: [ ^ #() ]. - expressions size > 1 - ifTrue: [ | strings newExpressions | - strings := expressions - collect: [ :each | - each - -> - ((self isExpressions keyAtValue: each) - select: [ :char | aSmaCCCharacterEdge transitionObjects includes: char ]) ]. - strings := strings - asSortedCollection: [ :a :b | - a value size > b value size - or: [ a value size = b value size - and: [ (self isExpressions keyAtValue: a key) size - < (self isExpressions keyAtValue: b key) size ] ] ]. - newExpressions := OrderedCollection with: strings first. - 2 to: strings size do: [ :i | - | left | - left := (strings at: i) value. - newExpressions - do: [ :each | left := left reject: [ :char | each value includes: char ] ]. - left notEmpty - ifTrue: [ newExpressions add: (strings at: i) ] ]. - expressions := newExpressions collect: [ :each | each key ] ]. - ^ expressions -] - -{ #category : #'code generation templates' } -SmaCCSmalltalkCodeGenerator >> comment: aString [ - ^ '"' , (aString trim copyReplaceAll: '"' with: '""') , '"' -] - -{ #category : #'compiling-scanner' } -SmaCCSmalltalkCodeGenerator >> commonIfTrueCodeRewriter [ - ^ RBParseTreeRewriter new - replace: - '``@.Stmts1. - (`@a ifTrue: ``@block) `{:node :dictionary | | index myStatements | - index := node parent statements indexOf: node. - myStatements := node parent statements. - dictionary at: #size put: ``@block body statements size - (myStatements size - index). - index ~~ myStatements size and: [``@block body statements size >= (myStatements size - index) and: [ - (index + 1 to: myStatements size) allSatisfy: [:each | - (myStatements at: each) = (``@block body statements at: ``@block body statements size - (myStatements size - each))]]] - }. - ``@.Stmts3' - with: - '``@.Stmts1. - `{:dictionary | RBMessageNode receiver: `@a selector: #ifTrue: arguments: (Array with: (RBBlockNode body: (RBSequenceNode statements: (``@block body statements copyFrom: 1 to: (dictionary at: #size)))))}. - ``@.Stmts3'; - yourself -] - -{ #category : #'compiling-parser' } -SmaCCSmalltalkCodeGenerator >> compileCacheId [ - | stream | - stream := WriteStream with: String new. - stream - nextPutAll: 'cacheId'; - cr; - tab; - nextPutAll: '^'''; - nextPutAll: DateAndTime now printString; - nextPut: $'. - parserClass theMetaClass compile: stream contents classified: #'generated-accessing' -] - -{ #category : #compiling } -SmaCCSmalltalkCodeGenerator >> compileChanges [ - self removeUnnecessaryChanges. - RBRefactoryChangeManager instance performChange: self changes. - parserClass realClass ifNotNil: [ :each | each resetCaches ]. - scannerClass realClass - ifNotNil: [ :each | each initializeKeywordMap ] -] - -{ #category : #'compiling-nodes' } -SmaCCSmalltalkCodeGenerator >> compileChildrenMethod: aSmaCCNodeClassDefinition [ - -] - -{ #category : #'compiling-nodes' } -SmaCCSmalltalkCodeGenerator >> compileCopyInContextMethod: aSmaCCNodeClassDefinition [ - -] - -{ #category : #'compiling-nodes' } -SmaCCSmalltalkCodeGenerator >> compileEqualMethod: aSmaCCNodeClassDefinition [ - -] - -{ #category : #'compiling-nodes' } -SmaCCSmalltalkCodeGenerator >> compileHashMethod: aSmaCCNodeClassDefinition [ - -] - -{ #category : #'compiling-scanner' } -SmaCCSmalltalkCodeGenerator >> compileIgnoreCaseMethods [ - super compileIgnoreCaseMethods. - self grammar ignoreCase - ifFalse: [ ^ self ]. - scannerClass - compile: - 'tokenClass - ^SmaCCCaseInsensitiveToken' - classified: #generated -] - -{ #category : #compiling } -SmaCCSmalltalkCodeGenerator >> compileInitializeMethod: aSmaCCNodeClassDefinition [ - | stream | - ((aSmaCCNodeClassDefinition modelClass definesMethod: #initialize) - and: [ aSmaCCNodeClassDefinition collectionVariableDefinitions isEmpty ]) - ifTrue: [ ^ self ]. - stream := WriteStream on: String new. - stream nextPutAll: 'initialize'. - (aSmaCCNodeClassDefinition modelClass superclass - definesMethod: #initialize) - ifTrue: [ stream - cr; - tab; - nextPutAll: 'super initialize.' ]. - aSmaCCNodeClassDefinition collectionVariableDefinitions - do: - [ :each | - stream - cr; - tab; - nextPutAll: (self nonKeywordNameFor: each sourceVariableName); - nextPutAll: ' := OrderedCollection new: 2.' ]. - aSmaCCNodeClassDefinition modelClass - compile: stream contents - classified: #'generated-initialize-release' -] - -{ #category : #'compiling-scanner' } -SmaCCSmalltalkCodeGenerator >> compileKeywordInitializerUsing: keywordMapDictionary [ - | stream dataStream | - keywordMapDictionary isEmpty - ifTrue: [ ^ self ]. - stream := WriteStream with: String new. - stream nextPutAll: 'initializeKeywordMap'. - stream nextPutAll: ' keywordMap := Dictionary new. '. - dataStream := WriteStream with: Array new. - keywordMapDictionary - keysAndValuesDo: - [ :key :value | - value keys asSortedCollection - do: - [ :each | - dataStream - nextPut: - (Array with: key with: each with: (value at: each)) ] ]. - stream - nextPutAll: '#('; - cr. - dataStream contents - do: - [ :each | - stream nextPutAll: '#('. - each - do: [ :item | item storeOn: stream ] - separatedBy: [ stream nextPut: $ ]. - stream nextPut: $) ] - separatedBy: [ stream cr ]. - stream nextPut: $). - stream - nextPutAll: - ' do: [:each | (keywordMap at: each first ifAbsentPut: [Dictionary new]) at: (each at: 2) put: each last]. ^keywordMap'. - scannerClass theMetaClass - compile: (RBParser parseMethod: stream contents) formattedCode - classified: #'generated-initialization' -] - -{ #category : #'compiling-nodes' } -SmaCCSmalltalkCodeGenerator >> compileMatchInContextMethod: aSmaCCNodeClassDefinition [ - -] - -{ #category : #compiling } -SmaCCSmalltalkCodeGenerator >> compileMethodIn: modelClass [ - modelClass compile: self formattedCode classified: #generated -] - -{ #category : #compiling } -SmaCCSmalltalkCodeGenerator >> compileMethodWithoutFormattingIn: modelClass [ - | code | - code := self codeStream contents. - code := code trim. - modelClass compile: code classified: #generated -] - -{ #category : #compiling } -SmaCCSmalltalkCodeGenerator >> compileOptimizedMethodIn: modelClass [ - | tree | - tree := RBParser parseMethod: self codeStream contents. - self rewriters - do: [ :each | [ each executeTree: tree ] whileTrue: [ tree := each tree ] ]. - self compileScannerTree: tree into: modelClass -] - -{ #category : #'compiling-nodes' } -SmaCCSmalltalkCodeGenerator >> compilePostCopyMethod: aSmaCCNodeClassDefinition [ - -] - -{ #category : #'compiling-parser' } -SmaCCSmalltalkCodeGenerator >> compileScannerClassIntoParser [ - | stream | - stream := WriteStream with: String new. - stream - nextPutAll: 'scannerClass'; - cr; - tab; - nextPutAll: '^'; - nextPutAll: scannerClass name. - parserClass theMetaClass - compile: stream contents - classified: #'generated-accessing' -] - -{ #category : #'compiling-scanner' } -SmaCCSmalltalkCodeGenerator >> compileScannerTree: tree into: modelClass [ - | i | - i := 1. - [ (self countLiteralsIn: tree) > self maxLiterals - and: - [ (self - splitIfTrueBranchFrom: tree - usingName: (tree selector , 'X' , i printString) asSymbol - into: modelClass) - or: - [ self - splitSequenceFrom: tree - usingName: (tree selector , 'X' , i printString) asSymbol - into: modelClass ] ] ] whileTrue: [ i := i + 1 ]. - modelClass compile: tree formattedCode classified: #generated -] - -{ #category : #'compiling-parser' } -SmaCCSmalltalkCodeGenerator >> compileSymbolTypes: anArray [ - self - startPublicVirtualMethod; - nextPutLine: (self method: 'symbolTypes' type: self arrayType); - nextPutStatement: (self return: anArray storeString); - endMethod; - compileMethodIn: self parserClass theMetaClass -] - -{ #category : #'compiling-nodes' } -SmaCCSmalltalkCodeGenerator >> compileVariablesMethods: aSmaCCNodeClassDefinition [ - | compileBlock allVariables class | - allVariables := OrderedCollection new. - class := aSmaCCNodeClassDefinition. - [ class notNil ] - whileTrue: - [ allVariables addAll: class variableDefinitions. - class := class superclass ]. - compileBlock := [ :variables :methodName | - | vars ignoredVars | - ignoredVars := variables - select: [ :each | grammar ignoredVariables includes: each variableName ]. - vars := variables - reject: [ :each | grammar ignoredVariables includes: each variableName ]. - (vars - anySatisfy: [ :each | aSmaCCNodeClassDefinition isLocalVariable: each ]) - ifTrue: - [ self - startPublicOverrideMethod; - nextPutLine: (self method: methodName type: self collectionType); - nextPutStatement: - (self - return: - (vars collect: [ :each | each getterMethodName asSymbol ]) asArray - storeString); - endMethod; - compileMethodIn: aSmaCCNodeClassDefinition modelClass ]. - (ignoredVars - anySatisfy: [ :each | aSmaCCNodeClassDefinition isLocalVariable: each ]) - ifTrue: - [ | ignoredMethodName | - ignoredMethodName := methodName copy. - ignoredMethodName at: 1 put: ignoredMethodName first asUppercase. - ignoredMethodName := 'ignored' , ignoredMethodName. - self - startPublicOverrideMethod; - nextPutLine: (self method: ignoredMethodName type: self collectionType); - nextPutStatement: - (self - return: - (ignoredVars collect: [ :each | each getterMethodName asSymbol ]) - asArray storeString); - endMethod; - compileMethodIn: aSmaCCNodeClassDefinition modelClass ] ]. - compileBlock - value: - (allVariables - select: [ :each | each isBaseNodeType and: [ each isCollection not ] ]) - value: 'nodeVariables'; - value: - (allVariables - select: [ :each | each isBaseNodeType and: [ each isCollection ] ]) - value: 'compositeNodeVariables'; - value: - (allVariables - select: [ :each | each isBaseTokenType and: [ each isCollection not ] ]) - value: 'tokenVariables'; - value: - (allVariables - select: [ :each | each isBaseTokenType and: [ each isCollection ] ]) - value: 'compositeTokenVariables'; - value: - (allVariables - select: [ :each | each isBaseTokenType not and: [ each isBaseNodeType not ] ]) - value: 'otherVariables' -] - -{ #category : #'compiling-scanner' } -SmaCCSmalltalkCodeGenerator >> countLiteralsIn: aParseTree [ - | literals | - literals := Set new. - aParseTree - nodesDo: - [ :each | - each isLiteralNode - ifTrue: [ each parent isLiteralNode - ifFalse: [ literals add: each value ] ]. - each isMessage - ifTrue: [ literals add: each selector ] ]. - ^ literals size -] - -{ #category : #'reduction table' } -SmaCCSmalltalkCodeGenerator >> defaultNodeReductionSource: aReduction [ - aReduction index = 0 - ifTrue: [ ^ 'nil' ]. - ^ '''' , aReduction index printString , '''' -] - -{ #category : #'reduction table' } -SmaCCSmalltalkCodeGenerator >> defaultReductionSource [ - ^ '#reduceFor:' -] - -{ #category : #compiling } -SmaCCSmalltalkCodeGenerator >> defineClass: aString asSubclassOf: aBehavior [ - | current variables | - current := Smalltalk at: aString asSymbol ifAbsent: [ Object ]. - variables := ''. - (current includesBehavior: SmaCCParser) | (current includesBehavior: SmaCCScanner) - ifTrue: - [ | stream | - stream := WriteStream on: String new. - current instVarNames - do: [ :each | - stream - nextPutAll: each; - space ]. - variables := stream contents ]. - model - defineClass: - aBehavior name , ' subclass: #' , aString , ' instanceVariableNames: ''' , variables - , - (''' classVariableNames: '''' poolDictionaries: '''' category: ''' - , (defaultCategory ifNil: [ RPackage defaultPackageName ]) , ''' '). - ^ model classNamed: aString asSymbol -] - -{ #category : #'reduction table' } -SmaCCSmalltalkCodeGenerator >> findExistingMethodFor: aRBMethodNode [ - | potentialSelectors | - potentialSelectors := #(#liftFirstValue: #liftLastValue: #liftSecondValue: #nil #stringValue:) - asSet. - potentialSelectors - addAll: (self parserClass selectors select: [ :each | each numArgs <= 1 ]). - ^ potentialSelectors - detect: - [ :each | - | parseTree | - parseTree := self parserParseTreeFor: each. - parseTree notNil - and: - [ aRBMethodNode body - equalTo: parseTree body - exceptForVariables: aRBMethodNode argumentNames ] ] - ifNone: [ nil ] -] - -{ #category : #compiling } -SmaCCSmalltalkCodeGenerator >> formattedCode [ - ^ (RBParser parseMethod: self codeStream contents) formattedCode -] - -{ #category : #private } -SmaCCSmalltalkCodeGenerator >> generatedMethodsIn: aRBClass [ - ^ aRBClass selectors - select: - [ :each | - (aRBClass protocolsFor: each) - anySatisfy: [ :protocol | protocol notNil and: [ 'generated*' match: protocol ] ] ] -] - -{ #category : #testing } -SmaCCSmalltalkCodeGenerator >> hasLiteralByteArrays [ - ^ true -] - -{ #category : #'initialize-release' } -SmaCCSmalltalkCodeGenerator >> initialize [ - super initialize. - model := RBNamespace new - name: 'Compile Scanner/Parser'; - yourself. - parseTreeCache := Dictionary new -] - -{ #category : #private } -SmaCCSmalltalkCodeGenerator >> initializeIsExpressions [ - | expressions | - isExpressions := Dictionary new. - expressions := SmaCCGrammar isExpressionMap. - (expressions keys asSortedCollection: [ :a :b | a size > b size or: [ a size = b size and: [ a > b ] ] ]) - do: [ :key | isExpressions at: (expressions at: key) put: key ] -] - -{ #category : #private } -SmaCCSmalltalkCodeGenerator >> isExpressions [ - isExpressions isNil - ifTrue: [ self initializeIsExpressions ]. - ^ isExpressions -] - -{ #category : #private } -SmaCCSmalltalkCodeGenerator >> keywords [ - ^ self class keywords -] - -{ #category : #'compiling-scanner' } -SmaCCSmalltalkCodeGenerator >> maxJumpSize [ - ^ MaxJumpSize -] - -{ #category : #'compiling-scanner' } -SmaCCSmalltalkCodeGenerator >> maxLiterals [ - ^ MaxLiterals -] - -{ #category : #'code generation templates' } -SmaCCSmalltalkCodeGenerator >> method: aString type: typeString [ - ^ aString -] - -{ #category : #'code generation templates' } -SmaCCSmalltalkCodeGenerator >> method: aString type: anObject argumentName: argumentNameString argumentType: argumentTypeString [ - ^ aString , ' ' , argumentNameString -] - -{ #category : #'code generation templates' } -SmaCCSmalltalkCodeGenerator >> method: aString type: anObject argumentName: firstArgumentNameString argumentType: firstArgumentTypeString argumentName: secondArgumentNameString argumentType: secondArgumentTypeString [ - | keywords | - keywords := aString asSymbol keywords. - ^ keywords first , ' ' , firstArgumentNameString , ' ' - , keywords last , ' ' , secondArgumentNameString -] - -{ #category : #'compiling-scanner' } -SmaCCSmalltalkCodeGenerator >> optimizationRewriter [ - | rewriter | - rewriter := RBParseTreeRewriter new. - rewriter - replace: - '`@.Stmts1. - [`@.Stmts2. - currentCharacter ~~ `#l] whileTrue. - currentCharacter == `#l ifTrue: [`@.Stmts3. ^`@r3]. - `@.Stmts4' - with: - '`@.Stmts1. - [`@.Stmts2. - currentCharacter ~~ `#l] whileTrue. - `@.Stmts3. ^`@r3'; - replace: - '`@.Stmts1. - [`@.Stmts2. - currentCharacter ~~ `#l] whileTrue. - currentCharacter == `#l ifTrue: [`@.Stmts3]. - `@.Stmts4' - with: - '`@.Stmts1. - [`@.Stmts2. - currentCharacter ~~ `#l] whileTrue. - `@.Stmts3. - `@.Stmts4'; - replaceMethod: - '`name - `@.Stmts1. - `@a ifTrue: [^self `name]. - `@.Stmts3' - with: - '`name - [`@.Stmts1. - `@a] whileTrue. - `@.Stmts3'; - replaceMethod: - '`name - `@.Stmts1. - `@a ifTrue: [`@.Stmts2. - ^self `name]. - `@.Stmts3' - with: - '`name - [`@.Stmts1. - `@a] whileTrue: [`@.Stmts2]. - `@.Stmts3'; - replace: - '`@.Stmts1. - currentCharacter isLiteral ifTrue: [`@.Stmts2]. - `@.Stmts3' - with: - '`@.Stmts1. - `@.Stmts2'; - replace: - '`@.Stmts1. - `.Stmt. - `@.Stmts. - `@a ifTrue: [self step. `.Stmt. `@.Stmts]. - `@.Stmts2' - with: - '`@.Stmts1. - `@a ifTrue: [self step]. - `.Stmt. - `@.Stmts. - `@.Stmts2'; - replace: - '`@.Stmts1. - true ifTrue: [`@.Stmts2. ^`@obj]. - `@.Stmts3' - with: - '`@.Stmts1. - `@.Stmts2. - ^`@obj'; - replace: - '`@.Stmts1. - [`@.Stmts2. true] whileTrue. - ^`@Stmt' - with: - '`@.Stmts1. - [`@.Stmts2. true] whileTrue.'. - self addImplementationSpecificRewritesTo: rewriter. - ^ rewriter -] - -{ #category : #'compiling-scanner' } -SmaCCSmalltalkCodeGenerator >> outputGreaterThanMatch: each on: stream [ - stream - nextPutAll: 'currentCharacter >= '; - nextPutAll: each first storeString -] - -{ #category : #'compiling-scanner' } -SmaCCSmalltalkCodeGenerator >> outputInvertedMatchFor: aSmaCCCharacterEdge on: stream [ - | char | - char := Character - value: - ((0 to: SmaCCGrammar maximumCharacterValue) - detect: - [ :each | - (aSmaCCCharacterEdge transitionObjects - includes: (Character value: each)) not ]). - stream - nextPutAll: 'currentCharacter ~~ '; - nextPutAll: char storeString -] - -{ #category : #'compiling-scanner' } -SmaCCSmalltalkCodeGenerator >> outputIsSelector: isSelector on: stream [ - stream nextPutAll: 'currentCharacter ' , isSelector -] - -{ #category : #'compiling-scanner' } -SmaCCSmalltalkCodeGenerator >> outputLessThanMatch: each on: stream [ - stream - nextPutAll: 'currentCharacter <= '; - nextPutAll: each last storeString -] - -{ #category : #'compiling-scanner' } -SmaCCSmalltalkCodeGenerator >> outputMatchFor: aSmaCCCharacterEdge on: stream without: isSelectors [ - | pairs | - pairs := self - minMaxPairsFor: aSmaCCCharacterEdge - without: isSelectors. - pairs isEmpty - ifTrue: [ stream next: isSelectors size - 1 put: $]. - ^ self ]. - isSelectors notEmpty - ifTrue: [ stream nextPutAll: ' or: [' ]. - pairs - do: [ :each | self outputMatchForTransition: each on: stream ] - separatedBy: [ stream nextPutAll: ' or: [' ]. - stream next: pairs size - 1 put: $]. - stream next: isSelectors size put: $] -] - -{ #category : #'compiling-scanner' } -SmaCCSmalltalkCodeGenerator >> outputMatchForTransition: each on: stream [ - each first = each last - ifTrue: [ ^ self outputSingleCharacterMatch: each on: stream ]. - each first = (Character value: 0) - ifTrue: [ ^ self outputLessThanMatch: each on: stream ]. - each last = (Character value: SmaCCGrammar maximumCharacterValue) - ifTrue: [ ^ self outputGreaterThanMatch: each on: stream ]. - self outputRangeMatch: each on: stream -] - -{ #category : #'compiling-scanner' } -SmaCCSmalltalkCodeGenerator >> outputRangeMatch: each on: stream [ - stream - nextPutAll: '(currentCharacter between: '; - nextPutAll: each first storeString; - nextPutAll: ' and: '; - nextPutAll: each last storeString; - nextPutAll: ')' -] - -{ #category : #'compiling-scanner' } -SmaCCSmalltalkCodeGenerator >> outputSingleCharacterMatch: each on: stream [ - stream - nextPutAll: 'currentCharacter == '; - nextPutAll: each first storeString -] - -{ #category : #'compiling-scanner' } -SmaCCSmalltalkCodeGenerator >> outputStreamClass [ - ^ WriteStream -] - -{ #category : #'reduction table' } -SmaCCSmalltalkCodeGenerator >> parseTreeRewriterFor: aSmaCCRHS [ - | rewriter | - rewriter := RBParseTreeRewriter new. - 1 to: aSmaCCRHS size do: - [ :i | - rewriter - replace: i printString storeString - with: '(nodes at: ' , i printString , ')'. - (aSmaCCRHS variableNameForIndex: i) - ifNotNil: - [ :name | rewriter replace: name with: '(nodes at: ' , i printString , ')' ] ]. - ^ rewriter -] - -{ #category : #private } -SmaCCSmalltalkCodeGenerator >> parserParseTreeFor: aSelector [ - ^ parseTreeCache - at: aSelector - ifAbsentPut: - [ | definingClass | - definingClass := self parserClass whoDefinesMethod: aSelector. - definingClass parseTreeFor: aSelector ] -] - -{ #category : #'code generation templates' } -SmaCCSmalltalkCodeGenerator >> reduceAction: anArray [ - ^ anArray storeString -] - -{ #category : #compiling } -SmaCCSmalltalkCodeGenerator >> removeChange: aRBChange [ - | index | - index := self changes changes identityIndexOf: aRBChange. - index > 0 - ifFalse: [ ^ self ]. - self changes changes removeAt: index -] - -{ #category : #compiling } -SmaCCSmalltalkCodeGenerator >> removeOldMethods [ - self - removeOldMethodsFrom: scannerClass; - removeOldMethodsFrom: scannerClass theMetaClass; - removeOldMethodsFrom: parserClass; - removeOldMethodsFrom: parserClass theMetaClass -] - -{ #category : #compiling } -SmaCCSmalltalkCodeGenerator >> removeOldMethodsFrom: aRBClass [ - (self generatedMethodsIn: aRBClass) - do: [ :each | aRBClass removeMethod: each ] -] - -{ #category : #compiling } -SmaCCSmalltalkCodeGenerator >> removeUnnecessaryChanges [ - self removeUnnecessaryMethodChanges. - self removeUnnecessaryClassChanges -] - -{ #category : #compiling } -SmaCCSmalltalkCodeGenerator >> removeUnnecessaryClassChanges [ - | allChanges classChanges | - allChanges := self changes changes copy. - (allChanges - allSatisfy: [ :each | (each isKindOf: RBCompositeRefactoryChange) not ]) - ifFalse: [ ^ self ]. - classChanges := allChanges - select: - [ :each | - (each isKindOf: RBAddClassChange) - and: - [ each changeClass notNil - and: [ each changeClass superclass name = each superclassName ] ] ]. - classChanges - do: - [ :each | - | addVars variables existingVariables | - addVars := allChanges - select: - [ :change | - (change isKindOf: RBAddInstanceVariableChange) - and: [ each changeClass = change changeClass ] ]. - variables := addVars - inject: Set new - into: - [ :sum :change | - sum - add: change variable; - yourself ]. - variables addAll: each instanceVariableNames. - existingVariables := each changeClass instVarNames. - (existingVariables size = variables size - and: - [ existingVariables asSortedCollection asArray - = variables asSortedCollection asArray ]) - ifTrue: - [ self removeChange: each. - addVars do: [ :change | self removeChange: change ] ] ] -] - -{ #category : #compiling } -SmaCCSmalltalkCodeGenerator >> removeUnnecessaryMethodChanges [ - | allChanges | - allChanges := self changes changes copy. - (allChanges - allSatisfy: [ :each | (each isKindOf: RBCompositeRefactoryChange) not ]) - ifFalse: [ ^ self ]. - allChanges - keysAndValuesDo: - [ :key :each | - (each isKindOf: RBRemoveMethodChange) - ifTrue: - [ key + 1 to: allChanges size do: - [ :i | - | other | - other := allChanges at: i. - [ ((other isKindOf: RBAddMethodChange) - and: - [ each selector = other selector - and: - [ each changeClassName = other changeClassName - and: - [ (other changeClass sourceCodeAt: other selector) asString - = other parseTree source asString ] ] ]) - ifTrue: [ self - removeChange: each; - removeChange: other ] ] - on: Error - do: [ :ex | ex return ] ] ] ] -] - -{ #category : #'compiling-scanner' } -SmaCCSmalltalkCodeGenerator >> rewriters [ - | rewriters | - rewriters := OrderedCollection new. - rewriters add: self commonIfTrueCodeRewriter. - rewriters add: self optimizationRewriter. - rewriters add: self scanStringRewriter. - ^ rewriters -] - -{ #category : #'compiling-scanner' } -SmaCCSmalltalkCodeGenerator >> scanStringRewriter [ - ^ RBParseTreeRewriter new - replace: - 'self step. currentCharacter == `#l1 ifTrue: [self step. currentCharacter == `#l2 ifTrue: `@b]. `@.Stmts' - with: - '(self scanForString: `{RBLiteralNode value: (String with: `#l1 value with: `#l2 value)}) ifTrue: `@b. `@.Stmts'; - replace: - '(self scanForString: `#l1) ifTrue: [self step. currentCharacter == `#l2 ifTrue: `@b]. `@.Stmts' - with: - '(self scanForString: `{RBLiteralNode value: (`#l1 value copyWith: `#l2 value)}) ifTrue: `@b. `@.Stmts'; - replace: - 'self recordMatch: `@m. self step. currentCharacter == `#l1 ifTrue: [self recordMatch: `@m. self step. currentCharacter == `#l2 ifTrue: `@b]. `@.Stmts' - with: - 'self recordMatch: `@m. (self scanForString: `{RBLiteralNode value: (String with: `#l1 value with: `#l2 value)}) ifTrue: `@b. `@.Stmts'; - replace: - 'self recordMatch: `@m. (self scanForString: `#l1) ifTrue: [self recordMatch: `@m. self step. currentCharacter == `#l2 ifTrue: `@b]. `@.Stmts' - with: - 'self recordMatch: `@m. (self scanForString: `{RBLiteralNode value: (`#l1 value copyWith: `#l2 value)}) ifTrue: `@b. `@.Stmts'; - yourself -] - -{ #category : #'compiling-scanner' } -SmaCCSmalltalkCodeGenerator >> scannerActionFor: aString [ - | selector current | - aString size > 2 - ifFalse: [ ^ nil ]. - selector := (aString copyFrom: 2 to: aString size - 1) asSymbol. - selector numArgs = 0 - ifFalse: [ ^ nil ]. - ((SmaCCScanner organization listAtCategoryNamed: #'default token handling') includes: selector) - ifTrue: [ ^ selector ]. - current := scannerClass. - [ current notNil and: [ current superclass notNil and: [ current name ~= #SmaCCScanner ] ] ] - whileTrue: [ (current directlyDefinesMethod: selector) - ifTrue: [ ^ selector ]. - current := current superclass ]. - ^ nil -] - -{ #category : #accessing } -SmaCCSmalltalkCodeGenerator >> scannerClass [ - ^ scannerClass -] - -{ #category : #accessing } -SmaCCSmalltalkCodeGenerator >> scannerClass: aClassOrString [ - (aClassOrString isKindOf: Behavior) - ifTrue: [ scannerClass := model classFor: aClassOrString ] - ifFalse: - [ scannerClass := model classNamed: aClassOrString asSymbol. - scannerClass isNil - ifTrue: - [ scannerClass := self - defineClass: aClassOrString - asSubclassOf: SmaCCScanner ] ] -] - -{ #category : #accessing } -SmaCCSmalltalkCodeGenerator >> selectorMap: aDictionary [ - | arrayMap | - aDictionary isEmpty - ifTrue: [ ^ self ]. - arrayMap := Array new: aDictionary keys asSortedCollection last. - aDictionary - keysAndValuesDo: [ :key :value | arrayMap at: key put: value ]. - self - startPublicOverrideMethod; - nextPutLine: (self method: 'tokenActions' type: self collectionType); - nextPutStatement: (self return: arrayMap storeString); - endMethod; - compileMethodIn: self scannerClass -] - -{ #category : #private } -SmaCCSmalltalkCodeGenerator >> send: selector to: aString [ - ^ '(' , aString , ') ' , selector -] - -{ #category : #'code generation templates' } -SmaCCSmalltalkCodeGenerator >> send: selectorString to: receiverString with: argumentString [ - ^ '(' , receiverString , ') ' , selectorString , ' (' - , argumentString , ')' -] - -{ #category : #private } -SmaCCSmalltalkCodeGenerator >> send: selectorString to: receiverString with: firstArgumentString with: secondArgumentString [ - | keywords | - keywords := selectorString asSymbol keywords. - ^ '(' , receiverString , ') ' , keywords first , ' (' - , firstArgumentString , ') ' , keywords last , ' (' - , secondArgumentString , ')' -] - -{ #category : #'code generation templates' } -SmaCCSmalltalkCodeGenerator >> send: selectorString to: receiverString with: firstArgumentString with: secondArgumentString with: thirdArgumentString [ - | keywords | - keywords := selectorString asSymbol keywords. - ^ '(' , receiverString , ') ' , keywords first , ' (' - , firstArgumentString , ') ' , (keywords at: 2) , ' (' - , secondArgumentString , ') ' , keywords last , ' (' - , thirdArgumentString , ')' -] - -{ #category : #'compiling-scanner' } -SmaCCSmalltalkCodeGenerator >> splitIfTrueBranchFrom: aParseTree usingName: aSelector into: modelClass [ - | blocks | - blocks := SortedCollection sortBlock: [ :a :b | a key > b key ]. - aParseTree body - nodesDo: - [ :each | - (each isBlock - and: - [ each parent isMessage - and: - [ each parent selector = #ifTrue: - and: [ each body lastIsReturn or: [ each containsReturn not ] ] ] ]) - ifTrue: - [ | literalCount | - literalCount := self countLiteralsIn: each. - literalCount > 2 - ifTrue: [ blocks add: literalCount -> each ] ] ]. - blocks notEmpty - ifTrue: - [ | blockToExtract method body | - blockToExtract := blocks first value. - method := RBMethodNode - selector: aSelector - body: blockToExtract body copy. - body := RBMessageNode - receiver: (RBVariableNode named: 'self') - selector: aSelector. - blockToExtract containsReturn - ifTrue: [ body := RBReturnNode value: body ]. - blockToExtract - replaceNode: blockToExtract body - withNode: (RBSequenceNode statements: (OrderedCollection with: body)). - self compileScannerTree: method into: modelClass. - ^ true ]. - ^ false -] - -{ #category : #'compiling-scanner' } -SmaCCSmalltalkCodeGenerator >> splitSequenceFrom: aParseTree usingName: aSelector into: modelClass [ - | sequence statements | - statements := aParseTree body copy statements. - statements size <= 1 - ifTrue: [ ^ false ]. - sequence := RBSequenceNode statements: OrderedCollection new. - [ (self countLiteralsIn: sequence) < self maxLiterals - and: [ statements notEmpty ] ] - whileTrue: [ sequence addNodeFirst: statements removeLast ]. - sequence removeNode: sequence statements first. - sequence statements size <= 1 - ifTrue: [ ^ false ]. - sequence statements size - timesRepeat: [ aParseTree body removeNode: aParseTree body statements last ]. - aParseTree body - addNode: - (RBReturnNode - value: - (RBMessageNode - receiver: (RBVariableNode named: 'self') - selector: aSelector)). - self - compileScannerTree: (RBMethodNode selector: aSelector body: sequence) - into: modelClass. - ^ true -] - -{ #category : #'code generation templates' } -SmaCCSmalltalkCodeGenerator >> superMessage: aString [ - ^ 'super ' , aString -] - -{ #category : #'code generation templates' } -SmaCCSmalltalkCodeGenerator >> superMessage: aString argument: argumentString [ - ^ 'super ' , aString , ' (' , argumentString , ')' -] - -{ #category : #'code generation templates' } -SmaCCSmalltalkCodeGenerator >> superMessage: aString argument: firstArgumentString argument: secondArgumentString [ - | keywords | - keywords := aString asSymbol keywords. - ^ 'super ' , keywords first , ' (' , firstArgumentString , ') ' - , keywords last , ' (' , secondArgumentString , ')' -] - -{ #category : #'code generation templates' } -SmaCCSmalltalkCodeGenerator >> variableReference: aSmaCCVariableDefinition in: aString [ - ^ '(' , aString , ') ' , aSmaCCVariableDefinition getterMethodName -] - -{ #category : #'compiling-scanner' } -SmaCCSmalltalkCodeGenerator >> writeMatchingCodeFor: aSmaCCNode [ - | matchedItem | - (aSmaCCNode action notNil and: [ aSmaCCNode action size > 0 ]) - ifTrue: - [ matchedItem := aSmaCCNode action asArray. - self codeStream - nextPutAll: - (aSmaCCNode transitions isEmpty - ifTrue: [ '^self recordAndReportMatch:' ] - ifFalse: [ 'self recordMatch: ' ]). - matchedItem isSymbol - ifTrue: [ self codeStream nextPutAll: matchedItem storeString ] - ifFalse: - [ self codeStream nextPutAll: '#('. - matchedItem - do: [ :each | self codeStream nextPutAll: each storeString ] - separatedBy: [ self codeStream nextPut: $ ]. - self codeStream nextPut: $) ]. - self codeStream - nextPut: $.; - cr ]. - (aSmaCCNode transitions - anySatisfy: [ :each | each isCharacterTransition ]) - ifTrue: [ self nextPutLine: 'self step.' ] -] - -{ #category : #'compiling-parser' } -SmaCCSmalltalkCodeGenerator >> writeTransitionTableEntry: anArray on: aStream firstIsType: aBoolean [ - | startIndex | - aStream cr. - self hasLiteralByteArrays - ifTrue: - [ aStream nextPutAll: '#['. - aBoolean - ifTrue: [ aStream print: anArray first. - startIndex := 2 ] - ifFalse: [ startIndex := 1 ]. - startIndex to: anArray size do: - [ :i | - aStream - nextPutAll: self literalArraySeparator; - print: ((anArray at: i) bitShift: -8); - nextPutAll: self literalArraySeparator; - print: ((anArray at: i) bitAnd: 16rFF) ]. - aStream nextPut: $] ] - ifFalse: - [ aStream nextPutAll: '#('. - anArray - do: [ :each | aStream print: each ] - separatedBy: [ aStream nextPutAll: self literalArraySeparator ]. - aStream nextPut: $) ] -] diff --git a/src/SmaCC_Development/SmaCCSourceReduceCode.class.st b/src/SmaCC_Development/SmaCCSourceReduceCode.class.st deleted file mode 100644 index 6419aa05e..000000000 --- a/src/SmaCC_Development/SmaCCSourceReduceCode.class.st +++ /dev/null @@ -1,87 +0,0 @@ -" -SmaCCSourceReduceCode represents a reduce action that is specified in the grammar. In this case, it outputs the code directly into the parser. - -Instance Variables - source the source to output - - -" -Class { - #name : #SmaCCSourceReduceCode, - #superclass : #SmaCCReduceCode, - #instVars : [ - 'source', - 'isImmediate' - ], - #category : #'SmaCC_Development-Compilation Model' -} - -{ #category : #'instance creation' } -SmaCCSourceReduceCode class >> onRHS: aSmaCCRHS source: aString [ - ^ (self onRHS: aSmaCCRHS) - source: aString; - yourself -] - -{ #category : #comparing } -SmaCCSourceReduceCode >> = anObject [ - ^ super = anObject and: [ self source = anObject source ] -] - -{ #category : #private } -SmaCCSourceReduceCode >> basicModelTypes: aSet [ - | index parseTree | - index := self returnedNodeIndex. - index notNil - ifTrue: [ ^ self basicModelTypes: aSet forIndex: index ]. - parseTree := RBParser parseExpression: self source onError: [ :e :p | ^ Array with: (self model classFor: Object) ]. - ^ self typesForTree: parseTree seen: aSet -] - -{ #category : #'initialize-release' } -SmaCCSourceReduceCode >> initialize [ - super initialize. - isImmediate := false -] - -{ #category : #accessing } -SmaCCSourceReduceCode >> isImmediate [ - ^ isImmediate -] - -{ #category : #accessing } -SmaCCSourceReduceCode >> isImmediate: aBoolean [ - isImmediate := aBoolean -] - -{ #category : #accessing } -SmaCCSourceReduceCode >> source [ - ^ source -] - -{ #category : #'initialize-release' } -SmaCCSourceReduceCode >> source: aString [ - source := aString -] - -{ #category : #private } -SmaCCSourceReduceCode >> typesForTree: aRBProgramNode seen: aSet [ - aRBProgramNode isReturn - ifTrue: [ ^ self typesForTree: aRBProgramNode value seen: aSet ]. - (aRBProgramNode isSequence and: [ aRBProgramNode statements notEmpty ]) - ifTrue: [ | types | - types := Set withAll: (self typesForTree: aRBProgramNode statements last seen: aSet). - aRBProgramNode - nodesDo: [ :each | - each isReturn - ifTrue: [ types addAll: (self typesForTree: each value seen: aSet) ] ]. - ^ types asArray ]. - (aRBProgramNode isLiteralNode or: [ aRBProgramNode isVariable ]) - ifTrue: [ (self returnedNodeIndexFor: aRBProgramNode) - ifNil: [ aRBProgramNode isLiteralNode - ifTrue: [ ^ Array with: (self model classFor: aRBProgramNode value class) ] ] - ifNotNil: [ :index | ^ self basicModelTypes: aSet forIndex: index ] ]. - (aRBProgramNode isMessage and: [ aRBProgramNode receiver isVariable and: [ aRBProgramNode receiver name = 'SmaCCToken' ] ]) - ifTrue: [ ^ Array with: (self model classFor: SmaCCToken) ]. - ^ Array with: (self model classFor: Object) -] diff --git a/src/SmaCC_Development/SmaCCStartingSymbol.class.st b/src/SmaCC_Development/SmaCCStartingSymbol.class.st deleted file mode 100644 index 99766fdc8..000000000 --- a/src/SmaCC_Development/SmaCCStartingSymbol.class.st +++ /dev/null @@ -1,38 +0,0 @@ -Class { - #name : #SmaCCStartingSymbol, - #superclass : #SmaCCNonTerminalSymbol, - #category : #'SmaCC_Development-Model' -} - -{ #category : #accessing } -SmaCCStartingSymbol >> asLRItemSet [ - | itemSet | - itemSet := self grammar newItemSet. - productions - do: - [ :each | - itemSet - add: - (SmaCCLR1Item - rhs: each - follow: - (SmaCCSymbolSet new - add: grammar emptySymbol; - yourself)) ]. - ^ itemSet -] - -{ #category : #accessing } -SmaCCStartingSymbol >> compileName [ - ^ (productions first at: 1) safeMethodName -] - -{ #category : #testing } -SmaCCStartingSymbol >> isStartingSymbol [ - ^ true -] - -{ #category : #public } -SmaCCStartingSymbol >> symbol [ - ^ productions first at: 1 -] diff --git a/src/SmaCC_Development/SmaCCStateEdge.class.st b/src/SmaCC_Development/SmaCCStateEdge.class.st deleted file mode 100644 index ef2e86b9a..000000000 --- a/src/SmaCC_Development/SmaCCStateEdge.class.st +++ /dev/null @@ -1,24 +0,0 @@ -" -SmaCCStateEdge is a SmaCCEdge on states (that are represented by symbols) in the scanner. -" -Class { - #name : #SmaCCStateEdge, - #superclass : #SmaCCEdge, - #category : #'SmaCC_Development-DFA/NFA' -} - -{ #category : #comparing } -SmaCCStateEdge >> <= aSmaCCEdge [ - ^ self class ~= aSmaCCEdge class - or: [ self transitionObjects first <= aSmaCCEdge transitionObjects first ] -] - -{ #category : #compiling } -SmaCCStateEdge >> codeSizeEstimate [ - ^ 4 * transitionObjects size -] - -{ #category : #compiling } -SmaCCStateEdge >> dispatchTo: aSmaCCCodeGenerator seen: aCollection [ - ^ aSmaCCCodeGenerator acceptStateEdge: self -] diff --git a/src/SmaCC_Development/SmaCCSymbol.class.st b/src/SmaCC_Development/SmaCCSymbol.class.st deleted file mode 100644 index 953d2b674..000000000 --- a/src/SmaCC_Development/SmaCCSymbol.class.st +++ /dev/null @@ -1,203 +0,0 @@ -" -SmaCCSymbol is an abstract class that represents a symbol in our grammar. Symbols can be either terminal or non-terminal. Terminal symbols are mapped to tokens in the grammar and non-terminals are made up of other symbols. - -Subclasses must implement the following messages: - accessing - calculateFirstTerminals - testing - isTerminal - -Instance Variables - firstTerminals the first terminal symbol that this can produce - name the name of the symbol - precedence the precedence for the symbol used for shift/reduce conflicts - -" -Class { - #name : #SmaCCSymbol, - #superclass : #SmaCCGrammarItem, - #instVars : [ - 'name', - 'precedence', - 'firstTerminals' - ], - #category : #'SmaCC_Development-Model' -} - -{ #category : #variables } -SmaCCSymbol class >> mergeOrderedVariableDefinitions: newVariableDefinitions [ - | result | - result := OrderedCollection new. - newVariableDefinitions - do: [ :collection | self mergeVariableDefinitions: collection into: result ]. - ^ result -] - -{ #category : #variables } -SmaCCSymbol class >> mergeVariableDefinitions: collection into: result [ - collection - do: - [ :each | - | variable | - variable := result - detect: [ :def | def variableName = each variableName ] - ifNone: [ result add: each copy ]. - each getterMethodName notNil - ifTrue: [ variable getterMethodName: each getterMethodName ]. - each setterMethodName notNil - ifTrue: [ variable setterMethodName: each setterMethodName ]. - each isCollection - ifTrue: [ variable isCollection: true ] ] -] - -{ #category : #'instance creation' } -SmaCCSymbol class >> name: aString [ - ^ self new - name: aString; - yourself -] - -{ #category : #testing } -SmaCCSymbol >> < aSmaCCSymbol [ - | myPos otherPos | - myPos := self position. - otherPos := aSmaCCSymbol position. - ^ myPos = otherPos - ifTrue: [ self name < aSmaCCSymbol name ] - ifFalse: [ myPos < otherPos ] -] - -{ #category : #private } -SmaCCSymbol >> annotateTokenVariables: aBlock [ - self productionsDo: [ :each | each annotateTokenVariables: aBlock ] -] - -{ #category : #private } -SmaCCSymbol >> basicModelTypesForVariable: aString into: productionTypes seen: aSet [ - self - productionsDo: - [ :each | - productionTypes - addAll: (each modelTypesForVariable: aString seen: aSet) ] -] - -{ #category : #accessing } -SmaCCSymbol >> calculateFirstTerminals [ - ^ self subclassResponsibility -] - -{ #category : #variables } -SmaCCSymbol >> computeVariableDefinitions [ - | variableCollections | - variableCollections := OrderedCollection new. - self - productionsDo: [ :each | variableCollections add: each variableDefinitions ]. - variableDefinitions := self class - mergeOrderedVariableDefinitions: variableCollections. - SmaCCVariableDefinition assignIndices: variableDefinitions. - ^ variableDefinitions -] - -{ #category : #accessing } -SmaCCSymbol >> createIdMethod [ - ^ false -] - -{ #category : #accessing } -SmaCCSymbol >> firstTerminals [ - ^ firstTerminals -] - -{ #category : #'initialize-release' } -SmaCCSymbol >> initialize [ - super initialize. - firstTerminals := Set new -] - -{ #category : #accessing } -SmaCCSymbol >> isEmptySymbol [ - ^ self = grammar emptySymbol -] - -{ #category : #testing } -SmaCCSymbol >> isStartingSymbol [ - ^ false -] - -{ #category : #testing } -SmaCCSymbol >> isTerminal [ - ^ self subclassResponsibility -] - -{ #category : #private } -SmaCCSymbol >> makeCaseInsensitive [ - -] - -{ #category : #accessing } -SmaCCSymbol >> name [ - ^ name -] - -{ #category : #'initialize-release' } -SmaCCSymbol >> name: aString [ - name := aString -] - -{ #category : #accessing } -SmaCCSymbol >> position [ - ^ self subclassResponsibility -] - -{ #category : #accessing } -SmaCCSymbol >> precedence [ - ^ precedence -] - -{ #category : #accessing } -SmaCCSymbol >> precedence: anInteger [ - precedence := anInteger -] - -{ #category : #printing } -SmaCCSymbol >> printOn: aStream [ - aStream nextPutAll: name -] - -{ #category : #accessing } -SmaCCSymbol >> productionsDo: aBlock [ - -] - -{ #category : #accessing } -SmaCCSymbol >> regularExpression [ - ^ nil -] - -{ #category : #testing } -SmaCCSymbol >> requiresNodeType [ - self - productionsDo: [ :each | - each hasNodeClassDefinition - ifTrue: [ ^ true ] ]. - ^ false -] - -{ #category : #accessing } -SmaCCSymbol >> safeMethodName [ - ^ self unsafeMethodName - collect: [ :each | - each isAlphaNumeric - ifTrue: [ each ] - ifFalse: [ $_ ] ] -] - -{ #category : #accessing } -SmaCCSymbol >> size [ - ^ 0 -] - -{ #category : #private } -SmaCCSymbol >> unsafeMethodName [ - ^ self printString -] diff --git a/src/SmaCC_Development/SmaCCSymbolSet.class.st b/src/SmaCC_Development/SmaCCSymbolSet.class.st deleted file mode 100644 index 1a4d0abc6..000000000 --- a/src/SmaCC_Development/SmaCCSymbolSet.class.st +++ /dev/null @@ -1,119 +0,0 @@ -Class { - #name : #SmaCCSymbolSet, - #superclass : #Model, - #instVars : [ - 'symbols', - 'components' - ], - #category : #'SmaCC_Development-Collections' -} - -{ #category : #'instance creation' } -SmaCCSymbolSet class >> basedOn: aSmaCCSymbolSet [ - ^ self new - baseOn: aSmaCCSymbolSet; - yourself -] - -{ #category : #accessing } -SmaCCSymbolSet >> add: aSmaCCSymbol [ - (symbols includes: aSmaCCSymbol) - ifTrue: [ ^ self ]. - symbols add: aSmaCCSymbol. - self changed -] - -{ #category : #accessing } -SmaCCSymbolSet >> addAll: aCollection [ - | todo | - todo := OrderedCollection with: self. - [ todo notEmpty ] - whileTrue: - [ | oldSize current | - current := todo removeFirst. - oldSize := current symbols size. - current symbols addAll: aCollection. - oldSize ~= current symbols size - ifTrue: [ todo addAll: current dependents ] ] -] - -{ #category : #accessing } -SmaCCSymbolSet >> addComponent: aSmaCCSymbolSet [ - (aSmaCCSymbolSet = self or: [ components includes: aSmaCCSymbolSet ]) - ifTrue: [ ^ self ]. - components add: aSmaCCSymbolSet. - aSmaCCSymbolSet addDependent: self. - self addAll: aSmaCCSymbolSet symbols -] - -{ #category : #accessing } -SmaCCSymbolSet >> addComponentsFrom: aSmaCCSymbolSet [ - aSmaCCSymbolSet components do: [ :each | self addComponent: each ] -] - -{ #category : #testing } -SmaCCSymbolSet >> allSatisfy: aBlock [ - ^ symbols allSatisfy: aBlock -] - -{ #category : #accessing } -SmaCCSymbolSet >> baseOn: aSmaCCSymbolSet [ - self addComponent: aSmaCCSymbolSet. - self addAll: aSmaCCSymbolSet symbols -] - -{ #category : #accessing } -SmaCCSymbolSet >> components [ - ^ components -] - -{ #category : #public } -SmaCCSymbolSet >> getDependents [ - ^ dependents -] - -{ #category : #testing } -SmaCCSymbolSet >> includes: aSmaCCSymbol [ - ^ symbols includes: aSmaCCSymbol -] - -{ #category : #'initialize-release' } -SmaCCSymbolSet >> initialize [ - super initialize. - symbols := Set new. - components := Set new -] - -{ #category : #accessing } -SmaCCSymbolSet >> mergeWith: aSmaCCSymbolSet [ - self addAll: aSmaCCSymbolSet symbols. - self addComponentsFrom: aSmaCCSymbolSet -] - -{ #category : #printing } -SmaCCSymbolSet >> printOn: aStream [ - (symbols asSortedCollection: [ :a :b | a name < b name ]) - do: [ :each | aStream nextPutAll: each printString ] - separatedBy: [ aStream space ] -] - -{ #category : #public } -SmaCCSymbolSet >> setDependents: aCollection [ - ^ dependents := aCollection -] - -{ #category : #accessing } -SmaCCSymbolSet >> size [ - ^ symbols size -] - -{ #category : #accessing } -SmaCCSymbolSet >> symbols [ - ^ symbols -] - -{ #category : #updating } -SmaCCSymbolSet >> update: anAspectSymbol with: aParameter from: aSender [ - (components includes: aSender) - ifTrue: [ self addAll: aSender symbols ] -] diff --git a/src/SmaCC_Development/SmaCCSymbolTableIndex.class.st b/src/SmaCC_Development/SmaCCSymbolTableIndex.class.st deleted file mode 100644 index ca0bc8e65..000000000 --- a/src/SmaCC_Development/SmaCCSymbolTableIndex.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #SmaCCSymbolTableIndex, - #superclass : #Object, - #instVars : [ - 'index', - 'symbol' - ], - #category : #'SmaCC_Development-Item Sets' -} - -{ #category : #'instance creation' } -SmaCCSymbolTableIndex class >> forIndex: anInteger symbol: aSmaCCSymbol [ - ^ self new - index: anInteger; - symbol: aSmaCCSymbol; - yourself -] - -{ #category : #comparing } -SmaCCSymbolTableIndex >> = anObject [ - ^ self class = anObject class - and: [ self index = anObject index and: [ self symbol = anObject symbol ] ] -] - -{ #category : #comparing } -SmaCCSymbolTableIndex >> hash [ - ^ index hashMultiply bitXor: symbol hash -] - -{ #category : #accessing } -SmaCCSymbolTableIndex >> index [ - ^ index -] - -{ #category : #accessing } -SmaCCSymbolTableIndex >> index: anObject [ - index := anObject -] - -{ #category : #accessing } -SmaCCSymbolTableIndex >> symbol [ - ^ symbol -] - -{ #category : #accessing } -SmaCCSymbolTableIndex >> symbol: anObject [ - symbol := anObject -] diff --git a/src/SmaCC_Development/SmaCCTerminalSymbol.class.st b/src/SmaCC_Development/SmaCCTerminalSymbol.class.st deleted file mode 100644 index 6668f32a1..000000000 --- a/src/SmaCC_Development/SmaCCTerminalSymbol.class.st +++ /dev/null @@ -1,67 +0,0 @@ -Class { - #name : #SmaCCTerminalSymbol, - #superclass : #SmaCCSymbol, - #instVars : [ - 'regularExpression', - 'createIdMethod' - ], - #category : #'SmaCC_Development-Model' -} - -{ #category : #private } -SmaCCTerminalSymbol >> calculateFirstTerminals [ - ^ false -] - -{ #category : #accessing } -SmaCCTerminalSymbol >> createIdMethod [ - ^ createIdMethod -] - -{ #category : #accessing } -SmaCCTerminalSymbol >> createIdMethod: aBoolean [ - createIdMethod := aBoolean -] - -{ #category : #'initialize-release' } -SmaCCTerminalSymbol >> initialize [ - super initialize. - firstTerminals add: self. - createIdMethod := false -] - -{ #category : #testing } -SmaCCTerminalSymbol >> isTerminal [ - ^ true -] - -{ #category : #private } -SmaCCTerminalSymbol >> makeCaseInsensitive [ - regularExpression notNil - ifTrue: [ regularExpression makeCaseInsensitive ] -] - -{ #category : #accessing } -SmaCCTerminalSymbol >> modelTypes: anIdentitySet [ - ^ Set with: (self model classFor: SmaCCToken) -] - -{ #category : #accessing } -SmaCCTerminalSymbol >> position [ - ^ self regularExpression ifNil: [ SmallInteger maxVal ] ifNotNil: [ :re | re position ifNil: [ 0 ] ] -] - -{ #category : #accessing } -SmaCCTerminalSymbol >> regularExpression [ - ^ regularExpression -] - -{ #category : #accessing } -SmaCCTerminalSymbol >> regularExpression: aSmaCCRegularExpressionNode [ - regularExpression := aSmaCCRegularExpressionNode -] - -{ #category : #private } -SmaCCTerminalSymbol >> unsafeMethodName [ - ^ name copyFrom: 2 to: name size - 1 -] diff --git a/src/SmaCC_Development/SmaCCToken.extension.st b/src/SmaCC_Development/SmaCCToken.extension.st deleted file mode 100644 index b113084c2..000000000 --- a/src/SmaCC_Development/SmaCCToken.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #SmaCCToken } - -{ #category : #'*SmaCC_Development' } -SmaCCToken >> position [ - ^ self startPosition -] diff --git a/src/SmaCC_Development/SmaCCTokenRegexNode.extension.st b/src/SmaCC_Development/SmaCCTokenRegexNode.extension.st deleted file mode 100644 index 8bf0f45b7..000000000 --- a/src/SmaCC_Development/SmaCCTokenRegexNode.extension.st +++ /dev/null @@ -1,16 +0,0 @@ -Extension { #name : #SmaCCTokenRegexNode } - -{ #category : #'*SmaCC_Development' } -SmaCCTokenRegexNode >> asRegularExpression [ - ^ (self topParent tokenNamed: name value) - ifNotNil: [ :rule | rule regularExpression copy ] - ifNil: [ (SmaCCGrammar implicitToken: name value) ifNil: [ self reportMissingTokenDefinition ] ] -] - -{ #category : #'*SmaCC_Development' } -SmaCCTokenRegexNode >> reportMissingTokenDefinition [ - SmaCCParserError new - messageText: 'Missing token definition'; - tag: name; - signal -] diff --git a/src/SmaCC_Development/SmaCCTokenRuleNode.extension.st b/src/SmaCC_Development/SmaCCTokenRuleNode.extension.st deleted file mode 100644 index b28e2a667..000000000 --- a/src/SmaCC_Development/SmaCCTokenRuleNode.extension.st +++ /dev/null @@ -1,25 +0,0 @@ -Extension { #name : #SmaCCTokenRuleNode } - -{ #category : #'*SmaCC_Development' } -SmaCCTokenRuleNode >> regularExpression [ - | re | - (self attributeNamed: #regularExpression ifAbsent: [ nil ]) - ifNotNil: [ :each | ^ each ]. - (self attributeNamed: #buildingRegularExpression ifAbsent: [ false ]) - ifTrue: [ self reportCircularDefinitionError ]. - self attributeNamed: #buildingRegularExpression put: true. - re := SmaCCSequenceRENode nodes: {regex regularExpression}. - self attributeNamed: #regularExpression put: re. - self removeAttributeNamed: #buildingRegularExpression. - re position: self name startPosition. - self states do: [ :each | re addState: each value asSymbol ]. - ^ re -] - -{ #category : #'*SmaCC_Development' } -SmaCCTokenRuleNode >> reportCircularDefinitionError [ - SmaCCParserError new - messageText: 'Circular token definition'; - tag: name; - signal -] diff --git a/src/SmaCC_Development/SmaCCVariableCalculation.class.st b/src/SmaCC_Development/SmaCCVariableCalculation.class.st deleted file mode 100644 index 594518195..000000000 --- a/src/SmaCC_Development/SmaCCVariableCalculation.class.st +++ /dev/null @@ -1,197 +0,0 @@ -Class { - #name : #SmaCCVariableCalculation, - #superclass : #Object, - #instVars : [ - 'grammar', - 'todo', - 'dependentsMap', - 'newVariables', - 'ourType', - 'currentRHS', - 'previousVariables' - ], - #category : #'SmaCC_Development-Compilation Model' -} - -{ #category : #accessing } -SmaCCVariableCalculation class >> calculateVariablesForGrammar: aSmaCCGrammar [ - self new calculateVariablesForGrammar: aSmaCCGrammar -] - -{ #category : #private } -SmaCCVariableCalculation >> addDependent: dependentSmaCCRHS to: aSmaCCRHS [ - (dependentsMap at: aSmaCCRHS ifAbsentPut: [ IdentitySet new ]) - add: dependentSmaCCRHS -] - -{ #category : #private } -SmaCCVariableCalculation >> addExternallyDefinedVariablesFrom: aSmaCCRHS [ - aSmaCCRHS variableDefinitions - do: - [ :each | - | variable | - variable := self variableNamed: each variableName. - (each isCollection - or: - [ (currentRHS locallyDefinesVariable: each variableName) - or: [ previousVariables includes: each variableName ] ]) - ifTrue: [ variable isCollection: true ] ] -] - -{ #category : #private } -SmaCCVariableCalculation >> addLocallyDefinedVariable: aString [ - (self hasVariableNamed: aString) - ifTrue: [ (self variableNamed: aString) isCollection: true ] - ifFalse: [ self addVariableNamed: aString ] -] - -{ #category : #private } -SmaCCVariableCalculation >> addRHS: aSmaCCRHS [ - (todo identityIncludes: aSmaCCRHS) - ifTrue: [ ^ self ]. - todo add: aSmaCCRHS -] - -{ #category : #private } -SmaCCVariableCalculation >> addRenamedVariableName: aString from: symbol [ - (self hasVariableNamed: aString) - ifTrue: [ (self variableNamed: aString) isCollection: true ] - ifFalse: - [ | variable | - variable := self addVariableNamed: aString. - variable isCollection - ifFalse: - [ symbol returnsSingleVariable - ifTrue: - [ symbol - productionsDo: - [ :rhs | - rhs variableDefinitions notEmpty - ifTrue: - [ variable - isCollection: - (variable isCollection - or: [ rhs variableDefinitions first isCollection ]) ] ] ] ] ] -] - -{ #category : #private } -SmaCCVariableCalculation >> addVariableNamed: aString [ - ^ newVariables add: (SmaCCVariableDefinition variableName: aString) -] - -{ #category : #private } -SmaCCVariableCalculation >> assignVariables [ - currentRHS variableDefinitions: newVariables -] - -{ #category : #private } -SmaCCVariableCalculation >> calculateNewVariables [ - ourType := currentRHS nodeType. - newVariables := OrderedCollection new. - previousVariables := #(). - currentRHS - variablesAndSymbolsDo: - [ :variable :symbol | - variable isNil - ifTrue: [ self processUnnamedSymbol: symbol ] - ifFalse: - [ symbol returnsSingleVariable - ifTrue: [ self addRenamedVariableName: variable from: symbol ] - ifFalse: [ self addLocallyDefinedVariable: variable ] ]. - previousVariables := newVariables - collect: [ :each | each variableName ] ] -] - -{ #category : #private } -SmaCCVariableCalculation >> calculateVariables [ - self rhsDo: [ :each | self addRHS: each ]. - [ todo notEmpty ] - whileTrue: [ self calculateVariablesFor: todo removeFirst ] -] - -{ #category : #private } -SmaCCVariableCalculation >> calculateVariablesFor: aSmaCCRHS [ - currentRHS := aSmaCCRHS. - self calculateNewVariables. - self hasVariableChanges - ifTrue: [ self assignVariables. - self recalculateDependents ] -] - -{ #category : #private } -SmaCCVariableCalculation >> calculateVariablesForGrammar: aSmaCCGrammar [ - grammar := aSmaCCGrammar. - dependentsMap := IdentityDictionary new. - todo := OrderedCollection new. - self setupVariableDependents. - self calculateVariables -] - -{ #category : #private } -SmaCCVariableCalculation >> hasVariableChanges [ - ^ newVariables - anySatisfy: [ :each | (currentRHS variableDefinitions includes: each) not ] -] - -{ #category : #private } -SmaCCVariableCalculation >> hasVariableNamed: aString [ - ^ newVariables anySatisfy: [ :each | each variableName = aString ] -] - -{ #category : #private } -SmaCCVariableCalculation >> processUnnamedSymbol: aSmaCCSymbol [ - aSmaCCSymbol - productionsDo: - [ :rhs | - (self shouldAddVariablesFrom: rhs) - ifTrue: [ self addExternallyDefinedVariablesFrom: rhs ] ] -] - -{ #category : #private } -SmaCCVariableCalculation >> recalculateDependents [ - (dependentsMap at: currentRHS ifAbsent: [ #() ]) - do: [ :each | self addRHS: each ] -] - -{ #category : #private } -SmaCCVariableCalculation >> rhsDo: aBlock [ - grammar symbols - do: [ :each | - each isStartingSymbol - ifFalse: [ each productionsDo: aBlock ] ] -] - -{ #category : #private } -SmaCCVariableCalculation >> setupVariableDependents [ - self rhsDo: [ :rhs | self setupVariableDependentsFor: rhs ] -] - -{ #category : #private } -SmaCCVariableCalculation >> setupVariableDependentsFor: aSmaCCRHS [ - aSmaCCRHS - variablesAndSymbolsDo: - [ :variable :symbol | - (variable isNil or: [ symbol returnsSingleVariable ]) - ifTrue: [ symbol - productionsDo: [ :rhs | self addDependent: aSmaCCRHS to: rhs ] ] ] -] - -{ #category : #private } -SmaCCVariableCalculation >> shouldAddVariablesFrom: aSmaCCRHS [ - | theirType | - ourType isNil - ifTrue: [ ^ true ]. - theirType := aSmaCCRHS nodeType. - theirType isNil - ifTrue: [ ^ true ]. - ourType = theirType - ifTrue: [ ^ true ]. - ^ (theirType hierarchyIncludes: ourType) not -] - -{ #category : #private } -SmaCCVariableCalculation >> variableNamed: aString [ - ^ newVariables - detect: [ :each | each variableName = aString ] - ifNone: [ self addVariableNamed: aString ] -] diff --git a/src/SmaCC_Development/SmaCCVariableDefinition.class.st b/src/SmaCC_Development/SmaCCVariableDefinition.class.st deleted file mode 100644 index 8d52a4f58..000000000 --- a/src/SmaCC_Development/SmaCCVariableDefinition.class.st +++ /dev/null @@ -1,229 +0,0 @@ -" -SmaCCVariableDefinition represents a variable for a node class. - -Instance Variables - baseType the type of the variable - getterMethodName the getter selector - index the index of the variable (if we are pulling up a collection of variables from a symbol) - isAlwaysAssigned does the variable always have a value or can it be nil - isCollection does the variable represent a collection of values - setterMethodName the setter selector - variableName the name of the variable - -" -Class { - #name : #SmaCCVariableDefinition, - #superclass : #Object, - #instVars : [ - 'variableName', - 'isCollection', - 'baseType', - 'isAlwaysAssigned', - 'getterMethodName', - 'setterMethodName', - 'index' - ], - #classVars : [ - 'PluralNameBlock', - 'PluralNames' - ], - #category : #'SmaCC_Development-Compilation Model' -} - -{ #category : #accessing } -SmaCCVariableDefinition class >> assignIndices: aCollection [ - aCollection keysAndValuesDo: [ :index :each | each index: index ] -] - -{ #category : #accessing } -SmaCCVariableDefinition class >> pluralNameBlock [ - ^ PluralNameBlock ifNil: [ ^ [ :value | nil ] ] -] - -{ #category : #accessing } -SmaCCVariableDefinition class >> pluralNameBlock: aBlock [ - PluralNameBlock := aBlock -] - -{ #category : #private } -SmaCCVariableDefinition class >> pluralNameFor: aString [ - | size | - (self pluralNameBlock value: aString) - ifNotNil: [ :result | ^ result ]. - size := aString size. - 1 to: size do: - [ :i | - (self pluralNames - at: (aString copyFrom: size - i + 1 to: size) - ifAbsent: [ nil ]) - ifNotNil: [ :ending | ^ (aString copyFrom: 1 to: size - i) , ending ] ]. - ^ aString copyWith: $s -] - -{ #category : #accessing } -SmaCCVariableDefinition class >> pluralNames [ - PluralNames isNil - ifTrue: - [ PluralNames := Dictionary new. - PluralNames - at: 's' put: 'ses'; - at: 'y' put: 'ies'; - at: 'x' put: 'xes'; - at: 'ch' put: 'ches' ]. - ^ PluralNames -] - -{ #category : #accessing } -SmaCCVariableDefinition class >> pluralNames: aDictionary [ - PluralNames := aDictionary -] - -{ #category : #'instance creation' } -SmaCCVariableDefinition class >> variableName: aString [ - ^ self new - variableName: aString; - isCollection: false; - yourself -] - -{ #category : #comparing } -SmaCCVariableDefinition >> = anObject [ - ^ self class = anObject class - and: - [ self variableName = anObject variableName - and: [ self isCollection = anObject isCollection ] ] -] - -{ #category : #accessing } -SmaCCVariableDefinition >> baseType [ - ^ baseType -] - -{ #category : #'initialize-release' } -SmaCCVariableDefinition >> baseType: modelClass [ - baseType := modelClass -] - -{ #category : #accessing } -SmaCCVariableDefinition >> collectionType [ - ^ self baseType model classFor: OrderedCollection -] - -{ #category : #accessing } -SmaCCVariableDefinition >> getterMethodName [ - ^ getterMethodName -] - -{ #category : #accessing } -SmaCCVariableDefinition >> getterMethodName: aString [ - getterMethodName := aString -] - -{ #category : #comparing } -SmaCCVariableDefinition >> hash [ - ^ self variableName hash bitXor: self isCollection hash -] - -{ #category : #accessing } -SmaCCVariableDefinition >> index [ - ^ index -] - -{ #category : #accessing } -SmaCCVariableDefinition >> index: anInteger [ - index := anInteger -] - -{ #category : #accessing } -SmaCCVariableDefinition >> isAlwaysAssigned [ - ^ isAlwaysAssigned or: [ self isCollection ] -] - -{ #category : #accessing } -SmaCCVariableDefinition >> isAlwaysAssigned: aBoolean [ - isAlwaysAssigned := aBoolean -] - -{ #category : #accessing } -SmaCCVariableDefinition >> isBaseNodeType [ - ^ self baseType - includesClass: (self baseType model classFor: SmaCCParseNode) -] - -{ #category : #accessing } -SmaCCVariableDefinition >> isBasePossibleNodeType [ - ^ self isBaseNodeType - or: - [ (self baseType model classFor: SmaCCParseNode) - includesClass: self baseType ] -] - -{ #category : #accessing } -SmaCCVariableDefinition >> isBaseTokenType [ - ^ self baseType - includesClass: (self baseType model classFor: SmaCCToken) -] - -{ #category : #accessing } -SmaCCVariableDefinition >> isCollection [ - ^ isCollection -] - -{ #category : #'initialize-release' } -SmaCCVariableDefinition >> isCollection: aBoolean [ - isCollection := aBoolean -] - -{ #category : #accessing } -SmaCCVariableDefinition >> isNodeCollectionType [ - ^ self isCollection and: [ self isBaseNodeType ] -] - -{ #category : #accessing } -SmaCCVariableDefinition >> isNodeType [ - ^ self isCollection not and: [ self isBaseNodeType ] -] - -{ #category : #accessing } -SmaCCVariableDefinition >> isPossibleNodeCollectionType [ - ^ self isCollection and: [ self isBasePossibleNodeType ] -] - -{ #category : #accessing } -SmaCCVariableDefinition >> isPossibleNodeType [ - ^ self isCollection not and: [ self isBasePossibleNodeType ] -] - -{ #category : #accessing } -SmaCCVariableDefinition >> setterMethodName [ - ^ setterMethodName -] - -{ #category : #accessing } -SmaCCVariableDefinition >> setterMethodName: aString [ - setterMethodName := aString -] - -{ #category : #accessing } -SmaCCVariableDefinition >> sourceVariableName [ - ^ self isCollection - ifTrue: [ self class pluralNameFor: variableName ] - ifFalse: [ variableName ] -] - -{ #category : #accessing } -SmaCCVariableDefinition >> type [ - ^ self isCollection - ifTrue: [ self collectionType ] - ifFalse: [ self baseType ] -] - -{ #category : #accessing } -SmaCCVariableDefinition >> variableName [ - ^ variableName -] - -{ #category : #'initialize-release' } -SmaCCVariableDefinition >> variableName: aString [ - variableName := aString -] diff --git a/src/SmaCC_Development/SmaCCVariableReduceCode.class.st b/src/SmaCC_Development/SmaCCVariableReduceCode.class.st deleted file mode 100644 index 20238ad9e..000000000 --- a/src/SmaCC_Development/SmaCCVariableReduceCode.class.st +++ /dev/null @@ -1,24 +0,0 @@ -" -SmaCCVariableReduceCode represents a reduce action that returns a collection of objects that represent the variables defined by the rhs. When this is pulled up into a create node, it will use the variable collection to create the node. - -" -Class { - #name : #SmaCCVariableReduceCode, - #superclass : #SmaCCReduceCode, - #category : #'SmaCC_Development-Compilation Model' -} - -{ #category : #private } -SmaCCVariableReduceCode >> basicModelTypes: aSet [ - ^ Array with: (self model classFor: OrderedCollection) -] - -{ #category : #public } -SmaCCVariableReduceCode >> returnsVariableCollection [ - ^ true -] - -{ #category : #accessing } -SmaCCVariableReduceCode >> source [ - ^ self codeGenerator variableArrayAction: rhs -] diff --git a/src/SmaCC_Development/SmaCCVisitorClassDefinition.class.st b/src/SmaCC_Development/SmaCCVisitorClassDefinition.class.st deleted file mode 100644 index 8517468be..000000000 --- a/src/SmaCC_Development/SmaCCVisitorClassDefinition.class.st +++ /dev/null @@ -1,51 +0,0 @@ -" -SmaCCVisitorClassDefinition represents the visitor class for the grammar. - -Instance Variables - nodeClassDefinitions the node classes to create the visitor for -" -Class { - #name : #SmaCCVisitorClassDefinition, - #superclass : #SmaCCClassDefinition, - #instVars : [ - 'nodeClassDefinitions' - ], - #category : #'SmaCC_Development-Compilation Model' -} - -{ #category : #'instance creation' } -SmaCCVisitorClassDefinition class >> forClassDefinitions: aCollection [ - ^ self new - nodeClassDefinitions: aCollection; - yourself -] - -{ #category : #compiling } -SmaCCVisitorClassDefinition >> compileMethodsAndVariables [ - nodeClassDefinitions do: [ :each | self compileVisitMethodFor: each ]. - self codeGenerator - compileAcceptNodeMethodFor: self - rootNode: grammar rootDefinition -] - -{ #category : #compiling } -SmaCCVisitorClassDefinition >> compileVisitMethodFor: aSmaCCNodeClassDefinition [ - self codeGenerator - compileVisitMethodFor: aSmaCCNodeClassDefinition - visitor: self -] - -{ #category : #accessing } -SmaCCVisitorClassDefinition >> name [ - ^ self modelClass name -] - -{ #category : #'initialize-release' } -SmaCCVisitorClassDefinition >> nodeClassDefinitions: aCollection [ - nodeClassDefinitions := aCollection -] - -{ #category : #private } -SmaCCVisitorClassDefinition >> rootClassName [ - ^ SmaCCParseNodeVisitor name -] diff --git a/src/SmaCC_Development/package.st b/src/SmaCC_Development/package.st deleted file mode 100644 index 54e004719..000000000 --- a/src/SmaCC_Development/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_Development' } diff --git a/src/SmaCC_Development_UI/SmaCCParser.extension.st b/src/SmaCC_Development_UI/SmaCCParser.extension.st deleted file mode 100644 index d4531776b..000000000 --- a/src/SmaCC_Development_UI/SmaCCParser.extension.st +++ /dev/null @@ -1,44 +0,0 @@ -Extension { #name : #SmaCCParser } - -{ #category : #'*SmaCC_Development_UI' } -SmaCCParser class >> gtDefinitionStringViewIn: composite [ - - composite text - title: 'Source'; - display: [ self definitionString ] -] - -{ #category : #'*SmaCC_Development_UI' } -SmaCCParser class >> gtGraphReferencesViewIn: composite [ - - | tree nodes | - (Smalltalk includesKey: #RTBundleBuilder) - ifFalse: [ ^ nil ]. - tree := self definitionAST. - tree isNil - ifTrue: [ ^ nil ]. - nodes := tree rules select: [ :each | (each isKindOf: SmaCCProductionRuleNode) or: [ each isKindOf: SmaCCTokenRuleNode ] ]. - composite roassal2 - title: 'References'; - initializeView: [ | b view | - view := (Smalltalk at: #RTView) new. - b := (Smalltalk at: #RTBundleBuilder) new. - b view: view. - b labelShape text: #displayString. - b - explore: '' - using: [ :e | - e == '' - ifTrue: [ nodes ] - ifFalse: [ #() ] ]. - b elements do: [ :each | each attributes at: #depth put: 2 ]. - b - useBezierlineWith: [ :e | - e = '' - ifTrue: [ #() ] - ifFalse: [ e ruleReferences ] ]. - b bezier color: Color blue trans. - b withoutSlider. - b build. - view ] -] diff --git a/src/SmaCC_Development_UI/SmaCCParserGenerator.class.st b/src/SmaCC_Development_UI/SmaCCParserGenerator.class.st deleted file mode 100644 index f33ad18fa..000000000 --- a/src/SmaCC_Development_UI/SmaCCParserGenerator.class.st +++ /dev/null @@ -1,621 +0,0 @@ -Class { - #name : #SmaCCParserGenerator, - #superclass : #ComposableModel, - #instVars : [ - 'tabModel', - 'definitionModel', - 'messagesModel', - 'symbolsModel', - 'itemSetsModel', - 'testModel', - 'parserClassName', - 'scannerClassName', - 'codeGeneratorType', - 'savedDefinition', - 'menu', - 'viewItemSets', - 'viewSymbols', - 'menuItems', - 'packageName' - ], - #classVars : [ - 'ShowPrecedenceConflicts' - ], - #category : #'SmaCC_Development_UI' -} - -{ #category : #specs } -SmaCCParserGenerator class >> defaultSpec [ - - ^ SpecColumnLayout composed - add: #menu height: self toolbarHeight; - add: #tabs; - yourself -] - -{ #category : #'class initialization' } -SmaCCParserGenerator class >> initialize [ - ShowPrecedenceConflicts := false -] - -{ #category : #'world menu' } -SmaCCParserGenerator class >> menuCommandOn: aBuilder [ - - (aBuilder item: #'SmaCC Parser Generator') - parent: #Tools; - order: 490.1; - help: 'SmaCC Parser Generator Tool'; - action: [ self open ] -] - -{ #category : #'instance creation' } -SmaCCParserGenerator class >> open [ - ^ self new - extent: 550 @ 450; - openWithSpec; - yourself -] - -{ #category : #actions } -SmaCCParserGenerator >> close [ - self isModified - ifTrue: [ self promptToSaveChanges - ifFalse: [ ^ self ] ]. - self window close -] - -{ #category : #private } -SmaCCParserGenerator >> codeGeneratorClass [ - ^ SmaCCCodeGenerator withAllSubclasses - detect: [ :each | each typeName = codeGeneratorType ] - ifNone: [ SmaCCSmalltalkCodeGenerator new ] -] - -{ #category : #private } -SmaCCParserGenerator >> codeGeneratorClasses [ - ^ SmaCCCodeGenerator withAllSubclasses select: [ :each | each typeName notNil ] -] - -{ #category : #actions } -SmaCCParserGenerator >> compile [ - ^self compile: #LALR1 -] - -{ #category : #private } -SmaCCParserGenerator >> compile: aSymbol [ - | grammar stream oldCharacterSize parserCompiler messages | - (self scannerClassName isEmpty or: [ self parserClassName isEmpty ]) - ifTrue: [ ^ UIManager default alert: 'Both classes are not specified' ]. - ((Smalltalk includesKey: self parserClassName) - or: [ packageName notNil ]) - ifFalse: [ self setPackage. - packageName isNil - ifTrue: [ ^ self ] ]. - messages := OrderedCollection new. - Cursor wait - showWhile: [ oldCharacterSize := SmaCCGrammar maximumCharacterValue. - [ self verifyParser - ifFalse: [ ^ self ]. - parserCompiler := self compiler. - parserCompiler - codeGenerator: self codeGeneratorClass new; - buildDefinition: self definition. - parserCompiler codeGenerator defaultCategory: packageName. - parserCompiler - scannerClass: self scannerClassName; - parserClass: self parserClassName. - grammar := parserCompiler grammar. - grammar type: aSymbol. - stream := WriteStream on: String new. - [ parserCompiler createChanges. - parserCompiler codeGenerator compileChanges. - viewSymbols - ifTrue: [ symbolsModel text: parserCompiler symbolsComment ]. - viewItemSets - ifTrue: [ itemSetsModel text: parserCompiler itemSetsComment ] ] - on: SmaCCCompilationNotification - do: [ :ex | - (ShowPrecedenceConflicts - or: [ ('*precedence*' match: ex messageText) not ]) - ifTrue: [ messages - add: - ex messageText , (String with: Character cr with: Character cr) - , ex tag ]. - ex pass ]. - messages asSortedCollection - do: [ :each | - stream - nextPutAll: '-------------------------'; - cr; - nextPutAll: each; - cr ]. - messagesModel text: stream contents. - messagesModel text notEmpty - ifTrue: [ tabModel selectedTab: (tabModel tabs at: 2) ]. - self markAsUnmodified ] - ensure: [ SmaCCGrammar maximumCharacterValue: oldCharacterSize ] ] -] - -{ #category : #private } -SmaCCParserGenerator >> compiler [ - ^SmaCCGrammarCompiler new -] - -{ #category : #actions } -SmaCCParserGenerator >> debugParse [ - | process | - process := [ self parserClass parse: testModel text asString ] newProcess. - [ (process suspendedContext receiver isKindOf: SmaCCParser) and: [ process suspendedContext selector = #parse ] ] - whileFalse: [ process step: process suspendedContext ]. - process debug -] - -{ #category : #private } -SmaCCParserGenerator >> definition [ - ^ definitionModel text asString -] - -{ #category : #private } -SmaCCParserGenerator >> definition: source [ - definitionModel text: source -] - -{ #category : #initialization } -SmaCCParserGenerator >> definitionTab [ - definitionModel := self instantiate: TextModel. - definitionModel autoAccept: true. - ^ self newTab - closeable: false; - label: 'Definition'; - presenter: definitionModel; - yourself -] - -{ #category : #private } -SmaCCParserGenerator >> displayError: aString at: position [ - self textWidget - ifNotNil: - [ :each | - each - text: (each text copyFrom: 1 to: position - 1) , aString , ' ->' , (each text copyFrom: position to: each text size). - each setSelection: (position to: position + aString size + 2) ] -] - -{ #category : #initialization } -SmaCCParserGenerator >> fileMenu [ - ^ MenuPresenter new - addGroup: [ :group | - group - addItem: [ :item | - item - name: 'Open...'; - action: [ self findParserClass ] ]; - addItem: [ :item | - item - name: 'Save'; - action: [ self compile ] ] ]; - addGroup: [ :group | - group - addItem: [ :item | - item - name: 'Exit'; - action: [ self close ] ] ] -] - -{ #category : #actions } -SmaCCParserGenerator >> findParserClass [ - | class subclasses | - self isModified - ifTrue: [ self promptToSaveChanges - ifFalse: [ ^ self ] ]. - subclasses := (SmaCCParser allSubclasses asSortedCollection: [ :a :b | a name < b name ]) asArray. - class := UIManager default - chooseFrom: (subclasses collect: [ :each | each name ]) - values: subclasses - message: 'What class do you want to use?'. - class isNil - ifTrue: [ ^ self ]. - self parserClassName: class name. - self updateDefinitionFor: class. - self markAsUnmodified -] - -{ #category : #initialization } -SmaCCParserGenerator >> initialize [ - parserClassName := ''. - scannerClassName := ''. - codeGeneratorType := #Smalltalk. - savedDefinition := ''. - viewSymbols := true. - viewItemSets := false. - menuItems := Dictionary new. - super initialize -] - -{ #category : #initialization } -SmaCCParserGenerator >> initializeMenubar [ - menu := MenuPresenter new - addGroup: [ :group | - group - addItem: [ :item | - item - name: 'File'; - subMenu: self fileMenu ]; - addItem: [ :item | - item - name: 'Options'; - subMenu: self optionsMenu ]; - addItem: [ :item | - item - name: 'View'; - subMenu: self viewMenu ] ] -] - -{ #category : #initialization } -SmaCCParserGenerator >> initializeTabModel [ - tabModel := self instantiate: SmaCCTabManagerPresenter. - tabModel - addTab: self definitionTab; - addTab: self messagesTab; - addTab: self symbolsTab; - addTab: self itemSetsTab; - addTab: self testTab -] - -{ #category : #initialization } -SmaCCParserGenerator >> initializeWidgets [ - self initializeTabModel. - self initializeMenubar. - self updateOptionsMenu. - self updateViewMenu -] - -{ #category : #private } -SmaCCParserGenerator >> isModified [ - ^ savedDefinition ~= self definition -] - -{ #category : #private } -SmaCCParserGenerator >> isValidName: aString [ - ^ aString first isUppercase and: [ RBScanner isVariable: aString ] -] - -{ #category : #initialization } -SmaCCParserGenerator >> itemSetsTab [ - itemSetsModel := self instantiate: TextModel. - itemSetsModel disable. - ^ self newTab - closeable: false; - label: 'Item Sets'; - presenter: itemSetsModel; - yourself -] - -{ #category : #private } -SmaCCParserGenerator >> language [ - ^ codeGeneratorType -] - -{ #category : #actions } -SmaCCParserGenerator >> markAsUnmodified [ - savedDefinition := self definition -] - -{ #category : #accessing } -SmaCCParserGenerator >> menu [ - ^ menu -] - -{ #category : #private } -SmaCCParserGenerator >> menuItemFor: aSymbol [ - ^ menuItems at: aSymbol -] - -{ #category : #initialization } -SmaCCParserGenerator >> messagesTab [ - messagesModel := self instantiate: TextModel. - messagesModel disable. - ^ self newTab - closeable: false; - label: 'Messages'; - presenter: messagesModel; - yourself -] - -{ #category : #initialization } -SmaCCParserGenerator >> optionsMenu [ - ^ MenuPresenter new - addGroup: [ :group | - group - addItem: [ :item | - menuItems at: #setScannerClass put: item. - item - autoRefresh: true; - name: 'Scanner Class...'; - action: [ self setScannerClass ] ]; - addItem: [ :item | - menuItems at: #setParserClass put: item. - item - autoRefresh: true; - name: 'Parser Class...'; - action: [ self setParserClass ] ]; - addItem: [ :item | - menuItems at: #setPackage put: item. - item - autoRefresh: true; - name: 'Set Package...'; - action: [ self setPackage ] ] ]; - addGroup: [ :group | - group - addItem: [ :item | - menuItems at: #optimizeTransitionTable put: item. - item - autoRefresh: true; - name: 'Optimize Transition Table'; - action: [ self toggleOptimizeTransitionTable ] ] ] -] - -{ #category : #actions } -SmaCCParserGenerator >> parse [ - self parseAndEvaluate: [ :each | UIManager default message: 'Parses without errors' ] -] - -{ #category : #private } -SmaCCParserGenerator >> parseAndEvaluate: aBlock [ - | class | - class := self parserClass. - class isNil - ifTrue: [ ^ UIManager default alert: 'No parser defined' ]. - aBlock - value: - (class - parse: testModel text asString - onError: - [ :aString :position | - tabModel selectedTab: tabModel tabs last. - self displayError: aString at: position. - ^ self ]) -] - -{ #category : #actions } -SmaCCParserGenerator >> parseAndInspect [ - self parseAndEvaluate: [ :each | each inspect ] -] - -{ #category : #private } -SmaCCParserGenerator >> parserClass [ - self parserClassName isEmpty - ifTrue: [ ^ nil ]. - ^ Smalltalk at: self parserClassName asSymbol -] - -{ #category : #accessing } -SmaCCParserGenerator >> parserClassName [ - ^ parserClassName -] - -{ #category : #accessing } -SmaCCParserGenerator >> parserClassName: aString [ - parserClassName := aString. - self updateOptionsMenu -] - -{ #category : #private } -SmaCCParserGenerator >> promptToSaveChanges [ - ^ (self confirm: 'The definition has been modified. Do you wish to retain your changes?') not -] - -{ #category : #accessing } -SmaCCParserGenerator >> scannerClassName [ - ^ scannerClassName -] - -{ #category : #accessing } -SmaCCParserGenerator >> scannerClassName: aString [ - scannerClassName := aString. - self updateOptionsMenu -] - -{ #category : #actions } -SmaCCParserGenerator >> setCodeGenerator: aSymbol [ - codeGeneratorType := aSymbol -] - -{ #category : #actions } -SmaCCParserGenerator >> setPackage [ - | name | - name := UIManager default - enterOrRequestFrom: RPackage organizer packageNames asSortedCollection - title: 'Select package:'. - (name isNil or: [ name isEmpty ]) - ifTrue: [ ^ self ]. - packageName := name -] - -{ #category : #actions } -SmaCCParserGenerator >> setParserClass [ - | name | - name := UIManager default request: 'Enter parser class name:' initialAnswer: self parserClassName. - (name isNil or: [ name isEmpty ]) - ifTrue: [ ^ self ]. - (self isValidName: name) - ifFalse: [ ^ UIManager default inform: 'Invalid Class Name' ]. - self parserClassName: name asSymbol -] - -{ #category : #actions } -SmaCCParserGenerator >> setScannerClass [ - | name | - name := UIManager default request: 'Enter scanner class name:' initialAnswer: self scannerClassName. - (name isNil or: [ name isEmpty ]) - ifTrue: [ ^ self ]. - (self isValidName: name) - ifFalse: [ ^ UIManager default inform: 'Invalid Class Name' ]. - self scannerClassName: name asSymbol -] - -{ #category : #private } -SmaCCParserGenerator >> switchToDefinition [ - tabModel selectedTab label ~= 'Definition' - ifTrue: [ tabModel selectedTab: tabModel tabs first ] -] - -{ #category : #initialization } -SmaCCParserGenerator >> symbolsTab [ - symbolsModel := self instantiate: TextModel. - symbolsModel disable. - ^ self newTab - closeable: false; - label: 'Symbols'; - presenter: symbolsModel; - yourself -] - -{ #category : #accessing } -SmaCCParserGenerator >> tabs [ - ^ tabModel -] - -{ #category : #initialization } -SmaCCParserGenerator >> testMenu: aMenu [ - ^ aMenu - add: 'Find...' selector: #find; - addLine; - add: 'Evaluate' target: self selector: #parse; - add: 'Inspect...' target: self selector: #parseAndInspect; - add: 'Debug' target: self selector: #debugParse; - yourself -] - -{ #category : #initialization } -SmaCCParserGenerator >> testTab [ - testModel := self instantiate: TextModel. - testModel - autoAccept: true; - menuHolder: [ :mnu | self testMenu: mnu ]. - ^ self newTab - closeable: false; - label: 'Test'; - presenter: testModel; - yourself -] - -{ #category : #private } -SmaCCParserGenerator >> textWidget [ - tabModel selectedTab == definitionModel owner - ifTrue: [ ^ definitionModel ]. - tabModel selectedTab == testModel owner - ifTrue: [ ^ testModel ]. - ^ nil -] - -{ #category : #accessing } -SmaCCParserGenerator >> title [ - ^ 'SmaCC' -] - -{ #category : #actions } -SmaCCParserGenerator >> toggleOptimizeTransitionTable [ - SmaCCGrammarCompiler toggleOptimizeTransitionTable. - self updateOptionsMenu -] - -{ #category : #private } -SmaCCParserGenerator >> updateDefinitionFor: parserClass [ - | scannerClass | - scannerClass := [ parserClass scannerClass ] - on: Error - do: [ :ex | ex return: nil ]. - scannerClass notNil - ifTrue: [ self scannerClassName: scannerClass name ]. - self definition: parserClass definitionString. - messagesModel text: ''. - symbolsModel text: ''. - itemSetsModel text: ''. - self switchToDefinition -] - -{ #category : #private } -SmaCCParserGenerator >> updateMenuItem: aSymbol checked: aBoolean [ - | item | - item := self menuItemFor: aSymbol. - item - icon: - (self - iconNamed: - (aBoolean - ifTrue: [ #checkBoxOn ] - ifFalse: [ #checkBoxOff ])) -] - -{ #category : #private } -SmaCCParserGenerator >> updateOptionsMenu [ - (self menuItemFor: #setScannerClass) - name: - 'Scanner Class' - , - (scannerClassName isEmpty - ifTrue: [ '' ] - ifFalse: [ ' (' , scannerClassName , ')' ]) , '...'. - (self menuItemFor: #setParserClass) - name: - 'Parser Class' - , - (parserClassName isEmpty - ifTrue: [ '' ] - ifFalse: [ ' (' , parserClassName , ')' ]) , '...'. - self - updateMenuItem: #optimizeTransitionTable - checked: SmaCCGrammarCompiler optimizeTransitionTable -] - -{ #category : #private } -SmaCCParserGenerator >> updateViewMenu [ - self updateMenuItem: #viewSymbolsClicked checked: viewSymbols. - self updateMenuItem: #viewItemSetsClicked checked: viewItemSets -] - -{ #category : #private } -SmaCCParserGenerator >> verifyParser [ - ^ [ SmaCCGrammarCompiler new - codeGenerator: self codeGeneratorClass new; - buildDefinition: self definition. - true ] - on: SmaCCParserError - do: - [ :ex | - self switchToDefinition. - self displayError: ex description at: ex tag position. - ex return: false ] -] - -{ #category : #actions } -SmaCCParserGenerator >> viewItemSetsClicked [ - viewItemSets := viewItemSets not. - self updateViewMenu -] - -{ #category : #initialization } -SmaCCParserGenerator >> viewMenu [ - ^ MenuPresenter new - addGroup: [ :group | - group - addItem: [ :item | - menuItems at: #viewSymbolsClicked put: item. - item - autoRefresh: true; - name: 'Symbols'; - action: [ self viewSymbolsClicked ] ]; - addItem: [ :item | - menuItems at: #viewItemSetsClicked put: item. - item - autoRefresh: true; - name: 'Item Sets'; - action: [ self viewItemSetsClicked ] ] ] -] - -{ #category : #actions } -SmaCCParserGenerator >> viewSymbolsClicked [ - viewSymbols := viewSymbols not. - self updateViewMenu -] diff --git a/src/SmaCC_Development_UI/SmaCCTabManagerPresenter.class.st b/src/SmaCC_Development_UI/SmaCCTabManagerPresenter.class.st deleted file mode 100644 index 3bbc057ba..000000000 --- a/src/SmaCC_Development_UI/SmaCCTabManagerPresenter.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #SmaCCTabManagerPresenter, - #superclass : #TabManagerPresenter, - #category : #'SmaCC_Development_UI' -} - -{ #category : #'api-focus' } -SmaCCTabManagerPresenter >> eventKeyStrokesForNextFocus [ - ^ #() -] - -{ #category : #'api-focus' } -SmaCCTabManagerPresenter >> eventKeyStrokesForPreviousFocus [ - ^ #() -] diff --git a/src/SmaCC_Development_UI/package.st b/src/SmaCC_Development_UI/package.st deleted file mode 100644 index f32e7ab20..000000000 --- a/src/SmaCC_Development_UI/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_Development_UI' } diff --git a/src/SmaCC_GLR_Runtime/Object.extension.st b/src/SmaCC_GLR_Runtime/Object.extension.st deleted file mode 100644 index c082b91e7..000000000 --- a/src/SmaCC_GLR_Runtime/Object.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #Object } - -{ #category : #'*SmaCC_GLR_Runtime' } -Object >> performOnSmaCCParser: aSmaCCParser [ - ^ self -] diff --git a/src/SmaCC_GLR_Runtime/SmaCCAmbiguousResultNotification.class.st b/src/SmaCC_GLR_Runtime/SmaCCAmbiguousResultNotification.class.st deleted file mode 100644 index 6c7539011..000000000 --- a/src/SmaCC_GLR_Runtime/SmaCCAmbiguousResultNotification.class.st +++ /dev/null @@ -1,38 +0,0 @@ -" -SmaCCAmbiguousResultNotification is a notification that is signaled when the GLR parser accepts multiple parses. The user can catch this signal and resume it with the correct parse. The parameters of the notification are the potential parses. - -Instance Variables: - parser the parser that parsed the ambiguous results - - -" -Class { - #name : #SmaCCAmbiguousResultNotification, - #superclass : #Notification, - #instVars : [ - 'parser' - ], - #category : #'SmaCC_GLR_Runtime' -} - -{ #category : #'instance creation' } -SmaCCAmbiguousResultNotification class >> forParser: aSmaCCParser [ - ^ self new - parser: aSmaCCParser; - yourself -] - -{ #category : #'private - actions' } -SmaCCAmbiguousResultNotification >> defaultAction [ - ^ self tag first -] - -{ #category : #accessing } -SmaCCAmbiguousResultNotification >> parser [ - ^ parser -] - -{ #category : #accessing } -SmaCCAmbiguousResultNotification >> parser: anObject [ - parser := anObject -] diff --git a/src/SmaCC_GLR_Runtime/SmaCCDeferredChoice.class.st b/src/SmaCC_GLR_Runtime/SmaCCDeferredChoice.class.st deleted file mode 100644 index 84c7cf028..000000000 --- a/src/SmaCC_GLR_Runtime/SmaCCDeferredChoice.class.st +++ /dev/null @@ -1,109 +0,0 @@ -" -SmaCCDeferredChoice represents a choice between multiple parses. - -Instance Variables - choiceBlock a two argument block that decides what choice should be chosen - possibleItems the choices - - -" -Class { - #name : #SmaCCDeferredChoice, - #superclass : #Object, - #instVars : [ - 'possibleItems', - 'choiceBlock' - ], - #category : #'SmaCC_GLR_Runtime' -} - -{ #category : #private } -SmaCCDeferredChoice class >> isStack: firstStack preferredOver: secondStack [ - | firstPriority secondPriority | - firstStack isEmpty - ifTrue: [ ^ true ]. - firstPriority := self priorityOf: firstStack. - secondPriority := self priorityOf: secondStack. - firstPriority = secondPriority - ifTrue: [ ^ self - isStack: (self subItemsIn: firstStack withPriority: firstPriority) - preferredOver: (self subItemsIn: secondStack withPriority: secondPriority) ]. - ^ firstPriority < secondPriority -] - -{ #category : #accessing } -SmaCCDeferredChoice class >> mergeStacks: stacksCollection [ - | result choiceBlock choices stacks | - stacks := stacksCollection - asSortedCollection: [ :a :b | self isStack: a preferredOver: b ]. - choices := 1 to: stacks size. - choiceBlock := [ :possibleChoices :parser | - | returnValue newChoices | - choices size == 1 - ifTrue: [ possibleChoices at: choices first ] - ifFalse: [ returnValue := (SmaCCAmbiguousResultNotification forParser: parser) - messageText: 'Ambiguous results'; - tag: (choices collect: [ :each | possibleChoices at: each ]); - signal. - newChoices := choices - select: [ :each | (possibleChoices at: each) == returnValue ]. - newChoices notEmpty - ifTrue: [ choices := newChoices ]. - returnValue ] ]. - result := OrderedCollection new. - 1 to: stacks first size do: [ :i | - | object | - object := stacks first at: i. - (stacks allSatisfy: [ :each | object == (each at: i) ]) - ifTrue: [ result add: object ] - ifFalse: [ result - add: - (self new - possibleItems: (stacks collect: [ :each | each at: i ]); - choiceBlock: choiceBlock; - yourself) ] ]. - ^ result -] - -{ #category : #private } -SmaCCDeferredChoice class >> priorityOf: aCollection [ - ^ aCollection - inject: SmallInteger maxVal - into: [ :sum :each | - (each isKindOf: SmaCCDeferredReduceAction) - ifTrue: [ sum min: each priority ] - ifFalse: [ sum ] ] -] - -{ #category : #private } -SmaCCDeferredChoice class >> subItemsIn: aCollection withPriority: anInteger [ - | result | - result := OrderedCollection new. - aCollection - do: [ :each | - ((each isKindOf: SmaCCDeferredReduceAction) - and: [ each priority = anInteger ]) - ifTrue: [ result addAll: each arguments ] ]. - ^ result -] - -{ #category : #accessing } -SmaCCDeferredChoice >> choiceBlock: aBlock [ - choiceBlock := aBlock -] - -{ #category : #accessing } -SmaCCDeferredChoice >> performOnSmaCCParser: aSmaCCParser [ - ^ (choiceBlock value: possibleItems value: aSmaCCParser) - performOnSmaCCParser: aSmaCCParser -] - -{ #category : #accessing } -SmaCCDeferredChoice >> possibleItems [ - ^ possibleItems -] - -{ #category : #accessing } -SmaCCDeferredChoice >> possibleItems: aSequenceableCollection [ - possibleItems := aSequenceableCollection -] diff --git a/src/SmaCC_GLR_Runtime/SmaCCDeferredReduceAction.class.st b/src/SmaCC_GLR_Runtime/SmaCCDeferredReduceAction.class.st deleted file mode 100644 index aff487d45..000000000 --- a/src/SmaCC_GLR_Runtime/SmaCCDeferredReduceAction.class.st +++ /dev/null @@ -1,78 +0,0 @@ -" -SmaCCDeferredReduceAction represents a deferred message that will be sent once we figure out what we are parsing. - -Instance Variables - arguments the arguments of the message - selector the selector to send -" -Class { - #name : #SmaCCDeferredReduceAction, - #superclass : #Object, - #instVars : [ - 'arguments', - 'reduceEntry' - ], - #category : #'SmaCC_GLR_Runtime' -} - -{ #category : #'instance creation' } -SmaCCDeferredReduceAction class >> entry: anArray arguments: aCollection [ - ^ self new - entry: anArray arguments: aCollection; - yourself -] - -{ #category : #comparing } -SmaCCDeferredReduceAction >> = anObject [ - ^ self class = anObject class - and: - [ self selector = anObject selector - and: [ self arguments = anObject arguments ] ] -] - -{ #category : #accessing } -SmaCCDeferredReduceAction >> arguments [ - ^ arguments -] - -{ #category : #'initialize-release' } -SmaCCDeferredReduceAction >> argumentsFor: aSmaCCParser [ - 1 to: arguments size do: - [ :i | - arguments - at: i - put: ((arguments at: i) performOnSmaCCParser: aSmaCCParser) ]. - ^ arguments -] - -{ #category : #'initialize-release' } -SmaCCDeferredReduceAction >> entry: anArray arguments: aCollection [ - reduceEntry := anArray. - arguments := aCollection -] - -{ #category : #comparing } -SmaCCDeferredReduceAction >> hash [ - ^ self class hash bitXor: (reduceEntry hash bitXor: arguments hash) -] - -{ #category : #accessing } -SmaCCDeferredReduceAction >> performOnSmaCCParser: aSmaCCParser [ - | selector | - selector := self selector. - ^ selector numArgs = 0 - ifTrue: [ aSmaCCParser perform: selector ] - ifFalse: [ aSmaCCParser - perform: selector - with: (self argumentsFor: aSmaCCParser) ] -] - -{ #category : #comparing } -SmaCCDeferredReduceAction >> priority [ - ^ reduceEntry at: 4 ifAbsent: [ 0 ] -] - -{ #category : #accessing } -SmaCCDeferredReduceAction >> selector [ - ^ reduceEntry at: 3 -] diff --git a/src/SmaCC_GLR_Runtime/SmaCCGLRParser.class.st b/src/SmaCC_GLR_Runtime/SmaCCGLRParser.class.st deleted file mode 100644 index 5f39705a3..000000000 --- a/src/SmaCC_GLR_Runtime/SmaCCGLRParser.class.st +++ /dev/null @@ -1,532 +0,0 @@ -" -SmaCCGLRParser is an abstract superclass for all GLR generated parsers in SmaCC. - -Instance Variables: - currentState the current parse that we are trying - lastPosition the starting location of the scanner before calling getNextToken - lastState the state of the scanner before calling getNextToken - lastToken the token returned from getNextToken (if the lastState and lastToken are the same as the current token, then this value is returned without scanning anything) - nextScannerPosition the ending location of the scanner after calling getNextToken - nextScannerState the ending state of the scanner after calling getNextToken - parseAll should we return a collection of all potential parses or just one - states the current list of valid parses - tryAllStates should we try to parse starting from any state instead of the starting state - -" -Class { - #name : #SmaCCGLRParser, - #superclass : #SmaCCParser, - #instVars : [ - 'states', - 'parseAll', - 'currentState', - 'tryAllStates', - 'lastToken', - 'lastState', - 'nextScannerState' - ], - #classInstVars : [ - 'cachedTrees' - ], - #category : #'SmaCC_GLR_Runtime' -} - -{ #category : #accessing } -SmaCCGLRParser class >> cachedTrees [ - ^ cachedTrees ifNil: [ cachedTrees := Dictionary new ] -] - -{ #category : #parsing } -SmaCCGLRParser class >> parseAll: aString startingAt: anInteger [ - | parser results | - parser := self on: (ReadStream on: aString). - parser setStartingState: anInteger. - parser parseAll: true. - results := parser parse. - results - do: [ :each | - (each isKindOf: SmaCCParseNode) - ifTrue: [ each completeSource: aString ] ]. - ^ results -] - -{ #category : #parsing } -SmaCCGLRParser class >> parseAllPossibleStates: aString [ - "Returns all possible parse nodes that can be created from aString starting from any place in the parser." - - | parser results | - parser := self on: (ReadStream on: aString). - parser - parseAll: true; - setAllStartingStates. - results := parser parse asSet asOrderedCollection. - results - do: [ :each | - (each isKindOf: SmaCCParseNode) - ifTrue: [ each completeSource: aString ] ]. - ^ results -] - -{ #category : #parsing } -SmaCCGLRParser class >> parseAndCacheAll: aString startingAt: anInteger [ - ^ (self cachedTrees at: (Array with: aString with: anInteger) ifAbsentPut: [ self parseAll: aString startingAt: anInteger ]) copy -] - -{ #category : #parsing } -SmaCCGLRParser class >> parseAndCacheAllPossibleStates: aString [ - ^ (self cachedTrees at: (Array with: aString with: nil) ifAbsentPut: [ self parseAllPossibleStates: aString ]) copy -] - -{ #category : #accessing } -SmaCCGLRParser class >> resetCaches [ - super resetCaches. - cachedTrees := nil -] - -{ #category : #private } -SmaCCGLRParser >> actionsDo: aBlock [ - | row actionBlock | - actionBlock := [ :action | - (self isAmbiguous: action) - ifTrue: [ | ambiguous | - ambiguous := OrderedCollection new. - self ambiguousTransitionsAt: (action bitShift: -2) into: ambiguous. - ambiguous do: aBlock ] - ifFalse: [ aBlock value: action ] ]. - row := self transitionTable at: self currentState. - (row at: 1) == 0 - ifTrue: [ actionBlock value: ((row at: 2) bitShift: 8) + (row at: 3) ] - ifFalse: [ 2 to: row size by: 4 do: [ :i | actionBlock value: ((row at: i) bitShift: 8) + (row at: i + 1) ] ] -] - -{ #category : #private } -SmaCCGLRParser >> actionsForCurrentToken [ - | actions | - actions := OrderedCollection new: 1. - self tryAllTokens - ifTrue: [ currentToken ids - do: [ :each | - self addActionsFor: each to: actions. - (actions notEmpty and: [ self useAllTokenIds not ]) - ifTrue: [ ^ actions ] ] ] - ifFalse: [ self addActionsFor: currentToken ids first to: actions ]. - ^ actions -] - -{ #category : #'error handling' } -SmaCCGLRParser >> actionsForState: stateIndex and: aSymbolIndex [ - | actions | - actions := OrderedCollection new. - self addActionsForState: stateIndex symbol: aSymbolIndex to: actions. - ^ actions -] - -{ #category : #private } -SmaCCGLRParser >> addAction: action to: anOrderedCollection [ - (anOrderedCollection includes: action) - ifTrue: [ ^ self ]. - anOrderedCollection add: action -] - -{ #category : #private } -SmaCCGLRParser >> addActionsFor: anInteger to: anOrderedCollection [ - | state | - state := self currentState. - self - addActionsForState: state - symbol: anInteger - to: anOrderedCollection -] - -{ #category : #private } -SmaCCGLRParser >> addActionsForState: state symbol: anInteger to: anOrderedCollection [ - | action | - action := self actionForState: state and: anInteger. - action = self errorAction - ifTrue: [ ^ self ]. - (self isAmbiguous: action) - ifTrue: [ self - ambiguousTransitionsAt: (action bitShift: -2) - into: anOrderedCollection ] - ifFalse: [ self addAction: action to: anOrderedCollection ] -] - -{ #category : #private } -SmaCCGLRParser >> alwaysPerformReduceAction [ - ^ false -] - -{ #category : #private } -SmaCCGLRParser >> ambiguousTransitionsAt: anIndex into: anOrderedCollection [ - | ambiguousTransitions | - ambiguousTransitions := self ambiguousTransitions at: anIndex. - 1 to: ambiguousTransitions size by: 2 do: - [ :i | - self - addAction: - ((ambiguousTransitions at: i) bitShift: 8) - + (ambiguousTransitions at: i + 1) - to: anOrderedCollection ] -] - -{ #category : #private } -SmaCCGLRParser >> copyStackObject: anObject [ - (anObject isKindOf: String) ifTrue: [^anObject]. - (anObject isKindOf: Collection) ifTrue: [^anObject collect: [:each | self copyStackObject: each]]. - (anObject isKindOf: SmaCCParseNode) ifTrue: [^anObject copy]. - ^anObject -] - -{ #category : #private } -SmaCCGLRParser >> currentGLRState [ - ^ currentState -] - -{ #category : #private } -SmaCCGLRParser >> duplicateState [ - | state | - parseAll ifTrue: [nodeStack := nodeStack collect: [:each | self copyStackObject: each]] ifFalse: [nodeStack := nodeStack copy]. - stateStack := stateStack copy. - state := currentState copy. - state stateStack: stateStack nodeStack: nodeStack. - state scannerState: scanner currentState. - states add: state. - ^state -] - -{ #category : #private } -SmaCCGLRParser >> fixObject: anObject [ - | result | - result := anObject performOnSmaCCParser: self. - (result isKindOf: SmaCCParseNode) - ifTrue: [ result fixParentPointers ]. - ^ result -] - -{ #category : #private } -SmaCCGLRParser >> getNextToken [ - currentToken isNil - ifFalse: [ ^ self ]. - lastState = currentState scannerState - ifTrue: [ currentToken := lastToken. - scanner restoreState: nextScannerState. - currentState scannerState: nextScannerState ] - ifFalse: [ lastState := currentState scannerState. - scanner restoreState: currentState scannerState. - lastToken := currentToken := scanner next. - nextScannerState := scanner currentState ]. - currentState scannerState: nextScannerState -] - -{ #category : #private } -SmaCCGLRParser >> initialParserState [ - | state | - state := SmaCCParserState - stateStack: stateStack - nodeStack: nodeStack - scannerState: scanner currentState. - ^ state -] - -{ #category : #'initialize-release' } -SmaCCGLRParser >> initialize [ - super initialize. - states := OrderedCollection new. - parseAll := false. - tryAllStates := false -] - -{ #category : #private } -SmaCCGLRParser >> isAmbiguous: action [ - ^ (action bitAnd: self actionMask) = 2r11 -] - -{ #category : #private } -SmaCCGLRParser >> killState [ - | index | - index := states identityIndexOf: currentState ifAbsent: [ ^ false ]. - states size = 1 - ifTrue: [ ^ self handleError: 0 ]. - states removeAt: index. - (states size = 1 and: [ parseAll not ]) - ifTrue: [ states first runDeferredActionsFor: self ]. - ^ false -] - -{ #category : #private } -SmaCCGLRParser >> mergeStates [ - | i j state otherStates otherState | - i := 1. - [ i < states size ] - whileTrue: - [ state := states at: i. - otherStates := OrderedCollection new. - j := i := i + 1. - [ j <= states size ] - whileTrue: - [ otherState := states at: j. - (parseAll - ifTrue: [ state = otherState ] - ifFalse: [ state canBeMergedWith: otherState ]) - ifTrue: [ otherStates add: otherState. - states removeAt: j ] - ifFalse: [ j := j + 1 ] ]. - (parseAll not and: [ otherStates notEmpty ]) - ifTrue: [ state mergeWith: otherStates ] ] -] - -{ #category : #accessing } -SmaCCGLRParser >> parseAll: aBoolean [ - parseAll := aBoolean -] - -{ #category : #private } -SmaCCGLRParser >> parseCurrentToken [ - | actions action isAccept | - [ actions := self actionsForCurrentToken. - actions isEmpty - ifTrue: [ isAccept := false. - self killState - ifFalse: [ ^ currentToken := nil ] ] - ifFalse: - [ 2 to: actions size do: [ :i | self splitWithAction: (actions at: i) ]. - action := actions first. - isAccept := action = self acceptAction. - isAccept - ifFalse: [ self performAction: action ] ]. - isAccept or: [ currentToken isNil ] ] whileFalse. - action = self acceptAction - ifTrue: [ currentState markAccepted ] -] - -{ #category : #private } -SmaCCGLRParser >> performParsingLoop [ - | result | - self setStartingStatesIfNone. - [ states size to: 1 by: -1 do: - [ :i | - currentToken := nil. - self restoreState: (states at: i). - self getNextToken. - self performParsingStep ]. - self mergeStates. - states anySatisfy: [ :each | each isAccepted not ] ] whileTrue. - self checkForErrors. - result := parseAll - ifTrue: [ states - collect: [ :each | self fixObject: each nodeStack first ] ] - ifFalse: [ self fixObject: states first nodeStack first ]. - nodeStack := OrderedCollection with: result -] - -{ #category : #private } -SmaCCGLRParser >> performParsingStep [ - currentState isAccepted - ifTrue: [ ^ self ]. - self restoreState: currentState. - (tryAllStates and: [ self isEOFToken ]) - ifTrue: [ ^ self processEOFToken ]. - currentToken isPattern - ifTrue: [ ^ self splitForPatternToken ]. - self parseCurrentToken -] - -{ #category : #private } -SmaCCGLRParser >> performReduceEntry: entryArray with: items [ - ^ (states size = 1 - or: [ parseAll or: [ entryArray at: 5 ifAbsent: [ false ] ] ]) - ifTrue: - [ 1 to: items size do: [ :i | items at: i put: ((items at: i) performOnSmaCCParser: self) ]. - super performReduceEntry: entryArray with: items ] - ifFalse: [ SmaCCDeferredReduceAction entry: entryArray arguments: items ] -] - -{ #category : #private } -SmaCCGLRParser >> popNodeStack [ - | result | - result := nodeStack removeLast. - (self alwaysPerformReduceAction and: [ states size > 1 ]) - ifTrue: [ result := self copyStackObject: result ]. - ^ result -] - -{ #category : #private } -SmaCCGLRParser >> position: anInteger [ - super position: anInteger. - currentState scannerState: scanner currentState -] - -{ #category : #private } -SmaCCGLRParser >> processEOFToken [ - | originalState performed eofToken | - currentState isAccepted - ifTrue: [ ^ self ]. - eofToken := currentToken. - originalState := currentState. - performed := Set new. - self - reduceActionsDo: [ :each | - (performed includes: each) - ifFalse: [ performed add: each. - self restoreState: self duplicateState. - currentToken := eofToken. - self performAction: each. - (nodeStack size = 1 and: [ nodeStack first isKindOf: SmaCCParseNode ]) - ifTrue: [ currentState markAccepted ] - ifFalse: [ (originalState stateStack size <= stateStack size and: [ originalState stateStack last == stateStack last ]) - ifTrue: [ self killState ] - ifFalse: [ self processEOFToken ] ]. - self restoreState: originalState ] ]. - currentToken := eofToken. - (nodeStack size = 1 and: [ nodeStack first isKindOf: SmaCCParseNode ]) - ifTrue: [ currentState markAccepted ] - ifFalse: [ self killState ] -] - -{ #category : #private } -SmaCCGLRParser >> reduce: anInteger [ - | reduceEntry items size | - reduceEntry := self reduceTable at: anInteger. - items := Array new: (size := reduceEntry at: 2). - nodeStack size < size - ifTrue: [ self killState. - ^ currentToken := nil ]. - size to: 1 by: -1 do: [ :i | - items at: i put: self popNodeStack. - stateStack removeLast ]. - nodeStack addLast: (self performReduceEntry: reduceEntry with: items). - stateStack - addLast: ((self actionFor: (reduceEntry at: 1)) bitShift: -2) -] - -{ #category : #private } -SmaCCGLRParser >> reduceActionsDo: aBlock [ - self - actionsDo: [ :each | - (each bitAnd: self actionMask) = self reduceAction - ifTrue: [ aBlock value: each ] ] -] - -{ #category : #private } -SmaCCGLRParser >> restoreState: aSmaCCParserState [ - currentState := aSmaCCParserState. - nodeStack := aSmaCCParserState nodeStack. - stateStack := aSmaCCParserState stateStack. - scanner restoreState: currentState scannerState -] - -{ #category : #private } -SmaCCGLRParser >> scope: aSymbol [ - super scope: aSymbol. - currentState scannerState: scanner currentState -] - -{ #category : #accessing } -SmaCCGLRParser >> setAllStartingStates [ - tryAllStates := true. - self statesThatShift - do: - [ :each | - states - add: - (SmaCCParserState - stateStack: (OrderedCollection with: each) - nodeStack: OrderedCollection new - scannerState: scanner currentState) ] -] - -{ #category : #private } -SmaCCGLRParser >> setStartingStatesIfNone [ - states isEmpty - ifTrue: - [ states add: self initialParserState ] -] - -{ #category : #private } -SmaCCGLRParser >> splitForPatternToken [ - | token patternNode performedActions nodeClass | - performedActions := Set new. - token := currentToken copy. - token ids: OrderedCollection new. - patternNode := SmaCCPatternNode onToken: token copy. - nodeClass := token nodeClassName - ifNil: [ SmaCCParseNode ] - ifNotNil: [ :name | self class environment at: name ifAbsent: [ SmaCCParseNode ] ]. - self symbolTypes - keysAndValuesDo: - [ :i :each | - | actions | - (i ~= scanner emptySymbolTokenId and: [ i ~= scanner errorTokenId ]) - ifTrue: - [ actions := OrderedCollection new. - (each = #SmaCCToken - or: - [ each notNil - and: - [ ((self class environment at: each ifAbsent: [ Object ]) -includesBehavior: nodeClass) or: [ nodeClass includesBehavior: (self -class environment at: each ifAbsent: [ self class ]) ] ] ]) - ifTrue: - [ self addActionsFor: i to: actions. - actions - do: - [ :action | - (performedActions includes: action) - ifFalse: - [ performedActions add: action. - each = #SmaCCToken - ifTrue: - [ token ids add: i. - ((action bitAnd: self actionMask) = self reduceAction - or: [ token isToken ]) - ifTrue: [ currentToken := token. - self splitWithAction: action ] ] - ifFalse: - [ token isNode - ifTrue: - [ currentToken := nil. - self duplicateState. - stateStack addLast: (action bitShift: -2). - nodeStack addLast: patternNode. - self restoreState: currentState ] ] ] ] ] ] ]. - self killState. - currentToken := nil -] - -{ #category : #private } -SmaCCGLRParser >> splitWithAction: anInteger [ - | previousToken previousState | - previousState := currentState. - previousToken := currentToken. - [ currentState := self duplicateState. - self performAction: anInteger. - currentToken notNil - ifTrue: [ self performParsingStep ] ] - ensure: [ self restoreState: previousState. - currentToken := previousToken ] -] - -{ #category : #private } -SmaCCGLRParser >> states [ - ^states -] - -{ #category : #private } -SmaCCGLRParser >> statesThatShift [ - ^ (1 to: self transitionTable size) - select: - [ :each | - (1 to: self symbolTypes size) - anySatisfy: - [ :i | - | actions | - actions := OrderedCollection new. - self addActionsForState: each symbol: i to: actions. - actions - anySatisfy: [ :action | (action bitAnd: self actionMask) = self shiftAction ] ] ] -] - -{ #category : #testing } -SmaCCGLRParser >> useAllTokenIds [ - ^ true -] diff --git a/src/SmaCC_GLR_Runtime/SmaCCParserState.class.st b/src/SmaCC_GLR_Runtime/SmaCCParserState.class.st deleted file mode 100644 index 06009bf1f..000000000 --- a/src/SmaCC_GLR_Runtime/SmaCCParserState.class.st +++ /dev/null @@ -1,135 +0,0 @@ -" -SmaCCParserState represents a particular parse in a GLR parser. - -Instance Variables: - isAccepted has this parse been accepted - nodeStack the stack of objects for this parse - position the current position of the scanner - scannerState the current state of the scanner - stateStack the stack of states for this parse - - -" -Class { - #name : #SmaCCParserState, - #superclass : #Object, - #instVars : [ - 'stateStack', - 'nodeStack', - 'isAccepted', - 'scannerState', - 'attributes' - ], - #category : #'SmaCC_GLR_Runtime' -} - -{ #category : #'instance creation' } -SmaCCParserState class >> stateStack: stateStack nodeStack: nodeStack [ - ^ self new - stateStack: stateStack nodeStack: nodeStack; - yourself -] - -{ #category : #'instance creation' } -SmaCCParserState class >> stateStack: stateStack nodeStack: nodeStack scannerState: aSmaCCScannerState [ - ^ self new - stateStack: stateStack nodeStack: nodeStack; - scannerState: aSmaCCScannerState; - yourself -] - -{ #category : #comparing } -SmaCCParserState >> = anObject [ - ^ self == anObject - or: - [ self class = anObject class - and: - [ self stateStack = anObject stateStack - and: [ self nodeStack = anObject nodeStack ] ] ] -] - -{ #category : #accessing } -SmaCCParserState >> attributeNamed: aSymbol [ - ^attributes ifNil: [ nil ] ifNotNil: [ attributes at: aSymbol ] -] - -{ #category : #accessing } -SmaCCParserState >> attributeNamed: aSymbol put: aValue [ - (attributes ifNil: [ attributes := Dictionary new ]) at: aSymbol put: aValue -] - -{ #category : #testing } -SmaCCParserState >> canBeMergedWith: aSmaCCParserState [ - ^ self stateStack = aSmaCCParserState stateStack and: [ self scannerState = aSmaCCParserState scannerState ] -] - -{ #category : #comparing } -SmaCCParserState >> hash [ - ^ self stateStack hash -] - -{ #category : #testing } -SmaCCParserState >> isAccepted [ - ^ isAccepted -] - -{ #category : #accessing } -SmaCCParserState >> markAccepted [ - isAccepted := true -] - -{ #category : #accessing } -SmaCCParserState >> mergeWith: aSmaCCParserStateCollection [ - | stacks | - stacks := OrderedCollection new: aSmaCCParserStateCollection size + 1. - stacks add: nodeStack. - aSmaCCParserStateCollection - do: - [ :each | - (stacks includes: each nodeStack) - ifFalse: [ stacks add: each nodeStack ] ]. - nodeStack := SmaCCDeferredChoice mergeStacks: stacks -] - -{ #category : #accessing } -SmaCCParserState >> nodeStack [ - ^ nodeStack -] - -{ #category : #copying } -SmaCCParserState >> postCopy [ - super postCopy. - attributes notNil - ifTrue: [ attributes := attributes copy ] -] - -{ #category : #accessing } -SmaCCParserState >> runDeferredActionsFor: aSmaCCParser [ - 1 to: nodeStack size do: - [ :i | - | each | - each := nodeStack at: i. - nodeStack at: i put: (each performOnSmaCCParser: aSmaCCParser) ] -] - -{ #category : #accessing } -SmaCCParserState >> scannerState [ - ^ scannerState -] - -{ #category : #accessing } -SmaCCParserState >> scannerState: anObject [ - scannerState := anObject -] - -{ #category : #accessing } -SmaCCParserState >> stateStack [ - ^ stateStack -] - -{ #category : #'initialize-release' } -SmaCCParserState >> stateStack: stateCollection nodeStack: nodeCollection [ - stateStack := stateCollection. - nodeStack := nodeCollection. - isAccepted := false -] diff --git a/src/SmaCC_GLR_Runtime/SmaCCScanner.extension.st b/src/SmaCC_GLR_Runtime/SmaCCScanner.extension.st deleted file mode 100644 index 4c04a3f87..000000000 --- a/src/SmaCC_GLR_Runtime/SmaCCScanner.extension.st +++ /dev/null @@ -1,24 +0,0 @@ -Extension { #name : #SmaCCScanner } - -{ #category : #'*SmaCC_GLR_Runtime' } -SmaCCScanner >> currentState [ - "Return an object that can be used to restoreState: when switching between parses in a GLR parser. - This object should implement #= in such a way that if the state is restored, then calling #next will - always return the same token. If you add state to your scanner you may want to override this method - and #restoreState: to include that state." - - ^ self stateClass position: self position scope: self scope -] - -{ #category : #'*SmaCC_GLR_Runtime' } -SmaCCScanner >> restoreState: aSmaCCScannerState [ - "Restore the state using the object returned from #currentState." - - self setPosition: aSmaCCScannerState position. - self scope: aSmaCCScannerState scope -] - -{ #category : #'*SmaCC_GLR_Runtime' } -SmaCCScanner >> stateClass [ - ^ SmaCCScannerState -] diff --git a/src/SmaCC_GLR_Runtime/SmaCCScannerState.class.st b/src/SmaCC_GLR_Runtime/SmaCCScannerState.class.st deleted file mode 100644 index 70f75460b..000000000 --- a/src/SmaCC_GLR_Runtime/SmaCCScannerState.class.st +++ /dev/null @@ -1,54 +0,0 @@ -" -This object holds the state for the scanner so that multiple GLR parses can use the same scanner by simply restoring the state. - - Instance Variables - position current location in the input stream - scope the type of item to be scanned (most of the time #default) -" -Class { - #name : #SmaCCScannerState, - #superclass : #Object, - #instVars : [ - 'position', - 'scope' - ], - #category : #'SmaCC_GLR_Runtime' -} - -{ #category : #'instance creation' } -SmaCCScannerState class >> position: anInteger scope: aSymbol [ - ^ self new - position: anInteger; - scope: aSymbol; - yourself -] - -{ #category : #comparing } -SmaCCScannerState >> = anObject [ - ^ self class = anObject class and: [ self position = anObject position and: [ self scope = anObject scope ] ] -] - -{ #category : #comparing } -SmaCCScannerState >> hash [ - ^ position hash hashMultiply bitXor: scope hash -] - -{ #category : #accessing } -SmaCCScannerState >> position [ - ^ position -] - -{ #category : #accessing } -SmaCCScannerState >> position: anInteger [ - position := anInteger -] - -{ #category : #accessing } -SmaCCScannerState >> scope [ - ^ scope -] - -{ #category : #accessing } -SmaCCScannerState >> scope: aSymbol [ - scope := aSymbol -] diff --git a/src/SmaCC_GLR_Runtime/package.st b/src/SmaCC_GLR_Runtime/package.st deleted file mode 100644 index 7b8fa3854..000000000 --- a/src/SmaCC_GLR_Runtime/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_GLR_Runtime' } diff --git a/src/SmaCC_Generic_Smalltalk_Parser/GstArrayLiteralNode.class.st b/src/SmaCC_Generic_Smalltalk_Parser/GstArrayLiteralNode.class.st deleted file mode 100644 index 914e58c4f..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/GstArrayLiteralNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #GstArrayLiteralNode, - #superclass : #GstLiteralNode, - #instVars : [ - 'arrayStart', - 'values', - 'arrayStop' - ], - #category : #'SmaCC_Generic_Smalltalk_Parser' -} - -{ #category : #generated } -GstArrayLiteralNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitArrayLiteral: self -] - -{ #category : #generated } -GstArrayLiteralNode >> arrayStart [ - ^ arrayStart -] - -{ #category : #generated } -GstArrayLiteralNode >> arrayStart: aSmaCCToken [ - arrayStart := aSmaCCToken -] - -{ #category : #generated } -GstArrayLiteralNode >> arrayStop [ - ^ arrayStop -] - -{ #category : #generated } -GstArrayLiteralNode >> arrayStop: aSmaCCToken [ - arrayStop := aSmaCCToken -] - -{ #category : #generated } -GstArrayLiteralNode >> compositeNodeVariables [ - ^ #(#values) -] - -{ #category : #'generated-initialize-release' } -GstArrayLiteralNode >> initialize [ - super initialize. - values := OrderedCollection new: 2. -] - -{ #category : #generated } -GstArrayLiteralNode >> tokenVariables [ - ^ #(#arrayStart #arrayStop) -] - -{ #category : #generated } -GstArrayLiteralNode >> values [ - ^ values -] - -{ #category : #generated } -GstArrayLiteralNode >> values: anOrderedCollection [ - self setParents: self values to: nil. - values := anOrderedCollection. - self setParents: self values to: self -] diff --git a/src/SmaCC_Generic_Smalltalk_Parser/GstAssignmentNode.class.st b/src/SmaCC_Generic_Smalltalk_Parser/GstAssignmentNode.class.st deleted file mode 100644 index 483764eca..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/GstAssignmentNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #GstAssignmentNode, - #superclass : #GstValueNode, - #instVars : [ - 'variable', - 'assignmentToken', - 'value' - ], - #category : #'SmaCC_Generic_Smalltalk_Parser' -} - -{ #category : #generated } -GstAssignmentNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitAssignment: self -] - -{ #category : #generated } -GstAssignmentNode >> assignmentToken [ - ^ assignmentToken -] - -{ #category : #generated } -GstAssignmentNode >> assignmentToken: aSmaCCToken [ - assignmentToken := aSmaCCToken -] - -{ #category : #generated } -GstAssignmentNode >> nodeVariables [ - ^ #(#variable #value) -] - -{ #category : #generated } -GstAssignmentNode >> tokenVariables [ - ^ #(#assignmentToken) -] - -{ #category : #generated } -GstAssignmentNode >> value [ - ^ value -] - -{ #category : #generated } -GstAssignmentNode >> value: aGstValueNode [ - self value notNil - ifTrue: [ self value parent: nil ]. - value := aGstValueNode. - self value notNil - ifTrue: [ self value parent: self ] -] - -{ #category : #generated } -GstAssignmentNode >> variable [ - ^ variable -] - -{ #category : #generated } -GstAssignmentNode >> variable: aGstVariableNode [ - self variable notNil - ifTrue: [ self variable parent: nil ]. - variable := aGstVariableNode. - self variable notNil - ifTrue: [ self variable parent: self ] -] diff --git a/src/SmaCC_Generic_Smalltalk_Parser/GstBinaryMessageNode.class.st b/src/SmaCC_Generic_Smalltalk_Parser/GstBinaryMessageNode.class.st deleted file mode 100644 index 1470b36eb..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/GstBinaryMessageNode.class.st +++ /dev/null @@ -1,53 +0,0 @@ -Class { - #name : #GstBinaryMessageNode, - #superclass : #GstMessageNode, - #instVars : [ - 'selectorPart', - 'value' - ], - #category : #'SmaCC_Generic_Smalltalk_Parser' -} - -{ #category : #generated } -GstBinaryMessageNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitBinaryMessage: self -] - -{ #category : #generated } -GstBinaryMessageNode >> nodeVariables [ - ^ #(#value) -] - -{ #category : #generated } -GstBinaryMessageNode >> selectorPart [ - ^ selectorPart -] - -{ #category : #generated } -GstBinaryMessageNode >> selectorPart: aSmaCCToken [ - selectorPart := aSmaCCToken -] - -{ #category : #accessing } -GstBinaryMessageNode >> symbol [ - ^ selectorPart value asSymbol -] - -{ #category : #generated } -GstBinaryMessageNode >> tokenVariables [ - ^ #(#selectorPart) -] - -{ #category : #generated } -GstBinaryMessageNode >> value [ - ^ value -] - -{ #category : #generated } -GstBinaryMessageNode >> value: aGstValueNode [ - self value notNil - ifTrue: [ self value parent: nil ]. - value := aGstValueNode. - self value notNil - ifTrue: [ self value parent: self ] -] diff --git a/src/SmaCC_Generic_Smalltalk_Parser/GstBlockNode.class.st b/src/SmaCC_Generic_Smalltalk_Parser/GstBlockNode.class.st deleted file mode 100644 index 54c815e9e..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/GstBlockNode.class.st +++ /dev/null @@ -1,116 +0,0 @@ -Class { - #name : #GstBlockNode, - #superclass : #GstValueNode, - #instVars : [ - 'leftBracket', - 'colons', - 'variables', - 'bar', - 'body', - 'rightBracket' - ], - #category : #'SmaCC_Generic_Smalltalk_Parser' -} - -{ #category : #generated } -GstBlockNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitBlock: self -] - -{ #category : #generated } -GstBlockNode >> bar [ - ^ bar -] - -{ #category : #generated } -GstBlockNode >> bar: aSmaCCToken [ - bar := aSmaCCToken -] - -{ #category : #generated } -GstBlockNode >> body [ - ^ body -] - -{ #category : #generated } -GstBlockNode >> body: aGstSequenceNode [ - self body notNil - ifTrue: [ self body parent: nil ]. - body := aGstSequenceNode. - self body notNil - ifTrue: [ self body parent: self ] -] - -{ #category : #generated } -GstBlockNode >> colons [ - ^ colons -] - -{ #category : #generated } -GstBlockNode >> colons: anOrderedCollection [ - colons := anOrderedCollection -] - -{ #category : #generated } -GstBlockNode >> compositeNodeVariables [ - ^ #(#variables) -] - -{ #category : #generated } -GstBlockNode >> ignoredCompositeTokenVariables [ - ^ #(#colons #leftParens #rightParens) -] - -{ #category : #generated } -GstBlockNode >> ignoredTokenVariables [ - ^ #(#leftBracket #rightBracket) -] - -{ #category : #'generated-initialize-release' } -GstBlockNode >> initialize [ - super initialize. - colons := OrderedCollection new: 2. - variables := OrderedCollection new: 2. -] - -{ #category : #generated } -GstBlockNode >> leftBracket [ - ^ leftBracket -] - -{ #category : #generated } -GstBlockNode >> leftBracket: aSmaCCToken [ - leftBracket := aSmaCCToken -] - -{ #category : #generated } -GstBlockNode >> nodeVariables [ - ^ #(#body) -] - -{ #category : #generated } -GstBlockNode >> rightBracket [ - ^ rightBracket -] - -{ #category : #generated } -GstBlockNode >> rightBracket: aSmaCCToken [ - rightBracket := aSmaCCToken -] - -{ #category : #generated } -GstBlockNode >> tokenVariables [ - ^ #(#bar) -] - -{ #category : #generated } -GstBlockNode >> variables [ - ^ variables -] - -{ #category : #generated } -GstBlockNode >> variables: anOrderedCollection [ - self setParents: self variables to: nil. - variables := anOrderedCollection. - self setParents: self variables to: self -] diff --git a/src/SmaCC_Generic_Smalltalk_Parser/GstBooleanLiteralNode.class.st b/src/SmaCC_Generic_Smalltalk_Parser/GstBooleanLiteralNode.class.st deleted file mode 100644 index e53867ebc..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/GstBooleanLiteralNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #GstBooleanLiteralNode, - #superclass : #GstLiteralNode, - #instVars : [ - 'value' - ], - #category : #'SmaCC_Generic_Smalltalk_Parser' -} - -{ #category : #generated } -GstBooleanLiteralNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitBooleanLiteral: self -] - -{ #category : #generated } -GstBooleanLiteralNode >> tokenVariables [ - ^ #(#value) -] - -{ #category : #generated } -GstBooleanLiteralNode >> value [ - ^ value -] - -{ #category : #generated } -GstBooleanLiteralNode >> value: aSmaCCToken [ - value := aSmaCCToken -] diff --git a/src/SmaCC_Generic_Smalltalk_Parser/GstByteArrayLiteralNode.class.st b/src/SmaCC_Generic_Smalltalk_Parser/GstByteArrayLiteralNode.class.st deleted file mode 100644 index a66425762..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/GstByteArrayLiteralNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #GstByteArrayLiteralNode, - #superclass : #GstArrayLiteralNode, - #category : #'SmaCC_Generic_Smalltalk_Parser' -} - -{ #category : #generated } -GstByteArrayLiteralNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitByteArrayLiteral: self -] diff --git a/src/SmaCC_Generic_Smalltalk_Parser/GstCascadeNode.class.st b/src/SmaCC_Generic_Smalltalk_Parser/GstCascadeNode.class.st deleted file mode 100644 index 53e64dffa..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/GstCascadeNode.class.st +++ /dev/null @@ -1,73 +0,0 @@ -Class { - #name : #GstCascadeNode, - #superclass : #GstValueNode, - #instVars : [ - 'receiver', - 'messages', - 'semicolons' - ], - #category : #'SmaCC_Generic_Smalltalk_Parser' -} - -{ #category : #generated } -GstCascadeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitCascade: self -] - -{ #category : #generated } -GstCascadeNode >> compositeNodeVariables [ - ^ #(#messages) -] - -{ #category : #generated } -GstCascadeNode >> ignoredCompositeTokenVariables [ - ^ #(#semicolons #leftParens #rightParens) -] - -{ #category : #'generated-initialize-release' } -GstCascadeNode >> initialize [ - super initialize. - messages := OrderedCollection new: 2. - semicolons := OrderedCollection new: 2. -] - -{ #category : #generated } -GstCascadeNode >> messages [ - ^ messages -] - -{ #category : #generated } -GstCascadeNode >> messages: anOrderedCollection [ - self setParents: self messages to: nil. - messages := anOrderedCollection. - self setParents: self messages to: self -] - -{ #category : #generated } -GstCascadeNode >> nodeVariables [ - ^ #(#receiver) -] - -{ #category : #generated } -GstCascadeNode >> receiver [ - ^ receiver -] - -{ #category : #generated } -GstCascadeNode >> receiver: aGstValueNode [ - self receiver notNil - ifTrue: [ self receiver parent: nil ]. - receiver := aGstValueNode. - self receiver notNil - ifTrue: [ self receiver parent: self ] -] - -{ #category : #generated } -GstCascadeNode >> semicolons [ - ^ semicolons -] - -{ #category : #generated } -GstCascadeNode >> semicolons: anOrderedCollection [ - semicolons := anOrderedCollection -] diff --git a/src/SmaCC_Generic_Smalltalk_Parser/GstCharacterLiteralNode.class.st b/src/SmaCC_Generic_Smalltalk_Parser/GstCharacterLiteralNode.class.st deleted file mode 100644 index c00aec7aa..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/GstCharacterLiteralNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #GstCharacterLiteralNode, - #superclass : #GstLiteralNode, - #instVars : [ - 'value' - ], - #category : #'SmaCC_Generic_Smalltalk_Parser' -} - -{ #category : #generated } -GstCharacterLiteralNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitCharacterLiteral: self -] - -{ #category : #generated } -GstCharacterLiteralNode >> tokenVariables [ - ^ #(#value) -] - -{ #category : #generated } -GstCharacterLiteralNode >> value [ - ^ value -] - -{ #category : #generated } -GstCharacterLiteralNode >> value: aSmaCCToken [ - value := aSmaCCToken -] diff --git a/src/SmaCC_Generic_Smalltalk_Parser/GstKeywordMessageNode.class.st b/src/SmaCC_Generic_Smalltalk_Parser/GstKeywordMessageNode.class.st deleted file mode 100644 index 8e1c31ae7..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/GstKeywordMessageNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #GstKeywordMessageNode, - #superclass : #GstMessageNode, - #instVars : [ - 'selectorParts', - 'values' - ], - #category : #'SmaCC_Generic_Smalltalk_Parser' -} - -{ #category : #generated } -GstKeywordMessageNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitKeywordMessage: self -] - -{ #category : #generated } -GstKeywordMessageNode >> compositeNodeVariables [ - ^ #(#values) -] - -{ #category : #generated } -GstKeywordMessageNode >> compositeTokenVariables [ - ^ #(#selectorParts) -] - -{ #category : #'generated-initialize-release' } -GstKeywordMessageNode >> initialize [ - super initialize. - selectorParts := OrderedCollection new: 2. - values := OrderedCollection new: 2. -] - -{ #category : #generated } -GstKeywordMessageNode >> selectorParts [ - ^ selectorParts -] - -{ #category : #generated } -GstKeywordMessageNode >> selectorParts: anOrderedCollection [ - selectorParts := anOrderedCollection -] - -{ #category : #accessing } -GstKeywordMessageNode >> symbol [ - ^ (selectorParts inject: '' into: [ :sum :each | sum , each value ]) - asSymbol -] - -{ #category : #generated } -GstKeywordMessageNode >> values [ - ^ values -] - -{ #category : #generated } -GstKeywordMessageNode >> values: anOrderedCollection [ - self setParents: self values to: nil. - values := anOrderedCollection. - self setParents: self values to: self -] diff --git a/src/SmaCC_Generic_Smalltalk_Parser/GstLiteralNode.class.st b/src/SmaCC_Generic_Smalltalk_Parser/GstLiteralNode.class.st deleted file mode 100644 index 9b6cfd523..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/GstLiteralNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #GstLiteralNode, - #superclass : #GstValueNode, - #category : #'SmaCC_Generic_Smalltalk_Parser' -} - -{ #category : #generated } -GstLiteralNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitLiteral: self -] diff --git a/src/SmaCC_Generic_Smalltalk_Parser/GstMessageNode.class.st b/src/SmaCC_Generic_Smalltalk_Parser/GstMessageNode.class.st deleted file mode 100644 index 452b4e55b..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/GstMessageNode.class.st +++ /dev/null @@ -1,16 +0,0 @@ -Class { - #name : #GstMessageNode, - #superclass : #GstProgramNode, - #category : #'SmaCC_Generic_Smalltalk_Parser' -} - -{ #category : #generated } -GstMessageNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitMessage: self -] - -{ #category : #testing } -GstMessageNode >> isUsed [ - ^ (parent isKindOf: GstMessageSendNode) - or: [ parent messages last == self and: [ parent isUsed ] ] -] diff --git a/src/SmaCC_Generic_Smalltalk_Parser/GstMessageSendNode.class.st b/src/SmaCC_Generic_Smalltalk_Parser/GstMessageSendNode.class.st deleted file mode 100644 index 3dc1fc8f1..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/GstMessageSendNode.class.st +++ /dev/null @@ -1,47 +0,0 @@ -Class { - #name : #GstMessageSendNode, - #superclass : #GstValueNode, - #instVars : [ - 'receiver', - 'message' - ], - #category : #'SmaCC_Generic_Smalltalk_Parser' -} - -{ #category : #generated } -GstMessageSendNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitMessageSend: self -] - -{ #category : #generated } -GstMessageSendNode >> message [ - ^ message -] - -{ #category : #generated } -GstMessageSendNode >> message: aGstMessageNode [ - self message notNil - ifTrue: [ self message parent: nil ]. - message := aGstMessageNode. - self message notNil - ifTrue: [ self message parent: self ] -] - -{ #category : #generated } -GstMessageSendNode >> nodeVariables [ - ^ #(#receiver #message) -] - -{ #category : #generated } -GstMessageSendNode >> receiver [ - ^ receiver -] - -{ #category : #generated } -GstMessageSendNode >> receiver: aGstValueNode [ - self receiver notNil - ifTrue: [ self receiver parent: nil ]. - receiver := aGstValueNode. - self receiver notNil - ifTrue: [ self receiver parent: self ] -] diff --git a/src/SmaCC_Generic_Smalltalk_Parser/GstMethodNode.class.st b/src/SmaCC_Generic_Smalltalk_Parser/GstMethodNode.class.st deleted file mode 100644 index 91266b0ba..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/GstMethodNode.class.st +++ /dev/null @@ -1,73 +0,0 @@ -Class { - #name : #GstMethodNode, - #superclass : #GstProgramNode, - #instVars : [ - 'selectorParts', - 'variables', - 'body' - ], - #category : #'SmaCC_Generic_Smalltalk_Parser' -} - -{ #category : #generated } -GstMethodNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitMethod: self -] - -{ #category : #generated } -GstMethodNode >> body [ - ^ body -] - -{ #category : #generated } -GstMethodNode >> body: aGstSequenceNode [ - self body notNil - ifTrue: [ self body parent: nil ]. - body := aGstSequenceNode. - self body notNil - ifTrue: [ self body parent: self ] -] - -{ #category : #generated } -GstMethodNode >> compositeNodeVariables [ - ^ #(#variables) -] - -{ #category : #generated } -GstMethodNode >> compositeTokenVariables [ - ^ #(#selectorParts) -] - -{ #category : #'generated-initialize-release' } -GstMethodNode >> initialize [ - super initialize. - selectorParts := OrderedCollection new: 2. - variables := OrderedCollection new: 2. -] - -{ #category : #generated } -GstMethodNode >> nodeVariables [ - ^ #(#body) -] - -{ #category : #generated } -GstMethodNode >> selectorParts [ - ^ selectorParts -] - -{ #category : #generated } -GstMethodNode >> selectorParts: anOrderedCollection [ - selectorParts := anOrderedCollection -] - -{ #category : #generated } -GstMethodNode >> variables [ - ^ variables -] - -{ #category : #generated } -GstMethodNode >> variables: anOrderedCollection [ - self setParents: self variables to: nil. - variables := anOrderedCollection. - self setParents: self variables to: self -] diff --git a/src/SmaCC_Generic_Smalltalk_Parser/GstNilLiteralNode.class.st b/src/SmaCC_Generic_Smalltalk_Parser/GstNilLiteralNode.class.st deleted file mode 100644 index 0c49d1d26..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/GstNilLiteralNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #GstNilLiteralNode, - #superclass : #GstLiteralNode, - #instVars : [ - 'value' - ], - #category : #'SmaCC_Generic_Smalltalk_Parser' -} - -{ #category : #generated } -GstNilLiteralNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNilLiteral: self -] - -{ #category : #generated } -GstNilLiteralNode >> tokenVariables [ - ^ #(#value) -] - -{ #category : #generated } -GstNilLiteralNode >> value [ - ^ value -] - -{ #category : #generated } -GstNilLiteralNode >> value: aSmaCCToken [ - value := aSmaCCToken -] diff --git a/src/SmaCC_Generic_Smalltalk_Parser/GstNumberLiteralNode.class.st b/src/SmaCC_Generic_Smalltalk_Parser/GstNumberLiteralNode.class.st deleted file mode 100644 index 681418e9e..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/GstNumberLiteralNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #GstNumberLiteralNode, - #superclass : #GstLiteralNode, - #instVars : [ - 'value' - ], - #category : #'SmaCC_Generic_Smalltalk_Parser' -} - -{ #category : #generated } -GstNumberLiteralNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNumberLiteral: self -] - -{ #category : #generated } -GstNumberLiteralNode >> tokenVariables [ - ^ #(#value) -] - -{ #category : #generated } -GstNumberLiteralNode >> value [ - ^ value -] - -{ #category : #generated } -GstNumberLiteralNode >> value: aSmaCCToken [ - value := aSmaCCToken -] diff --git a/src/SmaCC_Generic_Smalltalk_Parser/GstParser.class.st b/src/SmaCC_Generic_Smalltalk_Parser/GstParser.class.st deleted file mode 100644 index d26797763..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/GstParser.class.st +++ /dev/null @@ -1,840 +0,0 @@ -Class { - #name : #GstParser, - #superclass : #SmaCCGLRParser, - #category : #'SmaCC_Generic_Smalltalk_Parser' -} - -{ #category : #'generated-accessing' } -GstParser class >> cacheId [ - ^'2019-04-15T17:15:54.54493-05:00' -] - -{ #category : #generated } -GstParser class >> definitionComment [ -"%glr; -%prefix Gst; -%suffix Node; -%root Program; -%start Sequence Statement; -%id ; -%hierarchy Value ( - Assignment - Block - Cascade - Literal - MessageSend - Variable -); -%hierarchy Literal (StringLiteral NumberLiteral CharacterLiteral SymbolLiteral ArrayLiteral BooleanLiteral NilLiteral); -%hierarchy ArrayLiteral (ByteArrayLiteral); -%hierarchy Message (UnaryMessage BinaryMessage KeywordMessage); -%ignore_variables leftParen rightParen leftBar rightBar leftBracket rightBracket semicolon colon period ; - - : ( | _ ) ( | _ | ) * - ; - - : \: - ; - - : \| - ; - - : [\~\-\!\@\%\&\*\+\=\\\|\?\/\>\<\,] + - ; - - : ( \' [^\']* \' )+ - ; - - : \# ( | | + | ) - ; - - : \$ . - ; - - : \"" [^\""]* \"" - ; - - : \s+ - ; - - : \-? \d+ \. \d+ ([deq] [\+\-]? \d+)? - | \-? \d+ [deq] [\+\-]? \d+ - ; - - : \-? ( - \d+ - | 2r[0-1]+ - | 3r[0-2]+ - | 4r[0-3]+ - | 5r[0-4]+ - | 6r[0-5]+ - | 7r[0-6]+ - | 8r[0-7]+ - | 9r[0-8]+ - | 10r[0-9]+ - | 11r[0-9A]+ - | 12r[0-9A-B]+ - | 13r[0-9A-C]+ - | 14r[0-9A-D]+ - | 15r[0-9A-E]+ - | 16r[0-9A-F]+ - | 17r[0-9A-G]+ - | 18r[0-9A-H]+ - | 19r[0-9A-I]+ - | 20r[0-9A-J]+ - | 21r[0-9A-K]+ - | 22r[0-9A-L]+ - | 23r[0-9A-M]+ - | 24r[0-9A-N]+ - | 25r[0-9A-O]+ - | 26r[0-9A-P]+ - | 27r[0-9A-Q]+ - | 28r[0-9A-R]+ - | 29r[0-9A-S]+ - | 30r[0-9A-T]+ - | 31r[0-9A-U]+ - | 32r[0-9A-V]+ - | 33r[0-9A-W]+ - | 34r[0-9A-X]+ - | 35r[0-9A-Y]+ - | 36r[0-9A-Z]+ - ) - ; - - : (\` [^\`]* \`)+ - ; -Method - : MethodPattern Sequence 'body' {{}} - ; -MethodPattern - : 'selectorPart' - | ""true"" 'selectorPart' - | ""false"" 'selectorPart' - | ""nil"" 'selectorPart' - | 'selectorPart' Variable 'variable' - | KeywordPattern - ; -KeywordPattern - : 'selectorPart' Variable 'variable' - | KeywordPattern 'selectorPart' Variable 'variable' - ; -Sequence - : Temporaries Statements {{}} - ; -Temporaries - : - | 'leftBar' Variables 'rightBar' - ; -Variables - : - | Variables Variable 'variable' - ; -Statements - : - | StatementList - | StatementList ""."" 'period' - ; -StatementList - : Statement 'statement' - | StatementList ""."" 'period' Statement 'statement' - ; -Statement - : ""^"" 'upArrow' Assignment 'value' {{Return}} - | Assignment - ; -Assignment - : Variable 'variable' "":="" 'assignmentToken' Assignment 'value' {{}} - | Cascade - ; -Cascade - : KeywordMessageSendVars CascadedMessages {{}} - | BinaryMessageSendVars CascadedMessages {{}} - | UnaryMessageSendVars CascadedMessages {{}} - | KeywordMessageSend - ; -CascadedMessages - : "";"" 'semicolon' CascadedMessage 'message' - | "";"" 'semicolon' CascadedMessage 'message' CascadedMessages - ; -CascadedMessage - : KeywordMessage - | BinaryMessage - | UnaryMessage - ; -KeywordMessageSend - : KeywordMessageSendVars {{MessageSend}} - | BinaryMessageSend - ; -KeywordMessageSendVars - : BinaryMessageSend 'receiver' KeywordMessage 'message' - ; -KeywordMessage - : 'selectorPart' BinaryMessageSend 'value' {{}} - | KeywordMessage 'selectorPart' BinaryMessageSend 'value' {{}} - ; -BinaryMessageSend - : BinaryMessageSendVars {{MessageSend}} - | UnaryMessageSend - ; -BinaryMessageSendVars - : BinaryMessageSend 'receiver' BinaryMessage 'message' - ; -BinaryMessage - : 'selectorPart' UnaryMessageSend 'value' {{}} - ; -UnaryMessageSend - : UnaryMessageSendVars {{MessageSend}} - | Value - ; -UnaryMessageSendVars - : UnaryMessageSend 'receiver' UnaryMessage 'message' - ; -UnaryMessage - : 'selectorPart' {{}} - ; -Variable - : 'name' {{}} - ; -Value - : Variable - | Literal - | Block - | ""("" 'leftParen' Assignment "")"" 'rightParen' {{Value}} - ; -Block - : ""["" 'leftBracket' BlockArgs Sequence 'body' ""]"" 'rightBracket' {{}} - ; -BlockArgs - : - | BlockArgList 'bar' - ; -BlockArgList - : "":"" 'colon' Variable 'variable' - | BlockArgList "":"" 'colon' Variable 'variable' - ; -Literal - : StringLiteral - | NumberLiteral - | ArrayLiteral - | ByteArrayLiteral - | CharacterLiteral - | SymbolLiteral - | BooleanLiteral - | NilLiteral - ; -StringLiteral - : 'value' {{}} - ; -NumberLiteral - : 'value' {{}} - | IntegerLiteral - ; -IntegerLiteral - : 'value' {{NumberLiteral}} - ; -ArrayLiteral - : ""#("" 'arrayStart' ArrayLiteralItems "")"" 'arrayStop' {{}} - ; -ArrayLiteralItems - : - | ArrayLiteralItems Literal 'value' - ; -ByteArrayLiteral - : ""#["" 'arrayStart' ByteArrayLiteralItems ""]"" 'arrayStop' {{}} - ; -ByteArrayLiteralItems - : - | ByteArrayLiteralItems IntegerLiteral 'value' - ; -CharacterLiteral - : 'value' {{}} - ; -SymbolLiteral - : 'value' {{}} - ; -BooleanLiteral - : ""true"" 'value' {{}} - | ""false"" 'value' {{}} - ; -NilLiteral - : ""nil"" 'value' {{}} - ;" -] - -{ #category : #generated } -GstParser class >> reduceTable [ -^#( - #(32 0 #reduceActionForTemporaries1: 1999873 false ) - #(29 1 #reduceActionForMethodPattern3: 1637379 false ) - #(29 1 #reduceActionForMethodPattern3: 1637380 false ) - #(29 1 #reduceActionForMethodPattern3: 1637378 false ) - #(29 1 #reduceActionForMethodPattern3: 1637377 false ) - #(29 1 #reduceActionForMethodPattern6: 1637382 false ) - #(33 0 #reduceActionForVariables1: 2066433 false ) - #(34 0 #reduceActionForStatements1: 2117633 false ) - #(60 0 #reduceActionForVariables1: 4361217 false ) - #(62 0 #reduceActionForVariables1: 4510721 false ) - #(53 0 #reduceActionForBlockArgs1: 3820545 false ) - #(65 1 #reduceActionForBooleanLiteral2: 4682754 false ) - #(66 1 #reduceActionForNilLiteral1: 4749313 false ) - #(65 1 #reduceActionForBooleanLiteral2: 4682753 false ) - #(50 1 #reduceActionForVariable1: 3603457 false ) - #(56 1 #reduceActionForStringLiteral1: 4121601 false ) - #(64 1 #reduceActionForSymbolLiteral1: 4639745 false ) - #(63 1 #reduceActionForCharacterLiteral1: 4590593 false ) - #(57 1 #reduceActionForNumberLiteral1: 4164609 false ) - #(58 1 #reduceActionForNumberLiteral1: 4225025 false ) - #(36 1 #liftFirstValue: 2280450 false ) - #(37 1 #liftFirstValue: 2356226 false ) - #(38 1 #liftFirstValue: 2453508 false ) - #(41 1 #reduceActionForKeywordMessageSend1: 2833409 false ) - #(41 1 #liftFirstValue: 2833410 false ) - #(44 1 #reduceActionForKeywordMessageSend1: 3161089 false ) - #(44 1 #liftFirstValue: 3161090 false ) - #(47 1 #reduceActionForKeywordMessageSend1: 3404801 false ) - #(51 1 #liftFirstValue: 3638273 false ) - #(47 1 #liftFirstValue: 3404802 false ) - #(51 1 #liftFirstValue: 3638275 false ) - #(51 1 #liftFirstValue: 3638274 false ) - #(55 1 #liftFirstValue: 3968001 false ) - #(55 1 #liftFirstValue: 3968002 false ) - #(57 1 #liftFirstValue: 4164610 false ) - #(55 1 #liftFirstValue: 3968003 false ) - #(55 1 #liftFirstValue: 3968004 false ) - #(55 1 #liftFirstValue: 3968005 false ) - #(55 1 #liftFirstValue: 3968006 false ) - #(55 1 #liftFirstValue: 3968007 false ) - #(55 1 #liftFirstValue: 3968008 false ) - #(30 2 #reduceActionForKeywordPattern1: 1823745 false ) - #(29 2 #reduceActionForKeywordPattern1: 1637381 false ) - #(28 2 #reduceActionForMethod1: 1588225 false ) - #(31 2 #reduceActionForSequence1: 1955841 false ) - #(34 1 #reduceActionForMethodPattern6: 2117634 false ) - #(35 1 #reduceActionForMethodPattern3: 2184193 false ) - #(36 2 #reduceActionForStatement1: 2280449 false ) - #(38 2 #reduceActionForCascade1: 2453505 false ) - #(42 2 #reduceActionForKeywordMessageSendVars1: 2920449 false ) - #(45 2 #reduceActionForKeywordMessageSendVars1: 3245057 false ) - #(38 2 #reduceActionForCascade1: 2453506 false ) - #(49 1 #reduceActionForUnaryMessage1: 3556353 false ) - #(48 2 #reduceActionForKeywordMessageSendVars1: 3475457 false ) - #(38 2 #reduceActionForCascade1: 2453507 false ) - #(30 3 #reduceActionForKeywordPattern2: 1823746 false ) - #(32 3 #reduceActionForTemporaries2: 1999874 false ) - #(33 2 #reduceActionForVariables2: 2066434 false ) - #(34 2 #reduceActionForStatements3: 2117635 false ) - #(59 3 #reduceActionForArrayLiteral1: 4283393 false ) - #(60 2 #reduceActionForVariables2: 4361218 false ) - #(61 3 #reduceActionForByteArrayLiteral1: 4424705 false ) - #(62 2 #reduceActionForVariables2: 4510722 false ) - #(51 3 #reduceActionForValue4: 3638276 false ) - #(54 2 #reduceActionForKeywordPattern1: 3866625 false ) - #(53 2 #reduceActionForBlockArgs2: 3820546 false ) - #(39 2 #reduceActionForKeywordPattern1: 2631681 false ) - #(40 1 #liftFirstValue: 2761729 false ) - #(40 1 #liftFirstValue: 2761730 false ) - #(40 1 #liftFirstValue: 2761731 false ) - #(43 2 #reduceActionForKeywordMessage1: 3006465 false ) - #(46 2 #reduceActionForBinaryMessage1: 3329025 false ) - #(37 3 #reduceActionForAssignment1: 2356225 false ) - #(35 3 #reduceActionForStatementList2: 2184194 false ) - #(52 4 #reduceActionForBlock1: 3738625 false ) - #(54 3 #reduceActionForKeywordPattern2: 3866626 false ) - #(39 3 #reduceActionForCascadedMessages2: 2631682 false ) - #(43 3 #reduceActionForKeywordMessage2: 3006466 false ) - ). -] - -{ #category : #'generated-accessing' } -GstParser class >> scannerClass [ - ^GstScanner -] - -{ #category : #generated } -GstParser class >> startingStateForMethod [ - ^ 1 -] - -{ #category : #generated } -GstParser class >> startingStateForSequence [ - ^ 2 -] - -{ #category : #generated } -GstParser class >> startingStateForStatement [ - ^ 3 -] - -{ #category : #generated } -GstParser class >> symbolNames [ - ^ #('"#("' '"#["' '"("' '")"' '"."' '":"' '":="' '";"' '"["' '"]"' '"^"' '"false"' '"nil"' '"true"' '' '' '' '' '' '' '' '' '' '' '' '' 'B e g i n' 'Method' 'MethodPattern' 'KeywordPattern' 'Sequence' 'Temporaries' 'Variables' 'Statements' 'StatementList' 'Statement' 'Assignment' 'Cascade' 'CascadedMessages' 'CascadedMessage' 'KeywordMessageSend' 'KeywordMessageSendVars' 'KeywordMessage' 'BinaryMessageSend' 'BinaryMessageSendVars' 'BinaryMessage' 'UnaryMessageSend' 'UnaryMessageSendVars' 'UnaryMessage' 'Variable' 'Value' 'Block' 'BlockArgs' 'BlockArgList' 'Literal' 'StringLiteral' 'NumberLiteral' 'IntegerLiteral' 'ArrayLiteral' 'ArrayLiteralItems' 'ByteArrayLiteral' 'ByteArrayLiteralItems' 'CharacterLiteral' 'SymbolLiteral' 'BooleanLiteral' 'NilLiteral' 'E O F' 'error') -] - -{ #category : #generated } -GstParser class >> symbolTypes [ - ^ #(#SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #GstMethodNode #GstMethodNode #OrderedCollection #OrderedCollection #GstSequenceNode #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #GstProgramNode #GstValueNode #GstValueNode #OrderedCollection #GstMessageNode #GstValueNode #OrderedCollection #GstKeywordMessageNode #GstValueNode #OrderedCollection #GstBinaryMessageNode #GstValueNode #OrderedCollection #GstUnaryMessageNode #GstVariableNode #GstValueNode #GstBlockNode #OrderedCollection #OrderedCollection #GstLiteralNode #GstStringLiteralNode #GstNumberLiteralNode #GstNumberLiteralNode #GstArrayLiteralNode #OrderedCollection #GstByteArrayLiteralNode #OrderedCollection #GstCharacterLiteralNode #GstSymbolLiteralNode #GstBooleanLiteralNode #GstNilLiteralNode #SmaCCToken #SmaCCErrorNode) -] - -{ #category : #generated } -GstParser class >> transitionTable [ -^#( -#[1 0 17 0 12 0 21 0 13 0 25 0 14 0 29 0 15 0 33 0 16 0 37 0 18 0 41 0 28 0 45 0 29 0 49 0 30] -#[1 0 6 0 1 0 6 0 2 0 6 0 3 0 6 0 9 0 6 0 11 0 6 0 12 0 6 0 13 0 6 0 14 0 6 0 15 0 53 0 17 0 6 0 19 0 6 0 20 0 6 0 21 0 6 0 24 0 6 0 25 0 57 0 31 0 61 0 32 0 6 0 67] -#[1 0 65 0 1 0 69 0 2 0 73 0 3 0 77 0 9 0 81 0 11 0 85 0 12 0 89 0 13 0 93 0 14 0 97 0 15 0 101 0 19 0 105 0 20 0 109 0 21 0 113 0 24 0 117 0 25 0 121 0 36 0 121 0 37 0 121 0 38 0 121 0 41 0 137 0 42 0 141 0 44 0 145 0 45 0 149 0 47 0 153 0 48 0 157 0 50 0 149 0 51 0 149 0 52 0 149 0 55 0 149 0 56 0 149 0 57 0 149 0 58 0 149 0 59 0 149 0 61 0 149 0 63 0 149 0 64 0 149 0 65 0 149 0 66] -#[0 0 10 0 1 0 2 0 3 0 9 0 11 0 12 0 13 0 14 0 15 0 17 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 14 0 1 0 2 0 3 0 9 0 11 0 12 0 13 0 14 0 15 0 17 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 18 0 1 0 2 0 3 0 9 0 11 0 12 0 13 0 14 0 15 0 17 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 22 0 1 0 2 0 3 0 9 0 11 0 12 0 13 0 14 0 15 0 17 0 19 0 20 0 21 0 24 0 25 0 67] -#[1 0 97 0 15 0 209 0 50] -#[1 0 97 0 15 0 213 0 50] -#[0 0 0 0 67] -#[1 0 6 0 1 0 6 0 2 0 6 0 3 0 6 0 9 0 6 0 11 0 6 0 12 0 6 0 13 0 6 0 14 0 6 0 15 0 53 0 17 0 6 0 19 0 6 0 20 0 6 0 21 0 6 0 24 0 6 0 25 0 217 0 31 0 61 0 32 0 6 0 67] -#[1 0 26 0 1 0 26 0 2 0 26 0 3 0 26 0 9 0 26 0 11 0 26 0 12 0 26 0 13 0 26 0 14 0 26 0 15 0 221 0 16 0 26 0 17 0 26 0 19 0 26 0 20 0 26 0 21 0 26 0 24 0 26 0 25 0 26 0 67] -#[1 0 30 0 15 0 30 0 17 0 225 0 33] -#[0 0 0 0 67] -#[1 0 65 0 1 0 69 0 2 0 73 0 3 0 77 0 9 0 34 0 10 0 81 0 11 0 85 0 12 0 89 0 13 0 93 0 14 0 97 0 15 0 101 0 19 0 105 0 20 0 109 0 21 0 113 0 24 0 117 0 25 0 229 0 34 0 233 0 35 0 237 0 36 0 237 0 37 0 237 0 38 0 237 0 41 0 137 0 42 0 141 0 44 0 145 0 45 0 149 0 47 0 153 0 48 0 157 0 50 0 149 0 51 0 149 0 52 0 149 0 55 0 149 0 56 0 149 0 57 0 149 0 58 0 149 0 59 0 149 0 61 0 149 0 63 0 149 0 64 0 149 0 65 0 149 0 66 0 34 0 67] -#[1 0 38 0 1 0 38 0 2 0 38 0 4 0 38 0 12 0 38 0 13 0 38 0 14 0 38 0 19 0 38 0 20 0 38 0 21 0 38 0 24 0 38 0 25 0 241 0 60] -#[1 0 42 0 10 0 42 0 25 0 245 0 62] -#[1 0 65 0 1 0 69 0 2 0 73 0 3 0 77 0 9 0 85 0 12 0 89 0 13 0 93 0 14 0 97 0 15 0 101 0 19 0 105 0 20 0 109 0 21 0 113 0 24 0 117 0 25 0 249 0 37 0 249 0 38 0 249 0 41 0 137 0 42 0 141 0 44 0 145 0 45 0 149 0 47 0 153 0 48 0 157 0 50 0 149 0 51 0 149 0 52 0 149 0 55 0 149 0 56 0 149 0 57 0 149 0 58 0 149 0 59 0 149 0 61 0 149 0 63 0 149 0 64 0 149 0 65 0 149 0 66] -#[1 0 46 0 1 0 46 0 2 0 46 0 3 0 253 0 6 0 46 0 9 0 46 0 10 0 46 0 11 0 46 0 12 0 46 0 13 0 46 0 14 0 46 0 15 0 46 0 17 0 46 0 19 0 46 0 20 0 46 0 21 0 46 0 24 0 46 0 25 1 1 0 53 1 5 0 54] -#[1 0 65 0 1 0 69 0 2 0 73 0 3 0 77 0 9 0 85 0 12 0 89 0 13 0 93 0 14 0 97 0 15 0 101 0 19 0 105 0 20 0 109 0 21 0 113 0 24 0 117 0 25 1 9 0 37 1 9 0 38 1 9 0 41 0 137 0 42 0 141 0 44 0 145 0 45 0 149 0 47 0 153 0 48 0 157 0 50 0 149 0 51 0 149 0 52 0 149 0 55 0 149 0 56 0 149 0 57 0 149 0 58 0 149 0 59 0 149 0 61 0 149 0 63 0 149 0 64 0 149 0 65 0 149 0 66] -#[0 0 50 0 1 0 2 0 4 0 5 0 8 0 10 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 54 0 1 0 2 0 4 0 5 0 8 0 10 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 58 0 1 0 2 0 4 0 5 0 8 0 10 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 62 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 66 0 1 0 2 0 4 0 5 0 8 0 10 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 70 0 1 0 2 0 4 0 5 0 8 0 10 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 74 0 1 0 2 0 4 0 5 0 8 0 10 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 78 0 1 0 2 0 4 0 5 0 8 0 10 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 82 0 1 0 2 0 4 0 5 0 8 0 10 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 0 0 67] -#[0 0 86 0 5 0 10 0 67] -#[0 0 90 0 4 0 5 0 10 0 67] -#[0 0 94 0 4 0 5 0 10 0 67] -#[1 0 98 0 4 0 98 0 5 1 13 0 8 0 98 0 10 1 17 0 39 0 98 0 67] -#[1 0 102 0 4 0 102 0 5 0 102 0 10 1 21 0 16 1 25 0 18 1 29 0 43 1 33 0 46 0 102 0 67] -#[1 0 106 0 4 0 106 0 5 1 13 0 8 0 106 0 10 0 106 0 16 0 106 0 18 1 37 0 39 0 106 0 67] -#[1 0 110 0 4 0 110 0 5 0 110 0 8 0 110 0 10 1 41 0 15 0 110 0 16 0 110 0 18 1 45 0 49 0 110 0 67] -#[1 0 114 0 4 0 114 0 5 1 13 0 8 0 114 0 10 0 114 0 15 0 114 0 16 0 114 0 18 1 49 0 39 0 114 0 67] -#[1 0 118 0 4 0 118 0 5 1 53 0 7 0 118 0 10 0 118 0 15 0 118 0 16 0 118 0 18 0 118 0 67] -#[0 0 122 0 4 0 5 0 8 0 10 0 15 0 16 0 18 0 67] -#[0 0 126 0 4 0 5 0 8 0 10 0 15 0 16 0 18 0 67] -#[0 0 130 0 4 0 5 0 8 0 10 0 15 0 16 0 18 0 67] -#[0 0 134 0 1 0 2 0 4 0 5 0 8 0 10 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 138 0 1 0 2 0 4 0 5 0 8 0 10 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 142 0 1 0 2 0 4 0 5 0 8 0 10 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 146 0 1 0 2 0 4 0 5 0 8 0 10 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 150 0 1 0 2 0 4 0 5 0 8 0 10 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 154 0 1 0 2 0 4 0 5 0 8 0 10 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 158 0 1 0 2 0 4 0 5 0 8 0 10 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 162 0 1 0 2 0 4 0 5 0 8 0 10 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 166 0 1 0 2 0 4 0 5 0 8 0 10 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 170 0 1 0 2 0 3 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 174 0 1 0 2 0 3 0 9 0 11 0 12 0 13 0 14 0 15 0 17 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 178 0 67] -#[1 0 97 0 15 1 57 0 50] -#[1 0 97 0 15 1 61 0 17 1 65 0 50] -#[0 0 182 0 10 0 67] -#[1 1 69 0 5 0 186 0 10 0 186 0 67] -#[0 0 190 0 5 0 10 0 67] -#[1 0 65 0 1 0 69 0 2 1 73 0 4 0 85 0 12 0 89 0 13 0 93 0 14 0 101 0 19 0 105 0 20 0 109 0 21 0 113 0 24 0 117 0 25 1 77 0 55 1 77 0 56 1 77 0 57 1 77 0 58 1 77 0 59 1 77 0 61 1 77 0 63 1 77 0 64 1 77 0 65 1 77 0 66] -#[1 1 81 0 10 0 117 0 25 1 85 0 58] -#[0 1 89 0 4] -#[1 0 97 0 15 1 93 0 50] -#[1 0 6 0 1 0 6 0 2 0 6 0 3 0 6 0 9 0 6 0 10 0 6 0 11 0 6 0 12 0 6 0 13 0 6 0 14 0 6 0 15 0 53 0 17 0 6 0 19 0 6 0 20 0 6 0 21 0 6 0 24 0 6 0 25 1 97 0 31 0 61 0 32] -#[1 1 101 0 6 1 105 0 17] -#[0 0 194 0 5 0 10 0 67] -#[1 1 41 0 15 1 21 0 16 1 25 0 18 1 109 0 40 1 113 0 43 1 109 0 46 1 109 0 49] -#[0 0 198 0 4 0 5 0 10 0 67] -#[1 0 65 0 1 0 69 0 2 0 73 0 3 0 77 0 9 0 85 0 12 0 89 0 13 0 93 0 14 0 97 0 15 0 101 0 19 0 105 0 20 0 109 0 21 0 113 0 24 0 117 0 25 1 125 0 44 1 129 0 45 0 149 0 47 1 133 0 48 0 149 0 50 0 149 0 51 0 149 0 52 0 149 0 55 0 149 0 56 0 149 0 57 0 149 0 58 0 149 0 59 0 149 0 61 0 149 0 63 0 149 0 64 0 149 0 65 0 149 0 66] -#[1 0 65 0 1 0 69 0 2 0 73 0 3 0 77 0 9 0 85 0 12 0 89 0 13 0 93 0 14 0 97 0 15 0 101 0 19 0 105 0 20 0 109 0 21 0 113 0 24 0 117 0 25 1 141 0 47 1 133 0 48 1 141 0 50 1 141 0 51 1 141 0 52 1 141 0 55 1 141 0 56 1 141 0 57 1 141 0 58 1 141 0 59 1 141 0 61 1 141 0 63 1 141 0 64 1 141 0 65 1 141 0 66] -#[1 0 202 0 4 0 202 0 5 0 202 0 8 0 202 0 10 1 145 0 16 0 202 0 67] -#[0 0 206 0 4 0 5 0 8 0 10 0 16 0 18 0 67] -#[0 0 210 0 4 0 5 0 10 0 67] -#[0 0 214 0 4 0 5 0 8 0 10 0 15 0 16 0 18 0 67] -#[0 0 218 0 4 0 5 0 8 0 10 0 15 0 16 0 18 0 67] -#[0 0 222 0 4 0 5 0 10 0 67] -#[1 0 65 0 1 0 69 0 2 0 73 0 3 0 77 0 9 0 85 0 12 0 89 0 13 0 93 0 14 0 97 0 15 0 101 0 19 0 105 0 20 0 109 0 21 0 113 0 24 0 117 0 25 1 149 0 37 1 149 0 38 1 149 0 41 0 137 0 42 0 141 0 44 0 145 0 45 0 149 0 47 0 153 0 48 0 157 0 50 0 149 0 51 0 149 0 52 0 149 0 55 0 149 0 56 0 149 0 57 0 149 0 58 0 149 0 59 0 149 0 61 0 149 0 63 0 149 0 64 0 149 0 65 0 149 0 66] -#[0 0 226 0 1 0 2 0 3 0 9 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 230 0 1 0 2 0 3 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 234 0 15 0 17] -#[1 0 65 0 1 0 69 0 2 0 73 0 3 0 77 0 9 0 238 0 10 0 81 0 11 0 85 0 12 0 89 0 13 0 93 0 14 0 97 0 15 0 101 0 19 0 105 0 20 0 109 0 21 0 113 0 24 0 117 0 25 1 153 0 36 1 153 0 37 1 153 0 38 1 153 0 41 0 137 0 42 0 141 0 44 0 145 0 45 0 149 0 47 0 153 0 48 0 157 0 50 0 149 0 51 0 149 0 52 0 149 0 55 0 149 0 56 0 149 0 57 0 149 0 58 0 149 0 59 0 149 0 61 0 149 0 63 0 149 0 64 0 149 0 65 0 149 0 66 0 238 0 67] -#[0 0 242 0 1 0 2 0 4 0 5 0 8 0 10 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 246 0 1 0 2 0 4 0 12 0 13 0 14 0 19 0 20 0 21 0 24 0 25] -#[0 0 250 0 1 0 2 0 4 0 5 0 8 0 10 0 12 0 13 0 14 0 15 0 16 0 18 0 19 0 20 0 21 0 24 0 25 0 67] -#[0 0 254 0 10 0 25] -#[0 1 2 0 4 0 5 0 8 0 10 0 15 0 16 0 18 0 67] -#[0 1 6 0 6 0 17] -#[0 1 157 0 10] -#[1 0 97 0 15 1 161 0 50] -#[0 1 10 0 1 0 2 0 3 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 17 0 19 0 20 0 21 0 24 0 25] -#[1 1 14 0 4 1 14 0 5 1 13 0 8 1 14 0 10 1 165 0 39 1 14 0 67] -#[1 1 18 0 4 1 18 0 5 1 18 0 8 1 18 0 10 1 145 0 16 1 18 0 67] -#[0 1 22 0 4 0 5 0 8 0 10 0 67] -#[0 1 26 0 4 0 5 0 8 0 10 0 67] -#[1 1 30 0 4 1 30 0 5 1 30 0 8 1 30 0 10 1 30 0 16 1 25 0 18 1 33 0 46 1 30 0 67] -#[0 0 106 0 4 0 5 0 8 0 10 0 16 0 18 0 67] -#[0 0 114 0 4 0 5 0 8 0 10 0 15 0 16 0 18 0 67] -#[0 0 118 0 4 0 5 0 8 0 10 0 15 0 16 0 18 0 67] -#[1 1 34 0 4 1 34 0 5 1 34 0 8 1 34 0 10 1 41 0 15 1 34 0 16 1 34 0 18 1 45 0 49 1 34 0 67] -#[1 0 65 0 1 0 69 0 2 0 73 0 3 0 77 0 9 0 85 0 12 0 89 0 13 0 93 0 14 0 97 0 15 0 101 0 19 0 105 0 20 0 109 0 21 0 113 0 24 0 117 0 25 1 169 0 44 1 129 0 45 0 149 0 47 1 133 0 48 0 149 0 50 0 149 0 51 0 149 0 52 0 149 0 55 0 149 0 56 0 149 0 57 0 149 0 58 0 149 0 59 0 149 0 61 0 149 0 63 0 149 0 64 0 149 0 65 0 149 0 66] -#[0 1 38 0 4 0 5 0 10 0 67] -#[0 1 42 0 5 0 10 0 67] -#[0 1 46 0 4 0 5 0 8 0 10 0 15 0 16 0 18 0 67] -#[0 1 50 0 6 0 17] -#[0 1 54 0 4 0 5 0 10 0 67] -#[1 1 58 0 4 1 58 0 5 1 58 0 8 1 58 0 10 1 58 0 16 1 25 0 18 1 33 0 46 1 58 0 67] - ). -] - -{ #category : #public } -GstParser >> actionsForCurrentToken [ - | actions | - actions := super actionsForCurrentToken. - actions isEmpty - ifTrue: - [ (currentToken ids includes: scanner binaryId) - ifTrue: - [ currentToken value = '|' - ifTrue: [ self addActionsFor: scanner binaryId to: actions ] - ifFalse: - [ (#('||' '|||') includes: currentToken value) - ifTrue: - [ currentToken := currentToken class - value: '|' - start: currentToken startPosition - ids: (Array with: scanner barId). - self position: currentToken startPosition. - actions := super actionsForCurrentToken ] ] ] ]. - ^ actions -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForArrayLiteral1: nodes [ - | result | - result := GstArrayLiteralNode new. - result arrayStart: (nodes at: 1). - result addNodes: (nodes at: 2) to: result values. - result arrayStop: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForAssignment1: nodes [ - | result | - result := GstAssignmentNode new. - result variable: (nodes at: 1). - result assignmentToken: (nodes at: 2). - result value: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForBinaryMessage1: nodes [ - | result | - result := GstBinaryMessageNode new. - result selectorPart: (nodes at: 1). - result value: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForBlock1: nodes [ - | result | - result := GstBlockNode new. - result leftBracket: (nodes at: 1). - result addTokens: ((nodes at: 2) at: 1) to: result colons. - result addNodes: ((nodes at: 2) at: 2) to: result variables. - result bar: ((nodes at: 2) at: 3). - result body: (nodes at: 3). - result rightBracket: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForBlockArgs1: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForBlockArgs2: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - result at: 3 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForBooleanLiteral2: nodes [ - | result | - result := GstBooleanLiteralNode new. - result value: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForByteArrayLiteral1: nodes [ - | result | - result := GstByteArrayLiteralNode new. - result arrayStart: (nodes at: 1). - result addNodes: (nodes at: 2) to: result values. - result arrayStop: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForCascade1: nodes [ - | result | - result := GstCascadeNode new. - result receiver: ((nodes at: 1) at: 1). - result addNode: ((nodes at: 1) at: 2) to: result messages. - result addTokens: ((nodes at: 2) at: 1) to: result semicolons. - result addNodes: ((nodes at: 2) at: 2) to: result messages. - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForCascadedMessages2: nodes [ - | result | - result := nodes at: 3. - self addFirst: (nodes at: 1) to: (result at: 1). - self addFirst: (nodes at: 2) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForCharacterLiteral1: nodes [ - | result | - result := GstCharacterLiteralNode new. - result value: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForKeywordMessage1: nodes [ - | result | - result := GstKeywordMessageNode new. - result addToken: (nodes at: 1) to: result selectorParts. - result addNode: (nodes at: 2) to: result values. - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForKeywordMessage2: nodes [ - | result | - result := nodes at: 1. - result addToken: (nodes at: 2) to: result selectorParts. - result addNode: (nodes at: 3) to: result values. - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForKeywordMessageSend1: nodes [ - | result | - result := GstMessageSendNode new. - result receiver: ((nodes at: 1) at: 1). - result message: ((nodes at: 1) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForKeywordMessageSendVars1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForKeywordPattern1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - self add: (nodes at: 2) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForKeywordPattern2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 1). - self add: (nodes at: 3) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForMethod1: nodes [ - | result | - result := GstMethodNode new. - result addTokens: ((nodes at: 1) at: 1) to: result selectorParts. - result addNodes: ((nodes at: 1) at: 2) to: result variables. - result body: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForMethodPattern3: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForMethodPattern6: nodes [ - | result | - result := nodes at: 1. - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForNilLiteral1: nodes [ - | result | - result := GstNilLiteralNode new. - result value: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForNumberLiteral1: nodes [ - | result | - result := GstNumberLiteralNode new. - result value: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForSequence1: nodes [ - | result | - result := GstSequenceNode new. - result leftBar: ((nodes at: 1) at: 1). - result addNodes: ((nodes at: 1) at: 2) to: result variables. - result rightBar: ((nodes at: 1) at: 3). - result addNodes: ((nodes at: 2) at: 1) to: result statements. - result addTokens: ((nodes at: 2) at: 2) to: result periods. - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForStatement1: nodes [ - | result | - result := GstReturnNode new. - result upArrow: (nodes at: 1). - result value: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForStatementList2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 2). - self add: (nodes at: 3) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForStatements1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForStatements3: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForStringLiteral1: nodes [ - | result | - result := GstStringLiteralNode new. - result value: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForSymbolLiteral1: nodes [ - | result | - result := GstSymbolLiteralNode new. - result value: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForTemporaries1: nodes [ - | result | - result := Array new: 3. - result at: 2 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForTemporaries2: nodes [ - | result | - result := Array new: 3. - result at: 2 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: (nodes at: 2) to: (result at: 2). - result at: 3 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForUnaryMessage1: nodes [ - | result | - result := GstUnaryMessageNode new. - result selectorPart: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForValue4: nodes [ - | result | - result := nodes at: 2. - result addFirstToken: (nodes at: 1) to: result leftParens. - result addToken: (nodes at: 3) to: result rightParens. - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForVariable1: nodes [ - | result | - result := GstVariableNode new. - result name: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForVariables1: nodes [ - | result | - result := OrderedCollection new: 2. - ^ result -] - -{ #category : #'generated-reduction actions' } -GstParser >> reduceActionForVariables2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: result. - ^ result -] diff --git a/src/SmaCC_Generic_Smalltalk_Parser/GstProgramNode.class.st b/src/SmaCC_Generic_Smalltalk_Parser/GstProgramNode.class.st deleted file mode 100644 index 4152b2427..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/GstProgramNode.class.st +++ /dev/null @@ -1,34 +0,0 @@ -Class { - #name : #GstProgramNode, - #superclass : #SmaCCParseNode, - #category : #'SmaCC_Generic_Smalltalk_Parser' -} - -{ #category : #generated } -GstProgramNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitProgram: self -] - -{ #category : #testing } -GstProgramNode >> isUsed [ - (parent isKindOf: GstValueNode) - ifTrue: [ ^ true ]. - (parent isKindOf: GstReturnNode) - ifTrue: [ ^ true ]. - (parent isKindOf: GstMessageNode) - ifTrue: [ ^ true ]. - ((parent isKindOf: GstSequenceNode) - and: - [ parent statements last == self - and: [ parent parent isKindOf: GstBlockNode ] ]) - ifTrue: - [ | node | - node := parent parent parent. - (node isKindOf: GstMessageNode) - ifTrue: - [ (#(#ifTrue: #ifTrue:ifFalse: #ifFalse: #ifFalse:ifTrue: #whileTrue: #whileFalse: #ifNil: #ifNil:ifNotNil: #ifNotNil: #ifNotNil:ifNil:) - includes: node symbol) - ifTrue: [ ^ node isUsed ] ]. - ^ true ]. - ^ false -] diff --git a/src/SmaCC_Generic_Smalltalk_Parser/GstProgramNodeVisitor.class.st b/src/SmaCC_Generic_Smalltalk_Parser/GstProgramNodeVisitor.class.st deleted file mode 100644 index f956aa7db..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/GstProgramNodeVisitor.class.st +++ /dev/null @@ -1,120 +0,0 @@ -Class { - #name : #GstProgramNodeVisitor, - #superclass : #SmaCCParseNodeVisitor, - #category : #'SmaCC_Generic_Smalltalk_Parser' -} - -{ #category : #generated } -GstProgramNodeVisitor >> visitArrayLiteral: anArrayLiteral [ - ^ self visitLiteral: anArrayLiteral -] - -{ #category : #generated } -GstProgramNodeVisitor >> visitAssignment: anAssignment [ - ^ self visitValue: anAssignment -] - -{ #category : #generated } -GstProgramNodeVisitor >> visitBinaryMessage: aBinaryMessage [ - ^ self visitMessage: aBinaryMessage -] - -{ #category : #generated } -GstProgramNodeVisitor >> visitBlock: aBlock [ - ^ self visitValue: aBlock -] - -{ #category : #generated } -GstProgramNodeVisitor >> visitBooleanLiteral: aBooleanLiteral [ - ^ self visitLiteral: aBooleanLiteral -] - -{ #category : #generated } -GstProgramNodeVisitor >> visitByteArrayLiteral: aByteArrayLiteral [ - ^ self visitArrayLiteral: aByteArrayLiteral -] - -{ #category : #generated } -GstProgramNodeVisitor >> visitCascade: aCascade [ - ^ self visitValue: aCascade -] - -{ #category : #generated } -GstProgramNodeVisitor >> visitCharacterLiteral: aCharacterLiteral [ - ^ self visitLiteral: aCharacterLiteral -] - -{ #category : #generated } -GstProgramNodeVisitor >> visitKeywordMessage: aKeywordMessage [ - ^ self visitMessage: aKeywordMessage -] - -{ #category : #generated } -GstProgramNodeVisitor >> visitLiteral: aLiteral [ - ^ self visitValue: aLiteral -] - -{ #category : #generated } -GstProgramNodeVisitor >> visitMessage: aMessage [ - ^ self visitProgram: aMessage -] - -{ #category : #generated } -GstProgramNodeVisitor >> visitMessageSend: aMessageSend [ - ^ self visitValue: aMessageSend -] - -{ #category : #generated } -GstProgramNodeVisitor >> visitMethod: aMethod [ - ^ self visitProgram: aMethod -] - -{ #category : #generated } -GstProgramNodeVisitor >> visitNilLiteral: aNilLiteral [ - ^ self visitLiteral: aNilLiteral -] - -{ #category : #generated } -GstProgramNodeVisitor >> visitNumberLiteral: aNumberLiteral [ - ^ self visitLiteral: aNumberLiteral -] - -{ #category : #generated } -GstProgramNodeVisitor >> visitProgram: aProgram [ - ^ self visitSmaCCParseNode: aProgram -] - -{ #category : #generated } -GstProgramNodeVisitor >> visitReturn: aReturn [ - ^ self visitProgram: aReturn -] - -{ #category : #generated } -GstProgramNodeVisitor >> visitSequence: aSequence [ - ^ self visitProgram: aSequence -] - -{ #category : #generated } -GstProgramNodeVisitor >> visitStringLiteral: aStringLiteral [ - ^ self visitLiteral: aStringLiteral -] - -{ #category : #generated } -GstProgramNodeVisitor >> visitSymbolLiteral: aSymbolLiteral [ - ^ self visitLiteral: aSymbolLiteral -] - -{ #category : #generated } -GstProgramNodeVisitor >> visitUnaryMessage: anUnaryMessage [ - ^ self visitMessage: anUnaryMessage -] - -{ #category : #generated } -GstProgramNodeVisitor >> visitValue: aValue [ - ^ self visitProgram: aValue -] - -{ #category : #generated } -GstProgramNodeVisitor >> visitVariable: aVariable [ - ^ self visitValue: aVariable -] diff --git a/src/SmaCC_Generic_Smalltalk_Parser/GstReturnNode.class.st b/src/SmaCC_Generic_Smalltalk_Parser/GstReturnNode.class.st deleted file mode 100644 index 22d13f126..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/GstReturnNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #GstReturnNode, - #superclass : #GstProgramNode, - #instVars : [ - 'upArrow', - 'value' - ], - #category : #'SmaCC_Generic_Smalltalk_Parser' -} - -{ #category : #generated } -GstReturnNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitReturn: self -] - -{ #category : #generated } -GstReturnNode >> nodeVariables [ - ^ #(#value) -] - -{ #category : #generated } -GstReturnNode >> tokenVariables [ - ^ #(#upArrow) -] - -{ #category : #generated } -GstReturnNode >> upArrow [ - ^ upArrow -] - -{ #category : #generated } -GstReturnNode >> upArrow: aSmaCCToken [ - upArrow := aSmaCCToken -] - -{ #category : #generated } -GstReturnNode >> value [ - ^ value -] - -{ #category : #generated } -GstReturnNode >> value: aGstValueNode [ - self value notNil - ifTrue: [ self value parent: nil ]. - value := aGstValueNode. - self value notNil - ifTrue: [ self value parent: self ] -] diff --git a/src/SmaCC_Generic_Smalltalk_Parser/GstScanner.class.st b/src/SmaCC_Generic_Smalltalk_Parser/GstScanner.class.st deleted file mode 100644 index 2f00073a3..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/GstScanner.class.st +++ /dev/null @@ -1,1210 +0,0 @@ -Class { - #name : #GstScanner, - #superclass : #SmaCCScanner, - #category : #'SmaCC_Generic_Smalltalk_Parser' -} - -{ #category : #'generated-initialization' } -GstScanner class >> initializeKeywordMap [ - keywordMap := Dictionary new. - #(#(15 'false' 12) #(15 'nil' 13) #(15 'true' 14)) - do: [ :each | - (keywordMap at: each first ifAbsentPut: [ Dictionary new ]) - at: (each at: 2) - put: each last ]. - ^ keywordMap -] - -{ #category : #generated } -GstScanner >> barId [ - ^ 17 -] - -{ #category : #generated } -GstScanner >> binaryId [ - ^ 18 -] - -{ #category : #generated } -GstScanner >> emptySymbolTokenId [ - ^ 67 -] - -{ #category : #generated } -GstScanner >> errorTokenId [ - ^ 68 -] - -{ #category : #generated } -GstScanner >> scan1 [ - [ self step. - currentCharacter == $' - ifTrue: [ self recordMatch: #(20). - self step. - currentCharacter == $' - ifTrue: [ ^ self scan1 ]. - ^ self reportLastMatch ]. - true ] whileTrue -] - -{ #category : #generated } -GstScanner >> scan10 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter between: $0 and: $3) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter between: $0 and: $3 ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan11 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter between: $0 and: $4) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter between: $0 and: $4 ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan12 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter between: $0 and: $5) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter between: $0 and: $5 ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan13 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter between: $0 and: $6) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter between: $0 and: $6 ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan14 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter between: $0 and: $7) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter between: $0 and: $7 ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan15 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter between: $0 and: $8) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter between: $0 and: $8 ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan16 [ - [ self step. - currentCharacter == $` - ifTrue: [ self recordMatch: #(26). - self step. - currentCharacter == $` - ifTrue: [ ^ self scan16 ]. - ^ self reportLastMatch ]. - true ] whileTrue -] - -{ #category : #generated } -GstScanner >> scan2 [ - self recordMatch: #(20). - self step. - (currentCharacter isLetter or: [ currentCharacter == $_ ]) - ifTrue: [ [ self step. - currentCharacter == $: - ifTrue: [ ^ self scan2 ]. - currentCharacter isAlphaNumeric or: [ currentCharacter == $_ ] ] - whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan3 [ - [ self step. - currentCharacter == $' - ifTrue: [ self recordMatch: #(19). - self step. - currentCharacter == $' - ifTrue: [ ^ self scan3 ]. - ^ self reportLastMatch ]. - true ] whileTrue -] - -{ #category : #generated } -GstScanner >> scan4 [ - [ self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter isDigit ] whileTrue. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan5 [ - self step. - currentCharacter isDigit - ifTrue: [ [ self recordMatch: #(24). - self step. - currentCharacter isDigit ] whileTrue. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ] ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan6 [ - self step. - currentCharacter isDigit - ifTrue: [ [ self recordMatch: #(24). - self step. - currentCharacter isDigit ] whileTrue. - ^ self reportLastMatch ]. - ('+-' includes: currentCharacter) - ifTrue: [ self step. - currentCharacter isDigit - ifTrue: [ [ self recordMatch: #(24). - self step. - currentCharacter isDigit ] whileTrue ] ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan7 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $0 - ifTrue: [ ^ self scan7X9 ]. - currentCharacter == $1 - ifTrue: [ ^ self scan7X8 ]. - currentCharacter == $2 - ifTrue: [ ^ self scan7X7 ]. - currentCharacter == $3 - ifTrue: [ ^ self scan7X6 ]. - ^ self scan7X11 -] - -{ #category : #generated } -GstScanner >> scan7X1 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter isDigit - or: [ currentCharacter between: $A and: $H ]) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit - or: [ currentCharacter between: $A and: $H ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan7X10 [ - self step. - (currentCharacter isDigit - or: [ currentCharacter between: $A and: $I ]) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit - or: [ currentCharacter between: $A and: $I ] ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan7X11 [ - currentCharacter == $4 - ifTrue: [ ^ self scan7X5 ]. - currentCharacter == $5 - ifTrue: [ ^ self scan7X4 ]. - currentCharacter == $6 - ifTrue: [ ^ self scan7X3 ]. - currentCharacter == $7 - ifTrue: [ ^ self scan7X2 ]. - currentCharacter == $8 - ifTrue: [ ^ self scan7X1 ]. - currentCharacter isDigit - ifTrue: [ self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: - [ ^ self scan7X10 ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ] ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan7X2 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter isDigit - or: [ currentCharacter between: $A and: $G ]) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit - or: [ currentCharacter between: $A and: $G ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan7X3 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter isDigit - or: [ currentCharacter between: $A and: $F ]) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit - or: [ currentCharacter between: $A and: $F ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan7X4 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter isDigit - or: [ currentCharacter between: $A and: $E ]) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit - or: [ currentCharacter between: $A and: $E ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan7X5 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter isDigit - or: [ currentCharacter between: $A and: $D ]) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit - or: [ currentCharacter between: $A and: $D ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan7X6 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter isDigit - or: [ currentCharacter between: $A and: $C ]) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit - or: [ currentCharacter between: $A and: $C ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan7X7 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter isDigit - or: [ currentCharacter between: $A and: $B ]) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit - or: [ currentCharacter between: $A and: $B ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan7X8 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter isDigit or: [ currentCharacter == $A ]) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit or: [ currentCharacter == $A ] ] - whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan7X9 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - currentCharacter isDigit - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan8 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $0 - ifTrue: - [ ^ self scan8X10 ]. - ^ self scan8X12 -] - -{ #category : #generated } -GstScanner >> scan8X1 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter isDigit - or: [ currentCharacter between: $A and: $S ]) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit - or: [ currentCharacter between: $A and: $S ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan8X10 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter isDigit - or: [ currentCharacter between: $A and: $J ]) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit - or: [ currentCharacter between: $A and: $J ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan8X11 [ - self step. - (currentCharacter between: $0 and: $1) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter between: $0 and: $1 ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan8X12 [ - currentCharacter == $1 - ifTrue: - [ ^ self scan8X9 ]. - currentCharacter == $2 - ifTrue: - [ ^ self scan8X8 ]. - currentCharacter == $3 - ifTrue: - [ ^ self scan8X7 ]. - currentCharacter == $4 - ifTrue: - [ ^ self scan8X6 ]. - currentCharacter == $5 - ifTrue: - [ ^ self scan8X5 ]. - currentCharacter == $6 - ifTrue: - [ ^ self scan8X4 ]. - currentCharacter == $7 - ifTrue: - [ ^ self scan8X3 ]. - currentCharacter == $8 - ifTrue: - [ ^ self scan8X2 ]. - currentCharacter isDigit - ifTrue: - [ ^ self scan8X1 ]. - currentCharacter == $r - ifTrue: - [ ^ self scan8X11 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan8X2 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter isDigit - or: [ currentCharacter between: $A and: $R ]) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit - or: [ currentCharacter between: $A and: $R ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan8X3 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter isDigit - or: [ currentCharacter between: $A and: $Q ]) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit - or: [ currentCharacter between: $A and: $Q ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan8X4 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter isDigit - or: [ currentCharacter between: $A and: $P ]) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit - or: [ currentCharacter between: $A and: $P ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan8X5 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter isDigit - or: [ currentCharacter between: $A and: $O ]) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit - or: [ currentCharacter between: $A and: $O ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan8X6 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter isDigit - or: [ currentCharacter between: $A and: $N ]) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit - or: [ currentCharacter between: $A and: $N ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan8X7 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter isDigit - or: [ currentCharacter between: $A and: $M ]) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit - or: [ currentCharacter between: $A and: $M ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan8X8 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter isDigit - or: [ currentCharacter between: $A and: $L ]) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit - or: [ currentCharacter between: $A and: $L ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan8X9 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter isDigit - or: [ currentCharacter between: $A and: $K ]) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit - or: [ currentCharacter between: $A and: $K ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan9 [ - self recordMatch: #(25). - self step. - ^ self scan9X9 -] - -{ #category : #generated } -GstScanner >> scan9X1 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter isDigit - or: [ currentCharacter between: $A and: $Z ]) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit - or: [ currentCharacter between: $A and: $Z ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan9X2 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter isDigit - or: [ currentCharacter between: $A and: $Y ]) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit - or: [ currentCharacter between: $A and: $Y ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan9X3 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter isDigit - or: [ currentCharacter between: $A and: $X ]) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit - or: [ currentCharacter between: $A and: $X ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan9X4 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter isDigit - or: [ currentCharacter between: $A and: $W ]) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit - or: [ currentCharacter between: $A and: $W ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan9X5 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter isDigit - or: [ currentCharacter between: $A and: $V ]) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit - or: [ currentCharacter between: $A and: $V ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan9X6 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter isDigit - or: [ currentCharacter between: $A and: $U ]) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit - or: [ currentCharacter between: $A and: $U ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan9X7 [ - self recordMatch: #(25). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $r - ifTrue: [ self step. - (currentCharacter isDigit - or: [ currentCharacter between: $A and: $T ]) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter isDigit - or: [ currentCharacter between: $A and: $T ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan9X8 [ - self step. - (currentCharacter between: $0 and: $2) - ifTrue: [ [ self recordMatch: #(25). - self step. - currentCharacter between: $0 and: $2 ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scan9X9 [ - currentCharacter == $. - ifTrue: [ ^ self scan5 ]. - currentCharacter == $0 - ifTrue: - [ ^ self scan9X7 ]. - currentCharacter == $1 - ifTrue: - [ ^ self scan9X6 ]. - currentCharacter == $2 - ifTrue: - [ ^ self scan9X5 ]. - currentCharacter == $3 - ifTrue: - [ ^ self scan9X4 ]. - currentCharacter == $4 - ifTrue: - [ ^ self scan9X3 ]. - currentCharacter == $5 - ifTrue: - [ ^ self scan9X2 ]. - currentCharacter == $6 - ifTrue: - [ ^ self scan9X1 ]. - currentCharacter == $r - ifTrue: - [ ^ self scan9X8 ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $d and: $e) - or: [ currentCharacter == $q ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scanForToken [ - self step. - currentCharacter == $" - ifTrue: [ [ self step. - currentCharacter == $" - ifTrue: [ ^ self recordAndReportMatch: #(22) ]. - true ] whileTrue ]. - currentCharacter == $# - ifTrue: - [ ^ self scanForTokenX2 ]. - currentCharacter == $$ - ifTrue: - [ ^ self scanForTokenX7 ]. - currentCharacter == $' - ifTrue: [ ^ self scan3 ]. - currentCharacter == $( - ifTrue: [ ^ self recordAndReportMatch: #(3) ]. - currentCharacter == $) - ifTrue: [ ^ self recordAndReportMatch: #(4) ]. - currentCharacter == $- - ifTrue: - [ ^ self scanForTokenX1 ]. - currentCharacter == $. - ifTrue: [ ^ self recordAndReportMatch: #(5) ]. - ^ self scanForTokenX9 -] - -{ #category : #generated } -GstScanner >> scanForTokenX1 [ - self recordMatch: #(18). - self step. - currentCharacter == $0 - ifTrue: [ ^ self scan4 ]. - currentCharacter == $1 - ifTrue: [ ^ self scan7 ]. - currentCharacter == $2 - ifTrue: [ ^ self scan8 ]. - currentCharacter == $3 - ifTrue: [ ^ self scan9 ]. - currentCharacter == $4 - ifTrue: [ ^ self scan10 ]. - currentCharacter == $5 - ifTrue: [ ^ self scan11 ]. - currentCharacter == $6 - ifTrue: [ ^ self scan12 ]. - currentCharacter == $7 - ifTrue: [ ^ self scan13 ]. - currentCharacter == $8 - ifTrue: [ ^ self scan14 ]. - currentCharacter isDigit - ifTrue: [ ^ self scan15 ]. - currentCharacter isSpecial - ifTrue: [ [ self recordMatch: #(18). - self step. - currentCharacter isSpecial ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scanForTokenX2 [ - self step. - currentCharacter == $' - ifTrue: [ ^ self scan1 ]. - currentCharacter == $( - ifTrue: [ ^ self recordAndReportMatch: #(1) ]. - currentCharacter == $[ - ifTrue: [ ^ self recordAndReportMatch: #(2) ]. - currentCharacter isSpecial - ifTrue: [ [ self recordMatch: #(20). - self step. - currentCharacter isSpecial ] whileTrue. - ^ self reportLastMatch ]. - (currentCharacter isLetter or: [ currentCharacter == $_ ]) - ifTrue: [ [ self recordMatch: #(20). - self step. - currentCharacter == $: - ifTrue: [ ^ self scan2 ]. - currentCharacter isAlphaNumeric or: [ currentCharacter == $_ ] ] - whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scanForTokenX3 [ - [ self recordMatch: #(23). - self step. - currentCharacter isSeparator - or: [ currentCharacter == Character pageUp ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scanForTokenX4 [ - self recordMatch: #(6). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(7) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scanForTokenX5 [ - self recordMatch: #(17 18). - self step. - currentCharacter isSpecial - ifTrue: [ [ self recordMatch: #(18). - self step. - currentCharacter isSpecial ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scanForTokenX6 [ - [ self recordMatch: #(18). - self step. - currentCharacter isSpecial ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scanForTokenX7 [ - self step. - ^ self recordAndReportMatch: #(21) -] - -{ #category : #generated } -GstScanner >> scanForTokenX8 [ - currentCharacter == $[ - ifTrue: [ ^ self recordAndReportMatch: #(9) ]. - currentCharacter == $] - ifTrue: [ ^ self recordAndReportMatch: #(10) ]. - currentCharacter == $^ - ifTrue: [ ^ self recordAndReportMatch: #(11) ]. - currentCharacter == $` - ifTrue: [ ^ self scan16 ]. - currentCharacter == $| - ifTrue: - [ ^ self scanForTokenX5 ]. - (currentCharacter isSeparator - or: [ currentCharacter == Character pageUp ]) - ifTrue: - [ ^ self scanForTokenX3 ]. - currentCharacter isSpecial - ifTrue: - [ ^ self scanForTokenX6 ]. - (currentCharacter isLetter or: [ currentCharacter == $_ ]) - ifTrue: [ [ self recordMatch: #(15). - self step. - currentCharacter == $: - ifTrue: [ ^ self recordAndReportMatch: #(16) ]. - currentCharacter isAlphaNumeric or: [ currentCharacter == $_ ] ] - whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -GstScanner >> scanForTokenX9 [ - currentCharacter == $0 - ifTrue: [ ^ self scan4 ]. - currentCharacter == $1 - ifTrue: [ ^ self scan7 ]. - currentCharacter == $2 - ifTrue: [ ^ self scan8 ]. - currentCharacter == $3 - ifTrue: [ ^ self scan9 ]. - currentCharacter == $4 - ifTrue: [ ^ self scan10 ]. - currentCharacter == $5 - ifTrue: [ ^ self scan11 ]. - currentCharacter == $6 - ifTrue: [ ^ self scan12 ]. - currentCharacter == $7 - ifTrue: [ ^ self scan13 ]. - currentCharacter == $8 - ifTrue: [ ^ self scan14 ]. - currentCharacter isDigit - ifTrue: [ ^ self scan15 ]. - currentCharacter == $: - ifTrue: - [ ^ self scanForTokenX4 ]. - currentCharacter == $; - ifTrue: [ ^ self recordAndReportMatch: #(8) ]. - ^ self scanForTokenX8 -] - -{ #category : #generated } -GstScanner >> tokenActions [ - ^ #(nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil #comment #whitespace nil nil #patternToken) -] diff --git a/src/SmaCC_Generic_Smalltalk_Parser/GstSequenceNode.class.st b/src/SmaCC_Generic_Smalltalk_Parser/GstSequenceNode.class.st deleted file mode 100644 index a388cf8da..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/GstSequenceNode.class.st +++ /dev/null @@ -1,94 +0,0 @@ -Class { - #name : #GstSequenceNode, - #superclass : #GstProgramNode, - #instVars : [ - 'leftBar', - 'variables', - 'rightBar', - 'statements', - 'periods' - ], - #category : #'SmaCC_Generic_Smalltalk_Parser' -} - -{ #category : #generated } -GstSequenceNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSequence: self -] - -{ #category : #generated } -GstSequenceNode >> compositeNodeVariables [ - ^ #(#variables #statements) -] - -{ #category : #generated } -GstSequenceNode >> ignoredCompositeTokenVariables [ - ^ #(#periods) -] - -{ #category : #generated } -GstSequenceNode >> ignoredTokenVariables [ - ^ #(#leftBar #rightBar) -] - -{ #category : #'generated-initialize-release' } -GstSequenceNode >> initialize [ - super initialize. - variables := OrderedCollection new: 2. - statements := OrderedCollection new: 2. - periods := OrderedCollection new: 2. -] - -{ #category : #generated } -GstSequenceNode >> leftBar [ - ^ leftBar -] - -{ #category : #generated } -GstSequenceNode >> leftBar: aSmaCCToken [ - leftBar := aSmaCCToken -] - -{ #category : #generated } -GstSequenceNode >> periods [ - ^ periods -] - -{ #category : #generated } -GstSequenceNode >> periods: anOrderedCollection [ - periods := anOrderedCollection -] - -{ #category : #generated } -GstSequenceNode >> rightBar [ - ^ rightBar -] - -{ #category : #generated } -GstSequenceNode >> rightBar: aSmaCCToken [ - rightBar := aSmaCCToken -] - -{ #category : #generated } -GstSequenceNode >> statements [ - ^ statements -] - -{ #category : #generated } -GstSequenceNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] - -{ #category : #generated } -GstSequenceNode >> variables [ - ^ variables -] - -{ #category : #generated } -GstSequenceNode >> variables: anOrderedCollection [ - self setParents: self variables to: nil. - variables := anOrderedCollection. - self setParents: self variables to: self -] diff --git a/src/SmaCC_Generic_Smalltalk_Parser/GstStringLiteralNode.class.st b/src/SmaCC_Generic_Smalltalk_Parser/GstStringLiteralNode.class.st deleted file mode 100644 index d594d8cc4..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/GstStringLiteralNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #GstStringLiteralNode, - #superclass : #GstLiteralNode, - #instVars : [ - 'value' - ], - #category : #'SmaCC_Generic_Smalltalk_Parser' -} - -{ #category : #generated } -GstStringLiteralNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitStringLiteral: self -] - -{ #category : #generated } -GstStringLiteralNode >> tokenVariables [ - ^ #(#value) -] - -{ #category : #generated } -GstStringLiteralNode >> value [ - ^ value -] - -{ #category : #generated } -GstStringLiteralNode >> value: aSmaCCToken [ - value := aSmaCCToken -] diff --git a/src/SmaCC_Generic_Smalltalk_Parser/GstSymbolLiteralNode.class.st b/src/SmaCC_Generic_Smalltalk_Parser/GstSymbolLiteralNode.class.st deleted file mode 100644 index abe17ed77..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/GstSymbolLiteralNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #GstSymbolLiteralNode, - #superclass : #GstLiteralNode, - #instVars : [ - 'value' - ], - #category : #'SmaCC_Generic_Smalltalk_Parser' -} - -{ #category : #generated } -GstSymbolLiteralNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSymbolLiteral: self -] - -{ #category : #generated } -GstSymbolLiteralNode >> tokenVariables [ - ^ #(#value) -] - -{ #category : #generated } -GstSymbolLiteralNode >> value [ - ^ value -] - -{ #category : #generated } -GstSymbolLiteralNode >> value: aSmaCCToken [ - value := aSmaCCToken -] diff --git a/src/SmaCC_Generic_Smalltalk_Parser/GstUnaryMessageNode.class.st b/src/SmaCC_Generic_Smalltalk_Parser/GstUnaryMessageNode.class.st deleted file mode 100644 index 26ecd84bc..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/GstUnaryMessageNode.class.st +++ /dev/null @@ -1,33 +0,0 @@ -Class { - #name : #GstUnaryMessageNode, - #superclass : #GstMessageNode, - #instVars : [ - 'selectorPart' - ], - #category : #'SmaCC_Generic_Smalltalk_Parser' -} - -{ #category : #generated } -GstUnaryMessageNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitUnaryMessage: self -] - -{ #category : #generated } -GstUnaryMessageNode >> selectorPart [ - ^ selectorPart -] - -{ #category : #generated } -GstUnaryMessageNode >> selectorPart: aSmaCCToken [ - selectorPart := aSmaCCToken -] - -{ #category : #accessing } -GstUnaryMessageNode >> symbol [ - ^ selectorPart value asSymbol -] - -{ #category : #generated } -GstUnaryMessageNode >> tokenVariables [ - ^ #(#selectorPart) -] diff --git a/src/SmaCC_Generic_Smalltalk_Parser/GstValueNode.class.st b/src/SmaCC_Generic_Smalltalk_Parser/GstValueNode.class.st deleted file mode 100644 index 9259329df..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/GstValueNode.class.st +++ /dev/null @@ -1,46 +0,0 @@ -Class { - #name : #GstValueNode, - #superclass : #GstProgramNode, - #instVars : [ - 'leftParens', - 'rightParens' - ], - #category : #'SmaCC_Generic_Smalltalk_Parser' -} - -{ #category : #generated } -GstValueNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitValue: self -] - -{ #category : #generated } -GstValueNode >> ignoredCompositeTokenVariables [ - ^ #(#leftParens #rightParens) -] - -{ #category : #'generated-initialize-release' } -GstValueNode >> initialize [ - super initialize. - leftParens := OrderedCollection new: 2. - rightParens := OrderedCollection new: 2. -] - -{ #category : #generated } -GstValueNode >> leftParens [ - ^ leftParens -] - -{ #category : #generated } -GstValueNode >> leftParens: anOrderedCollection [ - leftParens := anOrderedCollection -] - -{ #category : #generated } -GstValueNode >> rightParens [ - ^ rightParens -] - -{ #category : #generated } -GstValueNode >> rightParens: anOrderedCollection [ - rightParens := anOrderedCollection -] diff --git a/src/SmaCC_Generic_Smalltalk_Parser/GstVariableNode.class.st b/src/SmaCC_Generic_Smalltalk_Parser/GstVariableNode.class.st deleted file mode 100644 index e0ca1feb6..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/GstVariableNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #GstVariableNode, - #superclass : #GstValueNode, - #instVars : [ - 'name' - ], - #category : #'SmaCC_Generic_Smalltalk_Parser' -} - -{ #category : #generated } -GstVariableNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitVariable: self -] - -{ #category : #generated } -GstVariableNode >> name [ - ^ name -] - -{ #category : #generated } -GstVariableNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -GstVariableNode >> tokenVariables [ - ^ #(#name) -] diff --git a/src/SmaCC_Generic_Smalltalk_Parser/package.st b/src/SmaCC_Generic_Smalltalk_Parser/package.st deleted file mode 100644 index 319216d6e..000000000 --- a/src/SmaCC_Generic_Smalltalk_Parser/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_Generic_Smalltalk_Parser' } diff --git a/src/SmaCC_Grammar_Parser/SmaCCAlternationRegexNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCAlternationRegexNode.class.st deleted file mode 100644 index 680dbdedd..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCAlternationRegexNode.class.st +++ /dev/null @@ -1,53 +0,0 @@ -Class { - #name : #SmaCCAlternationRegexNode, - #superclass : #SmaCCRegexNode, - #instVars : [ - 'items', - 'barTokens' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCAlternationRegexNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitAlternationRegex: self -] - -{ #category : #generated } -SmaCCAlternationRegexNode >> barTokens [ - ^ barTokens -] - -{ #category : #generated } -SmaCCAlternationRegexNode >> barTokens: anOrderedCollection [ - barTokens := anOrderedCollection -] - -{ #category : #generated } -SmaCCAlternationRegexNode >> compositeNodeVariables [ - ^ #(#items) -] - -{ #category : #generated } -SmaCCAlternationRegexNode >> compositeTokenVariables [ - ^ #(#barTokens #leftParens #rightParens) -] - -{ #category : #'generated-initialize-release' } -SmaCCAlternationRegexNode >> initialize [ - super initialize. - items := OrderedCollection new: 2. - barTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SmaCCAlternationRegexNode >> items [ - ^ items -] - -{ #category : #generated } -SmaCCAlternationRegexNode >> items: anOrderedCollection [ - self setParents: self items to: nil. - items := anOrderedCollection. - self setParents: self items to: self -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCAssociativeDirectiveNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCAssociativeDirectiveNode.class.st deleted file mode 100644 index 426ddcb1a..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCAssociativeDirectiveNode.class.st +++ /dev/null @@ -1,57 +0,0 @@ -Class { - #name : #SmaCCAssociativeDirectiveNode, - #superclass : #SmaCCDirectiveNode, - #instVars : [ - 'typeToken', - 'symbols' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCAssociativeDirectiveNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitAssociativeDirective: self -] - -{ #category : #generated } -SmaCCAssociativeDirectiveNode >> compositeNodeVariables [ - ^ #(#symbols) -] - -{ #category : #'generated-initialize-release' } -SmaCCAssociativeDirectiveNode >> initialize [ - super initialize. - symbols := OrderedCollection new: 2. -] - -{ #category : #testing } -SmaCCAssociativeDirectiveNode >> isAssociativeDirective [ - ^ true -] - -{ #category : #generated } -SmaCCAssociativeDirectiveNode >> symbols [ - ^ symbols -] - -{ #category : #generated } -SmaCCAssociativeDirectiveNode >> symbols: anOrderedCollection [ - self setParents: self symbols to: nil. - symbols := anOrderedCollection. - self setParents: self symbols to: self -] - -{ #category : #generated } -SmaCCAssociativeDirectiveNode >> tokenVariables [ - ^ #(#typeToken #directiveStartToken #semicolon) -] - -{ #category : #generated } -SmaCCAssociativeDirectiveNode >> typeToken [ - ^ typeToken -] - -{ #category : #generated } -SmaCCAssociativeDirectiveNode >> typeToken: aSmaCCToken [ - typeToken := aSmaCCToken -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCAttributeDirectiveNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCAttributeDirectiveNode.class.st deleted file mode 100644 index 71c0ebca7..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCAttributeDirectiveNode.class.st +++ /dev/null @@ -1,88 +0,0 @@ -Class { - #name : #SmaCCAttributeDirectiveNode, - #superclass : #SmaCCDirectiveNode, - #instVars : [ - 'attributesToken', - 'classname', - 'leftParen', - 'names', - 'rightParen' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCAttributeDirectiveNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitAttributeDirective: self -] - -{ #category : #generated } -SmaCCAttributeDirectiveNode >> attributesToken [ - ^ attributesToken -] - -{ #category : #generated } -SmaCCAttributeDirectiveNode >> attributesToken: aSmaCCToken [ - attributesToken := aSmaCCToken -] - -{ #category : #generated } -SmaCCAttributeDirectiveNode >> classname [ - ^ classname -] - -{ #category : #generated } -SmaCCAttributeDirectiveNode >> classname: aSmaCCToken [ - classname := aSmaCCToken -] - -{ #category : #generated } -SmaCCAttributeDirectiveNode >> compositeTokenVariables [ - ^ #(#names) -] - -{ #category : #'generated-initialize-release' } -SmaCCAttributeDirectiveNode >> initialize [ - super initialize. - names := OrderedCollection new: 2. -] - -{ #category : #testing } -SmaCCAttributeDirectiveNode >> isAttributeDirective [ - ^ true -] - -{ #category : #generated } -SmaCCAttributeDirectiveNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -SmaCCAttributeDirectiveNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -SmaCCAttributeDirectiveNode >> names [ - ^ names -] - -{ #category : #generated } -SmaCCAttributeDirectiveNode >> names: anOrderedCollection [ - names := anOrderedCollection -] - -{ #category : #generated } -SmaCCAttributeDirectiveNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -SmaCCAttributeDirectiveNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -SmaCCAttributeDirectiveNode >> tokenVariables [ - ^ #(#attributesToken #classname #leftParen #rightParen #directiveStartToken #semicolon) -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCCharacterBlockRegexNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCCharacterBlockRegexNode.class.st deleted file mode 100644 index 7e699466f..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCCharacterBlockRegexNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #SmaCCCharacterBlockRegexNode, - #superclass : #SmaCCRegexNode, - #instVars : [ - 'block' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCCharacterBlockRegexNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitCharacterBlockRegex: self -] - -{ #category : #generated } -SmaCCCharacterBlockRegexNode >> block [ - ^ block -] - -{ #category : #generated } -SmaCCCharacterBlockRegexNode >> block: aSmaCCToken [ - block := aSmaCCToken -] - -{ #category : #generated } -SmaCCCharacterBlockRegexNode >> tokenVariables [ - ^ #(#block) -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCCharacterRegexNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCCharacterRegexNode.class.st deleted file mode 100644 index 516520dab..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCCharacterRegexNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #SmaCCCharacterRegexNode, - #superclass : #SmaCCRegexNode, - #instVars : [ - 'char' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCCharacterRegexNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitCharacterRegex: self -] - -{ #category : #generated } -SmaCCCharacterRegexNode >> char [ - ^ char -] - -{ #category : #generated } -SmaCCCharacterRegexNode >> char: aSmaCCToken [ - char := aSmaCCToken -] - -{ #category : #generated } -SmaCCCharacterRegexNode >> tokenVariables [ - ^ #(#char) -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCClassProductionExpressionNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCClassProductionExpressionNode.class.st deleted file mode 100644 index f7fdd2ed8..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCClassProductionExpressionNode.class.st +++ /dev/null @@ -1,50 +0,0 @@ -Class { - #name : #SmaCCClassProductionExpressionNode, - #superclass : #SmaCCProductionExpressionNode, - #instVars : [ - 'left', - 'classname', - 'right' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCClassProductionExpressionNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitClassProductionExpression: self -] - -{ #category : #generated } -SmaCCClassProductionExpressionNode >> classname [ - ^ classname -] - -{ #category : #generated } -SmaCCClassProductionExpressionNode >> classname: aSmaCCToken [ - classname := aSmaCCToken -] - -{ #category : #generated } -SmaCCClassProductionExpressionNode >> left [ - ^ left -] - -{ #category : #generated } -SmaCCClassProductionExpressionNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -SmaCCClassProductionExpressionNode >> right [ - ^ right -] - -{ #category : #generated } -SmaCCClassProductionExpressionNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -SmaCCClassProductionExpressionNode >> tokenVariables [ - ^ #(#left #classname #right) -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCCodeProductionExpressionNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCCodeProductionExpressionNode.class.st deleted file mode 100644 index ff10e3f34..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCCodeProductionExpressionNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #SmaCCCodeProductionExpressionNode, - #superclass : #SmaCCProductionExpressionNode, - #instVars : [ - 'code' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCCodeProductionExpressionNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitCodeProductionExpression: self -] - -{ #category : #generated } -SmaCCCodeProductionExpressionNode >> code [ - ^ code -] - -{ #category : #generated } -SmaCCCodeProductionExpressionNode >> code: aSmaCCToken [ - code := aSmaCCToken -] - -{ #category : #generated } -SmaCCCodeProductionExpressionNode >> tokenVariables [ - ^ #(#code) -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCConcatenationRegexNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCConcatenationRegexNode.class.st deleted file mode 100644 index bb5c7c61f..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCConcatenationRegexNode.class.st +++ /dev/null @@ -1,36 +0,0 @@ -Class { - #name : #SmaCCConcatenationRegexNode, - #superclass : #SmaCCRegexNode, - #instVars : [ - 'items' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCConcatenationRegexNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitConcatenationRegex: self -] - -{ #category : #generated } -SmaCCConcatenationRegexNode >> compositeNodeVariables [ - ^ #(#items) -] - -{ #category : #'generated-initialize-release' } -SmaCCConcatenationRegexNode >> initialize [ - super initialize. - items := OrderedCollection new: 2. -] - -{ #category : #generated } -SmaCCConcatenationRegexNode >> items [ - ^ items -] - -{ #category : #generated } -SmaCCConcatenationRegexNode >> items: anOrderedCollection [ - self setParents: self items to: nil. - items := anOrderedCollection. - self setParents: self items to: self -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCDefinitionErrorNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCDefinitionErrorNode.class.st deleted file mode 100644 index aebf4c3ff..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCDefinitionErrorNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #SmaCCDefinitionErrorNode, - #superclass : #SmaCCDefinitionNode, - #instVars : [ - 'smaccError', - 'semicolon' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCDefinitionErrorNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitDefinitionError: self -] - -{ #category : #generated } -SmaCCDefinitionErrorNode >> nodeVariables [ - ^ #(#smaccError) -] - -{ #category : #generated } -SmaCCDefinitionErrorNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -SmaCCDefinitionErrorNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -SmaCCDefinitionErrorNode >> smaccError [ - ^ smaccError -] - -{ #category : #generated } -SmaCCDefinitionErrorNode >> smaccError: aSmaCCErrorNode [ - self smaccError notNil - ifTrue: [ self smaccError parent: nil ]. - smaccError := aSmaCCErrorNode. - self smaccError notNil - ifTrue: [ self smaccError parent: self ] -] - -{ #category : #generated } -SmaCCDefinitionErrorNode >> tokenVariables [ - ^ #(#semicolon) -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCDefinitionNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCDefinitionNode.class.st deleted file mode 100644 index 3d8dfd609..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCDefinitionNode.class.st +++ /dev/null @@ -1,129 +0,0 @@ -Class { - #name : #SmaCCDefinitionNode, - #superclass : #SmaCCParseNode, - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCDefinitionNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitDefinition: self -] - -{ #category : #accessing } -SmaCCDefinitionNode >> allReferencesTo: aString [ - | refs | - refs := OrderedCollection new. - self topParent - allNodesDo: [ :each | - (((each isKindOf: SmaCCSymbolNode) or: [ each isKindOf: SmaCCTokenRegexNode ]) - and: [ each name value = aString ]) - ifTrue: [ refs add: each ] ]. - ^ refs -] - -{ #category : #testing } -SmaCCDefinitionNode >> isAssociativeDirective [ - ^ false -] - -{ #category : #testing } -SmaCCDefinitionNode >> isAttributeDirective [ - ^ false -] - -{ #category : #testing } -SmaCCDefinitionNode >> isDirective [ - ^ false -] - -{ #category : #testing } -SmaCCDefinitionNode >> isFlagDirective [ - ^ false -] - -{ #category : #testing } -SmaCCDefinitionNode >> isGroup [ - ^ false -] - -{ #category : #testing } -SmaCCDefinitionNode >> isHierarchyDirective [ - ^ false -] - -{ #category : #testing } -SmaCCDefinitionNode >> isIdDirective [ - ^ false -] - -{ #category : #testing } -SmaCCDefinitionNode >> isIgnoreDirective [ - ^ false -] - -{ #category : #testing } -SmaCCDefinitionNode >> isNameDirective [ - ^ false -] - -{ #category : #testing } -SmaCCDefinitionNode >> isProductionRule [ - ^ false -] - -{ #category : #testing } -SmaCCDefinitionNode >> isScopeDirective [ - ^ false -] - -{ #category : #testing } -SmaCCDefinitionNode >> isStartDirective [ - ^ false -] - -{ #category : #testing } -SmaCCDefinitionNode >> isTokenRule [ - ^ false -] - -{ #category : #accessing } -SmaCCDefinitionNode >> lookupRule: aString [ - self topParent rules - do: [ :each | - ((each isKindOf: SmaCCProductionRuleNode) or: [ each isKindOf: SmaCCTokenRuleNode ]) - ifTrue: [ each name value = aString - ifTrue: [ ^ each ] ] ]. - ^ nil -] - -{ #category : #accessing } -SmaCCDefinitionNode >> rule [ - ^ self - lookupNode: [ :node | (node isKindOf: SmaCCProductionRuleNode) or: [ node isKindOf: SmaCCTokenRuleNode ] ] -] - -{ #category : #accessing } -SmaCCDefinitionNode >> ruleReferences [ - ^ #() -] - -{ #category : #accessing } -SmaCCDefinitionNode >> ruleReferencesTo: aString [ - | rules | - rules := Set new. - (self allReferencesTo: aString) - do: [ :ref | ref rule ifNotNil: [ :rule | rules add: rule ] ]. - ^ rules - asSortedCollection: [ :a :b | a startPosition < b startPosition ] -] - -{ #category : #accessing } -SmaCCDefinitionNode >> uses [ - | rules | - rules := Set new. - self - allNodesDo: [ :each | - ((each isKindOf: SmaCCSymbolNode) or: [ each isKindOf: SmaCCTokenRegexNode ]) - ifTrue: [ (self lookupRule: each name value) ifNotNil: [ :rule | rules add: rule ] ] ]. - ^ rules asSortedCollection: [ :a :b | a startPosition < b startPosition ] -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCDefinitionNodeVisitor.class.st b/src/SmaCC_Grammar_Parser/SmaCCDefinitionNodeVisitor.class.st deleted file mode 100644 index 8e5bfe228..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCDefinitionNodeVisitor.class.st +++ /dev/null @@ -1,165 +0,0 @@ -Class { - #name : #SmaCCDefinitionNodeVisitor, - #superclass : #SmaCCParseNodeVisitor, - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitAlternationRegex: anAlternationRegex [ - ^ self visitRegex: anAlternationRegex -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitAssociativeDirective: anAssociativeDirective [ - ^ self visitDirective: anAssociativeDirective -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitAttributeDirective: anAttributeDirective [ - ^ self visitDirective: anAttributeDirective -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitCharacterBlockRegex: aCharacterBlockRegex [ - ^ self visitRegex: aCharacterBlockRegex -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitCharacterRegex: aCharacterRegex [ - ^ self visitRegex: aCharacterRegex -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitClassProductionExpression: aClassProductionExpression [ - ^ self visitProductionExpression: aClassProductionExpression -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitCodeProductionExpression: aCodeProductionExpression [ - ^ self visitProductionExpression: aCodeProductionExpression -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitConcatenationRegex: aConcatenationRegex [ - ^ self visitRegex: aConcatenationRegex -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitDefinition: aDefinition [ - ^ self visitSmaCCParseNode: aDefinition -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitDefinitionError: aDefinitionError [ - ^ self visitDefinition: aDefinitionError -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitDirective: aDirective [ - ^ self visitDefinition: aDirective -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitErrorSymbol: anErrorSymbol [ - ^ self visitSymbol: anErrorSymbol -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitFlagDirective: aFlagDirective [ - ^ self visitDirective: aFlagDirective -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitGrammarDefinition: aGrammarDefinition [ - ^ self visitDefinition: aGrammarDefinition -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitGroupTerm: aGroupTerm [ - ^ self visitDefinition: aGroupTerm -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitIdDirective: anIdDirective [ - ^ self visitDirective: anIdDirective -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitIgnoreVariableDirective: anIgnoreVariableDirective [ - ^ self visitDirective: anIgnoreVariableDirective -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitKeywordSymbol: aKeywordSymbol [ - ^ self visitSymbol: aKeywordSymbol -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitNodeNameDirective: aNodeNameDirective [ - ^ self visitDirective: aNodeNameDirective -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitPostfixTerm: aPostfixTerm [ - ^ self visitDefinition: aPostfixTerm -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitProductionExpression: aProductionExpression [ - ^ self visitDefinition: aProductionExpression -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitProductionRule: aProductionRule [ - ^ self visitDefinition: aProductionRule -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitProductionSymbol: aProductionSymbol [ - ^ self visitSymbol: aProductionSymbol -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitRegex: aRegex [ - ^ self visitDefinition: aRegex -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitRepeatRegex: aRepeatRegex [ - ^ self visitRegex: aRepeatRegex -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitScopeDirective: aScopeDirective [ - ^ self visitDirective: aScopeDirective -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitStartDirective: aStartDirective [ - ^ self visitDirective: aStartDirective -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitSuperclassDirective: aSuperclassDirective [ - ^ self visitDirective: aSuperclassDirective -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitSymbol: aSymbol [ - ^ self visitDefinition: aSymbol -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitTokenRegex: aTokenRegex [ - ^ self visitRegex: aTokenRegex -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitTokenRule: aTokenRule [ - ^ self visitDefinition: aTokenRule -] - -{ #category : #generated } -SmaCCDefinitionNodeVisitor >> visitTokenSymbol: aTokenSymbol [ - ^ self visitSymbol: aTokenSymbol -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCDefinitionParser.class.st b/src/SmaCC_Grammar_Parser/SmaCCDefinitionParser.class.st deleted file mode 100644 index 18901c9c8..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCDefinitionParser.class.st +++ /dev/null @@ -1,1133 +0,0 @@ -Class { - #name : #SmaCCDefinitionParser, - #superclass : #SmaCCGLRParser, - #instVars : [ - 'acceptSyntaxErrors' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #'generated-accessing' } -SmaCCDefinitionParser class >> cacheId [ - ^'2019-04-17T19:47:03.912455-05:00' -] - -{ #category : #generated } -SmaCCDefinitionParser class >> definitionComment [ -"%scopes default scanner directives parser; - -directives - : scopes - | states - ; -directives - : excludes - ; -directives - : root - ; -directives - : hierarchy - ; -directives - : attributes - ; -directives - : prefix - ; -directives - : suffix - ; -directives - : left - ; -directives - : right - ; -directives - : nonassoc - ; -directives - : id - ; -directives - : start - ; -directives - : glr - ; -directives - : ignorecase - ; -directives - : ignore_variables - ; -directives - : annotate_tokens - ; -directives - : lr1 - ; -directives - : unicode - ; -directives - : byte - ; - - : ( | _) ( | _ | )* - ; - - : \% - ; - - : \s+ - ; - - : \< \> - ; -default directives parser - : - ; -directives parser - : (\"" [^\""]* \"") + - ; - - : (\# [^\r\n]*) - | (\/\* [^\*]* \*+ ([^\/\*] [^\*]* \*+)* \/) - ; -parser - : \{ - ; -parser - : \[ - ; -parser - : \' \' - ; - - : \: (\: \=)? - ; - - : % - ; - - : \; - ; -scanner - : \\ [^cx] - | \\ c [A-Z] - | \\ x [0-9A-Fa-f]{1,4} - ; -scanner - : \[ ([^\]\\] | )+ \] - ; -scanner - : \{ [0-9]* \, [0-9]* \} - ; -scanner - : [^\ \t\v\\\r\n\{\(\[\.] - ; -scanner - : \. - ; -parser - : error - ; -parser - : \{\{ - ; -parser - : \}\} - ; -default parser - : ` [^`]* ` - ; - -%glr; -%id - ; -%left ""|""; -%left ""("" ; -%left ""*"" ""+"" ""?"" ; - -%start ProductionRule RegexRule DirectiveLine File; - -%hierarchy Directive ( - ScopeDirective - NodeNameDirective - SuperclassDirective - AttributeDirective - AssociativeDirective - IdDirective - StartDirective - FlagDirective - IgnoreVariableDirective - ); -%hierarchy Symbol ( - KeywordSymbol - TokenSymbol - ProductionSymbol - ErrorSymbol - ); -%hierarchy ProductionExpression ( - CodeProductionExpression - ClassProductionExpression - ); -%hierarchy Regex ( - CharacterRegex - CharacterBlockRegex - AlternationRegex - ConcatenationRegex - TokenRegex - RepeatRegex - ); -%prefix SmaCC; -%suffix Node; -%root Definition; - -File - : Rules {{GrammarDefinition}} - ; -Rules - : Rule 'rule' - | Rules Rule 'rule' - ; -Rule - : ProductionRule - | DirectiveLine - | RegexRule - | Error - ; -Error - : error 'smaccError' 'semicolon' {{DefinitionError}} - | error 'smaccError' {{DefinitionError}} - ; -# Directives -DirectiveLine - : StartDirective 'directiveStartToken' Directive EndDirective 'semicolon' {{Directive}} - ; -Directive - : ExcludeScopesLine - | ScopesLine - | RootClassLine - | SuperclassLine - | AttributesLine - | PrefixLine - | SuffixLine - | LeftLine - | RightLine - | NonAssociativeLine - | IdMethodLine - | StartLine - | GLR - | IgnoreCase - | IgnoredVariables - | AnnotateTokens - | LR1 - | Unicode - | Byte - ; -StartDirective - : {self scope: #directives. nil} - ; -EndDirective - : {self scope: #default. nil} - ; -ScopesLine - : 'typeToken' Scopes {{ScopeDirective}} - ; -Scopes - : - | Scopes Symbol 'name' - ; -ExcludeScopesLine - : 'typeToken' Scopes {{ScopeDirective}} - ; -RootClassLine - : 'typeToken' 'name' {{NodeNameDirective}} - ; -SuperclassLine - : 'hierarchyToken' 'superclass' ""("" 'leftParen' ClassList "")"" 'rightParen' {{SuperclassDirective}} - ; -AttributesLine - : 'attributesToken' 'classname' ""("" 'leftParen' IvarList "")"" 'rightParen' {{AttributeDirective}} - ; -IvarList - : - | IvarList 'name' - ; -ClassList - : - | ClassList 'name' - ; -PrefixLine - : 'typeToken' 'name' {{NodeNameDirective}} - ; -SuffixLine - : 'typeToken' 'name' {{NodeNameDirective}} - ; -LeftLine - : 'typeToken' TokenList {{AssociativeDirective}} - ; -RightLine - : 'typeToken' TokenList {{AssociativeDirective}} - ; -NonAssociativeLine - : 'typeToken' TokenList {{AssociativeDirective}} - ; -TokenList - : Term 'symbol' - | TokenList Term 'symbol' - ; -IdMethodLine - : 'idToken' IdTokens {{IdDirective}} - ; -IdTokens - : 'name' - | IdTokens 'name' - ; -StartLine - : 'startToken' StartingTokens {{StartDirective}} - ; -StartingTokens - : 'symbol' - | StartingTokens 'symbol' - ; -GLR - : 'typeToken' {{FlagDirective}} - ; -IgnoredVariables - : EndDirective 'ignoreVariablesToken' IgnoredVariableList {{IgnoreVariableDirective}} - ; -IgnoredVariableList - : 'name' - | IgnoredVariableList 'name' - ; -IgnoreCase - : 'typeToken' {{FlagDirective}} - ; -AnnotateTokens - : 'typeToken' {{FlagDirective}} - ; -LR1 - : 'typeToken' {{FlagDirective}} - ; -Unicode - : 'typeToken' {{FlagDirective}} - ; -Byte - : 'typeToken' {{FlagDirective}} - ; -# Scanner -RegexRule - : StartRegex 'name' 'colon' Regex 'regex' EndRegex 'semicolon' {{TokenRule}} - | Symbol 'state' RegexRule {{TokenRule}} - ; -StartRegex - : {self scope: #scanner. nil} - ; -EndRegex - : {self scope: #default. nil} - ; -Symbol - : - ; -Regex - : ConcatenationRegex - | ConcatenationRegex 'item' (""|"" 'barToken' ConcatenationRegex 'item')+ {{AlternationRegex}} - ; -ConcatenationRegex - : RegexTerm - | RegexTerm 'item' RegexTerm 'item' + {{ConcatenationRegex}} - ; -RegexTerm - : 'char' {{CharacterRegex}} - | 'char' {{CharacterRegex}} - | 'char' {{CharacterRegex}} - | 'char' {{CharacterRegex}} - | ""("" 'leftParen' Regex "")"" 'rightParen' {{Regex}} - | 'block' {{CharacterBlockRegex}} - | 'name' {{TokenRegex}} - | RegexTerm 'regex' ""*"" 'count' {{RepeatRegex}} - | RegexTerm 'regex' ""+"" 'count' {{RepeatRegex}} - | RegexTerm 'regex' ""?"" 'count' {{RepeatRegex}} - | RegexTerm 'regex' 'count' {{RepeatRegex}} - ; -# Parser -ProductionRule - : 'name' StartProduction 'colon' ParserRules EndProduction 'semicolon' {{ProductionRule}} - ; -StartProduction - : {self scope: #parser. nil} - ; -EndProduction - : {self scope: #default. nil} - ; -ParserRules - : ParserRules ""|"" 'barToken' ParserRule 'expression' - | ParserRule 'expression' - ; -ParserRule - : Terms {{ProductionExpression}} - | Terms 'code' {{CodeProductionExpression}} - | Terms 'code' {{CodeProductionExpression}} - | Terms 'left' 'classname' 'right' {{ClassProductionExpression}} - | Terms 'left' 'right' {{ClassProductionExpression}} - ; -Terms - : - | Terms SpecialTerm 'term' - ; -SpecialTerm - : NamedTerm - | SpecialTerm 'term' ""?"" 'operator' {{PostfixTerm}} - | SpecialTerm 'term' ""+"" 'operator' {{PostfixTerm}} - | SpecialTerm 'term' ""*"" 'operator' {{PostfixTerm}} - | ""("" 'leftParen' ParserRules "")"" 'rightParen' {{GroupTerm}} - ; -NamedTerm - : Term - | Term 'variableNameToken' {{Symbol}} - ; -Term - : 'name' {{KeywordSymbol}} - | 'name' {{TokenSymbol}} - | 'name' {{ProductionSymbol}} - | 'name' {{ErrorSymbol}} - ;" -] - -{ #category : #generated } -SmaCCDefinitionParser class >> reduceTable [ -^#( - #(82 0 #reduceActionForStartRegex1: 5588993 false ) - #(53 0 #reduceActionForStartDirective1: 3355649 false ) - #(84 1 #liftFirstValue: 5679105 false ) - #(92 0 #reduceActionForStartProduction1: 6641665 false ) - #(47 1 #reduceActionForFile1: 2630657 false ) - #(48 1 #reduceActionForRules1: 2670593 false ) - #(49 1 #liftFirstValue: 2716676 false ) - #(49 1 #liftFirstValue: 2716674 false ) - #(49 1 #liftFirstValue: 2716675 false ) - #(49 1 #liftFirstValue: 2716673 false ) - #(50 1 #reduceActionForError2: 2786306 false ) - #(48 2 #reduceActionForRules2: 2670594 false ) - #(54 0 #reduceActionForEndDirective1: 3409921 false ) - #(81 2 #reduceActionForRegexRule2: 5413890 false ) - #(50 2 #reduceActionForError1: 2786305 false ) - #(96 0 #reduceActionForTerms1: 7192577 false ) - #(56 0 #reduceActionForTerms1: 3525633 false ) - #(73 1 #reduceActionForGLR1: 4853761 false ) - #(76 1 #reduceActionForGLR1: 5120001 false ) - #(77 1 #reduceActionForGLR1: 5181441 false ) - #(78 1 #reduceActionForGLR1: 5252097 false ) - #(79 1 #reduceActionForGLR1: 5299201 false ) - #(80 1 #reduceActionForGLR1: 5354497 false ) - #(52 1 #liftFirstValue: 3053570 false ) - #(52 1 #liftFirstValue: 3053569 false ) - #(52 1 #liftFirstValue: 3053571 false ) - #(52 1 #liftFirstValue: 3053572 false ) - #(52 1 #liftFirstValue: 3053573 false ) - #(52 1 #liftFirstValue: 3053574 false ) - #(52 1 #liftFirstValue: 3053575 false ) - #(52 1 #liftFirstValue: 3053576 false ) - #(52 1 #liftFirstValue: 3053577 false ) - #(52 1 #liftFirstValue: 3053578 false ) - #(52 1 #liftFirstValue: 3053579 false ) - #(52 1 #liftFirstValue: 3053580 false ) - #(52 1 #liftFirstValue: 3053581 false ) - #(52 1 #liftFirstValue: 3053583 false ) - #(52 1 #liftFirstValue: 3053582 false ) - #(52 1 #liftFirstValue: 3053584 false ) - #(52 1 #liftFirstValue: 3053585 false ) - #(52 1 #liftFirstValue: 3053586 false ) - #(52 1 #liftFirstValue: 3053587 false ) - #(93 0 #reduceActionForEndDirective1: 6691841 false ) - #(94 1 #reduceActionForParserRules2: 6740994 false ) - #(95 1 #reduceActionForParserRule1: 6839297 false ) - #(55 2 #reduceActionForScopesLine1: 3459073 false ) - #(57 2 #reduceActionForScopesLine1: 3565569 false ) - #(58 2 #reduceActionForRootClassLine1: 3641345 false ) - #(63 2 #reduceActionForRootClassLine1: 4117505 false ) - #(64 2 #reduceActionForRootClassLine1: 4199425 false ) - #(99 1 #reduceActionForTerm2: 7566338 false ) - #(99 1 #reduceActionForTerm3: 7566339 false ) - #(99 1 #reduceActionForTerm1: 7566337 false ) - #(99 1 #reduceActionForTerm4: 7566340 false ) - #(65 2 #reduceActionForLeftLine1: 4281345 false ) - #(68 1 #reduceActionForRules1: 4509697 false ) - #(66 2 #reduceActionForLeftLine1: 4352001 false ) - #(67 2 #reduceActionForLeftLine1: 4424705 false ) - #(70 1 #reduceActionForRules1: 4628481 false ) - #(69 2 #reduceActionForIdMethodLine1: 4568065 false ) - #(72 1 #reduceActionForRules1: 4767745 false ) - #(71 2 #reduceActionForStartLine1: 4695041 false ) - #(90 1 #reduceActionForRegexTerm7: 5936135 false ) - #(90 1 #reduceActionForRegexTerm2: 5936130 false ) - #(90 1 #reduceActionForRegexTerm2: 5936132 false ) - #(90 1 #reduceActionForRegexTerm6: 5936134 false ) - #(90 1 #reduceActionForRegexTerm2: 5936129 false ) - #(90 1 #reduceActionForRegexTerm2: 5936131 false ) - #(83 0 #reduceActionForEndDirective1: 5635073 false ) - #(85 1 #liftFirstValue: 5707777 false ) - #(88 1 #liftFirstValue: 5836801 false ) - #(95 2 #reduceActionForParserRule2: 6839298 false ) - #(95 2 #reduceActionForParserRule2: 6839299 false ) - #(96 2 #reduceActionForRules2: 7192578 false ) - #(97 1 #liftFirstValue: 7234561 false ) - #(98 1 #liftFirstValue: 7489537 false ) - #(56 2 #reduceActionForRules2: 3525634 false ) - #(62 0 #reduceActionForTerms1: 4066305 false ) - #(61 0 #reduceActionForTerms1: 4017153 false ) - #(68 2 #reduceActionForRules2: 4509698 false ) - #(70 2 #reduceActionForRules2: 4628482 false ) - #(72 2 #reduceActionForRules2: 4767746 false ) - #(51 5 #reduceActionForDirectiveLine1: 2919425 false ) - #(75 1 #reduceActionForRules1: 5028865 false ) - #(74 3 #reduceActionForIgnoredVariables1: 4900865 false ) - #(87 1 #reduceActionFor______barToken__ConcatenationRegex__item___1: 5767169 false ) - #(85 2 #reduceActionForRegex2: 5707778 false ) - #(90 2 #reduceActionForRegexTerm8: 5936136 false ) - #(90 2 #reduceActionForRegexTerm8: 5936137 false ) - #(90 2 #reduceActionForRegexTerm8: 5936138 false ) - #(90 2 #reduceActionForRegexTerm8: 5936139 false ) - #(88 2 #reduceActionForConcatenationRegex2: 5836802 false ) - #(89 1 #reduceActionForRules1: 5890049 false ) - #(94 3 #reduceActionForParserRules1: 6740993 false ) - #(91 6 #reduceActionForProductionRule1: 6491137 false ) - #(95 3 #reduceActionForParserRule5: 6839301 false ) - #(97 2 #reduceActionForSpecialTerm4: 7234564 false ) - #(97 2 #reduceActionForSpecialTerm4: 7234563 false ) - #(97 2 #reduceActionForSpecialTerm4: 7234562 false ) - #(98 2 #reduceActionForNamedTerm2: 7489538 false ) - #(75 2 #reduceActionForRules2: 5028866 false ) - #(90 3 #reduceActionForRegexTerm5: 5936133 false ) - #(81 6 #reduceActionForRegexRule1: 5413889 false ) - #(86 2 #reduceActionFor______barToken__ConcatenationRegex__item__1: 5767169 false ) - #(87 2 #reduceActionFor______barToken__ConcatenationRegex__item___2: 5767170 false ) - #(89 2 #reduceActionForRules2: 5890050 false ) - #(97 3 #reduceActionForSpecialTerm5: 7234565 false ) - #(95 4 #reduceActionForParserRule4: 6839300 false ) - #(59 5 #reduceActionForSuperclassLine1: 3725313 false ) - #(62 2 #reduceActionForRules2: 4066306 false ) - #(60 5 #reduceActionForAttributesLine1: 3871745 false ) - #(61 2 #reduceActionForRules2: 4017154 false ) - ). -] - -{ #category : #'generated-accessing' } -SmaCCDefinitionParser class >> scannerClass [ - ^SmaCCDefinitionScanner -] - -{ #category : #generated } -SmaCCDefinitionParser class >> startingStateForDirectiveLine [ - ^ 4 -] - -{ #category : #generated } -SmaCCDefinitionParser class >> startingStateForFile [ - ^ 1 -] - -{ #category : #generated } -SmaCCDefinitionParser class >> startingStateForProductionRule [ - ^ 2 -] - -{ #category : #generated } -SmaCCDefinitionParser class >> startingStateForRegexRule [ - ^ 3 -] - -{ #category : #generated } -SmaCCDefinitionParser class >> symbolNames [ - ^ #('"("' '")"' '"*"' '"+"' '"?"' '"|"' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'B e g i n' 'File' 'Rules' 'Rule' 'Error' 'DirectiveLine' 'Directive' 'StartDirective' 'EndDirective' 'ScopesLine' 'Scopes' 'ExcludeScopesLine' 'RootClassLine' 'SuperclassLine' 'AttributesLine' 'IvarList' 'ClassList' 'PrefixLine' 'SuffixLine' 'LeftLine' 'RightLine' 'NonAssociativeLine' 'TokenList' 'IdMethodLine' 'IdTokens' 'StartLine' 'StartingTokens' 'GLR' 'IgnoredVariables' 'IgnoredVariableList' 'IgnoreCase' 'AnnotateTokens' 'LR1' 'Unicode' 'Byte' 'RegexRule' 'StartRegex' 'EndRegex' 'Symbol' 'Regex' '("|" ''barToken'' ConcatenationRegex ''item'')' '("|" ''barToken'' ConcatenationRegex ''item'')+' 'ConcatenationRegex' 'RegexTerm ''item'' +' 'RegexTerm' 'ProductionRule' 'StartProduction' 'EndProduction' 'ParserRules' 'ParserRule' 'Terms' 'SpecialTerm' 'NamedTerm' 'Term' 'E O F' 'error') -] - -{ #category : #generated } -SmaCCDefinitionParser class >> symbolTypes [ - ^ #(#SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCGrammarDefinitionNode #SmaCCGrammarDefinitionNode #OrderedCollection #SmaCCDefinitionNode #SmaCCDefinitionErrorNode #SmaCCDirectiveNode #SmaCCDirectiveNode nil nil #SmaCCScopeDirectiveNode #OrderedCollection #SmaCCScopeDirectiveNode #SmaCCNodeNameDirectiveNode #SmaCCSuperclassDirectiveNode #SmaCCAttributeDirectiveNode #OrderedCollection #OrderedCollection #SmaCCNodeNameDirectiveNode #SmaCCNodeNameDirectiveNode #SmaCCAssociativeDirectiveNode #SmaCCAssociativeDirectiveNode #SmaCCAssociativeDirectiveNode #OrderedCollection #SmaCCIdDirectiveNode #OrderedCollection #SmaCCStartDirectiveNode #OrderedCollection #SmaCCFlagDirectiveNode #SmaCCIgnoreVariableDirectiveNode #OrderedCollection #SmaCCFlagDirectiveNode #SmaCCFlagDirectiveNode #SmaCCFlagDirectiveNode #SmaCCFlagDirectiveNode #SmaCCFlagDirectiveNode #SmaCCTokenRuleNode nil nil #SmaCCToken #SmaCCRegexNode #OrderedCollection #OrderedCollection #SmaCCRegexNode #OrderedCollection #SmaCCRegexNode #SmaCCProductionRuleNode nil nil #OrderedCollection #SmaCCProductionExpressionNode #OrderedCollection #SmaCCDefinitionNode #SmaCCSymbolNode #SmaCCSymbolNode #SmaCCToken #SmaCCErrorNode) -] - -{ #category : #generated } -SmaCCDefinitionParser class >> transitionTable [ -^#( -#[1 0 6 0 27 0 21 0 28 0 10 0 35 0 25 0 47 0 29 0 48 0 33 0 49 0 33 0 50 0 33 0 51 0 45 0 53 0 33 0 81 0 53 0 82 0 57 0 84 0 33 0 91 0 65 0 101] -#[1 0 69 0 28 0 73 0 91] -#[1 0 6 0 27 0 57 0 28 0 81 0 81 0 53 0 82 0 57 0 84] -#[1 0 10 0 35 0 85 0 51 0 45 0 53] -#[1 0 14 0 27 0 14 0 28 0 18 0 34 0 89 0 92] -#[0 0 0 0 100] -#[1 0 6 0 27 0 21 0 28 0 10 0 35 0 93 0 49 0 93 0 50 0 93 0 51 0 45 0 53 0 93 0 81 0 53 0 82 0 57 0 84 0 93 0 91 0 22 0 100 0 65 0 101] -#[0 0 26 0 27 0 28 0 35 0 100 0 101] -#[0 0 30 0 27 0 28 0 35 0 100 0 101] -#[0 0 34 0 27 0 28 0 35 0 100 0 101] -#[0 0 97 0 35] -#[0 0 38 0 27 0 28 0 35 0 100 0 101] -#[0 0 101 0 27] -#[1 0 6 0 27 0 57 0 28 0 105 0 81 0 53 0 82 0 57 0 84] -#[0 0 42 0 27 0 28 0 35 0 100 0 101] -#[1 0 46 0 27 0 46 0 28 0 46 0 35 0 109 0 36 0 46 0 100 0 46 0 101] -#[1 0 18 0 34 0 89 0 92] -#[0 0 0 0 100] -#[0 0 14 0 27 0 28 0 36] -#[0 0 0 0 100] -#[0 0 0 0 100] -#[0 0 113 0 34] -#[0 0 50 0 27 0 28 0 35 0 100 0 101] -#[1 0 117 0 7 0 121 0 8 0 125 0 9 0 129 0 10 0 133 0 11 0 137 0 12 0 141 0 13 0 145 0 14 0 149 0 15 0 153 0 16 0 157 0 17 0 161 0 18 0 165 0 19 0 169 0 20 0 54 0 21 0 173 0 22 0 177 0 23 0 181 0 24 0 185 0 25 0 189 0 52 0 193 0 54 0 189 0 55 0 189 0 57 0 189 0 58 0 189 0 59 0 189 0 60 0 189 0 63 0 189 0 64 0 189 0 65 0 189 0 66 0 189 0 67 0 189 0 69 0 189 0 71 0 189 0 73 0 189 0 74 0 189 0 76 0 189 0 77 0 189 0 78 0 189 0 79 0 189 0 80] -#[0 1 17 0 34] -#[0 0 58 0 27 0 28 0 35 0 100 0 101] -#[0 0 62 0 27 0 28 0 35 0 100 0 101] -#[1 0 66 0 1 0 66 0 6 0 66 0 27 0 66 0 28 0 66 0 29 0 66 0 31 0 66 0 32 0 66 0 36 0 66 0 42 0 66 0 43 1 21 0 94 1 25 0 95 1 29 0 96] -#[1 0 70 0 28 0 70 0 36 1 33 0 56] -#[1 0 70 0 28 0 70 0 36 1 37 0 56] -#[0 1 41 0 28] -#[0 1 45 0 28] -#[0 1 49 0 28] -#[0 1 53 0 28] -#[0 1 57 0 28] -#[1 1 61 0 27 1 65 0 28 1 69 0 29 1 73 0 42 1 77 0 68 1 81 0 99] -#[1 1 61 0 27 1 65 0 28 1 69 0 29 1 73 0 42 1 85 0 68 1 81 0 99] -#[1 1 61 0 27 1 65 0 28 1 69 0 29 1 73 0 42 1 89 0 68 1 81 0 99] -#[1 1 93 0 27 1 97 0 70] -#[1 1 101 0 28 1 105 0 72] -#[0 0 74 0 36] -#[0 0 78 0 36] -#[0 0 82 0 36] -#[0 0 86 0 36] -#[0 0 90 0 36] -#[0 0 94 0 36] -#[1 0 54 0 36 1 109 0 54] -#[0 1 113 0 21] -#[0 0 98 0 36] -#[0 0 102 0 36] -#[0 0 106 0 36] -#[0 0 110 0 36] -#[0 0 114 0 36] -#[0 0 118 0 36] -#[0 0 122 0 36] -#[0 0 126 0 36] -#[0 0 130 0 36] -#[0 0 134 0 36] -#[0 0 138 0 36] -#[0 0 142 0 36] -#[0 0 146 0 36] -#[0 0 150 0 36] -#[0 0 154 0 36] -#[0 0 158 0 36] -#[0 0 162 0 36] -#[0 0 166 0 36] -#[0 0 170 0 36] -#[1 1 117 0 1 1 121 0 27 1 125 0 35 1 129 0 37 1 133 0 38 1 137 0 40 1 141 0 41 1 145 0 85 1 149 0 88 1 153 0 90] -#[1 1 157 0 6 0 174 0 36 1 161 0 93] -#[0 0 178 0 2 0 6 0 36] -#[1 1 165 0 1 0 182 0 2 0 182 0 6 1 61 0 27 1 65 0 28 1 69 0 29 1 169 0 31 1 173 0 32 0 182 0 36 1 73 0 42 1 177 0 43 1 181 0 97 1 181 0 98 1 189 0 99] -#[1 1 193 0 28 0 186 0 36 1 193 0 84] -#[1 1 193 0 28 0 190 0 36 1 193 0 84] -#[0 0 194 0 36] -#[0 1 197 0 1] -#[0 1 201 0 1] -#[0 0 198 0 36] -#[0 0 202 0 36] -#[0 0 206 0 1 0 2 0 3 0 4 0 5 0 6 0 27 0 28 0 29 0 31 0 32 0 33 0 36 0 42 0 43] -#[0 0 210 0 1 0 2 0 3 0 4 0 5 0 6 0 27 0 28 0 29 0 31 0 32 0 33 0 36 0 42 0 43] -#[0 0 214 0 1 0 2 0 3 0 4 0 5 0 6 0 27 0 28 0 29 0 31 0 32 0 33 0 36 0 42 0 43] -#[0 0 218 0 1 0 2 0 3 0 4 0 5 0 6 0 27 0 28 0 29 0 31 0 32 0 33 0 36 0 42 0 43] -#[1 1 61 0 27 1 65 0 28 1 69 0 29 0 222 0 36 1 73 0 42 1 205 0 99] -#[0 0 226 0 27 0 28 0 29 0 36 0 42] -#[1 1 61 0 27 1 65 0 28 1 69 0 29 0 230 0 36 1 73 0 42 1 205 0 99] -#[1 1 61 0 27 1 65 0 28 1 69 0 29 0 234 0 36 1 73 0 42 1 205 0 99] -#[0 0 238 0 27 0 36] -#[1 1 209 0 27 0 242 0 36] -#[0 0 246 0 28 0 36] -#[1 1 213 0 28 0 250 0 36] -#[0 1 217 0 36] -#[1 1 221 0 28 1 225 0 75] -#[1 1 117 0 1 1 121 0 27 1 125 0 35 1 129 0 37 1 133 0 38 1 137 0 40 1 141 0 41 1 229 0 85 1 149 0 88 1 153 0 90] -#[0 0 254 0 1 0 2 0 3 0 4 0 5 0 6 0 27 0 35 0 36 0 37 0 38 0 39 0 40 0 41] -#[0 1 2 0 1 0 2 0 3 0 4 0 5 0 6 0 27 0 35 0 36 0 37 0 38 0 39 0 40 0 41] -#[0 1 6 0 1 0 2 0 3 0 4 0 5 0 6 0 27 0 35 0 36 0 37 0 38 0 39 0 40 0 41] -#[0 1 10 0 1 0 2 0 3 0 4 0 5 0 6 0 27 0 35 0 36 0 37 0 38 0 39 0 40 0 41] -#[0 1 14 0 1 0 2 0 3 0 4 0 5 0 6 0 27 0 35 0 36 0 37 0 38 0 39 0 40 0 41] -#[0 1 18 0 1 0 2 0 3 0 4 0 5 0 6 0 27 0 35 0 36 0 37 0 38 0 39 0 40 0 41] -#[1 1 22 0 36 1 233 0 83] -#[1 1 26 0 2 1 237 0 6 1 26 0 36 1 241 0 86 1 245 0 87] -#[1 1 117 0 1 1 30 0 2 1 249 0 3 1 253 0 4 2 1 0 5 1 30 0 6 1 121 0 27 1 125 0 35 1 30 0 36 1 129 0 37 1 133 0 38 2 5 0 39 1 137 0 40 1 141 0 41 2 9 0 89 2 13 0 90] -#[1 0 66 0 1 0 66 0 2 0 66 0 6 0 66 0 27 0 66 0 28 0 66 0 29 0 66 0 31 0 66 0 32 0 66 0 36 0 66 0 42 0 66 0 43 2 17 0 95 1 29 0 96] -#[0 2 21 0 36] -#[1 0 66 0 1 0 66 0 2 0 66 0 6 0 66 0 27 0 66 0 28 0 66 0 29 0 66 0 31 0 66 0 32 0 66 0 42 0 66 0 43 2 25 0 94 1 25 0 95 1 29 0 96] -#[0 1 34 0 2 0 6 0 36] -#[0 1 38 0 2 0 6 0 36] -#[1 2 29 0 28 2 33 0 44] -#[1 1 42 0 1 1 42 0 2 2 37 0 3 2 41 0 4 2 45 0 5 1 42 0 6 1 42 0 27 1 42 0 28 1 42 0 29 1 42 0 31 1 42 0 32 1 42 0 36 1 42 0 42 1 42 0 43] -#[0 1 46 0 1 0 2 0 3 0 4 0 5 0 6 0 27 0 28 0 29 0 31 0 32 0 36 0 42 0 43] -#[1 1 50 0 1 1 50 0 2 1 50 0 3 1 50 0 4 1 50 0 5 1 50 0 6 1 50 0 27 1 50 0 28 1 50 0 29 1 50 0 31 1 50 0 32 2 49 0 33 1 50 0 36 1 50 0 42 1 50 0 43] -#[0 1 54 0 28 0 36] -#[1 1 58 0 2 1 58 0 28 2 53 0 62] -#[1 1 62 0 2 1 62 0 28 2 57 0 61] -#[0 1 66 0 27 0 28 0 29 0 36 0 42] -#[0 1 70 0 27 0 36] -#[0 1 74 0 28 0 36] -#[0 1 78 0 27 0 28 0 35 0 100 0 101] -#[0 1 82 0 28 0 36] -#[1 2 61 0 28 1 86 0 36] -#[0 2 65 0 2] -#[0 2 69 0 36] -#[1 1 117 0 1 1 121 0 27 1 125 0 35 1 129 0 37 1 133 0 38 1 137 0 40 1 141 0 41 2 73 0 88 1 153 0 90] -#[0 1 90 0 2 0 6 0 36] -#[1 1 94 0 2 1 237 0 6 1 94 0 36 2 77 0 86] -#[0 1 98 0 1 0 2 0 3 0 4 0 5 0 6 0 27 0 35 0 36 0 37 0 38 0 39 0 40 0 41] -#[0 1 102 0 1 0 2 0 3 0 4 0 5 0 6 0 27 0 35 0 36 0 37 0 38 0 39 0 40 0 41] -#[0 1 106 0 1 0 2 0 3 0 4 0 5 0 6 0 27 0 35 0 36 0 37 0 38 0 39 0 40 0 41] -#[0 1 110 0 1 0 2 0 3 0 4 0 5 0 6 0 27 0 35 0 36 0 37 0 38 0 39 0 40 0 41] -#[1 1 117 0 1 1 114 0 2 1 114 0 6 1 121 0 27 1 125 0 35 1 114 0 36 1 129 0 37 1 133 0 38 1 137 0 40 1 141 0 41 2 81 0 90] -#[1 1 118 0 1 1 118 0 2 1 249 0 3 1 253 0 4 2 1 0 5 1 118 0 6 1 118 0 27 1 118 0 35 1 118 0 36 1 118 0 37 1 118 0 38 2 5 0 39 1 118 0 40 1 118 0 41] -#[0 1 122 0 2 0 6 0 36] -#[0 1 126 0 27 0 28 0 35 0 100 0 101] -#[1 2 85 0 2 1 157 0 6] -#[0 2 89 0 44] -#[0 1 130 0 2 0 6 0 36] -#[0 1 134 0 1 0 2 0 3 0 4 0 5 0 6 0 27 0 28 0 29 0 31 0 32 0 36 0 42 0 43] -#[0 1 138 0 1 0 2 0 3 0 4 0 5 0 6 0 27 0 28 0 29 0 31 0 32 0 36 0 42 0 43] -#[0 1 142 0 1 0 2 0 3 0 4 0 5 0 6 0 27 0 28 0 29 0 31 0 32 0 36 0 42 0 43] -#[0 1 146 0 1 0 2 0 3 0 4 0 5 0 6 0 27 0 28 0 29 0 31 0 32 0 36 0 42 0 43] -#[1 2 93 0 2 2 97 0 28] -#[1 2 101 0 2 2 105 0 28] -#[0 1 150 0 28 0 36] -#[0 1 154 0 1 0 2 0 3 0 4 0 5 0 6 0 27 0 35 0 36 0 37 0 38 0 39 0 40 0 41] -#[0 1 158 0 27 0 28 0 35 0 100 0 101] -#[0 1 162 0 2 0 6 0 36] -#[0 1 166 0 2 0 6 0 36] -#[1 1 170 0 1 1 170 0 2 1 249 0 3 1 253 0 4 2 1 0 5 1 170 0 6 1 170 0 27 1 170 0 35 1 170 0 36 1 170 0 37 1 170 0 38 2 5 0 39 1 170 0 40 1 170 0 41] -#[0 1 174 0 1 0 2 0 3 0 4 0 5 0 6 0 27 0 28 0 29 0 31 0 32 0 36 0 42 0 43] -#[0 1 178 0 2 0 6 0 36] -#[0 1 182 0 36] -#[0 1 186 0 2 0 28] -#[0 1 190 0 36] -#[0 1 194 0 2 0 28] - ). -] - -{ #category : #private } -SmaCCDefinitionParser >> dismissErrorToken [ - self scope: #default. - ^ super dismissErrorToken -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForAttributesLine1: nodes [ - | result | - result := SmaCCAttributeDirectiveNode new. - result attributesToken: (nodes at: 1). - result classname: (nodes at: 2). - result leftParen: (nodes at: 3). - result addTokens: (nodes at: 4) to: result names. - result rightParen: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForConcatenationRegex2: nodes [ - | result | - result := SmaCCConcatenationRegexNode new. - result addNode: (nodes at: 1) to: result items. - result addNodes: (nodes at: 2) to: result items. - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForDirectiveLine1: nodes [ - | result | - result := nodes at: 3. - result directiveStartToken: (nodes at: 2). - result semicolon: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForEndDirective1: nodes [ - self scope: #default. - ^ nil -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForError1: nodes [ - | result | - result := SmaCCDefinitionErrorNode new. - result smaccError: (nodes at: 1). - result semicolon: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForError2: nodes [ - | result | - result := SmaCCDefinitionErrorNode new. - result smaccError: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForFile1: nodes [ - | result | - result := SmaCCGrammarDefinitionNode new. - result addNodes: (nodes at: 1) to: result rules. - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForGLR1: nodes [ - | result | - result := SmaCCFlagDirectiveNode new. - result typeToken: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForIdMethodLine1: nodes [ - | result | - result := SmaCCIdDirectiveNode new. - result idToken: (nodes at: 1). - result addTokens: (nodes at: 2) to: result names. - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForIgnoredVariables1: nodes [ - | result | - result := SmaCCIgnoreVariableDirectiveNode new. - result ignoreVariablesToken: (nodes at: 2). - result addTokens: (nodes at: 3) to: result names. - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForLeftLine1: nodes [ - | result | - result := SmaCCAssociativeDirectiveNode new. - result typeToken: (nodes at: 1). - result addNodes: (nodes at: 2) to: result symbols. - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForNamedTerm2: nodes [ - | result | - result := nodes at: 1. - result variableNameToken: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForParserRule1: nodes [ - | result | - result := SmaCCProductionExpressionNode new. - result addNodes: (nodes at: 1) to: result terms. - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForParserRule2: nodes [ - | result | - result := SmaCCCodeProductionExpressionNode new. - result addNodes: (nodes at: 1) to: result terms. - result code: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForParserRule4: nodes [ - | result | - result := SmaCCClassProductionExpressionNode new. - result addNodes: (nodes at: 1) to: result terms. - result left: (nodes at: 2). - result classname: (nodes at: 3). - result right: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForParserRule5: nodes [ - | result | - result := SmaCCClassProductionExpressionNode new. - result addNodes: (nodes at: 1) to: result terms. - result left: (nodes at: 2). - result right: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForParserRules1: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 1). - self add: (nodes at: 3) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForParserRules2: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForProductionRule1: nodes [ - | result | - result := SmaCCProductionRuleNode new. - result name: (nodes at: 1). - result colon: (nodes at: 3). - result addTokens: ((nodes at: 4) at: 1) to: result barTokens. - result addNodes: ((nodes at: 4) at: 2) to: result expressions. - result semicolon: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForRegex2: nodes [ - | result | - result := SmaCCAlternationRegexNode new. - result addNode: (nodes at: 1) to: result items. - result addTokens: ((nodes at: 2) at: 1) to: result barTokens. - result addNodes: ((nodes at: 2) at: 2) to: result items. - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForRegexRule1: nodes [ - | result | - result := SmaCCTokenRuleNode new. - result name: (nodes at: 2). - result colon: (nodes at: 3). - result regex: (nodes at: 4). - result semicolon: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForRegexRule2: nodes [ - | result | - result := nodes at: 2. - result addFirstToken: (nodes at: 1) to: result states. - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForRegexTerm2: nodes [ - | result | - result := SmaCCCharacterRegexNode new. - result char: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForRegexTerm5: nodes [ - | result | - result := nodes at: 2. - result addFirstToken: (nodes at: 1) to: result leftParens. - result addToken: (nodes at: 3) to: result rightParens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForRegexTerm6: nodes [ - | result | - result := SmaCCCharacterBlockRegexNode new. - result block: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForRegexTerm7: nodes [ - | result | - result := SmaCCTokenRegexNode new. - result name: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForRegexTerm8: nodes [ - | result | - result := SmaCCRepeatRegexNode new. - result regex: (nodes at: 1). - result count: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForRootClassLine1: nodes [ - | result | - result := SmaCCNodeNameDirectiveNode new. - result typeToken: (nodes at: 1). - result name: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForRules1: nodes [ - | result | - result := OrderedCollection new: 2. - self add: (nodes at: 1) to: result. - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForRules2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: result. - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForScopesLine1: nodes [ - | result | - result := SmaCCScopeDirectiveNode new. - result typeToken: (nodes at: 1). - result addTokens: (nodes at: 2) to: result names. - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForSpecialTerm4: nodes [ - | result | - result := SmaCCPostfixTermNode new. - result term: (nodes at: 1). - result operator: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForSpecialTerm5: nodes [ - | result | - result := SmaCCGroupTermNode new. - result leftParen: (nodes at: 1). - result addTokens: ((nodes at: 2) at: 1) to: result barTokens. - result addNodes: ((nodes at: 2) at: 2) to: result expressions. - result rightParen: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForStartDirective1: nodes [ - self scope: #directives. - ^ nil -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForStartLine1: nodes [ - | result | - result := SmaCCStartDirectiveNode new. - result startToken: (nodes at: 1). - result addTokens: (nodes at: 2) to: result symbols. - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForStartProduction1: nodes [ - self scope: #parser. - ^ nil -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForStartRegex1: nodes [ - self scope: #scanner. - ^ nil -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForSuperclassLine1: nodes [ - | result | - result := SmaCCSuperclassDirectiveNode new. - result hierarchyToken: (nodes at: 1). - result superclass: (nodes at: 2). - result leftParen: (nodes at: 3). - result addTokens: (nodes at: 4) to: result names. - result rightParen: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForTerm1: nodes [ - | result | - result := SmaCCKeywordSymbolNode new. - result name: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForTerm2: nodes [ - | result | - result := SmaCCTokenSymbolNode new. - result name: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForTerm3: nodes [ - | result | - result := SmaCCProductionSymbolNode new. - result name: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForTerm4: nodes [ - | result | - result := SmaCCErrorSymbolNode new. - result name: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionForTerms1: nodes [ - | result | - result := OrderedCollection new: 2. - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionFor______barToken__ConcatenationRegex__item__1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionFor______barToken__ConcatenationRegex__item___1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - self add: ((nodes at: 1) at: 1) to: (result at: 1). - self add: ((nodes at: 1) at: 2) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCDefinitionParser >> reduceActionFor______barToken__ConcatenationRegex__item___2: nodes [ - | result | - result := nodes at: 1. - self add: ((nodes at: 2) at: 1) to: (result at: 1). - self add: ((nodes at: 2) at: 2) to: (result at: 2). - ^ result -] - -{ #category : #testing } -SmaCCDefinitionParser >> tryAllTokens [ - ^ true -] - -{ #category : #testing } -SmaCCDefinitionParser >> useAllTokenIds [ - ^ false -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCDefinitionScanner.class.st b/src/SmaCC_Grammar_Parser/SmaCCDefinitionScanner.class.st deleted file mode 100644 index c7c95d2f3..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCDefinitionScanner.class.st +++ /dev/null @@ -1,681 +0,0 @@ -Class { - #name : #SmaCCDefinitionScanner, - #superclass : #SmaCCScanner, - #instVars : [ - 'parseSourceSelector' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #'generated-initialization' } -SmaCCDefinitionScanner class >> initializeKeywordMap [ - keywordMap := Dictionary new. - #(#(28 'annotate_tokens' #(22 #(#directives))) #(28 'attributes' #(11 #(#directives))) #(28 'byte' #(25 #(#directives))) #(28 'error' #(42 #(#parser))) #(28 'excludes' #(8 #(#directives))) #(28 'glr' #(19 #(#directives))) #(28 'hierarchy' #(10 #(#directives))) #(28 'id' #(17 #(#directives))) #(28 'ignore_variables' #(21 #(#directives))) #(28 'ignorecase' #(20 #(#directives))) #(28 'left' #(14 #(#directives))) #(28 'lr1' #(23 #(#directives))) #(28 'nonassoc' #(16 #(#directives))) #(28 'prefix' #(12 #(#directives))) #(28 'right' #(15 #(#directives))) #(28 'root' #(9 #(#directives))) #(28 'scopes' #(7 #(#directives))) #(28 'start' #(18 #(#directives))) #(28 'states' #(7 #(#directives))) #(28 'suffix' #(13 #(#directives))) #(28 'unicode' #(24 #(#directives)))) - do: [ :each | - (keywordMap at: each first ifAbsentPut: [ Dictionary new ]) - at: (each at: 2) - put: each last ]. - ^ keywordMap -] - -{ #category : #testing } -SmaCCDefinitionScanner >> canParse: aString [ - ^ self perform: parseSourceSelector with: aString -] - -{ #category : #testing } -SmaCCDefinitionScanner >> canParseSmalltalk: aString [ - RBParser parseExpression: aString onError: [ :error :pos | ^ false ]. - ^ true -] - -{ #category : #generated } -SmaCCDefinitionScanner >> classLeftId [ - ^ 43 -] - -{ #category : #generated } -SmaCCDefinitionScanner >> classRightId [ - ^ 44 -] - -{ #category : #'token-actions' } -SmaCCDefinitionScanner >> code [ - | code | - code := ''. - [ code := code , (stream upTo: $}). - self canParse: code ] - whileFalse: [ stream atEnd - ifTrue: [ ^ self scannerError ]. - code := code , '}' ]. - matchActions := Array with: self codeId. - ^ self createTokenFor: '{' , code , '}' -] - -{ #category : #generated } -SmaCCDefinitionScanner >> codeId [ - ^ 31 -] - -{ #category : #generated } -SmaCCDefinitionScanner >> directiveId [ - ^ 35 -] - -{ #category : #generated } -SmaCCDefinitionScanner >> emptySymbolTokenId [ - ^ 100 -] - -{ #category : #generated } -SmaCCDefinitionScanner >> errorTokenId [ - ^ 101 -] - -{ #category : #'token-actions' } -SmaCCDefinitionScanner >> immediateCode [ - | code | - code := ''. - [ code := code , (stream upTo: $]). - self canParse: code ] - whileFalse: [ stream atEnd - ifTrue: [ ^ self scannerError ]. - code := code , ']' ]. - matchActions := Array with: self immediateCodeId. - ^ self createTokenFor: '[' , code , ']' -] - -{ #category : #generated } -SmaCCDefinitionScanner >> immediateCodeId [ - ^ 32 -] - -{ #category : #'initialize-release' } -SmaCCDefinitionScanner >> initialize [ - super initialize. - parseSourceSelector := #canParseSmalltalk: -] - -{ #category : #generated } -SmaCCDefinitionScanner >> keywordId [ - ^ 29 -] - -{ #category : #'initialize-release' } -SmaCCDefinitionScanner >> parseSourceSelector: aSymbol [ - parseSourceSelector := aSymbol -] - -{ #category : #generated } -SmaCCDefinitionScanner >> productionId [ - ^ 34 -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan1 [ - self step. - currentCharacter == $* - ifTrue: [ ^ self scan2 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan10 [ - self step. - currentCharacter == Character newPage - ifTrue: [ ^ self scan10X4 ]. - currentCharacter == $# - ifTrue: [ ^ self scan10X2 ]. - currentCharacter == $% - ifTrue: [ ^ self recordAndReportMatch: #(35 40) ]. - currentCharacter == $( - ifTrue: [ ^ self recordAndReportMatch: #(1) ]. - currentCharacter == $) - ifTrue: [ ^ self recordAndReportMatch: #(2 40) ]. - currentCharacter == $* - ifTrue: [ ^ self recordAndReportMatch: #(3 40) ]. - currentCharacter == $+ - ifTrue: [ ^ self recordAndReportMatch: #(4 40) ]. - ^ self scan10X10 -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan10X1 [ - self step. - currentCharacter == $c - ifTrue: [ self step. - (currentCharacter between: $A and: $Z) - ifTrue: [ ^ self recordAndReportMatch: #(37) ]. - ^ self reportLastMatch ]. - currentCharacter == $x - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self recordMatch: #(37). - self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self recordMatch: #(37). - self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self recordMatch: #(37). - self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ ^ self recordAndReportMatch: #(37) ] ] ] ]. - ^ self reportLastMatch ]. - ^ self recordAndReportMatch: #(37) -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan10X10 [ - currentCharacter == $. - ifTrue: [ ^ self recordAndReportMatch: #(41) ]. - currentCharacter == $/ - ifTrue: [ ^ self scan10X9 ]. - currentCharacter == $: - ifTrue: [ ^ self scan10X8 ]. - currentCharacter == $; - ifTrue: [ ^ self recordAndReportMatch: #(36 40) ]. - currentCharacter == $< - ifTrue: [ ^ self scan10X6 ]. - currentCharacter == $? - ifTrue: [ ^ self recordAndReportMatch: #(5 40) ]. - currentCharacter == $[ - ifTrue: [ ^ self scan10X3 ]. - currentCharacter == $\ - ifTrue: [ ^ self scan10X1 ]. - currentCharacter == ${ - ifTrue: [ ^ self scan10X5 ]. - currentCharacter == $| - ifTrue: [ ^ self recordAndReportMatch: #(6 40) ]. - (currentCharacter isSeparator - or: [ currentCharacter == Character pageUp ]) - ifTrue: [ ^ self scan10X7 ]. - ^ self recordAndReportMatch: #(40) -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan10X2 [ - self recordMatch: #(30 40). - self step. - (currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: Character newPage) - or: [ currentCharacter >= (Character value: 14) ] ]) - ifTrue: [ [ self recordMatch: #(30). - self step. - currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: Character newPage) - or: [ currentCharacter >= (Character value: 14) ] ] ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan10X3 [ - self step. - currentCharacter == $\ - ifTrue: [ ^ self scan12 ]. - (currentCharacter <= $[ or: [ currentCharacter >= $^ ]) - ifTrue: [ ^ self scan11 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan10X4 [ - self recordMatch: #(26 40). - self step. - (currentCharacter isSeparator - or: [ currentCharacter == Character pageUp ]) - ifTrue: [ [ self recordMatch: #(26). - self step. - currentCharacter isSeparator - or: [ currentCharacter == Character pageUp ] ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan10X5 [ - [ self step. - currentCharacter == $, - ifTrue: [ [ self step. - currentCharacter == $} - ifTrue: [ ^ self recordAndReportMatch: #(39) ]. - currentCharacter isDigit ] whileTrue. - ^ self reportLastMatch ]. - currentCharacter isDigit ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan10X6 [ - self recordMatch: #(40). - self step. - (currentCharacter isLetter or: [ currentCharacter == $_ ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan10X7 [ - [ self recordMatch: #(26). - self step. - currentCharacter isSeparator - or: [ currentCharacter == Character pageUp ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan10X8 [ - self recordMatch: #(34 40). - self step. - currentCharacter == $: - ifTrue: [ ^ self scan4 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan10X9 [ - self recordMatch: #(40). - self step. - currentCharacter == $* - ifTrue: [ ^ self scan2 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan11 [ - [ self step. - currentCharacter == $\ - ifTrue: [ ^ self scan12 ]. - currentCharacter == $] - ifTrue: [ ^ self recordAndReportMatch: #(38) ]. - true ] whileTrue -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan12 [ - self step. - currentCharacter == $c - ifTrue: [ self step. - (currentCharacter between: $A and: $Z) - ifTrue: [ ^ self scan11 ]. - ^ self reportLastMatch ]. - currentCharacter == $x - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ ^ self scan11 ]. - ^ self reportLastMatch ]. - ^ self scan11 -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan2 [ - [ self step. - currentCharacter == $* - ifTrue: [ [ self step. - currentCharacter == $* ] whileTrue. - currentCharacter == $/ - ifTrue: [ ^ self recordAndReportMatch: #(30) ]. - ^ self scan2 ]. - true ] whileTrue -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan3 [ - self recordMatch: #(34). - self step. - currentCharacter == $: - ifTrue: [ ^ self scan4 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan4 [ - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(34) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan5 [ - self step. - (currentCharacter isLetter or: [ currentCharacter == $_ ]) - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan6 [ - [ self step. - currentCharacter == $> - ifTrue: [ ^ self recordAndReportMatch: #(27) ]. - currentCharacter isAlphaNumeric or: [ currentCharacter == $_ ] ] - whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan7 [ - [ self step. - currentCharacter == $` - ifTrue: [ ^ self recordAndReportMatch: #(45) ]. - true ] whileTrue -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan8 [ - [ self step. - currentCharacter == $" - ifTrue: [ self recordMatch: #(29). - self step. - currentCharacter == $" - ifTrue: [ ^ self scan8 ]. - ^ self reportLastMatch ]. - true ] whileTrue -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan9 [ - self step. - currentCharacter == $" - ifTrue: [ ^ self scan8 ]. - currentCharacter == $# - ifTrue: - [ ^ self scan9X1 ]. - currentCharacter == $% - ifTrue: [ ^ self recordAndReportMatch: #(35) ]. - currentCharacter == $' - ifTrue: - [ ^ self scan9X2 ]. - currentCharacter == $( - ifTrue: [ ^ self recordAndReportMatch: #(1) ]. - currentCharacter == $) - ifTrue: [ ^ self recordAndReportMatch: #(2) ]. - currentCharacter == $* - ifTrue: [ ^ self recordAndReportMatch: #(3) ]. - currentCharacter == $+ - ifTrue: [ ^ self recordAndReportMatch: #(4) ]. - currentCharacter == $/ - ifTrue: [ ^ self scan1 ]. - ^ self scan9X7 -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan9X1 [ - [ self recordMatch: #(30). - self step. - currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: Character newPage) - or: [ currentCharacter >= (Character value: 14) ] ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan9X2 [ - self step. - (currentCharacter isLetter or: [ currentCharacter == $_ ]) - ifTrue: [ [ self step. - currentCharacter == $' - ifTrue: [ ^ self recordAndReportMatch: #(33) ]. - currentCharacter isAlphaNumeric or: [ currentCharacter == $_ ] ] - whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan9X3 [ - [ self recordMatch: #(26). - self step. - currentCharacter isSeparator - or: [ currentCharacter == Character pageUp ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan9X4 [ - self recordMatch: #(31). - self step. - currentCharacter == ${ - ifTrue: [ ^ self recordAndReportMatch: #(43) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan9X5 [ - [ self recordMatch: #(28). - self step. - currentCharacter isAlphaNumeric or: [ currentCharacter == $_ ] ] - whileTrue -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan9X6 [ - self step. - currentCharacter == $} - ifTrue: [ ^ self recordAndReportMatch: #(44) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scan9X7 [ - currentCharacter == $: - ifTrue: [ ^ self scan3 ]. - currentCharacter == $; - ifTrue: [ ^ self recordAndReportMatch: #(36) ]. - currentCharacter == $< - ifTrue: [ ^ self scan5 ]. - currentCharacter == $? - ifTrue: [ ^ self recordAndReportMatch: #(5) ]. - currentCharacter == $[ - ifTrue: [ ^ self recordAndReportMatch: #(32) ]. - currentCharacter == $` - ifTrue: [ ^ self scan7 ]. - currentCharacter == ${ - ifTrue: - [ ^ self scan9X4 ]. - currentCharacter == $| - ifTrue: [ ^ self recordAndReportMatch: #(6) ]. - currentCharacter == $} - ifTrue: - [ ^ self scan9X6 ]. - (currentCharacter isSeparator - or: [ currentCharacter == Character pageUp ]) - ifTrue: - [ ^ self scan9X3 ]. - (currentCharacter isLetter or: [ currentCharacter == $_ ]) - ifTrue: - [ self scan9X5 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scanForToken [ - scope == #parser - ifTrue: [ ^ self scan9 ]. - scope == #directives - ifTrue: - [ ^ self scanForTokenX2 ]. - scope == #default - ifTrue: - [ ^ self scanForTokenX1 ]. - scope == #scanner - ifTrue: [ ^ self scan10 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scanForTokenX1 [ - self step. - currentCharacter == $# - ifTrue: - [ ^ self scanForTokenX1X1 ]. - currentCharacter == $% - ifTrue: [ ^ self recordAndReportMatch: #(35) ]. - currentCharacter == $( - ifTrue: [ ^ self recordAndReportMatch: #(1) ]. - currentCharacter == $) - ifTrue: [ ^ self recordAndReportMatch: #(2) ]. - ^ self scanForTokenX1X4 -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scanForTokenX1X1 [ - [ self recordMatch: #(30). - self step. - currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: Character newPage) - or: [ currentCharacter >= (Character value: 14) ] ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scanForTokenX1X2 [ - [ self recordMatch: #(26). - self step. - currentCharacter isSeparator - or: [ currentCharacter == Character pageUp ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scanForTokenX1X3 [ - [ self recordMatch: #(28). - self step. - currentCharacter isAlphaNumeric or: [ currentCharacter == $_ ] ] - whileTrue -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scanForTokenX1X4 [ - currentCharacter == $* - ifTrue: [ ^ self recordAndReportMatch: #(3) ]. - currentCharacter == $+ - ifTrue: [ ^ self recordAndReportMatch: #(4) ]. - currentCharacter == $/ - ifTrue: [ ^ self scan1 ]. - currentCharacter == $: - ifTrue: [ ^ self scan3 ]. - currentCharacter == $; - ifTrue: [ ^ self recordAndReportMatch: #(36) ]. - currentCharacter == $< - ifTrue: [ ^ self scan5 ]. - currentCharacter == $? - ifTrue: [ ^ self recordAndReportMatch: #(5) ]. - currentCharacter == $` - ifTrue: [ ^ self scan7 ]. - currentCharacter == $| - ifTrue: [ ^ self recordAndReportMatch: #(6) ]. - (currentCharacter isSeparator - or: [ currentCharacter == Character pageUp ]) - ifTrue: - [ ^ self scanForTokenX1X2 ]. - (currentCharacter isLetter or: [ currentCharacter == $_ ]) - ifTrue: - [ self scanForTokenX1X3 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scanForTokenX2 [ - self step. - currentCharacter == $" - ifTrue: [ ^ self scan8 ]. - currentCharacter == $# - ifTrue: - [ ^ self scanForTokenX2X1 ]. - currentCharacter == $% - ifTrue: [ ^ self recordAndReportMatch: #(35) ]. - currentCharacter == $( - ifTrue: [ ^ self recordAndReportMatch: #(1) ]. - ^ self scanForTokenX2X4 -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scanForTokenX2X1 [ - [ self recordMatch: #(30). - self step. - currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: Character newPage) - or: [ currentCharacter >= (Character value: 14) ] ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scanForTokenX2X2 [ - [ self recordMatch: #(26). - self step. - currentCharacter isSeparator - or: [ currentCharacter == Character pageUp ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scanForTokenX2X3 [ - [ self recordMatch: #(28). - self step. - currentCharacter isAlphaNumeric or: [ currentCharacter == $_ ] ] - whileTrue -] - -{ #category : #generated } -SmaCCDefinitionScanner >> scanForTokenX2X4 [ - currentCharacter == $) - ifTrue: [ ^ self recordAndReportMatch: #(2) ]. - currentCharacter == $* - ifTrue: [ ^ self recordAndReportMatch: #(3) ]. - currentCharacter == $+ - ifTrue: [ ^ self recordAndReportMatch: #(4) ]. - currentCharacter == $/ - ifTrue: [ ^ self scan1 ]. - currentCharacter == $: - ifTrue: [ ^ self scan3 ]. - currentCharacter == $; - ifTrue: [ ^ self recordAndReportMatch: #(36) ]. - currentCharacter == $< - ifTrue: [ ^ self scan5 ]. - currentCharacter == $? - ifTrue: [ ^ self recordAndReportMatch: #(5) ]. - currentCharacter == $| - ifTrue: [ ^ self recordAndReportMatch: #(6) ]. - (currentCharacter isSeparator - or: [ currentCharacter == Character pageUp ]) - ifTrue: - [ ^ self scanForTokenX2X2 ]. - (currentCharacter isLetter or: [ currentCharacter == $_ ]) - ifTrue: - [ self scanForTokenX2X3 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCDefinitionScanner >> semicolonId [ - ^ 36 -] - -{ #category : #generated } -SmaCCDefinitionScanner >> symbolnameId [ - ^ 28 -] - -{ #category : #generated } -SmaCCDefinitionScanner >> tokenActions [ - ^ #(nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil #whitespace nil nil nil #comment #code #immediateCode nil nil nil nil nil nil nil nil nil nil nil nil #patternToken) -] - -{ #category : #generated } -SmaCCDefinitionScanner >> tokennameId [ - ^ 27 -] - -{ #category : #generated } -SmaCCDefinitionScanner >> variablenameId [ - ^ 33 -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCDirectiveNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCDirectiveNode.class.st deleted file mode 100644 index 6e7a66820..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCDirectiveNode.class.st +++ /dev/null @@ -1,44 +0,0 @@ -Class { - #name : #SmaCCDirectiveNode, - #superclass : #SmaCCDefinitionNode, - #instVars : [ - 'directiveStartToken', - 'semicolon' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCDirectiveNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitDirective: self -] - -{ #category : #generated } -SmaCCDirectiveNode >> directiveStartToken [ - ^ directiveStartToken -] - -{ #category : #generated } -SmaCCDirectiveNode >> directiveStartToken: aSmaCCToken [ - directiveStartToken := aSmaCCToken -] - -{ #category : #testing } -SmaCCDirectiveNode >> isDirective [ - ^ true -] - -{ #category : #generated } -SmaCCDirectiveNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -SmaCCDirectiveNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -SmaCCDirectiveNode >> tokenVariables [ - ^ #(#directiveStartToken #semicolon) -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCErrorSymbolNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCErrorSymbolNode.class.st deleted file mode 100644 index 2fb79b84c..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCErrorSymbolNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #SmaCCErrorSymbolNode, - #superclass : #SmaCCSymbolNode, - #instVars : [ - 'name' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCErrorSymbolNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitErrorSymbol: self -] - -{ #category : #generated } -SmaCCErrorSymbolNode >> name [ - ^ name -] - -{ #category : #generated } -SmaCCErrorSymbolNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -SmaCCErrorSymbolNode >> tokenVariables [ - ^ #(#name #variableNameToken) -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCFlagDirectiveNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCFlagDirectiveNode.class.st deleted file mode 100644 index 60768d7aa..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCFlagDirectiveNode.class.st +++ /dev/null @@ -1,33 +0,0 @@ -Class { - #name : #SmaCCFlagDirectiveNode, - #superclass : #SmaCCDirectiveNode, - #instVars : [ - 'typeToken' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCFlagDirectiveNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitFlagDirective: self -] - -{ #category : #testing } -SmaCCFlagDirectiveNode >> isFlagDirective [ - ^ true -] - -{ #category : #generated } -SmaCCFlagDirectiveNode >> tokenVariables [ - ^ #(#typeToken #directiveStartToken #semicolon) -] - -{ #category : #generated } -SmaCCFlagDirectiveNode >> typeToken [ - ^ typeToken -] - -{ #category : #generated } -SmaCCFlagDirectiveNode >> typeToken: aSmaCCToken [ - typeToken := aSmaCCToken -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCGrammarDefinitionNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCGrammarDefinitionNode.class.st deleted file mode 100644 index d2617c65e..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCGrammarDefinitionNode.class.st +++ /dev/null @@ -1,61 +0,0 @@ -Class { - #name : #SmaCCGrammarDefinitionNode, - #superclass : #SmaCCDefinitionNode, - #instVars : [ - 'rules' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCGrammarDefinitionNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitGrammarDefinition: self -] - -{ #category : #generated } -SmaCCGrammarDefinitionNode >> compositeNodeVariables [ - ^ #(#rules) -] - -{ #category : #acccessing } -SmaCCGrammarDefinitionNode >> definitionNamed: aString [ - ^ (self tokenNamed: aString) ifNil: [ self productionNamed: aString ] -] - -{ #category : #'generated-initialize-release' } -SmaCCGrammarDefinitionNode >> initialize [ - super initialize. - rules := OrderedCollection new: 2. -] - -{ #category : #acccessing } -SmaCCGrammarDefinitionNode >> productionNamed: aString [ - ^ self productionRules detect: [ :each | each name value = aString ] ifNone: [ nil ] -] - -{ #category : #acccessing } -SmaCCGrammarDefinitionNode >> productionRules [ - ^ rules select: [ :each | each isKindOf: SmaCCProductionRuleNode ] -] - -{ #category : #generated } -SmaCCGrammarDefinitionNode >> rules [ - ^ rules -] - -{ #category : #generated } -SmaCCGrammarDefinitionNode >> rules: anOrderedCollection [ - self setParents: self rules to: nil. - rules := anOrderedCollection. - self setParents: self rules to: self -] - -{ #category : #acccessing } -SmaCCGrammarDefinitionNode >> tokenNamed: aString [ - ^ self tokenRules detect: [ :each | each name value = aString ] ifNone: [ nil ] -] - -{ #category : #acccessing } -SmaCCGrammarDefinitionNode >> tokenRules [ - ^ rules select: [ :each | each isKindOf: SmaCCTokenRuleNode ] -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCGroupTermNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCGroupTermNode.class.st deleted file mode 100644 index b98c5db0b..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCGroupTermNode.class.st +++ /dev/null @@ -1,114 +0,0 @@ -Class { - #name : #SmaCCGroupTermNode, - #superclass : #SmaCCDefinitionNode, - #instVars : [ - 'leftParen', - 'barTokens', - 'expressions', - 'rightParen' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCGroupTermNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitGroupTerm: self -] - -{ #category : #accessing } -SmaCCGroupTermNode >> allPossibilities [ - ^ self hasReductionExpression - ifTrue: [ 1 ] - ifFalse: [ (expressions inject: 0 into: [ :sum :each | sum + each allPossibilities ]) max: 1 ] -] - -{ #category : #iterating } -SmaCCGroupTermNode >> alternativesDo: aBlock [ - expressions do: [ :each | aBlock value: each terms ] -] - -{ #category : #generated } -SmaCCGroupTermNode >> barTokens [ - ^ barTokens -] - -{ #category : #generated } -SmaCCGroupTermNode >> barTokens: anOrderedCollection [ - barTokens := anOrderedCollection -] - -{ #category : #generated } -SmaCCGroupTermNode >> compositeNodeVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -SmaCCGroupTermNode >> compositeTokenVariables [ - ^ #(#barTokens) -] - -{ #category : #generated } -SmaCCGroupTermNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SmaCCGroupTermNode >> expressions: anOrderedCollection [ - self setParents: self expressions to: nil. - expressions := anOrderedCollection. - self setParents: self expressions to: self -] - -{ #category : #testing } -SmaCCGroupTermNode >> hasReductionExpression [ - ^ expressions anySatisfy: [ :each | each hasReductionExpression ] -] - -{ #category : #'generated-initialize-release' } -SmaCCGroupTermNode >> initialize [ - super initialize. - barTokens := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. -] - -{ #category : #testing } -SmaCCGroupTermNode >> isGroup [ - ^ true -] - -{ #category : #generated } -SmaCCGroupTermNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -SmaCCGroupTermNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #accessing } -SmaCCGroupTermNode >> possibilities [ - ^ self hasReductionExpression - ifTrue: [ 1 ] - ifFalse: [ expressions size ] -] - -{ #category : #generated } -SmaCCGroupTermNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -SmaCCGroupTermNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -SmaCCGroupTermNode >> tokenVariables [ - ^ #(#leftParen #rightParen) -] - -{ #category : #accessing } -SmaCCGroupTermNode >> variableNameToken [ - ^ nil -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCIdDirectiveNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCIdDirectiveNode.class.st deleted file mode 100644 index 86d7ae433..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCIdDirectiveNode.class.st +++ /dev/null @@ -1,55 +0,0 @@ -Class { - #name : #SmaCCIdDirectiveNode, - #superclass : #SmaCCDirectiveNode, - #instVars : [ - 'idToken', - 'names' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCIdDirectiveNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitIdDirective: self -] - -{ #category : #generated } -SmaCCIdDirectiveNode >> compositeTokenVariables [ - ^ #(#names) -] - -{ #category : #generated } -SmaCCIdDirectiveNode >> idToken [ - ^ idToken -] - -{ #category : #generated } -SmaCCIdDirectiveNode >> idToken: aSmaCCToken [ - idToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -SmaCCIdDirectiveNode >> initialize [ - super initialize. - names := OrderedCollection new: 2. -] - -{ #category : #testing } -SmaCCIdDirectiveNode >> isIdDirective [ - ^ true -] - -{ #category : #generated } -SmaCCIdDirectiveNode >> names [ - ^ names -] - -{ #category : #generated } -SmaCCIdDirectiveNode >> names: anOrderedCollection [ - names := anOrderedCollection -] - -{ #category : #generated } -SmaCCIdDirectiveNode >> tokenVariables [ - ^ #(#idToken #directiveStartToken #semicolon) -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCIgnoreVariableDirectiveNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCIgnoreVariableDirectiveNode.class.st deleted file mode 100644 index 9ad80ae86..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCIgnoreVariableDirectiveNode.class.st +++ /dev/null @@ -1,55 +0,0 @@ -Class { - #name : #SmaCCIgnoreVariableDirectiveNode, - #superclass : #SmaCCDirectiveNode, - #instVars : [ - 'ignoreVariablesToken', - 'names' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCIgnoreVariableDirectiveNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitIgnoreVariableDirective: self -] - -{ #category : #generated } -SmaCCIgnoreVariableDirectiveNode >> compositeTokenVariables [ - ^ #(#names) -] - -{ #category : #generated } -SmaCCIgnoreVariableDirectiveNode >> ignoreVariablesToken [ - ^ ignoreVariablesToken -] - -{ #category : #generated } -SmaCCIgnoreVariableDirectiveNode >> ignoreVariablesToken: aSmaCCToken [ - ignoreVariablesToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -SmaCCIgnoreVariableDirectiveNode >> initialize [ - super initialize. - names := OrderedCollection new: 2. -] - -{ #category : #testing } -SmaCCIgnoreVariableDirectiveNode >> isIgnoreDirective [ - ^ true -] - -{ #category : #generated } -SmaCCIgnoreVariableDirectiveNode >> names [ - ^ names -] - -{ #category : #generated } -SmaCCIgnoreVariableDirectiveNode >> names: anOrderedCollection [ - names := anOrderedCollection -] - -{ #category : #generated } -SmaCCIgnoreVariableDirectiveNode >> tokenVariables [ - ^ #(#ignoreVariablesToken #directiveStartToken #semicolon) -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCKeywordSymbolNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCKeywordSymbolNode.class.st deleted file mode 100644 index 1b50d66ff..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCKeywordSymbolNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #SmaCCKeywordSymbolNode, - #superclass : #SmaCCSymbolNode, - #instVars : [ - 'name' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCKeywordSymbolNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitKeywordSymbol: self -] - -{ #category : #generated } -SmaCCKeywordSymbolNode >> name [ - ^ name -] - -{ #category : #generated } -SmaCCKeywordSymbolNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -SmaCCKeywordSymbolNode >> tokenVariables [ - ^ #(#name #variableNameToken) -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCNodeNameDirectiveNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCNodeNameDirectiveNode.class.st deleted file mode 100644 index 607e3302a..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCNodeNameDirectiveNode.class.st +++ /dev/null @@ -1,44 +0,0 @@ -Class { - #name : #SmaCCNodeNameDirectiveNode, - #superclass : #SmaCCDirectiveNode, - #instVars : [ - 'typeToken', - 'name' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCNodeNameDirectiveNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitNodeNameDirective: self -] - -{ #category : #testing } -SmaCCNodeNameDirectiveNode >> isNameDirective [ - ^ true -] - -{ #category : #generated } -SmaCCNodeNameDirectiveNode >> name [ - ^ name -] - -{ #category : #generated } -SmaCCNodeNameDirectiveNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -SmaCCNodeNameDirectiveNode >> tokenVariables [ - ^ #(#typeToken #name #directiveStartToken #semicolon) -] - -{ #category : #generated } -SmaCCNodeNameDirectiveNode >> typeToken [ - ^ typeToken -] - -{ #category : #generated } -SmaCCNodeNameDirectiveNode >> typeToken: aSmaCCToken [ - typeToken := aSmaCCToken -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCPostfixTermNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCPostfixTermNode.class.st deleted file mode 100644 index 6aeddea00..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCPostfixTermNode.class.st +++ /dev/null @@ -1,80 +0,0 @@ -Class { - #name : #SmaCCPostfixTermNode, - #superclass : #SmaCCDefinitionNode, - #instVars : [ - 'term', - 'operator' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCPostfixTermNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitPostfixTerm: self -] - -{ #category : #accessing } -SmaCCPostfixTermNode >> allPossibilities [ - self isOptional - ifTrue: [ ^ term allPossibilities + 1 ]. - ^ 1 -] - -{ #category : #iterating } -SmaCCPostfixTermNode >> alternativesDo: aBlock [ - self isOptional - ifTrue: [ aBlock value: #(). - aBlock value: (Array with: term) ] - ifFalse: [ aBlock value: (Array with: self) ] -] - -{ #category : #testing } -SmaCCPostfixTermNode >> isOptional [ - ^ operator value = '?' -] - -{ #category : #generated } -SmaCCPostfixTermNode >> nodeVariables [ - ^ #(#term) -] - -{ #category : #generated } -SmaCCPostfixTermNode >> operator [ - ^ operator -] - -{ #category : #generated } -SmaCCPostfixTermNode >> operator: aSmaCCToken [ - operator := aSmaCCToken -] - -{ #category : #accessing } -SmaCCPostfixTermNode >> possibilities [ - ^ self isOptional - ifTrue: [ 2 ] - ifFalse: [ 1 ] -] - -{ #category : #generated } -SmaCCPostfixTermNode >> term [ - ^ term -] - -{ #category : #generated } -SmaCCPostfixTermNode >> term: aSmaCCDefinitionNode [ - self term notNil - ifTrue: [ self term parent: nil ]. - term := aSmaCCDefinitionNode. - self term notNil - ifTrue: [ self term parent: self ] -] - -{ #category : #generated } -SmaCCPostfixTermNode >> tokenVariables [ - ^ #(#operator) -] - -{ #category : #accessing } -SmaCCPostfixTermNode >> variableNameToken [ - ^ nil -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCProductionExpressionNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCProductionExpressionNode.class.st deleted file mode 100644 index ef28a060f..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCProductionExpressionNode.class.st +++ /dev/null @@ -1,51 +0,0 @@ -Class { - #name : #SmaCCProductionExpressionNode, - #superclass : #SmaCCDefinitionNode, - #instVars : [ - 'terms' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCProductionExpressionNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitProductionExpression: self -] - -{ #category : #accessing } -SmaCCProductionExpressionNode >> allPossibilities [ - ^ terms inject: 1 into: [ :sum :each | sum * each allPossibilities ] -] - -{ #category : #generated } -SmaCCProductionExpressionNode >> compositeNodeVariables [ - ^ #(#terms) -] - -{ #category : #testing } -SmaCCProductionExpressionNode >> hasReductionExpression [ - ^ self class ~= SmaCCProductionExpressionNode -] - -{ #category : #'generated-initialize-release' } -SmaCCProductionExpressionNode >> initialize [ - super initialize. - terms := OrderedCollection new: 2. -] - -{ #category : #testing } -SmaCCProductionExpressionNode >> isEmptyExpression [ - ^ self terms isEmpty -] - -{ #category : #generated } -SmaCCProductionExpressionNode >> terms [ - ^ terms -] - -{ #category : #generated } -SmaCCProductionExpressionNode >> terms: anOrderedCollection [ - self setParents: self terms to: nil. - terms := anOrderedCollection. - self setParents: self terms to: self -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCProductionRuleNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCProductionRuleNode.class.st deleted file mode 100644 index 62af31221..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCProductionRuleNode.class.st +++ /dev/null @@ -1,96 +0,0 @@ -Class { - #name : #SmaCCProductionRuleNode, - #superclass : #SmaCCDefinitionNode, - #instVars : [ - 'name', - 'colon', - 'barTokens', - 'expressions', - 'semicolon' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCProductionRuleNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitProductionRule: self -] - -{ #category : #generated } -SmaCCProductionRuleNode >> barTokens [ - ^ barTokens -] - -{ #category : #generated } -SmaCCProductionRuleNode >> barTokens: anOrderedCollection [ - barTokens := anOrderedCollection -] - -{ #category : #generated } -SmaCCProductionRuleNode >> colon [ - ^ colon -] - -{ #category : #generated } -SmaCCProductionRuleNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -SmaCCProductionRuleNode >> compositeNodeVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -SmaCCProductionRuleNode >> compositeTokenVariables [ - ^ #(#barTokens) -] - -{ #category : #generated } -SmaCCProductionRuleNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SmaCCProductionRuleNode >> expressions: anOrderedCollection [ - self setParents: self expressions to: nil. - expressions := anOrderedCollection. - self setParents: self expressions to: self -] - -{ #category : #'generated-initialize-release' } -SmaCCProductionRuleNode >> initialize [ - super initialize. - barTokens := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. -] - -{ #category : #testing } -SmaCCProductionRuleNode >> isProductionRule [ - ^ true -] - -{ #category : #generated } -SmaCCProductionRuleNode >> name [ - ^ name -] - -{ #category : #generated } -SmaCCProductionRuleNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -SmaCCProductionRuleNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -SmaCCProductionRuleNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -SmaCCProductionRuleNode >> tokenVariables [ - ^ #(#name #colon #semicolon) -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCProductionSymbolNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCProductionSymbolNode.class.st deleted file mode 100644 index 7b3f2a436..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCProductionSymbolNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #SmaCCProductionSymbolNode, - #superclass : #SmaCCSymbolNode, - #instVars : [ - 'name' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCProductionSymbolNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitProductionSymbol: self -] - -{ #category : #generated } -SmaCCProductionSymbolNode >> name [ - ^ name -] - -{ #category : #generated } -SmaCCProductionSymbolNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -SmaCCProductionSymbolNode >> tokenVariables [ - ^ #(#name #variableNameToken) -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCRegexNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCRegexNode.class.st deleted file mode 100644 index ed3764378..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCRegexNode.class.st +++ /dev/null @@ -1,46 +0,0 @@ -Class { - #name : #SmaCCRegexNode, - #superclass : #SmaCCDefinitionNode, - #instVars : [ - 'leftParens', - 'rightParens' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCRegexNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitRegex: self -] - -{ #category : #generated } -SmaCCRegexNode >> compositeTokenVariables [ - ^ #(#leftParens #rightParens) -] - -{ #category : #'generated-initialize-release' } -SmaCCRegexNode >> initialize [ - super initialize. - leftParens := OrderedCollection new: 2. - rightParens := OrderedCollection new: 2. -] - -{ #category : #generated } -SmaCCRegexNode >> leftParens [ - ^ leftParens -] - -{ #category : #generated } -SmaCCRegexNode >> leftParens: anOrderedCollection [ - leftParens := anOrderedCollection -] - -{ #category : #generated } -SmaCCRegexNode >> rightParens [ - ^ rightParens -] - -{ #category : #generated } -SmaCCRegexNode >> rightParens: anOrderedCollection [ - rightParens := anOrderedCollection -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCRepeatRegexNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCRepeatRegexNode.class.st deleted file mode 100644 index b9933ea87..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCRepeatRegexNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #SmaCCRepeatRegexNode, - #superclass : #SmaCCRegexNode, - #instVars : [ - 'regex', - 'count' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCRepeatRegexNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitRepeatRegex: self -] - -{ #category : #generated } -SmaCCRepeatRegexNode >> count [ - ^ count -] - -{ #category : #generated } -SmaCCRepeatRegexNode >> count: aSmaCCToken [ - count := aSmaCCToken -] - -{ #category : #generated } -SmaCCRepeatRegexNode >> nodeVariables [ - ^ #(#regex) -] - -{ #category : #generated } -SmaCCRepeatRegexNode >> regex [ - ^ regex -] - -{ #category : #generated } -SmaCCRepeatRegexNode >> regex: aSmaCCRegexNode [ - self regex notNil - ifTrue: [ self regex parent: nil ]. - regex := aSmaCCRegexNode. - self regex notNil - ifTrue: [ self regex parent: self ] -] - -{ #category : #generated } -SmaCCRepeatRegexNode >> tokenVariables [ - ^ #(#count) -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCScopeDirectiveNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCScopeDirectiveNode.class.st deleted file mode 100644 index 62122865f..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCScopeDirectiveNode.class.st +++ /dev/null @@ -1,55 +0,0 @@ -Class { - #name : #SmaCCScopeDirectiveNode, - #superclass : #SmaCCDirectiveNode, - #instVars : [ - 'typeToken', - 'names' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCScopeDirectiveNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitScopeDirective: self -] - -{ #category : #generated } -SmaCCScopeDirectiveNode >> compositeTokenVariables [ - ^ #(#names) -] - -{ #category : #'generated-initialize-release' } -SmaCCScopeDirectiveNode >> initialize [ - super initialize. - names := OrderedCollection new: 2. -] - -{ #category : #testing } -SmaCCScopeDirectiveNode >> isScopeDirective [ - ^ true -] - -{ #category : #generated } -SmaCCScopeDirectiveNode >> names [ - ^ names -] - -{ #category : #generated } -SmaCCScopeDirectiveNode >> names: anOrderedCollection [ - names := anOrderedCollection -] - -{ #category : #generated } -SmaCCScopeDirectiveNode >> tokenVariables [ - ^ #(#typeToken #directiveStartToken #semicolon) -] - -{ #category : #generated } -SmaCCScopeDirectiveNode >> typeToken [ - ^ typeToken -] - -{ #category : #generated } -SmaCCScopeDirectiveNode >> typeToken: aSmaCCToken [ - typeToken := aSmaCCToken -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCStartDirectiveNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCStartDirectiveNode.class.st deleted file mode 100644 index 5924d2105..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCStartDirectiveNode.class.st +++ /dev/null @@ -1,55 +0,0 @@ -Class { - #name : #SmaCCStartDirectiveNode, - #superclass : #SmaCCDirectiveNode, - #instVars : [ - 'startToken', - 'symbols' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCStartDirectiveNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitStartDirective: self -] - -{ #category : #generated } -SmaCCStartDirectiveNode >> compositeTokenVariables [ - ^ #(#symbols) -] - -{ #category : #'generated-initialize-release' } -SmaCCStartDirectiveNode >> initialize [ - super initialize. - symbols := OrderedCollection new: 2. -] - -{ #category : #testing } -SmaCCStartDirectiveNode >> isStartDirective [ - ^ true -] - -{ #category : #generated } -SmaCCStartDirectiveNode >> startToken [ - ^ startToken -] - -{ #category : #generated } -SmaCCStartDirectiveNode >> startToken: aSmaCCToken [ - startToken := aSmaCCToken -] - -{ #category : #generated } -SmaCCStartDirectiveNode >> symbols [ - ^ symbols -] - -{ #category : #generated } -SmaCCStartDirectiveNode >> symbols: anOrderedCollection [ - symbols := anOrderedCollection -] - -{ #category : #generated } -SmaCCStartDirectiveNode >> tokenVariables [ - ^ #(#startToken #directiveStartToken #semicolon) -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCSuperclassDirectiveNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCSuperclassDirectiveNode.class.st deleted file mode 100644 index e04079fa5..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCSuperclassDirectiveNode.class.st +++ /dev/null @@ -1,88 +0,0 @@ -Class { - #name : #SmaCCSuperclassDirectiveNode, - #superclass : #SmaCCDirectiveNode, - #instVars : [ - 'hierarchyToken', - 'superclass', - 'leftParen', - 'names', - 'rightParen' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCSuperclassDirectiveNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitSuperclassDirective: self -] - -{ #category : #generated } -SmaCCSuperclassDirectiveNode >> compositeTokenVariables [ - ^ #(#names) -] - -{ #category : #generated } -SmaCCSuperclassDirectiveNode >> hierarchyToken [ - ^ hierarchyToken -] - -{ #category : #generated } -SmaCCSuperclassDirectiveNode >> hierarchyToken: aSmaCCToken [ - hierarchyToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -SmaCCSuperclassDirectiveNode >> initialize [ - super initialize. - names := OrderedCollection new: 2. -] - -{ #category : #testing } -SmaCCSuperclassDirectiveNode >> isHierarchyDirective [ - ^ true -] - -{ #category : #generated } -SmaCCSuperclassDirectiveNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -SmaCCSuperclassDirectiveNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -SmaCCSuperclassDirectiveNode >> names [ - ^ names -] - -{ #category : #generated } -SmaCCSuperclassDirectiveNode >> names: anOrderedCollection [ - names := anOrderedCollection -] - -{ #category : #generated } -SmaCCSuperclassDirectiveNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -SmaCCSuperclassDirectiveNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -SmaCCSuperclassDirectiveNode >> superclass [ - ^ superclass -] - -{ #category : #generated } -SmaCCSuperclassDirectiveNode >> superclass: aSmaCCToken [ - superclass := aSmaCCToken -] - -{ #category : #generated } -SmaCCSuperclassDirectiveNode >> tokenVariables [ - ^ #(#hierarchyToken #superclass #leftParen #rightParen #directiveStartToken #semicolon) -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCSymbolNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCSymbolNode.class.st deleted file mode 100644 index fd2c03e4b..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCSymbolNode.class.st +++ /dev/null @@ -1,42 +0,0 @@ -Class { - #name : #SmaCCSymbolNode, - #superclass : #SmaCCDefinitionNode, - #instVars : [ - 'variableNameToken' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCSymbolNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitSymbol: self -] - -{ #category : #accessing } -SmaCCSymbolNode >> allPossibilities [ - ^ 1 -] - -{ #category : #iterating } -SmaCCSymbolNode >> alternativesDo: aBlock [ -] - -{ #category : #accessing } -SmaCCSymbolNode >> possibilities [ - ^ 1 -] - -{ #category : #generated } -SmaCCSymbolNode >> tokenVariables [ - ^ #(#variableNameToken) -] - -{ #category : #generated } -SmaCCSymbolNode >> variableNameToken [ - ^ variableNameToken -] - -{ #category : #generated } -SmaCCSymbolNode >> variableNameToken: aSmaCCToken [ - variableNameToken := aSmaCCToken -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCTokenRegexNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCTokenRegexNode.class.st deleted file mode 100644 index aa0594ea1..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCTokenRegexNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #SmaCCTokenRegexNode, - #superclass : #SmaCCRegexNode, - #instVars : [ - 'name' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCTokenRegexNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitTokenRegex: self -] - -{ #category : #generated } -SmaCCTokenRegexNode >> name [ - ^ name -] - -{ #category : #generated } -SmaCCTokenRegexNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -SmaCCTokenRegexNode >> tokenVariables [ - ^ #(#name) -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCTokenRuleNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCTokenRuleNode.class.st deleted file mode 100644 index af36a5694..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCTokenRuleNode.class.st +++ /dev/null @@ -1,97 +0,0 @@ -Class { - #name : #SmaCCTokenRuleNode, - #superclass : #SmaCCDefinitionNode, - #instVars : [ - 'name', - 'colon', - 'regex', - 'semicolon', - 'states' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCTokenRuleNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitTokenRule: self -] - -{ #category : #generated } -SmaCCTokenRuleNode >> colon [ - ^ colon -] - -{ #category : #generated } -SmaCCTokenRuleNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -SmaCCTokenRuleNode >> compositeTokenVariables [ - ^ #(#states) -] - -{ #category : #'generated-initialize-release' } -SmaCCTokenRuleNode >> initialize [ - super initialize. - states := OrderedCollection new: 2. -] - -{ #category : #testing } -SmaCCTokenRuleNode >> isTokenRule [ - ^ true -] - -{ #category : #generated } -SmaCCTokenRuleNode >> name [ - ^ name -] - -{ #category : #generated } -SmaCCTokenRuleNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -SmaCCTokenRuleNode >> nodeVariables [ - ^ #(#regex) -] - -{ #category : #generated } -SmaCCTokenRuleNode >> regex [ - ^ regex -] - -{ #category : #generated } -SmaCCTokenRuleNode >> regex: aSmaCCRegexNode [ - self regex notNil - ifTrue: [ self regex parent: nil ]. - regex := aSmaCCRegexNode. - self regex notNil - ifTrue: [ self regex parent: self ] -] - -{ #category : #generated } -SmaCCTokenRuleNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -SmaCCTokenRuleNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -SmaCCTokenRuleNode >> states [ - ^ states -] - -{ #category : #generated } -SmaCCTokenRuleNode >> states: anOrderedCollection [ - states := anOrderedCollection -] - -{ #category : #generated } -SmaCCTokenRuleNode >> tokenVariables [ - ^ #(#name #colon #semicolon) -] diff --git a/src/SmaCC_Grammar_Parser/SmaCCTokenSymbolNode.class.st b/src/SmaCC_Grammar_Parser/SmaCCTokenSymbolNode.class.st deleted file mode 100644 index bbaefb9a1..000000000 --- a/src/SmaCC_Grammar_Parser/SmaCCTokenSymbolNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #SmaCCTokenSymbolNode, - #superclass : #SmaCCSymbolNode, - #instVars : [ - 'name' - ], - #category : #'SmaCC_Grammar_Parser' -} - -{ #category : #generated } -SmaCCTokenSymbolNode >> acceptVisitor: aDefinitionVisitor [ - ^ aDefinitionVisitor visitTokenSymbol: self -] - -{ #category : #generated } -SmaCCTokenSymbolNode >> name [ - ^ name -] - -{ #category : #generated } -SmaCCTokenSymbolNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -SmaCCTokenSymbolNode >> tokenVariables [ - ^ #(#name #variableNameToken) -] diff --git a/src/SmaCC_Grammar_Parser/package.st b/src/SmaCC_Grammar_Parser/package.st deleted file mode 100644 index d8ee0b989..000000000 --- a/src/SmaCC_Grammar_Parser/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_Grammar_Parser' } diff --git a/src/SmaCC_Java/JavaAbstractMethodDeclarationNode.class.st b/src/SmaCC_Java/JavaAbstractMethodDeclarationNode.class.st deleted file mode 100644 index 0fb59e64a..000000000 --- a/src/SmaCC_Java/JavaAbstractMethodDeclarationNode.class.st +++ /dev/null @@ -1,117 +0,0 @@ -Class { - #name : #JavaAbstractMethodDeclarationNode, - #superclass : #JavaDeclarationNode, - #instVars : [ - 'modifiers', - 'typeParameters', - 'type', - 'declarator', - 'throws', - 'semicolon' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaAbstractMethodDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitAbstractMethodDeclaration: self -] - -{ #category : #generated } -JavaAbstractMethodDeclarationNode >> compositeNodeVariables [ - ^ #(#modifiers) -] - -{ #category : #generated } -JavaAbstractMethodDeclarationNode >> declarator [ - ^ declarator -] - -{ #category : #generated } -JavaAbstractMethodDeclarationNode >> declarator: aJavaProgramNode [ - self declarator notNil - ifTrue: [ self declarator parent: nil ]. - declarator := aJavaProgramNode. - self declarator notNil - ifTrue: [ self declarator parent: self ] -] - -{ #category : #generated } -JavaAbstractMethodDeclarationNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #'generated-initialize-release' } -JavaAbstractMethodDeclarationNode >> initialize [ - super initialize. - modifiers := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaAbstractMethodDeclarationNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -JavaAbstractMethodDeclarationNode >> modifiers: anOrderedCollection [ - self setParents: self modifiers to: nil. - modifiers := anOrderedCollection. - self setParents: self modifiers to: self -] - -{ #category : #generated } -JavaAbstractMethodDeclarationNode >> nodeVariables [ - ^ #(#typeParameters #type #declarator #throws) -] - -{ #category : #generated } -JavaAbstractMethodDeclarationNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JavaAbstractMethodDeclarationNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -JavaAbstractMethodDeclarationNode >> throws [ - ^ throws -] - -{ #category : #generated } -JavaAbstractMethodDeclarationNode >> throws: aJavaThrowsNode [ - self throws notNil - ifTrue: [ self throws parent: nil ]. - throws := aJavaThrowsNode. - self throws notNil - ifTrue: [ self throws parent: self ] -] - -{ #category : #generated } -JavaAbstractMethodDeclarationNode >> type [ - ^ type -] - -{ #category : #generated } -JavaAbstractMethodDeclarationNode >> type: aJavaProgramNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aJavaProgramNode. - self type notNil - ifTrue: [ self type parent: self ] -] - -{ #category : #generated } -JavaAbstractMethodDeclarationNode >> typeParameters [ - ^ typeParameters -] - -{ #category : #generated } -JavaAbstractMethodDeclarationNode >> typeParameters: aJavaTypeParametersNode [ - self typeParameters notNil - ifTrue: [ self typeParameters parent: nil ]. - typeParameters := aJavaTypeParametersNode. - self typeParameters notNil - ifTrue: [ self typeParameters parent: self ] -] diff --git a/src/SmaCC_Java/JavaAnnotationInterfaceNode.class.st b/src/SmaCC_Java/JavaAnnotationInterfaceNode.class.st deleted file mode 100644 index 0a9a7f4f6..000000000 --- a/src/SmaCC_Java/JavaAnnotationInterfaceNode.class.st +++ /dev/null @@ -1,115 +0,0 @@ -Class { - #name : #JavaAnnotationInterfaceNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'modifiers', - 'atToken', - 'interfaceToken', - 'name', - 'leftBrace', - 'declarations', - 'rightBrace' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaAnnotationInterfaceNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitAnnotationInterface: self -] - -{ #category : #generated } -JavaAnnotationInterfaceNode >> atToken [ - ^ atToken -] - -{ #category : #generated } -JavaAnnotationInterfaceNode >> atToken: aSmaCCToken [ - atToken := aSmaCCToken -] - -{ #category : #generated } -JavaAnnotationInterfaceNode >> compositeNodeVariables [ - ^ #(#declarations #modifiers) -] - -{ #category : #generated } -JavaAnnotationInterfaceNode >> declarations [ - ^ declarations -] - -{ #category : #generated } -JavaAnnotationInterfaceNode >> declarations: anOrderedCollection [ - self setParents: self declarations to: nil. - declarations := anOrderedCollection. - self setParents: self declarations to: self -] - -{ #category : #generated } -JavaAnnotationInterfaceNode >> ignoredTokenVariables [ - ^ #(#leftBrace #rightBrace) -] - -{ #category : #'generated-initialize-release' } -JavaAnnotationInterfaceNode >> initialize [ - super initialize. - declarations := OrderedCollection new: 2. - modifiers := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaAnnotationInterfaceNode >> interfaceToken [ - ^ interfaceToken -] - -{ #category : #generated } -JavaAnnotationInterfaceNode >> interfaceToken: aSmaCCToken [ - interfaceToken := aSmaCCToken -] - -{ #category : #generated } -JavaAnnotationInterfaceNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -JavaAnnotationInterfaceNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -JavaAnnotationInterfaceNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -JavaAnnotationInterfaceNode >> modifiers: anOrderedCollection [ - self setParents: self modifiers to: nil. - modifiers := anOrderedCollection. - self setParents: self modifiers to: self -] - -{ #category : #generated } -JavaAnnotationInterfaceNode >> name [ - ^ name -] - -{ #category : #generated } -JavaAnnotationInterfaceNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -JavaAnnotationInterfaceNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -JavaAnnotationInterfaceNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] - -{ #category : #generated } -JavaAnnotationInterfaceNode >> tokenVariables [ - ^ #(#atToken #interfaceToken #name) -] diff --git a/src/SmaCC_Java/JavaAnnotationMethodDeclarationNode.class.st b/src/SmaCC_Java/JavaAnnotationMethodDeclarationNode.class.st deleted file mode 100644 index 64b729b55..000000000 --- a/src/SmaCC_Java/JavaAnnotationMethodDeclarationNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #JavaAnnotationMethodDeclarationNode, - #superclass : #JavaAbstractMethodDeclarationNode, - #instVars : [ - 'defaultToken', - 'value' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaAnnotationMethodDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitAnnotationMethodDeclaration: self -] - -{ #category : #generated } -JavaAnnotationMethodDeclarationNode >> defaultToken [ - ^ defaultToken -] - -{ #category : #generated } -JavaAnnotationMethodDeclarationNode >> defaultToken: aSmaCCToken [ - defaultToken := aSmaCCToken -] - -{ #category : #generated } -JavaAnnotationMethodDeclarationNode >> nodeVariables [ - ^ #(#value #typeParameters #type #declarator #throws) -] - -{ #category : #generated } -JavaAnnotationMethodDeclarationNode >> tokenVariables [ - ^ #(#defaultToken) -] - -{ #category : #generated } -JavaAnnotationMethodDeclarationNode >> value [ - ^ value -] - -{ #category : #generated } -JavaAnnotationMethodDeclarationNode >> value: aJavaProgramNode [ - self value notNil - ifTrue: [ self value parent: nil ]. - value := aJavaProgramNode. - self value notNil - ifTrue: [ self value parent: self ] -] diff --git a/src/SmaCC_Java/JavaAnnotationNode.class.st b/src/SmaCC_Java/JavaAnnotationNode.class.st deleted file mode 100644 index 1bbde1303..000000000 --- a/src/SmaCC_Java/JavaAnnotationNode.class.st +++ /dev/null @@ -1,116 +0,0 @@ -Class { - #name : #JavaAnnotationNode, - #superclass : #JavaProgramNode, - #instVars : [ - '_at', - 'name', - 'leftParen', - 'values', - 'commas', - 'rightParen' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaAnnotationNode >> _at [ - ^ _at -] - -{ #category : #generated } -JavaAnnotationNode >> _at: aSmaCCToken [ - _at := aSmaCCToken -] - -{ #category : #generated } -JavaAnnotationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitAnnotation: self -] - -{ #category : #generated } -JavaAnnotationNode >> commas [ - ^ commas -] - -{ #category : #generated } -JavaAnnotationNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JavaAnnotationNode >> compositeNodeVariables [ - ^ #(#values) -] - -{ #category : #generated } -JavaAnnotationNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -JavaAnnotationNode >> ignoredTokenVariables [ - ^ #(#leftParen #rightParen) -] - -{ #category : #'generated-initialize-release' } -JavaAnnotationNode >> initialize [ - super initialize. - values := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaAnnotationNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -JavaAnnotationNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -JavaAnnotationNode >> name [ - ^ name -] - -{ #category : #generated } -JavaAnnotationNode >> name: aJavaNameNode [ - self name notNil - ifTrue: [ self name parent: nil ]. - name := aJavaNameNode. - self name notNil - ifTrue: [ self name parent: self ] -] - -{ #category : #generated } -JavaAnnotationNode >> nodeVariables [ - ^ #(#name) -] - -{ #category : #generated } -JavaAnnotationNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -JavaAnnotationNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -JavaAnnotationNode >> tokenVariables [ - ^ #(#_at) -] - -{ #category : #generated } -JavaAnnotationNode >> values [ - ^ values -] - -{ #category : #generated } -JavaAnnotationNode >> values: anOrderedCollection [ - self setParents: self values to: nil. - values := anOrderedCollection. - self setParents: self values to: self -] diff --git a/src/SmaCC_Java/JavaArrayAccessNode.class.st b/src/SmaCC_Java/JavaArrayAccessNode.class.st deleted file mode 100644 index 0278185c4..000000000 --- a/src/SmaCC_Java/JavaArrayAccessNode.class.st +++ /dev/null @@ -1,74 +0,0 @@ -Class { - #name : #JavaArrayAccessNode, - #superclass : #JavaExpressionNode, - #instVars : [ - 'array', - 'leftBracket', - 'expression', - 'rightBracket' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaArrayAccessNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitArrayAccess: self -] - -{ #category : #generated } -JavaArrayAccessNode >> array [ - ^ array -] - -{ #category : #generated } -JavaArrayAccessNode >> array: aJavaExpressionNode [ - self array notNil - ifTrue: [ self array parent: nil ]. - array := aJavaExpressionNode. - self array notNil - ifTrue: [ self array parent: self ] -] - -{ #category : #generated } -JavaArrayAccessNode >> expression [ - ^ expression -] - -{ #category : #generated } -JavaArrayAccessNode >> expression: aJavaExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJavaExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JavaArrayAccessNode >> ignoredTokenVariables [ - ^ #(#leftBracket #rightBracket) -] - -{ #category : #generated } -JavaArrayAccessNode >> leftBracket [ - ^ leftBracket -] - -{ #category : #generated } -JavaArrayAccessNode >> leftBracket: aSmaCCToken [ - leftBracket := aSmaCCToken -] - -{ #category : #generated } -JavaArrayAccessNode >> nodeVariables [ - ^ #(#array #expression) -] - -{ #category : #generated } -JavaArrayAccessNode >> rightBracket [ - ^ rightBracket -] - -{ #category : #generated } -JavaArrayAccessNode >> rightBracket: aSmaCCToken [ - rightBracket := aSmaCCToken -] diff --git a/src/SmaCC_Java/JavaArrayInitializerNode.class.st b/src/SmaCC_Java/JavaArrayInitializerNode.class.st deleted file mode 100644 index 151ac303d..000000000 --- a/src/SmaCC_Java/JavaArrayInitializerNode.class.st +++ /dev/null @@ -1,80 +0,0 @@ -Class { - #name : #JavaArrayInitializerNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'leftBrace', - 'initializers', - 'commas', - 'rightBrace' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaArrayInitializerNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitArrayInitializer: self -] - -{ #category : #generated } -JavaArrayInitializerNode >> commas [ - ^ commas -] - -{ #category : #generated } -JavaArrayInitializerNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JavaArrayInitializerNode >> compositeNodeVariables [ - ^ #(#initializers) -] - -{ #category : #generated } -JavaArrayInitializerNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -JavaArrayInitializerNode >> ignoredTokenVariables [ - ^ #(#leftBrace #rightBrace) -] - -{ #category : #'generated-initialize-release' } -JavaArrayInitializerNode >> initialize [ - super initialize. - initializers := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaArrayInitializerNode >> initializers [ - ^ initializers -] - -{ #category : #generated } -JavaArrayInitializerNode >> initializers: anOrderedCollection [ - self setParents: self initializers to: nil. - initializers := anOrderedCollection. - self setParents: self initializers to: self -] - -{ #category : #generated } -JavaArrayInitializerNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -JavaArrayInitializerNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -JavaArrayInitializerNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -JavaArrayInitializerNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] diff --git a/src/SmaCC_Java/JavaArrayMethodDeclaratorNode.class.st b/src/SmaCC_Java/JavaArrayMethodDeclaratorNode.class.st deleted file mode 100644 index 161e77963..000000000 --- a/src/SmaCC_Java/JavaArrayMethodDeclaratorNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #JavaArrayMethodDeclaratorNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'declarator', - 'leftBracket', - 'rightBracket' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaArrayMethodDeclaratorNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitArrayMethodDeclarator: self -] - -{ #category : #generated } -JavaArrayMethodDeclaratorNode >> declarator [ - ^ declarator -] - -{ #category : #generated } -JavaArrayMethodDeclaratorNode >> declarator: aJavaProgramNode [ - self declarator notNil - ifTrue: [ self declarator parent: nil ]. - declarator := aJavaProgramNode. - self declarator notNil - ifTrue: [ self declarator parent: self ] -] - -{ #category : #generated } -JavaArrayMethodDeclaratorNode >> ignoredTokenVariables [ - ^ #(#leftBracket #rightBracket) -] - -{ #category : #generated } -JavaArrayMethodDeclaratorNode >> leftBracket [ - ^ leftBracket -] - -{ #category : #generated } -JavaArrayMethodDeclaratorNode >> leftBracket: aSmaCCToken [ - leftBracket := aSmaCCToken -] - -{ #category : #generated } -JavaArrayMethodDeclaratorNode >> nodeVariables [ - ^ #(#declarator) -] - -{ #category : #generated } -JavaArrayMethodDeclaratorNode >> rightBracket [ - ^ rightBracket -] - -{ #category : #generated } -JavaArrayMethodDeclaratorNode >> rightBracket: aSmaCCToken [ - rightBracket := aSmaCCToken -] diff --git a/src/SmaCC_Java/JavaArrayTypeNode.class.st b/src/SmaCC_Java/JavaArrayTypeNode.class.st deleted file mode 100644 index c7f19b7b2..000000000 --- a/src/SmaCC_Java/JavaArrayTypeNode.class.st +++ /dev/null @@ -1,66 +0,0 @@ -Class { - #name : #JavaArrayTypeNode, - #superclass : #JavaTypeNode, - #instVars : [ - 'baseType', - 'leftBrackets', - 'rightBrackets' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaArrayTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitArrayType: self -] - -{ #category : #generated } -JavaArrayTypeNode >> baseType [ - ^ baseType -] - -{ #category : #generated } -JavaArrayTypeNode >> baseType: aJavaProgramNode [ - self baseType notNil - ifTrue: [ self baseType parent: nil ]. - baseType := aJavaProgramNode. - self baseType notNil - ifTrue: [ self baseType parent: self ] -] - -{ #category : #generated } -JavaArrayTypeNode >> ignoredCompositeTokenVariables [ - ^ #(#leftBrackets #rightBrackets) -] - -{ #category : #'generated-initialize-release' } -JavaArrayTypeNode >> initialize [ - super initialize. - leftBrackets := OrderedCollection new: 2. - rightBrackets := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaArrayTypeNode >> leftBrackets [ - ^ leftBrackets -] - -{ #category : #generated } -JavaArrayTypeNode >> leftBrackets: anOrderedCollection [ - leftBrackets := anOrderedCollection -] - -{ #category : #generated } -JavaArrayTypeNode >> nodeVariables [ - ^ #(#baseType) -] - -{ #category : #generated } -JavaArrayTypeNode >> rightBrackets [ - ^ rightBrackets -] - -{ #category : #generated } -JavaArrayTypeNode >> rightBrackets: anOrderedCollection [ - rightBrackets := anOrderedCollection -] diff --git a/src/SmaCC_Java/JavaArrayVariableNameNode.class.st b/src/SmaCC_Java/JavaArrayVariableNameNode.class.st deleted file mode 100644 index 70bbd448e..000000000 --- a/src/SmaCC_Java/JavaArrayVariableNameNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #JavaArrayVariableNameNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'variable', - 'leftBracket', - 'rightBracket' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaArrayVariableNameNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitArrayVariableName: self -] - -{ #category : #generated } -JavaArrayVariableNameNode >> ignoredTokenVariables [ - ^ #(#leftBracket #rightBracket) -] - -{ #category : #generated } -JavaArrayVariableNameNode >> leftBracket [ - ^ leftBracket -] - -{ #category : #generated } -JavaArrayVariableNameNode >> leftBracket: aSmaCCToken [ - leftBracket := aSmaCCToken -] - -{ #category : #generated } -JavaArrayVariableNameNode >> nodeVariables [ - ^ #(#variable) -] - -{ #category : #generated } -JavaArrayVariableNameNode >> rightBracket [ - ^ rightBracket -] - -{ #category : #generated } -JavaArrayVariableNameNode >> rightBracket: aSmaCCToken [ - rightBracket := aSmaCCToken -] - -{ #category : #generated } -JavaArrayVariableNameNode >> variable [ - ^ variable -] - -{ #category : #generated } -JavaArrayVariableNameNode >> variable: aJavaProgramNode [ - self variable notNil - ifTrue: [ self variable parent: nil ]. - variable := aJavaProgramNode. - self variable notNil - ifTrue: [ self variable parent: self ] -] diff --git a/src/SmaCC_Java/JavaAssertStatementNode.class.st b/src/SmaCC_Java/JavaAssertStatementNode.class.st deleted file mode 100644 index 107053bdd..000000000 --- a/src/SmaCC_Java/JavaAssertStatementNode.class.st +++ /dev/null @@ -1,90 +0,0 @@ -Class { - #name : #JavaAssertStatementNode, - #superclass : #JavaStatementNode, - #instVars : [ - 'assertToken', - 'testExpression', - 'semicolon', - 'colon', - 'messageExpression' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaAssertStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitAssertStatement: self -] - -{ #category : #generated } -JavaAssertStatementNode >> assertToken [ - ^ assertToken -] - -{ #category : #generated } -JavaAssertStatementNode >> assertToken: aSmaCCToken [ - assertToken := aSmaCCToken -] - -{ #category : #generated } -JavaAssertStatementNode >> colon [ - ^ colon -] - -{ #category : #generated } -JavaAssertStatementNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -JavaAssertStatementNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -JavaAssertStatementNode >> messageExpression [ - ^ messageExpression -] - -{ #category : #generated } -JavaAssertStatementNode >> messageExpression: aJavaExpressionNode [ - self messageExpression notNil - ifTrue: [ self messageExpression parent: nil ]. - messageExpression := aJavaExpressionNode. - self messageExpression notNil - ifTrue: [ self messageExpression parent: self ] -] - -{ #category : #generated } -JavaAssertStatementNode >> nodeVariables [ - ^ #(#testExpression #messageExpression) -] - -{ #category : #generated } -JavaAssertStatementNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JavaAssertStatementNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -JavaAssertStatementNode >> testExpression [ - ^ testExpression -] - -{ #category : #generated } -JavaAssertStatementNode >> testExpression: aJavaExpressionNode [ - self testExpression notNil - ifTrue: [ self testExpression parent: nil ]. - testExpression := aJavaExpressionNode. - self testExpression notNil - ifTrue: [ self testExpression parent: self ] -] - -{ #category : #generated } -JavaAssertStatementNode >> tokenVariables [ - ^ #(#assertToken #colon) -] diff --git a/src/SmaCC_Java/JavaAssignmentNode.class.st b/src/SmaCC_Java/JavaAssignmentNode.class.st deleted file mode 100644 index 8833134bb..000000000 --- a/src/SmaCC_Java/JavaAssignmentNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #JavaAssignmentNode, - #superclass : #JavaExpressionNode, - #instVars : [ - 'variable', - 'op', - 'value' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaAssignmentNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitAssignment: self -] - -{ #category : #generated } -JavaAssignmentNode >> nodeVariables [ - ^ #(#variable #value) -] - -{ #category : #generated } -JavaAssignmentNode >> op [ - ^ op -] - -{ #category : #generated } -JavaAssignmentNode >> op: aSmaCCToken [ - op := aSmaCCToken -] - -{ #category : #generated } -JavaAssignmentNode >> tokenVariables [ - ^ #(#op) -] - -{ #category : #generated } -JavaAssignmentNode >> value [ - ^ value -] - -{ #category : #generated } -JavaAssignmentNode >> value: aJavaExpressionNode [ - self value notNil - ifTrue: [ self value parent: nil ]. - value := aJavaExpressionNode. - self value notNil - ifTrue: [ self value parent: self ] -] - -{ #category : #generated } -JavaAssignmentNode >> variable [ - ^ variable -] - -{ #category : #generated } -JavaAssignmentNode >> variable: aJavaExpressionNode [ - self variable notNil - ifTrue: [ self variable parent: nil ]. - variable := aJavaExpressionNode. - self variable notNil - ifTrue: [ self variable parent: self ] -] diff --git a/src/SmaCC_Java/JavaBinaryExpressionNode.class.st b/src/SmaCC_Java/JavaBinaryExpressionNode.class.st deleted file mode 100644 index cbf060a07..000000000 --- a/src/SmaCC_Java/JavaBinaryExpressionNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #JavaBinaryExpressionNode, - #superclass : #JavaExpressionNode, - #instVars : [ - 'leftExpression', - 'op', - 'rightExpression' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaBinaryExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitBinaryExpression: self -] - -{ #category : #generated } -JavaBinaryExpressionNode >> leftExpression [ - ^ leftExpression -] - -{ #category : #generated } -JavaBinaryExpressionNode >> leftExpression: aJavaExpressionNode [ - self leftExpression notNil - ifTrue: [ self leftExpression parent: nil ]. - leftExpression := aJavaExpressionNode. - self leftExpression notNil - ifTrue: [ self leftExpression parent: self ] -] - -{ #category : #generated } -JavaBinaryExpressionNode >> nodeVariables [ - ^ #(#leftExpression #rightExpression) -] - -{ #category : #generated } -JavaBinaryExpressionNode >> op [ - ^ op -] - -{ #category : #generated } -JavaBinaryExpressionNode >> op: aSmaCCToken [ - op := aSmaCCToken -] - -{ #category : #generated } -JavaBinaryExpressionNode >> rightExpression [ - ^ rightExpression -] - -{ #category : #generated } -JavaBinaryExpressionNode >> rightExpression: aJavaProgramNode [ - self rightExpression notNil - ifTrue: [ self rightExpression parent: nil ]. - rightExpression := aJavaProgramNode. - self rightExpression notNil - ifTrue: [ self rightExpression parent: self ] -] - -{ #category : #generated } -JavaBinaryExpressionNode >> tokenVariables [ - ^ #(#op) -] diff --git a/src/SmaCC_Java/JavaBlockNode.class.st b/src/SmaCC_Java/JavaBlockNode.class.st deleted file mode 100644 index b7a2bfbb5..000000000 --- a/src/SmaCC_Java/JavaBlockNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #JavaBlockNode, - #superclass : #JavaStatementNode, - #instVars : [ - 'leftBrace', - 'statements', - 'rightBrace' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaBlockNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitBlock: self -] - -{ #category : #generated } -JavaBlockNode >> compositeNodeVariables [ - ^ #(#statements) -] - -{ #category : #generated } -JavaBlockNode >> ignoredTokenVariables [ - ^ #(#leftBrace #rightBrace) -] - -{ #category : #'generated-initialize-release' } -JavaBlockNode >> initialize [ - super initialize. - statements := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaBlockNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -JavaBlockNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -JavaBlockNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -JavaBlockNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] - -{ #category : #generated } -JavaBlockNode >> statements [ - ^ statements -] - -{ #category : #generated } -JavaBlockNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] diff --git a/src/SmaCC_Java/JavaBooleanLiteralNode.class.st b/src/SmaCC_Java/JavaBooleanLiteralNode.class.st deleted file mode 100644 index 360fb48d4..000000000 --- a/src/SmaCC_Java/JavaBooleanLiteralNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #JavaBooleanLiteralNode, - #superclass : #JavaLiteralNode, - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaBooleanLiteralNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitBooleanLiteral: self -] diff --git a/src/SmaCC_Java/JavaBooleanTypeNode.class.st b/src/SmaCC_Java/JavaBooleanTypeNode.class.st deleted file mode 100644 index 7b007d919..000000000 --- a/src/SmaCC_Java/JavaBooleanTypeNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #JavaBooleanTypeNode, - #superclass : #JavaPrimitiveTypeNode, - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaBooleanTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitBooleanType: self -] diff --git a/src/SmaCC_Java/JavaBreakStatementNode.class.st b/src/SmaCC_Java/JavaBreakStatementNode.class.st deleted file mode 100644 index 13bf7caef..000000000 --- a/src/SmaCC_Java/JavaBreakStatementNode.class.st +++ /dev/null @@ -1,55 +0,0 @@ -Class { - #name : #JavaBreakStatementNode, - #superclass : #JavaStatementNode, - #instVars : [ - 'breakToken', - 'identifier', - 'semicolon' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaBreakStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitBreakStatement: self -] - -{ #category : #generated } -JavaBreakStatementNode >> breakToken [ - ^ breakToken -] - -{ #category : #generated } -JavaBreakStatementNode >> breakToken: aSmaCCToken [ - breakToken := aSmaCCToken -] - -{ #category : #generated } -JavaBreakStatementNode >> identifier [ - ^ identifier -] - -{ #category : #generated } -JavaBreakStatementNode >> identifier: aSmaCCToken [ - identifier := aSmaCCToken -] - -{ #category : #generated } -JavaBreakStatementNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -JavaBreakStatementNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JavaBreakStatementNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -JavaBreakStatementNode >> tokenVariables [ - ^ #(#breakToken #identifier) -] diff --git a/src/SmaCC_Java/JavaByteTypeNode.class.st b/src/SmaCC_Java/JavaByteTypeNode.class.st deleted file mode 100644 index 9f4363543..000000000 --- a/src/SmaCC_Java/JavaByteTypeNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #JavaByteTypeNode, - #superclass : #JavaPrimitiveTypeNode, - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaByteTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitByteType: self -] diff --git a/src/SmaCC_Java/JavaCastExpressionNode.class.st b/src/SmaCC_Java/JavaCastExpressionNode.class.st deleted file mode 100644 index 3962103e7..000000000 --- a/src/SmaCC_Java/JavaCastExpressionNode.class.st +++ /dev/null @@ -1,90 +0,0 @@ -Class { - #name : #JavaCastExpressionNode, - #superclass : #JavaUnaryExpressionNode, - #instVars : [ - 'leftParen', - 'type', - 'rightParen', - 'ampToken', - 'interfaceType' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaCastExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitCastExpression: self -] - -{ #category : #generated } -JavaCastExpressionNode >> ampToken [ - ^ ampToken -] - -{ #category : #generated } -JavaCastExpressionNode >> ampToken: aSmaCCToken [ - ampToken := aSmaCCToken -] - -{ #category : #generated } -JavaCastExpressionNode >> ignoredTokenVariables [ - ^ #(#leftParen #rightParen) -] - -{ #category : #generated } -JavaCastExpressionNode >> interfaceType [ - ^ interfaceType -] - -{ #category : #generated } -JavaCastExpressionNode >> interfaceType: aJavaClassTypeNode [ - self interfaceType notNil - ifTrue: [ self interfaceType parent: nil ]. - interfaceType := aJavaClassTypeNode. - self interfaceType notNil - ifTrue: [ self interfaceType parent: self ] -] - -{ #category : #generated } -JavaCastExpressionNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -JavaCastExpressionNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -JavaCastExpressionNode >> nodeVariables [ - ^ #(#type #interfaceType #expression) -] - -{ #category : #generated } -JavaCastExpressionNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -JavaCastExpressionNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -JavaCastExpressionNode >> tokenVariables [ - ^ #(#ampToken) -] - -{ #category : #generated } -JavaCastExpressionNode >> type [ - ^ type -] - -{ #category : #generated } -JavaCastExpressionNode >> type: aJavaTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aJavaTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_Java/JavaCatchClauseNode.class.st b/src/SmaCC_Java/JavaCatchClauseNode.class.st deleted file mode 100644 index 1c5112a49..000000000 --- a/src/SmaCC_Java/JavaCatchClauseNode.class.st +++ /dev/null @@ -1,90 +0,0 @@ -Class { - #name : #JavaCatchClauseNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'catchToken', - 'leftParen', - 'parameter', - 'rightParen', - 'block' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaCatchClauseNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitCatchClause: self -] - -{ #category : #generated } -JavaCatchClauseNode >> block [ - ^ block -] - -{ #category : #generated } -JavaCatchClauseNode >> block: aJavaBlockNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aJavaBlockNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -JavaCatchClauseNode >> catchToken [ - ^ catchToken -] - -{ #category : #generated } -JavaCatchClauseNode >> catchToken: aSmaCCToken [ - catchToken := aSmaCCToken -] - -{ #category : #generated } -JavaCatchClauseNode >> ignoredTokenVariables [ - ^ #(#leftParen #rightParen) -] - -{ #category : #generated } -JavaCatchClauseNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -JavaCatchClauseNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -JavaCatchClauseNode >> nodeVariables [ - ^ #(#parameter #block) -] - -{ #category : #generated } -JavaCatchClauseNode >> parameter [ - ^ parameter -] - -{ #category : #generated } -JavaCatchClauseNode >> parameter: aJavaCatchParameterNode [ - self parameter notNil - ifTrue: [ self parameter parent: nil ]. - parameter := aJavaCatchParameterNode. - self parameter notNil - ifTrue: [ self parameter parent: self ] -] - -{ #category : #generated } -JavaCatchClauseNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -JavaCatchClauseNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -JavaCatchClauseNode >> tokenVariables [ - ^ #(#catchToken) -] diff --git a/src/SmaCC_Java/JavaCatchParameterNode.class.st b/src/SmaCC_Java/JavaCatchParameterNode.class.st deleted file mode 100644 index 88776d72d..000000000 --- a/src/SmaCC_Java/JavaCatchParameterNode.class.st +++ /dev/null @@ -1,87 +0,0 @@ -Class { - #name : #JavaCatchParameterNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'modifiers', - 'types', - 'bars', - 'variable' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaCatchParameterNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitCatchParameter: self -] - -{ #category : #generated } -JavaCatchParameterNode >> bars [ - ^ bars -] - -{ #category : #generated } -JavaCatchParameterNode >> bars: anOrderedCollection [ - bars := anOrderedCollection -] - -{ #category : #generated } -JavaCatchParameterNode >> compositeNodeVariables [ - ^ #(#modifiers #types) -] - -{ #category : #generated } -JavaCatchParameterNode >> compositeTokenVariables [ - ^ #(#bars) -] - -{ #category : #'generated-initialize-release' } -JavaCatchParameterNode >> initialize [ - super initialize. - modifiers := OrderedCollection new: 2. - types := OrderedCollection new: 2. - bars := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaCatchParameterNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -JavaCatchParameterNode >> modifiers: anOrderedCollection [ - self setParents: self modifiers to: nil. - modifiers := anOrderedCollection. - self setParents: self modifiers to: self -] - -{ #category : #generated } -JavaCatchParameterNode >> nodeVariables [ - ^ #(#variable) -] - -{ #category : #generated } -JavaCatchParameterNode >> types [ - ^ types -] - -{ #category : #generated } -JavaCatchParameterNode >> types: anOrderedCollection [ - self setParents: self types to: nil. - types := anOrderedCollection. - self setParents: self types to: self -] - -{ #category : #generated } -JavaCatchParameterNode >> variable [ - ^ variable -] - -{ #category : #generated } -JavaCatchParameterNode >> variable: aJavaProgramNode [ - self variable notNil - ifTrue: [ self variable parent: nil ]. - variable := aJavaProgramNode. - self variable notNil - ifTrue: [ self variable parent: self ] -] diff --git a/src/SmaCC_Java/JavaCharTypeNode.class.st b/src/SmaCC_Java/JavaCharTypeNode.class.st deleted file mode 100644 index 520ce6d46..000000000 --- a/src/SmaCC_Java/JavaCharTypeNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #JavaCharTypeNode, - #superclass : #JavaPrimitiveTypeNode, - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaCharTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitCharType: self -] diff --git a/src/SmaCC_Java/JavaCharacterLiteralNode.class.st b/src/SmaCC_Java/JavaCharacterLiteralNode.class.st deleted file mode 100644 index 7b98dcc70..000000000 --- a/src/SmaCC_Java/JavaCharacterLiteralNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #JavaCharacterLiteralNode, - #superclass : #JavaLiteralNode, - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaCharacterLiteralNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitCharacterLiteral: self -] diff --git a/src/SmaCC_Java/JavaClassDeclarationNode.class.st b/src/SmaCC_Java/JavaClassDeclarationNode.class.st deleted file mode 100644 index 630457ab9..000000000 --- a/src/SmaCC_Java/JavaClassDeclarationNode.class.st +++ /dev/null @@ -1,192 +0,0 @@ -Class { - #name : #JavaClassDeclarationNode, - #superclass : #JavaDeclarationNode, - #instVars : [ - 'modifiers', - 'classToken', - 'name', - 'typeParameters', - 'extendsToken', - 'superclass', - 'implementsToken', - 'interfaces', - 'commas', - 'leftBrace', - 'declarations', - 'rightBrace' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaClassDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitClassDeclaration: self -] - -{ #category : #generated } -JavaClassDeclarationNode >> classToken [ - ^ classToken -] - -{ #category : #generated } -JavaClassDeclarationNode >> classToken: aSmaCCToken [ - classToken := aSmaCCToken -] - -{ #category : #generated } -JavaClassDeclarationNode >> commas [ - ^ commas -] - -{ #category : #generated } -JavaClassDeclarationNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JavaClassDeclarationNode >> compositeNodeVariables [ - ^ #(#declarations #interfaces #modifiers) -] - -{ #category : #generated } -JavaClassDeclarationNode >> declarations [ - ^ declarations -] - -{ #category : #generated } -JavaClassDeclarationNode >> declarations: anOrderedCollection [ - self setParents: self declarations to: nil. - declarations := anOrderedCollection. - self setParents: self declarations to: self -] - -{ #category : #generated } -JavaClassDeclarationNode >> extendsToken [ - ^ extendsToken -] - -{ #category : #generated } -JavaClassDeclarationNode >> extendsToken: aSmaCCToken [ - extendsToken := aSmaCCToken -] - -{ #category : #generated } -JavaClassDeclarationNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -JavaClassDeclarationNode >> ignoredTokenVariables [ - ^ #(#leftBrace #rightBrace) -] - -{ #category : #generated } -JavaClassDeclarationNode >> implementsToken [ - ^ implementsToken -] - -{ #category : #generated } -JavaClassDeclarationNode >> implementsToken: aSmaCCToken [ - implementsToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -JavaClassDeclarationNode >> initialize [ - super initialize. - declarations := OrderedCollection new: 2. - interfaces := OrderedCollection new: 2. - commas := OrderedCollection new: 2. - modifiers := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaClassDeclarationNode >> interfaces [ - ^ interfaces -] - -{ #category : #generated } -JavaClassDeclarationNode >> interfaces: anOrderedCollection [ - self setParents: self interfaces to: nil. - interfaces := anOrderedCollection. - self setParents: self interfaces to: self -] - -{ #category : #generated } -JavaClassDeclarationNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -JavaClassDeclarationNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -JavaClassDeclarationNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -JavaClassDeclarationNode >> modifiers: anOrderedCollection [ - self setParents: self modifiers to: nil. - modifiers := anOrderedCollection. - self setParents: self modifiers to: self -] - -{ #category : #generated } -JavaClassDeclarationNode >> name [ - ^ name -] - -{ #category : #generated } -JavaClassDeclarationNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -JavaClassDeclarationNode >> nodeVariables [ - ^ #(#typeParameters #superclass) -] - -{ #category : #generated } -JavaClassDeclarationNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -JavaClassDeclarationNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] - -{ #category : #generated } -JavaClassDeclarationNode >> superclass [ - ^ superclass -] - -{ #category : #generated } -JavaClassDeclarationNode >> superclass: aJavaClassTypeNode [ - self superclass notNil - ifTrue: [ self superclass parent: nil ]. - superclass := aJavaClassTypeNode. - self superclass notNil - ifTrue: [ self superclass parent: self ] -] - -{ #category : #generated } -JavaClassDeclarationNode >> tokenVariables [ - ^ #(#classToken #name #implementsToken #extendsToken) -] - -{ #category : #generated } -JavaClassDeclarationNode >> typeParameters [ - ^ typeParameters -] - -{ #category : #generated } -JavaClassDeclarationNode >> typeParameters: aJavaTypeParametersNode [ - self typeParameters notNil - ifTrue: [ self typeParameters parent: nil ]. - typeParameters := aJavaTypeParametersNode. - self typeParameters notNil - ifTrue: [ self typeParameters parent: self ] -] diff --git a/src/SmaCC_Java/JavaClassExpressionNode.class.st b/src/SmaCC_Java/JavaClassExpressionNode.class.st deleted file mode 100644 index 424b387e9..000000000 --- a/src/SmaCC_Java/JavaClassExpressionNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #JavaClassExpressionNode, - #superclass : #JavaExpressionNode, - #instVars : [ - 'type', - 'period', - 'classToken' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaClassExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitClassExpression: self -] - -{ #category : #generated } -JavaClassExpressionNode >> classToken [ - ^ classToken -] - -{ #category : #generated } -JavaClassExpressionNode >> classToken: aSmaCCToken [ - classToken := aSmaCCToken -] - -{ #category : #generated } -JavaClassExpressionNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -JavaClassExpressionNode >> period [ - ^ period -] - -{ #category : #generated } -JavaClassExpressionNode >> period: aSmaCCToken [ - period := aSmaCCToken -] - -{ #category : #generated } -JavaClassExpressionNode >> tokenVariables [ - ^ #(#period #classToken) -] - -{ #category : #generated } -JavaClassExpressionNode >> type [ - ^ type -] - -{ #category : #generated } -JavaClassExpressionNode >> type: aJavaProgramNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aJavaProgramNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_Java/JavaClassTypeNode.class.st b/src/SmaCC_Java/JavaClassTypeNode.class.st deleted file mode 100644 index 673a2a792..000000000 --- a/src/SmaCC_Java/JavaClassTypeNode.class.st +++ /dev/null @@ -1,32 +0,0 @@ -Class { - #name : #JavaClassTypeNode, - #superclass : #JavaTypeNode, - #instVars : [ - 'name' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaClassTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitClassType: self -] - -{ #category : #generated } -JavaClassTypeNode >> name [ - ^ name -] - -{ #category : #generated } -JavaClassTypeNode >> name: aJavaTypeNameNode [ - self name notNil - ifTrue: [ self name parent: nil ]. - name := aJavaTypeNameNode. - self name notNil - ifTrue: [ self name parent: self ] -] - -{ #category : #generated } -JavaClassTypeNode >> nodeVariables [ - ^ #(#name) -] diff --git a/src/SmaCC_Java/JavaConditionalExpressionNode.class.st b/src/SmaCC_Java/JavaConditionalExpressionNode.class.st deleted file mode 100644 index 87e0be822..000000000 --- a/src/SmaCC_Java/JavaConditionalExpressionNode.class.st +++ /dev/null @@ -1,89 +0,0 @@ -Class { - #name : #JavaConditionalExpressionNode, - #superclass : #JavaExpressionNode, - #instVars : [ - 'testExpression', - 'questionMark', - 'trueExpression', - 'colon', - 'falseExpression' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaConditionalExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitConditionalExpression: self -] - -{ #category : #generated } -JavaConditionalExpressionNode >> colon [ - ^ colon -] - -{ #category : #generated } -JavaConditionalExpressionNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -JavaConditionalExpressionNode >> falseExpression [ - ^ falseExpression -] - -{ #category : #generated } -JavaConditionalExpressionNode >> falseExpression: aJavaExpressionNode [ - self falseExpression notNil - ifTrue: [ self falseExpression parent: nil ]. - falseExpression := aJavaExpressionNode. - self falseExpression notNil - ifTrue: [ self falseExpression parent: self ] -] - -{ #category : #generated } -JavaConditionalExpressionNode >> nodeVariables [ - ^ #(#testExpression #trueExpression #falseExpression) -] - -{ #category : #generated } -JavaConditionalExpressionNode >> questionMark [ - ^ questionMark -] - -{ #category : #generated } -JavaConditionalExpressionNode >> questionMark: aSmaCCToken [ - questionMark := aSmaCCToken -] - -{ #category : #generated } -JavaConditionalExpressionNode >> testExpression [ - ^ testExpression -] - -{ #category : #generated } -JavaConditionalExpressionNode >> testExpression: aJavaExpressionNode [ - self testExpression notNil - ifTrue: [ self testExpression parent: nil ]. - testExpression := aJavaExpressionNode. - self testExpression notNil - ifTrue: [ self testExpression parent: self ] -] - -{ #category : #generated } -JavaConditionalExpressionNode >> tokenVariables [ - ^ #(#questionMark #colon) -] - -{ #category : #generated } -JavaConditionalExpressionNode >> trueExpression [ - ^ trueExpression -] - -{ #category : #generated } -JavaConditionalExpressionNode >> trueExpression: aJavaExpressionNode [ - self trueExpression notNil - ifTrue: [ self trueExpression parent: nil ]. - trueExpression := aJavaExpressionNode. - self trueExpression notNil - ifTrue: [ self trueExpression parent: self ] -] diff --git a/src/SmaCC_Java/JavaConstructorDeclarationNode.class.st b/src/SmaCC_Java/JavaConstructorDeclarationNode.class.st deleted file mode 100644 index 0ee31d984..000000000 --- a/src/SmaCC_Java/JavaConstructorDeclarationNode.class.st +++ /dev/null @@ -1,159 +0,0 @@ -Class { - #name : #JavaConstructorDeclarationNode, - #superclass : #JavaDeclarationNode, - #instVars : [ - 'modifiers', - 'typeParameters', - 'name', - 'leftParen', - 'parameters', - 'commas', - 'rightParen', - 'throws', - 'body' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaConstructorDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitConstructorDeclaration: self -] - -{ #category : #generated } -JavaConstructorDeclarationNode >> body [ - ^ body -] - -{ #category : #generated } -JavaConstructorDeclarationNode >> body: aJavaBlockNode [ - self body notNil - ifTrue: [ self body parent: nil ]. - body := aJavaBlockNode. - self body notNil - ifTrue: [ self body parent: self ] -] - -{ #category : #generated } -JavaConstructorDeclarationNode >> commas [ - ^ commas -] - -{ #category : #generated } -JavaConstructorDeclarationNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JavaConstructorDeclarationNode >> compositeNodeVariables [ - ^ #(#parameters #modifiers) -] - -{ #category : #generated } -JavaConstructorDeclarationNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -JavaConstructorDeclarationNode >> ignoredTokenVariables [ - ^ #(#leftParen #rightParen) -] - -{ #category : #'generated-initialize-release' } -JavaConstructorDeclarationNode >> initialize [ - super initialize. - parameters := OrderedCollection new: 2. - commas := OrderedCollection new: 2. - modifiers := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaConstructorDeclarationNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -JavaConstructorDeclarationNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -JavaConstructorDeclarationNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -JavaConstructorDeclarationNode >> modifiers: anOrderedCollection [ - self setParents: self modifiers to: nil. - modifiers := anOrderedCollection. - self setParents: self modifiers to: self -] - -{ #category : #generated } -JavaConstructorDeclarationNode >> name [ - ^ name -] - -{ #category : #generated } -JavaConstructorDeclarationNode >> name: aJavaNameNode [ - self name notNil - ifTrue: [ self name parent: nil ]. - name := aJavaNameNode. - self name notNil - ifTrue: [ self name parent: self ] -] - -{ #category : #generated } -JavaConstructorDeclarationNode >> nodeVariables [ - ^ #(#typeParameters #name #body #throws) -] - -{ #category : #generated } -JavaConstructorDeclarationNode >> parameters [ - ^ parameters -] - -{ #category : #generated } -JavaConstructorDeclarationNode >> parameters: anOrderedCollection [ - self setParents: self parameters to: nil. - parameters := anOrderedCollection. - self setParents: self parameters to: self -] - -{ #category : #generated } -JavaConstructorDeclarationNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -JavaConstructorDeclarationNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -JavaConstructorDeclarationNode >> throws [ - ^ throws -] - -{ #category : #generated } -JavaConstructorDeclarationNode >> throws: aJavaThrowsNode [ - self throws notNil - ifTrue: [ self throws parent: nil ]. - throws := aJavaThrowsNode. - self throws notNil - ifTrue: [ self throws parent: self ] -] - -{ #category : #generated } -JavaConstructorDeclarationNode >> typeParameters [ - ^ typeParameters -] - -{ #category : #generated } -JavaConstructorDeclarationNode >> typeParameters: aJavaTypeParametersNode [ - self typeParameters notNil - ifTrue: [ self typeParameters parent: nil ]. - typeParameters := aJavaTypeParametersNode. - self typeParameters notNil - ifTrue: [ self typeParameters parent: self ] -] diff --git a/src/SmaCC_Java/JavaContinueStatementNode.class.st b/src/SmaCC_Java/JavaContinueStatementNode.class.st deleted file mode 100644 index b0a9a915d..000000000 --- a/src/SmaCC_Java/JavaContinueStatementNode.class.st +++ /dev/null @@ -1,55 +0,0 @@ -Class { - #name : #JavaContinueStatementNode, - #superclass : #JavaStatementNode, - #instVars : [ - 'continueToken', - 'identifier', - 'semicolon' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaContinueStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitContinueStatement: self -] - -{ #category : #generated } -JavaContinueStatementNode >> continueToken [ - ^ continueToken -] - -{ #category : #generated } -JavaContinueStatementNode >> continueToken: aSmaCCToken [ - continueToken := aSmaCCToken -] - -{ #category : #generated } -JavaContinueStatementNode >> identifier [ - ^ identifier -] - -{ #category : #generated } -JavaContinueStatementNode >> identifier: aSmaCCToken [ - identifier := aSmaCCToken -] - -{ #category : #generated } -JavaContinueStatementNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -JavaContinueStatementNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JavaContinueStatementNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -JavaContinueStatementNode >> tokenVariables [ - ^ #(#continueToken #identifier) -] diff --git a/src/SmaCC_Java/JavaDeclarationNode.class.st b/src/SmaCC_Java/JavaDeclarationNode.class.st deleted file mode 100644 index 916dc51c6..000000000 --- a/src/SmaCC_Java/JavaDeclarationNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #JavaDeclarationNode, - #superclass : #JavaProgramNode, - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitDeclaration: self -] diff --git a/src/SmaCC_Java/JavaDefaultLabelNode.class.st b/src/SmaCC_Java/JavaDefaultLabelNode.class.st deleted file mode 100644 index 546114bcb..000000000 --- a/src/SmaCC_Java/JavaDefaultLabelNode.class.st +++ /dev/null @@ -1,39 +0,0 @@ -Class { - #name : #JavaDefaultLabelNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'defaultToken', - 'colon' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaDefaultLabelNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitDefaultLabel: self -] - -{ #category : #generated } -JavaDefaultLabelNode >> colon [ - ^ colon -] - -{ #category : #generated } -JavaDefaultLabelNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -JavaDefaultLabelNode >> defaultToken [ - ^ defaultToken -] - -{ #category : #generated } -JavaDefaultLabelNode >> defaultToken: aSmaCCToken [ - defaultToken := aSmaCCToken -] - -{ #category : #generated } -JavaDefaultLabelNode >> tokenVariables [ - ^ #(#defaultToken #colon) -] diff --git a/src/SmaCC_Java/JavaDimensionExpressionNode.class.st b/src/SmaCC_Java/JavaDimensionExpressionNode.class.st deleted file mode 100644 index bbae1aff0..000000000 --- a/src/SmaCC_Java/JavaDimensionExpressionNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #JavaDimensionExpressionNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'leftBracket', - 'expression', - 'rightBracket' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaDimensionExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitDimensionExpression: self -] - -{ #category : #generated } -JavaDimensionExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -JavaDimensionExpressionNode >> expression: aJavaExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJavaExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JavaDimensionExpressionNode >> ignoredTokenVariables [ - ^ #(#leftBracket #rightBracket) -] - -{ #category : #generated } -JavaDimensionExpressionNode >> leftBracket [ - ^ leftBracket -] - -{ #category : #generated } -JavaDimensionExpressionNode >> leftBracket: aSmaCCToken [ - leftBracket := aSmaCCToken -] - -{ #category : #generated } -JavaDimensionExpressionNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -JavaDimensionExpressionNode >> rightBracket [ - ^ rightBracket -] - -{ #category : #generated } -JavaDimensionExpressionNode >> rightBracket: aSmaCCToken [ - rightBracket := aSmaCCToken -] diff --git a/src/SmaCC_Java/JavaDoWhileStatementNode.class.st b/src/SmaCC_Java/JavaDoWhileStatementNode.class.st deleted file mode 100644 index b36b731f1..000000000 --- a/src/SmaCC_Java/JavaDoWhileStatementNode.class.st +++ /dev/null @@ -1,112 +0,0 @@ -Class { - #name : #JavaDoWhileStatementNode, - #superclass : #JavaStatementNode, - #instVars : [ - 'doToken', - 'statement', - 'whileToken', - 'leftParen', - 'expression', - 'rightParen', - 'semicolon' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaDoWhileStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitDoWhileStatement: self -] - -{ #category : #generated } -JavaDoWhileStatementNode >> doToken [ - ^ doToken -] - -{ #category : #generated } -JavaDoWhileStatementNode >> doToken: aSmaCCToken [ - doToken := aSmaCCToken -] - -{ #category : #generated } -JavaDoWhileStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -JavaDoWhileStatementNode >> expression: aJavaExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJavaExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JavaDoWhileStatementNode >> ignoredTokenVariables [ - ^ #(#leftParen #rightParen #semicolon) -] - -{ #category : #generated } -JavaDoWhileStatementNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -JavaDoWhileStatementNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -JavaDoWhileStatementNode >> nodeVariables [ - ^ #(#statement #expression) -] - -{ #category : #generated } -JavaDoWhileStatementNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -JavaDoWhileStatementNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -JavaDoWhileStatementNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JavaDoWhileStatementNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -JavaDoWhileStatementNode >> statement [ - ^ statement -] - -{ #category : #generated } -JavaDoWhileStatementNode >> statement: aJavaStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aJavaStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -JavaDoWhileStatementNode >> tokenVariables [ - ^ #(#doToken #whileToken) -] - -{ #category : #generated } -JavaDoWhileStatementNode >> whileToken [ - ^ whileToken -] - -{ #category : #generated } -JavaDoWhileStatementNode >> whileToken: aSmaCCToken [ - whileToken := aSmaCCToken -] diff --git a/src/SmaCC_Java/JavaDoubleTypeNode.class.st b/src/SmaCC_Java/JavaDoubleTypeNode.class.st deleted file mode 100644 index 377e97d27..000000000 --- a/src/SmaCC_Java/JavaDoubleTypeNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #JavaDoubleTypeNode, - #superclass : #JavaPrimitiveTypeNode, - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaDoubleTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitDoubleType: self -] diff --git a/src/SmaCC_Java/JavaElementArrayInitializerNode.class.st b/src/SmaCC_Java/JavaElementArrayInitializerNode.class.st deleted file mode 100644 index 01bd4fb42..000000000 --- a/src/SmaCC_Java/JavaElementArrayInitializerNode.class.st +++ /dev/null @@ -1,80 +0,0 @@ -Class { - #name : #JavaElementArrayInitializerNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'leftBrace', - 'values', - 'commas', - 'rightBrace' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaElementArrayInitializerNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitElementArrayInitializer: self -] - -{ #category : #generated } -JavaElementArrayInitializerNode >> commas [ - ^ commas -] - -{ #category : #generated } -JavaElementArrayInitializerNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JavaElementArrayInitializerNode >> compositeNodeVariables [ - ^ #(#values) -] - -{ #category : #generated } -JavaElementArrayInitializerNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -JavaElementArrayInitializerNode >> ignoredTokenVariables [ - ^ #(#leftBrace #rightBrace) -] - -{ #category : #'generated-initialize-release' } -JavaElementArrayInitializerNode >> initialize [ - super initialize. - commas := OrderedCollection new: 2. - values := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaElementArrayInitializerNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -JavaElementArrayInitializerNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -JavaElementArrayInitializerNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -JavaElementArrayInitializerNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] - -{ #category : #generated } -JavaElementArrayInitializerNode >> values [ - ^ values -] - -{ #category : #generated } -JavaElementArrayInitializerNode >> values: anOrderedCollection [ - self setParents: self values to: nil. - values := anOrderedCollection. - self setParents: self values to: self -] diff --git a/src/SmaCC_Java/JavaElementValuePairNode.class.st b/src/SmaCC_Java/JavaElementValuePairNode.class.st deleted file mode 100644 index b0600d5db..000000000 --- a/src/SmaCC_Java/JavaElementValuePairNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #JavaElementValuePairNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'name', - 'equals', - 'value' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaElementValuePairNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitElementValuePair: self -] - -{ #category : #generated } -JavaElementValuePairNode >> equals [ - ^ equals -] - -{ #category : #generated } -JavaElementValuePairNode >> equals: aSmaCCToken [ - equals := aSmaCCToken -] - -{ #category : #generated } -JavaElementValuePairNode >> name [ - ^ name -] - -{ #category : #generated } -JavaElementValuePairNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -JavaElementValuePairNode >> nodeVariables [ - ^ #(#value) -] - -{ #category : #generated } -JavaElementValuePairNode >> tokenVariables [ - ^ #(#name #equals) -] - -{ #category : #generated } -JavaElementValuePairNode >> value [ - ^ value -] - -{ #category : #generated } -JavaElementValuePairNode >> value: aJavaProgramNode [ - self value notNil - ifTrue: [ self value parent: nil ]. - value := aJavaProgramNode. - self value notNil - ifTrue: [ self value parent: self ] -] diff --git a/src/SmaCC_Java/JavaEmptyDeclarationNode.class.st b/src/SmaCC_Java/JavaEmptyDeclarationNode.class.st deleted file mode 100644 index 4f411a30f..000000000 --- a/src/SmaCC_Java/JavaEmptyDeclarationNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JavaEmptyDeclarationNode, - #superclass : #JavaDeclarationNode, - #instVars : [ - 'semicolon' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaEmptyDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitEmptyDeclaration: self -] - -{ #category : #generated } -JavaEmptyDeclarationNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -JavaEmptyDeclarationNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JavaEmptyDeclarationNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] diff --git a/src/SmaCC_Java/JavaEmptyMethodBodyNode.class.st b/src/SmaCC_Java/JavaEmptyMethodBodyNode.class.st deleted file mode 100644 index bba75e40b..000000000 --- a/src/SmaCC_Java/JavaEmptyMethodBodyNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JavaEmptyMethodBodyNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'semicolon' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaEmptyMethodBodyNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitEmptyMethodBody: self -] - -{ #category : #generated } -JavaEmptyMethodBodyNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -JavaEmptyMethodBodyNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JavaEmptyMethodBodyNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] diff --git a/src/SmaCC_Java/JavaEmptyStatementNode.class.st b/src/SmaCC_Java/JavaEmptyStatementNode.class.st deleted file mode 100644 index e1cd4ef9e..000000000 --- a/src/SmaCC_Java/JavaEmptyStatementNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JavaEmptyStatementNode, - #superclass : #JavaStatementNode, - #instVars : [ - 'semicolon' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaEmptyStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitEmptyStatement: self -] - -{ #category : #generated } -JavaEmptyStatementNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -JavaEmptyStatementNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JavaEmptyStatementNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] diff --git a/src/SmaCC_Java/JavaEnumConstantNode.class.st b/src/SmaCC_Java/JavaEnumConstantNode.class.st deleted file mode 100644 index 014a86f90..000000000 --- a/src/SmaCC_Java/JavaEnumConstantNode.class.st +++ /dev/null @@ -1,146 +0,0 @@ -Class { - #name : #JavaEnumConstantNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'annotations', - 'name', - 'leftParen', - 'expressions', - 'commas', - 'rightParen', - 'leftBrace', - 'declarations', - 'rightBrace' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaEnumConstantNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitEnumConstant: self -] - -{ #category : #generated } -JavaEnumConstantNode >> annotations [ - ^ annotations -] - -{ #category : #generated } -JavaEnumConstantNode >> annotations: anOrderedCollection [ - self setParents: self annotations to: nil. - annotations := anOrderedCollection. - self setParents: self annotations to: self -] - -{ #category : #generated } -JavaEnumConstantNode >> commas [ - ^ commas -] - -{ #category : #generated } -JavaEnumConstantNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JavaEnumConstantNode >> compositeNodeVariables [ - ^ #(#annotations #declarations #expressions) -] - -{ #category : #generated } -JavaEnumConstantNode >> declarations [ - ^ declarations -] - -{ #category : #generated } -JavaEnumConstantNode >> declarations: anOrderedCollection [ - self setParents: self declarations to: nil. - declarations := anOrderedCollection. - self setParents: self declarations to: self -] - -{ #category : #generated } -JavaEnumConstantNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -JavaEnumConstantNode >> expressions: anOrderedCollection [ - self setParents: self expressions to: nil. - expressions := anOrderedCollection. - self setParents: self expressions to: self -] - -{ #category : #generated } -JavaEnumConstantNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -JavaEnumConstantNode >> ignoredTokenVariables [ - ^ #(#leftBrace #rightBrace #leftParen #rightParen) -] - -{ #category : #'generated-initialize-release' } -JavaEnumConstantNode >> initialize [ - super initialize. - annotations := OrderedCollection new: 2. - declarations := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaEnumConstantNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -JavaEnumConstantNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -JavaEnumConstantNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -JavaEnumConstantNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -JavaEnumConstantNode >> name [ - ^ name -] - -{ #category : #generated } -JavaEnumConstantNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -JavaEnumConstantNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -JavaEnumConstantNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] - -{ #category : #generated } -JavaEnumConstantNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -JavaEnumConstantNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -JavaEnumConstantNode >> tokenVariables [ - ^ #(#name) -] diff --git a/src/SmaCC_Java/JavaEnumDeclarationNode.class.st b/src/SmaCC_Java/JavaEnumDeclarationNode.class.st deleted file mode 100644 index 114a0f0b6..000000000 --- a/src/SmaCC_Java/JavaEnumDeclarationNode.class.st +++ /dev/null @@ -1,171 +0,0 @@ -Class { - #name : #JavaEnumDeclarationNode, - #superclass : #JavaDeclarationNode, - #instVars : [ - 'modifiers', - 'enumToken', - 'name', - 'implementsToken', - 'interfaces', - 'commas', - 'leftBrace', - 'constants', - 'semicolon', - 'declarations', - 'rightBrace' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaEnumDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitEnumDeclaration: self -] - -{ #category : #generated } -JavaEnumDeclarationNode >> commas [ - ^ commas -] - -{ #category : #generated } -JavaEnumDeclarationNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JavaEnumDeclarationNode >> compositeNodeVariables [ - ^ #(#declarations #constants #interfaces #modifiers) -] - -{ #category : #generated } -JavaEnumDeclarationNode >> constants [ - ^ constants -] - -{ #category : #generated } -JavaEnumDeclarationNode >> constants: anOrderedCollection [ - self setParents: self constants to: nil. - constants := anOrderedCollection. - self setParents: self constants to: self -] - -{ #category : #generated } -JavaEnumDeclarationNode >> declarations [ - ^ declarations -] - -{ #category : #generated } -JavaEnumDeclarationNode >> declarations: anOrderedCollection [ - self setParents: self declarations to: nil. - declarations := anOrderedCollection. - self setParents: self declarations to: self -] - -{ #category : #generated } -JavaEnumDeclarationNode >> enumToken [ - ^ enumToken -] - -{ #category : #generated } -JavaEnumDeclarationNode >> enumToken: aSmaCCToken [ - enumToken := aSmaCCToken -] - -{ #category : #generated } -JavaEnumDeclarationNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -JavaEnumDeclarationNode >> ignoredTokenVariables [ - ^ #(#leftBrace #rightBrace #semicolon) -] - -{ #category : #generated } -JavaEnumDeclarationNode >> implementsToken [ - ^ implementsToken -] - -{ #category : #generated } -JavaEnumDeclarationNode >> implementsToken: aSmaCCToken [ - implementsToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -JavaEnumDeclarationNode >> initialize [ - super initialize. - declarations := OrderedCollection new: 2. - commas := OrderedCollection new: 2. - constants := OrderedCollection new: 2. - interfaces := OrderedCollection new: 2. - modifiers := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaEnumDeclarationNode >> interfaces [ - ^ interfaces -] - -{ #category : #generated } -JavaEnumDeclarationNode >> interfaces: anOrderedCollection [ - self setParents: self interfaces to: nil. - interfaces := anOrderedCollection. - self setParents: self interfaces to: self -] - -{ #category : #generated } -JavaEnumDeclarationNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -JavaEnumDeclarationNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -JavaEnumDeclarationNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -JavaEnumDeclarationNode >> modifiers: anOrderedCollection [ - self setParents: self modifiers to: nil. - modifiers := anOrderedCollection. - self setParents: self modifiers to: self -] - -{ #category : #generated } -JavaEnumDeclarationNode >> name [ - ^ name -] - -{ #category : #generated } -JavaEnumDeclarationNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -JavaEnumDeclarationNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -JavaEnumDeclarationNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] - -{ #category : #generated } -JavaEnumDeclarationNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JavaEnumDeclarationNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -JavaEnumDeclarationNode >> tokenVariables [ - ^ #(#enumToken #name #implementsToken) -] diff --git a/src/SmaCC_Java/JavaExpressionNode.class.st b/src/SmaCC_Java/JavaExpressionNode.class.st deleted file mode 100644 index 186050779..000000000 --- a/src/SmaCC_Java/JavaExpressionNode.class.st +++ /dev/null @@ -1,46 +0,0 @@ -Class { - #name : #JavaExpressionNode, - #superclass : #JavaProgramNode, - #instVars : [ - '_leftParens', - '_rightParens' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaExpressionNode >> _leftParens [ - ^ _leftParens -] - -{ #category : #generated } -JavaExpressionNode >> _leftParens: anOrderedCollection [ - _leftParens := anOrderedCollection -] - -{ #category : #generated } -JavaExpressionNode >> _rightParens [ - ^ _rightParens -] - -{ #category : #generated } -JavaExpressionNode >> _rightParens: anOrderedCollection [ - _rightParens := anOrderedCollection -] - -{ #category : #generated } -JavaExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitExpression: self -] - -{ #category : #generated } -JavaExpressionNode >> ignoredCompositeTokenVariables [ - ^ #(#_leftParens #_rightParens) -] - -{ #category : #'generated-initialize-release' } -JavaExpressionNode >> initialize [ - super initialize. - _leftParens := OrderedCollection new: 2. - _rightParens := OrderedCollection new: 2. -] diff --git a/src/SmaCC_Java/JavaExpressionStatementNode.class.st b/src/SmaCC_Java/JavaExpressionStatementNode.class.st deleted file mode 100644 index 1dabab294..000000000 --- a/src/SmaCC_Java/JavaExpressionStatementNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #JavaExpressionStatementNode, - #superclass : #JavaStatementNode, - #instVars : [ - 'expression', - 'semicolon' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaExpressionStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitExpressionStatement: self -] - -{ #category : #generated } -JavaExpressionStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -JavaExpressionStatementNode >> expression: aJavaExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJavaExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JavaExpressionStatementNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -JavaExpressionStatementNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -JavaExpressionStatementNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JavaExpressionStatementNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] diff --git a/src/SmaCC_Java/JavaFieldAccessNode.class.st b/src/SmaCC_Java/JavaFieldAccessNode.class.st deleted file mode 100644 index c281bd32d..000000000 --- a/src/SmaCC_Java/JavaFieldAccessNode.class.st +++ /dev/null @@ -1,81 +0,0 @@ -Class { - #name : #JavaFieldAccessNode, - #superclass : #JavaExpressionNode, - #instVars : [ - 'receiver', - 'period', - 'name', - 'superToken', - 'superPeriod' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaFieldAccessNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitFieldAccess: self -] - -{ #category : #generated } -JavaFieldAccessNode >> name [ - ^ name -] - -{ #category : #generated } -JavaFieldAccessNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -JavaFieldAccessNode >> nodeVariables [ - ^ #(#receiver) -] - -{ #category : #generated } -JavaFieldAccessNode >> period [ - ^ period -] - -{ #category : #generated } -JavaFieldAccessNode >> period: aSmaCCToken [ - period := aSmaCCToken -] - -{ #category : #generated } -JavaFieldAccessNode >> receiver [ - ^ receiver -] - -{ #category : #generated } -JavaFieldAccessNode >> receiver: aJavaExpressionNode [ - self receiver notNil - ifTrue: [ self receiver parent: nil ]. - receiver := aJavaExpressionNode. - self receiver notNil - ifTrue: [ self receiver parent: self ] -] - -{ #category : #generated } -JavaFieldAccessNode >> superPeriod [ - ^ superPeriod -] - -{ #category : #generated } -JavaFieldAccessNode >> superPeriod: aSmaCCToken [ - superPeriod := aSmaCCToken -] - -{ #category : #generated } -JavaFieldAccessNode >> superToken [ - ^ superToken -] - -{ #category : #generated } -JavaFieldAccessNode >> superToken: aSmaCCToken [ - superToken := aSmaCCToken -] - -{ #category : #generated } -JavaFieldAccessNode >> tokenVariables [ - ^ #(#period #name #superToken #superPeriod) -] diff --git a/src/SmaCC_Java/JavaFieldDeclarationNode.class.st b/src/SmaCC_Java/JavaFieldDeclarationNode.class.st deleted file mode 100644 index 8668bab62..000000000 --- a/src/SmaCC_Java/JavaFieldDeclarationNode.class.st +++ /dev/null @@ -1,103 +0,0 @@ -Class { - #name : #JavaFieldDeclarationNode, - #superclass : #JavaDeclarationNode, - #instVars : [ - 'modifiers', - 'type', - 'variableDeclarations', - 'commas', - 'semicolon' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaFieldDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitFieldDeclaration: self -] - -{ #category : #generated } -JavaFieldDeclarationNode >> commas [ - ^ commas -] - -{ #category : #generated } -JavaFieldDeclarationNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JavaFieldDeclarationNode >> compositeNodeVariables [ - ^ #(#variableDeclarations #modifiers) -] - -{ #category : #generated } -JavaFieldDeclarationNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -JavaFieldDeclarationNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #'generated-initialize-release' } -JavaFieldDeclarationNode >> initialize [ - super initialize. - variableDeclarations := OrderedCollection new: 2. - commas := OrderedCollection new: 2. - modifiers := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaFieldDeclarationNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -JavaFieldDeclarationNode >> modifiers: anOrderedCollection [ - self setParents: self modifiers to: nil. - modifiers := anOrderedCollection. - self setParents: self modifiers to: self -] - -{ #category : #generated } -JavaFieldDeclarationNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -JavaFieldDeclarationNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JavaFieldDeclarationNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -JavaFieldDeclarationNode >> type [ - ^ type -] - -{ #category : #generated } -JavaFieldDeclarationNode >> type: aJavaTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aJavaTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] - -{ #category : #generated } -JavaFieldDeclarationNode >> variableDeclarations [ - ^ variableDeclarations -] - -{ #category : #generated } -JavaFieldDeclarationNode >> variableDeclarations: anOrderedCollection [ - self setParents: self variableDeclarations to: nil. - variableDeclarations := anOrderedCollection. - self setParents: self variableDeclarations to: self -] diff --git a/src/SmaCC_Java/JavaFinallyClauseNode.class.st b/src/SmaCC_Java/JavaFinallyClauseNode.class.st deleted file mode 100644 index a76d18a7a..000000000 --- a/src/SmaCC_Java/JavaFinallyClauseNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #JavaFinallyClauseNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'finallyToken', - 'block' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaFinallyClauseNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitFinallyClause: self -] - -{ #category : #generated } -JavaFinallyClauseNode >> block [ - ^ block -] - -{ #category : #generated } -JavaFinallyClauseNode >> block: aJavaBlockNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aJavaBlockNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -JavaFinallyClauseNode >> finallyToken [ - ^ finallyToken -] - -{ #category : #generated } -JavaFinallyClauseNode >> finallyToken: aSmaCCToken [ - finallyToken := aSmaCCToken -] - -{ #category : #generated } -JavaFinallyClauseNode >> nodeVariables [ - ^ #(#block) -] - -{ #category : #generated } -JavaFinallyClauseNode >> tokenVariables [ - ^ #(#finallyToken) -] diff --git a/src/SmaCC_Java/JavaFloatLiteralNode.class.st b/src/SmaCC_Java/JavaFloatLiteralNode.class.st deleted file mode 100644 index ce4a82283..000000000 --- a/src/SmaCC_Java/JavaFloatLiteralNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #JavaFloatLiteralNode, - #superclass : #JavaLiteralNode, - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaFloatLiteralNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitFloatLiteral: self -] diff --git a/src/SmaCC_Java/JavaFloatTypeNode.class.st b/src/SmaCC_Java/JavaFloatTypeNode.class.st deleted file mode 100644 index 417e85042..000000000 --- a/src/SmaCC_Java/JavaFloatTypeNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #JavaFloatTypeNode, - #superclass : #JavaPrimitiveTypeNode, - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaFloatTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitFloatType: self -] diff --git a/src/SmaCC_Java/JavaForEachStatementNode.class.st b/src/SmaCC_Java/JavaForEachStatementNode.class.st deleted file mode 100644 index e8cd16505..000000000 --- a/src/SmaCC_Java/JavaForEachStatementNode.class.st +++ /dev/null @@ -1,155 +0,0 @@ -Class { - #name : #JavaForEachStatementNode, - #superclass : #JavaStatementNode, - #instVars : [ - 'forToken', - 'leftParen', - 'modifiers', - 'type', - 'name', - 'colon', - 'expression', - 'rightParen', - 'statement' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaForEachStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitForEachStatement: self -] - -{ #category : #generated } -JavaForEachStatementNode >> colon [ - ^ colon -] - -{ #category : #generated } -JavaForEachStatementNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -JavaForEachStatementNode >> compositeNodeVariables [ - ^ #(#modifiers) -] - -{ #category : #generated } -JavaForEachStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -JavaForEachStatementNode >> expression: aJavaExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJavaExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JavaForEachStatementNode >> forToken [ - ^ forToken -] - -{ #category : #generated } -JavaForEachStatementNode >> forToken: aSmaCCToken [ - forToken := aSmaCCToken -] - -{ #category : #generated } -JavaForEachStatementNode >> ignoredTokenVariables [ - ^ #(#leftParen #rightParen) -] - -{ #category : #'generated-initialize-release' } -JavaForEachStatementNode >> initialize [ - super initialize. - modifiers := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaForEachStatementNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -JavaForEachStatementNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -JavaForEachStatementNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -JavaForEachStatementNode >> modifiers: anOrderedCollection [ - self setParents: self modifiers to: nil. - modifiers := anOrderedCollection. - self setParents: self modifiers to: self -] - -{ #category : #generated } -JavaForEachStatementNode >> name [ - ^ name -] - -{ #category : #generated } -JavaForEachStatementNode >> name: aJavaProgramNode [ - self name notNil - ifTrue: [ self name parent: nil ]. - name := aJavaProgramNode. - self name notNil - ifTrue: [ self name parent: self ] -] - -{ #category : #generated } -JavaForEachStatementNode >> nodeVariables [ - ^ #(#type #name #expression #statement) -] - -{ #category : #generated } -JavaForEachStatementNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -JavaForEachStatementNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -JavaForEachStatementNode >> statement [ - ^ statement -] - -{ #category : #generated } -JavaForEachStatementNode >> statement: aJavaStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aJavaStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -JavaForEachStatementNode >> tokenVariables [ - ^ #(#forToken #colon) -] - -{ #category : #generated } -JavaForEachStatementNode >> type [ - ^ type -] - -{ #category : #generated } -JavaForEachStatementNode >> type: aJavaTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aJavaTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_Java/JavaForStatementNode.class.st b/src/SmaCC_Java/JavaForStatementNode.class.st deleted file mode 100644 index bf7b92cc4..000000000 --- a/src/SmaCC_Java/JavaForStatementNode.class.st +++ /dev/null @@ -1,142 +0,0 @@ -Class { - #name : #JavaForStatementNode, - #superclass : #JavaStatementNode, - #instVars : [ - 'forToken', - 'leftParen', - 'initial', - 'firstSemicolon', - 'test', - 'secondSemicolon', - '_update', - 'rightParen', - 'statement' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaForStatementNode >> _update [ - ^ _update -] - -{ #category : #generated } -JavaForStatementNode >> _update: aJavaStatementExpressionListNode [ - self _update notNil - ifTrue: [ self _update parent: nil ]. - _update := aJavaStatementExpressionListNode. - self _update notNil - ifTrue: [ self _update parent: self ] -] - -{ #category : #generated } -JavaForStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitForStatement: self -] - -{ #category : #generated } -JavaForStatementNode >> firstSemicolon [ - ^ firstSemicolon -] - -{ #category : #generated } -JavaForStatementNode >> firstSemicolon: aSmaCCToken [ - firstSemicolon := aSmaCCToken -] - -{ #category : #generated } -JavaForStatementNode >> forToken [ - ^ forToken -] - -{ #category : #generated } -JavaForStatementNode >> forToken: aSmaCCToken [ - forToken := aSmaCCToken -] - -{ #category : #generated } -JavaForStatementNode >> ignoredTokenVariables [ - ^ #(#leftParen #rightParen) -] - -{ #category : #generated } -JavaForStatementNode >> initial [ - ^ initial -] - -{ #category : #generated } -JavaForStatementNode >> initial: aJavaProgramNode [ - self initial notNil - ifTrue: [ self initial parent: nil ]. - initial := aJavaProgramNode. - self initial notNil - ifTrue: [ self initial parent: self ] -] - -{ #category : #generated } -JavaForStatementNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -JavaForStatementNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -JavaForStatementNode >> nodeVariables [ - ^ #(#statement #_update #test #initial) -] - -{ #category : #generated } -JavaForStatementNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -JavaForStatementNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -JavaForStatementNode >> secondSemicolon [ - ^ secondSemicolon -] - -{ #category : #generated } -JavaForStatementNode >> secondSemicolon: aSmaCCToken [ - secondSemicolon := aSmaCCToken -] - -{ #category : #generated } -JavaForStatementNode >> statement [ - ^ statement -] - -{ #category : #generated } -JavaForStatementNode >> statement: aJavaStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aJavaStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -JavaForStatementNode >> test [ - ^ test -] - -{ #category : #generated } -JavaForStatementNode >> test: aJavaExpressionNode [ - self test notNil - ifTrue: [ self test parent: nil ]. - test := aJavaExpressionNode. - self test notNil - ifTrue: [ self test parent: self ] -] - -{ #category : #generated } -JavaForStatementNode >> tokenVariables [ - ^ #(#forToken #firstSemicolon #secondSemicolon) -] diff --git a/src/SmaCC_Java/JavaIfElseStatementNode.class.st b/src/SmaCC_Java/JavaIfElseStatementNode.class.st deleted file mode 100644 index bcb83d466..000000000 --- a/src/SmaCC_Java/JavaIfElseStatementNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #JavaIfElseStatementNode, - #superclass : #JavaIfStatementNode, - #instVars : [ - 'elseToken', - 'falseStatement' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaIfElseStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitIfElseStatement: self -] - -{ #category : #generated } -JavaIfElseStatementNode >> elseToken [ - ^ elseToken -] - -{ #category : #generated } -JavaIfElseStatementNode >> elseToken: aSmaCCToken [ - elseToken := aSmaCCToken -] - -{ #category : #generated } -JavaIfElseStatementNode >> falseStatement [ - ^ falseStatement -] - -{ #category : #generated } -JavaIfElseStatementNode >> falseStatement: aJavaStatementNode [ - self falseStatement notNil - ifTrue: [ self falseStatement parent: nil ]. - falseStatement := aJavaStatementNode. - self falseStatement notNil - ifTrue: [ self falseStatement parent: self ] -] - -{ #category : #generated } -JavaIfElseStatementNode >> nodeVariables [ - ^ #(#falseStatement #expression #trueStatement) -] - -{ #category : #generated } -JavaIfElseStatementNode >> tokenVariables [ - ^ #(#elseToken #ifToken) -] diff --git a/src/SmaCC_Java/JavaIfStatementNode.class.st b/src/SmaCC_Java/JavaIfStatementNode.class.st deleted file mode 100644 index d8a1e8a88..000000000 --- a/src/SmaCC_Java/JavaIfStatementNode.class.st +++ /dev/null @@ -1,90 +0,0 @@ -Class { - #name : #JavaIfStatementNode, - #superclass : #JavaStatementNode, - #instVars : [ - 'ifToken', - 'leftParen', - 'expression', - 'rightParen', - 'trueStatement' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaIfStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitIfStatement: self -] - -{ #category : #generated } -JavaIfStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -JavaIfStatementNode >> expression: aJavaExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJavaExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JavaIfStatementNode >> ifToken [ - ^ ifToken -] - -{ #category : #generated } -JavaIfStatementNode >> ifToken: aSmaCCToken [ - ifToken := aSmaCCToken -] - -{ #category : #generated } -JavaIfStatementNode >> ignoredTokenVariables [ - ^ #(#leftParen #rightParen) -] - -{ #category : #generated } -JavaIfStatementNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -JavaIfStatementNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -JavaIfStatementNode >> nodeVariables [ - ^ #(#expression #trueStatement) -] - -{ #category : #generated } -JavaIfStatementNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -JavaIfStatementNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -JavaIfStatementNode >> tokenVariables [ - ^ #(#ifToken) -] - -{ #category : #generated } -JavaIfStatementNode >> trueStatement [ - ^ trueStatement -] - -{ #category : #generated } -JavaIfStatementNode >> trueStatement: aJavaStatementNode [ - self trueStatement notNil - ifTrue: [ self trueStatement parent: nil ]. - trueStatement := aJavaStatementNode. - self trueStatement notNil - ifTrue: [ self trueStatement parent: self ] -] diff --git a/src/SmaCC_Java/JavaInitializedVariableDeclarationNode.class.st b/src/SmaCC_Java/JavaInitializedVariableDeclarationNode.class.st deleted file mode 100644 index 570416c77..000000000 --- a/src/SmaCC_Java/JavaInitializedVariableDeclarationNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #JavaInitializedVariableDeclarationNode, - #superclass : #JavaVariableDeclarationNode, - #instVars : [ - 'equals', - 'initializer' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaInitializedVariableDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitInitializedVariableDeclaration: self -] - -{ #category : #generated } -JavaInitializedVariableDeclarationNode >> equals [ - ^ equals -] - -{ #category : #generated } -JavaInitializedVariableDeclarationNode >> equals: aSmaCCToken [ - equals := aSmaCCToken -] - -{ #category : #generated } -JavaInitializedVariableDeclarationNode >> initializer [ - ^ initializer -] - -{ #category : #generated } -JavaInitializedVariableDeclarationNode >> initializer: aJavaProgramNode [ - self initializer notNil - ifTrue: [ self initializer parent: nil ]. - initializer := aJavaProgramNode. - self initializer notNil - ifTrue: [ self initializer parent: self ] -] - -{ #category : #generated } -JavaInitializedVariableDeclarationNode >> nodeVariables [ - ^ #(#initializer #variable) -] - -{ #category : #generated } -JavaInitializedVariableDeclarationNode >> tokenVariables [ - ^ #(#equals) -] diff --git a/src/SmaCC_Java/JavaInitializerNode.class.st b/src/SmaCC_Java/JavaInitializerNode.class.st deleted file mode 100644 index 7e8afc826..000000000 --- a/src/SmaCC_Java/JavaInitializerNode.class.st +++ /dev/null @@ -1,32 +0,0 @@ -Class { - #name : #JavaInitializerNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'block' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaInitializerNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitInitializer: self -] - -{ #category : #generated } -JavaInitializerNode >> block [ - ^ block -] - -{ #category : #generated } -JavaInitializerNode >> block: aJavaBlockNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aJavaBlockNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -JavaInitializerNode >> nodeVariables [ - ^ #(#block) -] diff --git a/src/SmaCC_Java/JavaIntTypeNode.class.st b/src/SmaCC_Java/JavaIntTypeNode.class.st deleted file mode 100644 index a2066d63d..000000000 --- a/src/SmaCC_Java/JavaIntTypeNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #JavaIntTypeNode, - #superclass : #JavaPrimitiveTypeNode, - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaIntTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitIntType: self -] diff --git a/src/SmaCC_Java/JavaIntegerLiteralNode.class.st b/src/SmaCC_Java/JavaIntegerLiteralNode.class.st deleted file mode 100644 index 4888c4262..000000000 --- a/src/SmaCC_Java/JavaIntegerLiteralNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #JavaIntegerLiteralNode, - #superclass : #JavaLiteralNode, - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaIntegerLiteralNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitIntegerLiteral: self -] diff --git a/src/SmaCC_Java/JavaInterfaceDeclarationNode.class.st b/src/SmaCC_Java/JavaInterfaceDeclarationNode.class.st deleted file mode 100644 index 5021bd574..000000000 --- a/src/SmaCC_Java/JavaInterfaceDeclarationNode.class.st +++ /dev/null @@ -1,166 +0,0 @@ -Class { - #name : #JavaInterfaceDeclarationNode, - #superclass : #JavaDeclarationNode, - #instVars : [ - 'modifiers', - 'interfaceToken', - 'name', - 'typeParameters', - 'extendsToken', - 'interfaceTypes', - 'commas', - 'leftBrace', - 'declarations', - 'rightBrace' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaInterfaceDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitInterfaceDeclaration: self -] - -{ #category : #generated } -JavaInterfaceDeclarationNode >> commas [ - ^ commas -] - -{ #category : #generated } -JavaInterfaceDeclarationNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JavaInterfaceDeclarationNode >> compositeNodeVariables [ - ^ #(#declarations #interfaceTypes #modifiers) -] - -{ #category : #generated } -JavaInterfaceDeclarationNode >> declarations [ - ^ declarations -] - -{ #category : #generated } -JavaInterfaceDeclarationNode >> declarations: anOrderedCollection [ - self setParents: self declarations to: nil. - declarations := anOrderedCollection. - self setParents: self declarations to: self -] - -{ #category : #generated } -JavaInterfaceDeclarationNode >> extendsToken [ - ^ extendsToken -] - -{ #category : #generated } -JavaInterfaceDeclarationNode >> extendsToken: aSmaCCToken [ - extendsToken := aSmaCCToken -] - -{ #category : #generated } -JavaInterfaceDeclarationNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -JavaInterfaceDeclarationNode >> ignoredTokenVariables [ - ^ #(#leftBrace #rightBrace) -] - -{ #category : #'generated-initialize-release' } -JavaInterfaceDeclarationNode >> initialize [ - super initialize. - declarations := OrderedCollection new: 2. - interfaceTypes := OrderedCollection new: 2. - commas := OrderedCollection new: 2. - modifiers := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaInterfaceDeclarationNode >> interfaceToken [ - ^ interfaceToken -] - -{ #category : #generated } -JavaInterfaceDeclarationNode >> interfaceToken: aSmaCCToken [ - interfaceToken := aSmaCCToken -] - -{ #category : #generated } -JavaInterfaceDeclarationNode >> interfaceTypes [ - ^ interfaceTypes -] - -{ #category : #generated } -JavaInterfaceDeclarationNode >> interfaceTypes: anOrderedCollection [ - self setParents: self interfaceTypes to: nil. - interfaceTypes := anOrderedCollection. - self setParents: self interfaceTypes to: self -] - -{ #category : #generated } -JavaInterfaceDeclarationNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -JavaInterfaceDeclarationNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -JavaInterfaceDeclarationNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -JavaInterfaceDeclarationNode >> modifiers: anOrderedCollection [ - self setParents: self modifiers to: nil. - modifiers := anOrderedCollection. - self setParents: self modifiers to: self -] - -{ #category : #generated } -JavaInterfaceDeclarationNode >> name [ - ^ name -] - -{ #category : #generated } -JavaInterfaceDeclarationNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -JavaInterfaceDeclarationNode >> nodeVariables [ - ^ #(#typeParameters) -] - -{ #category : #generated } -JavaInterfaceDeclarationNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -JavaInterfaceDeclarationNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] - -{ #category : #generated } -JavaInterfaceDeclarationNode >> tokenVariables [ - ^ #(#interfaceToken #name #extendsToken) -] - -{ #category : #generated } -JavaInterfaceDeclarationNode >> typeParameters [ - ^ typeParameters -] - -{ #category : #generated } -JavaInterfaceDeclarationNode >> typeParameters: aJavaTypeParametersNode [ - self typeParameters notNil - ifTrue: [ self typeParameters parent: nil ]. - typeParameters := aJavaTypeParametersNode. - self typeParameters notNil - ifTrue: [ self typeParameters parent: self ] -] diff --git a/src/SmaCC_Java/JavaLabeledStatementNode.class.st b/src/SmaCC_Java/JavaLabeledStatementNode.class.st deleted file mode 100644 index 33299e28f..000000000 --- a/src/SmaCC_Java/JavaLabeledStatementNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #JavaLabeledStatementNode, - #superclass : #JavaStatementNode, - #instVars : [ - 'identifier', - 'colon', - 'statement' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaLabeledStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitLabeledStatement: self -] - -{ #category : #generated } -JavaLabeledStatementNode >> colon [ - ^ colon -] - -{ #category : #generated } -JavaLabeledStatementNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -JavaLabeledStatementNode >> identifier [ - ^ identifier -] - -{ #category : #generated } -JavaLabeledStatementNode >> identifier: aSmaCCToken [ - identifier := aSmaCCToken -] - -{ #category : #generated } -JavaLabeledStatementNode >> nodeVariables [ - ^ #(#statement) -] - -{ #category : #generated } -JavaLabeledStatementNode >> statement [ - ^ statement -] - -{ #category : #generated } -JavaLabeledStatementNode >> statement: aJavaStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aJavaStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -JavaLabeledStatementNode >> tokenVariables [ - ^ #(#identifier #colon) -] diff --git a/src/SmaCC_Java/JavaLambdaExpressionNode.class.st b/src/SmaCC_Java/JavaLambdaExpressionNode.class.st deleted file mode 100644 index c8f4ced6f..000000000 --- a/src/SmaCC_Java/JavaLambdaExpressionNode.class.st +++ /dev/null @@ -1,116 +0,0 @@ -Class { - #name : #JavaLambdaExpressionNode, - #superclass : #JavaExpressionNode, - #instVars : [ - 'leftParen', - 'parameters', - 'commas', - 'rightParen', - 'arrowToken', - 'value' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaLambdaExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitLambdaExpression: self -] - -{ #category : #generated } -JavaLambdaExpressionNode >> arrowToken [ - ^ arrowToken -] - -{ #category : #generated } -JavaLambdaExpressionNode >> arrowToken: aSmaCCToken [ - arrowToken := aSmaCCToken -] - -{ #category : #generated } -JavaLambdaExpressionNode >> commas [ - ^ commas -] - -{ #category : #generated } -JavaLambdaExpressionNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JavaLambdaExpressionNode >> compositeNodeVariables [ - ^ #(#parameters) -] - -{ #category : #generated } -JavaLambdaExpressionNode >> ignoredCompositeTokenVariables [ - ^ #(#commas #_leftParens #_rightParens) -] - -{ #category : #generated } -JavaLambdaExpressionNode >> ignoredTokenVariables [ - ^ #(#leftParen #rightParen) -] - -{ #category : #'generated-initialize-release' } -JavaLambdaExpressionNode >> initialize [ - super initialize. - parameters := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaLambdaExpressionNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -JavaLambdaExpressionNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -JavaLambdaExpressionNode >> nodeVariables [ - ^ #(#value) -] - -{ #category : #generated } -JavaLambdaExpressionNode >> parameters [ - ^ parameters -] - -{ #category : #generated } -JavaLambdaExpressionNode >> parameters: anOrderedCollection [ - self setParents: self parameters to: nil. - parameters := anOrderedCollection. - self setParents: self parameters to: self -] - -{ #category : #generated } -JavaLambdaExpressionNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -JavaLambdaExpressionNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -JavaLambdaExpressionNode >> tokenVariables [ - ^ #(#arrowToken) -] - -{ #category : #generated } -JavaLambdaExpressionNode >> value [ - ^ value -] - -{ #category : #generated } -JavaLambdaExpressionNode >> value: aJavaProgramNode [ - self value notNil - ifTrue: [ self value parent: nil ]. - value := aJavaProgramNode. - self value notNil - ifTrue: [ self value parent: self ] -] diff --git a/src/SmaCC_Java/JavaLiteralNode.class.st b/src/SmaCC_Java/JavaLiteralNode.class.st deleted file mode 100644 index dc16e8094..000000000 --- a/src/SmaCC_Java/JavaLiteralNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JavaLiteralNode, - #superclass : #JavaExpressionNode, - #instVars : [ - 'token' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaLiteralNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitLiteral: self -] - -{ #category : #generated } -JavaLiteralNode >> token [ - ^ token -] - -{ #category : #generated } -JavaLiteralNode >> token: aSmaCCToken [ - token := aSmaCCToken -] - -{ #category : #generated } -JavaLiteralNode >> tokenVariables [ - ^ #(#token) -] diff --git a/src/SmaCC_Java/JavaLocalVariableDeclarationNode.class.st b/src/SmaCC_Java/JavaLocalVariableDeclarationNode.class.st deleted file mode 100644 index f8b41aeec..000000000 --- a/src/SmaCC_Java/JavaLocalVariableDeclarationNode.class.st +++ /dev/null @@ -1,87 +0,0 @@ -Class { - #name : #JavaLocalVariableDeclarationNode, - #superclass : #JavaDeclarationNode, - #instVars : [ - 'modifiers', - 'type', - 'variableDeclarations', - 'commas' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaLocalVariableDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitLocalVariableDeclaration: self -] - -{ #category : #generated } -JavaLocalVariableDeclarationNode >> commas [ - ^ commas -] - -{ #category : #generated } -JavaLocalVariableDeclarationNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JavaLocalVariableDeclarationNode >> compositeNodeVariables [ - ^ #(#modifiers #variableDeclarations) -] - -{ #category : #generated } -JavaLocalVariableDeclarationNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #'generated-initialize-release' } -JavaLocalVariableDeclarationNode >> initialize [ - super initialize. - modifiers := OrderedCollection new: 2. - variableDeclarations := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaLocalVariableDeclarationNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -JavaLocalVariableDeclarationNode >> modifiers: anOrderedCollection [ - self setParents: self modifiers to: nil. - modifiers := anOrderedCollection. - self setParents: self modifiers to: self -] - -{ #category : #generated } -JavaLocalVariableDeclarationNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -JavaLocalVariableDeclarationNode >> type [ - ^ type -] - -{ #category : #generated } -JavaLocalVariableDeclarationNode >> type: aJavaTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aJavaTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] - -{ #category : #generated } -JavaLocalVariableDeclarationNode >> variableDeclarations [ - ^ variableDeclarations -] - -{ #category : #generated } -JavaLocalVariableDeclarationNode >> variableDeclarations: anOrderedCollection [ - self setParents: self variableDeclarations to: nil. - variableDeclarations := anOrderedCollection. - self setParents: self variableDeclarations to: self -] diff --git a/src/SmaCC_Java/JavaLocalVariableDeclarationStatementNode.class.st b/src/SmaCC_Java/JavaLocalVariableDeclarationStatementNode.class.st deleted file mode 100644 index 0eb1147e3..000000000 --- a/src/SmaCC_Java/JavaLocalVariableDeclarationStatementNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #JavaLocalVariableDeclarationStatementNode, - #superclass : #JavaStatementNode, - #instVars : [ - 'declaration', - 'semicolon' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaLocalVariableDeclarationStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitLocalVariableDeclarationStatement: self -] - -{ #category : #generated } -JavaLocalVariableDeclarationStatementNode >> declaration [ - ^ declaration -] - -{ #category : #generated } -JavaLocalVariableDeclarationStatementNode >> declaration: aJavaLocalVariableDeclarationNode [ - self declaration notNil - ifTrue: [ self declaration parent: nil ]. - declaration := aJavaLocalVariableDeclarationNode. - self declaration notNil - ifTrue: [ self declaration parent: self ] -] - -{ #category : #generated } -JavaLocalVariableDeclarationStatementNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -JavaLocalVariableDeclarationStatementNode >> nodeVariables [ - ^ #(#declaration) -] - -{ #category : #generated } -JavaLocalVariableDeclarationStatementNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JavaLocalVariableDeclarationStatementNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] diff --git a/src/SmaCC_Java/JavaLongTypeNode.class.st b/src/SmaCC_Java/JavaLongTypeNode.class.st deleted file mode 100644 index 7a62be9ef..000000000 --- a/src/SmaCC_Java/JavaLongTypeNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #JavaLongTypeNode, - #superclass : #JavaPrimitiveTypeNode, - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaLongTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitLongType: self -] diff --git a/src/SmaCC_Java/JavaMethodDeclarationNode.class.st b/src/SmaCC_Java/JavaMethodDeclarationNode.class.st deleted file mode 100644 index 75119b390..000000000 --- a/src/SmaCC_Java/JavaMethodDeclarationNode.class.st +++ /dev/null @@ -1,116 +0,0 @@ -Class { - #name : #JavaMethodDeclarationNode, - #superclass : #JavaDeclarationNode, - #instVars : [ - 'modifiers', - 'typeParameters', - 'type', - 'declarator', - 'throws', - 'body' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaMethodDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitMethodDeclaration: self -] - -{ #category : #generated } -JavaMethodDeclarationNode >> body [ - ^ body -] - -{ #category : #generated } -JavaMethodDeclarationNode >> body: aJavaProgramNode [ - self body notNil - ifTrue: [ self body parent: nil ]. - body := aJavaProgramNode. - self body notNil - ifTrue: [ self body parent: self ] -] - -{ #category : #generated } -JavaMethodDeclarationNode >> compositeNodeVariables [ - ^ #(#modifiers) -] - -{ #category : #generated } -JavaMethodDeclarationNode >> declarator [ - ^ declarator -] - -{ #category : #generated } -JavaMethodDeclarationNode >> declarator: aJavaProgramNode [ - self declarator notNil - ifTrue: [ self declarator parent: nil ]. - declarator := aJavaProgramNode. - self declarator notNil - ifTrue: [ self declarator parent: self ] -] - -{ #category : #'generated-initialize-release' } -JavaMethodDeclarationNode >> initialize [ - super initialize. - modifiers := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaMethodDeclarationNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -JavaMethodDeclarationNode >> modifiers: anOrderedCollection [ - self setParents: self modifiers to: nil. - modifiers := anOrderedCollection. - self setParents: self modifiers to: self -] - -{ #category : #generated } -JavaMethodDeclarationNode >> nodeVariables [ - ^ #(#typeParameters #type #declarator #throws #body) -] - -{ #category : #generated } -JavaMethodDeclarationNode >> throws [ - ^ throws -] - -{ #category : #generated } -JavaMethodDeclarationNode >> throws: aJavaThrowsNode [ - self throws notNil - ifTrue: [ self throws parent: nil ]. - throws := aJavaThrowsNode. - self throws notNil - ifTrue: [ self throws parent: self ] -] - -{ #category : #generated } -JavaMethodDeclarationNode >> type [ - ^ type -] - -{ #category : #generated } -JavaMethodDeclarationNode >> type: aJavaProgramNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aJavaProgramNode. - self type notNil - ifTrue: [ self type parent: self ] -] - -{ #category : #generated } -JavaMethodDeclarationNode >> typeParameters [ - ^ typeParameters -] - -{ #category : #generated } -JavaMethodDeclarationNode >> typeParameters: aJavaTypeParametersNode [ - self typeParameters notNil - ifTrue: [ self typeParameters parent: nil ]. - typeParameters := aJavaTypeParametersNode. - self typeParameters notNil - ifTrue: [ self typeParameters parent: self ] -] diff --git a/src/SmaCC_Java/JavaMethodDeclaratorNode.class.st b/src/SmaCC_Java/JavaMethodDeclaratorNode.class.st deleted file mode 100644 index 900f68293..000000000 --- a/src/SmaCC_Java/JavaMethodDeclaratorNode.class.st +++ /dev/null @@ -1,96 +0,0 @@ -Class { - #name : #JavaMethodDeclaratorNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'name', - 'leftParen', - 'parameters', - 'commas', - 'rightParen' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaMethodDeclaratorNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitMethodDeclarator: self -] - -{ #category : #generated } -JavaMethodDeclaratorNode >> commas [ - ^ commas -] - -{ #category : #generated } -JavaMethodDeclaratorNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JavaMethodDeclaratorNode >> compositeNodeVariables [ - ^ #(#parameters) -] - -{ #category : #generated } -JavaMethodDeclaratorNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -JavaMethodDeclaratorNode >> ignoredTokenVariables [ - ^ #(#leftParen #rightParen) -] - -{ #category : #'generated-initialize-release' } -JavaMethodDeclaratorNode >> initialize [ - super initialize. - parameters := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaMethodDeclaratorNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -JavaMethodDeclaratorNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -JavaMethodDeclaratorNode >> name [ - ^ name -] - -{ #category : #generated } -JavaMethodDeclaratorNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -JavaMethodDeclaratorNode >> parameters [ - ^ parameters -] - -{ #category : #generated } -JavaMethodDeclaratorNode >> parameters: anOrderedCollection [ - self setParents: self parameters to: nil. - parameters := anOrderedCollection. - self setParents: self parameters to: self -] - -{ #category : #generated } -JavaMethodDeclaratorNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -JavaMethodDeclaratorNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -JavaMethodDeclaratorNode >> tokenVariables [ - ^ #(#name) -] diff --git a/src/SmaCC_Java/JavaMethodInvocationNode.class.st b/src/SmaCC_Java/JavaMethodInvocationNode.class.st deleted file mode 100644 index 8cb8546d9..000000000 --- a/src/SmaCC_Java/JavaMethodInvocationNode.class.st +++ /dev/null @@ -1,185 +0,0 @@ -Class { - #name : #JavaMethodInvocationNode, - #superclass : #JavaExpressionNode, - #instVars : [ - 'lt', - 'arguments', - 'commas', - 'gt', - 'name', - 'leftParen', - 'expressions', - 'rightParen', - 'receiver', - 'period', - 'superToken', - 'superPeriod' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaMethodInvocationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitMethodInvocation: self -] - -{ #category : #generated } -JavaMethodInvocationNode >> arguments [ - ^ arguments -] - -{ #category : #generated } -JavaMethodInvocationNode >> arguments: anOrderedCollection [ - self setParents: self arguments to: nil. - arguments := anOrderedCollection. - self setParents: self arguments to: self -] - -{ #category : #generated } -JavaMethodInvocationNode >> commas [ - ^ commas -] - -{ #category : #generated } -JavaMethodInvocationNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JavaMethodInvocationNode >> compositeNodeVariables [ - ^ #(#arguments #expressions) -] - -{ #category : #generated } -JavaMethodInvocationNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -JavaMethodInvocationNode >> expressions: anOrderedCollection [ - self setParents: self expressions to: nil. - expressions := anOrderedCollection. - self setParents: self expressions to: self -] - -{ #category : #generated } -JavaMethodInvocationNode >> gt [ - ^ gt -] - -{ #category : #generated } -JavaMethodInvocationNode >> gt: aSmaCCToken [ - gt := aSmaCCToken -] - -{ #category : #generated } -JavaMethodInvocationNode >> ignoredCompositeTokenVariables [ - ^ #(#commas #_leftParens #_rightParens) -] - -{ #category : #generated } -JavaMethodInvocationNode >> ignoredTokenVariables [ - ^ #(#lt #gt #leftParen #rightParen) -] - -{ #category : #'generated-initialize-release' } -JavaMethodInvocationNode >> initialize [ - super initialize. - arguments := OrderedCollection new: 2. - commas := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaMethodInvocationNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -JavaMethodInvocationNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -JavaMethodInvocationNode >> lt [ - ^ lt -] - -{ #category : #generated } -JavaMethodInvocationNode >> lt: aSmaCCToken [ - lt := aSmaCCToken -] - -{ #category : #generated } -JavaMethodInvocationNode >> name [ - ^ name -] - -{ #category : #generated } -JavaMethodInvocationNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -JavaMethodInvocationNode >> nodeVariables [ - ^ #(#receiver) -] - -{ #category : #generated } -JavaMethodInvocationNode >> period [ - ^ period -] - -{ #category : #generated } -JavaMethodInvocationNode >> period: aSmaCCToken [ - period := aSmaCCToken -] - -{ #category : #generated } -JavaMethodInvocationNode >> receiver [ - ^ receiver -] - -{ #category : #generated } -JavaMethodInvocationNode >> receiver: aJavaExpressionNode [ - self receiver notNil - ifTrue: [ self receiver parent: nil ]. - receiver := aJavaExpressionNode. - self receiver notNil - ifTrue: [ self receiver parent: self ] -] - -{ #category : #generated } -JavaMethodInvocationNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -JavaMethodInvocationNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -JavaMethodInvocationNode >> superPeriod [ - ^ superPeriod -] - -{ #category : #generated } -JavaMethodInvocationNode >> superPeriod: aSmaCCToken [ - superPeriod := aSmaCCToken -] - -{ #category : #generated } -JavaMethodInvocationNode >> superToken [ - ^ superToken -] - -{ #category : #generated } -JavaMethodInvocationNode >> superToken: aSmaCCToken [ - superToken := aSmaCCToken -] - -{ #category : #generated } -JavaMethodInvocationNode >> tokenVariables [ - ^ #(#name #period #superToken #superPeriod) -] diff --git a/src/SmaCC_Java/JavaMethodReferenceNode.class.st b/src/SmaCC_Java/JavaMethodReferenceNode.class.st deleted file mode 100644 index 894484d8e..000000000 --- a/src/SmaCC_Java/JavaMethodReferenceNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #JavaMethodReferenceNode, - #superclass : #JavaExpressionNode, - #instVars : [ - 'receiver', - 'colonColonToken', - 'name' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaMethodReferenceNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitMethodReference: self -] - -{ #category : #generated } -JavaMethodReferenceNode >> colonColonToken [ - ^ colonColonToken -] - -{ #category : #generated } -JavaMethodReferenceNode >> colonColonToken: aSmaCCToken [ - colonColonToken := aSmaCCToken -] - -{ #category : #generated } -JavaMethodReferenceNode >> name [ - ^ name -] - -{ #category : #generated } -JavaMethodReferenceNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -JavaMethodReferenceNode >> nodeVariables [ - ^ #(#receiver) -] - -{ #category : #generated } -JavaMethodReferenceNode >> receiver [ - ^ receiver -] - -{ #category : #generated } -JavaMethodReferenceNode >> receiver: aJavaProgramNode [ - self receiver notNil - ifTrue: [ self receiver parent: nil ]. - receiver := aJavaProgramNode. - self receiver notNil - ifTrue: [ self receiver parent: self ] -] - -{ #category : #generated } -JavaMethodReferenceNode >> tokenVariables [ - ^ #(#colonColonToken #name) -] diff --git a/src/SmaCC_Java/JavaModifierNode.class.st b/src/SmaCC_Java/JavaModifierNode.class.st deleted file mode 100644 index c48c8c5d7..000000000 --- a/src/SmaCC_Java/JavaModifierNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JavaModifierNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'token' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaModifierNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitModifier: self -] - -{ #category : #generated } -JavaModifierNode >> token [ - ^ token -] - -{ #category : #generated } -JavaModifierNode >> token: aSmaCCToken [ - token := aSmaCCToken -] - -{ #category : #generated } -JavaModifierNode >> tokenVariables [ - ^ #(#token) -] diff --git a/src/SmaCC_Java/JavaNameNode.class.st b/src/SmaCC_Java/JavaNameNode.class.st deleted file mode 100644 index e1901348c..000000000 --- a/src/SmaCC_Java/JavaNameNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JavaNameNode, - #superclass : #JavaExpressionNode, - #instVars : [ - 'name' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaNameNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitName: self -] - -{ #category : #generated } -JavaNameNode >> name [ - ^ name -] - -{ #category : #generated } -JavaNameNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -JavaNameNode >> tokenVariables [ - ^ #(#name) -] diff --git a/src/SmaCC_Java/JavaNewArrayNode.class.st b/src/SmaCC_Java/JavaNewArrayNode.class.st deleted file mode 100644 index c2d78c75b..000000000 --- a/src/SmaCC_Java/JavaNewArrayNode.class.st +++ /dev/null @@ -1,116 +0,0 @@ -Class { - #name : #JavaNewArrayNode, - #superclass : #JavaExpressionNode, - #instVars : [ - 'newToken', - 'type', - 'dimExpressions', - 'leftBrackets', - 'rightBrackets', - 'initializer' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaNewArrayNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNewArray: self -] - -{ #category : #generated } -JavaNewArrayNode >> compositeNodeVariables [ - ^ #(#dimExpressions) -] - -{ #category : #generated } -JavaNewArrayNode >> dimExpressions [ - ^ dimExpressions -] - -{ #category : #generated } -JavaNewArrayNode >> dimExpressions: anOrderedCollection [ - self setParents: self dimExpressions to: nil. - dimExpressions := anOrderedCollection. - self setParents: self dimExpressions to: self -] - -{ #category : #generated } -JavaNewArrayNode >> ignoredCompositeTokenVariables [ - ^ #(#leftBrackets #rightBrackets #_leftParens #_rightParens) -] - -{ #category : #'generated-initialize-release' } -JavaNewArrayNode >> initialize [ - super initialize. - dimExpressions := OrderedCollection new: 2. - leftBrackets := OrderedCollection new: 2. - rightBrackets := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaNewArrayNode >> initializer [ - ^ initializer -] - -{ #category : #generated } -JavaNewArrayNode >> initializer: aJavaArrayInitializerNode [ - self initializer notNil - ifTrue: [ self initializer parent: nil ]. - initializer := aJavaArrayInitializerNode. - self initializer notNil - ifTrue: [ self initializer parent: self ] -] - -{ #category : #generated } -JavaNewArrayNode >> leftBrackets [ - ^ leftBrackets -] - -{ #category : #generated } -JavaNewArrayNode >> leftBrackets: anOrderedCollection [ - leftBrackets := anOrderedCollection -] - -{ #category : #generated } -JavaNewArrayNode >> newToken [ - ^ newToken -] - -{ #category : #generated } -JavaNewArrayNode >> newToken: aSmaCCToken [ - newToken := aSmaCCToken -] - -{ #category : #generated } -JavaNewArrayNode >> nodeVariables [ - ^ #(#type #initializer) -] - -{ #category : #generated } -JavaNewArrayNode >> rightBrackets [ - ^ rightBrackets -] - -{ #category : #generated } -JavaNewArrayNode >> rightBrackets: anOrderedCollection [ - rightBrackets := anOrderedCollection -] - -{ #category : #generated } -JavaNewArrayNode >> tokenVariables [ - ^ #(#newToken) -] - -{ #category : #generated } -JavaNewArrayNode >> type [ - ^ type -] - -{ #category : #generated } -JavaNewArrayNode >> type: aJavaTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aJavaTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_Java/JavaNewClassNode.class.st b/src/SmaCC_Java/JavaNewClassNode.class.st deleted file mode 100644 index 0e94e74ef..000000000 --- a/src/SmaCC_Java/JavaNewClassNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #JavaNewClassNode, - #superclass : #JavaNewNode, - #instVars : [ - 'leftBrace', - 'declarations', - 'rightBrace' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaNewClassNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNewClass: self -] - -{ #category : #generated } -JavaNewClassNode >> compositeNodeVariables [ - ^ #(#declarations #expressions #arguments) -] - -{ #category : #generated } -JavaNewClassNode >> declarations [ - ^ declarations -] - -{ #category : #generated } -JavaNewClassNode >> declarations: anOrderedCollection [ - self setParents: self declarations to: nil. - declarations := anOrderedCollection. - self setParents: self declarations to: self -] - -{ #category : #generated } -JavaNewClassNode >> ignoredTokenVariables [ - ^ #(#leftBrace #rightBrace #leftParen #rightParen #lt #gt) -] - -{ #category : #'generated-initialize-release' } -JavaNewClassNode >> initialize [ - super initialize. - declarations := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaNewClassNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -JavaNewClassNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -JavaNewClassNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -JavaNewClassNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] diff --git a/src/SmaCC_Java/JavaNewNode.class.st b/src/SmaCC_Java/JavaNewNode.class.st deleted file mode 100644 index cc3d11abd..000000000 --- a/src/SmaCC_Java/JavaNewNode.class.st +++ /dev/null @@ -1,211 +0,0 @@ -Class { - #name : #JavaNewNode, - #superclass : #JavaExpressionNode, - #instVars : [ - 'newToken', - 'type', - 'leftParen', - 'expressions', - 'commas', - 'rightParen', - 'primary', - 'period', - 'lt', - 'arguments', - 'gt', - 'name', - 'typeArgLeft', - 'typeArgRight' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaNewNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNew: self -] - -{ #category : #generated } -JavaNewNode >> arguments [ - ^ arguments -] - -{ #category : #generated } -JavaNewNode >> arguments: anOrderedCollection [ - self setParents: self arguments to: nil. - arguments := anOrderedCollection. - self setParents: self arguments to: self -] - -{ #category : #generated } -JavaNewNode >> commas [ - ^ commas -] - -{ #category : #generated } -JavaNewNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JavaNewNode >> compositeNodeVariables [ - ^ #(#expressions #arguments) -] - -{ #category : #generated } -JavaNewNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -JavaNewNode >> expressions: anOrderedCollection [ - self setParents: self expressions to: nil. - expressions := anOrderedCollection. - self setParents: self expressions to: self -] - -{ #category : #generated } -JavaNewNode >> gt [ - ^ gt -] - -{ #category : #generated } -JavaNewNode >> gt: aSmaCCToken [ - gt := aSmaCCToken -] - -{ #category : #generated } -JavaNewNode >> ignoredCompositeTokenVariables [ - ^ #(#commas #_leftParens #_rightParens) -] - -{ #category : #generated } -JavaNewNode >> ignoredTokenVariables [ - ^ #(#leftParen #rightParen #lt #gt) -] - -{ #category : #'generated-initialize-release' } -JavaNewNode >> initialize [ - super initialize. - expressions := OrderedCollection new: 2. - commas := OrderedCollection new: 2. - arguments := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaNewNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -JavaNewNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -JavaNewNode >> lt [ - ^ lt -] - -{ #category : #generated } -JavaNewNode >> lt: aSmaCCToken [ - lt := aSmaCCToken -] - -{ #category : #generated } -JavaNewNode >> name [ - ^ name -] - -{ #category : #generated } -JavaNewNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -JavaNewNode >> newToken [ - ^ newToken -] - -{ #category : #generated } -JavaNewNode >> newToken: aSmaCCToken [ - newToken := aSmaCCToken -] - -{ #category : #generated } -JavaNewNode >> nodeVariables [ - ^ #(#type #primary) -] - -{ #category : #generated } -JavaNewNode >> period [ - ^ period -] - -{ #category : #generated } -JavaNewNode >> period: aSmaCCToken [ - period := aSmaCCToken -] - -{ #category : #generated } -JavaNewNode >> primary [ - ^ primary -] - -{ #category : #generated } -JavaNewNode >> primary: aJavaExpressionNode [ - self primary notNil - ifTrue: [ self primary parent: nil ]. - primary := aJavaExpressionNode. - self primary notNil - ifTrue: [ self primary parent: self ] -] - -{ #category : #generated } -JavaNewNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -JavaNewNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -JavaNewNode >> tokenVariables [ - ^ #(#newToken #period #name #typeArgLeft #typeArgRight) -] - -{ #category : #generated } -JavaNewNode >> type [ - ^ type -] - -{ #category : #generated } -JavaNewNode >> type: aJavaClassTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aJavaClassTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] - -{ #category : #generated } -JavaNewNode >> typeArgLeft [ - ^ typeArgLeft -] - -{ #category : #generated } -JavaNewNode >> typeArgLeft: aSmaCCToken [ - typeArgLeft := aSmaCCToken -] - -{ #category : #generated } -JavaNewNode >> typeArgRight [ - ^ typeArgRight -] - -{ #category : #generated } -JavaNewNode >> typeArgRight: aSmaCCToken [ - typeArgRight := aSmaCCToken -] diff --git a/src/SmaCC_Java/JavaNullNode.class.st b/src/SmaCC_Java/JavaNullNode.class.st deleted file mode 100644 index 3881f50a4..000000000 --- a/src/SmaCC_Java/JavaNullNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #JavaNullNode, - #superclass : #JavaLiteralNode, - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaNullNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNull: self -] diff --git a/src/SmaCC_Java/JavaOuterThisNode.class.st b/src/SmaCC_Java/JavaOuterThisNode.class.st deleted file mode 100644 index d78154725..000000000 --- a/src/SmaCC_Java/JavaOuterThisNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #JavaOuterThisNode, - #superclass : #JavaExpressionNode, - #instVars : [ - 'name', - 'period', - 'thisToken' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaOuterThisNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitOuterThis: self -] - -{ #category : #generated } -JavaOuterThisNode >> name [ - ^ name -] - -{ #category : #generated } -JavaOuterThisNode >> name: aJavaNameNode [ - self name notNil - ifTrue: [ self name parent: nil ]. - name := aJavaNameNode. - self name notNil - ifTrue: [ self name parent: self ] -] - -{ #category : #generated } -JavaOuterThisNode >> nodeVariables [ - ^ #(#name) -] - -{ #category : #generated } -JavaOuterThisNode >> period [ - ^ period -] - -{ #category : #generated } -JavaOuterThisNode >> period: aSmaCCToken [ - period := aSmaCCToken -] - -{ #category : #generated } -JavaOuterThisNode >> thisToken [ - ^ thisToken -] - -{ #category : #generated } -JavaOuterThisNode >> thisToken: aSmaCCToken [ - thisToken := aSmaCCToken -] - -{ #category : #generated } -JavaOuterThisNode >> tokenVariables [ - ^ #(#period #thisToken) -] diff --git a/src/SmaCC_Java/JavaPackageDeclarationNode.class.st b/src/SmaCC_Java/JavaPackageDeclarationNode.class.st deleted file mode 100644 index e3bba9718..000000000 --- a/src/SmaCC_Java/JavaPackageDeclarationNode.class.st +++ /dev/null @@ -1,88 +0,0 @@ -Class { - #name : #JavaPackageDeclarationNode, - #superclass : #JavaDeclarationNode, - #instVars : [ - 'annotations', - 'packageToken', - 'name', - 'semicolon' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaPackageDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPackageDeclaration: self -] - -{ #category : #generated } -JavaPackageDeclarationNode >> annotations [ - ^ annotations -] - -{ #category : #generated } -JavaPackageDeclarationNode >> annotations: anOrderedCollection [ - self setParents: self annotations to: nil. - annotations := anOrderedCollection. - self setParents: self annotations to: self -] - -{ #category : #generated } -JavaPackageDeclarationNode >> compositeNodeVariables [ - ^ #(#annotations) -] - -{ #category : #generated } -JavaPackageDeclarationNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #'generated-initialize-release' } -JavaPackageDeclarationNode >> initialize [ - super initialize. - annotations := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaPackageDeclarationNode >> name [ - ^ name -] - -{ #category : #generated } -JavaPackageDeclarationNode >> name: aJavaNameNode [ - self name notNil - ifTrue: [ self name parent: nil ]. - name := aJavaNameNode. - self name notNil - ifTrue: [ self name parent: self ] -] - -{ #category : #generated } -JavaPackageDeclarationNode >> nodeVariables [ - ^ #(#name) -] - -{ #category : #generated } -JavaPackageDeclarationNode >> packageToken [ - ^ packageToken -] - -{ #category : #generated } -JavaPackageDeclarationNode >> packageToken: aSmaCCToken [ - packageToken := aSmaCCToken -] - -{ #category : #generated } -JavaPackageDeclarationNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JavaPackageDeclarationNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -JavaPackageDeclarationNode >> tokenVariables [ - ^ #(#packageToken) -] diff --git a/src/SmaCC_Java/JavaParameterNode.class.st b/src/SmaCC_Java/JavaParameterNode.class.st deleted file mode 100644 index 25bc0d05d..000000000 --- a/src/SmaCC_Java/JavaParameterNode.class.st +++ /dev/null @@ -1,71 +0,0 @@ -Class { - #name : #JavaParameterNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'modifiers', - 'type', - 'variable' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaParameterNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitParameter: self -] - -{ #category : #generated } -JavaParameterNode >> compositeNodeVariables [ - ^ #(#modifiers) -] - -{ #category : #'generated-initialize-release' } -JavaParameterNode >> initialize [ - super initialize. - modifiers := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaParameterNode >> modifiers [ - ^ modifiers -] - -{ #category : #generated } -JavaParameterNode >> modifiers: anOrderedCollection [ - self setParents: self modifiers to: nil. - modifiers := anOrderedCollection. - self setParents: self modifiers to: self -] - -{ #category : #generated } -JavaParameterNode >> nodeVariables [ - ^ #(#type #variable) -] - -{ #category : #generated } -JavaParameterNode >> type [ - ^ type -] - -{ #category : #generated } -JavaParameterNode >> type: aJavaTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aJavaTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] - -{ #category : #generated } -JavaParameterNode >> variable [ - ^ variable -] - -{ #category : #generated } -JavaParameterNode >> variable: aJavaProgramNode [ - self variable notNil - ifTrue: [ self variable parent: nil ]. - variable := aJavaProgramNode. - self variable notNil - ifTrue: [ self variable parent: self ] -] diff --git a/src/SmaCC_Java/JavaParser.class.st b/src/SmaCC_Java/JavaParser.class.st deleted file mode 100644 index 2f92dac4e..000000000 --- a/src/SmaCC_Java/JavaParser.class.st +++ /dev/null @@ -1,5395 +0,0 @@ -Class { - #name : #JavaParser, - #superclass : #SmaCCGLRParser, - #classInstVars : [ - 'keywords' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaParser class >> ambiguousTransitions [ -^#( -#[ 0 6 0 37] -#[ 0 14 0 189] -#[ 0 14 0 197] -#[ 0 14 0 205] -#[ 0 14 0 209] -#[ 0 14 0 221] -#[ 0 14 0 53] -#[ 0 14 0 225] -#[ 0 14 0 237] -#[ 0 14 0 241] -#[ 0 14 0 253] -#[ 0 14 0 18 1 61] -#[ 0 18 2 73] -#[ 0 22 0 197] -#[ 0 22 0 205] -#[ 0 22 0 209] -#[ 0 22 0 221] -#[ 0 22 0 225] -#[ 0 22 0 237] -#[ 0 22 0 241] -#[ 0 22 0 253] -#[ 0 22 2 217] -#[ 0 26 2 193] -#[ 0 26 0 37] -#[ 0 26 0 41] -#[ 0 22 0 26 0 197] -#[ 0 22 0 26 0 205] -#[ 0 22 0 26 0 209] -#[ 0 22 0 26 0 221] -#[ 0 26 0 53] -#[ 0 22 0 26 0 225] -#[ 0 22 0 26 0 237] -#[ 0 22 0 26 0 241] -#[ 0 26 0 65] -#[ 0 26 0 69] -#[ 0 26 0 73] -#[ 0 26 0 77] -#[ 0 22 0 26 0 253] -#[ 0 26 2 213] -#[ 0 26 0 85] -#[ 0 26 0 89] -#[ 0 26 0 93] -#[ 0 22 0 26] -#[ 0 26 0 97] -#[ 0 22 0 26 2 217] -#[ 0 18 3 153] -#[ 0 18 1 61] -#[ 0 18 0 202] -#[ 0 210 4 49] -#[ 0 246 4 69] -#[ 1 94 4 89] -#[ 1 170 4 161] -#[ 0 14 0 18 2 73] -#[ 0 18 0 202 1 186] -#[ 0 202 1 186] -#[ 0 185 0 202] -#[ 1 226 4 249] -#[ 1 226 4 253] -#[ 1 226 5 1] -#[ 1 230 5 5] -#[ 1 230 5 9] -#[ 1 234 5 13] -#[ 1 234 5 17] -#[ 1 234 5 21] -#[ 1 238 5 25] -#[ 1 238 5 29] -#[ 1 238 5 33] -#[ 1 238 5 37] -#[ 1 238 5 41] -#[ 1 242 5 45] -#[ 1 242 5 49] -#[ 1 246 5 53] -#[ 1 250 5 57] -#[ 1 254 5 61] -#[ 2 2 5 65] -#[ 2 6 5 69] -#[ 2 6 5 73] -#[ 2 18 2 22] -#[ 0 18 0 185] -#[ 2 26 2 54] -#[ 2 34 2 62] -#[ 0 14 0 18 3 153] -#[ 0 18 6 117] -#[ 3 38 3 70] -#[ 0 18 8 1] -#[ 0 14 5 117] -#[ 4 26 4 249] -#[ 4 26 4 253] -#[ 4 26 5 1] -#[ 4 30 4 249] -#[ 4 30 4 253] -#[ 4 30 5 1] -#[ 4 34 5 5] -#[ 4 34 5 9] -#[ 4 38 5 5] -#[ 4 38 5 9] -#[ 4 42 5 5] -#[ 4 42 5 9] -#[ 4 46 5 13] -#[ 4 46 5 17] -#[ 4 46 5 21] -#[ 4 50 5 13] -#[ 4 50 5 17] -#[ 4 50 5 21] -#[ 4 54 5 13] -#[ 4 54 5 17] -#[ 4 54 5 21] -#[ 4 62 5 13] -#[ 4 62 5 17] -#[ 4 62 5 21] -#[ 4 66 5 25] -#[ 4 66 5 29] -#[ 4 66 5 33] -#[ 4 66 5 37] -#[ 4 66 5 41] -#[ 4 70 5 25] -#[ 4 70 5 29] -#[ 4 70 5 33] -#[ 4 70 5 37] -#[ 4 70 5 41] -#[ 4 74 5 45] -#[ 4 74 5 49] -#[ 4 78 5 53] -#[ 4 82 5 57] -#[ 4 86 5 61] -#[ 4 90 5 65] -#[ 1 94 9 193] -#[ 0 202 10 13] -#[ 0 26 0 81] -#[ 0 18 11 29] - ). -] - -{ #category : #'generated-accessing' } -JavaParser class >> cacheId [ - ^'2019-06-19T19:53:12.509822-05:00' -] - -{ #category : #generated } -JavaParser class >> definitionComment [ -"%start goal block_statement expression type_declaration method_declaration class_body_declaration class_or_interface_body_declaration; -%glr; -%right ""else""; - -%id ; - -%ignore_variables semicolon comma leftParen rightParen _leftParen _rightParen lt gt leftBracket rightBracket leftBrace rightBrace; - -%prefix Java ; -%suffix Node ; -%root Program ; - -%hierarchy IfStatement (IfElseStatement); -%hierarchy New (NewClass); -%hierarchy Literal (IntegerLiteral FloatLiteral BooleanLiteral CharacterLiteral StringLiteral Null); -%hierarchy PrimitiveType (BooleanType ByteType ShortType IntType LongType CharType FloatType DoubleType) ; -%hierarchy Type (PrimitiveType ClassType ArrayType) ; -%hierarchy Statement (Block LocalVariableDeclarationStatement EmptyStatement LabeledStatement - ExpressionStatement IfStatement SwitchStatement WhileStatement DoWhileStatement - ForStatement ForEachStatement BreakStatement ContinueStatement ReturnStatement ThrowStatement - SynchronizedStatement TryStatement AssertStatement ThisConstructorInvocation SuperConstructorInvocation); -%hierarchy Expression (UnaryExpression BinaryExpression ConditionalExpression Assignment - ClassExpression FieldAccess MethodInvocation ArrayAccess OuterThis - New Literal Name NewArray LambdaExpression MethodReference); -%hierarchy Name (QualifiedName) ; -%hierarchy SingleTypeImportDeclaration (TypeImportOnDemandDeclaration); -%hierarchy VariableDeclaration (InitializedVariableDeclaration) ; -%hierarchy Parameter (VariableArgumentParameter); -%hierarchy AbstractMethodDeclaration (AnnotationMethodDeclaration); -%hierarchy Declaration ( AbstractMethodDeclaration ClassDeclaration - ConstructorDeclaration EmptyDeclaration - EnumDeclaration FieldDeclaration InterfaceDeclaration - LocalVariableDeclaration MethodDeclaration - PackageDeclaration SingleTypeImportDeclaration - VariableDeclaration ); -%hierarchy UnaryExpression (CastExpression PostDecrementExpression PostIncrementExpression - PreDecrementExpression PreIncrementExpression UnaryAddition - UnaryBitInvert UnaryNot UnarySubtraction); -%hierarchy TypeName (QualifiedTypeName); -%hierarchy Initializer (StaticInitializer); - - - : > - ; - - : >> - ; - - : >>> - ; - - : 0 | [1-9] [0-9]* - ; - - : 0[xX][0-9a-fA-F]+ - ; - - : 0[0-7]+ - ; - - : [eE] [\-\+]? [0-9]+ - ; - - : [fFdD] - ; - - : \\ ([btnfr\""\'\\] | ([0-3] [0-7]{0,2} | [4-7][0-7]?) | (u [0-9a-fA-F]{4,4})) - ; - - : ( | | ) [lL]? - ; - - : [0-9]+ \. [0-9]* ? ? - | \. [0-9]+ ? ? - | [0-9]+ ? - | [0-9]+ - | \. [0-9a-fA-F]+ [pP] [\-\+]? [0-9]+ ? - ; - - : true - | false - ; - - : \' ([^\\\'] | ) \' - ; - - : \"" ([^\\\""] | )* \"" - ; - - : null - ; - - : ( | [a-zA-Z_$]) (|\w|$)* - ; - - - : \r - | \n - | \r\n - ; - - : \s+ - ; - - : \/\/ [^\r\n]* - | /\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/ - ; - - : (\` [^\`]* \`)+ - ; - -goal - : compilation_unit - ; -# 19.3) Lexical Structure. -literal - : 'token' {{IntegerLiteral}} - | 'token' {{FloatLiteral}} - | 'token' {{BooleanLiteral}} - | 'token' {{CharacterLiteral}} - | 'token' {{StringLiteral}} - | 'token' {{Null}} - ; -# 19.4) Types, Values, and Variables -type - : primitive_type - | reference_type - ; -primitive_type - : numeric_type - | ""boolean"" 'token' {{BooleanType}} - ; -numeric_type - : integral_type - | floating_point_type - ; -integral_type - : ""byte"" 'token' {{ByteType}} - | ""short"" 'token' {{ShortType}} - | ""int"" 'token' {{IntType}} - | ""long"" 'token' {{LongType}} - | ""char"" 'token' {{CharType}} - ; -floating_point_type - : ""float"" 'token' {{FloatType}} - | ""double"" 'token' {{DoubleType}} - ; -reference_type - : class_or_interface_type - | array_type - ; -class_or_interface_type - : type_name 'name' {{ClassType}} - ; -class_type - : class_or_interface_type - ; -interface_type - : class_or_interface_type - ; -array_type - : primitive_type 'baseType' dims {{ArrayType}} - | type_name 'baseType' dims {{ArrayType}} - ; -# 19.5) Names -name - : simple_name - | qualified_name - ; -simple_name - : 'name' {{Name}} - ; -qualified_name - : name 'nspace' ""."" 'period' 'name' {{QualifiedName}} - ; -# 19.6) ""package""s -compilation_unit - : package_declaration 'packageDeclaration'? - import_declarations? - type_declarations? {{ProgramFile}} - ; -import_declarations - : import_declaration 'import' - | import_declarations import_declaration 'import' - ; -type_declarations - : type_declaration 'typeDeclaration' - | type_declarations type_declaration 'typeDeclaration' - ; -package_declaration - : annotations ""package"" 'packageToken' name 'name' "";"" 'semicolon' {{PackageDeclaration}} - ; -import_declaration - : single_type_import_declaration - | type_import_on_demand_declaration - ; -single_type_import_declaration - : ""import"" 'importToken' ""static"" 'staticToken'? name 'name' "";"" 'semicolon' {{SingleTypeImportDeclaration}} - ; -type_import_on_demand_declaration - : ""import"" 'importToken' ""static"" 'staticToken'? name 'name' ""."" 'period' ""*"" 'star' "";"" 'semicolon' {{TypeImportOnDemandDeclaration}} - ; -type_declaration - : class_declaration - | interface_declaration - | annotation_interface_declaration - | "";"" 'semicolon' {{EmptyDeclaration}} - ; -# 19.7) Productions used only in the LALR(1) grammar - -modifiers - : modifier 'modifier' - | modifiers modifier 'modifier' - ; -modifier - : ""public"" 'token' {{Modifier}} - | ""protected"" 'token' {{Modifier}} - | ""private"" 'token' {{Modifier}} - | ""static"" 'token' {{Modifier}} - | ""abstract"" 'token' {{Modifier}} - | ""final"" 'token' {{Modifier}} - | ""native"" 'token' {{Modifier}} - | ""synchronized"" 'token' {{Modifier}} - | ""transient"" 'token' {{Modifier}} - | ""volatile"" 'token' {{Modifier}} - | ""strictfp"" 'token' {{Modifier}} # note that semantic analysis must check that the - # context of the modifier allows strictfp. - | annotation - ; -# 19.8) Classes -# 19.8.1) Class Declaration: -class_declaration - : modifiers? ""class"" 'classToken' 'name' type_parameters_opt 'typeParameters' super? interfaces? class_body {{ClassDeclaration}} - | enum_declaration - ; -super - : ""extends"" 'extendsToken' class_type 'superclass' - ; -interfaces - : ""implements"" 'implementsToken' interface_type_list - ; -interface_type_list - : interface_type 'interface' - | interface_type_list "","" 'comma' interface_type 'interface' - ; -class_body - : ""{"" 'leftBrace' class_body_declarations? ""}"" 'rightBrace' - ; -class_body_declarations - : class_body_declaration 'declaration' - | class_body_declarations class_body_declaration 'declaration' - ; -class_body_declaration - : class_member_declaration - | static_initializer - | constructor_declaration - | block 'block' {{Initializer}} - ; -class_member_declaration - : field_declaration - | method_declaration - | type_declaration - ; -# 19.8.2) Field Declarations -field_declaration - : modifiers? type 'type' variable_declarators "";"" 'semicolon' {{FieldDeclaration}} - ; -variable_declarators - : variable_declarator 'variableDeclaration' - | variable_declarators "","" 'comma' variable_declarator 'variableDeclaration' - ; -variable_declarator - : variable_declarator_id 'variable' {{VariableDeclaration}} - | initialized_variable_declarator - ; -initialized_variable_declarator - : variable_declarator_id 'variable' ""="" 'equals' variable_initializer 'initializer' {{InitializedVariableDeclaration}} - ; -variable_declarator_id - : 'name' {{VariableName}} - | variable_declarator_id 'variable' ""["" 'leftBracket' ""]"" 'rightBracket' {{ArrayVariableName}} - ; -variable_initializer - : expression - | array_initializer - ; -# 19.8.3) Method Declarations -method_declaration - : method_header method_body 'body' {{MethodDeclaration}} - ; -method_header - : modifiers? type_parameters_opt 'typeParameters' type 'type' method_declarator 'declarator' throws 'throws'? - | modifiers? type_parameters_opt 'typeParameters' void 'type' method_declarator 'declarator' throws 'throws'? - ; -#### -void - : ""void"" 'voidToken' {{VoidType}} - ; -#### -method_declarator - : 'name' ""("" 'leftParen' formal_parameter_list? "")"" 'rightParen' {{MethodDeclarator}} - | method_declarator 'declarator' ""["" 'leftBracket' ""]"" 'rightBracket' {{ArrayMethodDeclarator}} # deprecated - # be careful; the above production also allows 'void foo() []' - ; -formal_parameter_list - : formal_parameter 'parameter' - | formal_parameter_list "","" 'comma' formal_parameter 'parameter' - ; -formal_parameter - : variable_modifiers type 'type' variable_declarator_id 'variable' {{Parameter}} - | variable_modifiers type 'type' ""..."" 'varArgsToken' variable_declarator_id 'variable' {{VariableArgumentParameter}} - ; -throws - : ""throws"" 'throwsToken' class_type_list {{Throws}} - ; -class_type_list - : class_type 'classType' - | class_type_list "","" 'comma' class_type 'classType' - ; -method_body - : block - | "";"" 'semicolon' {{EmptyMethodBody}} - ; -# 19.8.4) Static Initializers -static_initializer - : ""static"" 'staticToken' block 'block' {{StaticInitializer}} - ; -# 19.8.5) Constructor Declarations -constructor_declaration - : modifiers? constructor_declarator throws 'throws'? - constructor_body 'body' {{ConstructorDeclaration}} - ; -constructor_declarator - : type_parameters_opt 'typeParameters' simple_name 'name' ""("" 'leftParen' formal_parameter_list? "")"" 'rightParen' - ; -constructor_body - : ""{"" 'leftBrace' explicit_constructor_invocation 'statement' - block_statements ""}"" 'rightBrace' {{Block}} - | ""{"" 'leftBrace' explicit_constructor_invocation 'statement' ""}"" 'rightBrace' {{Block}} - | ""{"" 'leftBrace' block_statements ""}"" 'rightBrace' {{Block}} - | ""{"" 'leftBrace' ""}"" 'rightBrace' {{Block}} - ; -explicit_constructor_invocation - : ""this"" 'thisToken' ""("" 'leftParen' argument_list? "")"" 'rightParen' "";"" 'semicolon' {{ThisConstructorInvocation}} - | ""super"" 'superToken' ""("" 'leftParen' argument_list? "")"" 'rightParen' "";"" 'semicolon' {{SuperConstructorInvocation}} - | primary 'primary' ""."" 'period' ""this"" 'thisToken' ""("" 'leftParen' argument_list? "")"" 'rightParen' "";"" 'semicolon' {{ThisConstructorInvocation}} - | primary 'primary' ""."" 'period' ""super"" 'superToken' ""("" 'leftParen' argument_list? "")"" 'rightParen' "";"" 'semicolon' {{SuperConstructorInvocation}} - ; -# 19.9) Interfaces -# 19.9.1) Interface Declarations -interface_declaration - : modifiers? ""interface"" 'interfaceToken' 'name' type_parameters_opt 'typeParameters' extends_interfaces? - interface_body {{InterfaceDeclaration}} - ; -annotation_interface_declaration - : modifiers? ""@"" 'atToken' ""interface"" 'interfaceToken' 'name' annotation_interface_body {{AnnotationInterface}} - ; -annotation_interface_body - : ""{"" 'leftBrace' annotation_interface_member_declarations? ""}"" 'rightBrace' - ; -annotation_interface_member_declarations - : annotation_interface_member_declaration 'declaration' - | annotation_interface_member_declarations annotation_interface_member_declaration 'declaration' - ; -annotation_interface_member_declaration - : annotation_method_declaration - | type_declaration - | field_declaration - ; -annotation_method_declaration - : abstract_method_declaration - | method_header ""default"" 'defaultToken' variable_initializer 'value' "";"" 'semicolon' {{AnnotationMethodDeclaration}} - | method_header ""default"" 'defaultToken' annotation 'value' "";"" 'semicolon' {{AnnotationMethodDeclaration}} - ; -extends_interfaces - : ""extends"" 'extendsToken' interface_type 'interfaceType' - | extends_interfaces "","" 'comma' interface_type 'interfaceType' - ; -interface_body - : ""{"" 'leftBrace' interface_member_declarations? ""}"" 'rightBrace' - ; -interface_member_declarations - : interface_member_declaration 'declaration' - | interface_member_declarations interface_member_declaration 'declaration' - ; -interface_member_declaration - : constant_declaration - | abstract_method_declaration - | interface_method_declaration - | type_declaration - ; -constant_declaration - : field_declaration - # need to semantically check that modifiers of field declaration - # include only PUBLIC, ""static"", or ""final"". Other modifiers are - # disallowed. - ; -interface_method_declaration - : interface_method_header block 'body' {{MethodDeclaration}} - ; -interface_method_header - : interface_modifier* type_parameters_opt 'typeParameters' type 'type' method_declarator 'declarator' throws 'throws'? - | interface_modifier* type_parameters_opt 'typeParameters' void 'type' method_declarator 'declarator' throws 'throws'? - ; -interface_modifier - : modifier 'modifier' - | default_modifier 'modifier' - ; -default_modifier - : ""default"" 'token' {{Modifier}} - ; -abstract_method_declaration - : method_header "";"" 'semicolon' {{AbstractMethodDeclaration}} - ; -# 19.10) Arrays -array_initializer - : ""{"" 'leftBrace' variable_initializers "","" 'comma' ""}"" 'rightBrace' {{ArrayInitializer}} - | ""{"" 'leftBrace' variable_initializers ""}"" 'rightBrace' {{ArrayInitializer}} - | ""{"" 'leftBrace' "","" 'comma' ""}"" 'rightBrace' {{ArrayInitializer}} - | ""{"" 'leftBrace' ""}"" 'rightBrace' {{ArrayInitializer}} - ; -variable_initializers - : variable_initializer 'initializer' - | variable_initializers "","" 'comma' variable_initializer 'initializer' - ; -# 19.11) Blocks and Statements -block - : ""{"" 'leftBrace' block_statements? ""}"" 'rightBrace' {{Block}} - ; -block_statements - : block_statement 'statement' - | block_statements block_statement 'statement' - ; -block_statement - : local_variable_declaration_statement - | statement - | class_declaration - | interface_declaration - ; -local_variable_declaration_statement - : local_variable_declaration 'declaration' "";"" 'semicolon' {{LocalVariableDeclarationStatement}} - ; -local_variable_declaration - : variable_modifiers type 'type' variable_declarators {{LocalVariableDeclaration}} - ; -statement - : statement_without_trailing_substatement - | labeled_statement - | if_then_statement - | if_then_else_statement - | while_statement - | for_statement - | foreach_statement - ; -statement_without_trailing_substatement - : block - | empty_statement - | expression_statement - | switch_statement - | do_statement - | break_statement - | continue_statement - | return_statement - | synchronized_statement - | throw_statement - | try_statement - | assert_statement - ; -empty_statement - : "";"" 'semicolon' {{EmptyStatement}} - ; -labeled_statement - : 'identifier' "":"" 'colon' statement 'statement' {{LabeledStatement}} - ; -expression_statement - : statement_expression 'expression' "";"" 'semicolon' {{ExpressionStatement}} - ; -statement_expression - : assignment - | preincrement_expression - | predecrement_expression - | postincrement_expression - | postdecrement_expression - | method_invocation - | class_instance_creation_expression - ; -if_then_statement - : ""if"" 'ifToken' ""("" 'leftParen' expression 'expression' "")"" 'rightParen' statement 'trueStatement' {{IfStatement}} - ; -if_then_else_statement - : ""if"" 'ifToken' ""("" 'leftParen' expression 'expression' "")"" 'rightParen' statement 'trueStatement' - ""else"" 'elseToken' statement 'falseStatement' {{IfElseStatement}} - ; -switch_statement - : ""switch"" 'switchToken' ""("" 'leftParen' expression 'expression' "")"" 'rightParen' switch_block 'block' {{SwitchStatement}} - ; -switch_block - : ""{"" 'leftBrace' switch_block_statement_groups switch_labels ""}"" 'rightBrace' {{SwitchBlock}} - | ""{"" 'leftBrace' switch_block_statement_groups ""}"" 'rightBrace' {{SwitchBlock}} - | ""{"" 'leftBrace' switch_labels ""}"" 'rightBrace' {{SwitchBlock}} - | ""{"" 'leftBrace' ""}"" 'rightBrace' {{SwitchBlock}} - ; -switch_block_statement_groups - : switch_block_statement_group 'statementGroup' - | switch_block_statement_groups switch_block_statement_group 'statementGroup' - ; -switch_block_statement_group - : switch_labels block_statements {{SwitchBlockStatementGroup}} - ; -switch_labels - : switch_label 'label' - | switch_labels switch_label 'label' - ; -switch_label - : ""case"" 'caseToken' constant_expression 'constant' "":"" 'colon' {{SwitchLabel}} - | ""default"" 'defaultToken' "":"" 'colon' {{DefaultLabel}} - ; -while_statement - : ""while"" 'whileToken' ""("" 'leftParen' expression 'expression' "")"" 'rightParen' statement 'statement' {{WhileStatement}} - ; -do_statement - : ""do"" 'doToken' statement 'statement' ""while"" 'whileToken' ""("" 'leftParen' expression 'expression' "")"" 'rightParen' "";"" 'semicolon' {{DoWhileStatement}} - ; -for_statement - : ""for"" 'forToken' ""("" 'leftParen' for_init 'initial'? "";"" 'firstSemicolon' expression 'test'? "";"" 'secondSemicolon' - for_update 'update'? "")"" 'rightParen' statement 'statement' {{ForStatement}} - ; -for_init - : statement_expression_list - | local_variable_declaration - ; -for_update - : statement_expression_list - ; -statement_expression_list - : statement_expression 'expression' {{StatementExpressionList}} - | statement_expression_list "","" 'comma' statement_expression 'expression' {{StatementExpressionList}} - ; -break_statement - : ""break"" 'breakToken' 'identifier'? "";"" 'semicolon' {{BreakStatement}} - ; -continue_statement - : ""continue"" 'continueToken' 'identifier'? "";"" 'semicolon' {{ContinueStatement}} - ; -return_statement - : ""return"" 'returnToken' expression 'expression'? "";"" 'semicolon' {{ReturnStatement}} - ; -throw_statement - : ""throw"" 'throwToken' expression 'expression' "";"" 'semicolon' {{ThrowStatement}} - ; -synchronized_statement - : ""synchronized"" 'synchronizedToken' ""("" 'leftParen' expression 'expression' "")"" 'rightParen' block 'block' {{SynchronizedStatement}} - ; -try_statement - : ""try"" 'tryToken' try_resources? block 'block' catches {{TryStatement}} - | ""try"" 'tryToken' try_resources? block 'block' catches? finally 'finally' {{TryStatement}} - | ""try"" 'tryToken' try_resources block 'block' {{TryStatement}} - ; -try_resources - : ""("" 'leftParen' try_resources_list "";"" 'semicolon'? "")"" 'rightParen' - ; -try_resources_list - : try_resource 'resource' - | try_resources_list "";"" 'semicolon' try_resource 'resource' - ; -try_resource - : variable_modifiers type 'type' initialized_variable_declarator 'variableDeclaration' {{LocalVariableDeclaration}} - ; -catches - : catch_clause 'catch' - | catches catch_clause 'catch' - ; -catch_clause - : ""catch"" 'catchToken' ""("" 'leftParen' catch_parameter 'parameter' "")"" 'rightParen' block 'block' {{CatchClause}} - ; -catch_parameter - : variable_modifiers catch_types variable_declarator_id 'variable' {{CatchParameter}} - ; -catch_types - : type 'type' - | catch_types ""|"" 'bar' type 'type' - ; -finally - : ""finally"" 'finallyToken' block 'block' {{FinallyClause}} - ; -assert_statement - : ""assert"" 'assertToken' expression 'testExpression' "";"" 'semicolon' {{AssertStatement}} - | ""assert"" 'assertToken' expression 'testExpression' "":"" 'colon' expression 'messageExpression' "";"" 'semicolon' {{AssertStatement}} - ; -# 19.12) Expressions -primary - : primary_no_new_array - | array_creation_expression - ; -primary_no_new_array - : literal - | ""this"" 'name' {{Name}} - | ""("" '_leftParen' expression "")"" '_rightParen' {{Expression}} - | class_instance_creation_expression - | field_access - | method_invocation - | array_access - | primitive_type 'type' ""."" 'period' ""class"" 'classToken' {{ClassExpression}} - | void 'type' ""."" 'period' ""class"" 'classToken' {{ClassExpression}} - | type 'type' ""."" 'period' ""class"" 'classToken' {{ClassExpression}} - | name 'name' ""."" 'period' ""this"" 'thisToken' {{OuterThis}} - | method_reference_expression - ; -lambda_expression - : lambda_parameters ""->"" 'arrowToken' lambda_function {{LambdaExpression}} - ; -lambda_parameters - : ""("" 'leftParen' lambda_parameter_list? "")"" 'rightParen' - | untyped_lambda_parameter 'parameter' - ; -lambda_parameter_list - : lambda_parameter 'parameter' - | lambda_parameter_list "","" 'comma' lambda_parameter 'parameter' - ; -lambda_parameter - : formal_parameter - | untyped_lambda_parameter - ; -untyped_lambda_parameter - : variable_declarator_id 'variable' {{Parameter}} - ; -lambda_function - : block 'value' - | expression 'value' - ; -method_reference_expression - : primary_or_name 'receiver' ""::"" 'colonColonToken' 'name' {{MethodReference}} - | reference_type 'receiver' ""::"" 'colonColonToken' ""new"" 'name' {{MethodReference}} - ; -class_instance_creation_expression - : ""new"" 'newToken' class_type 'type' ""("" 'leftParen' argument_list? "")"" 'rightParen' {{New}} - | ""new"" 'newToken' class_type 'type' ""("" 'leftParen' argument_list? "")"" 'rightParen' class_body {{NewClass}} - | primary_or_name 'primary' ""."" 'period' ""new"" 'newToken' type_arguments_opt 'name' - type_arguments_or_diamond_opt ""("" 'leftParen' argument_list? "")"" 'rightParen' {{New}} - | primary_or_name 'primary' ""."" 'period' ""new"" 'newToken' type_arguments_opt 'name' - type_arguments_or_diamond_opt ""("" 'leftParen' argument_list? "")"" 'rightParen' class_body {{NewClass}} - ; -argument_list - : expression 'expression' - | argument_list "","" 'comma' expression 'expression' - ; -array_creation_expression - : ""new"" 'newToken' primitive_type 'type' dim_exprs dims? {{NewArray}} - | ""new"" 'newToken' class_or_interface_type 'type' dim_exprs dims? {{NewArray}} - | ""new"" 'newToken' primitive_type 'type' dims array_initializer 'initializer' {{NewArray}} - | ""new"" 'newToken' class_or_interface_type 'type' dims array_initializer 'initializer' {{NewArray}} - ; -dim_exprs - : dim_expr 'dimExpression' - | dim_exprs dim_expr 'dimExpression' - ; -dim_expr - : ""["" 'leftBracket' expression 'expression' ""]"" 'rightBracket' {{DimensionExpression}} - ; -dims - : empty_dim_expr - | dims empty_dim_expr - ; -empty_dim_expr - : ""["" 'leftBracket' ""]"" 'rightBracket' - ; -field_access - : primary 'receiver' ""."" 'period' 'name' {{FieldAccess}} - | ""super"" 'superToken' ""."" 'period' 'name' {{FieldAccess}} - | name 'receiver' ""."" 'superPeriod' ""super"" 'superToken' ""."" 'period' 'name' {{FieldAccess}}###??? - ; -method_invocation - : type_arguments_opt 'name' ""("" 'leftParen' argument_list? "")"" 'rightParen' {{MethodInvocation}} - | primary_or_name 'receiver' ""."" 'period' type_arguments_opt 'name' ""("" 'leftParen' argument_list? "")"" 'rightParen' {{MethodInvocation}} - | ""super"" 'superToken' ""."" 'period' type_arguments_opt 'name' ""("" 'leftParen' argument_list? "")"" 'rightParen' {{MethodInvocation}} - | name 'receiver' ""."" 'superPeriod' ""super"" 'superToken' ""."" 'period' type_arguments_opt 'name' ""("" 'leftParen' argument_list? "")"" 'rightParen' {{MethodInvocation}} - ; -array_access - : name 'array' ""["" 'leftBracket' expression 'expression' ""]"" 'rightBracket' {{ArrayAccess}} - | primary_no_new_array 'array' ""["" 'leftBracket' expression 'expression' ""]"" 'rightBracket' {{ArrayAccess}} - ; -postfix_expression - : primary - | name - | postincrement_expression - | postdecrement_expression - ; -postincrement_expression - : postfix_expression 'expression' ""++"" 'plusPlus' {{PostIncrementExpression}} - ; -postdecrement_expression - : postfix_expression 'expression' ""--"" 'minusMinus' {{PostDecrementExpression}} - ; -unary_expression - : preincrement_expression - | predecrement_expression - | ""+"" 'plus' unary_expression 'expression' {{UnaryAddition}} - | ""-"" 'minus' unary_expression 'expression' {{UnarySubtraction}} - | unary_expression_not_plus_minus -| assignment # HACK for VAGEN - ; -preincrement_expression - : ""++"" 'plusPlus' unary_expression 'expression' {{PreIncrementExpression}} - ; -predecrement_expression - : ""--"" 'minusMinus' unary_expression 'expression' {{PreDecrementExpression}} - ; -unary_expression_not_plus_minus - : postfix_expression - | ""~"" 'tilde' unary_expression 'expression' {{UnaryBitInvert}} - | ""!"" 'bang' unary_expression 'expression' {{UnaryNot}} - | cast_expression - ; -cast_expression - : ""("" 'leftParen' primitive_type 'type' "")"" 'rightParen' unary_expression 'expression' {{CastExpression}} - | ""("" 'leftParen' reference_type 'type' ( ""&"" 'ampToken' interface_type 'interfaceType' )? "")"" 'rightParen' unary_expression_not_plus_minus 'expression' {{CastExpression}} - | ""("" 'leftParen' reference_type 'type' ( ""&"" 'ampToken' interface_type 'interfaceType' )? "")"" 'rightParen' lambda_expression 'expression' {{CastExpression}} - ; -multiplicative_expression - : unary_expression - | multiplicative_expression 'leftExpression' ""*"" 'op' unary_expression 'rightExpression' {{BinaryExpression}} - | multiplicative_expression 'leftExpression' ""/"" 'op' unary_expression 'rightExpression' {{BinaryExpression}} - | multiplicative_expression 'leftExpression' ""%"" 'op' unary_expression 'rightExpression' {{BinaryExpression}} - ; -additive_expression - : multiplicative_expression - | additive_expression 'leftExpression' ""+"" 'op' multiplicative_expression 'rightExpression' {{BinaryExpression}} - | additive_expression 'leftExpression' ""-"" 'op' multiplicative_expression 'rightExpression' {{BinaryExpression}} - ; -shift_expression - : additive_expression - | shift_expression 'leftExpression' ""<<"" 'op' additive_expression 'rightExpression' {{BinaryExpression}} - | shift_expression 'leftExpression' 'op' additive_expression 'rightExpression' {{BinaryExpression}} - | shift_expression 'leftExpression' 'op' additive_expression 'rightExpression' {{BinaryExpression}} - ; -relational_expression - : shift_expression - | relational_expression 'leftExpression' ""<"" 'op' shift_expression 'rightExpression' {{BinaryExpression}} - | relational_expression 'leftExpression' 'op' shift_expression 'rightExpression' {{BinaryExpression}} - | relational_expression 'leftExpression' ""<="" 'op' shift_expression 'rightExpression' {{BinaryExpression}} - | relational_expression 'leftExpression' "">="" 'op' shift_expression 'rightExpression' {{BinaryExpression}} - | relational_expression 'leftExpression' ""instanceof"" 'op' reference_type 'rightExpression' {{BinaryExpression}} - ; -equality_expression - : relational_expression - | equality_expression 'leftExpression' ""=="" 'op' relational_expression 'rightExpression' {{BinaryExpression}} - | equality_expression 'leftExpression' ""!="" 'op' relational_expression 'rightExpression' {{BinaryExpression}} - ; -and_expression - : equality_expression - | and_expression 'leftExpression' ""&"" 'op' equality_expression 'rightExpression' {{BinaryExpression}} - ; -exclusive_or_expression - : and_expression - | exclusive_or_expression 'leftExpression' ""^"" 'op' and_expression 'rightExpression' {{BinaryExpression}} - ; -inclusive_or_expression - : exclusive_or_expression - | inclusive_or_expression 'leftExpression' ""|"" 'op' exclusive_or_expression 'rightExpression' {{BinaryExpression}} - ; -conditional_and_expression - : inclusive_or_expression - | conditional_and_expression 'leftExpression' ""&&"" 'op' inclusive_or_expression 'rightExpression' {{BinaryExpression}} - ; -conditional_or_expression - : conditional_and_expression - | conditional_or_expression 'leftExpression' ""||"" 'op' conditional_and_expression 'rightExpression' {{BinaryExpression}} - ; -conditional_expression - : conditional_or_expression - | conditional_or_expression 'testExpression' ""?"" 'questionMark' expression 'trueExpression' - "":"" 'colon' conditional_expression 'falseExpression' {{ConditionalExpression}} - ; -assignment_expression - : conditional_expression - | assignment - ; -assignment - : left_hand_side 'variable' assignment_operator 'op' expression 'value' {{Assignment}} - ; -left_hand_side - : name - | field_access - | array_access - ; -assignment_operator - : ""="" - | ""*="" - | ""/="" - | ""%="" - | ""+="" - | ""-="" - | ""<<="" - | "">>="" - | "">>>="" - | ""&="" - | ""^="" - | ""|="" - ; -expression - : assignment_expression - | lambda_expression - ; -constant_expression - : expression - ; -#### -annotations - : - | annotations annotation 'annotation' - ; -annotation - : ""@"" 'at' name 'name' ( ""("" 'leftParen' annotation_args "")"" 'rightParen' )? {{Annotation}} - ; -annotation_args - : - | elementValuePairs - | elementValue 'value' - ; -elementValuePairs - : elementValuePair 'value' - | elementValuePairs "","" 'comma' elementValuePair 'value' - ; -elementValuePair - : 'name' ""="" 'equals' elementValue 'value' {{ElementValuePair}} - ; -elementValue - : conditional_expression - | annotation - | elementValueArrayInitializer - ; -elementValueArrayInitializer - : ""{"" 'leftBrace' elementValues? "","" 'comma'? ""}"" 'rightBrace' {{ElementArrayInitializer}} - ; -elementValues - : elementValue 'value' - | elementValues "","" 'comma' elementValue 'value' - ; -enum_declaration - : modifiers? ""enum"" 'enumToken' 'name' interfaces? enum_body {{EnumDeclaration}} - ; -enum_body - : ""{"" 'leftBrace' enum_constants? "","" 'comma'? enum_body_declarations? ""}"" 'rightBrace' - ; -enum_constants - : enum_constant 'constant' - | enum_constants "","" 'comma' enum_constant 'constant' - ; -enum_constant - : annotations 'name' ( ""("" 'leftParen' argument_list? "")"" 'rightParen' )? class_body? {{EnumConstant}} - ; -enum_body_declarations - : "";"" 'semicolon' class_body_declarations? - ; -type_parameters_opt - : - | ""<"" 'lt' type_parameters 'gt' {{TypeParameters}} - ; -type_parameters - : type_parameter 'parameter' - | type_parameters "","" 'comma' type_parameter 'parameter' - ; -type_parameter - : 'name' ( ""extends"" 'extendsToken' type_bound )? {{TypeParameter}} - ; -type_bound - : type 'type' - | type_bound ""&"" 'amp' type 'type' - ; -type_arguments_or_diamond_opt - : - | ""<"" 'typeArgLeft' type_arguments 'typeArgRight' - | ""<"" 'typeArgLeft' 'typeArgRight' - ; -type_arguments_opt - : - | ""<"" 'lt' type_arguments 'gt' - | ""<"" 'lt' 'gt' - ; -type_arguments - : type_argument 'argument' - | type_arguments "","" 'comma' type_argument 'argument' - ; -type_argument - : type 'type' {{TypeArgument}} - | ""?"" 'questionMark' type_argument_type {{TypeArgument}} - ; -type_argument_type - : ""extends"" 'token' type 'type' - | ""super"" 'token' type 'type' - | - ; -type_name - : simple_type_name - | qualified_type_name - ; -simple_type_name - : 'name' type_arguments_opt {{TypeName}} - ; -qualified_type_name - : type_name 'nspace' ""."" 'period' 'name' type_arguments_opt {{QualifiedTypeName}} - ; -foreach_statement - : ""for"" 'forToken' ""("" 'leftParen' variable_modifiers type 'type' variable_declarator_id 'name' "":"" 'colon' expression 'expression' "")"" 'rightParen' statement 'statement' {{ForEachStatement}} - ; -variable_modifiers - : - | variable_modifiers variable_modifier 'modifier' - ; -variable_modifier - : ""final"" 'token' {{Modifier}} - | annotation - ; -primary_or_name - : primary - | name - ; - -class_or_interface_body_declaration - : class_body_declaration - | interface_member_declaration - ;" -] - -{ #category : #'file types' } -JavaParser class >> fileExtension [ - ^ '.java' -] - -{ #category : #'file types' } -JavaParser class >> fileExtensionType [ - ^ 'Java files' -] - -{ #category : #private } -JavaParser class >> keywords [ - ^ keywords - ifNil: [ keywords := (Set new: 100) - addAll: - #('abstract' 'assert' 'boolean' 'break' 'byte' 'case' 'catch' 'char' 'class' 'const' 'continue' 'default' 'do' 'double' 'else' 'enum' 'extends' 'final' 'finally' 'float' 'for' 'goto' 'if' 'implements' 'import' 'instanceof' 'int' 'interface' 'long' 'native' 'new' 'package' 'private' 'protected' 'public' 'return' 'short' 'static' 'strictfp' 'super' 'switch' 'synchronized' 'this' 'throw' 'throws' 'transient' 'try' 'void' 'volatile' 'while'); - yourself ] -] - -{ #category : #generated } -JavaParser class >> reduceTable [ -^#( - #(266 0 #reduceActionForannotations1: 28645377 false ) - #(125 0 #reduceActionForcompilation_unit1: 4839425 false ) - #(292 0 #reduceActionForannotations1: 31361025 false ) - #(284 0 #reduceActionFortype_arguments_opt1: 30469121 false ) - #(279 0 #nil 29937665 false ) - #(176 0 #reduceActionForannotations1: 12984321 false ) - #(132 1 #reduceActionFortype_declaration4: 5742596 false ) - #(134 1 #reduceActionFormodifier5: 6018053 false ) - #(134 1 #reduceActionFormodifier5: 6018054 false ) - #(134 1 #reduceActionFormodifier5: 6018055 false ) - #(134 1 #reduceActionFormodifier5: 6018051 false ) - #(134 1 #reduceActionFormodifier5: 6018050 false ) - #(134 1 #reduceActionFormodifier5: 6018049 false ) - #(134 1 #reduceActionFormodifier5: 6018052 false ) - #(134 1 #reduceActionFormodifier5: 6018059 false ) - #(134 1 #reduceActionFormodifier5: 6018056 false ) - #(134 1 #reduceActionFormodifier5: 6018057 false ) - #(134 1 #reduceActionFormodifier5: 6018058 false ) - #(110 1 #liftFirstValue: 3443713 false ) - #(125 1 #reduceActionForcompilation_unit3: 4839427 false ) - #(125 1 #reduceActionForcompilation_unit2: 4839426 false ) - #(125 1 #reduceActionForcompilation_unit5: 4839429 false ) - #(126 1 #reduceActionForimport_declarations1: 4969473 false ) - #(129 1 #liftFirstValue: 5317633 false ) - #(129 1 #liftFirstValue: 5317634 false ) - #(127 1 #reduceActionForimport_declarations1: 5079041 false ) - #(133 1 #reduceActionForimport_declarations1: 5946369 false ) - #(132 1 #liftFirstValue: 5742593 false ) - #(132 1 #liftFirstValue: 5742594 false ) - #(132 1 #liftFirstValue: 5742595 false ) - #(134 1 #liftFirstValue: 6018060 false ) - #(135 1 #liftFirstValue: 6595593 false ) - #(189 1 #reduceActionForempty_statement1: 15026177 false ) - #(113 1 #reduceActionForprimitive_type2: 3888130 false ) - #(115 1 #reduceActionForintegral_type1: 4022273 false ) - #(115 1 #reduceActionForintegral_type5: 4022277 false ) - #(116 1 #reduceActionForfloating_point_type2: 4199426 false ) - #(116 1 #reduceActionForfloating_point_type1: 4199425 false ) - #(115 1 #reduceActionForintegral_type3: 4022275 false ) - #(115 1 #reduceActionForintegral_type4: 4022276 false ) - #(115 1 #reduceActionForintegral_type2: 4022274 false ) - #(223 1 #reduceActionForprimary_no_new_array2: 19713026 false ) - #(151 1 #reduceActionForvoid1: 8662017 false ) - #(111 1 #reduceActionForliteral1: 3502081 false ) - #(111 1 #reduceActionForliteral2: 3502082 false ) - #(111 1 #reduceActionForliteral3: 3502083 false ) - #(111 1 #reduceActionForliteral4: 3502084 false ) - #(111 1 #reduceActionForliteral5: 3502085 false ) - #(111 1 #reduceActionForliteral6: 3502086 false ) - #(123 1 #reduceActionForprimary_no_new_array2: 4681729 false ) - #(223 1 #liftFirstValue: 19713025 false ) - #(112 1 #liftFirstValue: 3841025 false ) - #(113 1 #liftFirstValue: 3888129 false ) - #(114 1 #liftFirstValue: 3962881 false ) - #(114 1 #liftFirstValue: 3962882 false ) - #(112 1 #liftFirstValue: 3841026 false ) - #(117 1 #liftFirstValue: 4293633 false ) - #(117 1 #liftFirstValue: 4293634 false ) - #(241 1 #liftFirstValue: 23589890 false ) - #(262 1 #liftFirstValue: 28335105 false ) - #(294 1 #liftFirstValue: 31508482 false ) - #(122 1 #liftFirstValue: 4637697 false ) - #(122 1 #liftFirstValue: 4637698 false ) - #(184 1 #liftFirstValue: 14155779 false ) - #(184 1 #liftFirstValue: 14155780 false ) - #(188 1 #liftFirstValue: 14733313 false ) - #(184 1 #liftFirstValue: 14155777 false ) - #(184 1 #liftFirstValue: 14155778 false ) - #(187 1 #liftFirstValue: 14541825 false ) - #(188 1 #liftFirstValue: 14733314 false ) - #(187 1 #liftFirstValue: 14541826 false ) - #(188 1 #liftFirstValue: 14733315 false ) - #(187 1 #liftFirstValue: 14541827 false ) - #(187 1 #liftFirstValue: 14541828 false ) - #(188 1 #liftFirstValue: 14733316 false ) - #(187 1 #liftFirstValue: 14541829 false ) - #(188 1 #liftFirstValue: 14733317 false ) - #(187 1 #liftFirstValue: 14541830 false ) - #(188 1 #liftFirstValue: 14733318 false ) - #(188 1 #liftFirstValue: 14733319 false ) - #(188 1 #liftFirstValue: 14733320 false ) - #(188 1 #liftFirstValue: 14733322 false ) - #(188 1 #liftFirstValue: 14733321 false ) - #(188 1 #liftFirstValue: 14733323 false ) - #(188 1 #liftFirstValue: 14733324 false ) - #(241 1 #liftFirstValue: 23589889 false ) - #(294 1 #liftFirstValue: 31508481 false ) - #(222 1 #liftFirstValue: 19644417 false ) - #(223 1 #liftFirstValue: 19713036 false ) - #(192 1 #liftFirstValue: 15298567 false ) - #(223 1 #liftFirstValue: 19713028 false ) - #(222 1 #liftFirstValue: 19644418 false ) - #(223 1 #liftFirstValue: 19713029 false ) - #(262 1 #liftFirstValue: 28335106 false ) - #(192 1 #liftFirstValue: 15298566 false ) - #(223 1 #liftFirstValue: 19713030 false ) - #(223 1 #liftFirstValue: 19713031 false ) - #(262 1 #liftFirstValue: 28335107 false ) - #(192 1 #liftFirstValue: 15298564 false ) - #(241 1 #liftFirstValue: 23589891 false ) - #(192 1 #liftFirstValue: 15298565 false ) - #(241 1 #liftFirstValue: 23589892 false ) - #(192 1 #liftFirstValue: 15298562 false ) - #(192 1 #liftFirstValue: 15298563 false ) - #(192 1 #liftFirstValue: 15298561 false ) - #(118 1 #reduceActionForclass_or_interface_type1: 4357121 false ) - #(288 1 #liftFirstValue: 30880769 false ) - #(288 1 #liftFirstValue: 30880770 false ) - #(187 1 #liftFirstValue: 14541831 false ) - #(147 1 #reduceActionForvariable_declarator_id1: 8067073 false ) - #(228 1 #reduceActionForuntyped_lambda_parameter1: 20675585 false ) - #(264 1 #liftFirstValue: 28536834 false ) - #(225 1 #reduceActionForlambda_parameters3: 20356099 false ) - #(247 1 #liftFirstValue: 24410113 false ) - #(249 1 #liftFirstValue: 25084929 false ) - #(244 1 #liftFirstValue: 23917569 false ) - #(244 1 #liftFirstValue: 23917570 false ) - #(244 1 #liftFirstValue: 23917573 false ) - #(247 1 #liftFirstValue: 24410116 false ) - #(250 1 #liftFirstValue: 25478145 false ) - #(251 1 #liftFirstValue: 25766913 false ) - #(252 1 #liftFirstValue: 26173441 false ) - #(253 1 #liftFirstValue: 26789889 false ) - #(254 1 #liftFirstValue: 27068417 false ) - #(255 1 #liftFirstValue: 27217921 false ) - #(256 1 #liftFirstValue: 27375617 false ) - #(257 1 #liftFirstValue: 27551745 false ) - #(258 1 #liftFirstValue: 27735041 false ) - #(259 1 #liftFirstValue: 27922433 false ) - #(260 1 #liftFirstValue: 28160001 false ) - #(264 1 #liftFirstValue: 28536833 false ) - #(244 1 #liftFirstValue: 23917574 false ) - #(260 1 #liftFirstValue: 28160002 false ) - #(142 1 #liftFirstValue: 7398403 false ) - #(141 1 #liftFirstValue: 7255041 false ) - #(142 1 #liftFirstValue: 7398401 false ) - #(142 1 #liftFirstValue: 7398402 false ) - #(141 1 #liftFirstValue: 7255042 false ) - #(141 1 #liftFirstValue: 7255043 false ) - #(141 1 #reduceActionForclass_body_declaration4: 7255044 false ) - #(172 1 #liftFirstValue: 12513284 false ) - #(295 1 #liftFirstValue: 31549441 false ) - #(173 1 #liftFirstValue: 12658689 false ) - #(295 1 #liftFirstValue: 31549442 false ) - #(172 1 #liftFirstValue: 12513281 false ) - #(172 1 #liftFirstValue: 12513283 false ) - #(172 1 #liftFirstValue: 12513282 false ) - #(267 2 #reduceActionForannotation1: 28703745 false ) - #(125 2 #reduceActionForcompilation_unit4: 4839428 false ) - #(126 2 #reduceActionForimport_declarations2: 4969474 false ) - #(127 2 #reduceActionForimport_declarations2: 5079042 false ) - #(125 2 #reduceActionForcompilation_unit7: 4839431 false ) - #(125 2 #reduceActionForcompilation_unit6: 4839430 false ) - #(133 2 #reduceActionForimport_declarations2: 5946370 false ) - #(266 2 #reduceActionForimport_declarations2: 28645378 false ) - #(245 2 #reduceActionForpreincrement_expression1: 24195073 false ) - #(246 2 #reduceActionForpredecrement_expression1: 24301569 false ) - #(287 0 #reduceActionFortype_argument_type3: 30789635 false ) - #(284 2 #reduceActionFortype_arguments_opt3: 30469123 false ) - #(286 1 #reduceActionFortype_argument1: 30680065 false ) - #(285 1 #reduceActionFortype_arguments1: 30576641 false ) - #(207 2 #reduceActionForbreak_statement1: 17708033 false ) - #(208 2 #reduceActionForcontinue_statement1: 17816577 false ) - #(119 1 #liftFirstValue: 4420609 false ) - #(209 2 #reduceActionForreturn_statement1: 17937409 false ) - #(182 2 #reduceActionForblock1: 13975553 false ) - #(183 1 #reduceActionForimport_declarations1: 14051329 false ) - #(289 2 #reduceActionForsimple_type_name1: 30940161 false ) - #(121 2 #reduceActionForarray_type1: 4514817 false ) - #(236 1 #reduceActionFordims1: 22351873 false ) - #(185 2 #reduceActionForlocal_variable_declaration_statement1: 14281729 false ) - #(191 2 #reduceActionForexpression_statement1: 15194113 false ) - #(242 2 #reduceActionForpostincrement_expression1: 23694337 false ) - #(243 2 #reduceActionForpostdecrement_expression1: 23804929 false ) - #(263 1 #liftFirstValue: 28398596 false ) - #(263 1 #liftFirstValue: 28398602 false ) - #(263 1 #liftFirstValue: 28398594 false ) - #(263 1 #liftFirstValue: 28398597 false ) - #(263 1 #liftFirstValue: 28398598 false ) - #(263 1 #liftFirstValue: 28398595 false ) - #(263 1 #liftFirstValue: 28398599 false ) - #(263 1 #liftFirstValue: 28398593 false ) - #(263 1 #liftFirstValue: 28398600 false ) - #(263 1 #liftFirstValue: 28398601 false ) - #(263 1 #liftFirstValue: 28398603 false ) - #(263 1 #liftFirstValue: 28398604 false ) - #(121 2 #reduceActionForarray_type1: 4514818 false ) - #(293 1 #reduceActionFormodifier5: 31439873 false ) - #(293 1 #liftFirstValue: 31439874 false ) - #(292 2 #reduceActionForimport_declarations2: 31361026 false ) - #(247 2 #reduceActionForunary_expression_not_plus_minus3: 24410115 false ) - #(225 2 #reduceActionForlambda_parameters1: 20356097 false ) - #(227 1 #liftFirstValue: 20605953 false ) - #(226 1 #reduceActionFortype_arguments1: 20480001 false ) - #(227 1 #liftFirstValue: 20605954 false ) - #(244 2 #reduceActionForunary_expression3: 23917571 false ) - #(244 2 #reduceActionForunary_expression4: 23917572 false ) - #(247 2 #reduceActionForunary_expression_not_plus_minus2: 24410114 false ) - #(281 1 #reduceActionFortype_parameter1: 30142465 false ) - #(280 1 #reduceActionFortype_arguments1: 30032897 false ) - #(157 1 #reduceActionFormethod_body2: 9541634 false ) - #(149 2 #reduceActionFormethod_declaration1: 8328193 false ) - #(157 1 #liftFirstValue: 9541633 false ) - #(158 2 #reduceActionForstatic_initializer1: 9638913 false ) - #(144 1 #reduceActionFortype_arguments1: 7632897 false ) - #(145 1 #liftFirstValue: 7785474 false ) - #(145 1 #reduceActionForvariable_declarator1: 7785473 false ) - #(159 2 #reduceActionForconstructor_declaration1: 9761793 false ) - #(179 2 #reduceActionForabstract_method_declaration1: 13364225 false ) - #(174 2 #reduceActionForinterface_method_declaration1: 12857345 false ) - #(178 1 #reduceActionFormodifier5: 13307905 false ) - #(177 1 #liftFirstValue: 13230081 false ) - #(176 2 #reduceActionForimport_declarations2: 12984322 false ) - #(177 1 #liftFirstValue: 13230082 false ) - #(268 0 #reduceActionForannotation_args1: 28813313 false ) - #(274 3 #reduceActionForenum_declaration1: 29403137 false ) - #(130 3 #reduceActionForsingle_type_import_declaration1: 5415937 false ) - #(125 3 #reduceActionForcompilation_unit8: 4839432 false ) - #(223 3 #reduceActionForprimary_no_new_array3: 19713027 false ) - #(286 2 #reduceActionFortype_argument2: 30680066 false ) - #(284 3 #reduceActionFortype_arguments_opt2: 30469122 false ) - #(221 3 #reduceActionForassert_statement1: 19374081 false ) - #(207 3 #reduceActionForbreak_statement2: 17708034 false ) - #(208 3 #reduceActionForcontinue_statement2: 17816578 false ) - #(204 1 #liftFirstValue: 17383426 false ) - #(206 1 #reduceActionForstatement_expression_list1: 17505281 false ) - #(204 1 #liftFirstValue: 17383425 false ) - #(233 3 #reduceActionForarray_creation_expression1: 21781505 false ) - #(234 1 #reduceActionForimport_declarations1: 22164481 false ) - #(233 3 #reduceActionForarray_creation_expression1: 21781507 false ) - #(209 3 #reduceActionForreturn_statement2: 17937410 false ) - #(238 3 #reduceActionForfield_access2: 22462466 false ) - #(210 3 #reduceActionForthrow_statement1: 18048001 false ) - #(214 1 #reduceActionFortype_arguments1: 18666497 false ) - #(212 3 #reduceActionFortry_statement1: 18319361 false ) - #(216 1 #reduceActionForimport_declarations1: 18917377 false ) - #(212 3 #reduceActionFortry_statement3: 18319363 false ) - #(212 3 #reduceActionFortry_statement7: 18319367 false ) - #(182 3 #reduceActionForblock2: 13975554 false ) - #(183 2 #reduceActionForimport_declarations2: 14051330 false ) - #(190 3 #reduceActionForlabeled_statement1: 15085569 false ) - #(223 3 #reduceActionForprimary_no_new_array10: 19713034 false ) - #(223 3 #reduceActionForprimary_no_new_array10: 19713032 false ) - #(237 2 #reduceActionForempty_dim_expr1: 22403073 false ) - #(236 2 #reduceActionFordims2: 22351874 false ) - #(230 3 #reduceActionFormethod_reference_expression2: 20815874 false ) - #(223 3 #reduceActionForprimary_no_new_array11: 19713035 false ) - #(124 3 #reduceActionForqualified_name1: 4730881 false ) - #(223 3 #reduceActionForprimary_no_new_array10: 19713033 false ) - #(238 3 #reduceActionForfield_access1: 22462465 false ) - #(261 3 #reduceActionForassignment1: 28229633 false ) - #(186 3 #reduceActionForlocal_variable_declaration1: 14424065 false ) - #(230 3 #reduceActionFormethod_reference_expression2: 20815873 false ) - #(225 3 #reduceActionForlambda_parameters2: 20356098 false ) - #(147 3 #reduceActionForvariable_declarator_id2: 8067074 false ) - #(229 1 #liftFirstValue: 20756481 false ) - #(224 3 #reduceActionForlambda_expression1: 20256769 false ) - #(229 1 #liftFirstValue: 20756482 false ) - #(249 3 #reduceActionFormultiplicative_expression4: 25084932 false ) - #(249 3 #reduceActionFormultiplicative_expression4: 25084930 false ) - #(249 3 #reduceActionFormultiplicative_expression4: 25084931 false ) - #(250 3 #reduceActionFormultiplicative_expression4: 25478146 false ) - #(250 3 #reduceActionFormultiplicative_expression4: 25478147 false ) - #(251 3 #reduceActionFormultiplicative_expression4: 25766914 false ) - #(251 3 #reduceActionFormultiplicative_expression4: 25766915 false ) - #(251 3 #reduceActionFormultiplicative_expression4: 25766916 false ) - #(252 3 #reduceActionFormultiplicative_expression4: 26173442 false ) - #(252 3 #reduceActionFormultiplicative_expression4: 26173444 false ) - #(252 3 #reduceActionFormultiplicative_expression4: 26173445 false ) - #(252 3 #reduceActionFormultiplicative_expression4: 26173446 false ) - #(252 3 #reduceActionFormultiplicative_expression4: 26173443 false ) - #(253 3 #reduceActionFormultiplicative_expression4: 26789891 false ) - #(253 3 #reduceActionFormultiplicative_expression4: 26789890 false ) - #(254 3 #reduceActionFormultiplicative_expression4: 27068418 false ) - #(255 3 #reduceActionFormultiplicative_expression4: 27217922 false ) - #(256 3 #reduceActionFormultiplicative_expression4: 27375618 false ) - #(257 3 #reduceActionFormultiplicative_expression4: 27551746 false ) - #(258 3 #reduceActionFormultiplicative_expression4: 27735042 false ) - #(279 3 #reduceActionFortype_parameters_opt2: 29937666 false ) - #(150 3 #reduceActionFormethod_header1: 8411137 false ) - #(150 3 #reduceActionFormethod_header1: 8411141 false ) - #(143 3 #reduceActionForfield_declaration1: 7524353 false ) - #(159 3 #reduceActionForconstructor_declaration3: 9761795 false ) - #(156 1 #reduceActionFortype_arguments1: 9438209 false ) - #(155 2 #reduceActionForthrows1: 9372673 false ) - #(161 2 #reduceActionForblock1: 10046468 false ) - #(159 3 #reduceActionForconstructor_declaration2: 9761794 false ) - #(164 4 #reduceActionForannotation_interface_declaration1: 11213825 false ) - #(271 1 #liftFirstValue: 29092865 false ) - #(271 1 #liftFirstValue: 29092866 false ) - #(268 1 #reduceActionForannotation_args2: 28813314 false ) - #(269 1 #reduceActionFortype_arguments1: 28882945 false ) - #(268 1 #reduceActionFortype_arguments1: 28813315 false ) - #(271 1 #liftFirstValue: 29092867 false ) - #(135 4 #reduceActionForclass_declaration1: 6595585 false ) - #(120 1 #liftFirstValue: 4464641 false ) - #(138 1 #reduceActionFortype_arguments1: 6919169 false ) - #(137 2 #reduceActionForinterfaces1: 6848513 false ) - #(278 1 #reduceActionForenum_body_declarations1: 29865985 false ) - #(275 2 #reduceActionForenum_body1: 29520897 false ) - #(276 1 #reduceActionFortype_arguments1: 29625345 false ) - #(274 4 #reduceActionForenum_declaration2: 29403138 false ) - #(130 4 #reduceActionForsingle_type_import_declaration2: 5415938 false ) - #(163 4 #reduceActionForinterface_declaration1: 11019265 false ) - #(274 4 #reduceActionForenum_declaration3: 29403139 false ) - #(128 4 #reduceActionForpackage_declaration1: 5199873 false ) - #(287 2 #reduceActionForempty_dim_expr1: 30789633 false ) - #(287 2 #reduceActionForempty_dim_expr1: 30789634 false ) - #(285 3 #reduceActionFortype_arguments2: 30576642 false ) - #(234 2 #reduceActionForimport_declarations2: 22164482 false ) - #(233 4 #reduceActionForarray_creation_expression2: 21781506 false ) - #(233 4 #reduceActionForarray_creation_expression5: 21781509 false ) - #(233 4 #reduceActionForarray_creation_expression2: 21781508 false ) - #(233 4 #reduceActionForarray_creation_expression5: 21781510 false ) - #(231 4 #reduceActionForclass_instance_creation_expression1: 21029889 false ) - #(232 1 #reduceActionFortype_arguments1: 21680129 false ) - #(213 3 #reduceActionFortype_arguments_opt2: 18575361 false ) - #(220 2 #reduceActionForfinally1: 19300353 false ) - #(216 2 #reduceActionForimport_declarations2: 18917378 false ) - #(212 4 #reduceActionFortry_statement4: 18319364 false ) - #(212 4 #reduceActionFortry_statement2: 18319362 false ) - #(212 4 #reduceActionFortry_statement5: 18319365 false ) - #(240 4 #reduceActionForarray_access1: 23365633 false ) - #(240 4 #reduceActionForarray_access1: 23365634 false ) - #(239 4 #reduceActionFormethod_invocation1: 22743041 false ) - #(290 4 #reduceActionForqualified_type_name1: 31017985 false ) - #(248 4 #reduceActionForcast_expression1: 24614913 false ) - #(248 4 #reduceActionForcast_expression1: 24614916 false ) - #(248 4 #reduceActionForcast_expression1: 24614914 false ) - #(226 3 #reduceActionFortype_arguments2: 20480002 false ) - #(154 3 #reduceActionForformal_parameter1: 9145345 false ) - #(282 1 #reduceActionFortype_arguments1: 30244865 false ) - #(281 3 #reduceActionFortype_parameter2: 30142466 false ) - #(280 3 #reduceActionFortype_arguments2: 30032898 false ) - #(150 4 #reduceActionFormethod_header3: 8411139 false ) - #(150 4 #reduceActionFormethod_header3: 8411143 false ) - #(150 4 #reduceActionFormethod_header2: 8411138 false ) - #(150 4 #reduceActionFormethod_header2: 8411142 false ) - #(144 3 #reduceActionFortype_arguments2: 7632898 false ) - #(146 3 #reduceActionForinitialized_variable_declarator1: 7908353 false ) - #(148 1 #liftFirstValue: 8233986 false ) - #(148 1 #liftFirstValue: 8233985 false ) - #(143 4 #reduceActionForfield_declaration2: 7524354 false ) - #(159 4 #reduceActionForconstructor_declaration4: 9761796 false ) - #(161 3 #reduceActionForconstructor_body2: 10046466 false ) - #(161 3 #reduceActionForblock2: 10046467 false ) - #(160 4 #reduceActionForconstructor_declarator1: 9901057 false ) - #(153 1 #reduceActionFortype_arguments1: 9016321 false ) - #(175 4 #reduceActionForinterface_method_header1: 12955649 false ) - #(175 4 #reduceActionForinterface_method_header1: 12955651 false ) - #(165 2 #reduceActionForannotation_interface_body1: 11380737 false ) - #(167 1 #liftFirstValue: 11694082 false ) - #(167 1 #liftFirstValue: 11694083 false ) - #(166 1 #reduceActionForimport_declarations1: 11490305 false ) - #(167 1 #liftFirstValue: 11694081 false ) - #(168 1 #liftFirstValue: 11813889 false ) - #(272 2 #reduceActionForelementValueArrayInitializer1: 29182977 false ) - #(273 1 #reduceActionFortype_arguments1: 29309953 false ) - #(267 5 #reduceActionForannotation2: 28703746 false ) - #(136 2 #reduceActionForempty_dim_expr1: 6785025 false ) - #(139 2 #reduceActionForannotation_interface_body1: 7040001 false ) - #(140 1 #reduceActionForimport_declarations1: 7117825 false ) - #(135 5 #reduceActionForclass_declaration3: 6595587 false ) - #(135 5 #reduceActionForclass_declaration2: 6595586 false ) - #(275 3 #reduceActionForenum_body3: 29520899 false ) - #(278 2 #reduceActionForenum_body_declarations2: 29865986 false ) - #(277 2 #reduceActionForenum_constant1: 29728769 false ) - #(275 3 #reduceActionForenum_body5: 29520901 false ) - #(275 3 #reduceActionForenum_body2: 29520898 false ) - #(131 5 #reduceActionFortype_import_on_demand_declaration1: 5564417 false ) - #(169 2 #reduceActionForextends_interfaces1: 12112897 false ) - #(170 2 #reduceActionForannotation_interface_body1: 12265473 false ) - #(171 1 #reduceActionForimport_declarations1: 12353537 false ) - #(163 5 #reduceActionForinterface_declaration2: 11019266 false ) - #(164 5 #reduceActionForannotation_interface_declaration2: 11213826 false ) - #(135 5 #reduceActionForclass_declaration5: 6595589 false ) - #(274 5 #reduceActionForenum_declaration4: 29403140 false ) - #(163 5 #reduceActionForinterface_declaration3: 11019267 false ) - #(221 5 #reduceActionForassert_statement2: 19374082 false ) - #(205 1 #liftFirstValue: 17459201 false ) - #(206 3 #reduceActionForstatement_expression_list2: 17505282 false ) - #(193 5 #reduceActionForif_then_statement1: 15518721 false ) - #(235 3 #reduceActionFordim_expr1: 22248449 false ) - #(180 2 #reduceActionForarray_initializer4: 13477892 false ) - #(181 1 #reduceActionFortype_arguments1: 13803521 false ) - #(231 5 #reduceActionForclass_instance_creation_expression3: 21029891 false ) - #(231 5 #reduceActionForclass_instance_creation_expression2: 21029890 false ) - #(195 5 #reduceActionForswitch_statement1: 15862785 false ) - #(211 5 #reduceActionForsynchronized_statement1: 18153473 false ) - #(213 4 #reduceActionFortry_resources2: 18575362 false ) - #(214 3 #reduceActionFortype_arguments2: 18666498 false ) - #(215 3 #reduceActionFortry_resource1: 18781185 false ) - #(212 5 #reduceActionFortry_statement6: 18319366 false ) - #(201 5 #reduceActionForwhile_statement1: 16840705 false ) - #(238 5 #reduceActionForfield_access3: 22462467 false ) - #(239 5 #reduceActionFormethod_invocation2: 22743042 false ) - #(283 0 #reduceActionFortype_arguments_opt1: 30311425 false ) - #(154 4 #reduceActionForformal_parameter2: 9145346 false ) - #(259 5 #reduceActionForconditional_expression2: 27922434 false ) - #(150 5 #reduceActionFormethod_header4: 8411140 false ) - #(150 5 #reduceActionFormethod_header4: 8411144 false ) - #(152 3 #reduceActionFormethod_declarator1: 8713217 false ) - #(152 3 #reduceActionFormethod_declarator3: 8713219 false ) - #(156 3 #reduceActionFortype_arguments2: 9438210 false ) - #(161 4 #reduceActionForconstructor_body1: 10046465 false ) - #(160 5 #reduceActionForconstructor_declarator2: 9901058 false ) - #(175 5 #reduceActionForinterface_method_header2: 12955650 false ) - #(175 5 #reduceActionForinterface_method_header2: 12955652 false ) - #(165 3 #reduceActionForannotation_interface_body2: 11380738 false ) - #(166 2 #reduceActionForimport_declarations2: 11490306 false ) - #(272 3 #reduceActionForelementValueArrayInitializer2: 29182978 false ) - #(272 3 #reduceActionForelementValueArrayInitializer3: 29182979 false ) - #(270 3 #reduceActionForelementValuePair1: 28992513 false ) - #(269 3 #reduceActionFortype_arguments2: 28882946 false ) - #(139 3 #reduceActionForannotation_interface_body2: 7040002 false ) - #(140 2 #reduceActionForimport_declarations2: 7117826 false ) - #(135 6 #reduceActionForclass_declaration4: 6595588 false ) - #(138 3 #reduceActionFortype_arguments2: 6919170 false ) - #(275 4 #reduceActionForenum_body4: 29520900 false ) - #(277 3 #reduceActionForenum_constant2: 29728770 false ) - #(275 4 #reduceActionForenum_body7: 29520903 false ) - #(276 3 #reduceActionFortype_arguments2: 29625346 false ) - #(275 4 #reduceActionForenum_body6: 29520902 false ) - #(131 6 #reduceActionFortype_import_on_demand_declaration2: 5564418 false ) - #(170 3 #reduceActionForannotation_interface_body2: 12265474 false ) - #(171 2 #reduceActionForimport_declarations2: 12353538 false ) - #(169 3 #reduceActionForextends_interfaces2: 12112898 false ) - #(135 6 #reduceActionForclass_declaration7: 6595591 false ) - #(135 6 #reduceActionForclass_declaration6: 6595590 false ) - #(163 6 #reduceActionForinterface_declaration4: 11019268 false ) - #(203 6 #reduceActionForfor_statement1: 17162241 false ) - #(180 3 #reduceActionForarray_initializer3: 13477891 false ) - #(180 3 #reduceActionForarray_initializer2: 13477890 false ) - #(231 6 #reduceActionForclass_instance_creation_expression4: 21029892 false ) - #(232 3 #reduceActionFortype_arguments2: 21680130 false ) - #(239 6 #reduceActionFormethod_invocation5: 22743045 false ) - #(196 2 #reduceActionForswitch_block4: 16011268 false ) - #(197 1 #reduceActionForimport_declarations1: 16331777 false ) - #(199 1 #reduceActionForimport_declarations1: 16599041 false ) - #(219 1 #reduceActionFortype_arguments1: 19231745 false ) - #(239 6 #reduceActionFormethod_invocation3: 22743043 false ) - #(248 6 #reduceActionForcast_expression5: 24614917 false ) - #(248 6 #reduceActionForcast_expression5: 24614915 false ) - #(282 3 #reduceActionFortype_arguments2: 30244866 false ) - #(152 4 #reduceActionFormethod_declarator2: 8713218 false ) - #(162 4 #reduceActionForexplicit_constructor_invocation3: 10384387 false ) - #(162 4 #reduceActionForexplicit_constructor_invocation1: 10384385 false ) - #(153 3 #reduceActionFortype_arguments2: 9016322 false ) - #(272 4 #reduceActionForelementValueArrayInitializer4: 29182980 false ) - #(273 3 #reduceActionFortype_arguments2: 29309954 false ) - #(277 4 #reduceActionForenum_constant3: 29728771 false ) - #(275 5 #reduceActionForenum_body8: 29520904 false ) - #(135 7 #reduceActionForclass_declaration8: 6595592 false ) - #(202 7 #reduceActionFordo_statement1: 16986113 false ) - #(203 7 #reduceActionForfor_statement2: 17162242 false ) - #(203 7 #reduceActionForfor_statement3: 17162243 false ) - #(203 7 #reduceActionForfor_statement5: 17162245 false ) - #(194 7 #reduceActionForif_then_else_statement1: 15661057 false ) - #(180 4 #reduceActionForarray_initializer1: 13477889 false ) - #(181 3 #reduceActionFortype_arguments2: 13803522 false ) - #(239 7 #reduceActionFormethod_invocation6: 22743046 false ) - #(265 1 #liftFirstValue: 28600321 false ) - #(200 2 #reduceActionForswitch_label2: 16681986 false ) - #(196 3 #reduceActionForswitch_block2: 16011266 false ) - #(197 2 #reduceActionForimport_declarations2: 16331778 false ) - #(196 3 #reduceActionForswitch_block3: 16011267 false ) - #(198 2 #reduceActionForswitch_block_statement_group1: 16499713 false ) - #(199 2 #reduceActionForimport_declarations2: 16599042 false ) - #(217 5 #reduceActionForcatch_clause1: 18987009 false ) - #(218 3 #reduceActionForcatch_parameter1: 19122177 false ) - #(283 2 #reduceActionFortype_arguments_opt3: 30311427 false ) - #(239 7 #reduceActionFormethod_invocation4: 22743044 false ) - #(162 5 #reduceActionForexplicit_constructor_invocation4: 10384388 false ) - #(162 5 #reduceActionForexplicit_constructor_invocation2: 10384386 false ) - #(168 4 #reduceActionForannotation_method_declaration2: 11813890 false ) - #(168 4 #reduceActionForannotation_method_declaration2: 11813891 false ) - #(277 5 #reduceActionForenum_constant4: 29728772 false ) - #(277 5 #reduceActionForenum_constant5: 29728773 false ) - #(203 8 #reduceActionForfor_statement4: 17162244 false ) - #(203 8 #reduceActionForfor_statement6: 17162246 false ) - #(203 8 #reduceActionForfor_statement7: 17162247 false ) - #(200 3 #reduceActionForswitch_label1: 16681985 false ) - #(196 4 #reduceActionForswitch_block1: 16011265 false ) - #(219 3 #reduceActionFortype_arguments2: 19231746 false ) - #(239 8 #reduceActionFormethod_invocation7: 22743047 false ) - #(283 3 #reduceActionFortype_arguments_opt2: 30311426 false ) - #(231 8 #reduceActionForclass_instance_creation_expression5: 21029893 false ) - #(162 6 #reduceActionForexplicit_constructor_invocation7: 10384391 false ) - #(162 6 #reduceActionForexplicit_constructor_invocation5: 10384389 false ) - #(277 6 #reduceActionForenum_constant6: 29728774 false ) - #(203 9 #reduceActionForfor_statement8: 17162248 false ) - #(291 9 #reduceActionForforeach_statement1: 31140865 false ) - #(239 9 #reduceActionFormethod_invocation8: 22743048 false ) - #(231 9 #reduceActionForclass_instance_creation_expression7: 21029895 false ) - #(231 9 #reduceActionForclass_instance_creation_expression6: 21029894 false ) - #(162 7 #reduceActionForexplicit_constructor_invocation8: 10384392 false ) - #(162 7 #reduceActionForexplicit_constructor_invocation6: 10384390 false ) - #(231 10 #reduceActionForclass_instance_creation_expression8: 21029896 false ) - ). -] - -{ #category : #'generated-accessing' } -JavaParser class >> scannerClass [ - ^JavaScanner -] - -{ #category : #generated } -JavaParser class >> startingStateForblock_statement [ - ^ 2 -] - -{ #category : #generated } -JavaParser class >> startingStateForclass_body_declaration [ - ^ 6 -] - -{ #category : #generated } -JavaParser class >> startingStateForclass_or_interface_body_declaration [ - ^ 7 -] - -{ #category : #generated } -JavaParser class >> startingStateForexpression [ - ^ 3 -] - -{ #category : #generated } -JavaParser class >> startingStateForgoal [ - ^ 1 -] - -{ #category : #generated } -JavaParser class >> startingStateFormethod_declaration [ - ^ 5 -] - -{ #category : #generated } -JavaParser class >> startingStateFortype_declaration [ - ^ 4 -] - -{ #category : #generated } -JavaParser class >> symbolNames [ - ^ #('"!"' '"!="' '"%"' '"%="' '"&"' '"&&"' '"&="' '"("' '")"' '"*"' '"*="' '"+"' '"++"' '"+="' '","' '"-"' '"--"' '"-="' '"->"' '"."' '"..."' '"/"' '"/="' '":"' '"::"' '";"' '"<"' '"<<"' '"<<="' '"<="' '"="' '"=="' '">="' '">>="' '">>>="' '"?"' '"@"' '"["' '"]"' '"^"' '"^="' '"abstract"' '"assert"' '"boolean"' '"break"' '"byte"' '"case"' '"catch"' '"char"' '"class"' '"continue"' '"default"' '"do"' '"double"' '"else"' '"enum"' '"extends"' '"final"' '"finally"' '"float"' '"for"' '"if"' '"implements"' '"import"' '"instanceof"' '"int"' '"interface"' '"long"' '"native"' '"new"' '"package"' '"private"' '"protected"' '"public"' '"return"' '"short"' '"static"' '"strictfp"' '"super"' '"switch"' '"synchronized"' '"this"' '"throw"' '"throws"' '"transient"' '"try"' '"void"' '"volatile"' '"while"' '"{"' '"|"' '"|="' '"||"' '"}"' '"~"' '' '' '' '' '' '' '' '' '' '' '' '' '' 'B e g i n' 'goal' 'literal' 'type' 'primitive_type' 'numeric_type' 'integral_type' 'floating_point_type' 'reference_type' 'class_or_interface_type' 'class_type' 'interface_type' 'array_type' 'name' 'simple_name' 'qualified_name' 'compilation_unit' 'import_declarations' 'type_declarations' 'package_declaration' 'import_declaration' 'single_type_import_declaration' 'type_import_on_demand_declaration' 'type_declaration' 'modifiers' 'modifier' 'class_declaration' 'super' 'interfaces' 'interface_type_list' 'class_body' 'class_body_declarations' 'class_body_declaration' 'class_member_declaration' 'field_declaration' 'variable_declarators' 'variable_declarator' 'initialized_variable_declarator' 'variable_declarator_id' 'variable_initializer' 'method_declaration' 'method_header' 'void' 'method_declarator' 'formal_parameter_list' 'formal_parameter' 'throws' 'class_type_list' 'method_body' 'static_initializer' 'constructor_declaration' 'constructor_declarator' 'constructor_body' 'explicit_constructor_invocation' 'interface_declaration' 'annotation_interface_declaration' 'annotation_interface_body' 'annotation_interface_member_declarations' 'annotation_interface_member_declaration' 'annotation_method_declaration' 'extends_interfaces' 'interface_body' 'interface_member_declarations' 'interface_member_declaration' 'constant_declaration' 'interface_method_declaration' 'interface_method_header' 'interface_modifier*' 'interface_modifier' 'default_modifier' 'abstract_method_declaration' 'array_initializer' 'variable_initializers' 'block' 'block_statements' 'block_statement' 'local_variable_declaration_statement' 'local_variable_declaration' 'statement' 'statement_without_trailing_substatement' 'empty_statement' 'labeled_statement' 'expression_statement' 'statement_expression' 'if_then_statement' 'if_then_else_statement' 'switch_statement' 'switch_block' 'switch_block_statement_groups' 'switch_block_statement_group' 'switch_labels' 'switch_label' 'while_statement' 'do_statement' 'for_statement' 'for_init' 'for_update' 'statement_expression_list' 'break_statement' 'continue_statement' 'return_statement' 'throw_statement' 'synchronized_statement' 'try_statement' 'try_resources' 'try_resources_list' 'try_resource' 'catches' 'catch_clause' 'catch_parameter' 'catch_types' 'finally' 'assert_statement' 'primary' 'primary_no_new_array' 'lambda_expression' 'lambda_parameters' 'lambda_parameter_list' 'lambda_parameter' 'untyped_lambda_parameter' 'lambda_function' 'method_reference_expression' 'class_instance_creation_expression' 'argument_list' 'array_creation_expression' 'dim_exprs' 'dim_expr' 'dims' 'empty_dim_expr' 'field_access' 'method_invocation' 'array_access' 'postfix_expression' 'postincrement_expression' 'postdecrement_expression' 'unary_expression' 'preincrement_expression' 'predecrement_expression' 'unary_expression_not_plus_minus' 'cast_expression' 'multiplicative_expression' 'additive_expression' 'shift_expression' 'relational_expression' 'equality_expression' 'and_expression' 'exclusive_or_expression' 'inclusive_or_expression' 'conditional_and_expression' 'conditional_or_expression' 'conditional_expression' 'assignment_expression' 'assignment' 'left_hand_side' 'assignment_operator' 'expression' 'constant_expression' 'annotations' 'annotation' 'annotation_args' 'elementValuePairs' 'elementValuePair' 'elementValue' 'elementValueArrayInitializer' 'elementValues' 'enum_declaration' 'enum_body' 'enum_constants' 'enum_constant' 'enum_body_declarations' 'type_parameters_opt' 'type_parameters' 'type_parameter' 'type_bound' 'type_arguments_or_diamond_opt' 'type_arguments_opt' 'type_arguments' 'type_argument' 'type_argument_type' 'type_name' 'simple_type_name' 'qualified_type_name' 'foreach_statement' 'variable_modifiers' 'variable_modifier' 'primary_or_name' 'class_or_interface_body_declaration' 'E O F' 'error') -] - -{ #category : #generated } -JavaParser class >> symbolTypes [ - ^ #(#SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #JavaProgramFileNode #JavaProgramFileNode #JavaLiteralNode #JavaTypeNode #JavaPrimitiveTypeNode #JavaPrimitiveTypeNode #JavaPrimitiveTypeNode #JavaPrimitiveTypeNode #JavaTypeNode #JavaClassTypeNode #JavaClassTypeNode #JavaClassTypeNode #JavaArrayTypeNode #JavaNameNode #JavaNameNode #JavaQualifiedNameNode #JavaProgramFileNode #OrderedCollection #OrderedCollection #JavaPackageDeclarationNode #JavaSingleTypeImportDeclarationNode #JavaSingleTypeImportDeclarationNode #JavaTypeImportOnDemandDeclarationNode #JavaProgramNode #OrderedCollection #JavaProgramNode #JavaDeclarationNode #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #JavaProgramNode #JavaProgramNode #JavaFieldDeclarationNode #OrderedCollection #JavaVariableDeclarationNode #JavaInitializedVariableDeclarationNode #JavaProgramNode #JavaProgramNode #JavaMethodDeclarationNode #OrderedCollection #JavaVoidTypeNode #JavaProgramNode #OrderedCollection #JavaParameterNode #JavaThrowsNode #OrderedCollection #JavaProgramNode #JavaStaticInitializerNode #JavaConstructorDeclarationNode #OrderedCollection #JavaBlockNode #JavaStatementNode #JavaInterfaceDeclarationNode #JavaAnnotationInterfaceNode #OrderedCollection #OrderedCollection #JavaProgramNode #JavaAbstractMethodDeclarationNode #OrderedCollection #OrderedCollection #OrderedCollection #JavaProgramNode #JavaFieldDeclarationNode #JavaMethodDeclarationNode #OrderedCollection #OrderedCollection #JavaProgramNode #JavaModifierNode #JavaAbstractMethodDeclarationNode #JavaArrayInitializerNode #OrderedCollection #JavaBlockNode #OrderedCollection #JavaProgramNode #JavaLocalVariableDeclarationStatementNode #JavaLocalVariableDeclarationNode #JavaStatementNode #JavaStatementNode #JavaEmptyStatementNode #JavaLabeledStatementNode #JavaExpressionStatementNode #JavaExpressionNode #JavaIfStatementNode #JavaIfElseStatementNode #JavaSwitchStatementNode #JavaSwitchBlockNode #OrderedCollection #JavaSwitchBlockStatementGroupNode #OrderedCollection #JavaProgramNode #JavaWhileStatementNode #JavaDoWhileStatementNode #JavaForStatementNode #JavaProgramNode #JavaStatementExpressionListNode #JavaStatementExpressionListNode #JavaBreakStatementNode #JavaContinueStatementNode #JavaReturnStatementNode #JavaThrowStatementNode #JavaSynchronizedStatementNode #JavaTryStatementNode #OrderedCollection #OrderedCollection #JavaLocalVariableDeclarationNode #OrderedCollection #JavaCatchClauseNode #JavaCatchParameterNode #OrderedCollection #JavaFinallyClauseNode #JavaAssertStatementNode #JavaExpressionNode #JavaExpressionNode #JavaLambdaExpressionNode #OrderedCollection #OrderedCollection #JavaParameterNode #JavaParameterNode #JavaProgramNode #JavaMethodReferenceNode #JavaNewNode #OrderedCollection #JavaNewArrayNode #OrderedCollection #JavaDimensionExpressionNode #OrderedCollection #OrderedCollection #JavaFieldAccessNode #JavaMethodInvocationNode #JavaArrayAccessNode #JavaExpressionNode #JavaPostIncrementExpressionNode #JavaPostDecrementExpressionNode #JavaExpressionNode #JavaPreIncrementExpressionNode #JavaPreDecrementExpressionNode #JavaExpressionNode #JavaCastExpressionNode #JavaExpressionNode #JavaExpressionNode #JavaExpressionNode #JavaExpressionNode #JavaExpressionNode #JavaExpressionNode #JavaExpressionNode #JavaExpressionNode #JavaExpressionNode #JavaExpressionNode #JavaExpressionNode #JavaExpressionNode #JavaAssignmentNode #JavaExpressionNode #SmaCCToken #JavaExpressionNode #JavaExpressionNode #OrderedCollection #JavaAnnotationNode #OrderedCollection #OrderedCollection #JavaElementValuePairNode #JavaProgramNode #JavaElementArrayInitializerNode #OrderedCollection #JavaEnumDeclarationNode #OrderedCollection #OrderedCollection #JavaEnumConstantNode #OrderedCollection #JavaTypeParametersNode #OrderedCollection #JavaTypeParameterNode #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #JavaTypeArgumentNode #OrderedCollection #JavaTypeNameNode #JavaTypeNameNode #JavaQualifiedTypeNameNode #JavaForEachStatementNode #OrderedCollection #JavaProgramNode #JavaExpressionNode #JavaProgramNode #SmaCCToken #SmaCCErrorNode) -] - -{ #category : #generated } -JavaParser class >> transitionTable [ -^#( -#[1 0 33 0 26 0 7 0 37 0 41 0 42 0 45 0 50 0 49 0 56 0 53 0 58 0 57 0 64 0 61 0 67 0 65 0 69 0 6 0 71 0 69 0 72 0 73 0 73 0 77 0 74 0 81 0 77 0 85 0 78 0 89 0 81 0 93 0 85 0 97 0 88 0 101 0 110 0 101 0 125 0 109 0 126 0 113 0 127 0 117 0 128 0 121 0 129 0 121 0 130 0 121 0 131 0 133 0 132 0 137 0 133 0 141 0 134 0 133 0 135 0 133 0 163 0 133 0 164 0 157 1 10 0 141 1 11 0 133 1 18 0 10 1 40] -#[1 0 169 0 8 0 173 0 13 0 177 0 17 0 181 0 26 0 185 0 27 0 11 0 37 0 41 0 42 0 193 0 43 0 15 0 44 0 201 0 45 0 19 0 46 0 23 0 49 0 45 0 50 0 213 0 51 0 217 0 53 0 27 0 54 0 49 0 56 0 31 0 58 0 35 0 60 0 229 0 61 0 233 0 62 0 39 0 66 0 61 0 67 0 43 0 68 0 65 0 69 0 245 0 70 0 69 0 72 0 73 0 73 0 77 0 74 0 249 0 75 0 47 0 76 0 81 0 77 0 85 0 78 1 1 0 79 1 5 0 80 1 9 0 81 1 13 0 82 1 17 0 83 0 93 0 85 1 21 0 86 1 25 0 87 0 97 0 88 1 29 0 89 1 33 0 90 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 51 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 113 0 133 0 141 0 134 1 133 0 135 1 121 0 151 1 133 0 163 1 133 0 182 1 133 0 184 1 133 0 185 1 141 0 186 1 133 0 187 1 133 0 188 1 133 0 189 1 133 0 190 1 133 0 191 1 165 0 192 1 133 0 193 1 133 0 194 1 133 0 195 1 133 0 201 1 133 0 202 1 133 0 203 1 133 0 207 1 133 0 208 1 133 0 209 1 133 0 210 1 133 0 211 1 133 0 212 1 133 0 221 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 1 165 0 245 1 165 0 246 1 165 1 5 2 21 1 6 0 141 1 11 1 133 1 18 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 1 133 1 35 2 45 1 36 2 49 1 38] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 2 185 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 2 185 1 3 2 185 1 4 2 181 1 5 2 21 1 6 2 185 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 0 33 0 26 0 37 0 37 0 41 0 42 0 45 0 50 0 49 0 56 0 53 0 58 0 61 0 67 0 65 0 69 0 69 0 72 0 73 0 73 0 77 0 74 0 81 0 77 0 85 0 78 0 89 0 81 0 93 0 85 0 97 0 88 2 189 0 132 0 137 0 133 0 141 0 134 2 189 0 135 2 189 0 163 2 189 0 164 0 141 1 11 2 189 1 18] -#[1 2 193 0 27 0 189 0 37 0 41 0 42 0 22 0 44 0 22 0 46 0 22 0 49 0 22 0 54 0 53 0 58 0 22 0 60 0 22 0 66 0 22 0 68 0 65 0 69 0 69 0 72 0 73 0 73 0 77 0 74 0 22 0 76 0 81 0 77 0 85 0 78 0 89 0 81 0 93 0 85 0 22 0 87 0 97 0 88 0 22 0 105 2 197 0 133 0 141 0 134 2 201 0 149 2 205 0 150 0 141 1 11 2 209 1 23] -#[1 0 33 0 26 2 193 0 27 0 37 0 37 0 41 0 42 0 59 0 44 0 63 0 46 0 67 0 49 0 45 0 50 0 71 0 54 0 49 0 56 0 53 0 58 0 75 0 60 0 79 0 66 0 61 0 67 0 83 0 68 0 65 0 69 0 69 0 72 0 73 0 73 0 77 0 74 0 87 0 76 2 213 0 77 0 85 0 78 0 89 0 81 0 93 0 85 0 22 0 87 0 97 0 88 1 33 0 90 0 91 0 105 2 221 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 2 221 0 117 2 221 0 118 2 221 0 121 2 241 0 132 2 237 0 133 0 141 0 134 2 241 0 135 2 241 0 141 2 241 0 142 2 241 0 143 2 241 0 149 2 205 0 150 2 241 0 158 2 241 0 159 3 9 0 160 2 241 0 163 2 241 0 164 3 13 0 182 0 141 1 11 2 241 1 18 3 17 1 23 2 29 1 32 2 29 1 33 2 29 1 34] -#[1 0 33 0 26 0 95 0 27 0 99 0 37 0 103 0 42 0 107 0 44 0 111 0 46 0 115 0 49 0 45 0 50 0 26 0 52 0 119 0 54 0 49 0 56 0 123 0 58 0 127 0 60 0 131 0 66 0 61 0 67 0 135 0 68 0 139 0 69 0 143 0 72 0 147 0 73 0 151 0 74 0 155 0 76 0 159 0 77 0 163 0 78 0 167 0 81 0 171 0 85 0 175 0 87 0 179 0 88 1 33 0 90 0 183 0 105 2 221 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 2 221 0 117 2 221 0 118 2 221 0 121 3 21 0 132 2 237 0 133 0 141 0 134 3 21 0 135 3 61 0 141 3 61 0 142 3 29 0 143 3 61 0 149 3 33 0 150 3 61 0 158 3 61 0 159 3 9 0 160 3 21 0 163 3 21 0 164 3 61 0 172 3 61 0 173 3 61 0 174 3 49 0 175 3 53 0 176 3 61 0 179 3 13 0 182 0 141 1 11 3 21 1 18 3 17 1 23 2 29 1 32 2 29 1 33 2 29 1 34 3 61 1 39] -#[0 0 30 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[1 3 65 0 67 3 69 0 105 3 73 0 122 3 73 0 123 3 73 0 124] -#[0 0 34 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 105] -#[0 3 77 0 105] -#[0 3 81 0 105] -#[0 0 38 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 105] -#[1 3 85 0 77 3 69 0 105 3 89 0 122 3 89 0 123 3 89 0 124] -#[0 3 93 0 105] -#[0 0 42 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 105] -#[0 0 46 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 105] -#[0 0 50 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 105] -#[0 0 54 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 105] -#[0 0 58 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 105] -#[0 0 62 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 105] -#[0 0 66 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 105] -#[0 0 70 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 105] -#[0 0 74 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 105] -#[0 0 0 1 40] -#[0 0 78 1 40] -#[1 0 33 0 26 0 37 0 37 0 41 0 42 0 45 0 50 0 49 0 56 0 53 0 58 0 57 0 64 0 61 0 67 0 65 0 69 0 69 0 72 0 73 0 73 0 77 0 74 0 81 0 77 0 85 0 78 0 89 0 81 0 93 0 85 0 97 0 88 3 97 0 127 3 101 0 129 3 101 0 130 3 101 0 131 0 133 0 132 0 137 0 133 0 141 0 134 0 133 0 135 0 133 0 163 0 133 0 164 0 141 1 11 0 133 1 18 0 82 1 40] -#[1 0 33 0 26 0 37 0 37 0 41 0 42 0 45 0 50 0 49 0 56 0 53 0 58 0 61 0 67 0 65 0 69 0 69 0 72 0 73 0 73 0 77 0 74 0 81 0 77 0 85 0 78 0 89 0 81 0 93 0 85 0 97 0 88 3 105 0 132 0 137 0 133 0 141 0 134 3 105 0 135 3 105 0 163 3 105 0 164 0 141 1 11 3 105 1 18 0 86 1 40] -#[1 0 33 0 26 0 37 0 37 0 41 0 42 0 45 0 50 0 49 0 56 0 53 0 58 0 57 0 64 0 61 0 67 0 65 0 69 0 69 0 72 0 73 0 73 0 77 0 74 0 81 0 77 0 85 0 78 0 89 0 81 0 93 0 85 0 97 0 88 3 109 0 126 3 113 0 127 0 121 0 129 0 121 0 130 0 121 0 131 0 133 0 132 0 137 0 133 0 141 0 134 0 133 0 135 0 133 0 163 0 133 0 164 0 141 1 11 0 133 1 18 0 90 1 40] -#[0 0 94 0 26 0 37 0 42 0 50 0 56 0 58 0 64 0 67 0 69 0 72 0 73 0 74 0 77 0 78 0 81 0 85 0 88 1 40] -#[0 0 98 0 26 0 37 0 42 0 50 0 56 0 58 0 64 0 67 0 69 0 72 0 73 0 74 0 77 0 78 0 81 0 85 0 88 1 40] -#[0 0 102 0 26 0 37 0 42 0 50 0 56 0 58 0 64 0 67 0 69 0 72 0 73 0 74 0 77 0 78 0 81 0 85 0 88 1 40] -#[0 0 106 0 26 0 37 0 42 0 50 0 56 0 58 0 67 0 69 0 72 0 73 0 74 0 77 0 78 0 81 0 85 0 88 1 40] -#[1 3 117 0 37 0 41 0 42 3 121 0 50 3 125 0 56 0 53 0 58 3 129 0 67 0 65 0 69 0 69 0 72 0 73 0 73 0 77 0 74 0 81 0 77 0 85 0 78 0 89 0 81 0 93 0 85 0 97 0 88 3 133 0 134 3 133 1 11] -#[0 0 110 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 105] -#[0 0 114 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[0 0 118 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[0 0 122 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[1 0 189 0 37 3 137 0 71 3 141 1 11] -#[0 0 126 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 105] -#[0 0 130 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 3 145 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 3 145 1 3 3 145 1 4 2 181 1 5 2 21 1 6 3 145 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 3 157 0 244 3 157 0 245 3 157 0 246 3 157 0 247 3 157 0 248 3 157 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 3 165 0 244 3 165 0 245 3 165 0 246 3 165 0 247 3 165 0 248 3 165 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 0 134 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[1 3 169 0 36 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 253 0 76 3 173 0 96 2 217 0 105 3 177 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 3 177 0 117 3 177 0 118 3 177 0 121 3 181 1 29 3 185 1 30 2 29 1 32 2 29 1 33 2 29 1 34] -#[1 3 69 0 105 3 73 0 122 3 73 0 123 3 73 0 124] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 3 189 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 3 189 1 3 3 189 1 4 2 181 1 5 2 21 1 6 3 189 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 0 138 0 5 0 9 0 15 0 20 0 21 0 38 0 91 0 96 0 105] -#[1 3 193 0 26 3 197 0 105] -#[0 0 142 0 5 0 9 0 15 0 20 0 21 0 38 0 91 0 96 0 105] -#[0 0 146 0 5 0 9 0 15 0 20 0 21 0 38 0 91 0 96 0 105] -#[1 3 201 0 26 3 205 0 105] -#[1 0 169 0 8 0 173 0 13 0 177 0 17 0 181 0 26 0 185 0 27 0 193 0 43 0 197 0 44 0 201 0 45 0 205 0 46 0 209 0 49 0 213 0 51 0 217 0 53 0 221 0 54 0 225 0 60 0 229 0 61 0 233 0 62 0 237 0 66 0 241 0 68 0 245 0 70 0 249 0 75 0 253 0 76 1 1 0 79 1 5 0 80 3 209 0 81 1 13 0 82 1 17 0 83 1 21 0 86 1 25 0 87 1 29 0 89 1 33 0 90 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 191 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 3 213 0 182 3 213 0 187 3 213 0 188 3 213 0 189 3 213 0 190 3 213 0 191 1 165 0 192 3 213 0 193 3 213 0 194 3 213 0 195 3 213 0 201 3 213 0 202 3 213 0 203 3 213 0 207 3 213 0 208 3 213 0 209 3 213 0 210 3 213 0 211 3 213 0 212 3 213 0 221 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 1 165 0 245 1 165 0 246 1 165 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 3 213 1 35 2 49 1 38] -#[0 0 150 0 5 0 9 0 15 0 20 0 21 0 38 0 91 0 96 0 105] -#[0 0 154 0 5 0 9 0 15 0 20 0 21 0 38 0 91 0 96 0 105] -#[0 3 217 0 8] -#[0 3 221 0 8] -#[0 0 158 0 5 0 9 0 15 0 20 0 21 0 38 0 91 0 96 0 105] -#[0 0 162 0 5 0 9 0 15 0 20 0 21 0 38 0 91 0 96 0 105] -#[1 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 253 0 76 2 217 0 105 3 225 0 113 3 225 0 114 3 225 0 115 3 225 0 116 3 229 0 118 3 233 0 119 3 237 1 32 3 237 1 33 3 237 1 34] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 3 241 0 26 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 3 245 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 3 245 1 3 3 245 1 4 2 181 1 5 2 21 1 6 3 245 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 0 166 0 5 0 9 0 15 0 20 0 21 0 38 0 91 0 96 0 105] -#[0 3 249 0 20] -#[0 3 253 0 8] -#[1 4 1 0 8 0 66 0 37 0 66 0 42 0 66 0 50 0 66 0 56 0 66 0 58 0 66 0 67 0 66 0 69 0 66 0 72 0 66 0 73 0 66 0 74 0 66 0 77 0 66 0 78 0 66 0 81 0 66 0 85 0 66 0 88] -#[0 0 170 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 4 5 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 4 5 1 3 4 5 1 4 2 181 1 5 2 21 1 6 4 5 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 4 9 0 8 1 33 0 90 4 13 0 182 4 17 0 213] -#[0 0 174 0 20 0 105] -#[0 4 21 0 8] -#[1 0 169 0 8 0 173 0 13 0 177 0 17 0 181 0 26 0 185 0 27 0 11 0 37 0 41 0 42 0 193 0 43 0 15 0 44 0 201 0 45 0 19 0 46 0 23 0 49 0 45 0 50 0 213 0 51 0 217 0 53 0 27 0 54 0 49 0 56 0 31 0 58 0 35 0 60 0 229 0 61 0 233 0 62 0 39 0 66 0 61 0 67 0 43 0 68 0 65 0 69 0 245 0 70 0 69 0 72 0 73 0 73 0 77 0 74 0 249 0 75 0 47 0 76 0 81 0 77 0 85 0 78 1 1 0 79 1 5 0 80 1 9 0 81 1 13 0 82 1 17 0 83 0 93 0 85 1 21 0 86 1 25 0 87 0 97 0 88 1 29 0 89 1 33 0 90 4 25 0 94 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 51 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 113 0 133 0 141 0 134 4 33 0 135 1 121 0 151 4 33 0 163 4 33 0 182 4 29 0 183 4 33 0 184 4 33 0 185 1 141 0 186 4 33 0 187 4 33 0 188 4 33 0 189 4 33 0 190 4 33 0 191 1 165 0 192 4 33 0 193 4 33 0 194 4 33 0 195 4 33 0 201 4 33 0 202 4 33 0 203 4 33 0 207 4 33 0 208 4 33 0 209 4 33 0 210 4 33 0 211 4 33 0 212 4 33 0 221 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 1 165 0 245 1 165 0 246 1 165 1 5 2 21 1 6 0 141 1 11 4 33 1 18 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 4 33 1 35 2 45 1 36 2 49 1 38] -#[0 0 178 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 0 182 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 0 186 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 0 190 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 0 194 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 0 198 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[1 0 202 0 4 0 202 0 7 0 202 0 11 0 202 0 13 0 202 0 14 0 202 0 17 0 202 0 18 0 195 0 20 0 202 0 23 4 37 0 24 0 195 0 25 0 185 0 27 0 202 0 29 0 202 0 31 0 202 0 34 0 202 0 35 0 195 0 38 0 202 0 41 0 202 0 92 4 41 1 28] -#[0 0 206 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 4 45 0 20] -#[1 0 199 0 20 4 53 0 38 4 57 0 236 4 61 0 237] -#[0 0 214 0 5 0 9 0 15 0 20 0 21 0 38 0 91 0 96 0 105] -#[0 0 218 0 5 0 9 0 15 0 20 0 21 0 38 0 91 0 96 0 105] -#[0 0 222 0 5 0 9 0 15 0 20 0 21 0 38 0 91 0 96 0 105] -#[1 0 226 0 20 4 65 0 25] -#[0 0 230 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 20 0 21 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 0 105 1 40] -#[0 0 234 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 20 0 21 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 0 105 1 40] -#[1 0 238 0 2 0 238 0 3 0 242 0 4 0 238 0 5 0 238 0 6 0 242 0 7 0 238 0 9 0 238 0 10 0 242 0 11 0 238 0 12 0 238 0 13 0 242 0 14 0 238 0 15 0 238 0 16 0 238 0 17 0 242 0 18 0 203 0 20 0 238 0 22 0 242 0 23 0 238 0 24 0 246 0 25 0 238 0 26 0 238 0 27 0 238 0 28 0 242 0 29 0 238 0 30 0 242 0 31 0 238 0 32 0 238 0 33 0 242 0 34 0 242 0 35 0 238 0 36 4 73 0 38 0 238 0 39 0 238 0 40 0 242 0 41 0 238 0 65 0 238 0 91 0 242 0 92 0 238 0 93 0 238 0 94 0 238 0 96 0 238 0 97 0 238 0 98 0 238 1 40] -#[0 0 250 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 20 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 65 0 66 0 67 0 68 0 69 0 71 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 91 0 92 0 93 0 94 0 96 0 97 0 98 0 105 1 40] -#[0 0 254 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 20 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 65 0 66 0 67 0 68 0 69 0 71 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 91 0 92 0 93 0 94 0 96 0 97 0 98 0 105 1 40] -#[1 0 189 0 37 0 41 0 42 3 121 0 50 3 125 0 56 0 53 0 58 3 129 0 67 0 65 0 69 0 69 0 72 0 73 0 73 0 77 0 74 0 81 0 77 0 85 0 78 0 89 0 81 0 93 0 85 0 97 0 88 3 133 0 134 3 133 1 11] -#[0 1 2 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 4 77 0 20] -#[0 1 6 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 1 10 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 0 0 1 40] -#[0 1 14 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 4 81 0 26] -#[0 1 18 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 1 22 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 1 26 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 1 30 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 1 34 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 4 85 0 26] -#[0 1 38 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 1 42 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 1 46 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 1 50 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 1 54 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 1 58 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 1 62 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 1 66 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 1 70 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 1 74 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 1 78 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 1 82 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 1 86 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[1 1 90 0 2 1 90 0 3 1 90 0 5 1 90 0 6 1 90 0 9 1 90 0 10 1 90 0 12 1 90 0 13 1 90 0 15 1 90 0 16 1 90 0 17 0 207 0 20 1 90 0 22 1 90 0 24 1 94 0 25 1 90 0 26 1 90 0 27 1 90 0 28 1 90 0 30 1 90 0 32 1 90 0 33 1 90 0 36 1 90 0 39 1 90 0 40 1 90 0 65 1 90 0 91 1 90 0 93 1 90 0 94 1 90 0 96 1 90 0 97 1 90 0 98 1 90 1 40] -#[1 1 98 0 2 1 98 0 3 1 98 0 5 1 98 0 6 1 98 0 9 1 98 0 10 1 98 0 12 1 98 0 13 1 98 0 15 1 98 0 16 1 98 0 17 1 98 0 20 1 98 0 22 1 98 0 24 1 98 0 25 1 98 0 26 1 98 0 27 1 98 0 28 1 98 0 30 1 98 0 32 1 98 0 33 1 98 0 36 4 93 0 38 1 98 0 39 1 98 0 40 1 98 0 65 1 98 0 91 1 98 0 93 1 98 0 94 1 98 0 96 1 98 0 97 1 98 0 98 1 98 1 40] -#[0 1 102 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[1 1 106 0 9 1 110 0 13 1 106 0 15 1 110 0 17 1 110 0 20 1 110 0 25 1 106 0 26 1 110 0 38] -#[0 1 114 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[1 1 118 0 2 1 118 0 3 1 122 0 4 1 118 0 5 1 118 0 6 1 122 0 7 1 118 0 9 1 118 0 10 1 122 0 11 1 118 0 12 1 118 0 13 1 122 0 14 1 118 0 15 1 118 0 16 1 118 0 17 1 122 0 18 1 118 0 20 1 118 0 22 1 122 0 23 1 118 0 24 1 118 0 25 1 118 0 26 1 118 0 27 1 118 0 28 1 122 0 29 1 118 0 30 1 122 0 31 1 118 0 32 1 118 0 33 1 122 0 34 1 122 0 35 1 118 0 36 1 118 0 38 1 118 0 39 1 118 0 40 1 122 0 41 1 118 0 65 1 118 0 91 1 122 0 92 1 118 0 93 1 118 0 94 1 118 0 96 1 118 0 97 1 118 0 98 1 118 1 40] -#[1 1 126 0 9 1 130 0 13 1 126 0 15 1 130 0 17 1 130 0 20 1 130 0 25 1 126 0 26 1 130 0 38] -#[1 1 134 0 2 1 134 0 3 1 138 0 4 1 134 0 5 1 134 0 6 1 138 0 7 1 134 0 9 1 134 0 10 1 138 0 11 1 134 0 12 1 134 0 13 1 138 0 14 1 134 0 15 1 134 0 16 1 134 0 17 1 138 0 18 1 134 0 20 1 134 0 22 1 138 0 23 1 134 0 24 1 134 0 25 1 134 0 26 1 134 0 27 1 134 0 28 1 138 0 29 1 134 0 30 1 138 0 31 1 134 0 32 1 134 0 33 1 138 0 34 1 138 0 35 1 134 0 36 1 134 0 38 1 134 0 39 1 134 0 40 1 138 0 41 1 134 0 65 1 134 0 91 1 138 0 92 1 134 0 93 1 134 0 94 1 134 0 96 1 134 0 97 1 134 0 98 1 134 1 40] -#[1 4 97 0 13 4 101 0 17] -#[1 1 142 0 9 1 146 0 13 1 142 0 15 1 146 0 17 1 142 0 26] -#[1 1 150 0 9 1 154 0 13 1 150 0 15 1 154 0 17 1 150 0 26] -#[0 1 158 0 9 0 15 0 26] -#[0 1 162 0 9 0 15 0 26] -#[0 1 166 0 9 0 15 0 26] -#[0 4 153 0 4 0 7 0 11 0 14 0 18 0 23 0 29 0 31 0 34 0 35 0 41 0 92 1 7] -#[0 4 157 0 105] -#[1 1 170 0 2 1 170 0 3 1 170 0 5 1 170 0 6 1 170 0 9 1 170 0 10 1 170 0 12 1 170 0 15 1 170 0 16 0 211 0 20 1 170 0 21 1 170 0 22 1 170 0 24 1 170 0 25 1 170 0 26 1 170 0 27 1 170 0 28 1 170 0 30 1 170 0 32 1 170 0 33 1 170 0 36 4 53 0 38 1 170 0 39 1 170 0 40 1 170 0 65 1 170 0 91 1 170 0 93 1 170 0 94 1 170 0 96 1 170 0 97 1 170 0 98 1 170 0 105 4 165 0 236 4 61 0 237 1 170 1 40] -#[0 1 174 0 2 0 3 0 5 0 6 0 8 0 9 0 10 0 12 0 15 0 16 0 20 0 21 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 52 0 63 0 65 0 90 0 91 0 93 0 94 0 96 0 97 0 98 0 105 1 40] -#[0 1 178 0 2 0 3 0 5 0 6 0 8 0 9 0 10 0 12 0 15 0 16 0 20 0 21 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 52 0 63 0 65 0 90 0 91 0 93 0 94 0 96 0 97 0 98 0 105 1 40] -#[0 1 182 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[1 0 189 0 37 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 4 169 0 58 0 225 0 60 0 237 0 66 0 241 0 68 0 253 0 76 2 217 0 105 4 173 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 4 173 0 117 4 173 0 118 4 173 0 121 4 181 1 11 2 29 1 32 2 29 1 33 2 29 1 34 4 181 1 37] -#[1 4 185 0 20 4 189 0 25] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 4 193 0 244 4 193 0 245 4 193 0 246 4 193 0 247 4 193 0 248 4 193 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 2 57 0 8 4 197 0 9 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 14 0 37 0 15 0 44 0 19 0 46 0 23 0 49 0 27 0 54 0 14 0 58 0 35 0 60 0 39 0 66 0 43 0 68 0 245 0 70 0 47 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 215 0 105 1 225 0 111 1 69 0 112 4 201 0 113 4 201 0 114 4 201 0 115 4 201 0 116 4 205 0 117 4 205 0 118 4 205 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 4 217 0 154 1 221 0 222 1 225 0 223 3 145 0 224 2 85 0 225 4 213 0 226 4 217 0 227 4 221 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 3 145 1 3 3 145 1 4 2 181 1 5 2 21 1 6 3 145 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 4 225 1 36 2 49 1 38] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 4 229 0 244 4 229 0 245 4 229 0 246 4 229 0 247 4 229 0 248 4 229 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 4 233 0 244 4 233 0 245 4 233 0 246 4 233 0 247 4 233 0 248 4 233 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 4 237 0 244 4 237 0 245 4 237 0 246 4 237 0 247 4 237 0 248 4 237 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 0 202 0 2 0 202 0 3 0 202 0 4 0 195 0 5 0 202 0 6 0 202 0 7 0 219 0 9 0 202 0 10 0 202 0 11 0 202 0 12 0 202 0 13 0 202 0 14 0 223 0 15 0 202 0 16 0 202 0 17 0 202 0 18 1 186 0 19 0 195 0 20 0 202 0 22 0 202 0 23 0 202 0 24 0 195 0 25 0 202 0 26 0 227 0 27 0 202 0 28 0 202 0 29 0 202 0 30 0 202 0 31 0 202 0 32 0 202 0 33 0 202 0 34 0 202 0 35 0 202 0 36 0 219 0 38 0 202 0 39 0 202 0 40 0 202 0 41 0 202 0 65 0 202 0 91 0 202 0 92 0 202 0 93 0 202 0 94 0 202 0 96 0 202 0 97 0 202 0 98 4 41 1 28 0 202 1 40] -#[1 1 190 0 9 1 190 0 15 1 190 0 19 4 241 0 38] -#[0 1 194 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 4 245 0 19] -#[0 1 198 0 19] -#[0 1 110 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 1 130 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[1 1 202 0 2 1 202 0 3 1 202 0 5 1 202 0 6 1 202 0 9 1 202 0 10 1 202 0 12 4 97 0 13 1 202 0 15 1 202 0 16 4 101 0 17 1 202 0 22 1 202 0 24 1 202 0 26 1 202 0 27 1 202 0 28 1 202 0 30 1 202 0 32 1 202 0 33 1 202 0 36 1 202 0 39 1 202 0 40 1 202 0 65 1 202 0 91 1 202 0 93 1 202 0 94 1 202 0 96 1 202 0 97 1 202 0 98 1 202 1 40] -#[0 1 146 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 1 154 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 1 206 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 1 210 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 1 214 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 1 218 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 1 222 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[1 1 226 0 2 0 231 0 3 1 226 0 5 1 226 0 6 1 226 0 9 0 235 0 10 1 226 0 12 1 226 0 15 1 226 0 16 0 239 0 22 1 226 0 24 1 226 0 26 1 226 0 27 1 226 0 28 1 226 0 30 1 226 0 32 1 226 0 33 1 226 0 36 1 226 0 39 1 226 0 40 1 226 0 65 1 226 0 91 1 226 0 93 1 226 0 94 1 226 0 96 1 226 0 97 1 226 0 98 1 226 1 40] -#[1 1 230 0 2 1 230 0 3 1 230 0 5 1 230 0 6 1 230 0 9 1 230 0 10 0 243 0 12 1 230 0 15 0 247 0 16 1 230 0 22 1 230 0 24 1 230 0 26 1 230 0 27 1 230 0 28 1 230 0 30 1 230 0 32 1 230 0 33 1 230 0 36 1 230 0 39 1 230 0 40 1 230 0 65 1 230 0 91 1 230 0 93 1 230 0 94 1 230 0 96 1 230 0 97 1 230 0 98 1 230 1 40] -#[1 1 234 0 2 1 234 0 3 1 234 0 5 1 234 0 6 1 234 0 9 1 234 0 10 1 234 0 12 1 234 0 15 1 234 0 16 1 234 0 22 1 234 0 24 1 234 0 26 1 234 0 27 0 251 0 28 1 234 0 30 1 234 0 32 1 234 0 33 1 234 0 36 1 234 0 39 1 234 0 40 1 234 0 65 1 234 0 91 1 234 0 93 1 234 0 94 1 234 0 96 0 255 0 97 1 3 0 98 1 234 1 40] -#[1 1 238 0 2 1 238 0 3 1 238 0 5 1 238 0 6 1 238 0 9 1 238 0 10 1 238 0 12 1 238 0 15 1 238 0 16 1 238 0 22 1 238 0 24 1 238 0 26 1 7 0 27 1 238 0 28 1 11 0 30 1 238 0 32 1 15 0 33 1 238 0 36 1 238 0 39 1 238 0 40 1 19 0 65 1 238 0 91 1 238 0 93 1 238 0 94 1 23 0 96 1 238 0 97 1 238 0 98 1 238 1 40] -#[1 1 27 0 2 1 242 0 3 1 242 0 5 1 242 0 6 1 242 0 9 1 242 0 10 1 242 0 12 1 242 0 15 1 242 0 16 1 242 0 22 1 242 0 24 1 242 0 26 1 242 0 27 1 242 0 28 1 242 0 30 1 31 0 32 1 242 0 33 1 242 0 36 1 242 0 39 1 242 0 40 1 242 0 65 1 242 0 91 1 242 0 93 1 242 0 94 1 242 0 96 1 242 0 97 1 242 0 98 1 242 1 40] -#[1 1 246 0 2 1 246 0 3 1 35 0 5 1 246 0 6 1 246 0 9 1 246 0 10 1 246 0 12 1 246 0 15 1 246 0 16 1 246 0 22 1 246 0 24 1 246 0 26 1 246 0 27 1 246 0 28 1 246 0 30 1 246 0 32 1 246 0 33 1 246 0 36 1 246 0 39 1 246 0 40 1 246 0 65 1 246 0 91 1 246 0 93 1 246 0 94 1 246 0 96 1 246 0 97 1 246 0 98 1 246 1 40] -#[1 1 250 0 2 1 250 0 3 1 250 0 5 1 250 0 6 1 250 0 9 1 250 0 10 1 250 0 12 1 250 0 15 1 250 0 16 1 250 0 22 1 250 0 24 1 250 0 26 1 250 0 27 1 250 0 28 1 250 0 30 1 250 0 32 1 250 0 33 1 250 0 36 1 250 0 39 1 39 0 40 1 250 0 65 1 250 0 91 1 250 0 93 1 250 0 94 1 250 0 96 1 250 0 97 1 250 0 98 1 250 1 40] -#[1 1 254 0 2 1 254 0 3 1 254 0 5 1 254 0 6 1 254 0 9 1 254 0 10 1 254 0 12 1 254 0 15 1 254 0 16 1 254 0 22 1 254 0 24 1 254 0 26 1 254 0 27 1 254 0 28 1 254 0 30 1 254 0 32 1 254 0 33 1 254 0 36 1 254 0 39 1 254 0 40 1 254 0 65 1 43 0 91 1 254 0 93 1 254 0 94 1 254 0 96 1 254 0 97 1 254 0 98 1 254 1 40] -#[1 2 2 0 2 2 2 0 3 2 2 0 5 1 47 0 6 2 2 0 9 2 2 0 10 2 2 0 12 2 2 0 15 2 2 0 16 2 2 0 22 2 2 0 24 2 2 0 26 2 2 0 27 2 2 0 28 2 2 0 30 2 2 0 32 2 2 0 33 2 2 0 36 2 2 0 39 2 2 0 40 2 2 0 65 2 2 0 91 2 2 0 93 2 2 0 94 2 2 0 96 2 2 0 97 2 2 0 98 2 2 1 40] -#[1 2 6 0 2 2 6 0 3 2 6 0 5 2 6 0 6 2 6 0 9 2 6 0 10 2 6 0 12 2 6 0 15 2 6 0 16 2 6 0 22 2 6 0 24 2 6 0 26 2 6 0 27 2 6 0 28 2 6 0 30 2 6 0 32 2 6 0 33 1 51 0 36 2 6 0 39 2 6 0 40 2 6 0 65 2 6 0 91 1 55 0 93 2 6 0 94 2 6 0 96 2 6 0 97 2 6 0 98 2 6 1 40] -#[0 2 10 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 2 14 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 1 59 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 0 0 1 40] -#[0 0 0 1 40] -#[1 5 77 0 105 5 81 1 24 5 85 1 25] -#[1 2 193 0 27 0 189 0 37 0 41 0 42 0 22 0 44 0 22 0 46 0 22 0 49 0 22 0 54 0 53 0 58 0 22 0 60 0 22 0 66 0 22 0 68 0 65 0 69 0 69 0 72 0 73 0 73 0 77 0 74 0 22 0 76 0 81 0 77 0 85 0 78 0 89 0 81 0 93 0 85 0 22 0 87 0 97 0 88 0 22 0 105 3 133 0 134 3 133 1 11 5 89 1 23] -#[0 0 0 1 40] -#[1 5 93 0 26 1 33 0 90 5 97 0 157 5 97 0 182] -#[1 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 253 0 76 1 25 0 87 2 217 0 105 5 105 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 5 105 0 117 5 105 0 118 5 105 0 121 5 109 0 151 2 29 1 32 2 29 1 33 2 29 1 34] -#[1 0 58 0 27 0 58 0 37 0 58 0 42 0 58 0 44 0 58 0 46 0 58 0 49 0 58 0 50 0 58 0 54 0 58 0 56 0 58 0 58 0 58 0 60 0 58 0 66 0 58 0 67 0 58 0 68 0 58 0 69 0 58 0 72 0 58 0 73 0 58 0 74 0 58 0 76 0 58 0 77 0 58 0 78 0 58 0 81 0 58 0 85 0 58 0 87 0 58 0 88 1 33 0 90 0 58 0 105 5 113 0 182] -#[1 0 18 0 2 0 18 0 3 0 18 0 5 0 18 0 6 0 18 0 8 0 18 0 9 0 18 0 10 0 18 0 12 0 18 0 15 0 18 0 16 0 18 0 20 0 18 0 21 0 18 0 22 0 18 0 24 0 18 0 26 1 63 0 27 0 18 0 28 0 18 0 30 0 18 0 32 0 18 0 33 0 18 0 36 0 18 0 38 0 18 0 39 0 18 0 40 0 18 0 52 0 18 0 63 0 18 0 65 0 18 0 90 0 18 0 91 0 18 0 93 0 18 0 94 0 18 0 96 0 18 0 97 0 18 0 98 0 18 0 105 4 41 1 28 0 18 1 40] -#[1 5 117 0 105 5 121 0 144 5 125 0 145 5 125 0 146 5 133 0 147] -#[1 0 210 0 5 0 210 0 15 0 210 0 21 4 53 0 38 0 210 0 91 0 210 0 96 0 210 0 105 4 57 0 236 4 61 0 237] -#[0 0 226 0 5 0 15 0 21 0 91 0 96 0 105] -#[0 2 26 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[1 2 193 0 27 3 117 0 37 0 41 0 42 0 59 0 44 0 63 0 46 0 67 0 49 3 121 0 50 0 71 0 54 3 125 0 56 0 53 0 58 0 75 0 60 0 79 0 66 3 129 0 67 0 83 0 68 0 65 0 69 0 69 0 72 0 73 0 73 0 77 0 74 0 87 0 76 0 81 0 77 0 85 0 78 0 89 0 81 0 93 0 85 0 22 0 87 0 97 0 88 0 91 0 105 5 137 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 5 137 0 117 5 137 0 118 5 137 0 121 3 133 0 134 5 141 0 160 3 133 1 11 5 145 1 23 2 29 1 32 2 29 1 33 2 29 1 34] -#[0 0 0 1 40] -#[0 2 30 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[0 2 34 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[0 2 38 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[0 2 42 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[0 2 46 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[1 5 149 0 84 5 153 0 90 5 157 0 155 5 161 0 161] -#[0 2 50 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[1 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 253 0 76 1 25 0 87 3 153 0 105 5 105 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 5 105 0 117 5 105 0 118 5 105 0 121 5 165 0 123 5 109 0 151 2 29 1 32 2 29 1 33 2 29 1 34] -#[0 1 67 1 40] -#[0 2 58 1 40] -#[0 1 71 1 40] -#[1 5 169 0 26 1 33 0 90 5 97 0 157 5 97 0 182] -#[0 2 66 1 40] -#[0 2 70 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 94 0 105 1 40] -#[0 2 74 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 94 0 105 1 40] -#[1 1 33 0 90 5 173 0 182] -#[1 2 193 0 27 0 189 0 37 0 41 0 42 0 22 0 44 0 22 0 46 0 22 0 49 5 177 0 52 0 22 0 54 0 53 0 58 0 22 0 60 0 22 0 66 0 22 0 68 0 65 0 69 0 69 0 72 0 73 0 73 0 77 0 74 0 22 0 76 0 81 0 77 0 85 0 78 0 89 0 81 0 93 0 85 0 22 0 87 0 97 0 88 0 22 0 105 5 185 0 134 5 185 0 177 5 185 0 178 5 185 1 11 5 193 1 23] -#[0 2 78 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 94 0 105 1 40] -#[0 0 0 1 40] -#[0 5 197 0 105] -#[0 0 202 0 8 0 9 0 15 0 20 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 71 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 94 0 105] -#[1 5 201 0 8 2 82 0 9 2 82 0 15 5 205 0 20 2 82 0 26 2 82 0 27 2 82 0 37 2 82 0 42 2 82 0 44 2 82 0 46 2 82 0 49 2 82 0 50 2 82 0 52 2 82 0 54 2 82 0 56 2 82 0 58 2 82 0 60 2 82 0 66 2 82 0 67 2 82 0 68 2 82 0 69 2 82 0 71 2 82 0 72 2 82 0 73 2 82 0 74 2 82 0 76 2 82 0 77 2 82 0 78 2 82 0 81 2 82 0 85 2 82 0 87 2 82 0 88 2 82 0 94 2 82 0 105] -#[1 2 193 0 27 0 22 0 57 0 22 0 63 0 22 0 90 5 209 1 23] -#[1 5 213 0 63 5 217 0 90 5 221 0 137 5 225 1 19] -#[1 3 69 0 105 5 229 0 122 5 229 0 123 5 229 0 124] -#[1 5 233 0 20 5 237 0 26] -#[1 2 193 0 27 0 22 0 57 0 22 0 90 5 241 1 23] -#[1 0 33 0 26 0 37 0 37 0 41 0 42 0 45 0 50 0 49 0 56 0 53 0 58 0 61 0 67 0 65 0 69 0 69 0 72 0 73 0 73 0 77 0 74 0 81 0 77 0 85 0 78 0 89 0 81 0 93 0 85 0 97 0 88 3 105 0 132 0 137 0 133 0 141 0 134 3 105 0 135 3 105 0 163 3 105 0 164 0 141 1 11 3 105 1 18 2 86 1 40] -#[0 2 90 0 26 0 37 0 42 0 50 0 56 0 58 0 64 0 67 0 69 0 72 0 73 0 74 0 77 0 78 0 81 0 85 0 88 1 40] -#[0 2 94 0 26 0 37 0 42 0 50 0 56 0 58 0 67 0 69 0 72 0 73 0 74 0 77 0 78 0 81 0 85 0 88 1 40] -#[1 0 33 0 26 0 37 0 37 0 41 0 42 0 45 0 50 0 49 0 56 0 53 0 58 0 57 0 64 0 61 0 67 0 65 0 69 0 69 0 72 0 73 0 73 0 77 0 74 0 81 0 77 0 85 0 78 0 89 0 81 0 93 0 85 0 97 0 88 5 245 0 127 3 101 0 129 3 101 0 130 3 101 0 131 0 133 0 132 0 137 0 133 0 141 0 134 0 133 0 135 0 133 0 163 0 133 0 164 0 141 1 11 0 133 1 18 2 98 1 40] -#[1 0 33 0 26 0 37 0 37 0 41 0 42 0 45 0 50 0 49 0 56 0 53 0 58 0 61 0 67 0 65 0 69 0 69 0 72 0 73 0 73 0 77 0 74 0 81 0 77 0 85 0 78 0 89 0 81 0 93 0 85 0 97 0 88 3 105 0 132 0 137 0 133 0 141 0 134 3 105 0 135 3 105 0 163 3 105 0 164 0 141 1 11 3 105 1 18 2 102 1 40] -#[1 5 249 0 67 3 69 0 105 3 73 0 122 3 73 0 123 3 73 0 124] -#[0 5 253 0 105] -#[0 6 1 0 105] -#[0 6 5 0 105] -#[0 2 106 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 105] -#[1 3 69 0 105 6 9 0 122 6 9 0 123 6 9 0 124] -#[0 2 110 0 37 0 71 0 105] -#[0 6 13 0 9] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 4 201 0 113 4 201 0 114 4 201 0 115 4 201 0 116 4 205 0 117 4 205 0 118 4 205 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 3 145 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 3 145 1 3 3 145 1 4 2 181 1 5 2 21 1 6 3 145 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 0 202 0 2 0 202 0 3 0 202 0 4 0 202 0 5 0 202 0 6 0 202 0 7 0 202 0 8 0 202 0 9 0 202 0 10 0 202 0 11 0 202 0 12 0 202 0 13 0 202 0 14 0 202 0 15 0 202 0 16 0 202 0 17 0 202 0 18 0 195 0 20 0 202 0 22 0 202 0 23 0 202 0 24 0 195 0 25 0 202 0 26 0 227 0 27 0 202 0 28 0 202 0 29 0 202 0 30 0 202 0 31 0 202 0 32 0 202 0 33 0 202 0 34 0 202 0 35 0 202 0 36 0 195 0 38 0 202 0 39 0 202 0 40 0 202 0 41 0 202 0 65 0 202 0 91 0 202 0 92 0 202 0 93 0 202 0 94 0 202 0 96 0 202 0 97 0 202 0 98 0 18 0 105 4 41 1 28 0 202 1 40] -#[0 2 114 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 2 18 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 2 118 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[1 2 122 0 15 6 17 0 57 6 21 0 79 2 122 0 96 6 25 1 31] -#[0 2 126 0 2 0 3 0 5 0 6 0 8 0 9 0 10 0 12 0 15 0 16 0 20 0 21 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 52 0 63 0 65 0 90 0 91 0 93 0 94 0 96 0 97 0 98 0 105 1 40] -#[0 2 130 0 15 0 96] -#[1 6 29 0 15 6 33 0 96] -#[0 2 134 0 15 0 96] -#[1 6 37 0 24 6 41 0 26] -#[0 2 138 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 6 45 0 26] -#[0 2 142 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 6 49 0 26] -#[0 4 1 0 8] -#[0 6 53 0 89] -#[1 0 169 0 8 0 173 0 13 0 177 0 17 6 57 0 26 0 185 0 27 0 14 0 37 0 15 0 44 0 19 0 46 0 23 0 49 0 27 0 54 0 14 0 58 0 35 0 60 0 39 0 66 0 43 0 68 0 245 0 70 0 47 0 76 1 1 0 79 1 13 0 82 1 25 0 87 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 1 75 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 6 69 0 186 6 65 0 192 6 69 0 204 6 73 0 206 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 6 65 0 245 6 65 0 246 6 65 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 6 77 1 36 2 49 1 38] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 6 81 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 6 81 1 3 6 81 1 4 2 181 1 5 2 21 1 6 6 81 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 6 85 0 38 6 89 0 234 6 93 0 235 6 97 0 236 4 61 0 237] -#[1 2 146 0 8 6 85 0 38 6 101 0 234 6 93 0 235 6 105 0 236 4 61 0 237] -#[0 6 109 0 8] -#[1 1 170 0 8 1 170 0 9 1 170 0 15 4 161 0 20 1 170 0 26 1 170 0 38 1 170 0 52 1 170 0 63 1 170 0 90] -#[0 2 150 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 6 113 0 26] -#[1 0 185 0 27 1 79 0 105 6 121 1 28] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 6 125 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 6 125 1 3 6 125 1 4 2 181 1 5 2 21 1 6 6 125 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 6 129 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 6 129 1 3 6 129 1 4 2 181 1 5 2 21 1 6 6 129 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 6 133 0 26] -#[1 0 14 0 37 0 14 0 44 0 14 0 46 0 14 0 49 0 14 0 54 0 14 0 58 0 14 0 60 0 14 0 66 0 14 0 68 0 14 0 76 0 14 0 105 6 137 0 214 6 141 0 215 6 145 1 36] -#[1 6 149 0 48 6 153 0 59 6 157 0 216 6 161 0 217 6 165 0 220] -#[1 1 33 0 90 6 169 0 182] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 6 173 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 6 173 1 3 6 173 1 4 2 181 1 5 2 21 1 6 6 173 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 2 154 0 2 0 3 0 5 0 6 0 8 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 37 0 39 0 40 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 65 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 93 0 94 0 96 0 97 0 98 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[1 0 169 0 8 0 173 0 13 0 177 0 17 0 181 0 26 0 185 0 27 0 11 0 37 0 41 0 42 0 193 0 43 0 15 0 44 0 201 0 45 0 19 0 46 0 23 0 49 0 45 0 50 0 213 0 51 0 217 0 53 0 27 0 54 0 49 0 56 0 31 0 58 0 35 0 60 0 229 0 61 0 233 0 62 0 39 0 66 0 61 0 67 0 43 0 68 0 65 0 69 0 245 0 70 0 69 0 72 0 73 0 73 0 77 0 74 0 249 0 75 0 47 0 76 0 81 0 77 0 85 0 78 1 1 0 79 1 5 0 80 1 9 0 81 1 13 0 82 1 17 0 83 0 93 0 85 1 21 0 86 1 25 0 87 0 97 0 88 1 29 0 89 1 33 0 90 6 177 0 94 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 51 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 113 0 133 0 141 0 134 6 181 0 135 1 121 0 151 6 181 0 163 6 181 0 182 6 181 0 184 6 181 0 185 1 141 0 186 6 181 0 187 6 181 0 188 6 181 0 189 6 181 0 190 6 181 0 191 1 165 0 192 6 181 0 193 6 181 0 194 6 181 0 195 6 181 0 201 6 181 0 202 6 181 0 203 6 181 0 207 6 181 0 208 6 181 0 209 6 181 0 210 6 181 0 211 6 181 0 212 6 181 0 221 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 1 165 0 245 1 165 0 246 1 165 1 5 2 21 1 6 0 141 1 11 6 181 1 18 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 6 181 1 35 2 45 1 36 2 49 1 38] -#[0 2 158 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105] -#[1 0 169 0 8 0 173 0 13 0 177 0 17 0 181 0 26 0 185 0 27 0 193 0 43 0 197 0 44 0 201 0 45 0 205 0 46 0 209 0 49 0 213 0 51 0 217 0 53 0 221 0 54 0 225 0 60 0 229 0 61 0 233 0 62 0 237 0 66 0 241 0 68 0 245 0 70 0 249 0 75 0 253 0 76 1 1 0 79 1 5 0 80 3 209 0 81 1 13 0 82 1 17 0 83 1 21 0 86 1 25 0 87 1 29 0 89 1 33 0 90 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 191 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 6 185 0 182 6 185 0 187 6 185 0 188 6 185 0 189 6 185 0 190 6 185 0 191 1 165 0 192 6 185 0 193 6 185 0 194 6 185 0 195 6 185 0 201 6 185 0 202 6 185 0 203 6 185 0 207 6 185 0 208 6 185 0 209 6 185 0 210 6 185 0 211 6 185 0 212 6 185 0 221 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 1 165 0 245 1 165 0 246 1 165 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 6 185 1 35 2 49 1 38] -#[0 2 162 0 2 0 3 0 5 0 6 0 8 0 9 0 10 0 12 0 15 0 16 0 20 0 21 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 52 0 63 0 65 0 90 0 91 0 93 0 94 0 96 0 97 0 98 0 105 1 40] -#[0 6 189 0 50] -#[0 6 193 0 50] -#[0 6 197 0 39] -#[1 2 166 0 2 2 166 0 3 2 166 0 5 2 166 0 6 2 166 0 9 2 166 0 10 2 166 0 12 2 166 0 15 2 166 0 16 2 166 0 20 2 166 0 21 2 166 0 22 2 166 0 24 2 166 0 25 2 166 0 26 2 166 0 27 2 166 0 28 2 166 0 30 2 166 0 32 2 166 0 33 2 166 0 36 4 53 0 38 2 166 0 39 2 166 0 40 2 166 0 65 2 166 0 91 2 166 0 93 2 166 0 94 2 166 0 96 2 166 0 97 2 166 0 98 2 166 0 105 6 201 0 237 2 166 1 40] -#[0 2 170 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 21 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 90 0 91 0 93 0 94 0 96 0 97 0 98 0 105 1 40] -#[0 6 205 0 70] -#[1 6 209 0 79 6 213 0 82 6 217 0 105] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 6 221 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 6 221 1 3 6 221 1 4 2 181 1 5 2 21 1 6 6 221 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 6 225 0 50] -#[0 2 174 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 2 178 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 6 229 0 105] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 6 233 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 6 233 1 3 6 233 1 4 2 181 1 5 2 21 1 6 6 233 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 2 182 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 2 186 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 2 190 0 1 0 8 0 12 0 13 0 16 0 17 0 27 0 44 0 46 0 49 0 54 0 60 0 66 0 68 0 70 0 76 0 79 0 82 0 87 0 95 0 99 0 100 0 101 0 102 0 103 0 104 0 105] -#[0 2 194 0 1 0 8 0 12 0 13 0 16 0 17 0 27 0 44 0 46 0 49 0 54 0 60 0 66 0 68 0 70 0 76 0 79 0 82 0 87 0 95 0 99 0 100 0 101 0 102 0 103 0 104 0 105] -#[0 2 198 0 1 0 8 0 12 0 13 0 16 0 17 0 27 0 44 0 46 0 49 0 54 0 60 0 66 0 68 0 70 0 76 0 79 0 82 0 87 0 95 0 99 0 100 0 101 0 102 0 103 0 104 0 105] -#[0 2 202 0 1 0 8 0 12 0 13 0 16 0 17 0 27 0 44 0 46 0 49 0 54 0 60 0 66 0 68 0 70 0 76 0 79 0 82 0 87 0 95 0 99 0 100 0 101 0 102 0 103 0 104 0 105] -#[0 2 206 0 1 0 8 0 12 0 13 0 16 0 17 0 27 0 44 0 46 0 49 0 54 0 60 0 66 0 68 0 70 0 76 0 79 0 82 0 87 0 95 0 99 0 100 0 101 0 102 0 103 0 104 0 105] -#[0 2 210 0 1 0 8 0 12 0 13 0 16 0 17 0 27 0 44 0 46 0 49 0 54 0 60 0 66 0 68 0 70 0 76 0 79 0 82 0 87 0 95 0 99 0 100 0 101 0 102 0 103 0 104 0 105] -#[0 2 214 0 1 0 8 0 12 0 13 0 16 0 17 0 27 0 44 0 46 0 49 0 54 0 60 0 66 0 68 0 70 0 76 0 79 0 82 0 87 0 95 0 99 0 100 0 101 0 102 0 103 0 104 0 105] -#[0 2 218 0 1 0 8 0 12 0 13 0 16 0 17 0 27 0 44 0 46 0 49 0 54 0 60 0 66 0 68 0 70 0 76 0 79 0 82 0 87 0 95 0 99 0 100 0 101 0 102 0 103 0 104 0 105] -#[0 2 222 0 1 0 8 0 12 0 13 0 16 0 17 0 27 0 44 0 46 0 49 0 54 0 60 0 66 0 68 0 70 0 76 0 79 0 82 0 87 0 95 0 99 0 100 0 101 0 102 0 103 0 104 0 105] -#[0 2 226 0 1 0 8 0 12 0 13 0 16 0 17 0 27 0 44 0 46 0 49 0 54 0 60 0 66 0 68 0 70 0 76 0 79 0 82 0 87 0 95 0 99 0 100 0 101 0 102 0 103 0 104 0 105] -#[0 2 230 0 1 0 8 0 12 0 13 0 16 0 17 0 27 0 44 0 46 0 49 0 54 0 60 0 66 0 68 0 70 0 76 0 79 0 82 0 87 0 95 0 99 0 100 0 101 0 102 0 103 0 104 0 105] -#[0 2 234 0 1 0 8 0 12 0 13 0 16 0 17 0 27 0 44 0 46 0 49 0 54 0 60 0 66 0 68 0 70 0 76 0 79 0 82 0 87 0 95 0 99 0 100 0 101 0 102 0 103 0 104 0 105] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 6 237 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 6 237 1 3 6 237 1 4 2 181 1 5 2 21 1 6 6 237 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 6 241 0 8] -#[0 6 245 0 105] -#[1 2 238 0 2 2 238 0 3 2 238 0 5 2 238 0 6 2 238 0 9 2 238 0 10 2 238 0 12 2 238 0 15 2 238 0 16 2 238 0 20 2 238 0 21 2 238 0 22 2 238 0 24 2 238 0 25 2 238 0 26 2 238 0 27 2 238 0 28 2 238 0 30 2 238 0 32 2 238 0 33 2 238 0 36 4 53 0 38 2 238 0 39 2 238 0 40 2 238 0 65 2 238 0 91 2 238 0 93 2 238 0 94 2 238 0 96 2 238 0 97 2 238 0 98 2 238 0 105 6 201 0 237 2 238 1 40] -#[0 2 242 0 37 0 44 0 46 0 49 0 54 0 58 0 60 0 66 0 68 0 76 0 105] -#[1 5 117 0 105 6 249 0 144 5 125 0 145 5 125 0 146 5 133 0 147] -#[0 2 246 0 37 0 44 0 46 0 49 0 54 0 58 0 60 0 66 0 68 0 76 0 105] -#[0 2 250 0 37 0 44 0 46 0 49 0 54 0 58 0 60 0 66 0 68 0 76 0 105] -#[1 0 185 0 27 6 253 0 70 0 18 0 105 7 1 1 28] -#[0 7 5 0 105] -#[0 2 254 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 3 2 0 19] -#[1 7 9 0 9 0 199 0 20 4 53 0 38 4 57 0 236 4 61 0 237] -#[1 7 13 0 5 7 17 0 9 0 226 0 20 4 65 0 25] -#[0 3 6 0 9 0 15] -#[1 7 21 0 9 7 25 0 15] -#[0 3 10 0 9 0 15] -#[1 3 14 0 9 3 14 0 15 1 198 0 19] -#[1 0 189 0 37 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 4 169 0 58 0 225 0 60 0 237 0 66 0 241 0 68 0 253 0 76 2 217 0 105 7 29 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 7 29 0 117 7 29 0 118 7 29 0 121 4 181 1 11 2 29 1 32 2 29 1 33 2 29 1 34 4 181 1 37] -#[0 3 18 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 3 22 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 3 26 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 7 33 0 39] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 1 33 0 90 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 7 41 0 182 1 221 0 222 1 225 0 223 7 41 0 224 2 85 0 225 2 89 0 228 7 41 0 229 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 7 41 1 3 7 41 1 4 2 181 1 5 2 21 1 6 7 41 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 7 49 0 244 7 49 0 245 7 49 0 246 7 49 0 247 7 49 0 248 7 49 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 7 53 0 244 7 53 0 245 7 53 0 246 7 53 0 247 7 53 0 248 7 53 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 7 57 0 244 7 57 0 245 7 57 0 246 7 57 0 247 7 57 0 248 7 57 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 7 61 0 244 7 61 0 245 7 61 0 246 7 61 0 247 7 61 0 248 7 61 0 249 7 61 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 7 65 0 244 7 65 0 245 7 65 0 246 7 65 0 247 7 65 0 248 7 65 0 249 7 65 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 7 69 0 250 2 133 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 7 73 0 250 2 133 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 7 77 0 250 2 133 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 7 81 0 251 2 133 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 7 85 0 251 2 133 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 7 89 0 251 2 133 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 253 0 76 2 217 0 105 7 93 0 113 7 93 0 114 7 93 0 115 7 93 0 116 7 97 0 117 7 97 0 118 7 97 0 121 2 29 1 32 2 29 1 33 2 29 1 34] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 7 101 0 251 2 133 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 7 105 0 252 2 133 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 7 109 0 252 2 133 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 7 113 0 253 2 133 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 7 117 0 254 2 133 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 7 121 0 255 2 133 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 7 125 1 0 2 133 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 7 129 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 7 129 1 3 7 129 1 4 2 181 1 5 2 21 1 6 7 129 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 7 133 1 1 2 133 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 3 30 0 15 7 137 0 57 3 30 0 96] -#[1 7 141 0 15 7 145 0 96] -#[0 3 34 0 15 0 96] -#[1 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 253 0 76 1 25 0 87 2 217 0 105 7 149 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 7 149 0 117 7 149 0 118 7 149 0 121 7 153 0 151 2 29 1 32 2 29 1 33 2 29 1 34] -#[0 3 38 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[0 3 42 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[0 3 46 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[1 7 157 0 105 7 161 0 152] -#[1 7 157 0 105 7 165 0 152] -#[0 3 50 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[0 1 186 0 9 0 15 0 24 0 26 0 31 0 38] -#[1 7 169 0 15 7 173 0 26] -#[0 3 54 0 15 0 26] -#[0 3 58 0 15 0 26] -#[1 3 62 0 15 3 62 0 26 7 177 0 31 4 241 0 38] -#[1 5 117 0 105 7 181 0 144 5 125 0 145 5 125 0 146 5 133 0 147] -#[1 5 149 0 84 5 153 0 90 7 185 0 155 7 189 0 161] -#[1 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 253 0 76 1 25 0 87 3 153 0 105 7 149 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 7 149 0 117 7 149 0 118 7 149 0 121 5 165 0 123 7 153 0 151 2 29 1 32 2 29 1 33 2 29 1 34] -#[1 2 217 0 105 7 197 0 118 7 197 0 119 7 201 0 156 3 237 1 32 3 237 1 33 3 237 1 34] -#[1 0 169 0 8 0 173 0 13 0 177 0 17 0 181 0 26 0 185 0 27 0 11 0 37 0 41 0 42 0 193 0 43 0 15 0 44 0 201 0 45 0 19 0 46 0 23 0 49 0 45 0 50 0 213 0 51 0 217 0 53 0 27 0 54 0 49 0 56 0 31 0 58 0 35 0 60 0 229 0 61 0 233 0 62 0 39 0 66 0 61 0 67 0 43 0 68 0 65 0 69 0 245 0 70 0 69 0 72 0 73 0 73 0 77 0 74 0 249 0 75 0 47 0 76 0 81 0 77 0 85 0 78 7 205 0 79 1 5 0 80 1 9 0 81 7 209 0 82 1 17 0 83 0 93 0 85 1 21 0 86 1 25 0 87 0 97 0 88 1 29 0 89 1 33 0 90 7 213 0 94 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 51 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 113 0 133 0 141 0 134 4 33 0 135 1 121 0 151 7 217 0 162 4 33 0 163 4 33 0 182 7 221 0 183 4 33 0 184 4 33 0 185 1 141 0 186 4 33 0 187 4 33 0 188 4 33 0 189 4 33 0 190 4 33 0 191 1 165 0 192 4 33 0 193 4 33 0 194 4 33 0 195 4 33 0 201 4 33 0 202 4 33 0 203 4 33 0 207 4 33 0 208 4 33 0 209 4 33 0 210 4 33 0 211 4 33 0 212 4 33 0 221 7 225 0 222 1 225 0 223 1 225 0 230 1 233 0 231 7 225 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 1 165 0 245 1 165 0 246 1 165 1 5 2 21 1 6 0 141 1 11 4 33 1 18 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 4 33 1 35 2 45 1 36 2 49 1 38] -#[1 5 153 0 90 7 229 0 161] -#[0 3 66 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[0 7 233 0 8] -#[0 1 83 1 40] -#[0 3 74 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 94 0 105 1 40] -#[0 3 78 0 27 0 37 0 42 0 44 0 46 0 49 0 52 0 54 0 58 0 60 0 66 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 105] -#[0 3 82 0 27 0 37 0 42 0 44 0 46 0 49 0 52 0 54 0 58 0 60 0 66 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 105] -#[0 3 86 0 27 0 37 0 42 0 44 0 46 0 49 0 52 0 54 0 58 0 60 0 66 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 105] -#[0 3 90 0 27 0 37 0 42 0 44 0 46 0 49 0 52 0 54 0 58 0 60 0 66 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 105] -#[1 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 253 0 76 1 25 0 87 2 217 0 105 7 237 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 7 237 0 117 7 237 0 118 7 237 0 121 7 241 0 151 2 29 1 32 2 29 1 33 2 29 1 34] -#[1 7 245 0 90 7 249 0 165] -#[1 2 53 0 1 3 149 0 8 3 94 0 9 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 189 0 37 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 7 253 0 90 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 1 87 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 8 25 1 3 2 133 1 5 2 21 1 6 8 25 1 11 8 13 1 12 8 17 1 13 8 21 1 14 8 25 1 15 8 25 1 16 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 6 217 0 105] -#[1 8 33 0 57 5 213 0 63 8 37 0 90 8 41 0 136 8 45 0 137 8 49 0 139] -#[1 2 217 0 105 8 57 0 118 8 57 0 120 8 61 0 138 3 237 1 32 3 237 1 33 3 237 1 34] -#[1 8 65 0 15 8 69 0 26 0 6 0 37 8 73 0 94 0 6 0 105 8 77 1 10 8 81 1 20 8 85 1 21 8 89 1 22] -#[1 5 217 0 90 8 93 1 19] -#[0 3 98 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[1 8 97 0 20 8 101 0 26] -#[1 8 105 0 10 6 217 0 105] -#[0 3 102 0 26 0 37 0 42 0 50 0 56 0 58 0 64 0 67 0 69 0 72 0 73 0 74 0 77 0 78 0 81 0 85 0 88 1 40] -#[1 8 109 0 57 8 113 0 90 8 117 0 169 8 121 0 170] -#[1 0 33 0 26 0 37 0 37 0 41 0 42 0 45 0 50 0 49 0 56 0 53 0 58 0 61 0 67 0 65 0 69 0 69 0 72 0 73 0 73 0 77 0 74 0 81 0 77 0 85 0 78 0 89 0 81 0 93 0 85 0 97 0 88 3 105 0 132 0 137 0 133 0 141 0 134 3 105 0 135 3 105 0 163 3 105 0 164 0 141 1 11 3 105 1 18 3 106 1 40] -#[0 8 125 0 105] -#[1 2 193 0 27 0 22 0 57 0 22 0 63 0 22 0 90 8 129 1 23] -#[1 5 213 0 63 5 217 0 90 8 133 0 137 8 137 1 19] -#[1 2 193 0 27 0 22 0 57 0 22 0 90 8 141 1 23] -#[1 5 205 0 20 8 145 0 26] -#[0 3 110 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[1 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 253 0 76 2 217 0 105 8 149 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 8 149 0 117 8 149 0 118 8 149 0 121 2 29 1 32 2 29 1 33 2 29 1 34] -#[1 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 253 0 76 2 217 0 105 8 153 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 8 153 0 117 8 153 0 118 8 153 0 121 2 29 1 32 2 29 1 33 2 29 1 34] -#[0 3 114 0 15 0 96] -#[1 3 169 0 36 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 253 0 76 2 217 0 105 3 177 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 3 177 0 117 3 177 0 118 3 177 0 121 8 157 1 30 2 29 1 32 2 29 1 33 2 29 1 34] -#[0 3 118 0 2 0 3 0 5 0 6 0 8 0 9 0 10 0 12 0 15 0 16 0 20 0 21 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 52 0 63 0 65 0 90 0 91 0 93 0 94 0 96 0 97 0 98 0 105 1 40] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 8 161 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 8 161 1 3 8 161 1 4 2 181 1 5 2 21 1 6 8 161 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 3 122 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 3 126 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 3 130 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 8 165 0 8] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 8 169 0 26 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 8 173 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 8 173 1 3 8 173 1 4 2 181 1 5 2 21 1 6 8 173 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 3 134 0 26] -#[0 3 138 0 9 0 15 0 26] -#[0 8 177 0 26] -#[1 8 181 0 15 3 142 0 26] -#[1 0 189 0 37 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 4 169 0 58 0 225 0 60 0 237 0 66 0 241 0 68 0 253 0 76 2 217 0 105 8 185 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 8 185 0 117 8 185 0 118 8 185 0 121 4 181 1 11 2 29 1 32 2 29 1 33 2 29 1 34 4 181 1 37] -#[0 8 189 0 9] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 6 197 0 39 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 8 193 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 8 193 1 3 8 193 1 4 2 181 1 5 2 21 1 6 8 193 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 3 146 0 2 3 146 0 3 3 146 0 5 3 146 0 6 3 146 0 9 3 146 0 10 3 146 0 12 3 146 0 13 3 146 0 15 3 146 0 16 3 146 0 17 3 146 0 20 3 146 0 22 3 146 0 24 3 146 0 25 3 146 0 26 3 146 0 27 3 146 0 28 3 146 0 30 3 146 0 32 3 146 0 33 3 146 0 36 6 85 0 38 3 146 0 39 3 146 0 40 3 146 0 65 3 146 0 91 3 146 0 93 3 146 0 94 3 146 0 96 3 146 0 97 3 146 0 98 8 197 0 235 8 201 0 236 4 61 0 237 3 146 1 40] -#[0 3 150 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[1 4 53 0 38 8 205 0 90 8 209 0 180 6 201 0 237] -#[1 3 154 0 2 3 154 0 3 3 154 0 5 3 154 0 6 3 154 0 9 3 154 0 10 3 154 0 12 3 154 0 13 3 154 0 15 3 154 0 16 3 154 0 17 3 154 0 20 3 154 0 22 3 154 0 24 3 154 0 25 3 154 0 26 3 154 0 27 3 154 0 28 3 154 0 30 3 154 0 32 3 154 0 33 3 154 0 36 6 85 0 38 3 154 0 39 3 154 0 40 3 154 0 65 3 154 0 91 3 154 0 93 3 154 0 94 3 154 0 96 3 154 0 97 3 154 0 98 8 197 0 235 8 213 0 236 4 61 0 237 3 154 1 40] -#[1 4 53 0 38 8 205 0 90 8 217 0 180 6 201 0 237] -#[1 2 53 0 1 2 57 0 8 8 221 0 9 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 8 229 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 8 225 0 232 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 8 229 1 3 8 229 1 4 2 181 1 5 2 21 1 6 8 229 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 3 158 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 3 162 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 20 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 65 0 91 0 92 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 8 233 0 105] -#[0 8 237 0 9] -#[0 8 241 0 9] -#[0 3 166 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[1 8 245 0 9 8 249 0 26] -#[0 3 170 0 9 0 26] -#[1 0 189 0 37 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 4 169 0 58 0 225 0 60 0 237 0 66 0 241 0 68 0 253 0 76 2 217 0 105 8 253 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 8 253 0 117 8 253 0 118 8 253 0 121 4 181 1 11 2 29 1 32 2 29 1 33 2 29 1 34 4 181 1 37] -#[0 9 1 0 8] -#[1 1 33 0 90 9 5 0 182] -#[1 3 174 0 8 3 174 0 13 3 174 0 17 3 174 0 26 3 174 0 27 3 174 0 37 3 174 0 42 3 174 0 43 3 174 0 44 3 174 0 45 3 174 0 46 3 174 0 47 6 149 0 48 3 174 0 49 3 174 0 50 3 174 0 51 3 174 0 52 3 174 0 53 3 174 0 54 3 174 0 55 3 174 0 56 3 174 0 58 6 153 0 59 3 174 0 60 3 174 0 61 3 174 0 62 3 174 0 66 3 174 0 67 3 174 0 68 3 174 0 69 3 174 0 70 3 174 0 72 3 174 0 73 3 174 0 74 3 174 0 75 3 174 0 76 3 174 0 77 3 174 0 78 3 174 0 79 3 174 0 80 3 174 0 81 3 174 0 82 3 174 0 83 3 174 0 85 3 174 0 86 3 174 0 87 3 174 0 88 3 174 0 89 3 174 0 90 3 174 0 94 3 174 0 99 3 174 0 100 3 174 0 101 3 174 0 102 3 174 0 103 3 174 0 104 3 174 0 105 9 9 0 217 9 13 0 220 3 174 1 40] -#[0 3 178 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 3 182 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[1 3 186 0 8 3 186 0 13 3 186 0 17 3 186 0 26 3 186 0 27 3 186 0 37 3 186 0 42 3 186 0 43 3 186 0 44 3 186 0 45 3 186 0 46 3 186 0 47 6 149 0 48 3 186 0 49 3 186 0 50 3 186 0 51 3 186 0 52 3 186 0 53 3 186 0 54 3 186 0 55 3 186 0 56 3 186 0 58 6 153 0 59 3 186 0 60 3 186 0 61 3 186 0 62 3 186 0 66 3 186 0 67 3 186 0 68 3 186 0 69 3 186 0 70 3 186 0 72 3 186 0 73 3 186 0 74 3 186 0 75 3 186 0 76 3 186 0 77 3 186 0 78 3 186 0 79 3 186 0 80 3 186 0 81 3 186 0 82 3 186 0 83 3 186 0 85 3 186 0 86 3 186 0 87 3 186 0 88 3 186 0 89 3 186 0 90 3 186 0 94 3 186 0 99 3 186 0 100 3 186 0 101 3 186 0 102 3 186 0 103 3 186 0 104 3 186 0 105 9 17 0 216 6 161 0 217 9 21 0 220 3 186 1 40] -#[0 9 25 0 9] -#[0 3 190 0 2 0 3 0 5 0 6 0 8 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 37 0 39 0 40 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 65 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 93 0 94 0 96 0 97 0 98 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 3 194 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105] -#[0 3 198 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 3 202 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 3 206 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 3 210 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 21 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 90 0 91 0 93 0 94 0 96 0 97 0 98 0 105 1 40] -#[0 3 214 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 21 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 90 0 91 0 93 0 94 0 96 0 97 0 98 0 105 1 40] -#[0 3 218 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 9 29 0 20] -#[0 3 222 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 3 226 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 20 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 65 0 66 0 67 0 68 0 69 0 71 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 91 0 92 0 93 0 94 0 96 0 97 0 98 0 105 1 40] -#[0 9 33 0 39] -#[0 3 230 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 3 234 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 20 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 65 0 91 0 92 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 9 37 0 39] -#[0 3 238 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[1 2 53 0 1 2 57 0 8 9 41 0 9 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 8 229 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 9 45 0 232 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 8 229 1 3 8 229 1 4 2 181 1 5 2 21 1 6 8 229 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 0 18 0 2 0 18 0 3 0 18 0 5 0 18 0 6 0 18 0 8 0 18 0 9 0 18 0 10 0 18 0 12 0 18 0 15 0 18 0 16 0 18 0 20 0 18 0 21 0 18 0 22 0 18 0 24 0 18 0 25 0 18 0 26 1 63 0 27 0 18 0 28 0 18 0 30 0 18 0 32 0 18 0 33 0 18 0 36 0 18 0 38 0 18 0 39 0 18 0 40 0 18 0 52 0 18 0 63 0 18 0 65 0 18 0 90 0 18 0 91 0 18 0 93 0 18 0 94 0 18 0 96 0 18 0 97 0 18 0 98 0 18 0 105 9 49 1 28 0 18 1 40] -#[1 7 169 0 15 3 242 0 26] -#[1 0 185 0 27 0 18 0 105 9 53 1 28] -#[0 9 57 0 105] -#[0 3 246 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 9 61 0 244 9 61 0 245 9 61 0 246 9 61 0 247 9 61 0 248 9 61 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 217 0 105 9 65 0 118 9 65 0 120 3 237 1 32 3 237 1 33 3 237 1 34] -#[1 2 53 0 1 2 57 0 8 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 9 69 0 122 9 69 0 123 9 69 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 9 73 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 225 0 238 1 225 0 239 1 225 0 240 2 101 0 241 2 101 0 242 2 101 0 243 9 85 0 247 9 85 0 248 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 3 250 0 19] -#[1 0 14 0 37 0 14 0 44 0 14 0 46 0 14 0 49 0 14 0 54 0 14 0 58 0 14 0 60 0 14 0 66 0 14 0 68 0 14 0 76 1 91 0 105 2 77 0 147 9 89 0 154 9 89 0 227 9 89 0 228 4 225 1 36] -#[1 9 97 0 21 5 117 0 105 9 101 0 147] -#[0 3 254 0 9 0 15 0 19 0 24 0 26 0 31 0 38] -#[0 4 2 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 4 6 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 4 10 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 4 14 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 4 18 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 4 22 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[1 4 26 0 2 1 95 0 3 4 26 0 5 4 26 0 6 4 26 0 9 1 99 0 10 4 26 0 12 4 26 0 15 4 26 0 16 1 103 0 22 4 26 0 24 4 26 0 26 4 26 0 27 4 26 0 28 4 26 0 30 4 26 0 32 4 26 0 33 4 26 0 36 4 26 0 39 4 26 0 40 4 26 0 65 4 26 0 91 4 26 0 93 4 26 0 94 4 26 0 96 4 26 0 97 4 26 0 98 4 26 1 40] -#[1 4 30 0 2 1 107 0 3 4 30 0 5 4 30 0 6 4 30 0 9 1 111 0 10 4 30 0 12 4 30 0 15 4 30 0 16 1 115 0 22 4 30 0 24 4 30 0 26 4 30 0 27 4 30 0 28 4 30 0 30 4 30 0 32 4 30 0 33 4 30 0 36 4 30 0 39 4 30 0 40 4 30 0 65 4 30 0 91 4 30 0 93 4 30 0 94 4 30 0 96 4 30 0 97 4 30 0 98 4 30 1 40] -#[1 4 34 0 2 4 34 0 3 4 34 0 5 4 34 0 6 4 34 0 9 4 34 0 10 1 119 0 12 4 34 0 15 1 123 0 16 4 34 0 22 4 34 0 24 4 34 0 26 4 34 0 27 4 34 0 28 4 34 0 30 4 34 0 32 4 34 0 33 4 34 0 36 4 34 0 39 4 34 0 40 4 34 0 65 4 34 0 91 4 34 0 93 4 34 0 94 4 34 0 96 4 34 0 97 4 34 0 98 4 34 1 40] -#[1 4 38 0 2 4 38 0 3 4 38 0 5 4 38 0 6 4 38 0 9 4 38 0 10 1 127 0 12 4 38 0 15 1 131 0 16 4 38 0 22 4 38 0 24 4 38 0 26 4 38 0 27 4 38 0 28 4 38 0 30 4 38 0 32 4 38 0 33 4 38 0 36 4 38 0 39 4 38 0 40 4 38 0 65 4 38 0 91 4 38 0 93 4 38 0 94 4 38 0 96 4 38 0 97 4 38 0 98 4 38 1 40] -#[1 4 42 0 2 4 42 0 3 4 42 0 5 4 42 0 6 4 42 0 9 4 42 0 10 1 135 0 12 4 42 0 15 1 139 0 16 4 42 0 22 4 42 0 24 4 42 0 26 4 42 0 27 4 42 0 28 4 42 0 30 4 42 0 32 4 42 0 33 4 42 0 36 4 42 0 39 4 42 0 40 4 42 0 65 4 42 0 91 4 42 0 93 4 42 0 94 4 42 0 96 4 42 0 97 4 42 0 98 4 42 1 40] -#[1 4 46 0 2 4 46 0 3 4 46 0 5 4 46 0 6 4 46 0 9 4 46 0 10 4 46 0 12 4 46 0 15 4 46 0 16 4 46 0 22 4 46 0 24 4 46 0 26 4 46 0 27 1 143 0 28 4 46 0 30 4 46 0 32 4 46 0 33 4 46 0 36 4 46 0 39 4 46 0 40 4 46 0 65 4 46 0 91 4 46 0 93 4 46 0 94 4 46 0 96 1 147 0 97 1 151 0 98 4 46 1 40] -#[1 4 50 0 2 4 50 0 3 4 50 0 5 4 50 0 6 4 50 0 9 4 50 0 10 4 50 0 12 4 50 0 15 4 50 0 16 4 50 0 22 4 50 0 24 4 50 0 26 4 50 0 27 1 155 0 28 4 50 0 30 4 50 0 32 4 50 0 33 4 50 0 36 4 50 0 39 4 50 0 40 4 50 0 65 4 50 0 91 4 50 0 93 4 50 0 94 4 50 0 96 1 159 0 97 1 163 0 98 4 50 1 40] -#[1 4 54 0 2 4 54 0 3 4 54 0 5 4 54 0 6 4 54 0 9 4 54 0 10 4 54 0 12 4 54 0 15 4 54 0 16 4 54 0 22 4 54 0 24 4 54 0 26 4 54 0 27 1 167 0 28 4 54 0 30 4 54 0 32 4 54 0 33 4 54 0 36 4 54 0 39 4 54 0 40 4 54 0 65 4 54 0 91 4 54 0 93 4 54 0 94 4 54 0 96 1 171 0 97 1 175 0 98 4 54 1 40] -#[1 4 53 0 38 4 57 0 236 4 61 0 237] -#[0 4 58 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[1 4 62 0 2 4 62 0 3 4 62 0 5 4 62 0 6 4 62 0 9 4 62 0 10 4 62 0 12 4 62 0 15 4 62 0 16 4 62 0 22 4 62 0 24 4 62 0 26 4 62 0 27 1 179 0 28 4 62 0 30 4 62 0 32 4 62 0 33 4 62 0 36 4 62 0 39 4 62 0 40 4 62 0 65 4 62 0 91 4 62 0 93 4 62 0 94 4 62 0 96 1 183 0 97 1 187 0 98 4 62 1 40] -#[1 4 66 0 2 4 66 0 3 4 66 0 5 4 66 0 6 4 66 0 9 4 66 0 10 4 66 0 12 4 66 0 15 4 66 0 16 4 66 0 22 4 66 0 24 4 66 0 26 1 191 0 27 4 66 0 28 1 195 0 30 4 66 0 32 1 199 0 33 4 66 0 36 4 66 0 39 4 66 0 40 1 203 0 65 4 66 0 91 4 66 0 93 4 66 0 94 1 207 0 96 4 66 0 97 4 66 0 98 4 66 1 40] -#[1 4 70 0 2 4 70 0 3 4 70 0 5 4 70 0 6 4 70 0 9 4 70 0 10 4 70 0 12 4 70 0 15 4 70 0 16 4 70 0 22 4 70 0 24 4 70 0 26 1 211 0 27 4 70 0 28 1 215 0 30 4 70 0 32 1 219 0 33 4 70 0 36 4 70 0 39 4 70 0 40 1 223 0 65 4 70 0 91 4 70 0 93 4 70 0 94 1 227 0 96 4 70 0 97 4 70 0 98 4 70 1 40] -#[1 1 231 0 2 4 74 0 3 4 74 0 5 4 74 0 6 4 74 0 9 4 74 0 10 4 74 0 12 4 74 0 15 4 74 0 16 4 74 0 22 4 74 0 24 4 74 0 26 4 74 0 27 4 74 0 28 4 74 0 30 1 235 0 32 4 74 0 33 4 74 0 36 4 74 0 39 4 74 0 40 4 74 0 65 4 74 0 91 4 74 0 93 4 74 0 94 4 74 0 96 4 74 0 97 4 74 0 98 4 74 1 40] -#[1 4 78 0 2 4 78 0 3 1 239 0 5 4 78 0 6 4 78 0 9 4 78 0 10 4 78 0 12 4 78 0 15 4 78 0 16 4 78 0 22 4 78 0 24 4 78 0 26 4 78 0 27 4 78 0 28 4 78 0 30 4 78 0 32 4 78 0 33 4 78 0 36 4 78 0 39 4 78 0 40 4 78 0 65 4 78 0 91 4 78 0 93 4 78 0 94 4 78 0 96 4 78 0 97 4 78 0 98 4 78 1 40] -#[1 4 82 0 2 4 82 0 3 4 82 0 5 4 82 0 6 4 82 0 9 4 82 0 10 4 82 0 12 4 82 0 15 4 82 0 16 4 82 0 22 4 82 0 24 4 82 0 26 4 82 0 27 4 82 0 28 4 82 0 30 4 82 0 32 4 82 0 33 4 82 0 36 4 82 0 39 1 243 0 40 4 82 0 65 4 82 0 91 4 82 0 93 4 82 0 94 4 82 0 96 4 82 0 97 4 82 0 98 4 82 1 40] -#[1 4 86 0 2 4 86 0 3 4 86 0 5 4 86 0 6 4 86 0 9 4 86 0 10 4 86 0 12 4 86 0 15 4 86 0 16 4 86 0 22 4 86 0 24 4 86 0 26 4 86 0 27 4 86 0 28 4 86 0 30 4 86 0 32 4 86 0 33 4 86 0 36 4 86 0 39 4 86 0 40 4 86 0 65 1 247 0 91 4 86 0 93 4 86 0 94 4 86 0 96 4 86 0 97 4 86 0 98 4 86 1 40] -#[0 9 105 0 24] -#[1 4 90 0 2 4 90 0 3 4 90 0 5 1 251 0 6 4 90 0 9 4 90 0 10 4 90 0 12 4 90 0 15 4 90 0 16 4 90 0 22 4 90 0 24 4 90 0 26 4 90 0 27 4 90 0 28 4 90 0 30 4 90 0 32 4 90 0 33 4 90 0 36 4 90 0 39 4 90 0 40 4 90 0 65 4 90 0 91 4 90 0 93 4 90 0 94 4 90 0 96 4 90 0 97 4 90 0 98 4 90 1 40] -#[1 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 253 0 76 2 217 0 105 9 109 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 9 109 0 117 9 109 0 118 9 109 0 121 9 113 1 26 2 29 1 32 2 29 1 33 2 29 1 34] -#[1 5 77 0 105 9 117 1 25] -#[0 4 94 0 44 0 46 0 49 0 54 0 57 0 60 0 63 0 66 0 68 0 76 0 87 0 90 0 105] -#[1 7 157 0 105 9 121 0 152] -#[1 7 157 0 105 9 125 0 152] -#[0 9 129 0 8] -#[1 4 98 0 26 9 133 0 38 4 98 0 52 5 149 0 84 4 98 0 90 9 137 0 155] -#[1 4 102 0 26 9 133 0 38 4 102 0 52 5 149 0 84 4 102 0 90 9 141 0 155] -#[1 5 117 0 105 9 145 0 145 9 145 0 146 5 133 0 147] -#[0 4 106 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 8 205 0 90 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 9 149 0 148 1 121 0 151 9 149 0 180 1 221 0 222 1 225 0 223 9 149 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 9 149 1 3 9 149 1 4 2 181 1 5 2 21 1 6 9 149 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 7 169 0 15 9 161 0 26] -#[1 5 153 0 90 9 165 0 161] -#[0 4 110 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[0 2 146 0 15 0 26 0 52 0 63 0 90] -#[0 4 114 0 15 0 26 0 52 0 90] -#[1 9 169 0 15 4 118 0 26 4 118 0 52 4 118 0 90] -#[1 9 173 0 8 3 249 0 20] -#[1 9 177 0 8 0 170 0 13 0 170 0 17 0 170 0 20 0 170 0 25 0 170 0 38] -#[0 4 122 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[1 0 169 0 8 0 173 0 13 0 177 0 17 0 181 0 26 0 185 0 27 0 11 0 37 0 41 0 42 0 193 0 43 0 15 0 44 0 201 0 45 0 19 0 46 0 23 0 49 0 45 0 50 0 213 0 51 0 217 0 53 0 27 0 54 0 49 0 56 0 31 0 58 0 35 0 60 0 229 0 61 0 233 0 62 0 39 0 66 0 61 0 67 0 43 0 68 0 65 0 69 0 245 0 70 0 69 0 72 0 73 0 73 0 77 0 74 0 249 0 75 0 47 0 76 0 81 0 77 0 85 0 78 1 1 0 79 1 5 0 80 1 9 0 81 1 13 0 82 1 17 0 83 0 93 0 85 1 21 0 86 1 25 0 87 0 97 0 88 1 29 0 89 1 33 0 90 9 181 0 94 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 51 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 113 0 133 0 141 0 134 4 33 0 135 1 121 0 151 4 33 0 163 4 33 0 182 9 185 0 183 4 33 0 184 4 33 0 185 1 141 0 186 4 33 0 187 4 33 0 188 4 33 0 189 4 33 0 190 4 33 0 191 1 165 0 192 4 33 0 193 4 33 0 194 4 33 0 195 4 33 0 201 4 33 0 202 4 33 0 203 4 33 0 207 4 33 0 208 4 33 0 209 4 33 0 210 4 33 0 211 4 33 0 212 4 33 0 221 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 1 165 0 245 1 165 0 246 1 165 1 5 2 21 1 6 0 141 1 11 4 33 1 18 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 4 33 1 35 2 45 1 36 2 49 1 38] -#[1 0 169 0 8 0 173 0 13 0 177 0 17 0 181 0 26 0 185 0 27 0 11 0 37 0 41 0 42 0 193 0 43 0 15 0 44 0 201 0 45 0 19 0 46 0 23 0 49 0 45 0 50 0 213 0 51 0 217 0 53 0 27 0 54 0 49 0 56 0 31 0 58 0 35 0 60 0 229 0 61 0 233 0 62 0 39 0 66 0 61 0 67 0 43 0 68 0 65 0 69 0 245 0 70 0 69 0 72 0 73 0 73 0 77 0 74 0 249 0 75 0 47 0 76 0 81 0 77 0 85 0 78 1 1 0 79 1 5 0 80 1 9 0 81 1 13 0 82 1 17 0 83 0 93 0 85 1 21 0 86 1 25 0 87 0 97 0 88 1 29 0 89 1 33 0 90 9 189 0 94 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 51 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 113 0 133 0 141 0 134 6 181 0 135 1 121 0 151 6 181 0 163 6 181 0 182 6 181 0 184 6 181 0 185 1 141 0 186 6 181 0 187 6 181 0 188 6 181 0 189 6 181 0 190 6 181 0 191 1 165 0 192 6 181 0 193 6 181 0 194 6 181 0 195 6 181 0 201 6 181 0 202 6 181 0 203 6 181 0 207 6 181 0 208 6 181 0 209 6 181 0 210 6 181 0 211 6 181 0 212 6 181 0 221 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 1 165 0 245 1 165 0 246 1 165 1 5 2 21 1 6 0 141 1 11 6 181 1 18 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 6 181 1 35 2 45 1 36 2 49 1 38] -#[1 1 90 0 13 1 90 0 17 1 255 0 20 1 94 0 25] -#[0 4 126 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[1 9 197 0 9 0 14 0 37 0 14 0 44 0 14 0 46 0 14 0 49 0 14 0 54 0 14 0 58 0 14 0 60 0 14 0 66 0 14 0 68 0 14 0 76 0 14 0 105 9 201 0 153 9 205 0 154 4 225 1 36] -#[1 7 157 0 105 9 209 0 152] -#[1 7 157 0 105 9 213 0 152] -#[1 0 33 0 26 2 193 0 27 0 37 0 37 0 41 0 42 0 59 0 44 0 63 0 46 0 67 0 49 0 45 0 50 0 71 0 54 0 49 0 56 0 53 0 58 0 75 0 60 0 79 0 66 0 61 0 67 0 83 0 68 0 65 0 69 0 69 0 72 0 73 0 73 0 77 0 74 0 87 0 76 0 81 0 77 0 85 0 78 0 89 0 81 0 93 0 85 0 22 0 87 0 97 0 88 9 217 0 94 0 91 0 105 2 221 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 2 221 0 117 2 221 0 118 2 221 0 121 9 241 0 132 9 225 0 133 0 141 0 134 9 241 0 135 9 241 0 143 9 233 0 150 9 241 0 163 9 241 0 164 9 237 0 166 9 241 0 167 9 241 0 168 9 241 0 179 0 141 1 11 9 241 1 18 2 209 1 23 2 29 1 32 2 29 1 33 2 29 1 34] -#[0 4 130 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 9 253 0 15 2 65 0 16 0 177 0 17 0 185 0 27 0 189 0 37 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 7 253 0 90 10 1 0 94 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 10 5 1 3 2 133 1 5 2 21 1 6 10 5 1 11 10 5 1 15 10 5 1 16 10 9 1 17 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 0 202 0 2 0 202 0 3 0 202 0 4 0 202 0 5 0 202 0 6 0 202 0 7 0 202 0 9 0 202 0 10 0 202 0 11 0 202 0 12 0 202 0 13 0 202 0 14 0 202 0 16 0 202 0 17 0 202 0 18 0 195 0 20 0 202 0 22 0 202 0 23 0 195 0 25 0 227 0 27 0 202 0 28 0 202 0 29 0 202 0 30 2 3 0 31 0 202 0 32 0 202 0 33 0 202 0 34 0 202 0 35 0 202 0 36 0 195 0 38 0 202 0 40 0 202 0 41 0 202 0 65 0 202 0 91 0 202 0 92 0 202 0 93 0 202 0 96 0 202 0 97 0 202 0 98 4 41 1 28] -#[0 4 134 0 9 0 15 0 94] -#[0 4 138 0 9 0 15 0 94] -#[0 10 17 0 9] -#[1 4 142 0 9 10 21 0 15] -#[0 4 146 0 9 0 15] -#[0 4 150 0 9] -#[0 4 154 0 9 0 15 0 94] -#[1 2 217 0 105 10 25 0 118 10 25 0 119 3 237 1 32 3 237 1 33 3 237 1 34] -#[1 0 33 0 26 2 193 0 27 0 37 0 37 0 41 0 42 0 59 0 44 0 63 0 46 0 67 0 49 0 45 0 50 0 71 0 54 0 49 0 56 0 53 0 58 0 75 0 60 0 79 0 66 0 61 0 67 0 83 0 68 0 65 0 69 0 69 0 72 0 73 0 73 0 77 0 74 0 87 0 76 2 213 0 77 0 85 0 78 0 89 0 81 0 93 0 85 0 22 0 87 0 97 0 88 1 33 0 90 10 29 0 94 0 91 0 105 2 221 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 2 221 0 117 2 221 0 118 2 221 0 121 10 37 0 132 2 237 0 133 0 141 0 134 10 37 0 135 10 33 0 140 10 37 0 141 10 37 0 142 10 37 0 143 10 37 0 149 2 205 0 150 10 37 0 158 10 37 0 159 3 9 0 160 10 37 0 163 10 37 0 164 3 13 0 182 0 141 1 11 10 37 1 18 3 17 1 23 2 29 1 32 2 29 1 33 2 29 1 34] -#[1 5 213 0 63 8 37 0 90 10 41 0 137 10 45 0 139] -#[1 8 37 0 90 10 49 0 139] -#[0 4 158 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 4 162 0 9 0 15 0 90] -#[0 4 166 0 15 0 90] -#[1 10 53 0 15 4 170 0 90] -#[1 8 69 0 26 10 57 0 94 10 61 1 22] -#[1 0 33 0 26 2 193 0 27 0 37 0 37 0 41 0 42 0 59 0 44 0 63 0 46 0 67 0 49 0 45 0 50 0 71 0 54 0 49 0 56 0 53 0 58 0 75 0 60 0 79 0 66 0 61 0 67 0 83 0 68 0 65 0 69 0 69 0 72 0 73 0 73 0 77 0 74 0 87 0 76 2 213 0 77 0 85 0 78 0 89 0 81 0 93 0 85 0 22 0 87 0 97 0 88 1 33 0 90 4 174 0 94 0 91 0 105 2 221 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 2 221 0 117 2 221 0 118 2 221 0 121 10 37 0 132 2 237 0 133 0 141 0 134 10 37 0 135 10 65 0 140 10 37 0 141 10 37 0 142 10 37 0 143 10 37 0 149 2 205 0 150 10 37 0 158 10 37 0 159 3 9 0 160 10 37 0 163 10 37 0 164 3 13 0 182 0 141 1 11 10 37 1 18 3 17 1 23 2 29 1 32 2 29 1 33 2 29 1 34] -#[0 4 178 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[1 0 189 0 37 10 69 0 105 3 141 1 11] -#[1 10 73 0 15 8 69 0 26 10 77 0 94 10 81 1 22] -#[0 4 182 0 15 0 26 0 94] -#[0 10 85 0 94] -#[0 4 186 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[1 10 89 0 10 6 217 0 105] -#[0 4 190 0 26 0 37 0 42 0 50 0 56 0 58 0 64 0 67 0 69 0 72 0 73 0 74 0 77 0 78 0 81 0 85 0 88 1 40] -#[0 10 93 0 26] -#[1 2 217 0 105 10 97 0 118 10 97 0 120 3 237 1 32 3 237 1 33 3 237 1 34] -#[1 0 33 0 26 0 95 0 27 0 99 0 37 0 103 0 42 0 107 0 44 0 111 0 46 0 115 0 49 0 45 0 50 0 26 0 52 0 119 0 54 0 49 0 56 0 123 0 58 0 127 0 60 0 131 0 66 0 61 0 67 0 135 0 68 0 139 0 69 0 143 0 72 0 147 0 73 0 151 0 74 0 155 0 76 2 7 0 77 0 163 0 78 0 167 0 81 0 171 0 85 0 175 0 87 0 179 0 88 10 101 0 94 0 183 0 105 2 221 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 2 221 0 117 2 221 0 118 2 221 0 121 10 121 0 132 9 225 0 133 0 141 0 134 10 121 0 135 10 121 0 143 10 113 0 150 10 121 0 163 10 121 0 164 10 117 0 171 10 121 0 172 10 121 0 173 10 121 0 174 3 49 0 175 3 53 0 176 10 121 0 179 0 141 1 11 10 121 1 18 2 209 1 23 2 29 1 32 2 29 1 33 2 29 1 34] -#[1 10 125 0 15 8 113 0 90 10 129 0 170] -#[0 4 194 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[1 7 245 0 90 10 133 0 165] -#[1 8 33 0 57 5 213 0 63 8 37 0 90 10 137 0 136 10 141 0 137 10 145 0 139] -#[1 5 217 0 90 10 149 1 19] -#[0 4 198 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[1 8 109 0 57 8 113 0 90 10 153 0 169 10 157 0 170] -#[0 4 202 0 26 0 37 0 42 0 50 0 56 0 58 0 64 0 67 0 69 0 72 0 73 0 74 0 77 0 78 0 81 0 85 0 88 1 40] -#[0 4 206 0 15 0 96] -#[0 4 210 0 15 0 96] -#[0 4 214 0 15 0 96] -#[0 10 161 0 26] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 10 165 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 10 165 1 3 10 165 1 4 2 181 1 5 2 21 1 6 10 165 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 0 169 0 8 10 169 0 9 0 173 0 13 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 6 65 0 192 10 173 0 205 10 177 0 206 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 6 65 0 245 6 65 0 246 6 65 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 10 181 0 26] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 10 185 0 26 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 10 189 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 10 189 1 3 10 189 1 4 2 181 1 5 2 21 1 6 10 189 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 0 169 0 8 0 173 0 13 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 10 193 0 192 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 10 193 0 245 10 193 0 246 10 193 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 5 117 0 105 6 249 0 144 5 125 0 145 5 125 0 146 10 197 0 147] -#[1 0 169 0 8 0 173 0 13 0 177 0 17 0 181 0 26 0 185 0 27 0 193 0 43 0 197 0 44 0 201 0 45 0 205 0 46 0 209 0 49 0 213 0 51 0 217 0 53 0 221 0 54 0 225 0 60 0 229 0 61 0 233 0 62 0 237 0 66 0 241 0 68 0 245 0 70 0 249 0 75 0 253 0 76 1 1 0 79 1 5 0 80 3 209 0 81 1 13 0 82 1 17 0 83 1 21 0 86 1 25 0 87 1 29 0 89 1 33 0 90 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 191 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 10 201 0 182 10 201 0 187 10 201 0 188 10 201 0 189 10 201 0 190 10 201 0 191 1 165 0 192 10 201 0 193 10 201 0 194 10 201 0 195 10 201 0 201 10 201 0 202 10 201 0 203 10 201 0 207 10 201 0 208 10 201 0 209 10 201 0 210 10 201 0 211 10 201 0 212 10 201 0 221 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 1 165 0 245 1 165 0 246 1 165 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 10 201 1 35 2 49 1 38] -#[0 10 205 0 39] -#[0 4 218 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[1 4 222 0 2 4 222 0 3 4 222 0 5 4 222 0 6 4 222 0 9 4 222 0 10 4 222 0 12 4 222 0 13 4 222 0 15 4 222 0 16 4 222 0 17 4 222 0 20 4 222 0 22 4 222 0 24 4 222 0 25 4 222 0 26 4 222 0 27 4 222 0 28 4 222 0 30 4 222 0 32 4 222 0 33 4 222 0 36 4 53 0 38 4 222 0 39 4 222 0 40 4 222 0 65 4 222 0 91 4 222 0 93 4 222 0 94 4 222 0 96 4 222 0 97 4 222 0 98 6 201 0 237 4 222 1 40] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 10 209 0 15 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 8 205 0 90 10 213 0 94 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 10 217 0 148 1 121 0 151 10 217 0 180 10 221 0 181 1 221 0 222 1 225 0 223 10 217 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 10 217 1 3 10 217 1 4 2 181 1 5 2 21 1 6 10 217 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 4 226 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[1 4 230 0 2 4 230 0 3 4 230 0 5 4 230 0 6 4 230 0 9 4 230 0 10 4 230 0 12 4 230 0 13 4 230 0 15 4 230 0 16 4 230 0 17 4 230 0 20 4 230 0 22 4 230 0 24 4 230 0 25 4 230 0 26 4 230 0 27 4 230 0 28 4 230 0 30 4 230 0 32 4 230 0 33 4 230 0 36 4 53 0 38 4 230 0 39 4 230 0 40 4 230 0 65 4 230 0 91 4 230 0 93 4 230 0 94 4 230 0 96 4 230 0 97 4 230 0 98 6 201 0 237 4 230 1 40] -#[0 4 234 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[1 4 238 0 2 4 238 0 3 4 238 0 5 4 238 0 6 4 238 0 9 4 238 0 10 4 238 0 12 4 238 0 13 4 238 0 15 4 238 0 16 4 238 0 17 4 238 0 20 4 238 0 22 4 238 0 24 4 238 0 25 4 238 0 26 4 238 0 27 4 238 0 28 4 238 0 30 4 238 0 32 4 238 0 33 4 238 0 36 4 238 0 38 4 238 0 39 4 238 0 40 4 238 0 65 8 37 0 90 4 238 0 91 4 238 0 93 4 238 0 94 4 238 0 96 4 238 0 97 4 238 0 98 10 225 0 139 4 238 1 40] -#[1 10 229 0 9 10 233 0 15] -#[0 4 242 0 9 0 15] -#[0 10 237 0 8] -#[1 10 241 0 90 10 245 0 196] -#[1 1 33 0 90 10 249 0 182] -#[0 4 246 0 90] -#[1 10 253 0 9 0 14 0 37 0 14 0 44 0 14 0 46 0 14 0 49 0 14 0 54 0 14 0 58 0 14 0 60 0 14 0 66 0 14 0 68 0 14 0 76 0 14 0 105 11 1 0 215 6 145 1 36] -#[1 5 117 0 105 11 5 0 146 11 9 0 147] -#[1 0 14 0 37 0 14 0 44 0 14 0 46 0 14 0 49 0 14 0 54 0 14 0 58 0 14 0 60 0 14 0 66 0 14 0 68 0 14 0 76 0 14 0 105 11 13 0 218 11 17 1 36] -#[0 4 250 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 4 254 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 5 2 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[1 5 6 0 8 5 6 0 13 5 6 0 17 5 6 0 26 5 6 0 27 5 6 0 37 5 6 0 42 5 6 0 43 5 6 0 44 5 6 0 45 5 6 0 46 5 6 0 47 6 149 0 48 5 6 0 49 5 6 0 50 5 6 0 51 5 6 0 52 5 6 0 53 5 6 0 54 5 6 0 55 5 6 0 56 5 6 0 58 6 153 0 59 5 6 0 60 5 6 0 61 5 6 0 62 5 6 0 66 5 6 0 67 5 6 0 68 5 6 0 69 5 6 0 70 5 6 0 72 5 6 0 73 5 6 0 74 5 6 0 75 5 6 0 76 5 6 0 77 5 6 0 78 5 6 0 79 5 6 0 80 5 6 0 81 5 6 0 82 5 6 0 83 5 6 0 85 5 6 0 86 5 6 0 87 5 6 0 88 5 6 0 89 5 6 0 90 5 6 0 94 5 6 0 99 5 6 0 100 5 6 0 101 5 6 0 102 5 6 0 103 5 6 0 104 5 6 0 105 9 9 0 217 11 21 0 220 5 6 1 40] -#[0 5 10 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[1 0 169 0 8 0 173 0 13 0 177 0 17 0 181 0 26 0 185 0 27 0 193 0 43 0 197 0 44 0 201 0 45 0 205 0 46 0 209 0 49 0 213 0 51 0 217 0 53 0 221 0 54 0 225 0 60 0 229 0 61 0 233 0 62 0 237 0 66 0 241 0 68 0 245 0 70 0 249 0 75 0 253 0 76 1 1 0 79 1 5 0 80 3 209 0 81 1 13 0 82 1 17 0 83 1 21 0 86 1 25 0 87 1 29 0 89 1 33 0 90 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 191 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 11 25 0 182 11 25 0 187 11 25 0 188 11 25 0 189 11 25 0 190 11 25 0 191 1 165 0 192 11 25 0 193 11 25 0 194 11 25 0 195 11 25 0 201 11 25 0 202 11 25 0 203 11 25 0 207 11 25 0 208 11 25 0 209 11 25 0 210 11 25 0 211 11 25 0 212 11 25 0 221 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 1 165 0 245 1 165 0 246 1 165 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 11 25 1 35 2 49 1 38] -#[1 0 185 0 27 2 11 0 105 11 33 1 28] -#[0 5 14 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 20 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 65 0 91 0 92 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 5 18 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 20 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 65 0 91 0 92 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 5 22 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[1 11 37 0 9 10 233 0 15] -#[0 5 26 0 2 0 3 0 5 0 6 0 8 0 9 0 10 0 12 0 15 0 16 0 20 0 21 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 52 0 63 0 65 0 90 0 91 0 93 0 94 0 96 0 97 0 98 0 105 1 40] -#[0 11 41 0 105] -#[0 11 45 0 8] -#[0 5 30 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 11 49 0 9] -#[1 0 238 0 2 0 238 0 3 0 238 0 5 0 238 0 6 0 238 0 9 0 238 0 10 0 238 0 12 0 238 0 13 0 238 0 15 0 238 0 16 0 238 0 17 0 203 0 20 0 238 0 22 0 238 0 24 0 246 0 25 0 238 0 26 0 238 0 27 0 238 0 28 0 238 0 30 0 238 0 32 0 238 0 33 0 238 0 36 4 73 0 38 0 238 0 39 0 238 0 40 0 238 0 65 0 238 0 91 0 238 0 93 0 238 0 94 0 238 0 96 0 238 0 97 0 238 0 98 0 238 1 40] -#[0 5 34 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 1 118 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 1 134 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 5 38 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 5 42 0 9 0 15] -#[0 3 14 0 9 0 15] -#[1 5 117 0 105 11 53 0 147] -#[1 5 46 0 9 5 46 0 15 4 241 0 38] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 11 57 1 3 2 133 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 5 50 0 5 0 15 0 96] -#[1 11 61 0 5 5 54 0 15 5 54 0 96] -#[0 5 58 0 15 0 96] -#[1 5 62 0 26 9 133 0 38 5 62 0 52 5 149 0 84 5 62 0 90 11 65 0 155] -#[1 5 66 0 26 9 133 0 38 5 66 0 52 5 149 0 84 5 66 0 90 11 69 0 155] -#[1 11 73 0 9 0 14 0 37 0 14 0 44 0 14 0 46 0 14 0 49 0 14 0 54 0 14 0 58 0 14 0 60 0 14 0 66 0 14 0 68 0 14 0 76 0 14 0 105 11 77 0 153 9 205 0 154 4 225 1 36] -#[0 11 81 0 39] -#[0 5 70 0 26 0 52 0 90] -#[0 5 74 0 26 0 52 0 90] -#[0 5 78 0 15 0 26] -#[0 5 82 0 9 0 15 0 26] -#[0 5 86 0 9 0 15 0 26 0 94] -#[0 5 90 0 9 0 15 0 26 0 94] -#[0 5 94 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[0 5 98 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[1 2 217 0 105 11 85 0 118 11 85 0 119 3 237 1 32 3 237 1 33 3 237 1 34] -#[1 2 53 0 1 2 57 0 8 11 89 0 9 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 8 229 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 11 93 0 232 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 8 229 1 3 8 229 1 4 2 181 1 5 2 21 1 6 8 229 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 2 57 0 8 11 97 0 9 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 8 229 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 11 101 0 232 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 8 229 1 3 8 229 1 4 2 181 1 5 2 21 1 6 8 229 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 5 102 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[1 0 169 0 8 0 173 0 13 0 177 0 17 0 181 0 26 0 185 0 27 0 11 0 37 0 41 0 42 0 193 0 43 0 15 0 44 0 201 0 45 0 19 0 46 0 23 0 49 0 45 0 50 0 213 0 51 0 217 0 53 0 27 0 54 0 49 0 56 0 31 0 58 0 35 0 60 0 229 0 61 0 233 0 62 0 39 0 66 0 61 0 67 0 43 0 68 0 65 0 69 0 245 0 70 0 69 0 72 0 73 0 73 0 77 0 74 0 249 0 75 0 47 0 76 0 81 0 77 0 85 0 78 1 1 0 79 1 5 0 80 1 9 0 81 1 13 0 82 1 17 0 83 0 93 0 85 1 21 0 86 1 25 0 87 0 97 0 88 1 29 0 89 1 33 0 90 11 105 0 94 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 51 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 113 0 133 0 141 0 134 6 181 0 135 1 121 0 151 6 181 0 163 6 181 0 182 6 181 0 184 6 181 0 185 1 141 0 186 6 181 0 187 6 181 0 188 6 181 0 189 6 181 0 190 6 181 0 191 1 165 0 192 6 181 0 193 6 181 0 194 6 181 0 195 6 181 0 201 6 181 0 202 6 181 0 203 6 181 0 207 6 181 0 208 6 181 0 209 6 181 0 210 6 181 0 211 6 181 0 212 6 181 0 221 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 1 165 0 245 1 165 0 246 1 165 1 5 2 21 1 6 0 141 1 11 6 181 1 18 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 6 181 1 35 2 45 1 36 2 49 1 38] -#[0 5 106 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[1 11 109 0 79 11 113 0 82 6 229 0 105] -#[0 5 110 0 84 0 90] -#[1 11 117 0 9 11 121 0 15] -#[0 5 114 0 9 0 15] -#[1 9 133 0 38 5 149 0 84 5 118 0 90 11 125 0 155] -#[1 9 133 0 38 5 149 0 84 5 122 0 90 11 129 0 155] -#[0 5 126 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[0 5 130 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 94 0 105] -#[1 2 193 0 27 3 117 0 37 0 41 0 42 0 59 0 44 0 63 0 46 0 67 0 49 3 121 0 50 0 71 0 54 3 125 0 56 0 53 0 58 0 75 0 60 0 79 0 66 3 129 0 67 0 83 0 68 0 65 0 69 0 69 0 72 0 73 0 73 0 77 0 74 0 87 0 76 0 81 0 77 0 85 0 78 0 89 0 81 0 93 0 85 0 22 0 87 0 97 0 88 0 91 0 105 5 137 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 5 137 0 117 5 137 0 118 5 137 0 121 3 133 0 134 3 133 1 11 5 89 1 23 2 29 1 32 2 29 1 33 2 29 1 34] -#[0 5 134 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 94 0 105] -#[1 11 133 0 26 11 137 0 52] -#[1 0 33 0 26 2 193 0 27 0 37 0 37 0 41 0 42 0 59 0 44 0 63 0 46 0 67 0 49 0 45 0 50 0 71 0 54 0 49 0 56 0 53 0 58 0 75 0 60 0 79 0 66 0 61 0 67 0 83 0 68 0 65 0 69 0 69 0 72 0 73 0 73 0 77 0 74 0 87 0 76 0 81 0 77 0 85 0 78 0 89 0 81 0 93 0 85 0 22 0 87 0 97 0 88 11 141 0 94 0 91 0 105 2 221 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 2 221 0 117 2 221 0 118 2 221 0 121 11 145 0 132 9 225 0 133 0 141 0 134 11 145 0 135 11 145 0 143 9 233 0 150 11 145 0 163 11 145 0 164 11 145 0 167 11 145 0 168 11 145 0 179 0 141 1 11 11 145 1 18 2 209 1 23 2 29 1 32 2 29 1 33 2 29 1 34] -#[0 5 138 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 94 0 105] -#[0 5 142 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 94 0 105] -#[0 5 146 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 94 0 105] -#[0 11 149 0 94] -#[0 5 150 0 9 0 15 0 94] -#[0 5 154 0 15 0 94] -#[1 11 153 0 15 11 157 0 94] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 189 0 37 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 7 253 0 90 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 11 161 1 3 2 133 1 5 2 21 1 6 11 161 1 11 11 161 1 15 11 161 1 16 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 5 158 0 9 0 15 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 71 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 94 0 105] -#[1 11 165 0 105 11 169 1 14] -#[0 5 162 0 63 0 90] -#[0 5 166 0 2 0 3 0 5 0 6 0 8 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 37 0 38 0 39 0 40 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 65 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 93 0 94 0 96 0 97 0 98 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[1 0 33 0 26 2 193 0 27 0 37 0 37 0 41 0 42 0 59 0 44 0 63 0 46 0 67 0 49 0 45 0 50 0 71 0 54 0 49 0 56 0 53 0 58 0 75 0 60 0 79 0 66 0 61 0 67 0 83 0 68 0 65 0 69 0 69 0 72 0 73 0 73 0 77 0 74 0 87 0 76 2 213 0 77 0 85 0 78 0 89 0 81 0 93 0 85 0 22 0 87 0 97 0 88 1 33 0 90 11 173 0 94 0 91 0 105 2 221 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 2 221 0 117 2 221 0 118 2 221 0 121 11 177 0 132 2 237 0 133 0 141 0 134 11 177 0 135 11 177 0 141 11 177 0 142 11 177 0 143 11 177 0 149 2 205 0 150 11 177 0 158 11 177 0 159 3 9 0 160 11 177 0 163 11 177 0 164 3 13 0 182 0 141 1 11 11 177 1 18 3 17 1 23 2 29 1 32 2 29 1 33 2 29 1 34] -#[0 5 170 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105] -#[1 8 37 0 90 11 181 0 139] -#[0 5 174 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 5 178 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[1 2 217 0 105 11 185 0 118 11 185 0 120 3 237 1 32 3 237 1 33 3 237 1 34] -#[0 5 182 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 11 189 0 94] -#[1 0 33 0 26 2 193 0 27 0 37 0 37 0 41 0 42 0 59 0 44 0 63 0 46 0 67 0 49 0 45 0 50 0 71 0 54 0 49 0 56 0 53 0 58 0 75 0 60 0 79 0 66 0 61 0 67 0 83 0 68 0 65 0 69 0 69 0 72 0 73 0 73 0 77 0 74 0 87 0 76 2 213 0 77 0 85 0 78 0 89 0 81 0 93 0 85 0 22 0 87 0 97 0 88 1 33 0 90 5 186 0 94 0 91 0 105 2 221 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 2 221 0 117 2 221 0 118 2 221 0 121 11 177 0 132 2 237 0 133 0 141 0 134 11 177 0 135 11 177 0 141 11 177 0 142 11 177 0 143 11 177 0 149 2 205 0 150 11 177 0 158 11 177 0 159 3 9 0 160 11 177 0 163 11 177 0 164 3 13 0 182 0 141 1 11 11 177 1 18 3 17 1 23 2 29 1 32 2 29 1 33 2 29 1 34] -#[1 11 193 0 8 5 190 0 15 5 190 0 26 8 37 0 90 5 190 0 94 11 197 0 139] -#[1 8 69 0 26 0 6 0 37 11 201 0 94 0 6 0 105 8 77 1 10 11 205 1 21 11 209 1 22] -#[0 5 194 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 11 213 0 94] -#[0 5 198 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 11 217 0 26] -#[0 5 202 0 26 0 37 0 42 0 50 0 56 0 58 0 64 0 67 0 69 0 72 0 73 0 74 0 77 0 78 0 81 0 85 0 88 1 40] -#[0 5 206 0 15 0 90] -#[0 5 210 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 2 54 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 94 0 105] -#[0 2 62 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 94 0 105] -#[0 11 133 0 26] -#[1 0 33 0 26 0 95 0 27 0 99 0 37 0 103 0 42 0 107 0 44 0 111 0 46 0 115 0 49 0 45 0 50 0 26 0 52 0 119 0 54 0 49 0 56 0 123 0 58 0 127 0 60 0 131 0 66 0 61 0 67 0 135 0 68 0 139 0 69 0 143 0 72 0 147 0 73 0 151 0 74 0 155 0 76 2 7 0 77 0 163 0 78 0 167 0 81 0 171 0 85 0 175 0 87 0 179 0 88 11 221 0 94 0 183 0 105 2 221 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 2 221 0 117 2 221 0 118 2 221 0 121 11 225 0 132 9 225 0 133 0 141 0 134 11 225 0 135 11 225 0 143 10 113 0 150 11 225 0 163 11 225 0 164 11 225 0 172 11 225 0 173 11 225 0 174 3 49 0 175 3 53 0 176 11 225 0 179 0 141 1 11 11 225 1 18 2 209 1 23 2 29 1 32 2 29 1 33 2 29 1 34] -#[0 5 214 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 94 0 105] -#[1 2 217 0 105 11 229 0 118 11 229 0 120 3 237 1 32 3 237 1 33 3 237 1 34] -#[0 5 218 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 5 222 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[1 5 213 0 63 8 37 0 90 11 233 0 137 11 237 0 139] -#[1 8 37 0 90 11 241 0 139] -#[0 5 226 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 5 230 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[1 10 125 0 15 8 113 0 90 11 245 0 170] -#[0 5 234 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 5 238 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 11 249 0 9] -#[1 0 169 0 8 0 173 0 13 0 177 0 17 0 181 0 26 0 185 0 27 0 193 0 43 0 197 0 44 0 201 0 45 0 205 0 46 0 209 0 49 0 213 0 51 0 217 0 53 0 221 0 54 0 225 0 60 0 229 0 61 0 233 0 62 0 237 0 66 0 241 0 68 0 245 0 70 0 249 0 75 0 253 0 76 1 1 0 79 1 5 0 80 3 209 0 81 1 13 0 82 1 17 0 83 1 21 0 86 1 25 0 87 1 29 0 89 1 33 0 90 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 191 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 11 253 0 182 11 253 0 187 11 253 0 188 11 253 0 189 11 253 0 190 11 253 0 191 1 165 0 192 11 253 0 193 11 253 0 194 11 253 0 195 11 253 0 201 11 253 0 202 11 253 0 203 11 253 0 207 11 253 0 208 11 253 0 209 11 253 0 210 11 253 0 211 11 253 0 212 11 253 0 221 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 1 165 0 245 1 165 0 246 1 165 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 11 253 1 35 2 49 1 38] -#[0 12 1 0 9] -#[1 5 242 0 9 8 181 0 15] -#[1 0 169 0 8 12 5 0 9 0 173 0 13 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 6 65 0 192 12 9 0 205 10 177 0 206 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 6 65 0 245 6 65 0 246 6 65 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 0 169 0 8 12 13 0 9 0 173 0 13 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 6 65 0 192 12 17 0 205 10 177 0 206 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 6 65 0 245 6 65 0 246 6 65 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 12 21 0 26] -#[0 5 246 0 9 0 15 0 26] -#[1 3 62 0 15 12 25 0 24 3 62 0 26 7 177 0 31 4 241 0 38] -#[1 5 250 0 8 5 250 0 13 5 250 0 17 5 250 0 26 5 250 0 27 5 250 0 37 5 250 0 42 5 250 0 43 5 250 0 44 5 250 0 45 5 250 0 46 5 250 0 47 5 250 0 49 5 250 0 50 5 250 0 51 5 250 0 52 5 250 0 53 5 250 0 54 12 29 0 55 5 250 0 56 5 250 0 58 5 250 0 60 5 250 0 61 5 250 0 62 5 250 0 66 5 250 0 67 5 250 0 68 5 250 0 69 5 250 0 70 5 250 0 72 5 250 0 73 5 250 0 74 5 250 0 75 5 250 0 76 5 250 0 77 5 250 0 78 5 250 0 79 5 250 0 80 5 250 0 81 5 250 0 82 5 250 0 83 5 250 0 85 5 250 0 86 5 250 0 87 5 250 0 88 5 250 0 89 5 250 0 90 5 250 0 94 5 250 0 99 5 250 0 100 5 250 0 101 5 250 0 102 5 250 0 103 5 250 0 104 5 250 0 105 5 250 1 40] -#[0 5 254 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 12 33 0 94] -#[0 6 2 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 6 6 0 15 0 94] -#[1 12 37 0 15 12 41 0 94] -#[0 6 10 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[1 6 14 0 2 6 14 0 3 6 14 0 5 6 14 0 6 6 14 0 9 6 14 0 10 6 14 0 12 6 14 0 13 6 14 0 15 6 14 0 16 6 14 0 17 6 14 0 20 6 14 0 22 6 14 0 24 6 14 0 25 6 14 0 26 6 14 0 27 6 14 0 28 6 14 0 30 6 14 0 32 6 14 0 33 6 14 0 36 6 14 0 38 6 14 0 39 6 14 0 40 6 14 0 65 8 37 0 90 6 14 0 91 6 14 0 93 6 14 0 94 6 14 0 96 6 14 0 97 6 14 0 98 12 45 0 139 6 14 1 40] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 12 49 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 12 49 1 3 12 49 1 4 2 181 1 5 2 21 1 6 12 49 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 2 57 0 8 12 53 0 9 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 8 229 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 12 57 0 232 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 8 229 1 3 8 229 1 4 2 181 1 5 2 21 1 6 8 229 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 12 61 0 47 12 65 0 52 12 69 0 94 12 73 0 197 12 77 0 198 12 81 0 199 12 85 0 200] -#[0 6 18 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 6 22 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 6 26 0 90] -#[0 6 30 0 9 0 26] -#[0 6 34 0 9 0 26] -#[1 7 177 0 31 4 241 0 38] -#[0 12 89 0 9] -#[1 0 189 0 37 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 4 169 0 58 0 225 0 60 0 237 0 66 0 241 0 68 0 253 0 76 2 217 0 105 12 93 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 12 93 0 117 12 93 0 118 12 93 0 121 12 97 0 219 4 181 1 11 2 29 1 32 2 29 1 33 2 29 1 34 4 181 1 37] -#[0 6 38 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 6 42 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 6 46 0 2 0 3 0 4 0 5 0 6 0 7 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 20 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 38 0 39 0 40 0 41 0 65 0 91 0 92 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 12 101 0 105] -#[0 6 50 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[1 6 54 0 8 12 105 0 27 12 109 1 27] -#[1 2 53 0 1 2 57 0 8 12 113 0 9 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 8 229 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 12 117 0 232 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 8 229 1 3 8 229 1 4 2 181 1 5 2 21 1 6 8 229 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 2 57 0 8 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 9 69 0 122 9 69 0 123 9 69 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 12 121 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 225 0 238 1 225 0 239 1 225 0 240 2 101 0 241 2 101 0 242 2 101 0 243 12 125 0 247 12 125 0 248 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 6 58 0 9 6 58 0 15 4 241 0 38] -#[0 6 62 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[1 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 253 0 76 2 217 0 105 12 129 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 12 129 0 117 12 129 0 118 12 129 0 121 2 29 1 32 2 29 1 33 2 29 1 34] -#[0 6 66 0 26 0 52 0 90] -#[0 6 70 0 26 0 52 0 90] -#[0 6 74 0 26 0 38 0 52 0 84 0 90] -#[1 12 133 0 9 11 121 0 15] -#[0 6 78 0 26 0 38 0 52 0 84 0 90] -#[0 6 82 0 15 0 26 0 52 0 90] -#[0 12 137 0 26] -#[1 12 141 0 9 10 233 0 15] -#[0 12 145 0 26] -#[1 12 149 0 9 10 233 0 15] -#[0 6 86 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[0 12 153 0 8] -#[0 12 157 0 8] -#[0 6 90 0 84 0 90] -#[1 0 14 0 37 0 14 0 44 0 14 0 46 0 14 0 49 0 14 0 54 0 14 0 58 0 14 0 60 0 14 0 66 0 14 0 68 0 14 0 76 0 14 0 105 12 161 0 154 4 225 1 36] -#[0 6 94 0 90] -#[0 6 98 0 90] -#[0 3 70 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 94 0 105] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 189 0 37 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 8 205 0 90 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 12 165 0 148 1 121 0 151 12 165 0 180 1 221 0 222 1 225 0 223 12 165 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 12 165 1 3 12 165 1 4 2 181 1 5 2 21 1 6 12 165 1 8 12 169 1 11 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 6 102 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105 1 40] -#[0 6 106 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 94 0 105] -#[0 6 110 0 9 0 15 0 94] -#[1 2 53 0 1 3 149 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 189 0 37 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 7 253 0 90 12 173 0 94 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 1 221 0 222 1 225 0 223 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 12 177 1 3 2 133 1 5 2 21 1 6 12 177 1 11 12 177 1 15 12 177 1 16 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 6 114 0 9 0 15 0 94] -#[0 6 118 0 9 0 15] -#[0 10 13 0 31] -#[0 6 122 0 9 0 15] -#[0 6 126 0 2 0 3 0 5 0 6 0 8 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 37 0 38 0 39 0 40 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 65 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 93 0 94 0 96 0 97 0 98 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 6 130 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 90 0 94 0 105] -#[0 6 134 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 6 138 0 15 0 90] -#[0 6 142 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[1 2 53 0 1 2 57 0 8 12 181 0 9 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 8 229 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 12 185 0 232 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 8 229 1 3 8 229 1 4 2 181 1 5 2 21 1 6 8 229 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 6 146 0 15 0 26 0 94] -#[0 6 150 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 6 154 0 15 0 26 0 94] -#[0 12 189 0 94] -#[0 6 158 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 6 162 0 26 0 37 0 42 0 50 0 56 0 58 0 64 0 67 0 69 0 72 0 73 0 74 0 77 0 78 0 81 0 85 0 88 1 40] -#[0 6 166 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 6 170 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 52 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 94 0 105] -#[0 6 174 0 15 0 90] -#[1 8 37 0 90 12 193 0 139] -#[0 6 178 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 6 182 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 6 186 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 12 197 0 26] -#[0 6 190 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[1 0 169 0 8 0 173 0 13 0 177 0 17 0 181 0 26 0 185 0 27 0 193 0 43 0 197 0 44 0 201 0 45 0 205 0 46 0 209 0 49 0 213 0 51 0 217 0 53 0 221 0 54 0 225 0 60 0 229 0 61 0 233 0 62 0 237 0 66 0 241 0 68 0 245 0 70 0 249 0 75 0 253 0 76 1 1 0 79 1 5 0 80 3 209 0 81 1 13 0 82 1 17 0 83 1 21 0 86 1 25 0 87 1 29 0 89 1 33 0 90 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 191 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 12 201 0 182 12 201 0 187 12 201 0 188 12 201 0 189 12 201 0 190 12 201 0 191 1 165 0 192 12 201 0 193 12 201 0 194 12 201 0 195 12 201 0 201 12 201 0 202 12 201 0 203 12 201 0 207 12 201 0 208 12 201 0 209 12 201 0 210 12 201 0 211 12 201 0 212 12 201 0 221 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 1 165 0 245 1 165 0 246 1 165 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 12 201 1 35 2 49 1 38] -#[1 0 169 0 8 0 173 0 13 0 177 0 17 0 181 0 26 0 185 0 27 0 193 0 43 0 197 0 44 0 201 0 45 0 205 0 46 0 209 0 49 0 213 0 51 0 217 0 53 0 221 0 54 0 225 0 60 0 229 0 61 0 233 0 62 0 237 0 66 0 241 0 68 0 245 0 70 0 249 0 75 0 253 0 76 1 1 0 79 1 5 0 80 3 209 0 81 1 13 0 82 1 17 0 83 1 21 0 86 1 25 0 87 1 29 0 89 1 33 0 90 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 191 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 12 205 0 182 12 205 0 187 12 205 0 188 12 205 0 189 12 205 0 190 12 205 0 191 1 165 0 192 12 205 0 193 12 205 0 194 12 205 0 195 12 205 0 201 12 205 0 202 12 205 0 203 12 205 0 207 12 205 0 208 12 205 0 209 12 205 0 210 12 205 0 211 12 205 0 212 12 205 0 221 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 1 165 0 245 1 165 0 246 1 165 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 12 205 1 35 2 49 1 38] -#[0 12 209 0 9] -#[1 0 169 0 8 0 173 0 13 0 177 0 17 0 181 0 26 0 185 0 27 0 193 0 43 0 197 0 44 0 201 0 45 0 205 0 46 0 209 0 49 0 213 0 51 0 217 0 53 0 221 0 54 0 225 0 60 0 229 0 61 0 233 0 62 0 237 0 66 0 241 0 68 0 245 0 70 0 249 0 75 0 253 0 76 1 1 0 79 1 5 0 80 3 209 0 81 1 13 0 82 1 17 0 83 1 21 0 86 1 25 0 87 1 29 0 89 1 33 0 90 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 191 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 12 213 0 182 12 213 0 187 12 213 0 188 12 213 0 189 12 213 0 190 12 213 0 191 1 165 0 192 12 213 0 193 12 213 0 194 12 213 0 195 12 213 0 201 12 213 0 202 12 213 0 203 12 213 0 207 12 213 0 208 12 213 0 209 12 213 0 210 12 213 0 211 12 213 0 212 12 213 0 221 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 1 165 0 245 1 165 0 246 1 165 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 12 213 1 35 2 49 1 38] -#[0 12 217 0 9] -#[1 0 169 0 8 12 221 0 9 0 173 0 13 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 187 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 6 65 0 192 12 225 0 205 10 177 0 206 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 6 65 0 245 6 65 0 246 6 65 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 12 229 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 12 229 1 3 12 229 1 4 2 181 1 5 2 21 1 6 12 229 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 0 169 0 8 0 173 0 13 0 177 0 17 0 181 0 26 0 185 0 27 0 193 0 43 0 197 0 44 0 201 0 45 0 205 0 46 0 209 0 49 0 213 0 51 0 217 0 53 0 221 0 54 0 225 0 60 0 229 0 61 0 233 0 62 0 237 0 66 0 241 0 68 0 245 0 70 0 249 0 75 0 253 0 76 1 1 0 79 1 5 0 80 3 209 0 81 1 13 0 82 1 17 0 83 1 21 0 86 1 25 0 87 1 29 0 89 1 33 0 90 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 191 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 12 233 0 182 12 233 0 187 12 233 0 188 12 233 0 189 12 233 0 190 12 233 0 191 1 165 0 192 12 233 0 193 12 233 0 194 12 233 0 195 12 233 0 201 12 233 0 202 12 233 0 203 12 233 0 207 12 233 0 208 12 233 0 209 12 233 0 210 12 233 0 211 12 233 0 212 12 233 0 221 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 1 165 0 245 1 165 0 246 1 165 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 12 233 1 35 2 49 1 38] -#[0 6 194 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 8 205 0 90 12 237 0 94 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 12 241 0 148 1 121 0 151 12 241 0 180 1 221 0 222 1 225 0 223 12 241 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 12 241 1 3 12 241 1 4 2 181 1 5 2 21 1 6 12 241 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 6 198 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 6 202 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 6 206 0 9 0 15] -#[0 6 210 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[1 12 245 0 9 10 233 0 15] -#[1 2 53 0 1 2 57 0 8 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 12 253 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 12 253 1 3 12 253 1 4 2 181 1 5 2 21 1 6 12 253 1 8 12 253 1 9 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 13 1 0 24] -#[0 6 214 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[1 12 61 0 47 12 65 0 52 13 5 0 94 13 9 0 198 13 13 0 199 12 85 0 200] -#[0 6 218 0 47 0 52 0 94] -#[1 0 169 0 8 0 173 0 13 0 177 0 17 0 181 0 26 0 185 0 27 0 11 0 37 0 41 0 42 0 193 0 43 0 15 0 44 0 201 0 45 0 19 0 46 12 61 0 47 0 23 0 49 0 45 0 50 0 213 0 51 12 65 0 52 0 217 0 53 0 27 0 54 0 49 0 56 0 31 0 58 0 35 0 60 0 229 0 61 0 233 0 62 0 39 0 66 0 61 0 67 0 43 0 68 0 65 0 69 0 245 0 70 0 69 0 72 0 73 0 73 0 77 0 74 0 249 0 75 0 47 0 76 0 81 0 77 0 85 0 78 1 1 0 79 1 5 0 80 1 9 0 81 1 13 0 82 1 17 0 83 0 93 0 85 1 21 0 86 1 25 0 87 0 97 0 88 1 29 0 89 1 33 0 90 13 17 0 94 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 51 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 113 0 133 0 141 0 134 4 33 0 135 1 121 0 151 4 33 0 163 4 33 0 182 13 21 0 183 4 33 0 184 4 33 0 185 1 141 0 186 4 33 0 187 4 33 0 188 4 33 0 189 4 33 0 190 4 33 0 191 1 165 0 192 4 33 0 193 4 33 0 194 4 33 0 195 13 25 0 200 4 33 0 201 4 33 0 202 4 33 0 203 4 33 0 207 4 33 0 208 4 33 0 209 4 33 0 210 4 33 0 211 4 33 0 212 4 33 0 221 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 1 165 0 245 1 165 0 246 1 165 1 5 2 21 1 6 0 141 1 11 4 33 1 18 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 4 33 1 35 2 45 1 36 2 49 1 38] -#[0 6 222 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105] -#[1 1 33 0 90 13 29 0 182] -#[0 6 226 0 91 0 105] -#[1 13 33 0 91 5 117 0 105 13 37 0 147] -#[0 13 41 0 8] -#[1 3 169 0 36 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 253 0 76 13 45 0 96 2 217 0 105 3 177 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 3 177 0 117 3 177 0 118 3 177 0 121 13 49 1 29 3 185 1 30 2 29 1 32 2 29 1 33 2 29 1 34] -#[0 13 53 0 8] -#[0 6 230 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[1 13 57 0 9 10 233 0 15] -#[0 6 234 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 6 238 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 15 0 16 0 22 0 24 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 6 242 0 5 0 15 0 96] -#[0 6 246 0 26 0 38 0 52 0 84 0 90] -#[0 6 250 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 49 0 50 0 51 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105] -#[0 13 61 0 26] -#[0 6 254 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 49 0 50 0 51 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105] -#[0 13 65 0 26] -#[1 2 53 0 1 2 57 0 8 13 69 0 9 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 8 229 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 13 73 0 232 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 8 229 1 3 8 229 1 4 2 181 1 5 2 21 1 6 8 229 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[1 2 53 0 1 2 57 0 8 13 77 0 9 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 8 229 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 13 81 0 232 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 8 229 1 3 8 229 1 4 2 181 1 5 2 21 1 6 8 229 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 7 2 0 9 0 15] -#[0 13 85 0 26] -#[0 13 89 0 26] -#[0 7 6 0 9 0 15 0 94] -#[0 7 10 0 15 0 94] -#[1 7 14 0 15 7 14 0 26 8 37 0 90 7 14 0 94 13 93 0 139] -#[1 13 97 0 9 10 233 0 15] -#[0 7 18 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 7 22 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 7 26 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 7 30 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 7 34 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[1 0 169 0 8 0 173 0 13 0 177 0 17 0 181 0 26 0 185 0 27 0 193 0 43 0 197 0 44 0 201 0 45 0 205 0 46 0 209 0 49 0 213 0 51 0 217 0 53 0 221 0 54 0 225 0 60 0 229 0 61 0 233 0 62 0 237 0 66 0 241 0 68 0 245 0 70 0 249 0 75 0 253 0 76 1 1 0 79 1 5 0 80 3 209 0 81 1 13 0 82 1 17 0 83 1 21 0 86 1 25 0 87 1 29 0 89 1 33 0 90 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 191 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 13 101 0 182 13 101 0 187 13 101 0 188 13 101 0 189 13 101 0 190 13 101 0 191 1 165 0 192 13 101 0 193 13 101 0 194 13 101 0 195 13 101 0 201 13 101 0 202 13 101 0 203 13 101 0 207 13 101 0 208 13 101 0 209 13 101 0 210 13 101 0 211 13 101 0 212 13 101 0 221 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 1 165 0 245 1 165 0 246 1 165 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 13 101 1 35 2 49 1 38] -#[0 7 38 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[1 0 169 0 8 0 173 0 13 0 177 0 17 0 181 0 26 0 185 0 27 0 193 0 43 0 197 0 44 0 201 0 45 0 205 0 46 0 209 0 49 0 213 0 51 0 217 0 53 0 221 0 54 0 225 0 60 0 229 0 61 0 233 0 62 0 237 0 66 0 241 0 68 0 245 0 70 0 249 0 75 0 253 0 76 1 1 0 79 1 5 0 80 3 209 0 81 1 13 0 82 1 17 0 83 1 21 0 86 1 25 0 87 1 29 0 89 1 33 0 90 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 191 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 13 105 0 182 13 105 0 187 13 105 0 188 13 105 0 189 13 105 0 190 13 105 0 191 1 165 0 192 13 105 0 193 13 105 0 194 13 105 0 195 13 105 0 201 13 105 0 202 13 105 0 203 13 105 0 207 13 105 0 208 13 105 0 209 13 105 0 210 13 105 0 211 13 105 0 212 13 105 0 221 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 1 165 0 245 1 165 0 246 1 165 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 13 105 1 35 2 49 1 38] -#[1 0 169 0 8 0 173 0 13 0 177 0 17 0 181 0 26 0 185 0 27 0 193 0 43 0 197 0 44 0 201 0 45 0 205 0 46 0 209 0 49 0 213 0 51 0 217 0 53 0 221 0 54 0 225 0 60 0 229 0 61 0 233 0 62 0 237 0 66 0 241 0 68 0 245 0 70 0 249 0 75 0 253 0 76 1 1 0 79 1 5 0 80 3 209 0 81 1 13 0 82 1 17 0 83 1 21 0 86 1 25 0 87 1 29 0 89 1 33 0 90 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 191 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 13 109 0 182 13 109 0 187 13 109 0 188 13 109 0 189 13 109 0 190 13 109 0 191 1 165 0 192 13 109 0 193 13 109 0 194 13 109 0 195 13 109 0 201 13 109 0 202 13 109 0 203 13 109 0 207 13 109 0 208 13 109 0 209 13 109 0 210 13 109 0 211 13 109 0 212 13 109 0 221 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 1 165 0 245 1 165 0 246 1 165 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 13 109 1 35 2 49 1 38] -#[0 13 113 0 9] -#[0 13 117 0 9] -#[0 7 42 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 7 46 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 7 50 0 15 0 94] -#[0 7 54 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 7 58 0 24] -#[0 13 121 0 24] -#[0 7 62 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105] -#[0 7 66 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 7 70 0 47 0 52 0 94] -#[1 0 169 0 8 0 173 0 13 0 177 0 17 0 181 0 26 0 185 0 27 0 11 0 37 0 41 0 42 0 193 0 43 0 15 0 44 0 201 0 45 0 19 0 46 12 61 0 47 0 23 0 49 0 45 0 50 0 213 0 51 12 65 0 52 0 217 0 53 0 27 0 54 0 49 0 56 0 31 0 58 0 35 0 60 0 229 0 61 0 233 0 62 0 39 0 66 0 61 0 67 0 43 0 68 0 65 0 69 0 245 0 70 0 69 0 72 0 73 0 73 0 77 0 74 0 249 0 75 0 47 0 76 0 81 0 77 0 85 0 78 1 1 0 79 1 5 0 80 1 9 0 81 1 13 0 82 1 17 0 83 0 93 0 85 1 21 0 86 1 25 0 87 0 97 0 88 1 29 0 89 1 33 0 90 13 125 0 94 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 51 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 113 0 133 0 141 0 134 4 33 0 135 1 121 0 151 4 33 0 163 4 33 0 182 13 21 0 183 4 33 0 184 4 33 0 185 1 141 0 186 4 33 0 187 4 33 0 188 4 33 0 189 4 33 0 190 4 33 0 191 1 165 0 192 4 33 0 193 4 33 0 194 4 33 0 195 13 25 0 200 4 33 0 201 4 33 0 202 4 33 0 203 4 33 0 207 4 33 0 208 4 33 0 209 4 33 0 210 4 33 0 211 4 33 0 212 4 33 0 221 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 1 165 0 245 1 165 0 246 1 165 1 5 2 21 1 6 0 141 1 11 4 33 1 18 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 4 33 1 35 2 45 1 36 2 49 1 38] -#[0 7 74 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[1 0 169 0 8 0 173 0 13 0 177 0 17 0 181 0 26 0 185 0 27 0 11 0 37 0 41 0 42 0 193 0 43 0 15 0 44 0 201 0 45 0 19 0 46 7 78 0 47 0 23 0 49 0 45 0 50 0 213 0 51 7 78 0 52 0 217 0 53 0 27 0 54 0 49 0 56 0 31 0 58 0 35 0 60 0 229 0 61 0 233 0 62 0 39 0 66 0 61 0 67 0 43 0 68 0 65 0 69 0 245 0 70 0 69 0 72 0 73 0 73 0 77 0 74 0 249 0 75 0 47 0 76 0 81 0 77 0 85 0 78 1 1 0 79 1 5 0 80 1 9 0 81 1 13 0 82 1 17 0 83 0 93 0 85 1 21 0 86 1 25 0 87 0 97 0 88 1 29 0 89 1 33 0 90 7 78 0 94 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 51 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 113 0 133 0 141 0 134 6 181 0 135 1 121 0 151 6 181 0 163 6 181 0 182 6 181 0 184 6 181 0 185 1 141 0 186 6 181 0 187 6 181 0 188 6 181 0 189 6 181 0 190 6 181 0 191 1 165 0 192 6 181 0 193 6 181 0 194 6 181 0 195 6 181 0 201 6 181 0 202 6 181 0 203 6 181 0 207 6 181 0 208 6 181 0 209 6 181 0 210 6 181 0 211 6 181 0 212 6 181 0 221 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 1 165 0 245 1 165 0 246 1 165 1 5 2 21 1 6 0 141 1 11 6 181 1 18 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 6 181 1 35 2 45 1 36 2 49 1 38] -#[0 7 82 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105] -#[0 7 86 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 59 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[1 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 253 0 76 2 217 0 105 13 129 0 112 2 225 0 113 2 225 0 114 2 225 0 115 2 225 0 116 13 129 0 117 13 129 0 118 13 129 0 121 2 29 1 32 2 29 1 33 2 29 1 34] -#[1 7 90 0 9 4 241 0 38] -#[1 2 53 0 1 2 57 0 8 13 133 0 9 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 8 229 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 13 137 0 232 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 8 229 1 3 8 229 1 4 2 181 1 5 2 21 1 6 8 229 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 7 94 0 8] -#[1 6 29 0 15 13 141 0 96] -#[1 2 53 0 1 2 57 0 8 13 145 0 9 2 61 0 12 0 173 0 13 2 65 0 16 0 177 0 17 0 185 0 27 0 197 0 44 0 205 0 46 0 209 0 49 0 221 0 54 0 225 0 60 0 237 0 66 0 241 0 68 0 245 0 70 0 253 0 76 1 1 0 79 1 13 0 82 1 25 0 87 2 69 0 95 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 55 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 2 77 0 147 1 121 0 151 1 221 0 222 1 225 0 223 8 229 0 224 2 85 0 225 2 89 0 228 1 225 0 230 1 225 0 231 13 149 0 232 1 221 0 233 1 241 0 238 1 225 0 239 1 249 0 240 2 101 0 241 2 101 0 242 2 101 0 243 2 133 0 244 2 133 0 245 2 133 0 246 2 133 0 247 2 133 0 248 2 133 0 249 2 137 0 250 2 141 0 251 2 145 0 252 2 149 0 253 2 153 0 254 2 157 0 255 2 161 1 0 2 165 1 1 2 169 1 2 8 229 1 3 8 229 1 4 2 181 1 5 2 21 1 6 8 229 1 8 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 2 49 1 38] -#[0 7 98 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 7 102 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 49 0 50 0 51 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105] -#[0 7 106 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 49 0 50 0 51 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105] -#[0 13 153 0 26] -#[1 13 157 0 9 10 233 0 15] -#[0 13 161 0 26] -#[1 13 165 0 9 10 233 0 15] -#[0 7 110 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 94 0 105] -#[0 7 114 0 26 0 27 0 37 0 42 0 44 0 46 0 49 0 50 0 54 0 56 0 58 0 60 0 66 0 67 0 68 0 69 0 72 0 73 0 74 0 76 0 77 0 78 0 81 0 85 0 87 0 88 0 94 0 105] -#[0 7 118 0 15 0 26 0 94] -#[1 7 122 0 15 7 122 0 26 8 37 0 90 7 122 0 94 13 169 0 139] -#[0 7 126 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 7 130 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 7 134 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[1 0 169 0 8 0 173 0 13 0 177 0 17 0 181 0 26 0 185 0 27 0 193 0 43 0 197 0 44 0 201 0 45 0 205 0 46 0 209 0 49 0 213 0 51 0 217 0 53 0 221 0 54 0 225 0 60 0 229 0 61 0 233 0 62 0 237 0 66 0 241 0 68 0 245 0 70 0 249 0 75 0 253 0 76 1 1 0 79 1 5 0 80 3 209 0 81 1 13 0 82 1 17 0 83 1 21 0 86 1 25 0 87 1 29 0 89 1 33 0 90 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 191 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 13 173 0 182 13 173 0 187 13 173 0 188 13 173 0 189 13 173 0 190 13 173 0 191 1 165 0 192 13 173 0 193 13 173 0 194 13 173 0 195 13 173 0 201 13 173 0 202 13 173 0 203 13 173 0 207 13 173 0 208 13 173 0 209 13 173 0 210 13 173 0 211 13 173 0 212 13 173 0 221 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 1 165 0 245 1 165 0 246 1 165 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 13 173 1 35 2 49 1 38] -#[1 0 169 0 8 0 173 0 13 0 177 0 17 0 181 0 26 0 185 0 27 0 193 0 43 0 197 0 44 0 201 0 45 0 205 0 46 0 209 0 49 0 213 0 51 0 217 0 53 0 221 0 54 0 225 0 60 0 229 0 61 0 233 0 62 0 237 0 66 0 241 0 68 0 245 0 70 0 249 0 75 0 253 0 76 1 1 0 79 1 5 0 80 3 209 0 81 1 13 0 82 1 17 0 83 1 21 0 86 1 25 0 87 1 29 0 89 1 33 0 90 1 37 0 99 1 41 0 100 1 45 0 101 1 49 0 102 1 53 0 103 1 57 0 104 0 191 0 105 1 225 0 111 1 69 0 112 1 73 0 113 1 73 0 114 1 73 0 115 1 73 0 116 1 89 0 117 1 89 0 118 1 89 0 121 1 101 0 122 1 101 0 123 1 101 0 124 1 121 0 151 13 177 0 182 13 177 0 187 13 177 0 188 13 177 0 189 13 177 0 190 13 177 0 191 1 165 0 192 13 177 0 193 13 177 0 194 13 177 0 195 13 177 0 201 13 177 0 202 13 177 0 203 13 177 0 207 13 177 0 208 13 177 0 209 13 177 0 210 13 177 0 211 13 177 0 212 13 177 0 221 1 221 0 222 1 225 0 223 1 225 0 230 1 233 0 231 1 221 0 233 1 241 0 238 1 245 0 239 1 249 0 240 1 253 0 241 2 1 0 242 2 5 0 243 1 165 0 245 1 165 0 246 1 165 1 5 2 21 1 6 2 25 1 28 2 29 1 32 2 29 1 33 2 29 1 34 13 177 1 35 2 49 1 38] -#[0 7 138 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105] -#[0 7 142 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 7 146 0 91 0 105] -#[0 7 150 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[1 13 181 0 9 10 233 0 15] -#[0 7 154 0 8] -#[1 7 158 0 2 7 158 0 3 7 158 0 5 7 158 0 6 7 158 0 9 7 158 0 10 7 158 0 12 7 158 0 13 7 158 0 15 7 158 0 16 7 158 0 17 7 158 0 20 7 158 0 22 7 158 0 24 7 158 0 25 7 158 0 26 7 158 0 27 7 158 0 28 7 158 0 30 7 158 0 32 7 158 0 33 7 158 0 36 7 158 0 38 7 158 0 39 7 158 0 40 7 158 0 65 8 37 0 90 7 158 0 91 7 158 0 93 7 158 0 94 7 158 0 96 7 158 0 97 7 158 0 98 13 185 0 139 7 158 1 40] -#[1 13 189 0 9 10 233 0 15] -#[0 7 162 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 49 0 50 0 51 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105] -#[0 13 193 0 26] -#[0 7 166 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 49 0 50 0 51 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105] -#[0 13 197 0 26] -#[0 7 170 0 15 0 26 0 94] -#[0 7 174 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 7 178 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 47 0 49 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105 1 40] -#[0 7 182 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[0 7 186 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] -#[1 7 190 0 2 7 190 0 3 7 190 0 5 7 190 0 6 7 190 0 9 7 190 0 10 7 190 0 12 7 190 0 13 7 190 0 15 7 190 0 16 7 190 0 17 7 190 0 20 7 190 0 22 7 190 0 24 7 190 0 25 7 190 0 26 7 190 0 27 7 190 0 28 7 190 0 30 7 190 0 32 7 190 0 33 7 190 0 36 7 190 0 38 7 190 0 39 7 190 0 40 7 190 0 65 8 37 0 90 7 190 0 91 7 190 0 93 7 190 0 94 7 190 0 96 7 190 0 97 7 190 0 98 13 201 0 139 7 190 1 40] -#[0 7 194 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 49 0 50 0 51 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105] -#[0 7 198 0 8 0 13 0 17 0 26 0 27 0 37 0 42 0 43 0 44 0 45 0 46 0 49 0 50 0 51 0 53 0 54 0 56 0 58 0 60 0 61 0 62 0 66 0 67 0 68 0 69 0 70 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 81 0 82 0 83 0 85 0 86 0 87 0 88 0 89 0 90 0 94 0 99 0 100 0 101 0 102 0 103 0 104 0 105] -#[0 7 202 0 2 0 3 0 5 0 6 0 9 0 10 0 12 0 13 0 15 0 16 0 17 0 20 0 22 0 24 0 25 0 26 0 27 0 28 0 30 0 32 0 33 0 36 0 38 0 39 0 40 0 65 0 91 0 93 0 94 0 96 0 97 0 98 1 40] - ). -] - -{ #category : #private } -JavaParser >> performParsingStep [ - | actions scannerState token | - (currentToken value = '>>' or: [ currentToken value = '>>>' ]) - ifTrue: [ actions := OrderedCollection new. - self addActionsFor: scanner GREATER_THANId to: actions. - actions notEmpty - ifTrue: [ scannerState := scanner currentState. - token := currentToken. - scanner position: scanner position - (currentToken value size - 1). - currentToken := SmaCCToken value: '>' start: currentToken startPosition ids: (Array with: scanner GREATER_THANId). - actions do: [ :each | self splitWithAction: each ]. - currentToken := token. - scanner restoreState: scannerState ] ]. - ^ super performParsingStep -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForabstract_method_declaration1: nodes [ - | result | - result := JavaAbstractMethodDeclarationNode new. - result typeParameters: ((nodes at: 1) at: 1). - result type: ((nodes at: 1) at: 2). - result declarator: ((nodes at: 1) at: 3). - result throws: ((nodes at: 1) at: 4). - result addNodes: ((nodes at: 1) at: 5) to: result modifiers. - result semicolon: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForannotation1: nodes [ - | result | - result := JavaAnnotationNode new. - result _at: (nodes at: 1). - result name: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForannotation2: nodes [ - | result | - result := JavaAnnotationNode new. - result _at: (nodes at: 1). - result name: (nodes at: 2). - result leftParen: (nodes at: 3). - result addNodes: ((nodes at: 4) at: 1) to: result values. - result addTokens: ((nodes at: 4) at: 2) to: result commas. - result rightParen: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForannotation_args1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForannotation_args2: nodes [ - | result | - result := nodes at: 1. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForannotation_interface_body1: nodes [ - | result | - result := Array new: 3. - result at: 3 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForannotation_interface_body2: nodes [ - | result | - result := Array new: 3. - result at: 3 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: (nodes at: 2) to: (result at: 3). - result at: 2 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForannotation_interface_declaration1: nodes [ - | result | - result := JavaAnnotationInterfaceNode new. - result atToken: (nodes at: 1). - result interfaceToken: (nodes at: 2). - result name: (nodes at: 3). - result leftBrace: ((nodes at: 4) at: 1). - result rightBrace: ((nodes at: 4) at: 2). - result addNodes: ((nodes at: 4) at: 3) to: result declarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForannotation_interface_declaration2: nodes [ - | result | - result := JavaAnnotationInterfaceNode new. - result addNodes: (nodes at: 1) to: result modifiers. - result atToken: (nodes at: 2). - result interfaceToken: (nodes at: 3). - result name: (nodes at: 4). - result leftBrace: ((nodes at: 5) at: 1). - result rightBrace: ((nodes at: 5) at: 2). - result addNodes: ((nodes at: 5) at: 3) to: result declarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForannotation_method_declaration2: nodes [ - | result | - result := JavaAnnotationMethodDeclarationNode new. - result typeParameters: ((nodes at: 1) at: 1). - result type: ((nodes at: 1) at: 2). - result declarator: ((nodes at: 1) at: 3). - result throws: ((nodes at: 1) at: 4). - result addNodes: ((nodes at: 1) at: 5) to: result modifiers. - result defaultToken: (nodes at: 2). - result value: (nodes at: 3). - result semicolon: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForannotations1: nodes [ - | result | - result := OrderedCollection new: 2. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForarray_access1: nodes [ - | result | - result := JavaArrayAccessNode new. - result array: (nodes at: 1). - result leftBracket: (nodes at: 2). - result expression: (nodes at: 3). - result rightBracket: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForarray_creation_expression1: nodes [ - | result | - result := JavaNewArrayNode new. - result newToken: (nodes at: 1). - result type: (nodes at: 2). - result addNodes: (nodes at: 3) to: result dimExpressions. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForarray_creation_expression2: nodes [ - | result | - result := JavaNewArrayNode new. - result newToken: (nodes at: 1). - result type: (nodes at: 2). - result addNodes: (nodes at: 3) to: result dimExpressions. - result addTokens: ((nodes at: 4) at: 1) to: result leftBrackets. - result addTokens: ((nodes at: 4) at: 2) to: result rightBrackets. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForarray_creation_expression5: nodes [ - | result | - result := JavaNewArrayNode new. - result newToken: (nodes at: 1). - result type: (nodes at: 2). - result addTokens: ((nodes at: 3) at: 1) to: result leftBrackets. - result addTokens: ((nodes at: 3) at: 2) to: result rightBrackets. - result initializer: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForarray_initializer1: nodes [ - | result | - result := JavaArrayInitializerNode new. - result leftBrace: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result initializers. - result addTokens: ((nodes at: 2) at: 2) to: result commas. - result addToken: (nodes at: 3) to: result commas. - result rightBrace: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForarray_initializer2: nodes [ - | result | - result := JavaArrayInitializerNode new. - result leftBrace: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result initializers. - result addTokens: ((nodes at: 2) at: 2) to: result commas. - result rightBrace: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForarray_initializer3: nodes [ - | result | - result := JavaArrayInitializerNode new. - result leftBrace: (nodes at: 1). - result addToken: (nodes at: 2) to: result commas. - result rightBrace: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForarray_initializer4: nodes [ - | result | - result := JavaArrayInitializerNode new. - result leftBrace: (nodes at: 1). - result rightBrace: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForarray_type1: nodes [ - | result | - result := JavaArrayTypeNode new. - result baseType: (nodes at: 1). - result addTokens: ((nodes at: 2) at: 1) to: result leftBrackets. - result addTokens: ((nodes at: 2) at: 2) to: result rightBrackets. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForassert_statement1: nodes [ - | result | - result := JavaAssertStatementNode new. - result assertToken: (nodes at: 1). - result testExpression: (nodes at: 2). - result semicolon: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForassert_statement2: nodes [ - | result | - result := JavaAssertStatementNode new. - result assertToken: (nodes at: 1). - result testExpression: (nodes at: 2). - result colon: (nodes at: 3). - result messageExpression: (nodes at: 4). - result semicolon: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForassignment1: nodes [ - | result | - result := JavaAssignmentNode new. - result variable: (nodes at: 1). - result op: (nodes at: 2). - result value: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForblock1: nodes [ - | result | - result := JavaBlockNode new. - result leftBrace: (nodes at: 1). - result rightBrace: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForblock2: nodes [ - | result | - result := JavaBlockNode new. - result leftBrace: (nodes at: 1). - result addNodes: (nodes at: 2) to: result statements. - result rightBrace: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForbreak_statement1: nodes [ - | result | - result := JavaBreakStatementNode new. - result breakToken: (nodes at: 1). - result semicolon: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForbreak_statement2: nodes [ - | result | - result := JavaBreakStatementNode new. - result breakToken: (nodes at: 1). - result identifier: (nodes at: 2). - result semicolon: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForcast_expression1: nodes [ - | result | - result := JavaCastExpressionNode new. - result leftParen: (nodes at: 1). - result type: (nodes at: 2). - result rightParen: (nodes at: 3). - result expression: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForcast_expression5: nodes [ - | result | - result := JavaCastExpressionNode new. - result leftParen: (nodes at: 1). - result type: (nodes at: 2). - result ampToken: (nodes at: 3). - result interfaceType: (nodes at: 4). - result rightParen: (nodes at: 5). - result expression: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForcatch_clause1: nodes [ - | result | - result := JavaCatchClauseNode new. - result catchToken: (nodes at: 1). - result leftParen: (nodes at: 2). - result parameter: (nodes at: 3). - result rightParen: (nodes at: 4). - result block: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForcatch_parameter1: nodes [ - | result | - result := JavaCatchParameterNode new. - result addNodes: (nodes at: 1) to: result modifiers. - result addNodes: ((nodes at: 2) at: 1) to: result types. - result addTokens: ((nodes at: 2) at: 2) to: result bars. - result variable: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForclass_body_declaration4: nodes [ - | result | - result := JavaInitializerNode new. - result block: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForclass_declaration1: nodes [ - | result | - result := JavaClassDeclarationNode new. - result classToken: (nodes at: 1). - result name: (nodes at: 2). - result typeParameters: (nodes at: 3). - result leftBrace: ((nodes at: 4) at: 1). - result rightBrace: ((nodes at: 4) at: 2). - result addNodes: ((nodes at: 4) at: 3) to: result declarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForclass_declaration2: nodes [ - | result | - result := JavaClassDeclarationNode new. - result classToken: (nodes at: 1). - result name: (nodes at: 2). - result typeParameters: (nodes at: 3). - result implementsToken: ((nodes at: 4) at: 1). - result addNodes: ((nodes at: 4) at: 2) to: result interfaces. - result addTokens: ((nodes at: 4) at: 3) to: result commas. - result leftBrace: ((nodes at: 5) at: 1). - result rightBrace: ((nodes at: 5) at: 2). - result addNodes: ((nodes at: 5) at: 3) to: result declarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForclass_declaration3: nodes [ - | result | - result := JavaClassDeclarationNode new. - result classToken: (nodes at: 1). - result name: (nodes at: 2). - result typeParameters: (nodes at: 3). - result extendsToken: ((nodes at: 4) at: 1). - result superclass: ((nodes at: 4) at: 2). - result leftBrace: ((nodes at: 5) at: 1). - result rightBrace: ((nodes at: 5) at: 2). - result addNodes: ((nodes at: 5) at: 3) to: result declarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForclass_declaration4: nodes [ - | result | - result := JavaClassDeclarationNode new. - result classToken: (nodes at: 1). - result name: (nodes at: 2). - result typeParameters: (nodes at: 3). - result extendsToken: ((nodes at: 4) at: 1). - result superclass: ((nodes at: 4) at: 2). - result implementsToken: ((nodes at: 5) at: 1). - result addNodes: ((nodes at: 5) at: 2) to: result interfaces. - result addTokens: ((nodes at: 5) at: 3) to: result commas. - result leftBrace: ((nodes at: 6) at: 1). - result rightBrace: ((nodes at: 6) at: 2). - result addNodes: ((nodes at: 6) at: 3) to: result declarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForclass_declaration5: nodes [ - | result | - result := JavaClassDeclarationNode new. - result addNodes: (nodes at: 1) to: result modifiers. - result classToken: (nodes at: 2). - result name: (nodes at: 3). - result typeParameters: (nodes at: 4). - result leftBrace: ((nodes at: 5) at: 1). - result rightBrace: ((nodes at: 5) at: 2). - result addNodes: ((nodes at: 5) at: 3) to: result declarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForclass_declaration6: nodes [ - | result | - result := JavaClassDeclarationNode new. - result addNodes: (nodes at: 1) to: result modifiers. - result classToken: (nodes at: 2). - result name: (nodes at: 3). - result typeParameters: (nodes at: 4). - result implementsToken: ((nodes at: 5) at: 1). - result addNodes: ((nodes at: 5) at: 2) to: result interfaces. - result addTokens: ((nodes at: 5) at: 3) to: result commas. - result leftBrace: ((nodes at: 6) at: 1). - result rightBrace: ((nodes at: 6) at: 2). - result addNodes: ((nodes at: 6) at: 3) to: result declarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForclass_declaration7: nodes [ - | result | - result := JavaClassDeclarationNode new. - result addNodes: (nodes at: 1) to: result modifiers. - result classToken: (nodes at: 2). - result name: (nodes at: 3). - result typeParameters: (nodes at: 4). - result extendsToken: ((nodes at: 5) at: 1). - result superclass: ((nodes at: 5) at: 2). - result leftBrace: ((nodes at: 6) at: 1). - result rightBrace: ((nodes at: 6) at: 2). - result addNodes: ((nodes at: 6) at: 3) to: result declarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForclass_declaration8: nodes [ - | result | - result := JavaClassDeclarationNode new. - result addNodes: (nodes at: 1) to: result modifiers. - result classToken: (nodes at: 2). - result name: (nodes at: 3). - result typeParameters: (nodes at: 4). - result extendsToken: ((nodes at: 5) at: 1). - result superclass: ((nodes at: 5) at: 2). - result implementsToken: ((nodes at: 6) at: 1). - result addNodes: ((nodes at: 6) at: 2) to: result interfaces. - result addTokens: ((nodes at: 6) at: 3) to: result commas. - result leftBrace: ((nodes at: 7) at: 1). - result rightBrace: ((nodes at: 7) at: 2). - result addNodes: ((nodes at: 7) at: 3) to: result declarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForclass_instance_creation_expression1: nodes [ - | result | - result := JavaNewNode new. - result newToken: (nodes at: 1). - result type: (nodes at: 2). - result leftParen: (nodes at: 3). - result rightParen: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForclass_instance_creation_expression2: nodes [ - | result | - result := JavaNewNode new. - result newToken: (nodes at: 1). - result type: (nodes at: 2). - result leftParen: (nodes at: 3). - result addNodes: ((nodes at: 4) at: 1) to: result expressions. - result addTokens: ((nodes at: 4) at: 2) to: result commas. - result rightParen: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForclass_instance_creation_expression3: nodes [ - | result | - result := JavaNewClassNode new. - result newToken: (nodes at: 1). - result type: (nodes at: 2). - result leftParen: (nodes at: 3). - result rightParen: (nodes at: 4). - result leftBrace: ((nodes at: 5) at: 1). - result rightBrace: ((nodes at: 5) at: 2). - result addNodes: ((nodes at: 5) at: 3) to: result declarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForclass_instance_creation_expression4: nodes [ - | result | - result := JavaNewClassNode new. - result newToken: (nodes at: 1). - result type: (nodes at: 2). - result leftParen: (nodes at: 3). - result addNodes: ((nodes at: 4) at: 1) to: result expressions. - result addTokens: ((nodes at: 4) at: 2) to: result commas. - result rightParen: (nodes at: 5). - result leftBrace: ((nodes at: 6) at: 1). - result rightBrace: ((nodes at: 6) at: 2). - result addNodes: ((nodes at: 6) at: 3) to: result declarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForclass_instance_creation_expression5: nodes [ - | result | - result := JavaNewNode new. - result primary: (nodes at: 1). - result period: (nodes at: 2). - result newToken: (nodes at: 3). - result lt: ((nodes at: 4) at: 1). - result addNodes: ((nodes at: 4) at: 2) to: result arguments. - result addTokens: ((nodes at: 4) at: 3) to: result commas. - result gt: ((nodes at: 4) at: 4). - result name: (nodes at: 5). - result typeArgLeft: ((nodes at: 6) at: 1). - result addNodes: ((nodes at: 6) at: 2) to: result arguments. - result addTokens: ((nodes at: 6) at: 3) to: result commas. - result typeArgRight: ((nodes at: 6) at: 4). - result leftParen: (nodes at: 7). - result rightParen: (nodes at: 8). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForclass_instance_creation_expression6: nodes [ - | result | - result := JavaNewNode new. - result primary: (nodes at: 1). - result period: (nodes at: 2). - result newToken: (nodes at: 3). - result lt: ((nodes at: 4) at: 1). - result addNodes: ((nodes at: 4) at: 2) to: result arguments. - result addTokens: ((nodes at: 4) at: 3) to: result commas. - result gt: ((nodes at: 4) at: 4). - result name: (nodes at: 5). - result typeArgLeft: ((nodes at: 6) at: 1). - result addNodes: ((nodes at: 6) at: 2) to: result arguments. - result addTokens: ((nodes at: 6) at: 3) to: result commas. - result typeArgRight: ((nodes at: 6) at: 4). - result leftParen: (nodes at: 7). - result addNodes: ((nodes at: 8) at: 1) to: result expressions. - result addTokens: ((nodes at: 8) at: 2) to: result commas. - result rightParen: (nodes at: 9). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForclass_instance_creation_expression7: nodes [ - | result | - result := JavaNewClassNode new. - result primary: (nodes at: 1). - result period: (nodes at: 2). - result newToken: (nodes at: 3). - result lt: ((nodes at: 4) at: 1). - result addNodes: ((nodes at: 4) at: 2) to: result arguments. - result addTokens: ((nodes at: 4) at: 3) to: result commas. - result gt: ((nodes at: 4) at: 4). - result name: (nodes at: 5). - result typeArgLeft: ((nodes at: 6) at: 1). - result addNodes: ((nodes at: 6) at: 2) to: result arguments. - result addTokens: ((nodes at: 6) at: 3) to: result commas. - result typeArgRight: ((nodes at: 6) at: 4). - result leftParen: (nodes at: 7). - result rightParen: (nodes at: 8). - result leftBrace: ((nodes at: 9) at: 1). - result rightBrace: ((nodes at: 9) at: 2). - result addNodes: ((nodes at: 9) at: 3) to: result declarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForclass_instance_creation_expression8: nodes [ - | result | - result := JavaNewClassNode new. - result primary: (nodes at: 1). - result period: (nodes at: 2). - result newToken: (nodes at: 3). - result lt: ((nodes at: 4) at: 1). - result addNodes: ((nodes at: 4) at: 2) to: result arguments. - result addTokens: ((nodes at: 4) at: 3) to: result commas. - result gt: ((nodes at: 4) at: 4). - result name: (nodes at: 5). - result typeArgLeft: ((nodes at: 6) at: 1). - result addNodes: ((nodes at: 6) at: 2) to: result arguments. - result addTokens: ((nodes at: 6) at: 3) to: result commas. - result typeArgRight: ((nodes at: 6) at: 4). - result leftParen: (nodes at: 7). - result addNodes: ((nodes at: 8) at: 1) to: result expressions. - result addTokens: ((nodes at: 8) at: 2) to: result commas. - result rightParen: (nodes at: 9). - result leftBrace: ((nodes at: 10) at: 1). - result rightBrace: ((nodes at: 10) at: 2). - result addNodes: ((nodes at: 10) at: 3) to: result declarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForclass_or_interface_type1: nodes [ - | result | - result := JavaClassTypeNode new. - result name: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForcompilation_unit1: nodes [ - | result | - result := JavaProgramFileNode new. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForcompilation_unit2: nodes [ - | result | - result := JavaProgramFileNode new. - result addNodes: (nodes at: 1) to: result typeDeclarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForcompilation_unit3: nodes [ - | result | - result := JavaProgramFileNode new. - result addNodes: (nodes at: 1) to: result imports. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForcompilation_unit4: nodes [ - | result | - result := JavaProgramFileNode new. - result addNodes: (nodes at: 1) to: result imports. - result addNodes: (nodes at: 2) to: result typeDeclarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForcompilation_unit5: nodes [ - | result | - result := JavaProgramFileNode new. - result packageDeclaration: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForcompilation_unit6: nodes [ - | result | - result := JavaProgramFileNode new. - result packageDeclaration: (nodes at: 1). - result addNodes: (nodes at: 2) to: result typeDeclarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForcompilation_unit7: nodes [ - | result | - result := JavaProgramFileNode new. - result packageDeclaration: (nodes at: 1). - result addNodes: (nodes at: 2) to: result imports. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForcompilation_unit8: nodes [ - | result | - result := JavaProgramFileNode new. - result packageDeclaration: (nodes at: 1). - result addNodes: (nodes at: 2) to: result imports. - result addNodes: (nodes at: 3) to: result typeDeclarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForconditional_expression2: nodes [ - | result | - result := JavaConditionalExpressionNode new. - result testExpression: (nodes at: 1). - result questionMark: (nodes at: 2). - result trueExpression: (nodes at: 3). - result colon: (nodes at: 4). - result falseExpression: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForconstructor_body1: nodes [ - | result | - result := JavaBlockNode new. - result leftBrace: (nodes at: 1). - result addNode: (nodes at: 2) to: result statements. - result addNodes: (nodes at: 3) to: result statements. - result rightBrace: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForconstructor_body2: nodes [ - | result | - result := JavaBlockNode new. - result leftBrace: (nodes at: 1). - result addNode: (nodes at: 2) to: result statements. - result rightBrace: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForconstructor_declaration1: nodes [ - | result | - result := JavaConstructorDeclarationNode new. - result typeParameters: ((nodes at: 1) at: 1). - result name: ((nodes at: 1) at: 2). - result leftParen: ((nodes at: 1) at: 3). - result rightParen: ((nodes at: 1) at: 4). - result addNodes: ((nodes at: 1) at: 5) to: result parameters. - result addTokens: ((nodes at: 1) at: 6) to: result commas. - result body: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForconstructor_declaration2: nodes [ - | result | - result := JavaConstructorDeclarationNode new. - result typeParameters: ((nodes at: 1) at: 1). - result name: ((nodes at: 1) at: 2). - result leftParen: ((nodes at: 1) at: 3). - result rightParen: ((nodes at: 1) at: 4). - result addNodes: ((nodes at: 1) at: 5) to: result parameters. - result addTokens: ((nodes at: 1) at: 6) to: result commas. - result throws: (nodes at: 2). - result body: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForconstructor_declaration3: nodes [ - | result | - result := JavaConstructorDeclarationNode new. - result addNodes: (nodes at: 1) to: result modifiers. - result typeParameters: ((nodes at: 2) at: 1). - result name: ((nodes at: 2) at: 2). - result leftParen: ((nodes at: 2) at: 3). - result rightParen: ((nodes at: 2) at: 4). - result addNodes: ((nodes at: 2) at: 5) to: result parameters. - result addTokens: ((nodes at: 2) at: 6) to: result commas. - result body: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForconstructor_declaration4: nodes [ - | result | - result := JavaConstructorDeclarationNode new. - result addNodes: (nodes at: 1) to: result modifiers. - result typeParameters: ((nodes at: 2) at: 1). - result name: ((nodes at: 2) at: 2). - result leftParen: ((nodes at: 2) at: 3). - result rightParen: ((nodes at: 2) at: 4). - result addNodes: ((nodes at: 2) at: 5) to: result parameters. - result addTokens: ((nodes at: 2) at: 6) to: result commas. - result throws: (nodes at: 3). - result body: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForconstructor_declarator1: nodes [ - | result | - result := Array new: 6. - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - result at: 4 put: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForconstructor_declarator2: nodes [ - | result | - result := Array new: 6. - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - self addAll: ((nodes at: 4) at: 1) to: (result at: 5). - self addAll: ((nodes at: 4) at: 2) to: (result at: 6). - result at: 4 put: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForcontinue_statement1: nodes [ - | result | - result := JavaContinueStatementNode new. - result continueToken: (nodes at: 1). - result semicolon: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForcontinue_statement2: nodes [ - | result | - result := JavaContinueStatementNode new. - result continueToken: (nodes at: 1). - result identifier: (nodes at: 2). - result semicolon: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFordim_expr1: nodes [ - | result | - result := JavaDimensionExpressionNode new. - result leftBracket: (nodes at: 1). - result expression: (nodes at: 2). - result rightBracket: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFordims1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - self add: ((nodes at: 1) at: 1) to: (result at: 1). - self add: ((nodes at: 1) at: 2) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFordims2: nodes [ - | result | - result := nodes at: 1. - self add: ((nodes at: 2) at: 1) to: (result at: 1). - self add: ((nodes at: 2) at: 2) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFordo_statement1: nodes [ - | result | - result := JavaDoWhileStatementNode new. - result doToken: (nodes at: 1). - result statement: (nodes at: 2). - result whileToken: (nodes at: 3). - result leftParen: (nodes at: 4). - result expression: (nodes at: 5). - result rightParen: (nodes at: 6). - result semicolon: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForelementValueArrayInitializer1: nodes [ - | result | - result := JavaElementArrayInitializerNode new. - result leftBrace: (nodes at: 1). - result rightBrace: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForelementValueArrayInitializer2: nodes [ - | result | - result := JavaElementArrayInitializerNode new. - result leftBrace: (nodes at: 1). - result addToken: (nodes at: 2) to: result commas. - result rightBrace: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForelementValueArrayInitializer3: nodes [ - | result | - result := JavaElementArrayInitializerNode new. - result leftBrace: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result values. - result addTokens: ((nodes at: 2) at: 2) to: result commas. - result rightBrace: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForelementValueArrayInitializer4: nodes [ - | result | - result := JavaElementArrayInitializerNode new. - result leftBrace: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result values. - result addTokens: ((nodes at: 2) at: 2) to: result commas. - result addToken: (nodes at: 3) to: result commas. - result rightBrace: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForelementValuePair1: nodes [ - | result | - result := JavaElementValuePairNode new. - result name: (nodes at: 1). - result equals: (nodes at: 2). - result value: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForempty_dim_expr1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForempty_statement1: nodes [ - | result | - result := JavaEmptyStatementNode new. - result semicolon: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForenum_body1: nodes [ - | result | - result := Array new: 6. - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForenum_body2: nodes [ - | result | - result := Array new: 6. - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - result at: 3 put: ((nodes at: 2) at: 1). - self addAll: ((nodes at: 2) at: 2) to: (result at: 4). - result at: 2 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForenum_body3: nodes [ - | result | - result := Array new: 6. - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self add: (nodes at: 2) to: (result at: 5). - result at: 2 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForenum_body4: nodes [ - | result | - result := Array new: 6. - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self add: (nodes at: 2) to: (result at: 5). - result at: 3 put: ((nodes at: 3) at: 1). - self addAll: ((nodes at: 3) at: 2) to: (result at: 4). - result at: 2 put: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForenum_body5: nodes [ - | result | - result := Array new: 6. - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 6). - self addAll: ((nodes at: 2) at: 2) to: (result at: 5). - result at: 2 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForenum_body6: nodes [ - | result | - result := Array new: 6. - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 6). - self addAll: ((nodes at: 2) at: 2) to: (result at: 5). - result at: 3 put: ((nodes at: 3) at: 1). - self addAll: ((nodes at: 3) at: 2) to: (result at: 4). - result at: 2 put: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForenum_body7: nodes [ - | result | - result := Array new: 6. - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 6). - self addAll: ((nodes at: 2) at: 2) to: (result at: 5). - self add: (nodes at: 3) to: (result at: 5). - result at: 2 put: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForenum_body8: nodes [ - | result | - result := Array new: 6. - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 6). - self addAll: ((nodes at: 2) at: 2) to: (result at: 5). - self add: (nodes at: 3) to: (result at: 5). - result at: 3 put: ((nodes at: 4) at: 1). - self addAll: ((nodes at: 4) at: 2) to: (result at: 4). - result at: 2 put: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForenum_body_declarations1: nodes [ - | result | - result := Array new: 2. - result at: 2 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForenum_body_declarations2: nodes [ - | result | - result := Array new: 2. - result at: 2 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: (nodes at: 2) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForenum_constant1: nodes [ - | result | - result := JavaEnumConstantNode new. - result addNodes: (nodes at: 1) to: result annotations. - result name: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForenum_constant2: nodes [ - | result | - result := JavaEnumConstantNode new. - result addNodes: (nodes at: 1) to: result annotations. - result name: (nodes at: 2). - result leftBrace: ((nodes at: 3) at: 1). - result rightBrace: ((nodes at: 3) at: 2). - result addNodes: ((nodes at: 3) at: 3) to: result declarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForenum_constant3: nodes [ - | result | - result := JavaEnumConstantNode new. - result addNodes: (nodes at: 1) to: result annotations. - result name: (nodes at: 2). - result leftParen: (nodes at: 3). - result rightParen: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForenum_constant4: nodes [ - | result | - result := JavaEnumConstantNode new. - result addNodes: (nodes at: 1) to: result annotations. - result name: (nodes at: 2). - result leftParen: (nodes at: 3). - result rightParen: (nodes at: 4). - result leftBrace: ((nodes at: 5) at: 1). - result rightBrace: ((nodes at: 5) at: 2). - result addNodes: ((nodes at: 5) at: 3) to: result declarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForenum_constant5: nodes [ - | result | - result := JavaEnumConstantNode new. - result addNodes: (nodes at: 1) to: result annotations. - result name: (nodes at: 2). - result leftParen: (nodes at: 3). - result addNodes: ((nodes at: 4) at: 1) to: result expressions. - result addTokens: ((nodes at: 4) at: 2) to: result commas. - result rightParen: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForenum_constant6: nodes [ - | result | - result := JavaEnumConstantNode new. - result addNodes: (nodes at: 1) to: result annotations. - result name: (nodes at: 2). - result leftParen: (nodes at: 3). - result addNodes: ((nodes at: 4) at: 1) to: result expressions. - result addTokens: ((nodes at: 4) at: 2) to: result commas. - result rightParen: (nodes at: 5). - result leftBrace: ((nodes at: 6) at: 1). - result rightBrace: ((nodes at: 6) at: 2). - result addNodes: ((nodes at: 6) at: 3) to: result declarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForenum_declaration1: nodes [ - | result | - result := JavaEnumDeclarationNode new. - result enumToken: (nodes at: 1). - result name: (nodes at: 2). - result leftBrace: ((nodes at: 3) at: 1). - result rightBrace: ((nodes at: 3) at: 2). - result semicolon: ((nodes at: 3) at: 3). - result addNodes: ((nodes at: 3) at: 4) to: result declarations. - result addTokens: ((nodes at: 3) at: 5) to: result commas. - result addNodes: ((nodes at: 3) at: 6) to: result constants. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForenum_declaration2: nodes [ - | result | - result := JavaEnumDeclarationNode new. - result enumToken: (nodes at: 1). - result name: (nodes at: 2). - result implementsToken: ((nodes at: 3) at: 1). - result addNodes: ((nodes at: 3) at: 2) to: result interfaces. - result addTokens: ((nodes at: 3) at: 3) to: result commas. - result leftBrace: ((nodes at: 4) at: 1). - result rightBrace: ((nodes at: 4) at: 2). - result semicolon: ((nodes at: 4) at: 3). - result addNodes: ((nodes at: 4) at: 4) to: result declarations. - result addTokens: ((nodes at: 4) at: 5) to: result commas. - result addNodes: ((nodes at: 4) at: 6) to: result constants. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForenum_declaration3: nodes [ - | result | - result := JavaEnumDeclarationNode new. - result addNodes: (nodes at: 1) to: result modifiers. - result enumToken: (nodes at: 2). - result name: (nodes at: 3). - result leftBrace: ((nodes at: 4) at: 1). - result rightBrace: ((nodes at: 4) at: 2). - result semicolon: ((nodes at: 4) at: 3). - result addNodes: ((nodes at: 4) at: 4) to: result declarations. - result addTokens: ((nodes at: 4) at: 5) to: result commas. - result addNodes: ((nodes at: 4) at: 6) to: result constants. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForenum_declaration4: nodes [ - | result | - result := JavaEnumDeclarationNode new. - result addNodes: (nodes at: 1) to: result modifiers. - result enumToken: (nodes at: 2). - result name: (nodes at: 3). - result implementsToken: ((nodes at: 4) at: 1). - result addNodes: ((nodes at: 4) at: 2) to: result interfaces. - result addTokens: ((nodes at: 4) at: 3) to: result commas. - result leftBrace: ((nodes at: 5) at: 1). - result rightBrace: ((nodes at: 5) at: 2). - result semicolon: ((nodes at: 5) at: 3). - result addNodes: ((nodes at: 5) at: 4) to: result declarations. - result addTokens: ((nodes at: 5) at: 5) to: result commas. - result addNodes: ((nodes at: 5) at: 6) to: result constants. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForexplicit_constructor_invocation1: nodes [ - | result | - result := JavaThisConstructorInvocationNode new. - result thisToken: (nodes at: 1). - result leftParen: (nodes at: 2). - result rightParen: (nodes at: 3). - result semicolon: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForexplicit_constructor_invocation2: nodes [ - | result | - result := JavaThisConstructorInvocationNode new. - result thisToken: (nodes at: 1). - result leftParen: (nodes at: 2). - result addNodes: ((nodes at: 3) at: 1) to: result expressions. - result addTokens: ((nodes at: 3) at: 2) to: result commas. - result rightParen: (nodes at: 4). - result semicolon: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForexplicit_constructor_invocation3: nodes [ - | result | - result := JavaSuperConstructorInvocationNode new. - result superToken: (nodes at: 1). - result leftParen: (nodes at: 2). - result rightParen: (nodes at: 3). - result semicolon: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForexplicit_constructor_invocation4: nodes [ - | result | - result := JavaSuperConstructorInvocationNode new. - result superToken: (nodes at: 1). - result leftParen: (nodes at: 2). - result addNodes: ((nodes at: 3) at: 1) to: result expressions. - result addTokens: ((nodes at: 3) at: 2) to: result commas. - result rightParen: (nodes at: 4). - result semicolon: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForexplicit_constructor_invocation5: nodes [ - | result | - result := JavaThisConstructorInvocationNode new. - result primary: (nodes at: 1). - result period: (nodes at: 2). - result thisToken: (nodes at: 3). - result leftParen: (nodes at: 4). - result rightParen: (nodes at: 5). - result semicolon: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForexplicit_constructor_invocation6: nodes [ - | result | - result := JavaThisConstructorInvocationNode new. - result primary: (nodes at: 1). - result period: (nodes at: 2). - result thisToken: (nodes at: 3). - result leftParen: (nodes at: 4). - result addNodes: ((nodes at: 5) at: 1) to: result expressions. - result addTokens: ((nodes at: 5) at: 2) to: result commas. - result rightParen: (nodes at: 6). - result semicolon: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForexplicit_constructor_invocation7: nodes [ - | result | - result := JavaSuperConstructorInvocationNode new. - result primary: (nodes at: 1). - result period: (nodes at: 2). - result superToken: (nodes at: 3). - result leftParen: (nodes at: 4). - result rightParen: (nodes at: 5). - result semicolon: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForexplicit_constructor_invocation8: nodes [ - | result | - result := JavaSuperConstructorInvocationNode new. - result primary: (nodes at: 1). - result period: (nodes at: 2). - result superToken: (nodes at: 3). - result leftParen: (nodes at: 4). - result addNodes: ((nodes at: 5) at: 1) to: result expressions. - result addTokens: ((nodes at: 5) at: 2) to: result commas. - result rightParen: (nodes at: 6). - result semicolon: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForexpression_statement1: nodes [ - | result | - result := JavaExpressionStatementNode new. - result expression: (nodes at: 1). - result semicolon: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForextends_interfaces1: nodes [ - | result | - result := Array new: 3. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self add: (nodes at: 2) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForextends_interfaces2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 3). - self add: (nodes at: 3) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForfield_access1: nodes [ - | result | - result := JavaFieldAccessNode new. - result receiver: (nodes at: 1). - result period: (nodes at: 2). - result name: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForfield_access2: nodes [ - | result | - result := JavaFieldAccessNode new. - result superToken: (nodes at: 1). - result period: (nodes at: 2). - result name: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForfield_access3: nodes [ - | result | - result := JavaFieldAccessNode new. - result receiver: (nodes at: 1). - result superPeriod: (nodes at: 2). - result superToken: (nodes at: 3). - result period: (nodes at: 4). - result name: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForfield_declaration1: nodes [ - | result | - result := JavaFieldDeclarationNode new. - result type: (nodes at: 1). - result - addNodes: ((nodes at: 2) at: 1) - to: result variableDeclarations. - result addTokens: ((nodes at: 2) at: 2) to: result commas. - result semicolon: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForfield_declaration2: nodes [ - | result | - result := JavaFieldDeclarationNode new. - result addNodes: (nodes at: 1) to: result modifiers. - result type: (nodes at: 2). - result - addNodes: ((nodes at: 3) at: 1) - to: result variableDeclarations. - result addTokens: ((nodes at: 3) at: 2) to: result commas. - result semicolon: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForfinally1: nodes [ - | result | - result := JavaFinallyClauseNode new. - result finallyToken: (nodes at: 1). - result block: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForfloating_point_type1: nodes [ - | result | - result := JavaFloatTypeNode new. - result token: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForfloating_point_type2: nodes [ - | result | - result := JavaDoubleTypeNode new. - result token: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForfor_statement1: nodes [ - | result | - result := JavaForStatementNode new. - result forToken: (nodes at: 1). - result leftParen: (nodes at: 2). - result firstSemicolon: (nodes at: 3). - result secondSemicolon: (nodes at: 4). - result rightParen: (nodes at: 5). - result statement: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForfor_statement2: nodes [ - | result | - result := JavaForStatementNode new. - result forToken: (nodes at: 1). - result leftParen: (nodes at: 2). - result firstSemicolon: (nodes at: 3). - result secondSemicolon: (nodes at: 4). - result _update: (nodes at: 5). - result rightParen: (nodes at: 6). - result statement: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForfor_statement3: nodes [ - | result | - result := JavaForStatementNode new. - result forToken: (nodes at: 1). - result leftParen: (nodes at: 2). - result firstSemicolon: (nodes at: 3). - result test: (nodes at: 4). - result secondSemicolon: (nodes at: 5). - result rightParen: (nodes at: 6). - result statement: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForfor_statement4: nodes [ - | result | - result := JavaForStatementNode new. - result forToken: (nodes at: 1). - result leftParen: (nodes at: 2). - result firstSemicolon: (nodes at: 3). - result test: (nodes at: 4). - result secondSemicolon: (nodes at: 5). - result _update: (nodes at: 6). - result rightParen: (nodes at: 7). - result statement: (nodes at: 8). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForfor_statement5: nodes [ - | result | - result := JavaForStatementNode new. - result forToken: (nodes at: 1). - result leftParen: (nodes at: 2). - result initial: (nodes at: 3). - result firstSemicolon: (nodes at: 4). - result secondSemicolon: (nodes at: 5). - result rightParen: (nodes at: 6). - result statement: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForfor_statement6: nodes [ - | result | - result := JavaForStatementNode new. - result forToken: (nodes at: 1). - result leftParen: (nodes at: 2). - result initial: (nodes at: 3). - result firstSemicolon: (nodes at: 4). - result secondSemicolon: (nodes at: 5). - result _update: (nodes at: 6). - result rightParen: (nodes at: 7). - result statement: (nodes at: 8). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForfor_statement7: nodes [ - | result | - result := JavaForStatementNode new. - result forToken: (nodes at: 1). - result leftParen: (nodes at: 2). - result initial: (nodes at: 3). - result firstSemicolon: (nodes at: 4). - result test: (nodes at: 5). - result secondSemicolon: (nodes at: 6). - result rightParen: (nodes at: 7). - result statement: (nodes at: 8). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForfor_statement8: nodes [ - | result | - result := JavaForStatementNode new. - result forToken: (nodes at: 1). - result leftParen: (nodes at: 2). - result initial: (nodes at: 3). - result firstSemicolon: (nodes at: 4). - result test: (nodes at: 5). - result secondSemicolon: (nodes at: 6). - result _update: (nodes at: 7). - result rightParen: (nodes at: 8). - result statement: (nodes at: 9). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForforeach_statement1: nodes [ - | result | - result := JavaForEachStatementNode new. - result forToken: (nodes at: 1). - result leftParen: (nodes at: 2). - result addNodes: (nodes at: 3) to: result modifiers. - result type: (nodes at: 4). - result name: (nodes at: 5). - result colon: (nodes at: 6). - result expression: (nodes at: 7). - result rightParen: (nodes at: 8). - result statement: (nodes at: 9). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForformal_parameter1: nodes [ - | result | - result := JavaParameterNode new. - result addNodes: (nodes at: 1) to: result modifiers. - result type: (nodes at: 2). - result variable: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForformal_parameter2: nodes [ - | result | - result := JavaVariableArgumentParameterNode new. - result addNodes: (nodes at: 1) to: result modifiers. - result type: (nodes at: 2). - result varArgsToken: (nodes at: 3). - result variable: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForif_then_else_statement1: nodes [ - | result | - result := JavaIfElseStatementNode new. - result ifToken: (nodes at: 1). - result leftParen: (nodes at: 2). - result expression: (nodes at: 3). - result rightParen: (nodes at: 4). - result trueStatement: (nodes at: 5). - result elseToken: (nodes at: 6). - result falseStatement: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForif_then_statement1: nodes [ - | result | - result := JavaIfStatementNode new. - result ifToken: (nodes at: 1). - result leftParen: (nodes at: 2). - result expression: (nodes at: 3). - result rightParen: (nodes at: 4). - result trueStatement: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForimport_declarations1: nodes [ - | result | - result := OrderedCollection new: 2. - self add: (nodes at: 1) to: result. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForimport_declarations2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: result. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForinitialized_variable_declarator1: nodes [ - | result | - result := JavaInitializedVariableDeclarationNode new. - result variable: (nodes at: 1). - result equals: (nodes at: 2). - result initializer: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForintegral_type1: nodes [ - | result | - result := JavaByteTypeNode new. - result token: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForintegral_type2: nodes [ - | result | - result := JavaShortTypeNode new. - result token: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForintegral_type3: nodes [ - | result | - result := JavaIntTypeNode new. - result token: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForintegral_type4: nodes [ - | result | - result := JavaLongTypeNode new. - result token: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForintegral_type5: nodes [ - | result | - result := JavaCharTypeNode new. - result token: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForinterface_declaration1: nodes [ - | result | - result := JavaInterfaceDeclarationNode new. - result interfaceToken: (nodes at: 1). - result name: (nodes at: 2). - result typeParameters: (nodes at: 3). - result leftBrace: ((nodes at: 4) at: 1). - result rightBrace: ((nodes at: 4) at: 2). - result addNodes: ((nodes at: 4) at: 3) to: result declarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForinterface_declaration2: nodes [ - | result | - result := JavaInterfaceDeclarationNode new. - result interfaceToken: (nodes at: 1). - result name: (nodes at: 2). - result typeParameters: (nodes at: 3). - result extendsToken: ((nodes at: 4) at: 1). - result addNodes: ((nodes at: 4) at: 2) to: result interfaceTypes. - result addTokens: ((nodes at: 4) at: 3) to: result commas. - result leftBrace: ((nodes at: 5) at: 1). - result rightBrace: ((nodes at: 5) at: 2). - result addNodes: ((nodes at: 5) at: 3) to: result declarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForinterface_declaration3: nodes [ - | result | - result := JavaInterfaceDeclarationNode new. - result addNodes: (nodes at: 1) to: result modifiers. - result interfaceToken: (nodes at: 2). - result name: (nodes at: 3). - result typeParameters: (nodes at: 4). - result leftBrace: ((nodes at: 5) at: 1). - result rightBrace: ((nodes at: 5) at: 2). - result addNodes: ((nodes at: 5) at: 3) to: result declarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForinterface_declaration4: nodes [ - | result | - result := JavaInterfaceDeclarationNode new. - result addNodes: (nodes at: 1) to: result modifiers. - result interfaceToken: (nodes at: 2). - result name: (nodes at: 3). - result typeParameters: (nodes at: 4). - result extendsToken: ((nodes at: 5) at: 1). - result addNodes: ((nodes at: 5) at: 2) to: result interfaceTypes. - result addTokens: ((nodes at: 5) at: 3) to: result commas. - result leftBrace: ((nodes at: 6) at: 1). - result rightBrace: ((nodes at: 6) at: 2). - result addNodes: ((nodes at: 6) at: 3) to: result declarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForinterface_method_declaration1: nodes [ - | result | - result := JavaMethodDeclarationNode new. - result addNodes: ((nodes at: 1) at: 1) to: result modifiers. - result typeParameters: ((nodes at: 1) at: 2). - result type: ((nodes at: 1) at: 3). - result declarator: ((nodes at: 1) at: 4). - result throws: ((nodes at: 1) at: 5). - result body: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForinterface_method_header1: nodes [ - | result | - result := Array new: 5. - result at: 1 put: (OrderedCollection new: 2). - self addAll: (nodes at: 1) to: (result at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - result at: 4 put: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForinterface_method_header2: nodes [ - | result | - result := Array new: 5. - result at: 1 put: (OrderedCollection new: 2). - self addAll: (nodes at: 1) to: (result at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - result at: 4 put: (nodes at: 4). - result at: 5 put: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForinterfaces1: nodes [ - | result | - result := Array new: 3. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForlabeled_statement1: nodes [ - | result | - result := JavaLabeledStatementNode new. - result identifier: (nodes at: 1). - result colon: (nodes at: 2). - result statement: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForlambda_expression1: nodes [ - | result | - result := JavaLambdaExpressionNode new. - result leftParen: ((nodes at: 1) at: 1). - result rightParen: ((nodes at: 1) at: 2). - result addNodes: ((nodes at: 1) at: 3) to: result parameters. - result addTokens: ((nodes at: 1) at: 4) to: result commas. - result arrowToken: (nodes at: 2). - result value: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForlambda_parameters1: nodes [ - | result | - result := Array new: 4. - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForlambda_parameters2: nodes [ - | result | - result := Array new: 4. - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 3). - self addAll: ((nodes at: 2) at: 2) to: (result at: 4). - result at: 2 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForlambda_parameters3: nodes [ - | result | - result := Array new: 4. - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForliteral1: nodes [ - | result | - result := JavaIntegerLiteralNode new. - result token: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForliteral2: nodes [ - | result | - result := JavaFloatLiteralNode new. - result token: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForliteral3: nodes [ - | result | - result := JavaBooleanLiteralNode new. - result token: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForliteral4: nodes [ - | result | - result := JavaCharacterLiteralNode new. - result token: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForliteral5: nodes [ - | result | - result := JavaStringLiteralNode new. - result token: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForliteral6: nodes [ - | result | - result := JavaNullNode new. - result token: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForlocal_variable_declaration1: nodes [ - | result | - result := JavaLocalVariableDeclarationNode new. - result addNodes: (nodes at: 1) to: result modifiers. - result type: (nodes at: 2). - result - addNodes: ((nodes at: 3) at: 1) - to: result variableDeclarations. - result addTokens: ((nodes at: 3) at: 2) to: result commas. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForlocal_variable_declaration_statement1: nodes [ - | result | - result := JavaLocalVariableDeclarationStatementNode new. - result declaration: (nodes at: 1). - result semicolon: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFormethod_body2: nodes [ - | result | - result := JavaEmptyMethodBodyNode new. - result semicolon: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFormethod_declaration1: nodes [ - | result | - result := JavaMethodDeclarationNode new. - result typeParameters: ((nodes at: 1) at: 1). - result type: ((nodes at: 1) at: 2). - result declarator: ((nodes at: 1) at: 3). - result throws: ((nodes at: 1) at: 4). - result addNodes: ((nodes at: 1) at: 5) to: result modifiers. - result body: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFormethod_declarator1: nodes [ - | result | - result := JavaMethodDeclaratorNode new. - result name: (nodes at: 1). - result leftParen: (nodes at: 2). - result rightParen: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFormethod_declarator2: nodes [ - | result | - result := JavaMethodDeclaratorNode new. - result name: (nodes at: 1). - result leftParen: (nodes at: 2). - result addNodes: ((nodes at: 3) at: 1) to: result parameters. - result addTokens: ((nodes at: 3) at: 2) to: result commas. - result rightParen: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFormethod_declarator3: nodes [ - | result | - result := JavaArrayMethodDeclaratorNode new. - result declarator: (nodes at: 1). - result leftBracket: (nodes at: 2). - result rightBracket: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFormethod_header1: nodes [ - | result | - result := Array new: 5. - result at: 5 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFormethod_header2: nodes [ - | result | - result := Array new: 5. - result at: 5 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - result at: 4 put: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFormethod_header3: nodes [ - | result | - result := Array new: 5. - result at: 5 put: (OrderedCollection new: 2). - self addAll: (nodes at: 1) to: (result at: 5). - result at: 1 put: (nodes at: 2). - result at: 2 put: (nodes at: 3). - result at: 3 put: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFormethod_header4: nodes [ - | result | - result := Array new: 5. - result at: 5 put: (OrderedCollection new: 2). - self addAll: (nodes at: 1) to: (result at: 5). - result at: 1 put: (nodes at: 2). - result at: 2 put: (nodes at: 3). - result at: 3 put: (nodes at: 4). - result at: 4 put: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFormethod_invocation1: nodes [ - | result | - result := JavaMethodInvocationNode new. - result lt: ((nodes at: 1) at: 1). - result addNodes: ((nodes at: 1) at: 2) to: result arguments. - result addTokens: ((nodes at: 1) at: 3) to: result commas. - result gt: ((nodes at: 1) at: 4). - result name: (nodes at: 2). - result leftParen: (nodes at: 3). - result rightParen: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFormethod_invocation2: nodes [ - | result | - result := JavaMethodInvocationNode new. - result lt: ((nodes at: 1) at: 1). - result addNodes: ((nodes at: 1) at: 2) to: result arguments. - result addTokens: ((nodes at: 1) at: 3) to: result commas. - result gt: ((nodes at: 1) at: 4). - result name: (nodes at: 2). - result leftParen: (nodes at: 3). - result addNodes: ((nodes at: 4) at: 1) to: result expressions. - result addTokens: ((nodes at: 4) at: 2) to: result commas. - result rightParen: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFormethod_invocation3: nodes [ - | result | - result := JavaMethodInvocationNode new. - result receiver: (nodes at: 1). - result period: (nodes at: 2). - result lt: ((nodes at: 3) at: 1). - result addNodes: ((nodes at: 3) at: 2) to: result arguments. - result addTokens: ((nodes at: 3) at: 3) to: result commas. - result gt: ((nodes at: 3) at: 4). - result name: (nodes at: 4). - result leftParen: (nodes at: 5). - result rightParen: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFormethod_invocation4: nodes [ - | result | - result := JavaMethodInvocationNode new. - result receiver: (nodes at: 1). - result period: (nodes at: 2). - result lt: ((nodes at: 3) at: 1). - result addNodes: ((nodes at: 3) at: 2) to: result arguments. - result addTokens: ((nodes at: 3) at: 3) to: result commas. - result gt: ((nodes at: 3) at: 4). - result name: (nodes at: 4). - result leftParen: (nodes at: 5). - result addNodes: ((nodes at: 6) at: 1) to: result expressions. - result addTokens: ((nodes at: 6) at: 2) to: result commas. - result rightParen: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFormethod_invocation5: nodes [ - | result | - result := JavaMethodInvocationNode new. - result superToken: (nodes at: 1). - result period: (nodes at: 2). - result lt: ((nodes at: 3) at: 1). - result addNodes: ((nodes at: 3) at: 2) to: result arguments. - result addTokens: ((nodes at: 3) at: 3) to: result commas. - result gt: ((nodes at: 3) at: 4). - result name: (nodes at: 4). - result leftParen: (nodes at: 5). - result rightParen: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFormethod_invocation6: nodes [ - | result | - result := JavaMethodInvocationNode new. - result superToken: (nodes at: 1). - result period: (nodes at: 2). - result lt: ((nodes at: 3) at: 1). - result addNodes: ((nodes at: 3) at: 2) to: result arguments. - result addTokens: ((nodes at: 3) at: 3) to: result commas. - result gt: ((nodes at: 3) at: 4). - result name: (nodes at: 4). - result leftParen: (nodes at: 5). - result addNodes: ((nodes at: 6) at: 1) to: result expressions. - result addTokens: ((nodes at: 6) at: 2) to: result commas. - result rightParen: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFormethod_invocation7: nodes [ - | result | - result := JavaMethodInvocationNode new. - result receiver: (nodes at: 1). - result superPeriod: (nodes at: 2). - result superToken: (nodes at: 3). - result period: (nodes at: 4). - result lt: ((nodes at: 5) at: 1). - result addNodes: ((nodes at: 5) at: 2) to: result arguments. - result addTokens: ((nodes at: 5) at: 3) to: result commas. - result gt: ((nodes at: 5) at: 4). - result name: (nodes at: 6). - result leftParen: (nodes at: 7). - result rightParen: (nodes at: 8). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFormethod_invocation8: nodes [ - | result | - result := JavaMethodInvocationNode new. - result receiver: (nodes at: 1). - result superPeriod: (nodes at: 2). - result superToken: (nodes at: 3). - result period: (nodes at: 4). - result lt: ((nodes at: 5) at: 1). - result addNodes: ((nodes at: 5) at: 2) to: result arguments. - result addTokens: ((nodes at: 5) at: 3) to: result commas. - result gt: ((nodes at: 5) at: 4). - result name: (nodes at: 6). - result leftParen: (nodes at: 7). - result addNodes: ((nodes at: 8) at: 1) to: result expressions. - result addTokens: ((nodes at: 8) at: 2) to: result commas. - result rightParen: (nodes at: 9). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFormethod_reference_expression2: nodes [ - | result | - result := JavaMethodReferenceNode new. - result receiver: (nodes at: 1). - result colonColonToken: (nodes at: 2). - result name: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFormodifier5: nodes [ - | result | - result := JavaModifierNode new. - result token: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFormultiplicative_expression4: nodes [ - | result | - result := JavaBinaryExpressionNode new. - result leftExpression: (nodes at: 1). - result op: (nodes at: 2). - result rightExpression: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForpackage_declaration1: nodes [ - | result | - result := JavaPackageDeclarationNode new. - result addNodes: (nodes at: 1) to: result annotations. - result packageToken: (nodes at: 2). - result name: (nodes at: 3). - result semicolon: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForpostdecrement_expression1: nodes [ - | result | - result := JavaPostDecrementExpressionNode new. - result expression: (nodes at: 1). - result minusMinus: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForpostincrement_expression1: nodes [ - | result | - result := JavaPostIncrementExpressionNode new. - result expression: (nodes at: 1). - result plusPlus: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForpredecrement_expression1: nodes [ - | result | - result := JavaPreDecrementExpressionNode new. - result minusMinus: (nodes at: 1). - result expression: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForpreincrement_expression1: nodes [ - | result | - result := JavaPreIncrementExpressionNode new. - result plusPlus: (nodes at: 1). - result expression: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForprimary_no_new_array10: nodes [ - | result | - result := JavaClassExpressionNode new. - result type: (nodes at: 1). - result period: (nodes at: 2). - result classToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForprimary_no_new_array11: nodes [ - | result | - result := JavaOuterThisNode new. - result name: (nodes at: 1). - result period: (nodes at: 2). - result thisToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForprimary_no_new_array2: nodes [ - | result | - result := JavaNameNode new. - result name: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForprimary_no_new_array3: nodes [ - | result | - result := nodes at: 2. - result addFirstToken: (nodes at: 1) to: result _leftParens. - result addToken: (nodes at: 3) to: result _rightParens. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForprimitive_type2: nodes [ - | result | - result := JavaBooleanTypeNode new. - result token: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForqualified_name1: nodes [ - | result | - result := JavaQualifiedNameNode new. - result nspace: (nodes at: 1). - result period: (nodes at: 2). - result name: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForqualified_type_name1: nodes [ - | result | - result := JavaQualifiedTypeNameNode new. - result nspace: (nodes at: 1). - result period: (nodes at: 2). - result name: (nodes at: 3). - result lt: ((nodes at: 4) at: 1). - result addNodes: ((nodes at: 4) at: 2) to: result arguments. - result addTokens: ((nodes at: 4) at: 3) to: result commas. - result gt: ((nodes at: 4) at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForreturn_statement1: nodes [ - | result | - result := JavaReturnStatementNode new. - result returnToken: (nodes at: 1). - result semicolon: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForreturn_statement2: nodes [ - | result | - result := JavaReturnStatementNode new. - result returnToken: (nodes at: 1). - result expression: (nodes at: 2). - result semicolon: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForsimple_type_name1: nodes [ - | result | - result := JavaTypeNameNode new. - result name: (nodes at: 1). - result lt: ((nodes at: 2) at: 1). - result addNodes: ((nodes at: 2) at: 2) to: result arguments. - result addTokens: ((nodes at: 2) at: 3) to: result commas. - result gt: ((nodes at: 2) at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForsingle_type_import_declaration1: nodes [ - | result | - result := JavaSingleTypeImportDeclarationNode new. - result importToken: (nodes at: 1). - result name: (nodes at: 2). - result semicolon: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForsingle_type_import_declaration2: nodes [ - | result | - result := JavaSingleTypeImportDeclarationNode new. - result importToken: (nodes at: 1). - result staticToken: (nodes at: 2). - result name: (nodes at: 3). - result semicolon: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForstatement_expression_list1: nodes [ - | result | - result := JavaStatementExpressionListNode new. - result addNode: (nodes at: 1) to: result expressions. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForstatement_expression_list2: nodes [ - | result | - result := nodes at: 1. - result addToken: (nodes at: 2) to: result commas. - result addNode: (nodes at: 3) to: result expressions. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForstatic_initializer1: nodes [ - | result | - result := JavaStaticInitializerNode new. - result staticToken: (nodes at: 1). - result block: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForswitch_block1: nodes [ - | result | - result := JavaSwitchBlockNode new. - result leftBrace: (nodes at: 1). - result addNodes: (nodes at: 2) to: result statementGroups. - result addNodes: (nodes at: 3) to: result labels. - result rightBrace: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForswitch_block2: nodes [ - | result | - result := JavaSwitchBlockNode new. - result leftBrace: (nodes at: 1). - result addNodes: (nodes at: 2) to: result statementGroups. - result rightBrace: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForswitch_block3: nodes [ - | result | - result := JavaSwitchBlockNode new. - result leftBrace: (nodes at: 1). - result addNodes: (nodes at: 2) to: result labels. - result rightBrace: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForswitch_block4: nodes [ - | result | - result := JavaSwitchBlockNode new. - result leftBrace: (nodes at: 1). - result rightBrace: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForswitch_block_statement_group1: nodes [ - | result | - result := JavaSwitchBlockStatementGroupNode new. - result addNodes: (nodes at: 1) to: result labels. - result addNodes: (nodes at: 2) to: result statements. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForswitch_label1: nodes [ - | result | - result := JavaSwitchLabelNode new. - result caseToken: (nodes at: 1). - result constant: (nodes at: 2). - result colon: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForswitch_label2: nodes [ - | result | - result := JavaDefaultLabelNode new. - result defaultToken: (nodes at: 1). - result colon: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForswitch_statement1: nodes [ - | result | - result := JavaSwitchStatementNode new. - result switchToken: (nodes at: 1). - result leftParen: (nodes at: 2). - result expression: (nodes at: 3). - result rightParen: (nodes at: 4). - result block: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForsynchronized_statement1: nodes [ - | result | - result := JavaSynchronizedStatementNode new. - result synchronizedToken: (nodes at: 1). - result leftParen: (nodes at: 2). - result expression: (nodes at: 3). - result rightParen: (nodes at: 4). - result block: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForthrow_statement1: nodes [ - | result | - result := JavaThrowStatementNode new. - result throwToken: (nodes at: 1). - result expression: (nodes at: 2). - result semicolon: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForthrows1: nodes [ - | result | - result := JavaThrowsNode new. - result throwsToken: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result classTypes. - result addTokens: ((nodes at: 2) at: 2) to: result commas. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFortry_resource1: nodes [ - | result | - result := JavaLocalVariableDeclarationNode new. - result addNodes: (nodes at: 1) to: result modifiers. - result type: (nodes at: 2). - result addNode: (nodes at: 3) to: result variableDeclarations. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFortry_resources2: nodes [ - | result | - result := Array new: 4. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - self add: (nodes at: 3) to: (result at: 3). - result at: 4 put: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFortry_statement1: nodes [ - | result | - result := JavaTryStatementNode new. - result tryToken: (nodes at: 1). - result block: (nodes at: 2). - result addNodes: (nodes at: 3) to: result catches. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFortry_statement2: nodes [ - | result | - result := JavaTryStatementNode new. - result tryToken: (nodes at: 1). - result leftParen: ((nodes at: 2) at: 1). - result addNodes: ((nodes at: 2) at: 2) to: result resources. - result addTokens: ((nodes at: 2) at: 3) to: result semicolons. - result rightParen: ((nodes at: 2) at: 4). - result block: (nodes at: 3). - result addNodes: (nodes at: 4) to: result catches. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFortry_statement3: nodes [ - | result | - result := JavaTryStatementNode new. - result tryToken: (nodes at: 1). - result block: (nodes at: 2). - result finally: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFortry_statement4: nodes [ - | result | - result := JavaTryStatementNode new. - result tryToken: (nodes at: 1). - result block: (nodes at: 2). - result addNodes: (nodes at: 3) to: result catches. - result finally: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFortry_statement5: nodes [ - | result | - result := JavaTryStatementNode new. - result tryToken: (nodes at: 1). - result leftParen: ((nodes at: 2) at: 1). - result addNodes: ((nodes at: 2) at: 2) to: result resources. - result addTokens: ((nodes at: 2) at: 3) to: result semicolons. - result rightParen: ((nodes at: 2) at: 4). - result block: (nodes at: 3). - result finally: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFortry_statement6: nodes [ - | result | - result := JavaTryStatementNode new. - result tryToken: (nodes at: 1). - result leftParen: ((nodes at: 2) at: 1). - result addNodes: ((nodes at: 2) at: 2) to: result resources. - result addTokens: ((nodes at: 2) at: 3) to: result semicolons. - result rightParen: ((nodes at: 2) at: 4). - result block: (nodes at: 3). - result addNodes: (nodes at: 4) to: result catches. - result finally: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFortry_statement7: nodes [ - | result | - result := JavaTryStatementNode new. - result tryToken: (nodes at: 1). - result leftParen: ((nodes at: 2) at: 1). - result addNodes: ((nodes at: 2) at: 2) to: result resources. - result addTokens: ((nodes at: 2) at: 3) to: result semicolons. - result rightParen: ((nodes at: 2) at: 4). - result block: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFortype_argument1: nodes [ - | result | - result := JavaTypeArgumentNode new. - result type: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFortype_argument2: nodes [ - | result | - result := JavaTypeArgumentNode new. - result questionMark: (nodes at: 1). - result token: ((nodes at: 2) at: 1). - result type: ((nodes at: 2) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFortype_argument_type3: nodes [ - | result | - result := Array new: 2. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFortype_arguments1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFortype_arguments2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 2). - self add: (nodes at: 3) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFortype_arguments_opt1: nodes [ - | result | - result := Array new: 4. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFortype_arguments_opt2: nodes [ - | result | - result := Array new: 4. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - result at: 4 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFortype_arguments_opt3: nodes [ - | result | - result := Array new: 4. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - result at: 4 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFortype_declaration4: nodes [ - | result | - result := JavaEmptyDeclarationNode new. - result semicolon: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFortype_import_on_demand_declaration1: nodes [ - | result | - result := JavaTypeImportOnDemandDeclarationNode new. - result importToken: (nodes at: 1). - result name: (nodes at: 2). - result period: (nodes at: 3). - result star: (nodes at: 4). - result semicolon: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFortype_import_on_demand_declaration2: nodes [ - | result | - result := JavaTypeImportOnDemandDeclarationNode new. - result importToken: (nodes at: 1). - result staticToken: (nodes at: 2). - result name: (nodes at: 3). - result period: (nodes at: 4). - result star: (nodes at: 5). - result semicolon: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFortype_parameter1: nodes [ - | result | - result := JavaTypeParameterNode new. - result name: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFortype_parameter2: nodes [ - | result | - result := JavaTypeParameterNode new. - result name: (nodes at: 1). - result extendsToken: (nodes at: 2). - result addNodes: ((nodes at: 3) at: 1) to: result types. - result addTokens: ((nodes at: 3) at: 2) to: result amps. - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionFortype_parameters_opt2: nodes [ - | result | - result := JavaTypeParametersNode new. - result lt: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result parameters. - result addTokens: ((nodes at: 2) at: 2) to: result commas. - result gt: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForunary_expression3: nodes [ - | result | - result := JavaUnaryAdditionNode new. - result plus: (nodes at: 1). - result expression: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForunary_expression4: nodes [ - | result | - result := JavaUnarySubtractionNode new. - result minus: (nodes at: 1). - result expression: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForunary_expression_not_plus_minus2: nodes [ - | result | - result := JavaUnaryBitInvertNode new. - result tilde: (nodes at: 1). - result expression: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForunary_expression_not_plus_minus3: nodes [ - | result | - result := JavaUnaryNotNode new. - result bang: (nodes at: 1). - result expression: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForuntyped_lambda_parameter1: nodes [ - | result | - result := JavaParameterNode new. - result variable: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForvariable_declarator1: nodes [ - | result | - result := JavaVariableDeclarationNode new. - result variable: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForvariable_declarator_id1: nodes [ - | result | - result := JavaVariableNameNode new. - result name: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForvariable_declarator_id2: nodes [ - | result | - result := JavaArrayVariableNameNode new. - result variable: (nodes at: 1). - result leftBracket: (nodes at: 2). - result rightBracket: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForvoid1: nodes [ - | result | - result := JavaVoidTypeNode new. - result voidToken: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JavaParser >> reduceActionForwhile_statement1: nodes [ - | result | - result := JavaWhileStatementNode new. - result whileToken: (nodes at: 1). - result leftParen: (nodes at: 2). - result expression: (nodes at: 3). - result rightParen: (nodes at: 4). - result statement: (nodes at: 5). - ^ result -] - -{ #category : #private } -JavaParser >> tryAllTokens [ - ^ (self class keywords includes: currentToken value) not -] diff --git a/src/SmaCC_Java/JavaPostDecrementExpressionNode.class.st b/src/SmaCC_Java/JavaPostDecrementExpressionNode.class.st deleted file mode 100644 index 1ec1669b7..000000000 --- a/src/SmaCC_Java/JavaPostDecrementExpressionNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JavaPostDecrementExpressionNode, - #superclass : #JavaUnaryExpressionNode, - #instVars : [ - 'minusMinus' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaPostDecrementExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPostDecrementExpression: self -] - -{ #category : #generated } -JavaPostDecrementExpressionNode >> minusMinus [ - ^ minusMinus -] - -{ #category : #generated } -JavaPostDecrementExpressionNode >> minusMinus: aSmaCCToken [ - minusMinus := aSmaCCToken -] - -{ #category : #generated } -JavaPostDecrementExpressionNode >> tokenVariables [ - ^ #(#minusMinus) -] diff --git a/src/SmaCC_Java/JavaPostIncrementExpressionNode.class.st b/src/SmaCC_Java/JavaPostIncrementExpressionNode.class.st deleted file mode 100644 index 61c24b8bc..000000000 --- a/src/SmaCC_Java/JavaPostIncrementExpressionNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JavaPostIncrementExpressionNode, - #superclass : #JavaUnaryExpressionNode, - #instVars : [ - 'plusPlus' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaPostIncrementExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPostIncrementExpression: self -] - -{ #category : #generated } -JavaPostIncrementExpressionNode >> plusPlus [ - ^ plusPlus -] - -{ #category : #generated } -JavaPostIncrementExpressionNode >> plusPlus: aSmaCCToken [ - plusPlus := aSmaCCToken -] - -{ #category : #generated } -JavaPostIncrementExpressionNode >> tokenVariables [ - ^ #(#plusPlus) -] diff --git a/src/SmaCC_Java/JavaPreDecrementExpressionNode.class.st b/src/SmaCC_Java/JavaPreDecrementExpressionNode.class.st deleted file mode 100644 index 06d981a78..000000000 --- a/src/SmaCC_Java/JavaPreDecrementExpressionNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JavaPreDecrementExpressionNode, - #superclass : #JavaUnaryExpressionNode, - #instVars : [ - 'minusMinus' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaPreDecrementExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPreDecrementExpression: self -] - -{ #category : #generated } -JavaPreDecrementExpressionNode >> minusMinus [ - ^ minusMinus -] - -{ #category : #generated } -JavaPreDecrementExpressionNode >> minusMinus: aSmaCCToken [ - minusMinus := aSmaCCToken -] - -{ #category : #generated } -JavaPreDecrementExpressionNode >> tokenVariables [ - ^ #(#minusMinus) -] diff --git a/src/SmaCC_Java/JavaPreIncrementExpressionNode.class.st b/src/SmaCC_Java/JavaPreIncrementExpressionNode.class.st deleted file mode 100644 index 63b78bff3..000000000 --- a/src/SmaCC_Java/JavaPreIncrementExpressionNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JavaPreIncrementExpressionNode, - #superclass : #JavaUnaryExpressionNode, - #instVars : [ - 'plusPlus' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaPreIncrementExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPreIncrementExpression: self -] - -{ #category : #generated } -JavaPreIncrementExpressionNode >> plusPlus [ - ^ plusPlus -] - -{ #category : #generated } -JavaPreIncrementExpressionNode >> plusPlus: aSmaCCToken [ - plusPlus := aSmaCCToken -] - -{ #category : #generated } -JavaPreIncrementExpressionNode >> tokenVariables [ - ^ #(#plusPlus) -] diff --git a/src/SmaCC_Java/JavaPrimitiveTypeNode.class.st b/src/SmaCC_Java/JavaPrimitiveTypeNode.class.st deleted file mode 100644 index c95c379be..000000000 --- a/src/SmaCC_Java/JavaPrimitiveTypeNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JavaPrimitiveTypeNode, - #superclass : #JavaTypeNode, - #instVars : [ - 'token' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaPrimitiveTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPrimitiveType: self -] - -{ #category : #generated } -JavaPrimitiveTypeNode >> token [ - ^ token -] - -{ #category : #generated } -JavaPrimitiveTypeNode >> token: aSmaCCToken [ - token := aSmaCCToken -] - -{ #category : #generated } -JavaPrimitiveTypeNode >> tokenVariables [ - ^ #(#token) -] diff --git a/src/SmaCC_Java/JavaProgramFileNode.class.st b/src/SmaCC_Java/JavaProgramFileNode.class.st deleted file mode 100644 index dfd3435a4..000000000 --- a/src/SmaCC_Java/JavaProgramFileNode.class.st +++ /dev/null @@ -1,70 +0,0 @@ -Class { - #name : #JavaProgramFileNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'packageDeclaration', - 'imports', - 'typeDeclarations' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaProgramFileNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitProgramFile: self -] - -{ #category : #generated } -JavaProgramFileNode >> compositeNodeVariables [ - ^ #(#typeDeclarations #imports) -] - -{ #category : #generated } -JavaProgramFileNode >> imports [ - ^ imports -] - -{ #category : #generated } -JavaProgramFileNode >> imports: anOrderedCollection [ - self setParents: self imports to: nil. - imports := anOrderedCollection. - self setParents: self imports to: self -] - -{ #category : #'generated-initialize-release' } -JavaProgramFileNode >> initialize [ - super initialize. - typeDeclarations := OrderedCollection new: 2. - imports := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaProgramFileNode >> nodeVariables [ - ^ #(#packageDeclaration) -] - -{ #category : #generated } -JavaProgramFileNode >> packageDeclaration [ - ^ packageDeclaration -] - -{ #category : #generated } -JavaProgramFileNode >> packageDeclaration: aJavaPackageDeclarationNode [ - self packageDeclaration notNil - ifTrue: [ self packageDeclaration parent: nil ]. - packageDeclaration := aJavaPackageDeclarationNode. - self packageDeclaration notNil - ifTrue: [ self packageDeclaration parent: self ] -] - -{ #category : #generated } -JavaProgramFileNode >> typeDeclarations [ - ^ typeDeclarations -] - -{ #category : #generated } -JavaProgramFileNode >> typeDeclarations: anOrderedCollection [ - self setParents: self typeDeclarations to: nil. - typeDeclarations := anOrderedCollection. - self setParents: self typeDeclarations to: self -] diff --git a/src/SmaCC_Java/JavaProgramNode.class.st b/src/SmaCC_Java/JavaProgramNode.class.st deleted file mode 100644 index e93e8aefe..000000000 --- a/src/SmaCC_Java/JavaProgramNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #JavaProgramNode, - #superclass : #SmaCCParseNode, - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaProgramNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitProgram: self -] diff --git a/src/SmaCC_Java/JavaProgramNodeVisitor.class.st b/src/SmaCC_Java/JavaProgramNodeVisitor.class.st deleted file mode 100644 index 0622dc3b1..000000000 --- a/src/SmaCC_Java/JavaProgramNodeVisitor.class.st +++ /dev/null @@ -1,591 +0,0 @@ -Class { - #name : #JavaProgramNodeVisitor, - #superclass : #SmaCCParseNodeVisitor, - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaProgramNodeVisitor >> visitAbstractMethodDeclaration: anAbstractMethodDeclaration [ - ^ self visitDeclaration: anAbstractMethodDeclaration -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitAnnotation: anAnnotation [ - ^ self visitProgram: anAnnotation -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitAnnotationInterface: anAnnotationInterface [ - ^ self visitProgram: anAnnotationInterface -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitAnnotationMethodDeclaration: anAnnotationMethodDeclaration [ - ^ self visitAbstractMethodDeclaration: anAnnotationMethodDeclaration -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitArrayAccess: anArrayAccess [ - ^ self visitExpression: anArrayAccess -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitArrayInitializer: anArrayInitializer [ - ^ self visitProgram: anArrayInitializer -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitArrayMethodDeclarator: anArrayMethodDeclarator [ - ^ self visitProgram: anArrayMethodDeclarator -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitArrayType: anArrayType [ - ^ self visitType: anArrayType -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitArrayVariableName: anArrayVariableName [ - ^ self visitProgram: anArrayVariableName -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitAssertStatement: anAssertStatement [ - ^ self visitStatement: anAssertStatement -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitAssignment: anAssignment [ - ^ self visitExpression: anAssignment -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitBinaryExpression: aBinaryExpression [ - ^ self visitExpression: aBinaryExpression -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitBlock: aBlock [ - ^ self visitStatement: aBlock -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitBooleanLiteral: aBooleanLiteral [ - ^ self visitLiteral: aBooleanLiteral -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitBooleanType: aBooleanType [ - ^ self visitPrimitiveType: aBooleanType -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitBreakStatement: aBreakStatement [ - ^ self visitStatement: aBreakStatement -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitByteType: aByteType [ - ^ self visitPrimitiveType: aByteType -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitCastExpression: aCastExpression [ - ^ self visitUnaryExpression: aCastExpression -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitCatchClause: aCatchClause [ - ^ self visitProgram: aCatchClause -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitCatchParameter: aCatchParameter [ - ^ self visitProgram: aCatchParameter -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitCharType: aCharType [ - ^ self visitPrimitiveType: aCharType -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitCharacterLiteral: aCharacterLiteral [ - ^ self visitLiteral: aCharacterLiteral -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitClassDeclaration: aClassDeclaration [ - ^ self visitDeclaration: aClassDeclaration -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitClassExpression: aClassExpression [ - ^ self visitExpression: aClassExpression -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitClassType: aClassType [ - ^ self visitType: aClassType -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitConditionalExpression: aConditionalExpression [ - ^ self visitExpression: aConditionalExpression -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitConstructorDeclaration: aConstructorDeclaration [ - ^ self visitDeclaration: aConstructorDeclaration -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitContinueStatement: aContinueStatement [ - ^ self visitStatement: aContinueStatement -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitDeclaration: aDeclaration [ - ^ self visitProgram: aDeclaration -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitDefaultLabel: aDefaultLabel [ - ^ self visitProgram: aDefaultLabel -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitDimensionExpression: aDimensionExpression [ - ^ self visitProgram: aDimensionExpression -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitDoWhileStatement: aDoWhileStatement [ - ^ self visitStatement: aDoWhileStatement -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitDoubleType: aDoubleType [ - ^ self visitPrimitiveType: aDoubleType -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitElementArrayInitializer: anElementArrayInitializer [ - ^ self visitProgram: anElementArrayInitializer -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitElementValuePair: anElementValuePair [ - ^ self visitProgram: anElementValuePair -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitEmptyDeclaration: anEmptyDeclaration [ - ^ self visitDeclaration: anEmptyDeclaration -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitEmptyMethodBody: anEmptyMethodBody [ - ^ self visitProgram: anEmptyMethodBody -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitEmptyStatement: anEmptyStatement [ - ^ self visitStatement: anEmptyStatement -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitEnumConstant: anEnumConstant [ - ^ self visitProgram: anEnumConstant -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitEnumDeclaration: anEnumDeclaration [ - ^ self visitDeclaration: anEnumDeclaration -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitExpression: anExpression [ - ^ self visitProgram: anExpression -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitExpressionStatement: anExpressionStatement [ - ^ self visitStatement: anExpressionStatement -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitFieldAccess: aFieldAccess [ - ^ self visitExpression: aFieldAccess -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitFieldDeclaration: aFieldDeclaration [ - ^ self visitDeclaration: aFieldDeclaration -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitFinallyClause: aFinallyClause [ - ^ self visitProgram: aFinallyClause -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitFloatLiteral: aFloatLiteral [ - ^ self visitLiteral: aFloatLiteral -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitFloatType: aFloatType [ - ^ self visitPrimitiveType: aFloatType -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitForEachStatement: aForEachStatement [ - ^ self visitStatement: aForEachStatement -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitForStatement: aForStatement [ - ^ self visitStatement: aForStatement -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitIfElseStatement: anIfElseStatement [ - ^ self visitIfStatement: anIfElseStatement -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitIfStatement: anIfStatement [ - ^ self visitStatement: anIfStatement -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitInitializedVariableDeclaration: anInitializedVariableDeclaration [ - ^ self visitVariableDeclaration: anInitializedVariableDeclaration -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitInitializer: anInitializer [ - ^ self visitProgram: anInitializer -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitIntType: anIntType [ - ^ self visitPrimitiveType: anIntType -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitIntegerLiteral: anIntegerLiteral [ - ^ self visitLiteral: anIntegerLiteral -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitInterfaceDeclaration: anInterfaceDeclaration [ - ^ self visitDeclaration: anInterfaceDeclaration -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitLabeledStatement: aLabeledStatement [ - ^ self visitStatement: aLabeledStatement -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitLambdaExpression: aLambdaExpression [ - ^ self visitExpression: aLambdaExpression -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitLiteral: aLiteral [ - ^ self visitExpression: aLiteral -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitLocalVariableDeclaration: aLocalVariableDeclaration [ - ^ self visitDeclaration: aLocalVariableDeclaration -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitLocalVariableDeclarationStatement: aLocalVariableDeclarationStatement [ - ^ self visitStatement: aLocalVariableDeclarationStatement -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitLongType: aLongType [ - ^ self visitPrimitiveType: aLongType -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitMethodDeclaration: aMethodDeclaration [ - ^ self visitDeclaration: aMethodDeclaration -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitMethodDeclarator: aMethodDeclarator [ - ^ self visitProgram: aMethodDeclarator -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitMethodInvocation: aMethodInvocation [ - ^ self visitExpression: aMethodInvocation -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitMethodReference: aMethodReference [ - ^ self visitExpression: aMethodReference -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitModifier: aModifier [ - ^ self visitProgram: aModifier -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitName: aName [ - ^ self visitExpression: aName -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitNew: aNew [ - ^ self visitExpression: aNew -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitNewArray: aNewArray [ - ^ self visitExpression: aNewArray -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitNewClass: aNewClass [ - ^ self visitNew: aNewClass -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitNull: aNull [ - ^ self visitLiteral: aNull -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitOuterThis: anOuterThis [ - ^ self visitExpression: anOuterThis -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitPackageDeclaration: aPackageDeclaration [ - ^ self visitDeclaration: aPackageDeclaration -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitParameter: aParameter [ - ^ self visitProgram: aParameter -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitPostDecrementExpression: aPostDecrementExpression [ - ^ self visitUnaryExpression: aPostDecrementExpression -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitPostIncrementExpression: aPostIncrementExpression [ - ^ self visitUnaryExpression: aPostIncrementExpression -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitPreDecrementExpression: aPreDecrementExpression [ - ^ self visitUnaryExpression: aPreDecrementExpression -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitPreIncrementExpression: aPreIncrementExpression [ - ^ self visitUnaryExpression: aPreIncrementExpression -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitPrimitiveType: aPrimitiveType [ - ^ self visitType: aPrimitiveType -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitProgram: aProgram [ - ^ self visitSmaCCParseNode: aProgram -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitProgramFile: aProgramFile [ - ^ self visitProgram: aProgramFile -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitQualifiedName: aQualifiedName [ - ^ self visitName: aQualifiedName -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitQualifiedTypeName: aQualifiedTypeName [ - ^ self visitTypeName: aQualifiedTypeName -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitReturnStatement: aReturnStatement [ - ^ self visitStatement: aReturnStatement -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitShortType: aShortType [ - ^ self visitPrimitiveType: aShortType -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitSingleTypeImportDeclaration: aSingleTypeImportDeclaration [ - ^ self visitDeclaration: aSingleTypeImportDeclaration -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitStatement: aStatement [ - ^ self visitProgram: aStatement -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitStatementExpressionList: aStatementExpressionList [ - ^ self visitProgram: aStatementExpressionList -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitStaticInitializer: aStaticInitializer [ - ^ self visitInitializer: aStaticInitializer -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitStringLiteral: aStringLiteral [ - ^ self visitLiteral: aStringLiteral -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitSuperConstructorInvocation: aSuperConstructorInvocation [ - ^ self visitStatement: aSuperConstructorInvocation -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitSwitchBlock: aSwitchBlock [ - ^ self visitProgram: aSwitchBlock -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitSwitchBlockStatementGroup: aSwitchBlockStatementGroup [ - ^ self visitProgram: aSwitchBlockStatementGroup -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitSwitchLabel: aSwitchLabel [ - ^ self visitProgram: aSwitchLabel -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitSwitchStatement: aSwitchStatement [ - ^ self visitStatement: aSwitchStatement -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitSynchronizedStatement: aSynchronizedStatement [ - ^ self visitStatement: aSynchronizedStatement -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitThisConstructorInvocation: aThisConstructorInvocation [ - ^ self visitStatement: aThisConstructorInvocation -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitThrowStatement: aThrowStatement [ - ^ self visitStatement: aThrowStatement -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitThrows: aThrows [ - ^ self visitProgram: aThrows -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitTryStatement: aTryStatement [ - ^ self visitStatement: aTryStatement -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitType: aType [ - ^ self visitProgram: aType -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitTypeArgument: aTypeArgument [ - ^ self visitProgram: aTypeArgument -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitTypeImportOnDemandDeclaration: aTypeImportOnDemandDeclaration [ - ^ self - visitSingleTypeImportDeclaration: aTypeImportOnDemandDeclaration -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitTypeName: aTypeName [ - ^ self visitProgram: aTypeName -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitTypeParameter: aTypeParameter [ - ^ self visitProgram: aTypeParameter -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitTypeParameters: aTypeParameters [ - ^ self visitProgram: aTypeParameters -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitUnaryAddition: anUnaryAddition [ - ^ self visitUnaryExpression: anUnaryAddition -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitUnaryBitInvert: anUnaryBitInvert [ - ^ self visitUnaryExpression: anUnaryBitInvert -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitUnaryExpression: anUnaryExpression [ - ^ self visitExpression: anUnaryExpression -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitUnaryNot: anUnaryNot [ - ^ self visitUnaryExpression: anUnaryNot -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitUnarySubtraction: anUnarySubtraction [ - ^ self visitUnaryExpression: anUnarySubtraction -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitVariableArgumentParameter: aVariableArgumentParameter [ - ^ self visitParameter: aVariableArgumentParameter -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitVariableDeclaration: aVariableDeclaration [ - ^ self visitDeclaration: aVariableDeclaration -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitVariableName: aVariableName [ - ^ self visitProgram: aVariableName -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitVoidType: aVoidType [ - ^ self visitProgram: aVoidType -] - -{ #category : #generated } -JavaProgramNodeVisitor >> visitWhileStatement: aWhileStatement [ - ^ self visitStatement: aWhileStatement -] diff --git a/src/SmaCC_Java/JavaQualifiedNameNode.class.st b/src/SmaCC_Java/JavaQualifiedNameNode.class.st deleted file mode 100644 index 4f5f8aa7f..000000000 --- a/src/SmaCC_Java/JavaQualifiedNameNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #JavaQualifiedNameNode, - #superclass : #JavaNameNode, - #instVars : [ - 'nspace', - 'period' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaQualifiedNameNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitQualifiedName: self -] - -{ #category : #generated } -JavaQualifiedNameNode >> nodeVariables [ - ^ #(#nspace) -] - -{ #category : #generated } -JavaQualifiedNameNode >> nspace [ - ^ nspace -] - -{ #category : #generated } -JavaQualifiedNameNode >> nspace: aJavaNameNode [ - self nspace notNil - ifTrue: [ self nspace parent: nil ]. - nspace := aJavaNameNode. - self nspace notNil - ifTrue: [ self nspace parent: self ] -] - -{ #category : #generated } -JavaQualifiedNameNode >> period [ - ^ period -] - -{ #category : #generated } -JavaQualifiedNameNode >> period: aSmaCCToken [ - period := aSmaCCToken -] - -{ #category : #generated } -JavaQualifiedNameNode >> tokenVariables [ - ^ #(#period #name) -] diff --git a/src/SmaCC_Java/JavaQualifiedTypeNameNode.class.st b/src/SmaCC_Java/JavaQualifiedTypeNameNode.class.st deleted file mode 100644 index 892b5fff5..000000000 --- a/src/SmaCC_Java/JavaQualifiedTypeNameNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #JavaQualifiedTypeNameNode, - #superclass : #JavaTypeNameNode, - #instVars : [ - 'nspace', - 'period' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaQualifiedTypeNameNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitQualifiedTypeName: self -] - -{ #category : #generated } -JavaQualifiedTypeNameNode >> nodeVariables [ - ^ #(#nspace) -] - -{ #category : #generated } -JavaQualifiedTypeNameNode >> nspace [ - ^ nspace -] - -{ #category : #generated } -JavaQualifiedTypeNameNode >> nspace: aJavaTypeNameNode [ - self nspace notNil - ifTrue: [ self nspace parent: nil ]. - nspace := aJavaTypeNameNode. - self nspace notNil - ifTrue: [ self nspace parent: self ] -] - -{ #category : #generated } -JavaQualifiedTypeNameNode >> period [ - ^ period -] - -{ #category : #generated } -JavaQualifiedTypeNameNode >> period: aSmaCCToken [ - period := aSmaCCToken -] - -{ #category : #generated } -JavaQualifiedTypeNameNode >> tokenVariables [ - ^ #(#period #name) -] diff --git a/src/SmaCC_Java/JavaReturnStatementNode.class.st b/src/SmaCC_Java/JavaReturnStatementNode.class.st deleted file mode 100644 index 56d90ae2d..000000000 --- a/src/SmaCC_Java/JavaReturnStatementNode.class.st +++ /dev/null @@ -1,64 +0,0 @@ -Class { - #name : #JavaReturnStatementNode, - #superclass : #JavaStatementNode, - #instVars : [ - 'returnToken', - 'expression', - 'semicolon' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaReturnStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitReturnStatement: self -] - -{ #category : #generated } -JavaReturnStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -JavaReturnStatementNode >> expression: aJavaExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJavaExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JavaReturnStatementNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -JavaReturnStatementNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -JavaReturnStatementNode >> returnToken [ - ^ returnToken -] - -{ #category : #generated } -JavaReturnStatementNode >> returnToken: aSmaCCToken [ - returnToken := aSmaCCToken -] - -{ #category : #generated } -JavaReturnStatementNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JavaReturnStatementNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -JavaReturnStatementNode >> tokenVariables [ - ^ #(#returnToken) -] diff --git a/src/SmaCC_Java/JavaScanner.class.st b/src/SmaCC_Java/JavaScanner.class.st deleted file mode 100644 index dc06e97df..000000000 --- a/src/SmaCC_Java/JavaScanner.class.st +++ /dev/null @@ -1,565 +0,0 @@ -Class { - #name : #JavaScanner, - #superclass : #SmaCCScanner, - #category : #'SmaCC_Java' -} - -{ #category : #'generated-initialization' } -JavaScanner class >> initializeKeywordMap [ - keywordMap := Dictionary new. - #(#(105 'abstract' 42) #(105 'assert' 43) #(105 'boolean' 44) #(105 'break' 45) #(105 'byte' 46) #(105 'case' 47) #(105 'catch' 48) #(105 'char' 49) #(105 'class' 50) #(105 'continue' 51) #(105 'default' 52) #(105 'do' 53) #(105 'double' 54) #(105 'else' 55) #(105 'enum' 56) #(105 'extends' 57) #(105 'false' 101) #(105 'final' 58) #(105 'finally' 59) #(105 'float' 60) #(105 'for' 61) #(105 'if' 62) #(105 'implements' 63) #(105 'import' 64) #(105 'instanceof' 65) #(105 'int' 66) #(105 'interface' 67) #(105 'long' 68) #(105 'native' 69) #(105 'new' 70) #(105 'null' 104) #(105 'package' 71) #(105 'private' 72) #(105 'protected' 73) #(105 'public' 74) #(105 'return' 75) #(105 'short' 76) #(105 'static' 77) #(105 'strictfp' 78) #(105 'super' 79) #(105 'switch' 80) #(105 'synchronized' 81) #(105 'this' 82) #(105 'throw' 83) #(105 'throws' 84) #(105 'transient' 85) #(105 'true' 101) #(105 'try' 86) #(105 'void' 87) #(105 'volatile' 88) #(105 'while' 89)) - do: [ :each | - (keywordMap at: each first ifAbsentPut: [ Dictionary new ]) - at: (each at: 2) - put: each last ]. - ^ keywordMap -] - -{ #category : #generated } -JavaScanner >> GREATER_THANId [ - ^ 96 -] - -{ #category : #generated } -JavaScanner >> SIGNED_RIGHT_SHIFTId [ - ^ 97 -] - -{ #category : #generated } -JavaScanner >> UNSIGNED_RIGHT_SHIFTId [ - ^ 98 -] - -{ #category : #generated } -JavaScanner >> emptySymbolTokenId [ - ^ 296 -] - -{ #category : #generated } -JavaScanner >> errorTokenId [ - ^ 297 -] - -{ #category : #generated } -JavaScanner >> scan1 [ - [ self step. - currentCharacter == $" - ifTrue: [ ^ self recordAndReportMatch: #(103) ]. - currentCharacter == $\ - ifTrue: [ self step. - currentCharacter == $u - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ ^ self scan1 ] ] ] ]. - ^ self reportLastMatch ]. - (('"''' includes: currentCharacter) - or: [ (currentCharacter between: $0 and: $7) - or: [ '\bfnrt' includes: currentCharacter ] ]) - ifTrue: [ ^ self scan1 ]. - ^ self reportLastMatch ]. - true ] whileTrue -] - -{ #category : #generated } -JavaScanner >> scan10 [ - [ self step. - currentCharacter == $` - ifTrue: [ self recordMatch: #(108). - self step. - currentCharacter == $` - ifTrue: [ ^ self scan10 ]. - ^ self reportLastMatch ]. - true ] whileTrue -] - -{ #category : #generated } -JavaScanner >> scan2 [ - self step. - currentCharacter == $' - ifTrue: [ ^ self recordAndReportMatch: #(102) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JavaScanner >> scan3 [ - self step. - currentCharacter == $' - ifTrue: [ ^ self recordAndReportMatch: #(102) ]. - (currentCharacter between: $0 and: $7) - ifTrue: [ ^ self scan2 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JavaScanner >> scan4 [ - [ self recordMatch: #(100). - self step. - currentCharacter isDigit ] whileTrue. - ('Ee' includes: currentCharacter) - ifTrue: [ ^ self scan5 ]. - ('DFdf' includes: currentCharacter) - ifTrue: [ ^ self recordAndReportMatch: #(100) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JavaScanner >> scan5 [ - self step. - ('+-' includes: currentCharacter) - ifTrue: [ self step ]. - currentCharacter isDigit - ifTrue: [ ^ self scan6 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JavaScanner >> scan6 [ - [ self recordMatch: #(100). - self step. - currentCharacter isDigit ] whileTrue. - ('DFdf' includes: currentCharacter) - ifTrue: [ ^ self recordAndReportMatch: #(100) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JavaScanner >> scan7 [ - [ self step. - currentCharacter == $* - ifTrue: [ [ self step. - currentCharacter == $* ] whileTrue. - currentCharacter == $/ - ifTrue: [ ^ self recordAndReportMatch: #(107) ]. - ^ self scan7 ]. - true ] whileTrue -] - -{ #category : #generated } -JavaScanner >> scan8 [ - self recordMatch: #(99). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan4 ]. - (currentCharacter between: $8 and: $9) - ifTrue: [ ^ self scan9 ]. - currentCharacter isDigit - ifTrue: [ [ self recordMatch: #(99). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan4 ]. - (currentCharacter between: $8 and: $9) - ifTrue: [ ^ self scan9 ]. - currentCharacter isDigit ] whileTrue. - ('Ee' includes: currentCharacter) - ifTrue: [ ^ self scan5 ]. - ('Ll' includes: currentCharacter) - ifTrue: [ ^ self recordAndReportMatch: #(99) ]. - ('DFdf' includes: currentCharacter) - ifTrue: [ ^ self recordAndReportMatch: #(100) ]. - ^ self reportLastMatch ]. - ('Ee' includes: currentCharacter) - ifTrue: [ ^ self scan5 ]. - ('Ll' includes: currentCharacter) - ifTrue: [ ^ self recordAndReportMatch: #(99) ]. - ('Xx' includes: currentCharacter) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ [ self recordMatch: #(99). - self step. - currentCharacter == $. - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ [ self step. - ('Pp' includes: currentCharacter) - ifTrue: [ ^ self scan5 ]. - currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ] ] whileTrue ]. - ^ self reportLastMatch ]. - ('Ll' includes: currentCharacter) - ifTrue: [ ^ self recordAndReportMatch: #(99) ]. - currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ] ] whileTrue ]. - ^ self reportLastMatch ]. - ('DFdf' includes: currentCharacter) - ifTrue: [ ^ self recordAndReportMatch: #(100) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JavaScanner >> scan9 [ - [ self step. - currentCharacter == $. - ifTrue: [ ^ self scan4 ]. - currentCharacter isDigit ] whileTrue. - ('Ee' includes: currentCharacter) - ifTrue: [ ^ self scan5 ]. - ('DFdf' includes: currentCharacter) - ifTrue: [ ^ self recordAndReportMatch: #(100) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JavaScanner >> scanForToken [ - self step. - currentCharacter == $! - ifTrue: - [ ^ self scanForTokenX17 ]. - currentCharacter == $" - ifTrue: [ ^ self scan1 ]. - currentCharacter == $% - ifTrue: - [ ^ self scanForTokenX16 ]. - currentCharacter == $& - ifTrue: - [ ^ self scanForTokenX10 ]. - currentCharacter == $' - ifTrue: - [ ^ self scanForTokenX1 ]. - currentCharacter == $( - ifTrue: [ ^ self recordAndReportMatch: #(8) ]. - currentCharacter == $) - ifTrue: [ ^ self recordAndReportMatch: #(9) ]. - currentCharacter == $* - ifTrue: - [ ^ self scanForTokenX15 ]. - currentCharacter == $+ - ifTrue: - [ ^ self scanForTokenX9 ]. - currentCharacter == $, - ifTrue: [ ^ self recordAndReportMatch: #(15) ]. - ^ self scanForTokenX20 -] - -{ #category : #generated } -JavaScanner >> scanForTokenX1 [ - self step. - currentCharacter == $\ - ifTrue: [ self step. - currentCharacter == $u - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ ^ self scan2 ] ] ] ]. - ^ self reportLastMatch ]. - (currentCharacter between: $0 and: $3) - ifTrue: [ self step. - currentCharacter == $' - ifTrue: [ ^ self recordAndReportMatch: #(102) ]. - (currentCharacter between: $0 and: $7) - ifTrue: [ ^ self scan3 ]. - ^ self reportLastMatch ]. - (currentCharacter between: $4 and: $7) - ifTrue: [ ^ self scan3 ]. - ('"''\bfnrt' includes: currentCharacter) - ifTrue: [ ^ self scan2 ]. - ^ self reportLastMatch ]. - (currentCharacter <= $& - or: [ (currentCharacter between: $( and: $[) - or: [ currentCharacter >= $] ] ]) - ifTrue: [ ^ self scan2 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JavaScanner >> scanForTokenX10 [ - self recordMatch: #(5). - self step. - currentCharacter == $& - ifTrue: [ ^ self recordAndReportMatch: #(6) ]. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(7) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JavaScanner >> scanForTokenX11 [ - [ self recordMatch: #(106). - self step. - currentCharacter isSeparator - or: [ currentCharacter == Character pageUp ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -JavaScanner >> scanForTokenX12 [ - self recordMatch: #(40). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(41) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JavaScanner >> scanForTokenX13 [ - self recordMatch: #(31). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(32) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JavaScanner >> scanForTokenX14 [ - self recordMatch: #(24). - self step. - currentCharacter == $: - ifTrue: [ ^ self recordAndReportMatch: #(25) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JavaScanner >> scanForTokenX15 [ - self recordMatch: #(10). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(11) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JavaScanner >> scanForTokenX16 [ - self recordMatch: #(3). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(4) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JavaScanner >> scanForTokenX17 [ - self recordMatch: #(1). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(2) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JavaScanner >> scanForTokenX18 [ - [ self recordMatch: #(105). - self step. - currentCharacter isAlphaNumeric - or: [ '$_' includes: currentCharacter ] ] whileTrue -] - -{ #category : #generated } -JavaScanner >> scanForTokenX19 [ - currentCharacter == $] - ifTrue: [ ^ self recordAndReportMatch: #(39) ]. - currentCharacter == $^ - ifTrue: - [ ^ self scanForTokenX12 ]. - currentCharacter == $` - ifTrue: [ ^ self scan10 ]. - currentCharacter == ${ - ifTrue: [ ^ self recordAndReportMatch: #(90) ]. - currentCharacter == $| - ifTrue: - [ ^ self scanForTokenX7 ]. - currentCharacter == $} - ifTrue: [ ^ self recordAndReportMatch: #(94) ]. - currentCharacter == $~ - ifTrue: [ ^ self recordAndReportMatch: #(95) ]. - currentCharacter isDigit - ifTrue: - [ ^ self scanForTokenX3 ]. - (currentCharacter isSeparator - or: [ currentCharacter == Character pageUp ]) - ifTrue: - [ ^ self scanForTokenX11 ]. - (currentCharacter isLetter or: [ '$_' includes: currentCharacter ]) - ifTrue: - [ self scanForTokenX18 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JavaScanner >> scanForTokenX2 [ - self recordMatch: #(22). - self step. - currentCharacter == $* - ifTrue: [ ^ self scan7 ]. - currentCharacter == $/ - ifTrue: [ [ self recordMatch: #(107). - self step. - currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: Character newPage) - or: [ currentCharacter >= (Character value: 14) ] ] ] whileTrue. - ^ self reportLastMatch ]. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(23) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JavaScanner >> scanForTokenX20 [ - currentCharacter == $- - ifTrue: - [ ^ self scanForTokenX5 ]. - currentCharacter == $. - ifTrue: - [ ^ self scanForTokenX8 ]. - currentCharacter == $/ - ifTrue: - [ ^ self scanForTokenX2 ]. - currentCharacter == $0 - ifTrue: [ ^ self scan8 ]. - currentCharacter == $: - ifTrue: - [ ^ self scanForTokenX14 ]. - currentCharacter == $; - ifTrue: [ ^ self recordAndReportMatch: #(26) ]. - currentCharacter == $< - ifTrue: - [ ^ self scanForTokenX6 ]. - currentCharacter == $= - ifTrue: - [ ^ self scanForTokenX13 ]. - currentCharacter == $> - ifTrue: - [ ^ self scanForTokenX4 ]. - currentCharacter == $? - ifTrue: [ ^ self recordAndReportMatch: #(36) ]. - currentCharacter == $@ - ifTrue: [ ^ self recordAndReportMatch: #(37) ]. - currentCharacter == $[ - ifTrue: [ ^ self recordAndReportMatch: #(38) ]. - ^ self scanForTokenX19 -] - -{ #category : #generated } -JavaScanner >> scanForTokenX3 [ - [ self recordMatch: #(99). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan4 ]. - currentCharacter isDigit ] whileTrue. - ('Ee' includes: currentCharacter) - ifTrue: [ ^ self scan5 ]. - ('Ll' includes: currentCharacter) - ifTrue: [ ^ self recordAndReportMatch: #(99) ]. - ('DFdf' includes: currentCharacter) - ifTrue: [ ^ self recordAndReportMatch: #(100) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JavaScanner >> scanForTokenX4 [ - self recordMatch: #(96). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(33) ]. - currentCharacter == $> - ifTrue: [ self recordMatch: #(97). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(34) ]. - currentCharacter == $> - ifTrue: [ self recordMatch: #(98). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(35) ] ] ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JavaScanner >> scanForTokenX5 [ - self recordMatch: #(16). - self step. - currentCharacter == $- - ifTrue: [ ^ self recordAndReportMatch: #(17) ]. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(18) ]. - currentCharacter == $> - ifTrue: [ ^ self recordAndReportMatch: #(19) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JavaScanner >> scanForTokenX6 [ - self recordMatch: #(27). - self step. - currentCharacter == $< - ifTrue: [ self recordMatch: #(28). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(29) ]. - ^ self reportLastMatch ]. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(30) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JavaScanner >> scanForTokenX7 [ - self recordMatch: #(91). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(92) ]. - currentCharacter == $| - ifTrue: [ ^ self recordAndReportMatch: #(93) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JavaScanner >> scanForTokenX8 [ - self recordMatch: #(20). - self step. - currentCharacter == $. - ifTrue: [ self step. - currentCharacter == $. - ifTrue: [ ^ self recordAndReportMatch: #(21) ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan4 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JavaScanner >> scanForTokenX9 [ - self recordMatch: #(12). - self step. - currentCharacter == $+ - ifTrue: [ ^ self recordAndReportMatch: #(13) ]. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(14) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JavaScanner >> tokenActions [ - ^ #(nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil #whitespace #comment #patternToken) -] diff --git a/src/SmaCC_Java/JavaShortTypeNode.class.st b/src/SmaCC_Java/JavaShortTypeNode.class.st deleted file mode 100644 index bad6d30cb..000000000 --- a/src/SmaCC_Java/JavaShortTypeNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #JavaShortTypeNode, - #superclass : #JavaPrimitiveTypeNode, - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaShortTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitShortType: self -] diff --git a/src/SmaCC_Java/JavaSingleTypeImportDeclarationNode.class.st b/src/SmaCC_Java/JavaSingleTypeImportDeclarationNode.class.st deleted file mode 100644 index 758ce763f..000000000 --- a/src/SmaCC_Java/JavaSingleTypeImportDeclarationNode.class.st +++ /dev/null @@ -1,75 +0,0 @@ -Class { - #name : #JavaSingleTypeImportDeclarationNode, - #superclass : #JavaDeclarationNode, - #instVars : [ - 'importToken', - 'staticToken', - 'name', - 'semicolon' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaSingleTypeImportDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSingleTypeImportDeclaration: self -] - -{ #category : #generated } -JavaSingleTypeImportDeclarationNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -JavaSingleTypeImportDeclarationNode >> importToken [ - ^ importToken -] - -{ #category : #generated } -JavaSingleTypeImportDeclarationNode >> importToken: aSmaCCToken [ - importToken := aSmaCCToken -] - -{ #category : #generated } -JavaSingleTypeImportDeclarationNode >> name [ - ^ name -] - -{ #category : #generated } -JavaSingleTypeImportDeclarationNode >> name: aJavaNameNode [ - self name notNil - ifTrue: [ self name parent: nil ]. - name := aJavaNameNode. - self name notNil - ifTrue: [ self name parent: self ] -] - -{ #category : #generated } -JavaSingleTypeImportDeclarationNode >> nodeVariables [ - ^ #(#name) -] - -{ #category : #generated } -JavaSingleTypeImportDeclarationNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JavaSingleTypeImportDeclarationNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -JavaSingleTypeImportDeclarationNode >> staticToken [ - ^ staticToken -] - -{ #category : #generated } -JavaSingleTypeImportDeclarationNode >> staticToken: aSmaCCToken [ - staticToken := aSmaCCToken -] - -{ #category : #generated } -JavaSingleTypeImportDeclarationNode >> tokenVariables [ - ^ #(#importToken #staticToken) -] diff --git a/src/SmaCC_Java/JavaStatementExpressionListNode.class.st b/src/SmaCC_Java/JavaStatementExpressionListNode.class.st deleted file mode 100644 index 75db0fdbb..000000000 --- a/src/SmaCC_Java/JavaStatementExpressionListNode.class.st +++ /dev/null @@ -1,53 +0,0 @@ -Class { - #name : #JavaStatementExpressionListNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'expressions', - 'commas' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaStatementExpressionListNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitStatementExpressionList: self -] - -{ #category : #generated } -JavaStatementExpressionListNode >> commas [ - ^ commas -] - -{ #category : #generated } -JavaStatementExpressionListNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JavaStatementExpressionListNode >> compositeNodeVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -JavaStatementExpressionListNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -JavaStatementExpressionListNode >> expressions: anOrderedCollection [ - self setParents: self expressions to: nil. - expressions := anOrderedCollection. - self setParents: self expressions to: self -] - -{ #category : #generated } -JavaStatementExpressionListNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #'generated-initialize-release' } -JavaStatementExpressionListNode >> initialize [ - super initialize. - expressions := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] diff --git a/src/SmaCC_Java/JavaStatementNode.class.st b/src/SmaCC_Java/JavaStatementNode.class.st deleted file mode 100644 index cd9808cbb..000000000 --- a/src/SmaCC_Java/JavaStatementNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #JavaStatementNode, - #superclass : #JavaProgramNode, - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitStatement: self -] diff --git a/src/SmaCC_Java/JavaStaticInitializerNode.class.st b/src/SmaCC_Java/JavaStaticInitializerNode.class.st deleted file mode 100644 index d0f5d64de..000000000 --- a/src/SmaCC_Java/JavaStaticInitializerNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JavaStaticInitializerNode, - #superclass : #JavaInitializerNode, - #instVars : [ - 'staticToken' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaStaticInitializerNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitStaticInitializer: self -] - -{ #category : #generated } -JavaStaticInitializerNode >> staticToken [ - ^ staticToken -] - -{ #category : #generated } -JavaStaticInitializerNode >> staticToken: aSmaCCToken [ - staticToken := aSmaCCToken -] - -{ #category : #generated } -JavaStaticInitializerNode >> tokenVariables [ - ^ #(#staticToken) -] diff --git a/src/SmaCC_Java/JavaStringLiteralNode.class.st b/src/SmaCC_Java/JavaStringLiteralNode.class.st deleted file mode 100644 index e4b489e35..000000000 --- a/src/SmaCC_Java/JavaStringLiteralNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #JavaStringLiteralNode, - #superclass : #JavaLiteralNode, - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaStringLiteralNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitStringLiteral: self -] diff --git a/src/SmaCC_Java/JavaSuperConstructorInvocationNode.class.st b/src/SmaCC_Java/JavaSuperConstructorInvocationNode.class.st deleted file mode 100644 index e726b764f..000000000 --- a/src/SmaCC_Java/JavaSuperConstructorInvocationNode.class.st +++ /dev/null @@ -1,138 +0,0 @@ -Class { - #name : #JavaSuperConstructorInvocationNode, - #superclass : #JavaStatementNode, - #instVars : [ - 'superToken', - 'leftParen', - 'expressions', - 'commas', - 'rightParen', - 'semicolon', - 'primary', - 'period' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaSuperConstructorInvocationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSuperConstructorInvocation: self -] - -{ #category : #generated } -JavaSuperConstructorInvocationNode >> commas [ - ^ commas -] - -{ #category : #generated } -JavaSuperConstructorInvocationNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JavaSuperConstructorInvocationNode >> compositeNodeVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -JavaSuperConstructorInvocationNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -JavaSuperConstructorInvocationNode >> expressions: anOrderedCollection [ - self setParents: self expressions to: nil. - expressions := anOrderedCollection. - self setParents: self expressions to: self -] - -{ #category : #generated } -JavaSuperConstructorInvocationNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -JavaSuperConstructorInvocationNode >> ignoredTokenVariables [ - ^ #(#leftParen #rightParen #semicolon) -] - -{ #category : #'generated-initialize-release' } -JavaSuperConstructorInvocationNode >> initialize [ - super initialize. - expressions := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaSuperConstructorInvocationNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -JavaSuperConstructorInvocationNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -JavaSuperConstructorInvocationNode >> nodeVariables [ - ^ #(#primary) -] - -{ #category : #generated } -JavaSuperConstructorInvocationNode >> period [ - ^ period -] - -{ #category : #generated } -JavaSuperConstructorInvocationNode >> period: aSmaCCToken [ - period := aSmaCCToken -] - -{ #category : #generated } -JavaSuperConstructorInvocationNode >> primary [ - ^ primary -] - -{ #category : #generated } -JavaSuperConstructorInvocationNode >> primary: aJavaExpressionNode [ - self primary notNil - ifTrue: [ self primary parent: nil ]. - primary := aJavaExpressionNode. - self primary notNil - ifTrue: [ self primary parent: self ] -] - -{ #category : #generated } -JavaSuperConstructorInvocationNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -JavaSuperConstructorInvocationNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -JavaSuperConstructorInvocationNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JavaSuperConstructorInvocationNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -JavaSuperConstructorInvocationNode >> superToken [ - ^ superToken -] - -{ #category : #generated } -JavaSuperConstructorInvocationNode >> superToken: aSmaCCToken [ - superToken := aSmaCCToken -] - -{ #category : #generated } -JavaSuperConstructorInvocationNode >> tokenVariables [ - ^ #(#superToken #period) -] diff --git a/src/SmaCC_Java/JavaSwitchBlockNode.class.st b/src/SmaCC_Java/JavaSwitchBlockNode.class.st deleted file mode 100644 index f7e8b65eb..000000000 --- a/src/SmaCC_Java/JavaSwitchBlockNode.class.st +++ /dev/null @@ -1,77 +0,0 @@ -Class { - #name : #JavaSwitchBlockNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'leftBrace', - 'statementGroups', - 'labels', - 'rightBrace' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaSwitchBlockNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSwitchBlock: self -] - -{ #category : #generated } -JavaSwitchBlockNode >> compositeNodeVariables [ - ^ #(#statementGroups #labels) -] - -{ #category : #generated } -JavaSwitchBlockNode >> ignoredTokenVariables [ - ^ #(#leftBrace #rightBrace) -] - -{ #category : #'generated-initialize-release' } -JavaSwitchBlockNode >> initialize [ - super initialize. - statementGroups := OrderedCollection new: 2. - labels := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaSwitchBlockNode >> labels [ - ^ labels -] - -{ #category : #generated } -JavaSwitchBlockNode >> labels: anOrderedCollection [ - self setParents: self labels to: nil. - labels := anOrderedCollection. - self setParents: self labels to: self -] - -{ #category : #generated } -JavaSwitchBlockNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -JavaSwitchBlockNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -JavaSwitchBlockNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -JavaSwitchBlockNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] - -{ #category : #generated } -JavaSwitchBlockNode >> statementGroups [ - ^ statementGroups -] - -{ #category : #generated } -JavaSwitchBlockNode >> statementGroups: anOrderedCollection [ - self setParents: self statementGroups to: nil. - statementGroups := anOrderedCollection. - self setParents: self statementGroups to: self -] diff --git a/src/SmaCC_Java/JavaSwitchBlockStatementGroupNode.class.st b/src/SmaCC_Java/JavaSwitchBlockStatementGroupNode.class.st deleted file mode 100644 index f4dcc48d6..000000000 --- a/src/SmaCC_Java/JavaSwitchBlockStatementGroupNode.class.st +++ /dev/null @@ -1,50 +0,0 @@ -Class { - #name : #JavaSwitchBlockStatementGroupNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'labels', - 'statements' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaSwitchBlockStatementGroupNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSwitchBlockStatementGroup: self -] - -{ #category : #generated } -JavaSwitchBlockStatementGroupNode >> compositeNodeVariables [ - ^ #(#labels #statements) -] - -{ #category : #'generated-initialize-release' } -JavaSwitchBlockStatementGroupNode >> initialize [ - super initialize. - labels := OrderedCollection new: 2. - statements := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaSwitchBlockStatementGroupNode >> labels [ - ^ labels -] - -{ #category : #generated } -JavaSwitchBlockStatementGroupNode >> labels: anOrderedCollection [ - self setParents: self labels to: nil. - labels := anOrderedCollection. - self setParents: self labels to: self -] - -{ #category : #generated } -JavaSwitchBlockStatementGroupNode >> statements [ - ^ statements -] - -{ #category : #generated } -JavaSwitchBlockStatementGroupNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] diff --git a/src/SmaCC_Java/JavaSwitchLabelNode.class.st b/src/SmaCC_Java/JavaSwitchLabelNode.class.st deleted file mode 100644 index c3f57be46..000000000 --- a/src/SmaCC_Java/JavaSwitchLabelNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #JavaSwitchLabelNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'caseToken', - 'constant', - 'colon' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaSwitchLabelNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSwitchLabel: self -] - -{ #category : #generated } -JavaSwitchLabelNode >> caseToken [ - ^ caseToken -] - -{ #category : #generated } -JavaSwitchLabelNode >> caseToken: aSmaCCToken [ - caseToken := aSmaCCToken -] - -{ #category : #generated } -JavaSwitchLabelNode >> colon [ - ^ colon -] - -{ #category : #generated } -JavaSwitchLabelNode >> colon: aSmaCCToken [ - colon := aSmaCCToken -] - -{ #category : #generated } -JavaSwitchLabelNode >> constant [ - ^ constant -] - -{ #category : #generated } -JavaSwitchLabelNode >> constant: aJavaExpressionNode [ - self constant notNil - ifTrue: [ self constant parent: nil ]. - constant := aJavaExpressionNode. - self constant notNil - ifTrue: [ self constant parent: self ] -] - -{ #category : #generated } -JavaSwitchLabelNode >> nodeVariables [ - ^ #(#constant) -] - -{ #category : #generated } -JavaSwitchLabelNode >> tokenVariables [ - ^ #(#caseToken #colon) -] diff --git a/src/SmaCC_Java/JavaSwitchStatementNode.class.st b/src/SmaCC_Java/JavaSwitchStatementNode.class.st deleted file mode 100644 index 31fea6c8c..000000000 --- a/src/SmaCC_Java/JavaSwitchStatementNode.class.st +++ /dev/null @@ -1,90 +0,0 @@ -Class { - #name : #JavaSwitchStatementNode, - #superclass : #JavaStatementNode, - #instVars : [ - 'switchToken', - 'leftParen', - 'expression', - 'rightParen', - 'block' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaSwitchStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSwitchStatement: self -] - -{ #category : #generated } -JavaSwitchStatementNode >> block [ - ^ block -] - -{ #category : #generated } -JavaSwitchStatementNode >> block: aJavaSwitchBlockNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aJavaSwitchBlockNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -JavaSwitchStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -JavaSwitchStatementNode >> expression: aJavaExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJavaExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JavaSwitchStatementNode >> ignoredTokenVariables [ - ^ #(#leftParen #rightParen) -] - -{ #category : #generated } -JavaSwitchStatementNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -JavaSwitchStatementNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -JavaSwitchStatementNode >> nodeVariables [ - ^ #(#expression #block) -] - -{ #category : #generated } -JavaSwitchStatementNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -JavaSwitchStatementNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -JavaSwitchStatementNode >> switchToken [ - ^ switchToken -] - -{ #category : #generated } -JavaSwitchStatementNode >> switchToken: aSmaCCToken [ - switchToken := aSmaCCToken -] - -{ #category : #generated } -JavaSwitchStatementNode >> tokenVariables [ - ^ #(#switchToken) -] diff --git a/src/SmaCC_Java/JavaSynchronizedStatementNode.class.st b/src/SmaCC_Java/JavaSynchronizedStatementNode.class.st deleted file mode 100644 index 44d3aeeaf..000000000 --- a/src/SmaCC_Java/JavaSynchronizedStatementNode.class.st +++ /dev/null @@ -1,90 +0,0 @@ -Class { - #name : #JavaSynchronizedStatementNode, - #superclass : #JavaStatementNode, - #instVars : [ - 'synchronizedToken', - 'leftParen', - 'expression', - 'rightParen', - 'block' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaSynchronizedStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSynchronizedStatement: self -] - -{ #category : #generated } -JavaSynchronizedStatementNode >> block [ - ^ block -] - -{ #category : #generated } -JavaSynchronizedStatementNode >> block: aJavaBlockNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aJavaBlockNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -JavaSynchronizedStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -JavaSynchronizedStatementNode >> expression: aJavaExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJavaExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JavaSynchronizedStatementNode >> ignoredTokenVariables [ - ^ #(#leftParen #rightParen) -] - -{ #category : #generated } -JavaSynchronizedStatementNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -JavaSynchronizedStatementNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -JavaSynchronizedStatementNode >> nodeVariables [ - ^ #(#expression #block) -] - -{ #category : #generated } -JavaSynchronizedStatementNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -JavaSynchronizedStatementNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -JavaSynchronizedStatementNode >> synchronizedToken [ - ^ synchronizedToken -] - -{ #category : #generated } -JavaSynchronizedStatementNode >> synchronizedToken: aSmaCCToken [ - synchronizedToken := aSmaCCToken -] - -{ #category : #generated } -JavaSynchronizedStatementNode >> tokenVariables [ - ^ #(#synchronizedToken) -] diff --git a/src/SmaCC_Java/JavaThisConstructorInvocationNode.class.st b/src/SmaCC_Java/JavaThisConstructorInvocationNode.class.st deleted file mode 100644 index d1cfaa792..000000000 --- a/src/SmaCC_Java/JavaThisConstructorInvocationNode.class.st +++ /dev/null @@ -1,138 +0,0 @@ -Class { - #name : #JavaThisConstructorInvocationNode, - #superclass : #JavaStatementNode, - #instVars : [ - 'thisToken', - 'leftParen', - 'expressions', - 'commas', - 'rightParen', - 'semicolon', - 'primary', - 'period' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaThisConstructorInvocationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitThisConstructorInvocation: self -] - -{ #category : #generated } -JavaThisConstructorInvocationNode >> commas [ - ^ commas -] - -{ #category : #generated } -JavaThisConstructorInvocationNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JavaThisConstructorInvocationNode >> compositeNodeVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -JavaThisConstructorInvocationNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -JavaThisConstructorInvocationNode >> expressions: anOrderedCollection [ - self setParents: self expressions to: nil. - expressions := anOrderedCollection. - self setParents: self expressions to: self -] - -{ #category : #generated } -JavaThisConstructorInvocationNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -JavaThisConstructorInvocationNode >> ignoredTokenVariables [ - ^ #(#leftParen #rightParen #semicolon) -] - -{ #category : #'generated-initialize-release' } -JavaThisConstructorInvocationNode >> initialize [ - super initialize. - expressions := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaThisConstructorInvocationNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -JavaThisConstructorInvocationNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -JavaThisConstructorInvocationNode >> nodeVariables [ - ^ #(#primary) -] - -{ #category : #generated } -JavaThisConstructorInvocationNode >> period [ - ^ period -] - -{ #category : #generated } -JavaThisConstructorInvocationNode >> period: aSmaCCToken [ - period := aSmaCCToken -] - -{ #category : #generated } -JavaThisConstructorInvocationNode >> primary [ - ^ primary -] - -{ #category : #generated } -JavaThisConstructorInvocationNode >> primary: aJavaExpressionNode [ - self primary notNil - ifTrue: [ self primary parent: nil ]. - primary := aJavaExpressionNode. - self primary notNil - ifTrue: [ self primary parent: self ] -] - -{ #category : #generated } -JavaThisConstructorInvocationNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -JavaThisConstructorInvocationNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -JavaThisConstructorInvocationNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JavaThisConstructorInvocationNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -JavaThisConstructorInvocationNode >> thisToken [ - ^ thisToken -] - -{ #category : #generated } -JavaThisConstructorInvocationNode >> thisToken: aSmaCCToken [ - thisToken := aSmaCCToken -] - -{ #category : #generated } -JavaThisConstructorInvocationNode >> tokenVariables [ - ^ #(#thisToken #period) -] diff --git a/src/SmaCC_Java/JavaThrowStatementNode.class.st b/src/SmaCC_Java/JavaThrowStatementNode.class.st deleted file mode 100644 index d295c6961..000000000 --- a/src/SmaCC_Java/JavaThrowStatementNode.class.st +++ /dev/null @@ -1,64 +0,0 @@ -Class { - #name : #JavaThrowStatementNode, - #superclass : #JavaStatementNode, - #instVars : [ - 'throwToken', - 'expression', - 'semicolon' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaThrowStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitThrowStatement: self -] - -{ #category : #generated } -JavaThrowStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -JavaThrowStatementNode >> expression: aJavaExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJavaExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JavaThrowStatementNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -JavaThrowStatementNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -JavaThrowStatementNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JavaThrowStatementNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -JavaThrowStatementNode >> throwToken [ - ^ throwToken -] - -{ #category : #generated } -JavaThrowStatementNode >> throwToken: aSmaCCToken [ - throwToken := aSmaCCToken -] - -{ #category : #generated } -JavaThrowStatementNode >> tokenVariables [ - ^ #(#throwToken) -] diff --git a/src/SmaCC_Java/JavaThrowsNode.class.st b/src/SmaCC_Java/JavaThrowsNode.class.st deleted file mode 100644 index 0e8b20c21..000000000 --- a/src/SmaCC_Java/JavaThrowsNode.class.st +++ /dev/null @@ -1,69 +0,0 @@ -Class { - #name : #JavaThrowsNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'throwsToken', - 'classTypes', - 'commas' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaThrowsNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitThrows: self -] - -{ #category : #generated } -JavaThrowsNode >> classTypes [ - ^ classTypes -] - -{ #category : #generated } -JavaThrowsNode >> classTypes: anOrderedCollection [ - self setParents: self classTypes to: nil. - classTypes := anOrderedCollection. - self setParents: self classTypes to: self -] - -{ #category : #generated } -JavaThrowsNode >> commas [ - ^ commas -] - -{ #category : #generated } -JavaThrowsNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JavaThrowsNode >> compositeNodeVariables [ - ^ #(#classTypes) -] - -{ #category : #generated } -JavaThrowsNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #'generated-initialize-release' } -JavaThrowsNode >> initialize [ - super initialize. - classTypes := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaThrowsNode >> throwsToken [ - ^ throwsToken -] - -{ #category : #generated } -JavaThrowsNode >> throwsToken: aSmaCCToken [ - throwsToken := aSmaCCToken -] - -{ #category : #generated } -JavaThrowsNode >> tokenVariables [ - ^ #(#throwsToken) -] diff --git a/src/SmaCC_Java/JavaTryStatementNode.class.st b/src/SmaCC_Java/JavaTryStatementNode.class.st deleted file mode 100644 index e5358e065..000000000 --- a/src/SmaCC_Java/JavaTryStatementNode.class.st +++ /dev/null @@ -1,145 +0,0 @@ -Class { - #name : #JavaTryStatementNode, - #superclass : #JavaStatementNode, - #instVars : [ - 'tryToken', - 'leftParen', - 'resources', - 'semicolons', - 'rightParen', - 'block', - 'catches', - 'finally' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaTryStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitTryStatement: self -] - -{ #category : #generated } -JavaTryStatementNode >> block [ - ^ block -] - -{ #category : #generated } -JavaTryStatementNode >> block: aJavaBlockNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aJavaBlockNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -JavaTryStatementNode >> catches [ - ^ catches -] - -{ #category : #generated } -JavaTryStatementNode >> catches: anOrderedCollection [ - self setParents: self catches to: nil. - catches := anOrderedCollection. - self setParents: self catches to: self -] - -{ #category : #generated } -JavaTryStatementNode >> compositeNodeVariables [ - ^ #(#catches #resources) -] - -{ #category : #generated } -JavaTryStatementNode >> finally [ - ^ finally -] - -{ #category : #generated } -JavaTryStatementNode >> finally: aJavaFinallyClauseNode [ - self finally notNil - ifTrue: [ self finally parent: nil ]. - finally := aJavaFinallyClauseNode. - self finally notNil - ifTrue: [ self finally parent: self ] -] - -{ #category : #generated } -JavaTryStatementNode >> ignoredCompositeTokenVariables [ - ^ #(#semicolons) -] - -{ #category : #generated } -JavaTryStatementNode >> ignoredTokenVariables [ - ^ #(#leftParen #rightParen) -] - -{ #category : #'generated-initialize-release' } -JavaTryStatementNode >> initialize [ - super initialize. - catches := OrderedCollection new: 2. - resources := OrderedCollection new: 2. - semicolons := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaTryStatementNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -JavaTryStatementNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -JavaTryStatementNode >> nodeVariables [ - ^ #(#block #finally) -] - -{ #category : #generated } -JavaTryStatementNode >> resources [ - ^ resources -] - -{ #category : #generated } -JavaTryStatementNode >> resources: anOrderedCollection [ - self setParents: self resources to: nil. - resources := anOrderedCollection. - self setParents: self resources to: self -] - -{ #category : #generated } -JavaTryStatementNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -JavaTryStatementNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -JavaTryStatementNode >> semicolons [ - ^ semicolons -] - -{ #category : #generated } -JavaTryStatementNode >> semicolons: anOrderedCollection [ - semicolons := anOrderedCollection -] - -{ #category : #generated } -JavaTryStatementNode >> tokenVariables [ - ^ #(#tryToken) -] - -{ #category : #generated } -JavaTryStatementNode >> tryToken [ - ^ tryToken -] - -{ #category : #generated } -JavaTryStatementNode >> tryToken: aSmaCCToken [ - tryToken := aSmaCCToken -] diff --git a/src/SmaCC_Java/JavaTypeArgumentNode.class.st b/src/SmaCC_Java/JavaTypeArgumentNode.class.st deleted file mode 100644 index f1cbfe8a5..000000000 --- a/src/SmaCC_Java/JavaTypeArgumentNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #JavaTypeArgumentNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'type', - 'questionMark', - 'token' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaTypeArgumentNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitTypeArgument: self -] - -{ #category : #generated } -JavaTypeArgumentNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -JavaTypeArgumentNode >> questionMark [ - ^ questionMark -] - -{ #category : #generated } -JavaTypeArgumentNode >> questionMark: aSmaCCToken [ - questionMark := aSmaCCToken -] - -{ #category : #generated } -JavaTypeArgumentNode >> token [ - ^ token -] - -{ #category : #generated } -JavaTypeArgumentNode >> token: aSmaCCToken [ - token := aSmaCCToken -] - -{ #category : #generated } -JavaTypeArgumentNode >> tokenVariables [ - ^ #(#questionMark #token) -] - -{ #category : #generated } -JavaTypeArgumentNode >> type [ - ^ type -] - -{ #category : #generated } -JavaTypeArgumentNode >> type: aJavaTypeNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aJavaTypeNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_Java/JavaTypeImportOnDemandDeclarationNode.class.st b/src/SmaCC_Java/JavaTypeImportOnDemandDeclarationNode.class.st deleted file mode 100644 index 64f9940c5..000000000 --- a/src/SmaCC_Java/JavaTypeImportOnDemandDeclarationNode.class.st +++ /dev/null @@ -1,39 +0,0 @@ -Class { - #name : #JavaTypeImportOnDemandDeclarationNode, - #superclass : #JavaSingleTypeImportDeclarationNode, - #instVars : [ - 'period', - 'star' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaTypeImportOnDemandDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitTypeImportOnDemandDeclaration: self -] - -{ #category : #generated } -JavaTypeImportOnDemandDeclarationNode >> period [ - ^ period -] - -{ #category : #generated } -JavaTypeImportOnDemandDeclarationNode >> period: aSmaCCToken [ - period := aSmaCCToken -] - -{ #category : #generated } -JavaTypeImportOnDemandDeclarationNode >> star [ - ^ star -] - -{ #category : #generated } -JavaTypeImportOnDemandDeclarationNode >> star: aSmaCCToken [ - star := aSmaCCToken -] - -{ #category : #generated } -JavaTypeImportOnDemandDeclarationNode >> tokenVariables [ - ^ #(#period #star #importToken #staticToken) -] diff --git a/src/SmaCC_Java/JavaTypeNameNode.class.st b/src/SmaCC_Java/JavaTypeNameNode.class.st deleted file mode 100644 index ddd7584d2..000000000 --- a/src/SmaCC_Java/JavaTypeNameNode.class.st +++ /dev/null @@ -1,96 +0,0 @@ -Class { - #name : #JavaTypeNameNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'name', - 'lt', - 'arguments', - 'commas', - 'gt' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaTypeNameNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitTypeName: self -] - -{ #category : #generated } -JavaTypeNameNode >> arguments [ - ^ arguments -] - -{ #category : #generated } -JavaTypeNameNode >> arguments: anOrderedCollection [ - self setParents: self arguments to: nil. - arguments := anOrderedCollection. - self setParents: self arguments to: self -] - -{ #category : #generated } -JavaTypeNameNode >> commas [ - ^ commas -] - -{ #category : #generated } -JavaTypeNameNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JavaTypeNameNode >> compositeNodeVariables [ - ^ #(#arguments) -] - -{ #category : #generated } -JavaTypeNameNode >> gt [ - ^ gt -] - -{ #category : #generated } -JavaTypeNameNode >> gt: aSmaCCToken [ - gt := aSmaCCToken -] - -{ #category : #generated } -JavaTypeNameNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -JavaTypeNameNode >> ignoredTokenVariables [ - ^ #(#lt #gt) -] - -{ #category : #'generated-initialize-release' } -JavaTypeNameNode >> initialize [ - super initialize. - arguments := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaTypeNameNode >> lt [ - ^ lt -] - -{ #category : #generated } -JavaTypeNameNode >> lt: aSmaCCToken [ - lt := aSmaCCToken -] - -{ #category : #generated } -JavaTypeNameNode >> name [ - ^ name -] - -{ #category : #generated } -JavaTypeNameNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -JavaTypeNameNode >> tokenVariables [ - ^ #(#name) -] diff --git a/src/SmaCC_Java/JavaTypeNode.class.st b/src/SmaCC_Java/JavaTypeNode.class.st deleted file mode 100644 index 99cd232e5..000000000 --- a/src/SmaCC_Java/JavaTypeNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #JavaTypeNode, - #superclass : #JavaProgramNode, - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitType: self -] diff --git a/src/SmaCC_Java/JavaTypeParameterNode.class.st b/src/SmaCC_Java/JavaTypeParameterNode.class.st deleted file mode 100644 index cec7e908e..000000000 --- a/src/SmaCC_Java/JavaTypeParameterNode.class.st +++ /dev/null @@ -1,80 +0,0 @@ -Class { - #name : #JavaTypeParameterNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'name', - 'extendsToken', - 'types', - 'amps' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaTypeParameterNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitTypeParameter: self -] - -{ #category : #generated } -JavaTypeParameterNode >> amps [ - ^ amps -] - -{ #category : #generated } -JavaTypeParameterNode >> amps: anOrderedCollection [ - amps := anOrderedCollection -] - -{ #category : #generated } -JavaTypeParameterNode >> compositeNodeVariables [ - ^ #(#types) -] - -{ #category : #generated } -JavaTypeParameterNode >> compositeTokenVariables [ - ^ #(#amps) -] - -{ #category : #generated } -JavaTypeParameterNode >> extendsToken [ - ^ extendsToken -] - -{ #category : #generated } -JavaTypeParameterNode >> extendsToken: aSmaCCToken [ - extendsToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -JavaTypeParameterNode >> initialize [ - super initialize. - types := OrderedCollection new: 2. - amps := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaTypeParameterNode >> name [ - ^ name -] - -{ #category : #generated } -JavaTypeParameterNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -JavaTypeParameterNode >> tokenVariables [ - ^ #(#name #extendsToken) -] - -{ #category : #generated } -JavaTypeParameterNode >> types [ - ^ types -] - -{ #category : #generated } -JavaTypeParameterNode >> types: anOrderedCollection [ - self setParents: self types to: nil. - types := anOrderedCollection. - self setParents: self types to: self -] diff --git a/src/SmaCC_Java/JavaTypeParametersNode.class.st b/src/SmaCC_Java/JavaTypeParametersNode.class.st deleted file mode 100644 index 3782ba161..000000000 --- a/src/SmaCC_Java/JavaTypeParametersNode.class.st +++ /dev/null @@ -1,80 +0,0 @@ -Class { - #name : #JavaTypeParametersNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'lt', - 'parameters', - 'commas', - 'gt' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaTypeParametersNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitTypeParameters: self -] - -{ #category : #generated } -JavaTypeParametersNode >> commas [ - ^ commas -] - -{ #category : #generated } -JavaTypeParametersNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JavaTypeParametersNode >> compositeNodeVariables [ - ^ #(#parameters) -] - -{ #category : #generated } -JavaTypeParametersNode >> gt [ - ^ gt -] - -{ #category : #generated } -JavaTypeParametersNode >> gt: aSmaCCToken [ - gt := aSmaCCToken -] - -{ #category : #generated } -JavaTypeParametersNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -JavaTypeParametersNode >> ignoredTokenVariables [ - ^ #(#lt #gt) -] - -{ #category : #'generated-initialize-release' } -JavaTypeParametersNode >> initialize [ - super initialize. - parameters := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -JavaTypeParametersNode >> lt [ - ^ lt -] - -{ #category : #generated } -JavaTypeParametersNode >> lt: aSmaCCToken [ - lt := aSmaCCToken -] - -{ #category : #generated } -JavaTypeParametersNode >> parameters [ - ^ parameters -] - -{ #category : #generated } -JavaTypeParametersNode >> parameters: anOrderedCollection [ - self setParents: self parameters to: nil. - parameters := anOrderedCollection. - self setParents: self parameters to: self -] diff --git a/src/SmaCC_Java/JavaUnaryAdditionNode.class.st b/src/SmaCC_Java/JavaUnaryAdditionNode.class.st deleted file mode 100644 index b8846ee4a..000000000 --- a/src/SmaCC_Java/JavaUnaryAdditionNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JavaUnaryAdditionNode, - #superclass : #JavaUnaryExpressionNode, - #instVars : [ - 'plus' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaUnaryAdditionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitUnaryAddition: self -] - -{ #category : #generated } -JavaUnaryAdditionNode >> plus [ - ^ plus -] - -{ #category : #generated } -JavaUnaryAdditionNode >> plus: aSmaCCToken [ - plus := aSmaCCToken -] - -{ #category : #generated } -JavaUnaryAdditionNode >> tokenVariables [ - ^ #(#plus) -] diff --git a/src/SmaCC_Java/JavaUnaryBitInvertNode.class.st b/src/SmaCC_Java/JavaUnaryBitInvertNode.class.st deleted file mode 100644 index 59aa5e152..000000000 --- a/src/SmaCC_Java/JavaUnaryBitInvertNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JavaUnaryBitInvertNode, - #superclass : #JavaUnaryExpressionNode, - #instVars : [ - 'tilde' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaUnaryBitInvertNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitUnaryBitInvert: self -] - -{ #category : #generated } -JavaUnaryBitInvertNode >> tilde [ - ^ tilde -] - -{ #category : #generated } -JavaUnaryBitInvertNode >> tilde: aSmaCCToken [ - tilde := aSmaCCToken -] - -{ #category : #generated } -JavaUnaryBitInvertNode >> tokenVariables [ - ^ #(#tilde) -] diff --git a/src/SmaCC_Java/JavaUnaryExpressionNode.class.st b/src/SmaCC_Java/JavaUnaryExpressionNode.class.st deleted file mode 100644 index 5cef5386d..000000000 --- a/src/SmaCC_Java/JavaUnaryExpressionNode.class.st +++ /dev/null @@ -1,32 +0,0 @@ -Class { - #name : #JavaUnaryExpressionNode, - #superclass : #JavaExpressionNode, - #instVars : [ - 'expression' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaUnaryExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitUnaryExpression: self -] - -{ #category : #generated } -JavaUnaryExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -JavaUnaryExpressionNode >> expression: aJavaExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJavaExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JavaUnaryExpressionNode >> nodeVariables [ - ^ #(#expression) -] diff --git a/src/SmaCC_Java/JavaUnaryNotNode.class.st b/src/SmaCC_Java/JavaUnaryNotNode.class.st deleted file mode 100644 index 331263f10..000000000 --- a/src/SmaCC_Java/JavaUnaryNotNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JavaUnaryNotNode, - #superclass : #JavaUnaryExpressionNode, - #instVars : [ - 'bang' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaUnaryNotNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitUnaryNot: self -] - -{ #category : #generated } -JavaUnaryNotNode >> bang [ - ^ bang -] - -{ #category : #generated } -JavaUnaryNotNode >> bang: aSmaCCToken [ - bang := aSmaCCToken -] - -{ #category : #generated } -JavaUnaryNotNode >> tokenVariables [ - ^ #(#bang) -] diff --git a/src/SmaCC_Java/JavaUnarySubtractionNode.class.st b/src/SmaCC_Java/JavaUnarySubtractionNode.class.st deleted file mode 100644 index 4f34f850e..000000000 --- a/src/SmaCC_Java/JavaUnarySubtractionNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JavaUnarySubtractionNode, - #superclass : #JavaUnaryExpressionNode, - #instVars : [ - 'minus' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaUnarySubtractionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitUnarySubtraction: self -] - -{ #category : #generated } -JavaUnarySubtractionNode >> minus [ - ^ minus -] - -{ #category : #generated } -JavaUnarySubtractionNode >> minus: aSmaCCToken [ - minus := aSmaCCToken -] - -{ #category : #generated } -JavaUnarySubtractionNode >> tokenVariables [ - ^ #(#minus) -] diff --git a/src/SmaCC_Java/JavaVariableArgumentParameterNode.class.st b/src/SmaCC_Java/JavaVariableArgumentParameterNode.class.st deleted file mode 100644 index 61f6a9308..000000000 --- a/src/SmaCC_Java/JavaVariableArgumentParameterNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JavaVariableArgumentParameterNode, - #superclass : #JavaParameterNode, - #instVars : [ - 'varArgsToken' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaVariableArgumentParameterNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitVariableArgumentParameter: self -] - -{ #category : #generated } -JavaVariableArgumentParameterNode >> tokenVariables [ - ^ #(#varArgsToken) -] - -{ #category : #generated } -JavaVariableArgumentParameterNode >> varArgsToken [ - ^ varArgsToken -] - -{ #category : #generated } -JavaVariableArgumentParameterNode >> varArgsToken: aSmaCCToken [ - varArgsToken := aSmaCCToken -] diff --git a/src/SmaCC_Java/JavaVariableDeclarationNode.class.st b/src/SmaCC_Java/JavaVariableDeclarationNode.class.st deleted file mode 100644 index 11ab13d3c..000000000 --- a/src/SmaCC_Java/JavaVariableDeclarationNode.class.st +++ /dev/null @@ -1,32 +0,0 @@ -Class { - #name : #JavaVariableDeclarationNode, - #superclass : #JavaDeclarationNode, - #instVars : [ - 'variable' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaVariableDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitVariableDeclaration: self -] - -{ #category : #generated } -JavaVariableDeclarationNode >> nodeVariables [ - ^ #(#variable) -] - -{ #category : #generated } -JavaVariableDeclarationNode >> variable [ - ^ variable -] - -{ #category : #generated } -JavaVariableDeclarationNode >> variable: aJavaProgramNode [ - self variable notNil - ifTrue: [ self variable parent: nil ]. - variable := aJavaProgramNode. - self variable notNil - ifTrue: [ self variable parent: self ] -] diff --git a/src/SmaCC_Java/JavaVariableNameNode.class.st b/src/SmaCC_Java/JavaVariableNameNode.class.st deleted file mode 100644 index 5fba0a604..000000000 --- a/src/SmaCC_Java/JavaVariableNameNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JavaVariableNameNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'name' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaVariableNameNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitVariableName: self -] - -{ #category : #generated } -JavaVariableNameNode >> name [ - ^ name -] - -{ #category : #generated } -JavaVariableNameNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -JavaVariableNameNode >> tokenVariables [ - ^ #(#name) -] diff --git a/src/SmaCC_Java/JavaVoidTypeNode.class.st b/src/SmaCC_Java/JavaVoidTypeNode.class.st deleted file mode 100644 index 9f196a9b0..000000000 --- a/src/SmaCC_Java/JavaVoidTypeNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JavaVoidTypeNode, - #superclass : #JavaProgramNode, - #instVars : [ - 'voidToken' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaVoidTypeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitVoidType: self -] - -{ #category : #generated } -JavaVoidTypeNode >> tokenVariables [ - ^ #(#voidToken) -] - -{ #category : #generated } -JavaVoidTypeNode >> voidToken [ - ^ voidToken -] - -{ #category : #generated } -JavaVoidTypeNode >> voidToken: aSmaCCToken [ - voidToken := aSmaCCToken -] diff --git a/src/SmaCC_Java/JavaWhileStatementNode.class.st b/src/SmaCC_Java/JavaWhileStatementNode.class.st deleted file mode 100644 index aa56f39b6..000000000 --- a/src/SmaCC_Java/JavaWhileStatementNode.class.st +++ /dev/null @@ -1,90 +0,0 @@ -Class { - #name : #JavaWhileStatementNode, - #superclass : #JavaStatementNode, - #instVars : [ - 'whileToken', - 'leftParen', - 'expression', - 'rightParen', - 'statement' - ], - #category : #'SmaCC_Java' -} - -{ #category : #generated } -JavaWhileStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitWhileStatement: self -] - -{ #category : #generated } -JavaWhileStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -JavaWhileStatementNode >> expression: aJavaExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJavaExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JavaWhileStatementNode >> ignoredTokenVariables [ - ^ #(#leftParen #rightParen) -] - -{ #category : #generated } -JavaWhileStatementNode >> leftParen [ - ^ leftParen -] - -{ #category : #generated } -JavaWhileStatementNode >> leftParen: aSmaCCToken [ - leftParen := aSmaCCToken -] - -{ #category : #generated } -JavaWhileStatementNode >> nodeVariables [ - ^ #(#expression #statement) -] - -{ #category : #generated } -JavaWhileStatementNode >> rightParen [ - ^ rightParen -] - -{ #category : #generated } -JavaWhileStatementNode >> rightParen: aSmaCCToken [ - rightParen := aSmaCCToken -] - -{ #category : #generated } -JavaWhileStatementNode >> statement [ - ^ statement -] - -{ #category : #generated } -JavaWhileStatementNode >> statement: aJavaStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aJavaStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -JavaWhileStatementNode >> tokenVariables [ - ^ #(#whileToken) -] - -{ #category : #generated } -JavaWhileStatementNode >> whileToken [ - ^ whileToken -] - -{ #category : #generated } -JavaWhileStatementNode >> whileToken: aSmaCCToken [ - whileToken := aSmaCCToken -] diff --git a/src/SmaCC_Java/package.st b/src/SmaCC_Java/package.st deleted file mode 100644 index 9098cbe00..000000000 --- a/src/SmaCC_Java/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_Java' } diff --git a/src/SmaCC_Javascript_Parser/JSArrayBindingPatternNode.class.st b/src/SmaCC_Javascript_Parser/JSArrayBindingPatternNode.class.st deleted file mode 100644 index c293e9919..000000000 --- a/src/SmaCC_Javascript_Parser/JSArrayBindingPatternNode.class.st +++ /dev/null @@ -1,100 +0,0 @@ -Class { - #name : #JSArrayBindingPatternNode, - #superclass : #JSProgramNode, - #instVars : [ - 'leftBracket', - 'commas', - 'restElement', - 'rightBracket', - 'elements' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSArrayBindingPatternNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitArrayBindingPattern: self -] - -{ #category : #generated } -JSArrayBindingPatternNode >> commas [ - ^ commas -] - -{ #category : #generated } -JSArrayBindingPatternNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JSArrayBindingPatternNode >> compositeNodeVariables [ - ^ #(#elements) -] - -{ #category : #generated } -JSArrayBindingPatternNode >> elements [ - ^ elements -] - -{ #category : #generated } -JSArrayBindingPatternNode >> elements: anOrderedCollection [ - self setParents: self elements to: nil. - elements := anOrderedCollection. - self setParents: self elements to: self -] - -{ #category : #generated } -JSArrayBindingPatternNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -JSArrayBindingPatternNode >> ignoredTokenVariables [ - ^ #(#leftBracket #rightBracket) -] - -{ #category : #'generated-initialize-release' } -JSArrayBindingPatternNode >> initialize [ - super initialize. - commas := OrderedCollection new: 2. - elements := OrderedCollection new: 2. -] - -{ #category : #generated } -JSArrayBindingPatternNode >> leftBracket [ - ^ leftBracket -] - -{ #category : #generated } -JSArrayBindingPatternNode >> leftBracket: aSmaCCToken [ - leftBracket := aSmaCCToken -] - -{ #category : #generated } -JSArrayBindingPatternNode >> nodeVariables [ - ^ #(#restElement) -] - -{ #category : #generated } -JSArrayBindingPatternNode >> restElement [ - ^ restElement -] - -{ #category : #generated } -JSArrayBindingPatternNode >> restElement: aJSRestVariableDeclarationNode [ - self restElement notNil - ifTrue: [ self restElement parent: nil ]. - restElement := aJSRestVariableDeclarationNode. - self restElement notNil - ifTrue: [ self restElement parent: self ] -] - -{ #category : #generated } -JSArrayBindingPatternNode >> rightBracket [ - ^ rightBracket -] - -{ #category : #generated } -JSArrayBindingPatternNode >> rightBracket: aSmaCCToken [ - rightBracket := aSmaCCToken -] diff --git a/src/SmaCC_Javascript_Parser/JSArrayLiteralNode.class.st b/src/SmaCC_Javascript_Parser/JSArrayLiteralNode.class.st deleted file mode 100644 index fbea9103a..000000000 --- a/src/SmaCC_Javascript_Parser/JSArrayLiteralNode.class.st +++ /dev/null @@ -1,80 +0,0 @@ -Class { - #name : #JSArrayLiteralNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'leftBracket', - 'commas', - 'rightBracket', - 'expressions' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSArrayLiteralNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitArrayLiteral: self -] - -{ #category : #generated } -JSArrayLiteralNode >> commas [ - ^ commas -] - -{ #category : #generated } -JSArrayLiteralNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JSArrayLiteralNode >> compositeNodeVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -JSArrayLiteralNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -JSArrayLiteralNode >> expressions: anOrderedCollection [ - self setParents: self expressions to: nil. - expressions := anOrderedCollection. - self setParents: self expressions to: self -] - -{ #category : #generated } -JSArrayLiteralNode >> ignoredCompositeTokenVariables [ - ^ #(#commas #leftParens #rightParens) -] - -{ #category : #generated } -JSArrayLiteralNode >> ignoredTokenVariables [ - ^ #(#leftBracket #rightBracket) -] - -{ #category : #'generated-initialize-release' } -JSArrayLiteralNode >> initialize [ - super initialize. - commas := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. -] - -{ #category : #generated } -JSArrayLiteralNode >> leftBracket [ - ^ leftBracket -] - -{ #category : #generated } -JSArrayLiteralNode >> leftBracket: aSmaCCToken [ - leftBracket := aSmaCCToken -] - -{ #category : #generated } -JSArrayLiteralNode >> rightBracket [ - ^ rightBracket -] - -{ #category : #generated } -JSArrayLiteralNode >> rightBracket: aSmaCCToken [ - rightBracket := aSmaCCToken -] diff --git a/src/SmaCC_Javascript_Parser/JSArrowFunctionNode.class.st b/src/SmaCC_Javascript_Parser/JSArrowFunctionNode.class.st deleted file mode 100644 index c93ef0c46..000000000 --- a/src/SmaCC_Javascript_Parser/JSArrowFunctionNode.class.st +++ /dev/null @@ -1,163 +0,0 @@ -Class { - #name : #JSArrowFunctionNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'parameters', - 'left', - 'commas', - 'right', - 'ellipsis', - 'varParameter', - 'arrow', - 'statements', - 'leftBracket', - 'rightBracket' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSArrowFunctionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitArrowFunction: self -] - -{ #category : #generated } -JSArrowFunctionNode >> arrow [ - ^ arrow -] - -{ #category : #generated } -JSArrowFunctionNode >> arrow: aSmaCCToken [ - arrow := aSmaCCToken -] - -{ #category : #generated } -JSArrowFunctionNode >> commas [ - ^ commas -] - -{ #category : #generated } -JSArrowFunctionNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JSArrowFunctionNode >> compositeNodeVariables [ - ^ #(#parameters #statements) -] - -{ #category : #generated } -JSArrowFunctionNode >> ellipsis [ - ^ ellipsis -] - -{ #category : #generated } -JSArrowFunctionNode >> ellipsis: aSmaCCToken [ - ellipsis := aSmaCCToken -] - -{ #category : #generated } -JSArrowFunctionNode >> ignoredCompositeTokenVariables [ - ^ #(#commas #leftParens #rightParens) -] - -{ #category : #generated } -JSArrowFunctionNode >> ignoredTokenVariables [ - ^ #(#left #right #leftBracket #rightBracket) -] - -{ #category : #'generated-initialize-release' } -JSArrowFunctionNode >> initialize [ - super initialize. - parameters := OrderedCollection new: 2. - commas := OrderedCollection new: 2. - statements := OrderedCollection new: 2. -] - -{ #category : #generated } -JSArrowFunctionNode >> left [ - ^ left -] - -{ #category : #generated } -JSArrowFunctionNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -JSArrowFunctionNode >> leftBracket [ - ^ leftBracket -] - -{ #category : #generated } -JSArrowFunctionNode >> leftBracket: aSmaCCToken [ - leftBracket := aSmaCCToken -] - -{ #category : #generated } -JSArrowFunctionNode >> nodeVariables [ - ^ #(#varParameter) -] - -{ #category : #generated } -JSArrowFunctionNode >> parameters [ - ^ parameters -] - -{ #category : #generated } -JSArrowFunctionNode >> parameters: anOrderedCollection [ - self setParents: self parameters to: nil. - parameters := anOrderedCollection. - self setParents: self parameters to: self -] - -{ #category : #generated } -JSArrowFunctionNode >> right [ - ^ right -] - -{ #category : #generated } -JSArrowFunctionNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -JSArrowFunctionNode >> rightBracket [ - ^ rightBracket -] - -{ #category : #generated } -JSArrowFunctionNode >> rightBracket: aSmaCCToken [ - rightBracket := aSmaCCToken -] - -{ #category : #generated } -JSArrowFunctionNode >> statements [ - ^ statements -] - -{ #category : #generated } -JSArrowFunctionNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] - -{ #category : #generated } -JSArrowFunctionNode >> tokenVariables [ - ^ #(#ellipsis #arrow) -] - -{ #category : #generated } -JSArrowFunctionNode >> varParameter [ - ^ varParameter -] - -{ #category : #generated } -JSArrowFunctionNode >> varParameter: aJSProgramNode [ - self varParameter notNil - ifTrue: [ self varParameter parent: nil ]. - varParameter := aJSProgramNode. - self varParameter notNil - ifTrue: [ self varParameter parent: self ] -] diff --git a/src/SmaCC_Javascript_Parser/JSAssignmentExpressionNode.class.st b/src/SmaCC_Javascript_Parser/JSAssignmentExpressionNode.class.st deleted file mode 100644 index af7fcb13c..000000000 --- a/src/SmaCC_Javascript_Parser/JSAssignmentExpressionNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #JSAssignmentExpressionNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'lhs', - 'operator', - 'rhs' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSAssignmentExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitAssignmentExpression: self -] - -{ #category : #generated } -JSAssignmentExpressionNode >> lhs [ - ^ lhs -] - -{ #category : #generated } -JSAssignmentExpressionNode >> lhs: aJSExpressionNode [ - self lhs notNil - ifTrue: [ self lhs parent: nil ]. - lhs := aJSExpressionNode. - self lhs notNil - ifTrue: [ self lhs parent: self ] -] - -{ #category : #generated } -JSAssignmentExpressionNode >> nodeVariables [ - ^ #(#lhs #rhs) -] - -{ #category : #generated } -JSAssignmentExpressionNode >> operator [ - ^ operator -] - -{ #category : #generated } -JSAssignmentExpressionNode >> operator: aSmaCCToken [ - operator := aSmaCCToken -] - -{ #category : #generated } -JSAssignmentExpressionNode >> rhs [ - ^ rhs -] - -{ #category : #generated } -JSAssignmentExpressionNode >> rhs: aJSExpressionNode [ - self rhs notNil - ifTrue: [ self rhs parent: nil ]. - rhs := aJSExpressionNode. - self rhs notNil - ifTrue: [ self rhs parent: self ] -] - -{ #category : #generated } -JSAssignmentExpressionNode >> tokenVariables [ - ^ #(#operator) -] diff --git a/src/SmaCC_Javascript_Parser/JSBinaryExpressionNode.class.st b/src/SmaCC_Javascript_Parser/JSBinaryExpressionNode.class.st deleted file mode 100644 index 35f4ad379..000000000 --- a/src/SmaCC_Javascript_Parser/JSBinaryExpressionNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #JSBinaryExpressionNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'leftExpression', - 'operator', - 'rightExpression' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSBinaryExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitBinaryExpression: self -] - -{ #category : #generated } -JSBinaryExpressionNode >> leftExpression [ - ^ leftExpression -] - -{ #category : #generated } -JSBinaryExpressionNode >> leftExpression: aJSExpressionNode [ - self leftExpression notNil - ifTrue: [ self leftExpression parent: nil ]. - leftExpression := aJSExpressionNode. - self leftExpression notNil - ifTrue: [ self leftExpression parent: self ] -] - -{ #category : #generated } -JSBinaryExpressionNode >> nodeVariables [ - ^ #(#leftExpression #rightExpression) -] - -{ #category : #generated } -JSBinaryExpressionNode >> operator [ - ^ operator -] - -{ #category : #generated } -JSBinaryExpressionNode >> operator: aSmaCCToken [ - operator := aSmaCCToken -] - -{ #category : #generated } -JSBinaryExpressionNode >> rightExpression [ - ^ rightExpression -] - -{ #category : #generated } -JSBinaryExpressionNode >> rightExpression: aJSExpressionNode [ - self rightExpression notNil - ifTrue: [ self rightExpression parent: nil ]. - rightExpression := aJSExpressionNode. - self rightExpression notNil - ifTrue: [ self rightExpression parent: self ] -] - -{ #category : #generated } -JSBinaryExpressionNode >> tokenVariables [ - ^ #(#operator) -] diff --git a/src/SmaCC_Javascript_Parser/JSBindingPropertyNode.class.st b/src/SmaCC_Javascript_Parser/JSBindingPropertyNode.class.st deleted file mode 100644 index f5af57600..000000000 --- a/src/SmaCC_Javascript_Parser/JSBindingPropertyNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #JSBindingPropertyNode, - #superclass : #JSProgramNode, - #instVars : [ - 'name', - 'colonToken', - 'element' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSBindingPropertyNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitBindingProperty: self -] - -{ #category : #generated } -JSBindingPropertyNode >> colonToken [ - ^ colonToken -] - -{ #category : #generated } -JSBindingPropertyNode >> colonToken: aSmaCCToken [ - colonToken := aSmaCCToken -] - -{ #category : #generated } -JSBindingPropertyNode >> element [ - ^ element -] - -{ #category : #generated } -JSBindingPropertyNode >> element: aJSVariableDeclarationNode [ - self element notNil - ifTrue: [ self element parent: nil ]. - element := aJSVariableDeclarationNode. - self element notNil - ifTrue: [ self element parent: self ] -] - -{ #category : #generated } -JSBindingPropertyNode >> ignoredTokenVariables [ - ^ #(#colonToken) -] - -{ #category : #generated } -JSBindingPropertyNode >> name [ - ^ name -] - -{ #category : #generated } -JSBindingPropertyNode >> name: aJSProgramNode [ - self name notNil - ifTrue: [ self name parent: nil ]. - name := aJSProgramNode. - self name notNil - ifTrue: [ self name parent: self ] -] - -{ #category : #generated } -JSBindingPropertyNode >> nodeVariables [ - ^ #(#name #element) -] diff --git a/src/SmaCC_Javascript_Parser/JSBlockStatementNode.class.st b/src/SmaCC_Javascript_Parser/JSBlockStatementNode.class.st deleted file mode 100644 index d4c1ae0aa..000000000 --- a/src/SmaCC_Javascript_Parser/JSBlockStatementNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #JSBlockStatementNode, - #superclass : #JSStatementNode, - #instVars : [ - 'leftBrace', - 'statements', - 'rightBrace' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSBlockStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitBlockStatement: self -] - -{ #category : #generated } -JSBlockStatementNode >> compositeNodeVariables [ - ^ #(#statements) -] - -{ #category : #generated } -JSBlockStatementNode >> ignoredTokenVariables [ - ^ #(#leftBrace #rightBrace) -] - -{ #category : #'generated-initialize-release' } -JSBlockStatementNode >> initialize [ - super initialize. - statements := OrderedCollection new: 2. -] - -{ #category : #generated } -JSBlockStatementNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -JSBlockStatementNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -JSBlockStatementNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -JSBlockStatementNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] - -{ #category : #generated } -JSBlockStatementNode >> statements [ - ^ statements -] - -{ #category : #generated } -JSBlockStatementNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] diff --git a/src/SmaCC_Javascript_Parser/JSBooleanLiteralNode.class.st b/src/SmaCC_Javascript_Parser/JSBooleanLiteralNode.class.st deleted file mode 100644 index 4a657b685..000000000 --- a/src/SmaCC_Javascript_Parser/JSBooleanLiteralNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #JSBooleanLiteralNode, - #superclass : #JSLiteralNode, - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSBooleanLiteralNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitBooleanLiteral: self -] diff --git a/src/SmaCC_Javascript_Parser/JSBreakStatementNode.class.st b/src/SmaCC_Javascript_Parser/JSBreakStatementNode.class.st deleted file mode 100644 index 9c40c6ed8..000000000 --- a/src/SmaCC_Javascript_Parser/JSBreakStatementNode.class.st +++ /dev/null @@ -1,64 +0,0 @@ -Class { - #name : #JSBreakStatementNode, - #superclass : #JSStatementNode, - #instVars : [ - 'breakToken', - 'label', - 'semicolon' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSBreakStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitBreakStatement: self -] - -{ #category : #generated } -JSBreakStatementNode >> breakToken [ - ^ breakToken -] - -{ #category : #generated } -JSBreakStatementNode >> breakToken: aSmaCCToken [ - breakToken := aSmaCCToken -] - -{ #category : #generated } -JSBreakStatementNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -JSBreakStatementNode >> label [ - ^ label -] - -{ #category : #generated } -JSBreakStatementNode >> label: aJSNameExpressionNode [ - self label notNil - ifTrue: [ self label parent: nil ]. - label := aJSNameExpressionNode. - self label notNil - ifTrue: [ self label parent: self ] -] - -{ #category : #generated } -JSBreakStatementNode >> nodeVariables [ - ^ #(#label) -] - -{ #category : #generated } -JSBreakStatementNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JSBreakStatementNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -JSBreakStatementNode >> tokenVariables [ - ^ #(#breakToken) -] diff --git a/src/SmaCC_Javascript_Parser/JSCallExpressionNode.class.st b/src/SmaCC_Javascript_Parser/JSCallExpressionNode.class.st deleted file mode 100644 index 9d00be93f..000000000 --- a/src/SmaCC_Javascript_Parser/JSCallExpressionNode.class.st +++ /dev/null @@ -1,131 +0,0 @@ -Class { - #name : #JSCallExpressionNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'expression', - 'left', - 'right', - 'arguments', - 'ellipsises', - 'varArguments', - 'commas' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSCallExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitCallExpression: self -] - -{ #category : #generated } -JSCallExpressionNode >> arguments [ - ^ arguments -] - -{ #category : #generated } -JSCallExpressionNode >> arguments: anOrderedCollection [ - self setParents: self arguments to: nil. - arguments := anOrderedCollection. - self setParents: self arguments to: self -] - -{ #category : #generated } -JSCallExpressionNode >> commas [ - ^ commas -] - -{ #category : #generated } -JSCallExpressionNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JSCallExpressionNode >> compositeNodeVariables [ - ^ #(#arguments #varArguments) -] - -{ #category : #generated } -JSCallExpressionNode >> compositeTokenVariables [ - ^ #(#ellipsises) -] - -{ #category : #generated } -JSCallExpressionNode >> ellipsises [ - ^ ellipsises -] - -{ #category : #generated } -JSCallExpressionNode >> ellipsises: anOrderedCollection [ - ellipsises := anOrderedCollection -] - -{ #category : #generated } -JSCallExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -JSCallExpressionNode >> expression: aJSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JSCallExpressionNode >> ignoredCompositeTokenVariables [ - ^ #(#commas #leftParens #rightParens) -] - -{ #category : #generated } -JSCallExpressionNode >> ignoredTokenVariables [ - ^ #(#left #right) -] - -{ #category : #'generated-initialize-release' } -JSCallExpressionNode >> initialize [ - super initialize. - arguments := OrderedCollection new: 2. - ellipsises := OrderedCollection new: 2. - varArguments := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -JSCallExpressionNode >> left [ - ^ left -] - -{ #category : #generated } -JSCallExpressionNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -JSCallExpressionNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -JSCallExpressionNode >> right [ - ^ right -] - -{ #category : #generated } -JSCallExpressionNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -JSCallExpressionNode >> varArguments [ - ^ varArguments -] - -{ #category : #generated } -JSCallExpressionNode >> varArguments: anOrderedCollection [ - self setParents: self varArguments to: nil. - varArguments := anOrderedCollection. - self setParents: self varArguments to: self -] diff --git a/src/SmaCC_Javascript_Parser/JSCaseClauseNode.class.st b/src/SmaCC_Javascript_Parser/JSCaseClauseNode.class.st deleted file mode 100644 index 702d0863f..000000000 --- a/src/SmaCC_Javascript_Parser/JSCaseClauseNode.class.st +++ /dev/null @@ -1,88 +0,0 @@ -Class { - #name : #JSCaseClauseNode, - #superclass : #JSProgramNode, - #instVars : [ - 'caseToken', - 'caseExpression', - 'colonToken', - 'statements' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSCaseClauseNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitCaseClause: self -] - -{ #category : #generated } -JSCaseClauseNode >> caseExpression [ - ^ caseExpression -] - -{ #category : #generated } -JSCaseClauseNode >> caseExpression: aJSExpressionNode [ - self caseExpression notNil - ifTrue: [ self caseExpression parent: nil ]. - caseExpression := aJSExpressionNode. - self caseExpression notNil - ifTrue: [ self caseExpression parent: self ] -] - -{ #category : #generated } -JSCaseClauseNode >> caseToken [ - ^ caseToken -] - -{ #category : #generated } -JSCaseClauseNode >> caseToken: aSmaCCToken [ - caseToken := aSmaCCToken -] - -{ #category : #generated } -JSCaseClauseNode >> colonToken [ - ^ colonToken -] - -{ #category : #generated } -JSCaseClauseNode >> colonToken: aSmaCCToken [ - colonToken := aSmaCCToken -] - -{ #category : #generated } -JSCaseClauseNode >> compositeNodeVariables [ - ^ #(#statements) -] - -{ #category : #generated } -JSCaseClauseNode >> ignoredTokenVariables [ - ^ #(#colonToken) -] - -{ #category : #'generated-initialize-release' } -JSCaseClauseNode >> initialize [ - super initialize. - statements := OrderedCollection new: 2. -] - -{ #category : #generated } -JSCaseClauseNode >> nodeVariables [ - ^ #(#caseExpression) -] - -{ #category : #generated } -JSCaseClauseNode >> statements [ - ^ statements -] - -{ #category : #generated } -JSCaseClauseNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] - -{ #category : #generated } -JSCaseClauseNode >> tokenVariables [ - ^ #(#caseToken) -] diff --git a/src/SmaCC_Javascript_Parser/JSClassExpressionNode.class.st b/src/SmaCC_Javascript_Parser/JSClassExpressionNode.class.st deleted file mode 100644 index 867fb60a5..000000000 --- a/src/SmaCC_Javascript_Parser/JSClassExpressionNode.class.st +++ /dev/null @@ -1,125 +0,0 @@ -Class { - #name : #JSClassExpressionNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'classToken', - 'name', - 'extendsToken', - 'superclass', - 'leftBrace', - 'elements', - 'rightBrace' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSClassExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitClassExpression: self -] - -{ #category : #generated } -JSClassExpressionNode >> classToken [ - ^ classToken -] - -{ #category : #generated } -JSClassExpressionNode >> classToken: aSmaCCToken [ - classToken := aSmaCCToken -] - -{ #category : #generated } -JSClassExpressionNode >> compositeNodeVariables [ - ^ #(#elements) -] - -{ #category : #generated } -JSClassExpressionNode >> elements [ - ^ elements -] - -{ #category : #generated } -JSClassExpressionNode >> elements: anOrderedCollection [ - self setParents: self elements to: nil. - elements := anOrderedCollection. - self setParents: self elements to: self -] - -{ #category : #generated } -JSClassExpressionNode >> extendsToken [ - ^ extendsToken -] - -{ #category : #generated } -JSClassExpressionNode >> extendsToken: aSmaCCToken [ - extendsToken := aSmaCCToken -] - -{ #category : #generated } -JSClassExpressionNode >> ignoredTokenVariables [ - ^ #(#leftBrace #rightBrace) -] - -{ #category : #'generated-initialize-release' } -JSClassExpressionNode >> initialize [ - super initialize. - elements := OrderedCollection new: 2. -] - -{ #category : #generated } -JSClassExpressionNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -JSClassExpressionNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -JSClassExpressionNode >> name [ - ^ name -] - -{ #category : #generated } -JSClassExpressionNode >> name: aJSNameExpressionNode [ - self name notNil - ifTrue: [ self name parent: nil ]. - name := aJSNameExpressionNode. - self name notNil - ifTrue: [ self name parent: self ] -] - -{ #category : #generated } -JSClassExpressionNode >> nodeVariables [ - ^ #(#name #superclass) -] - -{ #category : #generated } -JSClassExpressionNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -JSClassExpressionNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] - -{ #category : #generated } -JSClassExpressionNode >> superclass [ - ^ superclass -] - -{ #category : #generated } -JSClassExpressionNode >> superclass: aJSExpressionNode [ - self superclass notNil - ifTrue: [ self superclass parent: nil ]. - superclass := aJSExpressionNode. - self superclass notNil - ifTrue: [ self superclass parent: self ] -] - -{ #category : #generated } -JSClassExpressionNode >> tokenVariables [ - ^ #(#classToken #extendsToken) -] diff --git a/src/SmaCC_Javascript_Parser/JSCommaExpressionNode.class.st b/src/SmaCC_Javascript_Parser/JSCommaExpressionNode.class.st deleted file mode 100644 index 1a62af56a..000000000 --- a/src/SmaCC_Javascript_Parser/JSCommaExpressionNode.class.st +++ /dev/null @@ -1,52 +0,0 @@ -Class { - #name : #JSCommaExpressionNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'expressions', - 'comma' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSCommaExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitCommaExpression: self -] - -{ #category : #generated } -JSCommaExpressionNode >> comma [ - ^ comma -] - -{ #category : #generated } -JSCommaExpressionNode >> comma: aSmaCCToken [ - comma := aSmaCCToken -] - -{ #category : #generated } -JSCommaExpressionNode >> compositeNodeVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -JSCommaExpressionNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -JSCommaExpressionNode >> expressions: anOrderedCollection [ - self setParents: self expressions to: nil. - expressions := anOrderedCollection. - self setParents: self expressions to: self -] - -{ #category : #generated } -JSCommaExpressionNode >> ignoredTokenVariables [ - ^ #(#comma) -] - -{ #category : #'generated-initialize-release' } -JSCommaExpressionNode >> initialize [ - super initialize. - expressions := OrderedCollection new: 2. -] diff --git a/src/SmaCC_Javascript_Parser/JSComputedPropertyNameNode.class.st b/src/SmaCC_Javascript_Parser/JSComputedPropertyNameNode.class.st deleted file mode 100644 index 85cdd5668..000000000 --- a/src/SmaCC_Javascript_Parser/JSComputedPropertyNameNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #JSComputedPropertyNameNode, - #superclass : #JSProgramNode, - #instVars : [ - 'leftBrace', - 'expression', - 'rightBrace' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSComputedPropertyNameNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitComputedPropertyName: self -] - -{ #category : #generated } -JSComputedPropertyNameNode >> expression [ - ^ expression -] - -{ #category : #generated } -JSComputedPropertyNameNode >> expression: aJSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JSComputedPropertyNameNode >> ignoredTokenVariables [ - ^ #(#leftBrace #rightBrace) -] - -{ #category : #generated } -JSComputedPropertyNameNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -JSComputedPropertyNameNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -JSComputedPropertyNameNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -JSComputedPropertyNameNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -JSComputedPropertyNameNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] diff --git a/src/SmaCC_Javascript_Parser/JSConditionalExpressionNode.class.st b/src/SmaCC_Javascript_Parser/JSConditionalExpressionNode.class.st deleted file mode 100644 index be0c1fd90..000000000 --- a/src/SmaCC_Javascript_Parser/JSConditionalExpressionNode.class.st +++ /dev/null @@ -1,94 +0,0 @@ -Class { - #name : #JSConditionalExpressionNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'condition', - 'questionMarkToken', - 'trueExpression', - 'colonToken', - 'falseExpression' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSConditionalExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitConditionalExpression: self -] - -{ #category : #generated } -JSConditionalExpressionNode >> colonToken [ - ^ colonToken -] - -{ #category : #generated } -JSConditionalExpressionNode >> colonToken: aSmaCCToken [ - colonToken := aSmaCCToken -] - -{ #category : #generated } -JSConditionalExpressionNode >> condition [ - ^ condition -] - -{ #category : #generated } -JSConditionalExpressionNode >> condition: aJSExpressionNode [ - self condition notNil - ifTrue: [ self condition parent: nil ]. - condition := aJSExpressionNode. - self condition notNil - ifTrue: [ self condition parent: self ] -] - -{ #category : #generated } -JSConditionalExpressionNode >> falseExpression [ - ^ falseExpression -] - -{ #category : #generated } -JSConditionalExpressionNode >> falseExpression: aJSExpressionNode [ - self falseExpression notNil - ifTrue: [ self falseExpression parent: nil ]. - falseExpression := aJSExpressionNode. - self falseExpression notNil - ifTrue: [ self falseExpression parent: self ] -] - -{ #category : #generated } -JSConditionalExpressionNode >> ignoredTokenVariables [ - ^ #(#colonToken) -] - -{ #category : #generated } -JSConditionalExpressionNode >> nodeVariables [ - ^ #(#condition #trueExpression #falseExpression) -] - -{ #category : #generated } -JSConditionalExpressionNode >> questionMarkToken [ - ^ questionMarkToken -] - -{ #category : #generated } -JSConditionalExpressionNode >> questionMarkToken: aSmaCCToken [ - questionMarkToken := aSmaCCToken -] - -{ #category : #generated } -JSConditionalExpressionNode >> tokenVariables [ - ^ #(#questionMarkToken) -] - -{ #category : #generated } -JSConditionalExpressionNode >> trueExpression [ - ^ trueExpression -] - -{ #category : #generated } -JSConditionalExpressionNode >> trueExpression: aJSExpressionNode [ - self trueExpression notNil - ifTrue: [ self trueExpression parent: nil ]. - trueExpression := aJSExpressionNode. - self trueExpression notNil - ifTrue: [ self trueExpression parent: self ] -] diff --git a/src/SmaCC_Javascript_Parser/JSContinueStatementNode.class.st b/src/SmaCC_Javascript_Parser/JSContinueStatementNode.class.st deleted file mode 100644 index f83880270..000000000 --- a/src/SmaCC_Javascript_Parser/JSContinueStatementNode.class.st +++ /dev/null @@ -1,64 +0,0 @@ -Class { - #name : #JSContinueStatementNode, - #superclass : #JSStatementNode, - #instVars : [ - 'continueToken', - 'label', - 'semicolon' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSContinueStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitContinueStatement: self -] - -{ #category : #generated } -JSContinueStatementNode >> continueToken [ - ^ continueToken -] - -{ #category : #generated } -JSContinueStatementNode >> continueToken: aSmaCCToken [ - continueToken := aSmaCCToken -] - -{ #category : #generated } -JSContinueStatementNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -JSContinueStatementNode >> label [ - ^ label -] - -{ #category : #generated } -JSContinueStatementNode >> label: aJSNameExpressionNode [ - self label notNil - ifTrue: [ self label parent: nil ]. - label := aJSNameExpressionNode. - self label notNil - ifTrue: [ self label parent: self ] -] - -{ #category : #generated } -JSContinueStatementNode >> nodeVariables [ - ^ #(#label) -] - -{ #category : #generated } -JSContinueStatementNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JSContinueStatementNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -JSContinueStatementNode >> tokenVariables [ - ^ #(#continueToken) -] diff --git a/src/SmaCC_Javascript_Parser/JSDebuggerStatementNode.class.st b/src/SmaCC_Javascript_Parser/JSDebuggerStatementNode.class.st deleted file mode 100644 index 7d6407092..000000000 --- a/src/SmaCC_Javascript_Parser/JSDebuggerStatementNode.class.st +++ /dev/null @@ -1,44 +0,0 @@ -Class { - #name : #JSDebuggerStatementNode, - #superclass : #JSStatementNode, - #instVars : [ - 'debuggerToken', - 'semicolon' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSDebuggerStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitDebuggerStatement: self -] - -{ #category : #generated } -JSDebuggerStatementNode >> debuggerToken [ - ^ debuggerToken -] - -{ #category : #generated } -JSDebuggerStatementNode >> debuggerToken: aSmaCCToken [ - debuggerToken := aSmaCCToken -] - -{ #category : #generated } -JSDebuggerStatementNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -JSDebuggerStatementNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JSDebuggerStatementNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -JSDebuggerStatementNode >> tokenVariables [ - ^ #(#debuggerToken) -] diff --git a/src/SmaCC_Javascript_Parser/JSDefaultClauseNode.class.st b/src/SmaCC_Javascript_Parser/JSDefaultClauseNode.class.st deleted file mode 100644 index 1a9e6f6b9..000000000 --- a/src/SmaCC_Javascript_Parser/JSDefaultClauseNode.class.st +++ /dev/null @@ -1,68 +0,0 @@ -Class { - #name : #JSDefaultClauseNode, - #superclass : #JSProgramNode, - #instVars : [ - 'defaultToken', - 'colonToken', - 'statements' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSDefaultClauseNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitDefaultClause: self -] - -{ #category : #generated } -JSDefaultClauseNode >> colonToken [ - ^ colonToken -] - -{ #category : #generated } -JSDefaultClauseNode >> colonToken: aSmaCCToken [ - colonToken := aSmaCCToken -] - -{ #category : #generated } -JSDefaultClauseNode >> compositeNodeVariables [ - ^ #(#statements) -] - -{ #category : #generated } -JSDefaultClauseNode >> defaultToken [ - ^ defaultToken -] - -{ #category : #generated } -JSDefaultClauseNode >> defaultToken: aSmaCCToken [ - defaultToken := aSmaCCToken -] - -{ #category : #generated } -JSDefaultClauseNode >> ignoredTokenVariables [ - ^ #(#colonToken) -] - -{ #category : #'generated-initialize-release' } -JSDefaultClauseNode >> initialize [ - super initialize. - statements := OrderedCollection new: 2. -] - -{ #category : #generated } -JSDefaultClauseNode >> statements [ - ^ statements -] - -{ #category : #generated } -JSDefaultClauseNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] - -{ #category : #generated } -JSDefaultClauseNode >> tokenVariables [ - ^ #(#defaultToken) -] diff --git a/src/SmaCC_Javascript_Parser/JSDoWhileStatementNode.class.st b/src/SmaCC_Javascript_Parser/JSDoWhileStatementNode.class.st deleted file mode 100644 index 6e7277888..000000000 --- a/src/SmaCC_Javascript_Parser/JSDoWhileStatementNode.class.st +++ /dev/null @@ -1,112 +0,0 @@ -Class { - #name : #JSDoWhileStatementNode, - #superclass : #JSStatementNode, - #instVars : [ - 'doToken', - 'statement', - 'whileToken', - 'left', - 'expression', - 'right', - 'semicolon' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSDoWhileStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitDoWhileStatement: self -] - -{ #category : #generated } -JSDoWhileStatementNode >> doToken [ - ^ doToken -] - -{ #category : #generated } -JSDoWhileStatementNode >> doToken: aSmaCCToken [ - doToken := aSmaCCToken -] - -{ #category : #generated } -JSDoWhileStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -JSDoWhileStatementNode >> expression: aJSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JSDoWhileStatementNode >> ignoredTokenVariables [ - ^ #(#left #right #semicolon) -] - -{ #category : #generated } -JSDoWhileStatementNode >> left [ - ^ left -] - -{ #category : #generated } -JSDoWhileStatementNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -JSDoWhileStatementNode >> nodeVariables [ - ^ #(#statement #expression) -] - -{ #category : #generated } -JSDoWhileStatementNode >> right [ - ^ right -] - -{ #category : #generated } -JSDoWhileStatementNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -JSDoWhileStatementNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JSDoWhileStatementNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -JSDoWhileStatementNode >> statement [ - ^ statement -] - -{ #category : #generated } -JSDoWhileStatementNode >> statement: aJSStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aJSStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -JSDoWhileStatementNode >> tokenVariables [ - ^ #(#doToken #whileToken) -] - -{ #category : #generated } -JSDoWhileStatementNode >> whileToken [ - ^ whileToken -] - -{ #category : #generated } -JSDoWhileStatementNode >> whileToken: aSmaCCToken [ - whileToken := aSmaCCToken -] diff --git a/src/SmaCC_Javascript_Parser/JSEmptyStatementNode.class.st b/src/SmaCC_Javascript_Parser/JSEmptyStatementNode.class.st deleted file mode 100644 index b31c02903..000000000 --- a/src/SmaCC_Javascript_Parser/JSEmptyStatementNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JSEmptyStatementNode, - #superclass : #JSStatementNode, - #instVars : [ - 'semicolon' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSEmptyStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitEmptyStatement: self -] - -{ #category : #generated } -JSEmptyStatementNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -JSEmptyStatementNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JSEmptyStatementNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] diff --git a/src/SmaCC_Javascript_Parser/JSExportDeclarationNode.class.st b/src/SmaCC_Javascript_Parser/JSExportDeclarationNode.class.st deleted file mode 100644 index 81b67d54c..000000000 --- a/src/SmaCC_Javascript_Parser/JSExportDeclarationNode.class.st +++ /dev/null @@ -1,186 +0,0 @@ -Class { - #name : #JSExportDeclarationNode, - #superclass : #JSProgramNode, - #instVars : [ - 'exportToken', - 'star', - 'fromToken', - 'from', - 'semicolon', - 'leftBrace', - 'rightBrace', - 'specifiers', - 'commas', - 'statement', - 'declaration', - 'defaultToken' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSExportDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitExportDeclaration: self -] - -{ #category : #generated } -JSExportDeclarationNode >> commas [ - ^ commas -] - -{ #category : #generated } -JSExportDeclarationNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JSExportDeclarationNode >> compositeNodeVariables [ - ^ #(#specifiers) -] - -{ #category : #generated } -JSExportDeclarationNode >> declaration [ - ^ declaration -] - -{ #category : #generated } -JSExportDeclarationNode >> declaration: aJSProgramNode [ - self declaration notNil - ifTrue: [ self declaration parent: nil ]. - declaration := aJSProgramNode. - self declaration notNil - ifTrue: [ self declaration parent: self ] -] - -{ #category : #generated } -JSExportDeclarationNode >> defaultToken [ - ^ defaultToken -] - -{ #category : #generated } -JSExportDeclarationNode >> defaultToken: aSmaCCToken [ - defaultToken := aSmaCCToken -] - -{ #category : #generated } -JSExportDeclarationNode >> exportToken [ - ^ exportToken -] - -{ #category : #generated } -JSExportDeclarationNode >> exportToken: aSmaCCToken [ - exportToken := aSmaCCToken -] - -{ #category : #generated } -JSExportDeclarationNode >> from [ - ^ from -] - -{ #category : #generated } -JSExportDeclarationNode >> from: aSmaCCToken [ - from := aSmaCCToken -] - -{ #category : #generated } -JSExportDeclarationNode >> fromToken [ - ^ fromToken -] - -{ #category : #generated } -JSExportDeclarationNode >> fromToken: aSmaCCToken [ - fromToken := aSmaCCToken -] - -{ #category : #generated } -JSExportDeclarationNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -JSExportDeclarationNode >> ignoredTokenVariables [ - ^ #(#semicolon #leftBrace #rightBrace) -] - -{ #category : #'generated-initialize-release' } -JSExportDeclarationNode >> initialize [ - super initialize. - specifiers := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -JSExportDeclarationNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -JSExportDeclarationNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -JSExportDeclarationNode >> nodeVariables [ - ^ #(#statement #declaration) -] - -{ #category : #generated } -JSExportDeclarationNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -JSExportDeclarationNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] - -{ #category : #generated } -JSExportDeclarationNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JSExportDeclarationNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -JSExportDeclarationNode >> specifiers [ - ^ specifiers -] - -{ #category : #generated } -JSExportDeclarationNode >> specifiers: anOrderedCollection [ - self setParents: self specifiers to: nil. - specifiers := anOrderedCollection. - self setParents: self specifiers to: self -] - -{ #category : #generated } -JSExportDeclarationNode >> star [ - ^ star -] - -{ #category : #generated } -JSExportDeclarationNode >> star: aSmaCCToken [ - star := aSmaCCToken -] - -{ #category : #generated } -JSExportDeclarationNode >> statement [ - ^ statement -] - -{ #category : #generated } -JSExportDeclarationNode >> statement: aJSProgramNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aJSProgramNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -JSExportDeclarationNode >> tokenVariables [ - ^ #(#exportToken #star #fromToken #from #defaultToken) -] diff --git a/src/SmaCC_Javascript_Parser/JSExportSpecifierNode.class.st b/src/SmaCC_Javascript_Parser/JSExportSpecifierNode.class.st deleted file mode 100644 index bb5b82ad6..000000000 --- a/src/SmaCC_Javascript_Parser/JSExportSpecifierNode.class.st +++ /dev/null @@ -1,50 +0,0 @@ -Class { - #name : #JSExportSpecifierNode, - #superclass : #JSProgramNode, - #instVars : [ - 'name', - 'asToken', - '_as' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSExportSpecifierNode >> _as [ - ^ _as -] - -{ #category : #generated } -JSExportSpecifierNode >> _as: aSmaCCToken [ - _as := aSmaCCToken -] - -{ #category : #generated } -JSExportSpecifierNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitExportSpecifier: self -] - -{ #category : #generated } -JSExportSpecifierNode >> asToken [ - ^ asToken -] - -{ #category : #generated } -JSExportSpecifierNode >> asToken: aSmaCCToken [ - asToken := aSmaCCToken -] - -{ #category : #generated } -JSExportSpecifierNode >> name [ - ^ name -] - -{ #category : #generated } -JSExportSpecifierNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -JSExportSpecifierNode >> tokenVariables [ - ^ #(#name #asToken #_as) -] diff --git a/src/SmaCC_Javascript_Parser/JSExpressionNode.class.st b/src/SmaCC_Javascript_Parser/JSExpressionNode.class.st deleted file mode 100644 index b8d9f5846..000000000 --- a/src/SmaCC_Javascript_Parser/JSExpressionNode.class.st +++ /dev/null @@ -1,46 +0,0 @@ -Class { - #name : #JSExpressionNode, - #superclass : #JSProgramNode, - #instVars : [ - 'leftParens', - 'rightParens' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitExpression: self -] - -{ #category : #generated } -JSExpressionNode >> ignoredCompositeTokenVariables [ - ^ #(#leftParens #rightParens) -] - -{ #category : #'generated-initialize-release' } -JSExpressionNode >> initialize [ - super initialize. - leftParens := OrderedCollection new: 2. - rightParens := OrderedCollection new: 2. -] - -{ #category : #generated } -JSExpressionNode >> leftParens [ - ^ leftParens -] - -{ #category : #generated } -JSExpressionNode >> leftParens: anOrderedCollection [ - leftParens := anOrderedCollection -] - -{ #category : #generated } -JSExpressionNode >> rightParens [ - ^ rightParens -] - -{ #category : #generated } -JSExpressionNode >> rightParens: anOrderedCollection [ - rightParens := anOrderedCollection -] diff --git a/src/SmaCC_Javascript_Parser/JSExpressionStatementNode.class.st b/src/SmaCC_Javascript_Parser/JSExpressionStatementNode.class.st deleted file mode 100644 index 49c02353e..000000000 --- a/src/SmaCC_Javascript_Parser/JSExpressionStatementNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #JSExpressionStatementNode, - #superclass : #JSStatementNode, - #instVars : [ - 'expression', - 'semicolon' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSExpressionStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitExpressionStatement: self -] - -{ #category : #generated } -JSExpressionStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -JSExpressionStatementNode >> expression: aJSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JSExpressionStatementNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -JSExpressionStatementNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -JSExpressionStatementNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JSExpressionStatementNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] diff --git a/src/SmaCC_Javascript_Parser/JSForInStatementNode.class.st b/src/SmaCC_Javascript_Parser/JSForInStatementNode.class.st deleted file mode 100644 index a92d2452e..000000000 --- a/src/SmaCC_Javascript_Parser/JSForInStatementNode.class.st +++ /dev/null @@ -1,127 +0,0 @@ -Class { - #name : #JSForInStatementNode, - #superclass : #JSStatementNode, - #instVars : [ - 'forToken', - 'left', - 'variable', - 'inToken', - 'expression', - 'right', - 'statement', - 'varToken' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSForInStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitForInStatement: self -] - -{ #category : #generated } -JSForInStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -JSForInStatementNode >> expression: aJSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JSForInStatementNode >> forToken [ - ^ forToken -] - -{ #category : #generated } -JSForInStatementNode >> forToken: aSmaCCToken [ - forToken := aSmaCCToken -] - -{ #category : #generated } -JSForInStatementNode >> ignoredTokenVariables [ - ^ #(#left #right) -] - -{ #category : #generated } -JSForInStatementNode >> inToken [ - ^ inToken -] - -{ #category : #generated } -JSForInStatementNode >> inToken: aSmaCCToken [ - inToken := aSmaCCToken -] - -{ #category : #generated } -JSForInStatementNode >> left [ - ^ left -] - -{ #category : #generated } -JSForInStatementNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -JSForInStatementNode >> nodeVariables [ - ^ #(#variable #expression #statement) -] - -{ #category : #generated } -JSForInStatementNode >> right [ - ^ right -] - -{ #category : #generated } -JSForInStatementNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -JSForInStatementNode >> statement [ - ^ statement -] - -{ #category : #generated } -JSForInStatementNode >> statement: aJSStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aJSStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -JSForInStatementNode >> tokenVariables [ - ^ #(#forToken #inToken #varToken) -] - -{ #category : #generated } -JSForInStatementNode >> varToken [ - ^ varToken -] - -{ #category : #generated } -JSForInStatementNode >> varToken: aSmaCCToken [ - varToken := aSmaCCToken -] - -{ #category : #generated } -JSForInStatementNode >> variable [ - ^ variable -] - -{ #category : #generated } -JSForInStatementNode >> variable: aJSProgramNode [ - self variable notNil - ifTrue: [ self variable parent: nil ]. - variable := aJSProgramNode. - self variable notNil - ifTrue: [ self variable parent: self ] -] diff --git a/src/SmaCC_Javascript_Parser/JSForOfStatementNode.class.st b/src/SmaCC_Javascript_Parser/JSForOfStatementNode.class.st deleted file mode 100644 index a133e2454..000000000 --- a/src/SmaCC_Javascript_Parser/JSForOfStatementNode.class.st +++ /dev/null @@ -1,127 +0,0 @@ -Class { - #name : #JSForOfStatementNode, - #superclass : #JSStatementNode, - #instVars : [ - 'forToken', - 'left', - 'variable', - 'ofToken', - 'expression', - 'right', - 'statement', - 'varToken' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSForOfStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitForOfStatement: self -] - -{ #category : #generated } -JSForOfStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -JSForOfStatementNode >> expression: aJSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JSForOfStatementNode >> forToken [ - ^ forToken -] - -{ #category : #generated } -JSForOfStatementNode >> forToken: aSmaCCToken [ - forToken := aSmaCCToken -] - -{ #category : #generated } -JSForOfStatementNode >> ignoredTokenVariables [ - ^ #(#left #right) -] - -{ #category : #generated } -JSForOfStatementNode >> left [ - ^ left -] - -{ #category : #generated } -JSForOfStatementNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -JSForOfStatementNode >> nodeVariables [ - ^ #(#variable #expression #statement) -] - -{ #category : #generated } -JSForOfStatementNode >> ofToken [ - ^ ofToken -] - -{ #category : #generated } -JSForOfStatementNode >> ofToken: aSmaCCToken [ - ofToken := aSmaCCToken -] - -{ #category : #generated } -JSForOfStatementNode >> right [ - ^ right -] - -{ #category : #generated } -JSForOfStatementNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -JSForOfStatementNode >> statement [ - ^ statement -] - -{ #category : #generated } -JSForOfStatementNode >> statement: aJSStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aJSStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -JSForOfStatementNode >> tokenVariables [ - ^ #(#forToken #ofToken #varToken) -] - -{ #category : #generated } -JSForOfStatementNode >> varToken [ - ^ varToken -] - -{ #category : #generated } -JSForOfStatementNode >> varToken: aSmaCCToken [ - varToken := aSmaCCToken -] - -{ #category : #generated } -JSForOfStatementNode >> variable [ - ^ variable -] - -{ #category : #generated } -JSForOfStatementNode >> variable: aJSProgramNode [ - self variable notNil - ifTrue: [ self variable parent: nil ]. - variable := aJSProgramNode. - self variable notNil - ifTrue: [ self variable parent: self ] -] diff --git a/src/SmaCC_Javascript_Parser/JSForStatementNode.class.st b/src/SmaCC_Javascript_Parser/JSForStatementNode.class.st deleted file mode 100644 index 0d200bd91..000000000 --- a/src/SmaCC_Javascript_Parser/JSForStatementNode.class.st +++ /dev/null @@ -1,199 +0,0 @@ -Class { - #name : #JSForStatementNode, - #superclass : #JSStatementNode, - #instVars : [ - 'forToken', - 'left', - 'initialExpression', - 'semicolons', - 'condition', - 'iteratorExpression', - 'right', - 'statement', - 'varToken', - 'variables', - 'commas', - 'declaration' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSForStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitForStatement: self -] - -{ #category : #generated } -JSForStatementNode >> commas [ - ^ commas -] - -{ #category : #generated } -JSForStatementNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JSForStatementNode >> compositeNodeVariables [ - ^ #(#variables) -] - -{ #category : #generated } -JSForStatementNode >> condition [ - ^ condition -] - -{ #category : #generated } -JSForStatementNode >> condition: aJSExpressionNode [ - self condition notNil - ifTrue: [ self condition parent: nil ]. - condition := aJSExpressionNode. - self condition notNil - ifTrue: [ self condition parent: self ] -] - -{ #category : #generated } -JSForStatementNode >> declaration [ - ^ declaration -] - -{ #category : #generated } -JSForStatementNode >> declaration: aJSLexicalDeclarationNode [ - self declaration notNil - ifTrue: [ self declaration parent: nil ]. - declaration := aJSLexicalDeclarationNode. - self declaration notNil - ifTrue: [ self declaration parent: self ] -] - -{ #category : #generated } -JSForStatementNode >> forToken [ - ^ forToken -] - -{ #category : #generated } -JSForStatementNode >> forToken: aSmaCCToken [ - forToken := aSmaCCToken -] - -{ #category : #generated } -JSForStatementNode >> ignoredCompositeTokenVariables [ - ^ #(#semicolons #commas) -] - -{ #category : #generated } -JSForStatementNode >> ignoredTokenVariables [ - ^ #(#left #right) -] - -{ #category : #generated } -JSForStatementNode >> initialExpression [ - ^ initialExpression -] - -{ #category : #generated } -JSForStatementNode >> initialExpression: aJSExpressionNode [ - self initialExpression notNil - ifTrue: [ self initialExpression parent: nil ]. - initialExpression := aJSExpressionNode. - self initialExpression notNil - ifTrue: [ self initialExpression parent: self ] -] - -{ #category : #'generated-initialize-release' } -JSForStatementNode >> initialize [ - super initialize. - semicolons := OrderedCollection new: 2. - variables := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -JSForStatementNode >> iteratorExpression [ - ^ iteratorExpression -] - -{ #category : #generated } -JSForStatementNode >> iteratorExpression: aJSExpressionNode [ - self iteratorExpression notNil - ifTrue: [ self iteratorExpression parent: nil ]. - iteratorExpression := aJSExpressionNode. - self iteratorExpression notNil - ifTrue: [ self iteratorExpression parent: self ] -] - -{ #category : #generated } -JSForStatementNode >> left [ - ^ left -] - -{ #category : #generated } -JSForStatementNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -JSForStatementNode >> nodeVariables [ - ^ #(#initialExpression #condition #iteratorExpression #statement #declaration) -] - -{ #category : #generated } -JSForStatementNode >> right [ - ^ right -] - -{ #category : #generated } -JSForStatementNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -JSForStatementNode >> semicolons [ - ^ semicolons -] - -{ #category : #generated } -JSForStatementNode >> semicolons: anOrderedCollection [ - semicolons := anOrderedCollection -] - -{ #category : #generated } -JSForStatementNode >> statement [ - ^ statement -] - -{ #category : #generated } -JSForStatementNode >> statement: aJSStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aJSStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -JSForStatementNode >> tokenVariables [ - ^ #(#forToken #varToken) -] - -{ #category : #generated } -JSForStatementNode >> varToken [ - ^ varToken -] - -{ #category : #generated } -JSForStatementNode >> varToken: aSmaCCToken [ - varToken := aSmaCCToken -] - -{ #category : #generated } -JSForStatementNode >> variables [ - ^ variables -] - -{ #category : #generated } -JSForStatementNode >> variables: anOrderedCollection [ - self setParents: self variables to: nil. - variables := anOrderedCollection. - self setParents: self variables to: self -] diff --git a/src/SmaCC_Javascript_Parser/JSFunctionNode.class.st b/src/SmaCC_Javascript_Parser/JSFunctionNode.class.st deleted file mode 100644 index e8888a30e..000000000 --- a/src/SmaCC_Javascript_Parser/JSFunctionNode.class.st +++ /dev/null @@ -1,167 +0,0 @@ -Class { - #name : #JSFunctionNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'functionToken', - 'name', - 'left', - 'restParameter', - 'parameters', - 'commas', - 'right', - 'leftBrace', - 'statements', - 'rightBrace' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSFunctionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitFunction: self -] - -{ #category : #generated } -JSFunctionNode >> commas [ - ^ commas -] - -{ #category : #generated } -JSFunctionNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JSFunctionNode >> compositeNodeVariables [ - ^ #(#parameters #statements) -] - -{ #category : #generated } -JSFunctionNode >> functionToken [ - ^ functionToken -] - -{ #category : #generated } -JSFunctionNode >> functionToken: aSmaCCToken [ - functionToken := aSmaCCToken -] - -{ #category : #generated } -JSFunctionNode >> ignoredCompositeTokenVariables [ - ^ #(#commas #leftParens #rightParens) -] - -{ #category : #generated } -JSFunctionNode >> ignoredTokenVariables [ - ^ #(#left #right #leftBrace #rightBrace) -] - -{ #category : #'generated-initialize-release' } -JSFunctionNode >> initialize [ - super initialize. - parameters := OrderedCollection new: 2. - commas := OrderedCollection new: 2. - statements := OrderedCollection new: 2. -] - -{ #category : #generated } -JSFunctionNode >> left [ - ^ left -] - -{ #category : #generated } -JSFunctionNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -JSFunctionNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -JSFunctionNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -JSFunctionNode >> name [ - ^ name -] - -{ #category : #generated } -JSFunctionNode >> name: aJSNameExpressionNode [ - self name notNil - ifTrue: [ self name parent: nil ]. - name := aJSNameExpressionNode. - self name notNil - ifTrue: [ self name parent: self ] -] - -{ #category : #generated } -JSFunctionNode >> nodeVariables [ - ^ #(#name #restParameter) -] - -{ #category : #generated } -JSFunctionNode >> parameters [ - ^ parameters -] - -{ #category : #generated } -JSFunctionNode >> parameters: anOrderedCollection [ - self setParents: self parameters to: nil. - parameters := anOrderedCollection. - self setParents: self parameters to: self -] - -{ #category : #generated } -JSFunctionNode >> restParameter [ - ^ restParameter -] - -{ #category : #generated } -JSFunctionNode >> restParameter: aJSRestVariableDeclarationNode [ - self restParameter notNil - ifTrue: [ self restParameter parent: nil ]. - restParameter := aJSRestVariableDeclarationNode. - self restParameter notNil - ifTrue: [ self restParameter parent: self ] -] - -{ #category : #generated } -JSFunctionNode >> right [ - ^ right -] - -{ #category : #generated } -JSFunctionNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -JSFunctionNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -JSFunctionNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] - -{ #category : #generated } -JSFunctionNode >> statements [ - ^ statements -] - -{ #category : #generated } -JSFunctionNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] - -{ #category : #generated } -JSFunctionNode >> tokenVariables [ - ^ #(#functionToken) -] diff --git a/src/SmaCC_Javascript_Parser/JSGeneratorFunctionNode.class.st b/src/SmaCC_Javascript_Parser/JSGeneratorFunctionNode.class.st deleted file mode 100644 index c63a31a99..000000000 --- a/src/SmaCC_Javascript_Parser/JSGeneratorFunctionNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JSGeneratorFunctionNode, - #superclass : #JSFunctionNode, - #instVars : [ - 'star' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSGeneratorFunctionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitGeneratorFunction: self -] - -{ #category : #generated } -JSGeneratorFunctionNode >> star [ - ^ star -] - -{ #category : #generated } -JSGeneratorFunctionNode >> star: aSmaCCToken [ - star := aSmaCCToken -] - -{ #category : #generated } -JSGeneratorFunctionNode >> tokenVariables [ - ^ #(#star #functionToken) -] diff --git a/src/SmaCC_Javascript_Parser/JSGeneratorMethodDefinitionNode.class.st b/src/SmaCC_Javascript_Parser/JSGeneratorMethodDefinitionNode.class.st deleted file mode 100644 index 9ddde0fda..000000000 --- a/src/SmaCC_Javascript_Parser/JSGeneratorMethodDefinitionNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JSGeneratorMethodDefinitionNode, - #superclass : #JSMethodDefinitionNode, - #instVars : [ - 'star' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSGeneratorMethodDefinitionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitGeneratorMethodDefinition: self -] - -{ #category : #generated } -JSGeneratorMethodDefinitionNode >> star [ - ^ star -] - -{ #category : #generated } -JSGeneratorMethodDefinitionNode >> star: aSmaCCToken [ - star := aSmaCCToken -] - -{ #category : #generated } -JSGeneratorMethodDefinitionNode >> tokenVariables [ - ^ #(#star) -] diff --git a/src/SmaCC_Javascript_Parser/JSGetMethodDefinitionNode.class.st b/src/SmaCC_Javascript_Parser/JSGetMethodDefinitionNode.class.st deleted file mode 100644 index e6dd7768d..000000000 --- a/src/SmaCC_Javascript_Parser/JSGetMethodDefinitionNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JSGetMethodDefinitionNode, - #superclass : #JSMethodDefinitionNode, - #instVars : [ - 'getToken' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSGetMethodDefinitionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitGetMethodDefinition: self -] - -{ #category : #generated } -JSGetMethodDefinitionNode >> getToken [ - ^ getToken -] - -{ #category : #generated } -JSGetMethodDefinitionNode >> getToken: aSmaCCToken [ - getToken := aSmaCCToken -] - -{ #category : #generated } -JSGetMethodDefinitionNode >> tokenVariables [ - ^ #(#getToken) -] diff --git a/src/SmaCC_Javascript_Parser/JSIfStatementNode.class.st b/src/SmaCC_Javascript_Parser/JSIfStatementNode.class.st deleted file mode 100644 index 9a05ecac6..000000000 --- a/src/SmaCC_Javascript_Parser/JSIfStatementNode.class.st +++ /dev/null @@ -1,116 +0,0 @@ -Class { - #name : #JSIfStatementNode, - #superclass : #JSStatementNode, - #instVars : [ - 'ifToken', - 'left', - 'expression', - 'right', - 'trueStatement', - 'elseToken', - 'elseStatement' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSIfStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitIfStatement: self -] - -{ #category : #generated } -JSIfStatementNode >> elseStatement [ - ^ elseStatement -] - -{ #category : #generated } -JSIfStatementNode >> elseStatement: aJSStatementNode [ - self elseStatement notNil - ifTrue: [ self elseStatement parent: nil ]. - elseStatement := aJSStatementNode. - self elseStatement notNil - ifTrue: [ self elseStatement parent: self ] -] - -{ #category : #generated } -JSIfStatementNode >> elseToken [ - ^ elseToken -] - -{ #category : #generated } -JSIfStatementNode >> elseToken: aSmaCCToken [ - elseToken := aSmaCCToken -] - -{ #category : #generated } -JSIfStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -JSIfStatementNode >> expression: aJSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JSIfStatementNode >> ifToken [ - ^ ifToken -] - -{ #category : #generated } -JSIfStatementNode >> ifToken: aSmaCCToken [ - ifToken := aSmaCCToken -] - -{ #category : #generated } -JSIfStatementNode >> ignoredTokenVariables [ - ^ #(#left #right) -] - -{ #category : #generated } -JSIfStatementNode >> left [ - ^ left -] - -{ #category : #generated } -JSIfStatementNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -JSIfStatementNode >> nodeVariables [ - ^ #(#expression #trueStatement #elseStatement) -] - -{ #category : #generated } -JSIfStatementNode >> right [ - ^ right -] - -{ #category : #generated } -JSIfStatementNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -JSIfStatementNode >> tokenVariables [ - ^ #(#ifToken #elseToken) -] - -{ #category : #generated } -JSIfStatementNode >> trueStatement [ - ^ trueStatement -] - -{ #category : #generated } -JSIfStatementNode >> trueStatement: aJSStatementNode [ - self trueStatement notNil - ifTrue: [ self trueStatement parent: nil ]. - trueStatement := aJSStatementNode. - self trueStatement notNil - ifTrue: [ self trueStatement parent: self ] -] diff --git a/src/SmaCC_Javascript_Parser/JSImportDeclarationNode.class.st b/src/SmaCC_Javascript_Parser/JSImportDeclarationNode.class.st deleted file mode 100644 index 8b0c2650e..000000000 --- a/src/SmaCC_Javascript_Parser/JSImportDeclarationNode.class.st +++ /dev/null @@ -1,101 +0,0 @@ -Class { - #name : #JSImportDeclarationNode, - #superclass : #JSProgramNode, - #instVars : [ - 'importToken', - 'imports', - 'comma', - 'fromToken', - 'from', - 'semicolon' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSImportDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitImportDeclaration: self -] - -{ #category : #generated } -JSImportDeclarationNode >> comma [ - ^ comma -] - -{ #category : #generated } -JSImportDeclarationNode >> comma: aSmaCCToken [ - comma := aSmaCCToken -] - -{ #category : #generated } -JSImportDeclarationNode >> compositeNodeVariables [ - ^ #(#imports) -] - -{ #category : #generated } -JSImportDeclarationNode >> from [ - ^ from -] - -{ #category : #generated } -JSImportDeclarationNode >> from: aSmaCCToken [ - from := aSmaCCToken -] - -{ #category : #generated } -JSImportDeclarationNode >> fromToken [ - ^ fromToken -] - -{ #category : #generated } -JSImportDeclarationNode >> fromToken: aSmaCCToken [ - fromToken := aSmaCCToken -] - -{ #category : #generated } -JSImportDeclarationNode >> ignoredTokenVariables [ - ^ #(#comma #semicolon) -] - -{ #category : #generated } -JSImportDeclarationNode >> importToken [ - ^ importToken -] - -{ #category : #generated } -JSImportDeclarationNode >> importToken: aSmaCCToken [ - importToken := aSmaCCToken -] - -{ #category : #generated } -JSImportDeclarationNode >> imports [ - ^ imports -] - -{ #category : #generated } -JSImportDeclarationNode >> imports: anOrderedCollection [ - self setParents: self imports to: nil. - imports := anOrderedCollection. - self setParents: self imports to: self -] - -{ #category : #'generated-initialize-release' } -JSImportDeclarationNode >> initialize [ - super initialize. - imports := OrderedCollection new: 2. -] - -{ #category : #generated } -JSImportDeclarationNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JSImportDeclarationNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -JSImportDeclarationNode >> tokenVariables [ - ^ #(#importToken #fromToken #from) -] diff --git a/src/SmaCC_Javascript_Parser/JSImportSpecifierNode.class.st b/src/SmaCC_Javascript_Parser/JSImportSpecifierNode.class.st deleted file mode 100644 index 221df9c01..000000000 --- a/src/SmaCC_Javascript_Parser/JSImportSpecifierNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #JSImportSpecifierNode, - #superclass : #JSProgramNode, - #instVars : [ - 'binding', - 'name', - 'asToken' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSImportSpecifierNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitImportSpecifier: self -] - -{ #category : #generated } -JSImportSpecifierNode >> asToken [ - ^ asToken -] - -{ #category : #generated } -JSImportSpecifierNode >> asToken: aSmaCCToken [ - asToken := aSmaCCToken -] - -{ #category : #generated } -JSImportSpecifierNode >> binding [ - ^ binding -] - -{ #category : #generated } -JSImportSpecifierNode >> binding: aJSNameExpressionNode [ - self binding notNil - ifTrue: [ self binding parent: nil ]. - binding := aJSNameExpressionNode. - self binding notNil - ifTrue: [ self binding parent: self ] -] - -{ #category : #generated } -JSImportSpecifierNode >> name [ - ^ name -] - -{ #category : #generated } -JSImportSpecifierNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -JSImportSpecifierNode >> nodeVariables [ - ^ #(#binding) -] - -{ #category : #generated } -JSImportSpecifierNode >> tokenVariables [ - ^ #(#name #asToken) -] diff --git a/src/SmaCC_Javascript_Parser/JSIndexedPropertyExpressionNode.class.st b/src/SmaCC_Javascript_Parser/JSIndexedPropertyExpressionNode.class.st deleted file mode 100644 index f58e23a31..000000000 --- a/src/SmaCC_Javascript_Parser/JSIndexedPropertyExpressionNode.class.st +++ /dev/null @@ -1,83 +0,0 @@ -Class { - #name : #JSIndexedPropertyExpressionNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'expressions', - 'leftBracket', - 'fieldExpression', - 'rightBracket' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSIndexedPropertyExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitIndexedPropertyExpression: self -] - -{ #category : #generated } -JSIndexedPropertyExpressionNode >> compositeNodeVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -JSIndexedPropertyExpressionNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -JSIndexedPropertyExpressionNode >> expressions: anOrderedCollection [ - self setParents: self expressions to: nil. - expressions := anOrderedCollection. - self setParents: self expressions to: self -] - -{ #category : #generated } -JSIndexedPropertyExpressionNode >> fieldExpression [ - ^ fieldExpression -] - -{ #category : #generated } -JSIndexedPropertyExpressionNode >> fieldExpression: aJSExpressionNode [ - self fieldExpression notNil - ifTrue: [ self fieldExpression parent: nil ]. - fieldExpression := aJSExpressionNode. - self fieldExpression notNil - ifTrue: [ self fieldExpression parent: self ] -] - -{ #category : #generated } -JSIndexedPropertyExpressionNode >> ignoredTokenVariables [ - ^ #(#leftBracket #rightBracket) -] - -{ #category : #'generated-initialize-release' } -JSIndexedPropertyExpressionNode >> initialize [ - super initialize. - expressions := OrderedCollection new: 2. -] - -{ #category : #generated } -JSIndexedPropertyExpressionNode >> leftBracket [ - ^ leftBracket -] - -{ #category : #generated } -JSIndexedPropertyExpressionNode >> leftBracket: aSmaCCToken [ - leftBracket := aSmaCCToken -] - -{ #category : #generated } -JSIndexedPropertyExpressionNode >> nodeVariables [ - ^ #(#fieldExpression) -] - -{ #category : #generated } -JSIndexedPropertyExpressionNode >> rightBracket [ - ^ rightBracket -] - -{ #category : #generated } -JSIndexedPropertyExpressionNode >> rightBracket: aSmaCCToken [ - rightBracket := aSmaCCToken -] diff --git a/src/SmaCC_Javascript_Parser/JSLabelledStatementNode.class.st b/src/SmaCC_Javascript_Parser/JSLabelledStatementNode.class.st deleted file mode 100644 index e49dfa137..000000000 --- a/src/SmaCC_Javascript_Parser/JSLabelledStatementNode.class.st +++ /dev/null @@ -1,64 +0,0 @@ -Class { - #name : #JSLabelledStatementNode, - #superclass : #JSStatementNode, - #instVars : [ - 'label', - 'colonToken', - 'statement' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSLabelledStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitLabelledStatement: self -] - -{ #category : #generated } -JSLabelledStatementNode >> colonToken [ - ^ colonToken -] - -{ #category : #generated } -JSLabelledStatementNode >> colonToken: aSmaCCToken [ - colonToken := aSmaCCToken -] - -{ #category : #generated } -JSLabelledStatementNode >> ignoredTokenVariables [ - ^ #(#colonToken) -] - -{ #category : #generated } -JSLabelledStatementNode >> label [ - ^ label -] - -{ #category : #generated } -JSLabelledStatementNode >> label: aSmaCCToken [ - label := aSmaCCToken -] - -{ #category : #generated } -JSLabelledStatementNode >> nodeVariables [ - ^ #(#statement) -] - -{ #category : #generated } -JSLabelledStatementNode >> statement [ - ^ statement -] - -{ #category : #generated } -JSLabelledStatementNode >> statement: aJSStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aJSStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -JSLabelledStatementNode >> tokenVariables [ - ^ #(#label) -] diff --git a/src/SmaCC_Javascript_Parser/JSLexicalDeclarationNode.class.st b/src/SmaCC_Javascript_Parser/JSLexicalDeclarationNode.class.st deleted file mode 100644 index 964ee3878..000000000 --- a/src/SmaCC_Javascript_Parser/JSLexicalDeclarationNode.class.st +++ /dev/null @@ -1,85 +0,0 @@ -Class { - #name : #JSLexicalDeclarationNode, - #superclass : #JSStatementNode, - #instVars : [ - 'typeToken', - 'bindings', - 'commas', - 'semicolon' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSLexicalDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitLexicalDeclaration: self -] - -{ #category : #generated } -JSLexicalDeclarationNode >> bindings [ - ^ bindings -] - -{ #category : #generated } -JSLexicalDeclarationNode >> bindings: anOrderedCollection [ - self setParents: self bindings to: nil. - bindings := anOrderedCollection. - self setParents: self bindings to: self -] - -{ #category : #generated } -JSLexicalDeclarationNode >> commas [ - ^ commas -] - -{ #category : #generated } -JSLexicalDeclarationNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JSLexicalDeclarationNode >> compositeNodeVariables [ - ^ #(#bindings) -] - -{ #category : #generated } -JSLexicalDeclarationNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -JSLexicalDeclarationNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #'generated-initialize-release' } -JSLexicalDeclarationNode >> initialize [ - super initialize. - bindings := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -JSLexicalDeclarationNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JSLexicalDeclarationNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -JSLexicalDeclarationNode >> tokenVariables [ - ^ #(#typeToken) -] - -{ #category : #generated } -JSLexicalDeclarationNode >> typeToken [ - ^ typeToken -] - -{ #category : #generated } -JSLexicalDeclarationNode >> typeToken: aSmaCCToken [ - typeToken := aSmaCCToken -] diff --git a/src/SmaCC_Javascript_Parser/JSLiteralNode.class.st b/src/SmaCC_Javascript_Parser/JSLiteralNode.class.st deleted file mode 100644 index 6f17c4e7c..000000000 --- a/src/SmaCC_Javascript_Parser/JSLiteralNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JSLiteralNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'value' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSLiteralNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitLiteral: self -] - -{ #category : #generated } -JSLiteralNode >> tokenVariables [ - ^ #(#value) -] - -{ #category : #generated } -JSLiteralNode >> value [ - ^ value -] - -{ #category : #generated } -JSLiteralNode >> value: aSmaCCToken [ - value := aSmaCCToken -] diff --git a/src/SmaCC_Javascript_Parser/JSMethodDefinitionNode.class.st b/src/SmaCC_Javascript_Parser/JSMethodDefinitionNode.class.st deleted file mode 100644 index c78eb5f03..000000000 --- a/src/SmaCC_Javascript_Parser/JSMethodDefinitionNode.class.st +++ /dev/null @@ -1,151 +0,0 @@ -Class { - #name : #JSMethodDefinitionNode, - #superclass : #JSProgramNode, - #instVars : [ - 'name', - 'left', - 'restParameter', - 'parameters', - 'commas', - 'right', - 'leftBrace', - 'statements', - 'rightBrace' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSMethodDefinitionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitMethodDefinition: self -] - -{ #category : #generated } -JSMethodDefinitionNode >> commas [ - ^ commas -] - -{ #category : #generated } -JSMethodDefinitionNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JSMethodDefinitionNode >> compositeNodeVariables [ - ^ #(#parameters #statements) -] - -{ #category : #generated } -JSMethodDefinitionNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -JSMethodDefinitionNode >> ignoredTokenVariables [ - ^ #(#left #right #leftBrace #rightBrace) -] - -{ #category : #'generated-initialize-release' } -JSMethodDefinitionNode >> initialize [ - super initialize. - parameters := OrderedCollection new: 2. - commas := OrderedCollection new: 2. - statements := OrderedCollection new: 2. -] - -{ #category : #generated } -JSMethodDefinitionNode >> left [ - ^ left -] - -{ #category : #generated } -JSMethodDefinitionNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -JSMethodDefinitionNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -JSMethodDefinitionNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -JSMethodDefinitionNode >> name [ - ^ name -] - -{ #category : #generated } -JSMethodDefinitionNode >> name: aJSProgramNode [ - self name notNil - ifTrue: [ self name parent: nil ]. - name := aJSProgramNode. - self name notNil - ifTrue: [ self name parent: self ] -] - -{ #category : #generated } -JSMethodDefinitionNode >> nodeVariables [ - ^ #(#name #restParameter) -] - -{ #category : #generated } -JSMethodDefinitionNode >> parameters [ - ^ parameters -] - -{ #category : #generated } -JSMethodDefinitionNode >> parameters: anOrderedCollection [ - self setParents: self parameters to: nil. - parameters := anOrderedCollection. - self setParents: self parameters to: self -] - -{ #category : #generated } -JSMethodDefinitionNode >> restParameter [ - ^ restParameter -] - -{ #category : #generated } -JSMethodDefinitionNode >> restParameter: aJSRestVariableDeclarationNode [ - self restParameter notNil - ifTrue: [ self restParameter parent: nil ]. - restParameter := aJSRestVariableDeclarationNode. - self restParameter notNil - ifTrue: [ self restParameter parent: self ] -] - -{ #category : #generated } -JSMethodDefinitionNode >> right [ - ^ right -] - -{ #category : #generated } -JSMethodDefinitionNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -JSMethodDefinitionNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -JSMethodDefinitionNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] - -{ #category : #generated } -JSMethodDefinitionNode >> statements [ - ^ statements -] - -{ #category : #generated } -JSMethodDefinitionNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] diff --git a/src/SmaCC_Javascript_Parser/JSModuleNode.class.st b/src/SmaCC_Javascript_Parser/JSModuleNode.class.st deleted file mode 100644 index baef79603..000000000 --- a/src/SmaCC_Javascript_Parser/JSModuleNode.class.st +++ /dev/null @@ -1,36 +0,0 @@ -Class { - #name : #JSModuleNode, - #superclass : #JSProgramNode, - #instVars : [ - 'items' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSModuleNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitModule: self -] - -{ #category : #generated } -JSModuleNode >> compositeNodeVariables [ - ^ #(#items) -] - -{ #category : #'generated-initialize-release' } -JSModuleNode >> initialize [ - super initialize. - items := OrderedCollection new: 2. -] - -{ #category : #generated } -JSModuleNode >> items [ - ^ items -] - -{ #category : #generated } -JSModuleNode >> items: anOrderedCollection [ - self setParents: self items to: nil. - items := anOrderedCollection. - self setParents: self items to: self -] diff --git a/src/SmaCC_Javascript_Parser/JSNameExpressionNode.class.st b/src/SmaCC_Javascript_Parser/JSNameExpressionNode.class.st deleted file mode 100644 index e08f6388f..000000000 --- a/src/SmaCC_Javascript_Parser/JSNameExpressionNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JSNameExpressionNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'name' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSNameExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNameExpression: self -] - -{ #category : #generated } -JSNameExpressionNode >> name [ - ^ name -] - -{ #category : #generated } -JSNameExpressionNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -JSNameExpressionNode >> tokenVariables [ - ^ #(#name) -] diff --git a/src/SmaCC_Javascript_Parser/JSNameSpaceImportNode.class.st b/src/SmaCC_Javascript_Parser/JSNameSpaceImportNode.class.st deleted file mode 100644 index d11d57335..000000000 --- a/src/SmaCC_Javascript_Parser/JSNameSpaceImportNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #JSNameSpaceImportNode, - #superclass : #JSProgramNode, - #instVars : [ - 'star', - 'asToken', - 'import' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSNameSpaceImportNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNameSpaceImport: self -] - -{ #category : #generated } -JSNameSpaceImportNode >> asToken [ - ^ asToken -] - -{ #category : #generated } -JSNameSpaceImportNode >> asToken: aSmaCCToken [ - asToken := aSmaCCToken -] - -{ #category : #generated } -JSNameSpaceImportNode >> import [ - ^ import -] - -{ #category : #generated } -JSNameSpaceImportNode >> import: aJSNameExpressionNode [ - self import notNil - ifTrue: [ self import parent: nil ]. - import := aJSNameExpressionNode. - self import notNil - ifTrue: [ self import parent: self ] -] - -{ #category : #generated } -JSNameSpaceImportNode >> nodeVariables [ - ^ #(#import) -] - -{ #category : #generated } -JSNameSpaceImportNode >> star [ - ^ star -] - -{ #category : #generated } -JSNameSpaceImportNode >> star: aSmaCCToken [ - star := aSmaCCToken -] - -{ #category : #generated } -JSNameSpaceImportNode >> tokenVariables [ - ^ #(#star #asToken) -] diff --git a/src/SmaCC_Javascript_Parser/JSNamedImportsNode.class.st b/src/SmaCC_Javascript_Parser/JSNamedImportsNode.class.st deleted file mode 100644 index a997e5532..000000000 --- a/src/SmaCC_Javascript_Parser/JSNamedImportsNode.class.st +++ /dev/null @@ -1,80 +0,0 @@ -Class { - #name : #JSNamedImportsNode, - #superclass : #JSProgramNode, - #instVars : [ - 'leftBrace', - 'rightBrace', - 'specifiers', - 'commas' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSNamedImportsNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNamedImports: self -] - -{ #category : #generated } -JSNamedImportsNode >> commas [ - ^ commas -] - -{ #category : #generated } -JSNamedImportsNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JSNamedImportsNode >> compositeNodeVariables [ - ^ #(#specifiers) -] - -{ #category : #generated } -JSNamedImportsNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -JSNamedImportsNode >> ignoredTokenVariables [ - ^ #(#leftBrace #rightBrace) -] - -{ #category : #'generated-initialize-release' } -JSNamedImportsNode >> initialize [ - super initialize. - specifiers := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -JSNamedImportsNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -JSNamedImportsNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -JSNamedImportsNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -JSNamedImportsNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] - -{ #category : #generated } -JSNamedImportsNode >> specifiers [ - ^ specifiers -] - -{ #category : #generated } -JSNamedImportsNode >> specifiers: anOrderedCollection [ - self setParents: self specifiers to: nil. - specifiers := anOrderedCollection. - self setParents: self specifiers to: self -] diff --git a/src/SmaCC_Javascript_Parser/JSNamedPropertyExpressionNode.class.st b/src/SmaCC_Javascript_Parser/JSNamedPropertyExpressionNode.class.st deleted file mode 100644 index 97bd683ac..000000000 --- a/src/SmaCC_Javascript_Parser/JSNamedPropertyExpressionNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #JSNamedPropertyExpressionNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'expression', - 'periodToken', - 'name' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSNamedPropertyExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNamedPropertyExpression: self -] - -{ #category : #generated } -JSNamedPropertyExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -JSNamedPropertyExpressionNode >> expression: aJSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JSNamedPropertyExpressionNode >> name [ - ^ name -] - -{ #category : #generated } -JSNamedPropertyExpressionNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -JSNamedPropertyExpressionNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -JSNamedPropertyExpressionNode >> periodToken [ - ^ periodToken -] - -{ #category : #generated } -JSNamedPropertyExpressionNode >> periodToken: aSmaCCToken [ - periodToken := aSmaCCToken -] - -{ #category : #generated } -JSNamedPropertyExpressionNode >> tokenVariables [ - ^ #(#periodToken #name) -] diff --git a/src/SmaCC_Javascript_Parser/JSNewExpressionNode.class.st b/src/SmaCC_Javascript_Parser/JSNewExpressionNode.class.st deleted file mode 100644 index 4d00b18f3..000000000 --- a/src/SmaCC_Javascript_Parser/JSNewExpressionNode.class.st +++ /dev/null @@ -1,147 +0,0 @@ -Class { - #name : #JSNewExpressionNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'newToken', - 'expression', - 'left', - 'right', - 'arguments', - 'ellipsises', - 'varArguments', - 'commas' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSNewExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNewExpression: self -] - -{ #category : #generated } -JSNewExpressionNode >> arguments [ - ^ arguments -] - -{ #category : #generated } -JSNewExpressionNode >> arguments: anOrderedCollection [ - self setParents: self arguments to: nil. - arguments := anOrderedCollection. - self setParents: self arguments to: self -] - -{ #category : #generated } -JSNewExpressionNode >> commas [ - ^ commas -] - -{ #category : #generated } -JSNewExpressionNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JSNewExpressionNode >> compositeNodeVariables [ - ^ #(#arguments #varArguments) -] - -{ #category : #generated } -JSNewExpressionNode >> compositeTokenVariables [ - ^ #(#ellipsises) -] - -{ #category : #generated } -JSNewExpressionNode >> ellipsises [ - ^ ellipsises -] - -{ #category : #generated } -JSNewExpressionNode >> ellipsises: anOrderedCollection [ - ellipsises := anOrderedCollection -] - -{ #category : #generated } -JSNewExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -JSNewExpressionNode >> expression: aJSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JSNewExpressionNode >> ignoredCompositeTokenVariables [ - ^ #(#commas #leftParens #rightParens) -] - -{ #category : #generated } -JSNewExpressionNode >> ignoredTokenVariables [ - ^ #(#left #right) -] - -{ #category : #'generated-initialize-release' } -JSNewExpressionNode >> initialize [ - super initialize. - arguments := OrderedCollection new: 2. - ellipsises := OrderedCollection new: 2. - varArguments := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -JSNewExpressionNode >> left [ - ^ left -] - -{ #category : #generated } -JSNewExpressionNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -JSNewExpressionNode >> newToken [ - ^ newToken -] - -{ #category : #generated } -JSNewExpressionNode >> newToken: aSmaCCToken [ - newToken := aSmaCCToken -] - -{ #category : #generated } -JSNewExpressionNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -JSNewExpressionNode >> right [ - ^ right -] - -{ #category : #generated } -JSNewExpressionNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -JSNewExpressionNode >> tokenVariables [ - ^ #(#newToken) -] - -{ #category : #generated } -JSNewExpressionNode >> varArguments [ - ^ varArguments -] - -{ #category : #generated } -JSNewExpressionNode >> varArguments: anOrderedCollection [ - self setParents: self varArguments to: nil. - varArguments := anOrderedCollection. - self setParents: self varArguments to: self -] diff --git a/src/SmaCC_Javascript_Parser/JSNewTargetExpressionNode.class.st b/src/SmaCC_Javascript_Parser/JSNewTargetExpressionNode.class.st deleted file mode 100644 index 16cd60051..000000000 --- a/src/SmaCC_Javascript_Parser/JSNewTargetExpressionNode.class.st +++ /dev/null @@ -1,50 +0,0 @@ -Class { - #name : #JSNewTargetExpressionNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'newToken', - 'periodToken', - 'targetToken' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSNewTargetExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNewTargetExpression: self -] - -{ #category : #generated } -JSNewTargetExpressionNode >> newToken [ - ^ newToken -] - -{ #category : #generated } -JSNewTargetExpressionNode >> newToken: aSmaCCToken [ - newToken := aSmaCCToken -] - -{ #category : #generated } -JSNewTargetExpressionNode >> periodToken [ - ^ periodToken -] - -{ #category : #generated } -JSNewTargetExpressionNode >> periodToken: aSmaCCToken [ - periodToken := aSmaCCToken -] - -{ #category : #generated } -JSNewTargetExpressionNode >> targetToken [ - ^ targetToken -] - -{ #category : #generated } -JSNewTargetExpressionNode >> targetToken: aSmaCCToken [ - targetToken := aSmaCCToken -] - -{ #category : #generated } -JSNewTargetExpressionNode >> tokenVariables [ - ^ #(#newToken #periodToken #targetToken) -] diff --git a/src/SmaCC_Javascript_Parser/JSNullLiteralNode.class.st b/src/SmaCC_Javascript_Parser/JSNullLiteralNode.class.st deleted file mode 100644 index c53dfea47..000000000 --- a/src/SmaCC_Javascript_Parser/JSNullLiteralNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #JSNullLiteralNode, - #superclass : #JSLiteralNode, - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSNullLiteralNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNullLiteral: self -] diff --git a/src/SmaCC_Javascript_Parser/JSNumericLiteralNode.class.st b/src/SmaCC_Javascript_Parser/JSNumericLiteralNode.class.st deleted file mode 100644 index dc20aa61c..000000000 --- a/src/SmaCC_Javascript_Parser/JSNumericLiteralNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #JSNumericLiteralNode, - #superclass : #JSLiteralNode, - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSNumericLiteralNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitNumericLiteral: self -] diff --git a/src/SmaCC_Javascript_Parser/JSObjectBindingPatternNode.class.st b/src/SmaCC_Javascript_Parser/JSObjectBindingPatternNode.class.st deleted file mode 100644 index 0654172af..000000000 --- a/src/SmaCC_Javascript_Parser/JSObjectBindingPatternNode.class.st +++ /dev/null @@ -1,80 +0,0 @@ -Class { - #name : #JSObjectBindingPatternNode, - #superclass : #JSProgramNode, - #instVars : [ - 'leftBrace', - 'rightBrace', - 'properties', - 'commas' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSObjectBindingPatternNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitObjectBindingPattern: self -] - -{ #category : #generated } -JSObjectBindingPatternNode >> commas [ - ^ commas -] - -{ #category : #generated } -JSObjectBindingPatternNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JSObjectBindingPatternNode >> compositeNodeVariables [ - ^ #(#properties) -] - -{ #category : #generated } -JSObjectBindingPatternNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -JSObjectBindingPatternNode >> ignoredTokenVariables [ - ^ #(#leftBrace #rightBrace) -] - -{ #category : #'generated-initialize-release' } -JSObjectBindingPatternNode >> initialize [ - super initialize. - properties := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -JSObjectBindingPatternNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -JSObjectBindingPatternNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -JSObjectBindingPatternNode >> properties [ - ^ properties -] - -{ #category : #generated } -JSObjectBindingPatternNode >> properties: anOrderedCollection [ - self setParents: self properties to: nil. - properties := anOrderedCollection. - self setParents: self properties to: self -] - -{ #category : #generated } -JSObjectBindingPatternNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -JSObjectBindingPatternNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] diff --git a/src/SmaCC_Javascript_Parser/JSObjectLiteralNode.class.st b/src/SmaCC_Javascript_Parser/JSObjectLiteralNode.class.st deleted file mode 100644 index 6379e03e5..000000000 --- a/src/SmaCC_Javascript_Parser/JSObjectLiteralNode.class.st +++ /dev/null @@ -1,80 +0,0 @@ -Class { - #name : #JSObjectLiteralNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'leftBrace', - 'rightBrace', - 'definitions', - 'commas' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSObjectLiteralNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitObjectLiteral: self -] - -{ #category : #generated } -JSObjectLiteralNode >> commas [ - ^ commas -] - -{ #category : #generated } -JSObjectLiteralNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JSObjectLiteralNode >> compositeNodeVariables [ - ^ #(#definitions) -] - -{ #category : #generated } -JSObjectLiteralNode >> definitions [ - ^ definitions -] - -{ #category : #generated } -JSObjectLiteralNode >> definitions: anOrderedCollection [ - self setParents: self definitions to: nil. - definitions := anOrderedCollection. - self setParents: self definitions to: self -] - -{ #category : #generated } -JSObjectLiteralNode >> ignoredCompositeTokenVariables [ - ^ #(#commas #leftParens #rightParens) -] - -{ #category : #generated } -JSObjectLiteralNode >> ignoredTokenVariables [ - ^ #(#leftBrace #rightBrace) -] - -{ #category : #'generated-initialize-release' } -JSObjectLiteralNode >> initialize [ - super initialize. - definitions := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -JSObjectLiteralNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -JSObjectLiteralNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -JSObjectLiteralNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -JSObjectLiteralNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] diff --git a/src/SmaCC_Javascript_Parser/JSParser.class.st b/src/SmaCC_Javascript_Parser/JSParser.class.st deleted file mode 100644 index bde113187..000000000 --- a/src/SmaCC_Javascript_Parser/JSParser.class.st +++ /dev/null @@ -1,4670 +0,0 @@ -Class { - #name : #JSParser, - #superclass : #SmaCCGLRParser, - #classInstVars : [ - 'keywords' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSParser class >> ambiguousTransitions [ -^#( -#[ 0 10 0 201] -#[ 0 26 2 89] -#[ 0 98 1 150] -#[ 0 98 4 245] -#[ 1 154 5 9] -#[ 0 25 0 30] -#[ 0 30 2 5] -#[ 0 30 0 33] -#[ 0 30 0 41] -#[ 0 30 0 45] -#[ 0 30 0 49] -#[ 0 30 0 53] -#[ 0 30 0 57] -#[ 0 30 0 61] -#[ 0 30 0 69] -#[ 0 30 0 85] -#[ 0 30 0 97] -#[ 0 30 0 105] -#[ 0 30 0 121] -#[ 0 30 0 125] -#[ 0 30 0 133] -#[ 0 30 0 141] -#[ 0 30 0 149] -#[ 0 30 0 157] -#[ 0 30 0 165] -#[ 0 30 0 177] -#[ 0 30 2 9] -#[ 0 30 0 185] -#[ 0 30 0 189] -#[ 0 30 0 193] -#[ 0 30 0 197] -#[ 0 6 0 30] -#[ 0 10 0 30 0 201] -#[ 0 98 1 182] -#[ 1 106 1 218] -#[ 1 110 1 222] -#[ 1 174 2 190] -#[ 1 150 1 182] -#[ 2 202 5 73] -#[ 1 226 2 169] -#[ 0 162 7 245] -#[ 0 10 3 246] -#[ 2 214 2 230] -#[ 0 98 5 30] - ). -] - -{ #category : #'generated-accessing' } -JSParser class >> cacheId [ - ^'2019-04-15T17:15:49.025026-05:00' -] - -{ #category : #generated } -JSParser class >> definitionComment [ -"%root Program; -%prefix JS; -%suffix Node; - -%scopes default template; -%excludes jsx jsxText; - -%start Expression Statement Script Module; - -%ignore_variables semicolon comma leftParen rightParen leftBracket rightBracket leftBrace rightBrace left right colonToken; - -%hierarchy Literal ( - BooleanLiteral - NullLiteral - NumericLiteral - RegularExpressionLiteral - StringLiteral -); -%hierarchy Expression ( - ArrayLiteral - ArrowFunction - AssignmentExpression - BinaryExpression - CallExpression - ClassExpression - CommaExpression - ConditionalExpression - Function - IndexedPropertyExpression - Literal - NameExpression - NamedPropertyExpression - NewExpression - NewTargetExpression - ObjectLiteral - PrefixExpression - PostfixExpression - SpreadExpression - SuperCallExpression - SuperIndexedPropertyExpression - SuperNamedPropertyExpression - TaggedTemplateLiteral - TemplateLiteral - ThisExpression - UnaryExpression - YieldExpression - XCodeExpression #JSX - XElement #JSX - XFragment #JSX - XSelfClosingElement #JSX - XText #JSX -); -%hierarchy Function ( - GeneratorFunction -); -%hierarchy Statement ( - BlockStatement - BreakStatement - ContinueStatement - DebuggerStatement - DoWhileStatement - EmptyStatement - ExpressionStatement - ForInStatement - ForOfStatement - ForStatement - IfStatement - LabelledStatement - LexicalDeclaration - ReturnStatement - SwitchStatement - ThrowStatement - TryStatement - VariableStatement - WhileStatement - WithStatement -); -%hierarchy MethodDefinition ( - GeneratorMethodDefinition - GetMethodDefinition - SetMethodDefinition -); -%hierarchy VariableDeclaration ( - RestVariableDeclaration -); - -%glr; - -%id ; - -%right ; - -default -: \( -; -default -: \) -; -jsx jsxText default -: \{ -; -jsx jsxText default -: \} -; -default -: \[ -; -default -: \] -; -default -: \; -; -jsx default -: \/ -; -default -: \/\= -; -jsxText default -: \< -; -default -: \<\< -; -default -: \<\<\= -; -jsx jsxText default -: \> -; -default -: \>\> -; -default -: \>\>\= -; -default -: \>\>\>\= -; -default -: \>\>\> -; -default -: \=\> -; -default -: \<\= -; -default -: \>\= -; -jsx default -: \. -; -jsx default -: \= -; -default -: \=\= -; -default -: \=\=\= -; -default -: \* -; -default -: \*\* -; -default -: \*\= -; -default -: \%\= -; -default -: \&\= -; -default -: \^\= -; -default -: \|\= -; -default -: \-\= -; -default -: \+\= -; -default -: \+ -; -default -: \+\+ -; -default -: \- -; -default -: \-\- -; -default -: \~ -; -default -: \& -; -default -: \&\& -; -default -: \? -; -default -: \% -; -default -: \| -; -default -: \|\| -; -default -: \^ -; -default -: \! -; -default -: \!\= -; -default -: \!\=\= -; -default -: as -; -default -: break -; -default -: case -; -default -: catch -; -default -: class -; -default -: const -; -default -: continue -; -default -: debugger -; -default -: default -; -default -: delete -; -default -: do -; -default -: else -; -default -: export -; -default -: extends -; -default -: false -; -default -: finally -; -default -: for -; -default -: from -; -default -: function -; -default -: get -; -default -: if -; -default -: import -; -default -: in -; -default -: instanceof -; -default -: let -; -default -: new -; -default -: null -; -default -: of -; -default -: return -; -default -: set -; -default -: static -; -default -: super -; -default -: switch -; -default -: target -; -default -: this -; -default -: throw -; -default -: true -; -default -: try -; -default -: typeof -; -default -: var -; -default -: void -; -default -: while -; -default -: with -; -default -: yield -; -default -: \.\.\. -; -default -: \, -; -default -: \: -; - -default - : \/\/ [^\r\n]* - | (\/\* [^\*]* \*+ ([^\/\*] [^\*]* \*+)* \/) - ; - -: [0-9a-fA-F] -; - -: | \$ | _ | (\\ u {4,4}) -; - #TODO -: | -; -default -: * -; -default -: -; -jsx default -: ( | \xA0 | \xFEFF)+ -; -default -: [^\r\n] | (x {2,2}) | (u {4,4}) -; -default -: \\ -; -default -: \\ (\r | \n | (\r\n)) -; -jsx default -: (\"" ([^\""\\\r\n] | | )* \"")+ -| (\' ([^\'\\\r\n] | | )* \')+ -; - -#: 0 | ([1-9][0-9]*) -: [0-9]+ # numbers that start with 0's should be octals, but node appears to allow 09 (e.g., (1 + 09) == (1 + 011)) -; - -: [0-9]+ -; - -: [eE] [\+\-]? -; - -: ( \. ? ?) -| (\. ?) -| ( ?) -; - -: 0 [xX] [0-9A-Fa-f]+ -; - -: 0 [bB] [0-1]+ -; - -: 0 [oO] [0-7]+ -; -default -: | | | -; - -: \\ [^\r\n] -; - -: ([^\\\]] | )* -; - -: \[ \] -; - -: [^\\\/\[\*\r\n] | | -; - -: [^\\\/\[\r\n] | | -; - -: * -; - -: -; - -: * -; - -: \/ \/ -; - -: \`\? [^\`]+ \` -; -################## -: \` ([^\`$\\] | | \$[^\`\{])* \$? \` -; - -: \` ([^\`$\\] | | \$[^\`\{])* \$\{ -; -template -: \} ([^\`$\\] | | \$[^\`\{])* \$\{ -; -template -: \} ([^\`$\\] | | \$[^\`\{])* \$?\` -; - -goal -: Module -; - -# A.2 Expressions -#IdentifierReference -#: Identifier -#: Identifier -#; -#BindingIdentifieropt -#: -#| BindingIdentifier -#; -#BindingIdentifier -#: Identifier -#; -Identifieropt -: -| Identifier -; -Identifier -: 'name' {{NameExpression}} -; -IdentifierName -: 'name' {{NameExpression}} -; -#LabeledIdentifier -#: Identifier -#; -PrimaryExpression -: 'thisToken' {{ThisExpression}} -| Identifier ## -| Literal -| ArrayLiteral -| ObjectLiteral -| FunctionExpression -| ClassExpression -| GeneratorExpression -| RegularExpressionLiteral -| TemplateLiteral -| ParenthesizedExpression # CoverParenthesizedExpressionAndArrowParameterList -; -ParenthesizedExpression -: 'leftParen' Expression 'rightParen' {{Expression}} -; -CoverParenthesizedExpressionAndArrowParameterList -: 'left' ParameterListopt 'right' ## -#| 'left' 'right' -#| 'left' 'ellipsis' Identifier 'varParameter' 'right' ## -#| 'left' 'ellipsis' BindingPattern 'varParameter' 'right' -| 'left' ParameterListopt 'comma' 'ellipsis' Identifier 'varParameter' 'right' ## -| 'left' ParameterListopt 'comma' 'ellipsis' BindingPattern 'varParameter' 'right' ## -; -ParameterListopt -: -| ParameterList -; -ParameterList -: BindingElement 'parameter' -| ParameterList 'comma' BindingElement 'parameter' -; -Literal -: NullLiteral 'value' {{NullLiteral}} -| BooleanLiteral 'value' {{BooleanLiteral}} -| NumericLiteral 'value' {{NumericLiteral}} -| StringLiteral 'value' {{StringLiteral}} -; -ArrayLiteral -: 'leftBracket' Elisionopt 'rightBracket' {{}} -| 'leftBracket' ElementList 'rightBracket' {{}} -| 'leftBracket' ElementList Elision 'rightBracket' {{}} ## -; -ElementList -: Elisionopt AssignmentExpression 'expression' -| Elisionopt SpreadElement 'expression' -| ElementList 'comma' Elisionopt AssignmentExpression 'expression' -| ElementList 'comma' Elisionopt SpreadElement 'expression' -; -Elisionopt -: -| Elision -; -Elision -: 'comma' -| Elision 'comma' -; -SpreadElement -: 'ellipsis' AssignmentExpression 'expression' {{SpreadExpression}} -; -ObjectLiteral -: 'leftBrace' 'rightBrace' {{}} -| 'leftBrace' PropertyDefinitionList 'rightBrace' {{}} -| 'leftBrace' PropertyDefinitionList 'comma' 'rightBrace' {{}} -; -PropertyDefinitionList -: PropertyDefinition 'definition' -| PropertyDefinitionList 'comma' PropertyDefinition 'definition' -; -PropertyDefinition -: Identifier -| CoverInitializedName -| PropertyName 'name' 'colonToken' AssignmentExpression 'value' {{PropertyAssignment}} -| MethodDefinition -; -PropertyName -: LiteralPropertyName -| ComputedPropertyName -; -LiteralPropertyName -: IdentifierName -| StringLiteral 'name' {{NameExpression}} -| NumericLiteral 'name' {{NameExpression}} -; -ComputedPropertyName -: 'leftBrace' AssignmentExpression 'expression' 'rightBrace' {{}} -; -CoverInitializedName -: Identifier 'name' Initializer {{PropertyAssignment}} ## -; -Initializeropt -: -| Initializer -; -Initializer -: 'equalToken' AssignmentExpression 'value' -; -TemplateLiteral -: 'part' {{}} -| StartTemplateLiteral 'part' Expression 'expression' TemplateSpans {{}} -; -StartTemplateLiteral -: [#template] -; -TemplateSpans -: 'part' -| TemplateMiddleList 'part' -; -TemplateMiddleList -: 'part' Expression 'expression' -| TemplateMiddleList 'part' Expression 'expression' -; -MemberExpression -: PrimaryExpression -| MemberExpression 'expression' 'leftBracket' Expression 'fieldExpression' 'rightBracket' {{IndexedPropertyExpression}} -| MemberExpression 'expression' 'periodToken' 'name' {{NamedPropertyExpression}} -| MemberExpression 'expression' TemplateLiteral 'template' {{TaggedTemplateLiteral}} -| SuperProperty -| MetaProperty -| 'newToken' MemberExpression 'expression' Arguments {{NewExpression}} -; -SuperProperty -: 'superToken' 'leftBracket' Expression 'expression' 'rightBracket' {{SuperIndexedPropertyExpression}} -| 'superToken' 'periodToken' 'name' {{SuperNamedPropertyExpression}} -; -MetaProperty -: NewTarget -; -NewTarget -: 'newToken' 'periodToken' 'targetToken' {{NewTargetExpression}} -; -NewExpression -: MemberExpression -| 'newToken' NewExpression 'expression' {{}} -; -CallExpression -: MemberExpression 'expression' Arguments {{}} -| SuperCall -| CallExpression 'expression' Arguments {{}} -| CallExpression 'expression' 'leftBracket' Expression 'expression' 'rightBracket' {{IndexedPropertyExpression}} -| CallExpression 'expression' 'periodToken' 'name' {{NamedPropertyExpression}} -| CallExpression 'expression' TemplateLiteral 'template' {{TaggedTemplateLiteral}} -; -SuperCall -: 'superToken' Arguments {{SuperCallExpression}} -; -Arguments -: 'left' 'right' -| 'left' ArgumentList 'right' -| 'left' ArgumentList 'comma' 'right' -; -ArgumentList -: AssignmentExpression 'argument' -| 'ellipsis' AssignmentExpression 'varArgument' -| ArgumentList 'comma' AssignmentExpression 'argument' -| ArgumentList 'comma' 'ellipsis' AssignmentExpression 'varArgument' -; -LeftHandSideExpression -: NewExpression -| CallExpression -; -UpdateExpression -: LeftHandSideExpression 'expression' 'operator' {{PostfixExpression}} -| LeftHandSideExpression 'expression' 'operator' {{PostfixExpression}} -| 'operator' UnaryExpression 'expression' {{PrefixExpression}} ## -| 'operator' UnaryExpression 'expression' {{PrefixExpression}} ## -| LeftHandSideExpression ### -; -UnaryExpression -: UpdateExpression -| 'operator' UnaryExpression 'expression' {{}} -| 'operator' UnaryExpression 'expression' {{}} -| 'operator' UnaryExpression 'expression' {{}} -| 'operator' UnaryExpression 'expression' {{}} -| 'operator' UnaryExpression 'expression' {{}} -| 'operator' UnaryExpression 'expression' {{}} -| 'operator' UnaryExpression 'expression' {{}} -; -ExponentiationExpression -: UnaryExpression -| UnaryExpression 'leftExpression' 'operator' ExponentiationExpression 'rightExpression' {{BinaryExpression}} -; -MultiplicativeExpression -: ExponentiationExpression -| MultiplicativeExpression 'leftExpression' 'operator' UnaryExpression 'rightExpression' {{BinaryExpression}} -| MultiplicativeExpression 'leftExpression' 'operator' UnaryExpression 'rightExpression' {{BinaryExpression}} -| MultiplicativeExpression 'leftExpression' 'operator' UnaryExpression 'rightExpression' {{BinaryExpression}} -; -AdditiveExpression -: MultiplicativeExpression -| AdditiveExpression 'leftExpression' 'operator' MultiplicativeExpression 'rightExpression' {{BinaryExpression}} -| AdditiveExpression 'leftExpression' 'operator' MultiplicativeExpression 'rightExpression' {{BinaryExpression}} -; -ShiftExpression -: AdditiveExpression -| ShiftExpression 'leftExpression' 'operator' AdditiveExpression 'rightExpression' {{BinaryExpression}} -| ShiftExpression 'leftExpression' 'operator' AdditiveExpression 'rightExpression' {{BinaryExpression}} -| ShiftExpression 'leftExpression' 'operator' AdditiveExpression 'rightExpression' {{BinaryExpression}} -; -RelationalExpression -: ShiftExpression -| RelationalExpression 'leftExpression' 'operator' ShiftExpression 'rightExpression' {{BinaryExpression}} -| RelationalExpression 'leftExpression' 'operator' ShiftExpression 'rightExpression' {{BinaryExpression}} -| RelationalExpression 'leftExpression' 'operator' ShiftExpression 'rightExpression' {{BinaryExpression}} -| RelationalExpression 'leftExpression' 'operator' ShiftExpression 'rightExpression' {{BinaryExpression}} -| RelationalExpression 'leftExpression' 'operator' ShiftExpression 'rightExpression' {{BinaryExpression}} -| RelationalExpression 'leftExpression' 'operator' ShiftExpression 'rightExpression' {{BinaryExpression}} -; -EqualityExpression -: RelationalExpression -| EqualityExpression 'leftExpression' 'operator' RelationalExpression 'rightExpression' {{BinaryExpression}} -| EqualityExpression 'leftExpression' 'operator' RelationalExpression 'rightExpression' {{BinaryExpression}} -| EqualityExpression 'leftExpression' 'operator' RelationalExpression 'rightExpression' {{BinaryExpression}} -| EqualityExpression 'leftExpression' 'operator' RelationalExpression 'rightExpression' {{BinaryExpression}} -; -BitwiseANDExpression -: EqualityExpression -| BitwiseANDExpression 'leftExpression' 'operator' EqualityExpression 'rightExpression' {{BinaryExpression}} -; -BitwiseXORExpression -: BitwiseANDExpression -| BitwiseXORExpression 'leftExpression' 'operator' BitwiseANDExpression 'rightExpression' {{BinaryExpression}} -; -BitwiseORExpression -: BitwiseXORExpression -| BitwiseORExpression 'leftExpression' 'operator' BitwiseXORExpression 'rightExpression' {{BinaryExpression}} -; -LogicalANDExpression -: BitwiseORExpression -| LogicalANDExpression 'leftExpression' 'operator' BitwiseORExpression 'rightExpression' {{BinaryExpression}} -; -LogicalORExpression -: LogicalANDExpression -| LogicalORExpression 'leftExpression' 'operator' LogicalANDExpression 'rightExpression' {{BinaryExpression}} -; -ConditionalExpression -: LogicalORExpression -| LogicalORExpression 'condition' 'questionMarkToken' AssignmentExpression 'trueExpression' 'colonToken' AssignmentExpression 'falseExpression' {{}} -; -AssignmentExpression -: ConditionalExpression -| YieldExpression -| ArrowFunction -| LeftHandSideExpression 'lhs' AssignmentOperator 'operator' AssignmentExpression 'rhs' {{}} ## -; -AssignmentOperator -: # -| -| -| -| -| -| -| -| -| -| -| -; -#AssignmentPattern -#: ObjectAssignmentPattern -#| ArrayAssignmentPattern -#; -#ObjectAssignmentPattern -#: 'leftBrace' 'rightBrace' -#| 'leftBrace' AssignmentPropertyList 'rightBrace' -#| 'leftBrace' AssignmentPropertyList 'comma' 'rightBrace' -#; -#ArrayAssignmentPattern -#: 'leftBracket' Elisionopt AssignmentRestElementopt 'rightBracket' -#| 'leftBracket' AssignmentElementList 'rightBracket' -#| 'leftBracket' AssignmentElementList 'comma' Elisionopt AssignmentRestElementopt 'rightBracket' -#; -#AssignmentPropertyList -#: AssignmentProperty -#| AssignmentPropertyList AssignmentProperty -#; -#AssignmentElementList -#: AssignmentElisionElement -#| AssignmentElementList 'comma' AssignmentElisionElement -#; -#AssignmentElisionElement -#: Elisionopt AssignmentElement -#; -#AssignmentProperty -#: IdentifierReference Initializeropt -#| PropertyName 'colonToken' AssignmentElement -#; -#AssignmentElement -#: DestructuringAssignmentTarget Initializeropt -#; -#AssignmentRestElementopt -#: -#| AssignmentRestElement -#; -#AssignmentRestElement -#: DestructuringAssignmentTarget -#; -#DestructuringAssignmentTarget -#: LeftHandSideExpression -#; -Expressionopt -: -| Expression -; -Expression -: AssignmentExpression -| Expression 'expression' 'comma' AssignmentExpression 'expression' {{CommaExpression}} -; -#A.3 Statements -Statement -: BlockStatement -| VariableStatement -| EmptyStatement -| ExpressionStatement -| IfStatement -| BreakableStatement -| ContinueStatement -| BreakStatement -| ReturnStatement -| WithStatement -| LabelledStatement -| ThrowStatement -| TryStatement -| DebuggerStatement -; -Declaration -: HoistableDeclaration -| ClassDeclaration -| LexicalDeclaration -; -HoistableDeclaration -: FunctionDeclaration -| GeneratorDeclaration -; -BreakableStatement -: IterationStatement -| SwitchStatement -; -BlockStatement -: Block -; -Block -: 'leftBrace' StatementListopt 'rightBrace' {{BlockStatement}} -; -StatementListopt -: -| StatementList -; -StatementList -: StatementListItem 'statement' -| StatementList StatementListItem 'statement' -; -StatementListItem -: Statement -| LexicalDeclaration #Declaration -; -LexicalDeclaration -: LetOrConst 'typeToken' BindingList 'semicolon' {{}} -; -LetOrConst -: -| -; -BindingList -: LexicalBinding 'binding' -| BindingList 'comma' LexicalBinding 'binding' -; -LexicalBinding -: Identifier 'variable' Initializeropt {{VariableDeclaration}} ## -| BindingPattern 'pattern' Initializer {{VariablePatternDeclaration}} -; -VariableStatement -: 'varToken' VariableDeclarationList 'semicolon' {{}} -; -VariableDeclarationList -: VariableDeclaration 'variable' -| VariableDeclarationList 'comma' VariableDeclaration 'variable' -; -VariableDeclaration -: Identifier 'variable' Initializeropt {{VariableDeclaration}} ## -| BindingPattern 'pattern' Initializer {{VariablePatternDeclaration}} -; -BindingPattern -: ObjectBindingPattern -| ArrayBindingPattern -; -ObjectBindingPattern -: 'leftBrace' 'rightBrace' {{}} -| 'leftBrace' BindingPropertyList 'rightBrace' {{}} -| 'leftBrace' BindingPropertyList 'comma' 'rightBrace' {{}} -; -ArrayBindingPattern -: 'leftBracket' Elisionopt BindingRestElementopt 'restElement' 'rightBracket' {{}} -| 'leftBracket' BindingElementList 'rightBracket' {{}} -| 'leftBracket' BindingElementList 'comma' Elisionopt BindingRestElementopt 'restElement' 'rightBracket' {{}} -; -BindingPropertyList -: BindingProperty 'property' -| BindingPropertyList 'comma' BindingProperty 'property' -; -BindingElementList -: BindingElisionElement -| BindingElementList 'comma' BindingElisionElement -; -BindingElisionElement -: Elisionopt BindingElement 'element' -; -BindingProperty -: SingleNameBinding -| PropertyName 'name' 'colonToken' BindingElement 'element' {{}} -; -BindingElement -: SingleNameBinding -| BindingPattern 'variable' Initializeropt {{VariableDeclaration}} -; -SingleNameBinding -: Identifier 'variable' Initializeropt {{VariableDeclaration}} ## -; -BindingRestElementopt -: -| BindingRestElement -; -BindingRestElement -: 'ellipsis' Identifier 'variable' {{RestVariableDeclaration}} ## -| 'ellipsis' BindingPattern 'variable' {{RestVariableDeclaration}} -; -EmptyStatement -: 'semicolon' {{}} -; -ExpressionStatement -: Expression 'expression' 'semicolon' {{}} -; -IfStatement -: 'ifToken' 'left' Expression 'expression' 'right' Statement 'trueStatement' 'elseToken' Statement 'elseStatement' {{}} -| 'ifToken' 'left' Expression 'expression' 'right' Statement 'trueStatement' {{}} -; -IterationStatement -: 'doToken' Statement 'statement' 'whileToken' 'left' Expression 'expression' 'right' 'semicolon' {{DoWhileStatement}} -| 'whileToken' 'left' Expression 'expression' 'right' Statement 'statement' {{WhileStatement}} -| 'forToken' 'left' Expressionopt 'initialExpression' 'semicolon' Expressionopt 'condition' 'semicolon' Expressionopt 'iteratorExpression' 'right' Statement 'statement' {{ForStatement}} -| 'forToken' 'left' 'varToken' VariableDeclarationList 'semicolon' Expressionopt 'condition' 'semicolon' Expressionopt 'iteratorExpression' 'right' Statement 'statement' {{ForStatement}} -| 'forToken' 'left' LexicalDeclaration 'declaration' Expressionopt 'condition' 'semicolon' Expressionopt 'iteratorExpression' 'right' Statement 'statement' {{ForStatement}} -| 'forToken' 'left' LeftHandSideExpression 'variable' 'inToken' Expression 'expression' 'right' Statement 'statement' {{ForInStatement}} -| 'forToken' 'left' 'varToken' ForBinding 'variable' 'inToken' Expression 'expression' 'right' Statement 'statement' {{ForInStatement}} -| 'forToken' 'left' ForDeclaration 'inToken' Expression 'expression' 'right' Statement 'statement' {{ForInStatement}} -| 'forToken' 'left' LeftHandSideExpression 'variable' 'ofToken' Expression 'expression' 'right' Statement 'statement' {{ForOfStatement}} -| 'forToken' 'left' 'varToken' VariableDeclaration 'variable' 'ofToken' Expression 'expression' 'right' Statement 'statement' {{ForOfStatement}} -| 'forToken' 'left' ForDeclaration 'ofToken' Expression 'expression' 'right' Statement 'statement' {{ForOfStatement}} -; -ForDeclaration -: LetOrConst 'varToken' ForBinding 'variable' -; -ForBinding -: Identifier ## -| BindingPattern -; -ContinueStatement -: 'continueToken' CheckEOL Identifieropt 'label' 'semicolon' {{}} -; -BreakStatement -: 'breakToken' CheckEOL Identifieropt 'label' 'semicolon' {{}} -; -CheckEOL -: [self checkEOL. nil] -; -ReturnStatement -: 'returnToken' CheckEOL Expressionopt 'expression' 'semicolon' {{}} -; -WithStatement -: 'withToken' 'left' Expression 'expression' 'right' Statement 'statement' {{}} -; -SwitchStatement -: 'switchToken' 'left' Expression 'expression' 'right' CaseBlock {{}} -; -CaseBlock -: 'leftBrace' CaseClausesopt 'rightBrace' -| 'leftBrace' CaseClausesopt DefaultClause 'clause' CaseClausesopt 'rightBrace' -; -CaseClausesopt -: -| CaseClauses -; -CaseClauses -: CaseClause 'clause' -| CaseClauses CaseClause 'clause' -; -CaseClause -: 'caseToken' Expression 'caseExpression' 'colonToken' StatementListopt {{}} -; -DefaultClause -: 'defaultToken' 'colonToken' StatementListopt {{}} -; -LabelledStatement -: 'label' 'colonToken' LabeledItem 'statement' {{}} ## -; -LabeledItem -: Statement -#| FunctionDeclaration #Statement already does FunctionExpression -; -ThrowStatement -: 'throwToken' Expression 'expression' 'semicolon' {{}} -; -TryStatement -: 'tryToken' Block 'tryBlock' Catch {{}} -| 'tryToken' Block 'tryBlock' Finally {{}} -| 'tryToken' Block 'tryBlock' Catch Finally {{}} -; -Catch -: 'catchToken' 'left' CatchParameter 'exceptionType' 'right' Block 'catchBlock' -; -Finally -: 'finallyToken' Block 'finallyBlock' -; -CatchParameter -: Identifier ## -| BindingPattern -; -DebuggerStatement -: 'debuggerToken' 'semicolon' {{}} -; -#A.4 -FunctionDeclaration -: 'functionToken' Identifieropt 'name' 'left' FormalParameters 'right' 'leftBrace' FunctionBody 'rightBrace' {{Function}} ## -; -FunctionExpression -: 'functionToken' Identifieropt 'name' 'left' FormalParameters 'right' 'leftBrace' FunctionBody 'rightBrace' {{Function}} ## -; -StrictFormalParameters -: FormalParameters -; -FormalParameters -: -| FormalParameterList -; -FormalParameterList -: FunctionRestParameter 'restParameter' -| FormalsList -| FormalsList 'comma' FunctionRestParameter 'restParameter' -; -FormalsList -: FormalParameter 'parameter' -| FormalsList 'comma' FormalParameter 'parameter' -; -FunctionRestParameter -: BindingRestElement -; -FormalParameter -: BindingElement -; -FunctionBody -: FunctionStatementList -; -FunctionStatementList -: StatementListopt -; -ArrowFunction -: ArrowParameters 'arrow' ConciseBody {{}} -; -ArrowParameters -: Identifier 'parameter' ## -| CoverParenthesizedExpressionAndArrowParameterList -; -ConciseBody -: AssignmentExpression 'statement' -| 'leftBracket' FunctionBody 'rightBracket' -; -MethodDefinition -: PropertyName 'name' 'left' StrictFormalParameters 'right' 'leftBrace' FunctionBody 'rightBrace' {{}} -| GeneratorMethod -| 'getToken' PropertyName 'name' 'left' 'right' 'leftBrace' FunctionBody 'rightBrace' {{GetMethodDefinition}} -| 'setToken' PropertyName 'name' 'left' PropertySetParameterList 'right' 'leftBrace' FunctionBody 'rightBrace' {{SetMethodDefinition}} -; -PropertySetParameterList -: FormalParameter 'parameter' -; -GeneratorMethod -: 'star' PropertyName 'name' 'left' StrictFormalParameters 'right' 'leftBrace' GeneratorBody 'rightBrace' {{GeneratorMethodDefinition}} -; -GeneratorDeclaration -: 'functionToken' 'star' Identifieropt 'name' 'left' FormalParameters 'right' 'leftBrace' GeneratorBody 'rightBrace' {{GeneratorFunction}} ## -; -GeneratorExpression -: 'functionToken' 'star' Identifieropt 'name' 'left' FormalParameters 'right' 'leftBrace' GeneratorBody 'rightBrace' {{GeneratorFunction}} ## -; -GeneratorBody -: FunctionBody -; -YieldExpression -: 'yieldToken' staropt AssignmentExpression 'expression' {{}} -; -staropt -: -| 'star' -; -ClassDeclaration -: 'classToken' Identifieropt 'name' ClassTail {{ClassExpression}} ## -; -ClassExpression -: 'classToken' Identifieropt 'name' ClassTail {{}} ## -; -ClassTail -: ClassHeritageopt 'leftBrace' ClassBodyopt 'rightBrace' -; -ClassHeritageopt -: -| ClassHeritage -; -ClassHeritage -: 'extendsToken' LeftHandSideExpression 'superclass' -; -ClassBodyopt -: -| ClassBody -; -ClassBody -: ClassElementList -; -ClassElementList -: ClassElement 'element' -| ClassElementList ClassElement 'element' -; -ClassElement -: MethodDefinition -| 'staticToken' MethodDefinition 'method' {{StaticMethodDefinition}} -| 'semicolon' {{EmptyStatement}} -; -#A.5 -Script -: ScriptBodyopt {{}} -; -ScriptBodyopt -: -| ScriptBody -; -ScriptBody -: StatementList -; -Module -: ModuleBodyopt {{}} -; -ModuleBodyopt -: -| ModuleBody -; -ModuleBody -: ModuleItemList -; -ModuleItemList -: ModuleItem 'item' -| ModuleItemList ModuleItem 'item' -; -ModuleItem -: ImportDeclaration -| ExportDeclaration -| StatementListItem -; -ImportDeclaration -: 'importToken' ImportClause FromClause 'semicolon' {{}} -| 'importToken' ModuleSpecifier 'semicolon' {{}} -; -ImportClause -: ImportedDefaultBinding 'import' -| NameSpaceImport 'import' -| NamedImports 'import' -| ImportedDefaultBinding 'import' 'comma' NameSpaceImport 'import' -| ImportedDefaultBinding 'import' 'comma' NamedImports 'import' -; -ImportedDefaultBinding -: ImportedBinding -; -NameSpaceImport -: 'star' 'asToken' ImportedBinding 'import' {{}} -; -NamedImports -: 'leftBrace' 'rightBrace' {{}} -| 'leftBrace' ImportsList 'rightBrace' {{}} -| 'leftBrace' ImportsList 'comma' 'rightBrace' {{}} -; -FromClause -: 'fromToken' ModuleSpecifier -; -ImportsList -: ImportSpecifier 'specifier' -| ImportsList 'comma' ImportSpecifier 'specifier' -; -ImportSpecifier -: ImportedBinding 'binding' {{}} -| 'name' 'asToken' ImportedBinding 'binding' {{}} -; -ModuleSpecifier -: StringLiteral 'from' -; -ImportedBinding -: Identifier ## -; -ExportDeclaration -: 'exportToken' 'star' FromClause 'semicolon' {{}} -| 'exportToken' ExportClause FromClause 'semicolon' {{}} -| 'exportToken' ExportClause 'semicolon' {{}} -| 'exportToken' VariableStatement 'statement' {{}} -| 'exportToken' Declaration 'declaration' {{}} -#| 'exportToken' 'defaultToken' HoistableDeclaration 'declaration' {{}} #handled by AssignmentExpression version below -#| 'exportToken' 'defaultToken' ClassDeclaration 'declaration' {{}} #handled by AssignmentExpression version below -| 'exportToken' 'defaultToken' AssignmentExpression 'statement' 'semicolon' {{}} -; -ExportClause -: 'leftBrace' 'rightBrace' -| 'leftBrace' ExportsList 'rightBrace' -| 'leftBrace' ExportsList 'comma' 'rightBrace' -; -ExportsList -: ExportSpecifier 'specifier' -| ExportsList 'comma' ExportSpecifier 'specifier' -; -ExportSpecifier -: 'name' {{}} -| 'name' 'asToken' 'as' {{}} -; - - -NullLiteral -: -; -BooleanLiteral -: -| -; -StringLiteral -: -; -NumericLiteral -: -; -RegularExpressionLiteral -: 'value' {{RegularExpressionLiteral}} -; -################################# -# JSX Extensions -################################# -jsx jsxText -: \< -; -PrimaryExpression -: JSXElement -| JSXFragment -; -JSXElement -: JSXSelfClosingElement -| JSXOpeningElement 'openingElement' StartJSXText JSXChildren JSXClosingElement 'closingElement' {{XElement}} -; -JSXSelfClosingElement -: SwitchToJSX 'ltToken' JSXElementName 'name' JSXAttributes? 'slashToken' SwitchToJSXTextOrDefault1 'gtToken' {{XSelfClosingElement}} -; -JSXOpeningElement -: SwitchToJSX 'ltToken' JSXElementName 'name' JSXAttributes? SwitchToJSXText 'gtToken' {{XOpeningElement}} -; -JSXClosingElement -: SwitchToJSX 'ltToken' 'slashToken' JSXElementName 'name' SwitchToJSXTextOrDefault2 'gtToken' {{XClosingElement}} -; -JSXFragment -: 'ltToken' SwitchToJSXText 'gtToken' StartJSXText JSXChildren 'ltToken' 'slashToken' SwitchToJSXTextOrDefault2 'gtToken' {{XFragment}} -; -JSXElementName -: 'identifier' {{XElementName}} -| JSXNamespacedName -| JSXMemberExpression -; -jsx -: ( | \-)* -; -JSXNamespacedName -: 'identifier' 'colonToken' 'identifier' {{XNamespacedName}} -; -JSXMemberExpression -: ( 'identifier' 'periodToken')+ 'identifier' {{XMemberExpression}} -; -JSXAttributes -: (JSXSpreadAttribute 'attribute' | JSXAttribute 'attribute')+ -; -JSXSpreadAttribute -: SwitchToDefault 'leftBrace' SpreadElement 'element' SwitchToJSX 'rightBrace' {{XSpreadAttribute}} -; -JSXAttribute -: JSXAttributeName 'name' JSXAttributeInitializer? {{XAttribute}} -; -JSXAttributeName -: 'identifier' {{XElementName}} -| JSXNamespacedName -; -JSXAttributeInitializer -: 'equalToken' JSXAttributeValue 'value' -; -JSXAttributeValue -: StringLiteral 'value' {{StringLiteral}} -| SwitchToDefault 'leftBrace' AssignmentExpression 'expression' SwitchToJSX 'rightBrace' {{XCodeExpression}} -| JSXElement -| JSXFragment -; -JSXChildren -: JSXChild 'item' * -; -JSXChild -: 'value' {{XText}} -| JSXElement -| SwitchToDefault 'leftBrace' JSXChildExpression 'expression' ? SwitchToJSXText 'rightBrace' {{XCodeExpression}} -; -jsxText -: [^\{\<\>\}]+ -; -JSXChildExpression -: AssignmentExpression -| SpreadElement -; -SwitchToJSX -: [self scope: #jsx. nil] -; -SwitchToJSXText -: [self scope: #jsxText. nil] -; -StartJSXText -: [#jsxText] -; -SwitchToJSXTextOrDefault1 -: [self switchToJSXTextOrDefault: 1] -; -SwitchToJSXTextOrDefault2 -: [self switchToJSXTextOrDefault: 2] -; -SwitchToDefault -: [self scope: #default. #default] -;" -] - -{ #category : #'file types' } -JSParser class >> fileExtension [ - ^ '.js' -] - -{ #category : #'file types' } -JSParser class >> fileExtensionType [ - ^ 'Javascript files' -] - -{ #category : #private } -JSParser class >> keywords [ - ^ keywords - ifNil: - [ keywords := #(break case catch class const continue debugger default delete do else export extends finally for function if import in instanceof new return super switch this throw try typeof var void while with yield) - asSet collect: [ :each | each asString ] ] -] - -{ #category : #generated } -JSParser class >> reduceTable [ -^#( - #(137 0 #reduceActionForStartTemplateLiteral1: 10525697 true ) - #(299 0 #reduceActionForSwitchToJSX1: 35507201 true ) - #(254 0 #reduceActionForModuleBodyopt1: 30284801 false ) - #(251 0 #reduceActionForModuleBodyopt1: 30192641 false ) - #(119 0 #reduceActionForParameterListopt1: 8295425 false ) - #(174 0 #reduceActionForModuleBodyopt1: 19740673 false ) - #(124 0 #reduceActionForModuleBodyopt1: 9136129 false ) - #(195 1 #reduceActionForEmptyStatement1: 22236161 false ) - #(203 0 #reduceActionForCheckEOL1: 25078785 true ) - #(113 0 #nil 7064577 false ) - #(178 1 #liftFirstValue: 20032514 false ) - #(273 1 #liftFirstValue: 32862210 false ) - #(178 1 #liftFirstValue: 20032513 false ) - #(272 1 #liftFirstValue: 32838657 false ) - #(116 1 #reduceActionForPrimaryExpression1: 7254017 false ) - #(273 1 #liftFirstValue: 32862209 false ) - #(240 0 #nil 29422593 false ) - #(114 1 #reduceActionForIdentifier1: 7096321 false ) - #(274 1 #liftFirstValue: 32899073 false ) - #(275 1 #liftFirstValue: 32926721 false ) - #(276 1 #reduceActionForRegularExpressionLiteral1: 32956417 false ) - #(136 1 #reduceActionForTemplateLiteral1: 10374145 false ) - #(300 0 #reduceActionForSwitchToJSXText1: 35548161 true ) - #(116 1 #liftFirstValue: 7254018 false ) - #(231 1 #reduceActionForArrowParameters1: 27767809 false ) - #(140 1 #liftFirstValue: 10793985 false ) - #(116 1 #liftFirstValue: 7254027 false ) - #(231 1 #reduceActionForArrowParameters2: 27767810 false ) - #(116 1 #liftFirstValue: 7254019 false ) - #(116 1 #liftFirstValue: 7254020 false ) - #(116 1 #liftFirstValue: 7254021 false ) - #(116 1 #liftFirstValue: 7254026 false ) - #(144 1 #liftFirstValue: 11692033 false ) - #(140 1 #liftFirstValue: 10793989 false ) - #(140 1 #liftFirstValue: 10793990 false ) - #(142 1 #liftFirstValue: 11560961 false ) - #(149 1 #liftFirstValue: 12770305 false ) - #(149 1 #liftFirstValue: 12770306 false ) - #(145 1 #liftFirstValue: 11782146 false ) - #(150 1 #liftFirstValue: 12831749 false ) - #(151 1 #liftFirstValue: 13210625 false ) - #(152 1 #liftFirstValue: 13644801 false ) - #(153 1 #liftFirstValue: 13814785 false ) - #(154 1 #liftFirstValue: 14235649 false ) - #(155 1 #liftFirstValue: 14533633 false ) - #(156 1 #liftFirstValue: 14918657 false ) - #(157 1 #liftFirstValue: 15656961 false ) - #(158 1 #liftFirstValue: 16187393 false ) - #(159 1 #liftFirstValue: 16351233 false ) - #(160 1 #liftFirstValue: 16519169 false ) - #(161 1 #liftFirstValue: 16686081 false ) - #(162 1 #liftFirstValue: 16856065 false ) - #(163 1 #liftFirstValue: 17026049 false ) - #(164 1 #liftFirstValue: 17247233 false ) - #(167 1 #liftFirstValue: 18969601 false ) - #(176 1 #liftFirstValue: 19875841 false ) - #(168 1 #liftFirstValue: 19121158 false ) - #(168 1 #liftFirstValue: 19121153 false ) - #(172 1 #liftFirstValue: 19615745 false ) - #(257 1 #liftFirstValue: 30420995 false ) - #(176 1 #liftFirstValue: 19875842 false ) - #(168 1 #liftFirstValue: 19121154 false ) - #(168 1 #liftFirstValue: 19121155 false ) - #(168 1 #liftFirstValue: 19121156 false ) - #(168 1 #liftFirstValue: 19121157 false ) - #(171 1 #liftFirstValue: 19553281 false ) - #(168 1 #liftFirstValue: 19121159 false ) - #(168 1 #liftFirstValue: 19121160 false ) - #(168 1 #liftFirstValue: 19121161 false ) - #(168 1 #liftFirstValue: 19121162 false ) - #(171 1 #liftFirstValue: 19553282 false ) - #(168 1 #liftFirstValue: 19121163 false ) - #(168 1 #liftFirstValue: 19121164 false ) - #(168 1 #liftFirstValue: 19121165 false ) - #(168 1 #liftFirstValue: 19121166 false ) - #(116 1 #liftFirstValue: 7254022 false ) - #(164 1 #liftFirstValue: 17247235 false ) - #(116 1 #liftFirstValue: 7254024 false ) - #(164 1 #liftFirstValue: 17247234 false ) - #(116 1 #liftFirstValue: 7254023 false ) - #(112 1 #liftFirstValue: 6887425 false ) - #(253 1 #reduceActionForModule1: 30254081 false ) - #(254 1 #reduceActionForModuleBodyopt2: 30284802 false ) - #(255 1 #reduceActionForModuleBodyopt2: 30316545 false ) - #(256 1 #reduceActionForModuleItemList1: 30347265 false ) - #(257 1 #liftFirstValue: 30420993 false ) - #(257 1 #liftFirstValue: 30420994 false ) - #(121 1 #reduceActionForLiteral1: 8440833 false ) - #(121 1 #reduceActionForLiteral2: 8440834 false ) - #(121 1 #reduceActionForLiteral4: 8440836 false ) - #(121 1 #reduceActionForLiteral3: 8440835 false ) - #(116 1 #liftFirstValue: 7254025 false ) - #(116 1 #liftFirstValue: 7254028 false ) - #(277 1 #liftFirstValue: 33208321 false ) - #(301 0 #reduceActionForStartJSXText1: 35597313 true ) - #(116 1 #liftFirstValue: 7254029 false ) - #(252 1 #reduceActionForModuleBodyopt2: 30224385 false ) - #(175 1 #reduceActionForModuleItemList1: 19778561 false ) - #(250 1 #reduceActionForScript1: 30161921 false ) - #(251 1 #reduceActionForModuleBodyopt2: 30192642 false ) - #(134 0 #reduceActionForInitializeropt1: 10275841 false ) - #(119 1 #reduceActionForModuleBodyopt2: 8295426 false ) - #(184 1 #liftFirstValue: 20713473 false ) - #(184 1 #liftFirstValue: 20713474 false ) - #(120 1 #reduceActionForParameterList1: 8334337 false ) - #(191 1 #liftFirstValue: 21811201 false ) - #(127 2 #reduceActionForObjectLiteral1: 9315329 false ) - #(115 1 #reduceActionForIdentifier1: 7152641 false ) - #(129 1 #liftFirstValue: 9707521 false ) - #(131 1 #liftFirstValue: 9945089 false ) - #(128 1 #reduceActionForParameterList1: 9572353 false ) - #(130 1 #liftFirstValue: 9882625 false ) - #(130 1 #liftFirstValue: 9882626 false ) - #(129 1 #liftFirstValue: 9707522 false ) - #(174 1 #reduceActionForModuleBodyopt2: 19740674 false ) - #(129 1 #liftFirstValue: 9707524 false ) - #(233 1 #liftFirstValue: 27988994 false ) - #(131 1 #reduceActionForIdentifier1: 9945090 false ) - #(131 1 #reduceActionForIdentifier1: 9945091 false ) - #(125 1 #reduceActionForModuleItemList1: 9161729 false ) - #(124 1 #reduceActionForModuleBodyopt2: 9136130 false ) - #(151 2 #reduceActionForUnaryExpression5: 13210629 false ) - #(150 2 #reduceActionForUpdateExpression3: 12831747 false ) - #(151 2 #reduceActionForUnaryExpression5: 13210630 false ) - #(150 2 #reduceActionForUpdateExpression3: 12831748 false ) - #(151 2 #reduceActionForUnaryExpression5: 13210631 false ) - #(151 2 #reduceActionForUnaryExpression5: 13210632 false ) - #(244 0 #reduceActionForInitializeropt1: 29727745 false ) - #(113 1 #liftFirstValue: 7064578 false ) - #(219 2 #reduceActionForDebuggerStatement1: 26677249 false ) - #(151 2 #reduceActionForUnaryExpression5: 13210626 false ) - #(268 2 #reduceActionForExportDeclaration5: 31635461 false ) - #(169 1 #liftFirstValue: 19404801 false ) - #(169 1 #liftFirstValue: 19404803 false ) - #(268 2 #reduceActionForExportDeclaration4: 31635460 false ) - #(170 1 #liftFirstValue: 19483649 false ) - #(170 1 #liftFirstValue: 19483650 false ) - #(169 1 #liftFirstValue: 19404802 false ) - #(166 0 #nil 18937857 false ) - #(267 1 #liftFirstValue: 31600641 false ) - #(259 1 #reduceActionForImportClause1: 30667777 false ) - #(259 1 #reduceActionForImportClause1: 30667778 false ) - #(259 1 #reduceActionForImportClause1: 30667779 false ) - #(260 1 #liftFirstValue: 30920705 false ) - #(266 1 #liftFirstValue: 31558657 false ) - #(144 2 #reduceActionForNewExpression2: 11692034 false ) - #(146 2 #reduceActionForSuperCall1: 12246017 false ) - #(151 2 #reduceActionForUnaryExpression5: 13210628 false ) - #(182 1 #reduceActionForParameterList1: 20414465 false ) - #(151 2 #reduceActionForUnaryExpression5: 13210627 false ) - #(240 1 #liftFirstValue: 29422594 false ) - #(140 2 #reduceActionForMemberExpression4: 10793988 false ) - #(145 2 #reduceActionForCallExpression1: 11782145 false ) - #(145 2 #reduceActionForMemberExpression4: 11782150 false ) - #(145 2 #reduceActionForCallExpression1: 11782147 false ) - #(165 1 #liftFirstValue: 17430531 false ) - #(165 1 #liftFirstValue: 17430535 false ) - #(165 1 #liftFirstValue: 17430536 false ) - #(165 1 #liftFirstValue: 17430537 false ) - #(165 1 #liftFirstValue: 17430529 false ) - #(165 1 #liftFirstValue: 17430530 false ) - #(165 1 #liftFirstValue: 17430532 false ) - #(165 1 #liftFirstValue: 17430538 false ) - #(165 1 #liftFirstValue: 17430539 false ) - #(165 1 #liftFirstValue: 17430540 false ) - #(165 1 #liftFirstValue: 17430534 false ) - #(165 1 #liftFirstValue: 17430533 false ) - #(150 2 #reduceActionForUpdateExpression1: 12831745 false ) - #(150 2 #reduceActionForUpdateExpression1: 12831746 false ) - #(196 2 #reduceActionForExpressionStatement1: 22286337 false ) - #(179 1 #reduceActionForParameterList1: 20064257 false ) - #(256 2 #reduceActionForModuleItemList2: 30347266 false ) - #(296 0 #reduceActionForModuleBodyopt1: 35192833 false ) - #(175 2 #reduceActionForModuleItemList2: 19778562 false ) - #(185 2 #reduceActionForObjectBindingPattern1: 20776961 false ) - #(187 1 #reduceActionForParameterList1: 21406721 false ) - #(190 1 #liftFirstValue: 21697537 false ) - #(193 0 #nil 22005761 false ) - #(188 1 #reduceActionForBindingElementList1: 21525505 false ) - #(192 2 #reduceActionForSingleNameBinding1: 21917697 false ) - #(134 1 #reduceActionForModuleBodyopt2: 10275842 false ) - #(118 3 #reduceActionForCoverParenthesizedExpressionAndArrowParameterList1: 7671809 false ) - #(117 3 #reduceActionForParenthesizedExpression1: 7565313 false ) - #(191 2 #reduceActionForSingleNameBinding1: 21811202 false ) - #(133 2 #reduceActionForCoverInitializedName1: 10192897 false ) - #(127 3 #reduceActionForObjectLiteral2: 9315330 false ) - #(223 0 #reduceActionForFormalParameters1: 27235329 false ) - #(173 3 #reduceActionForBlock1: 19641345 false ) - #(122 3 #reduceActionForArrayLiteral2: 8623106 false ) - #(122 3 #reduceActionForArrayLiteral1: 8623105 false ) - #(123 2 #reduceActionForElementList2: 8886274 false ) - #(123 2 #reduceActionForElementList2: 8886273 false ) - #(125 2 #reduceActionForModuleItemList2: 9161730 false ) - #(242 3 #reduceActionForClassExpression1: 29549569 false ) - #(244 1 #reduceActionForModuleBodyopt2: 29727746 false ) - #(269 2 #reduceActionForExportClause1: 32396289 false ) - #(271 1 #reduceActionForExportSpecifier1: 32716801 false ) - #(270 1 #reduceActionForParameterList1: 32612353 false ) - #(268 3 #reduceActionForExportDeclaration3: 31635459 false ) - #(166 1 #liftFirstValue: 18937858 false ) - #(262 2 #reduceActionForNamedImports1: 31045633 false ) - #(264 1 #reduceActionForParameterList1: 31328257 false ) - #(265 1 #reduceActionForImportSpecifier1: 31432705 false ) - #(258 3 #reduceActionForImportDeclaration2: 30495746 false ) - #(143 3 #reduceActionForNewTarget1: 11588609 false ) - #(140 3 #reduceActionForMemberExpression7: 10793991 false ) - #(147 2 #reduceActionForArguments1: 12316673 false ) - #(148 1 #reduceActionForArgumentList1: 12502017 false ) - #(141 3 #reduceActionForSuperProperty2: 11295746 false ) - #(214 3 #reduceActionForThrowStatement1: 26173441 false ) - #(215 3 #reduceActionForTryStatement1: 26269697 false ) - #(215 3 #reduceActionForTryStatement2: 26269698 false ) - #(183 2 #reduceActionForSingleNameBinding1: 20550657 false ) - #(181 3 #reduceActionForVariableStatement1: 20319233 false ) - #(183 2 #reduceActionForVariableDeclaration2: 20550658 false ) - #(239 3 #reduceActionForYieldExpression1: 29331457 false ) - #(213 1 #liftFirstValue: 26079233 false ) - #(212 3 #reduceActionForLabelledStatement1: 25979905 false ) - #(140 3 #reduceActionForMemberExpression3: 10793987 false ) - #(145 3 #reduceActionForMemberExpression3: 11782149 false ) - #(164 3 #reduceActionForAssignmentExpression4: 17247236 false ) - #(152 3 #reduceActionForExponentiationExpression2: 13644802 false ) - #(153 3 #reduceActionForExponentiationExpression2: 13814787 false ) - #(153 3 #reduceActionForExponentiationExpression2: 13814786 false ) - #(153 3 #reduceActionForExponentiationExpression2: 13814788 false ) - #(154 3 #reduceActionForExponentiationExpression2: 14235650 false ) - #(154 3 #reduceActionForExponentiationExpression2: 14235651 false ) - #(155 3 #reduceActionForExponentiationExpression2: 14533634 false ) - #(155 3 #reduceActionForExponentiationExpression2: 14533635 false ) - #(155 3 #reduceActionForExponentiationExpression2: 14533636 false ) - #(156 3 #reduceActionForExponentiationExpression2: 14918658 false ) - #(156 3 #reduceActionForExponentiationExpression2: 14918659 false ) - #(156 3 #reduceActionForExponentiationExpression2: 14918660 false ) - #(156 3 #reduceActionForExponentiationExpression2: 14918661 false ) - #(156 3 #reduceActionForExponentiationExpression2: 14918663 false ) - #(156 3 #reduceActionForExponentiationExpression2: 14918662 false ) - #(157 3 #reduceActionForExponentiationExpression2: 15656962 false ) - #(157 3 #reduceActionForExponentiationExpression2: 15656964 false ) - #(157 3 #reduceActionForExponentiationExpression2: 15656963 false ) - #(157 3 #reduceActionForExponentiationExpression2: 15656965 false ) - #(158 3 #reduceActionForExponentiationExpression2: 16187394 false ) - #(159 3 #reduceActionForExponentiationExpression2: 16351234 false ) - #(160 3 #reduceActionForExponentiationExpression2: 16519170 false ) - #(161 3 #reduceActionForExponentiationExpression2: 16686082 false ) - #(162 3 #reduceActionForExponentiationExpression2: 16856066 false ) - #(167 3 #reduceActionForExpression2: 18969602 false ) - #(180 2 #reduceActionForSingleNameBinding1: 20162561 false ) - #(177 3 #reduceActionForLexicalDeclaration1: 19943425 false ) - #(180 2 #reduceActionForVariableDeclaration2: 20162562 false ) - #(232 1 #reduceActionForConciseBody1: 27868161 false ) - #(230 3 #reduceActionForArrowFunction1: 27700225 false ) - #(304 0 #reduceActionForSwitchToDefault1: 35759105 true ) - #(295 1 #reduceActionForModuleBodyopt2: 35178497 false ) - #(282 1 #reduceActionForJSXElementName1: 34034689 false ) - #(282 1 #liftFirstValue: 34034690 false ) - #(282 1 #liftFirstValue: 34034691 false ) - #(286 1 #reduceActionFor__JSXIdentifier___identifier___period___periodToken___1: 34361345 false ) - #(185 3 #reduceActionForObjectBindingPattern2: 20776962 false ) - #(189 2 #reduceActionForBindingElisionElement1: 21634049 false ) - #(193 1 #liftFirstValue: 22005762 false ) - #(186 3 #reduceActionForArrayBindingPattern2: 21032962 false ) - #(135 2 #reduceActionForInitializer1: 10309633 false ) - #(120 3 #reduceActionForParameterList2: 8334338 false ) - #(132 3 #reduceActionForComputedPropertyName1: 10072065 false ) - #(127 4 #reduceActionForObjectLiteral3: 9315331 false ) - #(128 3 #reduceActionForParameterList2: 9572354 false ) - #(227 1 #liftFirstValue: 27579393 false ) - #(226 1 #liftFirstValue: 27533313 false ) - #(222 1 #reduceActionForModuleBodyopt2: 27190273 false ) - #(223 1 #reduceActionForModuleBodyopt2: 27235330 false ) - #(224 1 #reduceActionForFormalParameterList2: 27279362 false ) - #(224 1 #reduceActionForFormalParameterList1: 27279361 false ) - #(225 1 #reduceActionForParameterList1: 27427841 false ) - #(129 3 #reduceActionForPropertyDefinition3: 9707523 false ) - #(122 4 #reduceActionForArrayLiteral3: 8623107 false ) - #(126 2 #reduceActionForSpreadElement1: 9217025 false ) - #(202 4 #reduceActionForBreakStatement1: 24975361 false ) - #(245 2 #reduceActionForInitializer1: 29765633 false ) - #(246 0 #reduceActionForModuleBodyopt1: 29846529 false ) - #(201 4 #reduceActionForContinueStatement1: 24862721 false ) - #(269 3 #reduceActionForExportClause2: 32396290 false ) - #(263 2 #reduceActionForInitializer1: 31277057 false ) - #(268 4 #reduceActionForExportDeclaration1: 31635457 false ) - #(241 3 #reduceActionForClassExpression1: 29451265 false ) - #(268 4 #reduceActionForExportDeclaration6: 31635462 false ) - #(268 4 #reduceActionForExportDeclaration2: 31635458 false ) - #(200 1 #liftFirstValue: 24815617 false ) - #(200 1 #liftFirstValue: 24815618 false ) - #(199 2 #reduceActionForInitializer1: 24751105 false ) - #(262 3 #reduceActionForNamedImports2: 31045634 false ) - #(261 3 #reduceActionForNameSpaceImport1: 30964737 false ) - #(258 4 #reduceActionForImportDeclaration1: 30495745 false ) - #(259 3 #reduceActionForImportClause4: 30667780 false ) - #(259 3 #reduceActionForImportClause4: 30667781 false ) - #(204 4 #reduceActionForReturnStatement1: 25113601 false ) - #(148 2 #reduceActionForArgumentList2: 12502018 false ) - #(147 3 #reduceActionForArguments2: 12316674 false ) - #(141 4 #reduceActionForSuperProperty1: 11295745 false ) - #(217 2 #reduceActionForInitializer1: 26565633 false ) - #(215 4 #reduceActionForTryStatement3: 26269699 false ) - #(182 3 #reduceActionForParameterList2: 20414466 false ) - #(138 1 #reduceActionForParameterList1: 10563585 false ) - #(136 4 #reduceActionForTemplateLiteral2: 10374146 false ) - #(140 4 #reduceActionForMemberExpression2: 10793986 false ) - #(145 4 #reduceActionForCallExpression4: 11782148 false ) - #(179 3 #reduceActionForParameterList2: 20064258 false ) - #(229 1 #reduceActionForModuleBodyopt2: 27656193 false ) - #(228 1 #reduceActionForModuleBodyopt2: 27615233 false ) - #(277 4 #reduceActionForJSXElement2: 33208322 false ) - #(297 1 #reduceActionForJSXChild1: 35213313 false ) - #(297 1 #liftFirstValue: 35213314 false ) - #(296 2 #reduceActionForModuleItemList2: 35192834 false ) - #(285 2 #reduceActionForInitializer1: 34361345 false ) - #(302 0 #reduceActionForSwitchToJSXTextOrDefault11: 35625985 true ) - #(292 1 #reduceActionForJSXElementName1: 34785281 false ) - #(292 1 #liftFirstValue: 34785282 false ) - #(289 1 #reduceActionForModuleItemList1: 34488321 false ) - #(287 1 #reduceActionForModuleBodyopt2: 34471937 false ) - #(288 1 #liftFirstValue: 34488321 false ) - #(288 1 #liftFirstValue: 34488322 false ) - #(291 1 #reduceActionForJSXAttribute1: 34702337 false ) - #(284 2 #reduceActionForJSXMemberExpression1: 34338817 false ) - #(286 2 #reduceActionFor__JSXIdentifier___identifier___period___periodToken___2: 34361346 false ) - #(190 3 #reduceActionForBindingProperty2: 21697538 false ) - #(185 4 #reduceActionForObjectBindingPattern3: 20776963 false ) - #(187 3 #reduceActionForParameterList2: 21406722 false ) - #(194 2 #reduceActionForBindingRestElement1: 22053889 false ) - #(194 2 #reduceActionForBindingRestElement1: 22053890 false ) - #(186 4 #reduceActionForArrayBindingPattern1: 21032961 false ) - #(188 3 #reduceActionForBindingElementList2: 21525506 false ) - #(234 1 #liftFirstValue: 28549121 false ) - #(123 4 #reduceActionForElementList4: 8886276 false ) - #(123 4 #reduceActionForElementList4: 8886275 false ) - #(249 1 #reduceActionForEmptyStatement1: 29996035 false ) - #(249 1 #liftFirstValue: 29996033 false ) - #(246 1 #reduceActionForModuleBodyopt2: 29846530 false ) - #(247 1 #reduceActionForModuleBodyopt2: 29876225 false ) - #(248 1 #reduceActionForModuleItemList1: 29907969 false ) - #(271 3 #reduceActionForExportSpecifier2: 32716802 false ) - #(269 4 #reduceActionForExportClause3: 32396291 false ) - #(270 3 #reduceActionForParameterList2: 32612354 false ) - #(197 5 #reduceActionForIfStatement2: 22366210 false ) - #(265 3 #reduceActionForImportSpecifier2: 31432706 false ) - #(262 4 #reduceActionForNamedImports3: 31045635 false ) - #(264 3 #reduceActionForParameterList2: 31328258 false ) - #(147 4 #reduceActionForArguments3: 12316675 false ) - #(148 3 #reduceActionForArgumentList3: 12502019 false ) - #(208 0 #reduceActionForModuleBodyopt1: 25674753 false ) - #(206 5 #reduceActionForSwitchStatement1: 25358337 false ) - #(218 1 #liftFirstValue: 26626049 false ) - #(218 1 #liftFirstValue: 26626050 false ) - #(198 5 #reduceActionForIterationStatement2: 22657026 false ) - #(205 5 #reduceActionForWithStatement1: 25226241 false ) - #(139 2 #reduceActionForTemplateMiddleList1: 10648577 false ) - #(138 2 #reduceActionForTemplateSpans2: 10563586 false ) - #(163 5 #reduceActionForConditionalExpression2: 17026050 false ) - #(232 3 #reduceActionForConciseBody2: 27868162 false ) - #(283 3 #reduceActionForJSXNamespacedName1: 34214913 false ) - #(289 2 #reduceActionForModuleItemList2: 34488322 false ) - #(291 2 #reduceActionForJSXAttribute2: 34702338 false ) - #(279 5 #reduceActionForJSXOpeningElement1: 33542145 false ) - #(118 6 #reduceActionForCoverParenthesizedExpressionAndArrowParameterList2: 7671810 false ) - #(118 6 #reduceActionForCoverParenthesizedExpressionAndArrowParameterList2: 7671811 false ) - #(224 3 #reduceActionForFormalParameterList3: 27279363 false ) - #(225 3 #reduceActionForParameterList2: 27427842 false ) - #(249 2 #reduceActionForClassElement2: 29996034 false ) - #(243 4 #reduceActionForClassTail1: 29631489 false ) - #(248 2 #reduceActionForModuleItemList2: 29907970 false ) - #(148 4 #reduceActionForArgumentList4: 12502020 false ) - #(208 1 #reduceActionForModuleBodyopt2: 25674754 false ) - #(209 1 #reduceActionForModuleItemList1: 25708545 false ) - #(139 3 #reduceActionForTemplateMiddleList2: 10648578 false ) - #(298 1 #liftFirstValue: 35445762 false ) - #(298 1 #liftFirstValue: 35445761 false ) - #(278 6 #reduceActionForJSXSelfClosingElement1: 33358849 false ) - #(279 6 #reduceActionForJSXOpeningElement2: 33542146 false ) - #(294 1 #reduceActionForLiteral4: 34950145 false ) - #(294 1 #liftFirstValue: 34950147 false ) - #(294 1 #liftFirstValue: 34950148 false ) - #(293 2 #reduceActionForInitializer1: 34876417 false ) - #(186 6 #reduceActionForArrayBindingPattern3: 21032963 false ) - #(198 7 #reduceActionForIterationStatement1: 22657025 false ) - #(198 7 #reduceActionForIterationStatement6: 22657030 false ) - #(198 7 #reduceActionForIterationStatement9: 22657033 false ) - #(198 7 #reduceActionForIterationStatement8: 22657032 false ) - #(198 7 #reduceActionForIterationStatement11: 22657035 false ) - #(197 7 #reduceActionForIfStatement1: 22366209 false ) - #(207 3 #reduceActionForCaseBlock1: 25484289 false ) - #(209 2 #reduceActionForModuleItemList2: 25708546 false ) - #(216 5 #reduceActionForCatch1: 26440705 false ) - #(303 0 #reduceActionForSwitchToJSXTextOrDefault21: 35692545 true ) - #(297 4 #reduceActionForJSXChild3: 35213315 false ) - #(278 7 #reduceActionForJSXSelfClosingElement2: 33358850 false ) - #(238 1 #reduceActionForModuleBodyopt2: 29299713 false ) - #(233 7 #reduceActionForMethodDefinition3: 27988995 false ) - #(233 7 #reduceActionForMethodDefinition1: 27988993 false ) - #(198 8 #reduceActionForIterationStatement10: 22657034 false ) - #(198 8 #reduceActionForIterationStatement7: 22657031 false ) - #(198 8 #reduceActionForIterationStatement5: 22657029 false ) - #(221 8 #reduceActionForFunctionExpression1: 26977281 false ) - #(297 5 #reduceActionForJSXChild4: 35213316 false ) - #(290 5 #reduceActionForJSXSpreadAttribute1: 34552833 false ) - #(235 8 #reduceActionForGeneratorMethod1: 28607489 false ) - #(233 8 #reduceActionForMethodDefinition4: 27988996 false ) - #(220 8 #reduceActionForFunctionExpression1: 26763265 false ) - #(198 9 #reduceActionForIterationStatement3: 22657027 false ) - #(237 9 #reduceActionForGeneratorExpression1: 29062145 false ) - #(210 4 #reduceActionForCaseClause1: 25781249 false ) - #(211 3 #reduceActionForDefaultClause1: 25889793 false ) - #(207 5 #reduceActionForCaseBlock2: 25484290 false ) - #(281 9 #reduceActionForJSXFragment1: 33846273 false ) - #(280 6 #reduceActionForJSXClosingElement1: 33686529 false ) - #(236 9 #reduceActionForGeneratorExpression1: 28823553 false ) - #(198 10 #reduceActionForIterationStatement4: 22657028 false ) - #(294 5 #reduceActionForJSXChild4: 34950146 false ) - ). -] - -{ #category : #'generated-accessing' } -JSParser class >> scannerClass [ - ^JSScanner -] - -{ #category : #generated } -JSParser class >> startingStateForExpression [ - ^ 2 -] - -{ #category : #generated } -JSParser class >> startingStateForModule [ - ^ 5 -] - -{ #category : #generated } -JSParser class >> startingStateForScript [ - ^ 4 -] - -{ #category : #generated } -JSParser class >> startingStateForStatement [ - ^ 3 -] - -{ #category : #generated } -JSParser class >> startingStateForgoal [ - ^ 1 -] - -{ #category : #generated } -JSParser class >> symbolNames [ - ^ #('' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'B e g i n' 'goal' 'Identifieropt' 'Identifier' 'IdentifierName' 'PrimaryExpression' 'ParenthesizedExpression' 'CoverParenthesizedExpressionAndArrowParameterList' 'ParameterListopt' 'ParameterList' 'Literal' 'ArrayLiteral' 'ElementList' 'Elisionopt' 'Elision' 'SpreadElement' 'ObjectLiteral' 'PropertyDefinitionList' 'PropertyDefinition' 'PropertyName' 'LiteralPropertyName' 'ComputedPropertyName' 'CoverInitializedName' 'Initializeropt' 'Initializer' 'TemplateLiteral' 'StartTemplateLiteral' 'TemplateSpans' 'TemplateMiddleList' 'MemberExpression' 'SuperProperty' 'MetaProperty' 'NewTarget' 'NewExpression' 'CallExpression' 'SuperCall' 'Arguments' 'ArgumentList' 'LeftHandSideExpression' 'UpdateExpression' 'UnaryExpression' 'ExponentiationExpression' 'MultiplicativeExpression' 'AdditiveExpression' 'ShiftExpression' 'RelationalExpression' 'EqualityExpression' 'BitwiseANDExpression' 'BitwiseXORExpression' 'BitwiseORExpression' 'LogicalANDExpression' 'LogicalORExpression' 'ConditionalExpression' 'AssignmentExpression' 'AssignmentOperator' 'Expressionopt' 'Expression' 'Statement' 'Declaration' 'HoistableDeclaration' 'BreakableStatement' 'BlockStatement' 'Block' 'StatementListopt' 'StatementList' 'StatementListItem' 'LexicalDeclaration' 'LetOrConst' 'BindingList' 'LexicalBinding' 'VariableStatement' 'VariableDeclarationList' 'VariableDeclaration' 'BindingPattern' 'ObjectBindingPattern' 'ArrayBindingPattern' 'BindingPropertyList' 'BindingElementList' 'BindingElisionElement' 'BindingProperty' 'BindingElement' 'SingleNameBinding' 'BindingRestElementopt' 'BindingRestElement' 'EmptyStatement' 'ExpressionStatement' 'IfStatement' 'IterationStatement' 'ForDeclaration' 'ForBinding' 'ContinueStatement' 'BreakStatement' 'CheckEOL' 'ReturnStatement' 'WithStatement' 'SwitchStatement' 'CaseBlock' 'CaseClausesopt' 'CaseClauses' 'CaseClause' 'DefaultClause' 'LabelledStatement' 'LabeledItem' 'ThrowStatement' 'TryStatement' 'Catch' 'Finally' 'CatchParameter' 'DebuggerStatement' 'FunctionDeclaration' 'FunctionExpression' 'StrictFormalParameters' 'FormalParameters' 'FormalParameterList' 'FormalsList' 'FunctionRestParameter' 'FormalParameter' 'FunctionBody' 'FunctionStatementList' 'ArrowFunction' 'ArrowParameters' 'ConciseBody' 'MethodDefinition' 'PropertySetParameterList' 'GeneratorMethod' 'GeneratorDeclaration' 'GeneratorExpression' 'GeneratorBody' 'YieldExpression' 'staropt' 'ClassDeclaration' 'ClassExpression' 'ClassTail' 'ClassHeritageopt' 'ClassHeritage' 'ClassBodyopt' 'ClassBody' 'ClassElementList' 'ClassElement' 'Script' 'ScriptBodyopt' 'ScriptBody' 'Module' 'ModuleBodyopt' 'ModuleBody' 'ModuleItemList' 'ModuleItem' 'ImportDeclaration' 'ImportClause' 'ImportedDefaultBinding' 'NameSpaceImport' 'NamedImports' 'FromClause' 'ImportsList' 'ImportSpecifier' 'ModuleSpecifier' 'ImportedBinding' 'ExportDeclaration' 'ExportClause' 'ExportsList' 'ExportSpecifier' 'NullLiteral' 'BooleanLiteral' 'StringLiteral' 'NumericLiteral' 'RegularExpressionLiteral' 'JSXElement' 'JSXSelfClosingElement' 'JSXOpeningElement' 'JSXClosingElement' 'JSXFragment' 'JSXElementName' 'JSXNamespacedName' 'JSXMemberExpression' '( ''identifier'' ''periodToken'')' '( ''identifier'' ''periodToken'')+' 'JSXAttributes' '(JSXSpreadAttribute ''attribute'' | JSXAttribute ''attribute'')' '(JSXSpreadAttribute ''attribute'' | JSXAttribute ''attribute'')+' 'JSXSpreadAttribute' 'JSXAttribute' 'JSXAttributeName' 'JSXAttributeInitializer' 'JSXAttributeValue' 'JSXChildren' 'JSXChild ''item'' *' 'JSXChild' 'JSXChildExpression' 'SwitchToJSX' 'SwitchToJSXText' 'StartJSXText' 'SwitchToJSXTextOrDefault1' 'SwitchToJSXTextOrDefault2' 'SwitchToDefault' 'E O F' 'error') -] - -{ #category : #generated } -JSParser class >> symbolTypes [ - ^ #(#SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #JSModuleNode #JSModuleNode #JSNameExpressionNode #JSNameExpressionNode #JSNameExpressionNode #JSExpressionNode #JSExpressionNode #OrderedCollection #OrderedCollection #OrderedCollection #JSLiteralNode #JSArrayLiteralNode #OrderedCollection #OrderedCollection #OrderedCollection #JSSpreadExpressionNode #JSObjectLiteralNode #OrderedCollection #JSProgramNode #JSProgramNode #JSNameExpressionNode #JSComputedPropertyNameNode #JSPropertyAssignmentNode #OrderedCollection #OrderedCollection #JSTemplateLiteralNode #ByteSymbol #OrderedCollection #OrderedCollection #JSExpressionNode #JSExpressionNode #JSNewTargetExpressionNode #JSNewTargetExpressionNode #JSExpressionNode #JSExpressionNode #JSSuperCallExpressionNode #OrderedCollection #OrderedCollection #JSExpressionNode #JSExpressionNode #JSExpressionNode #JSExpressionNode #JSExpressionNode #JSExpressionNode #JSExpressionNode #JSExpressionNode #JSExpressionNode #JSExpressionNode #JSExpressionNode #JSExpressionNode #JSExpressionNode #JSExpressionNode #JSExpressionNode #JSExpressionNode #SmaCCToken #JSExpressionNode #JSExpressionNode #JSStatementNode #JSProgramNode #JSFunctionNode #JSStatementNode #JSBlockStatementNode #JSBlockStatementNode #OrderedCollection #OrderedCollection #JSStatementNode #JSLexicalDeclarationNode #SmaCCToken #OrderedCollection #JSProgramNode #JSVariableStatementNode #OrderedCollection #JSProgramNode #JSProgramNode #JSObjectBindingPatternNode #JSArrayBindingPatternNode #OrderedCollection #OrderedCollection #OrderedCollection #JSProgramNode #JSVariableDeclarationNode #JSVariableDeclarationNode #JSRestVariableDeclarationNode #JSRestVariableDeclarationNode #JSEmptyStatementNode #JSExpressionStatementNode #JSIfStatementNode #JSStatementNode #OrderedCollection #JSProgramNode #JSContinueStatementNode #JSBreakStatementNode nil #JSReturnStatementNode #JSWithStatementNode #JSSwitchStatementNode #OrderedCollection #OrderedCollection #OrderedCollection #JSCaseClauseNode #JSDefaultClauseNode #JSLabelledStatementNode #JSStatementNode #JSThrowStatementNode #JSTryStatementNode #OrderedCollection #OrderedCollection #JSProgramNode #JSDebuggerStatementNode #JSFunctionNode #JSFunctionNode #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #JSRestVariableDeclarationNode #JSVariableDeclarationNode #OrderedCollection #OrderedCollection #JSArrowFunctionNode #OrderedCollection #OrderedCollection #JSMethodDefinitionNode #JSVariableDeclarationNode #JSGeneratorMethodDefinitionNode #JSGeneratorFunctionNode #JSGeneratorFunctionNode #OrderedCollection #JSYieldExpressionNode #SmaCCToken #JSClassExpressionNode #JSClassExpressionNode #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #JSProgramNode #JSScriptNode #OrderedCollection #OrderedCollection #JSModuleNode #OrderedCollection #OrderedCollection #OrderedCollection #JSProgramNode #JSImportDeclarationNode #OrderedCollection #JSNameExpressionNode #JSNameSpaceImportNode #JSNamedImportsNode #OrderedCollection #OrderedCollection #JSImportSpecifierNode #SmaCCToken #JSNameExpressionNode #JSExportDeclarationNode #OrderedCollection #OrderedCollection #JSExportSpecifierNode #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #JSRegularExpressionLiteralNode #JSExpressionNode #JSXSelfClosingElementNode #JSXOpeningElementNode #JSXClosingElementNode #JSXFragmentNode #JSProgramNode #JSXNamespacedNameNode #JSXMemberExpressionNode #OrderedCollection #OrderedCollection #OrderedCollection #JSProgramNode #OrderedCollection #JSXSpreadAttributeNode #JSXAttributeNode #JSProgramNode #OrderedCollection #JSExpressionNode #OrderedCollection #OrderedCollection #JSExpressionNode #JSExpressionNode nil nil #ByteSymbol #Object #Object #ByteSymbol #SmaCCToken #SmaCCErrorNode) -] - -{ #category : #generated } -JSParser class >> transitionTable [ -^#( -#[1 0 25 0 1 0 29 0 3 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 1 109 0 54 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 0 93 0 61 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 0 113 0 70 1 109 0 73 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 205 0 112 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 1 209 0 168 1 209 0 171 1 209 0 172 1 209 0 173 1 209 0 176 1 209 0 177 1 109 0 178 1 209 0 181 1 209 0 195 1 209 0 196 1 209 0 197 1 209 0 198 1 209 0 201 1 209 0 202 1 209 0 204 1 209 0 205 1 209 0 206 1 209 0 212 1 209 0 214 1 209 0 215 1 209 0 219 0 245 0 221 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 0 205 0 253 1 197 0 254 1 201 0 255 1 205 1 0 1 209 1 1 1 209 1 2 1 209 1 12 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43 0 14 1 49] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 2 13 0 163 2 13 0 164 2 13 0 167 0 245 0 221 2 13 0 230 1 177 0 231 0 245 0 237 2 13 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 25 0 1 0 29 0 3 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 2 17 0 168 2 17 0 171 2 17 0 172 2 17 0 173 2 17 0 181 2 17 0 195 2 17 0 196 2 17 0 197 2 17 0 198 2 17 0 201 2 17 0 202 2 17 0 204 2 17 0 205 2 17 0 206 2 17 0 212 2 17 0 214 2 17 0 215 2 17 0 219 0 245 0 221 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 25 0 1 0 29 0 3 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 1 109 0 54 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 1 109 0 73 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 2 25 0 168 2 25 0 171 2 25 0 172 2 25 0 173 2 21 0 175 2 25 0 176 2 25 0 177 1 109 0 178 2 25 0 181 2 25 0 195 2 25 0 196 2 25 0 197 2 25 0 198 2 25 0 201 2 25 0 202 2 25 0 204 2 25 0 205 2 25 0 206 2 25 0 212 2 25 0 214 2 25 0 215 2 25 0 219 0 245 0 221 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 2 29 0 250 2 33 0 251 2 37 0 252 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43 0 18 1 49] -#[1 0 25 0 1 0 29 0 3 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 1 109 0 54 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 0 93 0 61 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 0 113 0 70 1 109 0 73 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 1 209 0 168 1 209 0 171 1 209 0 172 1 209 0 173 1 209 0 176 1 209 0 177 1 109 0 178 1 209 0 181 1 209 0 195 1 209 0 196 1 209 0 197 1 209 0 198 1 209 0 201 1 209 0 202 1 209 0 204 1 209 0 205 1 209 0 206 1 209 0 212 1 209 0 214 1 209 0 215 1 209 0 219 0 245 0 221 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 2 41 0 253 1 197 0 254 1 201 0 255 1 205 1 0 1 209 1 1 1 209 1 2 1 209 1 12 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43 0 14 1 49] -#[1 0 25 0 1 0 22 0 2 2 45 0 3 2 49 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 0 22 0 94 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 2 53 0 114 0 245 0 116 0 245 0 117 0 221 0 118 2 57 0 119 2 61 0 120 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 2 65 0 163 2 65 0 164 2 65 0 167 2 69 0 184 2 69 0 185 2 69 0 186 2 81 0 191 2 81 0 192 0 245 0 221 2 65 0 230 1 177 0 231 0 245 0 237 2 65 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 25 0 1 0 29 0 3 0 11 0 4 2 93 0 5 0 37 0 7 2 97 0 25 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 1 109 0 54 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 2 101 0 68 0 109 0 69 1 109 0 73 0 121 0 74 1 221 0 75 0 129 0 77 2 105 0 78 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 2 109 0 98 2 161 0 100 2 165 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 2 113 0 114 2 129 0 115 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 2 121 0 128 2 125 0 129 2 129 0 130 2 129 0 131 2 129 0 132 2 125 0 133 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 2 25 0 168 2 25 0 171 2 25 0 172 2 25 0 173 2 145 0 174 2 149 0 175 2 25 0 176 2 25 0 177 1 109 0 178 2 25 0 181 2 25 0 195 2 25 0 196 2 25 0 197 2 25 0 198 2 25 0 201 2 25 0 202 2 25 0 204 2 25 0 205 2 25 0 206 2 25 0 212 2 25 0 214 2 25 0 215 2 25 0 219 0 245 0 221 1 81 0 230 1 177 0 231 2 125 0 233 2 125 0 235 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 2 161 1 18 2 165 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 30 0 1 0 30 0 3 0 30 0 5 0 30 0 6 0 30 0 34 0 30 0 35 0 30 0 36 0 30 0 37 0 30 0 38 0 30 0 46 0 30 0 53 0 30 0 58 0 30 0 63 0 30 0 67 0 30 0 74 0 30 0 75 0 30 0 80 0 30 0 83 0 30 0 85 0 30 0 87 0 30 0 89 0 30 0 92 0 30 0 93 2 169 0 94 0 30 0 97 0 30 0 100 0 30 0 101 0 30 0 102 0 30 0 104 0 30 0 105 0 30 0 108 2 173 0 123 2 177 0 124 2 181 0 125] -#[0 0 34 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 2 197 0 150 2 197 0 151 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 2 201 0 150 2 201 0 151 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 2 205 0 150 2 205 0 151 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 2 209 0 150 2 209 0 151 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 2 213 0 150 2 213 0 151 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 2 217 0 150 2 217 0 151 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 38 0 7 0 38 0 97 2 221 0 203] -#[1 0 42 0 3 0 42 0 62 2 9 0 97 2 225 0 113 2 225 0 114] -#[0 0 46 0 3 0 5 0 97] -#[1 0 38 0 7 0 38 0 97 2 233 0 203] -#[0 2 237 0 7] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 2 241 0 150 2 241 0 151 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 25 0 1 0 29 0 3 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 2 245 0 168 2 245 0 171 2 245 0 172 2 245 0 173 2 245 0 181 2 245 0 195 2 245 0 196 2 245 0 197 2 245 0 198 2 245 0 201 2 245 0 202 2 245 0 204 2 245 0 205 2 245 0 206 2 245 0 212 2 245 0 214 2 245 0 215 2 245 0 219 0 245 0 221 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 249 0 3 2 253 0 25 3 1 0 53 1 109 0 54 3 5 0 57 3 9 0 67 1 109 0 73 0 161 0 88 3 13 0 169 3 13 0 170 3 13 0 177 1 109 0 178 3 25 0 181 3 13 0 220 3 13 0 236 3 13 0 241 3 41 1 13] -#[0 0 50 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 3 45 0 1] -#[1 0 42 0 1 3 49 0 25 2 9 0 97 3 53 0 113 3 53 0 114] -#[0 3 57 0 1] -#[1 3 61 0 3 3 65 0 25 2 9 0 97 3 89 0 100 3 77 0 114 3 73 1 3 3 77 1 4 3 81 1 5 3 85 1 6 3 89 1 10 3 77 1 11 3 89 1 18] -#[0 0 54 0 3 0 5 0 97] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 3 101 0 21 0 69 0 53 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 3 105 0 80 0 141 0 83 1 225 0 85 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 3 109 0 114 3 109 0 116 3 109 0 117 3 109 0 121 3 109 0 122 3 109 0 127 3 109 0 136 0 241 0 137 3 109 0 140 3 109 0 141 3 109 0 142 3 109 0 143 3 113 0 144 3 109 0 221 3 109 0 237 3 109 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 3 109 1 20 3 109 1 21 3 109 1 22 1 249 1 23 3 109 1 25 2 1 1 43] -#[0 0 58 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[1 0 38 0 1 0 38 0 3 0 38 0 5 0 38 0 7 0 38 0 34 0 38 0 35 0 38 0 36 0 38 0 37 0 38 0 38 0 38 0 46 0 38 0 53 0 38 0 58 0 38 0 63 0 38 0 67 0 38 0 74 0 38 0 75 0 38 0 80 0 38 0 83 0 38 0 85 0 38 0 87 0 38 0 89 0 38 0 92 0 38 0 97 0 38 0 100 0 38 0 101 0 38 0 102 0 38 0 104 0 38 0 105 0 38 0 108 3 117 0 203] -#[1 3 121 0 1 3 125 0 5 3 129 0 21 3 133 0 147] -#[0 3 137 0 1] -#[0 0 62 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 3 141 0 163 3 141 0 164 3 141 0 167 0 245 0 221 3 141 0 230 1 177 0 231 0 245 0 237 3 141 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 0 66 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[1 3 145 0 3 3 149 0 173] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 3 153 0 150 3 153 0 151 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 3 157 0 3 3 161 0 5 2 9 0 97 3 165 0 114 3 169 0 182 3 173 0 183 3 177 0 184 3 177 0 185 3 177 0 186] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 3 181 0 150 3 181 0 151 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 3 185 0 1] -#[0 3 189 0 1] -#[1 0 70 0 1 0 70 0 3 0 70 0 5 3 197 0 25 0 70 0 34 0 70 0 35 0 70 0 36 0 70 0 37 0 70 0 38 0 70 0 46 0 70 0 53 0 70 0 58 0 70 0 63 0 70 0 67 0 70 0 74 0 70 0 75 0 70 0 80 0 70 0 83 0 70 0 85 0 70 0 87 0 70 0 89 0 70 0 92 0 70 0 97 0 70 0 100 0 70 0 101 0 70 0 102 0 70 0 104 0 70 0 105 0 70 0 108 3 197 0 240] -#[1 0 74 0 1 0 74 0 4 0 74 0 5 0 74 0 7 0 74 0 8 0 74 0 9 0 74 0 10 0 74 0 11 0 74 0 12 0 74 0 13 0 74 0 14 0 74 0 15 0 74 0 16 0 74 0 17 0 74 0 18 0 74 0 19 0 74 0 20 0 74 0 21 0 74 0 22 0 74 0 23 0 74 0 24 0 74 0 25 0 74 0 26 0 74 0 27 0 74 0 28 0 74 0 29 0 74 0 30 0 74 0 31 0 74 0 32 0 74 0 33 0 74 0 34 0 74 0 35 0 74 0 36 0 74 0 37 0 74 0 39 0 74 0 40 0 74 0 41 0 74 0 42 0 74 0 43 0 74 0 44 0 74 0 45 0 74 0 47 0 74 0 48 0 74 0 71 0 74 0 72 0 74 0 94 3 201 0 95 0 74 0 104 0 74 0 105] -#[0 0 78 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 0 109 1 49] -#[0 0 82 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 0 86 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 0 90 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[1 0 94 0 13 3 205 1 44] -#[0 0 0 1 49] -#[1 0 98 0 1 0 98 0 2 0 98 0 4 0 98 0 5 0 98 0 6 0 98 0 7 0 98 0 8 0 98 0 9 0 98 0 10 0 98 0 11 0 98 0 12 0 98 0 13 0 98 0 14 0 98 0 15 0 98 0 16 0 98 0 17 0 102 0 18 0 98 0 19 0 98 0 20 0 98 0 21 0 98 0 22 0 98 0 23 0 98 0 24 0 98 0 25 0 98 0 26 0 98 0 27 0 98 0 28 0 98 0 29 0 98 0 30 0 98 0 31 0 98 0 32 0 98 0 33 0 98 0 34 0 98 0 35 0 98 0 36 0 98 0 37 0 98 0 39 0 98 0 40 0 98 0 41 0 98 0 42 0 98 0 43 0 98 0 44 0 98 0 45 0 98 0 47 0 98 0 48 0 98 0 71 0 98 0 72 0 98 0 76 0 98 0 94 0 98 0 95 0 98 0 104 0 98 0 105 0 98 0 106 0 98 0 107 0 98 1 49] -#[0 0 106 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 0 110 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 0 114 0 18] -#[0 0 118 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 0 122 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 0 126 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 0 130 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 3 209 0 105] -#[1 3 121 0 1 0 134 0 2 0 134 0 3 0 134 0 4 3 213 0 5 0 134 0 6 0 134 0 7 0 134 0 8 0 134 0 9 0 134 0 10 0 134 0 11 0 134 0 12 0 134 0 13 0 134 0 14 0 134 0 15 0 134 0 16 0 134 0 17 0 134 0 19 0 134 0 20 3 217 0 21 0 134 0 22 0 134 0 23 0 134 0 24 0 134 0 25 0 134 0 26 0 134 0 27 0 134 0 28 0 134 0 29 0 134 0 30 0 134 0 31 0 134 0 32 0 134 0 33 0 134 0 34 0 134 0 35 0 134 0 36 0 134 0 37 0 134 0 39 0 134 0 40 0 134 0 41 0 134 0 42 0 134 0 43 0 134 0 44 0 134 0 45 0 134 0 47 0 134 0 48 0 134 0 71 0 134 0 72 0 134 0 76 0 134 0 94 0 134 0 95 0 197 0 104 0 6 0 105 0 134 0 106 0 134 0 107 3 221 0 136 0 241 0 137 3 225 0 147 0 134 1 49] -#[0 0 138 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 0 142 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 0 146 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 0 150 0 2 0 3 0 4 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 106 0 107 1 49] -#[1 3 121 0 1 0 154 0 2 0 154 0 3 0 154 0 4 3 229 0 5 0 154 0 6 0 154 0 7 0 154 0 8 0 154 0 9 0 154 0 10 0 154 0 11 0 154 0 12 0 154 0 13 0 154 0 14 0 154 0 15 0 154 0 16 0 154 0 17 0 154 0 19 0 154 0 20 3 233 0 21 0 154 0 22 0 154 0 23 0 154 0 24 0 154 0 25 0 154 0 26 0 154 0 27 0 154 0 28 0 154 0 29 0 154 0 30 0 154 0 31 0 154 0 32 0 154 0 33 0 154 0 34 0 154 0 35 0 154 0 36 0 154 0 37 0 154 0 39 0 154 0 40 0 154 0 41 0 154 0 42 0 154 0 43 0 154 0 44 0 154 0 45 0 154 0 47 0 154 0 48 0 154 0 71 0 154 0 72 0 154 0 76 0 154 0 94 0 154 0 95 0 197 0 104 0 6 0 105 0 154 0 106 0 154 0 107 3 237 0 136 0 241 0 137 3 241 0 147 0 154 1 49] -#[0 0 158 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[1 0 162 0 2 0 162 0 4 0 162 0 6 0 162 0 7 0 162 0 8 4 45 0 9 0 162 0 10 0 162 0 11 4 45 0 12 0 162 0 13 0 162 0 14 4 45 0 15 4 45 0 16 0 162 0 17 0 162 0 19 0 162 0 20 4 45 0 22 0 162 0 23 0 162 0 24 0 162 0 25 0 162 0 26 4 45 0 27 4 45 0 28 4 45 0 29 4 45 0 30 4 45 0 31 4 45 0 32 4 45 0 33 0 162 0 34 4 37 0 35 0 162 0 36 4 41 0 37 0 162 0 39 0 162 0 40 0 162 0 41 0 162 0 42 0 162 0 43 0 162 0 44 0 162 0 45 0 162 0 47 0 162 0 48 0 162 0 71 0 162 0 72 0 162 0 76 0 162 0 94 0 162 0 95 0 162 0 106 0 162 0 107 4 45 0 165 0 162 1 49] -#[0 0 166 0 2 0 4 0 6 0 7 0 8 0 10 0 11 0 13 0 14 0 17 0 19 0 20 0 23 0 24 0 25 0 26 0 34 0 36 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 106 0 107 1 49] -#[1 0 170 0 2 0 170 0 4 0 170 0 6 0 170 0 7 0 170 0 8 0 170 0 10 0 170 0 11 0 170 0 13 0 170 0 14 0 170 0 17 0 170 0 19 0 170 0 20 0 170 0 23 0 170 0 24 0 170 0 25 4 49 0 26 0 170 0 34 0 170 0 36 0 170 0 39 0 170 0 40 0 170 0 41 0 170 0 42 0 170 0 43 0 170 0 44 0 170 0 45 0 170 0 47 0 170 0 48 0 170 0 71 0 170 0 72 0 170 0 76 0 170 0 94 0 170 0 95 0 170 0 106 0 170 0 107 0 170 1 49] -#[0 0 174 0 2 0 4 0 6 0 7 0 8 0 10 0 11 0 13 0 14 0 17 0 19 0 20 0 23 0 24 0 25 0 34 0 36 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 106 0 107 1 49] -#[1 0 178 0 2 0 178 0 4 0 178 0 6 0 178 0 7 4 53 0 8 0 178 0 10 0 178 0 11 0 178 0 13 0 178 0 14 0 178 0 17 0 178 0 19 0 178 0 20 0 178 0 23 0 178 0 24 4 57 0 25 0 178 0 34 0 178 0 36 0 178 0 39 0 178 0 40 0 178 0 41 4 61 0 42 0 178 0 43 0 178 0 44 0 178 0 45 0 178 0 47 0 178 0 48 0 178 0 71 0 178 0 72 0 178 0 76 0 178 0 94 0 178 0 95 0 178 0 106 0 178 0 107 0 178 1 49] -#[1 0 182 0 2 0 182 0 4 0 182 0 6 0 182 0 7 0 182 0 10 0 182 0 11 0 182 0 13 0 182 0 14 0 182 0 17 0 182 0 19 0 182 0 20 0 182 0 23 0 182 0 24 4 65 0 34 4 69 0 36 0 182 0 39 0 182 0 40 0 182 0 41 0 182 0 43 0 182 0 44 0 182 0 45 0 182 0 47 0 182 0 48 0 182 0 71 0 182 0 72 0 182 0 76 0 182 0 94 0 182 0 95 0 182 0 106 0 182 0 107 0 182 1 49] -#[1 0 186 0 2 0 186 0 4 0 186 0 6 0 186 0 7 0 186 0 10 4 73 0 11 0 186 0 13 4 77 0 14 4 81 0 17 0 186 0 19 0 186 0 20 0 186 0 23 0 186 0 24 0 186 0 39 0 186 0 40 0 186 0 41 0 186 0 43 0 186 0 44 0 186 0 45 0 186 0 47 0 186 0 48 0 186 0 71 0 186 0 72 0 186 0 76 0 186 0 94 0 186 0 95 0 186 0 106 0 186 0 107 0 186 1 49] -#[1 0 190 0 2 0 190 0 4 0 190 0 6 0 190 0 7 4 85 0 10 4 89 0 13 4 93 0 19 4 97 0 20 0 190 0 23 0 190 0 24 0 190 0 39 0 190 0 40 0 190 0 41 0 190 0 43 0 190 0 44 0 190 0 45 0 190 0 47 0 190 0 48 4 101 0 71 4 105 0 72 0 190 0 76 0 190 0 94 0 190 0 95 0 190 0 106 0 190 0 107 0 190 1 49] -#[1 0 194 0 2 0 194 0 4 0 194 0 6 0 194 0 7 4 109 0 23 4 113 0 24 0 194 0 39 0 194 0 40 0 194 0 41 0 194 0 43 0 194 0 44 0 194 0 45 4 117 0 47 4 121 0 48 0 194 0 76 0 194 0 94 0 194 0 95 0 194 0 106 0 194 0 107 0 194 1 49] -#[1 0 198 0 2 0 198 0 4 0 198 0 6 0 198 0 7 4 125 0 39 0 198 0 40 0 198 0 41 0 198 0 43 0 198 0 44 0 198 0 45 0 198 0 76 0 198 0 94 0 198 0 95 0 198 0 106 0 198 0 107 0 198 1 49] -#[1 0 202 0 2 0 202 0 4 0 202 0 6 0 202 0 7 0 202 0 40 0 202 0 41 0 202 0 43 0 202 0 44 4 129 0 45 0 202 0 76 0 202 0 94 0 202 0 95 0 202 0 106 0 202 0 107 0 202 1 49] -#[1 0 206 0 2 0 206 0 4 0 206 0 6 0 206 0 7 0 206 0 40 0 206 0 41 4 133 0 43 0 206 0 44 0 206 0 76 0 206 0 94 0 206 0 95 0 206 0 106 0 206 0 107 0 206 1 49] -#[1 0 210 0 2 0 210 0 4 0 210 0 6 0 210 0 7 4 137 0 40 0 210 0 41 0 210 0 44 0 210 0 76 0 210 0 94 0 210 0 95 0 210 0 106 0 210 0 107 0 210 1 49] -#[1 0 214 0 2 0 214 0 4 0 214 0 6 0 214 0 7 4 141 0 41 4 145 0 44 0 214 0 76 0 214 0 94 0 214 0 95 0 214 0 106 0 214 0 107 0 214 1 49] -#[0 0 218 0 2 0 4 0 6 0 7 0 76 0 94 0 95 0 106 0 107 1 49] -#[0 0 222 0 2 0 6 0 7 0 94 0 95 0 106 0 107 1 49] -#[1 4 149 0 7 4 153 0 94] -#[0 0 226 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 0 230 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 0 234 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 0 238 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 0 242 0 1 0 3 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 53 0 54 0 55 0 56 0 58 0 59 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 0 246 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[1 3 157 0 3 3 161 0 5 2 9 0 97 4 157 0 114 4 161 0 179 4 165 0 180 4 169 0 184 4 169 0 185 4 169 0 186] -#[0 0 250 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 0 254 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 1 2 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 1 6 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 1 10 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 1 14 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 1 18 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 1 22 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 1 26 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 1 30 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 1 34 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 1 38 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 1 42 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 1 46 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 1 50 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 1 54 0 2 0 4 0 6 0 7 0 76 0 94 0 95 0 106 0 107 1 49] -#[0 4 173 0 18] -#[0 1 58 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 1 62 0 2 0 4 0 6 0 7 0 76 0 94 0 95 0 106 0 107 1 49] -#[0 1 66 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 1 70 1 49] -#[0 1 74 1 49] -#[0 1 78 1 49] -#[1 0 25 0 1 0 29 0 3 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 1 109 0 54 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 0 93 0 61 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 0 113 0 70 1 109 0 73 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 4 177 0 168 4 177 0 171 4 177 0 172 4 177 0 173 4 177 0 176 4 177 0 177 1 109 0 178 4 177 0 181 4 177 0 195 4 177 0 196 4 177 0 197 4 177 0 198 4 177 0 201 4 177 0 202 4 177 0 204 4 177 0 205 4 177 0 206 4 177 0 212 4 177 0 214 4 177 0 215 4 177 0 219 0 245 0 221 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 4 177 1 1 4 177 1 2 4 177 1 12 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43 1 82 1 49] -#[0 1 86 0 1 0 3 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 53 0 54 0 55 0 56 0 58 0 59 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 1 90 0 1 0 3 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 53 0 54 0 55 0 56 0 58 0 59 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 1 94 0 1 0 3 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 53 0 54 0 55 0 56 0 58 0 59 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 1 98 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 1 102 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 1 106 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 1 110 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 1 114 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 1 118 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 1 122 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 0 108 0 109 0 110 1 49] -#[1 1 126 0 3 1 126 0 108 1 126 0 110 4 181 1 45] -#[0 1 130 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 4 185 0 108] -#[1 2 89 0 4 4 189 0 5 2 97 0 25 2 101 0 68 2 105 0 78 2 9 0 97 2 109 0 98 4 197 0 100 4 201 0 101 4 193 0 114 2 129 0 115 2 121 0 128 2 125 0 129 2 129 0 130 2 129 0 131 2 129 0 132 2 125 0 133 2 125 0 233 2 125 0 235 4 197 1 18 4 201 1 19] -#[0 0 74 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 18 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 62 0 66 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[1 4 153 0 94 0 0 1 49] -#[0 0 0 1 49] -#[1 0 25 0 1 0 29 0 3 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 1 109 0 54 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 1 109 0 73 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 4 205 0 168 4 205 0 171 4 205 0 172 4 205 0 173 4 205 0 176 4 205 0 177 1 109 0 178 4 205 0 181 4 205 0 195 4 205 0 196 4 205 0 197 4 205 0 198 4 205 0 201 4 205 0 202 4 205 0 204 4 205 0 205 4 205 0 206 4 205 0 212 4 205 0 214 4 205 0 215 4 205 0 219 0 245 0 221 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43 1 134 1 49] -#[0 1 138 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 63 0 65 0 67 0 69 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 0 0 1 49] -#[0 1 142 1 49] -#[0 1 146 1 49] -#[0 0 0 1 49] -#[1 4 209 0 4 4 189 0 5 2 97 0 25 2 101 0 68 2 105 0 78 2 9 0 97 2 109 0 98 4 197 0 100 4 201 0 101 4 213 0 114 4 217 0 115 2 121 0 128 2 125 0 129 4 217 0 130 4 217 0 131 4 217 0 132 2 125 0 133 4 221 0 187 4 225 0 190 4 225 0 192 2 125 0 233 2 125 0 235 4 197 1 18 4 201 1 19] -#[1 0 30 0 1 0 30 0 3 0 30 0 5 0 30 0 6 0 30 0 34 0 30 0 35 0 30 0 36 0 30 0 37 0 30 0 38 0 30 0 46 0 30 0 53 0 30 0 58 0 30 0 63 0 30 0 67 0 30 0 74 0 30 0 75 0 30 0 80 0 30 0 83 0 30 0 85 0 30 0 87 0 30 0 89 0 30 0 92 0 30 0 93 2 169 0 94 0 30 0 97 0 30 0 100 0 30 0 101 0 30 0 102 0 30 0 104 0 30 0 105 0 30 0 108 2 173 0 123 4 233 0 124 2 181 0 125 4 237 0 188 4 241 0 189] -#[1 0 98 0 1 0 15 0 2 0 15 0 4 0 98 0 5 0 15 0 6 0 98 0 8 0 98 0 9 0 98 0 10 0 98 0 11 0 98 0 12 0 98 0 13 0 98 0 14 0 98 0 15 0 98 0 16 0 98 0 17 0 102 0 18 0 98 0 19 0 98 0 20 0 98 0 21 0 19 0 22 0 98 0 23 0 98 0 24 0 98 0 25 0 98 0 26 0 98 0 27 0 98 0 28 0 98 0 29 0 98 0 30 0 98 0 31 0 98 0 32 0 98 0 33 0 98 0 34 0 98 0 35 0 98 0 36 0 98 0 37 0 98 0 39 0 98 0 40 0 98 0 41 0 98 0 42 0 98 0 43 0 98 0 44 0 98 0 45 0 98 0 47 0 98 0 48 0 98 0 71 0 98 0 72 0 15 0 94 0 98 0 104 0 98 0 105 4 249 0 134 4 253 0 135] -#[1 5 1 0 2 5 5 0 94] -#[1 1 154 0 2 0 23 0 94] -#[1 5 13 0 2 4 153 0 94] -#[1 1 150 0 2 1 150 0 4 1 150 0 6 4 245 0 22 1 150 0 94 5 17 0 134 4 253 0 135] -#[0 1 158 0 2 0 4 0 6 0 22 0 71 0 76 0 94] -#[0 1 162 0 2 0 4 0 6 0 22 0 71 0 76 0 94] -#[0 1 166 0 2 0 94] -#[0 1 170 0 2 0 4 0 6 0 94] -#[0 1 174 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[1 0 27 0 1 0 31 0 3 0 35 0 5 0 30 0 6 0 39 0 34 0 43 0 35 0 47 0 36 0 51 0 37 0 55 0 38 0 59 0 46 0 63 0 53 0 67 0 58 0 71 0 63 0 75 0 67 0 79 0 74 0 83 0 75 0 87 0 80 0 91 0 83 0 95 0 85 0 99 0 87 0 103 0 89 0 107 0 92 0 30 0 93 2 169 0 94 0 111 0 97 0 115 0 100 0 119 0 101 0 123 0 102 0 127 0 104 0 131 0 105 0 135 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 2 173 0 123 2 177 0 124 2 181 0 125 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 5 21 0 163 5 21 0 164 0 245 0 221 5 21 0 230 1 177 0 231 0 245 0 237 5 21 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 4 189 0 5 2 109 0 98 4 197 0 100 4 201 0 101 5 25 0 115 5 25 0 130 5 25 0 131 5 25 0 132 4 197 1 18 4 201 1 19] -#[1 4 189 0 5 2 109 0 98 4 197 0 100 4 201 0 101 5 29 0 115 5 29 0 130 5 29 0 131 5 29 0 132 4 197 1 18 4 201 1 19] -#[1 4 189 0 5 2 109 0 98 4 197 0 100 4 201 0 101 5 33 0 115 5 33 0 130 5 33 0 131 5 33 0 132 4 197 1 18 4 201 1 19] -#[0 1 178 0 1 0 95] -#[1 0 98 0 1 1 182 0 4 0 98 0 5 0 98 0 7 0 98 0 8 0 98 0 9 0 98 0 10 0 98 0 11 0 98 0 12 0 98 0 13 0 98 0 14 0 98 0 15 0 98 0 16 0 98 0 17 0 102 0 18 0 98 0 19 0 98 0 20 0 98 0 21 0 19 0 22 0 98 0 23 0 98 0 24 0 98 0 25 0 98 0 26 0 98 0 27 0 98 0 28 0 98 0 29 0 98 0 30 0 98 0 31 0 98 0 32 0 98 0 33 0 98 0 34 0 98 0 35 0 98 0 36 0 98 0 37 0 98 0 39 0 98 0 40 0 98 0 41 0 98 0 42 0 98 0 43 0 98 0 44 0 98 0 45 0 98 0 47 0 98 0 48 0 98 0 71 0 98 0 72 0 139 0 94 0 98 0 104 0 98 0 105 5 37 0 135] -#[0 1 186 0 1 0 95] -#[1 5 41 0 4 5 45 0 94] -#[0 1 190 0 4 0 94] -#[1 5 49 0 1 5 53 0 95] -#[0 1 194 0 1 0 95] -#[0 1 198 0 1 0 95] -#[0 1 202 0 4 0 94] -#[0 5 57 0 4] -#[1 0 25 0 1 0 29 0 3 1 206 0 4 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 1 206 0 51 0 69 0 53 1 109 0 54 0 77 0 55 0 81 0 56 1 206 0 57 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 1 109 0 73 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 4 205 0 168 4 205 0 171 4 205 0 172 4 205 0 173 4 205 0 176 4 205 0 177 1 109 0 178 4 205 0 181 4 205 0 195 4 205 0 196 4 205 0 197 4 205 0 198 4 205 0 201 4 205 0 202 4 205 0 204 4 205 0 205 4 205 0 206 4 205 0 212 4 205 0 214 4 205 0 215 4 205 0 219 0 245 0 221 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 1 210 0 4 0 94] -#[0 1 214 0 4 0 5 0 7 0 25 0 68 0 78 0 79 0 94 0 98 0 100 0 101] -#[1 0 143 0 1 1 106 0 5 1 106 0 7 1 106 0 8 1 106 0 9 1 106 0 10 1 106 0 11 1 106 0 12 1 106 0 13 1 106 0 14 1 106 0 15 1 106 0 16 1 106 0 17 1 106 0 19 1 106 0 20 1 106 0 21 1 106 0 22 1 106 0 23 1 106 0 24 1 106 0 25 1 106 0 26 1 106 0 27 1 106 0 28 1 106 0 29 1 106 0 30 1 106 0 31 1 106 0 32 1 106 0 33 1 106 0 34 1 106 0 35 1 106 0 36 1 106 0 37 1 106 0 39 1 106 0 40 1 106 0 41 1 106 0 42 1 106 0 43 1 106 0 44 1 106 0 45 1 106 0 47 1 106 0 48 1 106 0 71 1 106 0 72 1 106 0 94 1 218 0 95 1 106 0 104 1 106 0 105] -#[1 0 147 0 1 1 110 0 5 1 110 0 7 1 110 0 8 1 110 0 9 1 110 0 10 1 110 0 11 1 110 0 12 1 110 0 13 1 110 0 14 1 110 0 15 1 110 0 16 1 110 0 17 1 110 0 19 1 110 0 20 1 110 0 21 1 110 0 22 1 110 0 23 1 110 0 24 1 110 0 25 1 110 0 26 1 110 0 27 1 110 0 28 1 110 0 29 1 110 0 30 1 110 0 31 1 110 0 32 1 110 0 33 1 110 0 34 1 110 0 35 1 110 0 36 1 110 0 37 1 110 0 39 1 110 0 40 1 110 0 41 1 110 0 42 1 110 0 43 1 110 0 44 1 110 0 45 1 110 0 47 1 110 0 48 1 110 0 71 1 110 0 72 1 110 0 94 1 222 0 95 1 110 0 104 1 110 0 105] -#[0 1 226 0 1 0 3 0 5 0 6 0 34 0 35 0 36 0 37 0 38 0 46 0 53 0 58 0 63 0 67 0 74 0 75 0 80 0 83 0 85 0 87 0 89 0 92 0 93 0 94 0 97 0 100 0 101 0 102 0 104 0 105 0 108] -#[1 5 61 0 6 5 65 0 94 5 69 0 125] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 5 73 0 6 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 5 77 0 93 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 5 81 0 126 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 5 85 0 163 5 85 0 164 0 245 0 221 5 85 0 230 1 177 0 231 0 245 0 237 5 85 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 1 230 0 1 1 230 0 3 1 230 0 5 1 230 0 6 1 230 0 34 1 230 0 35 1 230 0 36 1 230 0 37 1 230 0 38 1 230 0 46 1 230 0 53 1 230 0 58 1 230 0 63 1 230 0 67 1 230 0 74 1 230 0 75 1 230 0 80 1 230 0 83 1 230 0 85 1 230 0 87 1 230 0 89 1 230 0 92 1 230 0 93 5 89 0 94 1 230 0 97 1 230 0 100 1 230 0 101 1 230 0 102 1 230 0 104 1 230 0 105 1 230 0 108] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 2 65 0 163 2 65 0 164 2 65 0 167 0 245 0 221 2 65 0 230 1 177 0 231 0 245 0 237 2 65 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 0 98 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[1 0 162 0 2 0 162 0 4 0 162 0 6 0 162 0 7 0 162 0 8 0 162 0 10 0 162 0 11 0 162 0 13 0 162 0 14 0 162 0 17 0 162 0 19 0 162 0 20 0 162 0 23 0 162 0 24 0 162 0 25 0 162 0 26 0 162 0 34 4 37 0 35 0 162 0 36 4 41 0 37 0 162 0 39 0 162 0 40 0 162 0 41 0 162 0 42 0 162 0 43 0 162 0 44 0 162 0 45 0 162 0 47 0 162 0 48 0 162 0 71 0 162 0 72 0 162 0 76 0 162 0 94 0 162 0 95 0 162 0 106 0 162 0 107 0 162 1 49] -#[0 1 234 0 2 0 4 0 6 0 7 0 8 0 10 0 11 0 13 0 14 0 17 0 19 0 20 0 23 0 24 0 25 0 26 0 34 0 36 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 106 0 107 1 49] -#[0 1 238 0 2 0 4 0 6 0 7 0 8 0 10 0 11 0 13 0 14 0 17 0 19 0 20 0 23 0 24 0 25 0 26 0 34 0 36 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 106 0 107 1 49] -#[0 1 242 0 2 0 4 0 6 0 7 0 8 0 10 0 11 0 13 0 14 0 17 0 19 0 20 0 23 0 24 0 25 0 26 0 34 0 36 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 106 0 107 1 49] -#[0 1 246 0 2 0 4 0 6 0 7 0 8 0 10 0 11 0 13 0 14 0 17 0 19 0 20 0 23 0 24 0 25 0 26 0 34 0 36 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 106 0 107 1 49] -#[0 1 250 0 2 0 4 0 6 0 7 0 8 0 10 0 11 0 13 0 14 0 17 0 19 0 20 0 23 0 24 0 25 0 26 0 34 0 36 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 106 0 107 1 49] -#[0 1 254 0 2 0 4 0 6 0 7 0 8 0 10 0 11 0 13 0 14 0 17 0 19 0 20 0 23 0 24 0 25 0 26 0 34 0 36 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 106 0 107 1 49] -#[1 0 42 0 7 2 9 0 97 5 93 0 113 5 93 0 114] -#[1 2 2 0 3 5 97 0 62 5 101 0 243 5 105 0 244 5 109 0 245] -#[0 2 6 0 1 0 3 0 7 0 62] -#[1 0 42 0 7 2 9 0 97 5 113 0 113 5 113 0 114] -#[0 2 10 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 2 14 0 2 0 4 0 6 0 7 0 8 0 10 0 11 0 13 0 14 0 17 0 19 0 20 0 23 0 24 0 25 0 26 0 34 0 36 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 106 0 107 1 49] -#[0 5 117 0 90] -#[1 5 121 0 4 5 125 0 98 5 129 1 14 5 133 1 15] -#[1 5 137 0 66 5 141 1 7] -#[1 0 42 0 3 0 42 0 62 2 9 0 97 5 145 0 113 5 145 0 114] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 5 149 0 163 5 149 0 164 0 245 0 221 5 149 0 230 1 177 0 231 0 245 0 237 5 149 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 42 0 1 5 153 0 25 2 9 0 97 5 157 0 113 5 157 0 114] -#[0 2 18 0 1 0 3 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 53 0 54 0 55 0 56 0 58 0 59 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 2 22 0 1 0 3 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 53 0 54 0 55 0 56 0 58 0 59 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 2 26 0 1 0 3 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 53 0 54 0 55 0 56 0 58 0 59 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 2 30 0 1 0 3 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 53 0 54 0 55 0 56 0 58 0 59 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 2 34 0 1 0 3 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 53 0 54 0 55 0 56 0 58 0 59 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 2 38 0 1 0 3 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 53 0 54 0 55 0 56 0 58 0 59 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 2 42 0 1 0 3 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 53 0 54 0 55 0 56 0 58 0 59 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[1 5 161 0 7 5 137 0 66 5 165 1 7] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 2 46 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 5 189 0 54 0 85 0 58 1 225 0 63 0 105 0 67 5 189 0 73 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 5 169 0 88 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 5 173 0 144 1 9 0 145 1 9 0 146 5 173 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 5 181 0 163 5 181 0 164 5 177 0 166 5 181 0 167 5 185 0 177 5 189 0 178 5 193 0 199 0 245 0 221 5 181 0 230 1 177 0 231 0 245 0 237 5 181 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 42 0 1 2 9 0 97 5 197 0 113 5 197 0 114] -#[0 5 201 0 1] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 5 205 0 163 5 205 0 164 5 205 0 167 0 245 0 221 5 205 0 230 1 177 0 231 0 245 0 237 5 205 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 5 209 0 4 2 9 0 97 5 213 0 98 5 225 0 114 5 217 1 8 5 221 1 9 5 225 1 11] -#[0 5 229 0 49] -#[0 2 50 0 4 0 66 0 94] -#[1 5 137 0 66 5 233 1 7] -#[1 2 54 0 66 5 237 0 94] -#[0 2 58 0 66] -#[0 2 62 0 66] -#[0 5 241 0 7] -#[0 2 66 0 66 0 94] -#[0 2 70 0 7] -#[0 5 245 0 82] -#[1 3 125 0 5 3 129 0 21] -#[1 3 121 0 1 0 134 0 2 0 134 0 3 0 134 0 4 3 213 0 5 0 134 0 6 0 134 0 7 0 134 0 8 0 134 0 9 0 134 0 10 0 134 0 11 0 134 0 12 0 134 0 13 0 134 0 14 0 134 0 15 0 134 0 16 0 134 0 17 0 134 0 19 0 134 0 20 3 217 0 21 0 134 0 22 0 134 0 23 0 134 0 24 0 134 0 25 0 134 0 26 0 134 0 27 0 134 0 28 0 134 0 29 0 134 0 30 0 134 0 31 0 134 0 32 0 134 0 33 0 134 0 34 0 134 0 35 0 134 0 36 0 134 0 37 0 134 0 39 0 134 0 40 0 134 0 41 0 134 0 42 0 134 0 43 0 134 0 44 0 134 0 45 0 134 0 47 0 134 0 48 0 134 0 71 0 134 0 72 0 134 0 76 0 134 0 94 0 134 0 95 0 197 0 104 0 6 0 105 0 134 0 106 0 134 0 107 3 221 0 136 0 241 0 137 5 249 0 147 0 134 1 49] -#[0 2 74 0 2 0 3 0 4 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 106 0 107 1 49] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 2 46 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 5 181 0 163 5 181 0 164 5 253 0 166 5 181 0 167 0 245 0 221 5 181 0 230 1 177 0 231 0 245 0 237 5 181 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 25 0 1 6 1 0 2 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 6 5 0 93 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 6 9 0 148 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 6 13 0 163 6 13 0 164 0 245 0 221 6 13 0 230 1 177 0 231 0 245 0 237 6 13 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 6 17 0 163 6 17 0 164 6 17 0 167 0 245 0 221 6 17 0 230 1 177 0 231 0 245 0 237 6 17 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 6 21 0 98] -#[0 2 78 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 6 25 0 163 6 25 0 164 6 25 0 167 0 245 0 221 6 25 0 230 1 177 0 231 0 245 0 237 6 25 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 6 29 0 7 4 153 0 94] -#[1 0 25 0 1 0 29 0 3 0 26 0 4 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 1 109 0 54 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 1 109 0 73 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 2 25 0 168 2 25 0 171 2 25 0 172 2 25 0 173 2 145 0 174 2 149 0 175 2 25 0 176 2 25 0 177 1 109 0 178 2 25 0 181 2 25 0 195 2 25 0 196 2 25 0 197 2 25 0 198 2 25 0 201 2 25 0 202 2 25 0 204 2 25 0 205 2 25 0 206 2 25 0 212 2 25 0 214 2 25 0 215 2 25 0 219 0 245 0 221 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 6 33 0 52 6 37 0 64 6 41 0 216 6 45 0 217] -#[0 2 82 0 2 0 4 0 6 0 7 0 8 0 10 0 11 0 13 0 14 0 17 0 19 0 20 0 23 0 24 0 25 0 26 0 34 0 36 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 106 0 107 1 49] -#[1 6 49 0 4 4 189 0 5 2 9 0 97 2 109 0 98 4 197 0 100 4 201 0 101 6 53 0 114 6 57 0 115 6 57 0 130 6 57 0 131 6 57 0 132 4 221 0 187 4 225 0 190 4 225 0 192 4 197 1 18 4 201 1 19] -#[1 0 30 0 3 0 30 0 5 0 30 0 6 0 30 0 93 2 169 0 94 0 30 0 97 6 61 0 124 2 181 0 125 4 237 0 188 4 241 0 189] -#[1 1 150 0 7 4 245 0 22 1 150 0 94 6 65 0 134 4 253 0 135] -#[1 6 69 0 7 6 73 0 94] -#[0 2 86 0 7 0 94] -#[1 4 245 0 22 6 77 0 135] -#[0 2 90 0 2 0 4 0 6 0 7 0 8 0 10 0 11 0 13 0 14 0 17 0 19 0 20 0 23 0 24 0 25 0 26 0 34 0 36 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 106 0 107 1 49] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 6 81 0 163 6 81 0 164 6 81 0 167 0 245 0 221 6 81 0 230 1 177 0 231 0 245 0 237 6 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 6 85 0 163 6 85 0 164 6 85 0 167 0 245 0 221 6 85 0 230 1 177 0 231 0 245 0 237 6 85 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 2 94 0 1 0 3 0 5 0 34 0 35 0 36 0 37 0 38 0 46 0 53 0 58 0 63 0 67 0 74 0 75 0 80 0 83 0 85 0 87 0 89 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 6 89 0 163 6 89 0 164 0 245 0 221 6 89 0 230 1 177 0 231 0 245 0 237 6 89 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 25 0 1 0 29 0 3 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 6 97 0 168 6 97 0 171 6 97 0 172 6 97 0 173 6 97 0 181 6 97 0 195 6 97 0 196 6 97 0 197 6 97 0 198 6 97 0 201 6 97 0 202 6 97 0 204 6 97 0 205 6 97 0 206 6 97 0 212 6 97 0 213 6 97 0 214 6 97 0 215 6 97 0 219 0 245 0 221 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 6 101 0 13] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 6 105 0 163 6 105 0 164 6 105 0 167 0 245 0 221 6 105 0 230 1 177 0 231 0 245 0 237 6 105 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 6 109 0 163 6 109 0 164 6 109 0 167 0 245 0 221 6 109 0 230 1 177 0 231 0 245 0 237 6 109 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 6 113 0 98] -#[0 2 98 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 2 102 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 6 117 0 163 6 117 0 164 6 117 0 167 0 245 0 221 6 117 0 230 1 177 0 231 0 245 0 237 6 117 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 6 121 0 98] -#[0 2 106 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 2 110 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 2 114 0 1 0 3 0 5 0 34 0 35 0 36 0 37 0 38 0 46 0 53 0 58 0 63 0 67 0 74 0 75 0 80 0 83 0 85 0 87 0 89 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108] -#[0 2 118 0 1 0 3 0 5 0 34 0 35 0 36 0 37 0 38 0 46 0 53 0 58 0 63 0 67 0 74 0 75 0 80 0 83 0 85 0 87 0 89 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108] -#[0 2 122 0 1 0 3 0 5 0 34 0 35 0 36 0 37 0 38 0 46 0 53 0 58 0 63 0 67 0 74 0 75 0 80 0 83 0 85 0 87 0 89 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108] -#[0 2 126 0 1 0 3 0 5 0 34 0 35 0 36 0 37 0 38 0 46 0 53 0 58 0 63 0 67 0 74 0 75 0 80 0 83 0 85 0 87 0 89 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108] -#[0 2 130 0 1 0 3 0 5 0 34 0 35 0 36 0 37 0 38 0 46 0 53 0 58 0 63 0 67 0 74 0 75 0 80 0 83 0 85 0 87 0 89 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108] -#[0 2 134 0 1 0 3 0 5 0 34 0 35 0 36 0 37 0 38 0 46 0 53 0 58 0 63 0 67 0 74 0 75 0 80 0 83 0 85 0 87 0 89 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108] -#[0 2 138 0 1 0 3 0 5 0 34 0 35 0 36 0 37 0 38 0 46 0 53 0 58 0 63 0 67 0 74 0 75 0 80 0 83 0 85 0 87 0 89 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108] -#[0 2 142 0 1 0 3 0 5 0 34 0 35 0 36 0 37 0 38 0 46 0 53 0 58 0 63 0 67 0 74 0 75 0 80 0 83 0 85 0 87 0 89 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108] -#[0 2 146 0 1 0 3 0 5 0 34 0 35 0 36 0 37 0 38 0 46 0 53 0 58 0 63 0 67 0 74 0 75 0 80 0 83 0 85 0 87 0 89 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108] -#[0 2 150 0 1 0 3 0 5 0 34 0 35 0 36 0 37 0 38 0 46 0 53 0 58 0 63 0 67 0 74 0 75 0 80 0 83 0 85 0 87 0 89 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108] -#[0 2 154 0 1 0 3 0 5 0 34 0 35 0 36 0 37 0 38 0 46 0 53 0 58 0 63 0 67 0 74 0 75 0 80 0 83 0 85 0 87 0 89 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108] -#[0 2 158 0 1 0 3 0 5 0 34 0 35 0 36 0 37 0 38 0 46 0 53 0 58 0 63 0 67 0 74 0 75 0 80 0 83 0 85 0 87 0 89 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108] -#[0 2 162 0 2 0 4 0 6 0 7 0 8 0 10 0 11 0 13 0 14 0 17 0 19 0 20 0 23 0 24 0 25 0 26 0 34 0 36 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 106 0 107 1 49] -#[0 2 166 0 2 0 4 0 6 0 7 0 8 0 10 0 11 0 13 0 14 0 17 0 19 0 20 0 23 0 24 0 25 0 26 0 34 0 36 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 106 0 107 1 49] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 6 125 0 163 6 125 0 164 0 245 0 221 6 125 0 230 1 177 0 231 0 245 0 237 6 125 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 1 25 0 150 1 25 0 151 6 129 0 152 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 6 133 0 150 6 133 0 151 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 6 137 0 150 6 137 0 151 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 6 141 0 150 6 141 0 151 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 1 25 0 150 1 25 0 151 6 145 0 152 6 145 0 153 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 1 25 0 150 1 25 0 151 6 149 0 152 6 149 0 153 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 6 153 0 154 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 6 157 0 154 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 6 161 0 154 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 6 165 0 155 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 6 169 0 155 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 6 173 0 155 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 6 177 0 155 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 6 181 0 155 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 6 185 0 155 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 6 189 0 156 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 6 193 0 156 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 6 197 0 156 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 6 201 0 156 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 6 205 0 157 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 6 209 0 158 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 6 213 0 159 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 6 217 0 160 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 6 221 0 163 6 221 0 164 0 245 0 221 6 221 0 230 1 177 0 231 0 245 0 237 6 221 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 2 193 0 144 1 9 0 145 1 9 0 146 2 193 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 6 225 0 161 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 2 170 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 6 229 0 163 6 229 0 164 0 245 0 221 6 229 0 230 1 177 0 231 0 245 0 237 6 229 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 1 150 0 7 4 245 0 22 1 150 0 94 6 233 0 134 4 253 0 135] -#[1 6 237 0 7 6 241 0 94] -#[0 2 174 0 7 0 94] -#[1 4 245 0 22 6 245 0 135] -#[1 0 25 0 1 6 249 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 6 253 0 163 6 253 0 164 0 245 0 221 6 253 0 230 1 177 0 231 7 1 0 232 0 245 0 237 6 253 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 2 178 0 1 0 3 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 53 0 54 0 55 0 56 0 58 0 59 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[1 2 182 0 3 2 182 0 108 2 182 0 110 7 5 1 39 7 9 1 40] -#[1 7 13 0 109 7 17 1 26 7 17 1 27 7 17 1 28 7 29 1 29 7 33 1 30] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 5 21 0 163 5 21 0 164 0 245 0 221 5 21 0 230 1 177 0 231 0 245 0 237 5 21 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 1 182 0 4 4 245 0 22 1 182 0 94 5 37 0 135] -#[0 1 218 0 1 0 95] -#[0 1 222 0 1 0 95] -#[0 2 186 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 63 0 65 0 67 0 69 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[1 1 174 0 1 0 151 0 2 0 151 0 4 1 174 0 5 0 151 0 6 1 174 0 8 1 174 0 9 1 174 0 10 1 174 0 11 1 174 0 12 1 174 0 13 1 174 0 14 1 174 0 15 1 174 0 16 1 174 0 17 1 174 0 19 1 174 0 20 1 174 0 21 0 151 0 22 1 174 0 23 1 174 0 24 1 174 0 25 1 174 0 26 1 174 0 27 1 174 0 28 1 174 0 29 1 174 0 30 1 174 0 31 1 174 0 32 1 174 0 33 1 174 0 34 1 174 0 35 1 174 0 36 1 174 0 37 1 174 0 39 1 174 0 40 1 174 0 41 1 174 0 42 1 174 0 43 1 174 0 44 1 174 0 45 1 174 0 47 1 174 0 48 1 174 0 71 1 174 0 72 0 151 0 94 1 174 0 104 1 174 0 105] -#[1 0 155 0 4 4 245 0 22 0 155 0 94 4 249 0 134 7 37 0 135] -#[1 5 49 0 1 7 41 0 95] -#[1 7 45 0 4 7 49 0 94] -#[0 2 194 0 4 0 94] -#[0 2 198 0 4 0 94] -#[1 0 25 0 1 2 45 0 3 2 49 0 5 0 159 0 6 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 7 53 0 93 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 2 53 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 5 81 0 126 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 5 85 0 163 5 85 0 164 2 69 0 184 2 69 0 185 2 69 0 186 7 57 0 191 7 57 0 192 7 61 0 193 7 61 0 194 0 245 0 221 5 85 0 230 1 177 0 231 0 245 0 237 5 85 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 7 69 0 6 7 73 0 94] -#[0 2 206 0 6 0 94] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 7 77 0 163 7 77 0 164 0 245 0 221 7 77 0 230 1 177 0 231 0 245 0 237 7 77 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 2 210 0 2 0 4 0 6 0 94] -#[0 2 214 0 2 0 4 0 6 0 7 0 76 0 94] -#[0 2 218 0 18] -#[0 7 81 0 93] -#[1 3 157 0 3 3 161 0 5 2 9 0 97 6 53 0 114 2 69 0 184 2 69 0 185 2 69 0 186 7 85 0 191 7 85 0 192] -#[0 2 222 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 2 226 0 2 0 4 0 6 0 94] -#[0 7 89 0 6] -#[0 7 93 0 1] -#[0 7 97 0 1] -#[0 7 101 0 1] -#[0 2 230 0 4 0 94] -#[0 2 234 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[1 7 105 0 4 4 189 0 5 2 97 0 25 2 101 0 68 2 105 0 78 2 9 0 97 2 109 0 98 4 197 0 100 4 201 0 101 4 193 0 114 2 129 0 115 7 109 0 129 2 129 0 130 2 129 0 131 2 129 0 132 7 109 0 133 7 109 0 233 7 109 0 235 4 197 1 18 4 201 1 19] -#[1 2 238 0 2 3 157 0 3 3 161 0 5 7 113 0 93 2 9 0 97 6 53 0 114 2 69 0 184 2 69 0 185 2 69 0 186 7 145 0 191 7 145 0 192 7 141 0 194 7 125 0 222 7 129 0 223 7 133 0 224 7 137 0 225 7 141 0 226 7 145 0 227] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 7 149 0 163 7 149 0 164 0 245 0 221 7 149 0 230 1 177 0 231 0 245 0 237 7 149 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 2 242 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 52 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 64 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 2 246 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[1 0 30 0 1 0 30 0 3 0 30 0 5 1 226 0 6 0 30 0 34 0 30 0 35 0 30 0 36 0 30 0 37 0 30 0 38 0 30 0 46 0 30 0 53 0 30 0 58 0 30 0 63 0 30 0 67 0 30 0 74 0 30 0 75 0 30 0 80 0 30 0 83 0 30 0 85 0 30 0 87 0 30 0 89 0 30 0 92 0 30 0 93 0 163 0 94 0 30 0 97 0 30 0 100 0 30 0 101 0 30 0 102 0 30 0 104 0 30 0 105 0 30 0 108 7 153 0 124 2 181 0 125] -#[1 7 157 0 6 5 89 0 94] -#[0 2 250 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 7 161 0 163 7 161 0 164 0 245 0 221 7 161 0 230 1 177 0 231 0 245 0 237 7 161 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 2 254 0 6 0 94] -#[0 3 2 0 6 0 94] -#[0 3 6 0 1 0 3 0 5 0 6 0 34 0 35 0 36 0 37 0 38 0 46 0 53 0 58 0 63 0 67 0 74 0 75 0 80 0 83 0 85 0 87 0 89 0 92 0 93 0 94 0 97 0 100 0 101 0 102 0 104 0 105 0 108] -#[0 7 165 0 7] -#[1 2 185 0 1 2 5 0 3 0 33 0 5 0 69 0 53 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 245 0 114 0 245 0 116 0 245 0 117 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 7 169 0 144 1 9 0 145 1 9 0 146 7 169 0 149 0 245 0 221 0 245 0 237 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 3 10 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 7 173 0 3] -#[0 3 14 0 3] -#[0 7 177 0 7] -#[0 7 181 0 1] -#[0 3 18 0 7 0 66] -#[1 3 22 0 4 7 185 0 49 3 22 0 94] -#[1 7 189 0 4 7 193 0 94] -#[0 3 26 0 4 0 94] -#[0 7 197 0 100 1 10 1 18] -#[0 7 201 0 7] -#[1 2 2 0 3 5 97 0 62 7 205 0 243 5 105 0 244 5 109 0 245] -#[0 7 209 0 7] -#[1 0 42 0 1 2 9 0 97 7 213 0 113 7 213 0 114] -#[0 7 217 0 1] -#[0 3 30 0 1 0 3 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 53 0 54 0 55 0 56 0 58 0 59 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 7 221 0 7] -#[1 3 157 0 3 3 161 0 5 2 9 0 97 7 225 0 114 7 229 0 182 7 233 0 183 7 237 0 184 7 237 0 185 7 237 0 186 7 241 0 200] -#[1 0 162 0 7 0 162 0 8 4 45 0 9 0 162 0 10 0 162 0 11 4 45 0 12 0 162 0 13 0 162 0 14 4 45 0 15 4 45 0 16 0 162 0 17 0 162 0 19 0 162 0 20 4 45 0 22 0 162 0 23 0 162 0 24 0 162 0 25 0 162 0 26 4 45 0 27 4 45 0 28 4 45 0 29 4 45 0 30 4 45 0 31 4 45 0 32 4 45 0 33 0 162 0 34 4 37 0 35 0 162 0 36 4 41 0 37 0 162 0 39 0 162 0 40 0 162 0 41 0 162 0 42 0 162 0 43 0 162 0 44 0 162 0 45 0 162 0 47 0 162 0 48 0 167 0 71 0 162 0 72 7 249 0 76 0 162 0 94 4 45 0 165] -#[0 7 253 0 7] -#[1 3 34 0 2 3 34 0 7 4 153 0 94] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 2 46 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 5 181 0 163 5 181 0 164 8 1 0 166 5 181 0 167 0 245 0 221 5 181 0 230 1 177 0 231 0 245 0 237 5 181 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 3 157 0 3 3 161 0 5 2 9 0 97 8 5 0 114 4 161 0 179 4 165 0 180 8 9 0 184 8 9 0 185 8 9 0 186 8 13 0 200] -#[1 8 17 0 71 8 21 0 76] -#[0 8 25 0 1] -#[1 2 238 0 2 3 157 0 3 3 161 0 5 7 113 0 93 2 9 0 97 6 53 0 114 2 69 0 184 2 69 0 185 2 69 0 186 7 145 0 191 7 145 0 192 7 141 0 194 8 29 0 223 7 133 0 224 7 137 0 225 7 141 0 226 7 145 0 227] -#[1 8 33 0 2 4 153 0 94] -#[0 3 38 0 66] -#[0 8 37 0 49] -#[1 8 41 0 4 8 45 0 94] -#[0 3 42 0 4 0 94] -#[0 3 46 0 4 0 94] -#[1 2 9 0 97 8 49 0 114 8 49 1 11] -#[0 8 53 0 7] -#[1 3 61 0 3 3 65 0 25 8 57 1 5 8 61 1 6] -#[0 3 50 0 1 0 3 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 53 0 54 0 55 0 56 0 58 0 59 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 3 54 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 3 58 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 8 65 0 7] -#[0 3 62 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 8 69 0 163 8 69 0 164 0 245 0 221 8 69 0 230 1 177 0 231 0 245 0 237 8 69 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 8 73 0 2 8 77 0 94] -#[0 3 66 0 2 0 94] -#[1 8 81 0 6 4 153 0 94] -#[0 3 70 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[1 8 85 0 2 4 153 0 94] -#[0 3 74 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 8 89 0 1] -#[1 3 145 0 3 8 93 0 173] -#[1 3 78 0 1 3 78 0 3 3 78 0 4 3 78 0 5 3 78 0 7 3 78 0 34 3 78 0 35 3 78 0 36 3 78 0 37 3 78 0 38 3 78 0 46 3 78 0 50 3 78 0 51 3 78 0 53 3 78 0 54 3 78 0 55 3 78 0 56 3 78 0 57 3 78 0 58 3 78 0 59 3 78 0 60 3 78 0 61 3 78 0 63 6 37 0 64 3 78 0 65 3 78 0 67 3 78 0 69 3 78 0 70 3 78 0 73 3 78 0 74 3 78 0 75 3 78 0 77 3 78 0 80 3 78 0 81 3 78 0 83 3 78 0 84 3 78 0 85 3 78 0 86 3 78 0 87 3 78 0 88 3 78 0 89 3 78 0 90 3 78 0 91 3 78 0 92 3 78 0 97 3 78 0 100 3 78 0 101 3 78 0 102 3 78 0 104 3 78 0 105 3 78 0 108 8 97 0 217 3 78 1 49] -#[0 3 82 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 2 190 0 2 0 4 0 6 0 22 0 71 0 76 0 94] -#[1 1 150 0 2 1 150 0 4 1 150 0 6 4 245 0 22 1 150 0 94 4 249 0 134 4 253 0 135] -#[0 8 101 0 95] -#[1 3 157 0 3 3 161 0 5 2 202 0 6 7 113 0 93 2 9 0 97 6 53 0 114 2 69 0 184 2 69 0 185 2 69 0 186 7 57 0 191 7 57 0 192 7 61 0 193 7 61 0 194] -#[0 3 86 0 7 0 76 0 94] -#[0 3 90 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[1 3 157 0 3 3 161 0 5 2 9 0 97 3 165 0 114 8 105 0 183 3 177 0 184 3 177 0 185 3 177 0 186] -#[0 3 94 0 7 0 76 0 94] -#[1 8 109 0 2 4 153 0 94] -#[1 8 113 0 2 4 153 0 94] -#[0 3 98 0 2 0 4 0 6 0 7 0 76 0 94 0 95 0 106 0 107 1 49] -#[0 3 102 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 3 106 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[1 1 126 0 3 1 126 0 108 1 126 0 110 8 117 1 45] -#[1 4 153 0 94 8 121 0 106 8 125 0 107 8 129 0 138 8 133 0 139] -#[1 8 137 0 6 4 153 0 94] -#[0 3 110 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[1 8 141 0 6 4 153 0 94] -#[0 3 114 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 3 118 0 2 0 4 0 6 0 7 0 76 0 94 0 95 0 106 0 107 1 49] -#[0 3 122 0 2 0 4 0 6 0 7 0 8 0 10 0 11 0 13 0 14 0 17 0 19 0 20 0 23 0 24 0 25 0 34 0 36 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 106 0 107 1 49] -#[0 3 126 0 2 0 4 0 6 0 7 0 8 0 10 0 11 0 13 0 14 0 17 0 19 0 20 0 23 0 24 0 25 0 34 0 36 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 106 0 107 1 49] -#[0 3 130 0 2 0 4 0 6 0 7 0 8 0 10 0 11 0 13 0 14 0 17 0 19 0 20 0 23 0 24 0 25 0 34 0 36 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 106 0 107 1 49] -#[0 3 134 0 2 0 4 0 6 0 7 0 8 0 10 0 11 0 13 0 14 0 17 0 19 0 20 0 23 0 24 0 25 0 34 0 36 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 106 0 107 1 49] -#[1 3 138 0 2 3 138 0 4 3 138 0 6 3 138 0 7 4 53 0 8 3 138 0 10 3 138 0 11 3 138 0 13 3 138 0 14 3 138 0 17 3 138 0 19 3 138 0 20 3 138 0 23 3 138 0 24 4 57 0 25 3 138 0 34 3 138 0 36 3 138 0 39 3 138 0 40 3 138 0 41 4 61 0 42 3 138 0 43 3 138 0 44 3 138 0 45 3 138 0 47 3 138 0 48 3 138 0 71 3 138 0 72 3 138 0 76 3 138 0 94 3 138 0 95 3 138 0 106 3 138 0 107 3 138 1 49] -#[1 3 142 0 2 3 142 0 4 3 142 0 6 3 142 0 7 4 53 0 8 3 142 0 10 3 142 0 11 3 142 0 13 3 142 0 14 3 142 0 17 3 142 0 19 3 142 0 20 3 142 0 23 3 142 0 24 4 57 0 25 3 142 0 34 3 142 0 36 3 142 0 39 3 142 0 40 3 142 0 41 4 61 0 42 3 142 0 43 3 142 0 44 3 142 0 45 3 142 0 47 3 142 0 48 3 142 0 71 3 142 0 72 3 142 0 76 3 142 0 94 3 142 0 95 3 142 0 106 3 142 0 107 3 142 1 49] -#[1 3 146 0 2 3 146 0 4 3 146 0 6 3 146 0 7 3 146 0 10 3 146 0 11 3 146 0 13 3 146 0 14 3 146 0 17 3 146 0 19 3 146 0 20 3 146 0 23 3 146 0 24 4 65 0 34 4 69 0 36 3 146 0 39 3 146 0 40 3 146 0 41 3 146 0 43 3 146 0 44 3 146 0 45 3 146 0 47 3 146 0 48 3 146 0 71 3 146 0 72 3 146 0 76 3 146 0 94 3 146 0 95 3 146 0 106 3 146 0 107 3 146 1 49] -#[1 3 150 0 2 3 150 0 4 3 150 0 6 3 150 0 7 3 150 0 10 3 150 0 11 3 150 0 13 3 150 0 14 3 150 0 17 3 150 0 19 3 150 0 20 3 150 0 23 3 150 0 24 4 65 0 34 4 69 0 36 3 150 0 39 3 150 0 40 3 150 0 41 3 150 0 43 3 150 0 44 3 150 0 45 3 150 0 47 3 150 0 48 3 150 0 71 3 150 0 72 3 150 0 76 3 150 0 94 3 150 0 95 3 150 0 106 3 150 0 107 3 150 1 49] -#[1 3 154 0 2 3 154 0 4 3 154 0 6 3 154 0 7 3 154 0 10 3 154 0 11 3 154 0 13 3 154 0 14 3 154 0 17 3 154 0 19 3 154 0 20 3 154 0 23 3 154 0 24 4 65 0 34 4 69 0 36 3 154 0 39 3 154 0 40 3 154 0 41 3 154 0 43 3 154 0 44 3 154 0 45 3 154 0 47 3 154 0 48 3 154 0 71 3 154 0 72 3 154 0 76 3 154 0 94 3 154 0 95 3 154 0 106 3 154 0 107 3 154 1 49] -#[1 3 158 0 2 3 158 0 4 3 158 0 6 3 158 0 7 3 158 0 10 4 73 0 11 3 158 0 13 4 77 0 14 4 81 0 17 3 158 0 19 3 158 0 20 3 158 0 23 3 158 0 24 3 158 0 39 3 158 0 40 3 158 0 41 3 158 0 43 3 158 0 44 3 158 0 45 3 158 0 47 3 158 0 48 3 158 0 71 3 158 0 72 3 158 0 76 3 158 0 94 3 158 0 95 3 158 0 106 3 158 0 107 3 158 1 49] -#[1 3 162 0 2 3 162 0 4 3 162 0 6 3 162 0 7 3 162 0 10 4 73 0 11 3 162 0 13 4 77 0 14 4 81 0 17 3 162 0 19 3 162 0 20 3 162 0 23 3 162 0 24 3 162 0 39 3 162 0 40 3 162 0 41 3 162 0 43 3 162 0 44 3 162 0 45 3 162 0 47 3 162 0 48 3 162 0 71 3 162 0 72 3 162 0 76 3 162 0 94 3 162 0 95 3 162 0 106 3 162 0 107 3 162 1 49] -#[1 3 166 0 2 3 166 0 4 3 166 0 6 3 166 0 7 3 166 0 10 4 73 0 11 3 166 0 13 4 77 0 14 4 81 0 17 3 166 0 19 3 166 0 20 3 166 0 23 3 166 0 24 3 166 0 39 3 166 0 40 3 166 0 41 3 166 0 43 3 166 0 44 3 166 0 45 3 166 0 47 3 166 0 48 3 166 0 71 3 166 0 72 3 166 0 76 3 166 0 94 3 166 0 95 3 166 0 106 3 166 0 107 3 166 1 49] -#[1 3 170 0 2 3 170 0 4 3 170 0 6 3 170 0 7 3 170 0 10 4 73 0 11 3 170 0 13 4 77 0 14 4 81 0 17 3 170 0 19 3 170 0 20 3 170 0 23 3 170 0 24 3 170 0 39 3 170 0 40 3 170 0 41 3 170 0 43 3 170 0 44 3 170 0 45 3 170 0 47 3 170 0 48 3 170 0 71 3 170 0 72 3 170 0 76 3 170 0 94 3 170 0 95 3 170 0 106 3 170 0 107 3 170 1 49] -#[1 3 174 0 2 3 174 0 4 3 174 0 6 3 174 0 7 3 174 0 10 4 73 0 11 3 174 0 13 4 77 0 14 4 81 0 17 3 174 0 19 3 174 0 20 3 174 0 23 3 174 0 24 3 174 0 39 3 174 0 40 3 174 0 41 3 174 0 43 3 174 0 44 3 174 0 45 3 174 0 47 3 174 0 48 3 174 0 71 3 174 0 72 3 174 0 76 3 174 0 94 3 174 0 95 3 174 0 106 3 174 0 107 3 174 1 49] -#[1 3 178 0 2 3 178 0 4 3 178 0 6 3 178 0 7 3 178 0 10 4 73 0 11 3 178 0 13 4 77 0 14 4 81 0 17 3 178 0 19 3 178 0 20 3 178 0 23 3 178 0 24 3 178 0 39 3 178 0 40 3 178 0 41 3 178 0 43 3 178 0 44 3 178 0 45 3 178 0 47 3 178 0 48 3 178 0 71 3 178 0 72 3 178 0 76 3 178 0 94 3 178 0 95 3 178 0 106 3 178 0 107 3 178 1 49] -#[1 3 182 0 2 3 182 0 4 3 182 0 6 3 182 0 7 4 85 0 10 4 89 0 13 4 93 0 19 4 97 0 20 3 182 0 23 3 182 0 24 3 182 0 39 3 182 0 40 3 182 0 41 3 182 0 43 3 182 0 44 3 182 0 45 3 182 0 47 3 182 0 48 4 101 0 71 4 105 0 72 3 182 0 76 3 182 0 94 3 182 0 95 3 182 0 106 3 182 0 107 3 182 1 49] -#[1 3 186 0 2 3 186 0 4 3 186 0 6 3 186 0 7 4 85 0 10 4 89 0 13 4 93 0 19 4 97 0 20 3 186 0 23 3 186 0 24 3 186 0 39 3 186 0 40 3 186 0 41 3 186 0 43 3 186 0 44 3 186 0 45 3 186 0 47 3 186 0 48 4 101 0 71 4 105 0 72 3 186 0 76 3 186 0 94 3 186 0 95 3 186 0 106 3 186 0 107 3 186 1 49] -#[1 3 190 0 2 3 190 0 4 3 190 0 6 3 190 0 7 4 85 0 10 4 89 0 13 4 93 0 19 4 97 0 20 3 190 0 23 3 190 0 24 3 190 0 39 3 190 0 40 3 190 0 41 3 190 0 43 3 190 0 44 3 190 0 45 3 190 0 47 3 190 0 48 4 101 0 71 4 105 0 72 3 190 0 76 3 190 0 94 3 190 0 95 3 190 0 106 3 190 0 107 3 190 1 49] -#[1 3 194 0 2 3 194 0 4 3 194 0 6 3 194 0 7 4 85 0 10 4 89 0 13 4 93 0 19 4 97 0 20 3 194 0 23 3 194 0 24 3 194 0 39 3 194 0 40 3 194 0 41 3 194 0 43 3 194 0 44 3 194 0 45 3 194 0 47 3 194 0 48 4 101 0 71 4 105 0 72 3 194 0 76 3 194 0 94 3 194 0 95 3 194 0 106 3 194 0 107 3 194 1 49] -#[1 3 198 0 2 3 198 0 4 3 198 0 6 3 198 0 7 4 109 0 23 4 113 0 24 3 198 0 39 3 198 0 40 3 198 0 41 3 198 0 43 3 198 0 44 3 198 0 45 4 117 0 47 4 121 0 48 3 198 0 76 3 198 0 94 3 198 0 95 3 198 0 106 3 198 0 107 3 198 1 49] -#[1 3 202 0 2 3 202 0 4 3 202 0 6 3 202 0 7 4 125 0 39 3 202 0 40 3 202 0 41 3 202 0 43 3 202 0 44 3 202 0 45 3 202 0 76 3 202 0 94 3 202 0 95 3 202 0 106 3 202 0 107 3 202 1 49] -#[1 3 206 0 2 3 206 0 4 3 206 0 6 3 206 0 7 3 206 0 40 3 206 0 41 3 206 0 43 3 206 0 44 4 129 0 45 3 206 0 76 3 206 0 94 3 206 0 95 3 206 0 106 3 206 0 107 3 206 1 49] -#[1 3 210 0 2 3 210 0 4 3 210 0 6 3 210 0 7 3 210 0 40 3 210 0 41 4 133 0 43 3 210 0 44 3 210 0 76 3 210 0 94 3 210 0 95 3 210 0 106 3 210 0 107 3 210 1 49] -#[0 8 145 0 95] -#[1 3 214 0 2 3 214 0 4 3 214 0 6 3 214 0 7 4 137 0 40 3 214 0 41 3 214 0 44 3 214 0 76 3 214 0 94 3 214 0 95 3 214 0 106 3 214 0 107 3 214 1 49] -#[0 3 218 0 2 0 6 0 7 0 94 0 95 0 106 0 107 1 49] -#[0 3 222 0 7 0 94] -#[0 3 226 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[1 3 157 0 3 3 161 0 5 2 9 0 97 4 157 0 114 8 149 0 180 4 169 0 184 4 169 0 185 4 169 0 186] -#[0 3 230 0 7 0 94] -#[1 0 25 0 1 0 29 0 3 0 11 0 4 2 93 0 5 0 37 0 7 2 97 0 25 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 1 109 0 54 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 2 101 0 68 0 109 0 69 1 109 0 73 0 121 0 74 1 221 0 75 0 129 0 77 2 105 0 78 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 2 109 0 98 2 161 0 100 2 165 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 2 113 0 114 2 129 0 115 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 2 121 0 128 2 125 0 129 2 129 0 130 2 129 0 131 2 129 0 132 2 125 0 133 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 2 25 0 168 2 25 0 171 2 25 0 172 2 25 0 173 8 153 0 174 2 149 0 175 2 25 0 176 2 25 0 177 1 109 0 178 2 25 0 181 2 25 0 195 2 25 0 196 2 25 0 197 2 25 0 198 2 25 0 201 2 25 0 202 2 25 0 204 2 25 0 205 2 25 0 206 2 25 0 212 2 25 0 214 2 25 0 215 2 25 0 219 0 245 0 221 8 157 0 228 8 161 0 229 1 81 0 230 1 177 0 231 2 125 0 233 2 125 0 235 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 2 161 1 18 2 165 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 3 234 0 2 0 4 0 6 0 7 0 76 0 94 0 95 0 106 0 107 1 49] -#[0 3 238 0 2 0 4 0 6 0 7 0 76 0 94 0 95 0 106 0 107 1 49] -#[1 0 10 0 108 8 165 1 24 8 169 1 43] -#[1 3 242 0 3 0 171 0 108 8 173 0 110 8 181 1 21 8 181 1 22 1 249 1 23 8 181 1 41 2 1 1 43 8 185 1 48] -#[1 3 250 0 3 3 250 0 8 3 250 0 13 8 189 0 21 8 193 0 95 3 250 0 109] -#[1 3 242 0 3 8 197 0 8 0 94 0 13 8 201 0 109 8 229 1 27 8 209 1 31 8 213 1 32 8 217 1 33 8 213 1 34 8 213 1 35 8 229 1 36 8 233 1 44 8 237 1 48] -#[0 3 254 0 3 0 8 0 13 0 109] -#[0 4 2 0 3 0 8 0 13 0 109] -#[0 4 6 0 109] -#[1 8 241 0 109 8 245 1 29] -#[0 0 175 0 4 0 94] -#[1 0 25 0 1 2 45 0 3 2 49 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 2 53 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 7 149 0 163 7 149 0 164 2 69 0 184 2 69 0 185 2 69 0 186 8 249 0 191 8 249 0 192 0 245 0 221 7 149 0 230 1 177 0 231 0 245 0 237 7 149 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 4 10 0 2 0 4 0 6 0 22 0 71 0 76 0 94] -#[1 8 253 0 4 4 189 0 5 2 9 0 97 2 109 0 98 4 197 0 100 4 201 0 101 6 53 0 114 6 57 0 115 6 57 0 130 6 57 0 131 6 57 0 132 9 1 0 190 9 1 0 192 4 197 1 18 4 201 1 19] -#[1 0 25 0 1 2 45 0 3 2 49 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 9 5 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 7 161 0 163 7 161 0 164 9 9 0 184 9 9 0 185 9 9 0 186 0 245 0 221 7 161 0 230 1 177 0 231 0 245 0 237 7 161 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 4 14 0 6 0 94] -#[0 9 13 0 6] -#[0 4 18 0 6] -#[0 4 22 0 2 0 4 0 6 0 22 0 71 0 76 0 94] -#[1 0 30 0 3 0 30 0 5 0 30 0 6 0 30 0 93 2 169 0 94 0 30 0 97 9 17 0 124 2 181 0 125 9 21 0 189] -#[0 4 26 0 2 0 4 0 6 0 7 0 76 0 94] -#[1 3 157 0 3 3 161 0 5 2 9 0 97 9 25 0 114 9 29 0 184 9 29 0 185 9 29 0 186] -#[0 4 30 0 2 0 94] -#[0 4 34 0 1 0 95] -#[1 2 238 0 2 3 157 0 3 3 161 0 5 7 113 0 93 2 9 0 97 6 53 0 114 2 69 0 184 2 69 0 185 2 69 0 186 7 145 0 191 7 145 0 192 7 141 0 194 9 33 0 222 7 129 0 223 7 133 0 224 7 137 0 225 7 141 0 226 7 145 0 227] -#[0 9 37 0 2] -#[1 3 157 0 3 3 161 0 5 2 9 0 97 6 53 0 114 2 69 0 184 2 69 0 185 2 69 0 186 9 45 0 191 9 45 0 192 9 45 0 227 9 45 0 234] -#[0 4 38 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 4 42 0 4 0 94] -#[1 3 157 0 3 3 161 0 5 2 9 0 97 9 49 0 114 9 9 0 184 9 9 0 185 9 9 0 186] -#[0 4 46 0 2 0 94] -#[0 4 50 0 2] -#[0 9 53 0 2] -#[0 4 54 0 2] -#[0 4 58 0 2] -#[1 4 62 0 2 9 57 0 94] -#[0 4 66 0 2] -#[0 4 70 0 2 0 94] -#[0 4 74 0 4 0 94] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 5 77 0 93 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 9 61 0 126 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 9 65 0 163 9 65 0 164 0 245 0 221 9 65 0 230 1 177 0 231 0 245 0 237 9 65 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 4 78 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 4 82 0 4 0 6 0 94] -#[0 4 86 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 4 90 0 3] -#[1 4 94 0 4 4 189 0 5 9 69 0 7 2 97 0 25 2 101 0 68 2 105 0 78 9 73 0 79 2 109 0 98 4 197 0 100 4 201 0 101 9 77 0 115 9 77 0 130 9 77 0 131 9 77 0 132 9 97 0 233 9 97 0 235 9 85 0 246 9 89 0 247 9 93 0 248 9 97 0 249 4 197 1 18 4 201 1 19] -#[0 4 98 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 9 101 0 163 9 101 0 164 9 101 0 167 0 245 0 221 9 101 0 230 1 177 0 231 0 245 0 237 9 101 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 9 105 0 98] -#[0 4 102 0 7 0 66] -#[1 9 109 0 4 5 125 0 98 9 113 1 15] -#[0 4 106 0 7] -#[0 4 110 0 1 0 3 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 53 0 54 0 55 0 56 0 58 0 59 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 4 114 0 1 0 3 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 53 0 54 0 55 0 56 0 58 0 59 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 4 118 0 1 0 3 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 53 0 54 0 55 0 56 0 58 0 59 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 9 117 0 1] -#[1 2 238 0 2 3 157 0 3 3 161 0 5 7 113 0 93 2 9 0 97 6 53 0 114 2 69 0 184 2 69 0 185 2 69 0 186 7 145 0 191 7 145 0 192 7 141 0 194 9 121 0 223 7 133 0 224 7 137 0 225 7 141 0 226 7 145 0 227] -#[0 4 122 0 1 0 3 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 53 0 54 0 55 0 56 0 58 0 59 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[1 1 150 0 7 4 245 0 22 4 126 0 71 1 150 0 76 1 150 0 94 6 65 0 134 4 253 0 135] -#[1 9 125 0 7 6 73 0 94] -#[1 2 86 0 7 9 129 0 76 2 86 0 94] -#[1 4 245 0 22 4 130 0 71 6 77 0 135] -#[0 9 133 0 71] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 9 137 0 163 9 137 0 164 9 137 0 167 0 245 0 221 9 137 0 230 1 177 0 231 0 245 0 237 9 137 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 9 141 0 163 9 141 0 164 9 141 0 167 0 245 0 221 9 141 0 230 1 177 0 231 0 245 0 237 9 141 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 2 46 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 5 181 0 163 5 181 0 164 9 145 0 166 5 181 0 167 0 245 0 221 5 181 0 230 1 177 0 231 0 245 0 237 5 181 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 9 149 0 7] -#[1 1 150 0 7 4 245 0 22 4 126 0 71 4 126 0 76 1 150 0 94 6 233 0 134 4 253 0 135] -#[1 4 245 0 22 4 130 0 71 4 130 0 76 6 245 0 135] -#[0 4 134 0 71 0 76] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 9 153 0 163 9 153 0 164 9 153 0 167 0 245 0 221 9 153 0 230 1 177 0 231 0 245 0 237 9 153 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 9 157 0 163 9 157 0 164 9 157 0 167 0 245 0 221 9 157 0 230 1 177 0 231 0 245 0 237 9 157 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 238 0 2 3 157 0 3 3 161 0 5 7 113 0 93 2 9 0 97 6 53 0 114 2 69 0 184 2 69 0 185 2 69 0 186 7 145 0 191 7 145 0 192 7 141 0 194 9 161 0 223 7 133 0 224 7 137 0 225 7 141 0 226 7 145 0 227] -#[0 9 165 0 2] -#[1 0 25 0 1 0 29 0 3 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 9 169 0 168 9 169 0 171 9 169 0 172 9 169 0 173 9 169 0 181 9 169 0 195 9 169 0 196 9 169 0 197 9 169 0 198 9 169 0 201 9 169 0 202 9 169 0 204 9 169 0 205 9 169 0 206 9 169 0 212 9 169 0 214 9 169 0 215 9 169 0 219 0 245 0 221 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 9 0 97 9 173 0 114 9 173 1 11] -#[0 4 138 0 66] -#[1 9 177 0 4 2 9 0 97 5 213 0 98 5 225 0 114 9 181 1 9 5 225 1 11] -#[0 4 142 0 66] -#[0 4 146 0 1 0 3 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 53 0 54 0 55 0 56 0 58 0 59 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 4 150 0 66] -#[0 4 154 0 66] -#[0 4 158 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 4 162 0 2 0 94] -#[0 4 166 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[1 0 25 0 1 9 185 0 2 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 9 189 0 93 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 9 193 0 163 9 193 0 164 0 245 0 221 9 193 0 230 1 177 0 231 0 245 0 237 9 193 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 4 170 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[1 9 197 0 3 9 201 0 207] -#[1 3 157 0 3 3 161 0 5 2 9 0 97 9 213 0 114 9 213 0 184 9 213 0 185 9 213 0 186 9 213 0 218] -#[0 4 174 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 4 178 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[1 3 157 0 3 3 161 0 5 2 9 0 97 6 53 0 114 2 69 0 184 2 69 0 185 2 69 0 186 8 249 0 191 8 249 0 192] -#[0 4 182 0 7 0 94] -#[1 0 25 0 1 0 29 0 3 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 9 217 0 168 9 217 0 171 9 217 0 172 9 217 0 173 9 217 0 181 9 217 0 195 9 217 0 196 9 217 0 197 9 217 0 198 9 217 0 201 9 217 0 202 9 217 0 204 9 217 0 205 9 217 0 206 9 217 0 212 9 217 0 214 9 217 0 215 9 217 0 219 0 245 0 221 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 25 0 1 0 29 0 3 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 9 221 0 168 9 221 0 171 9 221 0 172 9 221 0 173 9 221 0 181 9 221 0 195 9 221 0 196 9 221 0 197 9 221 0 198 9 221 0 201 9 221 0 202 9 221 0 204 9 221 0 205 9 221 0 206 9 221 0 212 9 221 0 214 9 221 0 215 9 221 0 219 0 245 0 221 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 2 182 0 3 2 182 0 108 2 182 0 110 9 225 1 39 7 9 1 40] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 9 229 0 163 9 229 0 164 9 229 0 167 0 245 0 221 9 229 0 230 1 177 0 231 0 245 0 237 9 229 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 4 186 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 4 190 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[1 9 233 0 106 9 237 0 107] -#[0 4 194 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 4 198 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 9 241 0 163 9 241 0 164 0 245 0 221 9 241 0 230 1 177 0 231 0 245 0 237 9 241 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 4 202 0 7 0 94] -#[0 4 206 0 4] -#[0 9 245 0 4] -#[0 4 210 0 4] -#[0 4 214 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 0 108 0 109 0 110 1 49] -#[0 9 249 0 108] -#[0 4 218 0 3 0 108 0 110] -#[0 4 222 0 3 0 108 0 110] -#[0 4 226 0 3 0 108 0 110] -#[0 9 253 0 3] -#[0 4 230 0 109] -#[0 10 1 0 109] -#[1 4 234 0 13 10 5 1 46] -#[1 4 238 0 3 4 238 0 8 4 238 0 13 4 238 0 22 8 193 0 95 4 238 0 109] -#[0 4 242 0 3 0 8 0 13 0 22 0 109] -#[1 10 9 0 8 0 94 0 13 10 13 1 44] -#[0 4 246 0 3 0 8 0 13 0 109] -#[1 3 242 0 3 4 250 0 8 4 250 0 13 8 201 0 109 8 229 1 27 10 17 1 32 10 17 1 34 10 17 1 35 8 229 1 36 8 237 1 48] -#[0 4 254 0 3 0 8 0 13 0 109] -#[0 5 2 0 3 0 8 0 13 0 109] -#[1 5 6 0 3 5 6 0 8 5 6 0 13 10 21 0 22 5 6 0 109 10 25 1 37] -#[0 10 29 0 13] -#[0 10 33 0 3] -#[1 5 10 0 3 5 10 0 8 5 10 0 13 8 189 0 21 5 10 0 109] -#[0 5 14 0 109] -#[0 5 18 0 4 0 94] -#[0 5 22 0 2 0 4 0 6 0 22 0 71 0 76 0 94] -#[0 5 26 0 4 0 94] -#[1 0 98 0 1 0 98 0 5 0 179 0 6 0 98 0 8 0 98 0 9 0 98 0 10 0 98 0 11 0 98 0 12 0 98 0 13 0 98 0 14 0 98 0 15 0 98 0 16 0 98 0 17 0 102 0 18 0 98 0 19 0 98 0 20 0 98 0 21 0 98 0 22 0 98 0 23 0 98 0 24 0 98 0 25 0 98 0 26 0 98 0 27 0 98 0 28 0 98 0 29 0 98 0 30 0 98 0 31 0 98 0 32 0 98 0 33 0 98 0 34 0 98 0 35 0 98 0 36 0 98 0 37 0 98 0 39 0 98 0 40 0 98 0 41 0 98 0 42 0 98 0 43 0 98 0 44 0 98 0 45 0 98 0 47 0 98 0 48 0 98 0 71 0 98 0 72 0 98 0 94 0 98 0 104 0 98 0 105] -#[0 5 34 0 2 0 6] -#[0 5 38 0 2 0 4 0 6 0 22 0 71 0 76 0 94] -#[1 3 157 0 3 3 161 0 5 2 202 0 6 7 113 0 93 2 9 0 97 6 53 0 114 2 69 0 184 2 69 0 185 2 69 0 186 7 57 0 191 7 57 0 192 10 37 0 193 10 37 0 194] -#[0 5 42 0 6 0 94] -#[0 10 41 0 2] -#[0 10 45 0 2] -#[0 10 49 0 2] -#[0 10 53 0 3] -#[0 5 46 0 2] -#[0 10 57 0 2] -#[0 5 30 0 2 0 6] -#[0 10 61 0 3] -#[1 3 157 0 3 3 161 0 5 7 113 0 93 2 9 0 97 6 53 0 114 2 69 0 184 2 69 0 185 2 69 0 186 10 69 0 191 10 69 0 192 10 65 0 194 10 65 0 226 10 69 0 227] -#[0 5 50 0 6 0 94] -#[0 5 54 0 6 0 94] -#[0 5 58 0 4 0 5 0 7 0 25 0 68 0 78 0 79 0 98 0 100 0 101] -#[1 4 189 0 5 2 97 0 25 2 101 0 68 2 105 0 78 2 109 0 98 4 197 0 100 4 201 0 101 9 77 0 115 9 77 0 130 9 77 0 131 9 77 0 132 10 73 0 233 10 73 0 235 4 197 1 18 4 201 1 19] -#[0 5 49 0 1] -#[0 5 62 0 4 0 5 0 7 0 25 0 68 0 78 0 79 0 98 0 100 0 101] -#[0 10 77 0 4] -#[0 5 66 0 4] -#[1 5 70 0 4 4 189 0 5 9 69 0 7 2 97 0 25 2 101 0 68 2 105 0 78 9 73 0 79 2 109 0 98 4 197 0 100 4 201 0 101 9 77 0 115 9 77 0 130 9 77 0 131 9 77 0 132 10 81 0 233 10 81 0 235 10 81 0 249 4 197 1 18 4 201 1 19] -#[0 5 74 0 4 0 5 0 7 0 25 0 68 0 78 0 79 0 98 0 100 0 101] -#[1 10 85 0 2 4 153 0 94] -#[0 5 78 0 4 0 94] -#[0 5 82 0 7 0 66] -#[0 5 86 0 4 0 94] -#[1 2 238 0 2 3 157 0 3 3 161 0 5 7 113 0 93 2 9 0 97 6 53 0 114 2 69 0 184 2 69 0 185 2 69 0 186 7 145 0 191 7 145 0 192 7 141 0 194 10 89 0 223 7 133 0 224 7 137 0 225 7 141 0 226 7 145 0 227] -#[0 10 93 0 2] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 2 46 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 5 181 0 163 5 181 0 164 10 97 0 166 5 181 0 167 0 245 0 221 5 181 0 230 1 177 0 231 0 245 0 237 5 181 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 10 101 0 163 10 101 0 164 10 101 0 167 0 245 0 221 10 101 0 230 1 177 0 231 0 245 0 237 10 101 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 10 105 0 163 10 105 0 164 10 105 0 167 0 245 0 221 10 105 0 230 1 177 0 231 0 245 0 237 10 105 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 10 109 0 2 4 153 0 94] -#[1 10 113 0 2 4 153 0 94] -#[0 10 117 0 7] -#[1 0 25 0 1 2 46 0 2 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 5 181 0 163 5 181 0 164 10 121 0 166 5 181 0 167 0 245 0 221 5 181 0 230 1 177 0 231 0 245 0 237 5 181 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 10 125 0 2 4 153 0 94] -#[1 10 129 0 2 4 153 0 94] -#[0 10 133 0 2] -#[0 10 137 0 3] -#[1 5 90 0 1 5 90 0 3 5 90 0 4 5 90 0 5 5 90 0 7 5 90 0 34 5 90 0 35 5 90 0 36 5 90 0 37 5 90 0 38 5 90 0 46 5 90 0 50 5 90 0 51 5 90 0 53 5 90 0 54 5 90 0 55 5 90 0 56 5 90 0 57 5 90 0 58 5 90 0 59 10 141 0 60 5 90 0 61 5 90 0 63 5 90 0 65 5 90 0 67 5 90 0 69 5 90 0 70 5 90 0 73 5 90 0 74 5 90 0 75 5 90 0 77 5 90 0 80 5 90 0 81 5 90 0 83 5 90 0 84 5 90 0 85 5 90 0 86 5 90 0 87 5 90 0 88 5 90 0 89 5 90 0 90 5 90 0 91 5 90 0 92 5 90 0 97 5 90 0 100 5 90 0 101 5 90 0 102 5 90 0 104 5 90 0 105 5 90 0 108 5 90 1 49] -#[0 5 94 0 4 0 94] -#[0 5 98 0 66] -#[0 5 102 0 4 0 94] -#[0 5 106 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 10 145 0 163 10 145 0 164 0 245 0 221 10 145 0 230 1 177 0 231 0 245 0 237 10 145 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 5 110 0 2 0 94] -#[1 5 114 0 4 10 149 0 51 5 114 0 57 10 153 0 208 10 157 0 209 10 161 0 210] -#[0 5 118 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 5 122 0 2] -#[0 5 126 0 2] -#[0 10 165 0 2] -#[0 5 130 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 5 134 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 10 169 0 108] -#[1 4 153 0 94 5 138 0 106 5 138 0 107] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 10 173 0 163 10 173 0 164 10 173 0 167 0 245 0 221 10 173 0 230 1 177 0 231 0 245 0 237 10 173 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 5 142 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 5 146 0 2 0 4 0 6 0 7 0 76 0 94 0 95 0 106 0 107 1 49] -#[0 5 150 0 2 0 4 0 6 0 7 0 76 0 94 0 95 0 106 0 107 1 49] -#[0 10 177 0 8] -#[1 0 25 0 1 2 5 0 3 0 94 0 4 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 5 77 0 93 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 10 189 0 126 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 10 189 0 163 10 189 0 164 0 245 0 221 10 189 0 230 1 177 0 231 0 245 0 237 10 189 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 10 189 1 42 2 1 1 43 10 193 1 44] -#[0 5 154 0 3 0 8 0 13 0 22 0 109] -#[0 10 197 0 13] -#[1 4 234 0 13 10 201 1 46] -#[0 10 205 0 13] -#[0 5 158 0 3 0 8 0 13 0 109] -#[1 3 242 0 3 10 209 0 100 0 7 0 108 10 209 1 18 10 221 1 21 10 221 1 22 1 249 1 23 10 221 1 25 10 221 1 38 2 1 1 43 10 225 1 48] -#[0 5 162 0 3 0 8 0 13 0 109] -#[0 5 166 0 3 0 108 0 110] -#[1 5 77 0 93 10 229 0 126] -#[0 10 233 0 6] -#[0 5 170 0 18] -#[0 5 174 0 18] -#[0 10 237 0 3] -#[1 0 25 0 1 0 29 0 3 0 26 0 4 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 1 109 0 54 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 1 109 0 73 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 2 25 0 168 2 25 0 171 2 25 0 172 2 25 0 173 8 153 0 174 2 149 0 175 2 25 0 176 2 25 0 177 1 109 0 178 2 25 0 181 2 25 0 195 2 25 0 196 2 25 0 197 2 25 0 198 2 25 0 201 2 25 0 202 2 25 0 204 2 25 0 205 2 25 0 206 2 25 0 212 2 25 0 214 2 25 0 215 2 25 0 219 0 245 0 221 10 241 0 228 8 161 0 229 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 10 245 0 3] -#[1 0 25 0 1 0 29 0 3 0 26 0 4 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 1 109 0 54 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 1 109 0 73 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 2 25 0 168 2 25 0 171 2 25 0 172 2 25 0 173 8 153 0 174 2 149 0 175 2 25 0 176 2 25 0 177 1 109 0 178 2 25 0 181 2 25 0 195 2 25 0 196 2 25 0 197 2 25 0 198 2 25 0 201 2 25 0 202 2 25 0 204 2 25 0 205 2 25 0 206 2 25 0 212 2 25 0 214 2 25 0 215 2 25 0 219 0 245 0 221 10 249 0 228 8 161 0 229 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 5 178 0 2] -#[0 5 182 0 2 0 94] -#[0 5 186 0 4 0 5 0 7 0 25 0 68 0 78 0 79 0 98 0 100 0 101] -#[0 5 190 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 38 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 48 0 50 0 53 0 54 0 55 0 56 0 58 0 59 0 61 0 63 0 65 0 67 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 94 0 95 0 97 0 100 0 101 0 102 0 104 0 105 0 106 0 107 0 108 1 49] -#[0 5 194 0 4 0 5 0 7 0 25 0 68 0 78 0 79 0 98 0 100 0 101] -#[0 10 253 0 7] -#[0 11 1 0 2] -#[0 11 5 0 3] -#[0 11 9 0 7] -#[1 11 13 0 2 4 153 0 94] -#[1 11 17 0 2 4 153 0 94] -#[1 0 25 0 1 0 29 0 3 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 11 21 0 168 11 21 0 171 11 21 0 172 11 21 0 173 11 21 0 181 11 21 0 195 11 21 0 196 11 21 0 197 11 21 0 198 11 21 0 201 11 21 0 202 11 21 0 204 11 21 0 205 11 21 0 206 11 21 0 212 11 21 0 214 11 21 0 215 11 21 0 219 0 245 0 221 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 25 0 1 0 29 0 3 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 11 25 0 168 11 25 0 171 11 25 0 172 11 25 0 173 11 25 0 181 11 25 0 195 11 25 0 196 11 25 0 197 11 25 0 198 11 25 0 201 11 25 0 202 11 25 0 204 11 25 0 205 11 25 0 206 11 25 0 212 11 25 0 214 11 25 0 215 11 25 0 219 0 245 0 221 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 25 0 1 2 46 0 2 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 5 181 0 163 5 181 0 164 11 29 0 166 5 181 0 167 0 245 0 221 5 181 0 230 1 177 0 231 0 245 0 237 5 181 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 11 33 0 2] -#[1 0 25 0 1 0 29 0 3 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 11 37 0 168 11 37 0 171 11 37 0 172 11 37 0 173 11 37 0 181 11 37 0 195 11 37 0 196 11 37 0 197 11 37 0 198 11 37 0 201 11 37 0 202 11 37 0 204 11 37 0 205 11 37 0 206 11 37 0 212 11 37 0 214 11 37 0 215 11 37 0 219 0 245 0 221 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 25 0 1 0 29 0 3 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 11 41 0 168 11 41 0 171 11 41 0 172 11 41 0 173 11 41 0 181 11 41 0 195 11 41 0 196 11 41 0 197 11 41 0 198 11 41 0 201 11 41 0 202 11 41 0 204 11 41 0 205 11 41 0 206 11 41 0 212 11 41 0 214 11 41 0 215 11 41 0 219 0 245 0 221 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 11 45 0 3] -#[1 0 25 0 1 0 29 0 3 0 26 0 4 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 1 109 0 54 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 1 109 0 73 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 2 25 0 168 2 25 0 171 2 25 0 172 2 25 0 173 8 153 0 174 2 149 0 175 2 25 0 176 2 25 0 177 1 109 0 178 2 25 0 181 2 25 0 195 2 25 0 196 2 25 0 197 2 25 0 198 2 25 0 201 2 25 0 202 2 25 0 204 2 25 0 205 2 25 0 206 2 25 0 212 2 25 0 214 2 25 0 215 2 25 0 219 0 245 0 221 11 49 0 228 8 161 0 229 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 25 0 1 0 29 0 3 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 11 53 0 168 11 53 0 171 11 53 0 172 11 53 0 173 11 53 0 181 11 53 0 195 11 53 0 196 11 53 0 197 11 53 0 198 11 53 0 201 11 53 0 202 11 53 0 204 11 53 0 205 11 53 0 206 11 53 0 212 11 53 0 214 11 53 0 215 11 53 0 219 0 245 0 221 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 5 198 0 2 0 94] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 11 57 0 163 11 57 0 164 11 57 0 167 0 245 0 221 11 57 0 230 1 177 0 231 0 245 0 237 11 57 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 11 61 0 4 11 65 0 57 11 69 0 211] -#[1 5 202 0 4 10 149 0 51 5 202 0 57 11 73 0 210] -#[0 5 206 0 4 0 51 0 57] -#[1 3 145 0 3 11 77 0 173] -#[0 11 81 0 8] -#[1 4 153 0 94 5 210 0 106 5 210 0 107] -#[1 7 13 0 109 11 85 1 26 11 85 1 27 11 85 1 28 7 29 1 29 7 33 1 30] -#[0 5 214 0 4] -#[0 5 218 0 4] -#[1 0 94 0 4 11 89 1 44] -#[0 11 93 0 4] -#[0 5 222 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 0 108 0 109 0 110 1 49] -#[0 11 97 0 13] -#[0 5 226 0 3 0 108 0 110] -#[0 5 230 0 3 0 8 0 13 0 109] -#[0 5 234 0 3 0 8 0 13 0 109] -#[0 5 238 0 3 0 8 0 13 0 109] -#[0 5 242 0 3 0 8 0 13 0 109] -#[0 11 101 0 3] -#[1 0 10 0 4 11 105 1 43] -#[0 5 246 0 2 0 4 0 6 0 22 0 71 0 76 0 94] -#[1 0 25 0 1 0 29 0 3 0 26 0 4 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 1 109 0 54 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 1 109 0 73 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 2 25 0 168 2 25 0 171 2 25 0 172 2 25 0 173 8 153 0 174 2 149 0 175 2 25 0 176 2 25 0 177 1 109 0 178 2 25 0 181 2 25 0 195 2 25 0 196 2 25 0 197 2 25 0 198 2 25 0 201 2 25 0 202 2 25 0 204 2 25 0 205 2 25 0 206 2 25 0 212 2 25 0 214 2 25 0 215 2 25 0 219 0 245 0 221 11 109 0 228 8 161 0 229 1 81 0 230 1 177 0 231 0 245 0 237 11 113 0 238 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 11 117 0 4] -#[1 0 25 0 1 0 29 0 3 0 26 0 4 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 1 109 0 54 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 1 109 0 73 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 2 25 0 168 2 25 0 171 2 25 0 172 2 25 0 173 8 153 0 174 2 149 0 175 2 25 0 176 2 25 0 177 1 109 0 178 2 25 0 181 2 25 0 195 2 25 0 196 2 25 0 197 2 25 0 198 2 25 0 201 2 25 0 202 2 25 0 204 2 25 0 205 2 25 0 206 2 25 0 212 2 25 0 214 2 25 0 215 2 25 0 219 0 245 0 221 11 121 0 228 8 161 0 229 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 11 125 0 4] -#[0 5 250 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 11 129 0 3] -#[1 0 25 0 1 0 29 0 3 0 26 0 4 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 1 109 0 54 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 1 109 0 73 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 2 25 0 168 2 25 0 171 2 25 0 172 2 25 0 173 8 153 0 174 2 149 0 175 2 25 0 176 2 25 0 177 1 109 0 178 2 25 0 181 2 25 0 195 2 25 0 196 2 25 0 197 2 25 0 198 2 25 0 201 2 25 0 202 2 25 0 204 2 25 0 205 2 25 0 206 2 25 0 212 2 25 0 214 2 25 0 215 2 25 0 219 0 245 0 221 11 133 0 228 8 161 0 229 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 25 0 1 2 46 0 2 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 5 181 0 163 5 181 0 164 11 137 0 166 5 181 0 167 0 245 0 221 5 181 0 230 1 177 0 231 0 245 0 237 5 181 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 25 0 1 0 29 0 3 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 11 141 0 168 11 141 0 171 11 141 0 172 11 141 0 173 11 141 0 181 11 141 0 195 11 141 0 196 11 141 0 197 11 141 0 198 11 141 0 201 11 141 0 202 11 141 0 204 11 141 0 205 11 141 0 206 11 141 0 212 11 141 0 214 11 141 0 215 11 141 0 219 0 245 0 221 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 25 0 1 0 29 0 3 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 11 145 0 168 11 145 0 171 11 145 0 172 11 145 0 173 11 145 0 181 11 145 0 195 11 145 0 196 11 145 0 197 11 145 0 198 11 145 0 201 11 145 0 202 11 145 0 204 11 145 0 205 11 145 0 206 11 145 0 212 11 145 0 214 11 145 0 215 11 145 0 219 0 245 0 221 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 5 254 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 6 2 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 11 149 0 2] -#[1 0 25 0 1 0 29 0 3 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 11 153 0 168 11 153 0 171 11 153 0 172 11 153 0 173 11 153 0 181 11 153 0 195 11 153 0 196 11 153 0 197 11 153 0 198 11 153 0 201 11 153 0 202 11 153 0 204 11 153 0 205 11 153 0 206 11 153 0 212 11 153 0 214 11 153 0 215 11 153 0 219 0 245 0 221 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 6 6 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 6 10 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[1 0 25 0 1 0 29 0 3 0 26 0 4 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 1 109 0 54 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 1 109 0 73 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 2 25 0 168 2 25 0 171 2 25 0 172 2 25 0 173 8 153 0 174 2 149 0 175 2 25 0 176 2 25 0 177 1 109 0 178 2 25 0 181 2 25 0 195 2 25 0 196 2 25 0 197 2 25 0 198 2 25 0 201 2 25 0 202 2 25 0 204 2 25 0 205 2 25 0 206 2 25 0 212 2 25 0 214 2 25 0 215 2 25 0 219 0 245 0 221 11 109 0 228 8 161 0 229 1 81 0 230 1 177 0 231 0 245 0 237 11 157 0 238 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 11 161 0 4] -#[0 6 14 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[1 4 153 0 94 11 165 0 95] -#[0 6 18 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 11 169 0 95] -#[1 5 114 0 4 10 149 0 51 11 173 0 208 10 157 0 209 10 161 0 210] -#[0 6 22 0 4 0 51 0 57] -#[0 6 26 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 64 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[1 6 30 0 13 11 177 1 47] -#[1 6 30 0 13 11 181 1 47] -#[0 11 185 0 4] -#[0 6 34 0 3 0 108 0 110] -#[0 6 38 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 0 108 0 109 0 110 1 49] -#[1 0 25 0 1 2 5 0 3 0 33 0 5 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 69 0 53 0 85 0 58 1 225 0 63 0 105 0 67 0 121 0 74 1 221 0 75 0 133 0 80 0 141 0 83 1 225 0 85 0 157 0 87 0 165 0 89 0 177 0 92 2 9 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 11 189 0 163 11 189 0 164 0 245 0 221 11 189 0 230 1 177 0 231 0 245 0 237 11 189 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 11 193 0 4] -#[0 6 42 0 4] -#[0 11 197 0 4] -#[0 6 46 0 4 0 5 0 7 0 25 0 68 0 78 0 79 0 94 0 98 0 100 0 101] -#[0 11 201 0 4] -#[0 6 50 0 4 0 5 0 7 0 25 0 68 0 78 0 79 0 94 0 98 0 100 0 101] -#[1 0 25 0 1 0 29 0 3 0 26 0 4 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 1 109 0 54 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 1 109 0 73 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 2 25 0 168 2 25 0 171 2 25 0 172 2 25 0 173 8 153 0 174 2 149 0 175 2 25 0 176 2 25 0 177 1 109 0 178 2 25 0 181 2 25 0 195 2 25 0 196 2 25 0 197 2 25 0 198 2 25 0 201 2 25 0 202 2 25 0 204 2 25 0 205 2 25 0 206 2 25 0 212 2 25 0 214 2 25 0 215 2 25 0 219 0 245 0 221 11 109 0 228 8 161 0 229 1 81 0 230 1 177 0 231 0 245 0 237 11 205 0 238 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 11 209 0 4] -#[0 11 213 0 2] -#[0 6 54 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 6 58 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[1 0 25 0 1 0 29 0 3 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 11 217 0 168 11 217 0 171 11 217 0 172 11 217 0 173 11 217 0 181 11 217 0 195 11 217 0 196 11 217 0 197 11 217 0 198 11 217 0 201 11 217 0 202 11 217 0 204 11 217 0 205 11 217 0 206 11 217 0 212 11 217 0 214 11 217 0 215 11 217 0 219 0 245 0 221 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 6 62 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 11 221 0 4] -#[0 6 66 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[1 0 25 0 1 0 29 0 3 0 26 0 4 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 26 0 51 0 69 0 53 1 109 0 54 0 77 0 55 0 81 0 56 0 26 0 57 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 1 109 0 73 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 2 25 0 168 2 25 0 171 2 25 0 172 2 25 0 173 11 225 0 174 2 149 0 175 2 25 0 176 2 25 0 177 1 109 0 178 2 25 0 181 2 25 0 195 2 25 0 196 2 25 0 197 2 25 0 198 2 25 0 201 2 25 0 202 2 25 0 204 2 25 0 205 2 25 0 206 2 25 0 212 2 25 0 214 2 25 0 215 2 25 0 219 0 245 0 221 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[1 0 25 0 1 0 29 0 3 0 26 0 4 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 26 0 51 0 69 0 53 1 109 0 54 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 1 109 0 73 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 2 25 0 168 2 25 0 171 2 25 0 172 2 25 0 173 11 229 0 174 2 149 0 175 2 25 0 176 2 25 0 177 1 109 0 178 2 25 0 181 2 25 0 195 2 25 0 196 2 25 0 197 2 25 0 198 2 25 0 201 2 25 0 202 2 25 0 204 2 25 0 205 2 25 0 206 2 25 0 212 2 25 0 214 2 25 0 215 2 25 0 219 0 245 0 221 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 11 233 0 4] -#[0 11 237 0 13] -#[0 11 241 0 13] -#[0 6 70 0 3 0 108 0 110] -#[1 0 10 0 4 11 245 1 43] -#[0 6 74 0 3 0 8 0 13 0 109] -#[0 6 78 0 4 0 5 0 7 0 25 0 68 0 78 0 79 0 94 0 98 0 100 0 101] -#[0 6 82 0 4 0 5 0 7 0 25 0 68 0 78 0 79 0 94 0 98 0 100 0 101] -#[0 11 249 0 4] -#[0 6 86 0 1 0 3 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 53 0 54 0 55 0 56 0 58 0 59 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[1 0 25 0 1 0 29 0 3 0 33 0 5 0 37 0 7 0 41 0 34 0 45 0 35 0 49 0 36 0 53 0 37 0 57 0 38 0 61 0 46 0 65 0 50 0 69 0 53 0 77 0 55 0 81 0 56 0 85 0 58 0 89 0 59 1 225 0 63 0 101 0 65 0 105 0 67 0 109 0 69 0 121 0 74 1 221 0 75 0 129 0 77 0 133 0 80 0 137 0 81 0 141 0 83 0 145 0 84 1 225 0 85 0 153 0 86 0 157 0 87 0 161 0 88 0 165 0 89 0 169 0 90 0 173 0 91 0 177 0 92 0 181 0 97 1 229 0 100 1 233 0 101 0 193 0 102 0 197 0 104 0 6 0 105 0 7 0 108 0 209 0 114 0 245 0 116 0 245 0 117 0 221 0 118 0 245 0 121 0 245 0 122 0 245 0 127 0 245 0 136 0 241 0 137 0 245 0 140 0 245 0 141 0 245 0 142 0 245 0 143 1 17 0 144 1 9 0 145 1 9 0 146 1 17 0 149 1 25 0 150 1 25 0 151 1 33 0 152 1 33 0 153 1 37 0 154 1 41 0 155 1 45 0 156 1 49 0 157 1 53 0 158 1 57 0 159 1 61 0 160 1 65 0 161 1 69 0 162 1 81 0 163 1 81 0 164 1 81 0 167 11 253 0 168 11 253 0 171 11 253 0 172 11 253 0 173 11 253 0 181 11 253 0 195 11 253 0 196 11 253 0 197 11 253 0 198 11 253 0 201 11 253 0 202 11 253 0 204 11 253 0 205 11 253 0 206 11 253 0 212 11 253 0 214 11 253 0 215 11 253 0 219 0 245 0 221 1 81 0 230 1 177 0 231 0 245 0 237 1 81 0 239 0 245 0 242 1 221 1 16 1 225 1 17 1 229 1 18 1 233 1 19 0 245 1 20 0 245 1 21 0 245 1 22 1 249 1 23 0 245 1 25 2 1 1 43] -#[0 6 90 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 6 94 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 1 49] -#[0 6 98 0 4 0 51 0 57] -#[0 6 102 0 4 0 51] -#[0 6 106 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 6 110 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 0 109 1 49] -#[0 6 114 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 28 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 40 0 41 0 42 0 43 0 44 0 45 0 47 0 48 0 71 0 72 0 76 0 94 0 95 0 104 0 105 0 106 0 107 0 108 0 109 0 110 1 49] -#[0 12 1 0 4] -#[0 6 118 0 1 0 3 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 53 0 54 0 55 0 56 0 58 0 59 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 6 122 0 1 0 3 0 4 0 5 0 7 0 34 0 35 0 36 0 37 0 38 0 46 0 50 0 51 0 53 0 54 0 55 0 56 0 57 0 58 0 59 0 60 0 61 0 63 0 65 0 67 0 69 0 70 0 73 0 74 0 75 0 77 0 80 0 81 0 83 0 84 0 85 0 86 0 87 0 88 0 89 0 90 0 91 0 92 0 97 0 100 0 101 0 102 0 104 0 105 0 108 1 49] -#[0 6 126 0 3 0 8 0 13 0 109] - ). -] - -{ #category : #private } -JSParser >> actionsForCurrentToken [ - | actions | - actions := super actionsForCurrentToken. - (currentToken ids first ~= scanner identifierId and: [ (currentToken ids includes: scanner identifierId) and: [ (self keywords includes: currentToken value) not ] ]) - ifTrue: [ self addActionsFor: scanner identifierId to: actions ]. - (currentToken ids first ~= scanner identifierNameId and: [ currentToken ids includes: scanner identifierNameId ]) - ifTrue: [ self addActionsFor: scanner identifierNameId to: actions ]. - (currentToken ids first == scanner regular_expressionId and: [ actions isEmpty ]) - ifTrue: [ (currentToken value at: 2) == $= - ifTrue: [ currentToken := scanner tokenClass value: '/=' start: currentToken startPosition ids: (Array with: scanner slashEqualId). - self position: currentToken startPosition + 1 ] - ifFalse: [ currentToken := scanner tokenClass value: '/' start: currentToken startPosition ids: (Array with: scanner slashId). - self position: currentToken startPosition ]. - ^ self actionsForCurrentToken ]. - (actions isEmpty and: [ ((currentState attributeNamed: #lastInsertedSemicolonPosition) ifNil: [ -1 ]) < scanner position ]) - ifTrue: [ self addActionsFor: self scanner semicolonId to: actions. - actions notEmpty - ifTrue: [ currentState attributeNamed: #lastInsertedSemicolonPosition put: scanner position. - self position: currentToken startPosition - 1. - currentToken := currentToken class value: ';' start: nil ids: (Array with: self scanner semicolonId) ] ]. - actions isEmpty - ifTrue: [ (currentToken ids includes: scanner rightBraceId) - ifTrue: [ | i scannerState stackItem | - i := nodeStack size. - scannerState := nil. - [ i > 0 and: [ scannerState isNil ] ] - whileTrue: [ stackItem := nodeStack at: i. - stackItem = #template - ifTrue: [ scannerState := stackItem ]. - i := i - 1 ]. - scannerState notNil - ifTrue: [ self scope: scannerState. - self position: currentToken startPosition - 1. - currentToken := nil. - self getNextToken. - self scope: #default. - (currentToken ids includes: scanner rightBraceId) - ifTrue: [ ^ actions ]. - ^ self actionsForCurrentToken ] ] ]. - ^ actions -] - -{ #category : #private } -JSParser >> checkEOL [ - | stackTop position | - (self isEOFToken or: [ currentToken ids includes: scanner semicolonId ]) - ifTrue: [ ^ self ]. - nodeStack isEmpty - ifTrue: [ ^ self ]. - stackTop := nodeStack last. - position := [ ((stackTop isKindOf: SmaCCToken) - ifTrue: [ stackTop ] - ifFalse: [ (stackTop isKindOf: SmaCCDeferredChoice) - ifTrue: [ stackTop possibleItems first ] ]) stopPosition ] - on: Error - do: [ :ex | currentToken startPosition ]. - (scanner hasNewlineBetween: position and: currentToken startPosition) - ifTrue: [ currentState attributeNamed: #lastInsertedSemicolonPosition put: scanner position. - self position: currentToken startPosition - 1. - currentToken := currentToken class value: ';' start: nil ids: (Array with: self scanner semicolonId) ] -] - -{ #category : #private } -JSParser >> defaultScope [ - ^ #jsx -] - -{ #category : #private } -JSParser >> handleError: anInteger [ - (currentToken value = ';' and: [ currentToken startPosition isNil ]) - ifTrue: [ currentToken := nil. - self getNextToken ]. - ^ super handleError: anInteger -] - -{ #category : #private } -JSParser >> isJSX [ - ^ true -] - -{ #category : #private } -JSParser >> keywords [ - ^ self class keywords -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForArgumentList1: nodes [ - | result | - result := Array new: 4. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForArgumentList2: nodes [ - | result | - result := Array new: 4. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 2). - self add: (nodes at: 2) to: (result at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForArgumentList3: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 4). - self add: (nodes at: 3) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForArgumentList4: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 4). - self add: (nodes at: 3) to: (result at: 2). - self add: (nodes at: 4) to: (result at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForArguments1: nodes [ - | result | - result := Array new: 6. - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForArguments2: nodes [ - | result | - result := Array new: 6. - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 3). - self addAll: ((nodes at: 2) at: 2) to: (result at: 4). - self addAll: ((nodes at: 2) at: 3) to: (result at: 5). - self addAll: ((nodes at: 2) at: 4) to: (result at: 6). - result at: 2 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForArguments3: nodes [ - | result | - result := Array new: 6. - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 3). - self addAll: ((nodes at: 2) at: 2) to: (result at: 4). - self addAll: ((nodes at: 2) at: 3) to: (result at: 5). - self addAll: ((nodes at: 2) at: 4) to: (result at: 6). - self add: (nodes at: 3) to: (result at: 6). - result at: 2 put: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForArrayBindingPattern1: nodes [ - | result | - result := JSArrayBindingPatternNode new. - result leftBracket: (nodes at: 1). - result addTokens: (nodes at: 2) to: result commas. - result restElement: (nodes at: 3). - result rightBracket: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForArrayBindingPattern2: nodes [ - | result | - result := JSArrayBindingPatternNode new. - result leftBracket: (nodes at: 1). - result addTokens: ((nodes at: 2) at: 1) to: result commas. - result addNodes: ((nodes at: 2) at: 2) to: result elements. - result rightBracket: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForArrayBindingPattern3: nodes [ - | result | - result := JSArrayBindingPatternNode new. - result leftBracket: (nodes at: 1). - result addTokens: ((nodes at: 2) at: 1) to: result commas. - result addNodes: ((nodes at: 2) at: 2) to: result elements. - result addToken: (nodes at: 3) to: result commas. - result addTokens: (nodes at: 4) to: result commas. - result restElement: (nodes at: 5). - result rightBracket: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForArrayLiteral1: nodes [ - | result | - result := JSArrayLiteralNode new. - result leftBracket: (nodes at: 1). - result addTokens: (nodes at: 2) to: result commas. - result rightBracket: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForArrayLiteral2: nodes [ - | result | - result := JSArrayLiteralNode new. - result leftBracket: (nodes at: 1). - result addTokens: ((nodes at: 2) at: 1) to: result commas. - result addNodes: ((nodes at: 2) at: 2) to: result expressions. - result rightBracket: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForArrayLiteral3: nodes [ - | result | - result := JSArrayLiteralNode new. - result leftBracket: (nodes at: 1). - result addTokens: ((nodes at: 2) at: 1) to: result commas. - result addNodes: ((nodes at: 2) at: 2) to: result expressions. - result addTokens: (nodes at: 3) to: result commas. - result rightBracket: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForArrowFunction1: nodes [ - | result | - result := JSArrowFunctionNode new. - result addNodes: ((nodes at: 1) at: 1) to: result parameters. - result left: ((nodes at: 1) at: 2). - result addTokens: ((nodes at: 1) at: 3) to: result commas. - result right: ((nodes at: 1) at: 4). - result ellipsis: ((nodes at: 1) at: 5). - result varParameter: ((nodes at: 1) at: 6). - result arrow: (nodes at: 2). - result addNodes: ((nodes at: 3) at: 1) to: result statements. - result leftBracket: ((nodes at: 3) at: 2). - result rightBracket: ((nodes at: 3) at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForArrowParameters1: nodes [ - | result | - result := Array new: 6. - result at: 1 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForArrowParameters2: nodes [ - | result | - result := Array new: 6. - result at: 1 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 2 put: ((nodes at: 1) at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 1). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - result at: 4 put: ((nodes at: 1) at: 4). - result at: 5 put: ((nodes at: 1) at: 5). - result at: 6 put: ((nodes at: 1) at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForAssignmentExpression4: nodes [ - | result | - result := JSAssignmentExpressionNode new. - result lhs: (nodes at: 1). - result operator: (nodes at: 2). - result rhs: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForBindingElementList1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self add: ((nodes at: 1) at: 2) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForBindingElementList2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 1). - self addAll: ((nodes at: 3) at: 1) to: (result at: 1). - self add: ((nodes at: 3) at: 2) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForBindingElisionElement1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - self addAll: (nodes at: 1) to: (result at: 1). - result at: 2 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForBindingProperty2: nodes [ - | result | - result := JSBindingPropertyNode new. - result name: (nodes at: 1). - result colonToken: (nodes at: 2). - result element: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForBindingRestElement1: nodes [ - | result | - result := JSRestVariableDeclarationNode new. - result ellipsis: (nodes at: 1). - result variable: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForBlock1: nodes [ - | result | - result := JSBlockStatementNode new. - result leftBrace: (nodes at: 1). - result addNodes: (nodes at: 2) to: result statements. - result rightBrace: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForBreakStatement1: nodes [ - | result | - result := JSBreakStatementNode new. - result breakToken: (nodes at: 1). - result label: (nodes at: 3). - result semicolon: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForCallExpression1: nodes [ - | result | - result := JSCallExpressionNode new. - result expression: (nodes at: 1). - result left: ((nodes at: 2) at: 1). - result right: ((nodes at: 2) at: 2). - result addNodes: ((nodes at: 2) at: 3) to: result arguments. - result addTokens: ((nodes at: 2) at: 4) to: result ellipsises. - result addNodes: ((nodes at: 2) at: 5) to: result varArguments. - result addTokens: ((nodes at: 2) at: 6) to: result commas. - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForCallExpression4: nodes [ - | result | - result := JSIndexedPropertyExpressionNode new. - result addNode: (nodes at: 1) to: result expressions. - result leftBracket: (nodes at: 2). - result addNode: (nodes at: 3) to: result expressions. - result rightBracket: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForCaseBlock1: nodes [ - | result | - result := Array new: 3. - result at: 2 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: (nodes at: 2) to: (result at: 2). - result at: 3 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForCaseBlock2: nodes [ - | result | - result := Array new: 3. - result at: 2 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: (nodes at: 2) to: (result at: 2). - self add: (nodes at: 3) to: (result at: 2). - self addAll: (nodes at: 4) to: (result at: 2). - result at: 3 put: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForCaseClause1: nodes [ - | result | - result := JSCaseClauseNode new. - result caseToken: (nodes at: 1). - result caseExpression: (nodes at: 2). - result colonToken: (nodes at: 3). - result addNodes: (nodes at: 4) to: result statements. - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForCatch1: nodes [ - | result | - result := Array new: 5. - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - result at: 4 put: (nodes at: 4). - result at: 5 put: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForCheckEOL1: nodes [ - self checkEOL. - ^ nil -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForClassElement2: nodes [ - | result | - result := JSStaticMethodDefinitionNode new. - result staticToken: (nodes at: 1). - result method: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForClassExpression1: nodes [ - | result | - result := JSClassExpressionNode new. - result classToken: (nodes at: 1). - result name: (nodes at: 2). - result extendsToken: ((nodes at: 3) at: 1). - result superclass: ((nodes at: 3) at: 2). - result leftBrace: ((nodes at: 3) at: 3). - result addNodes: ((nodes at: 3) at: 4) to: result elements. - result rightBrace: ((nodes at: 3) at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForClassTail1: nodes [ - | result | - result := Array new: 5. - result at: 4 put: (OrderedCollection new: 2). - result at: 1 put: ((nodes at: 1) at: 1). - result at: 2 put: ((nodes at: 1) at: 2). - result at: 3 put: (nodes at: 2). - self addAll: (nodes at: 3) to: (result at: 4). - result at: 5 put: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForComputedPropertyName1: nodes [ - | result | - result := JSComputedPropertyNameNode new. - result leftBrace: (nodes at: 1). - result expression: (nodes at: 2). - result rightBrace: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForConciseBody1: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForConciseBody2: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (nodes at: 1). - self addAll: (nodes at: 2) to: (result at: 1). - result at: 3 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForConditionalExpression2: nodes [ - | result | - result := JSConditionalExpressionNode new. - result condition: (nodes at: 1). - result questionMarkToken: (nodes at: 2). - result trueExpression: (nodes at: 3). - result colonToken: (nodes at: 4). - result falseExpression: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForContinueStatement1: nodes [ - | result | - result := JSContinueStatementNode new. - result continueToken: (nodes at: 1). - result label: (nodes at: 3). - result semicolon: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForCoverInitializedName1: nodes [ - | result | - result := JSPropertyAssignmentNode new. - result name: (nodes at: 1). - result equalToken: ((nodes at: 2) at: 1). - result value: ((nodes at: 2) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForCoverParenthesizedExpressionAndArrowParameterList1: nodes [ - | result | - result := Array new: 6. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - result at: 4 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForCoverParenthesizedExpressionAndArrowParameterList2: nodes [ - | result | - result := Array new: 6. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - self add: (nodes at: 3) to: (result at: 3). - result at: 5 put: (nodes at: 4). - result at: 6 put: (nodes at: 5). - result at: 4 put: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForDebuggerStatement1: nodes [ - | result | - result := JSDebuggerStatementNode new. - result debuggerToken: (nodes at: 1). - result semicolon: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForDefaultClause1: nodes [ - | result | - result := JSDefaultClauseNode new. - result defaultToken: (nodes at: 1). - result colonToken: (nodes at: 2). - result addNodes: (nodes at: 3) to: result statements. - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForElementList2: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - self addAll: (nodes at: 1) to: (result at: 1). - self add: (nodes at: 2) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForElementList4: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 1). - self addAll: (nodes at: 3) to: (result at: 1). - self add: (nodes at: 4) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForEmptyStatement1: nodes [ - | result | - result := JSEmptyStatementNode new. - result semicolon: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForExponentiationExpression2: nodes [ - | result | - result := JSBinaryExpressionNode new. - result leftExpression: (nodes at: 1). - result operator: (nodes at: 2). - result rightExpression: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForExportClause1: nodes [ - | result | - result := Array new: 4. - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForExportClause2: nodes [ - | result | - result := Array new: 4. - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 3). - self addAll: ((nodes at: 2) at: 2) to: (result at: 4). - result at: 2 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForExportClause3: nodes [ - | result | - result := Array new: 4. - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 3). - self addAll: ((nodes at: 2) at: 2) to: (result at: 4). - self add: (nodes at: 3) to: (result at: 4). - result at: 2 put: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForExportDeclaration1: nodes [ - | result | - result := JSExportDeclarationNode new. - result exportToken: (nodes at: 1). - result star: (nodes at: 2). - result fromToken: ((nodes at: 3) at: 1). - result from: ((nodes at: 3) at: 2). - result semicolon: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForExportDeclaration2: nodes [ - | result | - result := JSExportDeclarationNode new. - result exportToken: (nodes at: 1). - result leftBrace: ((nodes at: 2) at: 1). - result rightBrace: ((nodes at: 2) at: 2). - result addNodes: ((nodes at: 2) at: 3) to: result specifiers. - result addTokens: ((nodes at: 2) at: 4) to: result commas. - result fromToken: ((nodes at: 3) at: 1). - result from: ((nodes at: 3) at: 2). - result semicolon: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForExportDeclaration3: nodes [ - | result | - result := JSExportDeclarationNode new. - result exportToken: (nodes at: 1). - result leftBrace: ((nodes at: 2) at: 1). - result rightBrace: ((nodes at: 2) at: 2). - result addNodes: ((nodes at: 2) at: 3) to: result specifiers. - result addTokens: ((nodes at: 2) at: 4) to: result commas. - result semicolon: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForExportDeclaration4: nodes [ - | result | - result := JSExportDeclarationNode new. - result exportToken: (nodes at: 1). - result statement: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForExportDeclaration5: nodes [ - | result | - result := JSExportDeclarationNode new. - result exportToken: (nodes at: 1). - result declaration: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForExportDeclaration6: nodes [ - | result | - result := JSExportDeclarationNode new. - result exportToken: (nodes at: 1). - result defaultToken: (nodes at: 2). - result statement: (nodes at: 3). - result semicolon: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForExportSpecifier1: nodes [ - | result | - result := JSExportSpecifierNode new. - result name: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForExportSpecifier2: nodes [ - | result | - result := JSExportSpecifierNode new. - result name: (nodes at: 1). - result asToken: (nodes at: 2). - result _as: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForExpression2: nodes [ - | result | - result := JSCommaExpressionNode new. - result addNode: (nodes at: 1) to: result expressions. - result comma: (nodes at: 2). - result addNode: (nodes at: 3) to: result expressions. - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForExpressionStatement1: nodes [ - | result | - result := JSExpressionStatementNode new. - result expression: (nodes at: 1). - result semicolon: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForFormalParameterList1: nodes [ - | result | - result := Array new: 3. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForFormalParameterList2: nodes [ - | result | - result := Array new: 3. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 2). - self addAll: ((nodes at: 1) at: 2) to: (result at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForFormalParameterList3: nodes [ - | result | - result := Array new: 3. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 2). - self addAll: ((nodes at: 1) at: 2) to: (result at: 3). - self add: (nodes at: 2) to: (result at: 3). - result at: 1 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForFormalParameters1: nodes [ - | result | - result := Array new: 3. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForFunctionExpression1: nodes [ - | result | - result := JSFunctionNode new. - result functionToken: (nodes at: 1). - result name: (nodes at: 2). - result left: (nodes at: 3). - result restParameter: ((nodes at: 4) at: 1). - result addNodes: ((nodes at: 4) at: 2) to: result parameters. - result addTokens: ((nodes at: 4) at: 3) to: result commas. - result right: (nodes at: 5). - result leftBrace: (nodes at: 6). - result addNodes: (nodes at: 7) to: result statements. - result rightBrace: (nodes at: 8). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForGeneratorExpression1: nodes [ - | result | - result := JSGeneratorFunctionNode new. - result functionToken: (nodes at: 1). - result star: (nodes at: 2). - result name: (nodes at: 3). - result left: (nodes at: 4). - result restParameter: ((nodes at: 5) at: 1). - result addNodes: ((nodes at: 5) at: 2) to: result parameters. - result addTokens: ((nodes at: 5) at: 3) to: result commas. - result right: (nodes at: 6). - result leftBrace: (nodes at: 7). - result addNodes: (nodes at: 8) to: result statements. - result rightBrace: (nodes at: 9). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForGeneratorMethod1: nodes [ - | result | - result := JSGeneratorMethodDefinitionNode new. - result star: (nodes at: 1). - result name: (nodes at: 2). - result left: (nodes at: 3). - result restParameter: ((nodes at: 4) at: 1). - result addNodes: ((nodes at: 4) at: 2) to: result parameters. - result addTokens: ((nodes at: 4) at: 3) to: result commas. - result right: (nodes at: 5). - result leftBrace: (nodes at: 6). - result addNodes: (nodes at: 7) to: result statements. - result rightBrace: (nodes at: 8). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForIdentifier1: nodes [ - | result | - result := JSNameExpressionNode new. - result name: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForIfStatement1: nodes [ - | result | - result := JSIfStatementNode new. - result ifToken: (nodes at: 1). - result left: (nodes at: 2). - result expression: (nodes at: 3). - result right: (nodes at: 4). - result trueStatement: (nodes at: 5). - result elseToken: (nodes at: 6). - result elseStatement: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForIfStatement2: nodes [ - | result | - result := JSIfStatementNode new. - result ifToken: (nodes at: 1). - result left: (nodes at: 2). - result expression: (nodes at: 3). - result right: (nodes at: 4). - result trueStatement: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForImportClause1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForImportClause4: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - result at: 2 put: (nodes at: 2). - self add: (nodes at: 3) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForImportDeclaration1: nodes [ - | result | - result := JSImportDeclarationNode new. - result importToken: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result imports. - result comma: ((nodes at: 2) at: 2). - result fromToken: ((nodes at: 3) at: 1). - result from: ((nodes at: 3) at: 2). - result semicolon: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForImportDeclaration2: nodes [ - | result | - result := JSImportDeclarationNode new. - result importToken: (nodes at: 1). - result from: (nodes at: 2). - result semicolon: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForImportSpecifier1: nodes [ - | result | - result := JSImportSpecifierNode new. - result binding: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForImportSpecifier2: nodes [ - | result | - result := JSImportSpecifierNode new. - result name: (nodes at: 1). - result asToken: (nodes at: 2). - result binding: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForInitializer1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForInitializeropt1: nodes [ - | result | - result := Array new: 2. - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForIterationStatement10: nodes [ - | result | - result := JSForOfStatementNode new. - result forToken: (nodes at: 1). - result left: (nodes at: 2). - result varToken: (nodes at: 3). - result variable: (nodes at: 4). - result ofToken: (nodes at: 5). - result expression: (nodes at: 6). - result right: (nodes at: 7). - result statement: (nodes at: 8). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForIterationStatement11: nodes [ - | result | - result := JSForOfStatementNode new. - result forToken: (nodes at: 1). - result left: (nodes at: 2). - result varToken: ((nodes at: 3) at: 1). - result variable: ((nodes at: 3) at: 2). - result ofToken: (nodes at: 4). - result expression: (nodes at: 5). - result right: (nodes at: 6). - result statement: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForIterationStatement1: nodes [ - | result | - result := JSDoWhileStatementNode new. - result doToken: (nodes at: 1). - result statement: (nodes at: 2). - result whileToken: (nodes at: 3). - result left: (nodes at: 4). - result expression: (nodes at: 5). - result right: (nodes at: 6). - result semicolon: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForIterationStatement2: nodes [ - | result | - result := JSWhileStatementNode new. - result whileToken: (nodes at: 1). - result left: (nodes at: 2). - result expression: (nodes at: 3). - result right: (nodes at: 4). - result statement: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForIterationStatement3: nodes [ - | result | - result := JSForStatementNode new. - result forToken: (nodes at: 1). - result left: (nodes at: 2). - result initialExpression: (nodes at: 3). - result addToken: (nodes at: 4) to: result semicolons. - result condition: (nodes at: 5). - result addToken: (nodes at: 6) to: result semicolons. - result iteratorExpression: (nodes at: 7). - result right: (nodes at: 8). - result statement: (nodes at: 9). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForIterationStatement4: nodes [ - | result | - result := JSForStatementNode new. - result forToken: (nodes at: 1). - result left: (nodes at: 2). - result varToken: (nodes at: 3). - result addNodes: ((nodes at: 4) at: 1) to: result variables. - result addTokens: ((nodes at: 4) at: 2) to: result commas. - result addToken: (nodes at: 5) to: result semicolons. - result condition: (nodes at: 6). - result addToken: (nodes at: 7) to: result semicolons. - result iteratorExpression: (nodes at: 8). - result right: (nodes at: 9). - result statement: (nodes at: 10). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForIterationStatement5: nodes [ - | result | - result := JSForStatementNode new. - result forToken: (nodes at: 1). - result left: (nodes at: 2). - result declaration: (nodes at: 3). - result condition: (nodes at: 4). - result addToken: (nodes at: 5) to: result semicolons. - result iteratorExpression: (nodes at: 6). - result right: (nodes at: 7). - result statement: (nodes at: 8). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForIterationStatement6: nodes [ - | result | - result := JSForInStatementNode new. - result forToken: (nodes at: 1). - result left: (nodes at: 2). - result variable: (nodes at: 3). - result inToken: (nodes at: 4). - result expression: (nodes at: 5). - result right: (nodes at: 6). - result statement: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForIterationStatement7: nodes [ - | result | - result := JSForInStatementNode new. - result forToken: (nodes at: 1). - result left: (nodes at: 2). - result varToken: (nodes at: 3). - result variable: (nodes at: 4). - result inToken: (nodes at: 5). - result expression: (nodes at: 6). - result right: (nodes at: 7). - result statement: (nodes at: 8). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForIterationStatement8: nodes [ - | result | - result := JSForInStatementNode new. - result forToken: (nodes at: 1). - result left: (nodes at: 2). - result varToken: ((nodes at: 3) at: 1). - result variable: ((nodes at: 3) at: 2). - result inToken: (nodes at: 4). - result expression: (nodes at: 5). - result right: (nodes at: 6). - result statement: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForIterationStatement9: nodes [ - | result | - result := JSForOfStatementNode new. - result forToken: (nodes at: 1). - result left: (nodes at: 2). - result variable: (nodes at: 3). - result ofToken: (nodes at: 4). - result expression: (nodes at: 5). - result right: (nodes at: 6). - result statement: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForJSXAttribute1: nodes [ - | result | - result := JSXAttributeNode new. - result name: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForJSXAttribute2: nodes [ - | result | - result := JSXAttributeNode new. - result name: (nodes at: 1). - result equalToken: ((nodes at: 2) at: 1). - result value: ((nodes at: 2) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForJSXChild1: nodes [ - | result | - result := JSXTextNode new. - result value: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForJSXChild3: nodes [ - | result | - result := JSXCodeExpressionNode new. - result leftBrace: (nodes at: 2). - result rightBrace: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForJSXChild4: nodes [ - | result | - result := JSXCodeExpressionNode new. - result leftBrace: (nodes at: 2). - result expression: (nodes at: 3). - result rightBrace: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForJSXClosingElement1: nodes [ - | result | - result := JSXClosingElementNode new. - result ltToken: (nodes at: 2). - result slashToken: (nodes at: 3). - result name: (nodes at: 4). - result gtToken: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForJSXElement2: nodes [ - | result | - result := JSXElementNode new. - result openingElement: (nodes at: 1). - result addNodes: (nodes at: 3) to: result items. - result closingElement: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForJSXElementName1: nodes [ - | result | - result := JSXElementNameNode new. - result identifier: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForJSXFragment1: nodes [ - | result | - result := JSXFragmentNode new. - result addToken: (nodes at: 1) to: result ltTokens. - result addToken: (nodes at: 3) to: result gtTokens. - result addNodes: (nodes at: 5) to: result items. - result addToken: (nodes at: 6) to: result ltTokens. - result slashToken: (nodes at: 7). - result addToken: (nodes at: 9) to: result gtTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForJSXMemberExpression1: nodes [ - | result | - result := JSXMemberExpressionNode new. - result addTokens: ((nodes at: 1) at: 1) to: result identifiers. - result addTokens: ((nodes at: 1) at: 2) to: result periodTokens. - result addToken: (nodes at: 2) to: result identifiers. - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForJSXNamespacedName1: nodes [ - | result | - result := JSXNamespacedNameNode new. - result addToken: (nodes at: 1) to: result identifiers. - result colonToken: (nodes at: 2). - result addToken: (nodes at: 3) to: result identifiers. - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForJSXOpeningElement1: nodes [ - | result | - result := JSXOpeningElementNode new. - result ltToken: (nodes at: 2). - result name: (nodes at: 3). - result gtToken: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForJSXOpeningElement2: nodes [ - | result | - result := JSXOpeningElementNode new. - result ltToken: (nodes at: 2). - result name: (nodes at: 3). - result addNodes: (nodes at: 4) to: result _attributes. - result gtToken: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForJSXSelfClosingElement1: nodes [ - | result | - result := JSXSelfClosingElementNode new. - result ltToken: (nodes at: 2). - result name: (nodes at: 3). - result slashToken: (nodes at: 4). - result gtToken: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForJSXSelfClosingElement2: nodes [ - | result | - result := JSXSelfClosingElementNode new. - result ltToken: (nodes at: 2). - result name: (nodes at: 3). - result addNodes: (nodes at: 4) to: result _attributes. - result slashToken: (nodes at: 5). - result gtToken: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForJSXSpreadAttribute1: nodes [ - | result | - result := JSXSpreadAttributeNode new. - result leftBrace: (nodes at: 2). - result element: (nodes at: 3). - result rightBrace: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForLabelledStatement1: nodes [ - | result | - result := JSLabelledStatementNode new. - result label: (nodes at: 1). - result colonToken: (nodes at: 2). - result statement: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForLexicalDeclaration1: nodes [ - | result | - result := JSLexicalDeclarationNode new. - result typeToken: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result bindings. - result addTokens: ((nodes at: 2) at: 2) to: result commas. - result semicolon: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForLiteral1: nodes [ - | result | - result := JSNullLiteralNode new. - result value: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForLiteral2: nodes [ - | result | - result := JSBooleanLiteralNode new. - result value: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForLiteral3: nodes [ - | result | - result := JSNumericLiteralNode new. - result value: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForLiteral4: nodes [ - | result | - result := JSStringLiteralNode new. - result value: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForMemberExpression2: nodes [ - | result | - result := JSIndexedPropertyExpressionNode new. - result addNode: (nodes at: 1) to: result expressions. - result leftBracket: (nodes at: 2). - result fieldExpression: (nodes at: 3). - result rightBracket: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForMemberExpression3: nodes [ - | result | - result := JSNamedPropertyExpressionNode new. - result expression: (nodes at: 1). - result periodToken: (nodes at: 2). - result name: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForMemberExpression4: nodes [ - | result | - result := JSTaggedTemplateLiteralNode new. - result expression: (nodes at: 1). - result template: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForMemberExpression7: nodes [ - | result | - result := JSNewExpressionNode new. - result newToken: (nodes at: 1). - result expression: (nodes at: 2). - result left: ((nodes at: 3) at: 1). - result right: ((nodes at: 3) at: 2). - result addNodes: ((nodes at: 3) at: 3) to: result arguments. - result addTokens: ((nodes at: 3) at: 4) to: result ellipsises. - result addNodes: ((nodes at: 3) at: 5) to: result varArguments. - result addTokens: ((nodes at: 3) at: 6) to: result commas. - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForMethodDefinition1: nodes [ - | result | - result := JSMethodDefinitionNode new. - result name: (nodes at: 1). - result left: (nodes at: 2). - result restParameter: ((nodes at: 3) at: 1). - result addNodes: ((nodes at: 3) at: 2) to: result parameters. - result addTokens: ((nodes at: 3) at: 3) to: result commas. - result right: (nodes at: 4). - result leftBrace: (nodes at: 5). - result addNodes: (nodes at: 6) to: result statements. - result rightBrace: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForMethodDefinition3: nodes [ - | result | - result := JSGetMethodDefinitionNode new. - result getToken: (nodes at: 1). - result name: (nodes at: 2). - result left: (nodes at: 3). - result right: (nodes at: 4). - result leftBrace: (nodes at: 5). - result addNodes: (nodes at: 6) to: result statements. - result rightBrace: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForMethodDefinition4: nodes [ - | result | - result := JSSetMethodDefinitionNode new. - result setToken: (nodes at: 1). - result name: (nodes at: 2). - result left: (nodes at: 3). - result addNode: (nodes at: 4) to: result parameters. - result right: (nodes at: 5). - result leftBrace: (nodes at: 6). - result addNodes: (nodes at: 7) to: result statements. - result rightBrace: (nodes at: 8). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForModule1: nodes [ - | result | - result := JSModuleNode new. - result addNodes: (nodes at: 1) to: result items. - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForModuleBodyopt1: nodes [ - | result | - result := OrderedCollection new: 2. - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForModuleBodyopt2: nodes [ - | result | - result := nodes at: 1. - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForModuleItemList1: nodes [ - | result | - result := OrderedCollection new: 2. - self add: (nodes at: 1) to: result. - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForModuleItemList2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: result. - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForNameSpaceImport1: nodes [ - | result | - result := JSNameSpaceImportNode new. - result star: (nodes at: 1). - result asToken: (nodes at: 2). - result import: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForNamedImports1: nodes [ - | result | - result := JSNamedImportsNode new. - result leftBrace: (nodes at: 1). - result rightBrace: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForNamedImports2: nodes [ - | result | - result := JSNamedImportsNode new. - result leftBrace: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result specifiers. - result addTokens: ((nodes at: 2) at: 2) to: result commas. - result rightBrace: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForNamedImports3: nodes [ - | result | - result := JSNamedImportsNode new. - result leftBrace: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result specifiers. - result addTokens: ((nodes at: 2) at: 2) to: result commas. - result addToken: (nodes at: 3) to: result commas. - result rightBrace: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForNewExpression2: nodes [ - | result | - result := JSNewExpressionNode new. - result newToken: (nodes at: 1). - result expression: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForNewTarget1: nodes [ - | result | - result := JSNewTargetExpressionNode new. - result newToken: (nodes at: 1). - result periodToken: (nodes at: 2). - result targetToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForObjectBindingPattern1: nodes [ - | result | - result := JSObjectBindingPatternNode new. - result leftBrace: (nodes at: 1). - result rightBrace: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForObjectBindingPattern2: nodes [ - | result | - result := JSObjectBindingPatternNode new. - result leftBrace: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result properties. - result addTokens: ((nodes at: 2) at: 2) to: result commas. - result rightBrace: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForObjectBindingPattern3: nodes [ - | result | - result := JSObjectBindingPatternNode new. - result leftBrace: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result properties. - result addTokens: ((nodes at: 2) at: 2) to: result commas. - result addToken: (nodes at: 3) to: result commas. - result rightBrace: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForObjectLiteral1: nodes [ - | result | - result := JSObjectLiteralNode new. - result leftBrace: (nodes at: 1). - result rightBrace: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForObjectLiteral2: nodes [ - | result | - result := JSObjectLiteralNode new. - result leftBrace: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result definitions. - result addTokens: ((nodes at: 2) at: 2) to: result commas. - result rightBrace: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForObjectLiteral3: nodes [ - | result | - result := JSObjectLiteralNode new. - result leftBrace: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result definitions. - result addTokens: ((nodes at: 2) at: 2) to: result commas. - result addToken: (nodes at: 3) to: result commas. - result rightBrace: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForParameterList1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForParameterList2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 2). - self add: (nodes at: 3) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForParameterListopt1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForParenthesizedExpression1: nodes [ - | result | - result := nodes at: 2. - result addFirstToken: (nodes at: 1) to: result leftParens. - result addToken: (nodes at: 3) to: result rightParens. - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForPrimaryExpression1: nodes [ - | result | - result := JSThisExpressionNode new. - result thisToken: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForPropertyDefinition3: nodes [ - | result | - result := JSPropertyAssignmentNode new. - result name: (nodes at: 1). - result colonToken: (nodes at: 2). - result value: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForRegularExpressionLiteral1: nodes [ - | result | - result := JSRegularExpressionLiteralNode new. - result value: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForReturnStatement1: nodes [ - | result | - result := JSReturnStatementNode new. - result returnToken: (nodes at: 1). - result expression: (nodes at: 3). - result semicolon: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForScript1: nodes [ - | result | - result := JSScriptNode new. - result addNodes: (nodes at: 1) to: result statements. - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForSingleNameBinding1: nodes [ - | result | - result := JSVariableDeclarationNode new. - result variable: (nodes at: 1). - result equalToken: ((nodes at: 2) at: 1). - result value: ((nodes at: 2) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForSpreadElement1: nodes [ - | result | - result := JSSpreadExpressionNode new. - result ellipsis: (nodes at: 1). - result expression: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForStartJSXText1: nodes [ - ^ #jsxText -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForStartTemplateLiteral1: nodes [ - ^ #template -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForSuperCall1: nodes [ - | result | - result := JSSuperCallExpressionNode new. - result superToken: (nodes at: 1). - result left: ((nodes at: 2) at: 1). - result right: ((nodes at: 2) at: 2). - result addNodes: ((nodes at: 2) at: 3) to: result arguments. - result addTokens: ((nodes at: 2) at: 4) to: result ellipsises. - result addNodes: ((nodes at: 2) at: 5) to: result varArguments. - result addTokens: ((nodes at: 2) at: 6) to: result commas. - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForSuperProperty1: nodes [ - | result | - result := JSSuperIndexedPropertyExpressionNode new. - result superToken: (nodes at: 1). - result leftBracket: (nodes at: 2). - result expression: (nodes at: 3). - result rightBracket: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForSuperProperty2: nodes [ - | result | - result := JSSuperNamedPropertyExpressionNode new. - result superToken: (nodes at: 1). - result periodToken: (nodes at: 2). - result name: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForSwitchStatement1: nodes [ - | result | - result := JSSwitchStatementNode new. - result switchToken: (nodes at: 1). - result left: (nodes at: 2). - result expression: (nodes at: 3). - result right: (nodes at: 4). - result leftBrace: ((nodes at: 5) at: 1). - result addNodes: ((nodes at: 5) at: 2) to: result clauses. - result rightBrace: ((nodes at: 5) at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForSwitchToDefault1: nodes [ - self scope: #default. - ^ #default -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForSwitchToJSX1: nodes [ - self scope: #jsx. - ^ nil -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForSwitchToJSXText1: nodes [ - self scope: #jsxText. - ^ nil -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForSwitchToJSXTextOrDefault11: nodes [ - ^ self switchToJSXTextOrDefault: 1 -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForSwitchToJSXTextOrDefault21: nodes [ - ^ self switchToJSXTextOrDefault: 2 -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForTemplateLiteral1: nodes [ - | result | - result := JSTemplateLiteralNode new. - result addToken: (nodes at: 1) to: result parts. - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForTemplateLiteral2: nodes [ - | result | - result := JSTemplateLiteralNode new. - result addToken: (nodes at: 2) to: result parts. - result addNode: (nodes at: 3) to: result expressions. - result addTokens: ((nodes at: 4) at: 1) to: result parts. - result addNodes: ((nodes at: 4) at: 2) to: result expressions. - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForTemplateMiddleList1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - self add: (nodes at: 2) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForTemplateMiddleList2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 1). - self add: (nodes at: 3) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForTemplateSpans2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForThrowStatement1: nodes [ - | result | - result := JSThrowStatementNode new. - result throwToken: (nodes at: 1). - result expression: (nodes at: 2). - result semicolon: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForTryStatement1: nodes [ - | result | - result := JSTryStatementNode new. - result tryToken: (nodes at: 1). - result tryBlock: (nodes at: 2). - result catchToken: ((nodes at: 3) at: 1). - result left: ((nodes at: 3) at: 2). - result exceptionType: ((nodes at: 3) at: 3). - result right: ((nodes at: 3) at: 4). - result catchBlock: ((nodes at: 3) at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForTryStatement2: nodes [ - | result | - result := JSTryStatementNode new. - result tryToken: (nodes at: 1). - result tryBlock: (nodes at: 2). - result finallyToken: ((nodes at: 3) at: 1). - result finallyBlock: ((nodes at: 3) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForTryStatement3: nodes [ - | result | - result := JSTryStatementNode new. - result tryToken: (nodes at: 1). - result tryBlock: (nodes at: 2). - result catchToken: ((nodes at: 3) at: 1). - result left: ((nodes at: 3) at: 2). - result exceptionType: ((nodes at: 3) at: 3). - result right: ((nodes at: 3) at: 4). - result catchBlock: ((nodes at: 3) at: 5). - result finallyToken: ((nodes at: 4) at: 1). - result finallyBlock: ((nodes at: 4) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForUnaryExpression5: nodes [ - | result | - result := JSUnaryExpressionNode new. - result operator: (nodes at: 1). - result expression: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForUpdateExpression1: nodes [ - | result | - result := JSPostfixExpressionNode new. - result expression: (nodes at: 1). - result operator: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForUpdateExpression3: nodes [ - | result | - result := JSPrefixExpressionNode new. - result operator: (nodes at: 1). - result expression: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForVariableDeclaration2: nodes [ - | result | - result := JSVariablePatternDeclarationNode new. - result pattern: (nodes at: 1). - result equalToken: ((nodes at: 2) at: 1). - result value: ((nodes at: 2) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForVariableStatement1: nodes [ - | result | - result := JSVariableStatementNode new. - result varToken: (nodes at: 1). - result addNodes: ((nodes at: 2) at: 1) to: result variables. - result addTokens: ((nodes at: 2) at: 2) to: result commas. - result semicolon: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForWithStatement1: nodes [ - | result | - result := JSWithStatementNode new. - result withToken: (nodes at: 1). - result left: (nodes at: 2). - result expression: (nodes at: 3). - result right: (nodes at: 4). - result statement: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionForYieldExpression1: nodes [ - | result | - result := JSYieldExpressionNode new. - result yieldToken: (nodes at: 1). - result star: (nodes at: 2). - result expression: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionFor__JSXIdentifier___identifier___period___periodToken___1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - self add: ((nodes at: 1) at: 1) to: (result at: 1). - self add: ((nodes at: 1) at: 2) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -JSParser >> reduceActionFor__JSXIdentifier___identifier___period___periodToken___2: nodes [ - | result | - result := nodes at: 1. - self add: ((nodes at: 2) at: 1) to: (result at: 1). - self add: ((nodes at: 2) at: 2) to: (result at: 2). - ^ result -] - -{ #category : #private } -JSParser >> switchToJSXTextOrDefault: anInteger [ - | count i value | - i := nodeStack size. - count := 0. - [ i > 0 and: [ count < anInteger ] ] - whileTrue: [ value := nodeStack at: i. - value == #default - ifTrue: [ ^ self scope: #default ]. - value == #jsxText - ifTrue: [ count := count + 1 ]. - i := i - 1 ]. - self - scope: - (count >= anInteger - ifTrue: [ #jsxText ] - ifFalse: [ #default ]) -] diff --git a/src/SmaCC_Javascript_Parser/JSPostfixExpressionNode.class.st b/src/SmaCC_Javascript_Parser/JSPostfixExpressionNode.class.st deleted file mode 100644 index e938598da..000000000 --- a/src/SmaCC_Javascript_Parser/JSPostfixExpressionNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #JSPostfixExpressionNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'expression', - 'operator' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSPostfixExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPostfixExpression: self -] - -{ #category : #generated } -JSPostfixExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -JSPostfixExpressionNode >> expression: aJSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JSPostfixExpressionNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -JSPostfixExpressionNode >> operator [ - ^ operator -] - -{ #category : #generated } -JSPostfixExpressionNode >> operator: aSmaCCToken [ - operator := aSmaCCToken -] - -{ #category : #generated } -JSPostfixExpressionNode >> tokenVariables [ - ^ #(#operator) -] diff --git a/src/SmaCC_Javascript_Parser/JSPrefixExpressionNode.class.st b/src/SmaCC_Javascript_Parser/JSPrefixExpressionNode.class.st deleted file mode 100644 index edb243f5f..000000000 --- a/src/SmaCC_Javascript_Parser/JSPrefixExpressionNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #JSPrefixExpressionNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'operator', - 'expression' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSPrefixExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPrefixExpression: self -] - -{ #category : #generated } -JSPrefixExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -JSPrefixExpressionNode >> expression: aJSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JSPrefixExpressionNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -JSPrefixExpressionNode >> operator [ - ^ operator -] - -{ #category : #generated } -JSPrefixExpressionNode >> operator: aSmaCCToken [ - operator := aSmaCCToken -] - -{ #category : #generated } -JSPrefixExpressionNode >> tokenVariables [ - ^ #(#operator) -] diff --git a/src/SmaCC_Javascript_Parser/JSProgramNode.class.st b/src/SmaCC_Javascript_Parser/JSProgramNode.class.st deleted file mode 100644 index 156d56a06..000000000 --- a/src/SmaCC_Javascript_Parser/JSProgramNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #JSProgramNode, - #superclass : #SmaCCParseNode, - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSProgramNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitProgram: self -] diff --git a/src/SmaCC_Javascript_Parser/JSProgramNodeVisitor.class.st b/src/SmaCC_Javascript_Parser/JSProgramNodeVisitor.class.st deleted file mode 100644 index 66bc818c0..000000000 --- a/src/SmaCC_Javascript_Parser/JSProgramNodeVisitor.class.st +++ /dev/null @@ -1,460 +0,0 @@ -Class { - #name : #JSProgramNodeVisitor, - #superclass : #SmaCCParseNodeVisitor, - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSProgramNodeVisitor >> visitArrayBindingPattern: anArrayBindingPattern [ - ^ self visitProgram: anArrayBindingPattern -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitArrayLiteral: anArrayLiteral [ - ^ self visitExpression: anArrayLiteral -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitArrowFunction: anArrowFunction [ - ^ self visitExpression: anArrowFunction -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitAssignmentExpression: anAssignmentExpression [ - ^ self visitExpression: anAssignmentExpression -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitBinaryExpression: aBinaryExpression [ - ^ self visitExpression: aBinaryExpression -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitBindingProperty: aBindingProperty [ - ^ self visitProgram: aBindingProperty -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitBlockStatement: aBlockStatement [ - ^ self visitStatement: aBlockStatement -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitBooleanLiteral: aBooleanLiteral [ - ^ self visitLiteral: aBooleanLiteral -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitBreakStatement: aBreakStatement [ - ^ self visitStatement: aBreakStatement -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitCallExpression: aCallExpression [ - ^ self visitExpression: aCallExpression -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitCaseClause: aCaseClause [ - ^ self visitProgram: aCaseClause -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitClassExpression: aClassExpression [ - ^ self visitExpression: aClassExpression -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitCommaExpression: aCommaExpression [ - ^ self visitExpression: aCommaExpression -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitComputedPropertyName: aComputedPropertyName [ - ^ self visitProgram: aComputedPropertyName -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitConditionalExpression: aConditionalExpression [ - ^ self visitExpression: aConditionalExpression -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitContinueStatement: aContinueStatement [ - ^ self visitStatement: aContinueStatement -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitDebuggerStatement: aDebuggerStatement [ - ^ self visitStatement: aDebuggerStatement -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitDefaultClause: aDefaultClause [ - ^ self visitProgram: aDefaultClause -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitDoWhileStatement: aDoWhileStatement [ - ^ self visitStatement: aDoWhileStatement -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitEmptyStatement: anEmptyStatement [ - ^ self visitStatement: anEmptyStatement -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitExportDeclaration: anExportDeclaration [ - ^ self visitProgram: anExportDeclaration -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitExportSpecifier: anExportSpecifier [ - ^ self visitProgram: anExportSpecifier -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitExpression: anExpression [ - ^ self visitProgram: anExpression -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitExpressionStatement: anExpressionStatement [ - ^ self visitStatement: anExpressionStatement -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitForInStatement: aForInStatement [ - ^ self visitStatement: aForInStatement -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitForOfStatement: aForOfStatement [ - ^ self visitStatement: aForOfStatement -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitForStatement: aForStatement [ - ^ self visitStatement: aForStatement -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitFunction: aFunction [ - ^ self visitExpression: aFunction -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitGeneratorFunction: aGeneratorFunction [ - ^ self visitFunction: aGeneratorFunction -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitGeneratorMethodDefinition: aGeneratorMethodDefinition [ - ^ self visitMethodDefinition: aGeneratorMethodDefinition -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitGetMethodDefinition: aGetMethodDefinition [ - ^ self visitMethodDefinition: aGetMethodDefinition -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitIfStatement: anIfStatement [ - ^ self visitStatement: anIfStatement -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitImportDeclaration: anImportDeclaration [ - ^ self visitProgram: anImportDeclaration -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitImportSpecifier: anImportSpecifier [ - ^ self visitProgram: anImportSpecifier -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitIndexedPropertyExpression: anIndexedPropertyExpression [ - ^ self visitExpression: anIndexedPropertyExpression -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitLabelledStatement: aLabelledStatement [ - ^ self visitStatement: aLabelledStatement -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitLexicalDeclaration: aLexicalDeclaration [ - ^ self visitStatement: aLexicalDeclaration -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitLiteral: aLiteral [ - ^ self visitExpression: aLiteral -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitMethodDefinition: aMethodDefinition [ - ^ self visitProgram: aMethodDefinition -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitModule: aModule [ - ^ self visitProgram: aModule -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitNameExpression: aNameExpression [ - ^ self visitExpression: aNameExpression -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitNameSpaceImport: aNameSpaceImport [ - ^ self visitProgram: aNameSpaceImport -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitNamedImports: aNamedImports [ - ^ self visitProgram: aNamedImports -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitNamedPropertyExpression: aNamedPropertyExpression [ - ^ self visitExpression: aNamedPropertyExpression -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitNewExpression: aNewExpression [ - ^ self visitExpression: aNewExpression -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitNewTargetExpression: aNewTargetExpression [ - ^ self visitExpression: aNewTargetExpression -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitNullLiteral: aNullLiteral [ - ^ self visitLiteral: aNullLiteral -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitNumericLiteral: aNumericLiteral [ - ^ self visitLiteral: aNumericLiteral -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitObjectBindingPattern: anObjectBindingPattern [ - ^ self visitProgram: anObjectBindingPattern -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitObjectLiteral: anObjectLiteral [ - ^ self visitExpression: anObjectLiteral -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitPostfixExpression: aPostfixExpression [ - ^ self visitExpression: aPostfixExpression -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitPrefixExpression: aPrefixExpression [ - ^ self visitExpression: aPrefixExpression -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitProgram: aProgram [ - ^ self visitSmaCCParseNode: aProgram -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitPropertyAssignment: aPropertyAssignment [ - ^ self visitProgram: aPropertyAssignment -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitRegularExpressionLiteral: aRegularExpressionLiteral [ - ^ self visitLiteral: aRegularExpressionLiteral -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitRestVariableDeclaration: aRestVariableDeclaration [ - ^ self visitVariableDeclaration: aRestVariableDeclaration -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitReturnStatement: aReturnStatement [ - ^ self visitStatement: aReturnStatement -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitScript: aScript [ - ^ self visitProgram: aScript -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitSetMethodDefinition: aSetMethodDefinition [ - ^ self visitMethodDefinition: aSetMethodDefinition -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitSpreadExpression: aSpreadExpression [ - ^ self visitExpression: aSpreadExpression -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitStatement: aStatement [ - ^ self visitProgram: aStatement -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitStaticMethodDefinition: aStaticMethodDefinition [ - ^ self visitProgram: aStaticMethodDefinition -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitStringLiteral: aStringLiteral [ - ^ self visitLiteral: aStringLiteral -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitSuperCallExpression: aSuperCallExpression [ - ^ self visitExpression: aSuperCallExpression -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitSuperIndexedPropertyExpression: aSuperIndexedPropertyExpression [ - ^ self visitExpression: aSuperIndexedPropertyExpression -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitSuperNamedPropertyExpression: aSuperNamedPropertyExpression [ - ^ self visitExpression: aSuperNamedPropertyExpression -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitSwitchStatement: aSwitchStatement [ - ^ self visitStatement: aSwitchStatement -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitTaggedTemplateLiteral: aTaggedTemplateLiteral [ - ^ self visitExpression: aTaggedTemplateLiteral -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitTemplateLiteral: aTemplateLiteral [ - ^ self visitExpression: aTemplateLiteral -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitThisExpression: aThisExpression [ - ^ self visitExpression: aThisExpression -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitThrowStatement: aThrowStatement [ - ^ self visitStatement: aThrowStatement -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitTryStatement: aTryStatement [ - ^ self visitStatement: aTryStatement -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitUnaryExpression: anUnaryExpression [ - ^ self visitExpression: anUnaryExpression -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitVariableDeclaration: aVariableDeclaration [ - ^ self visitProgram: aVariableDeclaration -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitVariablePatternDeclaration: aVariablePatternDeclaration [ - ^ self visitProgram: aVariablePatternDeclaration -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitVariableStatement: aVariableStatement [ - ^ self visitStatement: aVariableStatement -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitWhileStatement: aWhileStatement [ - ^ self visitStatement: aWhileStatement -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitWithStatement: aWithStatement [ - ^ self visitStatement: aWithStatement -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitXAttribute: aXAttribute [ - ^ self visitProgram: aXAttribute -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitXClosingElement: aXClosingElement [ - ^ self visitProgram: aXClosingElement -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitXCodeExpression: aXCodeExpression [ - ^ self visitExpression: aXCodeExpression -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitXElement: aXElement [ - ^ self visitExpression: aXElement -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitXElementName: aXElementName [ - ^ self visitProgram: aXElementName -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitXFragment: aXFragment [ - ^ self visitExpression: aXFragment -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitXMemberExpression: aXMemberExpression [ - ^ self visitProgram: aXMemberExpression -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitXNamespacedName: aXNamespacedName [ - ^ self visitProgram: aXNamespacedName -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitXOpeningElement: aXOpeningElement [ - ^ self visitProgram: aXOpeningElement -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitXSelfClosingElement: aXSelfClosingElement [ - ^ self visitExpression: aXSelfClosingElement -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitXSpreadAttribute: aXSpreadAttribute [ - ^ self visitProgram: aXSpreadAttribute -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitXText: aXText [ - ^ self visitExpression: aXText -] - -{ #category : #generated } -JSProgramNodeVisitor >> visitYieldExpression: aYieldExpression [ - ^ self visitExpression: aYieldExpression -] diff --git a/src/SmaCC_Javascript_Parser/JSPropertyAssignmentNode.class.st b/src/SmaCC_Javascript_Parser/JSPropertyAssignmentNode.class.st deleted file mode 100644 index 6fd60c890..000000000 --- a/src/SmaCC_Javascript_Parser/JSPropertyAssignmentNode.class.st +++ /dev/null @@ -1,79 +0,0 @@ -Class { - #name : #JSPropertyAssignmentNode, - #superclass : #JSProgramNode, - #instVars : [ - 'name', - 'colonToken', - 'value', - 'equalToken' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSPropertyAssignmentNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitPropertyAssignment: self -] - -{ #category : #generated } -JSPropertyAssignmentNode >> colonToken [ - ^ colonToken -] - -{ #category : #generated } -JSPropertyAssignmentNode >> colonToken: aSmaCCToken [ - colonToken := aSmaCCToken -] - -{ #category : #generated } -JSPropertyAssignmentNode >> equalToken [ - ^ equalToken -] - -{ #category : #generated } -JSPropertyAssignmentNode >> equalToken: aSmaCCToken [ - equalToken := aSmaCCToken -] - -{ #category : #generated } -JSPropertyAssignmentNode >> ignoredTokenVariables [ - ^ #(#colonToken) -] - -{ #category : #generated } -JSPropertyAssignmentNode >> name [ - ^ name -] - -{ #category : #generated } -JSPropertyAssignmentNode >> name: aJSProgramNode [ - self name notNil - ifTrue: [ self name parent: nil ]. - name := aJSProgramNode. - self name notNil - ifTrue: [ self name parent: self ] -] - -{ #category : #generated } -JSPropertyAssignmentNode >> nodeVariables [ - ^ #(#name #value) -] - -{ #category : #generated } -JSPropertyAssignmentNode >> tokenVariables [ - ^ #(#equalToken) -] - -{ #category : #generated } -JSPropertyAssignmentNode >> value [ - ^ value -] - -{ #category : #generated } -JSPropertyAssignmentNode >> value: aJSExpressionNode [ - self value notNil - ifTrue: [ self value parent: nil ]. - value := aJSExpressionNode. - self value notNil - ifTrue: [ self value parent: self ] -] diff --git a/src/SmaCC_Javascript_Parser/JSRegularExpressionLiteralNode.class.st b/src/SmaCC_Javascript_Parser/JSRegularExpressionLiteralNode.class.st deleted file mode 100644 index db75b8ab0..000000000 --- a/src/SmaCC_Javascript_Parser/JSRegularExpressionLiteralNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #JSRegularExpressionLiteralNode, - #superclass : #JSLiteralNode, - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSRegularExpressionLiteralNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitRegularExpressionLiteral: self -] diff --git a/src/SmaCC_Javascript_Parser/JSRestVariableDeclarationNode.class.st b/src/SmaCC_Javascript_Parser/JSRestVariableDeclarationNode.class.st deleted file mode 100644 index 23af8e454..000000000 --- a/src/SmaCC_Javascript_Parser/JSRestVariableDeclarationNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JSRestVariableDeclarationNode, - #superclass : #JSVariableDeclarationNode, - #instVars : [ - 'ellipsis' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSRestVariableDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitRestVariableDeclaration: self -] - -{ #category : #generated } -JSRestVariableDeclarationNode >> ellipsis [ - ^ ellipsis -] - -{ #category : #generated } -JSRestVariableDeclarationNode >> ellipsis: aSmaCCToken [ - ellipsis := aSmaCCToken -] - -{ #category : #generated } -JSRestVariableDeclarationNode >> tokenVariables [ - ^ #(#ellipsis #equalToken) -] diff --git a/src/SmaCC_Javascript_Parser/JSReturnStatementNode.class.st b/src/SmaCC_Javascript_Parser/JSReturnStatementNode.class.st deleted file mode 100644 index b4cb33028..000000000 --- a/src/SmaCC_Javascript_Parser/JSReturnStatementNode.class.st +++ /dev/null @@ -1,64 +0,0 @@ -Class { - #name : #JSReturnStatementNode, - #superclass : #JSStatementNode, - #instVars : [ - 'returnToken', - 'expression', - 'semicolon' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSReturnStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitReturnStatement: self -] - -{ #category : #generated } -JSReturnStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -JSReturnStatementNode >> expression: aJSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JSReturnStatementNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -JSReturnStatementNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -JSReturnStatementNode >> returnToken [ - ^ returnToken -] - -{ #category : #generated } -JSReturnStatementNode >> returnToken: aSmaCCToken [ - returnToken := aSmaCCToken -] - -{ #category : #generated } -JSReturnStatementNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JSReturnStatementNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -JSReturnStatementNode >> tokenVariables [ - ^ #(#returnToken) -] diff --git a/src/SmaCC_Javascript_Parser/JSScanner.class.st b/src/SmaCC_Javascript_Parser/JSScanner.class.st deleted file mode 100644 index 1bb591587..000000000 --- a/src/SmaCC_Javascript_Parser/JSScanner.class.st +++ /dev/null @@ -1,978 +0,0 @@ -Class { - #name : #JSScanner, - #superclass : #SmaCCScanner, - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #'generated-initialization' } -JSScanner class >> initializeKeywordMap [ - keywordMap := Dictionary new. - #(#(97 'as' #(49 #(#default))) #(97 'break' #(50 #(#default))) #(97 'case' #(51 #(#default))) #(97 'catch' #(52 #(#default))) #(97 'class' #(53 #(#default))) #(97 'const' #(54 #(#default))) #(97 'continue' #(55 #(#default))) #(97 'debugger' #(56 #(#default))) #(97 'default' #(57 #(#default))) #(97 'delete' #(58 #(#default))) #(97 'do' #(59 #(#default))) #(97 'else' #(60 #(#default))) #(97 'export' #(61 #(#default))) #(97 'extends' #(62 #(#default))) #(97 'false' #(63 #(#default))) #(97 'finally' #(64 #(#default))) #(97 'for' #(65 #(#default))) #(97 'from' #(66 #(#default))) #(97 'function' #(67 #(#default))) #(97 'get' #(68 #(#default))) #(97 'if' #(69 #(#default))) #(97 'import' #(70 #(#default))) #(97 'in' #(71 #(#default))) #(97 'instanceof' #(72 #(#default))) #(97 'let' #(73 #(#default))) #(97 'new' #(74 #(#default))) #(97 'null' #(75 #(#default))) #(97 'of' #(76 #(#default))) #(97 'return' #(77 #(#default))) #(97 'set' #(78 #(#default))) #(97 'static' #(79 #(#default))) #(97 'super' #(80 #(#default))) #(97 'switch' #(81 #(#default))) #(97 'target' #(82 #(#default))) #(97 'this' #(83 #(#default))) #(97 'throw' #(84 #(#default))) #(97 'true' #(85 #(#default))) #(97 'try' #(86 #(#default))) #(97 'typeof' #(87 #(#default))) #(97 'var' #(88 #(#default))) #(97 'void' #(89 #(#default))) #(97 'while' #(90 #(#default))) #(97 'with' #(91 #(#default))) #(97 'yield' #(92 #(#default))) #(98 'as' #(49 #(#default))) #(98 'break' #(50 #(#default))) #(98 'case' #(51 #(#default))) #(98 'catch' #(52 #(#default))) #(98 'class' #(53 #(#default))) #(98 'const' #(54 #(#default))) #(98 'continue' #(55 #(#default))) #(98 'debugger' #(56 #(#default))) #(98 'default' #(57 #(#default))) #(98 'delete' #(58 #(#default))) #(98 'do' #(59 #(#default))) #(98 'else' #(60 #(#default))) #(98 'export' #(61 #(#default))) #(98 'extends' #(62 #(#default))) #(98 'false' #(63 #(#default))) #(98 'finally' #(64 #(#default))) #(98 'for' #(65 #(#default))) #(98 'from' #(66 #(#default))) #(98 'function' #(67 #(#default))) #(98 'get' #(68 #(#default))) #(98 'if' #(69 #(#default))) #(98 'import' #(70 #(#default))) #(98 'in' #(71 #(#default))) #(98 'instanceof' #(72 #(#default))) #(98 'let' #(73 #(#default))) #(98 'new' #(74 #(#default))) #(98 'null' #(75 #(#default))) #(98 'of' #(76 #(#default))) #(98 'return' #(77 #(#default))) #(98 'set' #(78 #(#default))) #(98 'static' #(79 #(#default))) #(98 'super' #(80 #(#default))) #(98 'switch' #(81 #(#default))) #(98 'target' #(82 #(#default))) #(98 'this' #(83 #(#default))) #(98 'throw' #(84 #(#default))) #(98 'true' #(85 #(#default))) #(98 'try' #(86 #(#default))) #(98 'typeof' #(87 #(#default))) #(98 'var' #(88 #(#default))) #(98 'void' #(89 #(#default))) #(98 'while' #(90 #(#default))) #(98 'with' #(91 #(#default))) #(98 'yield' #(92 #(#default)))) - do: [ :each | - (keywordMap at: each first ifAbsentPut: [ Dictionary new ]) - at: (each at: 2) - put: each last ]. - ^ keywordMap -] - -{ #category : #generated } -JSScanner >> emptySymbolTokenId [ - ^ 305 -] - -{ #category : #generated } -JSScanner >> errorTokenId [ - ^ 306 -] - -{ #category : #testing } -JSScanner >> hasNewlineBetween: startIndex and: endIndex [ - | position | - position := stream position. - [ stream position: startIndex. - [ stream position < endIndex and: [ stream atEnd not ] ] - whileTrue: [ | char | - char := stream next. - (char == Character cr or: [ char == Character lf ]) - ifTrue: [ ^ true ] ] ] - ensure: [ stream position: position ]. - ^ false -] - -{ #category : #generated } -JSScanner >> identifierId [ - ^ 97 -] - -{ #category : #generated } -JSScanner >> identifierNameId [ - ^ 98 -] - -{ #category : #generated } -JSScanner >> jsxLTId [ - ^ 108 -] - -{ #category : #generated } -JSScanner >> ltId [ - ^ 10 -] - -{ #category : #generated } -JSScanner >> regular_expressionId [ - ^ 102 -] - -{ #category : #generated } -JSScanner >> rightBraceId [ - ^ 4 -] - -{ #category : #generated } -JSScanner >> scan1 [ - self step. - currentCharacter == $! - ifTrue: - [ ^ self scan1X13 ]. - currentCharacter == $" - ifTrue: [ ^ self scan2 ]. - currentCharacter == $% - ifTrue: - [ ^ self scan1X15 ]. - currentCharacter == $& - ifTrue: - [ ^ self scan1X12 ]. - currentCharacter == $' - ifTrue: [ ^ self scan7 ]. - currentCharacter == $( - ifTrue: [ ^ self recordAndReportMatch: #(1) ]. - currentCharacter == $) - ifTrue: [ ^ self recordAndReportMatch: #(2) ]. - currentCharacter == $* - ifTrue: - [ ^ self scan1X11 ]. - currentCharacter == $+ - ifTrue: - [ ^ self scan1X10 ]. - currentCharacter == $, - ifTrue: [ ^ self recordAndReportMatch: #(94) ]. - currentCharacter == $- - ifTrue: - [ ^ self scan1X9 ]. - ^ self scan1X17 -] - -{ #category : #generated } -JSScanner >> scan10 [ - [ self recordMatch: #(101). - self step. - currentCharacter isDigit ] whileTrue. - ('Ee' includes: currentCharacter) - ifTrue: [ ^ self scan11 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan11 [ - self step. - currentCharacter isDigit - ifTrue: [ [ self recordMatch: #(101). - self step. - currentCharacter isDigit ] whileTrue. - ^ self reportLastMatch ]. - ('+-' includes: currentCharacter) - ifTrue: [ self step. - currentCharacter isDigit - ifTrue: [ [ self recordMatch: #(101). - self step. - currentCharacter isDigit ] whileTrue ] ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan12 [ - [ self step. - currentCharacter == $/ - ifTrue: [ ^ self scan13 ]. - currentCharacter == $[ - ifTrue: [ ^ self scan16 ]. - currentCharacter == $\ - ifTrue: [ ^ self scan17 ]. - currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: Character newPage) - or: [ (currentCharacter between: (Character value: 14) and: $.) - or: [ (currentCharacter between: $0 and: $Z) - or: [ currentCharacter >= $] ] ] ] ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan13 [ - self recordMatch: #(102). - self step. - currentCharacter == $\ - ifTrue: [ ^ self scan15 ]. - (currentCharacter isLetter or: [ '$_' includes: currentCharacter ]) - ifTrue: [ ^ self scan14 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan14 [ - [ self recordMatch: #(102). - self step. - currentCharacter == $\ - ifTrue: [ ^ self scan15 ]. - currentCharacter isAlphaNumeric - or: [ '$_' includes: currentCharacter ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan15 [ - self step. - currentCharacter == $u - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ ^ self scan14 ] ] ] ] ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan16 [ - [ self step. - currentCharacter == $\ - ifTrue: [ self step. - (currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: Character newPage) - or: [ currentCharacter >= (Character value: 14) ] ]) - ifTrue: [ ^ self scan16 ]. - ^ self reportLastMatch ]. - currentCharacter == $] - ifTrue: [ ^ self scan12 ]. - true ] whileTrue -] - -{ #category : #generated } -JSScanner >> scan17 [ - self step. - (currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: Character newPage) - or: [ currentCharacter >= (Character value: 14) ] ]) - ifTrue: [ ^ self scan12 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan18 [ - [ self step. - currentCharacter == $* - ifTrue: [ [ self step. - currentCharacter == $* ] whileTrue. - currentCharacter == $/ - ifTrue: [ ^ self recordAndReportMatch: #(96) ]. - ^ self scan18 ]. - true ] whileTrue -] - -{ #category : #generated } -JSScanner >> scan19 [ - [ self recordMatch: #(101). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan10 ]. - currentCharacter isDigit ] whileTrue. - ('Ee' includes: currentCharacter) - ifTrue: [ ^ self scan11 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan1X1 [ - self recordMatch: #(8). - self step. - currentCharacter == $* - ifTrue: [ ^ self scan18 ]. - ^ self scan1X1X3 -] - -{ #category : #generated } -JSScanner >> scan1X10 [ - self recordMatch: #(34). - self step. - currentCharacter == $+ - ifTrue: [ ^ self recordAndReportMatch: #(35) ]. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(33) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan1X11 [ - self recordMatch: #(25). - self step. - currentCharacter == $* - ifTrue: [ ^ self recordAndReportMatch: #(26) ]. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(27) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan1X12 [ - self recordMatch: #(39). - self step. - currentCharacter == $& - ifTrue: [ ^ self recordAndReportMatch: #(40) ]. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(29) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan1X13 [ - self recordMatch: #(46). - self step. - currentCharacter == $= - ifTrue: [ self recordMatch: #(47). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(48) ] ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan1X14 [ - self recordMatch: #(45). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(30) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan1X15 [ - self recordMatch: #(42). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(28) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan1X16 [ - currentCharacter == $^ - ifTrue: - [ ^ self scan1X14 ]. - currentCharacter == $` - ifTrue: [ ^ self scan20 ]. - currentCharacter == ${ - ifTrue: [ ^ self recordAndReportMatch: #(3) ]. - currentCharacter == $| - ifTrue: - [ ^ self scan1X7 ]. - currentCharacter == $} - ifTrue: [ ^ self recordAndReportMatch: #(4) ]. - currentCharacter == $~ - ifTrue: [ ^ self recordAndReportMatch: #(38) ]. - currentCharacter isDigit - ifTrue: [ ^ self scan19 ]. - (currentCharacter isSeparator - or: [ currentCharacter = (Character value: 160) - or: [ currentCharacter = - (Character value: 65279) ] ]) - ifTrue: - [ ^ self scan1X6 ]. - (currentCharacter isLetter or: [ '$_' includes: currentCharacter ]) - ifTrue: [ ^ self scan5 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan1X17 [ - currentCharacter == $. - ifTrue: - [ ^ self scan1X8 ]. - currentCharacter == $/ - ifTrue: - [ ^ self scan1X1 ]. - currentCharacter == $0 - ifTrue: - [ ^ self scan1X2 ]. - currentCharacter == $: - ifTrue: [ ^ self recordAndReportMatch: #(95) ]. - currentCharacter == $; - ifTrue: [ ^ self recordAndReportMatch: #(7) ]. - currentCharacter == $< - ifTrue: - [ ^ self scan1X5 ]. - currentCharacter == $= - ifTrue: - [ ^ self scan1X4 ]. - currentCharacter == $> - ifTrue: - [ ^ self scan1X3 ]. - currentCharacter == $? - ifTrue: [ ^ self recordAndReportMatch: #(41) ]. - currentCharacter == $[ - ifTrue: [ ^ self recordAndReportMatch: #(5) ]. - currentCharacter == $\ - ifTrue: [ ^ self scan6 ]. - currentCharacter == $] - ifTrue: [ ^ self recordAndReportMatch: #(6) ]. - ^ self scan1X16 -] - -{ #category : #generated } -JSScanner >> scan1X1X1 [ - self recordMatch: #(9). - self step. - currentCharacter == $/ - ifTrue: [ ^ self scan13 ]. - currentCharacter == $[ - ifTrue: [ ^ self scan16 ]. - currentCharacter == $\ - ifTrue: [ ^ self scan17 ]. - (currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: Character newPage) - or: [ (currentCharacter between: (Character value: 14) and: $.) - or: [ (currentCharacter between: $0 and: $Z) - or: [ currentCharacter >= $] ] ] ] ]) - ifTrue: [ ^ self scan12 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan1X1X2 [ - [ self recordMatch: #(96). - self step. - currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: Character newPage) - or: [ currentCharacter >= (Character value: 14) ] ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan1X1X3 [ - currentCharacter == $/ - ifTrue: - [ ^ self scan1X1X2 ]. - currentCharacter == $= - ifTrue: - [ ^ self scan1X1X1 ]. - currentCharacter == $[ - ifTrue: [ ^ self scan16 ]. - currentCharacter == $\ - ifTrue: [ ^ self scan17 ]. - (currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: Character newPage) - or: [ (currentCharacter between: (Character value: 14) and: $)) - or: [ (currentCharacter between: $+ and: $.) - or: [ (currentCharacter between: $0 and: $<) - or: [ (currentCharacter between: $> and: $Z) - or: [ currentCharacter >= $] ] ] ] ] ] ]) - ifTrue: [ ^ self scan12 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan1X2 [ - self recordMatch: #(101). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan10 ]. - currentCharacter isDigit - ifTrue: [ ^ self scan19 ]. - ('Bb' includes: currentCharacter) - ifTrue: [ self step. - (currentCharacter between: $0 and: $1) - ifTrue: [ [ self recordMatch: #(101). - self step. - currentCharacter between: $0 and: $1 ] whileTrue ]. - ^ self reportLastMatch ]. - ('Ee' includes: currentCharacter) - ifTrue: [ ^ self scan11 ]. - ('Oo' includes: currentCharacter) - ifTrue: [ self step. - (currentCharacter between: $0 and: $7) - ifTrue: [ [ self recordMatch: #(101). - self step. - currentCharacter between: $0 and: $7 ] whileTrue ]. - ^ self reportLastMatch ]. - ('Xx' includes: currentCharacter) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ [ self recordMatch: #(101). - self step. - currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ] ] whileTrue ] ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan1X3 [ - self recordMatch: #(13). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(20) ]. - currentCharacter == $> - ifTrue: [ self recordMatch: #(14). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(15) ]. - currentCharacter == $> - ifTrue: [ self recordMatch: #(17). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(16) ] ] ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan1X4 [ - self recordMatch: #(22). - self step. - currentCharacter == $= - ifTrue: [ self recordMatch: #(23). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(24) ]. - ^ self reportLastMatch ]. - currentCharacter == $> - ifTrue: [ ^ self recordAndReportMatch: #(18) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan1X5 [ - self recordMatch: #(10). - self step. - currentCharacter == $< - ifTrue: [ self recordMatch: #(11). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(12) ]. - ^ self reportLastMatch ]. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(19) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan1X6 [ - [ self recordMatch: #(99). - self step. - currentCharacter isSeparator - or: [ currentCharacter = (Character value: 160) - or: [ currentCharacter = - (Character value: 65279) ] ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan1X7 [ - self recordMatch: #(43). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(31) ]. - currentCharacter == $| - ifTrue: [ ^ self recordAndReportMatch: #(44) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan1X8 [ - self recordMatch: #(21). - self step. - currentCharacter == $. - ifTrue: [ self step. - currentCharacter == $. - ifTrue: [ ^ self recordAndReportMatch: #(93) ]. - ^ self reportLastMatch ]. - currentCharacter isDigit - ifTrue: [ ^ self scan10 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan1X9 [ - self recordMatch: #(36). - self step. - currentCharacter == $- - ifTrue: [ ^ self recordAndReportMatch: #(37) ]. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(32) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan2 [ - [ self step. - currentCharacter == $" - ifTrue: [ ^ self scan3 ]. - currentCharacter == $\ - ifTrue: [ ^ self scan4 ]. - currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: Character newPage) - or: [ (currentCharacter between: (Character value: 14) and: $!) - or: [ (currentCharacter between: $# and: $[) - or: [ currentCharacter >= $] ] ] ] ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan20 [ - self step. - currentCharacter == $$ - ifTrue: [ ^ self scan22 ]. - currentCharacter == $? - ifTrue: [ self step. - currentCharacter == $$ - ifTrue: [ ^ self scan25 ]. - currentCharacter == $\ - ifTrue: [ ^ self scan26 ]. - currentCharacter == $` - ifTrue: [ ^ self recordAndReportMatch: #(104) ]. - ^ self scan24 ]. - currentCharacter == $\ - ifTrue: [ ^ self scan23 ]. - currentCharacter == $` - ifTrue: [ ^ self recordAndReportMatch: #(104) ]. - ^ self scan21 -] - -{ #category : #generated } -JSScanner >> scan21 [ - [ self step. - currentCharacter == $$ - ifTrue: [ ^ self scan22 ]. - currentCharacter == $\ - ifTrue: [ ^ self scan23 ]. - currentCharacter == $` - ifTrue: [ ^ self recordAndReportMatch: #(104) ]. - true ] whileTrue -] - -{ #category : #generated } -JSScanner >> scan22 [ - self step. - currentCharacter == $` - ifTrue: [ ^ self recordAndReportMatch: #(104) ]. - currentCharacter == ${ - ifTrue: [ ^ self recordAndReportMatch: #(105) ]. - ^ self scan21 -] - -{ #category : #generated } -JSScanner >> scan23 [ - self step. - (currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: Character newPage) - or: [ currentCharacter >= (Character value: 14) ] ]) - ifTrue: [ ^ self scan21 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan24 [ - [ self step. - currentCharacter == $$ - ifTrue: [ ^ self scan25 ]. - currentCharacter == $\ - ifTrue: [ ^ self scan26 ]. - currentCharacter == $` - ifTrue: [ ^ self recordAndReportMatch: #(103 104) ]. - true ] whileTrue -] - -{ #category : #generated } -JSScanner >> scan25 [ - self step. - currentCharacter == $` - ifTrue: [ ^ self recordAndReportMatch: #(103 104) ]. - currentCharacter == ${ - ifTrue: [ self recordMatch: #(105). - self step. - currentCharacter == $` - ifTrue: [ ^ self recordAndReportMatch: #(103) ]. - ^ self scan27 ]. - ^ self scan24 -] - -{ #category : #generated } -JSScanner >> scan26 [ - self step. - currentCharacter == $` - ifTrue: [ self recordMatch: #(103). - self step. - currentCharacter == $$ - ifTrue: [ ^ self scan22 ]. - currentCharacter == $\ - ifTrue: [ ^ self scan23 ]. - currentCharacter == $` - ifTrue: [ ^ self recordAndReportMatch: #(104) ]. - ^ self scan21 ]. - (currentCharacter == Character lf - or: [ currentCharacter == Character cr ]) - ifTrue: [ ^ self scan27 ]. - ^ self scan24 -] - -{ #category : #generated } -JSScanner >> scan27 [ - [ self step. - currentCharacter == $` - ifTrue: [ ^ self recordAndReportMatch: #(103) ]. - true ] whileTrue -] - -{ #category : #generated } -JSScanner >> scan28 [ - [ self recordMatch: #(109). - self step. - currentCharacter == $\ - ifTrue: [ ^ self scan29 ]. - currentCharacter isAlphaNumeric - or: - [ '$-_' includes: currentCharacter ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan29 [ - self step. - currentCharacter == $u - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ ^ self scan28 ] ] ] ] ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan3 [ - self recordMatch: #(100). - self step. - currentCharacter == $" - ifTrue: [ ^ self scan2 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan30 [ - [ self step. - currentCharacter == $$ - ifTrue: [ self step. - currentCharacter == $` - ifTrue: [ ^ self recordAndReportMatch: #(107) ]. - currentCharacter == ${ - ifTrue: [ ^ self recordAndReportMatch: #(106) ]. - ^ self scan30 ]. - currentCharacter == $\ - ifTrue: [ self step. - (currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: Character newPage) - or: [ currentCharacter >= (Character value: 14) ] ]) - ifTrue: [ ^ self scan30 ]. - ^ self reportLastMatch ]. - currentCharacter == $` - ifTrue: [ ^ self recordAndReportMatch: #(107) ]. - true ] whileTrue -] - -{ #category : #generated } -JSScanner >> scan4 [ - self step. - currentCharacter == Character cr - ifTrue: [ self step. - currentCharacter == $" - ifTrue: [ ^ self scan3 ]. - currentCharacter == $\ - ifTrue: [ ^ self scan4 ]. - (currentCharacter <= Character newPage - or: [ (currentCharacter between: (Character value: 14) and: $!) - or: [ (currentCharacter between: $# and: $[) - or: [ currentCharacter >= $] ] ] ]) - ifTrue: [ ^ self scan2 ]. - ^ self reportLastMatch ]. - ^ self scan2 -] - -{ #category : #generated } -JSScanner >> scan5 [ - [ self recordMatch: #(97 98). - self step. - currentCharacter == $\ - ifTrue: [ ^ self scan6 ]. - currentCharacter isAlphaNumeric - or: [ '$_' includes: currentCharacter ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan6 [ - self step. - currentCharacter == $u - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ ^ self scan5 ] ] ] ] ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan7 [ - [ self step. - currentCharacter == $' - ifTrue: [ ^ self scan8 ]. - currentCharacter == $\ - ifTrue: [ ^ self scan9 ]. - currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: Character newPage) - or: [ (currentCharacter between: (Character value: 14) and: $&) - or: [ (currentCharacter between: $( and: $[) - or: [ currentCharacter >= $] ] ] ] ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan8 [ - self recordMatch: #(100). - self step. - currentCharacter == $' - ifTrue: [ ^ self scan7 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scan9 [ - self step. - currentCharacter == Character cr - ifTrue: [ self step. - currentCharacter == $' - ifTrue: [ ^ self scan8 ]. - currentCharacter == $\ - ifTrue: [ ^ self scan9 ]. - (currentCharacter <= Character newPage - or: [ (currentCharacter between: (Character value: 14) and: $&) - or: [ (currentCharacter between: $( and: $[) - or: [ currentCharacter >= $] ] ] ]) - ifTrue: [ ^ self scan7 ]. - ^ self reportLastMatch ]. - ^ self scan7 -] - -{ #category : #generated } -JSScanner >> scanForToken [ - scope == #jsxText - ifTrue: - [ ^ self scanForTokenX2 ]. - scope == #jsx - ifTrue: - [ ^ self scanForTokenX1 ]. - scope == #default - ifTrue: [ ^ self scan1 ]. - scope == #template - ifTrue: [ self step. - currentCharacter == $/ - ifTrue: - [ ^ self scanForTokenX3 ]. - currentCharacter == $` - ifTrue: [ ^ self scan20 ]. - currentCharacter == $} - ifTrue: [ ^ self scan30 ] ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scanForTokenX1 [ - self step. - currentCharacter == $" - ifTrue: [ ^ self scan2 ]. - currentCharacter == $' - ifTrue: [ ^ self scan7 ]. - currentCharacter == $. - ifTrue: [ ^ self recordAndReportMatch: #(21) ]. - ^ self scanForTokenX1X2 -] - -{ #category : #generated } -JSScanner >> scanForTokenX1X1 [ - [ self recordMatch: #(99). - self step. - currentCharacter isSeparator - or: [ currentCharacter = (Character value: 160) - or: [ currentCharacter = - (Character value: 65279) ] ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scanForTokenX1X2 [ - currentCharacter == $/ - ifTrue: [ ^ self recordAndReportMatch: #(8) ]. - currentCharacter == $< - ifTrue: [ ^ self recordAndReportMatch: #(108) ]. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(22) ]. - currentCharacter == $> - ifTrue: [ ^ self recordAndReportMatch: #(13) ]. - currentCharacter == $\ - ifTrue: [ ^ self scan29 ]. - currentCharacter == ${ - ifTrue: [ ^ self recordAndReportMatch: #(3) ]. - currentCharacter == $} - ifTrue: [ ^ self recordAndReportMatch: #(4) ]. - (currentCharacter isSeparator - or: [ currentCharacter = (Character value: 160) - or: [ currentCharacter = - (Character value: 65279) ] ]) - ifTrue: - [ ^ self scanForTokenX1X1 ]. - (currentCharacter isLetter or: [ '$_' includes: currentCharacter ]) - ifTrue: [ ^ self scan28 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scanForTokenX2 [ - self step. - currentCharacter == $< - ifTrue: [ ^ self recordAndReportMatch: #(10 108) ]. - currentCharacter == $> - ifTrue: [ ^ self recordAndReportMatch: #(13) ]. - currentCharacter == ${ - ifTrue: [ ^ self recordAndReportMatch: #(3) ]. - currentCharacter == $} - ifTrue: [ ^ self recordAndReportMatch: #(4) ]. - true - ifTrue: [ [ self recordMatch: #(110). - self step. - currentCharacter <= $; - or: [ currentCharacter == $= - or: [ (currentCharacter between: $? and: $z) - or: [ currentCharacter == $| or: [ currentCharacter >= $~ ] ] ] ] ] - whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> scanForTokenX3 [ - self step. - currentCharacter == $[ - ifTrue: [ ^ self scan16 ]. - currentCharacter == $\ - ifTrue: [ ^ self scan17 ]. - (currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: Character newPage) - or: [ (currentCharacter between: (Character value: 14) and: $)) - or: [ (currentCharacter between: $+ and: $.) - or: [ (currentCharacter between: $0 and: $Z) - or: [ currentCharacter >= $] ] ] ] ] ]) - ifTrue: [ ^ self scan12 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -JSScanner >> semicolonId [ - ^ 7 -] - -{ #category : #generated } -JSScanner >> slashEqualId [ - ^ 9 -] - -{ #category : #generated } -JSScanner >> slashId [ - ^ 8 -] - -{ #category : #generated } -JSScanner >> tokenActions [ - ^ #(nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil #comment nil nil #whitespace nil nil nil #patternToken) -] diff --git a/src/SmaCC_Javascript_Parser/JSScriptNode.class.st b/src/SmaCC_Javascript_Parser/JSScriptNode.class.st deleted file mode 100644 index 7c27292b3..000000000 --- a/src/SmaCC_Javascript_Parser/JSScriptNode.class.st +++ /dev/null @@ -1,36 +0,0 @@ -Class { - #name : #JSScriptNode, - #superclass : #JSProgramNode, - #instVars : [ - 'statements' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSScriptNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitScript: self -] - -{ #category : #generated } -JSScriptNode >> compositeNodeVariables [ - ^ #(#statements) -] - -{ #category : #'generated-initialize-release' } -JSScriptNode >> initialize [ - super initialize. - statements := OrderedCollection new: 2. -] - -{ #category : #generated } -JSScriptNode >> statements [ - ^ statements -] - -{ #category : #generated } -JSScriptNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] diff --git a/src/SmaCC_Javascript_Parser/JSSetMethodDefinitionNode.class.st b/src/SmaCC_Javascript_Parser/JSSetMethodDefinitionNode.class.st deleted file mode 100644 index 87849948e..000000000 --- a/src/SmaCC_Javascript_Parser/JSSetMethodDefinitionNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JSSetMethodDefinitionNode, - #superclass : #JSMethodDefinitionNode, - #instVars : [ - 'setToken' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSSetMethodDefinitionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSetMethodDefinition: self -] - -{ #category : #generated } -JSSetMethodDefinitionNode >> setToken [ - ^ setToken -] - -{ #category : #generated } -JSSetMethodDefinitionNode >> setToken: aSmaCCToken [ - setToken := aSmaCCToken -] - -{ #category : #generated } -JSSetMethodDefinitionNode >> tokenVariables [ - ^ #(#setToken) -] diff --git a/src/SmaCC_Javascript_Parser/JSSpreadExpressionNode.class.st b/src/SmaCC_Javascript_Parser/JSSpreadExpressionNode.class.st deleted file mode 100644 index 0d48f3c90..000000000 --- a/src/SmaCC_Javascript_Parser/JSSpreadExpressionNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #JSSpreadExpressionNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'ellipsis', - 'expression' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSSpreadExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSpreadExpression: self -] - -{ #category : #generated } -JSSpreadExpressionNode >> ellipsis [ - ^ ellipsis -] - -{ #category : #generated } -JSSpreadExpressionNode >> ellipsis: aSmaCCToken [ - ellipsis := aSmaCCToken -] - -{ #category : #generated } -JSSpreadExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -JSSpreadExpressionNode >> expression: aJSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JSSpreadExpressionNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -JSSpreadExpressionNode >> tokenVariables [ - ^ #(#ellipsis) -] diff --git a/src/SmaCC_Javascript_Parser/JSStatementNode.class.st b/src/SmaCC_Javascript_Parser/JSStatementNode.class.st deleted file mode 100644 index 09fa15f3a..000000000 --- a/src/SmaCC_Javascript_Parser/JSStatementNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #JSStatementNode, - #superclass : #JSProgramNode, - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitStatement: self -] diff --git a/src/SmaCC_Javascript_Parser/JSStaticMethodDefinitionNode.class.st b/src/SmaCC_Javascript_Parser/JSStaticMethodDefinitionNode.class.st deleted file mode 100644 index a8679bc87..000000000 --- a/src/SmaCC_Javascript_Parser/JSStaticMethodDefinitionNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #JSStaticMethodDefinitionNode, - #superclass : #JSProgramNode, - #instVars : [ - 'staticToken', - 'method' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSStaticMethodDefinitionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitStaticMethodDefinition: self -] - -{ #category : #generated } -JSStaticMethodDefinitionNode >> method [ - ^ method -] - -{ #category : #generated } -JSStaticMethodDefinitionNode >> method: aJSMethodDefinitionNode [ - self method notNil - ifTrue: [ self method parent: nil ]. - method := aJSMethodDefinitionNode. - self method notNil - ifTrue: [ self method parent: self ] -] - -{ #category : #generated } -JSStaticMethodDefinitionNode >> nodeVariables [ - ^ #(#method) -] - -{ #category : #generated } -JSStaticMethodDefinitionNode >> staticToken [ - ^ staticToken -] - -{ #category : #generated } -JSStaticMethodDefinitionNode >> staticToken: aSmaCCToken [ - staticToken := aSmaCCToken -] - -{ #category : #generated } -JSStaticMethodDefinitionNode >> tokenVariables [ - ^ #(#staticToken) -] diff --git a/src/SmaCC_Javascript_Parser/JSStringLiteralNode.class.st b/src/SmaCC_Javascript_Parser/JSStringLiteralNode.class.st deleted file mode 100644 index d889fda24..000000000 --- a/src/SmaCC_Javascript_Parser/JSStringLiteralNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #JSStringLiteralNode, - #superclass : #JSLiteralNode, - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSStringLiteralNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitStringLiteral: self -] diff --git a/src/SmaCC_Javascript_Parser/JSSuperCallExpressionNode.class.st b/src/SmaCC_Javascript_Parser/JSSuperCallExpressionNode.class.st deleted file mode 100644 index 2219205f4..000000000 --- a/src/SmaCC_Javascript_Parser/JSSuperCallExpressionNode.class.st +++ /dev/null @@ -1,127 +0,0 @@ -Class { - #name : #JSSuperCallExpressionNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'superToken', - 'left', - 'right', - 'arguments', - 'ellipsises', - 'varArguments', - 'commas' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSSuperCallExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSuperCallExpression: self -] - -{ #category : #generated } -JSSuperCallExpressionNode >> arguments [ - ^ arguments -] - -{ #category : #generated } -JSSuperCallExpressionNode >> arguments: anOrderedCollection [ - self setParents: self arguments to: nil. - arguments := anOrderedCollection. - self setParents: self arguments to: self -] - -{ #category : #generated } -JSSuperCallExpressionNode >> commas [ - ^ commas -] - -{ #category : #generated } -JSSuperCallExpressionNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JSSuperCallExpressionNode >> compositeNodeVariables [ - ^ #(#arguments #varArguments) -] - -{ #category : #generated } -JSSuperCallExpressionNode >> compositeTokenVariables [ - ^ #(#ellipsises) -] - -{ #category : #generated } -JSSuperCallExpressionNode >> ellipsises [ - ^ ellipsises -] - -{ #category : #generated } -JSSuperCallExpressionNode >> ellipsises: anOrderedCollection [ - ellipsises := anOrderedCollection -] - -{ #category : #generated } -JSSuperCallExpressionNode >> ignoredCompositeTokenVariables [ - ^ #(#commas #leftParens #rightParens) -] - -{ #category : #generated } -JSSuperCallExpressionNode >> ignoredTokenVariables [ - ^ #(#left #right) -] - -{ #category : #'generated-initialize-release' } -JSSuperCallExpressionNode >> initialize [ - super initialize. - arguments := OrderedCollection new: 2. - ellipsises := OrderedCollection new: 2. - varArguments := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -JSSuperCallExpressionNode >> left [ - ^ left -] - -{ #category : #generated } -JSSuperCallExpressionNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -JSSuperCallExpressionNode >> right [ - ^ right -] - -{ #category : #generated } -JSSuperCallExpressionNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -JSSuperCallExpressionNode >> superToken [ - ^ superToken -] - -{ #category : #generated } -JSSuperCallExpressionNode >> superToken: aSmaCCToken [ - superToken := aSmaCCToken -] - -{ #category : #generated } -JSSuperCallExpressionNode >> tokenVariables [ - ^ #(#superToken) -] - -{ #category : #generated } -JSSuperCallExpressionNode >> varArguments [ - ^ varArguments -] - -{ #category : #generated } -JSSuperCallExpressionNode >> varArguments: anOrderedCollection [ - self setParents: self varArguments to: nil. - varArguments := anOrderedCollection. - self setParents: self varArguments to: self -] diff --git a/src/SmaCC_Javascript_Parser/JSSuperIndexedPropertyExpressionNode.class.st b/src/SmaCC_Javascript_Parser/JSSuperIndexedPropertyExpressionNode.class.st deleted file mode 100644 index b02630e55..000000000 --- a/src/SmaCC_Javascript_Parser/JSSuperIndexedPropertyExpressionNode.class.st +++ /dev/null @@ -1,75 +0,0 @@ -Class { - #name : #JSSuperIndexedPropertyExpressionNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'superToken', - 'leftBracket', - 'expression', - 'rightBracket' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSSuperIndexedPropertyExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSuperIndexedPropertyExpression: self -] - -{ #category : #generated } -JSSuperIndexedPropertyExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -JSSuperIndexedPropertyExpressionNode >> expression: aJSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JSSuperIndexedPropertyExpressionNode >> ignoredTokenVariables [ - ^ #(#leftBracket #rightBracket) -] - -{ #category : #generated } -JSSuperIndexedPropertyExpressionNode >> leftBracket [ - ^ leftBracket -] - -{ #category : #generated } -JSSuperIndexedPropertyExpressionNode >> leftBracket: aSmaCCToken [ - leftBracket := aSmaCCToken -] - -{ #category : #generated } -JSSuperIndexedPropertyExpressionNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -JSSuperIndexedPropertyExpressionNode >> rightBracket [ - ^ rightBracket -] - -{ #category : #generated } -JSSuperIndexedPropertyExpressionNode >> rightBracket: aSmaCCToken [ - rightBracket := aSmaCCToken -] - -{ #category : #generated } -JSSuperIndexedPropertyExpressionNode >> superToken [ - ^ superToken -] - -{ #category : #generated } -JSSuperIndexedPropertyExpressionNode >> superToken: aSmaCCToken [ - superToken := aSmaCCToken -] - -{ #category : #generated } -JSSuperIndexedPropertyExpressionNode >> tokenVariables [ - ^ #(#superToken) -] diff --git a/src/SmaCC_Javascript_Parser/JSSuperNamedPropertyExpressionNode.class.st b/src/SmaCC_Javascript_Parser/JSSuperNamedPropertyExpressionNode.class.st deleted file mode 100644 index 53a2e56fb..000000000 --- a/src/SmaCC_Javascript_Parser/JSSuperNamedPropertyExpressionNode.class.st +++ /dev/null @@ -1,50 +0,0 @@ -Class { - #name : #JSSuperNamedPropertyExpressionNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'superToken', - 'periodToken', - 'name' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSSuperNamedPropertyExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSuperNamedPropertyExpression: self -] - -{ #category : #generated } -JSSuperNamedPropertyExpressionNode >> name [ - ^ name -] - -{ #category : #generated } -JSSuperNamedPropertyExpressionNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -JSSuperNamedPropertyExpressionNode >> periodToken [ - ^ periodToken -] - -{ #category : #generated } -JSSuperNamedPropertyExpressionNode >> periodToken: aSmaCCToken [ - periodToken := aSmaCCToken -] - -{ #category : #generated } -JSSuperNamedPropertyExpressionNode >> superToken [ - ^ superToken -] - -{ #category : #generated } -JSSuperNamedPropertyExpressionNode >> superToken: aSmaCCToken [ - superToken := aSmaCCToken -] - -{ #category : #generated } -JSSuperNamedPropertyExpressionNode >> tokenVariables [ - ^ #(#superToken #periodToken #name) -] diff --git a/src/SmaCC_Javascript_Parser/JSSwitchStatementNode.class.st b/src/SmaCC_Javascript_Parser/JSSwitchStatementNode.class.st deleted file mode 100644 index 25b31f413..000000000 --- a/src/SmaCC_Javascript_Parser/JSSwitchStatementNode.class.st +++ /dev/null @@ -1,121 +0,0 @@ -Class { - #name : #JSSwitchStatementNode, - #superclass : #JSStatementNode, - #instVars : [ - 'switchToken', - 'left', - 'expression', - 'right', - 'leftBrace', - 'clauses', - 'rightBrace' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSSwitchStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitSwitchStatement: self -] - -{ #category : #generated } -JSSwitchStatementNode >> clauses [ - ^ clauses -] - -{ #category : #generated } -JSSwitchStatementNode >> clauses: anOrderedCollection [ - self setParents: self clauses to: nil. - clauses := anOrderedCollection. - self setParents: self clauses to: self -] - -{ #category : #generated } -JSSwitchStatementNode >> compositeNodeVariables [ - ^ #(#clauses) -] - -{ #category : #generated } -JSSwitchStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -JSSwitchStatementNode >> expression: aJSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JSSwitchStatementNode >> ignoredTokenVariables [ - ^ #(#left #right #leftBrace #rightBrace) -] - -{ #category : #'generated-initialize-release' } -JSSwitchStatementNode >> initialize [ - super initialize. - clauses := OrderedCollection new: 2. -] - -{ #category : #generated } -JSSwitchStatementNode >> left [ - ^ left -] - -{ #category : #generated } -JSSwitchStatementNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -JSSwitchStatementNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -JSSwitchStatementNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -JSSwitchStatementNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -JSSwitchStatementNode >> right [ - ^ right -] - -{ #category : #generated } -JSSwitchStatementNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -JSSwitchStatementNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -JSSwitchStatementNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] - -{ #category : #generated } -JSSwitchStatementNode >> switchToken [ - ^ switchToken -] - -{ #category : #generated } -JSSwitchStatementNode >> switchToken: aSmaCCToken [ - switchToken := aSmaCCToken -] - -{ #category : #generated } -JSSwitchStatementNode >> tokenVariables [ - ^ #(#switchToken) -] diff --git a/src/SmaCC_Javascript_Parser/JSTaggedTemplateLiteralNode.class.st b/src/SmaCC_Javascript_Parser/JSTaggedTemplateLiteralNode.class.st deleted file mode 100644 index d104654a8..000000000 --- a/src/SmaCC_Javascript_Parser/JSTaggedTemplateLiteralNode.class.st +++ /dev/null @@ -1,47 +0,0 @@ -Class { - #name : #JSTaggedTemplateLiteralNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'expression', - 'template' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSTaggedTemplateLiteralNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitTaggedTemplateLiteral: self -] - -{ #category : #generated } -JSTaggedTemplateLiteralNode >> expression [ - ^ expression -] - -{ #category : #generated } -JSTaggedTemplateLiteralNode >> expression: aJSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JSTaggedTemplateLiteralNode >> nodeVariables [ - ^ #(#expression #template) -] - -{ #category : #generated } -JSTaggedTemplateLiteralNode >> template [ - ^ template -] - -{ #category : #generated } -JSTaggedTemplateLiteralNode >> template: aJSTemplateLiteralNode [ - self template notNil - ifTrue: [ self template parent: nil ]. - template := aJSTemplateLiteralNode. - self template notNil - ifTrue: [ self template parent: self ] -] diff --git a/src/SmaCC_Javascript_Parser/JSTemplateLiteralNode.class.st b/src/SmaCC_Javascript_Parser/JSTemplateLiteralNode.class.st deleted file mode 100644 index 01fe542fb..000000000 --- a/src/SmaCC_Javascript_Parser/JSTemplateLiteralNode.class.st +++ /dev/null @@ -1,53 +0,0 @@ -Class { - #name : #JSTemplateLiteralNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'parts', - 'expressions' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSTemplateLiteralNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitTemplateLiteral: self -] - -{ #category : #generated } -JSTemplateLiteralNode >> compositeNodeVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -JSTemplateLiteralNode >> compositeTokenVariables [ - ^ #(#parts) -] - -{ #category : #generated } -JSTemplateLiteralNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -JSTemplateLiteralNode >> expressions: anOrderedCollection [ - self setParents: self expressions to: nil. - expressions := anOrderedCollection. - self setParents: self expressions to: self -] - -{ #category : #'generated-initialize-release' } -JSTemplateLiteralNode >> initialize [ - super initialize. - parts := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. -] - -{ #category : #generated } -JSTemplateLiteralNode >> parts [ - ^ parts -] - -{ #category : #generated } -JSTemplateLiteralNode >> parts: anOrderedCollection [ - parts := anOrderedCollection -] diff --git a/src/SmaCC_Javascript_Parser/JSThisExpressionNode.class.st b/src/SmaCC_Javascript_Parser/JSThisExpressionNode.class.st deleted file mode 100644 index 057ce5923..000000000 --- a/src/SmaCC_Javascript_Parser/JSThisExpressionNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JSThisExpressionNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'thisToken' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSThisExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitThisExpression: self -] - -{ #category : #generated } -JSThisExpressionNode >> thisToken [ - ^ thisToken -] - -{ #category : #generated } -JSThisExpressionNode >> thisToken: aSmaCCToken [ - thisToken := aSmaCCToken -] - -{ #category : #generated } -JSThisExpressionNode >> tokenVariables [ - ^ #(#thisToken) -] diff --git a/src/SmaCC_Javascript_Parser/JSThrowStatementNode.class.st b/src/SmaCC_Javascript_Parser/JSThrowStatementNode.class.st deleted file mode 100644 index 5a1534370..000000000 --- a/src/SmaCC_Javascript_Parser/JSThrowStatementNode.class.st +++ /dev/null @@ -1,64 +0,0 @@ -Class { - #name : #JSThrowStatementNode, - #superclass : #JSStatementNode, - #instVars : [ - 'throwToken', - 'expression', - 'semicolon' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSThrowStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitThrowStatement: self -] - -{ #category : #generated } -JSThrowStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -JSThrowStatementNode >> expression: aJSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JSThrowStatementNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #generated } -JSThrowStatementNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -JSThrowStatementNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JSThrowStatementNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -JSThrowStatementNode >> throwToken [ - ^ throwToken -] - -{ #category : #generated } -JSThrowStatementNode >> throwToken: aSmaCCToken [ - throwToken := aSmaCCToken -] - -{ #category : #generated } -JSThrowStatementNode >> tokenVariables [ - ^ #(#throwToken) -] diff --git a/src/SmaCC_Javascript_Parser/JSTryStatementNode.class.st b/src/SmaCC_Javascript_Parser/JSTryStatementNode.class.st deleted file mode 100644 index cf5f5a508..000000000 --- a/src/SmaCC_Javascript_Parser/JSTryStatementNode.class.st +++ /dev/null @@ -1,142 +0,0 @@ -Class { - #name : #JSTryStatementNode, - #superclass : #JSStatementNode, - #instVars : [ - 'tryToken', - 'tryBlock', - 'catchToken', - 'left', - 'exceptionType', - 'right', - 'catchBlock', - 'finallyToken', - 'finallyBlock' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSTryStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitTryStatement: self -] - -{ #category : #generated } -JSTryStatementNode >> catchBlock [ - ^ catchBlock -] - -{ #category : #generated } -JSTryStatementNode >> catchBlock: aJSBlockStatementNode [ - self catchBlock notNil - ifTrue: [ self catchBlock parent: nil ]. - catchBlock := aJSBlockStatementNode. - self catchBlock notNil - ifTrue: [ self catchBlock parent: self ] -] - -{ #category : #generated } -JSTryStatementNode >> catchToken [ - ^ catchToken -] - -{ #category : #generated } -JSTryStatementNode >> catchToken: aSmaCCToken [ - catchToken := aSmaCCToken -] - -{ #category : #generated } -JSTryStatementNode >> exceptionType [ - ^ exceptionType -] - -{ #category : #generated } -JSTryStatementNode >> exceptionType: aJSProgramNode [ - self exceptionType notNil - ifTrue: [ self exceptionType parent: nil ]. - exceptionType := aJSProgramNode. - self exceptionType notNil - ifTrue: [ self exceptionType parent: self ] -] - -{ #category : #generated } -JSTryStatementNode >> finallyBlock [ - ^ finallyBlock -] - -{ #category : #generated } -JSTryStatementNode >> finallyBlock: aJSBlockStatementNode [ - self finallyBlock notNil - ifTrue: [ self finallyBlock parent: nil ]. - finallyBlock := aJSBlockStatementNode. - self finallyBlock notNil - ifTrue: [ self finallyBlock parent: self ] -] - -{ #category : #generated } -JSTryStatementNode >> finallyToken [ - ^ finallyToken -] - -{ #category : #generated } -JSTryStatementNode >> finallyToken: aSmaCCToken [ - finallyToken := aSmaCCToken -] - -{ #category : #generated } -JSTryStatementNode >> ignoredTokenVariables [ - ^ #(#left #right) -] - -{ #category : #generated } -JSTryStatementNode >> left [ - ^ left -] - -{ #category : #generated } -JSTryStatementNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -JSTryStatementNode >> nodeVariables [ - ^ #(#tryBlock #exceptionType #catchBlock #finallyBlock) -] - -{ #category : #generated } -JSTryStatementNode >> right [ - ^ right -] - -{ #category : #generated } -JSTryStatementNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -JSTryStatementNode >> tokenVariables [ - ^ #(#tryToken #catchToken #finallyToken) -] - -{ #category : #generated } -JSTryStatementNode >> tryBlock [ - ^ tryBlock -] - -{ #category : #generated } -JSTryStatementNode >> tryBlock: aJSBlockStatementNode [ - self tryBlock notNil - ifTrue: [ self tryBlock parent: nil ]. - tryBlock := aJSBlockStatementNode. - self tryBlock notNil - ifTrue: [ self tryBlock parent: self ] -] - -{ #category : #generated } -JSTryStatementNode >> tryToken [ - ^ tryToken -] - -{ #category : #generated } -JSTryStatementNode >> tryToken: aSmaCCToken [ - tryToken := aSmaCCToken -] diff --git a/src/SmaCC_Javascript_Parser/JSUnaryExpressionNode.class.st b/src/SmaCC_Javascript_Parser/JSUnaryExpressionNode.class.st deleted file mode 100644 index 4bba3ff52..000000000 --- a/src/SmaCC_Javascript_Parser/JSUnaryExpressionNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #JSUnaryExpressionNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'operator', - 'expression' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSUnaryExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitUnaryExpression: self -] - -{ #category : #generated } -JSUnaryExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -JSUnaryExpressionNode >> expression: aJSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JSUnaryExpressionNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -JSUnaryExpressionNode >> operator [ - ^ operator -] - -{ #category : #generated } -JSUnaryExpressionNode >> operator: aSmaCCToken [ - operator := aSmaCCToken -] - -{ #category : #generated } -JSUnaryExpressionNode >> tokenVariables [ - ^ #(#operator) -] diff --git a/src/SmaCC_Javascript_Parser/JSVariableDeclarationNode.class.st b/src/SmaCC_Javascript_Parser/JSVariableDeclarationNode.class.st deleted file mode 100644 index da92a117b..000000000 --- a/src/SmaCC_Javascript_Parser/JSVariableDeclarationNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #JSVariableDeclarationNode, - #superclass : #JSProgramNode, - #instVars : [ - 'variable', - 'equalToken', - 'value' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSVariableDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitVariableDeclaration: self -] - -{ #category : #generated } -JSVariableDeclarationNode >> equalToken [ - ^ equalToken -] - -{ #category : #generated } -JSVariableDeclarationNode >> equalToken: aSmaCCToken [ - equalToken := aSmaCCToken -] - -{ #category : #generated } -JSVariableDeclarationNode >> nodeVariables [ - ^ #(#variable #value) -] - -{ #category : #generated } -JSVariableDeclarationNode >> tokenVariables [ - ^ #(#equalToken) -] - -{ #category : #generated } -JSVariableDeclarationNode >> value [ - ^ value -] - -{ #category : #generated } -JSVariableDeclarationNode >> value: aJSExpressionNode [ - self value notNil - ifTrue: [ self value parent: nil ]. - value := aJSExpressionNode. - self value notNil - ifTrue: [ self value parent: self ] -] - -{ #category : #generated } -JSVariableDeclarationNode >> variable [ - ^ variable -] - -{ #category : #generated } -JSVariableDeclarationNode >> variable: aJSProgramNode [ - self variable notNil - ifTrue: [ self variable parent: nil ]. - variable := aJSProgramNode. - self variable notNil - ifTrue: [ self variable parent: self ] -] diff --git a/src/SmaCC_Javascript_Parser/JSVariablePatternDeclarationNode.class.st b/src/SmaCC_Javascript_Parser/JSVariablePatternDeclarationNode.class.st deleted file mode 100644 index a586f23ca..000000000 --- a/src/SmaCC_Javascript_Parser/JSVariablePatternDeclarationNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #JSVariablePatternDeclarationNode, - #superclass : #JSProgramNode, - #instVars : [ - 'pattern', - 'equalToken', - 'value' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSVariablePatternDeclarationNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitVariablePatternDeclaration: self -] - -{ #category : #generated } -JSVariablePatternDeclarationNode >> equalToken [ - ^ equalToken -] - -{ #category : #generated } -JSVariablePatternDeclarationNode >> equalToken: aSmaCCToken [ - equalToken := aSmaCCToken -] - -{ #category : #generated } -JSVariablePatternDeclarationNode >> nodeVariables [ - ^ #(#pattern #value) -] - -{ #category : #generated } -JSVariablePatternDeclarationNode >> pattern [ - ^ pattern -] - -{ #category : #generated } -JSVariablePatternDeclarationNode >> pattern: aJSProgramNode [ - self pattern notNil - ifTrue: [ self pattern parent: nil ]. - pattern := aJSProgramNode. - self pattern notNil - ifTrue: [ self pattern parent: self ] -] - -{ #category : #generated } -JSVariablePatternDeclarationNode >> tokenVariables [ - ^ #(#equalToken) -] - -{ #category : #generated } -JSVariablePatternDeclarationNode >> value [ - ^ value -] - -{ #category : #generated } -JSVariablePatternDeclarationNode >> value: aJSExpressionNode [ - self value notNil - ifTrue: [ self value parent: nil ]. - value := aJSExpressionNode. - self value notNil - ifTrue: [ self value parent: self ] -] diff --git a/src/SmaCC_Javascript_Parser/JSVariableStatementNode.class.st b/src/SmaCC_Javascript_Parser/JSVariableStatementNode.class.st deleted file mode 100644 index ca000ac5d..000000000 --- a/src/SmaCC_Javascript_Parser/JSVariableStatementNode.class.st +++ /dev/null @@ -1,85 +0,0 @@ -Class { - #name : #JSVariableStatementNode, - #superclass : #JSStatementNode, - #instVars : [ - 'varToken', - 'variables', - 'commas', - 'semicolon' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSVariableStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitVariableStatement: self -] - -{ #category : #generated } -JSVariableStatementNode >> commas [ - ^ commas -] - -{ #category : #generated } -JSVariableStatementNode >> commas: anOrderedCollection [ - commas := anOrderedCollection -] - -{ #category : #generated } -JSVariableStatementNode >> compositeNodeVariables [ - ^ #(#variables) -] - -{ #category : #generated } -JSVariableStatementNode >> ignoredCompositeTokenVariables [ - ^ #(#commas) -] - -{ #category : #generated } -JSVariableStatementNode >> ignoredTokenVariables [ - ^ #(#semicolon) -] - -{ #category : #'generated-initialize-release' } -JSVariableStatementNode >> initialize [ - super initialize. - variables := OrderedCollection new: 2. - commas := OrderedCollection new: 2. -] - -{ #category : #generated } -JSVariableStatementNode >> semicolon [ - ^ semicolon -] - -{ #category : #generated } -JSVariableStatementNode >> semicolon: aSmaCCToken [ - semicolon := aSmaCCToken -] - -{ #category : #generated } -JSVariableStatementNode >> tokenVariables [ - ^ #(#varToken) -] - -{ #category : #generated } -JSVariableStatementNode >> varToken [ - ^ varToken -] - -{ #category : #generated } -JSVariableStatementNode >> varToken: aSmaCCToken [ - varToken := aSmaCCToken -] - -{ #category : #generated } -JSVariableStatementNode >> variables [ - ^ variables -] - -{ #category : #generated } -JSVariableStatementNode >> variables: anOrderedCollection [ - self setParents: self variables to: nil. - variables := anOrderedCollection. - self setParents: self variables to: self -] diff --git a/src/SmaCC_Javascript_Parser/JSWhileStatementNode.class.st b/src/SmaCC_Javascript_Parser/JSWhileStatementNode.class.st deleted file mode 100644 index 60451788c..000000000 --- a/src/SmaCC_Javascript_Parser/JSWhileStatementNode.class.st +++ /dev/null @@ -1,90 +0,0 @@ -Class { - #name : #JSWhileStatementNode, - #superclass : #JSStatementNode, - #instVars : [ - 'whileToken', - 'left', - 'expression', - 'right', - 'statement' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSWhileStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitWhileStatement: self -] - -{ #category : #generated } -JSWhileStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -JSWhileStatementNode >> expression: aJSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JSWhileStatementNode >> ignoredTokenVariables [ - ^ #(#left #right) -] - -{ #category : #generated } -JSWhileStatementNode >> left [ - ^ left -] - -{ #category : #generated } -JSWhileStatementNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -JSWhileStatementNode >> nodeVariables [ - ^ #(#expression #statement) -] - -{ #category : #generated } -JSWhileStatementNode >> right [ - ^ right -] - -{ #category : #generated } -JSWhileStatementNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -JSWhileStatementNode >> statement [ - ^ statement -] - -{ #category : #generated } -JSWhileStatementNode >> statement: aJSStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aJSStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -JSWhileStatementNode >> tokenVariables [ - ^ #(#whileToken) -] - -{ #category : #generated } -JSWhileStatementNode >> whileToken [ - ^ whileToken -] - -{ #category : #generated } -JSWhileStatementNode >> whileToken: aSmaCCToken [ - whileToken := aSmaCCToken -] diff --git a/src/SmaCC_Javascript_Parser/JSWithStatementNode.class.st b/src/SmaCC_Javascript_Parser/JSWithStatementNode.class.st deleted file mode 100644 index 56d81533f..000000000 --- a/src/SmaCC_Javascript_Parser/JSWithStatementNode.class.st +++ /dev/null @@ -1,90 +0,0 @@ -Class { - #name : #JSWithStatementNode, - #superclass : #JSStatementNode, - #instVars : [ - 'withToken', - 'left', - 'expression', - 'right', - 'statement' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSWithStatementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitWithStatement: self -] - -{ #category : #generated } -JSWithStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -JSWithStatementNode >> expression: aJSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JSWithStatementNode >> ignoredTokenVariables [ - ^ #(#left #right) -] - -{ #category : #generated } -JSWithStatementNode >> left [ - ^ left -] - -{ #category : #generated } -JSWithStatementNode >> left: aSmaCCToken [ - left := aSmaCCToken -] - -{ #category : #generated } -JSWithStatementNode >> nodeVariables [ - ^ #(#expression #statement) -] - -{ #category : #generated } -JSWithStatementNode >> right [ - ^ right -] - -{ #category : #generated } -JSWithStatementNode >> right: aSmaCCToken [ - right := aSmaCCToken -] - -{ #category : #generated } -JSWithStatementNode >> statement [ - ^ statement -] - -{ #category : #generated } -JSWithStatementNode >> statement: aJSStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aJSStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -JSWithStatementNode >> tokenVariables [ - ^ #(#withToken) -] - -{ #category : #generated } -JSWithStatementNode >> withToken [ - ^ withToken -] - -{ #category : #generated } -JSWithStatementNode >> withToken: aSmaCCToken [ - withToken := aSmaCCToken -] diff --git a/src/SmaCC_Javascript_Parser/JSXAttributeNode.class.st b/src/SmaCC_Javascript_Parser/JSXAttributeNode.class.st deleted file mode 100644 index e03ec8b19..000000000 --- a/src/SmaCC_Javascript_Parser/JSXAttributeNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #JSXAttributeNode, - #superclass : #JSProgramNode, - #instVars : [ - 'name', - 'equalToken', - 'value' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSXAttributeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitXAttribute: self -] - -{ #category : #generated } -JSXAttributeNode >> equalToken [ - ^ equalToken -] - -{ #category : #generated } -JSXAttributeNode >> equalToken: aSmaCCToken [ - equalToken := aSmaCCToken -] - -{ #category : #generated } -JSXAttributeNode >> name [ - ^ name -] - -{ #category : #generated } -JSXAttributeNode >> name: aJSProgramNode [ - self name notNil - ifTrue: [ self name parent: nil ]. - name := aJSProgramNode. - self name notNil - ifTrue: [ self name parent: self ] -] - -{ #category : #generated } -JSXAttributeNode >> nodeVariables [ - ^ #(#name #value) -] - -{ #category : #generated } -JSXAttributeNode >> tokenVariables [ - ^ #(#equalToken) -] - -{ #category : #generated } -JSXAttributeNode >> value [ - ^ value -] - -{ #category : #generated } -JSXAttributeNode >> value: aJSExpressionNode [ - self value notNil - ifTrue: [ self value parent: nil ]. - value := aJSExpressionNode. - self value notNil - ifTrue: [ self value parent: self ] -] diff --git a/src/SmaCC_Javascript_Parser/JSXClosingElementNode.class.st b/src/SmaCC_Javascript_Parser/JSXClosingElementNode.class.st deleted file mode 100644 index d0fc463d4..000000000 --- a/src/SmaCC_Javascript_Parser/JSXClosingElementNode.class.st +++ /dev/null @@ -1,70 +0,0 @@ -Class { - #name : #JSXClosingElementNode, - #superclass : #JSProgramNode, - #instVars : [ - 'ltToken', - 'slashToken', - 'name', - 'gtToken' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSXClosingElementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitXClosingElement: self -] - -{ #category : #generated } -JSXClosingElementNode >> gtToken [ - ^ gtToken -] - -{ #category : #generated } -JSXClosingElementNode >> gtToken: aSmaCCToken [ - gtToken := aSmaCCToken -] - -{ #category : #generated } -JSXClosingElementNode >> ltToken [ - ^ ltToken -] - -{ #category : #generated } -JSXClosingElementNode >> ltToken: aSmaCCToken [ - ltToken := aSmaCCToken -] - -{ #category : #generated } -JSXClosingElementNode >> name [ - ^ name -] - -{ #category : #generated } -JSXClosingElementNode >> name: aJSProgramNode [ - self name notNil - ifTrue: [ self name parent: nil ]. - name := aJSProgramNode. - self name notNil - ifTrue: [ self name parent: self ] -] - -{ #category : #generated } -JSXClosingElementNode >> nodeVariables [ - ^ #(#name) -] - -{ #category : #generated } -JSXClosingElementNode >> slashToken [ - ^ slashToken -] - -{ #category : #generated } -JSXClosingElementNode >> slashToken: aSmaCCToken [ - slashToken := aSmaCCToken -] - -{ #category : #generated } -JSXClosingElementNode >> tokenVariables [ - ^ #(#ltToken #slashToken #gtToken) -] diff --git a/src/SmaCC_Javascript_Parser/JSXCodeExpressionNode.class.st b/src/SmaCC_Javascript_Parser/JSXCodeExpressionNode.class.st deleted file mode 100644 index 123e37cf5..000000000 --- a/src/SmaCC_Javascript_Parser/JSXCodeExpressionNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #JSXCodeExpressionNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'leftBrace', - 'expression', - 'rightBrace' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSXCodeExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitXCodeExpression: self -] - -{ #category : #generated } -JSXCodeExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -JSXCodeExpressionNode >> expression: aJSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JSXCodeExpressionNode >> ignoredTokenVariables [ - ^ #(#leftBrace #rightBrace) -] - -{ #category : #generated } -JSXCodeExpressionNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -JSXCodeExpressionNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -JSXCodeExpressionNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -JSXCodeExpressionNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -JSXCodeExpressionNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] diff --git a/src/SmaCC_Javascript_Parser/JSXElementNameNode.class.st b/src/SmaCC_Javascript_Parser/JSXElementNameNode.class.st deleted file mode 100644 index 0a267a376..000000000 --- a/src/SmaCC_Javascript_Parser/JSXElementNameNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JSXElementNameNode, - #superclass : #JSProgramNode, - #instVars : [ - 'identifier' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSXElementNameNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitXElementName: self -] - -{ #category : #generated } -JSXElementNameNode >> identifier [ - ^ identifier -] - -{ #category : #generated } -JSXElementNameNode >> identifier: aSmaCCToken [ - identifier := aSmaCCToken -] - -{ #category : #generated } -JSXElementNameNode >> tokenVariables [ - ^ #(#identifier) -] diff --git a/src/SmaCC_Javascript_Parser/JSXElementNode.class.st b/src/SmaCC_Javascript_Parser/JSXElementNode.class.st deleted file mode 100644 index 62c6d8b4f..000000000 --- a/src/SmaCC_Javascript_Parser/JSXElementNode.class.st +++ /dev/null @@ -1,71 +0,0 @@ -Class { - #name : #JSXElementNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'openingElement', - 'items', - 'closingElement' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSXElementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitXElement: self -] - -{ #category : #generated } -JSXElementNode >> closingElement [ - ^ closingElement -] - -{ #category : #generated } -JSXElementNode >> closingElement: aJSXClosingElementNode [ - self closingElement notNil - ifTrue: [ self closingElement parent: nil ]. - closingElement := aJSXClosingElementNode. - self closingElement notNil - ifTrue: [ self closingElement parent: self ] -] - -{ #category : #generated } -JSXElementNode >> compositeNodeVariables [ - ^ #(#items) -] - -{ #category : #'generated-initialize-release' } -JSXElementNode >> initialize [ - super initialize. - items := OrderedCollection new: 2. -] - -{ #category : #generated } -JSXElementNode >> items [ - ^ items -] - -{ #category : #generated } -JSXElementNode >> items: anOrderedCollection [ - self setParents: self items to: nil. - items := anOrderedCollection. - self setParents: self items to: self -] - -{ #category : #generated } -JSXElementNode >> nodeVariables [ - ^ #(#openingElement #closingElement) -] - -{ #category : #generated } -JSXElementNode >> openingElement [ - ^ openingElement -] - -{ #category : #generated } -JSXElementNode >> openingElement: aJSXOpeningElementNode [ - self openingElement notNil - ifTrue: [ self openingElement parent: nil ]. - openingElement := aJSXOpeningElementNode. - self openingElement notNil - ifTrue: [ self openingElement parent: self ] -] diff --git a/src/SmaCC_Javascript_Parser/JSXFragmentNode.class.st b/src/SmaCC_Javascript_Parser/JSXFragmentNode.class.st deleted file mode 100644 index 39718f67a..000000000 --- a/src/SmaCC_Javascript_Parser/JSXFragmentNode.class.st +++ /dev/null @@ -1,81 +0,0 @@ -Class { - #name : #JSXFragmentNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'ltTokens', - 'gtTokens', - 'items', - 'slashToken' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSXFragmentNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitXFragment: self -] - -{ #category : #generated } -JSXFragmentNode >> compositeNodeVariables [ - ^ #(#items) -] - -{ #category : #generated } -JSXFragmentNode >> compositeTokenVariables [ - ^ #(#ltTokens #gtTokens) -] - -{ #category : #generated } -JSXFragmentNode >> gtTokens [ - ^ gtTokens -] - -{ #category : #generated } -JSXFragmentNode >> gtTokens: anOrderedCollection [ - gtTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -JSXFragmentNode >> initialize [ - super initialize. - ltTokens := OrderedCollection new: 2. - gtTokens := OrderedCollection new: 2. - items := OrderedCollection new: 2. -] - -{ #category : #generated } -JSXFragmentNode >> items [ - ^ items -] - -{ #category : #generated } -JSXFragmentNode >> items: anOrderedCollection [ - self setParents: self items to: nil. - items := anOrderedCollection. - self setParents: self items to: self -] - -{ #category : #generated } -JSXFragmentNode >> ltTokens [ - ^ ltTokens -] - -{ #category : #generated } -JSXFragmentNode >> ltTokens: anOrderedCollection [ - ltTokens := anOrderedCollection -] - -{ #category : #generated } -JSXFragmentNode >> slashToken [ - ^ slashToken -] - -{ #category : #generated } -JSXFragmentNode >> slashToken: aSmaCCToken [ - slashToken := aSmaCCToken -] - -{ #category : #generated } -JSXFragmentNode >> tokenVariables [ - ^ #(#slashToken) -] diff --git a/src/SmaCC_Javascript_Parser/JSXMemberExpressionNode.class.st b/src/SmaCC_Javascript_Parser/JSXMemberExpressionNode.class.st deleted file mode 100644 index 47c3a6886..000000000 --- a/src/SmaCC_Javascript_Parser/JSXMemberExpressionNode.class.st +++ /dev/null @@ -1,46 +0,0 @@ -Class { - #name : #JSXMemberExpressionNode, - #superclass : #JSProgramNode, - #instVars : [ - 'identifiers', - 'periodTokens' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSXMemberExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitXMemberExpression: self -] - -{ #category : #generated } -JSXMemberExpressionNode >> compositeTokenVariables [ - ^ #(#identifiers #periodTokens) -] - -{ #category : #generated } -JSXMemberExpressionNode >> identifiers [ - ^ identifiers -] - -{ #category : #generated } -JSXMemberExpressionNode >> identifiers: anOrderedCollection [ - identifiers := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -JSXMemberExpressionNode >> initialize [ - super initialize. - identifiers := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -JSXMemberExpressionNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -JSXMemberExpressionNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] diff --git a/src/SmaCC_Javascript_Parser/JSXNamespacedNameNode.class.st b/src/SmaCC_Javascript_Parser/JSXNamespacedNameNode.class.st deleted file mode 100644 index b7be478a9..000000000 --- a/src/SmaCC_Javascript_Parser/JSXNamespacedNameNode.class.st +++ /dev/null @@ -1,50 +0,0 @@ -Class { - #name : #JSXNamespacedNameNode, - #superclass : #JSProgramNode, - #instVars : [ - 'identifiers', - 'colonToken' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSXNamespacedNameNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitXNamespacedName: self -] - -{ #category : #generated } -JSXNamespacedNameNode >> colonToken [ - ^ colonToken -] - -{ #category : #generated } -JSXNamespacedNameNode >> colonToken: aSmaCCToken [ - colonToken := aSmaCCToken -] - -{ #category : #generated } -JSXNamespacedNameNode >> compositeTokenVariables [ - ^ #(#identifiers) -] - -{ #category : #generated } -JSXNamespacedNameNode >> identifiers [ - ^ identifiers -] - -{ #category : #generated } -JSXNamespacedNameNode >> identifiers: anOrderedCollection [ - identifiers := anOrderedCollection -] - -{ #category : #generated } -JSXNamespacedNameNode >> ignoredTokenVariables [ - ^ #(#colonToken) -] - -{ #category : #'generated-initialize-release' } -JSXNamespacedNameNode >> initialize [ - super initialize. - identifiers := OrderedCollection new: 2. -] diff --git a/src/SmaCC_Javascript_Parser/JSXOpeningElementNode.class.st b/src/SmaCC_Javascript_Parser/JSXOpeningElementNode.class.st deleted file mode 100644 index 84760a6e5..000000000 --- a/src/SmaCC_Javascript_Parser/JSXOpeningElementNode.class.st +++ /dev/null @@ -1,83 +0,0 @@ -Class { - #name : #JSXOpeningElementNode, - #superclass : #JSProgramNode, - #instVars : [ - 'ltToken', - 'name', - 'gtToken', - '_attributes' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSXOpeningElementNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -JSXOpeningElementNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -JSXOpeningElementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitXOpeningElement: self -] - -{ #category : #generated } -JSXOpeningElementNode >> compositeNodeVariables [ - ^ #(#_attributes) -] - -{ #category : #generated } -JSXOpeningElementNode >> gtToken [ - ^ gtToken -] - -{ #category : #generated } -JSXOpeningElementNode >> gtToken: aSmaCCToken [ - gtToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -JSXOpeningElementNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. -] - -{ #category : #generated } -JSXOpeningElementNode >> ltToken [ - ^ ltToken -] - -{ #category : #generated } -JSXOpeningElementNode >> ltToken: aSmaCCToken [ - ltToken := aSmaCCToken -] - -{ #category : #generated } -JSXOpeningElementNode >> name [ - ^ name -] - -{ #category : #generated } -JSXOpeningElementNode >> name: aJSProgramNode [ - self name notNil - ifTrue: [ self name parent: nil ]. - name := aJSProgramNode. - self name notNil - ifTrue: [ self name parent: self ] -] - -{ #category : #generated } -JSXOpeningElementNode >> nodeVariables [ - ^ #(#name) -] - -{ #category : #generated } -JSXOpeningElementNode >> tokenVariables [ - ^ #(#ltToken #gtToken) -] diff --git a/src/SmaCC_Javascript_Parser/JSXParser.class.st b/src/SmaCC_Javascript_Parser/JSXParser.class.st deleted file mode 100644 index 241db8ec3..000000000 --- a/src/SmaCC_Javascript_Parser/JSXParser.class.st +++ /dev/null @@ -1,17 +0,0 @@ -Class { - #name : #JSXParser, - #superclass : #JSParser, - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #'file types' } -JSXParser class >> fileExtension [ - ^ '.jsx' -] - -{ #category : #private } -JSXParser >> addActionsFor: anInteger to: aCollection [ - super addActionsFor: anInteger to: aCollection. - anInteger = scanner ltId - ifTrue: [ super addActionsFor: scanner jsxLTId to: aCollection ] -] diff --git a/src/SmaCC_Javascript_Parser/JSXSelfClosingElementNode.class.st b/src/SmaCC_Javascript_Parser/JSXSelfClosingElementNode.class.st deleted file mode 100644 index c43649760..000000000 --- a/src/SmaCC_Javascript_Parser/JSXSelfClosingElementNode.class.st +++ /dev/null @@ -1,94 +0,0 @@ -Class { - #name : #JSXSelfClosingElementNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'ltToken', - 'name', - 'slashToken', - 'gtToken', - '_attributes' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSXSelfClosingElementNode >> _attributes [ - ^ _attributes -] - -{ #category : #generated } -JSXSelfClosingElementNode >> _attributes: anOrderedCollection [ - self setParents: self _attributes to: nil. - _attributes := anOrderedCollection. - self setParents: self _attributes to: self -] - -{ #category : #generated } -JSXSelfClosingElementNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitXSelfClosingElement: self -] - -{ #category : #generated } -JSXSelfClosingElementNode >> compositeNodeVariables [ - ^ #(#_attributes) -] - -{ #category : #generated } -JSXSelfClosingElementNode >> gtToken [ - ^ gtToken -] - -{ #category : #generated } -JSXSelfClosingElementNode >> gtToken: aSmaCCToken [ - gtToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -JSXSelfClosingElementNode >> initialize [ - super initialize. - _attributes := OrderedCollection new: 2. -] - -{ #category : #generated } -JSXSelfClosingElementNode >> ltToken [ - ^ ltToken -] - -{ #category : #generated } -JSXSelfClosingElementNode >> ltToken: aSmaCCToken [ - ltToken := aSmaCCToken -] - -{ #category : #generated } -JSXSelfClosingElementNode >> name [ - ^ name -] - -{ #category : #generated } -JSXSelfClosingElementNode >> name: aJSProgramNode [ - self name notNil - ifTrue: [ self name parent: nil ]. - name := aJSProgramNode. - self name notNil - ifTrue: [ self name parent: self ] -] - -{ #category : #generated } -JSXSelfClosingElementNode >> nodeVariables [ - ^ #(#name) -] - -{ #category : #generated } -JSXSelfClosingElementNode >> slashToken [ - ^ slashToken -] - -{ #category : #generated } -JSXSelfClosingElementNode >> slashToken: aSmaCCToken [ - slashToken := aSmaCCToken -] - -{ #category : #generated } -JSXSelfClosingElementNode >> tokenVariables [ - ^ #(#ltToken #slashToken #gtToken) -] diff --git a/src/SmaCC_Javascript_Parser/JSXSpreadAttributeNode.class.st b/src/SmaCC_Javascript_Parser/JSXSpreadAttributeNode.class.st deleted file mode 100644 index 7f5965db3..000000000 --- a/src/SmaCC_Javascript_Parser/JSXSpreadAttributeNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #JSXSpreadAttributeNode, - #superclass : #JSProgramNode, - #instVars : [ - 'leftBrace', - 'element', - 'rightBrace' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSXSpreadAttributeNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitXSpreadAttribute: self -] - -{ #category : #generated } -JSXSpreadAttributeNode >> element [ - ^ element -] - -{ #category : #generated } -JSXSpreadAttributeNode >> element: aJSSpreadExpressionNode [ - self element notNil - ifTrue: [ self element parent: nil ]. - element := aJSSpreadExpressionNode. - self element notNil - ifTrue: [ self element parent: self ] -] - -{ #category : #generated } -JSXSpreadAttributeNode >> ignoredTokenVariables [ - ^ #(#leftBrace #rightBrace) -] - -{ #category : #generated } -JSXSpreadAttributeNode >> leftBrace [ - ^ leftBrace -] - -{ #category : #generated } -JSXSpreadAttributeNode >> leftBrace: aSmaCCToken [ - leftBrace := aSmaCCToken -] - -{ #category : #generated } -JSXSpreadAttributeNode >> nodeVariables [ - ^ #(#element) -] - -{ #category : #generated } -JSXSpreadAttributeNode >> rightBrace [ - ^ rightBrace -] - -{ #category : #generated } -JSXSpreadAttributeNode >> rightBrace: aSmaCCToken [ - rightBrace := aSmaCCToken -] diff --git a/src/SmaCC_Javascript_Parser/JSXTextNode.class.st b/src/SmaCC_Javascript_Parser/JSXTextNode.class.st deleted file mode 100644 index a72257771..000000000 --- a/src/SmaCC_Javascript_Parser/JSXTextNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #JSXTextNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'value' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSXTextNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitXText: self -] - -{ #category : #generated } -JSXTextNode >> tokenVariables [ - ^ #(#value) -] - -{ #category : #generated } -JSXTextNode >> value [ - ^ value -] - -{ #category : #generated } -JSXTextNode >> value: aSmaCCToken [ - value := aSmaCCToken -] diff --git a/src/SmaCC_Javascript_Parser/JSYieldExpressionNode.class.st b/src/SmaCC_Javascript_Parser/JSYieldExpressionNode.class.st deleted file mode 100644 index 1a303a228..000000000 --- a/src/SmaCC_Javascript_Parser/JSYieldExpressionNode.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #JSYieldExpressionNode, - #superclass : #JSExpressionNode, - #instVars : [ - 'yieldToken', - 'star', - 'expression' - ], - #category : #'SmaCC_Javascript_Parser' -} - -{ #category : #generated } -JSYieldExpressionNode >> acceptVisitor: aProgramVisitor [ - ^ aProgramVisitor visitYieldExpression: self -] - -{ #category : #generated } -JSYieldExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -JSYieldExpressionNode >> expression: aJSExpressionNode [ - self expression notNil - ifTrue: [ self expression parent: nil ]. - expression := aJSExpressionNode. - self expression notNil - ifTrue: [ self expression parent: self ] -] - -{ #category : #generated } -JSYieldExpressionNode >> nodeVariables [ - ^ #(#expression) -] - -{ #category : #generated } -JSYieldExpressionNode >> star [ - ^ star -] - -{ #category : #generated } -JSYieldExpressionNode >> star: aSmaCCToken [ - star := aSmaCCToken -] - -{ #category : #generated } -JSYieldExpressionNode >> tokenVariables [ - ^ #(#yieldToken #star) -] - -{ #category : #generated } -JSYieldExpressionNode >> yieldToken [ - ^ yieldToken -] - -{ #category : #generated } -JSYieldExpressionNode >> yieldToken: aSmaCCToken [ - yieldToken := aSmaCCToken -] diff --git a/src/SmaCC_Javascript_Parser/package.st b/src/SmaCC_Javascript_Parser/package.st deleted file mode 100644 index 97ef99aae..000000000 --- a/src/SmaCC_Javascript_Parser/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_Javascript_Parser' } diff --git a/src/SmaCC_Line_Parser/FileNode.class.st b/src/SmaCC_Line_Parser/FileNode.class.st deleted file mode 100644 index f2e5a6777..000000000 --- a/src/SmaCC_Line_Parser/FileNode.class.st +++ /dev/null @@ -1,34 +0,0 @@ -Class { - #name : #FileNode, - #superclass : #SmaCCParseNode, - #instVars : [ - 'lines' - ], - #category : #'SmaCC_Line_Parser' -} - -{ #category : #generated } -FileNode >> acceptVisitor: aFileNodeVisitor [ - ^ aFileNodeVisitor visitFileNode: self -] - -{ #category : #generated } -FileNode >> compositeTokenVariables [ - ^ #(#lines) -] - -{ #category : #'generated-initialize-release' } -FileNode >> initialize [ - super initialize. - lines := OrderedCollection new: 2. -] - -{ #category : #generated } -FileNode >> lines [ - ^ lines -] - -{ #category : #generated } -FileNode >> lines: anOrderedCollection [ - lines := anOrderedCollection -] diff --git a/src/SmaCC_Line_Parser/FileNodeVisitor.class.st b/src/SmaCC_Line_Parser/FileNodeVisitor.class.st deleted file mode 100644 index 54aec6186..000000000 --- a/src/SmaCC_Line_Parser/FileNodeVisitor.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #FileNodeVisitor, - #superclass : #SmaCCParseNodeVisitor, - #category : #'SmaCC_Line_Parser' -} - -{ #category : #generated } -FileNodeVisitor >> visitFileNode: aFileNode [ - ^ self visitSmaCCParseNode: aFileNode -] diff --git a/src/SmaCC_Line_Parser/LineParser.class.st b/src/SmaCC_Line_Parser/LineParser.class.st deleted file mode 100644 index 82ecb6c84..000000000 --- a/src/SmaCC_Line_Parser/LineParser.class.st +++ /dev/null @@ -1,102 +0,0 @@ -Class { - #name : #LineParser, - #superclass : #SmaCCParser, - #category : #'SmaCC_Line_Parser' -} - -{ #category : #'generated-accessing' } -LineParser class >> cacheId [ - ^'2019-04-15T17:15:41.487428-05:00' -] - -{ #category : #generated } -LineParser class >> definitionComment [ -"%root FileNode; - - - : [^\r\n]+ - ; - - : \r | \n | \r\n - ; - -File - : Lines {{FileNode}} - ; -Lines - : Line - | Lines Line - ; -Line - : - | 'line' - ;" -] - -{ #category : #generated } -LineParser class >> reduceTable [ -^#( - #(6 0 #nil 146433 false ) - #(6 1 #liftFirstValue: 146434 false ) - #(4 1 #reduceActionForFile1: 73729 false ) - #(5 1 #reduceActionForLines1: 104449 false ) - #(5 3 #reduceActionForLines2: 104450 false ) - ). -] - -{ #category : #'generated-accessing' } -LineParser class >> scannerClass [ - ^LineScanner -] - -{ #category : #generated } -LineParser class >> startingStateForFile [ - ^ 1 -] - -{ #category : #generated } -LineParser class >> symbolNames [ - ^ #('' '' 'B e g i n' 'File' 'Lines' 'Line' 'E O F' 'error') -] - -{ #category : #generated } -LineParser class >> symbolTypes [ - ^ #(#SmaCCToken #SmaCCToken #FileNode #FileNode #OrderedCollection #SmaCCToken #SmaCCToken #SmaCCErrorNode) -] - -{ #category : #generated } -LineParser class >> transitionTable [ -^#( -#[1 0 21 0 1 0 6 0 2 0 13 0 4 0 17 0 5 0 21 0 6 0 6 0 7] -#[0 0 10 0 2 0 7] -#[0 0 0 0 7] -#[1 0 25 0 2 0 14 0 7] -#[0 0 18 0 2 0 7] -#[1 0 29 0 1 0 6 0 2 0 29 0 6 0 6 0 7] -#[0 0 22 0 2 0 7] - ). -] - -{ #category : #'generated-reduction actions' } -LineParser >> reduceActionForFile1: nodes [ - | result | - result := FileNode new. - result addTokens: (nodes at: 1) to: result lines. - ^ result -] - -{ #category : #'generated-reduction actions' } -LineParser >> reduceActionForLines1: nodes [ - | result | - result := OrderedCollection new: 2. - self add: (nodes at: 1) to: result. - ^ result -] - -{ #category : #'generated-reduction actions' } -LineParser >> reduceActionForLines2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 3) to: result. - ^ result -] diff --git a/src/SmaCC_Line_Parser/LineScanner.class.st b/src/SmaCC_Line_Parser/LineScanner.class.st deleted file mode 100644 index fb0a23de1..000000000 --- a/src/SmaCC_Line_Parser/LineScanner.class.st +++ /dev/null @@ -1,35 +0,0 @@ -Class { - #name : #LineScanner, - #superclass : #SmaCCScanner, - #category : #'SmaCC_Line_Parser' -} - -{ #category : #generated } -LineScanner >> emptySymbolTokenId [ - ^ 7 -] - -{ #category : #generated } -LineScanner >> errorTokenId [ - ^ 8 -] - -{ #category : #generated } -LineScanner >> scanForToken [ - self step. - currentCharacter == Character lf - ifTrue: [ ^ self recordAndReportMatch: #(2) ]. - currentCharacter == Character cr - ifTrue: [ self recordMatch: #(2). - self step. - currentCharacter == Character lf - ifTrue: [ ^ self recordAndReportMatch: #(2) ]. - ^ self reportLastMatch ]. - true - ifTrue: [ [ self recordMatch: #(1). - self step. - currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: Character newPage) - or: [ currentCharacter >= (Character value: 14) ] ] ] whileTrue ]. - ^ self reportLastMatch -] diff --git a/src/SmaCC_Line_Parser/package.st b/src/SmaCC_Line_Parser/package.st deleted file mode 100644 index e675e7bd6..000000000 --- a/src/SmaCC_Line_Parser/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_Line_Parser' } diff --git a/src/SmaCC_Parse_Tree_Comparison/SmaCCParseTreeComparisonCommandLineHandler.class.st b/src/SmaCC_Parse_Tree_Comparison/SmaCCParseTreeComparisonCommandLineHandler.class.st deleted file mode 100644 index 3b2a42fd2..000000000 --- a/src/SmaCC_Parse_Tree_Comparison/SmaCCParseTreeComparisonCommandLineHandler.class.st +++ /dev/null @@ -1,52 +0,0 @@ -Class { - #name : #SmaCCParseTreeComparisonCommandLineHandler, - #superclass : #CommandLineHandler, - #category : #'SmaCC_Parse_Tree_Comparison' -} - -{ #category : #accessing } -SmaCCParseTreeComparisonCommandLineHandler class >> commandName [ - ^ 'SmaCCCompareParseTrees' -] - -{ #category : #public } -SmaCCParseTreeComparisonCommandLineHandler >> activate [ - self arguments size ~= 2 - ifTrue: [ self exitFailure: 'Please supply two filenames to compare' ]. - self compareFile: self arguments first to: self arguments last -] - -{ #category : #public } -SmaCCParseTreeComparisonCommandLineHandler >> compareFile: aString to: anotherString [ - | tree1 tree2 | - tree1 := self parseTreeFor: aString. - tree2 := self parseTreeFor: anotherString. - tree1 = tree2 - ifFalse: [ self exitFailure: 'ASTs are different' ]. - self exitSuccess -] - -{ #category : #public } -SmaCCParseTreeComparisonCommandLineHandler >> openFile: aString [ - ^ [ aString asFileReference readStream ] - on: Error - do: [ :ex | self exitFailure ] -] - -{ #category : #public } -SmaCCParseTreeComparisonCommandLineHandler >> parseTreeFor: aString [ - | parserClass stream | - parserClass := self parserClassFor: aString asFileReference extension. - stream := self openFile: aString. - ^ [ [ parserClass parseStream: stream ] - on: Error - do: [ :ex | self exitFailure: ex description ] ] - ensure: [ stream close ] -] - -{ #category : #public } -SmaCCParseTreeComparisonCommandLineHandler >> parserClassFor: aString [ - ^ SmaCCParser allSubclasses - detect: [ :each | each fileExtension = ('.' , aString) ] - ifNone: [ self exitFailure: 'Cannot find parser for file type: ' , aString ] -] diff --git a/src/SmaCC_Parse_Tree_Comparison/package.st b/src/SmaCC_Parse_Tree_Comparison/package.st deleted file mode 100644 index 95031d47a..000000000 --- a/src/SmaCC_Parse_Tree_Comparison/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_Parse_Tree_Comparison' } diff --git a/src/SmaCC_Rewrite_Engine/SmaCCAbstractRewrite.class.st b/src/SmaCC_Rewrite_Engine/SmaCCAbstractRewrite.class.st deleted file mode 100644 index 145545f43..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCAbstractRewrite.class.st +++ /dev/null @@ -1,177 +0,0 @@ -Class { - #name : #SmaCCAbstractRewrite, - #superclass : #Model, - #instVars : [ - 'parent', - 'properties' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #changing } -SmaCCAbstractRewrite >> changed: aSymbol [ - super changed: aSymbol. - self announcer announce: aSymbol. - self modified -] - -{ #category : #rewriting } -SmaCCAbstractRewrite >> clearLocalVariablesIn: aClass [ - -] - -{ #category : #printing } -SmaCCAbstractRewrite >> displayOn: aStream [ - self subclassResponsibility -] - -{ #category : #printing } -SmaCCAbstractRewrite >> displayString [ - | stream | - stream := WriteStream on: String new. - self displayOn: stream. - ^ stream contents -] - -{ #category : #'initialize-release' } -SmaCCAbstractRewrite >> engine: aSmaCCRewriteEngine [ - -] - -{ #category : #accessing } -SmaCCAbstractRewrite >> finishedLoading [ - -] - -{ #category : #testing } -SmaCCAbstractRewrite >> isComposite [ - ^ false -] - -{ #category : #testing } -SmaCCAbstractRewrite >> isRoot [ - ^ parent isNil -] - -{ #category : #testing } -SmaCCAbstractRewrite >> isUnder: aSmaCCAbstractRewrite [ - | current | - current := self. - [ current notNil and: [ current ~= aSmaCCAbstractRewrite ] ] - whileTrue: [ current := current parent ]. - ^ current notNil -] - -{ #category : #testing } -SmaCCAbstractRewrite >> isUpToDate [ - ^ true -] - -{ #category : #accessing } -SmaCCAbstractRewrite >> listForClass: aClass into: aSmaCCRewriteLink [ - ^ aSmaCCRewriteLink -] - -{ #category : #saving } -SmaCCAbstractRewrite >> localSaveOn: aStream [ - self subclassResponsibility -] - -{ #category : #testing } -SmaCCAbstractRewrite >> matches: aString [ - | stream | - stream := WriteStream on: String new. - self localSaveOn: stream. - ^ '*' , aString , '*' match: stream contents -] - -{ #category : #changing } -SmaCCAbstractRewrite >> modified [ - parent notNil - ifTrue: [ parent modified ] -] - -{ #category : #accessing } -SmaCCAbstractRewrite >> parent [ - ^ parent -] - -{ #category : #accessing } -SmaCCAbstractRewrite >> parent: aSmaCCAbstractRewrite [ - parent := aSmaCCAbstractRewrite -] - -{ #category : #accessing } -SmaCCAbstractRewrite >> parserClass [ - ^ parent notNil - ifTrue: [ parent parserClass ] - ifFalse: [ nil ] -] - -{ #category : #rewriting } -SmaCCAbstractRewrite >> performOn: aSmaCCNode continuation: aBlock [ - self subclassResponsibility -] - -{ #category : #copying } -SmaCCAbstractRewrite >> postCopy [ - announcer := nil. - dependents := nil. - super postCopy. - parent := nil -] - -{ #category : #accessing } -SmaCCAbstractRewrite >> properties [ - ^ properties ifNil: [ properties := Dictionary new ] -] - -{ #category : #accessing } -SmaCCAbstractRewrite >> properties: aDictionary [ - properties := aDictionary -] - -{ #category : #'accessing-properites' } -SmaCCAbstractRewrite >> propertyAt: aString [ - ^ self properties at: aString ifAbsent: [ nil ] -] - -{ #category : #'accessing-properites' } -SmaCCAbstractRewrite >> propertyAt: aString ifAbsent: aBlock [ - ^ self properties at: aString ifAbsent: aBlock -] - -{ #category : #'accessing-properites' } -SmaCCAbstractRewrite >> propertyAt: aString ifAbsentPut: aBlock [ - ^ self properties at: aString ifAbsentPut: aBlock -] - -{ #category : #'accessing-properites' } -SmaCCAbstractRewrite >> propertyAt: aString put: anObject [ - ^ self properties at: aString put: anObject -] - -{ #category : #'accessing-properites' } -SmaCCAbstractRewrite >> removeProperty: aString [ - ^ self properties removeKey: aString ifAbsent: [ nil ] -] - -{ #category : #accessing } -SmaCCAbstractRewrite >> rewrites [ - ^ #() -] - -{ #category : #saving } -SmaCCAbstractRewrite >> saveOn: aStream [ - self localSaveOn: aStream -] - -{ #category : #accessing } -SmaCCAbstractRewrite >> topParent [ - ^ parent ifNil: [ self ] ifNotNil: [ :value | value topParent ] -] - -{ #category : #rewriting } -SmaCCAbstractRewrite >> updateClass: aClass [ - -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCAnnotatedString.class.st b/src/SmaCC_Rewrite_Engine/SmaCCAnnotatedString.class.st deleted file mode 100644 index ca68e0f9d..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCAnnotatedString.class.st +++ /dev/null @@ -1,58 +0,0 @@ -Class { - #name : #SmaCCAnnotatedString, - #superclass : #SmaCCString, - #instVars : [ - 'node', - 'rule' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #public } -SmaCCAnnotatedString >> addAnnotationTo: aSmaCCAnnotatedStringInterval [ - (node isNil or: [ rule isNil ]) - ifTrue: [ ^ self ]. - aSmaCCAnnotatedStringInterval - addAnnotation: (SmaCCRewriteAnnotation onNode: node rewrite: rule) -] - -{ #category : #public } -SmaCCAnnotatedString >> intervalClass [ - ^ SmaCCAnnotatedStringInterval -] - -{ #category : #public } -SmaCCAnnotatedString >> newIntervalFor: aString [ - | interval | - interval := super newIntervalFor: aString. - self addAnnotationTo: interval. - ^ interval -] - -{ #category : #accessing } -SmaCCAnnotatedString >> node [ - ^ node -] - -{ #category : #accessing } -SmaCCAnnotatedString >> node: aSmaCCParseNode [ - node := aSmaCCParseNode -] - -{ #category : #public } -SmaCCAnnotatedString >> removeInterval: startInterval [ - | result | - result := super removeInterval: startInterval. - self addAnnotationTo: result. - ^ result -] - -{ #category : #accessing } -SmaCCAnnotatedString >> rule [ - ^ rule -] - -{ #category : #accessing } -SmaCCAnnotatedString >> rule: aSmaCCRewrite [ - rule := aSmaCCRewrite -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCAnnotatedStringInterval.class.st b/src/SmaCC_Rewrite_Engine/SmaCCAnnotatedStringInterval.class.st deleted file mode 100644 index 142823945..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCAnnotatedStringInterval.class.st +++ /dev/null @@ -1,46 +0,0 @@ -Class { - #name : #SmaCCAnnotatedStringInterval, - #superclass : #SmaCCStringInterval, - #instVars : [ - 'annotations' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #public } -SmaCCAnnotatedStringInterval >> addAllAnnotations: aCollection [ - self annotations addAll: aCollection -] - -{ #category : #public } -SmaCCAnnotatedStringInterval >> addAnnotation: aSmaCCRewriteAnnotation [ - | collection | - collection := self annotations. - (collection notEmpty - and: [ collection last = aSmaCCRewriteAnnotation ]) - ifTrue: [ ^ self ]. - collection add: aSmaCCRewriteAnnotation -] - -{ #category : #public } -SmaCCAnnotatedStringInterval >> annotations [ - ^ annotations ifNil: [ annotations := OrderedCollection new: 2 ] -] - -{ #category : #public } -SmaCCAnnotatedStringInterval >> annotations: aSequenceableCollection [ - annotations := aSequenceableCollection -] - -{ #category : #testing } -SmaCCAnnotatedStringInterval >> canBeMergedWith: nextSmaCCStringInterval [ - "We want to keep the annotations, so we don't allow merging" - - ^ false -] - -{ #category : #copying } -SmaCCAnnotatedStringInterval >> postCopy [ - super postCopy. - annotations := annotations copy -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCCodeReplaceExpression.class.st b/src/SmaCC_Rewrite_Engine/SmaCCCodeReplaceExpression.class.st deleted file mode 100644 index 2510ad26a..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCCodeReplaceExpression.class.st +++ /dev/null @@ -1,54 +0,0 @@ -Class { - #name : #SmaCCCodeReplaceExpression, - #superclass : #SmaCCReplaceExpression, - #instVars : [ - 'code' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #generated } -SmaCCCodeReplaceExpression >> acceptVisitor: aReplaceVisitor [ - ^ aReplaceVisitor visitCodeReplace: self -] - -{ #category : #generated } -SmaCCCodeReplaceExpression >> code [ - ^ code -] - -{ #category : #generated } -SmaCCCodeReplaceExpression >> code: aSmaCCToken [ - code := aSmaCCToken -] - -{ #category : #evaluating } -SmaCCCodeReplaceExpression >> evaluateInContext: aSmaCCRewriteMatchContext [ - | value | - value := self method - valueWithReceiver: aSmaCCRewriteMatchContext - arguments: #(). - ^ (value isString or: [ value isKindOf: SmaCCString ]) - ifTrue: [ value ] - ifFalse: - [ aSmaCCRewriteMatchContext - sourceFrom: aSmaCCRewriteMatchContext match startPosition - to: aSmaCCRewriteMatchContext match stopPosition ] -] - -{ #category : #evaluating } -SmaCCCodeReplaceExpression >> method [ - ^ self - attributeNamed: #method - ifAbsentPut: [ | tree | - tree := RBParser parseMethod: 'code ' , code value. - tree body statements isEmpty - ifTrue: [ tree := RBParser parseMethod: 'code ^''''' ]. - tree body addReturn. - SmaCCRewriteMatchContext compiledMethodFor: tree formattedCode ] -] - -{ #category : #generated } -SmaCCCodeReplaceExpression >> tokenVariables [ - ^ #(#code) -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCCompositeReplaceExpression.class.st b/src/SmaCC_Rewrite_Engine/SmaCCCompositeReplaceExpression.class.st deleted file mode 100644 index e896b2651..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCCompositeReplaceExpression.class.st +++ /dev/null @@ -1,46 +0,0 @@ -Class { - #name : #SmaCCCompositeReplaceExpression, - #superclass : #SmaCCReplaceExpression, - #instVars : [ - 'expressions' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #generated } -SmaCCCompositeReplaceExpression >> acceptVisitor: aReplaceVisitor [ - ^ aReplaceVisitor visitCompositeReplace: self -] - -{ #category : #generated } -SmaCCCompositeReplaceExpression >> compositeNodeVariables [ - ^ #(#expressions) -] - -{ #category : #evaluating } -SmaCCCompositeReplaceExpression >> evaluateInContext: aSmaCCRewriteMatchContext [ - | result | - result := aSmaCCRewriteMatchContext smaccStringClass new. - self expressions - reverseDo: - [ :each | result addPrefix: (each evaluateInContext: aSmaCCRewriteMatchContext) ]. - ^ result -] - -{ #category : #generated } -SmaCCCompositeReplaceExpression >> expressions [ - ^ expressions -] - -{ #category : #generated } -SmaCCCompositeReplaceExpression >> expressions: anOrderedCollection [ - self setParents: self expressions to: nil. - expressions := anOrderedCollection. - self setParents: self expressions to: self -] - -{ #category : #'generated-initialize-release' } -SmaCCCompositeReplaceExpression >> initialize [ - super initialize. - expressions := OrderedCollection new: 2. -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCNodeReplaceExpression.class.st b/src/SmaCC_Rewrite_Engine/SmaCCNodeReplaceExpression.class.st deleted file mode 100644 index 1beb968d2..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCNodeReplaceExpression.class.st +++ /dev/null @@ -1,158 +0,0 @@ -Class { - #name : #SmaCCNodeReplaceExpression, - #superclass : #SmaCCReplaceExpression, - #instVars : [ - 'beforeWhitespace', - 'beforePrefix', - 'prefix', - 'name', - 'postfix', - 'afterPostfix', - 'afterWhitespace' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #generated } -SmaCCNodeReplaceExpression >> acceptVisitor: aReplaceVisitor [ - ^ aReplaceVisitor visitNodeReplace: self -] - -{ #category : #private } -SmaCCNodeReplaceExpression >> addPostfixTo: aSmaCCString inContext: aSmaCCRewriteMatchContext [ - | node position string | - node := aSmaCCRewriteMatchContext nodeFor: name value. - (aSmaCCRewriteMatchContext isAtEndOfParent: node) - ifFalse: - [ position := aSmaCCRewriteMatchContext originalStopPosition: node. - string := nil. - afterPostfix notNil - ifTrue: - [ (aSmaCCRewriteMatchContext - charactersAtAndAfter: (aSmaCCRewriteMatchContext nextIndex: position) - matchesToken: afterPostfix) - ifTrue: - [ afterPostfix value size - timesRepeat: [ position := aSmaCCRewriteMatchContext nextIndex: position ] ]. - string := afterPostfix value ]. - afterWhitespace notNil - ifTrue: - [ aSmaCCString - addPrefix: (aSmaCCRewriteMatchContext whitespaceAfter: position) ]. - string notNil - ifTrue: [ aSmaCCString addPrefix: string ] ]. - postfix notNil - ifTrue: [ aSmaCCString addPrefix: postfix value ] -] - -{ #category : #private } -SmaCCNodeReplaceExpression >> addPrefixTo: aSmaCCString inContext: aSmaCCRewriteMatchContext [ - | node startPosition | - node := aSmaCCRewriteMatchContext nodeFor: name value. - startPosition := aSmaCCRewriteMatchContext - originalStartPosition: node. - prefix notNil - ifTrue: [ aSmaCCString addPrefix: prefix value ]. - (aSmaCCRewriteMatchContext isAtStartOfParent: node) - ifTrue: [ ^ self ]. - beforePrefix notNil - ifTrue: - [ (aSmaCCRewriteMatchContext - charactersAtAndBefore: (aSmaCCRewriteMatchContext previousIndex: startPosition) - matchesToken: beforePrefix) - ifTrue: - [ beforePrefix value size - timesRepeat: - [ startPosition := aSmaCCRewriteMatchContext - previousIndex: startPosition ] ]. - aSmaCCString addPrefix: beforePrefix value ]. - beforeWhitespace notNil - ifTrue: - [ aSmaCCString - addPrefix: (aSmaCCRewriteMatchContext whitespaceBefore: startPosition) ] -] - -{ #category : #generated } -SmaCCNodeReplaceExpression >> afterPostfix [ - ^ afterPostfix -] - -{ #category : #generated } -SmaCCNodeReplaceExpression >> afterPostfix: aSmaCCToken [ - afterPostfix := aSmaCCToken -] - -{ #category : #generated } -SmaCCNodeReplaceExpression >> afterWhitespace [ - ^ afterWhitespace -] - -{ #category : #generated } -SmaCCNodeReplaceExpression >> afterWhitespace: aSmaCCToken [ - afterWhitespace := aSmaCCToken -] - -{ #category : #generated } -SmaCCNodeReplaceExpression >> beforePrefix [ - ^ beforePrefix -] - -{ #category : #generated } -SmaCCNodeReplaceExpression >> beforePrefix: aSmaCCToken [ - beforePrefix := aSmaCCToken -] - -{ #category : #generated } -SmaCCNodeReplaceExpression >> beforeWhitespace [ - ^ beforeWhitespace -] - -{ #category : #generated } -SmaCCNodeReplaceExpression >> beforeWhitespace: aSmaCCToken [ - beforeWhitespace := aSmaCCToken -] - -{ #category : #evaluating } -SmaCCNodeReplaceExpression >> evaluateInContext: aSmaCCRewriteMatchContext [ - | result | - result := aSmaCCRewriteMatchContext smaccStringClass new. - self addPostfixTo: result inContext: aSmaCCRewriteMatchContext. - result addPrefix: (aSmaCCRewriteMatchContext stringFor: name value). - self addPrefixTo: result inContext: aSmaCCRewriteMatchContext. - ^ result -] - -{ #category : #generated } -SmaCCNodeReplaceExpression >> name [ - ^ name -] - -{ #category : #generated } -SmaCCNodeReplaceExpression >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -SmaCCNodeReplaceExpression >> postfix [ - ^ postfix -] - -{ #category : #generated } -SmaCCNodeReplaceExpression >> postfix: aSmaCCToken [ - postfix := aSmaCCToken -] - -{ #category : #generated } -SmaCCNodeReplaceExpression >> prefix [ - ^ prefix -] - -{ #category : #generated } -SmaCCNodeReplaceExpression >> prefix: aSmaCCToken [ - prefix := aSmaCCToken -] - -{ #category : #generated } -SmaCCNodeReplaceExpression >> tokenVariables [ - ^ #(#beforeWhitespace #beforePrefix #prefix #name #postfix #afterPostfix #afterWhitespace) -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCReplaceExpression.class.st b/src/SmaCC_Rewrite_Engine/SmaCCReplaceExpression.class.st deleted file mode 100644 index 96b5cbee5..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCReplaceExpression.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #SmaCCReplaceExpression, - #superclass : #SmaCCParseNode, - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #generated } -SmaCCReplaceExpression >> acceptVisitor: aReplaceVisitor [ - ^ aReplaceVisitor visitReplace: self -] - -{ #category : #evaluating } -SmaCCReplaceExpression >> evaluateInContext: aSmaCCRewriteMatchContext [ - self subclassResponsibility -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCReplaceExpressionParser.class.st b/src/SmaCC_Rewrite_Engine/SmaCCReplaceExpressionParser.class.st deleted file mode 100644 index 2fd8e4cd9..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCReplaceExpressionParser.class.st +++ /dev/null @@ -1,278 +0,0 @@ -Class { - #name : #SmaCCReplaceExpressionParser, - #superclass : #SmaCCParser, - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #'generated-accessing' } -SmaCCReplaceExpressionParser class >> cacheId [ - ^'2019-04-15T17:15:43.228108-05:00' -] - -{ #category : #generated } -SmaCCReplaceExpressionParser class >> definitionComment [ -"%excludes expression code ; -%id ; - -expression - : ( | _) ( | _ | ) * - ; -expression - : \\ - ; -expression - : [\~\!\@\#\$\%\^\&\*\(\)\-\+\=\|\{\[\]\}\<\,\>\.\?\/\;\:\'\""]+ - ; -expression - : _ - ; - - : [^`]+ - ; -default expression - : ` - ; -default code - : `` - ; - -%prefix SmaCC; -%suffix Expression; -%root Replace; - -Expression - : RewriteExpressions {{CompositeReplace}} - ; -RewriteExpressions - : - | RewriteExpressions RewriteExpression 'expression' - ; -RewriteExpression - : StringReplace - | NodeReplace - | CodeReplace - ; -StringReplace - : 'string' {{StringReplace}} - ; -NodeReplace - : SwitchStateToExpression PrefixModifiers 'name' PostfixModifiers SwitchStateToDefault {{NodeReplace}} - ; -SwitchStateToDefault - : {self scope: #default. nil} - ; -SwitchStateToExpression - : {self scope: #expression. nil} - ; -CodeReplace - : SwitchStateToCode 'code' SwitchStateToDefault {{CodeReplace}} - ; -SwitchStateToCode - : {self scope: #code. nil} - ; -PrefixModifiers - : OptionalWhitespace 'beforeWhitespace' Characters 'beforePrefix' OptionalCharacters 'prefix' - | OptionalWhitespace 'beforeWhitespace' OptionalCharacters 'prefix' - ; -PostfixModifiers - : OptionalCharacters 'postfix' Characters 'afterPostfix' OptionalWhitespace 'afterWhitespace' - | OptionalCharacters 'postfix' OptionalWhitespace 'afterWhitespace' - ; -OptionalWhitespace - : - | - ; -OptionalCharacters - : - | Characters - ; -Characters - : 'characters' - ;" -] - -{ #category : #generated } -SmaCCReplaceExpressionParser class >> reduceTable [ -^#( - #(10 0 #reduceActionForRewriteExpressions1: 525313 false ) - #(15 0 #reduceActionForSwitchStateToExpression1: 943105 false ) - #(17 0 #reduceActionForSwitchStateToCode1: 1143809 false ) - #(9 1 #reduceActionForExpression1: 466945 false ) - #(12 1 #reduceActionForStringReplace1: 675841 false ) - #(10 2 #reduceActionForRewriteExpressions2: 525314 false ) - #(11 1 #liftFirstValue: 606209 false ) - #(11 1 #liftFirstValue: 606210 false ) - #(11 1 #liftFirstValue: 606211 false ) - #(20 0 #nil 1631233 false ) - #(20 1 #liftFirstValue: 1631234 false ) - #(21 0 #nil 1671169 false ) - #(14 0 #reduceActionForSwitchStateToDefault1: 886785 false ) - #(22 1 #liftFirstValue: 1712129 false ) - #(18 2 #reduceActionForPrefixModifiers2: 1193986 false ) - #(21 1 #liftFirstValue: 1671170 false ) - #(16 5 #reduceActionForCodeReplace1: 1005569 false ) - #(19 2 #reduceActionForPrefixModifiers2: 1412098 false ) - #(18 4 #reduceActionForPrefixModifiers1: 1193985 false ) - #(13 7 #reduceActionForNodeReplace1: 733185 false ) - #(19 4 #reduceActionForPostfixModifiers1: 1412097 false ) - ). -] - -{ #category : #'generated-accessing' } -SmaCCReplaceExpressionParser class >> scannerClass [ - ^SmaCCReplaceExpressionScanner -] - -{ #category : #generated } -SmaCCReplaceExpressionParser class >> startingStateForExpression [ - ^ 1 -] - -{ #category : #generated } -SmaCCReplaceExpressionParser class >> symbolNames [ - ^ #('' '' '' '' '' '' '' 'B e g i n' 'Expression' 'RewriteExpressions' 'RewriteExpression' 'StringReplace' 'NodeReplace' 'SwitchStateToDefault' 'SwitchStateToExpression' 'CodeReplace' 'SwitchStateToCode' 'PrefixModifiers' 'PostfixModifiers' 'OptionalWhitespace' 'OptionalCharacters' 'Characters' '' 'E O F' 'error') -] - -{ #category : #generated } -SmaCCReplaceExpressionParser class >> symbolTypes [ - ^ #(#SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCCompositeReplaceExpression #SmaCCCompositeReplaceExpression #OrderedCollection #SmaCCReplaceExpression #SmaCCStringReplaceExpression #SmaCCNodeReplaceExpression nil nil #SmaCCCodeReplaceExpression nil #OrderedCollection #OrderedCollection #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCErrorNode) -] - -{ #category : #generated } -SmaCCReplaceExpressionParser class >> transitionTable [ -^#( -#[1 0 6 0 5 0 6 0 6 0 6 0 7 0 9 0 9 0 13 0 10 0 6 0 24] -#[0 0 0 0 24] -#[1 0 17 0 5 0 10 0 6 0 14 0 7 0 21 0 11 0 21 0 12 0 21 0 13 0 33 0 15 0 21 0 16 0 41 0 17 0 18 0 24] -#[0 0 22 0 5 0 6 0 7 0 24] -#[0 0 26 0 5 0 6 0 7 0 24] -#[0 0 30 0 5 0 6 0 7 0 24] -#[0 0 34 0 5 0 6 0 7 0 24] -#[0 0 45 0 6] -#[0 0 38 0 5 0 6 0 7 0 24] -#[0 0 49 0 7] -#[1 0 42 0 1 0 61 0 2 0 42 0 3 0 57 0 18 0 61 0 20] -#[0 0 65 0 23] -#[0 0 46 0 1 0 3 0 6] -#[0 0 69 0 1] -#[1 0 50 0 1 0 81 0 3 0 77 0 21 0 81 0 22] -#[1 0 54 0 7 0 85 0 14] -#[1 0 50 0 2 0 93 0 3 0 50 0 4 0 50 0 6 0 89 0 19 0 93 0 21 0 93 0 22] -#[0 0 58 0 1 0 2 0 4 0 6] -#[0 0 62 0 1] -#[1 0 66 0 1 0 101 0 4] -#[0 0 105 0 7] -#[1 0 54 0 6 0 109 0 14] -#[1 0 117 0 2 0 113 0 4 0 42 0 6 0 117 0 20] -#[0 0 66 0 1 0 2 0 4 0 6] -#[1 0 50 0 1 0 121 0 3 0 121 0 21 0 121 0 22] -#[0 0 70 0 5 0 6 0 7 0 24] -#[0 0 125 0 6] -#[0 0 129 0 3 0 22] -#[0 0 74 0 6] -#[0 0 78 0 1] -#[0 0 82 0 5 0 6 0 7 0 24] -#[1 0 133 0 2 0 42 0 6 0 133 0 20] -#[0 0 86 0 6] - ). -] - -{ #category : #'generated-reduction actions' } -SmaCCReplaceExpressionParser >> reduceActionForCodeReplace1: nodes [ - | result | - result := SmaCCCodeReplaceExpression new. - result code: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCReplaceExpressionParser >> reduceActionForExpression1: nodes [ - | result | - result := SmaCCCompositeReplaceExpression new. - result addNodes: (nodes at: 1) to: result expressions. - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCReplaceExpressionParser >> reduceActionForNodeReplace1: nodes [ - | result | - result := SmaCCNodeReplaceExpression new. - result beforeWhitespace: ((nodes at: 3) at: 1). - result beforePrefix: ((nodes at: 3) at: 2). - result prefix: ((nodes at: 3) at: 3). - result name: (nodes at: 4). - result postfix: ((nodes at: 5) at: 1). - result afterPostfix: ((nodes at: 5) at: 2). - result afterWhitespace: ((nodes at: 5) at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCReplaceExpressionParser >> reduceActionForPostfixModifiers1: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 3). - result at: 3 put: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCReplaceExpressionParser >> reduceActionForPrefixModifiers1: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCReplaceExpressionParser >> reduceActionForPrefixModifiers2: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (nodes at: 1). - result at: 3 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCReplaceExpressionParser >> reduceActionForRewriteExpressions1: nodes [ - | result | - result := OrderedCollection new: 2. - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCReplaceExpressionParser >> reduceActionForRewriteExpressions2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: result. - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCReplaceExpressionParser >> reduceActionForStringReplace1: nodes [ - | result | - result := SmaCCStringReplaceExpression new. - result string: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCReplaceExpressionParser >> reduceActionForSwitchStateToCode1: nodes [ - self scope: #code. - ^ nil -] - -{ #category : #'generated-reduction actions' } -SmaCCReplaceExpressionParser >> reduceActionForSwitchStateToDefault1: nodes [ - self scope: #default. - ^ nil -] - -{ #category : #'generated-reduction actions' } -SmaCCReplaceExpressionParser >> reduceActionForSwitchStateToExpression1: nodes [ - self scope: #expression. - ^ nil -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCReplaceExpressionScanner.class.st b/src/SmaCC_Rewrite_Engine/SmaCCReplaceExpressionScanner.class.st deleted file mode 100644 index 320a8b60f..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCReplaceExpressionScanner.class.st +++ /dev/null @@ -1,114 +0,0 @@ -Class { - #name : #SmaCCReplaceExpressionScanner, - #superclass : #SmaCCScanner, - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #generated } -SmaCCReplaceExpressionScanner >> codeExpressionId [ - ^ 23 -] - -{ #category : #generated } -SmaCCReplaceExpressionScanner >> emptySymbolTokenId [ - ^ 24 -] - -{ #category : #generated } -SmaCCReplaceExpressionScanner >> errorTokenId [ - ^ 25 -] - -{ #category : #testing } -SmaCCReplaceExpressionScanner >> isValidCode [ - RBParser - parseExpression: outputStream contents - onError: [ :s :p | ^ false ]. - ^ true -] - -{ #category : #accessing } -SmaCCReplaceExpressionScanner >> next [ - scope = #code - ifTrue: - [ self resetScanner. - returnMatchBlock := [ :match | ^ match ]. - ^ self scanCode ]. - ^ super next -] - -{ #category : #private } -SmaCCReplaceExpressionScanner >> scanCode [ - outputStream reset. - [ outputStream nextPutAll: (stream upTo: $`). - stream peek == $` - ifTrue: [ self isValidCode - ifTrue: [ stream position: stream position - 1. - scope := #default. - ^ self recordAndReportMatch: (Array with: self codeExpressionId) ] ]. - stream atEnd - ifTrue: [ ^ self reportLastMatch ]. - outputStream nextPut: $` ] repeat -] - -{ #category : #generated } -SmaCCReplaceExpressionScanner >> scanForToken [ - scope == #default - ifTrue: [ self step. - currentCharacter == $` - ifTrue: [ self recordMatch: #(6). - self step. - currentCharacter == $` - ifTrue: [ ^ self recordAndReportMatch: #(7) ]. - ^ self reportLastMatch ]. - true - ifTrue: [ [ self recordMatch: #(5). - self step. - currentCharacter ~~ $` ] whileTrue ]. - ^ self reportLastMatch ]. - scope == #expression - ifTrue: - [ ^ self scanForTokenX1 ]. - scope == #code - ifTrue: [ (self scanForString: '``') - ifTrue: [ ^ self recordAndReportMatch: #(7) ] ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCReplaceExpressionScanner >> scanForTokenX1 [ - self step. - currentCharacter == $\ - ifTrue: [ ^ self recordAndReportMatch: #(2) ]. - currentCharacter == $_ - ifTrue: [ self recordMatch: #(1 4). - self step. - (currentCharacter isAlphaNumeric or: [ currentCharacter == $_ ]) - ifTrue: [ [ self recordMatch: #(1). - self step. - currentCharacter isAlphaNumeric or: [ currentCharacter == $_ ] ] - whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter == $` - ifTrue: [ ^ self recordAndReportMatch: #(6) ]. - ((currentCharacter between: $! and: $/) - or: [ (currentCharacter between: $: and: $@) - or: [ currentCharacter == $[ - or: [ (currentCharacter between: $] and: $^) - or: [ currentCharacter between: ${ and: $~ ] ] ] ]) - ifTrue: [ [ self recordMatch: #(3). - self step. - (currentCharacter between: $! and: $/) - or: [ (currentCharacter between: $: and: $@) - or: [ currentCharacter == $[ - or: [ (currentCharacter between: $] and: $^) - or: [ currentCharacter between: ${ and: $~ ] ] ] ] ] - whileTrue. - ^ self reportLastMatch ]. - currentCharacter isLetter - ifTrue: [ [ self recordMatch: #(1). - self step. - currentCharacter isAlphaNumeric or: [ currentCharacter == $_ ] ] - whileTrue ]. - ^ self reportLastMatch -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCReplaceExpressionVisitor.class.st b/src/SmaCC_Rewrite_Engine/SmaCCReplaceExpressionVisitor.class.st deleted file mode 100644 index 155a92c40..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCReplaceExpressionVisitor.class.st +++ /dev/null @@ -1,30 +0,0 @@ -Class { - #name : #SmaCCReplaceExpressionVisitor, - #superclass : #SmaCCParseNodeVisitor, - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #generated } -SmaCCReplaceExpressionVisitor >> visitCodeReplace: aCodeReplace [ - ^ self visitReplace: aCodeReplace -] - -{ #category : #generated } -SmaCCReplaceExpressionVisitor >> visitCompositeReplace: aCompositeReplace [ - ^ self visitReplace: aCompositeReplace -] - -{ #category : #generated } -SmaCCReplaceExpressionVisitor >> visitNodeReplace: aNodeReplace [ - ^ self visitReplace: aNodeReplace -] - -{ #category : #generated } -SmaCCReplaceExpressionVisitor >> visitReplace: aReplace [ - ^ self visitSmaCCParseNode: aReplace -] - -{ #category : #generated } -SmaCCReplaceExpressionVisitor >> visitStringReplace: aStringReplace [ - ^ self visitReplace: aStringReplace -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCRewrite.class.st b/src/SmaCC_Rewrite_Engine/SmaCCRewrite.class.st deleted file mode 100644 index 7fd32db41..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCRewrite.class.st +++ /dev/null @@ -1,140 +0,0 @@ -Class { - #name : #SmaCCRewrite, - #superclass : #SmaCCAbstractRewrite, - #instVars : [ - 'comment', - 'match', - 'transformation', - 'engine' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #'instance creation' } -SmaCCRewrite class >> comment: aString match: aSmaCCRewriteMatch transformation: aSmaCCRewriteTransformation [ - ^ self new - comment: aString; - match: aSmaCCRewriteMatch; - transformation: aSmaCCRewriteTransformation; - yourself -] - -{ #category : #'instance creation' } -SmaCCRewrite class >> newInstance [ - ^ self - comment: '' - match: (SmaCCRewriteTypeMatch on: SmaCCParseNode) - transformation: (SmaCCRewriteCodeTransformation on: 'self continue') -] - -{ #category : #accessing } -SmaCCRewrite >> comment [ - ^ comment ifNil: [ '' ] -] - -{ #category : #accessing } -SmaCCRewrite >> comment: aString [ - comment := aString. - self changed: #comment -] - -{ #category : #printing } -SmaCCRewrite >> displayOn: aStream [ - self comment notEmpty - ifTrue: [ aStream nextPutAll: self comment ] - ifFalse: [ match displayOn: aStream ] -] - -{ #category : #'initialize-release' } -SmaCCRewrite >> engine: aSmaCCRewriteEngine [ - engine := aSmaCCRewriteEngine -] - -{ #category : #accessing } -SmaCCRewrite >> listForClass: aClass into: aSmaCCRewriteLink [ - | next | - (match canMatch: aClass) - ifFalse: [ ^ aSmaCCRewriteLink ]. - next := SmaCCRewriteLink new. - next rewrite: self. - aSmaCCRewriteLink next: next. - ^ next -] - -{ #category : #saving } -SmaCCRewrite >> localSaveOn: aStream [ - self comment notEmpty - ifTrue: - [ aStream - nextPut: $"; - nextPutAll: (self comment copyReplaceAll: '"' with: '""'); - nextPut: $"; - cr ]. - match saveOn: aStream. - aStream - cr; - nextPutAll: '->'; - cr. - transformation saveOn: aStream -] - -{ #category : #accessing } -SmaCCRewrite >> match [ - ^ match -] - -{ #category : #accessing } -SmaCCRewrite >> match: aSmaCCRewriteMatch [ - match := aSmaCCRewriteMatch. - match rewrite: self. - self changed: #match -] - -{ #category : #testing } -SmaCCRewrite >> matches: aString [ - ^ (super matches: aString) - or: [ (Smalltalk at: aString asSymbol ifAbsent: [ nil ]) - ifNil: [ false ] - ifNotNil: [ :class | (class isKindOf: SmaCCParseNode class) and: [ match canMatch: class ] ] ] -] - -{ #category : #rewriting } -SmaCCRewrite >> performOn: aSmaCCNode continuation: aBlock [ - | matchedContext dictionary result previousNode previousRule | - previousNode := engine source node. - previousRule := engine source rule. - engine source - node: aSmaCCNode; - rule: self. - matchedContext := engine contextClass new. - matchedContext forNode: aSmaCCNode rewriter: engine continuation: aBlock. - dictionary := match match: matchedContext. - result := dictionary notNil. - result - ifTrue: [ matchedContext context: dictionary. - result := (transformation transformUsingContext: matchedContext) ~~ SmaCCRewriteMatchContext continue ]. - engine source - node: previousNode; - rule: previousRule. - ^ result -] - -{ #category : #copying } -SmaCCRewrite >> postCopy [ - super postCopy. - self match: self match copy. - self transformation: self transformation copy. - engine := nil -] - -{ #category : #accessing } -SmaCCRewrite >> transformation [ - ^ transformation -] - -{ #category : #accessing } -SmaCCRewrite >> transformation: aSmaCCRewriteTransformation [ - transformation := aSmaCCRewriteTransformation. - transformation rewrite: self. - self changed: #transformation -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCRewriteAnnotation.class.st b/src/SmaCC_Rewrite_Engine/SmaCCRewriteAnnotation.class.st deleted file mode 100644 index 224dd82de..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCRewriteAnnotation.class.st +++ /dev/null @@ -1,76 +0,0 @@ -Class { - #name : #SmaCCRewriteAnnotation, - #superclass : #Object, - #instVars : [ - 'nodeClass', - 'nodeInterval', - 'rewrite' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #'instance creation' } -SmaCCRewriteAnnotation class >> onNode: aSmaCCParseNode rewrite: aSmaCCRewrite [ - ^ self new - nodeClass: aSmaCCParseNode class; - nodeInterval: aSmaCCParseNode sourceInterval; - rewrite: aSmaCCRewrite; - yourself -] - -{ #category : #comparing } -SmaCCRewriteAnnotation >> = anObject [ - ^ self class = anObject class - and: - [ self nodeClass = anObject nodeClass - and: - [ self nodeInterval = anObject nodeInterval - and: [ self rewrite = anObject rewrite ] ] ] -] - -{ #category : #comparing } -SmaCCRewriteAnnotation >> hash [ - ^ (nodeClass hash bitXor: nodeInterval hash) bitXor: rewrite hash -] - -{ #category : #accessing } -SmaCCRewriteAnnotation >> nodeClass [ - ^ nodeClass -] - -{ #category : #accessing } -SmaCCRewriteAnnotation >> nodeClass: aBehavior [ - nodeClass := aBehavior -] - -{ #category : #accessing } -SmaCCRewriteAnnotation >> nodeInterval [ - ^ nodeInterval -] - -{ #category : #accessing } -SmaCCRewriteAnnotation >> nodeInterval: anInterval [ - nodeInterval := anInterval -] - -{ #category : #printing } -SmaCCRewriteAnnotation >> printOn: aStream [ - super printOn: aStream. - aStream - nextPut: $(; - print: nodeClass; - print: nodeInterval; - nextPutAll: ', '; - nextPutAll: rewrite displayString; - nextPut: $) -] - -{ #category : #accessing } -SmaCCRewriteAnnotation >> rewrite [ - ^ rewrite -] - -{ #category : #accessing } -SmaCCRewriteAnnotation >> rewrite: aSmaCCRewrite [ - rewrite := aSmaCCRewrite -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCRewriteCodeTransformation.class.st b/src/SmaCC_Rewrite_Engine/SmaCCRewriteCodeTransformation.class.st deleted file mode 100644 index 82e0a2a36..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCRewriteCodeTransformation.class.st +++ /dev/null @@ -1,69 +0,0 @@ -Class { - #name : #SmaCCRewriteCodeTransformation, - #superclass : #SmaCCRewriteTransformation, - #instVars : [ - 'code', - 'method' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #'instance creation' } -SmaCCRewriteCodeTransformation class >> on: aString [ - ^ self new - code: aString; - yourself -] - -{ #category : #accessing } -SmaCCRewriteCodeTransformation >> code [ - ^ code -] - -{ #category : #'initialize-release' } -SmaCCRewriteCodeTransformation >> code: aString [ - code := aString. - method := nil. - self modified -] - -{ #category : #'initialize-release' } -SmaCCRewriteCodeTransformation >> initialize [ - super initialize. - code := 'self continue' -] - -{ #category : #accessing } -SmaCCRewriteCodeTransformation >> method [ - method isNil - ifTrue: [ | tree rewriter | - tree := RBParser parseMethod: 'code ' , code. - tree body addReturn. - rewriter := RBParseTreeRewriter new. - rewriter replace: '^self continue' with: '^Continue'. - rewriter executeTree: tree. - method := SmaCCRewriteMatchContext compiledMethodFor: rewriter tree formattedCode ]. - ^ method -] - -{ #category : #saving } -SmaCCRewriteCodeTransformation >> saveOn: aStream [ - aStream - nextPut: $[; - nextPutAll: code; - nextPut: $] -] - -{ #category : #accessing } -SmaCCRewriteCodeTransformation >> string [ - ^ code -] - -{ #category : #transforming } -SmaCCRewriteCodeTransformation >> transformUsingContext: aSmaCCRewriteMatchContext [ - self class haltBlock - ifNotNil: [ :block | - (block value: rewrite value: aSmaCCRewriteMatchContext match) - ifTrue: [ ^ aSmaCCRewriteMatchContext debugMethod: self method message: rewrite displayString ] ]. - ^ self method valueWithReceiver: aSmaCCRewriteMatchContext arguments: #() -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCRewriteCompleteResult.class.st b/src/SmaCC_Rewrite_Engine/SmaCCRewriteCompleteResult.class.st deleted file mode 100644 index 464e2c086..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCRewriteCompleteResult.class.st +++ /dev/null @@ -1,56 +0,0 @@ -Class { - #name : #SmaCCRewriteCompleteResult, - #superclass : #SmaCCRewriteResult, - #instVars : [ - 'inputSource', - 'outputSource', - 'transformedString', - 'additionalFiles' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #accessing } -SmaCCRewriteCompleteResult >> addFile: aSmaCCString named: aString [ - self additionalFiles at: aString put: aSmaCCString -] - -{ #category : #accessing } -SmaCCRewriteCompleteResult >> additionalFiles [ - ^ additionalFiles ifNil: [ additionalFiles := Dictionary new ] -] - -{ #category : #accessing } -SmaCCRewriteCompleteResult >> inputSource [ - ^ inputSource -] - -{ #category : #accessing } -SmaCCRewriteCompleteResult >> inputSource: aString [ - inputSource := aString -] - -{ #category : #accessing } -SmaCCRewriteCompleteResult >> outputSource [ - ^ outputSource -] - -{ #category : #accessing } -SmaCCRewriteCompleteResult >> outputSource: aString [ - outputSource := aString -] - -{ #category : #accessing } -SmaCCRewriteCompleteResult >> smaccStringClass [ - ^ SmaCCAnnotatedString -] - -{ #category : #accessing } -SmaCCRewriteCompleteResult >> transformedString [ - ^ transformedString ifNil: [ super transformedString ] -] - -{ #category : #accessing } -SmaCCRewriteCompleteResult >> transformedString: aSmaCCAnnotatedString [ - transformedString := aSmaCCAnnotatedString -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCRewriteEngine.class.st b/src/SmaCC_Rewrite_Engine/SmaCCRewriteEngine.class.st deleted file mode 100644 index d1ac3b204..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCRewriteEngine.class.st +++ /dev/null @@ -1,259 +0,0 @@ -Class { - #name : #SmaCCRewriteEngine, - #superclass : #Object, - #instVars : [ - 'rewriteRule', - 'source', - 'newStarts', - 'newStops', - 'properties', - 'methods', - 'processedNodes', - 'outputDirectory', - 'outputFilename', - 'contextClass' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #'accessing-methods' } -SmaCCRewriteEngine >> addMethodNamed: aSymbol as: aBlock [ - methods at: aSymbol put: aBlock -] - -{ #category : #accessing } -SmaCCRewriteEngine >> addRewrites: aCollection [ - aCollection do: [ :each | self rewriteRule: each ] -] - -{ #category : #'accessing-properites' } -SmaCCRewriteEngine >> additionalFiles [ - ^ self propertyAt: #additionalFiles ifAbsentPut: [ Dictionary new ] -] - -{ #category : #accessing } -SmaCCRewriteEngine >> contextClass [ - contextClass isNil - ifTrue: [ contextClass := SmaCCRewriteMatchContext newAnonymousSubclass. - self rewriteRule updateClass: contextClass ]. - ^ contextClass -] - -{ #category : #accessing } -SmaCCRewriteEngine >> contextClass: aBehavior [ - contextClass := aBehavior -] - -{ #category : #private } -SmaCCRewriteEngine >> finished [ - newStarts := IdentityDictionary new. - newStops := IdentityDictionary new. - properties := Dictionary new. - processedNodes := IdentitySet new. - contextClass notNil - ifTrue: [ self rewriteRule clearLocalVariablesIn: contextClass ] -] - -{ #category : #accessing } -SmaCCRewriteEngine >> ignoreFile [ - ^ self propertyAt: #ignoreFile ifAbsent: [ false ] -] - -{ #category : #accessing } -SmaCCRewriteEngine >> ignoreFile: aBoolean [ - ^ self propertyAt: #ignoreFile put: aBoolean -] - -{ #category : #'initialize-release' } -SmaCCRewriteEngine >> initialize [ - super initialize. - newStarts := IdentityDictionary new. - newStops := IdentityDictionary new. - properties := Dictionary new. - methods := IdentityDictionary new. - processedNodes := IdentitySet new -] - -{ #category : #private } -SmaCCRewriteEngine >> markAsProcessed: aSmaCCNode [ - processedNodes add: aSmaCCNode -] - -{ #category : #'accessing-methods' } -SmaCCRewriteEngine >> methodNamed: aSymbol [ - ^ methods at: aSymbol ifAbsent: [ nil ] -] - -{ #category : #accessing } -SmaCCRewriteEngine >> outputDirectory [ - ^ outputDirectory -] - -{ #category : #accessing } -SmaCCRewriteEngine >> outputDirectory: aString [ - outputDirectory := aString -] - -{ #category : #accessing } -SmaCCRewriteEngine >> outputFilename [ - ^ outputFilename -] - -{ #category : #accessing } -SmaCCRewriteEngine >> outputFilename: aString [ - outputFilename := aString -] - -{ #category : #private } -SmaCCRewriteEngine >> processChildrenOf: aSmaCCNode [ - ^ aSmaCCNode nodesDo: [ :each | self rewriteNode: each ] -] - -{ #category : #accessing } -SmaCCRewriteEngine >> properties [ - ^ properties -] - -{ #category : #accessing } -SmaCCRewriteEngine >> properties: aDictionary [ - properties := aDictionary -] - -{ #category : #'accessing-properites' } -SmaCCRewriteEngine >> propertyAt: aString [ - ^ properties at: aString ifAbsent: [ nil ] -] - -{ #category : #'accessing-properites' } -SmaCCRewriteEngine >> propertyAt: aString ifAbsent: aBlock [ - ^ properties at: aString ifAbsent: aBlock -] - -{ #category : #'accessing-properites' } -SmaCCRewriteEngine >> propertyAt: aString ifAbsentPut: aBlock [ - ^ properties at: aString ifAbsentPut: aBlock -] - -{ #category : #'accessing-properites' } -SmaCCRewriteEngine >> propertyAt: aString put: anObject [ - ^ properties at: aString put: anObject -] - -{ #category : #'accessing-properites' } -SmaCCRewriteEngine >> removeProperty: aString [ - ^ properties removeKey: aString ifAbsent: [ nil ] -] - -{ #category : #private } -SmaCCRewriteEngine >> rewrite: aSmaCCParseNode [ - self rewriteNode: aSmaCCParseNode. - ^ source - copyFrom: (self startPositionForNode: aSmaCCParseNode) - to: (self stopPositionForNode: aSmaCCParseNode) -] - -{ #category : #private } -SmaCCRewriteEngine >> rewriteNode: aSmaCCNode [ - (aSmaCCNode isNil or: [ processedNodes includes: aSmaCCNode ]) - ifTrue: [ ^ self ]. - self markAsProcessed: aSmaCCNode. - rewriteRule - performOn: aSmaCCNode - continuation: [ self processChildrenOf: aSmaCCNode ] -] - -{ #category : #accessing } -SmaCCRewriteEngine >> rewriteRule [ - ^ rewriteRule -] - -{ #category : #accessing } -SmaCCRewriteEngine >> rewriteRule: aSmaCCAbstractRewrite [ - rewriteRule := aSmaCCAbstractRewrite. - aSmaCCAbstractRewrite engine: self -] - -{ #category : #rewriting } -SmaCCRewriteEngine >> rewriteTree: aSmaCCParseNode [ - source isNil - ifTrue: [ source := aSmaCCParseNode completeSource copy ]. - ^ (self rewrite: aSmaCCParseNode) asString -] - -{ #category : #private } -SmaCCRewriteEngine >> setPosition: anIndex in: aSequenceableCollection [ - | i lastPosition | - lastPosition := aSequenceableCollection last. - i := aSequenceableCollection size. - [ i > 0 and: [ lastPosition = (aSequenceableCollection at: i) ] ] - whileTrue: [ aSequenceableCollection at: i put: anIndex. - i := i - 1 ] -] - -{ #category : #accessing } -SmaCCRewriteEngine >> setStartPositionForNode: aSmaCCParseNode to: anIndex [ - | position current | - current := aSmaCCParseNode. - position := self startPositionForNode: aSmaCCParseNode. - [ newStarts at: current put: anIndex. - current := current parent. - current notNil - and: [ position = (self startPositionForNode: current) ] ] whileTrue -] - -{ #category : #accessing } -SmaCCRewriteEngine >> setStopPositionForNode: aSmaCCParseNode to: anIndex [ - | position current | - current := aSmaCCParseNode. - position := self stopPositionForNode: aSmaCCParseNode. - [ newStops at: current put: anIndex. - current := current parent. - current notNil - and: [ position = (self stopPositionForNode: current) ] ] whileTrue -] - -{ #category : #accessing } -SmaCCRewriteEngine >> source [ - ^ source -] - -{ #category : #accessing } -SmaCCRewriteEngine >> source: aSmaCCString [ - source := aSmaCCString -] - -{ #category : #accessing } -SmaCCRewriteEngine >> startPositionForNode: aSmaCCParseNode [ - ((aSmaCCParseNode isKindOf: SmaCCParseNode) - and: [ aSmaCCParseNode parent isNil ]) - ifTrue: [ ^ source startIndex ]. - ^ newStarts - at: aSmaCCParseNode - ifAbsent: [ aSmaCCParseNode startPosition ] -] - -{ #category : #accessing } -SmaCCRewriteEngine >> stopPositionForNode: aSmaCCParseNode [ - ((aSmaCCParseNode isKindOf: SmaCCParseNode) - and: [ aSmaCCParseNode parent isNil ]) - ifTrue: [ ^ source stopIndex ]. - ^ newStops - at: aSmaCCParseNode - ifAbsent: [ aSmaCCParseNode stopPosition ] -] - -{ #category : #accessing } -SmaCCRewriteEngine >> updateStartPositionFor: aSmaCCParseNode to: startPosition whenEqualTo: anIndex [ - anIndex = (self startPositionForNode: aSmaCCParseNode) - ifTrue: [ self - setStartPositionForNode: aSmaCCParseNode - to: startPosition ] -] - -{ #category : #accessing } -SmaCCRewriteEngine >> updateStopPositionFor: aSmaCCParseNode to: stopPosition whenEqualTo: anIndex [ - anIndex = (self stopPositionForNode: aSmaCCParseNode) - ifTrue: [ self - setStopPositionForNode: aSmaCCParseNode - to: stopPosition ] -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCRewriteFile.class.st b/src/SmaCC_Rewrite_Engine/SmaCCRewriteFile.class.st deleted file mode 100644 index 681cf639e..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCRewriteFile.class.st +++ /dev/null @@ -1,258 +0,0 @@ -Class { - #name : #SmaCCRewriteFile, - #superclass : #SmaCCAbstractRewrite, - #instVars : [ - 'filename', - 'rewrites', - 'parserClass', - 'isModified', - 'timestamp', - 'cachedLists' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #comparing } -SmaCCRewriteFile >> = anObject [ - self class = anObject class - ifFalse: [ ^ false ]. - ^ self filename = anObject filename -] - -{ #category : #accessing } -SmaCCRewriteFile >> addTransformation: aSmaCCAbstractRewrite [ - rewrites add: aSmaCCAbstractRewrite. - aSmaCCAbstractRewrite parent: self. - self changed: #rewrites -] - -{ #category : #accessing } -SmaCCRewriteFile >> addTransformation: aSmaCCAbstractRewrite before: anotherSmaCCAbstractRewrite [ - rewrites add: aSmaCCAbstractRewrite before: anotherSmaCCAbstractRewrite. - aSmaCCAbstractRewrite parent: self. - self changed: #rewrites -] - -{ #category : #rewriting } -SmaCCRewriteFile >> clearLocalVariablesIn: aClass [ - self rewrites do: [ :each | each clearLocalVariablesIn: aClass ] -] - -{ #category : #accessing } -SmaCCRewriteFile >> currentFileTimestamp [ - ^ filename isNil - ifTrue: [ nil ] - ifFalse: [ filename asFileReference exists - ifTrue: [ filename asFileReference modificationTime ] - ifFalse: [ nil ] ] -] - -{ #category : #accessing } -SmaCCRewriteFile >> directory [ - ^ filename asFileReference parent pathString - , FileSystem disk delimiter asString -] - -{ #category : #printing } -SmaCCRewriteFile >> displayOn: aStream [ - filename isNil - ifTrue: [ ^ aStream nextPutAll: '...new file...' ]. - aStream nextPutAll: filename asFileReference basename -] - -{ #category : #accessing } -SmaCCRewriteFile >> engine: aSmaCCRewriteEngine [ - rewrites do: [ :each | each engine: aSmaCCRewriteEngine ] -] - -{ #category : #accessing } -SmaCCRewriteFile >> filename [ - ^ filename -] - -{ #category : #accessing } -SmaCCRewriteFile >> filename: aString [ - filename := aString. - timestamp := self currentFileTimestamp. - self changed: #filename -] - -{ #category : #accessing } -SmaCCRewriteFile >> finishedLoading [ - isModified := false. - rewrites do: [ :each | each finishedLoading ] -] - -{ #category : #comparing } -SmaCCRewriteFile >> hash [ - ^ self class hash bitXor: self filename hash -] - -{ #category : #accessing } -SmaCCRewriteFile >> import: aString [ - | name rewriteFile | - name := self directory , aString. - name asFileReference exists - ifFalse: [ name := aString ]. - rewriteFile := SmaCCRewriteRuleFileParser parseFile: name. - self addTransformation: rewriteFile -] - -{ #category : #'initialize-release' } -SmaCCRewriteFile >> initialize [ - super initialize. - rewrites := OrderedCollection new. - isModified := false. - cachedLists := IdentityDictionary new -] - -{ #category : #testing } -SmaCCRewriteFile >> isComposite [ - ^ true -] - -{ #category : #testing } -SmaCCRewriteFile >> isModified [ - ^ isModified -] - -{ #category : #testing } -SmaCCRewriteFile >> isUpToDate [ - ^ timestamp = self currentFileTimestamp - and: [ rewrites allSatisfy: [ :each | each isUpToDate ] ] -] - -{ #category : #accessing } -SmaCCRewriteFile >> listForClass: aClass into: aSmaCCRewriteLink [ - ^ rewrites - inject: aSmaCCRewriteLink - into: [ :sum :each | each listForClass: aClass into: sum ] -] - -{ #category : #saving } -SmaCCRewriteFile >> localSaveOn: aStream [ - aStream - nextPutAll: 'Import: '''; - nextPutAll: self relativeFilename; - nextPut: $' -] - -{ #category : #accessing } -SmaCCRewriteFile >> modified [ - isModified := true. - cachedLists := IdentityDictionary new. - super modified. - self announcer announce: #display -] - -{ #category : #accessing } -SmaCCRewriteFile >> parserClass [ - ^ parserClass ifNil: [ super parserClass ] -] - -{ #category : #accessing } -SmaCCRewriteFile >> parserClass: aSmaCCParserClass [ - parserClass := aSmaCCParserClass. - self changed: #parserClass -] - -{ #category : #rewriting } -SmaCCRewriteFile >> performLink: aSmaCCRewriteLink on: aSmaCCNode continuation: aBlock [ - | link continuation | - link := aSmaCCRewriteLink. - continuation := [ self - performLink: link next - on: aSmaCCNode - continuation: aBlock ]. - [ link notNil ] - whileTrue: - [ (link rewrite performOn: aSmaCCNode continuation: continuation) - ifTrue: [ ^ true ]. - link := link next ]. - ^ aBlock value -] - -{ #category : #rewriting } -SmaCCRewriteFile >> performOn: aSmaCCNode continuation: aBlock [ - | link | - link := cachedLists - at: aSmaCCNode class - ifAbsentPut: - [ | first | - first := SmaCCRewriteLink new. - self listForClass: aSmaCCNode class into: first. - first next ]. - ^ self performLink: link on: aSmaCCNode continuation: aBlock -] - -{ #category : #copying } -SmaCCRewriteFile >> postCopy [ - | oldRewrites | - super postCopy. - oldRewrites := self rewrites. - rewrites := OrderedCollection new: oldRewrites size. - oldRewrites do: [ :each | self addTransformation: each copy ]. - cachedLists := IdentityDictionary new -] - -{ #category : #accessing } -SmaCCRewriteFile >> relativeFilename [ - | parentDirectory | - parent isNil - ifTrue: [ ^ filename ]. - parentDirectory := parent directory. - ^ (filename beginsWith: parentDirectory) - ifTrue: [ filename - copyFrom: parentDirectory size + 1 - to: filename size ] - ifFalse: [ filename ] -] - -{ #category : #accessing } -SmaCCRewriteFile >> removeTransformation: aSmaCCAbstractRewrite [ - rewrites remove: aSmaCCAbstractRewrite ifAbsent: [ ]. - aSmaCCAbstractRewrite parent: nil. - self changed: #rewrites -] - -{ #category : #accessing } -SmaCCRewriteFile >> rewrites [ - ^ rewrites -] - -{ #category : #accessing } -SmaCCRewriteFile >> rewrites: aCollection [ - rewrites := aCollection. - self changed: #rewrites -] - -{ #category : #saving } -SmaCCRewriteFile >> save [ - filename asFileReference - ensureDelete; - writeStreamDo: [ :stream | - parserClass notNil - ifTrue: [ stream - nextPutAll: 'Parser: '; - nextPutAll: parserClass name; - cr; - cr ]. - rewrites - do: [ :each | each saveOn: stream ] - separatedBy: [ stream - cr; - cr ]. - isModified := false ]. - timestamp := self currentFileTimestamp -] - -{ #category : #saving } -SmaCCRewriteFile >> saveOn: aStream [ - super saveOn: aStream. - self save -] - -{ #category : #rewriting } -SmaCCRewriteFile >> updateClass: aClass [ - self rewrites do: [ :each | each updateClass: aClass ] -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCRewriteLink.class.st b/src/SmaCC_Rewrite_Engine/SmaCCRewriteLink.class.st deleted file mode 100644 index eb6b7c253..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCRewriteLink.class.st +++ /dev/null @@ -1,38 +0,0 @@ -Class { - #name : #SmaCCRewriteLink, - #superclass : #Object, - #instVars : [ - 'rewrite', - 'next' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #accessing } -SmaCCRewriteLink >> next [ - ^ next -] - -{ #category : #accessing } -SmaCCRewriteLink >> next: anObject [ - next := anObject -] - -{ #category : #printing } -SmaCCRewriteLink >> printOn: aStream [ - aStream - nextPutAll: self class name; - nextPut: $(; - nextPutAll: rewrite displayString; - nextPut: $) -] - -{ #category : #accessing } -SmaCCRewriteLink >> rewrite [ - ^ rewrite -] - -{ #category : #accessing } -SmaCCRewriteLink >> rewrite: anObject [ - rewrite := anObject -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCRewriteMatch.class.st b/src/SmaCC_Rewrite_Engine/SmaCCRewriteMatch.class.st deleted file mode 100644 index cdcdfd4fb..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCRewriteMatch.class.st +++ /dev/null @@ -1,76 +0,0 @@ -Class { - #name : #SmaCCRewriteMatch, - #superclass : #Object, - #instVars : [ - 'rewrite' - ], - #classVars : [ - 'HaltBlock' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #accessing } -SmaCCRewriteMatch class >> haltBlock [ - ^ HaltBlock ifNil: [ [ :rewrite :node | false ] ] -] - -{ #category : #accessing } -SmaCCRewriteMatch class >> haltBlock: aBlock [ - HaltBlock := aBlock -] - -{ #category : #testing } -SmaCCRewriteMatch >> canMatch: aClass [ - ^ true -] - -{ #category : #printing } -SmaCCRewriteMatch >> displayOn: aStream [ - self printOn: aStream -] - -{ #category : #printing } -SmaCCRewriteMatch >> displayString [ - | stream | - stream := WriteStream on: String new. - self displayOn: stream. - ^ stream contents -] - -{ #category : #matching } -SmaCCRewriteMatch >> match: aSmaCCRewriteMatchContext [ - self subclassResponsibility -] - -{ #category : #public } -SmaCCRewriteMatch >> modified [ - rewrite notNil - ifTrue: [ rewrite modified ] -] - -{ #category : #accessing } -SmaCCRewriteMatch >> parserClass [ - ^ rewrite parserClass -] - -{ #category : #copying } -SmaCCRewriteMatch >> postCopy [ - super postCopy. - rewrite := nil -] - -{ #category : #accessing } -SmaCCRewriteMatch >> rewrite [ - ^ rewrite -] - -{ #category : #accessing } -SmaCCRewriteMatch >> rewrite: anObject [ - rewrite := anObject -] - -{ #category : #public } -SmaCCRewriteMatch >> saveOn: aStream [ - self subclassResponsibility -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCRewriteMatchContext.class.st b/src/SmaCC_Rewrite_Engine/SmaCCRewriteMatchContext.class.st deleted file mode 100644 index adda37b08..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCRewriteMatchContext.class.st +++ /dev/null @@ -1,846 +0,0 @@ -Class { - #name : #SmaCCRewriteMatchContext, - #superclass : #Object, - #instVars : [ - 'rewriteEngine', - 'match', - 'nodes', - 'strings', - 'continuation' - ], - #classVars : [ - 'Continue', - 'SilentProperties', - 'Uninitialized' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #compiling } -SmaCCRewriteMatchContext class >> compiledMethodFor: aString [ - ^ [ "Pharo" - (self compiler - source: aString; - requestor: nil; - failBlock: [ ^ nil ]; - compile) copyWithSource: aString ] - on: Error - do: [ :ex | - "Squeak version" - ex - return: - (self - compile: aString - notifying: nil - trailer: self defaultMethodTrailer - ifFail: [ ^ nil ]) method ] -] - -{ #category : #accessing } -SmaCCRewriteMatchContext class >> continue [ - ^ Continue -] - -{ #category : #'instance creation' } -SmaCCRewriteMatchContext class >> forNode: aSmaCCParseNode rewriter: aSmaCCRewriteEngine continuation: aBlock [ - ^ self new - forNode: aSmaCCParseNode - rewriter: aSmaCCRewriteEngine - continuation: aBlock; - yourself -] - -{ #category : #'class initialization' } -SmaCCRewriteMatchContext class >> initialize [ - Continue := Object new. - SilentProperties := false. - Uninitialized := Object new -] - -{ #category : #accessing } -SmaCCRewriteMatchContext class >> silentProperties [ - ^ SilentProperties -] - -{ #category : #accessing } -SmaCCRewriteMatchContext class >> silentProperties: anObject [ - SilentProperties := anObject -] - -{ #category : #accessing } -SmaCCRewriteMatchContext class >> uninitializedValue [ - ^ Uninitialized -] - -{ #category : #'accessing-methods' } -SmaCCRewriteMatchContext >> addGlobalProperty: aSymbol withValueFrom: aBlock [ - rewriteEngine rewriteRule propertyAt: aSymbol ifAbsentPut: aBlock. - self - addMethodNamed: aSymbol - as: [ rewriteEngine rewriteRule propertyAt: aSymbol ]. - self - addMethodNamed: (aSymbol , ':') asSymbol - as: [ :value | rewriteEngine rewriteRule propertyAt: aSymbol put: value ] -] - -{ #category : #'accessing-methods' } -SmaCCRewriteMatchContext >> addMethodNamed: aSymbol as: aBlock [ - rewriteEngine addMethodNamed: aSymbol as: aBlock -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> addNewlineWhitespace: aString to: source [ - | outputStream inputStream | - (aString notNil and: [ aString notEmpty ]) - ifFalse: [ ^ source ]. - outputStream := WriteStream on: String new. - inputStream := ReadStream on: source asString. - [ inputStream atEnd ] - whileFalse: - [ | char endOfLine | - endOfLine := false. - char := inputStream next. - char = Character lf - ifTrue: [ endOfLine := true ]. - char = Character cr - ifTrue: - [ endOfLine := true. - inputStream peek = Character lf - ifTrue: [ outputStream nextPut: char. - char := inputStream next ] ]. - outputStream nextPut: char. - endOfLine - ifTrue: [ outputStream nextPutAll: aString ] ]. - ^ outputStream contents -] - -{ #category : #'accessing-methods' } -SmaCCRewriteMatchContext >> addProperty: aSymbol withValue: anObject [ - | property | - property := anObject. - self addMethodNamed: aSymbol as: [ property ]. - self - addMethodNamed: (aSymbol , ':') asSymbol - as: [ :value | property := value ] -] - -{ #category : #'accessing-properites' } -SmaCCRewriteMatchContext >> additionalFiles [ - ^ rewriteEngine additionalFiles -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> characterAt: anIndex [ - ^ self source at: anIndex -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> characterAtEndOf: aSmaCCNode [ - | index | - index := self stopIndexFor: aSmaCCNode. - ^ self - characterAt: - ((self source isRemoved: index) - ifTrue: [ self source previousIndex: index ] - ifFalse: [ index ]) -] - -{ #category : #testing } -SmaCCRewriteMatchContext >> charactersAtAndAfter: startPosition matchesToken: aSmaCCToken [ - | string position | - position := startPosition. - position isNil - ifTrue: [ ^ false ]. - string := aSmaCCToken value. - 1 to: string size do: - [ :i | - (string at: i) = (self originalSource at: position) - ifFalse: [ ^ false ]. - position := self nextIndex: position ]. - ^ true -] - -{ #category : #testing } -SmaCCRewriteMatchContext >> charactersAtAndBefore: stopPosition matchesToken: aSmaCCToken [ - | string position | - position := stopPosition. - position isNil - ifTrue: [ ^ false ]. - string := aSmaCCToken value. - string size to: 1 do: - [ :i | - (string at: i) = (self originalSource at: position) - ifFalse: [ ^ false ]. - position := self previousIndex: position ]. - ^ true -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> computeStringFor: value [ - (value isKindOf: Collection) - ifTrue: - [ | first last | - first := last := nil. - value - do: - [ :each | - (each isKindOf: SmaCCParseNode) - ifTrue: - [ self processChild: each. - first isNil - ifTrue: [ first := self startIndexFor: each ]. - (self stopIndexFor: each) - ifNotNil: [ :i | - i ~= 0 - ifTrue: [ last := i ] ] ] - ifFalse: - [ (each isKindOf: SmaCCToken) - ifTrue: - [ first isNil - ifTrue: [ first := value startPosition ]. - last := value stopPosition ] ] ]. - (first notNil and: [ last notNil ]) - ifTrue: [ ^ self sourceFrom: first to: last ] ]. - (value isKindOf: SmaCCParseNode) - ifTrue: [ ^ self rewrite: value ]. - ^ (value isKindOf: SmaCCToken) - ifTrue: [ value value ] - ifFalse: [ value ] -] - -{ #category : #'initialize-release' } -SmaCCRewriteMatchContext >> context: aDictionary [ - aDictionary - keysAndValuesDo: - [ :key :value | - | cachedString | - nodes at: key name put: value. - strings - at: key name - put: [ cachedString ifNil: [ cachedString := self computeStringFor: value ] ] ] -] - -{ #category : #processing } -SmaCCRewriteMatchContext >> continue [ - continuation value -] - -{ #category : #processing } -SmaCCRewriteMatchContext >> debugMethod: aMethod message: aString [ - | newContext process | - newContext := Context - sender: thisContext sender - receiver: self - method: aMethod - arguments: #(). - newContext push: self. - process := Processor activeProcess. - [ process suspend. - process suspendedContext: newContext. - process restartTop. - process debug: newContext title: 'Debugging ' , aString full: true ] forkAt: process priority + 1 -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> delete: anObject [ - | start stop | - start := self startIndexFor: anObject. - stop := self stopIndexFor: anObject. - self deleteFrom: start to: stop -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> deleteAll: aCollection [ - aCollection isNil - ifTrue: [ ^ self ]. - aCollection do: [ :each | self delete: each ] -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> deleteAllWithWhitespaceAfter: aCollection [ - aCollection isNil - ifTrue: [ ^ self ]. - aCollection do: [ :each | self deleteWithWhitespaceAfter: each ] -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> deleteAllWithWhitespaceBefore: aCollection [ - aCollection isNil - ifTrue: [ ^ self ]. - aCollection do: [ :each | self deleteWithWhitespaceBefore: each ] -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> deleteFrom: start to: stop [ - | startIndex stopIndex | - startIndex := self startIndexFor: start. - stopIndex := self stopIndexFor: stop. - (startIndex isNil or: [ stopIndex isNil ]) - ifTrue: [ ^ self ]. - self source deleteFrom: startIndex to: stopIndex -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> deleteWhitespaceAfter: anObject [ - | anIndex | - anIndex := self stopIndexFor: anObject. - self source deleteWhitespaceAfterIndex: anIndex -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> deleteWhitespaceBefore: anObject [ - | anIndex | - anIndex := self startIndexFor: anObject. - self source deleteWhitespaceBeforeIndex: anIndex -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> deleteWithWhitespaceAfter: anObject [ - self deleteWhitespaceAfter: anObject. - self delete: anObject -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> deleteWithWhitespaceBefore: anObject [ - self deleteWhitespaceBefore: anObject. - self delete: anObject -] - -{ #category : #'accessing-methods' } -SmaCCRewriteMatchContext >> doesNotUnderstand: aMessage [ - | method | - method := rewriteEngine methodNamed: aMessage selector. - method isNil - ifTrue: - [ SilentProperties - ifTrue: - [ aMessage arguments size = 1 - ifTrue: - [ ^ rewriteEngine - propertyAt: - (aMessage selector copyFrom: 1 to: aMessage selector size - 1) - asSymbol - put: aMessage arguments first ]. - aMessage arguments isEmpty - ifTrue: [ ^ rewriteEngine - propertyAt: aMessage selector - ifAbsent: [ nil ] ] ]. - ^ super doesNotUnderstand: aMessage ]. - method numArgs - 1 = aMessage arguments size - ifTrue: [ ^ method - valueWithArguments: (Array with: self) , aMessage arguments ]. - ^ method valueWithArguments: aMessage arguments -] - -{ #category : #'initialize-release' } -SmaCCRewriteMatchContext >> forNode: aSmaCCParseNode rewriter: aSmaCCRewriteEngine continuation: aBlock [ - rewriteEngine := aSmaCCRewriteEngine. - match := aSmaCCParseNode. - continuation := aBlock. - nodes := Dictionary new. - strings := Dictionary new -] - -{ #category : #testing } -SmaCCRewriteMatchContext >> hasChild: anObject position: positionSelector [ - | position node | - node := nil. - (anObject isKindOf: SequenceableCollection) - ifTrue: - [ node := positionSelector = #startPosition - ifTrue: [ anObject first ] - ifFalse: [ anObject last ] ]. - (anObject isKindOf: SmaCCParseNode) - ifTrue: [ node := anObject ]. - anObject isNil - ifTrue: [ ^ false ]. - position := node perform: positionSelector. - node - nodesDo: - [ :child | - (child perform: positionSelector) = position - ifTrue: [ ^ true ] ]. - ^ false -] - -{ #category : #testing } -SmaCCRewriteMatchContext >> hasChildAtEndOf: anObject [ - ^ self hasChild: anObject position: #stopPosition -] - -{ #category : #testing } -SmaCCRewriteMatchContext >> hasChildAtStartOf: anObject [ - ^ self hasChild: anObject position: #startPosition -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> ignoreFile [ - ^ rewriteEngine ignoreFile -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> ignoreFile: aBoolean [ - ^ rewriteEngine ignoreFile: aBoolean -] - -{ #category : #'accessing-properites' } -SmaCCRewriteMatchContext >> initializeGlobalProperty: aSymbol withValueFrom: aBlock [ - (self class classPool at: aSymbol ifAbsent: [ nil ]) == SmaCCRewriteMatchContext uninitializedValue - ifTrue: [ self class classPool at: aSymbol put: aBlock value ] -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> insert: aString after: anObject [ - | position endPosition anIndex | - anIndex := self stopIndexFor: anObject. - anIndex isNil - ifTrue: [ ^ nil ]. - position := self source - insert: aString - at: (self source nextIndex: anIndex). - position isNil - ifTrue: [ ^ nil ]. - endPosition := position + (aString size - 1). - self - updateStopPositionFor: - ((anObject isKindOf: SmaCCParseNode) - ifTrue: [ anObject ] - ifFalse: [ match ]) - to: endPosition - whenEqualTo: anIndex. - ^ position -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> insert: aString afterAll: aCollection [ - aCollection isNil - ifTrue: [ ^ self ]. - aCollection do: [ :each | self insert: aString after: each ] -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> insert: aSequenceableCollection around: aNode [ - self insert: aSequenceableCollection first before: aNode. - self insert: aSequenceableCollection last after: aNode -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> insert: aString before: anObject [ - | position anIndex | - anIndex := self startIndexFor: anObject. - anIndex isNil - ifTrue: [ ^ nil ]. - position := self source insert: aString at: anIndex. - rewriteEngine - updateStartPositionFor: - ((anObject isKindOf: SmaCCParseNode) - ifTrue: [ anObject ] - ifFalse: [ match ]) - to: position - whenEqualTo: anIndex. - ^ position -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> insert: aString beforeAll: aCollection [ - aCollection isNil - ifTrue: [ ^ self ]. - aCollection do: [ :each | self insert: aString before: each ] -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> insert: aString between: aCollection [ - aCollection isNil - ifTrue: [ ^ self ]. - 1 to: aCollection size - 1 do: [ :i | self insert: aString after: (aCollection at: i) ] -] - -{ #category : #testing } -SmaCCRewriteMatchContext >> isAtEndOfParent: anObject [ - (anObject isKindOf: Collection) - ifTrue: [ anObject - reverseDo: [ :each | ^ self isAtEndOfParent: each ] ]. - ^ (anObject isKindOf: SmaCCParseNode) - and: - [ anObject parent notNil - and: [ anObject parent stopPosition = anObject stopPosition ] ] -] - -{ #category : #testing } -SmaCCRewriteMatchContext >> isAtStartOfParent: anObject [ - (anObject isKindOf: Collection) - ifTrue: [ anObject do: [ :each | ^ self isAtStartOfParent: each ] ]. - ^ (anObject isKindOf: SmaCCParseNode) - and: - [ anObject parent notNil - and: [ anObject parent startPosition = anObject startPosition ] ] -] - -{ #category : #processing } -SmaCCRewriteMatchContext >> markAllAsProcessed: aCollection [ - aCollection do: [ :each | self markAsProcessed: each ] -] - -{ #category : #processing } -SmaCCRewriteMatchContext >> markAsProcessed: aSmaCCParseNode [ - rewriteEngine markAsProcessed: aSmaCCParseNode -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> match [ - ^ match -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> match: anObject [ - match := anObject -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> move: anObject after: anotherObject [ - ^ self move: anObject after: anotherObject withWhitespace: '' -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> move: anObject after: anotherObject withWhitespace: aString [ - | start stop oldStop | - start := self startIndexFor: anObject. - stop := self stopIndexFor: anObject. - oldStop := self stopIndexFor: anotherObject. - self source moveFrom: start to: stop after: oldStop. - aString notEmpty - ifTrue: - [ self source addNewLineWhitespace: aString from: start to: stop ]. - rewriteEngine - updateStopPositionFor: - ((anotherObject isKindOf: SmaCCParseNode) - ifTrue: [ anotherObject ] - ifFalse: [ match ]) - to: stop - whenEqualTo: oldStop. - ^ self startIndexFor: anotherObject -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> move: anObject before: anotherObject [ - ^ self move: anObject before: anotherObject withWhitespace: '' -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> move: anObject before: anotherObject withWhitespace: aString [ - | start stop oldStart | - start := self startIndexFor: anObject. - stop := self stopIndexFor: anObject. - oldStart := self startIndexFor: anotherObject. - self source moveFrom: start to: stop before: oldStart. - aString notEmpty - ifTrue: - [ self source addNewLineWhitespace: aString from: start to: stop ]. - rewriteEngine - updateStartPositionFor: - ((anotherObject isKindOf: SmaCCParseNode) - ifTrue: [ anotherObject ] - ifFalse: [ match ]) - to: start - whenEqualTo: oldStart. - ^ self startIndexFor: anObject -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> move: anObject replacing: anotherObject withWhitespace: aString [ - | oldStop | - oldStop := self stopIndexFor: anotherObject. - self move: anObject after: anotherObject withWhitespace: aString. - self deleteFrom: (self startIndexFor: anotherObject) to: oldStop. - ^ self startIndexFor: anObject -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> moveFrom: startIndex to: stopIndex after: anObject [ - ^ self source - moveFrom: (self startIndexFor: startIndex) - to: (self stopIndexFor: stopIndex) - after: (self startIndexFor: anObject) -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> moveFrom: startIndex to: stopIndex before: anObject [ - ^ self source - moveFrom: (self startIndexFor: startIndex) - to: (self stopIndexFor: stopIndex) - before: (self startIndexFor: anObject) -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> nextIndex: position [ - ^ self originalSource nextIndex: position -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> nodeFor: aString [ - ^ nodes at: aString ifAbsent: [ nil ] -] - -{ #category : #private } -SmaCCRewriteMatchContext >> nodes [ - ^nodes -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> originalSource [ - ^ match completeSource -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> originalStartIndexFor: anObject [ - ^ ((anObject isKindOf: SmaCCParseNode) - or: [ anObject isKindOf: SmaCCToken ]) - ifTrue: [ anObject startPosition ] - ifFalse: [ anObject ] -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> originalStartPosition: anObject [ - (anObject isKindOf: Collection) - ifTrue: [ anObject - do: [ :each | ^ self originalStartPosition: each ] ]. - ((anObject isKindOf: SmaCCParseNode) - or: [ anObject isKindOf: SmaCCToken ]) - ifTrue: [ ^ anObject startPosition ]. - ^ nil -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> originalStopPosition: anObject [ - (anObject isKindOf: Collection) - ifTrue: [ anObject - reverseDo: [ :each | ^ self originalStopPosition: each ] ]. - ((anObject isKindOf: SmaCCParseNode) - or: [ anObject isKindOf: SmaCCToken ]) - ifTrue: [ ^ anObject stopPosition ]. - ^ nil -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> outputDirectory [ - ^ rewriteEngine outputDirectory -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> outputDirectory: aString [ - ^ rewriteEngine outputDirectory: aString -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> outputFilename [ - ^ rewriteEngine outputFilename -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> outputFilename: aString [ - ^ rewriteEngine outputFilename: aString -] - -{ #category : #parsing } -SmaCCRewriteMatchContext >> parseCsvStream: aStream withHeader: aBoolean [ - | array result header line | - header := nil. - result := OrderedCollection new. - (CSVParser parseStream: aStream) lines - do: - [ :each | - array := each values - collect: [ :token | self removeQuotesAround: token value ]. - aBoolean - ifTrue: - [ header isNil - ifTrue: [ header := array ] - ifFalse: - [ line := Dictionary new. - 1 to: (header size min: array size) do: [ :i | line at: (header at: i) put: (array at: i) ]. - array size + 1 to: header size do: [ :i | line at: (header at: i) put: nil ]. - result add: line ] ] - ifFalse: [ result add: array ] ]. - ^ result -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> previousIndex: position [ - ^ self originalSource previousIndex: position -] - -{ #category : #processing } -SmaCCRewriteMatchContext >> processChild: aSmaCCParseNode [ - rewriteEngine rewriteNode: aSmaCCParseNode -] - -{ #category : #processing } -SmaCCRewriteMatchContext >> processChildren [ - match nodesDo: [ :each | self processChild: each ] -] - -{ #category : #processing } -SmaCCRewriteMatchContext >> processChildren: aCollection [ - aCollection do: [ :each | self processChild: each ] -] - -{ #category : #'accessing-properites' } -SmaCCRewriteMatchContext >> propertyAt: aString [ - ^ rewriteEngine propertyAt: aString -] - -{ #category : #'accessing-properites' } -SmaCCRewriteMatchContext >> propertyAt: aString ifAbsent: aBlock [ - ^ rewriteEngine propertyAt: aString ifAbsent: aBlock -] - -{ #category : #'accessing-properites' } -SmaCCRewriteMatchContext >> propertyAt: aString ifAbsentPut: aBlock [ - ^ rewriteEngine propertyAt: aString ifAbsentPut: aBlock -] - -{ #category : #'accessing-properites' } -SmaCCRewriteMatchContext >> propertyAt: aString put: anObject [ - ^ rewriteEngine propertyAt: aString put: anObject -] - -{ #category : #'accessing-properites' } -SmaCCRewriteMatchContext >> removeProperty: aString [ - ^ rewriteEngine removeProperty: aString -] - -{ #category : #parsing } -SmaCCRewriteMatchContext >> removeQuotesAround: aString [ - aString isEmpty - ifTrue: [ ^ aString ]. - aString first = $' - ifTrue: - [ ^ (aString copyFrom: 2 to: aString size - 1) - copyReplaceAll: '''''' - with: '''' ]. - aString first = $" - ifTrue: - [ ^ (aString copyFrom: 2 to: aString size - 1) - copyReplaceAll: '""' - with: '"' ]. - ^ aString -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> replace: anObject with: aString [ - anObject isNil - ifTrue: [ ^ self ]. - self delete: anObject. - self insert: aString before: anObject -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> replaceAll: aCollection with: aString [ - aCollection do: [ :each | self replace: each with: aString ] -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> replaceFrom: startIndex to: stopIndex with: aString [ - self insert: aString before: startIndex. - self deleteFrom: startIndex to: stopIndex -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> rewrite: aSmaCCParseNode [ - ^ rewriteEngine rewrite: aSmaCCParseNode -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> rewriteEngine [ - ^ rewriteEngine -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> rewriteEngine: anObject [ - rewriteEngine := anObject -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> safe: aBlock [ - ^ aBlock - on: Error - do: [ :ex | ex return ] -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> smaccStringClass [ - ^ self source class -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> source [ - ^ rewriteEngine source -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> sourceFor: anObject [ - anObject isNil - ifTrue: [ ^ '' ]. - ^ (self - sourceFrom: (self startIndexFor: anObject) - to: (self stopIndexFor: anObject)) asString -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> sourceFrom: first to: last [ - ^ (self source - copyFrom: (self startIndexFor: first) - to: (self stopIndexFor: last)) asString -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> startIndexFor: anObject [ - ^ ((anObject isKindOf: SmaCCParseNode) - or: [ anObject isKindOf: SmaCCToken ]) - ifTrue: [ rewriteEngine startPositionForNode: anObject ] - ifFalse: [ anObject ] -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> startOfLineWhitespaceBefore: anObject [ - ^ self originalSource - startOfLineWhitespaceBeforeIndex: (self originalStartIndexFor: anObject) -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> stopIndexFor: anObject [ - ^ ((anObject isKindOf: SmaCCParseNode) - or: [ anObject isKindOf: SmaCCToken ]) - ifTrue: [ rewriteEngine stopPositionForNode: anObject ] - ifFalse: [ anObject ] -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> stringFor: aString [ - ^ (strings at: aString ifAbsent: [ [ '' ] ]) value -] - -{ #category : #private } -SmaCCRewriteMatchContext >> strings [ - ^strings -] - -{ #category : #'source editing' } -SmaCCRewriteMatchContext >> updateStopPositionFor: node to: endPosition whenEqualTo: anIndex [ - rewriteEngine - updateStopPositionFor: node - to: endPosition - whenEqualTo: anIndex -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> whitespaceAfter: anObject [ - ^ self originalSource - whitespaceAfterIndex: (self stopIndexFor: anObject) -] - -{ #category : #accessing } -SmaCCRewriteMatchContext >> whitespaceBefore: anObject [ - ^ self originalSource - whitespaceBeforeIndex: (self originalStartIndexFor: anObject) -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCRewriteMethodDefinition.class.st b/src/SmaCC_Rewrite_Engine/SmaCCRewriteMethodDefinition.class.st deleted file mode 100644 index 16668b96a..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCRewriteMethodDefinition.class.st +++ /dev/null @@ -1,95 +0,0 @@ -Class { - #name : #SmaCCRewriteMethodDefinition, - #superclass : #SmaCCAbstractRewrite, - #instVars : [ - 'comment', - 'source', - 'method' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #'instance creation' } -SmaCCRewriteMethodDefinition class >> comment: commentString source: aString [ - ^ self new - comment: commentString; - source: aString; - yourself -] - -{ #category : #'instance creation' } -SmaCCRewriteMethodDefinition class >> source: aString [ - ^ self new - source: aString; - yourself -] - -{ #category : #accessing } -SmaCCRewriteMethodDefinition >> code: aString [ - self source: aString -] - -{ #category : #accessing } -SmaCCRewriteMethodDefinition >> comment [ - ^ comment ifNil: [ '' ] -] - -{ #category : #accessing } -SmaCCRewriteMethodDefinition >> comment: aString [ - comment := aString. - self changed: #comment -] - -{ #category : #printing } -SmaCCRewriteMethodDefinition >> displayOn: aStream [ - self comment notEmpty - ifTrue: [ aStream nextPutAll: self comment ] - ifFalse: [ | stream | - stream := ReadStream on: self source. - aStream - nextPutAll: 'Method: '; - nextPutAll: stream nextLine ] -] - -{ #category : #saving } -SmaCCRewriteMethodDefinition >> localSaveOn: aStream [ - self comment notEmpty - ifTrue: [ aStream - nextPut: $"; - nextPutAll: (self comment copyReplaceAll: '"' with: '""'); - nextPut: $"; - cr ]. - aStream - nextPut: $#; - nextPutAll: (self source copyReplaceAll: '!' with: '!!'); - nextPut: $! -] - -{ #category : #accessing } -SmaCCRewriteMethodDefinition >> method [ - method isNil - ifTrue: [ method := SmaCCRewriteMatchContext compiledMethodFor: self source ]. - ^ method -] - -{ #category : #rewriting } -SmaCCRewriteMethodDefinition >> performOn: aSmaCCNode continuation: aBlock [ - ^ false -] - -{ #category : #accessing } -SmaCCRewriteMethodDefinition >> source [ - ^ source ifNil: [ 'yourself' ] -] - -{ #category : #accessing } -SmaCCRewriteMethodDefinition >> source: aString [ - source := aString. - method := nil. - self changed: #source -] - -{ #category : #rewriting } -SmaCCRewriteMethodDefinition >> updateClass: aClass [ - aClass addSelectorSilently: self method selector withMethod: self method -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCRewriteProcessor.class.st b/src/SmaCC_Rewrite_Engine/SmaCCRewriteProcessor.class.st deleted file mode 100644 index 1af21a8a0..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCRewriteProcessor.class.st +++ /dev/null @@ -1,315 +0,0 @@ -Class { - #name : #SmaCCRewriteProcessor, - #superclass : #Object, - #instVars : [ - 'rules', - 'parserClass', - 'inputDirectory', - 'outputDirectory', - 'files', - 'validationParserClass', - 'rewriteEngine', - 'baseDirectory' - ], - #classVars : [ - 'Debug' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #accessing } -SmaCCRewriteProcessor class >> debug [ - ^ Debug ifNil: [ false ] -] - -{ #category : #accessing } -SmaCCRewriteProcessor class >> debug: aBoolean [ - Debug := aBoolean -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> baseDirectory [ - ^ baseDirectory ifNil: [ '' ] -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> baseDirectory: aString [ - baseDirectory := aString -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> debug [ - ^ self class debug -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> debug: aBoolean [ - self class debug: aBoolean -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> engine [ - rewriteEngine isNil - ifTrue: - [ rewriteEngine := SmaCCRewriteEngine new. - rewriteEngine rewriteRule: self rules ]. - ^ rewriteEngine -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> extension [ - ^ self parserClass fileExtension -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> files [ - ^ files ifNil: [ files := self inputFilenames ] -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> files: aCollection [ - files := aCollection -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> inputDirectory [ - ^ inputDirectory -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> inputDirectory: aString [ - inputDirectory := aString -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> inputFilenames [ - | names | - names := OrderedCollection new. - (self inputDirectory asFileReference - allChildrenMatching: '*' , self extension) - do: [ :each | names add: each path ]. - ^ names -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> outputDirectory [ - ^ outputDirectory -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> outputDirectory: aString [ - outputDirectory := aString -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> parseFile: aString [ - | source | - source := self sourceFor: aString. - ^ self parserClass parse: source -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> parseRewriteRuleFile: aString [ - rules := SmaCCRewriteRuleFileParser parseFile: aString -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> parserClass [ - ^ parserClass -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> parserClass: aSmaCCParserClass [ - parserClass := aSmaCCParserClass -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> processAllNotifying: postBlock [ - self files do: [ :each | postBlock value: (self processFile: each) ] -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> processFile: aString [ - ^ self processFile: aString usingResult: SmaCCRewriteResult new -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> processFile: aString usingResult: aSmaCCRewriteResult [ - | input output tree stream subdirectory fullFilename | - (Smalltalk includesKey: #Smalltalk) - ifFalse: [ Smalltalk at: #Smalltalk put: Smalltalk ]. "Add Smalltalk back if it got stripped" - aSmaCCRewriteResult filename: aString. - [ input := self sourceFor: aString. - aSmaCCRewriteResult inputSource: input. - stream := SmaCCLineNumberStream on: (ReadStream on: input). - tree := [ self parserClass parseStream: stream ] - on: SmaCCParserError - do: [ :ex | - | parser token | - parser := ex tag. - token := parser errorToken. - token notNil - ifTrue: [ aSmaCCRewriteResult - startLine: (stream lineNumberFor: token startPosition); - startColumn: (stream columnNumberFor: token startPosition); - interval: token sourceInterval ]. - ex pass ]. - tree - completeSource: input; - filename: aString. - subdirectory := self baseDirectory isEmpty - ifTrue: [ '' ] - ifFalse: [ aString asFileReference parent pathString - copyFrom: self baseDirectory size + 1 - to: aString asFileReference parent pathString size ]. - fullFilename := (self outputDirectory isNil - or: [ self outputDirectory isEmpty ]) - ifTrue: [ '' ] - ifFalse: [ self outputDirectory , FileSystem disk delimiter asString - , subdirectory ]. - self engine - source: (aSmaCCRewriteResult smaccStringClass on: input); - outputDirectory: fullFilename; - outputFilename: - aString asFileReference basenameWithoutExtension - , - (self validationParserClass isNil - ifTrue: [ '' ] - ifFalse: [ self validationParserClass fileExtension ]). - output := [ self engine rewriteTree: tree ] - on: Error - do: [ :ex | - | frame node | - frame := thisContext. - [ frame isNil - or: [ (frame receiver isKindOf: SmaCCRewrite) - and: [ frame method selector = #performOn:continuation: ] ] ] - whileFalse: [ frame := frame sender ]. - frame notNil - ifTrue: [ node := frame tempAt: 1. - aSmaCCRewriteResult - startLine: (stream lineNumberFor: node startPosition); - startColumn: (stream columnNumberFor: node startPosition); - interval: node sourceInterval; - transformation: frame receiver ]. - ex pass ]. - aSmaCCRewriteResult - outputSource: output; - transformedString: self engine source; - outputFilename: self engine outputFilename. - self engine additionalFiles - keysAndValuesDo: [ :file :text | aSmaCCRewriteResult addFile: text named: file ]. - (self outputDirectory isNil or: [ self outputDirectory isEmpty ]) - ifFalse: [ | filename | - filename := self engine outputDirectory - , - ((self engine outputDirectory isEmpty - or: [ self engine outputDirectory last = FileSystem disk delimiter ]) - ifTrue: [ '' ] - ifFalse: [ String with: FileSystem disk delimiter ]) - , self engine outputFilename. - self engine ignoreFile - ifFalse: [ self saveOutput: output in: filename ]. - self engine additionalFiles - keysAndValuesDo: [ :file :text | self saveOutput: text in: file ] ]. - self engine finished. - aSmaCCRewriteResult class == SmaCCRewriteResult - ifFalse: [ self validate: output forResult: aSmaCCRewriteResult ] ] - on: Error - do: [ :ex | - aSmaCCRewriteResult - type: - (output isNil - ifTrue: [ #error ] - ifFalse: [ #warning ]). - aSmaCCRewriteResult errorString: ex description. - (self debug and: [ Processor activeProcess respondsTo: #debug ]) - ifTrue: [ Processor activeProcess debug ]. - ((Smalltalk options select: [ :each | '-/' includes: each first ]) - collect: [ :each | each copyFrom: 2 to: each size ]) - do: [ :each | - (each sameAs: 'error') - ifTrue: [ ex pass ] ]. - ex return ]. - ^ aSmaCCRewriteResult -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> ruleFile: aString [ - self parseRewriteRuleFile: aString -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> rules [ - ^ rules -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> rules: aSmaCCAbstractRewrite [ - rules := aSmaCCAbstractRewrite -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> saveOutput: aString in: aFilename [ - | directory tries | - (aFilename isNil or: [ aFilename isEmpty ]) - ifTrue: [ ^ self ]. - aString isEmpty - ifTrue: [ ^ self ]. - directory := aFilename asFileReference parent pathString. - tries := 1. - [ tries < 10 and: [ directory asFileReference exists not ] ] - whileTrue: [ [ directory asFileReference ensureCreateDirectory ] - on: Error - do: [ :ex | ex return ]. - tries := tries + 1 ]. - aFilename asFileReference - ensureDelete; - writeStreamDo: [ :stream | stream nextPutAll: aString ] -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> sourceFor: aString [ - ^ aString asFileReference - readStreamDo: [ :stream | - ([ #[239 187 191] allSatisfy: [ :each | stream peekFor: (Character value: each) ] ] - on: Error - do: [ :ex | ex return: false ]) - ifFalse: [ stream position: 0 ]. "HACK to handle BOM streams" - parserClass setEncodingOn: stream. - stream upToEnd ] -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> validate: aString forResult: aSmaCCRewriteResult [ - | stream | - self validationParserClass isNil - ifTrue: [ ^ self ]. - stream := SmaCCLineNumberStream on: (ReadStream on: aString). - [ self validationParserClass parseStream: stream ] - on: SmaCCParserError - do: - [ :ex | - | parser token | - parser := ex tag. - token := parser errorToken. - token notNil - ifTrue: - [ aSmaCCRewriteResult - startLine: (stream lineNumberFor: (token startPosition ifNil: [ 1 ])); - startColumn: (stream columnNumberFor: (token startPosition ifNil: [ 1 ])); - interval: ((token startPosition ifNil: [ 1 ]) to: (token stopPosition ifNil: [ 1 ])) ]. - aSmaCCRewriteResult - errorString: 'Validation error'; - type: #warning ] -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> validationParserClass [ - ^ validationParserClass -] - -{ #category : #accessing } -SmaCCRewriteProcessor >> validationParserClass: aSmaCCParserClass [ - validationParserClass := aSmaCCParserClass -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCRewritePropertyDefinition.class.st b/src/SmaCC_Rewrite_Engine/SmaCCRewritePropertyDefinition.class.st deleted file mode 100644 index 2a039f055..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCRewritePropertyDefinition.class.st +++ /dev/null @@ -1,160 +0,0 @@ -Class { - #name : #SmaCCRewritePropertyDefinition, - #superclass : #SmaCCAbstractRewrite, - #instVars : [ - 'comment', - 'propertyNames', - 'globalValues' - ], - #classVars : [ - 'Reader', - 'Writer' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #'instance creation' } -SmaCCRewritePropertyDefinition class >> comment: aString locals: localPropertyNames globals: globalPropertyNames [ - ^ self new - comment: aString; - addAllLocals: localPropertyNames; - addAllGlobals: globalPropertyNames; - yourself -] - -{ #category : #accessing } -SmaCCRewritePropertyDefinition class >> readerPrototype [ - ^ Reader ifNil: [ Reader := SmaCCRewriteMatchContext compiledMethodFor: 'selector ^Uninitialized' ] -] - -{ #category : #accessing } -SmaCCRewritePropertyDefinition class >> writerPrototype [ - ^ Writer ifNil: [ Writer := SmaCCRewriteMatchContext compiledMethodFor: 'selector: anObject ^Uninitialized := anObject' ] -] - -{ #category : #accessing } -SmaCCRewritePropertyDefinition >> addAllGlobals: aCollection [ - aCollection do: [ :each | self addGlobal: each ] -] - -{ #category : #accessing } -SmaCCRewritePropertyDefinition >> addAllLocals: aCollection [ - aCollection do: [ :each | self addLocal: each ] -] - -{ #category : #accessing } -SmaCCRewritePropertyDefinition >> addGlobal: aString [ - globalValues at: aString asSymbol put: SmaCCRewriteMatchContext uninitializedValue. - self changed: #globals -] - -{ #category : #accessing } -SmaCCRewritePropertyDefinition >> addLocal: aString [ - propertyNames add: aString. - self changed: #locals -] - -{ #category : #rewriting } -SmaCCRewritePropertyDefinition >> clearLocalVariablesIn: aClass [ - propertyNames do: [ :each | aClass classPool at: each asSymbol put: nil ] -] - -{ #category : #accessing } -SmaCCRewritePropertyDefinition >> comment [ - ^ comment ifNil: [ '' ] -] - -{ #category : #accessing } -SmaCCRewritePropertyDefinition >> comment: aString [ - comment := aString. - self changed: #comment -] - -{ #category : #private } -SmaCCRewritePropertyDefinition >> createPropertyMethodsFor: aSymbol in: aClass [ - | method variable setterName | - method := self class readerPrototype copy. - variable := aClass classPool associationAt: aSymbol. - method literalAt: 1 put: variable. - method literalAt: 2 put: aSymbol. - aClass addSelectorSilently: aSymbol withMethod: method. - setterName := (aSymbol , ':') asSymbol. - method := self class writerPrototype copy. - method literalAt: 1 put: variable. - method literalAt: 2 put: setterName. - aClass addSelectorSilently: setterName withMethod: method -] - -{ #category : #printing } -SmaCCRewritePropertyDefinition >> displayOn: aStream [ - self comment notEmpty - ifTrue: [ aStream nextPutAll: self comment ] - ifFalse: [ aStream - nextPutAll: 'Properties: '; - print: propertyNames size; - nextPutAll: ' local, '; - print: globalValues size; - nextPutAll: ' global' ] -] - -{ #category : #'initialize-release' } -SmaCCRewritePropertyDefinition >> initialize [ - super initialize. - propertyNames := Set new. - globalValues := Dictionary new -] - -{ #category : #saving } -SmaCCRewritePropertyDefinition >> localSaveOn: aStream [ - self comment notEmpty - ifTrue: [ aStream - nextPut: $"; - nextPutAll: (self comment copyReplaceAll: '"' with: '""'); - nextPut: $"; - cr ]. - aStream - nextPut: $(; - cr. - propertyNames asSortedCollection - do: [ :each | - aStream - nextPut: $-; - nextPutAll: each; - cr ]. - globalValues keys asSortedCollection - do: [ :each | - aStream - nextPut: $+; - nextPutAll: each; - cr ]. - aStream nextPut: $) -] - -{ #category : #rewriting } -SmaCCRewritePropertyDefinition >> performOn: aSmaCCNode continuation: aBlock [ - ^ false -] - -{ #category : #accessing } -SmaCCRewritePropertyDefinition >> removeGlobal: aString [ - globalValues removeKey: aString asSymbol ifAbsent: [ ]. - self changed: #globals -] - -{ #category : #accessing } -SmaCCRewritePropertyDefinition >> removeLocal: aString [ - propertyNames remove: aString ifAbsent: [ ]. - self changed: #locals -] - -{ #category : #rewriting } -SmaCCRewritePropertyDefinition >> updateClass: aClass [ - propertyNames - do: [ :each | - aClass classPool at: each asSymbol put: nil. - self createPropertyMethodsFor: each asSymbol in: aClass ]. - globalValues - associationsDo: [ :assoc | - aClass classPool add: assoc. - self createPropertyMethodsFor: assoc name in: aClass ] -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCRewriteResult.class.st b/src/SmaCC_Rewrite_Engine/SmaCCRewriteResult.class.st deleted file mode 100644 index 9c1b4d67e..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCRewriteResult.class.st +++ /dev/null @@ -1,251 +0,0 @@ -Class { - #name : #SmaCCRewriteResult, - #superclass : #Object, - #instVars : [ - 'filename', - 'outputFilename', - 'errorString', - 'type', - 'startLine', - 'startColumn', - 'interval', - 'transformation' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #'instance creation' } -SmaCCRewriteResult class >> fromSocketString: aString [ - | result | - result := self new. - aString - splitFirstOn: (Character value: 0) - andThen: $= - do: - [ :key :value | - key = 'FILENAME' - ifTrue: [ result filename: value ]. - key = 'ERRORSTRING' - ifTrue: [ result errorString: value ]. - key = 'TYPE' - ifTrue: [ result type: value asSymbol ]. - key = 'STARTLINE' - ifTrue: [ result startLine: value asNumber ]. - key = 'STARTCOLUMN' - ifTrue: [ result startColumn: value asNumber ]. - key = 'INTERVAL' - ifTrue: - [ | items | - items := value substrings: $- asString. - result interval: (items first asNumber to: items last asNumber) ]. - key = 'TRANSFORMATION' - ifTrue: [ result transformation: value ] ]. - ^ result -] - -{ #category : #accessing } -SmaCCRewriteResult >> addFile: aSmaCCString named: aString [ - -] - -{ #category : #accessing } -SmaCCRewriteResult >> additionalFiles [ - ^ Dictionary new -] - -{ #category : #converting } -SmaCCRewriteResult >> asSocketString [ - | stream null | - stream := WriteStream on: String new. - null := Character value: 0. - stream - nextPutAll: 'FILENAME='; - nextPutAll: filename; - nextPut: null. - errorString notNil - ifTrue: - [ stream - nextPutAll: 'ERRORSTRING='; - nextPutAll: errorString; - nextPut: null ]. - type notNil - ifTrue: - [ stream - nextPutAll: 'TYPE='; - nextPutAll: type; - nextPut: null ]. - startLine notNil - ifTrue: - [ stream - nextPutAll: 'STARTLINE='; - print: startLine; - nextPut: null ]. - startColumn notNil - ifTrue: - [ stream - nextPutAll: 'STARTCOLUMN='; - print: startColumn; - nextPut: null ]. - interval notNil - ifTrue: - [ stream - nextPutAll: 'INTERVAL='; - print: interval first; - nextPut: $-; - print: interval last; - nextPut: null ]. - transformation notNil - ifTrue: - [ stream - nextPutAll: 'TRANSFORMATION='; - nextPutAll: transformation displayString; - nextPut: null ]. - ^ stream contents -] - -{ #category : #converting } -SmaCCRewriteResult >> asTabDelimitedString [ - | stream | - stream := WriteStream on: String new. - stream - nextPutAll: filename; - tab; - nextPutAll: (errorString ifNil: [ '' ]); - tab; - nextPutAll: (type ifNil: [ '' ]); - tab; - nextPutAll: (startLine ifNil: [ '' ] ifNotNil: [ :value | value printString ]); - tab; - nextPutAll: (startColumn ifNil: [ '' ] ifNotNil: [ :value | value printString ]); - tab; - nextPutAll: - (transformation - ifNil: [ '' ] - ifNotNil: [ :value | value displayString ]). - ^ stream contents -] - -{ #category : #accessing } -SmaCCRewriteResult >> errorString [ - ^ errorString -] - -{ #category : #accessing } -SmaCCRewriteResult >> errorString: anObject [ - errorString := anObject -] - -{ #category : #accessing } -SmaCCRewriteResult >> filename [ - ^ filename -] - -{ #category : #accessing } -SmaCCRewriteResult >> filename: anObject [ - filename := anObject -] - -{ #category : #public } -SmaCCRewriteResult >> inputSource [ - ^ '' -] - -{ #category : #accessing } -SmaCCRewriteResult >> inputSource: aString [ - -] - -{ #category : #accessing } -SmaCCRewriteResult >> interval [ - ^ interval -] - -{ #category : #accessing } -SmaCCRewriteResult >> interval: anObject [ - interval := anObject -] - -{ #category : #testing } -SmaCCRewriteResult >> isError [ - ^ type = #error -] - -{ #category : #testing } -SmaCCRewriteResult >> isWarning [ - ^ type = #warning -] - -{ #category : #accessing } -SmaCCRewriteResult >> outputFilename [ - ^ outputFilename -] - -{ #category : #accessing } -SmaCCRewriteResult >> outputFilename: anObject [ - outputFilename := anObject -] - -{ #category : #public } -SmaCCRewriteResult >> outputSource [ - ^ '' -] - -{ #category : #accessing } -SmaCCRewriteResult >> outputSource: aString [ - -] - -{ #category : #accessing } -SmaCCRewriteResult >> smaccStringClass [ - ^ SmaCCString -] - -{ #category : #accessing } -SmaCCRewriteResult >> startColumn [ - ^ startColumn -] - -{ #category : #accessing } -SmaCCRewriteResult >> startColumn: anInteger [ - startColumn := anInteger -] - -{ #category : #accessing } -SmaCCRewriteResult >> startLine [ - ^ startLine -] - -{ #category : #accessing } -SmaCCRewriteResult >> startLine: anInteger [ - startLine := anInteger -] - -{ #category : #accessing } -SmaCCRewriteResult >> transformation [ - ^ transformation -] - -{ #category : #accessing } -SmaCCRewriteResult >> transformation: anObject [ - transformation := anObject -] - -{ #category : #public } -SmaCCRewriteResult >> transformedString [ - ^ SmaCCAnnotatedString on: '' -] - -{ #category : #accessing } -SmaCCRewriteResult >> transformedString: aSmaCCAnnotatedString [ - -] - -{ #category : #accessing } -SmaCCRewriteResult >> type [ - ^ type -] - -{ #category : #accessing } -SmaCCRewriteResult >> type: aSymbol [ - type := aSymbol -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCRewriteRuleFileParser.class.st b/src/SmaCC_Rewrite_Engine/SmaCCRewriteRuleFileParser.class.st deleted file mode 100644 index ed45c4c2d..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCRewriteRuleFileParser.class.st +++ /dev/null @@ -1,385 +0,0 @@ -Class { - #name : #SmaCCRewriteRuleFileParser, - #superclass : #SmaCCParser, - #instVars : [ - 'filename' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #'generated-accessing' } -SmaCCRewriteRuleFileParser class >> cacheId [ - ^'2019-04-15T17:15:43.378181-05:00' -] - -{ #category : #generated } -SmaCCRewriteRuleFileParser class >> definitionComment [ -" - : ( | _) ( | | _)* - ; - - : (\. )* - ; - - : (\' [^\']* \') + - ; - - : (\""[^\""]*\"")+ - ; - - : \#([^!]|!!)+ ! - ; - - : + - ; -File - : Rules {'1'} - ; -Rules - : {SmaCCRewriteFile new filename: filename; yourself} - | Rules Rule {'1' addTransformation: '2'; yourself} - | Rules ParserClass {'1' parserClass: '2'; yourself} - | Rules Import {'1' import: '2'; yourself} - ; -ParserClass - : ""Parser"" "":"" 'name' {self lookupClass: name} - ; -Import - : ""Import"" "":"" 'name' {(name value copyFrom: 2 to: name value size - 1) copyReplaceAll: '''''' with: ''''} - ; -Rule - : Comment 'comment' Match 'match' ""->"" Transformation 'transformation' {SmaCCRewrite comment: comment match: match transformation: transformation} - | Comment 'comment' 'method' {SmaCCRewriteMethodDefinition comment: comment source: ((method value copyFrom: 2 to: method value size - 1) copyReplaceAll: '!!' with: '!')} - | Comment 'comment' Variables 'variables' {SmaCCRewritePropertyDefinition comment: comment locals: ((variables reject: [:each | each first]) collect: [:each | each last]) globals: ((variables select: [:each | each first]) collect: [:each | each last])} - ; -Comment - : {nil} - | {('1' value copyFrom: 2 to: '1' value size - 1) copyReplaceAll: '""""' with: '""'} - ; -Variables - : ""("" VariableList 'vars' "")"" {vars} - ; -VariableList - : {OrderedCollection new} - | VariableList 'vars' Variable 'var' {vars add: var; yourself} - ; -Variable - : ""-"" 'name' {Array with: false with: name value} - | ""+"" 'name' {Array with: true with: name value} - ; -Match - : StringExpression {SmaCCRewriteTreeMatch new source: '1'; yourself} - | 'state' StringExpression 'exp' {SmaCCRewriteTreeMatch new source: exp; startingState: state value; yourself} - | {SmaCCRewriteTypeMatch on: (self lookupClass: '1')} - | Block {(SmaCCRewriteTypeMatch on: (self lookupClass: '1')) code: '2'; yourself} - ; -StringExpression - : StartStringExpression 'string' "">>>"" ""<<<"" {string} - ; -Transformation - : StringExpression {SmaCCRewriteStringTransformation on: '1'} - | Block {SmaCCRewriteCodeTransformation on: '1'} - ; -Block - : StartSmalltalkExpression 'string' ""["" ""]"" {string} - ; -StartStringExpression - : {self scanStringExpression} - ; -StartSmalltalkExpression - : {self scanSmalltalkExpression} - ;" -] - -{ #category : #'file types' } -SmaCCRewriteRuleFileParser class >> fileExtension [ - ^ '.rw' -] - -{ #category : #'file types' } -SmaCCRewriteRuleFileParser class >> fileExtensionType [ - ^ 'SmaCC Rewrite files' -] - -{ #category : #accessing } -SmaCCRewriteRuleFileParser class >> parseFile: aString [ - ^ aString asFileReference - readStreamDo: [ :stream | - | parser | - parser := self on: stream. - parser filename: aString. - parser parse - filename: aString; - finishedLoading; - yourself ] -] - -{ #category : #generated } -SmaCCRewriteRuleFileParser class >> reduceTable [ -^#( - #(20 0 #reduceActionForRules1: 263169 false ) - #(24 0 #nil 1290241 false ) - #(19 1 #liftFirstValue: 239617 false ) - #(24 1 #reduceActionForComment2: 1290242 false ) - #(20 2 #reduceActionForRules3: 263171 false ) - #(20 2 #reduceActionForRules4: 263172 false ) - #(20 2 #reduceActionForRules2: 263170 false ) - #(32 0 #reduceActionForStartStringExpression1: 2328577 false ) - #(26 0 #reduceActionForVariableList1: 1454081 false ) - #(28 1 #reduceActionForMatch3: 1693699 false ) - #(33 0 #reduceActionForStartSmalltalkExpression1: 2385921 false ) - #(23 2 #reduceActionForRule2: 685058 false ) - #(23 2 #reduceActionForRule3: 685059 false ) - #(28 1 #reduceActionForMatch1: 1693697 false ) - #(22 3 #reduceActionForImport1: 555009 false ) - #(21 3 #reduceActionForParserClass1: 483329 false ) - #(28 2 #reduceActionForMatch2: 1693698 false ) - #(28 2 #reduceActionForMatch4: 1693700 false ) - #(25 3 #liftSecondValue: 1401857 false ) - #(26 2 #reduceActionForVariableList2: 1454082 false ) - #(30 1 #reduceActionForTransformation1: 2128897 false ) - #(23 4 #reduceActionForRule1: 685057 false ) - #(30 1 #reduceActionForTransformation2: 2128898 false ) - #(29 3 #liftFirstValue: 2052097 false ) - #(27 2 #reduceActionForVariable2: 1563650 false ) - #(27 2 #reduceActionForVariable1: 1563649 false ) - #(31 3 #liftFirstValue: 2263041 false ) - ). -] - -{ #category : #'generated-accessing' } -SmaCCRewriteRuleFileParser class >> scannerClass [ - ^SmaCCRewriteRuleFileScanner -] - -{ #category : #generated } -SmaCCRewriteRuleFileParser class >> startingStateForFile [ - ^ 1 -] - -{ #category : #generated } -SmaCCRewriteRuleFileParser class >> symbolNames [ - ^ #('"("' '")"' '"+"' '"-"' '"->"' '":"' '"<<<"' '">>>"' '"Import"' '"Parser"' '"["' '"]"' '' '' '' '' '' 'B e g i n' 'File' 'Rules' 'ParserClass' 'Import' 'Rule' 'Comment' 'Variables' 'VariableList' 'Variable' 'Match' 'StringExpression' 'Transformation' 'Block' 'StartStringExpression' 'StartSmalltalkExpression' 'E O F' 'error') -] - -{ #category : #generated } -SmaCCRewriteRuleFileParser class >> transitionTable [ -^#( -#[1 0 6 0 1 0 6 0 8 0 6 0 9 0 6 0 10 0 6 0 13 0 6 0 15 0 6 0 16 0 9 0 19 0 13 0 20 0 6 0 34] -#[0 0 0 0 34] -#[1 0 10 0 1 0 10 0 8 0 17 0 9 0 21 0 10 0 10 0 13 0 25 0 15 0 10 0 16 0 29 0 21 0 33 0 22 0 37 0 23 0 41 0 24 0 14 0 34] -#[0 0 45 0 6] -#[0 0 49 0 6] -#[0 0 18 0 1 0 8 0 13 0 16] -#[0 0 22 0 1 0 8 0 9 0 10 0 13 0 15 0 16 0 34] -#[0 0 26 0 1 0 8 0 9 0 10 0 13 0 15 0 16 0 34] -#[0 0 30 0 1 0 8 0 9 0 10 0 13 0 15 0 16 0 34] -#[1 0 53 0 1 0 34 0 8 0 57 0 13 0 61 0 16 0 65 0 25 0 69 0 28 0 73 0 29 0 77 0 32] -#[0 0 81 0 14] -#[0 0 85 0 13] -#[1 0 38 0 2 0 38 0 3 0 38 0 4 0 89 0 26] -#[1 0 42 0 5 0 34 0 8 0 46 0 11 0 93 0 29 0 97 0 31 0 77 0 32 0 101 0 33] -#[0 0 50 0 1 0 8 0 9 0 10 0 13 0 15 0 16 0 34] -#[0 0 54 0 1 0 8 0 9 0 10 0 13 0 15 0 16 0 34] -#[0 0 105 0 5] -#[0 0 58 0 5] -#[0 0 109 0 8] -#[0 0 62 0 1 0 8 0 9 0 10 0 13 0 15 0 16 0 34] -#[0 0 66 0 1 0 8 0 9 0 10 0 13 0 15 0 16 0 34] -#[1 0 113 0 2 0 117 0 3 0 121 0 4 0 125 0 27] -#[0 0 70 0 5] -#[0 0 74 0 5] -#[0 0 129 0 11] -#[1 0 34 0 8 0 46 0 11 0 133 0 29 0 137 0 30 0 141 0 31 0 77 0 32 0 101 0 33] -#[0 0 145 0 7] -#[0 0 78 0 1 0 8 0 9 0 10 0 13 0 15 0 16 0 34] -#[0 0 149 0 13] -#[0 0 153 0 13] -#[0 0 82 0 2 0 3 0 4] -#[0 0 157 0 12] -#[0 0 86 0 1 0 8 0 9 0 10 0 13 0 15 0 16 0 34] -#[0 0 90 0 1 0 8 0 9 0 10 0 13 0 15 0 16 0 34] -#[0 0 94 0 1 0 8 0 9 0 10 0 13 0 15 0 16 0 34] -#[0 0 98 0 1 0 5 0 8 0 9 0 10 0 13 0 15 0 16 0 34] -#[0 0 102 0 2 0 3 0 4] -#[0 0 106 0 2 0 3 0 4] -#[0 0 110 0 1 0 5 0 8 0 9 0 10 0 13 0 15 0 16 0 34] - ). -] - -{ #category : #private } -SmaCCRewriteRuleFileParser >> filename: aString [ - filename := aString -] - -{ #category : #private } -SmaCCRewriteRuleFileParser >> lookupClass: aSmaCCToken [ - | string block | - string := aSmaCCToken value. - block := [ :each | - each name asString = string - ifTrue: [ ^ each ] ]. - SmaCCParseNode withAllSubclasses do: block. - SmaCCParser allSubclassesDo: block. - ^ nil -] - -{ #category : #'generated-reduction actions' } -SmaCCRewriteRuleFileParser >> reduceActionForComment2: nodes [ - ^ ((nodes at: 1) value copyFrom: 2 to: (nodes at: 1) value size - 1) - copyReplaceAll: '""' - with: '"' -] - -{ #category : #'generated-reduction actions' } -SmaCCRewriteRuleFileParser >> reduceActionForImport1: nodes [ - ^ ((nodes at: 3) value copyFrom: 2 to: (nodes at: 3) value size - 1) - copyReplaceAll: '''''' - with: '''' -] - -{ #category : #'generated-reduction actions' } -SmaCCRewriteRuleFileParser >> reduceActionForMatch1: nodes [ - ^ SmaCCRewriteTreeMatch new - source: (nodes at: 1); - yourself -] - -{ #category : #'generated-reduction actions' } -SmaCCRewriteRuleFileParser >> reduceActionForMatch2: nodes [ - ^ SmaCCRewriteTreeMatch new - source: (nodes at: 2); - startingState: (nodes at: 1) value; - yourself -] - -{ #category : #'generated-reduction actions' } -SmaCCRewriteRuleFileParser >> reduceActionForMatch3: nodes [ - ^ SmaCCRewriteTypeMatch on: (self lookupClass: (nodes at: 1)) -] - -{ #category : #'generated-reduction actions' } -SmaCCRewriteRuleFileParser >> reduceActionForMatch4: nodes [ - ^ (SmaCCRewriteTypeMatch on: (self lookupClass: (nodes at: 1))) - code: (nodes at: 2); - yourself -] - -{ #category : #'generated-reduction actions' } -SmaCCRewriteRuleFileParser >> reduceActionForParserClass1: nodes [ - ^ self lookupClass: (nodes at: 3) -] - -{ #category : #'generated-reduction actions' } -SmaCCRewriteRuleFileParser >> reduceActionForRule1: nodes [ - ^ SmaCCRewrite - comment: (nodes at: 1) - match: (nodes at: 2) - transformation: (nodes at: 4) -] - -{ #category : #'generated-reduction actions' } -SmaCCRewriteRuleFileParser >> reduceActionForRule2: nodes [ - ^ SmaCCRewriteMethodDefinition - comment: (nodes at: 1) - source: - (((nodes at: 2) value copyFrom: 2 to: - (nodes at: 2) value size - 1) copyReplaceAll: '!!' with: '!') -] - -{ #category : #'generated-reduction actions' } -SmaCCRewriteRuleFileParser >> reduceActionForRule3: nodes [ - ^ SmaCCRewritePropertyDefinition - comment: (nodes at: 1) - locals: - (((nodes at: 2) reject: [ :each | each first ]) - collect: [ :each | each last ]) - globals: - (((nodes at: 2) select: [ :each | each first ]) - collect: [ :each | each last ]) -] - -{ #category : #'generated-reduction actions' } -SmaCCRewriteRuleFileParser >> reduceActionForRules1: nodes [ - ^ SmaCCRewriteFile new - filename: filename; - yourself -] - -{ #category : #'generated-reduction actions' } -SmaCCRewriteRuleFileParser >> reduceActionForRules2: nodes [ - ^ (nodes at: 1) - addTransformation: (nodes at: 2); - yourself -] - -{ #category : #'generated-reduction actions' } -SmaCCRewriteRuleFileParser >> reduceActionForRules3: nodes [ - ^ (nodes at: 1) - parserClass: (nodes at: 2); - yourself -] - -{ #category : #'generated-reduction actions' } -SmaCCRewriteRuleFileParser >> reduceActionForRules4: nodes [ - ^ (nodes at: 1) - import: (nodes at: 2); - yourself -] - -{ #category : #'generated-reduction actions' } -SmaCCRewriteRuleFileParser >> reduceActionForStartSmalltalkExpression1: nodes [ - ^ self scanSmalltalkExpression -] - -{ #category : #'generated-reduction actions' } -SmaCCRewriteRuleFileParser >> reduceActionForStartStringExpression1: nodes [ - ^ self scanStringExpression -] - -{ #category : #'generated-reduction actions' } -SmaCCRewriteRuleFileParser >> reduceActionForTransformation1: nodes [ - ^ SmaCCRewriteStringTransformation on: (nodes at: 1) -] - -{ #category : #'generated-reduction actions' } -SmaCCRewriteRuleFileParser >> reduceActionForTransformation2: nodes [ - ^ SmaCCRewriteCodeTransformation on: (nodes at: 1) -] - -{ #category : #'generated-reduction actions' } -SmaCCRewriteRuleFileParser >> reduceActionForVariable1: nodes [ - ^ Array with: false with: (nodes at: 2) value -] - -{ #category : #'generated-reduction actions' } -SmaCCRewriteRuleFileParser >> reduceActionForVariable2: nodes [ - ^ Array with: true with: (nodes at: 2) value -] - -{ #category : #'generated-reduction actions' } -SmaCCRewriteRuleFileParser >> reduceActionForVariableList1: nodes [ - ^ OrderedCollection new -] - -{ #category : #'generated-reduction actions' } -SmaCCRewriteRuleFileParser >> reduceActionForVariableList2: nodes [ - ^ (nodes at: 1) - add: (nodes at: 2); - yourself -] - -{ #category : #private } -SmaCCRewriteRuleFileParser >> scanSmalltalkExpression [ - ^ scanner scanSmalltalkExpression -] - -{ #category : #private } -SmaCCRewriteRuleFileParser >> scanStringExpression [ - ^ scanner scanStringExpression -] - -{ #category : #private } -SmaCCRewriteRuleFileParser >> tryAllTokens [ - ^ true -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCRewriteRuleFileScanner.class.st b/src/SmaCC_Rewrite_Engine/SmaCCRewriteRuleFileScanner.class.st deleted file mode 100644 index 2a4d7f1b6..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCRewriteRuleFileScanner.class.st +++ /dev/null @@ -1,222 +0,0 @@ -Class { - #name : #SmaCCRewriteRuleFileScanner, - #superclass : #SmaCCScanner, - #classInstVars : [ - 'rewriter' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #'generated-initialization' } -SmaCCRewriteRuleFileScanner class >> initializeKeywordMap [ - keywordMap := Dictionary new. - #(#(13 'Import' 9) #(13 'Parser' 10)) - do: [ :each | - (keywordMap at: each first ifAbsentPut: [ Dictionary new ]) - at: (each at: 2) - put: each last ]. - ^ keywordMap -] - -{ #category : #accessing } -SmaCCRewriteRuleFileScanner class >> rewriter [ - ^ rewriter -] - -{ #category : #accessing } -SmaCCRewriteRuleFileScanner class >> rewriter: aParseTreeRewriter [ - rewriter := aParseTreeRewriter -] - -{ #category : #generated } -SmaCCRewriteRuleFileScanner >> emptySymbolTokenId [ - ^ 34 -] - -{ #category : #generated } -SmaCCRewriteRuleFileScanner >> errorTokenId [ - ^ 35 -] - -{ #category : #private } -SmaCCRewriteRuleFileScanner >> fixExpression: expression [ - | rewriter tree | - rewriter := self class rewriter. - rewriter isNil - ifTrue: [ ^ expression ]. - tree := RBParser parseExpression: expression. - [ rewriter executeTree: tree ] whileTrue: [ tree := rewriter tree ]. - ^ tree formattedCode -] - -{ #category : #private } -SmaCCRewriteRuleFileScanner >> isValidSmalltalk: aString [ - RBParser parseExpression: aString onError: [ :e :p | ^ false ]. - ^ true -] - -{ #category : #generated } -SmaCCRewriteRuleFileScanner >> scan1 [ - [ self step. - currentCharacter == $" - ifTrue: [ self recordMatch: #(15). - self step. - currentCharacter == $" - ifTrue: [ ^ self scan1 ]. - ^ self reportLastMatch ]. - true ] whileTrue -] - -{ #category : #generated } -SmaCCRewriteRuleFileScanner >> scan2 [ - [ self step. - currentCharacter == $! - ifTrue: [ self recordMatch: #(16). - self step. - currentCharacter == $! - ifTrue: [ ^ self scan2 ]. - ^ self reportLastMatch ]. - true ] whileTrue -] - -{ #category : #generated } -SmaCCRewriteRuleFileScanner >> scan3 [ - [ self step. - currentCharacter == $' - ifTrue: [ self recordMatch: #(14). - self step. - currentCharacter == $' - ifTrue: [ ^ self scan3 ]. - ^ self reportLastMatch ]. - true ] whileTrue -] - -{ #category : #generated } -SmaCCRewriteRuleFileScanner >> scan4 [ - [ self recordMatch: #(13). - self step. - currentCharacter == $. - ifTrue: [ self step. - (currentCharacter isLetter or: [ currentCharacter == $_ ]) - ifTrue: [ ^ self scan4 ]. - ^ self reportLastMatch ]. - currentCharacter isAlphaNumeric or: [ currentCharacter == $_ ] ] - whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCRewriteRuleFileScanner >> scanForToken [ - self step. - currentCharacter == $" - ifTrue: [ ^ self scan1 ]. - currentCharacter == $# - ifTrue: - [ ^ self scanForTokenX6 ]. - currentCharacter == $' - ifTrue: [ ^ self scan3 ]. - ^ self scanForTokenX7 -] - -{ #category : #generated } -SmaCCRewriteRuleFileScanner >> scanForTokenX1 [ - self recordMatch: #(4). - self step. - currentCharacter == $> - ifTrue: [ ^ self recordAndReportMatch: #(5) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCRewriteRuleFileScanner >> scanForTokenX2 [ - [ self recordMatch: #(17). - self step. - currentCharacter isSeparator ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCRewriteRuleFileScanner >> scanForTokenX3 [ - (self scanForString: '>>') - ifTrue: [ ^ self recordAndReportMatch: #(8) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCRewriteRuleFileScanner >> scanForTokenX4 [ - (self scanForString: '<<') - ifTrue: [ ^ self recordAndReportMatch: #(7) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCRewriteRuleFileScanner >> scanForTokenX5 [ - self step. - currentCharacter == $! - ifTrue: [ ^ self scan2 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCRewriteRuleFileScanner >> scanForTokenX6 [ - self step. - currentCharacter == $! - ifTrue: [ ^ self scanForTokenX5 ]. - ^ self scan2 -] - -{ #category : #generated } -SmaCCRewriteRuleFileScanner >> scanForTokenX7 [ - currentCharacter == $( - ifTrue: [ ^ self recordAndReportMatch: #(1) ]. - currentCharacter == $) - ifTrue: [ ^ self recordAndReportMatch: #(2) ]. - currentCharacter == $+ - ifTrue: [ ^ self recordAndReportMatch: #(3) ]. - currentCharacter == $- - ifTrue: - [ ^ self scanForTokenX1 ]. - currentCharacter == $: - ifTrue: [ ^ self recordAndReportMatch: #(6) ]. - currentCharacter == $< - ifTrue: - [ ^ self scanForTokenX4 ]. - currentCharacter == $> - ifTrue: - [ ^ self scanForTokenX3 ]. - currentCharacter == $[ - ifTrue: [ ^ self recordAndReportMatch: #(11) ]. - currentCharacter == $] - ifTrue: [ ^ self recordAndReportMatch: #(12) ]. - currentCharacter isSeparator - ifTrue: - [ ^ self scanForTokenX2 ]. - (currentCharacter isLetter or: [ currentCharacter == $_ ]) - ifTrue: [ ^ self scan4 ]. - ^ self reportLastMatch -] - -{ #category : #private } -SmaCCRewriteRuleFileScanner >> scanSmalltalkExpression [ - | expression | - expression := ''. - [ stream atEnd - ifTrue: [ self error: 'Invalid Smalltalk expression' ]. - expression := expression , (stream upTo: $]). - self isValidSmalltalk: expression ] whileFalse: [ expression := expression copyWith: $] ]. - stream position: stream position - 1. - ^ self fixExpression: expression -] - -{ #category : #private } -SmaCCRewriteRuleFileScanner >> scanStringExpression [ - | string | - string := stream upToAll: '<<<'. - stream position: stream position - 3. - ^ string -] - -{ #category : #generated } -SmaCCRewriteRuleFileScanner >> tokenActions [ - ^ #(nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil #whitespace) -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCRewriteStringTransformation.class.st b/src/SmaCC_Rewrite_Engine/SmaCCRewriteStringTransformation.class.st deleted file mode 100644 index 3e409778c..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCRewriteStringTransformation.class.st +++ /dev/null @@ -1,58 +0,0 @@ -Class { - #name : #SmaCCRewriteStringTransformation, - #superclass : #SmaCCRewriteTransformation, - #instVars : [ - 'string', - 'expression' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #'instance creation' } -SmaCCRewriteStringTransformation class >> on: aString [ - ^ self new - string: aString; - yourself -] - -{ #category : #accessing } -SmaCCRewriteStringTransformation >> expression [ - ^ expression - ifNil: [ expression := SmaCCReplaceExpressionParser parse: self string ] -] - -{ #category : #'initialize-release' } -SmaCCRewriteStringTransformation >> initialize [ - super initialize. - string := '' -] - -{ #category : #public } -SmaCCRewriteStringTransformation >> saveOn: aStream [ - aStream - nextPutAll: '>>>'; - nextPutAll: self string; - nextPutAll: '<<<' -] - -{ #category : #'initialize-release' } -SmaCCRewriteStringTransformation >> string [ - ^ string ifNil: [ '' ] -] - -{ #category : #'initialize-release' } -SmaCCRewriteStringTransformation >> string: aString [ - string := aString. - expression := nil. - self modified -] - -{ #category : #transforming } -SmaCCRewriteStringTransformation >> transformUsingContext: aSmaCCRewriteMatchContext [ - | newSource | - newSource := self expression - evaluateInContext: aSmaCCRewriteMatchContext. - aSmaCCRewriteMatchContext - replace: aSmaCCRewriteMatchContext match - with: newSource -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCRewriteTransformation.class.st b/src/SmaCC_Rewrite_Engine/SmaCCRewriteTransformation.class.st deleted file mode 100644 index 8dec78885..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCRewriteTransformation.class.st +++ /dev/null @@ -1,53 +0,0 @@ -Class { - #name : #SmaCCRewriteTransformation, - #superclass : #Object, - #instVars : [ - 'rewrite' - ], - #classVars : [ - 'HaltBlock' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #accessing } -SmaCCRewriteTransformation class >> haltBlock [ - ^ HaltBlock ifNil: [ [ :rewrite :node | false ] ] -] - -{ #category : #accessing } -SmaCCRewriteTransformation class >> haltBlock: aBlock [ - HaltBlock := aBlock -] - -{ #category : #public } -SmaCCRewriteTransformation >> modified [ - rewrite notNil - ifTrue: [ rewrite modified ] -] - -{ #category : #copying } -SmaCCRewriteTransformation >> postCopy [ - super postCopy. - rewrite := nil -] - -{ #category : #accessing } -SmaCCRewriteTransformation >> rewrite [ - ^ rewrite -] - -{ #category : #accessing } -SmaCCRewriteTransformation >> rewrite: aSmaCCRewrite [ - rewrite := aSmaCCRewrite -] - -{ #category : #saving } -SmaCCRewriteTransformation >> saveOn: aStream [ - self subclassResponsibility -] - -{ #category : #transforming } -SmaCCRewriteTransformation >> transformUsingContext: aSmaCCRewriteMatchContext [ - self subclassResponsibility -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCRewriteTreeMatch.class.st b/src/SmaCC_Rewrite_Engine/SmaCCRewriteTreeMatch.class.st deleted file mode 100644 index 4299594ae..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCRewriteTreeMatch.class.st +++ /dev/null @@ -1,102 +0,0 @@ -Class { - #name : #SmaCCRewriteTreeMatch, - #superclass : #SmaCCRewriteMatch, - #instVars : [ - 'startingState', - 'source', - 'trees' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #testing } -SmaCCRewriteTreeMatch >> canMatch: aClass [ - ^ self trees - anySatisfy: [ :each | each class == aClass or: [ each isKindOf: SmaCCPatternNode ] ] -] - -{ #category : #printing } -SmaCCRewriteTreeMatch >> displayOn: aStream [ - aStream - nextPutAll: - ((source isNil or: [ source isEmpty ]) - ifTrue: [ '"Empty"' ] - ifFalse: [ source ]) -] - -{ #category : #'initialize-release' } -SmaCCRewriteTreeMatch >> initialize [ - super initialize. - source := '' -] - -{ #category : #matching } -SmaCCRewriteTreeMatch >> match: aSmaCCRewriteMatchContext [ - | context | - 1 to: self trees size do: - [ :i | - context := Dictionary new. - ((trees at: i) - match: aSmaCCRewriteMatchContext match - inContext: context) - ifTrue: [ ^ context ] ]. - ^ nil -] - -{ #category : #public } -SmaCCRewriteTreeMatch >> saveOn: aStream [ - startingState notNil - ifTrue: [ aStream - nextPutAll: startingState; - cr ]. - aStream - nextPutAll: '>>>'; - nextPutAll: source; - nextPutAll: '<<<' -] - -{ #category : #public } -SmaCCRewriteTreeMatch >> source [ - ^ source -] - -{ #category : #public } -SmaCCRewriteTreeMatch >> source: aString [ - source := aString. - trees := nil. - self modified -] - -{ #category : #public } -SmaCCRewriteTreeMatch >> startingState [ - ^ startingState -] - -{ #category : #public } -SmaCCRewriteTreeMatch >> startingState: aString [ - startingState := aString. - self modified -] - -{ #category : #private } -SmaCCRewriteTreeMatch >> startingStateIndex [ - startingState isNil - ifTrue: [ ^ 1 ]. - ^ self parserClass - perform: ('startingStateFor' , startingState) asSymbol -] - -{ #category : #accessing } -SmaCCRewriteTreeMatch >> trees [ - ^ trees - ifNil: [ trees := [ startingState isNil - ifTrue: [ self parserClass parseAndCacheAllPossibleStates: source ] - ifFalse: [ self parserClass parseAndCacheAll: source startingAt: self startingStateIndex ] ] - on: SmaCCParserError - do: [ :ex | ex return: #() ] ] -] - -{ #category : #accessing } -SmaCCRewriteTreeMatch >> trees: aCollection [ - trees := aCollection -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCRewriteTypeMatch.class.st b/src/SmaCC_Rewrite_Engine/SmaCCRewriteTypeMatch.class.st deleted file mode 100644 index b59121e18..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCRewriteTypeMatch.class.st +++ /dev/null @@ -1,135 +0,0 @@ -Class { - #name : #SmaCCRewriteTypeMatch, - #superclass : #SmaCCRewriteMatch, - #instVars : [ - 'nodeClass', - 'code', - 'method', - 'enableDebug' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #'instance creation' } -SmaCCRewriteTypeMatch class >> on: aClass [ - ^ self new - enableDebug: false; - nodeClass: aClass; - yourself -] - -{ #category : #testing } -SmaCCRewriteTypeMatch >> canMatch: aClass [ - ^ aClass includesBehavior: nodeClass -] - -{ #category : #accessing } -SmaCCRewriteTypeMatch >> code [ - ^ code -] - -{ #category : #accessing } -SmaCCRewriteTypeMatch >> code: aString [ - code := aString. - method := nil. - self modified -] - -{ #category : #matching } -SmaCCRewriteTypeMatch >> codeMatches: aSmaCCRewriteMatchContext [ - (code isNil or: [ code isEmpty ]) - ifTrue: [ ^ true ]. - self class haltBlock - ifNotNil: [ :block | - (block value: rewrite value: aSmaCCRewriteMatchContext match) - ifTrue: [ ^ (aSmaCCRewriteMatchContext debugMethod: self method message: rewrite displayString) == true ] ]. - ^ (enableDebug and: [ SmaCCRewriteProcessor debug ]) - ifTrue: [ self methodMatches: aSmaCCRewriteMatchContext ] - ifFalse: [ [ self methodMatches: aSmaCCRewriteMatchContext ] - on: Error - do: [ :ex | ex return: false ] ] -] - -{ #category : #printing } -SmaCCRewriteTypeMatch >> displayOn: aStream [ - aStream nextPutAll: nodeClass name -] - -{ #category : #accessing } -SmaCCRewriteTypeMatch >> enableDebug [ - ^ enableDebug -] - -{ #category : #accessing } -SmaCCRewriteTypeMatch >> enableDebug: aBoolean [ - enableDebug := aBoolean -] - -{ #category : #'initialize-release' } -SmaCCRewriteTypeMatch >> initialize [ - super initialize. - nodeClass := SmaCCParseNode. - code := ''. - enableDebug := false -] - -{ #category : #matching } -SmaCCRewriteTypeMatch >> match: aSmaCCRewriteMatchContext [ - | dictionary | - (aSmaCCRewriteMatchContext match isKindOf: nodeClass) - ifFalse: [ ^ nil ]. - (self codeMatches: aSmaCCRewriteMatchContext) - ifFalse: [ ^ nil ]. - dictionary := Dictionary new. - aSmaCCRewriteMatchContext match - allGettersDo: - [ :each | - dictionary - at: (SmaCCPatternToken value: each asString) - put: (aSmaCCRewriteMatchContext match perform: each) ]. - ^ dictionary -] - -{ #category : #private } -SmaCCRewriteTypeMatch >> method [ - method isNil - ifTrue: [ | tree | - tree := RBParser parseMethod: 'code ' , code. - tree body statements isEmpty - ifTrue: [ ^ method := Object compiledMethodAt: #notNil ]. - tree body addReturn. - method := SmaCCRewriteMatchContext compiledMethodFor: tree formattedCode ]. - ^ method -] - -{ #category : #matching } -SmaCCRewriteTypeMatch >> methodMatches: aSmaCCRewriteMatchContext [ - ^ (self method valueWithReceiver: aSmaCCRewriteMatchContext arguments: #()) = true -] - -{ #category : #accessing } -SmaCCRewriteTypeMatch >> nodeClass [ - ^ nodeClass -] - -{ #category : #'initialize-release' } -SmaCCRewriteTypeMatch >> nodeClass: aClass [ - nodeClass := aClass. - self modified -] - -{ #category : #saving } -SmaCCRewriteTypeMatch >> saveOn: aStream [ - aStream - nextPutAll: - (nodeClass isNil - ifTrue: [ 'nil' ] - ifFalse: [ nodeClass name ]). - (code isNil or: [ code isEmpty ]) - ifTrue: [ ^ self ]. - aStream - cr; - nextPut: $[; - nextPutAll: code; - nextPut: $] -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCStringReplaceExpression.class.st b/src/SmaCC_Rewrite_Engine/SmaCCStringReplaceExpression.class.st deleted file mode 100644 index 00d62193f..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCStringReplaceExpression.class.st +++ /dev/null @@ -1,33 +0,0 @@ -Class { - #name : #SmaCCStringReplaceExpression, - #superclass : #SmaCCReplaceExpression, - #instVars : [ - 'string' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #generated } -SmaCCStringReplaceExpression >> acceptVisitor: aReplaceVisitor [ - ^ aReplaceVisitor visitStringReplace: self -] - -{ #category : #evaluating } -SmaCCStringReplaceExpression >> evaluateInContext: aSmaCCRewriteMatchContext [ - ^ string value -] - -{ #category : #generated } -SmaCCStringReplaceExpression >> string [ - ^ string -] - -{ #category : #generated } -SmaCCStringReplaceExpression >> string: aSmaCCToken [ - string := aSmaCCToken -] - -{ #category : #generated } -SmaCCStringReplaceExpression >> tokenVariables [ - ^ #(#string) -] diff --git a/src/SmaCC_Rewrite_Engine/SmaCCTransformationToolkitModel.class.st b/src/SmaCC_Rewrite_Engine/SmaCCTransformationToolkitModel.class.st deleted file mode 100644 index 6dfd97216..000000000 --- a/src/SmaCC_Rewrite_Engine/SmaCCTransformationToolkitModel.class.st +++ /dev/null @@ -1,393 +0,0 @@ -Class { - #name : #SmaCCTransformationToolkitModel, - #superclass : #Model, - #instVars : [ - 'modified', - 'files', - 'inputParserClass', - 'validationParserClass', - 'rewrites', - 'outputDirectory', - 'server', - 'runOnServer', - 'createSubdirectories', - 'commonParentDirectory' - ], - #category : #'SmaCC_Rewrite_Engine' -} - -{ #category : #'actions-rewrites' } -SmaCCTransformationToolkitModel >> addTransformation: aSmaCCAbstractRewrite under: aSmaCCRewriteFile [ - self - addTransformation: aSmaCCAbstractRewrite - under: aSmaCCRewriteFile - before: nil -] - -{ #category : #'actions-rewrites' } -SmaCCTransformationToolkitModel >> addTransformation: aSmaCCAbstractRewrite under: aSmaCCRewriteFile before: anotherSmaCCAbstractRewrite [ - anotherSmaCCAbstractRewrite isNil - ifTrue: [ aSmaCCRewriteFile addTransformation: aSmaCCAbstractRewrite ] - ifFalse: - [ aSmaCCRewriteFile - addTransformation: aSmaCCAbstractRewrite - before: anotherSmaCCAbstractRewrite ]. - self - changed: #addTransformation:under: - with: - (Array with: aSmaCCAbstractRewrite with: aSmaCCRewriteFile) -] - -{ #category : #testing } -SmaCCTransformationToolkitModel >> areRewritesModified [ - ^ self rewrites notNil and: [ self rewrites isModified ] -] - -{ #category : #running } -SmaCCTransformationToolkitModel >> commonParentDirectory [ - | common | - commonParentDirectory notNil - ifTrue: [ ^ commonParentDirectory ]. - (self files isEmpty or: [ self createSubdirectories not ]) - ifTrue: [ ^ '' ]. - common := self files first asFileReference parent pathString. - self files - do: [ :each | - [ common isEmpty or: [ each beginsWith: common ] ] - whileFalse: [ common := (common isEmpty - or: [ (common size = 3 and: [ (common at: 2) = $: ]) or: [ common size = 1 and: [ common first = $/ ] ] ]) - ifTrue: [ '' ] - ifFalse: [ (common copyFrom: 1 to: common size - 1) asFileReference parent pathString ] ] ]. - ^ common -] - -{ #category : #accessing } -SmaCCTransformationToolkitModel >> commonParentDirectory: aString [ - commonParentDirectory := aString -] - -{ #category : #accessing } -SmaCCTransformationToolkitModel >> createSubdirectories [ - ^ createSubdirectories ifNil: [ false ] -] - -{ #category : #accessing } -SmaCCTransformationToolkitModel >> createSubdirectories: aBoolean [ - createSubdirectories := aBoolean. - modified := true. - self changed: #createSubdirectories with: aBoolean -] - -{ #category : #accessing } -SmaCCTransformationToolkitModel >> files [ - ^ files ifNil: [ #() ] -] - -{ #category : #accessing } -SmaCCTransformationToolkitModel >> files: aCollection [ - files := aCollection. - modified := true. - self changed: #files with: aCollection -] - -{ #category : #'initialize/release' } -SmaCCTransformationToolkitModel >> initialize [ - super initialize. - modified := false. - rewrites := SmaCCRewriteFile new -] - -{ #category : #accessing } -SmaCCTransformationToolkitModel >> inputParserClass [ - ^ inputParserClass -] - -{ #category : #accessing } -SmaCCTransformationToolkitModel >> inputParserClass: aSmaCCParserClass [ - inputParserClass := aSmaCCParserClass. - modified := true. - self changed: #inputParserClass with: aSmaCCParserClass -] - -{ #category : #testing } -SmaCCTransformationToolkitModel >> isModified [ - ^ modified or: [ self areRewritesModified ] -] - -{ #category : #testing } -SmaCCTransformationToolkitModel >> isModified: aBoolean [ - modified := aBoolean -] - -{ #category : #actions } -SmaCCTransformationToolkitModel >> loadFile: aString [ - aString asFileReference - readStreamDo: [ :stream | - self class compiler - source: stream contents; - logged: false; - receiver: self; - evaluate. - self isModified: false ] -] - -{ #category : #public } -SmaCCTransformationToolkitModel >> loadRewriteFile: aString [ - aString isNil - ifTrue: [ ^ self ]. - self rewrites: (self openRewriteFile: aString) -] - -{ #category : #running } -SmaCCTransformationToolkitModel >> localRunOn: aCollection [ - SmaCCRewriteProcessor new - rules: self rewrites; - parserClass: self inputParserClass; - validationParserClass: self validationParserClass; - files: aCollection; - outputDirectory: self outputDirectory; - baseDirectory: self commonParentDirectory; - processAllNotifying: [ :each | self changed: #resultAdded with: each ] -] - -{ #category : #'actions-rewrites' } -SmaCCTransformationToolkitModel >> openRewriteFile: filename [ - ^ filename asFileReference exists - ifTrue: [ SmaCCRewriteRuleFileParser parseFile: filename ] - ifFalse: [ SmaCCRewriteFile new - filename: filename; - yourself ] -] - -{ #category : #accessing } -SmaCCTransformationToolkitModel >> outputDirectory [ - ^ outputDirectory ifNil: [ '' ] -] - -{ #category : #accessing } -SmaCCTransformationToolkitModel >> outputDirectory: aString [ - outputDirectory := aString. - modified := true. - self changed: #outputDirectory with: aString -] - -{ #category : #'actions-rewrites' } -SmaCCTransformationToolkitModel >> removeTransformation: aSmaCCAbstractRewrite [ - aSmaCCAbstractRewrite parent - removeTransformation: aSmaCCAbstractRewrite. - self changed: #removedTransformation: with: aSmaCCAbstractRewrite -] - -{ #category : #accessing } -SmaCCTransformationToolkitModel >> rewrites [ - ^ rewrites -] - -{ #category : #accessing } -SmaCCTransformationToolkitModel >> rewrites: aSmaCCRewrite [ - rewrites := aSmaCCRewrite. - modified := true. - self changed: #rewrites with: aSmaCCRewrite -] - -{ #category : #'actions-running' } -SmaCCTransformationToolkitModel >> runOn: tranformationFiles [ - self runOnServer - ifTrue: [ self serverRunOn: tranformationFiles ] - ifFalse: [ self localRunOn: tranformationFiles ] -] - -{ #category : #accessing } -SmaCCTransformationToolkitModel >> runOnServer [ - ^ runOnServer ifNil: [ false ] -] - -{ #category : #accessing } -SmaCCTransformationToolkitModel >> runOnServer: aBoolean [ - runOnServer := aBoolean. - modified := true. - self changed: #runOnServer with: aBoolean -] - -{ #category : #public } -SmaCCTransformationToolkitModel >> saveRewrites [ - self rewrites save -] - -{ #category : #public } -SmaCCTransformationToolkitModel >> saveTo: filename [ - filename asFileReference - ensureDelete; - writeStreamDo: [ :stream | - stream - nextPutAll: 'self'; - cr; - tab; - nextPutAll: 'inputParserClass: '; - nextPutAll: self inputParserClass storeString; - nextPut: $;; - cr; - tab; - nextPutAll: 'validationParserClass: '; - nextPutAll: self validationParserClass storeString; - nextPut: $;; - cr; - tab; - nextPutAll: 'loadRewriteFile: '; - nextPutAll: self rewrites filename storeString; - nextPut: $;; - cr; - tab; - nextPutAll: 'files: '; - nextPutAll: self files asArray storeString; - nextPut: $;; - cr; - tab; - nextPutAll: 'outputDirectory: '; - nextPutAll: self outputDirectory storeString; - nextPut: $;; - cr; - tab; - nextPutAll: 'createSubdirectories: '; - nextPutAll: self createSubdirectories storeString; - nextPut: $;; - cr; - tab; - nextPutAll: 'server: '; - nextPutAll: self server storeString; - nextPut: $;; - cr; - tab; - nextPutAll: 'runOnServer: '; - nextPutAll: self runOnServer storeString ]. - modified := false. - self areRewritesModified - ifTrue: [ self saveRewrites ] -] - -{ #category : #accessing } -SmaCCTransformationToolkitModel >> server [ - ^ (server isNil or: [ server isEmpty ]) - ifTrue: [ 'localhost' ] - ifFalse: [ server ] -] - -{ #category : #accessing } -SmaCCTransformationToolkitModel >> server: aString [ - server := aString. - modified := true. - self changed: #server with: aString -] - -{ #category : #private } -SmaCCTransformationToolkitModel >> serverAndPort: defaultPort from: aString [ - | serverName port parts | - parts := aString substrings: $: asString. - (parts size = 2 - and: - [ parts last notEmpty - and: [ parts last allSatisfy: [ :each | each isDigit ] ] ]) - ifTrue: [ serverName := parts first. - port := parts last asNumber ] - ifFalse: [ serverName := aString. - port := defaultPort ]. - ^ Array with: serverName with: port -] - -{ #category : #accessing } -SmaCCTransformationToolkitModel >> serverName [ - ^ (self serverAndPort: 36rSM from: self server) first -] - -{ #category : #accessing } -SmaCCTransformationToolkitModel >> serverPort [ - ^ (self serverAndPort: 36rSM from: self server) last -] - -{ #category : #running } -SmaCCTransformationToolkitModel >> serverRunOn: aCollection [ - | baseString stream socket request serverStream | - baseString := 'INPUTPARSER=' , self inputParserClass name - , ';REWRITEFILE=' , self rewrites filename. - self outputDirectory notEmpty - ifTrue: - [ baseString := baseString , ';OUTPUTDIRECTORY=' - , self outputDirectory ]. - baseString := baseString , ';BASEDIRECTORY=' - , self commonParentDirectory. - self validationParserClass notNil - ifTrue: - [ baseString := baseString , ';OUTPUTPARSER=' - , self validationParserClass name ]. - stream := WriteStream on: String new. - aCollection - do: - [ :each | - stream - nextPutAll: baseString; - nextPutAll: ';FILE='; - nextPutAll: each; - nextPut: (Character value: 0) ]. - request := stream contents. - socket := Socket newTCP - connectTo: - (NetNameResolver addressForName: self serverName) - port: self serverPort; - yourself. - (serverStream := SocketStream on: socket) binary. - [ serverStream - noTimeout; - nextPut: $1 asInteger; - nextPut: (request size bitAnd: 255); - nextPut: (request size >> 8 bitAnd: 255); - nextPut: (request size >> 16 bitAnd: 255); - nextPut: (request size >> 24 bitAnd: 255); - nextPutAll: request asByteArray; - flush. - aCollection size - timesRepeat: - [ self - changed: #resultAdded - with: - (SmaCCRewriteResult - fromSocketString: - (serverStream - next: - serverStream next + (serverStream next << 8) - + (serverStream next << 16) + (serverStream next << 24)) - asString) ] ] - ensure: [ socket close ] -] - -{ #category : #running } -SmaCCTransformationToolkitModel >> terminateServer [ - | socket serverStream | - socket := Socket newTCP - connectTo: (NetNameResolver addressForName: self serverName) port: self serverPort; - yourself. - (serverStream := SocketStream on: socket) binary. - [ serverStream - nextPut: $E asInteger; - flush. - [ serverStream next ] - on: Error - do: [ :ex | "We should get here when the server quits" ex return ] ] - ensure: [ serverStream close ] -] - -{ #category : #public } -SmaCCTransformationToolkitModel >> toggleUseServer [ - self runOnServer: self runOnServer not -] - -{ #category : #accessing } -SmaCCTransformationToolkitModel >> validationParserClass [ - ^ validationParserClass -] - -{ #category : #accessing } -SmaCCTransformationToolkitModel >> validationParserClass: aSmaCCParserClass [ - validationParserClass := aSmaCCParserClass. - modified := true. - self changed: #validationParserClass with: aSmaCCParserClass -] diff --git a/src/SmaCC_Rewrite_Engine/String.extension.st b/src/SmaCC_Rewrite_Engine/String.extension.st deleted file mode 100644 index 9f1d2f316..000000000 --- a/src/SmaCC_Rewrite_Engine/String.extension.st +++ /dev/null @@ -1,15 +0,0 @@ -Extension { #name : #String } - -{ #category : #'*SmaCC_Rewrite_Engine' } -String >> splitFirstOn: firstCharacter andThen: secondCharacter do: aBlock [ - (self substrings: firstCharacter asString) - do: - [ :each | - | index | - index := each indexOf: secondCharacter. - index ~= 0 - ifTrue: - [ aBlock - value: (each copyFrom: 1 to: index - 1) - value: (each copyFrom: index + 1 to: each size) ] ] -] diff --git a/src/SmaCC_Rewrite_Engine/package.st b/src/SmaCC_Rewrite_Engine/package.st deleted file mode 100644 index 687138c3e..000000000 --- a/src/SmaCC_Rewrite_Engine/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_Rewrite_Engine' } diff --git a/src/SmaCC_Rewrite_Engine_Command_Line/SmaCCRewriteEngineCommandLineHandler.class.st b/src/SmaCC_Rewrite_Engine_Command_Line/SmaCCRewriteEngineCommandLineHandler.class.st deleted file mode 100644 index c206963b2..000000000 --- a/src/SmaCC_Rewrite_Engine_Command_Line/SmaCCRewriteEngineCommandLineHandler.class.st +++ /dev/null @@ -1,122 +0,0 @@ -Class { - #name : #SmaCCRewriteEngineCommandLineHandler, - #superclass : #CommandLineHandler, - #instVars : [ - 'failingFiles', - 'doneCount', - 'totalCount', - 'doneSemaphore' - ], - #category : #'SmaCC_Rewrite_Engine_Command_Line' -} - -{ #category : #accessing } -SmaCCRewriteEngineCommandLineHandler class >> commandName [ - ^ 'SmaCCTransformationRunner' -] - -{ #category : #activation } -SmaCCRewriteEngineCommandLineHandler >> activate [ - self configurationFilename ifNotNil: [ :filename | ^ self runFile: filename ]. - self exitFailure: 'Please provide rewrite file to run: --file=filename.rwc' -] - -{ #category : #activation } -SmaCCRewriteEngineCommandLineHandler >> configurationFilename [ - ^ self optionAt: 'file' ifAbsent: [ self arguments detect: [ :each | each first ~= '-' ] ifNone: [ nil ] ] -] - -{ #category : #activation } -SmaCCRewriteEngineCommandLineHandler >> finished: aSmaCCRewriteResult [ - doneCount := doneCount + 1. - (aSmaCCRewriteResult isError or: [ aSmaCCRewriteResult isWarning ]) - ifTrue: [ failingFiles := failingFiles + 1. - self stderr nextPutAll: aSmaCCRewriteResult filename. - aSmaCCRewriteResult startLine notNil - ifTrue: [ self stderr - nextPut: $[; - print: aSmaCCRewriteResult startLine. - aSmaCCRewriteResult startColumn notNil - ifTrue: [ self stderr - nextPut: $:; - print: aSmaCCRewriteResult startColumn ]. - self stderr nextPut: $] ] - ifFalse: [ aSmaCCRewriteResult interval notNil - ifTrue: [ self stderr - nextPut: $[; - print: aSmaCCRewriteResult interval first; - nextPut: $-; - print: aSmaCCRewriteResult interval last; - nextPut: $] ] ]. - aSmaCCRewriteResult transformation notNil - ifTrue: [ self stderr - nextPut: $(; - nextPutAll: aSmaCCRewriteResult transformation displayString; - nextPut: $) ]. - self stderr - nextPutAll: ': '; - nextPutAll: aSmaCCRewriteResult errorString; - nextPutAll: String crlf ]. - totalCount = doneCount - ifTrue: [ doneSemaphore signal ] -] - -{ #category : #testing } -SmaCCRewriteEngineCommandLineHandler >> isLocal [ - ^ self hasOption: 'local' -] - -{ #category : #testing } -SmaCCRewriteEngineCommandLineHandler >> isServer [ - ^ self hasOption: 'server' -] - -{ #category : #activation } -SmaCCRewriteEngineCommandLineHandler >> run: aSmaCCTransformationToolkitModel [ - failingFiles := 0. - doneCount := 0. - totalCount := aSmaCCTransformationToolkitModel files size. - totalCount = 0 - ifTrue: [ self stderr - nextPutAll: 'No files specified'; - cr. - self exitSuccess ]. - doneSemaphore := Semaphore new. - aSmaCCTransformationToolkitModel addDependent: self. - aSmaCCTransformationToolkitModel perform: self runType with: aSmaCCTransformationToolkitModel files. - doneSemaphore wait. - self shouldTerminateServer - ifTrue: [ aSmaCCTransformationToolkitModel terminateServer ]. - ^ (Exit status: failingFiles) signal -] - -{ #category : #activation } -SmaCCRewriteEngineCommandLineHandler >> runFile: aString [ - | model | - model := SmaCCTransformationToolkitModel new. - [ model loadFile: aString ] - on: Error - do: [ :ex | ^ self exitFailure: 'Unable to load file: ' , aString ]. - self run: model -] - -{ #category : #activation } -SmaCCRewriteEngineCommandLineHandler >> runType [ - self isLocal - ifTrue: [ ^ #localRunOn: ]. - self isServer - ifTrue: [ ^ #localRunOn: ]. - ^ #runOn: -] - -{ #category : #testing } -SmaCCRewriteEngineCommandLineHandler >> shouldTerminateServer [ - ^ self hasOption: 'terminate' -] - -{ #category : #activation } -SmaCCRewriteEngineCommandLineHandler >> update: aSymbol with: anObject [ - aSymbol = #resultAdded - ifTrue: [ ^ self finished: anObject ]. - super update: aSymbol with: anObject -] diff --git a/src/SmaCC_Rewrite_Engine_Command_Line/package.st b/src/SmaCC_Rewrite_Engine_Command_Line/package.st deleted file mode 100644 index 927221580..000000000 --- a/src/SmaCC_Rewrite_Engine_Command_Line/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_Rewrite_Engine_Command_Line' } diff --git a/src/SmaCC_Rewrite_Engine_Tests/SmaCCRewriteTest.class.st b/src/SmaCC_Rewrite_Engine_Tests/SmaCCRewriteTest.class.st deleted file mode 100644 index 6e79db257..000000000 --- a/src/SmaCC_Rewrite_Engine_Tests/SmaCCRewriteTest.class.st +++ /dev/null @@ -1,234 +0,0 @@ -Class { - #name : #SmaCCRewriteTest, - #superclass : #TestCase, - #category : #'SmaCC_Rewrite_Engine_Tests' -} - -{ #category : #private } -SmaCCRewriteTest >> compareRewrite: sourceString isEqualTo: resultString using: aSmaCCRewriteEngine [ - | tree rewriteResult | - tree := self parserClass parse: sourceString. - rewriteResult := aSmaCCRewriteEngine rewriteTree: tree. - self assert: rewriteResult = resultString -] - -{ #category : #private } -SmaCCRewriteTest >> lispRewriter [ - | rewriter | - rewriter := SmaCCRewriteEngine new. - rewriter - rewriteRule: - (SmaCCRewriteRuleFileParser - parse: - 'Parser: SmaCCRewriteTestParser - >>>`a{testBlock: [:node | - | myParent grandParent | - myParent := node parent. - grandParent := myParent parent. - myParent class = grandParent class and: [myParent operator = grandParent operator]]}` - `op{beToken;testBlock: [:token | token value ~= ''^'']}` `b`<<< - -> - >>>`a` `b`<<< - - >>>`a`^`b`<<< - -> - >>>(expt `a` `b`)<<< - - >>>`a` `op{beToken}` `b`<<< - -> - >>>(`op` `a` `b`)<<<'). - ^ rewriter -] - -{ #category : #private } -SmaCCRewriteTest >> parserClass [ - ^ SmaCCRewriteTestParser -] - -{ #category : #private } -SmaCCRewriteTest >> postfixRewriter [ - | rewriter | - rewriter := SmaCCRewriteEngine new. - rewriter - rewriteRule: - (SmaCCRewriteRuleFileParser - parse: - 'Parser: SmaCCRewriteTestParser - >>>`a` `op{beToken}` `b`<<< - -> - >>>`a` `b` `op`<<<'). - ^ rewriter -] - -{ #category : #tests } -SmaCCRewriteTest >> testAddParens [ - | rewriter | - rewriter := SmaCCRewriteEngine new. - rewriter - rewriteRule: - (SmaCCRewriteRuleFileParser - parse: - 'Parser: SmaCCRewriteTestParser - >>>`a` `op{beToken}` `b`<<< - -> - >>>`(a)` `op` `(b)`<<<'). - self - compareRewrite: '1+(1+1)' - isEqualTo: '(1) + ((1) + (1))' - using: rewriter -] - -{ #category : #tests } -SmaCCRewriteTest >> testCodeExpressionToRemoveParens [ - | rewriter | - rewriter := SmaCCRewriteEngine new. - rewriter - rewriteRule: - (SmaCCRewriteRuleFileParser - parse: - 'Parser: SmaCCRewriteTestParser - >>>`a{testBlock: [:node | node leftParens notEmpty]}`<<< - -> - >>>``match leftParens do: [:each | self delete: each]. - match rightParens do: [:each | self delete: each]. - match nodesDo: [:each | self rewrite: each]``<<<'). - self - compareRewrite: '(1)+ ( 1 +(1))' - isEqualTo: '1+ 1 +1' - using: rewriter -] - -{ #category : #tests } -SmaCCRewriteTest >> testCodeToRemoveParens [ - | rewriter | - rewriter := SmaCCRewriteEngine new. - rewriter - rewriteRule: - (SmaCCRewriteRuleFileParser - parse: - 'SmaCCRewriteTestExpressionNode - -> - [match leftParens do: [:each | self delete: each]. - self processChildren. - match rightParens do: [:each | self delete: each]]'). - self - compareRewrite: '(1)+ ( 1 +(1))' - isEqualTo: '1+ 1 +1' - using: rewriter -] - -{ #category : #tests } -SmaCCRewriteTest >> testExpressions [ - | stream coreExpression | - stream := WriteStream on: String new. - (1 to: 25) - do: [ :i | stream nextPutAll: '1 +' ] - separatedBy: [ stream space ]. - coreExpression := stream contents. - self - compareRewrite: coreExpression , ' 1' - isEqualTo: '1 ' , coreExpression - using: self postfixRewriter -] - -{ #category : #tests } -SmaCCRewriteTest >> testLispExpressions [ - self - compareRewrite: '1+2*3^4+5' - isEqualTo: '(+ 1 (* 2 (expt 3 4)) 5)' - using: self lispRewriter -] - -{ #category : #tests } -SmaCCRewriteTest >> testMultipleInsertAfters [ - | rewriter | - rewriter := SmaCCRewriteEngine new. - rewriter - rewriteRule: - (SmaCCRewriteRuleFileParser - parse: - 'SmaCCRewriteTestBinaryExpressionNode - -> - [match parent notNil - ifTrue: - [self insert: ''()'' after: match. - self insert: ''[]'' after: match]. - self continue]'). - self compareRewrite: '1+1+1' isEqualTo: '1+1()[]+1' using: rewriter -] - -{ #category : #tests } -SmaCCRewriteTest >> testNoChanges [ - self compareRewrite: '2' isEqualTo: '2' using: self postfixRewriter -] - -{ #category : #tests } -SmaCCRewriteTest >> testOneExpression [ - self - compareRewrite: '2+3' - isEqualTo: '2 3 +' - using: self postfixRewriter -] - -{ #category : #tests } -SmaCCRewriteTest >> testTwoExpressions [ - self - compareRewrite: '1+2*3' - isEqualTo: '1 2 3 * +' - using: self postfixRewriter -] - -{ #category : #tests } -SmaCCRewriteTest >> testTypeAddParens [ - | rewriter | - rewriter := SmaCCRewriteEngine new. - rewriter - rewriteRule: - (SmaCCRewriteRuleFileParser - parse: - 'Parser: SmaCCRewriteTestParser - SmaCCRewriteTestBinaryExpressionNode - -> - >>>`(left)` `operator` `(right)`<<<'). - self - compareRewrite: '1+(1+1)' - isEqualTo: '(1) + ((1) + (1))' - using: rewriter -] - -{ #category : #tests } -SmaCCRewriteTest >> testWhitespace [ - self - compareRewrite: - '1+ - 2 - *3' - isEqualTo: - '1 - 2 - 3 * +' - using: self whitespacePostfixRewriter -] - -{ #category : #tests } -SmaCCRewriteTest >> testWithParens [ - self - compareRewrite: '1+(2+3)' - isEqualTo: '1 2 3 + +' - using: self postfixRewriter -] - -{ #category : #private } -SmaCCRewriteTest >> whitespacePostfixRewriter [ - | rewriter | - rewriter := SmaCCRewriteEngine new. - rewriter - rewriteRule: - (SmaCCRewriteRuleFileParser - parse: - 'Parser: SmaCCRewriteTestParser - >>>`a` `op{beToken}` `b`<<< - -> - >>>`\a\` `\b\` `op`<<<'). - ^ rewriter -] diff --git a/src/SmaCC_Rewrite_Engine_Tests/SmaCCRewriteTestBinaryExpressionNode.class.st b/src/SmaCC_Rewrite_Engine_Tests/SmaCCRewriteTestBinaryExpressionNode.class.st deleted file mode 100644 index 3e3d63058..000000000 --- a/src/SmaCC_Rewrite_Engine_Tests/SmaCCRewriteTestBinaryExpressionNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #SmaCCRewriteTestBinaryExpressionNode, - #superclass : #SmaCCRewriteTestExpressionNode, - #instVars : [ - 'left', - 'operator', - 'right' - ], - #category : #'SmaCC_Rewrite_Engine_Tests' -} - -{ #category : #generated } -SmaCCRewriteTestBinaryExpressionNode >> acceptVisitor: anExpressionVisitor [ - ^ anExpressionVisitor visitBinaryExpression: self -] - -{ #category : #generated } -SmaCCRewriteTestBinaryExpressionNode >> left [ - ^ left -] - -{ #category : #generated } -SmaCCRewriteTestBinaryExpressionNode >> left: aSmaCCRewriteTestExpressionNode [ - self left notNil - ifTrue: [ self left parent: nil ]. - left := aSmaCCRewriteTestExpressionNode. - self left notNil - ifTrue: [ self left parent: self ] -] - -{ #category : #generated } -SmaCCRewriteTestBinaryExpressionNode >> nodeVariables [ - ^ #(#left #right) -] - -{ #category : #generated } -SmaCCRewriteTestBinaryExpressionNode >> operator [ - ^ operator -] - -{ #category : #generated } -SmaCCRewriteTestBinaryExpressionNode >> operator: aSmaCCToken [ - operator := aSmaCCToken -] - -{ #category : #generated } -SmaCCRewriteTestBinaryExpressionNode >> right [ - ^ right -] - -{ #category : #generated } -SmaCCRewriteTestBinaryExpressionNode >> right: aSmaCCRewriteTestExpressionNode [ - self right notNil - ifTrue: [ self right parent: nil ]. - right := aSmaCCRewriteTestExpressionNode. - self right notNil - ifTrue: [ self right parent: self ] -] - -{ #category : #generated } -SmaCCRewriteTestBinaryExpressionNode >> tokenVariables [ - ^ #(#operator) -] diff --git a/src/SmaCC_Rewrite_Engine_Tests/SmaCCRewriteTestExpressionNode.class.st b/src/SmaCC_Rewrite_Engine_Tests/SmaCCRewriteTestExpressionNode.class.st deleted file mode 100644 index e86fb35f1..000000000 --- a/src/SmaCC_Rewrite_Engine_Tests/SmaCCRewriteTestExpressionNode.class.st +++ /dev/null @@ -1,46 +0,0 @@ -Class { - #name : #SmaCCRewriteTestExpressionNode, - #superclass : #SmaCCParseNode, - #instVars : [ - 'leftParens', - 'rightParens' - ], - #category : #'SmaCC_Rewrite_Engine_Tests' -} - -{ #category : #generated } -SmaCCRewriteTestExpressionNode >> acceptVisitor: anExpressionVisitor [ - ^ anExpressionVisitor visitExpression: self -] - -{ #category : #generated } -SmaCCRewriteTestExpressionNode >> ignoredCompositeTokenVariables [ - ^ #(#leftParens #rightParens) -] - -{ #category : #'generated-initialize-release' } -SmaCCRewriteTestExpressionNode >> initialize [ - super initialize. - leftParens := OrderedCollection new: 2. - rightParens := OrderedCollection new: 2. -] - -{ #category : #generated } -SmaCCRewriteTestExpressionNode >> leftParens [ - ^ leftParens -] - -{ #category : #generated } -SmaCCRewriteTestExpressionNode >> leftParens: anOrderedCollection [ - leftParens := anOrderedCollection -] - -{ #category : #generated } -SmaCCRewriteTestExpressionNode >> rightParens [ - ^ rightParens -] - -{ #category : #generated } -SmaCCRewriteTestExpressionNode >> rightParens: anOrderedCollection [ - rightParens := anOrderedCollection -] diff --git a/src/SmaCC_Rewrite_Engine_Tests/SmaCCRewriteTestExpressionNodeVisitor.class.st b/src/SmaCC_Rewrite_Engine_Tests/SmaCCRewriteTestExpressionNodeVisitor.class.st deleted file mode 100644 index a98fd088c..000000000 --- a/src/SmaCC_Rewrite_Engine_Tests/SmaCCRewriteTestExpressionNodeVisitor.class.st +++ /dev/null @@ -1,20 +0,0 @@ -Class { - #name : #SmaCCRewriteTestExpressionNodeVisitor, - #superclass : #SmaCCParseNodeVisitor, - #category : #'SmaCC_Rewrite_Engine_Tests' -} - -{ #category : #generated } -SmaCCRewriteTestExpressionNodeVisitor >> visitBinaryExpression: aBinaryExpression [ - ^ self visitExpression: aBinaryExpression -] - -{ #category : #generated } -SmaCCRewriteTestExpressionNodeVisitor >> visitExpression: anExpression [ - ^ self visitSmaCCParseNode: anExpression -] - -{ #category : #generated } -SmaCCRewriteTestExpressionNodeVisitor >> visitNumber: aNumber [ - ^ self visitExpression: aNumber -] diff --git a/src/SmaCC_Rewrite_Engine_Tests/SmaCCRewriteTestNumberNode.class.st b/src/SmaCC_Rewrite_Engine_Tests/SmaCCRewriteTestNumberNode.class.st deleted file mode 100644 index ff3ca4486..000000000 --- a/src/SmaCC_Rewrite_Engine_Tests/SmaCCRewriteTestNumberNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #SmaCCRewriteTestNumberNode, - #superclass : #SmaCCRewriteTestExpressionNode, - #instVars : [ - 'number' - ], - #category : #'SmaCC_Rewrite_Engine_Tests' -} - -{ #category : #generated } -SmaCCRewriteTestNumberNode >> acceptVisitor: anExpressionVisitor [ - ^ anExpressionVisitor visitNumber: self -] - -{ #category : #generated } -SmaCCRewriteTestNumberNode >> number [ - ^ number -] - -{ #category : #generated } -SmaCCRewriteTestNumberNode >> number: aSmaCCToken [ - number := aSmaCCToken -] - -{ #category : #generated } -SmaCCRewriteTestNumberNode >> tokenVariables [ - ^ #(#number) -] diff --git a/src/SmaCC_Rewrite_Engine_Tests/SmaCCRewriteTestParser.class.st b/src/SmaCC_Rewrite_Engine_Tests/SmaCCRewriteTestParser.class.st deleted file mode 100644 index e06b16672..000000000 --- a/src/SmaCC_Rewrite_Engine_Tests/SmaCCRewriteTestParser.class.st +++ /dev/null @@ -1,133 +0,0 @@ -Class { - #name : #SmaCCRewriteTestParser, - #superclass : #SmaCCGLRParser, - #category : #'SmaCC_Rewrite_Engine_Tests' -} - -{ #category : #'generated-accessing' } -SmaCCRewriteTestParser class >> cacheId [ - ^'2019-04-15T17:16:14.067598-05:00' -] - -{ #category : #generated } -SmaCCRewriteTestParser class >> definitionComment [ -"%glr; - -%left ""+"" ""-""; -%left ""*"" ""/""; -%right ""^""; - -%prefix SmaCCRewriteTest; -%suffix Node; -%root Expression; -%ignore_variables leftParen rightParen; - -%hierarchy Expression ( - Number - BinaryExpression - ); - - - : \d+ - ; - - - : \s+ - ; - - - : \` [^\`]* \` - ; - -Expression - : ""("" 'leftParen' Expression "")"" 'rightParen' {{Expression}} - | Expression 'left' ""+"" 'operator' Expression 'right' {{BinaryExpression}} - | Expression 'left' ""-"" 'operator' Expression 'right' {{BinaryExpression}} - | Expression 'left' ""*"" 'operator' Expression 'right' {{BinaryExpression}} - | Expression 'left' ""/"" 'operator' Expression 'right' {{BinaryExpression}} - | Expression 'left' ""^"" 'operator' Expression 'right' {{BinaryExpression}} - | 'number' {{Number}} - ;" -] - -{ #category : #generated } -SmaCCRewriteTestParser class >> reduceTable [ -^#( - #(12 1 #reduceActionForExpression7: 290823 false ) - #(12 3 #reduceActionForExpression1: 290817 false ) - #(12 3 #reduceActionForExpression4: 290820 false ) - #(12 3 #reduceActionForExpression4: 290818 false ) - #(12 3 #reduceActionForExpression4: 290819 false ) - #(12 3 #reduceActionForExpression4: 290821 false ) - #(12 3 #reduceActionForExpression4: 290822 false ) - ). -] - -{ #category : #'generated-accessing' } -SmaCCRewriteTestParser class >> scannerClass [ - ^SmaCCRewriteTestScanner -] - -{ #category : #generated } -SmaCCRewriteTestParser class >> startingStateForExpression [ - ^ 1 -] - -{ #category : #generated } -SmaCCRewriteTestParser class >> symbolNames [ - ^ #('"("' '")"' '"*"' '"+"' '"-"' '"/"' '"^"' '' '' '' 'B e g i n' 'Expression' 'E O F' 'error') -] - -{ #category : #generated } -SmaCCRewriteTestParser class >> symbolTypes [ - ^ #(#SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCRewriteTestExpressionNode #SmaCCRewriteTestExpressionNode #SmaCCToken #SmaCCErrorNode) -] - -{ #category : #generated } -SmaCCRewriteTestParser class >> transitionTable [ -^#( -#[1 0 9 0 1 0 13 0 8 0 17 0 12] -#[1 0 9 0 1 0 13 0 8 0 21 0 12] -#[0 0 6 0 2 0 3 0 4 0 5 0 6 0 7 0 13] -#[1 0 25 0 3 0 29 0 4 0 33 0 5 0 37 0 6 0 41 0 7 0 0 0 13] -#[1 0 45 0 2 0 25 0 3 0 29 0 4 0 33 0 5 0 37 0 6 0 41 0 7] -#[1 0 9 0 1 0 13 0 8 0 49 0 12] -#[1 0 9 0 1 0 13 0 8 0 53 0 12] -#[1 0 9 0 1 0 13 0 8 0 57 0 12] -#[1 0 9 0 1 0 13 0 8 0 61 0 12] -#[1 0 9 0 1 0 13 0 8 0 65 0 12] -#[0 0 10 0 2 0 3 0 4 0 5 0 6 0 7 0 13] -#[1 0 14 0 2 0 14 0 3 0 14 0 4 0 14 0 5 0 14 0 6 0 41 0 7 0 14 0 13] -#[1 0 18 0 2 0 25 0 3 0 18 0 4 0 18 0 5 0 37 0 6 0 41 0 7 0 18 0 13] -#[1 0 22 0 2 0 25 0 3 0 22 0 4 0 22 0 5 0 37 0 6 0 41 0 7 0 22 0 13] -#[1 0 26 0 2 0 26 0 3 0 26 0 4 0 26 0 5 0 26 0 6 0 41 0 7 0 26 0 13] -#[1 0 30 0 2 0 30 0 3 0 30 0 4 0 30 0 5 0 30 0 6 0 41 0 7 0 30 0 13] - ). -] - -{ #category : #'generated-reduction actions' } -SmaCCRewriteTestParser >> reduceActionForExpression1: nodes [ - | result | - result := nodes at: 2. - result addFirstToken: (nodes at: 1) to: result leftParens. - result addToken: (nodes at: 3) to: result rightParens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCRewriteTestParser >> reduceActionForExpression4: nodes [ - | result | - result := SmaCCRewriteTestBinaryExpressionNode new. - result left: (nodes at: 1). - result operator: (nodes at: 2). - result right: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SmaCCRewriteTestParser >> reduceActionForExpression7: nodes [ - | result | - result := SmaCCRewriteTestNumberNode new. - result number: (nodes at: 1). - ^ result -] diff --git a/src/SmaCC_Rewrite_Engine_Tests/SmaCCRewriteTestScanner.class.st b/src/SmaCC_Rewrite_Engine_Tests/SmaCCRewriteTestScanner.class.st deleted file mode 100644 index 63705bfc0..000000000 --- a/src/SmaCC_Rewrite_Engine_Tests/SmaCCRewriteTestScanner.class.st +++ /dev/null @@ -1,56 +0,0 @@ -Class { - #name : #SmaCCRewriteTestScanner, - #superclass : #SmaCCScanner, - #category : #'SmaCC_Rewrite_Engine_Tests' -} - -{ #category : #generated } -SmaCCRewriteTestScanner >> emptySymbolTokenId [ - ^ 13 -] - -{ #category : #generated } -SmaCCRewriteTestScanner >> errorTokenId [ - ^ 14 -] - -{ #category : #generated } -SmaCCRewriteTestScanner >> scanForToken [ - self step. - currentCharacter == $( - ifTrue: [ ^ self recordAndReportMatch: #(1) ]. - currentCharacter == $) - ifTrue: [ ^ self recordAndReportMatch: #(2) ]. - currentCharacter == $* - ifTrue: [ ^ self recordAndReportMatch: #(3) ]. - currentCharacter == $+ - ifTrue: [ ^ self recordAndReportMatch: #(4) ]. - currentCharacter == $- - ifTrue: [ ^ self recordAndReportMatch: #(5) ]. - currentCharacter == $/ - ifTrue: [ ^ self recordAndReportMatch: #(6) ]. - currentCharacter == $^ - ifTrue: [ ^ self recordAndReportMatch: #(7) ]. - currentCharacter == $` - ifTrue: [ [ self step. - currentCharacter == $` - ifTrue: [ ^ self recordAndReportMatch: #(10) ]. - true ] whileTrue ]. - currentCharacter isDigit - ifTrue: [ [ self recordMatch: #(8). - self step. - currentCharacter isDigit ] whileTrue. - ^ self reportLastMatch ]. - (currentCharacter isSeparator - or: [ currentCharacter == Character pageUp ]) - ifTrue: [ [ self recordMatch: #(9). - self step. - currentCharacter isSeparator - or: [ currentCharacter == Character pageUp ] ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SmaCCRewriteTestScanner >> tokenActions [ - ^ #(nil nil nil nil nil nil nil nil #whitespace #patternToken) -] diff --git a/src/SmaCC_Rewrite_Engine_Tests/package.st b/src/SmaCC_Rewrite_Engine_Tests/package.st deleted file mode 100644 index c7efede7a..000000000 --- a/src/SmaCC_Rewrite_Engine_Tests/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_Rewrite_Engine_Tests' } diff --git a/src/SmaCC_Rewrite_Engine_UI/GTExecuteSelectionDebugAction.extension.st b/src/SmaCC_Rewrite_Engine_UI/GTExecuteSelectionDebugAction.extension.st deleted file mode 100644 index aa9cdce61..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/GTExecuteSelectionDebugAction.extension.st +++ /dev/null @@ -1,9 +0,0 @@ -Extension { #name : #GTExecuteSelectionDebugAction } - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -GTExecuteSelectionDebugAction class >> gtTransformationActionFor: aDebugger [ - - ^ (self forDebugger: aDebugger) - codePresentationSelector: #rewriteCode; - icon: GLMUIThemeExtraIcons glamorousInspect -] diff --git a/src/SmaCC_Rewrite_Engine_UI/GTInspectSelectionDebugAction.extension.st b/src/SmaCC_Rewrite_Engine_UI/GTInspectSelectionDebugAction.extension.st deleted file mode 100644 index 126b035b7..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/GTInspectSelectionDebugAction.extension.st +++ /dev/null @@ -1,9 +0,0 @@ -Extension { #name : #GTInspectSelectionDebugAction } - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -GTInspectSelectionDebugAction class >> gtTransformationActionFor: aDebugger [ - - ^ (self forDebugger: aDebugger) - codePresentationSelector: #rewriteCode; - icon: GLMUIThemeExtraIcons glamorousInspect -] diff --git a/src/SmaCC_Rewrite_Engine_UI/GTPrintSelectionDebugAction.extension.st b/src/SmaCC_Rewrite_Engine_UI/GTPrintSelectionDebugAction.extension.st deleted file mode 100644 index bd945e355..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/GTPrintSelectionDebugAction.extension.st +++ /dev/null @@ -1,9 +0,0 @@ -Extension { #name : #GTPrintSelectionDebugAction } - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -GTPrintSelectionDebugAction class >> gtTransformationActionFor: aDebugger [ - - ^ (self forDebugger: aDebugger) - codePresentationSelector: #rewriteCode; - icon: GLMUIThemeExtraIcons glamorousInspect -] diff --git a/src/SmaCC_Rewrite_Engine_UI/ResumeDebugAction.extension.st b/src/SmaCC_Rewrite_Engine_UI/ResumeDebugAction.extension.st deleted file mode 100644 index fa77b765e..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/ResumeDebugAction.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #ResumeDebugAction } - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -ResumeDebugAction class >> gtSmaCCTransformationStackActionFor: aDebugger [ - - ^ (self forDebugger: aDebugger) icon: GLMUIThemeExtraIcons glamorousPlay -] diff --git a/src/SmaCC_Rewrite_Engine_UI/SmaCCAbstractRewrite.extension.st b/src/SmaCC_Rewrite_Engine_UI/SmaCCAbstractRewrite.extension.st deleted file mode 100644 index 619f88d76..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/SmaCCAbstractRewrite.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #SmaCCAbstractRewrite } - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCAbstractRewrite >> contextClass [ - ^ SmaCCRewriteMatchContext -] diff --git a/src/SmaCC_Rewrite_Engine_UI/SmaCCRewrite.extension.st b/src/SmaCC_Rewrite_Engine_UI/SmaCCRewrite.extension.st deleted file mode 100644 index e5f3a908b..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/SmaCCRewrite.extension.st +++ /dev/null @@ -1,128 +0,0 @@ -Extension { #name : #SmaCCRewrite } - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewrite >> buildInterfaceIn: aPresentation [ - | tabulator | - (tabulator := aPresentation tabulator) - row: [ :row | - row - column: #label size: 75; - column: #comment ] - size: 25; - row: #search; - row: #replace. - tabulator transmit - to: #label; - andShow: [ :presentation | presentation label display: 'Comment:' ]. - tabulator transmit - to: #comment; - andShow: [ :presentation | - presentation text - display: self comment; - onChangeOfPort: #text act: [ :text | self comment: text text asString ] ]. - tabulator updateOn: #match from: #yourself. - tabulator updateOn: #transformation from: #yourself. - tabulator transmit - to: #search; - transformed: [ :rewrite | rewrite match ]; - andShow: [ :presentation | self buildSearchIn: presentation ]. - tabulator transmit - to: #replace; - transformed: [ :rewrite | rewrite transformation ]; - andShow: [ :presentation | self buildReplaceIn: presentation ] -] - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewrite >> buildReplaceIn: aPresentation [ - | browser types | - browser := aPresentation tabulator. - browser - row: #type size: 25; - row: #value. - types := self transformationTypes. - browser transmit - to: #type; - andShow: [ :presentation | - presentation dropDownList - display: [ types ]; - selectedIndex: (types indexOf: self transformation class type); - onChangeOfPort: #selection act: [ :list | self changedReplaceTo: list selection ] ]. - browser transmit - to: #value; - andShow: [ :presentation | - presentation dynamic - updateOn: #transformation from: [ self announcer ]; - display: [ | composite | - composite := GLMCompositePresentation new. - transformation buildInterfaceIn: composite. - composite startOn: match. - composite ] ] -] - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewrite >> buildSearchIn: aPresentation [ - | browser types | - browser := aPresentation tabulator. - browser - row: #type size: 25; - row: #value. - types := self matchTypes. - browser transmit - to: #type; - andShow: [ :presentation | - presentation dropDownList - display: [ types ]; - selectedIndex: (types indexOf: self match class type); - onChangeOfPort: #selection act: [ :list | self changedSearchTo: list selection ] ]. - browser transmit - to: #value; - andShow: [ :presentation | - presentation dynamic - updateOn: #match from: [ self announcer ]; - display: [ | composite | - composite := GLMCompositePresentation new. - match buildInterfaceIn: composite. - composite startOn: match. - composite ] ] -] - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewrite >> changedReplaceTo: aSymbol [ - | class rewrite | - class := SmaCCRewriteTransformation withAllSubclasses detect: [ :each | each type = aSymbol ]. - self transformation class == class - ifTrue: [ ^ self ]. - rewrite := class new. - self transformation: rewrite -] - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewrite >> changedSearchTo: aSymbol [ - | class newMatch | - class := SmaCCRewriteMatch withAllSubclasses detect: [ :each | each type = aSymbol ]. - self match class == class - ifTrue: [ ^ self ]. - newMatch := class new. - self match: newMatch -] - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewrite >> matchTypes [ - ^ (SmaCCRewriteMatch allSubclasses collect: [ :each | each type ]) - asSet asSortedCollection -] - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewrite >> rewriteForMethod: aMethod [ - (match method == aMethod or: [ transformation method == aMethod ]) - ifTrue: [ ^ self ]. - ^ nil -] - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewrite >> transformationTypes [ - ^ ((SmaCCRewriteTransformation allSubclasses - collect: [ :each | each type ]) asSet - remove: nil ifAbsent: [ ]; - yourself) asSortedCollection -] diff --git a/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteCodeTransformation.extension.st b/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteCodeTransformation.extension.st deleted file mode 100644 index 85a85de74..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteCodeTransformation.extension.st +++ /dev/null @@ -1,38 +0,0 @@ -Extension { #name : #SmaCCRewriteCodeTransformation } - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewriteCodeTransformation >> buildInterfaceIn: aPresentation [ - | updating | - updating := false. - aPresentation pharoScript - display: (self code ifNil: [ '' ]); - title: 'Code'; - smalltalkClass: [ rewrite contextClass ]; - onChangeOfPort: #text - act: [ :text | - updating - ifFalse: [ self code: text text asString ] ]; - morphicSelectionAct: [ :text | - self code: (RBParser parseExpression: text text asString) formattedCode. - updating := true. - [ text update ] - ensure: [ updating := false ] ] - icon: GLMUIThemeExtraIcons glamorousPlay - on: $t - entitled: 'Format' -] - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewriteCodeTransformation >> source [ - ^ self code -] - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewriteCodeTransformation >> title [ - ^ 'Transformation' -] - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewriteCodeTransformation class >> type [ - ^ #Code -] diff --git a/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteEditor.class.st b/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteEditor.class.st deleted file mode 100644 index 0cbfc299b..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteEditor.class.st +++ /dev/null @@ -1,124 +0,0 @@ -Class { - #name : #SmaCCRewriteEditor, - #superclass : #GLMCompositePresentation, - #instVars : [ - 'treeInitializer' - ], - #category : #'SmaCC_Rewrite_Engine_UI' -} - -{ #category : #private } -SmaCCRewriteEditor >> addFileRuleTo: aRewriteFile [ - | rewrite filename | - aRewriteFile isNil - ifTrue: [ ^ self ]. - filename := UITheme current - fileSaveIn: UITheme builder - title: 'Enter rewrite rule file name' - extensions: #('rw') - path: nil. - filename isNil - ifTrue: [ ^ self ]. - rewrite := filename asFileReference exists - ifTrue: [ SmaCCRewriteRuleFileParser parseFile: filename ] - ifFalse: [ SmaCCRewriteFile new filename: filename ]. - self addRewrite: rewrite to: aRewriteFile -] - -{ #category : #private } -SmaCCRewriteEditor >> addMethodRuleTo: aRewrite [ - | rewrite | - aRewrite isNil - ifTrue: [ ^ self ]. - rewrite := SmaCCRewriteMethodDefinition new. - self addRewrite: rewrite to: aRewrite -] - -{ #category : #private } -SmaCCRewriteEditor >> addPropertyRuleTo: aRewrite [ - | rewrite | - aRewrite isNil - ifTrue: [ ^ self ]. - rewrite := SmaCCRewritePropertyDefinition new. - self addRewrite: rewrite to: aRewrite -] - -{ #category : #private } -SmaCCRewriteEditor >> addRewrite: newRewrite to: aRewrite [ - aRewrite isComposite - ifTrue: [ aRewrite addTransformation: newRewrite ] - ifFalse: [ aRewrite parent notNil - ifTrue: [ aRewrite parent addTransformation: newRewrite before: aRewrite ] ] -] - -{ #category : #private } -SmaCCRewriteEditor >> addRuleTo: aRewrite [ - | rewrite | - aRewrite isNil - ifTrue: [ ^ self ]. - rewrite := SmaCCRewrite newInstance. - self addRewrite: rewrite to: aRewrite -] - -{ #category : #building } -SmaCCRewriteEditor >> compose [ - | tabulator file | - tabulator := self tabulator. - tabulator - column: #rewrites; - column: #rule span: 3. - tabulator transmit - to: #rewrites; - transformed: [ :rewriteFile | - "Hack to get the value since sometimes it passes the wrong value" - file := (rewriteFile isKindOf: SmaCCTransformationToolkitModel) - ifTrue: [ rewriteFile rewrites ] - ifFalse: [ rewriteFile ]. - Array with: file ]; - andShow: [ :presentation | - | tree | - tree := presentation tree. - tree - title: 'Rewrites'; - updateOn: #display from: [ file announcer ]; - act: [ :t | self deleteRule: t selection ] icon: GLMUIThemeExtraIcons glamorousTrash entitled: 'Delete'; - act: [ :t | self addRuleTo: t selection ] icon: GLMUIThemeExtraIcons glamorousAdd entitled: 'Add Rule'; - act: [ :t | self addFileRuleTo: t selection ] entitled: 'Add File'; - act: [ :t | self addMethodRuleTo: t selection ] entitled: 'Add Method'; - act: [ :t | self addPropertyRuleTo: t selection ] entitled: 'Add Property'; - allExpanded; - filterOn: [ :text :each | each matches: text ]; - format: [ :rewrite | rewrite displayString ]; - children: [ :rewrite | rewrite rewrites ]. - treeInitializer value: tree ]. - tabulator transmit - from: #rewrites port: #selection; - to: #rule; - andShow: [ :presentation :rewrite | - rewrite notNil - ifTrue: [ rewrite buildInterfaceIn: presentation ] ]. - tabulator transmit - fromOutsidePort: #rewriteToSelect; - to: #rewrites port: #selection -] - -{ #category : #private } -SmaCCRewriteEditor >> deleteRule: aRewrite [ - (aRewrite isNil or: [ aRewrite parent isNil ]) - ifTrue: [ ^ self ]. - (self confirm: 'Do you want to delete: ' , aRewrite displayString) - ifFalse: [ ^ self ]. - aRewrite parent removeTransformation: aRewrite. - self update -] - -{ #category : #'initialize-release' } -SmaCCRewriteEditor >> initialize [ - super initialize. - treeInitializer := [ :tree | ] -] - -{ #category : #'initialize-release' } -SmaCCRewriteEditor >> treeInitializer: aBlock [ - treeInitializer := aBlock -] diff --git a/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteFile.extension.st b/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteFile.extension.st deleted file mode 100644 index c60e027b0..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteFile.extension.st +++ /dev/null @@ -1,36 +0,0 @@ -Extension { #name : #SmaCCRewriteFile } - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewriteFile >> buildInterfaceIn: aPresentation [ - | classes tabulator | - classes := SmaCCParser allSubclasses asSortedCollection: [ :a :b | a name < b name ]. - (tabulator := aPresentation tabulator) - row: [ :row | - row - column: #label size: 75; - column: #parser size: 250; - column: #ignore1 ] - size: 25; - row: #ignore. - tabulator transmit - to: #label; - andShow: [ :presentation | presentation label display: 'Parser:' ]. - tabulator transmit - to: #parser; - andShow: [ :presentation | - presentation dropDownList - display: [ classes ]; - selectedIndex: (classes indexOf: self parserClass); - onChangeOfPort: #selection - act: [ :list | - | parser | - parser := classes at: list selectedIndex ifAbsent: [ nil ]. - self parserClass ~= parser - ifTrue: [ self parserClass: parser ] ] ] -] - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewriteFile >> rewriteForMethod: aMethod [ - rewrites do: [ :each | (each rewriteForMethod: aMethod) ifNotNil: [ :rewrite | ^ rewrite ] ]. - ^ nil -] diff --git a/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteMatch.extension.st b/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteMatch.extension.st deleted file mode 100644 index 920c3100f..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteMatch.extension.st +++ /dev/null @@ -1,11 +0,0 @@ -Extension { #name : #SmaCCRewriteMatch } - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewriteMatch >> method [ - ^ nil -] - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewriteMatch class >> type [ - ^ nil -] diff --git a/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteMethodDefinition.extension.st b/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteMethodDefinition.extension.st deleted file mode 100644 index cb0218b8f..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteMethodDefinition.extension.st +++ /dev/null @@ -1,50 +0,0 @@ -Extension { #name : #SmaCCRewriteMethodDefinition } - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewriteMethodDefinition >> buildInterfaceIn: aPresentation [ - | tabulator | - (tabulator := aPresentation tabulator) - row: [ :row | - row - column: #label size: 75; - column: #comment ] - size: 25; - row: #source. - tabulator transmit - to: #label; - andShow: [ :presentation | presentation label display: 'Comment:' ]. - tabulator transmit - to: #comment; - andShow: [ :presentation | - presentation text - display: self comment; - onChangeOfPort: #text act: [ :text | self comment: text text asString ] ]. - tabulator updateOn: #source from: #yourself. - tabulator transmit - to: #source; - andShow: [ :presentation | - presentation pharoMethod - title: 'Source'; - smalltalkClass: [ self contextClass ]; - display: self source; - onChangeOfPort: #text act: [ :text | self source: text text asString ]; - morphicSelectionAct: [ :text | - text - text: (RBParser parseMethod: text text asString) formattedCode; - update ] - icon: GLMUIThemeExtraIcons glamorousPlay - on: $t - entitled: 'Format' ] -] - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewriteMethodDefinition >> rewriteForMethod: aMethod [ - aMethod == self method - ifTrue: [ ^ self ]. - ^ nil -] - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewriteMethodDefinition >> title [ - ^ 'Method' -] diff --git a/src/SmaCC_Rewrite_Engine_UI/SmaCCRewritePropertyDefinition.extension.st b/src/SmaCC_Rewrite_Engine_UI/SmaCCRewritePropertyDefinition.extension.st deleted file mode 100644 index a626c9ba9..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/SmaCCRewritePropertyDefinition.extension.st +++ /dev/null @@ -1,62 +0,0 @@ -Extension { #name : #SmaCCRewritePropertyDefinition } - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewritePropertyDefinition >> addGlobal [ - | variable | - variable := UITheme builder textEntry: 'Enter variable name:' title: 'Variable' entryText: ''. - (variable notNil and: [ RBScanner isVariable: variable ]) - ifTrue: [ self addGlobal: variable ] -] - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewritePropertyDefinition >> addLocal [ - | variable | - variable := UITheme builder textEntry: 'Enter variable name:' title: 'Variable' entryText: ''. - (variable notNil and: [ RBScanner isVariable: variable ]) - ifTrue: [ self addLocal: variable ] -] - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewritePropertyDefinition >> buildInterfaceIn: aPresentation [ - | tabulator | - (tabulator := aPresentation tabulator) - row: [ :row | - row - column: #label size: 75; - column: #comment ] - size: 25; - row: #locals; - row: #globals. - tabulator transmit - to: #label; - andShow: [ :presentation | presentation label display: 'Comment:' ]. - tabulator transmit - to: #comment; - andShow: [ :presentation | - presentation text - display: self comment; - onChangeOfPort: #text act: [ :text | self comment: text text asString ] ]. - tabulator transmit - to: #locals; - andShow: [ :presentation | - presentation list - title: 'Locals'; - updateOn: #locals from: [ self announcer ]; - act: [ self addLocal ] icon: GLMUIThemeExtraIcons glamorousAdd entitled: 'Add'; - act: [ :list | self removeLocal: list selection ] icon: GLMUIThemeExtraIcons glamorousRemove entitled: 'Remove'; - display: [ propertyNames asSortedCollection ] ]. - tabulator transmit - to: #globals; - andShow: [ :presentation | - presentation list - title: 'Globals'; - updateOn: #globals from: [ self announcer ]; - act: [ self addGlobal ] icon: GLMUIThemeExtraIcons glamorousAdd entitled: 'Add'; - act: [ :list | self removeGlobal: list selection ] icon: GLMUIThemeExtraIcons glamorousRemove entitled: 'Remove'; - display: [ globalValues keys asSortedCollection ] ] -] - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewritePropertyDefinition >> rewriteForMethod: aMethod [ - ^ nil -] diff --git a/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteStringTransformation.extension.st b/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteStringTransformation.extension.st deleted file mode 100644 index e6cb2b9ac..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteStringTransformation.extension.st +++ /dev/null @@ -1,19 +0,0 @@ -Extension { #name : #SmaCCRewriteStringTransformation } - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewriteStringTransformation >> buildInterfaceIn: aPresentation [ - aPresentation text - display: (self string ifNil: [ '' ]); - title: 'Replacement Pattern'; - onChangeOfPort: #text act: [ :text | self string: text text asString ] -] - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewriteStringTransformation >> source [ - ^ self string -] - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewriteStringTransformation class >> type [ - ^ #String -] diff --git a/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteTransformation.extension.st b/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteTransformation.extension.st deleted file mode 100644 index 758bcf8f1..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteTransformation.extension.st +++ /dev/null @@ -1,11 +0,0 @@ -Extension { #name : #SmaCCRewriteTransformation } - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewriteTransformation >> method [ - ^ nil -] - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewriteTransformation class >> type [ - ^ nil -] diff --git a/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteTreeMatch.extension.st b/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteTreeMatch.extension.st deleted file mode 100644 index 7e7c60379..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteTreeMatch.extension.st +++ /dev/null @@ -1,44 +0,0 @@ -Extension { #name : #SmaCCRewriteTreeMatch } - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewriteTreeMatch >> buildInterfaceIn: aPresentation [ - | browser states | - browser := aPresentation tabulator. - browser - row: [ :row | - row - column: #label size: 50; - column: #state; - column: #empty size: 1 ] - size: 25; - row: #value. - browser transmit - to: #label; - andShow: [ :presentation | presentation label display: 'State:' ]. - states := self parserStartingStates. - browser transmit - to: #state; - andShow: [ :presentation | - presentation dropDownList - display: [ states ]; - selectedIndex: (states indexOf: self startingState); - onChangeOfPort: #selection act: [ :list | self startingState: list selection ] ]. - browser transmit - to: #value; - andShow: [ :presentation | - presentation text - display: (self source ifNil: [ '' ]); - title: 'Pattern'; - onChangeOfPort: #text act: [ :text | self source: text text asString ] ] -] - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewriteTreeMatch >> parserStartingStates [ - ^ ((self parserClass class allSelectors select: [ :each | each beginsWith: 'startingStateFor' ]) - collect: [ :each | each asString copyFrom: 17 to: each size ]) asSortedCollection -] - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewriteTreeMatch class >> type [ - ^ #Pattern -] diff --git a/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteTypeMatch.extension.st b/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteTypeMatch.extension.st deleted file mode 100644 index 4a707c901..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/SmaCCRewriteTypeMatch.extension.st +++ /dev/null @@ -1,88 +0,0 @@ -Extension { #name : #SmaCCRewriteTypeMatch } - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewriteTypeMatch >> buildInterfaceIn: aPresentation [ - | browser classes | - browser := aPresentation tabulator. - browser - row: [ :row | - row - column: #label size: 50; - column: #class; - column: #debug size: 50 ] - size: 25; - row: [ :row | - row - column: #value span: 2; - column: #variables ]. - browser transmit - to: #label; - andShow: [ :presentation | presentation label display: 'Class:' ]. - classes := SmaCCParseNode withAllSubclasses asSortedCollection: [ :a :b | a name < b name ]. - browser transmit - to: #class; - andShow: [ :presentation | - presentation dropDownList - display: [ classes ]; - selectedIndex: (classes indexOf: self nodeClass); - onChangeOfPort: #selection act: [ :list | self nodeClass: list selection ] ]. - browser transmit - to: #debug; - andShow: [ :presentation | - | button | - presentation morph - morph: - ((button := SimpleSwitchMorph new) - target: self; - actionSelector: #enableDebug:; - arguments: #(); - setSwitchState: self enableDebug; - label: 'Debug'; - yourself) ]. - browser transmit - to: #value; - andShow: [ :presentation | - presentation pharoScript - display: (self code ifNil: [ '' ]); - title: 'Code'; - smalltalkClass: [ rewrite contextClass ]; - onChangeOfPort: #text act: [ :text | self code: text text asString ]; - morphicSelectionAct: [ :text | - text - text: (RBParser parseExpression: text text asString) formattedCode; - update ] - icon: GLMUIThemeExtraIcons glamorousPlay - on: $t - entitled: 'Format' ]. - browser transmit - from: #class port: #selection; - to: #variables; - andShow: [ :presentation | - presentation fastList - title: [ :selection | selection ifNil: [ 'Variables' ] ifNotNil: [ selection name ] ]; - display: [ :selection | - selection notNil - ifTrue: [ (Set new - addAll: selection allInstVarNames; - removeAll: SmaCCParseNode allInstVarNames; - yourself) asSortedCollection ] - ifFalse: [ #() ] ]; - act: [ :list | ((browser paneNamed: #class) port: #selection) value ifNotNil: [ :sel | Smalltalk tools browser openOnClass: sel ] ] - icon: GLMUIThemeExtraIcons glamorousBrowse - entitled: 'Browse' ] -] - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewriteTypeMatch >> source [ - ^ self code -] - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewriteTypeMatch >> title [ - ^ 'Match' -] - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCRewriteTypeMatch class >> type [ - ^ #Type -] diff --git a/src/SmaCC_Rewrite_Engine_UI/SmaCCSendRuleDebugAction.class.st b/src/SmaCC_Rewrite_Engine_UI/SmaCCSendRuleDebugAction.class.st deleted file mode 100644 index 7a7018ab1..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/SmaCCSendRuleDebugAction.class.st +++ /dev/null @@ -1,42 +0,0 @@ -Class { - #name : #SmaCCSendRuleDebugAction, - #superclass : #SmaCCTransformationToolkitDebugAction, - #category : #'SmaCC_Rewrite_Engine_UI' -} - -{ #category : #registration } -SmaCCSendRuleDebugAction class >> gtActionFor: aDebugger [ - - ^ (self forDebugger: aDebugger) icon: GLMUIThemeExtraIcons glamorousInto -] - -{ #category : #accessing } -SmaCCSendRuleDebugAction >> defaultKeymap [ - ^ $i meta -] - -{ #category : #accessing } -SmaCCSendRuleDebugAction >> defaultLabel [ - ^ 'Into' -] - -{ #category : #accessing } -SmaCCSendRuleDebugAction >> defaultOrder [ - ^ 90 -] - -{ #category : #accessing } -SmaCCSendRuleDebugAction >> executeAction [ - | first | - first := true. - self - stepUntil: [ :context | - first - ifTrue: [ first := false ] - ifFalse: [ self session isRewriteContext: context ] ] -] - -{ #category : #accessing } -SmaCCSendRuleDebugAction >> help [ - ^ 'Step into message' -] diff --git a/src/SmaCC_Rewrite_Engine_UI/SmaCCStepRuleDebugAction.class.st b/src/SmaCC_Rewrite_Engine_UI/SmaCCStepRuleDebugAction.class.st deleted file mode 100644 index 67f96aab3..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/SmaCCStepRuleDebugAction.class.st +++ /dev/null @@ -1,36 +0,0 @@ -Class { - #name : #SmaCCStepRuleDebugAction, - #superclass : #SmaCCTransformationToolkitDebugAction, - #category : #'SmaCC_Rewrite_Engine_UI' -} - -{ #category : #registration } -SmaCCStepRuleDebugAction class >> gtActionFor: aDebugger [ - - ^ (self forDebugger: aDebugger) icon: GLMUIThemeExtraIcons glamorousOver -] - -{ #category : #accessing } -SmaCCStepRuleDebugAction >> defaultKeymap [ - ^ $o meta -] - -{ #category : #accessing } -SmaCCStepRuleDebugAction >> defaultLabel [ - ^ 'Over' -] - -{ #category : #accessing } -SmaCCStepRuleDebugAction >> defaultOrder [ - ^ 100 -] - -{ #category : #accessing } -SmaCCStepRuleDebugAction >> executeAction [ - self session stepOver: self currentContext -] - -{ #category : #accessing } -SmaCCStepRuleDebugAction >> help [ - ^ 'Step over message' -] diff --git a/src/SmaCC_Rewrite_Engine_UI/SmaCCStepToLocationAction.class.st b/src/SmaCC_Rewrite_Engine_UI/SmaCCStepToLocationAction.class.st deleted file mode 100644 index 6a47d5cad..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/SmaCCStepToLocationAction.class.st +++ /dev/null @@ -1,49 +0,0 @@ -Class { - #name : #SmaCCStepToLocationAction, - #superclass : #SmaCCTransformationToolkitDebugAction, - #category : #'SmaCC_Rewrite_Engine_UI' -} - -{ #category : #registration } -SmaCCStepToLocationAction class >> gtActionFor: aDebugger [ - - ^ (self forDebugger: aDebugger) icon: GLMUIThemeExtraIcons glamorousInto -] - -{ #category : #accessing } -SmaCCStepToLocationAction >> defaultKeymap [ - ^ $c meta -] - -{ #category : #accessing } -SmaCCStepToLocationAction >> defaultLabel [ - ^ 'Run to Cursor' -] - -{ #category : #accessing } -SmaCCStepToLocationAction >> defaultOrder [ - ^ 100 -] - -{ #category : #accessing } -SmaCCStepToLocationAction >> executeAction [ - | first node interval nextNode | - first := true. - interval := self debugger currentInputSelectionInterval. - node := self session currentNode. - self - stepUntil: [ :context | - first - ifTrue: [ first := false ] - ifFalse: [ context isBlockContext not - and: [ (self session isRewriteContext: context) - and: [ node ~~ (nextNode := context receiver match) - and: [ (interval first between: nextNode startPosition and: nextNode stopPosition) - or: - [ (interval last between: nextNode startPosition and: nextNode stopPosition) or: [ nextNode startPosition between: interval first and: interval last ] ] ] ] ] ] ] -] - -{ #category : #accessing } -SmaCCStepToLocationAction >> help [ - ^ 'Step until we process a node at the current location' -] diff --git a/src/SmaCC_Rewrite_Engine_UI/SmaCCStepToNextNodeAction.class.st b/src/SmaCC_Rewrite_Engine_UI/SmaCCStepToNextNodeAction.class.st deleted file mode 100644 index ab597a059..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/SmaCCStepToNextNodeAction.class.st +++ /dev/null @@ -1,39 +0,0 @@ -Class { - #name : #SmaCCStepToNextNodeAction, - #superclass : #SmaCCTransformationToolkitDebugAction, - #category : #'SmaCC_Rewrite_Engine_UI' -} - -{ #category : #registration } -SmaCCStepToNextNodeAction class >> gtActionFor: aDebugger [ - - ^ (self forDebugger: aDebugger) icon: GLMUIThemeExtraIcons glamorousThrough -] - -{ #category : #accessing } -SmaCCStepToNextNodeAction >> defaultKeymap [ - ^ $n meta -] - -{ #category : #accessing } -SmaCCStepToNextNodeAction >> defaultLabel [ - ^ 'Run to Next Node' -] - -{ #category : #accessing } -SmaCCStepToNextNodeAction >> defaultOrder [ - ^ 110 -] - -{ #category : #accessing } -SmaCCStepToNextNodeAction >> executeAction [ - | nodes | - nodes := (self session transformationStack collect: [ :each | each last receiver match ]) asSet. - self - stepUntil: [ :context | context isBlockContext not and: [ (self session isRewriteContext: context) and: [ (nodes includes: context receiver match) not ] ] ] -] - -{ #category : #accessing } -SmaCCStepToNextNodeAction >> help [ - ^ 'Step until we get to another node' -] diff --git a/src/SmaCC_Rewrite_Engine_UI/SmaCCStepToNextRewriteAction.class.st b/src/SmaCC_Rewrite_Engine_UI/SmaCCStepToNextRewriteAction.class.st deleted file mode 100644 index a259367b6..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/SmaCCStepToNextRewriteAction.class.st +++ /dev/null @@ -1,41 +0,0 @@ -Class { - #name : #SmaCCStepToNextRewriteAction, - #superclass : #SmaCCTransformationToolkitDebugAction, - #category : #'SmaCC_Rewrite_Engine_UI' -} - -{ #category : #registration } -SmaCCStepToNextRewriteAction class >> gtActionFor: aDebugger [ - - ^ (self forDebugger: aDebugger) icon: GLMUIThemeExtraIcons glamorousThrough -] - -{ #category : #accessing } -SmaCCStepToNextRewriteAction >> defaultKeymap [ - ^ $t meta -] - -{ #category : #accessing } -SmaCCStepToNextRewriteAction >> defaultLabel [ - ^ 'Run to Next Rewrite' -] - -{ #category : #accessing } -SmaCCStepToNextRewriteAction >> defaultOrder [ - ^ 120 -] - -{ #category : #accessing } -SmaCCStepToNextRewriteAction >> executeAction [ - | rewrites | - rewrites := (self session transformationStack collect: [ :each | self session rewriteForContext: each last ]) asSet. - self - stepUntil: [ :context | - context isBlockContext not - and: [ (self session isRewriteContext: context) and: [ (rewrites includes: (self session rewriteForContext: context)) not ] ] ] -] - -{ #category : #accessing } -SmaCCStepToNextRewriteAction >> help [ - ^ 'Step until we get to another rewrite' -] diff --git a/src/SmaCC_Rewrite_Engine_UI/SmaCCTextPresentation.class.st b/src/SmaCC_Rewrite_Engine_UI/SmaCCTextPresentation.class.st deleted file mode 100644 index f45558c18..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/SmaCCTextPresentation.class.st +++ /dev/null @@ -1,88 +0,0 @@ -Class { - #name : #SmaCCTextPresentation, - #superclass : #GLMRubricTextPresentation, - #instVars : [ - 'morph', - 'highlights' - ], - #category : #'SmaCC_Rewrite_Engine_UI' -} - -{ #category : #highlighting } -SmaCCTextPresentation >> addHighlight: aColor from: startIndex to: stopIndex [ - highlights isNil - ifTrue: [ highlights := OrderedCollection new ]. - highlights add: (Array with: aColor with: startIndex with: stopIndex) -] - -{ #category : #highlighting } -SmaCCTextPresentation >> buildHighlight: anArray into: aHighlightCollection [ - | paragraph from to | - paragraph := morph paragraph. - from := paragraph characterBlockForIndex: (anArray at: 2). - to := paragraph characterBlockForIndex: anArray last. - from textLine = to textLine - ifTrue: [ aHighlightCollection - add: - (TextHighlightByBounds new - color: anArray first; - bounds: (from topLeft corner: to bottomRight)) ] - ifFalse: [ aHighlightCollection - add: - (TextHighlightByBounds new - color: anArray first; - bounds: (from topLeft corner: from textLine bottomRight)); - add: - (TextHighlightByBounds new - fillWidth: true; - color: anArray first; - bounds: (from bottomLeft corner: to topRight)); - add: - (TextHighlightByBounds new - color: anArray first; - bounds: (to textLine topLeft corner: to bottomRight)) ] -] - -{ #category : #highlighting } -SmaCCTextPresentation >> clearHighlights [ - highlights := nil -] - -{ #category : #copying } -SmaCCTextPresentation >> copy [ -] - -{ #category : #rendering } -SmaCCTextPresentation >> renderGlamorouslyOn: aRenderer [ - morph := super renderGlamorouslyOn: aRenderer. - ^ morph -] - -{ #category : #highlighting } -SmaCCTextPresentation >> scrollToFirstHighlight [ - | paragraph from | - (morph isNil or: [ highlights isNil or: [ highlights isEmpty ] ]) - ifTrue: [ ^ self ]. - paragraph := morph paragraph. - from := paragraph characterBlockForIndex: (highlights first at: 2). - morph scrollPane vScrollbarValue: (from textLine lineNumber - 1) / paragraph lines size -] - -{ #category : #highlighting } -SmaCCTextPresentation >> updateHighlights [ - | hlghts | - morph isNil - ifTrue: [ ^ self ]. - (highlights isNil or: [ highlights isEmpty ]) - ifTrue: [ morph highlights: #() ] - ifFalse: [ hlghts := OrderedCollection new. - highlights do: [ :each | self buildHighlight: each into: hlghts ]. - morph highlights: hlghts ]. - morph changed -] - -{ #category : #highlighting } -SmaCCTextPresentation >> updateHighlightsAndScroll [ - self updateHighlights. - self scrollToFirstHighlight -] diff --git a/src/SmaCC_Rewrite_Engine_UI/SmaCCTransformationToolkit.class.st b/src/SmaCC_Rewrite_Engine_UI/SmaCCTransformationToolkit.class.st deleted file mode 100644 index 1a50203fe..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/SmaCCTransformationToolkit.class.st +++ /dev/null @@ -1,587 +0,0 @@ -Class { - #name : #SmaCCTransformationToolkit, - #superclass : #GLMCompositePresentation, - #instVars : [ - 'filename', - 'resultsList', - 'previewResult' - ], - #category : #'SmaCC_Rewrite_Engine_UI' -} - -{ #category : #'world menu' } -SmaCCTransformationToolkit class >> menuCommandOn: aBuilder [ - - (aBuilder item: #'SmaCC Transformation Toolkit') - parent: #Tools; - order: 490.2; - help: 'SmaCC Transformation Toolkit'; - action: [ self open ]. - aBuilder withSeparatorAfter -] - -{ #category : #opening } -SmaCCTransformationToolkit class >> open [ - ^ self new open -] - -{ #category : #actions } -SmaCCTransformationToolkit >> addDirectory [ - | dir names match stream todo | - dir := UITheme builder chooseDirectory: 'Add all files in directory' path: nil. - dir isNil - ifTrue: [ ^ self ]. - names := Set new. - stream := WriteStream on: String new. - (self model inputParserClass ifNil: [ SmaCCParser ]) fileExtensions - do: [ :each | - stream - nextPut: $*; - nextPutAll: each ] - separatedBy: [ stream nextPut: $; ]. - match := stream contents. - todo := OrderedCollection with: dir. - [ todo notEmpty ] - whileTrue: [ ((dir := todo removeFirst) filesMatching: match) do: [ :each | names add: each fullName ]. - todo addAll: dir directories ]. - self addFiles: names -] - -{ #category : #actions } -SmaCCTransformationToolkit >> addFiles [ - | name | - name := self - promptForFile: 'Add file' - extensions: - ((self model inputParserClass ifNil: [ SmaCCParser ]) fileExtensions - collect: [ :each | - each first = $. - ifTrue: [ each copyFrom: 2 to: each size ] - ifFalse: [ each ] ]). - name isNil - ifTrue: [ ^ self ]. - self addFiles: (Array with: name) -] - -{ #category : #actions } -SmaCCTransformationToolkit >> addFiles: aCollection [ - | files | - files := Set withAll: self model files. - files addAll: aCollection. - self model files: files asSortedCollection asArray. - self updateModel -] - -{ #category : #private } -SmaCCTransformationToolkit >> addResult: aResult [ - self fileResults add: aResult -] - -{ #category : #building } -SmaCCTransformationToolkit >> buildConfigurationTab [ - | browser | - (browser := self tabulator) - title: 'Configuration'; - act: [ self loadConfiguration ] icon: GLMUIThemeExtraIcons glamorousOpen entitled: 'Load'; - act: [ self saveConfiguration ] icon: GLMUIThemeExtraIcons glamorousSave entitled: 'Save'; - act: [ self runAll ] icon: GLMUIThemeExtraIcons glamorousPlay entitled: 'Transform All'; - act: [ self selectInputParser ] entitled: 'Set Input Parser Class...'; - act: [ self selectValidationParser ] entitled: 'Set Validation Parser Class...'; - act: [ self setOutputDirectory ] entitled: 'Set output directory...'; - act: [ self setCreateSubdirectories ] entitled: 'Create subdirectories...'; - act: [ self setServer ] entitled: 'Set Server...'; - act: [ self setRunOnServer ] entitled: 'Run On Server...'; - act: [ self class new openOn: self entity ] entitled: 'Open another window'; - row: [ :row | - row - column: #filesLabel size: 100; - column: #files; - column: #buttons size: 102 ]; - row: #results. - browser transmit - to: #filesLabel; - andShow: [ :presentation | presentation label display: 'Files:' ]. - browser transmit - to: #files; - andShow: [ :presentation | - presentation fastList - updateOn: #files from: [ self entity ifNotNil: [ self entity announcer ] ]; - beMultiple; - display: [ :toolkit | toolkit files ]; - initialize: [ :list | list selection: self selectedFile ]; - selection: self selectedFile; - enableFilter ]. - browser transmit - from: #files port: #selection; - to: #buttons port: #selection. - browser transmit - from: #files port: #selection; - toOutsidePort: #selection. - browser transmit - to: #buttons; - andShow: [ :presentation | - presentation actionList - beVertical; - act: [ self addDirectory ] icon: GLMUIThemeExtraIcons glamorousAdd entitled: 'Add Dir'; - act: [ self addFiles ] icon: GLMUIThemeExtraIcons glamorousAdd entitled: 'Add'; - act: [ :list | self removeFiles: (self fixSelection: list selection) ] icon: GLMUIThemeExtraIcons glamorousRemove entitled: 'Remove'; - act: [ :list | - list selection notEmpty - ifTrue: [ self openResultFor: (self fixSelection: list selection) first ] ] - icon: GLMUIThemeExtraIcons glamorousPlay - entitled: 'Preview'; - act: [ :list | self runOn: (self fixSelection: list selection) ] icon: GLMUIThemeExtraIcons glamorousPlay entitled: 'Run' ]. - browser transmit - to: #results; - andShow: [ :presentation | - presentation fastTable - display: [ self fileResults ]; - updateOn: ValueAdded from: [ self fileResults instVarNamed: 'announcer' ]; - updateOn: ValueRemoved from: [ self fileResults instVarNamed: 'announcer' ]; - column: 'File' evaluated: [ :each | each filename ]; - column: 'Error' evaluated: [ :each | each errorString ifNil: [ '' ] ]; - column: 'Transformation' evaluated: [ :each | each transformation ifNil: [ '' ] ifNotNil: [ :t | t displayString ] ]; - column: 'Line' evaluated: [ :each | each startLine ifNil: [ '' ] ]; - column: 'Column' evaluated: [ :each | each startColumn ifNil: [ '' ] ] ] -] - -{ #category : #building } -SmaCCTransformationToolkit >> buildPreviewList: list in: presenter [ - presenter table - display: [ list ]; - column: 'Rewrite' evaluated: [ :each | each rewrite displayString ]; - column: 'Node' evaluated: [ :each | each nodeClass ]; - column: 'Location' evaluated: [ :each | each nodeInterval ]; - morphicSelectionAct: [ :table | self debugRewriteForNode: table selection ] - icon: GLMUIThemeExtraIcons glamorousBug - on: $d - entitled: 'Debug'; - morphicSelectionAct: [ :table | self gotoRewrite: table selection rewrite ] entitled: 'Goto Rewrite' -] - -{ #category : #building } -SmaCCTransformationToolkit >> buildPreviewTab [ - | resultPresenter sourcePresentation targetPresentation | - self dynamic - title: 'Preview'; - updateOn: ValueChanged from: [ self previewResultHolder instVarNamed: 'announcer' ]; - display: [ | presentation | - presentation := GLMCompositePresentation new. - (resultPresenter := presentation tabulator) - row: [ :row | - row - column: #input; - column: #output ] - span: 2; - row: #rewrites; - row: #rewriteSelection span: 0. - resultPresenter transmit - to: #input; - transformed: [ :each | each value ]; - andShow: [ :presenter | - (presenter custom: (sourcePresentation := SmaCCTextPresentation new)) - title: [ :result | result filename ifNil: [ 'Input' ] ifNotNil: [ :name | name asFileReference basename ] ]; - wrapped: false; - withLineNumbers: true; - display: [ :result | result inputSource ifNil: [ '' ] ] ]. - resultPresenter transmit - to: #output; - transformed: [ :each | each value ]; - andShow: [ :presenter | - presenter dynamic - presentation: [ :dynamic :each | - (dynamic custom: (targetPresentation := SmaCCTextPresentation new)) - wrapped: false; - withLineNumbers: true; - initialize: [ :text | - (each interval notNil and: [ each outputSource notNil ]) - ifTrue: [ text selectionInterval: each interval ] ]; - title: [ :result | result outputFilename ifNil: [ 'Output' ] ifNotNil: [ :name | name asFileReference basename ] ]; - display: [ :result | - | text | - text := (result outputSource ifNil: [ '' ]) asText. - text size > 0 - ifTrue: [ result interval - ifNotNil: [ :interval | - text makeColor: Color red from: interval first to: interval last. - text makeBoldFrom: interval first to: interval last ] ]. - text ]. - each additionalFiles keys asSortedCollection - do: [ :key | - dynamic text - title: key asFileReference basename; - wrapped: false; - withLineNumbers: true; - display: (each additionalFiles at: key) asString ] ] ]. - resultPresenter transmit - to: #rewrites; - andShow: [ :presenter | self buildPreviewList: #() in: presenter ]. - resultPresenter transmit - from: #input port: #selectionInterval; - to: #rewrites; - andShow: [ :presenter :interval | - self - buildPreviewList: - (interval isNil - ifTrue: [ #() ] - ifFalse: [ self result transformedString annotationsInOriginalRange: interval ]) - in: presenter ]. - resultPresenter transmit - from: #output port: #selectionInterval; - to: #rewrites; - andShow: [ :presenter :interval | - self - buildPreviewList: - (interval isNil - ifTrue: [ #() ] - ifFalse: [ self result transformedString annotationsInNewRange: interval ]) - in: presenter ]. - resultPresenter transmit - from: #rewrites port: #selection; - to: #rewriteSelection; - transformed: [ :sel | self updateInput: sourcePresentation target: targetPresentation using: sel ]. - presentation startOn: self previewResultHolder. - presentation ] -] - -{ #category : #building } -SmaCCTransformationToolkit >> buildTransformationTab [ - self dynamic - title: 'Transformations'; - act: [ :p | self loadRewrites ] icon: GLMUIThemeExtraIcons glamorousOpen entitled: 'Load'; - act: [ :p | self saveRewrites ] icon: GLMUIThemeExtraIcons glamorousSave entitled: 'Save'; - presentation: [ :presentation :each | - presentation - custom: - (SmaCCRewriteEditor new - treeInitializer: [ :tree | - tree - morphicSelectionAct: [ :presenter | self debugRewrite: presenter selection ] - icon: GLMUIThemeExtraIcons glamorousBug - on: $d - entitled: 'Debug' ]; - transformation: [ :e | self model rewrites ]; - entity: self model rewrites; - yourself) ] -] - -{ #category : #building } -SmaCCTransformationToolkit >> compose [ - self title: 'SmaCC Transformation Toolkit'. - self buildConfigurationTab. - self buildTransformationTab. - self buildPreviewTab -] - -{ #category : #actions } -SmaCCTransformationToolkit >> debugRewrite: aSmaCCRewrite [ - | block | - aSmaCCRewrite isNil - ifTrue: [ ^ self ]. - block := [ :rewrite :node | rewrite == aSmaCCRewrite ]. - self debugUsingSeachBlock: block andTransformationBlock: block -] - -{ #category : #actions } -SmaCCTransformationToolkit >> debugRewriteForNode: selection [ - self - debugUsingSeachBlock: nil - andTransformationBlock: [ :rewrite :node | - rewrite == selection rewrite - and: [ node class == selection nodeClass - and: [ node startPosition = selection nodeInterval first - and: [ node stopPosition = selection nodeInterval last ] ] ] ] -] - -{ #category : #actions } -SmaCCTransformationToolkit >> debugUsingSeachBlock: searchBlock andTransformationBlock: transformationBlock [ - SmaCCRewriteMatch haltBlock: searchBlock. - SmaCCRewriteTransformation haltBlock: transformationBlock. - [ self openResultFor: self selectedFile ] - ensure: [ SmaCCRewriteMatch haltBlock: nil. - SmaCCRewriteTransformation haltBlock: nil ] -] - -{ #category : #actions } -SmaCCTransformationToolkit >> ensureRewriteFilename [ - | name | - self model rewrites filename isNil - ifTrue: [ name := self - promptForSaveFile: 'Save Rewrites To' - extensions: #('rw'). - name isNil - ifTrue: [ ^ self ]. - self model rewrites filename: name ] -] - -{ #category : #accessing } -SmaCCTransformationToolkit >> fileResults [ - ^ resultsList ifNil: [ resultsList := CollectionValueHolder value: OrderedCollection new ] -] - -{ #category : #private } -SmaCCTransformationToolkit >> fixSelection: anArray [ - "Hack around the selection bug that may return an array or the single item" - - ^ anArray isString - ifTrue: [ Array with: anArray ] - ifFalse: [ anArray ] -] - -{ #category : #private } -SmaCCTransformationToolkit >> gotoPreviewTab [ - self pane lastActivePresentation: self previewPresentation -] - -{ #category : #private } -SmaCCTransformationToolkit >> gotoRewrite: aRewrite [ - self gotoRewritesTab. - (self rewritesPresentation pane port: #rewriteToSelect) value: aRewrite -] - -{ #category : #private } -SmaCCTransformationToolkit >> gotoRewritesTab [ - self pane lastActivePresentation: self rewritesPresentation -] - -{ #category : #'initialize-release' } -SmaCCTransformationToolkit >> initialize [ - super initialize. - self model: SmaCCTransformationToolkitModel new -] - -{ #category : #actions } -SmaCCTransformationToolkit >> loadConfiguration [ - | file | - file := self promptForFile: 'Load Configuration File' extensions: #('rwc'). - file isNil - ifTrue: [ ^ self ]. - self model: (SmaCCTransformationToolkitModel new loadFile: file). - self fileResults removeAll. - self result: SmaCCRewriteCompleteResult new -] - -{ #category : #actions } -SmaCCTransformationToolkit >> loadRewrites [ - | file | - file := self promptForFile: 'Load Transformation File' extensions: #('rw'). - file isNil - ifTrue: [ ^ self ]. - self model loadRewriteFile: file. - self updateModel -] - -{ #category : #accessing } -SmaCCTransformationToolkit >> model [ - ^ self entity -] - -{ #category : #accessing } -SmaCCTransformationToolkit >> model: aToolkitModel [ - self model notNil - ifTrue: [ self model removeDependent: self ]. - self entity: aToolkitModel. - aToolkitModel addDependent: self -] - -{ #category : #actions } -SmaCCTransformationToolkit >> openResultFor: aFilename [ - | result processor | - aFilename isNil - ifTrue: [ ^ self ]. - Cursor wait - showWhile: [ result := SmaCCRewriteCompleteResult new. - processor := SmaCCRewriteProcessor new. - processor rules: self model rewrites. - processor parserClass: self model inputParserClass. - processor validationParserClass: self model validationParserClass. - processor debug: true. - [ processor processFile: aFilename usingResult: result ] - ensure: [ processor debug: false ]. - self result: result. - self gotoPreviewTab ] -] - -{ #category : #private } -SmaCCTransformationToolkit >> outputPane [ - ^ self previewPresentation first panes detect: [ :each | each name = #output ] -] - -{ #category : #actions } -SmaCCTransformationToolkit >> parserClasses [ - ^ SmaCCParser allSubclasses - asSortedCollection: [ :a :b | a name < b name ] -] - -{ #category : #private } -SmaCCTransformationToolkit >> previewPresentation [ - ^ self presentations last -] - -{ #category : #accessing } -SmaCCTransformationToolkit >> previewResultHolder [ - ^ previewResult ifNil: [ previewResult := NewValueHolder value: SmaCCRewriteResult new ] -] - -{ #category : #private } -SmaCCTransformationToolkit >> promptForFile: aTitle extensions: anArray [ - ^ UIManager default - chooseExistingFileReference: aTitle - extensions: anArray - path: FileSystem workingDirectory -] - -{ #category : #private } -SmaCCTransformationToolkit >> promptForSaveFile: aTitle extensions: anArray [ - ^ UIManager default - chooseForSaveFileReference: aTitle - extensions: anArray - path: FileSystem workingDirectory -] - -{ #category : #actions } -SmaCCTransformationToolkit >> removeFiles: anArray [ - | files | - anArray isEmpty - ifTrue: [ ^ self ]. - (self confirm: 'Do you want to remove the files?') - ifFalse: [ ^ self ]. - files := Set withAll: self model files. - anArray do: [ :each | files remove: each ifAbsent: [ ] ]. - self model files: files asSortedCollection -] - -{ #category : #accessing } -SmaCCTransformationToolkit >> result [ - ^ self previewResultHolder value -] - -{ #category : #accessing } -SmaCCTransformationToolkit >> result: aSmaCCRewriteResult [ - self previewResultHolder value: aSmaCCRewriteResult -] - -{ #category : #private } -SmaCCTransformationToolkit >> rewritesPresentation [ - ^ self presentations at: 2 -] - -{ #category : #actions } -SmaCCTransformationToolkit >> runAll [ - self runOn: self model files -] - -{ #category : #actions } -SmaCCTransformationToolkit >> runOn: aCollection [ - (self model runOnServer and: [ self model areRewritesModified ]) - ifTrue: [ (self confirm: 'Do you want to save your transformations before running on the server?') - ifTrue: [ self saveRewrites ] ]. - self fileResults removeAllSuchThat: [ :each | aCollection includes: each filename ]. - self model runOn: aCollection -] - -{ #category : #actions } -SmaCCTransformationToolkit >> saveConfiguration [ - self ensureRewriteFilename. - filename isNil - ifTrue: [ filename := self promptForSaveFile: 'Save Configuration To' extensions: #('rwc'). - filename isNil - ifTrue: [ ^ self ] ]. - self model saveTo: filename -] - -{ #category : #actions } -SmaCCTransformationToolkit >> saveRewrites [ - self ensureRewriteFilename. - self model saveRewrites -] - -{ #category : #actions } -SmaCCTransformationToolkit >> selectInputParser [ - | class | - class := UITheme builder chooseDropList: 'Select input parser class' list: self parserClasses. - class isNil - ifTrue: [ ^ self ]. - self model inputParserClass: class -] - -{ #category : #private } -SmaCCTransformationToolkit >> selectPreviewOutputInterval: anInterval [ - (self outputPane port: #selectionInterval) value: anInterval -] - -{ #category : #actions } -SmaCCTransformationToolkit >> selectValidationParser [ - | class | - class := UITheme builder chooseDropList: 'Select validation parser class' list: self parserClasses. - class isNil - ifTrue: [ ^ self ]. - self model validationParserClass: class -] - -{ #category : #accessing } -SmaCCTransformationToolkit >> selectedFile [ - ^ ((self pane port: #selection) value - ifNotNil: [ :selection | - "Hack to work around selection changing from value to array with value" - selection isArray - ifTrue: [ selection notEmpty - ifTrue: [ selection first ] ] - ifFalse: [ selection ] ]) ifNil: [ self result filename ] -] - -{ #category : #actions } -SmaCCTransformationToolkit >> setCreateSubdirectories [ - | createSubdirectories | - createSubdirectories := UITheme builder questionWithoutCancel: 'Create subdirectories'. - self model createSubdirectories: createSubdirectories -] - -{ #category : #actions } -SmaCCTransformationToolkit >> setOutputDirectory [ - | dir | - dir := UITheme builder textEntry: 'Enter output directory name:' title: 'Directory' entryText: self model outputDirectory. - dir isNil - ifTrue: [ ^ self ]. - self model outputDirectory: dir -] - -{ #category : #actions } -SmaCCTransformationToolkit >> setRunOnServer [ - | runOnServer | - runOnServer := UITheme builder questionWithoutCancel: 'Run on server'. - self model runOnServer: runOnServer -] - -{ #category : #actions } -SmaCCTransformationToolkit >> setServer [ - | server | - server := UITheme builder textEntry: 'Enter server name:' title: 'Server' entryText: self model server. - server isNil - ifTrue: [ ^ self ]. - self model server: server -] - -{ #category : #updating } -SmaCCTransformationToolkit >> update: aSymbol with: aValue [ - super update: aSymbol with: aValue. - aSymbol = #resultAdded - ifTrue: [ self addResult: aValue ] -] - -{ #category : #building } -SmaCCTransformationToolkit >> updateInput: sourcePresentation target: targetPresentation using: selection [ - sourcePresentation clearHighlights. - targetPresentation clearHighlights. - selection notNil - ifTrue: [ sourcePresentation addHighlight: (Color red alpha: 0.2) from: selection nodeInterval first to: selection nodeInterval last. - (self result transformedString annotationRangesFor: selection) do: [ :each | targetPresentation addHighlight: (Color red alpha: 0.2) from: each first to: each last ] ]. - sourcePresentation updateHighlightsAndScroll. - targetPresentation updateHighlightsAndScroll -] - -{ #category : #actions } -SmaCCTransformationToolkit >> updateModel [ - "Hack to get things to update" - self model: self model -] diff --git a/src/SmaCC_Rewrite_Engine_UI/SmaCCTransformationToolkitDebugAction.class.st b/src/SmaCC_Rewrite_Engine_UI/SmaCCTransformationToolkitDebugAction.class.st deleted file mode 100644 index d8dfdb9e9..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/SmaCCTransformationToolkitDebugAction.class.st +++ /dev/null @@ -1,41 +0,0 @@ -Class { - #name : #SmaCCTransformationToolkitDebugAction, - #superclass : #DebugAction, - #category : #'SmaCC_Rewrite_Engine_UI' -} - -{ #category : #testing } -SmaCCTransformationToolkitDebugAction >> appliesToContext: aContext [ - ^ self session isActive -] - -{ #category : #private } -SmaCCTransformationToolkitDebugAction >> stepUntil: aBlock [ - | context process searchBlock transformationBlock previousContext searchContext found rootContext | - searchBlock := SmaCCRewriteMatch haltBlock. - transformationBlock := SmaCCRewriteTransformation haltBlock. - SmaCCRewriteMatch haltBlock: nil. - SmaCCRewriteTransformation haltBlock: nil. - [ process := self session process. - context := self currentContext. - searchContext := process suspendedContext. - previousContext := searchContext. - found := false. - [ searchContext notNil ] - whileTrue: [ found := found or: [ searchContext == context ]. - (self session isRewriteContext: searchContext) - ifTrue: [ rootContext := searchContext ]. - searchContext := searchContext sender ]. - (found and: [ rootContext notNil ]) - ifFalse: [ ^ self ]. - [ context notNil - and: [ process isTerminating not and: [ process isTerminated not and: [ process suspendedContext notNil and: [ aBlock value: context ] ] ] ] ] - whileFalse: [ previousContext == context - ifFalse: [ (context findContextSuchThat: [ :c | c == rootContext ]) isNil - ifTrue: [ ^ self session updateContextTo: context ]. - previousContext := context ]. - context := process step: context ]. - self session updateContextTo: context ] - ensure: [ SmaCCRewriteMatch haltBlock: searchBlock. - SmaCCRewriteTransformation haltBlock: transformationBlock ] -] diff --git a/src/SmaCC_Rewrite_Engine_UI/SmaCCTransformationToolkitDebugSession.class.st b/src/SmaCC_Rewrite_Engine_UI/SmaCCTransformationToolkitDebugSession.class.st deleted file mode 100644 index e6594d7f3..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/SmaCCTransformationToolkitDebugSession.class.st +++ /dev/null @@ -1,78 +0,0 @@ -Class { - #name : #SmaCCTransformationToolkitDebugSession, - #superclass : #DebugSession, - #instVars : [ - 'rootContext' - ], - #category : #'SmaCC_Rewrite_Engine_UI' -} - -{ #category : #accessing } -SmaCCTransformationToolkitDebugSession >> currentNode [ - | context | - context := interruptedContext. - [ context isNil ] - whileFalse: [ (self isRewriteContext: context) - ifTrue: [ ^ context receiver match ]. - context := context sender ]. - ^ nil -] - -{ #category : #testing } -SmaCCTransformationToolkitDebugSession >> isActive [ - ^ rootContext notNil and: [ rootContext isDead not and: [ rootContext ~= self process suspendedContext or: [ rootContext willReturn not ] ] ] -] - -{ #category : #accessing } -SmaCCTransformationToolkitDebugSession >> isRewriteContext: context [ - ^ (context receiver isKindOf: SmaCCRewriteMatchContext) - and: [ (SmaCCRewriteMatchContext methodDictionary at: context selector ifAbsent: [ nil ]) ~~ context method ] -] - -{ #category : #accessing } -SmaCCTransformationToolkitDebugSession >> newSource [ - ^ self rewriteEngine source asString -] - -{ #category : #accessing } -SmaCCTransformationToolkitDebugSession >> originalSource [ - ^ self rewriteNode completeSource asString -] - -{ #category : #accessing } -SmaCCTransformationToolkitDebugSession >> rewriteEngine [ - ^ self rootContext receiver -] - -{ #category : #accessing } -SmaCCTransformationToolkitDebugSession >> rewriteForContext: context [ - ^ context receiver rewriteEngine rewriteRule rewriteForMethod: context method -] - -{ #category : #accessing } -SmaCCTransformationToolkitDebugSession >> rewriteNode [ - ^ self rootContext tempAt: 1 -] - -{ #category : #accessing } -SmaCCTransformationToolkitDebugSession >> rootContext [ - ^ rootContext - ifNil: [ rootContext := interruptedContext findContextSuchThat: [ :each | SmaCCTransformationToolkitDebugger isTransformationContext: each ] ] -] - -{ #category : #accessing } -SmaCCTransformationToolkitDebugSession >> transformationStack [ - | stack context rewrite | - stack := OrderedCollection new. - context := interruptedContext. - [ context isNil ] - whileFalse: [ (self isRewriteContext: context) - ifTrue: [ rewrite := self rewriteForContext: context. - rewrite notNil - ifTrue: [ stack - add: - {rewrite. - context} ] ]. - context := context sender ]. - ^ stack -] diff --git a/src/SmaCC_Rewrite_Engine_UI/SmaCCTransformationToolkitDebugger.class.st b/src/SmaCC_Rewrite_Engine_UI/SmaCCTransformationToolkitDebugger.class.st deleted file mode 100644 index 0873a3240..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/SmaCCTransformationToolkitDebugger.class.st +++ /dev/null @@ -1,304 +0,0 @@ -Class { - #name : #SmaCCTransformationToolkitDebugger, - #superclass : #GTGenericStackDebugger, - #category : #'SmaCC_Rewrite_Engine_UI' -} - -{ #category : #testing } -SmaCCTransformationToolkitDebugger class >> availableAutomatically [ - ^ true -] - -{ #category : #accessing } -SmaCCTransformationToolkitDebugger class >> defaultTitle [ - ^ 'Transformation' -] - -{ #category : #testing } -SmaCCTransformationToolkitDebugger class >> handlesContext: aContext [ - ^ (aContext findContextSuchThat: [ :each | self isTransformationContext: each ]) notNil -] - -{ #category : #'class initialization' } -SmaCCTransformationToolkitDebugger class >> initialize [ - self register -] - -{ #category : #testing } -SmaCCTransformationToolkitDebugger class >> isTransformationContext: each [ - ^ each selector = #rewriteTree: and: [ each receiver isKindOf: SmaCCRewriteEngine ] -] - -{ #category : #'tools registry' } -SmaCCTransformationToolkitDebugger class >> register [ - self registerToolsOn: Smalltalk tools -] - -{ #category : #'tools registry' } -SmaCCTransformationToolkitDebugger class >> registerToolsOn: aRegistry [ - aRegistry registerDebugger: self withRank: 70 -] - -{ #category : #accessing } -SmaCCTransformationToolkitDebugger class >> sessionClass [ - ^ SmaCCTransformationToolkitDebugSession -] - -{ #category : #building } -SmaCCTransformationToolkitDebugger >> buildInputOutputSourceIn: browser [ - browser transmit - to: #originalSource; - andShow: [ :presentation | - presentation text - title: 'Original Source'; - wrapped: false; - withLineNumbers: true; - display: self session originalSource; - with: [ :text | self installActionsForRootPragmas: #(#SmaCCTransformationInput) in: text ] ]. - browser transmit - to: #newSource; - andShow: [ :presentation | - presentation text - title: 'New Source'; - wrapped: false; - withLineNumbers: true; - display: self session newSource ]. - browser transmit - from: #ruleStack port: #selection; - transformed: [ :selection | self inputSelectionIntervalFor: selection ]; - to: #originalSource port: #selectionInterval. - browser transmit - from: #ruleStack port: #selection; - transformed: [ :selection | self outputSelectionIntervalFor: selection ]; - to: #newSource port: #selectionInterval -] - -{ #category : #building } -SmaCCTransformationToolkitDebugger >> buildRuleSourceIn: browser [ - browser transmit - from: #ruleStack port: #selection; - when: [ :selection | selection notNil and: [ selection first isKindOf: SmaCCRewrite ] ]; - to: #ruleSource; - andShow: [ :presentation :selection | - presentation pharoScript - title: - (selection isNil - ifTrue: [ 'Source' ] - ifFalse: [ (self codeObjectForSelection: selection) title ]); - morphicSelectionAct: [ :text | self saveRule: text text asString in: selection ] entitled: 'Save'; - display: [ :each | self sourceForSelection: each ]; - smalltalkClass: [ selection ifNotNil: [ selection last methodClass ] ]; - doItReceiver: [ selection ifNotNil: [ selection last receiver ] ]; - doItContext: [ selection ifNotNil: [ selection last ] ]; - initialize: [ :text | text selectionInterval: (self sourceSelectionIntervalFor: selection) ]; - with: [ :text | self installActionsForRootPragmas: #(#SmaCCTransformationStack) in: text ] ]. - browser transmit - from: #ruleStack port: #selection; - when: [ :selection | selection notNil and: [ selection first isKindOf: SmaCCRewriteMethodDefinition ] ]; - to: #ruleSource; - andShow: [ :presentation :selection | - presentation pharoMethod - title: 'Method'; - morphicSelectionAct: [ :text | self saveMethod: text text asString in: selection ] entitled: 'Save'; - display: [ :each | self sourceForSelection: each ]; - smalltalkClass: [ selection ifNotNil: [ selection last methodClass ] ]; - doItReceiver: [ selection ifNotNil: [ selection last receiver ] ]; - doItContext: [ selection ifNotNil: [ selection last ] ]; - initialize: [ :text | text selectionInterval: (selection last method sourceNodeForPC: selection last pc) debugHighlightRange ]; - with: [ :text | self installActionsForRootPragmas: #(#SmaCCTransformationStack) in: text ] ] -] - -{ #category : #building } -SmaCCTransformationToolkitDebugger >> buildRuleStackIn: browser [ - browser transmit - to: #ruleStack; - andShow: [ :presentation | - | stack | - stack := self session transformationStack. - presentation list - title: 'Stack'; - display: [ stack ]; - initialize: [ :list | - stack isEmpty - ifFalse: [ list selection: stack first ] ]; - format: [ :each | - | isBlock | - isBlock := each last isBlockContext. - (isBlock - ifTrue: [ '[' ] - ifFalse: [ '' ]) , each first displayString - , - (isBlock - ifTrue: [ ']' ] - ifFalse: [ '' ]) ] ]. - browser transmit - from: #ruleStack port: #selection; - transformed: [ :each | each ifNotNil: [ each last ] ]; - to: #stack port: #selection -] - -{ #category : #private } -SmaCCTransformationToolkitDebugger >> codeObjectForSelection: anArray [ - (anArray first isKindOf: SmaCCRewriteMethodDefinition) - ifTrue: [ ^ anArray first ]. - ^ (self isTransformation: anArray) - ifTrue: [ anArray first transformation ] - ifFalse: [ anArray first match ] -] - -{ #category : #accessing } -SmaCCTransformationToolkitDebugger >> currentInputSelectionInterval [ - ^ self selectionIntervalForPane: #originalSource -] - -{ #category : #building } -SmaCCTransformationToolkitDebugger >> debuggerStructureIn: browser [ - browser - row: [ :row | - row - column: #ruleStack span: 1; - column: #ruleSource span: 3 ]; - row: [ :row | - row - column: #originalSource; - column: #newSource ]; - row: [ :row | - row - column: #stack; - column: #code ] - size: 0; - row: #inspector -] - -{ #category : #building } -SmaCCTransformationToolkitDebugger >> debuggerTransmissionsIn: browser [ - super debuggerTransmissionsIn: browser. - self buildInputOutputSourceIn: browser. - self buildRuleStackIn: browser. - self buildRuleSourceIn: browser. -] - -{ #category : #private } -SmaCCTransformationToolkitDebugger >> equivalentNodeTo: aNode in: otherTree [ - | equivParent nodeIndex equivNode | - aNode isMethod - ifTrue: [ ^ otherTree ]. - (aNode parent isReturn and: [ aNode parent parent parent isMethod ]) - ifTrue: [ "Hack to handle the inserted return statements" - equivNode := otherTree isSequence - ifTrue: [ otherTree statements last ] - ifFalse: [ otherTree ]. - ^ equivNode isReturn - ifTrue: [ equivNode value ] - ifFalse: [ equivNode ] ]. - aNode parent isMethod - ifTrue: [ otherTree isSequence - ifTrue: [ ^ otherTree ] - ifFalse: [ ^ otherTree parent ] ]. - equivParent := self equivalentNodeTo: aNode parent in: otherTree. - equivParent isNil - ifTrue: [ ^ nil ]. - nodeIndex := aNode parent children identityIndexOf: aNode. - ^ equivParent children at: nodeIndex ifAbsent: [ nil ] -] - -{ #category : #private } -SmaCCTransformationToolkitDebugger >> findFirstContext: aContext [ - | next context | - context := aContext. - [ (next := context findSimilarSender) notNil ] whileTrue: [context := next]. - ^ context -] - -{ #category : #private } -SmaCCTransformationToolkitDebugger >> inputSelectionIntervalFor: selection [ - ^ selection isNil - ifTrue: [ 1 to: 0 ] - ifFalse: [ selection last receiver match sourceInterval ] -] - -{ #category : #private } -SmaCCTransformationToolkitDebugger >> intervalFromMethodNode: aNode inSource: aString [ - | otherTree otherNode | - otherTree := RBParser parseExpression: aString onError: [ :msg :pos | ^ 1 to: 0 ]. - otherNode := self equivalentNodeTo: aNode in: otherTree. - otherNode isNil - ifTrue: [ ^ 1 to: 0 ]. - ^ otherNode start to: otherNode stop -] - -{ #category : #private } -SmaCCTransformationToolkitDebugger >> isTransformation: selection [ - ^ selection first transformation method == selection last method -] - -{ #category : #private } -SmaCCTransformationToolkitDebugger >> outputSelectionIntervalFor: selection [ - | source stop context match start | - selection isNil - ifTrue: [ ^ 1 to: 0 ]. - context := selection last receiver. - source := context source. - match := context match. - start := context startIndexFor: match. - stop := context stopIndexFor: match. - ^ (source stringIndexFor: start) to: (source stringIndexFor: stop) -] - -{ #category : #accessing } -SmaCCTransformationToolkitDebugger >> rewriteCode [ - ^ self rewriteCodePane presentations first -] - -{ #category : #accessing } -SmaCCTransformationToolkitDebugger >> rewriteCodePane [ - ^ self browser paneNamed: #ruleSource -] - -{ #category : #private } -SmaCCTransformationToolkitDebugger >> save: aString into: selection [ - | context obj newContext method | - (obj := self codeObjectForSelection: selection) code: aString. - method := obj method. - context := self findFirstContext: selection last. - context isBlockContext - ifTrue: [ ^ self inform: 'Cannot find method context to restart' ]. - self session unwindAndRestartToContext: context. - newContext := Context - sender: context sender - receiver: context receiver - method: method - arguments: #(). - newContext push: context receiver. - newContext privRefresh. - self session interruptedProcess suspendedContext: newContext. - self session stepToFirstInterestingBytecodeIn: self session interruptedProcess. - self session updateContextTo: newContext. - self updateBrowser -] - -{ #category : #private } -SmaCCTransformationToolkitDebugger >> saveMethod: aString in: selection [ - RBParser parseMethod: aString onError: [ :msg :pos | ^ self inform: 'Code does not parse' ]. - self save: aString into: selection -] - -{ #category : #private } -SmaCCTransformationToolkitDebugger >> saveRule: aString in: selection [ - RBParser parseExpression: aString onError: [ :msg :pos | ^ self inform: 'Code does not parse' ]. - self save: aString into: selection -] - -{ #category : #private } -SmaCCTransformationToolkitDebugger >> sourceForSelection: anArray [ - anArray isNil - ifTrue: [ ^ '' ]. - ^ (self codeObjectForSelection: anArray) source -] - -{ #category : #private } -SmaCCTransformationToolkitDebugger >> sourceSelectionIntervalFor: selection [ - selection isNil - ifTrue: [ ^ 1 to: 0 ]. - ^ self intervalFromMethodNode: (selection last method sourceNodeForPC: selection last pc) inSource: (self sourceForSelection: selection) -] diff --git a/src/SmaCC_Rewrite_Engine_UI/SmaCCTransformationToolkitModel.extension.st b/src/SmaCC_Rewrite_Engine_UI/SmaCCTransformationToolkitModel.extension.st deleted file mode 100644 index 2cab93845..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/SmaCCTransformationToolkitModel.extension.st +++ /dev/null @@ -1,13 +0,0 @@ -Extension { #name : #SmaCCTransformationToolkitModel } - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCTransformationToolkitModel >> changed: aSymbol [ - super changed: aSymbol. - self announcer announce: aSymbol -] - -{ #category : #'*SmaCC_Rewrite_Engine_UI' } -SmaCCTransformationToolkitModel >> changed: aSymbol with: anObject [ - super changed: aSymbol with: anObject. - self announcer announce: aSymbol -] diff --git a/src/SmaCC_Rewrite_Engine_UI/package.st b/src/SmaCC_Rewrite_Engine_UI/package.st deleted file mode 100644 index fe6e08df0..000000000 --- a/src/SmaCC_Rewrite_Engine_UI/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_Rewrite_Engine_UI' } diff --git a/src/SmaCC_Rewrite_Server/SmaCCRewriteServerCommandLineHandler.class.st b/src/SmaCC_Rewrite_Server/SmaCCRewriteServerCommandLineHandler.class.st deleted file mode 100644 index a879380db..000000000 --- a/src/SmaCC_Rewrite_Server/SmaCCRewriteServerCommandLineHandler.class.st +++ /dev/null @@ -1,55 +0,0 @@ -Class { - #name : #SmaCCRewriteServerCommandLineHandler, - #superclass : #CommandLineHandler, - #instVars : [ - 'port' - ], - #category : #'SmaCC_Rewrite_Server' -} - -{ #category : #accessing } -SmaCCRewriteServerCommandLineHandler class >> commandName [ - ^ 'SmaCCServer' -] - -{ #category : #activation } -SmaCCRewriteServerCommandLineHandler >> activate [ - [ self startServer ] fork -] - -{ #category : #activation } -SmaCCRewriteServerCommandLineHandler >> port [ - port isNil - ifTrue: [ port := (self portArgument ifNil: [ 36rSM ]) asInteger ]. - ^ port -] - -{ #category : #activation } -SmaCCRewriteServerCommandLineHandler >> portArgument [ - ^ self optionAt: 'port' ifAbsent: [ nil ] -] - -{ #category : #activation } -SmaCCRewriteServerCommandLineHandler >> portFile [ - ^ self optionAt: 'port-file' ifAbsent: [ nil ] -] - -{ #category : #activation } -SmaCCRewriteServerCommandLineHandler >> startServer [ - [ | server | - server := SmaCCServer startOn: self port. - self writePortNumber: server port. - [ server run ] - ensure: [ server close ] ] - on: Error - do: [ :ex | self stderr nextPutAll: ex messageText ] -] - -{ #category : #activation } -SmaCCRewriteServerCommandLineHandler >> writePortNumber: anInteger [ - | filename | - filename := self portFile. - filename isNil - ifTrue: [ ^ self ]. - filename asFileReference writeStreamDo: [ :stream | stream print: anInteger ] -] diff --git a/src/SmaCC_Rewrite_Server/SmaCCServer.class.st b/src/SmaCC_Rewrite_Server/SmaCCServer.class.st deleted file mode 100644 index 3c198a4e8..000000000 --- a/src/SmaCC_Rewrite_Server/SmaCCServer.class.st +++ /dev/null @@ -1,162 +0,0 @@ -Class { - #name : #SmaCCServer, - #superclass : #Object, - #instVars : [ - 'socket', - 'availableServers', - 'registeredServers' - ], - #category : #'SmaCC_Rewrite_Server' -} - -{ #category : #'instance creation' } -SmaCCServer class >> startOn: anInteger [ - ^ self new - startOn: anInteger; - yourself -] - -{ #category : #running } -SmaCCServer >> nextInteger: aStream [ - | value | - value := 0. - 0 to: 3 do: [ :i | value := value + (aStream next << (i * 8)) ]. - ^ value -] - -{ #category : #running } -SmaCCServer >> nextPutInteger: anInteger on: aStream [ - | value | - value := anInteger. - 4 - timesRepeat: [ - aStream nextPut: (value bitAnd: 16rFF). - value := value bitShift: -8 ] -] - -{ #category : #running } -SmaCCServer >> port [ - ^ socket localPort -] - -{ #category : #running } -SmaCCServer >> process: aSocket [ - | type socketStream | - socketStream := SocketStream on: aSocket. - socketStream - noTimeout; - binary. - type := socketStream next. - type = $0 asInteger - ifTrue: [ ^ self register: socketStream ]. - type = $1 asInteger - ifTrue: [ ^ self processRequest: socketStream ]. - type = $E asInteger - ifTrue: [ Exit signalSuccess ]. - self error: 'Invalid request' -] - -{ #category : #running } -SmaCCServer >> processRequest: aSocketStream [ - [ - [ - | string items canceled results | - string := (self readBytesFrom: aSocketStream) asString. - items := string substrings: (Character value: 0) asString. - canceled := ValueHolder new. - canceled contents: false. - results := SharedQueue new. - [ - items - do: - [ :each | - canceled contents - ifFalse: - [ - | server | - server := availableServers next. - [ - self - processRequest: each - on: server - notifying: results - canceled: canceled ] fork ] ] ] fork. - [ - items size - timesRepeat: - [ - | bytes | - bytes := results next. - self writeBytes: bytes on: aSocketStream ] ] - on: Error - do: [ :ex | canceled contents: true ] ] - ensure: [ aSocketStream close ] ] fork -] - -{ #category : #running } -SmaCCServer >> processRequest: aByteArray on: aSocketStream notifying: aSharedQueue canceled: aValueHolder [ - | resultBytes | - [ - self writeBytes: aByteArray on: aSocketStream. - resultBytes := self readBytesFrom: aSocketStream. - availableServers nextPut: aSocketStream ] - on: Error - do: - [ :ex | - registeredServers remove: aSocketStream. - [ aSocketStream close ] - on: Error - do: [ :e | ]. - aValueHolder contents - ifFalse: [ ^ self ]. - ^ self - processRequest: aByteArray - on: availableServers next - notifying: aSharedQueue - canceled: aValueHolder ]. - aSharedQueue nextPut: resultBytes -] - -{ #category : #running } -SmaCCServer >> readBytesFrom: aStream [ - ^aStream next: (self nextInteger: aStream) -] - -{ #category : #running } -SmaCCServer >> register: aSocketStream [ - availableServers nextPut: aSocketStream. - registeredServers add: aSocketStream -] - -{ #category : #running } -SmaCCServer >> run [ - [ | accepted | - accepted := socket waitForAcceptFor: 1000 ifTimedOut: [ nil ]. - accepted notNil - ifTrue: [ self process: accepted ] ] repeat -] - -{ #category : #running } -SmaCCServer >> startOn: anInteger [ - availableServers := SharedQueue new. - registeredServers := IdentitySet new. - socket := Socket newTCP. - socket - setOption: 'TCP_NODELAY' value: 1; - setOption: 'SO_SNDBUF' value: 4096; - setOption: 'SO_RCVBUF' value: 4096. - socket listenOn: anInteger backlogSize: 50 -] - -{ #category : #running } -SmaCCServer >> stop [ - socket close -] - -{ #category : #running } -SmaCCServer >> writeBytes: bytes on: aStream [ - self nextPutInteger: bytes size on: aStream. - aStream - nextPutAll: bytes asByteArray; - flush -] diff --git a/src/SmaCC_Rewrite_Server/package.st b/src/SmaCC_Rewrite_Server/package.st deleted file mode 100644 index ebd9a6db9..000000000 --- a/src/SmaCC_Rewrite_Server/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_Rewrite_Server' } diff --git a/src/SmaCC_Rewrite_Server_Worker/SmaCCRewriteServerWorker.class.st b/src/SmaCC_Rewrite_Server_Worker/SmaCCRewriteServerWorker.class.st deleted file mode 100644 index 12a023db4..000000000 --- a/src/SmaCC_Rewrite_Server_Worker/SmaCCRewriteServerWorker.class.st +++ /dev/null @@ -1,153 +0,0 @@ -Class { - #name : #SmaCCRewriteServerWorker, - #superclass : #Object, - #instVars : [ - 'socket', - 'serverStream', - 'rewriteFiles', - 'remotePrefix', - 'localPrefix' - ], - #category : #'SmaCC_Rewrite_Server_Worker' -} - -{ #category : #running } -SmaCCRewriteServerWorker >> classNamed: aString [ - ^ Smalltalk at: aString asSymbol -] - -{ #category : #running } -SmaCCRewriteServerWorker >> loadRewrites: aString [ - [ - | rewrites | - rewrites := rewriteFiles - at: aString - ifAbsentPut: [ SmaCCRewriteRuleFileParser parseFile: aString ]. - rewrites isUpToDate - ifTrue: [ ^ rewrites ]. - rewriteFiles removeKey: aString ] repeat -] - -{ #category : #accessing } -SmaCCRewriteServerWorker >> localPrefix [ - ^ localPrefix ifNil: [ '' ] -] - -{ #category : #accessing } -SmaCCRewriteServerWorker >> localPrefix: aString [ - localPrefix := aString -] - -{ #category : #running } -SmaCCRewriteServerWorker >> localizeFilename: aString [ - | newString | - newString := (self remotePrefix notEmpty and: [ aString beginsWith: self remotePrefix ]) - ifTrue: - [ self localPrefix , (aString copyFrom: self remotePrefix size + 1 to: aString size) ] - ifFalse: [ aString ]. - ^ (newString copyReplaceAll: '\' with: FileSystem disk delimiter asString) - copyReplaceAll: '/' - with: FileSystem disk delimiter asString -] - -{ #category : #running } -SmaCCRewriteServerWorker >> processRequest: aString [ - | file outputDirectory rewrites inputParser outputParser result resultBytes baseDirectory | - aString - splitFirstOn: $; - andThen: $= - do: - [ :type :value | - type = 'FILE' - ifTrue: [ file := self localizeFilename: value ]. - type = 'OUTPUTDIRECTORY' - ifTrue: [ outputDirectory := self localizeFilename: value ]. - type = 'BASEDIRECTORY' - ifTrue: [ baseDirectory := self localizeFilename: value ]. - type = 'REWRITEFILE' - ifTrue: - [ rewrites := self loadRewrites: (self localizeFilename: value) ]. - type = 'INPUTPARSER' - ifTrue: [ inputParser := self classNamed: value ]. - type = 'OUTPUTPARSER' - ifTrue: [ outputParser := self classNamed: value ] ]. - result := SmaCCRewriteResult new. - SmaCCRewriteProcessor new - rules: rewrites; - parserClass: inputParser; - validationParserClass: outputParser; - outputDirectory: outputDirectory; - baseDirectory: baseDirectory; - processFile: file usingResult: result. - resultBytes := result asSocketString asByteArray. - self writeBytes: resultBytes -] - -{ #category : #running } -SmaCCRewriteServerWorker >> processRequests [ - [ [ | bytes | - bytes := self readBytes. - [ self processRequest: bytes asString ] - on: Halt - do: [ :ex | - ex - resignalAs: - (Error new - messageText: ex messageText; - yourself) ] ] repeat ] - on: Error - do: [ :ex | - ((Smalltalk options select: [ :each | '-/' includes: each first ]) - collect: [ :each | each copyFrom: 2 to: each size ]) - do: [ :each | - (each sameAs: 'error') - ifTrue: [ ex pass ] ]. - Exit signalFailure: ex messageText ] -] - -{ #category : #running } -SmaCCRewriteServerWorker >> readBytes [ - ^ serverStream - next: - serverStream next + (serverStream next << 8) + (serverStream next << 16) - + (serverStream next << 24) -] - -{ #category : #accessing } -SmaCCRewriteServerWorker >> remotePrefix [ - ^ remotePrefix ifNil: [ '' ] -] - -{ #category : #accessing } -SmaCCRewriteServerWorker >> remotePrefix: aString [ - remotePrefix := aString -] - -{ #category : #running } -SmaCCRewriteServerWorker >> startConnectingTo: aString onPort: anInteger [ - rewriteFiles := Dictionary new. - socket := [ Socket newTCP - connectTo: (NetNameResolver addressForName: aString) port: anInteger; - yourself ] - on: Error - do: [ :ex | Exit signalFailure: ex messageText ]. - serverStream := SocketStream on: socket. - serverStream binary. - serverStream noTimeout. - [ serverStream - nextPut: $0 asInteger; - flush. - self processRequests ] - ensure: [ socket close ] -] - -{ #category : #running } -SmaCCRewriteServerWorker >> writeBytes: resultBytes [ - serverStream - nextPut: (resultBytes size bitAnd: 255); - nextPut: (resultBytes size >> 8 bitAnd: 255); - nextPut: (resultBytes size >> 16 bitAnd: 255); - nextPut: (resultBytes size >> 24 bitAnd: 255); - nextPutAll: resultBytes; - flush -] diff --git a/src/SmaCC_Rewrite_Server_Worker/SmaCCRewriteServerWorkerCommandLineHandler.class.st b/src/SmaCC_Rewrite_Server_Worker/SmaCCRewriteServerWorkerCommandLineHandler.class.st deleted file mode 100644 index 4d62aa6fd..000000000 --- a/src/SmaCC_Rewrite_Server_Worker/SmaCCRewriteServerWorkerCommandLineHandler.class.st +++ /dev/null @@ -1,59 +0,0 @@ -Class { - #name : #SmaCCRewriteServerWorkerCommandLineHandler, - #superclass : #CommandLineHandler, - #instVars : [ - 'server', - 'port' - ], - #category : #'SmaCC_Rewrite_Server_Worker' -} - -{ #category : #accessing } -SmaCCRewriteServerWorkerCommandLineHandler class >> commandName [ - ^ 'SmaCCServerWorker' -] - -{ #category : #public } -SmaCCRewriteServerWorkerCommandLineHandler >> activate [ - [ self startServer ] fork -] - -{ #category : #public } -SmaCCRewriteServerWorkerCommandLineHandler >> port [ - ^ port - ifNil: [ | arg parts | - arg := self serverArgument. - parts := arg substrings: ':'. - port := (parts size = 2 and: [ parts last notEmpty and: [ parts last allSatisfy: [ :each | each isDigit ] ] ]) - ifTrue: [ parts last asNumber ] - ifFalse: [ 36rSM ] ] -] - -{ #category : #public } -SmaCCRewriteServerWorkerCommandLineHandler >> server [ - ^ server - ifNil: - [ server := (self serverArgument substrings: ':') first ] -] - -{ #category : #public } -SmaCCRewriteServerWorkerCommandLineHandler >> serverArgument [ - ^ self optionAt: 'server' ifAbsent: [ 'localhost' ] -] - -{ #category : #public } -SmaCCRewriteServerWorkerCommandLineHandler >> startServer [ - [ - | worker | - worker := SmaCCRewriteServerWorker new. - self arguments - do: - [ :each | - (each beginsWith: 'remote=') - ifTrue: [ worker remotePrefix: (each copyFrom: 8 to: each size) ]. - (each beginsWith: 'local=') - ifTrue: [ worker localPrefix: (each copyFrom: 7 to: each size) ] ]. - worker startConnectingTo: self server onPort: self port ] - on: Error - do: [ :ex | self stderr nextPutAll: ex messageText ] -] diff --git a/src/SmaCC_Rewrite_Server_Worker/package.st b/src/SmaCC_Rewrite_Server_Worker/package.st deleted file mode 100644 index 320d3d2fd..000000000 --- a/src/SmaCC_Rewrite_Server_Worker/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_Rewrite_Server_Worker' } diff --git a/src/SmaCC_Runtime/SmaCCCaseInsensitiveToken.class.st b/src/SmaCC_Runtime/SmaCCCaseInsensitiveToken.class.st deleted file mode 100644 index 4b78fac1d..000000000 --- a/src/SmaCC_Runtime/SmaCCCaseInsensitiveToken.class.st +++ /dev/null @@ -1,19 +0,0 @@ -" -SmaCCCaseInsensitiveToken represents a case insensitive token (e.g., ""IF"" and ""if"" will compare equal). -" -Class { - #name : #SmaCCCaseInsensitiveToken, - #superclass : #SmaCCToken, - #category : #'SmaCC_Runtime' -} - -{ #category : #comparing } -SmaCCCaseInsensitiveToken >> = aSmaCCToken [ - ^ self class = aSmaCCToken class - and: [ self value sameAs: aSmaCCToken value ] -] - -{ #category : #comparing } -SmaCCCaseInsensitiveToken >> hash [ - ^ self value asUppercase hash -] diff --git a/src/SmaCC_Runtime/SmaCCDefaultErrorNodeHandler.class.st b/src/SmaCC_Runtime/SmaCCDefaultErrorNodeHandler.class.st deleted file mode 100644 index 0bc82f634..000000000 --- a/src/SmaCC_Runtime/SmaCCDefaultErrorNodeHandler.class.st +++ /dev/null @@ -1,19 +0,0 @@ -Class { - #name : #SmaCCDefaultErrorNodeHandler, - #superclass : #SmaCCErrorNodeHandler, - #category : #'SmaCC_Runtime' -} - -{ #category : #'private-error handling' } -SmaCCDefaultErrorNodeHandler >> errorShiftActionsForState: stateIndex [ - ^ self nodeShiftActionsFor: stateIndex -] - -{ #category : #'private-error handling' } -SmaCCDefaultErrorNodeHandler >> performErrorReductions [ - | onlyAction actions | - [ actions := Set new. - self actionsAndSymbolsForState: self stateStack last do: [ :action :symbol | actions add: action ]. - actions size = 1 and: [ ((onlyAction := actions anyOne) bitAnd: self actionMask) == self reduceAction ] ] - whileTrue: [ self reduce: (onlyAction bitShift: -2) ] -] diff --git a/src/SmaCC_Runtime/SmaCCErrorHandler.class.st b/src/SmaCC_Runtime/SmaCCErrorHandler.class.st deleted file mode 100644 index 943fbae85..000000000 --- a/src/SmaCC_Runtime/SmaCCErrorHandler.class.st +++ /dev/null @@ -1,135 +0,0 @@ -Class { - #name : #SmaCCErrorHandler, - #superclass : #Object, - #instVars : [ - 'parser' - ], - #category : #'SmaCC_Runtime' -} - -{ #category : #'instance creation' } -SmaCCErrorHandler class >> on: aSmaCCParser [ - ^ self new - parser: aSmaCCParser; - yourself -] - -{ #category : #'private-parser accessing' } -SmaCCErrorHandler >> actionMask [ - ^ parser actionMask -] - -{ #category : #'private-parser accessing' } -SmaCCErrorHandler >> actionsAndSymbolsForState: stateIndex do: aBlock [ - parser actionsAndSymbolsForState: stateIndex do: aBlock -] - -{ #category : #'private-parser accessing' } -SmaCCErrorHandler >> actionsForState: stateIndex and: aSymbolIndex [ - ^ parser actionsForState: stateIndex and: aSymbolIndex -] - -{ #category : #'private-parser accessing' } -SmaCCErrorHandler >> allActionsAndSymbolsForState: stateIndex do: aBlock [ - parser allActionsAndSymbolsForState: stateIndex do: aBlock -] - -{ #category : #'private-parser accessing' } -SmaCCErrorHandler >> currentToken [ - ^ parser currentToken -] - -{ #category : #'private-parser accessing' } -SmaCCErrorHandler >> dismissErrorToken [ - ^ parser dismissErrorToken -] - -{ #category : #'private-parser accessing' } -SmaCCErrorHandler >> dismissStackTopForErrorRecovery: anInteger [ - ^ parser dismissStackTopForErrorRecovery: anInteger -] - -{ #category : #'private-parser accessing' } -SmaCCErrorHandler >> errorToken: aSmaCCToken [ - parser errorToken: aSmaCCToken -] - -{ #category : #'private-parser accessing' } -SmaCCErrorHandler >> errorTokenId [ - ^ parser errorTokenId -] - -{ #category : #'error handling' } -SmaCCErrorHandler >> handleError: anInteger [ - self subclassResponsibility -] - -{ #category : #'private-parser accessing' } -SmaCCErrorHandler >> isEOFToken [ - ^ parser isEOFToken -] - -{ #category : #'private-parser accessing' } -SmaCCErrorHandler >> isNodeType: aSymbol [ - ^ parser isNodeType: aSymbol -] - -{ #category : #'private-parser accessing' } -SmaCCErrorHandler >> markErrorToken [ - self errorToken: self currentToken -] - -{ #category : #'private-parser accessing' } -SmaCCErrorHandler >> nodeStack [ - ^ parser nodeStack -] - -{ #category : #accessing } -SmaCCErrorHandler >> parser [ - ^ parser -] - -{ #category : #accessing } -SmaCCErrorHandler >> parser: aSmaCCParser [ - parser := aSmaCCParser -] - -{ #category : #'private-parser accessing' } -SmaCCErrorHandler >> reduce: anInteger [ - ^ parser reduce: anInteger -] - -{ #category : #'private-parser accessing' } -SmaCCErrorHandler >> reduceAction [ - ^ parser reduceAction -] - -{ #category : #'private-parser accessing' } -SmaCCErrorHandler >> reportError: anInteger [ - ^ parser reportError: anInteger -] - -{ #category : #'private-parser accessing' } -SmaCCErrorHandler >> shiftAction [ - ^ parser shiftAction -] - -{ #category : #'private-parser accessing' } -SmaCCErrorHandler >> stateStack [ - ^ parser stateStack -] - -{ #category : #'private-parser accessing' } -SmaCCErrorHandler >> symbolTypes [ - ^ parser symbolTypes -] - -{ #category : #'private-parser accessing' } -SmaCCErrorHandler >> willAccept: potentialStateStack [ - ^ parser willAccept: potentialStateStack -] - -{ #category : #'private-parser accessing' } -SmaCCErrorHandler >> willShift: potentialStateStack [ - ^ parser willShift: potentialStateStack -] diff --git a/src/SmaCC_Runtime/SmaCCErrorNode.class.st b/src/SmaCC_Runtime/SmaCCErrorNode.class.st deleted file mode 100644 index ac6f39867..000000000 --- a/src/SmaCC_Runtime/SmaCCErrorNode.class.st +++ /dev/null @@ -1,126 +0,0 @@ -" -SmaCCError is a special node that is used when encountering an error during parsing and the parser uses the special ""error"" keyword in the grammar. When an error occurs the parser searches for a location on the stack that will shift the ""error"". - -Instance Variables: - stackContents the objects that had to be popped off the node stack to be able to shift the error - dismissedTokens the token objects that needed to be ignored to be able to resume parsing - errorToken the token that started the error handling. This token may also be in the dismissedTokens or it may be used in some other node created after handling the error -" -Class { - #name : #SmaCCErrorNode, - #superclass : #SmaCCParseNode, - #instVars : [ - 'stackContents', - 'dismissedTokens', - 'errorToken' - ], - #category : #'SmaCC_Runtime' -} - -{ #category : #'visitor-double dispatching' } -SmaCCErrorNode >> acceptVisitor: aSmaCCParseNodeVisitor [ - ^ aSmaCCParseNodeVisitor visitSmaCCError: self -] - -{ #category : #private } -SmaCCErrorNode >> assignParents: anObject [ - (anObject isKindOf: SmaCCParseNode) - ifTrue: [ anObject parent: self ]. - (anObject isKindOf: Collection) - ifTrue: [ anObject do: [ :each | self assignParents: each ] ] -] - -{ #category : #private } -SmaCCErrorNode >> calculateStartPosition [ - | min | - min := SmallInteger maxVal. - self errorComponentsDo: [ :each | each startPosition ifNotNil: [ :pos | min := min min: pos ] ]. - min = SmallInteger maxVal - ifTrue: [ min := errorToken startPosition ]. - ^ min -] - -{ #category : #private } -SmaCCErrorNode >> calculateStopPosition [ - | max | - max := 0. - self errorComponentsDo: [ :each | each stopPosition ifNotNil: [ :pos | max := max max: pos ] ]. - max = 0 - ifTrue: [ max := errorToken startPosition ]. - ^ max -] - -{ #category : #accessing } -SmaCCErrorNode >> dismissedTokens [ - ^ dismissedTokens -] - -{ #category : #accessing } -SmaCCErrorNode >> dismissedTokens: tokenCollection [ - dismissedTokens := tokenCollection -] - -{ #category : #errors } -SmaCCErrorNode >> doesNotUnderstand: aMessage [ - "Hack to handle reduce action steps that add parens (or other items) to pulled up nodes. - Probably should validate that we are inside a reduce action." - - aMessage arguments isEmpty - ifTrue: [ ^ (self attributeNamed: #nodeProperties ifAbsentPut: [ Dictionary new ]) - at: aMessage selector - ifAbsentPut: [ OrderedCollection new ] ]. - super doesNotUnderstand: aMessage -] - -{ #category : #private } -SmaCCErrorNode >> errorComponentsDo: aBlock [ - self nodesAndTokensIn: stackContents do: aBlock. - dismissedTokens do: aBlock -] - -{ #category : #accessing } -SmaCCErrorNode >> errorToken [ - ^ errorToken -] - -{ #category : #accessing } -SmaCCErrorNode >> errorToken: smaccToken [ - errorToken := smaccToken -] - -{ #category : #testing } -SmaCCErrorNode >> isErrorNode [ - ^ true -] - -{ #category : #private } -SmaCCErrorNode >> nodesAndTokensIn: anObject do: aBlock [ - anObject isCollection - ifTrue: [ anObject do: [ :each | self nodesAndTokensIn: each do: aBlock ] ] - ifFalse: [ ((anObject isKindOf: SmaCCParseNode) or: [ anObject isKindOf: SmaCCToken ]) - ifTrue: [ aBlock value: anObject ] ] -] - -{ #category : #iterating } -SmaCCErrorNode >> nodesDo: nodeBlock andTokensDo: tokenBlock includeErrors: aBoolean [ - super nodesDo: nodeBlock andTokensDo: tokenBlock includeErrors: aBoolean. - aBoolean - ifFalse: [ ^ self ]. - self - errorComponentsDo: [ :each | - (nodeBlock notNil and: [ each isKindOf: SmaCCParseNode ]) - ifTrue: [ nodeBlock value: each ]. - (tokenBlock notNil and: [ each isKindOf: SmaCCToken ]) - ifTrue: [ tokenBlock value: each ] ] -] - -{ #category : #accessing } -SmaCCErrorNode >> stackContents [ - ^ stackContents -] - -{ #category : #accessing } -SmaCCErrorNode >> stackContents: aCollection [ - stackContents := aCollection. - self assignParents: aCollection -] diff --git a/src/SmaCC_Runtime/SmaCCErrorNodeHandler.class.st b/src/SmaCC_Runtime/SmaCCErrorNodeHandler.class.st deleted file mode 100644 index 1636aa42e..000000000 --- a/src/SmaCC_Runtime/SmaCCErrorNodeHandler.class.st +++ /dev/null @@ -1,124 +0,0 @@ -Class { - #name : #SmaCCErrorNodeHandler, - #superclass : #SmaCCErrorHandler, - #category : #'SmaCC_Runtime' -} - -{ #category : #'private-error handling' } -SmaCCErrorNodeHandler >> errorHandlerStates [ - ^ self stateStack collect: [ :each | self errorShiftActionsForState: each ] -] - -{ #category : #'private-error handling' } -SmaCCErrorNodeHandler >> errorShiftActionsForState: stateIndex [ - ^ self nodeShiftActionsFor: stateIndex -] - -{ #category : #'private-error handling' } -SmaCCErrorNodeHandler >> errorSortValueFor: stateIndex [ - | count hasCurrentTokenAction | - count := 0. - hasCurrentTokenAction := false. - self - allActionsAndSymbolsForState: stateIndex - do: [ :action :symbol | - count := count + 1. - hasCurrentTokenAction := hasCurrentTokenAction or: [ self currentToken ids includes: symbol ] ]. - ^ hasCurrentTokenAction - ifTrue: [ count bitShift: 16 ] - ifFalse: [ count ] -] - -{ #category : #'private-error handling' } -SmaCCErrorNodeHandler >> findErrorHandlerIfNoneUseErrorNumber: anInteger [ - | handlerStates index startingErrorToken stackContents dismissedTokens newState | - dismissedTokens := OrderedCollection new. - handlerStates := self errorHandlerStates reverse. - startingErrorToken := self currentToken. - [ self isEOFToken - ifTrue: [ self finishErrorParse: startingErrorToken dismissed: dismissedTokens. - ^ true ]. - handlerStates size to: 1 by: -1 do: [ :i | - | states newStack | - states := handlerStates at: i. - states - do: [ :each | - newStack := parser stateStack copyFrom: 1 to: handlerStates size - i + 1. - newStack addLast: each. - (self willShift: newStack) - ifTrue: [ index := i. - newState := each ] ] ]. - index isNil ] whileTrue: [ dismissedTokens add: self dismissErrorToken ]. - stackContents := self dismissStackTopForErrorRecovery: index - 1. - self stateStack addLast: newState. - self nodeStack - addLast: - (SmaCCErrorNode new - stackContents: stackContents; - dismissedTokens: dismissedTokens; - errorToken: startingErrorToken; - yourself). - ^ true -] - -{ #category : #'error handling' } -SmaCCErrorNodeHandler >> finishErrorParse: errorToken dismissed: dismissedTokens [ - | handlerStates | - handlerStates := self nodeErrorHandlerStates reverse. - (self finishErrorParse: errorToken dismissed: dismissedTokens handlerStates: handlerStates) - ifFalse: [ self reportError: 0 ] -] - -{ #category : #'error handling' } -SmaCCErrorNodeHandler >> finishErrorParse: errorToken dismissed: dismissedTokens handlerStates: handlerStates [ - | newStack stackContents | - 1 to: handlerStates size do: [ :i | - (handlerStates at: i) - reverseDo: [ :each | - newStack := parser stateStack copyFrom: 1 to: handlerStates size - i + 1. - newStack addLast: each. - (self willAccept: newStack) - ifTrue: [ stackContents := self dismissStackTopForErrorRecovery: i - 1. - self stateStack addLast: each. - self nodeStack - addLast: - (SmaCCErrorNode new - stackContents: stackContents; - dismissedTokens: dismissedTokens; - errorToken: errorToken; - yourself). - ^ true ] ] ]. - ^ false -] - -{ #category : #'error handling' } -SmaCCErrorNodeHandler >> handleError: anInteger [ - self markErrorToken. - self performErrorReductions. - self isEOFToken - ifTrue: [ self finishErrorParse: self currentToken dismissed: OrderedCollection new. - ^ true ]. - ^ self findErrorHandlerIfNoneUseErrorNumber: anInteger -] - -{ #category : #'private-error handling' } -SmaCCErrorNodeHandler >> nodeErrorHandlerStates [ - ^ self stateStack collect: [ :each | self nodeShiftActionsFor: each ] -] - -{ #category : #'private-error handling' } -SmaCCErrorNodeHandler >> nodeShiftActionsFor: stateIndex [ - | potentialNewStates | - potentialNewStates := Set new. - self - allActionsAndSymbolsForState: stateIndex - do: [ :action :symbol | - ((action bitAnd: self actionMask) = self shiftAction and: [ self isNodeType: (self symbolTypes at: symbol ifAbsent: [ #Object ]) ]) - ifTrue: [ potentialNewStates add: (action bitShift: -2) ] ]. - ^ potentialNewStates asSortedCollection: [ :a :b | (self errorSortValueFor: a) < (self errorSortValueFor: b) ] -] - -{ #category : #'private-error handling' } -SmaCCErrorNodeHandler >> performErrorReductions [ - self subclassResponsibility -] diff --git a/src/SmaCC_Runtime/SmaCCLineNumberStream.class.st b/src/SmaCC_Runtime/SmaCCLineNumberStream.class.st deleted file mode 100644 index a7958d1be..000000000 --- a/src/SmaCC_Runtime/SmaCCLineNumberStream.class.st +++ /dev/null @@ -1,157 +0,0 @@ -" -SmaCCLineNumberStream is a wrapper for streams that calculates line numbers. - -Instance Variables: - eolPositions the positions of each end of line - lastPosition the position of the last character that we have calculated the end of line information for (we know the line number for all characters before this position and don't know anything about the characters after this position) - previousWasCR was the previous character a CR. This is used for CR LF streams. A CR LF combination should only increment the line counter by 1 - sourceStream the stream that we are wrapping - -" -Class { - #name : #SmaCCLineNumberStream, - #superclass : #Stream, - #instVars : [ - 'sourceStream', - 'previousWasCR', - 'eolPositions', - 'lastPosition' - ], - #category : #'SmaCC_Runtime' -} - -{ #category : #'instance creation' } -SmaCCLineNumberStream class >> on: aReadStream [ - ^ self basicNew - on: aReadStream; - yourself -] - -{ #category : #testing } -SmaCCLineNumberStream >> atEnd [ - ^ sourceStream atEnd -] - -{ #category : #accessing } -SmaCCLineNumberStream >> columnNumber [ - ^ self columnNumberFor: self position -] - -{ #category : #accessing } -SmaCCLineNumberStream >> columnNumberFor: anInteger [ - ^ anInteger - (eolPositions at: (self lineNumberFor: anInteger)) + 1 -] - -{ #category : #accessing } -SmaCCLineNumberStream >> contents [ - ^ sourceStream contents -] - -{ #category : #private } -SmaCCLineNumberStream >> contentsSpecies [ - ^ sourceStream contentsSpecies -] - -{ #category : #'error handling' } -SmaCCLineNumberStream >> doesNotUnderstand: aMessage [ - ^ [ sourceStream - perform: aMessage selector - withArguments: aMessage arguments ] - ensure: [ self position: sourceStream position ] -] - -{ #category : #accessing } -SmaCCLineNumberStream >> flush [ - ^ sourceStream flush -] - -{ #category : #testing } -SmaCCLineNumberStream >> isReadable [ - ^ sourceStream isReadable -] - -{ #category : #testing } -SmaCCLineNumberStream >> isWritable [ - ^ sourceStream isWritable -] - -{ #category : #accessing } -SmaCCLineNumberStream >> lineNumber [ - ^ self lineNumberFor: self position -] - -{ #category : #accessing } -SmaCCLineNumberStream >> lineNumberFor: anInteger [ - | index start stop pos | - pos := anInteger. - pos >= eolPositions last - ifTrue: [ ^ eolPositions size ]. - start := 1. - stop := eolPositions size. - [ start + 1 < stop ] - whileTrue: - [ index := (start + stop) // 2. - (eolPositions at: index) <= pos - ifTrue: [ start := index ] - ifFalse: [ stop := index ] ]. - ^ start -] - -{ #category : #accessing } -SmaCCLineNumberStream >> next [ - | character streamPosition | - character := sourceStream next. - streamPosition := sourceStream position. - streamPosition - 1 >= lastPosition - ifTrue: - [ lastPosition := streamPosition. - character == Character cr - ifTrue: [ eolPositions add: lastPosition. - previousWasCR := true ] - ifFalse: - [ character == Character lf - ifTrue: - [ previousWasCR - ifTrue: [ eolPositions at: eolPositions size put: lastPosition ] - ifFalse: [ eolPositions add: lastPosition ] ]. - previousWasCR := false ] ]. - ^ character -] - -{ #category : #accessing } -SmaCCLineNumberStream >> nextPut: anObject [ - ^ sourceStream nextPut: anObject -] - -{ #category : #'initialize-release' } -SmaCCLineNumberStream >> on: aReadStream [ - sourceStream := aReadStream. - eolPositions := OrderedCollection with: aReadStream position. - lastPosition := aReadStream position. - previousWasCR := false -] - -{ #category : #accessing } -SmaCCLineNumberStream >> peek [ - ^ sourceStream peek -] - -{ #category : #accessing } -SmaCCLineNumberStream >> position [ - ^ sourceStream position -] - -{ #category : #accessing } -SmaCCLineNumberStream >> position: anInteger [ - anInteger > lastPosition - ifTrue: - [ sourceStream position: lastPosition. - [ sourceStream position < anInteger and: [ sourceStream atEnd not ] ] - whileTrue: [ self next ] ] - ifFalse: [ sourceStream position: anInteger ] -] - -{ #category : #accessing } -SmaCCLineNumberStream >> skip: anInteger [ - ^ self position: self position + anInteger -] diff --git a/src/SmaCC_Runtime/SmaCCNoErrorHandler.class.st b/src/SmaCC_Runtime/SmaCCNoErrorHandler.class.st deleted file mode 100644 index dd01a5cdb..000000000 --- a/src/SmaCC_Runtime/SmaCCNoErrorHandler.class.st +++ /dev/null @@ -1,11 +0,0 @@ -Class { - #name : #SmaCCNoErrorHandler, - #superclass : #SmaCCErrorHandler, - #category : #'SmaCC_Runtime' -} - -{ #category : #'error handling' } -SmaCCNoErrorHandler >> handleError: anInteger [ - self markErrorToken. - self reportError: anInteger -] diff --git a/src/SmaCC_Runtime/SmaCCParseNode.class.st b/src/SmaCC_Runtime/SmaCCParseNode.class.st deleted file mode 100644 index 3f848fb90..000000000 --- a/src/SmaCC_Runtime/SmaCCParseNode.class.st +++ /dev/null @@ -1,915 +0,0 @@ -" -SmaCCParseNode is an abstract class that represents parse nodes generated by SmaCC. - -Subclasses must implement the following messages: - visitor-double dispatching - acceptVisitor: - -Instance Variables: - attributes a dictionary that holds special properties for each node - parent the parent node in the parse tree - - -" -Class { - #name : #SmaCCParseNode, - #superclass : #Object, - #instVars : [ - 'parent', - 'attributes' - ], - #category : #'SmaCC_Runtime' -} - -{ #category : #accessing } -SmaCCParseNode class >> collectionVariableIn: aSmaCCParseNode collectionGetter: aSymbol variableGetter: varSymbol [ - (aSmaCCParseNode respondsTo: aSymbol) - ifTrue: [ ^ aSmaCCParseNode perform: aSymbol ]. - (aSmaCCParseNode respondsTo: varSymbol) - ifTrue: [ ^ Array with: (aSmaCCParseNode perform: varSymbol) ]. - ^ #() -] - -{ #category : #accessing } -SmaCCParseNode class >> parserClass [ - "Return the parser class that likely created this node" - - | possibleClasses classNames topNodeClass | - self == SmaCCParseNode - ifTrue: [ ^ nil ]. - topNodeClass := self withAllSuperclasses - detect: [ :each | each superclass = SmaCCParseNode ]. - classNames := (topNodeClass withAllSubclasses collect: #name) asSet. - possibleClasses := SmaCCParser withAllSubclasses - select: [ :each | - (each class includesSelector: #symbolTypes) - and: [ each symbolTypes - anySatisfy: [ :clsName | classNames includes: clsName ] ] ]. - possibleClasses size = 1 - ifTrue: [ ^ possibleClasses first ]. - ^ nil -] - -{ #category : #accessing } -SmaCCParseNode class >> variableIn: aSmaCCParseNode getter: aSymbol [ - (aSmaCCParseNode respondsTo: aSymbol) - ifTrue: [ ^ aSmaCCParseNode perform: aSymbol ]. - ^ nil -] - -{ #category : #comparing } -SmaCCParseNode >> = anObject [ - ^ self == anObject - or: - [ self class = anObject class - and: - [ self variableSelectors - allSatisfy: - [ :symbol | - (self perform: symbol) - allSatisfy: [ :each | (self perform: each) = (anObject perform: each) ] ] ] ] -] - -{ #category : #'visitor-double dispatching' } -SmaCCParseNode >> acceptVisitor: aSmaCCParseNodeVisitor [ - ^ aSmaCCParseNodeVisitor visitSmaCCParseNode: self -] - -{ #category : #'collection handling' } -SmaCCParseNode >> addFirstNode: aSmaCCParseNode to: aCollection [ - aSmaCCParseNode isNil - ifTrue: [ ^ self ]. - aCollection addFirst: aSmaCCParseNode. - aSmaCCParseNode parent: self -] - -{ #category : #'collection handling' } -SmaCCParseNode >> addFirstNodes: aSmaCCParseNodeCollection to: aCollection [ - aSmaCCParseNodeCollection isNil - ifTrue: [ ^ self ]. - aSmaCCParseNodeCollection - reverseDo: [ :each | self addFirstNode: each to: aCollection ] -] - -{ #category : #'collection handling' } -SmaCCParseNode >> addFirstObject: anObject to: aCollection [ - anObject isNil - ifTrue: [ ^ self ]. - aCollection addFirst: anObject. - (anObject isKindOf: SmaCCParseNode) - ifTrue: [ anObject parent: self ] -] - -{ #category : #'collection handling' } -SmaCCParseNode >> addFirstObjects: addCollection to: aCollection [ - addCollection isNil - ifTrue: [ ^ self ]. - addCollection - reverseDo: [ :each | self addFirstObject: each to: aCollection ] -] - -{ #category : #'collection handling' } -SmaCCParseNode >> addFirstToken: aSmaCCToken to: aCollection [ - aSmaCCToken isNil - ifTrue: [ ^ self ]. - aCollection addFirst: aSmaCCToken -] - -{ #category : #'collection handling' } -SmaCCParseNode >> addFirstTokens: aSmaCCTokenCollection to: aCollection [ - aSmaCCTokenCollection isNil - ifTrue: [ ^ self ]. - aCollection addAllFirst: aSmaCCTokenCollection -] - -{ #category : #'collection handling' } -SmaCCParseNode >> addNode: aSmaCCParseNode to: aCollection [ - aSmaCCParseNode isNil - ifTrue: [ ^ self ]. - aCollection add: aSmaCCParseNode. - aSmaCCParseNode parent: self -] - -{ #category : #'collection handling' } -SmaCCParseNode >> addNodes: aSmaCCParseNodeCollection to: aCollection [ - aSmaCCParseNodeCollection isNil - ifTrue: [ ^ self ]. - aSmaCCParseNodeCollection - do: [ :each | self addNode: each to: aCollection ] -] - -{ #category : #'collection handling' } -SmaCCParseNode >> addObject: anObject to: aCollection [ - anObject isNil - ifTrue: [ ^ self ]. - aCollection add: anObject. - (anObject isKindOf: SmaCCParseNode) - ifTrue: [ anObject parent: self ] -] - -{ #category : #'collection handling' } -SmaCCParseNode >> addObjects: addCollection to: aCollection [ - addCollection isNil - ifTrue: [ ^ self ]. - addCollection do: [ :each | self addObject: each to: aCollection ] -] - -{ #category : #'collection handling' } -SmaCCParseNode >> addToken: aSmaCCToken to: aCollection [ - aSmaCCToken isNil - ifTrue: [ ^ self ]. - aCollection add: aSmaCCToken -] - -{ #category : #'collection handling' } -SmaCCParseNode >> addTokens: aSmaCCTokenCollection to: aCollection [ - aSmaCCTokenCollection isNil - ifTrue: [ ^ self ]. - aCollection addAll: aSmaCCTokenCollection -] - -{ #category : #iterating } -SmaCCParseNode >> allGettersDo: aBlock [ - self allVariableSelectors - do: [ :sel | (self perform: sel) do: aBlock ] -] - -{ #category : #iterating } -SmaCCParseNode >> allNodesDo: nodeBlock [ - self allNodesDo: nodeBlock andTokensDo: nil -] - -{ #category : #iterating } -SmaCCParseNode >> allNodesDo: nodeBlock andTokensDo: tokenBlock [ - self allNodesDo: nodeBlock andTokensDo: tokenBlock includeErrors: false -] - -{ #category : #iterating } -SmaCCParseNode >> allNodesDo: nodeBlock andTokensDo: tokenBlock includeErrors: aBoolean [ - self - nodesDo: [ :each | - nodeBlock value: each. - each allNodesDo: nodeBlock andTokensDo: tokenBlock includeErrors: aBoolean ] - andTokensDo: tokenBlock - includeErrors: aBoolean -] - -{ #category : #iterating } -SmaCCParseNode >> allNodesOfType: aClass do: nodeBlock [ - self - allNodesDo: [ :each | - (each isKindOf: aClass) - ifTrue: [ nodeBlock value: each ] ] -] - -{ #category : #accessing } -SmaCCParseNode >> allParents [ - | parents | - parent isNil - ifTrue: [ ^ #() ]. - parents := OrderedCollection with: parent. - [ parents last parent notNil ] whileTrue: [ parents addLast: parents last parent ]. - ^ parents -] - -{ #category : #accessing } -SmaCCParseNode >> allTokens [ - | tokens | - tokens := OrderedCollection new. - self allTokensInto: tokens. - ^ tokens - asSortedCollection: [ :a :b | a startPosition < b startPosition ] -] - -{ #category : #accessing } -SmaCCParseNode >> allTokensInto: aCollection [ - self tokenVariables - do: - [ :each | (self perform: each) ifNotNil: [ :token | aCollection add: token ] ]. - self compositeTokenVariables - do: - [ :each | - (self perform: each) - ifNotNil: [ :tokens | aCollection addAll: tokens ] ]. - self nodesDo: [ :each | each allTokensInto: aCollection ] -] - -{ #category : #tokens } -SmaCCParseNode >> allTokensMatching: aSmaCCToken [ - | tokens | - tokens := OrderedCollection new. - self - allNodesDo: [ :each | ] - andTokensDo: [ :each | - each = aSmaCCToken - ifTrue: [ tokens add: each ] ] - includeErrors: true. - ^ tokens -] - -{ #category : #variables } -SmaCCParseNode >> allVariableSelectors [ - ^ #(#tokenVariables #compositeTokenVariables #nodeVariables #compositeNodeVariables #otherVariables #ignoredTokenVariables #ignoredCompositeTokenVariables #ignoredNodeVariables #ignoredCompositeNodeVariables #ignoredOtherVariables) -] - -{ #category : #'accessing-attributes' } -SmaCCParseNode >> attributeNamed: aSymbol [ - attributes isNil - ifTrue: [ ^ nil ]. - ^ attributes at: aSymbol ifAbsent: [ nil ] -] - -{ #category : #'accessing-attributes' } -SmaCCParseNode >> attributeNamed: aSymbol ifAbsent: aBlock [ - ^ self attributes at: aSymbol ifAbsent: aBlock -] - -{ #category : #'accessing-attributes' } -SmaCCParseNode >> attributeNamed: aSymbol ifAbsentPut: aBlock [ - ^ self attributes at: aSymbol ifAbsentPut: aBlock -] - -{ #category : #'accessing-attributes' } -SmaCCParseNode >> attributeNamed: aSymbol put: aValue [ - ^ self attributes at: aSymbol put: aValue -] - -{ #category : #'accessing-attributes' } -SmaCCParseNode >> attributes [ - ^ attributes ifNil: [ attributes := IdentityDictionary new ] -] - -{ #category : #private } -SmaCCParseNode >> calculateStartPosition [ - "Hackish way to get the minimum for all nodes. You might want to override to get a better implementation." - - | doBlock min | - min := SmallInteger maxVal. - doBlock := [ :each | each startPosition ifNotNil: [ :pos | min := min min: pos ] ]. - self nodesDo: doBlock andTokensDo: doBlock. - ^ min -] - -{ #category : #private } -SmaCCParseNode >> calculateStopPosition [ - "Hackish way to get the maximum for all nodes. You might want to override to get a better implementation." - - | doBlock max | - max := 0. - doBlock := [ :each | each stopPosition ifNotNil: [ :pos | max := max max: pos ] ]. - self nodesDo: doBlock andTokensDo: doBlock. - ^ max -] - -{ #category : #accessing } -SmaCCParseNode >> children [ - | result | - result := OrderedCollection new. - self - nodesDo: [ :each | - each notNil - ifTrue: [ result add: each ] ]. - ^ result -] - -{ #category : #accessing } -SmaCCParseNode >> comments [ - ^ self attributeNamed: #comments -] - -{ #category : #accessing } -SmaCCParseNode >> comments: anObject [ - self attributeNamed: #comments put: anObject -] - -{ #category : #source } -SmaCCParseNode >> completeSource [ - ^ parent isNil - ifTrue: [ self attributeNamed: #source ] - ifFalse: [ parent completeSource ] -] - -{ #category : #source } -SmaCCParseNode >> completeSource: aString [ - ^ parent isNil - ifTrue: - [ (Smalltalk at: #SmaCCString ifAbsent: [ nil ]) - ifNotNil: - [ :stringClass | self attributeNamed: #source put: (stringClass on: aString) ] ] - ifFalse: [ parent completeSource: aString ] -] - -{ #category : #variables } -SmaCCParseNode >> compositeNodeVariables [ - ^ #() -] - -{ #category : #variables } -SmaCCParseNode >> compositeTokenVariables [ - ^ #() -] - -{ #category : #variables } -SmaCCParseNode >> compositeVariableSelectors [ - ^ #(#compositeTokenVariables #compositeNodeVariables #ignoredCompositeTokenVariables #ignoredCompositeNodeVariables) -] - -{ #category : #variables } -SmaCCParseNode >> compositeVariables [ - ^ self compositeVariableSelectors - inject: Set new - into: - [ :sum :each | - sum - addAll: (self perform: each); - yourself ] -] - -{ #category : #matching } -SmaCCParseNode >> convertToSetter: selector [ - ^ (selector , ':') asSymbol -] - -{ #category : #matching } -SmaCCParseNode >> copyInContext: aDictionary [ - | copy | - copy := self copy. - self tokenVariables - do: - [ :selector | - copy - perform: (self convertToSetter: selector) - with: ((self perform: selector) copyInContext: aDictionary) ]. - self nodeVariables - do: - [ :selector | - copy - perform: (self convertToSetter: selector) - with: ((self perform: selector) copyInContext: aDictionary) ]. - self compositeTokenVariables - do: - [ :selector | - copy - perform: (self convertToSetter: selector) - with: - ((self perform: selector) - collect: [ :each | each copyInContext: aDictionary ]) ]. - self compositeNodeVariables - do: - [ :selector | - copy - perform: (self convertToSetter: selector) - with: - ((self perform: selector) - collect: [ :each | each copyInContext: aDictionary ]) ]. - ^ copy -] - -{ #category : #source } -SmaCCParseNode >> deleteSource [ - self completeSource - deleteFrom: self startPosition - to: self stopPosition -] - -{ #category : #source } -SmaCCParseNode >> deleteToken: aSmaCCToken [ - self completeSource - deleteFrom: aSmaCCToken startPosition - to: aSmaCCToken stopPosition -] - -{ #category : #accessing } -SmaCCParseNode >> filename [ - ^ self attributeNamed: #filename -] - -{ #category : #accessing } -SmaCCParseNode >> filename: aString [ - self attributeNamed: #filename put: aString -] - -{ #category : #'initialize-release' } -SmaCCParseNode >> fixParentPointers [ - self - nodesDo: [ :each | - each parent: self. - each fixParentPointers ] -] - -{ #category : #testing } -SmaCCParseNode >> hasDescendant: aSmaCCNode [ - ^ aSmaCCNode isDescendantFrom: self -] - -{ #category : #testing } -SmaCCParseNode >> hasParentOfType: aSmaCCParseNodeClass [ - (parent isKindOf: aSmaCCParseNodeClass) - ifTrue: [ ^ true ]. - ^ parent notNil and: [ parent hasParentOfType: aSmaCCParseNodeClass ] -] - -{ #category : #comparing } -SmaCCParseNode >> hash [ - ^ self variableSelectors - inject: self class hash - into: - [ :sum :symbol | - (self perform: symbol) - inject: sum - into: - [ :hash :each | - | newHash | - newHash := hash bitXor: (self perform: each) hash. - ((newHash bitShift: 1) bitAnd: SmallInteger maxVal) - bitXor: (newHash bitShift: -29) ] ] -] - -{ #category : #variables } -SmaCCParseNode >> ignoredCompositeNodeVariables [ - ^ #() -] - -{ #category : #variables } -SmaCCParseNode >> ignoredCompositeTokenVariables [ - ^ #() -] - -{ #category : #variables } -SmaCCParseNode >> ignoredNodeVariables [ - ^ #() -] - -{ #category : #variables } -SmaCCParseNode >> ignoredOtherVariables [ - ^ #() -] - -{ #category : #variables } -SmaCCParseNode >> ignoredTokenVariables [ - ^ #() -] - -{ #category : #source } -SmaCCParseNode >> insertSourceAfter: aString [ - self completeSource insert: aString at: self stopPosition + 1 -] - -{ #category : #source } -SmaCCParseNode >> insertSourceBefore: aString [ - self completeSource insert: aString at: self startPosition -] - -{ #category : #source } -SmaCCParseNode >> insertSourceBefore: beginString andAfter: endString [ - self - insertSourceBefore: beginString; - insertSourceAfter: endString -] - -{ #category : #testing } -SmaCCParseNode >> isDescendantFrom: aSmaCCNode [ - | current | - current := self. - [ current isNil or: [ current == aSmaCCNode ] ] - whileFalse: [ current := current parent ]. - ^ current notNil -] - -{ #category : #testing } -SmaCCParseNode >> isErrorNode [ - ^ false -] - -{ #category : #testing } -SmaCCParseNode >> isListMatch [ - ^ false -] - -{ #category : #accessing } -SmaCCParseNode >> lookupNode: aBlock [ - | current | - current := self. - [ current isNil or: [ aBlock value: current ] ] - whileFalse: [ current := current parent ]. - ^ current -] - -{ #category : #matching } -SmaCCParseNode >> match: aSmaCCParseNode inContext: aDictionary [ - self class = aSmaCCParseNode class - ifFalse: [ ^ false ]. - (self - matchVariables: self tokenVariables - to: aSmaCCParseNode - inContext: aDictionary) - ifFalse: [ ^ false ]. - (self - matchVariables: self nodeVariables - to: aSmaCCParseNode - inContext: aDictionary) - ifFalse: [ ^ false ]. - (self - matchCollectionVariables: self compositeTokenVariables - to: aSmaCCParseNode - inContext: aDictionary) - ifFalse: [ ^ false ]. - ^ self - matchCollectionVariables: self compositeNodeVariables - to: aSmaCCParseNode - inContext: aDictionary -] - -{ #category : #matching } -SmaCCParseNode >> matchCollection: matchNodes index: matchIndex to: programNodes index: programIndex inContext: aDictionary [ - | node currentIndex currentDictionary nodes | - matchNodes size < matchIndex - ifTrue: [ ^ programNodes size < programIndex ]. - node := matchNodes at: matchIndex. - node isListMatch - ifTrue: - [ currentIndex := programIndex - 1. - [ currentDictionary := aDictionary copy. - programNodes size < currentIndex - or: - [ (self - matchCollection: matchNodes - index: matchIndex + 1 - to: programNodes - index: currentIndex + 1 - inContext: currentDictionary) - and: - [ nodes := programNodes copyFrom: programIndex to: currentIndex. - (node match: nodes inContext: currentDictionary) - ifTrue: - [ currentDictionary - keysAndValuesDo: [ :key :value | aDictionary at: key put: value ]. - ^ true ]. - false ] ] ] whileFalse: [ currentIndex := currentIndex + 1 ]. - ^ false ]. - programNodes size < programIndex - ifTrue: [ ^ false ]. - (node match: (programNodes at: programIndex) inContext: aDictionary) - ifFalse: [ ^ false ]. - ^ self - matchCollection: matchNodes - index: matchIndex + 1 - to: programNodes - index: programIndex + 1 - inContext: aDictionary -] - -{ #category : #matching } -SmaCCParseNode >> matchCollection: receiverCollection to: argumentCollection inContext: aDictionary [ - ^ self - matchCollection: receiverCollection - index: 1 - to: argumentCollection - index: 1 - inContext: aDictionary -] - -{ #category : #matching } -SmaCCParseNode >> matchCollectionVariables: aCollection to: aSmaCCParseNode inContext: aDictionary [ - ^ aCollection - allSatisfy: - [ :each | - self - matchCollection: (self perform: each) - to: (aSmaCCParseNode perform: each) - inContext: aDictionary ] -] - -{ #category : #matching } -SmaCCParseNode >> matchVariables: aCollection to: aSmaCCParseNode inContext: aDictionary [ - ^ aCollection - allSatisfy: - [ :each | - | myValue otherValue | - myValue := self perform: each. - otherValue := aSmaCCParseNode perform: each. - myValue isNil - ifTrue: [ otherValue isNil ] - ifFalse: [ myValue match: otherValue inContext: aDictionary ] ] -] - -{ #category : #accessing } -SmaCCParseNode >> nodeOfType: aSmaCCParseNodeClassOrCollection [ - | isCollection | - isCollection := aSmaCCParseNodeClassOrCollection isKindOf: Collection. - ^ self - lookupNode: - [ :each | - isCollection - ifTrue: - [ aSmaCCParseNodeClassOrCollection - anySatisfy: [ :class | each isKindOf: class ] ] - ifFalse: [ each isKindOf: aSmaCCParseNodeClassOrCollection ] ] -] - -{ #category : #variables } -SmaCCParseNode >> nodeVariables [ - ^ #() -] - -{ #category : #iterating } -SmaCCParseNode >> nodesDo: nodeBlock [ - self nodesDo: nodeBlock andTokensDo: nil -] - -{ #category : #iterating } -SmaCCParseNode >> nodesDo: nodeBlock andTokensDo: tokenBlock [ - self nodesDo: nodeBlock andTokensDo: tokenBlock includeErrors: false -] - -{ #category : #iterating } -SmaCCParseNode >> nodesDo: nodeBlock andTokensDo: tokenBlock includeErrors: aBoolean [ - | block | - nodeBlock notNil - ifTrue: [ block := [ :each | (self perform: each) ifNotNil: nodeBlock ]. - self nodeVariables do: block. - self ignoredNodeVariables do: block. - block := [ :each | (self perform: each) ifNotNil: [ :nodes | nodes do: nodeBlock ] ]. - self compositeNodeVariables do: block. - self ignoredCompositeNodeVariables do: block ]. - tokenBlock notNil - ifTrue: [ block := [ :each | (self perform: each) ifNotNil: tokenBlock ]. - self tokenVariables do: block. - self ignoredTokenVariables do: block. - block := [ :each | (self perform: each) ifNotNil: [ :nodes | nodes do: tokenBlock ] ]. - self compositeTokenVariables do: block. - self ignoredCompositeTokenVariables do: block ]. - block := [ :each | - nodeBlock notNil - ifTrue: [ (each isKindOf: SmaCCParseNode) - ifTrue: [ nodeBlock value: each ] ]. - tokenBlock notNil - ifTrue: [ (each isKindOf: SmaCCToken) - ifTrue: [ tokenBlock value: each ] ]. - (each isKindOf: Collection) - ifTrue: [ each do: block ] ]. - self otherVariables do: [ :sel | block value: (self perform: sel) ]. - self ignoredOtherVariables do: [ :sel | block value: (self perform: sel) ] -] - -{ #category : #variables } -SmaCCParseNode >> otherVariables [ - ^ #() -] - -{ #category : #accessing } -SmaCCParseNode >> parent [ - ^ parent -] - -{ #category : #accessing } -SmaCCParseNode >> parent: aSmaCCParseNode [ - parent := aSmaCCParseNode -] - -{ #category : #accessing } -SmaCCParseNode >> parentOfType: aSmaCCParseNodeClassOrCollection [ - ^ parent notNil - ifTrue: [ parent nodeOfType: aSmaCCParseNodeClassOrCollection ] - ifFalse: [ nil ] -] - -{ #category : #accessing } -SmaCCParseNode >> parserClass [ - ^ self class parserClass -] - -{ #category : #copying } -SmaCCParseNode >> postCopy [ - super postCopy. - self - allGettersDo: - [ :each | - self - perform: (self convertToSetter: each) - with: - ((self compositeVariableSelectors includes: each) - ifTrue: [ (self perform: each) collect: [ :item | item copy ] ] - ifFalse: [ (self perform: each) copy ]) ] -] - -{ #category : #printing } -SmaCCParseNode >> printOn: aStream [ - super printOn: aStream. - self topParent completeSource notNil ifTrue: [ - aStream - nextPut: $(; - nextPutAll: (self topParent completeSource copyFrom: self startPosition to: self stopPosition) asString; - nextPut: $) ] -] - -{ #category : #'accessing-attributes' } -SmaCCParseNode >> removeAttributeNamed: aSymbol [ - attributes isNil - ifTrue: [ ^ self ]. - attributes removeKey: aSymbol ifAbsent: [ ] -] - -{ #category : #accessing } -SmaCCParseNode >> removePositions [ - self removeAttributeNamed: #startPosition. - self removeAttributeNamed: #stopPosition -] - -{ #category : #replacing } -SmaCCParseNode >> replace: originalSmaCCParseNode with: newSmaCCParseNode [ - SmaCCParseNode instSize + 1 to: self class instSize do: - [ :i | - | each | - each := self instVarAt: i. - each == originalSmaCCParseNode - ifTrue: [ self instVarAt: i put: newSmaCCParseNode ] - ifFalse: - [ (each isKindOf: SequenceableCollection) - ifTrue: - [ each - keysAndValuesDo: - [ :index :value | - value == originalSmaCCParseNode - ifTrue: [ each at: index put: newSmaCCParseNode ] ] ] ] ]. - self completeSource - ifNotNil: - [ :source | - source - replaceFrom: originalSmaCCParseNode startPosition - to: originalSmaCCParseNode stopPosition - with: newSmaCCParseNode source ]. - newSmaCCParseNode parent: self -] - -{ #category : #source } -SmaCCParseNode >> replaceToken: aSmaCCToken withSource: aString [ - self completeSource - replaceFrom: aSmaCCToken startPosition - to: aSmaCCToken stopPosition - with: aString -] - -{ #category : #replacing } -SmaCCParseNode >> replaceWith: aSmaCCParseNode [ - parent replace: self with: aSmaCCParseNode -] - -{ #category : #source } -SmaCCParseNode >> replaceWithSource: aString [ - ^ self completeSource - replaceFrom: self startPosition - to: self stopPosition - with: aString -] - -{ #category : #private } -SmaCCParseNode >> safePerform: aSymbol [ - ^ (self respondsTo: aSymbol) - ifTrue: [ self perform: aSymbol ] - ifFalse: [ nil ] -] - -{ #category : #'collection handling' } -SmaCCParseNode >> setParents: aCollection to: anObject [ - aCollection isNil - ifTrue: [ ^ self ]. - aCollection do: [ :each | each parent: anObject ] -] - -{ #category : #variables } -SmaCCParseNode >> singularVariableSelectors [ - ^ #(#tokenVariables #nodeVariables #ignoredTokenVariables #ignoredNodeVariables #otherVariables #ignoredOtherVariables) -] - -{ #category : #variables } -SmaCCParseNode >> singularVariables [ - ^ self singularVariableSelectors - inject: Set new - into: - [ :sum :each | - sum - addAll: (self perform: each); - yourself ] -] - -{ #category : #accessing } -SmaCCParseNode >> sortedChildren [ - ^ self children - asSortedCollection: - [ :a :b | - | startA startB | - startA := a startPosition. - startB := b startPosition. - startA isNil - or: - [ b notNil - and: - [ startA class = startB class - ifTrue: [ startA < startB ] - ifFalse: [ startA class name < startB class name ] ] ] ] -] - -{ #category : #source } -SmaCCParseNode >> source [ - ^ self completeSource - ifNotNil: - [ :value | (value copyFrom: self startPosition to: self stopPosition) asString ] -] - -{ #category : #accessing } -SmaCCParseNode >> sourceInterval [ - ^ self startPosition to: self stopPosition -] - -{ #category : #accessing } -SmaCCParseNode >> startPosition [ - ^ self attributeNamed: #startPosition ifAbsentPut: [ self calculateStartPosition ] -] - -{ #category : #accessing } -SmaCCParseNode >> stopPosition [ - ^ self attributeNamed: #stopPosition ifAbsentPut: [ self calculateStopPosition ] -] - -{ #category : #variables } -SmaCCParseNode >> tokenVariables [ - ^ #() -] - -{ #category : #accessing } -SmaCCParseNode >> topParent [ - | current | - current := self. - [ current parent notNil ] whileTrue: [ current := current parent ]. - ^ current -] - -{ #category : #variables } -SmaCCParseNode >> variableSelectors [ - ^ #(#tokenVariables #compositeTokenVariables #nodeVariables #compositeNodeVariables #otherVariables) -] - -{ #category : #iterating } -SmaCCParseNode >> withAllNodesDo: nodeBlock [ - nodeBlock value: self. - self allNodesDo: nodeBlock -] - -{ #category : #iterating } -SmaCCParseNode >> withAllNodesDo: nodeBlock andTokensDo: tokenBlock [ - self withAllNodesDo: nodeBlock andTokensDo: tokenBlock includesErrors: false -] - -{ #category : #iterating } -SmaCCParseNode >> withAllNodesDo: nodeBlock andTokensDo: tokenBlock includesErrors: aBoolean [ - nodeBlock value: self. - self allNodesDo: nodeBlock andTokensDo: tokenBlock includeErrors: aBoolean -] - -{ #category : #iterating } -SmaCCParseNode >> withAllNodesOfType: aClass do: nodeBlock [ - (self isKindOf: aClass) - ifTrue: [ nodeBlock value: self ]. - self allNodesOfType: aClass do: nodeBlock -] diff --git a/src/SmaCC_Runtime/SmaCCParseNodeVisitor.class.st b/src/SmaCC_Runtime/SmaCCParseNodeVisitor.class.st deleted file mode 100644 index 602cc4372..000000000 --- a/src/SmaCC_Runtime/SmaCCParseNodeVisitor.class.st +++ /dev/null @@ -1,43 +0,0 @@ -" -SmaCCParseNodeVisitor is an abstract visitor for the SmaCC parse trees. - - -" -Class { - #name : #SmaCCParseNodeVisitor, - #superclass : #Object, - #category : #'SmaCC_Runtime' -} - -{ #category : #visiting } -SmaCCParseNodeVisitor >> accept: anObject [ - (anObject isKindOf: SmaCCParseNode) - ifTrue: [ ^ self acceptNode: anObject ]. - (anObject isKindOf: Collection) - ifTrue: [ ^ self acceptNodes: anObject ]. - ^ anObject -] - -{ #category : #visiting } -SmaCCParseNodeVisitor >> acceptNode: aSmaCCParseNode [ - aSmaCCParseNode isNil - ifTrue: [ ^ nil ]. - ^ aSmaCCParseNode acceptVisitor: self -] - -{ #category : #visiting } -SmaCCParseNodeVisitor >> acceptNodes: aCollection [ - aCollection do: [ :each | self acceptNode: each ]. - ^ aCollection -] - -{ #category : #visiting } -SmaCCParseNodeVisitor >> visitSmaCCError: aSmaCCError [ - ^ self visitSmaCCParseNode: aSmaCCError -] - -{ #category : #visiting } -SmaCCParseNodeVisitor >> visitSmaCCParseNode: aSmaCCParseNode [ - self acceptNodes: aSmaCCParseNode sortedChildren. - ^ aSmaCCParseNode -] diff --git a/src/SmaCC_Runtime/SmaCCParser.class.st b/src/SmaCC_Runtime/SmaCCParser.class.st deleted file mode 100644 index 35db1db5d..000000000 --- a/src/SmaCC_Runtime/SmaCCParser.class.st +++ /dev/null @@ -1,804 +0,0 @@ -" -SmaCCParser is an abstract class that defines most of the parsing actions. Subclasses will define methods that specify their transitions and reduction actions. These are normally defined automatically when compiling the parser. - -Subclasses must implement the following messages: - accessing - reduceTable - transitionTable - -Instance Variables: - currentToken the token last returned by the scanner that has not been shifted (reduce actions leave the current token alone) - errorToken the token where a parse error occurred - nodeStack collection of items on stack. These items are specific to the parser and can be any object. - scanner our scanner - stateStack the stack of states for our parser (standard LR state stack) - - -" -Class { - #name : #SmaCCParser, - #superclass : #Object, - #instVars : [ - 'scanner', - 'currentToken', - 'errorToken', - 'stateStack', - 'nodeStack', - 'errorHandler' - ], - #classInstVars : [ - 'cacheId', - 'defaultEncoding' - ], - #category : #'SmaCC_Runtime' -} - -{ #category : #accessing } -SmaCCParser class >> ambiguousTransitions [ - ^ #() -] - -{ #category : #caching } -SmaCCParser class >> cacheId [ - ^ '?' -] - -{ #category : #caching } -SmaCCParser class >> checkCaches [ - cacheId ~= self cacheId - ifTrue: [ self resetCaches. - self scannerClass initialize. - cacheId := self cacheId ] -] - -{ #category : #accessing } -SmaCCParser class >> defaultEncoding [ - ^ defaultEncoding - ifNil: [ self == SmaCCParser - ifTrue: [ nil ] - ifFalse: [ superclass defaultEncoding ] ] -] - -{ #category : #accessing } -SmaCCParser class >> defaultEncoding: aString [ - defaultEncoding := aString -] - -{ #category : #accessing } -SmaCCParser class >> defaultStartingState [ - ^ 1 -] - -{ #category : #accessing } -SmaCCParser class >> errorBlock: aBlock [ - ^ [ :ex | - | returnValue | - returnValue := aBlock numArgs = 3 - ifTrue: - [ aBlock value: ex tag value: ex description value: ex tag ] - ifFalse: - [ aBlock numArgs = 1 - ifTrue: [ aBlock value: ex tag ] - ifFalse: [ aBlock value: ex description value: ex tag position ] ]. - ex return: returnValue ] -] - -{ #category : #'file types' } -SmaCCParser class >> fileExtension [ - ^ '' -] - -{ #category : #'file types' } -SmaCCParser class >> fileExtensionType [ - ^ 'All files' -] - -{ #category : #'file types' } -SmaCCParser class >> fileExtensions [ - ^ Array with: self fileExtension -] - -{ #category : #'instance creation' } -SmaCCParser class >> on: aStream [ - | parser scanner | - self checkCaches. - scanner := self scannerClass on: aStream. - parser := self new. - parser scanner: scanner. - ^ parser -] - -{ #category : #parsing } -SmaCCParser class >> parse: aString [ - ^ self parse: aString startingAt: self defaultStartingState -] - -{ #category : #parsing } -SmaCCParser class >> parse: aString onError: aBlock [ - ^ [ self parse: aString ] - on: SmaCCParserError - do: (self errorBlock: aBlock) -] - -{ #category : #parsing } -SmaCCParser class >> parse: aString startingAt: anInteger [ - | value | - value := self - parseStream: (ReadStream on: aString) - startingAt: anInteger. - (value isKindOf: SmaCCParseNode) - ifTrue: [ value completeSource: aString ]. - ^ value -] - -{ #category : #parsing } -SmaCCParser class >> parse: aString startingAt: anInteger onError: aBlock [ - ^ [ self parse: aString startingAt: anInteger ] - on: SmaCCParserError - do: (self errorBlock: aBlock) -] - -{ #category : #parsing } -SmaCCParser class >> parseFile: aString [ - ^ self parseFile: aString encoding: self defaultEncoding -] - -{ #category : #parsing } -SmaCCParser class >> parseFile: aString encoding: encodingString [ - | encoding fileRef | - fileRef := aString asFileReference. - encoding := encodingString - ifNil: [ [ fileRef - binaryReadStreamDo: [ :in | (ZnCharacterEncoder detectEncoding: in upToEnd) identifier ] ] - on: ZnCharacterEncodingError - do: [ nil ] ]. - ^ fileRef - readStreamDo: [ :stream | - | contents | - self setEncoding: encoding on: stream. - contents := stream contents. - (self parse: contents startingAt: self defaultStartingState) - ifNotNil: [ :each | - (each isKindOf: SmaCCParseNode) - ifTrue: [ stream position: 0. - each completeSource: contents. - each filename: aString ] ] ] -] - -{ #category : #parsing } -SmaCCParser class >> parseStream: aStream [ - ^ self parseStream: aStream startingAt: self defaultStartingState -] - -{ #category : #parsing } -SmaCCParser class >> parseStream: aStream onError: aBlock [ - ^ [ self parseStream: aStream ] - on: SmaCCParserError - do: (self errorBlock: aBlock) -] - -{ #category : #parsing } -SmaCCParser class >> parseStream: aStream startingAt: anInteger [ - | parser | - parser := self on: aStream. - parser setStartingState: anInteger. - ^ parser parse -] - -{ #category : #parsing } -SmaCCParser class >> parseStream: aStream startingAt: anInteger onError: aBlock [ - ^ [ self parseStream: aStream startingAt: anInteger ] - on: SmaCCParserError - do: (self errorBlock: aBlock) -] - -{ #category : #parsing } -SmaCCParser class >> parseWithErrors: aString [ - ^ self parseWithErrors: aString startingAt: self defaultStartingState -] - -{ #category : #parsing } -SmaCCParser class >> parseWithErrors: aString startingAt: anInteger [ - ^ [ | parser value | - parser := self on: (ReadStream on: aString). - parser setStartingState: anInteger. - parser createDefaultErrorHandlers. - value := parser parse. - (value isKindOf: SmaCCParseNode) - ifTrue: [ value completeSource: aString ]. - ^ value ] - on: SmaCCParserError - do: [ :ex | - ex isResumable - ifTrue: [ ex resume ] - ifFalse: [ ex signal ] ] -] - -{ #category : #accessing } -SmaCCParser class >> reduceTable [ - ^ self subclassResponsibility -] - -{ #category : #caching } -SmaCCParser class >> resetCaches [ - "self withAllSubclasses do: [:each | each resetCaches]" - - -] - -{ #category : #accessing } -SmaCCParser class >> scannerClass [ - ^ self subclassResponsibility -] - -{ #category : #encoding } -SmaCCParser class >> setEncoding: aString on: aStream [ - "Handle Pharo 6/7 streaming differences" - - | encoding | - encoding := aString ifNil: [ self defaultEncoding ifNil: [ 'utf-8' ] ]. - aStream encoding: encoding -] - -{ #category : #encoding } -SmaCCParser class >> setEncodingOn: aStream [ - self setEncoding: nil on: aStream -] - -{ #category : #accessing } -SmaCCParser class >> startingStateNames [ - ^ ((self class allSelectors - select: [ :each | each beginsWith: 'startingStateFor' ]) - collect: [ :each | each asString copyFrom: 17 to: each size ]) - asSortedCollection -] - -{ #category : #accessing } -SmaCCParser class >> symbolNames [ - ^ #() -] - -{ #category : #accessing } -SmaCCParser class >> symbolTypes [ - ^ #() -] - -{ #category : #accessing } -SmaCCParser class >> transitionTable [ - ^ self subclassResponsibility -] - -{ #category : #'private-actions' } -SmaCCParser >> acceptAction [ - ^ 0 -] - -{ #category : #'private-actions' } -SmaCCParser >> actionFor: aSymbolIndex [ - ^ self actionForState: self currentState and: aSymbolIndex -] - -{ #category : #'private-actions' } -SmaCCParser >> actionForCurrentToken [ - self tryAllTokens - ifTrue: - [ | ids action | - ids := currentToken ids. - 1 to: ids size do: - [ :i | - action := self actionFor: (ids at: i). - (action bitAnd: self actionMask) = self errorAction - ifFalse: [ ^ action ] ]. - ^ self errorAction ] - ifFalse: [ ^ self actionFor: currentToken ids first ] -] - -{ #category : #'private-actions' } -SmaCCParser >> actionForState: stateIndex and: aSymbolIndex [ - | index row | - row := self transitionTable at: stateIndex. - ^ (row at: 1) == 0 - ifTrue: - [ index := self binarySearchIn: row for: aSymbolIndex size: 2. - index == 0 - ifTrue: [ ^ self errorAction ] - ifFalse: [ ^ ((row at: 2) bitShift: 8) + (row at: 3) ] ] - ifFalse: - [ index := self binarySearchIn: row for: aSymbolIndex size: 4. - index == 0 - ifTrue: [ ^ self errorAction ] - ifFalse: [ ^ ((row at: index - 2) bitShift: 8) - + (row at: index - 1) ] ] -] - -{ #category : #'private-actions' } -SmaCCParser >> actionMask [ - ^ 2r11 -] - -{ #category : #'private-actions' } -SmaCCParser >> actionsAndSymbolsForState: stateIndex do: aBlock [ - | action bytes | - bytes := self transitionTable at: stateIndex. - (bytes at: 1) = 0 - ifTrue: [ action := ((bytes at: 2) bitShift: 8) + (bytes at: 3). - 4 to: bytes size by: 2 do: [ :i | aBlock value: action value: ((bytes at: i) bitShift: 8) + (bytes at: i + 1) ] ] - ifFalse: [ 2 to: bytes size by: 4 do: - [ :i | aBlock value: ((bytes at: i) bitShift: 8) + (bytes at: i + 1) value: ((bytes at: i + 2) bitShift: 8) + (bytes at: i + 3) ] ] -] - -{ #category : #'error handling' } -SmaCCParser >> actionsForState: stateIndex and: aSymbolIndex [ - ^ Array with: (self actionForState: stateIndex and: aSymbolIndex) -] - -{ #category : #'private-ast' } -SmaCCParser >> add: anObject to: aCollection [ - anObject isNil - ifTrue: [ ^ self ]. - aCollection add: anObject -] - -{ #category : #'private-ast' } -SmaCCParser >> addAll: origCollection to: aCollection [ - origCollection isNil - ifTrue: [ ^ self ]. - origCollection - do: [ :each | - each notNil - ifTrue: [ aCollection add: each ] ] -] - -{ #category : #'private-ast' } -SmaCCParser >> addAllFirst: origCollection to: aCollection [ - origCollection isNil ifTrue: [^self]. - origCollection reverseDo: [:each | each notNil ifTrue: [aCollection addFirst: each]] -] - -{ #category : #'private-ast' } -SmaCCParser >> addFirst: anObject to: aCollection [ - anObject isNil ifTrue: [^self]. - aCollection addFirst: anObject -] - -{ #category : #'private-actions' } -SmaCCParser >> allActionsAndSymbolsForState: stateIndex do: aBlock [ - self - actionsAndSymbolsForState: stateIndex - do: [ :action :symbol | - | row | - (action bitAnd: self actionMask) = 2r11 - ifTrue: [ row := self ambiguousTransitions at: (action bitShift: -2). - 1 to: row size by: 2 do: [ :i | aBlock value: ((row at: i) bitShift: 8) + (row at: i + 1) value: symbol ] ] - ifFalse: [ aBlock value: action value: symbol ] ] -] - -{ #category : #private } -SmaCCParser >> ambiguousTransitions [ - ^ self class ambiguousTransitions -] - -{ #category : #private } -SmaCCParser >> binarySearchIn: aRow for: aSymbolIndex size: step [ - | start mid length high low midItem stop | - high := aSymbolIndex bitShift: -8. - low := aSymbolIndex bitAnd: 16rFF. - start := 4. - stop := aRow size - 1. - length := (stop - start) // step. - [ length > 4 ] - whileTrue: - [ length := length bitShift: -1. - mid := length * step + start. - midItem := aRow at: mid. - ((midItem == high and: [ (aRow at: mid + 1) <= low ]) - or: [ midItem < high ]) - ifTrue: [ start := mid ] - ifFalse: [ stop := mid ] ]. - [ start <= stop ] - whileTrue: - [ ((aRow at: start) == high and: [ (aRow at: start + 1) == low ]) - ifTrue: [ ^ start ]. - start := start + step ]. - ^ 0 -] - -{ #category : #'error handling' } -SmaCCParser >> checkForErrors [ - "If we have an error correction installed, we might have handled the errors. If we did, we may not - want to return the result. Raise an error with the location of the initial error. If we want the result, - we can resume the exception." - - errorToken isNil - ifTrue: [ ^ self ]. - currentToken := errorToken. - self reportErrorMessage: 'Token not expected' resumable: true -] - -{ #category : #'initialize-release' } -SmaCCParser >> createDefaultErrorHandlers [ - (self hasStateThatShifts: self errorTokenId) - ifTrue: [ errorHandler := SmaCCSpecificErrorNodeHandler on: self ] - ifFalse: [ self hasNodeTypes - ifTrue: [ errorHandler := SmaCCDefaultErrorNodeHandler on: self ] ] -] - -{ #category : #private } -SmaCCParser >> currentState [ - ^ stateStack last -] - -{ #category : #private } -SmaCCParser >> currentToken [ - ^ currentToken -] - -{ #category : #'error handling' } -SmaCCParser >> dismissErrorToken [ - | token | - token := currentToken. - currentToken := nil. - self getNextToken. - ^ token -] - -{ #category : #'error handling' } -SmaCCParser >> dismissStackTopForErrorRecovery: anInteger [ - | stackContents | - stackContents := Array new: anInteger. - anInteger to: 1 by: -1 do: [ :i | - stateStack removeLast. - stackContents at: i put: nodeStack removeLast ]. - ^ stackContents -] - -{ #category : #private } -SmaCCParser >> dismissToken [ - currentToken := nil -] - -{ #category : #accessing } -SmaCCParser >> emptySymbolTokenId [ - ^ scanner emptySymbolTokenId -] - -{ #category : #'private-actions' } -SmaCCParser >> errorAction [ - ^ 3 -] - -{ #category : #'error handling' } -SmaCCParser >> errorSymbolShiftActionsForState: stateIndex [ - | action actions | - actions := self actionsForState: stateIndex and: self errorTokenId. - action := actions - detect: [ :act | (act bitAnd: self actionMask) = self shiftAction ] - ifNone: [ 0 ]. - ^ (action bitAnd: self actionMask) = self shiftAction - ifTrue: [ action bitShift: -2 ] - ifFalse: [ 0 ] -] - -{ #category : #accessing } -SmaCCParser >> errorTable [ - ^ #() -] - -{ #category : #accessing } -SmaCCParser >> errorToken [ - ^ errorToken -] - -{ #category : #'error handling' } -SmaCCParser >> errorToken: aSmaCCToken [ - errorToken notNil - ifTrue: [ ^ self ]. - errorToken := aSmaCCToken -] - -{ #category : #accessing } -SmaCCParser >> errorTokenId [ - ^ scanner errorTokenId -] - -{ #category : #private } -SmaCCParser >> getNextToken [ - currentToken isNil - ifTrue: [ currentToken := scanner next ] -] - -{ #category : #'error handling' } -SmaCCParser >> handleError: anInteger [ - ^ errorHandler handleError: anInteger -] - -{ #category : #testing } -SmaCCParser >> hasNodeTypes [ - ^ self symbolTypes anySatisfy: [ :each | self isNodeType: each ] -] - -{ #category : #testing } -SmaCCParser >> hasStateThatShifts: symbolIndex [ - 1 to: self transitionTable size do: [ :i | - ((self actionsForState: i and: symbolIndex) anySatisfy: [ :action | (action bitAnd: self actionMask) = self shiftAction ]) - ifTrue: [ ^ true ] ]. - ^ false -] - -{ #category : #'initialize-release' } -SmaCCParser >> initialize [ - super initialize. - nodeStack := OrderedCollection new. - errorHandler := SmaCCNoErrorHandler on: self -] - -{ #category : #testing } -SmaCCParser >> isEOFToken [ - ^ currentToken ids first = self emptySymbolTokenId -] - -{ #category : #testing } -SmaCCParser >> isNodeType: aSymbol [ - ^ (Smalltalk at: aSymbol ifAbsent: [ Object ]) includesBehavior: SmaCCParseNode -] - -{ #category : #'standard reduction rules' } -SmaCCParser >> liftFirstValue: aCollection [ - ^ aCollection at: 1 -] - -{ #category : #'standard reduction rules' } -SmaCCParser >> liftLastValue: aCollection [ - ^ aCollection last -] - -{ #category : #'standard reduction rules' } -SmaCCParser >> liftSecondValue: aCollection [ - ^ aCollection at: 2 -] - -{ #category : #'standard reduction rules' } -SmaCCParser >> nil [ - ^ nil -] - -{ #category : #private } -SmaCCParser >> nodeStack [ - ^ nodeStack -] - -{ #category : #accessing } -SmaCCParser >> parse [ - | result | - self setDefaultStartingStateIfNone. - self performParsingLoop. - result := nodeStack last. - (result respondsTo: #comments:) - ifTrue: [ result comments: scanner comments ]. - ^ result -] - -{ #category : #'private-actions' } -SmaCCParser >> performAction: action [ - | value actionType | - actionType := action bitAnd: self actionMask. - value := action bitShift: -2. - actionType == self shiftAction - ifTrue: [ self shift: value ] - ifFalse: - [ actionType == self reduceAction - ifTrue: [ self reduce: value ] - ifFalse: [ self handleError: value ] ] -] - -{ #category : #private } -SmaCCParser >> performParsingLoop [ - | action | - [ self getNextToken. - action := self actionForCurrentToken. - action = self acceptAction ] - whileFalse: [ self performAction: action ]. - self checkForErrors -] - -{ #category : #private } -SmaCCParser >> performReduceEntry: entryArray with: items [ - | symbol | - symbol := entryArray at: 3. - ^ symbol last == $: - ifTrue: [ self perform: symbol with: items ] - ifFalse: [ self perform: symbol ] -] - -{ #category : #private } -SmaCCParser >> popNodeStack [ - ^ nodeStack removeLast -] - -{ #category : #accessing } -SmaCCParser >> position [ - ^ currentToken isNil - ifTrue: [ scanner position ] - ifFalse: [ currentToken startPosition ] -] - -{ #category : #accessing } -SmaCCParser >> position: anInteger [ - scanner setPosition: anInteger -] - -{ #category : #'private-actions' } -SmaCCParser >> reduce: anInteger [ - | reduceEntry items size | - reduceEntry := self reduceTable at: anInteger. - items := Array new: (size := reduceEntry at: 2). - size to: 1 by: -1 do: [ :i | - items at: i put: self popNodeStack. - stateStack removeLast ]. - nodeStack addLast: (self performReduceEntry: reduceEntry with: items). - stateStack - addLast: ((self actionFor: (reduceEntry at: 1)) bitShift: -2) -] - -{ #category : #'private-actions' } -SmaCCParser >> reduceAction [ - ^ 2r10 -] - -{ #category : #'private-actions' } -SmaCCParser >> reduceFor: aCollection [ - | newCollection item | - (aCollection allSatisfy: [ :each | each class ~~ OrderedCollection ]) - ifTrue: [ ^ aCollection asOrderedCollection ]. - aCollection first class == OrderedCollection - ifTrue: - [ newCollection := aCollection first. - 2 to: aCollection size do: - [ :i | - item := aCollection at: i. - item class == OrderedCollection - ifTrue: [ newCollection addAll: item ] - ifFalse: [ newCollection add: item ] ]. - ^ newCollection ]. - newCollection := OrderedCollection new. - aCollection - do: - [ :each | - each class == OrderedCollection - ifTrue: [ newCollection addAll: each ] - ifFalse: [ newCollection add: each ] ]. - ^ newCollection -] - -{ #category : #accessing } -SmaCCParser >> reduceTable [ - ^ self class reduceTable -] - -{ #category : #'error handling' } -SmaCCParser >> reportError: anInteger [ - self - reportErrorMessage: - (anInteger = 0 - ifTrue: [ 'Token not expected' ] - ifFalse: [ self errorTable at: anInteger ]) -] - -{ #category : #'error handling' } -SmaCCParser >> reportErrorMessage: aString [ - self reportErrorMessage: aString resumable: false -] - -{ #category : #'error handling' } -SmaCCParser >> reportErrorMessage: aString resumable: aBoolean [ - SmaCCParserError new - isResumable: aBoolean; - messageText: aString; - tag: self; - signal -] - -{ #category : #accessing } -SmaCCParser >> scanner [ - ^ scanner -] - -{ #category : #'initialize-release' } -SmaCCParser >> scanner: aScanner [ - scanner := aScanner -] - -{ #category : #accessing } -SmaCCParser >> scope [ - ^ scanner scope -] - -{ #category : #accessing } -SmaCCParser >> scope: aSymbol [ - scanner scope: aSymbol -] - -{ #category : #'initialize-release' } -SmaCCParser >> setDefaultStartingStateIfNone [ - stateStack isNil - ifTrue: [ self setStartingState: self class defaultStartingState ] -] - -{ #category : #'initialize-release' } -SmaCCParser >> setStartingState: startingState [ - stateStack := OrderedCollection with: startingState -] - -{ #category : #'private-actions' } -SmaCCParser >> shift: stateIndex [ - stateStack addLast: stateIndex. - nodeStack addLast: currentToken. - currentToken := nil -] - -{ #category : #'private-actions' } -SmaCCParser >> shiftAction [ - ^ 2r01 -] - -{ #category : #private } -SmaCCParser >> stateStack [ - ^ stateStack -] - -{ #category : #'standard reduction rules' } -SmaCCParser >> stringValue: anOrderedCollection [ - ^ anOrderedCollection first value -] - -{ #category : #accessing } -SmaCCParser >> symbolNames [ - ^ self class symbolNames -] - -{ #category : #accessing } -SmaCCParser >> symbolTypes [ - ^ self class symbolTypes -] - -{ #category : #accessing } -SmaCCParser >> transitionTable [ - ^ self class transitionTable -] - -{ #category : #testing } -SmaCCParser >> tryAllTokens [ - ^ false -] - -{ #category : #'error handling' } -SmaCCParser >> willAccept: potentialStateStack [ - | action compoundAction reduceEntry size | - compoundAction := self actionForState: potentialStateStack last and: self emptySymbolTokenId. - action := compoundAction bitAnd: self actionMask. - action == self acceptAction - ifTrue: [ ^ true ]. - action == self reduceAction - ifTrue: [ reduceEntry := self reduceTable at: (compoundAction bitShift: -2). - size := reduceEntry at: 2. - size timesRepeat: [ potentialStateStack removeLast ]. - potentialStateStack add: ((self actionForState: potentialStateStack last and: (reduceEntry at: 1)) bitShift: -2). - ^ self willAccept: potentialStateStack ]. - ^ false -] - -{ #category : #'error handling' } -SmaCCParser >> willShift: potentialStateStack [ - | action compoundAction reduceEntry size | - compoundAction := self actionForState: potentialStateStack last and: currentToken ids first. - action := compoundAction bitAnd: self actionMask. - action == self shiftAction - ifTrue: [ ^ true ]. - action == self reduceAction - ifTrue: [ reduceEntry := self reduceTable at: (compoundAction bitShift: -2). - size := reduceEntry at: 2. - size timesRepeat: [ potentialStateStack removeLast ]. - potentialStateStack add: ((self actionForState: potentialStateStack last and: (reduceEntry at: 1)) bitShift: -2). - ^ self willShift: potentialStateStack ]. - ^ false -] diff --git a/src/SmaCC_Runtime/SmaCCParserError.class.st b/src/SmaCC_Runtime/SmaCCParserError.class.st deleted file mode 100644 index 5f2a66062..000000000 --- a/src/SmaCC_Runtime/SmaCCParserError.class.st +++ /dev/null @@ -1,29 +0,0 @@ -" -SmaCCParserError is the exception raised when a parsing error occurs. The description of the exception will be the error message and the parameter of the exception is the parser. With this information, you can insert a custom error message in your text view that you are parsing. For example, in VisualWorks, the following code will insert an error message into your text view: - textController insertAndSelect: ex description , ' ->' at: ex parameter position - -" -Class { - #name : #SmaCCParserError, - #superclass : #Error, - #instVars : [ - 'isResumable' - ], - #category : #'SmaCC_Runtime' -} - -{ #category : #'initialize-release' } -SmaCCParserError >> initialize [ - super initialize. - isResumable := false -] - -{ #category : #testing } -SmaCCParserError >> isResumable [ - ^ isResumable -] - -{ #category : #accessing } -SmaCCParserError >> isResumable: aBoolean [ - isResumable := aBoolean -] diff --git a/src/SmaCC_Runtime/SmaCCPatternNode.class.st b/src/SmaCC_Runtime/SmaCCPatternNode.class.st deleted file mode 100644 index 70bf6d734..000000000 --- a/src/SmaCC_Runtime/SmaCCPatternNode.class.st +++ /dev/null @@ -1,70 +0,0 @@ -" -SmaCCPatternNode is a parse node that matches other parse nodes when you are searching or rewriting parse trees. - -Instance Variables: - patternToken the token that holds our name and properties - - -" -Class { - #name : #SmaCCPatternNode, - #superclass : #SmaCCParseNode, - #instVars : [ - 'patternToken' - ], - #category : #'SmaCC_Runtime' -} - -{ #category : #'instance creation' } -SmaCCPatternNode class >> onToken: aSmaCCPatternToken [ - ^ self new - patternToken: aSmaCCPatternToken; - yourself -] - -{ #category : #comparing } -SmaCCPatternNode >> = anObject [ - ^ super = anObject and: [ self patternToken = anObject patternToken ] -] - -{ #category : #matching } -SmaCCPatternNode >> copyInContext: aDictionary [ - ^ (aDictionary at: self ifAbsent: [ nil ]) copy -] - -{ #category : #comparing } -SmaCCPatternNode >> hash [ - ^ self patternToken hash -] - -{ #category : #testing } -SmaCCPatternNode >> isListMatch [ - ^ patternToken isListMatch -] - -{ #category : #matching } -SmaCCPatternNode >> match: aSmaCCParseNode inContext: aDictionary [ - ^ (aDictionary at: self ifAbsentPut: [ aSmaCCParseNode ]) - = aSmaCCParseNode - and: [ patternToken testBlock value: aSmaCCParseNode ] -] - -{ #category : #accessing } -SmaCCPatternNode >> name [ - ^ patternToken name -] - -{ #category : #accessing } -SmaCCPatternNode >> patternToken [ - ^ patternToken -] - -{ #category : #accessing } -SmaCCPatternNode >> patternToken: anObject [ - patternToken := anObject -] - -{ #category : #variables } -SmaCCPatternNode >> tokenVariables [ - ^ #(#patternToken) -] diff --git a/src/SmaCC_Runtime/SmaCCPatternToken.class.st b/src/SmaCC_Runtime/SmaCCPatternToken.class.st deleted file mode 100644 index 54f93456a..000000000 --- a/src/SmaCC_Runtime/SmaCCPatternToken.class.st +++ /dev/null @@ -1,159 +0,0 @@ -" -SmaCCPatternToken is a token for pattern nodes. - -Instance Variables: - isList do we match collections or single objects - isNode can we match other parse nodes - isToken can we match other tokens - nodeClassName when matching a parse node, limit it to these types of nodes - testBlock after a match, run some code that tests the match - - -" -Class { - #name : #SmaCCPatternToken, - #superclass : #SmaCCToken, - #instVars : [ - 'isList', - 'isToken', - 'isNode', - 'testBlock', - 'nodeClassName' - ], - #category : #'SmaCC_Runtime' -} - -{ #category : #comparing } -SmaCCPatternToken >> = aSmaCCToken [ - ^ self class = aSmaCCToken class - and: [ self name = aSmaCCToken name ] -] - -{ #category : #accessing } -SmaCCPatternToken >> beList [ - isList := true -] - -{ #category : #accessing } -SmaCCPatternToken >> beNode [ - isNode := true. - isToken := false -] - -{ #category : #accessing } -SmaCCPatternToken >> beToken [ - isToken := true. - isNode := false -] - -{ #category : #accessing } -SmaCCPatternToken >> beTokenOrNode [ - isToken := true. - isNode := true -] - -{ #category : #private } -SmaCCPatternToken >> buildStructure [ - | index code source | - isList := isToken := false. - isNode := true. - testBlock := [ :node | true ]. - index := value indexOf: ${. - index > 0 - ifFalse: [ ^ self ]. - code := value copyFrom: index + 1 to: (value lastIndexOf: $}) - 1. - source := 'self ' , code. - RBParser parseExpression: source onError: [ :s :p | self error: 'Invalid pattern expression' ]. - self class compiler - source: source; - logged: false; - receiver: self; - evaluate -] - -{ #category : #matching } -SmaCCPatternToken >> copyInContext: aDictionary [ - ^ aDictionary at: self -] - -{ #category : #comparing } -SmaCCPatternToken >> hash [ - ^ self class hash bitXor: self name hash -] - -{ #category : #testing } -SmaCCPatternToken >> isListMatch [ - ^ isList -] - -{ #category : #testing } -SmaCCPatternToken >> isNode [ - ^ isNode -] - -{ #category : #testing } -SmaCCPatternToken >> isPattern [ - ^ true -] - -{ #category : #testing } -SmaCCPatternToken >> isToken [ - ^ isToken -] - -{ #category : #matching } -SmaCCPatternToken >> match: aSmaCCToken inContext: aDictionary [ - ^ (aSmaCCToken isKindOf: SmaCCToken) - and: - [ (aDictionary at: self ifAbsentPut: [ aSmaCCToken ]) = aSmaCCToken - and: [ self testBlock value: aSmaCCToken ] ] -] - -{ #category : #accessing } -SmaCCPatternToken >> name [ - | resultStream readStream char | - (value first isAlphaNumeric or: [ value first == $_ ]) - ifTrue: [ ^ value ]. - resultStream := WriteStream on: String new. - readStream := ReadStream on: value. - readStream next. - [ char := readStream next. - char isLetter or: [ char == $_ ] ] whileFalse. - [ resultStream nextPut: char. - char := readStream next. - char isAlphaNumeric or: [ char == $_ ] ] whileTrue. - ^ resultStream contents -] - -{ #category : #accessing } -SmaCCPatternToken >> nodeClassName [ - ^ nodeClassName -] - -{ #category : #accessing } -SmaCCPatternToken >> nodeClassName: aString [ - nodeClassName := aString -] - -{ #category : #accessing } -SmaCCPatternToken >> testBlock [ - ^ [ :node | - (nodeClassName isNil - or: - [ node - isKindOf: - (node class environment - at: self nodeClassName - ifAbsent: [ SmaCCParseNode ]) ]) and: [ testBlock value: node ] ] -] - -{ #category : #accessing } -SmaCCPatternToken >> testBlock: aBlock [ - testBlock := aBlock -] - -{ #category : #'initialize-release' } -SmaCCPatternToken >> value: aString start: startPositionInteger ids: aCollection [ - super value: aString start: startPositionInteger ids: aCollection. - self buildStructure -] diff --git a/src/SmaCC_Runtime/SmaCCScanner.class.st b/src/SmaCC_Runtime/SmaCCScanner.class.st deleted file mode 100644 index db053d668..000000000 --- a/src/SmaCC_Runtime/SmaCCScanner.class.st +++ /dev/null @@ -1,370 +0,0 @@ -" -SmaCCScanner is an abstract class that represents a scanner for the parser. The scanner converts its string input into SmaCCToken objects that the parser then uses for its parsing. - -Subclasses must implement the following messages: - accessing - emptySymbolTokenId - errorTokenId - scanForToken - -Instance Variables: - comments a collection of comment intervals (array of start position & stop position) - currentCharacter the current character we are scanning - lastMatchWasEmpty was our last scanning match an empty string -- don't allow two empty matches in a row - lastOutputStreamMatchPosition the position in the outputStream of the last match - matchActions the actions for the last match (a symbol means that the action should be performed on the scanner) - matchEnd the position of the last match in the stream (our input stream) - outputStream the matched characters go in this stream. After a match is made, we take this stream's contents and create a token object. - returnMatchBlock when we match a token evaluate this block with the token (hack to return from multiple levels) - start the starting position of a match in the stream - state the state of the scanner - stream our input - - - -" -Class { - #name : #SmaCCScanner, - #superclass : #Object, - #instVars : [ - 'stream', - 'start', - 'matchActions', - 'matchEnd', - 'currentCharacter', - 'outputStream', - 'lastOutputStreamMatchPosition', - 'lastMatchWasEmpty', - 'returnMatchBlock', - 'scope', - 'comments' - ], - #classInstVars : [ - 'keywordMap' - ], - #category : #'SmaCC_Runtime' -} - -{ #category : #'class initialization' } -SmaCCScanner class >> initialize [ - self initializeKeywordMap -] - -{ #category : #'class initialization' } -SmaCCScanner class >> initializeKeywordMap [ - keywordMap := Dictionary new -] - -{ #category : #accessing } -SmaCCScanner class >> keywordMap [ - keywordMap isNil - ifTrue: [ self initializeKeywordMap ]. - ^ keywordMap -] - -{ #category : #testing } -SmaCCScanner class >> needsLineNumbers [ - "Redefine to return true, if you need line number information" - - ^ false -] - -{ #category : #'instance creation' } -SmaCCScanner class >> on: aStream [ - ^ self new - on: - (self needsLineNumbers - ifTrue: [ SmaCCLineNumberStream on: aStream ] - ifFalse: [ aStream ]); - yourself -] - -{ #category : #testing } -SmaCCScanner >> atEnd [ - ^ stream atEnd -] - -{ #category : #private } -SmaCCScanner >> checkForKeyword: aString [ - | stateMap action oldActions entry | - action := matchActions isSymbol - ifTrue: [ matchActions ] - ifFalse: [ matchActions first ]. - stateMap := self class keywordMap at: action ifAbsent: [ nil ]. - stateMap isNil - ifTrue: [ ^ self ]. - oldActions := matchActions. - entry := stateMap at: (self keywordFor: aString) ifAbsent: [ nil ]. - entry isNil - ifTrue: [ ^ self ]. - entry isInteger - ifTrue: [ matchActions := entry ] - ifFalse: - [ (entry last includes: scope) - ifFalse: [ ^ self ]. - matchActions := entry first ]. - matchActions isInteger - ifTrue: [ matchActions := (Array with: matchActions) , oldActions ] -] - -{ #category : #private } -SmaCCScanner >> checkForValidMatch [ - matchActions isNil - ifTrue: [ self scannerError ] -] - -{ #category : #'default token handling' } -SmaCCScanner >> comment [ - comments add: (Array with: start + 1 with: matchEnd). - ^ self whitespace -] - -{ #category : #accessing } -SmaCCScanner >> comments [ - ^ comments -] - -{ #category : #accessing } -SmaCCScanner >> contents [ - | writeStream token | - writeStream := WriteStream with: Array new. - [ self atEnd ] - whileFalse: - [ token := self next. - token notNil - ifTrue: [ writeStream nextPut: token ] ]. - ^ writeStream contents -] - -{ #category : #private } -SmaCCScanner >> createTokenFor: string [ - | token | - token := self tokenClass - value: string - start: start + 1 - ids: matchActions. - outputStream reset. - ^ token -] - -{ #category : #private } -SmaCCScanner >> currentCharacter [ - ^ currentCharacter -] - -{ #category : #private } -SmaCCScanner >> debugStart [ - ^ start -] - -{ #category : #accessing } -SmaCCScanner >> emptySymbolTokenId [ - ^ self subclassResponsibility -] - -{ #category : #accessing } -SmaCCScanner >> eofTokenId [ - ^ Array with: self emptySymbolTokenId -] - -{ #category : #accessing } -SmaCCScanner >> errorTokenId [ - ^ self subclassResponsibility -] - -{ #category : #'initialize-release' } -SmaCCScanner >> initialize [ - super initialize. - outputStream := WriteStream with: String new. - lastMatchWasEmpty := true. - scope := #default. - comments := OrderedCollection new -] - -{ #category : #utility } -SmaCCScanner >> keywordFor: aString [ - "Subclasses can override this to ignore case" - - ^ aString -] - -{ #category : #private } -SmaCCScanner >> lastOutputStreamMatchPosition [ - ^ lastOutputStreamMatchPosition -] - -{ #category : #accessing } -SmaCCScanner >> lineNumber [ - "This requires the stream to be a line number stream (see the #needsLineNumbers class method)." - - ^ stream lineNumber -] - -{ #category : #private } -SmaCCScanner >> matchActions [ - ^ matchActions -] - -{ #category : #accessing } -SmaCCScanner >> next [ - self resetScanner. - returnMatchBlock := [ :match | ^ match ]. - ^ self scanForToken -] - -{ #category : #'initialize-release' } -SmaCCScanner >> on: aStream [ - stream := aStream. - start := stream position -] - -{ #category : #private } -SmaCCScanner >> outputStream [ - ^ outputStream -] - -{ #category : #'default token handling' } -SmaCCScanner >> patternToken [ - | token | - token := SmaCCPatternToken - value: outputStream contents - start: start + 1 - ids: matchActions. - outputStream reset. - ^ token -] - -{ #category : #accessing } -SmaCCScanner >> position [ - ^ stream position -] - -{ #category : #accessing } -SmaCCScanner >> position: anInteger [ - ^ stream position: anInteger -] - -{ #category : #private } -SmaCCScanner >> recordAndReportMatch: aCollection [ - self recordMatch: aCollection. - ^ self reportLastMatch -] - -{ #category : #private } -SmaCCScanner >> recordMatch: aCollection [ - matchActions := aCollection. - matchEnd := stream position. - lastOutputStreamMatchPosition := outputStream position -] - -{ #category : #private } -SmaCCScanner >> reportLastMatch [ - "The scanner has found the end of a token and must report it" - - | string action | - self checkForValidMatch. - self resetOutputToLastMatch. - stream position: matchEnd. - string := outputStream contents. - self checkForKeyword: string. - action := matchActions isSymbol - ifTrue: - [ matchActions ] - ifFalse: [ self tokenActions - at: matchActions first - ifAbsent: [ nil ] ]. "This is only necessary to run version 1 parsers on version 2 SmaCC" - ^ action notNil - ifTrue: [ self perform: action ] - ifFalse: [ self createTokenFor: string ] -] - -{ #category : #private } -SmaCCScanner >> resetOutputToLastMatch [ - outputStream position: lastOutputStreamMatchPosition. - lastOutputStreamMatchPosition == 0 - ifTrue: - [ lastMatchWasEmpty - ifTrue: [ self scannerError ]. - lastMatchWasEmpty := true ] - ifFalse: [ lastMatchWasEmpty := false ] -] - -{ #category : #private } -SmaCCScanner >> resetScanner [ - matchActions := nil. - start := stream position. - outputStream reset. - lastOutputStreamMatchPosition := 0 -] - -{ #category : #private } -SmaCCScanner >> scanForString: aString [ - ^ aString - allSatisfy: [ :each | - self step. - currentCharacter == each ] -] - -{ #category : #accessing } -SmaCCScanner >> scanForToken [ - ^ self subclassResponsibility -] - -{ #category : #private } -SmaCCScanner >> scannerError [ - | string | - (stream atEnd and: [ start == stream position ]) - ifTrue: [ string := ''. - matchActions := self eofTokenId ] - ifFalse: - [ stream position: start. - string := String with: stream next. - matchActions := #(0) ]. - returnMatchBlock value: (self createTokenFor: string) -] - -{ #category : #accessing } -SmaCCScanner >> scope [ - ^ scope -] - -{ #category : #accessing } -SmaCCScanner >> scope: aSymbol [ - scope := aSymbol -] - -{ #category : #accessing } -SmaCCScanner >> setPosition: anInteger [ - ^ stream position: anInteger -] - -{ #category : #private } -SmaCCScanner >> step [ - stream atEnd - ifTrue: [ ^ returnMatchBlock value: self reportLastMatch ]. - currentCharacter := stream next. - outputStream nextPut: currentCharacter -] - -{ #category : #private } -SmaCCScanner >> stream [ - ^stream -] - -{ #category : #utility } -SmaCCScanner >> tokenActions [ - ^ #() -] - -{ #category : #private } -SmaCCScanner >> tokenClass [ - ^ SmaCCToken -] - -{ #category : #'default token handling' } -SmaCCScanner >> whitespace [ - "By default, eat the whitespace" - - self resetScanner. - ^ self scanForToken -] diff --git a/src/SmaCC_Runtime/SmaCCSpecificErrorNodeHandler.class.st b/src/SmaCC_Runtime/SmaCCSpecificErrorNodeHandler.class.st deleted file mode 100644 index 72041b80f..000000000 --- a/src/SmaCC_Runtime/SmaCCSpecificErrorNodeHandler.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #SmaCCSpecificErrorNodeHandler, - #superclass : #SmaCCErrorNodeHandler, - #category : #'SmaCC_Runtime' -} - -{ #category : #'private-error handling' } -SmaCCSpecificErrorNodeHandler >> errorShiftActionsForState: stateIndex [ - | actions | - actions := self actionsForState: stateIndex and: self errorTokenId. - ^ (actions select: [ :each | (each bitAnd: self actionMask) = self shiftAction ]) collect: [ :each | each bitShift: -2 ] -] - -{ #category : #'private-error handling' } -SmaCCSpecificErrorNodeHandler >> finishErrorParse: errorToken dismissed: dismissedTokens [ - | handlerStates | - handlerStates := self errorHandlerStates reverse. - (self finishErrorParse: errorToken dismissed: dismissedTokens handlerStates: handlerStates) - ifFalse: [ super finishErrorParse: errorToken dismissed: dismissedTokens ] -] - -{ #category : #'private-error handling' } -SmaCCSpecificErrorNodeHandler >> performErrorReductions [ - | action actions | - [ actions := self actionsForState: self stateStack last and: self errorTokenId. - action := actions detect: [ :each | (each bitAnd: self actionMask) = self reduceAction ] ifNone: [ 0 ]. - (action bitAnd: self actionMask) == self reduceAction ] whileTrue: [ self reduce: (action bitShift: -2) ] -] diff --git a/src/SmaCC_Runtime/SmaCCToken.class.st b/src/SmaCC_Runtime/SmaCCToken.class.st deleted file mode 100644 index 897328491..000000000 --- a/src/SmaCC_Runtime/SmaCCToken.class.st +++ /dev/null @@ -1,141 +0,0 @@ -" -SmaCCTokens are used as the interface objects between scanner and parser. They hold the string that was scanned and its position information. Also, included in the token is its id. The id specifies what type of token it is. - -Instance Variables: - id the list of possible token types this represents. There can be overlapping tokens, so we list all of the id here. The default parser only looks at the first id, but we can redefine this behavior in a subclass to look at all possibilities until we find a valid token. - start the starting position of the token in the original input - value the value of our token (normally a string, but could be anything) - - -" -Class { - #name : #SmaCCToken, - #superclass : #Object, - #instVars : [ - 'start', - 'ids', - 'value' - ], - #category : #'SmaCC_Runtime' -} - -{ #category : #'instance creation' } -SmaCCToken class >> value: aString [ - ^ self value: aString start: 0 ids: #() -] - -{ #category : #public } -SmaCCToken class >> value: aString start: anInteger id: anObject [ - ^ self value: aString start: anInteger ids: anObject -] - -{ #category : #'instance creation' } -SmaCCToken class >> value: aString start: anInteger ids: aCollection [ - ^ self new - value: aString start: anInteger ids: aCollection; - yourself -] - -{ #category : #comparing } -SmaCCToken >> = aSmaCCToken [ - ^ self class = aSmaCCToken class - and: [ self value = aSmaCCToken value ] -] - -{ #category : #matching } -SmaCCToken >> copyInContext: aDictionary [ - ^ self -] - -{ #category : #comparing } -SmaCCToken >> hash [ - ^ self value hash -] - -{ #category : #public } -SmaCCToken >> id [ - ^ ids -] - -{ #category : #accessing } -SmaCCToken >> ids [ - ^ ids -] - -{ #category : #accessing } -SmaCCToken >> ids: anArray [ - ids := anArray -] - -{ #category : #testing } -SmaCCToken >> isListMatch [ - ^ false -] - -{ #category : #testing } -SmaCCToken >> isPattern [ - ^ false -] - -{ #category : #testing } -SmaCCToken >> isSyntaxError [ - ^ self ids first = 0 -] - -{ #category : #matching } -SmaCCToken >> match: anObject inContext: aDictionary [ - ^ self = anObject -] - -{ #category : #printing } -SmaCCToken >> printOn: aStream [ - aStream - nextPut: ${; - nextPutAll: self value; - nextPut: $(; - nextPutAll: self startPosition printString; - nextPut: $,; - nextPutAll: self stopPosition printString; - nextPut: $,; - nextPutAll: self ids printString; - nextPutAll: ')}' -] - -{ #category : #accessing } -SmaCCToken >> size [ - ^ self stopPosition - self startPosition + 1 -] - -{ #category : #accessing } -SmaCCToken >> source [ - ^ value -] - -{ #category : #accessing } -SmaCCToken >> sourceInterval [ - ^ self startPosition to: self stopPosition -] - -{ #category : #accessing } -SmaCCToken >> startPosition [ - ^ start -] - -{ #category : #accessing } -SmaCCToken >> stopPosition [ - start isNil - ifTrue: [ ^ nil ]. - ^ start + value size - 1 -] - -{ #category : #accessing } -SmaCCToken >> value [ - ^ value -] - -{ #category : #'initialize-release' } -SmaCCToken >> value: aString start: startPositionInteger ids: aCollection [ - value := aString. - start := startPositionInteger. - ids := aCollection -] diff --git a/src/SmaCC_Runtime/package.st b/src/SmaCC_Runtime/package.st deleted file mode 100644 index 60beeb642..000000000 --- a/src/SmaCC_Runtime/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_Runtime' } diff --git a/src/SmaCC_Smalltalk_Parser/StParser.class.st b/src/SmaCC_Smalltalk_Parser/StParser.class.st deleted file mode 100644 index 320aef98c..000000000 --- a/src/SmaCC_Smalltalk_Parser/StParser.class.st +++ /dev/null @@ -1,1065 +0,0 @@ -Class { - #name : #StParser, - #superclass : #SmaCCParser, - #category : #'SmaCC_Smalltalk_Parser' -} - -{ #category : #'generated-accessing' } -StParser class >> cacheId [ - ^'2019-04-15T17:15:43.070416-05:00' -] - -{ #category : #generated } -StParser class >> definitionComment [ -" - : ( | \_) ( | [\d\_]) * - ; - - : \d - ; - - : \- - ; - - : \' [^\']* \' (\' [^\']* \')* - ; - - : \: - ; - - : \: ( \: )+ - ; - - : [\~\-\!\@\%\&\*\+\=\\\|\?\/\>\<\,] [\~\!\@\%\&\*\+\=\\\|\?\/\>\<\,]? - ; - - : + - ; - - : \"" [^\""]* \"" - ; - - : (\. )+ - ; - - : \$ . - ; - - : \: \= - ; - - : . - ; # For VW literal arrays that handle #(;) -> #(#';') - -%id ; -%start SequenceNode ; - -Method - : MethodSequenceNode - {(RBMethodNode - selector: '1' value asSymbol - arguments: #() - body: '2' last) - ""tags: '2' first; "" - yourself} - | BinaryMethodName MethodSequenceNode - {(RBMethodNode - selector: '1' first - arguments: '1' last - body: '2' last) - ""tags: '2' first; "" - yourself} - | KeywordMethodName MethodSequenceNode - {(RBMethodNode - selector: '1' first contents asSymbol - arguments: '1' last - body: '2' last) - ""tags: '2' first; "" - yourself} - ; -BinaryMethodName - : Variable - {Array with: '1' value asSymbol with: (Array with: '2')} - ; -KeywordMethodName - : Variable - {| stream | - stream := WriteStream on: (String new: 30). - stream nextPutAll: '1' value. - Array with: stream with: (OrderedCollection with: '2')} - | KeywordMethodName Variable - {'1' first nextPutAll: '2' value. - '1' last add: '3'. - '1'} - ; -Primitives - : {OrderedCollection new} - | Primitives ""<"" PrimitiveMessageSend "">"" - {'1' - add: ('2' startPosition to: '4' startPosition); - yourself} - ; -PrimitiveMessageSend - : - | PrimitiveMessageSend - {nil} - | PrimitiveMessageSend Literal - {nil} - | PrimitiveMessageSend ""("" - {nil} - | PrimitiveMessageSend "")"" - {nil} - | PrimitiveMessageSend ""{"" - {nil} - | PrimitiveMessageSend ""}"" - {nil} - | PrimitiveMessageSend "";"" - {nil} - | PrimitiveMessageSend ""."" - {nil} - | PrimitiveMessageSend - {nil} - | PrimitiveMessageSend - {nil} - ; -MethodSequenceNode - : Primitives ""|"" TemporaryVariables ""|"" Primitives Statements - {Array with: ('1' addAll: '5'; yourself) with: (RBSequenceNode temporaries: '3' statements: '6')} - | Primitives ""||"" Primitives Statements - {Array with: ('1' addAll: '3'; yourself) with: (RBSequenceNode temporaries: #() statements: '4')} - | Primitives Statements - {Array with: '1' with: (RBSequenceNode temporaries: #() statements: '2')} - ; -SequenceNode - : Temporaries Statements - {RBSequenceNode temporaries: '1' statements: '2'} - ; -Temporaries - : {#()} - | ""||"" - {#()} - | ""|"" TemporaryVariables ""|"" - {'2'} - ; -TemporaryVariables - : {OrderedCollection new} - | TemporaryVariables Variable - {'1' - add: '2'; - yourself} - ; -Statements - : {OrderedCollection new} - | StatementList OptionalPeriod - {#liftFirstValue:} - | StatementList ""."" ""^"" Expression OptionalPeriod - {'1' - add: (RBReturnNode value: '4'); - yourself} - | ""^"" Expression OptionalPeriod - {OrderedCollection with: (RBReturnNode value: '2')} - ; -OptionalPeriod - : - | ""."" - ; -StatementList - : Expression - | StatementList ""."" Expression - {'1' - add: '3'; - yourself} - ; -Block - : ""["" BlockArgs ""|"" SequenceNode ""]"" - {RBBlockNode arguments: '2' body: '4'} - | ""["" SequenceNode ""]"" - {RBBlockNode body: '2'} - | ""["" BlockArgs ""]"" - {RBBlockNode arguments: '2' body: (RBSequenceNode statements: #())} - | ""["" BlockArgs ""||"" TemporaryVariables ""|"" Statements ""]"" - {RBBlockNode arguments: '2' body: (RBSequenceNode temporaries: '4' statements: '6')} - ; -BlockArgs - : "":"" Variable - {OrderedCollection with: '2'} - | BlockArgs "":"" Variable - {'1' - add: '3'; - yourself} - ; -Expression - : Variable "":="" Expression - {RBAssignmentNode variable: '1' value: '3'} - | Cascade - {#liftFirstValue:} - ; -Cascade - : MessageSend CascadeList - {| messages | - '2' isEmpty ifTrue: [^'1']. - messages := OrderedCollection new: '2' size + 1. - messages add: '1'. - '2' do: [:each | messages add: (RBMessageNode receiver: '1' receiver selector: each first contents asSymbol arguments: each last)]. - RBCascadeNode messages: messages} - | Primary - {#liftFirstValue:} - ; -MessageSend - : KeywordMessageSend - {#liftFirstValue:} - | BinaryMessageSend - {#liftFirstValue:} - | UnaryMessageSend - {#liftFirstValue:} - ; -CascadeList - : {OrderedCollection new} - | CascadeList "";"" SimpleMessage - {'1' - add: '3'; - yourself} - ; -SimpleMessage - : UnaryMessage - {#liftFirstValue:} - | BinaryMessage - {#liftFirstValue:} - | KeywordMessage - {#liftFirstValue:} - ; -KeywordMessageSend - : BinaryMessageSend KeywordMessage - {#createMessageNodeFrom:} - | UnaryMessageSend KeywordMessage - {#createMessageNodeFrom:} - | Primary KeywordMessage - {#createMessageNodeFrom:} - ; -KeywordMessage - : KeywordArgument - {| stream | - stream := WriteStream on: (String new: 30). - stream nextPutAll: '1' value. - Array with: stream with: (OrderedCollection with: '2')} - | KeywordMessage KeywordArgument - {'1' first nextPutAll: '2' value. - '1' last add: '3'. - '1'} - ; -KeywordArgument - : BinaryMessageSend - {#liftFirstValue:} - | UnaryMessageSend - {#liftFirstValue:} - | Primary - {#liftFirstValue:} - ; -BinaryMessageSend - : BinaryMessageSend BinaryMessage - {#createMessageNodeFrom:} - | UnaryMessageSend BinaryMessage - {#createMessageNodeFrom:} - | Primary BinaryMessage - {#createMessageNodeFrom:} - ; -BinaryMessage - : BinaryArgument - {Array with: (ReadStream on: '1' value) with: (Array with: '2')} - ; -BinaryArgument - : UnaryMessageSend - {#liftFirstValue:} - | Primary - {#liftFirstValue:} - ; -UnaryMessageSend - : UnaryMessageSend UnaryMessage - {#createMessageNodeFrom:} - | Primary UnaryMessage - {#createMessageNodeFrom:} - ; -UnaryMessage - : - {Array with: (ReadStream on: '1' value) with: #()} - ; -Primary - : ""("" Expression "")"" - {#liftSecondValue:} - | Literal - {RBLiteralNode value: '1'} - | Variable - {#liftFirstValue:} - | Block - {#liftFirstValue:} - ; -Variable - : - {RBVariableNode named: '1' value} - | - {RBVariableNode named: '1' value} - ; -Literal - : ""true"" - {true} - | ""false"" - {false} - | ""nil"" - {nil} - | - {'1' value} - | - {'1' value} - | - {'1' value at: 2} - | - {('1' value copyFrom: 2 to: '1' value size - 1) copyReplaceAll: '''''' with: ''''} - | ""#"" - {(('2' value copyFrom: 2 to: '2' value size - 1) copyReplaceAll: '''''' with: '''') asSymbol} - | ""#"" - {'2' value asSymbol} - | ""#"" - {'2' value asSymbol} - | ""#"" - {'2' value asSymbol} - | ""#"" - {'2' value asSymbol} - | ""#"" ""["" ByteArray ""]"" - {'3' contents} - | ""#"" ""("" Array "")"" - {'3' contents} - | ""#"" ""{"" ""}"" - {'3' value asQualifiedReference} - | ""#"" ""{"" ""}"" - {'3' value asQualifiedReference} - ; -ByteArray - : {WriteStream on: ByteArray new} - | ByteArray - {'1' - nextPut: '2' value; - yourself} - ; -Array - : {WriteStream on: Array new} - | Array ArrayLiteral - {'1' - nextPut: '2'; - yourself} - | Array "":="" - {'2' stopPosition + 1 = '3' startPosition - ifTrue: ['1' nextPut: ('2' value, ':') asSymbol] - ifFalse: ['1' nextPut: '2' value asSymbol; nextPut: #':']. - self position: '3' startPosition. - currentToken := nil. - '1'} - ; -ArrayLiteral - : Literal - {#liftFirstValue:} - | - {'1' value asSymbol} - | - {'1' value asSymbol} - | - {'1' value asSymbol} - | - {'1' value asSymbol} - | ""{"" ""}"" - {'2' value asQualifiedReference} - | ""{"" ""}"" - {'2' value asQualifiedReference} - | ""("" Array "")"" - {'2' contents} - | ""["" ByteArray ""]"" - {'2' contents} - | - {'1' value asSymbol} - | - {'1' value} - ;" -] - -{ #category : #'file types' } -StParser class >> fileExtension [ - ^ '.st' -] - -{ #category : #'file types' } -StParser class >> fileExtensionType [ - ^ 'Smalltalk source' -] - -{ #category : #accessing } -StParser class >> parseExpression: aString [ - ^ self - simplifyExpression: - (self parse: aString startingAt: self startingStateForSequenceNode) -] - -{ #category : #accessing } -StParser class >> parseExpression: aString onError: aBlock [ - ^ self - simplifyExpression: - (self - parse: aString - startingAt: self startingStateForSequenceNode - onError: aBlock) -] - -{ #category : #accessing } -StParser class >> parseMethod: aString [ - ^ self parse: aString startingAt: self startingStateForMethod -] - -{ #category : #accessing } -StParser class >> parseMethod: aString onError: aBlock [ - ^ self - parse: aString - startingAt: self startingStateForMethod - onError: aBlock -] - -{ #category : #generated } -StParser class >> reduceTable [ -^#( - #(41 0 #reduceActionForTemporaries1: 2767873 false ) - #(37 0 #reduceActionForPrimitives1: 1617921 false ) - #(42 0 #reduceActionForPrimitives1: 2852865 false ) - #(41 1 #reduceActionForTemporaries1: 2767874 false ) - #(43 0 #reduceActionForPrimitives1: 2976769 false ) - #(34 2 #reduceActionForMethod1: 643073 false ) - #(62 1 #reduceActionForVariable1: 6361089 false ) - #(62 1 #reduceActionForVariable1: 6361090 false ) - #(36 2 #reduceActionForKeywordMethodName1: 1299457 false ) - #(35 2 #reduceActionForBinaryMethodName1: 1188865 false ) - #(34 2 #reduceActionForMethod2: 643074 false ) - #(34 2 #reduceActionForMethod3: 643075 false ) - #(63 1 #reduceActionForLiteral2: 6477826 false ) - #(63 1 #nil 6477827 false ) - #(63 1 #reduceActionForLiteral1: 6477825 false ) - #(63 1 #reduceActionForLiteral4: 6477828 false ) - #(63 1 #reduceActionForLiteral4: 6477829 false ) - #(63 1 #reduceActionForLiteral7: 6477831 false ) - #(63 1 #reduceActionForLiteral6: 6477830 false ) - #(40 2 #reduceActionForSequenceNode1: 2669569 false ) - #(44 0 #reduceFor: 3279873 false ) - #(61 1 #liftFirstValue: 6191108 false ) - #(45 1 #reduceFor: 3309569 false ) - #(48 1 #liftFirstValue: 3938306 false ) - #(51 0 #reduceActionForPrimitives1: 4591617 false ) - #(50 1 #liftFirstValue: 4441089 false ) - #(50 1 #liftFirstValue: 4441090 false ) - #(50 1 #liftFirstValue: 4441091 false ) - #(49 1 #liftFirstValue: 4065282 false ) - #(61 1 #liftFirstValue: 6191107 false ) - #(61 1 #reduceActionForPrimary2: 6191106 false ) - #(38 0 #reduceFor: 1784833 false ) - #(39 2 #reduceActionForMethodSequenceNode3: 2226179 false ) - #(36 3 #reduceActionForKeywordMethodName2: 1299458 false ) - #(41 3 #liftSecondValue: 2767875 false ) - #(42 2 #reduceActionForTemporaryVariables2: 2852866 false ) - #(65 0 #reduceActionForArray1: 7392257 false ) - #(64 0 #reduceActionForByteArray1: 7268353 false ) - #(63 2 #reduceActionForLiteral9: 6477833 false ) - #(63 2 #reduceActionForLiteral8: 6477832 false ) - #(63 2 #reduceActionForLiteral9: 6477835 false ) - #(63 2 #reduceActionForLiteral9: 6477836 false ) - #(63 2 #reduceActionForLiteral9: 6477834 false ) - #(44 1 #reduceFor: 3279874 false ) - #(43 2 #liftFirstValue: 2976770 false ) - #(49 2 #reduceActionForCascade1: 4065281 false ) - #(53 2 #createMessageNodeFrom: 4850689 false ) - #(56 2 #createMessageNodeFrom: 5534721 false ) - #(60 1 #reduceActionForUnaryMessage1: 6107137 false ) - #(53 2 #createMessageNodeFrom: 4850690 false ) - #(56 2 #createMessageNodeFrom: 5534722 false ) - #(59 2 #createMessageNodeFrom: 5965825 false ) - #(53 2 #createMessageNodeFrom: 4850691 false ) - #(56 2 #createMessageNodeFrom: 5534723 false ) - #(59 2 #createMessageNodeFrom: 5965826 false ) - #(61 3 #liftSecondValue: 6191105 false ) - #(47 2 #reduceActionForBlockArgs1: 3807233 false ) - #(46 3 #reduceActionForBlock2: 3414018 false ) - #(46 3 #reduceActionForBlock3: 3414019 false ) - #(43 3 #reduceActionForStatements4: 2976772 false ) - #(45 3 #reduceActionForStatementList2: 3309570 false ) - #(54 2 #reduceActionForKeywordMethodName1: 5064705 false ) - #(55 1 #liftFirstValue: 5391361 false ) - #(55 1 #liftFirstValue: 5391362 false ) - #(55 1 #liftFirstValue: 5391363 false ) - #(57 2 #reduceActionForBinaryMessage1: 5745665 false ) - #(58 1 #liftFirstValue: 5868545 false ) - #(58 1 #liftFirstValue: 5868546 false ) - #(48 3 #reduceActionForExpression1: 3938305 false ) - #(38 2 #nil 1784836 false ) - #(38 2 #nil 1784837 false ) - #(38 2 #nil 1784841 false ) - #(38 2 #nil 1784840 false ) - #(37 4 #reduceActionForPrimitives2: 1617922 false ) - #(38 2 #nil 1784838 false ) - #(38 2 #nil 1784839 false ) - #(38 2 #nil 1784842 false ) - #(38 2 #nil 1784834 false ) - #(38 2 #nil 1784843 false ) - #(38 2 #nil 1784835 false ) - #(39 4 #reduceActionForMethodSequenceNode2: 2226178 false ) - #(63 4 #reduceActionForLiteral14: 6477838 false ) - #(66 1 #reduceActionForArrayLiteral2: 7766018 false ) - #(66 1 #reduceActionForArrayLiteral2: 7766020 false ) - #(66 1 #reduceActionForArrayLiteral2: 7766021 false ) - #(66 1 #reduceActionForArrayLiteral2: 7766019 false ) - #(66 1 #reduceActionForLiteral4: 7766027 false ) - #(66 1 #reduceActionForArrayLiteral2: 7766026 false ) - #(66 1 #liftFirstValue: 7766017 false ) - #(65 2 #reduceActionForArray2: 7392258 false ) - #(63 4 #reduceActionForLiteral14: 6477837 false ) - #(64 2 #reduceActionForByteArray2: 7268354 false ) - #(63 4 #reduceActionForLiteral15: 6477839 false ) - #(63 4 #reduceActionForLiteral15: 6477840 false ) - #(47 3 #reduceActionForStatementList2: 3807234 false ) - #(51 3 #reduceActionForStatementList2: 4591618 false ) - #(52 1 #liftFirstValue: 4710403 false ) - #(52 1 #liftFirstValue: 4710402 false ) - #(52 1 #liftFirstValue: 4710401 false ) - #(54 3 #reduceActionForKeywordMethodName2: 5064706 false ) - #(65 3 #reduceActionForArray3: 7392259 false ) - #(46 5 #reduceActionForBlock1: 3414017 false ) - #(43 5 #reduceActionForStatements3: 2976771 false ) - #(39 6 #reduceActionForMethodSequenceNode1: 2226177 false ) - #(66 3 #reduceActionForArrayLiteral8: 7766024 false ) - #(66 3 #reduceActionForArrayLiteral8: 7766025 false ) - #(66 3 #reduceActionForArrayLiteral6: 7766022 false ) - #(66 3 #reduceActionForArrayLiteral6: 7766023 false ) - #(46 7 #reduceActionForBlock4: 3414020 false ) - ). -] - -{ #category : #'generated-accessing' } -StParser class >> scannerClass [ - ^StScanner -] - -{ #category : #private } -StParser class >> simplifyExpression: aSequenceNode [ - ^ (aSequenceNode statements size == 1 - and: [ aSequenceNode temporaries isEmpty ]) - ifTrue: [ aSequenceNode statements first ] - ifFalse: [ aSequenceNode ] -] - -{ #category : #generated } -StParser class >> startingStateForMethod [ - ^ 1 -] - -{ #category : #generated } -StParser class >> startingStateForSequenceNode [ - ^ 2 -] - -{ #category : #generated } -StParser class >> symbolNames [ - ^ #('"#"' '"("' '")"' '"."' '":"' '":="' '";"' '"<"' '">"' '"["' '"]"' '"^"' '"false"' '"nil"' '"true"' '"{"' '"|"' '"||"' '"}"' '' '' '' '' '' '' '' '' '' '' '' '' '' 'B e g i n' 'Method' 'BinaryMethodName' 'KeywordMethodName' 'Primitives' 'PrimitiveMessageSend' 'MethodSequenceNode' 'SequenceNode' 'Temporaries' 'TemporaryVariables' 'Statements' 'OptionalPeriod' 'StatementList' 'Block' 'BlockArgs' 'Expression' 'Cascade' 'MessageSend' 'CascadeList' 'SimpleMessage' 'KeywordMessageSend' 'KeywordMessage' 'KeywordArgument' 'BinaryMessageSend' 'BinaryMessage' 'BinaryArgument' 'UnaryMessageSend' 'UnaryMessage' 'Primary' 'Variable' 'Literal' 'ByteArray' 'Array' 'ArrayLiteral' 'E O F' 'error') -] - -{ #category : #generated } -StParser class >> transitionTable [ -^#( -#[1 0 13 0 20 0 17 0 24 0 21 0 26 0 25 0 34 0 29 0 35 0 33 0 36] -#[1 0 6 0 1 0 6 0 2 0 6 0 10 0 6 0 12 0 6 0 13 0 6 0 14 0 6 0 15 0 37 0 17 0 41 0 18 0 6 0 20 0 6 0 21 0 6 0 22 0 6 0 23 0 6 0 29 0 6 0 30 0 45 0 40 0 49 0 41 0 6 0 67] -#[1 0 10 0 1 0 10 0 2 0 10 0 8 0 10 0 10 0 10 0 12 0 10 0 13 0 10 0 14 0 10 0 15 0 10 0 17 0 10 0 18 0 10 0 20 0 10 0 21 0 10 0 22 0 10 0 23 0 10 0 29 0 10 0 30 0 53 0 37 0 57 0 39 0 10 0 67] -#[1 0 61 0 20 0 65 0 29 0 69 0 62] -#[1 0 61 0 20 0 65 0 29 0 73 0 62] -#[0 0 0 0 67] -#[1 0 10 0 1 0 10 0 2 0 10 0 8 0 10 0 10 0 10 0 12 0 10 0 13 0 10 0 14 0 10 0 15 0 10 0 17 0 10 0 18 0 10 0 20 0 10 0 21 0 10 0 22 0 10 0 23 0 10 0 29 0 10 0 30 0 53 0 37 0 77 0 39 0 10 0 67] -#[1 0 10 0 1 0 10 0 2 0 10 0 8 0 10 0 10 0 10 0 12 0 10 0 13 0 10 0 14 0 10 0 15 0 10 0 17 0 10 0 18 0 10 0 20 0 10 0 21 0 10 0 22 0 10 0 23 0 81 0 24 0 10 0 29 0 10 0 30 0 53 0 37 0 85 0 39 0 10 0 67] -#[1 0 14 0 17 0 14 0 20 0 14 0 29 0 89 0 42] -#[0 0 18 0 1 0 2 0 10 0 11 0 12 0 13 0 14 0 15 0 20 0 21 0 22 0 23 0 29 0 30 0 67] -#[0 0 0 0 67] -#[1 0 93 0 1 0 97 0 2 0 101 0 10 0 22 0 11 0 105 0 12 0 109 0 13 0 113 0 14 0 117 0 15 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 137 0 43 0 141 0 45 0 173 0 46 0 149 0 48 0 149 0 49 0 157 0 50 0 157 0 53 0 165 0 56 0 169 0 59 0 173 0 61 0 177 0 62 0 181 0 63 0 22 0 67] -#[1 0 93 0 1 0 97 0 2 0 185 0 8 0 101 0 10 0 105 0 12 0 109 0 13 0 113 0 14 0 117 0 15 0 189 0 17 0 193 0 18 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 197 0 43 0 141 0 45 0 173 0 46 0 149 0 48 0 149 0 49 0 157 0 50 0 157 0 53 0 165 0 56 0 169 0 59 0 173 0 61 0 177 0 62 0 181 0 63 0 22 0 67] -#[0 0 26 0 67] -#[0 0 30 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 10 0 11 0 12 0 13 0 14 0 15 0 17 0 18 0 20 0 21 0 22 0 23 0 24 0 26 0 29 0 30 0 67] -#[0 0 34 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 10 0 11 0 12 0 13 0 14 0 15 0 17 0 18 0 20 0 21 0 22 0 23 0 24 0 26 0 29 0 30 0 67] -#[0 0 38 0 1 0 2 0 8 0 10 0 12 0 13 0 14 0 15 0 17 0 18 0 20 0 21 0 22 0 23 0 24 0 29 0 30 0 67] -#[0 0 42 0 1 0 2 0 8 0 10 0 12 0 13 0 14 0 15 0 17 0 18 0 20 0 21 0 22 0 23 0 29 0 30 0 67] -#[0 0 46 0 67] -#[1 0 61 0 20 0 65 0 29 0 201 0 62] -#[0 0 50 0 67] -#[1 0 205 0 17 0 61 0 20 0 65 0 29 0 209 0 62] -#[1 0 213 0 2 0 217 0 10 0 221 0 16 0 225 0 20 0 229 0 23 0 233 0 24 0 237 0 25 0 241 0 26] -#[1 0 93 0 1 0 97 0 2 0 101 0 10 0 109 0 13 0 113 0 14 0 117 0 15 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 173 0 46 0 245 0 48 0 245 0 49 0 157 0 50 0 157 0 53 0 165 0 56 0 169 0 59 0 173 0 61 0 177 0 62 0 181 0 63] -#[1 0 6 0 1 0 6 0 2 0 249 0 5 0 6 0 10 0 6 0 11 0 6 0 12 0 6 0 13 0 6 0 14 0 6 0 15 0 37 0 17 0 41 0 18 0 6 0 20 0 6 0 21 0 6 0 22 0 6 0 23 0 6 0 29 0 6 0 30 0 253 0 40 0 49 0 41 1 1 0 47] -#[1 0 93 0 1 0 97 0 2 0 101 0 10 0 109 0 13 0 113 0 14 0 117 0 15 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 173 0 46 1 5 0 48 1 5 0 49 0 157 0 50 0 157 0 53 0 165 0 56 0 169 0 59 0 173 0 61 0 177 0 62 0 181 0 63] -#[0 0 54 0 1 0 2 0 3 0 4 0 7 0 9 0 10 0 11 0 13 0 14 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 67] -#[0 0 58 0 1 0 2 0 3 0 4 0 7 0 9 0 10 0 11 0 13 0 14 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 67] -#[0 0 62 0 1 0 2 0 3 0 4 0 7 0 9 0 10 0 11 0 13 0 14 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 67] -#[0 0 66 0 1 0 2 0 3 0 4 0 7 0 9 0 10 0 11 0 13 0 14 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 67] -#[0 0 70 0 1 0 2 0 3 0 4 0 7 0 9 0 10 0 11 0 13 0 14 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 67] -#[0 0 74 0 1 0 2 0 3 0 4 0 7 0 9 0 10 0 11 0 13 0 14 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 67] -#[0 0 78 0 1 0 2 0 3 0 4 0 7 0 9 0 10 0 11 0 13 0 14 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 67] -#[0 0 82 0 11 0 67] -#[1 1 9 0 4 0 86 0 11 1 13 0 44 0 86 0 67] -#[0 0 90 0 3 0 4 0 7 0 11 0 20 0 24 0 26 0 67] -#[0 0 94 0 4 0 11 0 67] -#[0 0 98 0 3 0 4 0 11 0 67] -#[1 0 102 0 3 0 102 0 4 0 102 0 7 0 102 0 11 1 17 0 51 0 102 0 67] -#[0 0 106 0 3 0 4 0 7 0 11 0 67] -#[1 0 110 0 3 0 110 0 4 0 110 0 7 0 110 0 11 1 21 0 24 1 25 0 26 1 29 0 54 1 33 0 57 0 110 0 67] -#[1 0 114 0 3 0 114 0 4 0 114 0 7 0 114 0 11 1 37 0 20 1 21 0 24 1 25 0 26 1 41 0 54 1 45 0 57 1 49 0 60 0 114 0 67] -#[1 0 118 0 3 0 118 0 4 0 118 0 11 1 37 0 20 1 21 0 24 1 25 0 26 1 53 0 54 1 57 0 57 1 61 0 60 0 118 0 67] -#[1 0 122 0 3 0 122 0 4 1 65 0 6 0 122 0 11 0 122 0 20 0 122 0 24 0 122 0 26 0 122 0 67] -#[0 0 126 0 3 0 4 0 7 0 11 0 20 0 24 0 26 0 67] -#[1 0 130 0 1 0 130 0 2 0 130 0 3 0 130 0 4 0 130 0 7 0 130 0 9 0 130 0 13 0 130 0 14 0 130 0 15 0 130 0 16 0 130 0 19 0 130 0 20 0 130 0 21 0 130 0 22 0 130 0 23 0 130 0 24 0 130 0 26 0 130 0 30 1 69 0 38] -#[1 0 14 0 17 0 14 0 20 0 14 0 29 1 73 0 42] -#[1 0 10 0 1 0 10 0 2 0 10 0 8 0 10 0 10 0 10 0 12 0 10 0 13 0 10 0 14 0 10 0 15 0 10 0 20 0 10 0 21 0 10 0 22 0 10 0 23 0 10 0 29 0 10 0 30 1 77 0 37 0 10 0 67] -#[0 0 134 0 67] -#[0 0 138 0 1 0 2 0 8 0 10 0 12 0 13 0 14 0 15 0 17 0 18 0 20 0 21 0 22 0 23 0 24 0 29 0 30 0 67] -#[0 0 142 0 1 0 2 0 10 0 11 0 12 0 13 0 14 0 15 0 20 0 21 0 22 0 23 0 29 0 30 0 67] -#[0 0 146 0 17 0 20 0 29] -#[1 0 150 0 1 0 150 0 2 0 150 0 3 0 150 0 10 0 150 0 13 0 150 0 14 0 150 0 15 0 150 0 16 0 150 0 20 0 150 0 21 0 150 0 22 0 150 0 23 0 150 0 24 0 150 0 25 0 150 0 26 0 150 0 29 0 150 0 30 0 150 0 32 1 81 0 65] -#[1 0 154 0 11 0 154 0 21 1 85 0 64] -#[1 1 89 0 20 1 93 0 29] -#[0 0 158 0 1 0 2 0 3 0 4 0 7 0 9 0 10 0 11 0 13 0 14 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 67] -#[0 0 162 0 1 0 2 0 3 0 4 0 7 0 9 0 10 0 11 0 13 0 14 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 67] -#[0 0 166 0 1 0 2 0 3 0 4 0 7 0 9 0 10 0 11 0 13 0 14 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 67] -#[0 0 170 0 1 0 2 0 3 0 4 0 7 0 9 0 10 0 11 0 13 0 14 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 67] -#[0 0 174 0 1 0 2 0 3 0 4 0 7 0 9 0 10 0 11 0 13 0 14 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 67] -#[0 1 97 0 3] -#[1 0 61 0 20 0 65 0 29 1 101 0 62] -#[0 1 105 0 11] -#[1 1 109 0 5 1 113 0 11 1 117 0 17 1 121 0 18] -#[1 1 125 0 4 0 86 0 11 1 129 0 44 0 86 0 67] -#[1 0 93 0 1 0 97 0 2 0 101 0 10 0 178 0 11 1 133 0 12 0 109 0 13 0 113 0 14 0 117 0 15 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 173 0 46 1 137 0 48 1 137 0 49 0 157 0 50 0 157 0 53 0 165 0 56 0 169 0 59 0 173 0 61 0 177 0 62 0 181 0 63 0 178 0 67] -#[0 0 182 0 11 0 67] -#[1 0 186 0 3 0 186 0 4 1 141 0 7 0 186 0 11 0 186 0 67] -#[1 0 93 0 1 0 97 0 2 0 101 0 10 0 109 0 13 0 113 0 14 0 117 0 15 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 1 157 0 46 1 145 0 55 1 149 0 56 1 153 0 59 1 157 0 61 1 157 0 62 0 181 0 63] -#[1 0 93 0 1 0 97 0 2 0 101 0 10 0 109 0 13 0 113 0 14 0 117 0 15 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 1 173 0 46 1 165 0 58 1 169 0 59 1 173 0 61 1 173 0 62 0 181 0 63] -#[1 0 190 0 3 0 190 0 4 0 190 0 7 0 190 0 11 1 177 0 24 0 190 0 67] -#[0 0 194 0 3 0 4 0 7 0 11 0 24 0 26 0 67] -#[0 0 198 0 3 0 4 0 7 0 11 0 20 0 24 0 26 0 67] -#[1 0 202 0 3 0 202 0 4 0 202 0 7 0 202 0 11 1 177 0 24 0 202 0 67] -#[0 0 206 0 3 0 4 0 7 0 11 0 24 0 26 0 67] -#[0 0 210 0 3 0 4 0 7 0 11 0 20 0 24 0 26 0 67] -#[1 0 214 0 3 0 214 0 4 0 214 0 7 0 214 0 11 1 177 0 24 0 214 0 67] -#[0 0 218 0 3 0 4 0 7 0 11 0 24 0 26 0 67] -#[0 0 222 0 3 0 4 0 7 0 11 0 20 0 24 0 26 0 67] -#[1 0 93 0 1 0 97 0 2 0 101 0 10 0 109 0 13 0 113 0 14 0 117 0 15 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 173 0 46 1 181 0 48 1 181 0 49 0 157 0 50 0 157 0 53 0 165 0 56 0 169 0 59 0 173 0 61 0 177 0 62 0 181 0 63] -#[1 0 93 0 1 1 185 0 2 1 189 0 3 1 193 0 4 1 197 0 7 1 201 0 9 0 109 0 13 0 113 0 14 0 117 0 15 1 205 0 16 1 209 0 19 1 213 0 20 0 121 0 21 0 125 0 22 0 129 0 23 1 217 0 24 1 221 0 26 0 133 0 30 1 225 0 63] -#[1 1 229 0 17 0 61 0 20 0 65 0 29 0 209 0 62] -#[1 0 93 0 1 0 97 0 2 0 185 0 8 0 101 0 10 0 105 0 12 0 109 0 13 0 113 0 14 0 117 0 15 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 1 233 0 43 0 141 0 45 0 173 0 46 0 149 0 48 0 149 0 49 0 157 0 50 0 157 0 53 0 165 0 56 0 169 0 59 0 173 0 61 0 177 0 62 0 181 0 63 0 22 0 67] -#[1 0 93 0 1 1 237 0 2 1 241 0 3 1 245 0 10 0 109 0 13 0 113 0 14 0 117 0 15 1 249 0 16 1 253 0 20 0 121 0 21 0 125 0 22 0 129 0 23 2 1 0 24 2 5 0 25 2 9 0 26 2 13 0 29 0 133 0 30 2 17 0 32 2 25 0 63 2 25 0 66] -#[1 2 29 0 11 2 33 0 21] -#[0 2 37 0 19] -#[0 2 41 0 19] -#[0 0 226 0 3 0 4 0 7 0 11 0 20 0 24 0 26 0 67] -#[0 0 230 0 5 0 11 0 17 0 18] -#[0 0 234 0 3 0 4 0 7 0 11 0 20 0 24 0 26 0 67] -#[1 0 61 0 20 0 65 0 29 2 45 0 62] -#[0 0 238 0 3 0 4 0 7 0 11 0 20 0 24 0 26 0 67] -#[1 0 6 0 1 0 6 0 2 0 6 0 10 0 6 0 11 0 6 0 12 0 6 0 13 0 6 0 14 0 6 0 15 0 37 0 17 0 41 0 18 0 6 0 20 0 6 0 21 0 6 0 22 0 6 0 23 0 6 0 29 0 6 0 30 2 49 0 40 0 49 0 41] -#[1 0 14 0 17 0 14 0 20 0 14 0 29 2 53 0 42] -#[0 0 178 0 11 0 67] -#[0 0 242 0 11 0 67] -#[1 0 93 0 1 0 97 0 2 0 101 0 10 0 109 0 13 0 113 0 14 0 117 0 15 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 0 173 0 46 2 57 0 48 2 57 0 49 0 157 0 50 0 157 0 53 0 165 0 56 0 169 0 59 0 173 0 61 0 177 0 62 0 181 0 63] -#[0 0 246 0 4 0 11 0 67] -#[1 1 37 0 20 1 21 0 24 1 25 0 26 2 61 0 52 2 65 0 54 2 61 0 57 2 61 0 60] -#[0 0 250 0 3 0 4 0 7 0 11 0 24 0 67] -#[1 0 254 0 3 0 254 0 4 0 254 0 7 0 254 0 11 0 254 0 24 1 25 0 26 1 33 0 57 0 254 0 67] -#[1 1 2 0 3 1 2 0 4 1 2 0 7 1 2 0 11 1 37 0 20 1 2 0 24 1 25 0 26 1 45 0 57 1 49 0 60 1 2 0 67] -#[1 1 6 0 3 1 6 0 4 1 6 0 7 1 6 0 11 1 37 0 20 1 6 0 24 1 25 0 26 1 57 0 57 1 61 0 60 1 6 0 67] -#[0 0 122 0 3 0 4 0 7 0 11 0 20 0 24 0 26 0 67] -#[0 1 10 0 3 0 4 0 7 0 11 0 24 0 26 0 67] -#[1 1 14 0 3 1 14 0 4 1 14 0 7 1 14 0 11 1 37 0 20 1 14 0 24 1 14 0 26 1 49 0 60 1 14 0 67] -#[1 1 18 0 3 1 18 0 4 1 18 0 7 1 18 0 11 1 37 0 20 1 18 0 24 1 18 0 26 1 61 0 60 1 18 0 67] -#[1 0 93 0 1 0 97 0 2 0 101 0 10 0 109 0 13 0 113 0 14 0 117 0 15 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 1 157 0 46 2 77 0 55 1 149 0 56 1 153 0 59 1 157 0 61 1 157 0 62 0 181 0 63] -#[0 1 22 0 3 0 4 0 11 0 67] -#[0 1 26 0 1 0 2 0 3 0 4 0 7 0 9 0 13 0 14 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 26 0 30] -#[0 1 30 0 1 0 2 0 3 0 4 0 7 0 9 0 13 0 14 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 26 0 30] -#[0 1 34 0 1 0 2 0 3 0 4 0 7 0 9 0 13 0 14 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 26 0 30] -#[0 1 38 0 1 0 2 0 3 0 4 0 7 0 9 0 13 0 14 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 26 0 30] -#[0 1 42 0 1 0 2 0 8 0 10 0 12 0 13 0 14 0 15 0 17 0 18 0 20 0 21 0 22 0 23 0 29 0 30 0 67] -#[0 1 46 0 1 0 2 0 3 0 4 0 7 0 9 0 13 0 14 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 26 0 30] -#[0 1 50 0 1 0 2 0 3 0 4 0 7 0 9 0 13 0 14 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 26 0 30] -#[0 1 54 0 1 0 2 0 3 0 4 0 7 0 9 0 13 0 14 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 26 0 30] -#[0 1 58 0 1 0 2 0 3 0 4 0 7 0 9 0 13 0 14 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 26 0 30] -#[0 1 62 0 1 0 2 0 3 0 4 0 7 0 9 0 13 0 14 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 26 0 30] -#[0 1 66 0 1 0 2 0 3 0 4 0 7 0 9 0 13 0 14 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 26 0 30] -#[1 0 10 0 1 0 10 0 2 0 10 0 8 0 10 0 10 0 10 0 12 0 10 0 13 0 10 0 14 0 10 0 15 0 10 0 20 0 10 0 21 0 10 0 22 0 10 0 23 0 10 0 29 0 10 0 30 2 81 0 37 0 10 0 67] -#[0 1 70 0 67] -#[1 0 150 0 1 0 150 0 2 0 150 0 3 0 150 0 10 0 150 0 13 0 150 0 14 0 150 0 15 0 150 0 16 0 150 0 20 0 150 0 21 0 150 0 22 0 150 0 23 0 150 0 24 0 150 0 25 0 150 0 26 0 150 0 29 0 150 0 30 0 150 0 32 2 85 0 65] -#[0 1 74 0 1 0 2 0 3 0 4 0 7 0 9 0 10 0 11 0 13 0 14 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 67] -#[1 0 154 0 11 0 154 0 21 2 89 0 64] -#[1 2 93 0 20 2 97 0 29] -#[1 1 78 0 1 1 78 0 2 1 78 0 3 2 101 0 6 1 78 0 10 1 78 0 13 1 78 0 14 1 78 0 15 1 78 0 16 1 78 0 20 1 78 0 21 1 78 0 22 1 78 0 23 1 78 0 24 1 78 0 25 1 78 0 26 1 78 0 29 1 78 0 30 1 78 0 32] -#[0 1 82 0 1 0 2 0 3 0 10 0 13 0 14 0 15 0 16 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] -#[0 1 86 0 1 0 2 0 3 0 10 0 13 0 14 0 15 0 16 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] -#[0 1 90 0 1 0 2 0 3 0 10 0 13 0 14 0 15 0 16 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] -#[0 1 94 0 1 0 2 0 3 0 10 0 13 0 14 0 15 0 16 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] -#[0 1 98 0 1 0 2 0 3 0 10 0 13 0 14 0 15 0 16 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] -#[0 1 102 0 1 0 2 0 3 0 10 0 13 0 14 0 15 0 16 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] -#[0 1 106 0 1 0 2 0 3 0 10 0 13 0 14 0 15 0 16 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] -#[0 1 110 0 1 0 2 0 3 0 4 0 7 0 9 0 10 0 11 0 13 0 14 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 67] -#[0 1 114 0 11 0 21] -#[0 1 118 0 1 0 2 0 3 0 4 0 7 0 9 0 10 0 11 0 13 0 14 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 67] -#[0 1 122 0 1 0 2 0 3 0 4 0 7 0 9 0 10 0 11 0 13 0 14 0 15 0 16 0 19 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32 0 67] -#[0 1 126 0 5 0 11 0 17 0 18] -#[0 2 105 0 11] -#[1 2 109 0 17 0 61 0 20 0 65 0 29 0 209 0 62] -#[1 1 125 0 4 0 86 0 11 2 113 0 44 0 86 0 67] -#[0 1 130 0 3 0 4 0 7 0 11 0 67] -#[1 1 134 0 3 1 134 0 4 1 134 0 7 1 134 0 11 1 177 0 24 1 134 0 67] -#[0 1 138 0 3 0 4 0 7 0 11 0 67] -#[0 1 142 0 3 0 4 0 7 0 11 0 67] -#[0 1 146 0 3 0 4 0 7 0 11 0 24 0 67] -#[1 0 93 0 1 0 97 0 2 0 185 0 8 0 101 0 10 0 105 0 12 0 109 0 13 0 113 0 14 0 117 0 15 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 2 117 0 43 0 141 0 45 0 173 0 46 0 149 0 48 0 149 0 49 0 157 0 50 0 157 0 53 0 165 0 56 0 169 0 59 0 173 0 61 0 177 0 62 0 181 0 63 0 22 0 67] -#[1 0 93 0 1 1 237 0 2 2 121 0 3 1 245 0 10 0 109 0 13 0 113 0 14 0 117 0 15 1 249 0 16 1 253 0 20 0 121 0 21 0 125 0 22 0 129 0 23 2 1 0 24 2 5 0 25 2 9 0 26 2 13 0 29 0 133 0 30 2 17 0 32 2 25 0 63 2 25 0 66] -#[1 2 125 0 11 2 33 0 21] -#[0 2 129 0 19] -#[0 2 133 0 19] -#[0 1 150 0 1 0 2 0 3 0 10 0 13 0 14 0 15 0 16 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] -#[0 1 154 0 3 0 4 0 7 0 11 0 20 0 24 0 26 0 67] -#[1 0 93 0 1 0 97 0 2 0 101 0 10 0 22 0 11 0 105 0 12 0 109 0 13 0 113 0 14 0 117 0 15 0 61 0 20 0 121 0 21 0 125 0 22 0 129 0 23 0 65 0 29 0 133 0 30 2 137 0 43 0 141 0 45 0 173 0 46 0 149 0 48 0 149 0 49 0 157 0 50 0 157 0 53 0 165 0 56 0 169 0 59 0 173 0 61 0 177 0 62 0 181 0 63] -#[0 1 158 0 11 0 67] -#[0 1 162 0 67] -#[0 1 166 0 1 0 2 0 3 0 10 0 13 0 14 0 15 0 16 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] -#[0 1 170 0 1 0 2 0 3 0 10 0 13 0 14 0 15 0 16 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] -#[0 1 174 0 1 0 2 0 3 0 10 0 13 0 14 0 15 0 16 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] -#[0 1 178 0 1 0 2 0 3 0 10 0 13 0 14 0 15 0 16 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 32] -#[0 2 141 0 11] -#[0 1 182 0 3 0 4 0 7 0 11 0 20 0 24 0 26 0 67] - ). -] - -{ #category : #private } -StParser >> actionForCurrentToken [ - | ids action | - ids := currentToken ids. - 1 to: ids size do: - [ :i | - action := self actionFor: (ids at: i). - (action bitAnd: self actionMask) = self errorAction - ifFalse: [ ^ action ]. - (ids at: i) = scanner negativeNumberId - ifTrue: - [ currentToken := SmaCCToken - value: '-' - start: currentToken startPosition - ids: (Array with: scanner binarySymbolId). - self position: currentToken stopPosition - 1. - ^ self actionForCurrentToken ] ]. - ^ self errorAction -] - -{ #category : #private } -StParser >> createMessageNodeFrom: aCollection [ - ^ RBMessageNode - receiver: aCollection first - selector: (aCollection at: 2) first contents asSymbol - arguments: (aCollection at: 2) last -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForArray1: nodes [ - ^ WriteStream on: Array new -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForArray2: nodes [ - ^ (nodes at: 1) - nextPut: (nodes at: 2); - yourself -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForArray3: nodes [ - (nodes at: 2) stopPosition + 1 = (nodes at: 3) startPosition - ifTrue: [ (nodes at: 1) nextPut: ((nodes at: 2) value , ':') asSymbol ] - ifFalse: [ (nodes at: 1) - nextPut: - (nodes at: 2) value asSymbol; - nextPut: #':' ]. - self position: - (nodes at: 3) startPosition. - currentToken := nil. - ^ nodes at: 1 -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForArrayLiteral2: nodes [ - ^ (nodes at: 1) value asSymbol -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForArrayLiteral6: nodes [ - ^ (nodes at: 2) value asQualifiedReference -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForArrayLiteral8: nodes [ - ^ (nodes at: 2) contents -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForBinaryMessage1: nodes [ - ^ Array - with: (ReadStream on: (nodes at: 1) value) - with: (Array with: (nodes at: 2)) -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForBinaryMethodName1: nodes [ - ^ Array - with: (nodes at: 1) value asSymbol - with: (Array with: (nodes at: 2)) -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForBlock1: nodes [ - ^ RBBlockNode arguments: (nodes at: 2) body: (nodes at: 4) -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForBlock2: nodes [ - ^ RBBlockNode body: (nodes at: 2) -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForBlock3: nodes [ - ^ RBBlockNode - arguments: (nodes at: 2) - body: (RBSequenceNode statements: #()) -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForBlock4: nodes [ - ^ RBBlockNode - arguments: (nodes at: 2) - body: (RBSequenceNode temporaries: (nodes at: 4) statements: (nodes at: 6)) -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForBlockArgs1: nodes [ - ^ OrderedCollection with: (nodes at: 2) -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForByteArray1: nodes [ - ^ WriteStream on: ByteArray new -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForByteArray2: nodes [ - ^ (nodes at: 1) - nextPut: (nodes at: 2) value; - yourself -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForCascade1: nodes [ - | messages | - (nodes at: 2) isEmpty - ifTrue: [ ^ nodes at: 1 ]. - messages := OrderedCollection new: - (nodes at: 2) size + 1. - messages add: (nodes at: 1). - (nodes at: 2) - do: [ :each | - messages - add: - (RBMessageNode - receiver: - (nodes at: 1) receiver - selector: each first contents asSymbol - arguments: each last) ]. - ^ RBCascadeNode messages: messages -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForExpression1: nodes [ - ^ RBAssignmentNode variable: (nodes at: 1) value: (nodes at: 3) -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForKeywordMethodName1: nodes [ - | stream | - stream := WriteStream on: (String new: 30). - stream nextPutAll: - (nodes at: 1) value. - ^ Array with: stream with: (OrderedCollection with: (nodes at: 2)) -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForKeywordMethodName2: nodes [ - (nodes at: 1) first nextPutAll: (nodes at: 2) value. - (nodes at: 1) last add: (nodes at: 3). - ^ nodes at: 1 -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForLiteral14: nodes [ - ^ (nodes at: 3) contents -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForLiteral15: nodes [ - ^ (nodes at: 3) value asQualifiedReference -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForLiteral1: nodes [ - ^ true -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForLiteral2: nodes [ - ^ false -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForLiteral4: nodes [ - ^ (nodes at: 1) value -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForLiteral6: nodes [ - ^ (nodes at: 1) value at: 2 -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForLiteral7: nodes [ - ^ ((nodes at: 1) value copyFrom: 2 to: (nodes at: 1) value size - 1) - copyReplaceAll: '''''' - with: '''' -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForLiteral8: nodes [ - ^ (((nodes at: 2) value copyFrom: 2 to: (nodes at: 2) value size - 1) - copyReplaceAll: '''''' - with: '''') asSymbol -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForLiteral9: nodes [ - ^ (nodes at: 2) value asSymbol -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForMethod1: nodes [ - ^ (RBMethodNode - selector: (nodes at: 1) value asSymbol - arguments: #() - body: - (nodes at: 2) last) yourself -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForMethod2: nodes [ - ^ (RBMethodNode - selector: (nodes at: 1) first - arguments: (nodes at: 1) last - body: - (nodes at: 2) last) yourself -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForMethod3: nodes [ - ^ (RBMethodNode - selector: (nodes at: 1) first contents asSymbol - arguments: - (nodes at: 1) last - body: - (nodes at: 2) last) yourself -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForMethodSequenceNode1: nodes [ - ^ Array - with: - ((nodes at: 1) - addAll: (nodes at: 5); - yourself) - with: (RBSequenceNode temporaries: (nodes at: 3) statements: (nodes at: 6)) -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForMethodSequenceNode2: nodes [ - ^ Array - with: - ((nodes at: 1) - addAll: (nodes at: 3); - yourself) - with: (RBSequenceNode temporaries: #() statements: (nodes at: 4)) -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForMethodSequenceNode3: nodes [ - ^ Array - with: (nodes at: 1) - with: (RBSequenceNode temporaries: #() statements: (nodes at: 2)) -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForPrimary2: nodes [ - ^ RBLiteralNode value: (nodes at: 1) -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForPrimitives1: nodes [ - ^ OrderedCollection new -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForPrimitives2: nodes [ - ^ (nodes at: 1) - add: ((nodes at: 2) startPosition to: (nodes at: 4) startPosition); - yourself -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForSequenceNode1: nodes [ - ^ RBSequenceNode temporaries: (nodes at: 1) statements: (nodes at: 2) -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForStatementList2: nodes [ - ^ (nodes at: 1) - add: (nodes at: 3); - yourself -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForStatements3: nodes [ - ^ (nodes at: 1) - add: (RBReturnNode value: (nodes at: 4)); - yourself -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForStatements4: nodes [ - ^ OrderedCollection with: (RBReturnNode value: (nodes at: 2)) -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForTemporaries1: nodes [ - ^ #() -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForTemporaryVariables2: nodes [ - ^ (nodes at: 1) - add: (nodes at: 2); - yourself -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForUnaryMessage1: nodes [ - ^ Array with: (ReadStream on: (nodes at: 1) value) with: #() -] - -{ #category : #'generated-reduction actions' } -StParser >> reduceActionForVariable1: nodes [ - ^ RBVariableNode named: (nodes at: 1) value -] diff --git a/src/SmaCC_Smalltalk_Parser/StScanner.class.st b/src/SmaCC_Smalltalk_Parser/StScanner.class.st deleted file mode 100644 index 3cf43a109..000000000 --- a/src/SmaCC_Smalltalk_Parser/StScanner.class.st +++ /dev/null @@ -1,335 +0,0 @@ -Class { - #name : #StScanner, - #superclass : #SmaCCScanner, - #category : #'SmaCC_Smalltalk_Parser' -} - -{ #category : #'generated-initialization' } -StScanner class >> initializeKeywordMap [ - keywordMap := Dictionary new. - #(#(20 'false' 13) #(20 'nil' 14) #(20 'true' 15) #(26 '||' 18)) - do: [ :each | - (keywordMap at: each first ifAbsentPut: [ Dictionary new ]) - at: (each at: 2) - put: each last ]. - ^ keywordMap -] - -{ #category : #generated } -StScanner >> binarySymbolId [ - ^ 26 -] - -{ #category : #generated } -StScanner >> emptySymbolTokenId [ - ^ 67 -] - -{ #category : #generated } -StScanner >> errorTokenId [ - ^ 68 -] - -{ #category : #generated } -StScanner >> nameId [ - ^ 20 -] - -{ #category : #scanning } -StScanner >> negativeNumber [ - stream position: stream position - 2. - ^ self scanNumber: self negativeNumberId -] - -{ #category : #generated } -StScanner >> negativeNumberId [ - ^ 22 -] - -{ #category : #scanning } -StScanner >> number [ - stream position: stream position - 1. - ^ self scanNumber: self numberId -] - -{ #category : #generated } -StScanner >> numberId [ - ^ 21 -] - -{ #category : #generated } -StScanner >> scan1 [ - [ self step. - currentCharacter == $' - ifTrue: [ ^ self scan2 ]. - true ] whileTrue -] - -{ #category : #generated } -StScanner >> scan2 [ - self recordMatch: #(23). - self step. - currentCharacter == $' - ifTrue: [ ^ self scan1 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -StScanner >> scan3 [ - self step. - (currentCharacter isLetter or: [ currentCharacter == $_ ]) - ifTrue: [ [ self recordMatch: #(29). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan3 ]. - currentCharacter isAlphaNumeric or: [ currentCharacter == $_ ] ] - whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -StScanner >> scan4 [ - self recordMatch: #(24). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(31) ]. - (currentCharacter isLetter or: [ currentCharacter == $_ ]) - ifTrue: [ ^ self scan5 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -StScanner >> scan5 [ - [ self step. - currentCharacter == $: - ifTrue: [ self recordMatch: #(25). - self step. - (currentCharacter isLetter or: [ currentCharacter == $_ ]) - ifTrue: [ ^ self scan5 ]. - ^ self reportLastMatch ]. - currentCharacter isAlphaNumeric or: [ currentCharacter == $_ ] ] - whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -StScanner >> scanForToken [ - self step. - currentCharacter == $" - ifTrue: [ ^ self scanForTokenX7 ]. - currentCharacter == $# - ifTrue: [ ^ self recordAndReportMatch: #(1 32) ]. - currentCharacter == $$ - ifTrue: [ ^ self scanForTokenX11 ]. - currentCharacter == $' - ifTrue: [ ^ self scanForTokenX10 ]. - currentCharacter == $( - ifTrue: [ ^ self recordAndReportMatch: #(2 32) ]. - currentCharacter == $) - ifTrue: [ ^ self recordAndReportMatch: #(3 32) ]. - currentCharacter == $- - ifTrue: [ ^ self scanForTokenX1 ]. - currentCharacter == $. - ifTrue: [ ^ self recordAndReportMatch: #(4 32) ]. - currentCharacter == $: - ifTrue: [ ^ self scanForTokenX8 ]. - currentCharacter == $; - ifTrue: [ ^ self recordAndReportMatch: #(7 32) ]. - currentCharacter == $< - ifTrue: [ ^ self scanForTokenX5 ]. - ^ self scanForTokenX12 -] - -{ #category : #generated } -StScanner >> scanForTokenX1 [ - self recordMatch: #(26 32). - self step. - currentCharacter isDigit - ifTrue: [ ^ self recordAndReportMatch: #(22) ]. - (currentCharacter == $! - or: [ (currentCharacter between: $% and: $&) - or: [ (currentCharacter between: $* and: $,) - or: [ currentCharacter == $/ - or: [ (currentCharacter between: $< and: $@) - or: [ '\|~' includes: currentCharacter ] ] ] ] ]) - ifTrue: [ ^ self recordAndReportMatch: #(26) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -StScanner >> scanForTokenX10 [ - self recordMatch: #(32). - self step. - currentCharacter == $' - ifTrue: [ ^ self scan2 ]. - ^ self scan1 -] - -{ #category : #generated } -StScanner >> scanForTokenX11 [ - self recordMatch: #(32). - self step. - ^ self recordAndReportMatch: #(30) -] - -{ #category : #generated } -StScanner >> scanForTokenX12 [ - currentCharacter == $> - ifTrue: [ ^ self scanForTokenX4 ]. - currentCharacter == $[ - ifTrue: [ ^ self recordAndReportMatch: #(10 32) ]. - currentCharacter == $] - ifTrue: [ ^ self recordAndReportMatch: #(11 32) ]. - currentCharacter == $^ - ifTrue: [ ^ self recordAndReportMatch: #(12 32) ]. - currentCharacter == ${ - ifTrue: [ ^ self recordAndReportMatch: #(16 32) ]. - currentCharacter == $| - ifTrue: [ ^ self scanForTokenX3 ]. - currentCharacter == $} - ifTrue: [ ^ self recordAndReportMatch: #(19 32) ]. - currentCharacter isDigit - ifTrue: [ ^ self recordAndReportMatch: #(21 32) ]. - currentCharacter isSeparator - ifTrue: [ ^ self scanForTokenX9 ]. - currentCharacter isSpecial - ifTrue: [ ^ self scanForTokenX2 ]. - (currentCharacter isLetter or: [ currentCharacter == $_ ]) - ifTrue: [ ^ self scanForTokenX6 ]. - ^ self recordAndReportMatch: #(32) -] - -{ #category : #generated } -StScanner >> scanForTokenX2 [ - self recordMatch: #(26 32). - self step. - (currentCharacter == $! - or: [ (currentCharacter between: $% and: $&) - or: [ (currentCharacter between: $* and: $,) - or: [ currentCharacter == $/ - or: [ (currentCharacter between: $< and: $@) - or: [ '\|~' includes: currentCharacter ] ] ] ] ]) - ifTrue: [ ^ self recordAndReportMatch: #(26) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -StScanner >> scanForTokenX3 [ - self recordMatch: #(17 26 32). - self step. - (currentCharacter == $! - or: [ (currentCharacter between: $% and: $&) - or: [ (currentCharacter between: $* and: $,) - or: [ currentCharacter == $/ - or: [ (currentCharacter between: $< and: $@) - or: [ '\|~' includes: currentCharacter ] ] ] ] ]) - ifTrue: [ ^ self recordAndReportMatch: #(26) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -StScanner >> scanForTokenX4 [ - self recordMatch: #(9 26 32). - self step. - (currentCharacter == $! - or: [ (currentCharacter between: $% and: $&) - or: [ (currentCharacter between: $* and: $,) - or: [ currentCharacter == $/ - or: [ (currentCharacter between: $< and: $@) - or: [ '\|~' includes: currentCharacter ] ] ] ] ]) - ifTrue: [ ^ self recordAndReportMatch: #(26) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -StScanner >> scanForTokenX5 [ - self recordMatch: #(8 26 32). - self step. - (currentCharacter == $! - or: [ (currentCharacter between: $% and: $&) - or: [ (currentCharacter between: $* and: $,) - or: [ currentCharacter == $/ - or: [ (currentCharacter between: $< and: $@) - or: [ '\|~' includes: currentCharacter ] ] ] ] ]) - ifTrue: [ ^ self recordAndReportMatch: #(26) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -StScanner >> scanForTokenX6 [ - self recordMatch: #(20 32). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan3 ]. - currentCharacter == $: - ifTrue: [ ^ self scan4 ]. - (currentCharacter isAlphaNumeric or: [ currentCharacter == $_ ]) - ifTrue: [ [ self recordMatch: #(20). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan3 ]. - currentCharacter == $: - ifTrue: [ ^ self scan4 ]. - currentCharacter isAlphaNumeric or: [ currentCharacter == $_ ] ] - whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -StScanner >> scanForTokenX7 [ - self recordMatch: #(32). - self step. - currentCharacter == $" - ifTrue: [ ^ self recordAndReportMatch: #(28) ]. - true - ifTrue: [ [ self step. - currentCharacter == $" - ifTrue: [ ^ self recordAndReportMatch: #(28) ]. - true ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -StScanner >> scanForTokenX8 [ - self recordMatch: #(5 32). - self step. - currentCharacter == $= - ifTrue: [ ^ self recordAndReportMatch: #(6) ]. - ^ self reportLastMatch -] - -{ #category : #generated } -StScanner >> scanForTokenX9 [ - self recordMatch: #(27 32). - self step. - currentCharacter isSeparator - ifTrue: [ [ self recordMatch: #(27). - self step. - currentCharacter isSeparator ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #scanning } -StScanner >> scanNumber: id [ - | number | - number := Number readFrom: stream. - outputStream reset. - matchActions := Array with: id. - ^ self createTokenFor: number -] - -{ #category : #generated } -StScanner >> tokenActions [ - ^ #(nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil #number #negativeNumber nil nil nil nil #whitespace #comment nil nil #variableAssignment) -] - -{ #category : #scanning } -StScanner >> variableAssignment [ - | token | - outputStream position: outputStream position - 2. - stream position: stream position - 2. - matchActions := Array with: self nameId. - token := self createTokenFor: outputStream contents. - outputStream reset. - ^ token -] diff --git a/src/SmaCC_Smalltalk_Parser/package.st b/src/SmaCC_Smalltalk_Parser/package.st deleted file mode 100644 index c81ed4447..000000000 --- a/src/SmaCC_Smalltalk_Parser/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_Smalltalk_Parser' } diff --git a/src/SmaCC_Source_Editing/SmaCCString.class.st b/src/SmaCC_Source_Editing/SmaCCString.class.st deleted file mode 100644 index e3a9cea47..000000000 --- a/src/SmaCC_Source_Editing/SmaCCString.class.st +++ /dev/null @@ -1,738 +0,0 @@ -" -SmaCCString is a special string like object that makes rewriting source code faster. It supports operations to insert and delete text from the middle of strings more efficiently than constructing new strings. - -Instance Variables: - currentId the id that is used when constructing new SmaCCIntervals - firstSentinel the head of the SmaCCInterval list - lastSentinel the tail of the SmaCCInterval list - cachedInterval the interval where the last action took place -- most likely it or something nearby will the next thing needed - - -" -Class { - #name : #SmaCCString, - #superclass : #Object, - #instVars : [ - 'firstSentinel', - 'lastSentinel', - 'currentId', - 'cachedInterval' - ], - #category : #'SmaCC_Source_Editing' -} - -{ #category : #'instance creation' } -SmaCCString class >> on: aString [ - ^ self new - insert: aString at: 0; - yourself -] - -{ #category : #copying } -SmaCCString >> , aString [ - ^ self copy - append: aString; - yourself -] - -{ #category : #accessing } -SmaCCString >> addAnnotationTo: aSmaCCStringInterval [ - -] - -{ #category : #editing } -SmaCCString >> addNewLineWhitespace: aString from: startIndex to: stopIndex [ - | currentInterval next | - currentInterval := self intervalContaining: startIndex. - [ currentInterval isSentinel - ifTrue: [ ^ self ]. - next := currentInterval next. - currentInterval isRemoved - ifFalse: - [ self - addNewLineWhitespace: aString - toInterval: currentInterval - from: startIndex - to: stopIndex ]. - currentInterval containsIndex: stopIndex ] - whileFalse: [ currentInterval := next ] -] - -{ #category : #editing } -SmaCCString >> addNewLineWhitespace: aString toInterval: currentInterval from: startIndex to: stopIndex [ - | start stop stream next location interval whitespaceInterval | - interval := currentInterval. - next := currentInterval next. - start := (currentInterval containsIndex: startIndex) - ifTrue: [ self indexFor: startIndex ] - ifFalse: [ currentInterval start ]. - stop := (currentInterval containsIndex: stopIndex) - ifTrue: [ self indexFor: stopIndex ] - ifFalse: [ currentInterval stop ]. - stream := ReadStream - on: (currentInterval string copyFrom: start to: stop). - [ stream atEnd ] - whileFalse: - [ | char | - char := stream next. - char = Character cr - ifTrue: [ stream peek = Character lf - ifTrue: [ stream next ] ]. - (char = Character lf or: [ char = Character cr ]) - ifTrue: - [ location := stream position + start. - interval := location > stop - ifTrue: [ next ] - ifFalse: [ interval splitAt: location ]. - whitespaceInterval := self newIntervalFor: aString. - interval previous next: whitespaceInterval. - whitespaceInterval next: interval ] ] -] - -{ #category : #editing } -SmaCCString >> addPrefix: aString [ - ^ self insert: aString at: self startIndex -] - -{ #category : #actions } -SmaCCString >> annotationRangesFor: aSmaCCAnnotation [ - | ranges startIndex current | - ranges := OrderedCollection new. - startIndex := 1. - current := firstSentinel next. - [ current isSentinel ] - whileFalse: - [ (current isRemoved not - and: [ current annotations includes: aSmaCCAnnotation ]) - ifTrue: [ ranges - add: (startIndex to: startIndex + current size - 1) ]. - startIndex := startIndex + current size. - current := current next ]. - ^ ranges -] - -{ #category : #actions } -SmaCCString >> annotationsInNewRange: range [ - | startIndex first last annotations current | - annotations := Set new. - startIndex := 0. - first := range first. - last := range isEmpty - ifTrue: [ first ] - ifFalse: [ range last ]. - current := firstSentinel next. - [ current isSentinel ] - whileFalse: [ startIndex > last - ifTrue: [ ^ annotations asOrderedCollection ]. - startIndex := startIndex + current size. - startIndex >= first - ifTrue: [ annotations addAll: current annotations ]. - current := current next ]. - ^ annotations asOrderedCollection -] - -{ #category : #actions } -SmaCCString >> annotationsInOriginalRange: range [ - | first last | - first := self intervalContaining: range first. - last := range isEmpty - ifTrue: [ first ] - ifFalse: [ self intervalContaining: range last ]. - ^ (first annotationsTo: last) ifNil: [ (last annotationsTo: first) ifNil: [ #() ] ] -] - -{ #category : #editing } -SmaCCString >> append: aString [ - | position newInterval str | - aString isEmpty - ifTrue: [ ^ self stopIndex ]. - str := (aString isKindOf: SmaCCString) - ifTrue: [ aString ] - ifFalse: [ SmaCCString on: aString ]. - str - intervalsDo: [ :each | - newInterval := self newIntervalFor: each string. - newInterval addAllAnnotations: each annotations. - newInterval start: each start. - newInterval stop: each stop. - position isNil - ifTrue: [ position := newInterval startIndex ]. - self appendInterval: newInterval ]. - ^ position -] - -{ #category : #editing } -SmaCCString >> appendInterval: newInterval [ - newInterval previous: lastSentinel previous. - newInterval next: lastSentinel. - newInterval previous next: newInterval. - ^ lastSentinel previous: newInterval -] - -{ #category : #accessing } -SmaCCString >> asString [ - | stream | - stream := WriteStream on: (String new: self size). - firstSentinel next do: [ :each | each nextPutOn: stream ]. - ^ stream contents -] - -{ #category : #accessing } -SmaCCString >> at: anIndex [ - ^ (self intervalContaining: anIndex) string - at: (self indexFor: anIndex) -] - -{ #category : #accessing } -SmaCCString >> basicNextIndex: anIndex [ - | interval newIndex | - interval := self intervalContaining: anIndex. - newIndex := anIndex + 1. - ^ (interval containsIndex: newIndex) - ifTrue: [ newIndex ] - ifFalse: - [ interval next isSentinel - ifTrue: [ self stopIndex + 1 ] - ifFalse: [ interval next startIndex ] ] -] - -{ #category : #accessing } -SmaCCString >> basicPreviousIndex: anIndex [ - | interval newIndex | - interval := self intervalContaining: anIndex. - newIndex := anIndex - 1. - ^ ((interval containsIndex: newIndex) - and: [ (self indexFor: newIndex) ~= 0 ]) - ifTrue: [ newIndex ] - ifFalse: - [ interval previous isSentinel - ifTrue: [ nil ] - ifFalse: [ interval previous stopIndex ] ] -] - -{ #category : #copying } -SmaCCString >> copy [ - | new first last current newCurrent | - first := last := nil. - new := self class new. - current := firstSentinel next. - [ current isSentinel ] - whileFalse: - [ newCurrent := current copy. - first isNil - ifTrue: [ first := newCurrent ]. - last notNil - ifTrue: [ last next: newCurrent ]. - last := newCurrent. - current := current next ]. - first notNil - ifTrue: [ new insertFirst: first last: last at: 1 ]. - new setIntervalId. - ^ new -] - -{ #category : #copying } -SmaCCString >> copyFrom: startIndex to: stopIndex [ - | result | - result := self class new. - self - copyFrom: startIndex - to: stopIndex - into: result - at: 1. - ^ result -] - -{ #category : #private } -SmaCCString >> copyFrom: startIndex to: stopIndex into: aSmaCCString at: anInteger [ - | startInterval stopInterval current newInterval first last | - startInterval := self intervalContaining: startIndex. - stopInterval := self intervalContaining: stopIndex. - current := startInterval. - last := first := nil. - [ (current isRemoved or: [ current isSentinel ]) - ifFalse: - [ newInterval := aSmaCCString newIntervalFor: current string. - newInterval addAllAnnotations: current annotations. - newInterval - start: - (current == startInterval - ifTrue: [ self indexFor: startIndex ] - ifFalse: [ current start ]). - newInterval - stop: - (current == stopInterval - ifTrue: [ self indexFor: stopIndex ] - ifFalse: [ current stop ]). - first isNil - ifTrue: [ first := newInterval ]. - last notNil - ifTrue: [ last next: newInterval ]. - last := newInterval ]. - current ~~ stopInterval ] - whileTrue: [ current isSentinel - ifTrue: [ ^ '' ]. - current := current next ]. - first isNil - ifTrue: [ ^ aSmaCCString startIndex ]. - ^ aSmaCCString insertFirst: first last: last at: anInteger -] - -{ #category : #editing } -SmaCCString >> deleteCharacter: anInteger [ - ^ self deleteFrom: anInteger to: anInteger -] - -{ #category : #editing } -SmaCCString >> deleteFrom: startIndex to: stopIndex [ - | startInterval atEnd | - startInterval := self intervalContaining: startIndex. - startInterval := startInterval splitAt: (self indexFor: startIndex). - [ atEnd := startInterval containsIndex: stopIndex. - (atEnd and: [ startInterval stop ~= (self indexFor: stopIndex) ]) - ifTrue: [ startInterval splitAt: (self indexFor: stopIndex) + 1 ]. - cachedInterval := startInterval := self removeInterval: startInterval. - atEnd or: [ startInterval containsIndex: stopIndex ] ] - whileFalse: [ startInterval := startInterval next ] -] - -{ #category : #editing } -SmaCCString >> deleteUpTo: anIndex [ - self deleteFrom: self startIndex to: anIndex - 1 -] - -{ #category : #editing } -SmaCCString >> deleteUpToEnd: anIndex [ - self deleteFrom: anIndex to: self stopIndex -] - -{ #category : #accessing } -SmaCCString >> deleteWhitespaceAfterIndex: stopPosition [ - | stopIndex | - stopIndex := self whitespaceEndIndexAfterIndex: stopPosition. - (stopIndex isNil - or: [ self isIndex: stopIndex equalTo: stopPosition ]) - ifTrue: [ ^ '' ]. - ^ self deleteFrom: (self nextIndex: stopPosition) to: stopIndex -] - -{ #category : #accessing } -SmaCCString >> deleteWhitespaceBeforeIndex: startPosition [ - | startIndex | - startIndex := self whitespaceStartIndexBeforeIndex: startPosition. - (startIndex isNil - or: [ self isIndex: startIndex equalTo: startPosition ]) - ifTrue: [ ^ '' ]. - ^ self - deleteFrom: startIndex - to: (self basicPreviousIndex: startPosition) -] - -{ #category : #accessing } -SmaCCString >> indexFor: anIndex [ - ^ anIndex isInteger - ifTrue: [ anIndex ] - ifFalse: [ anIndex index ] -] - -{ #category : #'initialize-release' } -SmaCCString >> initialize [ - super initialize. - firstSentinel := self intervalClass from: 1 to: 0 string: ''. - firstSentinel beSentinel. - lastSentinel := self intervalClass from: 1 to: 0 string: ''. - lastSentinel beSentinel. - firstSentinel next: lastSentinel. - currentId := 0 -] - -{ #category : #editing } -SmaCCString >> insert: aString at: anInteger [ - | newFirstInterval | - aString isEmpty - ifTrue: [ ^ anInteger ]. - (aString isKindOf: SmaCCString) - ifTrue: - [ ^ aString - copyFrom: aString startIndex - to: aString stopIndex - into: self - at: anInteger ] - ifFalse: - [ newFirstInterval := self newIntervalFor: aString. - ^ self - insertFirst: newFirstInterval - last: newFirstInterval - at: anInteger ] -] - -{ #category : #private } -SmaCCString >> insertFirst: first last: last at: anInteger [ - | interval | - interval := self intervalContaining: anInteger. - interval := interval splitAt: (self indexFor: anInteger). - interval previous next: first. - last next: interval. - ^ first startIndex -] - -{ #category : #private } -SmaCCString >> intervalClass [ - ^ SmaCCStringInterval -] - -{ #category : #private } -SmaCCString >> intervalContaining: anIndex [ - | prev next | - (cachedInterval isNil or: [ cachedInterval isSentinel ]) - ifTrue: [ prev := lastSentinel previous. - next := firstSentinel next ] - ifFalse: - [ (cachedInterval containsIndex: anIndex) - ifTrue: [ ^ cachedInterval ]. - prev := cachedInterval previous. - next := cachedInterval next ]. - [ prev isSentinel not or: [ next isSentinel not ] ] - whileTrue: - [ (prev isSentinel not and: [ prev containsIndex: anIndex ]) - ifTrue: [ ^ cachedInterval := prev ]. - (next isSentinel not and: [ next containsIndex: anIndex ]) - ifTrue: [ ^ cachedInterval := next ]. - prev := prev previous. - next := next next ]. - ^ lastSentinel -] - -{ #category : #private } -SmaCCString >> intervalsDo: aBlock [ - | current | - current := firstSentinel next. - [ current isSentinel ] - whileFalse: - [ current isRemoved - ifFalse: [ aBlock value: current ]. - current := current next ] -] - -{ #category : #testing } -SmaCCString >> isEmpty [ - firstSentinel next - do: [ :each | - each isEmpty - ifFalse: [ ^ false ] ]. - ^ true -] - -{ #category : #private } -SmaCCString >> isIndex: aIndex equalTo: bIndex [ - aIndex = bIndex - ifTrue: [ ^ true ]. - aIndex class = bIndex class - ifTrue: [ ^ false ]. - ^ aIndex isInteger - ifTrue: [ bIndex intervalId = 1 and: [ aIndex = bIndex index ] ] - ifFalse: - [ bIndex isInteger - and: [ aIndex intervalId = 1 and: [ aIndex index = bIndex ] ] ] -] - -{ #category : #testing } -SmaCCString >> isModified [ - ^ firstSentinel next ~~ lastSentinel previous -] - -{ #category : #testing } -SmaCCString >> isRemoved: anIndex [ - | interval | - interval := self intervalContaining: anIndex. - ^ interval isSentinel or: [ interval isRemoved ] -] - -{ #category : #editing } -SmaCCString >> moveFrom: fromIndex to: toIndex after: newIndex [ - self - moveFrom: fromIndex - to: toIndex - location: newIndex - before: false -] - -{ #category : #editing } -SmaCCString >> moveFrom: fromIndex to: toIndex before: newIndex [ - self - moveFrom: fromIndex - to: toIndex - location: newIndex - before: true -] - -{ #category : #editing } -SmaCCString >> moveFrom: fromIndex to: toIndex location: newIndex before: aBoolean [ - | startInterval stopInterval newInterval currentInterval afterInterval | - startInterval := self intervalContaining: fromIndex. - startInterval := startInterval splitAt: (self indexFor: fromIndex). - currentInterval := startInterval. - [ currentInterval containsIndex: toIndex ] - whileFalse: - [ currentInterval isSentinel - ifTrue: [ ^ self ]. - (currentInterval containsIndex: newIndex) - ifTrue: [ ^ self ]. - currentInterval := currentInterval next ]. - stopInterval := currentInterval. - (stopInterval containsIndex: newIndex) - ifTrue: [ newIndex < toIndex - ifTrue: [ ^ self ] ]. - stopInterval := (stopInterval splitAt: (self indexFor: toIndex) + 1) - previous. - newInterval := self intervalContaining: newIndex. - afterInterval := aBoolean - ifTrue: [ newInterval splitAt: (self indexFor: newIndex) ] - ifFalse: - [ (newInterval containsIndex: newIndex) - ifTrue: [ newInterval splitAt: (self indexFor: newIndex) + 1 ] - ifFalse: [ newInterval next ] ]. - startInterval previous next: stopInterval next. - afterInterval previous next: startInterval. - stopInterval next: afterInterval -] - -{ #category : #private } -SmaCCString >> newIntervalFor: aString [ - | newInterval | - newInterval := self intervalClass - from: 1 - to: aString size - string: aString. - currentId := currentId + 1. - newInterval id: currentId. - ^ newInterval -] - -{ #category : #accessing } -SmaCCString >> nextIndex: anIndex [ - | interval newIndex | - interval := self intervalContaining: anIndex. - newIndex := anIndex + 1. - [ (interval isRemoved not and: [ interval containsIndex: newIndex ]) - ifTrue: [ ^ newIndex ] - ifFalse: - [ interval := interval next. - newIndex := interval startIndex. - newIndex isNil - ifTrue: [ ^ self stopIndex + 1 ] ] ] repeat -] - -{ #category : #accessing } -SmaCCString >> node [ - ^ nil -] - -{ #category : #accessing } -SmaCCString >> node: aSmaCCParseNode [ - -] - -{ #category : #'initialize-release' } -SmaCCString >> on: aString [ - | firstInterval | - firstInterval := self intervalClass - from: 1 - to: aString size - string: aString. - firstInterval id: 1. - currentId := 1. - firstSentinel next: firstInterval. - firstInterval next: lastSentinel -] - -{ #category : #accessing } -SmaCCString >> previousIndex: anIndex [ - | interval newIndex | - interval := self intervalContaining: anIndex. - newIndex := anIndex - 1. - [ (interval isRemoved not - and: - [ (interval containsIndex: newIndex) - and: [ (self indexFor: newIndex) ~= 0 ] ]) - ifTrue: [ ^ newIndex ] - ifFalse: - [ interval previous isSentinel - ifTrue: [ ^ nil ] - ifFalse: [ interval := interval previous. - newIndex := interval stopIndex ] ] ] repeat -] - -{ #category : #editing } -SmaCCString >> removeInterval: startInterval [ - ^ startInterval convertToRemoved -] - -{ #category : #editing } -SmaCCString >> replaceFrom: startIndex to: stopIndex with: aString [ - | newIndex | - newIndex := self insert: aString at: startIndex. - self deleteFrom: startIndex to: stopIndex. - ^ newIndex -] - -{ #category : #accessing } -SmaCCString >> rule [ - ^ nil -] - -{ #category : #accessing } -SmaCCString >> rule: aSmaCCRewrite [ - -] - -{ #category : #private } -SmaCCString >> setIntervalId [ - firstSentinel next - do: [ :each | currentId := currentId max: each id ] -] - -{ #category : #accessing } -SmaCCString >> size [ - | current length | - length := 0. - current := firstSentinel next. - [ current isSentinel ] - whileFalse: [ length := length + current size. - current := current next ]. - ^ length -] - -{ #category : #accessing } -SmaCCString >> startIndex [ - ^ firstSentinel next isSentinel - ifTrue: [ 0 ] - ifFalse: [ firstSentinel next startIndex ] -] - -{ #category : #accessing } -SmaCCString >> startOfLineWhitespaceBeforeIndex: startPosition [ - | startIndex | - startIndex := self - startOfLineWhitespaceStartIndexBeforeIndex: startPosition. - startIndex isNil - ifTrue: [ ^ '' ]. - ^ (self - copyFrom: startIndex - to: (self basicPreviousIndex: startPosition)) asString -] - -{ #category : #accessing } -SmaCCString >> startOfLineWhitespaceStartIndexBeforeIndex: startPosition [ - | stopIndex currentIndex position | - position := startPosition. - position isNil - ifTrue: [ ^ nil ]. - stopIndex := self previousIndex: position. - stopIndex isNil - ifTrue: [ ^ nil ]. - currentIndex := stopIndex. - [ currentIndex notNil - and: - [ | char | - char := self at: currentIndex. - char isSeparator - and: [ char ~= Character cr and: [ char ~= Character lf ] ] ] ] - whileTrue: [ currentIndex := self previousIndex: currentIndex ]. - ^ currentIndex isNil - ifTrue: [ self startIndex ] - ifFalse: [ self basicNextIndex: currentIndex ] -] - -{ #category : #accessing } -SmaCCString >> stopIndex [ - ^ lastSentinel previous isSentinel - ifTrue: [ 0 ] - ifFalse: [ lastSentinel previous stopIndex ] -] - -{ #category : #accessing } -SmaCCString >> stringIndexFor: anIndex [ - | interval result position | - interval := self intervalContaining: anIndex. - result := (interval isSentinel or: [ interval isRemoved ]) - ifTrue: [ 0 ] - ifFalse: [ position := anIndex isInteger - ifTrue: [ anIndex ] - ifFalse: [ anIndex index ]. - interval start > position - ifTrue: [ 0 ] - ifFalse: [ interval stop < position - ifTrue: [ interval stop - interval start + 1 ] - ifFalse: [ position - interval start + 1 ] ] ]. - [ interval := interval previous. - interval isSentinel ] - whileFalse: [ interval isRemoved - ifFalse: [ result := result + (interval stop - interval start + 1) ] ]. - ^ result -] - -{ #category : #accessing } -SmaCCString >> whitespaceAfterIndex: stopPosition [ - | stopIndex | - stopIndex := self whitespaceEndIndexAfterIndex: stopPosition. - stopIndex isNil - ifTrue: [ ^ '' ]. - ^ (self copyFrom: (self basicNextIndex: stopPosition) to: stopIndex) - asString -] - -{ #category : #accessing } -SmaCCString >> whitespaceBeforeIndex: startPosition [ - | startIndex | - startIndex := self whitespaceStartIndexBeforeIndex: startPosition. - startIndex isNil - ifTrue: [ ^ '' ]. - ^ (self - copyFrom: startIndex - to: (self basicPreviousIndex: startPosition)) asString -] - -{ #category : #accessing } -SmaCCString >> whitespaceEndIndexAfterIndex: stopPosition [ - | currentIndex position startIndex stopIndex | - position := stopPosition. - position isNil - ifTrue: [ ^ nil ]. - startIndex := self nextIndex: position. - startIndex isNil - ifTrue: [ ^ nil ]. - currentIndex := startIndex. - stopIndex := self stopIndex + 1. - [ currentIndex notNil - and: - [ currentIndex ~= stopIndex - and: [ (self at: currentIndex) isSeparator ] ] ] - whileTrue: [ currentIndex := self nextIndex: currentIndex ]. - (currentIndex isNil or: [ currentIndex = stopIndex ]) - ifTrue: [ ^ self stopIndex ]. - [ currentIndex := self basicPreviousIndex: currentIndex. - (self isIndex: stopPosition equalTo: currentIndex) - or: [ (self isRemoved: currentIndex) not ] ] whileFalse. - ^ currentIndex -] - -{ #category : #accessing } -SmaCCString >> whitespaceStartIndexBeforeIndex: startPosition [ - | stopIndex currentIndex position | - position := startPosition. - position isNil - ifTrue: [ ^ nil ]. - stopIndex := self previousIndex: position. - stopIndex isNil - ifTrue: [ ^ nil ]. - currentIndex := stopIndex. - [ currentIndex notNil and: [ (self at: currentIndex) isSeparator ] ] - whileTrue: [ currentIndex := self previousIndex: currentIndex ]. - currentIndex isNil - ifTrue: [ ^ self startIndex ]. - [ currentIndex := self basicNextIndex: currentIndex. - (self isIndex: startPosition equalTo: currentIndex) - or: [ (self isRemoved: currentIndex) not ] ] whileFalse. - ^ currentIndex -] diff --git a/src/SmaCC_Source_Editing/SmaCCStringIndex.class.st b/src/SmaCC_Source_Editing/SmaCCStringIndex.class.st deleted file mode 100644 index b52808088..000000000 --- a/src/SmaCC_Source_Editing/SmaCCStringIndex.class.st +++ /dev/null @@ -1,85 +0,0 @@ -" -SmaCCStringIndex is used to index into a SmaCCString. When you perform an insert operation into a SmaCCString, you get a SmaCCStringIndex back so you can index into the newly inserted string. - -Instance Variables: - index the index in the SmaCCInterval - intervalId the SmaCCInterval's id - - -" -Class { - #name : #SmaCCStringIndex, - #superclass : #Magnitude, - #instVars : [ - 'index', - 'intervalId' - ], - #category : #'SmaCC_Source_Editing' -} - -{ #category : #'instance creation' } -SmaCCStringIndex class >> index: anInteger intervalId: intervalId [ - ^ self new - index: anInteger; - intervalId: intervalId; - yourself -] - -{ #category : #arithmetic } -SmaCCStringIndex >> + anInteger [ - ^ self class index: index + anInteger intervalId: intervalId -] - -{ #category : #arithmetic } -SmaCCStringIndex >> - anInteger [ - ^ self + anInteger negated -] - -{ #category : #comparing } -SmaCCStringIndex >> < aSmaCCStringIndex [ - ^ self index < aSmaCCStringIndex index -] - -{ #category : #comparing } -SmaCCStringIndex >> = anObject [ - ^ self class = anObject class - and: - [ self index = anObject index - and: [ self intervalId = anObject intervalId ] ] -] - -{ #category : #comparing } -SmaCCStringIndex >> hash [ - ^ (index hashMultiply bitXor: intervalId) hashMultiply -] - -{ #category : #accessing } -SmaCCStringIndex >> index [ - ^ index -] - -{ #category : #accessing } -SmaCCStringIndex >> index: anInteger [ - index := anInteger -] - -{ #category : #accessing } -SmaCCStringIndex >> intervalId [ - ^ intervalId -] - -{ #category : #accessing } -SmaCCStringIndex >> intervalId: anInteger [ - intervalId := anInteger -] - -{ #category : #printing } -SmaCCStringIndex >> printOn: aStream [ - super printOn: aStream. - aStream - nextPut: $(; - print: intervalId; - nextPut: $,; - print: index; - nextPut: $) -] diff --git a/src/SmaCC_Source_Editing/SmaCCStringInterval.class.st b/src/SmaCC_Source_Editing/SmaCCStringInterval.class.st deleted file mode 100644 index d79756dc0..000000000 --- a/src/SmaCC_Source_Editing/SmaCCStringInterval.class.st +++ /dev/null @@ -1,282 +0,0 @@ -" -SmaCCStringInterval is a SmaCCInterval that represents a string that is insert into the SmaCCString. - -Instance Variables: - id a unique id for the operation - isRemoved is this interval removed? - next the next interval in the string - previous the previous interval in the string - start the starting location in the string - stop the ending location in the string - string the text that we are inserting -- we are only inserting from the start index to the stop index - - -" -Class { - #name : #SmaCCStringInterval, - #superclass : #Object, - #instVars : [ - 'id', - 'start', - 'stop', - 'next', - 'previous', - 'string', - 'isRemoved' - ], - #category : #'SmaCC_Source_Editing' -} - -{ #category : #'instance creation' } -SmaCCStringInterval class >> from: aSmaCCIndex to: aSmaCCIndex2 string: aString [ - ^ self new - start: aSmaCCIndex; - stop: aSmaCCIndex2; - string: aString; - yourself -] - -{ #category : #private } -SmaCCStringInterval >> addAllAnnotations: aCollection [ - -] - -{ #category : #accessing } -SmaCCStringInterval >> annotations [ - ^ #() -] - -{ #category : #accessing } -SmaCCStringInterval >> annotationsTo: lastInterval [ - | annotations current | - annotations := Set new. - current := self. - [ annotations addAll: current annotations. - current ~~ lastInterval ] - whileTrue: [ current isSentinel - ifTrue: [ ^ nil ]. - current := current next ]. - ^ annotations asOrderedCollection -] - -{ #category : #accessing } -SmaCCStringInterval >> asString [ - (self isRemoved or: [ self isEmpty ]) - ifTrue: [ ^ '' ]. - ^ string copyFrom: start to: stop -] - -{ #category : #private } -SmaCCStringInterval >> beSentinel [ - id := -1. - next := self. - previous := self -] - -{ #category : #testing } -SmaCCStringInterval >> canBeMergedWith: nextSmaCCStringInterval [ - ^ self id = nextSmaCCStringInterval id - and: - [ self isRemoved = nextSmaCCStringInterval isRemoved - and: [ self stop + 1 = nextSmaCCStringInterval start ] ] -] - -{ #category : #testing } -SmaCCStringInterval >> containsIndex: anIndex [ - | indexPosition indexId | - self isSentinel - ifTrue: [ ^ true ]. - anIndex isInteger - ifTrue: [ indexPosition := anIndex. - indexId := 1 ] - ifFalse: [ indexPosition := anIndex index. - indexId := anIndex intervalId ]. - ^ id = indexId - and: [ (indexPosition between: start and: stop) or: [ indexPosition = 0 ] ] -] - -{ #category : #private } -SmaCCStringInterval >> convertToRemoved [ - | interval | - (self isRemoved or: [ self isSentinel ]) - ifTrue: [ ^ self ]. - isRemoved := true. - (previous canBeMergedWith: self) - ifTrue: - [ interval := previous. - interval stop: self stop. - interval next: next. - self removed. - ^ interval ]. - (self canBeMergedWith: next) - ifTrue: - [ interval := next. - next start: self start. - previous next: next. - self removed. - ^ interval ]. - ^ self -] - -{ #category : #iterating } -SmaCCStringInterval >> do: aBlock [ - | current | - current := self. - [ current isSentinel ] - whileFalse: [ aBlock value: current. - current := current next ] -] - -{ #category : #accessing } -SmaCCStringInterval >> id [ - ^ id -] - -{ #category : #accessing } -SmaCCStringInterval >> id: anInteger [ - id := anInteger -] - -{ #category : #editing } -SmaCCStringInterval >> insertAfter: aSmaCCInterval [ - self next: aSmaCCInterval next. - aSmaCCInterval next: self -] - -{ #category : #testing } -SmaCCStringInterval >> isEmpty [ - ^ start > stop -] - -{ #category : #testing } -SmaCCStringInterval >> isRemoved [ - ^ isRemoved -] - -{ #category : #accessing } -SmaCCStringInterval >> isRemoved: aBoolean [ - isRemoved := aBoolean -] - -{ #category : #testing } -SmaCCStringInterval >> isSentinel [ - ^ id = -1 -] - -{ #category : #accessing } -SmaCCStringInterval >> next [ - ^ next -] - -{ #category : #accessing } -SmaCCStringInterval >> next: aSmaCCInterval [ - next := aSmaCCInterval. - aSmaCCInterval previous: self -] - -{ #category : #private } -SmaCCStringInterval >> nextPutOn: aWriteStream [ - self isRemoved - ifTrue: [ ^ self ]. - aWriteStream next: self size putAll: string startingAt: start -] - -{ #category : #accessing } -SmaCCStringInterval >> previous [ - ^ previous -] - -{ #category : #accessing } -SmaCCStringInterval >> previous: aSmaCCInterval [ - previous := aSmaCCInterval -] - -{ #category : #printing } -SmaCCStringInterval >> printOn: aStream [ - super printOn: aStream. - aStream - nextPut: $(; - print: id; - nextPut: $,; - print: start; - nextPut: $-; - print: stop; - nextPut: $) -] - -{ #category : #private } -SmaCCStringInterval >> removed [ - next := nil. - previous := nil -] - -{ #category : #accessing } -SmaCCStringInterval >> removedString [ - ^ string copyFrom: start to: stop -] - -{ #category : #accessing } -SmaCCStringInterval >> size [ - self isRemoved - ifTrue: [ ^ 0 ]. - ^ stop - start + 1 max: 0 -] - -{ #category : #editing } -SmaCCStringInterval >> splitAt: anIndex [ - | new | - (self isSentinel or: [ anIndex = start ]) - ifTrue: [ ^ self ]. - anIndex > stop - ifTrue: [ ^ next ]. - new := self copy. - self stop: anIndex - 1. - new start: anIndex. - new insertAfter: self. - ^ new -] - -{ #category : #accessing } -SmaCCStringInterval >> start [ - ^ start -] - -{ #category : #accessing } -SmaCCStringInterval >> start: anInteger [ - start := anInteger -] - -{ #category : #accessing } -SmaCCStringInterval >> startIndex [ - self isSentinel - ifTrue: [ ^ nil ]. - ^ self isEmpty - ifTrue: [ next startIndex ] - ifFalse: [ SmaCCStringIndex index: start intervalId: id ] -] - -{ #category : #accessing } -SmaCCStringInterval >> stop [ - ^ stop -] - -{ #category : #accessing } -SmaCCStringInterval >> stop: anInteger [ - stop := anInteger -] - -{ #category : #accessing } -SmaCCStringInterval >> stopIndex [ - ^ SmaCCStringIndex index: stop intervalId: id -] - -{ #category : #accessing } -SmaCCStringInterval >> string [ - ^ string -] - -{ #category : #accessing } -SmaCCStringInterval >> string: aString [ - isRemoved := false. - string := aString -] diff --git a/src/SmaCC_Source_Editing/package.st b/src/SmaCC_Source_Editing/package.st deleted file mode 100644 index 63a9bccb9..000000000 --- a/src/SmaCC_Source_Editing/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_Source_Editing' } diff --git a/src/SmaCC_Swift/SwiftArrayTypeNode.class.st b/src/SmaCC_Swift/SwiftArrayTypeNode.class.st deleted file mode 100644 index 340ec9756..000000000 --- a/src/SmaCC_Swift/SwiftArrayTypeNode.class.st +++ /dev/null @@ -1,310 +0,0 @@ -Class { - #name : #SwiftArrayTypeNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'leftBracketTokens', - 'identifierTokens', - 'periodTokens', - 'protocolTokens', - 'lessThanTokens', - 'greaterThanTokens', - 'rightBracketTokens', - 'colonTokens', - 'minusGreaterThanTokens', - 'commaTokens', - 'leftParenTokens', - 'rightParenTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens', - 'inoutTokens', - '_Tokens', - 'leftBraceTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftArrayTypeNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftArrayTypeNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftArrayTypeNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitArrayType: self -] - -{ #category : #generated } -SwiftArrayTypeNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftArrayTypeNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftArrayTypeNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftArrayTypeNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftArrayTypeNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftArrayTypeNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftArrayTypeNode >> compositeTokenVariables [ - ^ #(#leftBracketTokens #rightBracketTokens #colonTokens #minusGreaterThanTokens #periodTokens #leftParenTokens #rightParenTokens #questionMarkTokens #bangTokens #protocolTokens #lessThanTokens #greaterThanTokens #typeTokens #identifierTokens #commaTokens #periodPeriodPeriodTokens #_Tokens #inoutTokens #leftBraceTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens) -] - -{ #category : #generated } -SwiftArrayTypeNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftArrayTypeNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftArrayTypeNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftArrayTypeNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftArrayTypeNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftArrayTypeNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftArrayTypeNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftArrayTypeNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftArrayTypeNode >> initialize [ - super initialize. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - _Tokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftArrayTypeNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftArrayTypeNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftArrayTypeNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftArrayTypeNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftArrayTypeNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftArrayTypeNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftArrayTypeNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftArrayTypeNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftArrayTypeNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftArrayTypeNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftArrayTypeNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftArrayTypeNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftArrayTypeNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftArrayTypeNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftArrayTypeNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftArrayTypeNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftArrayTypeNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftArrayTypeNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftArrayTypeNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftArrayTypeNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftArrayTypeNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftArrayTypeNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftArrayTypeNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftArrayTypeNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftArrayTypeNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftArrayTypeNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftArrayTypeNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftArrayTypeNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftArrayTypeNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftArrayTypeNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftArrayTypeNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftArrayTypeNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] diff --git a/src/SmaCC_Swift/SwiftAssignmentOperatorNode.class.st b/src/SmaCC_Swift/SwiftAssignmentOperatorNode.class.st deleted file mode 100644 index 4b871d083..000000000 --- a/src/SmaCC_Swift/SwiftAssignmentOperatorNode.class.st +++ /dev/null @@ -1,557 +0,0 @@ -Class { - #name : #SwiftAssignmentOperatorNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'equalTokens', - 'identifierTokens', - 'lessThanTokens', - 'commaTokens', - 'greaterThanTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'leftBracketTokens', - 'expressions', - 'rightBracketTokens', - 'keyExpressions', - 'colonTokens', - 'valueExpressions', - '__FILE__Token', - '__LINE__Token', - '__COLUMN__Token', - '__FUNCTION__Token', - 'selfTokens', - 'periodTokens', - 'initTokens', - 'leftBraceTokens', - 'leftParenTokens', - 'rightParenTokens', - 'inoutTokens', - 'letTokens', - '_Tokens', - 'protocolTokens', - 'minusGreaterThanTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens', - 'varTokens', - 'rightBraceTokens', - 'operatorTokens', - 'inToken', - 'weakToken', - 'unownedToken', - 'unownedLeftParensafeRightParenToken', - 'unownedLeftParenunsafeRightParenToken', - 'statements', - 'dynamicTypeTokens', - 'andToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftAssignmentOperatorNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> __COLUMN__Token [ - ^ __COLUMN__Token -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> __COLUMN__Token: aSmaCCToken [ - __COLUMN__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> __FILE__Token [ - ^ __FILE__Token -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> __FILE__Token: aSmaCCToken [ - __FILE__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> __FUNCTION__Token [ - ^ __FUNCTION__Token -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> __FUNCTION__Token: aSmaCCToken [ - __FUNCTION__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> __LINE__Token [ - ^ __LINE__Token -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> __LINE__Token: aSmaCCToken [ - __LINE__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitAssignmentOperator: self -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> andToken [ - ^ andToken -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> andToken: aSmaCCToken [ - andToken := aSmaCCToken -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> compositeNodeVariables [ - ^ #(#statements) -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> compositeTokenVariables [ - ^ #(#equalTokens #identifierTokens #lessThanTokens #commaTokens #greaterThanTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #leftBracketTokens #rightBracketTokens #colonTokens #selfTokens #periodTokens #initTokens #leftBraceTokens #leftParenTokens #rightParenTokens #inoutTokens #letTokens #_Tokens #minusGreaterThanTokens #questionMarkTokens #bangTokens #protocolTokens #typeTokens #periodPeriodPeriodTokens #varTokens #rightBraceTokens #operatorTokens #dynamicTypeTokens) -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> dynamicTypeTokens [ - ^ dynamicTypeTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> dynamicTypeTokens: anOrderedCollection [ - dynamicTypeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> equalTokens [ - ^ equalTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> equalTokens: anOrderedCollection [ - equalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> expressions: anOrderedCollection [ - expressions := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> inToken [ - ^ inToken -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> inToken: aSmaCCToken [ - inToken := aSmaCCToken -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> initTokens [ - ^ initTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> initTokens: anOrderedCollection [ - initTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftAssignmentOperatorNode >> initialize [ - super initialize. - equalTokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - keyExpressions := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - valueExpressions := OrderedCollection new: 2. - selfTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - initTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - letTokens := OrderedCollection new: 2. - _Tokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - varTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - statements := OrderedCollection new: 2. - dynamicTypeTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> keyExpressions [ - ^ keyExpressions -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> keyExpressions: anOrderedCollection [ - keyExpressions := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> letTokens [ - ^ letTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> letTokens: anOrderedCollection [ - letTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> otherVariables [ - ^ #(#expressions #keyExpressions #valueExpressions) -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> selfTokens [ - ^ selfTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> selfTokens: anOrderedCollection [ - selfTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> statements [ - ^ statements -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> tokenVariables [ - ^ #(#__FILE__Token #__LINE__Token #__COLUMN__Token #__FUNCTION__Token #inToken #weakToken #unownedToken #unownedLeftParensafeRightParenToken #unownedLeftParenunsafeRightParenToken #andToken) -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> unownedLeftParensafeRightParenToken [ - ^ unownedLeftParensafeRightParenToken -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> unownedLeftParensafeRightParenToken: aSmaCCToken [ - unownedLeftParensafeRightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> unownedLeftParenunsafeRightParenToken [ - ^ unownedLeftParenunsafeRightParenToken -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> unownedLeftParenunsafeRightParenToken: aSmaCCToken [ - unownedLeftParenunsafeRightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> unownedToken [ - ^ unownedToken -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> unownedToken: aSmaCCToken [ - unownedToken := aSmaCCToken -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> valueExpressions [ - ^ valueExpressions -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> valueExpressions: anOrderedCollection [ - valueExpressions := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> varTokens [ - ^ varTokens -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> varTokens: anOrderedCollection [ - varTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> weakToken [ - ^ weakToken -] - -{ #category : #generated } -SwiftAssignmentOperatorNode >> weakToken: aSmaCCToken [ - weakToken := aSmaCCToken -] diff --git a/src/SmaCC_Swift/SwiftBinaryExpressionNode.class.st b/src/SmaCC_Swift/SwiftBinaryExpressionNode.class.st deleted file mode 100644 index e3e11bdd7..000000000 --- a/src/SmaCC_Swift/SwiftBinaryExpressionNode.class.st +++ /dev/null @@ -1,571 +0,0 @@ -Class { - #name : #SwiftBinaryExpressionNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'identifierTokens', - 'lessThanTokens', - 'commaTokens', - 'greaterThanTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'leftBracketTokens', - 'expressions', - 'rightBracketTokens', - 'keyExpressions', - 'colonTokens', - 'valueExpressions', - '__FILE__Token', - '__LINE__Token', - '__COLUMN__Token', - '__FUNCTION__Token', - 'selfTokens', - 'periodTokens', - 'initTokens', - 'leftBraceTokens', - 'leftParenTokens', - 'rightParenTokens', - 'inoutTokens', - 'letTokens', - '_Tokens', - 'protocolTokens', - 'minusGreaterThanTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens', - 'equalTokens', - 'varTokens', - 'rightBraceTokens', - 'operatorTokens', - 'inToken', - 'weakToken', - 'unownedToken', - 'unownedLeftParensafeRightParenToken', - 'unownedLeftParenunsafeRightParenToken', - 'statements', - 'dynamicTypeTokens', - 'andToken', - 'operators' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftBinaryExpressionNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> __COLUMN__Token [ - ^ __COLUMN__Token -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> __COLUMN__Token: aSmaCCToken [ - __COLUMN__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> __FILE__Token [ - ^ __FILE__Token -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> __FILE__Token: aSmaCCToken [ - __FILE__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> __FUNCTION__Token [ - ^ __FUNCTION__Token -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> __FUNCTION__Token: aSmaCCToken [ - __FUNCTION__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> __LINE__Token [ - ^ __LINE__Token -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> __LINE__Token: aSmaCCToken [ - __LINE__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitBinaryExpression: self -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> andToken [ - ^ andToken -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> andToken: aSmaCCToken [ - andToken := aSmaCCToken -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> compositeNodeVariables [ - ^ #(#statements #operators) -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> compositeTokenVariables [ - ^ #(#identifierTokens #lessThanTokens #commaTokens #greaterThanTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #leftBracketTokens #rightBracketTokens #colonTokens #selfTokens #periodTokens #initTokens #leftBraceTokens #leftParenTokens #rightParenTokens #inoutTokens #letTokens #_Tokens #minusGreaterThanTokens #questionMarkTokens #bangTokens #protocolTokens #typeTokens #periodPeriodPeriodTokens #equalTokens #varTokens #rightBraceTokens #operatorTokens #dynamicTypeTokens) -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> dynamicTypeTokens [ - ^ dynamicTypeTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> dynamicTypeTokens: anOrderedCollection [ - dynamicTypeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> equalTokens [ - ^ equalTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> equalTokens: anOrderedCollection [ - equalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> expressions: anOrderedCollection [ - expressions := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> inToken [ - ^ inToken -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> inToken: aSmaCCToken [ - inToken := aSmaCCToken -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> initTokens [ - ^ initTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> initTokens: anOrderedCollection [ - initTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftBinaryExpressionNode >> initialize [ - super initialize. - identifierTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - keyExpressions := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - valueExpressions := OrderedCollection new: 2. - selfTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - initTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - letTokens := OrderedCollection new: 2. - _Tokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - equalTokens := OrderedCollection new: 2. - varTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - statements := OrderedCollection new: 2. - dynamicTypeTokens := OrderedCollection new: 2. - operators := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> keyExpressions [ - ^ keyExpressions -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> keyExpressions: anOrderedCollection [ - keyExpressions := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> letTokens [ - ^ letTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> letTokens: anOrderedCollection [ - letTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> operators [ - ^ operators -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> operators: anOrderedCollection [ - self setParents: self operators to: nil. - operators := anOrderedCollection. - self setParents: self operators to: self -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> otherVariables [ - ^ #(#expressions #keyExpressions #valueExpressions) -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> selfTokens [ - ^ selfTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> selfTokens: anOrderedCollection [ - selfTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> statements [ - ^ statements -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> tokenVariables [ - ^ #(#__FILE__Token #__LINE__Token #__COLUMN__Token #__FUNCTION__Token #inToken #weakToken #unownedToken #unownedLeftParensafeRightParenToken #unownedLeftParenunsafeRightParenToken #andToken) -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> unownedLeftParensafeRightParenToken [ - ^ unownedLeftParensafeRightParenToken -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> unownedLeftParensafeRightParenToken: aSmaCCToken [ - unownedLeftParensafeRightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> unownedLeftParenunsafeRightParenToken [ - ^ unownedLeftParenunsafeRightParenToken -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> unownedLeftParenunsafeRightParenToken: aSmaCCToken [ - unownedLeftParenunsafeRightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> unownedToken [ - ^ unownedToken -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> unownedToken: aSmaCCToken [ - unownedToken := aSmaCCToken -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> valueExpressions [ - ^ valueExpressions -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> valueExpressions: anOrderedCollection [ - valueExpressions := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> varTokens [ - ^ varTokens -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> varTokens: anOrderedCollection [ - varTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> weakToken [ - ^ weakToken -] - -{ #category : #generated } -SwiftBinaryExpressionNode >> weakToken: aSmaCCToken [ - weakToken := aSmaCCToken -] diff --git a/src/SmaCC_Swift/SwiftBinaryOperatorNode.class.st b/src/SmaCC_Swift/SwiftBinaryOperatorNode.class.st deleted file mode 100644 index 07c2f5b29..000000000 --- a/src/SmaCC_Swift/SwiftBinaryOperatorNode.class.st +++ /dev/null @@ -1,557 +0,0 @@ -Class { - #name : #SwiftBinaryOperatorNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'operatorTokens', - 'identifierTokens', - 'lessThanTokens', - 'commaTokens', - 'greaterThanTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'leftBracketTokens', - 'expressions', - 'rightBracketTokens', - 'keyExpressions', - 'colonTokens', - 'valueExpressions', - '__FILE__Token', - '__LINE__Token', - '__COLUMN__Token', - '__FUNCTION__Token', - 'selfTokens', - 'periodTokens', - 'initTokens', - 'leftBraceTokens', - 'leftParenTokens', - 'rightParenTokens', - 'inoutTokens', - 'letTokens', - '_Tokens', - 'protocolTokens', - 'minusGreaterThanTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens', - 'equalTokens', - 'varTokens', - 'rightBraceTokens', - 'inToken', - 'weakToken', - 'unownedToken', - 'unownedLeftParensafeRightParenToken', - 'unownedLeftParenunsafeRightParenToken', - 'statements', - 'dynamicTypeTokens', - 'andToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftBinaryOperatorNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> __COLUMN__Token [ - ^ __COLUMN__Token -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> __COLUMN__Token: aSmaCCToken [ - __COLUMN__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> __FILE__Token [ - ^ __FILE__Token -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> __FILE__Token: aSmaCCToken [ - __FILE__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> __FUNCTION__Token [ - ^ __FUNCTION__Token -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> __FUNCTION__Token: aSmaCCToken [ - __FUNCTION__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> __LINE__Token [ - ^ __LINE__Token -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> __LINE__Token: aSmaCCToken [ - __LINE__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitBinaryOperator: self -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> andToken [ - ^ andToken -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> andToken: aSmaCCToken [ - andToken := aSmaCCToken -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> compositeNodeVariables [ - ^ #(#statements) -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> compositeTokenVariables [ - ^ #(#operatorTokens #identifierTokens #lessThanTokens #commaTokens #greaterThanTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #leftBracketTokens #rightBracketTokens #colonTokens #selfTokens #periodTokens #initTokens #leftBraceTokens #leftParenTokens #rightParenTokens #inoutTokens #letTokens #_Tokens #minusGreaterThanTokens #questionMarkTokens #bangTokens #protocolTokens #typeTokens #periodPeriodPeriodTokens #equalTokens #varTokens #rightBraceTokens #dynamicTypeTokens) -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> dynamicTypeTokens [ - ^ dynamicTypeTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> dynamicTypeTokens: anOrderedCollection [ - dynamicTypeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> equalTokens [ - ^ equalTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> equalTokens: anOrderedCollection [ - equalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> expressions: anOrderedCollection [ - expressions := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> inToken [ - ^ inToken -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> inToken: aSmaCCToken [ - inToken := aSmaCCToken -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> initTokens [ - ^ initTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> initTokens: anOrderedCollection [ - initTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftBinaryOperatorNode >> initialize [ - super initialize. - operatorTokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - keyExpressions := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - valueExpressions := OrderedCollection new: 2. - selfTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - initTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - letTokens := OrderedCollection new: 2. - _Tokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - equalTokens := OrderedCollection new: 2. - varTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - statements := OrderedCollection new: 2. - dynamicTypeTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> keyExpressions [ - ^ keyExpressions -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> keyExpressions: anOrderedCollection [ - keyExpressions := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> letTokens [ - ^ letTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> letTokens: anOrderedCollection [ - letTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> otherVariables [ - ^ #(#expressions #keyExpressions #valueExpressions) -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> selfTokens [ - ^ selfTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> selfTokens: anOrderedCollection [ - selfTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> statements [ - ^ statements -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> tokenVariables [ - ^ #(#__FILE__Token #__LINE__Token #__COLUMN__Token #__FUNCTION__Token #inToken #weakToken #unownedToken #unownedLeftParensafeRightParenToken #unownedLeftParenunsafeRightParenToken #andToken) -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> unownedLeftParensafeRightParenToken [ - ^ unownedLeftParensafeRightParenToken -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> unownedLeftParensafeRightParenToken: aSmaCCToken [ - unownedLeftParensafeRightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> unownedLeftParenunsafeRightParenToken [ - ^ unownedLeftParenunsafeRightParenToken -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> unownedLeftParenunsafeRightParenToken: aSmaCCToken [ - unownedLeftParenunsafeRightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> unownedToken [ - ^ unownedToken -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> unownedToken: aSmaCCToken [ - unownedToken := aSmaCCToken -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> valueExpressions [ - ^ valueExpressions -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> valueExpressions: anOrderedCollection [ - valueExpressions := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> varTokens [ - ^ varTokens -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> varTokens: anOrderedCollection [ - varTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> weakToken [ - ^ weakToken -] - -{ #category : #generated } -SwiftBinaryOperatorNode >> weakToken: aSmaCCToken [ - weakToken := aSmaCCToken -] diff --git a/src/SmaCC_Swift/SwiftBlockNode.class.st b/src/SmaCC_Swift/SwiftBlockNode.class.st deleted file mode 100644 index c8e1e7148..000000000 --- a/src/SmaCC_Swift/SwiftBlockNode.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #SwiftBlockNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'leftBraceToken', - 'statements', - 'rightBraceToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftBlockNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitBlock: self -] - -{ #category : #generated } -SwiftBlockNode >> compositeNodeVariables [ - ^ #(#statements) -] - -{ #category : #'generated-initialize-release' } -SwiftBlockNode >> initialize [ - super initialize. - statements := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftBlockNode >> leftBraceToken [ - ^ leftBraceToken -] - -{ #category : #generated } -SwiftBlockNode >> leftBraceToken: aSmaCCToken [ - leftBraceToken := aSmaCCToken -] - -{ #category : #generated } -SwiftBlockNode >> rightBraceToken [ - ^ rightBraceToken -] - -{ #category : #generated } -SwiftBlockNode >> rightBraceToken: aSmaCCToken [ - rightBraceToken := aSmaCCToken -] - -{ #category : #generated } -SwiftBlockNode >> statements [ - ^ statements -] - -{ #category : #generated } -SwiftBlockNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] - -{ #category : #generated } -SwiftBlockNode >> tokenVariables [ - ^ #(#leftBraceToken #rightBraceToken) -] diff --git a/src/SmaCC_Swift/SwiftBranchStatementNode.class.st b/src/SmaCC_Swift/SwiftBranchStatementNode.class.st deleted file mode 100644 index daf7b7122..000000000 --- a/src/SmaCC_Swift/SwiftBranchStatementNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #SwiftBranchStatementNode, - #superclass : #SwiftStatementNode, - #instVars : [ - 'semicolonToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftBranchStatementNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitBranchStatement: self -] - -{ #category : #generated } -SwiftBranchStatementNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -SwiftBranchStatementNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] - -{ #category : #generated } -SwiftBranchStatementNode >> tokenVariables [ - ^ #(#semicolonToken) -] diff --git a/src/SmaCC_Swift/SwiftBreakStatementNode.class.st b/src/SmaCC_Swift/SwiftBreakStatementNode.class.st deleted file mode 100644 index 116ecd9fe..000000000 --- a/src/SmaCC_Swift/SwiftBreakStatementNode.class.st +++ /dev/null @@ -1,39 +0,0 @@ -Class { - #name : #SwiftBreakStatementNode, - #superclass : #SwiftControlTransferStatementNode, - #instVars : [ - 'breakToken', - 'name' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftBreakStatementNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitBreakStatement: self -] - -{ #category : #generated } -SwiftBreakStatementNode >> breakToken [ - ^ breakToken -] - -{ #category : #generated } -SwiftBreakStatementNode >> breakToken: aSmaCCToken [ - breakToken := aSmaCCToken -] - -{ #category : #generated } -SwiftBreakStatementNode >> name [ - ^ name -] - -{ #category : #generated } -SwiftBreakStatementNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -SwiftBreakStatementNode >> tokenVariables [ - ^ #(#breakToken #name #semicolonToken) -] diff --git a/src/SmaCC_Swift/SwiftClassDeclarationNode.class.st b/src/SmaCC_Swift/SwiftClassDeclarationNode.class.st deleted file mode 100644 index b2a3540fc..000000000 --- a/src/SmaCC_Swift/SwiftClassDeclarationNode.class.st +++ /dev/null @@ -1,296 +0,0 @@ -Class { - #name : #SwiftClassDeclarationNode, - #superclass : #SwiftParseNode, - #instVars : [ - '_Tokens', - 'identifierTokens', - 'leftParenTokens', - 'rightParenTokens', - 'leftBracketTokens', - 'rightBracketTokens', - 'leftBraceTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens', - 'classToken', - 'lessThanTokens', - 'colonTokens', - 'commaTokens', - 'greaterThanTokens', - 'periodTokens', - 'protocolTokens', - 'whereToken', - 'equalEqualTokens', - 'declarations' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftClassDeclarationNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftClassDeclarationNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClassDeclarationNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitClassDeclaration: self -] - -{ #category : #generated } -SwiftClassDeclarationNode >> classToken [ - ^ classToken -] - -{ #category : #generated } -SwiftClassDeclarationNode >> classToken: aSmaCCToken [ - classToken := aSmaCCToken -] - -{ #category : #generated } -SwiftClassDeclarationNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftClassDeclarationNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClassDeclarationNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftClassDeclarationNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClassDeclarationNode >> compositeNodeVariables [ - ^ #(#declarations) -] - -{ #category : #generated } -SwiftClassDeclarationNode >> compositeTokenVariables [ - ^ #(#_Tokens #identifierTokens #leftParenTokens #rightParenTokens #leftBracketTokens #rightBracketTokens #leftBraceTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens #lessThanTokens #colonTokens #commaTokens #greaterThanTokens #periodTokens #protocolTokens #equalEqualTokens) -] - -{ #category : #generated } -SwiftClassDeclarationNode >> declarations [ - ^ declarations -] - -{ #category : #generated } -SwiftClassDeclarationNode >> declarations: anOrderedCollection [ - self setParents: self declarations to: nil. - declarations := anOrderedCollection. - self setParents: self declarations to: self -] - -{ #category : #generated } -SwiftClassDeclarationNode >> equalEqualTokens [ - ^ equalEqualTokens -] - -{ #category : #generated } -SwiftClassDeclarationNode >> equalEqualTokens: anOrderedCollection [ - equalEqualTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClassDeclarationNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftClassDeclarationNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClassDeclarationNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftClassDeclarationNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClassDeclarationNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftClassDeclarationNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClassDeclarationNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftClassDeclarationNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftClassDeclarationNode >> initialize [ - super initialize. - _Tokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - equalEqualTokens := OrderedCollection new: 2. - declarations := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftClassDeclarationNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftClassDeclarationNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClassDeclarationNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftClassDeclarationNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClassDeclarationNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftClassDeclarationNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClassDeclarationNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftClassDeclarationNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClassDeclarationNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftClassDeclarationNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClassDeclarationNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftClassDeclarationNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClassDeclarationNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftClassDeclarationNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClassDeclarationNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftClassDeclarationNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClassDeclarationNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftClassDeclarationNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClassDeclarationNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftClassDeclarationNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClassDeclarationNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftClassDeclarationNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClassDeclarationNode >> tokenVariables [ - ^ #(#classToken #whereToken) -] - -{ #category : #generated } -SwiftClassDeclarationNode >> whereToken [ - ^ whereToken -] - -{ #category : #generated } -SwiftClassDeclarationNode >> whereToken: aSmaCCToken [ - whereToken := aSmaCCToken -] diff --git a/src/SmaCC_Swift/SwiftClosureExpressionNode.class.st b/src/SmaCC_Swift/SwiftClosureExpressionNode.class.st deleted file mode 100644 index bc649d49f..000000000 --- a/src/SmaCC_Swift/SwiftClosureExpressionNode.class.st +++ /dev/null @@ -1,442 +0,0 @@ -Class { - #name : #SwiftClosureExpressionNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'leftBraceTokens', - 'leftParenTokens', - 'rightParenTokens', - 'inoutTokens', - 'letTokens', - '_Tokens', - 'identifierTokens', - 'colonTokens', - 'leftBracketTokens', - 'periodTokens', - 'protocolTokens', - 'lessThanTokens', - 'greaterThanTokens', - 'rightBracketTokens', - 'minusGreaterThanTokens', - 'commaTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens', - 'equalTokens', - 'expressions', - 'varTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens', - 'inToken', - 'weakToken', - 'unownedToken', - 'unownedLeftParensafeRightParenToken', - 'unownedLeftParenunsafeRightParenToken', - 'statements' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftClosureExpressionNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitClosureExpression: self -] - -{ #category : #generated } -SwiftClosureExpressionNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> compositeNodeVariables [ - ^ #(#statements) -] - -{ #category : #generated } -SwiftClosureExpressionNode >> compositeTokenVariables [ - ^ #(#leftBraceTokens #leftParenTokens #rightParenTokens #inoutTokens #letTokens #_Tokens #identifierTokens #colonTokens #leftBracketTokens #rightBracketTokens #minusGreaterThanTokens #periodTokens #questionMarkTokens #bangTokens #protocolTokens #lessThanTokens #greaterThanTokens #typeTokens #commaTokens #periodPeriodPeriodTokens #equalTokens #varTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens) -] - -{ #category : #generated } -SwiftClosureExpressionNode >> equalTokens [ - ^ equalTokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> equalTokens: anOrderedCollection [ - equalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SwiftClosureExpressionNode >> expressions: anOrderedCollection [ - expressions := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> inToken [ - ^ inToken -] - -{ #category : #generated } -SwiftClosureExpressionNode >> inToken: aSmaCCToken [ - inToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -SwiftClosureExpressionNode >> initialize [ - super initialize. - leftBraceTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - letTokens := OrderedCollection new: 2. - _Tokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - equalTokens := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. - varTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - statements := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftClosureExpressionNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> letTokens [ - ^ letTokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> letTokens: anOrderedCollection [ - letTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> otherVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -SwiftClosureExpressionNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> statements [ - ^ statements -] - -{ #category : #generated } -SwiftClosureExpressionNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] - -{ #category : #generated } -SwiftClosureExpressionNode >> tokenVariables [ - ^ #(#inToken #weakToken #unownedToken #unownedLeftParensafeRightParenToken #unownedLeftParenunsafeRightParenToken) -] - -{ #category : #generated } -SwiftClosureExpressionNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> unownedLeftParensafeRightParenToken [ - ^ unownedLeftParensafeRightParenToken -] - -{ #category : #generated } -SwiftClosureExpressionNode >> unownedLeftParensafeRightParenToken: aSmaCCToken [ - unownedLeftParensafeRightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftClosureExpressionNode >> unownedLeftParenunsafeRightParenToken [ - ^ unownedLeftParenunsafeRightParenToken -] - -{ #category : #generated } -SwiftClosureExpressionNode >> unownedLeftParenunsafeRightParenToken: aSmaCCToken [ - unownedLeftParenunsafeRightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftClosureExpressionNode >> unownedToken [ - ^ unownedToken -] - -{ #category : #generated } -SwiftClosureExpressionNode >> unownedToken: aSmaCCToken [ - unownedToken := aSmaCCToken -] - -{ #category : #generated } -SwiftClosureExpressionNode >> varTokens [ - ^ varTokens -] - -{ #category : #generated } -SwiftClosureExpressionNode >> varTokens: anOrderedCollection [ - varTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftClosureExpressionNode >> weakToken [ - ^ weakToken -] - -{ #category : #generated } -SwiftClosureExpressionNode >> weakToken: aSmaCCToken [ - weakToken := aSmaCCToken -] diff --git a/src/SmaCC_Swift/SwiftCondionalOperatorNode.class.st b/src/SmaCC_Swift/SwiftCondionalOperatorNode.class.st deleted file mode 100644 index c9369dcf1..000000000 --- a/src/SmaCC_Swift/SwiftCondionalOperatorNode.class.st +++ /dev/null @@ -1,568 +0,0 @@ -Class { - #name : #SwiftCondionalOperatorNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'questionMarkTokens', - 'trueExpression', - 'colonTokens', - 'identifierTokens', - 'lessThanTokens', - 'commaTokens', - 'greaterThanTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'leftBracketTokens', - 'expressions', - 'rightBracketTokens', - 'keyExpressions', - 'valueExpressions', - '__FILE__Token', - '__LINE__Token', - '__COLUMN__Token', - '__FUNCTION__Token', - 'selfTokens', - 'periodTokens', - 'initTokens', - 'leftBraceTokens', - 'leftParenTokens', - 'rightParenTokens', - 'inoutTokens', - 'letTokens', - '_Tokens', - 'protocolTokens', - 'minusGreaterThanTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens', - 'equalTokens', - 'varTokens', - 'rightBraceTokens', - 'operatorTokens', - 'inToken', - 'weakToken', - 'unownedToken', - 'unownedLeftParensafeRightParenToken', - 'unownedLeftParenunsafeRightParenToken', - 'statements', - 'dynamicTypeTokens', - 'andToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftCondionalOperatorNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> __COLUMN__Token [ - ^ __COLUMN__Token -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> __COLUMN__Token: aSmaCCToken [ - __COLUMN__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> __FILE__Token [ - ^ __FILE__Token -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> __FILE__Token: aSmaCCToken [ - __FILE__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> __FUNCTION__Token [ - ^ __FUNCTION__Token -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> __FUNCTION__Token: aSmaCCToken [ - __FUNCTION__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> __LINE__Token [ - ^ __LINE__Token -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> __LINE__Token: aSmaCCToken [ - __LINE__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitCondionalOperator: self -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> andToken [ - ^ andToken -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> andToken: aSmaCCToken [ - andToken := aSmaCCToken -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> compositeNodeVariables [ - ^ #(#statements) -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> compositeTokenVariables [ - ^ #(#questionMarkTokens #colonTokens #identifierTokens #lessThanTokens #commaTokens #greaterThanTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #leftBracketTokens #rightBracketTokens #selfTokens #periodTokens #initTokens #leftBraceTokens #leftParenTokens #rightParenTokens #inoutTokens #letTokens #_Tokens #minusGreaterThanTokens #bangTokens #protocolTokens #typeTokens #periodPeriodPeriodTokens #equalTokens #varTokens #rightBraceTokens #operatorTokens #dynamicTypeTokens) -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> dynamicTypeTokens [ - ^ dynamicTypeTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> dynamicTypeTokens: anOrderedCollection [ - dynamicTypeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> equalTokens [ - ^ equalTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> equalTokens: anOrderedCollection [ - equalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> expressions: anOrderedCollection [ - expressions := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> inToken [ - ^ inToken -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> inToken: aSmaCCToken [ - inToken := aSmaCCToken -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> initTokens [ - ^ initTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> initTokens: anOrderedCollection [ - initTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftCondionalOperatorNode >> initialize [ - super initialize. - questionMarkTokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - keyExpressions := OrderedCollection new: 2. - valueExpressions := OrderedCollection new: 2. - selfTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - initTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - letTokens := OrderedCollection new: 2. - _Tokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - equalTokens := OrderedCollection new: 2. - varTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - statements := OrderedCollection new: 2. - dynamicTypeTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> keyExpressions [ - ^ keyExpressions -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> keyExpressions: anOrderedCollection [ - keyExpressions := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> letTokens [ - ^ letTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> letTokens: anOrderedCollection [ - letTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> otherVariables [ - ^ #(#trueExpression #expressions #keyExpressions #valueExpressions) -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> selfTokens [ - ^ selfTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> selfTokens: anOrderedCollection [ - selfTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> statements [ - ^ statements -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> tokenVariables [ - ^ #(#__FILE__Token #__LINE__Token #__COLUMN__Token #__FUNCTION__Token #inToken #weakToken #unownedToken #unownedLeftParensafeRightParenToken #unownedLeftParenunsafeRightParenToken #andToken) -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> trueExpression [ - ^ trueExpression -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> trueExpression: anObject [ - trueExpression := anObject -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> unownedLeftParensafeRightParenToken [ - ^ unownedLeftParensafeRightParenToken -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> unownedLeftParensafeRightParenToken: aSmaCCToken [ - unownedLeftParensafeRightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> unownedLeftParenunsafeRightParenToken [ - ^ unownedLeftParenunsafeRightParenToken -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> unownedLeftParenunsafeRightParenToken: aSmaCCToken [ - unownedLeftParenunsafeRightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> unownedToken [ - ^ unownedToken -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> unownedToken: aSmaCCToken [ - unownedToken := aSmaCCToken -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> valueExpressions [ - ^ valueExpressions -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> valueExpressions: anOrderedCollection [ - valueExpressions := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> varTokens [ - ^ varTokens -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> varTokens: anOrderedCollection [ - varTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> weakToken [ - ^ weakToken -] - -{ #category : #generated } -SwiftCondionalOperatorNode >> weakToken: aSmaCCToken [ - weakToken := aSmaCCToken -] diff --git a/src/SmaCC_Swift/SwiftConstantDeclarationNode.class.st b/src/SmaCC_Swift/SwiftConstantDeclarationNode.class.st deleted file mode 100644 index 69486f859..000000000 --- a/src/SmaCC_Swift/SwiftConstantDeclarationNode.class.st +++ /dev/null @@ -1,321 +0,0 @@ -Class { - #name : #SwiftConstantDeclarationNode, - #superclass : #SwiftParseNode, - #instVars : [ - '_Tokens', - 'identifierTokens', - 'leftParenTokens', - 'rightParenTokens', - 'leftBracketTokens', - 'rightBracketTokens', - 'leftBraceTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens', - 'classTokens', - 'mutatingTokens', - 'nonmutatingTokens', - 'overrideTokens', - 'staticTokens', - 'unownedTokens', - 'unownedLeftParensafeRightParenTokens', - 'unownedLeftParenunsafeRightParenTokens', - 'weakTokens', - 'letToken', - 'inializers', - 'commaTokens' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftConstantDeclarationNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitConstantDeclaration: self -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> classTokens [ - ^ classTokens -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> classTokens: anOrderedCollection [ - classTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> compositeNodeVariables [ - ^ #(#inializers) -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> compositeTokenVariables [ - ^ #(#_Tokens #identifierTokens #leftParenTokens #rightParenTokens #leftBracketTokens #rightBracketTokens #leftBraceTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens #classTokens #mutatingTokens #nonmutatingTokens #overrideTokens #staticTokens #unownedTokens #unownedLeftParensafeRightParenTokens #unownedLeftParenunsafeRightParenTokens #weakTokens #commaTokens) -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> inializers [ - ^ inializers -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> inializers: anOrderedCollection [ - self setParents: self inializers to: nil. - inializers := anOrderedCollection. - self setParents: self inializers to: self -] - -{ #category : #'generated-initialize-release' } -SwiftConstantDeclarationNode >> initialize [ - super initialize. - _Tokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - classTokens := OrderedCollection new: 2. - mutatingTokens := OrderedCollection new: 2. - nonmutatingTokens := OrderedCollection new: 2. - overrideTokens := OrderedCollection new: 2. - staticTokens := OrderedCollection new: 2. - unownedTokens := OrderedCollection new: 2. - unownedLeftParensafeRightParenTokens := OrderedCollection new: 2. - unownedLeftParenunsafeRightParenTokens := OrderedCollection new: 2. - weakTokens := OrderedCollection new: 2. - inializers := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> letToken [ - ^ letToken -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> letToken: aSmaCCToken [ - letToken := aSmaCCToken -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> mutatingTokens [ - ^ mutatingTokens -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> mutatingTokens: anOrderedCollection [ - mutatingTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> nonmutatingTokens [ - ^ nonmutatingTokens -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> nonmutatingTokens: anOrderedCollection [ - nonmutatingTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> overrideTokens [ - ^ overrideTokens -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> overrideTokens: anOrderedCollection [ - overrideTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> staticTokens [ - ^ staticTokens -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> staticTokens: anOrderedCollection [ - staticTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> tokenVariables [ - ^ #(#letToken) -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> unownedLeftParensafeRightParenTokens [ - ^ unownedLeftParensafeRightParenTokens -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> unownedLeftParensafeRightParenTokens: anOrderedCollection [ - unownedLeftParensafeRightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> unownedLeftParenunsafeRightParenTokens [ - ^ unownedLeftParenunsafeRightParenTokens -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> unownedLeftParenunsafeRightParenTokens: anOrderedCollection [ - unownedLeftParenunsafeRightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> unownedTokens [ - ^ unownedTokens -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> unownedTokens: anOrderedCollection [ - unownedTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> weakTokens [ - ^ weakTokens -] - -{ #category : #generated } -SwiftConstantDeclarationNode >> weakTokens: anOrderedCollection [ - weakTokens := anOrderedCollection -] diff --git a/src/SmaCC_Swift/SwiftContinueStatementNode.class.st b/src/SmaCC_Swift/SwiftContinueStatementNode.class.st deleted file mode 100644 index 241c65a98..000000000 --- a/src/SmaCC_Swift/SwiftContinueStatementNode.class.st +++ /dev/null @@ -1,39 +0,0 @@ -Class { - #name : #SwiftContinueStatementNode, - #superclass : #SwiftControlTransferStatementNode, - #instVars : [ - 'continueToken', - 'name' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftContinueStatementNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitContinueStatement: self -] - -{ #category : #generated } -SwiftContinueStatementNode >> continueToken [ - ^ continueToken -] - -{ #category : #generated } -SwiftContinueStatementNode >> continueToken: aSmaCCToken [ - continueToken := aSmaCCToken -] - -{ #category : #generated } -SwiftContinueStatementNode >> name [ - ^ name -] - -{ #category : #generated } -SwiftContinueStatementNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -SwiftContinueStatementNode >> tokenVariables [ - ^ #(#continueToken #name #semicolonToken) -] diff --git a/src/SmaCC_Swift/SwiftControlTransferStatementNode.class.st b/src/SmaCC_Swift/SwiftControlTransferStatementNode.class.st deleted file mode 100644 index 56d07ba04..000000000 --- a/src/SmaCC_Swift/SwiftControlTransferStatementNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #SwiftControlTransferStatementNode, - #superclass : #SwiftStatementNode, - #instVars : [ - 'semicolonToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftControlTransferStatementNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitControlTransferStatement: self -] - -{ #category : #generated } -SwiftControlTransferStatementNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -SwiftControlTransferStatementNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] - -{ #category : #generated } -SwiftControlTransferStatementNode >> tokenVariables [ - ^ #(#semicolonToken) -] diff --git a/src/SmaCC_Swift/SwiftDeclarationStatementNode.class.st b/src/SmaCC_Swift/SwiftDeclarationStatementNode.class.st deleted file mode 100644 index c4a0492a2..000000000 --- a/src/SmaCC_Swift/SwiftDeclarationStatementNode.class.st +++ /dev/null @@ -1,48 +0,0 @@ -Class { - #name : #SwiftDeclarationStatementNode, - #superclass : #SwiftStatementNode, - #instVars : [ - 'declaration', - 'semicolonToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftDeclarationStatementNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitDeclarationStatement: self -] - -{ #category : #generated } -SwiftDeclarationStatementNode >> declaration [ - ^ declaration -] - -{ #category : #generated } -SwiftDeclarationStatementNode >> declaration: aSwiftParseNode [ - self declaration notNil - ifTrue: [ self declaration parent: nil ]. - declaration := aSwiftParseNode. - self declaration notNil - ifTrue: [ self declaration parent: self ] -] - -{ #category : #generated } -SwiftDeclarationStatementNode >> nodeVariables [ - ^ #(#declaration) -] - -{ #category : #generated } -SwiftDeclarationStatementNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -SwiftDeclarationStatementNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] - -{ #category : #generated } -SwiftDeclarationStatementNode >> tokenVariables [ - ^ #(#semicolonToken) -] diff --git a/src/SmaCC_Swift/SwiftDeinitializerDeclarationNode.class.st b/src/SmaCC_Swift/SwiftDeinitializerDeclarationNode.class.st deleted file mode 100644 index c6377832b..000000000 --- a/src/SmaCC_Swift/SwiftDeinitializerDeclarationNode.class.st +++ /dev/null @@ -1,202 +0,0 @@ -Class { - #name : #SwiftDeinitializerDeclarationNode, - #superclass : #SwiftParseNode, - #instVars : [ - '_Tokens', - 'identifierTokens', - 'leftParenTokens', - 'rightParenTokens', - 'leftBracketTokens', - 'rightBracketTokens', - 'leftBraceTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens', - 'deinitToken', - 'block' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitDeinitializerDeclaration: self -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> block [ - ^ block -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> block: aSwiftBlockNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aSwiftBlockNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> compositeTokenVariables [ - ^ #(#_Tokens #identifierTokens #leftParenTokens #rightParenTokens #leftBracketTokens #rightBracketTokens #leftBraceTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens) -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> deinitToken [ - ^ deinitToken -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> deinitToken: aSmaCCToken [ - deinitToken := aSmaCCToken -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftDeinitializerDeclarationNode >> initialize [ - super initialize. - _Tokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> nodeVariables [ - ^ #(#block) -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDeinitializerDeclarationNode >> tokenVariables [ - ^ #(#deinitToken) -] diff --git a/src/SmaCC_Swift/SwiftDictionaryTypeNode.class.st b/src/SmaCC_Swift/SwiftDictionaryTypeNode.class.st deleted file mode 100644 index 438c1eca8..000000000 --- a/src/SmaCC_Swift/SwiftDictionaryTypeNode.class.st +++ /dev/null @@ -1,310 +0,0 @@ -Class { - #name : #SwiftDictionaryTypeNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'leftBracketTokens', - 'identifierTokens', - 'periodTokens', - 'protocolTokens', - 'lessThanTokens', - 'greaterThanTokens', - 'rightBracketTokens', - 'colonTokens', - 'minusGreaterThanTokens', - 'commaTokens', - 'leftParenTokens', - 'rightParenTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens', - 'inoutTokens', - '_Tokens', - 'leftBraceTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftDictionaryTypeNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitDictionaryType: self -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> compositeTokenVariables [ - ^ #(#leftBracketTokens #rightBracketTokens #colonTokens #minusGreaterThanTokens #periodTokens #leftParenTokens #rightParenTokens #questionMarkTokens #bangTokens #protocolTokens #lessThanTokens #greaterThanTokens #typeTokens #identifierTokens #commaTokens #periodPeriodPeriodTokens #_Tokens #inoutTokens #leftBraceTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens) -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftDictionaryTypeNode >> initialize [ - super initialize. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - _Tokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftDictionaryTypeNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] diff --git a/src/SmaCC_Swift/SwiftDoWhileStatementNode.class.st b/src/SmaCC_Swift/SwiftDoWhileStatementNode.class.st deleted file mode 100644 index 3266f7bab..000000000 --- a/src/SmaCC_Swift/SwiftDoWhileStatementNode.class.st +++ /dev/null @@ -1,613 +0,0 @@ -Class { - #name : #SwiftDoWhileStatementNode, - #superclass : #SwiftLoopStatementNode, - #instVars : [ - 'doToken', - 'block', - 'whileToken', - 'identifierTokens', - 'lessThanTokens', - 'commaTokens', - 'greaterThanTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'leftBracketTokens', - 'expressions', - 'rightBracketTokens', - 'keyExpressions', - 'colonTokens', - 'valueExpressions', - '__FILE__Token', - '__LINE__Token', - '__COLUMN__Token', - '__FUNCTION__Token', - 'selfTokens', - 'periodTokens', - 'initTokens', - 'leftBraceTokens', - 'leftParenTokens', - 'rightParenTokens', - 'inoutTokens', - 'letTokens', - '_Tokens', - 'protocolTokens', - 'minusGreaterThanTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens', - 'equalTokens', - 'varTokens', - 'rightBraceTokens', - 'operatorTokens', - 'inToken', - 'weakToken', - 'unownedToken', - 'unownedLeftParensafeRightParenToken', - 'unownedLeftParenunsafeRightParenToken', - 'statements', - 'dynamicTypeTokens', - 'andToken', - 'operators' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftDoWhileStatementNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> __COLUMN__Token [ - ^ __COLUMN__Token -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> __COLUMN__Token: aSmaCCToken [ - __COLUMN__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> __FILE__Token [ - ^ __FILE__Token -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> __FILE__Token: aSmaCCToken [ - __FILE__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> __FUNCTION__Token [ - ^ __FUNCTION__Token -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> __FUNCTION__Token: aSmaCCToken [ - __FUNCTION__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> __LINE__Token [ - ^ __LINE__Token -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> __LINE__Token: aSmaCCToken [ - __LINE__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitDoWhileStatement: self -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> andToken [ - ^ andToken -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> andToken: aSmaCCToken [ - andToken := aSmaCCToken -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> block [ - ^ block -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> block: aSwiftBlockNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aSwiftBlockNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> compositeNodeVariables [ - ^ #(#statements #operators) -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> compositeTokenVariables [ - ^ #(#identifierTokens #lessThanTokens #commaTokens #greaterThanTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #leftBracketTokens #rightBracketTokens #colonTokens #selfTokens #periodTokens #initTokens #leftBraceTokens #leftParenTokens #rightParenTokens #inoutTokens #letTokens #_Tokens #minusGreaterThanTokens #questionMarkTokens #bangTokens #protocolTokens #typeTokens #periodPeriodPeriodTokens #equalTokens #varTokens #rightBraceTokens #operatorTokens #dynamicTypeTokens) -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> doToken [ - ^ doToken -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> doToken: aSmaCCToken [ - doToken := aSmaCCToken -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> dynamicTypeTokens [ - ^ dynamicTypeTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> dynamicTypeTokens: anOrderedCollection [ - dynamicTypeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> equalTokens [ - ^ equalTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> equalTokens: anOrderedCollection [ - equalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> expressions: anOrderedCollection [ - expressions := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> inToken [ - ^ inToken -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> inToken: aSmaCCToken [ - inToken := aSmaCCToken -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> initTokens [ - ^ initTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> initTokens: anOrderedCollection [ - initTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftDoWhileStatementNode >> initialize [ - super initialize. - identifierTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - keyExpressions := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - valueExpressions := OrderedCollection new: 2. - selfTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - initTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - letTokens := OrderedCollection new: 2. - _Tokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - equalTokens := OrderedCollection new: 2. - varTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - statements := OrderedCollection new: 2. - dynamicTypeTokens := OrderedCollection new: 2. - operators := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> keyExpressions [ - ^ keyExpressions -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> keyExpressions: anOrderedCollection [ - keyExpressions := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> letTokens [ - ^ letTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> letTokens: anOrderedCollection [ - letTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> nodeVariables [ - ^ #(#block) -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> operators [ - ^ operators -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> operators: anOrderedCollection [ - self setParents: self operators to: nil. - operators := anOrderedCollection. - self setParents: self operators to: self -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> otherVariables [ - ^ #(#expressions #keyExpressions #valueExpressions) -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> selfTokens [ - ^ selfTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> selfTokens: anOrderedCollection [ - selfTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> statements [ - ^ statements -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> tokenVariables [ - ^ #(#doToken #whileToken #__FILE__Token #__LINE__Token #__COLUMN__Token #__FUNCTION__Token #inToken #weakToken #unownedToken #unownedLeftParensafeRightParenToken #unownedLeftParenunsafeRightParenToken #andToken #semicolonToken) -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> unownedLeftParensafeRightParenToken [ - ^ unownedLeftParensafeRightParenToken -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> unownedLeftParensafeRightParenToken: aSmaCCToken [ - unownedLeftParensafeRightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> unownedLeftParenunsafeRightParenToken [ - ^ unownedLeftParenunsafeRightParenToken -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> unownedLeftParenunsafeRightParenToken: aSmaCCToken [ - unownedLeftParenunsafeRightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> unownedToken [ - ^ unownedToken -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> unownedToken: aSmaCCToken [ - unownedToken := aSmaCCToken -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> valueExpressions [ - ^ valueExpressions -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> valueExpressions: anOrderedCollection [ - valueExpressions := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> varTokens [ - ^ varTokens -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> varTokens: anOrderedCollection [ - varTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> weakToken [ - ^ weakToken -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> weakToken: aSmaCCToken [ - weakToken := aSmaCCToken -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> whileToken [ - ^ whileToken -] - -{ #category : #generated } -SwiftDoWhileStatementNode >> whileToken: aSmaCCToken [ - whileToken := aSmaCCToken -] diff --git a/src/SmaCC_Swift/SwiftDynamicTypeExpressionNode.class.st b/src/SmaCC_Swift/SwiftDynamicTypeExpressionNode.class.st deleted file mode 100644 index f930ee81f..000000000 --- a/src/SmaCC_Swift/SwiftDynamicTypeExpressionNode.class.st +++ /dev/null @@ -1,546 +0,0 @@ -Class { - #name : #SwiftDynamicTypeExpressionNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'identifierTokens', - 'lessThanTokens', - 'commaTokens', - 'greaterThanTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'leftBracketTokens', - 'expressions', - 'rightBracketTokens', - 'keyExpressions', - 'colonTokens', - 'valueExpressions', - '__FILE__Token', - '__LINE__Token', - '__COLUMN__Token', - '__FUNCTION__Token', - 'selfTokens', - 'periodTokens', - 'initTokens', - 'leftBraceTokens', - 'leftParenTokens', - 'rightParenTokens', - 'inoutTokens', - 'letTokens', - '_Tokens', - 'protocolTokens', - 'minusGreaterThanTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens', - 'equalTokens', - 'varTokens', - 'rightBraceTokens', - 'operatorTokens', - 'inToken', - 'weakToken', - 'unownedToken', - 'unownedLeftParensafeRightParenToken', - 'unownedLeftParenunsafeRightParenToken', - 'statements', - 'dynamicTypeTokens' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> __COLUMN__Token [ - ^ __COLUMN__Token -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> __COLUMN__Token: aSmaCCToken [ - __COLUMN__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> __FILE__Token [ - ^ __FILE__Token -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> __FILE__Token: aSmaCCToken [ - __FILE__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> __FUNCTION__Token [ - ^ __FUNCTION__Token -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> __FUNCTION__Token: aSmaCCToken [ - __FUNCTION__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> __LINE__Token [ - ^ __LINE__Token -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> __LINE__Token: aSmaCCToken [ - __LINE__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitDynamicTypeExpression: self -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> compositeNodeVariables [ - ^ #(#statements) -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> compositeTokenVariables [ - ^ #(#identifierTokens #lessThanTokens #commaTokens #greaterThanTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #leftBracketTokens #rightBracketTokens #colonTokens #selfTokens #periodTokens #initTokens #leftBraceTokens #leftParenTokens #rightParenTokens #inoutTokens #letTokens #_Tokens #minusGreaterThanTokens #questionMarkTokens #bangTokens #protocolTokens #typeTokens #periodPeriodPeriodTokens #equalTokens #varTokens #rightBraceTokens #operatorTokens #dynamicTypeTokens) -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> dynamicTypeTokens [ - ^ dynamicTypeTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> dynamicTypeTokens: anOrderedCollection [ - dynamicTypeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> equalTokens [ - ^ equalTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> equalTokens: anOrderedCollection [ - equalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> expressions: anOrderedCollection [ - expressions := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> inToken [ - ^ inToken -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> inToken: aSmaCCToken [ - inToken := aSmaCCToken -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> initTokens [ - ^ initTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> initTokens: anOrderedCollection [ - initTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftDynamicTypeExpressionNode >> initialize [ - super initialize. - identifierTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - keyExpressions := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - valueExpressions := OrderedCollection new: 2. - selfTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - initTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - letTokens := OrderedCollection new: 2. - _Tokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - equalTokens := OrderedCollection new: 2. - varTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - statements := OrderedCollection new: 2. - dynamicTypeTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> keyExpressions [ - ^ keyExpressions -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> keyExpressions: anOrderedCollection [ - keyExpressions := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> letTokens [ - ^ letTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> letTokens: anOrderedCollection [ - letTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> otherVariables [ - ^ #(#expressions #keyExpressions #valueExpressions) -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> selfTokens [ - ^ selfTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> selfTokens: anOrderedCollection [ - selfTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> statements [ - ^ statements -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> tokenVariables [ - ^ #(#__FILE__Token #__LINE__Token #__COLUMN__Token #__FUNCTION__Token #inToken #weakToken #unownedToken #unownedLeftParensafeRightParenToken #unownedLeftParenunsafeRightParenToken) -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> unownedLeftParensafeRightParenToken [ - ^ unownedLeftParensafeRightParenToken -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> unownedLeftParensafeRightParenToken: aSmaCCToken [ - unownedLeftParensafeRightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> unownedLeftParenunsafeRightParenToken [ - ^ unownedLeftParenunsafeRightParenToken -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> unownedLeftParenunsafeRightParenToken: aSmaCCToken [ - unownedLeftParenunsafeRightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> unownedToken [ - ^ unownedToken -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> unownedToken: aSmaCCToken [ - unownedToken := aSmaCCToken -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> valueExpressions [ - ^ valueExpressions -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> valueExpressions: anOrderedCollection [ - valueExpressions := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> varTokens [ - ^ varTokens -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> varTokens: anOrderedCollection [ - varTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> weakToken [ - ^ weakToken -] - -{ #category : #generated } -SwiftDynamicTypeExpressionNode >> weakToken: aSmaCCToken [ - weakToken := aSmaCCToken -] diff --git a/src/SmaCC_Swift/SwiftEnumDeclarationNode.class.st b/src/SmaCC_Swift/SwiftEnumDeclarationNode.class.st deleted file mode 100644 index 2f1d015d1..000000000 --- a/src/SmaCC_Swift/SwiftEnumDeclarationNode.class.st +++ /dev/null @@ -1,722 +0,0 @@ -Class { - #name : #SwiftEnumDeclarationNode, - #superclass : #SwiftParseNode, - #instVars : [ - '_Tokens', - 'identifierTokens', - 'leftParenTokens', - 'rightParenTokens', - 'leftBracketTokens', - 'rightBracketTokens', - 'leftBraceTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens', - 'lessThanTokens', - 'colonTokens', - 'commaTokens', - 'greaterThanTokens', - 'periodTokens', - 'protocolTokens', - 'whereTokens', - 'equalEqualTokens', - 'importTokens', - 'typealiasTokens', - 'structTokens', - 'classTokens', - 'enumTokens', - 'varTokens', - 'funcTokens', - 'mutatingTokens', - 'nonmutatingTokens', - 'overrideTokens', - 'staticTokens', - 'unownedTokens', - 'unownedLeftParensafeRightParenTokens', - 'unownedLeftParenunsafeRightParenTokens', - 'weakTokens', - 'letTokens', - 'inializers', - 'minusGreaterThanTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'blocks', - 'getTokens', - 'setTokens', - 'periodPeriodPeriodTokens', - 'equalTokens', - 'expressions', - 'willSetTokens', - 'didSetTokens', - 'deinitTokens', - 'extensionTokens', - 'caseTokens', - 'declarations', - 'convenienceTokens', - 'initTokens', - 'inoutTokens', - 'subscriptTokens' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftEnumDeclarationNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitEnumDeclaration: self -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> blocks [ - ^ blocks -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> blocks: anOrderedCollection [ - self setParents: self blocks to: nil. - blocks := anOrderedCollection. - self setParents: self blocks to: self -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> caseTokens [ - ^ caseTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> caseTokens: anOrderedCollection [ - caseTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> classTokens [ - ^ classTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> classTokens: anOrderedCollection [ - classTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> compositeNodeVariables [ - ^ #(#inializers #blocks #declarations) -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> compositeTokenVariables [ - ^ #(#_Tokens #identifierTokens #leftParenTokens #rightParenTokens #leftBracketTokens #rightBracketTokens #leftBraceTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens #lessThanTokens #colonTokens #commaTokens #greaterThanTokens #periodTokens #protocolTokens #whereTokens #equalEqualTokens #importTokens #typealiasTokens #structTokens #classTokens #enumTokens #varTokens #funcTokens #mutatingTokens #nonmutatingTokens #overrideTokens #staticTokens #unownedTokens #unownedLeftParensafeRightParenTokens #unownedLeftParenunsafeRightParenTokens #weakTokens #letTokens #minusGreaterThanTokens #questionMarkTokens #bangTokens #typeTokens #getTokens #setTokens #equalTokens #willSetTokens #didSetTokens #periodPeriodPeriodTokens #convenienceTokens #initTokens #inoutTokens #deinitTokens #extensionTokens #subscriptTokens #caseTokens) -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> convenienceTokens [ - ^ convenienceTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> convenienceTokens: anOrderedCollection [ - convenienceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> declarations [ - ^ declarations -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> declarations: anOrderedCollection [ - self setParents: self declarations to: nil. - declarations := anOrderedCollection. - self setParents: self declarations to: self -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> deinitTokens [ - ^ deinitTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> deinitTokens: anOrderedCollection [ - deinitTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> didSetTokens [ - ^ didSetTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> didSetTokens: anOrderedCollection [ - didSetTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> enumTokens [ - ^ enumTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> enumTokens: anOrderedCollection [ - enumTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> equalEqualTokens [ - ^ equalEqualTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> equalEqualTokens: anOrderedCollection [ - equalEqualTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> equalTokens [ - ^ equalTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> equalTokens: anOrderedCollection [ - equalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> expressions: anOrderedCollection [ - expressions := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> extensionTokens [ - ^ extensionTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> extensionTokens: anOrderedCollection [ - extensionTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> funcTokens [ - ^ funcTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> funcTokens: anOrderedCollection [ - funcTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> getTokens [ - ^ getTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> getTokens: anOrderedCollection [ - getTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> importTokens [ - ^ importTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> importTokens: anOrderedCollection [ - importTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> inializers [ - ^ inializers -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> inializers: anOrderedCollection [ - self setParents: self inializers to: nil. - inializers := anOrderedCollection. - self setParents: self inializers to: self -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> initTokens [ - ^ initTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> initTokens: anOrderedCollection [ - initTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftEnumDeclarationNode >> initialize [ - super initialize. - _Tokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - whereTokens := OrderedCollection new: 2. - equalEqualTokens := OrderedCollection new: 2. - importTokens := OrderedCollection new: 2. - typealiasTokens := OrderedCollection new: 2. - structTokens := OrderedCollection new: 2. - classTokens := OrderedCollection new: 2. - enumTokens := OrderedCollection new: 2. - varTokens := OrderedCollection new: 2. - funcTokens := OrderedCollection new: 2. - mutatingTokens := OrderedCollection new: 2. - nonmutatingTokens := OrderedCollection new: 2. - overrideTokens := OrderedCollection new: 2. - staticTokens := OrderedCollection new: 2. - unownedTokens := OrderedCollection new: 2. - unownedLeftParensafeRightParenTokens := OrderedCollection new: 2. - unownedLeftParenunsafeRightParenTokens := OrderedCollection new: 2. - weakTokens := OrderedCollection new: 2. - letTokens := OrderedCollection new: 2. - inializers := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - blocks := OrderedCollection new: 2. - getTokens := OrderedCollection new: 2. - setTokens := OrderedCollection new: 2. - equalTokens := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. - willSetTokens := OrderedCollection new: 2. - didSetTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - declarations := OrderedCollection new: 2. - convenienceTokens := OrderedCollection new: 2. - initTokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - deinitTokens := OrderedCollection new: 2. - extensionTokens := OrderedCollection new: 2. - subscriptTokens := OrderedCollection new: 2. - caseTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> letTokens [ - ^ letTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> letTokens: anOrderedCollection [ - letTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> mutatingTokens [ - ^ mutatingTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> mutatingTokens: anOrderedCollection [ - mutatingTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> nonmutatingTokens [ - ^ nonmutatingTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> nonmutatingTokens: anOrderedCollection [ - nonmutatingTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> otherVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> overrideTokens [ - ^ overrideTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> overrideTokens: anOrderedCollection [ - overrideTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> setTokens [ - ^ setTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> setTokens: anOrderedCollection [ - setTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> staticTokens [ - ^ staticTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> staticTokens: anOrderedCollection [ - staticTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> structTokens [ - ^ structTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> structTokens: anOrderedCollection [ - structTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> subscriptTokens [ - ^ subscriptTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> subscriptTokens: anOrderedCollection [ - subscriptTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> typealiasTokens [ - ^ typealiasTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> typealiasTokens: anOrderedCollection [ - typealiasTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> unownedLeftParensafeRightParenTokens [ - ^ unownedLeftParensafeRightParenTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> unownedLeftParensafeRightParenTokens: anOrderedCollection [ - unownedLeftParensafeRightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> unownedLeftParenunsafeRightParenTokens [ - ^ unownedLeftParenunsafeRightParenTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> unownedLeftParenunsafeRightParenTokens: anOrderedCollection [ - unownedLeftParenunsafeRightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> unownedTokens [ - ^ unownedTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> unownedTokens: anOrderedCollection [ - unownedTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> varTokens [ - ^ varTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> varTokens: anOrderedCollection [ - varTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> weakTokens [ - ^ weakTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> weakTokens: anOrderedCollection [ - weakTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> whereTokens [ - ^ whereTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> whereTokens: anOrderedCollection [ - whereTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> willSetTokens [ - ^ willSetTokens -] - -{ #category : #generated } -SwiftEnumDeclarationNode >> willSetTokens: anOrderedCollection [ - willSetTokens := anOrderedCollection -] diff --git a/src/SmaCC_Swift/SwiftExplicitMemberExpressionNode.class.st b/src/SmaCC_Swift/SwiftExplicitMemberExpressionNode.class.st deleted file mode 100644 index 530c102f4..000000000 --- a/src/SmaCC_Swift/SwiftExplicitMemberExpressionNode.class.st +++ /dev/null @@ -1,546 +0,0 @@ -Class { - #name : #SwiftExplicitMemberExpressionNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'identifierTokens', - 'lessThanTokens', - 'commaTokens', - 'greaterThanTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'leftBracketTokens', - 'expressions', - 'rightBracketTokens', - 'keyExpressions', - 'colonTokens', - 'valueExpressions', - '__FILE__Token', - '__LINE__Token', - '__COLUMN__Token', - '__FUNCTION__Token', - 'selfTokens', - 'periodTokens', - 'initTokens', - 'leftBraceTokens', - 'leftParenTokens', - 'rightParenTokens', - 'inoutTokens', - 'letTokens', - '_Tokens', - 'protocolTokens', - 'minusGreaterThanTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens', - 'equalTokens', - 'varTokens', - 'rightBraceTokens', - 'operatorTokens', - 'inToken', - 'weakToken', - 'unownedToken', - 'unownedLeftParensafeRightParenToken', - 'unownedLeftParenunsafeRightParenToken', - 'statements', - 'dynamicTypeTokens' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> __COLUMN__Token [ - ^ __COLUMN__Token -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> __COLUMN__Token: aSmaCCToken [ - __COLUMN__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> __FILE__Token [ - ^ __FILE__Token -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> __FILE__Token: aSmaCCToken [ - __FILE__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> __FUNCTION__Token [ - ^ __FUNCTION__Token -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> __FUNCTION__Token: aSmaCCToken [ - __FUNCTION__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> __LINE__Token [ - ^ __LINE__Token -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> __LINE__Token: aSmaCCToken [ - __LINE__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitExplicitMemberExpression: self -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> compositeNodeVariables [ - ^ #(#statements) -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> compositeTokenVariables [ - ^ #(#identifierTokens #lessThanTokens #commaTokens #greaterThanTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #leftBracketTokens #rightBracketTokens #colonTokens #selfTokens #periodTokens #initTokens #leftBraceTokens #leftParenTokens #rightParenTokens #inoutTokens #letTokens #_Tokens #minusGreaterThanTokens #questionMarkTokens #bangTokens #protocolTokens #typeTokens #periodPeriodPeriodTokens #equalTokens #varTokens #rightBraceTokens #operatorTokens #dynamicTypeTokens) -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> dynamicTypeTokens [ - ^ dynamicTypeTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> dynamicTypeTokens: anOrderedCollection [ - dynamicTypeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> equalTokens [ - ^ equalTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> equalTokens: anOrderedCollection [ - equalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> expressions: anOrderedCollection [ - expressions := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> inToken [ - ^ inToken -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> inToken: aSmaCCToken [ - inToken := aSmaCCToken -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> initTokens [ - ^ initTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> initTokens: anOrderedCollection [ - initTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftExplicitMemberExpressionNode >> initialize [ - super initialize. - identifierTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - keyExpressions := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - valueExpressions := OrderedCollection new: 2. - selfTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - initTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - letTokens := OrderedCollection new: 2. - _Tokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - equalTokens := OrderedCollection new: 2. - varTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - statements := OrderedCollection new: 2. - dynamicTypeTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> keyExpressions [ - ^ keyExpressions -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> keyExpressions: anOrderedCollection [ - keyExpressions := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> letTokens [ - ^ letTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> letTokens: anOrderedCollection [ - letTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> otherVariables [ - ^ #(#expressions #keyExpressions #valueExpressions) -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> selfTokens [ - ^ selfTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> selfTokens: anOrderedCollection [ - selfTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> statements [ - ^ statements -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> tokenVariables [ - ^ #(#__FILE__Token #__LINE__Token #__COLUMN__Token #__FUNCTION__Token #inToken #weakToken #unownedToken #unownedLeftParensafeRightParenToken #unownedLeftParenunsafeRightParenToken) -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> unownedLeftParensafeRightParenToken [ - ^ unownedLeftParensafeRightParenToken -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> unownedLeftParensafeRightParenToken: aSmaCCToken [ - unownedLeftParensafeRightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> unownedLeftParenunsafeRightParenToken [ - ^ unownedLeftParenunsafeRightParenToken -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> unownedLeftParenunsafeRightParenToken: aSmaCCToken [ - unownedLeftParenunsafeRightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> unownedToken [ - ^ unownedToken -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> unownedToken: aSmaCCToken [ - unownedToken := aSmaCCToken -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> valueExpressions [ - ^ valueExpressions -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> valueExpressions: anOrderedCollection [ - valueExpressions := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> varTokens [ - ^ varTokens -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> varTokens: anOrderedCollection [ - varTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> weakToken [ - ^ weakToken -] - -{ #category : #generated } -SwiftExplicitMemberExpressionNode >> weakToken: aSmaCCToken [ - weakToken := aSmaCCToken -] diff --git a/src/SmaCC_Swift/SwiftExpressionStatementNode.class.st b/src/SmaCC_Swift/SwiftExpressionStatementNode.class.st deleted file mode 100644 index 76bf284aa..000000000 --- a/src/SmaCC_Swift/SwiftExpressionStatementNode.class.st +++ /dev/null @@ -1,44 +0,0 @@ -Class { - #name : #SwiftExpressionStatementNode, - #superclass : #SwiftStatementNode, - #instVars : [ - 'expression', - 'semicolonToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftExpressionStatementNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitExpressionStatement: self -] - -{ #category : #generated } -SwiftExpressionStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -SwiftExpressionStatementNode >> expression: anObject [ - expression := anObject -] - -{ #category : #generated } -SwiftExpressionStatementNode >> otherVariables [ - ^ #(#expression) -] - -{ #category : #generated } -SwiftExpressionStatementNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -SwiftExpressionStatementNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] - -{ #category : #generated } -SwiftExpressionStatementNode >> tokenVariables [ - ^ #(#semicolonToken) -] diff --git a/src/SmaCC_Swift/SwiftExtensionDeclarationNode.class.st b/src/SmaCC_Swift/SwiftExtensionDeclarationNode.class.st deleted file mode 100644 index 6507cad97..000000000 --- a/src/SmaCC_Swift/SwiftExtensionDeclarationNode.class.st +++ /dev/null @@ -1,150 +0,0 @@ -Class { - #name : #SwiftExtensionDeclarationNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'extensionToken', - 'identifierTokens', - 'lessThanTokens', - 'commaTokens', - 'greaterThanTokens', - 'periodTokens', - 'colonToken', - 'leftBraceToken', - 'declarations', - 'rightBraceToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftExtensionDeclarationNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitExtensionDeclaration: self -] - -{ #category : #generated } -SwiftExtensionDeclarationNode >> colonToken [ - ^ colonToken -] - -{ #category : #generated } -SwiftExtensionDeclarationNode >> colonToken: aSmaCCToken [ - colonToken := aSmaCCToken -] - -{ #category : #generated } -SwiftExtensionDeclarationNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftExtensionDeclarationNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExtensionDeclarationNode >> compositeNodeVariables [ - ^ #(#declarations) -] - -{ #category : #generated } -SwiftExtensionDeclarationNode >> compositeTokenVariables [ - ^ #(#identifierTokens #lessThanTokens #commaTokens #greaterThanTokens #periodTokens) -] - -{ #category : #generated } -SwiftExtensionDeclarationNode >> declarations [ - ^ declarations -] - -{ #category : #generated } -SwiftExtensionDeclarationNode >> declarations: anOrderedCollection [ - self setParents: self declarations to: nil. - declarations := anOrderedCollection. - self setParents: self declarations to: self -] - -{ #category : #generated } -SwiftExtensionDeclarationNode >> extensionToken [ - ^ extensionToken -] - -{ #category : #generated } -SwiftExtensionDeclarationNode >> extensionToken: aSmaCCToken [ - extensionToken := aSmaCCToken -] - -{ #category : #generated } -SwiftExtensionDeclarationNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftExtensionDeclarationNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExtensionDeclarationNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftExtensionDeclarationNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftExtensionDeclarationNode >> initialize [ - super initialize. - identifierTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - declarations := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftExtensionDeclarationNode >> leftBraceToken [ - ^ leftBraceToken -] - -{ #category : #generated } -SwiftExtensionDeclarationNode >> leftBraceToken: aSmaCCToken [ - leftBraceToken := aSmaCCToken -] - -{ #category : #generated } -SwiftExtensionDeclarationNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftExtensionDeclarationNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExtensionDeclarationNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftExtensionDeclarationNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftExtensionDeclarationNode >> rightBraceToken [ - ^ rightBraceToken -] - -{ #category : #generated } -SwiftExtensionDeclarationNode >> rightBraceToken: aSmaCCToken [ - rightBraceToken := aSmaCCToken -] - -{ #category : #generated } -SwiftExtensionDeclarationNode >> tokenVariables [ - ^ #(#extensionToken #colonToken #leftBraceToken #rightBraceToken) -] diff --git a/src/SmaCC_Swift/SwiftFallThroughStatementNode.class.st b/src/SmaCC_Swift/SwiftFallThroughStatementNode.class.st deleted file mode 100644 index 7e3f5d360..000000000 --- a/src/SmaCC_Swift/SwiftFallThroughStatementNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #SwiftFallThroughStatementNode, - #superclass : #SwiftControlTransferStatementNode, - #instVars : [ - 'fallthroughToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftFallThroughStatementNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitFallThroughStatement: self -] - -{ #category : #generated } -SwiftFallThroughStatementNode >> fallthroughToken [ - ^ fallthroughToken -] - -{ #category : #generated } -SwiftFallThroughStatementNode >> fallthroughToken: aSmaCCToken [ - fallthroughToken := aSmaCCToken -] - -{ #category : #generated } -SwiftFallThroughStatementNode >> tokenVariables [ - ^ #(#fallthroughToken #semicolonToken) -] diff --git a/src/SmaCC_Swift/SwiftFileNode.class.st b/src/SmaCC_Swift/SwiftFileNode.class.st deleted file mode 100644 index 0841f014f..000000000 --- a/src/SmaCC_Swift/SwiftFileNode.class.st +++ /dev/null @@ -1,36 +0,0 @@ -Class { - #name : #SwiftFileNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'statements' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftFileNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitFile: self -] - -{ #category : #generated } -SwiftFileNode >> compositeNodeVariables [ - ^ #(#statements) -] - -{ #category : #'generated-initialize-release' } -SwiftFileNode >> initialize [ - super initialize. - statements := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftFileNode >> statements [ - ^ statements -] - -{ #category : #generated } -SwiftFileNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] diff --git a/src/SmaCC_Swift/SwiftForInStatementNode.class.st b/src/SmaCC_Swift/SwiftForInStatementNode.class.st deleted file mode 100644 index 07ab3b689..000000000 --- a/src/SmaCC_Swift/SwiftForInStatementNode.class.st +++ /dev/null @@ -1,422 +0,0 @@ -Class { - #name : #SwiftForInStatementNode, - #superclass : #SwiftLoopStatementNode, - #instVars : [ - 'forToken', - '_Tokens', - 'colonTokens', - 'identifierTokens', - 'leftParenTokens', - 'rightParenTokens', - 'leftBracketTokens', - 'rightBracketTokens', - 'leftBraceTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens', - 'periodTokens', - 'protocolTokens', - 'lessThanTokens', - 'greaterThanTokens', - 'minusGreaterThanTokens', - 'commaTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens', - 'inoutTokens', - 'varTokens', - 'letTokens', - 'expressions', - 'isTokens', - 'asTokens', - 'inToken', - 'block' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftForInStatementNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftForInStatementNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitForInStatement: self -] - -{ #category : #generated } -SwiftForInStatementNode >> asTokens [ - ^ asTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> asTokens: anOrderedCollection [ - asTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> block [ - ^ block -] - -{ #category : #generated } -SwiftForInStatementNode >> block: aSwiftBlockNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aSwiftBlockNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -SwiftForInStatementNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> compositeTokenVariables [ - ^ #(#_Tokens #colonTokens #identifierTokens #leftParenTokens #rightParenTokens #leftBracketTokens #rightBracketTokens #leftBraceTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens #minusGreaterThanTokens #periodTokens #questionMarkTokens #bangTokens #protocolTokens #lessThanTokens #greaterThanTokens #typeTokens #commaTokens #periodPeriodPeriodTokens #inoutTokens #varTokens #letTokens #isTokens #asTokens) -] - -{ #category : #generated } -SwiftForInStatementNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SwiftForInStatementNode >> expressions: anOrderedCollection [ - expressions := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> forToken [ - ^ forToken -] - -{ #category : #generated } -SwiftForInStatementNode >> forToken: aSmaCCToken [ - forToken := aSmaCCToken -] - -{ #category : #generated } -SwiftForInStatementNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> inToken [ - ^ inToken -] - -{ #category : #generated } -SwiftForInStatementNode >> inToken: aSmaCCToken [ - inToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -SwiftForInStatementNode >> initialize [ - super initialize. - _Tokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - varTokens := OrderedCollection new: 2. - letTokens := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. - isTokens := OrderedCollection new: 2. - asTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftForInStatementNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> isTokens [ - ^ isTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> isTokens: anOrderedCollection [ - isTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> letTokens [ - ^ letTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> letTokens: anOrderedCollection [ - letTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> nodeVariables [ - ^ #(#block) -] - -{ #category : #generated } -SwiftForInStatementNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> otherVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -SwiftForInStatementNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> tokenVariables [ - ^ #(#forToken #inToken #semicolonToken) -] - -{ #category : #generated } -SwiftForInStatementNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForInStatementNode >> varTokens [ - ^ varTokens -] - -{ #category : #generated } -SwiftForInStatementNode >> varTokens: anOrderedCollection [ - varTokens := anOrderedCollection -] diff --git a/src/SmaCC_Swift/SwiftForStatementNode.class.st b/src/SmaCC_Swift/SwiftForStatementNode.class.st deleted file mode 100644 index 5e3e93cae..000000000 --- a/src/SmaCC_Swift/SwiftForStatementNode.class.st +++ /dev/null @@ -1,131 +0,0 @@ -Class { - #name : #SwiftForStatementNode, - #superclass : #SwiftLoopStatementNode, - #instVars : [ - 'forToken', - 'expressions', - 'commaTokens', - 'testExpression', - 'incrementExpression', - 'block', - 'leftParenToken', - 'rightParenToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftForStatementNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitForStatement: self -] - -{ #category : #generated } -SwiftForStatementNode >> block [ - ^ block -] - -{ #category : #generated } -SwiftForStatementNode >> block: aSwiftBlockNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aSwiftBlockNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -SwiftForStatementNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftForStatementNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftForStatementNode >> compositeTokenVariables [ - ^ #(#commaTokens) -] - -{ #category : #generated } -SwiftForStatementNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SwiftForStatementNode >> expressions: anOrderedCollection [ - expressions := anOrderedCollection -] - -{ #category : #generated } -SwiftForStatementNode >> forToken [ - ^ forToken -] - -{ #category : #generated } -SwiftForStatementNode >> forToken: aSmaCCToken [ - forToken := aSmaCCToken -] - -{ #category : #generated } -SwiftForStatementNode >> incrementExpression [ - ^ incrementExpression -] - -{ #category : #generated } -SwiftForStatementNode >> incrementExpression: anObject [ - incrementExpression := anObject -] - -{ #category : #'generated-initialize-release' } -SwiftForStatementNode >> initialize [ - super initialize. - expressions := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftForStatementNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -SwiftForStatementNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftForStatementNode >> nodeVariables [ - ^ #(#block) -] - -{ #category : #generated } -SwiftForStatementNode >> otherVariables [ - ^ #(#expressions #testExpression #incrementExpression) -] - -{ #category : #generated } -SwiftForStatementNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -SwiftForStatementNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftForStatementNode >> testExpression [ - ^ testExpression -] - -{ #category : #generated } -SwiftForStatementNode >> testExpression: anObject [ - testExpression := anObject -] - -{ #category : #generated } -SwiftForStatementNode >> tokenVariables [ - ^ #(#forToken #leftParenToken #rightParenToken #semicolonToken) -] diff --git a/src/SmaCC_Swift/SwiftForcedValueExpressionNode.class.st b/src/SmaCC_Swift/SwiftForcedValueExpressionNode.class.st deleted file mode 100644 index 7e5f36d38..000000000 --- a/src/SmaCC_Swift/SwiftForcedValueExpressionNode.class.st +++ /dev/null @@ -1,44 +0,0 @@ -Class { - #name : #SwiftForcedValueExpressionNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'expression', - 'bangToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftForcedValueExpressionNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitForcedValueExpression: self -] - -{ #category : #generated } -SwiftForcedValueExpressionNode >> bangToken [ - ^ bangToken -] - -{ #category : #generated } -SwiftForcedValueExpressionNode >> bangToken: aSmaCCToken [ - bangToken := aSmaCCToken -] - -{ #category : #generated } -SwiftForcedValueExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -SwiftForcedValueExpressionNode >> expression: anOrderedCollection [ - expression := anOrderedCollection -] - -{ #category : #generated } -SwiftForcedValueExpressionNode >> otherVariables [ - ^ #(#expression) -] - -{ #category : #generated } -SwiftForcedValueExpressionNode >> tokenVariables [ - ^ #(#bangToken) -] diff --git a/src/SmaCC_Swift/SwiftFunctionCallExpressionNode.class.st b/src/SmaCC_Swift/SwiftFunctionCallExpressionNode.class.st deleted file mode 100644 index 39051dccf..000000000 --- a/src/SmaCC_Swift/SwiftFunctionCallExpressionNode.class.st +++ /dev/null @@ -1,442 +0,0 @@ -Class { - #name : #SwiftFunctionCallExpressionNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'expressions', - 'leftParenTokens', - 'identifierTokens', - 'colonTokens', - 'commaTokens', - 'rightParenTokens', - 'leftBraceTokens', - 'inoutTokens', - 'letTokens', - '_Tokens', - 'leftBracketTokens', - 'periodTokens', - 'protocolTokens', - 'lessThanTokens', - 'greaterThanTokens', - 'rightBracketTokens', - 'minusGreaterThanTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens', - 'equalTokens', - 'varTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens', - 'inToken', - 'weakToken', - 'unownedToken', - 'unownedLeftParensafeRightParenToken', - 'unownedLeftParenunsafeRightParenToken', - 'statements' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitFunctionCallExpression: self -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> compositeNodeVariables [ - ^ #(#statements) -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> compositeTokenVariables [ - ^ #(#leftParenTokens #identifierTokens #colonTokens #commaTokens #rightParenTokens #leftBraceTokens #inoutTokens #letTokens #_Tokens #leftBracketTokens #rightBracketTokens #minusGreaterThanTokens #periodTokens #questionMarkTokens #bangTokens #protocolTokens #lessThanTokens #greaterThanTokens #typeTokens #periodPeriodPeriodTokens #equalTokens #varTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens) -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> equalTokens [ - ^ equalTokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> equalTokens: anOrderedCollection [ - equalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> expressions: anOrderedCollection [ - expressions := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> inToken [ - ^ inToken -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> inToken: aSmaCCToken [ - inToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -SwiftFunctionCallExpressionNode >> initialize [ - super initialize. - expressions := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - letTokens := OrderedCollection new: 2. - _Tokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - equalTokens := OrderedCollection new: 2. - varTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - statements := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> letTokens [ - ^ letTokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> letTokens: anOrderedCollection [ - letTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> otherVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> statements [ - ^ statements -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> tokenVariables [ - ^ #(#inToken #weakToken #unownedToken #unownedLeftParensafeRightParenToken #unownedLeftParenunsafeRightParenToken) -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> unownedLeftParensafeRightParenToken [ - ^ unownedLeftParensafeRightParenToken -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> unownedLeftParensafeRightParenToken: aSmaCCToken [ - unownedLeftParensafeRightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> unownedLeftParenunsafeRightParenToken [ - ^ unownedLeftParenunsafeRightParenToken -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> unownedLeftParenunsafeRightParenToken: aSmaCCToken [ - unownedLeftParenunsafeRightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> unownedToken [ - ^ unownedToken -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> unownedToken: aSmaCCToken [ - unownedToken := aSmaCCToken -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> varTokens [ - ^ varTokens -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> varTokens: anOrderedCollection [ - varTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> weakToken [ - ^ weakToken -] - -{ #category : #generated } -SwiftFunctionCallExpressionNode >> weakToken: aSmaCCToken [ - weakToken := aSmaCCToken -] diff --git a/src/SmaCC_Swift/SwiftFunctionDeclarationNode.class.st b/src/SmaCC_Swift/SwiftFunctionDeclarationNode.class.st deleted file mode 100644 index 7e854bc66..000000000 --- a/src/SmaCC_Swift/SwiftFunctionDeclarationNode.class.st +++ /dev/null @@ -1,530 +0,0 @@ -Class { - #name : #SwiftFunctionDeclarationNode, - #superclass : #SwiftParseNode, - #instVars : [ - '_Tokens', - 'identifierTokens', - 'leftParenTokens', - 'rightParenTokens', - 'leftBracketTokens', - 'rightBracketTokens', - 'leftBraceTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens', - 'classTokens', - 'mutatingTokens', - 'nonmutatingTokens', - 'overrideTokens', - 'staticTokens', - 'unownedTokens', - 'unownedLeftParensafeRightParenTokens', - 'unownedLeftParenunsafeRightParenTokens', - 'weakTokens', - 'funcToken', - 'lessThanTokens', - 'colonTokens', - 'commaTokens', - 'greaterThanTokens', - 'periodTokens', - 'protocolTokens', - 'whereToken', - 'equalEqualTokens', - 'periodPeriodPeriodTokens', - 'varTokens', - 'inoutTokens', - 'letTokens', - 'equalTokens', - 'expressions', - 'minusGreaterThanTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'block' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftFunctionDeclarationNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitFunctionDeclaration: self -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> block [ - ^ block -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> block: aSwiftBlockNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aSwiftBlockNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> classTokens [ - ^ classTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> classTokens: anOrderedCollection [ - classTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> compositeTokenVariables [ - ^ #(#_Tokens #identifierTokens #leftParenTokens #rightParenTokens #leftBracketTokens #rightBracketTokens #leftBraceTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens #classTokens #mutatingTokens #nonmutatingTokens #overrideTokens #staticTokens #unownedTokens #unownedLeftParensafeRightParenTokens #unownedLeftParenunsafeRightParenTokens #weakTokens #lessThanTokens #colonTokens #commaTokens #greaterThanTokens #periodTokens #protocolTokens #equalEqualTokens #periodPeriodPeriodTokens #varTokens #inoutTokens #letTokens #equalTokens #minusGreaterThanTokens #questionMarkTokens #bangTokens #typeTokens) -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> equalEqualTokens [ - ^ equalEqualTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> equalEqualTokens: anOrderedCollection [ - equalEqualTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> equalTokens [ - ^ equalTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> equalTokens: anOrderedCollection [ - equalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> expressions: anOrderedCollection [ - expressions := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> funcToken [ - ^ funcToken -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> funcToken: aSmaCCToken [ - funcToken := aSmaCCToken -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftFunctionDeclarationNode >> initialize [ - super initialize. - _Tokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - classTokens := OrderedCollection new: 2. - mutatingTokens := OrderedCollection new: 2. - nonmutatingTokens := OrderedCollection new: 2. - overrideTokens := OrderedCollection new: 2. - staticTokens := OrderedCollection new: 2. - unownedTokens := OrderedCollection new: 2. - unownedLeftParensafeRightParenTokens := OrderedCollection new: 2. - unownedLeftParenunsafeRightParenTokens := OrderedCollection new: 2. - weakTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - equalEqualTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - varTokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - letTokens := OrderedCollection new: 2. - equalTokens := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> letTokens [ - ^ letTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> letTokens: anOrderedCollection [ - letTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> mutatingTokens [ - ^ mutatingTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> mutatingTokens: anOrderedCollection [ - mutatingTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> nodeVariables [ - ^ #(#block) -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> nonmutatingTokens [ - ^ nonmutatingTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> nonmutatingTokens: anOrderedCollection [ - nonmutatingTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> otherVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> overrideTokens [ - ^ overrideTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> overrideTokens: anOrderedCollection [ - overrideTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> staticTokens [ - ^ staticTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> staticTokens: anOrderedCollection [ - staticTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> tokenVariables [ - ^ #(#funcToken #whereToken) -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> unownedLeftParensafeRightParenTokens [ - ^ unownedLeftParensafeRightParenTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> unownedLeftParensafeRightParenTokens: anOrderedCollection [ - unownedLeftParensafeRightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> unownedLeftParenunsafeRightParenTokens [ - ^ unownedLeftParenunsafeRightParenTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> unownedLeftParenunsafeRightParenTokens: anOrderedCollection [ - unownedLeftParenunsafeRightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> unownedTokens [ - ^ unownedTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> unownedTokens: anOrderedCollection [ - unownedTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> varTokens [ - ^ varTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> varTokens: anOrderedCollection [ - varTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> weakTokens [ - ^ weakTokens -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> weakTokens: anOrderedCollection [ - weakTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> whereToken [ - ^ whereToken -] - -{ #category : #generated } -SwiftFunctionDeclarationNode >> whereToken: aSmaCCToken [ - whereToken := aSmaCCToken -] diff --git a/src/SmaCC_Swift/SwiftFunctionTypeNode.class.st b/src/SmaCC_Swift/SwiftFunctionTypeNode.class.st deleted file mode 100644 index 61890da44..000000000 --- a/src/SmaCC_Swift/SwiftFunctionTypeNode.class.st +++ /dev/null @@ -1,310 +0,0 @@ -Class { - #name : #SwiftFunctionTypeNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'leftBracketTokens', - 'identifierTokens', - 'periodTokens', - 'protocolTokens', - 'lessThanTokens', - 'greaterThanTokens', - 'rightBracketTokens', - 'colonTokens', - 'minusGreaterThanTokens', - 'commaTokens', - 'leftParenTokens', - 'rightParenTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens', - 'inoutTokens', - '_Tokens', - 'leftBraceTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftFunctionTypeNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftFunctionTypeNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionTypeNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitFunctionType: self -] - -{ #category : #generated } -SwiftFunctionTypeNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftFunctionTypeNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionTypeNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftFunctionTypeNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionTypeNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftFunctionTypeNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionTypeNode >> compositeTokenVariables [ - ^ #(#leftBracketTokens #rightBracketTokens #colonTokens #minusGreaterThanTokens #periodTokens #leftParenTokens #rightParenTokens #questionMarkTokens #bangTokens #protocolTokens #lessThanTokens #greaterThanTokens #typeTokens #identifierTokens #commaTokens #periodPeriodPeriodTokens #_Tokens #inoutTokens #leftBraceTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens) -] - -{ #category : #generated } -SwiftFunctionTypeNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftFunctionTypeNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionTypeNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftFunctionTypeNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionTypeNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftFunctionTypeNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionTypeNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftFunctionTypeNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftFunctionTypeNode >> initialize [ - super initialize. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - _Tokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftFunctionTypeNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftFunctionTypeNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionTypeNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftFunctionTypeNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionTypeNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftFunctionTypeNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionTypeNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftFunctionTypeNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionTypeNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftFunctionTypeNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionTypeNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftFunctionTypeNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionTypeNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftFunctionTypeNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionTypeNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftFunctionTypeNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionTypeNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftFunctionTypeNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionTypeNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftFunctionTypeNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionTypeNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftFunctionTypeNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionTypeNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftFunctionTypeNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionTypeNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftFunctionTypeNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionTypeNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftFunctionTypeNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionTypeNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftFunctionTypeNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftFunctionTypeNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftFunctionTypeNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] diff --git a/src/SmaCC_Swift/SwiftIfStatementNode.class.st b/src/SmaCC_Swift/SwiftIfStatementNode.class.st deleted file mode 100644 index ba922b6cd..000000000 --- a/src/SmaCC_Swift/SwiftIfStatementNode.class.st +++ /dev/null @@ -1,90 +0,0 @@ -Class { - #name : #SwiftIfStatementNode, - #superclass : #SwiftBranchStatementNode, - #instVars : [ - 'ifToken', - 'expression', - 'then', - 'elseToken', - 'else' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftIfStatementNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitIfStatement: self -] - -{ #category : #generated } -SwiftIfStatementNode >> else [ - ^ else -] - -{ #category : #generated } -SwiftIfStatementNode >> else: aSwiftParseNode [ - self else notNil - ifTrue: [ self else parent: nil ]. - else := aSwiftParseNode. - self else notNil - ifTrue: [ self else parent: self ] -] - -{ #category : #generated } -SwiftIfStatementNode >> elseToken [ - ^ elseToken -] - -{ #category : #generated } -SwiftIfStatementNode >> elseToken: aSmaCCToken [ - elseToken := aSmaCCToken -] - -{ #category : #generated } -SwiftIfStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -SwiftIfStatementNode >> expression: anObject [ - expression := anObject -] - -{ #category : #generated } -SwiftIfStatementNode >> ifToken [ - ^ ifToken -] - -{ #category : #generated } -SwiftIfStatementNode >> ifToken: aSmaCCToken [ - ifToken := aSmaCCToken -] - -{ #category : #generated } -SwiftIfStatementNode >> nodeVariables [ - ^ #(#then #else) -] - -{ #category : #generated } -SwiftIfStatementNode >> otherVariables [ - ^ #(#expression) -] - -{ #category : #generated } -SwiftIfStatementNode >> then [ - ^ then -] - -{ #category : #generated } -SwiftIfStatementNode >> then: aSwiftBlockNode [ - self then notNil - ifTrue: [ self then parent: nil ]. - then := aSwiftBlockNode. - self then notNil - ifTrue: [ self then parent: self ] -] - -{ #category : #generated } -SwiftIfStatementNode >> tokenVariables [ - ^ #(#ifToken #elseToken #semicolonToken) -] diff --git a/src/SmaCC_Swift/SwiftImplicitMemberExpressionNode.class.st b/src/SmaCC_Swift/SwiftImplicitMemberExpressionNode.class.st deleted file mode 100644 index 214646e11..000000000 --- a/src/SmaCC_Swift/SwiftImplicitMemberExpressionNode.class.st +++ /dev/null @@ -1,39 +0,0 @@ -Class { - #name : #SwiftImplicitMemberExpressionNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'periodToken', - 'identifierToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftImplicitMemberExpressionNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitImplicitMemberExpression: self -] - -{ #category : #generated } -SwiftImplicitMemberExpressionNode >> identifierToken [ - ^ identifierToken -] - -{ #category : #generated } -SwiftImplicitMemberExpressionNode >> identifierToken: aSmaCCToken [ - identifierToken := aSmaCCToken -] - -{ #category : #generated } -SwiftImplicitMemberExpressionNode >> periodToken [ - ^ periodToken -] - -{ #category : #generated } -SwiftImplicitMemberExpressionNode >> periodToken: aSmaCCToken [ - periodToken := aSmaCCToken -] - -{ #category : #generated } -SwiftImplicitMemberExpressionNode >> tokenVariables [ - ^ #(#periodToken #identifierToken) -] diff --git a/src/SmaCC_Swift/SwiftImplicitlyUnwrappedOptionalTypeNode.class.st b/src/SmaCC_Swift/SwiftImplicitlyUnwrappedOptionalTypeNode.class.st deleted file mode 100644 index a334c6315..000000000 --- a/src/SmaCC_Swift/SwiftImplicitlyUnwrappedOptionalTypeNode.class.st +++ /dev/null @@ -1,310 +0,0 @@ -Class { - #name : #SwiftImplicitlyUnwrappedOptionalTypeNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'leftBracketTokens', - 'identifierTokens', - 'periodTokens', - 'protocolTokens', - 'lessThanTokens', - 'greaterThanTokens', - 'rightBracketTokens', - 'colonTokens', - 'minusGreaterThanTokens', - 'commaTokens', - 'leftParenTokens', - 'rightParenTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens', - 'inoutTokens', - '_Tokens', - 'leftBraceTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitImplicitlyUnwrappedOptionalType: self -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> compositeTokenVariables [ - ^ #(#leftBracketTokens #rightBracketTokens #colonTokens #minusGreaterThanTokens #periodTokens #leftParenTokens #rightParenTokens #questionMarkTokens #bangTokens #protocolTokens #lessThanTokens #greaterThanTokens #typeTokens #identifierTokens #commaTokens #periodPeriodPeriodTokens #_Tokens #inoutTokens #leftBraceTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens) -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftImplicitlyUnwrappedOptionalTypeNode >> initialize [ - super initialize. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - _Tokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftImplicitlyUnwrappedOptionalTypeNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] diff --git a/src/SmaCC_Swift/SwiftImportDeclarationNode.class.st b/src/SmaCC_Swift/SwiftImportDeclarationNode.class.st deleted file mode 100644 index 26c534798..000000000 --- a/src/SmaCC_Swift/SwiftImportDeclarationNode.class.st +++ /dev/null @@ -1,271 +0,0 @@ -Class { - #name : #SwiftImportDeclarationNode, - #superclass : #SwiftParseNode, - #instVars : [ - '_Tokens', - 'identifierTokens', - 'leftParenTokens', - 'rightParenTokens', - 'leftBracketTokens', - 'rightBracketTokens', - 'leftBraceTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens', - 'importToken', - 'typealiasToken', - 'structToken', - 'classToken', - 'enumToken', - 'protocolToken', - 'varToken', - 'funcToken', - 'periodTokens' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftImportDeclarationNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftImportDeclarationNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImportDeclarationNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitImportDeclaration: self -] - -{ #category : #generated } -SwiftImportDeclarationNode >> classToken [ - ^ classToken -] - -{ #category : #generated } -SwiftImportDeclarationNode >> classToken: aSmaCCToken [ - classToken := aSmaCCToken -] - -{ #category : #generated } -SwiftImportDeclarationNode >> compositeTokenVariables [ - ^ #(#_Tokens #identifierTokens #leftParenTokens #rightParenTokens #leftBracketTokens #rightBracketTokens #leftBraceTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens #periodTokens) -] - -{ #category : #generated } -SwiftImportDeclarationNode >> enumToken [ - ^ enumToken -] - -{ #category : #generated } -SwiftImportDeclarationNode >> enumToken: aSmaCCToken [ - enumToken := aSmaCCToken -] - -{ #category : #generated } -SwiftImportDeclarationNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftImportDeclarationNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImportDeclarationNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftImportDeclarationNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImportDeclarationNode >> funcToken [ - ^ funcToken -] - -{ #category : #generated } -SwiftImportDeclarationNode >> funcToken: aSmaCCToken [ - funcToken := aSmaCCToken -] - -{ #category : #generated } -SwiftImportDeclarationNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftImportDeclarationNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImportDeclarationNode >> importToken [ - ^ importToken -] - -{ #category : #generated } -SwiftImportDeclarationNode >> importToken: aSmaCCToken [ - importToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -SwiftImportDeclarationNode >> initialize [ - super initialize. - _Tokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftImportDeclarationNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftImportDeclarationNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImportDeclarationNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftImportDeclarationNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImportDeclarationNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftImportDeclarationNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImportDeclarationNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftImportDeclarationNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImportDeclarationNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftImportDeclarationNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImportDeclarationNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftImportDeclarationNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImportDeclarationNode >> protocolToken [ - ^ protocolToken -] - -{ #category : #generated } -SwiftImportDeclarationNode >> protocolToken: aSmaCCToken [ - protocolToken := aSmaCCToken -] - -{ #category : #generated } -SwiftImportDeclarationNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftImportDeclarationNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImportDeclarationNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftImportDeclarationNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImportDeclarationNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftImportDeclarationNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftImportDeclarationNode >> structToken [ - ^ structToken -] - -{ #category : #generated } -SwiftImportDeclarationNode >> structToken: aSmaCCToken [ - structToken := aSmaCCToken -] - -{ #category : #generated } -SwiftImportDeclarationNode >> tokenVariables [ - ^ #(#importToken #typealiasToken #structToken #classToken #enumToken #protocolToken #varToken #funcToken) -] - -{ #category : #generated } -SwiftImportDeclarationNode >> typealiasToken [ - ^ typealiasToken -] - -{ #category : #generated } -SwiftImportDeclarationNode >> typealiasToken: aSmaCCToken [ - typealiasToken := aSmaCCToken -] - -{ #category : #generated } -SwiftImportDeclarationNode >> varToken [ - ^ varToken -] - -{ #category : #generated } -SwiftImportDeclarationNode >> varToken: aSmaCCToken [ - varToken := aSmaCCToken -] diff --git a/src/SmaCC_Swift/SwiftInOutExpressionNode.class.st b/src/SmaCC_Swift/SwiftInOutExpressionNode.class.st deleted file mode 100644 index 065264153..000000000 --- a/src/SmaCC_Swift/SwiftInOutExpressionNode.class.st +++ /dev/null @@ -1,39 +0,0 @@ -Class { - #name : #SwiftInOutExpressionNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'andToken', - 'identifierToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftInOutExpressionNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitInOutExpression: self -] - -{ #category : #generated } -SwiftInOutExpressionNode >> andToken [ - ^ andToken -] - -{ #category : #generated } -SwiftInOutExpressionNode >> andToken: aSmaCCToken [ - andToken := aSmaCCToken -] - -{ #category : #generated } -SwiftInOutExpressionNode >> identifierToken [ - ^ identifierToken -] - -{ #category : #generated } -SwiftInOutExpressionNode >> identifierToken: aSmaCCToken [ - identifierToken := aSmaCCToken -] - -{ #category : #generated } -SwiftInOutExpressionNode >> tokenVariables [ - ^ #(#andToken #identifierToken) -] diff --git a/src/SmaCC_Swift/SwiftInfixOperatorDeclarationNode.class.st b/src/SmaCC_Swift/SwiftInfixOperatorDeclarationNode.class.st deleted file mode 100644 index 8d0b8d9a2..000000000 --- a/src/SmaCC_Swift/SwiftInfixOperatorDeclarationNode.class.st +++ /dev/null @@ -1,138 +0,0 @@ -Class { - #name : #SwiftInfixOperatorDeclarationNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'operatorTokens', - 'infixToken', - 'leftBraceToken', - 'precedenceToken', - 'integer_literalToken', - 'associativityToken', - 'leftToken', - 'rightToken', - 'noneToken', - 'rightBraceToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftInfixOperatorDeclarationNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitInfixOperatorDeclaration: self -] - -{ #category : #generated } -SwiftInfixOperatorDeclarationNode >> associativityToken [ - ^ associativityToken -] - -{ #category : #generated } -SwiftInfixOperatorDeclarationNode >> associativityToken: aSmaCCToken [ - associativityToken := aSmaCCToken -] - -{ #category : #generated } -SwiftInfixOperatorDeclarationNode >> compositeTokenVariables [ - ^ #(#operatorTokens) -] - -{ #category : #generated } -SwiftInfixOperatorDeclarationNode >> infixToken [ - ^ infixToken -] - -{ #category : #generated } -SwiftInfixOperatorDeclarationNode >> infixToken: aSmaCCToken [ - infixToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -SwiftInfixOperatorDeclarationNode >> initialize [ - super initialize. - operatorTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftInfixOperatorDeclarationNode >> integer_literalToken [ - ^ integer_literalToken -] - -{ #category : #generated } -SwiftInfixOperatorDeclarationNode >> integer_literalToken: aSmaCCToken [ - integer_literalToken := aSmaCCToken -] - -{ #category : #generated } -SwiftInfixOperatorDeclarationNode >> leftBraceToken [ - ^ leftBraceToken -] - -{ #category : #generated } -SwiftInfixOperatorDeclarationNode >> leftBraceToken: aSmaCCToken [ - leftBraceToken := aSmaCCToken -] - -{ #category : #generated } -SwiftInfixOperatorDeclarationNode >> leftToken [ - ^ leftToken -] - -{ #category : #generated } -SwiftInfixOperatorDeclarationNode >> leftToken: aSmaCCToken [ - leftToken := aSmaCCToken -] - -{ #category : #generated } -SwiftInfixOperatorDeclarationNode >> noneToken [ - ^ noneToken -] - -{ #category : #generated } -SwiftInfixOperatorDeclarationNode >> noneToken: aSmaCCToken [ - noneToken := aSmaCCToken -] - -{ #category : #generated } -SwiftInfixOperatorDeclarationNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftInfixOperatorDeclarationNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInfixOperatorDeclarationNode >> precedenceToken [ - ^ precedenceToken -] - -{ #category : #generated } -SwiftInfixOperatorDeclarationNode >> precedenceToken: aSmaCCToken [ - precedenceToken := aSmaCCToken -] - -{ #category : #generated } -SwiftInfixOperatorDeclarationNode >> rightBraceToken [ - ^ rightBraceToken -] - -{ #category : #generated } -SwiftInfixOperatorDeclarationNode >> rightBraceToken: aSmaCCToken [ - rightBraceToken := aSmaCCToken -] - -{ #category : #generated } -SwiftInfixOperatorDeclarationNode >> rightToken [ - ^ rightToken -] - -{ #category : #generated } -SwiftInfixOperatorDeclarationNode >> rightToken: aSmaCCToken [ - rightToken := aSmaCCToken -] - -{ #category : #generated } -SwiftInfixOperatorDeclarationNode >> tokenVariables [ - ^ #(#infixToken #leftBraceToken #precedenceToken #integer_literalToken #associativityToken #leftToken #rightToken #noneToken #rightBraceToken) -] diff --git a/src/SmaCC_Swift/SwiftInitializerDeclarationNode.class.st b/src/SmaCC_Swift/SwiftInitializerDeclarationNode.class.st deleted file mode 100644 index 9920a1457..000000000 --- a/src/SmaCC_Swift/SwiftInitializerDeclarationNode.class.st +++ /dev/null @@ -1,433 +0,0 @@ -Class { - #name : #SwiftInitializerDeclarationNode, - #superclass : #SwiftParseNode, - #instVars : [ - '_Tokens', - 'identifierTokens', - 'leftParenTokens', - 'rightParenTokens', - 'leftBracketTokens', - 'rightBracketTokens', - 'leftBraceTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens', - 'convenienceToken', - 'initToken', - 'lessThanTokens', - 'colonTokens', - 'commaTokens', - 'greaterThanTokens', - 'periodTokens', - 'protocolTokens', - 'whereToken', - 'equalEqualTokens', - 'inoutTokens', - 'letTokens', - 'minusGreaterThanTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'equalTokens', - 'expressions', - 'varTokens', - 'periodPeriodPeriodTokens', - 'block' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftInitializerDeclarationNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitInitializerDeclaration: self -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> block [ - ^ block -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> block: aSwiftBlockNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aSwiftBlockNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> compositeTokenVariables [ - ^ #(#_Tokens #identifierTokens #leftParenTokens #rightParenTokens #leftBracketTokens #rightBracketTokens #leftBraceTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens #lessThanTokens #colonTokens #commaTokens #greaterThanTokens #periodTokens #protocolTokens #equalEqualTokens #inoutTokens #letTokens #minusGreaterThanTokens #questionMarkTokens #bangTokens #typeTokens #periodPeriodPeriodTokens #equalTokens #varTokens) -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> convenienceToken [ - ^ convenienceToken -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> convenienceToken: aSmaCCToken [ - convenienceToken := aSmaCCToken -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> equalEqualTokens [ - ^ equalEqualTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> equalEqualTokens: anOrderedCollection [ - equalEqualTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> equalTokens [ - ^ equalTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> equalTokens: anOrderedCollection [ - equalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> expressions: anOrderedCollection [ - expressions := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> initToken [ - ^ initToken -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> initToken: aSmaCCToken [ - initToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -SwiftInitializerDeclarationNode >> initialize [ - super initialize. - _Tokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - equalEqualTokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - letTokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - equalTokens := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. - varTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> letTokens [ - ^ letTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> letTokens: anOrderedCollection [ - letTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> nodeVariables [ - ^ #(#block) -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> otherVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> tokenVariables [ - ^ #(#convenienceToken #initToken #whereToken) -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> varTokens [ - ^ varTokens -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> varTokens: anOrderedCollection [ - varTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> whereToken [ - ^ whereToken -] - -{ #category : #generated } -SwiftInitializerDeclarationNode >> whereToken: aSmaCCToken [ - whereToken := aSmaCCToken -] diff --git a/src/SmaCC_Swift/SwiftInitializerExpressionNode.class.st b/src/SmaCC_Swift/SwiftInitializerExpressionNode.class.st deleted file mode 100644 index bd613eb3f..000000000 --- a/src/SmaCC_Swift/SwiftInitializerExpressionNode.class.st +++ /dev/null @@ -1,546 +0,0 @@ -Class { - #name : #SwiftInitializerExpressionNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'identifierTokens', - 'lessThanTokens', - 'commaTokens', - 'greaterThanTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'leftBracketTokens', - 'expressions', - 'rightBracketTokens', - 'keyExpressions', - 'colonTokens', - 'valueExpressions', - '__FILE__Token', - '__LINE__Token', - '__COLUMN__Token', - '__FUNCTION__Token', - 'selfTokens', - 'periodTokens', - 'initTokens', - 'leftBraceTokens', - 'leftParenTokens', - 'rightParenTokens', - 'inoutTokens', - 'letTokens', - '_Tokens', - 'protocolTokens', - 'minusGreaterThanTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens', - 'equalTokens', - 'varTokens', - 'rightBraceTokens', - 'operatorTokens', - 'inToken', - 'weakToken', - 'unownedToken', - 'unownedLeftParensafeRightParenToken', - 'unownedLeftParenunsafeRightParenToken', - 'statements', - 'dynamicTypeTokens' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftInitializerExpressionNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> __COLUMN__Token [ - ^ __COLUMN__Token -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> __COLUMN__Token: aSmaCCToken [ - __COLUMN__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> __FILE__Token [ - ^ __FILE__Token -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> __FILE__Token: aSmaCCToken [ - __FILE__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> __FUNCTION__Token [ - ^ __FUNCTION__Token -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> __FUNCTION__Token: aSmaCCToken [ - __FUNCTION__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> __LINE__Token [ - ^ __LINE__Token -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> __LINE__Token: aSmaCCToken [ - __LINE__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitInitializerExpression: self -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> compositeNodeVariables [ - ^ #(#statements) -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> compositeTokenVariables [ - ^ #(#identifierTokens #lessThanTokens #commaTokens #greaterThanTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #leftBracketTokens #rightBracketTokens #colonTokens #selfTokens #periodTokens #initTokens #leftBraceTokens #leftParenTokens #rightParenTokens #inoutTokens #letTokens #_Tokens #minusGreaterThanTokens #questionMarkTokens #bangTokens #protocolTokens #typeTokens #periodPeriodPeriodTokens #equalTokens #varTokens #rightBraceTokens #operatorTokens #dynamicTypeTokens) -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> dynamicTypeTokens [ - ^ dynamicTypeTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> dynamicTypeTokens: anOrderedCollection [ - dynamicTypeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> equalTokens [ - ^ equalTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> equalTokens: anOrderedCollection [ - equalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> expressions: anOrderedCollection [ - expressions := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> inToken [ - ^ inToken -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> inToken: aSmaCCToken [ - inToken := aSmaCCToken -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> initTokens [ - ^ initTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> initTokens: anOrderedCollection [ - initTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftInitializerExpressionNode >> initialize [ - super initialize. - identifierTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - keyExpressions := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - valueExpressions := OrderedCollection new: 2. - selfTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - initTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - letTokens := OrderedCollection new: 2. - _Tokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - equalTokens := OrderedCollection new: 2. - varTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - statements := OrderedCollection new: 2. - dynamicTypeTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> keyExpressions [ - ^ keyExpressions -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> keyExpressions: anOrderedCollection [ - keyExpressions := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> letTokens [ - ^ letTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> letTokens: anOrderedCollection [ - letTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> otherVariables [ - ^ #(#expressions #keyExpressions #valueExpressions) -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> selfTokens [ - ^ selfTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> selfTokens: anOrderedCollection [ - selfTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> statements [ - ^ statements -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> tokenVariables [ - ^ #(#__FILE__Token #__LINE__Token #__COLUMN__Token #__FUNCTION__Token #inToken #weakToken #unownedToken #unownedLeftParensafeRightParenToken #unownedLeftParenunsafeRightParenToken) -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> unownedLeftParensafeRightParenToken [ - ^ unownedLeftParensafeRightParenToken -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> unownedLeftParensafeRightParenToken: aSmaCCToken [ - unownedLeftParensafeRightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> unownedLeftParenunsafeRightParenToken [ - ^ unownedLeftParenunsafeRightParenToken -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> unownedLeftParenunsafeRightParenToken: aSmaCCToken [ - unownedLeftParenunsafeRightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> unownedToken [ - ^ unownedToken -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> unownedToken: aSmaCCToken [ - unownedToken := aSmaCCToken -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> valueExpressions [ - ^ valueExpressions -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> valueExpressions: anOrderedCollection [ - valueExpressions := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> varTokens [ - ^ varTokens -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> varTokens: anOrderedCollection [ - varTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> weakToken [ - ^ weakToken -] - -{ #category : #generated } -SwiftInitializerExpressionNode >> weakToken: aSmaCCToken [ - weakToken := aSmaCCToken -] diff --git a/src/SmaCC_Swift/SwiftLabeledStatementNode.class.st b/src/SmaCC_Swift/SwiftLabeledStatementNode.class.st deleted file mode 100644 index f9f48555c..000000000 --- a/src/SmaCC_Swift/SwiftLabeledStatementNode.class.st +++ /dev/null @@ -1,70 +0,0 @@ -Class { - #name : #SwiftLabeledStatementNode, - #superclass : #SwiftStatementNode, - #instVars : [ - 'name', - 'colonToken', - 'statement', - 'semicolonToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftLabeledStatementNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitLabeledStatement: self -] - -{ #category : #generated } -SwiftLabeledStatementNode >> colonToken [ - ^ colonToken -] - -{ #category : #generated } -SwiftLabeledStatementNode >> colonToken: aSmaCCToken [ - colonToken := aSmaCCToken -] - -{ #category : #generated } -SwiftLabeledStatementNode >> name [ - ^ name -] - -{ #category : #generated } -SwiftLabeledStatementNode >> name: aSmaCCToken [ - name := aSmaCCToken -] - -{ #category : #generated } -SwiftLabeledStatementNode >> nodeVariables [ - ^ #(#statement) -] - -{ #category : #generated } -SwiftLabeledStatementNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -SwiftLabeledStatementNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] - -{ #category : #generated } -SwiftLabeledStatementNode >> statement [ - ^ statement -] - -{ #category : #generated } -SwiftLabeledStatementNode >> statement: aSwiftStatementNode [ - self statement notNil - ifTrue: [ self statement parent: nil ]. - statement := aSwiftStatementNode. - self statement notNil - ifTrue: [ self statement parent: self ] -] - -{ #category : #generated } -SwiftLabeledStatementNode >> tokenVariables [ - ^ #(#name #colonToken #semicolonToken) -] diff --git a/src/SmaCC_Swift/SwiftLiteralExpressionNode.class.st b/src/SmaCC_Swift/SwiftLiteralExpressionNode.class.st deleted file mode 100644 index a00dbf52a..000000000 --- a/src/SmaCC_Swift/SwiftLiteralExpressionNode.class.st +++ /dev/null @@ -1,191 +0,0 @@ -Class { - #name : #SwiftLiteralExpressionNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'integer_literalToken', - 'floating_point_literalToken', - 'full_string_literalToken', - 'leftBracketToken', - 'expressions', - 'commaTokens', - 'rightBracketToken', - 'keyExpressions', - 'colonTokens', - 'valueExpressions', - '__FILE__Token', - '__LINE__Token', - '__COLUMN__Token', - '__FUNCTION__Token' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftLiteralExpressionNode >> __COLUMN__Token [ - ^ __COLUMN__Token -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> __COLUMN__Token: aSmaCCToken [ - __COLUMN__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> __FILE__Token [ - ^ __FILE__Token -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> __FILE__Token: aSmaCCToken [ - __FILE__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> __FUNCTION__Token [ - ^ __FUNCTION__Token -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> __FUNCTION__Token: aSmaCCToken [ - __FUNCTION__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> __LINE__Token [ - ^ __LINE__Token -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> __LINE__Token: aSmaCCToken [ - __LINE__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitLiteralExpression: self -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> compositeTokenVariables [ - ^ #(#commaTokens #colonTokens) -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> expressions: anOrderedCollection [ - expressions := anOrderedCollection -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> floating_point_literalToken [ - ^ floating_point_literalToken -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> floating_point_literalToken: aSmaCCToken [ - floating_point_literalToken := aSmaCCToken -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> full_string_literalToken [ - ^ full_string_literalToken -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> full_string_literalToken: aSmaCCToken [ - full_string_literalToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -SwiftLiteralExpressionNode >> initialize [ - super initialize. - expressions := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - keyExpressions := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - valueExpressions := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> integer_literalToken [ - ^ integer_literalToken -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> integer_literalToken: aSmaCCToken [ - integer_literalToken := aSmaCCToken -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> keyExpressions [ - ^ keyExpressions -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> keyExpressions: anOrderedCollection [ - keyExpressions := anOrderedCollection -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> leftBracketToken [ - ^ leftBracketToken -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> leftBracketToken: aSmaCCToken [ - leftBracketToken := aSmaCCToken -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> otherVariables [ - ^ #(#expressions #keyExpressions #valueExpressions) -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> rightBracketToken [ - ^ rightBracketToken -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> rightBracketToken: aSmaCCToken [ - rightBracketToken := aSmaCCToken -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> tokenVariables [ - ^ #(#integer_literalToken #floating_point_literalToken #full_string_literalToken #leftBracketToken #rightBracketToken #__FILE__Token #__LINE__Token #__COLUMN__Token #__FUNCTION__Token) -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> valueExpressions [ - ^ valueExpressions -] - -{ #category : #generated } -SwiftLiteralExpressionNode >> valueExpressions: anOrderedCollection [ - valueExpressions := anOrderedCollection -] diff --git a/src/SmaCC_Swift/SwiftLoopStatementNode.class.st b/src/SmaCC_Swift/SwiftLoopStatementNode.class.st deleted file mode 100644 index 51bc7c948..000000000 --- a/src/SmaCC_Swift/SwiftLoopStatementNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #SwiftLoopStatementNode, - #superclass : #SwiftStatementNode, - #instVars : [ - 'semicolonToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftLoopStatementNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitLoopStatement: self -] - -{ #category : #generated } -SwiftLoopStatementNode >> semicolonToken [ - ^ semicolonToken -] - -{ #category : #generated } -SwiftLoopStatementNode >> semicolonToken: aSmaCCToken [ - semicolonToken := aSmaCCToken -] - -{ #category : #generated } -SwiftLoopStatementNode >> tokenVariables [ - ^ #(#semicolonToken) -] diff --git a/src/SmaCC_Swift/SwiftMetatypeTypeNode.class.st b/src/SmaCC_Swift/SwiftMetatypeTypeNode.class.st deleted file mode 100644 index 2ca7f09b0..000000000 --- a/src/SmaCC_Swift/SwiftMetatypeTypeNode.class.st +++ /dev/null @@ -1,310 +0,0 @@ -Class { - #name : #SwiftMetatypeTypeNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'leftBracketTokens', - 'identifierTokens', - 'periodTokens', - 'protocolTokens', - 'lessThanTokens', - 'greaterThanTokens', - 'rightBracketTokens', - 'colonTokens', - 'minusGreaterThanTokens', - 'commaTokens', - 'leftParenTokens', - 'rightParenTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens', - 'inoutTokens', - '_Tokens', - 'leftBraceTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftMetatypeTypeNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitMetatypeType: self -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> compositeTokenVariables [ - ^ #(#leftBracketTokens #rightBracketTokens #colonTokens #minusGreaterThanTokens #periodTokens #leftParenTokens #rightParenTokens #questionMarkTokens #bangTokens #protocolTokens #lessThanTokens #greaterThanTokens #typeTokens #identifierTokens #commaTokens #periodPeriodPeriodTokens #_Tokens #inoutTokens #leftBraceTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens) -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftMetatypeTypeNode >> initialize [ - super initialize. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - _Tokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftMetatypeTypeNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] diff --git a/src/SmaCC_Swift/SwiftNamedExpressionNode.class.st b/src/SmaCC_Swift/SwiftNamedExpressionNode.class.st deleted file mode 100644 index 3c2f91929..000000000 --- a/src/SmaCC_Swift/SwiftNamedExpressionNode.class.st +++ /dev/null @@ -1,55 +0,0 @@ -Class { - #name : #SwiftNamedExpressionNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'identifierToken', - 'colonToken', - 'expression' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftNamedExpressionNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitNamedExpression: self -] - -{ #category : #generated } -SwiftNamedExpressionNode >> colonToken [ - ^ colonToken -] - -{ #category : #generated } -SwiftNamedExpressionNode >> colonToken: aSmaCCToken [ - colonToken := aSmaCCToken -] - -{ #category : #generated } -SwiftNamedExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -SwiftNamedExpressionNode >> expression: anObject [ - expression := anObject -] - -{ #category : #generated } -SwiftNamedExpressionNode >> identifierToken [ - ^ identifierToken -] - -{ #category : #generated } -SwiftNamedExpressionNode >> identifierToken: aSmaCCToken [ - identifierToken := aSmaCCToken -] - -{ #category : #generated } -SwiftNamedExpressionNode >> otherVariables [ - ^ #(#expression) -] - -{ #category : #generated } -SwiftNamedExpressionNode >> tokenVariables [ - ^ #(#identifierToken #colonToken) -] diff --git a/src/SmaCC_Swift/SwiftOptionalChainingExpressionNode.class.st b/src/SmaCC_Swift/SwiftOptionalChainingExpressionNode.class.st deleted file mode 100644 index 3f65ad2a0..000000000 --- a/src/SmaCC_Swift/SwiftOptionalChainingExpressionNode.class.st +++ /dev/null @@ -1,44 +0,0 @@ -Class { - #name : #SwiftOptionalChainingExpressionNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'expression', - 'questionMarkToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftOptionalChainingExpressionNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitOptionalChainingExpression: self -] - -{ #category : #generated } -SwiftOptionalChainingExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -SwiftOptionalChainingExpressionNode >> expression: anOrderedCollection [ - expression := anOrderedCollection -] - -{ #category : #generated } -SwiftOptionalChainingExpressionNode >> otherVariables [ - ^ #(#expression) -] - -{ #category : #generated } -SwiftOptionalChainingExpressionNode >> questionMarkToken [ - ^ questionMarkToken -] - -{ #category : #generated } -SwiftOptionalChainingExpressionNode >> questionMarkToken: aSmaCCToken [ - questionMarkToken := aSmaCCToken -] - -{ #category : #generated } -SwiftOptionalChainingExpressionNode >> tokenVariables [ - ^ #(#questionMarkToken) -] diff --git a/src/SmaCC_Swift/SwiftOptionalTypeNode.class.st b/src/SmaCC_Swift/SwiftOptionalTypeNode.class.st deleted file mode 100644 index a3fee9808..000000000 --- a/src/SmaCC_Swift/SwiftOptionalTypeNode.class.st +++ /dev/null @@ -1,310 +0,0 @@ -Class { - #name : #SwiftOptionalTypeNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'leftBracketTokens', - 'identifierTokens', - 'periodTokens', - 'protocolTokens', - 'lessThanTokens', - 'greaterThanTokens', - 'rightBracketTokens', - 'colonTokens', - 'minusGreaterThanTokens', - 'commaTokens', - 'leftParenTokens', - 'rightParenTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens', - 'inoutTokens', - '_Tokens', - 'leftBraceTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftOptionalTypeNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftOptionalTypeNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftOptionalTypeNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitOptionalType: self -] - -{ #category : #generated } -SwiftOptionalTypeNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftOptionalTypeNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftOptionalTypeNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftOptionalTypeNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftOptionalTypeNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftOptionalTypeNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftOptionalTypeNode >> compositeTokenVariables [ - ^ #(#leftBracketTokens #rightBracketTokens #colonTokens #minusGreaterThanTokens #periodTokens #leftParenTokens #rightParenTokens #questionMarkTokens #bangTokens #protocolTokens #lessThanTokens #greaterThanTokens #typeTokens #identifierTokens #commaTokens #periodPeriodPeriodTokens #_Tokens #inoutTokens #leftBraceTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens) -] - -{ #category : #generated } -SwiftOptionalTypeNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftOptionalTypeNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftOptionalTypeNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftOptionalTypeNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftOptionalTypeNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftOptionalTypeNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftOptionalTypeNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftOptionalTypeNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftOptionalTypeNode >> initialize [ - super initialize. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - _Tokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftOptionalTypeNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftOptionalTypeNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftOptionalTypeNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftOptionalTypeNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftOptionalTypeNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftOptionalTypeNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftOptionalTypeNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftOptionalTypeNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftOptionalTypeNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftOptionalTypeNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftOptionalTypeNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftOptionalTypeNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftOptionalTypeNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftOptionalTypeNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftOptionalTypeNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftOptionalTypeNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftOptionalTypeNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftOptionalTypeNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftOptionalTypeNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftOptionalTypeNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftOptionalTypeNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftOptionalTypeNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftOptionalTypeNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftOptionalTypeNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftOptionalTypeNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftOptionalTypeNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftOptionalTypeNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftOptionalTypeNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftOptionalTypeNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftOptionalTypeNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftOptionalTypeNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftOptionalTypeNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] diff --git a/src/SmaCC_Swift/SwiftParenthesizedExpressionNode.class.st b/src/SmaCC_Swift/SwiftParenthesizedExpressionNode.class.st deleted file mode 100644 index 4eee25750..000000000 --- a/src/SmaCC_Swift/SwiftParenthesizedExpressionNode.class.st +++ /dev/null @@ -1,102 +0,0 @@ -Class { - #name : #SwiftParenthesizedExpressionNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'leftParenToken', - 'expressions', - 'identifierTokens', - 'colonTokens', - 'commaTokens', - 'rightParenToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftParenthesizedExpressionNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitParenthesizedExpression: self -] - -{ #category : #generated } -SwiftParenthesizedExpressionNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftParenthesizedExpressionNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftParenthesizedExpressionNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftParenthesizedExpressionNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftParenthesizedExpressionNode >> compositeTokenVariables [ - ^ #(#identifierTokens #colonTokens #commaTokens) -] - -{ #category : #generated } -SwiftParenthesizedExpressionNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SwiftParenthesizedExpressionNode >> expressions: anOrderedCollection [ - expressions := anOrderedCollection -] - -{ #category : #generated } -SwiftParenthesizedExpressionNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftParenthesizedExpressionNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftParenthesizedExpressionNode >> initialize [ - super initialize. - expressions := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftParenthesizedExpressionNode >> leftParenToken [ - ^ leftParenToken -] - -{ #category : #generated } -SwiftParenthesizedExpressionNode >> leftParenToken: aSmaCCToken [ - leftParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftParenthesizedExpressionNode >> otherVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -SwiftParenthesizedExpressionNode >> rightParenToken [ - ^ rightParenToken -] - -{ #category : #generated } -SwiftParenthesizedExpressionNode >> rightParenToken: aSmaCCToken [ - rightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftParenthesizedExpressionNode >> tokenVariables [ - ^ #(#leftParenToken #rightParenToken) -] diff --git a/src/SmaCC_Swift/SwiftParseNode.class.st b/src/SmaCC_Swift/SwiftParseNode.class.st deleted file mode 100644 index 316dbdd35..000000000 --- a/src/SmaCC_Swift/SwiftParseNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #SwiftParseNode, - #superclass : #SmaCCParseNode, - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftParseNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitParse: self -] diff --git a/src/SmaCC_Swift/SwiftParseNodeVisitor.class.st b/src/SmaCC_Swift/SwiftParseNodeVisitor.class.st deleted file mode 100644 index bbb16a9d0..000000000 --- a/src/SmaCC_Swift/SwiftParseNodeVisitor.class.st +++ /dev/null @@ -1,390 +0,0 @@ -Class { - #name : #SwiftParseNodeVisitor, - #superclass : #SmaCCParseNodeVisitor, - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftParseNodeVisitor >> visitArrayType: anArrayType [ - ^ self visitParse: anArrayType -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitAssignmentOperator: anAssignmentOperator [ - ^ self visitParse: anAssignmentOperator -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitBinaryExpression: aBinaryExpression [ - ^ self visitParse: aBinaryExpression -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitBinaryOperator: aBinaryOperator [ - ^ self visitParse: aBinaryOperator -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitBlock: aBlock [ - ^ self visitParse: aBlock -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitBranchStatement: aBranchStatement [ - ^ self visitStatement: aBranchStatement -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitBreakStatement: aBreakStatement [ - ^ self visitControlTransferStatement: aBreakStatement -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitClassDeclaration: aClassDeclaration [ - ^ self visitParse: aClassDeclaration -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitClosureExpression: aClosureExpression [ - ^ self visitParse: aClosureExpression -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitCondionalOperator: aCondionalOperator [ - ^ self visitParse: aCondionalOperator -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitConstantDeclaration: aConstantDeclaration [ - ^ self visitParse: aConstantDeclaration -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitContinueStatement: aContinueStatement [ - ^ self visitControlTransferStatement: aContinueStatement -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitControlTransferStatement: aControlTransferStatement [ - ^ self visitStatement: aControlTransferStatement -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitDeclarationStatement: aDeclarationStatement [ - ^ self visitStatement: aDeclarationStatement -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitDeinitializerDeclaration: aDeinitializerDeclaration [ - ^ self visitParse: aDeinitializerDeclaration -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitDictionaryType: aDictionaryType [ - ^ self visitParse: aDictionaryType -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitDoWhileStatement: aDoWhileStatement [ - ^ self visitLoopStatement: aDoWhileStatement -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitDynamicTypeExpression: aDynamicTypeExpression [ - ^ self visitParse: aDynamicTypeExpression -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitEnumDeclaration: anEnumDeclaration [ - ^ self visitParse: anEnumDeclaration -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitExplicitMemberExpression: anExplicitMemberExpression [ - ^ self visitParse: anExplicitMemberExpression -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitExpressionStatement: anExpressionStatement [ - ^ self visitStatement: anExpressionStatement -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitExtensionDeclaration: anExtensionDeclaration [ - ^ self visitParse: anExtensionDeclaration -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitFallThroughStatement: aFallThroughStatement [ - ^ self visitControlTransferStatement: aFallThroughStatement -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitFile: aFile [ - ^ self visitParse: aFile -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitForInStatement: aForInStatement [ - ^ self visitLoopStatement: aForInStatement -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitForStatement: aForStatement [ - ^ self visitLoopStatement: aForStatement -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitForcedValueExpression: aForcedValueExpression [ - ^ self visitParse: aForcedValueExpression -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitFunctionCallExpression: aFunctionCallExpression [ - ^ self visitParse: aFunctionCallExpression -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitFunctionDeclaration: aFunctionDeclaration [ - ^ self visitParse: aFunctionDeclaration -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitFunctionType: aFunctionType [ - ^ self visitParse: aFunctionType -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitIfStatement: anIfStatement [ - ^ self visitBranchStatement: anIfStatement -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitImplicitMemberExpression: anImplicitMemberExpression [ - ^ self visitParse: anImplicitMemberExpression -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitImplicitlyUnwrappedOptionalType: anImplicitlyUnwrappedOptionalType [ - ^ self visitParse: anImplicitlyUnwrappedOptionalType -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitImportDeclaration: anImportDeclaration [ - ^ self visitParse: anImportDeclaration -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitInOutExpression: anInOutExpression [ - ^ self visitParse: anInOutExpression -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitInfixOperatorDeclaration: anInfixOperatorDeclaration [ - ^ self visitParse: anInfixOperatorDeclaration -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitInitializerDeclaration: anInitializerDeclaration [ - ^ self visitParse: anInitializerDeclaration -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitInitializerExpression: anInitializerExpression [ - ^ self visitParse: anInitializerExpression -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitLabeledStatement: aLabeledStatement [ - ^ self visitStatement: aLabeledStatement -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitLiteralExpression: aLiteralExpression [ - ^ self visitParse: aLiteralExpression -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitLoopStatement: aLoopStatement [ - ^ self visitStatement: aLoopStatement -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitMetatypeType: aMetatypeType [ - ^ self visitParse: aMetatypeType -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitNamedExpression: aNamedExpression [ - ^ self visitParse: aNamedExpression -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitOptionalChainingExpression: anOptionalChainingExpression [ - ^ self visitParse: anOptionalChainingExpression -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitOptionalType: anOptionalType [ - ^ self visitParse: anOptionalType -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitParenthesizedExpression: aParenthesizedExpression [ - ^ self visitParse: aParenthesizedExpression -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitParse: aParse [ - ^ self visitSmaCCParseNode: aParse -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitPatternInitializer: aPatternInitializer [ - ^ self visitParse: aPatternInitializer -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitPostfixOperatorDeclaration: aPostfixOperatorDeclaration [ - ^ self visitParse: aPostfixOperatorDeclaration -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitPostfixSelfExpression: aPostfixSelfExpression [ - ^ self visitParse: aPostfixSelfExpression -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitPrefixExpression: aPrefixExpression [ - ^ self visitParse: aPrefixExpression -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitPrefixOperatorDeclaration: aPrefixOperatorDeclaration [ - ^ self visitParse: aPrefixOperatorDeclaration -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitPrimaryExpression: aPrimaryExpression [ - ^ self visitParse: aPrimaryExpression -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitProtocolAssociationTypeDeclaration: aProtocolAssociationTypeDeclaration [ - ^ self visitParse: aProtocolAssociationTypeDeclaration -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitProtocolCompositionType: aProtocolCompositionType [ - ^ self visitParse: aProtocolCompositionType -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitProtocolDeclaration: aProtocolDeclaration [ - ^ self visitParse: aProtocolDeclaration -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitProtocolInitializerDeclaration: aProtocolInitializerDeclaration [ - ^ self visitParse: aProtocolInitializerDeclaration -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitProtocolMethodDeclaration: aProtocolMethodDeclaration [ - ^ self visitParse: aProtocolMethodDeclaration -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitProtocolPropertyDeclaration: aProtocolPropertyDeclaration [ - ^ self visitParse: aProtocolPropertyDeclaration -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitProtocolSubscriptDeclaration: aProtocolSubscriptDeclaration [ - ^ self visitParse: aProtocolSubscriptDeclaration -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitReturnStatement: aReturnStatement [ - ^ self visitControlTransferStatement: aReturnStatement -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitSelfExpression: aSelfExpression [ - ^ self visitParse: aSelfExpression -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitStatement: aStatement [ - ^ self visitParse: aStatement -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitStructDeclaration: aStructDeclaration [ - ^ self visitParse: aStructDeclaration -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitSubscriptDeclaration: aSubscriptDeclaration [ - ^ self visitParse: aSubscriptDeclaration -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitSubscriptExpression: aSubscriptExpression [ - ^ self visitParse: aSubscriptExpression -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitSuperclassInitializerExpression: aSuperclassInitializerExpression [ - ^ self visitParse: aSuperclassInitializerExpression -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitSuperclassMethodExpression: aSuperclassMethodExpression [ - ^ self visitParse: aSuperclassMethodExpression -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitSuperclassSubscriptExpression: aSuperclassSubscriptExpression [ - ^ self visitParse: aSuperclassSubscriptExpression -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitSwitchStatement: aSwitchStatement [ - ^ self visitBranchStatement: aSwitchStatement -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitTupleType: aTupleType [ - ^ self visitParse: aTupleType -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitTypeCastOperator: aTypeCastOperator [ - ^ self visitParse: aTypeCastOperator -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitTypeIdentifier: aTypeIdentifier [ - ^ self visitParse: aTypeIdentifier -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitTypealiasDeclaration: aTypealiasDeclaration [ - ^ self visitParse: aTypealiasDeclaration -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitVariableDeclaration: aVariableDeclaration [ - ^ self visitParse: aVariableDeclaration -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitWhileStatement: aWhileStatement [ - ^ self visitLoopStatement: aWhileStatement -] - -{ #category : #generated } -SwiftParseNodeVisitor >> visitWildcardExpression: aWildcardExpression [ - ^ self visitParse: aWildcardExpression -] diff --git a/src/SmaCC_Swift/SwiftParser.class.st b/src/SmaCC_Swift/SwiftParser.class.st deleted file mode 100644 index 18fda2e6f..000000000 --- a/src/SmaCC_Swift/SwiftParser.class.st +++ /dev/null @@ -1,11016 +0,0 @@ -Class { - #name : #SwiftParser, - #superclass : #SmaCCGLRParser, - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftParser class >> ambiguousTransitions [ -^#( -#[ 0 6 0 109] -#[ 0 42 1 241] -#[ 0 17 0 50] -#[ 0 6 2 37] -#[ 0 6 1 213] -#[ 0 9 0 58] -#[ 0 13 0 58] -#[ 0 17 0 58] -#[ 0 25 0 58] -#[ 0 29 0 58] -#[ 0 33 0 58] -#[ 0 37 0 58] -#[ 0 41 0 58] -#[ 0 45 0 58] -#[ 0 58 0 85] -#[ 0 58 0 89] -#[ 0 58 0 105] -#[ 0 58 1 213] -#[ 0 58 0 113] -#[ 0 58 0 117] -#[ 0 58 0 121] -#[ 0 58 0 125] -#[ 0 62 2 149] -#[ 0 62 2 153] -#[ 0 66 2 189] -#[ 0 66 2 193] -#[ 0 66 2 197] -#[ 0 238 3 97] -#[ 0 238 3 105] -#[ 0 238 3 113] -#[ 0 13 1 42] -#[ 1 42 3 145] -#[ 1 42 3 149] -#[ 1 42 3 153] -#[ 1 42 1 46] -#[ 1 42 3 157] -#[ 1 82 3 173] -#[ 1 82 1 86] -#[ 1 122 3 241] -#[ 0 14 1 158] -#[ 0 22 1 162] -#[ 0 70 1 166] -#[ 0 70 1 150 1 166] -#[ 1 150 2 221] -#[ 1 178 4 149] -#[ 0 6 1 254] -#[ 0 13 2 22] -#[ 2 22 3 145] -#[ 2 22 3 149] -#[ 2 22 3 153] -#[ 1 46 2 22] -#[ 2 22 3 157] -#[ 1 166 2 66] -#[ 2 118 3 97] -#[ 2 118 3 105] -#[ 2 118 3 113] -#[ 2 142 2 146] -#[ 2 218 6 165] -#[ 0 70 1 150] -#[ 1 166 3 229] -#[ 1 102 1 210] -#[ 1 102 1 206 1 210] -#[ 0 6 4 237] -#[ 2 238 6 221] -#[ 3 22 4 141] -#[ 3 26 4 141] -#[ 2 78 5 121] -#[ 3 134 6 221] -#[ 3 166 6 221] -#[ 3 166 6 225] -#[ 3 170 6 221] -#[ 3 170 6 225] -#[ 4 118 4 122] -#[ 4 154 6 221] -#[ 4 166 8 129] -#[ 4 178 4 182] -#[ 5 30 6 221] -#[ 5 30 6 225] -#[ 5 50 9 109] -#[ 5 114 6 213] -#[ 5 114 6 217] -#[ 5 114 6 221] -#[ 5 114 6 225] -#[ 5 130 6 221] - ). -] - -{ #category : #'generated-accessing' } -SwiftParser class >> cacheId [ - ^'2019-04-15T17:16:18.538217-05:00' -] - -{ #category : #generated } -SwiftParser class >> definitionComment [ -"%glr; - -%root Parse; -%prefix Swift; -%suffix Node; - -%annotate_tokens; - -%hierarchy Statement ( - BranchStatement - ControlTransferStatement - DeclarationStatement - ExpressionStatement - LabeledStatement - LoopStatement -); -%hierarchy BranchStatement ( - IfStatement - SwitchStatement -); -%hierarchy LoopStatement ( - DoWhileStatement - ForStatement - ForInStatement - WhileStatement -); -%hierarchy ControlTransferStatement ( - BreakStatement - ContinueStatement - FallThroughStatement - ReturnStatement -); - - : \s+ - ; - - : \/\/ [^\r\n]* - | (\/\* [^\*]* \*+ ([^\/\*] [^\*]* \*+)* \/) - ; -file - : top_level_declaration {{}} - ; -############## -# Lexical Structure -############## - - : ([a-zA-Z_]) ([a-zA-Z_0-9])* - ; - - : \d+ - ; - - : $ - ; - - : - | ` ` - | - ; -identifier_list - : - | identifier_list "","" - ; - - : 0b[01][01_]* - ; - - : 0o[0-7][0-7_]* - ; - - : (|_)* - ; - - : 0x[0-9a-fA-F][0-9a-fA-F_]* - ; - - : - | - | - | - ; - - : \. - ; - - : [eE] [-+]? - ; - - : [0-9a-fA-F] - ; - - : \. ( | _)* - ; - - : [pP] [-+]? - ; - - : ? ? - | ? - ; - - : \\([0\\tnr\""\(] | x {2,2} | u {4,4} | U {8,8}) | [^\\\""\r\n] - ; - - : \"" * \"" - ; - - : \"" * \\ \( - ; - - : \\ \) * \"" - ; - - : \) * \\ \( - ; -string_literal - : -# | string_expression_literals - ; -#string_expression_literals -# : expression -# | string_expression_literals expression -# ; -literal - : - | - | string_literal - ; - - - : [\/\=\-\+\!\*\%\<\>\&\|\^\~\.] + - ; -binary_operator - : - ; -prefix_operator - : - ; -postfix_operator - : - ; -############### -# Statements -############### -statement - : expression 'expression' _semicolon {{ExpressionStatement}} - | declaration 'declaration' _semicolon {{DeclarationStatement}} - | loop_statement _semicolon {{LoopStatement}} - | branch_statement _semicolon {{BranchStatement}} - | labeled_statement _semicolon {{LabeledStatement}} - | control_transfer_statement _semicolon {{ControlTransferStatement}} - ; -statements - : statement 'statement' - | statements statement 'statement' - ; -loop_statement - : for_statement - | for_in_statement - | while_statement - | do_while_statement - ; -for_statement - : ""for"" _for_init "";"" _expression 'testExpression' "";"" _expression 'incrementExpression' code_block 'block' {{ForStatement}} - | ""for"" ""("" _for_init "";"" _expression 'testExpression' "";"" _expression 'incrementExpression' "")"" code_block 'block' {{ForStatement}} - ; -for_init - : variable_declaration 'expression' - | expression_list - ; -for_in_statement - : ""for"" pattern ""in"" expression 'expression' code_block 'block' {{ForInStatement}} - ; -while_statement - : ""while"" while_condition 'expression' code_block 'block' {{WhileStatement}} - ; -while_condition - : expression - | declaration - ; -do_while_statement - : ""do"" code_block 'block' ""while"" while_condition {{DoWhileStatement}} - ; -branch_statement - : if_statement - | switch_statement - ; -if_statement - : ""if"" if_condition code_block 'then' _else_clause {{IfStatement}} - ; -if_condition - : expression 'expression' - | declaration 'expression' - ; -else_clause - : ""else"" code_block 'else' - | ""else"" if_statement 'else' - ; -switch_statement - : ""switch"" expression 'expression' ""{"" _switch_cases ""}"" {{SwitchStatement}} - ; -switch_cases - : switch_case - | switch_cases switch_case - ; -switch_case - : case_label statements - | case_label "";"" - | default_label statements - | default_label "";"" - ; -case_label - : ""case"" case_item_list "":"" - ; -case_item_list - : pattern _guard_clause - | case_item_list "","" pattern _guard_clause - ; -default_label - : ""default"" "":"" - ; -guard_clause - : ""where"" guard_expression 'expression' - ; -guard_expression - : expression - ; -labeled_statement - : statement_label loop_statement 'statement' {{LabeledStatement}} - | statement_label switch_statement 'statement' {{LabeledStatement}} - ; -statement_label - : label_name "":"" - ; -label_name - : 'name' - ; -control_transfer_statement - : break_statement - | continue_statement - | fallthrough_statement - | return_statement - ; -break_statement - : ""break"" _label_name {{BreakStatement}} - ; -continue_statement - : ""continue"" _label_name {{ContinueStatement}} - ; -fallthrough_statement - : ""fallthrough"" {{FallThroughStatement}} - ; -return_statement - : ""return"" _expression {{ReturnStatement}} - ; -############## -# Generic Parameters and Arguments -############## -generic_parameter_clause - : ""<"" generic_parameter_list _requirement_clause "">"" - ; -generic_parameter_list - : generic_parameter - | generic_parameter_list "","" generic_parameter - ; -generic_parameter - : type_name - | type_name "":"" type_identifier - | type_name "":"" protocol_composition_type - ; -requirement_clause - : ""where"" requirement_list - ; -requirement_list - : requirement - | requirement_list "","" requirement - ; -requirement - : conformance_requirement - | same_type_requirement - ; -conformance_requirement - : type_identifier "":"" type_identifier - | type_identifier "":"" protocol_composition_type - ; -same_type_requirement - : type_identifier ""=="" type_identifier - ; -generic_argument_clause - : ""<"" generic_argument_list "">"" - ; -generic_argument_list - : generic_argument - | generic_argument_list "","" generic_argument - ; -generic_argument - : type - ; -################# -# Declarations -################# -declaration - : import_declaration - | constant_declaration - | variable_declaration - | typealias_declaration - | function_declaration - | enum_declaration - | struct_declaration - | class_declaration - | protocol_declaration - | initializer_declaration - | deinitializer_declaration - | extension_declaration - | subscript_declaration - | operator_declaration - ; -declarations - : - | declarations declaration 'declaration' - ; -declaration_specifiers - : - | declaration_specifiers declaration_specifier - ; -declaration_specifier - : ""class"" - | ""mutating"" - | ""nonmutating"" - | ""override"" - | ""static"" - | ""unowned"" - | ""unowned(safe)"" - | ""unowned(unsafe)"" - | ""weak"" - ; -top_level_declaration - : _statements - ; -code_block - : ""{"" _statements ""}"" {{Block}} - ; -import_declaration - : _attributes ""import"" _import_kind import_path {{}} - ; -import_kind - : ""typealias"" - | ""struct"" - | ""class"" - | ""enum"" - | ""protocol"" - | ""var"" - | ""func"" - ; -import_path - : import_path_identifier - | import_path ""."" import_path_identifier - ; -import_path_identifier - : - | - ; -constant_declaration - : _attributes _declaration_specifiers ""let"" pattern_initializer_list {{}} - ; -pattern_initializer_list - : pattern_initializer 'inializer' - | pattern_initializer_list "","" pattern_initializer 'inializer' - ; -pattern_initializer - : pattern _initializer {{}} - ; -initializer - : ""="" expression 'expression' - ; -variable_declaration - : variable_declaration_head pattern_initializer_list {{}} - | variable_declaration_head variable_name type_annotation code_block 'block' {{}} - | variable_declaration_head variable_name type_annotation getter_setter_block {{}} - | variable_declaration_head variable_name type_annotation getter_setter_keyword_block {{}} - | variable_declaration_head variable_name type_annotation _initializer willSet_didSet_block {{}} - ; -variable_declaration_head - : _attributes _declaration_specifiers ""var"" - ; -variable_name - : - ; -getter_setter_block - : ""{"" getter_clause _setter_clause ""}"" - | ""{"" setter_clause getter_clause ""}"" - ; -getter_clause - : _attributes ""get"" code_block 'block' - ; -setter_clause - : _attributes ""set"" _setter_name code_block 'block' - ; -setter_name - : ""("" "")"" - ; -getter_setter_keyword_block - : ""{"" getter_keyword_clause _setter_keyword_clause ""}"" - | ""{"" setter_keyword_clause getter_keyword_clause ""}"" - ; -getter_keyword_clause - : _attributes ""get"" - ; -setter_keyword_clause - : _attributes ""set"" - ; -willSet_didSet_block - : ""{"" willSet_clause _didSet_clause ""}"" - | ""{"" didSet_clause willSet_clause ""}"" - ; -willSet_clause - : _attributes ""willSet"" _setter_name code_block 'block' - ; -didSet_clause - : _attributes ""didSet"" _setter_name code_block 'block' - ; -typealias_declaration - : typealias_head typealias_assignment {{}} - ; -typealias_head - : ""typealias"" typealias_name - ; -typealias_name - : - ; -typealias_assignment - : ""="" type - ; -function_declaration - : function_head function_name _generic_parameter_clause function_signature function_body 'block' {{}} - ; -function_head - : _attributes _declaration_specifiers ""func"" - ; -function_name - : - | - ; -function_signature - : parameter_clauses _function_result - ; -function_result - : ""->"" _attributes type - ; -function_body - : code_block - ; -parameter_clauses - : - | parameter_clauses parameter_clause - ; -parameter_clause - : ""("" "")"" - | ""("" parameter_list _ellipsis "")"" - ; -parameter_list - : parameter - | parameter_list "","" parameter - ; -parameter - : _inout _let _hash parameter_name _local_parameter_name type_annotation _default_argument_clause - | _inout ""var"" _hash parameter_name _local_parameter_name type_annotation _default_argument_clause - | _attributes type - ; -parameter_name - : - | ""_"" - ; -local_parameter_name - : - | ""_"" - ; -default_argument_clause - : ""="" expression 'expression' - ; -enum_declaration - : _attributes union_style_enum {{}} - | _attributes raw_value_style_enum {{}} - ; -union_style_enum - : enum_name _generic_parameter_clause ""{"" _union_style_enum_members ""}"" - ; -union_style_enum_members - : union_style_enum_member - | union_style_enum_members union_style_enum_member - ; -union_style_enum_member - : declaration - | union_style_enum_case_clause - ; -union_style_enum_case_clause - : _attributes ""case"" union_style_enum_case_list - ; -union_style_enum_case_list - : union_style_enum_case - | union_style_enum_case_list "","" union_style_enum_case - ; -union_style_enum_case - : enum_case_name _tuple_type - ; -enum_name - : - ; -enum_case_name - : - ; -raw_value_style_enum - : enum_name _generic_parameter_clause "":"" type_identifier ""{"" _raw_value_style_enum_members ""}"" - ; -raw_value_style_enum_members - : raw_value_style_enum_member - | raw_value_style_enum_members raw_value_style_enum_member - ; -raw_value_style_enum_member - : declaration - | raw_value_style_enum_case_clause - ; -raw_value_style_enum_case_clause - : _attributes ""case"" raw_value_style_enum_case_list - ; -raw_value_style_enum_case_list - : raw_value_style_enum_case - | raw_value_style_enum_case_list "","" raw_value_style_enum_case - ; -raw_value_style_enum_case - : enum_case_name _raw_value_assignment - ; -raw_value_assignment - : ""="" literal - ; -struct_declaration - : _attributes ""struct"" struct_name _generic_parameter_clause _type_inheritance_clause struct_body {{}} - ; -struct_name - : - ; -struct_body - : ""{"" _declarations ""}"" - ; -class_declaration - : _attributes ""class"" class_name _generic_parameter_clause _type_inheritance_clause class_body {{}} - ; -class_name - : - ; -class_body - : ""{"" _declarations ""}"" - ; -protocol_declaration - : _attributes ""protocol"" protocol_name _type_inheritance_clause protocol_body {{}} - ; -protocol_name - : - ; -protocol_body - : ""{"" _protocol_member_declarations ""}"" - ; -protocol_member_declaration - : protocol_property_declaration - | protocol_method_declaration - | protocol_initializer_declaration - | protocol_subscript_declaration - | protocol_association_type_declaration - ; -protocol_member_declarations - : protocol_member_declaration 'declaration' - | protocol_member_declarations protocol_member_declaration 'declaration' - ; -protocol_property_declaration - : variable_declaration_head variable_name type_annotation getter_setter_keyword_block {{}} - ; -protocol_method_declaration - : function_head function_name _generic_parameter_clause function_signature {{}} - ; -protocol_initializer_declaration - : initializer_head _generic_parameter_clause parameter_clause {{}} - ; -protocol_subscript_declaration - : subscript_head subscript_result getter_setter_keyword_block {{}} - ; -protocol_association_type_declaration - : typealias_head _type_inheritance_clause _typealias_assignment {{}} - ; -initializer_declaration - : initializer_head _generic_parameter_clause parameter_clause initializer_body 'block' {{}} - ; -initializer_head - : _attributes _convenience ""init"" - ; -initializer_body - : code_block - ; -deinitializer_declaration - : _attributes ""deinit"" code_block 'block' {{}} - ; -extension_declaration - : ""extension"" type_identifier _type_inheritance_clause extension_body {{}} - ; -extension_body - : ""{"" _declarations ""}"" - ; -subscript_declaration - : subscript_head subscript_result code_block 'block' {{}} - | subscript_head subscript_result getter_setter_block {{}} - | subscript_head subscript_result getter_setter_keyword_block {{}} - ; -subscript_head - : _attributes ""subscript"" parameter_clause - ; -subscript_result - : ""->"" _attributes type - ; -operator_declaration - : prefix_operator_declaration - | postfix_operator_declaration - | infix_operator_declaration - ; -prefix_operator_declaration - : ""operator"" ""prefix"" ""{"" ""}"" {{}} - ; -postfix_operator_declaration - : ""operator"" ""postfix"" ""{"" ""}"" {{}} - ; -infix_operator_declaration - : ""operator"" ""infix"" ""{"" _infix_operator_attributes ""}"" {{}} - ; -infix_operator_attributes - : _precedence_clause _associativity_clause - ; -precedence_clause - : ""precedence"" precedence_level - ; -precedence_level - : - ; -associativity_clause - : ""associativity"" associativity - ; -associativity - : ""left"" - | ""right"" - | ""none"" - ; -###################### -# Patterns -###################### -pattern - : wildcard_pattern _type_annotation - | identifier_pattern _type_annotation - | value_binding_pattern - | tuple_pattern _type_annotation - | enum_case_pattern - | type_casting_pattern - | expression_pattern - ; -wildcard_pattern - : ""_"" - ; -identifier_pattern - : - ; -value_binding_pattern - : ""var"" pattern - | ""let"" pattern - ; -tuple_pattern - : ""("" _tuple_pattern_element_list "")"" - ; -tuple_pattern_element_list - : tuple_pattern_element - | tuple_pattern_element_list "","" tuple_pattern_element - ; -tuple_pattern_element - : pattern - ; -enum_case_pattern - : _type_identifier ""."" enum_case_name _tuple_pattern - ; -type_casting_pattern - : is_pattern - | as_pattern - ; -is_pattern - : ""is"" type - ; -as_pattern - : pattern ""as"" type - ; -expression_pattern - : expression 'expression' - ; -###################### -# Attributes -###################### -attribute - : ""@"" attribute_name _attribute_argument_clause - ; -attribute_name - : - ; -attribute_argument_clause - : ""("" _balanced_tokens "")"" - ; -attributes - : attribute - | attributes attribute - ; -balanced_tokens - : balanced_token - | balanced_tokens balanced_token - ; -balanced_token - : ""("" _balanced_tokens "")"" - | ""["" _balanced_tokens ""]"" - | ""{"" _balanced_tokens ""}"" - | - | literal - | - # “Any punctuation except (, ), [, ], {, or }” - ; -expression - : prefix_expression - | prefix_expression binary_expressions {{BinaryExpression}} - ; -expression_list - : expression 'expression' - | expression_list "","" expression 'expression' - ; -prefix_expression - : postfix_expression - | prefix_operator postfix_expression {{}} - | in_out_expression - ; -in_out_expression - : ""&"" {{}} - ; -binary_expression - : binary_operator prefix_expression {{BinaryOperator}} - | assignment_operator prefix_expression {{AssignmentOperator}} - | conditional_operator prefix_expression {{CondionalOperator}} - | type_casting_operator {{TypeCastOperator}} - ; -binary_expressions - : binary_expression 'operator' - | binary_expressions binary_expression 'operator' - ; -assignment_operator - : ""="" - ; -conditional_operator - : ""?"" expression 'trueExpression' "":"" - ; -type_casting_operator - : ""is"" type 'type' - | ""as"" type 'type' - | ""as"" ""?"" type 'type' - ; -primary_expression - : _generic_argument_clause {{}} - | literal_expression - | self_expression - | superclass_expression - | closure_expression - | parenthesized_expression - | implicit_member_expression - | wildcard_expression - ; -literal_expression - : literal {{}} - | array_literal {{}} - | dictionary_literal {{}} - | ""__FILE__"" {{}} - | ""__LINE__"" {{}} - | ""__COLUMN__"" {{}} - | ""__FUNCTION__"" {{}} - ; -array_literal - : ""["" _array_literal_items ""]"" - ; -array_literal_items - : array_literal_item _comma - | array_literal_item "","" array_literal_items - ; -array_literal_item - : expression 'expression' - ; -dictionary_literal - : ""["" dictionary_literal_items ""]"" - | ""["" "":"" ""]"" - ; -dictionary_literal_items - : dictionary_literal_item _comma - | dictionary_literal_item "","" dictionary_literal_items - ; -dictionary_literal_item - : expression 'keyExpression' "":"" expression 'valueExpression' - ; -self_expression - : ""self"" {{}} - | ""self"" ""."" {{}} - | ""self"" ""["" expression 'expression' ""]"" {{}} - | ""self"" ""."" ""init"" {{}} - ; -superclass_expression - : superclass_method_expression - | superclass_subscript_expression - | superclass_initializer_expression - ; -superclass_method_expression - : ""super"" ""."" {{}} - ; -superclass_subscript_expression - : ""super"" ""["" expression 'expression' ""]"" {{}} - ; -superclass_initializer_expression - : ""super"" ""."" ""init"" {{}} - ; -closure_expression - : ""{"" _closure_signature statements ""}"" {{}} - ; -closure_signature - : parameter_clause _function_result ""in"" - | identifier_list _function_result ""in"" - | capture_list parameter_clause _function_result ""in"" - | capture_list identifier_list _function_result ""in"" - | capture_list ""in"" - ; -capture_list - : ""["" capture_specifier expression 'expression' ""]"" - ; -capture_specifier - : ""weak"" - | ""unowned"" - | ""unowned(safe)"" - | ""unowned(unsafe)"" - ; -implicit_member_expression - : ""."" {{}} - ; -parenthesized_expression - : ""("" _expression_element_list "")"" {{}} - ; -expression_element_list - : expression_element - | expression_element_list "","" expression_element - ; -expression_element - : expression 'expression' - | "":"" expression 'expression' {{NamedExpression}} - ; -wildcard_expression - : ""_"" {{}} - ; -postfix_expression - : primary_expression - | postfix_expression postfix_operator - | function_call_expression - | initializer_expression - | explicit_member_expression - | postfix_self_expression - | dynamic_type_expression - | subscript_expression - | forced_value_expression - | optional_chaining_expression - ; -function_call_expression - : postfix_expression 'expression' parenthesized_expression {{}} - | postfix_expression 'expression' _parenthesized_expression trailing_closure {{}} - ; -trailing_closure - : closure_expression - ; -initializer_expression - : postfix_expression ""."" ""init"" {{}} - ; -explicit_member_expression - : postfix_expression ""."" {{}} - | postfix_expression ""."" _generic_argument_clause {{}} - ; -postfix_self_expression - : postfix_expression ""."" ""self"" {{}} - ; -dynamic_type_expression - : postfix_expression ""."" ""dynamicType"" {{}} - ; -subscript_expression - : postfix_expression ""["" expression_list ""]"" {{}} - ; -forced_value_expression - : postfix_expression 'expression' ""!"" {{}} - ; -optional_chaining_expression - : postfix_expression 'expression' ""?"" {{}} - ; -###################### -# Types -###################### -type - : array_type - | dictionary_type - | function_type - | type_identifier - | tuple_type - | optional_type - | implicitly_unwrapped_optional_type - | protocol_composition_type - | metatype_type - ; -type_annotation - : "":"" _attributes type - ; -type_identifier - : type_name _generic_argument_clause {{}} - | type_name _generic_argument_clause ""."" type_identifier {{}} - ; -type_name - : - ; -tuple_type - : ""("" _tuple_type_body "")"" {{}} - ; -tuple_type_body - : tuple_type_element_list _ellipsis - ; -tuple_type_element_list - : tuple_type_element - | tuple_type_element_list "","" tuple_type_element - ; -tuple_type_element - : _attributes _inout type - | _inout element_name type_annotation - ; -element_name - : - ; -function_type - : type ""->"" type {{}} - ; -array_type - : ""["" type ""]"" {{}} - ; -dictionary_type - : ""["" type "":"" type ""]"" {{}} - ; -optional_type - : type ""?"" {{}} - ; -implicitly_unwrapped_optional_type - : type ""!"" {{}} - ; -protocol_composition_type - : ""protocol"" ""<"" _protocol_identifier_list "">"" {{}} - ; -protocol_identifier_list - : protocol_identifier - | protocol_identifier_list "","" protocol_identifier - ; -protocol_identifier - : type_identifier - ; -metatype_type - : type ""."" ""Type"" {{}} - | type ""."" ""Protocol"" {{}} - ; -type_inheritance_clause - : "":"" type_inheritance_list - ; -type_inheritance_list - : type_identifier - | type_inheritance_list "","" type_identifier - ; -###################### -# Optional items -###################### -_array_literal_items - : - | array_literal_items - ; -_associativity_clause - : - | associativity_clause - ; -_attribute_argument_clause - : - | attribute_argument_clause - ; -_attributes - : - | attributes - ; -_balanced_tokens - : - | balanced_tokens - ; -_binary_expressions - : - | binary_expressions - ; -_closure_signature - : - | closure_signature - ; -_comma - : - | "","" - ; -_convenience - : - | ""convenience"" - ; -_declaration_specifiers - : - | declaration_specifiers - ; -_declarations - : - | declarations - ; -_default_argument_clause - : - | default_argument_clause - ; -_didSet_clause - : - | didSet_clause - ; -_ellipsis - : - | ""..."" - ; -_else_clause - : - | else_clause - ; -_expression - : - | expression 'expression' - ; -_expression_element_list - : - | expression_element_list - ; -_generic_argument_clause - : - | generic_argument_clause - ; -_generic_parameter_clause - : - | generic_parameter_clause - ; -_guard_clause - : - | guard_clause - ; -_for_init - : - | for_init - ; -_function_result - : - | function_result - ; -_hash - : - | ""#"" - ; -_import_kind - : - | import_kind - ; -_infix_operator_attributes - : - | infix_operator_attributes - ; -_initializer - : - | initializer - ; -_inout - : - | ""inout"" - ; -_label_name - : - | label_name - ; -_let - : - | ""let"" - ; -_local_parameter_name - : - | local_parameter_name - ; -_parenthesized_expression - : - | parenthesized_expression - ; -_precedence_clause - : - | precedence_clause - ; -_prefix_operator - : - | prefix_operator - ; -_protocol_identifier_list - : - | protocol_identifier_list - ; -_protocol_member_declarations - : - | protocol_member_declarations - ; -_raw_value_assignment - : - | raw_value_assignment - ; -_raw_value_style_enum_members - : - | raw_value_style_enum_members - ; -_requirement_clause - : - | requirement_clause - ; -_semicolon - : - | "";"" - ; -_setter_clause - : - | setter_clause - ; -_setter_keyword_clause - : - | setter_keyword_clause - ; -_setter_name - : - | setter_name - ; -_statements - : - | statements - ; -_switch_cases - : - | switch_cases - ; -_tuple_pattern - : - | tuple_pattern - ; -_tuple_pattern_element_list - : - | tuple_pattern_element_list - ; -_tuple_type - : - | tuple_type - ; -_tuple_type_body - : - | tuple_type_body - ; -_typealias_assignment - : - | typealias_assignment - ; -_type_annotation - : - | type_annotation - ; -_type_identifier - : - | type_identifier - ; -_type_inheritance_clause - : - | type_inheritance_clause - ; -_union_style_enum_members - : - | union_style_enum_members - ;" -] - -{ #category : #generated } -SwiftParser class >> reduceTable [ -^#( - #(315 0 #reduceActionFor_attributes1: 21786625 false ) - #(354 0 #reduceActionFor_statements1: 23508993 false ) - #(328 0 #reduceActionFor_expression_element_list1: 22318081 false ) - #(312 0 #reduceActionFor_array_literal_items1: 21618689 false ) - #(281 1 #reduceActionForwildcard_expression1: 18946049 false ) - #(261 1 #reduceActionForliteral_expression6: 16980998 false ) - #(261 1 #reduceActionForliteral_expression4: 16980996 false ) - #(261 1 #reduceActionForliteral_expression7: 16980999 false ) - #(261 1 #reduceActionForliteral_expression5: 16980997 false ) - #(339 0 #nil 22788097 false ) - #(126 1 #reduceActionForfallthrough_statement1: 5109761 false ) - #(362 0 #nil 23857153 false ) - #(332 0 #reduceActionFor_array_literal_items1: 22536193 false ) - #(327 0 #nil 22272001 false ) - #(268 1 #reduceActionForself_expression1: 17643521 false ) - #(318 0 #reduceActionFor_closure_signature1: 21911553 false ) - #(329 0 #reduceActionFor_generic_argument_clause1: 22377473 false ) - #(122 1 #liftFirstValue: 4818945 false ) - #(95 1 #reduceActionForliteral1: 2267137 false ) - #(95 1 #reduceActionForliteral2: 2267138 false ) - #(94 1 #liftFirstValue: 2030593 false ) - #(97 1 #liftFirstValue: 2433025 false ) - #(95 1 #reduceActionForliteral3: 2267139 false ) - #(261 1 #reduceActionForliteral_expression1: 16980993 false ) - #(100 1 #reduceActionForstatements1: 2917377 false ) - #(354 1 #reduceActionFor_statements2: 23508994 false ) - #(350 0 #nil 23353345 false ) - #(101 1 #liftFirstValue: 2994177 false ) - #(101 1 #liftFirstValue: 2994178 false ) - #(101 1 #liftFirstValue: 2994179 false ) - #(101 1 #liftFirstValue: 2994180 false ) - #(108 1 #liftFirstValue: 3796993 false ) - #(108 1 #liftFirstValue: 3796994 false ) - #(123 1 #liftFirstValue: 4856833 false ) - #(123 1 #liftFirstValue: 4856834 false ) - #(123 1 #liftFirstValue: 4856835 false ) - #(123 1 #liftFirstValue: 4856836 false ) - #(92 1 #reduceActionForfile1: 599041 false ) - #(139 1 #liftFirstValue: 6216705 false ) - #(139 1 #liftFirstValue: 6216706 false ) - #(139 1 #liftFirstValue: 6216707 false ) - #(139 1 #liftFirstValue: 6216708 false ) - #(139 1 #liftFirstValue: 6216709 false ) - #(139 1 #liftFirstValue: 6216710 false ) - #(139 1 #liftFirstValue: 6216711 false ) - #(139 1 #liftFirstValue: 6216712 false ) - #(139 1 #liftFirstValue: 6216713 false ) - #(139 1 #liftFirstValue: 6216714 false ) - #(330 0 #reduceActionFor_generic_parameter_clause1: 22436865 false ) - #(139 1 #liftFirstValue: 6216715 false ) - #(139 1 #liftFirstValue: 6216716 false ) - #(139 1 #liftFirstValue: 6216717 false ) - #(139 1 #liftFirstValue: 6216718 false ) - #(224 1 #liftFirstValue: 13775873 false ) - #(224 1 #liftFirstValue: 13775874 false ) - #(224 1 #liftFirstValue: 13775875 false ) - #(248 1 #reduceActionForattributes1: 15515649 false ) - #(315 1 #reduceActionFor_statements2: 21786626 false ) - #(251 1 #liftFirstValue: 15836161 false ) - #(253 1 #liftFirstValue: 16030723 false ) - #(282 1 #reduceActionForpostfix_expression1: 18981889 false ) - #(260 1 #liftFirstValue: 16738306 false ) - #(261 1 #reduceActionForliteral_expression2: 16980994 false ) - #(261 1 #reduceActionForliteral_expression3: 16980995 false ) - #(260 1 #liftFirstValue: 16738307 false ) - #(260 1 #liftFirstValue: 16738308 false ) - #(269 1 #liftFirstValue: 17785857 false ) - #(269 1 #liftFirstValue: 17785858 false ) - #(269 1 #liftFirstValue: 17785859 false ) - #(260 1 #liftFirstValue: 16738309 false ) - #(260 1 #liftFirstValue: 16738311 false ) - #(260 1 #liftFirstValue: 16738310 false ) - #(260 1 #liftFirstValue: 16738312 false ) - #(253 1 #liftFirstValue: 16030721 false ) - #(342 0 #nil 22895617 false ) - #(282 1 #reduceActionForpostfix_expression1: 18981891 false ) - #(282 1 #reduceActionForpostfix_expression1: 18981892 false ) - #(282 1 #reduceActionForpostfix_expression1: 18981893 false ) - #(282 1 #reduceActionForpostfix_expression1: 18981894 false ) - #(282 1 #reduceActionForpostfix_expression1: 18981895 false ) - #(282 1 #reduceActionForpostfix_expression1: 18981896 false ) - #(282 1 #reduceActionForpostfix_expression1: 18981897 false ) - #(282 1 #reduceActionForpostfix_expression1: 18981898 false ) - #(141 0 #reduceActionFordeclaration_specifiers1: 6639617 false ) - #(321 0 #reduceActionFordeclaration_specifiers1: 22016001 false ) - #(320 0 #nil 21979137 false ) - #(143 1 #reduceActionFor_statements2: 6880257 false ) - #(254 2 #reduceActionForin_out_expression1: 16140289 false ) - #(280 1 #liftFirstValue: 18830337 false ) - #(328 1 #reduceActionFor_statements2: 22318082 false ) - #(279 1 #reduceActionFor_expression_element_list1: 18728961 false ) - #(277 2 #reduceActionForimplicit_member_expression1: 18600961 false ) - #(246 1 #liftFirstValue: 15422465 false ) - #(314 0 #reduceActionFor_attribute_argument_clause1: 21723137 false ) - #(264 1 #liftFirstValue: 17304577 false ) - #(312 1 #reduceActionFor_statements2: 21618690 false ) - #(319 0 #nil 21958657 false ) - #(339 1 #liftFirstValue: 22788098 false ) - #(124 2 #reduceActionForbreak_statement1: 4975617 false ) - #(125 2 #reduceActionForcontinue_statement1: 5038081 false ) - #(295 1 #liftFirstValue: 20525057 false ) - #(363 0 #reduceActionFor_type_inheritance_clause1: 23900161 false ) - #(357 0 #reduceActionFor_tuple_pattern_element_list1: 23618561 false ) - #(234 1 #liftFirstValue: 14720001 false ) - #(235 1 #liftFirstValue: 14747649 false ) - #(332 1 #reduceActionFor_statements2: 22536194 false ) - #(103 1 #reduceActionForfor_init1: 3376129 false ) - #(361 0 #reduceActionFor_type_annotation1: 23814145 false ) - #(233 1 #reduceActionForpattern3: 14501891 false ) - #(233 1 #reduceActionForpattern5: 14501893 false ) - #(233 1 #reduceActionForpattern6: 14501894 false ) - #(241 1 #reduceActionFortype_casting_pattern1: 15131649 false ) - #(241 1 #reduceActionFortype_casting_pattern2: 15131650 false ) - #(233 1 #reduceActionForpattern7: 14501895 false ) - #(252 1 #reduceActionForfor_init1: 15935489 false ) - #(244 1 #liftFirstValue: 15248385 false ) - #(103 1 #reduceActionFor_statements2: 3376130 false ) - #(362 1 #liftFirstValue: 23857154 false ) - #(110 1 #liftFirstValue: 3940354 false ) - #(110 1 #liftFirstValue: 3940353 false ) - #(327 1 #liftFirstValue: 22272002 false ) - #(127 2 #reduceActionForreturn_statement1: 5178369 false ) - #(168 1 #liftFirstValue: 9073665 false ) - #(167 2 #reduceActionFortypealias_head1: 9024513 false ) - #(106 1 #liftFirstValue: 3651586 false ) - #(106 1 #liftFirstValue: 3651585 false ) - #(338 0 #nil 22762497 false ) - #(93 1 #reduceActionForfor_init1: 861185 false ) - #(333 0 #reduceActionFor_type_annotation1: 22564865 false ) - #(318 1 #reduceActionFor_statements2: 21911554 false ) - #(329 1 #reduceActionFor_statements2: 22377474 false ) - #(260 2 #reduceActionForprimary_expression1: 16738305 false ) - #(253 2 #reduceActionForprefix_expression2: 16030722 false ) - #(100 2 #reduceActionForstatements2: 2917378 false ) - #(350 1 #liftFirstValue: 23353346 false ) - #(99 2 #reduceActionForstatement3: 2547715 false ) - #(99 2 #reduceActionForstatement3: 2547716 false ) - #(99 2 #reduceActionForstatement3: 2547717 false ) - #(120 2 #reduceActionForlabeled_statement1: 4619265 false ) - #(120 2 #reduceActionForlabeled_statement1: 4619266 false ) - #(121 2 #reduceActionFortypealias_head1: 4781057 false ) - #(99 2 #reduceActionForstatement3: 2547718 false ) - #(99 2 #reduceActionForstatement2: 2547714 false ) - #(155 1 #liftFirstValue: 8145921 false ) - #(153 2 #reduceActionForvariable_declaration1: 7619585 false ) - #(150 1 #reduceActionForfor_init1: 7389185 false ) - #(337 0 #reduceActionFor_initializer1: 22726657 false ) - #(166 2 #reduceActionFortypealias_declaration1: 8953857 false ) - #(172 1 #reduceActionForfunction_name1: 9340929 false ) - #(172 1 #reduceActionForfunction_name2: 9340930 false ) - #(330 1 #reduceActionFor_statements2: 22436866 false ) - #(248 2 #reduceActionForattributes2: 15515650 false ) - #(99 2 #reduceActionForstatement1: 2547713 false ) - #(257 1 #liftFirstValue: 16551937 false ) - #(96 1 #liftFirstValue: 2399233 false ) - #(256 1 #reduceActionForstatements1: 16444417 false ) - #(251 2 #reduceActionForexpression2: 15836162 false ) - #(255 1 #reduceActionForbinary_expression4: 16187396 false ) - #(290 2 #reduceActionForforced_value_expression1: 19950593 false ) - #(291 2 #reduceActionForoptional_chaining_expression1: 20023297 false ) - #(98 1 #liftFirstValue: 2466817 false ) - #(282 2 #reduceActionForpostfix_expression2: 18981890 false ) - #(283 2 #reduceActionForfunction_call_expression1: 19293185 false ) - #(342 1 #liftFirstValue: 22895618 false ) - #(320 1 #liftFirstValue: 21979138 false ) - #(335 0 #reduceActionFor_import_kind1: 22627329 false ) - #(190 1 #liftFirstValue: 10744833 false ) - #(321 1 #reduceActionFor_statements2: 22016002 false ) - #(183 2 #reduceActionForenum_declaration1: 10110977 false ) - #(183 2 #reduceActionForenum_declaration2: 10110978 false ) - #(278 3 #reduceActionForparenthesized_expression1: 18657281 false ) - #(316 0 #reduceActionFor_attribute_argument_clause1: 21819393 false ) - #(314 1 #reduceActionFor_statements2: 21723138 false ) - #(245 3 #reduceActionForattribute1: 15358977 false ) - #(265 3 #reduceActionFordictionary_literal2: 17354754 false ) - #(319 1 #liftFirstValue: 21958658 false ) - #(263 2 #reduceActionForarray_literal_items1: 17204225 false ) - #(265 3 #reduceActionFordictionary_literal1: 17354753 false ) - #(266 2 #reduceActionFordictionary_literal_items1: 17430529 false ) - #(262 3 #reduceActionForarray_literal1: 17154049 false ) - #(363 1 #reduceActionFor_statements2: 23900162 false ) - #(294 2 #reduceActionFortype_identifier1: 20397057 false ) - #(239 1 #reduceActionFor_statements2: 15017985 false ) - #(357 1 #reduceActionFor_tuple_pattern_element_list2: 23618562 false ) - #(238 1 #reduceActionFor_statements2: 14904321 false ) - #(359 0 #reduceActionFor_type_annotation1: 23717889 false ) - #(242 2 #reduceActionForis_pattern1: 15184897 false ) - #(292 1 #liftFirstValue: 20156420 false ) - #(292 1 #liftFirstValue: 20156421 false ) - #(292 1 #liftFirstValue: 20156419 false ) - #(292 1 #liftFirstValue: 20156417 false ) - #(292 1 #liftFirstValue: 20156418 false ) - #(292 1 #liftFirstValue: 20156422 false ) - #(292 1 #liftFirstValue: 20156423 false ) - #(292 1 #liftFirstValue: 20156424 false ) - #(292 1 #liftFirstValue: 20156425 false ) - #(236 2 #reduceActionForvalue_binding_pattern2: 14786562 false ) - #(236 2 #reduceActionForvalue_binding_pattern1: 14786561 false ) - #(361 1 #reduceActionFor_statements2: 23814146 false ) - #(233 2 #reduceActionForpattern1: 14501889 false ) - #(233 2 #reduceActionForpattern2: 14501890 false ) - #(233 2 #reduceActionForpattern4: 14501892 false ) - #(326 0 #reduceActionFor_initializer1: 22236161 false ) - #(268 3 #reduceActionForself_expression4: 17643524 false ) - #(268 3 #reduceActionForself_expression2: 17643522 false ) - #(272 3 #reduceActionForsuperclass_initializer_expression1: 18069505 false ) - #(270 3 #reduceActionForsuperclass_method_expression1: 17917953 false ) - #(355 0 #reduceActionFor_switch_cases1: 23541761 false ) - #(105 3 #reduceActionForwhile_statement1: 3552257 false ) - #(177 2 #reduceActionForparameter_clause1: 9590785 false ) - #(338 1 #liftFirstValue: 22762498 false ) - #(325 0 #nil 22210561 false ) - #(178 1 #reduceActionForparameter_list1: 9659393 false ) - #(340 0 #nil 22821889 false ) - #(276 1 #reduceActionForcapture_specifier2: 18514946 false ) - #(276 1 #reduceActionForcapture_specifier3: 18514947 false ) - #(276 1 #reduceActionForcapture_specifier4: 18514948 false ) - #(276 1 #reduceActionForcapture_specifier1: 18514945 false ) - #(333 1 #reduceActionFor_statements2: 22564866 false ) - #(274 2 #reduceActionForclosure_signature5: 18204677 false ) - #(137 1 #reduceActionForgeneric_argument_list1: 6042625 false ) - #(138 1 #liftFirstValue: 6135809 false ) - #(337 1 #reduceActionFor_statements2: 22726658 false ) - #(151 2 #reduceActionForpattern_initializer1: 7519233 false ) - #(169 2 #reduceActionForis_pattern1: 9108481 false ) - #(176 0 #reduceActionForparameter_clauses1: 9527297 false ) - #(349 0 #reduceActionFor_requirement_clause1: 23304193 false ) - #(129 1 #reduceActionForgeneric_parameter_list1: 5394433 false ) - #(130 1 #reduceActionForgeneric_parameter1: 5491713 false ) - #(221 3 #reduceActionForsubscript_declaration1: 13449217 false ) - #(221 3 #reduceActionForsubscript_declaration2: 13449218 false ) - #(221 3 #reduceActionForsubscript_declaration3: 13449219 false ) - #(259 2 #reduceActionFortype_casting_operator2: 16647170 false ) - #(259 2 #reduceActionFortype_casting_operator1: 16647169 false ) - #(255 2 #reduceActionForbinary_expression1: 16187393 false ) - #(256 2 #reduceActionForstatements2: 16444418 false ) - #(255 2 #reduceActionForbinary_expression2: 16187394 false ) - #(255 2 #reduceActionForbinary_expression3: 16187395 false ) - #(288 3 #reduceActionFordynamic_type_expression1: 19800065 false ) - #(285 3 #reduceActionForinitializer_expression1: 19516417 false ) - #(287 3 #reduceActionForpostfix_self_expression1: 19733505 false ) - #(286 3 #reduceActionForexplicit_member_expression1: 19581953 false ) - #(284 1 #liftFirstValue: 19473409 false ) - #(283 3 #reduceActionForfunction_call_expression1: 19293186 false ) - #(203 1 #liftFirstValue: 11801601 false ) - #(218 3 #reduceActionFordeinitializer_declaration1: 13222913 false ) - #(146 1 #reduceActionForimport_kind3: 7047171 false ) - #(146 1 #reduceActionForimport_kind4: 7047172 false ) - #(146 1 #reduceActionForimport_kind7: 7047175 false ) - #(146 1 #reduceActionForimport_kind5: 7047173 false ) - #(146 1 #reduceActionForimport_kind2: 7047170 false ) - #(146 1 #reduceActionForimport_kind1: 7047169 false ) - #(146 1 #reduceActionForimport_kind6: 7047174 false ) - #(335 1 #reduceActionFor_statements2: 22627330 false ) - #(206 1 #liftFirstValue: 11982849 false ) - #(200 1 #liftFirstValue: 11603969 false ) - #(222 3 #reduceActionForsubscript_head1: 13666305 false ) - #(142 1 #reduceActionFordeclaration_specifier1: 6720513 false ) - #(142 1 #reduceActionFordeclaration_specifier2: 6720514 false ) - #(142 1 #reduceActionFordeclaration_specifier3: 6720515 false ) - #(142 1 #reduceActionFordeclaration_specifier4: 6720516 false ) - #(142 1 #reduceActionFordeclaration_specifier5: 6720517 false ) - #(142 1 #reduceActionFordeclaration_specifier6: 6720518 false ) - #(142 1 #reduceActionFordeclaration_specifier7: 6720519 false ) - #(142 1 #reduceActionFordeclaration_specifier8: 6720520 false ) - #(142 1 #reduceActionFordeclaration_specifier9: 6720521 false ) - #(141 2 #reduceActionFordeclaration_specifiers2: 6639618 false ) - #(216 3 #reduceActionForinitializer_head1: 13131777 false ) - #(171 3 #reduceActionForfunction_head1: 9275393 false ) - #(154 3 #reduceActionForfunction_head1: 8070145 false ) - #(280 3 #reduceActionForexpression_element2: 18830338 false ) - #(279 3 #reduceActionForexpression_element_list2: 18728962 false ) - #(250 1 #reduceActionForbalanced_token4: 15640580 false ) - #(250 1 #reduceActionForbalanced_token6: 15640582 false ) - #(250 1 #reduceActionForbalanced_token5: 15640581 false ) - #(316 1 #reduceActionFor_statements2: 21819394 false ) - #(249 1 #reduceActionFor_statements2: 15567873 false ) - #(267 3 #reduceActionFordictionary_literal_item1: 17551361 false ) - #(263 3 #reduceActionForarray_literal_items2: 17204226 false ) - #(266 3 #reduceActionFordictionary_literal_items2: 17430530 false ) - #(144 3 #reduceActionForcode_block1: 6921217 false ) - #(107 4 #reduceActionFordo_while_statement1: 3700737 false ) - #(311 1 #reduceActionFortype_inheritance_list1: 21463041 false ) - #(310 2 #reduceActionFortype_inheritance_clause1: 21405697 false ) - #(140 0 #reduceActionFor_statements1: 6576129 false ) - #(322 0 #reduceActionFor_statements1: 22073345 false ) - #(219 4 #reduceActionForextension_declaration1: 13301761 false ) - #(237 3 #reduceActionFortuple_pattern1: 14846977 false ) - #(359 1 #reduceActionFor_statements2: 23717890 false ) - #(298 1 #reduceActionFor_statements2: 20660225 false ) - #(345 0 #reduceActionFortype_inheritance_list1: 23047169 false ) - #(305 2 #reduceActionForimplicitly_unwrapped_optional_type1: 21046273 false ) - #(304 2 #reduceActionForoptional_type1: 21011457 false ) - #(243 3 #reduceActionForas_pattern1: 15212545 false ) - #(252 3 #reduceActionForexpression_list2: 15935490 false ) - #(191 1 #liftFirstValue: 10774529 false ) - #(356 0 #reduceActionFor_tuple_pattern_element_list1: 23579649 false ) - #(326 1 #reduceActionFor_statements2: 22236162 false ) - #(109 4 #reduceActionForif_statement1: 3854337 false ) - #(343 0 #reduceActionFor_initializer1: 22957057 false ) - #(336 0 #reduceActionFor_infix_operator_attributes1: 22663169 false ) - #(268 4 #reduceActionForself_expression3: 17643523 false ) - #(271 4 #reduceActionForsuperclass_subscript_expression1: 17984513 false ) - #(355 1 #reduceActionFor_switch_cases2: 23541762 false ) - #(113 1 #reduceActionForswitch_cases1: 4188161 false ) - #(325 1 #liftFirstValue: 22210562 false ) - #(179 2 #reduceActionForparameter3: 9723907 false ) - #(340 1 #liftFirstValue: 22821890 false ) - #(334 0 #nil 22607873 false ) - #(93 3 #reduceActionForexpression_list2: 861186 false ) - #(274 3 #reduceActionForclosure_signature2: 18204674 false ) - #(274 3 #reduceActionForclosure_signature1: 18204673 false ) - #(273 4 #reduceActionForclosure_expression1: 18135041 false ) - #(136 3 #reduceActionForgeneric_argument_clause1: 5981185 false ) - #(150 3 #reduceActionForexpression_list2: 7389186 false ) - #(153 4 #reduceActionForvariable_declaration2: 7619586 false ) - #(153 4 #reduceActionForvariable_declaration3: 7619587 false ) - #(153 4 #reduceActionForvariable_declaration4: 7619588 false ) - #(152 2 #reduceActionFortypealias_head1: 7572481 false ) - #(349 1 #reduceActionFor_statements2: 23304194 false ) - #(217 1 #liftFirstValue: 13188097 false ) - #(215 4 #reduceActionForinitializer_declaration1: 13008897 false ) - #(223 3 #reduceActionForsubscript_result1: 13729793 false ) - #(351 0 #reduceActionFor_setter_clause1: 23377921 false ) - #(352 0 #reduceActionFor_setter_keyword_clause1: 23417857 false ) - #(258 3 #reduceActionFordictionary_literal_item1: 16582657 false ) - #(259 3 #reduceActionFortype_casting_operator3: 16647171 false ) - #(286 4 #reduceActionForexplicit_member_expression2: 19581954 false ) - #(289 4 #reduceActionForsubscript_expression1: 19873793 false ) - #(148 1 #reduceActionForfunction_name1: 7230465 false ) - #(148 1 #reduceActionForfunction_name2: 7230466 false ) - #(145 4 #reduceActionForimport_declaration1: 6969345 false ) - #(147 1 #reduceActionForimport_path1: 7145473 false ) - #(364 0 #reduceActionFor_union_style_enum_members1: 23959553 false ) - #(149 4 #reduceActionForconstant_declaration1: 7287809 false ) - #(249 2 #reduceActionForbalanced_tokens2: 15567874 false ) - #(247 3 #reduceActionForattribute_argument_clause1: 15457281 false ) - #(322 1 #reduceActionFor_statements2: 22073346 false ) - #(294 4 #reduceActionFortype_identifier2: 20397058 false ) - #(238 3 #reduceActionFortuple_pattern_element_list2: 14904322 false ) - #(297 2 #reduceActionFortuple_type_body1: 20602881 false ) - #(300 1 #liftFirstValue: 20851713 false ) - #(296 3 #reduceActionFortuple_type1: 20554753 false ) - #(302 3 #reduceActionForarray_type1: 20925441 false ) - #(308 1 #liftFirstValue: 21292033 false ) - #(345 1 #reduceActionFor_protocol_identifier_list2: 23047170 false ) - #(307 1 #reduceActionFortype_inheritance_list1: 21186561 false ) - #(301 3 #reduceActionForfunction_type1: 20884481 false ) - #(309 3 #reduceActionFormetatype_type2: 21335042 false ) - #(309 3 #reduceActionFormetatype_type1: 21335041 false ) - #(104 5 #reduceActionForfor_in_statement1: 3445761 false ) - #(293 3 #reduceActionForsubscript_result1: 20353025 false ) - #(356 1 #reduceActionFor_statements2: 23579650 false ) - #(240 4 #reduceActionForenum_case_pattern1: 15054849 false ) - #(111 2 #reduceActionFortypealias_head1: 4013058 false ) - #(111 2 #reduceActionFortypealias_head1: 4013057 false ) - #(336 1 #reduceActionFor_statements2: 22663170 false ) - #(343 1 #reduceActionFor_statements2: 22957058 false ) - #(313 0 #reduceActionFor_associativity_clause1: 21669889 false ) - #(226 5 #reduceActionForpostfix_operator_declaration1: 13975553 false ) - #(225 5 #reduceActionForprefix_operator_declaration1: 13895681 false ) - #(331 0 #reduceActionFor_initializer1: 22499329 false ) - #(117 2 #reduceActionFortypealias_head1: 4491265 false ) - #(113 2 #reduceActionForswitch_cases2: 4188162 false ) - #(114 2 #reduceActionForswitch_case2: 4248578 false ) - #(114 2 #reduceActionForswitch_case1: 4248577 false ) - #(114 2 #reduceActionForswitch_case4: 4248580 false ) - #(114 2 #reduceActionForswitch_case3: 4248579 false ) - #(112 5 #reduceActionForswitch_statement1: 4087809 false ) - #(178 3 #reduceActionForparameter_list2: 9659394 false ) - #(177 4 #reduceActionForparameter_clause2: 9590786 false ) - #(334 1 #liftFirstValue: 22607874 false ) - #(275 4 #reduceActionForcapture_list1: 18444289 false ) - #(174 3 #reduceActionForsubscript_result1: 9450497 false ) - #(274 4 #reduceActionForclosure_signature4: 18204676 false ) - #(274 4 #reduceActionForclosure_signature3: 18204675 false ) - #(137 3 #reduceActionForgeneric_argument_list2: 6042626 false ) - #(153 5 #reduceActionForvariable_declaration5: 7619589 false ) - #(175 1 #liftFirstValue: 9495553 false ) - #(170 5 #reduceActionForfunction_declaration1: 9145345 false ) - #(176 2 #reduceActionForparameter_clauses2: 9527298 false ) - #(173 2 #reduceActionForfunction_signature1: 9389057 false ) - #(129 3 #reduceActionForgeneric_parameter_list2: 5394434 false ) - #(131 2 #reduceActionForrequirement_clause1: 5604353 false ) - #(132 1 #reduceActionForrequirement_list1: 5655553 false ) - #(133 1 #reduceActionForrequirement1: 5728257 false ) - #(133 1 #reduceActionForrequirement2: 5728258 false ) - #(128 4 #reduceActionForgeneric_parameter_clause1: 5310465 false ) - #(130 3 #reduceActionForgeneric_parameter2: 5491714 false ) - #(130 3 #reduceActionForgeneric_parameter2: 5491715 false ) - #(351 1 #reduceActionFor_statements2: 23377922 false ) - #(352 1 #reduceActionFor_statements2: 23417858 false ) - #(161 2 #reduceActionForgetter_keyword_clause1: 8599553 false ) - #(162 2 #reduceActionForgetter_keyword_clause1: 8646657 false ) - #(353 0 #reduceActionFor_setter_name1: 23473153 false ) - #(346 0 #reduceActionFor_statements1: 23109633 false ) - #(205 5 #reduceActionForprotocol_declaration1: 11872257 false ) - #(186 1 #reduceActionFor_union_style_enum_members1: 10416129 false ) - #(364 1 #reduceActionFor_union_style_enum_members2: 23959554 false ) - #(185 1 #reduceActionFor_statements2: 10306561 false ) - #(186 1 #reduceActionForunion_style_enum_member2: 10416130 false ) - #(250 3 #reduceActionForattribute_argument_clause1: 15640577 false ) - #(250 3 #reduceActionForbalanced_token2: 15640578 false ) - #(250 3 #reduceActionForbalanced_token3: 15640579 false ) - #(311 3 #reduceActionFortype_inheritance_list2: 21463042 false ) - #(140 2 #reduceActionForstatements2: 6576130 false ) - #(220 3 #reduceActionForextension_body1: 13405185 false ) - #(298 3 #reduceActionFortuple_type_element_list2: 20660226 false ) - #(299 3 #reduceActionFortuple_type_element1: 20761601 false ) - #(299 3 #reduceActionFortuple_type_element2: 20761602 false ) - #(306 4 #reduceActionForprotocol_composition_type1: 21102593 false ) - #(230 1 #liftFirstValue: 14294017 false ) - #(229 2 #reduceActionFortypealias_head1: 14238721 false ) - #(227 6 #reduceActionForinfix_operator_declaration1: 14058497 false ) - #(313 1 #reduceActionFor_statements2: 21669890 false ) - #(228 2 #reduceActionForinfix_operator_attributes1: 14163969 false ) - #(115 3 #reduceActionForcase_label1: 4358145 false ) - #(331 1 #reduceActionFor_statements2: 22499330 false ) - #(116 2 #reduceActionForcase_item_list1: 4402177 false ) - #(180 1 #reduceActionForfunction_name2: 9961474 false ) - #(180 1 #reduceActionForfunction_name1: 9961473 false ) - #(341 0 #reduceActionFor_initializer1: 22842369 false ) - #(324 0 #reduceActionFor_setter_clause1: 22171649 false ) - #(156 4 #reduceActionForgetter_setter_block1: 8179713 false ) - #(156 4 #reduceActionForgetter_setter_block2: 8179714 false ) - #(160 4 #reduceActionForgetter_setter_keyword_block1: 8454145 false ) - #(160 4 #reduceActionForgetter_setter_keyword_block2: 8454146 false ) - #(157 3 #reduceActionForinitializer_head1: 8284161 false ) - #(353 1 #reduceActionFor_statements2: 23473154 false ) - #(202 6 #reduceActionForclass_declaration1: 11676673 false ) - #(147 3 #reduceActionForimport_path2: 7145474 false ) - #(209 1 #reduceActionForstatements1: 12286977 false ) - #(346 1 #reduceActionFor_statements2: 23109634 false ) - #(208 1 #liftFirstValue: 12076033 false ) - #(208 1 #liftFirstValue: 12076034 false ) - #(208 1 #liftFirstValue: 12076035 false ) - #(208 1 #liftFirstValue: 12076036 false ) - #(208 1 #liftFirstValue: 12076037 false ) - #(199 6 #reduceActionForstruct_declaration1: 11474945 false ) - #(348 0 #reduceActionFor_union_style_enum_members1: 23233537 false ) - #(185 2 #reduceActionForunion_style_enum_members2: 10306562 false ) - #(184 5 #reduceActionForunion_style_enum1: 10211329 false ) - #(303 5 #reduceActionFordictionary_type1: 20961281 false ) - #(307 3 #reduceActionFortype_inheritance_list2: 21186562 false ) - #(102 7 #reduceActionForfor_statement1: 3092481 false ) - #(232 1 #reduceActionForliteral1: 14394369 false ) - #(232 1 #reduceActionForliteral3: 14394371 false ) - #(232 1 #reduceActionForliteral2: 14394370 false ) - #(231 2 #reduceActionForassociativity_clause1: 14336001 false ) - #(118 2 #reduceActionFortypealias_head1: 4526081 false ) - #(119 1 #liftFirstValue: 4584449 false ) - #(181 1 #reduceActionForfunction_name2: 10003458 false ) - #(181 1 #reduceActionForfunction_name1: 10003457 false ) - #(341 1 #reduceActionFor_statements2: 22842370 false ) - #(324 1 #reduceActionFor_statements2: 22171650 false ) - #(132 3 #reduceActionForrequirement_list2: 5655554 false ) - #(134 3 #reduceActionForconformance_requirement1: 5796865 false ) - #(134 3 #reduceActionForconformance_requirement1: 5796866 false ) - #(135 3 #reduceActionForsame_type_requirement1: 5914625 false ) - #(158 4 #reduceActionForsetter_clause1: 8342529 false ) - #(360 0 #reduceActionFor_typealias_assignment1: 23760897 false ) - #(209 2 #reduceActionForstatements2: 12286978 false ) - #(207 3 #reduceActionForextension_body1: 12016641 false ) - #(194 1 #reduceActionFor_union_style_enum_members1: 11059201 false ) - #(348 1 #reduceActionFor_statements2: 23233538 false ) - #(193 1 #reduceActionFor_statements2: 10933249 false ) - #(194 1 #reduceActionForraw_value_style_enum_member2: 11059202 false ) - #(187 3 #reduceActionForunion_style_enum_case_clause1: 10491905 false ) - #(188 1 #reduceActionFor_statements2: 10574849 false ) - #(358 0 #nil 23685121 false ) - #(116 4 #reduceActionForcase_item_list2: 4402178 false ) - #(323 0 #reduceActionFor_initializer1: 22111233 false ) - #(163 4 #reduceActionForgetter_setter_block1: 8693761 false ) - #(163 4 #reduceActionForgetter_setter_block2: 8693762 false ) - #(159 3 #reduceActionFordictionary_literal_item1: 8414209 false ) - #(204 3 #reduceActionForextension_body1: 11832321 false ) - #(360 1 #reduceActionFor_statements2: 23760898 false ) - #(214 3 #reduceActionForprotocol_association_type_declaration1: 12895233 false ) - #(212 3 #reduceActionForprotocol_initializer_declaration1: 12684289 false ) - #(213 3 #reduceActionForprotocol_subscript_declaration1: 12790785 false ) - #(201 3 #reduceActionForextension_body1: 11635713 false ) - #(193 2 #reduceActionForunion_style_enum_members2: 10933250 false ) - #(192 7 #reduceActionForraw_value_style_enum1: 10809345 false ) - #(358 1 #liftFirstValue: 23685122 false ) - #(189 2 #reduceActionForunion_style_enum_case1: 10688513 false ) - #(102 9 #reduceActionForfor_statement2: 3092482 false ) - #(323 1 #reduceActionFor_statements2: 22111234 false ) - #(179 7 #reduceActionForparameter2: 9723906 false ) - #(179 7 #reduceActionForparameter1: 9723905 false ) - #(165 4 #reduceActionForsetter_clause1: 8879105 false ) - #(164 4 #reduceActionForsetter_clause1: 8801281 false ) - #(210 4 #reduceActionForprotocol_property_declaration1: 12441601 false ) - #(211 4 #reduceActionForprotocol_method_declaration1: 12569601 false ) - #(347 0 #reduceActionFor_associativity_clause1: 23179265 false ) - #(195 3 #reduceActionForraw_value_style_enum_case_clause1: 11143169 false ) - #(196 1 #reduceActionForraw_value_style_enum_case_list1: 11234305 false ) - #(188 3 #reduceActionForunion_style_enum_case_list2: 10574850 false ) - #(182 2 #reduceActionFortypealias_head1: 10051585 false ) - #(347 1 #reduceActionFor_statements2: 23179266 false ) - #(197 2 #reduceActionForraw_value_style_enum_case1: 11364353 false ) - #(198 2 #reduceActionForassociativity_clause1: 11435009 false ) - #(196 3 #reduceActionForraw_value_style_enum_case_list2: 11234306 false ) - ). -] - -{ #category : #'generated-accessing' } -SwiftParser class >> scannerClass [ - ^SwiftScanner -] - -{ #category : #generated } -SwiftParser class >> startingStateForfile [ - ^ 1 -] - -{ #category : #generated } -SwiftParser class >> symbolNames [ - ^ #('"!"' '"#"' '"&"' '"("' '")"' '","' '"->"' '"."' '"..."' '":"' '";"' '"<"' '"="' '"=="' '">"' '"?"' '"@"' '"Protocol"' '"Type"' '"["' '"]"' '"_"' '"__COLUMN__"' '"__FILE__"' '"__FUNCTION__"' '"__LINE__"' '"as"' '"associativity"' '"break"' '"case"' '"class"' '"continue"' '"convenience"' '"default"' '"deinit"' '"didSet"' '"do"' '"dynamicType"' '"else"' '"enum"' '"extension"' '"fallthrough"' '"for"' '"func"' '"get"' '"if"' '"import"' '"in"' '"infix"' '"init"' '"inout"' '"is"' '"left"' '"let"' '"mutating"' '"none"' '"nonmutating"' '"operator"' '"override"' '"postfix"' '"precedence"' '"prefix"' '"protocol"' '"return"' '"right"' '"self"' '"set"' '"static"' '"struct"' '"subscript"' '"super"' '"switch"' '"typealias"' '"unowned"' '"unowned(safe)"' '"unowned(unsafe)"' '"var"' '"weak"' '"where"' '"while"' '"willSet"' '"{"' '"}"' '' '' '' '' '' '' '' 'B e g i n' 'file' 'identifier_list' 'string_literal' 'literal' 'binary_operator' 'prefix_operator' 'postfix_operator' 'statement' 'statements' 'loop_statement' 'for_statement' 'for_init' 'for_in_statement' 'while_statement' 'while_condition' 'do_while_statement' 'branch_statement' 'if_statement' 'if_condition' 'else_clause' 'switch_statement' 'switch_cases' 'switch_case' 'case_label' 'case_item_list' 'default_label' 'guard_clause' 'guard_expression' 'labeled_statement' 'statement_label' 'label_name' 'control_transfer_statement' 'break_statement' 'continue_statement' 'fallthrough_statement' 'return_statement' 'generic_parameter_clause' 'generic_parameter_list' 'generic_parameter' 'requirement_clause' 'requirement_list' 'requirement' 'conformance_requirement' 'same_type_requirement' 'generic_argument_clause' 'generic_argument_list' 'generic_argument' 'declaration' 'declarations' 'declaration_specifiers' 'declaration_specifier' 'top_level_declaration' 'code_block' 'import_declaration' 'import_kind' 'import_path' 'import_path_identifier' 'constant_declaration' 'pattern_initializer_list' 'pattern_initializer' 'initializer' 'variable_declaration' 'variable_declaration_head' 'variable_name' 'getter_setter_block' 'getter_clause' 'setter_clause' 'setter_name' 'getter_setter_keyword_block' 'getter_keyword_clause' 'setter_keyword_clause' 'willSet_didSet_block' 'willSet_clause' 'didSet_clause' 'typealias_declaration' 'typealias_head' 'typealias_name' 'typealias_assignment' 'function_declaration' 'function_head' 'function_name' 'function_signature' 'function_result' 'function_body' 'parameter_clauses' 'parameter_clause' 'parameter_list' 'parameter' 'parameter_name' 'local_parameter_name' 'default_argument_clause' 'enum_declaration' 'union_style_enum' 'union_style_enum_members' 'union_style_enum_member' 'union_style_enum_case_clause' 'union_style_enum_case_list' 'union_style_enum_case' 'enum_name' 'enum_case_name' 'raw_value_style_enum' 'raw_value_style_enum_members' 'raw_value_style_enum_member' 'raw_value_style_enum_case_clause' 'raw_value_style_enum_case_list' 'raw_value_style_enum_case' 'raw_value_assignment' 'struct_declaration' 'struct_name' 'struct_body' 'class_declaration' 'class_name' 'class_body' 'protocol_declaration' 'protocol_name' 'protocol_body' 'protocol_member_declaration' 'protocol_member_declarations' 'protocol_property_declaration' 'protocol_method_declaration' 'protocol_initializer_declaration' 'protocol_subscript_declaration' 'protocol_association_type_declaration' 'initializer_declaration' 'initializer_head' 'initializer_body' 'deinitializer_declaration' 'extension_declaration' 'extension_body' 'subscript_declaration' 'subscript_head' 'subscript_result' 'operator_declaration' 'prefix_operator_declaration' 'postfix_operator_declaration' 'infix_operator_declaration' 'infix_operator_attributes' 'precedence_clause' 'precedence_level' 'associativity_clause' 'associativity' 'pattern' 'wildcard_pattern' 'identifier_pattern' 'value_binding_pattern' 'tuple_pattern' 'tuple_pattern_element_list' 'tuple_pattern_element' 'enum_case_pattern' 'type_casting_pattern' 'is_pattern' 'as_pattern' 'expression_pattern' 'attribute' 'attribute_name' 'attribute_argument_clause' 'attributes' 'balanced_tokens' 'balanced_token' 'expression' 'expression_list' 'prefix_expression' 'in_out_expression' 'binary_expression' 'binary_expressions' 'assignment_operator' 'conditional_operator' 'type_casting_operator' 'primary_expression' 'literal_expression' 'array_literal' 'array_literal_items' 'array_literal_item' 'dictionary_literal' 'dictionary_literal_items' 'dictionary_literal_item' 'self_expression' 'superclass_expression' 'superclass_method_expression' 'superclass_subscript_expression' 'superclass_initializer_expression' 'closure_expression' 'closure_signature' 'capture_list' 'capture_specifier' 'implicit_member_expression' 'parenthesized_expression' 'expression_element_list' 'expression_element' 'wildcard_expression' 'postfix_expression' 'function_call_expression' 'trailing_closure' 'initializer_expression' 'explicit_member_expression' 'postfix_self_expression' 'dynamic_type_expression' 'subscript_expression' 'forced_value_expression' 'optional_chaining_expression' 'type' 'type_annotation' 'type_identifier' 'type_name' 'tuple_type' 'tuple_type_body' 'tuple_type_element_list' 'tuple_type_element' 'element_name' 'function_type' 'array_type' 'dictionary_type' 'optional_type' 'implicitly_unwrapped_optional_type' 'protocol_composition_type' 'protocol_identifier_list' 'protocol_identifier' 'metatype_type' 'type_inheritance_clause' 'type_inheritance_list' '_array_literal_items' '_associativity_clause' '_attribute_argument_clause' '_attributes' '_balanced_tokens' '_binary_expressions' '_closure_signature' '_comma' '_convenience' '_declaration_specifiers' '_declarations' '_default_argument_clause' '_didSet_clause' '_ellipsis' '_else_clause' '_expression' '_expression_element_list' '_generic_argument_clause' '_generic_parameter_clause' '_guard_clause' '_for_init' '_function_result' '_hash' '_import_kind' '_infix_operator_attributes' '_initializer' '_inout' '_label_name' '_let' '_local_parameter_name' '_parenthesized_expression' '_precedence_clause' '_prefix_operator' '_protocol_identifier_list' '_protocol_member_declarations' '_raw_value_assignment' '_raw_value_style_enum_members' '_requirement_clause' '_semicolon' '_setter_clause' '_setter_keyword_clause' '_setter_name' '_statements' '_switch_cases' '_tuple_pattern' '_tuple_pattern_element_list' '_tuple_type' '_tuple_type_body' '_typealias_assignment' '_type_annotation' '_type_identifier' '_type_inheritance_clause' '_union_style_enum_members' 'E O F' 'error') -] - -{ #category : #generated } -SwiftParser class >> symbolTypes [ - ^ #(#SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SmaCCToken #SwiftFileNode #SwiftFileNode #OrderedCollection #SmaCCToken #OrderedCollection #SmaCCToken #SmaCCToken #SmaCCToken #SwiftStatementNode #OrderedCollection #SwiftLoopStatementNode #SwiftForStatementNode #OrderedCollection #SwiftForInStatementNode #SwiftWhileStatementNode #Object #SwiftDoWhileStatementNode #SwiftBranchStatementNode #SwiftIfStatementNode #Object #OrderedCollection #SwiftSwitchStatementNode #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #Object #SwiftLabeledStatementNode #OrderedCollection #SmaCCToken #SwiftControlTransferStatementNode #SwiftBreakStatementNode #SwiftContinueStatementNode #SwiftFallThroughStatementNode #SwiftReturnStatementNode #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #SwiftParseNode #SwiftParseNode #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #SwiftBlockNode #SwiftImportDeclarationNode #OrderedCollection #OrderedCollection #OrderedCollection #SwiftConstantDeclarationNode #OrderedCollection #SwiftPatternInitializerNode #OrderedCollection #SwiftVariableDeclarationNode #OrderedCollection #SmaCCToken #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #SwiftTypealiasDeclarationNode #OrderedCollection #SmaCCToken #OrderedCollection #SwiftFunctionDeclarationNode #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #SwiftBlockNode #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #SwiftEnumDeclarationNode #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #SmaCCToken #SmaCCToken #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #SwiftStructDeclarationNode #SmaCCToken #OrderedCollection #SwiftClassDeclarationNode #SmaCCToken #OrderedCollection #SwiftProtocolDeclarationNode #SmaCCToken #OrderedCollection #SwiftParseNode #OrderedCollection #SwiftProtocolPropertyDeclarationNode #SwiftProtocolMethodDeclarationNode #SwiftProtocolInitializerDeclarationNode #SwiftProtocolSubscriptDeclarationNode #SwiftProtocolAssociationTypeDeclarationNode #SwiftInitializerDeclarationNode #OrderedCollection #SwiftBlockNode #SwiftDeinitializerDeclarationNode #SwiftExtensionDeclarationNode #OrderedCollection #SwiftSubscriptDeclarationNode #OrderedCollection #OrderedCollection #SwiftParseNode #SwiftPrefixOperatorDeclarationNode #SwiftPostfixOperatorDeclarationNode #SwiftInfixOperatorDeclarationNode #OrderedCollection #OrderedCollection #SmaCCToken #OrderedCollection #OrderedCollection #OrderedCollection #SmaCCToken #SmaCCToken #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #Object #OrderedCollection #SmaCCToken #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #Object #OrderedCollection #Object #SwiftInOutExpressionNode #SwiftParseNode #OrderedCollection #SmaCCToken #OrderedCollection #OrderedCollection #SwiftParseNode #SwiftLiteralExpressionNode #OrderedCollection #OrderedCollection #Object #OrderedCollection #OrderedCollection #OrderedCollection #SwiftSelfExpressionNode #SwiftParseNode #SwiftSuperclassMethodExpressionNode #SwiftSuperclassSubscriptExpressionNode #SwiftSuperclassInitializerExpressionNode #SwiftClosureExpressionNode #OrderedCollection #OrderedCollection #OrderedCollection #SwiftImplicitMemberExpressionNode #SwiftParenthesizedExpressionNode #OrderedCollection #Object #SwiftWildcardExpressionNode #OrderedCollection #SwiftFunctionCallExpressionNode #SwiftClosureExpressionNode #SwiftInitializerExpressionNode #SwiftExplicitMemberExpressionNode #SwiftPostfixSelfExpressionNode #SwiftDynamicTypeExpressionNode #SwiftSubscriptExpressionNode #SwiftForcedValueExpressionNode #SwiftOptionalChainingExpressionNode #SwiftParseNode #OrderedCollection #SwiftTypeIdentifierNode #SmaCCToken #SwiftTupleTypeNode #OrderedCollection #OrderedCollection #OrderedCollection #SmaCCToken #SwiftFunctionTypeNode #SwiftArrayTypeNode #SwiftDictionaryTypeNode #SwiftOptionalTypeNode #SwiftImplicitlyUnwrappedOptionalTypeNode #SwiftProtocolCompositionTypeNode #OrderedCollection #SwiftTypeIdentifierNode #SwiftMetatypeTypeNode #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #SmaCCToken #SmaCCToken #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #SmaCCToken #OrderedCollection #Object #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #SmaCCToken #OrderedCollection #OrderedCollection #OrderedCollection #SmaCCToken #SmaCCToken #SmaCCToken #OrderedCollection #SwiftParenthesizedExpressionNode #OrderedCollection #SmaCCToken #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #SmaCCToken #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #OrderedCollection #SwiftTupleTypeNode #OrderedCollection #OrderedCollection #OrderedCollection #SwiftTypeIdentifierNode #OrderedCollection #OrderedCollection #SmaCCToken #SmaCCErrorNode) -] - -{ #category : #generated } -SwiftParser class >> transitionTable [ -^#( -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 21 0 17 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 49 0 29 0 6 0 31 0 53 0 32 0 6 0 33 0 6 0 35 0 57 0 37 0 61 0 41 0 65 0 42 0 69 0 43 0 6 0 44 0 73 0 46 0 6 0 47 0 6 0 50 0 6 0 54 0 6 0 55 0 6 0 57 0 77 0 58 0 6 0 59 0 6 0 63 0 81 0 64 0 85 0 66 0 6 0 68 0 6 0 69 0 6 0 70 0 89 0 71 0 93 0 72 0 97 0 73 0 6 0 74 0 6 0 75 0 6 0 76 0 6 0 77 0 6 0 78 0 101 0 80 0 105 0 82 0 7 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 129 0 92 0 133 0 94 0 137 0 95 0 141 0 97 0 145 0 99 0 149 0 100 0 153 0 101 0 153 0 102 0 153 0 104 0 153 0 105 0 153 0 107 0 173 0 108 0 173 0 109 0 173 0 112 0 185 0 120 0 189 0 121 0 193 0 122 0 197 0 123 0 197 0 124 0 197 0 125 0 197 0 126 0 197 0 127 0 217 0 139 0 221 0 143 0 217 0 145 0 217 0 149 0 217 0 153 0 237 0 154 0 217 0 166 0 245 0 167 0 217 0 170 0 253 0 171 0 217 0 183 0 217 0 199 0 217 0 202 0 217 0 205 0 217 0 215 1 21 0 216 0 217 0 218 0 217 0 219 0 217 0 221 1 37 0 222 0 217 0 224 0 217 0 225 0 217 0 226 0 217 0 227 1 57 0 245 1 61 0 248 1 65 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 1 165 1 59 1 169 1 98 0 10 1 109] -#[0 1 173 0 86] -#[1 0 9 0 3 0 13 0 4 0 14 0 5 0 17 0 8 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 85 0 66 0 89 0 71 0 105 0 82 1 177 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 1 189 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 185 1 23 1 189 1 24 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 1 193 1 72] -#[0 1 197 0 86] -#[0 1 205 0 86 0 246] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 1 209 0 10 0 25 0 20 0 18 0 21 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 85 0 66 0 89 0 71 0 105 0 82 1 213 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 1 217 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 221 1 7 1 225 1 8 1 89 1 9 1 229 1 10 1 233 1 11 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 1 237 1 56] -#[0 0 22 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 26 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 30 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 34 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 38 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 0 42 0 3 0 42 0 4 0 42 0 8 0 42 0 11 0 42 0 17 0 42 0 20 0 42 0 22 0 42 0 23 0 42 0 24 0 42 0 25 0 42 0 26 0 42 0 29 0 42 0 30 0 42 0 31 0 42 0 32 0 42 0 33 0 42 0 34 0 42 0 35 0 42 0 37 0 42 0 41 0 42 0 42 0 42 0 43 0 42 0 44 0 42 0 46 0 42 0 47 0 42 0 50 0 42 0 54 0 42 0 55 0 42 0 57 0 42 0 58 0 42 0 59 0 42 0 63 0 42 0 64 0 42 0 66 0 42 0 68 0 42 0 69 0 42 0 70 0 42 0 71 0 42 0 72 0 42 0 73 0 42 0 74 0 42 0 75 0 42 0 76 0 42 0 77 0 42 0 78 0 42 0 80 0 42 0 82 0 42 0 83 0 11 0 86 0 42 0 87 0 42 0 88 0 42 0 89 0 42 0 90 1 249 0 122 1 249 1 83 0 42 1 109] -#[1 0 42 0 3 0 42 0 4 0 42 0 8 0 42 0 11 0 42 0 17 0 42 0 20 0 42 0 22 0 42 0 23 0 42 0 24 0 42 0 25 0 42 0 26 0 42 0 29 0 42 0 30 0 42 0 31 0 42 0 32 0 42 0 33 0 42 0 34 0 42 0 35 0 42 0 37 0 42 0 41 0 42 0 42 0 42 0 43 0 42 0 44 0 42 0 46 0 42 0 47 0 42 0 50 0 42 0 54 0 42 0 55 0 42 0 57 0 42 0 58 0 42 0 59 0 42 0 63 0 42 0 64 0 42 0 66 0 42 0 68 0 42 0 69 0 42 0 70 0 42 0 71 0 42 0 72 0 42 0 73 0 42 0 74 0 42 0 75 0 42 0 76 0 42 0 77 0 42 0 78 0 42 0 80 0 42 0 82 0 42 0 83 0 11 0 86 0 42 0 87 0 42 0 88 0 42 0 89 0 42 0 90 1 253 0 122 1 253 1 83 0 42 1 109] -#[1 2 1 0 82 2 5 0 144] -#[1 2 17 0 86 2 13 1 38 2 17 1 39] -#[0 0 46 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 0 9 0 3 2 21 0 4 0 15 0 8 0 54 0 11 0 21 0 17 0 25 0 20 2 25 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 6 0 31 2 29 0 52 2 33 0 54 0 6 0 55 0 6 0 57 0 6 0 59 0 85 0 66 0 6 0 68 0 89 0 71 0 6 0 74 0 6 0 75 0 6 0 76 0 19 0 77 0 6 0 78 0 105 0 82 2 41 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 2 45 0 103 2 49 0 153 0 237 0 154 2 53 0 233 2 57 0 234 2 61 0 235 2 65 0 236 2 69 0 237 2 73 0 240 2 77 0 241 2 81 0 242 2 85 0 243 2 89 0 244 1 57 0 245 1 61 0 248 2 93 0 251 2 97 0 252 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 2 113 1 38 2 17 1 39 2 105 1 59 2 109 1 76 2 113 1 106] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 21 0 17 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 6 0 31 0 6 0 33 0 6 0 35 0 61 0 41 0 6 0 44 0 6 0 47 0 6 0 50 0 6 0 54 0 6 0 55 0 6 0 57 0 77 0 58 0 6 0 59 0 6 0 63 0 85 0 66 0 6 0 68 0 6 0 69 0 6 0 70 0 89 0 71 0 97 0 73 0 6 0 74 0 6 0 75 0 6 0 76 0 6 0 77 0 6 0 78 0 105 0 82 0 23 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 2 117 0 110 2 117 0 139 2 117 0 145 2 117 0 149 2 117 0 153 0 237 0 154 2 117 0 166 0 245 0 167 2 117 0 170 0 253 0 171 2 117 0 183 2 117 0 199 2 117 0 202 2 117 0 205 2 117 0 215 1 21 0 216 2 117 0 218 2 117 0 219 2 117 0 221 1 37 0 222 2 117 0 224 2 117 0 225 2 117 0 226 2 117 0 227 1 57 0 245 1 61 0 248 2 117 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 1 165 1 59] -#[1 2 129 0 49 2 133 0 60 2 137 0 62] -#[1 0 27 0 3 0 31 0 4 0 35 0 8 0 58 0 11 0 58 0 17 0 39 0 20 0 43 0 22 0 47 0 23 0 51 0 24 0 55 0 25 0 59 0 26 0 58 0 29 0 58 0 30 0 58 0 31 0 58 0 32 0 58 0 33 0 58 0 34 0 58 0 35 0 58 0 37 0 58 0 41 0 58 0 42 0 58 0 43 0 58 0 44 0 58 0 46 0 58 0 47 0 58 0 50 0 58 0 54 0 58 0 55 0 58 0 57 0 58 0 58 0 58 0 59 0 58 0 63 0 58 0 64 0 63 0 66 0 58 0 68 0 58 0 69 0 58 0 70 0 67 0 71 0 58 0 72 0 58 0 73 0 58 0 74 0 58 0 75 0 58 0 76 0 58 0 77 0 58 0 78 0 58 0 80 0 71 0 82 0 58 0 83 0 75 0 86 0 79 0 87 0 83 0 88 0 87 0 89 0 91 0 90 0 133 0 94 0 137 0 95 0 141 0 97 2 145 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 2 145 1 71 0 58 1 109] -#[1 0 62 0 1 0 62 0 3 0 62 0 4 0 62 0 5 0 62 0 6 0 95 0 8 0 62 0 9 0 62 0 10 0 62 0 11 0 62 0 13 0 62 0 16 0 62 0 17 0 99 0 20 0 62 0 21 0 62 0 22 0 62 0 23 0 62 0 24 0 62 0 25 0 62 0 26 0 62 0 27 0 62 0 29 0 62 0 30 0 62 0 31 0 62 0 32 0 62 0 33 0 62 0 34 0 62 0 35 0 62 0 37 0 62 0 41 0 62 0 42 0 62 0 43 0 62 0 44 0 62 0 46 0 62 0 47 0 62 0 48 0 62 0 50 0 62 0 52 0 62 0 54 0 62 0 55 0 62 0 57 0 62 0 58 0 62 0 59 0 62 0 63 0 62 0 64 0 62 0 66 0 62 0 68 0 62 0 69 0 62 0 70 0 62 0 71 0 62 0 72 0 62 0 73 0 62 0 74 0 62 0 75 0 62 0 76 0 62 0 77 0 62 0 78 0 62 0 79 0 62 0 80 0 62 0 82 0 62 0 83 0 62 0 86 0 62 0 87 0 62 0 88 0 62 0 89 0 62 0 90 0 62 1 109] -#[1 2 157 0 8 2 161 0 20] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 85 0 66 0 89 0 71 0 105 0 82 1 213 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 2 165 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35] -#[0 2 173 0 86 0 168] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 21 0 17 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 6 0 31 0 6 0 33 0 6 0 35 0 61 0 41 0 6 0 44 0 6 0 47 0 6 0 50 0 6 0 54 0 6 0 55 0 6 0 57 0 77 0 58 0 6 0 59 0 6 0 63 0 85 0 66 0 6 0 68 0 6 0 69 0 6 0 70 0 89 0 71 0 97 0 73 0 6 0 74 0 6 0 75 0 6 0 76 0 6 0 77 0 6 0 78 0 105 0 82 0 23 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 2 177 0 106 2 177 0 139 2 177 0 145 2 177 0 149 2 177 0 153 0 237 0 154 2 177 0 166 0 245 0 167 2 177 0 170 0 253 0 171 2 177 0 183 2 177 0 199 2 177 0 202 2 177 0 205 2 177 0 215 1 21 0 216 2 177 0 218 2 177 0 219 2 177 0 221 1 37 0 222 2 177 0 224 2 177 0 225 2 177 0 226 2 177 0 227 1 57 0 245 1 61 0 248 2 177 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 1 165 1 59] -#[1 0 66 0 3 0 103 0 4 0 66 0 8 0 66 0 17 0 107 0 20 0 66 0 22 0 66 0 23 0 66 0 24 0 66 0 25 0 66 0 26 0 66 0 29 0 66 0 31 0 66 0 32 0 66 0 33 0 66 0 35 0 66 0 37 0 66 0 41 0 66 0 42 0 66 0 43 0 66 0 44 0 66 0 46 0 66 0 47 0 66 0 50 0 66 0 54 0 66 0 55 0 66 0 57 0 66 0 58 0 66 0 59 0 66 0 63 0 66 0 64 0 66 0 66 0 66 0 68 0 66 0 69 0 66 0 70 0 66 0 71 0 66 0 72 0 66 0 73 0 66 0 74 0 66 0 75 0 66 0 76 0 66 0 77 0 66 0 78 0 66 0 80 0 66 0 82 0 111 0 86 0 66 0 87 0 66 0 88 0 66 0 89 0 66 0 90 2 201 0 93 2 205 0 177 2 209 1 18 2 213 1 19 2 217 1 62] -#[1 0 70 0 1 0 70 0 3 0 70 0 4 0 70 0 8 0 74 0 10 0 70 0 11 2 221 0 12 0 70 0 13 0 70 0 16 0 70 0 17 0 70 0 20 0 70 0 22 0 70 0 23 0 70 0 24 0 70 0 25 0 70 0 26 0 70 0 27 0 70 0 29 0 70 0 30 0 70 0 31 0 70 0 32 0 70 0 33 0 70 0 34 0 70 0 35 0 70 0 37 0 70 0 41 0 70 0 42 0 70 0 43 0 70 0 44 0 70 0 46 0 70 0 47 0 70 0 50 0 70 0 52 0 70 0 54 0 70 0 55 0 70 0 57 0 70 0 58 0 70 0 59 0 70 0 63 0 70 0 64 0 70 0 66 0 70 0 68 0 70 0 69 0 70 0 70 0 70 0 71 0 70 0 72 0 70 0 73 0 70 0 74 0 70 0 75 0 70 0 76 0 70 0 77 0 70 0 78 0 70 0 80 0 70 0 82 0 70 0 83 0 70 0 86 0 70 0 87 0 70 0 88 0 70 0 89 0 70 0 90 2 225 0 136 2 229 1 73 0 70 1 109] -#[0 0 78 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 82 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 86 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 90 0 4 0 8 0 20 0 22 0 23 0 24 0 25 0 26 0 66 0 71 0 82 0 86 0 87 0 88 0 89] -#[0 0 0 1 109] -#[0 0 94 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 98 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 0 13 0 4 0 17 0 8 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 85 0 66 0 89 0 71 0 105 0 82 1 213 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 133 0 94 0 137 0 95 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 2 233 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35] -#[0 0 102 0 3 0 4 0 8 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 21 0 17 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 49 0 29 0 6 0 31 0 53 0 32 0 6 0 33 0 6 0 35 0 57 0 37 0 61 0 41 0 65 0 42 0 69 0 43 0 6 0 44 0 73 0 46 0 6 0 47 0 6 0 50 0 6 0 54 0 6 0 55 0 6 0 57 0 77 0 58 0 6 0 59 0 6 0 63 0 81 0 64 0 85 0 66 0 6 0 68 0 6 0 69 0 6 0 70 0 89 0 71 0 93 0 72 0 97 0 73 0 6 0 74 0 6 0 75 0 6 0 76 0 6 0 77 0 6 0 78 0 101 0 80 0 105 0 82 0 106 0 83 0 7 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 2 237 0 99 0 153 0 101 0 153 0 102 0 153 0 104 0 153 0 105 0 153 0 107 0 173 0 108 0 173 0 109 0 173 0 112 0 185 0 120 0 189 0 121 0 193 0 122 0 197 0 123 0 197 0 124 0 197 0 125 0 197 0 126 0 197 0 127 0 217 0 139 0 217 0 145 0 217 0 149 0 217 0 153 0 237 0 154 0 217 0 166 0 245 0 167 0 217 0 170 0 253 0 171 0 217 0 183 0 217 0 199 0 217 0 202 0 217 0 205 0 217 0 215 1 21 0 216 0 217 0 218 0 217 0 219 0 217 0 221 1 37 0 222 0 217 0 224 0 217 0 225 0 217 0 226 0 217 0 227 1 57 0 245 1 61 0 248 1 65 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 1 165 1 59 0 106 1 109] -#[1 0 110 0 3 0 110 0 4 0 110 0 8 2 245 0 11 0 110 0 17 0 110 0 20 0 110 0 22 0 110 0 23 0 110 0 24 0 110 0 25 0 110 0 26 0 110 0 29 0 110 0 30 0 110 0 31 0 110 0 32 0 110 0 33 0 110 0 34 0 110 0 35 0 110 0 37 0 110 0 41 0 110 0 42 0 110 0 43 0 110 0 44 0 110 0 46 0 110 0 47 0 110 0 50 0 110 0 54 0 110 0 55 0 110 0 57 0 110 0 58 0 110 0 59 0 110 0 63 0 110 0 64 0 110 0 66 0 110 0 68 0 110 0 69 0 110 0 70 0 110 0 71 0 110 0 72 0 110 0 73 0 110 0 74 0 110 0 75 0 110 0 76 0 110 0 77 0 110 0 78 0 110 0 80 0 110 0 82 0 110 0 83 0 110 0 86 0 110 0 87 0 110 0 88 0 110 0 89 0 110 0 90 2 245 1 94 0 110 1 109] -#[0 0 114 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 118 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 122 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 126 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 0 110 0 3 0 110 0 4 0 110 0 8 2 249 0 11 0 110 0 17 0 110 0 20 0 110 0 22 0 110 0 23 0 110 0 24 0 110 0 25 0 110 0 26 0 110 0 29 0 110 0 30 0 110 0 31 0 110 0 32 0 110 0 33 0 110 0 34 0 110 0 35 0 110 0 37 0 110 0 41 0 110 0 42 0 110 0 43 0 110 0 44 0 110 0 46 0 110 0 47 0 110 0 50 0 110 0 54 0 110 0 55 0 110 0 57 0 110 0 58 0 110 0 59 0 110 0 63 0 110 0 64 0 110 0 66 0 110 0 68 0 110 0 69 0 110 0 70 0 110 0 71 0 110 0 72 0 110 0 73 0 110 0 74 0 110 0 75 0 110 0 76 0 110 0 77 0 110 0 78 0 110 0 80 0 110 0 82 0 110 0 83 0 110 0 86 0 110 0 87 0 110 0 88 0 110 0 89 0 110 0 90 2 249 1 94 0 110 1 109] -#[0 0 130 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 134 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 0 110 0 3 0 110 0 4 0 110 0 8 2 253 0 11 0 110 0 17 0 110 0 20 0 110 0 22 0 110 0 23 0 110 0 24 0 110 0 25 0 110 0 26 0 110 0 29 0 110 0 30 0 110 0 31 0 110 0 32 0 110 0 33 0 110 0 34 0 110 0 35 0 110 0 37 0 110 0 41 0 110 0 42 0 110 0 43 0 110 0 44 0 110 0 46 0 110 0 47 0 110 0 50 0 110 0 54 0 110 0 55 0 110 0 57 0 110 0 58 0 110 0 59 0 110 0 63 0 110 0 64 0 110 0 66 0 110 0 68 0 110 0 69 0 110 0 70 0 110 0 71 0 110 0 72 0 110 0 73 0 110 0 74 0 110 0 75 0 110 0 76 0 110 0 77 0 110 0 78 0 110 0 80 0 110 0 82 0 110 0 83 0 110 0 86 0 110 0 87 0 110 0 88 0 110 0 89 0 110 0 90 2 253 1 94 0 110 1 109] -#[1 0 57 0 37 0 69 0 43 0 93 0 72 0 101 0 80 3 1 0 101 3 1 0 102 3 1 0 104 3 1 0 105 3 1 0 107 3 5 0 112] -#[0 3 9 0 10] -#[1 0 110 0 3 0 110 0 4 0 110 0 8 3 13 0 11 0 110 0 17 0 110 0 20 0 110 0 22 0 110 0 23 0 110 0 24 0 110 0 25 0 110 0 26 0 110 0 29 0 110 0 30 0 110 0 31 0 110 0 32 0 110 0 33 0 110 0 34 0 110 0 35 0 110 0 37 0 110 0 41 0 110 0 42 0 110 0 43 0 110 0 44 0 110 0 46 0 110 0 47 0 110 0 50 0 110 0 54 0 110 0 55 0 110 0 57 0 110 0 58 0 110 0 59 0 110 0 63 0 110 0 64 0 110 0 66 0 110 0 68 0 110 0 69 0 110 0 70 0 110 0 71 0 110 0 72 0 110 0 73 0 110 0 74 0 110 0 75 0 110 0 76 0 110 0 77 0 110 0 78 0 110 0 80 0 110 0 82 0 110 0 83 0 110 0 86 0 110 0 87 0 110 0 88 0 110 0 89 0 110 0 90 3 13 1 94 0 110 1 109] -#[0 0 138 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 142 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 146 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 150 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 0 110 0 3 0 110 0 4 0 110 0 8 3 17 0 11 0 110 0 17 0 110 0 20 0 110 0 22 0 110 0 23 0 110 0 24 0 110 0 25 0 110 0 26 0 110 0 29 0 110 0 30 0 110 0 31 0 110 0 32 0 110 0 33 0 110 0 34 0 110 0 35 0 110 0 37 0 110 0 41 0 110 0 42 0 110 0 43 0 110 0 44 0 110 0 46 0 110 0 47 0 110 0 50 0 110 0 54 0 110 0 55 0 110 0 57 0 110 0 58 0 110 0 59 0 110 0 63 0 110 0 64 0 110 0 66 0 110 0 68 0 110 0 69 0 110 0 70 0 110 0 71 0 110 0 72 0 110 0 73 0 110 0 74 0 110 0 75 0 110 0 76 0 110 0 77 0 110 0 78 0 110 0 80 0 110 0 82 0 110 0 83 0 110 0 86 0 110 0 87 0 110 0 88 0 110 0 89 0 110 0 90 3 17 1 94 0 110 1 109] -#[0 0 154 1 109] -#[0 0 158 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 162 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 166 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 0 9 0 3 3 21 0 4 0 15 0 8 0 25 0 20 2 25 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 2 29 0 52 2 33 0 54 0 85 0 66 0 89 0 71 2 37 0 77 0 105 0 82 3 25 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 3 29 0 150 3 33 0 151 3 37 0 155 3 41 0 233 2 57 0 234 2 61 0 235 2 65 0 236 2 69 0 237 2 73 0 240 2 77 0 241 2 81 0 242 2 85 0 243 2 89 0 244 2 89 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 2 113 1 38 2 17 1 39 2 113 1 106] -#[0 0 170 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 3 49 0 13 3 53 0 169] -#[0 0 174 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 3 57 0 86 3 61 0 90 3 65 0 172] -#[0 0 178 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 182 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 186 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 190 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 194 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 0 198 0 4 3 69 0 12 3 73 0 128 3 77 1 74] -#[0 0 202 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 206 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 210 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 3 81 0 7 3 85 0 223] -#[0 0 214 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 218 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 222 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 226 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 230 0 4 0 17 0 20 0 30 0 31 0 33 0 35 0 36 0 44 0 45 0 47 0 50 0 51 0 54 0 55 0 57 0 59 0 63 0 67 0 68 0 69 0 70 0 74 0 75 0 76 0 77 0 78 0 81 0 86] -#[1 0 234 0 4 0 21 0 17 0 234 0 20 0 234 0 30 0 234 0 31 0 234 0 33 0 234 0 35 0 234 0 36 0 234 0 44 0 234 0 45 0 234 0 47 0 234 0 50 0 234 0 51 0 234 0 54 0 234 0 55 0 234 0 57 0 234 0 59 0 234 0 63 0 234 0 67 0 234 0 68 0 234 0 69 0 234 0 70 0 234 0 74 0 234 0 75 0 234 0 76 0 234 0 77 0 234 0 78 0 234 0 81 0 234 0 86 3 89 0 245] -#[1 0 110 0 3 0 110 0 4 0 110 0 8 3 93 0 11 0 110 0 17 0 110 0 20 0 110 0 22 0 110 0 23 0 110 0 24 0 110 0 25 0 110 0 26 0 110 0 29 0 110 0 30 0 110 0 31 0 110 0 32 0 110 0 33 0 110 0 34 0 110 0 35 0 110 0 37 0 110 0 41 0 110 0 42 0 110 0 43 0 110 0 44 0 110 0 46 0 110 0 47 0 110 0 50 0 110 0 54 0 110 0 55 0 110 0 57 0 110 0 58 0 110 0 59 0 110 0 63 0 110 0 64 0 110 0 66 0 110 0 68 0 110 0 69 0 110 0 70 0 110 0 71 0 110 0 72 0 110 0 73 0 110 0 74 0 110 0 75 0 110 0 76 0 110 0 77 0 110 0 78 0 110 0 80 0 110 0 82 0 110 0 83 0 110 0 86 0 110 0 87 0 110 0 88 0 110 0 89 0 110 0 90 3 93 1 94 0 110 1 109] -#[1 0 238 0 3 0 238 0 4 0 238 0 5 0 238 0 6 0 238 0 8 0 238 0 9 0 238 0 10 0 238 0 11 0 115 0 13 3 101 0 16 0 238 0 17 0 238 0 20 0 238 0 21 0 238 0 22 0 238 0 23 0 238 0 24 0 238 0 25 0 238 0 26 0 119 0 27 0 238 0 29 0 238 0 30 0 238 0 31 0 238 0 32 0 238 0 33 0 238 0 34 0 238 0 35 0 238 0 37 0 238 0 41 0 238 0 42 0 238 0 43 0 238 0 44 0 238 0 46 0 238 0 47 0 238 0 48 0 238 0 50 3 109 0 52 0 238 0 54 0 238 0 55 0 238 0 57 0 238 0 58 0 238 0 59 0 238 0 63 0 238 0 64 0 238 0 66 0 238 0 68 0 238 0 69 0 238 0 70 0 238 0 71 0 238 0 72 0 238 0 73 0 238 0 74 0 238 0 75 0 238 0 76 0 238 0 77 0 238 0 78 0 238 0 79 0 238 0 80 0 238 0 82 0 238 0 83 0 238 0 86 0 238 0 87 0 238 0 88 0 238 0 89 0 123 0 90 3 117 0 96 3 121 0 255 3 125 1 0 3 129 1 1 3 133 1 2 3 137 1 3 0 238 1 109] -#[0 0 242 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 246 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 250 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 0 254 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 2 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 6 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 10 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 14 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 18 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 22 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 26 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 30 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 34 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 38 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 3 141 0 1 1 42 0 3 0 127 0 4 1 42 0 5 1 42 0 6 0 131 0 8 1 42 0 9 1 42 0 10 1 42 0 11 1 42 0 13 0 135 0 16 1 42 0 17 0 139 0 20 1 42 0 21 1 42 0 22 1 42 0 23 1 42 0 24 1 42 0 25 1 42 0 26 1 42 0 27 1 42 0 29 1 42 0 30 1 42 0 31 1 42 0 32 1 42 0 33 1 42 0 34 1 42 0 35 1 42 0 37 1 42 0 41 1 42 0 42 1 42 0 43 1 42 0 44 1 42 0 46 1 42 0 47 1 42 0 48 1 42 0 50 1 42 0 52 1 42 0 54 1 42 0 55 1 42 0 57 1 42 0 58 1 42 0 59 1 42 0 63 1 42 0 64 1 42 0 66 1 42 0 68 1 42 0 69 1 42 0 70 1 42 0 71 1 42 0 72 1 42 0 73 1 42 0 74 1 42 0 75 1 42 0 76 1 42 0 77 1 42 0 78 1 42 0 79 1 42 0 80 0 143 0 82 1 42 0 83 1 42 0 86 1 42 0 87 1 42 0 88 1 42 0 89 0 147 0 90 3 161 0 98 3 165 1 22 3 169 1 86 1 42 1 109] -#[0 1 50 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 54 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 58 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 62 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 66 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 70 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 74 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 78 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 0 151 0 31 3 221 0 33 3 181 0 35 0 155 0 44 3 185 0 47 1 90 0 50 0 155 0 54 1 82 0 55 1 82 0 57 1 82 0 59 3 189 0 63 1 82 0 68 3 193 0 69 3 197 0 70 1 82 0 74 1 82 0 75 1 82 0 76 0 155 0 77 1 82 0 78 3 213 0 86 3 205 0 141 3 209 0 184 3 213 0 190 3 217 0 192 3 221 1 64 3 225 1 65] -#[0 1 94 1 109] -#[0 1 98 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 0 70 0 1 0 70 0 4 0 70 0 5 0 70 0 6 0 70 0 8 3 229 0 10 2 221 0 12 0 70 0 13 0 70 0 16 0 70 0 20 0 70 0 27 0 70 0 52 0 70 0 82 0 70 0 90 2 225 0 136 2 229 1 73] -#[0 1 102 0 5 0 6] -#[1 1 106 0 5 3 233 0 6] -#[0 1 110 0 5 0 6] -#[0 3 237 0 5] -#[0 1 114 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 118 0 4 0 17 0 20 0 30 0 31 0 33 0 35 0 36 0 44 0 45 0 47 0 50 0 51 0 54 0 55 0 57 0 59 0 63 0 67 0 68 0 69 0 70 0 74 0 75 0 76 0 77 0 78 0 81 0 86] -#[1 0 159 0 4 1 122 0 17 1 122 0 20 1 122 0 30 1 122 0 31 1 122 0 33 1 122 0 35 1 122 0 36 1 122 0 44 1 122 0 45 1 122 0 47 1 122 0 50 1 122 0 51 1 122 0 54 1 122 0 55 1 122 0 57 1 122 0 59 1 122 0 63 1 122 0 67 1 122 0 68 1 122 0 69 1 122 0 70 1 122 0 74 1 122 0 75 1 122 0 76 1 122 0 77 1 122 0 78 1 122 0 81 1 122 0 86 3 245 0 247 3 249 1 58] -#[0 3 253 0 21] -#[1 0 70 0 1 0 70 0 3 0 70 0 4 0 70 0 5 0 70 0 6 0 70 0 8 0 70 0 9 0 70 0 10 0 70 0 11 2 221 0 12 0 70 0 13 0 70 0 16 0 70 0 17 0 70 0 20 0 70 0 21 0 70 0 22 0 70 0 23 0 70 0 24 0 70 0 25 0 70 0 26 0 70 0 27 0 70 0 29 0 70 0 30 0 70 0 31 0 70 0 32 0 70 0 33 0 70 0 34 0 70 0 35 0 70 0 37 0 70 0 41 0 70 0 42 0 70 0 43 0 70 0 44 0 70 0 46 0 70 0 47 0 70 0 48 0 70 0 50 0 70 0 52 0 70 0 54 0 70 0 55 0 70 0 57 0 70 0 58 0 70 0 59 0 70 0 63 0 70 0 64 0 70 0 66 0 70 0 68 0 70 0 69 0 70 0 70 0 70 0 71 0 70 0 72 0 70 0 73 0 70 0 74 0 70 0 75 0 70 0 76 0 70 0 77 0 70 0 78 0 70 0 79 0 70 0 80 0 70 0 82 0 70 0 83 0 70 0 86 0 70 0 87 0 70 0 88 0 70 0 89 0 70 0 90 2 225 0 136 2 229 1 73 0 70 1 109] -#[1 1 126 0 6 4 1 0 10 1 126 0 21] -#[0 1 130 0 21] -#[1 4 5 0 6 1 134 0 21 4 9 1 63] -#[0 4 13 0 21] -#[1 4 17 0 6 1 134 0 21 4 21 1 63] -#[0 4 25 0 21] -#[0 0 74 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 138 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 142 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 146 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 21 0 17 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 49 0 29 0 6 0 31 0 53 0 32 0 6 0 33 0 6 0 35 0 57 0 37 0 61 0 41 0 65 0 42 0 69 0 43 0 6 0 44 0 73 0 46 0 6 0 47 0 6 0 50 0 6 0 54 0 6 0 55 0 6 0 57 0 77 0 58 0 6 0 59 0 6 0 63 0 81 0 64 0 85 0 66 0 6 0 68 0 6 0 69 0 6 0 70 0 89 0 71 0 93 0 72 0 97 0 73 0 6 0 74 0 6 0 75 0 6 0 76 0 6 0 77 0 6 0 78 0 101 0 80 0 105 0 82 0 10 0 83 0 7 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 0 145 0 99 0 149 0 100 0 153 0 101 0 153 0 102 0 153 0 104 0 153 0 105 0 153 0 107 0 173 0 108 0 173 0 109 0 173 0 112 0 185 0 120 0 189 0 121 0 193 0 122 0 197 0 123 0 197 0 124 0 197 0 125 0 197 0 126 0 197 0 127 0 217 0 139 0 217 0 145 0 217 0 149 0 217 0 153 0 237 0 154 0 217 0 166 0 245 0 167 0 217 0 170 0 253 0 171 0 217 0 183 0 217 0 199 0 217 0 202 0 217 0 205 0 217 0 215 1 21 0 216 0 217 0 218 0 217 0 219 0 217 0 221 1 37 0 222 0 217 0 224 0 217 0 225 0 217 0 226 0 217 0 227 1 57 0 245 1 61 0 248 1 65 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 1 165 1 59 4 29 1 98] -#[0 4 33 0 80] -#[0 1 150 0 1 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 12 0 13 0 14 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 4 37 0 10 1 154 0 82 4 41 1 54 4 45 1 107] -#[1 0 70 0 1 0 70 0 3 0 70 0 4 0 70 0 5 0 70 0 6 0 70 0 7 0 70 0 8 0 70 0 9 0 70 0 10 0 70 0 11 2 221 0 12 0 70 0 13 0 70 0 14 0 70 0 15 0 70 0 16 0 70 0 17 0 70 0 20 0 70 0 21 0 70 0 22 0 70 0 23 0 70 0 24 0 70 0 25 0 70 0 26 0 70 0 27 0 70 0 29 0 70 0 30 0 70 0 31 0 70 0 32 0 70 0 33 0 70 0 34 0 70 0 35 0 70 0 37 0 70 0 41 0 70 0 42 0 70 0 43 0 70 0 44 0 70 0 46 0 70 0 47 0 70 0 48 0 70 0 50 0 70 0 52 0 70 0 54 0 70 0 55 0 70 0 57 0 70 0 58 0 70 0 59 0 70 0 63 0 70 0 64 0 70 0 66 0 70 0 68 0 70 0 69 0 70 0 70 0 70 0 71 0 70 0 72 0 70 0 73 0 70 0 74 0 70 0 75 0 70 0 76 0 70 0 77 0 70 0 78 0 70 0 79 0 70 0 80 0 70 0 82 0 70 0 83 0 70 0 86 0 70 0 87 0 70 0 88 0 70 0 89 0 70 0 90 2 225 0 136 4 49 1 73 0 70 1 109] -#[1 0 9 0 3 3 21 0 4 0 163 0 5 0 15 0 8 0 54 0 11 0 21 0 17 0 25 0 20 2 25 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 6 0 31 2 29 0 52 2 33 0 54 0 6 0 55 0 6 0 57 0 6 0 59 0 85 0 66 0 6 0 68 0 89 0 71 0 6 0 74 0 6 0 75 0 6 0 76 0 19 0 77 0 6 0 78 0 105 0 82 4 53 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 2 45 0 103 2 49 0 153 0 237 0 154 4 57 0 233 2 57 0 234 2 61 0 235 2 65 0 236 2 69 0 237 4 61 0 238 4 65 0 239 2 73 0 240 2 77 0 241 2 81 0 242 2 85 0 243 2 89 0 244 1 57 0 245 1 61 0 248 4 69 0 251 2 97 0 252 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 185 1 23 1 189 1 24 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 2 113 1 38 2 17 1 39 2 105 1 59 1 193 1 72 4 73 1 76 4 77 1 101 2 113 1 106] -#[1 0 22 0 1 0 167 0 3 0 167 0 4 0 167 0 5 0 167 0 6 0 167 0 8 0 167 0 10 0 167 0 11 0 167 0 13 0 22 0 16 0 167 0 17 0 167 0 20 0 167 0 22 0 167 0 23 0 167 0 24 0 167 0 25 0 167 0 26 0 167 0 27 0 167 0 29 0 167 0 30 0 167 0 31 0 167 0 32 0 167 0 33 0 167 0 34 0 167 0 35 0 167 0 37 0 167 0 41 0 167 0 42 0 167 0 43 0 167 0 44 0 167 0 46 0 167 0 47 0 167 0 48 0 167 0 50 0 22 0 52 0 167 0 54 0 167 0 55 0 167 0 57 0 167 0 58 0 167 0 59 0 167 0 63 0 167 0 64 0 167 0 66 0 167 0 68 0 167 0 69 0 167 0 70 0 167 0 71 0 167 0 72 0 167 0 73 0 167 0 74 0 167 0 75 0 167 0 76 0 167 0 77 0 167 0 78 0 167 0 79 0 167 0 80 0 167 0 82 0 167 0 83 0 167 0 86 0 167 0 87 0 167 0 88 0 167 0 89 0 167 0 90 0 167 1 109] -#[1 4 81 0 4 4 85 0 20 4 89 0 63 2 17 0 86 4 93 1 36 4 93 1 38 2 17 1 39 4 93 1 40 4 93 1 45 4 93 1 46 4 93 1 47 4 93 1 48 4 93 1 49 4 93 1 50 4 93 1 53] -#[1 0 9 0 3 3 21 0 4 0 15 0 8 0 25 0 20 2 25 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 2 29 0 52 2 33 0 54 0 85 0 66 0 89 0 71 2 37 0 77 0 105 0 82 2 41 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 4 133 0 233 2 57 0 234 2 61 0 235 2 65 0 236 2 69 0 237 2 73 0 240 2 77 0 241 2 81 0 242 2 85 0 243 2 89 0 244 2 89 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 2 113 1 38 2 17 1 39 2 113 1 106] -#[1 0 9 0 3 3 21 0 4 0 15 0 8 0 25 0 20 2 25 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 2 29 0 52 2 33 0 54 0 85 0 66 0 89 0 71 2 37 0 77 0 105 0 82 2 41 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 4 137 0 233 2 57 0 234 2 61 0 235 2 65 0 236 2 69 0 237 2 73 0 240 2 77 0 241 2 81 0 242 2 85 0 243 2 89 0 244 2 89 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 2 113 1 38 2 17 1 39 2 113 1 106] -#[1 0 70 0 1 0 171 0 3 0 171 0 4 0 171 0 5 0 171 0 6 0 175 0 8 0 171 0 10 0 171 0 11 0 179 0 12 0 171 0 13 0 70 0 16 0 171 0 17 0 171 0 20 0 171 0 22 0 171 0 23 0 171 0 24 0 171 0 25 0 171 0 26 0 171 0 27 0 171 0 29 0 171 0 30 0 171 0 31 0 171 0 32 0 171 0 33 0 171 0 34 0 171 0 35 0 171 0 37 0 171 0 41 0 171 0 42 0 171 0 43 0 171 0 44 0 171 0 46 0 171 0 47 0 171 0 48 0 171 0 50 0 70 0 52 0 171 0 54 0 171 0 55 0 171 0 57 0 171 0 58 0 171 0 59 0 171 0 63 0 171 0 64 0 171 0 66 0 171 0 68 0 171 0 69 0 171 0 70 0 171 0 71 0 171 0 72 0 171 0 73 0 171 0 74 0 171 0 75 0 171 0 76 0 171 0 77 0 171 0 78 0 171 0 79 0 171 0 80 0 171 0 82 0 171 0 83 0 171 0 86 0 171 0 87 0 171 0 88 0 171 0 89 0 171 0 90 2 225 0 136 2 229 1 73 0 171 1 109] -#[0 1 170 0 11] -#[0 1 174 0 11] -#[1 4 141 0 27 4 145 0 48] -#[1 1 178 0 3 1 178 0 4 1 178 0 5 1 178 0 6 1 178 0 8 0 183 0 10 1 178 0 11 1 178 0 13 1 178 0 17 1 178 0 20 1 178 0 22 1 178 0 23 1 178 0 24 1 178 0 25 1 178 0 26 1 178 0 27 1 178 0 29 1 178 0 30 1 178 0 31 1 178 0 32 1 178 0 33 1 178 0 34 1 178 0 35 1 178 0 37 1 178 0 41 1 178 0 42 1 178 0 43 1 178 0 44 1 178 0 46 1 178 0 47 1 178 0 48 1 178 0 50 1 178 0 54 1 178 0 55 1 178 0 57 1 178 0 58 1 178 0 59 1 178 0 63 1 178 0 64 1 178 0 66 1 178 0 68 1 178 0 69 1 178 0 70 1 178 0 71 1 178 0 72 1 178 0 73 1 178 0 74 1 178 0 75 1 178 0 76 1 178 0 77 1 178 0 78 1 178 0 79 1 178 0 80 1 178 0 82 1 178 0 83 1 178 0 86 1 178 0 87 1 178 0 88 1 178 0 89 1 178 0 90 4 153 1 37 4 157 1 105 1 178 1 109] -#[1 1 178 0 3 1 178 0 4 1 178 0 5 1 178 0 6 1 178 0 8 0 183 0 10 1 178 0 11 1 178 0 13 1 178 0 17 1 178 0 20 1 178 0 22 1 178 0 23 1 178 0 24 1 178 0 25 1 178 0 26 1 178 0 27 1 178 0 29 1 178 0 30 1 178 0 31 1 178 0 32 1 178 0 33 1 178 0 34 1 178 0 35 1 178 0 37 1 178 0 41 1 178 0 42 1 178 0 43 1 178 0 44 1 178 0 46 1 178 0 47 1 178 0 48 1 178 0 50 1 178 0 54 1 178 0 55 1 178 0 57 1 178 0 58 1 178 0 59 1 178 0 63 1 178 0 64 1 178 0 66 1 178 0 68 1 178 0 69 1 178 0 70 1 178 0 71 1 178 0 72 1 178 0 73 1 178 0 74 1 178 0 75 1 178 0 76 1 178 0 77 1 178 0 78 1 178 0 79 1 178 0 80 1 178 0 82 1 178 0 83 1 178 0 86 1 178 0 87 1 178 0 88 1 178 0 89 1 178 0 90 4 153 1 37 4 161 1 105 1 178 1 109] -#[0 1 182 0 3 0 4 0 5 0 6 0 8 0 10 0 11 0 13 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 1 178 0 3 1 178 0 4 1 178 0 5 1 178 0 6 1 178 0 8 0 183 0 10 1 178 0 11 1 178 0 13 1 178 0 17 1 178 0 20 1 178 0 22 1 178 0 23 1 178 0 24 1 178 0 25 1 178 0 26 1 178 0 27 1 178 0 29 1 178 0 30 1 178 0 31 1 178 0 32 1 178 0 33 1 178 0 34 1 178 0 35 1 178 0 37 1 178 0 41 1 178 0 42 1 178 0 43 1 178 0 44 1 178 0 46 1 178 0 47 1 178 0 48 1 178 0 50 1 178 0 54 1 178 0 55 1 178 0 57 1 178 0 58 1 178 0 59 1 178 0 63 1 178 0 64 1 178 0 66 1 178 0 68 1 178 0 69 1 178 0 70 1 178 0 71 1 178 0 72 1 178 0 73 1 178 0 74 1 178 0 75 1 178 0 76 1 178 0 77 1 178 0 78 1 178 0 79 1 178 0 80 1 178 0 82 1 178 0 83 1 178 0 86 1 178 0 87 1 178 0 88 1 178 0 89 1 178 0 90 4 153 1 37 4 165 1 105 1 178 1 109] -#[0 1 186 0 3 0 4 0 5 0 6 0 8 0 10 0 11 0 13 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 190 0 3 0 4 0 5 0 6 0 8 0 10 0 11 0 13 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 194 0 3 0 4 0 5 0 6 0 8 0 10 0 11 0 13 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 198 0 3 0 4 0 5 0 6 0 8 0 10 0 11 0 13 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 202 0 3 0 4 0 5 0 6 0 8 0 10 0 11 0 13 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 1 206 0 6 1 206 0 11 1 210 0 27 1 210 0 48] -#[1 4 169 0 6 1 214 0 11] -#[0 1 218 0 8] -#[1 1 82 0 31 1 82 0 55 1 82 0 57 1 82 0 59 1 82 0 68 1 82 0 74 1 82 0 75 1 82 0 76 0 155 0 77 1 82 0 78 3 205 0 141 4 173 1 65] -#[0 4 177 0 11] -#[0 4 181 0 8] -#[1 2 1 0 82 4 185 0 144] -#[0 1 222 0 82] -#[0 1 226 0 82] -#[0 4 189 0 90] -#[0 4 193 0 90] -#[0 4 197 0 90] -#[0 1 230 0 3 0 4 0 5 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 234 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 4 201 0 50 4 205 0 86] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 85 0 66 0 89 0 71 0 105 0 82 1 213 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 4 209 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35] -#[1 4 213 0 50 4 217 0 86] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 85 0 66 0 89 0 71 0 105 0 82 1 213 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 4 221 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35] -#[0 4 225 0 82] -#[0 1 238 0 10 0 13 0 17 0 31 0 33 0 44 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83] -#[0 1 242 0 10 0 13 0 17 0 31 0 33 0 44 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83] -#[1 2 1 0 82 4 229 0 144] -#[0 1 246 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 250 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 1 254 0 2 0 6 0 4 4 233 0 5 0 21 0 17 0 6 0 20 1 254 0 22 4 253 0 51 1 254 0 54 0 6 0 63 1 254 0 77 0 187 0 86 4 241 0 178 4 245 0 179 1 57 0 245 1 61 0 248 4 249 1 59 4 253 1 82] -#[1 5 1 0 74 5 5 0 75 5 9 0 76 5 13 0 78 5 17 1 20] -#[0 2 2 0 6 0 7 0 48] -#[1 5 21 0 6 5 25 0 7 2 6 0 48 5 29 0 174 5 33 1 77] -#[1 5 25 0 7 2 6 0 48 5 29 0 174 5 37 1 77] -#[0 2 10 0 3 0 4 0 8 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 31 0 32 0 33 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 86 0 87 0 88 0 89 0 90] -#[1 2 189 0 4 5 41 0 48 2 197 0 86 5 45 0 93 5 49 0 177] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 21 0 17 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 49 0 29 0 6 0 31 0 53 0 32 0 6 0 33 0 6 0 35 0 57 0 37 0 61 0 41 0 65 0 42 0 69 0 43 0 6 0 44 0 73 0 46 0 6 0 47 0 6 0 50 0 6 0 54 0 6 0 55 0 6 0 57 0 77 0 58 0 6 0 59 0 6 0 63 0 81 0 64 0 85 0 66 0 6 0 68 0 6 0 69 0 6 0 70 0 89 0 71 0 93 0 72 0 97 0 73 0 6 0 74 0 6 0 75 0 6 0 76 0 6 0 77 0 6 0 78 0 101 0 80 0 105 0 82 0 7 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 0 145 0 99 5 53 0 100 0 153 0 101 0 153 0 102 0 153 0 104 0 153 0 105 0 153 0 107 0 173 0 108 0 173 0 109 0 173 0 112 0 185 0 120 0 189 0 121 0 193 0 122 0 197 0 123 0 197 0 124 0 197 0 125 0 197 0 126 0 197 0 127 0 217 0 139 0 217 0 145 0 217 0 149 0 217 0 153 0 237 0 154 0 217 0 166 0 245 0 167 0 217 0 170 0 253 0 171 0 217 0 183 0 217 0 199 0 217 0 202 0 217 0 205 0 217 0 215 1 21 0 216 0 217 0 218 0 217 0 219 0 217 0 221 1 37 0 222 0 217 0 224 0 217 0 225 0 217 0 226 0 217 0 227 1 57 0 245 1 61 0 248 1 65 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 1 165 1 59] -#[1 4 81 0 4 4 85 0 20 4 89 0 63 2 17 0 86 5 57 0 137 5 61 0 138 5 65 1 36 5 65 1 38 2 17 1 39 5 65 1 40 5 65 1 45 5 65 1 46 5 65 1 47 5 65 1 48 5 65 1 49 5 65 1 50 5 65 1 53] -#[0 2 14 0 1 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 13 0 14 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 2 18 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 3 141 0 1 2 22 0 3 0 191 0 4 2 22 0 5 2 22 0 6 0 195 0 8 2 22 0 9 2 22 0 10 2 22 0 11 2 22 0 13 0 199 0 16 2 22 0 17 0 203 0 20 2 22 0 21 2 22 0 22 2 22 0 23 2 22 0 24 2 22 0 25 2 22 0 26 2 22 0 27 2 22 0 29 2 22 0 30 2 22 0 31 2 22 0 32 2 22 0 33 2 22 0 34 2 22 0 35 2 22 0 37 2 22 0 41 2 22 0 42 2 22 0 43 2 22 0 44 2 22 0 46 2 22 0 47 2 22 0 48 2 22 0 50 2 22 0 52 2 22 0 54 2 22 0 55 2 22 0 57 2 22 0 58 2 22 0 59 2 22 0 63 2 22 0 64 2 22 0 66 2 22 0 68 2 22 0 69 2 22 0 70 2 22 0 71 2 22 0 72 2 22 0 73 2 22 0 74 2 22 0 75 2 22 0 76 2 22 0 77 2 22 0 78 2 22 0 79 2 22 0 80 0 207 0 82 2 22 0 83 2 22 0 86 2 22 0 87 2 22 0 88 2 22 0 89 0 211 0 90 3 161 0 98 3 165 1 22 3 169 1 86 2 22 1 109] -#[0 2 26 0 3 0 4 0 8 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 2 30 0 3 0 4 0 8 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 2 34 0 3 0 4 0 8 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 2 38 0 3 0 4 0 8 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 2 42 0 3 0 4 0 8 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 2 46 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 2 50 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 2 54 0 37 0 43 0 72 0 80] -#[0 2 58 0 3 0 4 0 8 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 2 62 0 3 0 4 0 8 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 0 9 0 3 3 21 0 4 0 163 0 5 0 15 0 8 0 25 0 20 2 25 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 2 29 0 52 2 33 0 54 0 85 0 66 0 89 0 71 2 37 0 77 0 105 0 82 4 53 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 4 57 0 233 2 57 0 234 2 61 0 235 2 65 0 236 2 69 0 237 4 61 0 238 4 65 0 239 2 73 0 240 2 77 0 241 2 81 0 242 2 85 0 243 2 89 0 244 5 69 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 185 1 23 1 189 1 24 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 2 113 1 38 2 17 1 39 1 193 1 72 4 77 1 101 2 113 1 106] -#[1 0 70 0 1 0 171 0 3 0 171 0 4 0 171 0 6 0 175 0 8 0 215 0 10 0 171 0 11 0 179 0 12 0 171 0 13 0 70 0 16 0 171 0 17 0 171 0 20 0 171 0 22 0 171 0 23 0 171 0 24 0 171 0 25 0 171 0 26 0 171 0 27 0 171 0 29 0 171 0 30 0 171 0 31 0 171 0 32 0 171 0 33 0 171 0 34 0 171 0 35 0 171 0 37 0 171 0 41 0 171 0 42 0 171 0 43 0 171 0 44 0 171 0 46 0 171 0 47 0 171 0 50 0 70 0 52 0 171 0 54 0 171 0 55 0 171 0 57 0 171 0 58 0 171 0 59 0 171 0 63 0 171 0 64 0 171 0 66 0 171 0 68 0 171 0 69 0 171 0 70 0 171 0 71 0 171 0 72 0 171 0 73 0 171 0 74 0 171 0 75 0 171 0 76 0 171 0 77 0 171 0 78 0 171 0 80 0 171 0 82 0 171 0 83 0 171 0 86 0 171 0 87 0 171 0 88 0 171 0 89 0 171 0 90 2 225 0 136 2 229 1 73 0 171 1 109] -#[1 2 70 0 3 2 70 0 4 5 73 0 6 2 70 0 8 2 70 0 11 2 70 0 17 2 70 0 20 2 70 0 22 2 70 0 23 2 70 0 24 2 70 0 25 2 70 0 26 2 70 0 29 2 70 0 30 2 70 0 31 2 70 0 32 2 70 0 33 2 70 0 34 2 70 0 35 2 70 0 37 2 70 0 41 2 70 0 42 2 70 0 43 2 70 0 44 2 70 0 46 2 70 0 47 2 70 0 50 2 70 0 54 2 70 0 55 2 70 0 57 2 70 0 58 2 70 0 59 2 70 0 63 2 70 0 64 2 70 0 66 2 70 0 68 2 70 0 69 2 70 0 70 2 70 0 71 2 70 0 72 2 70 0 73 2 70 0 74 2 70 0 75 2 70 0 76 2 70 0 77 2 70 0 78 2 70 0 80 2 70 0 82 2 70 0 83 2 70 0 86 2 70 0 87 2 70 0 88 2 70 0 89 2 70 0 90 2 70 1 109] -#[0 2 74 0 3 0 4 0 6 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 4 149 0 10 5 77 1 37] -#[1 2 78 0 3 2 78 0 4 2 78 0 6 2 78 0 8 2 78 0 11 5 81 0 13 2 78 0 17 2 78 0 20 2 78 0 22 2 78 0 23 2 78 0 24 2 78 0 25 2 78 0 26 4 141 0 27 2 78 0 29 2 78 0 30 2 78 0 31 2 78 0 32 2 78 0 33 2 78 0 34 2 78 0 35 2 78 0 37 2 78 0 41 2 78 0 42 2 78 0 43 2 78 0 44 2 78 0 46 2 78 0 47 2 78 0 50 2 78 0 54 2 78 0 55 2 78 0 57 2 78 0 58 2 78 0 59 2 78 0 63 2 78 0 64 2 78 0 66 2 78 0 68 2 78 0 69 2 78 0 70 2 78 0 71 2 78 0 72 2 78 0 73 2 78 0 74 2 78 0 75 2 78 0 76 2 78 0 77 2 78 0 78 2 78 0 80 2 78 0 82 2 78 0 83 2 78 0 86 2 78 0 87 2 78 0 88 2 78 0 89 2 78 0 90 5 85 0 152 5 89 1 81 2 78 1 109] -#[0 1 210 0 3 0 4 0 5 0 6 0 8 0 10 0 11 0 13 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 4 81 0 4 4 85 0 20 4 89 0 63 2 17 0 86 5 93 1 36 5 93 1 38 2 17 1 39 5 93 1 40 5 93 1 45 5 93 1 46 5 93 1 47 5 93 1 48 5 93 1 49 5 93 1 50 5 93 1 53] -#[0 2 82 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 2 86 0 4 0 7 0 12 0 17 0 31 0 33 0 44 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 82 0 83] -#[0 2 90 0 4 0 7 0 12 0 17 0 31 0 33 0 44 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 82 0 83] -#[1 0 198 0 4 0 198 0 7 3 69 0 12 0 198 0 82 3 73 0 128 5 97 1 74] -#[1 5 109 0 86 5 101 0 129 5 105 0 130 5 109 1 39] -#[0 2 94 0 4 0 7 0 10 0 17 0 31 0 33 0 44 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 82 0 83] -#[1 2 189 0 4 5 113 0 177] -#[1 0 6 0 4 0 21 0 17 0 6 0 20 0 6 0 63 0 6 0 86 1 57 0 245 1 61 0 248 5 117 1 59] -#[1 5 121 0 82 5 125 0 144 5 129 0 156 5 133 0 160] -#[0 2 98 0 4 0 17 0 20 0 30 0 31 0 33 0 35 0 36 0 44 0 45 0 47 0 50 0 51 0 54 0 55 0 57 0 59 0 63 0 67 0 68 0 69 0 70 0 74 0 75 0 76 0 77 0 78 0 81 0 86] -#[0 2 102 0 3 0 4 0 8 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 2 106 0 3 0 4 0 8 0 20 0 22 0 23 0 24 0 25 0 26 0 66 0 71 0 82 0 86 0 87 0 88 0 89 0 90] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 85 0 66 0 89 0 71 0 105 0 82 1 213 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 5 137 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35] -#[1 4 81 0 4 5 141 0 16 4 85 0 20 4 89 0 63 2 17 0 86 5 145 1 36 5 145 1 38 2 17 1 39 5 145 1 40 5 145 1 45 5 145 1 46 5 145 1 47 5 145 1 48 5 145 1 49 5 145 1 50 5 145 1 53] -#[1 4 81 0 4 4 85 0 20 4 89 0 63 2 17 0 86 5 149 1 36 5 149 1 38 2 17 1 39 5 149 1 40 5 149 1 45 5 149 1 46 5 149 1 47 5 149 1 48 5 149 1 49 5 149 1 50 5 149 1 53] -#[0 2 110 0 3 0 4 0 8 0 20 0 22 0 23 0 24 0 25 0 26 0 66 0 71 0 82 0 86 0 87 0 88 0 89 0 90] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 85 0 66 0 89 0 71 0 105 0 82 1 213 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 5 153 0 253 5 153 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35] -#[0 2 114 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 2 118 0 3 2 118 0 4 2 118 0 5 2 118 0 6 2 118 0 8 2 118 0 9 2 118 0 10 2 118 0 11 0 219 0 13 3 101 0 16 2 118 0 17 2 118 0 20 2 118 0 21 2 118 0 22 2 118 0 23 2 118 0 24 2 118 0 25 2 118 0 26 0 223 0 27 2 118 0 29 2 118 0 30 2 118 0 31 2 118 0 32 2 118 0 33 2 118 0 34 2 118 0 35 2 118 0 37 2 118 0 41 2 118 0 42 2 118 0 43 2 118 0 44 2 118 0 46 2 118 0 47 2 118 0 48 2 118 0 50 3 109 0 52 2 118 0 54 2 118 0 55 2 118 0 57 2 118 0 58 2 118 0 59 2 118 0 63 2 118 0 64 2 118 0 66 2 118 0 68 2 118 0 69 2 118 0 70 2 118 0 71 2 118 0 72 2 118 0 73 2 118 0 74 2 118 0 75 2 118 0 76 2 118 0 77 2 118 0 78 2 118 0 79 2 118 0 80 2 118 0 82 2 118 0 83 2 118 0 86 2 118 0 87 2 118 0 88 2 118 0 89 0 227 0 90 3 117 0 96 5 157 0 255 3 129 1 1 3 133 1 2 3 137 1 3 2 118 1 109] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 85 0 66 0 89 0 71 0 105 0 82 1 213 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 5 161 0 253 5 161 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 85 0 66 0 89 0 71 0 105 0 82 1 213 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 5 165 0 253 5 165 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35] -#[0 2 122 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 2 126 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 5 169 0 38 5 173 0 50 5 177 0 66 5 181 0 86 5 185 0 87] -#[0 2 130 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 85 0 66 0 89 0 71 0 105 0 82 1 213 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 5 189 0 251 5 193 0 252 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35] -#[0 2 134 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 2 138 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 2 142 0 1 2 142 0 3 2 142 0 4 2 142 0 5 2 142 0 6 2 142 0 8 2 142 0 9 2 142 0 10 2 142 0 11 2 142 0 13 2 142 0 16 2 142 0 17 2 142 0 20 2 142 0 21 2 142 0 22 2 142 0 23 2 142 0 24 2 142 0 25 2 142 0 26 2 142 0 27 2 142 0 29 2 142 0 30 2 142 0 31 2 142 0 32 2 142 0 33 2 142 0 34 2 142 0 35 2 142 0 37 2 142 0 41 2 142 0 42 2 142 0 43 2 142 0 44 2 142 0 46 2 142 0 47 2 142 0 48 2 142 0 50 2 142 0 52 2 142 0 54 2 142 0 55 2 142 0 57 2 142 0 58 2 142 0 59 2 142 0 63 2 142 0 64 2 142 0 66 2 142 0 68 2 142 0 69 2 142 0 70 2 142 0 71 2 142 0 72 2 142 0 73 2 142 0 74 2 142 0 75 2 142 0 76 2 142 0 77 2 142 0 78 2 142 0 79 2 142 0 80 0 231 0 82 2 142 0 83 2 142 0 86 2 142 0 87 2 142 0 88 2 142 0 89 2 142 0 90 2 142 1 109] -#[1 0 105 0 82 5 201 1 17 5 201 1 28] -#[0 5 209 0 86 0 203] -#[0 2 150 0 50] -#[1 2 1 0 82 5 213 0 144] -#[1 5 217 0 31 5 221 0 40 5 225 0 44 5 229 0 63 5 233 0 69 5 237 0 73 5 241 0 77 2 154 0 86 2 154 0 90 5 245 0 146 5 249 1 79] -#[0 6 1 0 86 0 206] -#[0 6 9 0 86 0 200] -#[1 2 189 0 4 6 13 0 177] -#[0 2 158 0 10 0 12 0 82] -#[1 6 17 0 31 2 162 0 44 2 162 0 54 6 21 0 55 6 25 0 57 6 29 0 59 6 33 0 68 6 37 0 74 6 41 0 75 6 45 0 76 2 162 0 77 6 49 0 78 6 53 0 142] -#[0 2 166 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 0 198 0 10 3 69 0 12 0 198 0 82 3 73 0 128 6 57 1 74] -#[0 2 170 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 6 61 0 50] -#[1 6 65 0 44 6 69 0 54 6 73 0 77] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 85 0 66 0 89 0 71 0 105 0 82 1 213 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 6 77 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 85 0 66 0 89 0 71 0 105 0 82 1 177 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 6 81 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 6 81 1 24 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35] -#[0 2 174 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 6 85 0 4 2 178 0 5 6 89 0 20 6 93 0 82 6 97 0 86 0 113 0 87 0 117 0 88 0 133 0 89 6 101 0 90 0 133 0 94 6 105 0 95 6 109 0 249 6 113 0 250 6 117 1 60] -#[0 2 182 0 4 0 17 0 20 0 30 0 31 0 33 0 35 0 36 0 44 0 45 0 47 0 50 0 51 0 54 0 55 0 57 0 59 0 63 0 67 0 68 0 69 0 70 0 74 0 75 0 76 0 77 0 78 0 81 0 86] -#[0 2 186 0 4 0 17 0 20 0 30 0 31 0 33 0 35 0 36 0 44 0 45 0 47 0 50 0 51 0 54 0 55 0 57 0 59 0 63 0 67 0 68 0 69 0 70 0 74 0 75 0 76 0 77 0 78 0 81 0 86] -#[0 2 190 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 85 0 66 0 89 0 71 0 105 0 82 1 213 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 6 121 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 25 0 20 2 194 0 21 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 85 0 66 0 89 0 71 0 105 0 82 1 213 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 1 225 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 6 129 1 7 1 225 1 8 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35] -#[0 2 198 0 21] -#[0 2 202 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 25 0 20 2 194 0 21 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 85 0 66 0 89 0 71 0 105 0 82 1 213 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 6 133 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 6 137 1 10 1 233 1 11 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35] -#[0 2 206 0 21] -#[0 2 210 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 6 141 0 83] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 21 0 17 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 6 0 31 0 6 0 33 0 6 0 35 0 61 0 41 0 6 0 44 0 6 0 47 0 6 0 50 0 6 0 54 0 6 0 55 0 6 0 57 0 77 0 58 0 6 0 59 0 6 0 63 0 85 0 66 0 6 0 68 0 6 0 69 0 6 0 70 0 89 0 71 0 97 0 73 0 6 0 74 0 6 0 75 0 6 0 76 0 6 0 77 0 6 0 78 0 105 0 82 0 23 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 6 145 0 106 6 145 0 139 6 145 0 145 6 145 0 149 6 145 0 153 0 237 0 154 6 145 0 166 0 245 0 167 6 145 0 170 0 253 0 171 6 145 0 183 6 145 0 199 6 145 0 202 6 145 0 205 6 145 0 215 1 21 0 216 6 145 0 218 6 145 0 219 6 145 0 221 1 37 0 222 6 145 0 224 6 145 0 225 6 145 0 226 6 145 0 227 1 57 0 245 1 61 0 248 6 145 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 1 165 1 59] -#[1 2 17 0 86 6 149 1 38 2 17 1 39 6 153 1 55] -#[0 2 214 0 13 0 17 0 31 0 33 0 44 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 82 0 83] -#[1 6 157 0 82 6 161 0 220] -#[1 2 218 0 1 2 218 0 3 2 218 0 4 2 218 0 5 2 218 0 6 2 218 0 7 0 235 0 8 2 218 0 9 2 218 0 10 2 218 0 11 2 218 0 13 2 218 0 14 2 218 0 15 2 218 0 16 2 218 0 17 2 218 0 20 2 218 0 21 2 218 0 22 2 218 0 23 2 218 0 24 2 218 0 25 2 218 0 26 2 218 0 27 2 218 0 29 2 218 0 30 2 218 0 31 2 218 0 32 2 218 0 33 2 218 0 34 2 218 0 35 2 218 0 37 2 218 0 41 2 218 0 42 2 218 0 43 2 218 0 44 2 218 0 46 2 218 0 47 2 218 0 48 2 218 0 50 2 218 0 52 2 218 0 54 2 218 0 55 2 218 0 57 2 218 0 58 2 218 0 59 2 218 0 63 2 218 0 64 2 218 0 66 2 218 0 68 2 218 0 69 2 218 0 70 2 218 0 71 2 218 0 72 2 218 0 73 2 218 0 74 2 218 0 75 2 218 0 76 2 218 0 77 2 218 0 78 2 218 0 79 2 218 0 80 2 218 0 82 2 218 0 83 2 218 0 86 2 218 0 87 2 218 0 88 2 218 0 89 2 218 0 90 2 218 1 109] -#[1 0 70 0 1 0 70 0 4 0 171 0 5 0 171 0 6 0 239 0 8 0 243 0 10 0 70 0 11 0 179 0 12 0 70 0 13 0 70 0 16 0 70 0 20 0 171 0 27 0 70 0 52 0 70 0 82 0 70 0 90 2 225 0 136 2 229 1 73] -#[1 2 222 0 5 2 222 0 6 4 141 0 27] -#[1 2 226 0 5 6 169 0 6] -#[0 2 230 0 5 0 6] -#[1 0 247 0 5 0 251 0 6 1 206 0 11 1 210 0 27] -#[0 6 173 0 11] -#[0 6 177 0 5] -#[1 0 6 0 4 2 234 0 5 0 21 0 17 0 6 0 20 0 255 0 51 0 6 0 63 0 187 0 86 1 57 0 245 1 61 0 248 6 181 1 41 6 185 1 42 6 189 1 43 6 193 1 59 6 197 1 82 6 201 1 103] -#[1 4 81 0 4 4 85 0 20 4 89 0 63 2 17 0 86 6 205 1 36 6 205 1 38 2 17 1 39 6 205 1 40 6 205 1 45 6 205 1 46 6 205 1 47 6 205 1 48 6 205 1 49 6 205 1 50 6 205 1 53] -#[0 6 209 0 12] -#[1 6 213 0 1 2 238 0 3 2 238 0 4 2 238 0 5 2 238 0 6 6 217 0 7 1 3 0 8 2 238 0 10 2 238 0 11 2 238 0 13 6 225 0 16 2 238 0 17 2 238 0 20 2 238 0 22 2 238 0 23 2 238 0 24 2 238 0 25 2 238 0 26 2 238 0 27 2 238 0 29 2 238 0 30 2 238 0 31 2 238 0 32 2 238 0 33 2 238 0 34 2 238 0 35 2 238 0 37 2 238 0 41 2 238 0 42 2 238 0 43 2 238 0 44 2 238 0 46 2 238 0 47 2 238 0 48 2 238 0 50 2 238 0 54 2 238 0 55 2 238 0 57 2 238 0 58 2 238 0 59 2 238 0 63 2 238 0 64 2 238 0 66 2 238 0 68 2 238 0 69 2 238 0 70 2 238 0 71 2 238 0 72 2 238 0 73 2 238 0 74 2 238 0 75 2 238 0 76 2 238 0 77 2 238 0 78 2 238 0 79 2 238 0 80 2 238 0 82 2 238 0 83 2 238 0 86 2 238 0 87 2 238 0 88 2 238 0 89 2 238 0 90 2 238 1 109] -#[0 2 242 0 1 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 13 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 2 246 0 1 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 13 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 2 250 0 1 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 13 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 2 254 0 1 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 13 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 3 2 0 1 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 13 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 3 6 0 1 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 13 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 3 10 0 1 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 13 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 3 14 0 1 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 13 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 3 18 0 1 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 13 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 3 22 0 3 3 22 0 4 3 22 0 5 3 22 0 6 3 22 0 8 3 22 0 10 3 22 0 11 3 22 0 13 3 22 0 17 3 22 0 20 3 22 0 22 3 22 0 23 3 22 0 24 3 22 0 25 3 22 0 26 1 7 0 27 3 22 0 29 3 22 0 30 3 22 0 31 3 22 0 32 3 22 0 33 3 22 0 34 3 22 0 35 3 22 0 37 3 22 0 41 3 22 0 42 3 22 0 43 3 22 0 44 3 22 0 46 3 22 0 47 3 22 0 48 3 22 0 50 3 22 0 54 3 22 0 55 3 22 0 57 3 22 0 58 3 22 0 59 3 22 0 63 3 22 0 64 3 22 0 66 3 22 0 68 3 22 0 69 3 22 0 70 3 22 0 71 3 22 0 72 3 22 0 73 3 22 0 74 3 22 0 75 3 22 0 76 3 22 0 77 3 22 0 78 3 22 0 79 3 22 0 80 3 22 0 82 3 22 0 83 3 22 0 86 3 22 0 87 3 22 0 88 3 22 0 89 3 22 0 90 3 22 1 109] -#[1 3 26 0 3 3 26 0 4 3 26 0 5 3 26 0 6 3 26 0 8 3 26 0 10 3 26 0 11 3 26 0 13 3 26 0 17 3 26 0 20 3 26 0 22 3 26 0 23 3 26 0 24 3 26 0 25 3 26 0 26 1 11 0 27 3 26 0 29 3 26 0 30 3 26 0 31 3 26 0 32 3 26 0 33 3 26 0 34 3 26 0 35 3 26 0 37 3 26 0 41 3 26 0 42 3 26 0 43 3 26 0 44 3 26 0 46 3 26 0 47 3 26 0 48 3 26 0 50 3 26 0 54 3 26 0 55 3 26 0 57 3 26 0 58 3 26 0 59 3 26 0 63 3 26 0 64 3 26 0 66 3 26 0 68 3 26 0 69 3 26 0 70 3 26 0 71 3 26 0 72 3 26 0 73 3 26 0 74 3 26 0 75 3 26 0 76 3 26 0 77 3 26 0 78 3 26 0 79 3 26 0 80 3 26 0 82 3 26 0 83 3 26 0 86 3 26 0 87 3 26 0 88 3 26 0 89 3 26 0 90 3 26 1 109] -#[1 4 81 0 4 4 85 0 20 4 89 0 63 2 17 0 86 6 229 1 36 6 229 1 38 2 17 1 39 6 229 1 40 6 229 1 45 6 229 1 46 6 229 1 47 6 229 1 48 6 229 1 49 6 229 1 50 6 229 1 53] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 85 0 66 0 89 0 71 0 105 0 82 1 213 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 6 233 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35] -#[1 0 6 0 4 0 21 0 17 0 6 0 20 0 6 0 63 0 6 0 86 1 57 0 245 1 61 0 248 6 237 1 59] -#[0 3 30 0 3 0 4 0 5 0 6 0 8 0 10 0 11 0 13 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 3 34 0 3 0 4 0 5 0 6 0 8 0 10 0 11 0 13 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 3 38 0 3 0 4 0 5 0 6 0 8 0 10 0 11 0 13 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 3 42 0 3 0 4 0 5 0 6 0 8 0 10 0 11 0 13 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 85 0 66 0 89 0 71 0 105 0 82 1 213 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 6 241 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35] -#[0 6 73 0 77] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 58 0 11 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 85 0 66 0 89 0 71 0 105 0 82 1 213 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 6 245 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 6 245 1 71] -#[0 6 253 0 86 0 191] -#[1 3 46 0 3 3 46 0 4 3 46 0 8 3 46 0 11 3 46 0 17 3 46 0 20 3 46 0 22 3 46 0 23 3 46 0 24 3 46 0 25 3 46 0 26 3 46 0 29 3 46 0 30 3 46 0 31 3 46 0 32 3 46 0 33 3 46 0 34 3 46 0 35 3 46 0 37 7 1 0 39 3 46 0 41 3 46 0 42 3 46 0 43 3 46 0 44 3 46 0 46 3 46 0 47 3 46 0 50 3 46 0 54 3 46 0 55 3 46 0 57 3 46 0 58 3 46 0 59 3 46 0 63 3 46 0 64 3 46 0 66 3 46 0 68 3 46 0 69 3 46 0 70 3 46 0 71 3 46 0 72 3 46 0 73 3 46 0 74 3 46 0 75 3 46 0 76 3 46 0 77 3 46 0 78 3 46 0 80 3 46 0 82 3 46 0 83 3 46 0 86 3 46 0 87 3 46 0 88 3 46 0 89 3 46 0 90 7 5 0 111 7 9 1 70 3 46 1 109] -#[0 7 13 0 82] -#[0 7 17 0 82] -#[0 7 21 0 82] -#[0 3 50 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 3 54 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 7 25 0 21] -#[0 3 58 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 3 62 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 7 29 0 21] -#[1 7 33 0 30 7 37 0 34 3 66 0 83 7 41 0 113 7 45 0 114 7 49 0 115 7 53 0 117 7 57 1 99] -#[0 3 70 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 3 74 0 4 0 7 0 17 0 31 0 33 0 44 0 48 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 82 0 83] -#[0 3 78 0 2 0 4 0 20 0 22 0 54 0 63 0 77 0 86] -#[1 3 82 0 5 7 61 0 6 7 69 0 9 7 69 1 69] -#[0 3 86 0 5 0 6 0 9] -#[1 4 81 0 4 4 85 0 20 4 89 0 63 2 17 0 86 7 73 1 36 7 73 1 38 2 17 1 39 7 73 1 40 7 73 1 45 7 73 1 46 7 73 1 47 7 73 1 48 7 73 1 49 7 73 1 50 7 73 1 53] -#[1 3 90 0 2 3 90 0 22 7 85 0 54 7 81 0 77 3 90 0 86 7 85 1 84] -#[0 3 94 0 3 0 4 0 8 0 20 0 22 0 23 0 24 0 25 0 26 0 66 0 71 0 82 0 86 0 87 0 88 0 89 0 90] -#[0 3 98 0 3 0 4 0 8 0 20 0 22 0 23 0 24 0 25 0 26 0 66 0 71 0 82 0 86 0 87 0 88 0 89 0 90] -#[0 3 102 0 3 0 4 0 8 0 20 0 22 0 23 0 24 0 25 0 26 0 66 0 71 0 82 0 86 0 87 0 88 0 89 0 90] -#[0 3 106 0 3 0 4 0 8 0 20 0 22 0 23 0 24 0 25 0 26 0 66 0 71 0 82 0 86 0 87 0 88 0 89 0 90] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 85 0 66 0 89 0 71 0 105 0 82 1 213 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 7 89 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35] -#[0 7 93 0 86] -#[1 0 6 0 4 0 21 0 17 0 6 0 20 0 6 0 63 0 6 0 86 1 57 0 245 1 61 0 248 7 97 1 59] -#[0 3 110 0 17 0 31 0 33 0 44 0 48 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 82 0 83] -#[0 7 101 0 48] -#[0 7 105 0 48] -#[0 3 114 0 3 0 4 0 8 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 31 0 32 0 33 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 86 0 87 0 88 0 89 0 90] -#[1 5 21 0 6 5 25 0 7 2 6 0 48 5 29 0 174 7 109 1 77] -#[1 5 25 0 7 2 6 0 48 5 29 0 174 7 113 1 77] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 21 0 17 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 49 0 29 0 6 0 31 0 53 0 32 0 6 0 33 0 6 0 35 0 57 0 37 0 61 0 41 0 65 0 42 0 69 0 43 0 6 0 44 0 73 0 46 0 6 0 47 0 6 0 50 0 6 0 54 0 6 0 55 0 6 0 57 0 77 0 58 0 6 0 59 0 6 0 63 0 81 0 64 0 85 0 66 0 6 0 68 0 6 0 69 0 6 0 70 0 89 0 71 0 93 0 72 0 97 0 73 0 6 0 74 0 6 0 75 0 6 0 76 0 6 0 77 0 6 0 78 0 101 0 80 0 105 0 82 7 117 0 83 0 7 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 2 237 0 99 0 153 0 101 0 153 0 102 0 153 0 104 0 153 0 105 0 153 0 107 0 173 0 108 0 173 0 109 0 173 0 112 0 185 0 120 0 189 0 121 0 193 0 122 0 197 0 123 0 197 0 124 0 197 0 125 0 197 0 126 0 197 0 127 0 217 0 139 0 217 0 145 0 217 0 149 0 217 0 153 0 237 0 154 0 217 0 166 0 245 0 167 0 217 0 170 0 253 0 171 0 217 0 183 0 217 0 199 0 217 0 202 0 217 0 205 0 217 0 215 1 21 0 216 0 217 0 218 0 217 0 219 0 217 0 221 1 37 0 222 0 217 0 224 0 217 0 225 0 217 0 226 0 217 0 227 1 57 0 245 1 61 0 248 1 65 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 1 165 1 59] -#[1 7 121 0 6 7 125 0 15] -#[0 3 118 0 6 0 15] -#[1 6 213 0 1 3 122 0 6 6 217 0 7 6 221 0 8 3 122 0 15 6 225 0 16] -#[1 0 247 0 5 0 247 0 6 1 210 0 27] -#[1 0 9 0 3 3 21 0 4 0 15 0 8 0 25 0 20 2 25 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 2 29 0 52 2 33 0 54 0 85 0 66 0 89 0 71 2 37 0 77 0 105 0 82 2 41 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 7 129 0 151 3 41 0 233 2 57 0 234 2 61 0 235 2 65 0 236 2 69 0 237 2 73 0 240 2 77 0 241 2 81 0 242 2 85 0 243 2 89 0 244 2 89 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 2 113 1 38 2 17 1 39 2 113 1 106] -#[1 5 81 0 13 1 15 0 82 7 133 0 144 5 85 0 152 7 137 0 156 7 141 0 160 7 145 1 81] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 85 0 66 0 89 0 71 0 105 0 82 1 213 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 7 149 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35] -#[0 3 126 0 3 0 4 0 6 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 3 130 0 3 0 4 0 6 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 6 213 0 1 3 134 0 3 3 134 0 4 6 217 0 7 1 19 0 8 3 134 0 11 6 225 0 16 3 134 0 17 3 134 0 20 3 134 0 22 3 134 0 23 3 134 0 24 3 134 0 25 3 134 0 26 3 134 0 29 3 134 0 30 3 134 0 31 3 134 0 32 3 134 0 33 3 134 0 34 3 134 0 35 3 134 0 37 3 134 0 41 3 134 0 42 3 134 0 43 3 134 0 44 3 134 0 46 3 134 0 47 3 134 0 50 3 134 0 54 3 134 0 55 3 134 0 57 3 134 0 58 3 134 0 59 3 134 0 63 3 134 0 64 3 134 0 66 3 134 0 68 3 134 0 69 3 134 0 70 3 134 0 71 3 134 0 72 3 134 0 73 3 134 0 74 3 134 0 75 3 134 0 76 3 134 0 77 3 134 0 78 3 134 0 80 3 134 0 82 3 134 0 83 3 134 0 86 3 134 0 87 3 134 0 88 3 134 0 89 3 134 0 90 3 134 1 109] -#[1 3 138 0 4 3 138 0 7 3 138 0 82 7 153 0 173 7 157 0 176] -#[1 7 161 0 6 3 142 0 15 7 165 0 79 7 169 0 131 7 173 1 93] -#[0 3 146 0 6 0 15 0 79] -#[1 3 150 0 6 7 177 0 10 3 150 0 15 3 150 0 79] -#[1 2 1 0 82 7 185 0 144 7 185 0 217] -#[1 4 81 0 4 4 85 0 20 4 89 0 63 2 17 0 86 7 189 1 36 7 189 1 38 2 17 1 39 7 189 1 40 7 189 1 45 7 189 1 46 7 189 1 47 7 189 1 48 7 189 1 49 7 189 1 50 7 189 1 53] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 21 0 17 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 49 0 29 0 6 0 31 0 53 0 32 0 6 0 33 0 6 0 35 0 57 0 37 0 61 0 41 0 65 0 42 0 69 0 43 0 6 0 44 0 6 0 45 0 73 0 46 0 6 0 47 0 6 0 50 0 6 0 54 0 6 0 55 0 6 0 57 0 77 0 58 0 6 0 59 0 6 0 63 0 81 0 64 0 85 0 66 0 6 0 67 0 6 0 68 0 6 0 69 0 6 0 70 0 89 0 71 0 93 0 72 0 97 0 73 0 6 0 74 0 6 0 75 0 6 0 76 0 6 0 77 0 6 0 78 0 101 0 80 0 105 0 82 0 10 0 83 0 7 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 0 145 0 99 0 149 0 100 0 153 0 101 0 153 0 102 0 153 0 104 0 153 0 105 0 153 0 107 0 173 0 108 0 173 0 109 0 173 0 112 0 185 0 120 0 189 0 121 0 193 0 122 0 197 0 123 0 197 0 124 0 197 0 125 0 197 0 126 0 197 0 127 0 217 0 139 0 217 0 145 0 217 0 149 0 217 0 153 0 237 0 154 7 193 0 157 7 197 0 158 7 201 0 161 7 205 0 162 0 217 0 166 0 245 0 167 0 217 0 170 0 253 0 171 0 217 0 183 0 217 0 199 0 217 0 202 0 217 0 205 0 217 0 215 1 21 0 216 0 217 0 218 0 217 0 219 0 217 0 221 1 37 0 222 0 217 0 224 0 217 0 225 0 217 0 226 0 217 0 227 1 57 0 245 1 61 0 248 1 65 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 7 209 1 59 4 29 1 98] -#[0 3 154 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 3 158 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 3 162 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 7 213 0 10] -#[1 4 81 0 4 4 85 0 20 4 89 0 63 2 17 0 86 7 217 1 36 7 217 1 38 2 17 1 39 7 217 1 40 7 217 1 45 7 217 1 46 7 217 1 47 7 217 1 48 7 217 1 49 7 217 1 50 7 217 1 53] -#[1 6 213 0 1 3 166 0 3 3 166 0 4 3 166 0 5 3 166 0 6 6 217 0 7 1 23 0 8 3 166 0 9 3 166 0 10 3 166 0 11 3 166 0 13 1 27 0 16 3 166 0 17 3 166 0 20 3 166 0 21 3 166 0 22 3 166 0 23 3 166 0 24 3 166 0 25 3 166 0 26 3 166 0 27 3 166 0 29 3 166 0 30 3 166 0 31 3 166 0 32 3 166 0 33 3 166 0 34 3 166 0 35 3 166 0 37 3 166 0 41 3 166 0 42 3 166 0 43 3 166 0 44 3 166 0 46 3 166 0 47 3 166 0 48 3 166 0 50 3 166 0 52 3 166 0 54 3 166 0 55 3 166 0 57 3 166 0 58 3 166 0 59 3 166 0 63 3 166 0 64 3 166 0 66 3 166 0 68 3 166 0 69 3 166 0 70 3 166 0 71 3 166 0 72 3 166 0 73 3 166 0 74 3 166 0 75 3 166 0 76 3 166 0 77 3 166 0 78 3 166 0 79 3 166 0 80 3 166 0 82 3 166 0 83 3 166 0 86 3 166 0 87 3 166 0 88 3 166 0 89 3 166 0 90 3 166 1 109] -#[1 6 213 0 1 3 170 0 3 3 170 0 4 3 170 0 5 3 170 0 6 6 217 0 7 1 31 0 8 3 170 0 9 3 170 0 10 3 170 0 11 3 170 0 13 1 35 0 16 3 170 0 17 3 170 0 20 3 170 0 21 3 170 0 22 3 170 0 23 3 170 0 24 3 170 0 25 3 170 0 26 3 170 0 27 3 170 0 29 3 170 0 30 3 170 0 31 3 170 0 32 3 170 0 33 3 170 0 34 3 170 0 35 3 170 0 37 3 170 0 41 3 170 0 42 3 170 0 43 3 170 0 44 3 170 0 46 3 170 0 47 3 170 0 48 3 170 0 50 3 170 0 52 3 170 0 54 3 170 0 55 3 170 0 57 3 170 0 58 3 170 0 59 3 170 0 63 3 170 0 64 3 170 0 66 3 170 0 68 3 170 0 69 3 170 0 70 3 170 0 71 3 170 0 72 3 170 0 73 3 170 0 74 3 170 0 75 3 170 0 76 3 170 0 77 3 170 0 78 3 170 0 79 3 170 0 80 3 170 0 82 3 170 0 83 3 170 0 86 3 170 0 87 3 170 0 88 3 170 0 89 3 170 0 90 3 170 1 109] -#[0 3 174 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 3 178 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 3 182 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 3 186 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 3 190 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 3 194 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 3 198 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 0 70 0 1 0 70 0 3 0 70 0 4 0 70 0 5 0 70 0 6 0 70 0 8 0 70 0 9 0 70 0 10 0 70 0 11 2 221 0 12 0 70 0 13 0 70 0 16 0 70 0 17 0 70 0 20 0 70 0 21 0 70 0 22 0 70 0 23 0 70 0 24 0 70 0 25 0 70 0 26 0 70 0 27 0 70 0 29 0 70 0 30 0 70 0 31 0 70 0 32 0 70 0 33 0 70 0 34 0 70 0 35 0 70 0 37 0 70 0 41 0 70 0 42 0 70 0 43 0 70 0 44 0 70 0 46 0 70 0 47 0 70 0 48 0 70 0 50 0 70 0 52 0 70 0 54 0 70 0 55 0 70 0 57 0 70 0 58 0 70 0 59 0 70 0 63 0 70 0 64 0 70 0 66 0 70 0 68 0 70 0 69 0 70 0 70 0 70 0 71 0 70 0 72 0 70 0 73 0 70 0 74 0 70 0 75 0 70 0 76 0 70 0 77 0 70 0 78 0 70 0 79 0 70 0 80 0 70 0 82 0 70 0 83 0 70 0 86 0 70 0 87 0 70 0 88 0 70 0 89 0 70 0 90 2 225 0 136 7 221 1 73 0 70 1 109] -#[0 3 202 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 1 206 0 6 0 21] -#[1 4 169 0 6 7 225 0 21] -#[0 3 206 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 3 210 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 3 214 0 10 0 12 0 82] -#[1 0 198 0 10 3 69 0 12 0 198 0 82 3 73 0 128 7 229 1 74] -#[0 3 218 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 3 222 0 86 0 90] -#[0 3 226 0 86 0 90] -#[0 3 230 0 86 0 90] -#[0 3 234 0 86 0 90] -#[0 3 238 0 86 0 90] -#[0 3 242 0 86 0 90] -#[0 3 246 0 86 0 90] -#[0 3 250 0 86 0 90] -#[1 7 233 0 86 7 237 0 90 7 241 0 147 7 245 0 148] -#[0 3 254 0 10 0 82] -#[1 4 37 0 10 1 154 0 82 4 41 1 54 7 249 1 107] -#[0 4 2 0 10 0 12 0 82] -#[1 0 198 0 10 3 69 0 12 0 198 0 82 3 73 0 128 7 253 1 74] -#[0 4 6 0 7] -#[0 4 10 0 31 0 44 0 54 0 55 0 57 0 59 0 68 0 74 0 75 0 76 0 77 0 78] -#[0 4 14 0 31 0 44 0 54 0 55 0 57 0 59 0 68 0 74 0 75 0 76 0 77 0 78] -#[0 4 18 0 31 0 44 0 54 0 55 0 57 0 59 0 68 0 74 0 75 0 76 0 77 0 78] -#[0 4 22 0 31 0 44 0 54 0 55 0 57 0 59 0 68 0 74 0 75 0 76 0 77 0 78] -#[0 4 26 0 31 0 44 0 54 0 55 0 57 0 59 0 68 0 74 0 75 0 76 0 77 0 78] -#[0 4 30 0 31 0 44 0 54 0 55 0 57 0 59 0 68 0 74 0 75 0 76 0 77 0 78] -#[0 4 34 0 31 0 44 0 54 0 55 0 57 0 59 0 68 0 74 0 75 0 76 0 77 0 78] -#[0 4 38 0 31 0 44 0 54 0 55 0 57 0 59 0 68 0 74 0 75 0 76 0 77 0 78] -#[0 4 42 0 31 0 44 0 54 0 55 0 57 0 59 0 68 0 74 0 75 0 76 0 77 0 78] -#[0 4 46 0 31 0 44 0 54 0 55 0 57 0 59 0 68 0 74 0 75 0 76 0 77 0 78] -#[1 8 1 0 10 8 5 0 82] -#[0 4 50 0 4 0 12] -#[0 4 54 0 86 0 90] -#[1 0 9 0 3 3 21 0 4 0 15 0 8 0 25 0 20 2 25 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 2 29 0 52 2 33 0 54 0 85 0 66 0 89 0 71 2 37 0 77 0 105 0 82 2 41 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 8 9 0 150 3 33 0 151 3 41 0 233 2 57 0 234 2 61 0 235 2 65 0 236 2 69 0 237 2 73 0 240 2 77 0 241 2 81 0 242 2 85 0 243 2 89 0 244 2 89 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 2 113 1 38 2 17 1 39 2 113 1 106] -#[0 4 58 0 3 0 4 0 8 0 20 0 22 0 23 0 24 0 25 0 26 0 52 0 54 0 66 0 71 0 77 0 82 0 86 0 87 0 88 0 89 0 90] -#[0 4 62 0 5 0 6] -#[0 4 66 0 5 0 6] -#[1 6 85 0 4 2 178 0 5 6 89 0 20 6 93 0 82 6 97 0 86 0 113 0 87 0 117 0 88 0 133 0 89 6 101 0 90 0 133 0 94 6 105 0 95 6 109 0 249 6 113 0 250 8 13 1 60] -#[1 6 85 0 4 6 89 0 20 2 178 0 21 6 93 0 82 6 97 0 86 0 113 0 87 0 117 0 88 0 133 0 89 6 101 0 90 0 133 0 94 6 105 0 95 6 109 0 249 6 113 0 250 8 17 1 60] -#[1 6 85 0 4 6 89 0 20 6 93 0 82 2 178 0 83 6 97 0 86 0 113 0 87 0 117 0 88 0 133 0 89 6 101 0 90 0 133 0 94 6 105 0 95 6 109 0 249 6 113 0 250 8 21 1 60] -#[0 4 70 0 4 0 5 0 20 0 21 0 82 0 83 0 86 0 87 0 88 0 89 0 90] -#[0 4 74 0 4 0 5 0 20 0 21 0 82 0 83 0 86 0 87 0 88 0 89 0 90] -#[0 4 78 0 4 0 5 0 20 0 21 0 82 0 83 0 86 0 87 0 88 0 89 0 90] -#[1 6 85 0 4 4 82 0 5 6 89 0 20 4 82 0 21 6 93 0 82 4 82 0 83 6 97 0 86 0 113 0 87 0 117 0 88 0 133 0 89 6 101 0 90 0 133 0 94 6 105 0 95 8 25 0 250] -#[0 4 86 0 4 0 5 0 20 0 21 0 82 0 83 0 86 0 87 0 88 0 89 0 90] -#[0 8 29 0 5] -#[0 4 90 0 6 0 21] -#[0 1 126 0 6 0 21] -#[0 4 94 0 21] -#[0 4 1 0 10] -#[0 4 98 0 21] -#[0 4 102 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 36 0 37 0 39 0 41 0 42 0 43 0 44 0 45 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 67 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 81 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 4 106 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 4 110 0 6 0 13 0 17 0 31 0 33 0 44 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 82 0 83] -#[1 8 33 0 6 4 114 0 13 4 114 0 17 4 114 0 31 4 114 0 33 4 114 0 44 4 114 0 50 4 114 0 55 4 114 0 57 4 114 0 59 4 114 0 68 4 114 0 70 4 114 0 73 4 114 0 74 4 114 0 75 4 114 0 76 4 114 0 77 4 114 0 78 4 114 0 82 4 114 0 83] -#[1 4 118 0 17 4 118 0 31 4 118 0 33 4 118 0 35 4 118 0 41 4 118 0 44 4 118 0 47 4 118 0 50 4 118 0 54 4 118 0 55 4 118 0 57 4 118 0 58 4 118 0 59 4 118 0 63 4 118 0 68 4 118 0 69 4 118 0 70 4 118 0 73 4 118 0 74 4 118 0 75 4 118 0 76 4 118 0 77 4 118 0 78 1 39 0 83 4 118 0 86 8 37 0 140 8 41 1 66] -#[0 4 126 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 2 17 0 86 8 45 1 38 2 17 1 39] -#[1 0 9 0 3 3 21 0 4 0 15 0 8 0 25 0 20 2 25 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 2 29 0 52 2 33 0 54 0 85 0 66 0 89 0 71 2 37 0 77 0 105 0 82 2 41 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 4 57 0 233 2 57 0 234 2 61 0 235 2 65 0 236 2 69 0 237 8 49 0 239 2 73 0 240 2 77 0 241 2 81 0 242 2 85 0 243 2 89 0 244 2 89 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 2 113 1 38 2 17 1 39 2 113 1 106] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 58 0 11 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 85 0 66 0 89 0 71 0 105 0 82 1 213 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 8 53 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 8 53 1 71] -#[0 4 130 0 3 0 4 0 5 0 6 0 8 0 10 0 11 0 13 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 4 134 0 5] -#[1 3 82 0 5 8 57 0 6 8 61 0 9 8 61 1 69] -#[0 4 138 0 5 0 6 0 9] -#[1 1 254 0 4 1 254 0 20 8 65 0 51 1 254 0 63 1 254 0 86 8 65 1 82] -#[0 8 73 0 86 1 44] -#[0 8 77 0 5] -#[1 6 213 0 1 6 217 0 7 6 221 0 8 8 81 0 10 6 225 0 16 8 85 0 21] -#[1 4 142 0 15 2 17 0 86 8 97 1 38 2 17 1 39 8 93 1 51 8 97 1 52 8 101 1 89] -#[0 4 146 0 1 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 13 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 4 81 0 4 4 85 0 20 4 89 0 63 2 17 0 86 8 105 1 36 8 105 1 38 2 17 1 39 8 105 1 40 8 105 1 45 8 105 1 46 8 105 1 47 8 105 1 48 8 105 1 49 8 105 1 50 8 105 1 53] -#[1 8 109 0 18 8 113 0 19] -#[0 4 150 0 1 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 13 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 6 213 0 1 4 154 0 3 4 154 0 4 4 154 0 5 4 154 0 6 6 217 0 7 1 43 0 8 4 154 0 10 4 154 0 11 4 154 0 13 6 225 0 16 4 154 0 17 4 154 0 20 4 154 0 22 4 154 0 23 4 154 0 24 4 154 0 25 4 154 0 26 4 154 0 27 4 154 0 29 4 154 0 30 4 154 0 31 4 154 0 32 4 154 0 33 4 154 0 34 4 154 0 35 4 154 0 37 4 154 0 41 4 154 0 42 4 154 0 43 4 154 0 44 4 154 0 46 4 154 0 47 4 154 0 48 4 154 0 50 4 154 0 54 4 154 0 55 4 154 0 57 4 154 0 58 4 154 0 59 4 154 0 63 4 154 0 64 4 154 0 66 4 154 0 68 4 154 0 69 4 154 0 70 4 154 0 71 4 154 0 72 4 154 0 73 4 154 0 74 4 154 0 75 4 154 0 76 4 154 0 77 4 154 0 78 4 154 0 79 4 154 0 80 4 154 0 82 4 154 0 83 4 154 0 86 4 154 0 87 4 154 0 88 4 154 0 89 4 154 0 90 4 154 1 109] -#[1 2 1 0 82 8 117 0 144] -#[1 4 81 0 4 4 85 0 20 4 89 0 63 2 17 0 86 8 121 1 36 8 121 1 38 2 17 1 39 8 121 1 40 8 121 1 45 8 121 1 46 8 121 1 47 8 121 1 48 8 121 1 49 8 121 1 50 8 121 1 53] -#[0 4 158 0 6 0 11 0 21] -#[0 8 125 0 11] -#[0 4 162 0 3 0 4 0 5 0 6 0 8 0 10 0 11 0 13 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 4 166 0 3 1 47 0 4 4 166 0 5 4 166 0 6 4 166 0 8 4 166 0 10 4 166 0 11 4 166 0 13 4 166 0 17 4 166 0 20 4 166 0 22 4 166 0 23 4 166 0 24 4 166 0 25 4 166 0 26 4 166 0 27 4 166 0 29 4 166 0 30 4 166 0 31 4 166 0 32 4 166 0 33 4 166 0 34 4 166 0 35 4 166 0 37 4 166 0 41 4 166 0 42 4 166 0 43 4 166 0 44 4 166 0 46 4 166 0 47 4 166 0 48 4 166 0 50 4 166 0 54 4 166 0 55 4 166 0 57 4 166 0 58 4 166 0 59 4 166 0 63 4 166 0 64 4 166 0 66 4 166 0 68 4 166 0 69 4 166 0 70 4 166 0 71 4 166 0 72 4 166 0 73 4 166 0 74 4 166 0 75 4 166 0 76 4 166 0 77 4 166 0 78 4 166 0 79 4 166 0 80 4 166 0 82 4 166 0 83 4 166 0 86 4 166 0 87 4 166 0 88 4 166 0 89 4 166 0 90 8 133 0 237 8 137 1 100 4 166 1 109] -#[1 0 73 0 46 2 1 0 82 8 141 0 109 8 145 0 144] -#[0 4 170 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 4 174 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 4 178 0 28 8 149 0 61 1 51 0 83 8 153 0 228 8 157 0 229 8 161 1 80 8 165 1 87] -#[0 8 169 0 83] -#[0 8 173 0 83] -#[0 4 186 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 4 190 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 0 9 0 3 3 21 0 4 0 15 0 8 0 25 0 20 2 25 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 2 29 0 52 2 33 0 54 0 85 0 66 0 89 0 71 2 37 0 77 0 105 0 82 2 41 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 8 177 0 116 8 181 0 233 2 57 0 234 2 61 0 235 2 65 0 236 2 69 0 237 2 73 0 240 2 77 0 241 2 81 0 242 2 85 0 243 2 89 0 244 2 89 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 2 113 1 38 2 17 1 39 2 113 1 106] -#[0 8 185 0 10] -#[1 7 33 0 30 7 37 0 34 4 194 0 83 8 189 0 114 7 49 0 115 7 53 0 117] -#[0 4 198 0 30 0 34 0 83] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 8 193 0 11 0 21 0 17 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 49 0 29 0 6 0 31 0 53 0 32 0 6 0 33 0 6 0 35 0 57 0 37 0 61 0 41 0 65 0 42 0 69 0 43 0 6 0 44 0 73 0 46 0 6 0 47 0 6 0 50 0 6 0 54 0 6 0 55 0 6 0 57 0 77 0 58 0 6 0 59 0 6 0 63 0 81 0 64 0 85 0 66 0 6 0 68 0 6 0 69 0 6 0 70 0 89 0 71 0 93 0 72 0 97 0 73 0 6 0 74 0 6 0 75 0 6 0 76 0 6 0 77 0 6 0 78 0 101 0 80 0 105 0 82 0 7 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 0 145 0 99 8 197 0 100 0 153 0 101 0 153 0 102 0 153 0 104 0 153 0 105 0 153 0 107 0 173 0 108 0 173 0 109 0 173 0 112 0 185 0 120 0 189 0 121 0 193 0 122 0 197 0 123 0 197 0 124 0 197 0 125 0 197 0 126 0 197 0 127 0 217 0 139 0 217 0 145 0 217 0 149 0 217 0 153 0 237 0 154 0 217 0 166 0 245 0 167 0 217 0 170 0 253 0 171 0 217 0 183 0 217 0 199 0 217 0 202 0 217 0 205 0 217 0 215 1 21 0 216 0 217 0 218 0 217 0 219 0 217 0 221 1 37 0 222 0 217 0 224 0 217 0 225 0 217 0 226 0 217 0 227 1 57 0 245 1 61 0 248 1 65 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 1 165 1 59] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 8 201 0 11 0 21 0 17 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 49 0 29 0 6 0 31 0 53 0 32 0 6 0 33 0 6 0 35 0 57 0 37 0 61 0 41 0 65 0 42 0 69 0 43 0 6 0 44 0 73 0 46 0 6 0 47 0 6 0 50 0 6 0 54 0 6 0 55 0 6 0 57 0 77 0 58 0 6 0 59 0 6 0 63 0 81 0 64 0 85 0 66 0 6 0 68 0 6 0 69 0 6 0 70 0 89 0 71 0 93 0 72 0 97 0 73 0 6 0 74 0 6 0 75 0 6 0 76 0 6 0 77 0 6 0 78 0 101 0 80 0 105 0 82 0 7 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 0 145 0 99 8 205 0 100 0 153 0 101 0 153 0 102 0 153 0 104 0 153 0 105 0 153 0 107 0 173 0 108 0 173 0 109 0 173 0 112 0 185 0 120 0 189 0 121 0 193 0 122 0 197 0 123 0 197 0 124 0 197 0 125 0 197 0 126 0 197 0 127 0 217 0 139 0 217 0 145 0 217 0 149 0 217 0 153 0 237 0 154 0 217 0 166 0 245 0 167 0 217 0 170 0 253 0 171 0 217 0 183 0 217 0 199 0 217 0 202 0 217 0 205 0 217 0 215 1 21 0 216 0 217 0 218 0 217 0 219 0 217 0 221 1 37 0 222 0 217 0 224 0 217 0 225 0 217 0 226 0 217 0 227 1 57 0 245 1 61 0 248 1 65 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 1 165 1 59] -#[0 8 209 0 83] -#[1 1 254 0 2 0 6 0 4 0 21 0 17 0 6 0 20 1 254 0 22 4 253 0 51 1 254 0 54 0 6 0 63 1 254 0 77 0 187 0 86 8 213 0 179 1 57 0 245 1 61 0 248 4 249 1 59 4 253 1 82] -#[0 4 202 0 5] -#[0 8 217 0 5] -#[1 6 213 0 1 4 206 0 5 4 206 0 6 6 217 0 7 6 221 0 8 4 206 0 9 6 225 0 16] -#[0 4 210 0 2 0 22 0 86] -#[1 8 225 0 2 4 214 0 22 4 214 0 86 8 225 1 78] -#[1 8 229 0 2 4 214 0 22 4 214 0 86 8 229 1 78] -#[0 8 233 0 21] -#[0 4 218 0 6 0 7 0 48] -#[1 4 81 0 4 4 85 0 20 4 89 0 63 2 17 0 86 8 237 1 36 8 237 1 38 2 17 1 39 8 237 1 40 8 237 1 45 8 237 1 46 8 237 1 47 8 237 1 48 8 237 1 49 8 237 1 50 8 237 1 53] -#[0 4 222 0 3 0 4 0 8 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 31 0 32 0 33 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 86 0 87 0 88 0 89 0 90] -#[0 4 226 0 3 0 4 0 8 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 31 0 32 0 33 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 86 0 87 0 88 0 89 0 90] -#[0 8 241 0 48] -#[0 8 245 0 48] -#[0 4 230 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 4 81 0 4 4 85 0 20 4 89 0 63 2 17 0 86 8 249 0 138 5 65 1 36 5 65 1 38 2 17 1 39 5 65 1 40 5 65 1 45 5 65 1 46 5 65 1 47 5 65 1 48 5 65 1 49 5 65 1 50 5 65 1 53] -#[0 4 234 0 1 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 13 0 14 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 4 238 0 3 0 4 0 6 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 4 242 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 4 246 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 4 250 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 8 253 0 82 9 1 0 163] -#[0 4 254 0 3 0 4 0 6 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 2 1 0 82 9 9 0 144 9 9 0 175] -#[1 2 189 0 4 5 25 0 7 2 6 0 17 2 6 0 31 2 6 0 33 2 6 0 44 2 6 0 50 2 6 0 55 2 6 0 57 2 6 0 59 2 6 0 68 2 6 0 70 2 6 0 73 2 6 0 74 2 6 0 75 2 6 0 76 2 6 0 77 2 6 0 78 2 6 0 82 2 6 0 83 5 29 0 174 9 13 0 177 9 17 1 77] -#[1 5 109 0 86 9 21 0 130 5 109 1 39] -#[1 2 17 0 86 9 25 0 132 9 29 0 133 9 33 0 134 9 37 0 135 9 41 1 38 2 17 1 39] -#[0 5 2 0 15] -#[0 9 45 0 15] -#[1 4 89 0 63 2 17 0 86 9 49 1 38 2 17 1 39 9 53 1 50] -#[0 5 6 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 5 10 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 6 213 0 1 6 217 0 7 6 221 0 8 6 225 0 16 5 14 0 82] -#[1 0 21 0 17 0 6 0 67 5 18 0 83 9 57 0 158 1 57 0 245 1 61 0 248 9 61 1 59 9 65 1 95] -#[1 0 21 0 17 0 6 0 45 9 69 0 157 1 57 0 245 1 61 0 248 9 73 1 59] -#[1 0 21 0 17 0 6 0 67 5 22 0 83 9 77 0 162 1 57 0 245 1 61 0 248 9 81 1 59 9 85 1 96] -#[1 0 21 0 17 0 6 0 45 9 89 0 161 1 57 0 245 1 61 0 248 9 93 1 59] -#[1 0 151 0 31 3 221 0 33 3 181 0 35 0 155 0 44 9 97 0 45 3 185 0 47 1 90 0 50 0 155 0 54 1 82 0 55 1 82 0 57 1 82 0 59 3 189 0 63 9 101 0 67 1 82 0 68 3 193 0 69 3 197 0 70 1 82 0 74 1 82 0 75 1 82 0 76 0 155 0 77 1 82 0 78 3 213 0 86 3 205 0 141 3 209 0 184 3 213 0 190 3 217 0 192 3 221 1 64 3 225 1 65] -#[0 5 26 0 3 0 4 0 8 0 20 0 22 0 23 0 24 0 25 0 26 0 66 0 71 0 82 0 86 0 87 0 88 0 89 0 90] -#[1 6 213 0 1 5 30 0 3 5 30 0 4 5 30 0 5 5 30 0 6 6 217 0 7 1 55 0 8 5 30 0 9 5 30 0 10 5 30 0 11 5 30 0 13 1 59 0 16 5 30 0 17 5 30 0 20 5 30 0 21 5 30 0 22 5 30 0 23 5 30 0 24 5 30 0 25 5 30 0 26 5 30 0 27 5 30 0 29 5 30 0 30 5 30 0 31 5 30 0 32 5 30 0 33 5 30 0 34 5 30 0 35 5 30 0 37 5 30 0 41 5 30 0 42 5 30 0 43 5 30 0 44 5 30 0 46 5 30 0 47 5 30 0 48 5 30 0 50 5 30 0 52 5 30 0 54 5 30 0 55 5 30 0 57 5 30 0 58 5 30 0 59 5 30 0 63 5 30 0 64 5 30 0 66 5 30 0 68 5 30 0 69 5 30 0 70 5 30 0 71 5 30 0 72 5 30 0 73 5 30 0 74 5 30 0 75 5 30 0 76 5 30 0 77 5 30 0 78 5 30 0 79 5 30 0 80 5 30 0 82 5 30 0 83 5 30 0 86 5 30 0 87 5 30 0 88 5 30 0 89 5 30 0 90 5 30 1 109] -#[0 5 34 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 5 38 0 1 0 3 0 4 0 5 0 6 0 8 0 9 0 10 0 11 0 13 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 4 37 0 10 1 154 0 82 4 41 1 54 9 105 1 107] -#[0 5 42 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 5 46 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 5 50 0 3 5 50 0 4 1 63 0 8 5 50 0 11 5 50 0 17 5 50 0 20 5 50 0 22 5 50 0 23 5 50 0 24 5 50 0 25 5 50 0 26 5 50 0 29 5 50 0 30 5 50 0 31 5 50 0 32 5 50 0 33 5 50 0 34 5 50 0 35 5 50 0 37 5 50 0 41 5 50 0 42 5 50 0 43 5 50 0 44 5 50 0 46 5 50 0 47 5 50 0 50 5 50 0 54 5 50 0 55 5 50 0 57 5 50 0 58 5 50 0 59 5 50 0 63 5 50 0 64 5 50 0 66 5 50 0 68 5 50 0 69 5 50 0 70 5 50 0 71 5 50 0 72 5 50 0 73 5 50 0 74 5 50 0 75 5 50 0 76 5 50 0 77 5 50 0 78 5 50 0 80 5 50 0 82 5 50 0 83 5 50 0 86 5 50 0 87 5 50 0 88 5 50 0 89 5 50 0 90 5 50 1 109] -#[0 5 54 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 9 113 0 82 9 117 0 207] -#[1 4 37 0 10 1 154 0 82 4 41 1 54 9 121 1 107] -#[1 2 17 0 86 9 125 1 38 2 17 1 39] -#[1 0 21 0 17 0 6 0 30 0 6 0 31 0 6 0 33 0 6 0 35 0 61 0 41 0 6 0 44 0 6 0 47 0 6 0 50 0 6 0 54 0 6 0 55 0 6 0 57 0 77 0 58 0 6 0 59 0 6 0 63 0 6 0 68 0 6 0 69 0 6 0 70 0 97 0 73 0 6 0 74 0 6 0 75 0 6 0 76 0 6 0 77 0 6 0 78 5 58 0 83 0 6 0 86 9 129 0 139 9 129 0 145 9 129 0 149 9 129 0 153 0 237 0 154 9 129 0 166 0 245 0 167 9 129 0 170 0 253 0 171 9 129 0 183 9 133 0 185 9 137 0 186 9 141 0 187 9 129 0 199 9 129 0 202 9 129 0 205 9 129 0 215 1 21 0 216 9 129 0 218 9 129 0 219 9 129 0 221 1 37 0 222 9 129 0 224 9 129 0 225 9 129 0 226 9 129 0 227 1 57 0 245 1 61 0 248 9 145 1 59 9 149 1 108] -#[1 5 62 0 3 5 62 0 4 5 73 0 6 5 62 0 8 5 62 0 11 5 62 0 17 5 62 0 20 5 62 0 22 5 62 0 23 5 62 0 24 5 62 0 25 5 62 0 26 5 62 0 29 5 62 0 30 5 62 0 31 5 62 0 32 5 62 0 33 5 62 0 34 5 62 0 35 5 62 0 37 5 62 0 41 5 62 0 42 5 62 0 43 5 62 0 44 5 62 0 46 5 62 0 47 5 62 0 50 5 62 0 54 5 62 0 55 5 62 0 57 5 62 0 58 5 62 0 59 5 62 0 63 5 62 0 64 5 62 0 66 5 62 0 68 5 62 0 69 5 62 0 70 5 62 0 71 5 62 0 72 5 62 0 73 5 62 0 74 5 62 0 75 5 62 0 76 5 62 0 77 5 62 0 78 5 62 0 80 5 62 0 82 5 62 0 83 5 62 0 86 5 62 0 87 5 62 0 88 5 62 0 89 5 62 0 90 5 62 1 109] -#[0 9 153 0 5] -#[0 9 157 0 21] -#[0 9 161 0 83] -#[0 5 66 0 4 0 5 0 20 0 21 0 82 0 83 0 86 0 87 0 88 0 89 0 90] -#[0 5 70 0 4 0 17 0 20 0 30 0 31 0 33 0 35 0 36 0 44 0 45 0 47 0 50 0 51 0 54 0 55 0 57 0 59 0 63 0 67 0 68 0 69 0 70 0 74 0 75 0 76 0 77 0 78 0 81 0 86] -#[1 2 17 0 86 9 165 1 38 2 17 1 39] -#[1 0 21 0 17 0 6 0 31 0 6 0 33 0 6 0 35 0 61 0 41 0 6 0 44 0 6 0 47 0 6 0 50 0 6 0 54 0 6 0 55 0 6 0 57 0 77 0 58 0 6 0 59 0 6 0 63 0 6 0 68 0 6 0 69 0 6 0 70 0 97 0 73 0 6 0 74 0 6 0 75 0 6 0 76 0 6 0 77 0 6 0 78 5 74 0 83 0 6 0 86 9 169 0 139 9 169 0 145 9 169 0 149 9 169 0 153 0 237 0 154 9 169 0 166 0 245 0 167 9 169 0 170 0 253 0 171 9 169 0 183 9 169 0 199 9 169 0 202 9 169 0 205 9 169 0 215 1 21 0 216 9 169 0 218 9 169 0 219 9 169 0 221 1 37 0 222 9 169 0 224 9 169 0 225 9 169 0 226 9 169 0 227 1 57 0 245 1 61 0 248 1 165 1 59] -#[0 9 173 0 83] -#[0 5 78 0 1 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 13 0 14 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 5 82 0 5 0 6] -#[0 9 177 0 11] -#[1 0 6 0 4 0 21 0 17 0 6 0 20 0 255 0 51 0 6 0 63 0 187 0 86 1 57 0 245 1 61 0 248 9 181 1 43 6 193 1 59 6 197 1 82] -#[0 5 86 0 5] -#[1 4 81 0 4 4 85 0 20 4 89 0 63 2 17 0 86 9 185 1 36 9 185 1 38 2 17 1 39 9 185 1 40 9 185 1 45 9 185 1 46 9 185 1 47 9 185 1 48 9 185 1 49 9 185 1 50 9 185 1 53] -#[0 5 90 0 10] -#[1 4 149 0 10 9 189 1 37] -#[0 5 94 0 1 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 13 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 4 81 0 4 4 85 0 20 4 89 0 63 2 17 0 86 9 193 1 36 9 193 1 38 2 17 1 39 9 193 1 40 9 193 1 45 9 193 1 46 9 193 1 47 9 193 1 48 9 193 1 49 9 193 1 50 9 193 1 53] -#[0 5 98 0 1 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 13 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 5 102 0 6 0 15] -#[1 9 197 0 6 5 106 0 15] -#[0 5 110 0 6 0 15] -#[0 9 201 0 15] -#[1 1 67 0 1 5 114 0 3 5 114 0 4 5 114 0 5 5 114 0 6 1 71 0 7 1 75 0 8 5 114 0 9 5 114 0 10 5 114 0 11 5 114 0 13 5 114 0 15 1 79 0 16 5 114 0 17 5 114 0 20 5 114 0 21 5 114 0 22 5 114 0 23 5 114 0 24 5 114 0 25 5 114 0 26 5 114 0 27 5 114 0 29 5 114 0 30 5 114 0 31 5 114 0 32 5 114 0 33 5 114 0 34 5 114 0 35 5 114 0 37 5 114 0 41 5 114 0 42 5 114 0 43 5 114 0 44 5 114 0 46 5 114 0 47 5 114 0 48 5 114 0 50 5 114 0 52 5 114 0 54 5 114 0 55 5 114 0 57 5 114 0 58 5 114 0 59 5 114 0 63 5 114 0 64 5 114 0 66 5 114 0 68 5 114 0 69 5 114 0 70 5 114 0 71 5 114 0 72 5 114 0 73 5 114 0 74 5 114 0 75 5 114 0 76 5 114 0 77 5 114 0 78 5 114 0 79 5 114 0 80 5 114 0 82 5 114 0 83 5 114 0 86 5 114 0 87 5 114 0 88 5 114 0 89 5 114 0 90 5 114 1 109] -#[0 5 118 0 1 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 13 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 5 122 0 1 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 13 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 5 126 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 6 213 0 1 5 130 0 3 5 130 0 4 5 130 0 5 5 130 0 6 6 217 0 7 1 83 0 8 5 130 0 9 5 130 0 10 5 130 0 11 5 130 0 13 6 225 0 16 5 130 0 17 5 130 0 20 5 130 0 22 5 130 0 23 5 130 0 24 5 130 0 25 5 130 0 26 5 130 0 27 5 130 0 29 5 130 0 30 5 130 0 31 5 130 0 32 5 130 0 33 5 130 0 34 5 130 0 35 5 130 0 37 5 130 0 41 5 130 0 42 5 130 0 43 5 130 0 44 5 130 0 46 5 130 0 47 5 130 0 48 5 130 0 50 5 130 0 54 5 130 0 55 5 130 0 57 5 130 0 58 5 130 0 59 5 130 0 63 5 130 0 64 5 130 0 66 5 130 0 68 5 130 0 69 5 130 0 70 5 130 0 71 5 130 0 72 5 130 0 73 5 130 0 74 5 130 0 75 5 130 0 76 5 130 0 77 5 130 0 78 5 130 0 79 5 130 0 80 5 130 0 82 5 130 0 83 5 130 0 86 5 130 0 87 5 130 0 88 5 130 0 89 5 130 0 90 5 130 1 109] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 85 0 66 0 89 0 71 0 71 0 82 1 213 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 9 205 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 9 205 1 71] -#[1 0 9 0 3 3 21 0 4 1 158 0 5 0 15 0 8 0 25 0 20 2 25 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 2 29 0 52 2 33 0 54 0 85 0 66 0 89 0 71 2 37 0 77 0 105 0 82 2 41 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 4 57 0 233 2 57 0 234 2 61 0 235 2 65 0 236 2 69 0 237 4 61 0 238 4 65 0 239 2 73 0 240 2 77 0 241 2 81 0 242 2 85 0 243 2 89 0 244 2 89 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 2 113 1 38 2 17 1 39 4 77 1 101 2 113 1 106] -#[0 5 134 0 3 0 4 0 5 0 6 0 8 0 10 0 11 0 13 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 5 138 0 3 0 4 0 5 0 6 0 8 0 10 0 11 0 13 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 5 142 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 5 146 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 9 213 0 87 0 230] -#[0 5 150 0 83] -#[0 5 154 0 28 0 83] -#[0 9 217 0 83] -#[1 9 221 0 28 5 158 0 83 9 225 0 231 9 229 1 57] -#[0 5 162 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 5 166 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 9 233 0 6 9 237 0 10] -#[1 5 170 0 6 5 170 0 10 4 141 0 27 9 241 0 79 9 245 0 118 9 249 1 75] -#[0 5 174 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 31 0 32 0 33 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 86 0 87 0 88 0 89 0 90] -#[0 5 178 0 30 0 34 0 83] -#[0 5 182 0 30 0 34 0 83] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 21 0 17 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 49 0 29 5 186 0 30 0 6 0 31 0 53 0 32 0 6 0 33 5 186 0 34 0 6 0 35 0 57 0 37 0 61 0 41 0 65 0 42 0 69 0 43 0 6 0 44 0 73 0 46 0 6 0 47 0 6 0 50 0 6 0 54 0 6 0 55 0 6 0 57 0 77 0 58 0 6 0 59 0 6 0 63 0 81 0 64 0 85 0 66 0 6 0 68 0 6 0 69 0 6 0 70 0 89 0 71 0 93 0 72 0 97 0 73 0 6 0 74 0 6 0 75 0 6 0 76 0 6 0 77 0 6 0 78 0 101 0 80 0 105 0 82 5 186 0 83 0 7 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 2 237 0 99 0 153 0 101 0 153 0 102 0 153 0 104 0 153 0 105 0 153 0 107 0 173 0 108 0 173 0 109 0 173 0 112 0 185 0 120 0 189 0 121 0 193 0 122 0 197 0 123 0 197 0 124 0 197 0 125 0 197 0 126 0 197 0 127 0 217 0 139 0 217 0 145 0 217 0 149 0 217 0 153 0 237 0 154 0 217 0 166 0 245 0 167 0 217 0 170 0 253 0 171 0 217 0 183 0 217 0 199 0 217 0 202 0 217 0 205 0 217 0 215 1 21 0 216 0 217 0 218 0 217 0 219 0 217 0 221 1 37 0 222 0 217 0 224 0 217 0 225 0 217 0 226 0 217 0 227 1 57 0 245 1 61 0 248 1 65 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 1 165 1 59] -#[0 5 190 0 30 0 34 0 83] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 21 0 17 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 49 0 29 5 194 0 30 0 6 0 31 0 53 0 32 0 6 0 33 5 194 0 34 0 6 0 35 0 57 0 37 0 61 0 41 0 65 0 42 0 69 0 43 0 6 0 44 0 73 0 46 0 6 0 47 0 6 0 50 0 6 0 54 0 6 0 55 0 6 0 57 0 77 0 58 0 6 0 59 0 6 0 63 0 81 0 64 0 85 0 66 0 6 0 68 0 6 0 69 0 6 0 70 0 89 0 71 0 93 0 72 0 97 0 73 0 6 0 74 0 6 0 75 0 6 0 76 0 6 0 77 0 6 0 78 0 101 0 80 0 105 0 82 5 194 0 83 0 7 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 2 237 0 99 0 153 0 101 0 153 0 102 0 153 0 104 0 153 0 105 0 153 0 107 0 173 0 108 0 173 0 109 0 173 0 112 0 185 0 120 0 189 0 121 0 193 0 122 0 197 0 123 0 197 0 124 0 197 0 125 0 197 0 126 0 197 0 127 0 217 0 139 0 217 0 145 0 217 0 149 0 217 0 153 0 237 0 154 0 217 0 166 0 245 0 167 0 217 0 170 0 253 0 171 0 217 0 183 0 217 0 199 0 217 0 202 0 217 0 205 0 217 0 215 1 21 0 216 0 217 0 218 0 217 0 219 0 217 0 221 1 37 0 222 0 217 0 224 0 217 0 225 0 217 0 226 0 217 0 227 1 57 0 245 1 61 0 248 1 65 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 1 165 1 59] -#[0 5 198 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 5 202 0 5 0 6 0 9] -#[0 5 206 0 4 0 7 0 17 0 31 0 33 0 44 0 48 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 82 0 83] -#[0 5 210 0 22 0 86] -#[1 9 253 0 22 10 1 0 86 10 5 0 180] -#[1 9 253 0 22 10 1 0 86 10 9 0 180] -#[0 5 214 0 4 0 48 0 86] -#[1 6 213 0 1 6 217 0 7 6 221 0 8 6 225 0 16 5 218 0 17 5 218 0 31 5 218 0 33 5 218 0 44 5 218 0 48 5 218 0 50 5 218 0 55 5 218 0 57 5 218 0 59 5 218 0 68 5 218 0 70 5 218 0 73 5 218 0 74 5 218 0 75 5 218 0 76 5 218 0 77 5 218 0 78 5 218 0 82 5 218 0 83] -#[0 5 222 0 3 0 4 0 8 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 31 0 32 0 33 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 86 0 87 0 88 0 89 0 90] -#[0 5 226 0 3 0 4 0 8 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 31 0 32 0 33 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 86 0 87 0 88 0 89 0 90] -#[0 5 230 0 6 0 15] -#[1 0 21 0 17 0 6 0 36 0 6 0 81 10 13 0 164 10 17 0 165 1 57 0 245 1 61 0 248 10 21 1 59] -#[0 5 234 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 5 238 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 5 242 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 5 246 0 4 0 7 0 17 0 31 0 33 0 44 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 82 0 83] -#[0 5 250 0 17 0 31 0 33 0 44 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 82 0 83] -#[0 5 254 0 6 0 15 0 79] -#[1 10 25 0 6 6 2 0 15] -#[0 6 6 0 6 0 15] -#[0 6 10 0 6 0 15] -#[0 6 14 0 6 0 15] -#[1 10 29 0 10 10 33 0 14] -#[0 6 18 0 4 0 7 0 10 0 17 0 31 0 33 0 44 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 82 0 83] -#[0 6 22 0 6 0 15 0 79] -#[0 6 26 0 6 0 15 0 79] -#[0 6 30 0 83] -#[0 10 37 0 67] -#[0 10 41 0 83] -#[0 10 45 0 83] -#[0 10 49 0 45] -#[0 6 34 0 83] -#[0 10 53 0 67] -#[0 10 57 0 83] -#[0 10 61 0 83] -#[0 10 65 0 45] -#[1 6 38 0 17 6 38 0 67 2 1 0 82 6 38 0 83 10 69 0 144] -#[1 10 73 0 4 6 42 0 17 6 42 0 45 6 46 0 82 10 77 0 159 10 81 1 97] -#[1 10 85 0 82 10 89 0 204] -#[1 7 233 0 86 7 237 0 90 10 93 0 148] -#[1 0 21 0 17 0 6 0 31 0 6 0 33 0 6 0 44 0 6 0 50 0 6 0 55 0 6 0 57 0 6 0 59 0 6 0 68 0 6 0 70 0 97 0 73 0 6 0 74 0 6 0 75 0 6 0 76 0 6 0 77 0 6 0 78 6 50 0 83 10 97 0 154 10 101 0 167 10 105 0 171 10 109 0 208 10 113 0 209 10 109 0 210 10 109 0 211 10 109 0 212 10 109 0 213 10 109 0 214 10 137 0 216 10 141 0 222 1 57 0 245 1 61 0 248 10 145 1 59 10 149 1 90] -#[0 6 54 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 10 153 0 82 10 157 0 201] -#[0 10 161 0 82] -#[0 6 58 0 17 0 30 0 31 0 33 0 35 0 41 0 44 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 68 0 69 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83 0 86] -#[1 0 21 0 17 0 6 0 30 0 6 0 31 0 6 0 33 0 6 0 35 0 61 0 41 0 6 0 44 0 6 0 47 0 6 0 50 0 6 0 54 0 6 0 55 0 6 0 57 0 77 0 58 0 6 0 59 0 6 0 63 0 6 0 68 0 6 0 69 0 6 0 70 0 97 0 73 0 6 0 74 0 6 0 75 0 6 0 76 0 6 0 77 0 6 0 78 6 62 0 83 0 6 0 86 9 129 0 139 9 129 0 145 9 129 0 149 9 129 0 153 0 237 0 154 9 129 0 166 0 245 0 167 9 129 0 170 0 253 0 171 9 129 0 183 10 165 0 186 9 141 0 187 9 129 0 199 9 129 0 202 9 129 0 205 9 129 0 215 1 21 0 216 9 129 0 218 9 129 0 219 9 129 0 221 1 37 0 222 9 129 0 224 9 129 0 225 9 129 0 226 9 129 0 227 1 57 0 245 1 61 0 248 9 145 1 59] -#[0 6 66 0 17 0 30 0 31 0 33 0 35 0 41 0 44 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 68 0 69 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83 0 86] -#[0 6 70 0 17 0 30 0 31 0 33 0 35 0 41 0 44 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 68 0 69 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83 0 86] -#[1 10 169 0 30 0 151 0 31 3 221 0 33 3 181 0 35 0 155 0 44 3 185 0 47 1 90 0 50 0 155 0 54 1 82 0 55 1 82 0 57 1 82 0 59 3 189 0 63 1 82 0 68 3 193 0 69 3 197 0 70 1 82 0 74 1 82 0 75 1 82 0 76 0 155 0 77 1 82 0 78 3 213 0 86 3 205 0 141 3 209 0 184 3 213 0 190 3 217 0 192 3 221 1 64 3 225 1 65] -#[0 10 173 0 83] -#[0 6 74 0 4 0 5 0 20 0 21 0 82 0 83 0 86 0 87 0 88 0 89 0 90] -#[0 6 78 0 4 0 5 0 20 0 21 0 82 0 83 0 86 0 87 0 88 0 89 0 90] -#[0 6 82 0 4 0 5 0 20 0 21 0 82 0 83 0 86 0 87 0 88 0 89 0 90] -#[0 6 86 0 6 0 13 0 17 0 31 0 33 0 44 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 82 0 83] -#[0 6 90 0 17 0 31 0 33 0 35 0 41 0 44 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 68 0 69 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83 0 86] -#[0 6 94 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 0 9 0 3 0 13 0 4 0 58 0 5 0 17 0 8 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 85 0 66 0 89 0 71 0 105 0 82 1 213 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 10 177 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 10 177 1 71] -#[0 6 98 0 5 0 6 0 9] -#[1 6 213 0 1 6 102 0 5 6 102 0 6 6 217 0 7 6 221 0 8 6 102 0 9 6 225 0 16] -#[0 6 106 0 5 0 6 0 9] -#[1 6 213 0 1 6 217 0 7 6 221 0 8 6 225 0 16 10 181 0 21] -#[1 2 17 0 86 10 185 1 38 2 17 1 39 10 185 1 52] -#[0 6 110 0 1 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 13 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 2 1 0 82 10 189 0 144] -#[0 6 114 0 28 0 83] -#[0 6 118 0 28 0 83] -#[0 6 122 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 10 193 0 53 10 197 0 56 10 201 0 65 10 205 0 232] -#[0 6 126 0 83] -#[0 6 130 0 83] -#[1 0 9 0 3 3 21 0 4 0 15 0 8 0 25 0 20 2 25 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 2 29 0 52 2 33 0 54 0 85 0 66 0 89 0 71 2 37 0 77 0 105 0 82 2 41 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 10 209 0 233 2 57 0 234 2 61 0 235 2 65 0 236 2 69 0 237 2 73 0 240 2 77 0 241 2 81 0 242 2 85 0 243 2 89 0 244 2 89 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35 2 113 1 38 2 17 1 39 2 113 1 106] -#[0 6 134 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 31 0 32 0 33 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 86 0 87 0 88 0 89 0 90] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 85 0 66 0 89 0 71 0 105 0 82 1 213 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 10 213 0 119 10 213 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35] -#[0 6 138 0 6 0 10] -#[0 6 142 0 6 0 10] -#[0 6 146 0 10 0 22 0 86] -#[0 6 150 0 10 0 22 0 86] -#[1 6 154 0 10 10 221 0 22 10 225 0 86 10 229 0 181 10 233 1 85] -#[1 6 154 0 10 10 221 0 22 10 225 0 86 10 229 0 181 10 237 1 85] -#[1 0 21 0 17 0 6 0 36 6 158 0 83 10 241 0 165 1 57 0 245 1 61 0 248 10 245 1 59 10 249 1 68] -#[1 0 21 0 17 0 6 0 81 10 253 0 164 1 57 0 245 1 61 0 248 11 1 1 59] -#[1 11 5 0 36 11 9 0 81] -#[1 2 17 0 86 11 13 0 133 9 33 0 134 9 37 0 135 9 41 1 38 2 17 1 39] -#[1 4 89 0 63 2 17 0 86 11 17 1 38 2 17 1 39 11 21 1 50] -#[1 2 17 0 86 11 25 1 38 2 17 1 39] -#[1 10 73 0 4 6 46 0 82 10 77 0 159 10 81 1 97] -#[0 6 162 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 6 166 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 2 1 0 82 10 69 0 144] -#[0 6 42 0 17 0 45 0 83] -#[0 6 170 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 6 174 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 6 38 0 17 0 67 0 83] -#[0 6 178 0 17 0 67 0 83] -#[0 11 29 0 86] -#[0 6 182 0 82] -#[1 2 1 0 82 11 33 0 144] -#[1 4 118 0 17 4 118 0 31 4 118 0 33 4 118 0 35 4 118 0 41 4 118 0 44 4 118 0 47 4 118 0 50 4 118 0 54 4 118 0 55 4 118 0 57 4 118 0 58 4 118 0 59 4 118 0 63 4 118 0 68 4 118 0 69 4 118 0 70 4 118 0 73 4 118 0 74 4 118 0 75 4 118 0 76 4 118 0 77 4 118 0 78 1 39 0 83 4 118 0 86 8 37 0 140 11 37 1 66] -#[0 6 186 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 6 190 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 11 45 0 86 0 155] -#[1 4 37 0 10 1 154 0 13 1 154 0 17 1 154 0 31 1 154 0 33 1 154 0 44 1 154 0 50 1 154 0 55 1 154 0 57 1 154 0 59 1 154 0 68 1 154 0 70 1 154 0 73 1 154 0 74 1 154 0 75 1 154 0 76 1 154 0 77 1 154 0 78 1 154 0 83 4 41 1 54 11 49 1 107] -#[1 3 57 0 86 3 61 0 90 11 53 0 172] -#[0 6 194 0 17 0 31 0 33 0 44 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83] -#[1 0 21 0 17 0 6 0 31 0 6 0 33 0 6 0 44 0 6 0 50 0 6 0 55 0 6 0 57 0 6 0 59 0 6 0 68 0 6 0 70 0 97 0 73 0 6 0 74 0 6 0 75 0 6 0 76 0 6 0 77 0 6 0 78 6 198 0 83 10 97 0 154 10 101 0 167 10 105 0 171 11 57 0 208 11 57 0 210 11 57 0 211 11 57 0 212 11 57 0 213 11 57 0 214 10 137 0 216 10 141 0 222 1 57 0 245 1 61 0 248 10 145 1 59] -#[0 6 202 0 17 0 31 0 33 0 44 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83] -#[0 6 206 0 17 0 31 0 33 0 44 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83] -#[0 6 210 0 17 0 31 0 33 0 44 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83] -#[0 6 214 0 17 0 31 0 33 0 44 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83] -#[0 6 218 0 17 0 31 0 33 0 44 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83] -#[1 0 198 0 4 3 69 0 12 3 73 0 128 11 61 1 74] -#[1 3 81 0 7 11 65 0 223] -#[1 1 82 0 31 3 221 0 33 0 155 0 44 1 90 0 50 1 82 0 55 1 82 0 57 1 82 0 59 1 82 0 68 3 197 0 70 1 82 0 74 1 82 0 75 1 82 0 76 0 155 0 77 1 82 0 78 3 205 0 141 3 221 1 64 11 69 1 65] -#[0 11 73 0 83] -#[1 4 118 0 17 4 118 0 31 4 118 0 33 4 118 0 35 4 118 0 41 4 118 0 44 4 118 0 47 4 118 0 50 4 118 0 54 4 118 0 55 4 118 0 57 4 118 0 58 4 118 0 59 4 118 0 63 4 118 0 68 4 118 0 69 4 118 0 70 4 118 0 73 4 118 0 74 4 118 0 75 4 118 0 76 4 118 0 77 4 118 0 78 1 39 0 83 4 118 0 86 8 37 0 140 11 77 1 66] -#[0 6 222 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 0 21 0 17 0 6 0 30 0 6 0 31 0 6 0 33 0 6 0 35 0 61 0 41 0 6 0 44 0 6 0 47 0 6 0 50 0 6 0 54 0 6 0 55 0 6 0 57 0 77 0 58 0 6 0 59 0 6 0 63 0 6 0 68 0 6 0 69 0 6 0 70 0 97 0 73 0 6 0 74 0 6 0 75 0 6 0 76 0 6 0 77 0 6 0 78 6 226 0 83 0 6 0 86 11 81 0 139 11 81 0 145 11 81 0 149 11 81 0 153 0 237 0 154 11 81 0 166 0 245 0 167 11 81 0 170 0 253 0 171 11 81 0 183 11 85 0 193 11 89 0 194 11 93 0 195 11 81 0 199 11 81 0 202 11 81 0 205 11 81 0 215 1 21 0 216 11 81 0 218 11 81 0 219 11 81 0 221 1 37 0 222 11 81 0 224 11 81 0 225 11 81 0 226 11 81 0 227 1 57 0 245 1 61 0 248 11 97 1 59 11 101 1 92] -#[0 6 230 0 17 0 30 0 31 0 33 0 35 0 41 0 44 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 68 0 69 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83 0 86] -#[1 11 113 0 86 11 105 0 188 11 109 0 189 11 113 0 191] -#[0 6 234 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 11 117 0 5] -#[0 6 238 0 1 0 3 0 4 0 5 0 6 0 7 0 8 0 9 0 10 0 11 0 13 0 15 0 16 0 17 0 20 0 21 0 22 0 23 0 24 0 25 0 26 0 27 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 48 0 50 0 52 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 79 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 6 242 0 6 0 15] -#[0 6 246 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 6 250 0 83] -#[0 6 254 0 83] -#[0 7 2 0 83] -#[0 7 6 0 83] -#[1 5 170 0 6 5 170 0 10 4 141 0 27 9 241 0 79 9 245 0 118 11 121 1 75] -#[0 7 10 0 6 0 10] -#[0 7 14 0 6 0 10] -#[0 7 18 0 10] -#[0 7 22 0 10] -#[0 7 26 0 10] -#[1 4 149 0 10 11 125 1 37] -#[1 4 149 0 10 11 129 1 37] -#[0 7 30 0 83] -#[0 11 5 0 36] -#[0 11 133 0 83] -#[0 11 137 0 83] -#[0 11 9 0 81] -#[1 10 73 0 4 6 46 0 82 10 77 0 159 11 141 1 97] -#[1 10 73 0 4 6 46 0 82 10 77 0 159 11 145 1 97] -#[0 7 34 0 6 0 15] -#[0 7 38 0 6 0 15] -#[0 7 42 0 6 0 15] -#[0 7 46 0 6 0 15] -#[0 11 149 0 5] -#[0 7 50 0 17 0 45 0 83] -#[0 11 153 0 83] -#[0 2 66 0 10] -#[1 4 149 0 10 11 157 1 37] -#[1 3 49 0 13 7 54 0 17 7 54 0 31 7 54 0 33 7 54 0 44 7 54 0 50 7 54 0 55 7 54 0 57 7 54 0 59 7 54 0 68 7 54 0 70 7 54 0 73 7 54 0 74 7 54 0 75 7 54 0 76 7 54 0 77 7 54 0 78 7 54 0 83 11 161 0 169 11 165 1 104] -#[1 0 198 0 4 0 198 0 7 3 69 0 12 0 198 0 17 0 198 0 31 0 198 0 33 0 198 0 44 0 198 0 50 0 198 0 55 0 198 0 57 0 198 0 59 0 198 0 68 0 198 0 70 0 198 0 73 0 198 0 74 0 198 0 75 0 198 0 76 0 198 0 77 0 198 0 78 0 198 0 83 3 73 0 128 11 169 1 74] -#[0 7 58 0 17 0 31 0 33 0 44 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83] -#[1 2 189 0 4 11 173 0 177] -#[1 11 177 0 82 11 181 0 160] -#[1 6 65 0 44 6 73 0 77] -#[0 7 62 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 11 185 0 83] -#[0 7 66 0 17 0 30 0 31 0 33 0 35 0 41 0 44 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 68 0 69 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83 0 86] -#[1 0 21 0 17 0 6 0 30 0 6 0 31 0 6 0 33 0 6 0 35 0 61 0 41 0 6 0 44 0 6 0 47 0 6 0 50 0 6 0 54 0 6 0 55 0 6 0 57 0 77 0 58 0 6 0 59 0 6 0 63 0 6 0 68 0 6 0 69 0 6 0 70 0 97 0 73 0 6 0 74 0 6 0 75 0 6 0 76 0 6 0 77 0 6 0 78 7 70 0 83 0 6 0 86 11 81 0 139 11 81 0 145 11 81 0 149 11 81 0 153 0 237 0 154 11 81 0 166 0 245 0 167 11 81 0 170 0 253 0 171 11 81 0 183 11 189 0 194 11 93 0 195 11 81 0 199 11 81 0 202 11 81 0 205 11 81 0 215 1 21 0 216 11 81 0 218 11 81 0 219 11 81 0 221 1 37 0 222 11 81 0 224 11 81 0 225 11 81 0 226 11 81 0 227 1 57 0 245 1 61 0 248 11 97 1 59] -#[0 7 74 0 17 0 30 0 31 0 33 0 35 0 41 0 44 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 68 0 69 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83 0 86] -#[0 7 78 0 17 0 30 0 31 0 33 0 35 0 41 0 44 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 68 0 69 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83 0 86] -#[1 11 193 0 30 0 151 0 31 3 221 0 33 3 181 0 35 0 155 0 44 3 185 0 47 1 90 0 50 0 155 0 54 1 82 0 55 1 82 0 57 1 82 0 59 3 189 0 63 1 82 0 68 3 193 0 69 3 197 0 70 1 82 0 74 1 82 0 75 1 82 0 76 0 155 0 77 1 82 0 78 3 213 0 86 3 205 0 141 3 209 0 184 3 213 0 190 3 217 0 192 3 221 1 64 3 225 1 65] -#[0 11 197 0 83] -#[1 11 201 0 6 7 82 0 17 7 82 0 30 7 82 0 31 7 82 0 33 7 82 0 35 7 82 0 41 7 82 0 44 7 82 0 47 7 82 0 50 7 82 0 54 7 82 0 55 7 82 0 57 7 82 0 58 7 82 0 59 7 82 0 63 7 82 0 68 7 82 0 69 7 82 0 70 7 82 0 73 7 82 0 74 7 82 0 75 7 82 0 76 7 82 0 77 7 82 0 78 7 82 0 83 7 82 0 86] -#[0 7 86 0 6 0 17 0 30 0 31 0 33 0 35 0 41 0 44 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 68 0 69 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83 0 86] -#[1 4 81 0 4 7 90 0 6 7 90 0 17 7 90 0 30 7 90 0 31 7 90 0 33 7 90 0 35 7 90 0 41 7 90 0 44 7 90 0 47 7 90 0 50 7 90 0 54 7 90 0 55 7 90 0 57 7 90 0 58 7 90 0 59 7 90 0 63 7 90 0 68 7 90 0 69 7 90 0 70 7 90 0 73 7 90 0 74 7 90 0 75 7 90 0 76 7 90 0 77 7 90 0 78 7 90 0 83 7 90 0 86 11 209 1 40 11 209 1 102] -#[1 2 1 0 82 11 213 0 144] -#[0 7 94 0 6 0 10] -#[1 7 98 0 5 7 98 0 6 7 98 0 9 11 217 0 13 11 221 0 182 11 225 1 67] -#[1 7 98 0 5 7 98 0 6 7 98 0 9 11 217 0 13 11 221 0 182 11 229 1 67] -#[0 7 102 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 7 106 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 2 1 0 82 11 233 0 144] -#[1 2 1 0 82 11 237 0 144] -#[0 7 110 0 82] -#[0 7 114 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 11 177 0 82 11 241 0 160] -#[0 7 118 0 17 0 31 0 33 0 44 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83] -#[0 7 122 0 17 0 31 0 33 0 44 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83] -#[1 3 138 0 4 3 138 0 7 3 138 0 17 3 138 0 31 3 138 0 33 3 138 0 44 3 138 0 50 3 138 0 55 3 138 0 57 3 138 0 59 3 138 0 68 3 138 0 70 3 138 0 73 3 138 0 74 3 138 0 75 3 138 0 76 3 138 0 77 3 138 0 78 3 138 0 83 11 245 0 173 7 157 0 176] -#[0 7 126 0 17 0 31 0 33 0 44 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83] -#[1 0 21 0 17 0 6 0 45 0 6 0 67 7 201 0 161 7 205 0 162 1 57 0 245 1 61 0 248 11 249 1 59] -#[0 7 130 0 17 0 31 0 33 0 44 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83] -#[0 7 134 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[0 7 138 0 17 0 30 0 31 0 33 0 35 0 41 0 44 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 68 0 69 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83 0 86] -#[1 11 253 0 86 11 253 0 191 12 1 0 196 12 5 0 197] -#[0 7 142 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 11 113 0 86 12 9 0 189 11 113 0 191] -#[0 7 146 0 6 0 17 0 30 0 31 0 33 0 35 0 41 0 44 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 68 0 69 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83 0 86] -#[0 7 150 0 6 0 17 0 30 0 31 0 33 0 35 0 41 0 44 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 68 0 69 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83 0 86] -#[0 7 154 0 3 0 4 0 8 0 11 0 17 0 20 0 22 0 23 0 24 0 25 0 26 0 29 0 30 0 31 0 32 0 33 0 34 0 35 0 37 0 41 0 42 0 43 0 44 0 46 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 64 0 66 0 68 0 69 0 70 0 71 0 72 0 73 0 74 0 75 0 76 0 77 0 78 0 80 0 82 0 83 0 86 0 87 0 88 0 89 0 90 1 109] -#[1 0 9 0 3 0 13 0 4 0 17 0 8 0 25 0 20 0 29 0 22 0 33 0 23 0 37 0 24 0 41 0 25 0 45 0 26 0 85 0 66 0 89 0 71 0 105 0 82 1 213 0 86 0 113 0 87 0 117 0 88 0 133 0 89 0 141 0 90 0 133 0 94 0 137 0 95 0 141 0 97 12 13 0 251 1 69 0 253 1 69 0 254 1 77 1 4 1 77 1 5 1 85 1 6 1 89 1 9 1 77 1 12 1 77 1 13 1 77 1 14 1 77 1 15 1 77 1 16 1 77 1 17 1 77 1 21 1 77 1 22 1 77 1 25 1 129 1 26 1 133 1 27 1 137 1 29 1 141 1 30 1 145 1 31 1 149 1 32 1 153 1 33 1 157 1 34 1 161 1 35] -#[0 7 158 0 5 0 6 0 9] -#[0 7 162 0 5 0 6 0 9] -#[0 7 166 0 5 0 6 0 9] -#[0 7 170 0 17 0 81 0 83] -#[0 7 174 0 17 0 36 0 83] -#[0 7 178 0 17 0 31 0 33 0 44 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83] -#[0 7 182 0 17 0 31 0 33 0 44 0 50 0 55 0 57 0 59 0 68 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83] -#[1 10 65 0 45 10 53 0 67] -#[1 7 186 0 6 12 17 0 13 7 186 0 17 7 186 0 30 7 186 0 31 7 186 0 33 7 186 0 35 7 186 0 41 7 186 0 44 7 186 0 47 7 186 0 50 7 186 0 54 7 186 0 55 7 186 0 57 7 186 0 58 7 186 0 59 7 186 0 63 7 186 0 68 7 186 0 69 7 186 0 70 7 186 0 73 7 186 0 74 7 186 0 75 7 186 0 76 7 186 0 77 7 186 0 78 7 186 0 83 7 186 0 86 12 21 0 198 12 25 1 91] -#[1 12 29 0 6 7 190 0 17 7 190 0 30 7 190 0 31 7 190 0 33 7 190 0 35 7 190 0 41 7 190 0 44 7 190 0 47 7 190 0 50 7 190 0 54 7 190 0 55 7 190 0 57 7 190 0 58 7 190 0 59 7 190 0 63 7 190 0 68 7 190 0 69 7 190 0 70 7 190 0 73 7 190 0 74 7 190 0 75 7 190 0 76 7 190 0 77 7 190 0 78 7 190 0 83 7 190 0 86] -#[0 7 194 0 6 0 17 0 30 0 31 0 33 0 35 0 41 0 44 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 68 0 69 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83 0 86] -#[0 7 198 0 6 0 17 0 30 0 31 0 33 0 35 0 41 0 44 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 68 0 69 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83 0 86] -#[0 7 202 0 5 0 6 0 9] -#[1 0 113 0 87 0 117 0 88 0 133 0 89 0 133 0 94 12 33 0 95] -#[0 7 206 0 6 0 17 0 30 0 31 0 33 0 35 0 41 0 44 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 68 0 69 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83 0 86] -#[0 7 210 0 6 0 17 0 30 0 31 0 33 0 35 0 41 0 44 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 68 0 69 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83 0 86] -#[1 11 253 0 86 11 253 0 191 12 37 0 197] -#[0 7 214 0 6 0 17 0 30 0 31 0 33 0 35 0 41 0 44 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 68 0 69 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83 0 86] -#[0 7 218 0 6 0 17 0 30 0 31 0 33 0 35 0 41 0 44 0 47 0 50 0 54 0 55 0 57 0 58 0 59 0 63 0 68 0 69 0 70 0 73 0 74 0 75 0 76 0 77 0 78 0 83 0 86] - ). -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_array_literal_items1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_associativity_clause1: nodes [ - | result | - result := Array new: 4. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_attribute_argument_clause1: nodes [ - | result | - result := Array new: 11. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_attributes1: nodes [ - | result | - result := Array new: 12. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_closure_signature1: nodes [ - | result | - result := Array new: 33. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_expression_element_list1: nodes [ - | result | - result := Array new: 4. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_generic_argument_clause1: nodes [ - | result | - result := Array new: 3. - result at: 2 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_generic_parameter_clause1: nodes [ - | result | - result := Array new: 9. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_import_kind1: nodes [ - | result | - result := Array new: 7. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_infix_operator_attributes1: nodes [ - | result | - result := Array new: 6. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_initializer1: nodes [ - | result | - result := Array new: 2. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_protocol_identifier_list2: nodes [ - | result | - result := Array new: 5. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 5). - self addAll: ((nodes at: 1) at: 4) to: (result at: 3). - self addAll: ((nodes at: 1) at: 5) to: (result at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_requirement_clause1: nodes [ - | result | - result := Array new: 9. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_setter_clause1: nodes [ - | result | - result := Array new: 14. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_setter_keyword_clause1: nodes [ - | result | - result := Array new: 13. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_setter_name1: nodes [ - | result | - result := Array new: 3. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_statements1: nodes [ - | result | - result := OrderedCollection new: 2. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_statements2: nodes [ - | result | - result := nodes at: 1. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_switch_cases1: nodes [ - | result | - result := Array new: 34. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - result at: 30 put: (OrderedCollection new: 2). - result at: 31 put: (OrderedCollection new: 2). - result at: 32 put: (OrderedCollection new: 2). - result at: 33 put: (OrderedCollection new: 2). - result at: 34 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_switch_cases2: nodes [ - | result | - result := Array new: 34. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - result at: 30 put: (OrderedCollection new: 2). - result at: 31 put: (OrderedCollection new: 2). - result at: 32 put: (OrderedCollection new: 2). - result at: 33 put: (OrderedCollection new: 2). - result at: 34 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - self addAll: ((nodes at: 1) at: 6) to: (result at: 6). - self addAll: ((nodes at: 1) at: 7) to: (result at: 7). - self addAll: ((nodes at: 1) at: 8) to: (result at: 8). - self addAll: ((nodes at: 1) at: 9) to: (result at: 9). - self addAll: ((nodes at: 1) at: 10) to: (result at: 10). - self addAll: ((nodes at: 1) at: 11) to: (result at: 11). - self addAll: ((nodes at: 1) at: 12) to: (result at: 12). - self addAll: ((nodes at: 1) at: 13) to: (result at: 13). - self addAll: ((nodes at: 1) at: 14) to: (result at: 14). - self addAll: ((nodes at: 1) at: 15) to: (result at: 15). - self addAll: ((nodes at: 1) at: 16) to: (result at: 16). - self addAll: ((nodes at: 1) at: 17) to: (result at: 17). - self addAll: ((nodes at: 1) at: 18) to: (result at: 24). - self addAll: ((nodes at: 1) at: 19) to: (result at: 18). - self addAll: ((nodes at: 1) at: 20) to: (result at: 19). - self addAll: ((nodes at: 1) at: 21) to: (result at: 20). - self addAll: ((nodes at: 1) at: 22) to: (result at: 21). - self addAll: ((nodes at: 1) at: 23) to: (result at: 22). - self addAll: ((nodes at: 1) at: 24) to: (result at: 23). - self addAll: ((nodes at: 1) at: 25) to: (result at: 25). - self addAll: ((nodes at: 1) at: 26) to: (result at: 29). - self addAll: ((nodes at: 1) at: 27) to: (result at: 30). - self addAll: ((nodes at: 1) at: 28) to: (result at: 31). - self addAll: ((nodes at: 1) at: 29) to: (result at: 32). - self addAll: ((nodes at: 1) at: 30) to: (result at: 33). - self addAll: ((nodes at: 1) at: 31) to: (result at: 34). - self addAll: ((nodes at: 1) at: 32) to: (result at: 26). - self addAll: ((nodes at: 1) at: 33) to: (result at: 27). - self addAll: ((nodes at: 1) at: 34) to: (result at: 28). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_tuple_pattern_element_list1: nodes [ - | result | - result := Array new: 29. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_tuple_pattern_element_list2: nodes [ - | result | - result := Array new: 29. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - self addAll: ((nodes at: 1) at: 6) to: (result at: 6). - self addAll: ((nodes at: 1) at: 7) to: (result at: 7). - self addAll: ((nodes at: 1) at: 8) to: (result at: 24). - self addAll: ((nodes at: 1) at: 9) to: (result at: 25). - self addAll: ((nodes at: 1) at: 10) to: (result at: 26). - self addAll: ((nodes at: 1) at: 11) to: (result at: 27). - self addAll: ((nodes at: 1) at: 12) to: (result at: 28). - self addAll: ((nodes at: 1) at: 13) to: (result at: 29). - self addAll: ((nodes at: 1) at: 14) to: (result at: 8). - self addAll: ((nodes at: 1) at: 15) to: (result at: 9). - self addAll: ((nodes at: 1) at: 16) to: (result at: 10). - self addAll: ((nodes at: 1) at: 17) to: (result at: 11). - self addAll: ((nodes at: 1) at: 18) to: (result at: 12). - self addAll: ((nodes at: 1) at: 19) to: (result at: 13). - self addAll: ((nodes at: 1) at: 20) to: (result at: 14). - self addAll: ((nodes at: 1) at: 21) to: (result at: 15). - self addAll: ((nodes at: 1) at: 22) to: (result at: 16). - self addAll: ((nodes at: 1) at: 23) to: (result at: 18). - self addAll: ((nodes at: 1) at: 24) to: (result at: 17). - self addAll: ((nodes at: 1) at: 25) to: (result at: 19). - self addAll: ((nodes at: 1) at: 26) to: (result at: 20). - self addAll: ((nodes at: 1) at: 27) to: (result at: 21). - self addAll: ((nodes at: 1) at: 28) to: (result at: 22). - self addAll: ((nodes at: 1) at: 29) to: (result at: 23). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_type_annotation1: nodes [ - | result | - result := Array new: 24. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_type_inheritance_clause1: nodes [ - | result | - result := Array new: 6. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_typealias_assignment1: nodes [ - | result | - result := Array new: 25. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_union_style_enum_members1: nodes [ - | result | - result := Array new: 57. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - result at: 30 put: (OrderedCollection new: 2). - result at: 31 put: (OrderedCollection new: 2). - result at: 32 put: (OrderedCollection new: 2). - result at: 33 put: (OrderedCollection new: 2). - result at: 34 put: (OrderedCollection new: 2). - result at: 35 put: (OrderedCollection new: 2). - result at: 36 put: (OrderedCollection new: 2). - result at: 37 put: (OrderedCollection new: 2). - result at: 38 put: (OrderedCollection new: 2). - result at: 39 put: (OrderedCollection new: 2). - result at: 40 put: (OrderedCollection new: 2). - result at: 41 put: (OrderedCollection new: 2). - result at: 42 put: (OrderedCollection new: 2). - result at: 43 put: (OrderedCollection new: 2). - result at: 44 put: (OrderedCollection new: 2). - result at: 45 put: (OrderedCollection new: 2). - result at: 46 put: (OrderedCollection new: 2). - result at: 47 put: (OrderedCollection new: 2). - result at: 48 put: (OrderedCollection new: 2). - result at: 49 put: (OrderedCollection new: 2). - result at: 50 put: (OrderedCollection new: 2). - result at: 51 put: (OrderedCollection new: 2). - result at: 52 put: (OrderedCollection new: 2). - result at: 53 put: (OrderedCollection new: 2). - result at: 54 put: (OrderedCollection new: 2). - result at: 55 put: (OrderedCollection new: 2). - result at: 56 put: (OrderedCollection new: 2). - result at: 57 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFor_union_style_enum_members2: nodes [ - | result | - result := Array new: 57. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - result at: 30 put: (OrderedCollection new: 2). - result at: 31 put: (OrderedCollection new: 2). - result at: 32 put: (OrderedCollection new: 2). - result at: 33 put: (OrderedCollection new: 2). - result at: 34 put: (OrderedCollection new: 2). - result at: 35 put: (OrderedCollection new: 2). - result at: 36 put: (OrderedCollection new: 2). - result at: 37 put: (OrderedCollection new: 2). - result at: 38 put: (OrderedCollection new: 2). - result at: 39 put: (OrderedCollection new: 2). - result at: 40 put: (OrderedCollection new: 2). - result at: 41 put: (OrderedCollection new: 2). - result at: 42 put: (OrderedCollection new: 2). - result at: 43 put: (OrderedCollection new: 2). - result at: 44 put: (OrderedCollection new: 2). - result at: 45 put: (OrderedCollection new: 2). - result at: 46 put: (OrderedCollection new: 2). - result at: 47 put: (OrderedCollection new: 2). - result at: 48 put: (OrderedCollection new: 2). - result at: 49 put: (OrderedCollection new: 2). - result at: 50 put: (OrderedCollection new: 2). - result at: 51 put: (OrderedCollection new: 2). - result at: 52 put: (OrderedCollection new: 2). - result at: 53 put: (OrderedCollection new: 2). - result at: 54 put: (OrderedCollection new: 2). - result at: 55 put: (OrderedCollection new: 2). - result at: 56 put: (OrderedCollection new: 2). - result at: 57 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 27). - self addAll: ((nodes at: 1) at: 6) to: (result at: 28). - self addAll: ((nodes at: 1) at: 7) to: (result at: 38). - self addAll: ((nodes at: 1) at: 8) to: (result at: 41). - self addAll: ((nodes at: 1) at: 9) to: (result at: 55). - self addAll: ((nodes at: 1) at: 10) to: (result at: 56). - self addAll: ((nodes at: 1) at: 11) to: (result at: 57). - self addAll: ((nodes at: 1) at: 12) to: (result at: 13). - self addAll: ((nodes at: 1) at: 13) to: (result at: 5). - self addAll: ((nodes at: 1) at: 14) to: (result at: 6). - self addAll: ((nodes at: 1) at: 15) to: (result at: 7). - self addAll: ((nodes at: 1) at: 16) to: (result at: 8). - self addAll: ((nodes at: 1) at: 17) to: (result at: 9). - self addAll: ((nodes at: 1) at: 18) to: (result at: 10). - self addAll: ((nodes at: 1) at: 19) to: (result at: 11). - self addAll: ((nodes at: 1) at: 20) to: (result at: 12). - self addAll: ((nodes at: 1) at: 21) to: (result at: 14). - self addAll: ((nodes at: 1) at: 22) to: (result at: 15). - self addAll: ((nodes at: 1) at: 23) to: (result at: 16). - self addAll: ((nodes at: 1) at: 24) to: (result at: 17). - self addAll: ((nodes at: 1) at: 25) to: (result at: 18). - self addAll: ((nodes at: 1) at: 26) to: (result at: 19). - self addAll: ((nodes at: 1) at: 27) to: (result at: 20). - self addAll: ((nodes at: 1) at: 28) to: (result at: 21). - self addAll: ((nodes at: 1) at: 29) to: (result at: 22). - self addAll: ((nodes at: 1) at: 30) to: (result at: 23). - self addAll: ((nodes at: 1) at: 31) to: (result at: 24). - self addAll: ((nodes at: 1) at: 32) to: (result at: 25). - self addAll: ((nodes at: 1) at: 33) to: (result at: 26). - self addAll: ((nodes at: 1) at: 34) to: (result at: 29). - self addAll: ((nodes at: 1) at: 35) to: (result at: 30). - self addAll: ((nodes at: 1) at: 36) to: (result at: 31). - self addAll: ((nodes at: 1) at: 37) to: (result at: 32). - self addAll: ((nodes at: 1) at: 38) to: (result at: 33). - self addAll: ((nodes at: 1) at: 39) to: (result at: 34). - self addAll: ((nodes at: 1) at: 40) to: (result at: 36). - self addAll: ((nodes at: 1) at: 41) to: (result at: 35). - self addAll: ((nodes at: 1) at: 42) to: (result at: 37). - self addAll: ((nodes at: 1) at: 43) to: (result at: 39). - self addAll: ((nodes at: 1) at: 44) to: (result at: 40). - self addAll: ((nodes at: 1) at: 45) to: (result at: 42). - self addAll: ((nodes at: 1) at: 46) to: (result at: 43). - self addAll: ((nodes at: 1) at: 47) to: (result at: 44). - self addAll: ((nodes at: 1) at: 48) to: (result at: 45). - self addAll: ((nodes at: 1) at: 49) to: (result at: 46). - self addAll: ((nodes at: 1) at: 50) to: (result at: 47). - self addAll: ((nodes at: 1) at: 51) to: (result at: 48). - self addAll: ((nodes at: 1) at: 52) to: (result at: 49). - self addAll: ((nodes at: 1) at: 53) to: (result at: 50). - self addAll: ((nodes at: 1) at: 54) to: (result at: 51). - self addAll: ((nodes at: 1) at: 55) to: (result at: 52). - self addAll: ((nodes at: 1) at: 56) to: (result at: 53). - self addAll: ((nodes at: 1) at: 57) to: (result at: 54). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForarray_literal1: nodes [ - | result | - result := Array new: 4. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - result at: 4 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForarray_literal_items1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - self add: (nodes at: 2) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForarray_literal_items2: nodes [ - | result | - result := nodes at: 3. - self addFirst: (nodes at: 1) to: (result at: 1). - self addFirst: (nodes at: 2) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForarray_type1: nodes [ - | result | - result := SwiftArrayTypeNode new. - result addToken: (nodes at: 1) to: result leftBracketTokens. - result addToken: (nodes at: 3) to: result rightBracketTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForas_pattern1: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 29). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForassociativity_clause1: nodes [ - | result | - result := Array new: 4. - result at: 1 put: (nodes at: 1). - result at: 2 put: ((nodes at: 2) at: 1). - result at: 3 put: ((nodes at: 2) at: 2). - result at: 4 put: ((nodes at: 2) at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForattribute1: nodes [ - | result | - result := Array new: 12. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self add: (nodes at: 2) to: (result at: 2). - self addAll: ((nodes at: 3) at: 1) to: (result at: 3). - self addAll: ((nodes at: 3) at: 2) to: (result at: 4). - self addAll: ((nodes at: 3) at: 3) to: (result at: 5). - self addAll: ((nodes at: 3) at: 4) to: (result at: 6). - self addAll: ((nodes at: 3) at: 5) to: (result at: 7). - self addAll: ((nodes at: 3) at: 6) to: (result at: 8). - self addAll: ((nodes at: 3) at: 7) to: (result at: 2). - self addAll: ((nodes at: 3) at: 8) to: (result at: 9). - self addAll: ((nodes at: 3) at: 9) to: (result at: 10). - self addAll: ((nodes at: 3) at: 10) to: (result at: 11). - self addAll: ((nodes at: 3) at: 11) to: (result at: 12). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForattribute_argument_clause1: nodes [ - | result | - result := nodes at: 2. - self addFirst: (nodes at: 1) to: (result at: 1). - self add: (nodes at: 3) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForattributes1: nodes [ - | result | - result := Array new: 12. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - self add: ((nodes at: 1) at: 1) to: (result at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - self addAll: ((nodes at: 1) at: 6) to: (result at: 6). - self addAll: ((nodes at: 1) at: 7) to: (result at: 7). - self addAll: ((nodes at: 1) at: 8) to: (result at: 8). - self addAll: ((nodes at: 1) at: 9) to: (result at: 9). - self addAll: ((nodes at: 1) at: 10) to: (result at: 10). - self addAll: ((nodes at: 1) at: 11) to: (result at: 11). - self addAll: ((nodes at: 1) at: 12) to: (result at: 12). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForattributes2: nodes [ - | result | - result := nodes at: 1. - self add: ((nodes at: 2) at: 1) to: (result at: 1). - self addAll: ((nodes at: 2) at: 2) to: (result at: 2). - self addAll: ((nodes at: 2) at: 3) to: (result at: 3). - self addAll: ((nodes at: 2) at: 4) to: (result at: 4). - self addAll: ((nodes at: 2) at: 5) to: (result at: 5). - self addAll: ((nodes at: 2) at: 6) to: (result at: 6). - self addAll: ((nodes at: 2) at: 7) to: (result at: 7). - self addAll: ((nodes at: 2) at: 8) to: (result at: 8). - self addAll: ((nodes at: 2) at: 9) to: (result at: 9). - self addAll: ((nodes at: 2) at: 10) to: (result at: 10). - self addAll: ((nodes at: 2) at: 11) to: (result at: 11). - self addAll: ((nodes at: 2) at: 12) to: (result at: 12). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForbalanced_token2: nodes [ - | result | - result := nodes at: 2. - self addFirst: (nodes at: 1) to: (result at: 3). - self add: (nodes at: 3) to: (result at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForbalanced_token3: nodes [ - | result | - result := nodes at: 2. - self addFirst: (nodes at: 1) to: (result at: 5). - self add: (nodes at: 3) to: (result at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForbalanced_token4: nodes [ - | result | - result := Array new: 11. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForbalanced_token5: nodes [ - | result | - result := Array new: 11. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - self add: ((nodes at: 1) at: 1) to: (result at: 8). - self add: ((nodes at: 1) at: 2) to: (result at: 9). - self add: ((nodes at: 1) at: 3) to: (result at: 10). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForbalanced_token6: nodes [ - | result | - result := Array new: 11. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 11). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForbalanced_tokens2: nodes [ - | result | - result := nodes at: 2. - self addAllFirst: ((nodes at: 1) at: 1) to: (result at: 1). - self addAllFirst: ((nodes at: 1) at: 2) to: (result at: 2). - self addAllFirst: ((nodes at: 1) at: 3) to: (result at: 3). - self addAllFirst: ((nodes at: 1) at: 4) to: (result at: 4). - self addAllFirst: ((nodes at: 1) at: 5) to: (result at: 5). - self addAllFirst: ((nodes at: 1) at: 6) to: (result at: 6). - self addAllFirst: ((nodes at: 1) at: 7) to: (result at: 7). - self addAllFirst: ((nodes at: 1) at: 8) to: (result at: 8). - self addAllFirst: ((nodes at: 1) at: 9) to: (result at: 9). - self addAllFirst: ((nodes at: 1) at: 10) to: (result at: 10). - self addAllFirst: ((nodes at: 1) at: 11) to: (result at: 11). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForbinary_expression1: nodes [ - | result | - result := SwiftBinaryOperatorNode new. - result addToken: (nodes at: 1) to: result operatorTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForbinary_expression2: nodes [ - | result | - result := SwiftAssignmentOperatorNode new. - result addToken: (nodes at: 1) to: result equalTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForbinary_expression3: nodes [ - | result | - result := SwiftCondionalOperatorNode new. - result addToken: ((nodes at: 1) at: 1) to: result questionMarkTokens. - result trueExpression: ((nodes at: 1) at: 2). - result addToken: ((nodes at: 1) at: 3) to: result colonTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForbinary_expression4: nodes [ - | result | - result := SwiftTypeCastOperatorNode new. - result _isToken: ((nodes at: 1) at: 1). - result type: ((nodes at: 1) at: 2). - result asToken: ((nodes at: 1) at: 3). - result questionMarkToken: ((nodes at: 1) at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForbreak_statement1: nodes [ - | result | - result := SwiftBreakStatementNode new. - result breakToken: (nodes at: 1). - result name: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForcapture_list1: nodes [ - | result | - result := Array new: 7. - result at: 1 put: (nodes at: 1). - result at: 2 put: ((nodes at: 2) at: 1). - result at: 3 put: ((nodes at: 2) at: 2). - result at: 4 put: ((nodes at: 2) at: 3). - result at: 5 put: ((nodes at: 2) at: 4). - result at: 6 put: (nodes at: 3). - result at: 7 put: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForcapture_specifier1: nodes [ - | result | - result := Array new: 4. - result at: 1 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForcapture_specifier2: nodes [ - | result | - result := Array new: 4. - result at: 2 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForcapture_specifier3: nodes [ - | result | - result := Array new: 4. - result at: 3 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForcapture_specifier4: nodes [ - | result | - result := Array new: 4. - result at: 4 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForcase_item_list1: nodes [ - | result | - result := Array new: 30. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - result at: 30 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - self addAll: ((nodes at: 1) at: 6) to: (result at: 6). - self addAll: ((nodes at: 1) at: 7) to: (result at: 7). - self addAll: ((nodes at: 1) at: 8) to: (result at: 8). - self addAll: ((nodes at: 1) at: 9) to: (result at: 9). - self addAll: ((nodes at: 1) at: 10) to: (result at: 10). - self addAll: ((nodes at: 1) at: 11) to: (result at: 11). - self addAll: ((nodes at: 1) at: 12) to: (result at: 12). - self addAll: ((nodes at: 1) at: 13) to: (result at: 13). - self addAll: ((nodes at: 1) at: 14) to: (result at: 14). - self addAll: ((nodes at: 1) at: 15) to: (result at: 15). - self addAll: ((nodes at: 1) at: 16) to: (result at: 16). - self addAll: ((nodes at: 1) at: 17) to: (result at: 17). - self addAll: ((nodes at: 1) at: 18) to: (result at: 18). - self addAll: ((nodes at: 1) at: 19) to: (result at: 19). - self addAll: ((nodes at: 1) at: 20) to: (result at: 20). - self addAll: ((nodes at: 1) at: 21) to: (result at: 21). - self addAll: ((nodes at: 1) at: 22) to: (result at: 22). - self addAll: ((nodes at: 1) at: 23) to: (result at: 23). - self addAll: ((nodes at: 1) at: 24) to: (result at: 24). - self addAll: ((nodes at: 1) at: 25) to: (result at: 25). - self addAll: ((nodes at: 1) at: 26) to: (result at: 26). - self addAll: ((nodes at: 1) at: 27) to: (result at: 27). - self addAll: ((nodes at: 1) at: 28) to: (result at: 28). - self addAll: ((nodes at: 1) at: 29) to: (result at: 29). - self add: ((nodes at: 2) at: 1) to: (result at: 30). - self add: ((nodes at: 2) at: 2) to: (result at: 27). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForcase_item_list2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 22). - self addAll: ((nodes at: 3) at: 1) to: (result at: 1). - self addAll: ((nodes at: 3) at: 2) to: (result at: 2). - self addAll: ((nodes at: 3) at: 3) to: (result at: 3). - self addAll: ((nodes at: 3) at: 4) to: (result at: 4). - self addAll: ((nodes at: 3) at: 5) to: (result at: 5). - self addAll: ((nodes at: 3) at: 6) to: (result at: 6). - self addAll: ((nodes at: 3) at: 7) to: (result at: 7). - self addAll: ((nodes at: 3) at: 8) to: (result at: 8). - self addAll: ((nodes at: 3) at: 9) to: (result at: 9). - self addAll: ((nodes at: 3) at: 10) to: (result at: 10). - self addAll: ((nodes at: 3) at: 11) to: (result at: 11). - self addAll: ((nodes at: 3) at: 12) to: (result at: 12). - self addAll: ((nodes at: 3) at: 13) to: (result at: 13). - self addAll: ((nodes at: 3) at: 14) to: (result at: 14). - self addAll: ((nodes at: 3) at: 15) to: (result at: 15). - self addAll: ((nodes at: 3) at: 16) to: (result at: 16). - self addAll: ((nodes at: 3) at: 17) to: (result at: 17). - self addAll: ((nodes at: 3) at: 18) to: (result at: 18). - self addAll: ((nodes at: 3) at: 19) to: (result at: 19). - self addAll: ((nodes at: 3) at: 20) to: (result at: 20). - self addAll: ((nodes at: 3) at: 21) to: (result at: 21). - self addAll: ((nodes at: 3) at: 22) to: (result at: 22). - self addAll: ((nodes at: 3) at: 23) to: (result at: 23). - self addAll: ((nodes at: 3) at: 24) to: (result at: 24). - self addAll: ((nodes at: 3) at: 25) to: (result at: 25). - self addAll: ((nodes at: 3) at: 26) to: (result at: 26). - self addAll: ((nodes at: 3) at: 27) to: (result at: 27). - self addAll: ((nodes at: 3) at: 28) to: (result at: 28). - self addAll: ((nodes at: 3) at: 29) to: (result at: 29). - self add: ((nodes at: 4) at: 1) to: (result at: 30). - self add: ((nodes at: 4) at: 2) to: (result at: 27). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForcase_label1: nodes [ - | result | - result := Array new: 31. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - result at: 30 put: (OrderedCollection new: 2). - result at: 31 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - self addAll: ((nodes at: 2) at: 3) to: (result at: 4). - self addAll: ((nodes at: 2) at: 4) to: (result at: 5). - self addAll: ((nodes at: 2) at: 5) to: (result at: 6). - self addAll: ((nodes at: 2) at: 6) to: (result at: 7). - self addAll: ((nodes at: 2) at: 7) to: (result at: 8). - self addAll: ((nodes at: 2) at: 8) to: (result at: 26). - self addAll: ((nodes at: 2) at: 9) to: (result at: 27). - self addAll: ((nodes at: 2) at: 10) to: (result at: 28). - self addAll: ((nodes at: 2) at: 11) to: (result at: 29). - self addAll: ((nodes at: 2) at: 12) to: (result at: 30). - self addAll: ((nodes at: 2) at: 13) to: (result at: 31). - self addAll: ((nodes at: 2) at: 14) to: (result at: 9). - self addAll: ((nodes at: 2) at: 15) to: (result at: 10). - self addAll: ((nodes at: 2) at: 16) to: (result at: 11). - self addAll: ((nodes at: 2) at: 17) to: (result at: 12). - self addAll: ((nodes at: 2) at: 18) to: (result at: 13). - self addAll: ((nodes at: 2) at: 19) to: (result at: 14). - self addAll: ((nodes at: 2) at: 20) to: (result at: 15). - self addAll: ((nodes at: 2) at: 21) to: (result at: 16). - self addAll: ((nodes at: 2) at: 22) to: (result at: 17). - self addAll: ((nodes at: 2) at: 23) to: (result at: 19). - self addAll: ((nodes at: 2) at: 24) to: (result at: 18). - self addAll: ((nodes at: 2) at: 25) to: (result at: 20). - self addAll: ((nodes at: 2) at: 26) to: (result at: 21). - self addAll: ((nodes at: 2) at: 27) to: (result at: 22). - self addAll: ((nodes at: 2) at: 28) to: (result at: 23). - self addAll: ((nodes at: 2) at: 29) to: (result at: 24). - self addAll: ((nodes at: 2) at: 30) to: (result at: 25). - self add: (nodes at: 3) to: (result at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForclass_declaration1: nodes [ - | result | - result := SwiftClassDeclarationNode new. - result addTokens: ((nodes at: 1) at: 1) to: result _Tokens. - result addTokens: ((nodes at: 1) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 3) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 4) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 5) to: result leftBracketTokens. - result addTokens: ((nodes at: 1) at: 6) to: result rightBracketTokens. - result addTokens: ((nodes at: 1) at: 7) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 1) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 12) to: result operatorTokens. - result classToken: (nodes at: 2). - result addToken: (nodes at: 3) to: result identifierTokens. - result addTokens: ((nodes at: 4) at: 1) to: result lessThanTokens. - result addTokens: ((nodes at: 4) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 4) at: 3) to: result colonTokens. - result addTokens: ((nodes at: 4) at: 4) to: result commaTokens. - result addTokens: ((nodes at: 4) at: 5) to: result greaterThanTokens. - result addTokens: ((nodes at: 4) at: 6) to: result periodTokens. - result addTokens: ((nodes at: 4) at: 7) to: result protocolTokens. - result whereToken: ((nodes at: 4) at: 8). - result addTokens: ((nodes at: 4) at: 9) to: result equalEqualTokens. - result addToken: ((nodes at: 5) at: 1) to: result colonTokens. - result addTokens: ((nodes at: 5) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 5) at: 3) to: result lessThanTokens. - result addTokens: ((nodes at: 5) at: 4) to: result greaterThanTokens. - result addTokens: ((nodes at: 5) at: 5) to: result periodTokens. - result addTokens: ((nodes at: 5) at: 6) to: result commaTokens. - result addToken: ((nodes at: 6) at: 1) to: result leftBraceTokens. - result addNodes: ((nodes at: 6) at: 2) to: result declarations. - result addToken: ((nodes at: 6) at: 3) to: result rightBraceTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForclosure_expression1: nodes [ - | result | - result := SwiftClosureExpressionNode new. - result addToken: (nodes at: 1) to: result leftBraceTokens. - result addTokens: ((nodes at: 2) at: 1) to: result leftParenTokens. - result addTokens: ((nodes at: 2) at: 2) to: result rightParenTokens. - result addTokens: ((nodes at: 2) at: 3) to: result inoutTokens. - result addTokens: ((nodes at: 2) at: 4) to: result letTokens. - result addTokens: ((nodes at: 2) at: 5) to: result _Tokens. - result addTokens: ((nodes at: 2) at: 6) to: result identifierTokens. - result addTokens: ((nodes at: 2) at: 7) to: result colonTokens. - result addTokens: ((nodes at: 2) at: 8) to: result leftBracketTokens. - result addTokens: ((nodes at: 2) at: 9) to: result rightBracketTokens. - result - addTokens: ((nodes at: 2) at: 10) - to: result minusGreaterThanTokens. - result addTokens: ((nodes at: 2) at: 11) to: result periodTokens. - result - addTokens: ((nodes at: 2) at: 12) - to: result questionMarkTokens. - result addTokens: ((nodes at: 2) at: 13) to: result bangTokens. - result addTokens: ((nodes at: 2) at: 14) to: result protocolTokens. - result addTokens: ((nodes at: 2) at: 15) to: result lessThanTokens. - result addTokens: ((nodes at: 2) at: 16) to: result greaterThanTokens. - result addTokens: ((nodes at: 2) at: 17) to: result typeTokens. - result addTokens: ((nodes at: 2) at: 18) to: result commaTokens. - result - addTokens: ((nodes at: 2) at: 19) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 2) at: 20) to: result equalTokens. - result addObjects: ((nodes at: 2) at: 21) to: result expressions. - result addTokens: ((nodes at: 2) at: 22) to: result varTokens. - result addTokens: ((nodes at: 2) at: 23) to: result leftBraceTokens. - result addTokens: ((nodes at: 2) at: 24) to: result rightBraceTokens. - result - addTokens: ((nodes at: 2) at: 25) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 2) at: 26) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 2) at: 27) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 2) at: 28) to: result operatorTokens. - result inToken: ((nodes at: 2) at: 29). - result weakToken: ((nodes at: 2) at: 30). - result unownedToken: ((nodes at: 2) at: 31). - result unownedLeftParensafeRightParenToken: ((nodes at: 2) at: 32). - result unownedLeftParenunsafeRightParenToken: ((nodes at: 2) at: 33). - result addNodes: (nodes at: 3) to: result statements. - result addToken: (nodes at: 4) to: result rightBraceTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForclosure_signature1: nodes [ - | result | - result := Array new: 33. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - self addAll: ((nodes at: 1) at: 6) to: (result at: 6). - self addAll: ((nodes at: 1) at: 7) to: (result at: 7). - self addAll: ((nodes at: 1) at: 8) to: (result at: 8). - self addAll: ((nodes at: 1) at: 9) to: (result at: 9). - self addAll: ((nodes at: 1) at: 10) to: (result at: 10). - self addAll: ((nodes at: 1) at: 11) to: (result at: 11). - self addAll: ((nodes at: 1) at: 12) to: (result at: 12). - self addAll: ((nodes at: 1) at: 13) to: (result at: 13). - self addAll: ((nodes at: 1) at: 14) to: (result at: 14). - self addAll: ((nodes at: 1) at: 15) to: (result at: 15). - self addAll: ((nodes at: 1) at: 16) to: (result at: 16). - self addAll: ((nodes at: 1) at: 17) to: (result at: 17). - self addAll: ((nodes at: 1) at: 18) to: (result at: 18). - self addAll: ((nodes at: 1) at: 19) to: (result at: 19). - self addAll: ((nodes at: 1) at: 20) to: (result at: 20). - self addAll: ((nodes at: 1) at: 21) to: (result at: 21). - self addAll: ((nodes at: 1) at: 22) to: (result at: 22). - self addAll: ((nodes at: 1) at: 23) to: (result at: 23). - self addAll: ((nodes at: 1) at: 24) to: (result at: 24). - self addAll: ((nodes at: 1) at: 25) to: (result at: 25). - self addAll: ((nodes at: 1) at: 26) to: (result at: 26). - self addAll: ((nodes at: 1) at: 27) to: (result at: 27). - self addAll: ((nodes at: 1) at: 28) to: (result at: 28). - self addAll: ((nodes at: 2) at: 1) to: (result at: 10). - self addAll: ((nodes at: 2) at: 2) to: (result at: 5). - self addAll: ((nodes at: 2) at: 3) to: (result at: 6). - self addAll: ((nodes at: 2) at: 4) to: (result at: 1). - self addAll: ((nodes at: 2) at: 5) to: (result at: 2). - self addAll: ((nodes at: 2) at: 6) to: (result at: 8). - self addAll: ((nodes at: 2) at: 7) to: (result at: 9). - self addAll: ((nodes at: 2) at: 8) to: (result at: 23). - self addAll: ((nodes at: 2) at: 9) to: (result at: 24). - self addAll: ((nodes at: 2) at: 10) to: (result at: 25). - self addAll: ((nodes at: 2) at: 11) to: (result at: 26). - self addAll: ((nodes at: 2) at: 12) to: (result at: 27). - self addAll: ((nodes at: 2) at: 13) to: (result at: 28). - self addAll: ((nodes at: 2) at: 14) to: (result at: 7). - self addAll: ((nodes at: 2) at: 15) to: (result at: 11). - self addAll: ((nodes at: 2) at: 16) to: (result at: 12). - self addAll: ((nodes at: 2) at: 17) to: (result at: 13). - self addAll: ((nodes at: 2) at: 18) to: (result at: 14). - self addAll: ((nodes at: 2) at: 19) to: (result at: 15). - self addAll: ((nodes at: 2) at: 20) to: (result at: 16). - self addAll: ((nodes at: 2) at: 21) to: (result at: 17). - self addAll: ((nodes at: 2) at: 22) to: (result at: 18). - self addAll: ((nodes at: 2) at: 23) to: (result at: 19). - self addAll: ((nodes at: 2) at: 24) to: (result at: 3). - result at: 29 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForclosure_signature2: nodes [ - | result | - result := Array new: 33. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 6). - self addAll: ((nodes at: 1) at: 2) to: (result at: 18). - self addAll: ((nodes at: 2) at: 1) to: (result at: 10). - self addAll: ((nodes at: 2) at: 2) to: (result at: 5). - self addAll: ((nodes at: 2) at: 3) to: (result at: 6). - self addAll: ((nodes at: 2) at: 4) to: (result at: 1). - self addAll: ((nodes at: 2) at: 5) to: (result at: 2). - self addAll: ((nodes at: 2) at: 6) to: (result at: 8). - self addAll: ((nodes at: 2) at: 7) to: (result at: 9). - self addAll: ((nodes at: 2) at: 8) to: (result at: 23). - self addAll: ((nodes at: 2) at: 9) to: (result at: 24). - self addAll: ((nodes at: 2) at: 10) to: (result at: 25). - self addAll: ((nodes at: 2) at: 11) to: (result at: 26). - self addAll: ((nodes at: 2) at: 12) to: (result at: 27). - self addAll: ((nodes at: 2) at: 13) to: (result at: 28). - self addAll: ((nodes at: 2) at: 14) to: (result at: 7). - self addAll: ((nodes at: 2) at: 15) to: (result at: 11). - self addAll: ((nodes at: 2) at: 16) to: (result at: 12). - self addAll: ((nodes at: 2) at: 17) to: (result at: 13). - self addAll: ((nodes at: 2) at: 18) to: (result at: 14). - self addAll: ((nodes at: 2) at: 19) to: (result at: 15). - self addAll: ((nodes at: 2) at: 20) to: (result at: 16). - self addAll: ((nodes at: 2) at: 21) to: (result at: 17). - self addAll: ((nodes at: 2) at: 22) to: (result at: 18). - self addAll: ((nodes at: 2) at: 23) to: (result at: 19). - self addAll: ((nodes at: 2) at: 24) to: (result at: 3). - result at: 29 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForclosure_signature3: nodes [ - | result | - result := Array new: 33. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - self add: ((nodes at: 1) at: 1) to: (result at: 8). - result at: 30 put: ((nodes at: 1) at: 2). - result at: 31 put: ((nodes at: 1) at: 3). - result at: 32 put: ((nodes at: 1) at: 4). - result at: 33 put: ((nodes at: 1) at: 5). - self add: ((nodes at: 1) at: 6) to: (result at: 21). - self add: ((nodes at: 1) at: 7) to: (result at: 9). - self addAll: ((nodes at: 2) at: 1) to: (result at: 1). - self addAll: ((nodes at: 2) at: 2) to: (result at: 2). - self addAll: ((nodes at: 2) at: 3) to: (result at: 3). - self addAll: ((nodes at: 2) at: 4) to: (result at: 4). - self addAll: ((nodes at: 2) at: 5) to: (result at: 5). - self addAll: ((nodes at: 2) at: 6) to: (result at: 6). - self addAll: ((nodes at: 2) at: 7) to: (result at: 7). - self addAll: ((nodes at: 2) at: 8) to: (result at: 8). - self addAll: ((nodes at: 2) at: 9) to: (result at: 9). - self addAll: ((nodes at: 2) at: 10) to: (result at: 10). - self addAll: ((nodes at: 2) at: 11) to: (result at: 11). - self addAll: ((nodes at: 2) at: 12) to: (result at: 12). - self addAll: ((nodes at: 2) at: 13) to: (result at: 13). - self addAll: ((nodes at: 2) at: 14) to: (result at: 14). - self addAll: ((nodes at: 2) at: 15) to: (result at: 15). - self addAll: ((nodes at: 2) at: 16) to: (result at: 16). - self addAll: ((nodes at: 2) at: 17) to: (result at: 17). - self addAll: ((nodes at: 2) at: 18) to: (result at: 18). - self addAll: ((nodes at: 2) at: 19) to: (result at: 19). - self addAll: ((nodes at: 2) at: 20) to: (result at: 20). - self addAll: ((nodes at: 2) at: 21) to: (result at: 21). - self addAll: ((nodes at: 2) at: 22) to: (result at: 22). - self addAll: ((nodes at: 2) at: 23) to: (result at: 23). - self addAll: ((nodes at: 2) at: 24) to: (result at: 24). - self addAll: ((nodes at: 2) at: 25) to: (result at: 25). - self addAll: ((nodes at: 2) at: 26) to: (result at: 26). - self addAll: ((nodes at: 2) at: 27) to: (result at: 27). - self addAll: ((nodes at: 2) at: 28) to: (result at: 28). - self addAll: ((nodes at: 3) at: 1) to: (result at: 10). - self addAll: ((nodes at: 3) at: 2) to: (result at: 5). - self addAll: ((nodes at: 3) at: 3) to: (result at: 6). - self addAll: ((nodes at: 3) at: 4) to: (result at: 1). - self addAll: ((nodes at: 3) at: 5) to: (result at: 2). - self addAll: ((nodes at: 3) at: 6) to: (result at: 8). - self addAll: ((nodes at: 3) at: 7) to: (result at: 9). - self addAll: ((nodes at: 3) at: 8) to: (result at: 23). - self addAll: ((nodes at: 3) at: 9) to: (result at: 24). - self addAll: ((nodes at: 3) at: 10) to: (result at: 25). - self addAll: ((nodes at: 3) at: 11) to: (result at: 26). - self addAll: ((nodes at: 3) at: 12) to: (result at: 27). - self addAll: ((nodes at: 3) at: 13) to: (result at: 28). - self addAll: ((nodes at: 3) at: 14) to: (result at: 7). - self addAll: ((nodes at: 3) at: 15) to: (result at: 11). - self addAll: ((nodes at: 3) at: 16) to: (result at: 12). - self addAll: ((nodes at: 3) at: 17) to: (result at: 13). - self addAll: ((nodes at: 3) at: 18) to: (result at: 14). - self addAll: ((nodes at: 3) at: 19) to: (result at: 15). - self addAll: ((nodes at: 3) at: 20) to: (result at: 16). - self addAll: ((nodes at: 3) at: 21) to: (result at: 17). - self addAll: ((nodes at: 3) at: 22) to: (result at: 18). - self addAll: ((nodes at: 3) at: 23) to: (result at: 19). - self addAll: ((nodes at: 3) at: 24) to: (result at: 3). - result at: 29 put: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForclosure_signature4: nodes [ - | result | - result := Array new: 33. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - self add: ((nodes at: 1) at: 1) to: (result at: 8). - result at: 30 put: ((nodes at: 1) at: 2). - result at: 31 put: ((nodes at: 1) at: 3). - result at: 32 put: ((nodes at: 1) at: 4). - result at: 33 put: ((nodes at: 1) at: 5). - self add: ((nodes at: 1) at: 6) to: (result at: 21). - self add: ((nodes at: 1) at: 7) to: (result at: 9). - self addAll: ((nodes at: 2) at: 1) to: (result at: 6). - self addAll: ((nodes at: 2) at: 2) to: (result at: 18). - self addAll: ((nodes at: 3) at: 1) to: (result at: 10). - self addAll: ((nodes at: 3) at: 2) to: (result at: 5). - self addAll: ((nodes at: 3) at: 3) to: (result at: 6). - self addAll: ((nodes at: 3) at: 4) to: (result at: 1). - self addAll: ((nodes at: 3) at: 5) to: (result at: 2). - self addAll: ((nodes at: 3) at: 6) to: (result at: 8). - self addAll: ((nodes at: 3) at: 7) to: (result at: 9). - self addAll: ((nodes at: 3) at: 8) to: (result at: 23). - self addAll: ((nodes at: 3) at: 9) to: (result at: 24). - self addAll: ((nodes at: 3) at: 10) to: (result at: 25). - self addAll: ((nodes at: 3) at: 11) to: (result at: 26). - self addAll: ((nodes at: 3) at: 12) to: (result at: 27). - self addAll: ((nodes at: 3) at: 13) to: (result at: 28). - self addAll: ((nodes at: 3) at: 14) to: (result at: 7). - self addAll: ((nodes at: 3) at: 15) to: (result at: 11). - self addAll: ((nodes at: 3) at: 16) to: (result at: 12). - self addAll: ((nodes at: 3) at: 17) to: (result at: 13). - self addAll: ((nodes at: 3) at: 18) to: (result at: 14). - self addAll: ((nodes at: 3) at: 19) to: (result at: 15). - self addAll: ((nodes at: 3) at: 20) to: (result at: 16). - self addAll: ((nodes at: 3) at: 21) to: (result at: 17). - self addAll: ((nodes at: 3) at: 22) to: (result at: 18). - self addAll: ((nodes at: 3) at: 23) to: (result at: 19). - self addAll: ((nodes at: 3) at: 24) to: (result at: 3). - result at: 29 put: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForclosure_signature5: nodes [ - | result | - result := Array new: 33. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - self add: ((nodes at: 1) at: 1) to: (result at: 8). - result at: 30 put: ((nodes at: 1) at: 2). - result at: 31 put: ((nodes at: 1) at: 3). - result at: 32 put: ((nodes at: 1) at: 4). - result at: 33 put: ((nodes at: 1) at: 5). - self add: ((nodes at: 1) at: 6) to: (result at: 21). - self add: ((nodes at: 1) at: 7) to: (result at: 9). - result at: 29 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForcode_block1: nodes [ - | result | - result := SwiftBlockNode new. - result leftBraceToken: (nodes at: 1). - result addNodes: (nodes at: 2) to: result statements. - result rightBraceToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForconformance_requirement1: nodes [ - | result | - result := Array new: 7. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForconstant_declaration1: nodes [ - | result | - result := SwiftConstantDeclarationNode new. - result addTokens: ((nodes at: 1) at: 1) to: result _Tokens. - result addTokens: ((nodes at: 1) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 3) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 4) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 5) to: result leftBracketTokens. - result addTokens: ((nodes at: 1) at: 6) to: result rightBracketTokens. - result addTokens: ((nodes at: 1) at: 7) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 1) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 12) to: result operatorTokens. - result addTokens: ((nodes at: 2) at: 1) to: result classTokens. - result addTokens: ((nodes at: 2) at: 2) to: result mutatingTokens. - result addTokens: ((nodes at: 2) at: 3) to: result nonmutatingTokens. - result addTokens: ((nodes at: 2) at: 4) to: result overrideTokens. - result addTokens: ((nodes at: 2) at: 5) to: result staticTokens. - result addTokens: ((nodes at: 2) at: 6) to: result unownedTokens. - result - addTokens: ((nodes at: 2) at: 7) - to: result unownedLeftParensafeRightParenTokens. - result - addTokens: ((nodes at: 2) at: 8) - to: result unownedLeftParenunsafeRightParenTokens. - result addTokens: ((nodes at: 2) at: 9) to: result weakTokens. - result letToken: (nodes at: 3). - result addNodes: ((nodes at: 4) at: 1) to: result inializers. - result addTokens: ((nodes at: 4) at: 2) to: result commaTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForcontinue_statement1: nodes [ - | result | - result := SwiftContinueStatementNode new. - result continueToken: (nodes at: 1). - result name: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFordeclaration_specifier1: nodes [ - | result | - result := Array new: 9. - result at: 1 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFordeclaration_specifier2: nodes [ - | result | - result := Array new: 9. - result at: 2 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFordeclaration_specifier3: nodes [ - | result | - result := Array new: 9. - result at: 3 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFordeclaration_specifier4: nodes [ - | result | - result := Array new: 9. - result at: 4 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFordeclaration_specifier5: nodes [ - | result | - result := Array new: 9. - result at: 5 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFordeclaration_specifier6: nodes [ - | result | - result := Array new: 9. - result at: 6 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFordeclaration_specifier7: nodes [ - | result | - result := Array new: 9. - result at: 7 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFordeclaration_specifier8: nodes [ - | result | - result := Array new: 9. - result at: 8 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFordeclaration_specifier9: nodes [ - | result | - result := Array new: 9. - result at: 9 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFordeclaration_specifiers1: nodes [ - | result | - result := Array new: 9. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFordeclaration_specifiers2: nodes [ - | result | - result := nodes at: 1. - self add: ((nodes at: 2) at: 1) to: (result at: 1). - self add: ((nodes at: 2) at: 2) to: (result at: 2). - self add: ((nodes at: 2) at: 3) to: (result at: 3). - self add: ((nodes at: 2) at: 4) to: (result at: 4). - self add: ((nodes at: 2) at: 5) to: (result at: 5). - self add: ((nodes at: 2) at: 6) to: (result at: 6). - self add: ((nodes at: 2) at: 7) to: (result at: 7). - self add: ((nodes at: 2) at: 8) to: (result at: 8). - self add: ((nodes at: 2) at: 9) to: (result at: 9). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFordeinitializer_declaration1: nodes [ - | result | - result := SwiftDeinitializerDeclarationNode new. - result addTokens: ((nodes at: 1) at: 1) to: result _Tokens. - result addTokens: ((nodes at: 1) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 3) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 4) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 5) to: result leftBracketTokens. - result addTokens: ((nodes at: 1) at: 6) to: result rightBracketTokens. - result addTokens: ((nodes at: 1) at: 7) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 1) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 12) to: result operatorTokens. - result deinitToken: (nodes at: 2). - result block: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFordictionary_literal1: nodes [ - | result | - result := Array new: 6. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - self addAll: ((nodes at: 2) at: 3) to: (result at: 4). - self addAll: ((nodes at: 2) at: 4) to: (result at: 5). - result at: 6 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFordictionary_literal2: nodes [ - | result | - result := Array new: 6. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self add: (nodes at: 2) to: (result at: 3). - result at: 6 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFordictionary_literal_item1: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - result at: 3 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFordictionary_literal_items1: nodes [ - | result | - result := Array new: 4. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - self add: ((nodes at: 1) at: 1) to: (result at: 1). - self add: ((nodes at: 1) at: 2) to: (result at: 2). - self add: ((nodes at: 1) at: 3) to: (result at: 3). - self add: (nodes at: 2) to: (result at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFordictionary_literal_items2: nodes [ - | result | - result := nodes at: 3. - self addFirst: ((nodes at: 1) at: 1) to: (result at: 1). - self addFirst: ((nodes at: 1) at: 2) to: (result at: 2). - self addFirst: ((nodes at: 1) at: 3) to: (result at: 3). - self addFirst: (nodes at: 2) to: (result at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFordictionary_type1: nodes [ - | result | - result := SwiftDictionaryTypeNode new. - result addToken: (nodes at: 1) to: result leftBracketTokens. - result addToken: (nodes at: 3) to: result colonTokens. - result addToken: (nodes at: 5) to: result rightBracketTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFordo_while_statement1: nodes [ - | result | - result := SwiftDoWhileStatementNode new. - result doToken: (nodes at: 1). - result block: (nodes at: 2). - result whileToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFordynamic_type_expression1: nodes [ - | result | - result := SwiftDynamicTypeExpressionNode new. - result addTokens: ((nodes at: 1) at: 1) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 2) to: result lessThanTokens. - result addTokens: ((nodes at: 1) at: 3) to: result commaTokens. - result addTokens: ((nodes at: 1) at: 4) to: result greaterThanTokens. - result - addTokens: ((nodes at: 1) at: 5) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 6) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 7) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 8) to: result leftBracketTokens. - result addObjects: ((nodes at: 1) at: 9) to: result expressions. - result - addTokens: ((nodes at: 1) at: 10) - to: result rightBracketTokens. - result addObjects: ((nodes at: 1) at: 11) to: result keyExpressions. - result addTokens: ((nodes at: 1) at: 12) to: result colonTokens. - result addObjects: ((nodes at: 1) at: 13) to: result valueExpressions. - result __FILE__Token: ((nodes at: 1) at: 14). - result __LINE__Token: ((nodes at: 1) at: 15). - result __COLUMN__Token: ((nodes at: 1) at: 16). - result __FUNCTION__Token: ((nodes at: 1) at: 17). - result addTokens: ((nodes at: 1) at: 18) to: result selfTokens. - result addTokens: ((nodes at: 1) at: 19) to: result periodTokens. - result addTokens: ((nodes at: 1) at: 20) to: result initTokens. - result addTokens: ((nodes at: 1) at: 21) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 22) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 23) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 24) to: result inoutTokens. - result addTokens: ((nodes at: 1) at: 25) to: result letTokens. - result addTokens: ((nodes at: 1) at: 26) to: result _Tokens. - result - addTokens: ((nodes at: 1) at: 27) - to: result minusGreaterThanTokens. - result - addTokens: ((nodes at: 1) at: 28) - to: result questionMarkTokens. - result addTokens: ((nodes at: 1) at: 29) to: result bangTokens. - result addTokens: ((nodes at: 1) at: 30) to: result protocolTokens. - result addTokens: ((nodes at: 1) at: 31) to: result typeTokens. - result - addTokens: ((nodes at: 1) at: 32) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 1) at: 33) to: result equalTokens. - result addTokens: ((nodes at: 1) at: 34) to: result varTokens. - result addTokens: ((nodes at: 1) at: 35) to: result rightBraceTokens. - result addTokens: ((nodes at: 1) at: 36) to: result operatorTokens. - result inToken: ((nodes at: 1) at: 37). - result weakToken: ((nodes at: 1) at: 38). - result unownedToken: ((nodes at: 1) at: 39). - result unownedLeftParensafeRightParenToken: ((nodes at: 1) at: 40). - result unownedLeftParenunsafeRightParenToken: ((nodes at: 1) at: 41). - result addNodes: ((nodes at: 1) at: 42) to: result statements. - result addTokens: ((nodes at: 1) at: 43) to: result dynamicTypeTokens. - result addToken: (nodes at: 2) to: result periodTokens. - result addToken: (nodes at: 3) to: result dynamicTypeTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForenum_case_pattern1: nodes [ - | result | - result := Array new: 29. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - self add: (nodes at: 2) to: (result at: 5). - self add: (nodes at: 3) to: (result at: 1). - self addAll: ((nodes at: 4) at: 1) to: (result at: 6). - self addAll: ((nodes at: 4) at: 2) to: (result at: 7). - self addAll: ((nodes at: 4) at: 3) to: (result at: 8). - self addAll: ((nodes at: 4) at: 4) to: (result at: 1). - self addAll: ((nodes at: 4) at: 5) to: (result at: 9). - self addAll: ((nodes at: 4) at: 6) to: (result at: 10). - self addAll: ((nodes at: 4) at: 7) to: (result at: 11). - self addAll: ((nodes at: 4) at: 8) to: (result at: 12). - self addAll: ((nodes at: 4) at: 9) to: (result at: 5). - self addAll: ((nodes at: 4) at: 10) to: (result at: 13). - self addAll: ((nodes at: 4) at: 11) to: (result at: 14). - self addAll: ((nodes at: 4) at: 12) to: (result at: 15). - self addAll: ((nodes at: 4) at: 13) to: (result at: 2). - self addAll: ((nodes at: 4) at: 14) to: (result at: 4). - self addAll: ((nodes at: 4) at: 15) to: (result at: 16). - self addAll: ((nodes at: 4) at: 16) to: (result at: 3). - self addAll: ((nodes at: 4) at: 17) to: (result at: 17). - self addAll: ((nodes at: 4) at: 18) to: (result at: 18). - self addAll: ((nodes at: 4) at: 19) to: (result at: 19). - self addAll: ((nodes at: 4) at: 20) to: (result at: 20). - self addAll: ((nodes at: 4) at: 21) to: (result at: 21). - self addAll: ((nodes at: 4) at: 22) to: (result at: 22). - self addAll: ((nodes at: 4) at: 23) to: (result at: 23). - self addAll: ((nodes at: 4) at: 24) to: (result at: 24). - self addAll: ((nodes at: 4) at: 25) to: (result at: 25). - self addAll: ((nodes at: 4) at: 26) to: (result at: 26). - self addAll: ((nodes at: 4) at: 27) to: (result at: 27). - self addAll: ((nodes at: 4) at: 28) to: (result at: 28). - self addAll: ((nodes at: 4) at: 29) to: (result at: 29). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForenum_declaration1: nodes [ - | result | - result := SwiftEnumDeclarationNode new. - result addTokens: ((nodes at: 1) at: 1) to: result _Tokens. - result addTokens: ((nodes at: 1) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 3) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 4) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 5) to: result leftBracketTokens. - result addTokens: ((nodes at: 1) at: 6) to: result rightBracketTokens. - result addTokens: ((nodes at: 1) at: 7) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 1) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 12) to: result operatorTokens. - result addTokens: ((nodes at: 2) at: 1) to: result identifierTokens. - result addTokens: ((nodes at: 2) at: 2) to: result lessThanTokens. - result addTokens: ((nodes at: 2) at: 3) to: result colonTokens. - result addTokens: ((nodes at: 2) at: 4) to: result commaTokens. - result addTokens: ((nodes at: 2) at: 5) to: result greaterThanTokens. - result addTokens: ((nodes at: 2) at: 6) to: result periodTokens. - result addTokens: ((nodes at: 2) at: 7) to: result protocolTokens. - result addTokens: ((nodes at: 2) at: 8) to: result whereTokens. - result addTokens: ((nodes at: 2) at: 9) to: result equalEqualTokens. - result addTokens: ((nodes at: 2) at: 10) to: result leftBraceTokens. - result addTokens: ((nodes at: 2) at: 11) to: result _Tokens. - result addTokens: ((nodes at: 2) at: 12) to: result leftParenTokens. - result addTokens: ((nodes at: 2) at: 13) to: result rightParenTokens. - result addTokens: ((nodes at: 2) at: 14) to: result importTokens. - result addTokens: ((nodes at: 2) at: 15) to: result typealiasTokens. - result addTokens: ((nodes at: 2) at: 16) to: result structTokens. - result addTokens: ((nodes at: 2) at: 17) to: result classTokens. - result addTokens: ((nodes at: 2) at: 18) to: result enumTokens. - result addTokens: ((nodes at: 2) at: 19) to: result varTokens. - result addTokens: ((nodes at: 2) at: 20) to: result funcTokens. - result addTokens: ((nodes at: 2) at: 21) to: result operatorTokens. - result addTokens: ((nodes at: 2) at: 22) to: result mutatingTokens. - result addTokens: ((nodes at: 2) at: 23) to: result nonmutatingTokens. - result addTokens: ((nodes at: 2) at: 24) to: result overrideTokens. - result addTokens: ((nodes at: 2) at: 25) to: result staticTokens. - result addTokens: ((nodes at: 2) at: 26) to: result unownedTokens. - result - addTokens: ((nodes at: 2) at: 27) - to: result unownedLeftParensafeRightParenTokens. - result - addTokens: ((nodes at: 2) at: 28) - to: result unownedLeftParenunsafeRightParenTokens. - result addTokens: ((nodes at: 2) at: 29) to: result weakTokens. - result addTokens: ((nodes at: 2) at: 30) to: result letTokens. - result addNodes: ((nodes at: 2) at: 31) to: result inializers. - result addTokens: ((nodes at: 2) at: 32) to: result leftBracketTokens. - result - addTokens: ((nodes at: 2) at: 33) - to: result rightBracketTokens. - result - addTokens: ((nodes at: 2) at: 34) - to: result minusGreaterThanTokens. - result - addTokens: ((nodes at: 2) at: 35) - to: result questionMarkTokens. - result addTokens: ((nodes at: 2) at: 36) to: result bangTokens. - result addTokens: ((nodes at: 2) at: 37) to: result typeTokens. - result addTokens: ((nodes at: 2) at: 38) to: result inoutTokens. - result - addTokens: ((nodes at: 2) at: 39) - to: result periodPeriodPeriodTokens. - result addNodes: ((nodes at: 2) at: 40) to: result blocks. - result addTokens: ((nodes at: 2) at: 41) to: result getTokens. - result addTokens: ((nodes at: 2) at: 42) to: result setTokens. - result addTokens: ((nodes at: 2) at: 43) to: result rightBraceTokens. - result addTokens: ((nodes at: 2) at: 44) to: result equalTokens. - result addObjects: ((nodes at: 2) at: 45) to: result expressions. - result addTokens: ((nodes at: 2) at: 46) to: result willSetTokens. - result addTokens: ((nodes at: 2) at: 47) to: result didSetTokens. - result addNodes: ((nodes at: 2) at: 48) to: result declarations. - result addTokens: ((nodes at: 2) at: 49) to: result convenienceTokens. - result addTokens: ((nodes at: 2) at: 50) to: result initTokens. - result addTokens: ((nodes at: 2) at: 51) to: result deinitTokens. - result addTokens: ((nodes at: 2) at: 52) to: result extensionTokens. - result addTokens: ((nodes at: 2) at: 53) to: result subscriptTokens. - result addTokens: ((nodes at: 2) at: 54) to: result caseTokens. - result - addTokens: ((nodes at: 2) at: 55) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 2) at: 56) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 2) at: 57) - to: result full_string_literalTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForenum_declaration2: nodes [ - | result | - result := SwiftEnumDeclarationNode new. - result addTokens: ((nodes at: 1) at: 1) to: result _Tokens. - result addTokens: ((nodes at: 1) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 3) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 4) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 5) to: result leftBracketTokens. - result addTokens: ((nodes at: 1) at: 6) to: result rightBracketTokens. - result addTokens: ((nodes at: 1) at: 7) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 1) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 12) to: result operatorTokens. - result addTokens: ((nodes at: 2) at: 1) to: result identifierTokens. - result addTokens: ((nodes at: 2) at: 2) to: result lessThanTokens. - result addTokens: ((nodes at: 2) at: 3) to: result colonTokens. - result addTokens: ((nodes at: 2) at: 4) to: result commaTokens. - result addTokens: ((nodes at: 2) at: 5) to: result greaterThanTokens. - result addTokens: ((nodes at: 2) at: 6) to: result periodTokens. - result addTokens: ((nodes at: 2) at: 7) to: result protocolTokens. - result addTokens: ((nodes at: 2) at: 8) to: result whereTokens. - result addTokens: ((nodes at: 2) at: 9) to: result equalEqualTokens. - result addTokens: ((nodes at: 2) at: 10) to: result leftBraceTokens. - result addTokens: ((nodes at: 2) at: 11) to: result _Tokens. - result addTokens: ((nodes at: 2) at: 12) to: result leftParenTokens. - result addTokens: ((nodes at: 2) at: 13) to: result rightParenTokens. - result addTokens: ((nodes at: 2) at: 14) to: result importTokens. - result addTokens: ((nodes at: 2) at: 15) to: result typealiasTokens. - result addTokens: ((nodes at: 2) at: 16) to: result structTokens. - result addTokens: ((nodes at: 2) at: 17) to: result classTokens. - result addTokens: ((nodes at: 2) at: 18) to: result enumTokens. - result addTokens: ((nodes at: 2) at: 19) to: result varTokens. - result addTokens: ((nodes at: 2) at: 20) to: result funcTokens. - result addTokens: ((nodes at: 2) at: 21) to: result operatorTokens. - result addTokens: ((nodes at: 2) at: 22) to: result mutatingTokens. - result addTokens: ((nodes at: 2) at: 23) to: result nonmutatingTokens. - result addTokens: ((nodes at: 2) at: 24) to: result overrideTokens. - result addTokens: ((nodes at: 2) at: 25) to: result staticTokens. - result addTokens: ((nodes at: 2) at: 26) to: result unownedTokens. - result - addTokens: ((nodes at: 2) at: 27) - to: result unownedLeftParensafeRightParenTokens. - result - addTokens: ((nodes at: 2) at: 28) - to: result unownedLeftParenunsafeRightParenTokens. - result addTokens: ((nodes at: 2) at: 29) to: result weakTokens. - result addTokens: ((nodes at: 2) at: 30) to: result letTokens. - result addNodes: ((nodes at: 2) at: 31) to: result inializers. - result addTokens: ((nodes at: 2) at: 32) to: result leftBracketTokens. - result - addTokens: ((nodes at: 2) at: 33) - to: result rightBracketTokens. - result - addTokens: ((nodes at: 2) at: 34) - to: result minusGreaterThanTokens. - result - addTokens: ((nodes at: 2) at: 35) - to: result questionMarkTokens. - result addTokens: ((nodes at: 2) at: 36) to: result bangTokens. - result addTokens: ((nodes at: 2) at: 37) to: result typeTokens. - result addNodes: ((nodes at: 2) at: 38) to: result blocks. - result addTokens: ((nodes at: 2) at: 39) to: result getTokens. - result addTokens: ((nodes at: 2) at: 40) to: result setTokens. - result addTokens: ((nodes at: 2) at: 41) to: result rightBraceTokens. - result addTokens: ((nodes at: 2) at: 42) to: result equalTokens. - result addObjects: ((nodes at: 2) at: 43) to: result expressions. - result addTokens: ((nodes at: 2) at: 44) to: result willSetTokens. - result addTokens: ((nodes at: 2) at: 45) to: result didSetTokens. - result - addTokens: ((nodes at: 2) at: 46) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 2) at: 47) to: result deinitTokens. - result addTokens: ((nodes at: 2) at: 48) to: result extensionTokens. - result addTokens: ((nodes at: 2) at: 49) to: result caseTokens. - result addNodes: ((nodes at: 2) at: 50) to: result declarations. - result addTokens: ((nodes at: 2) at: 51) to: result convenienceTokens. - result addTokens: ((nodes at: 2) at: 52) to: result initTokens. - result addTokens: ((nodes at: 2) at: 53) to: result inoutTokens. - result addTokens: ((nodes at: 2) at: 54) to: result subscriptTokens. - result - addTokens: ((nodes at: 2) at: 55) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 2) at: 56) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 2) at: 57) - to: result full_string_literalTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForexplicit_member_expression1: nodes [ - | result | - result := SwiftExplicitMemberExpressionNode new. - result addTokens: ((nodes at: 1) at: 1) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 2) to: result lessThanTokens. - result addTokens: ((nodes at: 1) at: 3) to: result commaTokens. - result addTokens: ((nodes at: 1) at: 4) to: result greaterThanTokens. - result - addTokens: ((nodes at: 1) at: 5) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 6) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 7) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 8) to: result leftBracketTokens. - result addObjects: ((nodes at: 1) at: 9) to: result expressions. - result - addTokens: ((nodes at: 1) at: 10) - to: result rightBracketTokens. - result addObjects: ((nodes at: 1) at: 11) to: result keyExpressions. - result addTokens: ((nodes at: 1) at: 12) to: result colonTokens. - result addObjects: ((nodes at: 1) at: 13) to: result valueExpressions. - result __FILE__Token: ((nodes at: 1) at: 14). - result __LINE__Token: ((nodes at: 1) at: 15). - result __COLUMN__Token: ((nodes at: 1) at: 16). - result __FUNCTION__Token: ((nodes at: 1) at: 17). - result addTokens: ((nodes at: 1) at: 18) to: result selfTokens. - result addTokens: ((nodes at: 1) at: 19) to: result periodTokens. - result addTokens: ((nodes at: 1) at: 20) to: result initTokens. - result addTokens: ((nodes at: 1) at: 21) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 22) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 23) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 24) to: result inoutTokens. - result addTokens: ((nodes at: 1) at: 25) to: result letTokens. - result addTokens: ((nodes at: 1) at: 26) to: result _Tokens. - result - addTokens: ((nodes at: 1) at: 27) - to: result minusGreaterThanTokens. - result - addTokens: ((nodes at: 1) at: 28) - to: result questionMarkTokens. - result addTokens: ((nodes at: 1) at: 29) to: result bangTokens. - result addTokens: ((nodes at: 1) at: 30) to: result protocolTokens. - result addTokens: ((nodes at: 1) at: 31) to: result typeTokens. - result - addTokens: ((nodes at: 1) at: 32) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 1) at: 33) to: result equalTokens. - result addTokens: ((nodes at: 1) at: 34) to: result varTokens. - result addTokens: ((nodes at: 1) at: 35) to: result rightBraceTokens. - result addTokens: ((nodes at: 1) at: 36) to: result operatorTokens. - result inToken: ((nodes at: 1) at: 37). - result weakToken: ((nodes at: 1) at: 38). - result unownedToken: ((nodes at: 1) at: 39). - result unownedLeftParensafeRightParenToken: ((nodes at: 1) at: 40). - result unownedLeftParenunsafeRightParenToken: ((nodes at: 1) at: 41). - result addNodes: ((nodes at: 1) at: 42) to: result statements. - result addTokens: ((nodes at: 1) at: 43) to: result dynamicTypeTokens. - result addToken: (nodes at: 2) to: result periodTokens. - result addToken: (nodes at: 3) to: result integer_literalTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForexplicit_member_expression2: nodes [ - | result | - result := SwiftExplicitMemberExpressionNode new. - result addTokens: ((nodes at: 1) at: 1) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 2) to: result lessThanTokens. - result addTokens: ((nodes at: 1) at: 3) to: result commaTokens. - result addTokens: ((nodes at: 1) at: 4) to: result greaterThanTokens. - result - addTokens: ((nodes at: 1) at: 5) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 6) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 7) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 8) to: result leftBracketTokens. - result addObjects: ((nodes at: 1) at: 9) to: result expressions. - result - addTokens: ((nodes at: 1) at: 10) - to: result rightBracketTokens. - result addObjects: ((nodes at: 1) at: 11) to: result keyExpressions. - result addTokens: ((nodes at: 1) at: 12) to: result colonTokens. - result addObjects: ((nodes at: 1) at: 13) to: result valueExpressions. - result __FILE__Token: ((nodes at: 1) at: 14). - result __LINE__Token: ((nodes at: 1) at: 15). - result __COLUMN__Token: ((nodes at: 1) at: 16). - result __FUNCTION__Token: ((nodes at: 1) at: 17). - result addTokens: ((nodes at: 1) at: 18) to: result selfTokens. - result addTokens: ((nodes at: 1) at: 19) to: result periodTokens. - result addTokens: ((nodes at: 1) at: 20) to: result initTokens. - result addTokens: ((nodes at: 1) at: 21) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 22) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 23) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 24) to: result inoutTokens. - result addTokens: ((nodes at: 1) at: 25) to: result letTokens. - result addTokens: ((nodes at: 1) at: 26) to: result _Tokens. - result - addTokens: ((nodes at: 1) at: 27) - to: result minusGreaterThanTokens. - result - addTokens: ((nodes at: 1) at: 28) - to: result questionMarkTokens. - result addTokens: ((nodes at: 1) at: 29) to: result bangTokens. - result addTokens: ((nodes at: 1) at: 30) to: result protocolTokens. - result addTokens: ((nodes at: 1) at: 31) to: result typeTokens. - result - addTokens: ((nodes at: 1) at: 32) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 1) at: 33) to: result equalTokens. - result addTokens: ((nodes at: 1) at: 34) to: result varTokens. - result addTokens: ((nodes at: 1) at: 35) to: result rightBraceTokens. - result addTokens: ((nodes at: 1) at: 36) to: result operatorTokens. - result inToken: ((nodes at: 1) at: 37). - result weakToken: ((nodes at: 1) at: 38). - result unownedToken: ((nodes at: 1) at: 39). - result unownedLeftParensafeRightParenToken: ((nodes at: 1) at: 40). - result unownedLeftParenunsafeRightParenToken: ((nodes at: 1) at: 41). - result addNodes: ((nodes at: 1) at: 42) to: result statements. - result addTokens: ((nodes at: 1) at: 43) to: result dynamicTypeTokens. - result addToken: (nodes at: 2) to: result periodTokens. - result addToken: (nodes at: 3) to: result identifierTokens. - result addToken: ((nodes at: 4) at: 1) to: result lessThanTokens. - result addTokens: ((nodes at: 4) at: 2) to: result commaTokens. - result addToken: ((nodes at: 4) at: 3) to: result greaterThanTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForexpression2: nodes [ - | result | - result := SwiftBinaryExpressionNode new. - result addNodes: (nodes at: 2) to: result operators. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForexpression_element2: nodes [ - | result | - result := SwiftNamedExpressionNode new. - result identifierToken: (nodes at: 1). - result colonToken: (nodes at: 2). - result expression: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForexpression_element_list2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForexpression_list2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 2). - self add: (nodes at: 3) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForextension_body1: nodes [ - | result | - result := Array new: 3. - result at: 2 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: (nodes at: 2) to: (result at: 2). - result at: 3 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForextension_declaration1: nodes [ - | result | - result := SwiftExtensionDeclarationNode new. - result extensionToken: (nodes at: 1). - result colonToken: ((nodes at: 3) at: 1). - result addTokens: ((nodes at: 3) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 3) at: 3) to: result lessThanTokens. - result addTokens: ((nodes at: 3) at: 4) to: result greaterThanTokens. - result addTokens: ((nodes at: 3) at: 5) to: result periodTokens. - result addTokens: ((nodes at: 3) at: 6) to: result commaTokens. - result leftBraceToken: ((nodes at: 4) at: 1). - result addNodes: ((nodes at: 4) at: 2) to: result declarations. - result rightBraceToken: ((nodes at: 4) at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForfallthrough_statement1: nodes [ - | result | - result := SwiftFallThroughStatementNode new. - result fallthroughToken: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForfile1: nodes [ - | result | - result := SwiftFileNode new. - result addNodes: (nodes at: 1) to: result statements. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForfor_in_statement1: nodes [ - | result | - result := SwiftForInStatementNode new. - result forToken: (nodes at: 1). - result addTokens: ((nodes at: 2) at: 1) to: result _Tokens. - result addTokens: ((nodes at: 2) at: 2) to: result colonTokens. - result addTokens: ((nodes at: 2) at: 3) to: result identifierTokens. - result addTokens: ((nodes at: 2) at: 4) to: result leftParenTokens. - result addTokens: ((nodes at: 2) at: 5) to: result rightParenTokens. - result addTokens: ((nodes at: 2) at: 6) to: result leftBracketTokens. - result addTokens: ((nodes at: 2) at: 7) to: result rightBracketTokens. - result addTokens: ((nodes at: 2) at: 8) to: result leftBraceTokens. - result addTokens: ((nodes at: 2) at: 9) to: result rightBraceTokens. - result - addTokens: ((nodes at: 2) at: 10) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 2) at: 11) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 2) at: 12) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 2) at: 13) to: result operatorTokens. - result - addTokens: ((nodes at: 2) at: 14) - to: result minusGreaterThanTokens. - result addTokens: ((nodes at: 2) at: 15) to: result periodTokens. - result - addTokens: ((nodes at: 2) at: 16) - to: result questionMarkTokens. - result addTokens: ((nodes at: 2) at: 17) to: result bangTokens. - result addTokens: ((nodes at: 2) at: 18) to: result protocolTokens. - result addTokens: ((nodes at: 2) at: 19) to: result lessThanTokens. - result addTokens: ((nodes at: 2) at: 20) to: result greaterThanTokens. - result addTokens: ((nodes at: 2) at: 21) to: result typeTokens. - result addTokens: ((nodes at: 2) at: 22) to: result commaTokens. - result - addTokens: ((nodes at: 2) at: 23) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 2) at: 24) to: result inoutTokens. - result addTokens: ((nodes at: 2) at: 25) to: result varTokens. - result addTokens: ((nodes at: 2) at: 26) to: result letTokens. - result addObjects: ((nodes at: 2) at: 27) to: result expressions. - result addTokens: ((nodes at: 2) at: 28) to: result isTokens. - result addTokens: ((nodes at: 2) at: 29) to: result asTokens. - result inToken: (nodes at: 3). - result addObject: (nodes at: 4) to: result expressions. - result block: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForfor_init1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForfor_statement1: nodes [ - | result | - result := SwiftForStatementNode new. - result forToken: (nodes at: 1). - result addObjects: ((nodes at: 2) at: 1) to: result expressions. - result addTokens: ((nodes at: 2) at: 2) to: result commaTokens. - result semicolonToken: (nodes at: 3). - result testExpression: (nodes at: 4). - result semicolonToken: (nodes at: 5). - result incrementExpression: (nodes at: 6). - result block: (nodes at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForfor_statement2: nodes [ - | result | - result := SwiftForStatementNode new. - result forToken: (nodes at: 1). - result leftParenToken: (nodes at: 2). - result addObjects: ((nodes at: 3) at: 1) to: result expressions. - result addTokens: ((nodes at: 3) at: 2) to: result commaTokens. - result semicolonToken: (nodes at: 4). - result testExpression: (nodes at: 5). - result semicolonToken: (nodes at: 6). - result incrementExpression: (nodes at: 7). - result rightParenToken: (nodes at: 8). - result block: (nodes at: 9). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForforced_value_expression1: nodes [ - | result | - result := SwiftForcedValueExpressionNode new. - result expression: (nodes at: 1). - result bangToken: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForfunction_call_expression1: nodes [ - | result | - result := SwiftFunctionCallExpressionNode new. - result addObject: (nodes at: 1) to: result expressions. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForfunction_declaration1: nodes [ - | result | - result := SwiftFunctionDeclarationNode new. - result addTokens: ((nodes at: 1) at: 1) to: result _Tokens. - result addTokens: ((nodes at: 1) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 3) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 4) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 5) to: result leftBracketTokens. - result addTokens: ((nodes at: 1) at: 6) to: result rightBracketTokens. - result addTokens: ((nodes at: 1) at: 7) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 1) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 12) to: result operatorTokens. - result addTokens: ((nodes at: 1) at: 13) to: result classTokens. - result addTokens: ((nodes at: 1) at: 14) to: result mutatingTokens. - result addTokens: ((nodes at: 1) at: 15) to: result nonmutatingTokens. - result addTokens: ((nodes at: 1) at: 16) to: result overrideTokens. - result addTokens: ((nodes at: 1) at: 17) to: result staticTokens. - result addTokens: ((nodes at: 1) at: 18) to: result unownedTokens. - result - addTokens: ((nodes at: 1) at: 19) - to: result unownedLeftParensafeRightParenTokens. - result - addTokens: ((nodes at: 1) at: 20) - to: result unownedLeftParenunsafeRightParenTokens. - result addTokens: ((nodes at: 1) at: 21) to: result weakTokens. - result funcToken: ((nodes at: 1) at: 22). - result addToken: ((nodes at: 2) at: 1) to: result identifierTokens. - result addToken: ((nodes at: 2) at: 2) to: result operatorTokens. - result addTokens: ((nodes at: 3) at: 1) to: result lessThanTokens. - result addTokens: ((nodes at: 3) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 3) at: 3) to: result colonTokens. - result addTokens: ((nodes at: 3) at: 4) to: result commaTokens. - result addTokens: ((nodes at: 3) at: 5) to: result greaterThanTokens. - result addTokens: ((nodes at: 3) at: 6) to: result periodTokens. - result addTokens: ((nodes at: 3) at: 7) to: result protocolTokens. - result whereToken: ((nodes at: 3) at: 8). - result addTokens: ((nodes at: 3) at: 9) to: result equalEqualTokens. - result addTokens: ((nodes at: 4) at: 1) to: result leftParenTokens. - result addTokens: ((nodes at: 4) at: 2) to: result rightParenTokens. - result addTokens: ((nodes at: 4) at: 3) to: result commaTokens. - result - addTokens: ((nodes at: 4) at: 4) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 4) at: 5) to: result varTokens. - result addTokens: ((nodes at: 4) at: 6) to: result inoutTokens. - result addTokens: ((nodes at: 4) at: 7) to: result letTokens. - result addTokens: ((nodes at: 4) at: 8) to: result _Tokens. - result addTokens: ((nodes at: 4) at: 9) to: result identifierTokens. - result addTokens: ((nodes at: 4) at: 10) to: result colonTokens. - result addTokens: ((nodes at: 4) at: 11) to: result equalTokens. - result addObjects: ((nodes at: 4) at: 12) to: result expressions. - result addTokens: ((nodes at: 4) at: 13) to: result leftBracketTokens. - result - addTokens: ((nodes at: 4) at: 14) - to: result rightBracketTokens. - result - addTokens: ((nodes at: 4) at: 15) - to: result minusGreaterThanTokens. - result addTokens: ((nodes at: 4) at: 16) to: result periodTokens. - result - addTokens: ((nodes at: 4) at: 17) - to: result questionMarkTokens. - result addTokens: ((nodes at: 4) at: 18) to: result bangTokens. - result addTokens: ((nodes at: 4) at: 19) to: result protocolTokens. - result addTokens: ((nodes at: 4) at: 20) to: result lessThanTokens. - result addTokens: ((nodes at: 4) at: 21) to: result greaterThanTokens. - result addTokens: ((nodes at: 4) at: 22) to: result typeTokens. - result addTokens: ((nodes at: 4) at: 23) to: result leftBraceTokens. - result addTokens: ((nodes at: 4) at: 24) to: result rightBraceTokens. - result - addTokens: ((nodes at: 4) at: 25) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 4) at: 26) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 4) at: 27) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 4) at: 28) to: result operatorTokens. - result block: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForfunction_head1: nodes [ - | result | - result := Array new: 22. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - self addAll: ((nodes at: 1) at: 6) to: (result at: 6). - self addAll: ((nodes at: 1) at: 7) to: (result at: 7). - self addAll: ((nodes at: 1) at: 8) to: (result at: 8). - self addAll: ((nodes at: 1) at: 9) to: (result at: 9). - self addAll: ((nodes at: 1) at: 10) to: (result at: 10). - self addAll: ((nodes at: 1) at: 11) to: (result at: 11). - self addAll: ((nodes at: 1) at: 12) to: (result at: 12). - self addAll: ((nodes at: 2) at: 1) to: (result at: 13). - self addAll: ((nodes at: 2) at: 2) to: (result at: 14). - self addAll: ((nodes at: 2) at: 3) to: (result at: 15). - self addAll: ((nodes at: 2) at: 4) to: (result at: 16). - self addAll: ((nodes at: 2) at: 5) to: (result at: 17). - self addAll: ((nodes at: 2) at: 6) to: (result at: 18). - self addAll: ((nodes at: 2) at: 7) to: (result at: 19). - self addAll: ((nodes at: 2) at: 8) to: (result at: 20). - self addAll: ((nodes at: 2) at: 9) to: (result at: 21). - result at: 22 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForfunction_name1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForfunction_name2: nodes [ - | result | - result := Array new: 2. - result at: 2 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForfunction_signature1: nodes [ - | result | - result := nodes at: 1. - self addAll: ((nodes at: 2) at: 1) to: (result at: 15). - self addAll: ((nodes at: 2) at: 2) to: (result at: 8). - self addAll: ((nodes at: 2) at: 3) to: (result at: 9). - self addAll: ((nodes at: 2) at: 4) to: (result at: 1). - self addAll: ((nodes at: 2) at: 5) to: (result at: 2). - self addAll: ((nodes at: 2) at: 6) to: (result at: 13). - self addAll: ((nodes at: 2) at: 7) to: (result at: 14). - self addAll: ((nodes at: 2) at: 8) to: (result at: 23). - self addAll: ((nodes at: 2) at: 9) to: (result at: 24). - self addAll: ((nodes at: 2) at: 10) to: (result at: 25). - self addAll: ((nodes at: 2) at: 11) to: (result at: 26). - self addAll: ((nodes at: 2) at: 12) to: (result at: 27). - self addAll: ((nodes at: 2) at: 13) to: (result at: 28). - self addAll: ((nodes at: 2) at: 14) to: (result at: 10). - self addAll: ((nodes at: 2) at: 15) to: (result at: 16). - self addAll: ((nodes at: 2) at: 16) to: (result at: 17). - self addAll: ((nodes at: 2) at: 17) to: (result at: 18). - self addAll: ((nodes at: 2) at: 18) to: (result at: 19). - self addAll: ((nodes at: 2) at: 19) to: (result at: 20). - self addAll: ((nodes at: 2) at: 20) to: (result at: 21). - self addAll: ((nodes at: 2) at: 21) to: (result at: 22). - self addAll: ((nodes at: 2) at: 22) to: (result at: 3). - self addAll: ((nodes at: 2) at: 23) to: (result at: 4). - self addAll: ((nodes at: 2) at: 24) to: (result at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForfunction_type1: nodes [ - | result | - result := SwiftFunctionTypeNode new. - result addToken: (nodes at: 2) to: result minusGreaterThanTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForgeneric_argument_clause1: nodes [ - | result | - result := Array new: 3. - result at: 2 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - result at: 3 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForgeneric_argument_list1: nodes [ - | result | - result := Array new: 1. - result at: 1 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForgeneric_argument_list2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForgeneric_parameter1: nodes [ - | result | - result := Array new: 7. - result at: 1 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForgeneric_parameter2: nodes [ - | result | - result := Array new: 7. - result at: 1 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - result at: 2 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForgeneric_parameter_clause1: nodes [ - | result | - result := Array new: 9. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - self addAll: ((nodes at: 2) at: 3) to: (result at: 1). - self addAll: ((nodes at: 2) at: 4) to: (result at: 4). - self addAll: ((nodes at: 2) at: 5) to: (result at: 5). - self addAll: ((nodes at: 2) at: 6) to: (result at: 6). - self addAll: ((nodes at: 2) at: 7) to: (result at: 7). - result at: 8 put: ((nodes at: 3) at: 1). - self addAll: ((nodes at: 3) at: 2) to: (result at: 2). - self addAll: ((nodes at: 3) at: 3) to: (result at: 1). - self addAll: ((nodes at: 3) at: 4) to: (result at: 5). - self addAll: ((nodes at: 3) at: 5) to: (result at: 6). - self addAll: ((nodes at: 3) at: 6) to: (result at: 3). - self addAll: ((nodes at: 3) at: 7) to: (result at: 7). - self addAll: ((nodes at: 3) at: 8) to: (result at: 4). - self addAll: ((nodes at: 3) at: 9) to: (result at: 9). - self add: (nodes at: 4) to: (result at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForgeneric_parameter_list1: nodes [ - | result | - result := Array new: 7. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self add: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - self addAll: ((nodes at: 1) at: 6) to: (result at: 6). - self add: ((nodes at: 1) at: 7) to: (result at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForgeneric_parameter_list2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 4). - self addAll: ((nodes at: 3) at: 1) to: (result at: 1). - self add: ((nodes at: 3) at: 2) to: (result at: 2). - self addAll: ((nodes at: 3) at: 3) to: (result at: 3). - self addAll: ((nodes at: 3) at: 4) to: (result at: 4). - self addAll: ((nodes at: 3) at: 5) to: (result at: 5). - self addAll: ((nodes at: 3) at: 6) to: (result at: 6). - self add: ((nodes at: 3) at: 7) to: (result at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForgetter_keyword_clause1: nodes [ - | result | - result := Array new: 13. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - self addAll: ((nodes at: 1) at: 6) to: (result at: 6). - self addAll: ((nodes at: 1) at: 7) to: (result at: 7). - self addAll: ((nodes at: 1) at: 8) to: (result at: 8). - self addAll: ((nodes at: 1) at: 9) to: (result at: 9). - self addAll: ((nodes at: 1) at: 10) to: (result at: 10). - self addAll: ((nodes at: 1) at: 11) to: (result at: 11). - self addAll: ((nodes at: 1) at: 12) to: (result at: 12). - result at: 13 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForgetter_setter_block1: nodes [ - | result | - result := Array new: 15. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - self addAll: ((nodes at: 2) at: 3) to: (result at: 4). - self addAll: ((nodes at: 2) at: 4) to: (result at: 5). - self addAll: ((nodes at: 2) at: 5) to: (result at: 6). - self addAll: ((nodes at: 2) at: 6) to: (result at: 7). - self addAll: ((nodes at: 2) at: 7) to: (result at: 1). - self addAll: ((nodes at: 2) at: 8) to: (result at: 8). - self addAll: ((nodes at: 2) at: 9) to: (result at: 9). - self addAll: ((nodes at: 2) at: 10) to: (result at: 10). - self addAll: ((nodes at: 2) at: 11) to: (result at: 11). - self addAll: ((nodes at: 2) at: 12) to: (result at: 12). - result at: 13 put: ((nodes at: 2) at: 13). - self add: ((nodes at: 2) at: 14) to: (result at: 14). - self addAll: ((nodes at: 3) at: 1) to: (result at: 2). - self addAll: ((nodes at: 3) at: 2) to: (result at: 3). - self addAll: ((nodes at: 3) at: 3) to: (result at: 4). - self addAll: ((nodes at: 3) at: 4) to: (result at: 5). - self addAll: ((nodes at: 3) at: 5) to: (result at: 6). - self addAll: ((nodes at: 3) at: 6) to: (result at: 7). - self addAll: ((nodes at: 3) at: 7) to: (result at: 1). - self addAll: ((nodes at: 3) at: 8) to: (result at: 8). - self addAll: ((nodes at: 3) at: 9) to: (result at: 9). - self addAll: ((nodes at: 3) at: 10) to: (result at: 10). - self addAll: ((nodes at: 3) at: 11) to: (result at: 11). - self addAll: ((nodes at: 3) at: 12) to: (result at: 12). - result at: 15 put: ((nodes at: 3) at: 13). - self add: ((nodes at: 3) at: 14) to: (result at: 14). - self add: (nodes at: 4) to: (result at: 8). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForgetter_setter_block2: nodes [ - | result | - result := Array new: 15. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - self addAll: ((nodes at: 2) at: 3) to: (result at: 4). - self addAll: ((nodes at: 2) at: 4) to: (result at: 5). - self addAll: ((nodes at: 2) at: 5) to: (result at: 6). - self addAll: ((nodes at: 2) at: 6) to: (result at: 7). - self addAll: ((nodes at: 2) at: 7) to: (result at: 1). - self addAll: ((nodes at: 2) at: 8) to: (result at: 8). - self addAll: ((nodes at: 2) at: 9) to: (result at: 9). - self addAll: ((nodes at: 2) at: 10) to: (result at: 10). - self addAll: ((nodes at: 2) at: 11) to: (result at: 11). - self addAll: ((nodes at: 2) at: 12) to: (result at: 12). - result at: 15 put: ((nodes at: 2) at: 13). - self add: ((nodes at: 2) at: 14) to: (result at: 14). - self addAll: ((nodes at: 3) at: 1) to: (result at: 2). - self addAll: ((nodes at: 3) at: 2) to: (result at: 3). - self addAll: ((nodes at: 3) at: 3) to: (result at: 4). - self addAll: ((nodes at: 3) at: 4) to: (result at: 5). - self addAll: ((nodes at: 3) at: 5) to: (result at: 6). - self addAll: ((nodes at: 3) at: 6) to: (result at: 7). - self addAll: ((nodes at: 3) at: 7) to: (result at: 1). - self addAll: ((nodes at: 3) at: 8) to: (result at: 8). - self addAll: ((nodes at: 3) at: 9) to: (result at: 9). - self addAll: ((nodes at: 3) at: 10) to: (result at: 10). - self addAll: ((nodes at: 3) at: 11) to: (result at: 11). - self addAll: ((nodes at: 3) at: 12) to: (result at: 12). - result at: 13 put: ((nodes at: 3) at: 13). - self add: ((nodes at: 3) at: 14) to: (result at: 14). - self add: (nodes at: 4) to: (result at: 8). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForgetter_setter_keyword_block1: nodes [ - | result | - result := Array new: 14. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - self addAll: ((nodes at: 2) at: 3) to: (result at: 4). - self addAll: ((nodes at: 2) at: 4) to: (result at: 5). - self addAll: ((nodes at: 2) at: 5) to: (result at: 6). - self addAll: ((nodes at: 2) at: 6) to: (result at: 7). - self addAll: ((nodes at: 2) at: 7) to: (result at: 1). - self addAll: ((nodes at: 2) at: 8) to: (result at: 8). - self addAll: ((nodes at: 2) at: 9) to: (result at: 9). - self addAll: ((nodes at: 2) at: 10) to: (result at: 10). - self addAll: ((nodes at: 2) at: 11) to: (result at: 11). - self addAll: ((nodes at: 2) at: 12) to: (result at: 12). - result at: 13 put: ((nodes at: 2) at: 13). - self addAll: ((nodes at: 3) at: 1) to: (result at: 2). - self addAll: ((nodes at: 3) at: 2) to: (result at: 3). - self addAll: ((nodes at: 3) at: 3) to: (result at: 4). - self addAll: ((nodes at: 3) at: 4) to: (result at: 5). - self addAll: ((nodes at: 3) at: 5) to: (result at: 6). - self addAll: ((nodes at: 3) at: 6) to: (result at: 7). - self addAll: ((nodes at: 3) at: 7) to: (result at: 1). - self addAll: ((nodes at: 3) at: 8) to: (result at: 8). - self addAll: ((nodes at: 3) at: 9) to: (result at: 9). - self addAll: ((nodes at: 3) at: 10) to: (result at: 10). - self addAll: ((nodes at: 3) at: 11) to: (result at: 11). - self addAll: ((nodes at: 3) at: 12) to: (result at: 12). - result at: 14 put: ((nodes at: 3) at: 13). - self add: (nodes at: 4) to: (result at: 8). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForgetter_setter_keyword_block2: nodes [ - | result | - result := Array new: 14. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - self addAll: ((nodes at: 2) at: 3) to: (result at: 4). - self addAll: ((nodes at: 2) at: 4) to: (result at: 5). - self addAll: ((nodes at: 2) at: 5) to: (result at: 6). - self addAll: ((nodes at: 2) at: 6) to: (result at: 7). - self addAll: ((nodes at: 2) at: 7) to: (result at: 1). - self addAll: ((nodes at: 2) at: 8) to: (result at: 8). - self addAll: ((nodes at: 2) at: 9) to: (result at: 9). - self addAll: ((nodes at: 2) at: 10) to: (result at: 10). - self addAll: ((nodes at: 2) at: 11) to: (result at: 11). - self addAll: ((nodes at: 2) at: 12) to: (result at: 12). - result at: 14 put: ((nodes at: 2) at: 13). - self addAll: ((nodes at: 3) at: 1) to: (result at: 2). - self addAll: ((nodes at: 3) at: 2) to: (result at: 3). - self addAll: ((nodes at: 3) at: 3) to: (result at: 4). - self addAll: ((nodes at: 3) at: 4) to: (result at: 5). - self addAll: ((nodes at: 3) at: 5) to: (result at: 6). - self addAll: ((nodes at: 3) at: 6) to: (result at: 7). - self addAll: ((nodes at: 3) at: 7) to: (result at: 1). - self addAll: ((nodes at: 3) at: 8) to: (result at: 8). - self addAll: ((nodes at: 3) at: 9) to: (result at: 9). - self addAll: ((nodes at: 3) at: 10) to: (result at: 10). - self addAll: ((nodes at: 3) at: 11) to: (result at: 11). - self addAll: ((nodes at: 3) at: 12) to: (result at: 12). - result at: 13 put: ((nodes at: 3) at: 13). - self add: (nodes at: 4) to: (result at: 8). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForif_statement1: nodes [ - | result | - result := SwiftIfStatementNode new. - result ifToken: (nodes at: 1). - result expression: (nodes at: 2). - result then: (nodes at: 3). - result elseToken: ((nodes at: 4) at: 1). - result else: ((nodes at: 4) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForimplicit_member_expression1: nodes [ - | result | - result := SwiftImplicitMemberExpressionNode new. - result periodToken: (nodes at: 1). - result identifierToken: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForimplicitly_unwrapped_optional_type1: nodes [ - | result | - result := SwiftImplicitlyUnwrappedOptionalTypeNode new. - result addToken: (nodes at: 2) to: result bangTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForimport_declaration1: nodes [ - | result | - result := SwiftImportDeclarationNode new. - result addTokens: ((nodes at: 1) at: 1) to: result _Tokens. - result addTokens: ((nodes at: 1) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 3) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 4) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 5) to: result leftBracketTokens. - result addTokens: ((nodes at: 1) at: 6) to: result rightBracketTokens. - result addTokens: ((nodes at: 1) at: 7) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 1) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 12) to: result operatorTokens. - result importToken: (nodes at: 2). - result typealiasToken: ((nodes at: 3) at: 1). - result structToken: ((nodes at: 3) at: 2). - result classToken: ((nodes at: 3) at: 3). - result enumToken: ((nodes at: 3) at: 4). - result protocolToken: ((nodes at: 3) at: 5). - result varToken: ((nodes at: 3) at: 6). - result funcToken: ((nodes at: 3) at: 7). - result addTokens: ((nodes at: 4) at: 1) to: result identifierTokens. - result addTokens: ((nodes at: 4) at: 2) to: result operatorTokens. - result addTokens: ((nodes at: 4) at: 3) to: result periodTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForimport_kind1: nodes [ - | result | - result := Array new: 7. - result at: 1 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForimport_kind2: nodes [ - | result | - result := Array new: 7. - result at: 2 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForimport_kind3: nodes [ - | result | - result := Array new: 7. - result at: 3 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForimport_kind4: nodes [ - | result | - result := Array new: 7. - result at: 4 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForimport_kind5: nodes [ - | result | - result := Array new: 7. - result at: 5 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForimport_kind6: nodes [ - | result | - result := Array new: 7. - result at: 6 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForimport_kind7: nodes [ - | result | - result := Array new: 7. - result at: 7 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForimport_path1: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - self add: ((nodes at: 1) at: 1) to: (result at: 1). - self add: ((nodes at: 1) at: 2) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForimport_path2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 3). - self add: ((nodes at: 3) at: 1) to: (result at: 1). - self add: ((nodes at: 3) at: 2) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForin_out_expression1: nodes [ - | result | - result := SwiftInOutExpressionNode new. - result andToken: (nodes at: 1). - result identifierToken: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForinfix_operator_attributes1: nodes [ - | result | - result := Array new: 6. - result at: 1 put: ((nodes at: 1) at: 1). - result at: 2 put: ((nodes at: 1) at: 2). - result at: 3 put: ((nodes at: 2) at: 1). - result at: 4 put: ((nodes at: 2) at: 2). - result at: 5 put: ((nodes at: 2) at: 3). - result at: 6 put: ((nodes at: 2) at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForinfix_operator_declaration1: nodes [ - | result | - result := SwiftInfixOperatorDeclarationNode new. - result addToken: (nodes at: 1) to: result operatorTokens. - result infixToken: (nodes at: 2). - result addToken: (nodes at: 3) to: result operatorTokens. - result leftBraceToken: (nodes at: 4). - result precedenceToken: ((nodes at: 5) at: 1). - result integer_literalToken: ((nodes at: 5) at: 2). - result associativityToken: ((nodes at: 5) at: 3). - result leftToken: ((nodes at: 5) at: 4). - result rightToken: ((nodes at: 5) at: 5). - result noneToken: ((nodes at: 5) at: 6). - result rightBraceToken: (nodes at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForinitializer_declaration1: nodes [ - | result | - result := SwiftInitializerDeclarationNode new. - result addTokens: ((nodes at: 1) at: 1) to: result _Tokens. - result addTokens: ((nodes at: 1) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 3) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 4) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 5) to: result leftBracketTokens. - result addTokens: ((nodes at: 1) at: 6) to: result rightBracketTokens. - result addTokens: ((nodes at: 1) at: 7) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 1) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 12) to: result operatorTokens. - result convenienceToken: ((nodes at: 1) at: 13). - result initToken: ((nodes at: 1) at: 14). - result addTokens: ((nodes at: 2) at: 1) to: result lessThanTokens. - result addTokens: ((nodes at: 2) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 2) at: 3) to: result colonTokens. - result addTokens: ((nodes at: 2) at: 4) to: result commaTokens. - result addTokens: ((nodes at: 2) at: 5) to: result greaterThanTokens. - result addTokens: ((nodes at: 2) at: 6) to: result periodTokens. - result addTokens: ((nodes at: 2) at: 7) to: result protocolTokens. - result whereToken: ((nodes at: 2) at: 8). - result addTokens: ((nodes at: 2) at: 9) to: result equalEqualTokens. - result addTokens: ((nodes at: 3) at: 1) to: result leftParenTokens. - result addTokens: ((nodes at: 3) at: 2) to: result rightParenTokens. - result addTokens: ((nodes at: 3) at: 3) to: result inoutTokens. - result addTokens: ((nodes at: 3) at: 4) to: result letTokens. - result addTokens: ((nodes at: 3) at: 5) to: result _Tokens. - result addTokens: ((nodes at: 3) at: 6) to: result identifierTokens. - result addTokens: ((nodes at: 3) at: 7) to: result colonTokens. - result addTokens: ((nodes at: 3) at: 8) to: result leftBracketTokens. - result addTokens: ((nodes at: 3) at: 9) to: result rightBracketTokens. - result - addTokens: ((nodes at: 3) at: 10) - to: result minusGreaterThanTokens. - result addTokens: ((nodes at: 3) at: 11) to: result periodTokens. - result - addTokens: ((nodes at: 3) at: 12) - to: result questionMarkTokens. - result addTokens: ((nodes at: 3) at: 13) to: result bangTokens. - result addTokens: ((nodes at: 3) at: 14) to: result protocolTokens. - result addTokens: ((nodes at: 3) at: 15) to: result lessThanTokens. - result addTokens: ((nodes at: 3) at: 16) to: result greaterThanTokens. - result addTokens: ((nodes at: 3) at: 17) to: result typeTokens. - result addTokens: ((nodes at: 3) at: 18) to: result commaTokens. - result - addTokens: ((nodes at: 3) at: 19) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 3) at: 20) to: result equalTokens. - result addObjects: ((nodes at: 3) at: 21) to: result expressions. - result addTokens: ((nodes at: 3) at: 22) to: result varTokens. - result addTokens: ((nodes at: 3) at: 23) to: result leftBraceTokens. - result addTokens: ((nodes at: 3) at: 24) to: result rightBraceTokens. - result - addTokens: ((nodes at: 3) at: 25) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 3) at: 26) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 3) at: 27) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 3) at: 28) to: result operatorTokens. - result block: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForinitializer_expression1: nodes [ - | result | - result := SwiftInitializerExpressionNode new. - result addTokens: ((nodes at: 1) at: 1) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 2) to: result lessThanTokens. - result addTokens: ((nodes at: 1) at: 3) to: result commaTokens. - result addTokens: ((nodes at: 1) at: 4) to: result greaterThanTokens. - result - addTokens: ((nodes at: 1) at: 5) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 6) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 7) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 8) to: result leftBracketTokens. - result addObjects: ((nodes at: 1) at: 9) to: result expressions. - result - addTokens: ((nodes at: 1) at: 10) - to: result rightBracketTokens. - result addObjects: ((nodes at: 1) at: 11) to: result keyExpressions. - result addTokens: ((nodes at: 1) at: 12) to: result colonTokens. - result addObjects: ((nodes at: 1) at: 13) to: result valueExpressions. - result __FILE__Token: ((nodes at: 1) at: 14). - result __LINE__Token: ((nodes at: 1) at: 15). - result __COLUMN__Token: ((nodes at: 1) at: 16). - result __FUNCTION__Token: ((nodes at: 1) at: 17). - result addTokens: ((nodes at: 1) at: 18) to: result selfTokens. - result addTokens: ((nodes at: 1) at: 19) to: result periodTokens. - result addTokens: ((nodes at: 1) at: 20) to: result initTokens. - result addTokens: ((nodes at: 1) at: 21) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 22) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 23) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 24) to: result inoutTokens. - result addTokens: ((nodes at: 1) at: 25) to: result letTokens. - result addTokens: ((nodes at: 1) at: 26) to: result _Tokens. - result - addTokens: ((nodes at: 1) at: 27) - to: result minusGreaterThanTokens. - result - addTokens: ((nodes at: 1) at: 28) - to: result questionMarkTokens. - result addTokens: ((nodes at: 1) at: 29) to: result bangTokens. - result addTokens: ((nodes at: 1) at: 30) to: result protocolTokens. - result addTokens: ((nodes at: 1) at: 31) to: result typeTokens. - result - addTokens: ((nodes at: 1) at: 32) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 1) at: 33) to: result equalTokens. - result addTokens: ((nodes at: 1) at: 34) to: result varTokens. - result addTokens: ((nodes at: 1) at: 35) to: result rightBraceTokens. - result addTokens: ((nodes at: 1) at: 36) to: result operatorTokens. - result inToken: ((nodes at: 1) at: 37). - result weakToken: ((nodes at: 1) at: 38). - result unownedToken: ((nodes at: 1) at: 39). - result unownedLeftParensafeRightParenToken: ((nodes at: 1) at: 40). - result unownedLeftParenunsafeRightParenToken: ((nodes at: 1) at: 41). - result addNodes: ((nodes at: 1) at: 42) to: result statements. - result addTokens: ((nodes at: 1) at: 43) to: result dynamicTypeTokens. - result addToken: (nodes at: 2) to: result periodTokens. - result addToken: (nodes at: 3) to: result initTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForinitializer_head1: nodes [ - | result | - result := Array new: 14. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - self addAll: ((nodes at: 1) at: 6) to: (result at: 6). - self addAll: ((nodes at: 1) at: 7) to: (result at: 7). - self addAll: ((nodes at: 1) at: 8) to: (result at: 8). - self addAll: ((nodes at: 1) at: 9) to: (result at: 9). - self addAll: ((nodes at: 1) at: 10) to: (result at: 10). - self addAll: ((nodes at: 1) at: 11) to: (result at: 11). - self addAll: ((nodes at: 1) at: 12) to: (result at: 12). - result at: 13 put: (nodes at: 2). - result at: 14 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForis_pattern1: nodes [ - | result | - result := Array new: 25. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForlabeled_statement1: nodes [ - | result | - result := SwiftLabeledStatementNode new. - result name: ((nodes at: 1) at: 1). - result colonToken: ((nodes at: 1) at: 2). - result statement: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForliteral1: nodes [ - | result | - result := Array new: 3. - result at: 1 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForliteral2: nodes [ - | result | - result := Array new: 3. - result at: 2 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForliteral3: nodes [ - | result | - result := Array new: 3. - result at: 3 put: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForliteral_expression1: nodes [ - | result | - result := SwiftLiteralExpressionNode new. - result integer_literalToken: ((nodes at: 1) at: 1). - result floating_point_literalToken: ((nodes at: 1) at: 2). - result full_string_literalToken: ((nodes at: 1) at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForliteral_expression2: nodes [ - | result | - result := SwiftLiteralExpressionNode new. - result leftBracketToken: ((nodes at: 1) at: 1). - result addObjects: ((nodes at: 1) at: 2) to: result expressions. - result addTokens: ((nodes at: 1) at: 3) to: result commaTokens. - result rightBracketToken: ((nodes at: 1) at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForliteral_expression3: nodes [ - | result | - result := SwiftLiteralExpressionNode new. - result leftBracketToken: ((nodes at: 1) at: 1). - result addObjects: ((nodes at: 1) at: 2) to: result keyExpressions. - result addTokens: ((nodes at: 1) at: 3) to: result colonTokens. - result addObjects: ((nodes at: 1) at: 4) to: result valueExpressions. - result addTokens: ((nodes at: 1) at: 5) to: result commaTokens. - result rightBracketToken: ((nodes at: 1) at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForliteral_expression4: nodes [ - | result | - result := SwiftLiteralExpressionNode new. - result __FILE__Token: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForliteral_expression5: nodes [ - | result | - result := SwiftLiteralExpressionNode new. - result __LINE__Token: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForliteral_expression6: nodes [ - | result | - result := SwiftLiteralExpressionNode new. - result __COLUMN__Token: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForliteral_expression7: nodes [ - | result | - result := SwiftLiteralExpressionNode new. - result __FUNCTION__Token: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFormetatype_type1: nodes [ - | result | - result := SwiftMetatypeTypeNode new. - result addToken: (nodes at: 2) to: result periodTokens. - result addToken: (nodes at: 3) to: result typeTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFormetatype_type2: nodes [ - | result | - result := SwiftMetatypeTypeNode new. - result addToken: (nodes at: 2) to: result periodTokens. - result addToken: (nodes at: 3) to: result protocolTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForoptional_chaining_expression1: nodes [ - | result | - result := SwiftOptionalChainingExpressionNode new. - result expression: (nodes at: 1). - result questionMarkToken: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForoptional_type1: nodes [ - | result | - result := SwiftOptionalTypeNode new. - result addToken: (nodes at: 2) to: result questionMarkTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForparameter1: nodes [ - | result | - result := Array new: 28. - result at: 1 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - result at: 2 put: (nodes at: 2). - self add: (nodes at: 3) to: (result at: 3). - self add: ((nodes at: 4) at: 1) to: (result at: 4). - self add: ((nodes at: 4) at: 2) to: (result at: 3). - self add: ((nodes at: 5) at: 1) to: (result at: 4). - self add: ((nodes at: 5) at: 2) to: (result at: 3). - self addAll: ((nodes at: 6) at: 1) to: (result at: 5). - self addAll: ((nodes at: 6) at: 2) to: (result at: 3). - self addAll: ((nodes at: 6) at: 3) to: (result at: 4). - self addAll: ((nodes at: 6) at: 4) to: (result at: 6). - self addAll: ((nodes at: 6) at: 5) to: (result at: 7). - self addAll: ((nodes at: 6) at: 6) to: (result at: 8). - self addAll: ((nodes at: 6) at: 7) to: (result at: 9). - self addAll: ((nodes at: 6) at: 8) to: (result at: 10). - self addAll: ((nodes at: 6) at: 9) to: (result at: 11). - self addAll: ((nodes at: 6) at: 10) to: (result at: 12). - self addAll: ((nodes at: 6) at: 11) to: (result at: 13). - self addAll: ((nodes at: 6) at: 12) to: (result at: 14). - self addAll: ((nodes at: 6) at: 13) to: (result at: 15). - self addAll: ((nodes at: 6) at: 14) to: (result at: 16). - self addAll: ((nodes at: 6) at: 15) to: (result at: 17). - self addAll: ((nodes at: 6) at: 16) to: (result at: 18). - self addAll: ((nodes at: 6) at: 17) to: (result at: 19). - self addAll: ((nodes at: 6) at: 18) to: (result at: 20). - self addAll: ((nodes at: 6) at: 19) to: (result at: 21). - self addAll: ((nodes at: 6) at: 20) to: (result at: 22). - self addAll: ((nodes at: 6) at: 21) to: (result at: 23). - self addAll: ((nodes at: 6) at: 22) to: (result at: 24). - self addAll: ((nodes at: 6) at: 23) to: (result at: 25). - self addAll: ((nodes at: 6) at: 24) to: (result at: 1). - result at: 26 put: ((nodes at: 7) at: 1). - result at: 27 put: ((nodes at: 7) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForparameter2: nodes [ - | result | - result := Array new: 28. - result at: 1 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - result at: 28 put: (nodes at: 2). - self add: (nodes at: 3) to: (result at: 3). - self add: ((nodes at: 4) at: 1) to: (result at: 4). - self add: ((nodes at: 4) at: 2) to: (result at: 3). - self add: ((nodes at: 5) at: 1) to: (result at: 4). - self add: ((nodes at: 5) at: 2) to: (result at: 3). - self addAll: ((nodes at: 6) at: 1) to: (result at: 5). - self addAll: ((nodes at: 6) at: 2) to: (result at: 3). - self addAll: ((nodes at: 6) at: 3) to: (result at: 4). - self addAll: ((nodes at: 6) at: 4) to: (result at: 6). - self addAll: ((nodes at: 6) at: 5) to: (result at: 7). - self addAll: ((nodes at: 6) at: 6) to: (result at: 8). - self addAll: ((nodes at: 6) at: 7) to: (result at: 9). - self addAll: ((nodes at: 6) at: 8) to: (result at: 10). - self addAll: ((nodes at: 6) at: 9) to: (result at: 11). - self addAll: ((nodes at: 6) at: 10) to: (result at: 12). - self addAll: ((nodes at: 6) at: 11) to: (result at: 13). - self addAll: ((nodes at: 6) at: 12) to: (result at: 14). - self addAll: ((nodes at: 6) at: 13) to: (result at: 15). - self addAll: ((nodes at: 6) at: 14) to: (result at: 16). - self addAll: ((nodes at: 6) at: 15) to: (result at: 17). - self addAll: ((nodes at: 6) at: 16) to: (result at: 18). - self addAll: ((nodes at: 6) at: 17) to: (result at: 19). - self addAll: ((nodes at: 6) at: 18) to: (result at: 20). - self addAll: ((nodes at: 6) at: 19) to: (result at: 21). - self addAll: ((nodes at: 6) at: 20) to: (result at: 22). - self addAll: ((nodes at: 6) at: 21) to: (result at: 23). - self addAll: ((nodes at: 6) at: 22) to: (result at: 24). - self addAll: ((nodes at: 6) at: 23) to: (result at: 25). - self addAll: ((nodes at: 6) at: 24) to: (result at: 1). - result at: 26 put: ((nodes at: 7) at: 1). - result at: 27 put: ((nodes at: 7) at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForparameter3: nodes [ - | result | - result := Array new: 28. - result at: 1 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 3). - self addAll: ((nodes at: 1) at: 2) to: (result at: 4). - self addAll: ((nodes at: 1) at: 3) to: (result at: 6). - self addAll: ((nodes at: 1) at: 4) to: (result at: 7). - self addAll: ((nodes at: 1) at: 5) to: (result at: 8). - self addAll: ((nodes at: 1) at: 6) to: (result at: 9). - self addAll: ((nodes at: 1) at: 7) to: (result at: 10). - self addAll: ((nodes at: 1) at: 8) to: (result at: 11). - self addAll: ((nodes at: 1) at: 9) to: (result at: 12). - self addAll: ((nodes at: 1) at: 10) to: (result at: 13). - self addAll: ((nodes at: 1) at: 11) to: (result at: 14). - self addAll: ((nodes at: 1) at: 12) to: (result at: 15). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForparameter_clause1: nodes [ - | result | - result := Array new: 28. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - self add: (nodes at: 2) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForparameter_clause2: nodes [ - | result | - result := Array new: 28. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 3). - self addAll: ((nodes at: 2) at: 2) to: (result at: 4). - self addAll: ((nodes at: 2) at: 3) to: (result at: 5). - self addAll: ((nodes at: 2) at: 4) to: (result at: 6). - self addAll: ((nodes at: 2) at: 5) to: (result at: 7). - self addAll: ((nodes at: 2) at: 6) to: (result at: 1). - self addAll: ((nodes at: 2) at: 7) to: (result at: 2). - self addAll: ((nodes at: 2) at: 8) to: (result at: 8). - self addAll: ((nodes at: 2) at: 9) to: (result at: 9). - self addAll: ((nodes at: 2) at: 10) to: (result at: 10). - self addAll: ((nodes at: 2) at: 11) to: (result at: 11). - self addAll: ((nodes at: 2) at: 12) to: (result at: 12). - self addAll: ((nodes at: 2) at: 13) to: (result at: 13). - self addAll: ((nodes at: 2) at: 14) to: (result at: 14). - self addAll: ((nodes at: 2) at: 15) to: (result at: 15). - self addAll: ((nodes at: 2) at: 16) to: (result at: 16). - self addAll: ((nodes at: 2) at: 17) to: (result at: 17). - self addAll: ((nodes at: 2) at: 18) to: (result at: 18). - self addAll: ((nodes at: 2) at: 19) to: (result at: 19). - self addAll: ((nodes at: 2) at: 20) to: (result at: 20). - self addAll: ((nodes at: 2) at: 21) to: (result at: 21). - self addAll: ((nodes at: 2) at: 22) to: (result at: 22). - self addAll: ((nodes at: 2) at: 23) to: (result at: 23). - self addAll: ((nodes at: 2) at: 24) to: (result at: 24). - self addAll: ((nodes at: 2) at: 25) to: (result at: 25). - self addAll: ((nodes at: 2) at: 26) to: (result at: 26). - self addAll: ((nodes at: 2) at: 27) to: (result at: 27). - self addAll: ((nodes at: 2) at: 28) to: (result at: 28). - self add: (nodes at: 3) to: (result at: 19). - self add: (nodes at: 4) to: (result at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForparameter_clauses1: nodes [ - | result | - result := Array new: 28. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForparameter_clauses2: nodes [ - | result | - result := nodes at: 1. - self addAll: ((nodes at: 2) at: 1) to: (result at: 1). - self addAll: ((nodes at: 2) at: 2) to: (result at: 2). - self addAll: ((nodes at: 2) at: 3) to: (result at: 6). - self addAll: ((nodes at: 2) at: 4) to: (result at: 7). - self addAll: ((nodes at: 2) at: 5) to: (result at: 8). - self addAll: ((nodes at: 2) at: 6) to: (result at: 9). - self addAll: ((nodes at: 2) at: 7) to: (result at: 10). - self addAll: ((nodes at: 2) at: 8) to: (result at: 13). - self addAll: ((nodes at: 2) at: 9) to: (result at: 14). - self addAll: ((nodes at: 2) at: 10) to: (result at: 15). - self addAll: ((nodes at: 2) at: 11) to: (result at: 16). - self addAll: ((nodes at: 2) at: 12) to: (result at: 17). - self addAll: ((nodes at: 2) at: 13) to: (result at: 18). - self addAll: ((nodes at: 2) at: 14) to: (result at: 19). - self addAll: ((nodes at: 2) at: 15) to: (result at: 20). - self addAll: ((nodes at: 2) at: 16) to: (result at: 21). - self addAll: ((nodes at: 2) at: 17) to: (result at: 22). - self addAll: ((nodes at: 2) at: 18) to: (result at: 3). - self addAll: ((nodes at: 2) at: 19) to: (result at: 4). - self addAll: ((nodes at: 2) at: 20) to: (result at: 11). - self addAll: ((nodes at: 2) at: 21) to: (result at: 12). - self addAll: ((nodes at: 2) at: 22) to: (result at: 5). - self addAll: ((nodes at: 2) at: 23) to: (result at: 23). - self addAll: ((nodes at: 2) at: 24) to: (result at: 24). - self addAll: ((nodes at: 2) at: 25) to: (result at: 25). - self addAll: ((nodes at: 2) at: 26) to: (result at: 26). - self addAll: ((nodes at: 2) at: 27) to: (result at: 27). - self addAll: ((nodes at: 2) at: 28) to: (result at: 28). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForparameter_list1: nodes [ - | result | - result := Array new: 28. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self add: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - self addAll: ((nodes at: 1) at: 6) to: (result at: 6). - self addAll: ((nodes at: 1) at: 7) to: (result at: 7). - self addAll: ((nodes at: 1) at: 8) to: (result at: 8). - self addAll: ((nodes at: 1) at: 9) to: (result at: 9). - self addAll: ((nodes at: 1) at: 10) to: (result at: 23). - self addAll: ((nodes at: 1) at: 11) to: (result at: 24). - self addAll: ((nodes at: 1) at: 12) to: (result at: 25). - self addAll: ((nodes at: 1) at: 13) to: (result at: 26). - self addAll: ((nodes at: 1) at: 14) to: (result at: 27). - self addAll: ((nodes at: 1) at: 15) to: (result at: 28). - self addAll: ((nodes at: 1) at: 16) to: (result at: 10). - self addAll: ((nodes at: 1) at: 17) to: (result at: 11). - self addAll: ((nodes at: 1) at: 18) to: (result at: 12). - self addAll: ((nodes at: 1) at: 19) to: (result at: 13). - self addAll: ((nodes at: 1) at: 20) to: (result at: 14). - self addAll: ((nodes at: 1) at: 21) to: (result at: 15). - self addAll: ((nodes at: 1) at: 22) to: (result at: 16). - self addAll: ((nodes at: 1) at: 23) to: (result at: 17). - self addAll: ((nodes at: 1) at: 24) to: (result at: 18). - self addAll: ((nodes at: 1) at: 25) to: (result at: 19). - self add: ((nodes at: 1) at: 26) to: (result at: 20). - self add: ((nodes at: 1) at: 27) to: (result at: 21). - self add: ((nodes at: 1) at: 28) to: (result at: 22). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForparameter_list2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 18). - self addAll: ((nodes at: 3) at: 1) to: (result at: 1). - self add: ((nodes at: 3) at: 2) to: (result at: 2). - self addAll: ((nodes at: 3) at: 3) to: (result at: 3). - self addAll: ((nodes at: 3) at: 4) to: (result at: 4). - self addAll: ((nodes at: 3) at: 5) to: (result at: 5). - self addAll: ((nodes at: 3) at: 6) to: (result at: 6). - self addAll: ((nodes at: 3) at: 7) to: (result at: 7). - self addAll: ((nodes at: 3) at: 8) to: (result at: 8). - self addAll: ((nodes at: 3) at: 9) to: (result at: 9). - self addAll: ((nodes at: 3) at: 10) to: (result at: 23). - self addAll: ((nodes at: 3) at: 11) to: (result at: 24). - self addAll: ((nodes at: 3) at: 12) to: (result at: 25). - self addAll: ((nodes at: 3) at: 13) to: (result at: 26). - self addAll: ((nodes at: 3) at: 14) to: (result at: 27). - self addAll: ((nodes at: 3) at: 15) to: (result at: 28). - self addAll: ((nodes at: 3) at: 16) to: (result at: 10). - self addAll: ((nodes at: 3) at: 17) to: (result at: 11). - self addAll: ((nodes at: 3) at: 18) to: (result at: 12). - self addAll: ((nodes at: 3) at: 19) to: (result at: 13). - self addAll: ((nodes at: 3) at: 20) to: (result at: 14). - self addAll: ((nodes at: 3) at: 21) to: (result at: 15). - self addAll: ((nodes at: 3) at: 22) to: (result at: 16). - self addAll: ((nodes at: 3) at: 23) to: (result at: 17). - self addAll: ((nodes at: 3) at: 24) to: (result at: 18). - self addAll: ((nodes at: 3) at: 25) to: (result at: 19). - self add: ((nodes at: 3) at: 26) to: (result at: 20). - self add: ((nodes at: 3) at: 27) to: (result at: 21). - self add: ((nodes at: 3) at: 28) to: (result at: 22). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForparenthesized_expression1: nodes [ - | result | - result := SwiftParenthesizedExpressionNode new. - result leftParenToken: (nodes at: 1). - result addObjects: ((nodes at: 2) at: 1) to: result expressions. - result addTokens: ((nodes at: 2) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 2) at: 3) to: result colonTokens. - result addTokens: ((nodes at: 2) at: 4) to: result commaTokens. - result rightParenToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForpattern1: nodes [ - | result | - result := Array new: 29. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 1). - self addAll: ((nodes at: 2) at: 3) to: (result at: 3). - self addAll: ((nodes at: 2) at: 4) to: (result at: 4). - self addAll: ((nodes at: 2) at: 5) to: (result at: 5). - self addAll: ((nodes at: 2) at: 6) to: (result at: 6). - self addAll: ((nodes at: 2) at: 7) to: (result at: 7). - self addAll: ((nodes at: 2) at: 8) to: (result at: 8). - self addAll: ((nodes at: 2) at: 9) to: (result at: 9). - self addAll: ((nodes at: 2) at: 10) to: (result at: 10). - self addAll: ((nodes at: 2) at: 11) to: (result at: 11). - self addAll: ((nodes at: 2) at: 12) to: (result at: 12). - self addAll: ((nodes at: 2) at: 13) to: (result at: 13). - self addAll: ((nodes at: 2) at: 14) to: (result at: 14). - self addAll: ((nodes at: 2) at: 15) to: (result at: 15). - self addAll: ((nodes at: 2) at: 16) to: (result at: 16). - self addAll: ((nodes at: 2) at: 17) to: (result at: 17). - self addAll: ((nodes at: 2) at: 18) to: (result at: 18). - self addAll: ((nodes at: 2) at: 19) to: (result at: 19). - self addAll: ((nodes at: 2) at: 20) to: (result at: 20). - self addAll: ((nodes at: 2) at: 21) to: (result at: 21). - self addAll: ((nodes at: 2) at: 22) to: (result at: 22). - self addAll: ((nodes at: 2) at: 23) to: (result at: 23). - self addAll: ((nodes at: 2) at: 24) to: (result at: 24). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForpattern2: nodes [ - | result | - result := Array new: 29. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 3). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 1). - self addAll: ((nodes at: 2) at: 3) to: (result at: 3). - self addAll: ((nodes at: 2) at: 4) to: (result at: 4). - self addAll: ((nodes at: 2) at: 5) to: (result at: 5). - self addAll: ((nodes at: 2) at: 6) to: (result at: 6). - self addAll: ((nodes at: 2) at: 7) to: (result at: 7). - self addAll: ((nodes at: 2) at: 8) to: (result at: 8). - self addAll: ((nodes at: 2) at: 9) to: (result at: 9). - self addAll: ((nodes at: 2) at: 10) to: (result at: 10). - self addAll: ((nodes at: 2) at: 11) to: (result at: 11). - self addAll: ((nodes at: 2) at: 12) to: (result at: 12). - self addAll: ((nodes at: 2) at: 13) to: (result at: 13). - self addAll: ((nodes at: 2) at: 14) to: (result at: 14). - self addAll: ((nodes at: 2) at: 15) to: (result at: 15). - self addAll: ((nodes at: 2) at: 16) to: (result at: 16). - self addAll: ((nodes at: 2) at: 17) to: (result at: 17). - self addAll: ((nodes at: 2) at: 18) to: (result at: 18). - self addAll: ((nodes at: 2) at: 19) to: (result at: 19). - self addAll: ((nodes at: 2) at: 20) to: (result at: 20). - self addAll: ((nodes at: 2) at: 21) to: (result at: 21). - self addAll: ((nodes at: 2) at: 22) to: (result at: 22). - self addAll: ((nodes at: 2) at: 23) to: (result at: 23). - self addAll: ((nodes at: 2) at: 24) to: (result at: 24). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForpattern3: nodes [ - | result | - result := Array new: 29. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 25). - self addAll: ((nodes at: 1) at: 2) to: (result at: 1). - self addAll: ((nodes at: 1) at: 3) to: (result at: 2). - self addAll: ((nodes at: 1) at: 4) to: (result at: 3). - self addAll: ((nodes at: 1) at: 5) to: (result at: 4). - self addAll: ((nodes at: 1) at: 6) to: (result at: 5). - self addAll: ((nodes at: 1) at: 7) to: (result at: 6). - self addAll: ((nodes at: 1) at: 8) to: (result at: 7). - self addAll: ((nodes at: 1) at: 9) to: (result at: 8). - self addAll: ((nodes at: 1) at: 10) to: (result at: 9). - self addAll: ((nodes at: 1) at: 11) to: (result at: 10). - self addAll: ((nodes at: 1) at: 12) to: (result at: 11). - self addAll: ((nodes at: 1) at: 13) to: (result at: 12). - self addAll: ((nodes at: 1) at: 14) to: (result at: 13). - self addAll: ((nodes at: 1) at: 15) to: (result at: 14). - self addAll: ((nodes at: 1) at: 16) to: (result at: 15). - self addAll: ((nodes at: 1) at: 17) to: (result at: 16). - self addAll: ((nodes at: 1) at: 18) to: (result at: 17). - self addAll: ((nodes at: 1) at: 19) to: (result at: 18). - self addAll: ((nodes at: 1) at: 20) to: (result at: 19). - self addAll: ((nodes at: 1) at: 21) to: (result at: 20). - self addAll: ((nodes at: 1) at: 22) to: (result at: 21). - self addAll: ((nodes at: 1) at: 23) to: (result at: 22). - self addAll: ((nodes at: 1) at: 24) to: (result at: 23). - self addAll: ((nodes at: 1) at: 25) to: (result at: 24). - self addAll: ((nodes at: 1) at: 26) to: (result at: 26). - self addAll: ((nodes at: 1) at: 27) to: (result at: 27). - self addAll: ((nodes at: 1) at: 28) to: (result at: 28). - self addAll: ((nodes at: 1) at: 29) to: (result at: 29). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForpattern4: nodes [ - | result | - result := Array new: 29. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 4). - self addAll: ((nodes at: 1) at: 2) to: (result at: 1). - self addAll: ((nodes at: 1) at: 3) to: (result at: 2). - self addAll: ((nodes at: 1) at: 4) to: (result at: 3). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - self addAll: ((nodes at: 1) at: 6) to: (result at: 6). - self addAll: ((nodes at: 1) at: 7) to: (result at: 7). - self addAll: ((nodes at: 1) at: 8) to: (result at: 14). - self addAll: ((nodes at: 1) at: 9) to: (result at: 15). - self addAll: ((nodes at: 1) at: 10) to: (result at: 16). - self addAll: ((nodes at: 1) at: 11) to: (result at: 17). - self addAll: ((nodes at: 1) at: 12) to: (result at: 18). - self addAll: ((nodes at: 1) at: 13) to: (result at: 19). - self addAll: ((nodes at: 1) at: 14) to: (result at: 20). - self addAll: ((nodes at: 1) at: 15) to: (result at: 21). - self addAll: ((nodes at: 1) at: 16) to: (result at: 22). - self addAll: ((nodes at: 1) at: 17) to: (result at: 24). - self addAll: ((nodes at: 1) at: 18) to: (result at: 23). - self addAll: ((nodes at: 1) at: 19) to: (result at: 25). - self addAll: ((nodes at: 1) at: 20) to: (result at: 26). - self addAll: ((nodes at: 1) at: 21) to: (result at: 27). - self addAll: ((nodes at: 1) at: 22) to: (result at: 28). - self addAll: ((nodes at: 1) at: 23) to: (result at: 29). - self addAll: ((nodes at: 1) at: 24) to: (result at: 8). - self addAll: ((nodes at: 1) at: 25) to: (result at: 9). - self addAll: ((nodes at: 1) at: 26) to: (result at: 10). - self addAll: ((nodes at: 1) at: 27) to: (result at: 11). - self addAll: ((nodes at: 1) at: 28) to: (result at: 12). - self addAll: ((nodes at: 1) at: 29) to: (result at: 13). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 1). - self addAll: ((nodes at: 2) at: 3) to: (result at: 3). - self addAll: ((nodes at: 2) at: 4) to: (result at: 4). - self addAll: ((nodes at: 2) at: 5) to: (result at: 5). - self addAll: ((nodes at: 2) at: 6) to: (result at: 6). - self addAll: ((nodes at: 2) at: 7) to: (result at: 7). - self addAll: ((nodes at: 2) at: 8) to: (result at: 8). - self addAll: ((nodes at: 2) at: 9) to: (result at: 9). - self addAll: ((nodes at: 2) at: 10) to: (result at: 10). - self addAll: ((nodes at: 2) at: 11) to: (result at: 11). - self addAll: ((nodes at: 2) at: 12) to: (result at: 12). - self addAll: ((nodes at: 2) at: 13) to: (result at: 13). - self addAll: ((nodes at: 2) at: 14) to: (result at: 14). - self addAll: ((nodes at: 2) at: 15) to: (result at: 15). - self addAll: ((nodes at: 2) at: 16) to: (result at: 16). - self addAll: ((nodes at: 2) at: 17) to: (result at: 17). - self addAll: ((nodes at: 2) at: 18) to: (result at: 18). - self addAll: ((nodes at: 2) at: 19) to: (result at: 19). - self addAll: ((nodes at: 2) at: 20) to: (result at: 20). - self addAll: ((nodes at: 2) at: 21) to: (result at: 21). - self addAll: ((nodes at: 2) at: 22) to: (result at: 22). - self addAll: ((nodes at: 2) at: 23) to: (result at: 23). - self addAll: ((nodes at: 2) at: 24) to: (result at: 24). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForpattern5: nodes [ - | result | - result := Array new: 29. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 3). - self addAll: ((nodes at: 1) at: 2) to: (result at: 19). - self addAll: ((nodes at: 1) at: 3) to: (result at: 22). - self addAll: ((nodes at: 1) at: 4) to: (result at: 20). - self addAll: ((nodes at: 1) at: 5) to: (result at: 15). - self addAll: ((nodes at: 1) at: 6) to: (result at: 4). - self addAll: ((nodes at: 1) at: 7) to: (result at: 1). - self addAll: ((nodes at: 1) at: 8) to: (result at: 2). - self addAll: ((nodes at: 1) at: 9) to: (result at: 5). - self addAll: ((nodes at: 1) at: 10) to: (result at: 6). - self addAll: ((nodes at: 1) at: 11) to: (result at: 7). - self addAll: ((nodes at: 1) at: 12) to: (result at: 14). - self addAll: ((nodes at: 1) at: 13) to: (result at: 16). - self addAll: ((nodes at: 1) at: 14) to: (result at: 17). - self addAll: ((nodes at: 1) at: 15) to: (result at: 18). - self addAll: ((nodes at: 1) at: 16) to: (result at: 21). - self addAll: ((nodes at: 1) at: 17) to: (result at: 24). - self addAll: ((nodes at: 1) at: 18) to: (result at: 23). - self addAll: ((nodes at: 1) at: 19) to: (result at: 25). - self addAll: ((nodes at: 1) at: 20) to: (result at: 26). - self addAll: ((nodes at: 1) at: 21) to: (result at: 27). - self addAll: ((nodes at: 1) at: 22) to: (result at: 28). - self addAll: ((nodes at: 1) at: 23) to: (result at: 29). - self addAll: ((nodes at: 1) at: 24) to: (result at: 8). - self addAll: ((nodes at: 1) at: 25) to: (result at: 9). - self addAll: ((nodes at: 1) at: 26) to: (result at: 10). - self addAll: ((nodes at: 1) at: 27) to: (result at: 11). - self addAll: ((nodes at: 1) at: 28) to: (result at: 12). - self addAll: ((nodes at: 1) at: 29) to: (result at: 13). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForpattern6: nodes [ - | result | - result := Array new: 29. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 28). - self addAll: ((nodes at: 1) at: 2) to: (result at: 6). - self addAll: ((nodes at: 1) at: 3) to: (result at: 7). - self addAll: ((nodes at: 1) at: 4) to: (result at: 2). - self addAll: ((nodes at: 1) at: 5) to: (result at: 14). - self addAll: ((nodes at: 1) at: 6) to: (result at: 15). - self addAll: ((nodes at: 1) at: 7) to: (result at: 4). - self addAll: ((nodes at: 1) at: 8) to: (result at: 5). - self addAll: ((nodes at: 1) at: 9) to: (result at: 16). - self addAll: ((nodes at: 1) at: 10) to: (result at: 17). - self addAll: ((nodes at: 1) at: 11) to: (result at: 18). - self addAll: ((nodes at: 1) at: 12) to: (result at: 19). - self addAll: ((nodes at: 1) at: 13) to: (result at: 20). - self addAll: ((nodes at: 1) at: 14) to: (result at: 21). - self addAll: ((nodes at: 1) at: 15) to: (result at: 3). - self addAll: ((nodes at: 1) at: 16) to: (result at: 22). - self addAll: ((nodes at: 1) at: 17) to: (result at: 23). - self addAll: ((nodes at: 1) at: 18) to: (result at: 1). - self addAll: ((nodes at: 1) at: 19) to: (result at: 24). - self addAll: ((nodes at: 1) at: 20) to: (result at: 8). - self addAll: ((nodes at: 1) at: 21) to: (result at: 9). - self addAll: ((nodes at: 1) at: 22) to: (result at: 10). - self addAll: ((nodes at: 1) at: 23) to: (result at: 11). - self addAll: ((nodes at: 1) at: 24) to: (result at: 12). - self addAll: ((nodes at: 1) at: 25) to: (result at: 13). - self addAll: ((nodes at: 1) at: 26) to: (result at: 25). - self addAll: ((nodes at: 1) at: 27) to: (result at: 26). - self addAll: ((nodes at: 1) at: 28) to: (result at: 27). - self addAll: ((nodes at: 1) at: 29) to: (result at: 29). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForpattern7: nodes [ - | result | - result := Array new: 29. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 27). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForpattern_initializer1: nodes [ - | result | - result := SwiftPatternInitializerNode new. - result addTokens: ((nodes at: 1) at: 1) to: result _Tokens. - result addTokens: ((nodes at: 1) at: 2) to: result colonTokens. - result addTokens: ((nodes at: 1) at: 3) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 4) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 5) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 6) to: result leftBracketTokens. - result addTokens: ((nodes at: 1) at: 7) to: result rightBracketTokens. - result addTokens: ((nodes at: 1) at: 8) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 9) to: result rightBraceTokens. - result - addTokens: ((nodes at: 1) at: 10) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 11) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 12) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 13) to: result operatorTokens. - result - addTokens: ((nodes at: 1) at: 14) - to: result minusGreaterThanTokens. - result addTokens: ((nodes at: 1) at: 15) to: result periodTokens. - result - addTokens: ((nodes at: 1) at: 16) - to: result questionMarkTokens. - result addTokens: ((nodes at: 1) at: 17) to: result bangTokens. - result addTokens: ((nodes at: 1) at: 18) to: result protocolTokens. - result addTokens: ((nodes at: 1) at: 19) to: result lessThanTokens. - result addTokens: ((nodes at: 1) at: 20) to: result greaterThanTokens. - result addTokens: ((nodes at: 1) at: 21) to: result typeTokens. - result addTokens: ((nodes at: 1) at: 22) to: result commaTokens. - result - addTokens: ((nodes at: 1) at: 23) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 1) at: 24) to: result inoutTokens. - result addTokens: ((nodes at: 1) at: 25) to: result varTokens. - result addTokens: ((nodes at: 1) at: 26) to: result letTokens. - result addObjects: ((nodes at: 1) at: 27) to: result expressions. - result addTokens: ((nodes at: 1) at: 28) to: result isTokens. - result addTokens: ((nodes at: 1) at: 29) to: result asTokens. - result equalToken: ((nodes at: 2) at: 1). - result addObject: ((nodes at: 2) at: 2) to: result expressions. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForpostfix_expression1: nodes [ - | result | - result := Array new: 43. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - result at: 30 put: (OrderedCollection new: 2). - result at: 31 put: (OrderedCollection new: 2). - result at: 32 put: (OrderedCollection new: 2). - result at: 33 put: (OrderedCollection new: 2). - result at: 34 put: (OrderedCollection new: 2). - result at: 35 put: (OrderedCollection new: 2). - result at: 36 put: (OrderedCollection new: 2). - result at: 42 put: (OrderedCollection new: 2). - result at: 43 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForpostfix_expression2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 36). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForpostfix_operator_declaration1: nodes [ - | result | - result := SwiftPostfixOperatorDeclarationNode new. - result addToken: (nodes at: 1) to: result operatorTokens. - result postfixToken: (nodes at: 2). - result addToken: (nodes at: 3) to: result operatorTokens. - result leftBraceToken: (nodes at: 4). - result rightBraceToken: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForpostfix_self_expression1: nodes [ - | result | - result := SwiftPostfixSelfExpressionNode new. - result addTokens: ((nodes at: 1) at: 1) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 2) to: result lessThanTokens. - result addTokens: ((nodes at: 1) at: 3) to: result commaTokens. - result addTokens: ((nodes at: 1) at: 4) to: result greaterThanTokens. - result - addTokens: ((nodes at: 1) at: 5) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 6) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 7) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 8) to: result leftBracketTokens. - result addObjects: ((nodes at: 1) at: 9) to: result expressions. - result - addTokens: ((nodes at: 1) at: 10) - to: result rightBracketTokens. - result addObjects: ((nodes at: 1) at: 11) to: result keyExpressions. - result addTokens: ((nodes at: 1) at: 12) to: result colonTokens. - result addObjects: ((nodes at: 1) at: 13) to: result valueExpressions. - result __FILE__Token: ((nodes at: 1) at: 14). - result __LINE__Token: ((nodes at: 1) at: 15). - result __COLUMN__Token: ((nodes at: 1) at: 16). - result __FUNCTION__Token: ((nodes at: 1) at: 17). - result addTokens: ((nodes at: 1) at: 18) to: result selfTokens. - result addTokens: ((nodes at: 1) at: 19) to: result periodTokens. - result addTokens: ((nodes at: 1) at: 20) to: result initTokens. - result addTokens: ((nodes at: 1) at: 21) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 22) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 23) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 24) to: result inoutTokens. - result addTokens: ((nodes at: 1) at: 25) to: result letTokens. - result addTokens: ((nodes at: 1) at: 26) to: result _Tokens. - result - addTokens: ((nodes at: 1) at: 27) - to: result minusGreaterThanTokens. - result - addTokens: ((nodes at: 1) at: 28) - to: result questionMarkTokens. - result addTokens: ((nodes at: 1) at: 29) to: result bangTokens. - result addTokens: ((nodes at: 1) at: 30) to: result protocolTokens. - result addTokens: ((nodes at: 1) at: 31) to: result typeTokens. - result - addTokens: ((nodes at: 1) at: 32) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 1) at: 33) to: result equalTokens. - result addTokens: ((nodes at: 1) at: 34) to: result varTokens. - result addTokens: ((nodes at: 1) at: 35) to: result rightBraceTokens. - result addTokens: ((nodes at: 1) at: 36) to: result operatorTokens. - result inToken: ((nodes at: 1) at: 37). - result weakToken: ((nodes at: 1) at: 38). - result unownedToken: ((nodes at: 1) at: 39). - result unownedLeftParensafeRightParenToken: ((nodes at: 1) at: 40). - result unownedLeftParenunsafeRightParenToken: ((nodes at: 1) at: 41). - result addNodes: ((nodes at: 1) at: 42) to: result statements. - result addTokens: ((nodes at: 1) at: 43) to: result dynamicTypeTokens. - result addToken: (nodes at: 2) to: result periodTokens. - result addToken: (nodes at: 3) to: result selfTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForprefix_expression2: nodes [ - | result | - result := SwiftPrefixExpressionNode new. - result addToken: (nodes at: 1) to: result operatorTokens. - result addTokens: ((nodes at: 2) at: 1) to: result identifierTokens. - result addTokens: ((nodes at: 2) at: 2) to: result lessThanTokens. - result addTokens: ((nodes at: 2) at: 3) to: result commaTokens. - result addTokens: ((nodes at: 2) at: 4) to: result greaterThanTokens. - result - addTokens: ((nodes at: 2) at: 5) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 2) at: 6) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 2) at: 7) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 2) at: 8) to: result leftBracketTokens. - result addObjects: ((nodes at: 2) at: 9) to: result expressions. - result - addTokens: ((nodes at: 2) at: 10) - to: result rightBracketTokens. - result addObjects: ((nodes at: 2) at: 11) to: result keyExpressions. - result addTokens: ((nodes at: 2) at: 12) to: result colonTokens. - result addObjects: ((nodes at: 2) at: 13) to: result valueExpressions. - result __FILE__Token: ((nodes at: 2) at: 14). - result __LINE__Token: ((nodes at: 2) at: 15). - result __COLUMN__Token: ((nodes at: 2) at: 16). - result __FUNCTION__Token: ((nodes at: 2) at: 17). - result addTokens: ((nodes at: 2) at: 18) to: result selfTokens. - result addTokens: ((nodes at: 2) at: 19) to: result periodTokens. - result addTokens: ((nodes at: 2) at: 20) to: result initTokens. - result addTokens: ((nodes at: 2) at: 21) to: result leftBraceTokens. - result addTokens: ((nodes at: 2) at: 22) to: result leftParenTokens. - result addTokens: ((nodes at: 2) at: 23) to: result rightParenTokens. - result addTokens: ((nodes at: 2) at: 24) to: result inoutTokens. - result addTokens: ((nodes at: 2) at: 25) to: result letTokens. - result addTokens: ((nodes at: 2) at: 26) to: result _Tokens. - result - addTokens: ((nodes at: 2) at: 27) - to: result minusGreaterThanTokens. - result - addTokens: ((nodes at: 2) at: 28) - to: result questionMarkTokens. - result addTokens: ((nodes at: 2) at: 29) to: result bangTokens. - result addTokens: ((nodes at: 2) at: 30) to: result protocolTokens. - result addTokens: ((nodes at: 2) at: 31) to: result typeTokens. - result - addTokens: ((nodes at: 2) at: 32) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 2) at: 33) to: result equalTokens. - result addTokens: ((nodes at: 2) at: 34) to: result varTokens. - result addTokens: ((nodes at: 2) at: 35) to: result rightBraceTokens. - result addTokens: ((nodes at: 2) at: 36) to: result operatorTokens. - result inToken: ((nodes at: 2) at: 37). - result weakToken: ((nodes at: 2) at: 38). - result unownedToken: ((nodes at: 2) at: 39). - result unownedLeftParensafeRightParenToken: ((nodes at: 2) at: 40). - result unownedLeftParenunsafeRightParenToken: ((nodes at: 2) at: 41). - result addNodes: ((nodes at: 2) at: 42) to: result statements. - result addTokens: ((nodes at: 2) at: 43) to: result dynamicTypeTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForprefix_operator_declaration1: nodes [ - | result | - result := SwiftPrefixOperatorDeclarationNode new. - result addToken: (nodes at: 1) to: result operatorTokens. - result prefixToken: (nodes at: 2). - result addToken: (nodes at: 3) to: result operatorTokens. - result leftBraceToken: (nodes at: 4). - result rightBraceToken: (nodes at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForprimary_expression1: nodes [ - | result | - result := SwiftPrimaryExpressionNode new. - result identifierToken: (nodes at: 1). - result lessThanToken: ((nodes at: 2) at: 1). - result addTokens: ((nodes at: 2) at: 2) to: result commaTokens. - result greaterThanToken: ((nodes at: 2) at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForprotocol_association_type_declaration1: nodes [ - | result | - result := SwiftProtocolAssociationTypeDeclarationNode new. - result typealiasToken: ((nodes at: 1) at: 1). - result addToken: ((nodes at: 1) at: 2) to: result identifierTokens. - result addToken: ((nodes at: 2) at: 1) to: result colonTokens. - result addTokens: ((nodes at: 2) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 2) at: 3) to: result lessThanTokens. - result addTokens: ((nodes at: 2) at: 4) to: result greaterThanTokens. - result addTokens: ((nodes at: 2) at: 5) to: result periodTokens. - result addTokens: ((nodes at: 2) at: 6) to: result commaTokens. - result equalToken: ((nodes at: 3) at: 1). - result addTokens: ((nodes at: 3) at: 2) to: result leftBracketTokens. - result addTokens: ((nodes at: 3) at: 3) to: result rightBracketTokens. - result addTokens: ((nodes at: 3) at: 4) to: result colonTokens. - result - addTokens: ((nodes at: 3) at: 5) - to: result minusGreaterThanTokens. - result addTokens: ((nodes at: 3) at: 6) to: result periodTokens. - result addTokens: ((nodes at: 3) at: 7) to: result leftParenTokens. - result addTokens: ((nodes at: 3) at: 8) to: result rightParenTokens. - result addTokens: ((nodes at: 3) at: 9) to: result questionMarkTokens. - result addTokens: ((nodes at: 3) at: 10) to: result bangTokens. - result addTokens: ((nodes at: 3) at: 11) to: result protocolTokens. - result addTokens: ((nodes at: 3) at: 12) to: result lessThanTokens. - result addTokens: ((nodes at: 3) at: 13) to: result greaterThanTokens. - result addTokens: ((nodes at: 3) at: 14) to: result typeTokens. - result addTokens: ((nodes at: 3) at: 15) to: result identifierTokens. - result addTokens: ((nodes at: 3) at: 16) to: result commaTokens. - result - addTokens: ((nodes at: 3) at: 17) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 3) at: 18) to: result _Tokens. - result addTokens: ((nodes at: 3) at: 19) to: result inoutTokens. - result addTokens: ((nodes at: 3) at: 20) to: result leftBraceTokens. - result addTokens: ((nodes at: 3) at: 21) to: result rightBraceTokens. - result - addTokens: ((nodes at: 3) at: 22) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 3) at: 23) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 3) at: 24) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 3) at: 25) to: result operatorTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForprotocol_composition_type1: nodes [ - | result | - result := SwiftProtocolCompositionTypeNode new. - result protocolToken: (nodes at: 1). - result addToken: (nodes at: 2) to: result lessThanTokens. - result addTokens: ((nodes at: 3) at: 1) to: result identifierTokens. - result addTokens: ((nodes at: 3) at: 2) to: result lessThanTokens. - result addTokens: ((nodes at: 3) at: 3) to: result greaterThanTokens. - result addTokens: ((nodes at: 3) at: 4) to: result periodTokens. - result addTokens: ((nodes at: 3) at: 5) to: result commaTokens. - result addToken: (nodes at: 4) to: result greaterThanTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForprotocol_declaration1: nodes [ - | result | - result := SwiftProtocolDeclarationNode new. - result addTokens: ((nodes at: 1) at: 1) to: result _Tokens. - result addTokens: ((nodes at: 1) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 3) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 4) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 5) to: result leftBracketTokens. - result addTokens: ((nodes at: 1) at: 6) to: result rightBracketTokens. - result addTokens: ((nodes at: 1) at: 7) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 1) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 12) to: result operatorTokens. - result protocolToken: (nodes at: 2). - result addToken: (nodes at: 3) to: result identifierTokens. - result colonToken: ((nodes at: 4) at: 1). - result addTokens: ((nodes at: 4) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 4) at: 3) to: result lessThanTokens. - result addTokens: ((nodes at: 4) at: 4) to: result greaterThanTokens. - result addTokens: ((nodes at: 4) at: 5) to: result periodTokens. - result addTokens: ((nodes at: 4) at: 6) to: result commaTokens. - result addToken: ((nodes at: 5) at: 1) to: result leftBraceTokens. - result addNodes: ((nodes at: 5) at: 2) to: result declarations. - result addToken: ((nodes at: 5) at: 3) to: result rightBraceTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForprotocol_initializer_declaration1: nodes [ - | result | - result := SwiftProtocolInitializerDeclarationNode new. - result addTokens: ((nodes at: 1) at: 1) to: result _Tokens. - result addTokens: ((nodes at: 1) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 3) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 4) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 5) to: result leftBracketTokens. - result addTokens: ((nodes at: 1) at: 6) to: result rightBracketTokens. - result addTokens: ((nodes at: 1) at: 7) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 1) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 12) to: result operatorTokens. - result convenienceToken: ((nodes at: 1) at: 13). - result initToken: ((nodes at: 1) at: 14). - result addTokens: ((nodes at: 2) at: 1) to: result lessThanTokens. - result addTokens: ((nodes at: 2) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 2) at: 3) to: result colonTokens. - result addTokens: ((nodes at: 2) at: 4) to: result commaTokens. - result addTokens: ((nodes at: 2) at: 5) to: result greaterThanTokens. - result addTokens: ((nodes at: 2) at: 6) to: result periodTokens. - result addTokens: ((nodes at: 2) at: 7) to: result protocolTokens. - result whereToken: ((nodes at: 2) at: 8). - result addTokens: ((nodes at: 2) at: 9) to: result equalEqualTokens. - result addTokens: ((nodes at: 3) at: 1) to: result leftParenTokens. - result addTokens: ((nodes at: 3) at: 2) to: result rightParenTokens. - result addTokens: ((nodes at: 3) at: 3) to: result inoutTokens. - result addTokens: ((nodes at: 3) at: 4) to: result letTokens. - result addTokens: ((nodes at: 3) at: 5) to: result _Tokens. - result addTokens: ((nodes at: 3) at: 6) to: result identifierTokens. - result addTokens: ((nodes at: 3) at: 7) to: result colonTokens. - result addTokens: ((nodes at: 3) at: 8) to: result leftBracketTokens. - result addTokens: ((nodes at: 3) at: 9) to: result rightBracketTokens. - result - addTokens: ((nodes at: 3) at: 10) - to: result minusGreaterThanTokens. - result addTokens: ((nodes at: 3) at: 11) to: result periodTokens. - result - addTokens: ((nodes at: 3) at: 12) - to: result questionMarkTokens. - result addTokens: ((nodes at: 3) at: 13) to: result bangTokens. - result addTokens: ((nodes at: 3) at: 14) to: result protocolTokens. - result addTokens: ((nodes at: 3) at: 15) to: result lessThanTokens. - result addTokens: ((nodes at: 3) at: 16) to: result greaterThanTokens. - result addTokens: ((nodes at: 3) at: 17) to: result typeTokens. - result addTokens: ((nodes at: 3) at: 18) to: result commaTokens. - result - addTokens: ((nodes at: 3) at: 19) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 3) at: 20) to: result equalTokens. - result addObjects: ((nodes at: 3) at: 21) to: result expressions. - result addTokens: ((nodes at: 3) at: 22) to: result varTokens. - result addTokens: ((nodes at: 3) at: 23) to: result leftBraceTokens. - result addTokens: ((nodes at: 3) at: 24) to: result rightBraceTokens. - result - addTokens: ((nodes at: 3) at: 25) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 3) at: 26) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 3) at: 27) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 3) at: 28) to: result operatorTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForprotocol_method_declaration1: nodes [ - | result | - result := SwiftProtocolMethodDeclarationNode new. - result addTokens: ((nodes at: 1) at: 1) to: result _Tokens. - result addTokens: ((nodes at: 1) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 3) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 4) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 5) to: result leftBracketTokens. - result addTokens: ((nodes at: 1) at: 6) to: result rightBracketTokens. - result addTokens: ((nodes at: 1) at: 7) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 1) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 12) to: result operatorTokens. - result addTokens: ((nodes at: 1) at: 13) to: result classTokens. - result addTokens: ((nodes at: 1) at: 14) to: result mutatingTokens. - result addTokens: ((nodes at: 1) at: 15) to: result nonmutatingTokens. - result addTokens: ((nodes at: 1) at: 16) to: result overrideTokens. - result addTokens: ((nodes at: 1) at: 17) to: result staticTokens. - result addTokens: ((nodes at: 1) at: 18) to: result unownedTokens. - result - addTokens: ((nodes at: 1) at: 19) - to: result unownedLeftParensafeRightParenTokens. - result - addTokens: ((nodes at: 1) at: 20) - to: result unownedLeftParenunsafeRightParenTokens. - result addTokens: ((nodes at: 1) at: 21) to: result weakTokens. - result funcToken: ((nodes at: 1) at: 22). - result addToken: ((nodes at: 2) at: 1) to: result identifierTokens. - result addToken: ((nodes at: 2) at: 2) to: result operatorTokens. - result addTokens: ((nodes at: 3) at: 1) to: result lessThanTokens. - result addTokens: ((nodes at: 3) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 3) at: 3) to: result colonTokens. - result addTokens: ((nodes at: 3) at: 4) to: result commaTokens. - result addTokens: ((nodes at: 3) at: 5) to: result greaterThanTokens. - result addTokens: ((nodes at: 3) at: 6) to: result periodTokens. - result addTokens: ((nodes at: 3) at: 7) to: result protocolTokens. - result whereToken: ((nodes at: 3) at: 8). - result addTokens: ((nodes at: 3) at: 9) to: result equalEqualTokens. - result addTokens: ((nodes at: 4) at: 1) to: result leftParenTokens. - result addTokens: ((nodes at: 4) at: 2) to: result rightParenTokens. - result addTokens: ((nodes at: 4) at: 3) to: result commaTokens. - result - addTokens: ((nodes at: 4) at: 4) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 4) at: 5) to: result varTokens. - result addTokens: ((nodes at: 4) at: 6) to: result inoutTokens. - result addTokens: ((nodes at: 4) at: 7) to: result letTokens. - result addTokens: ((nodes at: 4) at: 8) to: result _Tokens. - result addTokens: ((nodes at: 4) at: 9) to: result identifierTokens. - result addTokens: ((nodes at: 4) at: 10) to: result colonTokens. - result addTokens: ((nodes at: 4) at: 11) to: result equalTokens. - result addObjects: ((nodes at: 4) at: 12) to: result expressions. - result addTokens: ((nodes at: 4) at: 13) to: result leftBracketTokens. - result - addTokens: ((nodes at: 4) at: 14) - to: result rightBracketTokens. - result - addTokens: ((nodes at: 4) at: 15) - to: result minusGreaterThanTokens. - result addTokens: ((nodes at: 4) at: 16) to: result periodTokens. - result - addTokens: ((nodes at: 4) at: 17) - to: result questionMarkTokens. - result addTokens: ((nodes at: 4) at: 18) to: result bangTokens. - result addTokens: ((nodes at: 4) at: 19) to: result protocolTokens. - result addTokens: ((nodes at: 4) at: 20) to: result lessThanTokens. - result addTokens: ((nodes at: 4) at: 21) to: result greaterThanTokens. - result addTokens: ((nodes at: 4) at: 22) to: result typeTokens. - result addTokens: ((nodes at: 4) at: 23) to: result leftBraceTokens. - result addTokens: ((nodes at: 4) at: 24) to: result rightBraceTokens. - result - addTokens: ((nodes at: 4) at: 25) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 4) at: 26) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 4) at: 27) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 4) at: 28) to: result operatorTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForprotocol_property_declaration1: nodes [ - | result | - result := SwiftProtocolPropertyDeclarationNode new. - result addTokens: ((nodes at: 1) at: 1) to: result _Tokens. - result addTokens: ((nodes at: 1) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 3) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 4) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 5) to: result leftBracketTokens. - result addTokens: ((nodes at: 1) at: 6) to: result rightBracketTokens. - result addTokens: ((nodes at: 1) at: 7) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 1) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 12) to: result operatorTokens. - result addTokens: ((nodes at: 1) at: 13) to: result classTokens. - result addTokens: ((nodes at: 1) at: 14) to: result mutatingTokens. - result addTokens: ((nodes at: 1) at: 15) to: result nonmutatingTokens. - result addTokens: ((nodes at: 1) at: 16) to: result overrideTokens. - result addTokens: ((nodes at: 1) at: 17) to: result staticTokens. - result addTokens: ((nodes at: 1) at: 18) to: result unownedTokens. - result - addTokens: ((nodes at: 1) at: 19) - to: result unownedLeftParensafeRightParenTokens. - result - addTokens: ((nodes at: 1) at: 20) - to: result unownedLeftParenunsafeRightParenTokens. - result addTokens: ((nodes at: 1) at: 21) to: result weakTokens. - result varToken: ((nodes at: 1) at: 22). - result addToken: (nodes at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 3) at: 1) to: result colonTokens. - result addTokens: ((nodes at: 3) at: 2) to: result _Tokens. - result addTokens: ((nodes at: 3) at: 3) to: result identifierTokens. - result addTokens: ((nodes at: 3) at: 4) to: result leftParenTokens. - result addTokens: ((nodes at: 3) at: 5) to: result rightParenTokens. - result addTokens: ((nodes at: 3) at: 6) to: result leftBracketTokens. - result addTokens: ((nodes at: 3) at: 7) to: result rightBracketTokens. - result addTokens: ((nodes at: 3) at: 8) to: result leftBraceTokens. - result addTokens: ((nodes at: 3) at: 9) to: result rightBraceTokens. - result - addTokens: ((nodes at: 3) at: 10) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 3) at: 11) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 3) at: 12) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 3) at: 13) to: result operatorTokens. - result - addTokens: ((nodes at: 3) at: 14) - to: result minusGreaterThanTokens. - result addTokens: ((nodes at: 3) at: 15) to: result periodTokens. - result - addTokens: ((nodes at: 3) at: 16) - to: result questionMarkTokens. - result addTokens: ((nodes at: 3) at: 17) to: result bangTokens. - result addTokens: ((nodes at: 3) at: 18) to: result protocolTokens. - result addTokens: ((nodes at: 3) at: 19) to: result lessThanTokens. - result addTokens: ((nodes at: 3) at: 20) to: result greaterThanTokens. - result addTokens: ((nodes at: 3) at: 21) to: result typeTokens. - result addTokens: ((nodes at: 3) at: 22) to: result commaTokens. - result - addTokens: ((nodes at: 3) at: 23) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 3) at: 24) to: result inoutTokens. - result addTokens: ((nodes at: 4) at: 1) to: result leftBraceTokens. - result addTokens: ((nodes at: 4) at: 2) to: result _Tokens. - result addTokens: ((nodes at: 4) at: 3) to: result identifierTokens. - result addTokens: ((nodes at: 4) at: 4) to: result leftParenTokens. - result addTokens: ((nodes at: 4) at: 5) to: result rightParenTokens. - result addTokens: ((nodes at: 4) at: 6) to: result leftBracketTokens. - result addTokens: ((nodes at: 4) at: 7) to: result rightBracketTokens. - result addTokens: ((nodes at: 4) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 4) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 4) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 4) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 4) at: 12) to: result operatorTokens. - result getToken: ((nodes at: 4) at: 13). - result setToken: ((nodes at: 4) at: 14). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForprotocol_subscript_declaration1: nodes [ - | result | - result := SwiftProtocolSubscriptDeclarationNode new. - result addTokens: ((nodes at: 1) at: 1) to: result _Tokens. - result addTokens: ((nodes at: 1) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 3) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 4) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 5) to: result leftBracketTokens. - result addTokens: ((nodes at: 1) at: 6) to: result rightBracketTokens. - result addTokens: ((nodes at: 1) at: 7) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 1) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 12) to: result operatorTokens. - result subscriptToken: ((nodes at: 1) at: 13). - result addTokens: ((nodes at: 1) at: 14) to: result inoutTokens. - result addTokens: ((nodes at: 1) at: 15) to: result letTokens. - result addTokens: ((nodes at: 1) at: 16) to: result colonTokens. - result - addTokens: ((nodes at: 1) at: 17) - to: result minusGreaterThanTokens. - result addTokens: ((nodes at: 1) at: 18) to: result periodTokens. - result - addTokens: ((nodes at: 1) at: 19) - to: result questionMarkTokens. - result addTokens: ((nodes at: 1) at: 20) to: result bangTokens. - result addTokens: ((nodes at: 1) at: 21) to: result protocolTokens. - result addTokens: ((nodes at: 1) at: 22) to: result lessThanTokens. - result addTokens: ((nodes at: 1) at: 23) to: result greaterThanTokens. - result addTokens: ((nodes at: 1) at: 24) to: result typeTokens. - result addTokens: ((nodes at: 1) at: 25) to: result commaTokens. - result addTokens: ((nodes at: 1) at: 26) to: result equalTokens. - result addObjects: ((nodes at: 1) at: 27) to: result expressions. - result addTokens: ((nodes at: 1) at: 28) to: result varTokens. - result - addTokens: ((nodes at: 1) at: 29) - to: result periodPeriodPeriodTokens. - result - addTokens: ((nodes at: 2) at: 1) - to: result minusGreaterThanTokens. - result addTokens: ((nodes at: 2) at: 2) to: result _Tokens. - result addTokens: ((nodes at: 2) at: 3) to: result identifierTokens. - result addTokens: ((nodes at: 2) at: 4) to: result leftParenTokens. - result addTokens: ((nodes at: 2) at: 5) to: result rightParenTokens. - result addTokens: ((nodes at: 2) at: 6) to: result leftBracketTokens. - result addTokens: ((nodes at: 2) at: 7) to: result rightBracketTokens. - result addTokens: ((nodes at: 2) at: 8) to: result leftBraceTokens. - result addTokens: ((nodes at: 2) at: 9) to: result rightBraceTokens. - result - addTokens: ((nodes at: 2) at: 10) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 2) at: 11) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 2) at: 12) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 2) at: 13) to: result operatorTokens. - result addTokens: ((nodes at: 2) at: 14) to: result colonTokens. - result addTokens: ((nodes at: 2) at: 15) to: result periodTokens. - result - addTokens: ((nodes at: 2) at: 16) - to: result questionMarkTokens. - result addTokens: ((nodes at: 2) at: 17) to: result bangTokens. - result addTokens: ((nodes at: 2) at: 18) to: result protocolTokens. - result addTokens: ((nodes at: 2) at: 19) to: result lessThanTokens. - result addTokens: ((nodes at: 2) at: 20) to: result greaterThanTokens. - result addTokens: ((nodes at: 2) at: 21) to: result typeTokens. - result addTokens: ((nodes at: 2) at: 22) to: result commaTokens. - result - addTokens: ((nodes at: 2) at: 23) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 2) at: 24) to: result inoutTokens. - result addTokens: ((nodes at: 3) at: 1) to: result leftBraceTokens. - result addTokens: ((nodes at: 3) at: 2) to: result _Tokens. - result addTokens: ((nodes at: 3) at: 3) to: result identifierTokens. - result addTokens: ((nodes at: 3) at: 4) to: result leftParenTokens. - result addTokens: ((nodes at: 3) at: 5) to: result rightParenTokens. - result addTokens: ((nodes at: 3) at: 6) to: result leftBracketTokens. - result addTokens: ((nodes at: 3) at: 7) to: result rightBracketTokens. - result addTokens: ((nodes at: 3) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 3) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 3) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 3) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 3) at: 12) to: result operatorTokens. - result getToken: ((nodes at: 3) at: 13). - result setToken: ((nodes at: 3) at: 14). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForraw_value_style_enum1: nodes [ - | result | - result := Array new: 57. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - result at: 30 put: (OrderedCollection new: 2). - result at: 31 put: (OrderedCollection new: 2). - result at: 32 put: (OrderedCollection new: 2). - result at: 33 put: (OrderedCollection new: 2). - result at: 34 put: (OrderedCollection new: 2). - result at: 35 put: (OrderedCollection new: 2). - result at: 36 put: (OrderedCollection new: 2). - result at: 37 put: (OrderedCollection new: 2). - result at: 38 put: (OrderedCollection new: 2). - result at: 39 put: (OrderedCollection new: 2). - result at: 40 put: (OrderedCollection new: 2). - result at: 41 put: (OrderedCollection new: 2). - result at: 42 put: (OrderedCollection new: 2). - result at: 43 put: (OrderedCollection new: 2). - result at: 44 put: (OrderedCollection new: 2). - result at: 45 put: (OrderedCollection new: 2). - result at: 46 put: (OrderedCollection new: 2). - result at: 47 put: (OrderedCollection new: 2). - result at: 48 put: (OrderedCollection new: 2). - result at: 49 put: (OrderedCollection new: 2). - result at: 50 put: (OrderedCollection new: 2). - result at: 51 put: (OrderedCollection new: 2). - result at: 52 put: (OrderedCollection new: 2). - result at: 53 put: (OrderedCollection new: 2). - result at: 54 put: (OrderedCollection new: 2). - result at: 55 put: (OrderedCollection new: 2). - result at: 56 put: (OrderedCollection new: 2). - result at: 57 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 1). - self addAll: ((nodes at: 2) at: 3) to: (result at: 3). - self addAll: ((nodes at: 2) at: 4) to: (result at: 4). - self addAll: ((nodes at: 2) at: 5) to: (result at: 5). - self addAll: ((nodes at: 2) at: 6) to: (result at: 6). - self addAll: ((nodes at: 2) at: 7) to: (result at: 7). - self add: ((nodes at: 2) at: 8) to: (result at: 8). - self addAll: ((nodes at: 2) at: 9) to: (result at: 9). - self add: (nodes at: 3) to: (result at: 3). - self add: (nodes at: 5) to: (result at: 10). - self addAll: ((nodes at: 6) at: 1) to: (result at: 11). - self addAll: ((nodes at: 6) at: 2) to: (result at: 1). - self addAll: ((nodes at: 6) at: 3) to: (result at: 12). - self addAll: ((nodes at: 6) at: 4) to: (result at: 13). - self addAll: ((nodes at: 6) at: 5) to: (result at: 32). - self addAll: ((nodes at: 6) at: 6) to: (result at: 33). - self addAll: ((nodes at: 6) at: 7) to: (result at: 10). - self addAll: ((nodes at: 6) at: 8) to: (result at: 41). - self addAll: ((nodes at: 6) at: 9) to: (result at: 55). - self addAll: ((nodes at: 6) at: 10) to: (result at: 56). - self addAll: ((nodes at: 6) at: 11) to: (result at: 57). - self addAll: ((nodes at: 6) at: 12) to: (result at: 21). - self addAll: ((nodes at: 6) at: 13) to: (result at: 14). - self addAll: ((nodes at: 6) at: 14) to: (result at: 15). - self addAll: ((nodes at: 6) at: 15) to: (result at: 16). - self addAll: ((nodes at: 6) at: 16) to: (result at: 17). - self addAll: ((nodes at: 6) at: 17) to: (result at: 18). - self addAll: ((nodes at: 6) at: 18) to: (result at: 7). - self addAll: ((nodes at: 6) at: 19) to: (result at: 19). - self addAll: ((nodes at: 6) at: 20) to: (result at: 20). - self addAll: ((nodes at: 6) at: 21) to: (result at: 6). - self addAll: ((nodes at: 6) at: 22) to: (result at: 22). - self addAll: ((nodes at: 6) at: 23) to: (result at: 23). - self addAll: ((nodes at: 6) at: 24) to: (result at: 24). - self addAll: ((nodes at: 6) at: 25) to: (result at: 25). - self addAll: ((nodes at: 6) at: 26) to: (result at: 26). - self addAll: ((nodes at: 6) at: 27) to: (result at: 27). - self addAll: ((nodes at: 6) at: 28) to: (result at: 28). - self addAll: ((nodes at: 6) at: 29) to: (result at: 29). - self addAll: ((nodes at: 6) at: 30) to: (result at: 30). - self addAll: ((nodes at: 6) at: 31) to: (result at: 31). - self addAll: ((nodes at: 6) at: 32) to: (result at: 4). - self addAll: ((nodes at: 6) at: 33) to: (result at: 3). - self addAll: ((nodes at: 6) at: 34) to: (result at: 34). - self addAll: ((nodes at: 6) at: 35) to: (result at: 35). - self addAll: ((nodes at: 6) at: 36) to: (result at: 36). - self addAll: ((nodes at: 6) at: 37) to: (result at: 2). - self addAll: ((nodes at: 6) at: 38) to: (result at: 5). - self addAll: ((nodes at: 6) at: 39) to: (result at: 37). - self addAll: ((nodes at: 6) at: 40) to: (result at: 46). - self addAll: ((nodes at: 6) at: 41) to: (result at: 53). - self addAll: ((nodes at: 6) at: 42) to: (result at: 38). - self addAll: ((nodes at: 6) at: 43) to: (result at: 39). - self addAll: ((nodes at: 6) at: 44) to: (result at: 40). - self addAll: ((nodes at: 6) at: 45) to: (result at: 42). - self addAll: ((nodes at: 6) at: 46) to: (result at: 43). - self addAll: ((nodes at: 6) at: 47) to: (result at: 44). - self addAll: ((nodes at: 6) at: 48) to: (result at: 45). - self addAll: ((nodes at: 6) at: 49) to: (result at: 8). - self addAll: ((nodes at: 6) at: 50) to: (result at: 9). - self addAll: ((nodes at: 6) at: 51) to: (result at: 50). - self addAll: ((nodes at: 6) at: 52) to: (result at: 51). - self addAll: ((nodes at: 6) at: 53) to: (result at: 52). - self addAll: ((nodes at: 6) at: 54) to: (result at: 47). - self addAll: ((nodes at: 6) at: 55) to: (result at: 48). - self addAll: ((nodes at: 6) at: 56) to: (result at: 54). - self addAll: ((nodes at: 6) at: 57) to: (result at: 49). - self add: (nodes at: 7) to: (result at: 41). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForraw_value_style_enum_case1: nodes [ - | result | - result := Array new: 5. - result at: 1 put: (nodes at: 1). - result at: 2 put: ((nodes at: 2) at: 1). - result at: 3 put: ((nodes at: 2) at: 2). - result at: 4 put: ((nodes at: 2) at: 3). - result at: 5 put: ((nodes at: 2) at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForraw_value_style_enum_case_clause1: nodes [ - | result | - result := Array new: 15. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - self addAll: ((nodes at: 1) at: 6) to: (result at: 6). - self addAll: ((nodes at: 1) at: 7) to: (result at: 7). - self addAll: ((nodes at: 1) at: 8) to: (result at: 8). - self addAll: ((nodes at: 1) at: 9) to: (result at: 9). - self addAll: ((nodes at: 1) at: 10) to: (result at: 10). - self addAll: ((nodes at: 1) at: 11) to: (result at: 11). - self addAll: ((nodes at: 1) at: 12) to: (result at: 12). - result at: 13 put: (nodes at: 2). - self addAll: ((nodes at: 3) at: 1) to: (result at: 2). - self addAll: ((nodes at: 3) at: 2) to: (result at: 14). - self addAll: ((nodes at: 3) at: 3) to: (result at: 9). - self addAll: ((nodes at: 3) at: 4) to: (result at: 10). - self addAll: ((nodes at: 3) at: 5) to: (result at: 11). - self addAll: ((nodes at: 3) at: 6) to: (result at: 15). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForraw_value_style_enum_case_list1: nodes [ - | result | - result := Array new: 6. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - self add: ((nodes at: 1) at: 1) to: (result at: 1). - self add: ((nodes at: 1) at: 2) to: (result at: 2). - self add: ((nodes at: 1) at: 3) to: (result at: 3). - self add: ((nodes at: 1) at: 4) to: (result at: 4). - self add: ((nodes at: 1) at: 5) to: (result at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForraw_value_style_enum_case_list2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 6). - self add: ((nodes at: 3) at: 1) to: (result at: 1). - self add: ((nodes at: 3) at: 2) to: (result at: 2). - self add: ((nodes at: 3) at: 3) to: (result at: 3). - self add: ((nodes at: 3) at: 4) to: (result at: 4). - self add: ((nodes at: 3) at: 5) to: (result at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForraw_value_style_enum_member2: nodes [ - | result | - result := Array new: 57. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - result at: 30 put: (OrderedCollection new: 2). - result at: 31 put: (OrderedCollection new: 2). - result at: 32 put: (OrderedCollection new: 2). - result at: 33 put: (OrderedCollection new: 2). - result at: 34 put: (OrderedCollection new: 2). - result at: 35 put: (OrderedCollection new: 2). - result at: 36 put: (OrderedCollection new: 2). - result at: 37 put: (OrderedCollection new: 2). - result at: 38 put: (OrderedCollection new: 2). - result at: 39 put: (OrderedCollection new: 2). - result at: 40 put: (OrderedCollection new: 2). - result at: 41 put: (OrderedCollection new: 2). - result at: 42 put: (OrderedCollection new: 2). - result at: 43 put: (OrderedCollection new: 2). - result at: 44 put: (OrderedCollection new: 2). - result at: 45 put: (OrderedCollection new: 2). - result at: 46 put: (OrderedCollection new: 2). - result at: 47 put: (OrderedCollection new: 2). - result at: 48 put: (OrderedCollection new: 2). - result at: 49 put: (OrderedCollection new: 2). - result at: 50 put: (OrderedCollection new: 2). - result at: 51 put: (OrderedCollection new: 2). - result at: 52 put: (OrderedCollection new: 2). - result at: 53 put: (OrderedCollection new: 2). - result at: 54 put: (OrderedCollection new: 2). - result at: 55 put: (OrderedCollection new: 2). - result at: 56 put: (OrderedCollection new: 2). - result at: 57 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - self addAll: ((nodes at: 1) at: 6) to: (result at: 6). - self addAll: ((nodes at: 1) at: 7) to: (result at: 7). - self addAll: ((nodes at: 1) at: 8) to: (result at: 8). - self addAll: ((nodes at: 1) at: 9) to: (result at: 9). - self addAll: ((nodes at: 1) at: 10) to: (result at: 10). - self addAll: ((nodes at: 1) at: 11) to: (result at: 11). - self addAll: ((nodes at: 1) at: 12) to: (result at: 12). - self add: ((nodes at: 1) at: 13) to: (result at: 57). - self addAll: ((nodes at: 1) at: 14) to: (result at: 45). - self addAll: ((nodes at: 1) at: 15) to: (result at: 32). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForrequirement1: nodes [ - | result | - result := Array new: 8. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - result at: 6 put: ((nodes at: 1) at: 6). - result at: 7 put: ((nodes at: 1) at: 7). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForrequirement2: nodes [ - | result | - result := Array new: 8. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - result at: 8 put: ((nodes at: 1) at: 6). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForrequirement_clause1: nodes [ - | result | - result := Array new: 9. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - self addAll: ((nodes at: 2) at: 3) to: (result at: 8). - self addAll: ((nodes at: 2) at: 4) to: (result at: 4). - self addAll: ((nodes at: 2) at: 5) to: (result at: 5). - self addAll: ((nodes at: 2) at: 6) to: (result at: 6). - self addAll: ((nodes at: 2) at: 7) to: (result at: 7). - self addAll: ((nodes at: 2) at: 8) to: (result at: 9). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForrequirement_list1: nodes [ - | result | - result := Array new: 8. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - self add: ((nodes at: 1) at: 6) to: (result at: 6). - self add: ((nodes at: 1) at: 7) to: (result at: 7). - self add: ((nodes at: 1) at: 8) to: (result at: 8). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForrequirement_list2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 3). - self addAll: ((nodes at: 3) at: 1) to: (result at: 1). - self addAll: ((nodes at: 3) at: 2) to: (result at: 2). - self addAll: ((nodes at: 3) at: 3) to: (result at: 3). - self addAll: ((nodes at: 3) at: 4) to: (result at: 4). - self addAll: ((nodes at: 3) at: 5) to: (result at: 5). - self add: ((nodes at: 3) at: 6) to: (result at: 6). - self add: ((nodes at: 3) at: 7) to: (result at: 7). - self add: ((nodes at: 3) at: 8) to: (result at: 8). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForreturn_statement1: nodes [ - | result | - result := SwiftReturnStatementNode new. - result returnToken: (nodes at: 1). - result expression: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForsame_type_requirement1: nodes [ - | result | - result := Array new: 6. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForself_expression1: nodes [ - | result | - result := SwiftSelfExpressionNode new. - result selfToken: (nodes at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForself_expression2: nodes [ - | result | - result := SwiftSelfExpressionNode new. - result selfToken: (nodes at: 1). - result periodToken: (nodes at: 2). - result identifierToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForself_expression3: nodes [ - | result | - result := SwiftSelfExpressionNode new. - result selfToken: (nodes at: 1). - result leftBracketToken: (nodes at: 2). - result expression: (nodes at: 3). - result rightBracketToken: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForself_expression4: nodes [ - | result | - result := SwiftSelfExpressionNode new. - result selfToken: (nodes at: 1). - result periodToken: (nodes at: 2). - result initToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForsetter_clause1: nodes [ - | result | - result := Array new: 14. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - self addAll: ((nodes at: 1) at: 6) to: (result at: 6). - self addAll: ((nodes at: 1) at: 7) to: (result at: 7). - self addAll: ((nodes at: 1) at: 8) to: (result at: 8). - self addAll: ((nodes at: 1) at: 9) to: (result at: 9). - self addAll: ((nodes at: 1) at: 10) to: (result at: 10). - self addAll: ((nodes at: 1) at: 11) to: (result at: 11). - self addAll: ((nodes at: 1) at: 12) to: (result at: 12). - result at: 13 put: (nodes at: 2). - self add: ((nodes at: 3) at: 1) to: (result at: 3). - self add: ((nodes at: 3) at: 2) to: (result at: 2). - self add: ((nodes at: 3) at: 3) to: (result at: 4). - result at: 14 put: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForstatement1: nodes [ - | result | - result := SwiftExpressionStatementNode new. - result expression: (nodes at: 1). - result semicolonToken: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForstatement2: nodes [ - | result | - result := SwiftDeclarationStatementNode new. - result declaration: (nodes at: 1). - result semicolonToken: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForstatement3: nodes [ - | result | - result := nodes at: 1. - result semicolonToken: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForstatements1: nodes [ - | result | - result := OrderedCollection new: 2. - self add: (nodes at: 1) to: result. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForstatements2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: result. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForstruct_declaration1: nodes [ - | result | - result := SwiftStructDeclarationNode new. - result addTokens: ((nodes at: 1) at: 1) to: result _Tokens. - result addTokens: ((nodes at: 1) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 3) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 4) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 5) to: result leftBracketTokens. - result addTokens: ((nodes at: 1) at: 6) to: result rightBracketTokens. - result addTokens: ((nodes at: 1) at: 7) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 1) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 12) to: result operatorTokens. - result structToken: (nodes at: 2). - result addToken: (nodes at: 3) to: result identifierTokens. - result addTokens: ((nodes at: 4) at: 1) to: result lessThanTokens. - result addTokens: ((nodes at: 4) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 4) at: 3) to: result colonTokens. - result addTokens: ((nodes at: 4) at: 4) to: result commaTokens. - result addTokens: ((nodes at: 4) at: 5) to: result greaterThanTokens. - result addTokens: ((nodes at: 4) at: 6) to: result periodTokens. - result addTokens: ((nodes at: 4) at: 7) to: result protocolTokens. - result whereToken: ((nodes at: 4) at: 8). - result addTokens: ((nodes at: 4) at: 9) to: result equalEqualTokens. - result addToken: ((nodes at: 5) at: 1) to: result colonTokens. - result addTokens: ((nodes at: 5) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 5) at: 3) to: result lessThanTokens. - result addTokens: ((nodes at: 5) at: 4) to: result greaterThanTokens. - result addTokens: ((nodes at: 5) at: 5) to: result periodTokens. - result addTokens: ((nodes at: 5) at: 6) to: result commaTokens. - result addToken: ((nodes at: 6) at: 1) to: result leftBraceTokens. - result addNodes: ((nodes at: 6) at: 2) to: result declarations. - result addToken: ((nodes at: 6) at: 3) to: result rightBraceTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForsubscript_declaration1: nodes [ - | result | - result := SwiftSubscriptDeclarationNode new. - result addTokens: ((nodes at: 1) at: 1) to: result _Tokens. - result addTokens: ((nodes at: 1) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 3) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 4) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 5) to: result leftBracketTokens. - result addTokens: ((nodes at: 1) at: 6) to: result rightBracketTokens. - result addTokens: ((nodes at: 1) at: 7) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 1) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 12) to: result operatorTokens. - result subscriptToken: ((nodes at: 1) at: 13). - result addTokens: ((nodes at: 1) at: 14) to: result inoutTokens. - result addTokens: ((nodes at: 1) at: 15) to: result letTokens. - result addTokens: ((nodes at: 1) at: 16) to: result colonTokens. - result - addTokens: ((nodes at: 1) at: 17) - to: result minusGreaterThanTokens. - result addTokens: ((nodes at: 1) at: 18) to: result periodTokens. - result - addTokens: ((nodes at: 1) at: 19) - to: result questionMarkTokens. - result addTokens: ((nodes at: 1) at: 20) to: result bangTokens. - result addTokens: ((nodes at: 1) at: 21) to: result protocolTokens. - result addTokens: ((nodes at: 1) at: 22) to: result lessThanTokens. - result addTokens: ((nodes at: 1) at: 23) to: result greaterThanTokens. - result addTokens: ((nodes at: 1) at: 24) to: result typeTokens. - result addTokens: ((nodes at: 1) at: 25) to: result commaTokens. - result addTokens: ((nodes at: 1) at: 26) to: result equalTokens. - result addObjects: ((nodes at: 1) at: 27) to: result expressions. - result addTokens: ((nodes at: 1) at: 28) to: result varTokens. - result - addTokens: ((nodes at: 1) at: 29) - to: result periodPeriodPeriodTokens. - result - addTokens: ((nodes at: 2) at: 1) - to: result minusGreaterThanTokens. - result addTokens: ((nodes at: 2) at: 2) to: result _Tokens. - result addTokens: ((nodes at: 2) at: 3) to: result identifierTokens. - result addTokens: ((nodes at: 2) at: 4) to: result leftParenTokens. - result addTokens: ((nodes at: 2) at: 5) to: result rightParenTokens. - result addTokens: ((nodes at: 2) at: 6) to: result leftBracketTokens. - result addTokens: ((nodes at: 2) at: 7) to: result rightBracketTokens. - result addTokens: ((nodes at: 2) at: 8) to: result leftBraceTokens. - result addTokens: ((nodes at: 2) at: 9) to: result rightBraceTokens. - result - addTokens: ((nodes at: 2) at: 10) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 2) at: 11) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 2) at: 12) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 2) at: 13) to: result operatorTokens. - result addTokens: ((nodes at: 2) at: 14) to: result colonTokens. - result addTokens: ((nodes at: 2) at: 15) to: result periodTokens. - result - addTokens: ((nodes at: 2) at: 16) - to: result questionMarkTokens. - result addTokens: ((nodes at: 2) at: 17) to: result bangTokens. - result addTokens: ((nodes at: 2) at: 18) to: result protocolTokens. - result addTokens: ((nodes at: 2) at: 19) to: result lessThanTokens. - result addTokens: ((nodes at: 2) at: 20) to: result greaterThanTokens. - result addTokens: ((nodes at: 2) at: 21) to: result typeTokens. - result addTokens: ((nodes at: 2) at: 22) to: result commaTokens. - result - addTokens: ((nodes at: 2) at: 23) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 2) at: 24) to: result inoutTokens. - result addNode: (nodes at: 3) to: result blocks. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForsubscript_declaration2: nodes [ - | result | - result := SwiftSubscriptDeclarationNode new. - result addTokens: ((nodes at: 1) at: 1) to: result _Tokens. - result addTokens: ((nodes at: 1) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 3) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 4) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 5) to: result leftBracketTokens. - result addTokens: ((nodes at: 1) at: 6) to: result rightBracketTokens. - result addTokens: ((nodes at: 1) at: 7) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 1) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 12) to: result operatorTokens. - result subscriptToken: ((nodes at: 1) at: 13). - result addTokens: ((nodes at: 1) at: 14) to: result inoutTokens. - result addTokens: ((nodes at: 1) at: 15) to: result letTokens. - result addTokens: ((nodes at: 1) at: 16) to: result colonTokens. - result - addTokens: ((nodes at: 1) at: 17) - to: result minusGreaterThanTokens. - result addTokens: ((nodes at: 1) at: 18) to: result periodTokens. - result - addTokens: ((nodes at: 1) at: 19) - to: result questionMarkTokens. - result addTokens: ((nodes at: 1) at: 20) to: result bangTokens. - result addTokens: ((nodes at: 1) at: 21) to: result protocolTokens. - result addTokens: ((nodes at: 1) at: 22) to: result lessThanTokens. - result addTokens: ((nodes at: 1) at: 23) to: result greaterThanTokens. - result addTokens: ((nodes at: 1) at: 24) to: result typeTokens. - result addTokens: ((nodes at: 1) at: 25) to: result commaTokens. - result addTokens: ((nodes at: 1) at: 26) to: result equalTokens. - result addObjects: ((nodes at: 1) at: 27) to: result expressions. - result addTokens: ((nodes at: 1) at: 28) to: result varTokens. - result - addTokens: ((nodes at: 1) at: 29) - to: result periodPeriodPeriodTokens. - result - addTokens: ((nodes at: 2) at: 1) - to: result minusGreaterThanTokens. - result addTokens: ((nodes at: 2) at: 2) to: result _Tokens. - result addTokens: ((nodes at: 2) at: 3) to: result identifierTokens. - result addTokens: ((nodes at: 2) at: 4) to: result leftParenTokens. - result addTokens: ((nodes at: 2) at: 5) to: result rightParenTokens. - result addTokens: ((nodes at: 2) at: 6) to: result leftBracketTokens. - result addTokens: ((nodes at: 2) at: 7) to: result rightBracketTokens. - result addTokens: ((nodes at: 2) at: 8) to: result leftBraceTokens. - result addTokens: ((nodes at: 2) at: 9) to: result rightBraceTokens. - result - addTokens: ((nodes at: 2) at: 10) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 2) at: 11) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 2) at: 12) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 2) at: 13) to: result operatorTokens. - result addTokens: ((nodes at: 2) at: 14) to: result colonTokens. - result addTokens: ((nodes at: 2) at: 15) to: result periodTokens. - result - addTokens: ((nodes at: 2) at: 16) - to: result questionMarkTokens. - result addTokens: ((nodes at: 2) at: 17) to: result bangTokens. - result addTokens: ((nodes at: 2) at: 18) to: result protocolTokens. - result addTokens: ((nodes at: 2) at: 19) to: result lessThanTokens. - result addTokens: ((nodes at: 2) at: 20) to: result greaterThanTokens. - result addTokens: ((nodes at: 2) at: 21) to: result typeTokens. - result addTokens: ((nodes at: 2) at: 22) to: result commaTokens. - result - addTokens: ((nodes at: 2) at: 23) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 2) at: 24) to: result inoutTokens. - result addTokens: ((nodes at: 3) at: 1) to: result leftBraceTokens. - result addTokens: ((nodes at: 3) at: 2) to: result _Tokens. - result addTokens: ((nodes at: 3) at: 3) to: result identifierTokens. - result addTokens: ((nodes at: 3) at: 4) to: result leftParenTokens. - result addTokens: ((nodes at: 3) at: 5) to: result rightParenTokens. - result addTokens: ((nodes at: 3) at: 6) to: result leftBracketTokens. - result addTokens: ((nodes at: 3) at: 7) to: result rightBracketTokens. - result addTokens: ((nodes at: 3) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 3) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 3) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 3) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 3) at: 12) to: result operatorTokens. - result getToken: ((nodes at: 3) at: 13). - result addNodes: ((nodes at: 3) at: 14) to: result blocks. - result setToken: ((nodes at: 3) at: 15). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForsubscript_declaration3: nodes [ - | result | - result := SwiftSubscriptDeclarationNode new. - result addTokens: ((nodes at: 1) at: 1) to: result _Tokens. - result addTokens: ((nodes at: 1) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 3) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 4) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 5) to: result leftBracketTokens. - result addTokens: ((nodes at: 1) at: 6) to: result rightBracketTokens. - result addTokens: ((nodes at: 1) at: 7) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 1) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 12) to: result operatorTokens. - result subscriptToken: ((nodes at: 1) at: 13). - result addTokens: ((nodes at: 1) at: 14) to: result inoutTokens. - result addTokens: ((nodes at: 1) at: 15) to: result letTokens. - result addTokens: ((nodes at: 1) at: 16) to: result colonTokens. - result - addTokens: ((nodes at: 1) at: 17) - to: result minusGreaterThanTokens. - result addTokens: ((nodes at: 1) at: 18) to: result periodTokens. - result - addTokens: ((nodes at: 1) at: 19) - to: result questionMarkTokens. - result addTokens: ((nodes at: 1) at: 20) to: result bangTokens. - result addTokens: ((nodes at: 1) at: 21) to: result protocolTokens. - result addTokens: ((nodes at: 1) at: 22) to: result lessThanTokens. - result addTokens: ((nodes at: 1) at: 23) to: result greaterThanTokens. - result addTokens: ((nodes at: 1) at: 24) to: result typeTokens. - result addTokens: ((nodes at: 1) at: 25) to: result commaTokens. - result addTokens: ((nodes at: 1) at: 26) to: result equalTokens. - result addObjects: ((nodes at: 1) at: 27) to: result expressions. - result addTokens: ((nodes at: 1) at: 28) to: result varTokens. - result - addTokens: ((nodes at: 1) at: 29) - to: result periodPeriodPeriodTokens. - result - addTokens: ((nodes at: 2) at: 1) - to: result minusGreaterThanTokens. - result addTokens: ((nodes at: 2) at: 2) to: result _Tokens. - result addTokens: ((nodes at: 2) at: 3) to: result identifierTokens. - result addTokens: ((nodes at: 2) at: 4) to: result leftParenTokens. - result addTokens: ((nodes at: 2) at: 5) to: result rightParenTokens. - result addTokens: ((nodes at: 2) at: 6) to: result leftBracketTokens. - result addTokens: ((nodes at: 2) at: 7) to: result rightBracketTokens. - result addTokens: ((nodes at: 2) at: 8) to: result leftBraceTokens. - result addTokens: ((nodes at: 2) at: 9) to: result rightBraceTokens. - result - addTokens: ((nodes at: 2) at: 10) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 2) at: 11) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 2) at: 12) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 2) at: 13) to: result operatorTokens. - result addTokens: ((nodes at: 2) at: 14) to: result colonTokens. - result addTokens: ((nodes at: 2) at: 15) to: result periodTokens. - result - addTokens: ((nodes at: 2) at: 16) - to: result questionMarkTokens. - result addTokens: ((nodes at: 2) at: 17) to: result bangTokens. - result addTokens: ((nodes at: 2) at: 18) to: result protocolTokens. - result addTokens: ((nodes at: 2) at: 19) to: result lessThanTokens. - result addTokens: ((nodes at: 2) at: 20) to: result greaterThanTokens. - result addTokens: ((nodes at: 2) at: 21) to: result typeTokens. - result addTokens: ((nodes at: 2) at: 22) to: result commaTokens. - result - addTokens: ((nodes at: 2) at: 23) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 2) at: 24) to: result inoutTokens. - result addTokens: ((nodes at: 3) at: 1) to: result leftBraceTokens. - result addTokens: ((nodes at: 3) at: 2) to: result _Tokens. - result addTokens: ((nodes at: 3) at: 3) to: result identifierTokens. - result addTokens: ((nodes at: 3) at: 4) to: result leftParenTokens. - result addTokens: ((nodes at: 3) at: 5) to: result rightParenTokens. - result addTokens: ((nodes at: 3) at: 6) to: result leftBracketTokens. - result addTokens: ((nodes at: 3) at: 7) to: result rightBracketTokens. - result addTokens: ((nodes at: 3) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 3) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 3) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 3) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 3) at: 12) to: result operatorTokens. - result getToken: ((nodes at: 3) at: 13). - result setToken: ((nodes at: 3) at: 14). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForsubscript_expression1: nodes [ - | result | - result := SwiftSubscriptExpressionNode new. - result addTokens: ((nodes at: 1) at: 1) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 2) to: result lessThanTokens. - result addTokens: ((nodes at: 1) at: 3) to: result commaTokens. - result addTokens: ((nodes at: 1) at: 4) to: result greaterThanTokens. - result - addTokens: ((nodes at: 1) at: 5) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 6) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 7) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 8) to: result leftBracketTokens. - result addObjects: ((nodes at: 1) at: 9) to: result expressions. - result - addTokens: ((nodes at: 1) at: 10) - to: result rightBracketTokens. - result addObjects: ((nodes at: 1) at: 11) to: result keyExpressions. - result addTokens: ((nodes at: 1) at: 12) to: result colonTokens. - result addObjects: ((nodes at: 1) at: 13) to: result valueExpressions. - result __FILE__Token: ((nodes at: 1) at: 14). - result __LINE__Token: ((nodes at: 1) at: 15). - result __COLUMN__Token: ((nodes at: 1) at: 16). - result __FUNCTION__Token: ((nodes at: 1) at: 17). - result addTokens: ((nodes at: 1) at: 18) to: result selfTokens. - result addTokens: ((nodes at: 1) at: 19) to: result periodTokens. - result addTokens: ((nodes at: 1) at: 20) to: result initTokens. - result addTokens: ((nodes at: 1) at: 21) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 22) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 23) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 24) to: result inoutTokens. - result addTokens: ((nodes at: 1) at: 25) to: result letTokens. - result addTokens: ((nodes at: 1) at: 26) to: result _Tokens. - result - addTokens: ((nodes at: 1) at: 27) - to: result minusGreaterThanTokens. - result - addTokens: ((nodes at: 1) at: 28) - to: result questionMarkTokens. - result addTokens: ((nodes at: 1) at: 29) to: result bangTokens. - result addTokens: ((nodes at: 1) at: 30) to: result protocolTokens. - result addTokens: ((nodes at: 1) at: 31) to: result typeTokens. - result - addTokens: ((nodes at: 1) at: 32) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 1) at: 33) to: result equalTokens. - result addTokens: ((nodes at: 1) at: 34) to: result varTokens. - result addTokens: ((nodes at: 1) at: 35) to: result rightBraceTokens. - result addTokens: ((nodes at: 1) at: 36) to: result operatorTokens. - result inToken: ((nodes at: 1) at: 37). - result weakToken: ((nodes at: 1) at: 38). - result unownedToken: ((nodes at: 1) at: 39). - result unownedLeftParensafeRightParenToken: ((nodes at: 1) at: 40). - result unownedLeftParenunsafeRightParenToken: ((nodes at: 1) at: 41). - result addNodes: ((nodes at: 1) at: 42) to: result statements. - result addTokens: ((nodes at: 1) at: 43) to: result dynamicTypeTokens. - result addToken: (nodes at: 2) to: result leftBracketTokens. - result addObjects: ((nodes at: 3) at: 1) to: result expressions. - result addTokens: ((nodes at: 3) at: 2) to: result commaTokens. - result addToken: (nodes at: 4) to: result rightBracketTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForsubscript_head1: nodes [ - | result | - result := Array new: 29. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - self addAll: ((nodes at: 1) at: 6) to: (result at: 6). - self addAll: ((nodes at: 1) at: 7) to: (result at: 7). - self addAll: ((nodes at: 1) at: 8) to: (result at: 8). - self addAll: ((nodes at: 1) at: 9) to: (result at: 9). - self addAll: ((nodes at: 1) at: 10) to: (result at: 10). - self addAll: ((nodes at: 1) at: 11) to: (result at: 11). - self addAll: ((nodes at: 1) at: 12) to: (result at: 12). - result at: 13 put: (nodes at: 2). - self addAll: ((nodes at: 3) at: 1) to: (result at: 3). - self addAll: ((nodes at: 3) at: 2) to: (result at: 4). - self addAll: ((nodes at: 3) at: 3) to: (result at: 14). - self addAll: ((nodes at: 3) at: 4) to: (result at: 15). - self addAll: ((nodes at: 3) at: 5) to: (result at: 1). - self addAll: ((nodes at: 3) at: 6) to: (result at: 2). - self addAll: ((nodes at: 3) at: 7) to: (result at: 16). - self addAll: ((nodes at: 3) at: 8) to: (result at: 5). - self addAll: ((nodes at: 3) at: 9) to: (result at: 6). - self addAll: ((nodes at: 3) at: 10) to: (result at: 17). - self addAll: ((nodes at: 3) at: 11) to: (result at: 18). - self addAll: ((nodes at: 3) at: 12) to: (result at: 19). - self addAll: ((nodes at: 3) at: 13) to: (result at: 20). - self addAll: ((nodes at: 3) at: 14) to: (result at: 21). - self addAll: ((nodes at: 3) at: 15) to: (result at: 22). - self addAll: ((nodes at: 3) at: 16) to: (result at: 23). - self addAll: ((nodes at: 3) at: 17) to: (result at: 24). - self addAll: ((nodes at: 3) at: 18) to: (result at: 25). - self addAll: ((nodes at: 3) at: 19) to: (result at: 29). - self addAll: ((nodes at: 3) at: 20) to: (result at: 26). - self addAll: ((nodes at: 3) at: 21) to: (result at: 27). - self addAll: ((nodes at: 3) at: 22) to: (result at: 28). - self addAll: ((nodes at: 3) at: 23) to: (result at: 7). - self addAll: ((nodes at: 3) at: 24) to: (result at: 8). - self addAll: ((nodes at: 3) at: 25) to: (result at: 9). - self addAll: ((nodes at: 3) at: 26) to: (result at: 10). - self addAll: ((nodes at: 3) at: 27) to: (result at: 11). - self addAll: ((nodes at: 3) at: 28) to: (result at: 12). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForsubscript_result1: nodes [ - | result | - result := Array new: 24. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - self addAll: ((nodes at: 2) at: 3) to: (result at: 4). - self addAll: ((nodes at: 2) at: 4) to: (result at: 5). - self addAll: ((nodes at: 2) at: 5) to: (result at: 6). - self addAll: ((nodes at: 2) at: 6) to: (result at: 7). - self addAll: ((nodes at: 2) at: 7) to: (result at: 8). - self addAll: ((nodes at: 2) at: 8) to: (result at: 9). - self addAll: ((nodes at: 2) at: 9) to: (result at: 10). - self addAll: ((nodes at: 2) at: 10) to: (result at: 11). - self addAll: ((nodes at: 2) at: 11) to: (result at: 12). - self addAll: ((nodes at: 2) at: 12) to: (result at: 13). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForsuperclass_initializer_expression1: nodes [ - | result | - result := SwiftSuperclassInitializerExpressionNode new. - result superToken: (nodes at: 1). - result periodToken: (nodes at: 2). - result initToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForsuperclass_method_expression1: nodes [ - | result | - result := SwiftSuperclassMethodExpressionNode new. - result superToken: (nodes at: 1). - result periodToken: (nodes at: 2). - result identifierToken: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForsuperclass_subscript_expression1: nodes [ - | result | - result := SwiftSuperclassSubscriptExpressionNode new. - result superToken: (nodes at: 1). - result leftBracketToken: (nodes at: 2). - result expression: (nodes at: 3). - result rightBracketToken: (nodes at: 4). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForswitch_case1: nodes [ - | result | - result := Array new: 34. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - result at: 30 put: (OrderedCollection new: 2). - result at: 31 put: (OrderedCollection new: 2). - result at: 32 put: (OrderedCollection new: 2). - result at: 1 put: ((nodes at: 1) at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - self addAll: ((nodes at: 1) at: 6) to: (result at: 6). - self addAll: ((nodes at: 1) at: 7) to: (result at: 7). - self addAll: ((nodes at: 1) at: 8) to: (result at: 8). - self addAll: ((nodes at: 1) at: 9) to: (result at: 9). - self addAll: ((nodes at: 1) at: 10) to: (result at: 10). - self addAll: ((nodes at: 1) at: 11) to: (result at: 11). - self addAll: ((nodes at: 1) at: 12) to: (result at: 12). - self addAll: ((nodes at: 1) at: 13) to: (result at: 13). - self addAll: ((nodes at: 1) at: 14) to: (result at: 14). - self addAll: ((nodes at: 1) at: 15) to: (result at: 15). - self addAll: ((nodes at: 1) at: 16) to: (result at: 16). - self addAll: ((nodes at: 1) at: 17) to: (result at: 17). - self addAll: ((nodes at: 1) at: 18) to: (result at: 18). - self addAll: ((nodes at: 1) at: 19) to: (result at: 19). - self addAll: ((nodes at: 1) at: 20) to: (result at: 20). - self addAll: ((nodes at: 1) at: 21) to: (result at: 21). - self addAll: ((nodes at: 1) at: 22) to: (result at: 22). - self addAll: ((nodes at: 1) at: 23) to: (result at: 23). - self addAll: ((nodes at: 1) at: 24) to: (result at: 24). - self addAll: ((nodes at: 1) at: 25) to: (result at: 25). - self addAll: ((nodes at: 1) at: 26) to: (result at: 26). - self addAll: ((nodes at: 1) at: 27) to: (result at: 27). - self addAll: ((nodes at: 1) at: 28) to: (result at: 28). - self addAll: ((nodes at: 1) at: 29) to: (result at: 29). - self addAll: ((nodes at: 1) at: 30) to: (result at: 30). - self addAll: ((nodes at: 1) at: 31) to: (result at: 31). - self addAll: (nodes at: 2) to: (result at: 32). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForswitch_case2: nodes [ - | result | - result := Array new: 34. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - result at: 30 put: (OrderedCollection new: 2). - result at: 31 put: (OrderedCollection new: 2). - result at: 32 put: (OrderedCollection new: 2). - result at: 1 put: ((nodes at: 1) at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - self addAll: ((nodes at: 1) at: 6) to: (result at: 6). - self addAll: ((nodes at: 1) at: 7) to: (result at: 7). - self addAll: ((nodes at: 1) at: 8) to: (result at: 8). - self addAll: ((nodes at: 1) at: 9) to: (result at: 9). - self addAll: ((nodes at: 1) at: 10) to: (result at: 10). - self addAll: ((nodes at: 1) at: 11) to: (result at: 11). - self addAll: ((nodes at: 1) at: 12) to: (result at: 12). - self addAll: ((nodes at: 1) at: 13) to: (result at: 13). - self addAll: ((nodes at: 1) at: 14) to: (result at: 14). - self addAll: ((nodes at: 1) at: 15) to: (result at: 15). - self addAll: ((nodes at: 1) at: 16) to: (result at: 16). - self addAll: ((nodes at: 1) at: 17) to: (result at: 17). - self addAll: ((nodes at: 1) at: 18) to: (result at: 18). - self addAll: ((nodes at: 1) at: 19) to: (result at: 19). - self addAll: ((nodes at: 1) at: 20) to: (result at: 20). - self addAll: ((nodes at: 1) at: 21) to: (result at: 21). - self addAll: ((nodes at: 1) at: 22) to: (result at: 22). - self addAll: ((nodes at: 1) at: 23) to: (result at: 23). - self addAll: ((nodes at: 1) at: 24) to: (result at: 24). - self addAll: ((nodes at: 1) at: 25) to: (result at: 25). - self addAll: ((nodes at: 1) at: 26) to: (result at: 26). - self addAll: ((nodes at: 1) at: 27) to: (result at: 27). - self addAll: ((nodes at: 1) at: 28) to: (result at: 28). - self addAll: ((nodes at: 1) at: 29) to: (result at: 29). - self addAll: ((nodes at: 1) at: 30) to: (result at: 30). - self addAll: ((nodes at: 1) at: 31) to: (result at: 31). - result at: 33 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForswitch_case3: nodes [ - | result | - result := Array new: 34. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - result at: 30 put: (OrderedCollection new: 2). - result at: 31 put: (OrderedCollection new: 2). - result at: 32 put: (OrderedCollection new: 2). - result at: 34 put: ((nodes at: 1) at: 1). - self add: ((nodes at: 1) at: 2) to: (result at: 3). - self addAll: (nodes at: 2) to: (result at: 32). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForswitch_case4: nodes [ - | result | - result := Array new: 34. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - result at: 30 put: (OrderedCollection new: 2). - result at: 31 put: (OrderedCollection new: 2). - result at: 32 put: (OrderedCollection new: 2). - result at: 34 put: ((nodes at: 1) at: 1). - self add: ((nodes at: 1) at: 2) to: (result at: 3). - result at: 33 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForswitch_cases1: nodes [ - | result | - result := Array new: 34. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - result at: 30 put: (OrderedCollection new: 2). - result at: 31 put: (OrderedCollection new: 2). - result at: 32 put: (OrderedCollection new: 2). - result at: 33 put: (OrderedCollection new: 2). - result at: 34 put: (OrderedCollection new: 2). - self add: ((nodes at: 1) at: 1) to: (result at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - self addAll: ((nodes at: 1) at: 6) to: (result at: 6). - self addAll: ((nodes at: 1) at: 7) to: (result at: 7). - self addAll: ((nodes at: 1) at: 8) to: (result at: 8). - self addAll: ((nodes at: 1) at: 9) to: (result at: 9). - self addAll: ((nodes at: 1) at: 10) to: (result at: 10). - self addAll: ((nodes at: 1) at: 11) to: (result at: 11). - self addAll: ((nodes at: 1) at: 12) to: (result at: 12). - self addAll: ((nodes at: 1) at: 13) to: (result at: 13). - self addAll: ((nodes at: 1) at: 14) to: (result at: 14). - self addAll: ((nodes at: 1) at: 15) to: (result at: 15). - self addAll: ((nodes at: 1) at: 16) to: (result at: 16). - self addAll: ((nodes at: 1) at: 17) to: (result at: 17). - self addAll: ((nodes at: 1) at: 18) to: (result at: 18). - self addAll: ((nodes at: 1) at: 19) to: (result at: 19). - self addAll: ((nodes at: 1) at: 20) to: (result at: 20). - self addAll: ((nodes at: 1) at: 21) to: (result at: 21). - self addAll: ((nodes at: 1) at: 22) to: (result at: 22). - self addAll: ((nodes at: 1) at: 23) to: (result at: 23). - self addAll: ((nodes at: 1) at: 24) to: (result at: 24). - self addAll: ((nodes at: 1) at: 25) to: (result at: 25). - self addAll: ((nodes at: 1) at: 26) to: (result at: 26). - self addAll: ((nodes at: 1) at: 27) to: (result at: 27). - self addAll: ((nodes at: 1) at: 28) to: (result at: 28). - self addAll: ((nodes at: 1) at: 29) to: (result at: 29). - self addAll: ((nodes at: 1) at: 30) to: (result at: 30). - self addAll: ((nodes at: 1) at: 31) to: (result at: 31). - self addAll: ((nodes at: 1) at: 32) to: (result at: 32). - self add: ((nodes at: 1) at: 33) to: (result at: 33). - self add: ((nodes at: 1) at: 34) to: (result at: 34). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForswitch_cases2: nodes [ - | result | - result := nodes at: 1. - self add: ((nodes at: 2) at: 1) to: (result at: 1). - self addAll: ((nodes at: 2) at: 2) to: (result at: 2). - self addAll: ((nodes at: 2) at: 3) to: (result at: 3). - self addAll: ((nodes at: 2) at: 4) to: (result at: 4). - self addAll: ((nodes at: 2) at: 5) to: (result at: 5). - self addAll: ((nodes at: 2) at: 6) to: (result at: 6). - self addAll: ((nodes at: 2) at: 7) to: (result at: 7). - self addAll: ((nodes at: 2) at: 8) to: (result at: 8). - self addAll: ((nodes at: 2) at: 9) to: (result at: 9). - self addAll: ((nodes at: 2) at: 10) to: (result at: 10). - self addAll: ((nodes at: 2) at: 11) to: (result at: 11). - self addAll: ((nodes at: 2) at: 12) to: (result at: 12). - self addAll: ((nodes at: 2) at: 13) to: (result at: 13). - self addAll: ((nodes at: 2) at: 14) to: (result at: 14). - self addAll: ((nodes at: 2) at: 15) to: (result at: 15). - self addAll: ((nodes at: 2) at: 16) to: (result at: 16). - self addAll: ((nodes at: 2) at: 17) to: (result at: 17). - self addAll: ((nodes at: 2) at: 18) to: (result at: 18). - self addAll: ((nodes at: 2) at: 19) to: (result at: 19). - self addAll: ((nodes at: 2) at: 20) to: (result at: 20). - self addAll: ((nodes at: 2) at: 21) to: (result at: 21). - self addAll: ((nodes at: 2) at: 22) to: (result at: 22). - self addAll: ((nodes at: 2) at: 23) to: (result at: 23). - self addAll: ((nodes at: 2) at: 24) to: (result at: 24). - self addAll: ((nodes at: 2) at: 25) to: (result at: 25). - self addAll: ((nodes at: 2) at: 26) to: (result at: 26). - self addAll: ((nodes at: 2) at: 27) to: (result at: 27). - self addAll: ((nodes at: 2) at: 28) to: (result at: 28). - self addAll: ((nodes at: 2) at: 29) to: (result at: 29). - self addAll: ((nodes at: 2) at: 30) to: (result at: 30). - self addAll: ((nodes at: 2) at: 31) to: (result at: 31). - self addAll: ((nodes at: 2) at: 32) to: (result at: 32). - self add: ((nodes at: 2) at: 33) to: (result at: 33). - self add: ((nodes at: 2) at: 34) to: (result at: 34). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForswitch_statement1: nodes [ - | result | - result := SwiftSwitchStatementNode new. - result switchToken: (nodes at: 1). - result addObject: (nodes at: 2) to: result expressions. - result addToken: (nodes at: 3) to: result leftBraceTokens. - result addTokens: ((nodes at: 4) at: 1) to: result caseTokens. - result addTokens: ((nodes at: 4) at: 2) to: result _Tokens. - result addTokens: ((nodes at: 4) at: 3) to: result colonTokens. - result addTokens: ((nodes at: 4) at: 4) to: result identifierTokens. - result addTokens: ((nodes at: 4) at: 5) to: result leftParenTokens. - result addTokens: ((nodes at: 4) at: 6) to: result rightParenTokens. - result addTokens: ((nodes at: 4) at: 7) to: result leftBracketTokens. - result addTokens: ((nodes at: 4) at: 8) to: result rightBracketTokens. - result - addTokens: ((nodes at: 4) at: 9) - to: result minusGreaterThanTokens. - result addTokens: ((nodes at: 4) at: 10) to: result periodTokens. - result - addTokens: ((nodes at: 4) at: 11) - to: result questionMarkTokens. - result addTokens: ((nodes at: 4) at: 12) to: result bangTokens. - result addTokens: ((nodes at: 4) at: 13) to: result protocolTokens. - result addTokens: ((nodes at: 4) at: 14) to: result lessThanTokens. - result addTokens: ((nodes at: 4) at: 15) to: result greaterThanTokens. - result addTokens: ((nodes at: 4) at: 16) to: result typeTokens. - result addTokens: ((nodes at: 4) at: 17) to: result commaTokens. - result - addTokens: ((nodes at: 4) at: 18) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 4) at: 19) to: result varTokens. - result addTokens: ((nodes at: 4) at: 20) to: result letTokens. - result addObjects: ((nodes at: 4) at: 21) to: result expressions. - result addTokens: ((nodes at: 4) at: 22) to: result isTokens. - result addTokens: ((nodes at: 4) at: 23) to: result asTokens. - result addTokens: ((nodes at: 4) at: 24) to: result inoutTokens. - result addTokens: ((nodes at: 4) at: 25) to: result whereTokens. - result addNodes: ((nodes at: 4) at: 26) to: result statements. - result addTokens: ((nodes at: 4) at: 27) to: result semicolonToken. - result addTokens: ((nodes at: 4) at: 28) to: result defaultTokens. - result addTokens: ((nodes at: 4) at: 29) to: result leftBraceTokens. - result addTokens: ((nodes at: 4) at: 30) to: result rightBraceTokens. - result - addTokens: ((nodes at: 4) at: 31) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 4) at: 32) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 4) at: 33) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 4) at: 34) to: result operatorTokens. - result addToken: (nodes at: 5) to: result rightBraceTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFortuple_pattern1: nodes [ - | result | - result := Array new: 29. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - self addAll: ((nodes at: 2) at: 3) to: (result at: 4). - self addAll: ((nodes at: 2) at: 4) to: (result at: 1). - self addAll: ((nodes at: 2) at: 5) to: (result at: 5). - self addAll: ((nodes at: 2) at: 6) to: (result at: 6). - self addAll: ((nodes at: 2) at: 7) to: (result at: 7). - self addAll: ((nodes at: 2) at: 8) to: (result at: 8). - self addAll: ((nodes at: 2) at: 9) to: (result at: 9). - self addAll: ((nodes at: 2) at: 10) to: (result at: 10). - self addAll: ((nodes at: 2) at: 11) to: (result at: 11). - self addAll: ((nodes at: 2) at: 12) to: (result at: 12). - self addAll: ((nodes at: 2) at: 13) to: (result at: 13). - self addAll: ((nodes at: 2) at: 14) to: (result at: 14). - self addAll: ((nodes at: 2) at: 15) to: (result at: 15). - self addAll: ((nodes at: 2) at: 16) to: (result at: 16). - self addAll: ((nodes at: 2) at: 17) to: (result at: 17). - self addAll: ((nodes at: 2) at: 18) to: (result at: 18). - self addAll: ((nodes at: 2) at: 19) to: (result at: 19). - self addAll: ((nodes at: 2) at: 20) to: (result at: 20). - self addAll: ((nodes at: 2) at: 21) to: (result at: 21). - self addAll: ((nodes at: 2) at: 22) to: (result at: 22). - self addAll: ((nodes at: 2) at: 23) to: (result at: 23). - self addAll: ((nodes at: 2) at: 24) to: (result at: 24). - self addAll: ((nodes at: 2) at: 25) to: (result at: 25). - self addAll: ((nodes at: 2) at: 26) to: (result at: 26). - self addAll: ((nodes at: 2) at: 27) to: (result at: 27). - self addAll: ((nodes at: 2) at: 28) to: (result at: 28). - self addAll: ((nodes at: 2) at: 29) to: (result at: 29). - self add: (nodes at: 3) to: (result at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFortuple_pattern_element_list2: nodes [ - | result | - result := nodes at: 3. - self addAllFirst: ((nodes at: 1) at: 1) to: (result at: 1). - self addAllFirst: ((nodes at: 1) at: 2) to: (result at: 2). - self addAllFirst: ((nodes at: 1) at: 3) to: (result at: 3). - self addAllFirst: ((nodes at: 1) at: 4) to: (result at: 4). - self addAllFirst: ((nodes at: 1) at: 5) to: (result at: 5). - self addAllFirst: ((nodes at: 1) at: 6) to: (result at: 6). - self addAllFirst: ((nodes at: 1) at: 7) to: (result at: 7). - self addAllFirst: ((nodes at: 1) at: 8) to: (result at: 8). - self addAllFirst: ((nodes at: 1) at: 9) to: (result at: 9). - self addAllFirst: ((nodes at: 1) at: 10) to: (result at: 10). - self addAllFirst: ((nodes at: 1) at: 11) to: (result at: 11). - self addAllFirst: ((nodes at: 1) at: 12) to: (result at: 12). - self addAllFirst: ((nodes at: 1) at: 13) to: (result at: 13). - self addAllFirst: ((nodes at: 1) at: 14) to: (result at: 14). - self addAllFirst: ((nodes at: 1) at: 15) to: (result at: 15). - self addAllFirst: ((nodes at: 1) at: 16) to: (result at: 16). - self addAllFirst: ((nodes at: 1) at: 17) to: (result at: 17). - self addAllFirst: ((nodes at: 1) at: 18) to: (result at: 18). - self addAllFirst: ((nodes at: 1) at: 19) to: (result at: 19). - self addAllFirst: ((nodes at: 1) at: 20) to: (result at: 20). - self addAllFirst: ((nodes at: 1) at: 21) to: (result at: 21). - self addAllFirst: ((nodes at: 1) at: 22) to: (result at: 22). - self addAllFirst: ((nodes at: 1) at: 23) to: (result at: 23). - self addAllFirst: ((nodes at: 1) at: 24) to: (result at: 24). - self addAllFirst: ((nodes at: 1) at: 25) to: (result at: 25). - self addAllFirst: ((nodes at: 1) at: 26) to: (result at: 26). - self addAllFirst: ((nodes at: 1) at: 27) to: (result at: 27). - self addAllFirst: ((nodes at: 1) at: 28) to: (result at: 28). - self addAllFirst: ((nodes at: 1) at: 29) to: (result at: 29). - self addFirst: (nodes at: 2) to: (result at: 22). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFortuple_type1: nodes [ - | result | - result := SwiftTupleTypeNode new. - result addToken: (nodes at: 1) to: result leftParenTokens. - result addTokens: ((nodes at: 2) at: 1) to: result _Tokens. - result addTokens: ((nodes at: 2) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 2) at: 3) to: result leftParenTokens. - result addTokens: ((nodes at: 2) at: 4) to: result rightParenTokens. - result addTokens: ((nodes at: 2) at: 5) to: result inoutTokens. - result addTokens: ((nodes at: 2) at: 6) to: result leftBracketTokens. - result addTokens: ((nodes at: 2) at: 7) to: result rightBracketTokens. - result addTokens: ((nodes at: 2) at: 8) to: result colonTokens. - result - addTokens: ((nodes at: 2) at: 9) - to: result minusGreaterThanTokens. - result addTokens: ((nodes at: 2) at: 10) to: result periodTokens. - result - addTokens: ((nodes at: 2) at: 11) - to: result questionMarkTokens. - result addTokens: ((nodes at: 2) at: 12) to: result bangTokens. - result addTokens: ((nodes at: 2) at: 13) to: result protocolTokens. - result addTokens: ((nodes at: 2) at: 14) to: result lessThanTokens. - result addTokens: ((nodes at: 2) at: 15) to: result greaterThanTokens. - result addTokens: ((nodes at: 2) at: 16) to: result typeTokens. - result addTokens: ((nodes at: 2) at: 17) to: result commaTokens. - result - addTokens: ((nodes at: 2) at: 18) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 2) at: 19) to: result leftBraceTokens. - result addTokens: ((nodes at: 2) at: 20) to: result rightBraceTokens. - result - addTokens: ((nodes at: 2) at: 21) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 2) at: 22) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 2) at: 23) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 2) at: 24) to: result operatorTokens. - result addToken: (nodes at: 3) to: result rightParenTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFortuple_type_body1: nodes [ - | result | - result := Array new: 24. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 6). - self addAll: ((nodes at: 1) at: 6) to: (result at: 7). - self addAll: ((nodes at: 1) at: 7) to: (result at: 19). - self addAll: ((nodes at: 1) at: 8) to: (result at: 20). - self addAll: ((nodes at: 1) at: 9) to: (result at: 21). - self addAll: ((nodes at: 1) at: 10) to: (result at: 22). - self addAll: ((nodes at: 1) at: 11) to: (result at: 23). - self addAll: ((nodes at: 1) at: 12) to: (result at: 24). - self addAll: ((nodes at: 1) at: 13) to: (result at: 5). - self addAll: ((nodes at: 1) at: 14) to: (result at: 8). - self addAll: ((nodes at: 1) at: 15) to: (result at: 9). - self addAll: ((nodes at: 1) at: 16) to: (result at: 10). - self addAll: ((nodes at: 1) at: 17) to: (result at: 11). - self addAll: ((nodes at: 1) at: 18) to: (result at: 12). - self addAll: ((nodes at: 1) at: 19) to: (result at: 13). - self addAll: ((nodes at: 1) at: 20) to: (result at: 14). - self addAll: ((nodes at: 1) at: 21) to: (result at: 15). - self addAll: ((nodes at: 1) at: 22) to: (result at: 16). - self addAll: ((nodes at: 1) at: 23) to: (result at: 17). - self addAll: ((nodes at: 1) at: 24) to: (result at: 18). - self add: (nodes at: 2) to: (result at: 18). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFortuple_type_element1: nodes [ - | result | - result := Array new: 24. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - self addAll: ((nodes at: 1) at: 6) to: (result at: 6). - self addAll: ((nodes at: 1) at: 7) to: (result at: 7). - self addAll: ((nodes at: 1) at: 8) to: (result at: 8). - self addAll: ((nodes at: 1) at: 9) to: (result at: 9). - self addAll: ((nodes at: 1) at: 10) to: (result at: 10). - self addAll: ((nodes at: 1) at: 11) to: (result at: 11). - self addAll: ((nodes at: 1) at: 12) to: (result at: 12). - self add: (nodes at: 2) to: (result at: 13). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFortuple_type_element2: nodes [ - | result | - result := Array new: 24. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 13). - self add: (nodes at: 2) to: (result at: 2). - self addAll: ((nodes at: 3) at: 1) to: (result at: 14). - self addAll: ((nodes at: 3) at: 2) to: (result at: 1). - self addAll: ((nodes at: 3) at: 3) to: (result at: 2). - self addAll: ((nodes at: 3) at: 4) to: (result at: 3). - self addAll: ((nodes at: 3) at: 5) to: (result at: 4). - self addAll: ((nodes at: 3) at: 6) to: (result at: 5). - self addAll: ((nodes at: 3) at: 7) to: (result at: 6). - self addAll: ((nodes at: 3) at: 8) to: (result at: 7). - self addAll: ((nodes at: 3) at: 9) to: (result at: 8). - self addAll: ((nodes at: 3) at: 10) to: (result at: 9). - self addAll: ((nodes at: 3) at: 11) to: (result at: 10). - self addAll: ((nodes at: 3) at: 12) to: (result at: 11). - self addAll: ((nodes at: 3) at: 13) to: (result at: 12). - self addAll: ((nodes at: 3) at: 14) to: (result at: 15). - self addAll: ((nodes at: 3) at: 15) to: (result at: 16). - self addAll: ((nodes at: 3) at: 16) to: (result at: 17). - self addAll: ((nodes at: 3) at: 17) to: (result at: 18). - self addAll: ((nodes at: 3) at: 18) to: (result at: 19). - self addAll: ((nodes at: 3) at: 19) to: (result at: 20). - self addAll: ((nodes at: 3) at: 20) to: (result at: 21). - self addAll: ((nodes at: 3) at: 21) to: (result at: 22). - self addAll: ((nodes at: 3) at: 22) to: (result at: 23). - self addAll: ((nodes at: 3) at: 23) to: (result at: 24). - self addAll: ((nodes at: 3) at: 24) to: (result at: 13). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFortuple_type_element_list2: nodes [ - | result | - result := nodes at: 3. - self addAllFirst: ((nodes at: 1) at: 1) to: (result at: 1). - self addAllFirst: ((nodes at: 1) at: 2) to: (result at: 2). - self addAllFirst: ((nodes at: 1) at: 3) to: (result at: 3). - self addAllFirst: ((nodes at: 1) at: 4) to: (result at: 4). - self addAllFirst: ((nodes at: 1) at: 5) to: (result at: 5). - self addAllFirst: ((nodes at: 1) at: 6) to: (result at: 6). - self addAllFirst: ((nodes at: 1) at: 7) to: (result at: 7). - self addAllFirst: ((nodes at: 1) at: 8) to: (result at: 8). - self addAllFirst: ((nodes at: 1) at: 9) to: (result at: 9). - self addAllFirst: ((nodes at: 1) at: 10) to: (result at: 10). - self addAllFirst: ((nodes at: 1) at: 11) to: (result at: 11). - self addAllFirst: ((nodes at: 1) at: 12) to: (result at: 12). - self addAllFirst: ((nodes at: 1) at: 13) to: (result at: 13). - self addAllFirst: ((nodes at: 1) at: 14) to: (result at: 14). - self addAllFirst: ((nodes at: 1) at: 15) to: (result at: 15). - self addAllFirst: ((nodes at: 1) at: 16) to: (result at: 16). - self addAllFirst: ((nodes at: 1) at: 17) to: (result at: 17). - self addAllFirst: ((nodes at: 1) at: 18) to: (result at: 18). - self addAllFirst: ((nodes at: 1) at: 19) to: (result at: 19). - self addAllFirst: ((nodes at: 1) at: 20) to: (result at: 20). - self addAllFirst: ((nodes at: 1) at: 21) to: (result at: 21). - self addAllFirst: ((nodes at: 1) at: 22) to: (result at: 22). - self addAllFirst: ((nodes at: 1) at: 23) to: (result at: 23). - self addAllFirst: ((nodes at: 1) at: 24) to: (result at: 24). - self addFirst: (nodes at: 2) to: (result at: 23). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFortype_casting_operator1: nodes [ - | result | - result := Array new: 4. - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFortype_casting_operator2: nodes [ - | result | - result := Array new: 4. - result at: 3 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFortype_casting_operator3: nodes [ - | result | - result := Array new: 4. - result at: 3 put: (nodes at: 1). - result at: 4 put: (nodes at: 2). - result at: 2 put: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFortype_casting_pattern1: nodes [ - | result | - result := Array new: 29. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - self add: ((nodes at: 1) at: 1) to: (result at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - self addAll: ((nodes at: 1) at: 6) to: (result at: 6). - self addAll: ((nodes at: 1) at: 7) to: (result at: 7). - self addAll: ((nodes at: 1) at: 8) to: (result at: 8). - self addAll: ((nodes at: 1) at: 9) to: (result at: 9). - self addAll: ((nodes at: 1) at: 10) to: (result at: 10). - self addAll: ((nodes at: 1) at: 11) to: (result at: 11). - self addAll: ((nodes at: 1) at: 12) to: (result at: 12). - self addAll: ((nodes at: 1) at: 13) to: (result at: 13). - self addAll: ((nodes at: 1) at: 14) to: (result at: 14). - self addAll: ((nodes at: 1) at: 15) to: (result at: 15). - self addAll: ((nodes at: 1) at: 16) to: (result at: 16). - self addAll: ((nodes at: 1) at: 17) to: (result at: 17). - self addAll: ((nodes at: 1) at: 18) to: (result at: 18). - self addAll: ((nodes at: 1) at: 19) to: (result at: 19). - self addAll: ((nodes at: 1) at: 20) to: (result at: 20). - self addAll: ((nodes at: 1) at: 21) to: (result at: 21). - self addAll: ((nodes at: 1) at: 22) to: (result at: 22). - self addAll: ((nodes at: 1) at: 23) to: (result at: 23). - self addAll: ((nodes at: 1) at: 24) to: (result at: 24). - self addAll: ((nodes at: 1) at: 25) to: (result at: 25). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFortype_casting_pattern2: nodes [ - | result | - result := Array new: 29. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 18). - self addAll: ((nodes at: 1) at: 2) to: (result at: 4). - self addAll: ((nodes at: 1) at: 3) to: (result at: 15). - self addAll: ((nodes at: 1) at: 4) to: (result at: 7). - self addAll: ((nodes at: 1) at: 5) to: (result at: 8). - self addAll: ((nodes at: 1) at: 6) to: (result at: 2). - self addAll: ((nodes at: 1) at: 7) to: (result at: 3). - self addAll: ((nodes at: 1) at: 8) to: (result at: 20). - self addAll: ((nodes at: 1) at: 9) to: (result at: 21). - self addAll: ((nodes at: 1) at: 10) to: (result at: 22). - self addAll: ((nodes at: 1) at: 11) to: (result at: 23). - self addAll: ((nodes at: 1) at: 12) to: (result at: 24). - self addAll: ((nodes at: 1) at: 13) to: (result at: 25). - self addAll: ((nodes at: 1) at: 14) to: (result at: 5). - self addAll: ((nodes at: 1) at: 15) to: (result at: 6). - self addAll: ((nodes at: 1) at: 16) to: (result at: 9). - self addAll: ((nodes at: 1) at: 17) to: (result at: 10). - self addAll: ((nodes at: 1) at: 18) to: (result at: 11). - self addAll: ((nodes at: 1) at: 19) to: (result at: 12). - self addAll: ((nodes at: 1) at: 20) to: (result at: 13). - self addAll: ((nodes at: 1) at: 21) to: (result at: 14). - self addAll: ((nodes at: 1) at: 22) to: (result at: 16). - self addAll: ((nodes at: 1) at: 23) to: (result at: 17). - self addAll: ((nodes at: 1) at: 24) to: (result at: 19). - self addAll: ((nodes at: 1) at: 25) to: (result at: 26). - self addAll: ((nodes at: 1) at: 26) to: (result at: 27). - self addAll: ((nodes at: 1) at: 27) to: (result at: 28). - self addAll: ((nodes at: 1) at: 28) to: (result at: 1). - self addAll: ((nodes at: 1) at: 29) to: (result at: 29). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFortype_identifier1: nodes [ - | result | - result := SwiftTypeIdentifierNode new. - result addToken: (nodes at: 1) to: result identifierTokens. - result addToken: ((nodes at: 2) at: 1) to: result lessThanTokens. - result addTokens: ((nodes at: 2) at: 2) to: result commaTokens. - result addToken: ((nodes at: 2) at: 3) to: result greaterThanTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFortype_identifier2: nodes [ - | result | - result := nodes at: 4. - result addFirstToken: (nodes at: 1) to: result identifierTokens. - result addFirstToken: ((nodes at: 2) at: 1) to: result lessThanTokens. - result addFirstTokens: ((nodes at: 2) at: 2) to: result commaTokens. - result - addFirstToken: ((nodes at: 2) at: 3) - to: result greaterThanTokens. - result addFirstToken: (nodes at: 3) to: result periodTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFortype_inheritance_clause1: nodes [ - | result | - result := Array new: 6. - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 1 put: (nodes at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - self addAll: ((nodes at: 2) at: 3) to: (result at: 6). - self addAll: ((nodes at: 2) at: 4) to: (result at: 4). - self addAll: ((nodes at: 2) at: 5) to: (result at: 5). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFortype_inheritance_list1: nodes [ - | result | - result := Array new: 5. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFortype_inheritance_list2: nodes [ - | result | - result := nodes at: 1. - self add: (nodes at: 2) to: (result at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFortypealias_declaration1: nodes [ - | result | - result := SwiftTypealiasDeclarationNode new. - result typealiasToken: ((nodes at: 1) at: 1). - result addToken: ((nodes at: 1) at: 2) to: result identifierTokens. - result equalToken: ((nodes at: 2) at: 1). - result addTokens: ((nodes at: 2) at: 2) to: result leftBracketTokens. - result addTokens: ((nodes at: 2) at: 3) to: result rightBracketTokens. - result addTokens: ((nodes at: 2) at: 4) to: result colonTokens. - result - addTokens: ((nodes at: 2) at: 5) - to: result minusGreaterThanTokens. - result addTokens: ((nodes at: 2) at: 6) to: result periodTokens. - result addTokens: ((nodes at: 2) at: 7) to: result leftParenTokens. - result addTokens: ((nodes at: 2) at: 8) to: result rightParenTokens. - result addTokens: ((nodes at: 2) at: 9) to: result questionMarkTokens. - result addTokens: ((nodes at: 2) at: 10) to: result bangTokens. - result addTokens: ((nodes at: 2) at: 11) to: result protocolTokens. - result addTokens: ((nodes at: 2) at: 12) to: result lessThanTokens. - result addTokens: ((nodes at: 2) at: 13) to: result greaterThanTokens. - result addTokens: ((nodes at: 2) at: 14) to: result typeTokens. - result addTokens: ((nodes at: 2) at: 15) to: result identifierTokens. - result addTokens: ((nodes at: 2) at: 16) to: result commaTokens. - result - addTokens: ((nodes at: 2) at: 17) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 2) at: 18) to: result _Tokens. - result addTokens: ((nodes at: 2) at: 19) to: result inoutTokens. - result addTokens: ((nodes at: 2) at: 20) to: result leftBraceTokens. - result addTokens: ((nodes at: 2) at: 21) to: result rightBraceTokens. - result - addTokens: ((nodes at: 2) at: 22) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 2) at: 23) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 2) at: 24) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 2) at: 25) to: result operatorTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionFortypealias_head1: nodes [ - | result | - result := Array new: 2. - result at: 1 put: (nodes at: 1). - result at: 2 put: (nodes at: 2). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForunion_style_enum1: nodes [ - | result | - result := Array new: 57. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - result at: 30 put: (OrderedCollection new: 2). - result at: 31 put: (OrderedCollection new: 2). - result at: 32 put: (OrderedCollection new: 2). - result at: 33 put: (OrderedCollection new: 2). - result at: 34 put: (OrderedCollection new: 2). - result at: 35 put: (OrderedCollection new: 2). - result at: 36 put: (OrderedCollection new: 2). - result at: 37 put: (OrderedCollection new: 2). - result at: 38 put: (OrderedCollection new: 2). - result at: 39 put: (OrderedCollection new: 2). - result at: 40 put: (OrderedCollection new: 2). - result at: 41 put: (OrderedCollection new: 2). - result at: 42 put: (OrderedCollection new: 2). - result at: 43 put: (OrderedCollection new: 2). - result at: 44 put: (OrderedCollection new: 2). - result at: 45 put: (OrderedCollection new: 2). - result at: 46 put: (OrderedCollection new: 2). - result at: 47 put: (OrderedCollection new: 2). - result at: 48 put: (OrderedCollection new: 2). - result at: 49 put: (OrderedCollection new: 2). - result at: 50 put: (OrderedCollection new: 2). - result at: 51 put: (OrderedCollection new: 2). - result at: 52 put: (OrderedCollection new: 2). - result at: 53 put: (OrderedCollection new: 2). - result at: 54 put: (OrderedCollection new: 2). - result at: 55 put: (OrderedCollection new: 2). - result at: 56 put: (OrderedCollection new: 2). - result at: 57 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 1). - self addAll: ((nodes at: 2) at: 3) to: (result at: 3). - self addAll: ((nodes at: 2) at: 4) to: (result at: 4). - self addAll: ((nodes at: 2) at: 5) to: (result at: 5). - self addAll: ((nodes at: 2) at: 6) to: (result at: 6). - self addAll: ((nodes at: 2) at: 7) to: (result at: 7). - self add: ((nodes at: 2) at: 8) to: (result at: 8). - self addAll: ((nodes at: 2) at: 9) to: (result at: 9). - self add: (nodes at: 3) to: (result at: 10). - self addAll: ((nodes at: 4) at: 1) to: (result at: 11). - self addAll: ((nodes at: 4) at: 2) to: (result at: 1). - self addAll: ((nodes at: 4) at: 3) to: (result at: 12). - self addAll: ((nodes at: 4) at: 4) to: (result at: 13). - self addAll: ((nodes at: 4) at: 5) to: (result at: 14). - self addAll: ((nodes at: 4) at: 6) to: (result at: 15). - self addAll: ((nodes at: 4) at: 7) to: (result at: 16). - self addAll: ((nodes at: 4) at: 8) to: (result at: 17). - self addAll: ((nodes at: 4) at: 9) to: (result at: 18). - self addAll: ((nodes at: 4) at: 10) to: (result at: 7). - self addAll: ((nodes at: 4) at: 11) to: (result at: 19). - self addAll: ((nodes at: 4) at: 12) to: (result at: 20). - self addAll: ((nodes at: 4) at: 13) to: (result at: 21). - self addAll: ((nodes at: 4) at: 14) to: (result at: 6). - self addAll: ((nodes at: 4) at: 15) to: (result at: 22). - self addAll: ((nodes at: 4) at: 16) to: (result at: 23). - self addAll: ((nodes at: 4) at: 17) to: (result at: 24). - self addAll: ((nodes at: 4) at: 18) to: (result at: 25). - self addAll: ((nodes at: 4) at: 19) to: (result at: 26). - self addAll: ((nodes at: 4) at: 20) to: (result at: 27). - self addAll: ((nodes at: 4) at: 21) to: (result at: 28). - self addAll: ((nodes at: 4) at: 22) to: (result at: 29). - self addAll: ((nodes at: 4) at: 23) to: (result at: 30). - self addAll: ((nodes at: 4) at: 24) to: (result at: 31). - self addAll: ((nodes at: 4) at: 25) to: (result at: 4). - self addAll: ((nodes at: 4) at: 26) to: (result at: 3). - self addAll: ((nodes at: 4) at: 27) to: (result at: 32). - self addAll: ((nodes at: 4) at: 28) to: (result at: 33). - self addAll: ((nodes at: 4) at: 29) to: (result at: 34). - self addAll: ((nodes at: 4) at: 30) to: (result at: 35). - self addAll: ((nodes at: 4) at: 31) to: (result at: 36). - self addAll: ((nodes at: 4) at: 32) to: (result at: 2). - self addAll: ((nodes at: 4) at: 33) to: (result at: 5). - self addAll: ((nodes at: 4) at: 34) to: (result at: 37). - self addAll: ((nodes at: 4) at: 35) to: (result at: 38). - self addAll: ((nodes at: 4) at: 36) to: (result at: 39). - self addAll: ((nodes at: 4) at: 37) to: (result at: 40). - self addAll: ((nodes at: 4) at: 38) to: (result at: 10). - self addAll: ((nodes at: 4) at: 39) to: (result at: 41). - self addAll: ((nodes at: 4) at: 40) to: (result at: 42). - self addAll: ((nodes at: 4) at: 41) to: (result at: 43). - self addAll: ((nodes at: 4) at: 42) to: (result at: 44). - self addAll: ((nodes at: 4) at: 43) to: (result at: 45). - self addAll: ((nodes at: 4) at: 44) to: (result at: 46). - self addAll: ((nodes at: 4) at: 45) to: (result at: 47). - self addAll: ((nodes at: 4) at: 46) to: (result at: 8). - self addAll: ((nodes at: 4) at: 47) to: (result at: 9). - self addAll: ((nodes at: 4) at: 48) to: (result at: 48). - self addAll: ((nodes at: 4) at: 49) to: (result at: 49). - self addAll: ((nodes at: 4) at: 50) to: (result at: 50). - self addAll: ((nodes at: 4) at: 51) to: (result at: 51). - self addAll: ((nodes at: 4) at: 52) to: (result at: 52). - self addAll: ((nodes at: 4) at: 53) to: (result at: 53). - self addAll: ((nodes at: 4) at: 54) to: (result at: 54). - self addAll: ((nodes at: 4) at: 55) to: (result at: 55). - self addAll: ((nodes at: 4) at: 56) to: (result at: 56). - self addAll: ((nodes at: 4) at: 57) to: (result at: 57). - self add: (nodes at: 5) to: (result at: 43). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForunion_style_enum_case1: nodes [ - | result | - result := Array new: 24. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForunion_style_enum_case_clause1: nodes [ - | result | - result := Array new: 25. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - self addAll: ((nodes at: 1) at: 6) to: (result at: 6). - self addAll: ((nodes at: 1) at: 7) to: (result at: 7). - self addAll: ((nodes at: 1) at: 8) to: (result at: 8). - self addAll: ((nodes at: 1) at: 9) to: (result at: 9). - self addAll: ((nodes at: 1) at: 10) to: (result at: 10). - self addAll: ((nodes at: 1) at: 11) to: (result at: 11). - self addAll: ((nodes at: 1) at: 12) to: (result at: 12). - result at: 13 put: (nodes at: 2). - self addAll: ((nodes at: 3) at: 1) to: (result at: 2). - self addAll: ((nodes at: 3) at: 2) to: (result at: 3). - self addAll: ((nodes at: 3) at: 3) to: (result at: 1). - self addAll: ((nodes at: 3) at: 4) to: (result at: 4). - self addAll: ((nodes at: 3) at: 5) to: (result at: 14). - self addAll: ((nodes at: 3) at: 6) to: (result at: 5). - self addAll: ((nodes at: 3) at: 7) to: (result at: 6). - self addAll: ((nodes at: 3) at: 8) to: (result at: 15). - self addAll: ((nodes at: 3) at: 9) to: (result at: 16). - self addAll: ((nodes at: 3) at: 10) to: (result at: 17). - self addAll: ((nodes at: 3) at: 11) to: (result at: 18). - self addAll: ((nodes at: 3) at: 12) to: (result at: 19). - self addAll: ((nodes at: 3) at: 13) to: (result at: 20). - self addAll: ((nodes at: 3) at: 14) to: (result at: 21). - self addAll: ((nodes at: 3) at: 15) to: (result at: 22). - self addAll: ((nodes at: 3) at: 16) to: (result at: 23). - self addAll: ((nodes at: 3) at: 17) to: (result at: 24). - self addAll: ((nodes at: 3) at: 18) to: (result at: 25). - self addAll: ((nodes at: 3) at: 19) to: (result at: 7). - self addAll: ((nodes at: 3) at: 20) to: (result at: 8). - self addAll: ((nodes at: 3) at: 21) to: (result at: 9). - self addAll: ((nodes at: 3) at: 22) to: (result at: 10). - self addAll: ((nodes at: 3) at: 23) to: (result at: 11). - self addAll: ((nodes at: 3) at: 24) to: (result at: 12). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForunion_style_enum_case_list2: nodes [ - | result | - result := nodes at: 3. - self addAllFirst: ((nodes at: 1) at: 1) to: (result at: 1). - self addAllFirst: ((nodes at: 1) at: 2) to: (result at: 2). - self addAllFirst: ((nodes at: 1) at: 3) to: (result at: 3). - self addAllFirst: ((nodes at: 1) at: 4) to: (result at: 4). - self addAllFirst: ((nodes at: 1) at: 5) to: (result at: 5). - self addAllFirst: ((nodes at: 1) at: 6) to: (result at: 6). - self addAllFirst: ((nodes at: 1) at: 7) to: (result at: 7). - self addAllFirst: ((nodes at: 1) at: 8) to: (result at: 8). - self addAllFirst: ((nodes at: 1) at: 9) to: (result at: 9). - self addAllFirst: ((nodes at: 1) at: 10) to: (result at: 10). - self addAllFirst: ((nodes at: 1) at: 11) to: (result at: 11). - self addAllFirst: ((nodes at: 1) at: 12) to: (result at: 12). - self addAllFirst: ((nodes at: 1) at: 13) to: (result at: 13). - self addAllFirst: ((nodes at: 1) at: 14) to: (result at: 14). - self addAllFirst: ((nodes at: 1) at: 15) to: (result at: 15). - self addAllFirst: ((nodes at: 1) at: 16) to: (result at: 16). - self addAllFirst: ((nodes at: 1) at: 17) to: (result at: 17). - self addAllFirst: ((nodes at: 1) at: 18) to: (result at: 18). - self addAllFirst: ((nodes at: 1) at: 19) to: (result at: 19). - self addAllFirst: ((nodes at: 1) at: 20) to: (result at: 20). - self addAllFirst: ((nodes at: 1) at: 21) to: (result at: 21). - self addAllFirst: ((nodes at: 1) at: 22) to: (result at: 22). - self addAllFirst: ((nodes at: 1) at: 23) to: (result at: 23). - self addAllFirst: ((nodes at: 1) at: 24) to: (result at: 24). - self addFirst: (nodes at: 2) to: (result at: 17). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForunion_style_enum_member2: nodes [ - | result | - result := Array new: 57. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - result at: 30 put: (OrderedCollection new: 2). - result at: 31 put: (OrderedCollection new: 2). - result at: 32 put: (OrderedCollection new: 2). - result at: 33 put: (OrderedCollection new: 2). - result at: 34 put: (OrderedCollection new: 2). - result at: 35 put: (OrderedCollection new: 2). - result at: 36 put: (OrderedCollection new: 2). - result at: 37 put: (OrderedCollection new: 2). - result at: 38 put: (OrderedCollection new: 2). - result at: 39 put: (OrderedCollection new: 2). - result at: 40 put: (OrderedCollection new: 2). - result at: 41 put: (OrderedCollection new: 2). - result at: 42 put: (OrderedCollection new: 2). - result at: 43 put: (OrderedCollection new: 2). - result at: 44 put: (OrderedCollection new: 2). - result at: 45 put: (OrderedCollection new: 2). - result at: 46 put: (OrderedCollection new: 2). - result at: 47 put: (OrderedCollection new: 2). - result at: 48 put: (OrderedCollection new: 2). - result at: 49 put: (OrderedCollection new: 2). - result at: 50 put: (OrderedCollection new: 2). - result at: 51 put: (OrderedCollection new: 2). - result at: 52 put: (OrderedCollection new: 2). - result at: 53 put: (OrderedCollection new: 2). - result at: 54 put: (OrderedCollection new: 2). - result at: 55 put: (OrderedCollection new: 2). - result at: 56 put: (OrderedCollection new: 2). - result at: 57 put: (OrderedCollection new: 2). - self addAll: ((nodes at: 1) at: 1) to: (result at: 1). - self addAll: ((nodes at: 1) at: 2) to: (result at: 2). - self addAll: ((nodes at: 1) at: 3) to: (result at: 3). - self addAll: ((nodes at: 1) at: 4) to: (result at: 4). - self addAll: ((nodes at: 1) at: 5) to: (result at: 5). - self addAll: ((nodes at: 1) at: 6) to: (result at: 6). - self addAll: ((nodes at: 1) at: 7) to: (result at: 7). - self addAll: ((nodes at: 1) at: 8) to: (result at: 8). - self addAll: ((nodes at: 1) at: 9) to: (result at: 9). - self addAll: ((nodes at: 1) at: 10) to: (result at: 10). - self addAll: ((nodes at: 1) at: 11) to: (result at: 11). - self addAll: ((nodes at: 1) at: 12) to: (result at: 12). - self add: ((nodes at: 1) at: 13) to: (result at: 57). - self addAll: ((nodes at: 1) at: 14) to: (result at: 41). - self addAll: ((nodes at: 1) at: 15) to: (result at: 33). - self addAll: ((nodes at: 1) at: 16) to: (result at: 34). - self addAll: ((nodes at: 1) at: 17) to: (result at: 21). - self addAll: ((nodes at: 1) at: 18) to: (result at: 35). - self addAll: ((nodes at: 1) at: 19) to: (result at: 36). - self addAll: ((nodes at: 1) at: 20) to: (result at: 18). - self addAll: ((nodes at: 1) at: 21) to: (result at: 37). - self addAll: ((nodes at: 1) at: 22) to: (result at: 38). - self addAll: ((nodes at: 1) at: 23) to: (result at: 39). - self addAll: ((nodes at: 1) at: 24) to: (result at: 32). - self addAll: ((nodes at: 1) at: 25) to: (result at: 40). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForunion_style_enum_members2: nodes [ - | result | - result := nodes at: 2. - self addAllFirst: ((nodes at: 1) at: 1) to: (result at: 1). - self addAllFirst: ((nodes at: 1) at: 2) to: (result at: 2). - self addAllFirst: ((nodes at: 1) at: 3) to: (result at: 3). - self addAllFirst: ((nodes at: 1) at: 4) to: (result at: 4). - self addAllFirst: ((nodes at: 1) at: 5) to: (result at: 5). - self addAllFirst: ((nodes at: 1) at: 6) to: (result at: 6). - self addAllFirst: ((nodes at: 1) at: 7) to: (result at: 7). - self addAllFirst: ((nodes at: 1) at: 8) to: (result at: 8). - self addAllFirst: ((nodes at: 1) at: 9) to: (result at: 9). - self addAllFirst: ((nodes at: 1) at: 10) to: (result at: 10). - self addAllFirst: ((nodes at: 1) at: 11) to: (result at: 11). - self addAllFirst: ((nodes at: 1) at: 12) to: (result at: 12). - self addAllFirst: ((nodes at: 1) at: 13) to: (result at: 13). - self addAllFirst: ((nodes at: 1) at: 14) to: (result at: 14). - self addAllFirst: ((nodes at: 1) at: 15) to: (result at: 15). - self addAllFirst: ((nodes at: 1) at: 16) to: (result at: 16). - self addAllFirst: ((nodes at: 1) at: 17) to: (result at: 17). - self addAllFirst: ((nodes at: 1) at: 18) to: (result at: 18). - self addAllFirst: ((nodes at: 1) at: 19) to: (result at: 19). - self addAllFirst: ((nodes at: 1) at: 20) to: (result at: 20). - self addAllFirst: ((nodes at: 1) at: 21) to: (result at: 21). - self addAllFirst: ((nodes at: 1) at: 22) to: (result at: 22). - self addAllFirst: ((nodes at: 1) at: 23) to: (result at: 23). - self addAllFirst: ((nodes at: 1) at: 24) to: (result at: 24). - self addAllFirst: ((nodes at: 1) at: 25) to: (result at: 25). - self addAllFirst: ((nodes at: 1) at: 26) to: (result at: 26). - self addAllFirst: ((nodes at: 1) at: 27) to: (result at: 27). - self addAllFirst: ((nodes at: 1) at: 28) to: (result at: 28). - self addAllFirst: ((nodes at: 1) at: 29) to: (result at: 29). - self addAllFirst: ((nodes at: 1) at: 30) to: (result at: 30). - self addAllFirst: ((nodes at: 1) at: 31) to: (result at: 31). - self addAllFirst: ((nodes at: 1) at: 32) to: (result at: 32). - self addAllFirst: ((nodes at: 1) at: 33) to: (result at: 33). - self addAllFirst: ((nodes at: 1) at: 34) to: (result at: 34). - self addAllFirst: ((nodes at: 1) at: 35) to: (result at: 35). - self addAllFirst: ((nodes at: 1) at: 36) to: (result at: 36). - self addAllFirst: ((nodes at: 1) at: 37) to: (result at: 37). - self addAllFirst: ((nodes at: 1) at: 38) to: (result at: 38). - self addAllFirst: ((nodes at: 1) at: 39) to: (result at: 39). - self addAllFirst: ((nodes at: 1) at: 40) to: (result at: 40). - self addAllFirst: ((nodes at: 1) at: 41) to: (result at: 41). - self addAllFirst: ((nodes at: 1) at: 42) to: (result at: 42). - self addAllFirst: ((nodes at: 1) at: 43) to: (result at: 43). - self addAllFirst: ((nodes at: 1) at: 44) to: (result at: 44). - self addAllFirst: ((nodes at: 1) at: 45) to: (result at: 45). - self addAllFirst: ((nodes at: 1) at: 46) to: (result at: 46). - self addAllFirst: ((nodes at: 1) at: 47) to: (result at: 47). - self addAllFirst: ((nodes at: 1) at: 48) to: (result at: 48). - self addAllFirst: ((nodes at: 1) at: 49) to: (result at: 49). - self addAllFirst: ((nodes at: 1) at: 50) to: (result at: 50). - self addAllFirst: ((nodes at: 1) at: 51) to: (result at: 51). - self addAllFirst: ((nodes at: 1) at: 52) to: (result at: 52). - self addAllFirst: ((nodes at: 1) at: 53) to: (result at: 53). - self addAllFirst: ((nodes at: 1) at: 54) to: (result at: 54). - self addAllFirst: ((nodes at: 1) at: 55) to: (result at: 55). - self addAllFirst: ((nodes at: 1) at: 56) to: (result at: 56). - self addAllFirst: ((nodes at: 1) at: 57) to: (result at: 57). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForvalue_binding_pattern1: nodes [ - | result | - result := Array new: 29. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 1). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - self addAll: ((nodes at: 2) at: 3) to: (result at: 4). - self addAll: ((nodes at: 2) at: 4) to: (result at: 5). - self addAll: ((nodes at: 2) at: 5) to: (result at: 6). - self addAll: ((nodes at: 2) at: 6) to: (result at: 7). - self addAll: ((nodes at: 2) at: 7) to: (result at: 8). - self addAll: ((nodes at: 2) at: 8) to: (result at: 9). - self addAll: ((nodes at: 2) at: 9) to: (result at: 10). - self addAll: ((nodes at: 2) at: 10) to: (result at: 11). - self addAll: ((nodes at: 2) at: 11) to: (result at: 12). - self addAll: ((nodes at: 2) at: 12) to: (result at: 13). - self addAll: ((nodes at: 2) at: 13) to: (result at: 14). - self addAll: ((nodes at: 2) at: 14) to: (result at: 15). - self addAll: ((nodes at: 2) at: 15) to: (result at: 16). - self addAll: ((nodes at: 2) at: 16) to: (result at: 17). - self addAll: ((nodes at: 2) at: 17) to: (result at: 18). - self addAll: ((nodes at: 2) at: 18) to: (result at: 19). - self addAll: ((nodes at: 2) at: 19) to: (result at: 20). - self addAll: ((nodes at: 2) at: 20) to: (result at: 21). - self addAll: ((nodes at: 2) at: 21) to: (result at: 22). - self addAll: ((nodes at: 2) at: 22) to: (result at: 23). - self addAll: ((nodes at: 2) at: 23) to: (result at: 24). - self addAll: ((nodes at: 2) at: 24) to: (result at: 25). - self addAll: ((nodes at: 2) at: 25) to: (result at: 1). - self addAll: ((nodes at: 2) at: 26) to: (result at: 26). - self addAll: ((nodes at: 2) at: 27) to: (result at: 27). - self addAll: ((nodes at: 2) at: 28) to: (result at: 28). - self addAll: ((nodes at: 2) at: 29) to: (result at: 29). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForvalue_binding_pattern2: nodes [ - | result | - result := Array new: 29. - result at: 1 put: (OrderedCollection new: 2). - result at: 2 put: (OrderedCollection new: 2). - result at: 3 put: (OrderedCollection new: 2). - result at: 4 put: (OrderedCollection new: 2). - result at: 5 put: (OrderedCollection new: 2). - result at: 6 put: (OrderedCollection new: 2). - result at: 7 put: (OrderedCollection new: 2). - result at: 8 put: (OrderedCollection new: 2). - result at: 9 put: (OrderedCollection new: 2). - result at: 10 put: (OrderedCollection new: 2). - result at: 11 put: (OrderedCollection new: 2). - result at: 12 put: (OrderedCollection new: 2). - result at: 13 put: (OrderedCollection new: 2). - result at: 14 put: (OrderedCollection new: 2). - result at: 15 put: (OrderedCollection new: 2). - result at: 16 put: (OrderedCollection new: 2). - result at: 17 put: (OrderedCollection new: 2). - result at: 18 put: (OrderedCollection new: 2). - result at: 19 put: (OrderedCollection new: 2). - result at: 20 put: (OrderedCollection new: 2). - result at: 21 put: (OrderedCollection new: 2). - result at: 22 put: (OrderedCollection new: 2). - result at: 23 put: (OrderedCollection new: 2). - result at: 24 put: (OrderedCollection new: 2). - result at: 25 put: (OrderedCollection new: 2). - result at: 26 put: (OrderedCollection new: 2). - result at: 27 put: (OrderedCollection new: 2). - result at: 28 put: (OrderedCollection new: 2). - result at: 29 put: (OrderedCollection new: 2). - self add: (nodes at: 1) to: (result at: 26). - self addAll: ((nodes at: 2) at: 1) to: (result at: 2). - self addAll: ((nodes at: 2) at: 2) to: (result at: 3). - self addAll: ((nodes at: 2) at: 3) to: (result at: 4). - self addAll: ((nodes at: 2) at: 4) to: (result at: 5). - self addAll: ((nodes at: 2) at: 5) to: (result at: 6). - self addAll: ((nodes at: 2) at: 6) to: (result at: 7). - self addAll: ((nodes at: 2) at: 7) to: (result at: 8). - self addAll: ((nodes at: 2) at: 8) to: (result at: 9). - self addAll: ((nodes at: 2) at: 9) to: (result at: 10). - self addAll: ((nodes at: 2) at: 10) to: (result at: 11). - self addAll: ((nodes at: 2) at: 11) to: (result at: 12). - self addAll: ((nodes at: 2) at: 12) to: (result at: 13). - self addAll: ((nodes at: 2) at: 13) to: (result at: 14). - self addAll: ((nodes at: 2) at: 14) to: (result at: 15). - self addAll: ((nodes at: 2) at: 15) to: (result at: 16). - self addAll: ((nodes at: 2) at: 16) to: (result at: 17). - self addAll: ((nodes at: 2) at: 17) to: (result at: 18). - self addAll: ((nodes at: 2) at: 18) to: (result at: 19). - self addAll: ((nodes at: 2) at: 19) to: (result at: 20). - self addAll: ((nodes at: 2) at: 20) to: (result at: 21). - self addAll: ((nodes at: 2) at: 21) to: (result at: 22). - self addAll: ((nodes at: 2) at: 22) to: (result at: 23). - self addAll: ((nodes at: 2) at: 23) to: (result at: 24). - self addAll: ((nodes at: 2) at: 24) to: (result at: 25). - self addAll: ((nodes at: 2) at: 25) to: (result at: 1). - self addAll: ((nodes at: 2) at: 26) to: (result at: 26). - self addAll: ((nodes at: 2) at: 27) to: (result at: 27). - self addAll: ((nodes at: 2) at: 28) to: (result at: 28). - self addAll: ((nodes at: 2) at: 29) to: (result at: 29). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForvariable_declaration1: nodes [ - | result | - result := SwiftVariableDeclarationNode new. - result addTokens: ((nodes at: 1) at: 1) to: result _Tokens. - result addTokens: ((nodes at: 1) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 3) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 4) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 5) to: result leftBracketTokens. - result addTokens: ((nodes at: 1) at: 6) to: result rightBracketTokens. - result addTokens: ((nodes at: 1) at: 7) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 1) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 12) to: result operatorTokens. - result addTokens: ((nodes at: 1) at: 13) to: result classTokens. - result addTokens: ((nodes at: 1) at: 14) to: result mutatingTokens. - result addTokens: ((nodes at: 1) at: 15) to: result nonmutatingTokens. - result addTokens: ((nodes at: 1) at: 16) to: result overrideTokens. - result addTokens: ((nodes at: 1) at: 17) to: result staticTokens. - result addTokens: ((nodes at: 1) at: 18) to: result unownedTokens. - result - addTokens: ((nodes at: 1) at: 19) - to: result unownedLeftParensafeRightParenTokens. - result - addTokens: ((nodes at: 1) at: 20) - to: result unownedLeftParenunsafeRightParenTokens. - result addTokens: ((nodes at: 1) at: 21) to: result weakTokens. - result varToken: ((nodes at: 1) at: 22). - result addNodes: ((nodes at: 2) at: 1) to: result inializers. - result addTokens: ((nodes at: 2) at: 2) to: result commaTokens. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForvariable_declaration2: nodes [ - | result | - result := SwiftVariableDeclarationNode new. - result addTokens: ((nodes at: 1) at: 1) to: result _Tokens. - result addTokens: ((nodes at: 1) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 3) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 4) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 5) to: result leftBracketTokens. - result addTokens: ((nodes at: 1) at: 6) to: result rightBracketTokens. - result addTokens: ((nodes at: 1) at: 7) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 1) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 12) to: result operatorTokens. - result addTokens: ((nodes at: 1) at: 13) to: result classTokens. - result addTokens: ((nodes at: 1) at: 14) to: result mutatingTokens. - result addTokens: ((nodes at: 1) at: 15) to: result nonmutatingTokens. - result addTokens: ((nodes at: 1) at: 16) to: result overrideTokens. - result addTokens: ((nodes at: 1) at: 17) to: result staticTokens. - result addTokens: ((nodes at: 1) at: 18) to: result unownedTokens. - result - addTokens: ((nodes at: 1) at: 19) - to: result unownedLeftParensafeRightParenTokens. - result - addTokens: ((nodes at: 1) at: 20) - to: result unownedLeftParenunsafeRightParenTokens. - result addTokens: ((nodes at: 1) at: 21) to: result weakTokens. - result varToken: ((nodes at: 1) at: 22). - result addToken: (nodes at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 3) at: 1) to: result colonTokens. - result addTokens: ((nodes at: 3) at: 2) to: result _Tokens. - result addTokens: ((nodes at: 3) at: 3) to: result identifierTokens. - result addTokens: ((nodes at: 3) at: 4) to: result leftParenTokens. - result addTokens: ((nodes at: 3) at: 5) to: result rightParenTokens. - result addTokens: ((nodes at: 3) at: 6) to: result leftBracketTokens. - result addTokens: ((nodes at: 3) at: 7) to: result rightBracketTokens. - result addTokens: ((nodes at: 3) at: 8) to: result leftBraceTokens. - result addTokens: ((nodes at: 3) at: 9) to: result rightBraceTokens. - result - addTokens: ((nodes at: 3) at: 10) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 3) at: 11) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 3) at: 12) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 3) at: 13) to: result operatorTokens. - result - addTokens: ((nodes at: 3) at: 14) - to: result minusGreaterThanTokens. - result addTokens: ((nodes at: 3) at: 15) to: result periodTokens. - result - addTokens: ((nodes at: 3) at: 16) - to: result questionMarkTokens. - result addTokens: ((nodes at: 3) at: 17) to: result bangTokens. - result addTokens: ((nodes at: 3) at: 18) to: result protocolTokens. - result addTokens: ((nodes at: 3) at: 19) to: result lessThanTokens. - result addTokens: ((nodes at: 3) at: 20) to: result greaterThanTokens. - result addTokens: ((nodes at: 3) at: 21) to: result typeTokens. - result addTokens: ((nodes at: 3) at: 22) to: result commaTokens. - result - addTokens: ((nodes at: 3) at: 23) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 3) at: 24) to: result inoutTokens. - result addNode: (nodes at: 4) to: result blocks. - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForvariable_declaration3: nodes [ - | result | - result := SwiftVariableDeclarationNode new. - result addTokens: ((nodes at: 1) at: 1) to: result _Tokens. - result addTokens: ((nodes at: 1) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 3) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 4) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 5) to: result leftBracketTokens. - result addTokens: ((nodes at: 1) at: 6) to: result rightBracketTokens. - result addTokens: ((nodes at: 1) at: 7) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 1) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 12) to: result operatorTokens. - result addTokens: ((nodes at: 1) at: 13) to: result classTokens. - result addTokens: ((nodes at: 1) at: 14) to: result mutatingTokens. - result addTokens: ((nodes at: 1) at: 15) to: result nonmutatingTokens. - result addTokens: ((nodes at: 1) at: 16) to: result overrideTokens. - result addTokens: ((nodes at: 1) at: 17) to: result staticTokens. - result addTokens: ((nodes at: 1) at: 18) to: result unownedTokens. - result - addTokens: ((nodes at: 1) at: 19) - to: result unownedLeftParensafeRightParenTokens. - result - addTokens: ((nodes at: 1) at: 20) - to: result unownedLeftParenunsafeRightParenTokens. - result addTokens: ((nodes at: 1) at: 21) to: result weakTokens. - result varToken: ((nodes at: 1) at: 22). - result addToken: (nodes at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 3) at: 1) to: result colonTokens. - result addTokens: ((nodes at: 3) at: 2) to: result _Tokens. - result addTokens: ((nodes at: 3) at: 3) to: result identifierTokens. - result addTokens: ((nodes at: 3) at: 4) to: result leftParenTokens. - result addTokens: ((nodes at: 3) at: 5) to: result rightParenTokens. - result addTokens: ((nodes at: 3) at: 6) to: result leftBracketTokens. - result addTokens: ((nodes at: 3) at: 7) to: result rightBracketTokens. - result addTokens: ((nodes at: 3) at: 8) to: result leftBraceTokens. - result addTokens: ((nodes at: 3) at: 9) to: result rightBraceTokens. - result - addTokens: ((nodes at: 3) at: 10) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 3) at: 11) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 3) at: 12) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 3) at: 13) to: result operatorTokens. - result - addTokens: ((nodes at: 3) at: 14) - to: result minusGreaterThanTokens. - result addTokens: ((nodes at: 3) at: 15) to: result periodTokens. - result - addTokens: ((nodes at: 3) at: 16) - to: result questionMarkTokens. - result addTokens: ((nodes at: 3) at: 17) to: result bangTokens. - result addTokens: ((nodes at: 3) at: 18) to: result protocolTokens. - result addTokens: ((nodes at: 3) at: 19) to: result lessThanTokens. - result addTokens: ((nodes at: 3) at: 20) to: result greaterThanTokens. - result addTokens: ((nodes at: 3) at: 21) to: result typeTokens. - result addTokens: ((nodes at: 3) at: 22) to: result commaTokens. - result - addTokens: ((nodes at: 3) at: 23) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 3) at: 24) to: result inoutTokens. - result addTokens: ((nodes at: 4) at: 1) to: result leftBraceTokens. - result addTokens: ((nodes at: 4) at: 2) to: result _Tokens. - result addTokens: ((nodes at: 4) at: 3) to: result identifierTokens. - result addTokens: ((nodes at: 4) at: 4) to: result leftParenTokens. - result addTokens: ((nodes at: 4) at: 5) to: result rightParenTokens. - result addTokens: ((nodes at: 4) at: 6) to: result leftBracketTokens. - result addTokens: ((nodes at: 4) at: 7) to: result rightBracketTokens. - result addTokens: ((nodes at: 4) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 4) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 4) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 4) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 4) at: 12) to: result operatorTokens. - result getToken: ((nodes at: 4) at: 13). - result addNodes: ((nodes at: 4) at: 14) to: result blocks. - result setToken: ((nodes at: 4) at: 15). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForvariable_declaration4: nodes [ - | result | - result := SwiftVariableDeclarationNode new. - result addTokens: ((nodes at: 1) at: 1) to: result _Tokens. - result addTokens: ((nodes at: 1) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 3) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 4) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 5) to: result leftBracketTokens. - result addTokens: ((nodes at: 1) at: 6) to: result rightBracketTokens. - result addTokens: ((nodes at: 1) at: 7) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 1) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 12) to: result operatorTokens. - result addTokens: ((nodes at: 1) at: 13) to: result classTokens. - result addTokens: ((nodes at: 1) at: 14) to: result mutatingTokens. - result addTokens: ((nodes at: 1) at: 15) to: result nonmutatingTokens. - result addTokens: ((nodes at: 1) at: 16) to: result overrideTokens. - result addTokens: ((nodes at: 1) at: 17) to: result staticTokens. - result addTokens: ((nodes at: 1) at: 18) to: result unownedTokens. - result - addTokens: ((nodes at: 1) at: 19) - to: result unownedLeftParensafeRightParenTokens. - result - addTokens: ((nodes at: 1) at: 20) - to: result unownedLeftParenunsafeRightParenTokens. - result addTokens: ((nodes at: 1) at: 21) to: result weakTokens. - result varToken: ((nodes at: 1) at: 22). - result addToken: (nodes at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 3) at: 1) to: result colonTokens. - result addTokens: ((nodes at: 3) at: 2) to: result _Tokens. - result addTokens: ((nodes at: 3) at: 3) to: result identifierTokens. - result addTokens: ((nodes at: 3) at: 4) to: result leftParenTokens. - result addTokens: ((nodes at: 3) at: 5) to: result rightParenTokens. - result addTokens: ((nodes at: 3) at: 6) to: result leftBracketTokens. - result addTokens: ((nodes at: 3) at: 7) to: result rightBracketTokens. - result addTokens: ((nodes at: 3) at: 8) to: result leftBraceTokens. - result addTokens: ((nodes at: 3) at: 9) to: result rightBraceTokens. - result - addTokens: ((nodes at: 3) at: 10) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 3) at: 11) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 3) at: 12) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 3) at: 13) to: result operatorTokens. - result - addTokens: ((nodes at: 3) at: 14) - to: result minusGreaterThanTokens. - result addTokens: ((nodes at: 3) at: 15) to: result periodTokens. - result - addTokens: ((nodes at: 3) at: 16) - to: result questionMarkTokens. - result addTokens: ((nodes at: 3) at: 17) to: result bangTokens. - result addTokens: ((nodes at: 3) at: 18) to: result protocolTokens. - result addTokens: ((nodes at: 3) at: 19) to: result lessThanTokens. - result addTokens: ((nodes at: 3) at: 20) to: result greaterThanTokens. - result addTokens: ((nodes at: 3) at: 21) to: result typeTokens. - result addTokens: ((nodes at: 3) at: 22) to: result commaTokens. - result - addTokens: ((nodes at: 3) at: 23) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 3) at: 24) to: result inoutTokens. - result addTokens: ((nodes at: 4) at: 1) to: result leftBraceTokens. - result addTokens: ((nodes at: 4) at: 2) to: result _Tokens. - result addTokens: ((nodes at: 4) at: 3) to: result identifierTokens. - result addTokens: ((nodes at: 4) at: 4) to: result leftParenTokens. - result addTokens: ((nodes at: 4) at: 5) to: result rightParenTokens. - result addTokens: ((nodes at: 4) at: 6) to: result leftBracketTokens. - result addTokens: ((nodes at: 4) at: 7) to: result rightBracketTokens. - result addTokens: ((nodes at: 4) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 4) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 4) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 4) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 4) at: 12) to: result operatorTokens. - result getToken: ((nodes at: 4) at: 13). - result setToken: ((nodes at: 4) at: 14). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForvariable_declaration5: nodes [ - | result | - result := SwiftVariableDeclarationNode new. - result addTokens: ((nodes at: 1) at: 1) to: result _Tokens. - result addTokens: ((nodes at: 1) at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 1) at: 3) to: result leftParenTokens. - result addTokens: ((nodes at: 1) at: 4) to: result rightParenTokens. - result addTokens: ((nodes at: 1) at: 5) to: result leftBracketTokens. - result addTokens: ((nodes at: 1) at: 6) to: result rightBracketTokens. - result addTokens: ((nodes at: 1) at: 7) to: result leftBraceTokens. - result addTokens: ((nodes at: 1) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 1) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 1) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 1) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 1) at: 12) to: result operatorTokens. - result addTokens: ((nodes at: 1) at: 13) to: result classTokens. - result addTokens: ((nodes at: 1) at: 14) to: result mutatingTokens. - result addTokens: ((nodes at: 1) at: 15) to: result nonmutatingTokens. - result addTokens: ((nodes at: 1) at: 16) to: result overrideTokens. - result addTokens: ((nodes at: 1) at: 17) to: result staticTokens. - result addTokens: ((nodes at: 1) at: 18) to: result unownedTokens. - result - addTokens: ((nodes at: 1) at: 19) - to: result unownedLeftParensafeRightParenTokens. - result - addTokens: ((nodes at: 1) at: 20) - to: result unownedLeftParenunsafeRightParenTokens. - result addTokens: ((nodes at: 1) at: 21) to: result weakTokens. - result varToken: ((nodes at: 1) at: 22). - result addToken: (nodes at: 2) to: result identifierTokens. - result addTokens: ((nodes at: 3) at: 1) to: result colonTokens. - result addTokens: ((nodes at: 3) at: 2) to: result _Tokens. - result addTokens: ((nodes at: 3) at: 3) to: result identifierTokens. - result addTokens: ((nodes at: 3) at: 4) to: result leftParenTokens. - result addTokens: ((nodes at: 3) at: 5) to: result rightParenTokens. - result addTokens: ((nodes at: 3) at: 6) to: result leftBracketTokens. - result addTokens: ((nodes at: 3) at: 7) to: result rightBracketTokens. - result addTokens: ((nodes at: 3) at: 8) to: result leftBraceTokens. - result addTokens: ((nodes at: 3) at: 9) to: result rightBraceTokens. - result - addTokens: ((nodes at: 3) at: 10) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 3) at: 11) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 3) at: 12) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 3) at: 13) to: result operatorTokens. - result - addTokens: ((nodes at: 3) at: 14) - to: result minusGreaterThanTokens. - result addTokens: ((nodes at: 3) at: 15) to: result periodTokens. - result - addTokens: ((nodes at: 3) at: 16) - to: result questionMarkTokens. - result addTokens: ((nodes at: 3) at: 17) to: result bangTokens. - result addTokens: ((nodes at: 3) at: 18) to: result protocolTokens. - result addTokens: ((nodes at: 3) at: 19) to: result lessThanTokens. - result addTokens: ((nodes at: 3) at: 20) to: result greaterThanTokens. - result addTokens: ((nodes at: 3) at: 21) to: result typeTokens. - result addTokens: ((nodes at: 3) at: 22) to: result commaTokens. - result - addTokens: ((nodes at: 3) at: 23) - to: result periodPeriodPeriodTokens. - result addTokens: ((nodes at: 3) at: 24) to: result inoutTokens. - result equalToken: ((nodes at: 4) at: 1). - result expression: ((nodes at: 4) at: 2). - result addTokens: ((nodes at: 5) at: 1) to: result leftBraceTokens. - result addTokens: ((nodes at: 5) at: 2) to: result _Tokens. - result addTokens: ((nodes at: 5) at: 3) to: result identifierTokens. - result addTokens: ((nodes at: 5) at: 4) to: result leftParenTokens. - result addTokens: ((nodes at: 5) at: 5) to: result rightParenTokens. - result addTokens: ((nodes at: 5) at: 6) to: result leftBracketTokens. - result addTokens: ((nodes at: 5) at: 7) to: result rightBracketTokens. - result addTokens: ((nodes at: 5) at: 8) to: result rightBraceTokens. - result - addTokens: ((nodes at: 5) at: 9) - to: result integer_literalTokens. - result - addTokens: ((nodes at: 5) at: 10) - to: result floating_point_literalTokens. - result - addTokens: ((nodes at: 5) at: 11) - to: result full_string_literalTokens. - result addTokens: ((nodes at: 5) at: 12) to: result operatorTokens. - result willSetToken: ((nodes at: 5) at: 13). - result addNodes: ((nodes at: 5) at: 14) to: result blocks. - result didSetToken: ((nodes at: 5) at: 15). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForwhile_statement1: nodes [ - | result | - result := SwiftWhileStatementNode new. - result whileToken: (nodes at: 1). - result expression: (nodes at: 2). - result block: (nodes at: 3). - ^ result -] - -{ #category : #'generated-reduction actions' } -SwiftParser >> reduceActionForwildcard_expression1: nodes [ - | result | - result := SwiftWildcardExpressionNode new. - result _Token: (nodes at: 1). - ^ result -] diff --git a/src/SmaCC_Swift/SwiftPatternInitializerNode.class.st b/src/SmaCC_Swift/SwiftPatternInitializerNode.class.st deleted file mode 100644 index 3648d105d..000000000 --- a/src/SmaCC_Swift/SwiftPatternInitializerNode.class.st +++ /dev/null @@ -1,391 +0,0 @@ -Class { - #name : #SwiftPatternInitializerNode, - #superclass : #SwiftParseNode, - #instVars : [ - '_Tokens', - 'colonTokens', - 'identifierTokens', - 'leftParenTokens', - 'rightParenTokens', - 'leftBracketTokens', - 'rightBracketTokens', - 'leftBraceTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens', - 'periodTokens', - 'protocolTokens', - 'lessThanTokens', - 'greaterThanTokens', - 'minusGreaterThanTokens', - 'commaTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens', - 'inoutTokens', - 'varTokens', - 'letTokens', - 'expressions', - 'isTokens', - 'asTokens', - 'equalToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftPatternInitializerNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitPatternInitializer: self -] - -{ #category : #generated } -SwiftPatternInitializerNode >> asTokens [ - ^ asTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> asTokens: anOrderedCollection [ - asTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> compositeTokenVariables [ - ^ #(#_Tokens #colonTokens #identifierTokens #leftParenTokens #rightParenTokens #leftBracketTokens #rightBracketTokens #leftBraceTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens #minusGreaterThanTokens #periodTokens #questionMarkTokens #bangTokens #protocolTokens #lessThanTokens #greaterThanTokens #typeTokens #commaTokens #periodPeriodPeriodTokens #inoutTokens #varTokens #letTokens #isTokens #asTokens) -] - -{ #category : #generated } -SwiftPatternInitializerNode >> equalToken [ - ^ equalToken -] - -{ #category : #generated } -SwiftPatternInitializerNode >> equalToken: aSmaCCToken [ - equalToken := aSmaCCToken -] - -{ #category : #generated } -SwiftPatternInitializerNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SwiftPatternInitializerNode >> expressions: anOrderedCollection [ - expressions := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftPatternInitializerNode >> initialize [ - super initialize. - _Tokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - varTokens := OrderedCollection new: 2. - letTokens := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. - isTokens := OrderedCollection new: 2. - asTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftPatternInitializerNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> isTokens [ - ^ isTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> isTokens: anOrderedCollection [ - isTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> letTokens [ - ^ letTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> letTokens: anOrderedCollection [ - letTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> otherVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -SwiftPatternInitializerNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> tokenVariables [ - ^ #(#equalToken) -] - -{ #category : #generated } -SwiftPatternInitializerNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPatternInitializerNode >> varTokens [ - ^ varTokens -] - -{ #category : #generated } -SwiftPatternInitializerNode >> varTokens: anOrderedCollection [ - varTokens := anOrderedCollection -] diff --git a/src/SmaCC_Swift/SwiftPostfixOperatorDeclarationNode.class.st b/src/SmaCC_Swift/SwiftPostfixOperatorDeclarationNode.class.st deleted file mode 100644 index 7669a6692..000000000 --- a/src/SmaCC_Swift/SwiftPostfixOperatorDeclarationNode.class.st +++ /dev/null @@ -1,72 +0,0 @@ -Class { - #name : #SwiftPostfixOperatorDeclarationNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'operatorTokens', - 'postfixToken', - 'leftBraceToken', - 'rightBraceToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftPostfixOperatorDeclarationNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitPostfixOperatorDeclaration: self -] - -{ #category : #generated } -SwiftPostfixOperatorDeclarationNode >> compositeTokenVariables [ - ^ #(#operatorTokens) -] - -{ #category : #'generated-initialize-release' } -SwiftPostfixOperatorDeclarationNode >> initialize [ - super initialize. - operatorTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftPostfixOperatorDeclarationNode >> leftBraceToken [ - ^ leftBraceToken -] - -{ #category : #generated } -SwiftPostfixOperatorDeclarationNode >> leftBraceToken: aSmaCCToken [ - leftBraceToken := aSmaCCToken -] - -{ #category : #generated } -SwiftPostfixOperatorDeclarationNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftPostfixOperatorDeclarationNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixOperatorDeclarationNode >> postfixToken [ - ^ postfixToken -] - -{ #category : #generated } -SwiftPostfixOperatorDeclarationNode >> postfixToken: aSmaCCToken [ - postfixToken := aSmaCCToken -] - -{ #category : #generated } -SwiftPostfixOperatorDeclarationNode >> rightBraceToken [ - ^ rightBraceToken -] - -{ #category : #generated } -SwiftPostfixOperatorDeclarationNode >> rightBraceToken: aSmaCCToken [ - rightBraceToken := aSmaCCToken -] - -{ #category : #generated } -SwiftPostfixOperatorDeclarationNode >> tokenVariables [ - ^ #(#postfixToken #leftBraceToken #rightBraceToken) -] diff --git a/src/SmaCC_Swift/SwiftPostfixSelfExpressionNode.class.st b/src/SmaCC_Swift/SwiftPostfixSelfExpressionNode.class.st deleted file mode 100644 index 0a4762c8b..000000000 --- a/src/SmaCC_Swift/SwiftPostfixSelfExpressionNode.class.st +++ /dev/null @@ -1,546 +0,0 @@ -Class { - #name : #SwiftPostfixSelfExpressionNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'identifierTokens', - 'lessThanTokens', - 'commaTokens', - 'greaterThanTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'leftBracketTokens', - 'expressions', - 'rightBracketTokens', - 'keyExpressions', - 'colonTokens', - 'valueExpressions', - '__FILE__Token', - '__LINE__Token', - '__COLUMN__Token', - '__FUNCTION__Token', - 'selfTokens', - 'periodTokens', - 'initTokens', - 'leftBraceTokens', - 'leftParenTokens', - 'rightParenTokens', - 'inoutTokens', - 'letTokens', - '_Tokens', - 'protocolTokens', - 'minusGreaterThanTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens', - 'equalTokens', - 'varTokens', - 'rightBraceTokens', - 'operatorTokens', - 'inToken', - 'weakToken', - 'unownedToken', - 'unownedLeftParensafeRightParenToken', - 'unownedLeftParenunsafeRightParenToken', - 'statements', - 'dynamicTypeTokens' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> __COLUMN__Token [ - ^ __COLUMN__Token -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> __COLUMN__Token: aSmaCCToken [ - __COLUMN__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> __FILE__Token [ - ^ __FILE__Token -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> __FILE__Token: aSmaCCToken [ - __FILE__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> __FUNCTION__Token [ - ^ __FUNCTION__Token -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> __FUNCTION__Token: aSmaCCToken [ - __FUNCTION__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> __LINE__Token [ - ^ __LINE__Token -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> __LINE__Token: aSmaCCToken [ - __LINE__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitPostfixSelfExpression: self -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> compositeNodeVariables [ - ^ #(#statements) -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> compositeTokenVariables [ - ^ #(#identifierTokens #lessThanTokens #commaTokens #greaterThanTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #leftBracketTokens #rightBracketTokens #colonTokens #selfTokens #periodTokens #initTokens #leftBraceTokens #leftParenTokens #rightParenTokens #inoutTokens #letTokens #_Tokens #minusGreaterThanTokens #questionMarkTokens #bangTokens #protocolTokens #typeTokens #periodPeriodPeriodTokens #equalTokens #varTokens #rightBraceTokens #operatorTokens #dynamicTypeTokens) -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> dynamicTypeTokens [ - ^ dynamicTypeTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> dynamicTypeTokens: anOrderedCollection [ - dynamicTypeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> equalTokens [ - ^ equalTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> equalTokens: anOrderedCollection [ - equalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> expressions: anOrderedCollection [ - expressions := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> inToken [ - ^ inToken -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> inToken: aSmaCCToken [ - inToken := aSmaCCToken -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> initTokens [ - ^ initTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> initTokens: anOrderedCollection [ - initTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftPostfixSelfExpressionNode >> initialize [ - super initialize. - identifierTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - keyExpressions := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - valueExpressions := OrderedCollection new: 2. - selfTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - initTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - letTokens := OrderedCollection new: 2. - _Tokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - equalTokens := OrderedCollection new: 2. - varTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - statements := OrderedCollection new: 2. - dynamicTypeTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> keyExpressions [ - ^ keyExpressions -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> keyExpressions: anOrderedCollection [ - keyExpressions := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> letTokens [ - ^ letTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> letTokens: anOrderedCollection [ - letTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> otherVariables [ - ^ #(#expressions #keyExpressions #valueExpressions) -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> selfTokens [ - ^ selfTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> selfTokens: anOrderedCollection [ - selfTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> statements [ - ^ statements -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> tokenVariables [ - ^ #(#__FILE__Token #__LINE__Token #__COLUMN__Token #__FUNCTION__Token #inToken #weakToken #unownedToken #unownedLeftParensafeRightParenToken #unownedLeftParenunsafeRightParenToken) -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> unownedLeftParensafeRightParenToken [ - ^ unownedLeftParensafeRightParenToken -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> unownedLeftParensafeRightParenToken: aSmaCCToken [ - unownedLeftParensafeRightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> unownedLeftParenunsafeRightParenToken [ - ^ unownedLeftParenunsafeRightParenToken -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> unownedLeftParenunsafeRightParenToken: aSmaCCToken [ - unownedLeftParenunsafeRightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> unownedToken [ - ^ unownedToken -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> unownedToken: aSmaCCToken [ - unownedToken := aSmaCCToken -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> valueExpressions [ - ^ valueExpressions -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> valueExpressions: anOrderedCollection [ - valueExpressions := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> varTokens [ - ^ varTokens -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> varTokens: anOrderedCollection [ - varTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> weakToken [ - ^ weakToken -] - -{ #category : #generated } -SwiftPostfixSelfExpressionNode >> weakToken: aSmaCCToken [ - weakToken := aSmaCCToken -] diff --git a/src/SmaCC_Swift/SwiftPrefixExpressionNode.class.st b/src/SmaCC_Swift/SwiftPrefixExpressionNode.class.st deleted file mode 100644 index 6377af7b9..000000000 --- a/src/SmaCC_Swift/SwiftPrefixExpressionNode.class.st +++ /dev/null @@ -1,546 +0,0 @@ -Class { - #name : #SwiftPrefixExpressionNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'operatorTokens', - 'identifierTokens', - 'lessThanTokens', - 'commaTokens', - 'greaterThanTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'leftBracketTokens', - 'expressions', - 'rightBracketTokens', - 'keyExpressions', - 'colonTokens', - 'valueExpressions', - '__FILE__Token', - '__LINE__Token', - '__COLUMN__Token', - '__FUNCTION__Token', - 'selfTokens', - 'periodTokens', - 'initTokens', - 'leftBraceTokens', - 'leftParenTokens', - 'rightParenTokens', - 'inoutTokens', - 'letTokens', - '_Tokens', - 'protocolTokens', - 'minusGreaterThanTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens', - 'equalTokens', - 'varTokens', - 'rightBraceTokens', - 'inToken', - 'weakToken', - 'unownedToken', - 'unownedLeftParensafeRightParenToken', - 'unownedLeftParenunsafeRightParenToken', - 'statements', - 'dynamicTypeTokens' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftPrefixExpressionNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> __COLUMN__Token [ - ^ __COLUMN__Token -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> __COLUMN__Token: aSmaCCToken [ - __COLUMN__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> __FILE__Token [ - ^ __FILE__Token -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> __FILE__Token: aSmaCCToken [ - __FILE__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> __FUNCTION__Token [ - ^ __FUNCTION__Token -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> __FUNCTION__Token: aSmaCCToken [ - __FUNCTION__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> __LINE__Token [ - ^ __LINE__Token -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> __LINE__Token: aSmaCCToken [ - __LINE__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitPrefixExpression: self -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> compositeNodeVariables [ - ^ #(#statements) -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> compositeTokenVariables [ - ^ #(#operatorTokens #identifierTokens #lessThanTokens #commaTokens #greaterThanTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #leftBracketTokens #rightBracketTokens #colonTokens #selfTokens #periodTokens #initTokens #leftBraceTokens #leftParenTokens #rightParenTokens #inoutTokens #letTokens #_Tokens #minusGreaterThanTokens #questionMarkTokens #bangTokens #protocolTokens #typeTokens #periodPeriodPeriodTokens #equalTokens #varTokens #rightBraceTokens #dynamicTypeTokens) -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> dynamicTypeTokens [ - ^ dynamicTypeTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> dynamicTypeTokens: anOrderedCollection [ - dynamicTypeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> equalTokens [ - ^ equalTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> equalTokens: anOrderedCollection [ - equalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> expressions: anOrderedCollection [ - expressions := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> inToken [ - ^ inToken -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> inToken: aSmaCCToken [ - inToken := aSmaCCToken -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> initTokens [ - ^ initTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> initTokens: anOrderedCollection [ - initTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftPrefixExpressionNode >> initialize [ - super initialize. - operatorTokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - keyExpressions := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - valueExpressions := OrderedCollection new: 2. - selfTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - initTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - letTokens := OrderedCollection new: 2. - _Tokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - equalTokens := OrderedCollection new: 2. - varTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - statements := OrderedCollection new: 2. - dynamicTypeTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> keyExpressions [ - ^ keyExpressions -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> keyExpressions: anOrderedCollection [ - keyExpressions := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> letTokens [ - ^ letTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> letTokens: anOrderedCollection [ - letTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> otherVariables [ - ^ #(#expressions #keyExpressions #valueExpressions) -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> selfTokens [ - ^ selfTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> selfTokens: anOrderedCollection [ - selfTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> statements [ - ^ statements -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> tokenVariables [ - ^ #(#__FILE__Token #__LINE__Token #__COLUMN__Token #__FUNCTION__Token #inToken #weakToken #unownedToken #unownedLeftParensafeRightParenToken #unownedLeftParenunsafeRightParenToken) -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> unownedLeftParensafeRightParenToken [ - ^ unownedLeftParensafeRightParenToken -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> unownedLeftParensafeRightParenToken: aSmaCCToken [ - unownedLeftParensafeRightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> unownedLeftParenunsafeRightParenToken [ - ^ unownedLeftParenunsafeRightParenToken -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> unownedLeftParenunsafeRightParenToken: aSmaCCToken [ - unownedLeftParenunsafeRightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> unownedToken [ - ^ unownedToken -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> unownedToken: aSmaCCToken [ - unownedToken := aSmaCCToken -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> valueExpressions [ - ^ valueExpressions -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> valueExpressions: anOrderedCollection [ - valueExpressions := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> varTokens [ - ^ varTokens -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> varTokens: anOrderedCollection [ - varTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> weakToken [ - ^ weakToken -] - -{ #category : #generated } -SwiftPrefixExpressionNode >> weakToken: aSmaCCToken [ - weakToken := aSmaCCToken -] diff --git a/src/SmaCC_Swift/SwiftPrefixOperatorDeclarationNode.class.st b/src/SmaCC_Swift/SwiftPrefixOperatorDeclarationNode.class.st deleted file mode 100644 index ff1ae3ba9..000000000 --- a/src/SmaCC_Swift/SwiftPrefixOperatorDeclarationNode.class.st +++ /dev/null @@ -1,72 +0,0 @@ -Class { - #name : #SwiftPrefixOperatorDeclarationNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'operatorTokens', - 'prefixToken', - 'leftBraceToken', - 'rightBraceToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftPrefixOperatorDeclarationNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitPrefixOperatorDeclaration: self -] - -{ #category : #generated } -SwiftPrefixOperatorDeclarationNode >> compositeTokenVariables [ - ^ #(#operatorTokens) -] - -{ #category : #'generated-initialize-release' } -SwiftPrefixOperatorDeclarationNode >> initialize [ - super initialize. - operatorTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftPrefixOperatorDeclarationNode >> leftBraceToken [ - ^ leftBraceToken -] - -{ #category : #generated } -SwiftPrefixOperatorDeclarationNode >> leftBraceToken: aSmaCCToken [ - leftBraceToken := aSmaCCToken -] - -{ #category : #generated } -SwiftPrefixOperatorDeclarationNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftPrefixOperatorDeclarationNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrefixOperatorDeclarationNode >> prefixToken [ - ^ prefixToken -] - -{ #category : #generated } -SwiftPrefixOperatorDeclarationNode >> prefixToken: aSmaCCToken [ - prefixToken := aSmaCCToken -] - -{ #category : #generated } -SwiftPrefixOperatorDeclarationNode >> rightBraceToken [ - ^ rightBraceToken -] - -{ #category : #generated } -SwiftPrefixOperatorDeclarationNode >> rightBraceToken: aSmaCCToken [ - rightBraceToken := aSmaCCToken -] - -{ #category : #generated } -SwiftPrefixOperatorDeclarationNode >> tokenVariables [ - ^ #(#prefixToken #leftBraceToken #rightBraceToken) -] diff --git a/src/SmaCC_Swift/SwiftPrimaryExpressionNode.class.st b/src/SmaCC_Swift/SwiftPrimaryExpressionNode.class.st deleted file mode 100644 index 43aed855e..000000000 --- a/src/SmaCC_Swift/SwiftPrimaryExpressionNode.class.st +++ /dev/null @@ -1,72 +0,0 @@ -Class { - #name : #SwiftPrimaryExpressionNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'identifierToken', - 'lessThanToken', - 'commaTokens', - 'greaterThanToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftPrimaryExpressionNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitPrimaryExpression: self -] - -{ #category : #generated } -SwiftPrimaryExpressionNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftPrimaryExpressionNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftPrimaryExpressionNode >> compositeTokenVariables [ - ^ #(#commaTokens) -] - -{ #category : #generated } -SwiftPrimaryExpressionNode >> greaterThanToken [ - ^ greaterThanToken -] - -{ #category : #generated } -SwiftPrimaryExpressionNode >> greaterThanToken: aSmaCCToken [ - greaterThanToken := aSmaCCToken -] - -{ #category : #generated } -SwiftPrimaryExpressionNode >> identifierToken [ - ^ identifierToken -] - -{ #category : #generated } -SwiftPrimaryExpressionNode >> identifierToken: aSmaCCToken [ - identifierToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -SwiftPrimaryExpressionNode >> initialize [ - super initialize. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftPrimaryExpressionNode >> lessThanToken [ - ^ lessThanToken -] - -{ #category : #generated } -SwiftPrimaryExpressionNode >> lessThanToken: aSmaCCToken [ - lessThanToken := aSmaCCToken -] - -{ #category : #generated } -SwiftPrimaryExpressionNode >> tokenVariables [ - ^ #(#identifierToken #lessThanToken #greaterThanToken) -] diff --git a/src/SmaCC_Swift/SwiftProtocolAssociationTypeDeclarationNode.class.st b/src/SmaCC_Swift/SwiftProtocolAssociationTypeDeclarationNode.class.st deleted file mode 100644 index 1a3fa4b2d..000000000 --- a/src/SmaCC_Swift/SwiftProtocolAssociationTypeDeclarationNode.class.st +++ /dev/null @@ -1,337 +0,0 @@ -Class { - #name : #SwiftProtocolAssociationTypeDeclarationNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'typealiasToken', - 'identifierTokens', - 'colonTokens', - 'lessThanTokens', - 'commaTokens', - 'greaterThanTokens', - 'periodTokens', - 'equalToken', - 'leftBracketTokens', - 'protocolTokens', - 'rightBracketTokens', - 'minusGreaterThanTokens', - 'leftParenTokens', - 'rightParenTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens', - 'inoutTokens', - '_Tokens', - 'leftBraceTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitProtocolAssociationTypeDeclaration: self -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> compositeTokenVariables [ - ^ #(#identifierTokens #colonTokens #lessThanTokens #greaterThanTokens #periodTokens #commaTokens #leftBracketTokens #rightBracketTokens #minusGreaterThanTokens #leftParenTokens #rightParenTokens #questionMarkTokens #bangTokens #protocolTokens #typeTokens #periodPeriodPeriodTokens #_Tokens #inoutTokens #leftBraceTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens) -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> equalToken [ - ^ equalToken -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> equalToken: aSmaCCToken [ - equalToken := aSmaCCToken -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftProtocolAssociationTypeDeclarationNode >> initialize [ - super initialize. - identifierTokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - _Tokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> tokenVariables [ - ^ #(#typealiasToken #equalToken) -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> typealiasToken [ - ^ typealiasToken -] - -{ #category : #generated } -SwiftProtocolAssociationTypeDeclarationNode >> typealiasToken: aSmaCCToken [ - typealiasToken := aSmaCCToken -] diff --git a/src/SmaCC_Swift/SwiftProtocolCompositionTypeNode.class.st b/src/SmaCC_Swift/SwiftProtocolCompositionTypeNode.class.st deleted file mode 100644 index 1e74e75e4..000000000 --- a/src/SmaCC_Swift/SwiftProtocolCompositionTypeNode.class.st +++ /dev/null @@ -1,98 +0,0 @@ -Class { - #name : #SwiftProtocolCompositionTypeNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'protocolToken', - 'lessThanTokens', - 'identifierTokens', - 'periodTokens', - 'commaTokens', - 'greaterThanTokens' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftProtocolCompositionTypeNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitProtocolCompositionType: self -] - -{ #category : #generated } -SwiftProtocolCompositionTypeNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftProtocolCompositionTypeNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolCompositionTypeNode >> compositeTokenVariables [ - ^ #(#lessThanTokens #identifierTokens #greaterThanTokens #periodTokens #commaTokens) -] - -{ #category : #generated } -SwiftProtocolCompositionTypeNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftProtocolCompositionTypeNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolCompositionTypeNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftProtocolCompositionTypeNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftProtocolCompositionTypeNode >> initialize [ - super initialize. - lessThanTokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftProtocolCompositionTypeNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftProtocolCompositionTypeNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolCompositionTypeNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftProtocolCompositionTypeNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolCompositionTypeNode >> protocolToken [ - ^ protocolToken -] - -{ #category : #generated } -SwiftProtocolCompositionTypeNode >> protocolToken: aSmaCCToken [ - protocolToken := aSmaCCToken -] - -{ #category : #generated } -SwiftProtocolCompositionTypeNode >> tokenVariables [ - ^ #(#protocolToken) -] diff --git a/src/SmaCC_Swift/SwiftProtocolDeclarationNode.class.st b/src/SmaCC_Swift/SwiftProtocolDeclarationNode.class.st deleted file mode 100644 index 7282fd786..000000000 --- a/src/SmaCC_Swift/SwiftProtocolDeclarationNode.class.st +++ /dev/null @@ -1,260 +0,0 @@ -Class { - #name : #SwiftProtocolDeclarationNode, - #superclass : #SwiftParseNode, - #instVars : [ - '_Tokens', - 'identifierTokens', - 'leftParenTokens', - 'rightParenTokens', - 'leftBracketTokens', - 'rightBracketTokens', - 'leftBraceTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens', - 'protocolToken', - 'colonToken', - 'lessThanTokens', - 'commaTokens', - 'greaterThanTokens', - 'periodTokens', - 'declarations' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftProtocolDeclarationNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitProtocolDeclaration: self -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> colonToken [ - ^ colonToken -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> colonToken: aSmaCCToken [ - colonToken := aSmaCCToken -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> compositeNodeVariables [ - ^ #(#declarations) -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> compositeTokenVariables [ - ^ #(#_Tokens #identifierTokens #leftParenTokens #rightParenTokens #leftBracketTokens #rightBracketTokens #leftBraceTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens #lessThanTokens #greaterThanTokens #periodTokens #commaTokens) -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> declarations [ - ^ declarations -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> declarations: anOrderedCollection [ - self setParents: self declarations to: nil. - declarations := anOrderedCollection. - self setParents: self declarations to: self -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftProtocolDeclarationNode >> initialize [ - super initialize. - _Tokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - declarations := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> protocolToken [ - ^ protocolToken -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> protocolToken: aSmaCCToken [ - protocolToken := aSmaCCToken -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolDeclarationNode >> tokenVariables [ - ^ #(#protocolToken #colonToken) -] diff --git a/src/SmaCC_Swift/SwiftProtocolInitializerDeclarationNode.class.st b/src/SmaCC_Swift/SwiftProtocolInitializerDeclarationNode.class.st deleted file mode 100644 index 5d6f3cad4..000000000 --- a/src/SmaCC_Swift/SwiftProtocolInitializerDeclarationNode.class.st +++ /dev/null @@ -1,413 +0,0 @@ -Class { - #name : #SwiftProtocolInitializerDeclarationNode, - #superclass : #SwiftParseNode, - #instVars : [ - '_Tokens', - 'identifierTokens', - 'leftParenTokens', - 'rightParenTokens', - 'leftBracketTokens', - 'rightBracketTokens', - 'leftBraceTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens', - 'convenienceToken', - 'initToken', - 'lessThanTokens', - 'colonTokens', - 'commaTokens', - 'greaterThanTokens', - 'periodTokens', - 'protocolTokens', - 'whereToken', - 'equalEqualTokens', - 'inoutTokens', - 'letTokens', - 'minusGreaterThanTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'equalTokens', - 'expressions', - 'varTokens', - 'periodPeriodPeriodTokens' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitProtocolInitializerDeclaration: self -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> compositeTokenVariables [ - ^ #(#_Tokens #identifierTokens #leftParenTokens #rightParenTokens #leftBracketTokens #rightBracketTokens #leftBraceTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens #lessThanTokens #colonTokens #commaTokens #greaterThanTokens #periodTokens #protocolTokens #equalEqualTokens #inoutTokens #letTokens #minusGreaterThanTokens #questionMarkTokens #bangTokens #typeTokens #periodPeriodPeriodTokens #equalTokens #varTokens) -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> convenienceToken [ - ^ convenienceToken -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> convenienceToken: aSmaCCToken [ - convenienceToken := aSmaCCToken -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> equalEqualTokens [ - ^ equalEqualTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> equalEqualTokens: anOrderedCollection [ - equalEqualTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> equalTokens [ - ^ equalTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> equalTokens: anOrderedCollection [ - equalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> expressions: anOrderedCollection [ - expressions := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> initToken [ - ^ initToken -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> initToken: aSmaCCToken [ - initToken := aSmaCCToken -] - -{ #category : #'generated-initialize-release' } -SwiftProtocolInitializerDeclarationNode >> initialize [ - super initialize. - _Tokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - equalEqualTokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - letTokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - equalTokens := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. - varTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> letTokens [ - ^ letTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> letTokens: anOrderedCollection [ - letTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> otherVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> tokenVariables [ - ^ #(#convenienceToken #initToken #whereToken) -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> varTokens [ - ^ varTokens -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> varTokens: anOrderedCollection [ - varTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> whereToken [ - ^ whereToken -] - -{ #category : #generated } -SwiftProtocolInitializerDeclarationNode >> whereToken: aSmaCCToken [ - whereToken := aSmaCCToken -] diff --git a/src/SmaCC_Swift/SwiftProtocolMethodDeclarationNode.class.st b/src/SmaCC_Swift/SwiftProtocolMethodDeclarationNode.class.st deleted file mode 100644 index 76e7b5af4..000000000 --- a/src/SmaCC_Swift/SwiftProtocolMethodDeclarationNode.class.st +++ /dev/null @@ -1,510 +0,0 @@ -Class { - #name : #SwiftProtocolMethodDeclarationNode, - #superclass : #SwiftParseNode, - #instVars : [ - '_Tokens', - 'identifierTokens', - 'leftParenTokens', - 'rightParenTokens', - 'leftBracketTokens', - 'rightBracketTokens', - 'leftBraceTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens', - 'classTokens', - 'mutatingTokens', - 'nonmutatingTokens', - 'overrideTokens', - 'staticTokens', - 'unownedTokens', - 'unownedLeftParensafeRightParenTokens', - 'unownedLeftParenunsafeRightParenTokens', - 'weakTokens', - 'funcToken', - 'lessThanTokens', - 'colonTokens', - 'commaTokens', - 'greaterThanTokens', - 'periodTokens', - 'protocolTokens', - 'whereToken', - 'equalEqualTokens', - 'periodPeriodPeriodTokens', - 'varTokens', - 'inoutTokens', - 'letTokens', - 'equalTokens', - 'expressions', - 'minusGreaterThanTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitProtocolMethodDeclaration: self -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> classTokens [ - ^ classTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> classTokens: anOrderedCollection [ - classTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> compositeTokenVariables [ - ^ #(#_Tokens #identifierTokens #leftParenTokens #rightParenTokens #leftBracketTokens #rightBracketTokens #leftBraceTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens #classTokens #mutatingTokens #nonmutatingTokens #overrideTokens #staticTokens #unownedTokens #unownedLeftParensafeRightParenTokens #unownedLeftParenunsafeRightParenTokens #weakTokens #lessThanTokens #colonTokens #commaTokens #greaterThanTokens #periodTokens #protocolTokens #equalEqualTokens #periodPeriodPeriodTokens #varTokens #inoutTokens #letTokens #equalTokens #minusGreaterThanTokens #questionMarkTokens #bangTokens #typeTokens) -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> equalEqualTokens [ - ^ equalEqualTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> equalEqualTokens: anOrderedCollection [ - equalEqualTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> equalTokens [ - ^ equalTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> equalTokens: anOrderedCollection [ - equalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> expressions: anOrderedCollection [ - expressions := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> funcToken [ - ^ funcToken -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> funcToken: aSmaCCToken [ - funcToken := aSmaCCToken -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftProtocolMethodDeclarationNode >> initialize [ - super initialize. - _Tokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - classTokens := OrderedCollection new: 2. - mutatingTokens := OrderedCollection new: 2. - nonmutatingTokens := OrderedCollection new: 2. - overrideTokens := OrderedCollection new: 2. - staticTokens := OrderedCollection new: 2. - unownedTokens := OrderedCollection new: 2. - unownedLeftParensafeRightParenTokens := OrderedCollection new: 2. - unownedLeftParenunsafeRightParenTokens := OrderedCollection new: 2. - weakTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - equalEqualTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - varTokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - letTokens := OrderedCollection new: 2. - equalTokens := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> letTokens [ - ^ letTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> letTokens: anOrderedCollection [ - letTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> mutatingTokens [ - ^ mutatingTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> mutatingTokens: anOrderedCollection [ - mutatingTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> nonmutatingTokens [ - ^ nonmutatingTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> nonmutatingTokens: anOrderedCollection [ - nonmutatingTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> otherVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> overrideTokens [ - ^ overrideTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> overrideTokens: anOrderedCollection [ - overrideTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> staticTokens [ - ^ staticTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> staticTokens: anOrderedCollection [ - staticTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> tokenVariables [ - ^ #(#funcToken #whereToken) -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> unownedLeftParensafeRightParenTokens [ - ^ unownedLeftParensafeRightParenTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> unownedLeftParensafeRightParenTokens: anOrderedCollection [ - unownedLeftParensafeRightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> unownedLeftParenunsafeRightParenTokens [ - ^ unownedLeftParenunsafeRightParenTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> unownedLeftParenunsafeRightParenTokens: anOrderedCollection [ - unownedLeftParenunsafeRightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> unownedTokens [ - ^ unownedTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> unownedTokens: anOrderedCollection [ - unownedTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> varTokens [ - ^ varTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> varTokens: anOrderedCollection [ - varTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> weakTokens [ - ^ weakTokens -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> weakTokens: anOrderedCollection [ - weakTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> whereToken [ - ^ whereToken -] - -{ #category : #generated } -SwiftProtocolMethodDeclarationNode >> whereToken: aSmaCCToken [ - whereToken := aSmaCCToken -] diff --git a/src/SmaCC_Swift/SwiftProtocolPropertyDeclarationNode.class.st b/src/SmaCC_Swift/SwiftProtocolPropertyDeclarationNode.class.st deleted file mode 100644 index 4ebc670dd..000000000 --- a/src/SmaCC_Swift/SwiftProtocolPropertyDeclarationNode.class.st +++ /dev/null @@ -1,456 +0,0 @@ -Class { - #name : #SwiftProtocolPropertyDeclarationNode, - #superclass : #SwiftParseNode, - #instVars : [ - '_Tokens', - 'identifierTokens', - 'leftParenTokens', - 'rightParenTokens', - 'leftBracketTokens', - 'rightBracketTokens', - 'leftBraceTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens', - 'classTokens', - 'mutatingTokens', - 'nonmutatingTokens', - 'overrideTokens', - 'staticTokens', - 'unownedTokens', - 'unownedLeftParensafeRightParenTokens', - 'unownedLeftParenunsafeRightParenTokens', - 'weakTokens', - 'varToken', - 'colonTokens', - 'periodTokens', - 'protocolTokens', - 'lessThanTokens', - 'greaterThanTokens', - 'minusGreaterThanTokens', - 'commaTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens', - 'inoutTokens', - 'getToken', - 'setToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitProtocolPropertyDeclaration: self -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> classTokens [ - ^ classTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> classTokens: anOrderedCollection [ - classTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> compositeTokenVariables [ - ^ #(#_Tokens #identifierTokens #leftParenTokens #rightParenTokens #leftBracketTokens #rightBracketTokens #leftBraceTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens #classTokens #mutatingTokens #nonmutatingTokens #overrideTokens #staticTokens #unownedTokens #unownedLeftParensafeRightParenTokens #unownedLeftParenunsafeRightParenTokens #weakTokens #colonTokens #minusGreaterThanTokens #periodTokens #questionMarkTokens #bangTokens #protocolTokens #lessThanTokens #greaterThanTokens #typeTokens #commaTokens #periodPeriodPeriodTokens #inoutTokens) -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> getToken [ - ^ getToken -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> getToken: aSmaCCToken [ - getToken := aSmaCCToken -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftProtocolPropertyDeclarationNode >> initialize [ - super initialize. - _Tokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - classTokens := OrderedCollection new: 2. - mutatingTokens := OrderedCollection new: 2. - nonmutatingTokens := OrderedCollection new: 2. - overrideTokens := OrderedCollection new: 2. - staticTokens := OrderedCollection new: 2. - unownedTokens := OrderedCollection new: 2. - unownedLeftParensafeRightParenTokens := OrderedCollection new: 2. - unownedLeftParenunsafeRightParenTokens := OrderedCollection new: 2. - weakTokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> mutatingTokens [ - ^ mutatingTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> mutatingTokens: anOrderedCollection [ - mutatingTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> nonmutatingTokens [ - ^ nonmutatingTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> nonmutatingTokens: anOrderedCollection [ - nonmutatingTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> overrideTokens [ - ^ overrideTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> overrideTokens: anOrderedCollection [ - overrideTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> setToken [ - ^ setToken -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> setToken: aSmaCCToken [ - setToken := aSmaCCToken -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> staticTokens [ - ^ staticTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> staticTokens: anOrderedCollection [ - staticTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> tokenVariables [ - ^ #(#varToken #getToken #setToken) -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> unownedLeftParensafeRightParenTokens [ - ^ unownedLeftParensafeRightParenTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> unownedLeftParensafeRightParenTokens: anOrderedCollection [ - unownedLeftParensafeRightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> unownedLeftParenunsafeRightParenTokens [ - ^ unownedLeftParenunsafeRightParenTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> unownedLeftParenunsafeRightParenTokens: anOrderedCollection [ - unownedLeftParenunsafeRightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> unownedTokens [ - ^ unownedTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> unownedTokens: anOrderedCollection [ - unownedTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> varToken [ - ^ varToken -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> varToken: aSmaCCToken [ - varToken := aSmaCCToken -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> weakTokens [ - ^ weakTokens -] - -{ #category : #generated } -SwiftProtocolPropertyDeclarationNode >> weakTokens: anOrderedCollection [ - weakTokens := anOrderedCollection -] diff --git a/src/SmaCC_Swift/SwiftProtocolSubscriptDeclarationNode.class.st b/src/SmaCC_Swift/SwiftProtocolSubscriptDeclarationNode.class.st deleted file mode 100644 index 8293a29b7..000000000 --- a/src/SmaCC_Swift/SwiftProtocolSubscriptDeclarationNode.class.st +++ /dev/null @@ -1,401 +0,0 @@ -Class { - #name : #SwiftProtocolSubscriptDeclarationNode, - #superclass : #SwiftParseNode, - #instVars : [ - '_Tokens', - 'identifierTokens', - 'leftParenTokens', - 'rightParenTokens', - 'leftBracketTokens', - 'rightBracketTokens', - 'leftBraceTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens', - 'subscriptToken', - 'inoutTokens', - 'letTokens', - 'colonTokens', - 'periodTokens', - 'protocolTokens', - 'lessThanTokens', - 'greaterThanTokens', - 'minusGreaterThanTokens', - 'commaTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'equalTokens', - 'expressions', - 'varTokens', - 'periodPeriodPeriodTokens', - 'getToken', - 'setToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitProtocolSubscriptDeclaration: self -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> compositeTokenVariables [ - ^ #(#_Tokens #identifierTokens #leftParenTokens #rightParenTokens #leftBracketTokens #rightBracketTokens #leftBraceTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens #inoutTokens #letTokens #colonTokens #minusGreaterThanTokens #periodTokens #questionMarkTokens #bangTokens #protocolTokens #lessThanTokens #greaterThanTokens #typeTokens #commaTokens #equalTokens #varTokens #periodPeriodPeriodTokens) -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> equalTokens [ - ^ equalTokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> equalTokens: anOrderedCollection [ - equalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> expressions: anOrderedCollection [ - expressions := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> getToken [ - ^ getToken -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> getToken: aSmaCCToken [ - getToken := aSmaCCToken -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftProtocolSubscriptDeclarationNode >> initialize [ - super initialize. - _Tokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - letTokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - equalTokens := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. - varTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> letTokens [ - ^ letTokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> letTokens: anOrderedCollection [ - letTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> otherVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> setToken [ - ^ setToken -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> setToken: aSmaCCToken [ - setToken := aSmaCCToken -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> subscriptToken [ - ^ subscriptToken -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> subscriptToken: aSmaCCToken [ - subscriptToken := aSmaCCToken -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> tokenVariables [ - ^ #(#subscriptToken #getToken #setToken) -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> varTokens [ - ^ varTokens -] - -{ #category : #generated } -SwiftProtocolSubscriptDeclarationNode >> varTokens: anOrderedCollection [ - varTokens := anOrderedCollection -] diff --git a/src/SmaCC_Swift/SwiftReturnStatementNode.class.st b/src/SmaCC_Swift/SwiftReturnStatementNode.class.st deleted file mode 100644 index 64736a01f..000000000 --- a/src/SmaCC_Swift/SwiftReturnStatementNode.class.st +++ /dev/null @@ -1,44 +0,0 @@ -Class { - #name : #SwiftReturnStatementNode, - #superclass : #SwiftControlTransferStatementNode, - #instVars : [ - 'returnToken', - 'expression' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftReturnStatementNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitReturnStatement: self -] - -{ #category : #generated } -SwiftReturnStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -SwiftReturnStatementNode >> expression: anObject [ - expression := anObject -] - -{ #category : #generated } -SwiftReturnStatementNode >> otherVariables [ - ^ #(#expression) -] - -{ #category : #generated } -SwiftReturnStatementNode >> returnToken [ - ^ returnToken -] - -{ #category : #generated } -SwiftReturnStatementNode >> returnToken: aSmaCCToken [ - returnToken := aSmaCCToken -] - -{ #category : #generated } -SwiftReturnStatementNode >> tokenVariables [ - ^ #(#returnToken #semicolonToken) -] diff --git a/src/SmaCC_Swift/SwiftScanner.class.st b/src/SmaCC_Swift/SwiftScanner.class.st deleted file mode 100644 index 0faabad3a..000000000 --- a/src/SmaCC_Swift/SwiftScanner.class.st +++ /dev/null @@ -1,772 +0,0 @@ -Class { - #name : #SwiftScanner, - #superclass : #SmaCCScanner, - #category : #'SmaCC_Swift' -} - -{ #category : #'generated-initialization' } -SwiftScanner class >> initializeKeywordMap [ - keywordMap := Dictionary new. - #(#(90 '->' 7) #(90 '...' 9) #(90 '==' 14) #(86 'Protocol' 18) #(86 'Type' 19) #(86 '__COLUMN__' 23) #(86 '__FILE__' 24) #(86 '__FUNCTION__' 25) #(86 '__LINE__' 26) #(86 'as' 27) #(86 'associativity' 28) #(86 'break' 29) #(86 'case' 30) #(86 'class' 31) #(86 'continue' 32) #(86 'convenience' 33) #(86 'default' 34) #(86 'deinit' 35) #(86 'didSet' 36) #(86 'do' 37) #(86 'dynamicType' 38) #(86 'else' 39) #(86 'enum' 40) #(86 'extension' 41) #(86 'fallthrough' 42) #(86 'for' 43) #(86 'func' 44) #(86 'get' 45) #(86 'if' 46) #(86 'import' 47) #(86 'in' 48) #(86 'infix' 49) #(86 'init' 50) #(86 'inout' 51) #(86 'is' 52) #(86 'left' 53) #(86 'let' 54) #(86 'mutating' 55) #(86 'none' 56) #(86 'nonmutating' 57) #(86 'operator' 58) #(86 'override' 59) #(86 'postfix' 60) #(86 'precedence' 61) #(86 'prefix' 62) #(86 'protocol' 63) #(86 'return' 64) #(86 'right' 65) #(86 'self' 66) #(86 'set' 67) #(86 'static' 68) #(86 'struct' 69) #(86 'subscript' 70) #(86 'super' 71) #(86 'switch' 72) #(86 'typealias' 73) #(86 'unowned' 74) #(86 'var' 77) #(86 'weak' 78) #(86 'where' 79) #(86 'while' 80) #(86 'willSet' 81)) - do: [ :each | - (keywordMap at: each first ifAbsentPut: [ Dictionary new ]) - at: (each at: 2) - put: each last ]. - ^ keywordMap -] - -{ #category : #generated } -SwiftScanner >> emptySymbolTokenId [ - ^ 365 -] - -{ #category : #generated } -SwiftScanner >> errorTokenId [ - ^ 366 -] - -{ #category : #generated } -SwiftScanner >> scan1 [ - [ self step. - currentCharacter == $" - ifTrue: [ ^ self recordAndReportMatch: #(89) ]. - currentCharacter == $\ - ifTrue: - [ ^ self scan1X1 ]. - currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: Character newPage) - or: [ (currentCharacter between: (Character value: 14) and: $!) - or: [ (currentCharacter between: $# and: $[) - or: [ currentCharacter >= $] ] ] ] ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scan10 [ - self recordMatch: #(86). - self step. - currentCharacter == $o - ifTrue: - [ ^ self scan10X1 ]. - ((currentCharacter between: $0 and: $9) - or: [ (currentCharacter between: $A and: $Z) - or: [ currentCharacter == $_ - or: [ (currentCharacter between: $a and: $n) - or: [ currentCharacter between: $p and: $z ] ] ] ]) - ifTrue: [ [ self recordMatch: #(86). - self step. - (currentCharacter between: $0 and: $9) - or: [ (currentCharacter between: $A and: $Z) - or: [ currentCharacter == $_ or: [ currentCharacter between: $a and: $z ] ] ] ] - whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scan10X1 [ - self recordMatch: #(86). - self step. - currentCharacter == $w - ifTrue: - [ ^ self scan10X1X1 ]. - ((currentCharacter between: $0 and: $9) - or: [ (currentCharacter between: $A and: $Z) - or: [ currentCharacter == $_ - or: [ (currentCharacter between: $a and: $v) - or: [ currentCharacter between: $x and: $z ] ] ] ]) - ifTrue: [ [ self recordMatch: #(86). - self step. - (currentCharacter between: $0 and: $9) - or: [ (currentCharacter between: $A and: $Z) - or: [ currentCharacter == $_ or: [ currentCharacter between: $a and: $z ] ] ] ] - whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scan10X1X1 [ - self recordMatch: #(86). - self step. - currentCharacter == $n - ifTrue: - [ ^ self scan10X1X1X1 ]. - ((currentCharacter between: $0 and: $9) - or: [ (currentCharacter between: $A and: $Z) - or: [ currentCharacter == $_ - or: [ (currentCharacter between: $a and: $m) - or: [ currentCharacter between: $o and: $z ] ] ] ]) - ifTrue: [ [ self recordMatch: #(86). - self step. - (currentCharacter between: $0 and: $9) - or: [ (currentCharacter between: $A and: $Z) - or: [ currentCharacter == $_ or: [ currentCharacter between: $a and: $z ] ] ] ] - whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scan10X1X1X1 [ - self recordMatch: #(86). - self step. - currentCharacter == $e - ifTrue: [ self recordMatch: #(86). - self step. - currentCharacter == $d - ifTrue: [ self recordMatch: #(86). - self step. - currentCharacter == $( - ifTrue: [ self step. - currentCharacter == $s - ifTrue: [ (self scanForString: 'afe)') - ifTrue: [ ^ self recordAndReportMatch: #(75) ]. - ^ self reportLastMatch ]. - currentCharacter == $u - ifTrue: [ (self scanForString: 'nsafe)') - ifTrue: [ ^ self recordAndReportMatch: #(76) ] ]. - ^ self reportLastMatch ]. - ((currentCharacter between: $0 and: $9) - or: [ (currentCharacter between: $A and: $Z) - or: [ currentCharacter == $_ or: [ currentCharacter between: $a and: $z ] ] ]) - ifTrue: [ [ self recordMatch: #(86). - self step. - (currentCharacter between: $0 and: $9) - or: [ (currentCharacter between: $A and: $Z) - or: [ currentCharacter == $_ or: [ currentCharacter between: $a and: $z ] ] ] ] - whileTrue ]. - ^ self reportLastMatch ]. - ((currentCharacter between: $0 and: $9) - or: [ (currentCharacter between: $A and: $Z) - or: [ currentCharacter == $_ - or: [ (currentCharacter between: $a and: $c) - or: [ currentCharacter between: $e and: $z ] ] ] ]) - ifTrue: [ [ self recordMatch: #(86). - self step. - (currentCharacter between: $0 and: $9) - or: [ (currentCharacter between: $A and: $Z) - or: [ currentCharacter == $_ or: [ currentCharacter between: $a and: $z ] ] ] ] - whileTrue ]. - ^ self reportLastMatch ]. - ((currentCharacter between: $0 and: $9) - or: [ (currentCharacter between: $A and: $Z) - or: [ currentCharacter == $_ - or: [ (currentCharacter between: $a and: $d) - or: [ currentCharacter between: $f and: $z ] ] ] ]) - ifTrue: [ [ self recordMatch: #(86). - self step. - (currentCharacter between: $0 and: $9) - or: [ (currentCharacter between: $A and: $Z) - or: [ currentCharacter == $_ or: [ currentCharacter between: $a and: $z ] ] ] ] - whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scan1X1 [ - self step. - currentCharacter == $U - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ ^ self scan2 ] ] ] ]. - ^ self reportLastMatch ]. - currentCharacter == $u - ifTrue: [ ^ self scan2 ]. - currentCharacter == $x - ifTrue: [ ^ self scan3 ]. - ('"(0\nrt' includes: currentCharacter) - ifTrue: [ ^ self scan1 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scan2 [ - self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ ^ self scan3 ] ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scan3 [ - self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ ^ self scan1 ] ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scan4 [ - [ self recordMatch: #(90). - self step. - currentCharacter == $* - ifTrue: [ [ self recordMatch: #(90). - self step. - currentCharacter == $* ] whileTrue. - currentCharacter == $/ - ifTrue: [ self recordMatch: #(85 90). - self step. - (currentCharacter == $! - or: [ (currentCharacter between: $% and: $&) - or: [ (currentCharacter between: $* and: $+) - or: [ (currentCharacter between: $- and: $/) - or: [ (currentCharacter between: $< and: $>) - or: [ '^|~' includes: currentCharacter ] ] ] ] ]) - ifTrue: [ [ self recordMatch: #(90). - self step. - currentCharacter == $! - or: [ (currentCharacter between: $% and: $&) - or: [ (currentCharacter between: $* and: $+) - or: [ (currentCharacter between: $- and: $/) - or: [ (currentCharacter between: $< and: $>) - or: [ '^|~' includes: currentCharacter ] ] ] ] ] ] - whileTrue ]. - ^ self reportLastMatch ]. - (currentCharacter == $! - or: [ (currentCharacter between: $% and: $&) - or: [ currentCharacter == $+ - or: [ (currentCharacter between: $- and: $.) - or: [ (currentCharacter between: $< and: $>) - or: [ '^|~' includes: currentCharacter ] ] ] ] ]) - ifTrue: [ ^ self scan4 ]. - ^ self scan5 ]. - currentCharacter == $! - or: [ (currentCharacter between: $% and: $&) - or: [ currentCharacter == $+ - or: [ (currentCharacter between: $- and: $/) - or: [ (currentCharacter between: $< and: $>) - or: [ '^|~' includes: currentCharacter ] ] ] ] ] ] whileTrue. - ^ self scan5 -] - -{ #category : #generated } -SwiftScanner >> scan5 [ - [ self step. - currentCharacter == $* - ifTrue: [ [ self step. - currentCharacter == $* ] whileTrue. - currentCharacter == $/ - ifTrue: [ ^ self recordAndReportMatch: #(85) ]. - ^ self scan5 ]. - true ] whileTrue -] - -{ #category : #generated } -SwiftScanner >> scan6 [ - self step. - currentCharacter isDigit - ifTrue: [ [ self recordMatch: #(88). - self step. - ('Ee' includes: currentCharacter) - ifTrue: [ ^ self scan7 ]. - currentCharacter isDigit or: [ currentCharacter == $_ ] ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scan7 [ - self step. - currentCharacter isDigit - ifTrue: [ [ self recordMatch: #(88). - self step. - currentCharacter isDigit or: [ currentCharacter == $_ ] ] whileTrue. - ^ self reportLastMatch ]. - ('+-' includes: currentCharacter) - ifTrue: [ self step. - currentCharacter isDigit - ifTrue: [ [ self recordMatch: #(88). - self step. - currentCharacter isDigit or: [ currentCharacter == $_ ] ] - whileTrue ] ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scan8 [ - [ self recordMatch: #(87 88). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan6 ]. - ('Ee' includes: currentCharacter) - ifTrue: [ ^ self scan7 ]. - currentCharacter isDigit or: [ currentCharacter == $_ ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scan9 [ - self recordMatch: #(86). - self step. - currentCharacter == $n - ifTrue: [ ^ self scan10 ]. - ((currentCharacter between: $0 and: $9) - or: [ (currentCharacter between: $A and: $Z) - or: [ currentCharacter == $_ - or: [ (currentCharacter between: $a and: $m) - or: [ currentCharacter between: $o and: $z ] ] ] ]) - ifTrue: [ [ self recordMatch: #(86). - self step. - (currentCharacter between: $0 and: $9) - or: [ (currentCharacter between: $A and: $Z) - or: [ currentCharacter == $_ or: [ currentCharacter between: $a and: $z ] ] ] ] - whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scanForToken [ - self step. - currentCharacter == $! - ifTrue: - [ ^ self scanForTokenX8 ]. - currentCharacter == $" - ifTrue: [ ^ self scan1 ]. - currentCharacter == $# - ifTrue: [ ^ self recordAndReportMatch: #(2) ]. - currentCharacter == $$ - ifTrue: - [ ^ self scanForTokenX14 ]. - currentCharacter == $& - ifTrue: - [ ^ self scanForTokenX7 ]. - currentCharacter == $( - ifTrue: [ ^ self recordAndReportMatch: #(4) ]. - currentCharacter == $) - ifTrue: [ ^ self recordAndReportMatch: #(5) ]. - currentCharacter == $, - ifTrue: [ ^ self recordAndReportMatch: #(6) ]. - currentCharacter == $. - ifTrue: - [ ^ self scanForTokenX6 ]. - currentCharacter == $/ - ifTrue: - [ ^ self scanForTokenX1 ]. - currentCharacter == $0 - ifTrue: - [ ^ self scanForTokenX2 ]. - ^ self scanForTokenX16 -] - -{ #category : #generated } -SwiftScanner >> scanForTokenX1 [ - self recordMatch: #(90). - self step. - currentCharacter == $* - ifTrue: [ ^ self scan4 ]. - currentCharacter == $/ - ifTrue: - [ ^ self scanForTokenX1X1 ]. - (currentCharacter == $! - or: [ (currentCharacter between: $% and: $&) - or: [ currentCharacter == $+ - or: [ (currentCharacter between: $- and: $.) - or: [ (currentCharacter between: $< and: $>) - or: - [ '^|~' includes: currentCharacter ] ] ] ] ]) - ifTrue: [ [ self recordMatch: #(90). - self step. - currentCharacter == $! - or: [ (currentCharacter between: $% and: $&) - or: [ (currentCharacter between: $* and: $+) - or: [ (currentCharacter between: $- and: $/) - or: [ (currentCharacter between: $< and: $>) - or: - [ '^|~' includes: currentCharacter ] ] ] ] ] ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scanForTokenX10 [ - self step. - ((currentCharacter between: $A and: $Z) - or: [ currentCharacter == $_ or: [ currentCharacter between: $a and: $z ] ]) - ifTrue: [ [ self step. - currentCharacter == $` - ifTrue: [ ^ self recordAndReportMatch: #(86) ]. - (currentCharacter between: $0 and: $9) - or: [ (currentCharacter between: $A and: $Z) - or: [ currentCharacter == $_ or: [ currentCharacter between: $a and: $z ] ] ] ] - whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scanForTokenX11 [ - self recordMatch: #(22 86). - self step. - ((currentCharacter between: $0 and: $9) - or: [ (currentCharacter between: $A and: $Z) - or: [ currentCharacter == $_ or: [ currentCharacter between: $a and: $z ] ] ]) - ifTrue: [ [ self recordMatch: #(86). - self step. - (currentCharacter between: $0 and: $9) - or: [ (currentCharacter between: $A and: $Z) - or: [ currentCharacter == $_ or: [ currentCharacter between: $a and: $z ] ] ] ] - whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scanForTokenX12 [ - [ self recordMatch: #(86). - self step. - (currentCharacter between: $0 and: $9) - or: [ (currentCharacter between: $A and: $Z) - or: [ currentCharacter == $_ or: [ currentCharacter between: $a and: $z ] ] ] ] - whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scanForTokenX13 [ - [ self recordMatch: #(84). - self step. - currentCharacter isSeparator - or: [ currentCharacter == Character pageUp ] ] whileTrue. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scanForTokenX14 [ - self step. - currentCharacter isDigit - ifTrue: [ [ self recordMatch: #(86). - self step. - currentCharacter isDigit ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scanForTokenX15 [ - currentCharacter == ${ - ifTrue: [ ^ self recordAndReportMatch: #(82) ]. - currentCharacter == $} - ifTrue: [ ^ self recordAndReportMatch: #(83) ]. - currentCharacter isDigit - ifTrue: [ ^ self scan8 ]. - (currentCharacter isSeparator - or: [ currentCharacter == Character pageUp ]) - ifTrue: - [ ^ self scanForTokenX13 ]. - ((currentCharacter between: $A and: $Z) - or: [ (currentCharacter between: $a and: $t) - or: [ currentCharacter between: $v and: $z ] ]) - ifTrue: - [ ^ self scanForTokenX12 ]. - (currentCharacter == $% - or: [ (currentCharacter between: $* and: $+) - or: - [ '-^|~' includes: currentCharacter ] ]) - ifTrue: - [ self scanForTokenX9 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scanForTokenX16 [ - currentCharacter == $: - ifTrue: [ ^ self recordAndReportMatch: #(10) ]. - currentCharacter == $; - ifTrue: [ ^ self recordAndReportMatch: #(11) ]. - currentCharacter == $< - ifTrue: - [ ^ self scanForTokenX5 ]. - currentCharacter == $= - ifTrue: - [ ^ self scanForTokenX4 ]. - currentCharacter == $> - ifTrue: - [ ^ self scanForTokenX3 ]. - currentCharacter == $? - ifTrue: [ ^ self recordAndReportMatch: #(16) ]. - currentCharacter == $@ - ifTrue: [ ^ self recordAndReportMatch: #(17) ]. - currentCharacter == $[ - ifTrue: [ ^ self recordAndReportMatch: #(20) ]. - currentCharacter == $] - ifTrue: [ ^ self recordAndReportMatch: #(21) ]. - currentCharacter == $_ - ifTrue: - [ ^ self scanForTokenX11 ]. - currentCharacter == $` - ifTrue: - [ ^ self scanForTokenX10 ]. - currentCharacter == $u - ifTrue: [ ^ self scan9 ]. - ^ self scanForTokenX15 -] - -{ #category : #generated } -SwiftScanner >> scanForTokenX1X1 [ - [ self recordMatch: #(85 90). - self step. - currentCharacter == $! - or: [ (currentCharacter between: $% and: $&) - or: [ (currentCharacter between: $* and: $+) - or: [ (currentCharacter between: $- and: $/) - or: [ (currentCharacter between: $< and: $>) - or: - [ '^|~' includes: currentCharacter ] ] ] ] ] ] whileTrue. - ^ self scanForTokenX1X1X2 -] - -{ #category : #generated } -SwiftScanner >> scanForTokenX1X1X1 [ - [ self recordMatch: #(85). - self step. - currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: Character newPage) - or: [ currentCharacter >= (Character value: 14) ] ] ] whileTrue -] - -{ #category : #generated } -SwiftScanner >> scanForTokenX1X1X2 [ - (currentCharacter <= Character tab - or: [ (currentCharacter between: Character pageUp and: Character newPage) - or: [ (currentCharacter - between: (Character value: 14) - and: Character space) - or: [ (currentCharacter between: $" and: $$) - or: [ (currentCharacter between: $' and: $)) - or: [ currentCharacter == $, - or: [ (currentCharacter between: $0 and: $;) - or: [ (currentCharacter between: $? and: $]) - or: [ (currentCharacter between: $_ and: ${) - or: [ currentCharacter == $} - or: [ currentCharacter >= (Character value: 127) ] ] ] ] ] ] ] ] ] ]) - ifTrue: - [ self scanForTokenX1X1X1 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scanForTokenX2 [ - self recordMatch: #(87 88). - self step. - currentCharacter == $. - ifTrue: [ ^ self scan6 ]. - currentCharacter == $b - ifTrue: [ self step. - (currentCharacter between: $0 and: $1) - ifTrue: [ [ self recordMatch: #(87). - self step. - (currentCharacter between: $0 and: $1) - or: [ currentCharacter == $_ ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter == $o - ifTrue: [ self step. - (currentCharacter between: $0 and: $7) - ifTrue: [ [ self recordMatch: #(87). - self step. - (currentCharacter between: $0 and: $7) - or: [ currentCharacter == $_ ] ] whileTrue ]. - ^ self reportLastMatch ]. - currentCharacter == $x - ifTrue: [ self step. - (currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter between: $a and: $f ] ]) - ifTrue: [ [ self recordMatch: #(87). - self step. - currentCharacter == $. - ifTrue: [ [ self step. - ('Pp' includes: currentCharacter) - ifTrue: [ ^ self scan7 ]. - currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter == $_ or: [ currentCharacter between: $a and: $f ] ] ] ] - whileTrue. - ^ self reportLastMatch ]. - ('Pp' includes: currentCharacter) - ifTrue: [ ^ self scan7 ]. - currentCharacter isDigit - or: [ (currentCharacter between: $A and: $F) - or: [ currentCharacter == $_ or: [ currentCharacter between: $a and: $f ] ] ] ] - whileTrue ]. - ^ self reportLastMatch ]. - ('Ee' includes: currentCharacter) - ifTrue: [ ^ self scan7 ]. - (currentCharacter isDigit or: [ currentCharacter == $_ ]) - ifTrue: [ ^ self scan8 ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scanForTokenX3 [ - self recordMatch: #(15 90). - self step. - (currentCharacter == $! - or: [ (currentCharacter between: $% and: $&) - or: [ (currentCharacter between: $* and: $+) - or: [ (currentCharacter between: $- and: $/) - or: [ (currentCharacter between: $< and: $>) - or: - [ '^|~' includes: currentCharacter ] ] ] ] ]) - ifTrue: [ [ self recordMatch: #(90). - self step. - currentCharacter == $! - or: [ (currentCharacter between: $% and: $&) - or: [ (currentCharacter between: $* and: $+) - or: [ (currentCharacter between: $- and: $/) - or: [ (currentCharacter between: $< and: $>) - or: - [ '^|~' includes: currentCharacter ] ] ] ] ] ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scanForTokenX4 [ - self recordMatch: #(13 90). - self step. - (currentCharacter == $! - or: [ (currentCharacter between: $% and: $&) - or: [ (currentCharacter between: $* and: $+) - or: [ (currentCharacter between: $- and: $/) - or: [ (currentCharacter between: $< and: $>) - or: - [ '^|~' includes: currentCharacter ] ] ] ] ]) - ifTrue: [ [ self recordMatch: #(90). - self step. - currentCharacter == $! - or: [ (currentCharacter between: $% and: $&) - or: [ (currentCharacter between: $* and: $+) - or: [ (currentCharacter between: $- and: $/) - or: [ (currentCharacter between: $< and: $>) - or: - [ '^|~' includes: currentCharacter ] ] ] ] ] ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scanForTokenX5 [ - self recordMatch: #(12 90). - self step. - (currentCharacter == $! - or: [ (currentCharacter between: $% and: $&) - or: [ (currentCharacter between: $* and: $+) - or: [ (currentCharacter between: $- and: $/) - or: [ (currentCharacter between: $< and: $>) - or: - [ '^|~' includes: currentCharacter ] ] ] ] ]) - ifTrue: [ [ self recordMatch: #(90). - self step. - currentCharacter == $! - or: [ (currentCharacter between: $% and: $&) - or: [ (currentCharacter between: $* and: $+) - or: [ (currentCharacter between: $- and: $/) - or: [ (currentCharacter between: $< and: $>) - or: - [ '^|~' includes: currentCharacter ] ] ] ] ] ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scanForTokenX6 [ - self recordMatch: #(8 90). - self step. - (currentCharacter == $! - or: [ (currentCharacter between: $% and: $&) - or: [ (currentCharacter between: $* and: $+) - or: [ (currentCharacter between: $- and: $/) - or: [ (currentCharacter between: $< and: $>) - or: - [ '^|~' includes: currentCharacter ] ] ] ] ]) - ifTrue: [ [ self recordMatch: #(90). - self step. - currentCharacter == $! - or: [ (currentCharacter between: $% and: $&) - or: [ (currentCharacter between: $* and: $+) - or: [ (currentCharacter between: $- and: $/) - or: [ (currentCharacter between: $< and: $>) - or: - [ '^|~' includes: currentCharacter ] ] ] ] ] ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scanForTokenX7 [ - self recordMatch: #(3 90). - self step. - (currentCharacter == $! - or: [ (currentCharacter between: $% and: $&) - or: [ (currentCharacter between: $* and: $+) - or: [ (currentCharacter between: $- and: $/) - or: [ (currentCharacter between: $< and: $>) - or: - [ '^|~' includes: currentCharacter ] ] ] ] ]) - ifTrue: [ [ self recordMatch: #(90). - self step. - currentCharacter == $! - or: [ (currentCharacter between: $% and: $&) - or: [ (currentCharacter between: $* and: $+) - or: [ (currentCharacter between: $- and: $/) - or: [ (currentCharacter between: $< and: $>) - or: - [ '^|~' includes: currentCharacter ] ] ] ] ] ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scanForTokenX8 [ - self recordMatch: #(1 90). - self step. - (currentCharacter == $! - or: [ (currentCharacter between: $% and: $&) - or: [ (currentCharacter between: $* and: $+) - or: [ (currentCharacter between: $- and: $/) - or: [ (currentCharacter between: $< and: $>) - or: - [ '^|~' includes: currentCharacter ] ] ] ] ]) - ifTrue: [ [ self recordMatch: #(90). - self step. - currentCharacter == $! - or: [ (currentCharacter between: $% and: $&) - or: [ (currentCharacter between: $* and: $+) - or: [ (currentCharacter between: $- and: $/) - or: [ (currentCharacter between: $< and: $>) - or: - [ '^|~' includes: currentCharacter ] ] ] ] ] ] whileTrue ]. - ^ self reportLastMatch -] - -{ #category : #generated } -SwiftScanner >> scanForTokenX9 [ - [ self recordMatch: #(90). - self step. - currentCharacter == $! - or: [ (currentCharacter between: $% and: $&) - or: [ (currentCharacter between: $* and: $+) - or: [ (currentCharacter between: $- and: $/) - or: [ (currentCharacter between: $< and: $>) - or: - [ '^|~' includes: currentCharacter ] ] ] ] ] ] whileTrue -] - -{ #category : #generated } -SwiftScanner >> tokenActions [ - ^ #(nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil #whitespace #comment) -] diff --git a/src/SmaCC_Swift/SwiftSelfExpressionNode.class.st b/src/SmaCC_Swift/SwiftSelfExpressionNode.class.st deleted file mode 100644 index 11041915a..000000000 --- a/src/SmaCC_Swift/SwiftSelfExpressionNode.class.st +++ /dev/null @@ -1,99 +0,0 @@ -Class { - #name : #SwiftSelfExpressionNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'selfToken', - 'periodToken', - 'identifierToken', - 'leftBracketToken', - 'expression', - 'rightBracketToken', - 'initToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftSelfExpressionNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitSelfExpression: self -] - -{ #category : #generated } -SwiftSelfExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -SwiftSelfExpressionNode >> expression: anObject [ - expression := anObject -] - -{ #category : #generated } -SwiftSelfExpressionNode >> identifierToken [ - ^ identifierToken -] - -{ #category : #generated } -SwiftSelfExpressionNode >> identifierToken: aSmaCCToken [ - identifierToken := aSmaCCToken -] - -{ #category : #generated } -SwiftSelfExpressionNode >> initToken [ - ^ initToken -] - -{ #category : #generated } -SwiftSelfExpressionNode >> initToken: aSmaCCToken [ - initToken := aSmaCCToken -] - -{ #category : #generated } -SwiftSelfExpressionNode >> leftBracketToken [ - ^ leftBracketToken -] - -{ #category : #generated } -SwiftSelfExpressionNode >> leftBracketToken: aSmaCCToken [ - leftBracketToken := aSmaCCToken -] - -{ #category : #generated } -SwiftSelfExpressionNode >> otherVariables [ - ^ #(#expression) -] - -{ #category : #generated } -SwiftSelfExpressionNode >> periodToken [ - ^ periodToken -] - -{ #category : #generated } -SwiftSelfExpressionNode >> periodToken: aSmaCCToken [ - periodToken := aSmaCCToken -] - -{ #category : #generated } -SwiftSelfExpressionNode >> rightBracketToken [ - ^ rightBracketToken -] - -{ #category : #generated } -SwiftSelfExpressionNode >> rightBracketToken: aSmaCCToken [ - rightBracketToken := aSmaCCToken -] - -{ #category : #generated } -SwiftSelfExpressionNode >> selfToken [ - ^ selfToken -] - -{ #category : #generated } -SwiftSelfExpressionNode >> selfToken: aSmaCCToken [ - selfToken := aSmaCCToken -] - -{ #category : #generated } -SwiftSelfExpressionNode >> tokenVariables [ - ^ #(#selfToken #periodToken #identifierToken #leftBracketToken #rightBracketToken #initToken) -] diff --git a/src/SmaCC_Swift/SwiftStatementNode.class.st b/src/SmaCC_Swift/SwiftStatementNode.class.st deleted file mode 100644 index 341f91f1d..000000000 --- a/src/SmaCC_Swift/SwiftStatementNode.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #SwiftStatementNode, - #superclass : #SwiftParseNode, - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftStatementNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitStatement: self -] diff --git a/src/SmaCC_Swift/SwiftStructDeclarationNode.class.st b/src/SmaCC_Swift/SwiftStructDeclarationNode.class.st deleted file mode 100644 index dd06b0399..000000000 --- a/src/SmaCC_Swift/SwiftStructDeclarationNode.class.st +++ /dev/null @@ -1,296 +0,0 @@ -Class { - #name : #SwiftStructDeclarationNode, - #superclass : #SwiftParseNode, - #instVars : [ - '_Tokens', - 'identifierTokens', - 'leftParenTokens', - 'rightParenTokens', - 'leftBracketTokens', - 'rightBracketTokens', - 'leftBraceTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens', - 'structToken', - 'lessThanTokens', - 'colonTokens', - 'commaTokens', - 'greaterThanTokens', - 'periodTokens', - 'protocolTokens', - 'whereToken', - 'equalEqualTokens', - 'declarations' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftStructDeclarationNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftStructDeclarationNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftStructDeclarationNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitStructDeclaration: self -] - -{ #category : #generated } -SwiftStructDeclarationNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftStructDeclarationNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftStructDeclarationNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftStructDeclarationNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftStructDeclarationNode >> compositeNodeVariables [ - ^ #(#declarations) -] - -{ #category : #generated } -SwiftStructDeclarationNode >> compositeTokenVariables [ - ^ #(#_Tokens #identifierTokens #leftParenTokens #rightParenTokens #leftBracketTokens #rightBracketTokens #leftBraceTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens #lessThanTokens #colonTokens #commaTokens #greaterThanTokens #periodTokens #protocolTokens #equalEqualTokens) -] - -{ #category : #generated } -SwiftStructDeclarationNode >> declarations [ - ^ declarations -] - -{ #category : #generated } -SwiftStructDeclarationNode >> declarations: anOrderedCollection [ - self setParents: self declarations to: nil. - declarations := anOrderedCollection. - self setParents: self declarations to: self -] - -{ #category : #generated } -SwiftStructDeclarationNode >> equalEqualTokens [ - ^ equalEqualTokens -] - -{ #category : #generated } -SwiftStructDeclarationNode >> equalEqualTokens: anOrderedCollection [ - equalEqualTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftStructDeclarationNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftStructDeclarationNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftStructDeclarationNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftStructDeclarationNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftStructDeclarationNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftStructDeclarationNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftStructDeclarationNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftStructDeclarationNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftStructDeclarationNode >> initialize [ - super initialize. - _Tokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - equalEqualTokens := OrderedCollection new: 2. - declarations := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftStructDeclarationNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftStructDeclarationNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftStructDeclarationNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftStructDeclarationNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftStructDeclarationNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftStructDeclarationNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftStructDeclarationNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftStructDeclarationNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftStructDeclarationNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftStructDeclarationNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftStructDeclarationNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftStructDeclarationNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftStructDeclarationNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftStructDeclarationNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftStructDeclarationNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftStructDeclarationNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftStructDeclarationNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftStructDeclarationNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftStructDeclarationNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftStructDeclarationNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftStructDeclarationNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftStructDeclarationNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftStructDeclarationNode >> structToken [ - ^ structToken -] - -{ #category : #generated } -SwiftStructDeclarationNode >> structToken: aSmaCCToken [ - structToken := aSmaCCToken -] - -{ #category : #generated } -SwiftStructDeclarationNode >> tokenVariables [ - ^ #(#structToken #whereToken) -] - -{ #category : #generated } -SwiftStructDeclarationNode >> whereToken [ - ^ whereToken -] - -{ #category : #generated } -SwiftStructDeclarationNode >> whereToken: aSmaCCToken [ - whereToken := aSmaCCToken -] diff --git a/src/SmaCC_Swift/SwiftSubscriptDeclarationNode.class.st b/src/SmaCC_Swift/SwiftSubscriptDeclarationNode.class.st deleted file mode 100644 index f49c70ee5..000000000 --- a/src/SmaCC_Swift/SwiftSubscriptDeclarationNode.class.st +++ /dev/null @@ -1,420 +0,0 @@ -Class { - #name : #SwiftSubscriptDeclarationNode, - #superclass : #SwiftParseNode, - #instVars : [ - '_Tokens', - 'identifierTokens', - 'leftParenTokens', - 'rightParenTokens', - 'leftBracketTokens', - 'rightBracketTokens', - 'leftBraceTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens', - 'subscriptToken', - 'inoutTokens', - 'letTokens', - 'colonTokens', - 'periodTokens', - 'protocolTokens', - 'lessThanTokens', - 'greaterThanTokens', - 'minusGreaterThanTokens', - 'commaTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'equalTokens', - 'expressions', - 'varTokens', - 'periodPeriodPeriodTokens', - 'blocks', - 'getToken', - 'setToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitSubscriptDeclaration: self -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> blocks [ - ^ blocks -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> blocks: anOrderedCollection [ - self setParents: self blocks to: nil. - blocks := anOrderedCollection. - self setParents: self blocks to: self -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> compositeNodeVariables [ - ^ #(#blocks) -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> compositeTokenVariables [ - ^ #(#_Tokens #identifierTokens #leftParenTokens #rightParenTokens #leftBracketTokens #rightBracketTokens #leftBraceTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens #inoutTokens #letTokens #colonTokens #minusGreaterThanTokens #periodTokens #questionMarkTokens #bangTokens #protocolTokens #lessThanTokens #greaterThanTokens #typeTokens #commaTokens #equalTokens #varTokens #periodPeriodPeriodTokens) -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> equalTokens [ - ^ equalTokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> equalTokens: anOrderedCollection [ - equalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> expressions: anOrderedCollection [ - expressions := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> getToken [ - ^ getToken -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> getToken: aSmaCCToken [ - getToken := aSmaCCToken -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftSubscriptDeclarationNode >> initialize [ - super initialize. - _Tokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - letTokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - equalTokens := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. - varTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - blocks := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> letTokens [ - ^ letTokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> letTokens: anOrderedCollection [ - letTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> otherVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> setToken [ - ^ setToken -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> setToken: aSmaCCToken [ - setToken := aSmaCCToken -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> subscriptToken [ - ^ subscriptToken -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> subscriptToken: aSmaCCToken [ - subscriptToken := aSmaCCToken -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> tokenVariables [ - ^ #(#subscriptToken #getToken #setToken) -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> varTokens [ - ^ varTokens -] - -{ #category : #generated } -SwiftSubscriptDeclarationNode >> varTokens: anOrderedCollection [ - varTokens := anOrderedCollection -] diff --git a/src/SmaCC_Swift/SwiftSubscriptExpressionNode.class.st b/src/SmaCC_Swift/SwiftSubscriptExpressionNode.class.st deleted file mode 100644 index 75ba0d10f..000000000 --- a/src/SmaCC_Swift/SwiftSubscriptExpressionNode.class.st +++ /dev/null @@ -1,546 +0,0 @@ -Class { - #name : #SwiftSubscriptExpressionNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'identifierTokens', - 'lessThanTokens', - 'commaTokens', - 'greaterThanTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'leftBracketTokens', - 'expressions', - 'rightBracketTokens', - 'keyExpressions', - 'colonTokens', - 'valueExpressions', - '__FILE__Token', - '__LINE__Token', - '__COLUMN__Token', - '__FUNCTION__Token', - 'selfTokens', - 'periodTokens', - 'initTokens', - 'leftBraceTokens', - 'leftParenTokens', - 'rightParenTokens', - 'inoutTokens', - 'letTokens', - '_Tokens', - 'protocolTokens', - 'minusGreaterThanTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens', - 'equalTokens', - 'varTokens', - 'rightBraceTokens', - 'operatorTokens', - 'inToken', - 'weakToken', - 'unownedToken', - 'unownedLeftParensafeRightParenToken', - 'unownedLeftParenunsafeRightParenToken', - 'statements', - 'dynamicTypeTokens' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftSubscriptExpressionNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> __COLUMN__Token [ - ^ __COLUMN__Token -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> __COLUMN__Token: aSmaCCToken [ - __COLUMN__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> __FILE__Token [ - ^ __FILE__Token -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> __FILE__Token: aSmaCCToken [ - __FILE__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> __FUNCTION__Token [ - ^ __FUNCTION__Token -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> __FUNCTION__Token: aSmaCCToken [ - __FUNCTION__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> __LINE__Token [ - ^ __LINE__Token -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> __LINE__Token: aSmaCCToken [ - __LINE__Token := aSmaCCToken -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitSubscriptExpression: self -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> compositeNodeVariables [ - ^ #(#statements) -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> compositeTokenVariables [ - ^ #(#identifierTokens #lessThanTokens #commaTokens #greaterThanTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #leftBracketTokens #rightBracketTokens #colonTokens #selfTokens #periodTokens #initTokens #leftBraceTokens #leftParenTokens #rightParenTokens #inoutTokens #letTokens #_Tokens #minusGreaterThanTokens #questionMarkTokens #bangTokens #protocolTokens #typeTokens #periodPeriodPeriodTokens #equalTokens #varTokens #rightBraceTokens #operatorTokens #dynamicTypeTokens) -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> dynamicTypeTokens [ - ^ dynamicTypeTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> dynamicTypeTokens: anOrderedCollection [ - dynamicTypeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> equalTokens [ - ^ equalTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> equalTokens: anOrderedCollection [ - equalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> expressions: anOrderedCollection [ - expressions := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> inToken [ - ^ inToken -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> inToken: aSmaCCToken [ - inToken := aSmaCCToken -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> initTokens [ - ^ initTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> initTokens: anOrderedCollection [ - initTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftSubscriptExpressionNode >> initialize [ - super initialize. - identifierTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - expressions := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - keyExpressions := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - valueExpressions := OrderedCollection new: 2. - selfTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - initTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - letTokens := OrderedCollection new: 2. - _Tokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - equalTokens := OrderedCollection new: 2. - varTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - statements := OrderedCollection new: 2. - dynamicTypeTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> keyExpressions [ - ^ keyExpressions -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> keyExpressions: anOrderedCollection [ - keyExpressions := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> letTokens [ - ^ letTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> letTokens: anOrderedCollection [ - letTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> otherVariables [ - ^ #(#expressions #keyExpressions #valueExpressions) -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> selfTokens [ - ^ selfTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> selfTokens: anOrderedCollection [ - selfTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> statements [ - ^ statements -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> tokenVariables [ - ^ #(#__FILE__Token #__LINE__Token #__COLUMN__Token #__FUNCTION__Token #inToken #weakToken #unownedToken #unownedLeftParensafeRightParenToken #unownedLeftParenunsafeRightParenToken) -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> unownedLeftParensafeRightParenToken [ - ^ unownedLeftParensafeRightParenToken -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> unownedLeftParensafeRightParenToken: aSmaCCToken [ - unownedLeftParensafeRightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> unownedLeftParenunsafeRightParenToken [ - ^ unownedLeftParenunsafeRightParenToken -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> unownedLeftParenunsafeRightParenToken: aSmaCCToken [ - unownedLeftParenunsafeRightParenToken := aSmaCCToken -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> unownedToken [ - ^ unownedToken -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> unownedToken: aSmaCCToken [ - unownedToken := aSmaCCToken -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> valueExpressions [ - ^ valueExpressions -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> valueExpressions: anOrderedCollection [ - valueExpressions := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> varTokens [ - ^ varTokens -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> varTokens: anOrderedCollection [ - varTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> weakToken [ - ^ weakToken -] - -{ #category : #generated } -SwiftSubscriptExpressionNode >> weakToken: aSmaCCToken [ - weakToken := aSmaCCToken -] diff --git a/src/SmaCC_Swift/SwiftSuperclassInitializerExpressionNode.class.st b/src/SmaCC_Swift/SwiftSuperclassInitializerExpressionNode.class.st deleted file mode 100644 index 7dc998a4d..000000000 --- a/src/SmaCC_Swift/SwiftSuperclassInitializerExpressionNode.class.st +++ /dev/null @@ -1,50 +0,0 @@ -Class { - #name : #SwiftSuperclassInitializerExpressionNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'superToken', - 'periodToken', - 'initToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftSuperclassInitializerExpressionNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitSuperclassInitializerExpression: self -] - -{ #category : #generated } -SwiftSuperclassInitializerExpressionNode >> initToken [ - ^ initToken -] - -{ #category : #generated } -SwiftSuperclassInitializerExpressionNode >> initToken: aSmaCCToken [ - initToken := aSmaCCToken -] - -{ #category : #generated } -SwiftSuperclassInitializerExpressionNode >> periodToken [ - ^ periodToken -] - -{ #category : #generated } -SwiftSuperclassInitializerExpressionNode >> periodToken: aSmaCCToken [ - periodToken := aSmaCCToken -] - -{ #category : #generated } -SwiftSuperclassInitializerExpressionNode >> superToken [ - ^ superToken -] - -{ #category : #generated } -SwiftSuperclassInitializerExpressionNode >> superToken: aSmaCCToken [ - superToken := aSmaCCToken -] - -{ #category : #generated } -SwiftSuperclassInitializerExpressionNode >> tokenVariables [ - ^ #(#superToken #periodToken #initToken) -] diff --git a/src/SmaCC_Swift/SwiftSuperclassMethodExpressionNode.class.st b/src/SmaCC_Swift/SwiftSuperclassMethodExpressionNode.class.st deleted file mode 100644 index 34e7fa1f4..000000000 --- a/src/SmaCC_Swift/SwiftSuperclassMethodExpressionNode.class.st +++ /dev/null @@ -1,50 +0,0 @@ -Class { - #name : #SwiftSuperclassMethodExpressionNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'superToken', - 'periodToken', - 'identifierToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftSuperclassMethodExpressionNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitSuperclassMethodExpression: self -] - -{ #category : #generated } -SwiftSuperclassMethodExpressionNode >> identifierToken [ - ^ identifierToken -] - -{ #category : #generated } -SwiftSuperclassMethodExpressionNode >> identifierToken: aSmaCCToken [ - identifierToken := aSmaCCToken -] - -{ #category : #generated } -SwiftSuperclassMethodExpressionNode >> periodToken [ - ^ periodToken -] - -{ #category : #generated } -SwiftSuperclassMethodExpressionNode >> periodToken: aSmaCCToken [ - periodToken := aSmaCCToken -] - -{ #category : #generated } -SwiftSuperclassMethodExpressionNode >> superToken [ - ^ superToken -] - -{ #category : #generated } -SwiftSuperclassMethodExpressionNode >> superToken: aSmaCCToken [ - superToken := aSmaCCToken -] - -{ #category : #generated } -SwiftSuperclassMethodExpressionNode >> tokenVariables [ - ^ #(#superToken #periodToken #identifierToken) -] diff --git a/src/SmaCC_Swift/SwiftSuperclassSubscriptExpressionNode.class.st b/src/SmaCC_Swift/SwiftSuperclassSubscriptExpressionNode.class.st deleted file mode 100644 index 7dcdbd076..000000000 --- a/src/SmaCC_Swift/SwiftSuperclassSubscriptExpressionNode.class.st +++ /dev/null @@ -1,66 +0,0 @@ -Class { - #name : #SwiftSuperclassSubscriptExpressionNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'superToken', - 'leftBracketToken', - 'expression', - 'rightBracketToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftSuperclassSubscriptExpressionNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitSuperclassSubscriptExpression: self -] - -{ #category : #generated } -SwiftSuperclassSubscriptExpressionNode >> expression [ - ^ expression -] - -{ #category : #generated } -SwiftSuperclassSubscriptExpressionNode >> expression: anObject [ - expression := anObject -] - -{ #category : #generated } -SwiftSuperclassSubscriptExpressionNode >> leftBracketToken [ - ^ leftBracketToken -] - -{ #category : #generated } -SwiftSuperclassSubscriptExpressionNode >> leftBracketToken: aSmaCCToken [ - leftBracketToken := aSmaCCToken -] - -{ #category : #generated } -SwiftSuperclassSubscriptExpressionNode >> otherVariables [ - ^ #(#expression) -] - -{ #category : #generated } -SwiftSuperclassSubscriptExpressionNode >> rightBracketToken [ - ^ rightBracketToken -] - -{ #category : #generated } -SwiftSuperclassSubscriptExpressionNode >> rightBracketToken: aSmaCCToken [ - rightBracketToken := aSmaCCToken -] - -{ #category : #generated } -SwiftSuperclassSubscriptExpressionNode >> superToken [ - ^ superToken -] - -{ #category : #generated } -SwiftSuperclassSubscriptExpressionNode >> superToken: aSmaCCToken [ - superToken := aSmaCCToken -] - -{ #category : #generated } -SwiftSuperclassSubscriptExpressionNode >> tokenVariables [ - ^ #(#superToken #leftBracketToken #rightBracketToken) -] diff --git a/src/SmaCC_Swift/SwiftSwitchStatementNode.class.st b/src/SmaCC_Swift/SwiftSwitchStatementNode.class.st deleted file mode 100644 index 63e1de8a1..000000000 --- a/src/SmaCC_Swift/SwiftSwitchStatementNode.class.st +++ /dev/null @@ -1,446 +0,0 @@ -Class { - #name : #SwiftSwitchStatementNode, - #superclass : #SwiftBranchStatementNode, - #instVars : [ - 'switchToken', - 'expressions', - 'leftBraceTokens', - 'caseTokens', - '_Tokens', - 'colonTokens', - 'identifierTokens', - 'leftParenTokens', - 'rightParenTokens', - 'leftBracketTokens', - 'periodTokens', - 'protocolTokens', - 'lessThanTokens', - 'greaterThanTokens', - 'rightBracketTokens', - 'minusGreaterThanTokens', - 'commaTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens', - 'inoutTokens', - 'varTokens', - 'letTokens', - 'isTokens', - 'asTokens', - 'whereTokens', - 'statements', - 'defaultTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftSwitchStatementNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitSwitchStatement: self -] - -{ #category : #generated } -SwiftSwitchStatementNode >> asTokens [ - ^ asTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> asTokens: anOrderedCollection [ - asTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> caseTokens [ - ^ caseTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> caseTokens: anOrderedCollection [ - caseTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> compositeNodeVariables [ - ^ #(#statements) -] - -{ #category : #generated } -SwiftSwitchStatementNode >> compositeTokenVariables [ - ^ #(#leftBraceTokens #caseTokens #_Tokens #colonTokens #identifierTokens #leftParenTokens #rightParenTokens #leftBracketTokens #rightBracketTokens #minusGreaterThanTokens #periodTokens #questionMarkTokens #bangTokens #protocolTokens #lessThanTokens #greaterThanTokens #typeTokens #commaTokens #periodPeriodPeriodTokens #varTokens #letTokens #isTokens #asTokens #inoutTokens #whereTokens #defaultTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens) -] - -{ #category : #generated } -SwiftSwitchStatementNode >> defaultTokens [ - ^ defaultTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> defaultTokens: anOrderedCollection [ - defaultTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> expressions [ - ^ expressions -] - -{ #category : #generated } -SwiftSwitchStatementNode >> expressions: anOrderedCollection [ - expressions := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftSwitchStatementNode >> initialize [ - super initialize. - expressions := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - caseTokens := OrderedCollection new: 2. - _Tokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - varTokens := OrderedCollection new: 2. - letTokens := OrderedCollection new: 2. - isTokens := OrderedCollection new: 2. - asTokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - whereTokens := OrderedCollection new: 2. - statements := OrderedCollection new: 2. - defaultTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftSwitchStatementNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> isTokens [ - ^ isTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> isTokens: anOrderedCollection [ - isTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> letTokens [ - ^ letTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> letTokens: anOrderedCollection [ - letTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> otherVariables [ - ^ #(#expressions) -] - -{ #category : #generated } -SwiftSwitchStatementNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> statements [ - ^ statements -] - -{ #category : #generated } -SwiftSwitchStatementNode >> statements: anOrderedCollection [ - self setParents: self statements to: nil. - statements := anOrderedCollection. - self setParents: self statements to: self -] - -{ #category : #generated } -SwiftSwitchStatementNode >> switchToken [ - ^ switchToken -] - -{ #category : #generated } -SwiftSwitchStatementNode >> switchToken: aSmaCCToken [ - switchToken := aSmaCCToken -] - -{ #category : #generated } -SwiftSwitchStatementNode >> tokenVariables [ - ^ #(#switchToken #semicolonToken) -] - -{ #category : #generated } -SwiftSwitchStatementNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> varTokens [ - ^ varTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> varTokens: anOrderedCollection [ - varTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftSwitchStatementNode >> whereTokens [ - ^ whereTokens -] - -{ #category : #generated } -SwiftSwitchStatementNode >> whereTokens: anOrderedCollection [ - whereTokens := anOrderedCollection -] diff --git a/src/SmaCC_Swift/SwiftTupleTypeNode.class.st b/src/SmaCC_Swift/SwiftTupleTypeNode.class.st deleted file mode 100644 index 2a0e2c7ec..000000000 --- a/src/SmaCC_Swift/SwiftTupleTypeNode.class.st +++ /dev/null @@ -1,310 +0,0 @@ -Class { - #name : #SwiftTupleTypeNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'leftParenTokens', - '_Tokens', - 'identifierTokens', - 'rightParenTokens', - 'leftBracketTokens', - 'rightBracketTokens', - 'leftBraceTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens', - 'inoutTokens', - 'periodTokens', - 'protocolTokens', - 'lessThanTokens', - 'greaterThanTokens', - 'colonTokens', - 'minusGreaterThanTokens', - 'commaTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftTupleTypeNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftTupleTypeNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTupleTypeNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitTupleType: self -] - -{ #category : #generated } -SwiftTupleTypeNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftTupleTypeNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTupleTypeNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftTupleTypeNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTupleTypeNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftTupleTypeNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTupleTypeNode >> compositeTokenVariables [ - ^ #(#leftParenTokens #_Tokens #identifierTokens #rightParenTokens #inoutTokens #leftBracketTokens #rightBracketTokens #colonTokens #minusGreaterThanTokens #periodTokens #questionMarkTokens #bangTokens #protocolTokens #lessThanTokens #greaterThanTokens #typeTokens #commaTokens #periodPeriodPeriodTokens #leftBraceTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens) -] - -{ #category : #generated } -SwiftTupleTypeNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftTupleTypeNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTupleTypeNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftTupleTypeNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTupleTypeNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftTupleTypeNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTupleTypeNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftTupleTypeNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftTupleTypeNode >> initialize [ - super initialize. - leftParenTokens := OrderedCollection new: 2. - _Tokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftTupleTypeNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftTupleTypeNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTupleTypeNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftTupleTypeNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTupleTypeNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftTupleTypeNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTupleTypeNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftTupleTypeNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTupleTypeNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftTupleTypeNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTupleTypeNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftTupleTypeNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTupleTypeNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftTupleTypeNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTupleTypeNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftTupleTypeNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTupleTypeNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftTupleTypeNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTupleTypeNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftTupleTypeNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTupleTypeNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftTupleTypeNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTupleTypeNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftTupleTypeNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTupleTypeNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftTupleTypeNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTupleTypeNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftTupleTypeNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTupleTypeNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftTupleTypeNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTupleTypeNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftTupleTypeNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] diff --git a/src/SmaCC_Swift/SwiftTypeCastOperatorNode.class.st b/src/SmaCC_Swift/SwiftTypeCastOperatorNode.class.st deleted file mode 100644 index 80efb656f..000000000 --- a/src/SmaCC_Swift/SwiftTypeCastOperatorNode.class.st +++ /dev/null @@ -1,70 +0,0 @@ -Class { - #name : #SwiftTypeCastOperatorNode, - #superclass : #SwiftParseNode, - #instVars : [ - '_isToken', - 'type', - 'asToken', - 'questionMarkToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftTypeCastOperatorNode >> _isToken [ - ^ _isToken -] - -{ #category : #generated } -SwiftTypeCastOperatorNode >> _isToken: aSmaCCToken [ - _isToken := aSmaCCToken -] - -{ #category : #generated } -SwiftTypeCastOperatorNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitTypeCastOperator: self -] - -{ #category : #generated } -SwiftTypeCastOperatorNode >> asToken [ - ^ asToken -] - -{ #category : #generated } -SwiftTypeCastOperatorNode >> asToken: aSmaCCToken [ - asToken := aSmaCCToken -] - -{ #category : #generated } -SwiftTypeCastOperatorNode >> nodeVariables [ - ^ #(#type) -] - -{ #category : #generated } -SwiftTypeCastOperatorNode >> questionMarkToken [ - ^ questionMarkToken -] - -{ #category : #generated } -SwiftTypeCastOperatorNode >> questionMarkToken: aSmaCCToken [ - questionMarkToken := aSmaCCToken -] - -{ #category : #generated } -SwiftTypeCastOperatorNode >> tokenVariables [ - ^ #(#_isToken #asToken #questionMarkToken) -] - -{ #category : #generated } -SwiftTypeCastOperatorNode >> type [ - ^ type -] - -{ #category : #generated } -SwiftTypeCastOperatorNode >> type: aSwiftParseNode [ - self type notNil - ifTrue: [ self type parent: nil ]. - type := aSwiftParseNode. - self type notNil - ifTrue: [ self type parent: self ] -] diff --git a/src/SmaCC_Swift/SwiftTypeIdentifierNode.class.st b/src/SmaCC_Swift/SwiftTypeIdentifierNode.class.st deleted file mode 100644 index 8c13f5119..000000000 --- a/src/SmaCC_Swift/SwiftTypeIdentifierNode.class.st +++ /dev/null @@ -1,82 +0,0 @@ -Class { - #name : #SwiftTypeIdentifierNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'identifierTokens', - 'lessThanTokens', - 'commaTokens', - 'greaterThanTokens', - 'periodTokens' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftTypeIdentifierNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitTypeIdentifier: self -] - -{ #category : #generated } -SwiftTypeIdentifierNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftTypeIdentifierNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTypeIdentifierNode >> compositeTokenVariables [ - ^ #(#identifierTokens #lessThanTokens #commaTokens #greaterThanTokens #periodTokens) -] - -{ #category : #generated } -SwiftTypeIdentifierNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftTypeIdentifierNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTypeIdentifierNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftTypeIdentifierNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftTypeIdentifierNode >> initialize [ - super initialize. - identifierTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftTypeIdentifierNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftTypeIdentifierNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTypeIdentifierNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftTypeIdentifierNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] diff --git a/src/SmaCC_Swift/SwiftTypealiasDeclarationNode.class.st b/src/SmaCC_Swift/SwiftTypealiasDeclarationNode.class.st deleted file mode 100644 index ee599cf25..000000000 --- a/src/SmaCC_Swift/SwiftTypealiasDeclarationNode.class.st +++ /dev/null @@ -1,337 +0,0 @@ -Class { - #name : #SwiftTypealiasDeclarationNode, - #superclass : #SwiftParseNode, - #instVars : [ - 'typealiasToken', - 'identifierTokens', - 'equalToken', - 'leftBracketTokens', - 'periodTokens', - 'protocolTokens', - 'lessThanTokens', - 'greaterThanTokens', - 'rightBracketTokens', - 'colonTokens', - 'minusGreaterThanTokens', - 'commaTokens', - 'leftParenTokens', - 'rightParenTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens', - 'inoutTokens', - '_Tokens', - 'leftBraceTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitTypealiasDeclaration: self -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> compositeTokenVariables [ - ^ #(#identifierTokens #leftBracketTokens #rightBracketTokens #colonTokens #minusGreaterThanTokens #periodTokens #leftParenTokens #rightParenTokens #questionMarkTokens #bangTokens #protocolTokens #lessThanTokens #greaterThanTokens #typeTokens #commaTokens #periodPeriodPeriodTokens #_Tokens #inoutTokens #leftBraceTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens) -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> equalToken [ - ^ equalToken -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> equalToken: aSmaCCToken [ - equalToken := aSmaCCToken -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #'generated-initialize-release' } -SwiftTypealiasDeclarationNode >> initialize [ - super initialize. - identifierTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - _Tokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> tokenVariables [ - ^ #(#typealiasToken #equalToken) -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> typealiasToken [ - ^ typealiasToken -] - -{ #category : #generated } -SwiftTypealiasDeclarationNode >> typealiasToken: aSmaCCToken [ - typealiasToken := aSmaCCToken -] diff --git a/src/SmaCC_Swift/SwiftVariableDeclarationNode.class.st b/src/SmaCC_Swift/SwiftVariableDeclarationNode.class.st deleted file mode 100644 index 18139ab5d..000000000 --- a/src/SmaCC_Swift/SwiftVariableDeclarationNode.class.st +++ /dev/null @@ -1,538 +0,0 @@ -Class { - #name : #SwiftVariableDeclarationNode, - #superclass : #SwiftParseNode, - #instVars : [ - '_Tokens', - 'identifierTokens', - 'leftParenTokens', - 'rightParenTokens', - 'leftBracketTokens', - 'rightBracketTokens', - 'leftBraceTokens', - 'rightBraceTokens', - 'integer_literalTokens', - 'floating_point_literalTokens', - 'full_string_literalTokens', - 'operatorTokens', - 'classTokens', - 'mutatingTokens', - 'nonmutatingTokens', - 'overrideTokens', - 'staticTokens', - 'unownedTokens', - 'unownedLeftParensafeRightParenTokens', - 'unownedLeftParenunsafeRightParenTokens', - 'weakTokens', - 'varToken', - 'inializers', - 'commaTokens', - 'colonTokens', - 'periodTokens', - 'protocolTokens', - 'lessThanTokens', - 'greaterThanTokens', - 'minusGreaterThanTokens', - 'questionMarkTokens', - 'bangTokens', - 'typeTokens', - 'periodPeriodPeriodTokens', - 'inoutTokens', - 'blocks', - 'getToken', - 'setToken', - 'equalToken', - 'expression', - 'willSetToken', - 'didSetToken' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftVariableDeclarationNode >> _Tokens [ - ^ _Tokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> _Tokens: anOrderedCollection [ - _Tokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitVariableDeclaration: self -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> bangTokens [ - ^ bangTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> bangTokens: anOrderedCollection [ - bangTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> blocks [ - ^ blocks -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> blocks: anOrderedCollection [ - self setParents: self blocks to: nil. - blocks := anOrderedCollection. - self setParents: self blocks to: self -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> classTokens [ - ^ classTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> classTokens: anOrderedCollection [ - classTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> colonTokens [ - ^ colonTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> colonTokens: anOrderedCollection [ - colonTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> commaTokens [ - ^ commaTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> commaTokens: anOrderedCollection [ - commaTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> compositeNodeVariables [ - ^ #(#inializers #blocks) -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> compositeTokenVariables [ - ^ #(#_Tokens #identifierTokens #leftParenTokens #rightParenTokens #leftBracketTokens #rightBracketTokens #leftBraceTokens #rightBraceTokens #integer_literalTokens #floating_point_literalTokens #full_string_literalTokens #operatorTokens #classTokens #mutatingTokens #nonmutatingTokens #overrideTokens #staticTokens #unownedTokens #unownedLeftParensafeRightParenTokens #unownedLeftParenunsafeRightParenTokens #weakTokens #commaTokens #colonTokens #minusGreaterThanTokens #periodTokens #questionMarkTokens #bangTokens #protocolTokens #lessThanTokens #greaterThanTokens #typeTokens #periodPeriodPeriodTokens #inoutTokens) -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> didSetToken [ - ^ didSetToken -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> didSetToken: aSmaCCToken [ - didSetToken := aSmaCCToken -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> equalToken [ - ^ equalToken -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> equalToken: aSmaCCToken [ - equalToken := aSmaCCToken -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> expression [ - ^ expression -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> expression: anObject [ - expression := anObject -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> floating_point_literalTokens [ - ^ floating_point_literalTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> floating_point_literalTokens: anOrderedCollection [ - floating_point_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> full_string_literalTokens [ - ^ full_string_literalTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> full_string_literalTokens: anOrderedCollection [ - full_string_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> getToken [ - ^ getToken -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> getToken: aSmaCCToken [ - getToken := aSmaCCToken -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> greaterThanTokens [ - ^ greaterThanTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> greaterThanTokens: anOrderedCollection [ - greaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> identifierTokens [ - ^ identifierTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> identifierTokens: anOrderedCollection [ - identifierTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> inializers [ - ^ inializers -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> inializers: anOrderedCollection [ - self setParents: self inializers to: nil. - inializers := anOrderedCollection. - self setParents: self inializers to: self -] - -{ #category : #'generated-initialize-release' } -SwiftVariableDeclarationNode >> initialize [ - super initialize. - _Tokens := OrderedCollection new: 2. - identifierTokens := OrderedCollection new: 2. - leftParenTokens := OrderedCollection new: 2. - rightParenTokens := OrderedCollection new: 2. - leftBracketTokens := OrderedCollection new: 2. - rightBracketTokens := OrderedCollection new: 2. - leftBraceTokens := OrderedCollection new: 2. - rightBraceTokens := OrderedCollection new: 2. - integer_literalTokens := OrderedCollection new: 2. - floating_point_literalTokens := OrderedCollection new: 2. - full_string_literalTokens := OrderedCollection new: 2. - operatorTokens := OrderedCollection new: 2. - classTokens := OrderedCollection new: 2. - mutatingTokens := OrderedCollection new: 2. - nonmutatingTokens := OrderedCollection new: 2. - overrideTokens := OrderedCollection new: 2. - staticTokens := OrderedCollection new: 2. - unownedTokens := OrderedCollection new: 2. - unownedLeftParensafeRightParenTokens := OrderedCollection new: 2. - unownedLeftParenunsafeRightParenTokens := OrderedCollection new: 2. - weakTokens := OrderedCollection new: 2. - inializers := OrderedCollection new: 2. - commaTokens := OrderedCollection new: 2. - colonTokens := OrderedCollection new: 2. - minusGreaterThanTokens := OrderedCollection new: 2. - periodTokens := OrderedCollection new: 2. - questionMarkTokens := OrderedCollection new: 2. - bangTokens := OrderedCollection new: 2. - protocolTokens := OrderedCollection new: 2. - lessThanTokens := OrderedCollection new: 2. - greaterThanTokens := OrderedCollection new: 2. - typeTokens := OrderedCollection new: 2. - periodPeriodPeriodTokens := OrderedCollection new: 2. - inoutTokens := OrderedCollection new: 2. - blocks := OrderedCollection new: 2. -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> inoutTokens [ - ^ inoutTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> inoutTokens: anOrderedCollection [ - inoutTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> integer_literalTokens [ - ^ integer_literalTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> integer_literalTokens: anOrderedCollection [ - integer_literalTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> leftBraceTokens [ - ^ leftBraceTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> leftBraceTokens: anOrderedCollection [ - leftBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> leftBracketTokens [ - ^ leftBracketTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> leftBracketTokens: anOrderedCollection [ - leftBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> leftParenTokens [ - ^ leftParenTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> leftParenTokens: anOrderedCollection [ - leftParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> lessThanTokens [ - ^ lessThanTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> lessThanTokens: anOrderedCollection [ - lessThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> minusGreaterThanTokens [ - ^ minusGreaterThanTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> minusGreaterThanTokens: anOrderedCollection [ - minusGreaterThanTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> mutatingTokens [ - ^ mutatingTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> mutatingTokens: anOrderedCollection [ - mutatingTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> nonmutatingTokens [ - ^ nonmutatingTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> nonmutatingTokens: anOrderedCollection [ - nonmutatingTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> operatorTokens [ - ^ operatorTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> operatorTokens: anOrderedCollection [ - operatorTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> otherVariables [ - ^ #(#expression) -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> overrideTokens [ - ^ overrideTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> overrideTokens: anOrderedCollection [ - overrideTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> periodPeriodPeriodTokens [ - ^ periodPeriodPeriodTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> periodPeriodPeriodTokens: anOrderedCollection [ - periodPeriodPeriodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> periodTokens [ - ^ periodTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> periodTokens: anOrderedCollection [ - periodTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> protocolTokens [ - ^ protocolTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> protocolTokens: anOrderedCollection [ - protocolTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> questionMarkTokens [ - ^ questionMarkTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> questionMarkTokens: anOrderedCollection [ - questionMarkTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> rightBraceTokens [ - ^ rightBraceTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> rightBraceTokens: anOrderedCollection [ - rightBraceTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> rightBracketTokens [ - ^ rightBracketTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> rightBracketTokens: anOrderedCollection [ - rightBracketTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> rightParenTokens [ - ^ rightParenTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> rightParenTokens: anOrderedCollection [ - rightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> setToken [ - ^ setToken -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> setToken: aSmaCCToken [ - setToken := aSmaCCToken -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> staticTokens [ - ^ staticTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> staticTokens: anOrderedCollection [ - staticTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> tokenVariables [ - ^ #(#varToken #getToken #setToken #equalToken #willSetToken #didSetToken) -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> typeTokens [ - ^ typeTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> typeTokens: anOrderedCollection [ - typeTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> unownedLeftParensafeRightParenTokens [ - ^ unownedLeftParensafeRightParenTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> unownedLeftParensafeRightParenTokens: anOrderedCollection [ - unownedLeftParensafeRightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> unownedLeftParenunsafeRightParenTokens [ - ^ unownedLeftParenunsafeRightParenTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> unownedLeftParenunsafeRightParenTokens: anOrderedCollection [ - unownedLeftParenunsafeRightParenTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> unownedTokens [ - ^ unownedTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> unownedTokens: anOrderedCollection [ - unownedTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> varToken [ - ^ varToken -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> varToken: aSmaCCToken [ - varToken := aSmaCCToken -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> weakTokens [ - ^ weakTokens -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> weakTokens: anOrderedCollection [ - weakTokens := anOrderedCollection -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> willSetToken [ - ^ willSetToken -] - -{ #category : #generated } -SwiftVariableDeclarationNode >> willSetToken: aSmaCCToken [ - willSetToken := aSmaCCToken -] diff --git a/src/SmaCC_Swift/SwiftWhileStatementNode.class.st b/src/SmaCC_Swift/SwiftWhileStatementNode.class.st deleted file mode 100644 index 77e2343f8..000000000 --- a/src/SmaCC_Swift/SwiftWhileStatementNode.class.st +++ /dev/null @@ -1,64 +0,0 @@ -Class { - #name : #SwiftWhileStatementNode, - #superclass : #SwiftLoopStatementNode, - #instVars : [ - 'whileToken', - 'expression', - 'block' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftWhileStatementNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitWhileStatement: self -] - -{ #category : #generated } -SwiftWhileStatementNode >> block [ - ^ block -] - -{ #category : #generated } -SwiftWhileStatementNode >> block: aSwiftBlockNode [ - self block notNil - ifTrue: [ self block parent: nil ]. - block := aSwiftBlockNode. - self block notNil - ifTrue: [ self block parent: self ] -] - -{ #category : #generated } -SwiftWhileStatementNode >> expression [ - ^ expression -] - -{ #category : #generated } -SwiftWhileStatementNode >> expression: anObject [ - expression := anObject -] - -{ #category : #generated } -SwiftWhileStatementNode >> nodeVariables [ - ^ #(#block) -] - -{ #category : #generated } -SwiftWhileStatementNode >> otherVariables [ - ^ #(#expression) -] - -{ #category : #generated } -SwiftWhileStatementNode >> tokenVariables [ - ^ #(#whileToken #semicolonToken) -] - -{ #category : #generated } -SwiftWhileStatementNode >> whileToken [ - ^ whileToken -] - -{ #category : #generated } -SwiftWhileStatementNode >> whileToken: aSmaCCToken [ - whileToken := aSmaCCToken -] diff --git a/src/SmaCC_Swift/SwiftWildcardExpressionNode.class.st b/src/SmaCC_Swift/SwiftWildcardExpressionNode.class.st deleted file mode 100644 index 65e1462b4..000000000 --- a/src/SmaCC_Swift/SwiftWildcardExpressionNode.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #SwiftWildcardExpressionNode, - #superclass : #SwiftParseNode, - #instVars : [ - '_Token' - ], - #category : #'SmaCC_Swift' -} - -{ #category : #generated } -SwiftWildcardExpressionNode >> _Token [ - ^ _Token -] - -{ #category : #generated } -SwiftWildcardExpressionNode >> _Token: aSmaCCToken [ - _Token := aSmaCCToken -] - -{ #category : #generated } -SwiftWildcardExpressionNode >> acceptVisitor: aParseVisitor [ - ^ aParseVisitor visitWildcardExpression: self -] - -{ #category : #generated } -SwiftWildcardExpressionNode >> tokenVariables [ - ^ #(#_Token) -] diff --git a/src/SmaCC_Swift/package.st b/src/SmaCC_Swift/package.st deleted file mode 100644 index 290b1c020..000000000 --- a/src/SmaCC_Swift/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_Swift' } diff --git a/src/SmaCC_Tests/DuplicationNodeEliminationTest.class.st b/src/SmaCC_Tests/DuplicationNodeEliminationTest.class.st deleted file mode 100644 index 8aad5caac..000000000 --- a/src/SmaCC_Tests/DuplicationNodeEliminationTest.class.st +++ /dev/null @@ -1,102 +0,0 @@ -Class { - #name : #DuplicationNodeEliminationTest, - #superclass : #TestCase, - #category : #'SmaCC_Tests' -} - -{ #category : #tests } -DuplicationNodeEliminationTest >> testDuplicateLoop [ - | node1 node2 node3 | - node1 := SmaCCNode new. - node1 action: 1. - node2 := SmaCCNode new. - node2 action: 1. - node3 := SmaCCNode new. - node3 action: 1. - node1 addEdgeTo: node2 onCharacters: 'a'. - node2 addEdgeTo: node3 onCharacters: 'a'. - node3 addEdgeTo: node1 onCharacters: 'a'. - node1 := node1 removeDuplicateNodes. - self assert: node1 allStates size = 1. - self assert: node1 transitions size = 1. - self assert: (node1 action includes: 1). - self assert: node1 transitions first transitionObjects asString = 'a'. - self assert: node1 transitions first to = node1 -] - -{ #category : #tests } -DuplicationNodeEliminationTest >> testNoDuplicates [ - | node1 node2 node3 | - node1 := SmaCCNode new. - node1 action: 1. - node2 := SmaCCNode new. - node2 action: 2. - node3 := SmaCCNode new. - node3 action: 3. - node1 addEdgeTo: node2 onCharacters: 'a'. - node2 addEdgeTo: node3 onCharacters: 'a'. - node3 addEdgeTo: node1 onCharacters: 'a'. - node1 := node1 removeDuplicateNodes. - self assert: node1 allStates size = 3. - self assert: node1 transitions size = 1. - self assert: (node1 action includes: 1). - self assert: node1 transitions first transitionObjects asString = 'a'. - node2 := node1 transitions first to. - self deny: node1 = node2. - self assert: node2 transitions size = 1. - self assert: (node2 action includes: 2). - self assert: node2 transitions first transitionObjects asString = 'a'. - node3 := node2 transitions first to. - self deny: node1 = node3. - self deny: node2 = node3. - self assert: node3 transitions size = 1. - self assert: (node3 action includes: 3). - self assert: node3 transitions first transitionObjects asString = 'a'. - self assert: node3 transitions first to = node1 -] - -{ #category : #tests } -DuplicationNodeEliminationTest >> testSimpleDuplicateWithEdges [ - | node1 node2 node3 | - node1 := SmaCCNode new. - node2 := SmaCCNode new. - node2 action: 2. - node3 := SmaCCNode new. - node3 action: 2. - node1 addEdgeTo: node2 onCharacters: 'a'. - node1 addEdgeTo: node3 onCharacters: 'b'. - node2 addEdgeTo: node1 onCharacters: 'c'. - node3 addEdgeTo: node1 onCharacters: 'c'. - node1 := node1 removeDuplicateNodes. - self assert: node1 allStates size = 2. - self assert: node1 transitions size = 1. - self - assert: node1 transitions first transitionObjects asString = 'ab'. - node2 := node1 transitions first to. - self deny: node1 = node2. - self assert: node2 transitions size = 1. - self assert: (node2 action includes: 2). - self assert: node2 transitions first transitionObjects asString = 'c'. - self assert: node2 transitions first to = node1 -] - -{ #category : #tests } -DuplicationNodeEliminationTest >> testSimpleTerminalDuplicate [ - | node1 node2 node3 | - node1 := SmaCCNode new. - node2 := SmaCCNode new. - node2 action: 2. - node3 := SmaCCNode new. - node3 action: 2. - node1 addEdgeTo: node2 onCharacters: 'a'. - node1 addEdgeTo: node3 onCharacters: 'b'. - node1 := node1 removeDuplicateNodes. - self assert: node1 allStates size = 2. - self assert: node1 transitions size = 1. - self - assert: node1 transitions first transitionObjects asString = 'ab'. - node2 := node1 transitions first to. - self deny: node1 = node2. - self assert: node2 transitions isEmpty. - self assert: (node2 action includes: 2) -] diff --git a/src/SmaCC_Tests/LineNumberStreamTest.class.st b/src/SmaCC_Tests/LineNumberStreamTest.class.st deleted file mode 100644 index dcd3d8478..000000000 --- a/src/SmaCC_Tests/LineNumberStreamTest.class.st +++ /dev/null @@ -1,136 +0,0 @@ -Class { - #name : #LineNumberStreamTest, - #superclass : #TestCase, - #category : #'SmaCC_Tests' -} - -{ #category : #private } -LineNumberStreamTest >> addCRLFsTo: aString [ - ^ aString - copyReplaceAll: '\' - with: (String with: Character cr with: Character lf) -] - -{ #category : #private } -LineNumberStreamTest >> addCRsTo: aString [ - ^ aString copyReplaceAll: '\' with: (String with: Character cr) -] - -{ #category : #private } -LineNumberStreamTest >> addLFsTo: aString [ - ^ aString copyReplaceAll: '\' with: (String with: Character lf) -] - -{ #category : #tests } -LineNumberStreamTest >> testCRLFLines [ - | stream | - stream := SmaCCLineNumberStream - on: (ReadStream on: (self addCRLFsTo: '1234\1234\1234\1234')). - 1 to: 4 do: - [ :each | - self assert: stream lineNumber = each. - 4 - timesRepeat: - [ self - assert: stream columnNumber = (stream next asInteger - $0 asInteger) ]. - stream upTo: Character lf ] -] - -{ #category : #tests } -LineNumberStreamTest >> testCRLines [ - | stream | - stream := SmaCCLineNumberStream - on: (ReadStream on: (self addCRsTo: '1234\1234\1234\1234')). - 1 to: 4 do: - [ :each | - self assert: stream lineNumber = each. - 4 - timesRepeat: - [ self - assert: stream columnNumber = (stream next asInteger - $0 asInteger) ]. - stream upTo: Character cr ] -] - -{ #category : #tests } -LineNumberStreamTest >> testEmptyLines [ - | stream | - stream := SmaCCLineNumberStream - on: (ReadStream on: (self addCRsTo: '\\\')). - 1 to: 4 do: - [ :each | - self assert: stream lineNumber = each. - stream upTo: Character cr ] -] - -{ #category : #tests } -LineNumberStreamTest >> testForwardPositionCRLFLines [ - | stream | - stream := SmaCCLineNumberStream - on: (ReadStream on: (self addCRLFsTo: '1\2\3\4')). - stream position: 3. - self assert: stream lineNumber = 2. - self assert: stream columnNumber = 1 -] - -{ #category : #tests } -LineNumberStreamTest >> testLFLines [ - | stream | - stream := SmaCCLineNumberStream - on: (ReadStream on: (self addLFsTo: '1234\1234\1234\1234')). - 1 to: 4 do: - [ :each | - self assert: stream lineNumber = each. - 4 - timesRepeat: - [ self - assert: stream columnNumber = (stream next asInteger - $0 asInteger) ]. - stream upTo: Character lf ] -] - -{ #category : #tests } -LineNumberStreamTest >> testNoLines [ - | stream index | - stream := SmaCCLineNumberStream on: (ReadStream on: 'this is a test'). - self assert: stream lineNumber = 1. - index := 1. - stream - do: - [ :each | - self assert: stream lineNumber = 1. - index := index + 1. - self assert: stream columnNumber = index ] -] - -{ #category : #tests } -LineNumberStreamTest >> testPositionCRLFLines [ - | stream | - stream := SmaCCLineNumberStream - on: (ReadStream on: (self addCRLFsTo: '1\2\3\4')). - self assert: stream lineNumber = 1. - stream upTo: $5. - self assert: stream lineNumber = 4. - stream position: 0. - self assert: stream lineNumber = 1. - self assert: stream columnNumber = 1. - stream position: 3. - self assert: stream lineNumber = 2. - self assert: stream columnNumber = 1 -] - -{ #category : #tests } -LineNumberStreamTest >> testPositionCRLines [ - | stream | - stream := SmaCCLineNumberStream on: (ReadStream on: (self addCRsTo: '1\2\3\4')). - self assert: stream lineNumber = 1. - stream upTo: $5. - self assert: stream lineNumber = 4. - stream position: stream position - 1. - self assert: stream lineNumber = 4. - self assert: stream columnNumber = 1. - stream position: 0. - self assert: stream lineNumber = 1. - self assert: stream columnNumber = 1. - stream position: 2. - self assert: stream lineNumber = 2. - self assert: stream columnNumber = 1 -] diff --git a/src/SmaCC_Tests/SmaCCBitCollectionTest.class.st b/src/SmaCC_Tests/SmaCCBitCollectionTest.class.st deleted file mode 100644 index 9ae2e16a6..000000000 --- a/src/SmaCC_Tests/SmaCCBitCollectionTest.class.st +++ /dev/null @@ -1,296 +0,0 @@ -Class { - #name : #SmaCCBitCollectionTest, - #superclass : #TestCase, - #category : #'SmaCC_Tests' -} - -{ #category : #testing } -SmaCCBitCollectionTest class >> isAbstract [ - ^ self == SmaCCBitCollectionTest -] - -{ #category : #private } -SmaCCBitCollectionTest >> byteSizeCollection [ - ^ (0 to: 255) collect: self -] - -{ #category : #private } -SmaCCBitCollectionTest >> byteSizeSet [ - ^ self newCollection - addAll: self byteSizeCollection; - yourself -] - -{ #category : #private } -SmaCCBitCollectionTest >> largeCollection [ - ^ (1 to: 50000) collect: self -] - -{ #category : #private } -SmaCCBitCollectionTest >> largeSet [ - ^ self setClass withAll: self largeCollection -] - -{ #category : #private } -SmaCCBitCollectionTest >> largeValue [ - ^ 1000000 -] - -{ #category : #private } -SmaCCBitCollectionTest >> mediumCollection [ - ^ (1 to: 1000) collect: self -] - -{ #category : #private } -SmaCCBitCollectionTest >> mediumSet [ - ^ self setClass withAll: self mediumCollection -] - -{ #category : #private } -SmaCCBitCollectionTest >> newCollection [ - ^ self setClass new -] - -{ #category : #private } -SmaCCBitCollectionTest >> setClass [ - ^ SmaCCIntegerSet -] - -{ #category : #private } -SmaCCBitCollectionTest >> supportsLargeValues [ - ^ true -] - -{ #category : #tests } -SmaCCBitCollectionTest >> testABunch [ - | collection count | - collection := self byteSizeSet. - count := 0. - collection do: [ :each | count := count + 1 ]. - self assert: count = 256. - self assert: collection size = 256. - self assert: collection notEmpty. - self - assert: - (self byteSizeCollection - allSatisfy: [ :each | collection includes: each ]). - self assert: collection asArray = self byteSizeCollection asArray -] - -{ #category : #tests } -SmaCCBitCollectionTest >> testAddAll [ - | collection large medium | - self supportsLargeValues - ifFalse: [ ^ self ]. - large := self largeSet. - medium := self mediumSet. - collection := large copy. - collection addAll: medium. - self assert: collection size = large size. - collection := medium copy. - collection addAll: large. - self assert: collection size = large size. - collection := self newCollection. - collection addAll: medium. - self assert: collection size = medium size. - collection := self newCollection. - collection addAll: large. - self assert: collection size = large size -] - -{ #category : #tests } -SmaCCBitCollectionTest >> testAddToNextByte [ - | collection count | - collection := self newCollection. - collection add: (self value: 8). - count := 0. - collection do: [ :each | count := count + 1 ]. - self assert: count = 1. - self assert: collection size = 1. - self assert: collection notEmpty. - self assert: (collection includes: (self value: 8)). - self deny: (collection includes: (self value: 7)). - self deny: (collection includes: (self value: 9)) -] - -{ #category : #tests } -SmaCCBitCollectionTest >> testAdding [ - | collection count | - collection := self newCollection. - collection add: (self value: 1). - count := 0. - collection do: [ :each | count := count + 1 ]. - self assert: count = 1. - self assert: collection size = 1. - self assert: collection notEmpty. - self assert: (collection includes: (self value: 1)). - self deny: (collection includes: (self value: 0)). - self deny: (collection includes: (self value: 2)) -] - -{ #category : #tests } -SmaCCBitCollectionTest >> testComparing [ - | a b | - a := self newCollection. - a addAll: self mediumCollection. - b := self newCollection. - b addAll: self mediumCollection reverse. - self assert: a hash = b hash. - self assert: a = b. - self supportsLargeValues - ifFalse: [ ^ self ]. - b - add: (self value: self largeValue); - remove: (self value: self largeValue). - self assert: a hash = b hash. - self assert: a = b. - self assert: (self setClass with: (self value: 1)) < (self setClass with: (self value: 2)). - self assert: (self setClass with: (self value: 8)) < (self setClass with: (self value: 16)) -] - -{ #category : #tests } -SmaCCBitCollectionTest >> testCopying [ - | a b | - a := self mediumSet. - b := a copy. - b remove: (self value: 5). - self assert: (a includes: (self value: 5)). - self deny: (b includes: (self value: 5)) -] - -{ #category : #tests } -SmaCCBitCollectionTest >> testGrowing [ - | collection count | - collection := self newCollection. - collection add: (self value: 256). - count := 0. - collection do: [ :each | count := count + 1 ]. - self assert: count = 1. - self assert: collection size = 1. - self assert: collection notEmpty. - self assert: (collection includes: (self value: 256)). - self deny: (collection includes: (self value: 1)). - collection remove: (self value: 256). - self deny: (collection includes: (self value: 256)). - self assert: collection size = 0 -] - -{ #category : #tests } -SmaCCBitCollectionTest >> testIntersect [ - | collection other | - collection := self byteSizeSet. - other := self newCollection - add: (self value: 128); - yourself. - collection := collection smaccIntersect: other. - self assert: collection size = 1. - self assert: (collection includes: (self value: 128)). - other := other smaccIntersect: self byteSizeSet. - self assert: other size = 1. - other := other smaccIntersect: (self setClass with: (self value: 1)). - self assert: other isEmpty. - self supportsLargeValues - ifFalse: [ ^ self ]. - collection := self byteSizeSet. - other := self largeSet. - collection := collection smaccIntersect: other. - self assert: collection size = 255. - self deny: (collection includes: (self value: 0)). - self assert: (collection includes: (self value: 1)). - self deny: (collection includes: (self value: 256)). - collection := self largeSet. - other := self byteSizeSet. - collection := collection smaccIntersect: other. - self assert: collection size = 255 -] - -{ #category : #tests } -SmaCCBitCollectionTest >> testLessThan [ - | a b | - a := self mediumSet. - b := self mediumSet. - self deny: a < b. - self deny: a > b. - self assert: a <= b. - self assert: a >= b. - b remove: (self value: 1). - self assert: a < b. - self deny: a > b. - self assert: a <= b. - self deny: a >= b. - b add: (self value: 1). - b remove: (self value: 2). - self assert: a < b. - self deny: a > b. - self assert: a <= b. - self deny: a >= b. - self supportsLargeValues - ifFalse: [ ^ false ]. - b - add: (self value: 2); - remove: (self value: 1000). - self deny: a < b. - self assert: a > b. - self deny: a <= b. - self assert: a >= b -] - -{ #category : #tests } -SmaCCBitCollectionTest >> testNew [ - self assert: self newCollection size = 0. - self assert: self newCollection isEmpty -] - -{ #category : #tests } -SmaCCBitCollectionTest >> testPerformance [ - | myTime setTime | - myTime := Time - millisecondsToRun: [ self newCollection addAll: self largeCollection ]. - setTime := Time - millisecondsToRun: [ Set new addAll: self largeCollection ]. - setTime := setTime max: 1000. "Some implementations of Set don't have performance problems" - self assert: myTime < (setTime // 2) -] - -{ #category : #tests } -SmaCCBitCollectionTest >> testRemoveAll [ - | collection toRemove | - collection := self byteSizeSet. - toRemove := self newCollection - add: (self value: 128); - yourself. - collection smaccRemoveAll: toRemove. - self assert: collection size = 255. - self deny: (collection includes: (self value: 128)). - toRemove smaccRemoveAll: collection. - self assert: toRemove size = 1. - toRemove smaccRemoveAll: self byteSizeSet. - self assert: toRemove isEmpty. - self supportsLargeValues - ifFalse: [ ^ self ]. - collection := self byteSizeSet. - toRemove := self largeSet. - collection smaccRemoveAll: toRemove. - self assert: collection size = 1. - self assert: (collection includes: (self value: 0)). - collection := self largeSet. - toRemove := self byteSizeSet. - collection smaccRemoveAll: toRemove. - self assert: self largeCollection size - 255 = collection size -] - -{ #category : #tests } -SmaCCBitCollectionTest >> testRemoving [ - | collection | - collection := self newCollection. - collection add: (self value: 1). - self assert: collection size = 1. - collection remove: (self value: 1). - self assert: collection size = 0. - self deny: (collection includes: (self value: 1)) -] - -{ #category : #private } -SmaCCBitCollectionTest >> value: anInteger [ - ^ anInteger -] diff --git a/src/SmaCC_Tests/SmaCCCharacterSetTest.class.st b/src/SmaCC_Tests/SmaCCCharacterSetTest.class.st deleted file mode 100644 index 6ee7628f1..000000000 --- a/src/SmaCC_Tests/SmaCCCharacterSetTest.class.st +++ /dev/null @@ -1,44 +0,0 @@ -Class { - #name : #SmaCCCharacterSetTest, - #superclass : #SmaCCBitCollectionTest, - #category : #'SmaCC_Tests' -} - -{ #category : #private } -SmaCCCharacterSetTest >> setClass [ - ^ SmaCCCharacterSet -] - -{ #category : #private } -SmaCCCharacterSetTest >> supportsLargeValues [ - [ Character value: 1000 ] - on: Error - do: [ :ex | ^ false ]. - ^ true -] - -{ #category : #tests } -SmaCCCharacterSetTest >> testAllCharacterRange [ - | collection | - collection := SmaCCCharacterSet withAllCharactersTo: (Character value: 254). - self assert: collection size = 255. - self deny: (collection includes: (Character value: 255)). - self assert: (collection includes: (Character value: 254)). - self assert: (collection includes: (Character value: 0)). - self supportsLargeValues - ifFalse: [ ^ self ]. - collection := SmaCCCharacterSet withAllCharactersTo: (Character value: (1 << 21) - 1). - self assert: collection size = (1 << 21). - self deny: (collection includes: (Character value: 1 << 21)). - self assert: (collection includes: (Character value: (1 << 21) - 1)). - self assert: (collection includes: (Character value: 0)) -] - -{ #category : #private } -SmaCCCharacterSetTest >> value: anInteger [ - ^ Character - value: - (self supportsLargeValues - ifTrue: [ anInteger ] - ifFalse: [ anInteger bitAnd: 16rFF ]) -] diff --git a/src/SmaCC_Tests/SmaCCEndToEndTest.class.st b/src/SmaCC_Tests/SmaCCEndToEndTest.class.st deleted file mode 100644 index bd2d319ac..000000000 --- a/src/SmaCC_Tests/SmaCCEndToEndTest.class.st +++ /dev/null @@ -1,2573 +0,0 @@ -Class { - #name : #SmaCCEndToEndTest, - #superclass : #TestCase, - #instVars : [ - 'currentClasses', - 'currentPackage', - 'manager' - ], - #category : #'SmaCC_Tests' -} - -{ #category : #private } -SmaCCEndToEndTest >> checkTokensAreInOrder: tokenCollection [ - tokenCollection - inject: 0 - into: - [ :sum :each | - self assert: sum < each startPosition. - each startPosition ] -] - -{ #category : #private } -SmaCCEndToEndTest >> classesInPackage [ - ^ self package classes -] - -{ #category : #tests } -SmaCCEndToEndTest >> expressionParserString [ - ^ ' -%left "+" "-" ; -%left "*" "/" ; -%right "^" ; - -Expression: Expression ''first'' "+" Expression ''last'' {first + last} - | Expression "-" Expression {''1'' - ''3''} - | Expression "*" Expression {''1'' * ''3''} - | Expression "/" Expression {''1'' / ''3''} - | Expression "^" Expression {''1'' raisedTo: ''3''} - | "(" Expression ")" {''2''} - | {''1'' value asNumber};' -] - -{ #category : #tests } -SmaCCEndToEndTest >> expressionScannerString [ - ^ ' - : [0-9]+ (\. [0-9]+) ? ; - : \s+;' -] - -{ #category : #private } -SmaCCEndToEndTest >> lookupType: className [ - ^ self class environment at: className -] - -{ #category : #private } -SmaCCEndToEndTest >> package [ - ^ RPackageOrganizer default packageNamed: self class category -] - -{ #category : #private } -SmaCCEndToEndTest >> parserClass [ - ^ self lookupType: #TestParser -] - -{ #category : #private } -SmaCCEndToEndTest >> removeClass: aBehavior [ - aBehavior removeFromSystem -] - -{ #category : #private } -SmaCCEndToEndTest >> removeNewClasses [ - | classesToRemove | - classesToRemove := self classesInPackage - reject: [ :each | currentClasses includes: each ]. - (classesToRemove - asSortedCollection: [ :a :b | a allSuperclasses size > b allSuperclasses size ]) - do: [ :each | self removeClass: each ] -] - -{ #category : #private } -SmaCCEndToEndTest >> scannerClass [ - ^ self lookupType: #TestScanner -] - -{ #category : #running } -SmaCCEndToEndTest >> setUp [ - super setUp. - SmaCCCodeGenerator reset. - self setUpClasses -] - -{ #category : #private } -SmaCCEndToEndTest >> setUpClasses [ - currentClasses := self classesInPackage -] - -{ #category : #private } -SmaCCEndToEndTest >> supportsUnicodeStrings [ - ^ [ String with: (Character value: 16rFF00). - true ] - on: Error - do: [ :ex | ex return: false ] -] - -{ #category : #running } -SmaCCEndToEndTest >> tearDown [ - self removeNewClasses. - super tearDown -] - -{ #category : #'tests-extended syntax' } -SmaCCEndToEndTest >> testAlternativePrecendence [ - | parserCompiler node | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \d+; : \s+; - %left "+"; - %left "*"; - %root Parse ; %prefix Foo; %suffix Node; - Expression : ''value'' {{Number}} - | Expression ''left'' ( "+" ''op'' | "*" ''op'') Expression ''right'' {{Binary}};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: '1+2*3'. - self assert: node op value = '+'. - self assert: node right op value = '*'. - node := self parserClass parse: '1*2+3'. - self assert: node op value = '+'. - self assert: node left op value = '*' -] - -{ #category : #'tests-extended syntax' } -SmaCCEndToEndTest >> testAlternatives [ - | parserCompiler node | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \d+; : \s+; - %root Parse ; %prefix Foo; %suffix Node; - Numbers : ''left'' ( "+" ''op'' | "*" ''op'') ''right'' {{Parse}};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: '1+2'. - self assert: node class name asString = 'FooParseNode'. - self assert: node op value = '+'. - node := self parserClass parse: '1*2'. - self assert: node op value = '*' -] - -{ #category : #tests } -SmaCCEndToEndTest >> testAmbiguousReduceReduceConflict [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \d+; : \s+; - %glr; - Expression : Left "!" "<" {''1''} | Right "!" ">" {''1''} ; - Left : "+" "*" {''1'' value asNumber + ''3'' value asNumber * ''5'' value asNumber}; - Right : "+" "*" {''1'' value asNumber + (''3'' value asNumber * ''5'' value asNumber)}; - '. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self assert: (self parserClass parse: '2 + 3 * 4!<') = 20. - self assert: (self parserClass parse: '2 + 3 * 4!>') = 14. - self - should: [ self parserClass parse: '2 + 3 * 4!!' ] - raise: SmaCCParserError -] - -{ #category : #tests } -SmaCCEndToEndTest >> testAmbiguousResultWithDifferentScannerTokens [ - | parserCompiler results result | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - '%id ; - : a ; : aa; - %glr; - List : Item {''1''} | List Item {''1'' + ''2''} ; - Item : {1} | {1.5}; - '. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self parserClass compile: 'alwaysPerformReduceAction ^true'. - self parserClass - compile: - 'actionsForCurrentToken - | oldToken oldPosition | - (currentToken ids includes: scanner aaId) ifTrue: [ - oldToken := currentToken. - oldPosition := scanner position. - self position: currentToken stopPosition - 1. - currentToken := currentToken class value: ''a'' start: currentToken startPosition ids: (Array with: scanner aId). - super actionsForCurrentToken do: [:each | self splitWithAction: each]. - currentToken := oldToken. - self position: oldPosition. - ]. - ^super actionsForCurrentToken'. - self assert: (self parserClass parse: 'a') = 1. - [ result := self parserClass parse: 'aa' ] - on: SmaCCAmbiguousResultNotification - do: - [ :ex | - results := ex tag - collect: [ :each | each performOnSmaCCParser: ex parser ]. - ex resume: 0 ]. - self assert: result = 0. - self assert: results size = 2. - self assert: (results includes: 2). - self assert: (results includes: 1.5) -] - -{ #category : #tests } -SmaCCEndToEndTest >> testAmbiguousResults [ - | parserCompiler results result | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \d+; : \s+; - %glr; - Expression : Expression "+" Expression {''1'' + ''3''} - | Expression "*" Expression {''1'' * ''3''} - | {''1'' value asNumber}; - '. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self parserClass compile: 'alwaysPerformReduceAction ^true'. - self assert: (self parserClass parse: '3 + 4') = 7. - self assert: (self parserClass parse: '3 * 4') = 12. - [ result := self parserClass parse: '2 + 3 * 4' ] - on: SmaCCAmbiguousResultNotification - do: - [ :ex | - results := ex tag - collect: [ :each | each performOnSmaCCParser: ex parser ]. - ex resume: 0 ]. - self assert: result = 0. - self assert: results size = 2. - self assert: (results includes: 20). - self assert: (results includes: 14). - - "There are a bunch of ways to parse the following expression. If we don't merge the possibilities, then this will never complete." - self - assert: - (self parserClass - parse: - '1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1') - = 60 -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testAttributesTokens [ - | compiler node | - (compiler := SmaCCGrammarCompiler new) codeGenerator defaultCategory: self class category. - compiler - buildDefinition: - ' : \w+; : \s+; - %annotate_tokens; - %root FooNode; - %attributes FooANode (a b); - A : "(" "<<" "test" ")" {{FooANode}} ; '. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: '( foo << test )'. - self assert: node a isNil. - node a: 1. - node b: 2. - self assert: node a = 1. - self assert: node b = 2 -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testAutoAnnotateTokens [ - | compiler node | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - ' : \w+; : \s+; - %annotate_tokens; - %root FooNode; - A : "(" "<<" "test" ")" {{FooANode}} ; '. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: '( foo << test )'. - self assert: node nameToken value = 'foo'. - self assert: node leftParenToken value = '('. - self assert: node lessThanLessThanToken value = '<<'. - self assert: node testToken value = 'test'. - self assert: node rightParenToken value = ')' -] - -{ #category : #'tests-error' } -SmaCCEndToEndTest >> testAutomaticErrorNodes [ - | compiler node | - (compiler := SmaCCGrammarCompiler new) codeGenerator defaultCategory: self class category. - compiler - buildDefinition: - ' : \s+; - %root FooNode; - P : A ''a'' B ''b'' C ''c'' {{FooRootNode}} ; - A : "a" ''token'' {{FooTokenNode}} ; - B : "b" ''token'' {{FooTokenNode}} ; - C : "c" ''token'' {{FooTokenNode}} ; '. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: 'abc'. - self assert: node a token value = 'a'. - self assert: node b token value = 'b'. - self assert: node c token value = 'c'. - node := self parserClass parseWithErrors: 'ac'. - self assert: node a token value = 'a'. - self assert: node b class = SmaCCErrorNode. - self assert: node c token value = 'c'. - node := self parserClass parseWithErrors: 'ab'. - self assert: node a token value = 'a'. - self assert: node b token value = 'b'. - self assert: node c class = SmaCCErrorNode. - node := self parserClass parseWithErrors: 'bc'. - self assert: node a class = SmaCCErrorNode. - self assert: node b token value = 'b'. - self assert: node c token value = 'c'. - node := self parserClass parseWithErrors: 'axbc'. - self assert: node a class = SmaCCErrorNode. - self assert: node b token value = 'b'. - self assert: node c token value = 'c' -] - -{ #category : #tests } -SmaCCEndToEndTest >> testBadCharacterBlock [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - self - should: - [ parserCompiler - buildDefinition: - ' : [a-] ; - Start : ;'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser' ] - raise: SmaCCParserError -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testBadNode [ - | compiler | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - ' : \s+; - %root FooNode; - A : B "a" ''a'' {{FooNode}} ; - B : A | C ; - C : "c" ''c''; '. - self - assert: - ([ compiler compileInto: 'TestScanner' andParser: 'TestParser'. - false ] - on: SmaCCCompilationNotification - do: - [ :ex | - ('Node creation' = ex messageText and: [ '*>>>A<<<*' match: ex tag ]) - ifTrue: [ ex return: true ] - ifFalse: [ ex resume: nil ] ]) -] - -{ #category : #tests } -SmaCCEndToEndTest >> testBadSmalltalkBlock [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - self - should: - [ parserCompiler - buildDefinition: - ' : foo ; - Start : {self printOn: };'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser' ] - raise: SmaCCParserError -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testChildrenVariables [ - | parserCompiler node | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \d+; : \s+; - %root Parse ; %prefix Foo; %suffix Node; - %hierarchy If (IfElse); - %left "+" "-" ; - If : "if" number ''a'' "then" number ''b'' {{If}} - | "if" number ''a'' "then" number ''b'' "else" number ''c'' {{IfElse}}; - number : ''number'' {{Number}} ;'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: 'if 1 then 2 else 3'. - self assert: node class name asString = 'FooIfElseNode'. - self assert: node children size = 3 -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testChildrenWhenNodeTypeNotSpecified [ - | compiler node values | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - '%root Program; - %prefix Test; - %suffix Node; - : [a-zA-Z]+; - : [0-9]+; - : [\s]+; - Start : Expr ";" ; - Expr : Term ''left'' "+" ''op'' Expr ''right'' {{Binary}} - | Term ''left'' "-" ''op'' Expr ''right'' {{Binary}} - | Term ; - Term : Factor ''left'' "*" ''op'' Term ''right'' {{Binary}} - | Factor ''left'' "/" ''op'' Term ''right'' {{Binary}} - | Factor ; - Factor : ''value'' {{Constant}} - | ''name'' "(" Expr ''argument'' ")" {{Function}} - | "(" Expr ")" ;'. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: '1 + 2;'. - self assert: node children size = 2. - values := #('1' '2') asSet. - node children do: [ :each | values remove: each value value ] -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testChildrenWhenNodeTypeNotSpecifiedAndCouldBeToken [ - | compiler node values | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - '%root Program; - %prefix Test; - %suffix Node; - : [a-zA-Z]+; - : [0-9]+; - : [\s]+; - Start : Expr ";" ; - Expr : Term ''left'' "+" ''op'' Expr ''right'' {{Binary}} - | Term ''left'' "-" ''op'' Expr ''right'' {{Binary}} - | Term ; - Term : Factor ''left'' "*" ''op'' Term ''right'' {{Binary}} - | Factor ''left'' "/" ''op'' Term ''right'' {{Binary}} - | Factor ; - Factor : ''value'' {{Constant}} - | ''name'' "(" Expr ''argument'' ")" {{Function}} - | "(" Q ")" ; - Q : Expr | ;'. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: '1 + 2;'. - self assert: node children size = 2. - values := #('1' '2') asSet. - node children do: [ :each | values remove: each value value ] -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testCodeReturnType [ - | compiler parser | - (compiler := SmaCCGrammarCompiler new) codeGenerator defaultCategory: self class category. - compiler - buildDefinition: - ' : a; - : b; - : \s+; - %root FooNode; - File : A ''aNode'' B ''bNode'' C ''cNode'' {{FooNode}}; - A : {''1''}; - B : {^''1''}; - C : "C" ''c'' {^c}; - D : "D" {^''2''}; - E : "E" {^[]};'. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - parser := self parserClass basicNew. - self assert: (parser symbolTypes at: (parser symbolNames indexOf: 'A')) = #SmaCCToken. - self assert: (parser symbolTypes at: (parser symbolNames indexOf: 'B')) = #SmaCCToken. - self assert: (parser symbolTypes at: (parser symbolNames indexOf: 'C')) = #SmaCCToken. - self assert: (parser symbolTypes at: (parser symbolNames indexOf: 'D')) = '' class name. - self assert: ([ ] class includesBehavior: (Smalltalk at: (parser symbolTypes at: (parser symbolNames indexOf: 'E')))) -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testCollectionSuperclass [ - | parserCompiler node copy | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \d+; : \s+; - %root Parse ; %prefix Foo; %suffix Node; %hierarchy Expression (Number Binary); - %left "+" "-" ; - Expression : Expression ''left'' "+" ''operator'' Expression ''right'' {{Binary}} - | Expression ''left'' "-" ''operator'' Expression ''right'' {{Binary}} - | ''number'' {{Number}} - | "(" ''leftParen'' Expression ")" ''rightParen'' {{Expression}} ;'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: '(2 + 3 - (4))'. - self assert: node class name asString = 'FooBinaryNode'. - self assert: node operator value = '-'. - self assert: node leftParens size = 1. - self - assert: node class superclass name asString = 'FooExpressionNode'. - self assert: node right class name asString = 'FooNumberNode'. - self assert: node right leftParens size = 1. - self assert: node right parent == node. - self assert: node left parent == node. - self assert: node parent isNil. - self assert: node children size = 2. - self assert: (node children includes: node left). - self assert: (node children includes: node right). - self assert: node right number value = '4'. - self assert: node left operator value = '+'. - self assert: node left left number value = '2'. - self assert: node left right number value = '3'. - copy := node copy. - self assert: copy ~~ node. - self assert: copy left ~~ node left. - self assert: copy right ~~ node right. - self assert: copy operator ~~ node operator. - self assert: copy = node. - self assert: copy hash = node hash. - (self lookupType: #FooParseNodeVisitor) new acceptNode: node -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testCollectionSuperclassWithCodeNode [ - | parserCompiler node copy | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \d+; : \s+; - %root Parse ; %prefix Foo; %suffix Node; %hierarchy Expression (Number Binary); - %left "+" "-" ; - Expression : Expression ''left'' "+" ''operator'' Expression ''right'' {{Binary}} - | Expression ''left'' "-" ''operator'' Expression ''right'' {{Binary}} - | Number {''1''} - | "(" ''leftParen'' Expression ")" ''rightParen'' {{Expression}} ; - Number : ''number'' {{Number}} ;'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: '(2 + 3 - (4))'. - self assert: node class name asString = 'FooBinaryNode'. - self assert: node operator value = '-'. - self assert: node leftParens size = 1. - self - assert: node class superclass name asString = 'FooExpressionNode'. - self assert: node right class name asString = 'FooNumberNode'. - self assert: node right leftParens size = 1. - self assert: node right parent == node. - self assert: node left parent == node. - self assert: node parent isNil. - self assert: node children size = 2. - self assert: (node children includes: node left). - self assert: (node children includes: node right). - self assert: node right number value = '4'. - self assert: node left operator value = '+'. - self assert: node left left number value = '2'. - self assert: node left right number value = '3'. - copy := node copy. - self assert: copy ~~ node. - self assert: copy left ~~ node left. - self assert: copy right ~~ node right. - self assert: copy operator ~~ node operator. - self assert: copy = node. - self assert: copy hash = node hash. - (self lookupType: #FooParseNodeVisitor) new acceptNode: node -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testCollectionSuperclassWithImplicitPullUp [ - | parserCompiler node copy | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \d+; : \s+; - %root Parse ; %prefix Foo; %suffix Node; %hierarchy Expression (Number Binary); - %left "+" "-" ; - Expression : Expression ''left'' "+" ''operator'' Expression ''right'' {{Binary}} - | Expression ''left'' "-" ''operator'' Expression ''right'' {{Binary}} - | Number - | "(" ''leftParen'' Expression ")" ''rightParen'' {{Expression}} ; - Number : ''number'' {{Number}} ;'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: '(2 + 3 - (4))'. - self assert: node class name asString = 'FooBinaryNode'. - self assert: node operator value = '-'. - self assert: node leftParens size = 1. - self - assert: node class superclass name asString = 'FooExpressionNode'. - self assert: node right class name asString = 'FooNumberNode'. - self assert: node right leftParens size = 1. - self assert: node right parent == node. - self assert: node left parent == node. - self assert: node parent isNil. - self assert: node children size = 2. - self assert: (node children includes: node left). - self assert: (node children includes: node right). - self assert: node right number value = '4'. - self assert: node left operator value = '+'. - self assert: node left left number value = '2'. - self assert: node left right number value = '3'. - copy := node copy. - self assert: copy ~~ node. - self assert: copy left ~~ node left. - self assert: copy right ~~ node right. - self assert: copy operator ~~ node operator. - self assert: copy = node. - self assert: copy hash = node hash. - (self lookupType: #FooParseNodeVisitor) new acceptNode: node -] - -{ #category : #tests } -SmaCCEndToEndTest >> testComments [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : /* q */ /***/ /****/ a # b - ; - /* */ /***/ /****/ - #this is a comment - begin : {true};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self assert: (self parserClass parse: 'a') -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testCopyCollection [ - | parserCompiler node | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \d+; : \s+; - %root Parse ; %prefix Foo; %suffix Node; - %left "+" "-" ; - ExpressionList : ExpressionList Expression ''expression'' {{ExpressionList}} | Expression ''expression'' {{ExpressionList}}; - Expression : Number ; - Number : ''number'' {{Number}} ;'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: '1 2 3 4'. - self assert: (node copyInContext: Dictionary new) = node -] - -{ #category : #tests } -SmaCCEndToEndTest >> testCrLf [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \r? \n | \r ; - A : {true};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self - assert: - (self parserClass - parse: (String with: Character cr with: Character lf)). - self - should: - [ self parserClass - parse: (String with: Character cr with: Character cr) ] - raise: SmaCCParserError -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testDefaultClassNameWithUnderscore [ - | parserCompiler node | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - '%root Test ; %prefix Foo; %suffix Node; - test_class : "a" ''letter'' {{}};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: 'a'. - self assert: node class name asString = 'FooTestClassNode'. - self assert: node class superclass name asString = 'FooTestNode'. - (self lookupType: #FooTestNodeVisitor) new acceptNode: node -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testEmptyAlternative [ - | compiler node | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - '%root FooNode; - A : B ''component'' {{FooANode}} ; - B : | C ; - C : "c" ''c'' {{FooCNode}} ;'. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: 'c'. - self assert: node class name asString = 'FooANode'. - self assert: node component c value = 'c'. - self assert: node component parent == node. - node := self parserClass parse: ''. - self assert: node component isNil -] - -{ #category : #'tests-error' } -SmaCCEndToEndTest >> testErrorRecovery [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \s+ ; - : \d+; - Start : Items {''1''}; - Items : { 0 } - | Items Integer { ''1'' + ''2'' } - | Items error { ''1'' negated }; - Integer : { ''1'' value asInteger }; - '. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self assert: (self parserClass parseWithErrors: '1 2 3') = 6. - self assert: (self parserClass parseWithErrors: '1 2 a') = -3. - self assert: (self parserClass parseWithErrors: 'a 1 2') = 3 -] - -{ #category : #tests } -SmaCCEndToEndTest >> testErrorToken [ - | parserCompiler countingBlock | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : [a-zA-Z]+; : \s+; - %left "+"; Expression : | Expression "+" Expression {[Notification signal] on: Error do: [:ex | ex return: (Notification raise)]} | error "+" Expression ;'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - countingBlock := [ :string | - | count | - count := 0. - [ [ self parserClass parseWithErrors: string ] - on: Notification - do: - [ :ex | - count := count + 1. - [ ex resume ] - on: Error - do: [ :ex1 | - ex isResumable: true. - ex1 retry ] ] ] - on: SmaCCParserError - do: [ :ex | ex return ]. - count ]. - #(#('a + b + c' 2) #('+ a + b + c' 2) #('a + b +' 1) #('a + 1 / 2 + b + c + 3' 2) #('1 + 1 / 2 + b + c + 3' 1)) - do: [ :each | self assert: (countingBlock value: each first) = each last ] -] - -{ #category : #tests } -SmaCCEndToEndTest >> testErrors [ - | parserCompiler position | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: self expressionScannerString , self expressionParserString. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self parserClass - parse: '+3*4' - onError: [ :str :pos | position := pos ]. - self assert: position = 1. - self parserClass - parseStream: (ReadStream on: '1+a+4') - onError: [ :str :pos | position := pos ]. - self assert: position = 3 -] - -{ #category : #tests } -SmaCCEndToEndTest >> testExcludeScannerState [ - | parserCompiler parser | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - '%excludes a; - : b; - a : a; - Start : {true} | {false};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self assert: (self parserClass parse: 'b'). - self should: [ self parserClass parse: 'a' ] raise: SmaCCParserError. - parser := self parserClass on: (ReadStream on: 'a'). - parser scope: #a. - self deny: parser parse. - parser := self parserClass on: (ReadStream on: 'b'). - parser scope: #a. - self should: [ parser parse ] raise: SmaCCParserError -] - -{ #category : #tests } -SmaCCEndToEndTest >> testExistingVariables [ - | parserCompiler | - SmaCCScanner - subclass: #TestScanner - instanceVariableNames: 'scanner1 scanner2' - classVariableNames: '' - category: 'SmaCC_Tests'. - SmaCCParser - subclass: #TestParser - instanceVariableNames: 'parser1 parser2' - classVariableNames: '' - category: 'SmaCC_Tests'. - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - '%ignorecase; - : \{ | \< \% ; - : .; - %id <_all> ; - begin : A {true} - | All {false}; - A : ; - All: <_all>;'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self assert: (self scannerClass instVarNames includes: 'scanner1'). - self assert: (self scannerClass instVarNames includes: 'scanner2'). - self assert: (self parserClass instVarNames includes: 'parser1'). - self assert: (self parserClass instVarNames includes: 'parser2') -] - -{ #category : #tests } -SmaCCEndToEndTest >> testExpressions [ - #(#LR1 #LALR1) - do: - [ :each | - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler grammar type: each. - parserCompiler - buildDefinition: self expressionScannerString , self expressionParserString. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self - assert: - (self parserClass parse: '2 + 3 * 4 / 5 ^ 3 ^ 2') - = (2 + (3 * 4 / (5 raisedTo: (3 raisedTo: 2)))). - self - assert: - (self parserClass parse: '1.0*2/3+4.0^2^3+3') - = (1.0 * 2 / 3 + (4.0 raisedTo: (2 raisedTo: 3)) + 3). - self - assert: - (self parserClass parse: '(((1 + 2) * 3) ^ 2) ^ 3') - = (((1 + 2) * 3 raisedTo: 2) raisedTo: 3) ] -] - -{ #category : #tests } -SmaCCEndToEndTest >> testGLRHierarchy [ - | parserCompiler | - SmaCCGLRParser - subclass: #FooParser - instanceVariableNames: '' - classVariableNames: '' - category: 'SmaCC_Tests'. - (Smalltalk at: #FooParser) - subclass: #TestParser - instanceVariableNames: '' - classVariableNames: '' - category: 'SmaCC_Tests'. - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - '%ignorecase; %glr; - : \{ | \< \% ; - : .; - %id <_all> ; - begin : A {true} - | All {false}; - A : ; - All: <_all>;'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self assert: self parserClass superclass name asString = 'FooParser' -] - -{ #category : #'tests-error' } -SmaCCEndToEndTest >> testGlrErrorRecovery [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator defaultCategory: self class category. - parserCompiler - buildDefinition: - '%glr; - : \s+ ; - : \d+; - Start : Items {''1''}; - Items : { 0 } - | Items Integer { ''1'' + ''2'' } - | Items error { ''1'' negated }; - Integer : { ''1'' value asInteger }; - '. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self assert: (self parserClass parseWithErrors: '1 2 3') = 6. - self assert: (self parserClass parseWithErrors: '1 2 a') = -3. - self assert: (self parserClass parseWithErrors: 'a 1 2') = 3 -] - -{ #category : #tests } -SmaCCEndToEndTest >> testHierarchy [ - | parserCompiler | - SmaCCScanner - subclass: #FooScanner - instanceVariableNames: '' - classVariableNames: '' - category: 'SmaCC_Tests'. - (Smalltalk at: #FooScanner) - subclass: #TestScanner - instanceVariableNames: '' - classVariableNames: '' - category: 'SmaCC_Tests'. - SmaCCParser - subclass: #FooParser - instanceVariableNames: '' - classVariableNames: '' - category: 'SmaCC_Tests'. - (Smalltalk at: #FooParser) - subclass: #TestParser - instanceVariableNames: '' - classVariableNames: '' - category: 'SmaCC_Tests'. - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - '%ignorecase; - : \{ | \< \% ; - : .; - %id <_all> ; - begin : A {true} - | All {false}; - A : ; - All: <_all>;'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self - assert: self scannerClass superclass name asString = 'FooScanner'. - self assert: self parserClass superclass name asString = 'FooParser' -] - -{ #category : #tests } -SmaCCEndToEndTest >> testIgnoreCaseKeywords [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - '%ignorecase; - : [a-z_]+ ; : \s+ ; - Start ::= "Foo" {true} | {false};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self assert: (self parserClass parse: 'FOo'). - self deny: (self parserClass parse: 'FoObAr ASDS') -] - -{ #category : #tests } -SmaCCEndToEndTest >> testIgnoreCaseTokens [ - | parserCompiler result | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - '%ignorecase; - : \s+ ; - Start ::= "a" "a" {Array with: ''1'' with: ''2''};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - result := self parserClass parse: 'a A'. - self assert: result first = result last. - self assert: result first hash = result last hash -] - -{ #category : #tests } -SmaCCEndToEndTest >> testIgnoreCaseWithMultipleKeywordCases [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - '%ignorecase; - : \s+ ; - Start ::= "if" "If" "iF" "IF" {true}; '. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self assert: (self parserClass parse: 'IF IF IF IF'). - self assert: (self parserClass parse: 'iF If IF If') -] - -{ #category : #tests } -SmaCCEndToEndTest >> testImmediateExecution [ - | parserCompiler notification | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \d+; : \s+; - %glr; - Test : A { ''1'' } | B {self error: ''Should not occur''}; - A : { true }; - B : [ Notification signal: ''B'' ]; - '. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - [ self assert: (self parserClass parse: '1 2') ] - on: Notification - do: [ :ex | - notification := ex messageText. - ex resume ]. - self assert: notification = 'B' -] - -{ #category : #tests } -SmaCCEndToEndTest >> testImplicitParserTokens [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler buildDefinition: 'A : {true};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self assert: (self parserClass parse: 'a'). - self should: [ self parserClass parse: ' ' ] raise: SmaCCParserError -] - -{ #category : #tests } -SmaCCEndToEndTest >> testImplicitScannerTokens [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : + ; - A : {true};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self assert: (self parserClass parse: 'asdfssdafADSFS'). - self - should: [ self parserClass parse: ' asdf asdf' ] - raise: SmaCCParserError -] - -{ #category : #tests } -SmaCCEndToEndTest >> testImplicitTokenPrecedence [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : . ; - A : {true} | {false};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - 0 to: 255 do: - [ :each | - self - assert: (self parserClass parse: (String with: (Character value: each))) ] -] - -{ #category : #tests } -SmaCCEndToEndTest >> testInvertedCharactersBlock [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - '%ignorecase; - : a{1,3} ; - : [^a]+ ; - : \s+ ; - begin : {0} | begin {''1'' + 1} | begin {''1'' - 1};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self assert: (self parserClass parse: 'aa') = 1. - self assert: (self parserClass parse: 'aaaa') = 2. - self assert: (self parserClass parse: 'a bab') = 0 -] - -{ #category : #tests } -SmaCCEndToEndTest >> testKeywords [ - | parserCompiler size definition | - definition := '%ignorecase; - Start ::= "Foo" "bar";'. - size := SmaCCGrammar maximumCharacterValue. - self supportsUnicodeStrings - ifTrue: [ definition := '%unicode; ' , definition ]. - [ (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler buildDefinition: definition. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self parserClass parse: 'FoObAr' ] - ensure: [ SmaCCGrammar maximumCharacterValue: size ] -] - -{ #category : #tests } -SmaCCEndToEndTest >> testKeywordsWithStates [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - '%states default keyword; - keyword : word; - keyword default : [a-z]+; - Start : ; - other : ;'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self parserClass parse: 'word' -] - -{ #category : #'tests-error' } -SmaCCEndToEndTest >> testLALRErrorHandler [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \s+ ; - Start : Foo "]" Foo ")"; - Foo : "a" Bar ; - Bar : "b" | error ;'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self - should: [ self parserClass parse: 'a ] a b )' ] - raise: SmaCCParserError. - self - should: [ self parserClass parse: 'a ) a b )' ] - raise: SmaCCParserError. - self - should: [ self parserClass parse: 'a b ] a ]' ] - raise: SmaCCParserError -] - -{ #category : #tests } -SmaCCEndToEndTest >> testLR1 [ - | parserCompiler definitionString | - definitionString := 'S : a E c { 1 } - | a F d { 2 } - | b F c { 3 } - | b E d { 4 } -; -E : e ; -F : e ; -a : "a"; -b : "b"; -c : "c"; -d : "d"; -e : "e";'. - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator defaultCategory: self class category. - parserCompiler buildDefinition: '%lr1; ' , definitionString. - self - assert: - ([ parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - true ] - on: SmaCCCompilationNotification - do: [ :ex | ex return: false ]). - self assert: (self parserClass parse: 'aec') = 1. - self assert: (self parserClass parse: 'aed') = 2. - self assert: (self parserClass parse: 'bec') = 3. - self assert: (self parserClass parse: 'bed') = 4. - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator defaultCategory: self class category. - parserCompiler buildDefinition: definitionString. - self - assert: - ([ parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - false ] - on: SmaCCCompilationNotification - do: [ :ex | ex return: true ]) -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testLeftAndRightRecursive [ - | parserCompiler node | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \d+; : \s+; - %root Parse ; %prefix Foo; %suffix Node; - Foo : Number ''number'' {{Collection}} - | "(" ''leftParen'' Foo ")" ''rightParen'' {{Collection}} ; - Number : ''token'' {{Number}} ;'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: '(((4)))'. - self assert: node leftParens size = 3. - self assert: node rightParens size = 3. - self assert: node number token value = '4'. - self checkTokensAreInOrder: node leftParens. - self checkTokensAreInOrder: node rightParens. - self assert: node children size = 1. - self assert: node children first == node number. - (self lookupType: #FooParseNodeVisitor) new acceptNode: node -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testLeftRecursive [ - | parserCompiler node copy | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \d+; : \s+; - %root Parse ; %prefix Foo; %suffix Node; - Foo : Number ''number'' {{Collection}} - | Foo "," ''comma'' Number ''number'' {{Collection}} ; - Number : ''token'' {{Number}} ;'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: '1 , 2 , 3 , 4'. - self assert: node numbers size = 4. - node numbers - keysAndValuesDo: - [ :key :each | - self assert: key printString = each token value. - self assert: each parent == node. - self assert: (node children includes: each) ]. - self assert: node commas size = 3. - node commas do: [ :each | self assert: each value = ',' ]. - copy := node copy. - self assert: copy ~~ node. - self assert: copy numbers ~~ node numbers. - self assert: copy = node. - self assert: copy hash = node hash. - (self lookupType: #FooParseNodeVisitor) new acceptNode: node -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testMatchCollection [ - | parserCompiler node | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \d+; : \s+; - %root Parse ; %prefix Foo; %suffix Node; - %left "+" "-" ; - ExpressionList : ExpressionList Expression ''expression'' {{ExpressionList}} | Expression ''expression'' {{ExpressionList}}; - Expression : Number ; - Number : ''number'' {{Number}} ;'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: '1 2 3 4'. - self assert: (node match: node inContext: Dictionary new) -] - -{ #category : #tests } -SmaCCEndToEndTest >> testMoveFromGLRHierarchy [ - | parserCompiler | - SmaCCGLRParser - subclass: #FooParser - instanceVariableNames: '' - classVariableNames: '' - category: 'SmaCC_Tests'. - (Smalltalk at: #FooParser) - subclass: #TestParser - instanceVariableNames: '' - classVariableNames: '' - category: 'SmaCC_Tests'. - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - '%ignorecase; - : \{ | \< \% ; - : .; - %id <_all> ; - begin : A {true} - | All {false}; - A : ; - All: <_all>;'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self - assert: self parserClass superclass name asString = 'SmaCCParser' -] - -{ #category : #tests } -SmaCCEndToEndTest >> testMoveToGLRHierarchy [ - | parserCompiler | - SmaCCParser - subclass: #FooParser - instanceVariableNames: '' - classVariableNames: '' - category: 'SmaCC_Tests'. - (Smalltalk at: #FooParser) - subclass: #TestParser - instanceVariableNames: '' - classVariableNames: '' - category: 'SmaCC_Tests'. - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - '%ignorecase; %glr; - : \{ | \< \% ; - : .; - %id <_all> ; - begin : A {true} - | All {false}; - A : ; - All: <_all>;'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self - assert: self parserClass superclass name asString = 'SmaCCGLRParser' -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testMultipleComponents [ - | compiler node | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - '%root FooNode; - A : B C {{FooANode}} ; - B : "b" ''b'' ; - C : "c" ''c'';'. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: 'bc'. - self assert: node class name asString = 'FooANode'. - self assert: node b startPosition = 1. - self assert: node c startPosition = 2 -] - -{ #category : #tests } -SmaCCEndToEndTest >> testMultipleStartingPositions [ - | parserCompiler position | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \w+; - %start plus ; - multiply: plus "*" plus {true}; - plus: {false} | "+" {false};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self assert: (self parserClass parse: 'a*a'). - self assert: (self parserClass parse: 'a+a*a'). - self - should: [ self parserClass parse: 'a+a' ] - raise: SmaCCParserError. - self - deny: - (self parserClass - parse: 'a+a' - startingAt: self parserClass startingStateForplus). - self parserClass - parse: 'a*a' - startingAt: self parserClass startingStateForplus - onError: [ :str :pos | position := pos ]. - self assert: position = 2 -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testMultipleTypes [ - | compiler node | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - ' : \d+; : \s+; - %root FooNode; - A : B | C ; - B : "b" ''b'' D {{FooBNode}} ; - C : "c" ''c'' D {{FooCNode}}; - D : Number ''number'' | D "," ''comma'' Number ''number'' ; - Number : ''number'' {{FooNumberNode}};'. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: 'b 1, 2, 3, 4'. - self assert: node class name asString = 'FooBNode'. - node numbers - keysAndValuesDo: - [ :key :each | - self assert: key printString = each number value. - self assert: each parent == node ]. - self assert: node numbers size = 4. - self assert: node commas size = 3 -] - -{ #category : #tests } -SmaCCEndToEndTest >> testNFAtoDFAConversion [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' - : + - ; - - : [^\''\\\r\n] - | - ; - - : \\x [0-9a-fA-F]+ - ; - - : - ; - Start : { true } | {false};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self assert: (self parserClass parse: 'abcde\xffee3sdas'). - self should: [ self parserClass parse: '''' ] raise: SmaCCParserError -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testName [ - | compiler node | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - ' : \w+; : \s+; - %root FooNode; - A : name ''nameNode'' {{FooANode}} ; - name : simple | composite ; - simple : ''name'' {{FooNameNode}}; - composite : name ''base'' "." ''period'' ''name'' {{FooFullNameNode}}; '. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: 'a.b.c'. - self assert: node nameNode name value = 'c'. - self assert: node nameNode parent == node. - self assert: node nameNode base name value = 'b'. - self assert: node nameNode base parent == node nameNode. - self assert: node nameNode base base name value = 'a'. - self assert: node nameNode base base parent == node nameNode base -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testNamedSubComponent [ - | compiler node | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - ' : \d+; : \s+; - %root FooNode; - A : {{FooANode}} | "a" ''a'' A ''sub'' {{FooANode}} ;'. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: 'aaa'. - self assert: node class name asString = 'FooANode'. - self assert: node a startPosition = 1. - self assert: node sub a startPosition = 2. - self assert: node sub parent == node. - self assert: node sub sub a startPosition = 3. - self assert: node sub sub parent == node sub. - self assert: node sub sub sub a isNil. - self assert: node sub sub sub parent == node sub sub. - self assert: node sub sub sub sub isNil -] - -{ #category : #tests } -SmaCCEndToEndTest >> testNextToken [ - | compiler tokens | - (compiler := SmaCCGrammarCompiler new) codeGenerator defaultCategory: self class category. - compiler - buildDefinition: - ' : next; : \s+; - Next : ; '. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - tokens := self parserClass parse: ' next '. - self assert: tokens first value = 'next' -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testNodeAndExpression [ - | compiler node | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - '%root FooNode; - A : B "a" ''a'' {{FooNode}} ; - B : {Object new} ;'. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: 'a'. - self assert: node a value = 'a' -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testNodeClassName [ - | compiler pattern | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - ' : \d+; : [a-z]+; : \s+; : (\` [^\`]* \`)+ ; %glr; - %root FooNode; - A : Name | Number ; - Name : ''name'' {{FooNameNode}}; - Number : ''number'' {{FooNumberNode}};'. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - pattern := self parserClass - parse: '`a{nodeClassName: #FooNumberNode}`'. - self - assert: - (pattern - match: (self parserClass parse: '123') - inContext: Dictionary new). - self - deny: - (pattern - match: (self parserClass parse: 'abc') - inContext: Dictionary new) -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testNodeWithoutRoot [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler buildDefinition: 'test : "a" ''letter'' {{FooNode}};'. - self - should: - [ parserCompiler compileInto: 'TestScanner' andParser: 'TestParser' ] - raise: SmaCCCompilationNotification -] - -{ #category : #tests } -SmaCCEndToEndTest >> testNonAssociativeTokens [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \w+ ; : \s+ ; - %left "and" ; - %nonassoc "=" "<="; - %left "+" ; - expr : expr "=" expr {true} | expr "<=" expr {true} | expr "and" expr {true} | expr "+" expr {true} | {true};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self - should: [ self parserClass parse: 'a=b=c' ] - raise: SmaCCParserError. - self - should: [ self parserClass parse: 'a=b<=c' ] - raise: SmaCCParserError. - self - should: [ self parserClass parse: 'a=b+c=d' ] - raise: SmaCCParserError. - self assert: (self parserClass parse: 'a=b and c=d') -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testNonRecursiveVariableInsideRecursiveProduction [ - | compiler node | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - ' : \s+; - %root FooNode; - A : B "a" ''letter'' {{FooNode}} ; - B : A | C ; - C : "c" ''c'' {{FooNode}};'. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: 'c a a a'. - self assert: node c value = 'c'. - self assert: node letters size = 3 -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testOptionalCollection [ - | compiler node | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - ' : \d+; : \s+; - %root FooNode; - A : B_opt {{FooANode}} ; - B_opt : B | ; - B : Number ''numberNode'' | B Number ''numberNode'' ; - Number : ''number'' {{FooNumberNode}};'. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: '1 2 3 4'. - node numberNodes - keysAndValuesDo: - [ :key :each | - self assert: key printString = each number value. - self assert: each parent == node ]. - self assert: node numberNodes size = 4 -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testOptionalComponent [ - | compiler node | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - ' : \d+; : \s+; - %root FooNode; - A : B {{FooANode}} ; - B : "b" ''b'' | ;'. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: ''. - self assert: node b isNil. - node := self parserClass parse: 'b'. - self assert: node b startPosition = 1 -] - -{ #category : #public } -SmaCCEndToEndTest >> testOptionalVariableType [ - | compiler | - (compiler := SmaCCGrammarCompiler new) codeGenerator defaultCategory: self class category. - compiler - buildDefinition: - ' : \s+; - %root FooNode; - A : Comma {{FooANode}} ; - Comma : "," ''comma'' | ;'. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - self - assert: self parserClass basicNew symbolTypes asSet asSortedCollection asArray = #(#FooANode #SmaCCErrorNode #SmaCCToken) -] - -{ #category : #tests } -SmaCCEndToEndTest >> testOutOfOrderTokens [ - | parserCompiler result | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : a ; - : b; - : c; - Start ::= {''1''};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - result := self parserClass parse: 'abc'. - self assert: result source = 'abc' -] - -{ #category : #tests } -SmaCCEndToEndTest >> testOverlappingTokens [ - | parserCompiler result | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \w+; : \w+; - %glr; - Test : "keyword" {''1''} | {''1''} | {''1''} ; - '. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - result := self parserClass parse: 'keyword'. - self assert: result ids size = 3 -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testParseAllPattern [ - | compiler trees node | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - ' : \s+; : (\` [^\`]* \`)+ ; - %root FooNode; %glr; - A : "f:" ''f'' Z ''z'' {{FooANode}} | A "f:" ''f'' Z ''z'' {{FooANode}}; - Z : B | C; - B : "b" ''b'' {{FooBNode}}; - C : "c" ''c'' {{FooCNode}}; '. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - trees := self parserClass - parseAll: 'f: `a` f: `b`' - startingAt: self parserClass defaultStartingState. - self assert: trees size = 1. - node := trees first. - self assert: node fs size = 2. - trees := self parserClass - parseAll: 'f: `a{beToken}` f: `b{beToken}`' - startingAt: self parserClass defaultStartingState. - self assert: trees size = 4. - node := trees first. - self assert: node fs size = 2 -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testPassThrough [ - | compiler node | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - ' : \d+; : \s+; - %root FooNode; - A : B ''b'' {{FooANode}} ; - B : C ; - C : Number; - Number : ''number'' {{FooNumberNode}}; '. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: '12'. - self assert: node class name asString = 'FooANode'. - self assert: node b parent == node. - self assert: node b number startPosition = 1. - self assert: node b number value = '12' -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testPerformanceMatchCollection [ - | parserCompiler node match fastTime slowTime | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \d; : \s+; - : (\` [^\`]* \`)+ ; - %glr; - %root Parse ; %prefix Foo; %suffix Node; - %left "+" "-" ; - ExpressionList : ExpressionList Expression ''expression'' {{ExpressionList}} | Expression ''expression'' {{ExpressionList}}; - Expression : Number ; - Number : ''number'' {{Number}} ;'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: (String new: 1000 withAll: $1) , '22' , (String new: 1000 withAll: $1). - fastTime := Time millisecondsToRun: [ self assert: (node match: node inContext: Dictionary new) ]. - match := [ self parserClass parse: '`a{beList}` 22 `b{beList}`' ] - on: SmaCCAmbiguousResultNotification - do: [ :ex | (ex tag collect: [ :each | each performOnSmaCCParser: ex parser ]) detect: [ :each | (each isKindOf: SmaCCPatternNode) not ] ifNone: [ ex tag first ] ]. - slowTime := Time millisecondsToRun: [ self assert: (match match: node inContext: Dictionary new) ]. - self assert: (fastTime max: 1) * 10 > slowTime -] - -{ #category : #'tests-extended syntax' } -SmaCCEndToEndTest >> testPlus [ - | parserCompiler node | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \d+; : \s+; - %root Parse ; %prefix Foo; %suffix Node; - Numbers : ''number'' ( "," ''comma'' ''number'' )+ {{Parse}};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: '1,2,3,4,5,6'. - self assert: node class name asString = 'FooParseNode'. - self assert: node numbers size = 6. - self assert: node commas size = 5. - self should: [self parserClass parse: '1'] raise: SmaCCParserError -] - -{ #category : #tests } -SmaCCEndToEndTest >> testPreferredReduction [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - '%glr; - Test : {1} | Test A {''1'' * ''2''} | Test B {''1'' * ''2''}; - A : "a" {1}; - B : "a" {2}; - '. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self - assert: (self parserClass parse: (String new: 100 withAll: $a)) - equals: 1 -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testPrefixSuffix [ - | parserCompiler node | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - '%root Test ; %prefix Foo; %suffix Node; - test : "a" ''letter'' {{Test}};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: 'a'. - self assert: node class name asString = 'FooTestNode'. - self assert: node class superclass = SmaCCParseNode. - (self lookupType: #FooTestNodeVisitor) new acceptNode: node -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testPrefixSuffixWithDefaultClassName [ - | parserCompiler node | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - '%root Test ; %prefix Foo; %suffix Node; - test : "a" ''letter'' {{}};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: 'a'. - self assert: node class name asString = 'FooTestNode'. - self assert: node class superclass = SmaCCParseNode. - (self lookupType: #FooTestNodeVisitor) new acceptNode: node -] - -{ #category : #tests } -SmaCCEndToEndTest >> testPriority [ - | parserCompiler | - SmaCCScanner - subclass: #TestScanner - instanceVariableNames: '' - classVariableNames: '' - category: 'SmaCC_Tests'. - (self lookupType: #TestScanner) - compile: 'all ^self recordAndReportMatch: (Array with: self _allId)'. - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - '%ignorecase; - : \{ | \< \% ; - : .; - %id <_all> ; - begin : A {true} - | All {false}; - A : ; - All: <_all>;'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self assert: (self parserClass parse: '{'). - self assert: (self parserClass parse: '<%'). - self deny: (self parserClass parse: '}') -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testPullUpCollectionVariables [ - | compiler node | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - ' : \d+; : \s+; - %root FooNode; - A : AList {{FooNode}} ; - AList : B | AList B; - B : ''number'' ;'. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: '1 2 3 4'. - node numbers - keysAndValuesDo: [ :key :each | self assert: key printString = each value ]. - self assert: node numbers size = 4 -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testPullUpMultipleTypes [ - | compiler node | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - ' : \d+; : \s+; - %root FooNode; - A : D B {{FooBNode}} | D C {{FooCNode}}; - B : "b" ''b'' D ; - C : "c" ''c'' D ; - D : Number ''number'' | D Number ''number'' ; - Number : ''number'' {{FooNumberNode}};'. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: '0 b 1 2 3 4'. - self assert: node class name asString = 'FooBNode'. - node numbers - keysAndValuesDo: - [ :key :each | - self assert: (key - 1) printString = each number value. - self assert: each parent == node ]. - self assert: node numbers size = 5 -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testPullUpVariablesForLaterSymbols [ - | compiler node | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - ' : \d+; : \s+; - %root FooNode; - A : "a" ''a'' B_opt {{FooNode}} ; - B_opt : B | ; - B : ''number'' | B ''number'' ;'. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: 'a 1 2 3 4'. - node numbers - keysAndValuesDo: [ :key :each | self assert: key printString = each value ]. - self assert: node numbers size = 4. - node := self parserClass parse: 'a'. - self assert: node numbers isEmpty -] - -{ #category : #'tests-extended syntax' } -SmaCCEndToEndTest >> testQuestion [ - | parserCompiler node | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \d+; : \s+; - %root Parse ; %prefix Foo; %suffix Node; - Numbers : ''number'' ( "," ''comma'' ''number'' )? {{Parse}};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: '1,2'. - self assert: node class name asString = 'FooParseNode'. - self assert: node numbers size = 2. - self assert: node comma notNil. - node := self parserClass parse: '1'. - self assert: node numbers size = 1. - self assert: node comma isNil. - self should: [ self parserClass parse: '1,2,3' ] raise: SmaCCParserError -] - -{ #category : #'tests-extended syntax' } -SmaCCEndToEndTest >> testQuestionPrecedence [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator defaultCategory: self class category. - parserCompiler - buildDefinition: - '%root Parse ; %prefix Foo; %suffix Node; %annotate_tokens; - A : "a"? ("." "a"?)? "." "."{{}};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self parserClass parse: '..'. - self parserClass parse: '...'. - self parserClass parse: 'a..'. - self parserClass parse: '.a..'. - self parserClass parse: 'a...'. - self parserClass parse: 'a.a..' -] - -{ #category : #tests } -SmaCCEndToEndTest >> testRecursiveRule [ - #(#LR1 #LALR1) - do: - [ :each | - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler grammar type: each. - parserCompiler - buildDefinition: - self expressionScannerString - , - 'Test: Test1 Recursive; - Test1: {''1'' value}; - Recursive: | Recursive "|" {''1'' add: ''3'' value; yourself};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self - assert: - ((parserCompiler grammar nonTerminalSymbolNamed: 'Recursive') - firstTerminals - includes: (parserCompiler grammar keywordTerminalNamed: '"|"')). - self - assert: - (self parserClass parse: '2|3|4') asOrderedCollection - = (OrderedCollection with: '2' with: '3' with: '4') ] -] - -{ #category : #tests } -SmaCCEndToEndTest >> testReduceActionReuse [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : a ; - begin : {#()};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self - assert: - (self parserClass selectors - anySatisfy: [ :each | each beginsWith: 'reduceActionFor' ]) -] - -{ #category : #tests } -SmaCCEndToEndTest >> testReduceReduceConflict [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \w ; - : \s+ ; - begin : Foo {true} | Bar {false}; - Foo : ; - Bar : ;'. - self - assert: - ([ parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - false ] - on: SmaCCCompilationNotification - do: - [ :ex | - ('*Reduce/Reduce*' match: ex messageText) - ifTrue: [ ex return: true ] - ifFalse: [ ex resume: nil ] ]) -] - -{ #category : #tests } -SmaCCEndToEndTest >> testReduceRules [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : [a-zA-Z] ; - : \s ; - Start ::= Chars {#liftFirstValue:}; - Chars : WS A WS {#liftSecondValue:}; - A : WS WS C {#liftLastValue:} | C WS {#liftLastValue:}; - WS : {#nil}; - C : {#stringValue:};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self assert: (self parserClass parse: ' a ') isNil. - self assert: (self parserClass parse: ' a ') = 'a' -] - -{ #category : #public } -SmaCCEndToEndTest >> testRenamedNullableVariable [ - | compiler node | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - ' : \s+; - %glr; - %root FooNode; - A : B ''separator'' C {{FooANode}} ; - B : C | ; - C : Comma ''c''; - Comma : "," ''comma'' {{FooCommaNode}};'. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: ',,'. - self assert: node separator comma value = ','. - self assert: node separator comma startPosition = 1. - self assert: (node nodeVariables includes: #separator). - self assert: node c comma value = ','. - self assert: node c comma startPosition = 2. - self deny: (self parserClass basicNew symbolTypes includes: #Object). - node := self parserClass parse: ','. - self assert: node separator isNil -] - -{ #category : #public } -SmaCCEndToEndTest >> testRenamedVariable [ - | compiler node | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - ' : \s+; - %root FooNode; - A : Comma ''separator'' Comma {{FooANode}} ; - Comma : "," ''comma'' ;'. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: ',,'. - self assert: node separator value = ','. - self assert: node separator startPosition = 1. - self assert: (node tokenVariables includes: #separator). - self assert: node comma value = ','. - self assert: node comma startPosition = 2. - self deny: (self parserClass basicNew symbolTypes includes: #Object) -] - -{ #category : #public } -SmaCCEndToEndTest >> testRenamedVariableCollection [ - | compiler node | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - ' : \s+; - %root FooNode; - A : Commas ''separator'' "a" ''a'' Commas {{FooANode}} ; - Commas : | Commas "," ''comma'' ;'. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: ',,,a,,,'. - self assert: node separators size = 3. - self assert: node separators first value = ','. - self assert: node separators first startPosition = 1. - self - assert: - node compositeTokenVariables asSortedCollection asArray - = #(#commas #separators). - self deny: (self parserClass basicNew symbolTypes includes: #Object) -] - -{ #category : #tests } -SmaCCEndToEndTest >> testRepeat [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : [a-zA-Z]; - : (\`[^\`]*\`)+; - All : | All Test ; - Test : | ;'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self assert: (self parserClass parse: '`a`b`c`') size = 3 -] - -{ #category : #tests } -SmaCCEndToEndTest >> testRepeatingCharactersBlock [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : a{1,3} ; - : \w+ ; - : \s+ ; - begin : {true} | begin {''1''} | begin {false};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self assert: (self parserClass parse: 'aa'). - self deny: (self parserClass parse: 'aaaa') -] - -{ #category : #tests } -SmaCCEndToEndTest >> testReuseCompositeToken [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : [a-zA-Z_] \d ; - : aa | bb; - : | ; - : \s+ ; - begin : begin {false} | {true};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self should: [ self parserClass parse: '2' ] raise: SmaCCParserError. - self assert: (self parserClass parse: 'aa'). - self assert: (self parserClass parse: 'bb'). - self assert: (self parserClass parse: 'a4'). - self should: [ self parserClass parse: 'ab' ] raise: SmaCCParserError. - self should: [ self parserClass parse: '4b' ] raise: SmaCCParserError -] - -{ #category : #tests } -SmaCCEndToEndTest >> testReuseSimpleToken [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : [a-zA-Z_\\] ; - : [0-9] ; - : (|)* ; - : \s+ ; - begin : begin {false} | {true};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self should: [ self parserClass parse: '2' ] raise: SmaCCParserError. - self assert: (self parserClass parse: '\') -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testRightRecursive [ - | parserCompiler node copy | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \d+; : \s+; - %root Parse ; %prefix Foo; %suffix Node; - Foo : Number ''number'' {{Collection}} - | Number ''number'' "," ''comma'' Foo {{Collection}} ; - Number : ''token'' {{Number}} ;'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: '1 , 2 , 3 , 4'. - self assert: node numbers size = 4. - node numbers - keysAndValuesDo: - [ :key :each | - self assert: key printString = each token value. - self assert: each parent == node. - self assert: (node children includes: each) ]. - self assert: node commas size = 3. - node commas - inject: 0 - into: - [ :sum :each | - self assert: sum < each startPosition. - each startPosition ]. - node commas do: [ :each | self assert: each value = ',' ]. - copy := node copy. - self assert: copy ~~ node. - self assert: copy numbers ~~ node numbers. - self assert: copy = node. - self assert: copy hash = node hash. - (self lookupType: #FooParseNodeVisitor) new acceptNode: node -] - -{ #category : #tests } -SmaCCEndToEndTest >> testScannerScopes [ - | parserCompiler parser | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - '%scopes a ; - : b; - a : a; - Start : {true} | {false};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self assert: (self parserClass parse: 'b'). - self should: [ self parserClass parse: 'a' ] raise: SmaCCParserError. - parser := self parserClass on: (ReadStream on: 'a'). - parser scope: #a. - self deny: parser parse. - parser := self parserClass on: (ReadStream on: 'b'). - parser scope: #a. - self assert: parser parse -] - -{ #category : #tests } -SmaCCEndToEndTest >> testSimple [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : a ; - begin : {true};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self should: [ self parserClass parse: '2' ] raise: SmaCCParserError. - self assert: (self parserClass parse: 'a') -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testSimpleHierarchy [ - | parserCompiler node copy | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \d+; : \s+; - %root Parse ; %prefix Foo; %suffix Node; - %hierarchy Binary (Plus Minus); - %left "+" "-" ; - Expression : Expression ''left'' "+" ''operator'' Expression ''right'' {{Plus}} - | Expression ''left'' "-" ''operator'' Expression ''right'' {{Minus}} - | ''number'' {{Number}} ;'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: '2 + 3 - 4'. - self assert: node class name asString = 'FooMinusNode'. - self assert: node operator value = '-'. - self assert: node class superclass name asString = 'FooBinaryNode'. - self assert: node right class name asString = 'FooNumberNode'. - self assert: node left class name asString = 'FooPlusNode'. - self assert: node right parent == node. - self assert: node left parent == node. - self assert: node parent isNil. - self assert: node children size = 2. - self assert: (node children includes: node left). - self assert: (node children includes: node right). - self assert: node right number value = '4'. - self assert: node left operator value = '+'. - self assert: node left left number value = '2'. - self assert: node left right number value = '3'. - copy := node copy. - self assert: copy ~~ node. - self assert: copy left ~~ node left. - self assert: copy right ~~ node right. - self assert: copy operator ~~ node operator. - self assert: copy = node. - self assert: copy hash = node hash. - (self lookupType: #FooParseNodeVisitor) new acceptNode: node -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testSimpleNode [ - | parserCompiler node | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - '%root FooNode ; - test : "a" ''letter'' {{FooNode}};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: 'a'. - self assert: node class name asString = 'FooNode'. - self assert: node letter value = 'a'. - self assert: node letter startPosition = 1. - self assert: node letter stopPosition = 1. - self assert: node class superclass = SmaCCParseNode. - self assert: node copy ~~ node. - self assert: node copy letter ~~ node letter. - self assert: node = node copy. - self assert: node hash = node copy hash. - (self lookupType: #FooNodeVisitor) new acceptNode: node -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testSimpleTree [ - | parserCompiler node copy | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \d+; : \s+; - %root Parse ; %prefix Foo; %suffix Node; - %left "+" "-" ; - Expression : Expression ''left'' "+" ''operator'' Expression ''right'' {{Binary}} - | Expression ''left'' "-" ''operator'' Expression ''right'' {{Binary}} - | ''number'' {{Number}} ;'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: '2 + 3 - 4'. - self assert: node class name asString = 'FooBinaryNode'. - self assert: node operator value = '-'. - self assert: node class superclass name asString = 'FooParseNode'. - self assert: node right class name asString = 'FooNumberNode'. - self assert: node right parent == node. - self assert: node left parent == node. - self assert: node parent isNil. - self assert: node children size = 2. - self assert: (node children includes: node left). - self assert: (node children includes: node right). - self assert: node right number value = '4'. - self assert: node left operator value = '+'. - self assert: node left left number value = '2'. - self assert: node left right number value = '3'. - copy := node copy. - self assert: copy ~~ node. - self assert: copy left ~~ node left. - self assert: copy right ~~ node right. - self assert: copy operator ~~ node operator. - self assert: copy = node. - self assert: copy hash = node hash. - (self lookupType: #FooParseNodeVisitor) new acceptNode: node -] - -{ #category : #public } -SmaCCEndToEndTest >> testSingleVariableCollection [ - | compiler node | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - ' : \s+; : (\` [^\`]* \`)+ ; : \d+; - %root P; %glr; %prefix Foo; %suffix Node; - A : B {{}}; - B : B C ''item'' | ; - C : "#(" D ")" {{}}; - D : | D ''item''; '. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: '#(1)#(2 3 4)'. - self assert: node items size = 2. - self assert: node items first items size = 1. - self assert: node items last items size = 3 -] - -{ #category : #tests } -SmaCCEndToEndTest >> testSpecialCharacters [ - | parserCompiler maxValue | - [ String with: (Character value: 16rFF00) ] - on: Error - do: [ :ex | ^ self ]. "Unicode characters not supported" - maxValue := SmaCCGrammar maximumCharacterValue. - [ (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - '%unicode; - %ignorecase; - : \x3g \x20 \xFF \xFF1 \xFF00 \cC; - begin ::= {true};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self - assert: - (self parserClass - parse: - (String - withAll: - (#(3 103 16r20 16rFF 16rFF1 16rFF00 2) - collect: [ :each | Character value: each ]))) ] - ensure: [ SmaCCGrammar maximumCharacterValue: maxValue ] -] - -{ #category : #'tests-extended syntax' } -SmaCCEndToEndTest >> testStar [ - | parserCompiler node | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \d+; : \s+; - %root Parse ; %prefix Foo; %suffix Node; - Numbers : ''number'' ( "," ''comma'' ''number'' )* {{Parse}};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: '1,2,3,4,5,6'. - self assert: node class name asString = 'FooParseNode'. - self assert: node numbers size = 6. - self assert: node commas size = 5. - node := self parserClass parse: '1'. - self assert: node numbers size = 1. - self assert: node commas isEmpty -] - -{ #category : #tests } -SmaCCEndToEndTest >> testTimesRepeatRewriteBug [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator defaultCategory: self class category. - parserCompiler buildDefinition: ' : <<[^>]+>>; t : {true};'. - parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - self assert: (self parserClass parse: '<>') -] - -{ #category : #public } -SmaCCEndToEndTest >> testTokenCollection [ - | compiler node | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - ' : \s+; : (\` [^\`]* \`)+ ; - %root P; %glr; %prefix Foo; %suffix Node; - A : C B ''b'' C {{}}; - B : C {{}}; - C : "," ''comma''; '. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: ',,,'. - self assert: node b comma startPosition = 2. - self assert: node commas first startPosition = 1. - self assert: node commas last startPosition = 3. - self assert: node commas size = 2 -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testUnnamedCollectionSymbol [ - | compiler | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - ' : \d+; : \s+; - %root FooNode; - A : B {{FooANode}} ; - B : "b" ''b'' {{FooBNode}} | B "b" ''b'' {{FooBNode}} ;'. - self - assert: - ([ compiler compileInto: 'TestScanner' andParser: 'TestParser'. - false ] - on: SmaCCCompilationNotification - do: - [ :ex | - ('Node creation' = ex messageText and: [ '*>>>B<<<*' match: ex tag ]) - ifTrue: [ ex return: true ] - ifFalse: [ ex resume: nil ] ]) -] - -{ #category : #public } -SmaCCEndToEndTest >> testUnnamedNodeVariable [ - | compiler | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - '%glr; - : \d+; : \s+; - %root FooNode; - A : B D {{FooANode}}; - B : ''a'' ''b'' {{FooBNode}} | ; - D : ''c''; '. - self - assert: - ([ compiler compileInto: 'TestScanner' andParser: 'TestParser'. - false ] - on: SmaCCCompilationNotification - do: - [ :ex | - ('Node creation' = ex messageText and: [ '*>>>B<<<*' match: ex tag ]) - ifTrue: [ ex return: true ] - ifFalse: [ ex resume: nil ] ]) -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testUnnamedSymbol [ - | compiler | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - ' : \d+; : \s+; - %root FooNode; - A : B {{FooANode}} ; - B : "b" ''b'' {{FooBNode}} ;'. - self - assert: - ([ compiler compileInto: 'TestScanner' andParser: 'TestParser'. - false ] - on: SmaCCCompilationNotification - do: - [ :ex | - ('Node creation' = ex messageText and: [ '*>>>B<<<*' match: ex tag ]) - ifTrue: [ ex return: true ] - ifFalse: [ ex resume: nil ] ]) -] - -{ #category : #tests } -SmaCCEndToEndTest >> testUnusedSymbols [ - | parserCompiler | - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \w+ ; - : \s+ ; - %start Bar; - begin : Foo; - Foo : ; - Bar : Baz ; - Baz : "test" ;'. - self - assert: - ([ parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - true ] - on: SmaCCCompilationNotification - do: [ :ex | ex return: false ]). - (parserCompiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - parserCompiler - buildDefinition: - ' : \w+ ; - : \s+ ; - begin : Foo; - Foo : ; - Bar : Baz ; - Baz : "test" ;'. - self - assert: - ([ parserCompiler compileInto: 'TestScanner' andParser: 'TestParser'. - false ] - on: SmaCCCompilationNotification - do: [ :ex | ex return: true ]) -] - -{ #category : #'tests-parse tree creation' } -SmaCCEndToEndTest >> testUseWithoutClassDefinition [ - | compiler node | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - ' : \d+; : \s+; - %root FooNode; - A : ''left'' B ''operator'' ''right'' {{FooNode}} ; - B : C ; - C : "+" | "-" | "*" | "/" ;'. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: '1 + 3'. - self assert: node operator value = '+' -] - -{ #category : #public } -SmaCCEndToEndTest >> testVariableCollection [ - | compiler node | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - ' : \s+; : (\` [^\`]* \`)+ ; - %root P; %glr; %prefix Foo; %suffix Node; - A : B {{}}; - B : C | "d" ''d''; - C : "," ''comma''; '. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - node := self parserClass parse: ','. - self assert: node comma startPosition = 1. - self assert: node d isNil. - node := self parserClass parse: 'd'. - self assert: node comma isNil. - self assert: node d startPosition = 1 -] - -{ #category : #public } -SmaCCEndToEndTest >> testVariableCollectionType [ - | compiler | - (compiler := SmaCCGrammarCompiler new) codeGenerator - defaultCategory: self class category. - compiler - buildDefinition: - ' : \s+; - %root FooNode; - A : Commas {{FooANode}} ; - Commas : "," ''comma'' | Commas "," ''comma'' ;'. - compiler compileInto: 'TestScanner' andParser: 'TestParser'. - self - assert: - self parserClass basicNew symbolTypes asSet asSortedCollection asArray - = #(#FooANode #OrderedCollection #SmaCCErrorNode #SmaCCToken) -] diff --git a/src/SmaCC_Tests/SmaCCIntegerSetTest.class.st b/src/SmaCC_Tests/SmaCCIntegerSetTest.class.st deleted file mode 100644 index 2a2b57adb..000000000 --- a/src/SmaCC_Tests/SmaCCIntegerSetTest.class.st +++ /dev/null @@ -1,31 +0,0 @@ -Class { - #name : #SmaCCIntegerSetTest, - #superclass : #SmaCCBitCollectionTest, - #category : #'SmaCC_Tests' -} - -{ #category : #tests } -SmaCCIntegerSetTest >> testMergeBug [ - | a b | - a := SmaCCIntegerSet with: 1. - b := SmaCCIntegerSet with: 12000. - a addAll: b. - b - add: 12001; - add: 11999. - self assert: a size = 2 -] - -{ #category : #tests } -SmaCCIntegerSetTest >> testNegative [ - | collection | - collection := self newCollection. - collection add: 1. - collection add: -1. - collection add: -100000. - self assert: collection size = 3. - self assert: (collection includes: 1). - self assert: (collection includes: -1). - self assert: (collection includes: -100000). - self deny: (collection includes: 0) -] diff --git a/src/SmaCC_Tests/SmaCCStringTest.class.st b/src/SmaCC_Tests/SmaCCStringTest.class.st deleted file mode 100644 index 873d5d728..000000000 --- a/src/SmaCC_Tests/SmaCCStringTest.class.st +++ /dev/null @@ -1,260 +0,0 @@ -Class { - #name : #SmaCCStringTest, - #superclass : #TestCase, - #category : #'SmaCC_Tests' -} - -{ #category : #tests } -SmaCCStringTest >> testCombiningDeletedIntervals [ - | string intervalCount current | - string := SmaCCString on: '12345'. - #(3 2 4) do: [ :each | string deleteCharacter: each ]. - self assert: string asString = '15'. - intervalCount := 0. - current := (string instVarNamed: 'firstSentinel') next. - [ current isSentinel ] - whileFalse: [ intervalCount := intervalCount + 1. - current := current next ]. - self assert: intervalCount = 3 -] - -{ #category : #tests } -SmaCCStringTest >> testCopyFromTo [ - | string | - string := SmaCCString on: '1245'. - string insert: '3' at: 3. - self assert: (string copyFrom: 2 to: 3) asString = '234' -] - -{ #category : #tests } -SmaCCStringTest >> testDeleteAcrossInsert [ - | string | - string := SmaCCString on: '1233345'. - string insert: '234' at: 5. - string deleteFrom: 4 to: 5. - self assert: string asString = '12345' -] - -{ #category : #tests } -SmaCCStringTest >> testDeleteAcrossInserts [ - | string startIndex stopIndex | - string := SmaCCString on: '16'. - startIndex := string insert: '233' at: 2. - stopIndex := string insert: '445' at: 2. - string insert: 'asdf' at: stopIndex. - string deleteFrom: startIndex + 2 to: stopIndex. - self assert: string asString = '123456' -] - -{ #category : #tests } -SmaCCStringTest >> testDeleteAll [ - | string | - string := SmaCCString on: 'asdf'. - string deleteFrom: 1 to: 4. - self assert: string asString = '' -] - -{ #category : #tests } -SmaCCStringTest >> testDeleteFirst [ - | string | - string := SmaCCString on: 'asdf'. - string deleteFrom: 1 to: 1. - self assert: string asString = 'sdf' -] - -{ #category : #tests } -SmaCCStringTest >> testDeleteLast [ - | string | - string := SmaCCString on: 'asdf'. - string deleteFrom: 4 to: 4. - self assert: string asString = 'asd' -] - -{ #category : #tests } -SmaCCStringTest >> testDeleteUpTo [ - | string | - string := SmaCCString on: '123456'. - #(1 3) do: [ :each | string deleteCharacter: each ]. - string deleteUpTo: 5. - self assert: string asString = '56' -] - -{ #category : #tests } -SmaCCStringTest >> testDeleteUpToEnd [ - | string | - string := SmaCCString on: '123456'. - #(1 5) do: [ :each | string deleteCharacter: each ]. - string deleteUpToEnd: 3. - self assert: string asString = '2' -] - -{ #category : #tests } -SmaCCStringTest >> testDeleteWhitespaceBeforeAfter [ - | string | - string := SmaCCString on: '0 asdf 9'. - string deleteWhitespaceBeforeIndex: 4. - self assert: string asString = '0 asdf 9'. - string deleteWhitespaceAfterIndex: 4. - self assert: string asString = '0 asdf 9'. - string deleteWhitespaceBeforeIndex: 3. - self assert: string asString = '0asdf 9'. - string deleteWhitespaceAfterIndex: 6. - self assert: string asString = '0asdf9' -] - -{ #category : #tests } -SmaCCStringTest >> testDoubleInsertInMiddle [ - | string index | - string := SmaCCString on: '15'. - index := string insert: '24' at: 2. - string insert: '3' at: index + 1. - self assert: string asString = '12345' -] - -{ #category : #tests } -SmaCCStringTest >> testInsertAtBeginning [ - | string | - string := SmaCCString on: '12345'. - string insert: '0' at: 1. - self assert: string asString = '012345' -] - -{ #category : #tests } -SmaCCStringTest >> testInsertAtEnd [ - | string | - string := SmaCCString on: '12345'. - string insert: '6' at: 6. - self assert: string asString = '123456' -] - -{ #category : #tests } -SmaCCStringTest >> testInsertInMiddle [ - | string | - string := SmaCCString on: '1245'. - string insert: '3' at: 3. - self assert: string asString = '12345' -] - -{ #category : #tests } -SmaCCStringTest >> testInsertOnEmptyString [ - | string | - string := SmaCCString on: ''. - string insert: '123456' at: 1. - self assert: string asString = '123456' -] - -{ #category : #tests } -SmaCCStringTest >> testInsertWhitespace [ - | string | - string := SmaCCString - on: - '1' , (String with: Character cr with: Character lf) , '2' - , (String with: Character cr) , '3' , (String with: Character lf) - , '4' , (String with: Character lf) , (String with: Character cr) - , '5' , (String with: Character lf). - string addNewLineWhitespace: ' ' from: 1 to: string size. - self - assert: - string asString - = - ('1' , (String with: Character cr with: Character lf) , ' 2' - , (String with: Character cr) , ' 3' - , (String with: Character lf) , ' 4' - , (String with: Character lf) , ' ' - , (String with: Character cr) , ' 5' - , (String with: Character lf) , ' ') -] - -{ #category : #tests } -SmaCCStringTest >> testMoveAfter [ - | string | - string := SmaCCString on: '123456'. - string moveFrom: 1 to: 2 after: 3. - self assert: string asString = '312456'. - string deleteFrom: 1 to: 4. - self assert: string asString = '356'. - string := SmaCCString on: '123456'. - string moveFrom: 1 to: 3 after: 6. - self assert: string asString = '456123' -] - -{ #category : #tests } -SmaCCStringTest >> testMoveBefore [ - | string | - string := SmaCCString on: '123456'. - string moveFrom: 4 to: 6 before: 3. - self assert: string asString = '124563'. - string deleteFrom: 5 to: 5. - self assert: string asString = '12463'. - string := SmaCCString on: '123456'. - string moveFrom: 4 to: 6 before: 1. - self assert: string asString = '456123' -] - -{ #category : #tests } -SmaCCStringTest >> testMultipleDeleteAll [ - | string | - string := SmaCCString on: 'asdf'. - #(1 3 4 2) do: [ :each | string deleteCharacter: each ]. - self assert: string asString = '' -] - -{ #category : #tests } -SmaCCStringTest >> testMultipleDeleteWhitespaceAfter [ - | string | - string := SmaCCString on: '0 asdf 9'. - 6 to: 3 by: -1 do: - [ :i | - string - deleteWhitespaceAfterIndex: i; - deleteCharacter: i ]. - self assert: '0 9' = string asString -] - -{ #category : #tests } -SmaCCStringTest >> testMultipleDeleteWhitespaceBefore [ - | string | - string := SmaCCString on: '0 asdf 9'. - 3 to: 6 do: - [ :i | - string - deleteWhitespaceBeforeIndex: i; - deleteCharacter: i ]. - self assert: '0 9' = string asString -] - -{ #category : #tests } -SmaCCStringTest >> testMultipleInserts [ - | string | - string := SmaCCString on: '125'. - string insert: '3' at: 3. - string insert: '4' at: 3. - self assert: string asString = '12345' -] - -{ #category : #tests } -SmaCCStringTest >> testMultipleInsertsAndDeletes [ - | string indices last | - string := SmaCCString on: ''. - last := 0. - indices := (1 to: 5) - collect: [ :each | last := string insert: each printString , 'X' at: last + 1 ]. - string deleteFrom: last + 1 to: indices first + 1. - self assert: string asString = '12345' -] - -{ #category : #tests } -SmaCCStringTest >> testNoEdits [ - | string | - string := SmaCCString on: 'asdf'. - self assert: string asString = 'asdf' -] - -{ #category : #tests } -SmaCCStringTest >> testReplaceInserted [ - | string index | - string := SmaCCString on: '1245'. - index := string insert: 'x' at: 3. - string replaceFrom: index to: index with: '3'. - self assert: string asString = '12345' -] diff --git a/src/SmaCC_Tests/package.st b/src/SmaCC_Tests/package.st deleted file mode 100644 index 1a9960c77..000000000 --- a/src/SmaCC_Tests/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'SmaCC_Tests' } diff --git a/src/StateSpecs-DSL-ClassWords-Tests/SpecOfDSLClassWordsTests.class.st b/src/StateSpecs-DSL-ClassWords-Tests/SpecOfDSLClassWordsTests.class.st deleted file mode 100644 index db59ba8bd..000000000 --- a/src/StateSpecs-DSL-ClassWords-Tests/SpecOfDSLClassWordsTests.class.st +++ /dev/null @@ -1,198 +0,0 @@ -Class { - #name : #SpecOfDSLClassWordsTests, - #superclass : #TestCase, - #category : 'StateSpecs-DSL-ClassWords-Tests' -} - -{ #category : #tests } -SpecOfDSLClassWordsTests >> testContainingItem [ - | spec | - spec := Containing item: #collectionItem. - self assert: spec class = SpecOfCollectionContents. - self assert: spec requiredItem requiredValue == #collectionItem. -] - -{ #category : #tests } -SpecOfDSLClassWordsTests >> testContainingItemAtKey [ - | spec | - spec := Containing item: #item at: #key. - self assert: spec class = SpecOfCollectionItem. - self assert: spec containingKey == #key. - self assert: spec requiredItem class = #item asStateSpec class. - self assert: spec requiredItem requiredValue = #item. -] - -{ #category : #tests } -SpecOfDSLClassWordsTests >> testContainingKey [ - | spec | - spec := Containing key: #collectionKey. - self assert: spec class = SpecOfDictionaryKeys. - self assert: spec requiredKey == #collectionKey -] - -{ #category : #tests } -SpecOfDSLClassWordsTests >> testEqual [ - | spec | - spec := Equal to: #some. - self assert: spec class = SpecOfEquality. - self assert: spec requiredValue == #some -] - -{ #category : #tests } -SpecOfDSLClassWordsTests >> testEqualInSameOrder [ - | spec | - spec := Equal inSameOrderTo: #(1 2 3). - self assert: spec class = SpecOfCollectionOrderedEquality. - self assert: spec requiredValue == #(1 2 3) -] - -{ #category : #tests } -SpecOfDSLClassWordsTests >> testEqualWithin [ - | spec | - spec := Equal to: #someValue within: #accuracy. - self assert: spec class = SpecOfApproxEquality. - self assert: spec requiredValue == #someValue. - self assert: spec accuracy == #accuracy -] - -{ #category : #tests } -SpecOfDSLClassWordsTests >> testGreaterThan [ - | spec | - spec := Greater than: #number. - self assert: spec class = SpecOfGreaterMagnitude. - self assert: spec requiredValue == #number. - self assert: spec isStrong -] - -{ #category : #tests } -SpecOfDSLClassWordsTests >> testHasEmptyItems [ - | spec | - spec := Has emptyItems. - self assert: spec class = SpecOfCollectionSize. - self assert: spec requiredSize = 0 -] - -{ #category : #tests } -SpecOfDSLClassWordsTests >> testHasSize [ - | spec | - spec := Has size: #number. - self assert: spec class = SpecOfCollectionSize. - self assert: spec requiredSize == #number -] - -{ #category : #tests } -SpecOfDSLClassWordsTests >> testIdentical [ - | spec | - spec := Identical to: #some. - self assert: spec class = SpecOfIdentity. - self assert: spec requiredValue == #some -] - -{ #category : #tests } -SpecOfDSLClassWordsTests >> testInstance [ - | spec | - spec := Instance of: #someClass. - self assert: spec class = SpecOfObjectClass. - self assert: spec requiredClass == #someClass -] - -{ #category : #tests } -SpecOfDSLClassWordsTests >> testKind [ - | spec | - spec := Kind of: #someClass. - self assert: spec class = SpecOfObjectSuperclass. - self assert: spec requiredClass == #someClass -] - -{ #category : #tests } -SpecOfDSLClassWordsTests >> testLessThan [ - | spec | - spec := Less than: #number. - self assert: spec class = SpecOfLesserMagnitude. - self assert: spec requiredValue == #number. - self assert: spec isStrong -] - -{ #category : #tests } -SpecOfDSLClassWordsTests >> testRespond [ - | spec | - spec := Respond to: #selector. - self assert: spec class = SpecOfObjectResponsibility. - self assert: spec requiredMessage == #selector -] - -{ #category : #tests } -SpecOfDSLClassWordsTests >> testSatisfying [ - | spec | - spec := Satisfying for: #block. - self assert: spec class = SpecOfObjectStateByPredicate. - self assert: spec predicate == #block -] - -{ #category : #tests } -SpecOfDSLClassWordsTests >> testStringMatchingCaseSensitiveRegex [ - | spec | - spec := String matchingCaseSensitiveRegex: 'test'. - self assert: spec class = SpecOfStringRegex. - self assert: spec requiredValue = 'test'. - self assert: spec caseSensitive -] - -{ #category : #tests } -SpecOfDSLClassWordsTests >> testStringMatchingRegex [ - | spec | - spec := String matchingRegex: 'test'. - self assert: spec class = SpecOfStringRegex. - self assert: spec requiredValue = 'test' -] - -{ #category : #tests } -SpecOfDSLClassWordsTests >> testStringWithBeginning [ - | spec | - spec := String withBeginning: 'test'. - self assert: spec class = SpecOfStringBeginning. - self assert: spec requiredValue = 'test' -] - -{ #category : #tests } -SpecOfDSLClassWordsTests >> testStringWithCaseSensitiveBeginning [ - | spec | - spec := String withCaseSensitiveBeginning: 'test'. - self assert: spec class = SpecOfStringBeginning. - self assert: spec requiredValue = 'test'. - self assert: spec caseSensitive -] - -{ #category : #tests } -SpecOfDSLClassWordsTests >> testStringWithCaseSensitiveEnding [ - | spec | - spec := String withCaseSensitiveEnding: 'test'. - self assert: spec class = SpecOfStringEnding. - self assert: spec requiredValue = 'test'. - self assert: spec caseSensitive -] - -{ #category : #tests } -SpecOfDSLClassWordsTests >> testStringWithCaseSensitiveSubstring [ - | spec | - spec := String withCaseSensitiveSubstring: 'test'. - self assert: spec class = SpecOfSubstring. - self assert: spec requiredValue = 'test'. - self assert: spec caseSensitive -] - -{ #category : #tests } -SpecOfDSLClassWordsTests >> testStringWithEnding [ - | spec | - spec := String withEnding: 'test'. - self assert: spec class = SpecOfStringEnding. - self assert: spec requiredValue = 'test' -] - -{ #category : #tests } -SpecOfDSLClassWordsTests >> testStringWithSubstring [ - | spec | - spec := String withSubstring: 'test'. - self assert: spec class = SpecOfSubstring. - self assert: spec requiredValue = 'test' -] diff --git a/src/StateSpecs-DSL-ClassWords-Tests/package.st b/src/StateSpecs-DSL-ClassWords-Tests/package.st deleted file mode 100644 index 48c8d4584..000000000 --- a/src/StateSpecs-DSL-ClassWords-Tests/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'StateSpecs-DSL-ClassWords-Tests' } diff --git a/src/StateSpecs-DSL-ClassWords/Containing.class.st b/src/StateSpecs-DSL-ClassWords/Containing.class.st deleted file mode 100644 index 62ee43384..000000000 --- a/src/StateSpecs-DSL-ClassWords/Containing.class.st +++ /dev/null @@ -1,25 +0,0 @@ -" -I am DSL word for better syntax for specs creation sentences. - -Look at class side -" -Class { - #name : #Containing, - #superclass : #SpecOfDSLClassWords, - #category : 'StateSpecs-DSL-ClassWords' -} - -{ #category : #'specs creation' } -Containing class >> item: anObjectOrSpec [ - ^SpecOfCollectionContents requiredItem: anObjectOrSpec -] - -{ #category : #'specs creation' } -Containing class >> item: itemObject at: keyObject [ - ^SpecOfCollectionItem at: keyObject requiredItem: itemObject -] - -{ #category : #'specs creation' } -Containing class >> key: anObject [ - ^SpecOfDictionaryKeys requiredKey: anObject -] diff --git a/src/StateSpecs-DSL-ClassWords/Equal.class.st b/src/StateSpecs-DSL-ClassWords/Equal.class.st deleted file mode 100644 index 202753321..000000000 --- a/src/StateSpecs-DSL-ClassWords/Equal.class.st +++ /dev/null @@ -1,25 +0,0 @@ -" -I am DSL word for better syntax for specs creation sentences. - -Look at class side -" -Class { - #name : #Equal, - #superclass : #SpecOfDSLClassWords, - #category : 'StateSpecs-DSL-ClassWords' -} - -{ #category : #'specs creation' } -Equal class >> inSameOrderTo: anObject [ - ^SpecOfCollectionOrderedEquality requiredValue: anObject -] - -{ #category : #'specs creation' } -Equal class >> to: anObject [ - ^SpecOfEquality requiredValue: anObject -] - -{ #category : #'specs creation' } -Equal class >> to: aNumber within: accuracyNumber [ - ^SpecOfApproxEquality to: aNumber within: accuracyNumber -] diff --git a/src/StateSpecs-DSL-ClassWords/Greater.class.st b/src/StateSpecs-DSL-ClassWords/Greater.class.st deleted file mode 100644 index c1ed3e6ba..000000000 --- a/src/StateSpecs-DSL-ClassWords/Greater.class.st +++ /dev/null @@ -1,20 +0,0 @@ -" -I am DSL word for better syntax for specs creation sentences. - -Look at class side -" -Class { - #name : #Greater, - #superclass : #SpecOfDSLClassWords, - #category : 'StateSpecs-DSL-ClassWords' -} - -{ #category : #'specs creation' } -Greater class >> orEqualThan: anObject [ - ^SpecOfGreaterMagnitude strong: false pattern: anObject -] - -{ #category : #'specs creation' } -Greater class >> than: anObject [ - ^SpecOfGreaterMagnitude than: anObject strong: true -] diff --git a/src/StateSpecs-DSL-ClassWords/Has.class.st b/src/StateSpecs-DSL-ClassWords/Has.class.st deleted file mode 100644 index 640d9defa..000000000 --- a/src/StateSpecs-DSL-ClassWords/Has.class.st +++ /dev/null @@ -1,20 +0,0 @@ -" -I am DSL word for better syntax for specs creation sentences. - -Look at class side -" -Class { - #name : #Has, - #superclass : #SpecOfDSLClassWords, - #category : 'StateSpecs-DSL-ClassWords' -} - -{ #category : #'specs creation' } -Has class >> emptyItems [ - ^SpecOfCollectionSize requiredSize: 0 -] - -{ #category : #'specs creation' } -Has class >> size: aNumber [ - ^SpecOfCollectionSize requiredSize: aNumber -] diff --git a/src/StateSpecs-DSL-ClassWords/Identical.class.st b/src/StateSpecs-DSL-ClassWords/Identical.class.st deleted file mode 100644 index 1705fdbf9..000000000 --- a/src/StateSpecs-DSL-ClassWords/Identical.class.st +++ /dev/null @@ -1,15 +0,0 @@ -" -I am DSL word for better syntax for specs creation sentences. - -Look at class side -" -Class { - #name : #Identical, - #superclass : #SpecOfDSLClassWords, - #category : 'StateSpecs-DSL-ClassWords' -} - -{ #category : #'specs creation' } -Identical class >> to: anObject [ - ^SpecOfIdentity requiredValue: anObject -] diff --git a/src/StateSpecs-DSL-ClassWords/Instance.class.st b/src/StateSpecs-DSL-ClassWords/Instance.class.st deleted file mode 100644 index 6301db3fb..000000000 --- a/src/StateSpecs-DSL-ClassWords/Instance.class.st +++ /dev/null @@ -1,15 +0,0 @@ -" -I am DSL word for better syntax for specs creation sentences. - -Look at class side -" -Class { - #name : #Instance, - #superclass : #SpecOfDSLClassWords, - #category : 'StateSpecs-DSL-ClassWords' -} - -{ #category : #'specs creation' } -Instance class >> of: aClass [ - ^SpecOfObjectClass requiredClass: aClass -] diff --git a/src/StateSpecs-DSL-ClassWords/Kind.class.st b/src/StateSpecs-DSL-ClassWords/Kind.class.st deleted file mode 100644 index 255580e73..000000000 --- a/src/StateSpecs-DSL-ClassWords/Kind.class.st +++ /dev/null @@ -1,15 +0,0 @@ -" -I am DSL word for better syntax for specs creation sentences. - -Look at class side -" -Class { - #name : #Kind, - #superclass : #SpecOfDSLClassWords, - #category : 'StateSpecs-DSL-ClassWords' -} - -{ #category : #'specs creation' } -Kind class >> of: aClass [ - ^SpecOfObjectSuperclass requiredClass: aClass -] diff --git a/src/StateSpecs-DSL-ClassWords/Less.class.st b/src/StateSpecs-DSL-ClassWords/Less.class.st deleted file mode 100644 index 298492925..000000000 --- a/src/StateSpecs-DSL-ClassWords/Less.class.st +++ /dev/null @@ -1,20 +0,0 @@ -" -I am DSL word for better syntax for specs creation sentences. - -Look at class side -" -Class { - #name : #Less, - #superclass : #SpecOfDSLClassWords, - #category : 'StateSpecs-DSL-ClassWords' -} - -{ #category : #'specs creation' } -Less class >> orEqualThan: anObject [ - ^SpecOfLesserMagnitude strong: false pattern: anObject -] - -{ #category : #'specs creation' } -Less class >> than: anObject [ - ^SpecOfLesserMagnitude than: anObject strong: true -] diff --git a/src/StateSpecs-DSL-ClassWords/Raise.class.st b/src/StateSpecs-DSL-ClassWords/Raise.class.st deleted file mode 100644 index d8477a91b..000000000 --- a/src/StateSpecs-DSL-ClassWords/Raise.class.st +++ /dev/null @@ -1,20 +0,0 @@ -" -I am DSL word for better syntax for specs creation sentences. - -Look at class side -" -Class { - #name : #Raise, - #superclass : #SpecOfDSLClassWords, - #category : 'StateSpecs-DSL-ClassWords' -} - -{ #category : #'specs creation' } -Raise class >> error [ - ^self exception: (Kind of: Error) -] - -{ #category : #'specs creation' } -Raise class >> exception: aClass [ - ^SpecOfBlockFailure requiredFailure: aClass -] diff --git a/src/StateSpecs-DSL-ClassWords/Respond.class.st b/src/StateSpecs-DSL-ClassWords/Respond.class.st deleted file mode 100644 index 942ee2137..000000000 --- a/src/StateSpecs-DSL-ClassWords/Respond.class.st +++ /dev/null @@ -1,15 +0,0 @@ -" -I am DSL word for better syntax for specs creation sentences. - -Look at class side -" -Class { - #name : #Respond, - #superclass : #SpecOfDSLClassWords, - #category : 'StateSpecs-DSL-ClassWords' -} - -{ #category : #'specs creation' } -Respond class >> to: aSelector [ - ^SpecOfObjectResponsibility for: aSelector -] diff --git a/src/StateSpecs-DSL-ClassWords/Satisfying.class.st b/src/StateSpecs-DSL-ClassWords/Satisfying.class.st deleted file mode 100644 index 7b1623b3a..000000000 --- a/src/StateSpecs-DSL-ClassWords/Satisfying.class.st +++ /dev/null @@ -1,15 +0,0 @@ -" -I am DSL word for better syntax for specs creation sentences. - -Look at class side -" -Class { - #name : #Satisfying, - #superclass : #SpecOfDSLClassWords, - #category : 'StateSpecs-DSL-ClassWords' -} - -{ #category : #'specs creation' } -Satisfying class >> for: aBlockContext [ - ^SpecOfObjectStateByPredicate from: aBlockContext -] diff --git a/src/StateSpecs-DSL-ClassWords/SpecOfDSLClassWords.class.st b/src/StateSpecs-DSL-ClassWords/SpecOfDSLClassWords.class.st deleted file mode 100644 index 290fcaace..000000000 --- a/src/StateSpecs-DSL-ClassWords/SpecOfDSLClassWords.class.st +++ /dev/null @@ -1,12 +0,0 @@ -" -I am created to group all DSL words in one hierarchy. -My subclasses only provide better syntax of specs creation sentences. -They can define multiple methods to return different kind of specs. - -Everything are implemented on class side -" -Class { - #name : #SpecOfDSLClassWords, - #superclass : #Object, - #category : 'StateSpecs-DSL-ClassWords' -} diff --git a/src/StateSpecs-DSL-ClassWords/String.extension.st b/src/StateSpecs-DSL-ClassWords/String.extension.st deleted file mode 100644 index 1af0c7de2..000000000 --- a/src/StateSpecs-DSL-ClassWords/String.extension.st +++ /dev/null @@ -1,50 +0,0 @@ -Extension { #name : #String } - -{ #category : #'*StateSpecs-DSL-ClassWords' } -String class >> matchingCaseSensitiveRegex: requiredString [ - - ^SpecOfStringRegex requiredValue: requiredString caseSensitive: true -] - -{ #category : #'*StateSpecs-DSL-ClassWords' } -String class >> matchingRegex: requiredString [ - - ^SpecOfStringRegex requiredValue: requiredString -] - -{ #category : #'*StateSpecs-DSL-ClassWords' } -String class >> withBeginning: requiredString [ - - ^SpecOfStringBeginning requiredValue: requiredString -] - -{ #category : #'*StateSpecs-DSL-ClassWords' } -String class >> withCaseSensitiveBeginning: requiredString [ - - ^SpecOfStringBeginning requiredValue: requiredString caseSensitive: true -] - -{ #category : #'*StateSpecs-DSL-ClassWords' } -String class >> withCaseSensitiveEnding: requiredString [ - - ^SpecOfStringEnding requiredValue: requiredString caseSensitive: true -] - -{ #category : #'*StateSpecs-DSL-ClassWords' } -String class >> withCaseSensitiveSubstring: requiredString [ - - ^SpecOfSubstring requiredValue: requiredString caseSensitive: true -] - -{ #category : #'*StateSpecs-DSL-ClassWords' } -String class >> withEnding: requiredString [ - - ^SpecOfStringEnding requiredValue: requiredString -] - -{ #category : #'*StateSpecs-DSL-ClassWords' } -String class >> withSubstring: requiredString [ - - ^SpecOfSubstring requiredValue: requiredString - -] diff --git a/src/StateSpecs-DSL-ClassWords/package.st b/src/StateSpecs-DSL-ClassWords/package.st deleted file mode 100644 index 9e61f6883..000000000 --- a/src/StateSpecs-DSL-ClassWords/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'StateSpecs-DSL-ClassWords' } diff --git a/src/StateSpecs-DSL-ShouldExpressions-Tests/SpecOfShouldExpressionTests.class.st b/src/StateSpecs-DSL-ShouldExpressions-Tests/SpecOfShouldExpressionTests.class.st deleted file mode 100644 index 52affc441..000000000 --- a/src/StateSpecs-DSL-ShouldExpressions-Tests/SpecOfShouldExpressionTests.class.st +++ /dev/null @@ -1,416 +0,0 @@ -Class { - #name : #SpecOfShouldExpressionTests, - #superclass : #TestCase, - #category : 'StateSpecs-DSL-ShouldExpressions-Tests' -} - -{ #category : #tests } -SpecOfShouldExpressionTests >> customTestForArbitraryBlock [ - - - 5 should satisfy: [:num | num < 0] - - "5 should satisfy: [:num | num > 0]" -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testBeBooleanProperty [ - self shouldnt: [#() should be isEmpty] raise: SpecOfFailed. - self should: [#(1 2) should be isEmpty] raise: SpecOfFailed. - - self should: [#() should not be isEmpty] raise: SpecOfFailed. - self shouldnt: [#(1 2) should not be isEmpty] raise: SpecOfFailed. - - self shouldnt: [10 should be between: 1 and: 50] raise: SpecOfFailed. - self should: [10 should be between: 1 and: 2] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testBeBooleanPropertyDescription [ - - | errorMessage | - [#(1 2) should be isEmpty] on: SpecOfFailed do: [:err | - errorMessage := err messageText]. - - self assert: errorMessage equals: '#(1 2) should be isEmpty' -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testBeBooleanPropertyDescriptionWhenNegationExists [ - - | errorMessage | - [#() should not be isEmpty] on: SpecOfFailed do: [:err | - errorMessage := err messageText]. - - self assert: errorMessage equals: '#() should not be isEmpty' -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testCollectionEquality [ - self shouldnt: [#(1 2 3) should equal: #(1 2 3)] raise: SpecOfFailed. - self shouldnt: [#(2 1 3) should equal: #(1 2 3)] raise: SpecOfFailed. - self should: [#(1 2) should equal: #(1 2 3)] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testCollectionIncludesItem [ - self shouldnt: [#(10 20) should include: 10] raise: SpecOfFailed. - self should: [#(10 20) should include: 15] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testCollectionItem [ - | subject | - subject := (Dictionary new) - add: 1 -> 2; - add: 3 -> 4; - yourself. - self shouldnt: [subject should include: 2 at: 1] raise: SpecOfFailed. - self should: [subject should include: 100 at: 3] raise: SpecOfFailed. - self should: [subject should include: 2 at: 300] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testCollectionOrderedEquality [ - self shouldnt: [#(1 2 3) should equalInOrder: #(1 2 3)] raise: SpecOfFailed. - self should: [#(2 1 3) should equalInOrder: #(1 2 3)] raise: SpecOfFailed. - self should: [#(1 2) should equalInOrder: #(1 2 3)] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testCollectionSize [ - self shouldnt: [#(10 20) should haveSize: 2] raise: SpecOfFailed. - self should: [#(10 20) should haveSize: 3] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testCreationFromObject [ - | subject result | - subject := Object new. - result := subject should. - self assert: (result isKindOf: SpecOfShouldExpression). - self assert: result receiver == subject -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testDictionaryIncludesKey [ - | subject | - subject := (Dictionary new) - add: 1 -> 2; - add: 3 -> 4; - yourself. - self shouldnt: [subject should includeKey: 1] raise: SpecOfFailed. - self should: [subject should includeKey: 2] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testFloatEquality [ - - self deny: 0.1 + 0.2 = 0.3. - self shouldnt: [(0.1 + 0.2) should equal: 0.3 ] raise: SpecOfFailed. - self deny: 0.1 + 0.2 * 10 = 3. - self shouldnt: [(0.1 + 0.2 * 10) should equal: 3 ] raise: SpecOfFailed. - - self shouldnt: [10.0 should equal: 10 ] raise: SpecOfFailed. - self shouldnt: [0.0 should equal: 0] raise: SpecOfFailed. - self should: [(0.1 + 0.2) should equal: 0.31] raise: SpecOfFailed. - self should: [0.1 should equal: Object new] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testGreaterThan [ - self shouldnt: [5 should beGreaterThan: 4] raise: SpecOfFailed. - self should: [5 should beGreaterThan: 5] raise: SpecOfFailed. - self should: [5 should beGreaterThan: 6] raise: SpecOfFailed. - - self shouldnt: [5 should beGreaterOrEqualThan: 4] raise: SpecOfFailed. - self shouldnt: [5 should beGreaterOrEqualThan: 5] raise: SpecOfFailed. - self should: [5 should beGreaterOrEqualThan: 6] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testInstanceOfClass [ - self shouldnt: [5 should beInstanceOf: SmallInteger] raise: SpecOfFailed. - self should: [-5 should beInstanceOf: Integer] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testKindOfClass [ - self shouldnt: [5 should beKindOf: Integer] raise: SpecOfFailed. - self should: [5.0 should beKindOf: Integer] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testLessThan [ - self shouldnt: [5 should beLessThan: 6] raise: SpecOfFailed. - self should: [5 should beLessThan: 5] raise: SpecOfFailed. - self should: [5 should beLessThan: 3] raise: SpecOfFailed. - - self shouldnt: [5 should beLessOrEqualThan: 6] raise: SpecOfFailed. - self shouldnt: [5 should beLessOrEqualThan: 5] raise: SpecOfFailed. - self should: [5 should beLessOrEqualThan: 4] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testNumberEquality [ - - self deny: 3 = (0.1 + 0.2 * 10). - self shouldnt: [3 should equal: 0.1 + 0.2 * 10] raise: SpecOfFailed. - - self shouldnt: [3 should equal: 3] raise: SpecOfFailed. - self shouldnt: [10 should equal: 10.0 ] raise: SpecOfFailed. - self shouldnt: [0 should equal: 0.0] raise: SpecOfFailed. - - self should: [3 should equal: 3.001] raise: SpecOfFailed. - self should: [3 should equal: Object new] raise: SpecOfFailed. - - - -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testNumberFloatingComparison [ - self shouldnt: [11 should equal: 10 within: 2 ] raise: SpecOfFailed. - self should: [11 should equal: 10 within: 0.5] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testObjectsEquality [ - self shouldnt: ['some' should equal: 'some'] raise: SpecOfFailed. - self should: ['some' should equal: 'other'] raise: SpecOfFailed. - self shouldnt: [5 should not equal: 6] raise: SpecOfFailed. - self should: [5 should not equal: 5] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testObjectsEqualityWithFailureDescription [ - | errorDescription | - self shouldnt: [5 should equal: 5 description: 'anything good here'] raise: SpecOfFailed. - - ['some' should equal: 'other' description: 'it should fail here'] on: SpecOfFailed do: [:err | - errorDescription := err messageText]. - - self assert: errorDescription equals: 'it should fail here'. -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testObjectsIdentity [ - self shouldnt: [5 should be: 5] raise: SpecOfFailed. - self should: ['asd' should be: 'asd' copy] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testObjectsIdentityWithFailureDescription [ - | errorDescription | - self shouldnt: [5 should be: 5 description: 'anything good here'] raise: SpecOfFailed. - - ['some' should be: 'other' description: 'it should fail here'] on: SpecOfFailed do: [:err | - errorDescription := err messageText]. - - self assert: errorDescription equals: 'it should fail here' -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testOrderedCollectionEquality [ - self shouldnt: [#(1 2 3) asOrderedCollection should equal: #(1 2 3)] raise: SpecOfFailed. - self should: [#(1 2 3) asOrderedCollection should equal: #(5 4)] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testPointEquality [ - - self deny: 0.1 + 0.2 @ 0.1 = (0.3 @ 0.1). - self shouldnt: [(0.1 + 0.2 @ 0.1) should equal: 0.3 @ 0.1] raise: SpecOfFailed. - - self should: [(0.1 + 0.2 @ 0.1) should equal: 0.301 @ 0.1] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testPointFloatingComparison [ - self shouldnt: [(0.7 @ 0.7) should equal: 0 @ 0 within: 1] - raise: SpecOfFailed. - self should: [(0.8 @ 0.8) should equal: 0 @ 0 within: 1] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testPropertyBuilderPrinting [ - - | propertyBuilder actual | - propertyBuilder := (10@20) where x. - - actual := propertyBuilder printString. - - self assert: actual equals: 'Got "10" from (10@20) x' -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testPropertyValidation [ - self shouldnt: [(10@20) where x] raise: SpecOfFailed. - self should: [10 where x] raise: MessageNotUnderstood. - - self shouldnt: [(10@20) where x should equal: 10] raise: SpecOfFailed. - self shouldnt: [(10@(20@40)) where y x should equal: 20] raise: SpecOfFailed. - - self should: [(10@20) where x should equal: 50] raise: SpecOfFailed. -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testPropertyValidationFailureDescription [ - - | errorMessage | - [(10 @ 20) where x should equal: 30] on: SpecOfFailed do: [:err | - errorMessage := err messageText]. - - self assert: errorMessage equals: 'Got "10" from (10@20) x but it should equal "30"' -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testPropertyValueValidation [ - - self shouldnt: [10 where value should be: 10] raise: SpecOfFailed. - self should: [10 where value should be: 20] raise: SpecOfFailed. -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testPropertyWithArgsValidationFailureDescription [ - - | errorMessage | - [((0 @ 1) where distanceTo: (0@2)) should equal: 30] on: SpecOfFailed do: [:err | - errorMessage := err messageText]. - - self assert: errorMessage equals: 'Got "1" from (0@1) distanceTo: (0@2) but it should equal "30"' -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testPropertyWithBooleanSubPropertyValidation [ - - self shouldnt: [#(first #()) where second should be isEmpty] raise: SpecOfFailed. - self should: [#(first #(1 2)) where second should be isEmpty] raise: SpecOfFailed. - - [#(first #(1 2)) where second should be isEmpty] on: SpecOfFailed do: [:err | - self assert: err messageText equals: 'Got "#(1 2)" from #(#first #(1 2)) second but it should be isEmpty' - ]. -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testPropertyWithBooleanSubPropertyValidationWhenSpecWithDenial [ - - self should: [#(first #()) where second should not be isEmpty] raise: SpecOfFailed. - - [#(first #()) where second should not be isEmpty] on: SpecOfFailed do: [:err | - self assert: err messageText equals: 'Got "#()" from #(#first #()) second but it should not be isEmpty' - ]. -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testRaisingExeption [ - self shouldnt: [[1 / 0] should raise: ZeroDivide] raise: SpecOfFailed. - self should: [[1 / 0] should raise: Error] raise: SpecOfFailed. - self should: [[1 / 3] should raise: ZeroDivide] raise: SpecOfFailed. - self shouldnt: [[1 / 0] should fail] raise: SpecOfFailed. - self should: [[1 / 3] should fail] raise: SpecOfFailed. - self shouldnt: [[1 / 1] should not raise: ZeroDivide] raise: SpecOfFailed. - self should: [[1 / 0] should not raise: ZeroDivide] raise: SpecOfFailed. - - self shouldnt: [[1 someMessage] should raise: MessageNotUnderstood] raise: SpecOfFailed. - self shouldnt: [[1 should be: 2] should raise: SpecOfFailed] raise: SpecOfFailed. -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testRespondToMessage [ - self shouldnt: [5 should respondTo: #+] raise: SpecOfFailed. - self should: [Object new should respondTo: #+] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testReturningValidationResults [ - | results | - results := [ - { - true should be: true. - 42 should be: 'answer to life'. - 42 where even should be: true. - [ 1/0 ] should raise: ZeroDivide. - [ false should be: true ] should raise: SpecOfFailed - } - ] on: SpecOfFailed do: #resume. - - results size should be: 5. - (results at: 1) should be isSuccess. - (results at: 2) should be isFailure. - (results at: 3) should be isSuccess. - (results at: 4) should be isSuccess. - (results at: 5) should be isSuccess - -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testSatisfyingBlock [ - self shouldnt: [5 should satisfy: [:num | num > 0]] raise: SpecOfFailed. - self should: [-5 should satisfy: [:num | num > 0]] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testStringBeginsWithPrefix [ - self shouldnt: ['test string' should beginWith: 'test'] raise: SpecOfFailed. - self shouldnt: ['test string' should beginWith: 'Test'] raise: SpecOfFailed. - self should: ['some test string' should beginWith: 'test'] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testStringBeginsWithPrefixCaseSensitive [ - self shouldnt: ['test string' should beginWith: 'test' caseSensitive: true] raise: SpecOfFailed. - self should: ['test string' should beginWith: 'Test' caseSensitive: true] raise: SpecOfFailed. - self should: ['some test string' should beginWith: 'test' caseSensitive: true] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testStringEndsWithSuffix [ - self shouldnt: ['string test' should endWith: 'test'] raise: SpecOfFailed. - self shouldnt: ['string test' should endWith: 'Test'] raise: SpecOfFailed. - self should: ['some test string' should endWith: 'test'] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testStringEndsWithSuffixCaseSensitive [ - self shouldnt: ['string test' should endWith: 'test' caseSensitive: true] raise: SpecOfFailed. - self should: ['string test' should endWith: 'Test' caseSensitive: true] raise: SpecOfFailed. - self should: ['some test string' should endWith: 'test' caseSensitive: true] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testStringEquality [ - self shouldnt: ['some' should equal: 'some'] raise: SpecOfFailed. - self should: ['1234' should equal: '1324'] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testStringIncludesSubstring [ - self shouldnt: ['some test string' should includeSubstring: 'test'] raise: SpecOfFailed. - self shouldnt: ['some test string' should includeSubstring: 'Test'] raise: SpecOfFailed. - self should: ['some string' should includeSubstring: 'test'] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testStringIncludesSubstringCaseSensitive [ - self shouldnt: [ - 'some test string' should includeSubstring: 'test' caseSensitive: true] raise: SpecOfFailed. - self should: [ - 'some test string' should includeSubstring: 'Test' caseSensitive: true] raise: SpecOfFailed. - self should: [ - 'some string' should includeSubstring: 'test' caseSensitive: true] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testStringMatchesWithRegex [ - self shouldnt: ['test string' should matchRegex: '^test'] raise: SpecOfFailed. - self shouldnt: ['test string' should matchRegex: '^Test'] raise: SpecOfFailed. - self should: ['some test string' should matchRegex: '^test'] raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfShouldExpressionTests >> testStringMatchesWithRegexCaseSensitive [ - self shouldnt: ['test string' should matchRegex: '^test' caseSensitive: true] raise: SpecOfFailed. - self should: ['test string' should matchRegex: '^Test' caseSensitive: true] raise: SpecOfFailed. - self should: ['some test string' should matchRegex: '^test' caseSensitive: true] raise: SpecOfFailed -] diff --git a/src/StateSpecs-DSL-ShouldExpressions-Tests/package.st b/src/StateSpecs-DSL-ShouldExpressions-Tests/package.st deleted file mode 100644 index 0b9359c75..000000000 --- a/src/StateSpecs-DSL-ShouldExpressions-Tests/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'StateSpecs-DSL-ShouldExpressions-Tests' } diff --git a/src/StateSpecs-DSL-ShouldExpressions/Object.extension.st b/src/StateSpecs-DSL-ShouldExpressions/Object.extension.st deleted file mode 100644 index 567372881..000000000 --- a/src/StateSpecs-DSL-ShouldExpressions/Object.extension.st +++ /dev/null @@ -1,11 +0,0 @@ -Extension { #name : #Object } - -{ #category : #'*StateSpecs-DSL-ShouldExpressions' } -Object >> should [ - ^SpecOfShouldExpression startingAt: self -] - -{ #category : #'*StateSpecs-DSL-ShouldExpressions' } -Object >> where [ - ^SpecOfObjectPropertyBuilder for: self -] diff --git a/src/StateSpecs-DSL-ShouldExpressions/SpecOfBooleanPropertyValidator.class.st b/src/StateSpecs-DSL-ShouldExpressions/SpecOfBooleanPropertyValidator.class.st deleted file mode 100644 index 644192ff3..000000000 --- a/src/StateSpecs-DSL-ShouldExpressions/SpecOfBooleanPropertyValidator.class.st +++ /dev/null @@ -1,73 +0,0 @@ -" -I implement validation of boolean properties of particular object. I am returned from expression - 2 should be -And then any message to me will produce SpecOfBooleanProperty which I will use to validate my subject: - 2 should be even. - 2 should not be even. - 1 should be even - -Internal Representation and Key Implementation Points. - - Instance Variables - subject: - withNegation: -" -Class { - #name : #SpecOfBooleanPropertyValidator, - #superclass : #Object, - #instVars : [ - 'subject', - 'withNegation' - ], - #category : 'StateSpecs-DSL-ShouldExpressions' -} - -{ #category : #'instance creation' } -SpecOfBooleanPropertyValidator class >> for: anObject withNegation: aBoolean [ - ^self new - subject: anObject; - withNegation: aBoolean -] - -{ #category : #dispatching } -SpecOfBooleanPropertyValidator >> doesNotUnderstand: aMessage [ - - | spec | - spec := SpecOfBooleanProperty fromMessage: aMessage. - spec denial: withNegation. - - ^ self validatePropertyBy: spec -] - -{ #category : #initialization } -SpecOfBooleanPropertyValidator >> initialize [ - super initialize. - - withNegation := false -] - -{ #category : #accessing } -SpecOfBooleanPropertyValidator >> subject [ - ^ subject -] - -{ #category : #accessing } -SpecOfBooleanPropertyValidator >> subject: anObject [ - subject := anObject -] - -{ #category : #validation } -SpecOfBooleanPropertyValidator >> validatePropertyBy: aSpecOfBooleanProperty [ - - ^ (aSpecOfBooleanProperty validate: subject) raise -] - -{ #category : #accessing } -SpecOfBooleanPropertyValidator >> withNegation [ - ^ withNegation -] - -{ #category : #accessing } -SpecOfBooleanPropertyValidator >> withNegation: anObject [ - withNegation := anObject -] diff --git a/src/StateSpecs-DSL-ShouldExpressions/SpecOfBooleanSubPropertyValidator.class.st b/src/StateSpecs-DSL-ShouldExpressions/SpecOfBooleanSubPropertyValidator.class.st deleted file mode 100644 index 28644818d..000000000 --- a/src/StateSpecs-DSL-ShouldExpressions/SpecOfBooleanSubPropertyValidator.class.st +++ /dev/null @@ -1,25 +0,0 @@ -" -I implement validation of internal boolean properties of particular object. I am returned from property should expression - - (1 @ 2) which x should be - -And then for any message I perform validation. Only different from my superclass is that I wil push original property information to validation process. It make description of failure more informative. - - (1 @ 2) which x should be even - (1 @ 2) which x should not be even -" -Class { - #name : #SpecOfBooleanSubPropertyValidator, - #superclass : #SpecOfBooleanPropertyValidator, - #category : 'StateSpecs-DSL-ShouldExpressions' -} - -{ #category : #validation } -SpecOfBooleanSubPropertyValidator >> validatePropertyBy: aSpecOfBooleanProperty [ - - | result | - result := aSpecOfBooleanProperty validate: subject value. - result isFailure ifTrue: [ result subjectOwner: subject ]. - - ^ result raise -] diff --git a/src/StateSpecs-DSL-ShouldExpressions/SpecOfObjectItselfProperty.class.st b/src/StateSpecs-DSL-ShouldExpressions/SpecOfObjectItselfProperty.class.st deleted file mode 100644 index f04fa9ba8..000000000 --- a/src/StateSpecs-DSL-ShouldExpressions/SpecOfObjectItselfProperty.class.st +++ /dev/null @@ -1,54 +0,0 @@ -" -I represent object itself to be root parent of SpecOfObjectProperty. - -My instances can be created by - - SpecOfObjectItselfProperty of: anObject - -Public API and Key Messages - -- subPropertyAt: -- value -- stringForSpecTitle - -Internal Representation and Key Implementation Points. - - Instance Variables - value: - -" -Class { - #name : #SpecOfObjectItselfProperty, - #superclass : #Object, - #instVars : [ - 'value' - ], - #category : 'StateSpecs-DSL-ShouldExpressions' -} - -{ #category : #'instance creation' } -SpecOfObjectItselfProperty class >> of: anObject [ - ^self new - value: anObject -] - -{ #category : #printing } -SpecOfObjectItselfProperty >> stringForSpecTitle [ - ^value stringForSpecTitle -] - -{ #category : #accessing } -SpecOfObjectItselfProperty >> subPropertyAt: aMessage [ - - ^SpecOfObjectProperty of: self message: aMessage -] - -{ #category : #accessing } -SpecOfObjectItselfProperty >> value [ - ^ value -] - -{ #category : #accessing } -SpecOfObjectItselfProperty >> value: anObject [ - value := anObject -] diff --git a/src/StateSpecs-DSL-ShouldExpressions/SpecOfObjectProperty.class.st b/src/StateSpecs-DSL-ShouldExpressions/SpecOfObjectProperty.class.st deleted file mode 100644 index 947865635..000000000 --- a/src/StateSpecs-DSL-ShouldExpressions/SpecOfObjectProperty.class.st +++ /dev/null @@ -1,102 +0,0 @@ -" -I represent deep object property defined by particular message. -For example I can be used to describe x coordinate of rectangle origin. - rectangle origin x -""x"" property in these example will point to ""origin"" property. And ""origin"" property will point to rectangle itself (root represented by SpecOfObjectItselfProperty instance). - -I implement printing method for spec title to look like - (10@20) x -in case of property ""x"" of point (10@20). - -My instances can be created by - - SpecOfObjectProperty of: parentProperty message: aMessage - -But in practice SpecOfObjectPropertyBuilder is used to create properties by normal message sends. - (10@20) which x - -Public API and Key Messages - -- subPropertyAt: -- value -- stringForSpecTitle - -Internal Representation and Key Implementation Points. - - Instance Variables - parent: - parentMessage: - value: -" -Class { - #name : #SpecOfObjectProperty, - #superclass : #Object, - #instVars : [ - 'parent', - 'parentMessage', - 'value' - ], - #category : 'StateSpecs-DSL-ShouldExpressions' -} - -{ #category : #'instance creation' } -SpecOfObjectProperty class >> of: anObjectProperty message: aMessage [ - - ^self new - parent: anObjectProperty; - parentMessage: aMessage; - updateValue; - yourself -] - -{ #category : #accessing } -SpecOfObjectProperty >> parent [ - ^ parent -] - -{ #category : #accessing } -SpecOfObjectProperty >> parent: anObject [ - parent := anObject -] - -{ #category : #accessing } -SpecOfObjectProperty >> parentMessage [ - ^ parentMessage -] - -{ #category : #accessing } -SpecOfObjectProperty >> parentMessage: anObject [ - parentMessage := anObject -] - -{ #category : #printing } -SpecOfObjectProperty >> printOn: aStream [ - - aStream << '"' << value << '" from ' << self stringForSpecTitle -] - -{ #category : #printing } -SpecOfObjectProperty >> stringForSpecTitle [ - ^parent stringForSpecTitle, ' ', parentMessage printString. -] - -{ #category : #accessing } -SpecOfObjectProperty >> subPropertyAt: aMessage [ - - ^SpecOfObjectProperty of: self message: aMessage -] - -{ #category : #accessing } -SpecOfObjectProperty >> updateValue [ - value := parentMessage sendTo: parent value -] - -{ #category : #accessing } -SpecOfObjectProperty >> value [ - ^ value -] - -{ #category : #accessing } -SpecOfObjectProperty >> value: anObject [ - value := anObject -] diff --git a/src/StateSpecs-DSL-ShouldExpressions/SpecOfObjectPropertyBuilder.class.st b/src/StateSpecs-DSL-ShouldExpressions/SpecOfObjectPropertyBuilder.class.st deleted file mode 100644 index d5d7d9170..000000000 --- a/src/StateSpecs-DSL-ShouldExpressions/SpecOfObjectPropertyBuilder.class.st +++ /dev/null @@ -1,65 +0,0 @@ -" -I am used to create internal property instance of given object which then can be validated: - - (10@3) which x should equal: 10 - -which here returns me. - -Internal Representation and Key Implementation Points. - - Instance Variables - property: - -" -Class { - #name : #SpecOfObjectPropertyBuilder, - #superclass : #Object, - #instVars : [ - 'property' - ], - #category : 'StateSpecs-DSL-ShouldExpressions' -} - -{ #category : #'instance creation' } -SpecOfObjectPropertyBuilder class >> for: anObject [ - - ^self new - property: (SpecOfObjectItselfProperty of: anObject) -] - -{ #category : #dispatching } -SpecOfObjectPropertyBuilder >> doesNotUnderstand: aMessage [ - - (property value respondsTo: aMessage selector) ifFalse: [ ^aMessage sendTo: property value ]. - - property := property subPropertyAt: aMessage -] - -{ #category : #printing } -SpecOfObjectPropertyBuilder >> printOn: aStream [ - - aStream << 'Got '. - property printOn: aStream -] - -{ #category : #accessing } -SpecOfObjectPropertyBuilder >> property [ - ^ property -] - -{ #category : #accessing } -SpecOfObjectPropertyBuilder >> property: anObject [ - property := anObject -] - -{ #category : #accessing } -SpecOfObjectPropertyBuilder >> should [ - - ^SpecOfObjectPropertyShouldExpression new - receiver: property -] - -{ #category : #accessing } -SpecOfObjectPropertyBuilder >> value [ - ^self doesNotUnderstand: (Message selector: #value) -] diff --git a/src/StateSpecs-DSL-ShouldExpressions/SpecOfObjectPropertyShouldExpression.class.st b/src/StateSpecs-DSL-ShouldExpressions/SpecOfObjectPropertyShouldExpression.class.st deleted file mode 100644 index 0ed42c629..000000000 --- a/src/StateSpecs-DSL-ShouldExpressions/SpecOfObjectPropertyShouldExpression.class.st +++ /dev/null @@ -1,34 +0,0 @@ -" -I implement special hook to validate internal object properties by should expressions. I am created for property validation: - - (1@0) where x should equal: 1 - -should here returns me. - -I override few methods to push property information to given objects - -Internal Representation and Key Implementation Points. - - Instance Variables - receiver: -" -Class { - #name : #SpecOfObjectPropertyShouldExpression, - #superclass : #SpecOfShouldExpression, - #category : 'StateSpecs-DSL-ShouldExpressions' -} - -{ #category : #expressions } -SpecOfObjectPropertyShouldExpression >> be [ - ^SpecOfBooleanSubPropertyValidator for: receiver withNegation: withNegation -] - -{ #category : #verification } -SpecOfObjectPropertyShouldExpression >> verify: aSpecOfObjectState [ - - | result | - aSpecOfObjectState denial: withNegation. - result := aSpecOfObjectState validate: receiver value. - result isFailure ifTrue: [ result subjectOwner: receiver ]. - ^ result raise -] diff --git a/src/StateSpecs-DSL-ShouldExpressions/SpecOfShouldExpression.class.st b/src/StateSpecs-DSL-ShouldExpressions/SpecOfShouldExpression.class.st deleted file mode 100644 index 1a217020a..000000000 --- a/src/StateSpecs-DSL-ShouldExpressions/SpecOfShouldExpression.class.st +++ /dev/null @@ -1,265 +0,0 @@ -" -I implement all kinds of ""should DSL"" expressions to perform object validation. -You can get instance of me from any object by - 1 should -And then you can call my validation methods: - 1 should equal: 2 - 1 should not equal: 2 - -Now I implement validation DSL by explicit messages. But before I was based on pragma approach which now extracted to separate package. -To support both approaches I provide class variable CurrentExpressionsClass which is me by default. -But if you load package with pragma based expressions then SpecOfPragmaBasedShouldExpression become current (look at it comment for detailes). -To activate concrete expressions call - SpecOfShouldExpression beCurrent - -All DSL methods are in expressions category. - -Internal Representation and Key Implementation Points. - - Instance Variables - receiver: - withNegation: -" -Class { - #name : #SpecOfShouldExpression, - #superclass : #Object, - #instVars : [ - 'receiver', - 'withNegation', - 'receiverOwner' - ], - #classVars : [ - 'CurrentExpressionsClass' - ], - #category : 'StateSpecs-DSL-ShouldExpressions' -} - -{ #category : #accessing } -SpecOfShouldExpression class >> beCurrent [ - ^CurrentExpressionsClass := self -] - -{ #category : #accessing } -SpecOfShouldExpression class >> currentExpressionsClass [ - ^CurrentExpressionsClass ifNil: [ CurrentExpressionsClass := SpecOfShouldExpression ] -] - -{ #category : #'instance creation' } -SpecOfShouldExpression class >> startingAt: anObject [ - ^self currentExpressionsClass new - receiver: anObject -] - -{ #category : #expressions } -SpecOfShouldExpression >> be [ - ^SpecOfBooleanPropertyValidator for: receiver withNegation: withNegation -] - -{ #category : #expressions } -SpecOfShouldExpression >> be: anObject [ - ^self verify: (SpecOfIdentity requiredValue: anObject) -] - -{ #category : #expressions } -SpecOfShouldExpression >> be: anObject description: failureDescription [ - | spec | - spec := (SpecOfIdentity requiredValue: anObject). - spec failureDescription: failureDescription. - - ^self verify: spec -] - -{ #category : #expressions } -SpecOfShouldExpression >> beGreaterOrEqualThan: anObject [ - ^self verify: (SpecOfGreaterMagnitude than: anObject strong: false) -] - -{ #category : #expressions } -SpecOfShouldExpression >> beGreaterThan: anObject [ - ^self verify: (SpecOfGreaterMagnitude than: anObject strong: true) -] - -{ #category : #expressions } -SpecOfShouldExpression >> beInstanceOf: aClass [ - ^self verify: (SpecOfObjectClass requiredClass: aClass) -] - -{ #category : #expressions } -SpecOfShouldExpression >> beKindOf: aClass [ - ^self verify: (SpecOfObjectSuperclass requiredClass: aClass) -] - -{ #category : #expressions } -SpecOfShouldExpression >> beLessOrEqualThan: anObject [ - ^self verify: (SpecOfLesserMagnitude than: anObject strong: false) -] - -{ #category : #expressions } -SpecOfShouldExpression >> beLessThan: anObject [ - ^self verify: (SpecOfLesserMagnitude than: anObject strong: true) -] - -{ #category : #expressions } -SpecOfShouldExpression >> beOrderedEqualTo: aCollection [ - self - deprecated: 'Please use #equalInOrder: instead' - transformWith: '`@receiver beOrderedEqualTo: `@statements1' - -> '`@receiver equalInOrder: `@statements1'. - - ^self equalInOrder: aCollection -] - -{ #category : #expressions } -SpecOfShouldExpression >> beginWith: aString [ - ^ self verify: (SpecOfStringBeginning requiredValue: aString) -] - -{ #category : #expressions } -SpecOfShouldExpression >> beginWith: aString caseSensitive: aBool [ - ^ self verify: (SpecOfStringBeginning requiredValue: aString caseSensitive: aBool) -] - -{ #category : #expressions } -SpecOfShouldExpression >> endWith: aString [ - ^ self verify: (SpecOfStringEnding requiredValue: aString) -] - -{ #category : #expressions } -SpecOfShouldExpression >> endWith: aString caseSensitive: aBool [ - ^ self verify: (SpecOfStringEnding requiredValue: aString caseSensitive: aBool) -] - -{ #category : #expressions } -SpecOfShouldExpression >> equal: anObject [ - ^self verify: (SpecOfEquality requiredValue: anObject) -] - -{ #category : #expressions } -SpecOfShouldExpression >> equal: anObject description: failureDescription [ - | spec | - spec := (SpecOfEquality requiredValue: anObject) . - spec failureDescription: failureDescription. - - ^self verify: spec -] - -{ #category : #expressions } -SpecOfShouldExpression >> equal: aNumber within: accuracyNumber [ - ^self verify: (SpecOfApproxEquality to: aNumber within: accuracyNumber) -] - -{ #category : #expressions } -SpecOfShouldExpression >> equalInOrder: anObject [ - ^self verify: (SpecOfCollectionOrderedEquality requiredValue: anObject) -] - -{ #category : #expressions } -SpecOfShouldExpression >> fail [ - ^self raise: (SpecOfObjectSuperclass requiredClass: Error) -] - -{ #category : #expressions } -SpecOfShouldExpression >> haveSize: aNumber [ - ^self verify: (SpecOfCollectionSize requiredSize: aNumber) -] - -{ #category : #expressions } -SpecOfShouldExpression >> include: anObjectOrSpec [ - ^ self verify: (SpecOfCollectionContents requiredItem: anObjectOrSpec) -] - -{ #category : #expressions } -SpecOfShouldExpression >> include: itemObject at: keyObject [ - ^self verify: (SpecOfCollectionItem at: keyObject requiredItem: itemObject) -] - -{ #category : #expressions } -SpecOfShouldExpression >> includeKey: anObject [ - ^self verify: (SpecOfDictionaryKeys requiredKey: anObject) -] - -{ #category : #expressions } -SpecOfShouldExpression >> includeSubstring: aString [ - ^ self verify: (SpecOfSubstring requiredValue: aString) -] - -{ #category : #expressions } -SpecOfShouldExpression >> includeSubstring: aString caseSensitive: aBool [ - ^ self verify: (SpecOfSubstring requiredValue: aString caseSensitive: aBool) -] - -{ #category : #initialization } -SpecOfShouldExpression >> initialize [ - super initialize. - withNegation := false -] - -{ #category : #expressions } -SpecOfShouldExpression >> matchRegex: aRegexString [ - ^ self verify: (SpecOfStringRegex requiredValue: aRegexString) -] - -{ #category : #expressions } -SpecOfShouldExpression >> matchRegex: aRegexString caseSensitive: aBool [ - ^ self verify: (SpecOfStringRegex requiredValue: aRegexString caseSensitive: aBool) -] - -{ #category : #expressions } -SpecOfShouldExpression >> not [ - withNegation := withNegation not -] - -{ #category : #expressions } -SpecOfShouldExpression >> raise: aClass [ - ^self verify: (SpecOfBlockFailure requiredFailure: aClass) -] - -{ #category : #accessing } -SpecOfShouldExpression >> receiver [ - ^ receiver -] - -{ #category : #accessing } -SpecOfShouldExpression >> receiver: anObject [ - receiver := anObject -] - -{ #category : #accessing } -SpecOfShouldExpression >> receiverOwner [ - ^ receiverOwner -] - -{ #category : #accessing } -SpecOfShouldExpression >> receiverOwner: anObject [ - receiverOwner := anObject -] - -{ #category : #expressions } -SpecOfShouldExpression >> respondTo: aSelector [ - ^self verify: (SpecOfObjectResponsibility for: aSelector) -] - -{ #category : #expressions } -SpecOfShouldExpression >> satisfy: aBlock [ - ^self verify: (SpecOfObjectStateByPredicate from: aBlock) -] - -{ #category : #verification } -SpecOfShouldExpression >> verify: aSpecOfObjectState [ - - | result | - aSpecOfObjectState denial: withNegation. - result := aSpecOfObjectState validate: receiver. - result isFailure ifTrue: [ result subjectOwner: receiverOwner ]. - ^ result raise -] - -{ #category : #accessing } -SpecOfShouldExpression >> withNegation [ - ^ withNegation -] - -{ #category : #accessing } -SpecOfShouldExpression >> withNegation: anObject [ - withNegation := anObject -] diff --git a/src/StateSpecs-DSL-ShouldExpressions/package.st b/src/StateSpecs-DSL-ShouldExpressions/package.st deleted file mode 100644 index 30c8a630c..000000000 --- a/src/StateSpecs-DSL-ShouldExpressions/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'StateSpecs-DSL-ShouldExpressions' } diff --git a/src/StateSpecs-GTTools/SpecOfEquality.extension.st b/src/StateSpecs-GTTools/SpecOfEquality.extension.st deleted file mode 100644 index cb5eaaaf4..000000000 --- a/src/StateSpecs-GTTools/SpecOfEquality.extension.st +++ /dev/null @@ -1,10 +0,0 @@ -Extension { #name : #SpecOfEquality } - -{ #category : #'*StateSpecs-GTTools' } -SpecOfEquality >> gtInspectorIn: composite forFailedValidationOf: anObject [ - - ^composite diff - title: 'Diff (actual vs. expected)'; - display: [ - {anObject gtDebuggerSUnitPrint. requiredValue gtDebuggerSUnitPrint} ] -] diff --git a/src/StateSpecs-GTTools/SpecOfObjectState.extension.st b/src/StateSpecs-GTTools/SpecOfObjectState.extension.st deleted file mode 100644 index 7349a2497..000000000 --- a/src/StateSpecs-GTTools/SpecOfObjectState.extension.st +++ /dev/null @@ -1,5 +0,0 @@ -Extension { #name : #SpecOfObjectState } - -{ #category : #'*StateSpecs-GTTools' } -SpecOfObjectState >> gtInspectorIn: composite forFailedValidationOf: anObject [ -] diff --git a/src/StateSpecs-GTTools/SpecOfString.extension.st b/src/StateSpecs-GTTools/SpecOfString.extension.st deleted file mode 100644 index 3685f59bb..000000000 --- a/src/StateSpecs-GTTools/SpecOfString.extension.st +++ /dev/null @@ -1,10 +0,0 @@ -Extension { #name : #SpecOfString } - -{ #category : #'*StateSpecs-GTTools' } -SpecOfString >> gtInspectorIn: composite forFailedValidationOf: anObject [ - - ^composite diff - title: 'String vs expected part'; - display: [ - {anObject gtDebuggerSUnitPrint. requiredValue gtDebuggerSUnitPrint} ] -] diff --git a/src/StateSpecs-GTTools/SpecOfValidationFailure.extension.st b/src/StateSpecs-GTTools/SpecOfValidationFailure.extension.st deleted file mode 100644 index 267685c4b..000000000 --- a/src/StateSpecs-GTTools/SpecOfValidationFailure.extension.st +++ /dev/null @@ -1,8 +0,0 @@ -Extension { #name : #SpecOfValidationFailure } - -{ #category : #'*StateSpecs-GTTools' } -SpecOfValidationFailure >> gtInspectorIn: composite [ - - - spec gtInspectorIn: composite forFailedValidationOf: subject -] diff --git a/src/StateSpecs-GTTools/package.st b/src/StateSpecs-GTTools/package.st deleted file mode 100644 index e5bf6542e..000000000 --- a/src/StateSpecs-GTTools/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'StateSpecs-GTTools' } diff --git a/src/StateSpecs-Help/StateSpecsHelp.class.st b/src/StateSpecs-Help/StateSpecsHelp.class.st deleted file mode 100644 index 1ab3dad62..000000000 --- a/src/StateSpecs-Help/StateSpecsHelp.class.st +++ /dev/null @@ -1,106 +0,0 @@ -Class { - #name : #StateSpecsHelp, - #superclass : #CustomHelp, - #category : 'StateSpecs-Help' -} - -{ #category : #accessing } -StateSpecsHelp class >> bookName [ - ^ 'StateSpecs' -] - -{ #category : #pages } -StateSpecsHelp class >> overview [ - ^ HelpTopic - title: 'Overview' - contents: -'StateSpecs is object state specification framework. It describes particular object states by first class specifications. For example there are SpecOfCollectionItem, SpecOfObjectClass and SpecOfObjectSuperclass. They can match and validate given objects. In case when object is not satisfied specification you will get failure result with detailed information about problem. - - spec matches: anObject. - spec validate: anObject. "it returns validation result which can be success or particular failure" - -To easily create specifications and validate objects by them StateSpecs provides two kind DSL: should expressions and "word" classes. -First allows you to write "assertions": - - 1 should be: 2 - 1 should equal: 10 - -And second allows you to instantiate specs by natural readable words: - - Kind of: Number - Instance of: String - Equal to: ''test''' -] - -{ #category : #accessing } -StateSpecsHelp class >> pages [ - ^ #(overview - shouldExpressions) -] - -{ #category : #pages } -StateSpecsHelp class >> shouldExpressions [ - ^ HelpTopic - title: 'Should expressions' - contents: -'1 should be: 2. "fail with message: Got ''1'' but it should be ''2''" -1 should not be: 1. "fail with message: Got ''1'' but it should not be ''1''" - -3 should equal: 2. "fail with message: Got ''3'' but it should equal ''2''" -3 should not equal: 3. "fail with message: Got ''3'' but it should equal ''3''" - -3 should beKindOf: String. -3 should not beKindOf: Number. - -3 should beInstanceOf: Number. -3 should not beInstanceOf: SmallInteger. - -#(1 2) should equal: #(10 20). -#(1 2) should equal: #(1 2) asOrderedCollection. "not fail because by default comparison not look at collection types" -#(1 2) should equal: #(1 2) asSet. -#(1 2) should equal: #(2 1). "not fail because by default equality between collections is not ordered" -#(1 2) should equalInOrder: #(2 1). "fail because it is explicit requirement for ordered equality" - -#(1 2) should haveSize: 10. -#(1 2) should include: 10. -#(1 2) should include: (Kind of: String). -#(1 2) should include: [:number | number > 10]. -#(1 2) should include: 10 at: 1. -#(1 2) should include: (Instance of: String) at: 1. -#(1 2) should include: (Kind of: String) at: 2. -#(1 2) should include: [:number | number > 10] at: 2. - -''some test string'' should includeSubstring: ''test2'' -''some test string'' should includeSubstring: ''Test'' caseSensitive: true -''test string'' should beginWith: ''test'' -''test string'' should beginWith: ''Test'' caseSensitive: true -''string for test'' should endWith: ''test2'' -''string for test'' should endWith: ''Test'' caseSensitive: true -''test string'' should matchRegex: ''^test'' -''test string'' should matchRegex: ''^Test'' caseSensitive: true - -[1 + 2] should raise: ZeroDivide. -[1/0] should not raise: ZeroDivide. -[1/0] should raise: Error. -[1/0] should raise: (Kind of: Error). -[1/0] should fail. -[self error: ''test''] should raise: errorInstance. "fail because raised error is not the same as expected errorInstance" -[1 + 2] should not fail. - -3 should be even. -2 should not be even. - -3 should be between: 10 and: 50. -2 should not between: 1 and: 5. - -#(1 2) should be isEmpty. "fail with message: #(1 2) should be isEmpty" -#() should not be isEmpty. - -(1@3 corder: 20@30) where origin x should equal: 100. "fail with message: Got ''1'' from (1@3 corder: 20@30) origin x but it should equal: 100". - -Look at all expressions in SpecOfShouldExpression class which you can extend with new keywords. SpecOfShouldExpressionTests describes them in tests. - -Underhood "should expression" build concrete specification instance and validate subject of should expression by it. -Should expressions signal special SpecOfFailed exception by concrete validation failure. It makes possible to extend debugger tools to better analyse problem. Such tools can be specific for different kind of failures -' -] diff --git a/src/StateSpecs-Help/package.st b/src/StateSpecs-Help/package.st deleted file mode 100644 index 3cbd492a3..000000000 --- a/src/StateSpecs-Help/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'StateSpecs-Help' } diff --git a/src/StateSpecs-Specs-Tests/AnyClassTests.class.st b/src/StateSpecs-Specs-Tests/AnyClassTests.class.st deleted file mode 100644 index fe3a07b7d..000000000 --- a/src/StateSpecs-Specs-Tests/AnyClassTests.class.st +++ /dev/null @@ -1,46 +0,0 @@ -Class { - #name : #AnyClassTests, - #superclass : #TestCase, - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #tests } -AnyClassTests >> testAsSimpleValue [ - self assert: Any asSimpleValue equals: Any name -] - -{ #category : #tests } -AnyClassTests >> testAsStateSpec [ - self assert: Any asStateSpec = Any -] - -{ #category : #tests } -AnyClassTests >> testBasicMatchesAnyObject [ - | result | - result := Any basicMatches: nil. - self assert: result -] - -{ #category : #tests } -AnyClassTests >> testIsSimpleValue [ - self assert: Any isSimpleValue -] - -{ #category : #tests } -AnyClassTests >> testIsStateSpec [ - self assert: Any isStateSpec -] - -{ #category : #tests } -AnyClassTests >> testMatchesAnyObject [ - | result | - result := Any matches: nil. - self assert: result -] - -{ #category : #tests } -AnyClassTests >> testValidate [ - | result | - result := Any validate: nil. - self assert: result isSuccess -] diff --git a/src/StateSpecs-Specs-Tests/SpecOfAndConjunctionTests.class.st b/src/StateSpecs-Specs-Tests/SpecOfAndConjunctionTests.class.st deleted file mode 100644 index 8de98c529..000000000 --- a/src/StateSpecs-Specs-Tests/SpecOfAndConjunctionTests.class.st +++ /dev/null @@ -1,73 +0,0 @@ -Class { - #name : #SpecOfAndConjunctionTests, - #superclass : #TestCase, - #instVars : [ - 'actual' - ], - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #tests } -SpecOfAndConjunctionTests >> testCreationByBinaryMessage [ - | spec1 spec2 compositeSpec | - spec1 := SpecOfObjectState new. - spec2 := SpecOfObjectState new. - compositeSpec := spec1 & spec2. - self assert: compositeSpec class = SpecOfAndConjunction. - self assert: compositeSpec specs first == spec1. - self assert: compositeSpec specs last == spec2 -] - -{ #category : #tests } -SpecOfAndConjunctionTests >> testMatches [ - | spec1 spec2 stateSpec | - spec1 := SpecOfEquality requiredValue: #expectedValue. - spec2 := SpecOfObjectSuperclass requiredClass: String. - - stateSpec := SpecOfAndConjunction of: spec1 and: spec2. - - self deny: (stateSpec matches: #wrongValue). - self assert: (stateSpec matches: #expectedValue) - -] - -{ #category : #tests } -SpecOfAndConjunctionTests >> testValidateFailed [ - | spec1 spec2 stateSpec result | - spec1 := SpecOfEquality requiredValue: #expectedValue. - spec2 := SpecOfObjectSuperclass requiredClass: String. - - stateSpec := SpecOfAndConjunction of: spec1 and: spec2. - result := stateSpec validate: #wrongValue. - - self assert: result isFailure. - self assert: result spec == spec1 - -] - -{ #category : #tests } -SpecOfAndConjunctionTests >> testValidateFailed2 [ - | spec1 spec2 stateSpec result | - spec1 := SpecOfEquality requiredValue: 2. - spec2 := SpecOfObjectSuperclass requiredClass: String. - - stateSpec := SpecOfAndConjunction of: spec1 and: spec2. - result := stateSpec validate: 2. - - self assert: result isFailure. - self assert: result spec == spec2 - -] - -{ #category : #tests } -SpecOfAndConjunctionTests >> testValidateSuccessful [ - | spec1 spec2 stateSpec result | - spec1 := SpecOfEquality requiredValue: #expectedValue. - spec2 := SpecOfObjectSuperclass requiredClass: String. - - stateSpec := SpecOfAndConjunction of: spec1 and: spec2. - result := stateSpec validate: #expectedValue. - - self assert: result isSuccess - -] diff --git a/src/StateSpecs-Specs-Tests/SpecOfApproxEqualityTests.class.st b/src/StateSpecs-Specs-Tests/SpecOfApproxEqualityTests.class.st deleted file mode 100644 index ec96acd2a..000000000 --- a/src/StateSpecs-Specs-Tests/SpecOfApproxEqualityTests.class.st +++ /dev/null @@ -1,37 +0,0 @@ -Class { - #name : #SpecOfApproxEqualityTests, - #superclass : #TestCase, - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #tests } -SpecOfApproxEqualityTests >> testMatches [ - | spec | - spec := SpecOfApproxEquality to: 10 within: 2. - self assert: (spec matches: 11). - self deny: (spec matches: 12) -] - -{ #category : #tests } -SpecOfApproxEqualityTests >> testNumberIsEqualWithin [ - self assert: (11 isEqual: 10 within: 2). - self deny: (12 isEqual: 10 within: 2) -] - -{ #category : #tests } -SpecOfApproxEqualityTests >> testPointIsEqualWithin [ - self assert: (0.7 @ 0.7 isEqual: 0 @ 0 within: 1). - self deny: (0.8 @ 0.8 isEqual: 0 @ 0 within: 1) -] - -{ #category : #tests } -SpecOfApproxEqualityTests >> testValidationFailure [ - | spec result | - spec := SpecOfApproxEquality to: 10 within: 2. - - result := spec validate: 12. - - self assert: result isFailure. - self assert: result description equals: 'Got "12" but it should be within 2 of 10' - -] diff --git a/src/StateSpecs-Specs-Tests/SpecOfBlockFailureTests.class.st b/src/StateSpecs-Specs-Tests/SpecOfBlockFailureTests.class.st deleted file mode 100644 index 7f2d25725..000000000 --- a/src/StateSpecs-Specs-Tests/SpecOfBlockFailureTests.class.st +++ /dev/null @@ -1,188 +0,0 @@ -Class { - #name : #SpecOfBlockFailureTests, - #superclass : #TestCase, - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #tests } -SpecOfBlockFailureTests >> testFailedValidationWhenUnexpectedErrorsShouldBePassed [ - | spec | - spec := SpecOfBlockFailure requiredFailure: ZeroDivide. - spec passUnexpectedFailures. - - self should: [spec validate: [ #() at: 1]] raise: SubscriptOutOfBounds -] - -{ #category : #tests } -SpecOfBlockFailureTests >> testFailedValidationWithExplicitExpectedErrorInstance [ - | spec result expectedError anotherError | - expectedError := Error new messageText: 'test error'. - - spec := SpecOfBlockFailure requiredFailure: expectedError. - - anotherError := Error new messageText: 'another error'. - - result := spec validate: [ anotherError signal]. - - self assert: result isFailure. - self assert: result description equals: 'Got "', anotherError stringForSpecValidation , '" but it should equal "', expectedError stringForSpecTitle, '"' -] - -{ #category : #tests } -SpecOfBlockFailureTests >> testFailedValidationWithExplicitFailureSpec [ - | spec result expectedError anotherError | - expectedError := Error new messageText: 'test error'. - - spec := SpecOfBlockFailure requiredFailure: (SpecOfIdentity requiredValue: expectedError). - - anotherError := Error new messageText: 'another error'. - - result := spec validate: [ anotherError signal]. - - self assert: result isFailure. - self assert: result description equals: 'Got "', anotherError stringForSpecValidation , '" but it should be "', expectedError stringForSpecTitle, '"' -] - -{ #category : #tests } -SpecOfBlockFailureTests >> testMatches [ - | spec | - spec := SpecOfBlockFailure requiredFailure: ZeroDivide. - self - assert: (spec matches: - [1 / 0. - self error: 'continue']). - self deny: (spec matches: [1 + 2]). - self deny: (spec matches: [#() at: 1]) -] - -{ #category : #tests } -SpecOfBlockFailureTests >> testMatchesToNotFailedBlockWhenSpecWithDenial [ - | spec | - spec := (SpecOfBlockFailure requiredFailure: ZeroDivide) not. - self assert: (spec matches: ['empty block']) -] - -{ #category : #tests } -SpecOfBlockFailureTests >> testMatchesWhenUnexpectedFailuresShouldBePassed [ - | spec | - spec := SpecOfBlockFailure requiredFailure: ZeroDivide. - spec passUnexpectedFailures. - - self assert: (spec matches: - [1 / 0. - self error: 'continue']). - self deny: (spec matches: [1 + 2]). - self should: [spec matches: [#() at: 1]] raise: Error -] - -{ #category : #tests } -SpecOfBlockFailureTests >> testShouldNotPassUnexpectedFailuresByDefault [ - - | spec | - spec := SpecOfBlockFailure requiredFailure: Error. - - self deny: spec shouldPassUnexpectedFailures -] - -{ #category : #tests } -SpecOfBlockFailureTests >> testShouldPassDNUSignalByDefault [ - | spec | - spec := SpecOfBlockFailure requiredFailure: Error. - self - should: [spec matches: [1 someMessage]] - raise: MessageNotUnderstood -] - -{ #category : #tests } -SpecOfBlockFailureTests >> testShouldPassDeprecationSignalByDefault [ - | spec | - spec := SpecOfBlockFailure requiredFailure: Error. - self - should: [spec matches: [self deprecated: 'test']] - raise: Deprecation -] - -{ #category : #tests } -SpecOfBlockFailureTests >> testShouldPassHaltSignalByDefault [ - | spec | - spec := SpecOfBlockFailure requiredFailure: Error. - self - should: [spec matches: [Halt now]] - raise: Halt -] - -{ #category : #tests } -SpecOfBlockFailureTests >> testShouldPassInternalSpecFailedErrorByDefault [ - | spec | - spec := SpecOfBlockFailure requiredFailure: Error. - self - should: [spec matches: [SpecOfFailed signal]] - raise: SpecOfFailed -] - -{ #category : #tests } -SpecOfBlockFailureTests >> testSucceedValidationWithExplicitFailureSpec [ - | spec result expectedError | - expectedError := Error new messageText: 'test error'. - - spec := SpecOfBlockFailure requiredFailure: (SpecOfIdentity requiredValue: expectedError). - - result := spec validate: [ expectedError signal]. - - self assert: result isSuccess -] - -{ #category : #tests } -SpecOfBlockFailureTests >> testValidationExplicitPassingFailure [ - | spec result | - spec := SpecOfBlockFailure requiredFailure: MessageNotUnderstood. - - result := spec validate: [ 1 someMessage ]. - - self assert: result isSuccess -] - -{ #category : #tests } -SpecOfBlockFailureTests >> testValidationOfBlockFailedByAnotherError [ - | spec result error | - spec := SpecOfBlockFailure requiredFailure: ZeroDivide. - error := Error new messageText: 'test error'. - - result := spec validate: [ error signal]. - - self assert: result isFailure. - self assert: result description equals: 'Got "', error stringForSpecValidation ,'" but it should be an instance of ZeroDivide'. - -] - -{ #category : #tests } -SpecOfBlockFailureTests >> testValidationOfNotFailedBlock [ - | spec result | - spec := SpecOfBlockFailure requiredFailure: ZeroDivide. - - result := spec validate: [ 'blockBody' ]. - - self assert: result isFailure. - self assert: result description equals: 'Got no failures but should be an instance of ZeroDivide' -] - -{ #category : #tests } -SpecOfBlockFailureTests >> testValidationOfNotFailedBlockWhenSpecWithDenial [ - | spec result | - spec := (SpecOfBlockFailure requiredFailure: ZeroDivide) not. - - result := spec validate: [ 'blockBody' ]. - - self assert: result isSuccess -] - -{ #category : #tests } -SpecOfBlockFailureTests >> testValidationWithAnyRequiredFailure [ - - | spec result | - spec := SpecOfBlockFailure requiredFailure: Any. - - result := spec validate: [ self error: 'test']. - - self assert: result isSuccess -] diff --git a/src/StateSpecs-Specs-Tests/SpecOfBooleanPropertyTests.class.st b/src/StateSpecs-Specs-Tests/SpecOfBooleanPropertyTests.class.st deleted file mode 100644 index cab1f65f9..000000000 --- a/src/StateSpecs-Specs-Tests/SpecOfBooleanPropertyTests.class.st +++ /dev/null @@ -1,78 +0,0 @@ -Class { - #name : #SpecOfBooleanPropertyTests, - #superclass : #TestCase, - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #tests } -SpecOfBooleanPropertyTests >> testFailedValidation [ - - | spec result | - spec := SpecOfBooleanProperty fromMessage: (Message selector: #isEmpty). - - result := spec validate: #(1 2). - - self assert: result isFailure. - self assert: result description equals: '#(1 2) should be isEmpty' -] - -{ #category : #tests } -SpecOfBooleanPropertyTests >> testFailedValidationWhenSpecWithDenial [ - - | spec result | - spec := (SpecOfBooleanProperty fromMessage: (Message selector: #isEmpty)) not. - - result := spec validate: #(). - - self assert: result isFailure. - self assert: result description equals: '#() should not be isEmpty' -] - -{ #category : #tests } -SpecOfBooleanPropertyTests >> testMatches [ - - | spec | - spec := SpecOfBooleanProperty fromMessage: (Message selector: #isEmpty). - - self assert: (spec matches: #()). - self deny: (spec matches: #(1 2)) -] - -{ #category : #tests } -SpecOfBooleanPropertyTests >> testMatchesWhenMessageIsNotBoolean [ - - | spec | - spec := SpecOfBooleanProperty fromMessage: (Message selector: #first). - - self deny: (spec matches: #(1 2)) -] - -{ #category : #tests } -SpecOfBooleanPropertyTests >> testMatchesWithDenial [ - - | spec | - spec := (SpecOfBooleanProperty fromMessage: (Message selector: #isEmpty)) not. - - self deny: (spec matches: #()). - self assert: (spec matches: #(1 2)) -] - -{ #category : #tests } -SpecOfBooleanPropertyTests >> testMatchesWithDenialWhenMessageIsNotBoolean [ - - | spec | - spec := (SpecOfBooleanProperty fromMessage: (Message selector: #first)) not. - - self assert: (spec matches: #(1 2)) -] - -{ #category : #tests } -SpecOfBooleanPropertyTests >> testSucceedValidation [ - - | spec result | - spec := SpecOfBooleanProperty fromMessage: (Message selector: #isEmpty). - - result := spec validate: #(). - - self assert: result isSuccess -] diff --git a/src/StateSpecs-Specs-Tests/SpecOfClassExtensionsTests.class.st b/src/StateSpecs-Specs-Tests/SpecOfClassExtensionsTests.class.st deleted file mode 100644 index 908495437..000000000 --- a/src/StateSpecs-Specs-Tests/SpecOfClassExtensionsTests.class.st +++ /dev/null @@ -1,86 +0,0 @@ -Class { - #name : #SpecOfClassExtensionsTests, - #superclass : #TestCase, - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #tests } -SpecOfClassExtensionsTests >> testObjectsAreNotStateSpecs [ - - self deny: Object new isStateSpec -] - -{ #category : #tests } -SpecOfClassExtensionsTests >> testPrintingBlockForSpecTitle [ - | result | - result := [ :blockArg | blockArg > 0 ] stringForSpecTitle. - - self assert: result equals: '[ :blockArg | blockArg > 0 ]' -] - -{ #category : #tests } -SpecOfClassExtensionsTests >> testPrintingByteArray [ - | result | - - result := #[1 2 3] stringForSpecTitle. - self assert: result equals: #[1 2 3] printString -] - -{ #category : #tests } -SpecOfClassExtensionsTests >> testPrintingCompiledMethod [ - | result | - - result := (Point>>#x) stringForSpecTitle. - self assert: result equals: (Point>>#x) printString -] - -{ #category : #tests } -SpecOfClassExtensionsTests >> testPrintingEmptyArray [ - | result | - - result := Array new stringForSpecTitle. - self assert: result equals: '#()' -] - -{ #category : #tests } -SpecOfClassExtensionsTests >> testPrintingEmptySet [ - | result | - - result := Set new stringForSpecTitle. - self assert: result equals: 'a Set{}' -] - -{ #category : #tests } -SpecOfClassExtensionsTests >> testPrintingLiteralArrayForSpecTitle [ - | result | - - result := #(1 2 3) stringForSpecTitle. - self assert: result = '#(1 2 3)' -] - -{ #category : #tests } -SpecOfClassExtensionsTests >> testPrintingNonLiteralCollectionForSpecTitle [ - | result | - - result := (Array with: Object new with: Object new) stringForSpecTitle. - self assert: result equals: 'an Array{an Object. an Object}' -] - -{ #category : #tests } -SpecOfClassExtensionsTests >> testPrintingObjectForSpecTitle [ - | object result | - object := Object new. - - result := object stringForSpecTitle. - - self assert: result = object printString -] - -{ #category : #tests } -SpecOfClassExtensionsTests >> testPrintingStringForSpecTitle [ - | result | -. - result := 'someString' stringForSpecTitle. - - self assert: result = '''someString''' -] diff --git a/src/StateSpecs-Specs-Tests/SpecOfCollectionContentsTests.class.st b/src/StateSpecs-Specs-Tests/SpecOfCollectionContentsTests.class.st deleted file mode 100644 index 00731765e..000000000 --- a/src/StateSpecs-Specs-Tests/SpecOfCollectionContentsTests.class.st +++ /dev/null @@ -1,29 +0,0 @@ -Class { - #name : #SpecOfCollectionContentsTests, - #superclass : #TestCase, - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #tests } -SpecOfCollectionContentsTests >> testDescriptionWhenRequiredItemIsSimpleValue [ - | spec | - spec := SpecOfCollectionContents requiredItem: 10. - - self assert: spec description equals: 'should include 10' -] - -{ #category : #tests } -SpecOfCollectionContentsTests >> testDescriptionWhenRequiredItemIsSpec [ - | spec | - spec := SpecOfCollectionContents requiredItem: (Kind of: Integer). - - self assert: spec description equals: 'should include (be a kind of Integer)' -] - -{ #category : #tests } -SpecOfCollectionContentsTests >> testMatches [ - | spec | - spec := SpecOfCollectionContents requiredItem: 10. - self assert: (spec matches: #(10 20)). - self deny: (spec matches: #(20 40)) -] diff --git a/src/StateSpecs-Specs-Tests/SpecOfCollectionItemTests.class.st b/src/StateSpecs-Specs-Tests/SpecOfCollectionItemTests.class.st deleted file mode 100644 index b8439c005..000000000 --- a/src/StateSpecs-Specs-Tests/SpecOfCollectionItemTests.class.st +++ /dev/null @@ -1,105 +0,0 @@ -Class { - #name : #SpecOfCollectionItemTests, - #superclass : #TestCase, - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #tests } -SpecOfCollectionItemTests >> testDescriptionWhenRequiredItemIsSimpleValue [ - | spec | - spec := SpecOfCollectionItem at: #expectedKey requiredItem: #value. - - self assert: spec description equals: 'should include #value at #expectedKey' -] - -{ #category : #tests } -SpecOfCollectionItemTests >> testDescriptionWhenRequiredItemIsSpec [ - | spec | - spec := SpecOfCollectionItem at: #expectedKey requiredItem: (Kind of: Integer). - - self assert: spec description equals: 'should include (be a kind of Integer) at #expectedKey' -] - -{ #category : #tests } -SpecOfCollectionItemTests >> testFailedValidationWhenContainingKeyAbsent [ - | spec result | - - spec := SpecOfCollectionItem at: 3 requiredItem: 10. - - result := spec validate: #(1 2). - self assert: result isFailure. - self assert: result description equals: '#(1 2) not includes key 3 which item should equal "10"' -] - -{ #category : #tests } -SpecOfCollectionItemTests >> testFailedValidationWhenRequiredItemIsWrong [ - | spec result | - - spec := SpecOfCollectionItem at: 3 requiredItem: 3. - - result := spec validate: #(1 2 4). - self assert: result isFailure. - self assert: result description equals: 'Got "4" at key 3 of #(1 2 4) but should equal "3"' -] - -{ #category : #tests } -SpecOfCollectionItemTests >> testFailedValidationWhenSpecWithDenialAndContainingKeyAbsent [ - | spec result | - - spec := (SpecOfCollectionItem at: 3 requiredItem: 10) not. - - result := spec validate: #(1 2). - self assert: result isFailure. - self assert: result description equals: '#(1 2) not includes key 3 which item should not equal "10"' -] - -{ #category : #tests } -SpecOfCollectionItemTests >> testFailedValidationWhenSpecWithDenialAndRequiredItemIsWrong [ - | spec result | - - spec := (SpecOfCollectionItem at: 3 requiredItem: 10) not. - - result := spec validate: #(1 2 10). - self assert: result isFailure. - self assert: result description equals: 'Got "10" at key 3 of #(1 2 10) but should not equal "10"' -] - -{ #category : #tests } -SpecOfCollectionItemTests >> testMatches [ - | spec | - spec := SpecOfCollectionItem at: #expectedKey requiredItem: #expectedValue. - - self assert: (spec matches: (Dictionary newFromPairs: - #(#key1 #value1 #expectedKey #expectedValue))). - self deny: (spec matches: (Dictionary newFromPairs: - #(#key1 #value1 #expectedKey #wrongValueValue))) -] - -{ #category : #tests } -SpecOfCollectionItemTests >> testMatchesWhenRequiredKeyAbsent [ - | spec | - spec := SpecOfCollectionItem at: #expectedKey requiredItem: #expectedValue. - - self deny: (spec matches: (Dictionary newFromPairs: - #(#key1 #value1))) -] - -{ #category : #tests } -SpecOfCollectionItemTests >> testMatchesWithExplicitItemSpec [ - | spec | - - spec := SpecOfCollectionItem at: 3 requiredItem: (SpecOfObjectSuperclass requiredClass: String). - self assert: (spec matches: #(1 2 'someString')). - self deny: (spec matches: #(1 2 3)). - self deny: (spec matches: #(1 2)). -] - -{ #category : #tests } -SpecOfCollectionItemTests >> testSucceeedValidation [ - | spec result | - - spec := SpecOfCollectionItem at: 3 requiredItem: 3. - - result := spec validate: #(1 2 3). - self assert: result isSuccess -] diff --git a/src/StateSpecs-Specs-Tests/SpecOfCollectionOrderedEqualityTests.class.st b/src/StateSpecs-Specs-Tests/SpecOfCollectionOrderedEqualityTests.class.st deleted file mode 100644 index a2cb1ac15..000000000 --- a/src/StateSpecs-Specs-Tests/SpecOfCollectionOrderedEqualityTests.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #SpecOfCollectionOrderedEqualityTests, - #superclass : #TestCase, - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #tests } -SpecOfCollectionOrderedEqualityTests >> testMatches [ - - | spec | - spec := SpecOfCollectionOrderedEquality requiredValue: #(1 2 3). - - self assert: (spec matches: #(1 2 3)). - self deny: (spec matches: #(2 1 3)). -] - -{ #category : #tests } -SpecOfCollectionOrderedEqualityTests >> testMatchesWithDenial [ - - | spec | - spec := (SpecOfCollectionOrderedEquality requiredValue: #(1 2 3)) not. - - self deny: (spec matches: #(1 2 3)). - self assert: (spec matches: #(2 1 3)). -] diff --git a/src/StateSpecs-Specs-Tests/SpecOfCollectionSizeTests.class.st b/src/StateSpecs-Specs-Tests/SpecOfCollectionSizeTests.class.st deleted file mode 100644 index bc1263a49..000000000 --- a/src/StateSpecs-Specs-Tests/SpecOfCollectionSizeTests.class.st +++ /dev/null @@ -1,13 +0,0 @@ -Class { - #name : #SpecOfCollectionSizeTests, - #superclass : #TestCase, - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #tests } -SpecOfCollectionSizeTests >> testMatches [ - | spec | - spec := SpecOfCollectionSize requiredSize: 2. - self assert: (spec matches: #(10 20)). - self deny: (spec matches: #(20 40 30)) -] diff --git a/src/StateSpecs-Specs-Tests/SpecOfComplexStateTests.class.st b/src/StateSpecs-Specs-Tests/SpecOfComplexStateTests.class.st deleted file mode 100644 index c5b5a7141..000000000 --- a/src/StateSpecs-Specs-Tests/SpecOfComplexStateTests.class.st +++ /dev/null @@ -1,18 +0,0 @@ -Class { - #name : #SpecOfComplexStateTests, - #superclass : #TestCase, - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #tests } -SpecOfComplexStateTests >> testCreation [ - - | spec1 complexSpec | - spec1 := SpecOfEquality requiredValue: 1. - - complexSpec := SpecOfComplexState of: spec1 and: 3. - - self assert: complexSpec specs first equals: spec1. - self assert: complexSpec specs last class equals: SpecOfEquality. - self assert: complexSpec specs last requiredValue equals: 3 -] diff --git a/src/StateSpecs-Specs-Tests/SpecOfDictionaryKeysTests.class.st b/src/StateSpecs-Specs-Tests/SpecOfDictionaryKeysTests.class.st deleted file mode 100644 index 6796d6d96..000000000 --- a/src/StateSpecs-Specs-Tests/SpecOfDictionaryKeysTests.class.st +++ /dev/null @@ -1,21 +0,0 @@ -Class { - #name : #SpecOfDictionaryKeysTests, - #superclass : #TestCase, - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #tests } -SpecOfDictionaryKeysTests >> testMatches [ - | spec subject1 subject2 | - subject1 := (Dictionary new) - add: 1 -> 2; - add: 3 -> 4; - yourself. - subject2 := (Dictionary new) - add: 10 -> 1; - add: 3 -> 4; - yourself. - spec := SpecOfDictionaryKeys requiredKey: 1. - self assert: (spec matches: subject1). - self deny: (spec matches: subject2) -] diff --git a/src/StateSpecs-Specs-Tests/SpecOfEqualityTests.class.st b/src/StateSpecs-Specs-Tests/SpecOfEqualityTests.class.st deleted file mode 100644 index a3739e1fe..000000000 --- a/src/StateSpecs-Specs-Tests/SpecOfEqualityTests.class.st +++ /dev/null @@ -1,102 +0,0 @@ -Class { - #name : #SpecOfEqualityTests, - #superclass : #TestCase, - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #tests } -SpecOfEqualityTests >> testCreationFromObject [ - | subject result | - subject := Object new. - result := subject asStateSpec. - self assert: result class = SpecOfEquality. - self assert: result requiredValue == subject -] - -{ #category : #tests } -SpecOfEqualityTests >> testMatches [ - - | spec | - spec := SpecOfEquality requiredValue: 'some object'. - - self assert: (spec matches: 'some' ,' object' ). - self deny: (spec matches: 'some different object') -] - -{ #category : #tests } -SpecOfEqualityTests >> testMatchesByteArray [ - - | spec | - spec := SpecOfEquality requiredValue: #[1 2 3]. - - self assert: (spec matches: #[1 2 3] copy). - self deny: (spec matches: #[3 2 1]) -] - -{ #category : #tests } -SpecOfEqualityTests >> testMatchesToEqualCollectionWithAnotherOrder [ - - | spec | - spec := SpecOfEquality requiredValue: #(1 2 3). - - self assert: (spec matches: #(2 1 3 )) -] - -{ #category : #tests } -SpecOfEqualityTests >> testMatchesWithDenial [ - - | spec | - spec := (SpecOfEquality requiredValue: 'some object') not. - - self deny: (spec matches: 'some object' ). - self assert: (spec matches: 'some different object') -] - -{ #category : #tests } -SpecOfEqualityTests >> testValidateFailed [ - | requiredValue subject spec result | - - requiredValue := 'Object'. - subject := 'Other object'. - spec := SpecOfEquality requiredValue: requiredValue. - result := spec validate: subject. - self assert: result isFailure. - self assert: result subject == subject. - self assert: result spec == spec. -] - -{ #category : #tests } -SpecOfEqualityTests >> testValidateFailedIfDenialSpec [ - | requiredValue subject spec result | - requiredValue := 'Object'. - subject := requiredValue. - - spec := SpecOfEquality requiredValue: requiredValue. - spec denial: true. - result := spec validate: subject. - self assert: result isFailure. - self assert: result subject == subject. - self assert: result spec == spec -] - -{ #category : #tests } -SpecOfEqualityTests >> testValidateSuccessful [ - | requiredValue subject spec result | - requiredValue := 'Object'. - subject := requiredValue. - - spec := SpecOfEquality requiredValue: requiredValue. - result := spec validate: subject. - self assert: result isSuccess -] - -{ #category : #tests } -SpecOfEqualityTests >> testValidateSuccessfulIfDenialSpec [ - | requiredValue subject spec result | - requiredValue := 'Object'. - subject := 'Other object'. - spec := SpecOfEquality requiredValue: requiredValue. - spec denial: true. - result := spec validate: subject. - self assert: result isSuccess -] diff --git a/src/StateSpecs-Specs-Tests/SpecOfGreaterMagnitudeTests.class.st b/src/StateSpecs-Specs-Tests/SpecOfGreaterMagnitudeTests.class.st deleted file mode 100644 index b5ca25577..000000000 --- a/src/StateSpecs-Specs-Tests/SpecOfGreaterMagnitudeTests.class.st +++ /dev/null @@ -1,34 +0,0 @@ -Class { - #name : #SpecOfGreaterMagnitudeTests, - #superclass : #TestCase, - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #testing } -SpecOfGreaterMagnitudeTests >> testMatchesWithStrongOption [ - | requiredValue spec | - requiredValue := 10. - spec := SpecOfGreaterMagnitude than: requiredValue strong: true. - self deny: (spec matches: requiredValue). - self deny: (spec matches: requiredValue - 1). - self assert: (spec matches: requiredValue + 1) -] - -{ #category : #testing } -SpecOfGreaterMagnitudeTests >> testMatchesWithoutStrongOption [ - | requiredValue spec | - requiredValue := 10. - spec := SpecOfGreaterMagnitude than: requiredValue strong: false. - self assert: (spec matches: requiredValue). - self deny: (spec matches: requiredValue - 1). - self assert: (spec matches: requiredValue + 1) -] - -{ #category : #testing } -SpecOfGreaterMagnitudeTests >> testNotStrongByDefault [ - - | spec | - spec := SpecOfGreaterMagnitude new. - - self deny: spec isStrong -] diff --git a/src/StateSpecs-Specs-Tests/SpecOfIdentityTests.class.st b/src/StateSpecs-Specs-Tests/SpecOfIdentityTests.class.st deleted file mode 100644 index 493a85a59..000000000 --- a/src/StateSpecs-Specs-Tests/SpecOfIdentityTests.class.st +++ /dev/null @@ -1,14 +0,0 @@ -Class { - #name : #SpecOfIdentityTests, - #superclass : #TestCase, - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #tests } -SpecOfIdentityTests >> testMatches [ - | pattern spec | - pattern := 'some object'. - spec := SpecOfIdentity requiredValue: pattern. - self assert: (spec matches: pattern). - self deny: (spec matches: 'some object' copy) -] diff --git a/src/StateSpecs-Specs-Tests/SpecOfLesserMagnitudeTests.class.st b/src/StateSpecs-Specs-Tests/SpecOfLesserMagnitudeTests.class.st deleted file mode 100644 index d6f7a03d3..000000000 --- a/src/StateSpecs-Specs-Tests/SpecOfLesserMagnitudeTests.class.st +++ /dev/null @@ -1,34 +0,0 @@ -Class { - #name : #SpecOfLesserMagnitudeTests, - #superclass : #TestCase, - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #testing } -SpecOfLesserMagnitudeTests >> testMatchesWithStrongOption [ - | requiredValue spec | - requiredValue := 10. - spec := SpecOfLesserMagnitude than: requiredValue strong: true. - self deny: (spec matches: requiredValue). - self deny: (spec matches: requiredValue + 1). - self assert: (spec matches: requiredValue - 1) -] - -{ #category : #testing } -SpecOfLesserMagnitudeTests >> testMatchesWithoutStrongOption [ - | requiredValue spec | - requiredValue := 10. - spec := SpecOfLesserMagnitude than: requiredValue strong: false. - self assert: (spec matches: requiredValue). - self deny: (spec matches: requiredValue + 1). - self assert: (spec matches: requiredValue - 1) -] - -{ #category : #testing } -SpecOfLesserMagnitudeTests >> testNotStrongByDefault [ - - | spec | - spec := SpecOfLesserMagnitude new. - - self deny: spec isStrong -] diff --git a/src/StateSpecs-Specs-Tests/SpecOfNegationTests.class.st b/src/StateSpecs-Specs-Tests/SpecOfNegationTests.class.st deleted file mode 100644 index 397a03351..000000000 --- a/src/StateSpecs-Specs-Tests/SpecOfNegationTests.class.st +++ /dev/null @@ -1,56 +0,0 @@ -Class { - #name : #SpecOfNegationTests, - #superclass : #TestCase, - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #tests } -SpecOfNegationTests >> testMatches [ - | spec1 spec2 stateSpec | - spec1 := SpecOfEquality requiredValue: 2. - spec2 := SpecOfObjectSuperclass requiredClass: String. - - stateSpec := SpecOfNegation of: spec1 and: spec2. - - self deny: (stateSpec matches: 2). - self deny: (stateSpec matches: 'someString'). - self assert: (stateSpec matches: 10) -] - -{ #category : #tests } -SpecOfNegationTests >> testValidateFailed [ - | spec1 spec2 stateSpec result | - spec1 := SpecOfEquality requiredValue: 2. - spec2 := SpecOfObjectSuperclass requiredClass: String. - - stateSpec := SpecOfNegation of: spec1 and: spec2. - result := stateSpec validate: 2. - - self assert: result isFailure. - self assert: result spec == spec1 -] - -{ #category : #tests } -SpecOfNegationTests >> testValidateFailed2 [ - | spec1 spec2 stateSpec result | - spec1 := SpecOfEquality requiredValue: 2. - spec2 := SpecOfObjectSuperclass requiredClass: String. - - stateSpec := SpecOfNegation of: spec1 and: spec2. - result := stateSpec validate: 'someString'. - - self assert: result isFailure. - self assert: result spec == spec2 -] - -{ #category : #tests } -SpecOfNegationTests >> testValidateSuccessful [ - | spec1 spec2 stateSpec result | - spec1 := SpecOfEquality requiredValue: 2. - spec2 := SpecOfObjectSuperclass requiredClass: String. - - stateSpec := SpecOfNegation of: spec1 and: spec2. - result := stateSpec validate: 5. - - self assert: result isSuccess -] diff --git a/src/StateSpecs-Specs-Tests/SpecOfObjectClassTests.class.st b/src/StateSpecs-Specs-Tests/SpecOfObjectClassTests.class.st deleted file mode 100644 index 1a372f2c9..000000000 --- a/src/StateSpecs-Specs-Tests/SpecOfObjectClassTests.class.st +++ /dev/null @@ -1,13 +0,0 @@ -Class { - #name : #SpecOfObjectClassTests, - #superclass : #TestCase, - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #tests } -SpecOfObjectClassTests >> testMatches [ - | spec | - spec := SpecOfObjectClass requiredClass: SmallInteger. - self assert: (spec matches: 10). - self deny: (spec matches: 10.0) -] diff --git a/src/StateSpecs-Specs-Tests/SpecOfObjectResponsibilityTests.class.st b/src/StateSpecs-Specs-Tests/SpecOfObjectResponsibilityTests.class.st deleted file mode 100644 index 2d647aca4..000000000 --- a/src/StateSpecs-Specs-Tests/SpecOfObjectResponsibilityTests.class.st +++ /dev/null @@ -1,13 +0,0 @@ -Class { - #name : #SpecOfObjectResponsibilityTests, - #superclass : #TestCase, - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #tests } -SpecOfObjectResponsibilityTests >> testMatches [ - | spec | - spec := SpecOfObjectResponsibility for: #+. - self assert: (spec matches: 10). - self deny: (spec matches: Object new) -] diff --git a/src/StateSpecs-Specs-Tests/SpecOfObjectStateByPredicateTests.class.st b/src/StateSpecs-Specs-Tests/SpecOfObjectStateByPredicateTests.class.st deleted file mode 100644 index 28c6a9f8c..000000000 --- a/src/StateSpecs-Specs-Tests/SpecOfObjectStateByPredicateTests.class.st +++ /dev/null @@ -1,22 +0,0 @@ -Class { - #name : #SpecOfObjectStateByPredicateTests, - #superclass : #TestCase, - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #tests } -SpecOfObjectStateByPredicateTests >> testCreationFromBlock [ - | subject result | - subject := [:arg | true]. - result := subject asStateSpec. - self assert: result class = SpecOfObjectStateByPredicate. - self assert: result predicate == subject -] - -{ #category : #tests } -SpecOfObjectStateByPredicateTests >> testMatches [ - | spec | - spec := SpecOfObjectStateByPredicate from: [:arg | arg > 0]. - self assert: (spec matches: 10). - self deny: (spec matches: -10) -] diff --git a/src/StateSpecs-Specs-Tests/SpecOfObjectStateTests.class.st b/src/StateSpecs-Specs-Tests/SpecOfObjectStateTests.class.st deleted file mode 100644 index a8f6ec5d3..000000000 --- a/src/StateSpecs-Specs-Tests/SpecOfObjectStateTests.class.st +++ /dev/null @@ -1,74 +0,0 @@ -Class { - #name : #SpecOfObjectStateTests, - #superclass : #TestCase, - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #tests } -SpecOfObjectStateTests >> testAsStateSpec [ - | stateSpec | - stateSpec := SpecOfObjectState new. - self assert: stateSpec asStateSpec == stateSpec -] - -{ #category : #tests } -SpecOfObjectStateTests >> testDescriptionWithTitle [ - | stateSpec result | - stateSpec := SpecOfObjectState new. - stateSpec title: 'some title'. - result := stateSpec description. - self assert: result = 'should some title' -] - -{ #category : #tests } -SpecOfObjectStateTests >> testDescriptionWithTitleButDenial [ - | stateSpec result | - stateSpec := SpecOfObjectState new. - stateSpec - title: 'some title'; - denial: true. - result := stateSpec description. - self assert: result = 'should not some title' -] - -{ #category : #tests } -SpecOfObjectStateTests >> testDescriptionWithoutTitle [ - | stateSpec result expected | - stateSpec := SpecOfObjectState new. - result := stateSpec description. - expected := 'should satisfy for ' , stateSpec class name. - self assert: result = expected -] - -{ #category : #tests } -SpecOfObjectStateTests >> testDescriptionWithoutTitleAndDenial [ - | stateSpec result expected | - stateSpec := SpecOfObjectState new. - stateSpec denial: true. - result := stateSpec description. - expected := 'should not satisfy for ' , stateSpec class name. - self assert: result = expected -] - -{ #category : #tests } -SpecOfObjectStateTests >> testIsStateSpec [ - | stateSpec | - stateSpec := SpecOfObjectState new. - self assert: stateSpec isStateSpec -] - -{ #category : #tests } -SpecOfObjectStateTests >> testNotDenialByDefault [ - | stateSpec | - stateSpec := SpecOfObjectState new. - self deny: stateSpec denial -] - -{ #category : #tests } -SpecOfObjectStateTests >> testTitleByDefault [ - | stateSpec result expected | - stateSpec := SpecOfObjectState new. - result := stateSpec title. - expected := 'satisfy for ' , stateSpec class name. - self assert: result = expected -] diff --git a/src/StateSpecs-Specs-Tests/SpecOfObjectSuperclassTests.class.st b/src/StateSpecs-Specs-Tests/SpecOfObjectSuperclassTests.class.st deleted file mode 100644 index bdb79f1d7..000000000 --- a/src/StateSpecs-Specs-Tests/SpecOfObjectSuperclassTests.class.st +++ /dev/null @@ -1,21 +0,0 @@ -Class { - #name : #SpecOfObjectSuperclassTests, - #superclass : #TestCase, - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #tests } -SpecOfObjectSuperclassTests >> testMatches [ - | spec | - spec := SpecOfObjectSuperclass requiredClass: Integer. - self assert: (spec matches: 10). - self deny: (spec matches: 10.0) -] - -{ #category : #tests } -SpecOfObjectSuperclassTests >> testMatches2 [ - | spec | - spec := SpecOfObjectSuperclass requiredClass: SmallInteger. - self assert: (spec matches: 10). - self deny: (spec matches: 10.0) -] diff --git a/src/StateSpecs-Specs-Tests/SpecOfOrDisjunctionTests.class.st b/src/StateSpecs-Specs-Tests/SpecOfOrDisjunctionTests.class.st deleted file mode 100644 index a92b2d48f..000000000 --- a/src/StateSpecs-Specs-Tests/SpecOfOrDisjunctionTests.class.st +++ /dev/null @@ -1,67 +0,0 @@ -Class { - #name : #SpecOfOrDisjunctionTests, - #superclass : #TestCase, - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #tests } -SpecOfOrDisjunctionTests >> testCreationByBinaryMessage [ - | spec1 spec2 compositeSpec | - spec1 := SpecOfObjectState new. - spec2 := SpecOfObjectState new. - compositeSpec := spec1 | spec2. - self assert: compositeSpec class = SpecOfOrDisjunction. - self assert: compositeSpec specs first == spec1. - self assert: compositeSpec specs last == spec2 -] - -{ #category : #tests } -SpecOfOrDisjunctionTests >> testMatches [ - | spec1 spec2 stateSpec result | - spec1 := SpecOfEquality requiredValue: 2. - spec2 := SpecOfObjectSuperclass requiredClass: String. - - stateSpec := SpecOfOrDisjunction of: spec1 and: spec2. - result := stateSpec validate: 5. - - self deny: (stateSpec matches: 3). - self assert: (stateSpec matches: 2). - self assert: (stateSpec matches: 'someValue') -] - -{ #category : #tests } -SpecOfOrDisjunctionTests >> testValidateFailed [ - | spec1 spec2 stateSpec result | - spec1 := SpecOfEquality requiredValue: 2. - spec2 := SpecOfObjectSuperclass requiredClass: String. - - stateSpec := SpecOfOrDisjunction of: spec1 and: spec2. - result := stateSpec validate: 5. - - self assert: result isFailure. - self assert: result spec == stateSpec -] - -{ #category : #tests } -SpecOfOrDisjunctionTests >> testValidateSuccessful [ - | spec1 spec2 stateSpec result | - spec1 := SpecOfEquality requiredValue: 2. - spec2 := SpecOfObjectSuperclass requiredClass: String. - - stateSpec := SpecOfOrDisjunction of: spec1 and: spec2. - result := stateSpec validate: 2. - - self assert: result isSuccess -] - -{ #category : #tests } -SpecOfOrDisjunctionTests >> testValidateSuccessful2 [ - | spec1 spec2 stateSpec result | - spec1 := SpecOfEquality requiredValue: 2. - spec2 := SpecOfObjectSuperclass requiredClass: String. - - stateSpec := SpecOfOrDisjunction of: spec1 and: spec2. - result := stateSpec validate: 'someString'. - - self assert: result isSuccess -] diff --git a/src/StateSpecs-Specs-Tests/SpecOfStringBeginningTests.class.st b/src/StateSpecs-Specs-Tests/SpecOfStringBeginningTests.class.st deleted file mode 100644 index 225891a2e..000000000 --- a/src/StateSpecs-Specs-Tests/SpecOfStringBeginningTests.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #SpecOfStringBeginningTests, - #superclass : #TestCase, - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #tests } -SpecOfStringBeginningTests >> testMatches [ - | spec | - spec := SpecOfStringBeginning requiredValue: 'test'. - - self assert: (spec matches: 'test string'). - self assert: (spec matches: 'Test string'). - self deny: (spec matches: 'some test string') -] - -{ #category : #tests } -SpecOfStringBeginningTests >> testMatchesCaseSensitive [ - | spec | - spec := SpecOfStringBeginning requiredValue: 'test' caseSensitive: true. - - self assert: (spec matches: 'test string'). - self deny: (spec matches: 'Test string'). - self deny: (spec matches: 'some test string') -] diff --git a/src/StateSpecs-Specs-Tests/SpecOfStringEndingTests.class.st b/src/StateSpecs-Specs-Tests/SpecOfStringEndingTests.class.st deleted file mode 100644 index 0b3a13f80..000000000 --- a/src/StateSpecs-Specs-Tests/SpecOfStringEndingTests.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #SpecOfStringEndingTests, - #superclass : #TestCase, - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #tests } -SpecOfStringEndingTests >> testMatches [ - | spec | - spec := SpecOfStringEnding requiredValue: 'test'. - - self assert: (spec matches: 'string for test'). - self assert: (spec matches: 'string for Test'). - self deny: (spec matches: 'some test string') -] - -{ #category : #tests } -SpecOfStringEndingTests >> testMatchesCaseSensitive [ - | spec | - spec := SpecOfStringEnding requiredValue: 'test' caseSensitive: true. - - self assert: (spec matches: 'string for test'). - self deny: (spec matches: 'string for Test'). - self deny: (spec matches: 'some test string') -] diff --git a/src/StateSpecs-Specs-Tests/SpecOfStringRegexTests.class.st b/src/StateSpecs-Specs-Tests/SpecOfStringRegexTests.class.st deleted file mode 100644 index f3157fe11..000000000 --- a/src/StateSpecs-Specs-Tests/SpecOfStringRegexTests.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #SpecOfStringRegexTests, - #superclass : #TestCase, - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #tests } -SpecOfStringRegexTests >> testMatches [ - | spec | - spec := SpecOfStringRegex requiredValue: '^test'. - - self assert: (spec matches: 'test string'). - self assert: (spec matches: 'Test string'). - self deny: (spec matches: 'some test string') -] - -{ #category : #tests } -SpecOfStringRegexTests >> testMatchesCaseSensitive [ - | spec | - spec := SpecOfStringRegex requiredValue: '^test' caseSensitive: true. - - self assert: (spec matches: 'test string'). - self deny: (spec matches: 'Test string'). - self deny: (spec matches: 'some test string') -] diff --git a/src/StateSpecs-Specs-Tests/SpecOfSubstringTests.class.st b/src/StateSpecs-Specs-Tests/SpecOfSubstringTests.class.st deleted file mode 100644 index 969dbd911..000000000 --- a/src/StateSpecs-Specs-Tests/SpecOfSubstringTests.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #SpecOfSubstringTests, - #superclass : #TestCase, - #category : 'StateSpecs-Specs-Tests' -} - -{ #category : #tests } -SpecOfSubstringTests >> testMatches [ - | spec | - spec := SpecOfSubstring requiredValue: 'test'. - - self assert: (spec matches: 'some test string'). - self assert: (spec matches: 'some Test string'). - self deny: (spec matches: 'some string') -] - -{ #category : #tests } -SpecOfSubstringTests >> testMatchesCaseSensitive [ - | spec | - spec := SpecOfSubstring requiredValue: 'test' caseSensitive: true. - - self assert: (spec matches: 'some test string'). - self deny: (spec matches: 'some Test string'). - self deny: (spec matches: 'some string') -] diff --git a/src/StateSpecs-Specs-Tests/package.st b/src/StateSpecs-Specs-Tests/package.st deleted file mode 100644 index d0336bec9..000000000 --- a/src/StateSpecs-Specs-Tests/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'StateSpecs-Specs-Tests' } diff --git a/src/StateSpecs-Specs/Any.class.st b/src/StateSpecs-Specs/Any.class.st deleted file mode 100644 index 01147fac5..000000000 --- a/src/StateSpecs-Specs/Any.class.st +++ /dev/null @@ -1,52 +0,0 @@ -" -I specify any posslble object. -I should be used directly as class to successfully validate any object. - - (Any matches: nil) = true - (Any matches: Object new) = true -" -Class { - #name : #Any, - #superclass : #Object, - #category : 'StateSpecs-Specs' -} - -{ #category : #converting } -Any class >> asSimpleValue [ - ^self name -] - -{ #category : #converting } -Any class >> asStateSpec [ - ^self -] - -{ #category : #validation } -Any class >> basicMatches: anObject [ - ^true -] - -{ #category : #accessing } -Any class >> denial: aBoolean [ - ^self -] - -{ #category : #testing } -Any class >> isSimpleValue [ - ^true -] - -{ #category : #testing } -Any class >> isStateSpec [ - ^true -] - -{ #category : #validation } -Any class >> matches: anObject [ - ^true -] - -{ #category : #validation } -Any class >> validate: anObject [ - ^SpecOfValidationResult success -] diff --git a/src/StateSpecs-Specs/Array.extension.st b/src/StateSpecs-Specs/Array.extension.st deleted file mode 100644 index 4ae25b536..000000000 --- a/src/StateSpecs-Specs/Array.extension.st +++ /dev/null @@ -1,9 +0,0 @@ -Extension { #name : #Array } - -{ #category : #'*StateSpecs-Specs' } -Array >> stringForSpecTitle [ - self shouldBePrintedAsLiteral ifTrue: [^self printString]. - self isSelfEvaluating ifTrue: [^self printString]. - - ^super stringForSpecTitle -] diff --git a/src/StateSpecs-Specs/BlockClosure.extension.st b/src/StateSpecs-Specs/BlockClosure.extension.st deleted file mode 100644 index 9541f1637..000000000 --- a/src/StateSpecs-Specs/BlockClosure.extension.st +++ /dev/null @@ -1,12 +0,0 @@ -Extension { #name : #BlockClosure } - -{ #category : #'*StateSpecs-Specs' } -BlockClosure >> asStateSpec [ - - ^SpecOfObjectStateByPredicate from: self -] - -{ #category : #'*StateSpecs-Specs' } -BlockClosure >> stringForSpecTitle [ - ^self sourceNode formattedCode -] diff --git a/src/StateSpecs-Specs/ByteArray.extension.st b/src/StateSpecs-Specs/ByteArray.extension.st deleted file mode 100644 index 8214a0419..000000000 --- a/src/StateSpecs-Specs/ByteArray.extension.st +++ /dev/null @@ -1,12 +0,0 @@ -Extension { #name : #ByteArray } - -{ #category : #'*StateSpecs-Specs' } -ByteArray >> checkStateSpecsEqualityTo: anotherByteArray [ - - ^self = anotherByteArray -] - -{ #category : #'*StateSpecs-Specs' } -ByteArray >> stringForSpecTitle [ - ^self printString -] diff --git a/src/StateSpecs-Specs/Collection.extension.st b/src/StateSpecs-Specs/Collection.extension.st deleted file mode 100644 index 7319c63ec..000000000 --- a/src/StateSpecs-Specs/Collection.extension.st +++ /dev/null @@ -1,42 +0,0 @@ -Extension { #name : #Collection } - -{ #category : #'*StateSpecs-Specs' } -Collection >> checkStateSpecsEqualityTo: anotherCollection [ - - (anotherCollection isKindOf: Collection) ifFalse: [^false]. - - self size = anotherCollection size ifFalse: [ ^false ]. - - self do: [ :myEach | - (anotherCollection anySatisfy: [ :anotherEach | - myEach checkStateSpecsEqualityTo: anotherEach]) ifFalse: [ ^false ] - ]. - - ^true -] - -{ #category : #'*StateSpecs-Specs' } -Collection >> checkStateSpecsOrderedEqualityTo: anotherCollection [ - - (anotherCollection isKindOf: Collection) ifFalse: [^false]. - - self size = anotherCollection size ifFalse: [ ^false ]. - - self with: anotherCollection do: [ :myEach :anotherEach | - (myEach checkStateSpecsEqualityTo: anotherEach) ifFalse: [ ^false ] - ]. - - ^true -] - -{ #category : #'*StateSpecs-Specs' } -Collection >> stringForSpecTitle [ - ^String streamContents: [:s | - - self printNameOn: s. - s nextPut: ${. - self do: [:element | s << element stringForSpecTitle << '. ']. - self ifNotEmpty: [s skip: -2]. - s nextPut: $} - ] -] diff --git a/src/StateSpecs-Specs/Interval.extension.st b/src/StateSpecs-Specs/Interval.extension.st deleted file mode 100644 index ff0ac64f8..000000000 --- a/src/StateSpecs-Specs/Interval.extension.st +++ /dev/null @@ -1,20 +0,0 @@ -Extension { #name : #Interval } - -{ #category : #'*StateSpecs-Specs' } -Interval >> checkStateSpecsEqualityTo: anotherCollection [ - - (anotherCollection isKindOf: Interval) ifFalse: [^false]. - - ^self = anotherCollection -] - -{ #category : #'*StateSpecs-Specs' } -Interval >> checkStateSpecsOrderedEqualityTo: anotherCollection [ - - ^self checkStateSpecsOrderedEqualityTo: anotherCollection -] - -{ #category : #'*StateSpecs-Specs' } -Interval >> stringForSpecTitle [ - ^self printString -] diff --git a/src/StateSpecs-Specs/Number.extension.st b/src/StateSpecs-Specs/Number.extension.st deleted file mode 100644 index 7c9b71801..000000000 --- a/src/StateSpecs-Specs/Number.extension.st +++ /dev/null @@ -1,13 +0,0 @@ -Extension { #name : #Number } - -{ #category : #'*StateSpecs-Specs' } -Number >> checkStateSpecsEqualityTo: aNumber [ - (aNumber retriveClassForStateSpecs includesBehavior: Number) ifFalse: [ ^false ]. - - ^aNumber isEqual: self within: 0.00000001 -] - -{ #category : #'*StateSpecs-Specs' } -Number >> isEqual: aNumber within: accuracy [ - ^(self - aNumber) abs < accuracy -] diff --git a/src/StateSpecs-Specs/Object.extension.st b/src/StateSpecs-Specs/Object.extension.st deleted file mode 100644 index 4caae528e..000000000 --- a/src/StateSpecs-Specs/Object.extension.st +++ /dev/null @@ -1,33 +0,0 @@ -Extension { #name : #Object } - -{ #category : #'*StateSpecs-Specs' } -Object >> asStateSpec [ - ^SpecOfEquality requiredValue: self -] - -{ #category : #'*StateSpecs-Specs' } -Object >> checkStateSpecsEqualityTo: anObject [ - self class == anObject retriveClassForStateSpecs ifFalse: [ ^false ]. - - ^self = anObject -] - -{ #category : #'*StateSpecs-Specs' } -Object >> isStateSpec [ - ^false -] - -{ #category : #'*StateSpecs-Specs' } -Object >> retriveClassForStateSpecs [ - ^self class -] - -{ #category : #'*StateSpecs-Specs' } -Object >> stringForSpecTitle [ - ^self printString -] - -{ #category : #'*StateSpecs-Specs' } -Object >> stringForSpecValidation [ - ^self stringForSpecTitle -] diff --git a/src/StateSpecs-Specs/Point.extension.st b/src/StateSpecs-Specs/Point.extension.st deleted file mode 100644 index 02f6a3451..000000000 --- a/src/StateSpecs-Specs/Point.extension.st +++ /dev/null @@ -1,13 +0,0 @@ -Extension { #name : #Point } - -{ #category : #'*StateSpecs-Specs' } -Point >> checkStateSpecsEqualityTo: aPoint [ - (aPoint retriveClassForStateSpecs includesBehavior: Point) ifFalse: [ ^false ]. - - ^aPoint isEqual: self within: 0.00000001 -] - -{ #category : #'*StateSpecs-Specs' } -Point >> isEqual: aPoint within: accuracy [ - ^(self dist: aPoint) < accuracy -] diff --git a/src/StateSpecs-Specs/SpecOfAndConjunction.class.st b/src/StateSpecs-Specs/SpecOfAndConjunction.class.st deleted file mode 100644 index 5eb57b452..000000000 --- a/src/StateSpecs-Specs/SpecOfAndConjunction.class.st +++ /dev/null @@ -1,34 +0,0 @@ -" -I implement conjunction of specifications. - -I can be created by & message to spec: - - (Instance of: String) & (Satisfying for: [:o | true]) -" -Class { - #name : #SpecOfAndConjunction, - #superclass : #SpecOfComplexState, - #category : 'StateSpecs-Specs' -} - -{ #category : #testing } -SpecOfAndConjunction >> basicMatches: anObject [ - - ^specs allSatisfy: [ :each | - each matches: anObject ] -] - -{ #category : #printing } -SpecOfAndConjunction >> operatorName [ - ^'and' -] - -{ #category : #validation } -SpecOfAndConjunction >> validate: anObject [ - | result | - specs do: [:eachSpec | - result := eachSpec validate: anObject. - result isFailure ifTrue: [^result]]. - - ^SpecOfValidationResult success -] diff --git a/src/StateSpecs-Specs/SpecOfApproxEquality.class.st b/src/StateSpecs-Specs/SpecOfApproxEquality.class.st deleted file mode 100644 index 71026893d..000000000 --- a/src/StateSpecs-Specs/SpecOfApproxEquality.class.st +++ /dev/null @@ -1,47 +0,0 @@ -" -I describe objects (numbers) which are equal to my required value with particular accuracy. - - 1.1 should equal: 1 within: 0.2 - -My instances can be created by - - SpecOfApproxEquality to: 1 within: 0.2 - -Internal Representation and Key Implementation Points. - - Instance Variables - accuracy: -" -Class { - #name : #SpecOfApproxEquality, - #superclass : #SpecOfObjectValue, - #instVars : [ - 'accuracy' - ], - #category : 'StateSpecs-Specs' -} - -{ #category : #'instance creation' } -SpecOfApproxEquality class >> to: aNumber within: accuracyNumber [ - ^(self requiredValue: aNumber) accuracy: accuracyNumber -] - -{ #category : #accessing } -SpecOfApproxEquality >> accuracy [ - ^accuracy -] - -{ #category : #accessing } -SpecOfApproxEquality >> accuracy: anObject [ - accuracy := anObject -] - -{ #category : #testing } -SpecOfApproxEquality >> basicMatches: aNumber [ - ^aNumber isEqual: requiredValue within: accuracy -] - -{ #category : #displaying } -SpecOfApproxEquality >> defaultTitle [ - ^'be within ' , accuracy stringForSpecTitle , ' of ' , requiredValue stringForSpecTitle -] diff --git a/src/StateSpecs-Specs/SpecOfBlockFailure.class.st b/src/StateSpecs-Specs/SpecOfBlockFailure.class.st deleted file mode 100644 index d48c3f214..000000000 --- a/src/StateSpecs-Specs/SpecOfBlockFailure.class.st +++ /dev/null @@ -1,151 +0,0 @@ -" -I describe blocks which raise specific kind of exceptions. - - [ 1 /0 ] should raise: ZeroDivide - -My instances can be created by: - - SpecOfBlockFailure requiredFailure: ZeroDivide. - -I also support using specs for required failure: - - SpecOfBlockFailure requiredFailure: (Instance of: Error). - -By default I implement special logic to catch unexpected exceptions and return it as special kind of validation falure. For example: - - [ #() at: 1 ] should raise: ZeroDivide - -This code will not show debugger at point of SubscriptOutOfBounds error. But it will show that specification is failed and SubscriptOutOfBounds was thrown instead of ZeroDivide. Pressing proceed in debugger will move it to original failure. - -To disable this behaviour I have variable shouldPassUnexpectedFailure. -Also I have array of special failures which should be always passed without validation logic. It is Halt, MessageNotUnderstood and SpecOfFailed. Usually this errorrs should be thrown immediatly in debugger. - - [ 1 someMessage ] should raise: Error - -This code will open debugger at DNU method where absent message can be created. -But if errors are explicitly expected failures then they will be checked by validation logic: - - [ 1 someMessage ] should raise: MessageNotUnderstood - -This code will not openes debugger because validation is succeed. - -Internal Representation and Key Implementation Points. - - Instance Variables - requiredFailure: - passingFailures: > - shouldPassUnexpectedFailures: - -" -Class { - #name : #SpecOfBlockFailure, - #superclass : #SpecOfObjectState, - #instVars : [ - 'requiredFailure', - 'shouldPassUnexpectedFailures', - 'passingFailures' - ], - #category : 'StateSpecs-Specs' -} - -{ #category : #'instance creation' } -SpecOfBlockFailure class >> requiredFailure: anExceptionClass [ - ^self new requiredFailure: anExceptionClass -] - -{ #category : #testing } -SpecOfBlockFailure >> basicMatches: aBlockContext [ - ^ - [aBlockContext value. - false] on: Exception - do: - [:ex | - (self shouldAlwaysPassFailure: ex) ifTrue: [ex pass]. - (requiredFailure matches: ex) ifTrue: [true] ifFalse: [ - shouldPassUnexpectedFailures ifTrue: [ ex pass] ifFalse: [false] ]] -] - -{ #category : #displaying } -SpecOfBlockFailure >> defaultTitle [ - ^requiredFailure title -] - -{ #category : #initialization } -SpecOfBlockFailure >> initialize [ - super initialize. - - shouldPassUnexpectedFailures := false. - passingFailures := {SpecOfFailed. Halt. MessageNotUnderstood. Deprecation} asOrderedCollection -] - -{ #category : #accessing } -SpecOfBlockFailure >> invertChildren [ - super invertChildren. - requiredFailure invert -] - -{ #category : #accessing } -SpecOfBlockFailure >> passUnexpectedFailures [ - shouldPassUnexpectedFailures := true -] - -{ #category : #accessing } -SpecOfBlockFailure >> requiredFailure [ - ^requiredFailure -] - -{ #category : #accessing } -SpecOfBlockFailure >> requiredFailure: exceptionClassOrSpec [ - - passingFailures remove: exceptionClassOrSpec ifAbsent: [ ]. "if this spec explicitly about passing failure then we should not pass it during validation" - - requiredFailure := self specForFailure: exceptionClassOrSpec -] - -{ #category : #testing } -SpecOfBlockFailure >> shouldAlwaysPassFailure: anException [ - - ^passingFailures anySatisfy: [ :each | - anException isKindOf: each] -] - -{ #category : #accessing } -SpecOfBlockFailure >> shouldPassUnexpectedFailures [ - ^ shouldPassUnexpectedFailures -] - -{ #category : #accessing } -SpecOfBlockFailure >> shouldPassUnexpectedFailures: anObject [ - shouldPassUnexpectedFailures := anObject -] - -{ #category : #accessing } -SpecOfBlockFailure >> specForFailure: exceptionClassOrSpec [ - - ^exceptionClassOrSpec isClass & (exceptionClassOrSpec ~= Any) - ifTrue: [ SpecOfObjectClass requiredClass: exceptionClassOrSpec ] - ifFalse: [ exceptionClassOrSpec asStateSpec ] -] - -{ #category : #validation } -SpecOfBlockFailure >> validate: aBlock [ - - | result | - ^[aBlock value. - (requiredFailure matches: Any) - ifTrue: [ SpecOfValidationResult success ] - ifFalse: [ SpecOfBlockValidationFailure noErrorIn: aBlock butShouldBe: self]] - on: Exception do: [:ex | - (self shouldAlwaysPassFailure: ex) ifTrue: [ex pass]. "we want to pass by default DNU, Halt and internal SpecOfFailed failures" - - requiredFailure denial: denial. - result := requiredFailure validate: ex. - - result isSuccess - ifTrue: [ result ] - ifFalse: [ - shouldPassUnexpectedFailures - ifTrue: [ ex pass ] - ifFalse: [ SpecOfBlockValidationFailure unexpectedError: result in: aBlock butShouldBe: self]] - ] -] diff --git a/src/StateSpecs-Specs/SpecOfBlockValidationFailure.class.st b/src/StateSpecs-Specs/SpecOfBlockValidationFailure.class.st deleted file mode 100644 index 2946770b5..000000000 --- a/src/StateSpecs-Specs/SpecOfBlockValidationFailure.class.st +++ /dev/null @@ -1,64 +0,0 @@ -" -I represent block validation failure for expected exception. -I am implemented to support passing errors logic which described in SpecOfBlockFailure comment. - -Internal Representation and Key Implementation Points. - - Instance Variables - errorValidationResult: -" -Class { - #name : #SpecOfBlockValidationFailure, - #superclass : #SpecOfValidationFailure, - #instVars : [ - 'errorValidationResult' - ], - #category : 'StateSpecs-Specs' -} - -{ #category : #'instance creation' } -SpecOfBlockValidationFailure class >> noErrorIn: aBlock butShouldBe: aSpecOfBlockFailure [ - - ^self spec: aSpecOfBlockFailure for: aBlock - - - -] - -{ #category : #'instance creation' } -SpecOfBlockValidationFailure class >> unexpectedError: errorValidationResult in: aBlock butShouldBe: aSpecOfBlockFailure [ - - ^(self spec: aSpecOfBlockFailure for: aBlock) - errorValidationResult: errorValidationResult - - -] - -{ #category : #debugging } -SpecOfBlockValidationFailure >> debugSpecOver: aSpecFailed [ - - errorValidationResult ifNil: [ ^super debugSpecOver: aSpecFailed ]. - - aSpecFailed allowExtraDebugging. - super debugSpecOver: aSpecFailed. - - spec passUnexpectedFailures. - (spec validate: subject) raise -] - -{ #category : #printing } -SpecOfBlockValidationFailure >> description [ - errorValidationResult ifNil: [ ^'Got no failures but ' , spec description ]. - - ^errorValidationResult description -] - -{ #category : #accessing } -SpecOfBlockValidationFailure >> errorValidationResult [ - ^ errorValidationResult -] - -{ #category : #accessing } -SpecOfBlockValidationFailure >> errorValidationResult: anObject [ - errorValidationResult := anObject -] diff --git a/src/StateSpecs-Specs/SpecOfBooleanProperty.class.st b/src/StateSpecs-Specs/SpecOfBooleanProperty.class.st deleted file mode 100644 index 983535491..000000000 --- a/src/StateSpecs-Specs/SpecOfBooleanProperty.class.st +++ /dev/null @@ -1,59 +0,0 @@ -" -I describe objects which propertyMessage returns true. - - #() should be isEmpty - 10 should be beetween: 1 and: 100 - -My instances can be created by: - - SpecOfBooleanProperty fromMessage: (Message selector: #isEmpty) - -Internal Representation and Key Implementation Points. - - Instance Variables - propertyMessage: - -" -Class { - #name : #SpecOfBooleanProperty, - #superclass : #SpecOfObjectState, - #instVars : [ - 'propertyMessage' - ], - #category : 'StateSpecs-Specs' -} - -{ #category : #'instance creation' } -SpecOfBooleanProperty class >> fromMessage: aMessage [ - ^self new - propertyMessage: aMessage -] - -{ #category : #testing } -SpecOfBooleanProperty >> basicMatches: anObject [ - - | result | - result := propertyMessage sendTo: anObject. - ^result == true -] - -{ #category : #printing } -SpecOfBooleanProperty >> defaultTitle [ - ^'be ', propertyMessage printString -] - -{ #category : #accessing } -SpecOfBooleanProperty >> propertyMessage [ - ^ propertyMessage -] - -{ #category : #accessing } -SpecOfBooleanProperty >> propertyMessage: anObject [ - propertyMessage := anObject -] - -{ #category : #validation } -SpecOfBooleanProperty >> validationFailureFor: anObject [ - - ^SpecOfBooleanPropertyValidationFailure spec: self for: anObject -] diff --git a/src/StateSpecs-Specs/SpecOfBooleanPropertyValidationFailure.class.st b/src/StateSpecs-Specs/SpecOfBooleanPropertyValidationFailure.class.st deleted file mode 100644 index 962fbeedb..000000000 --- a/src/StateSpecs-Specs/SpecOfBooleanPropertyValidationFailure.class.st +++ /dev/null @@ -1,17 +0,0 @@ -" -I represent object validation failure for boolean property. -I provide suitable description for incorrect property -" -Class { - #name : #SpecOfBooleanPropertyValidationFailure, - #superclass : #SpecOfValidationFailure, - #category : 'StateSpecs-Specs' -} - -{ #category : #printing } -SpecOfBooleanPropertyValidationFailure >> description [ - subjectOwner ifNil: [ ^subject stringForSpecValidation , ' ' , spec description]. - - ^super description - -] diff --git a/src/StateSpecs-Specs/SpecOfCollection.class.st b/src/StateSpecs-Specs/SpecOfCollection.class.st deleted file mode 100644 index ae441c505..000000000 --- a/src/StateSpecs-Specs/SpecOfCollection.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -I am root of hierarchy of collection specifications -" -Class { - #name : #SpecOfCollection, - #superclass : #SpecOfObjectState, - #category : 'StateSpecs-Specs' -} diff --git a/src/StateSpecs-Specs/SpecOfCollectionContents.class.st b/src/StateSpecs-Specs/SpecOfCollectionContents.class.st deleted file mode 100644 index dbe9dd9d9..000000000 --- a/src/StateSpecs-Specs/SpecOfCollectionContents.class.st +++ /dev/null @@ -1,57 +0,0 @@ -" -I describe collections which include particular item. - - #(1 2 3) should include: 2 - -My instance can be created by: - - SpecOfCollectionContents requiredItem: 2 - -Required item can be a simple object like in example or it can be full specification: - - #(1 2 3) should include: (Kind of: String) - -Also you can use a block: - - #(1 2 3) should include: [:item | item > 10] - -Block is converted to predicate specification. - -Internal Representation and Key Implementation Points. - - Instance Variables - requiredItem: -" -Class { - #name : #SpecOfCollectionContents, - #superclass : #SpecOfCollection, - #instVars : [ - 'requiredItem' - ], - #category : 'StateSpecs-Specs' -} - -{ #category : #'instance creation' } -SpecOfCollectionContents class >> requiredItem: anObjectOrSpec [ - ^self new requiredItem: anObjectOrSpec -] - -{ #category : #testing } -SpecOfCollectionContents >> basicMatches: aCollection [ - ^aCollection anySatisfy: [ :each | requiredItem matches: each] -] - -{ #category : #displaying } -SpecOfCollectionContents >> defaultTitle [ - ^'include ' , requiredItem printSimpleValue -] - -{ #category : #accessing } -SpecOfCollectionContents >> requiredItem [ - ^requiredItem -] - -{ #category : #accessing } -SpecOfCollectionContents >> requiredItem: anObject [ - requiredItem := anObject asStateSpec -] diff --git a/src/StateSpecs-Specs/SpecOfCollectionItem.class.st b/src/StateSpecs-Specs/SpecOfCollectionItem.class.st deleted file mode 100644 index b1221b364..000000000 --- a/src/StateSpecs-Specs/SpecOfCollectionItem.class.st +++ /dev/null @@ -1,99 +0,0 @@ -" -I describe collection item at concrete collection index or dictionary key. - - #(one two) should include: #one at: 1 - -My instance can be created by: - - SpecOfCollectionItem at: 1 requiredItem: #one. - -Required item can be a simple object like in example or it can be full specification: - - #(one two) should include: (Kind of: String ) at: 1 - -Also you can use a block: - - #(one two) should include: [:item | item isAllDigits] at: 1 - -Block is converted to predicate specification. - -Internal Representation and Key Implementation Points. - - Instance Variables - containingKey: - requiredItem: -" -Class { - #name : #SpecOfCollectionItem, - #superclass : #SpecOfCollection, - #instVars : [ - 'containingKey', - 'requiredItem' - ], - #category : 'StateSpecs-Specs' -} - -{ #category : #'instance creation' } -SpecOfCollectionItem class >> at: keyObject requiredItem: itemObject [ - ^self new - containingKey: keyObject; - requiredItem: itemObject -] - -{ #category : #testing } -SpecOfCollectionItem >> basicMatches: aCollection [ - | actualItem | - actualItem := aCollection at: containingKey ifAbsent: [^false]. - - ^requiredItem matches: actualItem -] - -{ #category : #accessing } -SpecOfCollectionItem >> containingKey [ - ^ containingKey -] - -{ #category : #accessing } -SpecOfCollectionItem >> containingKey: anObject [ - containingKey := anObject -] - -{ #category : #accessing } -SpecOfCollectionItem >> defaultTitle [ - ^'include ', requiredItem printSimpleValue, ' at ' , containingKey stringForSpecTitle -] - -{ #category : #accessing } -SpecOfCollectionItem >> invertChildren [ - super invertChildren. - - requiredItem invert -] - -{ #category : #printing } -SpecOfCollectionItem >> itemDescription [ - ^requiredItem description -] - -{ #category : #accessing } -SpecOfCollectionItem >> requiredItem [ - ^ requiredItem -] - -{ #category : #accessing } -SpecOfCollectionItem >> requiredItem: anObject [ - requiredItem := anObject asStateSpec -] - -{ #category : #validation } -SpecOfCollectionItem >> validate: aCollection [ - | actualItem result | - - actualItem := aCollection at: containingKey ifAbsent: [ - ^SpecOfCollectionItemValidationFailure noItemIn: aCollection butShouldBe: self ]. - - result := requiredItem validate: actualItem. - ^result isSuccess - ifTrue: [ result ] - ifFalse: [ ^SpecOfCollectionItemValidationFailure unexpectedItem: actualItem in: aCollection butShouldBe: self ] -] diff --git a/src/StateSpecs-Specs/SpecOfCollectionItemValidationFailure.class.st b/src/StateSpecs-Specs/SpecOfCollectionItemValidationFailure.class.st deleted file mode 100644 index c66ce00a8..000000000 --- a/src/StateSpecs-Specs/SpecOfCollectionItemValidationFailure.class.st +++ /dev/null @@ -1,47 +0,0 @@ -" -I represent collection validation failure for expected item. -I provide more suitable description about wrong collection item. - -Internal Representation and Key Implementation Points. - - Instance Variables - wrongItem: -" -Class { - #name : #SpecOfCollectionItemValidationFailure, - #superclass : #SpecOfValidationFailure, - #instVars : [ - 'wrongItem' - ], - #category : 'StateSpecs-Specs' -} - -{ #category : #'instance creation' } -SpecOfCollectionItemValidationFailure class >> noItemIn: aCollection butShouldBe: aSpecOfCollectionItem [ - - ^self spec: aSpecOfCollectionItem for: aCollection -] - -{ #category : #'instance creation' } -SpecOfCollectionItemValidationFailure class >> unexpectedItem: itemObject in: aCollection butShouldBe: aSpecOfCollectionItem [ - - ^(self spec: aSpecOfCollectionItem for: aCollection) - wrongItem: itemObject -] - -{ #category : #displaying } -SpecOfCollectionItemValidationFailure >> description [ - wrongItem ifNil: [ ^subject stringForSpecValidation, ' not includes key ', spec containingKey printString, ' which item ' , spec itemDescription ]. - - ^'Got "', wrongItem stringForSpecValidation , '" at key ', spec containingKey printString, ' of ', subject stringForSpecValidation , ' but ', spec itemDescription -] - -{ #category : #accessing } -SpecOfCollectionItemValidationFailure >> wrongItem [ - ^ wrongItem -] - -{ #category : #accessing } -SpecOfCollectionItemValidationFailure >> wrongItem: anObject [ - wrongItem := anObject -] diff --git a/src/StateSpecs-Specs/SpecOfCollectionOrderedEquality.class.st b/src/StateSpecs-Specs/SpecOfCollectionOrderedEquality.class.st deleted file mode 100644 index dbde24f5b..000000000 --- a/src/StateSpecs-Specs/SpecOfCollectionOrderedEquality.class.st +++ /dev/null @@ -1,29 +0,0 @@ -" -I describe all collections which contains equal elements in same order. - - #(1 2) should equalInOrder: #(1 2) - -My instances can be created by - - SpecOfCollectionOrderedEquality to: #(1). - -To compare collections I use message - collection checkStateSpecsOrderedEqualityTo: anotherCollection -Collection items compared by - eachItem checkStateSpecsEqualityTo: anotherItem -" -Class { - #name : #SpecOfCollectionOrderedEquality, - #superclass : #SpecOfObjectValue, - #category : 'StateSpecs-Specs' -} - -{ #category : #testing } -SpecOfCollectionOrderedEquality >> basicMatches: aCollection [ - ^aCollection checkStateSpecsOrderedEqualityTo: requiredValue -] - -{ #category : #displaying } -SpecOfCollectionOrderedEquality >> clauseKeyword [ - ^'equal in order to' -] diff --git a/src/StateSpecs-Specs/SpecOfCollectionSize.class.st b/src/StateSpecs-Specs/SpecOfCollectionSize.class.st deleted file mode 100644 index 0ca571c4e..000000000 --- a/src/StateSpecs-Specs/SpecOfCollectionSize.class.st +++ /dev/null @@ -1,52 +0,0 @@ -" -I describe collections of particular size. - - #(1 2) should haveSize: 2 - -My instances can be created by: - - SpecOfCollectionSize requiredSize: 2 - -Internal Representation and Key Implementation Points. - - Instance Variables - requiredSize: -" -Class { - #name : #SpecOfCollectionSize, - #superclass : #SpecOfCollection, - #instVars : [ - 'requiredSize' - ], - #category : 'StateSpecs-Specs' -} - -{ #category : #'instance creation' } -SpecOfCollectionSize class >> requiredSize: anInteger [ - ^self new requiredSize: anInteger -] - -{ #category : #testing } -SpecOfCollectionSize >> basicMatches: aCollection [ - ^aCollection size = requiredSize -] - -{ #category : #displaying } -SpecOfCollectionSize >> defaultTitle [ - ^'have ' , requiredSize printString , ' elements' -] - -{ #category : #accessing } -SpecOfCollectionSize >> requiredSize [ - ^requiredSize -] - -{ #category : #accessing } -SpecOfCollectionSize >> requiredSize: anInteger [ - requiredSize := anInteger -] - -{ #category : #accessing } -SpecOfCollectionSize >> requiredValue [ - ^requiredSize -] diff --git a/src/StateSpecs-Specs/SpecOfComplexState.class.st b/src/StateSpecs-Specs/SpecOfComplexState.class.st deleted file mode 100644 index 82b2dfff2..000000000 --- a/src/StateSpecs-Specs/SpecOfComplexState.class.st +++ /dev/null @@ -1,97 +0,0 @@ -" -I am root of hierarchy of composite specifications. - -My instance can be created by binary messages to spec instances: - - (Instance of: String) & (Satisfying for: [:o | true]) - (Instance of: String) | (Satisfying for: [:o | true]) - -Internal Representation and Key Implementation Points. - - Instance Variables - specs: > -" -Class { - #name : #SpecOfComplexState, - #superclass : #SpecOfObjectState, - #instVars : [ - 'specs' - ], - #category : 'StateSpecs-Specs' -} - -{ #category : #'instance creation' } -SpecOfComplexState class >> of: arrayOfPatterns [ - ^self new specs: (arrayOfPatterns collect: [:each | each asStateSpec]) -] - -{ #category : #'instance creation' } -SpecOfComplexState class >> of: pattern1 and: pattern2 [ - ^self of: (Array with: pattern1 with: pattern2) -] - -{ #category : #'instance creation' } -SpecOfComplexState class >> of: pattern1 and: pattern2 and: pattern3 [ - ^self of: (Array - with: pattern1 - with: pattern2 - with: pattern3) -] - -{ #category : #accessing } -SpecOfComplexState >> addSpec: aStateSpec [ - specs add: aStateSpec -] - -{ #category : #accessing } -SpecOfComplexState >> addSpecs: aCollectionOfSpecs [ - specs addAll: aCollectionOfSpecs -] - -{ #category : #copying } -SpecOfComplexState >> copy [ - | result | - result := super copy. - - result specs: (specs collect: [:each | each copy]). - - ^result -] - -{ #category : #printing } -SpecOfComplexState >> defaultTitle [ - ^String streamContents: [ :s | - specs do: [ :each | - s << each title. - each == specs last ifFalse: [ s << ' ' << self operatorName << ' ' ]] - ] -] - -{ #category : #initialization } -SpecOfComplexState >> initialize [ - super initialize. - - specs := OrderedCollection new -] - -{ #category : #accessing } -SpecOfComplexState >> invertChildren [ - super invertChildren. - - specs do: #invert -] - -{ #category : #printing } -SpecOfComplexState >> operatorName [ - self subclassResponsibility -] - -{ #category : #accessing } -SpecOfComplexState >> specs [ - ^specs -] - -{ #category : #accessing } -SpecOfComplexState >> specs: anArray [ - specs := anArray -] diff --git a/src/StateSpecs-Specs/SpecOfDictionaryKeys.class.st b/src/StateSpecs-Specs/SpecOfDictionaryKeys.class.st deleted file mode 100644 index eeca594fa..000000000 --- a/src/StateSpecs-Specs/SpecOfDictionaryKeys.class.st +++ /dev/null @@ -1,47 +0,0 @@ -" -I describe any dictionare which contains particular key. - - (Dictionary newFromPairs: #(key value)) should includeKey: #key - -My instances can be created by - - SpecOfDictionaryKeys requiredKey: #key - -Internal Representation and Key Implementation Points. - - Instance Variables - requiredKey: -" -Class { - #name : #SpecOfDictionaryKeys, - #superclass : #SpecOfCollection, - #instVars : [ - 'requiredKey' - ], - #category : 'StateSpecs-Specs' -} - -{ #category : #'instance creation' } -SpecOfDictionaryKeys class >> requiredKey: anObject [ - ^self new requiredKey: anObject -] - -{ #category : #testing } -SpecOfDictionaryKeys >> basicMatches: aCollection [ - ^aCollection includesKey: requiredKey -] - -{ #category : #displaying } -SpecOfDictionaryKeys >> defaultTitle [ - ^'include key ' , requiredKey stringForSpecTitle -] - -{ #category : #accessing } -SpecOfDictionaryKeys >> requiredKey [ - ^requiredKey -] - -{ #category : #accessing } -SpecOfDictionaryKeys >> requiredKey: anObject [ - requiredKey := anObject -] diff --git a/src/StateSpecs-Specs/SpecOfEquality.class.st b/src/StateSpecs-Specs/SpecOfEquality.class.st deleted file mode 100644 index 3e4da9004..000000000 --- a/src/StateSpecs-Specs/SpecOfEquality.class.st +++ /dev/null @@ -1,40 +0,0 @@ -" -I describe all objects which are equal to my required value. - - 'object' should equal: 'another object' - -My instances can be created by - - SpecOfEquality to: 1. - -I am supposed to check logical equalence between two objects. -In case of collections it means that I not check order of elements. I only check that both collection contains equal elements. To describe ordered equality of collections use SpecOfCollectionOrderedEquality (look at it comment). - -I use special message to compared objects: - eachObject checkStateSpecsEqualityTo: anotherObject -" -Class { - #name : #SpecOfEquality, - #superclass : #SpecOfObjectValue, - #category : 'StateSpecs-Specs' -} - -{ #category : #converting } -SpecOfEquality >> asSimpleValue [ - ^requiredValue -] - -{ #category : #testing } -SpecOfEquality >> basicMatches: anObject [ - ^anObject checkStateSpecsEqualityTo: requiredValue -] - -{ #category : #displaying } -SpecOfEquality >> clauseKeyword [ - ^'equal' -] - -{ #category : #testing } -SpecOfEquality >> isSimpleValue [ - ^true -] diff --git a/src/StateSpecs-Specs/SpecOfFailed.class.st b/src/StateSpecs-Specs/SpecOfFailed.class.st deleted file mode 100644 index f33cc185b..000000000 --- a/src/StateSpecs-Specs/SpecOfFailed.class.st +++ /dev/null @@ -1,71 +0,0 @@ -" -I am exception to signal specification failure. - -SpecOfValidationFailure signals me by #raise method. - validationResult raise - -Internal Representation and Key Implementation Points. - - Instance Variables - reason: - -" -Class { - #name : #SpecOfFailed, - #superclass : #AssertionFailure, - #instVars : [ - 'reason' - ], - #category : #'StateSpecs-Specs' -} - -{ #category : #'instance creation' } -SpecOfFailed class >> raiseWith: aValidationFailing [ - (self withReason: aValidationFailing) signal -] - -{ #category : #'instance creation' } -SpecOfFailed class >> withReason: aValidationFailing [ - ^self new reason: aValidationFailing -] - -{ #category : #accessing } -SpecOfFailed >> allowExtraDebugging [ - - messageText := self messageText, '. Proceed to debug it' -] - -{ #category : #'private - actions' } -SpecOfFailed >> defaultAction [ - ^reason debugSpecOver: self -] - -{ #category : #private } -SpecOfFailed >> defaultResumeValue [ - ^ reason -] - -{ #category : #testing } -SpecOfFailed >> isResumable [ - ^true -] - -{ #category : #displaying } -SpecOfFailed >> messageText [ - ^messageText ifNil: [messageText := reason description] -] - -{ #category : #accessing } -SpecOfFailed >> reason [ - ^ reason -] - -{ #category : #accessing } -SpecOfFailed >> reason: anObject [ - reason := anObject -] - -{ #category : #'sunit support' } -SpecOfFailed >> sunitAnnounce: aTestCase toResult: aTestResult [ - aTestResult addFailure: aTestCase -] diff --git a/src/StateSpecs-Specs/SpecOfGreaterMagnitude.class.st b/src/StateSpecs-Specs/SpecOfGreaterMagnitude.class.st deleted file mode 100644 index 7f04bec66..000000000 --- a/src/StateSpecs-Specs/SpecOfGreaterMagnitude.class.st +++ /dev/null @@ -1,26 +0,0 @@ -" -I describe magnitudes which are greater than my required value. - - 10 should beGreaterThan: 1 - -My instances can be created by - - SpecOfGreaterMagnitude than: 1 -" -Class { - #name : #SpecOfGreaterMagnitude, - #superclass : #SpecOfMagnitudeOrder, - #category : 'StateSpecs-Specs' -} - -{ #category : #testing } -SpecOfGreaterMagnitude >> basicMatches: anObject [ - isStrong ifTrue: [^anObject > requiredValue]. - - ^anObject >= requiredValue -] - -{ #category : #displaying } -SpecOfGreaterMagnitude >> clauseKeyword [ - ^self isStrong ifTrue: [ '>' ] ifFalse: [ '>=' ] -] diff --git a/src/StateSpecs-Specs/SpecOfIdentity.class.st b/src/StateSpecs-Specs/SpecOfIdentity.class.st deleted file mode 100644 index 6d94926b5..000000000 --- a/src/StateSpecs-Specs/SpecOfIdentity.class.st +++ /dev/null @@ -1,39 +0,0 @@ -" -I describe all objects which are identical to my required value. - - 1 should be: 1 - -My instances can be created by - - SpecOfIdentity to: 1 -" -Class { - #name : #SpecOfIdentity, - #superclass : #SpecOfObjectValue, - #category : 'StateSpecs-Specs' -} - -{ #category : #accessing } -SpecOfIdentity class >> to: requiredValue [ - ^self requiredValue: requiredValue -] - -{ #category : #converting } -SpecOfIdentity >> asSimpleValue [ - ^requiredValue -] - -{ #category : #testing } -SpecOfIdentity >> basicMatches: anObject [ - ^requiredValue == anObject -] - -{ #category : #displaying } -SpecOfIdentity >> clauseKeyword [ - ^'be' -] - -{ #category : #testing } -SpecOfIdentity >> isSimpleValue [ - ^true -] diff --git a/src/StateSpecs-Specs/SpecOfLesserMagnitude.class.st b/src/StateSpecs-Specs/SpecOfLesserMagnitude.class.st deleted file mode 100644 index b18199609..000000000 --- a/src/StateSpecs-Specs/SpecOfLesserMagnitude.class.st +++ /dev/null @@ -1,26 +0,0 @@ -" -I describe magnitudes which are less than my required value. - - 1 should beLessThan: 10 - -My instances can be created by - - SpecOfLesserMagnitude than: 10 -" -Class { - #name : #SpecOfLesserMagnitude, - #superclass : #SpecOfMagnitudeOrder, - #category : 'StateSpecs-Specs' -} - -{ #category : #testing } -SpecOfLesserMagnitude >> basicMatches: anObject [ - isStrong ifTrue: [^anObject < requiredValue]. - - ^anObject <= requiredValue -] - -{ #category : #displaying } -SpecOfLesserMagnitude >> clauseKeyword [ - ^self isStrong ifTrue: [ '<' ] ifFalse: [ '<=' ] -] diff --git a/src/StateSpecs-Specs/SpecOfMagnitudeOrder.class.st b/src/StateSpecs-Specs/SpecOfMagnitudeOrder.class.st deleted file mode 100644 index bfc006eae..000000000 --- a/src/StateSpecs-Specs/SpecOfMagnitudeOrder.class.st +++ /dev/null @@ -1,42 +0,0 @@ -" -I am root of hierrarchy of magnitude order specifications. - -Variable isStrong specifes strong comparison for order check - -Internal Representation and Key Implementation Points. - - Instance Variables - isStrong: -" -Class { - #name : #SpecOfMagnitudeOrder, - #superclass : #SpecOfObjectValue, - #instVars : [ - 'isStrong' - ], - #category : 'StateSpecs-Specs' -} - -{ #category : #'instance creation' } -SpecOfMagnitudeOrder class >> than: aMagnidude strong: aBoolean [ - ^self new - isStrong: aBoolean; - requiredValue: aMagnidude; - yourself -] - -{ #category : #'initialize-release' } -SpecOfMagnitudeOrder >> initialize [ - super initialize. - isStrong := false. -] - -{ #category : #accessing } -SpecOfMagnitudeOrder >> isStrong [ - ^ isStrong -] - -{ #category : #accessing } -SpecOfMagnitudeOrder >> isStrong: anObject [ - isStrong := anObject -] diff --git a/src/StateSpecs-Specs/SpecOfNegation.class.st b/src/StateSpecs-Specs/SpecOfNegation.class.st deleted file mode 100644 index 111176233..000000000 --- a/src/StateSpecs-Specs/SpecOfNegation.class.st +++ /dev/null @@ -1,34 +0,0 @@ -" -I implement negation of specifications. - -I can be created by: - - SpecOfNegation of: (Instance of: String) and: (Instance of: Integer) -" -Class { - #name : #SpecOfNegation, - #superclass : #SpecOfComplexState, - #category : 'StateSpecs-Specs' -} - -{ #category : #testing } -SpecOfNegation >> basicMatches: anObject [ - - ^specs allSatisfy: [ :each | - each denial: denial not. - each matches: anObject ] -] - -{ #category : #printing } -SpecOfNegation >> operatorName [ - ^'or' -] - -{ #category : #validation } -SpecOfNegation >> validate: anObject [ - | result | - specs do: [:spec | - result := spec denial: denial not; validate: anObject. - result isFailure ifTrue: [^result]]. - ^SpecOfValidationResult success -] diff --git a/src/StateSpecs-Specs/SpecOfObjectClass.class.st b/src/StateSpecs-Specs/SpecOfObjectClass.class.st deleted file mode 100644 index be4078406..000000000 --- a/src/StateSpecs-Specs/SpecOfObjectClass.class.st +++ /dev/null @@ -1,20 +0,0 @@ -" -I describe all objects of particular class. - - (10@30) should beInstanceOf: Point -" -Class { - #name : #SpecOfObjectClass, - #superclass : #SpecOfObjectRelationship, - #category : 'StateSpecs-Specs' -} - -{ #category : #testing } -SpecOfObjectClass >> basicMatches: anObject [ - ^anObject retriveClassForStateSpecs = requiredClass -] - -{ #category : #displaying } -SpecOfObjectClass >> clauseKeyword [ - ^'be an instance of' -] diff --git a/src/StateSpecs-Specs/SpecOfObjectRelationship.class.st b/src/StateSpecs-Specs/SpecOfObjectRelationship.class.st deleted file mode 100644 index 99e04feb1..000000000 --- a/src/StateSpecs-Specs/SpecOfObjectRelationship.class.st +++ /dev/null @@ -1,45 +0,0 @@ -" -I am root of hierarchy of specifications for objects relationship - -My instances can be created by - - SpecOfObjectRelationship requiredClass: String - -Internal Representation and Key Implementation Points. - - Instance Variables - requiredClass: -" -Class { - #name : #SpecOfObjectRelationship, - #superclass : #SpecOfObjectState, - #instVars : [ - 'requiredClass' - ], - #category : 'StateSpecs-Specs' -} - -{ #category : #'instance creation' } -SpecOfObjectRelationship class >> requiredClass: aClass [ - ^self new requiredClass: aClass -] - -{ #category : #displaying } -SpecOfObjectRelationship >> clauseKeyword [ - self subclassResponsibility -] - -{ #category : #displaying } -SpecOfObjectRelationship >> defaultTitle [ - ^self clauseKeyword , ' ' , requiredClass name -] - -{ #category : #accessing } -SpecOfObjectRelationship >> requiredClass [ - ^requiredClass -] - -{ #category : #accessing } -SpecOfObjectRelationship >> requiredClass: aClass [ - requiredClass := aClass -] diff --git a/src/StateSpecs-Specs/SpecOfObjectResponsibility.class.st b/src/StateSpecs-Specs/SpecOfObjectResponsibility.class.st deleted file mode 100644 index 1221adf0e..000000000 --- a/src/StateSpecs-Specs/SpecOfObjectResponsibility.class.st +++ /dev/null @@ -1,48 +0,0 @@ -" -I describe all objects which responds to particular message. - - (10@230) should respondTo: #x - -My instances can be created by - - SpecOfObjectResponsibility requiredMessage: #x - -Internal Representation and Key Implementation Points. - - Instance Variables - requiredMessage: - -" -Class { - #name : #SpecOfObjectResponsibility, - #superclass : #SpecOfObjectState, - #instVars : [ - 'requiredMessage' - ], - #category : 'StateSpecs-Specs' -} - -{ #category : #'instance creation' } -SpecOfObjectResponsibility class >> for: aSelector [ - ^self new requiredMessage: aSelector -] - -{ #category : #testing } -SpecOfObjectResponsibility >> basicMatches: anObject [ - ^anObject respondsTo: requiredMessage -] - -{ #category : #displaying } -SpecOfObjectResponsibility >> defaultTitle [ - ^'respond to ' , requiredMessage stringForSpecTitle -] - -{ #category : #accessing } -SpecOfObjectResponsibility >> requiredMessage [ - ^requiredMessage -] - -{ #category : #accessing } -SpecOfObjectResponsibility >> requiredMessage: aSymbol [ - requiredMessage := aSymbol -] diff --git a/src/StateSpecs-Specs/SpecOfObjectState.class.st b/src/StateSpecs-Specs/SpecOfObjectState.class.st deleted file mode 100644 index 7057de72b..000000000 --- a/src/StateSpecs-Specs/SpecOfObjectState.class.st +++ /dev/null @@ -1,187 +0,0 @@ -" -I am root of hierarchy of object state specifications. - -I provide two methods to check objects. One is #matches: which returns true or false. And other is #validate: which returns object validation result with detailed information about failure (if object not satisfies spec). - -My subclasses should define at least #basicMatches: method to check if given object satisfied specification or not. - -I has denial variable which used to mark me as opposite specification to my original purpose. Method #matches: take it into account. And implementors of basicMatches: should not think about it. - -Also subclasses can override #validate: method to retrive more specific information about given objects. - -Public API and Key Messages - -- matches: anObject -it checks if anObject matches specification or not. It returns true or false. - -- validate: anObject -it checks if anObject matches specification or not. It returns SpecOfValidationResult instance which can be success or failure. - --not -It creates my copy with negation behaviour - --& -It creates SpecOfAndConjunction instance with me and my argument - --| -It cretes SpecOfOrDisjunction instance with me and my argument - --title: -It sets special name of me. There is defaultTitle by default - --failureDescription: -It sets special description for validation failure - - - One simple example is simply gorgeous. - -Internal Representation and Key Implementation Points. - - Instance Variables - denial: - title: - failureDescription: - -" -Class { - #name : #SpecOfObjectState, - #superclass : #Object, - #instVars : [ - 'denial', - 'title', - 'failureDescription' - ], - #category : 'StateSpecs-Specs' -} - -{ #category : #'specs composition' } -SpecOfObjectState >> & aStateSpec [ - ^SpecOfAndConjunction of: self and: aStateSpec -] - -{ #category : #converting } -SpecOfObjectState >> asStateSpec [ - ^self -] - -{ #category : #testing } -SpecOfObjectState >> basicMatches: anObject [ - self subclassResponsibility -] - -{ #category : #debugging } -SpecOfObjectState >> debugValidationFailingOver: aSpecFailed [ - UnhandledError signalForException: aSpecFailed -] - -{ #category : #printing } -SpecOfObjectState >> defaultTitle [ - ^'satisfy for ' , self class name -] - -{ #category : #accessing } -SpecOfObjectState >> denial [ - ^denial -] - -{ #category : #accessing } -SpecOfObjectState >> denial: aBoolean [ - denial == aBoolean ifTrue: [ ^self ]. - self invert -] - -{ #category : #printing } -SpecOfObjectState >> description [ - ^self shouldPrefixPhrase , ' ' , self title -] - -{ #category : #accessing } -SpecOfObjectState >> failureDescription [ - ^ failureDescription -] - -{ #category : #accessing } -SpecOfObjectState >> failureDescription: anObject [ - failureDescription := anObject -] - -{ #category : #'initialize-release' } -SpecOfObjectState >> initialize [ - denial := false -] - -{ #category : #accessing } -SpecOfObjectState >> invert [ - denial := denial not. - self invertChildren -] - -{ #category : #accessing } -SpecOfObjectState >> invertChildren [ -] - -{ #category : #testing } -SpecOfObjectState >> isSimpleValue [ - ^false -] - -{ #category : #testing } -SpecOfObjectState >> isStateSpec [ - ^true -] - -{ #category : #testing } -SpecOfObjectState >> matches: anObject [ - ^(self basicMatches: anObject) ~= denial -] - -{ #category : #'specs composition' } -SpecOfObjectState >> not [ - ^self copy invert; yourself -] - -{ #category : #printing } -SpecOfObjectState >> printOn: aStream [ - super printOn: aStream. - aStream << $( << self description << $) -] - -{ #category : #printing } -SpecOfObjectState >> printSimpleValue [ - - ^self isSimpleValue - ifTrue: [ self asSimpleValue stringForSpecTitle ] - ifFalse: [ '(', self title , ')' ] -] - -{ #category : #printing } -SpecOfObjectState >> shouldPrefixPhrase [ - ^'should' , (denial ifTrue: [' not'] ifFalse: ['']) -] - -{ #category : #accessing } -SpecOfObjectState >> title [ - ^title ifNil: [title := self defaultTitle] -] - -{ #category : #accessing } -SpecOfObjectState >> title: aString [ - title := aString -] - -{ #category : #validation } -SpecOfObjectState >> validate: anObject [ - (self matches: anObject) ifTrue: [^SpecOfValidationResult success]. - ^self validationFailureFor: anObject -] - -{ #category : #validation } -SpecOfObjectState >> validationFailureFor: anObject [ - - ^SpecOfValidationResult failed: self for: anObject -] - -{ #category : #'specs composition' } -SpecOfObjectState >> | aStateSpec [ - ^SpecOfOrDisjunction of: self and: aStateSpec -] diff --git a/src/StateSpecs-Specs/SpecOfObjectStateByPredicate.class.st b/src/StateSpecs-Specs/SpecOfObjectStateByPredicate.class.st deleted file mode 100644 index c45198de7..000000000 --- a/src/StateSpecs-Specs/SpecOfObjectStateByPredicate.class.st +++ /dev/null @@ -1,67 +0,0 @@ -" -I describe all objects which satisfy particular predicate. - - 10 should satisfy: [ :num | num > 2 ] - -My instances can be created by: - - SpecOfObjectStateByPredicate from: [ :num | num > 2 ] - -Internal Representation and Key Implementation Points. - - Instance Variables - predicate: - -" -Class { - #name : #SpecOfObjectStateByPredicate, - #superclass : #SpecOfObjectState, - #instVars : [ - 'predicate' - ], - #category : 'StateSpecs-Specs' -} - -{ #category : #'instance creation' } -SpecOfObjectStateByPredicate class >> from: valuablelWithOneArg [ - ^self new predicate: valuablelWithOneArg -] - -{ #category : #testing } -SpecOfObjectStateByPredicate >> basicMatches: anObject [ - ^predicate value: anObject -] - -{ #category : #accessing } -SpecOfObjectStateByPredicate >> debugValidationFailingOver: aSpecFailed [ - " - [SpecDSLAcceptanceTests new customTestForArbitraryBlock] fork - " - | mainProcess | - aSpecFailed allowExtraDebugging. - UnhandledError signalForException: aSpecFailed. - - mainProcess := Processor activeProcess. - [ - mainProcess - completeTo: aSpecFailed signalerContext sender; - restartTop; - stepToHome: predicate asContext; - debug] forkAt: mainProcess priority. - mainProcess suspend -] - -{ #category : #displaying } -SpecOfObjectStateByPredicate >> defaultTitle [ - ^'satisfy: ' , predicate stringForSpecTitle -] - -{ #category : #accessing } -SpecOfObjectStateByPredicate >> predicate [ - ^predicate -] - -{ #category : #accessing } -SpecOfObjectStateByPredicate >> predicate: aBlockContext [ - predicate := aBlockContext -] diff --git a/src/StateSpecs-Specs/SpecOfObjectSuperclass.class.st b/src/StateSpecs-Specs/SpecOfObjectSuperclass.class.st deleted file mode 100644 index 946f461ac..000000000 --- a/src/StateSpecs-Specs/SpecOfObjectSuperclass.class.st +++ /dev/null @@ -1,22 +0,0 @@ -" -I describe all objects which are kind of particular class. - - #string should beKindOf: String -" -Class { - #name : #SpecOfObjectSuperclass, - #superclass : #SpecOfObjectRelationship, - #category : 'StateSpecs-Specs' -} - -{ #category : #testing } -SpecOfObjectSuperclass >> basicMatches: anObject [ - | objectClass | - objectClass := anObject retriveClassForStateSpecs. - ^objectClass == requiredClass or: [objectClass inheritsFrom: requiredClass] -] - -{ #category : #testing } -SpecOfObjectSuperclass >> clauseKeyword [ - ^'be a kind of' -] diff --git a/src/StateSpecs-Specs/SpecOfObjectValue.class.st b/src/StateSpecs-Specs/SpecOfObjectValue.class.st deleted file mode 100644 index 497599a89..000000000 --- a/src/StateSpecs-Specs/SpecOfObjectValue.class.st +++ /dev/null @@ -1,42 +0,0 @@ -" -I am root of hierarchy to object value itself. - -Internal Representation and Key Implementation Points. - - Instance Variables - requiredValue: - -" -Class { - #name : #SpecOfObjectValue, - #superclass : #SpecOfObjectState, - #instVars : [ - 'requiredValue' - ], - #category : 'StateSpecs-Specs' -} - -{ #category : #'instance creation' } -SpecOfObjectValue class >> requiredValue: anObject [ - ^self new requiredValue: anObject -] - -{ #category : #displaying } -SpecOfObjectValue >> clauseKeyword [ - self subclassResponsibility -] - -{ #category : #displaying } -SpecOfObjectValue >> defaultTitle [ - ^self clauseKeyword , ' "' , requiredValue stringForSpecTitle , '"' -] - -{ #category : #accessing } -SpecOfObjectValue >> requiredValue [ - ^requiredValue -] - -{ #category : #accessing } -SpecOfObjectValue >> requiredValue: anObject [ - requiredValue := anObject -] diff --git a/src/StateSpecs-Specs/SpecOfOrDisjunction.class.st b/src/StateSpecs-Specs/SpecOfOrDisjunction.class.st deleted file mode 100644 index e88c0c7d0..000000000 --- a/src/StateSpecs-Specs/SpecOfOrDisjunction.class.st +++ /dev/null @@ -1,35 +0,0 @@ -" -I implement disjunction of specifications. - -I can be created by | message to spec: - - (Instance of: String) | (Instance of: Integer) -" -Class { - #name : #SpecOfOrDisjunction, - #superclass : #SpecOfComplexState, - #category : 'StateSpecs-Specs' -} - -{ #category : #testing } -SpecOfOrDisjunction >> basicMatches: anObject [ - - ^specs anySatisfy: [ :each | - each matches: anObject ] -] - -{ #category : #printing } -SpecOfOrDisjunction >> operatorName [ - ^'or' -] - -{ #category : #validation } -SpecOfOrDisjunction >> validate: anObject [ - | result | - - specs do: [:eachSpec | - result := eachSpec validate: anObject. - result isSuccess ifTrue: [^result]]. - - ^SpecOfValidationResult failed: self for: anObject -] diff --git a/src/StateSpecs-Specs/SpecOfString.class.st b/src/StateSpecs-Specs/SpecOfString.class.st deleted file mode 100644 index 87f57f9c6..000000000 --- a/src/StateSpecs-Specs/SpecOfString.class.st +++ /dev/null @@ -1,58 +0,0 @@ -" -I am root of hierarchy of string specifications. - -I provide requiredSubstring and caseSensitive properties. And my subclasses should use them accordingly their logic. - -Instance should be created using following messages: - - SpecOfString requiredSubstring: 'test'. - SpecOfString requiredSubstring: 'test' caseSensitive: false - -My default I am not case sensitive. - -Internal Representation and Key Implementation Points. - - Instance Variables - caseSensitive: - requiredSubstring: -" -Class { - #name : #SpecOfString, - #superclass : #SpecOfObjectValue, - #instVars : [ - 'caseSensitive' - ], - #category : 'StateSpecs-Specs' -} - -{ #category : #'instance creation' } -SpecOfString class >> requiredValue: aString caseSensitive: aBool [ - - ^(self requiredValue: aString) - caseSensitive: aBool -] - -{ #category : #accessing } -SpecOfString >> caseSensitive [ - ^ caseSensitive -] - -{ #category : #accessing } -SpecOfString >> caseSensitive: anObject [ - caseSensitive := anObject -] - -{ #category : #accessing } -SpecOfString >> defaultTitle [ - - ^caseSensitive - ifFalse: [ super defaultTitle ] - ifTrue: [ super defaultTitle , ' case sensitive' ] -] - -{ #category : #'initialize-release' } -SpecOfString >> initialize [ - super initialize. - - caseSensitive := false -] diff --git a/src/StateSpecs-Specs/SpecOfStringBeginning.class.st b/src/StateSpecs-Specs/SpecOfStringBeginning.class.st deleted file mode 100644 index 06e58a8a9..000000000 --- a/src/StateSpecs-Specs/SpecOfStringBeginning.class.st +++ /dev/null @@ -1,24 +0,0 @@ -" -I describe strings which begin with particular substring. - - 'some test string' should beginWith: 'some'. - 'some test string' should beginWith: 'Some' caseSensitive: true -" -Class { - #name : #SpecOfStringBeginning, - #superclass : #SpecOfString, - #category : 'StateSpecs-Specs' -} - -{ #category : #testing } -SpecOfStringBeginning >> basicMatches: aString [ - - ^caseSensitive - ifTrue: [ aString beginsWith: requiredValue] - ifFalse: [ aString asLowercase beginsWith: requiredValue asLowercase ] -] - -{ #category : #displaying } -SpecOfStringBeginning >> clauseKeyword [ - ^'begin with' -] diff --git a/src/StateSpecs-Specs/SpecOfStringEnding.class.st b/src/StateSpecs-Specs/SpecOfStringEnding.class.st deleted file mode 100644 index dde65f4a3..000000000 --- a/src/StateSpecs-Specs/SpecOfStringEnding.class.st +++ /dev/null @@ -1,24 +0,0 @@ -" -I describe strings which end with particular substring. - - 'some string for test' should endWith: 'test'. - 'some string for test' should endWith: 'Test' caseSensitive: true -" -Class { - #name : #SpecOfStringEnding, - #superclass : #SpecOfString, - #category : 'StateSpecs-Specs' -} - -{ #category : #testing } -SpecOfStringEnding >> basicMatches: aString [ - - ^caseSensitive - ifTrue: [ aString endsWith: requiredValue] - ifFalse: [ aString asLowercase endsWith: requiredValue asLowercase ] -] - -{ #category : #displaying } -SpecOfStringEnding >> clauseKeyword [ - ^'end with' -] diff --git a/src/StateSpecs-Specs/SpecOfStringRegex.class.st b/src/StateSpecs-Specs/SpecOfStringRegex.class.st deleted file mode 100644 index da0019460..000000000 --- a/src/StateSpecs-Specs/SpecOfStringRegex.class.st +++ /dev/null @@ -1,24 +0,0 @@ -" -I describe strings which match particular regex expression. - - 'some test string' should matchRegex: '^some'. - 'some test string' should matchRegex: '^Some' caseSensitive: true -" -Class { - #name : #SpecOfStringRegex, - #superclass : #SpecOfString, - #category : 'StateSpecs-Specs' -} - -{ #category : #testing } -SpecOfStringRegex >> basicMatches: aString [ - - ^caseSensitive - ifTrue: [ requiredValue asRegex search: aString] - ifFalse: [ requiredValue asRegexIgnoringCase search: aString] -] - -{ #category : #displaying } -SpecOfStringRegex >> clauseKeyword [ - ^'match regex' -] diff --git a/src/StateSpecs-Specs/SpecOfSubstring.class.st b/src/StateSpecs-Specs/SpecOfSubstring.class.st deleted file mode 100644 index 502813020..000000000 --- a/src/StateSpecs-Specs/SpecOfSubstring.class.st +++ /dev/null @@ -1,21 +0,0 @@ -" -I describe strings which include particular substring. - - 'some test string' should includeSubstring: 'test'. - 'some test string' should includeSubstring: 'Test' caseSensitive: true -" -Class { - #name : #SpecOfSubstring, - #superclass : #SpecOfString, - #category : 'StateSpecs-Specs' -} - -{ #category : #testing } -SpecOfSubstring >> basicMatches: aString [ - ^aString includesSubstring: requiredValue caseSensitive: caseSensitive -] - -{ #category : #displaying } -SpecOfSubstring >> clauseKeyword [ - ^'include substring' -] diff --git a/src/StateSpecs-Specs/SpecOfValidationFailure.class.st b/src/StateSpecs-Specs/SpecOfValidationFailure.class.st deleted file mode 100644 index 0e4eba98a..000000000 --- a/src/StateSpecs-Specs/SpecOfValidationFailure.class.st +++ /dev/null @@ -1,108 +0,0 @@ -" -I represent spec validation failure. - -My instances can be created by - - SpecOfValidationFailure spec: aSpecOfObjectState for: anObject -or - SpecOfValidationResult failed: aSpecOfObjectState for: anObject - -I implement #description method to provide detailed information about validation failure. - -In case of internal property validation of some object I need information about it to correctly describe that wrong property belongs to given owner. For this I use variable subjectOwner to build more clever description of validation failure - -Public API and Key Messages - -- description -- raise - -Internal Representation and Key Implementation Points. - - Instance Variables - spec: - subject: - subjectOwner: - - - Implementation Points -" -Class { - #name : #SpecOfValidationFailure, - #superclass : #SpecOfValidationResult, - #instVars : [ - 'spec', - 'subject', - 'subjectOwner' - ], - #category : 'StateSpecs-Specs' -} - -{ #category : #'instance creation' } -SpecOfValidationFailure class >> spec: aStateSpec for: anObject [ - ^self new - subject: anObject; - spec: aStateSpec -] - -{ #category : #debugging } -SpecOfValidationFailure >> debugSpecOver: aSpecFailed [ - spec debugValidationFailingOver: aSpecFailed -] - -{ #category : #printing } -SpecOfValidationFailure >> description [ - subjectOwner ifNil: [ - ^'Got "', subject stringForSpecValidation , '" but it ' , spec description]. - - ^'Got "', subject stringForSpecValidation , '" from ', subjectOwner stringForSpecValidation, ' but it ' , spec description. -] - -{ #category : #testing } -SpecOfValidationFailure >> isFailure [ - ^true -] - -{ #category : #printing } -SpecOfValidationFailure >> printOn: aStream [ - - super printOn: aStream. - aStream << $( << self description << $) -] - -{ #category : #accessing } -SpecOfValidationFailure >> raise [ - | error | - error := SpecOfFailed withReason: self. - spec failureDescription ifNotNil: [ :desc | error messageText: desc]. - ^ error signal -] - -{ #category : #accessing } -SpecOfValidationFailure >> spec [ - ^spec -] - -{ #category : #accessing } -SpecOfValidationFailure >> spec: aStateSpec [ - spec := aStateSpec -] - -{ #category : #accessing } -SpecOfValidationFailure >> subject [ - ^subject -] - -{ #category : #accessing } -SpecOfValidationFailure >> subject: anObject [ - subject := anObject -] - -{ #category : #accessing } -SpecOfValidationFailure >> subjectOwner [ - ^ subjectOwner -] - -{ #category : #accessing } -SpecOfValidationFailure >> subjectOwner: anObject [ - subjectOwner := anObject -] diff --git a/src/StateSpecs-Specs/SpecOfValidationResult.class.st b/src/StateSpecs-Specs/SpecOfValidationResult.class.st deleted file mode 100644 index b4b2b683d..000000000 --- a/src/StateSpecs-Specs/SpecOfValidationResult.class.st +++ /dev/null @@ -1,47 +0,0 @@ -" -I am root of hierarchy of spec validation results. - -My subclasses should implement method #raise to signal failures. -I define successful validation result as singleton. - - SpecOfValidationResult success - -Public API and Key Messages - -- isSuccess -- isFailure -- raise -" -Class { - #name : #SpecOfValidationResult, - #superclass : #Object, - #classVars : [ - 'Success' - ], - #category : 'StateSpecs-Specs' -} - -{ #category : #'instance creation' } -SpecOfValidationResult class >> failed: aSpecOfObjectState for: anObject [ - ^SpecOfValidationFailure spec: aSpecOfObjectState for: anObject -] - -{ #category : #defaults } -SpecOfValidationResult class >> success [ - ^Success ifNil: [ Success := SpecOfValidationSuccess new ] -] - -{ #category : #testing } -SpecOfValidationResult >> isFailure [ - self subclassResponsibility -] - -{ #category : #testing } -SpecOfValidationResult >> isSuccess [ - ^self isFailure not -] - -{ #category : #accessing } -SpecOfValidationResult >> raise [ - self subclassResponsibility -] diff --git a/src/StateSpecs-Specs/SpecOfValidationSuccess.class.st b/src/StateSpecs-Specs/SpecOfValidationSuccess.class.st deleted file mode 100644 index 202a67dc6..000000000 --- a/src/StateSpecs-Specs/SpecOfValidationSuccess.class.st +++ /dev/null @@ -1,21 +0,0 @@ -" -I represent successful spec validation. - -My superclass define singleton for me - - SpecOfValidationResult success -" -Class { - #name : #SpecOfValidationSuccess, - #superclass : #SpecOfValidationResult, - #category : 'StateSpecs-Specs' -} - -{ #category : #testing } -SpecOfValidationSuccess >> isFailure [ - ^false -] - -{ #category : #accessing } -SpecOfValidationSuccess >> raise [ -] diff --git a/src/StateSpecs-Specs/String.extension.st b/src/StateSpecs-Specs/String.extension.st deleted file mode 100644 index d1573effd..000000000 --- a/src/StateSpecs-Specs/String.extension.st +++ /dev/null @@ -1,12 +0,0 @@ -Extension { #name : #String } - -{ #category : #'*StateSpecs-Specs' } -String >> checkStateSpecsEqualityTo: anotherString [ - - ^self = anotherString -] - -{ #category : #'*StateSpecs-Specs' } -String >> stringForSpecTitle [ - ^self printString -] diff --git a/src/StateSpecs-Specs/package.st b/src/StateSpecs-Specs/package.st deleted file mode 100644 index eaeb1ae75..000000000 --- a/src/StateSpecs-Specs/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'StateSpecs-Specs' } diff --git a/src/Trachel/Announcer.extension.st b/src/Trachel/Announcer.extension.st deleted file mode 100644 index b45aa4d7a..000000000 --- a/src/Trachel/Announcer.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #Announcer } - -{ #category : #'*Trachel' } -Announcer >> handleEventClass: eventClass [ - "Return true if the receiver has a callback subscripbed for the event class" - ^ self subscriptions handleEventClass: eventClass -] diff --git a/src/Trachel/AthensAffineTransform.extension.st b/src/Trachel/AthensAffineTransform.extension.st deleted file mode 100644 index 6689919c0..000000000 --- a/src/Trachel/AthensAffineTransform.extension.st +++ /dev/null @@ -1,19 +0,0 @@ -Extension { #name : #AthensAffineTransform } - -{ #category : #'*Trachel' } -AthensAffineTransform >> asFloatTransform [ - ^ self copy floatValues; yourself -] - -{ #category : #'*Trachel' } -AthensAffineTransform >> floatValues [ - "convert all the values to float" - x := x asFloat. - y := y asFloat. - sx := sx asFloat. - sy := sy asFloat. - shx := shx asFloat. - shy := shy asFloat. - - -] diff --git a/src/Trachel/AthensCairoSurface.extension.st b/src/Trachel/AthensCairoSurface.extension.st deleted file mode 100644 index 699ddaa86..000000000 --- a/src/Trachel/AthensCairoSurface.extension.st +++ /dev/null @@ -1,7 +0,0 @@ -Extension { #name : #AthensCairoSurface } - -{ #category : #'*Trachel' } -AthensCairoSurface >> hasBeenFreed [ - "Return true if the external resource has been freed" - ^ handle isNull -] diff --git a/src/Trachel/FormCanvas.extension.st b/src/Trachel/FormCanvas.extension.st deleted file mode 100644 index 7bae60714..000000000 --- a/src/Trachel/FormCanvas.extension.st +++ /dev/null @@ -1,15 +0,0 @@ -Extension { #name : #FormCanvas } - -{ #category : #'*Trachel' } -FormCanvas >> invariant [ - "Return false if the form canvas is not properly defined" - " - (self allInstances collect: #origin) asSet - " - (self origin isPoint and: [ self origin x >= 0 and: [ self origin y >= 0 ] ]) ifFalse: [ ^ false ]. - (self clipRect extent > (0 @ 0)) ifFalse: [ ^ false ]. - self form notNil ifFalse: [ ^ false ]. - - "If the form is okay, then we check the port" - ^ port invariant -] diff --git a/src/Trachel/GrafPort.extension.st b/src/Trachel/GrafPort.extension.st deleted file mode 100644 index 88afacd24..000000000 --- a/src/Trachel/GrafPort.extension.st +++ /dev/null @@ -1,21 +0,0 @@ -Extension { #name : #GrafPort } - -{ #category : #'*Trachel' } -GrafPort >> invariant [ - "Return false if the form canvas is not properly defined" - " - (self allInstances collect: #origin) asSet - " - combinationRule notNil ifFalse: [ ^ false ]. - clipHeight > 0 ifFalse: [ ^ false ]. - clipWidth > 0 ifFalse: [ ^ false ]. - clipX >= 0 ifFalse: [ ^ false ]. - clipY >= 0 ifFalse: [ ^ false ]. - - "What about destForm?" - (destForm class == DisplayScreen or: [ destForm class == Form ]) ifFalse: [ ^ false ]. - "(sourceForm notNil and: [ destForm notNil ]) ifFalse: [ self haltOnce. ^ false ]." - ^ true - - -] diff --git a/src/Trachel/Point.extension.st b/src/Trachel/Point.extension.st deleted file mode 100644 index 172a5ad1d..000000000 --- a/src/Trachel/Point.extension.st +++ /dev/null @@ -1,16 +0,0 @@ -Extension { #name : #Point } - -{ #category : #'*Trachel' } -Point >> relativeAngleTo: aPoint [ - | width height hip | - height:= (self y - aPoint y) abs. - width:= (self x -aPoint x) abs. - (height = 0 and: [ width = 0 ]) ifTrue: [ ^ 0 ]. - hip:= (self dotProduct: aPoint) sqrt. - - "First quadrant" - (self x > 0 and: [self y > 0]) ifTrue: [ (width @ height) angle] - - - -] diff --git a/src/Trachel/SubscriptionRegistry.extension.st b/src/Trachel/SubscriptionRegistry.extension.st deleted file mode 100644 index 117e5f60e..000000000 --- a/src/Trachel/SubscriptionRegistry.extension.st +++ /dev/null @@ -1,44 +0,0 @@ -Extension { #name : #SubscriptionRegistry } - -{ #category : #'*Trachel' } -SubscriptionRegistry >> getInteractionForClass: eventClass [ - "Return true if the receiver has a callback subscripbed for the event class" - subscriptions do: [ :sub | - ((sub subscriber class == eventClass) or: - [ sub subscriber class inheritsFrom: eventClass ]) ifTrue: [ ^ sub subscriber ] ]. - - self error: 'Please, use handleEventClass: before getting the interaction' - -] - -{ #category : #'*Trachel' } -SubscriptionRegistry >> getInteractionsForClass: eventClass [ - "Return the list of subscription for a given Event class" - | answer | - answer := OrderedCollection new. - subscriptions do: [ :sub | - ((sub subscriber class == eventClass) or: - [ sub subscriber class inheritsFrom: eventClass ]) ifTrue: [ answer add: sub subscriber ] ]. - ^ answer -] - -{ #category : #'*Trachel' } -SubscriptionRegistry >> handleEventClass: eventClass [ - "Return true if the receiver has a callback subscripbed for the event class" - ^ subscriptions anySatisfy: [ :sub | - (sub announcementClass == eventClass) or: - [ sub announcementClass inheritsFrom: eventClass ] ] -] - -{ #category : #'*Trachel' } -SubscriptionRegistry >> handleSubscriberClass: eventClass [ - "Return true if the receiver has a callback subscripbed for the event class" - ^ subscriptions anySatisfy: [ :sub | - (sub subscriber class == eventClass) or: - [ sub subscriber class inheritsFrom: eventClass ] ] -] - -{ #category : #'*Trachel' } -SubscriptionRegistry >> trSubscriptions [ - ^ subscriptions -] diff --git a/src/Trachel/TRAbstractArrowHeadShape.class.st b/src/Trachel/TRAbstractArrowHeadShape.class.st deleted file mode 100644 index 506ce3e02..000000000 --- a/src/Trachel/TRAbstractArrowHeadShape.class.st +++ /dev/null @@ -1,9 +0,0 @@ -Class { - #name : #TRAbstractArrowHeadShape, - #superclass : #TRAbstractLineDecoratorShape, - #instVars : [ - 'left', - 'right' - ], - #category : #'Trachel-ShapesForArrow' -} diff --git a/src/Trachel/TRAbstractBoxShape.class.st b/src/Trachel/TRAbstractBoxShape.class.st deleted file mode 100644 index 6926118b0..000000000 --- a/src/Trachel/TRAbstractBoxShape.class.st +++ /dev/null @@ -1,255 +0,0 @@ -Class { - #name : #TRAbstractBoxShape, - #superclass : #TRShape, - #instVars : [ - 'rectangle', - 'strokeWidth', - 'dashes' - ], - #classInstVars : [ - 'nullRectangle' - ], - #category : #'Trachel-Shapes' -} - -{ #category : #public } -TRAbstractBoxShape class >> nullRectangle [ - nullRectangle ifNotNil: [ ^ nullRectangle ]. - nullRectangle := (0 @ 0) extent: (0 @ 0). - ^ nullRectangle -] - -{ #category : #visitor } -TRAbstractBoxShape >> accept: aVisitor [ - aVisitor visitAbstractBoxShape: self -] - -{ #category : #private } -TRAbstractBoxShape >> basicEncompassingRectangle [ - ^ rectangle -] - -{ #category : #public } -TRAbstractBoxShape >> bottomPosition [ - "Return the shape center top position" - ^ self position + (0 @ (self height / 2)) -] - -{ #category : #public } -TRAbstractBoxShape >> bottomPosition: aPosition [ - "Move the shape by locating its center top position at aPosition" - self position: (aPosition + (0 @ (self height / -2))) -] - -{ #category : #accessing } -TRAbstractBoxShape >> center [ - ^ self position -] - -{ #category : #accessing } -TRAbstractBoxShape >> dashes [ - ^ dashes -] - -{ #category : #accessing } -TRAbstractBoxShape >> dashes: aDashSpecification [ - dashes := aDashSpecification -] - -{ #category : #drawing } -TRAbstractBoxShape >> drawOn: athensCanvas [ - self shouldBeDrawn - ifFalse: [ ^ self ]. - athensCanvas pathTransform - restoreAfter: [ - athensCanvas pathTransform - multiplyBy: matrix asFloatTransform. - athensCanvas - setPaint: self themedColor; - drawShape: self path. - self drawStrokeIfNecessaryOn: athensCanvas ] -] - -{ #category : #drawing } -TRAbstractBoxShape >> drawStrokeIfNecessaryOn: athensCanvas [ - | ratio | - self canvas ifNil: [ ^ self ]. - ratio := self scaledStrokeWidth. - ^ strokePaint - ifNotNil: - [ (athensCanvas setStrokePaint: strokePaint) - width: ratio asFloat; - dashes: dashes offset: 0. - athensCanvas drawShape: path ] -] - -{ #category : #accessing } -TRAbstractBoxShape >> encompassingRectangle [ - ^ self transformedEncompassingRectangle -] - -{ #category : #accessing } -TRAbstractBoxShape >> extent [ - ^ self encompassingRectangle extent -] - -{ #category : #geometry } -TRAbstractBoxShape >> extent: newExtent [ - "Set the extent of the shape" - | oldExtent | - newExtent = rectangle extent ifTrue: [ ^ self ]. - oldExtent := rectangle extent. - rectangle := (0@0 - (newExtent / 2)) extent: newExtent. - self resetPath. - (oldExtent = (0 @ 0)) ifFalse: [ - self triggerCallbacksForNewExtent: newExtent oldExtent: oldExtent ]. - -] - -{ #category : #public } -TRAbstractBoxShape >> from: aPoint extent: anotherPoint [ - - self fromRectangle: (aPoint corner: (aPoint + anotherPoint)) -] - -{ #category : #public } -TRAbstractBoxShape >> from: aPoint to: anotherPoint [ - - self fromRectangle: (aPoint corner: anotherPoint) -] - -{ #category : #public } -TRAbstractBoxShape >> from: aPoint to: anotherPoint color: aColor [ - self from: aPoint to: anotherPoint. - self color: aColor. -] - -{ #category : #public } -TRAbstractBoxShape >> fromRectangle: newRectangle [ - | step | - step := newRectangle center - self position. - rectangle := newRectangle translateBy: newRectangle center negated. - self position: newRectangle center. - self resetPath. - self triggerCallbacksForStep: step. -] - -{ #category : #public } -TRAbstractBoxShape >> fromRectangle: r color: aColor [ - self fromRectangle: r. - self color: aColor -] - -{ #category : #accessing } -TRAbstractBoxShape >> height [ - ^ self encompassingRectangle height -] - -{ #category : #accessing } -TRAbstractBoxShape >> height: newHeight [ - self extent: rectangle width @ newHeight -] - -{ #category : #testing } -TRAbstractBoxShape >> includesPoint: aPoint [ - self subclassResponsibility -] - -{ #category : #initialization } -TRAbstractBoxShape >> initialize [ - super initialize. - rectangle := self class nullRectangle. - strokeWidth := 1 -] - -{ #category : #public } -TRAbstractBoxShape >> leftPosition [ - "Return the shape center left position" - ^ self position - ((self width / 2) @ 0) -] - -{ #category : #public } -TRAbstractBoxShape >> leftPosition: aPosition [ - "Move the shape by locating its center left position at aPosition" - self position: (aPosition - ((self width / -2) @ 0)) -] - -{ #category : #geometry } -TRAbstractBoxShape >> rectangle [ - ^ rectangle -] - -{ #category : #geometry } -TRAbstractBoxShape >> rectangle: aRectangle [ - rectangle := aRectangle. - self resetPath. - - "(oldExtent = (0 @ 0)) ifFalse: [ - self triggerCallbacksForNewExtent: newExtent oldExtent: oldExtent ]. -" -] - -{ #category : #public } -TRAbstractBoxShape >> rightPosition [ - "Return the shape center right position" - ^ self position + ((self width / 2) @ 0) -] - -{ #category : #public } -TRAbstractBoxShape >> rightPosition: aPosition [ - "Move the shape by locating its center right position at aPosition" - self position: (aPosition - ((self width / 2) @ 0)) -] - -{ #category : #drawing } -TRAbstractBoxShape >> scaledStrokeWidth [ - | scale | - scale := self canvas camera scale. - ^ scale < 1 - ifTrue: [ self strokeWidth ] - ifFalse: [ self strokeWidth / scale ] -] - -{ #category : #testing } -TRAbstractBoxShape >> shouldBeDrawn [ - ^ rectangle width > 0 and: [ rectangle height > 0 ] -] - -{ #category : #accessing } -TRAbstractBoxShape >> size: v [ - ^ self extent: v @ v -] - -{ #category : #hooks } -TRAbstractBoxShape >> strokeWidth [ - "Return the width of the border shape" - ^ strokeWidth -] - -{ #category : #accessing } -TRAbstractBoxShape >> strokeWidth: aWidth [ - "Set the width of the border shape" - strokeWidth := aWidth -] - -{ #category : #public } -TRAbstractBoxShape >> topPosition [ - "Return the shape center top position" - ^ self position - (0 @ (self height / 2)) -] - -{ #category : #public } -TRAbstractBoxShape >> topPosition: aPosition [ - "Move the shape by locating its center top position at aPosition" - self position: (aPosition - (0 @ (self height / -2))) -] - -{ #category : #accessing } -TRAbstractBoxShape >> width [ - ^ self encompassingRectangle width -] - -{ #category : #accessing } -TRAbstractBoxShape >> width: newWidth [ - self extent: newWidth @ rectangle height. -] diff --git a/src/Trachel/TRAbstractLineDecoratorShape.class.st b/src/Trachel/TRAbstractLineDecoratorShape.class.st deleted file mode 100644 index b38332874..000000000 --- a/src/Trachel/TRAbstractLineDecoratorShape.class.st +++ /dev/null @@ -1,187 +0,0 @@ -" -A TRAbstractLineDecoratorShape represents the shape of a RTLineDecoration. - -The ""open"" field refers to the shape itself. If it is a closed, paintable shape, or an open shape. -" -Class { - #name : #TRAbstractLineDecoratorShape, - #superclass : #TRShape, - #instVars : [ - 'size', - 'to', - 'from', - 'width', - 'open', - 'type', - 'baseSize', - 'percentage' - ], - #category : #'Trachel-ShapesForArrow' -} - -{ #category : #'as yet unclassified' } -TRAbstractLineDecoratorShape class >> from: aPoint to: anotherPoint width: aNumber size: anotherNumber color: aColor stroke: anotherColor [ - ^self new from: aPoint; to: anotherPoint; width: aNumber; size: anotherNumber; color: aColor; strokePaint: anotherColor. -] - -{ #category : #'as yet unclassified' } -TRAbstractLineDecoratorShape class >> fromEdge: anEdge size: aNumber [ - ^self fromLine: anEdge trachelShape size: aNumber -] - -{ #category : #'as yet unclassified' } -TRAbstractLineDecoratorShape class >> fromEdge: anEdge size: aNumber color: aColor [ - ^self fromLine: anEdge trachelShape size: aNumber color: aColor -] - -{ #category : #'as yet unclassified' } -TRAbstractLineDecoratorShape class >> fromLine: aTRLine size: aNumber [ - ^self from: aTRLine from to: aTRLine to width: aTRLine width size: aNumber color: aTRLine color stroke: aTRLine strokePaint. -] - -{ #category : #'as yet unclassified' } -TRAbstractLineDecoratorShape class >> fromLine: aTRLine size: aNumber color: aColor [ - ^self from: aTRLine from to: aTRLine to width: aTRLine width size: aNumber color: aColor stroke: aTRLine strokePaint. -] - -{ #category : #visitor } -TRAbstractLineDecoratorShape >> accept: aVisitor [ - aVisitor visitAbstractLineDecorationShape: self -] - -{ #category : #accessing } -TRAbstractLineDecoratorShape >> baseSize [ - ^ baseSize -] - -{ #category : #accessing } -TRAbstractLineDecoratorShape >> baseSize: aNumber [ - "Set the base size of the head. Initially, the baseSize is equals to the size of the arrow head." - baseSize := aNumber -] - -{ #category : #accessing } -TRAbstractLineDecoratorShape >> center [ - "Not sure whether this is right" - ^ self to -] - -{ #category : #accessing } -TRAbstractLineDecoratorShape >> color: aColor [ - self strokePaint: aColor -] - -{ #category : #hooks } -TRAbstractLineDecoratorShape >> computePath [ - self subclassResponsibility -] - -{ #category : #defaults } -TRAbstractLineDecoratorShape >> defaultColor [ - ^ Color white -] - -{ #category : #defaults } -TRAbstractLineDecoratorShape >> defaultSize [ - ^ 10 -] - -{ #category : #defaults } -TRAbstractLineDecoratorShape >> defaultWidth [ - ^ 1 -] - -{ #category : #drawing } -TRAbstractLineDecoratorShape >> drawOn: athensCanvas [ - from ~= to - ifTrue: [ - athensCanvas pathTransform restoreAfter: [ - athensCanvas setShape: self path. - open - ifFalse: [ - athensCanvas setPaint: self themedColor. - athensCanvas draw ]. - (athensCanvas setStrokePaint: self themedStrokeColor) width: self width. - athensCanvas draw ] ] -] - -{ #category : #accessing } -TRAbstractLineDecoratorShape >> encompassingRectangle [ - ^ Rectangle encompassing: (Array with: from with: to) -] - -{ #category : #accessing } -TRAbstractLineDecoratorShape >> from [ - ^ from -] - -{ #category : #accessing } -TRAbstractLineDecoratorShape >> from: anObject [ - from := anObject -] - -{ #category : #initialization } -TRAbstractLineDecoratorShape >> initialize [ - super initialize. - size := self defaultSize. - baseSize := size. - - color := self defaultColor. - strokePaint := self defaultColor. - width := 1. - open := false. - percentage := 1. - -] - -{ #category : #testing } -TRAbstractLineDecoratorShape >> isOpen [ - ^ open -] - -{ #category : #accessing } -TRAbstractLineDecoratorShape >> mySize [ - ^ size -] - -{ #category : #accessing } -TRAbstractLineDecoratorShape >> percentage [ - ^ percentage -] - -{ #category : #accessing } -TRAbstractLineDecoratorShape >> percentage: aNumber [ - self assert: (aNumber between: 0 and: 1). - percentage := aNumber. -] - -{ #category : #accessing } -TRAbstractLineDecoratorShape >> size: anObject [ - anObject = nil - ifTrue: [ size := self defaultSize. ] - ifFalse: [ size := anObject ] - - -] - -{ #category : #accessing } -TRAbstractLineDecoratorShape >> to [ - ^ to -] - -{ #category : #accessing } -TRAbstractLineDecoratorShape >> to: anObject [ - to := anObject -] - -{ #category : #accessing } -TRAbstractLineDecoratorShape >> width [ - ^ width -] - -{ #category : #accessing } -TRAbstractLineDecoratorShape >> width: anObject [ - anObject = nil - ifTrue: [ width := self defaultWidth. ] - ifFalse: [ width := anObject ] -] diff --git a/src/Trachel/TRAbstractLineShape.class.st b/src/Trachel/TRAbstractLineShape.class.st deleted file mode 100644 index 0572713d6..000000000 --- a/src/Trachel/TRAbstractLineShape.class.st +++ /dev/null @@ -1,37 +0,0 @@ -Class { - #name : #TRAbstractLineShape, - #superclass : #TRShape, - #instVars : [ - 'width' - ], - #category : #'Trachel-Shapes' -} - -{ #category : #testing } -TRAbstractLineShape >> isLineShape [ - ^ true -] - -{ #category : #accessing } -TRAbstractLineShape >> strokePaint [ - "return the color of the border line" - ^ self color -] - -{ #category : #accessing } -TRAbstractLineShape >> strokePaint: aColor [ - "set the color of the border line" - strokePaint := aColor -] - -{ #category : #accessing } -TRAbstractLineShape >> width [ - "Return the width of the line, in pixels" - ^ width -] - -{ #category : #accessing } -TRAbstractLineShape >> width: aNumber [ - "Set the width of the line, in pixels" - width := aNumber -] diff --git a/src/Trachel/TRAbstractMouseClick.class.st b/src/Trachel/TRAbstractMouseClick.class.st deleted file mode 100644 index 6a963ef12..000000000 --- a/src/Trachel/TRAbstractMouseClick.class.st +++ /dev/null @@ -1,5 +0,0 @@ -Class { - #name : #TRAbstractMouseClick, - #superclass : #TRAbstractMouseEvent, - #category : #'Trachel-Events' -} diff --git a/src/Trachel/TRAbstractMouseEvent.class.st b/src/Trachel/TRAbstractMouseEvent.class.st deleted file mode 100644 index 1f0500337..000000000 --- a/src/Trachel/TRAbstractMouseEvent.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #TRAbstractMouseEvent, - #superclass : #TRUserInputEvent, - #category : #'Trachel-Events' -} - -{ #category : #testing } -TRAbstractMouseEvent >> isPositionAboveShape [ - ^ shape encompassingRectangle containsPoint: self positionFromCamera -] diff --git a/src/Trachel/TRAddedCallback.class.st b/src/Trachel/TRAddedCallback.class.st deleted file mode 100644 index ff7d02791..000000000 --- a/src/Trachel/TRAddedCallback.class.st +++ /dev/null @@ -1,21 +0,0 @@ -" -I am triggered when aShape is added to the canvas. -The opposite of me is TRRemoveCallback. - -==aShape addCallback: (TRAddedCallback block: [ :shape | ""do sth"" ])== -" -Class { - #name : #TRAddedCallback, - #superclass : #TRCallback, - #category : #'Trachel-Callbacks' -} - -{ #category : #adding } -TRAddedCallback >> addShape: aTRShape [ - ^ block cull: aTRShape -] - -{ #category : #testing } -TRAddedCallback >> isAddedCallback [ - ^ true -] diff --git a/src/Trachel/TRAnnouncingOverseer.class.st b/src/Trachel/TRAnnouncingOverseer.class.st deleted file mode 100644 index 14d9dae39..000000000 --- a/src/Trachel/TRAnnouncingOverseer.class.st +++ /dev/null @@ -1,53 +0,0 @@ -" -I am modified EventOverseer that uses its announcer for firing events and thus is more easily observable. -" -Class { - #name : #TRAnnouncingOverseer, - #superclass : #TREventOverseer, - #instVars : [ - 'announcer' - ], - #category : #'Trachel-Core' -} - -{ #category : #example } -TRAnnouncingOverseer class >> example [ - | c s eo | - c := TRCanvas new. - s := TRBoxShape new size: 50. - s when: TRMouseLeftClick do: [ :evt | ]. - c addShape: s. - - eo := TRAnnouncingOverseer new. - c eventOverseer: eo. - - eo - when: TRMouseLeftClick - do: [ :event | - Transcript - log: event; - tab; - logCr: event shape ]. - - c open -] - -{ #category : #public } -TRAnnouncingOverseer >> announce: anEvent [ - self announcer announce: anEvent -] - -{ #category : #public } -TRAnnouncingOverseer >> announcer [ - ^ announcer ifNil: [ announcer := Announcer new ] -] - -{ #category : #public } -TRAnnouncingOverseer >> firedEvent: anEvent [ - self announce: anEvent -] - -{ #category : #public } -TRAnnouncingOverseer >> when: anEvent do: aOneArgBlock [ - self announcer when: anEvent do: aOneArgBlock -] diff --git a/src/Trachel/TRArcLineShape.class.st b/src/Trachel/TRArcLineShape.class.st deleted file mode 100644 index de70fc85f..000000000 --- a/src/Trachel/TRArcLineShape.class.st +++ /dev/null @@ -1,113 +0,0 @@ -Class { - #name : #TRArcLineShape, - #superclass : #TRAbstractLineShape, - #instVars : [ - 'distance', - 'line', - 'normal', - 'alpha', - 'center', - 'radius' - ], - #category : #'Trachel-Shapes' -} - -{ #category : #accessing } -TRArcLineShape >> center [ - ^ center -] - -{ #category : #private } -TRArcLineShape >> computeCircle [ - | srcMidNormal dstMidNormal | - line length = 0 - ifTrue: [ ^ self ]. - normal := self normalFor: line. - alpha := (distance abs / (line length / 2)) arcTan * 2. - srcMidNormal := self normalFor: (RTLineSegment from: line from to: normal to). - dstMidNormal := self normalFor: (RTLineSegment from: line to to: normal to). - center := srcMidNormal intersectLines: dstMidNormal. - radius := center dist: line from -] - -{ #category : #private } -TRArcLineShape >> computePath [ - path := self athensCanvas - createPath: - [ :builder | - builder - absolute; - moveTo: line from. - distance > 0 - ifTrue: [ builder - ccwArcTo: normal to angle: alpha; - ccwArcTo: line to angle: alpha ] - ifFalse: [ builder - cwArcTo: normal to angle: alpha; - cwArcTo: line to angle: alpha ] ] -] - -{ #category : #accessing } -TRArcLineShape >> distance: aDistance [ - distance := aDistance. - self computeCircle -] - -{ #category : #drawing } -TRArcLineShape >> drawOn: athensCanvas [ - athensCanvas pathTransform - restoreAfter: - [ athensCanvas setShape: self path. - (athensCanvas setStrokePaint: self themedColor) width: width. - athensCanvas draw ] -] - -{ #category : #accessing } -TRArcLineShape >> encompassingRectangle [ - | mid v | - mid := line pointForBalance: 0.5. - v := line vector. - normal := RTLineSegment from: mid to: mid + (distance * v normal). - ^ Rectangle - encompassing: (Array with: line from with: line to with: normal to) -] - -{ #category : #testing } -TRArcLineShape >> includesPoint: aPoint [ - | angleOne angleTwo anglePoint | - ((aPoint dist: center) - radius) abs < 5 - ifFalse: [ ^ false ]. - angleOne := line from angleWith: center. - angleTwo := line to angleWith: center. - anglePoint := aPoint angleWith: center. - ^ (anglePoint between: angleOne and: angleTwo) - | (anglePoint between: angleTwo and: angleOne) -] - -{ #category : #accessing } -TRArcLineShape >> line [ - ^ line -] - -{ #category : #accessing } -TRArcLineShape >> line: aLine [ - line := aLine -] - -{ #category : #accessing } -TRArcLineShape >> normal [ - ^ normal -] - -{ #category : #private } -TRArcLineShape >> normalFor: aLine [ - | mid v | - mid := aLine pointForBalance: 0.5. - v := aLine vector. - ^ RTLineSegment from: mid to: mid + (distance * v normal) -] - -{ #category : #accessing } -TRArcLineShape >> radius [ - ^ radius -] diff --git a/src/Trachel/TRArcShape.class.st b/src/Trachel/TRArcShape.class.st deleted file mode 100644 index 56d0cf5ea..000000000 --- a/src/Trachel/TRArcShape.class.st +++ /dev/null @@ -1,206 +0,0 @@ -" -A TRArc is an class that makes all the drawing of arcs -" -Class { - #name : #TRArcShape, - #superclass : #TRShape, - #instVars : [ - 'alphaAngle', - 'betaAngle', - 'innerRadius', - 'externalRadius', - 'origin', - 'height', - 'width', - 'topLeft', - 'bottomRight' - ], - #category : #'Trachel-Shapes' -} - -{ #category : #visitor } -TRArcShape >> accept: aVisitor [ - aVisitor visitArcShape: self -] - -{ #category : #accessing } -TRArcShape >> alphaAngle [ - ^alphaAngle -] - -{ #category : #accessing } -TRArcShape >> alphaAngle: angle [ - alphaAngle := angle -] - -{ #category : #initialization } -TRArcShape >> alphaAngle: stAngle betaAngle: ndAngle innerRadius: iR externalRadius: eR [ - alphaAngle := stAngle. - betaAngle := ndAngle. - innerRadius := iR. - externalRadius := eR - -] - -{ #category : #accessing } -TRArcShape >> betaAngle [ - ^betaAngle -] - -{ #category : #accessing } -TRArcShape >> betaAngle: angle [ - betaAngle := angle -] - -{ #category : #accessing } -TRArcShape >> bottomRight [ - ^ bottomRight -] - -{ #category : #accessing } -TRArcShape >> center [ - ^ self encompassingRectangle center -] - -{ #category : #hooks } -TRArcShape >> computePath [ - path := TRPlatform current computeArcPathFor: self -] - -{ #category : #computing } -TRArcShape >> computeRectangle [ - |aA bA iR eR p1 p2 p3 p4 pR pQ1 pB pQ2 pL pQ3 pT pQ4 pCollection| - pCollection:= OrderedCollection new. - aA:= alphaAngle value degreesToRadians. - bA:= betaAngle value degreesToRadians. - iR:= innerRadius value. - eR:= externalRadius value. - p1:= (iR*aA cos)@((iR*aA sin) negated). - p2:= (iR*bA cos)@((iR*bA sin) negated). - p3:= (eR*aA cos)@((eR*aA sin) negated). - p4:=(eR*bA cos)@((eR*bA sin) negated). - pR:=(eR*0 cos) @ ((eR*0 sin) negated). - pQ1:=(eR*(Float pi /4) cos)@((eR*(Float pi /4) sin) negated). - pB:=(eR*(Float pi /2) cos)@((eR*(Float pi /2) sin) negated). - pQ2:=(eR*(Float pi * (3/4)) cos)@((eR*(Float pi * (3/4)) sin) negated). - pL:=(eR*Float pi cos)@((eR*Float pi sin) negated). - pQ3:=(eR*(Float pi * (5/4)) cos)@((eR*(Float pi * (5/4)) sin) negated). - pT:=(eR*(Float pi * (3/2)) cos)@((eR*(Float pi * (3/2)) sin) negated). - pQ4:=(eR*(Float pi * (7/4)) cos)@((eR*(Float pi * (7/4)) sin) negated). - pCollection add:p1; add: p2; add: p3; add: p4. - (self includesPoint: pQ1)ifTrue:[pCollection add: pQ1]. - (self includesPoint: pQ2)ifTrue:[pCollection add: pQ2]. - (self includesPoint: pQ3)ifTrue:[pCollection add: pQ3]. - (self includesPoint: pQ4)ifTrue:[pCollection add: pQ4]. - (self includesPoint: pL)ifTrue:[pCollection add: pL]. - (self includesPoint: pR)ifTrue:[pCollection add: pR]. - (self includesPoint: pB)ifTrue:[pCollection add: pB]. - (self includesPoint: pT)ifTrue:[pCollection add: pT]. - - bottomRight:=(pCollection max x @ pCollection max y) + self position. - topLeft := (pCollection min x @ pCollection min y) + self position. - -] - -{ #category : #drawing } -TRArcShape >> drawOn: athensCanvas [ - self shouldBeDrawn ifFalse: [ ^ self ]. - athensCanvas pathTransform restoreAfter: [ - athensCanvas pathTransform - multiplyBy: matrix asFloatTransform. - athensCanvas - setPaint: self themedColor; - drawShape: self path. - - self drawStrokeIfNecessaryOn: athensCanvas - ] -] - -{ #category : #drawing } -TRArcShape >> drawStrokeIfNecessaryOn: athensCanvas [ -] - -{ #category : #accessing } -TRArcShape >> encompassingRectangle [ - self computeRectangle. - ^ topLeft corner: bottomRight -] - -{ #category : #accessing } -TRArcShape >> externalRadius [ - ^externalRadius -] - -{ #category : #accessing } -TRArcShape >> externalRadius: radius [ - externalRadius := radius -] - -{ #category : #accessing } -TRArcShape >> height [ - - ^ self encompassingRectangle height -] - -{ #category : #testing } -TRArcShape >> includesPoint: aPoint [ - | pDistanceOrigin pointAngle inside aAngle bAngle thePoint | - (alphaAngle value = betaAngle value) ifTrue: [ ^ false ]. - inside:=true. - aAngle := (alphaAngle value % 360 = 0 ) - ifFalse: [ alphaAngle value \\ 360 ] - ifTrue: [ alphaAngle value ]. - bAngle := (betaAngle value % 360 = 0 ) - ifFalse: [ betaAngle value \\ 360 ] - ifTrue: [ betaAngle value ]. - thePoint := aPoint - self position. - pointAngle:= (thePoint angleWith: 0@0) radiansToDegrees \\ 360. - pDistanceOrigin := (thePoint squaredDistanceTo: 0@0) sqrt. - ((pDistanceOrigin < innerRadius value) or: (pDistanceOrigin > externalRadius value)) - ifTrue: [ ^ false ]. - (pointAngle % 360 = 0 ) - ifTrue:[ - (aAngle % 360 = 0) ifTrue: [^ true ]. - (bAngle % 360 = 0) ifTrue: [ ^ true ] ]. - (aAngle < bAngle) - ifTrue:[ - (pointAngle >= aAngle) ifTrue:[ inside:=inside not ]. - (pointAngle <= bAngle) ifTrue:[ inside:=inside not ] ] - ifFalse:[ - (bAngle = 0) ifTrue:[bAngle:=360]. - (pointAngle <= aAngle) ifTrue:[ inside:=inside not ]. - (pointAngle <= bAngle) ifTrue:[ inside:=inside not ] ]. - ^ inside -] - -{ #category : #initialization } -TRArcShape >> initialize [ - super initialize. - height := 0. - width := 0. - externalRadius := 0. - innerRadius := 0. - alphaAngle := 0. - betaAngle := 0 -] - -{ #category : #accessing } -TRArcShape >> innerRadius [ - ^innerRadius -] - -{ #category : #accessing } -TRArcShape >> innerRadius: radius [ - innerRadius := radius -] - -{ #category : #accessing } -TRArcShape >> topLeft [ - ^ topLeft -] - -{ #category : #accessing } -TRArcShape >> width [ - - ^ self encompassingRectangle width -] diff --git a/src/Trachel/TRArcShapeTest.class.st b/src/Trachel/TRArcShapeTest.class.st deleted file mode 100644 index 625cc5648..000000000 --- a/src/Trachel/TRArcShapeTest.class.st +++ /dev/null @@ -1,228 +0,0 @@ -" -A TRArcShapeTest is a test class for testing the behavior of TRArcShape -" -Class { - #name : #TRArcShapeTest, - #superclass : #TRTest, - #instVars : [ - 'arc1', - 'arc2', - 'arc3', - 'arc4', - 'arc5', - 'p1', - 'p2', - 'p3', - 'p4', - 'p5', - 'p6', - 'p7', - 'p8', - 'p1n', - 'p2n', - 'p3n', - 'p4n', - 'p5n', - 'p6n', - 'p7n', - 'p8n', - 'arcQ1', - 'arcQ2', - 'arcQ3', - 'arcQ4', - 'pR', - 'pB', - 'pL', - 'pT', - 'pQ1', - 'pQ2', - 'pQ3', - 'pQ4' - ], - #category : #'Trachel-Tests' -} - -{ #category : #running } -TRArcShapeTest >> setUp [ - super setUp. - arc1:=TRArcShape new. - arc2:=TRArcShape new. - arc3:=TRArcShape new. - arc4:=TRArcShape new. - arc5:=TRArcShape new. - arcQ1:=TRArcShape new. - arcQ2:=TRArcShape new. - arcQ3:=TRArcShape new. - arcQ4:=TRArcShape new. - arc1 alphaAngle: 0 betaAngle: 360 innerRadius: 0 externalRadius: 100. - arc2 alphaAngle: 30 betaAngle: 60 innerRadius: 50 externalRadius: 50. - arc3 alphaAngle: 0 betaAngle: 90 innerRadius: 2 sqrt externalRadius: 2 sqrt. - arc4 alphaAngle:180 betaAngle: 270 innerRadius: 50 externalRadius:150. - arc5 alphaAngle:0 betaAngle: 270 innerRadius: 50 externalRadius:150. - arcQ1 alphaAngle: 0 betaAngle: 90 innerRadius: 0 externalRadius: 100. - arcQ2 alphaAngle: 90 betaAngle: 180 innerRadius: 0 externalRadius: 100. - arcQ3 alphaAngle: 180 betaAngle: 270 innerRadius: 0 externalRadius: 100. - arcQ4 alphaAngle: 270 betaAngle: 360 innerRadius: 0 externalRadius: 100. - pR:=100 @ 0. - pB:=0 @ 100. - pL:=-100 @ 0. - pT:=0 @ -100. - pQ1:=50 @ 50. - pQ2:=-50 @ 50. - pQ3:=-50 @ -50. - pQ4:=50 @ -50. - p1:= 0 @ 0. - p2:=100 @ 100. - p3:=50 @ 50. - p4:= 0 @ 150. - p5:=1 @ -1. - p6:=0 @ -100. - p7:=-100 @ 0. - p8:=-100 @ 100. - p1n:=p1 negated. - p2n:=p2 negated. - p3n:=p3 negated. - p4n:= p4 negated. - p5n:=p5 negated. - p6n:=p6 negated. - p7n:=p7 negated. - p8n:=p8 negated. -] - -{ #category : #'basic tests' } -TRArcShapeTest >> testEncompassingRectangle [ - self assert: (arc1 encompassingRectangle = ((-100.0@ -100.0) corner: (100.0@100.0))). - self assert: (arc1 encompassingRectangle width abs = 200). - self assert:(arc2 encompassingRectangle width abs < 50). - self assert:(arc2 encompassingRectangle height abs < 50). - self assert: (arc3 encompassingRectangle height abs= 2 sqrt). - self assert: (((arc4 encompassingRectangle height abs) roundDownTo: 1 )= 150). - self assert: (((arc4 encompassingRectangle width abs) roundDownTo: 1 )= 150). - self assert: (arc5 encompassingRectangle width abs= 300). - self assert: (arc5 encompassingRectangle height abs= 300). -] - -{ #category : #'basic tests' } -TRArcShapeTest >> testIncludesPoint [ - self assert: (arc1 includesPoint: p1). - self deny: (arc1 includesPoint: p2). - self assert: (arc1 includesPoint: p3). - self deny: (arc1 includesPoint: p4). - self assert: (arc1 includesPoint: p5). - self assert: (arc1 includesPoint: p6). - self assert: (arc1 includesPoint: p7). - self deny: (arc1 includesPoint: p8). - self assert: (arc1 includesPoint: p1n). - self deny: (arc1 includesPoint: p2n). - self assert: (arc1 includesPoint: p3n). - self deny: (arc1 includesPoint: p4n). - self assert: (arc1 includesPoint: p5n). - self assert: (arc1 includesPoint: p6n). - self assert: (arc1 includesPoint: p7n). - self deny: (arc1 includesPoint: p8n). - - self deny: (arc2 includesPoint: p1). - self deny: (arc2 includesPoint: p2). - self deny: (arc2 includesPoint: p3). - self deny: (arc2 includesPoint: p4). - self deny: (arc2 includesPoint: p5). - self deny: (arc2 includesPoint: p6). - self deny: (arc2 includesPoint: p7). - self deny: (arc2 includesPoint: p8). - self deny: (arc2 includesPoint: p1n). - self deny: (arc2 includesPoint: p2n). - self deny: (arc2 includesPoint: p3n). - self deny: (arc2 includesPoint: p4n). - self deny: (arc2 includesPoint: p5n). - self deny: (arc2 includesPoint: p6n). - self deny: (arc2 includesPoint: p7n). - self deny: (arc2 includesPoint: p8n). - - self deny: (arc3 includesPoint: p1). - self deny: (arc3 includesPoint: p2). - self deny: (arc3 includesPoint: p3). - self deny: (arc3 includesPoint: p4). - self assert: (arc3 includesPoint: p5). - self deny: (arc3 includesPoint: p6). - self deny: (arc3 includesPoint: p7). - self deny: (arc3 includesPoint: p8). - self deny: (arc3 includesPoint: p1n). - self deny: (arc3 includesPoint: p2n). - self deny: (arc3 includesPoint: p3n). - self deny: (arc3 includesPoint: p4n). - self deny: (arc3 includesPoint: p5n). - self deny: (arc3 includesPoint: p6n). - self deny: (arc3 includesPoint: p7n). - self deny: (arc3 includesPoint: p8n). - - self deny: (arc4 includesPoint: p1). - self deny: (arc4 includesPoint: p2). - self deny: (arc4 includesPoint: p3). - self assert: (arc4 includesPoint: p4). - self deny: (arc4 includesPoint: p5). - self deny: (arc4 includesPoint: p6). - self assert:(arc4 includesPoint: p7). - self assert:(arc4 includesPoint: p8). - self deny: (arc4 includesPoint: p1n). - self deny: (arc4 includesPoint: p2n). - self deny: (arc4 includesPoint: p3n). - self deny: (arc4 includesPoint: p4n). - self deny: (arc4 includesPoint: p5n). - self assert: (arc4 includesPoint: p6n). - self deny: (arc4 includesPoint: p7n). - self deny: (arc4 includesPoint: p8n). - - self deny: (arc5 includesPoint: p1). - self deny: (arc5 includesPoint: p2). - self deny: (arc5 includesPoint: p3). - self assert: (arc5 includesPoint: p4). - self deny: (arc5 includesPoint: p5). - self assert:(arc5 includesPoint: p6). - self assert:(arc5 includesPoint: p7). - self assert:(arc5 includesPoint: p8). - self deny: (arc5 includesPoint: p1n). - self assert: (arc5 includesPoint: p2n). - self assert: (arc5 includesPoint: p3n). - self assert: (arc5 includesPoint: p4n). - self deny: (arc5 includesPoint: p5n). - self assert: (arc5 includesPoint: p6n). - self assert: (arc5 includesPoint: p7n). - self assert: (arc5 includesPoint: p8n). - - self assert:(arcQ1 includesPoint: pR). - self deny:(arcQ1 includesPoint: pQ1). - self deny:(arcQ1 includesPoint: pB). - self deny:(arcQ1 includesPoint: pQ2). - self deny:(arcQ1 includesPoint: pL). - self deny:(arcQ1 includesPoint: pQ3). - self assert:(arcQ1 includesPoint: pT). - self assert: (arcQ1 includesPoint: pQ4). - - self deny:(arcQ2 includesPoint: pR). - self deny:(arcQ2 includesPoint: pQ1). - self deny:(arcQ2 includesPoint: pB). - self deny:(arcQ2 includesPoint: pQ2). - self assert:(arcQ2 includesPoint: pL). - self assert:(arcQ2 includesPoint: pQ3). - self assert:(arcQ2 includesPoint: pT). - self deny:(arcQ2 includesPoint: pQ4). - - self deny:(arcQ3 includesPoint: pR). - self deny:(arcQ3 includesPoint: pQ1). - self assert:(arcQ3 includesPoint: pB). - self assert:(arcQ3 includesPoint: pQ2). - self assert:(arcQ3 includesPoint: pL). - self deny: (arcQ3 includesPoint: pQ3). - self deny:(arcQ3 includesPoint: pT). - self deny:(arcQ3 includesPoint: pQ4). - - self assert:(arcQ4 includesPoint: pR). - self assert:(arcQ4 includesPoint: pQ1). - self assert:(arcQ4 includesPoint: pB). - self deny:(arcQ4 includesPoint: pQ2). - self deny:(arcQ4 includesPoint: pL). - self deny:(arcQ4 includesPoint: pQ3). - self deny:(arcQ4 includesPoint: pT). - self deny:(arcQ4 includesPoint: pQ4). - -] diff --git a/src/Trachel/TRBezier3Shape.class.st b/src/Trachel/TRBezier3Shape.class.st deleted file mode 100644 index 3a0c8ae14..000000000 --- a/src/Trachel/TRBezier3Shape.class.st +++ /dev/null @@ -1,102 +0,0 @@ -" -Describe a cubic Bezier spline -" -Class { - #name : #TRBezier3Shape, - #superclass : #TRAbstractLineShape, - #instVars : [ - 'listOfPoints' - ], - #category : #'Trachel-Shapes' -} - -{ #category : #visitor } -TRBezier3Shape >> accept: aVisitor [ - aVisitor visitBezierShape: self -] - -{ #category : #visitor } -TRBezier3Shape >> accept: aVisitor with: decoration [ - aVisitor visitBezierShape: self with: decoration -] - -{ #category : #hooks } -TRBezier3Shape >> computePath [ - path := self athensCanvas - createPath: [ :builder | - builder - absolute; - moveTo: listOfPoints first. - builder - curveViaX: listOfPoints first x asFloat Y: listOfPoints first y asFloat - viaX: listOfPoints second x asFloat Y: listOfPoints second y asFloat - toX: listOfPoints third x asFloat Y: listOfPoints third y asFloat. - ] -] - -{ #category : #drawing } -TRBezier3Shape >> drawOn: athensCanvas [ - athensCanvas pathTransform - restoreAfter: [ athensCanvas setShape: self path. - (athensCanvas setStrokePaint: self themedColor) width: width asFloat. - athensCanvas draw ] -] - -{ #category : #accessing } -TRBezier3Shape >> encompassingRectangle [ - ^ Rectangle encompassing: listOfPoints -] - -{ #category : #testing } -TRBezier3Shape >> includesPoint: aPoint [ - | delta points p1 p2 | - delta := 5. - points := self points. - 1 to: points size -1 do: [ :i | - p1 := points at: i. - p2 := points at: i + 1. - (aPoint onLineFrom: p1 to: p2 within: delta) ifTrue: [ ^ true ] ]. - ^ false. -] - -{ #category : #initialization } -TRBezier3Shape >> initialize [ - super initialize. - listOfPoints := Array with: 0 @ 0 with: 0 @ 0 with: 0 @ 0 -] - -{ #category : #accessing } -TRBezier3Shape >> numberOfPoints [ - ^ self points size -] - -{ #category : #accessing } -TRBezier3Shape >> points [ - ^ listOfPoints copy -] - -{ #category : #public } -TRBezier3Shape >> points: points [ - self assert: [ points size = 3 ] description: 'Only 3 points may be provided'. - listOfPoints := points -] - -{ #category : #public } -TRBezier3Shape >> points: aListOfPoints color: aColor [ - self assert: [ aListOfPoints size = 3 ] description: 'Only 3 points may be provided'. - - self points: aListOfPoints. - self strokePaint: aColor. - self color: aColor -] - -{ #category : #accessing } -TRBezier3Shape >> position [ - ^ self encompassingRectangle center -] - -{ #category : #actions } -TRBezier3Shape >> translateBy: aPoint [ - listOfPoints := listOfPoints collect: [ :p | p + aPoint ] - -] diff --git a/src/Trachel/TRBezier4Shape.class.st b/src/Trachel/TRBezier4Shape.class.st deleted file mode 100644 index e9963996e..000000000 --- a/src/Trachel/TRBezier4Shape.class.st +++ /dev/null @@ -1,39 +0,0 @@ -Class { - #name : #TRBezier4Shape, - #superclass : #TRBezier3Shape, - #category : #'Trachel-Shapes' -} - -{ #category : #hooks } -TRBezier4Shape >> computePath [ - path := self athensCanvas - createPath: [ :builder | - builder - absolute; - moveTo: listOfPoints first. - builder - curveViaX: listOfPoints second x asFloat Y: listOfPoints second y asFloat - viaX: listOfPoints third x asFloat Y: listOfPoints third y asFloat - toX: listOfPoints fourth x asFloat Y: listOfPoints fourth y asFloat. - ] -] - -{ #category : #'instance creation' } -TRBezier4Shape >> from: a to: b [ - "for layout process" -] - -{ #category : #public } -TRBezier4Shape >> points: points [ - self assert: [ points size = 4 ] description: 'Only 3 points may be provided'. - listOfPoints := points -] - -{ #category : #public } -TRBezier4Shape >> points: aListOfPoints color: aColor [ - self assert: [ aListOfPoints size = 4 ] description: 'Only 3 points may be provided'. - - self points: aListOfPoints. - self strokePaint: aColor. - self color: aColor -] diff --git a/src/Trachel/TRBezierShape.class.st b/src/Trachel/TRBezierShape.class.st deleted file mode 100644 index 39427e231..000000000 --- a/src/Trachel/TRBezierShape.class.st +++ /dev/null @@ -1,113 +0,0 @@ -Class { - #name : #TRBezierShape, - #superclass : #TRAbstractLineShape, - #instVars : [ - 'listOfPoints' - ], - #category : #'Trachel-Shapes' -} - -{ #category : #visitor } -TRBezierShape >> accept: aVisitor [ - aVisitor visitBezierShape: self -] - -{ #category : #visitor } -TRBezierShape >> accept: aVisitor with: decoration [ - aVisitor visitBezierShape: self with: decoration -] - -{ #category : #hooks } -TRBezierShape >> computePath [ - - path := self athensCanvas - createPath: [ :builder | - builder - absolute; - moveTo: listOfPoints first. - - (2 to: (listOfPoints size -2)) do: [ :index | - builder - curveVia: (listOfPoints at: index) asFloatPoint - to: (((listOfPoints at: index) + (listOfPoints at: (index + 1))) / 2) asFloatPoint. - ]. - builder - curveVia: (listOfPoints at: (listOfPoints size -1) ) - to: (listOfPoints at: (listOfPoints size) ) asFloatPoint. - - ] - -] - -{ #category : #drawing } -TRBezierShape >> drawOn: athensCanvas [ - - athensCanvas pathTransform restoreAfter: [ - - athensCanvas setShape: self path. - (athensCanvas setStrokePaint: self themedColor) width: width. - athensCanvas draw ] -] - -{ #category : #accessing } -TRBezierShape >> encompassingRectangle [ - ^ Rectangle encompassing: listOfPoints -] - -{ #category : #testing } -TRBezierShape >> includesPoint: aPoint [ - | delta points p1 p2 | - delta := 5. - points := self points. - 1 to: points size -1 do: [ :i | - p1 := points at: i. - p2 := points at: i + 1. - (aPoint onLineFrom: p1 to: p2 within: delta) ifTrue: [ ^ true ] ]. - ^ false. -] - -{ #category : #initialization } -TRBezierShape >> initialize [ - super initialize. - listOfPoints := Array with: 0 @ 0 with: 0 @ 0 -] - -{ #category : #accessing } -TRBezierShape >> numberOfPoints [ - ^ self points size -] - -{ #category : #accessing } -TRBezierShape >> points [ - ^ listOfPoints copy -] - -{ #category : #public } -TRBezierShape >> points: points [ - listOfPoints := points -] - -{ #category : #public } -TRBezierShape >> points: aListOfPoints color: aColor [ - - self points: aListOfPoints. - self strokePaint: aColor. - self color: aColor -] - -{ #category : #accessing } -TRBezierShape >> position [ - ^ self encompassingRectangle center -] - -{ #category : #accessing } -TRBezierShape >> strokePaint: aColor [ - "set the color of the border line" - self color: aColor -] - -{ #category : #actions } -TRBezierShape >> translateBy: aPoint [ - listOfPoints := listOfPoints collect: [ :p | p + aPoint ] - -] diff --git a/src/Trachel/TRBitmapShape.class.st b/src/Trachel/TRBitmapShape.class.st deleted file mode 100644 index a250e9122..000000000 --- a/src/Trachel/TRBitmapShape.class.st +++ /dev/null @@ -1,110 +0,0 @@ -Class { - #name : #TRBitmapShape, - #superclass : #TRShape, - #instVars : [ - 'form', - 'rectangle' - ], - #category : #'Trachel-Shapes' -} - -{ #category : #visitor } -TRBitmapShape >> accept: aVisitor [ - aVisitor visitBitMapShape: self -] - -{ #category : #accessing } -TRBitmapShape >> at: aPosition put: aColor [ - self form getCanvas fillRectangle: (aPosition extent: 1 @ 1) color: aColor -] - -{ #category : #private } -TRBitmapShape >> basicEncompassingRectangle [ - rectangle ifNil: [ self computeRectangle ]. - ^ rectangle -] - -{ #category : #accessing } -TRBitmapShape >> center [ - ^ self position -] - -{ #category : #private } -TRBitmapShape >> computeRectangle [ - form - ifNil: [ rectangle := (-2.5 @ -2.5) corner: (2.5 @ 2.5) ] - ifNotNil: [ rectangle := form boundingBox translateBy: form boundingBox center negated ]. -] - -{ #category : #drawing } -TRBitmapShape >> drawOn: athensCanvas [ - | paint | - athensCanvas pathTransform restoreAfter: [ - athensCanvas setShape: self form boundingBox. - athensCanvas pathTransform - multiplyBy: matrix asFloatTransform; - translateBy: self basicEncompassingRectangle corner negated. - self form ifNotNil: [ - paint := (athensCanvas cacheAt: self form - ifAbsentPut: [ (self form asAthensPaintOn: athensCanvas) ]). - athensCanvas setPaint: paint. - ]. - athensCanvas draw ]. -] - -{ #category : #accessing } -TRBitmapShape >> encompassingRectangle [ - ^ self transformedEncompassingRectangle -] - -{ #category : #'mode constants' } -TRBitmapShape >> erase [ - self fillColor: Color white -] - -{ #category : #accessing } -TRBitmapShape >> extent [ - ^ self width @ self height -] - -{ #category : #actions } -TRBitmapShape >> extent: anExtent [ - form := TRPlatform current formClass extent: anExtent depth: 32. -] - -{ #category : #accessing } -TRBitmapShape >> fillColor: aColor [ - self form getCanvas fillRectangle: (0 @ 0 extent: self encompassingRectangle extent) color: aColor -] - -{ #category : #accessing } -TRBitmapShape >> fillColorMap: aColorMap [ - self form getCanvas fillRectangle: (0 @ 0 extent: self extent) color: aColorMap -] - -{ #category : #accessing } -TRBitmapShape >> form [ - ^ form -] - -{ #category : #accessing } -TRBitmapShape >> form: aForm [ - form := aForm -] - -{ #category : #accessing } -TRBitmapShape >> height [ - ^ super height -] - -{ #category : #testing } -TRBitmapShape >> includesPoint: aPoint [ - | invertedPoint | - invertedPoint := matrix inverseTransform: aPoint. - ^ self basicEncompassingRectangle containsPoint: invertedPoint. -] - -{ #category : #accessing } -TRBitmapShape >> width [ - ^ super width -] diff --git a/src/Trachel/TRBoxShape.class.st b/src/Trachel/TRBoxShape.class.st deleted file mode 100644 index f9941a171..000000000 --- a/src/Trachel/TRBoxShape.class.st +++ /dev/null @@ -1,33 +0,0 @@ -Class { - #name : #TRBoxShape, - #superclass : #TRAbstractBoxShape, - #category : #'Trachel-Shapes' -} - -{ #category : #visitor } -TRBoxShape >> accept: aVisitor [ - aVisitor visitBoxShape: self -] - -{ #category : #private } -TRBoxShape >> computePath [ - canvas ifNil: [ ^ self ]. - path := self athensCanvas - createPath: [ :builder | - builder - absolute; - moveTo: rectangle topLeft; - lineTo: rectangle topRight; - lineTo: rectangle bottomRight; - lineTo: rectangle bottomLeft; - lineTo: rectangle topLeft; - closePath ] -] - -{ #category : #testing } -TRBoxShape >> includesPoint: aPoint [ - | invertedPoint | - (matrix sx = 0 or: [ matrix sy = 0 ]) ifTrue: [ ^ false ]. - invertedPoint := matrix inverseTransform: aPoint. - ^ rectangle containsPoint: invertedPoint. -] diff --git a/src/Trachel/TRBoxShapeTest.class.st b/src/Trachel/TRBoxShapeTest.class.st deleted file mode 100644 index aae0ed071..000000000 --- a/src/Trachel/TRBoxShapeTest.class.st +++ /dev/null @@ -1,105 +0,0 @@ -" -A TRBoxShapeTest is a test class for testing the behavior of TRBoxShape -" -Class { - #name : #TRBoxShapeTest, - #superclass : #TRTest, - #instVars : [ - 'box' - ], - #category : #'Trachel-Tests' -} - -{ #category : #running } -TRBoxShapeTest >> setUp [ - super setUp. - box := TRBoxShape new height: 30; width: 40. -] - -{ #category : #'tests - position' } -TRBoxShapeTest >> testBotomPosition [ - self assert: box bottomPosition equals: 0 @ 15 -] - -{ #category : #'tests - position' } -TRBoxShapeTest >> testBottomPosition02 [ - box position: -10 @ -10. - self assert: box bottomPosition equals: -10 @ 5 -] - -{ #category : #'tests - position' } -TRBoxShapeTest >> testBottomosition03 [ - box bottomPosition: -10 @ -10. - self assert: box bottomPosition equals: -10 @ -10. - self assert: box position equals: -10 @ -25. -] - -{ #category : #'tests - position' } -TRBoxShapeTest >> testDefaultPosition [ - self assert: box position equals: 0 @ 0 -] - -{ #category : #'tests - extent' } -TRBoxShapeTest >> testExtent [ - self assert: box extent equals: 40 @ 30 -] - -{ #category : #'tests - extent' } -TRBoxShapeTest >> testExtent02 [ - box extent: 5 @ 10. - self assert: box extent equals: 5 @ 10 -] - -{ #category : #'tests - position' } -TRBoxShapeTest >> testLeftPosition [ - self assert: box leftPosition equals: -20 @ 0 -] - -{ #category : #'tests - position' } -TRBoxShapeTest >> testLeftPosition02 [ - box position: -10 @ -10. - self assert: box leftPosition equals: -30 @ -10 -] - -{ #category : #'tests - position' } -TRBoxShapeTest >> testLeftPosition03 [ - box leftPosition: -10 @ -10. - self assert: box leftPosition equals: -10 @ -10. - self assert: box position equals: 10 @ -10. -] - -{ #category : #'tests - position' } -TRBoxShapeTest >> testRightPosition [ - self assert: box rightPosition equals: 20 @ 0 -] - -{ #category : #'tests - position' } -TRBoxShapeTest >> testRightPosition02 [ - box position: -10 @ -10. - self assert: box rightPosition equals: 10 @ -10 -] - -{ #category : #'tests - position' } -TRBoxShapeTest >> testRightPosition03 [ - box rightPosition: -10 @ -10. - self assert: box rightPosition equals: -10 @ -10. - self assert: box position equals: -30 @ -10. -] - -{ #category : #'tests - position' } -TRBoxShapeTest >> testTopPosition [ - self assert: box topPosition equals: 0 @ -15 -] - -{ #category : #'tests - position' } -TRBoxShapeTest >> testTopPosition02 [ - box position: -10 @ -10. - self assert: box topPosition equals: -10 @ -25 -] - -{ #category : #'tests - position' } -TRBoxShapeTest >> testTopPosition03 [ - box topPosition: -10 @ -10. - self assert: box topPosition equals: -10 @ -10. - self assert: box position equals: -10 @ 5. -] diff --git a/src/Trachel/TRCallableObject.class.st b/src/Trachel/TRCallableObject.class.st deleted file mode 100644 index d2c8d0bd0..000000000 --- a/src/Trachel/TRCallableObject.class.st +++ /dev/null @@ -1,83 +0,0 @@ -Class { - #name : #TRCallableObject, - #superclass : #TRObject, - #instVars : [ - 'callbacks' - ], - #category : #'Trachel-Core' -} - -{ #category : #callbacks } -TRCallableObject >> addCallback: aCallback [ - callbacks ifNil: [ callbacks := OrderedCollection new ]. - callbacks add: aCallback -] - -{ #category : #callbacks } -TRCallableObject >> callbacks [ - callbacks ifNil: [ callbacks := OrderedCollection new ]. - ^ callbacks -] - -{ #category : #callbacks } -TRCallableObject >> doWithoutCallbacks: aBlock [ - "Simply evaluate aBlock" - | oldCallbacks | - oldCallbacks := callbacks. - callbacks := #(). - aBlock value. - callbacks := oldCallbacks -] - -{ #category : #callbacks } -TRCallableObject >> hasCallback [ - ^ callbacks notNil -] - -{ #category : #callbacks } -TRCallableObject >> numberOfCallbacks [ - "Return the number of callbacks registered" - self hasCallback ifNil: [ ^ 0 ]. - ^ self callbacks size -] - -{ #category : #callbacks } -TRCallableObject >> removeCallback: aCallback ifAbsent: anErrorBlock [ - self hasCallback ifFalse: [ ^ self ]. - self callbacks remove: aCallback ifAbsent: anErrorBlock -] - -{ #category : #callbacks } -TRCallableObject >> triggerCallbacksForAddition [ - "aStep is a point that represents a translation step" - self hasCallback ifFalse: [ ^ self ]. - self callbacks do: [ :c | - c isAddedCallback ifTrue: [ - c addShape: self ] ] -] - -{ #category : #callbacks } -TRCallableObject >> triggerCallbacksForNewExtent: newExtent oldExtent: oldExtent [ - self hasCallback ifFalse: [ ^ self ]. - self callbacks do: [ :c | - c isExtentCallback ifTrue: [ - c shape: self newExtent: newExtent oldExtent: oldExtent ] ] -] - -{ #category : #callbacks } -TRCallableObject >> triggerCallbacksForStep: aStep [ - "aStep is a point that represents a translation step" - self hasCallback ifFalse: [ ^ self ]. - self callbacks do: [ :c | - c isTranslationCallback ifTrue: [ - c shape: self step: aStep ] ] -] - -{ #category : #callbacks } -TRCallableObject >> triggerRemoveCallbacks [ - "aStep is a point that represents a translation step" - self hasCallback ifFalse: [ ^ self ]. - self callbacks do: [ :c | - c isRemoveCallback ifTrue: [ - c removeShape: self ] ] -] diff --git a/src/Trachel/TRCallback.class.st b/src/Trachel/TRCallback.class.st deleted file mode 100644 index 044f34bcc..000000000 --- a/src/Trachel/TRCallback.class.st +++ /dev/null @@ -1,59 +0,0 @@ -" -I am abstract class for callbacks executed when Trachel shapes have changed in some way --- added to canvas, removed, changed size, etc. -" -Class { - #name : #TRCallback, - #superclass : #TRObject, - #instVars : [ - 'block' - ], - #category : #'Trachel-Callbacks' -} - -{ #category : #public } -TRCallback class >> block: aBlock [ - ^ self new block: aBlock -] - -{ #category : #accessing } -TRCallback >> block [ - ^ block - -] - -{ #category : #accessing } -TRCallback >> block: aOneArgBlock [ - "aThreeArgBlock follows the pattern [ :shape | ... ]" - block := aOneArgBlock -] - -{ #category : #initialization } -TRCallback >> initialize [ - super initialize. - block := [ :aShape :aValue | ] -] - -{ #category : #testing } -TRCallback >> isAddedCallback [ - ^ false -] - -{ #category : #testing } -TRCallback >> isCameraScaleCallback [ - ^ false -] - -{ #category : #testing } -TRCallback >> isExtentCallback [ - ^ false -] - -{ #category : #testing } -TRCallback >> isRemoveCallback [ - ^ false -] - -{ #category : #testing } -TRCallback >> isTranslationCallback [ - ^ false -] diff --git a/src/Trachel/TRCallbackTest.class.st b/src/Trachel/TRCallbackTest.class.st deleted file mode 100644 index e376ada8a..000000000 --- a/src/Trachel/TRCallbackTest.class.st +++ /dev/null @@ -1,91 +0,0 @@ -Class { - #name : #TRCallbackTest, - #superclass : #TRTest, - #instVars : [ - 'canvas', - 'circle1', - 'circle2', - 'rectangle1' - ], - #category : #'Trachel-Tests' -} - -{ #category : #running } -TRCallbackTest >> setUp [ - super setUp. - canvas := TRCanvas new. - rectangle1 := (20@20) corner: 150@100. - circle1 := canvas buildCircleFrom: rectangle1 origin - to: rectangle1 corner color: (Color green alpha: 0.1). - circle2 := canvas buildCircleFrom: 200 @ 200 to: 240 @ 230 color: (Color blue alpha: 0.1). -] - -{ #category : #tests } -TRCallbackTest >> testAllCallbacks [ - | counter1 callbacks | - counter1 := 0. - callbacks := TRCallback allSubclasses collect: #new. - callbacks do: [ :eachCallback | - eachCallback block: [ counter1 := counter1 + 1 ]. - circle1 addCallback: eachCallback ]. - circle1 - translateTo: 20 @ 30; - extent: 10 @ 10. - self assert: counter1 equals: 2. - "just to check there is no error." -] - -{ #category : #tests } -TRCallbackTest >> testExtentCallback [ - | callback v s newExtent | - callback := TRExtentCallback - block: [ :shape :ratio | - v := shape. s := ratio ]. - circle1 addCallback: callback. - - self assert: circle1 extent equals: rectangle1 extent. - newExtent := 5 @ 5. - circle1 extent: newExtent. - self assert: v == circle1. - self assert: v extent equals: newExtent. - self assert: s equals: newExtent / rectangle1 extent. - -] - -{ #category : #tests } -TRCallbackTest >> testExtentCallbackWith0 [ - - | s callback | - s := TRBoxShape new size: 0. - callback := TRExtentCallback new shape: s newExtent: 5 @ 5 oldExtent: 0 @ 0. - -] - -{ #category : #tests } -TRCallbackTest >> testHasCallBack [ - - self deny: TREllipseShape new hasCallback. - self assert: (TREllipseShape new addCallback: TRTranslationCallback new) hasCallback -] - -{ #category : #tests } -TRCallbackTest >> testTranslationCallback [ - | callback v s | - callback := TRTranslationCallback - block: [ :shape :step | - v := shape. s := step ]. - circle1 addCallback: callback. - - self assert: circle1 position = rectangle1 center. - circle1 translateTo: 20 @ 30. - self assert: v == circle1. - self assert: v center = (20 @ 30). - self assert: s = ((20 @ 30) - rectangle1 center). - - v := nil. - circle1 translateBy: 5 @ 3. - self assert: v == circle1. - self assert: v center = (25 @ 33). - self assert: s = (5 @ 3). - -] diff --git a/src/Trachel/TRCamera.class.st b/src/Trachel/TRCamera.class.st deleted file mode 100644 index 7c98e290d..000000000 --- a/src/Trachel/TRCamera.class.st +++ /dev/null @@ -1,232 +0,0 @@ -" -I am main tool which helps to move across Trachel's canvas. - -My two main properties are position and scale. - -- position - is a point representing coordinates of the canvas on which the ""viewing window"" will be centered. - position can be changes with: - * #translateBy: - * #translateTo: - both methods accept canvas based coordinates - -- scale - defines a magnitude of zooming applied to the canvas and it's elements. - -I provide two methods that allow conversion between coanvas (space) coordinate system and real window(pixel)'s coordinates. -* #fromPixelToSpace: -* #fromSpaceToPixel: - -Also I provide handy methods for centering camera on current elements and zoomeing to fit everuthing in the square with desired size (default 500pnt). -* #focusOnCenter -* #focusOnCenterScaled -* #focusOnCenterScaled: -" -Class { - #name : #TRCamera, - #superclass : #TRCallableObject, - #instVars : [ - 'position', - 'canvas', - 'scale', - 'initializer' - ], - #classInstVars : [ - 'nullCamera' - ], - #category : #'Trachel-Core' -} - -{ #category : #public } -TRCamera class >> forCanvas: aTrachelCanvas [ - - ^ super new canvas: aTrachelCanvas -] - -{ #category : #public } -TRCamera class >> new [ - self error: 'Instance of this class have to be created with #forCanvas:' -] - -{ #category : #public } -TRCamera class >> null [ - nullCamera ifNil: [ nullCamera := self forCanvas: TRCanvas new ]. - ^ nullCamera -] - -{ #category : #actions } -TRCamera >> adjust [ - "This method adjust the camera from the initializer. This method is called by RTView>>setUpCanvas, when opening the view" - initializer executeOn: self -] - -{ #category : #accessing } -TRCamera >> canvas [ - "Return the trachel canvas I am observing" - ^ canvas -] - -{ #category : #accessing } -TRCamera >> canvas: aTrachelCanvas [ - "Set the canvas to observe" - canvas := aTrachelCanvas -] - -{ #category : #initialization } -TRCamera >> defaultCameraScale [ - ^ 1.0001 -] - -{ #category : #convertion } -TRCamera >> distanceFromPixelToSpace: aPoint [ - ^ (aPoint / self scale) asFloatPoint - "^ AthensAffineTransform new scaleBy: (1 / self scale) asFloat; translation: aPoint; transform: aPoint" -] - -{ #category : #utility } -TRCamera >> encompassingRectangle [ - "Return the encompassing rectangle of all the elements contained in the canvas" - "Maybe a method encompassingRectangle has to be defined in TRCanvas?" - ^ self encompassingRectangleOf: canvas shapes -] - -{ #category : #utility } -TRCamera >> encompassingRectangleOf: shapes [ - ^ shapes asGroup encompassingRectangle - -] - -{ #category : #actions } -TRCamera >> focusOnCenter [ - "Do nothing if no shape are present." - - canvas numberOfShapes = 0 - ifTrue: [ ^ self ]. - "Need to get the center by ourselves since Rectangle>>center truncate the result." - "However convert to float point, because FFI down the line (AthensCairoMatrix>>translateX:Y:) cannot coerce Fraction. It could be converted there instead, but this is the only place I have ever encountered the problem in, so maybe don't do needless conversions all the time." - self - translateTo: (self encompassingRectangle in: [ :eR | (eR topLeft + eR bottomRight) / 2 ]) asFloatPoint -] - -{ #category : #actions } -TRCamera >> focusOnCenterScaled [ - ^ self focusOnCenterScaled: 500@500. - - -] - -{ #category : #actions } -TRCamera >> focusOnCenterScaled: aFactor [ - | sc rec | - canvas numberOfShapes = 0 ifTrue: [ ^ self ]. - rec := self encompassingRectangle. - self translateTo: rec center. - sc := aFactor / ((rec extent) max: 1 @ 1). - sc := (sc x < sc y) ifTrue: [sc x] ifFalse: [ sc y ]. - self scale: sc. - ^ sc -] - -{ #category : #convertion } -TRCamera >> fromPixelToSpace: aPoint [ - - ^ TRPlatform current affineTransformClass new - translateBy: self position; - scaleBy: 1 / self scale; - translateBy: (self canvas extent / 2) negated; - transform: aPoint -] - -{ #category : #convertion } -TRCamera >> fromPixelToSpaceForRectangle: aRectangle [ - "Return a new rectangle that corresponds to the projection of the argument (expressed in the space coordinate) into the pixels coordinate" - ^ (self fromPixelToSpace: aRectangle topLeft) corner: (self fromPixelToSpace: aRectangle bottomRight) -] - -{ #category : #convertion } -TRCamera >> fromSpaceToPixel: aPoint [ - - ^ TRPlatform current affineTransformClass new - translateBy: self canvas extent / 2; - scaleBy: self scale; - translateBy: self position negated; - transform: aPoint - -] - -{ #category : #convertion } -TRCamera >> fromSpaceToPixelForRectangle: aRectangle [ - - ^ (self fromSpaceToPixel: aRectangle topLeft) corner: (self fromSpaceToPixel: aRectangle bottomRight) -] - -{ #category : #initialization } -TRCamera >> initialize [ - super initialize. - position := 0 @ 0. - scale := self defaultCameraScale. - initializer := TRCameraInitializer focusOnCenter -] - -{ #category : #'testing visibility' } -TRCamera >> isVisible: aShape [ - "Return true if aShape is fully or partially visible. I.e., the encompassing bounds of aShape intersects of the of the canvas " - | rec ext | - rec := aShape encompassingRectangle. - rec := self fromSpaceToPixelForRectangle: rec. - ext := self canvas extent. - ^ (0 @ 0 extent: ext) intersects: rec -] - -{ #category : #actions } -TRCamera >> noInitializationWhenOpen [ - "The default behavior, is when a canvas is open, the camera is set at the center of all the elements." - self toAdjust: (TRCameraInitializer new block: [ :camera | ]). -] - -{ #category : #accessing } -TRCamera >> position [ - "Return the position of the camera, in the space coordinates" - ^ position -] - -{ #category : #accessing } -TRCamera >> scale [ - "Return an integer corresponding to the scaling" - ^ scale -] - -{ #category : #accessing } -TRCamera >> scale: aNewScaleAsInteger [ - scale := aNewScaleAsInteger. - self triggerCallbacksForScale: aNewScaleAsInteger -] - -{ #category : #accessing } -TRCamera >> toAdjust: aCameraInitializer [ - initializer := aCameraInitializer -] - -{ #category : #actions } -TRCamera >> translateBy: aPoint [ - "Move the camera using a step" - position := position + aPoint. - self triggerCallbacksForStep: aPoint -] - -{ #category : #actions } -TRCamera >> translateTo: newPosition [ - "Move the camera to a new position. Note that some callbacks may be triggered" - | step | - step := newPosition - position. - position := newPosition. - self triggerCallbacksForStep: step. -] - -{ #category : #callbacks } -TRCamera >> triggerCallbacksForScale: aScaleFactor [ - callbacks ifNil: [ ^ self ]. - callbacks do: [ :c | - c isCameraScaleCallback ifTrue: [ - c scaleChanged: aScaleFactor ] ] -] diff --git a/src/Trachel/TRCameraInitializer.class.st b/src/Trachel/TRCameraInitializer.class.st deleted file mode 100644 index 5e6f30413..000000000 --- a/src/Trachel/TRCameraInitializer.class.st +++ /dev/null @@ -1,70 +0,0 @@ -Class { - #name : #TRCameraInitializer, - #superclass : #TRObject, - #instVars : [ - 'block' - ], - #classVars : [ - 'LastCamera' - ], - #category : #'Trachel-Core' -} - -{ #category : #public } -TRCameraInitializer class >> focusOnCenter [ - ^ self new focusOnCenter -] - -{ #category : #public } -TRCameraInitializer class >> reset [ - LastCamera := nil -] - -{ #category : #public } -TRCameraInitializer class >> restorePrevious [ - ^ self new restorePrevious -] - -{ #category : #accessing } -TRCameraInitializer >> block [ - ^ block -] - -{ #category : #accessing } -TRCameraInitializer >> block: oneArgBlock [ - "oneArgBlock takes as parameter a camera" - block := oneArgBlock -] - -{ #category : #public } -TRCameraInitializer >> executeOn: camera [ - "Do nothing" - block rtValue: camera -] - -{ #category : #'public - configuration' } -TRCameraInitializer >> focusOnCenter [ - block := [ :camera | camera focusOnCenter ] -] - -{ #category : #initialization } -TRCameraInitializer >> initialize [ - super initialize. - self focusOnCenter -] - -{ #category : #'public - configuration' } -TRCameraInitializer >> restorePrevious [ - block := [ :camera | self restorePrevious: camera ] - -] - -{ #category : #utility } -TRCameraInitializer >> restorePrevious: camera [ - - | canvas | - LastCamera ifNil: [ LastCamera := camera ]. - canvas := camera canvas. - canvas camera: LastCamera. - LastCamera canvas: canvas -] diff --git a/src/Trachel/TRCameraScaleCallback.class.st b/src/Trachel/TRCameraScaleCallback.class.st deleted file mode 100644 index fa00eaf04..000000000 --- a/src/Trachel/TRCameraScaleCallback.class.st +++ /dev/null @@ -1,20 +0,0 @@ -" -I am triggered when the Camera scale (zoom) has changed. - -I should be atteched to TRCamera (`aView canvas camera addCallback:`) -" -Class { - #name : #TRCameraScaleCallback, - #superclass : #TRCallback, - #category : #'Trachel-Callbacks' -} - -{ #category : #testing } -TRCameraScaleCallback >> isCameraScaleCallback [ - ^ true -] - -{ #category : #action } -TRCameraScaleCallback >> scaleChanged: aScaleFactorAsInteger [ - ^ block cull: aScaleFactorAsInteger -] diff --git a/src/Trachel/TRCameraTest.class.st b/src/Trachel/TRCameraTest.class.st deleted file mode 100644 index 537c37bd0..000000000 --- a/src/Trachel/TRCameraTest.class.st +++ /dev/null @@ -1,155 +0,0 @@ -Class { - #name : #TRCameraTest, - #superclass : #TRTest, - #instVars : [ - 'camera', - 'canvas' - ], - #category : #'Trachel-Tests' -} - -{ #category : #running } -TRCameraTest >> setUp [ - super setUp. - canvas := TRCanvas new. - camera := canvas camera -] - -{ #category : #conversion } -TRCameraTest >> testConversion [ - self assert: ((camera fromSpaceToPixel: 0 @ 0) closeTo: (canvas extent / 2)). - self assert: ((camera fromSpaceToPixel: 10 @ 10) closeTo: ((canvas extent / 2) + (10 @ 10))). - - self assert: (camera fromPixelToSpace: (canvas extent / 2)) = (0 @ 0). - self assert: ((camera fromPixelToSpace: ((canvas extent / 2) + (10 @ 10))) closeTo: (10 @ 10)). - - camera - translateTo: 5 @ -15; - scale: 2. - - self assert: (camera fromSpaceToPixel: 0 @ 0) = (canvas extent / 2 - (10 @ -30)). - self assert: (camera fromSpaceToPixel: 10 @ 10) = ((canvas extent / 2) + (10 @ 50)). - - self assert: (camera fromPixelToSpace: (canvas extent / 2 - (10 @ -30))) = (0 @ 0). - self assert: (camera fromPixelToSpace: ((canvas extent / 2) + (10 @ 50))) = (10 @ 10). - - camera - translateTo: 21578 @ -1239; - scale: 736. - - self assert: - ((camera fromPixelToSpace: (camera fromSpaceToPixel: 100 @ 100)) - closeTo: 100 @ 100). - - self assert: - ((camera fromSpaceToPixel: (camera fromPixelToSpace: 100 @ 100)) - closeTo: 100 @ 100) -] - -{ #category : #focusing } -TRCameraTest >> testFocusingCenter [ - canvas addShape: (TREllipseShape new from: 50 @ 50 to: 100 @ 80). - canvas camera focusOnCenter. - self assert: canvas camera position = (75 @ 65) -] - -{ #category : #tests } -TRCameraTest >> testInitialization [ - self assert: camera position = (0 @ 0) -] - -{ #category : #visibility } -TRCameraTest >> testIsVisible [ - | c s | - c := TRCanvas new. - s := TREllipseShape new size: 50. - c addShape: s. - - self assert: c extent equals: 500 @ 500. - - self assert: s position equals: 0 @ 0. - self assert: s isVisible. - - "Outside the canvas" - s translateTo: 600 @ 600. - self deny: s isVisible. - - "Inside the canvas" - s translateBy: -400 @ -400. - self assert: s isVisible. - - "Inside the canvas" - s translateTo: -200 @ -200. - self assert: s isVisible. - - "Outside the canvas" - s translateTo: -400 @ -400. - self deny: s isVisible. -] - -{ #category : #visibility } -TRCameraTest >> testIsVisibleWithCameraMoving [ - | c s | - c := TRCanvas new. - s := TREllipseShape new size: 50. - c addShape: s. - - c camera translateBy: 200 @ 200. - - self assert: s position equals: 0 @ 0. - self assert: s isVisible. - - "Outside the canvas" - s translateBy: -100 @ -100. - self deny: s isVisible. - -] - -{ #category : #callbacks } -TRCameraTest >> testScale [ - | callback t | - callback := TRCameraScaleCallback new. - t := 0. - callback block: [ :newScale | t := t + 1 ]. - camera addCallback: callback. - self assert: t equals: 0. - - camera scale: 0.5. - self assert: t equals: 1. - - camera scale: 10. - self assert: t equals: 2. - - camera scale: 11. - self assert: t equals: 3. - -] - -{ #category : #callbacks } -TRCameraTest >> testTranslateBy [ - | callback t | - callback := TRTranslationCallback new. - t := 0. - callback block: [ :o :step | t := t + 1 ]. - camera addCallback: callback. - self assert: t equals: 0. - - camera translateBy: 5 @ 4. - self assert: t equals: 1. - - camera translateBy: 5 @ 4. - self assert: t equals: 2. - - camera translateTo: 15 @ 4. - self assert: t equals: 3. - -] - -{ #category : #tests } -TRCameraTest >> testTranslation [ - camera translateTo: 5 @ 3. - self assert: camera position = (5 @ 3). - - camera translateBy: 2 @ 4. - self assert: camera position = (7 @ 7). -] diff --git a/src/Trachel/TRCanvas.class.st b/src/Trachel/TRCanvas.class.st deleted file mode 100644 index 9493006f6..000000000 --- a/src/Trachel/TRCanvas.class.st +++ /dev/null @@ -1,663 +0,0 @@ -Class { - #name : #TRCanvas, - #superclass : #TRCallableObject, - #instVars : [ - 'canvas', - 'shapes', - 'fixedShapes', - 'extent', - 'animations', - 'morph', - 'camera', - 'announcer', - 'color', - 'session', - 'eventOverseer', - 'theme', - 'clearBackground' - ], - #category : #'Trachel-Core' -} - -{ #category : #visitor } -TRCanvas >> accept: aVisitor [ - aVisitor visitCanvas: self -] - -{ #category : #animations } -TRCanvas >> addAnimation: anAnimation [ - animations add: anAnimation. - anAnimation addedIn: self. - anAnimation start. - self signalUpdate -] - -{ #category : #'adding removing shapes' } -TRCanvas >> addFixedShape: shape [ - fixedShapes add: shape. - shape canvas: self -] - -{ #category : #menu } -TRCanvas >> addMenu: aTitle callback: aBlock [ - | lbl index | - index := fixedShapes inject: 0 into: [ :s :e | s max: (e encompassingRectangle topRight x + 10) ]. - lbl := TRLabelShape new text: aTitle; translateLeftTo: index @ 20. - lbl color: Color black. - lbl when: TRMouseClick do: [ :event | aBlock value ]. - lbl when: TRMouseEnter do: [ :event | lbl color: Color blue. self signalUpdate ]. - lbl when: TRMouseLeave do: [ :event | lbl color: Color black. self signalUpdate ]. - self addFixedShape: lbl -] - -{ #category : #menu } -TRCanvas >> addMenuAsSVG: aTitle callback: aBlock [ - ^ self addMenuAsSVG: aTitle scale: 1.0 callback: aBlock -] - -{ #category : #menu } -TRCanvas >> addMenuAsSVG: aTitle scale: scaleAsFloat callback: aBlock [ - | icon index | - index := fixedShapes inject: 0 into: [ :s :e | s max: (e encompassingRectangle topRight x + 10) ]. - icon := TRSVGPath new path: aTitle. - icon scaleBy: scaleAsFloat. - icon color: Color black. - icon when: TRMouseClick do: [ :event | aBlock value ]. - icon when: TRMouseEnter do: [ :event | icon color: Color blue. self signalUpdate ]. - icon when: TRMouseLeave do: [ :event | icon color: Color black. self signalUpdate ]. - self addFixedShape: icon -] - -{ #category : #'adding removing shapes' } -TRCanvas >> addShape: shape [ - shape addedIn: self. - shape triggerCallbacksForAddition -] - -{ #category : #'adding removing shapes' } -TRCanvas >> addShape: shape atIndex: index [ - shape addedIn: self atIndex: index. - shape triggerCallbacksForAddition -] - -{ #category : #accessing } -TRCanvas >> allShapesWithAction: eventClass forPositionInPixels: position [ - "position is in pixel, it corresponds to the physical location in the window. - e.g., 0 @ 0 is top left of the window" - - | pos shapesWithAction | - shapesWithAction := OrderedCollection new. - fixedShapes - reverseDo: [ :s | - ((s includesPoint: position) and: [ s announcer handleEventClass: eventClass ]) - ifTrue: [ shapesWithAction add: s ] ]. - pos := self camera fromPixelToSpace: position. - shapes - reverseDo: [ :s | - ((s includesPoint: pos) and: [ s announcer handleEventClass: eventClass ]) - ifTrue: [ shapesWithAction add: s ] ]. - (self announcer handleEventClass: eventClass) - ifTrue: [ shapesWithAction add: self ]. - ^ shapesWithAction -] - -{ #category : #animations } -TRCanvas >> animations [ - ^ animations -] - -{ #category : #animations } -TRCanvas >> animationsRemoveAll: someAnimations [ - animations := animations copyWithoutAll: someAnimations -] - -{ #category : #events } -TRCanvas >> announce: anEvent [ - self announcer announce: anEvent -] - -{ #category : #events } -TRCanvas >> announcer [ - announcer isNil ifTrue: [ announcer := Announcer new ]. - ^ announcer -] - -{ #category : #events } -TRCanvas >> announcer: anAnnouncer [ - announcer := anAnnouncer -] - -{ #category : #accessing } -TRCanvas >> athensCanvas [ - ^ self canvas -] - -{ #category : #'adding removing shapes' } -TRCanvas >> buildArcAlphaAngle: stAngle betaAngle: ndAngle innerRadius: iR externalRadius: eR [ - | shape | - shape := TRArcShape new. - shape alphaAngle: stAngle betaAngle: ndAngle innerRadius: iR externalRadius: eR. - self addShape: shape. - ^ shape -] - -{ #category : #'adding removing shapes' } -TRCanvas >> buildCircleFrom: aPoint to: anotherPoint color: aColor [ - | shape | - shape := TREllipseShape new. - shape from: aPoint to: anotherPoint color: aColor. - self addShape: shape. - ^ shape -] - -{ #category : #'adding removing shapes' } -TRCanvas >> buildLineFrom: aPoint to: anotherPoint color: aColor [ - | shape | - shape := TRLineShape new. - shape from: aPoint to: anotherPoint color: aColor. - self addShape: shape. - ^ shape -] - -{ #category : #'instance creation' } -TRCanvas >> buildMorph [ - morph := self morphClass new - canvas: self; - extent: self canvas extent. - ^ morph -] - -{ #category : #'adding removing shapes' } -TRCanvas >> buildRectangle: aRectangle color: aColor [ - | shape | - shape := TRBoxShape new. - shape fromRectangle: aRectangle color: aColor. - self addShape: shape. - ^ shape -] - -{ #category : #accessing } -TRCanvas >> camera [ - ^ camera -] - -{ #category : #accessing } -TRCanvas >> camera: aCamera [ - camera := aCamera -] - -{ #category : #events } -TRCanvas >> canvas [ - session == TRPlatform current session - ifFalse: [ - canvas := TRPlatform current surfaceClass extent: extent asIntegerPoint. - session := TRPlatform current session ]. - ^ canvas -] - -{ #category : #actions } -TRCanvas >> clean [ - self shapes copy do: #remove. - self fixedShapes copy do: #remove -] - -{ #category : #accessing } -TRCanvas >> clearBackground [ - ^ clearBackground -] - -{ #category : #accessing } -TRCanvas >> clearBackground: aBool [ - clearBackground := aBool -] - -{ #category : #accessing } -TRCanvas >> color [ - "Return the color used as background" - ^ color -] - -{ #category : #accessing } -TRCanvas >> color: aColor [ - "Set the color used as background" - color := aColor. - self signalUpdate -] - -{ #category : #accessing } -TRCanvas >> encompassingRectangle [ - "Return the encompassing rectangle of all the elements contained in the canvas" - - | r e | - r := self camera encompassingRectangleOf: self shapes. - e := r extent max: 1 @ 1. - ^ r topLeft extent: e -] - -{ #category : #accessing } -TRCanvas >> eventOverseer [ - "Return the event overseer, if defined. The overseer is an object that gets notificed by all events of the morph" - ^ eventOverseer -] - -{ #category : #events } -TRCanvas >> eventOverseer: anEventOverseer [ - "This method register anEventOverseer as the event overseer in the TRMorph. At each event fired by, the event overseer will get notified" - eventOverseer := anEventOverseer -] - -{ #category : #accessing } -TRCanvas >> extent [ - "size of the canvas" - ^ extent -] - -{ #category : #accessing } -TRCanvas >> extent: newExtentAsPoint [ - "Set of the size of the canvas. Useful, for example, when the window is resized" - | evt | - evt := TRResizeCanvasEvent new. - evt oldExtent: extent. - evt newExtent: newExtentAsPoint. - extent := newExtentAsPoint. - self announce: evt -] - -{ #category : #actions } -TRCanvas >> firstElementOf: aCollection [ - "Return the first element of aCollection that will be displayed. This method assume that all elements contained in aCollection belong to shapes. It also assumes that aCollection is not empty" - | lastElement lastIndex | - lastElement := aCollection first. - lastIndex := shapes indexOf: lastElement. - aCollection do: [ :e | - | v | - v := shapes indexOf: e. - (v < lastIndex) ifTrue: [ - lastElement := e. - lastIndex := v ] - ]. - ^ lastElement -] - -{ #category : #accessing } -TRCanvas >> fixedShapes [ - ^ fixedShapes -] - -{ #category : #accessing } -TRCanvas >> fixedShapesDo: aOneArgBlock [ - fixedShapes do: aOneArgBlock -] - -{ #category : #actions } -TRCanvas >> focusOnCenterScaled [ - ^ self camera focusOnCenterScaled: self extent * 0.9 -] - -{ #category : #animations } -TRCanvas >> hasAnimation [ - "True if at least one animation is running" - ^ animations notEmpty -] - -{ #category : #animations } -TRCanvas >> hasAnimation: anAnimation [ - "True if anAnimation is running" - ^ animations includes: anAnimation -] - -{ #category : #theme } -TRCanvas >> hasTheme [ - "Return whether the canvas has a theme set by the user. If no theme is set, then - a theme will be infered by (TRMorph or TRVisual)" - ^ theme notNil -] - -{ #category : #initialization } -TRCanvas >> initialize [ - super initialize. - extent := 500 @ 500. - canvas := TRPlatform current surfaceClass extent: extent. - shapes := OrderedCollection new. - fixedShapes := OrderedCollection new. - animations := OrderedCollection new. - camera := TRCamera forCanvas: self. - theme := TRTheme infer. - color := theme trachelCanvasColor. - session := TRPlatform current session. - clearBackground := true. - "No event overseer at the creation" - eventOverseer := nil -] - -{ #category : #testing } -TRCanvas >> isFixedShape: aShape [ - ^ fixedShapes includes: aShape -] - -{ #category : #testing } -TRCanvas >> isMovableShape: aShape [ - ^ shapes includes: aShape -] - -{ #category : #accessing } -TRCanvas >> morph [ - ^ morph -] - -{ #category : #'instance creation' } -TRCanvas >> morphClass [ - ^ TRPlatform current trMorphClass -] - -{ #category : #events } -TRCanvas >> notifyEventOverseerWith: anEvent [ - eventOverseer ifNil: [ ^ self ]. - eventOverseer firedEvent: anEvent -] - -{ #category : #animations } -TRCanvas >> numberOfAnimations [ - "Return the number of animations contained in the canvas" - ^ animations size -] - -{ #category : #accessing } -TRCanvas >> numberOfFixedShapes [ - "Return the number of displayed shapes" - ^ fixedShapes size -] - -{ #category : #accessing } -TRCanvas >> numberOfShapes [ - "Return the number of displayed nonfixed shapes" - ^ shapes size -] - -{ #category : #'instance creation' } -TRCanvas >> open [ - ^ self openInWindowSized: 500 @ 500 -] - -{ #category : #'instance creation' } -TRCanvas >> openInWindowSized: anExtentAsPoint [ - | window | - self buildMorph. - window := morph openInWindow. - window extent: anExtentAsPoint. - ^ window -] - -{ #category : #'instance creation' } -TRCanvas >> openInWindowSized: anExtentAsPoint titled: aTitle [ - | window | - window := self openInWindowSized: anExtentAsPoint. - window setLabel: aTitle. - ^ window -] - -{ #category : #'instance creation' } -TRCanvas >> openTitled: aTitle [ - ^ self openInWindowSized: 500 @ 500 titled: aTitle -] - -{ #category : #animations } -TRCanvas >> playAnimations [ - | shouldClean | - shouldClean := false. - animations do: [ :animation | - animation refresh. - animation hasCompleted ifTrue: [ shouldClean := true ] ]. - - shouldClean ifTrue: [ - animations := animations reject: [ :animation | animation hasCompleted ] ]. -] - -{ #category : #private } -TRCanvas >> privateAdd: shape [ - shapes add: shape -] - -{ #category : #private } -TRCanvas >> privateAdd: shape atIndex: index [ - shapes add: shape beforeIndex: index -] - -{ #category : #private } -TRCanvas >> privateIndexInCanvasOf: aShape [ - ^ shapes indexOf: aShape -] - -{ #category : #private } -TRCanvas >> privateShapes [ - ^ shapes -] - -{ #category : #private } -TRCanvas >> privateShapes: aCollection [ - shapes := aCollection -] - -{ #category : #actions } -TRCanvas >> push: aShape behind: anotherShape [ - | index | - aShape remove. - index := anotherShape indexInCanvas. - aShape addedIn: self atIndex: index. - aShape canvas: self -] - -{ #category : #actions } -TRCanvas >> push: aShape behindAll: aCollection [ - "Move the first argument, which is supposely be contained in the shapes variable, before all elements contained in aCollection" - | firstElement | - firstElement := self firstElementOf: aCollection. - self push: aShape behind: firstElement -] - -{ #category : #actions } -TRCanvas >> pushAll: elements1 behindAll: elements2 [ - "Move all elements in elements1, which are supposely contained in the shapes variable, before all elements contained in elements2" - | firstElement | - firstElement := self firstElementOf: elements2. - elements1 do: [ :e | - self push: e behind: firstElement ] -] - -{ #category : #actions } -TRCanvas >> pushBack: aShape [ - (shapes includes: aShape) - ifTrue: [ - shapes remove: aShape. - shapes addFirst: aShape ]. - - (fixedShapes includes: aShape) - ifTrue: [ - fixedShapes remove: aShape. - fixedShapes addFirst: aShape ] -] - -{ #category : #actions } -TRCanvas >> pushFront: aShape [ - | tColl | - tColl := aShape isFixed - ifTrue: - [ fixedShapes ] - ifFalse: - [ shapes ]. - - tColl remove: aShape. - tColl addLast: aShape -] - -{ #category : #animations } -TRCanvas >> removeAnimation: anAnimation [ - animations := animations copyWithout: anAnimation -] - -{ #category : #actions } -TRCanvas >> removeFixedShape: aShape [ - fixedShapes := fixedShapes copyWithout: aShape -] - -{ #category : #actions } -TRCanvas >> removeFixedShapes: someShapes [ - fixedShapes := fixedShapes copyWithoutAll: someShapes -] - -{ #category : #'adding removing shapes' } -TRCanvas >> removeShape: shape [ - shapes remove: shape ifAbsent: [ self removeFixedShape: shape ]. - shape canvas: nil. - shape triggerRemoveCallbacks -] - -{ #category : #'adding removing shapes' } -TRCanvas >> removeShapes: someShapes [ - shapes := shapes copyWithoutAll: someShapes. - self removeFixedShapes: someShapes. - someShapes do: [ :aShape | aShape canvas: nil; triggerRemoveCallbacks ]. - -] - -{ #category : #actions } -TRCanvas >> resetLineShapes [ - "Remove all the shapes, no callback on the shapes is invoked!" - shapes := shapes reject: #isLineShape -] - -{ #category : #actions } -TRCanvas >> resetShapes [ - "Remove all the shapes, no callback on the shapes is invoked!" - shapes := OrderedCollection new. -] - -{ #category : #actions } -TRCanvas >> setAsFixed: aShape [ - - self removeShape: aShape. - self addFixedShape: aShape. - - -] - -{ #category : #accessing } -TRCanvas >> shapeForPosition: position [ - "Return the Trachel shape located at position" - fixedShapes reverseDo: [ :s | - (s includesPoint: position) ifTrue: [ ^ s ] ]. - - shapes reverseDo: [ :s | - (s includesPoint: position) ifTrue: [ ^ s ] ]. - ^ self -] - -{ #category : #accessing } -TRCanvas >> shapeForPositionInPixels: position [ - "position is in pixel, it corresponds to the physical location in the window. - e.g., 0 @ 0 is top left of the window" - fixedShapes reverseDo: [ :s | - (s includesPoint: position) ifTrue: [ ^ s ] ]. - - shapes reverseDo: [ :s | - (s includesPoint: (self camera fromPixelToSpace: position)) ifTrue: [ ^ s ] ]. - ^ self -] - -{ #category : #accessing } -TRCanvas >> shapeWithAction: eventClass forPositionInPixels: position [ - "position is in pixel, it corresponds to the physical location in the window. - e.g., 0 @ 0 is top left of the window" - | pos | - fixedShapes reverseDo: [ :s | - ((s includesPoint: position) and: [ s announcer handleEventClass: eventClass ]) ifTrue: [ ^ s ] ]. - pos := self camera fromPixelToSpace: position. - shapes reverseDo: [ :s | - ((s includesPoint: pos) - and: [ s announcer handleEventClass: eventClass ]) ifTrue: [ ^ s ] ]. - ^ self -] - -{ #category : #accessing } -TRCanvas >> shapeWithAction: eventClass forPositionInPixels: position under: aShape [ - "position is in pixel, it corresponds to the physical location in the window. - e.g., 0 @ 0 is top left of the window" - - | pos | - pos := self camera fromPixelToSpace: position. - shapes - reverseDo: [ :s | - (s ~= aShape - and: [ (s includesPoint: pos) and: [ s announcer handleEventClass: eventClass ] ]) - ifTrue: [ ^ s ] ]. - ^ self -] - -{ #category : #accessing } -TRCanvas >> shapeWithActionForPosition: position [ - "Return a Trachel Shape for a given position that answer events" - fixedShapes reverseDo: [ :s | - ((s includesPoint: position) and: [ s hasEventCallback ]) ifTrue: [ ^ s ] ]. - - shapes reverseDo: [ :s | - ((s includesPoint: position) and: [ s hasEventCallback ]) ifTrue: [ ^ s ] ]. - ^ self -] - -{ #category : #accessing } -TRCanvas >> shapeWithActionForPositionInPixels: position [ - "position is in pixel, it corresponds to the physical location in the window. - e.g., 0 @ 0 is top left of the window" - | pos | - fixedShapes reverseDo: [ :s | - ((s includesPoint: position) and: [ s hasEventCallback ]) ifTrue: [ ^ s ] ]. - pos := self camera fromPixelToSpace: position. - shapes reverseDo: [ :s | - ((s includesPoint: pos) - and: [ s hasEventCallback ]) ifTrue: [ ^ s ] ]. - ^ self -] - -{ #category : #accessing } -TRCanvas >> shapes [ - "Return the shapes" - ^ shapes asArray -] - -{ #category : #accessing } -TRCanvas >> shapesDo: aOneArgBlock [ - "Return the shapes" - shapes do: aOneArgBlock -] - -{ #category : #updating } -TRCanvas >> signalUpdate [ - morph changed -] - -{ #category : #accessing } -TRCanvas >> theme [ - "Return the theme used by TRCanvas. Note that the theme may be nil. In that case, it means that the theme will be infered by TRMorph (if Pharo is the running platform)" - ^ theme -] - -{ #category : #accessing } -TRCanvas >> theme: aTheme [ - "Set the theme used by the Trachel Canvas." - self assert: [ aTheme isKindOf: TRTheme ]. - theme := aTheme. - self color: theme trachelCanvasColor -] - -{ #category : #accessing } -TRCanvas >> topLeft [ - - ^ morph - ifNil:[ 0@0 ] - ifNotNil: [ morph topLeft ] -] - -{ #category : #events } -TRCanvas >> when: event do: aBlock [ - self announcer when: event do: aBlock -] diff --git a/src/Trachel/TRCanvasExample.class.st b/src/Trachel/TRCanvasExample.class.st deleted file mode 100644 index 32ecf21bf..000000000 --- a/src/Trachel/TRCanvasExample.class.st +++ /dev/null @@ -1,446 +0,0 @@ -Class { - #name : #TRCanvasExample, - #superclass : #TRObject, - #category : #'Trachel-Examples' -} - -{ #category : #animation } -TRCanvasExample >> animatedArc [ - " - self new animatedArc - " - - | v e angle timer | - v := TRCanvas new. - timer := TRVITimer new cycleLength: 2. - timer repeat. - angle := TRVIAnimatedValue new - evaluator: [ :t | 0 interpolateTo: 360 at: t ]; - timer: timer; - yourself. - - e := (TRArcShape new - alphaAngle: angle betaAngle: (angle + 30) innerRadius: 50 externalRadius: 80). - v addShape: e. - angle start. - - v addAnimation: (RTResetAllShape new). - v open -] - -{ #category : #arcs } -TRCanvasExample >> arc [ - " - self new arc - " - | c shape| - c := TRCanvas new. - shape:= TRArcShape new. - shape alphaAngle:10 betaAngle: 20 innerRadius: 30 externalRadius: 150. - shape color: Color blue. - c addShape: shape. - c open. - - -] - -{ #category : #arcs } -TRCanvasExample >> arc0 [ - " - self new arc0 - " - | c shape | - c := TRCanvas new. - shape:= TRArcShape new. - shape alphaAngle:0 betaAngle: 360 innerRadius: 0 externalRadius: 100. - shape color: Color blue. - c addShape: shape. - c open. - - -] - -{ #category : #arcs } -TRCanvasExample >> arc2 [ - " - self new arc - " - | c shape1 shape2 shape3 shape4| - c := TRCanvas new. - shape1:= TRArcShape new. - shape2:= TRArcShape new. - shape3:= TRArcShape new. - shape4:= TRArcShape new. - shape1 alphaAngle:10 betaAngle: 80 innerRadius: 30 externalRadius: 150. - shape1 color: Color blue. - shape2 alphaAngle:100 betaAngle: 170 innerRadius: 30 externalRadius: 150. - shape2 color: Color green. - shape3 alphaAngle:190 betaAngle: 260 innerRadius: 30 externalRadius: 150. - shape3 color: Color yellow. - shape4 alphaAngle:280 betaAngle: 350 innerRadius: 30 externalRadius: 150. - shape4 color: Color red. - c addShape: shape1. c addShape: shape2. c addShape: shape3. c addShape: shape4. - c open. - - -] - -{ #category : #arcs } -TRCanvasExample >> arc3 [ - " - self new arc3 - " - | c shape1 shape2 shape3 shape4| - c := TRCanvas new. - shape1:= TRArcShape new. - shape2:= TRArcShape new. - shape3:= TRArcShape new. - shape4:= TRArcShape new. - shape1 alphaAngle:5 betaAngle: 85 innerRadius: 30 externalRadius: 150. - shape1 color: Color blue. - shape2 alphaAngle:95 betaAngle: 175 innerRadius: 30 externalRadius: 150. - shape2 color: Color green. - shape3 alphaAngle:185 betaAngle: 265 innerRadius: 30 externalRadius: 150. - shape3 color: Color yellow. - shape4 alphaAngle:275 betaAngle: 355 innerRadius: 30 externalRadius: 150. - shape4 color: Color red. - c addShape: shape1. c addShape: shape2. c addShape: shape3. c addShape: shape4. - c open. - - -] - -{ #category : #arcs } -TRCanvasExample >> arc4 [ - " - self new arc4 - " - | c shape1 shape2 shape3 shape4| - c := TRCanvas new. - shape1:= TRArcShape new. - shape2:= TRArcShape new. - shape3:= TRArcShape new. - shape4:= TRArcShape new. - shape1 alphaAngle:0 betaAngle: 90 innerRadius: 130 externalRadius: 150. - shape1 color: Color blue. - shape2 alphaAngle:90 betaAngle: 180 innerRadius: 130 externalRadius: 150. - shape2 color: Color green. - shape3 alphaAngle:180 betaAngle: 270 innerRadius: 130 externalRadius: 150. - shape3 color: Color yellow. - shape4 alphaAngle:270 betaAngle: 360 innerRadius: 130 externalRadius: 150. - shape4 color: Color red. - c addShape: shape1. c addShape: shape2. c addShape: shape3. c addShape: shape4. - c open. - - -] - -{ #category : #arcs } -TRCanvasExample >> arc5 [ - " - self new arc5 - " - | c shape1 shape2 shape3 shape4| - c := TRCanvas new. - shape1:= TRArcShape new. - shape2:= TRArcShape new. - shape3:= TRArcShape new. - shape4:= TRArcShape new. - shape1 alphaAngle:0 betaAngle: 90 innerRadius: 0 externalRadius: 150. - shape1 color: Color blue. - shape2 alphaAngle:90 betaAngle: 180 innerRadius: 0 externalRadius: 150. - shape2 color: Color green. - shape3 alphaAngle:180 betaAngle: 270 innerRadius: 0 externalRadius: 150. - shape3 color: Color yellow. - shape4 alphaAngle:270 betaAngle: 360 innerRadius: 0 externalRadius: 150. - shape4 color: Color red. - c addShape: shape1. c addShape: shape2. c addShape: shape3. c addShape: shape4. - c open. - - -] - -{ #category : #arcs } -TRCanvasExample >> arc6 [ - " - self new arc6 - " - | c shape shape2| - c := TRCanvas new. - shape:= TRArcShape new. - shape alphaAngle:10 betaAngle: 80 innerRadius: 30 externalRadius: 150. - shape color: Color blue. - shape2:=TRBoxShape new. - shape2 fromRectangle: (shape topLeft corner: shape bottomRight). - shape2 color: Color red. - c addShape: shape. - c addShape: shape2. - c open. - - -] - -{ #category : #arcs } -TRCanvasExample >> arc7 [ - " - self new arc7 - " - | c shape| - c := TRCanvas new. - 1 to: 90 by: 10 do: [ :angle | - shape:= TRArcShape new. - shape alphaAngle: 0 betaAngle: (angle) innerRadius: 30 externalRadius: 150. - shape color: (Color blue alpha: 0.2). - c addShape: shape ]. - c open. - - -] - -{ #category : #examples } -TRCanvasExample >> bezier [ - " - self new bezier. - " - - | t points | - points := OrderedCollection new. - points add: 50 @ 50. - points add: 150 @ 20. - points add: 120 @ 130. - points add: 50 @ 150. - points add: 80 @ 80. - t := TRCanvas new. - t addShape: (TRLineShape new from: 50 @ 50 to: 130 @ 20). - t addShape: - (TRBezierShape new - points: points; - width: 2.5; - strokePaint: Color purple; - yourself). - t open -] - -{ #category : #examples } -TRCanvasExample >> circle [ - " - self new circle - " - | c | - c := TRCanvas new. - c buildRectangle: (50 @ 50 corner: 80 @ 80) color: (Color blue alpha: 0.2). - - 100 to: 200 by: 20 do: [ :i | - c buildCircleFrom: 50 @ 50 to: i @ 100 color: (Color red alpha: 0.1). - ]. - c openTitled: 'Example with transparent circles'. - - -] - -{ #category : #examples } -TRCanvasExample >> circle2 [ - " - self new circle2 - " - - | c circle line1 line2 | - c := TRCanvas new. - circle := TREllipseShape new from: -50 @ -50 to: 50 @ 50. - circle color: (Color purple alpha: 0.3). - line1 := TRLineShape new from: -50 @ 0 to: 50 @ 0. - line2 := TRLineShape new from: 0 @ -50 to: 0 @ 50. - line1 color: (Color blue alpha: 0.5). - line2 color: (Color blue alpha: 0.5). - - c addShape: circle. - c addShape: line1. - c addShape: line2. - c open -] - -{ #category : #events } -TRCanvasExample >> event01 [ - - " - self new event01 - " - | s1 s2 c | - s1 := TRBoxShape new color: (Color blue alpha: 0.8); size: 80; strokePaint: nil. - s2 := TREllipseShape new size: 100; color: (Color green alpha: 0.8); strokePaint: nil. - c := TRCanvas new. - - c addShape: s1. - c addShape: s2. - - s1 when: TRMouseDragging do: [ :e | - s1 translateBy: e step. - e signalUpdate ]. - c open -] - -{ #category : #'rotating labels' } -TRCanvasExample >> fiveLabelFlowers [ - " - self new fiveLabelFlowers. - " - | t label box points | - t := TRCanvas new. - t color: Color white. - - points := OrderedCollection new. - points add: 0 @ 0. - points add: 150 @ 150. - points add: -150 @ -150. - points add: 150 @ -150. - points add: -150 @ 150. - points do: [ :position | - 1 to: 180 by: 25 do: [ :angle | - box := TRBoxShape new. - box from: position -1 to: position + 1. - box color: (Color blue alpha: 0.5). - t addShape: box. - - label := TRRotatedLabelShape new. - label text: 'Hello World Bonjour Monde'. - label color: Color black. - label position: position. - label angleInDegree: angle. - t addShape: label ] ]. - - t open -] - -{ #category : #examples } -TRCanvasExample >> fixedRec [ - " - self new fixedRec - " - - | c r1 r2 colors | - c := TRCanvas new. - r1 := c buildRectangle: ((0 @ 0) extent: (150 @ 75)) color: Color red. - r2 := c buildRectangle: ((0 @ 0) extent: (130 @ 50)) color: Color lightGreen. - c buildLineFrom: 50 @ 50 to: 80 @ 80 color: Color lightGreen. - - colors := Array with: Color red with: Color blue with: Color white. - r1 when: TRMouseClick do: [ :event | event shape color: colors atRandom. c signalUpdate ]. - r2 when: TRMouseClick do: [ :event | r2 color: colors atRandom. c signalUpdate ]. - - r2 setAsFixed. - - c when: TRMouseDragging do: [ :event | c camera translateBy: event step negated. c signalUpdate ]. - c open -] - -{ #category : #examples } -TRCanvasExample >> label [ - " - self new label - " - | c | - c := TRCanvas new. - c addShape: (TRLabelShape new fontSize: 5). - c addShape: (TRLabelShape new fontSize: 25; position: 20 @ 20). - c open -] - -{ #category : #menu } -TRCanvasExample >> menu1 [ - " - self new menu1 - " - | canvas | - canvas := TRCanvas new. - canvas addMenu: '+ box' callback: [ canvas addShape: (TRBoxShape new color: (Color purple alpha: 0.1); from: (400 atRandom @ 400 atRandom) extent: (100 atRandom @ 100 atRandom)). canvas signalUpdate ]. - - canvas addMenu: '+ circle' callback: [ canvas addShape: (TREllipseShape new color: (Color blue alpha: 0.1); from: (400 atRandom @ 400 atRandom) extent: (100 atRandom @ 100 atRandom)). canvas signalUpdate ]. - canvas camera translateTo: 250 @ 250. - canvas open -] - -{ #category : #menu } -TRCanvasExample >> menuWithSVGIcon1 [ - " - self new menuWithSVGIcon1 - " - | canvas svgPath1 | - canvas := TRCanvas new. - svgPath1 := 'M256,116.656L308.021,186H203.979L256,116.656z M256,50L123.966,226h264.068L256,50z M308.021,326L256,395.345L203.979,326H308.021z M388.034,286H123.966L256,462L388.034,286z'. - canvas addMenuAsSVG: svgPath1 scale: 0.1 callback: [ canvas addShape: (TRBoxShape new color: (Color purple alpha: 0.1); from: (400 atRandom @ 400 atRandom) extent: (100 atRandom @ 100 atRandom)). canvas signalUpdate ]. - - canvas addMenu: '+ circle' callback: [ canvas addShape: (TREllipseShape new color: (Color blue alpha: 0.1); from: (400 atRandom @ 400 atRandom) extent: (100 atRandom @ 100 atRandom)). canvas signalUpdate ]. - canvas camera translateTo: 250 @ 250. - canvas open -] - -{ #category : #events } -TRCanvasExample >> mouseMove [ - " - self new mouseMove - " - | c lbl | - c := TRCanvas new. - lbl := TRLabelShape new text: 'pos'. - c addShape: lbl. - - c when: TRMouseMove do: [ :evt | lbl text: (c camera fromPixelToSpace: evt position) printString. c signalUpdate ]. - c open -] - -{ #category : #examples } -TRCanvasExample >> rec1 [ - " - self new rec1 - " - - | c | - c := TRCanvas new. - c buildRectangle: ((50 @ 50) extent: (150 @ 75)) color: Color red. - c buildRectangle: ((80 @ 80) extent: (150 @ 75)) color: Color lightGreen. - c buildLineFrom: 50 @ 50 to: 80 @ 80 color: Color lightGreen. - c open -] - -{ #category : #examples } -TRCanvasExample >> recSimple [ - " - self new recSimple - " - - | c | - c := TRCanvas new. - c buildRectangle: ((50 @ 50) extent: (150 @ 75)) color: Color red. - c open -] - -{ #category : #svg } -TRCanvasExample >> svg01 [ - - " - self new svg01 - " - | c svg | - c := TRCanvas new. - svg := TRSVGPath new path: 'M256,116.656L308.021,186H203.979L256,116.656z M256,50L123.966,226h264.068L256,50z M308.021,326 - - L256,395.345L203.979,326H308.021z M388.034,286H123.966L256,462L388.034,286z'. - svg scaleBy: 0.1. - c addShape: svg. - c open -] - -{ #category : #examples } -TRCanvasExample >> text [ - " - self new text - " - | c label rec | - c := TRCanvas new. - label := TRLabelShape new. - rec := TRBoxShape new color: Color white. - rec fromRectangle: label encompassingRectangle. - c addShape: rec. - c addShape: label. - c open -] diff --git a/src/Trachel/TRCanvasGridShape.class.st b/src/Trachel/TRCanvasGridShape.class.st deleted file mode 100644 index 2c84fff1b..000000000 --- a/src/Trachel/TRCanvasGridShape.class.st +++ /dev/null @@ -1,84 +0,0 @@ -" -I am a shape for RTGridView -" -Class { - #name : #TRCanvasGridShape, - #superclass : #TRShape, - #instVars : [ - 'offset', - 'spacing', - 'dashes' - ], - #category : #'Trachel-Shapes' -} - -{ #category : #accessing } -TRCanvasGridShape >> addToOffset: aPoint [ - offset := offset + aPoint -] - -{ #category : #private } -TRCanvasGridShape >> computePath [ - | width height | - width := self canvas extent x / canvas camera scale roundUpTo: spacing. - height := self canvas extent y / canvas camera scale roundUpTo: spacing. - path := self athensCanvas - createPath: - [ :builder | - builder absolute. - height negated to: height by: spacing do: [ :i | - builder - moveTo: width negated @ i; - lineTo: width @ i ]. - width negated to: width by: spacing do: [ :i | - builder - moveTo: i @ height negated; - lineTo: i @ height ] ] -] - -{ #category : #accessing } -TRCanvasGridShape >> dashes [ - "Return the dash pattern associated" - ^ dashes -] - -{ #category : #accessing } -TRCanvasGridShape >> dashes: integers [ - "Set the dash pattern for the line. Could be #(1 20) for example" - dashes := integers -] - -{ #category : #drawing } -TRCanvasGridShape >> drawOn: athensCanvas [ - "The shape is first moved by offset, which will always center it on camera, then it is moved by moduled offset, so it will alway move only by at most the modulo" - - | s | - athensCanvas pathTransform - restoreAfter: - [ athensCanvas pathTransform translateBy: offset. - athensCanvas pathTransform - translateBy: ((offset x % spacing) @ (offset y % spacing)) negated. - athensCanvas setShape: self path. - s := athensCanvas setStrokePaint: self color. - s width: 1. - dashes ifNotNil: [ - s dashes: dashes offset: spacing ]. - athensCanvas draw ] -] - -{ #category : #accessing } -TRCanvasGridShape >> encompassingRectangle [ - ^ 0 @ 0 corner: 0@0 -] - -{ #category : #initialization } -TRCanvasGridShape >> initialize [ - super initialize. - color := Color black alpha: 0.05. - offset := 0 @ 0 -] - -{ #category : #accessing } -TRCanvasGridShape >> spacing: aNumber [ - spacing := aNumber -] diff --git a/src/Trachel/TRCanvasTest.class.st b/src/Trachel/TRCanvasTest.class.st deleted file mode 100644 index 1b468c465..000000000 --- a/src/Trachel/TRCanvasTest.class.st +++ /dev/null @@ -1,648 +0,0 @@ -Class { - #name : #TRCanvasTest, - #superclass : #TRTest, - #instVars : [ - 'canvas' - ], - #category : #'Trachel-Tests' -} - -{ #category : #running } -TRCanvasTest >> setUp [ - super setUp. - canvas := TRCanvas new -] - -{ #category : #'fixed shape' } -TRCanvasTest >> testAccessing [ - | c r1 r2 | - c := TRCanvas new. - r1 := c buildRectangle: ((0 @ 0) extent: (150 @ 75)) color: Color red. - r1 setAsFixed. - - r2 := c buildRectangle: ((0 @ 0) extent: (130 @ 50)) color: Color lightGreen. - - self assert: (c shapeForPositionInPixels: (0 @ 0)) = r1. - self assert: (c shapeForPositionInPixels: (250 @ 250)) = r2. -] - -{ #category : #tests } -TRCanvasTest >> testAddingAndRemoving [ - - | box | - box := TRBoxShape new from: 10 @ 10 to: 20 @ 20. - canvas addShape: box. - self assert: canvas numberOfShapes = 1. - box remove. - self assert: canvas numberOfShapes = 0. -] - -{ #category : #'back and front' } -TRCanvasTest >> testBack [ - - | s1 s2 s3 | - s1 := TRBoxShape new size: 10. - s2 := TRBoxShape new size: 10. - s3 := TRBoxShape new size: 10. - canvas addShape: s1; addShape: s2; addShape: s3. - - s1 pushBack. - self assert: canvas shapes = (Array with: s1 with: s2 with: s3). - - s3 pushBack. - self assert: canvas shapes = (Array with: s3 with: s1 with: s2). -] - -{ #category : #tests } -TRCanvasTest >> testBezierShape [ - | b | - b := TRBezierShape new points: (Array with: 10 @ 10 with: -20 @ 30 with: 50 @ -180). - canvas addShape: b. - b translateBy: 5 @ 6. - self assert: b points = (Array with: 15 @ 16 with: -15 @ 36 with: 55 @ -174). - -] - -{ #category : #tests } -TRCanvasTest >> testBox [ - | rec box | - rec := (50 @ 50 extent: 100 @ 50). - box := canvas buildRectangle: rec color: Color purple. - self assert: box encompassingRectangle center = rec center. - - box extent: 20 @ 20. - self assert: box encompassingRectangle center = rec center. -] - -{ #category : #camera } -TRCanvasTest >> testCamera [ - - self assert: canvas camera position = (0 @ 0) -] - -{ #category : #tests } -TRCanvasTest >> testCanvas [ - | box | - box := canvas buildRectangle: ( (5 @ 5) extent: (5 @ 5) ) color: Color red. - self assert: box canvas == canvas. - self assert: box athensCanvas == canvas athensCanvas. - self assert: canvas ~~ canvas athensCanvas. -] - -{ #category : #events } -TRCanvasTest >> testCanvasAndEvent [ - - | c f | - c := TRCanvas new. - f := false. - c when: TRMouseClick do: [ :event | f := true ]. - self deny: f. - c announce: TRMouseMove. - self deny: f. - c announce: TRMouseClick. - self assert: f -] - -{ #category : #events } -TRCanvasTest >> testCapturingEvents2 [ - | s1 s2 | - - s1 := (TRBoxShape new size: 10). - s2 := (TRBoxShape new size: 10). - canvas addShape: s1. - canvas addShape: s2. - self assert: (canvas shapeForPosition: 0 @ 0) == s2 -] - -{ #category : #label } -TRCanvasTest >> testCenteredLabelShapes [ - - | label1 label2 | - label1 := TRLabelShape new. - label1 text: 'hello'. - label1 position: 10 @ 10. - - label2 := TRLabelShape new. - label2 text: 'hello'. - label2 translateLeftTo: label1 encompassingRectangle leftCenter. - - " - TRCanvas new addShape: label1; addShape: label2; open - " - - self assert: label1 encompassingRectangle = label2 encompassingRectangle -] - -{ #category : #shapes } -TRCanvasTest >> testChangingBoxHeight [ - | box | - box := TRBoxShape new. - self assert: box height = 0. - box height: 15. - self assert: box height = 15. - box height: 20. - self assert: box height = 20 - -] - -{ #category : #shapes } -TRCanvasTest >> testChangingBoxWidth [ - | box | - box := TRBoxShape new. - self assert: box width = 0. - box width: 15. - self assert: box width = 15. - box width: 20. - self assert: box width = 20 - -] - -{ #category : #tests } -TRCanvasTest >> testCircle [ - - | c | - c := TRCanvas new. - 100 to: 200 by: 20 do: [ :i | - c buildCircleFrom: 50 @ 50 to: i @ 100 color: (Color red alpha: 0.2). - ]. - self assert: c numberOfShapes = (100 to: 200 by: 20) size -] - -{ #category : #contains } -TRCanvasTest >> testContainsPoint1 [ - self assert: (canvas shapeForPosition: 20 @ 20) == canvas -] - -{ #category : #contains } -TRCanvasTest >> testContainsPoint2 [ - | box | - box := canvas buildRectangle: (15 @ 15 extent: 20 @ 20) color: Color gray. - self assert: (canvas shapeForPosition: 20 @ 20) == box. - self assert: (canvas shapeForPosition: 35 @ 35) == canvas. - self assert: (canvas shapeForPosition: 15 @ 15) == box. - self assert: (canvas shapeForPosition: 200 @ 200) == canvas. -] - -{ #category : #contains } -TRCanvasTest >> testContainsPointAfterTranslation [ - | box | - box := canvas buildRectangle: (0 @ 0 extent: 20 @ 20) color: Color gray. - - box translateBy: 10 @ 10. - - self assert: (canvas shapeForPosition: 10 @ 10) == box. - self assert: (canvas shapeForPosition: 5 @ 5) == canvas. - -] - -{ #category : #tests } -TRCanvasTest >> testDefault [ - - self assert: canvas shapes isEmpty. - self assert: canvas numberOfShapes equals: 0. -] - -{ #category : #animations } -TRCanvasTest >> testDefaultAnimation [ - self deny: canvas hasAnimation. - self assert: canvas numberOfAnimations = 0 -] - -{ #category : #label } -TRCanvasTest >> testDefaultFontSize [ - self assert: (TRLabelShape new fontSize = TRLabelShape new defaultFontSize) -] - -{ #category : #tests } -TRCanvasTest >> testEncompassingRectangle [ - | r | - r := TRCanvas new encompassingRectangle. - self assert: r extent equals: 1 @ 1 -] - -{ #category : #'event overseer' } -TRCanvasTest >> testEventOverseer [ - - | c s click eo events | - c := TRCanvas new. - s := TRBoxShape new. - c addShape: s. - click := 0. - s when: TRMouseClick do: [ :evt | click := click + 1 ]. - - eo := TREventOverseer new. - events := OrderedCollection new. - eo block: [ :anEvent | events add: anEvent ]. - c eventOverseer: eo. - - self assert: click equals: 0. - self assert: events isEmpty. - - s announce: TRMouseClick new. - self assert: click equals: 1. - "self assert: events size equals: 1. - self assert: events first class equals: TRMouseClick." -] - -{ #category : #'fixed shape' } -TRCanvasTest >> testFixedShapes [ - - | s1 s2 | - s1 := TRBoxShape new from: 10 @ 20 extent: 50 @ 40. - s2 := TRBoxShape new from: 10 @ 20 extent: 50 @ 40. - canvas addShape: s1; addShape: s2. - - self assert: s1 isNotFixed. - self assert: s2 isNotFixed. - - s2 setAsFixed. - self assert: s1 isNotFixed. - self deny: s2 isNotFixed. - - s2 setAsNotFixed. - self assert: s1 isNotFixed. - self assert: s2 isNotFixed. - -] - -{ #category : #'back and front' } -TRCanvasTest >> testFront [ - - | s1 s2 s3 | - s1 := TRBoxShape new size: 10. - s2 := TRBoxShape new size: 10. - s3 := TRBoxShape new size: 10. - canvas addShape: s1; addShape: s2; addShape: s3. - - self assert: canvas shapes = (Array with: s1 with: s2 with: s3). - - s1 pushFront. - self assert: canvas shapes = (Array with: s2 with: s3 with: s1). - - s3 pushFront. - self assert: canvas shapes = (Array with: s2 with: s1 with: s3). -] - -{ #category : #tests } -TRCanvasTest >> testInitialization [ - - | circle | - circle := TREllipseShape new. - self assert: circle encompassingRectangle = TRAbstractBoxShape nullRectangle -] - -{ #category : #label } -TRCanvasTest >> testLabelShapes [ - - | label1 label2 rec | - label1 := TRLabelShape new. - label1 text: 'hello'. - label2 := TRLabelShape new. - label2 text: 'hello world'. - self assert: label2 width > label1 width. - - rec := label1 encompassingRectangle. - self assert: rec center = (0 @ 0). -] - -{ #category : #label } -TRCanvasTest >> testLabelShapesAndColor [ - - | label | - label := TRLabelShape new. - label color: Color blue. - self assert: label color = Color blue -] - -{ #category : #label } -TRCanvasTest >> testLabelShapesAndIncludesPoint [ - - | label rec | - label := TRLabelShape new. - label text: 'hello'. - - rec := label encompassingRectangle. - self assert: (label includesPoint: rec topLeft). - self assert: (label includesPoint: (rec bottomLeft - (0 @ 1))). - self assert: (label includesPoint: rec topRight - (1 @ 0)). - self assert: (label includesPoint: rec bottomRight - (1 @ 1)). -] - -{ #category : #label } -TRCanvasTest >> testLabelShapesHeight [ - - | label1 label2 | - label1 := TRLabelShape new. - label1 text: 'hello'. - label2 := TRLabelShape new. - label2 text: 'hello world'. - self assert: label2 height = label1 height -] - -{ #category : #tests } -TRCanvasTest >> testLine [ - | line | - line := canvas buildLineFrom: 2 @ 3 to: 13 @ 15 color: Color blue. - self assert: line from = (2 @ 3). - self assert: line to = (13 @ 15). - - line translateBy: 3 @ 4. - self assert: line from = (5 @ 7). - self assert: line to = (16 @ 19). - -] - -{ #category : #shapes } -TRCanvasTest >> testPositionWithShapes [ - - TRShape allSubclasses do: [ :c | - self assert: c new position = (0 @ 0) ] -] - -{ #category : #'rendering list' } -TRCanvasTest >> testPushAllBehindWithGroup [ - | box1 box2 box3 g | - box1 := TRBoxShape new. - box2 := TRBoxShape new. - box3 := TRBoxShape new. - canvas addShape: box1; addShape: box2; addShape: box3. - self assert: canvas shapes asArray = (Array with: box1 with: box2 with: box3). - - g := Array with: box2 with: box3. - canvas pushAll: (Array with: box1) behindAll: g. - self assert: canvas shapes asArray = (Array with: box1 with: box2 with: box3). - - g := Array with: box2 with: box3. - canvas pushAll: (Array with: box1) behindAll: g. - self assert: canvas shapes asArray = (Array with: box1 with: box2 with: box3). - - g := Array with: box1. - canvas pushAll: (Array with: box3 with: box2) behindAll: g. - self assert: canvas shapes asArray = (Array with: box3 with: box2 with: box1). - -] - -{ #category : #'rendering list' } -TRCanvasTest >> testPushBehind [ - | box1 box2 box3 | - box1 := TRBoxShape new. - box2 := TRBoxShape new. - box3 := TRBoxShape new. - canvas addShape: box1; addShape: box2; addShape: box3. - self assert: canvas shapes asArray = (Array with: box1 with: box2 with: box3). - - canvas push: box1 behind: box2. - self assert: canvas shapes asArray = (Array with: box1 with: box2 with: box3). - - canvas push: box3 behind: box2. - self assert: canvas shapes asArray = (Array with: box1 with: box3 with: box2). - -] - -{ #category : #'rendering list' } -TRCanvasTest >> testPushBehindWithGroup [ - | box1 box2 box3 g | - box1 := TRBoxShape new. - box2 := TRBoxShape new. - box3 := TRBoxShape new. - canvas addShape: box1; addShape: box2; addShape: box3. - self assert: canvas shapes asArray = (Array with: box1 with: box2 with: box3). - - g := Array with: box2 with: box3. - canvas push: box1 behindAll: g. - self assert: canvas shapes asArray = (Array with: box1 with: box2 with: box3). - - g := Array with: box2 with: box3. - canvas push: box1 behindAll: g. - self assert: canvas shapes asArray = (Array with: box1 with: box2 with: box3). - self assert: (canvas shapes indexOf: box1) = 1. - self assert: (canvas shapes indexOf: box2) = 2. - self assert: (canvas shapes indexOf: box3) = 3. -] - -{ #category : #'fixed shape' } -TRCanvasTest >> testRemovingFixedElement [ - | c r | - c := TRCanvas new. - r := c buildRectangle: ((0 @ 0) extent: (150 @ 75)) color: Color red. - r setAsFixed. - - self assert: c numberOfFixedShapes = 1. - self assert: c numberOfShapes = 0. - r remove. - self assert: c numberOfShapes = 0. - self assert: c numberOfFixedShapes = 0. -] - -{ #category : #tests } -TRCanvasTest >> testRemovingLine [ - - | line | - line := TRLineShape new from: 50 @ 50 to: 100 @ 80. - self deny: line isInACanvas. - canvas addShape: line. - self assert: line isInACanvas. - - line remove. - self deny: line isInACanvas. - - line remove. - self deny: line isInACanvas. - -] - -{ #category : #tests } -TRCanvasTest >> testResetShapes [ - - canvas addShape: TRBoxShape new. - canvas addShape: TRBoxShape new. - self assert: canvas numberOfShapes equals: 2. - canvas resetShapes. - self assert: canvas numberOfShapes equals: 0. -] - -{ #category : #resizing } -TRCanvasTest >> testResizing [ - - | t | - t := false. - canvas when: TRResizeCanvasEvent do: [ :evt | t := true ]. - canvas extent: 12 @ 12. - self assert: t -] - -{ #category : #resizing } -TRCanvasTest >> testResizing02 [ - - | e | - canvas when: TRResizeCanvasEvent do: [ :evt | e := evt ]. - canvas extent: 12 @ 12. - self assert: e newExtent equals: 12 @ 12. - self assert: e oldExtent equals: 500 @ 500. -] - -{ #category : #tests } -TRCanvasTest >> testShape [ - | shape | - shape := canvas buildRectangle: (5 @ 5 extent: 20 @ 20) color: Color gray. - self assert: shape notNil. - -] - -{ #category : #events } -TRCanvasTest >> testShapeAndEvent [ - | shape t | - shape := TRBoxShape new. - t := false. - shape when: TRMouseEnter do: [ :event | t := true ]. - self deny: t. - shape announce: TRMouseEnter new. - self assert: t -] - -{ #category : #events } -TRCanvasTest >> testShapeAndSharedAnnouncer [ - | shape1 shape2 t | - shape1 := TRBoxShape new. - shape2 := TRLineShape new. - shape1 announcer: shape2 announcer. - - t := 0. - shape1 when: TRMouseLeave do: [ :event | t := t + 1 ]. - shape2 when: TRMouseEnter do: [ :event | t := t + 10 ]. - - shape1 announce: TRMouseEnter new. - shape2 announce: TRMouseLeave new. - self assert: t = 11 -] - -{ #category : #events } -TRCanvasTest >> testShapeWithActionForPositionInPixels [ - - | c s1 s2 | - c := TRCanvas new. - s1 := TRBoxShape new size: 20. - s1 when: TRMouseClick do: [ ]. - - s2 := TRBoxShape new size: 20. - - c addShape: s1. - c addShape: s2. - - s2 translateTo: 30 @ 0. - - self assert: (c shapeWithActionForPositionInPixels: 250 @ 250) == s1. - self assert: (c shapeWithActionForPositionInPixels: 280 @ 250) == c. -] - -{ #category : #events } -TRCanvasTest >> testShapeWithActionForPositionInPixels2 [ - - | c s1 s2 | - c := TRCanvas new. - s1 := TRBoxShape new size: 20. - s1 when: TRMouseClick do: [ ]. - - s2 := TRBoxShape new size: 20. - - c addShape: s1. - c addShape: s2. - - s2 translateTo: 30 @ 0. - - self assert: (c shapeWithAction: TRMouseClick forPositionInPixels: 250 @ 250) == s1. - self assert: (c shapeWithAction: TRMouseMove forPositionInPixels: 250 @ 250) == c. - self assert: (c shapeWithAction: TRMouseClick forPositionInPixels: 280 @ 250) == c. -] - -{ #category : #events } -TRCanvasTest >> testShapeWithActionForPositionInPixelsUnder [ - | c top under | - c := TRCanvas new. - top := TRBoxShape new size: 20. - top when: TRMouseDragging do: [ ]. - under := TRBoxShape new size: 20. - under when: TRMouseDragEnter do: [ ]. - c addShape: top. - c addShape: under. - self - assert: (c shapeWithAction: TRMouseDragEnter forPositionInPixels: 250 @ 250 under: top) - equals: under. - self - assert: (c shapeWithAction: TRMouseDragEnter forPositionInPixels: 0 @ 0 under: top) - equals: c -] - -{ #category : #events } -TRCanvasTest >> testShapeWithActionForPositionInPixelsUnder2 [ - | c top under | - c := TRCanvas new. - top := TRBoxShape new size: 20. - top when: TRMouseDragEnter do: [ ]. - under := TRBoxShape new size: 20. - under when: TRMouseDragEnter do: [ ]. - c addShape: under. - c addShape: top. - self - assert: (c shapeWithAction: TRMouseDragEnter forPositionInPixels: 250 @ 250 under: top) - equals: under. - self - assert: (c shapeWithAction: TRMouseDragEnter forPositionInPixels: 0 @ 0 under: top) - equals: c -] - -{ #category : #tests } -TRCanvasTest >> testShapes [ - - canvas buildRectangle: (5 @ 5 extent: 20 @ 20) color: Color gray. - canvas buildRectangle: (5 @ 5 extent: 20 @ 20) color: Color gray. - self assert: canvas shapes size = 2 -] - -{ #category : #tests } -TRCanvasTest >> testShapingElement [ - - | circle | - circle := canvas buildCircleFrom: 20 @ 20 to: 100 @ 80 color: Color red. - - self assert: circle encompassingRectangle = ((20 @ 20) corner: (100 @ 80)). - - circle translateBy: -20 @ -20. - self assert: circle encompassingRectangle = ((0 @ 0) corner: (80 @ 60)). -] - -{ #category : #'should be drawn' } -TRCanvasTest >> testShouldBeDrawn [ - - self assert: (TRBoxShape new from: 0 @ 0 to: 10 @ 20) shouldBeDrawn. - self deny: (TRBoxShape new from: 200 @ 0 to: 10 @ 0) shouldBeDrawn. - self deny: (TRBoxShape new from: 200 @ 0 to: 200 @ 0) shouldBeDrawn. - self deny: (TREllipseShape new from: 0 @ 0 to: 0 @ 0) shouldBeDrawn. - self assert: (TREllipseShape new from: 10 @ 0 to: 50 @ 50) shouldBeDrawn -] - -{ #category : #label } -TRCanvasTest >> testSizeAndLabels [ - - | c l1 l2 | - c := TRCanvas new. - l1 := TRLabelShape new fontSize: 10. - l2 := TRLabelShape new fontSize: 15; position: 20 @ 20. - c addShape: l1. - c addShape: l2. - - self assert: l1 font ~~ l2 font - -] - -{ #category : #theme } -TRCanvasTest >> testthemeCanvas01 [ - | c s | - c := TRCanvas new. - c theme: TRWhiteTheme new. - - s := TRBoxShape new. - c addShape: s. - - self assert: s theme equals: c theme -] diff --git a/src/Trachel/TRCircleHeadShape.class.st b/src/Trachel/TRCircleHeadShape.class.st deleted file mode 100644 index 34ce07a87..000000000 --- a/src/Trachel/TRCircleHeadShape.class.st +++ /dev/null @@ -1,17 +0,0 @@ -Class { - #name : #TRCircleHeadShape, - #superclass : #TRAbstractLineDecoratorShape, - #category : #'Trachel-ShapesForArrow' -} - -{ #category : #hooks } -TRCircleHeadShape >> computePath [ - path := TRPlatform current computeCircleHeadPathFor: self. - -] - -{ #category : #initialization } -TRCircleHeadShape >> initialize [ - super initialize. - open := false. -] diff --git a/src/Trachel/TRCompositeShape.class.st b/src/Trachel/TRCompositeShape.class.st deleted file mode 100644 index 7d42fa0c2..000000000 --- a/src/Trachel/TRCompositeShape.class.st +++ /dev/null @@ -1,496 +0,0 @@ -Class { - #name : #TRCompositeShape, - #superclass : #TRShape, - #instVars : [ - 'shapeAndOffsets' - ], - #category : #'Trachel-Shapes' -} - -{ #category : #visitor } -TRCompositeShape >> accept: aVisitor [ - aVisitor visitMultiCompositeShape: self. -] - -{ #category : #callbacks } -TRCompositeShape >> addCallback: aCallback [ - "Add a call back to only one subshape. This is necessary for example when one does not want to trigger many times the same callback when an action occurs" - ^ self firstShape addCallback: aCallback -] - -{ #category : #callbacks } -TRCompositeShape >> addCallbackToAllShapes: aCallback [ - ^ self shapesDo: [ :s | s addCallback: aCallback ] -] - -{ #category : #'public - adding' } -TRCompositeShape >> addShape: aShape [ - "Add a shape in the composite. Shapes added using this method have all the same center" - ^ self addShape: aShape translateBy: 0 @ 0 -] - -{ #category : #'public - adding' } -TRCompositeShape >> addShape: aShape translateBy: aPoint [ - shapeAndOffsets add: (Array with: aShape with: aPoint) -] - -{ #category : #actions } -TRCompositeShape >> addedIn: aCanvas [ - "Make sure we are in the center. This is apparently necessary for element Shape. The following code is not nice at all :-(" - - self - propagateElement; - shapesDo: [ :s | s addedIn: aCanvas ]; - positionShapesAfterBeingAdded -] - -{ #category : #actions } -TRCompositeShape >> addedIn: aCanvas atIndex: index [ - self propagateElement. - shapeAndOffsets - do: [ :tuple | - aCanvas addShape: tuple first atIndex: index. - tuple first translateBy: tuple second ]. - - "Make sure we are in the center" - self translateBy: self position negated -] - -{ #category : #'public - layout' } -TRCompositeShape >> alignCenter [ - " Layout the shapes centered " - - RTAlignment new elements: self shapes; center. - shapeAndOffsets do: [ :tuple | tuple at: 2 put: tuple first position ]. - self resetInnerShapes -] - -{ #category : #'public - layout' } -TRCompositeShape >> alignRight [ - "Layout the shapes horizontally" - - "TRConstraint alignFromRight: self shapes." - RTAlignment new elements: self shapes; right. - shapeAndOffsets do: [ :tuple | tuple at: 2 put: tuple first position ]. - self resetInnerShapes -] - -{ #category : #accessing } -TRCompositeShape >> allColor: aColor [ - "Set color of all shapes" - self shapesDo: [ :s | s color: aColor ] -] - -{ #category : #'public - layout' } -TRCompositeShape >> allOfSameSize [ - "All the same will have the same maximum size" - - | maxSize | - maxSize := shapeAndOffsets inject: 0 @ 0 into: [ :max :tuple | tuple first extent max: max ]. - self shapesDo: [ :s | s extent: maxSize ] -] - -{ #category : #'public - layout' } -TRCompositeShape >> allOfSameSizeWithPadding [ - "All the same will have the same maximum size" - - | maxSize padding | - padding := 10 @ 10. - maxSize := shapeAndOffsets inject: 0 @ 0 into: [ :max :tuple | tuple first extent max: max ]. - self shapesDo: [ :s | s extent: maxSize + padding ] -] - -{ #category : #accessing } -TRCompositeShape >> allShapes [ - "Return all the shapes contained in me." - ^ shapeAndOffsets collect: #first as: Array -] - -{ #category : #events } -TRCompositeShape >> announce: anEvent [ - self shapesDo: [ :s | s announce: anEvent ] -] - -{ #category : #accessing } -TRCompositeShape >> announcer [ - self error: 'should not be called' -] - -{ #category : #accessing } -TRCompositeShape >> announcer: anAnnouncer [ - self shapesDo: [ :s | s announcer: anAnnouncer ] -] - -{ #category : #callbacks } -TRCompositeShape >> callbacks [ - ^ self firstShape callbacks -] - -{ #category : #accessing } -TRCompositeShape >> canvas [ - "Return the canvas of one of the shapes" - ^ self firstShape canvas -] - -{ #category : #accessing } -TRCompositeShape >> canvas: aSurface [ - "aCanvas is a AthensCairoSurface" - self shapesDo: [ :s | s canvas: aSurface ] -] - -{ #category : #accessing } -TRCompositeShape >> center [ - ^ self encompassingRectangle center -] - -{ #category : #accessing } -TRCompositeShape >> color [ - ^ self firstShape color - "shape2 color: aColor." -] - -{ #category : #accessing } -TRCompositeShape >> color: aColor [ - "Simply set the first shape" - self firstShape color: aColor. - -] - -{ #category : #private } -TRCompositeShape >> computePath [ - self shapesDo: [ :s | s computePath ] -] - -{ #category : #drawing } -TRCompositeShape >> drawOn: athensCanvas [ - self shapesDo: [ :s | s drawOn: athensCanvas ] -] - -{ #category : #accessing } -TRCompositeShape >> encompassingRectangle [ - "Really ugly method." - | ans c | - (self shapes anySatisfy: [ :s | s canvas notNil ]) - ifTrue: [ ^ Rectangle merging: (self shapes collect: #encompassingRectangle). ]. - - c := shapeAndOffsets collect: [ :s | s first position ]. - self positionShapesAfterBeingAdded. - ans := Rectangle merging: (self shapes collect: #encompassingRectangle). - shapeAndOffsets with: c do: [ :s :p | s first translateTo: p ]. - ^ ans -] - -{ #category : #accessing } -TRCompositeShape >> extent [ - | res | -" self shapesDo: [ :s | s translateTo: 0 @ 0 ]." - - shapeAndOffsets do: [ :tuple | tuple first translateBy: tuple second ]. - res := self encompassingRectangle extent. - self shapesDo: [ :s | s translateTo: 0 @ 0 ]. - ^ res - - "We cannot do that, because we may need to get the extent, without having the elements added (and correctly positioned)" - "^ self encompassingRectangle extent" -] - -{ #category : #actions } -TRCompositeShape >> extent: anExtent [ - self shapesDo: [ :s | s extent: anExtent ] -] - -{ #category : #accessing } -TRCompositeShape >> firstShape [ - ^ shapeAndOffsets first first -] - -{ #category : #actions } -TRCompositeShape >> from [ - "To be compatible with edges" - self shapesDo: [ :s | - (s class canUnderstand: #from) ifTrue: [ ^ s from ]. - ]. - ^ nil -] - -{ #category : #actions } -TRCompositeShape >> from: p [ - "To be compatible with edges" - self shapesDo: [ :s | - (s class canUnderstand: #from:) ifTrue: [ s from: p ]. - ] -] - -{ #category : #actions } -TRCompositeShape >> from: p1 to: p2 [ - "To be compatible with edges" - self shapesDo: [ :s | - (s class canUnderstand: #from:to:) ifTrue: [ s from: p1 to: p2 ]. - (s class canUnderstand: #from:) ifTrue: [ s from: p1 ]. - (s class canUnderstand: #to:) ifTrue: [ s to: p2 ]. - ] -] - -{ #category : #callbacks } -TRCompositeShape >> hasCallback [ - "Return true if at least one callback has been added to the shape" - ^ self firstShape hasCallback -] - -{ #category : #accessing } -TRCompositeShape >> height [ - ^ self encompassingRectangle height -] - -{ #category : #accessing } -TRCompositeShape >> height: aValue [ - ^ self extent: self width @ aValue -] - -{ #category : #'public - layout' } -TRCompositeShape >> horizontal [ - "Layout the shapes horizontally" - - | previousShape newPosition | - previousShape := self firstShape. - shapeAndOffsets allButFirst - do: [ :tuple | - newPosition := previousShape center + ((previousShape extent x / 2) @ 0) + ((tuple first extent x / 2) @ 0). - tuple first translateTo: newPosition. - tuple at: 2 put: newPosition. - previousShape := tuple first ]. - self resetInnerShapes -] - -{ #category : #testing } -TRCompositeShape >> includesPoint: aPoint [ - ^ self shapes anySatisfy: [ :s | s includesPoint: aPoint ] -] - -{ #category : #accessing } -TRCompositeShape >> indexInCanvas [ - ^ canvas privateIndexInCanvasOf: self firstShape -] - -{ #category : #initialization } -TRCompositeShape >> initialize [ - super initialize. - shapeAndOffsets := OrderedCollection new -] - -{ #category : #actions } -TRCompositeShape >> isFixed [ - ^ self shapes allSatisfy: #isFixed -] - -{ #category : #'public - layout' } -TRCompositeShape >> noLayout [ - "Do nothing here" -] - -{ #category : #accessing } -TRCompositeShape >> numberOfShapes [ - "Return the number of shapes added into myself" - ^ shapeAndOffsets size -] - -{ #category : #accessing } -TRCompositeShape >> offsetOf: aTrachelShape [ - ^ (shapeAndOffsets detect: [ :shapeAndOffset | shapeAndOffset first == aTrachelShape ]) second -] - -{ #category : #accessing } -TRCompositeShape >> offsets [ - ^ shapeAndOffsets collect: #second -] - -{ #category : #accessing } -TRCompositeShape >> position [ - shapeAndOffsets ifEmpty: [ ^ 0 @ 0 ]. - ^ (Rectangle merging: (self shapes collect: #encompassingRectangle)) center - "^ self encompassingRectangle center" -] - -{ #category : #actions } -TRCompositeShape >> positionShapesAfterBeingAdded [ - | p | - p := self position. - shapeAndOffsets do: [ :tuple | tuple first translateTo: tuple second ]. - (shapeAndOffsets anySatisfy: [ :tupple | tupple first isKindOf: TRAbstractLineShape ]) - ifFalse: [ self translateBy: p ] -] - -{ #category : #actions } -TRCompositeShape >> propagateElement [ - "Make all the shape aware of the element" - self shapesDo: [ :s | s element: self element ] -] - -{ #category : #actions } -TRCompositeShape >> pushBack [ - self shapesDo: #pushBack -] - -{ #category : #actions } -TRCompositeShape >> pushFront [ - "Move the shaped object in front of other elements" - self shapesDo: #pushFront -] - -{ #category : #'public - layout' } -TRCompositeShape >> relayout [ - "This methods places the contained shapes according to the specified layout" - | first | - first := self firstShape. - shapeAndOffsets do: [ :shapeAndOffset | - shapeAndOffset first translateBy: first position + shapeAndOffset second ] - -] - -{ #category : #actions } -TRCompositeShape >> remove [ - self shapesDo: #remove -] - -{ #category : #removing } -TRCompositeShape >> removeShapesSuchAs: aBlock [ - "Remove all the shapes such as aBlock evaluated with the shape is true" - shapeAndOffsets := shapeAndOffsets reject: [ :tupple | aBlock rtValue: tupple first ] -] - -{ #category : #'public - layout' } -TRCompositeShape >> resetInnerShapes [ - self shapesDo: [ :s | s translateTo: 0 @ 0 ] -] - -{ #category : #'public - layout' } -TRCompositeShape >> resetInnerShapesOffset [ - shapeAndOffsets := shapeAndOffsets collect: [ :tupple | Array with: tupple first with: 0 @ 0 ] -] - -{ #category : #private } -TRCompositeShape >> resetPath [ - self shapesDo: #resetPath -] - -{ #category : #actions } -TRCompositeShape >> setAsFixed [ - self shapesDo: #setAsFixed -] - -{ #category : #accessing } -TRCompositeShape >> setShapes: someShapesWithOffsetAsPoint [ - shapeAndOffsets := someShapesWithOffsetAsPoint -] - -{ #category : #accessing } -TRCompositeShape >> shapes [ - ^ shapeAndOffsets collect: #first -] - -{ #category : #accessing } -TRCompositeShape >> shapesDo: aBlock [ - "collect:thenDo: does not create temporary collection > improves performance" - - shapeAndOffsets collect: #first thenDo: aBlock -] - -{ #category : #'public - forwarding' } -TRCompositeShape >> shapesInstancesOf: class [ - "Return the list of shapes instances or subinstances of the argument class" - ^ self allShapes select: [ :s | s isKindOf: class ] -] - -{ #category : #actions } -TRCompositeShape >> signalUpdate [ - "Signal that the canvas should be refreshed" - "Do nothing if I have no shapes added" - - shapeAndOffsets ifEmpty: [ ^ self ]. - self firstShape signalUpdate -] - -{ #category : #actions } -TRCompositeShape >> to [ - "To be compatible with edges" - self shapesDo: [ :s | - (s class canUnderstand: #to) ifTrue: [ ^ s to ]. - ]. - ^ nil -] - -{ #category : #actions } -TRCompositeShape >> to: p [ - "To be compatible with edges" - self shapesDo: [ :s | - (s class canUnderstand: #to:) ifTrue: [ s to: p ]. - ] -] - -{ #category : #actions } -TRCompositeShape >> translateBy: aPoint [ - self shapesDo: [ :s | s translateBy: aPoint ] - -" shapeAndOffsets do: [ :tupple | - tupple first class == TRMultiCompositeShape - ifTrue: [ tupple first translateBy: aPoint + (tupple first encompassingRectangle extent / 2) ] - ifFalse: [ tupple first translateBy: aPoint ] ]" -] - -{ #category : #actions } -TRCompositeShape >> translateTo: aPoint [ - self translateBy: aPoint - self position -] - -{ #category : #'public - layout' } -TRCompositeShape >> vertical [ - "Layout the shapes vertically" - - | previousShape newPosition | - previousShape := self firstShape. - shapeAndOffsets allButFirst - do: [ :tupple | - newPosition := previousShape center + (0 @ (previousShape extent y / 2)) + (0 @ (tupple first extent y / 2)). - tupple first translateTo: newPosition. - tupple at: 2 put: newPosition. - previousShape := tupple first ]. - self resetInnerShapes -] - -{ #category : #'public - layout' } -TRCompositeShape >> verticalAndLeft [ - "Layout the shapes vertically and aligned on the left hand side" - "TRConstraint alignFromLeft: (shapeAndOffsets collect: #first)." - RTAlignment new elements: (shapeAndOffsets collect: #first); left. - RTVerticalLineLayout new gapSize: 0; on: (shapeAndOffsets collect: #first). - shapeAndOffsets doWithIndex: [ :tuple :index | tuple at: 2 put: (tuple first position "x @ (index * 20)") ]. - self resetInnerShapes. - - -" | previousShape newPosition maxWidth offsetX | - maxWidth := (shapeAndOffsets collect: [ :tuple | tuple first width ]) max. - - previousShape := shapeAndOffsets first first. - shapeAndOffsets allButFirst do: [ :tupple | - offsetX := (maxWidth - tupple first width) / -4. - newPosition := (previousShape center + (offsetX @ (previousShape extent y / 2)) + (0 @ (tupple first extent y / 2))). - tupple first translateTo: newPosition. - tupple at: 2 put: newPosition. - previousShape := tupple first ]. - self resetInnerShapes" -] - -{ #category : #events } -TRCompositeShape >> when: event do: aBlock [ - self shapesDo: [ :s | s announcer when: event do: aBlock ] -] - -{ #category : #accessing } -TRCompositeShape >> width [ - ^ self encompassingRectangle width -] - -{ #category : #accessing } -TRCompositeShape >> width: aValue [ - ^ self extent: aValue @ self height -] diff --git a/src/Trachel/TRCompositeShapeTest.class.st b/src/Trachel/TRCompositeShapeTest.class.st deleted file mode 100644 index a1973a9c7..000000000 --- a/src/Trachel/TRCompositeShapeTest.class.st +++ /dev/null @@ -1,476 +0,0 @@ -Class { - #name : #TRCompositeShapeTest, - #superclass : #TRTest, - #instVars : [ - 'emptyShape', - 'multiShape', - 'box1', - 'box2', - 'canvas' - ], - #category : #'Trachel-Tests' -} - -{ #category : #running } -TRCompositeShapeTest >> setUp [ - super setUp. - - emptyShape := TRCompositeShape new. - multiShape := TRCompositeShape new. - box1 := TRBoxShape new size: 20. - box2 := TRBoxShape new size: 30. - multiShape addShape: box1; addShape: box2. - canvas := TRCanvas new. -] - -{ #category : #tests } -TRCompositeShapeTest >> testAddingShape [ - emptyShape addShape: TRLabelShape new. - self assert: emptyShape numberOfShapes equals: 1. - self assert: multiShape numberOfShapes equals: 2. -] - -{ #category : #tests } -TRCompositeShapeTest >> testAlignRight [ - - box2 translateBy: 5 @ 5. - self assert: box1 position equals: (0 @ 0). - self assert: box2 position equals: (5 @ 5). - multiShape alignRight. - self assert: box1 position equals: (0 @ 0). - self assert: box2 position equals: (0 @ 0). - multiShape relayout. - - "Below is a strange result!" - self assert: box1 position equals: (10 @ 0). - self assert: box2 position equals: (15 @ 5). - - -"TRCanvas new addShape: multiShape ; yourself" -] - -{ #category : #tests } -TRCompositeShapeTest >> testAllColor [ - - multiShape allColor: Color red. - self assert: box1 color equals: Color red. - self assert: box2 color equals: Color red. - - self assert: multiShape color equals: Color red - -" emptyShape := TRMultiCompositeShape new. - multiShape := TRMultiCompositeShape new. - box1 := TRBoxShape new size: 20. - box2 := TRBoxShape new size: 30. - multiShape addShape: box1; addShape: box2. - canvas := TRCanvas new." -] - -{ #category : #tests } -TRCompositeShapeTest >> testAnnounce [ - | t | - t := 0. - box1 when: TREvent do: [ :evt | t := t + 1 ]. - box2 when: TREvent do: [ :evt | t := t + 10 ]. - self assert: t equals: 0. - multiShape announce: TREvent. - self assert: t equals: 11. - -" emptyShape := TRMultiCompositeShape new. - multiShape := TRMultiCompositeShape new. - box1 := TRBoxShape new size: 20. - box2 := TRBoxShape new size: 30. - multiShape addShape: box1; addShape: box2. - canvas := TRCanvas new." -] - -{ #category : #tests } -TRCompositeShapeTest >> testAnnounce2 [ - | t | - t := 0. - multiShape when: TREvent do: [ :evt | t := t + 1 ]. - self assert: t equals: 0. - multiShape announce: TREvent. - self assert: t equals: 2. - -" emptyShape := TRMultiCompositeShape new. - multiShape := TRMultiCompositeShape new. - box1 := TRBoxShape new size: 20. - box2 := TRBoxShape new size: 30. - multiShape addShape: box1; addShape: box2. - canvas := TRCanvas new." -] - -{ #category : #tests } -TRCompositeShapeTest >> testAnnouncer [ - self should: [ multiShape announcer ] raise: Error -] - -{ #category : #tests } -TRCompositeShapeTest >> testBasic [ - emptyShape addShape: TRLabelShape new. - self assert: emptyShape numberOfShapes equals: 1. - self assert: emptyShape element equals: nil -] - -{ #category : #callbacks } -TRCompositeShapeTest >> testCallbackRemove [ - | t callback | - t := 0. - callback := TRRemoveCallback new block: [ :shape | t := t + 1 ]. - multiShape addCallback: callback. - self assert: t equals: 0. - - multiShape remove. - self assert: t equals: 0. - - canvas addShape: multiShape. - multiShape remove. - self assert: t equals: 1 -] - -{ #category : #tests } -TRCompositeShapeTest >> testColor [ - - multiShape color: Color red. - self assert: box1 color equals: Color red. - self assert: box2 color ~= Color red. - - self assert: multiShape color equals: Color red - -" emptyShape := TRMultiCompositeShape new. - multiShape := TRMultiCompositeShape new. - box1 := TRBoxShape new size: 20. - box2 := TRBoxShape new size: 30. - multiShape addShape: box1; addShape: box2. - canvas := TRCanvas new." -] - -{ #category : #tests } -TRCompositeShapeTest >> testComputePath [ - - multiShape computePath - -" emptyShape := TRMultiCompositeShape new. - multiShape := TRMultiCompositeShape new. - box1 := TRBoxShape new size: 20. - box2 := TRBoxShape new size: 30. - multiShape addShape: box1; addShape: box2. - canvas := TRCanvas new." -] - -{ #category : #'testing translation' } -TRCompositeShapeTest >> testDefaultPosition [ - self assert: emptyShape position equals: 0 @ 0. - self assert: multiShape position equals: 0 @ 0. - self assert: box1 position equals: 0 @ 0. - self assert: box2 position equals: 0 @ 0. -] - -{ #category : #tests } -TRCompositeShapeTest >> testElement [ - emptyShape element: 10. - self assert: emptyShape element equals: 10. -] - -{ #category : #tests } -TRCompositeShapeTest >> testElementOnNonEmpty [ - | c | - multiShape element: 10. - self assert: box1 element equals: nil. - self assert: box2 element equals: nil. - - c := TRCanvas new. - c addShape: multiShape. - multiShape element: 10. - self assert: box1 element equals: 10. - self assert: box2 element equals: 10 -] - -{ #category : #tests } -TRCompositeShapeTest >> testExtent [ - - self assert: box1 extent equals: (20 @ 20). - self assert: box2 extent equals: (30 @ 30). - multiShape extent: 25 @ 25. - self assert: box1 extent equals: (25 @ 25). - self assert: box2 extent equals: (25 @ 25). - -] - -{ #category : #tests } -TRCompositeShapeTest >> testHeight [ - self assert: multiShape height equals: 30. - multiShape horizontal. - TRCanvas new addShape: multiShape. - self assert: multiShape height equals: 30. - multiShape vertical. - TRCanvas new addShape: multiShape. - self assert: multiShape height equals: 50. - -" emptyShape := TRMultiCompositeShape new. - multiShape := TRMultiCompositeShape new. - box1 := TRBoxShape new size: 20. - box2 := TRBoxShape new size: 30. - multiShape addShape: box1; addShape: box2. - canvas := TRCanvas new." -] - -{ #category : #tests } -TRCompositeShapeTest >> testIncludesPoint [ - - self assert: (multiShape includesPoint: 5 @ 5). - self deny: (multiShape includesPoint: -65 @ 5) -] - -{ #category : #tests } -TRCompositeShapeTest >> testIsFixed [ - | c | - c := TRCanvas new. - c addShape: multiShape. - self deny: multiShape isFixed. - - multiShape setAsFixed. - self assert: multiShape isFixed. -] - -{ #category : #tests } -TRCompositeShapeTest >> testNoCanvas [ - self assert: box1 canvas equals: nil. - self assert: multiShape canvas equals: nil -] - -{ #category : #tests } -TRCompositeShapeTest >> testNoLayout [ - multiShape noLayout -] - -{ #category : #tests } -TRCompositeShapeTest >> testNoShapeInEmptyShape [ - self assert: emptyShape numberOfShapes equals: 0 -] - -{ #category : #tests } -TRCompositeShapeTest >> testOffsets [ - - self assert: multiShape offsets asArray equals: (Array with: 0 @ 0 with: 0 @ 0). - box2 translateBy: 5 @ 6. - self assert: multiShape offsets asArray equals: (Array with: 0 @ 0 with: 0 @ 0). -] - -{ #category : #tests } -TRCompositeShapeTest >> testOffsets2 [ - box2 translateBy: 5 @ 6. - emptyShape addShape: box1; addShape: box2. - "Humm.... I do not really understand this. is offset always made of 0@0?" - self assert: emptyShape offsets asArray equals: (Array with: 0 @ 0 with: 0 @ 0). -] - -{ #category : #'testing translation' } -TRCompositeShapeTest >> testPositionWithOffset [ - - | s | - s := TRCompositeShape new. - s addShape: box1. - s addShape: box2 translateBy: 5 @ 4. - canvas addShape: s. - - self assert: box1 position equals: 0 @ 0. - self assert: box2 position equals: 5 @ 4. - - s translateTo: 10 @ 5. - self assert: s position equals: 10 @ 5. - - self assert: box1 position equals: 5 @ 1. - self assert: box2 position equals: 10 @ 5 - - -] - -{ #category : #'testing translation' } -TRCompositeShapeTest >> testPositionWithOffsetTranslationBy [ - - | s | - s := TRCompositeShape new. - s addShape: box1. - s addShape: box2 translateBy: 5 @ 4. - canvas addShape: s. - - self assert: box1 position equals: 0 @ 0. - self assert: box2 position equals: 5 @ 4. - - s translateBy: 10 @ 5. - self assert: s position equals: 15 @ 9. - self assert: box1 position equals: 10 @ 5. - self assert: box2 position equals: 15 @ 9 - -] - -{ #category : #tests } -TRCompositeShapeTest >> testPushBack [ - | c aShape | - aShape := TRBoxShape new. - - c := TRCanvas new. - c addShape: aShape. - c addShape: multiShape. - - self assert: c numberOfShapes equals: (multiShape numberOfShapes + 1). - multiShape pushBack. - self assert: (c shapes indexOf: aShape) equals: multiShape numberOfShapes + 1. - self assert: (c shapes indexOf: multiShape shapes first) equals: multiShape numberOfShapes. - self assert: (c shapes indexOf: multiShape shapes last) equals: 1 -] - -{ #category : #tests } -TRCompositeShapeTest >> testPushFront [ - | c aShape | - aShape := TRBoxShape new. - - c := TRCanvas new. - c addShape: multiShape. - c addShape: aShape. - - self assert: c numberOfShapes equals: (multiShape numberOfShapes + 1). - multiShape pushFront. - self assert: (c shapes indexOf: aShape) equals: 1. - self assert: (c shapes indexOf: multiShape shapes first) equals: 2. - self assert: (c shapes indexOf: multiShape shapes last) equals: multiShape numberOfShapes + 1. -] - -{ #category : #tests } -TRCompositeShapeTest >> testRemove [ - | c | - c := TRCanvas new. - c addShape: multiShape. - self assert: c numberOfShapes equals: 2. - multiShape remove. - self assert: c numberOfShapes equals: 0. - -" emptyShape := TRMultiCompositeShape new. - multiShape := TRMultiCompositeShape new. - box1 := TRBoxShape new size: 20. - box2 := TRBoxShape new size: 30. - multiShape addShape: box1; addShape: box2. - canvas := TRCanvas new." -] - -{ #category : #tests } -TRCompositeShapeTest >> testRemovingSubshapes [ - - | c s1 s2 s3 s4 | - c := TRCompositeShape new. - s1 := TRBoxShape new. - s2 := TRBoxShape new. - s3 := TRLabelShape new. - s4 := TRLabelShape new. - c addShape: s1; addShape: s2; addShape: s3; addShape: s4. - - self assert: c allShapes size equals: 4. - c removeShapesSuchAs: [ :s | s class == TRLabelShape ]. - self assert: c allShapes size equals: 2. - self assert: c allShapes asArray equals: (Array with: s1 with: s2) -] - -{ #category : #tests } -TRCompositeShapeTest >> testResetPath [ - multiShape resetPath -] - -{ #category : #tests } -TRCompositeShapeTest >> testSetCanvas [ - | c | - c := TRCanvas new. - multiShape canvas: c. - self assert: box1 canvas equals: c. - self assert: multiShape canvas equals: c -] - -{ #category : #tests } -TRCompositeShapeTest >> testSignalUpdate [ - - multiShape signalUpdate -] - -{ #category : #tests } -TRCompositeShapeTest >> testSignalUpdate2 [ - - TRCompositeShape new signalUpdate -] - -{ #category : #'testing translation' } -TRCompositeShapeTest >> testTranslation [ - - multiShape translateTo: 5 @ 6. - self assert: multiShape position equals: 5 @ 6. - self assert: box1 position equals: 5 @ 6. - self assert: box2 position equals: 5 @ 6. -] - -{ #category : #'testing translation' } -TRCompositeShapeTest >> testTranslationBy [ - - multiShape translateBy: 5 @ 6. - self assert: multiShape position equals: 5 @ 6. - self assert: box1 position equals: 5 @ 6. - self assert: box2 position equals: 5 @ 6. -] - -{ #category : #'testing translation' } -TRCompositeShapeTest >> testTranslationBy2 [ - - multiShape translateBy: 5 @ 6. - multiShape translateBy: 5 @ 6. - self assert: multiShape position equals: 10 @ 12. - self assert: box1 position equals: 10 @ 12. - self assert: box2 position equals: 10 @ 12. -] - -{ #category : #'testing layout' } -TRCompositeShapeTest >> testVerticalLayout [ - multiShape vertical. - canvas addShape: multiShape. - - self assert: (multiShape offsetOf: box1) equals: 0 @ 0. - self assert: (multiShape offsetOf: box2) equals: 0 @ 25. - - self assert: box1 position equals: 0 @ 0. - self assert: box2 position equals: 0 @ 25 - - - -] - -{ #category : #tests } -TRCompositeShapeTest >> testVerticalLayoutWithoutAddingToCanvas [ - multiShape vertical. -" canvas addShape: multiShape." - - self assert: (multiShape offsetOf: box1) equals: 0 @ 0. - self assert: (multiShape offsetOf: box2) equals: 0 @ 25. - - self assert: box1 position equals: 0 @ 0. - self assert: box2 position equals: 0 @ 0. - - - -] - -{ #category : #tests } -TRCompositeShapeTest >> testWidth [ - self assert: multiShape width equals: 30. - multiShape resetInnerShapes; vertical. - TRCanvas new addShape: multiShape. - self assert: multiShape width equals: 30. - - multiShape resetInnerShapes; horizontal. - TRCanvas new addShape: multiShape. - self assert: multiShape width equals: 50. - -" emptyShape := TRMultiCompositeShape new. - multiShape := TRMultiCompositeShape new. - box1 := TRBoxShape new size: 20. - box2 := TRBoxShape new size: 30. - multiShape addShape: box1; addShape: box2. - canvas := TRCanvas new." -] diff --git a/src/Trachel/TRConstraint.class.st b/src/Trachel/TRConstraint.class.st deleted file mode 100644 index 861730e33..000000000 --- a/src/Trachel/TRConstraint.class.st +++ /dev/null @@ -1,559 +0,0 @@ -" -A ROConstraint is a utility class that contains methods to position elements against others. - -" -Class { - #name : #TRConstraint, - #superclass : #TRObject, - #category : #'Trachel-Core' -} - -{ #category : #'OBSOLETE CLASS' } -TRConstraint class >> OBSOLETE [ - - " - This class is now obsolete. Please have a look at RTConstraint - " -] - -{ #category : #'public - aligning' } -TRConstraint class >> alignFromBottom: shapes [ - | bottomMostElement | - self deprecated: 'Please, use RTAlignement instead'. - shapes ifEmpty: [ ^ self ]. - bottomMostElement := shapes inject: shapes anyOne into: [ :maxS :s | - maxS encompassingRectangle bottomLeft y >= s encompassingRectangle bottomLeft y - ifTrue: [ s ] ifFalse: [ maxS ] ]. - self use: bottomMostElement alignFromBottom: shapes -] - -{ #category : #'public - aligning' } -TRConstraint class >> alignFromLeft: shapes [ - | leftMostElement | - self deprecated: 'Please, use RTAlignement instead'. - shapes ifEmpty: [ ^ self ]. - leftMostElement := shapes inject: shapes anyOne into: [ :maxS :s | - maxS encompassingRectangle topLeft x <= s encompassingRectangle topLeft x - ifTrue: [ s ] ifFalse: [ maxS ] ]. - self use: leftMostElement alignFromLeft: shapes -] - -{ #category : #'public - aligning' } -TRConstraint class >> alignFromRight: shapes [ - | rightMostElement | - self deprecated: 'Please, use RTAlignement instead'. - shapes ifEmpty: [ ^ self ]. - rightMostElement := shapes inject: shapes anyOne into: [ :maxS :s | - maxS encompassingRectangle topLeft x >= s encompassingRectangle topLeft x - ifTrue: [ s ] ifFalse: [ maxS ] ]. - self use: rightMostElement alignFromRight: shapes -] - -{ #category : #'public - aligning' } -TRConstraint class >> alignFromTop: shapes [ - | topMostElement | - - shapes ifEmpty: [ ^ self ]. - topMostElement := shapes inject: shapes anyOne into: [ :maxS :s | - maxS encompassingRectangle topLeft y <= s encompassingRectangle topLeft y - ifTrue: [ s ] ifFalse: [ maxS ] ]. - self use: topMostElement alignFromTop: shapes -] - -{ #category : #'public - resizing' } -TRConstraint class >> changeExtentOf: conformingShape like: originShape plus: aPoint [ - ^ conformingShape extent: originShape encompassingRectangle extent + aPoint -] - -{ #category : #'public - sticking' } -TRConstraint class >> fix: aShape for: anotherShape [ - "When anotherShape is moved, then move aShape" - | b | - - b := [ :shape :step | aShape translateBy: step ]. - anotherShape addCallback: (TRTranslationCallback block: b). - - -] - -{ #category : #'public - resizing' } -TRConstraint class >> keepExtentOf: conformingShape like: originShape plus: aPoint [ - | b | - self changeExtentOf: conformingShape like: originShape plus: aPoint. - b := [ :shape :step | self changeExtentOf: conformingShape like: originShape plus: aPoint ]. - originShape - addCallback: (TRExtentCallback block: b); - addCallback: (TRTranslationCallback block: b) -] - -{ #category : #'public - moving' } -TRConstraint class >> move: aShape above: anotherShape [ - ^ aShape translateTo: anotherShape center - (0 @ ((anotherShape height + aShape height) / 2)) -] - -{ #category : #'public - moving' } -TRConstraint class >> move: aShape below: anotherShape [ - ^ aShape translateTo: anotherShape center + (0 @ ((anotherShape height + aShape height) / 2)) -] - -{ #category : #'public - moving' } -TRConstraint class >> move: aShape below: anotherShape using: translator [ - ^ translator translate: aShape to: anotherShape center + (0 @ ((anotherShape height + aShape height) / 2)) -] - -{ #category : #'public - moving' } -TRConstraint class >> move: aShape belowAlignFromLeft: anotherShape [ - ^ self move: aShape belowAlignFromLeft: anotherShape gap: 0 -] - -{ #category : #'public - moving' } -TRConstraint class >> move: aShape belowAlignFromLeft: anotherShape gap: anInteger [ - ^ aShape translateTo: anotherShape center - + (0 @ ((anotherShape height + aShape height) / 2)) - - (((anotherShape width - aShape width) / 2) @ 0) - + (0 @ anInteger) -] - -{ #category : #'public - moving' } -TRConstraint class >> move: aShape between: s1 and: s2 [ - ^ aShape translateTo: (s1 position + s2 position) /2 -] - -{ #category : #'public - moving' } -TRConstraint class >> move: aShape between: s1 and: s2 offset: aFloat [ - ^ aShape translateTo: ((s1 position * aFloat) + (s2 position * (1.0 - aFloat))) -] - -{ #category : #'public - moving' } -TRConstraint class >> move: aShape onTheBottomCenterOf: anotherShape [ - " - Move aShape at the bottom of botom center of anotherShape - -v := RTView new. - -lbl := RTLabel elementOn: 'Hello world'. -box := (RTBox new width: 50; height: 80) element. - -v add: box. -v add: lbl. -box translateTo: 50 @ 50. -TRConstraint move: lbl onTheBottomCenterOf: box. -v - " - - self - move: aShape - onTheBottomCenterOf: anotherShape - withWidthPadding: 5 - withHeightPadding: 5 -] - -{ #category : #'public - moving' } -TRConstraint class >> move: aShape onTheBottomCenterOf: anotherShape withWidthPadding: widthPadding withHeightPadding: heightPadding [ - | rectangle bl | - rectangle := anotherShape encompassingRectangle. - bl := rectangle bottomLeft. - aShape translateTo: (bl x + (rectangle width / 2)) @ (bl y - aShape height) -] - -{ #category : #'public - moving' } -TRConstraint class >> move: aShape onTheBottomLeftOf: anotherShape [ - ^ aShape translateTo: anotherShape center - ((((anotherShape width/2) rounded) + (aShape width/2 rounded)) @ ((anotherShape height/ -2) rounded)) -] - -{ #category : #'public - moving' } -TRConstraint class >> move: aShape onTheCenterOf: anotherShape [ - ^ aShape translateTo: anotherShape center - -] - -{ #category : #'public - moving' } -TRConstraint class >> move: aShape onTheCenterRightOf: anotherShape [ - self - move: aShape - onTheCenterRightOf: anotherShape - withWidthPadding: 5 - withHeightPadding: 5 -] - -{ #category : #'public - moving' } -TRConstraint class >> move: aShape onTheCenterRightOf: anotherShape withWidthPadding: widthPadding withHeightPadding: heightPadding [ - | rectangle rect | - rect := anotherShape encompassingRectangle. - rectangle := anotherShape encompassingRectangle topRight. - ^ aShape translateTo: (rectangle x - aShape width) @ (rectangle y + (rect height / 2)) -] - -{ #category : #'public - moving' } -TRConstraint class >> move: aShape onTheLeftOf: anotherShape [ - ^ aShape translateTo: anotherShape center - ((((anotherShape width/2) rounded) + (aShape width/2 rounded)) @ 0) -] - -{ #category : #'public - moving' } -TRConstraint class >> move: aShape onTheRightBelowOf: anotherShape [ - ^ aShape translateTo: anotherShape center + (((anotherShape extent/2) rounded) + (aShape extent/2 rounded)) -] - -{ #category : #'public - moving' } -TRConstraint class >> move: aShape onTheRightOf: anotherShape [ - ^ aShape translateTo: anotherShape center + ((((anotherShape width/2) rounded) + (aShape width/2 rounded)) @ 0) -] - -{ #category : #'public - moving' } -TRConstraint class >> move: aShape onTheRightOf: anotherShape using: translator [ - ^ translator translate: aShape to: anotherShape center + ((((anotherShape width / 2) rounded) + (aShape width/2 rounded)) @ 0) -] - -{ #category : #'public - moving' } -TRConstraint class >> move: aShape onTheTopCenterOf: anotherShape [ - self - move: aShape - onTheTopCenterOf: anotherShape - withWidthPadding: 5 - withHeightPadding: 5 -] - -{ #category : #'public - moving' } -TRConstraint class >> move: aShape onTheTopCenterOf: anotherShape withWidthPadding: widthPadding withHeightPadding: heightPadding [ - | rectangle tl | - rectangle := anotherShape encompassingRectangle. - tl := rectangle topLeft. - aShape translateTo: (tl x + (rectangle width / 2) + (widthPadding / 2)) @ (tl y + (aShape height / 2)) -] - -{ #category : #'public - moving' } -TRConstraint class >> move: aShape onTheTopLeftOf: anotherShape [ - ^ aShape translateTo: anotherShape center - ((((anotherShape width/2) rounded) + (aShape width/2 rounded)) @ ((anotherShape height/ 2) rounded)) -] - -{ #category : #'public - moving' } -TRConstraint class >> move: aShape onTheTopLeftOf: anotherShape withPadding: padding [ - ^ self move: aShape onTheTopLeftOf: anotherShape withWidthPadding: padding withHeightPadding: padding -] - -{ #category : #'public - moving' } -TRConstraint class >> move: aShape onTheTopLeftOf: anotherShape withWidthPadding: widthPadding withHeightPadding: heightPadding [ - | rectangle | - rectangle := anotherShape encompassingRectangle topLeft. - ^ aShape translateTo: ((rectangle x + (aShape width/2) + widthPadding)@(rectangle y + (aShape height/2) + heightPadding)) -] - -{ #category : #'public - moving' } -TRConstraint class >> move: aShape onTheTopRightOf: anotherShape [ - ^ self move: aShape onTheTopRightOf: anotherShape withPadding: 5 -] - -{ #category : #'public - moving' } -TRConstraint class >> move: aShape onTheTopRightOf: anotherShape withPadding: padding [ - ^ self move: aShape onTheTopRightOf: anotherShape withWidthPadding: padding withHeightPadding: padding -] - -{ #category : #'public - moving' } -TRConstraint class >> move: aShape onTheTopRightOf: anotherShape withWidthPadding: widthPadding withHeightPadding: heightPadding [ - | rectangle | - rectangle := anotherShape encompassingRectangle topRight. - ^ aShape translateTo: ((rectangle x - (aShape width/2) - widthPadding)@(rectangle y + (aShape height/2) + heightPadding)) -] - -{ #category : #'public - moving' } -TRConstraint class >> move: els1 to: aSymbol and: els2 [ - aSymbol ifNil: [ ^ self ]. - self perform: ('move:', aSymbol,':') asSymbol withArguments: (Array with: els1 with: els2) -] - -{ #category : #'public - moving' } -TRConstraint class >> moveAtTheBottomOfTheWindow: trachelShape [ - "Worked only for fixed shape" - | windowSize | - trachelShape canvas ifNil: [ ^ self ]. - windowSize := trachelShape canvas extent. - trachelShape translateTo: (trachelShape width / 2) @ (windowSize y - (trachelShape height / 2)) -] - -{ #category : #'public - moving' } -TRConstraint class >> moveAtTheBottomRightOfTheWindow: trachelShape [ - "Worked only for fixed shape" - | windowSize | - trachelShape canvas ifNil: [ ^ self ]. - windowSize := trachelShape canvas extent. - trachelShape - translateTo: (windowSize x - (trachelShape width / 2)) @ (windowSize y - (trachelShape height / 2)) -] - -{ #category : #'public - camera' } -TRConstraint class >> moveCameraToTheRightIn: trachelCanvas [ - ^ trachelCanvas camera translateTo: (trachelCanvas extent x / -2) @ trachelCanvas camera position y -] - -{ #category : #'public - resizing' } -TRConstraint class >> setAllToMaxHeight: shapes [ - | maxHeightShape | - maxHeightShape := shapes inject: shapes anyOne into: [ :maxS :s | - maxS height <= s height - ifTrue: [ s ] ifFalse: [ maxS ] ]. - self useHeightOf: maxHeightShape for: shapes -] - -{ #category : #'public - resizing' } -TRConstraint class >> setAllToMaxWidth: shapes [ - | maxWidthShape | - maxWidthShape := shapes inject: shapes anyOne into: [ :maxS :s | - maxS width <= s width - ifTrue: [ s ] ifFalse: [ maxS ] ]. - self useWidthOf: maxWidthShape for: shapes -] - -{ #category : #'public - sticking' } -TRConstraint class >> stick: aShape above: anotherShape [ - | b | - self move: aShape above: anotherShape. - - b := [ :shape :step | self move: aShape above: anotherShape ]. - anotherShape addCallback: (TRTranslationCallback block: b). - anotherShape addCallback: (TRExtentCallback block: b) - -] - -{ #category : #'public - sticking' } -TRConstraint class >> stick: aShape below: anotherShape [ - | b | - self move: aShape below: anotherShape. - b := [ :shape :step | self move: aShape below: anotherShape ]. - anotherShape addCallback: (TRTranslationCallback block: b). - anotherShape addCallback: (TRExtentCallback block: b) - - - -] - -{ #category : #'public - sticking' } -TRConstraint class >> stick: aShape between: s1 and: s2 [ - ^ self stick: aShape between: s1 and: s2 offset: 0.5 -] - -{ #category : #'public - sticking' } -TRConstraint class >> stick: aShape between: s1 and: s2 offset: aFloat [ - "locate aShape between s1 and s2. aFloat is used to weight the extremities. - aFloat = 1.0 the label is on s1. - aFloat = 0.0 the label is on s2" - | callback b | - self move: aShape between: s1 and: s2 offset: aFloat. - - b := [ :shape :step | self move: aShape between: s1 and: s2 offset: aFloat ]. - - callback := TRTranslationCallback block: b. - s1 addCallback: callback. - s2 addCallback: callback. - - callback := TRExtentCallback block: b. - s1 addCallback: callback. - s2 addCallback: callback - -] - -{ #category : #'public - sticking' } -TRConstraint class >> stick: aShape onTheBottomCenterOf: anotherShape [ - -" -v := RTView new. - -lbl := RTLabel elementOn: 'Hello world'. -box := (RTBox new width: 50; height: 80) element. - -v add: box. -v add: lbl. -box translateTo: 50 @ 50. -box @ RTDraggable. -TRConstraint stick: lbl onTheBottomCenterOf: box. -v -" - | b | - self move: aShape onTheBottomCenterOf: anotherShape. - - b := [ :shape :step | self move: aShape onTheBottomCenterOf: anotherShape ]. - anotherShape addCallback: (TRTranslationCallback block: b). - anotherShape addCallback: (TRExtentCallback block: b) -] - -{ #category : #'public - sticking' } -TRConstraint class >> stick: aShape onTheBottomLeftOf: anotherShape [ - | b | - self move: aShape onTheBottomLeftOf: anotherShape. - - b := [ :shape :step | self move: aShape onTheBottomLeftOf: anotherShape ]. - anotherShape addCallback: (TRTranslationCallback block: b). - anotherShape addCallback: (TRExtentCallback block: b) -] - -{ #category : #'public - sticking' } -TRConstraint class >> stick: aShape onTheCenterOf: anotherShape [ - | b | - self move: aShape onTheCenterOf: anotherShape. - - b := [ :shape :step | self move: aShape onTheCenterOf: anotherShape ]. - anotherShape addCallback: (TRTranslationCallback block: b). - anotherShape addCallback: (TRExtentCallback block: b) - -] - -{ #category : #'public - sticking' } -TRConstraint class >> stick: aShape onTheLeftOf: anotherShape [ - | b | - self move: aShape onTheLeftOf: anotherShape. - - b := [ :shape :step | self move: aShape onTheLeftOf: anotherShape ]. - anotherShape addCallback: (TRTranslationCallback block: b). - anotherShape addCallback: (TRExtentCallback block: b) -] - -{ #category : #'public - sticking' } -TRConstraint class >> stick: aShape onTheRightOf: anotherShape [ - | b | - self move: aShape onTheRightOf: anotherShape. - - b := [ :shape :step | self move: aShape onTheRightOf: anotherShape ]. - anotherShape addCallback: (TRTranslationCallback block: b). - anotherShape addCallback: (TRExtentCallback block: b) - -] - -{ #category : #'public - sticking' } -TRConstraint class >> stick: aShape onTheTopCenterOf: anotherShape [ - -" -v := RTView new. - -lbl := RTLabel elementOn: 'Hello world'. -box := (RTBox new width: 50; height: 80) element. - -v add: box. -v add: lbl. -box translateTo: 50 @ 50. -box @ RTDraggable. -TRConstraint stick: lbl onTheTopCenterOf: box. -v -" - | b | - self move: aShape onTheTopCenterOf: anotherShape. - - b := [ :shape :step | self move: aShape onTheTopCenterOf: anotherShape ]. - anotherShape addCallback: (TRTranslationCallback block: b). - anotherShape addCallback: (TRExtentCallback block: b) -] - -{ #category : #'public - sticking' } -TRConstraint class >> stick: aShape onTheTopLeftOf: anotherShape [ - | b | - self move: aShape onTheTopLeftOf: anotherShape. - - b := [ :shape :step | self move: aShape onTheTopLeftOf: anotherShape ]. - anotherShape addCallback: (TRTranslationCallback block: b). - anotherShape addCallback: (TRExtentCallback block: b) - -] - -{ #category : #'public - sticking' } -TRConstraint class >> stick: aShape onTheTopLeftOf: anotherShape withPadding: padding [ - | b | - self move: aShape onTheTopLeftOf: anotherShape withPadding: padding. - - b := [ :shape :step | self move: aShape onTheTopLeftOf: anotherShape withPadding: padding ]. - anotherShape addCallback: (TRTranslationCallback block: b). - anotherShape addCallback: (TRExtentCallback block: b) - -] - -{ #category : #'public - sticking' } -TRConstraint class >> stick: aShape onTheTopLeftOf: anotherShape withWidthPadding: widthPadding withHeightPadding: heightPadding [ - | b | - self move: aShape onTheTopLeftOf: anotherShape withWidthPadding: widthPadding withHeightPadding: heightPadding. - - b := [ :shape :step | self move: aShape onTheTopLeftOf: anotherShape withWidthPadding: widthPadding withHeightPadding: heightPadding]. - anotherShape addCallback: (TRTranslationCallback block: b). - anotherShape addCallback: (TRExtentCallback block: b). -] - -{ #category : #'public - sticking' } -TRConstraint class >> stickAtTheBottomLeftOfTheWindow: trachelShape [ - self moveAtTheBottomLeftOfTheWindow: trachelShape. - trachelShape canvas - when: TRResizeCanvasEvent - do: [ :event | self moveAtTheBottomLeftOfTheWindow: trachelShape ] -] - -{ #category : #'public - sticking' } -TRConstraint class >> stickAtTheBottomOfTheWindow: trachelShape [ - self moveAtTheBottomOfTheWindow: trachelShape. - trachelShape canvas - when: TRResizeCanvasEvent - do: [ :event | self moveAtTheBottomOfTheWindow: trachelShape ] -] - -{ #category : #'public - sticking' } -TRConstraint class >> stickAtTheBottomRightOfTheWindow: trachelShape [ - self moveAtTheBottomRightOfTheWindow: trachelShape. - trachelShape canvas - when: TRResizeCanvasEvent - do: [ :event | self moveAtTheBottomRightOfTheWindow: trachelShape ] -] - -{ #category : #'public - camera' } -TRConstraint class >> stickCameraToTheRightIn: trachelCanvas [ - trachelCanvas - when: TRResizeCanvasEvent - do: [ :event | self moveCameraToTheRightIn: trachelCanvas ] -] - -{ #category : #'public - aligning' } -TRConstraint class >> use: aShape alignFromBottom: shapes [ - | topY newY | - self deprecated: 'Please, use RTAlignement instead'. - topY := aShape encompassingRectangle bottomCenter y. - shapes do: [ :s | - newY := topY - (s encompassingRectangle height / 2). - s translateTo: s position x @ newY - ] -] - -{ #category : #'public - aligning' } -TRConstraint class >> use: aShape alignFromLeft: shapes [ - | topX newX | - self deprecated: 'Please, use RTAlignement instead'. - topX := aShape encompassingRectangle topLeft x. - shapes do: [ :s | - newX := topX + (s encompassingRectangle width / 2). - s translateTo: newX @ s position y - ] -] - -{ #category : #'public - aligning' } -TRConstraint class >> use: aShape alignFromRight: shapes [ - | topX newX | - self deprecated: 'Please, use RTAlignement instead'. - topX := aShape encompassingRectangle topRight x. - shapes do: [ :s | - newX := topX - (s encompassingRectangle width / 2). - s translateTo: newX @ s position y - ] -] - -{ #category : #'public - aligning' } -TRConstraint class >> use: aShape alignFromTop: shapes [ - | topY newY | - - topY := aShape encompassingRectangle topCenter y. - shapes do: [ :s | - newY := topY + (s encompassingRectangle height / 2). - s translateTo: s position x @ newY - ] -] - -{ #category : #'public - resizing' } -TRConstraint class >> useHeightOf: aShape for: shapes [ - shapes do: [ :s | s height: aShape height ] -] - -{ #category : #'public - resizing' } -TRConstraint class >> useWidthOf: aShape for: shapes [ - shapes do: [ :s | s width: aShape width ] -] diff --git a/src/Trachel/TRConstraintTest.class.st b/src/Trachel/TRConstraintTest.class.st deleted file mode 100644 index 695a4fdc4..000000000 --- a/src/Trachel/TRConstraintTest.class.st +++ /dev/null @@ -1,248 +0,0 @@ -" -A ROConstraintTest is xxxxxxxxx. - -Instance Variables - element1: - element2: - view: - -element1 - - xxxxx - -element2 - - xxxxx - -view - - xxxxx - -" -Class { - #name : #TRConstraintTest, - #superclass : #TRTest, - #instVars : [ - 'element1', - 'element2', - 'view', - 'canvas', - 'shape1', - 'shape2', - 'originShape', - 'conformingShape' - ], - #category : #'Trachel-Tests' -} - -{ #category : #running } -TRConstraintTest >> setUp [ - super setUp. - canvas := TRCanvas new. - shape1 := TRBoxShape new size: 50. - shape2 := TRBoxShape new size: 10. - canvas addShape: shape1. - canvas addShape: shape2. - - (originShape := TRBoxShape new) extent: 10 @ 10. - (conformingShape := TRBoxShape new) extent: 20 @ 20 -] - -{ #category : #aligning } -TRConstraintTest >> testAlignFromBottom [ - " - TRCanvas new addShape: shape1; addShape: shape2; yourself - " - "TRConstraint alignFromBottom: (Array with: shape1 with: shape2)." - RTAlignment new elements: (Array with: shape1 with: shape2); bottom. - self assert: shape1 position equals: 0 @ -20. - self assert: shape2 position equals: 0 @ 0. -] - -{ #category : #aligning } -TRConstraintTest >> testAlignFromLeft [ - " - TRCanvas new addShape: shape1; addShape: shape2; yourself - " - RTAlignment new elements: (Array with: shape1 with: shape2); left. - self assert: shape1 position equals: 0 @ 0. - self assert: shape2 position equals: -20 @ 0. -] - -{ #category : #aligning } -TRConstraintTest >> testAlignFromRight [ - " - TRCanvas new addShape: shape1; addShape: shape2; yourself - " - RTAlignment new elements: (Array with: shape1 with: shape2); right. - "TRConstraint alignFromRight: (Array with: shape1 with: shape2)." - self assert: shape1 position equals: 0 @ 0. - self assert: shape2 position equals: 20 @ 0. -] - -{ #category : #aligning } -TRConstraintTest >> testAlignFromTop [ - " - TRCanvas new addShape: shape1; addShape: shape2; yourself - self debug: #testAlignFromTop - " - "TRConstraint alignFromTop: (Array with: shape1 with: shape2)." - RTAlignment new elements: (Array with: shape1 with: shape2); top. - self assert: shape1 position equals: 0 @ 0. - self assert: shape2 position equals: 0 @ -20. -] - -{ #category : #resizing } -TRConstraintTest >> testChangingExtent [ - - TRConstraint changeExtentOf: conformingShape like: originShape plus: 5 @ -5. - self assert: conformingShape extent = (15 @ 5). - self assert: originShape extent = (10 @ 10). - - originShape extent: 0 @ 0. - self assert: conformingShape extent = (15 @ 5). - - TRConstraint changeExtentOf: conformingShape like: originShape plus: 0 @ 0. - self assert: conformingShape extent = (0 @ 0) -] - -{ #category : #resizing } -TRConstraintTest >> testKeepingExtent [ - originShape extent: 10 @ 10. - conformingShape extent: 20 @ 20. - TRConstraint keepExtentOf: conformingShape like: originShape plus: 5 @ -5. - self assert: conformingShape extent = (15 @ 5). - self assert: originShape extent = (10 @ 10). - originShape extent: 0 @ 5. - self assert: conformingShape extent = (5 @ 0) -] - -{ #category : #resizing } -TRConstraintTest >> testResizingHeight [ - - self assert: shape1 height equals: 50. - self assert: shape2 height equals: 10. - - TRConstraint useHeightOf: shape1 for: (Array with: shape2). - - self assert: shape1 height equals: 50. - self assert: shape2 height equals: 50. - -] - -{ #category : #resizing } -TRConstraintTest >> testResizingToMaxHeight [ - - self assert: shape1 height equals: 50. - self assert: shape2 height equals: 10. - - TRConstraint setAllToMaxHeight: (Array with: shape2 with: shape1). - - self assert: shape1 height equals: 50. - self assert: shape2 height equals: 50. - -] - -{ #category : #resizing } -TRConstraintTest >> testResizingToMaxWidth [ - - self assert: shape1 width equals: 50. - self assert: shape2 width equals: 10. - - TRConstraint setAllToMaxWidth: (Array with: shape2 with: shape1). - - self assert: shape1 width equals: 50. - self assert: shape2 width equals: 50. - -] - -{ #category : #resizing } -TRConstraintTest >> testResizingWidth [ - - self assert: shape1 width equals: 50. - self assert: shape2 width equals: 10. - - TRConstraint useWidthOf: shape1 for: (Array with: shape2). - - self assert: shape1 width equals: 50. - self assert: shape2 width equals: 50. - -] - -{ #category : #sticking } -TRConstraintTest >> testStickAbove [ - - TRConstraint stick: shape2 above: shape1. - self assert: shape1 center = (0 @ 0). - self assert: shape2 center = (0 @ -30). - - shape1 translateBy: 10 @ 10. - self assert: shape1 center = (10 @ 10). - self assert: shape2 center = (10 @ -20). - -] - -{ #category : #sticking } -TRConstraintTest >> testStickBelow [ - - TRConstraint stick: shape2 below: shape1. - self assert: shape1 center = (0 @ 0). - self assert: shape2 center = (0 @ 30). - - shape1 translateBy: 10 @ 10. - self assert: shape1 center = (10 @ 10). - self assert: shape2 center = (10 @ 40). - -] - -{ #category : #sticking } -TRConstraintTest >> testStickToTheCenter [ - - TRConstraint - stick: shape1 onTheCenterOf: shape2. - - self assert: shape1 center = (0 @ 0). - self assert: shape2 center = (0 @ 0). - - shape2 translateBy: 10 @ 15. - self assert: shape1 center = (10 @ 15). - self assert: shape2 center = (10 @ 15). - -] - -{ #category : #aligning } -TRConstraintTest >> testUseAlignFromBottom [ - " - TRCanvas new addShape: shape1; addShape: shape2; yourself - " - TRConstraint use: shape1 alignFromBottom: (Array with: shape1 with: shape2). - self assert: shape1 position equals: 0 @ 0. - self assert: shape2 position equals: 0 @ 20. -] - -{ #category : #aligning } -TRConstraintTest >> testUseAlignFromLeft [ - " - TRCanvas new addShape: shape1; addShape: shape2; yourself - " - TRConstraint use: shape1 alignFromLeft: (Array with: shape1 with: shape2). - self assert: shape1 position equals: 0 @ 0. - self assert: shape2 position equals: -20 @ 0. -] - -{ #category : #aligning } -TRConstraintTest >> testUseAlignFromRight [ - " - TRCanvas new addShape: shape1; addShape: shape2; yourself - " - TRConstraint use: shape1 alignFromRight: (Array with: shape1 with: shape2). - self assert: shape1 position equals: 0 @ 0. - self assert: shape2 position equals: 20 @ 0. -] - -{ #category : #aligning } -TRConstraintTest >> testUseAlignFromTop [ - " - TRCanvas new addShape: shape1; addShape: shape2; yourself - " - TRConstraint use: shape1 alignFromTop: (Array with: shape1 with: shape2). - self assert: shape1 position equals: 0 @ 0. - self assert: shape2 position equals: 0 @ -20. -] diff --git a/src/Trachel/TRDarkSolarizedTheme.class.st b/src/Trachel/TRDarkSolarizedTheme.class.st deleted file mode 100644 index 5d4975cbe..000000000 --- a/src/Trachel/TRDarkSolarizedTheme.class.st +++ /dev/null @@ -1,16 +0,0 @@ -Class { - #name : #TRDarkSolarizedTheme, - #superclass : #TRSolarizedTheme, - #category : #'Trachel-Core-Theme' -} - -{ #category : #accessing } -TRDarkSolarizedTheme >> trachelCanvasColor [ - " - The original Solarized color is: - ^ self base03 - - However, it does not fit the Pharo Dark theme - " - ^ Color veryDarkGray -] diff --git a/src/Trachel/TRDarkTheme.class.st b/src/Trachel/TRDarkTheme.class.st deleted file mode 100644 index 0c85fc08c..000000000 --- a/src/Trachel/TRDarkTheme.class.st +++ /dev/null @@ -1,18 +0,0 @@ -Class { - #name : #TRDarkTheme, - #superclass : #TRPlainColorTheme, - #category : #'Trachel-Core-Theme' -} - -{ #category : #accessing } -TRDarkTheme >> trachelCanvasColor [ - ^ Pharo3DarkTheme baseColor -] - -{ #category : #accessing } -TRDarkTheme >> transformColor: aColor [ - " - self new transformColor: (Color red: 0.8 green: 0.5 blue: 0.5) - " - ^ Color h: aColor hue s: aColor saturation l: (0.5 - ((aColor lightness - 0.5) * 0.8)) alpha: aColor alpha -] diff --git a/src/Trachel/TRDiamondShape.class.st b/src/Trachel/TRDiamondShape.class.st deleted file mode 100644 index 67c8c2c23..000000000 --- a/src/Trachel/TRDiamondShape.class.st +++ /dev/null @@ -1,41 +0,0 @@ -Class { - #name : #TRDiamondShape, - #superclass : #TRAbstractLineDecoratorShape, - #instVars : [ - 'left', - 'right', - 'end' - ], - #category : #'Trachel-ShapesForArrow' -} - -{ #category : #visitor } -TRDiamondShape >> accept: aVisitor [ - aVisitor visitDiamondShape: self -] - -{ #category : #hooks } -TRDiamondShape >> computePath [ - | vector r u unit middle endPoint | - vector := self to - self from. - r := vector r. - r = 0 ifTrue: [ ^ false ]. - - u := vector normal. - unit := vector / r. - endPoint := self to - (vector * (1-percentage)). - "toPointWithOffset := self to - (offset * (vector r - size) * unit)." "add offset" - end := endPoint - (2*unit * size). - middle := endPoint - (unit * size). - left := middle - (u * size * 0.7). - right := middle + (u * size * 0.7). - path := self athensCanvas - createPath: [ :builder | - builder - absolute; - moveTo: end; - lineTo: left; - lineTo: endPoint; - lineTo: right; - lineTo: end. ] -] diff --git a/src/Trachel/TREllipseShape.class.st b/src/Trachel/TREllipseShape.class.st deleted file mode 100644 index d1033be9d..000000000 --- a/src/Trachel/TREllipseShape.class.st +++ /dev/null @@ -1,51 +0,0 @@ -Class { - #name : #TREllipseShape, - #superclass : #TRAbstractBoxShape, - #category : #'Trachel-Shapes' -} - -{ #category : #hooks } -TREllipseShape class >> defaultStrokeWidth [ - ^ 1 -] - -{ #category : #visitor } -TREllipseShape >> accept: aVisitor [ - aVisitor visitEllipseShape: self -] - -{ #category : #hooks } -TREllipseShape >> computePath [ - path := TRPlatform current computeEllipsePathFor: self -] - -{ #category : #hooks } -TREllipseShape >> defaultStrokeWidth [ - ^ self class defaultStrokeWidth -] - -{ #category : #testing } -TREllipseShape >> includesPoint: aPoint [ - "Implementation is taken over from EllipseMorph>>containsPoint:" - | invertedPoint radius other delta xOverY t1 t2 | - invertedPoint := matrix inverseTransform: aPoint. - (rectangle containsPoint: invertedPoint) ifFalse: [ ^ false ]. "quick elimination" - radius := rectangle height asFloat / 2. - other := rectangle width asFloat / 2. - delta := invertedPoint - rectangle topLeft - (other@radius). - xOverY := rectangle width asFloat / rectangle height asFloat. - t1 := (delta x asFloat / xOverY) squared + delta y squared. - t2 := radius squared. - ^ (t1 < t2) or: [ t1 closeTo: t2 ]. -] - -{ #category : #initialization } -TREllipseShape >> initialize [ - super initialize. - self strokeWidth: self defaultStrokeWidth -] - -{ #category : #drawing } -TREllipseShape >> scaledStrokeWidth [ - ^ self strokeWidth -] diff --git a/src/Trachel/TREllipseShapeTest.class.st b/src/Trachel/TREllipseShapeTest.class.st deleted file mode 100644 index b3635df38..000000000 --- a/src/Trachel/TREllipseShapeTest.class.st +++ /dev/null @@ -1,27 +0,0 @@ -" -A TREllipseShapeTest is a test class for testing the behavior of TREllipseShape -" -Class { - #name : #TREllipseShapeTest, - #superclass : #TRTest, - #category : #'Trachel-Tests' -} - -{ #category : #tests } -TREllipseShapeTest >> testStrokeWidth [ - self assert: TREllipseShape new strokeWidth equals: TREllipseShape new defaultStrokeWidth. -] - -{ #category : #tests } -TREllipseShapeTest >> testStrokeWidth02 [ - self assert: TREllipseShape new defaultStrokeWidth equals: 1. - -] - -{ #category : #tests } -TREllipseShapeTest >> testWidth [ - - | s | - s := TREllipseShape new size: 30. - self assert: s strokeWidth equals: 1. -] diff --git a/src/Trachel/TREmptyArrowHeadShape.class.st b/src/Trachel/TREmptyArrowHeadShape.class.st deleted file mode 100644 index 0347d72d5..000000000 --- a/src/Trachel/TREmptyArrowHeadShape.class.st +++ /dev/null @@ -1,38 +0,0 @@ -Class { - #name : #TREmptyArrowHeadShape, - #superclass : #TRAbstractArrowHeadShape, - #category : #'Trachel-ShapesForArrow' -} - -{ #category : #visitor } -TREmptyArrowHeadShape >> accept: aVisitor [ - aVisitor visitArrowHeadShape: self -] - -{ #category : #hooks } -TREmptyArrowHeadShape >> computePath [ - | vector r u unit middle endPoint | - vector := self to - self from. - r := vector r. - r = 0 ifTrue: [ ^ false ]. - u := vector normal. - unit := vector / r. - endPoint := self to - (vector * (1-percentage)). - middle := endPoint - (unit * size). - left := middle - (u * size). - right := middle + (u * size). - path := self athensCanvas - createPath: [ :builder | - builder - absolute; - moveTo: endPoint; - lineTo: left; - lineTo: right; - lineTo: endPoint. ] -] - -{ #category : #initialization } -TREmptyArrowHeadShape >> initialize [ - super initialize. - -] diff --git a/src/Trachel/TREmptyNarrowArrowHeadShape.class.st b/src/Trachel/TREmptyNarrowArrowHeadShape.class.st deleted file mode 100644 index 342236c97..000000000 --- a/src/Trachel/TREmptyNarrowArrowHeadShape.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #TREmptyNarrowArrowHeadShape, - #superclass : #TRAbstractArrowHeadShape, - #category : #'Trachel-ShapesForArrow' -} - -{ #category : #hooks } -TREmptyNarrowArrowHeadShape >> computePath [ - | vector r u unit middle endPoint | - vector := self to - self from. - r := vector r. - r = 0 - ifTrue: [ ^ false ]. - u := vector normal. - unit := vector / r. - endPoint := self to - (vector * (1 - percentage)). - middle := endPoint - (unit * size). - left := middle - (u * size * 0.5). - right := middle + (u * size * 0.5). - path := self athensCanvas - createPath: [ :builder | - builder - absolute; - moveTo: endPoint; - lineTo: left; - lineTo: right; - lineTo: endPoint ] -] diff --git a/src/Trachel/TREvent.class.st b/src/Trachel/TREvent.class.st deleted file mode 100644 index d4fa72086..000000000 --- a/src/Trachel/TREvent.class.st +++ /dev/null @@ -1,80 +0,0 @@ -" -TREvent is the root of all the events handled by Trachel (and therefore Roassal). - -Here is an example on how to use it: --=-=-= -c := TRCanvas new. - -shape := TRBoxShape new size: 40. -c addShape: shape. - -shape when: TREvent do: [ :evt | shape color: Color random. c signalUpdate ]. - -c --=-=-= -" -Class { - #name : #TREvent, - #superclass : #Announcement, - #instVars : [ - 'canvas', - 'position', - 'morph' - ], - #category : #'Trachel-Events' -} - -{ #category : #accessing } -TREvent >> canvas [ - - ^ canvas -] - -{ #category : #accessing } -TREvent >> canvas: aTrachelCanvas [ - "Set the Trachel canvas" - canvas := aTrachelCanvas -] - -{ #category : #initialization } -TREvent >> initialize [ - super initialize. - position := 0 @ 0. -] - -{ #category : #accessing } -TREvent >> morph [ - ^ morph -] - -{ #category : #accessing } -TREvent >> morph: aMorph [ - morph := aMorph -] - -{ #category : #accessing } -TREvent >> position [ - - ^ position -] - -{ #category : #accessing } -TREvent >> position: aPoint [ - - position := aPoint -] - -{ #category : #accessing } -TREvent >> positionFromCamera [ - "Return the position from the camera. I.e., 0 @ 0 is at the center of the window if the camera has not been translated" - ^ canvas - ifNotNil: [ canvas camera fromPixelToSpace: self position ] - ifNil: [ -250 @ -250 ] - -] - -{ #category : #accessing } -TREvent >> signalUpdate [ - morph notNil ifTrue: [ morph changed ] - -] diff --git a/src/Trachel/TREventOverseer.class.st b/src/Trachel/TREventOverseer.class.st deleted file mode 100644 index 653adb76c..000000000 --- a/src/Trachel/TREventOverseer.class.st +++ /dev/null @@ -1,31 +0,0 @@ -Class { - #name : #TREventOverseer, - #superclass : #TRObject, - #instVars : [ - 'block' - ], - #category : #'Trachel-Core' -} - -{ #category : #accessing } -TREventOverseer >> block [ - ^ block -] - -{ #category : #accessing } -TREventOverseer >> block: aOneArgBlock [ - "The block is evaluated at each event fired by TRMorph" - block := aOneArgBlock -] - -{ #category : #public } -TREventOverseer >> firedEvent: anEvent [ - block rtValue: anEvent -] - -{ #category : #initialization } -TREventOverseer >> initialize [ - super initialize. - "Do nothing for now" - block := nil -] diff --git a/src/Trachel/TRExtensibleLabelShape.class.st b/src/Trachel/TRExtensibleLabelShape.class.st deleted file mode 100644 index b33cff0ee..000000000 --- a/src/Trachel/TRExtensibleLabelShape.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #TRExtensibleLabelShape, - #superclass : #TRLabelShape, - #category : #'Trachel-Shapes' -} - -{ #category : #accessing } -TRExtensibleLabelShape >> extent: newExtent [ - | oldExtent | - oldExtent := self extent. - (oldExtent = (0 @ 0)) ifTrue: [ ^ self ]. - matrix scaleBy: newExtent / oldExtent. - self triggerCallbacksForNewExtent: newExtent oldExtent: oldExtent. - -] diff --git a/src/Trachel/TRExtentCallback.class.st b/src/Trachel/TRExtentCallback.class.st deleted file mode 100644 index 8dde38811..000000000 --- a/src/Trachel/TRExtentCallback.class.st +++ /dev/null @@ -1,32 +0,0 @@ -" -I am triggered when the extent (size) of aShape has been changed. - -==aShape addCallback: (TRExtentCallback block: [ :shape :ratio | ""do sth"" ])== -" -Class { - #name : #TRExtentCallback, - #superclass : #TRCallback, - #category : #'Trachel-Callbacks' -} - -{ #category : #testing } -TRExtentCallback >> isExtentCallback [ - ^ true -] - -{ #category : #actions } -TRExtentCallback >> shape: aTRShape newExtent: newExtent oldExtent: oldExtent [ - ^ (oldExtent x = 0 or: [ oldExtent y = 0 ]) - ifTrue: [ self - shape: aTRShape - ratio: 0 ] - ifFalse: [ self - shape: aTRShape - ratio: newExtent / oldExtent ] - -] - -{ #category : #actions } -TRExtentCallback >> shape: aTRShape ratio: aRatio [ - ^ block cull: aTRShape cull: aRatio -] diff --git a/src/Trachel/TRFilledArrowHeadShape.class.st b/src/Trachel/TRFilledArrowHeadShape.class.st deleted file mode 100644 index 47dd4f8ba..000000000 --- a/src/Trachel/TRFilledArrowHeadShape.class.st +++ /dev/null @@ -1,11 +0,0 @@ -Class { - #name : #TRFilledArrowHeadShape, - #superclass : #TREmptyArrowHeadShape, - #category : #'Trachel-ShapesForArrow' -} - -{ #category : #accessing } -TRFilledArrowHeadShape >> color: aColor [ - super color: aColor. - color := aColor -] diff --git a/src/Trachel/TRFilledCircleHeadShape.class.st b/src/Trachel/TRFilledCircleHeadShape.class.st deleted file mode 100644 index 3c5af0b39..000000000 --- a/src/Trachel/TRFilledCircleHeadShape.class.st +++ /dev/null @@ -1,11 +0,0 @@ -Class { - #name : #TRFilledCircleHeadShape, - #superclass : #TRCircleHeadShape, - #category : #'Trachel-ShapesForArrow' -} - -{ #category : #accessing } -TRFilledCircleHeadShape >> color: aColor [ - super color: aColor. - color := aColor -] diff --git a/src/Trachel/TRFilledDiamondShape.class.st b/src/Trachel/TRFilledDiamondShape.class.st deleted file mode 100644 index 9db55a0d7..000000000 --- a/src/Trachel/TRFilledDiamondShape.class.st +++ /dev/null @@ -1,11 +0,0 @@ -Class { - #name : #TRFilledDiamondShape, - #superclass : #TRDiamondShape, - #category : #'Trachel-ShapesForArrow' -} - -{ #category : #accessing } -TRFilledDiamondShape >> color: aColor [ - super color: aColor. - color := aColor -] diff --git a/src/Trachel/TRFilledNarrowArrowHeadShape.class.st b/src/Trachel/TRFilledNarrowArrowHeadShape.class.st deleted file mode 100644 index 2dfe1a860..000000000 --- a/src/Trachel/TRFilledNarrowArrowHeadShape.class.st +++ /dev/null @@ -1,11 +0,0 @@ -Class { - #name : #TRFilledNarrowArrowHeadShape, - #superclass : #TREmptyNarrowArrowHeadShape, - #category : #'Trachel-ShapesForArrow' -} - -{ #category : #accessing } -TRFilledNarrowArrowHeadShape >> color: aColor [ - super color: aColor. - color := aColor -] diff --git a/src/Trachel/TRFocusCenter.class.st b/src/Trachel/TRFocusCenter.class.st deleted file mode 100644 index 4811393a3..000000000 --- a/src/Trachel/TRFocusCenter.class.st +++ /dev/null @@ -1,12 +0,0 @@ -Class { - #name : #TRFocusCenter, - #superclass : #TRFocusing, - #category : #'Trachel-Core' -} - -{ #category : #hooks } -TRFocusCenter >> on: canvas [ - | encompassingRectangle | - encompassingRectangle := self encompassingRectangleOf: canvas shapes. - canvas camera translateTo: encompassingRectangle center. -] diff --git a/src/Trachel/TRFocusRightMost.class.st b/src/Trachel/TRFocusRightMost.class.st deleted file mode 100644 index 16ab1d3ba..000000000 --- a/src/Trachel/TRFocusRightMost.class.st +++ /dev/null @@ -1,12 +0,0 @@ -Class { - #name : #TRFocusRightMost, - #superclass : #TRFocusing, - #category : #'Trachel-Core' -} - -{ #category : #hooks } -TRFocusRightMost >> on: canvas [ - | encompassingRectangle | - encompassingRectangle := self encompassingRectangleOf: canvas shapes. - canvas camera translateTo: encompassingRectangle rightCenter -] diff --git a/src/Trachel/TRFocusTopLeft.class.st b/src/Trachel/TRFocusTopLeft.class.st deleted file mode 100644 index f0748d56a..000000000 --- a/src/Trachel/TRFocusTopLeft.class.st +++ /dev/null @@ -1,12 +0,0 @@ -Class { - #name : #TRFocusTopLeft, - #superclass : #TRFocusing, - #category : #'Trachel-Core' -} - -{ #category : #hooks } -TRFocusTopLeft >> on: canvas [ - | encompassingRectangle | - encompassingRectangle := self encompassingRectangleOf: canvas shapes. - canvas camera translateTo: encompassingRectangle topLeft -] diff --git a/src/Trachel/TRFocusTopRight.class.st b/src/Trachel/TRFocusTopRight.class.st deleted file mode 100644 index ffb676495..000000000 --- a/src/Trachel/TRFocusTopRight.class.st +++ /dev/null @@ -1,12 +0,0 @@ -Class { - #name : #TRFocusTopRight, - #superclass : #TRFocusing, - #category : #'Trachel-Core' -} - -{ #category : #hooks } -TRFocusTopRight >> on: canvas [ - | encompassingRectangle | - encompassingRectangle := self encompassingRectangleOf: canvas shapes. - canvas camera translateTo: encompassingRectangle topRight -] diff --git a/src/Trachel/TRFocusing.class.st b/src/Trachel/TRFocusing.class.st deleted file mode 100644 index 3299f834c..000000000 --- a/src/Trachel/TRFocusing.class.st +++ /dev/null @@ -1,21 +0,0 @@ -Class { - #name : #TRFocusing, - #superclass : #TRObject, - #category : #'Trachel-Core' -} - -{ #category : #public } -TRFocusing class >> on: canvas [ - ^ self new on: canvas -] - -{ #category : #utility } -TRFocusing >> encompassingRectangleOf: shapes [ - ^ shapes asGroup encompassingRectangle - -] - -{ #category : #hooks } -TRFocusing >> on: canvas [ - self subclassResponsibility -] diff --git a/src/Trachel/TRKeyDown.class.st b/src/Trachel/TRKeyDown.class.st deleted file mode 100644 index 7ea14e74d..000000000 --- a/src/Trachel/TRKeyDown.class.st +++ /dev/null @@ -1,25 +0,0 @@ -" -Event representing a key pressing (but not releasing) - --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -v := RTView new. - -e := RTBox new color: Color blue; size: 50; element. - -v add: e. - -e when: TRKeyDown do: [ :event | - event keyCombination = $r asKeyCombination ifTrue: [ - e color: Color random. - v signalUpdate. - ] -]. - -v open --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -" -Class { - #name : #TRKeyDown, - #superclass : #TRKeyboardEvent, - #category : #'Trachel-Events' -} diff --git a/src/Trachel/TRKeyUp.class.st b/src/Trachel/TRKeyUp.class.st deleted file mode 100644 index 7eb3ff00f..000000000 --- a/src/Trachel/TRKeyUp.class.st +++ /dev/null @@ -1,22 +0,0 @@ -" -Event representing a key release. - -[[[ -c := TRCanvas new. - -c when: TRKeyDown do: [ :event | - self log: '[DOWN]'; logCr: event keyCombination. -]. - -c when: TRKeyUp do: [ :event | - self log: '[UP]'; logCr: event keyCombination. -]. - -c open -]]] -" -Class { - #name : #TRKeyUp, - #superclass : #TRKeyboardEvent, - #category : #'Trachel-Events' -} diff --git a/src/Trachel/TRKeyboardEvent.class.st b/src/Trachel/TRKeyboardEvent.class.st deleted file mode 100644 index efed78536..000000000 --- a/src/Trachel/TRKeyboardEvent.class.st +++ /dev/null @@ -1,45 +0,0 @@ -" -A base class for keyboard events. -" -Class { - #name : #TRKeyboardEvent, - #superclass : #TRUserInputEvent, - #instVars : [ - 'keyValue', - 'keyCombination' - ], - #category : #'Trachel-Events' -} - -{ #category : #comparing } -TRKeyboardEvent >> = anotherKeyDown [ - "Do we really need this method? It has been imported from Roassal1" - (self class == anotherKeyDown) ifFalse: [ ^ false ]. - ^ self keyValue = anotherKeyDown keyValue -] - -{ #category : #initialization } -TRKeyboardEvent >> initialize [ - super initialize. - keyValue := 0 -] - -{ #category : #accessing } -TRKeyboardEvent >> keyCombination [ - ^ keyCombination -] - -{ #category : #accessing } -TRKeyboardEvent >> keyCombination: anObject [ - keyCombination := anObject -] - -{ #category : #accessing } -TRKeyboardEvent >> keyValue [ - ^ keyValue -] - -{ #category : #accessing } -TRKeyboardEvent >> keyValue: anObject [ - keyValue := anObject -] diff --git a/src/Trachel/TRLabelShape.class.st b/src/Trachel/TRLabelShape.class.st deleted file mode 100644 index 587e325c7..000000000 --- a/src/Trachel/TRLabelShape.class.st +++ /dev/null @@ -1,252 +0,0 @@ -Class { - #name : #TRLabelShape, - #superclass : #TRShape, - #instVars : [ - 'text', - 'font', - 'fontSize', - 'fontName', - 'cachedWidth', - 'cachedHeight' - ], - #category : #'Trachel-Shapes' -} - -{ #category : #configuration } -TRLabelShape class >> defaultFamilyFontName [ - ^ TRPlatform current defaultFamilyFontName. -] - -{ #category : #configuration } -TRLabelShape class >> defaultFontSize [ - ^ 12 -] - -{ #category : #configuration } -TRLabelShape class >> familyFontName [ - "Default Family font" - ^ self defaultFamilyFontName -] - -{ #category : #utility } -TRLabelShape class >> getFontForSize: aNumber [ - ^ self getFontNamed: self familyFontName ForSize: aNumber - -] - -{ #category : #utility } -TRLabelShape class >> getFontNamed: aFontName ForSize: aNumber [ - " - self getFontNamed: 'Arial'ForSize: 70 - " - - ^ TRPlatform current fontFamilyName: aFontName pointSize: aNumber -] - -{ #category : #utility } -TRLabelShape class >> widthOfText: aString fontName: aFontName fontSize: aNumber [ - ^ (self getFontNamed: aFontName ForSize: aNumber) widthOfString: aString -] - -{ #category : #utility } -TRLabelShape class >> widthOfText: aString fontSize: aNumber [ - ^ (self getFontForSize: aNumber) widthOfString: aString -] - -{ #category : #visitor } -TRLabelShape >> accept: aVisitor [ - aVisitor visitLabelShape: self -] - -{ #category : #accessing } -TRLabelShape >> ascent [ - ^ font ascent -] - -{ #category : #private } -TRLabelShape >> basicEncompassingRectangle [ - | w h | - w := self textWidth. - h := self textHeight. - ^ ((w / -2) @ (h / -2)) extent: (w @ h) -] - -{ #category : #accessing } -TRLabelShape >> center [ - ^ self position -] - -{ #category : #initialization } -TRLabelShape >> defaultFontSize [ - ^ self class defaultFontSize -] - -{ #category : #accessing } -TRLabelShape >> descent [ - ^ font descent -] - -{ #category : #drawing } -TRLabelShape >> drawOn: athensCanvas [ - "self drawEncompassingRectangleOn: athensCanvas." - athensCanvas pathTransform restoreAfter: [ - "Draw the label centered on the position" - athensCanvas pathTransform - multiplyBy: matrix asFloatTransform; - translateBy: ((self textWidth / -2) @ (self textHeight / 2)) asFloatPoint; - translateBy: (0 @ self descent negated) asFloatPoint. - athensCanvas setFont: font. - athensCanvas setPaint: self themedColor. - athensCanvas drawString: text - ] -] - -{ #category : #accessing } -TRLabelShape >> encompassingRectangle [ - ^ self transformedEncompassingRectangle -] - -{ #category : #accessing } -TRLabelShape >> extent [ - ^ self encompassingRectangle extent -] - -{ #category : #accessing } -TRLabelShape >> extent: newExtent [ - "Labels cannot have their extent changed." -] - -{ #category : #accessing } -TRLabelShape >> font [ - "Return the raw font used by Smalltalk" - ^ font -] - -{ #category : #accessing } -TRLabelShape >> font: aRawFont [ - "Set the raw font to the label. If this method is used, then the font lookup will not happen" - font := aRawFont. - self resetCache. -] - -{ #category : #accessing } -TRLabelShape >> fontName [ - "Return the font name used when drawing" - ^ fontName -] - -{ #category : #accessing } -TRLabelShape >> fontName: aFontName [ - "Set the font name used by the label. You can check the expression - FontChooser new fontListStrings. - to know the different font installed on the system" - fontName := aFontName. - font := self getFontNamed: fontName ForSize: fontSize. - self resetCache -] - -{ #category : #accessing } -TRLabelShape >> fontSize [ - ^ fontSize -] - -{ #category : #accessing } -TRLabelShape >> fontSize: aNumber [ - font := self getFontNamed: fontName ForSize: aNumber. - fontSize := aNumber. - self resetCache -] - -{ #category : #'managing font' } -TRLabelShape >> getFontForSize: aNumber [ - - ^ self getFontNamed: fontName ForSize: aNumber -] - -{ #category : #'managing font' } -TRLabelShape >> getFontNamed: aFontName ForSize: aNumber [ - ^ self class getFontNamed: aFontName ForSize: aNumber -] - -{ #category : #accessing } -TRLabelShape >> height [ - - ^ self encompassingRectangle height -] - -{ #category : #testing } -TRLabelShape >> includesPoint: aPoint [ - ^ self encompassingRectangle containsPoint: aPoint -] - -{ #category : #initialization } -TRLabelShape >> initialize [ - super initialize. - text := 'Trachel label'. - fontName := self class familyFontName. - self fontSize: self defaultFontSize -] - -{ #category : #initialization } -TRLabelShape >> resetCache [ - cachedWidth := nil. - cachedHeight := nil -] - -{ #category : #accessing } -TRLabelShape >> text [ - ^ text -] - -{ #category : #accessing } -TRLabelShape >> text: aText [ - | oldExtent newExtent | - oldExtent := self extent. - text := aText. - self resetCache. - newExtent := self extent. - (newExtent ~= oldExtent) ifTrue: [ - self triggerCallbacksForNewExtent: newExtent oldExtent: oldExtent ]. - -] - -{ #category : #public } -TRLabelShape >> text: aText on: aPosition [ - self text: aText. - self position: aPosition -] - -{ #category : #private } -TRLabelShape >> textHeight [ - "without any transformation" - ^ cachedHeight ifNil: [ [cachedHeight := font height] on: Error do: [ :ex | cachedHeight := 10 ] ] -] - -{ #category : #private } -TRLabelShape >> textWidth [ - "without any transformation" - "font widthOfString: is a really expensive operation, so we cache it" - ^ cachedWidth ifNil: [ [ cachedWidth := font widthOfString: text ] on: Error do: [ :ex | cachedWidth := 5 ] ] -] - -{ #category : #public } -TRLabelShape >> translateLeftTo: aPosition [ - self translateTo: (aPosition - ((self width / -2) @ 0) ) asIntegerPoint -] - -{ #category : #public } -TRLabelShape >> translateRightTo: aPosition [ - self translateTo: (aPosition + ((self width / -2) @ 0) ) asIntegerPoint -] - -{ #category : #accessing } -TRLabelShape >> width [ - - ^ self encompassingRectangle width -] - -{ #category : #'managing font' } -TRLabelShape >> widthOfText: aString fontSize: aNumber [ - ^ font widthOfString: aString - "^ (self getFontForSize: aNumber) widthOfString: aString" -] diff --git a/src/Trachel/TRLineShape.class.st b/src/Trachel/TRLineShape.class.st deleted file mode 100644 index eb70a5af0..000000000 --- a/src/Trachel/TRLineShape.class.st +++ /dev/null @@ -1,149 +0,0 @@ -" -TRLineShape describes a line. Consider the following example: - --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -c := TRCanvas new. - -l := TRLineShape new. -l from: 0 @ 0 to: 50 @ 50. -l color: Color red. - -c addShape: l. - -c --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= - -Another example: --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -c := TRCanvas new. - -radius := 80. - -0 to: 360 by: 10 do: [ :angle | - l := TRLineShape new. - l from: 0 @ 0 to: (radius * (angle degreesToRadians cos)) @ (radius * (angle degreesToRadians sin)). - l color: Color random. - - c addShape: l. -]. - -c --=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -" -Class { - #name : #TRLineShape, - #superclass : #TRAbstractLineShape, - #instVars : [ - 'from', - 'to' - ], - #category : #'Trachel-Shapes' -} - -{ #category : #visitor } -TRLineShape >> accept: aVisitor [ - aVisitor visitLineShape: self -] - -{ #category : #visitor } -TRLineShape >> accept: aVisitor with: decoration [ - aVisitor visitLineShape: self with: decoration -] - -{ #category : #accessing } -TRLineShape >> center [ - ^ (from + to) / 2 -] - -{ #category : #hooks } -TRLineShape >> computePath [ - path := self athensCanvas - createPath: [ :builder | - builder - absolute; - moveTo: from; - lineTo: to ] -] - -{ #category : #drawing } -TRLineShape >> drawOn: athensCanvas [ - - athensCanvas pathTransform restoreAfter: [ - athensCanvas setShape: self path. - (athensCanvas setStrokePaint: self themedColor) width: width. - athensCanvas draw ] -] - -{ #category : #accessing } -TRLineShape >> encompassingRectangle [ - ^ Rectangle encompassing: (Array with: from with: to) -] - -{ #category : #accessing } -TRLineShape >> from [ - "Return a point" - ^ from -] - -{ #category : #accessing } -TRLineShape >> from: aPoint [ - from := aPoint. - self resetPath -] - -{ #category : #public } -TRLineShape >> from: aPoint to: anotherPoint [ - from := aPoint. - to := anotherPoint. - self resetPath - -] - -{ #category : #public } -TRLineShape >> from: aPoint to: anotherPoint color: aColor [ - - self from: aPoint to: anotherPoint. - self strokePaint: aColor. - self color: aColor -] - -{ #category : #testing } -TRLineShape >> includesPoint: aPoint [ - ^ self includesPoint: aPoint delta: 5 -] - -{ #category : #testing } -TRLineShape >> includesPoint: aPoint delta: nbOfPixelsAroundTheLine [ - ^ aPoint onLineFrom: from to: to within: nbOfPixelsAroundTheLine -] - -{ #category : #initialization } -TRLineShape >> initialize [ - super initialize. - from := 0 @ 0. - to := 0 @ 0. - width := 1. -] - -{ #category : #accessing } -TRLineShape >> position [ - ^ ((from + to) / 2) -] - -{ #category : #accessing } -TRLineShape >> to [ - "Return a point" - ^ to -] - -{ #category : #accessing } -TRLineShape >> to: aPoint [ - to := aPoint -] - -{ #category : #actions } -TRLineShape >> translateBy: aPoint [ - from := from + aPoint. - to := to + aPoint. - self resetPath. -] diff --git a/src/Trachel/TRMorph.class.st b/src/Trachel/TRMorph.class.st deleted file mode 100644 index 8d31731a1..000000000 --- a/src/Trachel/TRMorph.class.st +++ /dev/null @@ -1,621 +0,0 @@ -" -A TRMorph is at the interface between Morphic and Trachel. -" -Class { - #name : #TRMorph, - #superclass : #Morph, - #instVars : [ - 'trachelCanvas', - 'surface', - 'eventBeginingDragging', - 'shapeBeingPointed', - 'shouldRefresh', - 'session', - 'isDrawing', - 'shapeUnderDrag', - 'morphDropShape' - ], - #category : #'Trachel-MorphSpecific' -} - -{ #category : #'dropping/grabbing' } -TRMorph >> acceptDroppingMorph: aMorph event: anEvent [ - | trEvent relativePosition | - relativePosition := self relativePositionFor: anEvent. - (trEvent := TRMorphDrop new) - morph: self; - droppedMorph: aMorph; - dropMorphEvent: anEvent; - canvas: trachelCanvas; - position: relativePosition. - morphDropShape announce: trEvent. - morphDropShape := nil -] - -{ #category : #'event handling' } -TRMorph >> announceToEventOverseer: evt [ - self eventOverseer ifNil: [ ^ self ]. - self eventOverseer firedEvent: evt -] - -{ #category : #accessing } -TRMorph >> canvas: aTrachelCanvas [ - "Set the Trachel canvas to the morph. - Set the theme if not set in the Trachel canvas. - And creates the Athens surface" - trachelCanvas := aTrachelCanvas. - surface := AthensCairoSurface extent: (aTrachelCanvas extent) asIntegerPoint -] - -{ #category : #'session management' } -TRMorph >> checkSession [ - session == Smalltalk session - ifFalse: [ - surface := nil. - self createSurface ] -] - -{ #category : #'session management' } -TRMorph >> createSurface [ - surface := AthensCairoSurface extent: self extent asIntegerPoint. - session := Smalltalk session. -] - -{ #category : #drawing } -TRMorph >> drawOn: aCanvas [ - "aCanvas is a FormCanvas" - - | f | - "#drawOn: cannot be reintrant" - isDrawing ifTrue: [ ^ self ]. - isDrawing := true. - self checkSession. - - self recreateSurfaceIfNecessary. - trachelCanvas clearBackground - ifTrue: [ aCanvas fillRectangle: bounds color: trachelCanvas color. ]. - trachelCanvas playAnimations. - - "The drawing has to be done when a change in the shapes occured or when there is an animation." - surface drawDuring: [:cs | - trachelCanvas clearBackground ifTrue: [ surface clear ]. - - "We display the elements that are subject to the camera" - cs pathTransform - translateBy: (self extent / 2) asFloatPoint; - scaleBy: trachelCanvas camera scale asFloat; - translateBy: trachelCanvas camera position negated asFloatPoint. - trachelCanvas shapesDo: [ :trachelShape | - trachelShape isMarkedAsVisible ifTrue: [ trachelShape drawOn: cs ]. - ]. - - "We display the elements that are _NOT_ subject to the camera" - cs pathTransform loadIdentity scaleBy: 1.001. - trachelCanvas fixedShapesDo: [ :trachelShape | - trachelShape isMarkedAsVisible ifTrue: [ trachelShape drawOn: cs ]. - ]. - ]. - "aCanvas translucentImage: surface asForm at: self bounds origin." - "asForm creates a new Form, which is likely to be expensive. This can be cached" - surface hasBeenFreed ifTrue: [ self createSurface ]. - f := surface asForm. -" - aCanvas image: f at: self bounds origin sourceRect: (0 @ 0 extent: surface extent) rule: 34. -" - "surface displayOnMorphicCanvas: aCanvas at: self position." - [ aCanvas image: f at: self bounds origin asIntegerPoint sourceRect: (0 @ 0 extent: surface extent) rule: 34 ] - on: Exception "PrimitiveFailed" - do: [ "Maybe just memory object pinning issue so skipping a single paint cycle" ]. - - isDrawing := false. -] - -{ #category : #drawing } -TRMorph >> drawOnMockCanvas [ - "This method is used to trigger all the rendering in a temporary FormCanvas. This method is useful when a bug happens when rendering. Such situation are difficult to debug to the multi-threading and low level graphical primitive. The method #drawOnMockCanvas helps addressing this. - -Here is an example: -v := RTView new. -es := RTBox elementsOn: (1 to: 10). -v addAll: es. -RTGridLayout on: es. -v canvas buildMorph drawOnMockCanvas - - " - self drawOn: (FormCanvas extent: self extent) -] - -{ #category : #'event-processed' } -TRMorph >> eventOfClass: anEventClass actionClass: anActionClass from: aMorphicEvent [ - | relativePosition trEvent shape | - relativePosition := self relativePositionFor: aMorphicEvent. - shape := self shapeWithAction: anActionClass forPositionInPixels: relativePosition. - - trEvent := anEventClass fromEvent: aMorphicEvent. - trEvent - morph: self; - canvas: trachelCanvas; - shape: shape; - position: relativePosition. - ^ trEvent -] - -{ #category : #'event-processed' } -TRMorph >> eventOfClass: anEventClass actionClass: anActionClass from: aMorphicEvent under: aShape [ - | relativePosition shape | - relativePosition := self relativePositionFor: aMorphicEvent. - shape := self - shapeWithAction: anActionClass - forPositionInPixels: relativePosition - under: aShape. - ^ (anEventClass fromEvent: aMorphicEvent) - morph: self; - canvas: trachelCanvas; - shape: shape; - position: relativePosition; - yourself -] - -{ #category : #'event-processed' } -TRMorph >> eventOfClass: anEventClass from: aMorphicEvent [ - ^ self eventOfClass: anEventClass actionClass: anEventClass from: aMorphicEvent -] - -{ #category : #'event-processed' } -TRMorph >> eventOfClass: anEventClass shape: aShape from: aMorphicEvent [ - | relativePosition trEvent | - relativePosition := self relativePositionFor: aMorphicEvent. - - trEvent := anEventClass fromEvent: aMorphicEvent. - trEvent - morph: self; - canvas: trachelCanvas; - shape: aShape; - position: relativePosition. - ^ trEvent -] - -{ #category : #accessing } -TRMorph >> eventOverseer [ - ^ trachelCanvas eventOverseer -] - -{ #category : #'events-processing' } -TRMorph >> handleKeyUp: anEvent [ - super handleKeyUp: anEvent. - self trKeyUp: anEvent -] - -{ #category : #'event handling' } -TRMorph >> handleKeystroke: anEvent [ - - self trKeyDown: anEvent. -] - -{ #category : #'events-processing' } -TRMorph >> handleMouseMove: anEvent [ - super handleMouseMove: anEvent. - self trMouseMove: anEvent -] - -{ #category : #'events-processing' } -TRMorph >> handleMouseOver: aMorphicEvent [ - | currentElement trEvent | - super handleMouseOver: aMorphicEvent. - aMorphicEvent wasHandled - ifTrue: [ ^ self ]. "Do nothing if it was already handled" - self isDragging - ifTrue: [ ^ self ]. "Do nothing if we are dragging" - shapeBeingPointed ifNil: [ shapeBeingPointed := self shapeForEvent: aMorphicEvent ]. - currentElement := self shapeForEvent: aMorphicEvent. - currentElement == shapeBeingPointed - ifTrue: [ ^ self ]. - trEvent := self eventOfClass: TRMouseLeave from: aMorphicEvent. - trEvent shape: shapeBeingPointed. - shapeBeingPointed announce: trEvent. - shapeBeingPointed := currentElement. - self trMouseEnter: aMorphicEvent -] - -{ #category : #'event handling' } -TRMorph >> handlesKeyboard: evt [ - - ^true -] - -{ #category : #'event handling' } -TRMorph >> handlesMouseDown: anEvent [ - ^ anEvent wasHandled not "not interested if handled" -] - -{ #category : #'event handling' } -TRMorph >> handlesMouseOver: evt [ - ^ true -] - -{ #category : #'events-processing' } -TRMorph >> handlesMouseWheel: evt [ - "Do I want to receive mouseWheel events?." - - ^true -] - -{ #category : #initialization } -TRMorph >> initialize [ - super initialize. - self createSurface. - shouldRefresh := false. - session := Smalltalk session. - isDrawing := false -] - -{ #category : #testing } -TRMorph >> isDragging [ - ^ eventBeginingDragging notNil -] - -{ #category : #accessing } -TRMorph >> isDrawing [ - ^ isDrawing -] - -{ #category : #recategorized } -TRMorph >> layoutChanged [ - "react on morph resize" - - super layoutChanged. - self checkSession. - -] - -{ #category : #'event handling' } -TRMorph >> mouseDown: evt [ - eventBeginingDragging - ifNil: - [ evt hand - waitForClicksOrDrag: self - event: evt - selectors: {#trMouseClick:. #trMouseDoubleClick:. nil. #trMouseDragStart:. } - threshold: 5. - ^ self ]. - - evt anyButtonPressed - ifTrue: [ self trMouseDragging: evt ]. - evt wasHandled: true -] - -{ #category : #'event handling' } -TRMorph >> mouseEnter: evt [ - evt anyButtonPressed - ifFalse: [ self trMouseEnter: evt ]. - evt wasHandled: true -] - -{ #category : #'event-processed' } -TRMorph >> mouseEventOfClass: defaultClass ifLeftButton: leftButtonClass ifRightButton: rightButtonClass from: aMorphicEvent [ - | trEventClass | - trEventClass := defaultClass. - aMorphicEvent redButtonChanged - ifTrue: [ trEventClass := leftButtonClass ]. - aMorphicEvent yellowButtonChanged - ifTrue: [ trEventClass := rightButtonClass ]. - ^ self eventOfClass: trEventClass actionClass: defaultClass from: aMorphicEvent -] - -{ #category : #'event handling' } -TRMorph >> mouseLeave: evt [ - evt anyButtonPressed - ifFalse: [ self trMouseLeave: evt ]. - evt wasHandled: true -] - -{ #category : #'event handling' } -TRMorph >> mouseMove: evt [ - evt anyButtonPressed - ifTrue: [ self trMouseDragging: evt ] - ifFalse: [ self trMouseMove: evt ]. - evt wasHandled: true -] - -{ #category : #'event handling' } -TRMorph >> mouseUp: evt [ - self isDragging - ifTrue: [ self trMouseDragEnd: evt ]. - evt wasHandled: true -] - -{ #category : #'event handling' } -TRMorph >> mouseWheel: evt [ - self trMouseWheel: evt. - evt wasHandled: true -] - -{ #category : #recategorized } -TRMorph >> recreateSurfaceIfNecessary [ - surface - ifNotNil: [ self extent asIntegerPoint ~= surface extent - ifTrue: [ self createSurface. - trachelCanvas extent: self extent ] ] -] - -{ #category : #'events-roassal' } -TRMorph >> relativePositionFor: evt [ - "Return the position within the window" - ^ evt position - self bounds origin - "^ trachelCanvas camera fromPixelToSpace: (evt position - self bounds origin) " -] - -{ #category : #'event-processed' } -TRMorph >> shapeForEvent: anEvent [ - "Return the Trachel shape for the event provided as argument" - ^ self shapeWithActionForPositionInPixels: (self relativePositionFor: anEvent) -] - -{ #category : #accessing } -TRMorph >> shapeForPositionInPixels: point [ - "Return the shape located that contains point" - ^ trachelCanvas shapeForPositionInPixels: point -] - -{ #category : #accessing } -TRMorph >> shapeWithAction: eventClass forPositionInPixels: position [ - "Return the shape with event handler located that contains point" - ^ trachelCanvas shapeWithAction: eventClass forPositionInPixels: position -] - -{ #category : #accessing } -TRMorph >> shapeWithAction: eventClass forPositionInPixels: position under: aShape [ - "Return the shape with event handler located that contains point" - ^ trachelCanvas shapeWithAction: eventClass forPositionInPixels: position under: aShape -] - -{ #category : #accessing } -TRMorph >> shapeWithActionForPositionInPixels: point [ - "Return the shape with event handler located that contains point" - ^ trachelCanvas shapeWithActionForPositionInPixels: point -] - -{ #category : #signalling } -TRMorph >> signalUpdate [ - self changed -] - -{ #category : #stepping } -TRMorph >> step [ - self wantsSteps ifFalse: [ ^ self ]. - self changed -] - -{ #category : #stepping } -TRMorph >> stepTime [ - "Answer the desired time between steps in milliseconds. This default implementation requests that the 'step' method be called once every second." - - ^ 20 -] - -{ #category : #accessing } -TRMorph >> surface [ - ^ surface -] - -{ #category : #'events-processing' } -TRMorph >> takesKeyboardFocus [ - "Answer whether the receiver can normally take keyboard focus." - - ^ true -] - -{ #category : #'event-processed' } -TRMorph >> trKeyDown: aMorphicEvent [ - | trEvent | - (aMorphicEvent commandKeyPressed and: [ aMorphicEvent keyCharacter = $w ]) - ifTrue: [ self owner delete ]. - - trEvent := self eventOfClass: TRKeyDown from: aMorphicEvent. - trEvent - position: (trachelCanvas camera fromPixelToSpace: trEvent position); - keyValue: aMorphicEvent keyValue; - keyCombination: aMorphicEvent asKeyCombination. - trEvent shape announce: trEvent -] - -{ #category : #'event-processed' } -TRMorph >> trKeyUp: aMorphicEvent [ - | trEvent | - trEvent := self eventOfClass: TRKeyUp from: aMorphicEvent. - trEvent - position: (trachelCanvas camera fromPixelToSpace: trEvent position); - keyValue: aMorphicEvent keyValue; - keyCombination: aMorphicEvent asKeyCombination. - trEvent shape announce: trEvent -] - -{ #category : #'event-processed' } -TRMorph >> trMouseClick: aMorphicEvent [ - | trEvent | - trEvent := self - mouseEventOfClass: TRMouseClick - ifLeftButton: TRMouseLeftClick - ifRightButton: TRMouseRightClick - from: aMorphicEvent. - trEvent position: (trachelCanvas camera fromPixelToSpace: trEvent position). - trEvent shape announce: trEvent. - self announceToEventOverseer: trEvent -] - -{ #category : #'event-processed' } -TRMorph >> trMouseDoubleClick: aMorphicEvent [ - | trEvent | - trEvent := self - mouseEventOfClass: TRMouseDoubleClick - ifLeftButton: TRMouseDoubleLeftClick - ifRightButton: TRMouseDoubleRightClick - from: aMorphicEvent. - trEvent position: (trachelCanvas camera fromPixelToSpace: trEvent position). - trEvent shape announce: trEvent. - self announceToEventOverseer: trEvent -] - -{ #category : #'event-processed' } -TRMorph >> trMouseDragEnd: aMorphicEvent [ - | trEvent dropEvent | - trEvent := self eventOfClass: TRMouseDragEnd from: aMorphicEvent. - trEvent shape: shapeBeingPointed. - shapeBeingPointed announce: trEvent. - self announceToEventOverseer: trEvent. - - (shapeBeingPointed isKindOf: TRCanvas) ifFalse: [ - dropEvent := self eventOfClass: TRMouseDragDrop shape: shapeUnderDrag from: aMorphicEvent. - dropEvent draggedShape: shapeBeingPointed. - shapeUnderDrag announce: dropEvent. - self announceToEventOverseer: dropEvent. - ]. - - eventBeginingDragging := nil. - shapeBeingPointed := nil. - shapeUnderDrag := nil. -] - -{ #category : #'event-processed' } -TRMorph >> trMouseDragStart: aMorphicEvent [ - | trEvent trEventClass trUnderDragEvent | - eventBeginingDragging := aMorphicEvent copy. - - trEventClass := TRMouseDragStart. - aMorphicEvent redButtonChanged - ifTrue: [ trEventClass := TRMouseLeftDragStart ]. - aMorphicEvent yellowButtonChanged - ifTrue: [ trEventClass := TRMouseRightDragStart ]. - aMorphicEvent blueButtonChanged - ifTrue: [ trEventClass := TRMouseMiddleDragStart ]. - trEvent := self eventOfClass: trEventClass actionClass: TRMouseDragging from: aMorphicEvent. - - shapeBeingPointed := trEvent shape. - shapeBeingPointed announce: trEvent. - self announceToEventOverseer: trEvent. - - (shapeBeingPointed isKindOf: TRCanvas) - ifTrue: [ ^self ]. - - trUnderDragEvent := self eventOfClass: TRMouseAbstractDrop actionClass: TRMouseAbstractDrop from: aMorphicEvent under: shapeBeingPointed. - - shapeUnderDrag := trUnderDragEvent shape - - -] - -{ #category : #'event-processed' } -TRMorph >> trMouseDragging: aMorphicEvent [ - | trEvent step underShape trUnderDragEvent overEvent | - eventBeginingDragging ifNil: [ ^ self ]. - step := aMorphicEvent position - eventBeginingDragging position. - - trEvent := self eventOfClass: TRMouseDragging from: aMorphicEvent. - trEvent step: step. - - shapeBeingPointed ifNil: [ shapeBeingPointed := trEvent shape ]. - "If the element was removed during the drag then cancel the event" - shapeBeingPointed canvas - ifNil: [ eventBeginingDragging := nil. - shapeBeingPointed := nil. - ^ self ]. - - trEvent shape: shapeBeingPointed. - shapeBeingPointed announce: trEvent. - self announceToEventOverseer: trEvent. - eventBeginingDragging := aMorphicEvent copy. - - (shapeBeingPointed isKindOf: TRCanvas) ifTrue: [ ^self ]. - - trUnderDragEvent := self eventOfClass: TRMouseAbstractDrop actionClass: TRMouseAbstractDrop from: aMorphicEvent under: shapeBeingPointed. - trUnderDragEvent draggedShape: shapeBeingPointed. - underShape := trUnderDragEvent shape. - - underShape = shapeUnderDrag ifFalse: [ |leaveEvent enterEvent| - leaveEvent := self eventOfClass: TRMouseDragLeave shape: shapeUnderDrag from: aMorphicEvent. - leaveEvent draggedShape: shapeBeingPointed. - shapeUnderDrag announce: leaveEvent. - self announceToEventOverseer: leaveEvent. - enterEvent := self eventOfClass: TRMouseDragEnter shape: underShape from: aMorphicEvent. - enterEvent draggedShape: shapeBeingPointed. - underShape announce: enterEvent. - self announceToEventOverseer: enterEvent. - shapeUnderDrag := underShape. - ]. - - overEvent := self eventOfClass: TRMouseDragOver shape: shapeUnderDrag from: aMorphicEvent. - overEvent draggedShape: shapeBeingPointed. - shapeUnderDrag announce: overEvent. - self announceToEventOverseer: overEvent. -] - -{ #category : #'event-processed' } -TRMorph >> trMouseEnter: aMorphicEvent [ - | trEvent | - trEvent := self eventOfClass: TRMouseEnter from: aMorphicEvent. - trEvent shape announce: trEvent. - self announceToEventOverseer: trEvent -] - -{ #category : #'event-processed' } -TRMorph >> trMouseLeave: aMorphicEvent [ - | trEvent | - trEvent := self eventOfClass: TRMouseLeave from: aMorphicEvent. - trEvent shape announce: trEvent. - self announceToEventOverseer: trEvent -] - -{ #category : #'event-processed' } -TRMorph >> trMouseMove: aMorphicEvent [ - | trEvent | - trEvent := self eventOfClass: TRMouseMove from: aMorphicEvent. - trEvent position: (trachelCanvas camera fromPixelToSpace: trEvent position). - trEvent shape announce: trEvent. - self announceToEventOverseer: trEvent -] - -{ #category : #'event-processed' } -TRMorph >> trMouseWheel: aMorphicEvent [ - | trEvent | - trEvent := self eventOfClass: TRMouseWheelEvent from: aMorphicEvent. - trEvent - direction: aMorphicEvent direction; - position: (trachelCanvas camera fromPixelToSpace: trEvent position). - trEvent shape announce: trEvent. - self announceToEventOverseer: trEvent -] - -{ #category : #accessing } -TRMorph >> trachelCanvas [ - ^ trachelCanvas -] - -{ #category : #'dropping/grabbing' } -TRMorph >> wantsDroppedMorph: aMorph event: aMorphicEvent [ - | shapes trEvent relativePosition wasHandled | - relativePosition := self relativePositionFor: aMorphicEvent. - shapes := trachelCanvas - allShapesWithAction: TRMorphWantsDrop - forPositionInPixels: relativePosition. - wasHandled := false. - (trEvent := TRMorphWantsDrop new) - morph: self; - droppedMorph: aMorph; - dropMorphEvent: aMorphicEvent; - canvas: trachelCanvas; - position: relativePosition; - whenHandled: [ :dropShape | - wasHandled := true. - morphDropShape := dropShape. - ^ true ]. - shapes - do: [ :each | - trEvent shape: each. - each announce: trEvent ]. - ^ false -] - -{ #category : #testing } -TRMorph >> wantsSteps [ - ^ trachelCanvas hasAnimation -] diff --git a/src/Trachel/TRMorphDrop.class.st b/src/Trachel/TRMorphDrop.class.st deleted file mode 100644 index 1c3751c66..000000000 --- a/src/Trachel/TRMorphDrop.class.st +++ /dev/null @@ -1,5 +0,0 @@ -Class { - #name : #TRMorphDrop, - #superclass : #TRMorphDropEvent, - #category : #'Trachel-Events' -} diff --git a/src/Trachel/TRMorphDropEvent.class.st b/src/Trachel/TRMorphDropEvent.class.st deleted file mode 100644 index fa797db6f..000000000 --- a/src/Trachel/TRMorphDropEvent.class.st +++ /dev/null @@ -1,29 +0,0 @@ -Class { - #name : #TRMorphDropEvent, - #superclass : #TRShapeEvent, - #instVars : [ - 'droppedMorph', - 'dropMorphEvent' - ], - #category : #'Trachel-Events' -} - -{ #category : #accessing } -TRMorphDropEvent >> dropMorphEvent [ - ^ dropMorphEvent -] - -{ #category : #accessing } -TRMorphDropEvent >> dropMorphEvent: anObject [ - dropMorphEvent := anObject -] - -{ #category : #accessing } -TRMorphDropEvent >> droppedMorph [ - ^ droppedMorph -] - -{ #category : #accessing } -TRMorphDropEvent >> droppedMorph: anObject [ - droppedMorph := anObject -] diff --git a/src/Trachel/TRMorphTest.class.st b/src/Trachel/TRMorphTest.class.st deleted file mode 100644 index e84428727..000000000 --- a/src/Trachel/TRMorphTest.class.st +++ /dev/null @@ -1,135 +0,0 @@ -Class { - #name : #TRMorphTest, - #superclass : #TRTest, - #category : #'Trachel-MorphSpecific' -} - -{ #category : #forwarding } -TRMorphTest >> testForward [ - - | s1 s2 c morph | - s1 := TRBoxShape new size: 10. - s2 := TREllipseShape new size: 10. - c := TRCanvas new. - - c addShape: s1. - c addShape: s2. - - morph := TRMorph new - canvas: c; - extent: c extent. - - self assert: (c shapeForPosition: (0 @ 0)) == s2. - -] - -{ #category : #forwarding } -TRMorphTest >> testForward2 [ - - | s1 s2 c morph | - s1 := TRBoxShape new size: 10. - s2 := TREllipseShape new size: 10. - c := TRCanvas new. - - c addShape: s1. - c addShape: s2. - - s1 when: TRMouseClick do: [ :e | ]. - - morph := TRMorph new - canvas: c; - extent: c extent. - - self assert: (c shapeWithActionForPosition: (0 @ 0)) == s1. - -] - -{ #category : #forwarding } -TRMorphTest >> testForward3 [ - - | s1 s2 c morph | - s1 := TRBoxShape new size: 10. - s2 := TREllipseShape new size: 10. - c := TRCanvas new. - - c addShape: s1. - c addShape: s2. - - morph := TRMorph new - canvas: c; - extent: c extent. - - self assert: (c shapeWithActionForPosition: (0 @ 0)) == c. - -] - -{ #category : #forwarding } -TRMorphTest >> testForward4 [ - - | s c morph | - s := TRBoxShape new size: 10. - c := TRCanvas new. - c when: TRMouseMove do: [ :e | ]. - c addShape: s. - - morph := TRMorph new - canvas: c; - extent: c extent. - - self assert: (c shapeWithActionForPosition: (0 @ 0)) == c. - -] - -{ #category : #event } -TRMorphTest >> testHandleEventClass [ - - | t | - t := TRBoxShape new. - self deny: (t announcer handleEventClass: TRMouseClick). - t when: TRMouseClick do: [ :evt | ]. - self assert: (t announcer handleEventClass: TRMouseClick). - self deny: (t announcer handleEventClass: TRMouseClick new). -] - -{ #category : #event } -TRMorphTest >> testHandleEventClass02 [ - - | t | - t := TRBoxShape new. - self deny: (t announcer handleEventClass: TRMouseClick). - t when: TRMouseClick do: [ :evt | ]. - self assert: (t announcer handleEventClass: TRMouseClick superclass). - self deny: (t announcer handleEventClass: TRMouseClick new). -] - -{ #category : #theme } -TRMorphTest >> testTheme01 [ - - | m c originalTheme | - c := TRCanvas new. - originalTheme := c theme. - self assert: originalTheme notNil. - - m := TRMorph new. - m canvas: c. - self assert: c theme notNil. - - "Make sure we do not compute it twice" - self assert: c theme == c theme. - - self assert: c theme == originalTheme -] - -{ #category : #theme } -TRMorphTest >> testTheme02SettingTheme [ - | m c | - c := TRCanvas new. - c theme: TRDarkTheme new. - - m := TRMorph new. - m canvas: c. - self assert: c theme notNil. - - "Make sure we do not compute it twice" - self assert: c theme == c theme. -] diff --git a/src/Trachel/TRMorphWantsDrop.class.st b/src/Trachel/TRMorphWantsDrop.class.st deleted file mode 100644 index 7e5f1d5e4..000000000 --- a/src/Trachel/TRMorphWantsDrop.class.st +++ /dev/null @@ -1,19 +0,0 @@ -Class { - #name : #TRMorphWantsDrop, - #superclass : #TRMorphDropEvent, - #instVars : [ - 'whenHandledBlock' - ], - #category : #'Trachel-Events' -} - -{ #category : #events } -TRMorphWantsDrop >> handledBy: anElement [ - whenHandledBlock value: anElement -] - -{ #category : #events } -TRMorphWantsDrop >> whenHandled: aBlock [ - "For TRMorph internal tracking of who actually handled the morph" - whenHandledBlock := aBlock -] diff --git a/src/Trachel/TRMorphWidgetFactory.class.st b/src/Trachel/TRMorphWidgetFactory.class.st deleted file mode 100644 index 5599f9135..000000000 --- a/src/Trachel/TRMorphWidgetFactory.class.st +++ /dev/null @@ -1,23 +0,0 @@ -Class { - #name : #TRMorphWidgetFactory, - #superclass : #TRObject, - #category : #'Trachel-Core' -} - -{ #category : #public } -TRMorphWidgetFactory class >> menuForAssociations: associations on: element [ - "associations is a list of association following: #aSymbol -> [ :model | ... ] - The block contains in the association is evaluated with the model provided by the element." - - | v | - v := TRPlatform current menuMorphClass new. - associations do: [ :assoc | - v - add: assoc key - target: assoc value - selector: #cull: - argument: element - ]. - - v popUpInWorld. -] diff --git a/src/Trachel/TRMouseAbstractDrop.class.st b/src/Trachel/TRMouseAbstractDrop.class.st deleted file mode 100644 index eb8751319..000000000 --- a/src/Trachel/TRMouseAbstractDrop.class.st +++ /dev/null @@ -1,26 +0,0 @@ -" -I am a base class for (drag and) drop events attached to the drop target elements. -" -Class { - #name : #TRMouseAbstractDrop, - #superclass : #TRAbstractMouseEvent, - #instVars : [ - 'draggedShape' - ], - #category : #'Trachel-Events' -} - -{ #category : #accessing } -TRMouseAbstractDrop >> draggedElement [ - ^ draggedShape element -] - -{ #category : #accessing } -TRMouseAbstractDrop >> draggedShape [ - ^ draggedShape -] - -{ #category : #accessing } -TRMouseAbstractDrop >> draggedShape: aShape [ - draggedShape := aShape -] diff --git a/src/Trachel/TRMouseClick.class.st b/src/Trachel/TRMouseClick.class.st deleted file mode 100644 index a1077115e..000000000 --- a/src/Trachel/TRMouseClick.class.st +++ /dev/null @@ -1,23 +0,0 @@ -" -A ROMouseClick is xxxxxxxxx. - -Instance Variables - commandKeyPressed: - controlKeyPressed: - shiftKeyPressed: - -commandKeyPressed - - xxxxx - -controlKeyPressed - - xxxxx - -shiftKeyPressed - - xxxxx - -" -Class { - #name : #TRMouseClick, - #superclass : #TRAbstractMouseClick, - #category : #'Trachel-Events' -} diff --git a/src/Trachel/TRMouseDoubleClick.class.st b/src/Trachel/TRMouseDoubleClick.class.st deleted file mode 100644 index 772024552..000000000 --- a/src/Trachel/TRMouseDoubleClick.class.st +++ /dev/null @@ -1,5 +0,0 @@ -Class { - #name : #TRMouseDoubleClick, - #superclass : #TRAbstractMouseClick, - #category : #'Trachel-Events' -} diff --git a/src/Trachel/TRMouseDoubleLeftClick.class.st b/src/Trachel/TRMouseDoubleLeftClick.class.st deleted file mode 100644 index 82da648a7..000000000 --- a/src/Trachel/TRMouseDoubleLeftClick.class.st +++ /dev/null @@ -1,5 +0,0 @@ -Class { - #name : #TRMouseDoubleLeftClick, - #superclass : #TRMouseDoubleClick, - #category : #'Trachel-Events' -} diff --git a/src/Trachel/TRMouseDoubleRightClick.class.st b/src/Trachel/TRMouseDoubleRightClick.class.st deleted file mode 100644 index ef0cfc283..000000000 --- a/src/Trachel/TRMouseDoubleRightClick.class.st +++ /dev/null @@ -1,5 +0,0 @@ -Class { - #name : #TRMouseDoubleRightClick, - #superclass : #TRMouseDoubleClick, - #category : #'Trachel-Events' -} diff --git a/src/Trachel/TRMouseDragDrop.class.st b/src/Trachel/TRMouseDragDrop.class.st deleted file mode 100644 index 1309ba947..000000000 --- a/src/Trachel/TRMouseDragDrop.class.st +++ /dev/null @@ -1,9 +0,0 @@ -" -When: at the end of DragDrop event -Target: drop target element (element underneath the dragged one) -" -Class { - #name : #TRMouseDragDrop, - #superclass : #TRMouseAbstractDrop, - #category : #'Trachel-Events' -} diff --git a/src/Trachel/TRMouseDragEnd.class.st b/src/Trachel/TRMouseDragEnd.class.st deleted file mode 100644 index 8a3403154..000000000 --- a/src/Trachel/TRMouseDragEnd.class.st +++ /dev/null @@ -1,9 +0,0 @@ -" -When: at the end of DragDrop event -Target: dragged element -" -Class { - #name : #TRMouseDragEnd, - #superclass : #TRAbstractMouseEvent, - #category : #'Trachel-Events' -} diff --git a/src/Trachel/TRMouseDragEnter.class.st b/src/Trachel/TRMouseDragEnter.class.st deleted file mode 100644 index aa01eacf5..000000000 --- a/src/Trachel/TRMouseDragEnter.class.st +++ /dev/null @@ -1,9 +0,0 @@ -" -When: when the dragged element entered a valid drop target element -Target: drop target element (element underneath the dragged one) -" -Class { - #name : #TRMouseDragEnter, - #superclass : #TRMouseAbstractDrop, - #category : #'Trachel-Events' -} diff --git a/src/Trachel/TRMouseDragLeave.class.st b/src/Trachel/TRMouseDragLeave.class.st deleted file mode 100644 index ab2204e24..000000000 --- a/src/Trachel/TRMouseDragLeave.class.st +++ /dev/null @@ -1,9 +0,0 @@ -" -When: when the dragged element left a valid drop target element -Target: drop target element (element underneath the dragged one) -" -Class { - #name : #TRMouseDragLeave, - #superclass : #TRMouseAbstractDrop, - #category : #'Trachel-Events' -} diff --git a/src/Trachel/TRMouseDragOver.class.st b/src/Trachel/TRMouseDragOver.class.st deleted file mode 100644 index efb69519d..000000000 --- a/src/Trachel/TRMouseDragOver.class.st +++ /dev/null @@ -1,9 +0,0 @@ -" -When: when the dragged element is over a valid drop target element -Target: drop target element (element underneath the dragged one) -" -Class { - #name : #TRMouseDragOver, - #superclass : #TRMouseAbstractDrop, - #category : #'Trachel-Events' -} diff --git a/src/Trachel/TRMouseDragStart.class.st b/src/Trachel/TRMouseDragStart.class.st deleted file mode 100644 index bdd81339a..000000000 --- a/src/Trachel/TRMouseDragStart.class.st +++ /dev/null @@ -1,9 +0,0 @@ -" -When: when a valid draggable element is grabbed -Target: dragged element -" -Class { - #name : #TRMouseDragStart, - #superclass : #TRAbstractMouseEvent, - #category : #'Trachel-Events' -} diff --git a/src/Trachel/TRMouseDragging.class.st b/src/Trachel/TRMouseDragging.class.st deleted file mode 100644 index f7225211b..000000000 --- a/src/Trachel/TRMouseDragging.class.st +++ /dev/null @@ -1,40 +0,0 @@ -" -When: during dragging of the element -Target: dragged element -" -Class { - #name : #TRMouseDragging, - #superclass : #TRAbstractMouseEvent, - #instVars : [ - 'step' - ], - #category : #'Trachel-Events' -} - -{ #category : #public } -TRMouseDragging class >> shape: aShape step: aStepAsPoint [ - ^ (self shape: aShape) - step: aStepAsPoint; - yourself -] - -{ #category : #public } -TRMouseDragging class >> step: aStepAsPoint [ - ^ self new step: aStepAsPoint -] - -{ #category : #initialization } -TRMouseDragging >> initialize [ - super initialize. - step := 0 @ 0. -] - -{ #category : #accessing } -TRMouseDragging >> step [ - ^ step -] - -{ #category : #accessing } -TRMouseDragging >> step: aPoint [ - step := aPoint -] diff --git a/src/Trachel/TRMouseDraggingTest.class.st b/src/Trachel/TRMouseDraggingTest.class.st deleted file mode 100644 index 79cea72db..000000000 --- a/src/Trachel/TRMouseDraggingTest.class.st +++ /dev/null @@ -1,21 +0,0 @@ -Class { - #name : #TRMouseDraggingTest, - #superclass : #TRTest, - #category : #'Trachel-Tests' -} - -{ #category : #tests } -TRMouseDraggingTest >> testPositionFromCamera [ - - | evt | - evt := TRMouseDragging new. - self assert: (evt positionFromCamera closeTo: -250 @ -250) -] - -{ #category : #tests } -TRMouseDraggingTest >> testPositionOnDefault [ - - | evt | - evt := TRMouseDragging new. - self assert: evt position equals: 0 @ 0 -] diff --git a/src/Trachel/TRMouseEnter.class.st b/src/Trachel/TRMouseEnter.class.st deleted file mode 100644 index bac67a4c5..000000000 --- a/src/Trachel/TRMouseEnter.class.st +++ /dev/null @@ -1,9 +0,0 @@ -" -When: when a mouse cursor entered an element -Target: entered element -" -Class { - #name : #TRMouseEnter, - #superclass : #TRAbstractMouseEvent, - #category : #'Trachel-Events' -} diff --git a/src/Trachel/TRMouseLeave.class.st b/src/Trachel/TRMouseLeave.class.st deleted file mode 100644 index 2ca8750e7..000000000 --- a/src/Trachel/TRMouseLeave.class.st +++ /dev/null @@ -1,9 +0,0 @@ -" -When: when a mouse cursor left an element -Target: entered element -" -Class { - #name : #TRMouseLeave, - #superclass : #TRAbstractMouseEvent, - #category : #'Trachel-Events' -} diff --git a/src/Trachel/TRMouseLeftClick.class.st b/src/Trachel/TRMouseLeftClick.class.st deleted file mode 100644 index 85d48fe85..000000000 --- a/src/Trachel/TRMouseLeftClick.class.st +++ /dev/null @@ -1,5 +0,0 @@ -Class { - #name : #TRMouseLeftClick, - #superclass : #TRMouseClick, - #category : #'Trachel-Events' -} diff --git a/src/Trachel/TRMouseLeftDragStart.class.st b/src/Trachel/TRMouseLeftDragStart.class.st deleted file mode 100644 index 5b165f2f7..000000000 --- a/src/Trachel/TRMouseLeftDragStart.class.st +++ /dev/null @@ -1,5 +0,0 @@ -Class { - #name : #TRMouseLeftDragStart, - #superclass : #TRMouseDragStart, - #category : #'Trachel-Events' -} diff --git a/src/Trachel/TRMouseMiddleDragStart.class.st b/src/Trachel/TRMouseMiddleDragStart.class.st deleted file mode 100644 index ae83a7dbd..000000000 --- a/src/Trachel/TRMouseMiddleDragStart.class.st +++ /dev/null @@ -1,5 +0,0 @@ -Class { - #name : #TRMouseMiddleDragStart, - #superclass : #TRMouseDragStart, - #category : #'Trachel-Events' -} diff --git a/src/Trachel/TRMouseMove.class.st b/src/Trachel/TRMouseMove.class.st deleted file mode 100644 index c7a3cf29e..000000000 --- a/src/Trachel/TRMouseMove.class.st +++ /dev/null @@ -1,5 +0,0 @@ -Class { - #name : #TRMouseMove, - #superclass : #TRAbstractMouseEvent, - #category : #'Trachel-Events' -} diff --git a/src/Trachel/TRMouseRightClick.class.st b/src/Trachel/TRMouseRightClick.class.st deleted file mode 100644 index d508adddb..000000000 --- a/src/Trachel/TRMouseRightClick.class.st +++ /dev/null @@ -1,5 +0,0 @@ -Class { - #name : #TRMouseRightClick, - #superclass : #TRMouseClick, - #category : #'Trachel-Events' -} diff --git a/src/Trachel/TRMouseRightDragStart.class.st b/src/Trachel/TRMouseRightDragStart.class.st deleted file mode 100644 index e07da0e2e..000000000 --- a/src/Trachel/TRMouseRightDragStart.class.st +++ /dev/null @@ -1,5 +0,0 @@ -Class { - #name : #TRMouseRightDragStart, - #superclass : #TRMouseDragStart, - #category : #'Trachel-Events' -} diff --git a/src/Trachel/TRMouseWheelEvent.class.st b/src/Trachel/TRMouseWheelEvent.class.st deleted file mode 100644 index ca531a506..000000000 --- a/src/Trachel/TRMouseWheelEvent.class.st +++ /dev/null @@ -1,50 +0,0 @@ -" -I'm a mouse wheel scrolling event. - -" -Class { - #name : #TRMouseWheelEvent, - #superclass : #TRAbstractMouseEvent, - #instVars : [ - 'direction' - ], - #category : #'Trachel-Events' -} - -{ #category : #'instance creation' } -TRMouseWheelEvent class >> fromDirection: aDirection position: aPoint [ - ^ self new - position: aPoint; - direction: aDirection; - yourself -] - -{ #category : #accessing } -TRMouseWheelEvent >> direction [ - ^ direction -] - -{ #category : #accessing } -TRMouseWheelEvent >> direction: anObject [ - direction := anObject -] - -{ #category : #testing } -TRMouseWheelEvent >> isDown [ - ^ direction = Character arrowDown -] - -{ #category : #testing } -TRMouseWheelEvent >> isLeft [ - ^ direction = Character arrowLeft -] - -{ #category : #testing } -TRMouseWheelEvent >> isRight [ - ^ direction = Character arrowRight -] - -{ #category : #testing } -TRMouseWheelEvent >> isUp [ - ^ direction = Character arrowUp -] diff --git a/src/Trachel/TRNoDecoratorShape.class.st b/src/Trachel/TRNoDecoratorShape.class.st deleted file mode 100644 index f32d44427..000000000 --- a/src/Trachel/TRNoDecoratorShape.class.st +++ /dev/null @@ -1,75 +0,0 @@ -Class { - #name : #TRNoDecoratorShape, - #superclass : #TRAbstractLineDecoratorShape, - #category : #'Trachel-ShapesForArrow' -} - -{ #category : #visitor } -TRNoDecoratorShape >> accept: aVisitor [ - aVisitor visitNoShape: self -] - -{ #category : #actions } -TRNoDecoratorShape >> addedIn: aCanvas [ - "Do nothing" -] - -{ #category : #accessing } -TRNoDecoratorShape >> center [ - 0@0 -] - -{ #category : #hooks } -TRNoDecoratorShape >> computePath [ - "do nothing" -] - -{ #category : #drawing } -TRNoDecoratorShape >> drawOn: athensCanvas [ - "do nothing" -] - -{ #category : #accessing } -TRNoDecoratorShape >> encompassingRectangle [ - ^ 0@0 corner: 0@0 -] - -{ #category : #accessing } -TRNoDecoratorShape >> height [ - ^ 0 -] - -{ #category : #accessing } -TRNoDecoratorShape >> position [ - ^ 0 @ 0 -] - -{ #category : #actions } -TRNoDecoratorShape >> pushBack [ - "do nothing" -] - -{ #category : #actions } -TRNoDecoratorShape >> pushFront [ - "do nothing" -] - -{ #category : #actions } -TRNoDecoratorShape >> setAsFixed [ - "Not much to do" -] - -{ #category : #actions } -TRNoDecoratorShape >> translateBy: aPoint [ - "do nothing" -] - -{ #category : #actions } -TRNoDecoratorShape >> translateTo: aPoint [ - "do nothing" -] - -{ #category : #accessing } -TRNoDecoratorShape >> width [ - ^ 0 -] diff --git a/src/Trachel/TRNoShape.class.st b/src/Trachel/TRNoShape.class.st deleted file mode 100644 index 0ddd99832..000000000 --- a/src/Trachel/TRNoShape.class.st +++ /dev/null @@ -1,77 +0,0 @@ -" -This implements the Null Pattern for a Trachel shape. -" -Class { - #name : #TRNoShape, - #superclass : #TRShape, - #classInstVars : [ - 'instance' - ], - #category : #'Trachel-Shapes' -} - -{ #category : #accessing } -TRNoShape class >> instance [ - instance ifNil: [ instance := self new ]. - ^ instance -] - -{ #category : #visitor } -TRNoShape >> accept: aVisitor [ - aVisitor visitNoShape: self -] - -{ #category : #actions } -TRNoShape >> addedIn: aCanvas [ - "Do nothing" -] - -{ #category : #accessing } -TRNoShape >> center [ - 0@0 -] - -{ #category : #hooks } -TRNoShape >> computePath [ - "do nothing" -] - -{ #category : #drawing } -TRNoShape >> drawOn: athensCanvas [ - "do nothing" -] - -{ #category : #accessing } -TRNoShape >> encompassingRectangle [ - ^ 0@0 corner: 0@0 -] - -{ #category : #accessing } -TRNoShape >> height [ - ^ 0 -] - -{ #category : #accessing } -TRNoShape >> position [ - ^ 0 @ 0 -] - -{ #category : #actions } -TRNoShape >> setAsFixed [ - "Not much to do" -] - -{ #category : #actions } -TRNoShape >> translateBy: aPoint [ - "do nothing" -] - -{ #category : #actions } -TRNoShape >> translateTo: aPoint [ - "do nothing" -] - -{ #category : #accessing } -TRNoShape >> width [ - ^ 0 -] diff --git a/src/Trachel/TRObject.class.st b/src/Trachel/TRObject.class.st deleted file mode 100644 index 9c21ab6c5..000000000 --- a/src/Trachel/TRObject.class.st +++ /dev/null @@ -1,5 +0,0 @@ -Class { - #name : #TRObject, - #superclass : #Object, - #category : #'Trachel-Core' -} diff --git a/src/Trachel/TRPharoPlatform.class.st b/src/Trachel/TRPharoPlatform.class.st deleted file mode 100644 index 4986d112f..000000000 --- a/src/Trachel/TRPharoPlatform.class.st +++ /dev/null @@ -1,659 +0,0 @@ -" -I am a class for pharo platform -" -Class { - #name : #TRPharoPlatform, - #superclass : #TRPlatform, - #category : #'Trachel-MorphSpecific' -} - -{ #category : #testing } -TRPharoPlatform class >> isActivePlatform [ - ^ true. - "^ SmalltalkImage current vm isPharoVM". -] - -{ #category : #'accessing-classes' } -TRPharoPlatform >> affineTransformClass [ - ^ AthensAffineTransform -] - -{ #category : #public } -TRPharoPlatform >> browseClass: aClass [ - ^ Nautilus openOnClass: aClass - -] - -{ #category : #public } -TRPharoPlatform >> colorFormClass [ - ^ ColorForm -] - -{ #category : #'drawing - helpers' } -TRPharoPlatform >> computeArcPathFor: aShape [ - | i e aAngle bAngle aSin aCos bSin bCos | - aShape canvas ifNil: [ ^ nil ]. - aAngle:=aShape alphaAngle value degreesToRadians. - bAngle:=aShape betaAngle value degreesToRadians. - i := aShape innerRadius value. - e := aShape externalRadius value. - aCos := aAngle cos. - aSin := aAngle sin negated. - bCos := bAngle cos. - bSin := bAngle sin negated. - ^ aShape athensCanvas - createPath: [ :builder | - builder - absolute; - moveTo: ((i * (bCos)) @ (i * (bSin))); - arcTo: ((i * (aCos)) @ (i * (aSin))) angle: bAngle - aAngle cw: true; - ccwArcTo: ((e * (aCos)) @ (e * (aSin))) angle: 0; - ccwArcTo: ((e * (bCos)) @ (e * (bSin))) angle: bAngle - aAngle; - ccwArcTo: ((i * (bCos)) @ (i * (bSin))) angle: 0 ] -] - -{ #category : #'drawing - helpers' } -TRPharoPlatform >> computeCircleHeadPathFor: shape [ - | vector r unit radius center endPoint | - vector := shape to - shape from. - r := vector r. - r = 0 - ifTrue: [ ^ false ]. - unit := vector / r. - radius := unit / 2 * shape mySize. - endPoint := shape to - (vector * (1-shape percentage)). - center := endPoint - radius. - ^ shape athensCanvas - createPath: [ :builder | - builder - absolute; - moveTo: center + radius; - ccwArcTo: center + radius leftRotated angle: 90 degreesToRadians; - ccwArcTo: center - radius angle: 90 degreesToRadians; - ccwArcTo: center - radius leftRotated angle: 90 degreesToRadians; - ccwArcTo: center + radius angle: 90 degreesToRadians ] - -] - -{ #category : #'drawing - helpers' } -TRPharoPlatform >> computeEllipsePathFor: aShape [ - | halfWidth halfHeight rectangle | - aShape canvas ifNil: [ ^ nil ]. - rectangle := aShape basicEncompassingRectangle. - halfWidth := rectangle width / 2 asFloat. - halfHeight := rectangle height / 2 asFloat. - - ^ aShape athensCanvas - createPath: [ :builder | - builder - relative; - moveTo: halfWidth negated @ 0; - curveVia: 0 @ (halfHeight negated * 0.55) - and: (0.45 * halfWidth) @ halfHeight negated - to: halfWidth @ halfHeight negated; - curveVia: (halfWidth * 0.55) @ 0 - and: halfWidth @ (0.45 * halfHeight) - to: halfWidth @ halfHeight; - curveVia: 0 @ (halfHeight * 0.55) - and: (0.45 * halfWidth negated) @ halfHeight - to: halfWidth negated @ halfHeight; - curveVia: (halfWidth negated * 0.55) @ 0 - and: halfWidth negated @ (halfHeight negated * 0.45) - to: halfWidth negated @ halfHeight negated ] - - -] - -{ #category : #'drawing - helpers' } -TRPharoPlatform >> computeRoundBoxPathFor: aShape [ - | r vr hr rectangle | - aShape canvas ifNil: [ ^ nil ]. - r := aShape borderRadius. - vr := 0 @ r. - hr := r @ 0. - rectangle := aShape basicEncompassingRectangle. - ^ aShape athensCanvas - createPath: [ :builder | - builder - absolute; - moveTo: rectangle topLeft + hr; - lineTo: rectangle topRight - hr; - cwArcTo: rectangle topRight + vr angle: Float halfPi; - lineTo: rectangle bottomRight - vr; - cwArcTo: rectangle bottomRight - hr angle: Float halfPi; - lineTo: rectangle bottomLeft + hr; - cwArcTo: rectangle bottomLeft - vr angle: Float halfPi; - lineTo: rectangle topLeft + vr; - cwArcTo: rectangle topLeft + hr angle: Float halfPi; - closePath ] -] - -{ #category : #'drawing - helpers' } -TRPharoPlatform >> computeSVGPathFor: aShape [ - ^ aShape athensCanvas createPath: [ :builder | - aShape curves do: [ :each | - builder perform: each first withArguments: each second ] - ] - -] - -{ #category : #public } -TRPharoPlatform >> createPopupFor: aMorph in: aPoint background: aColor string: aString [ - | popup tm vertices xdelta ydelta world position | - tm := SimpleBalloonMorph getTextMorph: aString for: aMorph. - tm composeToBounds. - vertices := SimpleBalloonMorph getVertices: tm bounds. - popup := SimpleBalloonMorph new color: aColor; - addMorph: tm; - setTarget: nil; - setVertices: vertices. - world := aMorph world - ifNil: [ ^ popup ]. - position := aPoint + aMorph position. - xdelta := ydelta := 0. - - (position x + popup width) > world width - ifTrue: [ xdelta := popup width negated ]. - (position y + popup height) > world height - ifTrue: [ ydelta := popup height negated ]. - popup lock; - fullBounds; - setProperty: #morphicLayerNumber toValue: popup morphicLayerNumber. - popup position: position + (xdelta @ydelta). - aMorph world addMorphFront: popup. - - aMorph world activeHand balloonHelp: popup. - ^ popup -] - -{ #category : #public } -TRPharoPlatform >> dateAndTime [ - ^ DateAndTime -] - -{ #category : #public } -TRPharoPlatform >> dateAndTimeClass [ - ^ DateAndTime -] - -{ #category : #public } -TRPharoPlatform >> dateAndTimeFromString: aString [ - ^ DateAndTime fromString: aString. -] - -{ #category : #utilities } -TRPharoPlatform >> dateTimeStringExample [ - ^ 'Ebola2.1,POINT (-9.696645 9.945587),2014-01-01T00:00:00,2015-01-01T00:00:00,Guinea,9.945587,-9.696645,ZEBOV,528,337,64%,"Outbreak is currently ongoing in southeastern Guinea, including the capital?Conakry?and the neighbour countries?Sierra Leone?andLiberia" -Ebola2.2,POINT (32.290275 1.373333),2012-01-01T00:00:00,-0002-12-29T00:00:00,Uganda,1.373333,32.290275,SEBOV,24,17,71%,Outbreak occurred in the?Kibaale District.[34] -Ebola2.6,POINT (21.758664 -4.038333),2008-01-01T00:00:00,2009-01-01T00:00:00,Democratic Republic of Congo,-4.038333,21.758664,ZEBOV,32,14,45%,Outbreak occurred in the Mweka and Luebo health zones of the Province of?Kasai-Occidental.[33]' -] - -{ #category : #fonts } -TRPharoPlatform >> defaultFamilyFontName [ - "Default Family font" - | fontList | - fontList := TRPlatform current fontListStrings. - fontList ifEmpty: [ ^ TRPlatform current defaultFont familyName ]. - - (fontList includes: StandardFonts listFont familyName ) - ifTrue: [ ^ StandardFonts listFont familyName ]. - - (fontList includes: 'Source Sans Pro') ifTrue: [ ^ 'Source Sans Pro' ]. - (fontList includes: 'DejaVu Sans') ifTrue: [ ^ 'DejaVu Sans' ]. - - ^ TRPlatform current defaultFont familyName -] - -{ #category : #fonts } -TRPharoPlatform >> defaultFont [ - ^ StandardFonts defaultFont -] - -{ #category : #public } -TRPharoPlatform >> deletePopup: popup [ - popup ifNil: [ ^ self ]. - popup do: [:e | e ifNotNil: [ e remove ] ]. -] - -{ #category : #windows } -TRPharoPlatform >> dialogChooseFile: pattern label: title [ - ^ UIManager default chooseFullFileNameMatching: pattern label: title. -] - -{ #category : #public } -TRPharoPlatform >> dialogChooseFrom: options values: values [ - ^ UIManager default chooseFrom: options values: values. -] - -{ #category : #windows } -TRPharoPlatform >> dialogConfirm: question [ - ^ UIManager default confirm: question -] - -{ #category : #public } -TRPharoPlatform >> dialogInform: aMessage [ - self inform: aMessage -] - -{ #category : #public } -TRPharoPlatform >> dialogRequest: request initialAnswer: answer [ - ^ UIManager default request: request initialAnswer: answer. - -] - -{ #category : #public } -TRPharoPlatform >> dialogRequestSaveFilename: filename extensions: exts path: path [ - - ^ UITheme builder fileSave: filename extensions: exts path: path. -] - -{ #category : #public } -TRPharoPlatform >> download: aString [ - ^ ZnEasy get: aString. -] - -{ #category : #'http requests' } -TRPharoPlatform >> downloadContent: aString [ - ^ aString asUrl retrieveContents -] - -{ #category : #public } -TRPharoPlatform >> downloadPng: aUrl [ - ^ ZnEasy getPng: aUrl -] - -{ #category : #'drawing - helpers' } -TRPharoPlatform >> drawTextPathFor: shape canvas: canvas [ - | f | - canvas pathTransform restoreAfter: [ - canvas pathTransform - multiplyBy: shape matrix asFloatTransform; - translateBy: ((shape textWidth / -2) @ (shape textHeight/2)) asFloatPoint; - translateBy: (0 @ shape descent negated) asFloatPoint. - canvas setFont: shape font. - f := CairoScaledFont fromFreetypeFont: shape font realFont. - f lock. - shape color loadOnCairoCanvas: canvas. - canvas setPathMatrix; - setScaledFont: f. - canvas textPath: shape text. - canvas fillPreserve. - shape outlineColor loadOnCairoCanvas: canvas. - canvas primSetLineWidth: shape outlineWidth asFloat. - canvas stroke. - f unlock ] -] - -{ #category : #'accessing-classes' } -TRPharoPlatform >> exampleSelectionClass [ - ^ RTExampleSelection -] - -{ #category : #fonts } -TRPharoPlatform >> fontFamilyName: name pointSize: number [ - "return the an instance of the default class font with that name and that size" - ^ LogicalFont familyName: name pointSize: number -] - -{ #category : #public } -TRPharoPlatform >> fontFamilyName: name size: number [ - ^ StrikeFont familyName: name size: number -] - -{ #category : #public } -TRPharoPlatform >> fontListStrings [ - ^ FontChooser new fontListStrings. -] - -{ #category : #'accessing-classes' } -TRPharoPlatform >> fontMetricsClass [ - ^ CairoFontMetricsProvider -] - -{ #category : #'accessing-classes' } -TRPharoPlatform >> formCanvasClass [ - ^ FormCanvas -] - -{ #category : #public } -TRPharoPlatform >> formClass [ - ^ Form -] - -{ #category : #public } -TRPharoPlatform >> getFontForSize: aNumber [ - - ^ LogicalFont familyName: StandardFonts defaultFont familyName pointSize: aNumber -] - -{ #category : #public } -TRPharoPlatform >> httpClientRequestClass [ - ^ ZnClient -] - -{ #category : #public } -TRPharoPlatform >> imageExporterForType: imageType [ - ^ (imageType = #JPEG or: imageType = #JPG) - ifTrue: [ PluginBasedJPEGReadWriter ] - ifFalse: [ Smalltalk at: (imageType, 'ReadWriter') asSymbol ] -] - -{ #category : #public } -TRPharoPlatform >> inform: str [ - UIManager default inform: str -] - -{ #category : #public } -TRPharoPlatform >> jsonReaderClass [ - ^ STONJSON -] - -{ #category : #'accessing-classes' } -TRPharoPlatform >> linearGradientClass [ - ^ LinearGradientPaint - -] - -{ #category : #public } -TRPharoPlatform >> materializeFromByteArray: array [ - ^ FLMaterializer materializeFromByteArray: array. -] - -{ #category : #'accessing-classes' } -TRPharoPlatform >> matrixClass [ - ^ Matrix -] - -{ #category : #public } -TRPharoPlatform >> menuMorphClass [ - ^ MenuMorph -] - -{ #category : #'accessing-classes' } -TRPharoPlatform >> messageTallyClass [ - ^ MessageTally -] - -{ #category : #public } -TRPharoPlatform >> mimeDecodeToBytes: stream [ - ^ (ZnBase64Encoder new decode: stream contents) readStream - "^ Base64MimeConverter mimeDecodeToBytes: stream." -] - -{ #category : #public } -TRPharoPlatform >> mimeEncode: aStream [ - ^ Base64MimeConverter mimeEncode: aStream -] - -{ #category : #public } -TRPharoPlatform >> mimeEncode: aStream multiLine: aBool [ - ^ Base64MimeConverter mimeEncode: aStream multiLine: aBool. -] - -{ #category : #public } -TRPharoPlatform >> morphClass [ - ^ Morph -] - -{ #category : #public } -TRPharoPlatform >> newColorFormWithExtent: extent depth: depth [ - ^ ColorForm extent: extent depth: depth. -] - -{ #category : #public } -TRPharoPlatform >> newFormWithExtent: extent depth: depth [ - ^ Form extent: extent depth: depth -] - -{ #category : #windows } -TRPharoPlatform >> openFile: filename [ - filename asUrl open -] - -{ #category : #public } -TRPharoPlatform >> packageNamed: packageName [ - ^ RPackageOrganizer default packageNamed: packageName -] - -{ #category : #public } -TRPharoPlatform >> pngReadWriterClass [ - ^ PNGReadWriter -] - -{ #category : #'accessing-classes' } -TRPharoPlatform >> polygonTesterClass [ - ^ AthensPolygonTester -] - -{ #category : #public } -TRPharoPlatform >> roassalIcon [ - ^ Form fromBinaryStream: (self roassalIconContents base64Decoded readStream) -] - -{ #category : #public } -TRPharoPlatform >> roassalIconContents [ - - ^ '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 -TQAAAABJRU5ErkJggg==' -] - -{ #category : #public } -TRPharoPlatform >> session [ - ^ Smalltalk session -] - -{ #category : #windows } -TRPharoPlatform >> showTemporaryCursor: cursorOrNil [ - World currentHand showTemporaryCursor: cursorOrNil -] - -{ #category : #'accessing-classes' } -TRPharoPlatform >> surfaceClass [ - ^ AthensCairoSurface -] - -{ #category : #'accessing-classes' } -TRPharoPlatform >> textEmphasisClass [ - ^ TextEmphasis -] - -{ #category : #public } -TRPharoPlatform >> trMorphClass [ - ^ TRMorph -] - -{ #category : #utilities } -TRPharoPlatform >> validInteractionsOf: anObject oklist: validList [ - | first list temp | - - first := true. - list := OrderedCollection new. - temp := OrderedCollection new. - (anObject announcer subscriptions trSubscriptions do: [ :sub | - ((validList includes: sub subscriber class name) - and: [ (temp includes: sub subscriber class) not ]) ifTrue: [ - temp add: sub subscriber class. - list add: sub ] ] ). - ^ list collect: #subscriber. -] - -{ #category : #utilities } -TRPharoPlatform >> visitInteractionsFor: aVisitor and: anObject [ - - | first list temp | - - first := true. - list := OrderedCollection new. - temp := OrderedCollection new. - (anObject announcer subscriptions trSubscriptions do: [ :sub | - ((aVisitor validInteractions includes: sub subscriber class name) - and: [ (temp includes: sub subscriber class) not ]) ifTrue: [ - temp add: sub subscriber class. - list add: sub ] ] ). - aVisitor stream nextPutAll: '['. - list do: [ :sub | - first ifTrue: [ first := false. - sub subscriber accept: aVisitor with: anObject ] - ifFalse: [ - aVisitor stream nextPutAll: ', '. - sub subscriber accept: aVisitor with: anObject ] - ]. - aVisitor stream nextPutAll: ']'. -] - -{ #category : #public } -TRPharoPlatform >> widthOfString: string font: font [ - - ^ (font widthOfString: string) -] - -{ #category : #public } -TRPharoPlatform >> widthOfString: string fontFamilyName: fontFamilyName fontSize: fontSize [ - ^ self widthOfString: string font: (StrikeFont familyName: fontFamilyName size: fontSize). -] - -{ #category : #public } -TRPharoPlatform >> workingDirectory [ - ^ FileSystem disk workingDirectory -] diff --git a/src/Trachel/TRPlainColorTheme.class.st b/src/Trachel/TRPlainColorTheme.class.st deleted file mode 100644 index 8e7572681..000000000 --- a/src/Trachel/TRPlainColorTheme.class.st +++ /dev/null @@ -1,45 +0,0 @@ -Class { - #name : #TRPlainColorTheme, - #superclass : #TRTheme, - #category : #'Trachel-Core-Theme' -} - -{ #category : #constants } -TRPlainColorTheme >> blue [ - ^ Color blue -] - -{ #category : #constants } -TRPlainColorTheme >> cyan [ - ^ Color cyan -] - -{ #category : #constants } -TRPlainColorTheme >> green [ - ^ Color green -] - -{ #category : #constants } -TRPlainColorTheme >> magenta [ - ^ Color magenta -] - -{ #category : #constants } -TRPlainColorTheme >> orange [ - ^ Color orange -] - -{ #category : #constants } -TRPlainColorTheme >> red [ - ^ Color red -] - -{ #category : #constants } -TRPlainColorTheme >> violet [ - ^ Color fromRgb256Triplet: #(127 0 255) -] - -{ #category : #constants } -TRPlainColorTheme >> yellow [ - ^ Color yellow -] diff --git a/src/Trachel/TRPlatform.class.st b/src/Trachel/TRPlatform.class.st deleted file mode 100644 index 55bcd999a..000000000 --- a/src/Trachel/TRPlatform.class.st +++ /dev/null @@ -1,319 +0,0 @@ -" -I have the methods of the default platform(pharo or visualworks) -" -Class { - #name : #TRPlatform, - #superclass : #TRObject, - #classInstVars : [ - 'current' - ], - #category : #'Trachel-Core' -} - -{ #category : #default } -TRPlatform class >> current [ - current isClass ifTrue: [ current := nil ]. - ^ current ifNil: [ | sub | - sub := self subclasses. - sub size = 0 - ifTrue: [ nil ] - ifFalse: [ - current := self subclasses detect: [ :any | any isActivePlatform ]. - current := current new ]]. -] - -{ #category : #testing } -TRPlatform class >> isActivePlatform [ - self subclassResponsibility. -] - -{ #category : #'accessing-classes' } -TRPlatform >> affineTransformClass [ - self subclassResponsibility. -] - -{ #category : #windows } -TRPlatform >> browseClass: aClass [ - "Open the default system browser for a class" - self subclassResponsibility -] - -{ #category : #'accessing-classes' } -TRPlatform >> colorFormClass [ - "return the default colorform, can be different in other smalltalk systems" - self subclassResponsibility -] - -{ #category : #'drawing - helpers' } -TRPlatform >> computeArcPathFor: aShape [ - self subclassResponsibility -] - -{ #category : #'drawing - helpers' } -TRPlatform >> computeEllipsePathFor: aShape [ - self subclassResponsibility. -] - -{ #category : #'drawing - helpers' } -TRPlatform >> computeRoundBoxPathFor: aShape [ - self subclassResponsibility -] - -{ #category : #windows } -TRPlatform >> createPopupFor: aMorph in: aPoint background: aColor string: aString [ - "create a platform popup" - self subclassResponsibility -] - -{ #category : #public } -TRPlatform >> dateAndTime [ - self subclassResponsibility -] - -{ #category : #'accessing-classes' } -TRPlatform >> dateAndTimeClass [ - "return the default class for date and time" - self subclassResponsibility -] - -{ #category : #'date and time' } -TRPlatform >> dateAndTimeFromString: aString [ - "create a date and time from a string" - self subclassResponsibility -] - -{ #category : #fonts } -TRPlatform >> defaultFamilyFontName [ - self subclassResponsibility -] - -{ #category : #windows } -TRPlatform >> deletePopup: apopup [ - "delete the platform popup for a class" - self subclassResponsibility -] - -{ #category : #windows } -TRPlatform >> dialogChooseFrom: options values: values [ - "open a dialog window to select one of the options with the same values" - self subclassResponsibility -] - -{ #category : #windows } -TRPlatform >> dialogInform: aMessage [ - "open a dialog with the message string" - self subclassResponsibility -] - -{ #category : #windows } -TRPlatform >> dialogRequest: request initialAnswer: answer [ - "open a dialog window to ask one text input for the user with the initiali answer" - self subclassResponsibility - -] - -{ #category : #windows } -TRPlatform >> dialogRequestSaveFilename: filename extensions: exts path: path [ - "open a dialog window from the file system to save a fil" - self subclassResponsibility. -] - -{ #category : #'http requests' } -TRPlatform >> download: aString [ - "returns the http web content from a direction like url" - self subclassResponsibility -] - -{ #category : #'http requests' } -TRPlatform >> downloadContent: aString [ - "returns the http web content from a direction like url" - self subclassResponsibility -] - -{ #category : #'http requests' } -TRPlatform >> downloadPng: aUrl [ - "return the content of a url, the content is an image" - self subclassResponsibility -] - -{ #category : #fonts } -TRPlatform >> fontFamilyName: name size: number [ - "return the an instance of the default class font with that name and that size" - self subclassResponsibility -] - -{ #category : #fonts } -TRPlatform >> fontListStrings [ - "return the font name of the fonts in the smalltalk system" - self subclassResponsibility -] - -{ #category : #'accessing-classes' } -TRPlatform >> formCanvasClass [ - self subclassResponsibility. -] - -{ #category : #'accessing-classes' } -TRPlatform >> formClass [ - "return the default font class" - self subclassResponsibility -] - -{ #category : #public } -TRPlatform >> formFromStream: aStream [ - "return a form or visual component from a image stream" - ^ self formClass fromBinaryStream: (self mimeDecodeToBytes: aStream) -] - -{ #category : #fonts } -TRPlatform >> getFontForSize: aNumber [ - "return the a font with that size" - self subclassResponsibility. -] - -{ #category : #'accessing-classes' } -TRPlatform >> httpClientRequestClass [ - "return the default http client request class" - self subclassResponsibility -] - -{ #category : #'accessing-classes' } -TRPlatform >> imageExporterForType: imageType [ - "return the class exporter for that image type" - self subclassResponsibility - -] - -{ #category : #'accessing-classes' } -TRPlatform >> jsonReaderClass [ - "return de default json reader class" - self subclassResponsibility -] - -{ #category : #public } -TRPlatform >> materializeFromByteArray: array [ - self subclassResponsibility -] - -{ #category : #'accessing-classes' } -TRPlatform >> matrixClass [ - self subclassResponsibility. -] - -{ #category : #'accessing-classes' } -TRPlatform >> menuMorphClass [ - "return de default menu class" - self subclassResponsibility -] - -{ #category : #'accessing-classes' } -TRPlatform >> messageTallyClass [ - self subclassResponsibility -] - -{ #category : #'http requests' } -TRPlatform >> mimeDecodeToBytes: bytes [ - "return a stream from bytes" - self subclassResponsibility -] - -{ #category : #'http requests' } -TRPlatform >> mimeEncode: aStream [ - "convert a stream to bytes" - self subclassResponsibility -] - -{ #category : #'http requests' } -TRPlatform >> mimeEncode: aStream multiLine: aBool [ - "conver a stream to bytes using the skip character" - self subclassResponsibility -] - -{ #category : #'accessing-classes' } -TRPlatform >> morphClass [ - "returns the default Morph or equivalent class in smalltalk systems" - self subclassResponsibility -] - -{ #category : #public } -TRPlatform >> newColorFormWithExtent: extent depth: depth [ - "returns an instance of color form" - self subclassResponsibility -] - -{ #category : #public } -TRPlatform >> newFormWithExtent: extent depth: depth [ - "returns an instance of Form" - self subclassResponsibility -] - -{ #category : #public } -TRPlatform >> packageNamed: packageName [ - "return an instance of the default package system in smalltalk" - self subclassResponsibility -] - -{ #category : #'accessing-classes' } -TRPlatform >> pngReadWriterClass [ - "returns the default PNG Reader Writer class" - self subclassResponsibility -] - -{ #category : #'accessing-classes' } -TRPlatform >> polygonTesterClass [ - self subclassResponsibility -] - -{ #category : #public } -TRPlatform >> roassalIcon [ - self subclassResponsibility -] - -{ #category : #public } -TRPlatform >> session [ - self subclassResponsibility -] - -{ #category : #windows } -TRPlatform >> showTemporaryCursor: cursorOrNil [ - self subclassResponsibility -] - -{ #category : #'accessing-classes' } -TRPlatform >> surfaceClass [ - self subclassResponsibility. -] - -{ #category : #'accessing-classes' } -TRPlatform >> trMorphClass [ - "return the default TRMorph class, or visual component for other smalltalk systems" - self subclassResponsibility -] - -{ #category : #utilities } -TRPlatform >> validInteractionsOf: shape oklist: list [ - self subclassResponsibility -] - -{ #category : #utilities } -TRPlatform >> visitInteractionsFor: aVisitor and: anObject [ - self subclassResponsibility -] - -{ #category : #fonts } -TRPlatform >> widthOfString: string font: font [ - "retuns the width of string with an instance of the default Font class" - self subclassResponsibility -] - -{ #category : #fonts } -TRPlatform >> widthOfString: string fontFamilyName: fontFamilyName fontSize: fontSize [ - "returns the width of string with the name of the font and the size" - self subclassResponsibility -] - -{ #category : #public } -TRPlatform >> workingDirectory [ - "retuns the working directory" - self subclassResponsibility -] diff --git a/src/Trachel/TRPolygonShape.class.st b/src/Trachel/TRPolygonShape.class.st deleted file mode 100644 index 002ffb6a9..000000000 --- a/src/Trachel/TRPolygonShape.class.st +++ /dev/null @@ -1,171 +0,0 @@ -" -I am shape which builds closed path following ordered collection of vertices. - -" -Class { - #name : #TRPolygonShape, - #superclass : #TRShape, - #instVars : [ - 'vertices', - 'strokeWidth' - ], - #category : #'Trachel-Shapes' -} - -{ #category : #visitor } -TRPolygonShape >> accept: aVisitor [ - aVisitor visitPolygonShape: self -] - -{ #category : #accessing } -TRPolygonShape >> basicEncompassingRectangle [ - "Return the bounding box of all the vertices." - - self numberOfVertices = 0 - ifTrue: [ ^ 0 @ 0 corner: 0 @ 0 ]. - ^ vertices min corner: vertices max -] - -{ #category : #accessing } -TRPolygonShape >> center [ - "Return the center of the polygon. The center is determined as the center of encompassing rectangle, which may be different from the exact center of the shape (e.g., the value returned by this method may be actually outside the shape itself)." - ^ self encompassingRectangle center -] - -{ #category : #private } -TRPolygonShape >> computePath [ - canvas ifNil: [ ^ self ]. - self numberOfVertices = 0 ifTrue: [ - path := self athensCanvas - createPath: [ :builder | ]. - ^ self ]. - path := self athensCanvas - createPath: [ :builder | - builder - absolute; - moveTo: vertices last. - vertices do: [ :v | - builder lineTo: v ]. - builder closePath ] -] - -{ #category : #drawing } -TRPolygonShape >> drawOn: athensCanvas [ - | pt scale ratio | - pt := athensCanvas pathTransform. - pt restoreAfter: [ - pt scaleBy: matrix sx @ matrix sy. - - athensCanvas - setShape: self path. - color isNotNil ifTrue: [ athensCanvas setPaint: self themedColor; draw ]. - - self canvas ifNil: [ ^ self ]. - scale := self canvas camera scale. - scale < 1 - ifTrue: [ ratio := self strokeWidth ] - ifFalse: [ ratio := self strokeWidth / scale]. - ^ strokePaint - ifNotNil: [ - (athensCanvas setStrokePaint: self themedStrokeColor) width: ratio asFloat. - athensCanvas drawShape: path]] -] - -{ #category : #accessing } -TRPolygonShape >> encompassingRectangle [ - ^ self transformedEncompassingRectangle -] - -{ #category : #accessing } -TRPolygonShape >> extent [ - ^ self encompassingRectangle extent -] - -{ #category : #accessing } -TRPolygonShape >> extent: newExtent [ - | oldExtent min max sx sy | - oldExtent := self basicEncompassingRectangle extent. - newExtent = oldExtent - ifTrue: [ ^ self ]. - min := vertices min. - max := vertices max. - sx := newExtent x / (max x - min x). - sy := newExtent y / (max y - min y). - vertices := vertices collect: [ :p | (p x * sx) @ (p y * sy) ]. - self resetPath. - oldExtent = (0@0) - ifFalse: [ self triggerCallbacksForNewExtent: newExtent oldExtent: oldExtent ] -] - -{ #category : #accessing } -TRPolygonShape >> height [ - ^ self encompassingRectangle height -] - -{ #category : #accessing } -TRPolygonShape >> height: newHeight [ - self extent: self basicEncompassingRectangle width @ newHeight -] - -{ #category : #testing } -TRPolygonShape >> includesPoint: point [ - ^ (TRPlatform current polygonTesterClass new polygon: vertices ) includesPoint: point. -] - -{ #category : #initialization } -TRPolygonShape >> initialize [ - super initialize. - strokeWidth := 1.0. - self vertices: #() -] - -{ #category : #accessing } -TRPolygonShape >> numberOfVertices [ - "Return the number of vertices contained in the polygon" - ^ vertices size -] - -{ #category : #accessing } -TRPolygonShape >> strokeWidth [ - ^ strokeWidth -] - -{ #category : #accessing } -TRPolygonShape >> strokeWidth: aWidth [ - "Set the size of the stroke (i.e., line width)" - strokeWidth := aWidth -] - -{ #category : #actions } -TRPolygonShape >> translateBy: aPoint [ - vertices := vertices collect:[ :each | each + aPoint]. - self triggerCallbacksForStep: aPoint. - self computePath -] - -{ #category : #actions } -TRPolygonShape >> translateTo: aPoint [ - | dist | - dist := aPoint - self encompassingRectangle center. - self translateBy: dist. -] - -{ #category : #accessing } -TRPolygonShape >> vertices [ - ^ vertices -] - -{ #category : #accessing } -TRPolygonShape >> vertices: aCollection [ - vertices := aCollection -] - -{ #category : #accessing } -TRPolygonShape >> width [ - ^ self encompassingRectangle width -] - -{ #category : #accessing } -TRPolygonShape >> width: newWidth [ - self extent: newWidth @ self basicEncompassingRectangle -] diff --git a/src/Trachel/TRPolygonShapeTest.class.st b/src/Trachel/TRPolygonShapeTest.class.st deleted file mode 100644 index 9e7a8afd5..000000000 --- a/src/Trachel/TRPolygonShapeTest.class.st +++ /dev/null @@ -1,49 +0,0 @@ -" -A TRPolygonShapeTest is a test class for testing the behavior of TRPolygonShape -" -Class { - #name : #TRPolygonShapeTest, - #superclass : #TRTest, - #category : #'Trachel-Tests' -} - -{ #category : #tests } -TRPolygonShapeTest >> testBasic [ - - | s | - s := TRPolygonShape new. - self assert: s numberOfVertices equals: 0. - self assert: s vertices equals: #(). - self assert: s encompassingRectangle equals: ((0 @ 0) corner: (0 @ 0)) -] - -{ #category : #tests } -TRPolygonShapeTest >> testPainting [ - - | c s | - c := TRCanvas new. - - s := TRPolygonShape new. - c addShape: s. - c buildMorph drawOnMockCanvas -] - -{ #category : #tests } -TRPolygonShapeTest >> testTranslationAndEmpty [ - - | c s | - c := TRCanvas new. - - s := TRPolygonShape new. - s color: nil. - s vertices: (Array with: 10@10 with: 0@0 with: 10@0). - c addShape: s. - s translateBy: 3 @ 3. - - s := TRPolygonShape new. - s color: nil. - s vertices: (Array with: 10@10 with: 0@0 with: 10@0). - c addShape: s. - - c buildMorph drawOnMockCanvas -] diff --git a/src/Trachel/TRRemoveCallback.class.st b/src/Trachel/TRRemoveCallback.class.st deleted file mode 100644 index be233c509..000000000 --- a/src/Trachel/TRRemoveCallback.class.st +++ /dev/null @@ -1,21 +0,0 @@ -" -I am triggered when aShape has been removed from a canvas. -The opposite of me is TRAddedCallback. - -==aShape addCallback: (TRRemoveCallback block: [ :shape | ""do sth"" ])== -" -Class { - #name : #TRRemoveCallback, - #superclass : #TRCallback, - #category : #'Trachel-Callbacks' -} - -{ #category : #testing } -TRRemoveCallback >> isRemoveCallback [ - ^ true -] - -{ #category : #linking } -TRRemoveCallback >> removeShape: aTRShape [ - ^ block cull: aTRShape -] diff --git a/src/Trachel/TRResizeCanceled.class.st b/src/Trachel/TRResizeCanceled.class.st deleted file mode 100644 index cbfac17dd..000000000 --- a/src/Trachel/TRResizeCanceled.class.st +++ /dev/null @@ -1,12 +0,0 @@ -" -I am fired when Resize operation is canceled globally for the whole View. - -!! Collaborators - -DCRTResizable -" -Class { - #name : #TRResizeCanceled, - #superclass : #TRShapeEvent, - #category : #'Trachel-Events' -} diff --git a/src/Trachel/TRResizeCanvasEvent.class.st b/src/Trachel/TRResizeCanvasEvent.class.st deleted file mode 100644 index c087715d4..000000000 --- a/src/Trachel/TRResizeCanvasEvent.class.st +++ /dev/null @@ -1,29 +0,0 @@ -Class { - #name : #TRResizeCanvasEvent, - #superclass : #TREvent, - #instVars : [ - 'newExtent', - 'oldExtent' - ], - #category : #'Trachel-Events' -} - -{ #category : #accessing } -TRResizeCanvasEvent >> newExtent [ - ^ newExtent -] - -{ #category : #accessing } -TRResizeCanvasEvent >> newExtent: aPoint [ - newExtent := aPoint -] - -{ #category : #accessing } -TRResizeCanvasEvent >> oldExtent [ - ^ oldExtent -] - -{ #category : #accessing } -TRResizeCanvasEvent >> oldExtent: aPoint [ - oldExtent := aPoint -] diff --git a/src/Trachel/TRRotatedLabelShape.class.st b/src/Trachel/TRRotatedLabelShape.class.st deleted file mode 100644 index ab19b01a3..000000000 --- a/src/Trachel/TRRotatedLabelShape.class.st +++ /dev/null @@ -1,99 +0,0 @@ -Class { - #name : #TRRotatedLabelShape, - #superclass : #TRLabelShape, - #instVars : [ - 'angle' - ], - #category : #'Trachel-Shapes' -} - -{ #category : #visitor } -TRRotatedLabelShape >> accept: aVisitor [ - aVisitor visitRotatedLabelShape: self -] - -{ #category : #accessing } -TRRotatedLabelShape >> angle [ - ^angle -] - -{ #category : #accessing } -TRRotatedLabelShape >> angleInDegree: anAngle [ - angle := anAngle -] - -{ #category : #drawing } -TRRotatedLabelShape >> drawOn: athensCanvas [ - "self drawEncompassingRectangleOn: athensCanvas color: (Color green alpha: 0.1)." - athensCanvas pathTransform restoreAfter: [ - "Draw the label centered on the position" - athensCanvas pathTransform - translateBy: self position asIntegerPoint; - rotateByDegrees: angle value; - translateBy: ((self notRotatedWidth value / -2) @ (self notRotatedHeight value / 2)) asIntegerPoint; - translateBy: (0 @ font descent negated) asIntegerPoint. - athensCanvas setFont: font. - athensCanvas setPaint: self themedColor. - athensCanvas drawString: text - ]. -] - -{ #category : #accessing } -TRRotatedLabelShape >> encompassingRectangle [ - - | w h transformation translation notRotatedRectangle rotatedRectangle topLeft topRight bottomRight bottomLeft p1 p2 p3 p4 | - w := self notRotatedWidth. - h := self notRotatedHeight. - transformation := TRPlatform current affineTransformClass new - rotateByDegrees: angle value; - translateBy: ((w / -2) @ (h / 2)) asIntegerPoint. - notRotatedRectangle := 0 @ h negated corner: (w @ 0). - topLeft := transformation transform: notRotatedRectangle topLeft. - topRight := transformation transform: notRotatedRectangle topRight. - bottomRight := transformation transform: notRotatedRectangle bottomRight. - bottomLeft := transformation transform: notRotatedRectangle bottomLeft. - - p1 := OrderedCollection new add: topLeft x; add: topRight x; add: bottomRight x; add: bottomLeft x; yourself. - p2 := OrderedCollection new add: topLeft y; add: topRight y; add: bottomRight y; add: bottomLeft y; yourself. - p3 := OrderedCollection new add: topLeft x; add: topRight x; add: bottomRight x; add: bottomLeft x; yourself. - p4 := OrderedCollection new add: topLeft y; add: topRight y; add: bottomRight y; add: bottomLeft y; yourself. - - rotatedRectangle := - (p1 min @ p2 min) corner: - (p3 max @ p4 max). - translation := TRPlatform current affineTransformClass new - translateBy: self position asIntegerPoint. - ^ (translation transform: rotatedRectangle topLeft) - corner: (translation transform: rotatedRectangle bottomRight) - -] - -{ #category : #testing } -TRRotatedLabelShape >> includesPoint: aPoint [ - | w h p rec wh | - w := self notRotatedWidth. - h := self notRotatedHeight. - wh := (w/2)@(h/2). - p := TRPlatform current affineTransformClass new - rotateByDegrees: angle value negated; - transform: aPoint - self position. - rec:= wh negated corner: wh. - - ^ rec containsPoint: p. -] - -{ #category : #initialization } -TRRotatedLabelShape >> initialize [ - super initialize. - angle := 0. -] - -{ #category : #accessing } -TRRotatedLabelShape >> notRotatedHeight [ - ^ font height -] - -{ #category : #accessing } -TRRotatedLabelShape >> notRotatedWidth [ - ^ (font widthOfString: text) -] diff --git a/src/Trachel/TRRoundedBoxShape.class.st b/src/Trachel/TRRoundedBoxShape.class.st deleted file mode 100644 index 16ff27655..000000000 --- a/src/Trachel/TRRoundedBoxShape.class.st +++ /dev/null @@ -1,26 +0,0 @@ -" -Box shape with (optionally) rounded corners. -" -Class { - #name : #TRRoundedBoxShape, - #superclass : #TRBoxShape, - #instVars : [ - 'borderRadius' - ], - #category : #'Trachel-Shapes' -} - -{ #category : #accessing } -TRRoundedBoxShape >> borderRadius [ - ^ borderRadius -] - -{ #category : #accessing } -TRRoundedBoxShape >> borderRadius: aNumber [ - borderRadius := aNumber -] - -{ #category : #private } -TRRoundedBoxShape >> computePath [ - path := TRPlatform current computeRoundBoxPathFor: self. -] diff --git a/src/Trachel/TRSVGPath.class.st b/src/Trachel/TRSVGPath.class.st deleted file mode 100644 index 389c2edc8..000000000 --- a/src/Trachel/TRSVGPath.class.st +++ /dev/null @@ -1,286 +0,0 @@ -" -In Roassal-Trachel I am the common class to define and draw SVG shapes, and draw it in an instance of TRCanvas. - -Description --------------------- -I can use an string with a common SVG commands and convert it into an array of curves or commands that (Athens|Canvas ) can handle it. To do that I use the class ASPathConverter. - -I use my curves to calculate my emcompassing rectangle, this rectangle chanages, when you use the method path to update the #path: - -Publick AI and Key Messages --------------------- - -- #new creates an empy TRSVGPath, but you need at least 2 curves. - -- path:aString allow set the curves of this SVG and recalculate the new encompassing rectangle. - - - #curves: anArrayOfCurves allow set the curves directly, usefull when you want to modifly the curves directly and update it in an animation - -#includesPoint: aPoint SVG uses -Private methods ----------------- -#computeRectangle internal method to recalculate the encomcompassing rectangle -#computePolygons we create polygons from curves -#correctCurvesAndPolygonsToZero in roassal each shape the position is in the center and TRSVGPath is not the exception, for that reason after calculate the curves from the pathString, TRSVG moves the coordinates of the curves. -#separateSubPaths an SVG can be a set of sub paths, in this part we create the polygons as a collection of polygons - -" -Class { - #name : #TRSVGPath, - #superclass : #TRShape, - #instVars : [ - 'borderWidth', - 'fillColor', - 'pathString', - 'curves', - 'polygons', - 'rectangle' - ], - #category : #'Trachel-Shapes' -} - -{ #category : #visitor } -TRSVGPath >> accept: aVisitor [ - aVisitor visitSVGPath: self -] - -{ #category : #private } -TRSVGPath >> basicEncompassingRectangle [ - ^ rectangle -] - -{ #category : #accessing } -TRSVGPath >> borderWidth: width [ - borderWidth := width. -] - -{ #category : #accessing } -TRSVGPath >> center [ - ^ self encompassingRectangle center -] - -{ #category : #accessing } -TRSVGPath >> centeredPath: aPathString [ - self path: aPathString. - self correctCurvesAndPolygonsToZero. -] - -{ #category : #accessing } -TRSVGPath >> color [ - ^ fillColor -] - -{ #category : #accessing } -TRSVGPath >> color: aColor [ - ^ self fillColor: aColor -] - -{ #category : #private } -TRSVGPath >> computeCurves [ - "This method parse the path" - " - A complete description may be found on http://www.w3.org/TR/SVG/paths.html#PathData - So far, we only consider the following SVG tokens: - - M = Move to - absolute - m = Move to - relative - - Z or z = Close path - - L = Line to - absolute - l = Line to - relative - - The description of SVG path, says that M and m may accept more than one coordinates. In practices, this is rarely the case. - " - | pathData | - pathData := ASPathConverter new stream: pathString readStream. - curves := pathData convertPathData. -] - -{ #category : #hooks } -TRSVGPath >> computePath [ - path := TRPlatform current computeSVGPathFor: self. - -] - -{ #category : #private } -TRSVGPath >> computePolygons [ - | separatedPaths | - separatedPaths := self separateSubPaths. - polygons := separatedPaths. -] - -{ #category : #private } -TRSVGPath >> computeRectangle [ - | allPoints | - allPoints := polygons inject: #() into: [ :acc :next | acc , next ]. - rectangle := Rectangle encompassing: allPoints. - ^ allPoints -] - -{ #category : #private } -TRSVGPath >> correctCurvesAndPolygonsToZero [ - "Center of polygons is stored in originalPosition and the center is moved to 0@0." - | originalPosition absolute key args| - self computeRectangle. - originalPosition := rectangle center. - absolute := true. - curves do: [ :curve | - key := curve first. - args := curve second. - key =#absolute ifTrue: [ absolute :=true ]. - key =#relative ifTrue: [ absolute :=false ]. - absolute ifTrue: [ - args doWithIndex: [ :eachPoint :index| - args at: index put: eachPoint - originalPosition] ]. - ]. - polygons - do: [ :eachPolygon | eachPolygon doWithIndex: [ :eachPoint :index | eachPolygon at: index put: eachPoint - originalPosition ] ]. - self computeRectangle. -] - -{ #category : #accessing } -TRSVGPath >> curves [ - curves isNil ifFalse: [ ^ curves ]. - self computeCurves. - self computePolygons. - ^ curves -] - -{ #category : #accessing } -TRSVGPath >> curves: anArray [ - curves := anArray. - self computePolygons. - -] - -{ #category : #drawing } -TRSVGPath >> drawOn: aCanvas [ - | pt | - pt := aCanvas pathTransform. - pt restoreAfter: [ - pt multiplyBy: matrix asFloatTransform. - aCanvas setShape: self path. - fillColor isNotNil ifTrue: [ aCanvas setPaint: fillColor; draw ]. - (aCanvas setStrokePaint: strokePaint) width: borderWidth. - aCanvas draw - ] -] - -{ #category : #accessing } -TRSVGPath >> encompassingRectangle [ - ^ self transformedEncompassingRectangle -] - -{ #category : #accessing } -TRSVGPath >> extent [ - ^ rectangle extent. -] - -{ #category : #accessing } -TRSVGPath >> fillColor: aColor [ - fillColor := aColor -] - -{ #category : #accessing } -TRSVGPath >> height [ - ^ self encompassingRectangle height -] - -{ #category : #testing } -TRSVGPath >> includesPoint: aPoint [ - |apt invertedPoint | - invertedPoint := matrix inverseTransform: aPoint. - apt := TRPlatform current polygonTesterClass new. - ^ polygons anySatisfy: [ :eachPolygon | ((apt polygon: eachPolygon) includesPoint: invertedPoint) ] -] - -{ #category : #initialization } -TRSVGPath >> initialize [ - super initialize. - polygons := #(). - borderWidth := 0. - fillColor := Color black. - rectangle := Rectangle origin: 0@0 corner: 0@0. -] - -{ #category : #accessing } -TRSVGPath >> path: aPathString [ - pathString := aPathString. - curves := nil. - self curves. - self computeRectangle. -] - -{ #category : #accessing } -TRSVGPath >> pathString [ - ^ pathString -] - -{ #category : #actions } -TRSVGPath >> reset [ - super resetPath. - curves := nil -] - -{ #category : #private } -TRSVGPath >> separateSubPaths [ - | separatedPaths subPath absolute p point key args | - separatedPaths := OrderedCollection new. - subPath := OrderedCollection new. - absolute := true. - p := 0@0. - - point := [:da | p := absolute - ifTrue:[ da ] - ifFalse: [ p + da ]. - subPath add: p ]. - curves do: [ :c | - key := c first. - args := c second. - key = #absolute ifTrue: [ absolute := true ]. - key = #relative ifTrue: [ absolute := false ]. - key = #moveTo: ifTrue: [ - subPath ifNotEmpty: [ separatedPaths add: subPath ]. - subPath:= OrderedCollection new. - point value: args first ]. - key = #curveVia:and:to: ifTrue: [ - point value: args third ]. - key = #curveVia:to: ifTrue: [ - point value: args second ]. - key = #ellipticalArc:xrot:large:sweep:to: ifTrue: [ - point value: args fifth ]. - key = #lineTo: ifTrue: [ - point value: args first ]. - key = #reflectedCurveVia:to: ifTrue: [ - point value: args second ]. - key = #hLineTo: ifTrue: [ - p := absolute - ifTrue: [ args first @ p y ] - ifFalse: [ p + (args first @ 0) ]. - subPath add: p ]. - key = #vLineTo: ifTrue: [ - p := absolute - ifTrue: [ p x @ args first ] - ifFalse: [ p + (0 @ args first) ]. - subPath add: p ]. - ]. - separatedPaths add: subPath. - ^ separatedPaths -] - -{ #category : #accessing } -TRSVGPath >> setExtent: anExtent [ - - rectangle := rectangle topLeft extent: anExtent -] - -{ #category : #accessing } -TRSVGPath >> strokeWidth [ - ^ borderWidth -] - -{ #category : #accessing } -TRSVGPath >> width [ - ^ self encompassingRectangle width -] diff --git a/src/Trachel/TRSVGPathLineShape.class.st b/src/Trachel/TRSVGPathLineShape.class.st deleted file mode 100644 index 4214016b0..000000000 --- a/src/Trachel/TRSVGPathLineShape.class.st +++ /dev/null @@ -1,61 +0,0 @@ -Class { - #name : #TRSVGPathLineShape, - #superclass : #TRAbstractLineShape, - #instVars : [ - 'pathCommands', - 'from', - 'to' - ], - #category : #'Trachel-Shapes' -} - -{ #category : #visitor } -TRSVGPathLineShape >> accept: visitor [ - visitor visitSVGPathLine: self -] - -{ #category : #private } -TRSVGPathLineShape >> computePath [ - path := self athensCanvas - createPath: [ :builder | - pathCommands - do: [ :each | builder perform: each first withArguments: each second ] ] -] - -{ #category : #accessing } -TRSVGPathLineShape >> encompassingRectangle [ - ^ Rectangle encompassing: (Array with: from with: to) -] - -{ #category : #accessing } -TRSVGPathLineShape >> from [ - ^ from -] - -{ #category : #accessing } -TRSVGPathLineShape >> from: aPoint [ - from := aPoint -] - -{ #category : #accessing } -TRSVGPathLineShape >> from: fromPoint to: toPoint [ - self from: fromPoint. - self to: toPoint -] - -{ #category : #accessing } -TRSVGPathLineShape >> svgPath: aString [ - | converter | - converter := ASPathConverter new stream: aString readStream. - pathCommands := converter convertPathData -] - -{ #category : #accessing } -TRSVGPathLineShape >> to [ - ^ to -] - -{ #category : #accessing } -TRSVGPathLineShape >> to: aPoint [ - to := aPoint -] diff --git a/src/Trachel/TRSVGPathTest.class.st b/src/Trachel/TRSVGPathTest.class.st deleted file mode 100644 index 8185aeea6..000000000 --- a/src/Trachel/TRSVGPathTest.class.st +++ /dev/null @@ -1,31 +0,0 @@ -Class { - #name : #TRSVGPathTest, - #superclass : #TRTest, - #category : #'Trachel-Tests' -} - -{ #category : #tests } -TRSVGPathTest >> testColor [ - | path | - path := TRSVGPath new. - self assert: path color equals: Color black. - - path color: Color blue. - self assert: path color equals: Color blue. -] - -{ #category : #tests } -TRSVGPathTest >> testDefault [ - | path | - path := TRSVGPath new. - self assert: path height equals: 0. - self assert: path width equals: 0. -] - -{ #category : #tests } -TRSVGPathTest >> testReaderColombia [ - | path | - path := TRSVGPath new. - path path: 'm 578.3,497.2 1.2,-2.1 -1.3,-1.7 -2,-0.4 -2.9,3.1 -2.3,1.4 -4.6,3.2 -4.3,-0.5 -0.5,1.3 -3.6,0.1 -3.3,3 -1.4,5.4 -0.1,2.1 -2.4,0.7 -4.4,4.4 -2.9,-0.2 -0.7,0.9 1.1,3.8 -1.1,1.9 -1.8,-0.5 -0.9,3.1 2.2,3.4 0.6,5.4 -1.2,1.6 1.1,5.9 -1.2,3.7 2,1.5 -2.2,3.3 -2.5,4 -2.8,0.4 -1.4,2.3 0.2,3.2 -2.1,0.5 0.8,2 5.6,3.6 1,-0.1 1.4,2.7 4.7,0.9 1.6,-1 2.8,2.1 2.4,1.5 1.5,-0.6 3.7,3 1.8,3 2.7,1.7 3.4,6.7 4.2,0.8 3,-1.7 2.1,1.1 3.3,-0.6 4.4,3 -3.5,6.5 1.7,0.1 2.9,3.4 2.2,-17.4 0.1,-2.8 -0.9,-3.6 -2.5,-2.4 0,-4.6 3.2,-1 1.1,0.6 0.2,-2.4 -3.3,-0.7 0,-3.9 10.9,0.1 1.9,-2.2 1.6,2 1,3.8 1.1,-0.8 -1.7,-6.4 -1.4,-2.2 -2,-1.4 2.9,-3.1 -0.2,-1.5 -1.5,-1.9 -1,-4.2 0.5,-4.6 1.3,-2.1 1.2,-3.4 -2,-1.1 -3.2,0.7 -4,-0.3 -2.3,0.7 -3.8,-5.5 -3.2,-0.8 -7.2,0.6 -1.3,-2.2 -1.3,-0.6 -0.2,-1.3 0.8,-2.4 -0.4,-2.5 -1.1,-1.4 -0.6,-2.9 -2.9,-0.5 1.8,-3.7 0.9,-4.5 1.8,-2.4 2.2,-1.8 1.6,-3.2 3.7,-1.1 z'. - self assert: path curves size > 2. -] diff --git a/src/Trachel/TRShape.class.st b/src/Trachel/TRShape.class.st deleted file mode 100644 index f22ed59d3..000000000 --- a/src/Trachel/TRShape.class.st +++ /dev/null @@ -1,501 +0,0 @@ -Class { - #name : #TRShape, - #superclass : #TRCallableObject, - #instVars : [ - 'canvas', - 'color', - 'path', - 'strokePaint', - 'announcer', - 'element', - 'matrix', - 'rotationAngleDegrees', - 'session', - 'isVisible' - ], - #category : #'Trachel-Shapes' -} - -{ #category : #visitor } -TRShape >> accept: aVisitor [ - aVisitor visitShape: self -] - -{ #category : #actions } -TRShape >> addedIn: aCanvas [ - "This method is called whenever the shape is added to the canvas" - aCanvas privateAdd: self. - self canvas: aCanvas -] - -{ #category : #actions } -TRShape >> addedIn: aCanvas atIndex: index [ - aCanvas privateAdd: self atIndex: index. - self canvas: aCanvas -] - -{ #category : #accessing } -TRShape >> allColor: aColor [ - self color: aColor -] - -{ #category : #accessing } -TRShape >> angleInDegrees [ - ^ rotationAngleDegrees -] - -{ #category : #events } -TRShape >> announce: anEvent [ - self announcer announce: anEvent -] - -{ #category : #events } -TRShape >> announcer [ - announcer isNil ifTrue: [ announcer := Announcer new ]. - ^ announcer -] - -{ #category : #events } -TRShape >> announcer: anAnnouncer [ - announcer := anAnnouncer -] - -{ #category : #accessing } -TRShape >> athensCanvas [ - ^ self canvas athensCanvas -] - -{ #category : #private } -TRShape >> basicEncompassingRectangle [ - ^ self subclassResponsibility -] - -{ #category : #accessing } -TRShape >> canvas [ - "Return a Trachel Canvas" - ^ canvas -] - -{ #category : #accessing } -TRShape >> canvas: aTRCanvas [ - "aCanvas is a TRCanvas" - canvas := aTRCanvas -] - -{ #category : #accessing } -TRShape >> center [ - self subclassResponsibility -] - -{ #category : #accessing } -TRShape >> color [ - - ^ color -] - -{ #category : #accessing } -TRShape >> color: aColor [ - "Set the color of the shape" - color := aColor -] - -{ #category : #private } -TRShape >> computePath [ - self subclassResponsibility -] - -{ #category : #drawing } -TRShape >> drawEncompassingRectangleOn: athensCanvas [ - "debugging purpose" - self drawEncompassingRectangleOn: athensCanvas color: (Color blue alpha: 0.2) -] - -{ #category : #drawing } -TRShape >> drawEncompassingRectangleOn: athensCanvas color: aColor [ - "debugging purpose" - | r tpath | - r := self encompassingRectangle. - tpath := athensCanvas - createPath: [ :builder | - builder absolute; moveTo: r topLeft; lineTo: r topRight; - lineTo: r bottomRight; lineTo: r bottomLeft; lineTo: r topLeft ]. - athensCanvas pathTransform - restoreAfter: [ - athensCanvas - setPaint: aColor; - drawShape: tpath ]. -] - -{ #category : #drawing } -TRShape >> drawOn: athensCanvas [ - | pt | - "Maybe here, we need to insert the stroke" - pt := athensCanvas pathTransform. - pt restoreAfter: [ - pt scaleBy: matrix sx @ matrix sy. - - athensCanvas - setPaint: self themedColor; - drawShape: self path. - - athensCanvas - setStrokePaint: self themedStrokeColor; - drawShape: self path ] -] - -{ #category : #accessing } -TRShape >> element [ - "A shape has a reference to an object, typically the object odel that the trachel shape represents" - ^ element -] - -{ #category : #accessing } -TRShape >> element: anObject [ - "anObject could be any kind of object. A shape has a reference to an object, typically the object odel that the trachel shape represents" - element := anObject -] - -{ #category : #accessing } -TRShape >> encompassingRectangle [ - self subclassResponsibility -] - -{ #category : #geometry } -TRShape >> extent: anExtent [ - "do nothing here. This method may be overriden for particular behavior" -] - -{ #category : #testing } -TRShape >> hasCallback [ - "Return true if at least one callback has been added to the shape" - ^ callbacks notNil -] - -{ #category : #testing } -TRShape >> hasEventCallback [ - "Return true if at least one event callback has been added to the shape" - ^ announcer notNil and: [ announcer numberOfSubscriptions > 0 ] -] - -{ #category : #accessing } -TRShape >> height [ - ^ self encompassingRectangle height -] - -{ #category : #actions } -TRShape >> hide [ - "Make the element not visible. Note that an hidden element can be in the canvas" - isVisible := false -] - -{ #category : #testing } -TRShape >> includesPoint: aPoint [ - ^ false -] - -{ #category : #accessing } -TRShape >> indexInCanvas [ - "Return the index of myself in the list shapes, in the canvas" - ^ canvas privateIndexInCanvasOf: self -] - -{ #category : #initialization } -TRShape >> initialize [ - super initialize. - color := self theme transformColor: Color gray. - strokePaint := self theme transformColor: Color black. - matrix := TRPlatform current affineTransformClass new. - rotationAngleDegrees := 0. - self position: 0 @ 0. - isVisible := true. - session := TRPlatform current session. -] - -{ #category : #testing } -TRShape >> isFixed [ - "Return true if the shape is fixed, not subject to the camera therefore" - ^ self canvas fixedShapes includes: self -] - -{ #category : #testing } -TRShape >> isHidden [ - "Return true if the element is not visible" - ^ isVisible negated -] - -{ #category : #testing } -TRShape >> isInACanvas [ - ^ canvas notNil -] - -{ #category : #testing } -TRShape >> isLineShape [ - ^ false -] - -{ #category : #testing } -TRShape >> isMarkedAsVisible [ - "Return true if the element is visible" - ^ isVisible -] - -{ #category : #testing } -TRShape >> isMovable [ - "Return if the shape is not fixed, therefore movable." - ^ self canvas isMovableShape: self -] - -{ #category : #testing } -TRShape >> isNotFixed [ - - ^ self isMovable -] - -{ #category : #testing } -TRShape >> isVisible [ - "Return true if the element is being seen by the camera" - ^ self canvas camera isVisible: self -] - -{ #category : #accessing } -TRShape >> matrix [ - "Return the matrix behind the shape" - ^ matrix -] - -{ #category : #actions } -TRShape >> noBorder [ - "Remove the border from the shape" - self strokePaint: nil -] - -{ #category : #private } -TRShape >> path [ - session == TRPlatform current session - ifFalse: [ path := nil ]. - path ifNil: [ - self computePath. - session := TRPlatform current session ]. - ^ path -] - -{ #category : #accessing } -TRShape >> position [ - ^ matrix x @ matrix y -] - -{ #category : #private } -TRShape >> position: aPosition [ - matrix translation: aPosition -] - -{ #category : #actions } -TRShape >> pushBack [ - canvas ifNil: [ self error: 'Cannot push back since the it has not been added into a view or a canvas' ]. - canvas pushBack: self - - -] - -{ #category : #actions } -TRShape >> pushBehind: aShape [ - canvas push: self behind: aShape -] - -{ #category : #actions } -TRShape >> pushBehindAll: manyShapes [ - self canvas push: self behindAll: manyShapes -] - -{ #category : #actions } -TRShape >> pushFront [ - "Move the shaped object in front of other elements" - canvas pushFront: self - - -] - -{ #category : #actions } -TRShape >> remove [ - "Do nothing if the line is not already in a canvas" - self isInACanvas ifFalse: [ ^ self ]. - canvas removeShape: self -] - -{ #category : #'actions - replacing' } -TRShape >> replaceShapeBy: anotherTrachelShape [ - "Replace a shape by another one. The new shape get the position and the extent of the previous shape" - - " - Here is an example: -| v s | -v := RTView new. -s := RTVisualID new. -v add: (s elementOn: 'ignacio'). -v add: (s elementOn: 'ignacia'). - -es := v elements. -RTGridLayout on: es. - -es @ RTPopup. - -es when: TRMouseClick do: [ :evt | evt element trachelShape replaceShapeBy: (TREllipseShape new color: Color red). v signalUpdate ]. -^ v - - " - - self canvas addShape: anotherTrachelShape. - anotherTrachelShape extent: self extent. - self remove. - anotherTrachelShape translateTo: self position -] - -{ #category : #private } -TRShape >> resetPath [ - path := nil -] - -{ #category : #transformations } -TRShape >> rotateByDegrees: angle [ - rotationAngleDegrees := rotationAngleDegrees + angle. - matrix rotateByDegrees: angle -] - -{ #category : #transformations } -TRShape >> rotateToDegrees: anAngle [ - ^ self rotateByDegrees: anAngle - rotationAngleDegrees. -] - -{ #category : #accessing } -TRShape >> scale [ - "Return the scale of the shape" - ^ matrix scale -] - -{ #category : #transformations } -TRShape >> scaleBy: anInteger [ - matrix scaleBy: anInteger. -] - -{ #category : #actions } -TRShape >> setAsFixed [ - self canvas - ifNil: [ self error: 'You should first insert the shape in the canvas before setting it as fixed'. ]. - self canvas setAsFixed: self. - -] - -{ #category : #actions } -TRShape >> setAsNotFixed [ - canvas removeFixedShape: self. - canvas addShape: self. -] - -{ #category : #testing } -TRShape >> shouldBeDrawn [ - ^ true -] - -{ #category : #actions } -TRShape >> show [ - "Make the element not visible. Note that an hidden element can be in the canvas" - isVisible := true -] - -{ #category : #actions } -TRShape >> signalUpdate [ - "Refresh the canvas" - canvas ifNil: [ ^ self ]. - canvas signalUpdate -] - -{ #category : #accessing } -TRShape >> strokePaint [ - "Return the color of the border line" - ^ strokePaint -] - -{ #category : #accessing } -TRShape >> strokePaint: aColor [ - "set the color of the border line" - [ aColor isNil or: [ aColor isColor ] ] assert. - strokePaint := aColor -] - -{ #category : #accessing } -TRShape >> theme [ - "Return the theme used by the Canvas" - canvas ifNil: [ ^ TRWhiteTheme default ]. - ^ canvas theme -] - -{ #category : #accessing } -TRShape >> themedColor [ - "Return the color that has been themed" - ^ self theme transformColor: color -] - -{ #category : #accessing } -TRShape >> themedStrokeColor [ - "Return the stroke color that has been themed" - ^ self theme transformColor: strokePaint -] - -{ #category : #accessing } -TRShape >> trachelShape [ - "To be compatible with RTElement" - ^ self - -] - -{ #category : #private } -TRShape >> transformedEncompassingRectangle [ - "Not all shapes are alredy using matrix. - For that reason we have this method. - For straight-forward version where the matrix is just a movement we move it directly for performance reasons. - " - | basicRectangle rotatedRectangle topLeft topRight bottomRight bottomLeft p1 p2 p3 p4 | - basicRectangle := self basicEncompassingRectangle. - (matrix sx = 1) & (matrix sy = 1) & (matrix shx = 0) & (matrix shy = 0) ifTrue: [ - ^ basicRectangle translateBy: (matrix x value@ matrix y value) - ]. - topLeft := matrix transform: basicRectangle topLeft. - topRight := matrix transform: basicRectangle topRight. - bottomRight := matrix transform: basicRectangle bottomRight. - bottomLeft := matrix transform: basicRectangle bottomLeft. - - p1 := OrderedCollection new add: topLeft x; add: topRight x; add: bottomRight x; add: bottomLeft x; yourself. - p2 := OrderedCollection new add: topLeft y; add: topRight y; add: bottomRight y; add: bottomLeft y; yourself. - p3 := OrderedCollection new add: topLeft x; add: topRight x; add: bottomRight x; add: bottomLeft x; yourself. - p4 := OrderedCollection new add: topLeft y; add: topRight y; add: bottomRight y; add: bottomLeft y; yourself. - - rotatedRectangle := - (p1 min @ p2 min) corner: - (p3 max @ p4 max). - ^ rotatedRectangle -] - -{ #category : #actions } -TRShape >> translateBy: aPoint [ - self position: self position + aPoint. - self triggerCallbacksForStep: aPoint -] - -{ #category : #actions } -TRShape >> translateTo: aPoint [ - | oldPosition | - oldPosition := self position. - self position: aPoint. - self triggerCallbacksForStep: (self position - oldPosition) -] - -{ #category : #events } -TRShape >> when: event do: aBlock [ - self announcer when: event do: aBlock -] - -{ #category : #accessing } -TRShape >> width [ - "Return the width of the shape" - ^ self encompassingRectangle width -] diff --git a/src/Trachel/TRShapeEvent.class.st b/src/Trachel/TRShapeEvent.class.st deleted file mode 100644 index d957d7c54..000000000 --- a/src/Trachel/TRShapeEvent.class.st +++ /dev/null @@ -1,34 +0,0 @@ -Class { - #name : #TRShapeEvent, - #superclass : #TREvent, - #instVars : [ - 'shape' - ], - #category : #'Trachel-Events' -} - -{ #category : #'instance creation' } -TRShapeEvent class >> shape: aTrachelShape [ - ^ self new shape: aTrachelShape; yourself -] - -{ #category : #accessing } -TRShapeEvent >> element [ - "Could be any object" - - ^ self shape class = TRCanvas - ifTrue: [ nil ] - ifFalse: [ self shape element ] -] - -{ #category : #accessing } -TRShapeEvent >> shape [ - - ^ shape -] - -{ #category : #accessing } -TRShapeEvent >> shape: aTrachelShape [ - - shape := aTrachelShape -] diff --git a/src/Trachel/TRShapeTest.class.st b/src/Trachel/TRShapeTest.class.st deleted file mode 100644 index b44b489b0..000000000 --- a/src/Trachel/TRShapeTest.class.st +++ /dev/null @@ -1,461 +0,0 @@ -Class { - #name : #TRShapeTest, - #superclass : #TRTest, - #category : #'Trachel-Tests' -} - -{ #category : #position } -TRShapeTest >> shapesForPositionTest [ - - ^ Array with: TRBoxShape with: TREllipseShape with: TRSVGPath with: TRBitmapShape with: TRLabelShape. -] - -{ #category : #callback } -TRShapeTest >> testAddingCallback [ - - | t c s canvas | - t := OrderedCollection new. - c := TRAddedCallback new. - c block: [ :aShape | t add: aShape ]. - self assert: t isEmpty. - - s := TRBoxShape new size: 30. - s addCallback: c. - self assert: t isEmpty. - - canvas := TRCanvas new. - canvas addShape: s. - self deny: t isEmpty. - self assert: t size equals: 1. - self assert: t anyOne equals: s -] - -{ #category : #callback } -TRShapeTest >> testAddingCallbackWithFixed [ - - | t c s canvas | - t := OrderedCollection new. - c := TRAddedCallback new. - c block: [ :aShape | t add: aShape ]. - self assert: t isEmpty. - - s := TRBoxShape new size: 30. - s addCallback: c. - self assert: t isEmpty. - - canvas := TRCanvas new. - canvas addShape: s. - s setAsFixed. - self deny: t isEmpty. - self assert: t size equals: 1. - self assert: t anyOne equals: s -] - -{ #category : #NoShape } -TRShapeTest >> testAddingNoShape [ - - | c | - c := TRCanvas new. - c addShape: (TRNoShape new). - self assert: c numberOfShapes = 0 -] - -{ #category : #bitmap } -TRShapeTest >> testBitmapIncludesPoint [ - - | s c | - s := TRBitmapShape new form: (TRPlatform current newFormWithExtent: 20 @ 20 depth: 32). - c := TRCanvas new. - c addShape: s. - - self assert: (s includesPoint: 0 @ 0). - self assert: (s includesPoint: -9 @ -9). - self assert: (s includesPoint: 9 @ 9). - self deny: (s includesPoint: 19 @ 19). -] - -{ #category : #bitmap } -TRShapeTest >> testBitmapWidth [ - - self assert: (TRBitmapShape new form: (TRPlatform current newColorFormWithExtent: 20 @ 20 depth: 32)) width equals: 20 -] - -{ #category : #composite } -TRShapeTest >> testBoxTransformation [ - - | canvas box | - canvas := TRCanvas new. - box := TRBoxShape new size: 10. - canvas addShape: box. - "regular rectangle" - self assert: box position equals: 0 @ 0. - self assert: box encompassingRectangle equals: (-5 @ -5 corner: 5 @ 5). - self assert: box encompassingRectangle center equals: box position. - self assert: box width equals: 10. - self assert: box height equals: 10. - self assert: box extent equals: 10 @ 10. - self assert: (box includesPoint: 0 @ 0). - self deny: (box includesPoint: 10 @ 10). - "translated rectangle" - box translateTo: 10@10. - self assert: box position equals: 10 @ 10. - self assert: box encompassingRectangle equals: (5 @ 5 corner: 15 @ 15). - self assert: box encompassingRectangle center equals: box position. - self assert: box width equals: box encompassingRectangle width. - self assert: box height equals: box encompassingRectangle height. - self assert: box extent equals: box encompassingRectangle extent. - self assert: (box includesPoint: 5 @ 5). - self deny: (box includesPoint: 4 @ 10). - "rotated rectangle" - box rotateByDegrees: 45. - self assert: box position equals: 10 @ 10. - self assert: box encompassingRectangle rounded equals: (3 @ 3 corner: 17 @ 17). - self assert: box encompassingRectangle center equals: box position. - self assert: box width equals: box encompassingRectangle width. - self assert: box height equals: box encompassingRectangle height. - self assert: box extent equals: box encompassingRectangle extent. - self assert: (box includesPoint: 10 @ 4). - self deny: (box includesPoint: 6 @ 6). - "scaled rectangle" - box scaleBy: 2. - self assert: box position equals: 10 @ 10. - self assert: box encompassingRectangle rounded equals: (-4 @ -4 corner: 24 @ 24). - self assert: box encompassingRectangle center equals: box position. - self assert: box width equals: box encompassingRectangle width. - self assert: box height equals: box encompassingRectangle height. - self assert: box extent equals: box encompassingRectangle extent. - self assert: (box includesPoint: 10 @ -3). - self deny: (box includesPoint: 0 @ 0). - "translated rectangle" - box translateTo: 20 @ 20. - self assert: box position equals: 20 @ 20. - self assert: box encompassingRectangle rounded equals: (6 @ 6 corner: 34 @ 34). - self assert: box encompassingRectangle center equals: box position. - self assert: box width equals: box encompassingRectangle width. - self assert: box height equals: box encompassingRectangle height. - self assert: box extent equals: box encompassingRectangle extent. - self assert: (box includesPoint: 20 @ 7). - self deny: (box includesPoint: 10 @ 10). - "back to regular rectangle" - box rotateByDegrees: -45. - box scaleBy: 0.5. - self assert: box position equals: 20 @ 20. - self assert: box encompassingRectangle equals: (15 @ 15 corner: 25 @ 25). - self assert: box encompassingRectangle center equals: box position. - self assert: box width equals: box encompassingRectangle width. - self assert: box height equals: box encompassingRectangle height. - self assert: box extent equals: box encompassingRectangle extent. - self assert: (box includesPoint: 16 @ 16). - self deny: (box includesPoint: 10 @ 10). - "set width" - box width: 20. - self assert: box position equals: 20 @ 20. - self assert: box encompassingRectangle rounded equals: (10 @ 15 corner: 30 @ 25). - self assert: box encompassingRectangle center equals: box position. - self assert: box width equals: 20. - self assert: box height equals: 10. - self assert: box extent equals: 20 @ 10. - "set height" - box height: 20. - self assert: box position equals: 20 @ 20. - self assert: box encompassingRectangle rounded equals: (10 @ 10 corner: 30 @ 30). - self assert: box encompassingRectangle center equals: box position. - self assert: box width equals: 20. - self assert: box height equals: 20. - self assert: box extent equals: 20 @ 20. - "set extent" - box extent: 30 @ 30. - self assert: box position equals: 20 @ 20. - self assert: box encompassingRectangle rounded equals: (5 @ 5 corner: 35 @ 35). - self assert: box encompassingRectangle center equals: box position. - self assert: box width equals: 30. - self assert: box height equals: 30. - self assert: box extent equals: 30 @ 30. - -] - -{ #category : #lines } -TRShapeTest >> testCenterOnALine [ - - | c l | - c := TRCanvas new. - - l := TRLineShape new from: 50 @ 50 to: 120 @ 100. - - c addShape: l. - - self assert: l center = (85 @ 75) - -] - -{ #category : #composite } -TRShapeTest >> testEllipseTransformation [ - - | canvas ellipse | - canvas := TRCanvas new. - ellipse := TREllipseShape new size: 10. - canvas addShape: ellipse. - "regular rectangle" - self assert: ellipse position equals: 0 @ 0. - self assert: ellipse encompassingRectangle equals: (-5 @ -5 corner: 5 @ 5). - self assert: ellipse encompassingRectangle center equals: ellipse position. - self assert: ellipse width equals: 10. - self assert: ellipse height equals: 10. - self assert: ellipse extent equals: 10 @ 10. - self assert: (ellipse includesPoint: 0 @ 0). - self deny: (ellipse includesPoint: 10 @ 10). - "translated rectangle" - ellipse translateTo: 10@10. - self assert: ellipse position equals: 10 @ 10. - self assert: ellipse encompassingRectangle equals: (5 @ 5 corner: 15 @ 15). - self assert: ellipse encompassingRectangle center equals: ellipse position. - self assert: ellipse width equals: ellipse encompassingRectangle width. - self assert: ellipse height equals: ellipse encompassingRectangle height. - self assert: ellipse extent equals: ellipse encompassingRectangle extent. - self assert: (ellipse includesPoint: 7 @ 7). - self deny: (ellipse includesPoint: 4 @ 10). - "rotated rectangle" - ellipse rotateByDegrees: 45. - self assert: ellipse position equals: 10 @ 10. - self assert: ellipse encompassingRectangle rounded equals: (3 @ 3 corner: 17 @ 17). - self assert: ellipse encompassingRectangle center equals: ellipse position. - self assert: ellipse width equals: ellipse encompassingRectangle width. - self assert: ellipse height equals: ellipse encompassingRectangle height. - self assert: ellipse extent equals: ellipse encompassingRectangle extent. - self assert: (ellipse includesPoint: 10 @ 7). - self deny: (ellipse includesPoint: 6 @ 6). - "scaled rectangle" - ellipse scaleBy: 2. - self assert: ellipse position equals: 10 @ 10. - self assert: ellipse encompassingRectangle rounded equals: (-4 @ -4 corner: 24 @ 24). - self assert: ellipse encompassingRectangle center equals: ellipse position. - self assert: ellipse width equals: ellipse encompassingRectangle width. - self assert: ellipse height equals: ellipse encompassingRectangle height. - self assert: ellipse extent equals: ellipse encompassingRectangle extent. - self assert: (ellipse includesPoint: 10 @ 0). - self deny: (ellipse includesPoint: 0 @ 0). - "translated rectangle" - ellipse translateTo: 20 @ 20. - self assert: ellipse position equals: 20 @ 20. - self assert: ellipse encompassingRectangle rounded equals: (6 @ 6 corner: 34 @ 34). - self assert: ellipse encompassingRectangle center equals: ellipse position. - self assert: ellipse width equals: ellipse encompassingRectangle width. - self assert: ellipse height equals: ellipse encompassingRectangle height. - self assert: ellipse extent equals: ellipse encompassingRectangle extent. - self assert: (ellipse includesPoint: 20 @ 14). - self deny: (ellipse includesPoint: 10 @ 10). - "back to regular rectangle" - ellipse rotateByDegrees: -45. - ellipse scaleBy: 0.5. - self assert: ellipse position equals: 20 @ 20. - self assert: ellipse encompassingRectangle equals: (15 @ 15 corner: 25 @ 25). - self assert: ellipse encompassingRectangle center equals: ellipse position. - self assert: ellipse width equals: ellipse encompassingRectangle width. - self assert: ellipse height equals: ellipse encompassingRectangle height. - self assert: ellipse extent equals: ellipse encompassingRectangle extent. - self assert: (ellipse includesPoint: 17 @ 17). - self deny: (ellipse includesPoint: 10 @ 10). - "set width" - ellipse width: 20. - self assert: ellipse position equals: 20 @ 20. - self assert: ellipse encompassingRectangle rounded equals: (10 @ 15 corner: 30 @ 25). - self assert: ellipse encompassingRectangle center equals: ellipse position. - self assert: ellipse width equals: 20. - self assert: ellipse height equals: 10. - self assert: ellipse extent equals: 20 @ 10. - "set height" - ellipse height: 20. - self assert: ellipse position equals: 20 @ 20. - self assert: ellipse encompassingRectangle rounded equals: (10 @ 10 corner: 30 @ 30). - self assert: ellipse encompassingRectangle center equals: ellipse position. - self assert: ellipse width equals: 20. - self assert: ellipse height equals: 20. - self assert: ellipse extent equals: 20 @ 20. - "set extent" - ellipse extent: 30 @ 30. - self assert: ellipse position equals: 20 @ 20. - self assert: ellipse encompassingRectangle rounded equals: (5 @ 5 corner: 35 @ 35). - self assert: ellipse encompassingRectangle center equals: ellipse position. - self assert: ellipse width equals: 30. - self assert: ellipse height equals: 30. - self assert: ellipse extent equals: 30 @ 30. - -] - -{ #category : #callback } -TRShapeTest >> testHasCallback [ - | s | - s := TRBoxShape new. - self deny: s hasEventCallback. - s when: TRMouseClick do: [ :e | ]. - self assert: s hasEventCallback. -] - -{ #category : #fixed } -TRShapeTest >> testIsFixed [ - - | c s | - c := TRCanvas new. - - s := TRBoxShape new size: 30. - c addShape: s. - s setAsFixed. - - self assert: s isFixed. - self assert: (c fixedShapes includes: s). - s remove. - self deny: (c fixedShapes includes: s). - - -] - -{ #category : #fixed } -TRShapeTest >> testIsFixed02 [ - - | c s | - c := TRCanvas new. - - s := TRBoxShape new size: 30. - c addShape: s. - s setAsFixed. - - s pushFront -] - -{ #category : #callback } -TRShapeTest >> testNumberOfCallbacks [ - | s | - s := TRBoxShape new. - self assert: s numberOfCallbacks equals: 0. - s addCallback: (TRExtentCallback new). - self assert: s numberOfCallbacks equals: 1 -] - -{ #category : #position } -TRShapeTest >> testPosition [ - - self shapesForPositionTest do: [ :s | | eachShapeClass | - eachShapeClass := TRBoxShape new. - eachShapeClass translateTo: 10 @ 20. - self assert: eachShapeClass position = (10 @ 20) - ] -] - -{ #category : #position } -TRShapeTest >> testPositionDefault [ - - self shapesForPositionTest do: [ :eachShapeClass | - self assert: eachShapeClass new position equals: (0 @ 0) - ] -] - -{ #category : #position } -TRShapeTest >> testPositionDefaultCenteredSVGPath [ - | svg rectangle | - svg := TRSVGPath new centeredPath: 'M 0 0 L 30 10 L 20 30 z'. - rectangle := (Rectangle encompassing: (Array with: 0@0 with: 30@10 with: 20@30) ). - self assert: svg position equals: (0 @ 0). - self assert: svg center equals: (0 @ 0). - self deny: svg position = rectangle center. -] - -{ #category : #position } -TRShapeTest >> testPositionDefaultSVGPath [ - | svg rectangle | - svg := TRSVGPath new path: 'M 0 0 L 30 10 L 20 30 z'. - rectangle := (Rectangle encompassing: (Array with: 0@0 with: 30@10 with: 20@30)). - self assert: svg position equals: (0 @ 0). - self assert: svg center equals: rectangle center. - self deny: svg position = rectangle center. -] - -{ #category : #position } -TRShapeTest >> testPositionWithFloats [ - - | box | - box := TRBoxShape new. - box translateTo: 1.1234 @ 1.1234. - self assert: box position = (1.1234 @ 1.1234) -] - -{ #category : #removing } -TRShapeTest >> testRemoving [ - | t callback shape canvas | - t := nil. - callback := TRRemoveCallback new. - callback block: [ :aShape | t := aShape hash ]. - - shape := TRBoxShape new size: 20. - shape addCallback: callback. - - canvas := TRCanvas new. - self assert: canvas numberOfShapes equals: 0. - canvas addShape: shape. - shape translateBy: 5 @ 5. - self assert: t isNil. - - self assert: canvas numberOfShapes equals: 1. - shape remove. - self assert: t equals: shape hash. - self assert: canvas numberOfShapes equals: 0. -] - -{ #category : #replacing } -TRShapeTest >> testReplacing01 [ - | c s1 s2 | - c := TRCanvas new. - s1 := TRBoxShape new extent: 30 @ 40; color: Color red. - s2 := TRBoxShape new extent: 50 @ 20; color: Color green. - c addShape: s1. - s1 translateBy: 5 @ 5. - - self assert: s1 canvas == c. - self assert: s2 canvas ~~ c. - - self assert: s1 extent ~= s2 extent. - self assert: s1 position ~= s2 position. - - s1 replaceShapeBy: s2. - self assert: s1 canvas ~~ c. - self assert: s2 canvas == c. - - self assert: s1 extent = s2 extent. - self assert: s1 position = s2 position. - -] - -{ #category : #position } -TRShapeTest >> testScaleBox [ - - | box | - box := TRBoxShape new. - box scaleBy: 2.0. - self assert: box scale equals: 2.0 @ 2.0. -] - -{ #category : #position } -TRShapeTest >> testScaleSVG [ - - | svg rectangle scaledRectangle | - svg := TRSVGPath new path: 'M 0 0 L 30 10 L 20 30 z'. - rectangle := svg encompassingRectangle. - svg scaleBy: 2.0. - scaledRectangle := svg encompassingRectangle. - self assert: svg scale equals: 2.0 @ 2.0. - self deny: rectangle = scaledRectangle. - self assert: rectangle width * 2.0 equals: scaledRectangle width. - self assert: rectangle height * 2.0 equals: scaledRectangle height. -] - -{ #category : #visible } -TRShapeTest >> testVisible [ - | b | - b := TRBoxShape new. - self assert: b isMarkedAsVisible. - - b hide. - self deny: b isMarkedAsVisible. - - b show. - self assert: b isMarkedAsVisible. -] diff --git a/src/Trachel/TRSimpleArrowShape.class.st b/src/Trachel/TRSimpleArrowShape.class.st deleted file mode 100644 index 0d8488ff5..000000000 --- a/src/Trachel/TRSimpleArrowShape.class.st +++ /dev/null @@ -1,43 +0,0 @@ -Class { - #name : #TRSimpleArrowShape, - #superclass : #TRAbstractArrowHeadShape, - #category : #'Trachel-ShapesForArrow' -} - -{ #category : #visitor } -TRSimpleArrowShape >> accept: aVisitor [ - aVisitor visitArrowShape: self -] - -{ #category : #hooks } -TRSimpleArrowShape >> computePath [ - | vector u unit middle endPoint | - self shouldBeDrawn ifFalse: [ ^ self ]. - vector := self to - self from. - u := vector normal. - unit := vector / vector r. - endPoint := self to - (vector * (1-percentage)). - middle := endPoint - (unit * size). - left := middle - (u * baseSize / 2). - right := middle + (u * baseSize / 2). - path := self athensCanvas - createPath: [ :builder | - builder - absolute; - moveTo: left; - lineTo: endPoint; - lineTo: right. ] -] - -{ #category : #initialization } -TRSimpleArrowShape >> initialize [ - super initialize. - open := true. - -] - -{ #category : #hooks } -TRSimpleArrowShape >> shouldBeDrawn [ - "Return true if the arrow head should be drawn" - ^ self to ~= self from -] diff --git a/src/Trachel/TRSolarizedTheme.class.st b/src/Trachel/TRSolarizedTheme.class.st deleted file mode 100644 index 301605f1a..000000000 --- a/src/Trachel/TRSolarizedTheme.class.st +++ /dev/null @@ -1,90 +0,0 @@ -Class { - #name : #TRSolarizedTheme, - #superclass : #TRTheme, - #category : #'Trachel-Core-Theme' -} - -{ #category : #hooks } -TRSolarizedTheme >> background [ - self subclassResponsibility -] - -{ #category : #'solarized colors' } -TRSolarizedTheme >> base0 [ - ^ Color fromRgb256Triplet: #(131 148 150) -] - -{ #category : #'solarized colors' } -TRSolarizedTheme >> base00 [ - ^ Color fromRgb256Triplet: #(101 123 131) -] - -{ #category : #'solarized colors' } -TRSolarizedTheme >> base01 [ - ^ Color fromRgb256Triplet: #(88 110 117) -] - -{ #category : #'solarized colors' } -TRSolarizedTheme >> base02 [ - ^ Color fromRgb256Triplet: #(7 54 66) -] - -{ #category : #'solarized colors' } -TRSolarizedTheme >> base03 [ - ^ Color fromRgb256Triplet: #(0 43 54) -] - -{ #category : #'solarized colors' } -TRSolarizedTheme >> base1 [ - ^ Color fromRgb256Triplet: #(147 161 161) -] - -{ #category : #'solarized colors' } -TRSolarizedTheme >> base2 [ - ^ Color fromRgb256Triplet: #(238 232 213) -] - -{ #category : #'solarized colors' } -TRSolarizedTheme >> base3 [ - ^ Color fromRgb256Triplet: #(253 246 227) -] - -{ #category : #'solarized colors' } -TRSolarizedTheme >> blue [ - ^ Color fromRgb256Triplet: #(38 139 210) -] - -{ #category : #'solarized colors' } -TRSolarizedTheme >> cyan [ - ^ Color fromRgb256Triplet: #(42 161 152) -] - -{ #category : #'solarized colors' } -TRSolarizedTheme >> green [ - ^ Color fromRgb256Triplet: #(133 153 0) -] - -{ #category : #'solarized colors' } -TRSolarizedTheme >> magenta [ - ^ Color fromRgb256Triplet: #(211 54 130) -] - -{ #category : #'solarized colors' } -TRSolarizedTheme >> orange [ - ^ Color fromRgb256Triplet: #(203 75 22) -] - -{ #category : #'solarized colors' } -TRSolarizedTheme >> red [ - ^ Color fromRgb256Triplet: #(220 50 47) -] - -{ #category : #'solarized colors' } -TRSolarizedTheme >> violet [ - ^ Color fromRgb256Triplet: #(108 113 196) -] - -{ #category : #'solarized colors' } -TRSolarizedTheme >> yellow [ - ^ Color fromRgb256Triplet: #(181 137 0) -] diff --git a/src/Trachel/TRStyledLabelShape.class.st b/src/Trachel/TRStyledLabelShape.class.st deleted file mode 100644 index bfcda00c8..000000000 --- a/src/Trachel/TRStyledLabelShape.class.st +++ /dev/null @@ -1,84 +0,0 @@ -Class { - #name : #TRStyledLabelShape, - #superclass : #TRLabelShape, - #instVars : [ - 'emphasis' - ], - #category : #'Trachel-Shapes' -} - -{ #category : #utility } -TRStyledLabelShape class >> getFontNamed: aFontName forSize: aNumber emphasis: anEmphasis [ - ^ (self getFontNamed: aFontName ForSize: aNumber) - emphasized: (anEmphasis inject: 0 into: [ :sum :next | sum + next emphasisCode ]) -] - -{ #category : #utility } -TRStyledLabelShape class >> widthOfText: aString fontName: aFontName fontSize: aNumber emphasis: anEmphasis [ - ^ (self getFontNamed: aFontName forSize: aNumber emphasis: anEmphasis) - widthOfString: aString -] - -{ #category : #drawing } -TRStyledLabelShape >> drawOn: athensCanvas [ - "self drawEncompassingRectangleOn: athensCanvas." - athensCanvas pathTransform - restoreAfter: - [ | advance cls | - cls := TRPlatform current textEmphasisClass. - athensCanvas pathTransform - multiplyBy: matrix asFloatTransform; - translateBy: ((self textWidth / -2) @ (self textHeight / 2)) asFloatPoint; - translateBy: (0 @ self descent negated) asFloatPoint. - athensCanvas setFont: font. - athensCanvas setPaint: color. - advance := athensCanvas drawString: text. - (emphasis includes: cls underlined) - ifTrue: [ athensCanvas drawShape: (0 @ 1 extent: advance x @ 1) ]. - (emphasis includes: cls struckOut) - ifTrue: - [ athensCanvas pathTransform - translateBy: (0 @ (self textHeight / 4) negated) asFloatPoint. - athensCanvas drawShape: (0 @ 1 extent: advance x @ 1) ] ] -] - -{ #category : #accessing } -TRStyledLabelShape >> emphasis: anEmphasis [ - emphasis := anEmphasis isCollection - ifTrue: [ anEmphasis ] - ifFalse: [ Array with: anEmphasis ]. - self updateFont -] - -{ #category : #accessing } -TRStyledLabelShape >> fontName: aFontName [ - fontName := aFontName. - self updateFont -] - -{ #category : #accessing } -TRStyledLabelShape >> fontSize: aNumber [ - fontSize := aNumber. - self updateFont -] - -{ #category : #'managing font' } -TRStyledLabelShape >> getFontNamed: aFontName ForSize: aNumber [ - ^ self getFontNamed: aFontName forSize: aNumber emphasis: emphasis -] - -{ #category : #'managing font' } -TRStyledLabelShape >> getFontNamed: aFontName forSize: aNumber emphasis: anEmphasis [ - ^ self class getFontNamed: aFontName forSize: aNumber emphasis: anEmphasis -] - -{ #category : #initialization } -TRStyledLabelShape >> initialize [ - emphasis := #(). - super initialize -] - -{ #category : #'managing font' } -TRStyledLabelShape >> updateFont [ - font := self getFontNamed: fontName forSize: fontSize emphasis: emphasis -] diff --git a/src/Trachel/TRStyledLineShape.class.st b/src/Trachel/TRStyledLineShape.class.st deleted file mode 100644 index 656bece89..000000000 --- a/src/Trachel/TRStyledLineShape.class.st +++ /dev/null @@ -1,44 +0,0 @@ -" -A DCTRStyledLineShape is line with possibility of being dashed, dotted, etc. - -solid - dashes: nil -dotted - dashes: #(""fill"" 1 ""gap"" 2) -dashed - dashes: #(""fill"" 6 ""gap"" 4) -dashdot - dashes: #(""fill"" 6 ""gap"" 3 ""fill"" 1 ""gap"" 3) -" -Class { - #name : #TRStyledLineShape, - #superclass : #TRLineShape, - #instVars : [ - 'dashes', - 'capStyle' - ], - #category : #'Trachel-Shapes' -} - -{ #category : #drawing } -TRStyledLineShape >> capStyle [ - ^ capStyle ifNil: [ #capButt ] -] - -{ #category : #drawing } -TRStyledLineShape >> capStyle: aStyle [ - self assert: [ aStyle isNil or: [ #(capRound capButt capSquare) includes: aStyle ] ]. - capStyle := aStyle -] - -{ #category : #drawing } -TRStyledLineShape >> dashes: anArrayOfNumeric [ - dashes := anArrayOfNumeric -] - -{ #category : #drawing } -TRStyledLineShape >> drawOn: athensCanvas [ - athensCanvas pathTransform - restoreAfter: [ athensCanvas setShape: self path. - (athensCanvas setStrokePaint: self themedColor) - width: width; - perform: self capStyle; - dashes: dashes offset: 0. - athensCanvas draw ] -] diff --git a/src/Trachel/TRTest.class.st b/src/Trachel/TRTest.class.st deleted file mode 100644 index ac164419b..000000000 --- a/src/Trachel/TRTest.class.st +++ /dev/null @@ -1,30 +0,0 @@ -Class { - #name : #TRTest, - #superclass : #TestCase, - #category : #'Trachel-Tests' -} - -{ #category : #documentation } -TRTest >> readme [ - -" -Exporting to Amber - -| exporter rootClasses | -exporter := P2AExporterV11 new. -rootClasses := Array with: TREvent with: TRObject with: TRTest. -rootClasses do: [ :c | - c withAllSubclasses do: [ :cc | exporter addClass: cc ] ]. -exporter fileOutAsString - - - -" -] - -{ #category : #running } -TRTest >> setUp [ - super setUp. - Transcript show: self class name asString, '>>'. - Transcript show: testSelector asString; cr -] diff --git a/src/Trachel/TRTextShape.class.st b/src/Trachel/TRTextShape.class.st deleted file mode 100644 index 931ad9616..000000000 --- a/src/Trachel/TRTextShape.class.st +++ /dev/null @@ -1,113 +0,0 @@ -Class { - #name : #TRTextShape, - #superclass : #TRShape, - #instVars : [ - 'text', - 'font' - ], - #category : #'Trachel-MorphSpecific' -} - -{ #category : #visitor } -TRTextShape >> accept: aVisitor [ - aVisitor visitTextShape: self -] - -{ #category : #private } -TRTextShape >> basicEncompassingRectangle [ - | wh | - wh := self extentOf: text asString. - ^ wh / -2 extent: wh -] - -{ #category : #drawing } -TRTextShape >> drawOn: athensCanvas [ - | spacing | - spacing := self fontMetrics fontHeight. - "self drawEncompassingRectangleOn: athensCanvas." - athensCanvas pathTransform - restoreAfter: [ | e | - e := self extent. - athensCanvas pathTransform - multiplyBy: matrix asFloatTransform; - translateBy: e / (-2 @ -2). - athensCanvas setFont: font. - athensCanvas setPaint: color. - athensCanvas pathTransform translateBy: 0 @ font ascent. - text lines - do: [ :line | - athensCanvas drawString: line. - athensCanvas pathTransform translateBy: 0 @ spacing ] ] -] - -{ #category : #accessing } -TRTextShape >> encompassingRectangle [ - ^ self transformedEncompassingRectangle -] - -{ #category : #accessing } -TRTextShape >> extent [ - ^ self encompassingRectangle extent -] - -{ #category : #private } -TRTextShape >> extentOf: aText [ - | lines metrics maxWidth | - lines := aText lines. - lines ifEmpty: [ ^ 0 @ 0 ]. - metrics := self fontMetrics. - maxWidth := lines - max: [ :line | - | e | - e := metrics extentsOf: line. - e width + e x_bearing ]. - ^ maxWidth asFloat @ (lines size * metrics fontHeight) -] - -{ #category : #accessing } -TRTextShape >> font [ - ^ font -] - -{ #category : #accessing } -TRTextShape >> font: aFont [ - font := aFont -] - -{ #category : #accessing } -TRTextShape >> fontMetrics [ - ^ TRPlatform current fontMetricsClass new - font: self font; - yourself -] - -{ #category : #accessing } -TRTextShape >> fontName: aFamilyName [ - font := TRPlatform current fontFamilyName: aFamilyName pointSize: font pointSize -] - -{ #category : #accessing } -TRTextShape >> fontSize: aNumber [ - font := TRPlatform current fontFamilyName: font familyName pointSize: aNumber -] - -{ #category : #testing } -TRTextShape >> includesPoint: aPoint [ - ^ self encompassingRectangle containsPoint: aPoint -] - -{ #category : #accessing } -TRTextShape >> initialize [ - super initialize. - font := TRLabelShape getFontForSize: 10 -] - -{ #category : #accessing } -TRTextShape >> text [ - ^ text -] - -{ #category : #accessing } -TRTextShape >> text: aText [ - text := aText -] diff --git a/src/Trachel/TRTheme.class.st b/src/Trachel/TRTheme.class.st deleted file mode 100644 index 3fa3eb494..000000000 --- a/src/Trachel/TRTheme.class.st +++ /dev/null @@ -1,93 +0,0 @@ -Class { - #name : #TRTheme, - #superclass : #TRObject, - #classVars : [ - 'Current' - ], - #category : #'Trachel-Core-Theme' -} - -{ #category : #'base color' } -TRTheme class >> blue [ - ^ self current blue -] - -{ #category : #accessing } -TRTheme class >> current [ - Current ifNotNil: [ ^ Current ]. - Current := self infer. - ^ Current -] - -{ #category : #'base color' } -TRTheme class >> cyan [ - ^ self current cyan -] - -{ #category : #generic } -TRTheme class >> emphasisColor [ - ^ self red -] - -{ #category : #'base color' } -TRTheme class >> green [ - ^ self current green -] - -{ #category : #accessing } -TRTheme class >> infer [ - ^ ('*Dark*' match: UITheme current class name) - ifTrue: [ TRDarkSolarizedTheme new ] - ifFalse: [ TRWhiteSolarizedTheme new ] -] - -{ #category : #'base color' } -TRTheme class >> magenta [ - ^ self current magenta -] - -{ #category : #'base color' } -TRTheme class >> orange [ - ^ self current orange -] - -{ #category : #generic } -TRTheme class >> primaryColor [ - ^ self blue -] - -{ #category : #'base color' } -TRTheme class >> red [ - ^ self current red -] - -{ #category : #generic } -TRTheme class >> secondaryEmphasisColor [ - ^ self green -] - -{ #category : #'base color' } -TRTheme class >> violet [ - ^ self current violet -] - -{ #category : #'base color' } -TRTheme class >> white [ - ^ self current white -] - -{ #category : #'base color' } -TRTheme class >> yellow [ - ^ self current yellow -] - -{ #category : #accessing } -TRTheme >> trachelCanvasColor [ - ^ self subclassResponsibility -] - -{ #category : #accessing } -TRTheme >> transformColor: aColor [ - "Per default, there is no color transformation" - ^ aColor -] diff --git a/src/Trachel/TRTranslationCallback.class.st b/src/Trachel/TRTranslationCallback.class.st deleted file mode 100644 index 70aa9c9dc..000000000 --- a/src/Trachel/TRTranslationCallback.class.st +++ /dev/null @@ -1,32 +0,0 @@ -" -TRTranslationCallback is triggered when the shape gets translated. - -Consider the following example: --=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -c := TRCanvas new. -b := TRBoxShape new size: 40. -c addShape: b. -callback := TRTranslationCallback new. -callback block: [ :aShape :step | step inspect ]. -b addCallback: callback. -b translateBy: 5 @ 10. -c. --=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -It opens an inspector because the block is triggered. -" -Class { - #name : #TRTranslationCallback, - #superclass : #TRCallback, - #category : #'Trachel-Callbacks' -} - -{ #category : #testing } -TRTranslationCallback >> isTranslationCallback [ - ^ true -] - -{ #category : #actions } -TRTranslationCallback >> shape: aTRShape step: aStep [ - "aStep is a point that represents a translation step" - ^ block cull: aTRShape cull: aStep -] diff --git a/src/Trachel/TRUserInputEvent.class.st b/src/Trachel/TRUserInputEvent.class.st deleted file mode 100644 index 1cc601120..000000000 --- a/src/Trachel/TRUserInputEvent.class.st +++ /dev/null @@ -1,108 +0,0 @@ -Class { - #name : #TRUserInputEvent, - #superclass : #TRShapeEvent, - #instVars : [ - 'commandKeyPressed', - 'controlKeyPressed', - 'shiftKeyPressed', - 'optionKeyPressed' - ], - #category : #'Trachel-Events' -} - -{ #category : #'instance creation' } -TRUserInputEvent class >> fromEvent: aUserInputEvent [ - ^ self new - commandKeyPressed: aUserInputEvent commandKeyPressed; - controlKeyPressed: aUserInputEvent controlKeyPressed; - shiftKeyPressed: aUserInputEvent shiftPressed; - optionKeyPressed: aUserInputEvent optionKeyPressed; - yourself -] - -{ #category : #accessing } -TRUserInputEvent >> altKeyPressed [ - "Answer true if the alt/option key on the keyboard was being held down when this event occurred." - - ^ self optionKeyPressed -] - -{ #category : #accessing } -TRUserInputEvent >> anyModifierKeyPressed [ - "Answer true if command, option/alt or control key on the keyboard was being held down when this event occurred. Ignores shift key." - - ^ self commandKeyPressed or: [ self optionKeyPressed or: [ self controlKeyPressed ] ] -] - -{ #category : #accessing } -TRUserInputEvent >> commandKeyPressed [ - "Answer true if the command key on the keyboard was being held down when this event occurred." - - ^ commandKeyPressed -] - -{ #category : #'private - accessing' } -TRUserInputEvent >> commandKeyPressed: aBoolean [ - commandKeyPressed := aBoolean -] - -{ #category : #accessing } -TRUserInputEvent >> controlKeyPressed [ - "Answer true if the control key on the keyboard was being held down when this event occurred." - - ^ controlKeyPressed -] - -{ #category : #'private - accessing' } -TRUserInputEvent >> controlKeyPressed: aBoolean [ - controlKeyPressed := aBoolean -] - -{ #category : #initialization } -TRUserInputEvent >> initialize [ - super initialize. - commandKeyPressed := false. - controlKeyPressed := false. - optionKeyPressed := false. - shiftKeyPressed := false -] - -{ #category : #'private - accessing' } -TRUserInputEvent >> modifiers: modifiers [ - commandKeyPressed := modifiers anyMask: 2r01000000. - controlKeyPressed := modifiers anyMask: 2r00010000. - optionKeyPressed := modifiers anyMask: 2r00100000. - shiftKeyPressed := modifiers anyMask: 2r00001000 -] - -{ #category : #accessing } -TRUserInputEvent >> optionKeyPressed [ - "Answer true if the alt/option key on the keyboard was being held down when this event occurred." - - ^ optionKeyPressed -] - -{ #category : #'private - accessing' } -TRUserInputEvent >> optionKeyPressed: aBoolean [ - optionKeyPressed := aBoolean -] - -{ #category : #accessing } -TRUserInputEvent >> shiftKeyPressed [ - "Answer true if the shift key on the keyboard was being held down when this event occurred" - - ^ shiftKeyPressed -] - -{ #category : #'private - accessing' } -TRUserInputEvent >> shiftKeyPressed: aBoolean [ - shiftKeyPressed := aBoolean -] - -{ #category : #accessing } -TRUserInputEvent >> shiftPressed [ - "Answer true if the shift key on the keyboard was being held down when this event occurred. - This method is here for Morphic compatibility" - - ^ self shiftKeyPressed -] diff --git a/src/Trachel/TRUtil.class.st b/src/Trachel/TRUtil.class.st deleted file mode 100644 index 180629ea7..000000000 --- a/src/Trachel/TRUtil.class.st +++ /dev/null @@ -1,18 +0,0 @@ -Class { - #name : #TRUtil, - #superclass : #TRObject, - #classInstVars : [ - 'instance' - ], - #category : #'Trachel-Core' -} - -{ #category : #accessing } -TRUtil class >> instance [ - ^ instance ifNil: [ instance := self new ] -] - -{ #category : #factory } -TRUtil >> widgetFactory [ - ^ TRMorphWidgetFactory -] diff --git a/src/Trachel/TRVIAnimatedPoint.class.st b/src/Trachel/TRVIAnimatedPoint.class.st deleted file mode 100644 index d93d03ac7..000000000 --- a/src/Trachel/TRVIAnimatedPoint.class.st +++ /dev/null @@ -1,62 +0,0 @@ -Class { - #name : #TRVIAnimatedPoint, - #superclass : #TRObject, - #instVars : [ - 'x', - 'y' - ], - #category : #'Trachel-Viva' -} - -{ #category : #'as yet unclassified' } -TRVIAnimatedPoint >> + anotherPoint [ - ^ TRVIAnimatedPoint new - x: [ self x value + (anotherPoint x) ]; - y: [ self y value + (anotherPoint y) ]; - yourself - -" ^ VIAnimatedPoint new - x: [ :time | (self x value: time) + (anotherPoint x value: time) ]; - y: [ :time | (self y value: time) + (anotherPoint y value: time) ]; - yourself" -] - -{ #category : #'as yet unclassified' } -TRVIAnimatedPoint >> - anotherPoint [ - ^ TRVIAnimatedPoint new - x: [ self x value - (anotherPoint x) ]; - y: [ self y value - (anotherPoint y) ]; - yourself - -" ^ VIAnimatedPoint new - x: [ :time | (self x value: time) + (anotherPoint x value: time) ]; - y: [ :time | (self y value: time) + (anotherPoint y value: time) ]; - yourself" -] - -{ #category : #initialization } -TRVIAnimatedPoint >> initialize [ - super initialize. - x := 0. - y := 0. -] - -{ #category : #accessing } -TRVIAnimatedPoint >> x [ - ^ x -] - -{ #category : #accessing } -TRVIAnimatedPoint >> x: anObject [ - x := anObject -] - -{ #category : #accessing } -TRVIAnimatedPoint >> y [ - ^ y -] - -{ #category : #accessing } -TRVIAnimatedPoint >> y: anObject [ - y := anObject -] diff --git a/src/Trachel/TRVIAnimatedPointTest.class.st b/src/Trachel/TRVIAnimatedPointTest.class.st deleted file mode 100644 index 0dd47a412..000000000 --- a/src/Trachel/TRVIAnimatedPointTest.class.st +++ /dev/null @@ -1,29 +0,0 @@ -Class { - #name : #TRVIAnimatedPointTest, - #superclass : #TRTest, - #instVars : [ - 'pZero' - ], - #category : #'Trachel-Viva' -} - -{ #category : #running } -TRVIAnimatedPointTest >> setUp [ - super setUp. - pZero := TRVIAnimatedPoint new. -] - -{ #category : #tests } -TRVIAnimatedPointTest >> testAddToZero [ - | p | - p := pZero + (1 @ 1). - self assert: p x value equals: 1. - self assert: p y value equals: 1. -] - -{ #category : #tests } -TRVIAnimatedPointTest >> testZero [ - - self assert: pZero x value equals: 0. - self assert: pZero y value equals: 0. -] diff --git a/src/Trachel/TRVIAnimatedValue.class.st b/src/Trachel/TRVIAnimatedValue.class.st deleted file mode 100644 index 3a7262735..000000000 --- a/src/Trachel/TRVIAnimatedValue.class.st +++ /dev/null @@ -1,154 +0,0 @@ -" -A VIAnimatedValue is A representation of some property value animated in certain kind of time. - -The main idea is you can change some property in some time. -in evaluator, recibe a block to handle as f(t). - - -" -Class { - #name : #TRVIAnimatedValue, - #superclass : #TRObject, - #instVars : [ - 'evaluator', - 'timer', - 'finishCallback' - ], - #category : #'Trachel-Viva' -} - -{ #category : #grouping } -TRVIAnimatedValue >> + aValue [ - - ^ [ self value + aValue value ] - -" self error: 'Not supported yet'" - -" ^VIAnimatedGroup new - add:self; - add:aVIAnimatedValue." -] - -{ #category : #sequence } -TRVIAnimatedValue >> , aVIAnimatedValue [ - self error: 'Not yet supported' -" ^VIAnimatedSecuence new - add:self; - add:aVIAnimatedValue. - " -] - -{ #category : #grouping } -TRVIAnimatedValue >> - aValue [ - - ^ [ self value - aValue value ] - -] - -{ #category : #converting } -TRVIAnimatedValue >> @ anotherValue [ - ^ TRVIAnimatedPoint new x: self; y: anotherValue; yourself -] - -{ #category : #converting } -TRVIAnimatedValue >> adaptToNumber: rcvr andSend: selector [ - ^ self value perform: selector with: rcvr -] - -{ #category : #actions } -TRVIAnimatedValue >> animatedPoint: aPoints [ - | pnts | - pnts := aPoints asSortedCollection. - self evaluator: [ :t | - | inicial fin | - inicial := nil. - fin := nil. - - pnts do:[ :e | - e key <= t - ifTrue: [ inicial:= e ] - ifFalse:[fin isNil ifTrue:[fin:= e] ] - ]. - inicial value interpolateTo: fin value at: t. - ]. -] - -{ #category : #actions } -TRVIAnimatedValue >> animatedValue: values [ - | val fraction currentValue | - fraction := 1.0 / (values size -1). - currentValue:= 0. - self animatedPoint: - (values collect: [ :e | val := currentValue -> e. currentValue:= currentValue + fraction. val]). -] - -{ #category : #accessing } -TRVIAnimatedValue >> animationDidFinish [ - timer value = 1.0 - ifTrue: [ finishCallback value ]. -] - -{ #category : #converting } -TRVIAnimatedValue >> asFloat [ - ^ self value asFloat -] - -{ #category : #accessing } -TRVIAnimatedValue >> evaluator [ - - ^ evaluator -] - -{ #category : #accessing } -TRVIAnimatedValue >> evaluator: anObject [ - evaluator := anObject -] - -{ #category : #accessing } -TRVIAnimatedValue >> finishCallback: anObject [ - finishCallback := anObject -] - -{ #category : #testing } -TRVIAnimatedValue >> hasCompleted [ - ^ timer value = 1.0 -] - -{ #category : #initialization } -TRVIAnimatedValue >> initialize [ - super initialize. - timer := TRVITimer new. - evaluator := [ :time | time ] -] - -{ #category : #actions } -TRVIAnimatedValue >> reset [ - timer reset -] - -{ #category : #actions } -TRVIAnimatedValue >> start [ - timer start -] - -{ #category : #actions } -TRVIAnimatedValue >> stop [ - timer stop -] - -{ #category : #accessing } -TRVIAnimatedValue >> timer [ - ^ timer -] - -{ #category : #accessing } -TRVIAnimatedValue >> timer: anObject [ - timer := anObject -] - -{ #category : #accessing } -TRVIAnimatedValue >> value [ - " evaluate the value of receiver at current time " - self animationDidFinish. - ^ evaluator value: timer value -] diff --git a/src/Trachel/TRVIAnimatedValueTest.class.st b/src/Trachel/TRVIAnimatedValueTest.class.st deleted file mode 100644 index f6f39b0da..000000000 --- a/src/Trachel/TRVIAnimatedValueTest.class.st +++ /dev/null @@ -1,51 +0,0 @@ -Class { - #name : #TRVIAnimatedValueTest, - #superclass : #TRTest, - #category : #'Trachel-Viva' -} - -{ #category : #tests } -TRVIAnimatedValueTest >> testAddingWithNumber [ - - | t | - t := TRVIAnimatedValue new. - t evaluator: [ :timE | 5 ]. - - self assert: t value equals: 5. - self assert: (t value + 4) value equals: 9. - self assert: (4 + t value) value equals: 9 -] - -{ #category : #tests } -TRVIAnimatedValueTest >> testBasic [ - | t | - t := TRVIAnimatedValue new. - t evaluator: [ :time1 | 0 interpolateTo: 100 at: time1 ]. - self assert: t value equals: 0 -] - -{ #category : #tests } -TRVIAnimatedValueTest >> testBasicWithOutEvaluator [ - | t | - t := TRVIAnimatedValue new. - self assert: t value equals: 0 -] - -{ #category : #tests } -TRVIAnimatedValueTest >> testBasicWithTimer [ - | t timer | - t := TRVIAnimatedValue new. - t evaluator: [ :time1 | 0 interpolateTo: 100 at: time1 ]. - timer := TRVITimer new cycleLength: 2. - t timer: timer. - self assert: t value equals: 0 -] - -{ #category : #tests } -TRVIAnimatedValueTest >> testPoint [ - | t1 t2 p | - t1 := TRVIAnimatedValue new. - t2 := TRVIAnimatedValue new. - p := t1 @ t2. - self assert: p class equals: TRVIAnimatedPoint. -] diff --git a/src/Trachel/TRVIBasicTimer.class.st b/src/Trachel/TRVIBasicTimer.class.st deleted file mode 100644 index 0d790854e..000000000 --- a/src/Trachel/TRVIBasicTimer.class.st +++ /dev/null @@ -1,112 +0,0 @@ -" -I represent an abstract behavior of timer. - -We defining a cycle length (cycleLength) for timer, expressed in seconds. -The value of timer (#value) then can be observed over time -as a number which goes from 0 to 1 and then stops. -The moment when value reaches 1 is at time equal to timer's cycle length passed from the moment we started it. - -Timers can be one-shot or repeating. -One-shot timer stops after elapsing its cycle length, reaching value = 1. -The repeating timer keeps running repeating the cycle over and over again, and its value goes from 0 to 1 , then drops to 0 and goes again to 1 and again... -Additionally to #value, there is #elapsedCycles , which can be used to tell, how many cycles are passed since timer's first start. - -Timer can be stopped (paused), resumed or fully reset. The timer value & elapsed cycles is changing only when timer active. -" -Class { - #name : #TRVIBasicTimer, - #superclass : #TRObject, - #category : #'Trachel-Viva' -} - -{ #category : #accessing } -TRVIBasicTimer >> cycleLength [ - "answer the timer cycle length, in seconds" - self subclassResponsibility -] - -{ #category : #accessing } -TRVIBasicTimer >> cycleLength: aNumber [ - "Set the timer cycle length, in seconds" - self subclassResponsibility -] - -{ #category : #accessing } -TRVIBasicTimer >> elapsedCycles [ - self subclassResponsibility -] - -{ #category : #testing } -TRVIBasicTimer >> isActive [ - "Answer whether timer currently active or not" - - self subclassResponsibility -] - -{ #category : #testing } -TRVIBasicTimer >> isRepeating [ - "Answer whether timer is one-shot or repeating" - - self subclassResponsibility -] - -{ #category : #converting } -TRVIBasicTimer >> mirrored [ - self error: 'not yet supported' - "^ VIMirrorRepeatTimer on: self" -] - -{ #category : #accessing } -TRVIBasicTimer >> noRepeat [ - self subclassResponsibility -] - -{ #category : #actions } -TRVIBasicTimer >> pause [ - "synonym to stop" - - ^ self stop -] - -{ #category : #accessing } -TRVIBasicTimer >> repeat [ - self subclassResponsibility -] - -{ #category : #actions } -TRVIBasicTimer >> reset [ - "Reset the timer" - self subclassResponsibility -] - -{ #category : #actions } -TRVIBasicTimer >> resume [ - "synonym to start" - - ^ self start -] - -{ #category : #actions } -TRVIBasicTimer >> start [ - "Start the timer, after which its value change can be observed over time" - self subclassResponsibility -] - -{ #category : #actions } -TRVIBasicTimer >> stop [ - - "Stop the timer" - self subclassResponsibility -] - -{ #category : #accessing } -TRVIBasicTimer >> value [ - "answer the current value of timer" - self subclassResponsibility -] - -{ #category : #converting } -TRVIBasicTimer >> withBias: aWeight [ - self error: 'not yet supported' - "^ (VIBiasedTimerModifier on: self) weight: aWeight" -] diff --git a/src/Trachel/TRVIManagedTimeExample.class.st b/src/Trachel/TRVIManagedTimeExample.class.st deleted file mode 100644 index 78237866b..000000000 --- a/src/Trachel/TRVIManagedTimeExample.class.st +++ /dev/null @@ -1,53 +0,0 @@ -Class { - #name : #TRVIManagedTimeExample, - #superclass : #TRObject, - #category : #'Trachel-Viva' -} - -{ #category : #examples } -TRVIManagedTimeExample >> example01 [ - - | v timer t e | - v := RTView new. - - timer := TRVITimer new cycleLength: 2. - t := TRVIAnimatedValue new. - t evaluator: [ :time | 0 interpolateTo: 100 at: time ]. - t timer: timer. - timer start. - timer repeat. - - e := (RTEllipse new size: 30) element. - - v add: e. - e translateTo: t @ t. - - v addMenu: 'refresh' callback: [ v signalUpdate ]. - v -] - -{ #category : #examples } -TRVIManagedTimeExample >> example02 [ - - | v timer t e slider | - v := RTView new. - - timer := TRVIManualTimer new. - - t := TRVIAnimatedValue new. - t evaluator: [ :time | 0 interpolateTo: 100 at: time ]. - t timer: timer. - - e := (RTEllipse new size: 30) element. - - v add: e. - e translateTo: t @ t. - - slider := RTSlider new. - slider view: v. - slider labeled. - slider callback: [ :aValue | timer value: aValue ]. - slider build. - slider move: #above. - ^ v -] diff --git a/src/Trachel/TRVIManualTimer.class.st b/src/Trachel/TRVIManualTimer.class.st deleted file mode 100644 index 064c34dbd..000000000 --- a/src/Trachel/TRVIManualTimer.class.st +++ /dev/null @@ -1,50 +0,0 @@ -" -[ [ [ - | v timer t e | - v := RTView new. - - timer := VIManualTimer new. - - t := VIAnimatedValue new. - t evaluator: [ :time | 0 interpolateTo: 100 at: time ]. - t timer: timer. - - e := (RTEllipse new size: 30) element. - - v add: e. - e translateTo: t @ t. - - v addMenu: 'refresh' callback: [ timer incrementBy: 0.1. v signalUpdate ]. - v - ] ] ] -" -Class { - #name : #TRVIManualTimer, - #superclass : #TRVIBasicTimer, - #instVars : [ - 'value' - ], - #category : #'Trachel-Viva' -} - -{ #category : #actions } -TRVIManualTimer >> incrementBy: aDelta [ - value := (value + aDelta) \\ 1 -] - -{ #category : #initialization } -TRVIManualTimer >> initialize [ - super initialize. - value := 0.0 -] - -{ #category : #accessing } -TRVIManualTimer >> value [ - ^ value -] - -{ #category : #accessing } -TRVIManualTimer >> value: aFloat [ - self assert: [ aFloat >= 0.0 and: [ aFloat <= 1.0 ] ] description: 'Must provide a value between 0 and 1'. - value := aFloat -] diff --git a/src/Trachel/TRVITimer.class.st b/src/Trachel/TRVITimer.class.st deleted file mode 100644 index a18ba9c80..000000000 --- a/src/Trachel/TRVITimer.class.st +++ /dev/null @@ -1,201 +0,0 @@ -" -I am using system time to implement a timer. - -[ [ [ - | v timer t e | - v := RTView new. - - timer := VITimer new cycleLength: 2. - t := VIAnimatedValue new. - t evaluator: [ :time | 0 interpolateTo: 100 at: time ]. - t timer: timer. - timer start. - timer repeat. - - e := (RTEllipse new size: 30) element. - - v add: e. - e translateTo: t @ t. - - v addMenu: 'refresh' callback: [ v signalUpdate ]. - v -] ] ] -" -Class { - #name : #TRVITimer, - #superclass : #TRVIBasicTimer, - #instVars : [ - 'active', - 'cycleLength', - 'repeat', - 'startTime', - 'elapsedCycles' - ], - #category : #'Trachel-Viva' -} - -{ #category : #private } -TRVITimer >> currentTime [ - ^ Time millisecondClockValue -] - -{ #category : #accessing } -TRVITimer >> cycleLength [ - ^ cycleLength -] - -{ #category : #accessing } -TRVITimer >> cycleLength: anObject [ - cycleLength := anObject -] - -{ #category : #private } -TRVITimer >> cycleLengthScale [ - "cycle length are given in seconds, - while internally we using milliseconds to calculate time difference, hence scale is equal to 1000" - - ^ 1000.0 -] - -{ #category : #accessing } -TRVITimer >> elapsedCycles [ - - "Answer the total number of cycles passed during which timer was active since its first activation. - For example, if timer's cycle length is 2 seconds, and its total active time is 3.5 seconds, - a total number of elapsed cycles will be 3.5 / 2 = 1.75. - - Suspending timer (stopping then starting after a while) does not contributes to elapsedCycles, e.g.: - for fresh timer with 4 seconds cycle, we start timer, run for 0.5 seconds, then stop it, - wait for arbitrary amound of time, then start it again and run for extra 0.5 seconds, - the measures elapsedCycles value will be equal to 1/4 . - - As you may guess, for non-repeating timer, the elapsed cycles value can never be - greater than 1 (timer always stops at 1 and never advanced since then). - - Resetting timer sets elapsed cycles to zero. - " - - | cycles | - active ifFalse: [ ^ elapsedCycles ]. - - cycles := elapsedCycles + (self elapsedTime / cycleLength). - - (repeat value not and: [ cycles >= 1.0 ]) ifTrue: [ - active := false. - ^ elapsedCycles := 1.0 - ]. - ^ cycles -] - -{ #category : #private } -TRVITimer >> elapsedTime [ - ^ (self currentTime - startTime) / self cycleLengthScale - -] - -{ #category : #'initialize-release' } -TRVITimer >> initialize [ - "defaults" - repeat := false. - cycleLength := 1.0. - - self reset. -] - -{ #category : #testing } -TRVITimer >> isActive [ - self value. "making sure it will stop if cycle time elapsed for non-repeating timer" - - ^ active -] - -{ #category : #testing } -TRVITimer >> isRepeating [ - ^ repeat -] - -{ #category : #accessing } -TRVITimer >> noRepeat [ - "make receiver to be non-repeating timer (stops once first cycle elapses)" - repeat := false -] - -{ #category : #accessing } -TRVITimer >> repeat [ - "make receiver to be a repeating timer" - repeat := true -] - -{ #category : #accessing } -TRVITimer >> repeat: veces [ - "make receiver to be a repeating timer" - repeat := [elapsedCycles < veces ] -] - -{ #category : #actions } -TRVITimer >> reset [ - "Reset the timer: stopping it, if it was active, - and setting its internal elapsed cycles counter to Zero " - - active := false. - elapsedCycles := 0.0. - -] - -{ #category : #actions } -TRVITimer >> start [ - "Activate (start or resume) the timer. - Ignored if timer is already active" - - active ifFalse: [ - startTime := self currentTime. - active := true. - ]. - -] - -{ #category : #accessing } -TRVITimer >> startTime [ - ^ startTime -] - -{ #category : #actions } -TRVITimer >> stop [ - "Stop/pausing the timer " - - active ifTrue: [ - elapsedCycles := self elapsedCycles. - active := false. - ]. - -] - -{ #category : #accessing } -TRVITimer >> value [ - "Answer the current timer value. - The value is normalized in range between 0 and 1 - relative to cycle length and elapsed time since timer started, e.g. - if cycle length is 0:01:00 - and elapsed time is 0:00:30, - the value will be 0.5 (half of a minute). - For repeating timer the value goes from 0 to 1, then repeats over. - For non-repeating timer, when value reaching 1, timer stops. - If timer is inactive, answer the phase of cycle where it was stopped. - " - | cycles | - - active ifFalse: [ - ^ repeat - ifTrue: [ elapsedCycles fractionPart ] - ifFalse: [ elapsedCycles min: 1.0 ] - ]. - - cycles := self elapsedCycles. - active ifFalse: [ - "non-repeating timer was stopped" - ^ 1.0 - ]. - - ^ cycles fractionPart. - -] diff --git a/src/Trachel/TRWhiteSolarizedTheme.class.st b/src/Trachel/TRWhiteSolarizedTheme.class.st deleted file mode 100644 index baa0757e0..000000000 --- a/src/Trachel/TRWhiteSolarizedTheme.class.st +++ /dev/null @@ -1,16 +0,0 @@ -Class { - #name : #TRWhiteSolarizedTheme, - #superclass : #TRSolarizedTheme, - #category : #'Trachel-Core-Theme' -} - -{ #category : #accessing } -TRWhiteSolarizedTheme >> trachelCanvasColor [ - " - The original Solarized color is: - ^ self base3 - - However, it does not fit the Pharo Dark theme - " - ^ Color white -] diff --git a/src/Trachel/TRWhiteTheme.class.st b/src/Trachel/TRWhiteTheme.class.st deleted file mode 100644 index 575d22958..000000000 --- a/src/Trachel/TRWhiteTheme.class.st +++ /dev/null @@ -1,20 +0,0 @@ -Class { - #name : #TRWhiteTheme, - #superclass : #TRPlainColorTheme, - #classInstVars : [ - 'default' - ], - #category : #'Trachel-Core-Theme' -} - -{ #category : #accessing } -TRWhiteTheme class >> default [ - "Return the default theme" - default ifNil: [ default := self new ]. - ^ default -] - -{ #category : #accessing } -TRWhiteTheme >> trachelCanvasColor [ - ^ Color white -] diff --git a/src/Trachel/package.st b/src/Trachel/package.st deleted file mode 100644 index 390e03c60..000000000 --- a/src/Trachel/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #Trachel } diff --git a/src/XML-Parser-GTExtensions/FileReference.extension.st b/src/XML-Parser-GTExtensions/FileReference.extension.st deleted file mode 100644 index 7b30bf4d6..000000000 --- a/src/XML-Parser-GTExtensions/FileReference.extension.st +++ /dev/null @@ -1,92 +0,0 @@ -Extension { #name : #FileReference } - -{ #category : #'*XML-Parser-GTExtensions' } -FileReference >> gtInspectorXMLFileIn: aComposite [ - - - | xmlFileHandle currentTextStylerDecorator | - - xmlFileHandle := XMLFileSystemFileHandle fileReference: self. - xmlFileHandle isXMLDocumentFile - ifFalse: [^ self]. - - aComposite custom: - (GLMRubricHighlightedTextPresentation new - title: 'Source'; - editingMode: [ - "saved to get the encoding later" - currentTextStylerDecorator := - GLMXMLDocumentHighlighterTextStylerDecorator new. - GLMHighlighterTextRubEditingMode withStylerDecorator: - currentTextStylerDecorator]; - display: [ - XMLExternalDocumentConverter convertFileNamed: - xmlFileHandle path]; - withLineNumbers: true; - act: [:presentation | - currentTextStylerDecorator saveToFile: xmlFileHandle. - "update the entire pane, not just this presentation, - because the file contents have changed" - presentation pane update] - icon: GLMUIThemeExtraIcons glamorousSave - on: $s - entitled: 'Save'; - act: [:presentation | - "revert edits only in this presentation" - presentation update] - icon: GLMUIThemeExtraIcons glamorousUndo - on: $Z - entitled: 'Revert'; - "the selection action was removed because it reports the - wrong #selectionText if the previous presentation viewed - was a text presentation with a selection" - act: [:presentation | - "do not clear user edits because the source hasn't - been accepted/saved" - presentation selection: - (XMLDOMParser parse: - currentTextStylerDecorator text asString)] - icon: GLMUIThemeExtraIcons glamorousGo - on: $g - entitled: 'Parse and go'). -] - -{ #category : #'*XML-Parser-GTExtensions' } -FileReference >> spotterForXMLFileFor: aStep [ - - - | xmlFileHandle | - - xmlFileHandle := XMLFileSystemFileHandle fileReference: self. - xmlFileHandle isXMLDocumentFile - ifFalse: [^ self]. - - aStep listProcessor - title: 'XML Document'; - allCandidates: [ - (XMLDOMParser parseFileNamed: xmlFileHandle path) - allElements]; - itemName: #gtDisplayString; - filter: GTFilterSubstring; - wantsToDisplayOnEmptyQuery: true. -] - -{ #category : #'*XML-Parser-GTExtensions' } -FileReference >> spotterPreviewXMLFileIn: aComposite [ - - - | xmlFileHandle | - - xmlFileHandle := XMLFileSystemFileHandle fileReference: self. - xmlFileHandle isXMLDocumentFile - ifFalse: [^ self]. - - aComposite text - title: 'Source'; - display: [ - "the source is converted to a decoded string and then highlighted" - XMLHighlightingParser parse: - (XMLExternalDocumentConverter convertFileNamed: - xmlFileHandle path)]; - entity: self. -] diff --git a/src/XML-Parser-GTExtensions/GLMXMLDisabledDocumentHighlighterTextStylerDecorator.class.st b/src/XML-Parser-GTExtensions/GLMXMLDisabledDocumentHighlighterTextStylerDecorator.class.st deleted file mode 100644 index 05265a952..000000000 --- a/src/XML-Parser-GTExtensions/GLMXMLDisabledDocumentHighlighterTextStylerDecorator.class.st +++ /dev/null @@ -1,40 +0,0 @@ -" -A highlighting XML document text style decorator for disabled highlighting text presentations. The text and encoding are set at instance creation and can't be changed with editing. -" -Class { - #name : #GLMXMLDisabledDocumentHighlighterTextStylerDecorator, - #superclass : #GLMXMLDocumentHighlighterTextStylerDecorator, - #instVars : [ - 'disabledText' - ], - #category : #'XML-Parser-GTExtensions-Highlighting-Parser' -} - -{ #category : #'instance creation' } -GLMXMLDisabledDocumentHighlighterTextStylerDecorator class >> disabledText: aStringOrText [ - ^ self - disabledText: aStringOrText - encoding: '' -] - -{ #category : #'instance creation' } -GLMXMLDisabledDocumentHighlighterTextStylerDecorator class >> disabledText: aStringOrText encoding: anEncodingName [ - ^ self new - disabledText: aStringOrText; - encoding: anEncodingName -] - -{ #category : #accessing } -GLMXMLDisabledDocumentHighlighterTextStylerDecorator >> disabledText [ - ^ disabledText ifNil: [disabledText := '' asText] -] - -{ #category : #accessing } -GLMXMLDisabledDocumentHighlighterTextStylerDecorator >> disabledText: aStringOrText [ - disabledText := aStringOrText asText -] - -{ #category : #parsing } -GLMXMLDisabledDocumentHighlighterTextStylerDecorator >> highlightingParse: aString onError: aBlock [ - ^ self disabledText -] diff --git a/src/XML-Parser-GTExtensions/GLMXMLDisabledRubricHighlightedTextPresentation.class.st b/src/XML-Parser-GTExtensions/GLMXMLDisabledRubricHighlightedTextPresentation.class.st deleted file mode 100644 index 251ddcf64..000000000 --- a/src/XML-Parser-GTExtensions/GLMXMLDisabledRubricHighlightedTextPresentation.class.st +++ /dev/null @@ -1,15 +0,0 @@ -" -A disabled version of the superclass. -" -Class { - #name : #GLMXMLDisabledRubricHighlightedTextPresentation, - #superclass : #GLMRubricHighlightedTextPresentation, - #category : #'XML-Parser-GTExtensions-Highlighting-Parser' -} - -{ #category : #rendering } -GLMXMLDisabledRubricHighlightedTextPresentation >> renderGlamorouslyOn: aRenderer [ - ^ (super renderGlamorouslyOn: aRenderer) - beReadOnly; - yourself -] diff --git a/src/XML-Parser-GTExtensions/GLMXMLDocumentHighlighterTextStylerDecorator.class.st b/src/XML-Parser-GTExtensions/GLMXMLDocumentHighlighterTextStylerDecorator.class.st deleted file mode 100644 index 5026f9101..000000000 --- a/src/XML-Parser-GTExtensions/GLMXMLDocumentHighlighterTextStylerDecorator.class.st +++ /dev/null @@ -1,104 +0,0 @@ -" -A highlighting XML document text style decorator. -" -Class { - #name : #GLMXMLDocumentHighlighterTextStylerDecorator, - #superclass : #GLMXMLHighlighterTextStylerDecorator, - #instVars : [ - 'encoding', - 'configuration' - ], - #category : #'XML-Parser-GTExtensions-Highlighting-Parser' -} - -{ #category : #accessing } -GLMXMLDocumentHighlighterTextStylerDecorator >> configuration [ - ^ configuration -] - -{ #category : #accessing } -GLMXMLDocumentHighlighterTextStylerDecorator >> configuration: aConfiguration [ - configuration := aConfiguration -] - -{ #category : #private } -GLMXMLDocumentHighlighterTextStylerDecorator >> defaultEncoding [ - ^ '' -] - -{ #category : #accessing } -GLMXMLDocumentHighlighterTextStylerDecorator >> encoding [ - ^ encoding -] - -{ #category : #accessing } -GLMXMLDocumentHighlighterTextStylerDecorator >> encoding: anEncodingName [ - encoding := anEncodingName -] - -{ #category : #testing } -GLMXMLDocumentHighlighterTextStylerDecorator >> hasEncoding [ - ^ self encoding notEmpty -] - -{ #category : #parsing } -GLMXMLDocumentHighlighterTextStylerDecorator >> highlightingParse: aString onError: aBlock [ - | highlightingParserHandler highlightingParser | - - highlightingParserHandler := - self newHighlightingParserHandlerOn: aString. - highlightingParser := - self newHighlightingParserFromHandler: highlightingParserHandler. - [highlightingParser parseDocument] - on: XMLParserException - do: [:error | - aBlock cull: error. - self encoding: highlightingParserHandler encoding. - ^ highlightingParserHandler - asHighlightedTextColored: self errorColor - startingAt: - (self - highlightStartPositionForErrorAt: - highlightingParser currentPosition - in: aString)]. - self encoding: highlightingParserHandler encoding. - ^ highlightingParserHandler asHighlightedText. -] - -{ #category : #initialization } -GLMXMLDocumentHighlighterTextStylerDecorator >> initialize [ - super initialize. - - encoding := self defaultEncoding. -] - -{ #category : #private } -GLMXMLDocumentHighlighterTextStylerDecorator >> newHighlightingParserFromHandler: aHighlightingParserHandler [ - ^ aHighlightingParserHandler parser -] - -{ #category : #private } -GLMXMLDocumentHighlighterTextStylerDecorator >> newHighlightingParserHandlerOn: aString [ - | parserHandler | - - parserHandler := XMLHighlightingParser on: aString. - self configuration - ifNotNil: [parserHandler configuration: self configuration copy]. - ^ parserHandler. -] - -{ #category : #files } -GLMXMLDocumentHighlighterTextStylerDecorator >> saveToFile: anXMLFileHandleOrFileName [ - | sourceToSave streamConverter | - - sourceToSave := self text asString. - streamConverter := - self hasEncoding - ifTrue: [self encoding asXMLStreamConverter] - ifFalse: [XMLStreamConverter default]. - anXMLFileHandleOrFileName asXMLFileHandle writeStreamDo: [:writeStream | - writeStream - streamConverter: streamConverter; - nextPutByteOrderMark; - nextPutAll: sourceToSave]. -] diff --git a/src/XML-Parser-GTExtensions/GLMXMLHighlighterTextStylerDecorator.class.st b/src/XML-Parser-GTExtensions/GLMXMLHighlighterTextStylerDecorator.class.st deleted file mode 100644 index 99c8ddd55..000000000 --- a/src/XML-Parser-GTExtensions/GLMXMLHighlighterTextStylerDecorator.class.st +++ /dev/null @@ -1,86 +0,0 @@ -" -An abstract base class for XML highlighter text styler decorators. Subclasses need to implement #highlightingParse:onSuccess:onError: . -" -Class { - #name : #GLMXMLHighlighterTextStylerDecorator, - #superclass : #GLMHighlighterTextStylerDecorator, - #instVars : [ - 'highlightableLengthLimit', - 'errorColor' - ], - #category : #'XML-Parser-GTExtensions-Highlighting-Parser' -} - -{ #category : #accessing } -GLMXMLHighlighterTextStylerDecorator >> defaultErrorColor [ - ^ TextColor red -] - -{ #category : #accessing } -GLMXMLHighlighterTextStylerDecorator >> defaultHighlightableLengthLimit [ - ^ 100000 -] - -{ #category : #accessing } -GLMXMLHighlighterTextStylerDecorator >> defaultStyler [ - ^ GLMHighlighterTextParserStyler new - view: self; - parser: self -] - -{ #category : #accessing } -GLMXMLHighlighterTextStylerDecorator >> errorColor [ - ^ errorColor -] - -{ #category : #accessing } -GLMXMLHighlighterTextStylerDecorator >> errorColor: aTextColor [ - errorColor := aTextColor -] - -{ #category : #private } -GLMXMLHighlighterTextStylerDecorator >> highlightStartPositionForErrorAt: aPosition in: aString [ - "color all of it if the error occurred at the end of the - input, otherwise there would be no error coloring at all" - ^ aPosition >= aString size - ifTrue: [1] - ifFalse: [aPosition] -] - -{ #category : #accessing } -GLMXMLHighlighterTextStylerDecorator >> highlightableLengthLimit [ - ^ highlightableLengthLimit -] - -{ #category : #accessing } -GLMXMLHighlighterTextStylerDecorator >> highlightableLengthLimit: anInteger [ - highlightableLengthLimit := anInteger -] - -{ #category : #parsing } -GLMXMLHighlighterTextStylerDecorator >> highlightingParse: aString onError: aBlock [ - self subclassResponsibility -] - -{ #category : #initialization } -GLMXMLHighlighterTextStylerDecorator >> initialize [ - super initialize. - - highlightableLengthLimit := self defaultHighlightableLengthLimit. - errorColor := self defaultErrorColor. -] - -{ #category : #parsing } -GLMXMLHighlighterTextStylerDecorator >> parse: aString onError: aBlock [ - aString size <= self highlightableLengthLimit - ifTrue: [ - ^ self - highlightingParse: aString - onError: aBlock] - ifFalse: [^ self text] -] - -{ #category : #parsing } -GLMXMLHighlighterTextStylerDecorator >> parser [ - ^ self -] diff --git a/src/XML-Parser-GTExtensions/GLMXMLOuterXMLDocumentHighlighterTextStylerDecorator.class.st b/src/XML-Parser-GTExtensions/GLMXMLOuterXMLDocumentHighlighterTextStylerDecorator.class.st deleted file mode 100644 index bd658d4e1..000000000 --- a/src/XML-Parser-GTExtensions/GLMXMLOuterXMLDocumentHighlighterTextStylerDecorator.class.st +++ /dev/null @@ -1,85 +0,0 @@ -" -A highlighting XML document text style decorator for editing the ""outer"" XML of a document or document node. -" -Class { - #name : #GLMXMLOuterXMLDocumentHighlighterTextStylerDecorator, - #superclass : #GLMXMLDocumentHighlighterTextStylerDecorator, - #instVars : [ - 'outerXMLNode', - 'document' - ], - #category : #'XML-Parser-GTExtensions-Highlighting-Parser' -} - -{ #category : #private } -GLMXMLOuterXMLDocumentHighlighterTextStylerDecorator class >> outerXMLNode: aNode [ - ^ self new outerXMLNode: aNode -] - -{ #category : #accessing } -GLMXMLOuterXMLDocumentHighlighterTextStylerDecorator >> document [ - ^ document -] - -{ #category : #accessing } -GLMXMLOuterXMLDocumentHighlighterTextStylerDecorator >> document: aDocument [ - document := aDocument -] - -{ #category : #accessing } -GLMXMLOuterXMLDocumentHighlighterTextStylerDecorator >> encoding [ - ^ super encoding - ifEmpty: [ - self document - ifNil: [''] - ifNotNil: [:node | node encoding]] -] - -{ #category : #private } -GLMXMLOuterXMLDocumentHighlighterTextStylerDecorator >> newHighlightingParserFromHandler: aHighlightingParserHandler [ - | parser rootElement | - - parser := super newHighlightingParserFromHandler: aHighlightingParserHandler. - - self document - ifNotNil: [ - parser driver isStandalone: self document isStandalone. - self document hasDoctypeDefinition - ifTrue: [ - parser driver doctypeDefinition - addGeneralEntitiesFrom: self document doctypeDefinition]]. - - self outerXMLNode isElement - ifTrue: [rootElement := self outerXMLNode] - ifFalse: [ - (self outerXMLNode hasParent - and: [self outerXMLNode parent isElement]) - ifTrue: [rootElement := self outerXMLNode parent]]. - rootElement - ifNotNil: [ - parser driver currentElement: rootElement name. - rootElement hasNamespaces - ifTrue: [parser driver currentScope: rootElement namespaceScope]]. - - parser state: self outerXMLNode parent newInnerXMLState. - parser state isContentState - ifTrue: [aHighlightingParserHandler startContent]. - - ^ parser. -] - -{ #category : #accessing } -GLMXMLOuterXMLDocumentHighlighterTextStylerDecorator >> outerXMLNode [ - ^ outerXMLNode -] - -{ #category : #accessing } -GLMXMLOuterXMLDocumentHighlighterTextStylerDecorator >> outerXMLNode: aNode [ - outerXMLNode := aNode. - "the document is saved because this node will be replaced and removed - from it when the edited source is accepted, and the encoding is needed - from it if the source is being saved to a file" - self - configuration: aNode configuration; - document: aNode document -] diff --git a/src/XML-Parser-GTExtensions/SAXPositionHandler.class.st b/src/XML-Parser-GTExtensions/SAXPositionHandler.class.st deleted file mode 100644 index e12921158..000000000 --- a/src/XML-Parser-GTExtensions/SAXPositionHandler.class.st +++ /dev/null @@ -1,101 +0,0 @@ -" -This class is a SAXHandler that can track the positions of tokens. Does not support validation or entity replacement but can check wellformedness and namespaces. -" -Class { - #name : #SAXPositionHandler, - #superclass : #SAXHandler, - #category : #'XML-Parser-GTExtensions-Highlighting-Parser' -} - -{ #category : #defaults } -SAXPositionHandler >> driverClass [ - ^ SAXPositionParserDriver -] - -{ #category : #'handling - positions' } -SAXPositionHandler >> endCDataPosition: aPosition [ -] - -{ #category : #'handling - positions' } -SAXPositionHandler >> endCommentPosition: aPosition [ -] - -{ #category : #'handling - positions' } -SAXPositionHandler >> endDeclarationPosition: aPosition [ -] - -{ #category : #'handling - positions' } -SAXPositionHandler >> endDoctypeDeclarationPosition: aPosition [ -] - -{ #category : #'handling - positions' } -SAXPositionHandler >> endEntityReferencePosition: aPosition [ -] - -{ #category : #'handling - positions' } -SAXPositionHandler >> endNamePosition: aPosition [ -] - -{ #category : #'handling - positions' } -SAXPositionHandler >> endPIPosition: aPosition [ -] - -{ #category : #'handling - positions' } -SAXPositionHandler >> endQuotedStringNamePosition: aPosition [ -] - -{ #category : #'handling - positions' } -SAXPositionHandler >> endQuotedStringPosition: aPosition [ -] - -{ #category : #'handling - positions' } -SAXPositionHandler >> endTagPosition: aPosition [ -] - -{ #category : #'handling - positions' } -SAXPositionHandler >> endXMLDeclarationPosition: aPosition [ -] - -{ #category : #'handling - positions' } -SAXPositionHandler >> startCDataPosition: aPosition [ -] - -{ #category : #'handling - positions' } -SAXPositionHandler >> startCommentPosition: aPosition [ -] - -{ #category : #'handling - positions' } -SAXPositionHandler >> startDeclarationPosition: aPosition [ -] - -{ #category : #'handling - positions' } -SAXPositionHandler >> startDoctypeDeclarationPosition: aPosition [ -] - -{ #category : #'handling - positions' } -SAXPositionHandler >> startEntityReferencePosition: aPosition [ -] - -{ #category : #'handling - positions' } -SAXPositionHandler >> startNamePosition: aPosition [ -] - -{ #category : #'handling - positions' } -SAXPositionHandler >> startPIPosition: aPosition [ -] - -{ #category : #'handling - positions' } -SAXPositionHandler >> startQuotedStringNamePosition: aPosition [ -] - -{ #category : #'handling - positions' } -SAXPositionHandler >> startQuotedStringPosition: aPosition [ -] - -{ #category : #'handling - positions' } -SAXPositionHandler >> startTagPosition: aPosition [ -] - -{ #category : #'handling - positions' } -SAXPositionHandler >> startXMLDeclarationPosition: aPosition [ -] diff --git a/src/XML-Parser-GTExtensions/SAXPositionParserDriver.class.st b/src/XML-Parser-GTExtensions/SAXPositionParserDriver.class.st deleted file mode 100644 index 9fd0cc9ab..000000000 --- a/src/XML-Parser-GTExtensions/SAXPositionParserDriver.class.st +++ /dev/null @@ -1,133 +0,0 @@ -" -This class is a SAX driver that forwards token start/end positions to a SAXHandler. Does not support entities or validation, but does support namespaces. -" -Class { - #name : #SAXPositionParserDriver, - #superclass : #SAXParserDriver, - #category : #'XML-Parser-GTExtensions-Highlighting-Parser' -} - -{ #category : #testing } -SAXPositionParserDriver >> decodesCharacters [ - ^ false -] - -{ #category : #'handling - positions' } -SAXPositionParserDriver >> handleEndCDataPosition: aPosition [ - self saxHandler endCDataPosition: aPosition -] - -{ #category : #'handling - positions' } -SAXPositionParserDriver >> handleEndCommentPosition: aPosition [ - self saxHandler endCommentPosition: aPosition -] - -{ #category : #'handling - positions' } -SAXPositionParserDriver >> handleEndDeclaration: aPosition [ - self saxHandler endDeclarationPosition: aPosition -] - -{ #category : #'handling - positions' } -SAXPositionParserDriver >> handleEndDoctypeDeclarationPosition: aPosition [ - self saxHandler endDoctypeDeclarationPosition: aPosition -] - -{ #category : #'handling - positions' } -SAXPositionParserDriver >> handleEndEntityReferencePosition: aPosition [ - self saxHandler endEntityReferencePosition: aPosition -] - -{ #category : #'handling - positions' } -SAXPositionParserDriver >> handleEndNamePosition: aPosition [ - self saxHandler endNamePosition: aPosition -] - -{ #category : #'handling - positions' } -SAXPositionParserDriver >> handleEndPIPosition: aPosition [ - self saxHandler endPIPosition: aPosition -] - -{ #category : #'handling - positions' } -SAXPositionParserDriver >> handleEndQuotedStringNamePosition: aPosition [ - self saxHandler endQuotedStringNamePosition: aPosition -] - -{ #category : #'handling - positions' } -SAXPositionParserDriver >> handleEndQuotedStringPosition: aPosition [ - self saxHandler endQuotedStringPosition: aPosition -] - -{ #category : #'handling - positions' } -SAXPositionParserDriver >> handleEndTagPosition: aPosition [ - self saxHandler endTagPosition: aPosition -] - -{ #category : #'handling - positions' } -SAXPositionParserDriver >> handleEndXMLDeclarationPosition: aPosition [ - self saxHandler endXMLDeclarationPosition: aPosition -] - -{ #category : #'handling - positions' } -SAXPositionParserDriver >> handleStartCDataPosition: aPosition [ - self saxHandler startCDataPosition: aPosition -] - -{ #category : #'handling - positions' } -SAXPositionParserDriver >> handleStartCommentPosition: aPosition [ - self saxHandler startCommentPosition: aPosition -] - -{ #category : #'handling - positions' } -SAXPositionParserDriver >> handleStartDeclaration: aPosition [ - self saxHandler startDeclarationPosition: aPosition -] - -{ #category : #'handling - positions' } -SAXPositionParserDriver >> handleStartDoctypeDeclarationPosition: aPosition [ - self saxHandler startDoctypeDeclarationPosition: aPosition -] - -{ #category : #'handling - positions' } -SAXPositionParserDriver >> handleStartEntityReferencePosition: aPosition [ - self saxHandler startEntityReferencePosition: aPosition -] - -{ #category : #'handling - positions' } -SAXPositionParserDriver >> handleStartNamePosition: aPosition [ - self saxHandler startNamePosition: aPosition -] - -{ #category : #'handling - positions' } -SAXPositionParserDriver >> handleStartPIPosition: aPosition [ - self saxHandler startPIPosition: aPosition -] - -{ #category : #'handling - positions' } -SAXPositionParserDriver >> handleStartQuotedStringNamePosition: aPosition [ - self saxHandler startQuotedStringNamePosition: aPosition -] - -{ #category : #'handling - positions' } -SAXPositionParserDriver >> handleStartQuotedStringPosition: aPosition [ - self saxHandler startQuotedStringPosition: aPosition -] - -{ #category : #'handling - positions' } -SAXPositionParserDriver >> handleStartTagPosition: aPosition [ - self saxHandler startTagPosition: aPosition -] - -{ #category : #'handling - positions' } -SAXPositionParserDriver >> handleStartXMLDeclarationPosition: aPosition [ - self saxHandler startXMLDeclarationPosition: aPosition -] - -{ #category : #testing } -SAXPositionParserDriver >> isValidating [ - ^ false -] - -{ #category : #defaults } -SAXPositionParserDriver >> tokenizerClass [ - ^ XMLPositionWellFormedParserTokenizer -] diff --git a/src/XML-Parser-GTExtensions/XMLAttribute.extension.st b/src/XML-Parser-GTExtensions/XMLAttribute.extension.st deleted file mode 100644 index 59eaf6ad0..000000000 --- a/src/XML-Parser-GTExtensions/XMLAttribute.extension.st +++ /dev/null @@ -1,11 +0,0 @@ -Extension { #name : #XMLAttribute } - -{ #category : #'*XML-Parser-GTExtensions' } -XMLAttribute >> removeFromParent [ - self parent removeAttributeNode: self -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLAttribute >> supportsSourceEditing [ - ^ false -] diff --git a/src/XML-Parser-GTExtensions/XMLAttributeList.extension.st b/src/XML-Parser-GTExtensions/XMLAttributeList.extension.st deleted file mode 100644 index edd0bcf63..000000000 --- a/src/XML-Parser-GTExtensions/XMLAttributeList.extension.st +++ /dev/null @@ -1,9 +0,0 @@ -Extension { #name : #XMLAttributeList } - -{ #category : #'*XML-Parser-GTExtensions' } -XMLAttributeList >> gtInspectorItemsIn: aComposite [ - ^ self - addOrderedListTableToComposite: aComposite - paneTitle: 'Attributes' - columnTitle: 'Attribute' -] diff --git a/src/XML-Parser-GTExtensions/XMLDeclarationNode.extension.st b/src/XML-Parser-GTExtensions/XMLDeclarationNode.extension.st deleted file mode 100644 index cd0056ae2..000000000 --- a/src/XML-Parser-GTExtensions/XMLDeclarationNode.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #XMLDeclarationNode } - -{ #category : #'*XML-Parser-GTExtensions' } -XMLDeclarationNode >> supportsSourceEditing [ - ^ false -] diff --git a/src/XML-Parser-GTExtensions/XMLDoctypeDeclaration.extension.st b/src/XML-Parser-GTExtensions/XMLDoctypeDeclaration.extension.st deleted file mode 100644 index f5d4c0633..000000000 --- a/src/XML-Parser-GTExtensions/XMLDoctypeDeclaration.extension.st +++ /dev/null @@ -1,20 +0,0 @@ -Extension { #name : #XMLDoctypeDeclaration } - -{ #category : #'*XML-Parser-GTExtensions' } -XMLDoctypeDeclaration >> removeFromParent [ - self parent doctypeDeclaration: nil -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLDoctypeDeclaration >> supportsSourceEditing [ - ^ false -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLDoctypeDeclaration >> writeTreeViewLabelXMLOn: aWriter [ - aWriter doctype - root: self root; - publicID: self publicID; - systemID: self systemID; - write -] diff --git a/src/XML-Parser-GTExtensions/XMLDocument.extension.st b/src/XML-Parser-GTExtensions/XMLDocument.extension.st deleted file mode 100644 index 869aaf1e2..000000000 --- a/src/XML-Parser-GTExtensions/XMLDocument.extension.st +++ /dev/null @@ -1,62 +0,0 @@ -Extension { #name : #XMLDocument } - -{ #category : #'*XML-Parser-GTExtensions' } -XMLDocument >> addTreeViewChildrenTo: anOrderedCollection [ - self hasDoctypeDeclaration - ifTrue: [anOrderedCollection addLast: self doctypeDeclaration]. - super addTreeViewChildrenTo: anOrderedCollection. -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLDocument class >> gtExampleXmlNode [ - - ^ XMLDOMParser parse: '' -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLDocument >> newSourceEditorTextStylerDecorator [ - ^ GLMXMLDocumentHighlighterTextStylerDecorator new - configuration: self configuration -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLDocument >> setOuterXMLFromEditedSource: aString [ - | newDocument | - - [newDocument := - (self parserHandlerClass on: aString) - configuration: self configuration; - parseDocument] - on: Error - do: [:error | - newDocument := nil. - error pass]. - newDocument - ifNotNil: [ - self - removeNodes; - configuration: newDocument configuration; - version: newDocument version; - encoding: newDocument encoding; - isStandalone: newDocument isStandalone; - doctypeDeclaration: newDocument doctypeDeclaration; - doctypeDefinition: newDocument doctypeDefinition; - addNodes: newDocument nodes copy]. - ^ self. -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLDocument >> supportsSourceEditing [ - ^ true -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLDocument >> supportsTreeView [ - ^ self hasDoctypeDeclaration - or: [super supportsTreeView] -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLDocument >> writeTreeViewLabelXMLOn: aWriter [ - self writeXMLDeclarationOn: aWriter -] diff --git a/src/XML-Parser-GTExtensions/XMLDocumentHighlightDefaults.class.st b/src/XML-Parser-GTExtensions/XMLDocumentHighlightDefaults.class.st deleted file mode 100644 index 19c0db8c1..000000000 --- a/src/XML-Parser-GTExtensions/XMLDocumentHighlightDefaults.class.st +++ /dev/null @@ -1,235 +0,0 @@ -" -This class stores the default highlight TextColors used by the document highlighter. It gets the initial defaults from Shout text styling. -" -Class { - #name : #XMLDocumentHighlightDefaults, - #superclass : #XMLHighlightDefaults, - #classInstVars : [ - 'defaultXMLDeclarationColor', - 'defaultDoctypeDeclarationColor', - 'defaultPIColor', - 'defaultDeclarationColor', - 'defaultTagColor', - 'defaultNameColor', - 'defaultQuotedStringNameColor', - 'defaultQuotedStringColor', - 'defaultEntityReferenceColor', - 'defaultCommentColor', - 'defaultCDataColor' - ], - #category : #'XML-Parser-GTExtensions-Highlighting' -} - -{ #category : #accessing } -XMLDocumentHighlightDefaults class >> defaultCDataColor [ - ^ defaultCDataColor - ifNil: [defaultCDataColor := self textColorForShoutProperty: #primitive] -] - -{ #category : #accessing } -XMLDocumentHighlightDefaults class >> defaultCDataColor: aTextColor [ - defaultCDataColor := aTextColor -] - -{ #category : #accessing } -XMLDocumentHighlightDefaults class >> defaultCommentColor [ - ^ defaultCommentColor - ifNil: [defaultCommentColor := self textColorForShoutProperty: #comment] -] - -{ #category : #accessing } -XMLDocumentHighlightDefaults class >> defaultCommentColor: aTextColor [ - defaultCommentColor := aTextColor -] - -{ #category : #accessing } -XMLDocumentHighlightDefaults class >> defaultDeclarationColor [ - ^ defaultDeclarationColor - ifNil: [defaultDeclarationColor := self textColorForShoutProperty: #super] -] - -{ #category : #accessing } -XMLDocumentHighlightDefaults class >> defaultDeclarationColor: aTextColor [ - defaultDeclarationColor := aTextColor -] - -{ #category : #accessing } -XMLDocumentHighlightDefaults class >> defaultDoctypeDeclarationColor [ - ^ defaultDoctypeDeclarationColor - ifNil: [ - defaultDoctypeDeclarationColor := - self textColorForShoutProperty: #super] -] - -{ #category : #accessing } -XMLDocumentHighlightDefaults class >> defaultDoctypeDeclarationColor: aTextColor [ - defaultDoctypeDeclarationColor := aTextColor -] - -{ #category : #accessing } -XMLDocumentHighlightDefaults class >> defaultEntityReferenceColor [ - ^ defaultEntityReferenceColor - ifNil: [ - defaultEntityReferenceColor := - self textColorForShoutProperty: #character] -] - -{ #category : #accessing } -XMLDocumentHighlightDefaults class >> defaultEntityReferenceColor: aTextColor [ - defaultEntityReferenceColor := aTextColor -] - -{ #category : #accessing } -XMLDocumentHighlightDefaults class >> defaultNameColor [ - ^ defaultNameColor - ifNil: [defaultNameColor := self textColorForShoutProperty: #instVar] -] - -{ #category : #accessing } -XMLDocumentHighlightDefaults class >> defaultNameColor: aTextColor [ - defaultNameColor := aTextColor -] - -{ #category : #accessing } -XMLDocumentHighlightDefaults class >> defaultPIColor [ - ^ defaultPIColor - ifNil: [defaultPIColor := self textColorForShoutProperty: #primitive] -] - -{ #category : #accessing } -XMLDocumentHighlightDefaults class >> defaultPIColor: aTextColor [ - defaultPIColor := aTextColor -] - -{ #category : #accessing } -XMLDocumentHighlightDefaults class >> defaultPrimaryMarkupColor: aTextColor [ - self - defaultDeclarationColor: aTextColor; - defaultTagColor: aTextColor -] - -{ #category : #accessing } -XMLDocumentHighlightDefaults class >> defaultQuotedStringColor [ - ^ defaultQuotedStringColor - ifNil: [defaultQuotedStringColor := self textColorForShoutProperty: #string] -] - -{ #category : #accessing } -XMLDocumentHighlightDefaults class >> defaultQuotedStringColor: aTextColor [ - defaultQuotedStringColor := aTextColor -] - -{ #category : #accessing } -XMLDocumentHighlightDefaults class >> defaultQuotedStringNameColor [ - ^ defaultQuotedStringNameColor - ifNil: [ - defaultQuotedStringNameColor := - self textColorForShoutProperty: #self] -] - -{ #category : #accessing } -XMLDocumentHighlightDefaults class >> defaultQuotedStringNameColor: aTextColor [ - defaultQuotedStringNameColor := aTextColor -] - -{ #category : #accessing } -XMLDocumentHighlightDefaults class >> defaultSecondaryMarkupColor: aTextColor [ - self - defaultXMLDeclarationColor: aTextColor; - defaultDoctypeDeclarationColor: aTextColor; - defaultPIColor: aTextColor -] - -{ #category : #accessing } -XMLDocumentHighlightDefaults class >> defaultTagColor [ - ^ defaultTagColor - ifNil: [defaultTagColor := self textColorForShoutProperty: #instVar] -] - -{ #category : #accessing } -XMLDocumentHighlightDefaults class >> defaultTagColor: aTextColor [ - defaultTagColor := aTextColor -] - -{ #category : #accessing } -XMLDocumentHighlightDefaults class >> defaultXMLDeclarationColor [ - ^ defaultXMLDeclarationColor - ifNil: [defaultXMLDeclarationColor := self textColorForShoutProperty: #primitive] -] - -{ #category : #accessing } -XMLDocumentHighlightDefaults class >> defaultXMLDeclarationColor: aTextColor [ - defaultXMLDeclarationColor := aTextColor -] - -{ #category : #'class initialization' } -XMLDocumentHighlightDefaults class >> resetDefaults [ - super resetDefaults. - - defaultXMLDeclarationColor := nil. - defaultDoctypeDeclarationColor := nil. - defaultPIColor := nil. - defaultDeclarationColor := nil. - defaultTagColor := nil. - defaultNameColor := nil. - defaultQuotedStringNameColor := nil. - defaultQuotedStringColor := nil. - defaultEntityReferenceColor := nil. - defaultCommentColor := nil. - defaultCDataColor := nil. -] - -{ #category : #defaults } -XMLDocumentHighlightDefaults >> cdataColor [ - ^ self class defaultCDataColor -] - -{ #category : #defaults } -XMLDocumentHighlightDefaults >> commentColor [ - ^ self class defaultCommentColor -] - -{ #category : #defaults } -XMLDocumentHighlightDefaults >> declarationColor [ - ^ self class defaultDeclarationColor -] - -{ #category : #defaults } -XMLDocumentHighlightDefaults >> doctypeDeclarationColor [ - ^ self class defaultDoctypeDeclarationColor -] - -{ #category : #defaults } -XMLDocumentHighlightDefaults >> entityReferenceColor [ - ^ self class defaultEntityReferenceColor -] - -{ #category : #defaults } -XMLDocumentHighlightDefaults >> nameColor [ - ^ self class defaultNameColor -] - -{ #category : #defaults } -XMLDocumentHighlightDefaults >> piColor [ - ^ self class defaultPIColor -] - -{ #category : #defaults } -XMLDocumentHighlightDefaults >> quotedStringColor [ - ^ self class defaultQuotedStringColor -] - -{ #category : #defaults } -XMLDocumentHighlightDefaults >> quotedStringNameColor [ - ^ self class defaultQuotedStringNameColor -] - -{ #category : #defaults } -XMLDocumentHighlightDefaults >> tagColor [ - ^ self class defaultTagColor -] - -{ #category : #defaults } -XMLDocumentHighlightDefaults >> xmlDeclarationColor [ - ^ self class defaultXMLDeclarationColor -] diff --git a/src/XML-Parser-GTExtensions/XMLDocumentHighlighter.class.st b/src/XML-Parser-GTExtensions/XMLDocumentHighlighter.class.st deleted file mode 100644 index fd997693e..000000000 --- a/src/XML-Parser-GTExtensions/XMLDocumentHighlighter.class.st +++ /dev/null @@ -1,330 +0,0 @@ -" -This class is a highlighter to highlight XML document Text objects using XMLHighlights. -" -Class { - #name : #XMLDocumentHighlighter, - #superclass : #XMLHighlighter, - #instVars : [ - 'xmlDeclarationColor', - 'doctypeDeclarationColor', - 'declarationColor', - 'piColor', - 'tagColor', - 'nameColor', - 'quotedStringNameColor', - 'quotedStringColor', - 'entityReferenceColor', - 'cdataColor', - 'commentColor', - 'xmlDeclarationHighlight', - 'doctypeDeclarationHighlight', - 'declarationHighlight', - 'piHighlight', - 'tagHighlight', - 'nameHighlight', - 'quotedStringNameHighlight', - 'quotedStringHighlight', - 'entityReferenceHighlight', - 'cdataHighlight', - 'commentHighlight' - ], - #category : #'XML-Parser-GTExtensions-Highlighting' -} - -{ #category : #accessing } -XMLDocumentHighlighter >> cdataColor [ - ^ cdataColor -] - -{ #category : #accessing } -XMLDocumentHighlighter >> cdataColor: aTextColor [ - cdataColor := aTextColor -] - -{ #category : #accessing } -XMLDocumentHighlighter >> commentColor [ - ^ commentColor -] - -{ #category : #accessing } -XMLDocumentHighlighter >> commentColor: aTextColor [ - commentColor := aTextColor -] - -{ #category : #accessing } -XMLDocumentHighlighter >> declarationColor [ - ^ declarationColor -] - -{ #category : #accessing } -XMLDocumentHighlighter >> declarationColor: aTextColor [ - declarationColor := aTextColor -] - -{ #category : #defaults } -XMLDocumentHighlighter >> defaultsClass [ - ^ XMLDocumentHighlightDefaults -] - -{ #category : #accessing } -XMLDocumentHighlighter >> doctypeDeclarationColor [ - ^ doctypeDeclarationColor -] - -{ #category : #accessing } -XMLDocumentHighlighter >> doctypeDeclarationColor: aTextColor [ - doctypeDeclarationColor := aTextColor -] - -{ #category : #'highlighting - positions' } -XMLDocumentHighlighter >> endCDataHighlightPosition: aPosition [ - self - endHighlight: cdataHighlight - position: aPosition -] - -{ #category : #'highlighting - positions' } -XMLDocumentHighlighter >> endCommentHighlightPosition: aPosition [ - self - endHighlight: commentHighlight - position: aPosition -] - -{ #category : #'highlighting - positions' } -XMLDocumentHighlighter >> endDeclarationHighlightPosition: aPosition [ - self - endHighlight: declarationHighlight - position: aPosition -] - -{ #category : #'highlighting - positions' } -XMLDocumentHighlighter >> endDoctypeDeclarationHighlightPosition: aPosition [ - self - endHighlight: doctypeDeclarationHighlight - position: aPosition -] - -{ #category : #'highlighting - positions' } -XMLDocumentHighlighter >> endEntityReferenceHighlightPosition: aPosition [ - self - endHighlight: entityReferenceHighlight - position: aPosition -] - -{ #category : #'highlighting - positions' } -XMLDocumentHighlighter >> endNameHighlightPosition: aPosition [ - self - endHighlight: nameHighlight - position: aPosition -] - -{ #category : #'highlighting - positions' } -XMLDocumentHighlighter >> endPIHighlightPosition: aPosition [ - self - endHighlight: piHighlight - position: aPosition -] - -{ #category : #'highlighting - positions' } -XMLDocumentHighlighter >> endQuotedStringHighlightPosition: aPosition [ - self - endHighlight: quotedStringHighlight - position: aPosition -] - -{ #category : #'highlighting - positions' } -XMLDocumentHighlighter >> endQuotedStringNameHighlightPosition: aPosition [ - self - endHighlight: quotedStringNameHighlight - position: aPosition -] - -{ #category : #'highlighting - positions' } -XMLDocumentHighlighter >> endTagHighlightPosition: aPosition [ - self - endHighlight: tagHighlight - position: aPosition -] - -{ #category : #'highlighting - positions' } -XMLDocumentHighlighter >> endXMLDeclarationHighlightPosition: aPosition [ - self - endHighlight: xmlDeclarationHighlight - position: aPosition -] - -{ #category : #accessing } -XMLDocumentHighlighter >> entityReferenceColor [ - ^ entityReferenceColor -] - -{ #category : #accessing } -XMLDocumentHighlighter >> entityReferenceColor: aTextColor [ - entityReferenceColor := aTextColor -] - -{ #category : #initialization } -XMLDocumentHighlighter >> initializeColorsWithDefaults: aDefaults [ - super initializeColorsWithDefaults: aDefaults. - - self - xmlDeclarationColor: aDefaults xmlDeclarationColor; - doctypeDeclarationColor: aDefaults doctypeDeclarationColor; - piColor: aDefaults piColor; - declarationColor: aDefaults declarationColor; - tagColor: aDefaults tagColor; - nameColor: aDefaults nameColor; - quotedStringNameColor: aDefaults quotedStringNameColor; - quotedStringColor: aDefaults quotedStringColor; - entityReferenceColor: aDefaults entityReferenceColor; - commentColor: aDefaults commentColor; - cdataColor: aDefaults cdataColor. -] - -{ #category : #accessing } -XMLDocumentHighlighter >> nameColor [ - ^ nameColor -] - -{ #category : #accessing } -XMLDocumentHighlighter >> nameColor: aTextColor [ - nameColor := aTextColor -] - -{ #category : #accessing } -XMLDocumentHighlighter >> piColor [ - ^ piColor -] - -{ #category : #accessing } -XMLDocumentHighlighter >> piColor: aTextColor [ - piColor := aTextColor -] - -{ #category : #accessing } -XMLDocumentHighlighter >> quotedStringColor [ - ^ quotedStringColor -] - -{ #category : #accessing } -XMLDocumentHighlighter >> quotedStringColor: aTextColor [ - quotedStringColor := aTextColor -] - -{ #category : #accessing } -XMLDocumentHighlighter >> quotedStringNameColor [ - ^ quotedStringNameColor -] - -{ #category : #accessing } -XMLDocumentHighlighter >> quotedStringNameColor: aTextColor [ - quotedStringNameColor := aTextColor -] - -{ #category : #'highlighting - positions' } -XMLDocumentHighlighter >> startCDataHighlightPosition: aPosition [ - cdataHighlight := - self - newHighlightColor: self cdataColor - position: aPosition -] - -{ #category : #'highlighting - positions' } -XMLDocumentHighlighter >> startCommentHighlightPosition: aPosition [ - commentHighlight := - self - newHighlightColor: self commentColor - position: aPosition -] - -{ #category : #'highlighting - positions' } -XMLDocumentHighlighter >> startDeclarationHighlightPosition: aPosition [ - declarationHighlight := - self - newHighlightColor: self declarationColor - position: aPosition -] - -{ #category : #'highlighting - positions' } -XMLDocumentHighlighter >> startDoctypeDeclarationHighlightPosition: aPosition [ - doctypeDeclarationHighlight := - self - newHighlightColor: self doctypeDeclarationColor - position: aPosition -] - -{ #category : #'highlighting - positions' } -XMLDocumentHighlighter >> startEntityReferenceHighlightPosition: aPosition [ - entityReferenceHighlight := - self - newHighlightColor: self entityReferenceColor - position: aPosition -] - -{ #category : #'highlighting - positions' } -XMLDocumentHighlighter >> startNameHighlightPosition: aPosition [ - nameHighlight := - self - newHighlightColor: self nameColor - position: aPosition -] - -{ #category : #'highlighting - positions' } -XMLDocumentHighlighter >> startPIHighlightPosition: aPosition [ - piHighlight := - self - newHighlightColor: self piColor - position: aPosition -] - -{ #category : #'highlighting - positions' } -XMLDocumentHighlighter >> startQuotedStringHighlightPosition: aPosition [ - quotedStringHighlight := - self - newHighlightColor: self quotedStringColor - position: aPosition -] - -{ #category : #'highlighting - positions' } -XMLDocumentHighlighter >> startQuotedStringNameHighlightPosition: aPosition [ - quotedStringNameHighlight := - self - newHighlightColor: self quotedStringNameColor - position: aPosition -] - -{ #category : #'highlighting - positions' } -XMLDocumentHighlighter >> startTagHighlightPosition: aPosition [ - tagHighlight := - self - newHighlightColor: self tagColor - position: aPosition -] - -{ #category : #'highlighting - positions' } -XMLDocumentHighlighter >> startXMLDeclarationHighlightPosition: aPosition [ - xmlDeclarationHighlight := - self - newHighlightColor: self xmlDeclarationColor - position: aPosition -] - -{ #category : #accessing } -XMLDocumentHighlighter >> tagColor [ - ^ tagColor -] - -{ #category : #accessing } -XMLDocumentHighlighter >> tagColor: aTextColor [ - tagColor := aTextColor -] - -{ #category : #accessing } -XMLDocumentHighlighter >> xmlDeclarationColor [ - ^ xmlDeclarationColor -] - -{ #category : #accessing } -XMLDocumentHighlighter >> xmlDeclarationColor: aTextColor [ - xmlDeclarationColor := aTextColor -] diff --git a/src/XML-Parser-GTExtensions/XMLElement.extension.st b/src/XML-Parser-GTExtensions/XMLElement.extension.st deleted file mode 100644 index 64e50b68c..000000000 --- a/src/XML-Parser-GTExtensions/XMLElement.extension.st +++ /dev/null @@ -1,73 +0,0 @@ -Extension { #name : #XMLElement } - -{ #category : #'*XML-Parser-GTExtensions' } -XMLElement >> formForImageEntity: imageEntity [ - | imageType parserClassName parserClass parser | - imageType := imageEntity contentType sub. - parserClassName := imageType asUppercase, #ReadWriter. - parserClass := Smalltalk globals at: parserClassName asSymbol. - parser := parserClass on: imageEntity readStream. - ^ parser nextImage -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLElement class >> gtExampleXmlNode [ - - ^ XMLDocument gtExampleXmlNode firstElement -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLElement >> gtInspectorImageIn: composite inContext: aGTInspector [ - - | client url | - aGTInspector panes size > 1 - ifFalse: [ ^ self ]. - client := (aGTInspector panes reversed collect: [ :each | (each port: #entity) value ]) - detect: [ :each | (each isKindOf: ZnClient) and: [ each request notNil ] ] - ifNone: [ ^ self ]. - url := client request absoluteUrl. - ^ composite morph - title: 'Image'; - display: - [ self - formForImageEntity: - (ZnClient new - beOneShot; - get: url / (self attributeAt: 'src'); - entity) ]; - when: [ (self isNamed: 'img') and: [ self includesAttribute: 'src' ] ] -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLElement >> supportsRemoveAction [ - ^ self hasParent - and: [self parent isDocument not] -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLElement >> supportsSourceEditing [ - ^ self hasParent -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLElement >> writeTreeViewLabelXMLOn: aWriter [ - self supportsTreeView - ifTrue: [ - "write just an unclosed start tag if the element can be expanded - to display tree view children" - aWriter startTag - name: self name; - "uses setAttributes: for performance" - setAttributes: attributes] - ifFalse: [| tagWriter | - (tagWriter := aWriter tag) - name: self name; - "uses setAttributes: for performance" - setAttributes: attributes. - "a non-expandable element can still have chilren (string nodes) that - need to be written" - self hasChildren - ifTrue: [ - tagWriter with: [ - self writeInnerXMLOn: aWriter]]] -] diff --git a/src/XML-Parser-GTExtensions/XMLExternalDocumentConverter.class.st b/src/XML-Parser-GTExtensions/XMLExternalDocumentConverter.class.st deleted file mode 100644 index b71b2c31a..000000000 --- a/src/XML-Parser-GTExtensions/XMLExternalDocumentConverter.class.st +++ /dev/null @@ -1,176 +0,0 @@ -" -This class converts an external XML document into a string with line endings normalized to CRs (the Pharo/Squeak LE) and decodes it from any of the supported character encodings and will infer incodings from byte order marks or null bytes and also consider encoding attributes. -" -Class { - #name : #XMLExternalDocumentConverter, - #superclass : #Object, - #instVars : [ - 'streamReader', - 'outputStream', - 'writeStream' - ], - #category : #'XML-Parser-GTExtensions-Highlighting-Parser' -} - -{ #category : #converting } -XMLExternalDocumentConverter class >> convert: aStringOrStream [ - ^ (self on: aStringOrStream) convert -] - -{ #category : #converting } -XMLExternalDocumentConverter class >> convert: aStringOrStream readLimit: aReadLimit [ - ^ (self - on: aStringOrStream - readLimit: aReadLimit) convert -] - -{ #category : #converting } -XMLExternalDocumentConverter class >> convertFileNamed: aFileName [ - ^ (self onFileNamed: aFileName) convert -] - -{ #category : #'instance creation' } -XMLExternalDocumentConverter class >> on: aStringOrStream [ - ^ self - on: aStringOrStream - readLimit: XMLParserLimits defaultReadLimit -] - -{ #category : #'instance creation' } -XMLExternalDocumentConverter class >> on: aStringOrStream readLimit: anInteger [ - ^ self new - setStream: - (aStringOrStream isStream - ifTrue: [aStringOrStream] - ifFalse: [aStringOrStream readStream]) - readLimit: anInteger -] - -{ #category : #'instance creation' } -XMLExternalDocumentConverter class >> onFileNamed: aFileName [ - ^ self on: - (XMLDecodingReadStreamAdapter nonDecodingOn: - aFileName asXMLFileHandle rawReadStream) -] - -{ #category : #closing } -XMLExternalDocumentConverter >> close [ - streamReader closeStreams -] - -{ #category : #accessing } -XMLExternalDocumentConverter >> contents [ - ^ outputStream contents -] - -{ #category : #converting } -XMLExternalDocumentConverter >> convert [ - ^ self - detectEncoding; - nextXMLDeclaration; - skipToEnd; - close; - contents -] - -{ #category : #'private ' } -XMLExternalDocumentConverter >> detectEncoding [ - streamReader detectEncoding - -] - -{ #category : #'private ' } -XMLExternalDocumentConverter >> expectNextAll: aString [ - aString do: [:each | - "use #= for pre-SpurVM compatibility where wide chars aren't #==" - self next = each - ifFalse: [^ nil]]. - ^ aString. -] - -{ #category : #'private ' } -XMLExternalDocumentConverter >> next [ - ^ streamReader next - ifNotNil: [:nextChar | - outputStream nextPut: nextChar. - nextChar] -] - -{ #category : #'private ' } -XMLExternalDocumentConverter >> nextXMLAttributeNamed: anAttributeName [ - | quote nextChar | - - self skipSeparators. - (self expectNextAll: anAttributeName) - ifNil: [^ nil]. - - self skipSeparators. - self next == $= - ifFalse: [^ nil]. - self skipSeparators. - - ((quote := self next) == $" - or: [quote == $']) - ifFalse: [^ nil]. - - writeStream reset. - [(nextChar := self next) isNil - or: [nextChar == quote]] - whileFalse: [writeStream nextPut: nextChar]. - - nextChar - ifNil: [^ nil] - ifNotNil: [^ writeStream contents]. -] - -{ #category : #'private ' } -XMLExternalDocumentConverter >> nextXMLDeclaration [ - self skipSeparators. - (self expectNextAll: '> peek [ - ^ streamReader peek -] - -{ #category : #initialization } -XMLExternalDocumentConverter >> setStream: aStream readLimit: anInteger [ - streamReader := - XMLNestedStreamReader - on: - (aStream isXMLConvertingStreamAdapter - ifTrue: [aStream] - ifFalse: [ - XMLDecodingReadStreamAdapter nonDecodingOnIfBinary: - aStream]) - readLimit: anInteger. - - "this is the preferred LE char for Pharo/Squeak" - streamReader normalizedLineEndingChar: Character cr. - - outputStream := (String new: 1024) writeStream. - writeStream := (String new: 64) writeStream. -] - -{ #category : #'private ' } -XMLExternalDocumentConverter >> skipSeparators [ - [self peek isXMLSeparator] - whileTrue: [self next] -] - -{ #category : #'private ' } -XMLExternalDocumentConverter >> skipToEnd [ - [self next notNil] whileTrue -] diff --git a/src/XML-Parser-GTExtensions/XMLHighlight.class.st b/src/XML-Parser-GTExtensions/XMLHighlight.class.st deleted file mode 100644 index 187afaa0b..000000000 --- a/src/XML-Parser-GTExtensions/XMLHighlight.class.st +++ /dev/null @@ -1,59 +0,0 @@ -" -This class stores a highlight TextColor and 1-based start/end highlight positions. -" -Class { - #name : #XMLHighlight, - #superclass : #Object, - #instVars : [ - 'color', - 'start', - 'end' - ], - #category : #'XML-Parser-GTExtensions-Highlighting' -} - -{ #category : #highlighting } -XMLHighlight >> applyToText: aText [ - | attributeStart attributeEnd | - - "must be bounded between 1 and aText size to avoid errors if the text - being highlighted was truncated by printString/asString" - attributeStart := (self start ifNil: [1]) max: 1. - attributeEnd := (self end ifNil: [aText size]) min: aText size. - attributeStart <= attributeEnd - ifTrue: [ - aText - addAttribute: self color - from: attributeStart - to: attributeEnd]. -] - -{ #category : #accessing } -XMLHighlight >> color [ - ^ color -] - -{ #category : #accessing } -XMLHighlight >> color: aTextColor [ - color := aTextColor -] - -{ #category : #accessing } -XMLHighlight >> end [ - ^ end -] - -{ #category : #accessing } -XMLHighlight >> end: anEndPosition [ - end := anEndPosition -] - -{ #category : #accessing } -XMLHighlight >> start [ - ^ start -] - -{ #category : #accessing } -XMLHighlight >> start: aStartPosition [ - start := aStartPosition -] diff --git a/src/XML-Parser-GTExtensions/XMLHighlightDefaults.class.st b/src/XML-Parser-GTExtensions/XMLHighlightDefaults.class.st deleted file mode 100644 index 935bf123e..000000000 --- a/src/XML-Parser-GTExtensions/XMLHighlightDefaults.class.st +++ /dev/null @@ -1,62 +0,0 @@ -" -This is a base class for storing the default highlight TextColors used by a highlighter. It gets the initial defaults from Shout text styling. -" -Class { - #name : #XMLHighlightDefaults, - #superclass : #Object, - #classInstVars : [ - 'defaultDefaultColor', - 'uiTheme' - ], - #category : #'XML-Parser-GTExtensions-Highlighting' -} - -{ #category : #accessing } -XMLHighlightDefaults class >> defaultDefaultColor [ - ^ defaultDefaultColor - ifNil: [defaultDefaultColor := self textColorForShoutProperty: #default] -] - -{ #category : #accessing } -XMLHighlightDefaults class >> defaultDefaultColor: aTextColor [ - defaultDefaultColor := aTextColor -] - -{ #category : #'class initialization' } -XMLHighlightDefaults class >> initialize [ - "self initialize" - - self resetDefaults -] - -{ #category : #'instance creation' } -XMLHighlightDefaults class >> new [ - "if the theme was changed since last initialization, reset the defaults" - self uiTheme = Smalltalk ui theme - ifFalse: [self resetDefaults]. - - ^ super new. -] - -{ #category : #'class initialization' } -XMLHighlightDefaults class >> resetDefaults [ - defaultDefaultColor := nil -] - -{ #category : #private } -XMLHighlightDefaults class >> textColorForShoutProperty: aShoutProperty [ - ^ TextColor color: - (((SHRBTextStyler new attributesFor: aShoutProperty) - detect: [:each | each respondsTo: #color] - ifNone: [^ nil]) color) -] - -{ #category : #private } -XMLHighlightDefaults class >> uiTheme [ - ^ uiTheme ifNil: [uiTheme := Smalltalk ui theme] -] - -{ #category : #defaults } -XMLHighlightDefaults >> defaultColor [ - ^ self class defaultDefaultColor -] diff --git a/src/XML-Parser-GTExtensions/XMLHighlighter.class.st b/src/XML-Parser-GTExtensions/XMLHighlighter.class.st deleted file mode 100644 index b7a0e21f1..000000000 --- a/src/XML-Parser-GTExtensions/XMLHighlighter.class.st +++ /dev/null @@ -1,81 +0,0 @@ -" -This is a base class for highlighters that highlight Text objects using XMLHighlights. -" -Class { - #name : #XMLHighlighter, - #superclass : #Object, - #instVars : [ - 'highlights', - 'defaultHighlight' - ], - #category : #'XML-Parser-GTExtensions-Highlighting' -} - -{ #category : #accessing } -XMLHighlighter >> defaultColor [ - ^ defaultHighlight color -] - -{ #category : #accessing } -XMLHighlighter >> defaultColor: aTextColor [ - defaultHighlight color: aTextColor -] - -{ #category : #defaults } -XMLHighlighter >> defaults [ - ^ self defaultsClass new -] - -{ #category : #defaults } -XMLHighlighter >> defaultsClass [ - ^ XMLHighlightDefaults -] - -{ #category : #private } -XMLHighlighter >> endHighlight: aHighlightOrNil position: aPosition [ - aHighlightOrNil - ifNotNil: [aHighlightOrNil end: aPosition] -] - -{ #category : #highlighting } -XMLHighlighter >> highlightText: aText [ - highlights do: [:each | each applyToText: aText] -] - -{ #category : #highlighting } -XMLHighlighter >> highlightText: aText withColor: aTextColor startingAt: aPosition [ - XMLHighlight new - color: aTextColor; - start: aPosition; - applyToText: aText -] - -{ #category : #initialization } -XMLHighlighter >> initialize [ - super initialize. - - self - initializeHighlights; - initializeColorsWithDefaults: self defaults. -] - -{ #category : #initialization } -XMLHighlighter >> initializeColorsWithDefaults: aDefaults [ - self defaultColor: aDefaults defaultColor -] - -{ #category : #initialization } -XMLHighlighter >> initializeHighlights [ - defaultHighlight := XMLHighlight new. - highlights := OrderedCollection with: defaultHighlight. -] - -{ #category : #private } -XMLHighlighter >> newHighlightColor: aTextColor position: aPosition [ - ^ aTextColor - ifNotNil: [ - highlights addLast: - (XMLHighlight new - color: aTextColor; - start: aPosition)] -] diff --git a/src/XML-Parser-GTExtensions/XMLHighlightingCanonicalWriterFormatter.class.st b/src/XML-Parser-GTExtensions/XMLHighlightingCanonicalWriterFormatter.class.st deleted file mode 100644 index 9fd3bd6d8..000000000 --- a/src/XML-Parser-GTExtensions/XMLHighlightingCanonicalWriterFormatter.class.st +++ /dev/null @@ -1,212 +0,0 @@ -" -This formatter adds highlights to canonical XMLHighlightingWriter output. - -(Generated from XMLHighlightingWriterFormatter.) -" -Class { - #name : #XMLHighlightingCanonicalWriterFormatter, - #superclass : #XMLCanonicalWriterFormatter, - #instVars : [ - 'highlighter' - ], - #category : #'XML-Parser-GTExtensions-Highlighting-Writer' -} - -{ #category : #private } -XMLHighlightingCanonicalWriterFormatter >> endPosition [ - ^ self writer position -] - -{ #category : #formatting } -XMLHighlightingCanonicalWriterFormatter >> formatAfterCData: aCDataWriter [ - highlighter endCDataHighlightPosition: self endPosition. - - super formatAfterCData: aCDataWriter. -] - -{ #category : #formatting } -XMLHighlightingCanonicalWriterFormatter >> formatAfterCharacterEscape: aCharacterEscape [ - highlighter endEntityReferenceHighlightPosition: self endPosition. - - super formatAfterCharacterEscape: aCharacterEscape. -] - -{ #category : #formatting } -XMLHighlightingCanonicalWriterFormatter >> formatAfterComment: aCommentWriter [ - highlighter endCommentHighlightPosition: self endPosition. - - super formatAfterComment: aCommentWriter. -] - -{ #category : #formatting } -XMLHighlightingCanonicalWriterFormatter >> formatAfterDeclaration: aDeclarationWriter [ - highlighter endDeclarationHighlightPosition: self endPosition. - - super formatAfterDeclaration: aDeclarationWriter. -] - -{ #category : #formatting } -XMLHighlightingCanonicalWriterFormatter >> formatAfterDoctypeDeclaration: aDoctypeDeclarationWriter [ - highlighter endDoctypeDeclarationHighlightPosition: self endPosition. - - super formatAfterDoctypeDeclaration: aDoctypeDeclarationWriter. -] - -{ #category : #formatting } -XMLHighlightingCanonicalWriterFormatter >> formatAfterEndTag: aTagWriter [ - highlighter endTagHighlightPosition: self endPosition. - - super formatAfterEndTag: aTagWriter. -] - -{ #category : #formatting } -XMLHighlightingCanonicalWriterFormatter >> formatAfterEntityReference: anEntityReferenceWriter [ - highlighter endEntityReferenceHighlightPosition: self endPosition. - - super formatAfterEntityReference: anEntityReferenceWriter. -] - -{ #category : #formatting } -XMLHighlightingCanonicalWriterFormatter >> formatAfterName: aName [ - highlighter endNameHighlightPosition: self endPosition. - - super formatAfterName: aName. -] - -{ #category : #formatting } -XMLHighlightingCanonicalWriterFormatter >> formatAfterPI: aPIWriter [ - highlighter endPIHighlightPosition: self endPosition. - - super formatAfterPI: aPIWriter. -] - -{ #category : #formatting } -XMLHighlightingCanonicalWriterFormatter >> formatAfterQuotedStringName: aName [ - highlighter endQuotedStringNameHighlightPosition: self endPosition. - - super formatAfterQuotedStringName: aName. -] - -{ #category : #formatting } -XMLHighlightingCanonicalWriterFormatter >> formatAfterQuotedStringValue: aString [ - highlighter endQuotedStringHighlightPosition: self endPosition + 1. - - super formatAfterQuotedStringValue: aString. -] - -{ #category : #formatting } -XMLHighlightingCanonicalWriterFormatter >> formatAfterStartTag: aTagWriter [ - highlighter endTagHighlightPosition: self endPosition. - - super formatAfterStartTag: aTagWriter. -] - -{ #category : #formatting } -XMLHighlightingCanonicalWriterFormatter >> formatAfterXMLDeclaration: anXMLDeclarationWriter [ - highlighter endXMLDeclarationHighlightPosition: self endPosition. - - super formatAfterXMLDeclaration: anXMLDeclarationWriter. -] - -{ #category : #formatting } -XMLHighlightingCanonicalWriterFormatter >> formatBeforeCData: aCDataWriter [ - super formatBeforeCData: aCDataWriter. - - highlighter startCDataHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingCanonicalWriterFormatter >> formatBeforeCharacterEscape: aCharacterEscape [ - super formatBeforeCharacterEscape: aCharacterEscape. - - highlighter startEntityReferenceHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingCanonicalWriterFormatter >> formatBeforeComment: aCommentWriter [ - super formatBeforeComment: aCommentWriter. - - highlighter startCommentHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingCanonicalWriterFormatter >> formatBeforeDeclaration: aDeclarationWriter [ - super formatBeforeDeclaration: aDeclarationWriter. - - highlighter startDeclarationHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingCanonicalWriterFormatter >> formatBeforeDoctypeDeclaration: aDoctypeDeclarationWriter [ - super formatBeforeDoctypeDeclaration: aDoctypeDeclarationWriter. - - highlighter startDoctypeDeclarationHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingCanonicalWriterFormatter >> formatBeforeEndTag: aTagWriter [ - super formatBeforeEndTag: aTagWriter. - - highlighter startTagHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingCanonicalWriterFormatter >> formatBeforeEntityReference: anEntityReferenceWriter [ - super formatBeforeEntityReference: anEntityReferenceWriter. - - highlighter startEntityReferenceHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingCanonicalWriterFormatter >> formatBeforeName: aName [ - highlighter startNameHighlightPosition: self startPosition. - - super formatBeforeName: aName. -] - -{ #category : #formatting } -XMLHighlightingCanonicalWriterFormatter >> formatBeforePI: aPIWriter [ - super formatBeforePI: aPIWriter. - - highlighter startPIHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingCanonicalWriterFormatter >> formatBeforeQuotedStringName: aName [ - highlighter startQuotedStringNameHighlightPosition: self startPosition. - - super formatBeforeQuotedStringName: aName. -] - -{ #category : #formatting } -XMLHighlightingCanonicalWriterFormatter >> formatBeforeQuotedStringValue: aString [ - super formatBeforeQuotedStringValue: aString. - - highlighter startQuotedStringHighlightPosition: self startPosition - 1. -] - -{ #category : #formatting } -XMLHighlightingCanonicalWriterFormatter >> formatBeforeStartTag: aTagWriter [ - super formatBeforeStartTag: aTagWriter. - - highlighter startTagHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingCanonicalWriterFormatter >> formatBeforeXMLDeclaration: anXMLDeclarationWriter [ - super formatBeforeXMLDeclaration: anXMLDeclarationWriter. - - highlighter startXMLDeclarationHighlightPosition: self startPosition. -] - -{ #category : #private } -XMLHighlightingCanonicalWriterFormatter >> startPosition [ - ^ self writer position + 1 -] - -{ #category : #accessing } -XMLHighlightingCanonicalWriterFormatter >> writer: aWriter [ - super writer: aWriter. - - highlighter := aWriter highlighter. -] diff --git a/src/XML-Parser-GTExtensions/XMLHighlightingParser.class.st b/src/XML-Parser-GTExtensions/XMLHighlightingParser.class.st deleted file mode 100644 index 810204c12..000000000 --- a/src/XML-Parser-GTExtensions/XMLHighlightingParser.class.st +++ /dev/null @@ -1,171 +0,0 @@ -" -This class is an XML parser that can convert its input to Text objects styled with highlighting after parsing. -" -Class { - #name : #XMLHighlightingParser, - #superclass : #SAXPositionHandler, - #instVars : [ - 'highlighter', - 'encoding' - ], - #category : #'XML-Parser-GTExtensions-Highlighting-Parser' -} - -{ #category : #converting } -XMLHighlightingParser >> asHighlightedText [ - | text | - - text := self input asString asText. - highlighter highlightText: text. - ^ text. -] - -{ #category : #converting } -XMLHighlightingParser >> asHighlightedTextColored: aTextColor startingAt: aPosition [ - | text | - - text := self asHighlightedText. - highlighter - highlightText: text - withColor: aTextColor - startingAt: aPosition. - ^ text. -] - -{ #category : #accessing } -XMLHighlightingParser >> encoding [ - ^ encoding -] - -{ #category : #'handling - positions' } -XMLHighlightingParser >> endCDataPosition: aPosition [ - highlighter endCDataHighlightPosition: aPosition -] - -{ #category : #'handling - positions' } -XMLHighlightingParser >> endCommentPosition: aPosition [ - highlighter endCommentHighlightPosition: aPosition -] - -{ #category : #'handling - positions' } -XMLHighlightingParser >> endDeclarationPosition: aPosition [ - highlighter endDeclarationHighlightPosition: aPosition -] - -{ #category : #'handling - positions' } -XMLHighlightingParser >> endDoctypeDeclarationPosition: aPosition [ - highlighter endDoctypeDeclarationHighlightPosition: aPosition -] - -{ #category : #'handling - positions' } -XMLHighlightingParser >> endEntityReferencePosition: aPosition [ - highlighter endEntityReferenceHighlightPosition: aPosition -] - -{ #category : #'handling - positions' } -XMLHighlightingParser >> endNamePosition: aPosition [ - highlighter endNameHighlightPosition: aPosition -] - -{ #category : #'handling - positions' } -XMLHighlightingParser >> endPIPosition: aPosition [ - highlighter endPIHighlightPosition: aPosition -] - -{ #category : #'handling - positions' } -XMLHighlightingParser >> endQuotedStringNamePosition: aPosition [ - highlighter endQuotedStringNameHighlightPosition: aPosition -] - -{ #category : #'handling - positions' } -XMLHighlightingParser >> endQuotedStringPosition: aPosition [ - highlighter endQuotedStringHighlightPosition: aPosition -] - -{ #category : #'handling - positions' } -XMLHighlightingParser >> endTagPosition: aPosition [ - highlighter endTagHighlightPosition: aPosition -] - -{ #category : #'handling - positions' } -XMLHighlightingParser >> endXMLDeclarationPosition: aPosition [ - highlighter endXMLDeclarationHighlightPosition: aPosition -] - -{ #category : #accessing } -XMLHighlightingParser >> highlighter [ - ^ highlighter -] - -{ #category : #initialization } -XMLHighlightingParser >> on: aStringOrStream [ - super on: aStringOrStream. - - highlighter := XMLDocumentHighlighter new. - encoding := ''. -] - -{ #category : #parsing } -XMLHighlightingParser >> parsingResult [ - ^ self asHighlightedText -] - -{ #category : #'handling - positions' } -XMLHighlightingParser >> startCDataPosition: aPosition [ - highlighter startCDataHighlightPosition: aPosition -] - -{ #category : #'handling - positions' } -XMLHighlightingParser >> startCommentPosition: aPosition [ - highlighter startCommentHighlightPosition: aPosition -] - -{ #category : #'handling - positions' } -XMLHighlightingParser >> startDeclarationPosition: aPosition [ - highlighter startDeclarationHighlightPosition: aPosition -] - -{ #category : #'handling - positions' } -XMLHighlightingParser >> startDoctypeDeclarationPosition: aPosition [ - highlighter startDoctypeDeclarationHighlightPosition: aPosition -] - -{ #category : #'handling - positions' } -XMLHighlightingParser >> startEntityReferencePosition: aPosition [ - highlighter startEntityReferenceHighlightPosition: aPosition -] - -{ #category : #'handling - positions' } -XMLHighlightingParser >> startNamePosition: aPosition [ - highlighter startNameHighlightPosition: aPosition -] - -{ #category : #'handling - positions' } -XMLHighlightingParser >> startPIPosition: aPosition [ - highlighter startPIHighlightPosition: aPosition -] - -{ #category : #'handling - positions' } -XMLHighlightingParser >> startQuotedStringNamePosition: aPosition [ - highlighter startQuotedStringNameHighlightPosition: aPosition -] - -{ #category : #'handling - positions' } -XMLHighlightingParser >> startQuotedStringPosition: aPosition [ - highlighter startQuotedStringHighlightPosition: aPosition -] - -{ #category : #'handling - positions' } -XMLHighlightingParser >> startTagPosition: aPosition [ - highlighter startTagHighlightPosition: aPosition -] - -{ #category : #'handling - positions' } -XMLHighlightingParser >> startXMLDeclarationPosition: aPosition [ - highlighter startXMLDeclarationHighlightPosition: aPosition -] - -{ #category : #'handling - lexical' } -XMLHighlightingParser >> xmlVersion: aVersionFloat encoding: anEncoding standalone: aBoolean [ - encoding := anEncoding -] diff --git a/src/XML-Parser-GTExtensions/XMLHighlightingPrettyPrintingWriterFormatter.class.st b/src/XML-Parser-GTExtensions/XMLHighlightingPrettyPrintingWriterFormatter.class.st deleted file mode 100644 index 03292d4d6..000000000 --- a/src/XML-Parser-GTExtensions/XMLHighlightingPrettyPrintingWriterFormatter.class.st +++ /dev/null @@ -1,212 +0,0 @@ -" -This formatter adds highlights to pretty printed XMLHighlightingWriter output. - -(Generated from XMLHighlightingWriterFormatter.) -" -Class { - #name : #XMLHighlightingPrettyPrintingWriterFormatter, - #superclass : #XMLPrettyPrintingWriterFormatter, - #instVars : [ - 'highlighter' - ], - #category : #'XML-Parser-GTExtensions-Highlighting-Writer' -} - -{ #category : #private } -XMLHighlightingPrettyPrintingWriterFormatter >> endPosition [ - ^ self writer position -] - -{ #category : #formatting } -XMLHighlightingPrettyPrintingWriterFormatter >> formatAfterCData: aCDataWriter [ - highlighter endCDataHighlightPosition: self endPosition. - - super formatAfterCData: aCDataWriter. -] - -{ #category : #formatting } -XMLHighlightingPrettyPrintingWriterFormatter >> formatAfterCharacterEscape: aCharacterEscape [ - highlighter endEntityReferenceHighlightPosition: self endPosition. - - super formatAfterCharacterEscape: aCharacterEscape. -] - -{ #category : #formatting } -XMLHighlightingPrettyPrintingWriterFormatter >> formatAfterComment: aCommentWriter [ - highlighter endCommentHighlightPosition: self endPosition. - - super formatAfterComment: aCommentWriter. -] - -{ #category : #formatting } -XMLHighlightingPrettyPrintingWriterFormatter >> formatAfterDeclaration: aDeclarationWriter [ - highlighter endDeclarationHighlightPosition: self endPosition. - - super formatAfterDeclaration: aDeclarationWriter. -] - -{ #category : #formatting } -XMLHighlightingPrettyPrintingWriterFormatter >> formatAfterDoctypeDeclaration: aDoctypeDeclarationWriter [ - highlighter endDoctypeDeclarationHighlightPosition: self endPosition. - - super formatAfterDoctypeDeclaration: aDoctypeDeclarationWriter. -] - -{ #category : #formatting } -XMLHighlightingPrettyPrintingWriterFormatter >> formatAfterEndTag: aTagWriter [ - highlighter endTagHighlightPosition: self endPosition. - - super formatAfterEndTag: aTagWriter. -] - -{ #category : #formatting } -XMLHighlightingPrettyPrintingWriterFormatter >> formatAfterEntityReference: anEntityReferenceWriter [ - highlighter endEntityReferenceHighlightPosition: self endPosition. - - super formatAfterEntityReference: anEntityReferenceWriter. -] - -{ #category : #formatting } -XMLHighlightingPrettyPrintingWriterFormatter >> formatAfterName: aName [ - highlighter endNameHighlightPosition: self endPosition. - - super formatAfterName: aName. -] - -{ #category : #formatting } -XMLHighlightingPrettyPrintingWriterFormatter >> formatAfterPI: aPIWriter [ - highlighter endPIHighlightPosition: self endPosition. - - super formatAfterPI: aPIWriter. -] - -{ #category : #formatting } -XMLHighlightingPrettyPrintingWriterFormatter >> formatAfterQuotedStringName: aName [ - highlighter endQuotedStringNameHighlightPosition: self endPosition. - - super formatAfterQuotedStringName: aName. -] - -{ #category : #formatting } -XMLHighlightingPrettyPrintingWriterFormatter >> formatAfterQuotedStringValue: aString [ - highlighter endQuotedStringHighlightPosition: self endPosition + 1. - - super formatAfterQuotedStringValue: aString. -] - -{ #category : #formatting } -XMLHighlightingPrettyPrintingWriterFormatter >> formatAfterStartTag: aTagWriter [ - highlighter endTagHighlightPosition: self endPosition. - - super formatAfterStartTag: aTagWriter. -] - -{ #category : #formatting } -XMLHighlightingPrettyPrintingWriterFormatter >> formatAfterXMLDeclaration: anXMLDeclarationWriter [ - highlighter endXMLDeclarationHighlightPosition: self endPosition. - - super formatAfterXMLDeclaration: anXMLDeclarationWriter. -] - -{ #category : #formatting } -XMLHighlightingPrettyPrintingWriterFormatter >> formatBeforeCData: aCDataWriter [ - super formatBeforeCData: aCDataWriter. - - highlighter startCDataHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingPrettyPrintingWriterFormatter >> formatBeforeCharacterEscape: aCharacterEscape [ - super formatBeforeCharacterEscape: aCharacterEscape. - - highlighter startEntityReferenceHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingPrettyPrintingWriterFormatter >> formatBeforeComment: aCommentWriter [ - super formatBeforeComment: aCommentWriter. - - highlighter startCommentHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingPrettyPrintingWriterFormatter >> formatBeforeDeclaration: aDeclarationWriter [ - super formatBeforeDeclaration: aDeclarationWriter. - - highlighter startDeclarationHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingPrettyPrintingWriterFormatter >> formatBeforeDoctypeDeclaration: aDoctypeDeclarationWriter [ - super formatBeforeDoctypeDeclaration: aDoctypeDeclarationWriter. - - highlighter startDoctypeDeclarationHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingPrettyPrintingWriterFormatter >> formatBeforeEndTag: aTagWriter [ - super formatBeforeEndTag: aTagWriter. - - highlighter startTagHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingPrettyPrintingWriterFormatter >> formatBeforeEntityReference: anEntityReferenceWriter [ - super formatBeforeEntityReference: anEntityReferenceWriter. - - highlighter startEntityReferenceHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingPrettyPrintingWriterFormatter >> formatBeforeName: aName [ - highlighter startNameHighlightPosition: self startPosition. - - super formatBeforeName: aName. -] - -{ #category : #formatting } -XMLHighlightingPrettyPrintingWriterFormatter >> formatBeforePI: aPIWriter [ - super formatBeforePI: aPIWriter. - - highlighter startPIHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingPrettyPrintingWriterFormatter >> formatBeforeQuotedStringName: aName [ - highlighter startQuotedStringNameHighlightPosition: self startPosition. - - super formatBeforeQuotedStringName: aName. -] - -{ #category : #formatting } -XMLHighlightingPrettyPrintingWriterFormatter >> formatBeforeQuotedStringValue: aString [ - super formatBeforeQuotedStringValue: aString. - - highlighter startQuotedStringHighlightPosition: self startPosition - 1. -] - -{ #category : #formatting } -XMLHighlightingPrettyPrintingWriterFormatter >> formatBeforeStartTag: aTagWriter [ - super formatBeforeStartTag: aTagWriter. - - highlighter startTagHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingPrettyPrintingWriterFormatter >> formatBeforeXMLDeclaration: anXMLDeclarationWriter [ - super formatBeforeXMLDeclaration: anXMLDeclarationWriter. - - highlighter startXMLDeclarationHighlightPosition: self startPosition. -] - -{ #category : #private } -XMLHighlightingPrettyPrintingWriterFormatter >> startPosition [ - ^ self writer position + 1 -] - -{ #category : #accessing } -XMLHighlightingPrettyPrintingWriterFormatter >> writer: aWriter [ - super writer: aWriter. - - highlighter := aWriter highlighter. -] diff --git a/src/XML-Parser-GTExtensions/XMLHighlightingPrologPrettyPrintingWriterFormatter.class.st b/src/XML-Parser-GTExtensions/XMLHighlightingPrologPrettyPrintingWriterFormatter.class.st deleted file mode 100644 index f65780432..000000000 --- a/src/XML-Parser-GTExtensions/XMLHighlightingPrologPrettyPrintingWriterFormatter.class.st +++ /dev/null @@ -1,212 +0,0 @@ -" -This formatter adds highlights to prolog pretty printed XMLHighlightingWriter output. - -(Generated from XMLHighlightingWriterFormatter.) -" -Class { - #name : #XMLHighlightingPrologPrettyPrintingWriterFormatter, - #superclass : #XMLPrologPrettyPrintingWriterFormatter, - #instVars : [ - 'highlighter' - ], - #category : #'XML-Parser-GTExtensions-Highlighting-Writer' -} - -{ #category : #private } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> endPosition [ - ^ self writer position -] - -{ #category : #formatting } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> formatAfterCData: aCDataWriter [ - highlighter endCDataHighlightPosition: self endPosition. - - super formatAfterCData: aCDataWriter. -] - -{ #category : #formatting } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> formatAfterCharacterEscape: aCharacterEscape [ - highlighter endEntityReferenceHighlightPosition: self endPosition. - - super formatAfterCharacterEscape: aCharacterEscape. -] - -{ #category : #formatting } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> formatAfterComment: aCommentWriter [ - highlighter endCommentHighlightPosition: self endPosition. - - super formatAfterComment: aCommentWriter. -] - -{ #category : #formatting } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> formatAfterDeclaration: aDeclarationWriter [ - highlighter endDeclarationHighlightPosition: self endPosition. - - super formatAfterDeclaration: aDeclarationWriter. -] - -{ #category : #formatting } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> formatAfterDoctypeDeclaration: aDoctypeDeclarationWriter [ - highlighter endDoctypeDeclarationHighlightPosition: self endPosition. - - super formatAfterDoctypeDeclaration: aDoctypeDeclarationWriter. -] - -{ #category : #formatting } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> formatAfterEndTag: aTagWriter [ - highlighter endTagHighlightPosition: self endPosition. - - super formatAfterEndTag: aTagWriter. -] - -{ #category : #formatting } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> formatAfterEntityReference: anEntityReferenceWriter [ - highlighter endEntityReferenceHighlightPosition: self endPosition. - - super formatAfterEntityReference: anEntityReferenceWriter. -] - -{ #category : #formatting } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> formatAfterName: aName [ - highlighter endNameHighlightPosition: self endPosition. - - super formatAfterName: aName. -] - -{ #category : #formatting } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> formatAfterPI: aPIWriter [ - highlighter endPIHighlightPosition: self endPosition. - - super formatAfterPI: aPIWriter. -] - -{ #category : #formatting } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> formatAfterQuotedStringName: aName [ - highlighter endQuotedStringNameHighlightPosition: self endPosition. - - super formatAfterQuotedStringName: aName. -] - -{ #category : #formatting } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> formatAfterQuotedStringValue: aString [ - highlighter endQuotedStringHighlightPosition: self endPosition + 1. - - super formatAfterQuotedStringValue: aString. -] - -{ #category : #formatting } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> formatAfterStartTag: aTagWriter [ - highlighter endTagHighlightPosition: self endPosition. - - super formatAfterStartTag: aTagWriter. -] - -{ #category : #formatting } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> formatAfterXMLDeclaration: anXMLDeclarationWriter [ - highlighter endXMLDeclarationHighlightPosition: self endPosition. - - super formatAfterXMLDeclaration: anXMLDeclarationWriter. -] - -{ #category : #formatting } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> formatBeforeCData: aCDataWriter [ - super formatBeforeCData: aCDataWriter. - - highlighter startCDataHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> formatBeforeCharacterEscape: aCharacterEscape [ - super formatBeforeCharacterEscape: aCharacterEscape. - - highlighter startEntityReferenceHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> formatBeforeComment: aCommentWriter [ - super formatBeforeComment: aCommentWriter. - - highlighter startCommentHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> formatBeforeDeclaration: aDeclarationWriter [ - super formatBeforeDeclaration: aDeclarationWriter. - - highlighter startDeclarationHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> formatBeforeDoctypeDeclaration: aDoctypeDeclarationWriter [ - super formatBeforeDoctypeDeclaration: aDoctypeDeclarationWriter. - - highlighter startDoctypeDeclarationHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> formatBeforeEndTag: aTagWriter [ - super formatBeforeEndTag: aTagWriter. - - highlighter startTagHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> formatBeforeEntityReference: anEntityReferenceWriter [ - super formatBeforeEntityReference: anEntityReferenceWriter. - - highlighter startEntityReferenceHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> formatBeforeName: aName [ - highlighter startNameHighlightPosition: self startPosition. - - super formatBeforeName: aName. -] - -{ #category : #formatting } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> formatBeforePI: aPIWriter [ - super formatBeforePI: aPIWriter. - - highlighter startPIHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> formatBeforeQuotedStringName: aName [ - highlighter startQuotedStringNameHighlightPosition: self startPosition. - - super formatBeforeQuotedStringName: aName. -] - -{ #category : #formatting } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> formatBeforeQuotedStringValue: aString [ - super formatBeforeQuotedStringValue: aString. - - highlighter startQuotedStringHighlightPosition: self startPosition - 1. -] - -{ #category : #formatting } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> formatBeforeStartTag: aTagWriter [ - super formatBeforeStartTag: aTagWriter. - - highlighter startTagHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> formatBeforeXMLDeclaration: anXMLDeclarationWriter [ - super formatBeforeXMLDeclaration: anXMLDeclarationWriter. - - highlighter startXMLDeclarationHighlightPosition: self startPosition. -] - -{ #category : #private } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> startPosition [ - ^ self writer position + 1 -] - -{ #category : #accessing } -XMLHighlightingPrologPrettyPrintingWriterFormatter >> writer: aWriter [ - super writer: aWriter. - - highlighter := aWriter highlighter. -] diff --git a/src/XML-Parser-GTExtensions/XMLHighlightingWriter.class.st b/src/XML-Parser-GTExtensions/XMLHighlightingWriter.class.st deleted file mode 100644 index a3586bcfd..000000000 --- a/src/XML-Parser-GTExtensions/XMLHighlightingWriter.class.st +++ /dev/null @@ -1,50 +0,0 @@ -" -This class is an XMLWriter that can make highlighted text output with XMLHighlightingPrettyPrintingWriterFormatter and XMLHighlighter. -" -Class { - #name : #XMLHighlightingWriter, - #superclass : #XMLWriter, - #instVars : [ - 'highlighter' - ], - #category : #'XML-Parser-GTExtensions-Highlighting-Writer' -} - -{ #category : #converting } -XMLHighlightingWriter >> asHighlightedText [ - | text | - - "printString/asString forward to printStringLimitedTo: which truncates, - so contents is used instead to get the complete text" - text := self contents asText. - self highlighter highlightText: text. - ^ text. -] - -{ #category : #defaults } -XMLHighlightingWriter >> canonicalWriterFormatterClass [ - ^ XMLHighlightingCanonicalWriterFormatter -] - -{ #category : #accessing } -XMLHighlightingWriter >> highlighter [ - ^ highlighter -] - -{ #category : #initialization } -XMLHighlightingWriter >> on: aStream [ - super on: aStream. - - highlighter := XMLDocumentHighlighter new. - self formatter: XMLHighlightingWriterFormatter new. -] - -{ #category : #defaults } -XMLHighlightingWriter >> prettyPrintingWriterFormatterClass [ - ^ XMLHighlightingPrettyPrintingWriterFormatter -] - -{ #category : #defaults } -XMLHighlightingWriter >> prologPrettyPrintingWriterFormatterClass [ - ^ XMLHighlightingPrologPrettyPrintingWriterFormatter -] diff --git a/src/XML-Parser-GTExtensions/XMLHighlightingWriterFormatter.class.st b/src/XML-Parser-GTExtensions/XMLHighlightingWriterFormatter.class.st deleted file mode 100644 index b16619a2d..000000000 --- a/src/XML-Parser-GTExtensions/XMLHighlightingWriterFormatter.class.st +++ /dev/null @@ -1,251 +0,0 @@ -" -This formatter adds highlights to XMLHighlightingWriter output. -" -Class { - #name : #XMLHighlightingWriterFormatter, - #superclass : #XMLWriterFormatter, - #instVars : [ - 'highlighter' - ], - #category : #'XML-Parser-GTExtensions-Highlighting-Writer' -} - -{ #category : #private } -XMLHighlightingWriterFormatter class >> generateHighlightingSubclassOf: aFormatterClass named: aName inCategory: aCategory [ - " - self - generateHighlightingSubclassOf: XMLPrologPrettyPrintingWriterFormatter - named: #XMLHighlightingPrologPrettyPrintingWriterFormatter - inCategory: self category. - self - generateHighlightingSubclassOf: XMLPrettyPrintingWriterFormatter - named: #XMLHighlightingPrettyPrintingWriterFormatter - inCategory: self category. - self - generateHighlightingSubclassOf: XMLCanonicalWriterFormatter - named: #XMLHighlightingCanonicalWriterFormatter - inCategory: self category. - " - | newSubclass | - - (aFormatterClass == self - or: [aFormatterClass class inheritsFrom: self]) - ifTrue: [ - ^ aFormatterClass - subclass: aName asSymbol - instanceVariableNames: '' - classVariableNames: '' - category: aCategory asSymbol]. - - newSubclass := - aFormatterClass - subclass: aName asSymbol - instanceVariableNames: 'highlighter' - classVariableNames: '' - category: aCategory asSymbol. - self selectors do: [:each | - newSubclass - compile: (self sourceCodeAt: each) - classified: (self whichCategoryIncludesSelector: each)]. - - ^ newSubclass. -] - -{ #category : #private } -XMLHighlightingWriterFormatter >> endPosition [ - ^ self writer position -] - -{ #category : #formatting } -XMLHighlightingWriterFormatter >> formatAfterCData: aCDataWriter [ - highlighter endCDataHighlightPosition: self endPosition. - - super formatAfterCData: aCDataWriter. -] - -{ #category : #formatting } -XMLHighlightingWriterFormatter >> formatAfterCharacterEscape: aCharacterEscape [ - highlighter endEntityReferenceHighlightPosition: self endPosition. - - super formatAfterCharacterEscape: aCharacterEscape. -] - -{ #category : #formatting } -XMLHighlightingWriterFormatter >> formatAfterComment: aCommentWriter [ - highlighter endCommentHighlightPosition: self endPosition. - - super formatAfterComment: aCommentWriter. -] - -{ #category : #formatting } -XMLHighlightingWriterFormatter >> formatAfterDeclaration: aDeclarationWriter [ - highlighter endDeclarationHighlightPosition: self endPosition. - - super formatAfterDeclaration: aDeclarationWriter. -] - -{ #category : #formatting } -XMLHighlightingWriterFormatter >> formatAfterDoctypeDeclaration: aDoctypeDeclarationWriter [ - highlighter endDoctypeDeclarationHighlightPosition: self endPosition. - - super formatAfterDoctypeDeclaration: aDoctypeDeclarationWriter. -] - -{ #category : #formatting } -XMLHighlightingWriterFormatter >> formatAfterEndTag: aTagWriter [ - highlighter endTagHighlightPosition: self endPosition. - - super formatAfterEndTag: aTagWriter. -] - -{ #category : #formatting } -XMLHighlightingWriterFormatter >> formatAfterEntityReference: anEntityReferenceWriter [ - highlighter endEntityReferenceHighlightPosition: self endPosition. - - super formatAfterEntityReference: anEntityReferenceWriter. -] - -{ #category : #formatting } -XMLHighlightingWriterFormatter >> formatAfterName: aName [ - highlighter endNameHighlightPosition: self endPosition. - - super formatAfterName: aName. -] - -{ #category : #formatting } -XMLHighlightingWriterFormatter >> formatAfterPI: aPIWriter [ - highlighter endPIHighlightPosition: self endPosition. - - super formatAfterPI: aPIWriter. -] - -{ #category : #formatting } -XMLHighlightingWriterFormatter >> formatAfterQuotedStringName: aName [ - highlighter endQuotedStringNameHighlightPosition: self endPosition. - - super formatAfterQuotedStringName: aName. -] - -{ #category : #formatting } -XMLHighlightingWriterFormatter >> formatAfterQuotedStringValue: aString [ - highlighter endQuotedStringHighlightPosition: self endPosition + 1. - - super formatAfterQuotedStringValue: aString. -] - -{ #category : #formatting } -XMLHighlightingWriterFormatter >> formatAfterStartTag: aTagWriter [ - highlighter endTagHighlightPosition: self endPosition. - - super formatAfterStartTag: aTagWriter. -] - -{ #category : #formatting } -XMLHighlightingWriterFormatter >> formatAfterXMLDeclaration: anXMLDeclarationWriter [ - highlighter endXMLDeclarationHighlightPosition: self endPosition. - - super formatAfterXMLDeclaration: anXMLDeclarationWriter. -] - -{ #category : #formatting } -XMLHighlightingWriterFormatter >> formatBeforeCData: aCDataWriter [ - super formatBeforeCData: aCDataWriter. - - highlighter startCDataHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingWriterFormatter >> formatBeforeCharacterEscape: aCharacterEscape [ - super formatBeforeCharacterEscape: aCharacterEscape. - - highlighter startEntityReferenceHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingWriterFormatter >> formatBeforeComment: aCommentWriter [ - super formatBeforeComment: aCommentWriter. - - highlighter startCommentHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingWriterFormatter >> formatBeforeDeclaration: aDeclarationWriter [ - super formatBeforeDeclaration: aDeclarationWriter. - - highlighter startDeclarationHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingWriterFormatter >> formatBeforeDoctypeDeclaration: aDoctypeDeclarationWriter [ - super formatBeforeDoctypeDeclaration: aDoctypeDeclarationWriter. - - highlighter startDoctypeDeclarationHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingWriterFormatter >> formatBeforeEndTag: aTagWriter [ - super formatBeforeEndTag: aTagWriter. - - highlighter startTagHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingWriterFormatter >> formatBeforeEntityReference: anEntityReferenceWriter [ - super formatBeforeEntityReference: anEntityReferenceWriter. - - highlighter startEntityReferenceHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingWriterFormatter >> formatBeforeName: aName [ - highlighter startNameHighlightPosition: self startPosition. - - super formatBeforeName: aName. -] - -{ #category : #formatting } -XMLHighlightingWriterFormatter >> formatBeforePI: aPIWriter [ - super formatBeforePI: aPIWriter. - - highlighter startPIHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingWriterFormatter >> formatBeforeQuotedStringName: aName [ - highlighter startQuotedStringNameHighlightPosition: self startPosition. - - super formatBeforeQuotedStringName: aName. -] - -{ #category : #formatting } -XMLHighlightingWriterFormatter >> formatBeforeQuotedStringValue: aString [ - super formatBeforeQuotedStringValue: aString. - - highlighter startQuotedStringHighlightPosition: self startPosition - 1. -] - -{ #category : #formatting } -XMLHighlightingWriterFormatter >> formatBeforeStartTag: aTagWriter [ - super formatBeforeStartTag: aTagWriter. - - highlighter startTagHighlightPosition: self startPosition. -] - -{ #category : #formatting } -XMLHighlightingWriterFormatter >> formatBeforeXMLDeclaration: anXMLDeclarationWriter [ - super formatBeforeXMLDeclaration: anXMLDeclarationWriter. - - highlighter startXMLDeclarationHighlightPosition: self startPosition. -] - -{ #category : #private } -XMLHighlightingWriterFormatter >> startPosition [ - ^ self writer position + 1 -] - -{ #category : #accessing } -XMLHighlightingWriterFormatter >> writer: aWriter [ - super writer: aWriter. - - highlighter := aWriter highlighter. -] diff --git a/src/XML-Parser-GTExtensions/XMLInternalSubsetList.extension.st b/src/XML-Parser-GTExtensions/XMLInternalSubsetList.extension.st deleted file mode 100644 index dd70a7639..000000000 --- a/src/XML-Parser-GTExtensions/XMLInternalSubsetList.extension.st +++ /dev/null @@ -1,9 +0,0 @@ -Extension { #name : #XMLInternalSubsetList } - -{ #category : #'*XML-Parser-GTExtensions' } -XMLInternalSubsetList >> gtInspectorItemsIn: aComposite [ - ^ self - addOrderedListTableToComposite: aComposite - paneTitle: 'Nodes' - columnTitle: 'Node' -] diff --git a/src/XML-Parser-GTExtensions/XMLLazyAttributeDictionary.extension.st b/src/XML-Parser-GTExtensions/XMLLazyAttributeDictionary.extension.st deleted file mode 100644 index 04585bf84..000000000 --- a/src/XML-Parser-GTExtensions/XMLLazyAttributeDictionary.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #XMLLazyAttributeDictionary } - -{ #category : #'*XML-Parser-GTExtensions' } -XMLLazyAttributeDictionary >> gtInspectorItemsIn: aComposite [ - attributeDictionary gtInspectorItemsIn: aComposite -] diff --git a/src/XML-Parser-GTExtensions/XMLNode.extension.st b/src/XML-Parser-GTExtensions/XMLNode.extension.st deleted file mode 100644 index 988c8b0a0..000000000 --- a/src/XML-Parser-GTExtensions/XMLNode.extension.st +++ /dev/null @@ -1,254 +0,0 @@ -Extension { #name : #XMLNode } - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNode >> acceptEditedSource: aSourceTextOrString inContext: aGTInspector [ - | newOuterXMLNode | - - newOuterXMLNode := - self setOuterXMLFromEditedSource: aSourceTextOrString asString. - - "find the previous panes of the first pane inspecting - the receiver (not necessarily the current pane)" - (aGTInspector panes - copyFrom: 1 - to: - (aGTInspector panes findFirst: [:each | - (each port: #entity) value = self]) - 1) - ifEmpty: [ - "no previous panes; delete any panes after the - current and make its selection the new outer XML - node (closing and reopening is a hack to do this, - but it works for now)" - aGTInspector browser close. - aGTInspector openOn: newOuterXMLNode] - ifNotEmpty: [:previousPanes | - "update all previous panes and replace the first - pane inspecting the receiver with one inspecting - the new outer XML node" - previousPanes do: [:each | each update]. - previousPanes last presentations first - selection: newOuterXMLNode]. -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNode >> addRemoveActionTo: aPresentation in: aComposite inContext: aGTInspector [ - (self supportsRemoveAction not - or: [aGTInspector panes size <= 1 - or: [(aGTInspector panes first port: #entity) value = self]]) - ifTrue: [^ self]. - - aPresentation - act: [| removeStartIndex | - self removeFromParent. - - "remove all panes starting with the first pane inspecting - the receiver (not necessarily the current pane)" - removeStartIndex := - aGTInspector panes findFirst: [:each | - (each port: #entity) value = self]. - removeStartIndex - to: aGTInspector panes size - do: [:i | - aGTInspector removeLastPane]. - - "update the remaining panes" - aGTInspector panes do: [:each | - each update]] - icon: GLMUIThemeExtraIcons glamorousRemove - on: $X - entitled: 'Remove'. -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNode >> asHighlightedSourceText [ - ^ self asHighlightedTextWrittenWith: [:writer | - "Add some formatting for the the non-content markup (markup outside - the root element), because whatever formatting was there was - lost during parsing. Avoid other formatting, to try to preserve the - original." - writer enablePrologPrettyPrinting. - self writeXMLOn: writer] -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNode >> asHighlightedText [ - ^ self asHighlightedTextWrittenWith: [:writer | - self writeXMLOn: writer] -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNode >> asHighlightedTextWrittenWith: aBlock [ - | writer | - - writer := XMLHighlightingWriter new. - self escapesContentEntitiesWhenWriting - ifFalse: [writer escapesContentEntityReferences: false]. - aBlock value: writer. - ^ writer asHighlightedText. -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNode class >> gtExampleNodeWithParent [ - - ^ self new parent: self new -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNode >> gtInspectorSourceIn: aComposite inContext: aGTInspector [ - - - | sourceEditor currentTextStylerDecorator | - - sourceEditor := - aComposite custom: - (self supportsSourceEditing - ifTrue: [ - GLMRubricHighlightedTextPresentation new - editingMode: [ - currentTextStylerDecorator := - self newSourceEditorTextStylerDecorator. - GLMHighlighterTextRubEditingMode withStylerDecorator: - currentTextStylerDecorator]; - act: [ - self - acceptEditedSource: currentTextStylerDecorator text - inContext: aGTInspector] - icon: GLMUIThemeExtraIcons glamorousAccept - on: $s - entitled: 'Accept'; - act: [ - self promptForSourceSaveFileName - ifNotEmpty: [:fileName | - self - acceptEditedSource: currentTextStylerDecorator text - inContext: aGTInspector. - currentTextStylerDecorator saveToFile: fileName]] - icon: GLMUIThemeExtraIcons glamorousSave - entitled: 'Save as'; - act: [:presentation | - presentation update] - icon: GLMUIThemeExtraIcons glamorousUndo - on: $Z - entitled: 'Revert'] - ifFalse: [ - GLMXMLDisabledRubricHighlightedTextPresentation new - editingMode: [ - currentTextStylerDecorator := - GLMXMLDisabledDocumentHighlighterTextStylerDecorator - disabledText: self asHighlightedSourceText - encoding: - (self document - ifNil: [''] - ifNotNil: [:document | document encoding]). - GLMHighlighterTextRubEditingMode withStylerDecorator: - currentTextStylerDecorator]; - act: [ - self promptForSourceSaveFileName - ifNotEmpty: [:fileName | - currentTextStylerDecorator saveToFile: fileName]] - icon: GLMUIThemeExtraIcons glamorousSave - entitled: 'Save as']). - - sourceEditor - title: 'Source'; - display: [self asHighlightedSourceText]; - withLineNumbers: true. - - self - addRemoveActionTo: sourceEditor - in: aComposite - inContext: aGTInspector. -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNode >> gtInspectorTreeIn: aComposite inContext: aGTInspector [ - - - | treeView | - - treeView := - aComposite tree - title: 'Tree'; - display: [{self}]; - children: [:each | each treeViewChildren]; - format: [:each | each treeViewLabelText]; - when: [self supportsTreeView]; - rootsExpanded. - - self - addRemoveActionTo: treeView - in: aComposite - inContext: aGTInspector -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNode >> newSourceEditorTextStylerDecorator [ - ^ GLMXMLOuterXMLDocumentHighlighterTextStylerDecorator outerXMLNode: self -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNode >> promptForSourceSaveFileName [ - ^ (UITheme builder - fileSave: 'Save XML source to file' - extensions: - "'xml' must come first so it's the default extension" - ((XMLFileHandle xmlDocumentFileExtensions asArray copyWithout: 'xml') - copyWithFirst: 'xml')) - ifNil: [''] - ifNotNil: [:reference | reference fullName] -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNode >> removeFromParent [ - self parent removeNode: self -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNode >> setOuterXMLFromEditedSource: aString [ - | oldParent oldPosition oldSize | - - oldParent := self parent. - oldPosition := oldParent nodes indexOf: self. - oldSize := oldParent nodes size. - oldParent - outerXML: aString - forNode: self. - ^ oldParent nodes size = oldSize - ifTrue: [oldParent nodes at: oldPosition] - ifFalse: [oldParent]. -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNode >> supportsRemoveAction [ - ^ self hasParent -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNode >> supportsSourceEditing [ - ^ self hasParent - and: [self parent isDocument not] -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNode >> supportsTreeView [ - "returns true if this node needs a tree view tab when inspected" - ^ false -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNode >> treeViewChildren [ - "returns the subnodes of this node in a tree view" - ^ #() -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNode >> treeViewLabelText [ - "the label Text of this node to be used in a tree view" - ^ self asHighlightedTextWrittenWith: [:writer | - self writeTreeViewLabelXMLOn: writer] -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNode >> writeTreeViewLabelXMLOn: aWriter [ - self writeXMLOn: aWriter -] diff --git a/src/XML-Parser-GTExtensions/XMLNodeList.extension.st b/src/XML-Parser-GTExtensions/XMLNodeList.extension.st deleted file mode 100644 index aaf29b735..000000000 --- a/src/XML-Parser-GTExtensions/XMLNodeList.extension.st +++ /dev/null @@ -1,9 +0,0 @@ -Extension { #name : #XMLNodeList } - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNodeList >> gtInspectorItemsIn: aComposite [ - ^ self - addOrderedListTableToComposite: aComposite - paneTitle: 'Nodes' - columnTitle: 'Node' -] diff --git a/src/XML-Parser-GTExtensions/XMLNodeWithChildren.extension.st b/src/XML-Parser-GTExtensions/XMLNodeWithChildren.extension.st deleted file mode 100644 index 29c682f0b..000000000 --- a/src/XML-Parser-GTExtensions/XMLNodeWithChildren.extension.st +++ /dev/null @@ -1,22 +0,0 @@ -Extension { #name : #XMLNodeWithChildren } - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNodeWithChildren >> addTreeViewChildrenTo: anOrderedCollection [ - self nodesDo: [:each | - anOrderedCollection addLast: each] -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNodeWithChildren >> supportsTreeView [ - ^ self hasChildren -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNodeWithChildren >> treeViewChildren [ - self supportsTreeView - ifTrue: [| treeViewChildren | - treeViewChildren := OrderedCollection new: self nodes size. - self addTreeViewChildrenTo: treeViewChildren. - ^ treeViewChildren] - ifFalse: [^ #()] -] diff --git a/src/XML-Parser-GTExtensions/XMLNodeWithElements.extension.st b/src/XML-Parser-GTExtensions/XMLNodeWithElements.extension.st deleted file mode 100644 index f94126368..000000000 --- a/src/XML-Parser-GTExtensions/XMLNodeWithElements.extension.st +++ /dev/null @@ -1,58 +0,0 @@ -Extension { #name : #XMLNodeWithElements } - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNodeWithElements >> addTreeViewChildrenTo: anOrderedCollection [ - self nodesDo: [:each | - (each isStringNode - and: [each isEmpty - or: [each isWhitespace]]) - ifFalse: [anOrderedCollection addLast: each]] -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNodeWithElements class >> gtExampleXmlNode [ - - ^ XMLDocument gtExampleXmlNode nodes -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNodeWithElements >> spotterForAllElementsFor: aStep [ - - aStep listProcessor - title: 'All elements'; - allCandidates: [self allElements]; - itemName: #gtDisplayString; - filter: GTFilterSubstring; - wantsToDisplayOnEmptyQuery: true -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNodeWithElements >> spotterForDirectElementsFor: aStep [ - - aStep listProcessor - title: 'Direct elements'; - allCandidates: [self elements]; - itemName: #gtDisplayString; - filter: GTFilterSubstring; - wantsToDisplayOnEmptyQuery: true -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNodeWithElements >> spotterPreviewSourceIn: aComposite [ - - - aComposite text - title: 'Source'; - display: [ - self asHighlightedTextWrittenWith: [:writer | - "use less indent for spotter previews" - writer formatter indentString: ' '. - self writeXMLOn: writer]]; - entity: self -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLNodeWithElements >> supportsTreeView [ - ^ self hasChildren - and: [self nodes anySatisfy: [:each | each isStringNode not]] -] diff --git a/src/XML-Parser-GTExtensions/XMLOrderedList.extension.st b/src/XML-Parser-GTExtensions/XMLOrderedList.extension.st deleted file mode 100644 index e6ce82da7..000000000 --- a/src/XML-Parser-GTExtensions/XMLOrderedList.extension.st +++ /dev/null @@ -1,50 +0,0 @@ -Extension { #name : #XMLOrderedList } - -{ #category : #'*XML-Parser-GTExtensions' } -XMLOrderedList >> addOrderedListTableToComposite: aComposite paneTitle: aPaneTitle columnTitle: aColumnTitle [ - "Adapted from SequenceableCollection>>gtInspectorItemsIn:" - ^ aComposite table - title: aPaneTitle; - display: [:aCollection | - (1 to: self size) collect: [:i | i -> (self at: i)]]; - beMultiple; - searchOn: [:text :each | - Behavior compilerClass - evaluate: ' | entity each | each := self. entity := each.', text - for: each value - logged: false]; - column: 'Index' evaluated: [:assoc | - self orderedListTableDisplayKeyFrom: assoc key]; - column: aColumnTitle evaluated: [:assoc | - self orderedListTableDisplayValueFrom: assoc value]; - send: [:result | - result ifNotNil: [ - result value size = 1 - ifTrue: [result anyOne value] - ifFalse: [ - self species withAll: - (result collect: [:each | each value])]]]; - showOnly: 50; - helpMessage: - 'Quick selection field. Given your INPUT, it executes: self select: [:each | INPUT ]' -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLOrderedList >> gtInspectorItemsIn: aComposite [ - ^ self - addOrderedListTableToComposite: aComposite - paneTitle: 'Index' - columnTitle: 'Item' -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLOrderedList >> orderedListTableDisplayKeyFrom: aKey [ - ^ aKey printString -] - -{ #category : #'*XML-Parser-GTExtensions' } -XMLOrderedList >> orderedListTableDisplayValueFrom: aValue [ - "this may be overrided in the future in subclasses to return - highlighted text objects when GT tables support it" - ^ aValue printString -] diff --git a/src/XML-Parser-GTExtensions/XMLPositionWellFormedParserTokenizer.class.st b/src/XML-Parser-GTExtensions/XMLPositionWellFormedParserTokenizer.class.st deleted file mode 100644 index 35ac7267a..000000000 --- a/src/XML-Parser-GTExtensions/XMLPositionWellFormedParserTokenizer.class.st +++ /dev/null @@ -1,362 +0,0 @@ -" -This class is a tokenizer for well-formed XML that tracks token start/end positions. Does not support entities or validation. -" -Class { - #name : #XMLPositionWellFormedParserTokenizer, - #superclass : #XMLWellFormedParserTokenizer, - #instVars : [ - 'isInEntityReference', - 'isInAttlistDeclaration' - ], - #category : #'XML-Parser-GTExtensions-Highlighting-Parser' -} - -{ #category : #'tokenizing - dtd' } -XMLPositionWellFormedParserTokenizer >> nextAttlistDeclaration [ - isInAttlistDeclaration := true. - super nextAttlistDeclaration. - isInAttlistDeclaration := false. -] - -{ #category : #tokenizing } -XMLPositionWellFormedParserTokenizer >> nextAttributeName [ - | name | - - isInAttlistDeclaration - ifTrue: [ - driver handleStartNamePosition: self currentPosition + 1. - name := super nextAttributeName. - driver handleEndNamePosition: self currentPosition] - ifFalse: [ - driver handleStartQuotedStringNamePosition: self currentPosition + 1. - name := super nextAttributeName. - driver handleEndQuotedStringNamePosition: self currentPosition]. - - ^ name. -] - -{ #category : #tokenizing } -XMLPositionWellFormedParserTokenizer >> nextAttributeValue [ - | value | - - driver handleStartQuotedStringPosition: self currentPosition + 1. - value := super nextAttributeValue. - driver handleEndQuotedStringPosition: self currentPosition. - - ^ value. -] - -{ #category : #tokenizing } -XMLPositionWellFormedParserTokenizer >> nextCDataSection [ - driver handleStartCDataPosition: self currentPosition - 1. - super nextCDataSection. - driver handleEndCDataPosition: self currentPosition. -] - -{ #category : #tokenizing } -XMLPositionWellFormedParserTokenizer >> nextCharacterReferenceOnCharacterStream [ - | result | - - driver handleStartEntityReferencePosition: self currentPosition. - result := super nextCharacterReferenceOnCharacterStream. - driver handleEndEntityReferencePosition: self currentPosition. - - ^ result. -] - -{ #category : #tokenizing } -XMLPositionWellFormedParserTokenizer >> nextComment [ - driver handleStartCommentPosition: self currentPosition - 1. - super nextComment. - driver handleEndCommentPosition: self currentPosition. -] - -{ #category : #'tokenizing - dtd' } -XMLPositionWellFormedParserTokenizer >> nextDoctypeDeclaration [ - driver handleStartDoctypeDeclarationPosition: self currentPosition - 1. - super nextDoctypeDeclaration. -] - -{ #category : #tokenizing } -XMLPositionWellFormedParserTokenizer >> nextElementName [ - | name | - - driver handleStartNamePosition: self currentPosition + 1. - name := super nextElementName. - driver handleEndNamePosition: self currentPosition. - - ^ name. -] - -{ #category : #'tokenizing - dtd' } -XMLPositionWellFormedParserTokenizer >> nextElementNameOnCharacterStream [ - driver handleStartNamePosition: self currentPosition + 1. - super nextElementNameOnCharacterStream. - driver handleEndNamePosition: self currentPosition. -] - -{ #category : #'tokenizing - dtd' } -XMLPositionWellFormedParserTokenizer >> nextEndDoctypeDeclaration [ - super nextEndDoctypeDeclaration. - driver handleEndDoctypeDeclarationPosition: self currentPosition. -] - -{ #category : #tokenizing } -XMLPositionWellFormedParserTokenizer >> nextEndTag [ - | startPosition | - - startPosition := self currentPosition + 2. - super nextEndTag. - driver - handleStartNamePosition: startPosition; - handleEndNamePosition: self currentPosition - 1. -] - -{ #category : #tokenizing } -XMLPositionWellFormedParserTokenizer >> nextEntityName [ - isInEntityReference - ifTrue: [^ super nextEntityName] - ifFalse: [| entityName | - driver handleStartNamePosition: self currentPosition + 1. - entityName := super nextEntityName. - driver handleEndNamePosition: self currentPosition. - ^ entityName] -] - -{ #category : #'tokenizing - dtd' } -XMLPositionWellFormedParserTokenizer >> nextEntityValue [ - | value | - - driver handleStartQuotedStringPosition: self currentPosition + 1. - value := super nextEntityValue. - driver handleEndQuotedStringPosition: self currentPosition. - - ^ value. -] - -{ #category : #tokenizing } -XMLPositionWellFormedParserTokenizer >> nextGeneralEntityReferenceOnCharacterStream [ - isInEntityReference := true. - driver handleStartEntityReferencePosition: self currentPosition. - self nextEntityName. - driver handleEndEntityReferencePosition: self currentPosition + 1. - self expectNext: $;. - isInEntityReference := false. - - ^ nil. -] - -{ #category : #'tokenizing - dtd' } -XMLPositionWellFormedParserTokenizer >> nextNmtokenOnCharacterStream [ - driver handleStartNamePosition: self currentPosition + 1. - super nextNmtokenOnCharacterStream. - driver handleEndNamePosition: self currentPosition. -] - -{ #category : #'tokenizing - dtd' } -XMLPositionWellFormedParserTokenizer >> nextNotationName [ - | name | - - driver handleStartNamePosition: self currentPosition + 1. - name := super nextNotationName. - driver handleEndNamePosition: self currentPosition. - - ^ name. -] - -{ #category : #'tokenizing - dtd' } -XMLPositionWellFormedParserTokenizer >> nextNotationNameOnCharacterStream [ - driver handleStartNamePosition: self currentPosition + 1. - super nextNotationNameOnCharacterStream. - driver handleEndNamePosition: self currentPosition. -] - -{ #category : #tokenizing } -XMLPositionWellFormedParserTokenizer >> nextPIData [ - | nextChar quotedStringNameStart quotedStringStart quote | - - characterStream reset. - [(nextChar := streamReader next) == nil - or: [nextChar == $? - and: [streamReader peek == $>]]] - whileFalse: [ - nextChar isXMLChar - ifFalse: [self errorNonCharInPIValue: nextChar]. - quotedStringStart - ifNil: [ - quotedStringNameStart - ifNil: [ - nextChar isXMLNameStartChar - ifTrue: [quotedStringNameStart := self currentPosition] - ifFalse: [ - (nextChar == $" - or: [nextChar == $']) - ifTrue: [ - quote := nextChar. - quotedStringStart := self currentPosition]]] - ifNotNil: [ - nextChar isXMLNameChar - ifFalse: [ - driver - handleStartQuotedStringNamePosition: - quotedStringNameStart; - handleEndQuotedStringNamePosition: - self currentPosition - 1. - quotedStringNameStart := nil. - (nextChar == $" - or: [nextChar == $']) - ifTrue: [ - quote := nextChar. - quotedStringStart := self currentPosition]]]] - ifNotNil: [ - nextChar == quote - ifTrue: [ - driver - handleStartQuotedStringPosition: quotedStringStart; - handleEndQuotedStringPosition: self currentPosition. - quotedStringStart := nil]]]. - "ignore unterminated strings, but handle terminating names" - quotedStringNameStart - ifNotNil: [ - driver - handleStartQuotedStringNamePosition: quotedStringNameStart; - handleEndQuotedStringNamePosition: self currentPosition - 1]. - - self expectTerminator. - ^ characterStream contents. -] - -{ #category : #tokenizing } -XMLPositionWellFormedParserTokenizer >> nextPIWithTarget: aTarget [ - driver handleStartPIPosition: self currentPosition - (aTarget size + 1). - super nextPIWithTarget: aTarget. - driver handleEndPIPosition: self currentPosition. -] - -{ #category : #'tokenizing - dtd' } -XMLPositionWellFormedParserTokenizer >> nextParameterEntityReference [ - isInEntityReference := true. - driver handleStartEntityReferencePosition: self currentPosition. - self nextEntityName. - driver handleEndEntityReferencePosition: self currentPosition + 1. - self expectNext: $;. - isInEntityReference := false. -] - -{ #category : #'tokenizing - dtd' } -XMLPositionWellFormedParserTokenizer >> nextParameterEntityReferenceInDeclaration [ - ^ self nextParameterEntityReference -] - -{ #category : #'tokenizing - dtd' } -XMLPositionWellFormedParserTokenizer >> nextParameterEntityReferenceOnCharacterStream [ - ^ self nextParameterEntityReference -] - -{ #category : #'tokenizing - dtd' } -XMLPositionWellFormedParserTokenizer >> nextPublicIDLiteral [ - | publicID | - - driver handleStartQuotedStringPosition: self currentPosition + 1. - publicID := super nextPublicIDLiteral. - driver handleEndQuotedStringPosition: self currentPosition. - - ^ publicID. -] - -{ #category : #'tokenizing - dtd' } -XMLPositionWellFormedParserTokenizer >> nextSubsetDeclaration [ - driver handleStartDeclaration: self currentPosition - 1. - super nextSubsetDeclaration. - driver handleEndDeclaration: self currentPosition. -] - -{ #category : #'tokenizing - dtd' } -XMLPositionWellFormedParserTokenizer >> nextSystemIDLiteral [ - | systemID | - - driver handleStartQuotedStringPosition: self currentPosition + 1. - systemID := super nextSystemIDLiteral. - driver handleEndQuotedStringPosition: self currentPosition. - - ^ systemID. -] - -{ #category : #'tokenizing - dtd' } -XMLPositionWellFormedParserTokenizer >> nextSystemIDLiteralWithoutURIFragment [ - | systemID | - - driver handleStartQuotedStringPosition: self currentPosition + 1. - systemID := super nextSystemIDLiteralWithoutURIFragment. - driver handleEndQuotedStringPosition: self currentPosition. - - ^ systemID. -] - -{ #category : #tokenizing } -XMLPositionWellFormedParserTokenizer >> nextTag [ - driver handleStartTagPosition: self currentPosition. - super nextTag. - driver handleEndTagPosition: self currentPosition. -] - -{ #category : #tokenizing } -XMLPositionWellFormedParserTokenizer >> nextXMLAttributeName: aName [ - | startPosition | - - startPosition := self currentPosition + 1. - driver handleStartQuotedStringNamePosition: startPosition. - super nextXMLAttributeName: aName. - driver handleEndQuotedStringNamePosition: startPosition + aName size - 1. -] - -{ #category : #tokenizing } -XMLPositionWellFormedParserTokenizer >> nextXMLDeclaration [ - driver handleStartXMLDeclarationPosition: self currentPosition - 4. "'> nextXMLEncodingAttributeValue [ - | encoding | - - driver handleStartQuotedStringPosition: self currentPosition + 1. - encoding := super nextXMLEncodingAttributeValue. - driver handleEndQuotedStringPosition: self currentPosition. - - ^ encoding. -] - -{ #category : #tokenizing } -XMLPositionWellFormedParserTokenizer >> nextXMLStandaloneAttributeValue [ - | yesOrNo | - - driver handleStartQuotedStringPosition: self currentPosition + 1. - yesOrNo := super nextXMLStandaloneAttributeValue. - driver handleEndQuotedStringPosition: self currentPosition. - - ^ yesOrNo. -] - -{ #category : #tokenizing } -XMLPositionWellFormedParserTokenizer >> nextXMLVersionAttributeValue [ - | version | - - driver handleStartQuotedStringPosition: self currentPosition + 1. - version := super nextXMLVersionAttributeValue. - driver handleEndQuotedStringPosition: self currentPosition. - - ^ version. -] - -{ #category : #initialization } -XMLPositionWellFormedParserTokenizer >> setDriver: aDriver stream: aStream readLimit: anInteger [ - super - setDriver: aDriver - stream: aStream - readLimit: anInteger. - - isInAttlistDeclaration := false. - isInEntityReference := false. -] diff --git a/src/XML-Parser-GTExtensions/package.st b/src/XML-Parser-GTExtensions/package.st deleted file mode 100644 index 54f4bfc93..000000000 --- a/src/XML-Parser-GTExtensions/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'XML-Parser-GTExtensions' } diff --git a/src/XML-Parser/Character.extension.st b/src/XML-Parser/Character.extension.st deleted file mode 100644 index 03a1d33ee..000000000 --- a/src/XML-Parser/Character.extension.st +++ /dev/null @@ -1,406 +0,0 @@ -Extension { #name : #Character } - -{ #category : #'*XML-Parser' } -Character >> isXMLChar [ - "Range tests are faster and use less memory than a BitmapCharacterSet, and - a temp is used because Character in newer SpurVM images has no 'value' - inst var. - - Char ::= - #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]" - - | tempValue | - - (tempValue := self asciiValue) >= 16r20 - ifTrue: [ - "most chars should be in the range 16r20-16rD7FF" - tempValue <= 16rD7FF - ifTrue: [^ true]. - - tempValue <= 16rFFFD - ifTrue: [^ tempValue >= 16rE000]. - tempValue >= 16r10000 - ifFalse: [^ false]. - ^ tempValue <= 16r10FFFF]. - - tempValue == 16r9 - ifTrue: [^ true]. - tempValue == 16rA - ifTrue: [^ true]. - ^ tempValue == 16rD. -] - -{ #category : #'*XML-Parser' } -Character >> isXMLNCNameChar [ - "should be the same as isXMLNameChar except without a test for $:" - - | tempValue | - - (tempValue := self asciiValue) <= 16r7A "$z asciiValue hex" - ifTrue: [ - tempValue >= 16r61 "$a asciiValue hex" - ifTrue: [^ true]. - - tempValue >= 16r41 "$A asciiValue hex" - ifTrue: [ - tempValue <= 16r5A "$Z asciiValue hex" - ifTrue: [^ true]. - ^ tempValue == 16r5F]. "$_ asciiValue hex" - - tempValue >= 16r30 "$0 asciiValue hex" - ifTrue: [^ tempValue <= 16r39]. "$9 asciiValue hex; no $: test" - - tempValue == 16r2D "$- asciiValue hex" - ifTrue: [^ true]. - ^ tempValue == 16r2E]. "$. asciiValue hex" - - tempValue <= 16r2040 - ifTrue: [ - tempValue <= 16r36F - ifTrue: [ - tempValue <= 16rF6 - ifTrue: [ - tempValue <= 16rD6 - ifFalse: [^ tempValue >= 16rD8]. - tempValue >= 16rC0 - ifTrue: [^ true]. - ^ tempValue == 16rB7] - ifFalse: [ - tempValue <= 16r2FF - ifTrue: [^ tempValue >= 16rF8]. - ^ tempValue >= 16r300]] - ifFalse: [ - tempValue <= 16r1FFF - ifTrue: [ - tempValue <= 16r37D - ifFalse: [^ tempValue >= 16r37F]. - ^ tempValue >= 16r370] - ifFalse: [ - tempValue <= 16r200D - ifTrue: [^ tempValue >= 16r200C]. - ^ tempValue >= 16r203F]]] - ifFalse: [ - tempValue <= 16rD7FF - ifTrue: [ - tempValue >= 16r2C00 - ifTrue: [ - tempValue >= 16r3001 - ifTrue: [^ true]. - ^ tempValue <= 16r2FEF] - ifFalse: [ - tempValue <= 16r218F - ifFalse: [^ false]. - ^ tempValue >= 16r2070]] - ifFalse: [ - tempValue <= 16rFFFD - ifTrue: [ - tempValue <= 16rFDCF - ifTrue: [^ tempValue >= 16rF900]. - ^ tempValue >= 16rFDF0] - ifFalse: [ - tempValue >= 16r10000 - ifFalse: [^ false]. - ^ tempValue <= 16rEFFFF]]]. -] - -{ #category : #'*XML-Parser' } -Character >> isXMLNCNameStartChar [ - "should be the same as isXMLNameStartChar except without a test for $:" - - | tempValue | - - (tempValue := self asciiValue) <= 16r7A "$z asciiValue hex" - ifTrue: [ - tempValue >= 16r61 "$a asciiValue hex" - ifTrue: [^ true]. - - tempValue <= 16r5A "$Z asciiValue hex" - ifTrue: [^ tempValue >= 16r41]. "$A asciiValue hex" - - ^ tempValue == 16r5F]. "$_ asciiValue hex; no $: test" - - tempValue <= 16r200D - ifTrue: [ - tempValue <= 16r2FF - ifTrue: [ - tempValue >= 16rD8 - ifTrue: [ - tempValue >= 16rF8 - ifTrue: [^ true]. - ^ tempValue <= 16rF6] - ifFalse: [ - tempValue >= 16rC0 - ifFalse: [^ false]. - ^ tempValue <= 16rD6]] - ifFalse: [ - tempValue >= 16r37F - ifTrue: [ - tempValue >= 16r200C - ifTrue: [^ true]. - ^ tempValue <= 16r1FFF] - ifFalse: [ - tempValue <= 16r37D - ifFalse: [^ false]. - ^ tempValue >= 16r370]]] - ifFalse: [ - tempValue <= 16rD7FF - ifTrue: [ - tempValue >= 16r2C00 - ifTrue: [ - tempValue >= 16r3001 - ifTrue: [^ true]. - ^ tempValue <= 16r2FEF] - ifFalse: [ - tempValue <= 16r218F - ifFalse: [^ false]. - ^ tempValue >= 16r2070]] - ifFalse: [ - tempValue >= 16rFDF0 - ifTrue: [ - tempValue >= 16r10000 - ifTrue: [^ tempValue <= 16rEFFFF]. - ^ tempValue <= 16rFFFD] - ifFalse: [ - tempValue <= 16rFDCF - ifFalse: [^ false]. - ^ tempValue >= 16rF900]]]. -] - -{ #category : #'*XML-Parser' } -Character >> isXMLNameChar [ - "Range tests are faster and use less memory than a BitmapCharacterSet, and - a temp is used because Character in newer SpurVM images has no 'value' - inst var. - - NameStartChar ::= - ':' | [A-Z] | '_' | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | - [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | - [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | - [#x10000-#xEFFFF] - NameChar ::= - NameStartChar | '-' | '.' | [0-9] | #xB7 | [#x0300-#x036F] | - [#x203F-#x2040]" - - | tempValue | - - (tempValue := self asciiValue) <= 16r7A "$z asciiValue hex" - ifTrue: [ - tempValue >= 16r61 "$a asciiValue hex" - ifTrue: [^ true]. - - tempValue >= 16r41 "$A asciiValue hex" - ifTrue: [ - tempValue <= 16r5A "$Z asciiValue hex" - ifTrue: [^ true]. - ^ tempValue == 16r5F]. "$_ asciiValue hex" - - tempValue >= 16r30 "$0 asciiValue hex" - ifTrue: [ - tempValue <= 16r39 "$9 asciiValue hex" - ifTrue: [^ true]. - ^ tempValue == 16r3A]. "$: asciiValue hex" - - tempValue == 16r2D "$- asciiValue hex" - ifTrue: [^ true]. - ^ tempValue == 16r2E]. "$. asciiValue hex" - - tempValue <= 16r2040 - ifTrue: [ - tempValue <= 16r36F - ifTrue: [ - tempValue <= 16rF6 - ifTrue: [ - tempValue <= 16rD6 - ifFalse: [^ tempValue >= 16rD8]. - tempValue >= 16rC0 - ifTrue: [^ true]. - ^ tempValue == 16rB7] - ifFalse: [ - tempValue <= 16r2FF - ifTrue: [^ tempValue >= 16rF8]. - ^ tempValue >= 16r300]] - ifFalse: [ - tempValue <= 16r1FFF - ifTrue: [ - tempValue <= 16r37D - ifFalse: [^ tempValue >= 16r37F]. - ^ tempValue >= 16r370] - ifFalse: [ - tempValue <= 16r200D - ifTrue: [^ tempValue >= 16r200C]. - ^ tempValue >= 16r203F]]] - ifFalse: [ - tempValue <= 16rD7FF - ifTrue: [ - tempValue >= 16r2C00 - ifTrue: [ - tempValue >= 16r3001 - ifTrue: [^ true]. - ^ tempValue <= 16r2FEF] - ifFalse: [ - tempValue <= 16r218F - ifFalse: [^ false]. - ^ tempValue >= 16r2070]] - ifFalse: [ - tempValue <= 16rFFFD - ifTrue: [ - tempValue <= 16rFDCF - ifTrue: [^ tempValue >= 16rF900]. - ^ tempValue >= 16rFDF0] - ifFalse: [ - tempValue >= 16r10000 - ifFalse: [^ false]. - ^ tempValue <= 16rEFFFF]]]. -] - -{ #category : #'*XML-Parser' } -Character >> isXMLNameStartChar [ - "Range tests are faster and use less memory than a BitmapCharacterSet, and - a temp is used because Character in newer SpurVM images has no 'value' - inst var. - - NameStartChar ::= - ':' | [A-Z] | '_' | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | - [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | - [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | - [#x10000-#xEFFFF]" - - | tempValue | - - (tempValue := self asciiValue) <= 16r7A "$z asciiValue hex" - ifTrue: [ - tempValue >= 16r61 "$a asciiValue hex" - ifTrue: [^ true]. - - tempValue >= 16r41 "$A asciiValue hex" - ifTrue: [ - tempValue <= 16r5A "$Z asciiValue hex" - ifTrue: [^ true]. - ^ tempValue == 16r5F]. "$_ asciiValue hex" - - ^ tempValue == 16r3A]. "$: asciiValue hex" - - tempValue <= 16r200D - ifTrue: [ - tempValue <= 16r2FF - ifTrue: [ - tempValue >= 16rD8 - ifTrue: [ - tempValue >= 16rF8 - ifTrue: [^ true]. - ^ tempValue <= 16rF6] - ifFalse: [ - tempValue >= 16rC0 - ifFalse: [^ false]. - ^ tempValue <= 16rD6]] - ifFalse: [ - tempValue >= 16r37F - ifTrue: [ - tempValue >= 16r200C - ifTrue: [^ true]. - ^ tempValue <= 16r1FFF] - ifFalse: [ - tempValue <= 16r37D - ifFalse: [^ false]. - ^ tempValue >= 16r370]]] - ifFalse: [ - tempValue <= 16rD7FF - ifTrue: [ - tempValue >= 16r2C00 - ifTrue: [ - tempValue >= 16r3001 - ifTrue: [^ true]. - ^ tempValue <= 16r2FEF] - ifFalse: [ - tempValue <= 16r218F - ifFalse: [^ false]. - ^ tempValue >= 16r2070]] - ifFalse: [ - tempValue >= 16rFDF0 - ifTrue: [ - tempValue >= 16r10000 - ifTrue: [^ tempValue <= 16rEFFFF]. - ^ tempValue <= 16rFFFD] - ifFalse: [ - tempValue <= 16rFDCF - ifFalse: [^ false]. - ^ tempValue >= 16rF900]]]. -] - -{ #category : #'*XML-Parser' } -Character >> isXMLSeparator [ - "a temp is used because Character in newer SpurVM images - has no 'value' inst var" - | tempValue | - - (tempValue := self asciiValue) == 32 "space" - ifTrue: [^ true]. - tempValue == 10 "line feed" - ifTrue: [^ true]. - tempValue == 9 "tab" - ifTrue: [^ true]. - ^ tempValue == 13. "carriage return; no form feeds" -] - -{ #category : #'*XML-Parser' } -Character >> isXMLWhitespace [ - "a temp is used because Character in newer SpurVM images - has no 'value' inst var" - | tempValue | - - (tempValue := self asciiValue) == 32 "space" - ifTrue: [^ true]. - tempValue == 10 "line feed" - ifTrue: [^ true]. - tempValue == 9 "tab" - ifTrue: [^ true]. - tempValue == 13 "carriage return" - ifTrue: [^ true]. - ^ tempValue == 12. "form feed" -] - -{ #category : #'*XML-Parser' } -Character class >> xmlSeparators [ - ^ String - with: 32 asCharacter "space" - with: 10 asCharacter "lf" - with: 9 asCharacter "tab" - with: 13 asCharacter "cr" -] - -{ #category : #'*XML-Parser' } -Character >> xmlSplit: aString [ - "faster, portable version" - | parts | - - parts := OrderedCollection new. - self - xmlSplit: aString - do: [:each | parts addLast: each]. - ^ parts. -] - -{ #category : #'*XML-Parser' } -Character >> xmlSplit: aString do: aBlock [ - "faster, portable version" - | start | - - start := 1. - 1 to: aString size do: [:end | - "avoid #== for compatibility with pre-Spur VMs where wide chars - aren't an immediate type" - (aString at: end) = self - ifTrue: [ - aBlock value: (aString copyFrom: start to: end - 1). - start := end + 1]]. - start > aString size - ifTrue: [ - "either aString is empty or it ends with self" - aBlock value: ''] - ifFalse: [aBlock value: (aString copyFrom: start to: aString size)]. -] - -{ #category : #'*XML-Parser' } -Character class >> xmlWhitespace [ - ^ self xmlSeparators copyWith: 12 asCharacter "form feed" -] diff --git a/src/XML-Parser/Collection.extension.st b/src/XML-Parser/Collection.extension.st deleted file mode 100644 index 4f2ba47d7..000000000 --- a/src/XML-Parser/Collection.extension.st +++ /dev/null @@ -1,20 +0,0 @@ -Extension { #name : #Collection } - -{ #category : #'*XML-Parser' } -Collection >> asXMLAttributeDictionary [ - ^ XMLAttributeDictionary newFrom: self -] - -{ #category : #'*XML-Parser' } -Collection >> asXMLAttributeSpec [ - ^ XMLBasicAttributeSpec attributes: self -] - -{ #category : #'*XML-Parser' } -Collection >> includesXMLName: aName [ - "optimized with do: instead of anySatisfy:" - self do: [:each | - (aName isXMLQualifiedOrLocalName: each) - ifTrue: [^ true]]. - ^ false. -] diff --git a/src/XML-Parser/DTDAttributeDefinitionParser.class.st b/src/XML-Parser/DTDAttributeDefinitionParser.class.st deleted file mode 100644 index 20c5c10ce..000000000 --- a/src/XML-Parser/DTDAttributeDefinitionParser.class.st +++ /dev/null @@ -1,108 +0,0 @@ -" -This class parses an attribute definition in an ATTLIST declaration and returns a new XMLAttributeValidator for it. It assumes the type has already been checked for well-formedness by the tokenizer and that it contains a value like ""ID"", ""ENTITY"", or an enumeration list. -" -Class { - #name : #DTDAttributeDefinitionParser, - #superclass : #Object, - #instVars : [ - 'element', - 'attribute', - 'type', - 'defaultValidator', - 'enumerationListParserClass' - ], - #category : #'XML-Parser-DTD' -} - -{ #category : #private } -DTDAttributeDefinitionParser class >> attributeDefaultValidatorClassForPragma: aDefaultPragma [ - "the default pragma should have been checked for well-formedness by the - tokenizer so it's either empty, 'FIXED', 'REQUIRED', or 'IMPLIED'" - aDefaultPragma size > 0 - ifTrue: [ - (aDefaultPragma at: 1) == $F - ifTrue: [^ XMLAttributeFixedValueDefaultValidator]. - (aDefaultPragma at: 1) == $I - ifTrue: [^ XMLAttributeImpliedDefaultValidator]. - ^ XMLAttributeRequiredDefaultValidator]. - ^ XMLAttributeValueDefaultValidator. -] - -{ #category : #'instance creation' } -DTDAttributeDefinitionParser class >> element: anElement attribute: anAttribute type: aType defaultPragma: aDefaultPragma defaultValue: aDefaultValue [ - ^ self new - setElement: anElement - attribute: anAttribute - type: aType - defaultValidator: - ((self attributeDefaultValidatorClassForPragma: aDefaultPragma) - attribute: anAttribute - value: aDefaultValue) -] - -{ #category : #private } -DTDAttributeDefinitionParser >> attributeValidatorClassForType [ - "the tokenizer should have checked the type for well-formedness - so it's only one of CDATA, ID, IDREF, IDREFS, etc" - - | nextChar | - - (nextChar := type at: 1) == $C - ifTrue: [^ XMLCDataAttributeValidator]. - nextChar == $I - ifTrue: [ - type size = 2 "'ID' size" - ifTrue: [ - attribute = 'xml:id' - ifTrue: [^ XMLXMLIDAttributeValidator]. - ^ XMLIDAttributeValidator]. - type size = 5 "'IDREF' size" - ifTrue: [^ XMLIDRefAttributeValidator]. - "'IDREF' size < 'IDREFS' size" - ^ XMLIDRefsAttributeValidator]. - nextChar == $E - ifTrue: [ - type size = 6 "'ENTITY' size" - ifTrue: [^ XMLEntityAttributeValidator]. - "'ENTITY' size < 'ENTITIES' size" - ^ XMLEntitiesAttributeValidator]. - nextChar == $N - ifTrue: [ - type size = 7 "'NMTOKEN' size" - ifTrue: [^ XMLNmtokenAttributeValidator]. - type size = 8 "'NMTOKENS' size" - ifTrue: [^ XMLNmtokensAttributeValidator]. - "'NMTOKENS' size < 'NOTATION (' size" - enumerationListParserClass := DTDNotationEnumerationListParser. - ^ XMLNotationEnumerationAttributeValidator]. - - "otherwise it's a (one|two|...) enumeration attribute" - enumerationListParserClass := DTDEnumerationListParser. - ^ XMLEnumerationAttributeValidator. -] - -{ #category : #parsing } -DTDAttributeDefinitionParser >> parse [ - | validator | - - validator := - self attributeValidatorClassForType - element: element - attribute: attribute - defaultValidator: defaultValidator. - - enumerationListParserClass - ifNotNil: [ - validator allowedValues: - (enumerationListParserClass on: type) parse]. - - ^ validator. -] - -{ #category : #initialization } -DTDAttributeDefinitionParser >> setElement: anElement attribute: anAttribute type: aType defaultValidator: aDefaultValidator [ - element := anElement. - attribute := anAttribute. - type := aType. - defaultValidator := aDefaultValidator. -] diff --git a/src/XML-Parser/DTDCachingExternalEntityResolver.class.st b/src/XML-Parser/DTDCachingExternalEntityResolver.class.st deleted file mode 100644 index b4110d9f1..000000000 --- a/src/XML-Parser/DTDCachingExternalEntityResolver.class.st +++ /dev/null @@ -1,104 +0,0 @@ -" -This class is a resolver that caches non-local entities in a global cache so they don't have to be retrieved again (like over HTTP). This is the default resolver. -" -Class { - #name : #DTDCachingExternalEntityResolver, - #superclass : #DTDExternalEntityResolver, - #classVars : [ - 'EntityCache' - ], - #category : #'XML-Parser-DTD' -} - -{ #category : #clearing } -DTDCachingExternalEntityResolver class >> clearEntityCache [ - "self clearEntityCache" - self entityCache clear -] - -{ #category : #accessing } -DTDCachingExternalEntityResolver class >> entityCache [ - "a class variable so it's shared by all subclasses, but lazy initialized - so it isn't initialized unless needed" - ^ EntityCache - ifNil: [EntityCache := XMLKeyValueCache maxSize: 64] -] - -{ #category : #accessing } -DTDCachingExternalEntityResolver class >> entityCacheAtURI: anXMLURIOrURIString [ - ^ self entityCache - at: anXMLURIOrURIString asXMLURI - ifAbsent: [nil] -] - -{ #category : #accessing } -DTDCachingExternalEntityResolver class >> entityCacheAtURI: anXMLURIOrURIString ifAbsent: aBlock [ - ^ self entityCache - at: anXMLURIOrURIString asXMLURI - ifAbsent: aBlock -] - -{ #category : #accessing } -DTDCachingExternalEntityResolver class >> entityCacheAtURI: anXMLURIOrURIString ifAbsentPut: aBlock [ - ^ self entityCache - at: anXMLURIOrURIString asXMLURI - ifAbsentPut: aBlock -] - -{ #category : #accessing } -DTDCachingExternalEntityResolver class >> entityCacheAtURI: anXMLURIOrURIString put: aStringOrByteArray [ - ^ self entityCache - at: anXMLURIOrURIString asXMLURI - put: aStringOrByteArray -] - -{ #category : #'class initialization' } -DTDCachingExternalEntityResolver class >> initialize [ - "self initialize" - - "reset to nil instead of just clearing to force reinitialization" - EntityCache := nil -] - -{ #category : #accessing } -DTDCachingExternalEntityResolver class >> maxCachedEntities [ - ^ self entityCache maxSize -] - -{ #category : #accessing } -DTDCachingExternalEntityResolver class >> maxCachedEntities: anInteger [ - self entityCache maxSize: anInteger -] - -{ #category : #clearing } -DTDCachingExternalEntityResolver >> clearEntityCache [ - self class clearEntityCache -] - -{ #category : #accessing } -DTDCachingExternalEntityResolver >> maxCachedEntities [ - ^ self class maxCachedEntities -] - -{ #category : #accessing } -DTDCachingExternalEntityResolver >> maxCachedEntities: anInteger [ - self class maxCachedEntities: anInteger -] - -{ #category : #private } -DTDCachingExternalEntityResolver >> resolveNonLocalExternalEntityURI: anXMLURIOrURIString upToLimit: aMaxSize [ - | uri | - - uri := anXMLURIOrURIString asXMLURI. - "avoid #entityCacheAtURI:ifAbsent: and #entityCacheAtURI:ifAbsentPut: - so the cache isn't locked during resolution which could stall other - processes" - ^ (self class entityCacheAtURI: uri) - ifNil: [ - self class - entityCacheAtURI: uri - put: - (super - resolveNonLocalExternalEntityURI: uri - upToLimit: aMaxSize)]. -] diff --git a/src/XML-Parser/DTDContentModelParser.class.st b/src/XML-Parser/DTDContentModelParser.class.st deleted file mode 100644 index 70ff5ca0f..000000000 --- a/src/XML-Parser/DTDContentModelParser.class.st +++ /dev/null @@ -1,47 +0,0 @@ -" -This is a base class for DTD content model parsers that turn element declarations into XMLElementValidators. -" -Class { - #name : #DTDContentModelParser, - #superclass : #Object, - #instVars : [ - 'element', - 'contentModel' - ], - #category : #'XML-Parser-DTD' -} - -{ #category : #'instance creation' } -DTDContentModelParser class >> element: anElement contentModel: aContentModel [ - ^ self new - setElement: anElement - contentModel: aContentModel -] - -{ #category : #accessing } -DTDContentModelParser class >> parserClassForContentModel: aContentModel [ - "the tokenizer removes all spaces from the content model - and checks it for well-formedness" - (aContentModel at: 1) == $( - ifTrue: [ - (aContentModel at: 2) == $# "#PCDATA mixed content" - ifTrue: [^ DTDMixedContentModelParser] - ifFalse: [^ DTDElementContentModelParser]] - ifFalse: [^ DTDLiteralContentModelParser] -] - -{ #category : #defaults } -DTDContentModelParser class >> standaloneExternalClass [ - ^ self -] - -{ #category : #parsing } -DTDContentModelParser >> parse [ - self subclassResponsibility -] - -{ #category : #initialization } -DTDContentModelParser >> setElement: anElement contentModel: aContentModel [ - element := anElement. - contentModel := aContentModel. -] diff --git a/src/XML-Parser/DTDDecodedResolvedExternalParsedEntityReplacement.class.st b/src/XML-Parser/DTDDecodedResolvedExternalParsedEntityReplacement.class.st deleted file mode 100644 index 2cfd1fe5f..000000000 --- a/src/XML-Parser/DTDDecodedResolvedExternalParsedEntityReplacement.class.st +++ /dev/null @@ -1,46 +0,0 @@ -" -This class stores the decoded resolved replacement of an external parsed entity. -" -Class { - #name : #DTDDecodedResolvedExternalParsedEntityReplacement, - #superclass : #DTDResolvedExternalParsedEntityReplacement, - #instVars : [ - 'contents' - ], - #category : #'XML-Parser-DTD' -} - -{ #category : #'instance creation' } -DTDDecodedResolvedExternalParsedEntityReplacement class >> contents: aString [ - ^ self new setContents: aString -] - -{ #category : #accessing } -DTDDecodedResolvedExternalParsedEntityReplacement >> contents [ - ^ contents -] - -{ #category : #testing } -DTDDecodedResolvedExternalParsedEntityReplacement >> isEmpty [ - ^ self contents isEmpty -] - -{ #category : #printing } -DTDDecodedResolvedExternalParsedEntityReplacement >> printOn: aStream [ - super printOn: aStream. - - aStream - nextPut: $(; - nextPutAll: self contents; - nextPut: $). -] - -{ #category : #accessing } -DTDDecodedResolvedExternalParsedEntityReplacement >> readStream [ - ^ self contents readStream -] - -{ #category : #initialization } -DTDDecodedResolvedExternalParsedEntityReplacement >> setContents: aString [ - contents := aString -] diff --git a/src/XML-Parser/DTDDoctypeDefinition.class.st b/src/XML-Parser/DTDDoctypeDefinition.class.st deleted file mode 100644 index c80758ded..000000000 --- a/src/XML-Parser/DTDDoctypeDefinition.class.st +++ /dev/null @@ -1,450 +0,0 @@ -" -This class represents the parsed internal and external subset of a DTD taken together. -" -Class { - #name : #DTDDoctypeDefinition, - #superclass : #Object, - #instVars : [ - 'root', - 'elementValidators', - 'attributeValidators', - 'generalEntities', - 'parameterEntities', - 'unparsedEntities', - 'notations', - 'elementIDValidator', - 'unparsedEntityValidator' - ], - #category : #'XML-Parser-DTD' -} - -{ #category : #adding } -DTDDoctypeDefinition >> addExternalGeneralEntity: aName resolver: aResolver publicID: aPublicID systemID: aSystemID baseURI: aBaseURIString [ - (self generalEntities includesKey: aName) - ifTrue: [^ nil]. - ^ self generalEntities - at: aName - put: - (DTDExternalGeneralParsedEntity - name: aName - resolver: aResolver - publicID: aPublicID - systemID: aSystemID - baseURI: aBaseURIString). -] - -{ #category : #adding } -DTDDoctypeDefinition >> addExternalParameterEntity: aName resolver: aResolver publicID: aPublicID systemID: aSystemID baseURI: aBaseURIString [ - (self parameterEntities includesKey: aName) - ifTrue: [^ nil]. - ^ self parameterEntities - at: aName - put: - (DTDExternalParameterParsedEntity - name: aName - resolver: aResolver - publicID: aPublicID - systemID: aSystemID - baseURI: aBaseURIString). -] - -{ #category : #adding } -DTDDoctypeDefinition >> addGeneralEntitiesFrom: aDoctypeDefinition [ - aDoctypeDefinition generalEntities keysAndValuesDo: [:name :entity | - self generalEntities - at: name - ifAbsentPut: [entity]] -] - -{ #category : #adding } -DTDDoctypeDefinition >> addInternalGeneralEntity: aName replacement: aReplacement baseURI: aBaseURIString [ - (self generalEntities includesKey: aName) - ifTrue: [^ nil]. - ^ self generalEntities - at: aName - put: - (DTDInternalGeneralParsedEntity - name: aName - replacement: aReplacement - uri: aBaseURIString). -] - -{ #category : #adding } -DTDDoctypeDefinition >> addInternalParameterEntity: aName replacement: aReplacement baseURI: aBaseURIString [ - (self parameterEntities includesKey: aName) - ifTrue: [^ nil]. - ^ self parameterEntities - at: aName - put: - (DTDInternalParameterParsedEntity - name: aName - replacement: aReplacement - uri: aBaseURIString). -] - -{ #category : #adding } -DTDDoctypeDefinition >> addNotation: aName publicID: aPublicID systemID: aSystemID [ - (self notations includesKey: aName) - ifTrue: [^ nil]. - ^ self notations - at: aName - put: - (DTDNotation - name: aName - publicID: aPublicID - systemID: aSystemID). -] - -{ #category : #adding } -DTDDoctypeDefinition >> addStandaloneExternalExternalGeneralEntity: aName resolver: aResolver publicID: aPublicID systemID: aSystemID baseURI: aBaseURIString [ - (self generalEntities includesKey: aName) - ifTrue: [^ nil]. - ^ self generalEntities - at: aName - put: - (DTDStandaloneExternalExternalGeneralParsedEntity - name: aName - resolver: aResolver - publicID: aPublicID - systemID: aSystemID - baseURI: aBaseURIString). -] - -{ #category : #adding } -DTDDoctypeDefinition >> addStandaloneExternalInternalGeneralEntity: aName replacement: aReplacement baseURI: aBaseURIString [ - (self generalEntities includesKey: aName) - ifTrue: [^ nil]. - ^ self generalEntities - at: aName - put: - (DTDStandaloneExternalInternalGeneralParsedEntity - name: aName - replacement: aReplacement - uri: aBaseURIString). -] - -{ #category : #adding } -DTDDoctypeDefinition >> addStandaloneExternalValidatorForAttributeIn: anElement named: anAttribute type: aType defaultPragma: aDefaultPragma defaultValue: aDefaultValue [ - | attributes | - - attributes := - self attributeValidators - at: anElement - ifAbsentPut: [Dictionary new]. - (attributes includesKey: anAttribute) - ifTrue: [^ nil]. - ^ attributes - at: anAttribute - put: - ((DTDStandaloneExternalAttributeDefinitionParser - element: anElement - attribute: anAttribute - type: aType - defaultPragma: aDefaultPragma - defaultValue: aDefaultValue) parse - initializeWithValidatorsFrom: self). -] - -{ #category : #adding } -DTDDoctypeDefinition >> addStandaloneExternalValidatorForElement: anElement contentModel: aContentModel [ - (self elementValidators includesKey: anElement) - ifTrue: [^ nil]. - ^ self elementValidators - at: anElement - put: - ((DTDContentModelParser parserClassForContentModel: aContentModel) - standaloneExternalClass - element: anElement - contentModel: aContentModel) parse. -] - -{ #category : #adding } -DTDDoctypeDefinition >> addUnparsedEntity: aName publicID: aPublicID systemID: aSystemID ndata: aNotation [ - (self generalEntities includesKey: aName) - ifTrue: [^ nil]. - ^ self generalEntities - at: aName - put: - (self unparsedEntities - at: aName - put: - (DTDUnparsedEntity - name: aName - publicID: aPublicID - systemID: aSystemID - ndata: aNotation)). -] - -{ #category : #adding } -DTDDoctypeDefinition >> addUnresolvableExternalGeneralEntity: aName [ - (self generalEntities includesKey: aName) - ifTrue: [^ nil]. - ^ self generalEntities - at: aName - put: (DTDUnresolvableExternalGeneralParsedEntity named: aName). -] - -{ #category : #adding } -DTDDoctypeDefinition >> addUnresolvableExternalParameterEntity: aName [ - (self parameterEntities includesKey: aName) - ifTrue: [^ nil]. - ^ self parameterEntities - at: aName - put: (DTDUnresolvableExternalParameterParsedEntity named: aName). -] - -{ #category : #adding } -DTDDoctypeDefinition >> addValidatorForAttributeIn: anElement named: anAttribute type: aType defaultPragma: aDefaultPragma defaultValue: aDefaultValue [ - | attributes | - - attributes := - self attributeValidators - at: anElement - ifAbsentPut: [Dictionary new]. - (attributes includesKey: anAttribute) - ifTrue: [^ nil]. - ^ attributes - at: anAttribute - put: - ((DTDAttributeDefinitionParser - element: anElement - attribute: anAttribute - type: aType - defaultPragma: aDefaultPragma - defaultValue: aDefaultValue) parse - initializeWithValidatorsFrom: self). -] - -{ #category : #adding } -DTDDoctypeDefinition >> addValidatorForElement: anElement contentModel: aContentModel [ - (self elementValidators includesKey: anElement) - ifTrue: [^ nil]. - ^ self elementValidators - at: anElement - put: - ((DTDContentModelParser parserClassForContentModel: aContentModel) - element: anElement - contentModel: aContentModel) parse. -] - -{ #category : #accessing } -DTDDoctypeDefinition >> attributeValidators [ - ^ attributeValidators ifNil: [attributeValidators := Dictionary new] -] - -{ #category : #accessing } -DTDDoctypeDefinition >> attributeValidatorsAt: aName [ - ^ self - attributeValidatorsAt: aName - ifAbsent: [nil] -] - -{ #category : #accessing } -DTDDoctypeDefinition >> attributeValidatorsAt: aName ifAbsent: aBlock [ - ^ self attributeValidators - at: aName - ifAbsent: aBlock -] - -{ #category : #accessing } -DTDDoctypeDefinition >> elementIDValidator [ - ^ elementIDValidator ifNil: [elementIDValidator := XMLElementIDValidator new] -] - -{ #category : #accessing } -DTDDoctypeDefinition >> elementValidators [ - ^ elementValidators ifNil: [elementValidators := Dictionary new] -] - -{ #category : #accessing } -DTDDoctypeDefinition >> elementValidatorsAt: aName [ - ^ self - elementValidatorsAt: aName - ifAbsent: [nil] -] - -{ #category : #accessing } -DTDDoctypeDefinition >> elementValidatorsAt: aName ifAbsent: aBlock [ - ^ self elementValidators - at: aName - ifAbsent: aBlock -] - -{ #category : #accessing } -DTDDoctypeDefinition >> generalEntities [ - ^ generalEntities ifNil: [generalEntities := Dictionary new] -] - -{ #category : #accessing } -DTDDoctypeDefinition >> generalEntityAt: aName [ - ^ self - generalEntityAt: aName - ifAbsent: [nil] -] - -{ #category : #accessing } -DTDDoctypeDefinition >> generalEntityAt: aName ifAbsent: aBlock [ - ^ self generalEntities - at: aName - ifAbsent: aBlock -] - -{ #category : #testing } -DTDDoctypeDefinition >> hasAttributeValidators [ - "optimized to avoid lazy initialization" - attributeValidators == nil - ifTrue: [^ false]. - ^ attributeValidators size > 0. -] - -{ #category : #testing } -DTDDoctypeDefinition >> hasElementIDReferences [ - "direct access to avoid lazy initialization" - ^ elementIDValidator notNil - and: [elementIDValidator hasIDReferences] -] - -{ #category : #testing } -DTDDoctypeDefinition >> hasElementIDs [ - "direct access to avoid lazy initialization" - ^ elementIDValidator notNil - and: [elementIDValidator hasIDs] -] - -{ #category : #testing } -DTDDoctypeDefinition >> hasElementValidators [ - "optimized to avoid lazy initialization" - elementValidators == nil - ifTrue: [^ false]. - ^ elementValidators size > 0. -] - -{ #category : #testing } -DTDDoctypeDefinition >> hasEntities [ - ^ self hasGeneralEntities - or: [self hasParameterEntities - or: [self hasUnparsedEntities]] -] - -{ #category : #testing } -DTDDoctypeDefinition >> hasGeneralEntities [ - "direct access to avoid lazy initialization" - ^ generalEntities notNil - and: [generalEntities notEmpty] -] - -{ #category : #testing } -DTDDoctypeDefinition >> hasNotationAttributeValidators [ - ^ self hasAttributeValidators - and: [self unparsedEntityValidator hasNotationAttributeValidators] -] - -{ #category : #testing } -DTDDoctypeDefinition >> hasNotations [ - "direct access to avoid lazy initialization" - ^ notations notNil - and: [notations notEmpty] -] - -{ #category : #testing } -DTDDoctypeDefinition >> hasParameterEntities [ - "direct access to avoid lazy initialization" - ^ parameterEntities notNil - and: [parameterEntities notEmpty] -] - -{ #category : #testing } -DTDDoctypeDefinition >> hasRoot [ - ^ root notNil and: [root notEmpty] -] - -{ #category : #testing } -DTDDoctypeDefinition >> hasUnparsedEntities [ - "direct access to avoid lazy initialization" - ^ unparsedEntities notNil - and: [unparsedEntities notEmpty] -] - -{ #category : #'instance creation' } -DTDDoctypeDefinition >> newValidator [ - ^ DTDDocumentValidator doctypeDefinition: self -] - -{ #category : #accessing } -DTDDoctypeDefinition >> notations [ - ^ notations ifNil: [notations := Dictionary new] -] - -{ #category : #accessing } -DTDDoctypeDefinition >> parameterEntities [ - ^ parameterEntities ifNil: [parameterEntities := Dictionary new] -] - -{ #category : #accessing } -DTDDoctypeDefinition >> parameterEntityAt: aName [ - ^ self - parameterEntityAt: aName - ifAbsent: [nil] -] - -{ #category : #accessing } -DTDDoctypeDefinition >> parameterEntityAt: aName ifAbsent: aBlock [ - ^ self parameterEntities - at: aName - ifAbsent: aBlock -] - -{ #category : #processing } -DTDDoctypeDefinition >> processStartTag: anElement attributes: aDictionary [ - self hasAttributeValidators - ifFalse: [^ self]. - (self - attributeValidatorsAt: anElement - ifAbsent: [^ self]) - valuesDo: [:each | each processAttributes: aDictionary] -] - -{ #category : #removing } -DTDDoctypeDefinition >> removeElementIDReferences [ - self hasElementIDReferences - ifTrue: [self elementIDValidator removeIDReferences] -] - -{ #category : #removing } -DTDDoctypeDefinition >> removeElementIDs [ - self hasElementIDs - ifTrue: [self elementIDValidator removeIDs] -] - -{ #category : #accessing } -DTDDoctypeDefinition >> root [ - ^ root ifNil: [root := ''] -] - -{ #category : #accessing } -DTDDoctypeDefinition >> root: aRootElement [ - root := aRootElement -] - -{ #category : #accessing } -DTDDoctypeDefinition >> unparsedEntities [ - ^ unparsedEntities ifNil: [unparsedEntities := Dictionary new] -] - -{ #category : #accessing } -DTDDoctypeDefinition >> unparsedEntityValidator [ - ^ unparsedEntityValidator - ifNil: [ - unparsedEntityValidator := - XMLUnparsedEntityValidator - unparsedEntities: self unparsedEntities - notations: self notations] -] - -{ #category : #validation } -DTDDoctypeDefinition >> validateCompletedDefinition [ - self hasUnparsedEntities - ifTrue: [self unparsedEntityValidator validateUnparsedEntityDeclarations]. - self hasNotationAttributeValidators - ifTrue: [self unparsedEntityValidator validateNotationAttributeDeclarationDefaults]. -] diff --git a/src/XML-Parser/DTDDocumentValidator.class.st b/src/XML-Parser/DTDDocumentValidator.class.st deleted file mode 100644 index 5b4aa1335..000000000 --- a/src/XML-Parser/DTDDocumentValidator.class.st +++ /dev/null @@ -1,87 +0,0 @@ -" -This class validates documents using a DTD. -" -Class { - #name : #DTDDocumentValidator, - #superclass : #XMLDocumentValidator, - #instVars : [ - 'doctypeDefinition' - ], - #category : #'XML-Parser-DTD' -} - -{ #category : #'instance creation' } -DTDDocumentValidator class >> doctypeDefinition: aDoctypeDefinition [ - ^ self new doctypeDefinition: aDoctypeDefinition -] - -{ #category : #accessing } -DTDDocumentValidator >> attributeValidatorsFor: anElement ifNone: aBlock [ - ^ self doctypeDefinition - attributeValidatorsAt: anElement - ifAbsent: aBlock -] - -{ #category : #accessing } -DTDDocumentValidator >> doctypeDefinition [ - ^ doctypeDefinition -] - -{ #category : #accessing } -DTDDocumentValidator >> doctypeDefinition: aDoctypeDefinition [ - doctypeDefinition := aDoctypeDefinition -] - -{ #category : #accessing } -DTDDocumentValidator >> elementValidatorFor: anElement ifNone: aBlock [ - ^ self doctypeDefinition - elementValidatorsAt: anElement - ifAbsent: aBlock -] - -{ #category : #private } -DTDDocumentValidator >> errorInvalidRootElement: anElement [ - XMLValidationException - formatSignal: - 'Root element must be <{1}> according to DOCTYPE declaration, not <{2}>' - with: self doctypeDefinition root - with: anElement -] - -{ #category : #testing } -DTDDocumentValidator >> hasAttributeValidators [ - ^ self doctypeDefinition hasAttributeValidators -] - -{ #category : #testing } -DTDDocumentValidator >> hasElementValidators [ - ^ self doctypeDefinition hasElementValidators -] - -{ #category : #validating } -DTDDocumentValidator >> unvalidatedAttributes: anAttributeCollection inElement: anElement [ - XMLValidationException - formatSignal: 'Undeclared attribute "{1}" in element <{2}>' - with: anAttributeCollection anyOne - with: anElement -] - -{ #category : #validating } -DTDDocumentValidator >> unvalidatedElement: anElement [ - XMLValidationException - formatSignal: 'Undeclared element <{1}>' - with: anElement -] - -{ #category : #validating } -DTDDocumentValidator >> validateIDReferences [ - self doctypeDefinition hasElementIDReferences - ifTrue: [self doctypeDefinition elementIDValidator validateIDReferences] -] - -{ #category : #validating } -DTDDocumentValidator >> validateRootElement: anElement [ - (self doctypeDefinition hasRoot - and: [self doctypeDefinition root ~= anElement]) - ifTrue: [self errorInvalidRootElement: anElement] -] diff --git a/src/XML-Parser/DTDElementContentModelParser.class.st b/src/XML-Parser/DTDElementContentModelParser.class.st deleted file mode 100644 index 8151b370d..000000000 --- a/src/XML-Parser/DTDElementContentModelParser.class.st +++ /dev/null @@ -1,156 +0,0 @@ -" -This class parses element content models. It uses postfix conversion and an XMLNFABuilder to build an NFA before converting it to a lazy DFA (states are built when needed and cached) and returns it as an XMLElementValidator. - -It assumes all spaces have been removed from the input and that it's been checked for well-formedness, meaning no missing names or misplaced operators/parentheses. -" -Class { - #name : #DTDElementContentModelParser, - #superclass : #DTDContentModelParser, - #instVars : [ - 'nfaBuilder', - 'binaryOperatorStack' - ], - #classVars : [ - 'OperatorApplicators', - 'SpecialCharacterParsers' - ], - #category : #'XML-Parser-DTD' -} - -{ #category : #'class initialization' } -DTDElementContentModelParser class >> initialize [ - "self initialize" - - self - initializeSpecialCharacterParsers; - initializeOperatorApplicators -] - -{ #category : #'class initialization' } -DTDElementContentModelParser class >> initializeOperatorApplicators [ - "use an array instead of a dictionary for speed, and - assign after with #yourself to avoid possible race - conditions when reinitializing the class" - OperatorApplicators := - (Array new: 255) - at: $, asciiValue put: #applyConcatenation; - at: $| asciiValue put: #applyBranch; - at: $? asciiValue put: #applyOptional; - at: $* asciiValue put: #applyStar; - at: $+ asciiValue put: #applyPlus; - yourself -] - -{ #category : #'class initialization' } -DTDElementContentModelParser class >> initializeSpecialCharacterParsers [ - "use an array instead of a dictionary for speed, and - assign after with #yourself to avoid possible race - conditions when reinitializing the class" - SpecialCharacterParsers := - (Array new: 255) - at: $( asciiValue put: #parseOpeningParenthesis:; - at: $) asciiValue put: #parseClosingParenthesis:; - at: $, asciiValue put: #parseBinaryOperator:; - at: $| asciiValue put: #parseBinaryOperator:; - at: $? asciiValue put: #parseUnaryOperator:; - at: $* asciiValue put: #parseUnaryOperator:; - at: $+ asciiValue put: #parseUnaryOperator:; - yourself -] - -{ #category : #defaults } -DTDElementContentModelParser class >> standaloneExternalClass [ - ^ DTDStandaloneExternalElementContentModelParser -] - -{ #category : #private } -DTDElementContentModelParser >> applyBinaryOperatorOnStack [ - self applyOperator: binaryOperatorStack removeLast -] - -{ #category : #private } -DTDElementContentModelParser >> applyOperator: aCharacter [ - nfaBuilder perform: - (OperatorApplicators at: aCharacter asciiValue) -] - -{ #category : #defaults } -DTDElementContentModelParser >> elementValidatorClass [ - ^ XMLDFAElementContentElementValidator -] - -{ #category : #private } -DTDElementContentModelParser >> hasBinaryOperatorOnStack [ - ^ binaryOperatorStack size > 0 - and: [binaryOperatorStack last ~~ $(] -] - -{ #category : #parsing } -DTDElementContentModelParser >> parse [ - "the tokenizer removes all spaces from the content model and checks - it for well-formedness (meaning no missing names or misplaced - operators/parentheses), which simplifies parsing" - | nameStart | - - binaryOperatorStack := OrderedCollection new. - nfaBuilder := XMLNFABuilder new. - 1 to: contentModel size do: [:i | - (self parserForSpecialCharacter: (contentModel at: i)) - ifNil: [ - nameStart - ifNil: [nameStart := i]] - ifNotNil: [:selector | - nameStart - ifNotNil: [ - nfaBuilder pushFragmentMatching: - (contentModel copyFrom: nameStart to: i - 1). - nameStart := nil]. - self - perform: selector - with: (contentModel at: i)]]. - self popRemainingBinaryOperators. - - ^ self elementValidatorClass - element: element - dfa: nfaBuilder asAcceptingNFA asDFAState. -] - -{ #category : #private } -DTDElementContentModelParser >> parseBinaryOperator: aCharacter [ - binaryOperatorStack addLast: aCharacter -] - -{ #category : #private } -DTDElementContentModelParser >> parseClosingParenthesis: aCharacter [ - self popRemainingBinaryOperators. - (binaryOperatorStack size > 0 - and: [binaryOperatorStack last == $(]) - ifTrue: [binaryOperatorStack removeLast]. -] - -{ #category : #private } -DTDElementContentModelParser >> parseOpeningParenthesis: aCharacter [ - binaryOperatorStack addLast: $( -] - -{ #category : #private } -DTDElementContentModelParser >> parseUnaryOperator: aCharacter [ - self applyOperator: aCharacter -] - -{ #category : #private } -DTDElementContentModelParser >> parserForSpecialCharacter: aCharacter [ - | asciiValue | - - "avoid at:ifAbsent: for speed" - ((asciiValue := aCharacter asciiValue) > 0 - and: [asciiValue <= SpecialCharacterParsers size]) - ifTrue: [^ SpecialCharacterParsers at: asciiValue] - ifFalse: [^ nil] -] - -{ #category : #private } -DTDElementContentModelParser >> popRemainingBinaryOperators [ - [self hasBinaryOperatorOnStack] - whileTrue: [self applyBinaryOperatorOnStack] -] diff --git a/src/XML-Parser/DTDEntity.class.st b/src/XML-Parser/DTDEntity.class.st deleted file mode 100644 index cc225170c..000000000 --- a/src/XML-Parser/DTDEntity.class.st +++ /dev/null @@ -1,96 +0,0 @@ -" -This is an abstract base class for internal and external parsed entities with replacements that can be inserted into an XML document. -" -Class { - #name : #DTDEntity, - #superclass : #Object, - #instVars : [ - 'name', - 'uri' - ], - #category : #'XML-Parser-DTD' -} - -{ #category : #'instance creation' } -DTDEntity class >> name: aName [ - ^ self named: aName -] - -{ #category : #'instance creation' } -DTDEntity class >> named: aName [ - ^ self new name: aName -] - -{ #category : #converting } -DTDEntity >> asReference [ - ^ String streamContents: [:stream | self printReferenceOn: stream] -] - -{ #category : #testing } -DTDEntity >> isExternal [ - ^ false -] - -{ #category : #testing } -DTDEntity >> isParameter [ - ^ false -] - -{ #category : #testing } -DTDEntity >> isStandaloneExternal [ - ^ false -] - -{ #category : #testing } -DTDEntity >> isUnparsed [ - ^ false -] - -{ #category : #accessing } -DTDEntity >> name [ - ^ name ifNil: [name := ''] -] - -{ #category : #accessing } -DTDEntity >> name: aName [ - name := aName -] - -{ #category : #printing } -DTDEntity >> printNameOn: aStream [ - aStream nextPutAll: self name -] - -{ #category : #printing } -DTDEntity >> printOn: aStream [ - super printOn: aStream. - - aStream nextPut: $(. - self printNameOn: aStream. - aStream nextPut: $). -] - -{ #category : #printing } -DTDEntity >> printReferenceOn: aStream [ - aStream - nextPut: self referencePrefix; - nextPutAll: self name; - nextPut: $; -] - -{ #category : #'private ' } -DTDEntity >> referencePrefix [ - ^ self isParameter - ifTrue: [$%] - ifFalse: [$&] -] - -{ #category : #accessing } -DTDEntity >> uri [ - ^ uri ifNil: [uri := ''] -] - -{ #category : #accessing } -DTDEntity >> uri: aURIString [ - uri := aURIString -] diff --git a/src/XML-Parser/DTDEntityConfiguration.class.st b/src/XML-Parser/DTDEntityConfiguration.class.st deleted file mode 100644 index b95b82295..000000000 --- a/src/XML-Parser/DTDEntityConfiguration.class.st +++ /dev/null @@ -1,65 +0,0 @@ -" -This class contains configurations for entity replacement/retrieval. It is separate from XMLConfiguration so it is only lazy initialized when needed and saves memory. -" -Class { - #name : #DTDEntityConfiguration, - #superclass : #Object, - #instVars : [ - 'replacesContentEntityReferences', - 'resolvesExternalEntities', - 'preservesUndeclaredEntityReferences', - 'externalEntityResolver' - ], - #category : #'XML-Parser-DTD' -} - -{ #category : #accessing } -DTDEntityConfiguration >> externalEntityResolver [ - "uses the caching resolver by default" - ^ externalEntityResolver - ifNil: [externalEntityResolver := DTDExternalEntityResolver default] -] - -{ #category : #accessing } -DTDEntityConfiguration >> externalEntityResolver: anExternalEntityResolver [ - externalEntityResolver := anExternalEntityResolver -] - -{ #category : #copying } -DTDEntityConfiguration >> postCopy [ - super postCopy. - - externalEntityResolver - ifNotNil: [externalEntityResolver := externalEntityResolver copy]. -] - -{ #category : #accessing } -DTDEntityConfiguration >> preservesUndeclaredEntityReferences [ - ^ preservesUndeclaredEntityReferences - ifNil: [preservesUndeclaredEntityReferences := false] -] - -{ #category : #accessing } -DTDEntityConfiguration >> preservesUndeclaredEntityReferences: aBoolean [ - preservesUndeclaredEntityReferences := aBoolean -] - -{ #category : #accessing } -DTDEntityConfiguration >> replacesContentEntityReferences [ - ^ replacesContentEntityReferences ifNil: [replacesContentEntityReferences := true] -] - -{ #category : #accessing } -DTDEntityConfiguration >> replacesContentEntityReferences: aBoolean [ - replacesContentEntityReferences := aBoolean -] - -{ #category : #accessing } -DTDEntityConfiguration >> resolvesExternalEntities [ - ^ resolvesExternalEntities ifNil: [resolvesExternalEntities := false] -] - -{ #category : #accessing } -DTDEntityConfiguration >> resolvesExternalEntities: aBoolean [ - resolvesExternalEntities := aBoolean -] diff --git a/src/XML-Parser/DTDEnumerationListParser.class.st b/src/XML-Parser/DTDEnumerationListParser.class.st deleted file mode 100644 index 549d87de7..000000000 --- a/src/XML-Parser/DTDEnumerationListParser.class.st +++ /dev/null @@ -1,75 +0,0 @@ -" -This is a parser of lists in the form of ""(one|two|...)"". It assumes there is no whitespace around the ""|"" separated list values. -" -Class { - #name : #DTDEnumerationListParser, - #superclass : #Object, - #instVars : [ - 'listString' - ], - #category : #'XML-Parser-DTD' -} - -{ #category : #'instance creation' } -DTDEnumerationListParser class >> on: aString [ - ^ self new on: aString -] - -{ #category : #private } -DTDEnumerationListParser >> errorDuplicateListValue: aValue [ - XMLValidationException - formatSignal: 'Duplicate value "{1}" in list' - with: aValue -] - -{ #category : #private } -DTDEnumerationListParser >> listEndOffset [ - ^ 1 "')' size" -] - -{ #category : #private } -DTDEnumerationListParser >> listStartOffset [ - ^ 1 "'(' size" -] - -{ #category : #initialization } -DTDEnumerationListParser >> on: aString [ - listString := aString -] - -{ #category : #parsing } -DTDEnumerationListParser >> parse [ - "the tokenizer removes all spaces from lists" - | listStartIndex listEndIndex totalListValues listValues nextListValuesIndex nextValueStartIndex | - - listStartIndex := 1 + self listStartOffset. - listEndIndex := listString size - self listEndOffset. - "count the values to preallocate an Array" - totalListValues := 1. - listStartIndex to: listEndIndex do: [:i | - (listString at: i) == $| - ifTrue: [totalListValues := totalListValues + 1]]. - - listValues := Array new: totalListValues. - nextListValuesIndex := 1. - nextValueStartIndex := listStartIndex. - listStartIndex to: listEndIndex do: [:i | - (listString at: i) == $| - ifTrue: [ - listValues - at: nextListValuesIndex - put: - (listString - copyFrom: nextValueStartIndex - to: i - 1). - nextListValuesIndex := nextListValuesIndex + 1. - nextValueStartIndex := i + 1]]. - listValues - at: nextListValuesIndex - put: - (listString - copyFrom: nextValueStartIndex - to: listEndIndex). - - ^ listValues. -] diff --git a/src/XML-Parser/DTDExternalEntityLimits.class.st b/src/XML-Parser/DTDExternalEntityLimits.class.st deleted file mode 100644 index ec5279953..000000000 --- a/src/XML-Parser/DTDExternalEntityLimits.class.st +++ /dev/null @@ -1,88 +0,0 @@ -" -This class places security limits on the number and size of external parsed entities. You can set these using the configuration messages in DTDExternalEntityResolver or remove them using removeLimits. -" -Class { - #name : #DTDExternalEntityLimits, - #superclass : #Object, - #instVars : [ - 'externalSubsetReadLimit', - 'maxExternalEntities', - 'maxExternalEntitySize', - 'resolvesLocalFromNonLocal' - ], - #category : #'XML-Parser-DTD' -} - -{ #category : #accessing } -DTDExternalEntityLimits class >> defaultExternalSubsetReadLimit [ - ^ XMLParserLimits defaultReadLimit - ifNotNil: [:limit | (limit / 4) asInteger] -] - -{ #category : #accessing } -DTDExternalEntityLimits class >> defaultMaxExternalEntities [ - ^ 20 -] - -{ #category : #accessing } -DTDExternalEntityLimits class >> defaultMaxExternalEntitySize [ - ^ 2500000 -] - -{ #category : #accessing } -DTDExternalEntityLimits >> externalSubsetReadLimit [ - ^ externalSubsetReadLimit -] - -{ #category : #accessing } -DTDExternalEntityLimits >> externalSubsetReadLimit: anInteger [ - externalSubsetReadLimit := anInteger -] - -{ #category : #initialization } -DTDExternalEntityLimits >> initialize [ - super initialize. - - externalSubsetReadLimit := self class defaultExternalSubsetReadLimit. - maxExternalEntities := self class defaultMaxExternalEntities. - maxExternalEntitySize := self class defaultMaxExternalEntitySize. - resolvesLocalFromNonLocal := false. -] - -{ #category : #accessing } -DTDExternalEntityLimits >> maxExternalEntities [ - ^ maxExternalEntities -] - -{ #category : #accessing } -DTDExternalEntityLimits >> maxExternalEntities: anInteger [ - maxExternalEntities := anInteger -] - -{ #category : #accessing } -DTDExternalEntityLimits >> maxExternalEntitySize [ - ^ maxExternalEntitySize -] - -{ #category : #accessing } -DTDExternalEntityLimits >> maxExternalEntitySize: anInteger [ - maxExternalEntitySize := anInteger -] - -{ #category : #removing } -DTDExternalEntityLimits >> removeAll [ - externalSubsetReadLimit := nil. - maxExternalEntities := nil. - maxExternalEntitySize := nil. - resolvesLocalFromNonLocal := true. -] - -{ #category : #accessing } -DTDExternalEntityLimits >> resolvesLocalFromNonLocal [ - ^ resolvesLocalFromNonLocal -] - -{ #category : #accessing } -DTDExternalEntityLimits >> resolvesLocalFromNonLocal: aBoolean [ - resolvesLocalFromNonLocal := aBoolean -] diff --git a/src/XML-Parser/DTDExternalEntityResolver.class.st b/src/XML-Parser/DTDExternalEntityResolver.class.st deleted file mode 100644 index 3444bd111..000000000 --- a/src/XML-Parser/DTDExternalEntityResolver.class.st +++ /dev/null @@ -1,214 +0,0 @@ -" -This class resolves external entity references using XMLURI, XMLHTTPRequest, and XMLFileHandle. - -The #externalEntityURIFromPublicID:systemID: and #externalEntityURIFromPublicID:systemID:baseURI: convert public IDs and system IDs into resolvable XMLURI objects. - -The #resolveExternalEntityURI: and #streamResolveExternalEntityURI: messages can resolve external entity XMLURIs or URI strings as either a string or a stream on the undecoded entity content. If the entity is in a file, then #streamResolveExternalEntityURI: can be used to avoid storing it in-memory, but if it's fetched over HTTP, it will just return a stream on the entire in-memory HTTP response. -" -Class { - #name : #DTDExternalEntityResolver, - #superclass : #Object, - #instVars : [ - 'externalEntityLimits' - ], - #category : #'XML-Parser-DTD' -} - -{ #category : #'instance creation' } -DTDExternalEntityResolver class >> default [ - ^ self defaultClass new -] - -{ #category : #accessing } -DTDExternalEntityResolver class >> defaultClass [ - ^ DTDCachingExternalEntityResolver -] - -{ #category : #converting } -DTDExternalEntityResolver >> asLimitingExternalEntityResolver [ - ^ DTDExternalEntityResolverLimitingDecorator externalEntityResolver: self -] - -{ #category : #private } -DTDExternalEntityResolver >> errorLocalFromNonLocal [ - XMLLimitException signal: - 'Local URI referenced from non-local URI; ', - 'use #resolvesLocalFromNonLocal: to change' -] - -{ #category : #configuring } -DTDExternalEntityResolver >> externalEntityLimits [ - ^ externalEntityLimits - ifNil: [externalEntityLimits := DTDExternalEntityLimits new] -] - -{ #category : #configuring } -DTDExternalEntityResolver >> externalEntityLimits: anExternalEntityLimits [ - externalEntityLimits := anExternalEntityLimits -] - -{ #category : #resolving } -DTDExternalEntityResolver >> externalEntityURIFromPublicID: aPublicID systemID: aSystemID [ - ^ aSystemID asXMLURI -] - -{ #category : #resolving } -DTDExternalEntityResolver >> externalEntityURIFromPublicID: aPublicID systemID: aSystemID baseURI: aBaseXMLURIOrURIString [ - | baseURI externalEntityURI | - - baseURI := aBaseXMLURIOrURIString asXMLURI. - externalEntityURI := - baseURI combinedWith: - (self - externalEntityURIFromPublicID: aPublicID - systemID: aSystemID). - (externalEntityURI isLocal - and: [baseURI isLocal not - and: [self resolvesLocalFromNonLocal not]]) - ifTrue: [self errorLocalFromNonLocal]. - - ^ externalEntityURI. -] - -{ #category : #configuring } -DTDExternalEntityResolver >> externalSubsetReadLimit [ - ^ self externalEntityLimits externalSubsetReadLimit -] - -{ #category : #configuring } -DTDExternalEntityResolver >> externalSubsetReadLimit: anInteger [ - "change the external subset read limit or nil to disable" - - self externalEntityLimits externalSubsetReadLimit: anInteger -] - -{ #category : #configuring } -DTDExternalEntityResolver >> maxExternalEntities [ - ^ self externalEntityLimits maxExternalEntities -] - -{ #category : #configuring } -DTDExternalEntityResolver >> maxExternalEntities: anInteger [ - self externalEntityLimits maxExternalEntities: anInteger -] - -{ #category : #configuring } -DTDExternalEntityResolver >> maxExternalEntitySize [ - ^ self externalEntityLimits maxExternalEntitySize -] - -{ #category : #configuring } -DTDExternalEntityResolver >> maxExternalEntitySize: anInteger [ - self externalEntityLimits maxExternalEntitySize: anInteger -] - -{ #category : #copying } -DTDExternalEntityResolver >> postCopy [ - super postCopy. - - externalEntityLimits - ifNotNil: [externalEntityLimits := externalEntityLimits copy]. -] - -{ #category : #configuring } -DTDExternalEntityResolver >> removeLimits [ - self externalEntityLimits removeAll -] - -{ #category : #resolving } -DTDExternalEntityResolver >> resolveExternalEntityURI: anXMLURIOrURIString [ - ^ self - resolveExternalEntityURI: anXMLURIOrURIString - upToLimit: self maxExternalEntitySize -] - -{ #category : #resolving } -DTDExternalEntityResolver >> resolveExternalEntityURI: anXMLURIOrURIString upToLimit: aMaxSize [ - | uri | - - ^ (uri := anXMLURIOrURIString asXMLURI) isLocal - ifTrue: [ - self - resolveLocalExternalEntityURI: uri - upToLimit: aMaxSize] - ifFalse: [ - self - resolveNonLocalExternalEntityURI: uri - upToLimit: aMaxSize] -] - -{ #category : #private } -DTDExternalEntityResolver >> resolveLocalExternalEntityURI: anXMLURIOrURIString upToLimit: aMaxSize [ - ^ DTDUndecodedResolvedExternalParsedEntityReplacement rawContents: - (anXMLURIOrURIString asXMLFileHandle - getUpToLimit: aMaxSize - decoding: false) -] - -{ #category : #private } -DTDExternalEntityResolver >> resolveNonLocalExternalEntityURI: anXMLURIOrURIString upToLimit: aMaxSize [ - | response | - - response := - anXMLURIOrURIString asXMLHTTPRequest - resolveUpToLimit: aMaxSize - decoding: false. - - "saves the undecoded replacement with its Content-Type - charset encoding tag for later decoding (if needed)" - ^ DTDUndecodedResolvedExternalParsedEntityReplacement - rawContents: response content - encoding: response contentCharset. -] - -{ #category : #configuring } -DTDExternalEntityResolver >> resolvesLocalFromNonLocal [ - ^ self externalEntityLimits resolvesLocalFromNonLocal -] - -{ #category : #configuring } -DTDExternalEntityResolver >> resolvesLocalFromNonLocal: aBoolean [ - "allow non-local (http) entities to reference local (file) entities? - (default disabled)" - - self externalEntityLimits resolvesLocalFromNonLocal: aBoolean -] - -{ #category : #resolving } -DTDExternalEntityResolver >> streamResolveExternalEntityURI: anXMLURIOrURIString [ - ^ self - streamResolveExternalEntityURI: anXMLURIOrURIString - upToLimit: self maxExternalEntitySize -] - -{ #category : #resolving } -DTDExternalEntityResolver >> streamResolveExternalEntityURI: anXMLURIOrURIString upToLimit: aMaxSize [ - | uri | - - ^ (uri := anXMLURIOrURIString asXMLURI) isLocal - ifTrue: [ - self - streamResolveLocalExternalEntityURI: uri - upToLimit: aMaxSize] - ifFalse: [ - self - streamResolveNonLocalExternalEntityURI: uri - upToLimit: aMaxSize] -] - -{ #category : #private } -DTDExternalEntityResolver >> streamResolveLocalExternalEntityURI: anXMLURIOrURIString upToLimit: aMaxSize [ - "return our own decoding adapter on the raw, undecoded stream - to avoid looking for any byte-order mark until later" - ^ XMLDecodingReadStreamAdapter nonDecodingOn: - (anXMLURIOrURIString asXMLFileHandle - streamGetUpToLimit: aMaxSize - decoding: false) -] - -{ #category : #private } -DTDExternalEntityResolver >> streamResolveNonLocalExternalEntityURI: anXMLURIOrURIString upToLimit: aMaxSize [ - ^ (self - resolveNonLocalExternalEntityURI: anXMLURIOrURIString - upToLimit: aMaxSize) readStream -] diff --git a/src/XML-Parser/DTDExternalEntityResolverLimitingDecorator.class.st b/src/XML-Parser/DTDExternalEntityResolverLimitingDecorator.class.st deleted file mode 100644 index d3dea9035..000000000 --- a/src/XML-Parser/DTDExternalEntityResolverLimitingDecorator.class.st +++ /dev/null @@ -1,182 +0,0 @@ -" -This class is a decorator for DTDExternalEntityResolvers that limits the number of entities that can be resolved. This is not handled directly by resolvers to make them less stateful and more reusable. -" -Class { - #name : #DTDExternalEntityResolverLimitingDecorator, - #superclass : #Object, - #instVars : [ - 'externalEntityResolver', - 'totalResolvedExternalEntities' - ], - #category : #'XML-Parser-DTD' -} - -{ #category : #'instance creation' } -DTDExternalEntityResolverLimitingDecorator class >> externalEntityResolver: anExternalEntityResolver [ - ^ self new externalEntityResolver: anExternalEntityResolver -] - -{ #category : #converting } -DTDExternalEntityResolverLimitingDecorator >> asLimitingExternalEntityResolver [ - ^ self -] - -{ #category : #private } -DTDExternalEntityResolverLimitingDecorator >> checkExternalEntityLimit [ - | maxExternalEntities | - - ((maxExternalEntities := self externalEntityResolver maxExternalEntities) notNil - and: [self totalResolvedExternalEntities >= maxExternalEntities]) - ifTrue: [self erorrExternalEntityLimitExceeded] -] - -{ #category : #private } -DTDExternalEntityResolverLimitingDecorator >> erorrExternalEntityLimitExceeded [ - XMLLimitException signal: - 'External entity limit exceeded; ', - 'use #maxExternalEntities: to change or disable' -] - -{ #category : #configuring } -DTDExternalEntityResolverLimitingDecorator >> externalEntityLimits [ - ^ self externalEntityResolver externalEntityLimits -] - -{ #category : #configuring } -DTDExternalEntityResolverLimitingDecorator >> externalEntityLimits: anExternalEntityLimits [ - self externalEntityResolver externalEntityLimits: anExternalEntityLimits -] - -{ #category : #accessing } -DTDExternalEntityResolverLimitingDecorator >> externalEntityResolver [ - ^ externalEntityResolver -] - -{ #category : #accessing } -DTDExternalEntityResolverLimitingDecorator >> externalEntityResolver: anExternalEntityResolver [ - externalEntityResolver := anExternalEntityResolver -] - -{ #category : #resolving } -DTDExternalEntityResolverLimitingDecorator >> externalEntityURIFromPublicID: aPublicID systemID: aSystemID [ - ^ self externalEntityResolver - externalEntityURIFromPublicID: aPublicID - systemID: aSystemID -] - -{ #category : #resolving } -DTDExternalEntityResolverLimitingDecorator >> externalEntityURIFromPublicID: aPublicID systemID: aSystemID baseURI: aBaseXMLURIOrURIString [ - ^ self externalEntityResolver - externalEntityURIFromPublicID: aPublicID - systemID: aSystemID - baseURI: aBaseXMLURIOrURIString -] - -{ #category : #configuring } -DTDExternalEntityResolverLimitingDecorator >> externalSubsetReadLimit [ - ^ self externalEntityResolver externalSubsetReadLimit -] - -{ #category : #configuring } -DTDExternalEntityResolverLimitingDecorator >> externalSubsetReadLimit: anInteger [ - self externalEntityResolver externalSubsetReadLimit: anInteger -] - -{ #category : #private } -DTDExternalEntityResolverLimitingDecorator >> incrementTotalResolvedExternalEntities [ - totalResolvedExternalEntities := - totalResolvedExternalEntities - ifNil: [1] - ifNotNil: [totalResolvedExternalEntities + 1] -] - -{ #category : #configuring } -DTDExternalEntityResolverLimitingDecorator >> maxExternalEntities [ - ^ self externalEntityResolver maxExternalEntities -] - -{ #category : #configuring } -DTDExternalEntityResolverLimitingDecorator >> maxExternalEntities: anInteger [ - self externalEntityResolver maxExternalEntities: anInteger -] - -{ #category : #configuring } -DTDExternalEntityResolverLimitingDecorator >> maxExternalEntitySize [ - ^ self externalEntityResolver maxExternalEntitySize -] - -{ #category : #configuring } -DTDExternalEntityResolverLimitingDecorator >> maxExternalEntitySize: anInteger [ - self externalEntityResolver maxExternalEntitySize: anInteger -] - -{ #category : #printing } -DTDExternalEntityResolverLimitingDecorator >> printOn: aStream [ - super printOn: aStream. - - aStream - nextPut: $(; - print: self externalEntityResolver; - nextPut: $). -] - -{ #category : #configuring } -DTDExternalEntityResolverLimitingDecorator >> removeLimits [ - self externalEntityResolver removeLimits -] - -{ #category : #resolving } -DTDExternalEntityResolverLimitingDecorator >> resolveExternalEntityURI: anXMLURIOrURIString [ - ^ self resolveExternalEntityWith: [ - self externalEntityResolver resolveExternalEntityURI: - anXMLURIOrURIString] -] - -{ #category : #resolving } -DTDExternalEntityResolverLimitingDecorator >> resolveExternalEntityURI: anXMLURIOrURIString upToLimit: aMaxSize [ - ^ self resolveExternalEntityWith: [ - self externalEntityResolver - resolveExternalEntityURI: anXMLURIOrURIString - upToLimit: aMaxSize] -] - -{ #category : #private } -DTDExternalEntityResolverLimitingDecorator >> resolveExternalEntityWith: aBlock [ - | result | - - self checkExternalEntityLimit. - result := aBlock value. - self incrementTotalResolvedExternalEntities. - - ^ result. -] - -{ #category : #configuring } -DTDExternalEntityResolverLimitingDecorator >> resolvesLocalFromNonLocal [ - ^ self externalEntityResolver resolvesLocalFromNonLocal -] - -{ #category : #configuring } -DTDExternalEntityResolverLimitingDecorator >> resolvesLocalFromNonLocal: aBoolean [ - self externalEntityResolver resolvesLocalFromNonLocal: aBoolean -] - -{ #category : #resolving } -DTDExternalEntityResolverLimitingDecorator >> streamResolveExternalEntityURI: anXMLURIOrURIString [ - ^ self resolveExternalEntityWith: [ - self externalEntityResolver streamResolveExternalEntityURI: - anXMLURIOrURIString] -] - -{ #category : #resolving } -DTDExternalEntityResolverLimitingDecorator >> streamResolveExternalEntityURI: anXMLURIOrURIString upToLimit: aMaxSize [ - ^ self resolveExternalEntityWith: [ - self externalEntityResolver - streamResolveExternalEntityURI: anXMLURIOrURIString - upToLimit: aMaxSize] -] - -{ #category : #accessing } -DTDExternalEntityResolverLimitingDecorator >> totalResolvedExternalEntities [ - ^ totalResolvedExternalEntities ifNil: [totalResolvedExternalEntities := 0] -] diff --git a/src/XML-Parser/DTDExternalGeneralParsedEntity.class.st b/src/XML-Parser/DTDExternalGeneralParsedEntity.class.st deleted file mode 100644 index 9abc1f0d5..000000000 --- a/src/XML-Parser/DTDExternalGeneralParsedEntity.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -This is a class for external general parsed entities with external replacements that can be inserted into an XML document. -" -Class { - #name : #DTDExternalGeneralParsedEntity, - #superclass : #DTDExternalParsedEntity, - #category : #'XML-Parser-DTD' -} diff --git a/src/XML-Parser/DTDExternalParameterParsedEntity.class.st b/src/XML-Parser/DTDExternalParameterParsedEntity.class.st deleted file mode 100644 index 863beeff2..000000000 --- a/src/XML-Parser/DTDExternalParameterParsedEntity.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -This is a class for external parameter parsed entities with external replacements that can be inserted into an XML document. -" -Class { - #name : #DTDExternalParameterParsedEntity, - #superclass : #DTDExternalParsedEntity, - #category : #'XML-Parser-DTD' -} - -{ #category : #testing } -DTDExternalParameterParsedEntity >> isParameter [ - ^ true -] diff --git a/src/XML-Parser/DTDExternalParsedEntity.class.st b/src/XML-Parser/DTDExternalParsedEntity.class.st deleted file mode 100644 index 9da5aab54..000000000 --- a/src/XML-Parser/DTDExternalParsedEntity.class.st +++ /dev/null @@ -1,93 +0,0 @@ -" -This is an abstract base class for external parsed entities with external replacements that can be inserted into an XML document. - -The external replacements are resolved lazily the first time #replacement or #replacementStream is sent. -" -Class { - #name : #DTDExternalParsedEntity, - #superclass : #DTDParsedEntity, - #instVars : [ - 'unresolvedReplacement', - 'resolvedReplacement' - ], - #category : #'XML-Parser-DTD' -} - -{ #category : #'instance creation' } -DTDExternalParsedEntity class >> name: aName resolver: aResolver publicID: aPublicID systemID: aSystemID baseURI: aBaseURIString [ - ^ self new - setName: aName - unresolvedReplacement: - (DTDUnresolvedExternalParsedEntityReplacement - resolver: aResolver - publicID: aPublicID - systemID: aSystemID - baseURI: aBaseURIString) -] - -{ #category : #testing } -DTDExternalParsedEntity >> hasReplacement [ - ^ self resolvedReplacement notEmpty -] - -{ #category : #testing } -DTDExternalParsedEntity >> hasUnresolvedReplacement [ - ^ self unresolvedReplacement notNil -] - -{ #category : #testing } -DTDExternalParsedEntity >> isExternal [ - ^ true -] - -{ #category : #printing } -DTDExternalParsedEntity >> printNameOn: aStream [ - aStream - nextPut: ${; - nextPutAll: self uri; - nextPut: $}. - super printNameOn: aStream. -] - -{ #category : #accessing } -DTDExternalParsedEntity >> replacement [ - ^ self resolvedReplacement contents -] - -{ #category : #accessing } -DTDExternalParsedEntity >> replacementStream [ - ^ self resolvedReplacement readStream -] - -{ #category : #resolving } -DTDExternalParsedEntity >> resolveUnresolvedReplacement [ - self hasUnresolvedReplacement - ifTrue: [self unresolvedReplacement resolveForExternalEntity: self] -] - -{ #category : #accessing } -DTDExternalParsedEntity >> resolvedReplacement [ - self resolveUnresolvedReplacement. - ^ resolvedReplacement. -] - -{ #category : #accessing } -DTDExternalParsedEntity >> resolvedReplacement: aResolvedReplacement [ - resolvedReplacement := aResolvedReplacement -] - -{ #category : #initialization } -DTDExternalParsedEntity >> setName: aName unresolvedReplacement: anUnresolvedReplacement [ - name := aName. - unresolvedReplacement := anUnresolvedReplacement. -] - -{ #category : #accessing } -DTDExternalParsedEntity >> unresolvedReplacement [ - ^ unresolvedReplacement -] - -{ #category : #accessing } -DTDExternalParsedEntity >> unresolvedReplacement: anUnresolvedReplacement [ - unresolvedReplacement := anUnresolvedReplacement -] diff --git a/src/XML-Parser/DTDExternalSubsetParserDriver.class.st b/src/XML-Parser/DTDExternalSubsetParserDriver.class.st deleted file mode 100644 index 33e25ebf2..000000000 --- a/src/XML-Parser/DTDExternalSubsetParserDriver.class.st +++ /dev/null @@ -1,121 +0,0 @@ -" -This class is used by SAXParserDriver for parsing the external subset of a DTD. -" -Class { - #name : #DTDExternalSubsetParserDriver, - #superclass : #DTDSubsetParserDriver, - #instVars : [ - 'saxDriver', - 'documentURI' - ], - #category : #'XML-Parser-Drivers' -} - -{ #category : #'instance creation' } -DTDExternalSubsetParserDriver class >> saxDriver: aSAXDriver documentURI: anExternalSubsetURIString [ - ^ self new - setSAXDriver: aSAXDriver - documentURI: anExternalSubsetURIString -] - -{ #category : #testing } -DTDExternalSubsetParserDriver >> decodesCharacters [ - ^ self saxDriver decodesCharacters -] - -{ #category : #accessing } -DTDExternalSubsetParserDriver >> documentURI [ - ^ documentURI -] - -{ #category : #accessing } -DTDExternalSubsetParserDriver >> externalEntityResolver [ - ^ self saxDriver externalEntityResolver -] - -{ #category : #testing } -DTDExternalSubsetParserDriver >> hasExternalSubset [ - ^ true -] - -{ #category : #testing } -DTDExternalSubsetParserDriver >> hasParameterEntityReferences [ - ^ self saxDriver hasParameterEntityReferences -] - -{ #category : #testing } -DTDExternalSubsetParserDriver >> hasSkippedParameterEntityReferences [ - ^ self saxDriver hasSkippedParameterEntityReferences -] - -{ #category : #accessing } -DTDExternalSubsetParserDriver >> haveParameterEntityReferences [ - self saxDriver haveParameterEntityReferences -] - -{ #category : #accessing } -DTDExternalSubsetParserDriver >> haveSkippedParameterEntityReferences [ - self saxDriver haveSkippedParameterEntityReferences -] - -{ #category : #defaults } -DTDExternalSubsetParserDriver >> initialStateClass [ - ^ XMLExternalSubsetTextDeclarationState -] - -{ #category : #testing } -DTDExternalSubsetParserDriver >> isExternal [ - "Definition: An external markup declaration is defined as a markup - declaration occurring in the external subset or in a parameter entity - (external or internal, the latter being included because non-validating - processors are not required to read them)" - - ^ true -] - -{ #category : #testing } -DTDExternalSubsetParserDriver >> isStandalone [ - ^ self saxDriver isStandalone -] - -{ #category : #testing } -DTDExternalSubsetParserDriver >> isValidating [ - ^ self saxDriver isValidating -] - -{ #category : #accessing } -DTDExternalSubsetParserDriver >> maxEntityReplacementDepth [ - ^ self saxDriver maxEntityReplacementDepth -] - -{ #category : #testing } -DTDExternalSubsetParserDriver >> preservesUndeclaredEntityReferences [ - ^ self saxDriver preservesUndeclaredEntityReferences -] - -{ #category : #accessing } -DTDExternalSubsetParserDriver >> readLimit [ - ^ self externalEntityResolver externalSubsetReadLimit -] - -{ #category : #testing } -DTDExternalSubsetParserDriver >> replacesContentEntityReferences [ - ^ self saxDriver replacesContentEntityReferences -] - -{ #category : #testing } -DTDExternalSubsetParserDriver >> resolvesExternalEntities [ - ^ true -] - -{ #category : #accessing } -DTDExternalSubsetParserDriver >> saxDriver [ - ^ saxDriver -] - -{ #category : #initialization } -DTDExternalSubsetParserDriver >> setSAXDriver: aSAXDriver documentURI: anExternalSubsetURIString [ - saxDriver := aSAXDriver. - documentURI := anExternalSubsetURIString. - doctypeDefinition := aSAXDriver doctypeDefinition. -] diff --git a/src/XML-Parser/DTDInternalGeneralParsedEntity.class.st b/src/XML-Parser/DTDInternalGeneralParsedEntity.class.st deleted file mode 100644 index 611f7645f..000000000 --- a/src/XML-Parser/DTDInternalGeneralParsedEntity.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -This is a class for internal general parsed entities with replacements that can be inserted into documents. -" -Class { - #name : #DTDInternalGeneralParsedEntity, - #superclass : #DTDInternalParsedEntity, - #category : #'XML-Parser-DTD' -} diff --git a/src/XML-Parser/DTDInternalParameterParsedEntity.class.st b/src/XML-Parser/DTDInternalParameterParsedEntity.class.st deleted file mode 100644 index 9cb876d08..000000000 --- a/src/XML-Parser/DTDInternalParameterParsedEntity.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -This is a class for internal parameter parsed entities with replacements that can be inserted into documents. -" -Class { - #name : #DTDInternalParameterParsedEntity, - #superclass : #DTDInternalParsedEntity, - #category : #'XML-Parser-DTD' -} - -{ #category : #testing } -DTDInternalParameterParsedEntity >> isParameter [ - ^ true -] diff --git a/src/XML-Parser/DTDInternalParsedEntity.class.st b/src/XML-Parser/DTDInternalParsedEntity.class.st deleted file mode 100644 index 211acc6cd..000000000 --- a/src/XML-Parser/DTDInternalParsedEntity.class.st +++ /dev/null @@ -1,54 +0,0 @@ -" -This is an abstract base class for internal parsed entities with replacements that can be inserted into an XML document. -" -Class { - #name : #DTDInternalParsedEntity, - #superclass : #DTDParsedEntity, - #instVars : [ - 'replacement' - ], - #category : #'XML-Parser-DTD' -} - -{ #category : #'instance creation' } -DTDInternalParsedEntity class >> name: aName replacement: aReplacementString [ - ^ self - name: aName - replacement: aReplacementString - uri: '' -] - -{ #category : #'instance creation' } -DTDInternalParsedEntity class >> name: aName replacement: aReplacementString uri: aURIString [ - ^ self new - setName: aName - replacement: aReplacementString - uri: aURIString -] - -{ #category : #testing } -DTDInternalParsedEntity >> hasReplacement [ - ^ self replacement notEmpty -] - -{ #category : #accessing } -DTDInternalParsedEntity >> replacement [ - ^ replacement ifNil: [replacement := ''] -] - -{ #category : #accessing } -DTDInternalParsedEntity >> replacement: aReplacementString [ - replacement := aReplacementString -] - -{ #category : #accessing } -DTDInternalParsedEntity >> replacementStream [ - ^ self replacement readStream -] - -{ #category : #initialization } -DTDInternalParsedEntity >> setName: aName replacement: aReplacementString uri: aURIString [ - name := aName. - replacement := aReplacementString. - uri := aURIString. -] diff --git a/src/XML-Parser/DTDLiteralContentModelParser.class.st b/src/XML-Parser/DTDLiteralContentModelParser.class.st deleted file mode 100644 index 40209f97e..000000000 --- a/src/XML-Parser/DTDLiteralContentModelParser.class.st +++ /dev/null @@ -1,16 +0,0 @@ -" -This class parses literal ""ANY"" and ""EMPTY"" element content models and returns XMLElementValidators accepting any content or no content (not even whitespace, comments, or PIs). -" -Class { - #name : #DTDLiteralContentModelParser, - #superclass : #DTDContentModelParser, - #category : #'XML-Parser-DTD' -} - -{ #category : #parsing } -DTDLiteralContentModelParser >> parse [ - "either ANY or EMPTY" - (contentModel at: 1) == $A - ifTrue: [^ XMLAnyElementValidator element: element] - ifFalse: [^ XMLEmptyElementValidator element: element] -] diff --git a/src/XML-Parser/DTDMixedContentEnumerationListParser.class.st b/src/XML-Parser/DTDMixedContentEnumerationListParser.class.st deleted file mode 100644 index e51c8d771..000000000 --- a/src/XML-Parser/DTDMixedContentEnumerationListParser.class.st +++ /dev/null @@ -1,15 +0,0 @@ -" -This is a parser of mixed content lists in the form of ""(#PCDATA|one|two|...)*"". It assumes there is no whitespace around the ""|"" separated list values. -" -Class { - #name : #DTDMixedContentEnumerationListParser, - #superclass : #DTDEnumerationListParser, - #category : #'XML-Parser-DTD' -} - -{ #category : #private } -DTDMixedContentEnumerationListParser >> listEndOffset [ - ^ listString last == $* - ifTrue: [2] "')*' size" - ifFalse: [1] "')' size" -] diff --git a/src/XML-Parser/DTDMixedContentModelParser.class.st b/src/XML-Parser/DTDMixedContentModelParser.class.st deleted file mode 100644 index 66ed5b62a..000000000 --- a/src/XML-Parser/DTDMixedContentModelParser.class.st +++ /dev/null @@ -1,17 +0,0 @@ -" -This class parses mixed content declarations like ""(#PCDATA|one|two)*"" using a DTDEnumerationListParser and returns an XMLElementValidator accepting any sequence of PCDATA and the named elements in any order. -" -Class { - #name : #DTDMixedContentModelParser, - #superclass : #DTDContentModelParser, - #category : #'XML-Parser-DTD' -} - -{ #category : #parsing } -DTDMixedContentModelParser >> parse [ - ^ XMLMixedContentElementValidator - element: element - allowedContent: - (DTDMixedContentEnumerationListParser on: contentModel) - parse -] diff --git a/src/XML-Parser/DTDNotation.class.st b/src/XML-Parser/DTDNotation.class.st deleted file mode 100644 index 33b929f6d..000000000 --- a/src/XML-Parser/DTDNotation.class.st +++ /dev/null @@ -1,66 +0,0 @@ -" -A class for notation declarations. -" -Class { - #name : #DTDNotation, - #superclass : #Object, - #instVars : [ - 'name', - 'publicID', - 'systemID' - ], - #category : #'XML-Parser-DTD' -} - -{ #category : #'instance creation' } -DTDNotation class >> name: aName publicID: aPublicID [ - ^ self - name: aName - publicID: aPublicID - systemID: '' -] - -{ #category : #'instance creation' } -DTDNotation class >> name: aName publicID: aPublicID systemID: aSystemID [ - ^ self new - setName: aName - publicID: aPublicID - systemID: aSystemID -] - -{ #category : #accessing } -DTDNotation >> name [ - ^ name ifNil: [name := ''] -] - -{ #category : #accessing } -DTDNotation >> name: aName [ - name := aName -] - -{ #category : #accessing } -DTDNotation >> publicID [ - ^ publicID ifNil: [publicID := ''] -] - -{ #category : #accessing } -DTDNotation >> publicID: aPublicID [ - publicID := aPublicID -] - -{ #category : #initialization } -DTDNotation >> setName: aName publicID: aPublicID systemID: aSystemID [ - name := aName. - publicID := aPublicID. - systemID := aSystemID. -] - -{ #category : #accessing } -DTDNotation >> systemID [ - ^ systemID ifNil: [systemID := ''] -] - -{ #category : #accessing } -DTDNotation >> systemID: aSystemID [ - systemID := aSystemID -] diff --git a/src/XML-Parser/DTDNotationEnumerationListParser.class.st b/src/XML-Parser/DTDNotationEnumerationListParser.class.st deleted file mode 100644 index 97958fed7..000000000 --- a/src/XML-Parser/DTDNotationEnumerationListParser.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -This class parses notation attribute value lists in the form of ""NOTATION (one|two|...)"". It assumes there is no whitespace around the ""|"" separated list values. -" -Class { - #name : #DTDNotationEnumerationListParser, - #superclass : #DTDEnumerationListParser, - #category : #'XML-Parser-DTD' -} - -{ #category : #private } -DTDNotationEnumerationListParser >> listStartOffset [ - ^ 10 "'NOTATION (' size" -] diff --git a/src/XML-Parser/DTDParsedEntity.class.st b/src/XML-Parser/DTDParsedEntity.class.st deleted file mode 100644 index ea99463fa..000000000 --- a/src/XML-Parser/DTDParsedEntity.class.st +++ /dev/null @@ -1,30 +0,0 @@ -" -This is an abstract base class for parsed entities with replacements that can be inserted into an XML document. -" -Class { - #name : #DTDParsedEntity, - #superclass : #DTDEntity, - #category : #'XML-Parser-DTD' -} - -{ #category : #converting } -DTDParsedEntity >> asPushedBackEntity [ - ^ self isParameter - ifTrue: [XMLPushedBackParameterEntity entity: self] - ifFalse: [XMLPushedBackGeneralEntity entity: self] -] - -{ #category : #testing } -DTDParsedEntity >> hasReplacement [ - self subclassResponsibility -] - -{ #category : #accessing } -DTDParsedEntity >> replacement [ - self subclassResponsibility -] - -{ #category : #accessing } -DTDParsedEntity >> replacementStream [ - self subclassResponsibility -] diff --git a/src/XML-Parser/DTDResolvedExternalParsedEntityReplacement.class.st b/src/XML-Parser/DTDResolvedExternalParsedEntityReplacement.class.st deleted file mode 100644 index 6922891f6..000000000 --- a/src/XML-Parser/DTDResolvedExternalParsedEntityReplacement.class.st +++ /dev/null @@ -1,33 +0,0 @@ -" -This is an abstract class for resolved external entity replacements. -" -Class { - #name : #DTDResolvedExternalParsedEntityReplacement, - #superclass : #Object, - #category : #'XML-Parser-DTD' -} - -{ #category : #converting } -DTDResolvedExternalParsedEntityReplacement >> asString [ - ^ self contents -] - -{ #category : #accessing } -DTDResolvedExternalParsedEntityReplacement >> contents [ - self subclassResponsibility -] - -{ #category : #testing } -DTDResolvedExternalParsedEntityReplacement >> isEmpty [ - self subclassResponsibility -] - -{ #category : #testing } -DTDResolvedExternalParsedEntityReplacement >> notEmpty [ - ^ self isEmpty not -] - -{ #category : #accessing } -DTDResolvedExternalParsedEntityReplacement >> readStream [ - self subclassResponsibility -] diff --git a/src/XML-Parser/DTDStandaloneExternalAttributeDefinitionParser.class.st b/src/XML-Parser/DTDStandaloneExternalAttributeDefinitionParser.class.st deleted file mode 100644 index ca1979039..000000000 --- a/src/XML-Parser/DTDStandaloneExternalAttributeDefinitionParser.class.st +++ /dev/null @@ -1,19 +0,0 @@ -" -This class parses standalone externally defined ATTLIST attribute definitions and returns XMLAttributeValidators for them that disallow attributes needing further value normalization or substitution with default or fixed default values. -" -Class { - #name : #DTDStandaloneExternalAttributeDefinitionParser, - #superclass : #DTDAttributeDefinitionParser, - #category : #'XML-Parser-DTD-Standalone' -} - -{ #category : #private } -DTDStandaloneExternalAttributeDefinitionParser class >> attributeDefaultValidatorClassForPragma: aDefaultPragma [ - ^ (super attributeDefaultValidatorClassForPragma: aDefaultPragma) - standaloneExternalClass -] - -{ #category : #private } -DTDStandaloneExternalAttributeDefinitionParser >> attributeValidatorClassForType [ - ^ super attributeValidatorClassForType standaloneExternalClass -] diff --git a/src/XML-Parser/DTDStandaloneExternalElementContentModelParser.class.st b/src/XML-Parser/DTDStandaloneExternalElementContentModelParser.class.st deleted file mode 100644 index 1f7867fac..000000000 --- a/src/XML-Parser/DTDStandaloneExternalElementContentModelParser.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -This class parses standalone externally defined element content models and returns XMLElementValidators for them. Validators for content models that specify element content like ""(one|two+)"" won't treat whitespace as ignorable. -" -Class { - #name : #DTDStandaloneExternalElementContentModelParser, - #superclass : #DTDElementContentModelParser, - #category : #'XML-Parser-DTD-Standalone' -} - -{ #category : #defaults } -DTDStandaloneExternalElementContentModelParser >> elementValidatorClass [ - ^ XMLStandaloneExternalDFAElementContentElementValidator -] diff --git a/src/XML-Parser/DTDStandaloneExternalExternalGeneralParsedEntity.class.st b/src/XML-Parser/DTDStandaloneExternalExternalGeneralParsedEntity.class.st deleted file mode 100644 index ad3a6c337..000000000 --- a/src/XML-Parser/DTDStandaloneExternalExternalGeneralParsedEntity.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -This is a class for standalone externally defined external general entities that cannot be referenced in documents. -" -Class { - #name : #DTDStandaloneExternalExternalGeneralParsedEntity, - #superclass : #DTDExternalGeneralParsedEntity, - #category : #'XML-Parser-DTD-Standalone' -} - -{ #category : #testing } -DTDStandaloneExternalExternalGeneralParsedEntity >> isStandaloneExternal [ - ^ true -] diff --git a/src/XML-Parser/DTDStandaloneExternalInternalGeneralParsedEntity.class.st b/src/XML-Parser/DTDStandaloneExternalInternalGeneralParsedEntity.class.st deleted file mode 100644 index 675249cd4..000000000 --- a/src/XML-Parser/DTDStandaloneExternalInternalGeneralParsedEntity.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -This is a class for standalone externally defined external general entities that cannot be referenced in documents except in ATTLIST attribute declaration default values. -" -Class { - #name : #DTDStandaloneExternalInternalGeneralParsedEntity, - #superclass : #DTDInternalGeneralParsedEntity, - #category : #'XML-Parser-DTD-Standalone' -} - -{ #category : #testing } -DTDStandaloneExternalInternalGeneralParsedEntity >> isStandaloneExternal [ - ^ true -] diff --git a/src/XML-Parser/DTDStaticExternalEntityResolver.class.st b/src/XML-Parser/DTDStaticExternalEntityResolver.class.st deleted file mode 100644 index 82f3275da..000000000 --- a/src/XML-Parser/DTDStaticExternalEntityResolver.class.st +++ /dev/null @@ -1,136 +0,0 @@ -" -This class is a resolver that maps entity URIs to string replacements so resolution can be done without HTTP or file access. Used during testing. -" -Class { - #name : #DTDStaticExternalEntityResolver, - #superclass : #DTDExternalEntityResolver, - #instVars : [ - 'externalEntities' - ], - #category : #'XML-Parser-DTD' -} - -{ #category : #'instance creation' } -DTDStaticExternalEntityResolver class >> externalEntities: anAssociationCollection [ - ^ self new externalEntities: anAssociationCollection -] - -{ #category : #private } -DTDStaticExternalEntityResolver >> errorMaxExternalEntitySize: aMaxSize exceededByURI: anXMLURIOrURIString [ - XMLLimitException - formatSignal: 'Entity exceeds max size of {1} bytes: {2}' - with: aMaxSize - with: anXMLURIOrURIString asString -] - -{ #category : #private } -DTDStaticExternalEntityResolver >> errorUnresolvableExternalEntityURI: anXMLURIOrURIString [ - XMLParserException - formatSignal: 'Unresolvable external entity URI: {1}' - with: anXMLURIOrURIString asString -] - -{ #category : #accessing } -DTDStaticExternalEntityResolver >> externalEntities [ - ^ externalEntities ifNil: [externalEntities := Dictionary new] -] - -{ #category : #accessing } -DTDStaticExternalEntityResolver >> externalEntities: anAssociationCollection [ - self hasExternalEntities - ifTrue: [self removeExternalEntities]. - anAssociationCollection associationsDo: [:each | - self - externalEntityAtURI: each key - put: each value]. -] - -{ #category : #accessing } -DTDStaticExternalEntityResolver >> externalEntityAtURI: anXMLURIOrURIString [ - ^ self - externalEntityAtURI: anXMLURIOrURIString asXMLURI - ifAbsent: [''] -] - -{ #category : #accessing } -DTDStaticExternalEntityResolver >> externalEntityAtURI: anXMLURIOrURIString ifAbsent: aBlock [ - ^ self externalEntities - at: anXMLURIOrURIString asXMLURI - ifAbsent: aBlock -] - -{ #category : #accessing } -DTDStaticExternalEntityResolver >> externalEntityAtURI: anXMLURIOrURIString ifAbsentPut: aBlock [ - ^ self externalEntities - at: anXMLURIOrURIString asXMLURI - ifAbsentPut: aBlock -] - -{ #category : #accessing } -DTDStaticExternalEntityResolver >> externalEntityAtURI: anXMLURIOrURIString put: aReplacement [ - ^ self externalEntities - at: anXMLURIOrURIString asXMLURI - put: aReplacement -] - -{ #category : #testing } -DTDStaticExternalEntityResolver >> hasExternalEntities [ - ^ self externalEntities notEmpty -] - -{ #category : #testing } -DTDStaticExternalEntityResolver >> includesExternalEntityURI: anXMLURIOrURIString [ - ^ self externalEntities includesKey: anXMLURIOrURIString asXMLURI -] - -{ #category : #copying } -DTDStaticExternalEntityResolver >> postCopy [ - super postCopy. - - externalEntities - ifNotNil: [externalEntities := externalEntities copy]. -] - -{ #category : #removing } -DTDStaticExternalEntityResolver >> removeExternalEntities [ - self externalEntities removeAll -] - -{ #category : #removing } -DTDStaticExternalEntityResolver >> removeExternalEntityURI: anXMLURIOrURIString [ - ^ self externalEntities removeKey: anXMLURIOrURIString asXMLURI -] - -{ #category : #removing } -DTDStaticExternalEntityResolver >> removeExternalEntityURI: anXMLURIOrURIString ifAbsent: aBlock [ - ^ self externalEntities - removeKey: anXMLURIOrURIString asXMLURI - ifAbsent: aBlock -] - -{ #category : #resolving } -DTDStaticExternalEntityResolver >> resolveExternalEntityURI: anXMLURIOrURIString upToLimit: aMaxSize [ - | replacement | - - replacement := - self - externalEntityAtURI: anXMLURIOrURIString - ifAbsent: [ - self errorUnresolvableExternalEntityURI: anXMLURIOrURIString]. - - (aMaxSize notNil - and: [replacement size > aMaxSize]) - ifTrue: [ - self - errorMaxExternalEntitySize: aMaxSize - exceededByURI: anXMLURIOrURIString]. - - ^ DTDUndecodedResolvedExternalParsedEntityReplacement rawContents: replacement. -] - -{ #category : #resolving } -DTDStaticExternalEntityResolver >> streamResolveExternalEntityURI: anXMLURIOrURIString upToLimit: aMaxSize [ - ^ (self - resolveExternalEntityURI: anXMLURIOrURIString - upToLimit: aMaxSize) readStream -] diff --git a/src/XML-Parser/DTDSubsetParserDriver.class.st b/src/XML-Parser/DTDSubsetParserDriver.class.st deleted file mode 100644 index db30e6d36..000000000 --- a/src/XML-Parser/DTDSubsetParserDriver.class.st +++ /dev/null @@ -1,364 +0,0 @@ -" -An abstract class for handling internal and external DTD subset events. -" -Class { - #name : #DTDSubsetParserDriver, - #superclass : #XMLParserDriver, - #instVars : [ - 'doctypeDefinition' - ], - #category : #'XML-Parser-Drivers' -} - -{ #category : #accessing } -DTDSubsetParserDriver >> doctypeDefinition [ - ^ doctypeDefinition -] - -{ #category : #private } -DTDSubsetParserDriver >> errorImproperParameterEntityNesting [ - XMLValidationException signal: - 'Improper nesting of parameter entity replacement within DTD subset' -] - -{ #category : #private } -DTDSubsetParserDriver >> errorInvalidUndeclaredGeneralEntityReference: aName [ - XMLValidationException - formatSignal: 'Undeclared general entity reference &{1};' - with: aName -] - -{ #category : #private } -DTDSubsetParserDriver >> errorInvalidUndeclaredParameterEntityReference: aName [ - XMLValidationException - formatSignal: 'Undeclared parameter entity reference %{1};' - with: aName -] - -{ #category : #private } -DTDSubsetParserDriver >> errorMultipleDeclarationsForElement: aName [ - XMLValidationException - formatSignal: 'Multiple declarations for <{1}> element' - with: aName -] - -{ #category : #private } -DTDSubsetParserDriver >> errorMultipleDeclarationsForNotation: aName [ - "Unlike redundant entity declarations which are just ignored, - redundant notation declarations are invalid" - XMLValidationException - formatSignal: 'Multiple declarations for notation "{1}"' - with: aName -] - -{ #category : #private } -DTDSubsetParserDriver >> errorReferenceToStandaloneExternalEntity: anEntity [ - XMLValidationException - formatSignal: - 'Internal reference to externally defined ', - 'entity {1} in standalone="yes" document' - with: anEntity asReference -] - -{ #category : #private } -DTDSubsetParserDriver >> errorUndeclaredGeneralEntityReference: aName [ - XMLWellFormednessException - formatSignal: 'Undeclared general entity reference &{1};' - with: aName -] - -{ #category : #accessing } -DTDSubsetParserDriver >> externalEntityResolver [ - self subclassResponsibility -] - -{ #category : #'handling - dtd' } -DTDSubsetParserDriver >> handleAttributeDeclaration: anElement name: anAttribute type: aType defaultPragma: aDefaultPragma defaultValue: aDefaultValue [ - | newAttributeValidator | - - self mustSkipEntityAndAttributeDeclarations - ifTrue: [^ self]. - - newAttributeValidator := - self isStandaloneExternal - ifTrue: [ - self doctypeDefinition - addStandaloneExternalValidatorForAttributeIn: anElement - named: anAttribute - type: aType - defaultPragma: aDefaultPragma - defaultValue: aDefaultValue] - ifFalse: [ - self doctypeDefinition - addValidatorForAttributeIn: anElement - named: anAttribute - type: aType - defaultPragma: aDefaultPragma - defaultValue: aDefaultValue]. - - (self isValidating - and: [newAttributeValidator notNil]) - ifTrue: [newAttributeValidator validateAttributeDeclaration]. -] - -{ #category : #'handling - dtd' } -DTDSubsetParserDriver >> handleElementDeclaration: aName contentModel: aContentModel [ - | newElementValidator | - - newElementValidator := - self isStandaloneExternal - ifTrue: [ - self doctypeDefinition - addStandaloneExternalValidatorForElement: aName - contentModel: aContentModel] - ifFalse: [ - self doctypeDefinition - addValidatorForElement: aName - contentModel: aContentModel]. - - self isValidating - ifTrue: [ - newElementValidator - ifNil: [self errorMultipleDeclarationsForElement: aName]. - newElementValidator validateElementDeclaration]. -] - -{ #category : #'handling - dtd' } -DTDSubsetParserDriver >> handleGeneralEntityDeclaration: aName publicID: aPublicID systemID: aSystemID ndata: aNotation [ - self mustSkipEntityAndAttributeDeclarations - ifTrue: [^ self]. - - aNotation isEmpty - ifTrue: [ - self resolvesExternalEntities - ifTrue: [ - self isStandaloneExternal - ifTrue: [ - self doctypeDefinition - addStandaloneExternalExternalGeneralEntity: aName - resolver: self externalEntityResolver - publicID: aPublicID - systemID: aSystemID - baseURI: self baseURI] - ifFalse: [ - self doctypeDefinition - addExternalGeneralEntity: aName - resolver: self externalEntityResolver - publicID: aPublicID - systemID: aSystemID - baseURI: self baseURI]] - ifFalse: [ - self isValidating - ifTrue: [ - self doctypeDefinition - addUnresolvableExternalGeneralEntity: aName]]] - ifFalse: [ - self doctypeDefinition - addUnparsedEntity: aName - publicID: aPublicID - systemID: aSystemID - ndata: aNotation]. -] - -{ #category : #'handling - dtd' } -DTDSubsetParserDriver >> handleGeneralEntityDeclaration: aName replacement: aReplacement [ - self mustSkipEntityAndAttributeDeclarations - ifTrue: [^ self]. - - self isStandaloneExternal - ifTrue: [ - self doctypeDefinition - addStandaloneExternalInternalGeneralEntity: aName - replacement: aReplacement - baseURI: self baseURI] - ifFalse: [ - self doctypeDefinition - addInternalGeneralEntity: aName - replacement: aReplacement - baseURI: self baseURI]. -] - -{ #category : #handling } -DTDSubsetParserDriver >> handleGeneralEntityReference: aName [ - | entity | - - entity := - self doctypeDefinition - generalEntityAt: aName - ifAbsent: [ - "WFC: In a document without any DTD, a document with only an - internal DTD subset which contains no parameter entity references, - or a document with ''standalone='yes''', for an entity reference - (general) that does not occur within the external subset or a - parameter entity (meaning DTD 'external')" - self isExternal - ifFalse: [ - ((self hasExternalSubset not - and: [self hasParameterEntityReferences not]) - or: [self isStandalone]) - ifTrue: [self errorUndeclaredGeneralEntityReference: aName]]. - "all general entity refs must be declared when validating" - self isValidating - ifTrue: [self errorInvalidUndeclaredGeneralEntityReference: aName]. - ^ nil]. - - "'VC: Standalone Document Declaration - The standalone document declaration MUST have the value 'no' if any - external markup declarations contain declarations of: - ... - entities ... if references to those entities appear in the document' - LibXML2 doesn't flag these at all, and Xerces only does for references - in the content, but the specification says in the 'document', so we - consider all non-external references, even inside the DTD internal subset" - (entity isStandaloneExternal - and: [self isValidating - and: [self isExternal not]]) - ifTrue: [self errorReferenceToStandaloneExternalEntity: entity]. - - ^ entity. -] - -{ #category : #'handling - dtd' } -DTDSubsetParserDriver >> handleImproperParameterEntityNesting [ - "this is a validity constraint and is only checked when validating" - self isValidating - ifTrue: [self errorImproperParameterEntityNesting] -] - -{ #category : #'handling - dtd' } -DTDSubsetParserDriver >> handleNotationDeclaration: aName publicID: aPublicID systemID: aSystemID [ - (self doctypeDefinition - addNotation: aName - publicID: aPublicID - systemID: aSystemID) - ifNil: [ - self isValidating - ifTrue: [self errorMultipleDeclarationsForNotation: aName]] -] - -{ #category : #'handling - dtd' } -DTDSubsetParserDriver >> handleParameterEntityDeclaration: aName publicID: aPublicID systemID: aSystemID [ - self mustSkipEntityAndAttributeDeclarations - ifFalse: [ - self resolvesExternalEntities - ifTrue: [ - self doctypeDefinition - addExternalParameterEntity: aName - resolver: self externalEntityResolver - publicID: aPublicID - systemID: aSystemID - baseURI: self baseURI] - ifFalse: [ - self isValidating - ifTrue: [ - self doctypeDefinition - addUnresolvableExternalParameterEntity: aName]]] -] - -{ #category : #'handling - dtd' } -DTDSubsetParserDriver >> handleParameterEntityDeclaration: aName replacement: aReplacement [ - self mustSkipEntityAndAttributeDeclarations - ifFalse: [ - self doctypeDefinition - addInternalParameterEntity: aName - replacement:aReplacement - baseURI: self baseURI] -] - -{ #category : #'handling - dtd' } -DTDSubsetParserDriver >> handleParameterEntityReference: aName [ - self haveParameterEntityReferences. - ^ self doctypeDefinition - parameterEntityAt: aName - ifAbsent: [ - self isValidating - ifTrue: [self errorInvalidUndeclaredParameterEntityReference: aName]. - self haveSkippedParameterEntityReferences. - nil] -] - -{ #category : #handling } -DTDSubsetParserDriver >> handleParseError: aString [ - XMLWellFormednessException signal: aString -] - -{ #category : #testing } -DTDSubsetParserDriver >> hasExternalSubset [ - self subclassResponsibility -] - -{ #category : #testing } -DTDSubsetParserDriver >> hasParameterEntityReferences [ - self subclassResponsibility -] - -{ #category : #testing } -DTDSubsetParserDriver >> hasSkippedParameterEntityReferences [ - self subclassResponsibility -] - -{ #category : #accessing } -DTDSubsetParserDriver >> haveParameterEntityReferences [ - self subclassResponsibility -] - -{ #category : #accessing } -DTDSubsetParserDriver >> haveSkippedParameterEntityReferences [ - self subclassResponsibility -] - -{ #category : #testing } -DTDSubsetParserDriver >> isExternal [ - "Definition: An external markup declaration is defined as a markup - declaration occurring in the external subset or in a parameter entity - (external or internal, the latter being included because non-validating - processors are not required to read them)" - - self subclassResponsibility -] - -{ #category : #testing } -DTDSubsetParserDriver >> isStandalone [ - self subclassResponsibility -] - -{ #category : #testing } -DTDSubsetParserDriver >> isStandaloneExternal [ - ^ self isStandalone - and: [self isExternal] -] - -{ #category : #testing } -DTDSubsetParserDriver >> isValidating [ - self subclassResponsibility -] - -{ #category : #accessing } -DTDSubsetParserDriver >> maxEntityReplacementDepth [ - self subclassResponsibility -] - -{ #category : #testing } -DTDSubsetParserDriver >> mustSkipEntityAndAttributeDeclarations [ - "'Except when standalone=''yes'', they (non-validating parsers) MUST NOT - process entity declarations or attribute-list declarations encountered - after a reference to a parameter entity that is not read...'" - ^ self isValidating not - and: [self isStandalone not - and: [self hasSkippedParameterEntityReferences]] -] - -{ #category : #testing } -DTDSubsetParserDriver >> preservesUndeclaredEntityReferences [ - self subclassResponsibility -] - -{ #category : #testing } -DTDSubsetParserDriver >> replacesContentEntityReferences [ - self subclassResponsibility -] - -{ #category : #testing } -DTDSubsetParserDriver >> resolvesExternalEntities [ - self subclassResponsibility -] diff --git a/src/XML-Parser/DTDUndecodedResolvedExternalParsedEntityReplacement.class.st b/src/XML-Parser/DTDUndecodedResolvedExternalParsedEntityReplacement.class.st deleted file mode 100644 index 3e19679ce..000000000 --- a/src/XML-Parser/DTDUndecodedResolvedExternalParsedEntityReplacement.class.st +++ /dev/null @@ -1,69 +0,0 @@ -" -This class stores the undecoded resolved replacement of an external parsed entity as well as its likely encoding. -" -Class { - #name : #DTDUndecodedResolvedExternalParsedEntityReplacement, - #superclass : #DTDResolvedExternalParsedEntityReplacement, - #instVars : [ - 'rawContents', - 'encoding' - ], - #category : #'XML-Parser-DTD' -} - -{ #category : #'instance creation' } -DTDUndecodedResolvedExternalParsedEntityReplacement class >> rawContents: aString [ - ^ self - rawContents: aString - encoding: '' -] - -{ #category : #'instance creation' } -DTDUndecodedResolvedExternalParsedEntityReplacement class >> rawContents: aString encoding: anEncodingName [ - ^ self new - setRawContents: aString - encoding: anEncodingName -] - -{ #category : #accessing } -DTDUndecodedResolvedExternalParsedEntityReplacement >> contents [ - ^ self readStream upToEnd -] - -{ #category : #accessing } -DTDUndecodedResolvedExternalParsedEntityReplacement >> encoding [ - ^ encoding -] - -{ #category : #testing } -DTDUndecodedResolvedExternalParsedEntityReplacement >> isEmpty [ - ^ self rawContents isEmpty -] - -{ #category : #printing } -DTDUndecodedResolvedExternalParsedEntityReplacement >> printOn: aStream [ - super printOn: aStream. - - aStream - nextPut: $(; - nextPutAll: self encoding; - nextPut: $). -] - -{ #category : #accessing } -DTDUndecodedResolvedExternalParsedEntityReplacement >> rawContents [ - ^ rawContents -] - -{ #category : #accessing } -DTDUndecodedResolvedExternalParsedEntityReplacement >> readStream [ - ^ XMLDecodingReadStreamAdapter - on: self rawContents readStream - streamConverter: self encoding asXMLStreamConverter -] - -{ #category : #initialization } -DTDUndecodedResolvedExternalParsedEntityReplacement >> setRawContents: aString encoding: anEncodingName [ - rawContents := aString. - encoding := anEncodingName. -] diff --git a/src/XML-Parser/DTDUnparsedEntity.class.st b/src/XML-Parser/DTDUnparsedEntity.class.st deleted file mode 100644 index 1c836f6b8..000000000 --- a/src/XML-Parser/DTDUnparsedEntity.class.st +++ /dev/null @@ -1,65 +0,0 @@ -" -A class for unparsed entities. These should never be directly referenced in content with the &name; syntax, but can be named in values of ENTITY and ENTITIES attributes. -" -Class { - #name : #DTDUnparsedEntity, - #superclass : #DTDEntity, - #instVars : [ - 'ndata', - 'publicID', - 'systemID' - ], - #category : #'XML-Parser-DTD' -} - -{ #category : #'instance creation' } -DTDUnparsedEntity class >> name: aName publicID: aPublicID systemID: aSystemID ndata: aNotationName [ - ^ self new - setName: aName - publicID: aPublicID - systemID: aSystemID - ndata: aNotationName -] - -{ #category : #testing } -DTDUnparsedEntity >> isUnparsed [ - ^ true -] - -{ #category : #accessing } -DTDUnparsedEntity >> ndata [ - ^ ndata ifNil: [ndata := ''] -] - -{ #category : #accessing } -DTDUnparsedEntity >> ndata: aNotationName [ - ndata := aNotationName -] - -{ #category : #accessing } -DTDUnparsedEntity >> publicID [ - ^ publicID ifNil: [publicID := ''] -] - -{ #category : #accessing } -DTDUnparsedEntity >> publicID: aPublicID [ - publicID := aPublicID -] - -{ #category : #initialization } -DTDUnparsedEntity >> setName: aName publicID: aPublicID systemID: aSystemID ndata: aNotationName [ - name := aName. - publicID := aPublicID. - systemID := aSystemID. - ndata := aNotationName. -] - -{ #category : #accessing } -DTDUnparsedEntity >> systemID [ - ^ systemID ifNil: [systemID := ''] -] - -{ #category : #accessing } -DTDUnparsedEntity >> systemID: aSystemID [ - systemID := aSystemID -] diff --git a/src/XML-Parser/DTDUnresolvableExternalGeneralParsedEntity.class.st b/src/XML-Parser/DTDUnresolvableExternalGeneralParsedEntity.class.st deleted file mode 100644 index d40d3ee70..000000000 --- a/src/XML-Parser/DTDUnresolvableExternalGeneralParsedEntity.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -This is a class for unresolvable external general parsed entities that lazily raises an error when #replacement or #replacementStream is sent, which would normally trigger resolution. -" -Class { - #name : #DTDUnresolvableExternalGeneralParsedEntity, - #superclass : #DTDUnresolvableExternalParsedEntity, - #category : #'XML-Parser-DTD' -} diff --git a/src/XML-Parser/DTDUnresolvableExternalParameterParsedEntity.class.st b/src/XML-Parser/DTDUnresolvableExternalParameterParsedEntity.class.st deleted file mode 100644 index af636bad0..000000000 --- a/src/XML-Parser/DTDUnresolvableExternalParameterParsedEntity.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -This is a class for unresolvable external parameter parsed entities that lazily raises an error when #replacement or #replacementStream is sent, which would normally trigger resolution. -" -Class { - #name : #DTDUnresolvableExternalParameterParsedEntity, - #superclass : #DTDUnresolvableExternalParsedEntity, - #category : #'XML-Parser-DTD' -} - -{ #category : #testing } -DTDUnresolvableExternalParameterParsedEntity >> isParameter [ - ^ true -] diff --git a/src/XML-Parser/DTDUnresolvableExternalParsedEntity.class.st b/src/XML-Parser/DTDUnresolvableExternalParsedEntity.class.st deleted file mode 100644 index fe8ea2cee..000000000 --- a/src/XML-Parser/DTDUnresolvableExternalParsedEntity.class.st +++ /dev/null @@ -1,38 +0,0 @@ -" -This is an abstract base class for unresolvable external parsed entities that lazily raises an error when #replacement or #replacementStream is sent, which would normally trigger resolution. -" -Class { - #name : #DTDUnresolvableExternalParsedEntity, - #superclass : #DTDParsedEntity, - #category : #'XML-Parser-DTD' -} - -{ #category : #private } -DTDUnresolvableExternalParsedEntity >> errorUnresolvableExternalEntity [ - XMLParserException - formatSignal: - 'External entity {1} can''t be resolved unless resolution is ', - 'enabled; use #resolvesExternalEntityReferences: before parsing ', - 'to enable' - with: self asReference -] - -{ #category : #testing } -DTDUnresolvableExternalParsedEntity >> hasReplacement [ - ^ true -] - -{ #category : #testing } -DTDUnresolvableExternalParsedEntity >> isExternal [ - ^ true -] - -{ #category : #accessing } -DTDUnresolvableExternalParsedEntity >> replacement [ - self errorUnresolvableExternalEntity -] - -{ #category : #accessing } -DTDUnresolvableExternalParsedEntity >> replacementStream [ - self errorUnresolvableExternalEntity -] diff --git a/src/XML-Parser/DTDUnresolvedExternalParsedEntityReplacement.class.st b/src/XML-Parser/DTDUnresolvedExternalParsedEntityReplacement.class.st deleted file mode 100644 index 9944d38ff..000000000 --- a/src/XML-Parser/DTDUnresolvedExternalParsedEntityReplacement.class.st +++ /dev/null @@ -1,87 +0,0 @@ -" -This class stores an entity resolver and the public ID, system ID, and base URI of an external entity so its replacement can be lazily resolved only if the entity is referenced. -" -Class { - #name : #DTDUnresolvedExternalParsedEntityReplacement, - #superclass : #Object, - #instVars : [ - 'resolver', - 'publicID', - 'systemID', - 'baseURI' - ], - #category : #'XML-Parser-DTD' -} - -{ #category : #'instance creation' } -DTDUnresolvedExternalParsedEntityReplacement class >> resolver: aResolver publicID: aPublicID systemID: aSystemID baseURI: aBaseURIString [ - ^ self new - setResolver: aResolver - publicID: aPublicID - systemID: aSystemID - baseURI: aBaseURIString -] - -{ #category : #accessing } -DTDUnresolvedExternalParsedEntityReplacement >> baseURI [ - ^ baseURI ifNil: [baseURI := ''] -] - -{ #category : #printing } -DTDUnresolvedExternalParsedEntityReplacement >> printOn: aStream [ - super printOn: aStream. - - aStream nextPut: $(. - self publicID isEmpty - ifTrue: [aStream nextPutAll: 'SYSTEM'] - ifFalse: [ - aStream - nextPutAll: 'PUBLIC "'; - nextPutAll: self publicID; - nextPut: $"]. - - aStream - nextPutAll: ' "'; - nextPutAll: self systemID; - nextPutAll: '")'. -] - -{ #category : #accessing } -DTDUnresolvedExternalParsedEntityReplacement >> publicID [ - ^ publicID ifNil: [publicID := ''] -] - -{ #category : #resolving } -DTDUnresolvedExternalParsedEntityReplacement >> resolveForExternalEntity: anExternalEntity [ - | externalEntityURI | - - externalEntityURI := - self resolver - externalEntityURIFromPublicID: self publicID - systemID: self systemID - baseURI: self baseURI. - - anExternalEntity - resolvedReplacement: - (self resolver resolveExternalEntityURI: externalEntityURI); - uri: externalEntityURI asString; - unresolvedReplacement: nil. -] - -{ #category : #accessing } -DTDUnresolvedExternalParsedEntityReplacement >> resolver [ - ^ resolver ifNil: [resolver := DTDExternalEntityResolver default] -] - -{ #category : #initialization } -DTDUnresolvedExternalParsedEntityReplacement >> setResolver: aResolver publicID: aPublicID systemID: aSystemID baseURI: aBaseURIString [ - resolver := aResolver. - publicID := aPublicID. - systemID := aSystemID. - baseURI := aBaseURIString. -] - -{ #category : #accessing } -DTDUnresolvedExternalParsedEntityReplacement >> systemID [ - ^ systemID ifNil: [systemID := ''] -] diff --git a/src/XML-Parser/Error.extension.st b/src/XML-Parser/Error.extension.st deleted file mode 100644 index c35e1d0ba..000000000 --- a/src/XML-Parser/Error.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #Error } - -{ #category : #'*XML-Parser' } -Error >> isXMLParserException [ - ^ false -] diff --git a/src/XML-Parser/Object.extension.st b/src/XML-Parser/Object.extension.st deleted file mode 100644 index 1d3ec2e7b..000000000 --- a/src/XML-Parser/Object.extension.st +++ /dev/null @@ -1,21 +0,0 @@ -Extension { #name : #Object } - -{ #category : #'*XML-Parser' } -Object >> isXMLBinaryOrExternalStream [ - "Not every stream or stream-like object is a subclass of Stream, so this - must be defined here. - - At a minimum, these streams must accept binary objects (like SmallIntegers - and ByteArrays) when writing. When reading, they can return byte values - as SmallIntegers or Characters and collections of byte values as ByteArrays - or ByteStrings." - - ^ self isStream - and: [(self respondsTo: #isBinary) - and: [self isBinary]] -] - -{ #category : #'*XML-Parser' } -Object >> isXMLConvertingStreamAdapter [ - ^ false -] diff --git a/src/XML-Parser/SAX2ContentHandler.class.st b/src/XML-Parser/SAX2ContentHandler.class.st deleted file mode 100644 index 2f2873e04..000000000 --- a/src/XML-Parser/SAX2ContentHandler.class.st +++ /dev/null @@ -1,194 +0,0 @@ -" -This is a base class for SAX2 content handler classes that can be injected into SAX2Parser instances with #contentHandler: before parsing: - (SAX2Parser on: xmlStringOrStream) - contentHandler: MyContentHandlerClass new; - parseDocument. - -See SAX2Parser and SAXHandler for more info. -" -Class { - #name : #SAX2ContentHandler, - #superclass : #Object, - #instVars : [ - 'parser' - ], - #category : #'XML-Parser' -} - -{ #category : #'instance creation' } -SAX2ContentHandler class >> parser: aParser [ - ^ self new parser: aParser -] - -{ #category : #'handling - content' } -SAX2ContentHandler >> characters: aString [ - "Handles character data in an element, such as the 'test' in - 'test' or in the CDATA section ''. - - It may be sent multiple times for different sections of character data - in a single element if they're separated by other nodes or entity - references like in 'onetwo'. - - See ignorableWhitespace:" -] - -{ #category : #'handling - content' } -SAX2ContentHandler >> endDocument [ - "Handles the end of an XML document. No more handlers are invoked after this." -] - -{ #category : #'handling - content' } -SAX2ContentHandler >> endElement: aQualifiedName [ - "Handles the end of an element if a subclass doesn't implement - #endElement:prefix:uri:localName: or #endElement:prefix:uri:." -] - -{ #category : #'handling - content' } -SAX2ContentHandler >> endElement: aQualifiedName prefix: aPrefix uri: aURI [ - "Handles the end of an element if a subclass doesn't implement - #endElement:prefix:uri:localName:. By default it forwards to a simpler - handler, #endElement:. - - aQualifiedName - the full name, including any prefix, such as 'prefix:name' - aPrefix - the prefix of the qualified name or an empty string - aURI - the namespace URI of the element or an empty string" - - self endElement: aQualifiedName -] - -{ #category : #'handling - content' } -SAX2ContentHandler >> endElement: aQualifiedName prefix: aPrefix uri: aURI localName: aLocalName [ - "Handles the end of an element, either an end tag like '' or a - self-closed tag like ''. By default it forwards to a simpler handler, - #endElement:prefix:uri:. - - aQualifiedName - the full name, including any prefix, such as 'prefix:name' - aPrefix - the prefix of the qualified name or an empty string - aURI - the namespace URI of the element or an empty string - aLocalName - the local part of the qualified name" - - self - endElement: aQualifiedName - prefix: aPrefix - uri: aURI -] - -{ #category : #'handling - content' } -SAX2ContentHandler >> endPrefixMapping: aPrefix [ - "Handles the end of a namespace prefix/URI mapping when namespaces are - enabled. After, aPrefix (empty for the default namespace) will be either - unmapped or mapped to a different URI. The 'xml' prefix is predefined - and never unmapped." -] - -{ #category : #'handling - content' } -SAX2ContentHandler >> ignorableWhitespace: aString [ - "When validation is enabled and a DTD with element declarations is - present, this can be used to handle ignorable whitespace in elements - with 'element content' (meaning they can only contain other elements - and no PCDATA), such as between '' and '' - or between '' and '' in this sample: - ' - - - - - - ]> - - - any - - ' - - Not sent if validation is disabled or if there's no DTD with element - declarations." -] - -{ #category : #accessing } -SAX2ContentHandler >> parser [ - "Returns the SAX2Parser this handler was injected into" - - ^ parser -] - -{ #category : #accessing } -SAX2ContentHandler >> parser: aParser [ - parser := aParser -] - -{ #category : #'handling - content' } -SAX2ContentHandler >> processingInstruction: aTargetString data: aDataString [ - "Handles processing instructions like '', where 'name' is - the target and 'value' is the data. - - XML declarations may look like PIs but are different and are handled - with xmlVersion:encoding:standalone: instead." -] - -{ #category : #'handling - content' } -SAX2ContentHandler >> skippedEntity: anEntityName [ - "Sent when a general parsed entity reference like '&name;' is - unreplaced in content. Only sent when validation is turned off - or entity replacement is disabled." -] - -{ #category : #'handling - content' } -SAX2ContentHandler >> startDocument [ - "Handles the start of an XML document, the first handler invoked." -] - -{ #category : #'handling - content' } -SAX2ContentHandler >> startElement: aQualifiedName attributes: anAttributeDictionary [ - "Handles the start of an element if a subclass doesn't implement - #startElement:prefix:uri:localName:attributes: or - #startElement:prefix:uri:attributes:. - - aQualifiedName - the full name, including any prefix, such as 'prefix:name' - anAttributeDictionary - an XMLAttributeDictionary of attributes" -] - -{ #category : #'handling - content' } -SAX2ContentHandler >> startElement: aQualifiedName prefix: aPrefix uri: aURI attributes: anAttributeDictionary [ - "Handles the start of an element if a subclass doesn't implement - #startElement:prefix:uri:localName:attributes:. By default it forwards - to a simpler handler, #startElement:attributes:. - - aQualifiedName - the full name, including any prefix, such as 'prefix:name' - aPrefix - the prefix of the qualified name or an empty string - aURI - the namespace URI of the element or an empty string - anAttributeDictionary - an XMLAttributeDictionary of attributes" - - self - startElement: aQualifiedName - attributes: anAttributeDictionary -] - -{ #category : #'handling - content' } -SAX2ContentHandler >> startElement: aQualifiedName prefix: aPrefix uri: aURI localName: aLocalName attributes: anAttributeDictionary [ - "Handles the start of an element, either a start tag like '' or a - self-closed tag like ''. By default it forwards to a simpler handler, - #startElement:prefix:uri:attributes:. - - aQualifiedName - the full name, including any prefix, such as 'prefix:name' - aPrefix - the prefix of the qualified name or an empty string - aURI - the namespace URI of the element or an empty string - aLocalName - the local part of the qualified name - anAttributeDictionary - an XMLAttributeDictionary of attributes" - - self - startElement: aQualifiedName - prefix: aPrefix - uri: aURI - attributes: anAttributeDictionary -] - -{ #category : #'handling - content' } -SAX2ContentHandler >> startPrefixMapping: aPrefix uri: aURI [ - "Handles the start of a namespace prefix/URI mapping when namespaces are - enabled. The 'xml' prefix is predefined and never remapped. - - aPrefix - the prefix of the namespace (empty for the default namesapce) - aURI - the namespace URI" -] diff --git a/src/XML-Parser/SAX2DeclarationHandler.class.st b/src/XML-Parser/SAX2DeclarationHandler.class.st deleted file mode 100644 index 4614e1b35..000000000 --- a/src/XML-Parser/SAX2DeclarationHandler.class.st +++ /dev/null @@ -1,63 +0,0 @@ -" -This is a base class for SAX2 declaration handler classes that can be injected into SAX2Parser instances with #declarationHandler: before parsing: - (SAX2Parser on: xmlStringOrStream) - declarationHandler: MyDeclarationHandlerClass new; - parseDocument. - -See SAX2Parser and SAXHandler for more info. -" -Class { - #name : #SAX2DeclarationHandler, - #superclass : #Object, - #instVars : [ - 'parser' - ], - #category : #'XML-Parser' -} - -{ #category : #'instance creation' } -SAX2DeclarationHandler class >> parser: aParser [ - ^ self new parser: aParser -] - -{ #category : #'handling - declaration' } -SAX2DeclarationHandler >> attributeDeclaration: anElementName name: anAttributeName type: aType defaultPragma: aDefaultPragma defaultValue: aDefaultValue [ -] - -{ #category : #'handling - declaration' } -SAX2DeclarationHandler >> elementDeclaration: anElementName contentModel: aContentModel [ - -] - -{ #category : #'handling - declaration' } -SAX2DeclarationHandler >> generalEntityDeclaration: aName publicID: aPublicID systemID: aSystemID ndata: aNotationName [ -] - -{ #category : #'handling - declaration' } -SAX2DeclarationHandler >> generalEntityDeclaration: aName replacement: aReplacement [ -] - -{ #category : #'handling - declaration' } -SAX2DeclarationHandler >> notationDeclaration: aName publicID: aPublicID systemID: aSystemID [ - -] - -{ #category : #'handling - declaration' } -SAX2DeclarationHandler >> parameterEntityDeclaration: aName publicID: aPublicID systemID: aSystemID [ -] - -{ #category : #'handling - declaration' } -SAX2DeclarationHandler >> parameterEntityDeclaration: aName replacement: aReplacement [ -] - -{ #category : #accessing } -SAX2DeclarationHandler >> parser [ - "Returns the SAX2Parser this handler was injected into" - - ^ parser -] - -{ #category : #accessing } -SAX2DeclarationHandler >> parser: aParser [ - parser := aParser -] diff --git a/src/XML-Parser/SAX2ElementCharacterHandler.class.st b/src/XML-Parser/SAX2ElementCharacterHandler.class.st deleted file mode 100644 index 75d987369..000000000 --- a/src/XML-Parser/SAX2ElementCharacterHandler.class.st +++ /dev/null @@ -1,29 +0,0 @@ -" -This class is a SAX2ElementHandler that handles #characters: events. Sending #characters returns the complete character data of the element as a string. -" -Class { - #name : #SAX2ElementCharacterHandler, - #superclass : #SAX2ElementHandler, - #instVars : [ - 'characters' - ], - #category : #'XML-Parser' -} - -{ #category : #accessing } -SAX2ElementCharacterHandler >> characters [ - "This returns the combined #characters: events handled by the receiver - as a string." - - ^ characters ifNil: [characters := ''] -] - -{ #category : #'handling - content' } -SAX2ElementCharacterHandler >> characters: aString [ - "building the string this way is simpler and performs as well in tests - as using a write stream" - characters := - characters - ifNil: [aString] - ifNotNil: [characters, aString] -] diff --git a/src/XML-Parser/SAX2ElementHandler.class.st b/src/XML-Parser/SAX2ElementHandler.class.st deleted file mode 100644 index c824712db..000000000 --- a/src/XML-Parser/SAX2ElementHandler.class.st +++ /dev/null @@ -1,199 +0,0 @@ -" -This is a base class for SAX2 element handlers to be used with SAX2ElementParsers. - -SAX2ElementParsers use individual SAX2ElementHandlers to handle the #startElement*, #endElement*, and #characters: events of each element in the document. - -The parser can be accessed with #parser, and the parent element handler (if any) can be accessed with #parent. -" -Class { - #name : #SAX2ElementHandler, - #superclass : #Object, - #instVars : [ - 'parser', - 'parent', - 'parentFactory' - ], - #category : #'XML-Parser' -} - -{ #category : #parsing } -SAX2ElementHandler class >> parser: aParser [ - ^ self - parser: aParser - parent: aParser elementHandler - parentFactory: aParser elementHandlerFactory -] - -{ #category : #parsing } -SAX2ElementHandler class >> parser: aParser parent: anElementHandler parentFactory: anElementHandlerFactory [ - ^ self new - setParser: aParser - parent: anElementHandler - parentFactory: anElementHandlerFactory -] - -{ #category : #accessing } -SAX2ElementHandler >> ancestors [ - "Returns a list of all ancestor element handlers of the receiver." - - | ancestors | - - ancestors := XMLOrderedList new. - self ancestorsDo: [:each | ancestors addLast: each]. - ^ ancestors. -] - -{ #category : #enumerating } -SAX2ElementHandler >> ancestorsDo: aBlock [ - | ancestor | - - ancestor := self parent. - [ancestor notNil] - whileTrue: [ - aBlock value: ancestor. - ancestor := ancestor parent]. -] - -{ #category : #accessing } -SAX2ElementHandler >> characters [ - "This handler ignores #characters: events, so this always returns - an empty string." - - ^ '' -] - -{ #category : #'handling - content' } -SAX2ElementHandler >> characters: aString [ - "Handles character data in an element, such as the 'test' in - 'test' or in the CDATA section ''. - - It may be sent multiple times for different sections of character data - in a single element if they're separated by other nodes or entity - references like in 'onetwo'." -] - -{ #category : #accessing } -SAX2ElementHandler >> elementHandlerFactory [ - "Can be overridden to return a default factory to use by a factory - mapper when no other factory is mapped to the receiver." - - ^ nil -] - -{ #category : #'handling - content' } -SAX2ElementHandler >> endElement: aQualifiedName [ - "Handles the end of an element if a subclass doesn't implement - #endElement:prefix:uri:localName: or #endElement:prefix:uri:." -] - -{ #category : #'handling - content' } -SAX2ElementHandler >> endElement: aQualifiedName prefix: aPrefix uri: aURI [ - "Handles the end of an element if a subclass doesn't implement - #endElement:prefix:uri:localName:. By default it forwards to a simpler - handler, #endElement:. - - aQualifiedName - the full name, including any prefix, such as 'prefix:name' - aPrefix - the prefix of the qualified name or an empty string - aURI - the namespace URI of the element or an empty string" - - self endElement: aQualifiedName -] - -{ #category : #'handling - content' } -SAX2ElementHandler >> endElement: aQualifiedName prefix: aPrefix uri: aURI localName: aLocalName [ - "Handles the end of an element, either an end tag like '' or a - self-closed tag like ''. By default it forwards to a simpler handler, - #endElement:prefix:uri:. - - aQualifiedName - the full name, including any prefix, such as 'prefix:name' - aPrefix - the prefix of the qualified name or an empty string - aURI - the namespace URI of the element or an empty string - aLocalName - the local part of the qualified name" - - self - endElement: aQualifiedName - prefix: aPrefix - uri: aURI -] - -{ #category : #testing } -SAX2ElementHandler >> hasParent [ - "Returns true if the receiver has a parent element handler (meaning it's - not the root element handler)" - - ^ parent notNil -] - -{ #category : #accessing } -SAX2ElementHandler >> parent [ - "Returns the parent element handler or nil if there isn't one (if - the receiver is handling the root element)." - - ^ parent -] - -{ #category : #accessing } -SAX2ElementHandler >> parentFactory [ - "Returns the factory that created the receiver." - - ^ parentFactory -] - -{ #category : #accessing } -SAX2ElementHandler >> parser [ - "Returns the SAX2ElementParser" - - ^ parser -] - -{ #category : #initialization } -SAX2ElementHandler >> setParser: aParser parent: anElementHandler parentFactory: anElementHandlerFactory [ - parser := aParser. - parent := anElementHandler. - parentFactory := anElementHandlerFactory. -] - -{ #category : #'handling - content' } -SAX2ElementHandler >> startElement: aQualifiedName attributes: anAttributeDictionary [ - "Handles the start of an element if a subclass doesn't implement - #startElement:prefix:uri:localName:attributes: or - #startElement:prefix:uri:attributes:. - - aQualifiedName - the full name, including any prefix, such as 'prefix:name' - anAttributeDictionary - an XMLAttributeDictionary of attributes" -] - -{ #category : #'handling - content' } -SAX2ElementHandler >> startElement: aQualifiedName prefix: aPrefix uri: aURI attributes: anAttributeDictionary [ - "Handles the start of an element if a subclass doesn't implement - #startElement:prefix:uri:localName:attributes:. By default it forwards - to a simpler handler, #startElement:attributes:. - - aQualifiedName - the full name, including any prefix, such as 'prefix:name' - aPrefix - the prefix of the qualified name or an empty string - aURI - the namespace URI of the element or an empty string - anAttributeDictionary - an XMLAttributeDictionary of attributes" - - self - startElement: aQualifiedName - attributes: anAttributeDictionary -] - -{ #category : #'handling - content' } -SAX2ElementHandler >> startElement: aQualifiedName prefix: aPrefix uri: aURI localName: aLocalName attributes: anAttributeDictionary [ - "Handles the start of an element, either a start tag like '' or a - self-closed tag like ''. By default it forwards to a simpler handler, - #startElement:prefix:uri:attributes:. - - aQualifiedName - the full name, including any prefix, such as 'prefix:name' - aPrefix - the prefix of the qualified name or an empty string - aURI - the namespace URI of the element or an empty string - aLocalName - the local part of the qualified name - anAttributeDictionary - an XMLAttributeDictionary of attributes" - - self - startElement: aQualifiedName - prefix: aPrefix - uri: aURI - attributes: anAttributeDictionary -] diff --git a/src/XML-Parser/SAX2ElementHandlerFactory.class.st b/src/XML-Parser/SAX2ElementHandlerFactory.class.st deleted file mode 100644 index 637987597..000000000 --- a/src/XML-Parser/SAX2ElementHandlerFactory.class.st +++ /dev/null @@ -1,20 +0,0 @@ -" -This is a base class for element handler factories used by SAX2ElementParsers to create element handlers. Instances can be injected into a SAX2ElementParser with #elementHandlerFactory: before parsing. - -This factory just uses the default handler class SAX2ElementHandler for all elements. -" -Class { - #name : #SAX2ElementHandlerFactory, - #superclass : #Object, - #category : #'XML-Parser' -} - -{ #category : #accessing } -SAX2ElementHandlerFactory >> classForElement: aQualifiedName namespaceURI: aURI localName: aLocalName attributes: anAssociationCollection [ - ^ self elementHandlerClass -] - -{ #category : #accessing } -SAX2ElementHandlerFactory >> elementHandlerClass [ - ^ SAX2ElementHandler -] diff --git a/src/XML-Parser/SAX2ElementHandlerFactoryMapper.class.st b/src/XML-Parser/SAX2ElementHandlerFactoryMapper.class.st deleted file mode 100644 index bff57c568..000000000 --- a/src/XML-Parser/SAX2ElementHandlerFactoryMapper.class.st +++ /dev/null @@ -1,35 +0,0 @@ -" -This is a base class for mappers to map element handler objects to element handler factories. - -Requesting the factory for an element handler checks the handler's #elementHandlerFactory message first and then the mapper's own #elementHandlerFactory message which can be (and is) overridden in subclasses to return a default factory. - -When a SAX2ElementParser requests the factory for a new element handler, if none is found, it will reuse (inherit) the current factory. -" -Class { - #name : #SAX2ElementHandlerFactoryMapper, - #superclass : #Object, - #category : #'XML-Parser' -} - -{ #category : #accessing } -SAX2ElementHandlerFactoryMapper >> elementHandlerFactory [ - "Can be overridden to return a default element handler factory to use - if no other mapping is defined for it." - - ^ nil -] - -{ #category : #accessing } -SAX2ElementHandlerFactoryMapper >> factoryForElementHandler: anElementHandler [ - ^ self - factoryForElementHandler: anElementHandler - ifNone: [nil] -] - -{ #category : #accessing } -SAX2ElementHandlerFactoryMapper >> factoryForElementHandler: anElementHandler ifNone: aBlock [ - ^ anElementHandler elementHandlerFactory - ifNil: [ - self elementHandlerFactory - ifNil: [aBlock value]] -] diff --git a/src/XML-Parser/SAX2ElementParser.class.st b/src/XML-Parser/SAX2ElementParser.class.st deleted file mode 100644 index 4b07ad0a3..000000000 --- a/src/XML-Parser/SAX2ElementParser.class.st +++ /dev/null @@ -1,114 +0,0 @@ -" -This class is a SAX2Parser that uses individual SAX2ElementHandlers to handle the #startElement*, #endElement*, and #characters: events of each element in the document. All other content events are handled by a single SAX2ContentHandler as usual. - -Custom subclasses of SAX2ElementHandler can be mapped to element names, namespace URIs, and attributes using a SAX2PluggableElementHandlerFactory. Factories can be injected with #elementHandlerFactory: before parsing. -See #testParsingSampleBooks for an example. - -You can have multiple factories by mapping specific SAX2ElementHandlers to specific factories using a SAX2PluggableElementHandlerFactoryMapper, which can be injected with #elementHandlerFactoryMapper: before parsing. This can be used to create a finite-state machine, with the element handler instances being the states and the mapped factories being their transitions. -See #testParsingSamplePerson for an example. -" -Class { - #name : #SAX2ElementParser, - #superclass : #SAX2Parser, - #instVars : [ - 'elementHandler', - 'elementHandlerFactory', - 'elementHandlerFactoryMapper' - ], - #category : #'XML-Parser' -} - -{ #category : #'handling - content' } -SAX2ElementParser >> characters: aString [ - self elementHandler characters: aString -] - -{ #category : #defaults } -SAX2ElementParser >> defaultElementHandlerFactoryClass [ - ^ SAX2ElementHandlerFactory -] - -{ #category : #defaults } -SAX2ElementParser >> defaultElementHandlerFactoryMapperClass [ - ^ SAX2ElementHandlerFactoryMapper -] - -{ #category : #accessing } -SAX2ElementParser >> elementHandler [ - ^ elementHandler -] - -{ #category : #accessing } -SAX2ElementParser >> elementHandler: anElementHandler [ - elementHandler := anElementHandler -] - -{ #category : #accessing } -SAX2ElementParser >> elementHandlerFactory [ - ^ elementHandlerFactory -] - -{ #category : #accessing } -SAX2ElementParser >> elementHandlerFactory: anElementHandlerFactory [ - elementHandlerFactory := anElementHandlerFactory -] - -{ #category : #accessing } -SAX2ElementParser >> elementHandlerFactoryMapper [ - ^ elementHandlerFactoryMapper -] - -{ #category : #accessing } -SAX2ElementParser >> elementHandlerFactoryMapper: anElementHandlerFactoryMapper [ - elementHandlerFactoryMapper := anElementHandlerFactoryMapper -] - -{ #category : #'handling - content' } -SAX2ElementParser >> endElement: aQualifiedName prefix: aPrefix uri: aURI localName: aLocalName [ - | oldElementHandler | - - (oldElementHandler := self elementHandler) - endElement: aQualifiedName - prefix: aPrefix - uri: aURI - localName: aLocalName. - self - elementHandler: oldElementHandler parent; - elementHandlerFactory: oldElementHandler parentFactory. -] - -{ #category : #initialization } -SAX2ElementParser >> on: aStringOrStream [ - super on: aStringOrStream. - - elementHandlerFactory := self defaultElementHandlerFactoryClass new. - elementHandlerFactoryMapper := self defaultElementHandlerFactoryMapperClass new. -] - -{ #category : #'handling - content' } -SAX2ElementParser >> startElement: aQualifiedName prefix: aPrefix uri: aURI localName: aLocalName attributes: anAttributeDictionary [ - | newElementHandler | - - newElementHandler := - (self elementHandlerFactory - classForElement: aQualifiedName - namespaceURI: aURI - localName: aLocalName - attributes: anAttributeDictionary) - parser: self - parent: self elementHandler - parentFactory: self elementHandlerFactory. - self - elementHandler: newElementHandler; - elementHandlerFactory: - (self elementHandlerFactoryMapper - factoryForElementHandler: newElementHandler - ifNone: [self elementHandlerFactory]). - - newElementHandler - startElement: aQualifiedName - prefix: aPrefix - uri: aURI - localName: aLocalName - attributes: anAttributeDictionary. -] diff --git a/src/XML-Parser/SAX2LexicalHandler.class.st b/src/XML-Parser/SAX2LexicalHandler.class.st deleted file mode 100644 index 4b25aa850..000000000 --- a/src/XML-Parser/SAX2LexicalHandler.class.st +++ /dev/null @@ -1,87 +0,0 @@ -" -This is a base class for SAX2 lexical handler classes that can be injected into SAX2Parser instances with #lexicalHandler: before parsing: - (SAX2Parser on: xmlStringOrStream) - lexicalHandler: MyLexicalHandlerClass new; - parseDocument. - -See SAX2Parser and SAXHandler for more info. -" -Class { - #name : #SAX2LexicalHandler, - #superclass : #Object, - #instVars : [ - 'parser' - ], - #category : #'XML-Parser' -} - -{ #category : #'instance creation' } -SAX2LexicalHandler class >> parser: aParser [ - ^ self new parser: aParser -] - -{ #category : #'handling - lexical' } -SAX2LexicalHandler >> comment: aString [ - "Handles '' sections in documents." -] - -{ #category : #'handling - lexical' } -SAX2LexicalHandler >> endCData [ - "Sent after the character data of a '' section." -] - -{ #category : #'handling - lexical' } -SAX2LexicalHandler >> endDTD [ - -] - -{ #category : #'handling - lexical' } -SAX2LexicalHandler >> endEntity: anEntityName [ - "Handles the end of some general entity's replacement in content. - Not sent if the entity is undeclared or if content entity replacement - is disabled." -] - -{ #category : #accessing } -SAX2LexicalHandler >> parser [ - "Returns the SAX2Parser this handler was injected into" - - ^ parser -] - -{ #category : #accessing } -SAX2LexicalHandler >> parser: aParser [ - parser := aParser -] - -{ #category : #'handling - lexical' } -SAX2LexicalHandler >> startCData [ - "Sent before the character data of a '' section." -] - -{ #category : #'handling - lexical' } -SAX2LexicalHandler >> startDTD: aRootElementName publicID: aPublicID systemID: aSystemID [ - "Handles the start of a '' declaration. Any events - after this and until endDTD is sent are part of the internal subset - of the DTD. - - aRootElementName - the expected name of the document's root element - aPublicID - the public ID of the external DTD subset or an empty string - aSystemID - the URI where the external subset can be found or an empty string" -] - -{ #category : #'handling - lexical' } -SAX2LexicalHandler >> startEntity: anEntityName [ - "Handles the start of some general entity's replacement in content. - Not sent if the entity is undeclared or if content entity replacement - is disabled." -] - -{ #category : #'handling - lexical' } -SAX2LexicalHandler >> xmlVersion: aVersionFloat encoding: anEncoding standalone: aBoolean [ - "Handles the '' declaration of a document. - - aVersionFloat - the version of XML the document uses, usually 1.0 - anEncoding - the name of the encoding or an empty string - aBoolean - true if standalone='yes'" -] diff --git a/src/XML-Parser/SAX2Parser.class.st b/src/XML-Parser/SAX2Parser.class.st deleted file mode 100644 index 16e7c880e..000000000 --- a/src/XML-Parser/SAX2Parser.class.st +++ /dev/null @@ -1,326 +0,0 @@ -" -This class is a parser with an API like SAX 2.0, with separate SAX2ContentHandler, SAX2LexicalHandler, and SAX2DeclarationHandler classes that are subclassed unlike SAX 1.0 where a single, unified handler class is subclassed directly. Parsers can be created with #on: or other instance creation messages, and instances of the content, lexical, and declaration handlers can be injected before parsing with #contentHandler:, #lexicalHandler:, and #declarationHandler:, like this: - (SAX2Parser on: xmlStringOrStream) - contentHandler: MyContentHandlerClass new; - declarationHandler: MyDeclarationHandlerClass new; - lexicalHandler: MyLexicalHandlerClass new; - parseDocument. - -Each handler can access the SAX2Parser object with #parser and set the parsing result returned by #parseDocument with #parsingResult:. - -SAXHandler is not deprecated and can still be used if you prefer the SAX 1.0 style API. -" -Class { - #name : #SAX2Parser, - #superclass : #SAXHandler, - #instVars : [ - 'contentHandler', - 'lexicalHandler', - 'declarationHandler', - 'parsingResult' - ], - #category : #'XML-Parser' -} - -{ #category : #'private ' } -SAX2Parser class >> generateHandlerForwardingMethods [ - " - self generateHandlerForwardingMethods - " - - (Array - with: 'contentHandler' -> #'handling - content' - with: 'lexicalHandler' -> #'handling - lexical' - with: 'declarationHandler' -> #'handling - declaration') - do: [:handlerAccessorAndCategory | | handlerAccessor handlerCategory | - handlerAccessor := handlerAccessorAndCategory key. - handlerCategory := handlerAccessorAndCategory value. - - (SAXHandler selectorsInCategory: handlerCategory) do: [:each | | parsedMethod sourceStream | - parsedMethod := RBParser parseMethod: (SAXHandler sourceCodeAt: each). - (sourceStream := String new writeStream) - nextPutAll: parsedMethod selectorAndArgumentNames; - cr; - nextPutAll: ' self '; - nextPutAll: handlerAccessor. - 1 to: parsedMethod keywords size do: [:i | - parsedMethod keywords size > 1 - ifTrue: [ - sourceStream - cr; - tab; - tab] - ifFalse: [sourceStream space]. - sourceStream nextPutAll: (parsedMethod keywords at: i). - parsedMethod argumentNames - ifNotEmpty: [ - sourceStream - space; - nextPutAll: (parsedMethod argumentNames at: i)]]. - - self - compile: sourceStream contents - classified: handlerCategory]] -] - -{ #category : #'private ' } -SAX2Parser class >> generateMethodsInHandlerClasses [ - " - self generateMethodsInHandlerClasses - " - - (Array - with: SAX2ContentHandler -> #'handling - content' - with: SAX2LexicalHandler -> #'handling - lexical' - with: SAX2DeclarationHandler -> #'handling - declaration') - do: [:handlerClassAndCategory | | handlerClass handlerCategory | - handlerClass := handlerClassAndCategory key. - handlerCategory := handlerClassAndCategory value. - - (SAXHandler selectorsInCategory: handlerCategory) do: [:each | - handlerClass - compile: (SAXHandler sourceCodeAt: each) - classified: handlerCategory]] -] - -{ #category : #'handling - declaration' } -SAX2Parser >> attributeDeclaration: anElementName name: anAttributeName type: aType defaultPragma: aDefaultPragma defaultValue: aDefaultValue [ - self declarationHandler - attributeDeclaration: anElementName - name: anAttributeName - type: aType - defaultPragma: aDefaultPragma - defaultValue: aDefaultValue -] - -{ #category : #'handling - content' } -SAX2Parser >> characters: aString [ - self contentHandler characters: aString -] - -{ #category : #'handling - lexical' } -SAX2Parser >> comment: aString [ - self lexicalHandler comment: aString -] - -{ #category : #accessing } -SAX2Parser >> contentHandler [ - ^ contentHandler -] - -{ #category : #accessing } -SAX2Parser >> contentHandler: aContentHandler [ - (contentHandler := - aContentHandler ifNil: [self defaultContentHandlerClass new]) - parser: self -] - -{ #category : #accessing } -SAX2Parser >> declarationHandler [ - ^ declarationHandler -] - -{ #category : #accessing } -SAX2Parser >> declarationHandler: aDeclarationHandler [ - (declarationHandler := - aDeclarationHandler ifNil: [self defaultDeclarationHandlerClass new]) - parser: self -] - -{ #category : #defaults } -SAX2Parser >> defaultContentHandlerClass [ - ^ SAX2ContentHandler -] - -{ #category : #defaults } -SAX2Parser >> defaultDeclarationHandlerClass [ - ^ SAX2DeclarationHandler -] - -{ #category : #defaults } -SAX2Parser >> defaultLexicalHandlerClass [ - ^ SAX2LexicalHandler -] - -{ #category : #defaults } -SAX2Parser >> defaultParsingResult [ - "the default parsing result of SAXHandler" - ^ self -] - -{ #category : #'handling - declaration' } -SAX2Parser >> elementDeclaration: anElementName contentModel: aContentModel [ - self declarationHandler - elementDeclaration: anElementName - contentModel: aContentModel -] - -{ #category : #'handling - lexical' } -SAX2Parser >> endCData [ - self lexicalHandler endCData -] - -{ #category : #'handling - lexical' } -SAX2Parser >> endDTD [ - self lexicalHandler endDTD -] - -{ #category : #'handling - content' } -SAX2Parser >> endDocument [ - self contentHandler endDocument -] - -{ #category : #'handling - content' } -SAX2Parser >> endElement: aQualifiedName prefix: aPrefix uri: aURI localName: aLocalName [ - self contentHandler - endElement: aQualifiedName - prefix: aPrefix - uri: aURI - localName: aLocalName -] - -{ #category : #'handling - lexical' } -SAX2Parser >> endEntity: anEntityName [ - self lexicalHandler endEntity: anEntityName -] - -{ #category : #'handling - content' } -SAX2Parser >> endPrefixMapping: aPrefix [ - self contentHandler endPrefixMapping: aPrefix -] - -{ #category : #'handling - declaration' } -SAX2Parser >> generalEntityDeclaration: aName publicID: aPublicID systemID: aSystemID ndata: aNotationName [ - self declarationHandler - generalEntityDeclaration: aName - publicID: aPublicID - systemID: aSystemID - ndata: aNotationName -] - -{ #category : #'handling - declaration' } -SAX2Parser >> generalEntityDeclaration: aName replacement: aReplacement [ - self declarationHandler - generalEntityDeclaration: aName - replacement: aReplacement -] - -{ #category : #'handling - content' } -SAX2Parser >> ignorableWhitespace: aString [ - self contentHandler ignorableWhitespace: aString -] - -{ #category : #accessing } -SAX2Parser >> lexicalHandler [ - ^ lexicalHandler -] - -{ #category : #accessing } -SAX2Parser >> lexicalHandler: aLexicalHandler [ - (lexicalHandler := - aLexicalHandler ifNil: [self defaultLexicalHandlerClass new]) - parser: self -] - -{ #category : #'handling - declaration' } -SAX2Parser >> notationDeclaration: aName publicID: aPublicID systemID: aSystemID [ - self declarationHandler - notationDeclaration: aName - publicID: aPublicID - systemID: aSystemID -] - -{ #category : #initialization } -SAX2Parser >> on: aStringOrStream [ - super on: aStringOrStream. - - contentHandler := self defaultContentHandlerClass parser: self. - lexicalHandler := self defaultLexicalHandlerClass parser: self. - declarationHandler := self defaultDeclarationHandlerClass parser: self. - parsingResult := self defaultParsingResult. -] - -{ #category : #'handling - declaration' } -SAX2Parser >> parameterEntityDeclaration: aName publicID: aPublicID systemID: aSystemID [ - self declarationHandler - parameterEntityDeclaration: aName - publicID: aPublicID - systemID: aSystemID -] - -{ #category : #'handling - declaration' } -SAX2Parser >> parameterEntityDeclaration: aName replacement: aReplacement [ - self declarationHandler - parameterEntityDeclaration: aName - replacement: aReplacement -] - -{ #category : #parsing } -SAX2Parser >> parsingResult [ - ^ parsingResult -] - -{ #category : #parsing } -SAX2Parser >> parsingResult: anObject [ - parsingResult := anObject -] - -{ #category : #'handling - content' } -SAX2Parser >> processingInstruction: aTargetString data: aDataString [ - self contentHandler - processingInstruction: aTargetString - data: aDataString -] - -{ #category : #'handling - content' } -SAX2Parser >> skippedEntity: anEntityName [ - self contentHandler skippedEntity: anEntityName -] - -{ #category : #'handling - lexical' } -SAX2Parser >> startCData [ - self lexicalHandler startCData -] - -{ #category : #'handling - lexical' } -SAX2Parser >> startDTD: aRootElementName publicID: aPublicID systemID: aSystemID [ - self lexicalHandler - startDTD: aRootElementName - publicID: aPublicID - systemID: aSystemID -] - -{ #category : #'handling - content' } -SAX2Parser >> startDocument [ - self contentHandler startDocument -] - -{ #category : #'handling - content' } -SAX2Parser >> startElement: aQualifiedName prefix: aPrefix uri: aURI localName: aLocalName attributes: aDictionary [ - self contentHandler - startElement: aQualifiedName - prefix: aPrefix - uri: aURI - localName: aLocalName - attributes: aDictionary -] - -{ #category : #'handling - lexical' } -SAX2Parser >> startEntity: anEntityName [ - self lexicalHandler startEntity: anEntityName -] - -{ #category : #'handling - content' } -SAX2Parser >> startPrefixMapping: aPrefix uri: aURI [ - self contentHandler - startPrefixMapping: aPrefix - uri: aURI -] - -{ #category : #'handling - lexical' } -SAX2Parser >> xmlVersion: aVersionFloat encoding: anEncoding standalone: aBoolean [ - self lexicalHandler - xmlVersion: aVersionFloat - encoding: anEncoding - standalone: aBoolean -] diff --git a/src/XML-Parser/SAX2PluggableElementHandlerFactory.class.st b/src/XML-Parser/SAX2PluggableElementHandlerFactory.class.st deleted file mode 100644 index e936302b2..000000000 --- a/src/XML-Parser/SAX2PluggableElementHandlerFactory.class.st +++ /dev/null @@ -1,154 +0,0 @@ -" -This class is a pluggable element handler factory with an API like XMLPluggableElementFactory. Instances can be injected into a SAX2ElementParser with #elementHandlerFactory: before parsing. - -You can map combinations of element name, namespace URI, and attributes to specific element handler classes using the ""handling"" messages, and change the default element handler class used when there's no mapping with #elementHandlerClass:. - -Instances can be saved and reused for performance and safely modified after copying. -" -Class { - #name : #SAX2PluggableElementHandlerFactory, - #superclass : #SAX2ElementHandlerFactory, - #instVars : [ - 'elementClassMapper', - 'elementHandlerClass' - ], - #category : #'XML-Parser' -} - -{ #category : #accessing } -SAX2PluggableElementHandlerFactory >> classForElement: aQualifiedName namespaceURI: aURI localName: aLocalName attributes: anAssociationCollection [ - ^ elementClassMapper - classForElement: aQualifiedName - namespaceURI: aURI - attributes: anAssociationCollection - ifNone: [self elementHandlerClass] -] - -{ #category : #private } -SAX2PluggableElementHandlerFactory >> elementClassMapper [ - ^ elementClassMapper -] - -{ #category : #private } -SAX2PluggableElementHandlerFactory >> elementClassMapper: anElementClassMapper [ - elementClassMapper := anElementClassMapper -] - -{ #category : #defaults } -SAX2PluggableElementHandlerFactory >> elementClassMapperClass [ - ^ XMLBasicElementClassMapper -] - -{ #category : #accessing } -SAX2PluggableElementHandlerFactory >> elementHandlerClass [ - ^ elementHandlerClass -] - -{ #category : #accessing } -SAX2PluggableElementHandlerFactory >> elementHandlerClass: aClass [ - "set the default element handler class" - elementHandlerClass := aClass -] - -{ #category : #handling } -SAX2PluggableElementHandlerFactory >> handleElement: anElementName attributes: aCollectionOrAttributeSpec withClass: aClass [ - "aCollectionOrAttributeSpec can be some kind of XMLAttributeSpec or a - collection of associations of required attribute names and values, and the - required values can be strings, blocks, or nil meaning the attribute is - required but can take any value" - - elementClassMapper - mapElement: anElementName - attributeSpec: aCollectionOrAttributeSpec asXMLAttributeSpec - toClass: aClass -] - -{ #category : #handling } -SAX2PluggableElementHandlerFactory >> handleElement: anElementName namespaceURI: aURI attributes: aCollectionOrAttributeSpec withClass: aClass [ - "aCollectionOrAttributeSpec can be some kind of XMLAttributeSpec or a - collection of associations of required attribute names and values, and the - required values can be strings, blocks, or nil meaning the attribute is - required but can take any value" - - elementClassMapper - mapElement: anElementName - namespaceURI: aURI - attributeSpec: aCollectionOrAttributeSpec asXMLAttributeSpec - toClass: aClass -] - -{ #category : #handling } -SAX2PluggableElementHandlerFactory >> handleElement: anElementName namespaceURI: aURI withClass: aClass [ - elementClassMapper - mapElement: anElementName - namespaceURI: aURI - toClass: aClass -] - -{ #category : #handling } -SAX2PluggableElementHandlerFactory >> handleElement: anElementName withClass: aClass [ - elementClassMapper - mapElement: anElementName - toClass: aClass -] - -{ #category : #handling } -SAX2PluggableElementHandlerFactory >> handleElements: anElementNameCollection namespaceURI: aNamespaceURI withClass: aClass [ - elementClassMapper - mapElements: anElementNameCollection - namespaceURI: aNamespaceURI - toClass: aClass -] - -{ #category : #handling } -SAX2PluggableElementHandlerFactory >> handleElements: anElementNameCollection withClass: aClass [ - elementClassMapper - mapElements: anElementNameCollection - toClass: aClass -] - -{ #category : #handling } -SAX2PluggableElementHandlerFactory >> handleElementsMatchingClass: aClass [ - "This will handle all elements matching the name of a class with that - class, but igoring the class's prefix and any 'Element' or 'ElementHandler' - suffix. - - For example, it will match MyUserDefinedElement to: - - - - " - - elementClassMapper - mapAllMatchingElementsToClass: aClass - ignoringSuffixes: self ignorableClassNameSuffixes -] - -{ #category : #handling } -SAX2PluggableElementHandlerFactory >> handleElementsMatchingClasses: aClassCollection [ - "See the comment in #handleElementsMatchingClass:" - - elementClassMapper - mapAllMatchingElementsToClasses: aClassCollection - ignoringSuffixes: self ignorableClassNameSuffixes -] - -{ #category : #defaults } -SAX2PluggableElementHandlerFactory >> ignorableClassNameSuffixes [ - ^ #('Element' 'ElementHandler') -] - -{ #category : #initialization } -SAX2PluggableElementHandlerFactory >> initialize [ - super initialize. - - elementClassMapper := self elementClassMapperClass new. - elementHandlerClass := SAX2ElementHandler. -] - -{ #category : #copying } -SAX2PluggableElementHandlerFactory >> postCopy [ - super postCopy. - - elementClassMapper := elementClassMapper copy. -] diff --git a/src/XML-Parser/SAX2PluggableElementHandlerFactoryMapper.class.st b/src/XML-Parser/SAX2PluggableElementHandlerFactoryMapper.class.st deleted file mode 100644 index 0acebfef0..000000000 --- a/src/XML-Parser/SAX2PluggableElementHandlerFactoryMapper.class.st +++ /dev/null @@ -1,78 +0,0 @@ -" -This class is a pluggable mapper to map element handler objects to element handler factories. - -Requesting the factory for an element handler checks for a mapping set with #mapElementHandlerClass: toFactory:, then the handler's #elementHandlerFactory message, then the mapper's own #elementHandlerFactory message, which returns a default factory (unlike in the base class) which can be changed with #elementHandlerFactory:. - -When a SAX2ElementParser requests the factory for a new element handler, if none is found, it will reuse (inherit) the current factory, but this won't happen unless the default factory is cleared by setting #elementHandlerFactory: to nil. - -Instances can be saved and reused for performance and safely modified after copying. -" -Class { - #name : #SAX2PluggableElementHandlerFactoryMapper, - #superclass : #SAX2ElementHandlerFactoryMapper, - #instVars : [ - 'elementHandlerFactoryMap', - 'elementHandlerFactory' - ], - #category : #'XML-Parser' -} - -{ #category : #defaults } -SAX2PluggableElementHandlerFactoryMapper >> defaultElementHandlerFactoryClass [ - ^ SAX2ElementHandlerFactory -] - -{ #category : #accessing } -SAX2PluggableElementHandlerFactoryMapper >> elementHandlerFactory [ - ^ elementHandlerFactory -] - -{ #category : #accessing } -SAX2PluggableElementHandlerFactoryMapper >> elementHandlerFactory: anElementHandlerFactory [ - "set the default element handler factory" - elementHandlerFactory := anElementHandlerFactory -] - -{ #category : #private } -SAX2PluggableElementHandlerFactoryMapper >> elementHandlerFactoryMap [ - ^ elementHandlerFactoryMap -] - -{ #category : #accessing } -SAX2PluggableElementHandlerFactoryMapper >> factoryForElementHandler: anElementHandler ifNone: aBlock [ - "optimization to skip any unneeded hash lookups" - elementHandlerFactoryMap size > 0 - ifTrue: [ - ^ elementHandlerFactoryMap - at: anElementHandler class - ifAbsent: [ - super - factoryForElementHandler: anElementHandler - ifNone: aBlock]] - ifFalse: [ - ^ super - factoryForElementHandler: anElementHandler - ifNone: aBlock] -] - -{ #category : #initialization } -SAX2PluggableElementHandlerFactoryMapper >> initialize [ - super initialize. - - elementHandlerFactoryMap := IdentityDictionary new. - elementHandlerFactory := self defaultElementHandlerFactoryClass new. -] - -{ #category : #mapping } -SAX2PluggableElementHandlerFactoryMapper >> mapElementHandlerClass: aClass toFactory: aFactory [ - elementHandlerFactoryMap - at: aClass - put: aFactory -] - -{ #category : #copying } -SAX2PluggableElementHandlerFactoryMapper >> postCopy [ - super postCopy. - - elementHandlerFactoryMap := elementHandlerFactoryMap copy. -] diff --git a/src/XML-Parser/SAXHandler.class.st b/src/XML-Parser/SAXHandler.class.st deleted file mode 100644 index 890b4ee9e..000000000 --- a/src/XML-Parser/SAXHandler.class.st +++ /dev/null @@ -1,829 +0,0 @@ -" -This class is an event-handling XML parser. To use it, subclass it and override event handlers in the ""handling"" categories, such as #startDocument, #startElement:attributes:, #endElement:, and #endDocument. - -By default XML namespace support and validation are enabled but not external entity resolution. - -Once the subclass is ready, use the class ""parsing"" messages to parse XML: - result := SAXHandlerSubclass parse: xmlStringOrStream. - resultFromURL := SAXHandlerSubclass parseURL: xmlURLString. - resultFromFile := SAXHandlerSubclass parseFileNamed: xmlFileName. - -The class ""instance creation"" messages create and return new parsers on the input so they can be configured with messages in the ""configuring"" category before parsing: - result := - (SAXHandlerSubclass on: xmlStringOrStream) - isValidating: true; - resolvesExternalEntities: true; - parseDocument. - -#interruptParsing can be sent from within a handler to stop parsing, and there is also #parseDocumentWhile: and #parseDocumentUntil: - result := - (SAXHandlerSubclass on: xmlStringOrStream) - parseDocumentWhile: [self shouldKeepParsing]. - -To parse incrementally, send #parser to an instance to get the underlying XMLParser object and send it #parseToken repeatedly: - (handler := SAXHandlerSubclass on: xmlStringOrStream) - isValidating: false; - preservesUndeclaredEntityReferences: true. - parser := handler parser. - - ""Only parse the first 10 tokens:"" - 10 timesRepeat: [parser parseToken]. - -There are security limits on input you can remove with #removeLimits or change with messages like #documentReadLimit: - result := - (SAXHandlerSubclass on: xmlStringOrStream) - removeLimits; - documentReadLimit: newReadLimit; - maxEntityReplacementDepth: newMaxEntityDepth; - parseDocument. - -#optimizeForLargeDocuments can be used when parsing large documents if you don't care for validating or namespaces. -" -Class { - #name : #SAXHandler, - #superclass : #Object, - #instVars : [ - 'input', - 'documentURI', - 'configuration', - 'hasParser', - 'isInContent', - 'isInCDataSection' - ], - #category : #'XML-Parser' -} - -{ #category : #'instance creation' } -SAXHandler class >> new [ - Error signal: - 'Parsers should be created with #on: or ', - 'some other "instance creation" message' -] - -{ #category : #'instance creation' } -SAXHandler class >> on: aStringOrStream [ - "Returns a new parser on the string or stream argument but doesn't parse it. - - Can be used to configure a parser with 'configuring' messages before - parsing with #parseDocument." - - ^ self basicNew initialize on: aStringOrStream -] - -{ #category : #'instance creation' } -SAXHandler class >> on: aStringOrStream documentURI: aURIString [ - "Returns a new parser on the string or stream argument treating the - specified URI as the base URI of the document but doesn't parse it. - - Can be used to configure a parser with 'configuring' messages before - parsing with #parseDocument." - - ^ (self on: aStringOrStream) documentURI: aURIString -] - -{ #category : #'instance creation' } -SAXHandler class >> onFileNamed: aFileName [ - "Returns a new parser on the specified file but doesn't parse it. - If aFileName is a relative path, it will be resolved in the context of - the current working directory. - - Can be used to configure file parsers with 'configuring' messages before - parsing with #parseDocument." - - ^ self - on: - "return an XMLDecodingReadStreamAdapter on the undecoded file - stream so we can do our own decoding looking at byte order - marks and encoding attributes" - (XMLDecodingReadStreamAdapter nonDecodingOn: - aFileName asXMLFileHandle rawReadStream) - documentURI: aFileName -] - -{ #category : #'instance creation' } -SAXHandler class >> onURL: aURLString [ - "Fetches the URL and returns new parser on the response content but doesn't - parse it. If the URL has no scheme, it will be treated as a file path. - - Can be used to configure URL parsers with 'configuring' messages before - parsing with #parseDocument." - - ^ self - onURL: aURLString - upToLimit: XMLParserLimits defaultDocumentReadLimit -] - -{ #category : #'instance creation' } -SAXHandler class >> onURL: aURLString upToLimit: aMaxSize [ - "Fetches a URL and returns new parser on the response content up to the - input limit (use nil to disable) but doesn't parse it. If the URL has - no scheme, it will be treated as a file path. - - Can be used to configure limited URL parsers with 'configuring' messages - before parsing with #parseDocument." - - ^ (self - on: - (DTDExternalEntityResolver new - streamResolveExternalEntityURI: aURLString - upToLimit: aMaxSize) - documentURI: aURLString) - documentReadLimit: aMaxSize -] - -{ #category : #parsing } -SAXHandler class >> parse: aStringOrStream [ - "Parses the document in the string or stream argument" - - ^ (self on: aStringOrStream) parseDocument -] - -{ #category : #parsing } -SAXHandler class >> parse: aStringOrStream documentURI: aURIString [ - "Parses the document in the string or stream argument treating the specified - URI as the base URI of the document." - - ^ (self - on: aStringOrStream - documentURI: aURIString) parseDocument -] - -{ #category : #parsing } -SAXHandler class >> parse: aStringOrStream usingNamespaces: aBoolean [ - "Parses the document in the string or stream argument possibly with namespace - checking enabled (default)" - - ^ (self on: aStringOrStream) - usesNamespaces: aBoolean; - parseDocument -] - -{ #category : #parsing } -SAXHandler class >> parse: aStringOrStream usingNamespaces: aNamespaceBoolean validation: aValidationBoolean [ - "Parses the document in the string or stream argument possibly with namespace - checking (default) and validation (default) enabled." - - ^ (self on: aStringOrStream) - usesNamespaces: aNamespaceBoolean; - isValidating: aValidationBoolean; - parseDocument -] - -{ #category : #parsing } -SAXHandler class >> parse: aStringOrStream usingNamespaces: aNamespaceBoolean validation: aValidationBoolean externalEntities: anEntityResolutionBoolean [ - "Parses the document in the string or stream argument possibly with namespace - checking (default), validation (default), or external entity resolution (not - default) enabled." - - ^ (self on: aStringOrStream) - usesNamespaces: aNamespaceBoolean; - isValidating: aValidationBoolean; - resolvesExternalEntities: anEntityResolutionBoolean; - parseDocument -] - -{ #category : #deprecated } -SAXHandler class >> parseDocumentFrom: aStringOrStream [ - self deprecated: 'Use #parse: instead'. - - ^ self parse: aStringOrStream. -] - -{ #category : #deprecated } -SAXHandler class >> parseDocumentFromFileNamed: aFileName [ - self deprecated: 'Use #parseFileNamed: instead'. - - ^ self parseFileNamed: aFileName. -] - -{ #category : #parsing } -SAXHandler class >> parseFileNamed: aFileNameString [ - "Parses the specified file. If aFileName is a relative path, it will be - resolved in the context of the current working directory." - - ^ (self onFileNamed: aFileNameString) parseDocument -] - -{ #category : #parsing } -SAXHandler class >> parseURL: aURLString [ - "Fetches the URL and parses the response content. If the URL has no scheme, - it will be treated as a file path." - - ^ (self onURL: aURLString) parseDocument -] - -{ #category : #parsing } -SAXHandler class >> parseURL: aURLString upToLimit: aMaxSize [ - "Fetches the URL upto the input limit (nil to disable) and parses the - response content. If the URL has no scheme, it will be treated as a file - path." - - ^ (self - onURL: aURLString - upToLimit: aMaxSize) parseDocument -] - -{ #category : #'handling - declaration' } -SAXHandler >> attributeDeclaration: anElementName name: anAttributeName type: aType defaultPragma: aDefaultPragma defaultValue: aDefaultValue [ -] - -{ #category : #'handling - content' } -SAXHandler >> characters: aString [ - "Handles character data in an element, such as the 'test' in - 'test' or in the CDATA section ''. - - It may be sent multiple times for different sections of character data - in a single element if they're separated by other nodes or entity - references like in 'onetwo'. - - See #isInCDataSection and #ignorableWhitespace:" -] - -{ #category : #'handling - lexical' } -SAXHandler >> comment: aString [ - "Handles '' sections in documents." -] - -{ #category : #accessing } -SAXHandler >> configuration [ - ^ configuration -] - -{ #category : #accessing } -SAXHandler >> configuration: aConfiguration [ - (configuration := aConfiguration) parserHandlerClass: self class -] - -{ #category : #defaults } -SAXHandler >> configurationClass [ - ^ XMLConfiguration -] - -{ #category : #configuring } -SAXHandler >> decodesCharacters [ - ^ self configuration decodesCharacters -] - -{ #category : #configuring } -SAXHandler >> decodesCharacters: aBoolean [ - "When enabled, encoding detection and character decoding will be attemped if: - 1) the input stream or string is binary/external - 2) it starts with a byte-order mark (BOM) byte sequence - 3) the input is wrapped with an XMLDecodingReadStreamAdapter that has - a null or implicit stream converter - (Default.)" - - self configuration decodesCharacters: aBoolean -] - -{ #category : #defaults } -SAXHandler >> defaultDocumentURI [ - ^ '' -] - -{ #category : #private } -SAXHandler >> doctypeDefinition: aDoctypeDefinition [ -] - -{ #category : #configuring } -SAXHandler >> documentReadLimit [ - ^ self configuration documentReadLimit -] - -{ #category : #configuring } -SAXHandler >> documentReadLimit: anInteger [ - "change the document read limit (maximum number of chars that can be read) - or nil to disable" - - self configuration documentReadLimit: anInteger -] - -{ #category : #accessing } -SAXHandler >> documentURI [ - "Returns current document base URI string" - ^ documentURI ifNil: [documentURI := self defaultDocumentURI] -] - -{ #category : #accessing } -SAXHandler >> documentURI: aURIString [ - documentURI := aURIString -] - -{ #category : #defaults } -SAXHandler >> driverClass [ - ^ SAXParserDriver -] - -{ #category : #'handling - declaration' } -SAXHandler >> elementDeclaration: anElementName contentModel: aContentModel [ - -] - -{ #category : #'handling - lexical' } -SAXHandler >> endCData [ - "Sent after the character data of a '' section." -] - -{ #category : #'handling - lexical' } -SAXHandler >> endDTD [ - -] - -{ #category : #'handling - content' } -SAXHandler >> endDocument [ - "Handles the end of an XML document. No more handlers are invoked after this." -] - -{ #category : #'handling - content' } -SAXHandler >> endElement: aQualifiedName [ - "Handles the end of an element if a subclass doesn't implement - #endElement:prefix:uri:localName: or #endElement:prefix:uri:." -] - -{ #category : #'handling - content' } -SAXHandler >> endElement: aQualifiedName prefix: aPrefix uri: aURI [ - "Handles the end of an element if a subclass doesn't implement - #endElement:prefix:uri:localName:. By default it forwards to a simpler - handler, #endElement:. - - aQualifiedName - the full name, including any prefix, such as 'prefix:name' - aPrefix - the prefix of the qualified name or an empty string - aURI - the namespace URI of the element or an empty string" - - self endElement: aQualifiedName -] - -{ #category : #'handling - content' } -SAXHandler >> endElement: aQualifiedName prefix: aPrefix uri: aURI localName: aLocalName [ - "Handles the end of an element, either an end tag like '' or a - self-closed tag like ''. By default it forwards to a simpler handler, - #endElement:prefix:uri:. - - aQualifiedName - the full name, including any prefix, such as 'prefix:name' - aPrefix - the prefix of the qualified name or an empty string - aURI - the namespace URI of the element or an empty string - aLocalName - the local part of the qualified name" - - self - endElement: aQualifiedName - prefix: aPrefix - uri: aURI -] - -{ #category : #'handling - lexical' } -SAXHandler >> endEntity: anEntityName [ - "Handles the end of some general entity's replacement in content. - Not sent if the entity is undeclared or if content entity replacement - is disabled." -] - -{ #category : #'handling - content' } -SAXHandler >> endPrefixMapping: aPrefix [ - "Handles the end of a namespace prefix/URI mapping when namespaces are - enabled. After, aPrefix (empty for the default namespace) will be either - unmapped or mapped to a different URI. The 'xml' prefix is predefined - and never unmapped." -] - -{ #category : #private } -SAXHandler >> errorInstancesCannotHaveMultipleParsers [ - XMLParserException - formatSignal: 'Instances of {1} cannot have multiple parsers' - with: self class name -] - -{ #category : #configuring } -SAXHandler >> externalEntityResolver [ - ^ self configuration externalEntityResolver -] - -{ #category : #configuring } -SAXHandler >> externalEntityResolver: anExternalEntityResolver [ - "This can be used to set a different DTDExternalEntityResolver" - - self configuration externalEntityResolver: anExternalEntityResolver -] - -{ #category : #'handling - declaration' } -SAXHandler >> generalEntityDeclaration: aName publicID: aPublicID systemID: aSystemID ndata: aNotationName [ -] - -{ #category : #'handling - declaration' } -SAXHandler >> generalEntityDeclaration: aName replacement: aReplacement [ -] - -{ #category : #testing } -SAXHandler >> hasParser [ - ^ hasParser -] - -{ #category : #'handling - content' } -SAXHandler >> ignorableWhitespace: aString [ - "When validation is enabled and a DTD with ELEMENT declarations is - present, this can be used to handle ignorable whitespace in elements - with 'element content' (meaning they can only contain other elements - and no PCDATA), such as between '' and '' - or between '' and '' in this sample: - ' - - - - - - ]> - - - any - - ' - - Not sent if validation is disabled or if there's no DTD with element - declarations." -] - -{ #category : #initialization } -SAXHandler >> initializeParser: aParser [ -] - -{ #category : #accessing } -SAXHandler >> input [ - "the input being parsed or to be parsed" - ^ input -] - -{ #category : #private } -SAXHandler >> input: aStringOrStream [ - "here for backwards compatibility; use #on: instead" - - input := aStringOrStream -] - -{ #category : #parsing } -SAXHandler >> interruptParsing [ - "Can be sent within a handler to stop parsing; - will be silently caught within #parseDocument or other parsing methods" - - XMLParsingInterruptException signal -] - -{ #category : #testing } -SAXHandler >> isInCDataSection [ - "Can be used by characters: handlers to distinguish ordinary character - data from characters within '' sections" - - ^ isInCDataSection -] - -{ #category : #private } -SAXHandler >> isInCDataSection: aBoolean [ - isInCDataSection := aBoolean -] - -{ #category : #testing } -SAXHandler >> isInContent [ - "True if parsing has reached the first element of the document." - - ^ isInContent -] - -{ #category : #configuring } -SAXHandler >> isValidating [ - ^ self configuration isValidating -] - -{ #category : #configuring } -SAXHandler >> isValidating: aBoolean [ - "If true and the document has a schema (like a DTD with ELEMENT and ATTLIST - declarations) the document will be validated against it. Otherwise only - entity references and xml:id attributes will be validated. - - (This is unlike the standard which requires validating parsers to reject - all documents without DTDs or other schemas. To get that behavior, - use requiresDocumentConstraints:) - - Enabling disables preservesUndeclaredEntityReferences. - Disabling disables requiresDocumentConstraints." - - self configuration isValidating: aBoolean -] - -{ #category : #configuring } -SAXHandler >> maxEntityReplacementDepth [ - ^ self configuration maxEntityReplacementDepth -] - -{ #category : #configuring } -SAXHandler >> maxEntityReplacementDepth: anInteger [ - "change the max replacement depth or nil to disable" - - self configuration maxEntityReplacementDepth: anInteger -] - -{ #category : #'handling - declaration' } -SAXHandler >> notationDeclaration: aName publicID: aPublicID systemID: aSystemID [ - -] - -{ #category : #initialization } -SAXHandler >> on: aStringOrStream [ - input := aStringOrStream. - - "a single instance can parse multiple documents with #on:, - so each variable must be reset" - documentURI := nil. - configuration - ifNil: [self configuration: self configurationClass new] - ifNotNil: [self configuration: configuration copy]. - hasParser := false. - isInContent := false. - isInCDataSection := false. -] - -{ #category : #configuring } -SAXHandler >> optimizeForLargeDocuments [ - "use this for faster parsing/less memory use with large documents" - - self - isValidating: false; - usesNamespaces: false; - documentReadLimit: nil -] - -{ #category : #'handling - declaration' } -SAXHandler >> parameterEntityDeclaration: aName publicID: aPublicID systemID: aSystemID [ -] - -{ #category : #'handling - declaration' } -SAXHandler >> parameterEntityDeclaration: aName replacement: aReplacement [ -] - -{ #category : #parsing } -SAXHandler >> parseDocument [ - "Parse the entire input string or stream and return the result" - - self parser parseDocument. - - ^ self parsingResult. -] - -{ #category : #parsing } -SAXHandler >> parseDocumentUntil: aBlock [ - "Parse the input string or stream only until aBlock evalautes as true - and return the result" - - self parser parseDocumentUntil: aBlock. - - ^ self parsingResult. -] - -{ #category : #parsing } -SAXHandler >> parseDocumentWhile: aBlock [ - "Parse the input string or stream only as long as aBlock evalautes as true - and return the result" - - self parser parseDocumentWhile: aBlock. - - ^ self parsingResult. -] - -{ #category : #parsing } -SAXHandler >> parser [ - "returns a new XMLParser object for this handler" - - | parser | - - hasParser - ifTrue: [self errorInstancesCannotHaveMultipleParsers]. - hasParser := true. - - parser := - self parserClass - driver: (self driverClass saxHandler: self) - on: self input. - self initializeParser: parser. - - ^ parser. -] - -{ #category : #defaults } -SAXHandler >> parserClass [ - ^ XMLParser -] - -{ #category : #parsing } -SAXHandler >> parsingResult [ - "value returned by parseDocument and other parsing methods" - - ^ self -] - -{ #category : #configuring } -SAXHandler >> preservesUndeclaredEntityReferences [ - ^ self configuration preservesUndeclaredEntityReferences -] - -{ #category : #configuring } -SAXHandler >> preservesUndeclaredEntityReferences: aBoolean [ - "If true, references to undeclared entities in content are - preserved (not default). - Disables validation. - - (See also replacesContentEntityReferences:, which is usually more appropriate.)" - - self configuration preservesUndeclaredEntityReferences: aBoolean -] - -{ #category : #'handling - content' } -SAXHandler >> processingInstruction: aTargetString data: aDataString [ - "Handles processing instructions like '', where 'name' is - the target and 'value' is the data. - - XML declarations may look like PIs but are different and are handled - with #xmlVersion:encoding:standalone: instead." -] - -{ #category : #configuring } -SAXHandler >> removeLimits [ - "remove all input security limits (unsafe)" - - self configuration removeLimits -] - -{ #category : #configuring } -SAXHandler >> replacesContentEntityReferences [ - ^ self configuration replacesContentEntityReferences -] - -{ #category : #configuring } -SAXHandler >> replacesContentEntityReferences: aBoolean [ - "Replace general parsed entity and character references - in content (default)" - - self configuration replacesContentEntityReferences: aBoolean -] - -{ #category : #deprecated } -SAXHandler >> requiresDocumentConstraints [ - "will be deprecated; use #requiresSchema instead" - ^ self requiresSchema -] - -{ #category : #deprecated } -SAXHandler >> requiresDocumentConstraints: aBoolean [ - "will be deprecated; use #requiresSchema: instead" - self requiresSchema: aBoolean -] - -{ #category : #configuring } -SAXHandler >> requiresSchema [ - ^ self configuration requiresSchema -] - -{ #category : #configuring } -SAXHandler >> requiresSchema: aBoolean [ - "If true, a schema containing constraints on elements and attributes - (like a DTD with ELEMENT and ATTLIST declarations) will be required. - Enables validation. - - (Not default)." - - self configuration requiresSchema: aBoolean -] - -{ #category : #configuring } -SAXHandler >> resolvesExternalEntities [ - ^ self configuration resolvesExternalEntities -] - -{ #category : #configuring } -SAXHandler >> resolvesExternalEntities: aBoolean [ - "When true, external DTDs and parsed entities will be - fetched (not default)." - - self configuration resolvesExternalEntities: aBoolean -] - -{ #category : #private } -SAXHandler >> schema [ - ^ nil -] - -{ #category : #'handling - content' } -SAXHandler >> skippedEntity: anEntityName [ - "Sent when a general parsed entity reference like '&name;' is - unreplaced in content. Only sent when validation is turned off - or entity replacement is disabled." -] - -{ #category : #'handling - lexical' } -SAXHandler >> startCData [ - "Sent before the character data of a '' section." -] - -{ #category : #private } -SAXHandler >> startContent [ - isInContent := true -] - -{ #category : #'handling - lexical' } -SAXHandler >> startDTD: aRootElementName publicID: aPublicID systemID: aSystemID [ - "Handles the start of a '' declaration. Any events - after this and until #endDTD is sent are part of the internal subset - of the DTD. - - aRootElementName - the expected name of the document's root element - aPublicID - the public ID of the external DTD subset or an empty string - aSystemID - the URI where the external subset can be found or an empty string" -] - -{ #category : #'handling - content' } -SAXHandler >> startDocument [ - "Handles the start of an XML document, the first handler invoked." -] - -{ #category : #'handling - content' } -SAXHandler >> startElement: aQualifiedName attributes: anAttributeDictionary [ - "Handles the start of an element if a subclass doesn't implement - #startElement:prefix:uri:localName:attributes: or - #startElement:prefix:uri:attributes:. - - aQualifiedName - the full name, including any prefix, such as 'prefix:name' - anAttributeDictionary - an XMLAttributeDictionary of attributes" -] - -{ #category : #'handling - content' } -SAXHandler >> startElement: aQualifiedName prefix: aPrefix uri: aURI attributes: anAttributeDictionary [ - "Handles the start of an element if a subclass doesn't implement - #startElement:prefix:uri:localName:attributes:. By default it forwards - to a simpler handler, #startElement:attributes:. - - aQualifiedName - the full name, including any prefix, such as 'prefix:name' - aPrefix - the prefix of the qualified name or an empty string - aURI - the namespace URI of the element or an empty string - anAttributeDictionary - an XMLAttributeDictionary of attributes" - - self - startElement: aQualifiedName - attributes: anAttributeDictionary -] - -{ #category : #'handling - content' } -SAXHandler >> startElement: aQualifiedName prefix: aPrefix uri: aURI localName: aLocalName attributes: anAttributeDictionary [ - "Handles the start of an element, either a start tag like '' or a - self-closed tag like ''. By default it forwards to a simpler handler, - #startElement:prefix:uri:attributes:. - - aQualifiedName - the full name, including any prefix, such as 'prefix:name' - aPrefix - the prefix of the qualified name or an empty string - aURI - the namespace URI of the element or an empty string - aLocalName - the local part of the qualified name - anAttributeDictionary - an XMLAttributeDictionary of attributes" - - self - startElement: aQualifiedName - prefix: aPrefix - uri: aURI - attributes: anAttributeDictionary -] - -{ #category : #'handling - lexical' } -SAXHandler >> startEntity: anEntityName [ - "Handles the start of some general entity's replacement in content. - Not sent if the entity is undeclared or if content entity replacement - is disabled." -] - -{ #category : #'handling - content' } -SAXHandler >> startPrefixMapping: aPrefix uri: aURI [ - "Handles the start of a namespace prefix/URI mapping when namespaces are - enabled. The 'xml' prefix is predefined and never remapped. - - aPrefix - the prefix of the namespace (empty for the default namesapce) - aURI - the namespace URI" -] - -{ #category : #private } -SAXHandler >> startScope: aNamespaceScope [ -] - -{ #category : #configuring } -SAXHandler >> usesNamespaces [ - ^ self configuration usesNamespaces -] - -{ #category : #configuring } -SAXHandler >> usesNamespaces: aBoolean [ - "Namespace checking when true (default)" - - self configuration usesNamespaces: aBoolean -] - -{ #category : #'handling - lexical' } -SAXHandler >> xmlVersion: aVersionFloat encoding: anEncoding standalone: aBoolean [ - "Handles the '' declaration of a document. - - aVersionFloat - the version of XML the document uses, usually 1.0 - anEncoding - the name of the encoding or an empty string - aBoolean - true if standalone='yes'" -] diff --git a/src/XML-Parser/SAXParserDriver.class.st b/src/XML-Parser/SAXParserDriver.class.st deleted file mode 100644 index b02995d23..000000000 --- a/src/XML-Parser/SAXParserDriver.class.st +++ /dev/null @@ -1,718 +0,0 @@ -" -SAXParserDriver together with SAXHandler provides a SAX-like API for XML parsing. The driver processes XML tokens and signals SAX events to a SAXHandler. See SAXHandler for more info. -" -Class { - #name : #SAXParserDriver, - #superclass : #DTDSubsetParserDriver, - #instVars : [ - 'saxHandler', - 'elementNester', - 'scopeAllocator', - 'validator', - 'externalSubsetSystemID', - 'externalSubsetPublicID', - 'isValidating', - 'usesNamespaces', - 'isStandalone', - 'hasParameterEntityReferences', - 'hasSkippedParameterEntityReferences', - 'hasUnhandledReservedAttributes', - 'externalEntityResolver' - ], - #category : #'XML-Parser-Drivers' -} - -{ #category : #'instance creation' } -SAXParserDriver class >> saxHandler: aSAXHandler [ - ^ self new setSAXHandler: aSAXHandler -] - -{ #category : #accessing } -SAXParserDriver >> baseURI [ - "returns a string with the current base URI at this stage of parsing" - self elementNester hasScopedAttributes - ifTrue: [ - ^ self elementNester - scopedAttributeAt: 'xml:base' - ifAbsent: [super baseURI]] - ifFalse: [^ super baseURI] -] - -{ #category : #private } -SAXParserDriver >> checkForReservedAttributesIn: anOrderPreservingDictionary afterIndex: anIndex [ - "validation may add attributes, so this is used to check if reserved - attributes were added that need handling when there weren't any before" - - self hasUnhandledReservedAttributes - ifTrue: [^ self]. - anIndex + 1 - to: anOrderPreservingDictionary size - do: [:i | - (anOrderPreservingDictionary keyAtIndex: i) isXMLReservedAttributeName - ifTrue: [^ self haveUnhandledReservedAttributes]]. -] - -{ #category : #accessing } -SAXParserDriver >> currentElement [ - ^ self elementNester currentElement -] - -{ #category : #accessing } -SAXParserDriver >> currentElement: anElement [ - self elementNester currentElement: anElement -] - -{ #category : #accessing } -SAXParserDriver >> currentScope [ - ^ self scopeAllocator currentScope -] - -{ #category : #accessing } -SAXParserDriver >> currentScope: aNamespaceScope [ - self scopeAllocator currentScope: aNamespaceScope -] - -{ #category : #private } -SAXParserDriver >> declareNamespaces: aSequenceableCollection inScope: aScope [ - 1 to: aSequenceableCollection size do: [:i | | association | - association := aSequenceableCollection at: i. - (aScope resolvePrefix: association key) = association value - ifFalse: [ - self saxHandler - startPrefixMapping: association key - uri: association value]]. - aScope mapPrefixesAndURIs: aSequenceableCollection. -] - -{ #category : #testing } -SAXParserDriver >> decodesCharacters [ - ^ self saxHandler decodesCharacters -] - -{ #category : #defaults } -SAXParserDriver >> doctypeDefinitionClass [ - ^ DTDDoctypeDefinition -] - -{ #category : #accessing } -SAXParserDriver >> documentReadLimit [ - ^ self saxHandler documentReadLimit -] - -{ #category : #accessing } -SAXParserDriver >> documentURI [ - ^ self saxHandler documentURI -] - -{ #category : #accessing } -SAXParserDriver >> elementNester [ - ^ elementNester -] - -{ #category : #private } -SAXParserDriver >> errorDocumentConstraintsRequired [ - XMLValidationException signal: 'Document validation constraints required' -] - -{ #category : #accessing } -SAXParserDriver >> externalEntityResolver [ - ^ externalEntityResolver - ifNil: [ - externalEntityResolver := - self saxHandler externalEntityResolver - asLimitingExternalEntityResolver] -] - -{ #category : #private } -SAXParserDriver >> externalSubsetParserOn: aStringOrStream documentURI: aURIString [ - ^ self saxHandler parserClass - driver: - (DTDExternalSubsetParserDriver - saxDriver: self - documentURI: aURIString) - on: aStringOrStream -] - -{ #category : #accessing } -SAXParserDriver >> externalSubsetPublicID [ - ^ externalSubsetPublicID -] - -{ #category : #accessing } -SAXParserDriver >> externalSubsetSystemID [ - ^ externalSubsetSystemID -] - -{ #category : #private } -SAXParserDriver >> extractNamespacesFromAttributes: anOrderPreservingDictionary [ - "returns an ordered collection of namespace prefix/uri associations - removed from the attribute dictionary or nil if there aren't any" - | namespaces keysToRemove | - - self haveNoUnhandledReservedAttributes. - anOrderPreservingDictionary keysDo: [:name | - "optimized comparison ordering" - (name at: 1) == $x - ifTrue: [ - name isXMLNSAttributeName - ifTrue: [ - "only initialize when needed" - (namespaces ifNil: [namespaces := OrderedCollection new: 5]) - addLast: - (name size > 6 "'xmlns:' size" - ifTrue: [name copyFrom: 7 to: name size] - ifFalse: ['']) -> - (anOrderPreservingDictionary at: name). - "only initialize when needed" - (keysToRemove ifNil: [keysToRemove := OrderedCollection new: 5]) - addLast: name] - ifFalse: [ - name isXMLReservedAttributeName - ifTrue: [ - "at least one xml attr is not an xmlns attr, so there - will still be reserved attrs to handle after extracting - the namespaces" - self haveUnhandledReservedAttributes]]]]. - - keysToRemove - ifNotNil: [ - "use removeKeys: for speed" - anOrderPreservingDictionary removeKeys: keysToRemove]. - - ^ namespaces. -] - -{ #category : #'handling - dtd' } -SAXParserDriver >> handleAttributeDeclaration: anElement name: anAttribute type: aType defaultPragma: aDefaultPragma defaultValue: aDefaultValue [ - super - handleAttributeDeclaration: anElement - name: anAttribute - type: aType - defaultPragma: aDefaultPragma - defaultValue: aDefaultValue. - - self saxHandler - attributeDeclaration: anElement - name: anAttribute - type: aType - defaultPragma: aDefaultPragma - defaultValue: aDefaultValue. -] - -{ #category : #handling } -SAXParserDriver >> handleCData: aString [ - self isValidating - ifTrue: [self validator validatePCData: aString]. - - self saxHandler - isInCDataSection: true; - startCData; - characters: aString; - endCData; - isInCDataSection: false. -] - -{ #category : #handling } -SAXParserDriver >> handleComment: aString [ - (self elementNester isInElement - and: [self isValidating]) - ifTrue: [self validator validateComment: aString]. - - self saxHandler comment: aString. -] - -{ #category : #'handling - dtd' } -SAXParserDriver >> handleElementDeclaration: aName contentModel: aContentModel [ - super - handleElementDeclaration: aName - contentModel: aContentModel. - - self saxHandler - elementDeclaration: aName - contentModel: aContentModel. -] - -{ #category : #handling } -SAXParserDriver >> handleEndContentEntityReplacement: aName [ - self saxHandler endEntity: aName -] - -{ #category : #'handling - dtd' } -SAXParserDriver >> handleEndDTD [ - (self resolvesExternalEntities - and: [self hasExternalSubset - and: [self isValidating - or: [self isStandalone not]]]) - ifTrue: [self parseExternalSubset]. - self isValidating - ifTrue: [self doctypeDefinition validateCompletedDefinition]. - - self saxHandler - doctypeDefinition: self doctypeDefinition; - endDTD. -] - -{ #category : #handling } -SAXParserDriver >> handleEndDocument [ - self isValidating - ifTrue: [self validator validateEndDocument]. - - self saxHandler endDocument. -] - -{ #category : #handling } -SAXParserDriver >> handleEndTag: anElement [ - "performance critical method" - | prefix currentScope | - - prefix := anElement xmlPrefixBeforeLocalName. - self saxHandler - endElement: anElement - prefix: prefix - uri: - (self usesNamespaces - ifTrue: [ - (currentScope := self scopeAllocator exitScope) - resolvePrefix: prefix] - ifFalse: ['']) - localName: (anElement xmlLocalNameAfterPrefix: prefix). - - self usesNamespaces - ifTrue: [ - currentScope hasNamespaces - ifTrue: [self undeclareNamespacesInScope: currentScope]]. - self isValidating - ifTrue: [self validator validateEndTag: anElement]. -] - -{ #category : #'handling - dtd' } -SAXParserDriver >> handleGeneralEntityDeclaration: aName publicID: aPublicID systemID: aSystemID ndata: aNotation [ - super - handleGeneralEntityDeclaration: aName - publicID: aPublicID - systemID: aSystemID - ndata: aNotation. - - self saxHandler - generalEntityDeclaration: aName - publicID: aPublicID - systemID: aSystemID - ndata: aNotation. -] - -{ #category : #'handling - dtd' } -SAXParserDriver >> handleGeneralEntityDeclaration: aName replacement: aReplacement [ - super - handleGeneralEntityDeclaration: aName - replacement: aReplacement. - - self saxHandler - generalEntityDeclaration: aName - replacement: aReplacement. -] - -{ #category : #'handling - dtd' } -SAXParserDriver >> handleNotationDeclaration: aName publicID: aPublicID systemID: aSystemID [ - super - handleNotationDeclaration: aName - publicID: aPublicID - systemID: aSystemID. - - self saxHandler - notationDeclaration: aName - publicID: aPublicID - systemID: aSystemID. -] - -{ #category : #handling } -SAXParserDriver >> handlePCData: aString [ - self isValidating - ifTrue: [self validator validatePCData: aString]. - - self saxHandler characters: aString. -] - -{ #category : #handling } -SAXParserDriver >> handlePI: aTargetString data: aDataString [ - (self elementNester isInElement - and: [self isValidating]) - ifTrue: [ - self validator - validatePI: aTargetString - data: aDataString]. - - self saxHandler - processingInstruction: aTargetString - data: aDataString. -] - -{ #category : #'handling - dtd' } -SAXParserDriver >> handleParameterEntityDeclaration: aName publicID: aPublicID systemID: aSystemID [ - super - handleParameterEntityDeclaration: aName - publicID: aPublicID - systemID: aSystemID. - - self saxHandler - parameterEntityDeclaration: aName - publicID: aPublicID - systemID: aSystemID. -] - -{ #category : #'handling - dtd' } -SAXParserDriver >> handleParameterEntityDeclaration: aName replacement: aReplacement [ - super - handleParameterEntityDeclaration: aName - replacement: aReplacement. - - self saxHandler - parameterEntityDeclaration: aName - replacement: aReplacement. -] - -{ #category : #private } -SAXParserDriver >> handleReservedAttributes: aDictionary [ - aDictionary - at: 'xml:base' - ifPresent: [:uri | - "expand the new base URI using the current" - aDictionary - at: 'xml:base' - put: (self baseURI asXMLURI / uri) asString]. - self isValidating - ifTrue: [self validator validateXMLIDAttributeIn: aDictionary]. - - self elementNester - setScopedAttributesNamed: self scopedAttributeNames - from: aDictionary. - - self haveNoUnhandledReservedAttributes. -] - -{ #category : #handling } -SAXParserDriver >> handleStartContent [ - self saxHandler startContent -] - -{ #category : #handling } -SAXParserDriver >> handleStartContentEntityReplacement: aName [ - self saxHandler startEntity: aName -] - -{ #category : #'handling - dtd' } -SAXParserDriver >> handleStartDTD: aRoot publicID: aPublicID systemID: aSystemID [ - externalSubsetPublicID := aPublicID. - externalSubsetSystemID := aSystemID. - - self doctypeDefinition root: aRoot. - self saxHandler - startDTD: aRoot - publicID: aPublicID - systemID: aSystemID. -] - -{ #category : #handling } -SAXParserDriver >> handleStartDocument [ - self saxHandler startDocument -] - -{ #category : #handling } -SAXParserDriver >> handleStartTag: anElement attributes: anAttributeDictionary [ - "performance critical method" - | prefix totalAttributes namespaceURI currentScope | - - prefix := anElement xmlPrefixBeforeLocalName. - totalAttributes := anAttributeDictionary size. - self isValidating - ifTrue: [ - self elementNester totalOpenElements > 1 - ifFalse: [self validateRootElement: anElement]. - self validator - validateStartTag: anElement - attributes: anAttributeDictionary] - ifFalse: [ - self doctypeDefinition - processStartTag: anElement - attributes: anAttributeDictionary]. - "validation and processing can add attributes" - anAttributeDictionary size > totalAttributes - ifTrue: [ - self - checkForReservedAttributesIn: anAttributeDictionary - afterIndex: totalAttributes. - totalAttributes := anAttributeDictionary size]. - self usesNamespaces - ifTrue: [ - anAttributeDictionary setNamespaceScope: - (currentScope := self scopeAllocator enterScope). - self hasUnhandledReservedAttributes - ifTrue: [ - (self extractNamespacesFromAttributes: anAttributeDictionary) - ifNotNil: [:namespaces | - self - declareNamespaces: namespaces - inScope: currentScope. - totalAttributes := anAttributeDictionary size]]. - self saxHandler startScope: currentScope. - namespaceURI := - currentScope - validateAndResolvePrefix: prefix - ofElement: anElement. - totalAttributes > 0 - ifTrue: [ - "anAttributeDictionary is an XMLAttributeDictionary, which - is an OrderPreservingStringDictionary, so use its internal - #orderedKeys over #keys for speed" - currentScope - validatePrefixesOfAttributes: anAttributeDictionary orderedKeys - from: 1 - to: totalAttributes]]. - self hasUnhandledReservedAttributes - ifTrue: [self handleReservedAttributes: anAttributeDictionary]. - - self saxHandler - startElement: anElement - prefix: prefix - uri: (namespaceURI ifNil: ['']) - localName: (anElement xmlLocalNameAfterPrefix: prefix) - attributes: anAttributeDictionary. -] - -{ #category : #handling } -SAXParserDriver >> handleUnreplacedGeneralEntityReference: aName [ - self saxHandler skippedEntity: aName -] - -{ #category : #handling } -SAXParserDriver >> handleWhitespace: aString [ - self isValidating - ifTrue: [ - self validator isCurrentElementWhitespaceIgnorable - ifTrue: [ - (self elementNester hasScopedAttributes - and: [ - (self elementNester scopedAttributeAt: 'xml:space') = - 'preserve']) - ifTrue: [self saxHandler characters: aString] - ifFalse: [self saxHandler ignorableWhitespace: aString]. - ^ self] - ifFalse: [ - "only validate if it's not ignorable" - self validator validatePCData: aString]]. - self saxHandler characters: aString. -] - -{ #category : #handling } -SAXParserDriver >> handleXMLVersion: aVersion encoding: anEncoding standalone: aYesOrNo [ - isStandalone := aYesOrNo = 'yes'. - - self saxHandler - xmlVersion: (self versionFloatFromString: aVersion) - encoding: anEncoding - standalone: isStandalone. -] - -{ #category : #testing } -SAXParserDriver >> hasExternalSubset [ - ^ self externalSubsetPublicID notEmpty - or: [self externalSubsetSystemID notEmpty] -] - -{ #category : #testing } -SAXParserDriver >> hasParameterEntityReferences [ - ^ hasParameterEntityReferences -] - -{ #category : #testing } -SAXParserDriver >> hasSkippedParameterEntityReferences [ - ^ hasSkippedParameterEntityReferences -] - -{ #category : #testing } -SAXParserDriver >> hasUnhandledReservedAttributes [ - ^ hasUnhandledReservedAttributes -] - -{ #category : #accessing } -SAXParserDriver >> haveNoUnhandledReservedAttributes [ - hasUnhandledReservedAttributes := false -] - -{ #category : #accessing } -SAXParserDriver >> haveParameterEntityReferences [ - hasParameterEntityReferences := true -] - -{ #category : #accessing } -SAXParserDriver >> haveSkippedParameterEntityReferences [ - hasSkippedParameterEntityReferences := true -] - -{ #category : #accessing } -SAXParserDriver >> haveUnhandledReservedAttributes [ - hasUnhandledReservedAttributes := true -] - -{ #category : #testing } -SAXParserDriver >> isExternal [ - "Definition: An external markup declaration is defined as a markup - declaration occurring in the external subset or in a parameter entity - (external or internal, the latter being included because non-validating - processors are not required to read them)" - - "returning #isParameter instead of 'self currentEntity notNil' - ensures the correct result when parsing content" - ^ self currentEntity - ifNil: [false] - ifNotNil: [:entity | entity isParameter] -] - -{ #category : #testing } -SAXParserDriver >> isStandalone [ - ^ isStandalone -] - -{ #category : #accessing } -SAXParserDriver >> isStandalone: aBoolean [ - isStandalone := aBoolean -] - -{ #category : #testing } -SAXParserDriver >> isValidating [ - ^ isValidating -] - -{ #category : #accessing } -SAXParserDriver >> maxEntityReplacementDepth [ - ^ self saxHandler maxEntityReplacementDepth -] - -{ #category : #'instance creation' } -SAXParserDriver >> newAttributeDictionary [ - ^ (self usesNamespaces - ifTrue: [XMLNamespacedAttributeDictionary] - ifFalse: [XMLAttributeDictionary]) new -] - -{ #category : #'instance creation' } -SAXParserDriver >> newEmptyAttributeDictionary [ - ^ (self usesNamespaces - ifTrue: [XMLLazyNamespacedAttributeDictionary] - ifFalse: [XMLLazyAttributeDictionary]) new -] - -{ #category : #private } -SAXParserDriver >> parseExternalSubset [ - | externalSubsetURI | - - externalSubsetURI := - self externalEntityResolver - externalEntityURIFromPublicID: self externalSubsetPublicID - systemID: self externalSubsetSystemID - baseURI: self baseURI. - - "External subsets are stream-resolved so if they are local (stored on disk), - they aren't kept entirely in memory during parsing. HTTP entities will be - kept in memory regardless and this will just return a read stream on them." - (self - externalSubsetParserOn: - (self externalEntityResolver streamResolveExternalEntityURI: - externalSubsetURI) - documentURI: externalSubsetURI asString) - parseDocument. -] - -{ #category : #testing } -SAXParserDriver >> preservesUndeclaredEntityReferences [ - ^ self saxHandler preservesUndeclaredEntityReferences -] - -{ #category : #accessing } -SAXParserDriver >> readLimit [ - ^ self documentReadLimit -] - -{ #category : #testing } -SAXParserDriver >> replacesContentEntityReferences [ - ^ self saxHandler replacesContentEntityReferences -] - -{ #category : #testing } -SAXParserDriver >> resolvesExternalEntities [ - ^ self saxHandler resolvesExternalEntities -] - -{ #category : #accessing } -SAXParserDriver >> saxHandler [ - ^ saxHandler -] - -{ #category : #accessing } -SAXParserDriver >> scopeAllocator [ - ^ scopeAllocator ifNil: [scopeAllocator := XMLNamespaceScopeAllocator new] -] - -{ #category : #private } -SAXParserDriver >> scopedAttributeNames [ - "the scoped attributes tracked by this driver" - ^ #('xml:space' 'xml:base') -] - -{ #category : #initialization } -SAXParserDriver >> setSAXHandler: aSAXHandler [ - saxHandler := aSAXHandler. - doctypeDefinition := self doctypeDefinitionClass new. - validator := (aSAXHandler schema ifNil: [doctypeDefinition]) newValidator. - elementNester := self newElementNester. - externalSubsetPublicID := ''. - externalSubsetSystemID := ''. - "these are copied to inst vars for faster access" - isValidating := aSAXHandler isValidating. - usesNamespaces := aSAXHandler usesNamespaces. - isStandalone := false. - hasParameterEntityReferences := false. - hasSkippedParameterEntityReferences := false. - hasUnhandledReservedAttributes := false. -] - -{ #category : #private } -SAXParserDriver >> undeclareNamespacesInScope: anExitedScope [ - | currentScope | - - currentScope := self scopeAllocator currentScope. - anExitedScope prefixesAndURIsDo: [:prefix :uri | - (currentScope resolvePrefix: prefix) = uri - ifFalse: [self saxHandler endPrefixMapping: prefix]]. -] - -{ #category : #testing } -SAXParserDriver >> usesNamespaces [ - ^ usesNamespaces -] - -{ #category : #private } -SAXParserDriver >> validateRootElement: anElement [ - self saxHandler requiresSchema - ifTrue: [ - (self validator hasElementValidators - or: [self validator hasAttributeValidators]) - ifFalse: [self errorDocumentConstraintsRequired]]. - - self validator validateRootElement: anElement. -] - -{ #category : #accessing } -SAXParserDriver >> validator [ - ^ validator -] - -{ #category : #private } -SAXParserDriver >> versionFloatFromString: aString [ - aString size = 3 - ifTrue: [ - aString = '1.0' - ifTrue: [^ 1.0]. - aString = '1.1' - ifTrue: [^ 1.1]]. - ^ Float readFrom: aString readStream. -] diff --git a/src/XML-Parser/SequenceableCollection.extension.st b/src/XML-Parser/SequenceableCollection.extension.st deleted file mode 100644 index c67230f42..000000000 --- a/src/XML-Parser/SequenceableCollection.extension.st +++ /dev/null @@ -1,20 +0,0 @@ -Extension { #name : #SequenceableCollection } - -{ #category : #'*XML-Parser' } -SequenceableCollection >> includesXMLName: aName [ - "optimized with #to:do:" - 1 to: self size do: [:i | - (aName isXMLQualifiedOrLocalName: (self at: i)) - ifTrue: [^ true]]. - ^ false. -] - -{ #category : #'*XML-Parser' } -SequenceableCollection >> xmlLastOrNil [ - "for speed to avoid at:ifAbsent: closure" - | lastOrNilOffset | - - (lastOrNilOffset := self size) > 0 - ifTrue: [^ self at: lastOrNilOffset] - ifFalse: [^ nil] -] diff --git a/src/XML-Parser/Stream.extension.st b/src/XML-Parser/Stream.extension.st deleted file mode 100644 index 4bcb6ab89..000000000 --- a/src/XML-Parser/Stream.extension.st +++ /dev/null @@ -1,11 +0,0 @@ -Extension { #name : #Stream } - -{ #category : #'*XML-Parser' } -Stream >> isXMLBinaryOrExternalStream [ - ^ self isBinary -] - -{ #category : #'*XML-Parser' } -Stream >> parseXML [ - ^ XMLDOMParser parse: self -] diff --git a/src/XML-Parser/String.extension.st b/src/XML-Parser/String.extension.st deleted file mode 100644 index 99836d1ea..000000000 --- a/src/XML-Parser/String.extension.st +++ /dev/null @@ -1,217 +0,0 @@ -Extension { #name : #String } - -{ #category : #'*XML-Parser' } -String >> asXMLEscapedString [ - "returns a copy of self with &, <, and > escaped with &, <, and >" - | stream | - - stream := (self class new: self size) writeStream. - "to:do: for performance" - 1 to: self size do: [:i | | nextChar | - (nextChar := self at: i) == $< - ifTrue: [stream nextPutAll: '<'] - ifFalse: [ - nextChar == $> "needed to escape ]]> in PCDATA" - ifTrue: [stream nextPutAll: '>'] - ifFalse: [ - nextChar == $& - ifTrue: [stream nextPutAll: '&'] - ifFalse: [stream nextPut: nextChar]]]]. - ^ stream contents. -] - -{ #category : #'*XML-Parser' } -String >> asXMLFileHandle [ - ^ XMLFileHandle path: self -] - -{ #category : #'*XML-Parser' } -String >> asXMLHTTPRequest [ - ^ XMLHTTPRequest url: self -] - -{ #category : #'*XML-Parser' } -String >> asXMLStreamConverter [ - ^ XMLStreamConverter newForEncoding: self -] - -{ #category : #'*XML-Parser' } -String >> asXMLString [ - "will be deprecated; use #asXMLStringNode instead" - - ^ self asXMLStringNode -] - -{ #category : #'*XML-Parser' } -String >> asXMLStringNode [ - ^ XMLString string: self -] - -{ #category : #'*XML-Parser' } -String >> asXMLURI [ - ^ XMLURI fromString: self -] - -{ #category : #'*XML-Parser' } -String >> expandWithXMLNamespaceURI: aURI [ - "optimized" - aURI size == 0 - ifTrue: [^ self] - ifFalse: [^ 'Q{', aURI, '}', self] -] - -{ #category : #'*XML-Parser' } -String >> isXMLNCName [ - "optimized" - self size == 0 - ifTrue: [^ false]. - (self at: 1) isXMLNCNameStartChar - ifFalse: [^ false]. - 2 to: self size do: [:i | - (self at: i) isXMLNCNameChar - ifFalse: [^ false]]. - ^ true. -] - -{ #category : #'*XML-Parser' } -String >> isXMLNSAttributeName [ - "optimized" - self size >= 5 - ifFalse: [^ false]. - (self at: 1) == $x - ifFalse: [^ false]. - (self at: 2) == $m - ifFalse: [^ false]. - (self at: 3) == $l - ifFalse: [^ false]. - (self at: 4) == $n - ifFalse: [^ false]. - (self at: 5) == $s - ifFalse: [^ false]. - self size == 5 - ifTrue: [^ true]. - ^ (self at: 6) == $:. -] - -{ #category : #'*XML-Parser' } -String >> isXMLName [ - "optimized" - self size == 0 - ifTrue: [^ false]. - (self at: 1) isXMLNameStartChar - ifFalse: [^ false]. - 2 to: self size do: [:i | - (self at: i) isXMLNameChar - ifFalse: [^ false]]. - ^ true. -] - -{ #category : #'*XML-Parser' } -String >> isXMLNmtoken [ - "optimized" - self size == 0 - ifTrue: [^ false]. - 1 to: self size do: [:i | - (self at: i) isXMLNameChar - ifFalse: [^ false]]. - ^ true. -] - -{ #category : #'*XML-Parser' } -String >> isXMLQualifiedOrLocalName: aQualifiedOrLocalName [ - "returns true if self and aQualifiedOrLocalName are the - same QName or if self is a QName and aQualifiedOrLocalName - is the local part, or if they are the same NCName." - | i | - - i := aQualifiedOrLocalName size. - self size to: 1 by: -1 do: [:j | - i == 0 - ifTrue: [^ (self at: j) == $:]. - "avoid #== for compatibility with pre-Spur VMs where wide chars - aren't an immediate type" - (aQualifiedOrLocalName at: i) = (self at: j) - ifFalse: [^ false]. - i := i - 1]. - ^ i == 0. -] - -{ #category : #'*XML-Parser' } -String >> isXMLReservedAttributeName [ - "optimized" - self size > 3 - ifFalse: [^ false]. - (self at: 1) == $x - ifFalse: [^ false]. - (self at: 2) == $m - ifFalse: [^ false]. - ^ (self at: 3) == $l. -] - -{ #category : #'*XML-Parser' } -String >> isXMLWhitespace [ - "optimized" - self size == 0 - ifTrue: [^ false]. - 1 to: self size do: [:i | - (self at: i) isXMLWhitespace - ifFalse: [^ false]]. - ^ true. -] - -{ #category : #'*XML-Parser' } -String >> parseXML [ - ^ XMLDOMParser parse: self -] - -{ #category : #'*XML-Parser' } -String >> qualifyWithXMLPrefix: aPrefix [ - "optimized" - aPrefix size == 0 - ifTrue: [^ self] - ifFalse: [^ (aPrefix copyWith: $:), self] -] - -{ #category : #'*XML-Parser' } -String >> xmlCopyWithoutWhitespace [ - ^ self reject: [:each | each isXMLWhitespace] -] - -{ #category : #'*XML-Parser' } -String >> xmlLocalNameAfterPrefix [ - ^ self xmlLocalNameAfterPrefix: self xmlPrefixBeforeLocalName -] - -{ #category : #'*XML-Parser' } -String >> xmlLocalNameAfterPrefix: aPrefix [ - "optimized" - | prefixSize | - - (prefixSize := aPrefix size) == 0 - ifTrue: [^ self] - ifFalse: [^ self copyFrom: prefixSize + 2 to: self size] -] - -{ #category : #'*XML-Parser' } -String >> xmlPrefixBeforeLocalName [ - "optimized" - | i | - - i := self size. - [i == 0] - whileFalse: [ - ((self at: i) == $:) - ifTrue: [^ (self copyFrom: 1 to: i - 1)]. - i := i - 1]. - ^ ''. -] - -{ #category : #'*XML-Parser' } -String >> xmlPrefixBeforeLocalName: aLocalName [ - "optimized" - | prefixSize | - - (prefixSize := self size - aLocalName size - 1) > 0 - ifTrue: [^ self copyFrom: 1 to: prefixSize] - ifFalse: [^ ''] -] diff --git a/src/XML-Parser/UndefinedObject.extension.st b/src/XML-Parser/UndefinedObject.extension.st deleted file mode 100644 index cd9b77fba..000000000 --- a/src/XML-Parser/UndefinedObject.extension.st +++ /dev/null @@ -1,50 +0,0 @@ -Extension { #name : #UndefinedObject } - -{ #category : #'*XML-Parser' } -UndefinedObject >> isXMLChar [ - "hack optimization to avoid testing for nil before sending - this to objects from streams in XMLParser" - ^ false -] - -{ #category : #'*XML-Parser' } -UndefinedObject >> isXMLNCNameChar [ - "hack optimization to avoid testing for nil before sending - this to objects from streams in XMLParser" - ^ false -] - -{ #category : #'*XML-Parser' } -UndefinedObject >> isXMLNCNameStartChar [ - "hack optimization to avoid testing for nil before sending - this to objects from streams in XMLParser" - ^ false -] - -{ #category : #'*XML-Parser' } -UndefinedObject >> isXMLNameChar [ - "hack optimization to avoid testing for nil before sending - this to objects from streams in XMLParser" - ^ false -] - -{ #category : #'*XML-Parser' } -UndefinedObject >> isXMLNameStartChar [ - "hack optimization to avoid testing for nil before sending - this to objects from streams in XMLParser" - ^ false -] - -{ #category : #'*XML-Parser' } -UndefinedObject >> isXMLSeparator [ - "hack optimization to avoid testing for nil before sending - this to objects from streams in XMLParser" - ^ false -] - -{ #category : #'*XML-Parser' } -UndefinedObject >> isXMLWhitespace [ - "hack optimization to avoid testing for nil before sending - this to objects from streams in XMLParser" - ^ false -] diff --git a/src/XML-Parser/XMLASCIIStreamConverter.class.st b/src/XML-Parser/XMLASCIIStreamConverter.class.st deleted file mode 100644 index 8fc9d0470..000000000 --- a/src/XML-Parser/XMLASCIIStreamConverter.class.st +++ /dev/null @@ -1,35 +0,0 @@ -" -A stream converter for ASCII. -" -Class { - #name : #XMLASCIIStreamConverter, - #superclass : #XMLStatelessStreamConverter, - #category : #'XML-Parser-Streams' -} - -{ #category : #basic } -XMLASCIIStreamConverter class >> basicEncodingNames [ - ^ #('ASCII' 'US-ASCII' 'USASCII') -] - -{ #category : #decoding } -XMLASCIIStreamConverter >> nextFromStream: aStream [ - | byte | - - aStream atEnd - ifTrue: [^ nil]. - (byte := aStream next asInteger) > 127 - ifTrue: [self errorBadCharacterValue: byte]. - - ^ byte asCharacter. -] - -{ #category : #encoding } -XMLASCIIStreamConverter >> nextPut: aCharacter toStream: aStream [ - | codePoint | - - (codePoint := aCharacter asInteger) > 127 - ifTrue: [self errorBadCharacterValue: codePoint]. - - aStream nextPut: codePoint. -] diff --git a/src/XML-Parser/XMLAbstractFactory.class.st b/src/XML-Parser/XMLAbstractFactory.class.st deleted file mode 100644 index 8362bea86..000000000 --- a/src/XML-Parser/XMLAbstractFactory.class.st +++ /dev/null @@ -1,99 +0,0 @@ -" -An abstract class for dynamically choosing a supported concrete implementation from a class hierarchy for this platform. - -Each root subclass needs to override #preferredImplementation to return the preferred subclass and #noSupportedImplementationFound to signal an error if none are supported, and then each subclass of the root needs to define #isSupportedImplementation to return true if it supports this platform. -" -Class { - #name : #XMLAbstractFactory, - #superclass : #Object, - #classInstVars : [ - 'implementation' - ], - #category : #'XML-Parser-Utils' -} - -{ #category : #testing } -XMLAbstractFactory class >> canBeImplemented [ - ^ false -] - -{ #category : #clearing } -XMLAbstractFactory class >> clearAllImplementations [ - "self clearAllImplementations" - - self - implementation: nil; - allSubclassesDo: [:each | each implementation: nil] -] - -{ #category : #finding } -XMLAbstractFactory class >> findSupportedImplementation [ - self canBeImplemented - ifTrue: [ - self isSupportedImplementation - ifTrue: [^ self]. - - (self preferredImplementation notNil - and: [self preferredImplementation isSupportedImplementation]) - ifTrue: [^ self preferredImplementation]. - self allSubclassesDo: [:each | - each isSupportedImplementation - ifTrue: [^ each]]]. - - ^ nil. -] - -{ #category : #testing } -XMLAbstractFactory class >> hasSupportedImplementation [ - ^ self findSupportedImplementation notNil -] - -{ #category : #accessing } -XMLAbstractFactory class >> implementation [ - ^ implementation - ifNil: [ - "avoid assigning to the class inst var unless an implementation - was found to minimize write conflicts on GS" - self findSupportedImplementation - ifNil: [self noSupportedImplementationFound] - ifNotNil: [:supportedImplementation | - implementation := supportedImplementation]. - implementation] -] - -{ #category : #accessing } -XMLAbstractFactory class >> implementation: aClassOrNil [ - implementation := aClassOrNil -] - -{ #category : #'instance creation' } -XMLAbstractFactory class >> implementationNew [ - ^ self implementation basicNew initialize -] - -{ #category : #'class initialization' } -XMLAbstractFactory class >> initialize [ - "self initialize" - - self clearAllImplementations -] - -{ #category : #testing } -XMLAbstractFactory class >> isSupportedImplementation [ - ^ false -] - -{ #category : #'instance creation' } -XMLAbstractFactory class >> new [ - ^ self implementationNew -] - -{ #category : #finding } -XMLAbstractFactory class >> noSupportedImplementationFound [ - Error signal: 'No implementation available' -] - -{ #category : #defaults } -XMLAbstractFactory class >> preferredImplementation [ - ^ nil -] diff --git a/src/XML-Parser/XMLAbstractReadStream.class.st b/src/XML-Parser/XMLAbstractReadStream.class.st deleted file mode 100644 index 2343ccdfe..000000000 --- a/src/XML-Parser/XMLAbstractReadStream.class.st +++ /dev/null @@ -1,167 +0,0 @@ -" -An abstract class for read streams. -" -Class { - #name : #XMLAbstractReadStream, - #superclass : #Object, - #category : #'XML-Parser-Streams' -} - -{ #category : #basic } -XMLAbstractReadStream class >> basicOn: anObject [ - ^ self basicNew initialize on: anObject -] - -{ #category : #'instance creation' } -XMLAbstractReadStream class >> new [ - self shouldNotImplement -] - -{ #category : #'instance creation' } -XMLAbstractReadStream class >> on: anObject [ - ^ self basicOn: anObject -] - -{ #category : #testing } -XMLAbstractReadStream >> atEnd [ - self subclassResponsibility -] - -{ #category : #closing } -XMLAbstractReadStream >> close [ -] - -{ #category : #accessing } -XMLAbstractReadStream >> contents [ - self subclassResponsibility -] - -{ #category : #testing } -XMLAbstractReadStream >> isBinary [ - ^ false -] - -{ #category : #testing } -XMLAbstractReadStream >> isStream [ - ^ true -] - -{ #category : #testing } -XMLAbstractReadStream >> isXMLBinaryOrExternalStream [ - ^ self isBinary -] - -{ #category : #'instance creation' } -XMLAbstractReadStream >> newWriteStream [ - ^ (self writeStreamCollectionClass new: 128) writeStream -] - -{ #category : #accessing } -XMLAbstractReadStream >> next [ - self subclassResponsibility -] - -{ #category : #accessing } -XMLAbstractReadStream >> next: anInteger [ - | writeStream i | - - writeStream := self newWriteStream. - i := 0. - [self atEnd - or: [i >= anInteger]] - whileFalse: [ - writeStream nextPut: self next. - i := i + 1]. - ^ writeStream contents. -] - -{ #category : #initialization } -XMLAbstractReadStream >> on: anObject [ - self subclassResponsibility -] - -{ #category : #accessing } -XMLAbstractReadStream >> peek [ - self subclassResponsibility -] - -{ #category : #accessing } -XMLAbstractReadStream >> peekFor: anObject [ - (self atEnd not - and: [self peek = anObject]) - ifTrue: [ - self next. - ^ true] - ifFalse: [^ false] -] - -{ #category : #positioning } -XMLAbstractReadStream >> position [ - self subclassResponsibility -] - -{ #category : #positioning } -XMLAbstractReadStream >> position: anInteger [ - self subclassResponsibility -] - -{ #category : #positioning } -XMLAbstractReadStream >> reset [ - self subclassResponsibility -] - -{ #category : #positioning } -XMLAbstractReadStream >> skip: anInteger [ - "only supports skipping forwards" - 1 to: anInteger do: [:i | - self atEnd - ifTrue: [^ self]. - self next] -] - -{ #category : #positioning } -XMLAbstractReadStream >> skipSeparators [ - "we use #isXMLWhitespace instead of the narrower, XML-specific - #isXMLSeparator, because this class can be used for non-XML - streams too" - [self atEnd not - and: [self peek isXMLWhitespace]] - whileTrue: [self next] -] - -{ #category : #positioning } -XMLAbstractReadStream >> skipTo: anObject [ - [self atEnd] - whileFalse: [ - self next = anObject - ifTrue: [^ true]]. - ^ false. -] - -{ #category : #accessing } -XMLAbstractReadStream >> upTo: anObject [ - | writeStream next | - - writeStream := self newWriteStream. - [self atEnd - or: [(next := self next) = anObject]] - whileFalse: [writeStream nextPut: next]. - ^ writeStream contents. -] - -{ #category : #accessing } -XMLAbstractReadStream >> upToEnd [ - | writeStream | - - writeStream := self newWriteStream. - [self atEnd] - whileFalse: [writeStream nextPut: self next]. - ^ writeStream contents. -] - -{ #category : #writing } -XMLAbstractReadStream >> writeStreamCollectionClass [ - self isBinary - ifTrue: [^ ByteArray] - ifFalse: [^ String] -] diff --git a/src/XML-Parser/XMLAbstractReadStreamParser.class.st b/src/XML-Parser/XMLAbstractReadStreamParser.class.st deleted file mode 100644 index b52ab8503..000000000 --- a/src/XML-Parser/XMLAbstractReadStreamParser.class.st +++ /dev/null @@ -1,50 +0,0 @@ -" -This class is a generic abstract parser class for read-stream based parsers. It wraps its input stream with an XMLReadStreamAdapter and can parse tokens using #nextDelimitedBy: and #nextDelimitedByAny: and a temp write stream buffer. -" -Class { - #name : #XMLAbstractReadStreamParser, - #superclass : #Object, - #instVars : [ - 'readStream', - 'writeStream' - ], - #category : #'XML-Parser-Utils' -} - -{ #category : #'instance creation' } -XMLAbstractReadStreamParser class >> new [ - self shouldNotImplement -] - -{ #category : #'instance creation' } -XMLAbstractReadStreamParser class >> on: aStringOrStream [ - ^ self basicNew initialize on: aStringOrStream -] - -{ #category : #tokenizing } -XMLAbstractReadStreamParser >> nextDelimitedBy: aCharacter [ - writeStream reset. - [readStream atEnd - or: [readStream peek = aCharacter]] - whileFalse: [writeStream nextPut: readStream next]. - ^ writeStream contents. -] - -{ #category : #tokenizing } -XMLAbstractReadStreamParser >> nextDelimitedByAny: aCharacterCollection [ - writeStream reset. - [readStream atEnd - or: [aCharacterCollection includes: readStream peek]] - whileFalse: [writeStream nextPut: readStream next]. - ^ writeStream contents. -] - -{ #category : #initialization } -XMLAbstractReadStreamParser >> on: aStringOrStream [ - readStream := - XMLReadStreamAdapter on: - (aStringOrStream isStream - ifTrue: [aStringOrStream] - ifFalse: [aStringOrStream readStream]). - writeStream := (String new: 64) writeStream. -] diff --git a/src/XML-Parser/XMLAnyElementValidator.class.st b/src/XML-Parser/XMLAnyElementValidator.class.st deleted file mode 100644 index d080a6c9f..000000000 --- a/src/XML-Parser/XMLAnyElementValidator.class.st +++ /dev/null @@ -1,23 +0,0 @@ -" -This class validates elements that can contain any content. -" -Class { - #name : #XMLAnyElementValidator, - #superclass : #XMLElementValidator, - #category : #'XML-Parser-Validation' -} - -{ #category : #testing } -XMLAnyElementValidator >> atEnd [ - ^ true -] - -{ #category : #testing } -XMLAnyElementValidator >> isAny [ - ^ true -] - -{ #category : #defaults } -XMLAnyElementValidator >> typeName [ - ^ 'ANY' -] diff --git a/src/XML-Parser/XMLAttribute.class.st b/src/XML-Parser/XMLAttribute.class.st deleted file mode 100644 index 53e52e89a..000000000 --- a/src/XML-Parser/XMLAttribute.class.st +++ /dev/null @@ -1,242 +0,0 @@ -" -The class represents an attribute node stored in an attribute node list. The name of an attribute node can be namespaced using prefixes, but the prefix must be mapped to a namespace URI in the containing element node. Unprefixed attributes have no namespace, not even a default if one is in scope, per the XML namespace standard. - -The element of an attribute can be accessed with #element, but also with #parent, because attributes are modeled so their element is their parent (to simplify the implementation of the XPath library). -" -Class { - #name : #XMLAttribute, - #superclass : #XMLNode, - #instVars : [ - 'name', - 'value' - ], - #category : #'XML-Parser-DOM' -} - -{ #category : #'instance creation' } -XMLAttribute class >> name: aName [ - ^ self named: aName -] - -{ #category : #'instance creation' } -XMLAttribute class >> name: aName value: aValue [ - ^ self new - setName: aName - value: aValue - element: nil -] - -{ #category : #'instance creation' } -XMLAttribute class >> named: aName [ - ^ self - name: aName - value: '' -] - -{ #category : #accessing } -XMLAttribute >> element [ - "reuse an inst var to save memory" - ^ parent -] - -{ #category : #accessing } -XMLAttribute >> element: anElement [ - "reuse an inst var to save memory" - parent := anElement -] - -{ #category : #accessing } -XMLAttribute >> expandedName [ - "Returns the expanded name of the attribute as a string in the form of - '{namespaceURI}localName' if there's a namespace URI or 'localName' if there - isn't" - - ^ self localName expandWithXMLNamespaceURI: self namespaceURI -] - -{ #category : #testing } -XMLAttribute >> hasNamespaceURI [ - ^ self namespaceURI notEmpty -] - -{ #category : #testing } -XMLAttribute >> hasPrefix [ - ^ (self name - indexOf: $: - startingAt: 2) > 0 -] - -{ #category : #testing } -XMLAttribute >> isAttribute [ - ^ true -] - -{ #category : #testing } -XMLAttribute >> isInLanguage: aLanguageTag [ - "Returns true if the receiver is an xml:lang attribute or if its element - or an ancestor element has an xml:lang attribute, and if the value is an IETF - language tag, like 'en-US', that matches aLanguageTag. Matching is - case-insensitive, and aLanguageTag can be partial, like 'en', and use - wildcards, like 'en-*'" - - self name = 'xml:lang' - ifTrue: [^ self matchesLanguage: aLanguageTag] - ifFalse: [^ super isInLanguage: aLanguageTag] -] - -{ #category : #testing } -XMLAttribute >> isNamed: aName [ - "Does the receiver's qualified or local name match the argument?" - - ^ self name isXMLQualifiedOrLocalName: aName -] - -{ #category : #testing } -XMLAttribute >> isNamedAny: aNameCollection [ - "Does the receiver's qualified or local name match any of the names - in aNameCollection?" - - ^ aNameCollection includesXMLName: self name -] - -{ #category : #accessing } -XMLAttribute >> localName [ - "Returns the local name of the receiver, the name minus any leading - prefix and colon like 'local' in 'prefix:local'" - - "this is recomputed from the name to save memory instead of - being stored in an inst var like it is for XMLElement" - ^ self name xmlLocalNameAfterPrefix -] - -{ #category : #testing } -XMLAttribute >> matchesLanguage: aLanguageTag [ - "Returns true if the value is an IETF language tag that matches aLanguageTag. - Matching is case-insensitive, and aLanguageTag can be partial, like 'en', - and use wildcards, like 'en-*'" - - | sourceLanguageTag targetLanguageTag i | - - ((sourceLanguageTag := self value asLowercase) isEmpty - or: [(targetLanguageTag := aLanguageTag asLowercase) isEmpty]) - ifTrue: [^ false]. - - sourceLanguageTag = targetLanguageTag - ifTrue: [^ true]. - - sourceLanguageTag := $- xmlSplit: sourceLanguageTag. - i := 0. - $- - xmlSplit: targetLanguageTag - do: [:each | | sourceLanguageSubTag | - sourceLanguageSubTag := - sourceLanguageTag - at: (i := i + 1) - ifAbsent: [^ false]. - (sourceLanguageSubTag = each - or: [each = '*']) - ifFalse: [^ false]]. - - ^ true. -] - -{ #category : #accessing } -XMLAttribute >> name [ - ^ name ifNil: [name := ''] -] - -{ #category : #accessing } -XMLAttribute >> name: aName [ - self renameWith: [name := aName] -] - -{ #category : #accessing } -XMLAttribute >> namespaceURI [ - ^ self resolvePrefix: self prefix -] - -{ #category : #accessing } -XMLAttribute >> prefix [ - "Returns the prefix of the receiver's name or an empty string if there - isn't one." - - "this is recomputed from the qualified name instead of being stored - in an inst var to save memory." - ^ self name xmlPrefixBeforeLocalName -] - -{ #category : #accessing } -XMLAttribute >> prefix: aPrefix [ - self renameWith: [name := self localName qualifyWithXMLPrefix: aPrefix] -] - -{ #category : #private } -XMLAttribute >> renameWith: aBlock [ - | oldName | - - oldName := self name. - aBlock value. - (self name ~= oldName - and: [self hasParent]) - ifTrue: [ - self parent - renamedAttribute: self - from: oldName - to: self name]. -] - -{ #category : #namespacing } -XMLAttribute >> resolvePrefix: aPrefix [ - "This resolves the attribute prefix aPrefix or returns an empty string - if aPrefix is empty (attributes must be prefixed to have a namespace) or - undeclared" - - ^ self - resolvePrefix: aPrefix - ifUnresolvable: '' -] - -{ #category : #namespacing } -XMLAttribute >> resolvePrefix: aPrefix ifUnresolvable: aBlock [ - "This resolves the attribute prefix aPrefix or returns the result of - evaluated aBlock if aPrefix is empty (attributes must be prefixed to have - a namespace) or undeclared" - - ^ (self hasParent - and: [aPrefix size > 0]) "no default namespace for attributes" - ifTrue: [ - self parent - resolvePrefix: aPrefix - ifUnresolvable: aBlock] - ifFalse: [aBlock value] -] - -{ #category : #initialization } -XMLAttribute >> setName: aName value: aValue element: anElement [ - name := aName. - value := aValue. - parent := anElement. -] - -{ #category : #accessing } -XMLAttribute >> sortKey [ - ^ self name -] - -{ #category : #accessing } -XMLAttribute >> value [ - ^ value ifNil: [value := ''] -] - -{ #category : #accessing } -XMLAttribute >> value: aString [ - value := aString -] - -{ #category : #printing } -XMLAttribute >> writeXMLOn: aWriter [ - aWriter - writeStringName: self name; - nextPut: $=; - writeEscapedContentString: self value -] diff --git a/src/XML-Parser/XMLAttributeDeclaration.class.st b/src/XML-Parser/XMLAttributeDeclaration.class.st deleted file mode 100644 index 8d71faea0..000000000 --- a/src/XML-Parser/XMLAttributeDeclaration.class.st +++ /dev/null @@ -1,86 +0,0 @@ -" -This is a class for declarations with definitions for single attributes. (An ATTLIST with multiple attribute defs is the same as a series of separate ATTLISTs for each def) -" -Class { - #name : #XMLAttributeDeclaration, - #superclass : #XMLDeclarationNode, - #instVars : [ - 'element', - 'attribute', - 'type', - 'defaultPragma', - 'defaultValue' - ], - #category : #'XML-Parser-DOM' -} - -{ #category : #'instance creation' } -XMLAttributeDeclaration class >> element: anElementName attribute: anAttributeName type: aType defaultPragma: aDefaultPragma defaultValue: aDefaultValue [ - ^ self new - element: anElementName; - attribute: anAttributeName; - type: aType; - defaultPragma: aDefaultPragma; - defaultValue: aDefaultValue -] - -{ #category : #accessing } -XMLAttributeDeclaration >> attribute [ - ^ attribute ifNil: [attribute := ''] -] - -{ #category : #accessing } -XMLAttributeDeclaration >> attribute: anAttributeName [ - attribute := anAttributeName -] - -{ #category : #accessing } -XMLAttributeDeclaration >> defaultPragma [ - ^ defaultPragma ifNil: [defaultPragma := ''] -] - -{ #category : #accessing } -XMLAttributeDeclaration >> defaultPragma: aDefaultPragma [ - defaultPragma := aDefaultPragma -] - -{ #category : #accessing } -XMLAttributeDeclaration >> defaultValue [ - ^ defaultValue ifNil: [defaultValue := ''] -] - -{ #category : #accessing } -XMLAttributeDeclaration >> defaultValue: aDefaultValue [ - defaultValue := aDefaultValue -] - -{ #category : #accessing } -XMLAttributeDeclaration >> element [ - ^ element ifNil: [element := ''] -] - -{ #category : #accessing } -XMLAttributeDeclaration >> element: anElementName [ - element := anElementName -] - -{ #category : #accessing } -XMLAttributeDeclaration >> type [ - ^ type ifNil: [type := ''] -] - -{ #category : #accessing } -XMLAttributeDeclaration >> type: aType [ - type := aType -] - -{ #category : #printing } -XMLAttributeDeclaration >> writeXMLOn: aWriter [ - aWriter attributeDeclaration - element: self element; - attribute: self attribute; - type: self type; - defaultPragma: self defaultPragma; - defaultValue: self defaultValue; - write -] diff --git a/src/XML-Parser/XMLAttributeDefaultValidator.class.st b/src/XML-Parser/XMLAttributeDefaultValidator.class.st deleted file mode 100644 index 75184ed4a..000000000 --- a/src/XML-Parser/XMLAttributeDefaultValidator.class.st +++ /dev/null @@ -1,103 +0,0 @@ -" -This is a base class for attribute default validators that implement constraints from the default declaration part of an ATTLIST attribute definition. -" -Class { - #name : #XMLAttributeDefaultValidator, - #superclass : #Object, - #instVars : [ - 'attribute' - ], - #category : #'XML-Parser-Validation' -} - -{ #category : #'instance creation' } -XMLAttributeDefaultValidator class >> attribute: anAttribute [ - ^ self - attribute: anAttribute - value: '' -] - -{ #category : #'instance creation' } -XMLAttributeDefaultValidator class >> attribute: anAttribute value: aDefaultValue [ - ^ self new - setAttribute: anAttribute - value: aDefaultValue -] - -{ #category : #defaults } -XMLAttributeDefaultValidator class >> standaloneExternalClass [ - ^ self -] - -{ #category : #accessing } -XMLAttributeDefaultValidator >> attribute [ - ^ attribute -] - -{ #category : #testing } -XMLAttributeDefaultValidator >> isFixedValue [ - ^ false -] - -{ #category : #testing } -XMLAttributeDefaultValidator >> isImplied [ - ^ false -] - -{ #category : #testing } -XMLAttributeDefaultValidator >> isRequired [ - ^ false -] - -{ #category : #testing } -XMLAttributeDefaultValidator >> isValue [ - ^ false -] - -{ #category : #printing } -XMLAttributeDefaultValidator >> printNameAndValueOn: aStream [ - aStream - nextPutAll: self attribute; - nextPutAll: '="'; - nextPutAll: self value; - nextPut: $" -] - -{ #category : #printing } -XMLAttributeDefaultValidator >> printOn: aStream [ - super printOn: aStream. - - aStream nextPut: $(. - self printNameAndValueOn: aStream. - aStream nextPut: $). -] - -{ #category : #processing } -XMLAttributeDefaultValidator >> processedDefaultForAbsentAttributeValue [ - ^ nil -] - -{ #category : #processing } -XMLAttributeDefaultValidator >> processedDefaultForPresentAttributeValue: anAttributeValue [ - ^ anAttributeValue -] - -{ #category : #initialization } -XMLAttributeDefaultValidator >> setAttribute: anAttribute value: aDefaultValue [ - attribute := anAttribute -] - -{ #category : #validating } -XMLAttributeDefaultValidator >> validatedDefaultForAbsentAttributeValue [ - ^ nil -] - -{ #category : #validating } -XMLAttributeDefaultValidator >> validatedDefaultForPresentAttributeValue: anAttributeValue [ - ^ anAttributeValue -] - -{ #category : #accessing } -XMLAttributeDefaultValidator >> value [ - ^ '' -] diff --git a/src/XML-Parser/XMLAttributeDictionary.class.st b/src/XML-Parser/XMLAttributeDictionary.class.st deleted file mode 100644 index 8784e6f27..000000000 --- a/src/XML-Parser/XMLAttributeDictionary.class.st +++ /dev/null @@ -1,161 +0,0 @@ -" -This class is an OrderPreservingStringDictionary for XML attributes that returns empty strings instead of raising errors when absent keys are looked up. It has messages to lookup the namespace URI of an attribute key and to lookup an attribute value or association by local or qualified name and namespace URI. -" -Class { - #name : #XMLAttributeDictionary, - #superclass : #OrderPreservingStringDictionary, - #category : #'XML-Parser' -} - -{ #category : #converting } -XMLAttributeDictionary >> asXMLAttributeDictionary [ - ^ self -] - -{ #category : #accessing } -XMLAttributeDictionary >> associationAtName: aQualifiedOrLocalName [ - ^ self - associationAtName: aQualifiedOrLocalName - ifAbsent: [nil] -] - -{ #category : #accessing } -XMLAttributeDictionary >> associationAtName: aQualifiedOrLocalName ifAbsent: aBlock [ - ^ self - associationAt: aQualifiedOrLocalName - ifAbsent: [ - aQualifiedOrLocalName xmlPrefixBeforeLocalName isEmpty - ifTrue: [ - self keysDo: [:each | - (each isXMLQualifiedOrLocalName: aQualifiedOrLocalName) - ifTrue: [^ self associationAt: each]]]. - aBlock value] -] - -{ #category : #accessing } -XMLAttributeDictionary >> associationAtName: aQualifiedOrLocalName namespaceURI: aURI [ - ^ self - associationAtName: aQualifiedOrLocalName - namespaceURI: aURI - ifAbsent: [nil] -] - -{ #category : #accessing } -XMLAttributeDictionary >> associationAtName: aQualifiedOrLocalName namespaceURI: aURI ifAbsent: aBlock [ - | namePrefix | - - (namePrefix := aQualifiedOrLocalName xmlPrefixBeforeLocalName) isEmpty - ifTrue: [ - "aQualifiedOrLocalName has no prefix, so check for an - attribute with a matching local name and namespace URI" - self keysDo: [:each | - (each isXMLQualifiedOrLocalName: aQualifiedOrLocalName) - ifTrue: [| keyPrefix | - (keyPrefix := each xmlPrefixBeforeLocalName) isEmpty - ifTrue: [ - "unprefixed attribute have no namespace URI" - aURI isEmpty - ifTrue: [^ self associationAt: each]] - ifFalse: [ - (self resolvePrefix: keyPrefix) = aURI - ifTrue: [^ self associationAt: each]]]]] - ifFalse: [ - "aQualifiedOrLocalName is a qualified name, look it up exactly" - (self resolvePrefix: namePrefix) = aURI - ifTrue: [ - ^ self - associationAt: aQualifiedOrLocalName - ifAbsent: aBlock]]. - - ^ aBlock value. -] - -{ #category : #private } -XMLAttributeDictionary >> at: aKey newPut: aValue [ - "should be identical to StandardOrderedDictionary>>#at:put: except - it returns a boolean to tell if the key is new" - | oldSize | - - oldSize := dictionary size. - dictionary - at: aKey - put: aValue. - dictionary size > oldSize - ifTrue: [ - orderedKeys size > oldSize - ifFalse: [self growOrderedKeys]. - orderedKeys at: oldSize + 1 put: aKey. - ^ true]. - ^ false. -] - -{ #category : #accessing } -XMLAttributeDictionary >> atName: aQualifiedOrLocalName [ - ^ self - atName: aQualifiedOrLocalName - ifAbsent: [''] -] - -{ #category : #accessing } -XMLAttributeDictionary >> atName: aQualifiedOrLocalName ifAbsent: aBlock [ - ^ (self - associationAtName: aQualifiedOrLocalName - ifAbsent: [^ aBlock value]) - ifNil: [aBlock value] - ifNotNil: [:association | association value] -] - -{ #category : #accessing } -XMLAttributeDictionary >> atName: aQualifiedOrLocalName namespaceURI: aURI [ - ^ self - atName: aQualifiedOrLocalName - namespaceURI: aURI - ifAbsent: [''] -] - -{ #category : #accessing } -XMLAttributeDictionary >> atName: aQualifiedOrLocalName namespaceURI: aURI ifAbsent: aBlock [ - ^ (self - associationAtName: aQualifiedOrLocalName - namespaceURI: aURI) - ifNil: [aBlock value] - ifNotNil: [:association | association value] -] - -{ #category : #private } -XMLAttributeDictionary >> namespaceScope [ - ^ nil -] - -{ #category : #accessing } -XMLAttributeDictionary >> namespaceURIOf: aKey [ - "Returns the namespace URI of the attribute name aKey" - - | prefix | - - ^ (self usesNamespaces - and: [(prefix := aKey xmlPrefixBeforeLocalName) notEmpty]) - ifTrue: [self resolvePrefix: prefix] - ifFalse: [''] -] - -{ #category : #private } -XMLAttributeDictionary >> resolvePrefix: aPrefix [ - ^ self - resolvePrefix: aPrefix - ifUnresolvable: '' -] - -{ #category : #private } -XMLAttributeDictionary >> resolvePrefix: aPrefix ifUnresolvable: aBlock [ - ^ aBlock value -] - -{ #category : #initialization } -XMLAttributeDictionary >> setNamespaceScope: aNamespaceScope [ -] - -{ #category : #testing } -XMLAttributeDictionary >> usesNamespaces [ - ^ false -] diff --git a/src/XML-Parser/XMLAttributeFixedValueDefaultValidator.class.st b/src/XML-Parser/XMLAttributeFixedValueDefaultValidator.class.st deleted file mode 100644 index 4886c5272..000000000 --- a/src/XML-Parser/XMLAttributeFixedValueDefaultValidator.class.st +++ /dev/null @@ -1,38 +0,0 @@ -" -This class will put a default value for an attribute if the attribute is absent and also makes sure that any value matches the default (the #FIXED constraint). -" -Class { - #name : #XMLAttributeFixedValueDefaultValidator, - #superclass : #XMLAttributeValueDefaultValidator, - #category : #'XML-Parser-Validation' -} - -{ #category : #defaults } -XMLAttributeFixedValueDefaultValidator class >> standaloneExternalClass [ - ^ XMLStandaloneExternalAttributeFixedValueDefaultValidator -] - -{ #category : #private } -XMLAttributeFixedValueDefaultValidator >> errorFixedAttributeValueCannotChange [ - XMLValidationException - formatSignal: 'Fixed attribute "{1}" can only have "{2}" as its value' - with: self attribute - with: self value -] - -{ #category : #testing } -XMLAttributeFixedValueDefaultValidator >> isFixedValue [ - ^ true -] - -{ #category : #processing } -XMLAttributeFixedValueDefaultValidator >> processedDefaultForPresentAttributeValue: anAttributeValue [ - ^ self value -] - -{ #category : #validating } -XMLAttributeFixedValueDefaultValidator >> validatedDefaultForPresentAttributeValue: anAttributeValue [ - anAttributeValue = self value - ifFalse: [self errorFixedAttributeValueCannotChange]. - ^ anAttributeValue. -] diff --git a/src/XML-Parser/XMLAttributeImpliedDefaultValidator.class.st b/src/XML-Parser/XMLAttributeImpliedDefaultValidator.class.st deleted file mode 100644 index d6388aa09..000000000 --- a/src/XML-Parser/XMLAttributeImpliedDefaultValidator.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -This class allows an attribute to be absent (the #IMPLIED constraint). -" -Class { - #name : #XMLAttributeImpliedDefaultValidator, - #superclass : #XMLAttributeDefaultValidator, - #category : #'XML-Parser-Validation' -} - -{ #category : #testing } -XMLAttributeImpliedDefaultValidator >> isImplied [ - ^ true -] diff --git a/src/XML-Parser/XMLAttributeList.class.st b/src/XML-Parser/XMLAttributeList.class.st deleted file mode 100644 index 4b5814515..000000000 --- a/src/XML-Parser/XMLAttributeList.class.st +++ /dev/null @@ -1,375 +0,0 @@ -" -This class represents an ordered list of attribute nodes. It is not the default attribute list class, but it can be used by injecting it into a DOM parser before parsing: - (parser := XMLDOMParser on: xmlSource) - nodeFactory: - (XMLPluggableNodeFactory new - attributeListClass: XMLAttributeList); - parseDocument. - -It should be used over the default class when you want to reduce memory use at the cost of slower attribute lookup. -" -Class { - #name : #XMLAttributeList, - #superclass : #XMLObservableList, - #category : #'XML-Parser-DOM' -} - -{ #category : #'instance creation' } -XMLAttributeList class >> new [ - ^ self new: 5 -] - -{ #category : #adding } -XMLAttributeList >> addAttributeAssociation: anAssociation [ - ^ self - addAttributeName: anAssociation key - value: anAssociation value -] - -{ #category : #adding } -XMLAttributeList >> addAttributeName: aName value: aValue [ - ^ self addLast: - (self attributeClass - name: aName - value: aValue) -] - -{ #category : #private } -XMLAttributeList >> afterAdding: aNode at: anIndex [ - (self - removeDuplicateOf: aNode - notAt: anIndex) - ifNotNil: [:duplicate | - duplicate = aNode - ifTrue: [^ self]]. - observer - ifNotNil: [observer addedAttribute: aNode]. -] - -{ #category : #private } -XMLAttributeList >> afterAddingLast: aNode [ - (self - removeDuplicateOf: aNode - notAt: self size) - ifNotNil: [:duplicate | - duplicate = aNode - ifTrue: [^ self]]. - observer - ifNotNil: [observer addedAttribute: aNode]. -] - -{ #category : #private } -XMLAttributeList >> afterAddingToCopyLast: aNode [ - observer - ifNotNil: [observer addedAttribute: aNode] -] - -{ #category : #private } -XMLAttributeList >> afterRemoving: aNode [ - observer - ifNotNil: [observer removedAttribute: aNode]. -] - -{ #category : #converting } -XMLAttributeList >> asDictionary [ - ^ self attributes -] - -{ #category : #accessing } -XMLAttributeList >> attributeAssociations [ - ^ self collect: [:each | each name -> each value] -] - -{ #category : #accessing } -XMLAttributeList >> attributeAt: aName [ - ^ self attributeValueAt: aName -] - -{ #category : #accessing } -XMLAttributeList >> attributeAt: aName ifAbsent: aBlock [ - ^ self - attributeValueAt: aName - ifAbsent: aBlock -] - -{ #category : #accessing } -XMLAttributeList >> attributeAt: aName ifAbsentPut: aBlock [ - ^ self - attributeValueAt: aName - ifAbsentPut: aBlock -] - -{ #category : #accessing } -XMLAttributeList >> attributeAt: aName put: aValue [ - ^ self - attributeValueAt: aName - put: aValue -] - -{ #category : #defaults } -XMLAttributeList >> attributeClass [ - "Can be overridden in subclasses to use a custom attribute class" - - ^ XMLAttribute - -] - -{ #category : #accessing } -XMLAttributeList >> attributeNames [ - ^ self collect: [:each | each name] -] - -{ #category : #enumerating } -XMLAttributeList >> attributeNamesAndValuesDo: aTwoArgumentBlock [ - self do: [:each | - aTwoArgumentBlock - value: each name - value: each value] -] - -{ #category : #enumerating } -XMLAttributeList >> attributeNamesDo: aBlock [ - self do: [:each | aBlock value: each name] -] - -{ #category : #accessing } -XMLAttributeList >> attributeNodeAt: aName [ - ^ self - attributeNodeAt: aName - ifAbsent: [self defaultValue] -] - -{ #category : #accessing } -XMLAttributeList >> attributeNodeAt: aName ifAbsent: aBlock [ - self do: [:each | - (each isNamed: aName) - ifTrue: [^ each]]. - ^ aBlock value. -] - -{ #category : #accessing } -XMLAttributeList >> attributeNodeAt: aName namespaceURI: aURI [ - ^ self - attributeNodeAt: aName - namespaceURI: aURI - ifAbsent: [self defaultValue] -] - -{ #category : #accessing } -XMLAttributeList >> attributeNodeAt: aName namespaceURI: aURI ifAbsent: aBlock [ - self do: [:each | - ((each isNamed: aName) - and: [each namespaceURI = aURI]) - ifTrue: [^ each]]. - ^ aBlock value. -] - -{ #category : #private } -XMLAttributeList >> attributeValueAt: aName [ - ^ self - attributeValueAt: aName - ifAbsent: [''] -] - -{ #category : #private } -XMLAttributeList >> attributeValueAt: aName ifAbsent: aBlock [ - | i | - - ^ (i := self indexOfAttributeValueAt: aName) > 0 - ifTrue: [(self at: i) value] - ifFalse: [aBlock value] -] - -{ #category : #private } -XMLAttributeList >> attributeValueAt: aName ifAbsentPut: aBlock [ - ^ self - attributeValueAt: aName - ifAbsent: [ - "use #addToCopyLast:, since we know it's not in the collection" - (self addToCopyLast: - (self attributeClass - name: aName - value: aBlock value)) value] -] - -{ #category : #private } -XMLAttributeList >> attributeValueAt: aName put: aValue [ - | i | - - (i := self indexOfAttributeValueAt: aName) > 0 - ifTrue: [(self at: i) value: aValue] - ifFalse: [ - "use #addToCopyLast: since we know it's not already in the collection" - self addToCopyLast: - (self attributeClass - name: aName - value: aValue)]. - ^ aValue. -] - -{ #category : #accessing } -XMLAttributeList >> attributes [ - | dictionary | - - dictionary := self attributesClass new: self size. - self do: [:each | - dictionary - at: each name - put: each value]. - ^ dictionary. -] - -{ #category : #defaults } -XMLAttributeList >> attributesClass [ - "Can be overridden in subclasses to use a custom collection - class for #attributes to use when returning attribute associations" - - ^ OrderPreservingStringDictionary -] - -{ #category : #private } -XMLAttributeList >> duplicateIndexOf: aNode notAt: anIndex [ - "like the superclass version, but it considers nodes with - the same name to be duplicates" - 1 to: anIndex - 1 do: [:i | | node | - (node := collection at: i) name = aNode name - ifTrue: [^ i]]. - - anIndex + 1 to: collection size do: [:i | | node | - (node := collection at: i) name = aNode name - ifTrue: [^ i]]. - - ^ 0. -] - -{ #category : #testing } -XMLAttributeList >> includesAttribute: aName [ - ^ (self indexOfAttributeValueAt: aName) > 0 -] - -{ #category : #testing } -XMLAttributeList >> includesAttributeNode: aName [ - self - attributeNodeAt: aName - ifAbsent: [^ false]. - ^ true. -] - -{ #category : #testing } -XMLAttributeList >> includesAttributeNode: aName namespaceURI: aURI [ - self - attributeNodeAt: aName - namespaceURI: aURI - ifAbsent: [^ false]. - ^ true. -] - -{ #category : #private } -XMLAttributeList >> indexOfAttributeValueAt: aName [ - "Returns the index of the attribute value with the exact name of aName" - - "this needs to be fast, for #attributeValueAt:... methods, so - use #to:do: for speed" - 1 to: collection size do: [:i | | node | - (node := collection at: i) name = aName - ifTrue: [^ i]]. - ^ 0. -] - -{ #category : #removing } -XMLAttributeList >> removeAttribute: aName [ - ^ (self removeAt: (self indexOfAttributeValueAt: aName)) value -] - -{ #category : #removing } -XMLAttributeList >> removeAttribute: aName ifAbsent: aBlock [ - | i | - - (i := self indexOfAttributeValueAt: aName) > 0 - ifTrue: [^ (self removeAt: i) value] - ifFalse: [^ aBlock value]. -] - -{ #category : #notifying } -XMLAttributeList >> renamedAttribute: anAttribute from: anOldName to: aNewName [ - self - removeDuplicateOf: anAttribute - notAt: (self indexOf: anAttribute) -] - -{ #category : #initialization } -XMLAttributeList >> setAttributes: anAssociationCollection [ - self removeAll. - anAssociationCollection associationsDo: [:each | - self addAttributeAssociation: each]. -] - -{ #category : #private } -XMLAttributeList >> setAttributesFromOrderPreservingDictionary: anOrderPreservingDictionary [ - "This should only be sent by DOM parsers/builders, not public API users" - | orderedKeys | - - "Add the XMLAttributes in order directly to the collection to avoid - sending notifications that would do unneeded, costly namespace prefix - revalidation. - Use the internal #orderedKeys with #to:do: to create an inlined #keysDo: - without block closure overhead." - orderedKeys := anOrderPreservingDictionary orderedKeys. - 1 to: anOrderPreservingDictionary size do: [:i | | key | - key := orderedKeys at: i. - collection addLast: - (self attributeClass new - setName: key - value: - "use dictionary at:ifAbsent: for speed over at:" - (anOrderPreservingDictionary - at: key - ifAbsent: nil) - element: observer)]. -] - -{ #category : #sorting } -XMLAttributeList >> sort [ - self sort: [:a :b | a sortKey <= b sortKey] -] - -{ #category : #private } -XMLAttributeList >> writeAttributesOn: aWriter [ - "use #to:do: with direct access for fast writing" - 1 to: collection size do: [:i | | attribute | - attribute := collection at: i. - aWriter - writeAttributeName: attribute name - value: attribute value] -] - -{ #category : #private } -XMLAttributeList >> writeCanonicalAttributesOn: aWriter [ - | sortedAttributes | - - (sortedAttributes := self asArray) sort: [:a :b | | prefixOfA prefixOfB | - prefixOfA := a prefix. - prefixOfB := b prefix. - prefixOfA = prefixOfB - ifTrue: [ - (a name xmlLocalNameAfterPrefix: prefixOfA) - <= (b name xmlLocalNameAfterPrefix: prefixOfB)] - ifFalse: [| uriOfA uriOfB | - "the namespace URI is the primary key and - the local name is the secondary key" - uriOfA := a resolvePrefix: prefixOfA. - uriOfB := b resolvePrefix: prefixOfB. - uriOfA < uriOfB - or: [ - uriOfA = uriOfB - and: [ - (a name xmlLocalNameAfterPrefix: prefixOfA) - <= (b name xmlLocalNameAfterPrefix: prefixOfB)]]]]. - - "use #to:do: for fast writing" - 1 to: sortedAttributes size do: [:i | | attribute | - attribute := sortedAttributes at: i. - aWriter - writeAttributeName: attribute name - value: attribute value]. -] diff --git a/src/XML-Parser/XMLAttributeRequiredDefaultValidator.class.st b/src/XML-Parser/XMLAttributeRequiredDefaultValidator.class.st deleted file mode 100644 index ed33a2c0c..000000000 --- a/src/XML-Parser/XMLAttributeRequiredDefaultValidator.class.st +++ /dev/null @@ -1,25 +0,0 @@ -" -This class makes sure an attribute is present (the #REQUIRED constrant). -" -Class { - #name : #XMLAttributeRequiredDefaultValidator, - #superclass : #XMLAttributeDefaultValidator, - #category : #'XML-Parser-Validation' -} - -{ #category : #private } -XMLAttributeRequiredDefaultValidator >> errorRequiredAttributeMissing [ - XMLValidationException - formatSignal: 'Required attribute "{1}" is missing' - with: self attribute -] - -{ #category : #testing } -XMLAttributeRequiredDefaultValidator >> isRequired [ - ^ true -] - -{ #category : #validating } -XMLAttributeRequiredDefaultValidator >> validatedDefaultForAbsentAttributeValue [ - self errorRequiredAttributeMissing -] diff --git a/src/XML-Parser/XMLAttributeSpec.class.st b/src/XML-Parser/XMLAttributeSpec.class.st deleted file mode 100644 index 7b609615b..000000000 --- a/src/XML-Parser/XMLAttributeSpec.class.st +++ /dev/null @@ -1,18 +0,0 @@ -" -This is a base class for attribute specifications. Subclasses need to implement matchesAttributes: to return true if the argument attribute dictionary matches the spec and false otherwise. -" -Class { - #name : #XMLAttributeSpec, - #superclass : #Object, - #category : #'XML-Parser-Utils' -} - -{ #category : #converting } -XMLAttributeSpec >> asXMLAttributeSpec [ - ^ self -] - -{ #category : #matching } -XMLAttributeSpec >> matchesAttributes: anAttributeDictionary [ - self subclassResponsibility -] diff --git a/src/XML-Parser/XMLAttributeValidator.class.st b/src/XML-Parser/XMLAttributeValidator.class.st deleted file mode 100644 index 453b190c9..000000000 --- a/src/XML-Parser/XMLAttributeValidator.class.st +++ /dev/null @@ -1,323 +0,0 @@ -" -This is a base class for attribute validators. -" -Class { - #name : #XMLAttributeValidator, - #superclass : #Object, - #instVars : [ - 'element', - 'attribute', - 'defaultValidator' - ], - #classVars : [ - 'NormalizedSpace' - ], - #category : #'XML-Parser-Validation' -} - -{ #category : #'instance creation' } -XMLAttributeValidator class >> element: anElement attribute: anAttribute defaultValidator: aDefaultValidator [ - ^ self new - setElement: anElement - attribute: anAttribute - defaultValidator: aDefaultValidator -] - -{ #category : #'class initialization' } -XMLAttributeValidator class >> initialize [ - "self initialize" - - "stored in a class var for faster access" - NormalizedSpace := Character space -] - -{ #category : #defaults } -XMLAttributeValidator class >> standaloneExternalClass [ - ^ self -] - -{ #category : #accessing } -XMLAttributeValidator >> attribute [ - ^ attribute -] - -{ #category : #accessing } -XMLAttributeValidator >> defaultValidator [ - ^ defaultValidator -] - -{ #category : #accessing } -XMLAttributeValidator >> element [ - ^ element -] - -{ #category : #private } -XMLAttributeValidator >> errorInvalidDefaultAttributeValue: aDefaultValue [ - XMLValidationException - formatSignal: - 'Invalid default value "{1}" in declaration for ', - 'attribute "{2}" of element <3>' - with: aDefaultValue - with: self attribute - with: self element -] - -{ #category : #private } -XMLAttributeValidator >> errorInvalidXMLIDAttributeDeclaration [ - XMLValidationException signal: - 'All "xml:id" attributes must be declared to be of ID type' -] - -{ #category : #private } -XMLAttributeValidator >> errorInvalidXMLSpaceAttributeDeclaration [ - XMLValidationException - formatSignal: - 'Attribute "xml:space" of element <{1}> must be declared as ', - 'an enumeration type with "default" and/or "preserve" values' - with: self element -] - -{ #category : #private } -XMLAttributeValidator >> errorNormalizedStandaloneExternalAttribute [ - XMLValidationException - formatSignal: - 'Externally defined attribute "{1}" of element <{2}> required ', - 'further value normalizaiton in standalone="yes" document' - with: self attribute - with: self element -] - -{ #category : #private } -XMLAttributeValidator >> furtherNormalizeAttributeValue: aSemiNormalizedAttributeValue [ - "The tokenizer normalizes all non-char escaped whitespace in attribute - values to spaces (0x20). This further normalizes them by removing leading - and trailing spaces and turing multiple spaces to single spaces." - | writeStream isInWhitespace | - - aSemiNormalizedAttributeValue size > 0 "optimization" - ifFalse: [^ aSemiNormalizedAttributeValue]. - - "must use #writeStream instead of 'WriteStream on:' to get a 0-based stream - on Gemstone" - writeStream := (String new: aSemiNormalizedAttributeValue size) writeStream. - isInWhitespace := false. - "use #to:do: for speed" - 1 to: aSemiNormalizedAttributeValue size do: [:i | | nextChar | - (nextChar := aSemiNormalizedAttributeValue at: i) == NormalizedSpace - ifTrue: [ - isInWhitespace - ifFalse: [isInWhitespace := true]] - ifFalse: [ - isInWhitespace - ifTrue: [ - writeStream position > 0 - ifTrue: [writeStream nextPut: NormalizedSpace]. - isInWhitespace := false]. - writeStream nextPut: nextChar]]. - ^ writeStream contents. -] - -{ #category : #initialization } -XMLAttributeValidator >> initializeWithValidatorsFrom: aValidatorContainer [ - (self mustFurtherNormalizeAttributeValue - and: [self defaultValidator isValue]) - ifTrue: [ - self defaultValidator value: - (self furtherNormalizeAttributeValue: - self defaultValidator value)] -] - -{ #category : #testing } -XMLAttributeValidator >> isCData [ - ^ false -] - -{ #category : #testing } -XMLAttributeValidator >> isEntities [ - ^ false -] - -{ #category : #testing } -XMLAttributeValidator >> isEntity [ - ^ false -] - -{ #category : #testing } -XMLAttributeValidator >> isEnumeration [ - ^ false -] - -{ #category : #testing } -XMLAttributeValidator >> isID [ - ^ false -] - -{ #category : #testing } -XMLAttributeValidator >> isIDRef [ - ^ false -] - -{ #category : #testing } -XMLAttributeValidator >> isIDRefs [ - ^ false -] - -{ #category : #testing } -XMLAttributeValidator >> isNmtoken [ - ^ false -] - -{ #category : #testing } -XMLAttributeValidator >> isNmtokens [ - ^ false -] - -{ #category : #testing } -XMLAttributeValidator >> isNotationEnumeration [ - ^ false -] - -{ #category : #testing } -XMLAttributeValidator >> isStandaloneExternal [ - "this is overridden in each standalone external subclass to return - true instead of just returning a boolean inst var to save memory" - ^ false -] - -{ #category : #testing } -XMLAttributeValidator >> isXMLID [ - ^ false -] - -{ #category : #testing } -XMLAttributeValidator >> mustFurtherNormalizeAttributeValue [ - ^ true -] - -{ #category : #printing } -XMLAttributeValidator >> printOn: aStream [ - super printOn: aStream. - - aStream - nextPutAll: '(<'; - nextPutAll: self element; - space. - self defaultValidator printNameAndValueOn: aStream. - aStream nextPutAll: '>)'. -] - -{ #category : #processing } -XMLAttributeValidator >> processAttributes: aDictionary [ - | attributeAssociation normalizedValue | - - attributeAssociation := - aDictionary - associationAt: self attribute - ifAbsent: [ - self defaultValidator processedDefaultForAbsentAttributeValue - ifNotNil: [:defaultValue | - aDictionary - at: self attribute - put: defaultValue]. - ^ self]. - - self mustFurtherNormalizeAttributeValue - ifTrue: [ - normalizedValue := - self furtherNormalizeAttributeValue: - attributeAssociation value] - ifFalse: [normalizedValue := attributeAssociation value]. - attributeAssociation value: - (self defaultValidator processedDefaultForPresentAttributeValue: - normalizedValue). -] - -{ #category : #initialization } -XMLAttributeValidator >> setElement: anElement attribute: anAttribute defaultValidator: aDefaultValidator [ - element := anElement. - attribute := anAttribute. - defaultValidator := aDefaultValidator. -] - -{ #category : #private } -XMLAttributeValidator >> spaceSeparatedListValuesIn: aSpaceSeparatedList do: aBlock [ - NormalizedSpace - xmlSplit: aSpaceSeparatedList - do: aBlock -] - -{ #category : #validating } -XMLAttributeValidator >> validateAttributeDeclaration [ - (self attribute at: 1) == $x "optimization" - ifTrue: [ - (self attribute = 'xml:id') - ifTrue: [^ self validateXMLIDAttributeDeclaration]. - (self attribute = 'xml:space') - ifTrue: [^ self validateXMLSpaceAttributeDeclaration]]. - - self defaultValidator isValue - ifTrue: [ - self validateAttributeDefaultValue: - self defaultValidator value]. -] - -{ #category : #validating } -XMLAttributeValidator >> validateAttributeDefaultValue: aDefaultValue [ - "This is overridden in subclasses to check default values when validating - the declaration, but CDATA types should not be validated, and ID types - cannot have default values at all" -] - -{ #category : #validating } -XMLAttributeValidator >> validateAttributeValue: aValue [ - "This is overridden in subclasses to check attribute values" -] - -{ #category : #validating } -XMLAttributeValidator >> validateAttributes: aDictionary [ - | attributeAssociation wasAbsent | - - wasAbsent := false. - attributeAssociation := - aDictionary - associationAt: self attribute - ifAbsent: [ - wasAbsent := true. - self defaultValidator validatedDefaultForAbsentAttributeValue - ifNil: [^ self] - ifNotNil: [:defaultValue | - aDictionary add: self attribute -> defaultValue]]. - - wasAbsent - ifFalse: [| normalizedValue | - self mustFurtherNormalizeAttributeValue - ifTrue: [ - normalizedValue := - self furtherNormalizeAttributeValue: - attributeAssociation value. - self isStandaloneExternal - ifTrue: [ - "since further normalization just condences multiple spaces - to single spaces and removes trailing and leading spaces, - comparing the sizes after is enough to detect if it was - done" - normalizedValue size = attributeAssociation value size - ifFalse: [ - self errorNormalizedStandaloneExternalAttribute]]] - ifFalse: [normalizedValue := attributeAssociation value]. - attributeAssociation value: - (self defaultValidator validatedDefaultForPresentAttributeValue: - normalizedValue)]. - - self validateAttributeValue: attributeAssociation value. -] - -{ #category : #validating } -XMLAttributeValidator >> validateXMLIDAttributeDeclaration [ - self errorInvalidXMLIDAttributeDeclaration -] - -{ #category : #validating } -XMLAttributeValidator >> validateXMLSpaceAttributeDeclaration [ - self errorInvalidXMLSpaceAttributeDeclaration -] diff --git a/src/XML-Parser/XMLAttributeValueDefaultValidator.class.st b/src/XML-Parser/XMLAttributeValueDefaultValidator.class.st deleted file mode 100644 index 251f7c616..000000000 --- a/src/XML-Parser/XMLAttributeValueDefaultValidator.class.st +++ /dev/null @@ -1,47 +0,0 @@ -" -This class will put a default value for an attribute if the attribute is absent. -" -Class { - #name : #XMLAttributeValueDefaultValidator, - #superclass : #XMLAttributeDefaultValidator, - #instVars : [ - 'value' - ], - #category : #'XML-Parser-Validation' -} - -{ #category : #defaults } -XMLAttributeValueDefaultValidator class >> standaloneExternalClass [ - ^ XMLStandaloneExternalAttributeValueDefaultValidator -] - -{ #category : #testing } -XMLAttributeValueDefaultValidator >> isValue [ - ^ true -] - -{ #category : #processing } -XMLAttributeValueDefaultValidator >> processedDefaultForAbsentAttributeValue [ - ^ self value -] - -{ #category : #initialization } -XMLAttributeValueDefaultValidator >> setAttribute: anAttribute value: aDefaultValue [ - attribute := anAttribute. - value := aDefaultValue. -] - -{ #category : #validating } -XMLAttributeValueDefaultValidator >> validatedDefaultForAbsentAttributeValue [ - ^ self value -] - -{ #category : #accessing } -XMLAttributeValueDefaultValidator >> value [ - ^ value -] - -{ #category : #accessing } -XMLAttributeValueDefaultValidator >> value: aDefaultValue [ - value := aDefaultValue -] diff --git a/src/XML-Parser/XMLBasicAttributeSpec.class.st b/src/XML-Parser/XMLBasicAttributeSpec.class.st deleted file mode 100644 index 608e72e06..000000000 --- a/src/XML-Parser/XMLBasicAttributeSpec.class.st +++ /dev/null @@ -1,81 +0,0 @@ -" -A simple attribute spec that checks for attributes being present and optionally having a specific value. -" -Class { - #name : #XMLBasicAttributeSpec, - #superclass : #XMLAttributeSpec, - #instVars : [ - 'attributeSpec' - ], - #category : #'XML-Parser-Utils' -} - -{ #category : #'instance creation' } -XMLBasicAttributeSpec class >> attributes: aDictionaryOrCollectionOfAssociationsAndStrings [ - ^ self new setAttributes: aDictionaryOrCollectionOfAssociationsAndStrings -] - -{ #category : #adding } -XMLBasicAttributeSpec >> addAttribute: anAttribute [ - ^ attributeSpec - at: anAttribute - ifAbsentPut: [nil] -] - -{ #category : #adding } -XMLBasicAttributeSpec >> addAttributeAssociation: anAssociation [ - ^ self - addAttributeName: anAssociation key - value: anAssociation value -] - -{ #category : #adding } -XMLBasicAttributeSpec >> addAttributeName: aName value: aValue [ - ^ attributeSpec - at: aName - put: aValue -] - -{ #category : #initialization } -XMLBasicAttributeSpec >> initialize [ - super initialize. - - attributeSpec := Dictionary new. -] - -{ #category : #matching } -XMLBasicAttributeSpec >> matchesAttributes: anAttributeDictionary [ - attributeSpec keysAndValuesDo: [:specName :specValue | - specValue - ifNil: [ - "nil values mean the attribute has to be present and can have - any value" - (anAttributeDictionary includesKey: specName) - ifFalse: [^ false]] - ifNotNil: [ - (specValue isBlock - ifTrue: [ - specValue value: - (anAttributeDictionary - at: specName - ifAbsent: [^ false])] - ifFalse: [ - specValue = - (anAttributeDictionary - at: specName - ifAbsent: [^ false])]) - ifFalse: [^ false]]]. - ^ true. -] - -{ #category : #initialization } -XMLBasicAttributeSpec >> setAttributes: aDictionaryOrCollectionOfAssociationsAndStrings [ - attributeSpec removeAll. - - "associationsDo: works for dictionaries and non-dictionaries, including - arrays, to support specs like {'one'. 'two'->'three'}" - aDictionaryOrCollectionOfAssociationsAndStrings associationsDo: [:each | - each isString - ifTrue: [self addAttribute: each] - ifFalse: [self addAttributeAssociation: each]]. -] diff --git a/src/XML-Parser/XMLBasicElementClassMapper.class.st b/src/XML-Parser/XMLBasicElementClassMapper.class.st deleted file mode 100644 index 01373f272..000000000 --- a/src/XML-Parser/XMLBasicElementClassMapper.class.st +++ /dev/null @@ -1,239 +0,0 @@ -" -This class can match elements to classes based on their names, namespace URIs, and attributes. - -The precedence of mapping goes: --Qualified name, namespace URI, and attributes --Qualified name and namespace URI --Qualified name and attributes --Qualified name --Non-qualified name, namespace URI, and attributes --Non-qualified name and namespace URI --Non-qualified name and attributes --Non-qualified name -" -Class { - #name : #XMLBasicElementClassMapper, - #superclass : #XMLElementClassMapper, - #instVars : [ - 'elementClassMap' - ], - #category : #'XML-Parser-Utils' -} - -{ #category : #accessing } -XMLBasicElementClassMapper >> classForElement: aQualifiedName attributes: anAssociationCollection ifNone: aBlock [ - ^ self - classForElement: aQualifiedName - namespaceURI: '' - attributes: anAssociationCollection - ifNone: aBlock -] - -{ #category : #accessing } -XMLBasicElementClassMapper >> classForElement: aQualifiedName ifNone: aBlock [ - ^ self - classForElement: aQualifiedName - namespaceURI: '' - attributes: XMLLazyAttributeDictionary new - ifNone: aBlock -] - -{ #category : #accessing } -XMLBasicElementClassMapper >> classForElement: aQualifiedName namespaceURI: aURI attributes: anAssociationCollection ifNone: aBlock [ - | localName attributeDictionary | - - attributeDictionary := anAssociationCollection asXMLAttributeDictionary. - aURI size > 0 "optimization" - ifTrue: [ - (self - elementClassMapAt: aQualifiedName -> aURI - attributes: attributeDictionary) - ifNotNil: [:class | ^ class]. - (self - elementClassMapAt: aQualifiedName - attributes: attributeDictionary) - ifNotNil: [:class | ^ class]. - (localName := aQualifiedName xmlLocalNameAfterPrefix) size < - aQualifiedName size - ifTrue: [ - (self - elementClassMapAt: localName -> aURI - attributes: attributeDictionary) - ifNotNil: [:class | ^ class]. - (self - elementClassMapAt: localName - attributes: attributeDictionary) - ifNotNil: [:class | ^ class]]] - ifFalse: [ - (self - elementClassMapAt: aQualifiedName - attributes: attributeDictionary) - ifNotNil: [:class | ^ class]. - (localName := aQualifiedName xmlLocalNameAfterPrefix) size < - aQualifiedName size - ifTrue: [ - (self - elementClassMapAt: localName - attributes: attributeDictionary) - ifNotNil: [:class | ^ class]]]. - - ^ aBlock value. -] - -{ #category : #accessing } -XMLBasicElementClassMapper >> classForElement: aQualifiedName namespaceURI: aURI ifNone: aBlock [ - ^ self - classForElement: aQualifiedName - namespaceURI: aURI - attributes: XMLLazyAttributeDictionary new - ifNone: aBlock -] - -{ #category : #accessing } -XMLBasicElementClassMapper >> classForElement: aQualifiedName namespaceURI: aURI localName: aLocalName attributes: anAssociationCollection ifNone: aBlock [ - | attributeDictionary | - - attributeDictionary := anAssociationCollection. - aURI size > 0 "optimization" - ifTrue: [ - (self - elementClassMapAt: aQualifiedName -> aURI - attributes: attributeDictionary) - ifNotNil: [:class | ^ class]. - (self - elementClassMapAt: aQualifiedName - attributes: attributeDictionary) - ifNotNil: [:class | ^ class]. - aLocalName size < aQualifiedName size - ifTrue: [ - (self - elementClassMapAt: aLocalName -> aURI - attributes: attributeDictionary) - ifNotNil: [:class | ^ class]. - (self - elementClassMapAt: aLocalName - attributes: attributeDictionary) - ifNotNil: [:class | ^ class]]] - ifFalse: [ - (self - elementClassMapAt: aQualifiedName - attributes: attributeDictionary) - ifNotNil: [:class | ^ class]. - aLocalName size < aQualifiedName size - ifTrue: [ - (self - elementClassMapAt: aLocalName - attributes: attributeDictionary) - ifNotNil: [:class | ^ class]]]. - - ^ aBlock value. -] - -{ #category : #private } -XMLBasicElementClassMapper >> elementClassMap [ - ^ elementClassMap -] - -{ #category : #private } -XMLBasicElementClassMapper >> elementClassMapAt: aKey attributes: anAttributeDictionary [ - | classOrCollection | - - classOrCollection := - elementClassMap - at: aKey - ifAbsent: [^ nil]. - - classOrCollection isCollection - ifTrue: [ - "to:do: for speed" - 1 to: classOrCollection size - 1 do: [:i | - ((classOrCollection at: i) key - matchesAttributes: anAttributeDictionary) - ifTrue: [^ (classOrCollection at: i) value]]. - ^ classOrCollection last] - ifFalse: [^ classOrCollection]. -] - -{ #category : #initialization } -XMLBasicElementClassMapper >> initialize [ - super initialize. - - elementClassMap := Dictionary new. -] - -{ #category : #mapping } -XMLBasicElementClassMapper >> mapElement: anElement attributeSpec: anAttributeSpec toClass: aClass [ - | classOrCollection | - - classOrCollection := - elementClassMap - at: anElement - ifAbsent: [nil]. - - classOrCollection isCollection - ifTrue: [ - "new mappings have precedence over old" - classOrCollection addFirst: anAttributeSpec -> aClass] - ifFalse: [ - elementClassMap - at: anElement - put: - (OrderedCollection - with: anAttributeSpec -> aClass - with: classOrCollection)]. -] - -{ #category : #mapping } -XMLBasicElementClassMapper >> mapElement: anElement namespaceURI: aURI attributeSpec: anAttributeSpec toClass: aClass [ - self - mapElement: - (aURI size > 0 - ifTrue: [anElement -> aURI] - ifFalse: [anElement]) - attributeSpec: anAttributeSpec - toClass: aClass -] - -{ #category : #mapping } -XMLBasicElementClassMapper >> mapElement: anElement namespaceURI: aURI toClass: aClass [ - self - mapElement: - (aURI size > 0 - ifTrue: [anElement -> aURI] - ifFalse: [anElement]) - toClass: aClass -] - -{ #category : #mapping } -XMLBasicElementClassMapper >> mapElement: anElement toClass: aClass [ - | classOrCollection | - - classOrCollection := - elementClassMap - at: anElement - ifAbsent: [nil]. - - classOrCollection isCollection - ifTrue: [ - classOrCollection - at: classOrCollection size - put: aClass] - ifFalse: [ - elementClassMap - at: anElement - put: aClass]. -] - -{ #category : #copying } -XMLBasicElementClassMapper >> postCopy [ - super postCopy. - - elementClassMap := elementClassMap copy. - - "each val is either a class or an OrderedCollection, which needs - to be copied so new mappings in either the copy or original don't - effect the other" - elementClassMap associationsDo: [:each | - each value isCollection - ifTrue: [each value: each value copy]]. -] diff --git a/src/XML-Parser/XMLCData.class.st b/src/XML-Parser/XMLCData.class.st deleted file mode 100644 index c4339b1a7..000000000 --- a/src/XML-Parser/XMLCData.class.st +++ /dev/null @@ -1,31 +0,0 @@ -" -This class represents a preserved section. By default these are handled as XMLString nodes and merged with adjacent string nodes during parsing. To preserve CDATA nodes, use #preservesCDataNodes: with the DOM parser before parsing. -" -Class { - #name : #XMLCData, - #superclass : #XMLString, - #category : #'XML-Parser-DOM' -} - -{ #category : #visiting } -XMLCData >> acceptNodeVisitor: aNodeVisitor [ - ^ aNodeVisitor visitCData: self -] - -{ #category : #testing } -XMLCData >> isCData [ - ^ true -] - -{ #category : #private } -XMLCData >> isCoalescingStringNode [ - "this returns false to stop preserved CDATA nodes from coalescing - together or with ordinary string nodes" - - ^ false -] - -{ #category : #printing } -XMLCData >> writeXMLOn: aWriter [ - aWriter cdata: self string -] diff --git a/src/XML-Parser/XMLCDataAttributeValidator.class.st b/src/XML-Parser/XMLCDataAttributeValidator.class.st deleted file mode 100644 index 58c659c2a..000000000 --- a/src/XML-Parser/XMLCDataAttributeValidator.class.st +++ /dev/null @@ -1,23 +0,0 @@ -" -This class validates CDATA attributes, which are not whitespace-normalized further. -" -Class { - #name : #XMLCDataAttributeValidator, - #superclass : #XMLAttributeValidator, - #category : #'XML-Parser-Validation' -} - -{ #category : #defaults } -XMLCDataAttributeValidator class >> standaloneExternalClass [ - ^ XMLStandaloneExternalCDataAttributeValidator -] - -{ #category : #testing } -XMLCDataAttributeValidator >> isCData [ - ^ true -] - -{ #category : #testing } -XMLCDataAttributeValidator >> mustFurtherNormalizeAttributeValue [ - ^ false -] diff --git a/src/XML-Parser/XMLCachingAttributeList.class.st b/src/XML-Parser/XMLCachingAttributeList.class.st deleted file mode 100644 index d1b441a5d..000000000 --- a/src/XML-Parser/XMLCachingAttributeList.class.st +++ /dev/null @@ -1,168 +0,0 @@ -" -This class represents an ordered list of attribute nodes that also keeps a dictionary mapping attribute names to nodes for faster lookup. - -This is the default attribute list class. -" -Class { - #name : #XMLCachingAttributeList, - #superclass : #XMLAttributeList, - #instVars : [ - 'attributeNodesByName' - ], - #category : #'XML-Parser-DOM' -} - -{ #category : #private } -XMLCachingAttributeList >> afterAdding: aNode at: anIndex [ - self attributeNodesByName - at: aNode name ifPresent: [:duplicate | - self - removeDuplicateOf: aNode - notAt: anIndex. - duplicate = aNode - ifTrue: [^ self]]; - at: aNode name put: aNode. - observer - ifNotNil: [observer addedAttribute: aNode]. -] - -{ #category : #private } -XMLCachingAttributeList >> afterAddingLast: aNode [ - self attributeNodesByName - at: aNode name ifPresent: [:duplicate | - self - removeDuplicateOf: aNode - notAt: self size. - duplicate = aNode - ifTrue: [^ self]]; - at: aNode name put: aNode. - observer - ifNotNil: [observer addedAttribute: aNode]. -] - -{ #category : #private } -XMLCachingAttributeList >> afterAddingToCopyLast: aNode [ - self attributeNodesByName - at: aNode name - put: aNode. - observer - ifNotNil: [observer addedAttribute: aNode]. -] - -{ #category : #private } -XMLCachingAttributeList >> afterRemoving: aNode [ - self attributeNodesByName removeKey: aNode name. - observer - ifNotNil: [observer removedAttribute: aNode]. -] - -{ #category : #private } -XMLCachingAttributeList >> attributeNodesByName [ - ^ attributeNodesByName - ifNil: [attributeNodesByName := Dictionary new: self capacity] -] - -{ #category : #private } -XMLCachingAttributeList >> attributeValueAt: aName ifAbsent: aBlock [ - ^ (self attributeNodesByName - at: aName - ifAbsent: [^ aBlock value]) value -] - -{ #category : #private } -XMLCachingAttributeList >> attributeValueAt: aName put: aValue [ - (self attributeNodesByName - at: aName - ifAbsent: [ - "use #addToCopyLast: since we know it's not already in the collection" - self addToCopyLast: - (self attributeClass - name: aName - value: aValue). - ^ aValue]) value: aValue. - ^ aValue. -] - -{ #category : #defaults } -XMLCachingAttributeList >> copyClass [ - "use the non-caching superclass for copies for performance" - ^ XMLAttributeList -] - -{ #category : #testing } -XMLCachingAttributeList >> includes: aNode [ - ^ aNode isAttribute - and: [ - (self attributeNodesByName - at: aNode name - ifAbsent: [^ false]) = aNode] -] - -{ #category : #testing } -XMLCachingAttributeList >> includesAttribute: aName [ - ^ self attributeNodesByName includesKey: aName -] - -{ #category : #private } -XMLCachingAttributeList >> indexOfAttributeValueAt: aName [ - ^ (self attributeNodesByName includesKey: aName) - ifTrue: [super indexOfAttributeValueAt: aName] - ifFalse: [0] -] - -{ #category : #removing } -XMLCachingAttributeList >> removeAttribute: aName [ - ^ (self remove: (self attributeNodesByName at: aName)) value -] - -{ #category : #removing } -XMLCachingAttributeList >> removeAttribute: aName ifAbsent: aBlock [ - ^ (self remove: - (self attributeNodesByName - at: aName - ifAbsent: [^ aBlock value])) value -] - -{ #category : #notifying } -XMLCachingAttributeList >> renamedAttribute: anAttribute from: anOldName to: aNewName [ - self attributeNodesByName - removeKey: anOldName; - at: aNewName ifPresent: [:duplicate | - self - removeDuplicateOf: anAttribute - notAt: (self indexOf: anAttribute)]; - at: aNewName put: anAttribute -] - -{ #category : #private } -XMLCachingAttributeList >> setAttributesFromOrderPreservingDictionary: anOrderPreservingDictionary [ - "This should only be sent by DOM parsers/builders, not public API users" - | orderedKeys | - - "Hack to reuse its internal dictionary for speed, which we will - modify the association values of. This is safe because the DOM - parser/builder will never use it again." - attributeNodesByName := anOrderPreservingDictionary dictionary. - - "Add the XMLAttributes in order directly to the collection to avoid - sending notifications that would do unneeded, costly namespace prefix - revalidation and also replace the value in the attributeNodesByName - association with the new XMLAttribute. - Use the internal #orderedKeys with #to:do: to create an inlined #keysDo: - without block closure overhead." - orderedKeys := anOrderPreservingDictionary orderedKeys. - 1 to: anOrderPreservingDictionary size do: [:i | | key association | - key := orderedKeys at: i. - "use associationAt:ifAbsent: for speed over associationAt:" - association := - attributeNodesByName - associationAt: key - ifAbsent: nil. - "replace its string value with the new XMLAttribute" - association value: - (collection addLast: - (self attributeClass new - setName: key - value: association value - element: observer))]. -] diff --git a/src/XML-Parser/XMLCachingNodeList.class.st b/src/XML-Parser/XMLCachingNodeList.class.st deleted file mode 100644 index c875e1dde..000000000 --- a/src/XML-Parser/XMLCachingNodeList.class.st +++ /dev/null @@ -1,336 +0,0 @@ -" -This is a node list that caches child elements by name, keeping both an ordered list of elements and a dictionary that allows for faster retrieval of elements by qualified or local name. To use it, inject it into a DOM parser before parsing: - (parser := XMLDOMParser on: xmlSource) - nodeFactory: - (XMLPluggableNodeFactory new - nodeListClass: XMLCachingNodeList); - parseDocument. - -It should only be used when you know the DOM tree will be queried much more often than parsed or modified and the extra memory use is OK. -" -Class { - #name : #XMLCachingNodeList, - #superclass : #XMLNodeList, - #instVars : [ - 'cachedElements', - 'cachedElementsByName' - ], - #category : #'XML-Parser-DOM' -} - -{ #category : #private } -XMLCachingNodeList >> afterAdding: aNode at: anIndex [ - (aNode hasParentWithNodeList: self) - ifTrue: [ - self - removeDuplicateOf: aNode - notAt: anIndex. - aNode isElement - ifTrue: [self rebuildCachedElements]] - ifFalse: [ - aNode isElement - ifTrue: [ - self - cacheElement: aNode - addedAt: anIndex]. - observer - ifNotNil: [observer addedNode: aNode]] -] - -{ #category : #private } -XMLCachingNodeList >> afterAddingLast: aNode [ - (aNode hasParentWithNodeList: self) - ifTrue: [ - self - removeDuplicateOf: aNode - notAt: self size. - aNode isElement - ifTrue: [self rebuildCachedElements]] - ifFalse: [ - aNode isElement - ifTrue: [self cacheElementAddedLast: aNode]. - observer - ifNotNil: [observer addedNode: aNode]] -] - -{ #category : #private } -XMLCachingNodeList >> afterAddingToCopyLast: aNode [ - aNode isElement - ifTrue: [self cacheElementAddedLast: aNode]. - observer - ifNotNil: [observer addedNode: aNode]. -] - -{ #category : #private } -XMLCachingNodeList >> afterRemoving: aNode [ - aNode isElement - ifTrue: [self uncacheElement: aNode]. - observer - ifNotNil: [observer removedNode: aNode]. -] - -{ #category : #private } -XMLCachingNodeList >> cacheElement: anElement addedAt: anIndex [ - anIndex = self size - ifTrue: [^ self cacheElementAddedLast: anElement]. - - (self findElementAfterIndex: anIndex) - ifNil: [self cachedElements addLast: anElement] - ifNotNil: [:elementAfter | - self cachedElements - add: anElement - before: elementAfter]. - self - cachedElementsByNameAt: anElement name - add: anElement - beforeNextAfterIndex: anIndex. - anElement hasPrefix - ifTrue: [ - self - cachedElementsByNameAt: anElement localName - add: anElement - beforeNextAfterIndex: anIndex]. -] - -{ #category : #private } -XMLCachingNodeList >> cacheElementAddedLast: anElement [ - self cachedElements addLast: anElement. - self - cachedElementsByNameAt: anElement name - addLast: anElement. - anElement hasPrefix - ifTrue: [ - self - cachedElementsByNameAt: anElement localName - addLast: anElement]. -] - -{ #category : #private } -XMLCachingNodeList >> cachedElements [ - ^ cachedElements ifNil: [cachedElements := OrderedCollection new] -] - -{ #category : #private } -XMLCachingNodeList >> cachedElementsByName [ - ^ cachedElementsByName ifNil: [cachedElementsByName := Dictionary new] -] - -{ #category : #private } -XMLCachingNodeList >> cachedElementsByNameAt: aName add: anElement beforeNextAfterIndex: anIndex [ - | elementAfter elementsWithName | - - (elementAfter := - self - findElementAfterIndex: anIndex - named: aName) - ifNil: [ - ^ self - cachedElementsByNameAt: aName - addLast: anElement]. - - (elementsWithName := self cachedElementsByName at: aName) isCollection - ifTrue: [elementsWithName add: anElement before: elementAfter] - ifFalse: [ - self cachedElementsByName - at: aName - put: (OrderedCollection with: anElement with: elementAfter)]. -] - -{ #category : #private } -XMLCachingNodeList >> cachedElementsByNameAt: aName addLast: anElement [ - | elementsWithName | - - elementsWithName := - self cachedElementsByName - at: aName - ifAbsent: [ - self cachedElementsByName at: aName put: anElement. - ^ self]. - - elementsWithName isCollection - ifTrue: [elementsWithName addLast: anElement] - ifFalse: [ - self cachedElementsByName - at: aName - put: (OrderedCollection with: elementsWithName with: anElement)]. -] - -{ #category : #private } -XMLCachingNodeList >> cachedElementsByNameAt: aName remove: anElement [ - | elementsWithName | - - (elementsWithName := self cachedElementsByName at: aName) isCollection - ifTrue: [ - elementsWithName remove: anElement. - elementsWithName isEmpty - ifTrue: [self cachedElementsByName removeKey: aName]] - ifFalse: [self cachedElementsByName removeKey: aName] -] - -{ #category : #defaults } -XMLCachingNodeList >> copyClass [ - "use the non-caching superclass for copies for performance" - ^ XMLNodeList -] - -{ #category : #accessing } -XMLCachingNodeList >> elementAt: aName ifAbsent: aBlock [ - | elementsWithName | - - (elementsWithName := - self cachedElementsByName - at: aName - ifAbsent: [^ aBlock value]) isCollection - ifTrue: [^ elementsWithName first] - ifFalse: [^ elementsWithName] -] - -{ #category : #accessing } -XMLCachingNodeList >> elements [ - ^ self copyEmpty - addAll: self cachedElements; - yourself -] - -{ #category : #accessing } -XMLCachingNodeList >> elementsAt: aName [ - | elementsWithName copiedElements | - - copiedElements := self copyEmpty. - (elementsWithName := - self cachedElementsByName - at: aName - ifAbsent: [^ copiedElements]) isCollection - ifTrue: [ - elementsWithName do: [:each | - copiedElements addToCopyLast: each]] - ifFalse: [ - copiedElements addToCopyLast: elementsWithName]. - ^ copiedElements. -] - -{ #category : #enumerating } -XMLCachingNodeList >> elementsAt: aName do: aBlock [ - | elementsWithName | - - (elementsWithName := - self cachedElementsByName - at: aName - ifAbsent: [^ self]) isCollection - ifTrue: [elementsWithName do: aBlock] - ifFalse: [aBlock value: elementsWithName] -] - -{ #category : #enumerating } -XMLCachingNodeList >> elementsDo: aBlock [ - self cachedElements do: aBlock -] - -{ #category : #private } -XMLCachingNodeList >> findElementAfterIndex: anIndex [ - anIndex + 1 to: self size do: [:i | | node | - node := self at: i. - node isElement - ifTrue: [^ node]]. - ^ nil. -] - -{ #category : #private } -XMLCachingNodeList >> findElementAfterIndex: anIndex named: aName [ - anIndex + 1 to: self size do: [:i | | node | - node := self at: i. - (node isElement - and: [node isNamed: aName]) - ifTrue: [^ node]]. - ^ nil. -] - -{ #category : #accessing } -XMLCachingNodeList >> firstElement [ - ^ self cachedElements - at: 1 - ifAbsent: [self defaultValue] -] - -{ #category : #testing } -XMLCachingNodeList >> hasElements [ - ^ cachedElements notNil and: [cachedElements notEmpty] -] - -{ #category : #testing } -XMLCachingNodeList >> includesElement: aName [ - ^ self cachedElementsByName includesKey: aName -] - -{ #category : #accessing } -XMLCachingNodeList >> lastElement [ - ^ self cachedElements - at: self cachedElements size - ifAbsent: [self defaultValue] -] - -{ #category : #private } -XMLCachingNodeList >> rebuildCachedElements [ - self cachedElements removeAll. - self cachedElementsByName removeAll. - self do: [:each | - each isElement - ifTrue: [self cacheElementAddedLast: each]]. -] - -{ #category : #notifying } -XMLCachingNodeList >> renamedElement: anElement from: anOldName to: aNewName [ - | oldPrefix index | - - self - cachedElementsByNameAt: anOldName - remove: anElement. - (oldPrefix := anOldName xmlPrefixBeforeLocalName) notEmpty - ifTrue: [ - self - cachedElementsByNameAt: (anOldName xmlLocalNameAfterPrefix: oldPrefix) - remove: anElement]. - index := self indexOf: anElement. - self - cachedElementsByNameAt: anElement name - add: anElement - beforeNextAfterIndex: index. - anElement hasPrefix - ifTrue: [ - self - cachedElementsByNameAt: anElement localName - add: anElement - beforeNextAfterIndex: index]. -] - -{ #category : #sorting } -XMLCachingNodeList >> sort: aSortBlock [ - super sort: aSortBlock. - - self cachedElements sort: aSortBlock. - self cachedElementsByName valuesDo: [:each | - each isCollection - ifTrue: [each sort: aSortBlock]]. -] - -{ #category : #accessing } -XMLCachingNodeList >> swap: aFirstIndex with: aSecondIndex [ - super swap: aFirstIndex with: aSecondIndex. - - ((self at: aFirstIndex) isElement - or: [(self at: aSecondIndex) isElement]) - ifTrue: [self rebuildCachedElements]. -] - -{ #category : #private } -XMLCachingNodeList >> uncacheElement: anElement [ - self cachedElements remove: anElement. - self - cachedElementsByNameAt: anElement name - remove: anElement. - anElement hasPrefix - ifTrue: [ - self - cachedElementsByNameAt: anElement localName - remove: anElement]. -] diff --git a/src/XML-Parser/XMLClassFinder.class.st b/src/XML-Parser/XMLClassFinder.class.st deleted file mode 100644 index 4e7852746..000000000 --- a/src/XML-Parser/XMLClassFinder.class.st +++ /dev/null @@ -1,49 +0,0 @@ -" -A simple cross-platform interface for finding classes that may not be in the image. -" -Class { - #name : #XMLClassFinder, - #superclass : #Object, - #category : #'XML-Parser-Utils' -} - -{ #category : #accessing } -XMLClassFinder class >> classNamed: aClassName [ - ^ self - classNamed: aClassName - ifAbsent: [nil] -] - -{ #category : #accessing } -XMLClassFinder class >> classNamed: aClassName ifAbsent: aBlock [ - "'self environment at:' is the proper way to get a class that may not - exist, not 'Smalltalk at:', 'Smalltalk globals at:' or '#ClassName asClass' - (assuming both this class and aClassName class are in the same environment)" - ^ self environment - at: aClassName asSymbol - ifAbsent: aBlock -] - -{ #category : #accessing } -XMLClassFinder class >> classNamed: aClassName ifPresent: aBlock [ - ^ aBlock cull: - (self - classNamed: aClassName - ifAbsent: [^ nil]) -] - -{ #category : #accessing } -XMLClassFinder class >> classNamed: aClassName ifPresent: aPresentBlock ifAbsent: anAbsentBlock [ - ^ aPresentBlock cull: - (self - classNamed: aClassName - ifAbsent: [^ anAbsentBlock value]) -] - -{ #category : #testing } -XMLClassFinder class >> hasClassNamed: aClassName [ - self - classNamed: aClassName - ifAbsent: [^ false]. - ^ true. -] diff --git a/src/XML-Parser/XMLComment.class.st b/src/XML-Parser/XMLComment.class.st deleted file mode 100644 index 2f734a1a3..000000000 --- a/src/XML-Parser/XMLComment.class.st +++ /dev/null @@ -1,46 +0,0 @@ -" -This class represents a comment node. Comments are ignored during parsing by default. If you want them preserved as comment nodes, use #preservesCommentNodes: with the DOM parser before parsing. -" -Class { - #name : #XMLComment, - #superclass : #XMLNode, - #instVars : [ - 'string' - ], - #category : #'XML-Parser-DOM' -} - -{ #category : #'instance creation' } -XMLComment class >> string: aString [ - ^ self new string: aString -] - -{ #category : #visiting } -XMLComment >> acceptNodeVisitor: aNodeVisitor [ - ^ aNodeVisitor visitComment: self -] - -{ #category : #testing } -XMLComment >> isComment [ - ^ true -] - -{ #category : #accessing } -XMLComment >> sortKey [ - ^ self string -] - -{ #category : #accessing } -XMLComment >> string [ - ^ string ifNil: [string := ''] -] - -{ #category : #accessing } -XMLComment >> string: aString [ - string := aString -] - -{ #category : #printing } -XMLComment >> writeXMLOn: aWriter [ - aWriter comment: self string -] diff --git a/src/XML-Parser/XMLConfiguration.class.st b/src/XML-Parser/XMLConfiguration.class.st deleted file mode 100644 index fbf50b3a9..000000000 --- a/src/XML-Parser/XMLConfiguration.class.st +++ /dev/null @@ -1,195 +0,0 @@ -" -This class stores the settings and components of a parser. For performance it uses separate inst vars instead of a dictionary and lazy initializes some components. -" -Class { - #name : #XMLConfiguration, - #superclass : #Object, - #instVars : [ - 'isValidating', - 'usesNamespaces', - 'decodesCharacters', - 'requiresSchema', - 'parserHandlerClass', - 'parserLimits', - 'entityConfiguration' - ], - #category : #'XML-Parser' -} - -{ #category : #accessing } -XMLConfiguration >> decodesCharacters [ - ^ decodesCharacters -] - -{ #category : #accessing } -XMLConfiguration >> decodesCharacters: aBoolean [ - decodesCharacters := aBoolean -] - -{ #category : #defaults } -XMLConfiguration >> defaultParserHandlerClass [ - ^ SAXHandler -] - -{ #category : #accessing } -XMLConfiguration >> documentReadLimit [ - ^ self parserLimits documentReadLimit -] - -{ #category : #accessing } -XMLConfiguration >> documentReadLimit: anInteger [ - self parserLimits documentReadLimit: anInteger -] - -{ #category : #accessing } -XMLConfiguration >> entityConfiguration [ - ^ entityConfiguration ifNil: [entityConfiguration := DTDEntityConfiguration new] -] - -{ #category : #accessing } -XMLConfiguration >> entityConfiguration: anEntityConfiguration [ - entityConfiguration := anEntityConfiguration -] - -{ #category : #accessing } -XMLConfiguration >> externalEntityResolver [ - ^ self entityConfiguration externalEntityResolver -] - -{ #category : #accessing } -XMLConfiguration >> externalEntityResolver: anExternalEntityResolver [ - self entityConfiguration externalEntityResolver: anExternalEntityResolver -] - -{ #category : #initialization } -XMLConfiguration >> initialize [ - super initialize. - - "always used, so explicitly initialized" - isValidating := true. - usesNamespaces := true. - decodesCharacters := true. - requiresSchema := false. - parserLimits := XMLParserLimits new. -] - -{ #category : #accessing } -XMLConfiguration >> isValidating [ - ^ isValidating -] - -{ #category : #accessing } -XMLConfiguration >> isValidating: aBoolean [ - (isValidating := aBoolean) - ifTrue: [self preservesUndeclaredEntityReferences: false] - ifFalse: [self requiresSchema: false] -] - -{ #category : #accessing } -XMLConfiguration >> maxEntityReplacementDepth [ - ^ self parserLimits maxEntityReplacementDepth -] - -{ #category : #accessing } -XMLConfiguration >> maxEntityReplacementDepth: anInteger [ - self parserLimits maxEntityReplacementDepth: anInteger -] - -{ #category : #accessing } -XMLConfiguration >> parserHandlerClass [ - ^ parserHandlerClass ifNil: [parserHandlerClass := self defaultParserHandlerClass] -] - -{ #category : #accessing } -XMLConfiguration >> parserHandlerClass: aClass [ - parserHandlerClass := aClass -] - -{ #category : #accessing } -XMLConfiguration >> parserLimits [ - ^ parserLimits -] - -{ #category : #accessing } -XMLConfiguration >> parserLimits: aParserLimits [ - parserLimits := aParserLimits -] - -{ #category : #copying } -XMLConfiguration >> postCopy [ - super postCopy. - - parserLimits := parserLimits copy. - entityConfiguration - ifNotNil: [entityConfiguration := entityConfiguration copy]. -] - -{ #category : #accessing } -XMLConfiguration >> preservesUndeclaredEntityReferences [ - ^ self entityConfiguration preservesUndeclaredEntityReferences -] - -{ #category : #accessing } -XMLConfiguration >> preservesUndeclaredEntityReferences: aBoolean [ - self entityConfiguration preservesUndeclaredEntityReferences: aBoolean. - aBoolean - ifTrue: [self isValidating: false]. -] - -{ #category : #removing } -XMLConfiguration >> removeLimits [ - self parserLimits removeAll. - self externalEntityResolver removeLimits. -] - -{ #category : #accessing } -XMLConfiguration >> replacesContentEntityReferences [ - ^ self entityConfiguration replacesContentEntityReferences -] - -{ #category : #accessing } -XMLConfiguration >> replacesContentEntityReferences: aBoolean [ - self entityConfiguration replacesContentEntityReferences: aBoolean -] - -{ #category : #deprecated } -XMLConfiguration >> requiresDocumentConstraints [ - ^ self requiresSchema -] - -{ #category : #deprecated } -XMLConfiguration >> requiresDocumentConstraints: aBoolean [ - "will be deprecated; use #requiresSchema: instead" - self requiresSchema: aBoolean -] - -{ #category : #accessing } -XMLConfiguration >> requiresSchema [ - ^ requiresSchema -] - -{ #category : #accessing } -XMLConfiguration >> requiresSchema: aBoolean [ - (requiresSchema := aBoolean) - ifTrue: [self isValidating: true] -] - -{ #category : #accessing } -XMLConfiguration >> resolvesExternalEntities [ - ^ self entityConfiguration resolvesExternalEntities -] - -{ #category : #accessing } -XMLConfiguration >> resolvesExternalEntities: aBoolean [ - self entityConfiguration resolvesExternalEntities: aBoolean -] - -{ #category : #accessing } -XMLConfiguration >> usesNamespaces [ - ^ usesNamespaces -] - -{ #category : #accessing } -XMLConfiguration >> usesNamespaces: aBoolean [ - usesNamespaces := aBoolean -] diff --git a/src/XML-Parser/XMLContentState.class.st b/src/XML-Parser/XMLContentState.class.st deleted file mode 100644 index 8939b1ab6..000000000 --- a/src/XML-Parser/XMLContentState.class.st +++ /dev/null @@ -1,18 +0,0 @@ -" -A state for content tokens, everything from the first stat tag to the end of the document. -" -Class { - #name : #XMLContentState, - #superclass : #XMLTokenizerState, - #category : #'XML-Parser-Drivers' -} - -{ #category : #testing } -XMLContentState >> isContentState [ - ^ true -] - -{ #category : #tokenizing } -XMLContentState >> nextTokenFrom: aTokenizer [ - ^ aTokenizer nextContentToken -] diff --git a/src/XML-Parser/XMLDFAElementContentElementValidator.class.st b/src/XML-Parser/XMLDFAElementContentElementValidator.class.st deleted file mode 100644 index 082c88430..000000000 --- a/src/XML-Parser/XMLDFAElementContentElementValidator.class.st +++ /dev/null @@ -1,28 +0,0 @@ -" -This class validates elements that can only contain element content (no PCDATA) using a regular expression converted to a DFA. It ignores comments, PIs, and whitespace. -" -Class { - #name : #XMLDFAElementContentElementValidator, - #superclass : #XMLDFAElementValidator, - #category : #'XML-Parser-Validation' -} - -{ #category : #testing } -XMLDFAElementContentElementValidator >> ignoresWhitespace [ - ^ true -] - -{ #category : #testing } -XMLDFAElementContentElementValidator >> isElementContent [ - ^ true -] - -{ #category : #defaults } -XMLDFAElementContentElementValidator >> typeName [ - ^ 'element content' -] - -{ #category : #validating } -XMLDFAElementContentElementValidator >> validatePCData: aString [ - self errorUnexpectedPCData -] diff --git a/src/XML-Parser/XMLDFAElementValidator.class.st b/src/XML-Parser/XMLDFAElementValidator.class.st deleted file mode 100644 index 45aa14814..000000000 --- a/src/XML-Parser/XMLDFAElementValidator.class.st +++ /dev/null @@ -1,74 +0,0 @@ -" -This class validates elements using a regular expression converted to a DFA. It ignores PCDATA, comments, and PIs. -" -Class { - #name : #XMLDFAElementValidator, - #superclass : #XMLElementValidator, - #instVars : [ - 'dfa', - 'currentState' - ], - #category : #'XML-Parser-Validation' -} - -{ #category : #'instance creation' } -XMLDFAElementValidator class >> element: anElement dfa: aDFA [ - ^ self new - setElement: anElement - dfa: aDFA -] - -{ #category : #converting } -XMLDFAElementValidator >> asReadyElementValidator [ - ^ self copy -] - -{ #category : #testing } -XMLDFAElementValidator >> atEnd [ - ^ currentState isAccepting -] - -{ #category : #accessing } -XMLDFAElementValidator >> currentState [ - ^ currentState -] - -{ #category : #accessing } -XMLDFAElementValidator >> dfa [ - ^ dfa -] - -{ #category : #private } -XMLDFAElementValidator >> errorNonDeterminismInContentModelAfter: anElement [ - XMLValidationException - formatSignal: - 'Content model for <{1}> becomes non-deterministic after <{2}>. ', - 'Rewrite it deterministically; for example "{3}" instead ', - 'of "{4}"' - with: self element - with: anElement - with: '(a,(b|c))' - with: '((a,b)|(a,c))' -] - -{ #category : #copying } -XMLDFAElementValidator >> postCopy [ - currentState := dfa -] - -{ #category : #initialization } -XMLDFAElementValidator >> setElement: anElement dfa: aDFA [ - element := anElement. - dfa := aDFA. - currentState := aDFA. -] - -{ #category : #validating } -XMLDFAElementValidator >> validateStartTag: anElement [ - currentState := - currentState - nextDFAStateMatching: anElement - ifNone: [self errorUnexpectedElement: anElement]. - currentState hasNonDeterminism - ifTrue: [self errorNonDeterminismInContentModelAfter: anElement]. -] diff --git a/src/XML-Parser/XMLDFAState.class.st b/src/XML-Parser/XMLDFAState.class.st deleted file mode 100644 index 423cbbf6b..000000000 --- a/src/XML-Parser/XMLDFAState.class.st +++ /dev/null @@ -1,134 +0,0 @@ -" -This class is a DFA state made by grouping one or more NFA states. -" -Class { - #name : #XMLDFAState, - #superclass : #Object, - #instVars : [ - 'nfaStates', - 'dfaStateCache', - 'dfaStateTransitions', - 'hasNonDeterminism' - ], - #category : #'XML-Parser-Validation-DFA' -} - -{ #category : #'instance creation' } -XMLDFAState class >> nfaStates: anNFAStateSet [ - ^ self - nfaStates: anNFAStateSet - dfaStateCache: nil -] - -{ #category : #'instance creation' } -XMLDFAState class >> nfaStates: anNFAStateSet dfaStateCache: aDFAStateCache [ - ^ self new - setNFAStates: anNFAStateSet - dfaStateCache: aDFAStateCache -] - -{ #category : #private } -XMLDFAState >> addDFAStateTransitionMatching: aMatcher [ - | matchingNFAStates totalMatched matchingDFAState | - - self dfaStateTransitions size >= self maxDFAStateTransitions - ifTrue: [self removeDFAStateTransitions]. - - matchingNFAStates := XMLNFAStateSet new. - totalMatched := 0. - self nfaStatesDo: [:state | - (state matches: aMatcher) - ifTrue: [ - state nextState addTo: matchingNFAStates. - totalMatched := totalMatched + 1]]. - - matchingNFAStates size > 0 - ifTrue: [ - matchingDFAState := - dfaStateCache dfaStateForNFAStates: matchingNFAStates. - totalMatched > 1 - ifTrue: [matchingDFAState hasNonDeterminism: true]]. - - ^ self dfaStateTransitions - at: aMatcher - put: matchingDFAState. "nil if no match" -] - -{ #category : #private } -XMLDFAState >> dfaStateCache [ - ^ dfaStateCache -] - -{ #category : #private } -XMLDFAState >> dfaStateTransitions [ - ^ dfaStateTransitions ifNil: [dfaStateTransitions := Dictionary new] -] - -{ #category : #testing } -XMLDFAState >> hasNonDeterminism [ - ^ hasNonDeterminism -] - -{ #category : #accessing } -XMLDFAState >> hasNonDeterminism: aBoolean [ - hasNonDeterminism := aBoolean -] - -{ #category : #testing } -XMLDFAState >> isAccepting [ - ^ nfaStates isAccepting -] - -{ #category : #private } -XMLDFAState >> maxDFAStateTransitions [ - ^ 64 -] - -{ #category : #matching } -XMLDFAState >> nextDFAStateMatching: aMatcher [ - ^ self - nextDFAStateMatching: aMatcher - ifNone: [nil] -] - -{ #category : #matching } -XMLDFAState >> nextDFAStateMatching: aMatcher ifNone: aBlock [ - ^ (self dfaStateTransitions - at: aMatcher - ifAbsent: [self addDFAStateTransitionMatching: aMatcher]) - ifNil: [aBlock value] -] - -{ #category : #accessing } -XMLDFAState >> nfaStates [ - ^ nfaStates -] - -{ #category : #enumerating } -XMLDFAState >> nfaStatesDo: aBlock [ - nfaStates do: aBlock -] - -{ #category : #printing } -XMLDFAState >> printOn: aStream [ - super printOn: aStream. - - aStream - nextPut: $(; - print: self nfaStates; - nextPut: $). -] - -{ #category : #private } -XMLDFAState >> removeDFAStateTransitions [ - dfaStateTransitions := nil -] - -{ #category : #initialization } -XMLDFAState >> setNFAStates: anNFAStateSet dfaStateCache: aDFAStateCache [ - nfaStates := anNFAStateSet. - dfaStateCache := - aDFAStateCache - ifNil: [XMLDFAStateCache firstDFAState: self]. - hasNonDeterminism := false. -] diff --git a/src/XML-Parser/XMLDFAStateCache.class.st b/src/XML-Parser/XMLDFAStateCache.class.st deleted file mode 100644 index 5eaa61571..000000000 --- a/src/XML-Parser/XMLDFAStateCache.class.st +++ /dev/null @@ -1,66 +0,0 @@ -" -This class uses a dictionary with NFAStateSet keys to cache DFA states. (Does not use the regular XML key/value cache for performance) -" -Class { - #name : #XMLDFAStateCache, - #superclass : #Object, - #instVars : [ - 'firstDFAState', - 'cachedDFAStates' - ], - #category : #'XML-Parser-Validation-DFA' -} - -{ #category : #'instance creation' } -XMLDFAStateCache class >> firstDFAState: aDFAState [ - ^ self new setFirstDFAState: aDFAState -] - -{ #category : #private } -XMLDFAStateCache >> addDFAStateForNFAStates: anNFAStateSet [ - cachedDFAStates size >= self maxCachedDFAStates - ifTrue: [self removeDFAStates]. - ^ cachedDFAStates - at: anNFAStateSet - put: (anNFAStateSet asDFAStateWithStateCache: self). -] - -{ #category : #private } -XMLDFAStateCache >> cachedDFAStates [ - ^ cachedDFAStates -] - -{ #category : #accessing } -XMLDFAStateCache >> dfaStateForNFAStates: anNFAStateSet [ - ^ cachedDFAStates - at: anNFAStateSet - ifAbsent: [self addDFAStateForNFAStates: anNFAStateSet] -] - -{ #category : #accessing } -XMLDFAStateCache >> firstDFAState [ - ^ firstDFAState -] - -{ #category : #private } -XMLDFAStateCache >> maxCachedDFAStates [ - ^ 64 -] - -{ #category : #private } -XMLDFAStateCache >> removeDFAStates [ - cachedDFAStates - valuesDo: [:each | each removeDFAStateTransitions]; - removeAll. - cachedDFAStates - at: firstDFAState nfaStates - put: firstDFAState. -] - -{ #category : #initialization } -XMLDFAStateCache >> setFirstDFAState: aDFAState [ - firstDFAState := aDFAState. - (cachedDFAStates := Dictionary new: 5) - at: firstDFAState nfaStates - put: firstDFAState. -] diff --git a/src/XML-Parser/XMLDOMConfiguration.class.st b/src/XML-Parser/XMLDOMConfiguration.class.st deleted file mode 100644 index 2ce8fd5dd..000000000 --- a/src/XML-Parser/XMLDOMConfiguration.class.st +++ /dev/null @@ -1,112 +0,0 @@ -" -This class stores additional settings and components relevant to the DOM parser and DOM nodes. -" -Class { - #name : #XMLDOMConfiguration, - #superclass : #XMLConfiguration, - #instVars : [ - 'preservesCDataNodes', - 'preservesCommentNodes', - 'preservesIgnorableWhitespace', - 'nodeFactory' - ], - #category : #'XML-Parser' -} - -{ #category : #accessing } -XMLDOMConfiguration >> attributeListClass [ - ^ self nodeFactory attributeListClass -] - -{ #category : #accessing } -XMLDOMConfiguration >> attributeListClass: aClass [ - self nodeFactory: - (self nodeFactory asPluggableNodeFactory attributeListClass: aClass) -] - -{ #category : #defaults } -XMLDOMConfiguration >> defaultNodeFactoryClass [ - ^ XMLNodeFactory -] - -{ #category : #defaults } -XMLDOMConfiguration >> defaultParserHandlerClass [ - ^ XMLDOMParser -] - -{ #category : #initialization } -XMLDOMConfiguration >> initialize [ - super initialize. - - "always used, so explicitly initialized" - preservesCDataNodes := false. - preservesCommentNodes := false. - preservesIgnorableWhitespace := false. - nodeFactory := self defaultNodeFactoryClass new. -] - -{ #category : #accessing } -XMLDOMConfiguration >> isValidating: aBoolean [ - aBoolean - ifFalse: [self preservesIgnorableWhitespace: false]. - super isValidating: aBoolean. -] - -{ #category : #accessing } -XMLDOMConfiguration >> nodeFactory [ - ^ nodeFactory -] - -{ #category : #accessing } -XMLDOMConfiguration >> nodeFactory: aFactory [ - nodeFactory := aFactory -] - -{ #category : #accessing } -XMLDOMConfiguration >> nodeListClass [ - ^ self nodeFactory nodeListClass -] - -{ #category : #accessing } -XMLDOMConfiguration >> nodeListClass: aClass [ - self nodeFactory: - (self nodeFactory asPluggableNodeFactory nodeListClass: aClass) -] - -{ #category : #copying } -XMLDOMConfiguration >> postCopy [ - super postCopy. - - nodeFactory := nodeFactory copy. -] - -{ #category : #accessing } -XMLDOMConfiguration >> preservesCDataNodes [ - ^ preservesCDataNodes -] - -{ #category : #accessing } -XMLDOMConfiguration >> preservesCDataNodes: aBoolean [ - preservesCDataNodes := aBoolean -] - -{ #category : #accessing } -XMLDOMConfiguration >> preservesCommentNodes [ - ^ preservesCommentNodes -] - -{ #category : #accessing } -XMLDOMConfiguration >> preservesCommentNodes: aBoolean [ - preservesCommentNodes := aBoolean -] - -{ #category : #accessing } -XMLDOMConfiguration >> preservesIgnorableWhitespace [ - ^ preservesIgnorableWhitespace -] - -{ #category : #accessing } -XMLDOMConfiguration >> preservesIgnorableWhitespace: aBoolean [ - (preservesIgnorableWhitespace := aBoolean) - ifTrue: [self isValidating: true] -] diff --git a/src/XML-Parser/XMLDOMException.class.st b/src/XML-Parser/XMLDOMException.class.st deleted file mode 100644 index 4baff5792..000000000 --- a/src/XML-Parser/XMLDOMException.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -Invoked when a DOM tree is manipulated wrong. -" -Class { - #name : #XMLDOMException, - #superclass : #XMLParserException, - #category : #'XML-Parser-Exceptions' -} diff --git a/src/XML-Parser/XMLDOMParser.class.st b/src/XML-Parser/XMLDOMParser.class.st deleted file mode 100644 index 3d749831a..000000000 --- a/src/XML-Parser/XMLDOMParser.class.st +++ /dev/null @@ -1,368 +0,0 @@ -" -This class is an XML parser that parses XML into a tree of nodes with an XMLDocument node as the root: - document := XMLDOMParser parse: xmlStringOrStream. - -See the XML-Parser-DOM category for info on the node classes. - -By default, XML comments are ignored during parsing and """" sections are merged with adjacent character data as XMLString nodes. Use #preservesCommentNodes: or #preservesCDataNodes: before parsing to change this. You can also use #preservesIgnorableWhitespace: to preserve ignorable whitespace as XMLString nodes, but this requires a DTD with declarations to distinguish ignorable and unignorable whitespace. - -To control what node classes the parser uses to construct the tree, inject a custom node factory with #nodeFactory: prior to parsing. See XMLNodeFactory. - -See the superclass for more info. -" -Class { - #name : #XMLDOMParser, - #superclass : #SAXHandler, - #instVars : [ - 'document', - 'nodeStack', - 'currentScope' - ], - #category : #'XML-Parser' -} - -{ #category : #'handling - declaration' } -XMLDOMParser >> attributeDeclaration: anElementName name: anAttributeName type: aType defaultPragma: aDefaultPragma defaultValue: aDefaultValue [ - self topNodeAdd: - (self nodeFactory attributeDeclarationClass - element: anElementName - attribute: anAttributeName - type: aType - defaultPragma: aDefaultPragma - defaultValue: aDefaultValue) -] - -{ #category : #'handling - content' } -XMLDOMParser >> characters: aString [ - (self isInCDataSection - and: [self preservesCDataNodes]) - ifTrue: [self topNodeAdd: (self nodeFactory newCData: aString)] - ifFalse: [self topNodeAddString: aString] -] - -{ #category : #'handling - lexical' } -XMLDOMParser >> comment: aString [ - self preservesCommentNodes - ifTrue: [self topNodeAdd: (self nodeFactory newComment: aString)] -] - -{ #category : #defaults } -XMLDOMParser >> configurationClass [ - ^ XMLDOMConfiguration -] - -{ #category : #private } -XMLDOMParser >> doctypeDefinition: aDoctypeDefinition [ - self document doctypeDefinition: aDoctypeDefinition -] - -{ #category : #accessing } -XMLDOMParser >> document [ - ^ document -] - -{ #category : #accessing } -XMLDOMParser >> document: aDocument [ - document := aDocument -] - -{ #category : #'handling - declaration' } -XMLDOMParser >> elementDeclaration: anElementName contentModel: aContentModel [ - self topNodeAdd: - (self nodeFactory elementDeclarationClass - element: anElementName - contentModel: aContentModel) -] - -{ #category : #'handling - lexical' } -XMLDOMParser >> endDTD [ - self popNode -] - -{ #category : #'handling - content' } -XMLDOMParser >> endDocument [ - "nodeStack is not popped here for efficiency because #document keeps - a reference to the root too, and there may not be a root to pop - anyway if it's an inner XML parser" -] - -{ #category : #'handling - content' } -XMLDOMParser >> endElement: aQualifiedName prefix: aPrefix uri: aURI localName: aLocalName [ - self popNode -] - -{ #category : #'handling - declaration' } -XMLDOMParser >> generalEntityDeclaration: aName publicID: aPublicID systemID: aSystemID ndata: aNotationName [ - self topNodeAdd: - (self nodeFactory generalEntityDeclarationClass - name: aName - publicID: aPublicID - systemID: aSystemID - ndata: aNotationName) -] - -{ #category : #'handling - declaration' } -XMLDOMParser >> generalEntityDeclaration: aName replacement: aReplacement [ - self topNodeAdd: - (self nodeFactory generalEntityDeclarationClass - name: aName - replacement: aReplacement) -] - -{ #category : #'handling - content' } -XMLDOMParser >> ignorableWhitespace: aString [ - self preservesIgnorableWhitespace - ifTrue: [self characters: aString] -] - -{ #category : #initialization } -XMLDOMParser >> initializeInnerXMLParser: aParser [ - self document - ifNotNil: [ - aParser driver isStandalone: self document isStandalone. - self document hasDoctypeDefinition - ifTrue: [ - aParser driver doctypeDefinition addGeneralEntitiesFrom: - self document doctypeDefinition]]. - - self nodeStack do: [:each | - each isElement - ifTrue: [ - self - startInnerXMLElement: each - forParser: aParser]]. - - aParser state: self topNode newInnerXMLState. - aParser state isContentState - ifTrue: [self startContent]. -] - -{ #category : #initialization } -XMLDOMParser >> initializeParser: aParser [ - super initializeParser: aParser. - - self nodeStack size > 0 - ifTrue: [self initializeInnerXMLParser: aParser]. -] - -{ #category : #private } -XMLDOMParser >> innerXMLRootNode: aRootNode [ - self - configuration: aRootNode configuration; - document: aRootNode document; - pushNode: aRootNode -] - -{ #category : #configuring } -XMLDOMParser >> nodeFactory [ - ^ self configuration nodeFactory -] - -{ #category : #configuring } -XMLDOMParser >> nodeFactory: aNodeFactory [ - self configuration nodeFactory: aNodeFactory -] - -{ #category : #deprecated } -XMLDOMParser >> nodeListClass [ - "will be deprecated" - ^ self configuration nodeListClass -] - -{ #category : #deprecated } -XMLDOMParser >> nodeListClass: aClass [ - "will be deprecated" - self configuration nodeListClass: aClass -] - -{ #category : #private } -XMLDOMParser >> nodeStack [ - ^ nodeStack -] - -{ #category : #'handling - declaration' } -XMLDOMParser >> notationDeclaration: aName publicID: aPublicID systemID: aSystemID [ - self topNodeAdd: - (self nodeFactory notationDeclarationClass - name: aName - publicID: aPublicID - systemID: aSystemID) -] - -{ #category : #initialization } -XMLDOMParser >> on: aStringOrStream [ - super on: aStringOrStream. - - document := nil. - nodeStack := OrderedCollection new: 10. - currentScope := nil. -] - -{ #category : #configuring } -XMLDOMParser >> optimizeForLargeDocuments [ - super optimizeForLargeDocuments. - - "use the non-caching attribute list class to save memory" - self configuration attributeListClass: XMLAttributeList. -] - -{ #category : #'handling - declaration' } -XMLDOMParser >> parameterEntityDeclaration: aName publicID: aPublicID systemID: aSystemID [ - self topNodeAdd: - (self nodeFactory parameterEntityDeclarationClass - name: aName - publicID: aPublicID - systemID: aSystemID) -] - -{ #category : #'handling - declaration' } -XMLDOMParser >> parameterEntityDeclaration: aName replacement: aReplacement [ - self topNodeAdd: - (self nodeFactory parameterEntityDeclarationClass - name: aName - replacement: aReplacement) -] - -{ #category : #parsing } -XMLDOMParser >> parsingResult [ - ^ self document -] - -{ #category : #private } -XMLDOMParser >> popNode [ - ^ self nodeStack removeLast -] - -{ #category : #configuring } -XMLDOMParser >> preservesCDataNodes [ - ^ self configuration preservesCDataNodes -] - -{ #category : #configuring } -XMLDOMParser >> preservesCDataNodes: aBoolean [ - "if enabled, sections will be preserved as CDATA nodes - and not ordinary string nodes and won't be merged with adjacent string - nodes (not default)" - self configuration preservesCDataNodes: aBoolean -] - -{ #category : #configuring } -XMLDOMParser >> preservesCommentNodes [ - ^ self configuration preservesCommentNodes -] - -{ #category : #configuring } -XMLDOMParser >> preservesCommentNodes: aBoolean [ - "if enabled, comments will be preserved as comment nodes (not default)" - self configuration preservesCommentNodes: aBoolean -] - -{ #category : #configuring } -XMLDOMParser >> preservesIgnorableWhitespace [ - ^ self configuration preservesIgnorableWhitespace -] - -{ #category : #configuring } -XMLDOMParser >> preservesIgnorableWhitespace: aBoolean [ - "If enabled, ignorable whitespace (identified by DTD element declarations - with element content) will be preserved as string nodes. Enables validation. - (Not default)" - - self configuration preservesIgnorableWhitespace: aBoolean -] - -{ #category : #'handling - content' } -XMLDOMParser >> processingInstruction: aTargetString data: aDataString [ - self topNodeAdd: - (self nodeFactory newPI - target: aTargetString; - data: aDataString) -] - -{ #category : #private } -XMLDOMParser >> pushElement: anElement [ - self topNodeAdd: anElement. - ^ self pushNode: anElement. -] - -{ #category : #private } -XMLDOMParser >> pushNode: aNode [ - ^ self nodeStack addLast: aNode - -] - -{ #category : #'handling - lexical' } -XMLDOMParser >> startDTD: aRootElementName publicID: aPublicID systemID: aSystemID [ - | doctypeDeclaration | - - doctypeDeclaration := - self nodeFactory doctypeDeclarationClass - root: aRootElementName - publicID: aPublicID - systemID: aSystemID. - self pushNode: doctypeDeclaration. - self document doctypeDeclaration: doctypeDeclaration. -] - -{ #category : #'handling - content' } -XMLDOMParser >> startDocument [ - "inner XML parsers should ignore this event" - self nodeStack size > 0 - ifFalse: [ - self - document: self nodeFactory newDocument; - pushNode: self document. - - self document configuration: self configuration] -] - -{ #category : #'handling - content' } -XMLDOMParser >> startElement: aQualifiedName prefix: aPrefix uri: aURI localName: aLocalName attributes: anAttributeDictionary [ - self pushElement: - ((self nodeFactory - classForElement: aQualifiedName - namespaceURI: aURI - localName: aLocalName - attributes: anAttributeDictionary) new - setConfiguration: self configuration - name: aQualifiedName - localName: aLocalName - attributes: anAttributeDictionary - namespaceScope: currentScope) -] - -{ #category : #private } -XMLDOMParser >> startInnerXMLElement: anElement forParser: aParser [ - aParser driver currentElement: anElement name. - anElement hasNamespaces - ifTrue: [aParser driver currentScope: anElement namespaceScope]. -] - -{ #category : #private } -XMLDOMParser >> startScope: aNamespaceScope [ - currentScope := aNamespaceScope -] - -{ #category : #accessing } -XMLDOMParser >> topNode [ - ^ self nodeStack xmlLastOrNil -] - -{ #category : #private } -XMLDOMParser >> topNodeAdd: aNode [ - ^ self nodeStack last addNode: aNode -] - -{ #category : #private } -XMLDOMParser >> topNodeAddString: aString [ - ^ self nodeStack last addString: aString -] - -{ #category : #'handling - lexical' } -XMLDOMParser >> xmlVersion: aVersionFloat encoding: anEncoding standalone: aBoolean [ - self document ifNotNil: [ - self document - version: aVersionFloat; - encoding: anEncoding; - isStandalone: aBoolean] -] diff --git a/src/XML-Parser/XMLDeclarationNode.class.st b/src/XML-Parser/XMLDeclarationNode.class.st deleted file mode 100644 index 0eb34102e..000000000 --- a/src/XML-Parser/XMLDeclarationNode.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -This is an abstract class for markup declaration nodes in the internal subset. -" -Class { - #name : #XMLDeclarationNode, - #superclass : #XMLNode, - #category : #'XML-Parser-DOM' -} - -{ #category : #testing } -XMLDeclarationNode >> isDeclaration [ - ^ true -] diff --git a/src/XML-Parser/XMLDecodingReadStreamAdapter.class.st b/src/XML-Parser/XMLDecodingReadStreamAdapter.class.st deleted file mode 100644 index f79846c70..000000000 --- a/src/XML-Parser/XMLDecodingReadStreamAdapter.class.st +++ /dev/null @@ -1,146 +0,0 @@ -" -A read stream adapter that decodes stream contents using a stream converter. Used to handle encoded external streams. - -The class #on: and #on:streamConverter: instance creation messages accept character and binary streams. -" -Class { - #name : #XMLDecodingReadStreamAdapter, - #superclass : #XMLReadStreamAdapter, - #instVars : [ - 'peekChar', - 'prePeekStreamPosition', - 'streamConverter' - ], - #category : #'XML-Parser-Streams' -} - -{ #category : #'instance creation' } -XMLDecodingReadStreamAdapter class >> nonDecodingOn: aStream [ - ^ self - on: aStream - streamConverter: XMLStreamConverter null -] - -{ #category : #'instance creation' } -XMLDecodingReadStreamAdapter class >> nonDecodingOnIfBinaryOrExternal: aStream [ - ^ aStream isXMLBinaryOrExternalStream - ifTrue: [ - self - on: aStream - streamConverter: XMLStreamConverter null] - ifFalse: [nil] -] - -{ #category : #'instance creation' } -XMLDecodingReadStreamAdapter class >> on: aStream [ - ^ self - on: aStream - streamConverter: XMLStreamConverter default -] - -{ #category : #'instance creation' } -XMLDecodingReadStreamAdapter class >> on: aStream streamConverter: aStreamConverter [ - ^ (self basicOn: aStream) - streamConverter: aStreamConverter -] - -{ #category : #testing } -XMLDecodingReadStreamAdapter >> atEnd [ - ^ peekChar == nil - and: [stream atEnd] -] - -{ #category : #decoding } -XMLDecodingReadStreamAdapter >> detectEncoding [ - prePeekStreamPosition := nil. - peekChar := nil. - stream reset. - - (((self hasNullStreamConverter - or: [self hasImplicitStreamConverter]) - ifTrue: [XMLImplicitEncodingDetector] - ifFalse: [XMLEncodingDetector]) - on: stream) streamConverterForEncoding - ifNotNil: [:converter | - self streamConverter: converter]. -] - -{ #category : #testing } -XMLDecodingReadStreamAdapter >> hasDefaultStreamConverter [ - ^ streamConverter isDefault -] - -{ #category : #testing } -XMLDecodingReadStreamAdapter >> hasImplicitStreamConverter [ - ^ streamConverter isImplicit -] - -{ #category : #testing } -XMLDecodingReadStreamAdapter >> hasNullStreamConverter [ - ^ streamConverter isNull -] - -{ #category : #testing } -XMLDecodingReadStreamAdapter >> isXMLConvertingStreamAdapter [ - ^ true -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapter >> next [ - peekChar - ifNil: [^ streamConverter nextFromStream: stream] - ifNotNil: [:nextChar | - prePeekStreamPosition := nil. - peekChar := nil. - ^ nextChar] -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapter >> peek [ - ^ peekChar - ifNil: [ - prePeekStreamPosition := stream position. - peekChar := streamConverter nextFromStream: stream] -] - -{ #category : #positioning } -XMLDecodingReadStreamAdapter >> position [ - ^ prePeekStreamPosition ifNil: [stream position] -] - -{ #category : #positioning } -XMLDecodingReadStreamAdapter >> position: anInteger [ - prePeekStreamPosition := nil. - peekChar := nil. - stream position: anInteger. -] - -{ #category : #printing } -XMLDecodingReadStreamAdapter >> printStreamOn: aStream [ - streamConverter - printWithConvertableStream: stream - on: aStream -] - -{ #category : #positioning } -XMLDecodingReadStreamAdapter >> reset [ - prePeekStreamPosition := nil. - peekChar := nil. - stream reset. -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapter >> streamConverter [ - ^ streamConverter -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapter >> streamConverter: aStreamConverter [ - streamConverter := - aStreamConverter ifNil: [XMLStreamConverter null]. - peekChar - ifNotNil: [ - stream position: prePeekStreamPosition. - prePeekStreamPosition := nil. - peekChar := nil]. -] diff --git a/src/XML-Parser/XMLDoctypeDeclaration.class.st b/src/XML-Parser/XMLDoctypeDeclaration.class.st deleted file mode 100644 index e4caf96d1..000000000 --- a/src/XML-Parser/XMLDoctypeDeclaration.class.st +++ /dev/null @@ -1,70 +0,0 @@ -" -This class represents a declaration. It stores the root element name, public/system ID, and its nodes are the internal subset. -" -Class { - #name : #XMLDoctypeDeclaration, - #superclass : #XMLNodeWithChildren, - #instVars : [ - 'root', - 'publicID', - 'systemID' - ], - #category : #'XML-Parser-DOM' -} - -{ #category : #'instance creation' } -XMLDoctypeDeclaration class >> root: aRootElementName publicID: aPublicID systemID: aSystemID [ - ^ self new - root: aRootElementName; - publicID: aPublicID; - systemID: aSystemID -] - -{ #category : #'instance creation' } -XMLDoctypeDeclaration >> newListForSelect [ - ^ XMLInternalSubsetList new: 10 -] - -{ #category : #defaults } -XMLDoctypeDeclaration >> nodeListClass [ - ^ XMLInternalSubsetList -] - -{ #category : #accessing } -XMLDoctypeDeclaration >> publicID [ - ^ publicID ifNil: [publicID := ''] -] - -{ #category : #accessing } -XMLDoctypeDeclaration >> publicID: aPublicID [ - publicID := aPublicID -] - -{ #category : #accessing } -XMLDoctypeDeclaration >> root [ - ^ root ifNil: [root := ''] -] - -{ #category : #accessing } -XMLDoctypeDeclaration >> root: aRootElementName [ - root := aRootElementName -] - -{ #category : #accessing } -XMLDoctypeDeclaration >> systemID [ - ^ systemID ifNil: [systemID := ''] -] - -{ #category : #accessing } -XMLDoctypeDeclaration >> systemID: aSystemID [ - systemID := aSystemID -] - -{ #category : #printing } -XMLDoctypeDeclaration >> writeXMLOn: aWriter [ - aWriter doctype - root: self root; - publicID: self publicID; - systemID: self systemID; - with: [self writeInnerXMLOn: aWriter] -] diff --git a/src/XML-Parser/XMLDoctypeDeclarationState.class.st b/src/XML-Parser/XMLDoctypeDeclarationState.class.st deleted file mode 100644 index 00ebb027a..000000000 --- a/src/XML-Parser/XMLDoctypeDeclarationState.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -A state for and internal subset tokens. -" -Class { - #name : #XMLDoctypeDeclarationState, - #superclass : #XMLPrologState, - #category : #'XML-Parser-Drivers' -} - -{ #category : #testing } -XMLDoctypeDeclarationState >> isDoctypeDeclarationState [ - ^ true -] diff --git a/src/XML-Parser/XMLDocument.class.st b/src/XML-Parser/XMLDocument.class.st deleted file mode 100644 index ab9d9427f..000000000 --- a/src/XML-Parser/XMLDocument.class.st +++ /dev/null @@ -1,207 +0,0 @@ -" -This class represents a document node, which is often the root of a DOM tree. Nodes can access their document ancestor with #document. -" -Class { - #name : #XMLDocument, - #superclass : #XMLNodeWithElements, - #instVars : [ - 'version', - 'encoding', - 'isStandalone', - 'doctypeDeclaration', - 'doctypeDefinition' - ], - #category : #'XML-Parser-DOM' -} - -{ #category : #'instance creation' } -XMLDocument class >> root: aRoot [ - ^ self new root: aRoot -] - -{ #category : #visiting } -XMLDocument >> acceptNodeVisitor: aNodeVisitor [ - ^ aNodeVisitor visitDocument: self -] - -{ #category : #accessing } -XMLDocument >> doctypeDeclaration [ - ^ doctypeDeclaration -] - -{ #category : #accessing } -XMLDocument >> doctypeDeclaration: aDoctypeDeclaration [ - doctypeDeclaration - ifNotNil: [doctypeDeclaration parent: nil]. - - aDoctypeDeclaration - ifNotNil: [ - aDoctypeDeclaration hasParent - ifTrue: [ - "remove it from its current parent" - aDoctypeDeclaration parent doctypeDeclaration: nil]. - aDoctypeDeclaration parent: self]. - - doctypeDeclaration := aDoctypeDeclaration. -] - -{ #category : #accessing } -XMLDocument >> doctypeDefinition [ - ^ doctypeDefinition -] - -{ #category : #accessing } -XMLDocument >> doctypeDefinition: aDoctypeDefinition [ - doctypeDefinition := aDoctypeDefinition -] - -{ #category : #accessing } -XMLDocument >> document [ - ^ self -] - -{ #category : #accessing } -XMLDocument >> documentRoot [ - "returns the root of the DOM tree" - ^ self -] - -{ #category : #accessing } -XMLDocument >> encoding [ - ^ encoding ifNil: [encoding := ''] -] - -{ #category : #accessing } -XMLDocument >> encoding: aString [ - encoding := aString -] - -{ #category : #private } -XMLDocument >> errorCannotHaveNonElementRoot [ - XMLDOMException signal: 'Cannot have non-element root' -] - -{ #category : #testing } -XMLDocument >> hasDoctypeDeclaration [ - ^ self doctypeDeclaration notNil -] - -{ #category : #testing } -XMLDocument >> hasDoctypeDefinition [ - ^ self doctypeDefinition notNil -] - -{ #category : #testing } -XMLDocument >> hasEncoding [ - ^ self encoding notEmpty -] - -{ #category : #testing } -XMLDocument >> hasRoot [ - ^ self root notNil -] - -{ #category : #private } -XMLDocument >> innerXMLStateClass [ - ^ XMLPostDoctypeDeclarationState -] - -{ #category : #testing } -XMLDocument >> isDocument [ - ^ true -] - -{ #category : #testing } -XMLDocument >> isStandalone [ - ^ isStandalone ifNil: [isStandalone := false] -] - -{ #category : #accessing } -XMLDocument >> isStandalone: aBoolean [ - isStandalone := aBoolean -] - -{ #category : #copying } -XMLDocument >> postCopy [ - super postCopy. - - doctypeDeclaration - ifNotNil: [doctypeDeclaration := doctypeDeclaration copy]. -] - -{ #category : #accessing } -XMLDocument >> root [ - "Returns the current root element or nil if there isn't one" - - ^ self firstElement -] - -{ #category : #accessing } -XMLDocument >> root: anElement [ - "Replaces the current root element (if any) with anElement, - leaving all other nodes in place" - - anElement isElement - ifFalse: [self errorCannotHaveNonElementRoot]. - - self firstElement - ifNil: [self addNode: anElement] - ifNotNil: [:firstElement | - self - replaceNode: firstElement - with: anElement]. -] - -{ #category : #validating } -XMLDocument >> validate [ - "revalidate against the DTD it was parsed with (if any)" - - self hasDoctypeDefinition - ifTrue: [ - self doctypeDefinition - removeElementIDReferences; - removeElementIDs. - self validateWith: self doctypeDefinition newValidator] -] - -{ #category : #validating } -XMLDocument >> validateWith: aValidator [ - "revalidate against a custom DTD or other validator" - - (XMLValidatingNodeVisitor validator: aValidator) visitDocument: self -] - -{ #category : #accessing } -XMLDocument >> version [ - ^ version -] - -{ #category : #accessing } -XMLDocument >> version: aVersionFloat [ - version := aVersionFloat -] - -{ #category : #printing } -XMLDocument >> writeDoctypeDeclarationOn: aWriter [ - self hasDoctypeDeclaration - ifTrue: [self doctypeDeclaration writeXMLOn: aWriter] -] - -{ #category : #printing } -XMLDocument >> writeXMLDeclarationOn: aWriter [ - self version - ifNotNil: [ - aWriter xml - version: self version; - encoding: self encoding; - standalone: self isStandalone; - write] -] - -{ #category : #printing } -XMLDocument >> writeXMLOn: aWriter [ - self - writeXMLDeclarationOn: aWriter; - writeDoctypeDeclarationOn: aWriter; - writeInnerXMLOn: aWriter -] diff --git a/src/XML-Parser/XMLDocumentValidator.class.st b/src/XML-Parser/XMLDocumentValidator.class.st deleted file mode 100644 index 34423f05c..000000000 --- a/src/XML-Parser/XMLDocumentValidator.class.st +++ /dev/null @@ -1,231 +0,0 @@ -" -This is a base class for XML document validators. -" -Class { - #name : #XMLDocumentValidator, - #superclass : #Object, - #instVars : [ - 'elementValidatorStack', - 'defaultXMLIDValidator' - ], - #category : #'XML-Parser-Validation' -} - -{ #category : #accessing } -XMLDocumentValidator >> attributeValidatorsFor: anElement [ - ^ self - attributeValidatorsFor: anElement - ifNone: [nil] -] - -{ #category : #accessing } -XMLDocumentValidator >> attributeValidatorsFor: anElement ifNone: aBlock [ - self subclassResponsibility -] - -{ #category : #accessing } -XMLDocumentValidator >> currentElementValidator [ - ^ self elementValidatorStack xmlLastOrNil -] - -{ #category : #accessing } -XMLDocumentValidator >> defaultElementValidatorFor: aName [ - ^ XMLAnyElementValidator element: aName -] - -{ #category : #private } -XMLDocumentValidator >> defaultXMLIDValidator [ - "used to validate xml:id attributes if there's no DTD or other validators" - ^ defaultXMLIDValidator - ifNil: [ - defaultXMLIDValidator := - XMLXMLIDAttributeValidator - element: '' - attribute: 'xml:id' - defaultValidator: - (XMLAttributeImpliedDefaultValidator attribute: 'xml:id'). - defaultXMLIDValidator - elementIDValidator: XMLElementIDValidator new; - yourself] -] - -{ #category : #accessing } -XMLDocumentValidator >> elementValidatorFor: anElement [ - ^ self - elementValidatorFor: anElement - ifNone: [nil] -] - -{ #category : #accessing } -XMLDocumentValidator >> elementValidatorFor: anElement ifNone: aBlock [ - self subclassResponsibility -] - -{ #category : #accessing } -XMLDocumentValidator >> elementValidatorStack [ - ^ elementValidatorStack ifNil: [elementValidatorStack := OrderedCollection new] -] - -{ #category : #private } -XMLDocumentValidator >> errorUnexpectEndOfElement: anElement [ - XMLValidationException - formatSignal: 'Element <{1}> terminated prematurely' - with: anElement -] - -{ #category : #testing } -XMLDocumentValidator >> hasAttributeValidators [ - self subclassResponsibility -] - -{ #category : #testing } -XMLDocumentValidator >> hasCurrentElementValidator [ - "optimized to avoid lazy initialization" - elementValidatorStack == nil - ifTrue: [^ false]. - ^ elementValidatorStack size > 0. -] - -{ #category : #testing } -XMLDocumentValidator >> hasElementValidators [ - self subclassResponsibility -] - -{ #category : #testing } -XMLDocumentValidator >> isCurrentElementWhitespaceIgnorable [ - ^ self hasCurrentElementValidator - and: [self currentElementValidator ignoresWhitespace] -] - -{ #category : #printing } -XMLDocumentValidator >> printOn: aStream [ - super printOn: aStream. - - self hasCurrentElementValidator - ifTrue: [ - aStream - nextPut: $(; - print: self currentElementValidator; - nextPut: $)]. -] - -{ #category : #validating } -XMLDocumentValidator >> unvalidatedAttributes: anAttributeCollection inElement: anElement [ - "sent when at least one attribute of an element wasn't validated by an - attribute validator and there are element or attribute validators defined" -] - -{ #category : #validating } -XMLDocumentValidator >> unvalidatedElement: anElement [ - "sent when an element was not validated by an element validator - and there are element or attribute validators defined" -] - -{ #category : #validating } -XMLDocumentValidator >> validateAttributes: aDictionary withAttributeValidatorsFor: anElement [ - | totalUnvalidatedAttributes validatedAttributes | - - totalUnvalidatedAttributes := aDictionary size. - (self attributeValidatorsFor: anElement) - ifNotNil: [:attributeValidators | - attributeValidators keysAndValuesDo: [:attribute :validator | - (aDictionary includesKey: attribute) - ifTrue: [ - "only initialize if needed, and as an OrderedCollection that - is only converted to a Set later if needed, for permformance" - (validatedAttributes - ifNil: [ - validatedAttributes := - OrderedCollection new: totalUnvalidatedAttributes]) - addLast: attribute. - totalUnvalidatedAttributes := totalUnvalidatedAttributes - 1]. - validator validateAttributes: aDictionary]]. - - totalUnvalidatedAttributes > 0 - ifTrue: [ - self - unvalidatedAttributes: - (validatedAttributes - ifNil: [aDictionary keys] - ifNotNil: [| validatedAttributesSet | - validatedAttributesSet := validatedAttributes asSet. - aDictionary keys reject: [:each | - validatedAttributesSet includes: each]]) - inElement: anElement]. -] - -{ #category : #validating } -XMLDocumentValidator >> validateComment: aString [ - self hasCurrentElementValidator - ifTrue: [self currentElementValidator validateComment: aString] -] - -{ #category : #validating } -XMLDocumentValidator >> validateEndDocument [ - self validateIDReferences -] - -{ #category : #validating } -XMLDocumentValidator >> validateEndTag: anElement [ - self hasCurrentElementValidator - ifTrue: [ - self currentElementValidator atEnd - ifFalse: [self errorUnexpectEndOfElement: anElement]. - self elementValidatorStack removeLast] -] - -{ #category : #validating } -XMLDocumentValidator >> validateIDReferences [ - self subclassResponsibility -] - -{ #category : #validating } -XMLDocumentValidator >> validatePCData: aString [ - self hasCurrentElementValidator - ifTrue: [self currentElementValidator validatePCData: aString] -] - -{ #category : #validating } -XMLDocumentValidator >> validatePI: aTargetString data: aDataString [ - self hasCurrentElementValidator - ifTrue: [ - self currentElementValidator - validatePI: aTargetString - data: aDataString] -] - -{ #category : #validating } -XMLDocumentValidator >> validateRootElement: anElement [ -] - -{ #category : #validating } -XMLDocumentValidator >> validateStartTag: anElement [ - self currentElementValidator - ifNotNil: [:elementValidator | - elementValidator validateStartTag: anElement]. - - self elementValidatorStack addLast: - (self - elementValidatorFor: anElement - ifNone: [ - self - unvalidatedElement: anElement; - defaultElementValidatorFor: anElement]) asReadyElementValidator. -] - -{ #category : #validating } -XMLDocumentValidator >> validateStartTag: anElement attributes: aDictionary [ - (self hasElementValidators - or: [self hasAttributeValidators]) - ifTrue: [ - self validateStartTag: anElement. - self - validateAttributes: aDictionary - withAttributeValidatorsFor: anElement] -] - -{ #category : #validating } -XMLDocumentValidator >> validateXMLIDAttributeIn: aDictionary [ - self hasAttributeValidators - ifFalse: [self defaultXMLIDValidator validateAttributes: aDictionary] -] diff --git a/src/XML-Parser/XMLElement.class.st b/src/XML-Parser/XMLElement.class.st deleted file mode 100644 index 9e927bb67..000000000 --- a/src/XML-Parser/XMLElement.class.st +++ /dev/null @@ -1,886 +0,0 @@ -" -The class represents an element node, which has a qualified or unqualified name and optionally attributes, namespace declarations and child nodes. - -Element names can be tested using #isNamed: and #isNamedAny:, which test both the qualified and local name. - -If the name is qualified and namespace support is enabled (the default), then the prefix must be mapped to a namespace URI in the element or an ancestor. The class-side instance creation #name:namespaceURI:* and #name:namespaces:* messages and the instance-side #name:namespaceURI: message can set both simultaneously. If namespace support is disabled, prefixes are not checked. - -The #attribute* messages provide a Dictionary-like protocol for manipulating attribute nodes. Unlike the #elementAt:* messages, they match qualified names only, and attribute value accessors return empty strings if the attribute is absent. The underlying attribute node list can be accessed using #attributeNodes (copy before modifying if you don't want to change the element's attributes), and the names/values can be obtained as an (order-preserving) dictionary using #attributes. - -See the superclasses for more info. -" -Class { - #name : #XMLElement, - #superclass : #XMLNodeWithElements, - #instVars : [ - 'name', - 'localName', - 'attributes', - 'namespaceScope' - ], - #category : #'XML-Parser-DOM' -} - -{ #category : #'instance creation' } -XMLElement class >> name: aLocalName [ - ^ self named: aLocalName -] - -{ #category : #'instance creation' } -XMLElement class >> name: aLocalName attributes: anAssociationCollection [ - "Returns a new element with the specified name and attributes. - - Both aLocalName and the attributes must not be prefixed or a namespace - exception will be thrown. - - The anAssociationCollection argument can be a dictionary or any collection - of associations." - - ^ (self named: aLocalName) - setAttributes: anAssociationCollection -] - -{ #category : #'instance creation' } -XMLElement class >> name: aQualifiedName namespaceURI: aURI [ - "Returns a new element with the specified name and namespace URI. - - If aQualifiedName has a prefix, then aURI must be non-empty and the prefix - will be bound to it. Otherwise aURI will be declared as the default namespace." - - ^ self new - name: aQualifiedName - namespaceURI: aURI -] - -{ #category : #'instance creation' } -XMLElement class >> name: aQualifiedName namespaceURI: aURI attributes: anAssociationCollection [ - "Returns a new element with the specified name, namespace URI, and attributes. - - If aQualifiedName has a prefix, then aURI must be non-empty and the prefix - will be bound to it. Otherwise aURI will be declared as the default namespace. - If the attributes are prefixed, then aQualifiedName must have the same prefix - or a namespace exception will be thrown. - - The anAssociationCollection argument can be a dictionary or any collection - of associations." - - ^ (self - name: aQualifiedName - namespaceURI: aURI) - setAttributes: anAssociationCollection -] - -{ #category : #'instance creation' } -XMLElement class >> name: aQualifiedName namespaces: anAssociationCollection [ - "Returns a new element with the specified name and namespaces. - - If aQualifiedName has a prefix, then anAssociationCollection must contain - an association for it or a namespace exception will be thrown. - - The anAssociationCollection argument can be a dictionary or any collection - of associations. An association with an empty string key sets the default - namespace." - - ^ self new - declareNamespaces: anAssociationCollection; - name: aQualifiedName -] - -{ #category : #'instance creation' } -XMLElement class >> name: aQualifiedName namespaces: aNamespaceAssociationCollection attributes: anAttributeAssociationCollection [ - "Returns a new element with the specified name, namespaces, and attributes. - - If aQualifiedName or one of the attributes has a prefix, then - aNamespaceAssociationCollection must contain an association for it or a - namespace exception will be thrown. - - The aNamespaceAssociationCollection and anAttributeAssociationCollection - arguments can be dictionaries or any collection of associations. An - association with an empty string key sets the default namespace." - - ^ (self - name: aQualifiedName - namespaces: aNamespaceAssociationCollection) - setAttributes: anAttributeAssociationCollection -] - -{ #category : #'instance creation' } -XMLElement class >> named: aLocalName [ - "Returns a new element with the specified name. - - The argument must not be prefixed or a namespace exception will be thrown." - - ^ self new name: aLocalName -] - -{ #category : #visiting } -XMLElement >> acceptNodeVisitor: aNodeVisitor [ - ^ aNodeVisitor visitElement: self -] - -{ #category : #notifying } -XMLElement >> addedAttribute: anAttribute [ - anAttribute element - ifNotNil: [:element | - element == self - ifFalse: [element removeAttributeNode: anAttribute]]. - anAttribute element: self. - self validateNamespacePrefixOfAttribute: anAttribute. -] - -{ #category : #private } -XMLElement >> addedElement: anElement [ - (self hasNamespaces - and: [self namespaceScope ~= anElement namespaceScope]) - ifTrue: [ - anElement allElementsDo: [:each | - each namespaceScope inheritMappingsFrom: self namespaceScope]] -] - -{ #category : #enumerating } -XMLElement >> allElementsDo: aBlock [ - "evaluates aBlock for the receiver and all descendant elements" - - aBlock value: self. - self hasChildren - ifTrue: [self elementsDo: [:each | each allElementsDo: aBlock]]. -] - -{ #category : #private } -XMLElement >> allNamespaceScopesRemapPrefix: aPrefix from: anOldURIOrNil to: aNewURI [ - (self namespaceScope - prefixMappingAt: aPrefix - ifAbsent: [anOldURIOrNil]) = anOldURIOrNil - ifTrue: [ - self namespaceScope - mapPrefix: aPrefix - to: aNewURI. - "we only need to check the attributes if we've remapped an - existing, non-default namespace" - (anOldURIOrNil notNil - and: [aPrefix size > 0]) - ifTrue: [self validateNamespacePrefixesOfAttributes]. - self elementsDo: [:each | - each - allNamespaceScopesRemapPrefix: aPrefix - from: anOldURIOrNil - to: aNewURI]] -] - -{ #category : #private } -XMLElement >> allNamespaceScopesUnmapPrefix: aPrefix mappedTo: aURI [ - (self namespaceScope - includesPrefix: aPrefix - mappedTo: aURI) - ifTrue: [ - self namespaceScope unmapPrefix: aPrefix. - self - validateNamespacePrefix; - validateNamespacePrefixesOfAttributes. - self elementsDo: [:each | - each - allNamespaceScopesUnmapPrefix: aPrefix - mappedTo: aURI]] -] - -{ #category : #accessing } -XMLElement >> attributeAssociations [ - "returns attribute name->value associations" - - ^ self attributeNodes attributeAssociations -] - -{ #category : #accessing } -XMLElement >> attributeAt: aName [ - "returns the value of the attribute whose full name matches aName or an - empty string if there isn't any" - - ^ self attributeNodes attributeValueAt: aName -] - -{ #category : #accessing } -XMLElement >> attributeAt: aName ifAbsent: aBlock [ - "returns the value of the attribute whose full name matches aName or the - value of aBlock if there isn't any" - - ^ self attributeNodes - attributeValueAt: aName - ifAbsent: aBlock -] - -{ #category : #accessing } -XMLElement >> attributeAt: aName ifAbsentPut: aBlock [ - "sets the value of the attribute whose full name matches aName to the value - of aBlock if there isn't one already" - - ^ self attributeNodes - attributeValueAt: aName - ifAbsentPut: aBlock -] - -{ #category : #accessing } -XMLElement >> attributeAt: aName put: aValue [ - "sets the value of the attribute whose full name matches aName to the value - aValue" - - ^ self attributeNodes - attributeValueAt: aName - put: aValue -] - -{ #category : #defaults } -XMLElement >> attributeListClass [ - ^ self configuration nodeFactory attributeListClass -] - -{ #category : #accessing } -XMLElement >> attributeNames [ - ^ self attributeNodes attributeNames -] - -{ #category : #enumerating } -XMLElement >> attributeNamesAndValuesDo: aTwoArgumentBlock [ - self attributeNodes attributeNamesAndValuesDo: aTwoArgumentBlock -] - -{ #category : #enumerating } -XMLElement >> attributeNamesDo: aBlock [ - self attributeNodes attributeNamesDo: aBlock -] - -{ #category : #accessing } -XMLElement >> attributeNodeAt: aName [ - "returns the attribute node whose qualified or local name matches aName - (unlike attributeAt:, which matches the full name exactly), or nil if there - isn't any" - - ^ self attributeNodes attributeNodeAt: aName -] - -{ #category : #accessing } -XMLElement >> attributeNodeAt: aName ifAbsent: aBlock [ - "returns the attribute node whose qualified or local name matches aName - (unlike attributeAt:ifAbsent:, which matches the full name exactly), or - the value of aBlock if there isn't any" - - ^ self attributeNodes - attributeNodeAt: aName - ifAbsent: aBlock -] - -{ #category : #accessing } -XMLElement >> attributeNodeAt: aName namespaceURI: aURI [ - "returns the attribute node whose qualified or local name matches aName - (unlike attributeAt:, which matches the full name exactly) and whose - namespace URI matches aURI, or nil if there isn't any" - - ^ self attributeNodes - attributeNodeAt: aName - namespaceURI: aURI -] - -{ #category : #accessing } -XMLElement >> attributeNodeAt: aName namespaceURI: aURI ifAbsent: aBlock [ - "returns the attribute node whose qualified or local name matches aName - (unlike attributeAt:ifAbsent:, which matches the full name exactly) and - whose namespace URI matches aURI, or the value of aBlock if there isn't any" - - ^ self attributeNodes - attributeNodeAt: aName - namespaceURI: aURI - ifAbsent: aBlock -] - -{ #category : #accessing } -XMLElement >> attributeNodes [ - "Returns the attribute node list. Can be modified, but adding or removing - attributes also adds or removes them from the element. Copy before - modifying if you don't want that." - - ^ attributes ifNil: [attributes := self attributeListClass observer: self] -] - -{ #category : #enumerating } -XMLElement >> attributeNodesDo: aBlock [ - self attributeNodes do: aBlock -] - -{ #category : #accessing } -XMLElement >> attributes [ - "returns a new order preserving dictionary of attribute names and values" - - ^ self attributeNodes attributes -] - -{ #category : #namespacing } -XMLElement >> declareNamespaces: anAssociationCollection [ - self ensureUsesNamespaces. - anAssociationCollection associationsDo: [:each | - self - declarePrefix: each key - uri: each value] -] - -{ #category : #namespacing } -XMLElement >> declarePrefix: aPrefix uri: aURI [ - self ensureUsesNamespaces. - self - allNamespaceScopesRemapPrefix: aPrefix - from: - (self namespaceScope - prefixMappingAt: aPrefix - ifAbsent: [nil]) - to: aURI. -] - -{ #category : #namespacing } -XMLElement >> declaredPrefixes [ - ^ self usesNamespaces "avoid lazy initializing the scope" - ifTrue: [self namespaceScope mappedPrefixes] - ifFalse: [#()] -] - -{ #category : #testing } -XMLElement >> declaresDefaultNamespace [ - "Did the receiver declare a new default namespace rather than inheriting one?" - - ^ self namespaceScope hasDefaultNamespace - and: [self isRoot - or: [self defaultNamespace ~= self parent defaultNamespace]] -] - -{ #category : #testing } -XMLElement >> declaresPrefix: aPrefix uri: aURI [ - "Did the receiver declare a new prefix/uri pair rather than inheriting it?" - - ^ (self isDeclaredPrefix: aPrefix uri: aURI) - and: [self isRoot - or: [(self parent isDeclaredPrefix: aPrefix uri: aURI) not]] -] - -{ #category : #namespacing } -XMLElement >> defaultNamespace [ - ^ self usesNamespaces "avoid lazy initializing the scope" - ifTrue: [self namespaceScope defaultNamespace] - ifFalse: [''] -] - -{ #category : #namespacing } -XMLElement >> defaultNamespace: aURI [ - self - declarePrefix: '' - uri: aURI -] - -{ #category : #accessing } -XMLElement >> expandedName [ - "Returns the expanded name of the element as a string in the form of - '{namespaceURI}localName' if there's a namespace URI or 'localName' if there - isn't" - - ^ self localName expandWithXMLNamespaceURI: self namespaceURI -] - -{ #category : #testing } -XMLElement >> hasAttributes [ - "returns true if this element has attribute" - - "optimized to avoid lazy initialization" - attributes == nil - ifTrue: [^ false]. - ^ attributes size > 0. -] - -{ #category : #testing } -XMLElement >> hasID: anID [ - | document doctypeDefinition attributeValidators | - - self hasAttributes - ifFalse: [^ false]. - - ((document := self document) notNil - and: [(doctypeDefinition := document doctypeDefinition) notNil - and: [doctypeDefinition hasAttributeValidators - and: [ - (attributeValidators := - doctypeDefinition attributeValidatorsAt: self name) notNil]]]) - ifTrue: [ - ^ self - hasUndeclaredOrDeclaredID: anID - declaredWith: attributeValidators] - ifFalse: [^ self hasUndeclaredID: anID]. -] - -{ #category : #testing } -XMLElement >> hasNamespaceURI [ - ^ self namespaceURI notEmpty -] - -{ #category : #testing } -XMLElement >> hasNamespaces [ - "returns true if the receiver declared or inherited namespace declarations" - - "optimized to avoid lazy initialization" - namespaceScope == nil - ifTrue: [^ false]. - ^ namespaceScope hasNamespaces. -] - -{ #category : #testing } -XMLElement >> hasPrefix [ - "returns true if the receiver's name is a qualified name with a prefix" - - ^ self name size > self localName size -] - -{ #category : #private } -XMLElement >> hasUndeclaredID: anID [ - "just look for an 'xml:id' attribute if there were no declarations" - ^ (self - attributeAt: 'xml:id' - ifAbsent: [^ false]) = anID -] - -{ #category : #private } -XMLElement >> hasUndeclaredOrDeclaredID: anID declaredWith: anAttributeValidatorDictionary [ - self attributeNamesAndValuesDo: [:attributeName :attributeValue | - "only check its value if it's been declared as an ID attribute - or if it's named 'xml:id'" - ((anAttributeValidatorDictionary - at: attributeName - ifAbsent: [nil]) - ifNil: [attributeName = 'xml:id'] - ifNotNil: [:attributeValidator | attributeValidator isID]) - ifTrue: [ - attributeValue = anID - ifTrue: [^ true]]]. - ^ false. -] - -{ #category : #testing } -XMLElement >> includesAttribute: aName [ - ^ self attributeNodes includesAttribute: aName -] - -{ #category : #testing } -XMLElement >> includesAttributeNode: aName [ - ^ self attributeNodes includesAttributeNode: aName -] - -{ #category : #testing } -XMLElement >> includesAttributeNode: aName namespaceURI: aURI [ - ^ self attributeNodes - includesAttributeNode: aName - namespaceURI: aURI -] - -{ #category : #testing } -XMLElement >> isDeclaredPrefix: aPrefix [ - "is the namespace prefix aPrefix declared for the receiver and its descendants?" - - ^ self usesNamespaces - and: [self namespaceScope includesPrefix: aPrefix] -] - -{ #category : #testing } -XMLElement >> isDeclaredPrefix: aPrefix uri: aURI [ - "is the namespace prefix aPrefix mapped to aURI for the receiver and - its descendants?" - - ^ self usesNamespaces - and: [ - self namespaceScope - includesPrefix: aPrefix - mappedTo: aURI] -] - -{ #category : #testing } -XMLElement >> isElement [ - ^ true -] - -{ #category : #testing } -XMLElement >> isElementNamed: aName [ - "returns true if the receiver's qualified name or local name matches aName" - - ^ self isNamed: aName -] - -{ #category : #testing } -XMLElement >> isElementNamedAny: aNameCollection [ - "returns true if the receiver's qualified name or local name matches any - name in aNameCollection" - - ^ self isNamedAny: aNameCollection -] - -{ #category : #testing } -XMLElement >> isInLanguage: aLanguageTag [ - "Returns true if the receiver or one of its ancestors has an xml:lang - attribute, and if the value is an IETF language tag, like 'En-US', that matches - aLanguageTag. Matching is case-insensitive, and aLanguageTag can be partial, - like 'En', and use wildcards, like 'En-*'" - - ^ (self - attributeNodeAt: 'xml:lang' - ifAbsent: [ - ^ self hasParent - and: [self parent isInLanguage: aLanguageTag]]) - matchesLanguage: aLanguageTag -] - -{ #category : #testing } -XMLElement >> isNamed: aName [ - "Does the receiver's qualified or local name match aName?" - - ^ self name isXMLQualifiedOrLocalName: aName -] - -{ #category : #testing } -XMLElement >> isNamedAny: aNameCollection [ - "Does the receiver's qualified or local name match any of the names - in aNameCollection?" - - ^ aNameCollection includesXMLName: self name -] - -{ #category : #testing } -XMLElement >> isRoot [ - "Is the receiver the root element of a DOM tree?" - - ^ (self hasParent and: [self parent isElement]) not -] - -{ #category : #accessing } -XMLElement >> localName [ - "Returns the local name of the receiver, the name minus any leading - prefix and colon like 'local' in 'prefix:local'" - - ^ localName ifNil: [localName := self name xmlLocalNameAfterPrefix] -] - -{ #category : #accessing } -XMLElement >> name [ - "returns the full name of the element, either a qualified name if it has a - prefix or just a local name if it doesn't" - - ^ name ifNil: [name := ''] -] - -{ #category : #accessing } -XMLElement >> name: aName [ - "Renames the element. If aName is a qualified name and namespace checking is - enabled (default), then the prefix must already have been declared. This can - be done while renaming using name:namespaceURI." - - self renameWith: [ - name := aName. - localName := aName xmlLocalNameAfterPrefix] -] - -{ #category : #accessing } -XMLElement >> name: aName namespaceURI: aURI [ - "Renames the element and also declares a namespace URI in one step. If aName - is qualified, then it declares the prefix to be mapped to aURI. If aName has - no prefix, then aURI is declared as the default namespace URI." - - self - declarePrefix: (aName xmlPrefixBeforeLocalName) uri: aURI; - name: aName -] - -{ #category : #private } -XMLElement >> namespaceScope [ - ^ namespaceScope ifNil: [namespaceScope := XMLNamespaceScope new] -] - -{ #category : #accessing } -XMLElement >> namespaceURI [ - ^ self resolvePrefix: self prefix -] - -{ #category : #private } -XMLElement >> newNamespaceScopeForAddedElement [ - ^ self usesNamespaces - ifTrue: [self namespaceScope copy] - ifFalse: [nil] -] - -{ #category : #accessing } -XMLElement >> nextElement [ - "returns the first element after the receiver that is a child of the same - parent if there is one, nil otherwise" - - ^ self parent ifNotNil: [:node | node elementAfter: self] -] - -{ #category : #copying } -XMLElement >> postCopy [ - super postCopy. - - namespaceScope - ifNotNil: [namespaceScope := namespaceScope copy]. - attributes - ifNotNil: [| copiedAttributes | - copiedAttributes := attributes copyEmpty observer: self. - attributes do: [:each | copiedAttributes addLast: each copy]. - attributes := copiedAttributes]. -] - -{ #category : #accessing } -XMLElement >> prefix [ - "Returns the prefix of the receiver's name or an empty string if there - isn't one." - - "this is recomputed from the qualified and local name instead of being - stored in an inst var to save memory." - ^ self name xmlPrefixBeforeLocalName: self localName -] - -{ #category : #accessing } -XMLElement >> prefix: aPrefix [ - "Changes the prefix of the name of the receiver to aPrefix. If namespace - checking is enabled (default) and aPrefix is non-empty, then aPrefix must - have been declared." - - self renameWith: [name := self localName qualifyWithXMLPrefix: aPrefix] -] - -{ #category : #accessing } -XMLElement >> previousElement [ - "returns the first element before the receiver that is a child of the same - parent if there is one, nil otherwise" - - ^ self parent ifNotNil: [:node | node elementBefore: self] -] - -{ #category : #removing } -XMLElement >> removeAttribute: aName [ - "Removes and returns the value of the attribute whose full name matches - aName or raises an error if it's absent." - - ^ (self attributeNodes removeAttribute: aName) value. -] - -{ #category : #removing } -XMLElement >> removeAttribute: aName ifAbsent: aBlock [ - "Removes and returns the value of the attribute whose full name matches - aName or returns the value of aBlock if it's absent." - - ^ self attributeNodes - removeAttribute: aName - ifAbsent: aBlock -] - -{ #category : #removing } -XMLElement >> removeAttributeNode: aNode [ - "Removes and returns the attribute node aNode or raises an error if - it's absent." - - ^ self attributeNodes remove: aNode -] - -{ #category : #removing } -XMLElement >> removeAttributeNode: aNode ifAbsent: aBlock [ - "Removes and returns the attribute node aNode or returns the value - of aBlock if it's absent." - - ^ self attributeNodes - remove: aNode - ifAbsent: aBlock -] - -{ #category : #removing } -XMLElement >> removeAttributes [ - self attributeNodes removeAll -] - -{ #category : #notifying } -XMLElement >> removedAttribute: anAttribute [ - anAttribute element: nil -] - -{ #category : #private } -XMLElement >> renameWith: aBlock [ - | oldName | - - oldName := self name. - aBlock value. - self name = oldName - ifFalse: [ - self validateNamespacePrefix. - self hasParent - ifTrue: [ - self parent - renamedElement: self - from: oldName - to: self name]]. -] - -{ #category : #notifying } -XMLElement >> renamedAttribute: anAttribute from: anOldName to: aNewName [ - self attributeNodes - renamedAttribute: anAttribute - from: anOldName - to: aNewName. - self validateNamespacePrefixOfAttribute: anAttribute. -] - -{ #category : #namespacing } -XMLElement >> resolvePrefix: aPrefix [ - "Resolves the namespace URI of aPrefix (the defualt namespace URI if aPrefix - is empty), including the predefined 'xml' and 'xmlns' prefixes. Returns an - empty string if aPrefix is unresolvable." - - ^ self - resolvePrefix: aPrefix - ifUnresolvable: '' -] - -{ #category : #namespacing } -XMLElement >> resolvePrefix: aPrefix ifUnresolvable: aBlock [ - "Resolves the namespace URI of aPrefix (the defualt namespace URI if aPrefix - is empty), including the predefined 'xml' and 'xmlns' prefixes. Returns the - value of aBlock if aPrefix is unresolvable." - - ^ self hasNamespaces "avoid lazy initializing the scope" - ifTrue: [ - self namespaceScope - resolvePrefix: aPrefix - ifUnresolvable: aBlock] - ifFalse: [aBlock value] -] - -{ #category : #namespacing } -XMLElement >> resolvePrefixesOfNamespaceURI: aURI [ - "returns a set of all the namespace prefixes of aURI" - ^ self usesNamespaces - ifTrue: [self namespaceScope resolvePrefixesOfNamespaceURI: aURI] - ifFalse: [Set new] -] - -{ #category : #initialization } -XMLElement >> setAttributes: anAssociationCollection [ - self attributeNodes setAttributes: anAssociationCollection -] - -{ #category : #private } -XMLElement >> setConfiguration: aConfiguration name: aName localName: aLocalName attributes: anAttributeDictionary namespaceScope: aNamespaceScope [ - "This should only be sent by DOM parsers/builders, not public API users" - - configuration := aConfiguration. - name := aName. - localName := aLocalName. - anAttributeDictionary size > 0 "optimization" - ifTrue: [ - "This consumes anAttributeDictionary, so it can never be used - again safely" - (attributes := - self attributeListClass new: anAttributeDictionary size) - observer: self; - setAttributesFromOrderPreservingDictionary: - anAttributeDictionary]. - namespaceScope := aNamespaceScope. -] - -{ #category : #private } -XMLElement >> setNamespaceScope: aNamespaceScope [ - namespaceScope := aNamespaceScope -] - -{ #category : #accessing } -XMLElement >> sortKey [ - ^ self name -] - -{ #category : #namespacing } -XMLElement >> undeclareDefaultNamespace [ - self undeclarePrefix: '' -] - -{ #category : #namespacing } -XMLElement >> undeclarePrefix: aPrefix [ - self ensureUsesNamespaces. - self - allNamespaceScopesUnmapPrefix: aPrefix - mappedTo: - (self namespaceScope - prefixMappingAt: aPrefix - ifAbsent: [^ self]). -] - -{ #category : #namespacing } -XMLElement >> undeclarePrefixes [ - self ensureUsesNamespaces. - self declaredPrefixes do: [:each | - self undeclarePrefix: each]. -] - -{ #category : #private } -XMLElement >> validateNamespacePrefix [ - (self usesNamespaces - and: [self hasPrefix]) - ifTrue: [ - self namespaceScope - validateAndResolvePrefix: self prefix - ofElement: self name] -] - -{ #category : #private } -XMLElement >> validateNamespacePrefixOfAttribute: anAttribute [ - | attributePrefix attributeLocalName attributeNamespaceURI | - - self usesNamespaces - ifFalse: [^ self]. - - attributePrefix := anAttribute prefix. - "send #validateAndResolvePrefix:ofAttribute: even if attributePrefix is - empty, to catch names like ':name', and return if the resolved URI is empty, - since non-default namespace URIs can't be empty, and attribute namespaces - are always non-default" - (attributeNamespaceURI := - self namespaceScope - validateAndResolvePrefix: attributePrefix - ofAttribute: anAttribute name) size > 0 - ifFalse: [^ self]. - attributeLocalName := - anAttribute name xmlLocalNameAfterPrefix: attributePrefix. - self attributeNodesDo: [:each | | eachLocalName | - (each ~= anAttribute - and: [(eachLocalName := each localName) = attributeLocalName]) - ifTrue: [ - (self namespaceScope resolvePrefix: - (each name xmlPrefixBeforeLocalName: eachLocalName)) = - attributeNamespaceURI - ifTrue: [ - self namespaceScope - errorAttribute: each - aliasesURI: attributeNamespaceURI]]]. -] - -{ #category : #private } -XMLElement >> validateNamespacePrefixesOfAttributes [ - (self usesNamespaces - and: [self hasAttributes]) - ifTrue: [ - self namespaceScope validatePrefixesOfAttributes: - self attributeNames] -] - -{ #category : #printing } -XMLElement >> writeXMLOn: aWriter [ - | tagWriter | - - tagWriter := aWriter tag: self name. - self hasNamespaces - ifTrue: [ - "non-standard setXMLNSDeclarations: use for performance" - tagWriter setXMLNSDeclarations: self namespaceScope prefixMappings]. - self hasAttributes - ifTrue: [ - "non-standard setAttributes: use for performance" - tagWriter setAttributes: self attributeNodes]. - self hasChildren - ifTrue: [tagWriter with: [self writeInnerXMLOn: aWriter]] - ifFalse: [tagWriter write]. -] diff --git a/src/XML-Parser/XMLElementClassMapper.class.st b/src/XML-Parser/XMLElementClassMapper.class.st deleted file mode 100644 index af1f3e952..000000000 --- a/src/XML-Parser/XMLElementClassMapper.class.st +++ /dev/null @@ -1,229 +0,0 @@ -" -This is a base class for element class mappers. Subclasses need to implement the abstract methods to register and lookup classes mapped to element names, namespace URIs, and attributes. -" -Class { - #name : #XMLElementClassMapper, - #superclass : #Object, - #category : #'XML-Parser-Utils' -} - -{ #category : #private } -XMLElementClassMapper >> camelCasedNameFromClassNameSegments: aNameSegmentCollection [ - ^ String streamContents: [:stream | - aNameSegmentCollection withIndexDo: [:each :i | - stream nextPutAll: - (i > 1 - ifTrue: [each] - ifFalse: [each asLowercase])]] -] - -{ #category : #accessing } -XMLElementClassMapper >> classForElement: aQualifiedName [ - ^ self - classForElement: aQualifiedName - ifNone: [nil] -] - -{ #category : #accessing } -XMLElementClassMapper >> classForElement: aQualifiedName attributes: anAssociationCollection [ - ^ self - classForElement: aQualifiedName - attributes: anAssociationCollection - ifNone: [nil] -] - -{ #category : #accessing } -XMLElementClassMapper >> classForElement: aQualifiedName attributes: anAssociationCollection ifNone: aBlock [ - self subclassResponsibility -] - -{ #category : #accessing } -XMLElementClassMapper >> classForElement: aQualifiedName ifNone: aBlock [ - self subclassResponsibility -] - -{ #category : #accessing } -XMLElementClassMapper >> classForElement: aQualifiedName namespaceURI: aURI [ - ^ self - classForElement: aQualifiedName - namespaceURI: aURI - ifNone: [nil] -] - -{ #category : #accessing } -XMLElementClassMapper >> classForElement: aQualifiedName namespaceURI: aURI attributes: anAssociationCollection [ - ^ self - classForElement: aQualifiedName - namespaceURI: aURI - attributes: anAssociationCollection - ifNone: [nil] -] - -{ #category : #accessing } -XMLElementClassMapper >> classForElement: aQualifiedName namespaceURI: aURI attributes: anAssociationCollection ifNone: aBlock [ - self subclassResponsibility -] - -{ #category : #accessing } -XMLElementClassMapper >> classForElement: aQualifiedName namespaceURI: aURI ifNone: aBlock [ - self subclassResponsibility -] - -{ #category : #accessing } -XMLElementClassMapper >> classForElement: aQualifiedName namespaceURI: aURI localName: aLocalName attributes: anAssociationCollection [ - ^ self - classForElement: aQualifiedName - namespaceURI: aURI - localName: aLocalName - attributes: anAssociationCollection - ifNone: [nil] -] - -{ #category : #accessing } -XMLElementClassMapper >> classForElement: aQualifiedName namespaceURI: aURI localName: aLocalName attributes: anAssociationCollection ifNone: aBlock [ - self subclassResponsibility -] - -{ #category : #private } -XMLElementClassMapper >> classNameFrom: aClass withoutIgnorableSuffixes: aSuffixCollection [ - | className | - - className := aClass name asString. - aSuffixCollection do: [:each | - (className endsWith: each) - ifTrue: [^ className allButLast: each size]]. - ^ className. -] - -{ #category : #private } -XMLElementClassMapper >> classNameSegmentsFrom: aString [ - | nameSegments startIndex | - - nameSegments := OrderedCollection new. - startIndex := 1. - 1 to: aString size do: [:i | - (((aString at: i) isLowercase - and: [aString size >= (i + 1) - and: [(aString at: i + 1) isLowercase not]]) - or: [ - ((aString at: i) isUppercase - and: [aString size >= (i + 2) - and: [(aString at: i + 1) isUppercase - and: [(aString at: i + 2) isUppercase not]]])]) - ifTrue: [ - nameSegments addLast: - (aString - copyFrom: startIndex - to: i). - startIndex := i + 1]]. - - startIndex <= aString size - ifTrue: [ - nameSegments addLast: - (aString - copyFrom: startIndex - to: aString size)]. - - ^ nameSegments. -] - -{ #category : #private } -XMLElementClassMapper >> hyphenatedNameFromClassNameSegments: aNameSegmentCollection [ - ^ String streamContents: [:stream | - aNameSegmentCollection - do: [:each | stream nextPutAll: each asLowercase] - separatedBy: [stream nextPut: $-]] -] - -{ #category : #mapping } -XMLElementClassMapper >> mapAllMatchingElementsToClass: aClass ignoringSuffixes: aSuffixCollection [ - | classNameWithoutSuffixes classNameSegments totalClassNameSegments | - - classNameWithoutSuffixes := - self - classNameFrom: aClass - withoutIgnorableSuffixes: aSuffixCollection. - classNameSegments := self classNameSegmentsFrom: classNameWithoutSuffixes. - (totalClassNameSegments := classNameSegments size) > 0 - ifFalse: [^ self]. - - "remove the class prefix if any" - totalClassNameSegments > 1 - ifTrue: [classNameSegments removeFirst]. - self - mapElement: - (self nameFromClassNameSegments: classNameSegments) - toClass: aClass. - self - mapElement: - (self camelCasedNameFromClassNameSegments: classNameSegments) - toClass: aClass. - self - mapElement: - (self hyphenatedNameFromClassNameSegments: classNameSegments) - toClass: aClass. - self - mapElement: - (self underscoredNameFromClassNameSegments: classNameSegments) - toClass: aClass. -] - -{ #category : #mapping } -XMLElementClassMapper >> mapAllMatchingElementsToClasses: aClassCollection ignoringSuffixes: aSuffixCollection [ - aClassCollection do: [:each | - self - mapAllMatchingElementsToClass: each - ignoringSuffixes: aSuffixCollection] -] - -{ #category : #mapping } -XMLElementClassMapper >> mapElement: anElement attributeSpec: anAttributeSpec toClass: aClass [ - self subclassResponsibility -] - -{ #category : #mapping } -XMLElementClassMapper >> mapElement: anElement namespaceURI: aURI attributeSpec: anAttributeSpec toClass: aClass [ - self subclassResponsibility -] - -{ #category : #mapping } -XMLElementClassMapper >> mapElement: anElement namespaceURI: aURI toClass: aClass [ - self subclassResponsibility -] - -{ #category : #mapping } -XMLElementClassMapper >> mapElement: anElement toClass: aClass [ - self subclassResponsibility -] - -{ #category : #mapping } -XMLElementClassMapper >> mapElements: anElementCollection namespaceURI: aNamespaceURI toClass: aClass [ - anElementCollection do: [:each | - self - mapElement: each - namespaceURI: aNamespaceURI - toClass: aClass] -] - -{ #category : #mapping } -XMLElementClassMapper >> mapElements: anElementCollection toClass: aClass [ - anElementCollection do: [:each | - self - mapElement: each - toClass: aClass] -] - -{ #category : #private } -XMLElementClassMapper >> nameFromClassNameSegments: aNameSegmentCollection [ - "avoid join: for Squeak/GS portability" - ^ String streamContents: [:stream | - aNameSegmentCollection do: [:each | stream nextPutAll: each]] -] - -{ #category : #private } -XMLElementClassMapper >> underscoredNameFromClassNameSegments: aNameSegmentCollection [ - ^ String streamContents: [:stream | - aNameSegmentCollection - do: [:each | stream nextPutAll: each asLowercase] - separatedBy: [stream nextPut: $_]] -] diff --git a/src/XML-Parser/XMLElementDeclaration.class.st b/src/XML-Parser/XMLElementDeclaration.class.st deleted file mode 100644 index 3427cb605..000000000 --- a/src/XML-Parser/XMLElementDeclaration.class.st +++ /dev/null @@ -1,47 +0,0 @@ -" -This is a class for declarations. -" -Class { - #name : #XMLElementDeclaration, - #superclass : #XMLDeclarationNode, - #instVars : [ - 'element', - 'contentModel' - ], - #category : #'XML-Parser-DOM' -} - -{ #category : #'instance creation' } -XMLElementDeclaration class >> element: anElementName contentModel: aContentModel [ - ^ self new - element: anElementName; - contentModel: aContentModel -] - -{ #category : #accessing } -XMLElementDeclaration >> contentModel [ - ^ contentModel ifNil: [contentModel := ''] -] - -{ #category : #accessing } -XMLElementDeclaration >> contentModel: aContentModel [ - contentModel := aContentModel -] - -{ #category : #accessing } -XMLElementDeclaration >> element [ - ^ element ifNil: [element := ''] -] - -{ #category : #accessing } -XMLElementDeclaration >> element: anElementName [ - element := anElementName -] - -{ #category : #printing } -XMLElementDeclaration >> writeXMLOn: aWriter [ - aWriter elementDeclaration - element: self element; - contentModel: self contentModel; - write -] diff --git a/src/XML-Parser/XMLElementIDValidator.class.st b/src/XML-Parser/XMLElementIDValidator.class.st deleted file mode 100644 index a54312003..000000000 --- a/src/XML-Parser/XMLElementIDValidator.class.st +++ /dev/null @@ -1,153 +0,0 @@ -" -This class is shared by attribute validators to validate element IDs and ID references, including xml:id IDs. -" -Class { - #name : #XMLElementIDValidator, - #superclass : #Object, - #instVars : [ - 'elementsAndIdAttributes', - 'idReferences', - 'ids' - ], - #category : #'XML-Parser-Validation' -} - -{ #category : #accessing } -XMLElementIDValidator >> elementsAndIDAttributes [ - ^ elementsAndIdAttributes ifNil: [elementsAndIdAttributes := Dictionary new] -] - -{ #category : #private } -XMLElementIDValidator >> errorDuplicateID: anID inAttribute: anAttribute [ - XMLValidationException - formatSignal: 'Duplicate element ID "{1}" used in attribute "{2}"' - with: anID - with: anAttribute -] - -{ #category : #private } -XMLElementIDValidator >> errorInvalidID: anID inAttribute: anAttribute [ - XMLValidationException - formatSignal: 'Invalid element ID value "{1}" in attribute "{2}"' - with: anID - with: anAttribute -] - -{ #category : #private } -XMLElementIDValidator >> errorMultipleIDAttributesForElement: anElement [ - XMLValidationException - formatSignal: 'Element <{1}> has multiple ID attributes' - with: anElement -] - -{ #category : #private } -XMLElementIDValidator >> errorUnknownIDReference: anID [ - XMLValidationException - formatSignal: 'Reference to unknown element ID "{1}"' - with: anID -] - -{ #category : #testing } -XMLElementIDValidator >> hasIDReferences [ - ^ idReferences notNil - and: [idReferences notEmpty] -] - -{ #category : #testing } -XMLElementIDValidator >> hasIDs [ - ^ ids notNil - and: [ids notEmpty] -] - -{ #category : #accessing } -XMLElementIDValidator >> idReferences [ - ^ idReferences ifNil: [idReferences := Set new] -] - -{ #category : #accessing } -XMLElementIDValidator >> ids [ - ^ ids ifNil: [ids := Set new] -] - -{ #category : #removing } -XMLElementIDValidator >> removeIDReferences [ - "Gemstone's Set does not understand removeAll, so nil reassignment - is used instead (will be lazy initialized by accessors)" - idReferences := nil -] - -{ #category : #removing } -XMLElementIDValidator >> removeIDs [ - "Gemstone's Set does not understand removeAll, so nil reassignment - is used instead (will be lazy initialized by accessors)" - ids := nil -] - -{ #category : #validating } -XMLElementIDValidator >> validateID: anID inAttribute: anAttribute [ - anID isXMLName - ifFalse: [ - self - errorInvalidID: anID - inAttribute: anAttribute]. - self - validateUniquenessOfID: anID - inAttribute: anAttribute. -] - -{ #category : #validating } -XMLElementIDValidator >> validateIDAttribute: anAttribute forElement: anElement [ - | oldSize | - - "checking size after is faster than includes test" - oldSize := self elementsAndIDAttributes size. - (self elementsAndIDAttributes - at: anElement - put: anAttribute; - size) > oldSize - ifFalse: [self errorMultipleIDAttributesForElement: anElement]. -] - -{ #category : #validating } -XMLElementIDValidator >> validateIDReference: anID inAttribute: anAttribute [ - anID isXMLName - ifFalse: [ - self - errorInvalidID: anID - inAttribute: anAttribute]. - self idReferences add: anID. -] - -{ #category : #validating } -XMLElementIDValidator >> validateIDReferences [ - self idReferences do: [:each | - (self ids includes: each) - ifFalse: [self errorUnknownIDReference: each]] -] - -{ #category : #private } -XMLElementIDValidator >> validateUniquenessOfID: anID inAttribute: anAttribute [ - | oldSize | - - "checking size after is faster than includes test" - oldSize := self ids size. - (self ids - add: anID; - size) > oldSize - ifFalse: [ - self - errorDuplicateID: anID - inAttribute: anAttribute]. -] - -{ #category : #validating } -XMLElementIDValidator >> validateXMLID: anID [ - anID isXMLNCName - ifFalse: [ - self - errorInvalidID: anID - inAttribute: 'xml:id']. - self - validateUniquenessOfID: anID - inAttribute: 'xml:id'. -] diff --git a/src/XML-Parser/XMLElementNester.class.st b/src/XML-Parser/XMLElementNester.class.st deleted file mode 100644 index b274754e2..000000000 --- a/src/XML-Parser/XMLElementNester.class.st +++ /dev/null @@ -1,260 +0,0 @@ -" -This is a base class for element nesters that are used by parser tokenizers and drivers to keep track of which elements are open while parsing and ensure they are properly nested. -" -Class { - #name : #XMLElementNester, - #superclass : #Object, - #instVars : [ - 'openElements', - 'rootElement', - 'scopedAttributes', - 'hasExternalRootElement', - 'wasRootElementEnded', - 'isInElement' - ], - #category : #'XML-Parser-Drivers' -} - -{ #category : #private } -XMLElementNester >> copiedScopedAttributes [ - | copiedAttributes | - - copiedAttributes := - self hasScopedAttributes - ifTrue: [self scopedAttributes removeLast copy] - ifFalse: [Dictionary new]. - self scopedAttributes addLast: copiedAttributes. - - ^ copiedAttributes. -] - -{ #category : #accessing } -XMLElementNester >> currentElement [ - ^ self openElements xmlLastOrNil -] - -{ #category : #accessing } -XMLElementNester >> currentElement: anElement [ - self hasOpenElements - ifTrue: [ - self openElements - at: self totalOpenElements - put: anElement] - ifFalse: [self setExternalRootElement: anElement] -] - -{ #category : #accessing } -XMLElementNester >> currentScopedAttributes [ - ^ self scopedAttributes xmlLastOrNil -] - -{ #category : #private } -XMLElementNester >> elementPrintLimit [ - ^ 5 -] - -{ #category : #nesting } -XMLElementNester >> endCurrentElement [ - (self openElements - removeLast; - size) > 0 - ifFalse: [ - isInElement := hasExternalRootElement. - wasRootElementEnded := hasExternalRootElement not]. - self hasScopedAttributes - ifTrue: [self endScopedAttributes]. -] - -{ #category : #private } -XMLElementNester >> endScopedAttributes [ - scopedAttributes removeLast -] - -{ #category : #testing } -XMLElementNester >> hasExternalRootElement [ - ^ hasExternalRootElement -] - -{ #category : #testing } -XMLElementNester >> hasOpenElement: anElement [ - ^ self openElements includes: anElement -] - -{ #category : #testing } -XMLElementNester >> hasOpenElements [ - ^ self openElements size > 0 -] - -{ #category : #testing } -XMLElementNester >> hasScopedAttributes [ - "optimized to avoid lazy initialization" - scopedAttributes == nil - ifTrue: [^ false]. - ^ scopedAttributes size > 0. -] - -{ #category : #initialization } -XMLElementNester >> initialize [ - super initialize. - - openElements := OrderedCollection new: 10. - hasExternalRootElement := false. - wasRootElementEnded := false. - isInElement := false. -] - -{ #category : #testing } -XMLElementNester >> isInElement [ - ^ isInElement -] - -{ #category : #accessing } -XMLElementNester >> openElements [ - ^ openElements -] - -{ #category : #enumerating } -XMLElementNester >> openElementsDo: aBlock [ - self openElements do: aBlock -] - -{ #category : #enumerating } -XMLElementNester >> openElementsReverseDo: aBlock [ - "implemented for XMLParserHTML so it's always safe to remove at - the end while scanning backwards" - self openElements size to: 1 by: -1 do: [:i | - aBlock value: (self openElements at: i)] -] - -{ #category : #printing } -XMLElementNester >> printElementsOn: aStream [ - self - printElementsStartingAt: 1 - on: aStream -] - -{ #category : #printing } -XMLElementNester >> printElementsStartingAt: aStart on: aStream [ - self - printElementsStartingAt: aStart - stoppingAt: aStart + self elementPrintLimit - 1 - on: aStream -] - -{ #category : #printing } -XMLElementNester >> printElementsStartingAt: aStart stoppingAt: aStop on: aStream [ - aStart - to: (aStop min: self openElements size) - do: [:i | - i > aStart - ifTrue: [aStream nextPutAll: ', ']. - - aStream - nextPut: $<; - nextPutAll: (self openElements at: i); - nextPut: $>]. - - (aStop < self openElements size) - ifTrue: [aStream nextPutAll: '...']. -] - -{ #category : #printing } -XMLElementNester >> printOn: aStream [ - super printOn: aStream. - - self hasOpenElements - ifTrue: [ - aStream nextPut: $(. - self - printElementsStartingAt: 1 - on: aStream. - aStream nextPut: $)]. -] - -{ #category : #printing } -XMLElementNester >> printedElements [ - ^ String streamContents: [:stream | self printElementsOn: stream] -] - -{ #category : #printing } -XMLElementNester >> printedElementsEnclosedBy: anElement [ - ^ String streamContents: [:stream | - self - printElementsStartingAt: (self openElements lastIndexOf: anElement) + 1 - on: stream] -] - -{ #category : #accessing } -XMLElementNester >> rootElement [ - ^ rootElement -] - -{ #category : #accessing } -XMLElementNester >> scopedAttributeAt: anAttribute [ - ^ self - scopedAttributeAt: anAttribute - ifAbsent: [''] -] - -{ #category : #accessing } -XMLElementNester >> scopedAttributeAt: anAttribute ifAbsent: aBlock [ - ^ self currentScopedAttributes - ifNil: [aBlock value] - ifNotNil: [:attributes | - attributes - at: anAttribute - ifAbsent: aBlock] -] - -{ #category : #private } -XMLElementNester >> scopedAttributes [ - ^ scopedAttributes ifNil: [scopedAttributes := OrderedCollection new] -] - -{ #category : #accessing } -XMLElementNester >> setExternalRootElement: anElement [ - rootElement := anElement. - hasExternalRootElement := true. - isInElement := true. -] - -{ #category : #accessing } -XMLElementNester >> setScopedAttributesNamed: anAttributeCollection from: aDictionary [ - | attributes | - - anAttributeCollection do: [:each | - aDictionary - at: each - ifPresent: [:value | - "used to copy only once if needed" - (attributes ifNil: [attributes := self copiedScopedAttributes]) - at: each - put: value]] -] - -{ #category : #nesting } -XMLElementNester >> startElement: anElement [ - self openElements addLast: anElement. - isInElement - ifFalse: [ - isInElement := true. - rootElement - ifNil: [rootElement := anElement]]. - self hasScopedAttributes - ifTrue: [self startScopedAttributes]. -] - -{ #category : #private } -XMLElementNester >> startScopedAttributes [ - scopedAttributes addLast: self currentScopedAttributes -] - -{ #category : #accessing } -XMLElementNester >> totalOpenElements [ - ^ self openElements size -] - -{ #category : #testing } -XMLElementNester >> wasRootElementEnded [ - ^ wasRootElementEnded -] diff --git a/src/XML-Parser/XMLElementValidator.class.st b/src/XML-Parser/XMLElementValidator.class.st deleted file mode 100644 index 310937247..000000000 --- a/src/XML-Parser/XMLElementValidator.class.st +++ /dev/null @@ -1,129 +0,0 @@ -" -This is a base class for element validators. -" -Class { - #name : #XMLElementValidator, - #superclass : #Object, - #instVars : [ - 'element' - ], - #category : #'XML-Parser-Validation' -} - -{ #category : #'instance creation' } -XMLElementValidator class >> element: anElement [ - ^ self new element: anElement -] - -{ #category : #converting } -XMLElementValidator >> asReadyElementValidator [ - ^ self -] - -{ #category : #testing } -XMLElementValidator >> atEnd [ - self subclassResponsibility -] - -{ #category : #accessing } -XMLElementValidator >> element [ - ^ element -] - -{ #category : #accessing } -XMLElementValidator >> element: anElement [ - element := anElement -] - -{ #category : #private } -XMLElementValidator >> errorUnexpected: aDescription [ - XMLValidationException - formatSignal: 'Unexpected {1} in {2} type element <{3}>' - with: aDescription - with: self typeName - with: self element -] - -{ #category : #private } -XMLElementValidator >> errorUnexpectedComment [ - ^ self errorUnexpected: 'comment' -] - -{ #category : #private } -XMLElementValidator >> errorUnexpectedElement: anElement [ - XMLValidationException - formatSignal: 'Unexpected <{1}> element in {2} type element <{3}>' - with: anElement - with: self typeName - with: self element -] - -{ #category : #private } -XMLElementValidator >> errorUnexpectedPCData [ - ^ self errorUnexpected: 'PCDATA' -] - -{ #category : #private } -XMLElementValidator >> errorUnexpectedPI [ - ^ self errorUnexpected: 'processing instruction' -] - -{ #category : #testing } -XMLElementValidator >> ignoresWhitespace [ - ^ false -] - -{ #category : #testing } -XMLElementValidator >> isAny [ - ^ false -] - -{ #category : #testing } -XMLElementValidator >> isElementContent [ - ^ false -] - -{ #category : #testing } -XMLElementValidator >> isEmpty [ - ^ false -] - -{ #category : #testing } -XMLElementValidator >> isMixedContent [ - ^ false -] - -{ #category : #printing } -XMLElementValidator >> printOn: aStream [ - super printOn: aStream. - - aStream - nextPutAll: '(<'; - nextPutAll: self element; - nextPutAll: '>)'. -] - -{ #category : #defaults } -XMLElementValidator >> typeName [ - self subclassResponsibility -] - -{ #category : #validating } -XMLElementValidator >> validateComment: aString [ -] - -{ #category : #validating } -XMLElementValidator >> validateElementDeclaration [ -] - -{ #category : #validating } -XMLElementValidator >> validatePCData: aString [ -] - -{ #category : #validating } -XMLElementValidator >> validatePI: aTargetString data: aDataString [ -] - -{ #category : #validating } -XMLElementValidator >> validateStartTag: anElement [ -] diff --git a/src/XML-Parser/XMLEmptyElementValidator.class.st b/src/XML-Parser/XMLEmptyElementValidator.class.st deleted file mode 100644 index 8ea0c4356..000000000 --- a/src/XML-Parser/XMLEmptyElementValidator.class.st +++ /dev/null @@ -1,43 +0,0 @@ -" -This class validates EMPTY elements, which can't contain elements, PCDATA, or even comments or PIs. -" -Class { - #name : #XMLEmptyElementValidator, - #superclass : #XMLElementValidator, - #category : #'XML-Parser-Validation' -} - -{ #category : #testing } -XMLEmptyElementValidator >> atEnd [ - ^ true -] - -{ #category : #testing } -XMLEmptyElementValidator >> isEmpty [ - ^ true -] - -{ #category : #defaults } -XMLEmptyElementValidator >> typeName [ - ^ 'EMPTY' -] - -{ #category : #validating } -XMLEmptyElementValidator >> validateComment: aString [ - self errorUnexpectedComment -] - -{ #category : #validating } -XMLEmptyElementValidator >> validatePCData: aString [ - self errorUnexpectedPCData -] - -{ #category : #validating } -XMLEmptyElementValidator >> validatePI: aTargetString data: aDataString [ - self errorUnexpectedPI -] - -{ #category : #validating } -XMLEmptyElementValidator >> validateStartTag: anElement [ - self errorUnexpectedElement: anElement -] diff --git a/src/XML-Parser/XMLEncodingDetector.class.st b/src/XML-Parser/XMLEncodingDetector.class.st deleted file mode 100644 index 614c0250a..000000000 --- a/src/XML-Parser/XMLEncodingDetector.class.st +++ /dev/null @@ -1,278 +0,0 @@ -" -This is a class for automatic encoding detection of streams that infers encodings from a leading byte order mark (BOM) sequence. -" -Class { - #name : #XMLEncodingDetector, - #superclass : #Object, - #instVars : [ - 'stream', - 'startPosition' - ], - #classVars : [ - 'UTF16BigEndianBOMBytes', - 'UTF32BigEndianBOMBytes', - 'UTF32LittleEndianBOMBytes', - 'UTF8BOMBytes' - ], - #category : #'XML-Parser-Streams' -} - -{ #category : #'class initialization' } -XMLEncodingDetector class >> initialize [ - "self initialize" - - "stored in class vars for faster access" - UTF8BOMBytes := - XMLUTF8StreamConverter byteOrderMarkBytes. - UTF16BigEndianBOMBytes := - XMLUTF16BigEndianStreamConverter byteOrderMarkBytes. - UTF32BigEndianBOMBytes := - XMLUTF32BigEndianStreamConverter byteOrderMarkBytes. - UTF32LittleEndianBOMBytes := - XMLUTF32LittleEndianStreamConverter byteOrderMarkBytes. -] - -{ #category : #'instance creation' } -XMLEncodingDetector class >> on: aStream [ - ^ self new on: aStream -] - -{ #category : #private } -XMLEncodingDetector >> atEnd [ - ^ stream atEnd -] - -{ #category : #private } -XMLEncodingDetector >> detectBigEndianUTF16BOM [ - 2 to: UTF16BigEndianBOMBytes size do: [:i | - self next == (UTF16BigEndianBOMBytes at: i) - ifFalse: [ - self resetStreamToStartPosition. - "no legal UTF-8 byte sequence begins with 16rFE, and: - UTF16BigEndianBOMBytes first = 16rFE - so it can't be implicit UTF-8" - ^ nil]]. - ^ XMLUTF16BigEndianStreamConverter new. -] - -{ #category : #private } -XMLEncodingDetector >> detectBigEndianUTF32BOMOrImplicitEncoding [ - 2 to: UTF32BigEndianBOMBytes size do: [:i | - self peek == (UTF32BigEndianBOMBytes at: i) - ifTrue: [self next] - ifFalse: [| implicitConverterClass | - self detectsImplicitEncodings - ifTrue: [ - i = 2 - ifTrue: [ - "(UTF32BigEndianBOMBytes at: 1) isZero" - self peekForASCII - ifTrue: [ - "null char followed by an ASCII char; - implicit UTF-16 BE" - implicitConverterClass := - XMLImplicitUTF16BigEndianStreamConverter]] - ifFalse: [ - i = 3 - ifTrue: [ - "(UTF32BigEndianBOMBytes at: 2) isZero" - (self peekForNull - and: [self peekForASCII]) - ifTrue: [ - "three null chars followed by an ASCII char; - implicit UTF-32 BE" - implicitConverterClass := - XMLImplicitUTF32BigEndianStreamConverter]]]. - (implicitConverterClass isNil - and: [self peekForUTF8LeadingByte]) - ifTrue: [ - "any number of null chars followed by a leading UTF-8 - byte char; implicit UTF-8" - implicitConverterClass := - XMLImplicitUTF8StreamConverter]]. - self resetStreamToStartPosition. - ^ implicitConverterClass - ifNotNil: [implicitConverterClass new]]]. - ^ XMLUTF32BigEndianStreamConverter new. -] - -{ #category : #private } -XMLEncodingDetector >> detectLittleEndianImplicitEncoding [ - | implicitConverterClass | - - self detectsImplicitEncodings - ifTrue: [ - implicitConverterClass := - self peekForNull - ifTrue: [ - (self peekForNull - and: [self peekForNull]) - ifTrue: [ - "a leading ASCII char followed by three nulls; - implicit little endian UTF-32" - XMLImplicitUTF32LittleEndianStreamConverter] - ifFalse: [ - "a leading ASCII char followed by just one null; - implicit little endian UTF-16" - XMLImplicitUTF16LittleEndianStreamConverter]] - ifFalse: [ - "an ASCII char; assume it's UTF-8" - XMLImplicitUTF8StreamConverter]]. - - self resetStreamToStartPosition. - ^ implicitConverterClass - ifNotNil: [implicitConverterClass new]. -] - -{ #category : #private } -XMLEncodingDetector >> detectLittleEndianUTF32Or16BOM [ - 2 to: UTF32LittleEndianBOMBytes size do: [:i | - self peek == (UTF32LittleEndianBOMBytes at: i) - ifTrue: [self next] - ifFalse: [ - i > 2 - ifTrue: [ - "the 2 byte UTF-16 BOM begins the 4 byte UTF-32 BOM: - UTF32LittleEndianBOMBytes beginsWith: - XMLUTF16LittleEndianStreamConverter byteOrderMarkBytes" - stream position: startPosition + 2. - ^ XMLUTF16LittleEndianStreamConverter new] - ifFalse: [ - self resetStreamToStartPosition. - "no legal UTF-8 byte sequence begins with 16rFF, and: - UTF32LittleEndianBOMBytes first = 16rFF - so it can't be implicit UTF-8" - ^ nil]]]. - ^ XMLUTF32LittleEndianStreamConverter new. -] - -{ #category : #private } -XMLEncodingDetector >> detectUTF8BOM [ - 2 to: UTF8BOMBytes size do: [:i | - self peek == (UTF8BOMBytes at: i) - ifTrue: [self next] - ifFalse: [| implicitConverter | - (self detectsImplicitEncodings - and: [self peekForUTF8NonLeadingByte]) - ifTrue: [implicitConverter := XMLImplicitUTF8StreamConverter new]. - self resetStreamToStartPosition. - ^ implicitConverter]]. - ^ XMLUTF8StreamConverter new. -] - -{ #category : #testing } -XMLEncodingDetector >> detectsImplicitEncodings [ - ^ false -] - -{ #category : #private } -XMLEncodingDetector >> isUTF8LeadingByte: aByte [ - ^ aByte < 16r80 - or: [aByte < 16rF8 - and: [(aByte bitAnd: 16rE0) == 16rC0 - or: [(aByte bitAnd: 16rF0) == 16rE0 - or: [(aByte bitAnd: 16rF8) == 16rF0]]]] -] - -{ #category : #private } -XMLEncodingDetector >> next [ - stream atEnd - ifTrue: [^ nil] - ifFalse: [^ stream next asInteger] -] - -{ #category : #initialization } -XMLEncodingDetector >> on: aStream [ - stream := aStream. - startPosition := aStream position. -] - -{ #category : #private } -XMLEncodingDetector >> peek [ - stream atEnd - ifTrue: [^ nil] - ifFalse: [^ stream peek asInteger] -] - -{ #category : #private } -XMLEncodingDetector >> peekForASCII [ - | byte | - - ((byte := self peek) notNil - and: [byte < 16r80]) - ifTrue: [ - self next. - ^ true] - ifFalse: [^ false] -] - -{ #category : #private } -XMLEncodingDetector >> peekForNull [ - self peek == 0 - ifTrue: [ - self next. - ^ true] - ifFalse: [^ false] -] - -{ #category : #private } -XMLEncodingDetector >> peekForUTF8LeadingByte [ - | byte | - - ((byte := self peek) notNil - and: [self isUTF8LeadingByte: byte]) - ifTrue: [ - self next. - ^ true] - ifFalse: [^ false] -] - -{ #category : #private } -XMLEncodingDetector >> peekForUTF8NonLeadingByte [ - | byte | - - ((byte := self peek) notNil - and: [byte < 16rC0 - and: [byte > 16r80]]) - ifTrue: [ - self next. - ^ true] - ifFalse: [^ false] -] - -{ #category : #private } -XMLEncodingDetector >> resetStreamToStartPosition [ - stream position: startPosition -] - -{ #category : #detecting } -XMLEncodingDetector >> streamConverterForEncoding [ - | byte | - - (byte := self next) - ifNil: [^ nil]. - - byte == 0 - ifTrue: [^ self detectBigEndianUTF32BOMOrImplicitEncoding]. - - byte < 16r80 - ifTrue: [^ self detectLittleEndianImplicitEncoding]. - - "(UTF8BOMBytes at: 1) >= 16r80" - byte == (UTF8BOMBytes at: 1) - ifTrue: [^ self detectUTF8BOM]. - - "(UTF16BigEndianBOMBytes at: 1) >= 16r80" - byte == (UTF16BigEndianBOMBytes at: 1) - ifTrue: [^ self detectBigEndianUTF16BOM]. - - "(UTF32LittleEndianBOMBytes at: 1) >= 16r80" - byte == (UTF32LittleEndianBOMBytes at: 1) - ifTrue: [^ self detectLittleEndianUTF32Or16BOM]. - - self resetStreamToStartPosition. - ^ (self detectsImplicitEncodings - and: [self isUTF8LeadingByte: byte]) - ifTrue: [XMLImplicitUTF8StreamConverter new] - ifFalse: [nil]. -] diff --git a/src/XML-Parser/XMLEncodingException.class.st b/src/XML-Parser/XMLEncodingException.class.st deleted file mode 100644 index 8df210636..000000000 --- a/src/XML-Parser/XMLEncodingException.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -Invoked for encoding errors. -" -Class { - #name : #XMLEncodingException, - #superclass : #XMLParserException, - #category : #'XML-Parser-Exceptions' -} diff --git a/src/XML-Parser/XMLEncodingWriteStreamAdapter.class.st b/src/XML-Parser/XMLEncodingWriteStreamAdapter.class.st deleted file mode 100644 index 67dd19f92..000000000 --- a/src/XML-Parser/XMLEncodingWriteStreamAdapter.class.st +++ /dev/null @@ -1,89 +0,0 @@ -" -A write stream adapter that encodes stream contents using a stream converter. -" -Class { - #name : #XMLEncodingWriteStreamAdapter, - #superclass : #XMLWriteStreamAdapter, - #instVars : [ - 'streamConverter' - ], - #category : #'XML-Parser-Streams' -} - -{ #category : #'instance creation' } -XMLEncodingWriteStreamAdapter class >> on: aStream [ - ^ self - on: aStream - streamConverter: XMLStreamConverter default -] - -{ #category : #'instance creation' } -XMLEncodingWriteStreamAdapter class >> on: aStream streamConverter: aStreamConverter [ - ^ (self basicOn: - (aStream isXMLBinaryOrExternalStream - ifTrue: [aStream] - ifFalse: [XMLStringWriteStreamAdapter on: aStream])) - streamConverter: aStreamConverter -] - -{ #category : #testing } -XMLEncodingWriteStreamAdapter >> hasDefaultStreamConverter [ - ^ streamConverter isDefault -] - -{ #category : #testing } -XMLEncodingWriteStreamAdapter >> hasImplicitStreamConverter [ - ^ streamConverter isImplicit -] - -{ #category : #testing } -XMLEncodingWriteStreamAdapter >> hasNullStreamConverter [ - ^ streamConverter isNull -] - -{ #category : #testing } -XMLEncodingWriteStreamAdapter >> isXMLConvertingStreamAdapter [ - ^ true -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapter >> nextPut: aCharacter [ - streamConverter - nextPut: aCharacter - toStream: stream. - ^ aCharacter. -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapter >> nextPutAll: aCollection [ - "can't use #to:do: here because other #nextPutAll: implementations - support non-sequenceable collection arguments wtih #do:" - aCollection do: [:each | - streamConverter - nextPut: each - toStream: stream]. - ^ aCollection. -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapter >> nextPutByteOrderMark [ - streamConverter nextPutByteOrderMarkToStream: stream -] - -{ #category : #printing } -XMLEncodingWriteStreamAdapter >> printStreamOn: aStream [ - streamConverter - printWithConvertableStream: stream - on: aStream -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapter >> streamConverter [ - ^ streamConverter -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapter >> streamConverter: aStreamConverter [ - streamConverter := - aStreamConverter ifNil: [XMLStreamConverter null] -] diff --git a/src/XML-Parser/XMLEntitiesAttributeValidator.class.st b/src/XML-Parser/XMLEntitiesAttributeValidator.class.st deleted file mode 100644 index d57861221..000000000 --- a/src/XML-Parser/XMLEntitiesAttributeValidator.class.st +++ /dev/null @@ -1,37 +0,0 @@ -" -This class validates attributes with lists of unparsed entity name values (that must be declared) separated by spaces. -" -Class { - #name : #XMLEntitiesAttributeValidator, - #superclass : #XMLEntityAttributeValidator, - #category : #'XML-Parser-Validation' -} - -{ #category : #defaults } -XMLEntitiesAttributeValidator class >> standaloneExternalClass [ - ^ XMLStandaloneExternalEntitiesAttributeValidator -] - -{ #category : #testing } -XMLEntitiesAttributeValidator >> isEntities [ - ^ true -] - -{ #category : #validating } -XMLEntitiesAttributeValidator >> validateAttributeDefaultValue: aDefaultValue [ - self - spaceSeparatedListValuesIn: aDefaultValue - do: [:each | - each isXMLName - ifFalse: [self errorInvalidDefaultAttributeValue: aDefaultValue]] -] - -{ #category : #validating } -XMLEntitiesAttributeValidator >> validateAttributeValue: aValue [ - self - spaceSeparatedListValuesIn: aValue - do: [:each | - self unparsedEntityValidator - validateEntityReference: each - inAttribute: self attribute] -] diff --git a/src/XML-Parser/XMLEntityAttributeValidator.class.st b/src/XML-Parser/XMLEntityAttributeValidator.class.st deleted file mode 100644 index cd2265ef0..000000000 --- a/src/XML-Parser/XMLEntityAttributeValidator.class.st +++ /dev/null @@ -1,46 +0,0 @@ -" -This class validates attributes that contain unparsed entity names (that must be declared). -" -Class { - #name : #XMLEntityAttributeValidator, - #superclass : #XMLAttributeValidator, - #instVars : [ - 'unparsedEntityValidator' - ], - #category : #'XML-Parser-Validation' -} - -{ #category : #defaults } -XMLEntityAttributeValidator class >> standaloneExternalClass [ - ^ XMLStandaloneExternalEntityAttributeValidator -] - -{ #category : #initialization } -XMLEntityAttributeValidator >> initializeWithValidatorsFrom: aValidatorContainer [ - super initializeWithValidatorsFrom: aValidatorContainer. - - unparsedEntityValidator := aValidatorContainer unparsedEntityValidator -] - -{ #category : #testing } -XMLEntityAttributeValidator >> isEntity [ - ^ true -] - -{ #category : #accessing } -XMLEntityAttributeValidator >> unparsedEntityValidator [ - ^ unparsedEntityValidator -] - -{ #category : #validating } -XMLEntityAttributeValidator >> validateAttributeDefaultValue: aDefaultValue [ - aDefaultValue isXMLName - ifFalse: [self errorInvalidDefaultAttributeValue: aDefaultValue] -] - -{ #category : #validating } -XMLEntityAttributeValidator >> validateAttributeValue: aValue [ - self unparsedEntityValidator - validateEntityReference: aValue - inAttribute: self attribute -] diff --git a/src/XML-Parser/XMLEntityDeclaration.class.st b/src/XML-Parser/XMLEntityDeclaration.class.st deleted file mode 100644 index 0964dafc5..000000000 --- a/src/XML-Parser/XMLEntityDeclaration.class.st +++ /dev/null @@ -1,85 +0,0 @@ -" -This is an abstract class for general and parameter declarations. -" -Class { - #name : #XMLEntityDeclaration, - #superclass : #XMLDeclarationNode, - #instVars : [ - 'name', - 'replacement', - 'publicID', - 'systemID' - ], - #category : #'XML-Parser-DOM' -} - -{ #category : #'instance creation' } -XMLEntityDeclaration class >> name: aName publicID: aPublicID systemID: aSystemID [ - ^ self new - name: aName; - publicID: aPublicID; - systemID: aSystemID -] - -{ #category : #'instance creation' } -XMLEntityDeclaration class >> name: aName replacement: aReplacement [ - ^ self new - name: aName; - replacement: aReplacement -] - -{ #category : #testing } -XMLEntityDeclaration >> isExternal [ - ^ self systemID notEmpty - or: [self publicID notEmpty] -] - -{ #category : #testing } -XMLEntityDeclaration >> isParameter [ - ^ false -] - -{ #category : #testing } -XMLEntityDeclaration >> isUnparsed [ - ^ false -] - -{ #category : #accessing } -XMLEntityDeclaration >> name [ - ^ name ifNil: [name := ''] -] - -{ #category : #accessing } -XMLEntityDeclaration >> name: aName [ - name := aName -] - -{ #category : #accessing } -XMLEntityDeclaration >> publicID [ - ^ publicID ifNil: [publicID := ''] -] - -{ #category : #accessing } -XMLEntityDeclaration >> publicID: aPublicID [ - publicID := aPublicID -] - -{ #category : #accessing } -XMLEntityDeclaration >> replacement [ - ^ replacement ifNil: [replacement := ''] -] - -{ #category : #accessing } -XMLEntityDeclaration >> replacement: aReplacement [ - replacement := aReplacement -] - -{ #category : #accessing } -XMLEntityDeclaration >> systemID [ - ^ systemID ifNil: [systemID := ''] -] - -{ #category : #accessing } -XMLEntityDeclaration >> systemID: aSystemID [ - systemID := aSystemID -] diff --git a/src/XML-Parser/XMLEnumerationAttributeValidator.class.st b/src/XML-Parser/XMLEnumerationAttributeValidator.class.st deleted file mode 100644 index 13014e8ba..000000000 --- a/src/XML-Parser/XMLEnumerationAttributeValidator.class.st +++ /dev/null @@ -1,84 +0,0 @@ -" -This class validates attributes that can have any value taken from a list like ""(one|two|thee)"". -" -Class { - #name : #XMLEnumerationAttributeValidator, - #superclass : #XMLAttributeValidator, - #instVars : [ - 'allowedValues' - ], - #category : #'XML-Parser-Validation' -} - -{ #category : #defaults } -XMLEnumerationAttributeValidator class >> standaloneExternalClass [ - ^ XMLStandaloneExternalEnumerationAttributeValidator -] - -{ #category : #accessing } -XMLEnumerationAttributeValidator >> allowedValues [ - ^ allowedValues ifNil: [allowedValues := Set new] -] - -{ #category : #accessing } -XMLEnumerationAttributeValidator >> allowedValues: anAllowedValuesCollection [ - allowedValues := anAllowedValuesCollection -] - -{ #category : #'private ' } -XMLEnumerationAttributeValidator >> errorEnumerationContainsDuplicateValues [ - XMLValidationException - formatSignal: - 'Declaration for enumeration attribute "{1}" of element ', - '<{2}> contains duplicate values' - with: self attribute - with: self element -] - -{ #category : #'private ' } -XMLEnumerationAttributeValidator >> errorInvalidValue: aValue [ - XMLValidationException - formatSignal: 'Invalid value "{1}" for attribute "{2}" of element <{3}>' - with: aValue - with: self attribute - with: self element -] - -{ #category : #testing } -XMLEnumerationAttributeValidator >> isEnumeration [ - ^ true -] - -{ #category : #validating } -XMLEnumerationAttributeValidator >> validateAttributeDeclaration [ - | oldAllowedValues | - - oldAllowedValues := self allowedValues. - self allowedValues: oldAllowedValues asSet. - (self allowedValues size < oldAllowedValues size) - ifTrue: [self errorEnumerationContainsDuplicateValues]. - - super validateAttributeDeclaration. -] - -{ #category : #validating } -XMLEnumerationAttributeValidator >> validateAttributeDefaultValue: aDefaultValue [ - (self allowedValues includes: aDefaultValue) - ifFalse: [self errorInvalidDefaultAttributeValue: aDefaultValue] -] - -{ #category : #validating } -XMLEnumerationAttributeValidator >> validateAttributeValue: aValue [ - (self allowedValues includes: aValue) - ifFalse: [self errorInvalidValue: aValue] -] - -{ #category : #validating } -XMLEnumerationAttributeValidator >> validateXMLSpaceAttributeDeclaration [ - self allowedValues size > 2 - ifTrue: [self errorInvalidXMLSpaceAttributeDeclaration]. - self allowedValues do: [:each | - (each = 'preserve' - or: [each = 'default']) - ifFalse: [self errorInvalidXMLSpaceAttributeDeclaration]]. -] diff --git a/src/XML-Parser/XMLException.class.st b/src/XML-Parser/XMLException.class.st deleted file mode 100644 index d53032c50..000000000 --- a/src/XML-Parser/XMLException.class.st +++ /dev/null @@ -1,159 +0,0 @@ -" -A generic exception class that supports message formatting. Used as a base class for exceptions in XMLParser and related packages like XPath. -" -Class { - #name : #XMLException, - #superclass : #Error, - #category : #'XML-Parser-Exceptions' -} - -{ #category : #signalling } -XMLException class >> formatSignal: aString with: aFirstValue [ - ^ self new - formatSignal: aString - with: aFirstValue -] - -{ #category : #signalling } -XMLException class >> formatSignal: aString with: aFirstValue with: aSecondValue [ - ^ self new - formatSignal: aString - with: aFirstValue - with: aSecondValue -] - -{ #category : #signalling } -XMLException class >> formatSignal: aString with: aFirstValue with: aSecondValue with: aThirdValue [ - ^ self new - formatSignal: aString - with: aFirstValue - with: aSecondValue - with: aThirdValue -] - -{ #category : #signalling } -XMLException class >> formatSignal: aString with: aFirstValue with: aSecondValue with: aThirdValue with: aFourthValue [ - ^ self new - formatSignal: aString - with: aFirstValue - with: aSecondValue - with: aThirdValue - with: aFourthValue -] - -{ #category : #signalling } -XMLException class >> formatSignal: aString withArguments: anArray [ - ^ self new - formatSignal: aString - withArguments: anArray -] - -{ #category : #signalling } -XMLException class >> signalMessageFrom: anException [ - ^ self new signalMessageFrom: anException -] - -{ #category : #accessing } -XMLException >> formatMessage: aString with: aFirstValue [ - self - formatMessage: aString - withArguments: (Array with: aFirstValue) -] - -{ #category : #accessing } -XMLException >> formatMessage: aString with: aFirstValue with: aSecondValue [ - self - formatMessage: aString - withArguments: - (Array - with: aFirstValue - with: aSecondValue) -] - -{ #category : #accessing } -XMLException >> formatMessage: aString with: aFirstValue with: aSecondValue with: aThirdValue [ - self - formatMessage: aString - withArguments: - (Array - with: aFirstValue - with: aSecondValue - with: aThirdValue) -] - -{ #category : #accessing } -XMLException >> formatMessage: aString with: aFirstValue with: aSecondValue with: aThirdValue with: aFourthValue [ - self - formatMessage: aString - withArguments: - (Array - with: aFirstValue - with: aSecondValue - with: aThirdValue - with: aFourthValue) -] - -{ #category : #accessing } -XMLException >> formatMessage: aString withArguments: anArray [ - self messageText: (aString format: anArray) -] - -{ #category : #signaling } -XMLException >> formatSignal: aString with: aFirstValue [ - self - formatMessage: aString - with: aFirstValue. - ^ self signal. -] - -{ #category : #signaling } -XMLException >> formatSignal: aString with: aFirstValue with: aSecondValue [ - self - formatMessage: aString - with: aFirstValue - with: aSecondValue. - ^ self signal. -] - -{ #category : #signaling } -XMLException >> formatSignal: aString with: aFirstValue with: aSecondValue with: aThirdValue [ - self - formatMessage: aString - with: aFirstValue - with: aSecondValue - with: aThirdValue. - ^ self signal. -] - -{ #category : #signaling } -XMLException >> formatSignal: aString with: aFirstValue with: aSecondValue with: aThirdValue with: aFourthValue [ - self - formatMessage: aString - with: aFirstValue - with: aSecondValue - with: aThirdValue - with: aFourthValue. - ^ self signal. -] - -{ #category : #signaling } -XMLException >> formatSignal: aString withArguments: anArray [ - self - formatMessage: aString - withArguments: anArray. - ^ self signal. -] - -{ #category : #accessing } -XMLException >> inheritMessageFrom: anException [ - self - formatMessage: '({1}) {2}' - with: anException class name - with: anException messageText -] - -{ #category : #signaling } -XMLException >> signalMessageFrom: anException [ - self inheritMessageFrom: anException. - ^ self signal. -] diff --git a/src/XML-Parser/XMLExternalSubsetState.class.st b/src/XML-Parser/XMLExternalSubsetState.class.st deleted file mode 100644 index e7d227dab..000000000 --- a/src/XML-Parser/XMLExternalSubsetState.class.st +++ /dev/null @@ -1,18 +0,0 @@ -" -A state for external subset tokens. -" -Class { - #name : #XMLExternalSubsetState, - #superclass : #XMLTokenizerState, - #category : #'XML-Parser-Drivers' -} - -{ #category : #testing } -XMLExternalSubsetState >> isExternalSubsetState [ - ^ true -] - -{ #category : #tokenizing } -XMLExternalSubsetState >> nextTokenFrom: aTokenizer [ - ^ aTokenizer nextExternalSubsetToken -] diff --git a/src/XML-Parser/XMLExternalSubsetTextDeclarationState.class.st b/src/XML-Parser/XMLExternalSubsetTextDeclarationState.class.st deleted file mode 100644 index 0a557a96b..000000000 --- a/src/XML-Parser/XMLExternalSubsetTextDeclarationState.class.st +++ /dev/null @@ -1,20 +0,0 @@ -" -A state for text declaration tokens at the start of the external DTD subset. - -This state #canTerminateInput unlike XMLXMLDeclarationState because external subsets and parsed entities can be empty, but documents must have at least one element. -" -Class { - #name : #XMLExternalSubsetTextDeclarationState, - #superclass : #XMLExternalSubsetState, - #category : #'XML-Parser-Drivers' -} - -{ #category : #tokenizing } -XMLExternalSubsetTextDeclarationState >> nextTokenFrom: aTokenizer [ - ^ aTokenizer nextStartExternalSubset -] - -{ #category : #testing } -XMLExternalSubsetTextDeclarationState >> supportsEncodingDetection [ - ^ true -] diff --git a/src/XML-Parser/XMLFileDirectoryFileHandle.class.st b/src/XML-Parser/XMLFileDirectoryFileHandle.class.st deleted file mode 100644 index fa57c3048..000000000 --- a/src/XML-Parser/XMLFileDirectoryFileHandle.class.st +++ /dev/null @@ -1,59 +0,0 @@ -" -This class uses FileDirectory/DirectoryEntry to implement file IO. This is used on Squeak and Gemstone, which don't support the Pharo FileSystem API. -" -Class { - #name : #XMLFileDirectoryFileHandle, - #superclass : #XMLFileHandle, - #instVars : [ - 'fileDirectory' - ], - #category : #'XML-Parser-Files' -} - -{ #category : #basic } -XMLFileDirectoryFileHandle class >> basicCurrentWorkingDirectory [ - ^ (XMLClassFinder classNamed: #FileDirectory) default pathName -] - -{ #category : #testing } -XMLFileDirectoryFileHandle class >> isSupportedImplementation [ - ^ XMLClassFinder hasClassNamed: #FileDirectory -] - -{ #category : #basic } -XMLFileDirectoryFileHandle >> basicDelete [ - "FileDirectory's deleteFileNamed: is used because DirectoryEntry - doesn't understand #delete on GS" - self fileDirectory deleteFileNamed: self path -] - -{ #category : #basic } -XMLFileDirectoryFileHandle >> basicFileSize [ - ^ self directoryEntry fileSize -] - -{ #category : #accessing } -XMLFileDirectoryFileHandle >> directoryEntry [ - "a bug on Squeak (but not GS) with the handling of dot relative paths - like './file.xml' requires fully qualifying the path before creating - the DirectoryEntry" - ^ self fileDirectory directoryEntryFor: - (self fileDirectory fullPathFor: self path) -] - -{ #category : #testing } -XMLFileDirectoryFileHandle >> exists [ - ^ self directoryEntry notNil -] - -{ #category : #accessing } -XMLFileDirectoryFileHandle >> fileDirectory [ - ^ fileDirectory - ifNil: [fileDirectory := (XMLClassFinder classNamed: #FileDirectory) default] -] - -{ #category : #testing } -XMLFileDirectoryFileHandle >> isFile [ - ^ self exists - and: [self directoryEntry isDirectory not] -] diff --git a/src/XML-Parser/XMLFileException.class.st b/src/XML-Parser/XMLFileException.class.st deleted file mode 100644 index 2f0c61124..000000000 --- a/src/XML-Parser/XMLFileException.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -Invoked for file IO errors. -" -Class { - #name : #XMLFileException, - #superclass : #XMLParserException, - #category : #'XML-Parser-Exceptions' -} diff --git a/src/XML-Parser/XMLFileHandle.class.st b/src/XML-Parser/XMLFileHandle.class.st deleted file mode 100644 index 9b634e51f..000000000 --- a/src/XML-Parser/XMLFileHandle.class.st +++ /dev/null @@ -1,322 +0,0 @@ -" -This is an abstract class for file handles to read/write/delete files. Subclasses need to implement the abstract methods, and then instances of the correct concrete class for this platform can be created by sending #asXMLFileHandle to a string. - -The #readStream/#writeStream messages return file streams that do decoding/encoding, while the #rawReadStream/#rawWriteStream streams don't. - -These classes implement the #get/#getUpToLimit:decoding: and #streamGet/#streamGetUpToLimit:decoding: interface of XMLURI. -" -Class { - #name : #XMLFileHandle, - #superclass : #XMLAbstractFactory, - #instVars : [ - 'path' - ], - #classVars : [ - 'XMLDocumentFileExtensions' - ], - #category : #'XML-Parser-Files' -} - -{ #category : #basic } -XMLFileHandle class >> basicCurrentWorkingDirectory [ - self subclassResponsibility -] - -{ #category : #testing } -XMLFileHandle class >> canBeImplemented [ - ^ true -] - -{ #category : #accessing } -XMLFileHandle class >> currentWorkingDirectory [ - "returns a path string for the current working directory" - - ^ self implementation basicCurrentWorkingDirectory -] - -{ #category : #finding } -XMLFileHandle class >> noSupportedImplementationFound [ - XMLFileException signal: 'File IO unsupported' -] - -{ #category : #'instance creation' } -XMLFileHandle class >> path: aPathString [ - ^ self new setPath: aPathString -] - -{ #category : #defaults } -XMLFileHandle class >> preferredImplementation [ - ^ XMLFileSystemFileHandle -] - -{ #category : #accessing } -XMLFileHandle class >> xmlDocumentFileExtensions [ - "a class variable so it's shared by all subclasses, but lazy initialized - so it isn't initialized unless needed" - ^ XMLDocumentFileExtensions - ifNil: [ - XMLDocumentFileExtensions := - #('atom' "Atom Syndication Format" - 'dbk' "DocBook XML" - 'docm' "Office Open XML Document" - 'docx' "Office Open XML Document" - 'pptm' "Office Open XML Presentation" - 'pptx' "Office Open XML Presentation" - 'rdf' "Resource Description Framework" - 'rss' "Rich Site Summary" - 'svg' "Scalable Vector Graphics" - 'xbel' "XML Bookmark Exchange Language" - 'xfd' "Extensible Forms Description Language" - 'xfdl' "Extensible Forms Description Language" - 'xhtml' - 'xlsm' "Office Open XML Workbook" - 'xlsx' "Office Open XML Workbook" - 'xml' - 'xsd' "XML Schema Definition" - 'xspf' "XML Shareable Playlist Format" - 'xul' "XML User Interface Language" - ) asSet] -] - -{ #category : #accessing } -XMLFileHandle class >> xmlDocumentFileExtensions: aCollectionOrNil [ - XMLDocumentFileExtensions := - aCollectionOrNil - ifNotNil: [aCollectionOrNil asSet] -] - -{ #category : #converting } -XMLFileHandle >> asXMLFileHandle [ - ^ self -] - -{ #category : #basic } -XMLFileHandle >> basicDelete [ - self subclassResponsibility -] - -{ #category : #basic } -XMLFileHandle >> basicFileSize [ - "This is named #basicFileSize instead of #basicSize to avoid conflicting - with the Object>>#basicSize primitive" - - self subclassResponsibility -] - -{ #category : #accessing } -XMLFileHandle >> contents [ - ^ self readStreamDo: [:readStream | readStream upToEnd] -] - -{ #category : #deleting } -XMLFileHandle >> delete [ - self exists - ifFalse: [self errorFileDoesNotExist]. - - [self basicDelete] - on: Error - do: [:error | XMLFileException signalMessageFrom: error]. -] - -{ #category : #private } -XMLFileHandle >> errorFileDoesNotExist [ - XMLFileException - formatSignal: 'File does does not exist: {1}' - with: self path -] - -{ #category : #private } -XMLFileHandle >> errorFileExceedsMaxSize: aMaxSize [ - XMLLimitException - formatSignal: 'File exceeds max size of {1} bytes: {2}' - with: aMaxSize - with: self path -] - -{ #category : #private } -XMLFileHandle >> errorNotAFile [ - XMLFileException - formatSignal: 'Not a file: {1}' - with: self path -] - -{ #category : #testing } -XMLFileHandle >> exists [ - "returns true if the file exists" - - self subclassResponsibility -] - -{ #category : #accessing } -XMLFileHandle >> extension [ - "Returns the file extension, everything after the first '.' of the - last path segment: - 'one.two/three.txt' asXMLFileHandle extension = 'txt'. - 'one.two/three.tar.gz' asXMLFileHandle extension = 'tar.gz'. - 'one.two/three.four/' asXMLFileHandle extension = ''. - " - | i | - - ^ ((i := self path lastIndexOf: $/) > 0 - ifTrue: [self path copyFrom: i + 1 to: self path size] - ifFalse: [self path]) copyAfter: $. -] - -{ #category : #resolving } -XMLFileHandle >> get [ - ^ self - getUpToLimit: nil - decoding: true -] - -{ #category : #resolving } -XMLFileHandle >> getUpToLimit: aMaxSize decoding: aBoolean [ - | stream contents | - - "can be safely implemented using streamGetUpToLimit:decoding: rather - than the other way around like XMLHTTPRequest requires, because files - are local and can be safely read incrementally, unlike an HTTP response - which must be read immediately and stored entirely in memory" - stream := - self - streamGetUpToLimit: aMaxSize - decoding: aBoolean. - contents := stream upToEnd. - stream close. - - ^ contents. -] - -{ #category : #testing } -XMLFileHandle >> isFile [ - "returns true if the file exists and is a file (not a directory)" - - self subclassResponsibility -] - -{ #category : #testing } -XMLFileHandle >> isXMLDocumentFile [ - "Returns true if the file has a known extension of an XML document format - such as .xml, .xhtml, .xul, but not .dtd, .ent, or other XML-related - formats that aren't proper XML documents." - - ^ self class xmlDocumentFileExtensions includes: self extension asLowercase -] - -{ #category : #'instance creation' } -XMLFileHandle >> newFileReadStreamOnPath [ - ^ XMLFileReadStreamFactory onPath: self path -] - -{ #category : #'instance creation' } -XMLFileHandle >> newFileWriteStreamOnPath [ - ^ XMLFileWriteStreamFactory onPath: self path -] - -{ #category : #accessing } -XMLFileHandle >> path [ - ^ path ifNil: [path := ''] -] - -{ #category : #printing } -XMLFileHandle >> printOn: aStream [ - super printOn: aStream. - - aStream - nextPut: $(; - nextPutAll: self path; - nextPut: $). -] - -{ #category : #reading } -XMLFileHandle >> rawReadStream [ - "returns a raw file read stream with no decoding" - - self exists - ifFalse: [self errorFileDoesNotExist]. - self isFile - ifFalse: [self errorNotAFile]. - - ^ [self newFileReadStreamOnPath] - on: Error - do: [:error | XMLFileException signalMessageFrom: error]. -] - -{ #category : #writing } -XMLFileHandle >> rawWriteStream [ - "returns a raw file write stream with no encoding; truncates existing files" - - ^ [self newFileWriteStreamOnPath] - on: Error - do: [:error | XMLFileException signalMessageFrom: error] -] - -{ #category : #reading } -XMLFileHandle >> readStream [ - "returns a file read stream with decoding" - - ^ (XMLDecodingReadStreamAdapter nonDecodingOn: self rawReadStream) - detectEncoding -] - -{ #category : #reading } -XMLFileHandle >> readStreamDo: aBlock [ - "evaluates aBlock with a file read stream with decoding and automatically - closes it after" - - | readStream | - - readStream := self readStream. - ^ [aBlock value: readStream] - ensure: [readStream close]. -] - -{ #category : #initialization } -XMLFileHandle >> setPath: aPathString [ - path := aPathString -] - -{ #category : #accessing } -XMLFileHandle >> size [ - self exists - ifFalse: [self errorFileDoesNotExist]. - - ^ self basicFileSize. -] - -{ #category : #resolving } -XMLFileHandle >> streamGet [ - ^ self - streamGetUpToLimit: nil - decoding: true -] - -{ #category : #resolving } -XMLFileHandle >> streamGetUpToLimit: aMaxSize decoding: aBoolean [ - (aMaxSize notNil - and: [self size > aMaxSize]) - ifTrue: [self errorFileExceedsMaxSize: aMaxSize]. - - ^ aBoolean - ifTrue: [self readStream] - ifFalse: [self rawReadStream]. -] - -{ #category : #writing } -XMLFileHandle >> writeStream [ - "returns a file write stream with encoding; truncates existing files" - - ^ XMLEncodingWriteStreamAdapter on: self rawWriteStream -] - -{ #category : #writing } -XMLFileHandle >> writeStreamDo: aBlock [ - "evaluates aBlock with a file write stream with encoding and - automatically closes it after; truncates existing files" - - | writeStream | - - writeStream := self writeStream. - ^ [aBlock value: writeStream] - ensure: [writeStream close]. -] diff --git a/src/XML-Parser/XMLFileReadStreamFactory.class.st b/src/XML-Parser/XMLFileReadStreamFactory.class.st deleted file mode 100644 index eec011a7d..000000000 --- a/src/XML-Parser/XMLFileReadStreamFactory.class.st +++ /dev/null @@ -1,35 +0,0 @@ -" -An abstract factory for file read streams used by XMLFileHandles. - -Subclasses should create read streams that return raw byte characters and not characters decoded from some encoding (like UTF-8), so that XMLParser can do its own decoding later looking at byte-order marks and the encoding attribute. -" -Class { - #name : #XMLFileReadStreamFactory, - #superclass : #XMLAbstractFactory, - #category : #'XML-Parser-Files' -} - -{ #category : #basic } -XMLFileReadStreamFactory class >> basicOnPath: aPathString [ - self subclassResponsibility -] - -{ #category : #testing } -XMLFileReadStreamFactory class >> canBeImplemented [ - ^ true -] - -{ #category : #finding } -XMLFileReadStreamFactory class >> noSupportedImplementationFound [ - XMLFileException signal: 'File reading unsupported' -] - -{ #category : #'instance creation' } -XMLFileReadStreamFactory class >> onPath: aPathString [ - ^ self implementation basicOnPath: aPathString -] - -{ #category : #defaults } -XMLFileReadStreamFactory class >> preferredImplementation [ - ^ XMLStandardFileStreamReadStreamFactory -] diff --git a/src/XML-Parser/XMLFileSystemFileHandle.class.st b/src/XML-Parser/XMLFileSystemFileHandle.class.st deleted file mode 100644 index 5bcea71c9..000000000 --- a/src/XML-Parser/XMLFileSystemFileHandle.class.st +++ /dev/null @@ -1,82 +0,0 @@ -" -This class uses the Pharo FileSystem API to implement file IO. The preferred implementation. -" -Class { - #name : #XMLFileSystemFileHandle, - #superclass : #XMLFileHandle, - #instVars : [ - 'fileReference' - ], - #category : #'XML-Parser-Files' -} - -{ #category : #basic } -XMLFileSystemFileHandle class >> basicCurrentWorkingDirectory [ - "avoid the class #workingDirectory message for Pharo1x compatibility" - ^ (XMLClassFinder classNamed: #FileSystem) disk workingDirectory pathString -] - -{ #category : #'instance creation' } -XMLFileSystemFileHandle class >> fileReference: aFileReference [ - ^ self new setFileReference: aFileReference -] - -{ #category : #testing } -XMLFileSystemFileHandle class >> isSupportedImplementation [ - ^ XMLClassFinder hasClassNamed: #FileSystem -] - -{ #category : #basic } -XMLFileSystemFileHandle >> basicDelete [ - self fileReference delete -] - -{ #category : #basic } -XMLFileSystemFileHandle >> basicFileSize [ - ^ self fileReference size -] - -{ #category : #testing } -XMLFileSystemFileHandle >> exists [ - ^ self fileReference exists -] - -{ #category : #accessing } -XMLFileSystemFileHandle >> fileReference [ - ^ fileReference ifNil: [fileReference := self path asFileReference] -] - -{ #category : #testing } -XMLFileSystemFileHandle >> isFile [ - ^ self fileReference isFile -] - -{ #category : #'instance creation' } -XMLFileSystemFileHandle >> newFileReadStreamOnPath [ - "memory file references need special handling" - self usesMemoryStore - ifTrue: [^ self fileReference readStream]. - ^ super newFileReadStreamOnPath. -] - -{ #category : #'instance creation' } -XMLFileSystemFileHandle >> newFileWriteStreamOnPath [ - "memory file references need special handling" - self usesMemoryStore - ifTrue: [^ self fileReference writeStream]. - ^ super newFileWriteStreamOnPath. -] - -{ #category : #initialization } -XMLFileSystemFileHandle >> setFileReference: aFileReference [ - fileReference := aFileReference. - self setPath: aFileReference fullName. -] - -{ #category : #testing } -XMLFileSystemFileHandle >> usesMemoryStore [ - "Pharo 3.0 has memory stores but lacks #isMemoryFileSystem, so - this test is used instead for backwards compatibility" - ^ self fileReference fileSystem store class == - (XMLClassFinder classNamed: #MemoryStore) -] diff --git a/src/XML-Parser/XMLFileWriteStreamFactory.class.st b/src/XML-Parser/XMLFileWriteStreamFactory.class.st deleted file mode 100644 index cd891afb9..000000000 --- a/src/XML-Parser/XMLFileWriteStreamFactory.class.st +++ /dev/null @@ -1,35 +0,0 @@ -" -An abstract factory for file write streams used by XMLFileHandles. - -Subclasses should create write streams that do no automatic encoding and accept raw byte characters, so XMLParser can do its own encoding. -" -Class { - #name : #XMLFileWriteStreamFactory, - #superclass : #XMLAbstractFactory, - #category : #'XML-Parser-Files' -} - -{ #category : #basic } -XMLFileWriteStreamFactory class >> basicOnPath: aPathString [ - self subclassResponsibility -] - -{ #category : #testing } -XMLFileWriteStreamFactory class >> canBeImplemented [ - ^ true -] - -{ #category : #finding } -XMLFileWriteStreamFactory class >> noSupportedImplementationFound [ - XMLFileException signal: 'File writing unsupported' -] - -{ #category : #'instance creation' } -XMLFileWriteStreamFactory class >> onPath: aPathString [ - ^ self implementation basicOnPath: aPathString -] - -{ #category : #defaults } -XMLFileWriteStreamFactory class >> preferredImplementation [ - ^ XMLStandardFileStreamWriteStreamFactory -] diff --git a/src/XML-Parser/XMLGeneralEntityDeclaration.class.st b/src/XML-Parser/XMLGeneralEntityDeclaration.class.st deleted file mode 100644 index 73432dd18..000000000 --- a/src/XML-Parser/XMLGeneralEntityDeclaration.class.st +++ /dev/null @@ -1,47 +0,0 @@ -" -This is a class for general declarations. -" -Class { - #name : #XMLGeneralEntityDeclaration, - #superclass : #XMLEntityDeclaration, - #instVars : [ - 'ndata' - ], - #category : #'XML-Parser-DOM' -} - -{ #category : #'instance creation' } -XMLGeneralEntityDeclaration class >> name: aName publicID: aPublicID systemID: aSystemID ndata: aNotationName [ - ^ self new - name: aName; - publicID: aPublicID; - systemID: aSystemID; - ndata: aNotationName -] - -{ #category : #testing } -XMLGeneralEntityDeclaration >> isUnparsed [ - ^ self ndata notEmpty -] - -{ #category : #accessing } -XMLGeneralEntityDeclaration >> ndata [ - ^ ndata ifNil: [ndata := ''] -] - -{ #category : #accessing } -XMLGeneralEntityDeclaration >> ndata: aNotationName [ - ndata := aNotationName -] - -{ #category : #printing } -XMLGeneralEntityDeclaration >> writeXMLOn: aWriter [ - aWriter entityDeclaration - name: self name; - isParameter: false; - replacement: self replacement; - publicID: self publicID; - systemID: self systemID; - ndata: self ndata; - write -] diff --git a/src/XML-Parser/XMLHTTPDecompressingReadStreamAdapterFactory.class.st b/src/XML-Parser/XMLHTTPDecompressingReadStreamAdapterFactory.class.st deleted file mode 100644 index b1e6e29b9..000000000 --- a/src/XML-Parser/XMLHTTPDecompressingReadStreamAdapterFactory.class.st +++ /dev/null @@ -1,76 +0,0 @@ -" -This class is a read stream adapter factory for decoding content compressed with compression schemes like GZip and DEFLATE. -" -Class { - #name : #XMLHTTPDecompressingReadStreamAdapterFactory, - #superclass : #Object, - #category : #'XML-Parser-HTTP' -} - -{ #category : #basic } -XMLHTTPDecompressingReadStreamAdapterFactory class >> basicCanDecompressCompression: aCompressionScheme [ - ^ self compressionScheme = aCompressionScheme - and: [self isSupportedImplementation] -] - -{ #category : #testing } -XMLHTTPDecompressingReadStreamAdapterFactory class >> canDecompressCompression: aCompressionScheme [ - ^ self basicCanDecompressCompression: aCompressionScheme asLowercase -] - -{ #category : #accessing } -XMLHTTPDecompressingReadStreamAdapterFactory class >> classForCompression: aCompressionScheme [ - | lowercaseCompressionScheme | - - lowercaseCompressionScheme := aCompressionScheme asLowercase. - self allSubclassesDo: [:each | - (each basicCanDecompressCompression: lowercaseCompressionScheme) - ifTrue: [^ each]]. - ^ nil. -] - -{ #category : #accessing } -XMLHTTPDecompressingReadStreamAdapterFactory class >> compressionScheme [ - self subclassResponsibility -] - -{ #category : #accessing } -XMLHTTPDecompressingReadStreamAdapterFactory class >> decompressingReadStreamAdapterClass [ - self subclassResponsibility -] - -{ #category : #'private ' } -XMLHTTPDecompressingReadStreamAdapterFactory class >> errorUnsupportedCompression: aCompressionScheme [ - XMLHTTPException - formatSignal: 'Unsupported compression scheme "{1}" for HTTP content' - with: aCompressionScheme -] - -{ #category : #testing } -XMLHTTPDecompressingReadStreamAdapterFactory class >> isSupportedImplementation [ - ^ self decompressingReadStreamAdapterClass notNil -] - -{ #category : #'instance creation' } -XMLHTTPDecompressingReadStreamAdapterFactory class >> on: aReadStream [ - ^ self decompressingReadStreamAdapterClass on: aReadStream -] - -{ #category : #'instance creation' } -XMLHTTPDecompressingReadStreamAdapterFactory class >> on: aReadStream compression: aCompressionScheme [ - ^ (self classForCompression: aCompressionScheme) - ifNil: [self errorUnsupportedCompression: aCompressionScheme] - ifNotNil: [:classForCompression | - classForCompression on: aReadStream] -] - -{ #category : #accessing } -XMLHTTPDecompressingReadStreamAdapterFactory class >> supportedCompressionSchemes [ - | supportedCompressionSchemes | - - supportedCompressionSchemes := OrderedCollection new. - self allSubclassesDo: [:each | - each isSupportedImplementation - ifTrue: [supportedCompressionSchemes addLast: each compressionScheme]]. - ^ supportedCompressionSchemes. -] diff --git a/src/XML-Parser/XMLHTTPException.class.st b/src/XML-Parser/XMLHTTPException.class.st deleted file mode 100644 index 81bb5b883..000000000 --- a/src/XML-Parser/XMLHTTPException.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -Invoked for HTTP errors. -" -Class { - #name : #XMLHTTPException, - #superclass : #XMLParserException, - #category : #'XML-Parser-Exceptions' -} diff --git a/src/XML-Parser/XMLHTTPGZipDecompressingReadStreamAdapterFactory.class.st b/src/XML-Parser/XMLHTTPGZipDecompressingReadStreamAdapterFactory.class.st deleted file mode 100644 index e0599a2f3..000000000 --- a/src/XML-Parser/XMLHTTPGZipDecompressingReadStreamAdapterFactory.class.st +++ /dev/null @@ -1,18 +0,0 @@ -" -A read stram adapter factory for the GZip compression scheme. Uses GZipReadStream if available. -" -Class { - #name : #XMLHTTPGZipDecompressingReadStreamAdapterFactory, - #superclass : #XMLHTTPDecompressingReadStreamAdapterFactory, - #category : #'XML-Parser-HTTP' -} - -{ #category : #accessing } -XMLHTTPGZipDecompressingReadStreamAdapterFactory class >> compressionScheme [ - ^ 'gzip' -] - -{ #category : #accessing } -XMLHTTPGZipDecompressingReadStreamAdapterFactory class >> decompressingReadStreamAdapterClass [ - ^ XMLClassFinder classNamed: #GZipReadStream -] diff --git a/src/XML-Parser/XMLHTTPMIMEType.class.st b/src/XML-Parser/XMLHTTPMIMEType.class.st deleted file mode 100644 index 6d0e86f1a..000000000 --- a/src/XML-Parser/XMLHTTPMIMEType.class.st +++ /dev/null @@ -1,172 +0,0 @@ -" -This is an immutable class for HTTP MIME types. Adapted from ZnMimeType. -" -Class { - #name : #XMLHTTPMIMEType, - #superclass : #Object, - #instVars : [ - 'mainType', - 'subType', - 'parameters' - ], - #category : #'XML-Parser-HTTP' -} - -{ #category : #defaults } -XMLHTTPMIMEType class >> defaultCharset [ - ^ 'ISO-8859-1' -] - -{ #category : #'instance creation' } -XMLHTTPMIMEType class >> fromString: aString [ - | parser | - - parser := XMLHTTPMIMETypeParser on: aString. - ^ self new - setMainType: parser parseMainType - subType: parser parseSubType - parameters: parser parseParameters. -] - -{ #category : #'instance creation' } -XMLHTTPMIMEType class >> mainType: aMainType subType: aSubType [ - ^ self - mainType: aMainType - subType: aSubType - parameters: #() -] - -{ #category : #'instance creation' } -XMLHTTPMIMEType class >> mainType: aMainType subType: aSubType parameters: anAssociationCollection [ - | parameters attributes totalAttributes | - - "convert the parameters to an OrderedCollection of attribute=value - associations, ignoring duplicate attributes" - parameters := OrderedCollection new: anAssociationCollection size. - totalAttributes := 0. - anAssociationCollection associationsDo: [:each | | attribute | - attribute := each key asLowercase. - "only initialize if needed" - ((attributes ifNil: [attributes := Set new]) - add: attribute; - size) > totalAttributes - ifTrue: [ - parameters addLast: attribute -> each value. - totalAttributes := totalAttributes + 1]]. - - ^ self new - setMainType: aMainType asLowercase - subType: aSubType asLowercase - parameters: parameters. -] - -{ #category : #comparing } -XMLHTTPMIMEType >> = anObject [ - self == anObject - ifTrue: [^ true]. - - self species == anObject species - ifFalse: [^ false]. - - ^ self mainType = anObject mainType - and: [self subType = anObject subType - and: [self parameters size = anObject parameters size - and: [ - "order is irrelevant according to the spec" - self parameters asSet = anObject parameters asSet]]]. -] - -{ #category : #converting } -XMLHTTPMIMEType >> asString [ - "don't assume Object>>#asString is defined, for portability" - ^ self printString -] - -{ #category : #accessing } -XMLHTTPMIMEType >> charset [ - ^ self - parameterAt: 'charset' - ifAbsent: [self defaultCharset] -] - -{ #category : #defaults } -XMLHTTPMIMEType >> defaultCharset [ - ^ self class defaultCharset -] - -{ #category : #comparing } -XMLHTTPMIMEType >> hash [ - ^ self species hash bitXor: - (self mainType hash bitXor: - (self subType hash bitXor: - "OrderedCollection>>#hash depends on order (and even if it - didn't, assuming it wouldn't in the future is too risky), - so instead the size is hashed" - self parameters size hash)) -] - -{ #category : #accessing } -XMLHTTPMIMEType >> mainType [ - ^ mainType -] - -{ #category : #accessing } -XMLHTTPMIMEType >> parameterAt: aKey [ - ^ self - parameterAt: aKey - ifAbsent: [''] -] - -{ #category : #accessing } -XMLHTTPMIMEType >> parameterAt: aKey ifAbsent: aBlock [ - self parameterKeysAndValuesDo: [:key :value | - key = aKey - ifTrue: [^ value]]. - ^ aBlock value. -] - -{ #category : #enumerating } -XMLHTTPMIMEType >> parameterKeysAndValuesDo: aTwoArgumentBlock [ - self parameters do: [:each | - aTwoArgumentBlock - value: each key - value: each value] -] - -{ #category : #enumerating } -XMLHTTPMIMEType >> parameterKeysDo: aBlock [ - self parameters do: [:each | - aBlock value: each key] -] - -{ #category : #private } -XMLHTTPMIMEType >> parameters [ - ^ parameters -] - -{ #category : #printing } -XMLHTTPMIMEType >> printOn: aStream [ - aStream - nextPutAll: self mainType; - nextPut: $/; - nextPutAll: self subType. - - self parameterKeysAndValuesDo: [:key :value | - aStream - nextPutAll: '; '; - nextPutAll: key; - nextPut: $=; - nextPutAll: value]. -] - -{ #category : #initialization } -XMLHTTPMIMEType >> setMainType: aMainType subType: aSubType parameters: aParameterCollection [ - mainType := aMainType. - subType := aSubType. - parameters := aParameterCollection. -] - -{ #category : #accessing } -XMLHTTPMIMEType >> subType [ - ^ subType -] diff --git a/src/XML-Parser/XMLHTTPMIMETypeParser.class.st b/src/XML-Parser/XMLHTTPMIMETypeParser.class.st deleted file mode 100644 index 4c98e76ca..000000000 --- a/src/XML-Parser/XMLHTTPMIMETypeParser.class.st +++ /dev/null @@ -1,135 +0,0 @@ -" -This is a class to parse MIME types with a main type and sub type separated by a ""/"", like ""text/plain"", and optional name=value parameters separated by "";"" after. Adapted from ZnMimeType. -" -Class { - #name : #XMLHTTPMIMETypeParser, - #superclass : #XMLAbstractReadStreamParser, - #classVars : [ - 'TokenDelimiters' - ], - #category : #'XML-Parser-HTTP' -} - -{ #category : #'class initialization' } -XMLHTTPMIMETypeParser class >> initialize [ - "self initialize" - - self initializeTokenDelimiters -] - -{ #category : #'class initialization' } -XMLHTTPMIMETypeParser class >> initializeTokenDelimiters [ - "String streamContents: [:writeStream | | readStream current previous | - readStream := self tspecialsTemplate readStream. - [readStream atEnd] - whileFalse: [ - previous := current. - current := readStream next. - (#('""' '<>') anySatisfy: [:each | - previous = each first - and: [readStream peek = each last]]) - ifTrue: [writeStream nextPut: current]]]" - - TokenDelimiters := - BitmapCharacterSet newFrom: '()<>@,;:\"/[]?.=', Character xmlWhitespace -] - -{ #category : #private } -XMLHTTPMIMETypeParser class >> tspecialsTemplate [ - ^ ' tspecials := "(" / ")" / "<" / ">" / "@" ; Must be in - / "," / ";" / ":" / "\" / <"> ; quoted-string, - / "/" / "[" / "]" / "?" / "." ; to use within - / "=" ; parameter values' -] - -{ #category : #private } -XMLHTTPMIMETypeParser >> nextOptionalQuotedString [ - | isEscaping nextChar | - - (readStream - skipSeparators; - peekFor: $") - ifFalse: [^ nil]. - - writeStream - reset; - nextPut: $". - isEscaping := false. - [(nextChar := readStream next) isNil - or: [isEscaping not - and: [nextChar == $"]]] - whileFalse: [ - isEscaping := - isEscaping not - and: [nextChar == $\]. - writeStream nextPut: nextChar]. - ^ writeStream - nextPut: $"; - contents. -] - -{ #category : #private } -XMLHTTPMIMETypeParser >> nextToken [ - readStream skipSeparators. - ^ self nextDelimitedByAny: TokenDelimiters. - -] - -{ #category : #private } -XMLHTTPMIMETypeParser >> nextTokenOrQuotedString [ - ^ self nextOptionalQuotedString - ifNil: [self nextToken] -] - -{ #category : #parsing } -XMLHTTPMIMETypeParser >> parseMainType [ - "main types are case insensitive and are converted to - lowercase for consistentcy" - ^ self nextToken asLowercase -] - -{ #category : #parsing } -XMLHTTPMIMETypeParser >> parseParameters [ - | parameters attributes totalAttributes | - - parameters := OrderedCollection new. - totalAttributes := 0. - [(readStream - skipSeparators; - peekFor: $;) - and: [ - (readStream - skipSeparators; - atEnd) not]] - whileTrue: [| attribute value hasValue | - "attributes are case insensitive and are converted - to lowercase for convenience" - attribute := self nextToken asLowercase. - (hasValue := - readStream - skipSeparators; - peekFor: $=) - ifTrue: [value := self nextTokenOrQuotedString] - ifFalse: [value := '']. - (attribute notEmpty - or: [hasValue]) - ifTrue: [ - "only initialize if needed" - ((attributes ifNil: [attributes := Set new]) - add: attribute; - size) > totalAttributes - ifTrue: [ - parameters addLast: attribute -> value. - totalAttributes := totalAttributes + 1]]]. - ^ parameters. -] - -{ #category : #parsing } -XMLHTTPMIMETypeParser >> parseSubType [ - "sub types are case insensitive and are converted to - lowercase for consistentcy" - readStream - skipSeparators; - peekFor: $/. - ^ self nextToken asLowercase. -] diff --git a/src/XML-Parser/XMLHTTPMessage.class.st b/src/XML-Parser/XMLHTTPMessage.class.st deleted file mode 100644 index 63ba6900e..000000000 --- a/src/XML-Parser/XMLHTTPMessage.class.st +++ /dev/null @@ -1,276 +0,0 @@ -" -This is an abstract class for HTTP messages. -" -Class { - #name : #XMLHTTPMessage, - #superclass : #XMLAbstractFactory, - #instVars : [ - 'content' - ], - #category : #'XML-Parser-HTTP' -} - -{ #category : #adding } -XMLHTTPMessage >> addHeader: anAssociation [ - self - headerValuesAt: anAssociation key - add: anAssociation value. - ^ anAssociation. -] - -{ #category : #accessing } -XMLHTTPMessage >> content [ - "Returns the response content as a String or ByteArray" - - "Requests with content aren't supported yet" - ^ content ifNil: [content := ''] -] - -{ #category : #accessing } -XMLHTTPMessage >> content: aStringOrByteArray [ - content := aStringOrByteArray -] - -{ #category : #accessing } -XMLHTTPMessage >> contentCharset [ - | contentType charset | - - ^ ((contentType := self contentType) isNil - or: [(charset := contentType charset) isEmpty]) - ifTrue: [self defaultContentCharset] - ifFalse: [charset] -] - -{ #category : #accessing } -XMLHTTPMessage >> contentEncoding [ - "Returns the non-identity content encoding compression schemes - in the order they were applied" - - ^ self encodingNamesFromHeaderValuesAt: 'Content-Encoding' -] - -{ #category : #accessing } -XMLHTTPMessage >> contentEncoding: aStringOrCollection [ - self - encodingNamesFromHeaderValuesAt: 'Content-Encoding' - put: aStringOrCollection -] - -{ #category : #accessing } -XMLHTTPMessage >> contentLength [ - ^ XMLIntegerReader - readFrom: - (self - headerAt: 'Content-Length' - ifAbsent: [^ nil]) readStream - withBase: 10 -] - -{ #category : #accessing } -XMLHTTPMessage >> contentLength: anInteger [ - anInteger - ifNil: [ - self - removeHeaderAt: 'Content-Length' - ifAbsent: []] - ifNotNil: [ - self - headerAt: 'Content-Length' - put: anInteger asString] -] - -{ #category : #accessing } -XMLHTTPMessage >> contentType [ - "Returns an XMLMIMEType object for the Content-Type header value" - - ^ XMLHTTPMIMEType fromString: - (self - headerAt: 'Content-Type' - ifAbsent: [^ nil]) -] - -{ #category : #accessing } -XMLHTTPMessage >> contentType: aMIMETypeOrString [ - aMIMETypeOrString - ifNil: [ - self - removeHeaderAt: 'Content-Type' - ifAbsent: []] - ifNotNil: [ - self - headerAt: 'Content-Type' - put: aMIMETypeOrString asString] -] - -{ #category : #defaults } -XMLHTTPMessage >> defaultContentCharset [ - ^ XMLHTTPMIMEType defaultCharset -] - -{ #category : #private } -XMLHTTPMessage >> encodingNamesFromHeaderValuesAt: aKey [ - "Returns the non-identity encoding compression schemes - in the order they were applied from the value(s) of the - specified header" - - | encodingNames | - - encodingNames := OrderedCollection new. - self - headerValuesAt: aKey - do: [:headerValue | - $, - xmlSplit: headerValue - do: [:headerValueField | | encodingName | - encodingName := - headerValueField xmlCopyWithoutWhitespace asLowercase. - (encodingName isEmpty - or: [encodingName = 'identity']) - ifFalse: [encodingNames addLast: encodingName]]]. - ^ encodingNames. -] - -{ #category : #private } -XMLHTTPMessage >> encodingNamesFromHeaderValuesAt: aKey put: aStringOrCollection [ - aStringOrCollection isEmpty - ifTrue: [ - self - removeHeaderAt: aKey - ifAbsent: []] - ifFalse: [ - self - headerAt: aKey - put: - (aStringOrCollection isString - ifTrue: [aStringOrCollection] - ifFalse: [ - String streamContents: [:stream | - aStringOrCollection - do: [:each | stream nextPutAll: each] - separatedBy: [stream nextPutAll: ', ']]])] -] - -{ #category : #private } -XMLHTTPMessage >> errorRemovingAbsentHeader: aKey [ - XMLHTTPException - formatSignal: 'Cannot remove absent HTTP header "{1}" from message' - with: aKey -] - -{ #category : #testing } -XMLHTTPMessage >> hasContent [ - ^ self content notEmpty -] - -{ #category : #testing } -XMLHTTPMessage >> hasHeaders [ - self headerKeysDo: [:key | ^ true]. - ^ false. -] - -{ #category : #accessing } -XMLHTTPMessage >> headerAt: aKey [ - ^ self - headerAt: aKey - ifAbsent: [''] -] - -{ #category : #accessing } -XMLHTTPMessage >> headerAt: aKey ifAbsent: aBlock [ - self subclassResponsibility -] - -{ #category : #accessing } -XMLHTTPMessage >> headerAt: aKey ifAbsentPut: aBlock [ - ^ self - headerAt: aKey - ifAbsent: [ - self - headerAt: aKey - put: aBlock value] -] - -{ #category : #accessing } -XMLHTTPMessage >> headerAt: aKey put: aValue [ - self subclassResponsibility -] - -{ #category : #accessing } -XMLHTTPMessage >> headerKeys [ - | keys | - - keys := OrderedCollection new. - self headerKeysDo: [:key | - keys addLast: key]. - ^ keys. -] - -{ #category : #enumerating } -XMLHTTPMessage >> headerKeysAndValuesDo: aTwoArgumentBlock [ - self subclassResponsibility -] - -{ #category : #enumerating } -XMLHTTPMessage >> headerKeysDo: aBlock [ - self headerKeysAndValuesDo: [:key :value | - aBlock value: key] -] - -{ #category : #accessing } -XMLHTTPMessage >> headerValuesAt: aKey [ - | values | - - values := OrderedCollection new. - self - headerValuesAt: aKey - do: [:each | values addLast: each]. - ^ values. -] - -{ #category : #adding } -XMLHTTPMessage >> headerValuesAt: aKey add: aValue [ - self subclassResponsibility -] - -{ #category : #enumerating } -XMLHTTPMessage >> headerValuesAt: aKey do: aBlock [ - self subclassResponsibility -] - -{ #category : #accessing } -XMLHTTPMessage >> headers [ - | headers | - - headers := OrderedCollection new. - self headerKeysAndValuesDo: [:key :value | - headers addLast: key -> value]. - ^ headers. -] - -{ #category : #testing } -XMLHTTPMessage >> includesHeaderAt: aKey [ - self - headerAt: aKey - ifAbsent: [^ false]. - ^ true. -] - -{ #category : #removing } -XMLHTTPMessage >> removeHeaderAt: aKey [ - ^ self - removeHeaderAt: aKey - ifAbsent: [self errorRemovingAbsentHeader: aKey] -] - -{ #category : #removing } -XMLHTTPMessage >> removeHeaderAt: aKey ifAbsent: aBlock [ - self subclassResponsibility -] - -{ #category : #removing } -XMLHTTPMessage >> removeHeaders [ - self headerKeys do: [:each | - self - removeHeaderAt: each - ifAbsent: []] -] diff --git a/src/XML-Parser/XMLHTTPRequest.class.st b/src/XML-Parser/XMLHTTPRequest.class.st deleted file mode 100644 index 986ab48c7..000000000 --- a/src/XML-Parser/XMLHTTPRequest.class.st +++ /dev/null @@ -1,213 +0,0 @@ -" -This is an abstract base class for HTTP requests. - -These classes implement the #get/#getUpToLimit:decoding: and #streamGet/#streamGetUpToLimit:decoding: interface of XMLURI. -" -Class { - #name : #XMLHTTPRequest, - #superclass : #XMLHTTPMessage, - #instVars : [ - 'url' - ], - #category : #'XML-Parser-HTTP' -} - -{ #category : #testing } -XMLHTTPRequest class >> canBeImplemented [ - ^ true -] - -{ #category : #'instance creation' } -XMLHTTPRequest class >> new [ - ^ self url: '' -] - -{ #category : #finding } -XMLHTTPRequest class >> noSupportedImplementationFound [ - XMLHTTPException signal: 'HTTP unsupported; install Zinc or WebClient' -] - -{ #category : #defaults } -XMLHTTPRequest class >> preferredImplementation [ - ^ XMLHTTPZincRequest -] - -{ #category : #'instance creation' } -XMLHTTPRequest class >> url: aURLString [ - ^ self implementationNew setURL: aURLString -] - -{ #category : #accessing } -XMLHTTPRequest >> acceptEncoding [ - ^ self encodingNamesFromHeaderValuesAt: 'Accept-Encoding' -] - -{ #category : #accessing } -XMLHTTPRequest >> acceptEncoding: aStringOrCollection [ - "NOTE: only gzip is currently supported" - self - encodingNamesFromHeaderValuesAt: 'Accept-Encoding' - put: aStringOrCollection -] - -{ #category : #converting } -XMLHTTPRequest >> asXMLHTTPRequest [ - ^ self -] - -{ #category : #basic } -XMLHTTPRequest >> basicCleanup [ - "can be overridden to handle cleanup after sending the - request and reading the response" -] - -{ #category : #basic } -XMLHTTPRequest >> basicSend [ - self subclassResponsibility -] - -{ #category : #defaults } -XMLHTTPRequest >> defaultAcceptEncoding [ - ^ #() -] - -{ #category : #defaults } -XMLHTTPRequest >> defaultMethod [ - ^ 'GET' -] - -{ #category : #defaults } -XMLHTTPRequest >> defaultTimeout [ - ^ 30 -] - -{ #category : #accessing } -XMLHTTPRequest >> enableCompression [ - "NOTE: only gzip is currently supported" - self acceptEncoding: 'gzip' -] - -{ #category : #private } -XMLHTTPRequest >> errorBadResponse: aResponse [ - XMLHTTPException - formatSignal: '{1} ({2})' - with: aResponse statusDescription - with: aResponse statusCode -] - -{ #category : #resolving } -XMLHTTPRequest >> get [ - ^ self - getUpToLimit: nil - decoding: true -] - -{ #category : #resolving } -XMLHTTPRequest >> getUpToLimit: aMaxSize decoding: aBoolean [ - self method: 'GET'. - ^ (self - resolveUpToLimit: aMaxSize - decoding: aBoolean) content -] - -{ #category : #accessing } -XMLHTTPRequest >> method [ - self subclassResponsibility -] - -{ #category : #accessing } -XMLHTTPRequest >> method: aString [ - self subclassResponsibility -] - -{ #category : #printing } -XMLHTTPRequest >> printOn: aStream [ - super printOn: aStream. - - aStream - nextPut: $(; - nextPutAll: self method; - space; - nextPutAll: self url; - nextPut: $). -] - -{ #category : #'resolving - response' } -XMLHTTPRequest >> resolve [ - "Sends and retrieves the response as an XMLHTTPResponse object." - - ^ self - resolveUpToLimit: nil - decoding: true -] - -{ #category : #'resolving - response' } -XMLHTTPRequest >> resolveUpToLimit: aMaxSize decoding: aBoolean [ - | response | - - [ - [ - (response := self basicSend) isSuccess - ifFalse: [self errorBadResponse: response]. - response - readContentUpToLimit: aMaxSize - decoding: aBoolean] - on: Error - do: [:error | - error isXMLParserException - ifTrue: [error pass] - ifFalse: [XMLHTTPException signalMessageFrom: error]] - ] ensure: [self basicCleanup]. - - ^ response. -] - -{ #category : #defaults } -XMLHTTPRequest >> responseClass [ - self subclassResponsibility -] - -{ #category : #initialization } -XMLHTTPRequest >> setURL: aURLString [ - url := aURLString. - self - timeout: self defaultTimeout; - method: self defaultMethod; - "even if #defaultAcceptEncoding returns an empty collection, - #acceptEncoding: must still be sent here to override any default - setting of the underlying HTTP library that we don't support" - acceptEncoding: self defaultAcceptEncoding. -] - -{ #category : #resolving } -XMLHTTPRequest >> streamGet [ - ^ self - streamGetUpToLimit: nil - decoding: true -] - -{ #category : #resolving } -XMLHTTPRequest >> streamGetUpToLimit: aMaxSize decoding: aBoolean [ - "must be implemented using getUpToLimit:decoding: rather than the other - way around like XMLFileHandle does, because HTTP responses must be read - immediately and stored entirely in memory, unlike a file stream which - can safely be left open and read from incrementally" - ^ (self - getUpToLimit: aMaxSize - decoding: aBoolean) readStream -] - -{ #category : #accessing } -XMLHTTPRequest >> timeout [ - self subclassResponsibility -] - -{ #category : #accessing } -XMLHTTPRequest >> timeout: anInteger [ - self subclassResponsibility -] - -{ #category : #accessing } -XMLHTTPRequest >> url [ - ^ url ifNil: [url := ''] -] diff --git a/src/XML-Parser/XMLHTTPResponse.class.st b/src/XML-Parser/XMLHTTPResponse.class.st deleted file mode 100644 index 708a14ffb..000000000 --- a/src/XML-Parser/XMLHTTPResponse.class.st +++ /dev/null @@ -1,145 +0,0 @@ -" -This is an abstract base class for HTTP responses. -" -Class { - #name : #XMLHTTPResponse, - #superclass : #XMLHTTPMessage, - #instVars : [ - 'request' - ], - #category : #'XML-Parser-HTTP' -} - -{ #category : #testing } -XMLHTTPResponse class >> canBeImplemented [ - ^ true -] - -{ #category : #finding } -XMLHTTPResponse class >> noSupportedImplementationFound [ - XMLHTTPRequest noSupportedImplementationFound -] - -{ #category : #defaults } -XMLHTTPResponse class >> preferredImplementation [ - ^ XMLHTTPZincResponse -] - -{ #category : #'instance creation' } -XMLHTTPResponse class >> request: aRequest [ - ^ self new setRequest: aRequest -] - -{ #category : #defaults } -XMLHTTPResponse >> contentReaderClass [ - self subclassResponsibility -] - -{ #category : #defaults } -XMLHTTPResponse >> defaultProtocol [ - ^ 'HTTP/1.1' -] - -{ #category : #defaults } -XMLHTTPResponse >> defaultStatusCode [ - ^ 200 -] - -{ #category : #testing } -XMLHTTPResponse >> isChunked [ - ^ (self - headerAt: 'Transfer-Encoding' - ifAbsent: [^ false]) beginsWith: 'chunked' -] - -{ #category : #testing } -XMLHTTPResponse >> isSuccess [ - self subclassResponsibility -] - -{ #category : #'instance creation' } -XMLHTTPResponse >> newContentReader [ - ^ self contentReaderClass response: self -] - -{ #category : #printing } -XMLHTTPResponse >> printOn: aStream [ - super printOn: aStream. - - aStream - nextPut: $(; - nextPutAll: self statusLine; - nextPut: $). -] - -{ #category : #accessing } -XMLHTTPResponse >> protocol [ - self subclassResponsibility -] - -{ #category : #accessing } -XMLHTTPResponse >> protocol: aString [ - self - setProtocol: aString - statusCode: self statusCode -] - -{ #category : #reading } -XMLHTTPResponse >> readContentUpToLimit: aMaxSize decoding: aBoolean [ - self content: - (self newContentReader - readUpToLimit: aMaxSize - decoding: aBoolean) -] - -{ #category : #converting } -XMLHTTPResponse >> readStream [ - ^ self content readStream -] - -{ #category : #accessing } -XMLHTTPResponse >> request [ - "Returns the XMLHTTPRequest object that created this response" - - ^ request -] - -{ #category : #initialization } -XMLHTTPResponse >> setProtocol: aString statusCode: anInteger [ - self subclassResponsibility -] - -{ #category : #initialization } -XMLHTTPResponse >> setRequest: aRequest [ - request := aRequest -] - -{ #category : #accessing } -XMLHTTPResponse >> statusCode [ - "Returns the status code as an integer" - - self subclassResponsibility -] - -{ #category : #accessing } -XMLHTTPResponse >> statusCode: anInteger [ - self - setProtocol: self protocol - statusCode: anInteger -] - -{ #category : #accessing } -XMLHTTPResponse >> statusDescription [ - | delimiter | - - delimiter := Character space. - ^ (self statusLine copyAfter: delimiter) - copyAfter: delimiter -] - -{ #category : #accessing } -XMLHTTPResponse >> statusLine [ - "Returns the status line as a string" - - self subclassResponsibility -] diff --git a/src/XML-Parser/XMLHTTPResponseContentReader.class.st b/src/XML-Parser/XMLHTTPResponseContentReader.class.st deleted file mode 100644 index 19f9ddcf4..000000000 --- a/src/XML-Parser/XMLHTTPResponseContentReader.class.st +++ /dev/null @@ -1,162 +0,0 @@ -" -This is an abstract base class for response content readers. The #readUpToLimit:decoding: message returns the entire decoded (if enabled) response content, raising an XMLLimitException if it exceeds the specified limit. - -Subclasses need to implement #rawReadWithLength:upToLimit: to read and return the raw response content and signal an error if it exceeds the limit. -" -Class { - #name : #XMLHTTPResponseContentReader, - #superclass : #Object, - #instVars : [ - 'response', - 'rawContent', - 'contentReadStream', - 'limitedContentReadStream', - 'isDecompressing' - ], - #category : #'XML-Parser-HTTP' -} - -{ #category : #accessing } -XMLHTTPResponseContentReader class >> response: aResponse [ - ^ self new setResponse: aResponse -] - -{ #category : #private } -XMLHTTPResponseContentReader >> contentReadStreamUpToEnd [ - | contentWriteStream | - - contentWriteStream := self newContentWriteStream. - [contentReadStream atEnd] - whileFalse: [contentWriteStream nextPut: contentReadStream next]. - ^ contentWriteStream contents. -] - -{ #category : #private } -XMLHTTPResponseContentReader >> decodedContentReadStreamUpToEndWithCharset: aCharset [ - | streamConverter | - - (streamConverter := aCharset asXMLStreamConverter) isNull - ifTrue: [self errorUnrecognizedContentTypeCharset: aCharset]. - - contentReadStream := - XMLDecodingReadStreamAdapter - on: contentReadStream - streamConverter: streamConverter. - - [^ self contentReadStreamUpToEnd] - on: XMLEncodingException - do: [:error | - "might actually be a limit exception" - self ensureContentReadStreamWasNotLimited. - - error pass]. -] - -{ #category : #private } -XMLHTTPResponseContentReader >> ensureContentReadStreamWasNotLimited [ - (limitedContentReadStream notNil - and: [limitedContentReadStream atLimitedEnd]) - ifTrue: [self errorContentLimitExceeded] -] - -{ #category : #private } -XMLHTTPResponseContentReader >> errorContentLimitExceeded [ - XMLLimitException signal: 'HTTP reponse content limit exceeded' -] - -{ #category : #private } -XMLHTTPResponseContentReader >> errorUnrecognizedContentTypeCharset: aCharset [ - XMLEncodingException - formatSignal: - 'Unrecognized Content-Type charset "{1}" encoding for HTTP content' - with: aCharset -] - -{ #category : #testing } -XMLHTTPResponseContentReader >> handlesDecompression [ - ^ false -] - -{ #category : #initialization } -XMLHTTPResponseContentReader >> initializeDecompressionWithSchemes: aCompressionSchemeSequence upToLimit: aMaxSize [ - isDecompressing := true. - aCompressionSchemeSequence reverseDo: [:each | - contentReadStream := - XMLHTTPDecompressingReadStreamAdapterFactory - on: contentReadStream - compression: each]. - aMaxSize - ifNotNil: [self limitContentReadStreamUpToLimit: aMaxSize]. -] - -{ #category : #accessing } -XMLHTTPResponseContentReader >> limitContentReadStreamUpToLimit: aMaxSize [ - limitedContentReadStream := - XMLLimitedReadStreamAdapter - on: contentReadStream - limit: aMaxSize. - contentReadStream := limitedContentReadStream. -] - -{ #category : #'instance creation' } -XMLHTTPResponseContentReader >> newContentWriteStream [ - ^ (String new: rawContent size) writeStream -] - -{ #category : #reading } -XMLHTTPResponseContentReader >> rawReadWithLength: aContentLength upToLimit: aMaxSize [ - self subclassResponsibility -] - -{ #category : #reading } -XMLHTTPResponseContentReader >> readUpToLimit: aMaxSize decoding: aBoolean [ - | contentLength contentType compressionSchemes charset content | - - contentLength := response contentLength. - (response isChunked - or: [contentLength isNil]) - ifTrue: [contentLength := nil] - ifFalse: [ - contentLength > 0 - ifFalse: [^ '']. - (aMaxSize notNil - and: [contentLength > aMaxSize]) - ifTrue: [self errorContentLimitExceeded]]. - rawContent := - self - rawReadWithLength: contentLength - upToLimit: aMaxSize. - contentReadStream := rawContent readStream. - - (self handlesDecompression - and: [(compressionSchemes := response contentEncoding) notEmpty]) - ifTrue: [ - self - initializeDecompressionWithSchemes: compressionSchemes - upToLimit: aMaxSize]. - - (aBoolean - and: [(contentType := response contentType) notNil - and: [(charset := contentType charset) ~= contentType defaultCharset]]) - ifTrue: [ - content := self decodedContentReadStreamUpToEndWithCharset: charset] - ifFalse: [ - content := self undecodedContentReadStreamUpToEnd]. - - self ensureContentReadStreamWasNotLimited. - ^ content. -] - -{ #category : #initialization } -XMLHTTPResponseContentReader >> setResponse: aResponse [ - response := aResponse. - isDecompressing := false. -] - -{ #category : #streaming } -XMLHTTPResponseContentReader >> undecodedContentReadStreamUpToEnd [ - ^ (isDecompressing - or: [limitedContentReadStream notNil]) - ifTrue: [self contentReadStreamUpToEnd] - ifFalse: [rawContent] -] diff --git a/src/XML-Parser/XMLHTTPWebClientRequest.class.st b/src/XML-Parser/XMLHTTPWebClientRequest.class.st deleted file mode 100644 index 3a8f10b04..000000000 --- a/src/XML-Parser/XMLHTTPWebClientRequest.class.st +++ /dev/null @@ -1,123 +0,0 @@ -" -This class uses the WebClient library to implement HTTP requests. This is used on Squeak when Zinc isn't installed. -" -Class { - #name : #XMLHTTPWebClientRequest, - #superclass : #XMLHTTPRequest, - #instVars : [ - 'webClientClient', - 'webClientRequest' - ], - #category : #'XML-Parser-HTTP' -} - -{ #category : #testing } -XMLHTTPWebClientRequest class >> isSupportedImplementation [ - ^ XMLClassFinder hasClassNamed: #WebClient -] - -{ #category : #basic } -XMLHTTPWebClientRequest >> basicCleanup [ - self webClientClient close -] - -{ #category : #basic } -XMLHTTPWebClientRequest >> basicSend [ - ^ self responseClass - request: self - webClientResponse: - (self webClientClient - "#sendRequest: unfortunately requires #initializeFromUrl: - to be sent first" - initializeFromUrl: self url; - sendRequest: self webClientRequest) -] - -{ #category : #accessing } -XMLHTTPWebClientRequest >> headerAt: aKey ifAbsent: aBlock [ - ^ self webClientRequest - headerAt: aKey - ifAbsent: aBlock -] - -{ #category : #accessing } -XMLHTTPWebClientRequest >> headerAt: aKey put: aValue [ - self webClientRequest - removeHeader: aKey; - addHeader: aKey value: aValue. - ^ aValue. -] - -{ #category : #enumerating } -XMLHTTPWebClientRequest >> headerKeysAndValuesDo: aTwoArgumentBlock [ - self webClientRequest headersDo: aTwoArgumentBlock -] - -{ #category : #adding } -XMLHTTPWebClientRequest >> headerValuesAt: aKey add: aValue [ - self webClientRequest - addHeader: aKey - value: aValue. - ^ aValue. -] - -{ #category : #enumerating } -XMLHTTPWebClientRequest >> headerValuesAt: aKey do: aBlock [ - self webClientRequest - headersAt: aKey - do: aBlock -] - -{ #category : #accessing } -XMLHTTPWebClientRequest >> method [ - ^ self webClientRequest method -] - -{ #category : #accessing } -XMLHTTPWebClientRequest >> method: aString [ - self webClientRequest method: aString -] - -{ #category : #removing } -XMLHTTPWebClientRequest >> removeHeaderAt: aKey ifAbsent: aBlock [ - | removedValues | - - removedValues := - self webClientRequest - headersAt: aKey - ifAbsent: [^ aBlock value]. - self webClientRequest removeHeader: aKey. - ^ removedValues asOrderedCollection. -] - -{ #category : #defaults } -XMLHTTPWebClientRequest >> responseClass [ - ^ XMLHTTPWebClientResponse -] - -{ #category : #accessing } -XMLHTTPWebClientRequest >> timeout [ - ^ self webClientClient timeout -] - -{ #category : #accessing } -XMLHTTPWebClientRequest >> timeout: anInteger [ - self webClientClient timeout: anInteger -] - -{ #category : #private } -XMLHTTPWebClientRequest >> webClientClient [ - ^ webClientClient - ifNil: [ - webClientClient := (XMLClassFinder classNamed: #WebClient) new] -] - -{ #category : #private } -XMLHTTPWebClientRequest >> webClientRequest [ - ^ webClientRequest - ifNil: [ - webClientRequest := - (XMLClassFinder classNamed: #WebRequest) new - initializeFromUrl: self url; - yourself] -] diff --git a/src/XML-Parser/XMLHTTPWebClientResponse.class.st b/src/XML-Parser/XMLHTTPWebClientResponse.class.st deleted file mode 100644 index 943b72ca1..000000000 --- a/src/XML-Parser/XMLHTTPWebClientResponse.class.st +++ /dev/null @@ -1,116 +0,0 @@ -" -This class uses the WebClient library to implement HTTP responses. This is used on Squeak when Zinc isn't installed. -" -Class { - #name : #XMLHTTPWebClientResponse, - #superclass : #XMLHTTPResponse, - #instVars : [ - 'webClientResponse' - ], - #category : #'XML-Parser-HTTP' -} - -{ #category : #testing } -XMLHTTPWebClientResponse class >> isSupportedImplementation [ - ^ XMLClassFinder hasClassNamed: #WebResponse -] - -{ #category : #'instance creation' } -XMLHTTPWebClientResponse class >> request: aRequest webClientResponse: aWebClientResponse [ - ^ (self request: aRequest) - setWebClientResponse: aWebClientResponse -] - -{ #category : #defaults } -XMLHTTPWebClientResponse >> contentReaderClass [ - ^ XMLHTTPWebClientResponseContentReader -] - -{ #category : #accessing } -XMLHTTPWebClientResponse >> headerAt: aKey ifAbsent: aBlock [ - ^ self webClientResponse - headerAt: aKey - ifAbsent: aBlock -] - -{ #category : #accessing } -XMLHTTPWebClientResponse >> headerAt: aKey put: aValue [ - self webClientResponse - removeHeader: aKey; - addHeader: aKey value: aValue. - ^ aValue. -] - -{ #category : #enumerating } -XMLHTTPWebClientResponse >> headerKeysAndValuesDo: aTwoArgumentBlock [ - self webClientResponse headersDo: aTwoArgumentBlock -] - -{ #category : #adding } -XMLHTTPWebClientResponse >> headerValuesAt: aKey add: aValue [ - self webClientResponse - addHeader: aKey - value: aValue. - ^ aValue. -] - -{ #category : #enumerating } -XMLHTTPWebClientResponse >> headerValuesAt: aKey do: aBlock [ - self webClientResponse - headersAt: aKey - do: aBlock -] - -{ #category : #testing } -XMLHTTPWebClientResponse >> isSuccess [ - ^ self webClientResponse isSuccess -] - -{ #category : #accessing } -XMLHTTPWebClientResponse >> protocol [ - ^ self webClientResponse protocol -] - -{ #category : #removing } -XMLHTTPWebClientResponse >> removeHeaderAt: aKey ifAbsent: aBlock [ - | removedValues | - - removedValues := - self webClientResponse - headersAt: aKey - ifAbsent: [^ aBlock value]. - self webClientResponse removeHeader: aKey. - ^ removedValues asOrderedCollection. -] - -{ #category : #initialization } -XMLHTTPWebClientResponse >> setProtocol: aString statusCode: anInteger [ - self webClientResponse - protocol: aString - code: anInteger -] - -{ #category : #initialization } -XMLHTTPWebClientResponse >> setWebClientResponse: aWebClientResponse [ - webClientResponse := aWebClientResponse -] - -{ #category : #accessing } -XMLHTTPWebClientResponse >> statusCode [ - ^ self webClientResponse code -] - -{ #category : #accessing } -XMLHTTPWebClientResponse >> statusLine [ - ^ self webClientResponse status -] - -{ #category : #private } -XMLHTTPWebClientResponse >> webClientResponse [ - ^ webClientResponse - ifNil: [ - webClientResponse := - (XMLClassFinder classNamed: #WebResponse) - protocol: self defaultProtocol - code: self defaultStatusCode] -] diff --git a/src/XML-Parser/XMLHTTPWebClientResponseContentReader.class.st b/src/XML-Parser/XMLHTTPWebClientResponseContentReader.class.st deleted file mode 100644 index 083aa174e..000000000 --- a/src/XML-Parser/XMLHTTPWebClientResponseContentReader.class.st +++ /dev/null @@ -1,40 +0,0 @@ -" -A WebClient content reader. -" -Class { - #name : #XMLHTTPWebClientResponseContentReader, - #superclass : #XMLHTTPResponseContentReader, - #category : #'XML-Parser-HTTP' -} - -{ #category : #testing } -XMLHTTPWebClientResponseContentReader >> handlesDecompression [ - "this class needs to handle decompression, since it uses the lower-level - WebClient #streamFrom:to:size:progress: interface" - ^ true -] - -{ #category : #reading } -XMLHTTPWebClientResponseContentReader >> rawReadWithLength: aContentLength upToLimit: aMaxSize [ - | socketStream rawContentWriteStream | - - (socketStream := response webClientResponse stream) binary. - rawContentWriteStream := - (ByteArray new: - (aContentLength - ifNil: [aMaxSize - ifNil: [4096]])) writeStream. - response webClientResponse - streamFrom: socketStream - to: rawContentWriteStream - size: aContentLength - progress: - ((aContentLength isNil - and: [aMaxSize notNil]) - ifTrue: [ - [:ignored :total | - total > aMaxSize - ifTrue: [self errorContentLimitExceeded]]] - ifFalse: [nil]). - ^ rawContentWriteStream contents. -] diff --git a/src/XML-Parser/XMLHTTPZincRequest.class.st b/src/XML-Parser/XMLHTTPZincRequest.class.st deleted file mode 100644 index b546a90e1..000000000 --- a/src/XML-Parser/XMLHTTPZincRequest.class.st +++ /dev/null @@ -1,132 +0,0 @@ -" -This class uses Zinc HTTP Components to implement HTTP requests and is the preferred implementation. -" -Class { - #name : #XMLHTTPZincRequest, - #superclass : #XMLHTTPRequest, - #instVars : [ - 'zincRequest', - 'zincClient' - ], - #category : #'XML-Parser-HTTP' -} - -{ #category : #testing } -XMLHTTPZincRequest class >> isSupportedImplementation [ - ^ XMLClassFinder hasClassNamed: #ZnClient -] - -{ #category : #basic } -XMLHTTPZincRequest >> basicCleanup [ - self zincClient close -] - -{ #category : #basic } -XMLHTTPZincRequest >> basicSend [ - ^ self responseClass - request: self - zincResponse: - (self zincClient - request: self zincRequest; - execute; - response) -] - -{ #category : #accessing } -XMLHTTPZincRequest >> headerAt: aKey ifAbsent: aBlock [ - self zincRequest headers - at: aKey - ifPresent: [:value | - ^ value isArray - ifTrue: [value first] - ifFalse: [value]]. - ^ aBlock value. -] - -{ #category : #accessing } -XMLHTTPZincRequest >> headerAt: aKey put: aValue [ - self zincRequest headers - at: aKey - put: aValue. - ^ aValue. -] - -{ #category : #enumerating } -XMLHTTPZincRequest >> headerKeysAndValuesDo: aTwoArgumentBlock [ - self zincRequest headersDo: aTwoArgumentBlock -] - -{ #category : #adding } -XMLHTTPZincRequest >> headerValuesAt: aKey add: aValue [ - self zincRequest headers - at: aKey - add: aValue. - ^ aValue. -] - -{ #category : #enumerating } -XMLHTTPZincRequest >> headerValuesAt: aKey do: aBlock [ - self zincRequest headers - at: aKey - ifPresent: [:value | - value isArray - ifTrue: [value do: aBlock] - ifFalse: [aBlock value: value]] -] - -{ #category : #accessing } -XMLHTTPZincRequest >> method [ - ^ self zincRequest method asString -] - -{ #category : #accessing } -XMLHTTPZincRequest >> method: aString [ - self zincRequest method: aString asSymbol -] - -{ #category : #removing } -XMLHTTPZincRequest >> removeHeaderAt: aKey ifAbsent: aBlock [ - | removedValues | - - removedValues := - self zincRequest headers - removeKey: aKey - ifAbsent: [^ aBlock value]. - ^ removedValues isString - ifTrue: [OrderedCollection with: removedValues] - ifFalse: [removedValues asOrderedCollection]. -] - -{ #category : #defaults } -XMLHTTPZincRequest >> responseClass [ - ^ XMLHTTPZincResponse -] - -{ #category : #accessing } -XMLHTTPZincRequest >> timeout [ - ^ self zincClient timeout -] - -{ #category : #accessing } -XMLHTTPZincRequest >> timeout: anInteger [ - self zincClient timeout: anInteger -] - -{ #category : #'private ' } -XMLHTTPZincRequest >> zincClient [ - ^ zincClient - ifNil: [ - zincClient := - (XMLClassFinder classNamed: #ZnClient) new - streaming: true; - yourself] -] - -{ #category : #'private ' } -XMLHTTPZincRequest >> zincRequest [ - ^ zincRequest - ifNil: [ - zincRequest := - (XMLClassFinder classNamed: #ZnRequest) - get: self url] -] diff --git a/src/XML-Parser/XMLHTTPZincResponse.class.st b/src/XML-Parser/XMLHTTPZincResponse.class.st deleted file mode 100644 index 9e001c717..000000000 --- a/src/XML-Parser/XMLHTTPZincResponse.class.st +++ /dev/null @@ -1,135 +0,0 @@ -" -This class uses Zinc HTTP Components to implement HTTP responses and is the preferred implementation. -" -Class { - #name : #XMLHTTPZincResponse, - #superclass : #XMLHTTPResponse, - #instVars : [ - 'zincResponse' - ], - #category : #'XML-Parser-HTTP' -} - -{ #category : #testing } -XMLHTTPZincResponse class >> isSupportedImplementation [ - ^ XMLClassFinder hasClassNamed: #ZnResponse -] - -{ #category : #'instance creation' } -XMLHTTPZincResponse class >> request: aRequest zincResponse: aZincResponse [ - ^ (self request: aRequest) - setZincResponse: aZincResponse -] - -{ #category : #defaults } -XMLHTTPZincResponse >> contentReaderClass [ - ^ XMLHTTPZincResponseContentReader -] - -{ #category : #accessing } -XMLHTTPZincResponse >> headerAt: aKey ifAbsent: aBlock [ - self zincResponse headers - at: aKey - ifPresent: [:value | - ^ value isArray - ifTrue: [value first] - ifFalse: [value]]. - ^ aBlock value. -] - -{ #category : #accessing } -XMLHTTPZincResponse >> headerAt: aKey put: aValue [ - self zincResponse headers - at: aKey - put: aValue. - ^ aValue. -] - -{ #category : #enumerating } -XMLHTTPZincResponse >> headerKeysAndValuesDo: aTwoArgumentBlock [ - self zincResponse headersDo: aTwoArgumentBlock -] - -{ #category : #adding } -XMLHTTPZincResponse >> headerValuesAt: aKey add: aValue [ - self zincResponse headers - at: aKey - add: aValue. - ^ aValue. -] - -{ #category : #enumerating } -XMLHTTPZincResponse >> headerValuesAt: aKey do: aBlock [ - self zincResponse headers - at: aKey - ifPresent: [:value | - value isArray - ifTrue: [value do: aBlock] - ifFalse: [aBlock value: value]] -] - -{ #category : #testing } -XMLHTTPZincResponse >> isSuccess [ - ^ self zincResponse isSuccess -] - -{ #category : #accessing } -XMLHTTPZincResponse >> protocol [ - ^ self zincResponse statusLine version -] - -{ #category : #removing } -XMLHTTPZincResponse >> removeHeaderAt: aKey ifAbsent: aBlock [ - | removedValues | - - removedValues := - self zincResponse headers - removeKey: aKey - ifAbsent: [^ aBlock value]. - ^ removedValues isString - ifTrue: [OrderedCollection with: removedValues] - ifFalse: [removedValues asOrderedCollection]. -] - -{ #category : #initialization } -XMLHTTPZincResponse >> setProtocol: aString statusCode: anInteger [ - self zincResponse statusLine: - ((ZnStatusLine code: anInteger) - version: aString; - yourself) -] - -{ #category : #initialization } -XMLHTTPZincResponse >> setZincResponse: aZincResponse [ - zincResponse := aZincResponse -] - -{ #category : #accessing } -XMLHTTPZincResponse >> statusCode [ - ^ self zincResponse status -] - -{ #category : #accessing } -XMLHTTPZincResponse >> statusLine [ - | statusLine | - - statusLine := self zincResponse statusLine. - ^ String streamContents: [:stream | - stream - nextPutAll: statusLine version; - space. - statusLine printCodeAndReasonOn: stream]. -] - -{ #category : #private } -XMLHTTPZincResponse >> zincResponse [ - ^ zincResponse - ifNil: [ - zincResponse := - (XMLClassFinder classNamed: #ZnResponse) new - statusLine: - ((ZnStatusLine code: self defaultStatusCode) - version: self defaultProtocol; - yourself); - yourself] -] diff --git a/src/XML-Parser/XMLHTTPZincResponseContentReader.class.st b/src/XML-Parser/XMLHTTPZincResponseContentReader.class.st deleted file mode 100644 index 9ec1d2e0c..000000000 --- a/src/XML-Parser/XMLHTTPZincResponseContentReader.class.st +++ /dev/null @@ -1,19 +0,0 @@ -" -A Zinc content reader. Zinc handles decompression automatically, so this class doesn't. -" -Class { - #name : #XMLHTTPZincResponseContentReader, - #superclass : #XMLHTTPResponseContentReader, - #category : #'XML-Parser-HTTP' -} - -{ #category : #reading } -XMLHTTPZincResponseContentReader >> rawReadWithLength: aContentLength upToLimit: aMaxSize [ - ^ [| entityStream | - (entityStream := response zincResponse entity stream) binary. - ZnUtils - readUpToEnd: entityStream - limit: aMaxSize] - on: ZnEntityTooLarge - do: [:error | self errorContentLimitExceeded] -] diff --git a/src/XML-Parser/XMLIDAttributeValidator.class.st b/src/XML-Parser/XMLIDAttributeValidator.class.st deleted file mode 100644 index 7f2898f33..000000000 --- a/src/XML-Parser/XMLIDAttributeValidator.class.st +++ /dev/null @@ -1,69 +0,0 @@ -" -This class validates ID attributes that must have unique (not repeated in the same document) values. -" -Class { - #name : #XMLIDAttributeValidator, - #superclass : #XMLAttributeValidator, - #instVars : [ - 'elementIDValidator' - ], - #category : #'XML-Parser-Validation' -} - -{ #category : #defaults } -XMLIDAttributeValidator class >> standaloneExternalClass [ - ^ XMLStandaloneExternalIDAttributeValidator -] - -{ #category : #accessing } -XMLIDAttributeValidator >> elementIDValidator [ - ^ elementIDValidator -] - -{ #category : #accessing } -XMLIDAttributeValidator >> elementIDValidator: anElementIDValidator [ - elementIDValidator := anElementIDValidator -] - -{ #category : #private } -XMLIDAttributeValidator >> errorIDAttributeMustBeRequiredOrImplied [ - XMLValidationException - formatSignal: - 'Attribute "{1}" of element <{2}> is of ID type and must ', - 'be declared #REQUIRED or #IMPLIED' - with: self attribute - with: self element -] - -{ #category : #initialization } -XMLIDAttributeValidator >> initializeWithValidatorsFrom: aValidatorContainer [ - super initializeWithValidatorsFrom: aValidatorContainer. - - elementIDValidator := aValidatorContainer elementIDValidator. -] - -{ #category : #testing } -XMLIDAttributeValidator >> isID [ - ^ true -] - -{ #category : #validating } -XMLIDAttributeValidator >> validateAttributeDeclaration [ - self elementIDValidator - validateIDAttribute: self attribute - forElement: self element. - - super validateAttributeDeclaration. -] - -{ #category : #validating } -XMLIDAttributeValidator >> validateAttributeDefaultValue: aDefaultValue [ - self errorIDAttributeMustBeRequiredOrImplied -] - -{ #category : #validating } -XMLIDAttributeValidator >> validateAttributeValue: aValue [ - self elementIDValidator - validateID: aValue - inAttribute: self attribute -] diff --git a/src/XML-Parser/XMLIDRefAttributeValidator.class.st b/src/XML-Parser/XMLIDRefAttributeValidator.class.st deleted file mode 100644 index 367db88b8..000000000 --- a/src/XML-Parser/XMLIDRefAttributeValidator.class.st +++ /dev/null @@ -1,46 +0,0 @@ -" -This class validates attributes that refer to an ID of another element with a ID attribute. -" -Class { - #name : #XMLIDRefAttributeValidator, - #superclass : #XMLAttributeValidator, - #instVars : [ - 'elementIDValidator' - ], - #category : #'XML-Parser-Validation' -} - -{ #category : #defaults } -XMLIDRefAttributeValidator class >> standaloneExternalClass [ - ^ XMLStandaloneExternalIDRefAttributeValidator -] - -{ #category : #accessing } -XMLIDRefAttributeValidator >> elementIDValidator [ - ^ elementIDValidator -] - -{ #category : #initialization } -XMLIDRefAttributeValidator >> initializeWithValidatorsFrom: aValidatorContainer [ - super initializeWithValidatorsFrom: aValidatorContainer. - - elementIDValidator := aValidatorContainer elementIDValidator. -] - -{ #category : #testing } -XMLIDRefAttributeValidator >> isIDRef [ - ^ true -] - -{ #category : #validating } -XMLIDRefAttributeValidator >> validateAttributeDefaultValue: aDefaultValue [ - aDefaultValue isXMLName - ifFalse: [self errorInvalidDefaultAttributeValue: aDefaultValue] -] - -{ #category : #validating } -XMLIDRefAttributeValidator >> validateAttributeValue: aValue [ - self elementIDValidator - validateIDReference: aValue - inAttribute: self attribute -] diff --git a/src/XML-Parser/XMLIDRefsAttributeValidator.class.st b/src/XML-Parser/XMLIDRefsAttributeValidator.class.st deleted file mode 100644 index 00815cc76..000000000 --- a/src/XML-Parser/XMLIDRefsAttributeValidator.class.st +++ /dev/null @@ -1,37 +0,0 @@ -" -This class validates attributes with lists of ID ref values separated by spaces. -" -Class { - #name : #XMLIDRefsAttributeValidator, - #superclass : #XMLIDRefAttributeValidator, - #category : #'XML-Parser-Validation' -} - -{ #category : #defaults } -XMLIDRefsAttributeValidator class >> standaloneExternalClass [ - ^ XMLStandaloneExternalIDRefsAttributeValidator -] - -{ #category : #testing } -XMLIDRefsAttributeValidator >> isIDRefs [ - ^ true -] - -{ #category : #validating } -XMLIDRefsAttributeValidator >> validateAttributeDefaultValue: aDefaultValue [ - self - spaceSeparatedListValuesIn: aDefaultValue - do: [:each | - each isXMLName - ifFalse: [self errorInvalidDefaultAttributeValue: aDefaultValue]] -] - -{ #category : #validating } -XMLIDRefsAttributeValidator >> validateAttributeValue: aValue [ - self - spaceSeparatedListValuesIn: aValue - do: [:each | - self elementIDValidator - validateIDReference: each - inAttribute: self attribute] -] diff --git a/src/XML-Parser/XMLImplicitEncodingDetector.class.st b/src/XML-Parser/XMLImplicitEncodingDetector.class.st deleted file mode 100644 index bb2abd011..000000000 --- a/src/XML-Parser/XMLImplicitEncodingDetector.class.st +++ /dev/null @@ -1,15 +0,0 @@ -" -This is a class for automatic encoding detection of streams that infers explicit encodings from a leading byte order mark (BOM) sequence and implicit encodings from a sequence of one or three null bytes before or after a leading ASCII character (implicit UTF 16/32). - -(It actually implements the YAML implicit encoding detection algorithm, looking for any leading ASCII char, not just '<', before or after a null byte sequence. This algorithm is more general than the XML one, supporting non-XML text, and since the XML one is in a ""(Non-Normative)"" section of the spec, we don't actually have to implement it.) -" -Class { - #name : #XMLImplicitEncodingDetector, - #superclass : #XMLEncodingDetector, - #category : #'XML-Parser-Streams' -} - -{ #category : #testing } -XMLImplicitEncodingDetector >> detectsImplicitEncodings [ - ^ true -] diff --git a/src/XML-Parser/XMLImplicitUTF16BigEndianStreamConverter.class.st b/src/XML-Parser/XMLImplicitUTF16BigEndianStreamConverter.class.st deleted file mode 100644 index 3386fe09b..000000000 --- a/src/XML-Parser/XMLImplicitUTF16BigEndianStreamConverter.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -A stream converter for implicit big endian UTF-16 streams. -" -Class { - #name : #XMLImplicitUTF16BigEndianStreamConverter, - #superclass : #XMLUTF16BigEndianStreamConverter, - #category : #'XML-Parser-Streams' -} - -{ #category : #testing } -XMLImplicitUTF16BigEndianStreamConverter class >> isImplicit [ - ^ true -] diff --git a/src/XML-Parser/XMLImplicitUTF16LittleEndianStreamConverter.class.st b/src/XML-Parser/XMLImplicitUTF16LittleEndianStreamConverter.class.st deleted file mode 100644 index 54e12a3ac..000000000 --- a/src/XML-Parser/XMLImplicitUTF16LittleEndianStreamConverter.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -A stream converter for implicit little endian UTF-16 streams. -" -Class { - #name : #XMLImplicitUTF16LittleEndianStreamConverter, - #superclass : #XMLUTF16LittleEndianStreamConverter, - #category : #'XML-Parser-Streams' -} - -{ #category : #testing } -XMLImplicitUTF16LittleEndianStreamConverter class >> isImplicit [ - ^ true -] diff --git a/src/XML-Parser/XMLImplicitUTF32BigEndianStreamConverter.class.st b/src/XML-Parser/XMLImplicitUTF32BigEndianStreamConverter.class.st deleted file mode 100644 index 9d4666985..000000000 --- a/src/XML-Parser/XMLImplicitUTF32BigEndianStreamConverter.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -A stream converter for implicit big endian UTF-32 streams. -" -Class { - #name : #XMLImplicitUTF32BigEndianStreamConverter, - #superclass : #XMLUTF32BigEndianStreamConverter, - #category : #'XML-Parser-Streams' -} - -{ #category : #testing } -XMLImplicitUTF32BigEndianStreamConverter class >> isImplicit [ - ^ true -] diff --git a/src/XML-Parser/XMLImplicitUTF32LittleEndianStreamConverter.class.st b/src/XML-Parser/XMLImplicitUTF32LittleEndianStreamConverter.class.st deleted file mode 100644 index 0af3d9d5c..000000000 --- a/src/XML-Parser/XMLImplicitUTF32LittleEndianStreamConverter.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -A stream converter for implicit little endian UTF-32 streams. -" -Class { - #name : #XMLImplicitUTF32LittleEndianStreamConverter, - #superclass : #XMLUTF32LittleEndianStreamConverter, - #category : #'XML-Parser-Streams' -} - -{ #category : #testing } -XMLImplicitUTF32LittleEndianStreamConverter class >> isImplicit [ - ^ true -] diff --git a/src/XML-Parser/XMLImplicitUTF8StreamConverter.class.st b/src/XML-Parser/XMLImplicitUTF8StreamConverter.class.st deleted file mode 100644 index 59640d46a..000000000 --- a/src/XML-Parser/XMLImplicitUTF8StreamConverter.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -A stream converter for implicit UTF-8 streams. -" -Class { - #name : #XMLImplicitUTF8StreamConverter, - #superclass : #XMLUTF8StreamConverter, - #category : #'XML-Parser-Streams' -} - -{ #category : #testing } -XMLImplicitUTF8StreamConverter class >> isImplicit [ - ^ true -] diff --git a/src/XML-Parser/XMLIntegerReader.class.st b/src/XML-Parser/XMLIntegerReader.class.st deleted file mode 100644 index d304327c0..000000000 --- a/src/XML-Parser/XMLIntegerReader.class.st +++ /dev/null @@ -1,230 +0,0 @@ -" -This class reads positive hex or decimal integers from minimal streams supporting #next, #peek, and #atEnd. It returns nil instead of raising errors for invalid integers. -" -Class { - #name : #XMLIntegerReader, - #superclass : #Object, - #instVars : [ - 'readStream', - 'printStream' - ], - #classVars : [ - 'CharacterDigitValues' - ], - #category : #'XML-Parser-Utils' -} - -{ #category : #'class initialization' } -XMLIntegerReader class >> initialize [ - "self initialize" - - self initializeCharacterDigitValues -] - -{ #category : #'class initialization' } -XMLIntegerReader class >> initializeCharacterDigitValues [ - | temp | - - "use an array instead of a dictionary for speed, and use a temp - to fully initialize it before assignment to avoid possible race - conditions during class reinitialization" - temp := Array new: 255. - #(#($0 $9 0) #($a $f 10) #($A $Z 10)) do: [:each | - | firstDigitValue lastDigitValue baseValue | - firstDigitValue := each first asciiValue. - lastDigitValue := each second asciiValue. - baseValue := each third. - firstDigitValue - to: lastDigitValue - do: [:i | - temp - at: i - put: i - firstDigitValue + baseValue]]. - CharacterDigitValues := temp. -] - -{ #category : #defaults } -XMLIntegerReader class >> maxBase [ - ^ 16 -] - -{ #category : #defaults } -XMLIntegerReader class >> maxIntegerValue [ - ^ nil -] - -{ #category : #'instance creation' } -XMLIntegerReader class >> on: aStringOrStream [ - ^ self new on: aStringOrStream -] - -{ #category : #'instance creation' } -XMLIntegerReader class >> readFrom: aStream [ - ^ (self on: aStream) nextInteger -] - -{ #category : #reading } -XMLIntegerReader class >> readFrom: aStream withBase: aBase [ - ^ (self on: aStream) nextIntegerWithBase: aBase -] - -{ #category : #reading } -XMLIntegerReader class >> readFrom: aStream withBase: aFirstBase andPrefixes: aCharacterCollection orBase: aSecondBase [ - ^ (self on: aStream) - nextIntegerWithBase: aFirstBase - andPrefixes: aCharacterCollection - orBase: aSecondBase -] - -{ #category : #reading } -XMLIntegerReader class >> readFrom: aStream withBase: aFirstBase andPrefixes: aCharacterCollection orBase: aSecondBase upToLimit: aReadLimit [ - ^ (self on: aStream) - nextIntegerWithBase: aFirstBase - andPrefixes: aCharacterCollection - orBase: aSecondBase - upToLimit: aReadLimit -] - -{ #category : #reading } -XMLIntegerReader class >> readFrom: aStream withBase: aBase upToLimit: aReadLimit [ - ^ (self on: aStream) - nextIntegerWithBase: aBase - upToLimit: aReadLimit -] - -{ #category : #testing } -XMLIntegerReader >> atEnd [ - ^ readStream atEnd -] - -{ #category : #private } -XMLIntegerReader >> errorUnsupportedBase: aBase [ - Error signal: 'Unsupported base ', aBase printString -] - -{ #category : #private } -XMLIntegerReader >> next [ - | nextChar | - - self atEnd - ifFalse: [ - nextChar := readStream next. - printStream - ifNotNil: [printStream nextPut: nextChar]]. - ^ nextChar. -] - -{ #category : #private } -XMLIntegerReader >> nextDigitWithBase: aBase [ - | asciiValue digit | - - ((asciiValue := self peek asciiValue) > 0 - and: [asciiValue <= CharacterDigitValues size - and: [(digit := CharacterDigitValues at: asciiValue) notNil - and: [digit < aBase]]]) - ifTrue: [ - self next. - ^ digit] - ifFalse: [^ nil] -] - -{ #category : #reading } -XMLIntegerReader >> nextInteger [ - ^ self nextIntegerWithBase: 10 -] - -{ #category : #reading } -XMLIntegerReader >> nextIntegerWithBase: aBase [ - ^ self - nextIntegerWithBase: aBase - upToLimit: nil -] - -{ #category : #reading } -XMLIntegerReader >> nextIntegerWithBase: aFirstBase andPrefixes: aCharacterCollection orBase: aSecondBase [ - ^ self - nextIntegerWithBase: aFirstBase - andPrefixes: aCharacterCollection - orBase: aSecondBase - upToLimit: nil -] - -{ #category : #reading } -XMLIntegerReader >> nextIntegerWithBase: aFirstBase andPrefixes: aCharacterCollection orBase: aSecondBase upToLimit: aReadLimit [ - ^ self - nextIntegerWithBase: - ((self atEnd not - and: [aCharacterCollection includes: self peek]) - ifTrue: [ - self next. - aFirstBase] - ifFalse: [aSecondBase]) - upToLimit: aReadLimit -] - -{ #category : #reading } -XMLIntegerReader >> nextIntegerWithBase: aBase upToLimit: aReadLimit [ - | integer maxValue maxBaseValue digitValue readLimit | - - (aBase > 1 - and: [aBase <= self class maxBase]) - ifFalse: [self errorUnsupportedBase: aBase]. - - self class maxIntegerValue - ifNotNil: [:maxIntegerValue | - maxValue := maxIntegerValue. - maxBaseValue := (maxValue / aBase) floor]. - readLimit := aReadLimit. - [self atEnd - or: [(readLimit notNil and: [readLimit <= 0]) - or: [(digitValue := self nextDigitWithBase: aBase) isNil]]] - whileFalse: [ - integer - ifNil: [integer := 0]. - - maxBaseValue - ifNotNil: [ - integer > maxBaseValue - ifTrue: [ - self overflowed. - "handle overflow with saturation" - ^ maxValue]]. - integer := integer * aBase. - - maxValue - ifNotNil: [ - integer > (maxValue - digitValue) - ifTrue: [ - self overflowed. - "handle overflow with saturation" - ^ maxValue]]. - integer := integer + digitValue. - readLimit - ifNotNil: [readLimit := readLimit - 1]]. - ^ integer. -] - -{ #category : #initialization } -XMLIntegerReader >> on: aStringOrStream [ - readStream := - aStringOrStream isStream - ifTrue: [aStringOrStream] - ifFalse: [aStringOrStream readStream] -] - -{ #category : #private } -XMLIntegerReader >> overflowed [ - "can override to raise a warning or error" -] - -{ #category : #private } -XMLIntegerReader >> peek [ - self atEnd - ifTrue: [^ nil] - ifFalse: [^ readStream peek] -] - -{ #category : #accessing } -XMLIntegerReader >> printStream: aStream [ - printStream := aStream -] diff --git a/src/XML-Parser/XMLInternalSubsetList.class.st b/src/XML-Parser/XMLInternalSubsetList.class.st deleted file mode 100644 index f8c96b949..000000000 --- a/src/XML-Parser/XMLInternalSubsetList.class.st +++ /dev/null @@ -1,48 +0,0 @@ -" -This class represents the list of nodes that comprise a document's internal DTD subset. -" -Class { - #name : #XMLInternalSubsetList, - #superclass : #XMLObservableList, - #category : #'XML-Parser-DOM' -} - -{ #category : #private } -XMLInternalSubsetList >> afterAdding: aNode at: anIndex [ - (aNode hasParentWithNodeList: self) - ifTrue: [ - self - removeDuplicateOf: aNode - notAt: anIndex] - ifFalse: [ - observer - ifNotNil: [observer addedNode: aNode]] -] - -{ #category : #private } -XMLInternalSubsetList >> afterAddingLast: aNode [ - (aNode hasParentWithNodeList: self) - ifTrue: [ - self - removeDuplicateOf: aNode - notAt: self size] - ifFalse: [ - observer - ifNotNil: [observer addedNode: aNode]] -] - -{ #category : #private } -XMLInternalSubsetList >> afterAddingToCopyLast: aNode [ - observer - ifNotNil: [observer addedNode: aNode] -] - -{ #category : #private } -XMLInternalSubsetList >> afterRemoving: aNode [ - observer ifNotNil: [observer removedNode: aNode] -] - -{ #category : #sorting } -XMLInternalSubsetList >> sort [ - self sort: [:a :b | a sortKey <= b sortKey] -] diff --git a/src/XML-Parser/XMLInternalSubsetState.class.st b/src/XML-Parser/XMLInternalSubsetState.class.st deleted file mode 100644 index 2d30fac2a..000000000 --- a/src/XML-Parser/XMLInternalSubsetState.class.st +++ /dev/null @@ -1,18 +0,0 @@ -" -A state for internal subset tokens. -" -Class { - #name : #XMLInternalSubsetState, - #superclass : #XMLDoctypeDeclarationState, - #category : #'XML-Parser-Drivers' -} - -{ #category : #testing } -XMLInternalSubsetState >> isInternalSubsetState [ - ^ true -] - -{ #category : #tokenizing } -XMLInternalSubsetState >> nextTokenFrom: aTokenizer [ - ^ aTokenizer nextInternalSubsetToken -] diff --git a/src/XML-Parser/XMLKeyValueCache.class.st b/src/XML-Parser/XMLKeyValueCache.class.st deleted file mode 100644 index 996060c36..000000000 --- a/src/XML-Parser/XMLKeyValueCache.class.st +++ /dev/null @@ -1,278 +0,0 @@ -" -A simple key-value cache that automatically empties when it reaches a maximum size. Uses a reentrant mutex to ensure thread-safety. -" -Class { - #name : #XMLKeyValueCache, - #superclass : #XMLAbstractFactory, - #instVars : [ - 'collection', - 'maxSize', - 'mutex' - ], - #category : #'XML-Parser-Utils' -} - -{ #category : #testing } -XMLKeyValueCache class >> canBeImplemented [ - ^ true -] - -{ #category : #defaults } -XMLKeyValueCache class >> defaultMaxSize [ - ^ 32 -] - -{ #category : #'instance creation' } -XMLKeyValueCache class >> maxSize: anInteger [ - ^ self implementationNew setMaxSize: anInteger -] - -{ #category : #'instance creation' } -XMLKeyValueCache class >> new [ - ^ self maxSize: self defaultMaxSize -] - -{ #category : #finding } -XMLKeyValueCache class >> noSupportedImplementationFound [ - Error signal: 'No supported key-value cache class available' -] - -{ #category : #defaults } -XMLKeyValueCache class >> preferredImplementation [ - ^ XMLStandardKeyValueCache -] - -{ #category : #accessing } -XMLKeyValueCache >> at: aKey [ - ^ self - at: aKey - ifAbsent: [nil] -] - -{ #category : #accessing } -XMLKeyValueCache >> at: aKey ifAbsent: aBlock [ - ^ self critical: [ - self collection - at: aKey - ifAbsent: aBlock] -] - -{ #category : #accessing } -XMLKeyValueCache >> at: aKey ifAbsentPut: aBlock [ - ^ self - at: aKey - ifAbsent: [ - self - at: aKey - put: aBlock value] -] - -{ #category : #accessing } -XMLKeyValueCache >> at: aKey ifPresent: aBlock [ - ^ self critical: [ - "Gemstone's at:ifAbsentPut: does not use cull:" - aBlock cull: - (self collection - at: aKey - ifAbsent: [^ nil])] -] - -{ #category : #accessing } -XMLKeyValueCache >> at: aKey ifPresent: aPresentBlock put: aValueBlock [ - "Looks up the value of aKey and if present, evaluates aPresentBlock - optionally with it, and if aPresentBlock returns true, replaces the old - value with the result of evaluating aValueBlock." - - ^ self - at: aKey - ifPresent: [:value | - (aPresentBlock cull: value) - ifTrue: [ - self - at: aKey - put: aValueBlock value] - ifFalse: [value]] -] - -{ #category : #accessing } -XMLKeyValueCache >> at: aKey put: aValue [ - ^ self critical: [ - (self collection includesKey: aKey) - ifFalse: [ - self collection size >= self maxSize - ifTrue: [self collection removeAll]]. - self collection - at: aKey - put: aValue] -] - -{ #category : #accessing } -XMLKeyValueCache >> capacity [ - ^ self maxSize -] - -{ #category : #clearing } -XMLKeyValueCache >> clear [ - self removeAll -] - -{ #category : #accessing } -XMLKeyValueCache >> collection [ - self subclassResponsibility -] - -{ #category : #defaults } -XMLKeyValueCache >> collectionClass [ - ^ Dictionary -] - -{ #category : #copying } -XMLKeyValueCache >> copy [ - ^ self critical: [self shallowCopy postCopy] -] - -{ #category : #'mutual exclusion' } -XMLKeyValueCache >> critical: aBlock [ - "Can be used to lock the cache during one or more operations in aBlock" - - ^ self mutex critical: aBlock -] - -{ #category : #testing } -XMLKeyValueCache >> includesKey: aKey [ - ^ self critical: [self collection includesKey: aKey] -] - -{ #category : #testing } -XMLKeyValueCache >> isEmpty [ - ^ self size = 0 -] - -{ #category : #accessing } -XMLKeyValueCache >> keys [ - ^ self critical: [self collection keys] -] - -{ #category : #enumerating } -XMLKeyValueCache >> keysAndValuesDo: aTwoArgumentBlock [ - self critical: [self collection keysAndValuesDo: aTwoArgumentBlock] -] - -{ #category : #enumerating } -XMLKeyValueCache >> keysDo: aBlock [ - self critical: [self collection keysDo: aBlock] -] - -{ #category : #accessing } -XMLKeyValueCache >> loadFactor [ - ^ (self size / self maxSize) asFraction -] - -{ #category : #accessing } -XMLKeyValueCache >> maxSize [ - ^ maxSize -] - -{ #category : #accessing } -XMLKeyValueCache >> maxSize: anInteger [ - self critical: [| oldMaxSize | - oldMaxSize := maxSize. - (maxSize := anInteger) < oldMaxSize - ifTrue: [self collection removeAll]] -] - -{ #category : #private } -XMLKeyValueCache >> mutex [ - ^ mutex -] - -{ #category : #testing } -XMLKeyValueCache >> notEmpty [ - ^ self size > 0 -] - -{ #category : #copying } -XMLKeyValueCache >> postCopy [ - super postCopy. - - mutex := XMLReentrantMutex new. - self setCollection: self collection copy. -] - -{ #category : #printing } -XMLKeyValueCache >> printOn: aStream [ - | loadFactor | - - super printOn: aStream. - - loadFactor := self loadFactor. - aStream - nextPut: $(; - print: loadFactor numerator; - nextPut: $/; - print: loadFactor denominator; - nextPut: $). -] - -{ #category : #removing } -XMLKeyValueCache >> removeAll [ - self critical: [self collection removeAll] -] - -{ #category : #removing } -XMLKeyValueCache >> removeKey: aKey [ - "this attempts to remove a key, but to support concurrent removal, it - does not raise errors if it was already removed" - ^ self critical: [ - self collection - removeKey: aKey - ifAbsent: [nil]] -] - -{ #category : #removing } -XMLKeyValueCache >> removeKey: aKey ifAbsent: aBlock [ - ^ self critical: [ - self collection - removeKey: aKey - ifAbsent: aBlock] -] - -{ #category : #removing } -XMLKeyValueCache >> removeKey: aKey ifPresent: aBlock [ - "Looks up the value of aKey and if present, evaluates aPresentBlock - optionally with it, and if aPresentBlock returns true, removes the - key from the cache and returns its old value." - ^ self - at: aKey - ifPresent: [:value | - (aBlock cull: value) - ifTrue: [self removeKey: aKey] - ifFalse: [value]] -] - -{ #category : #initialization } -XMLKeyValueCache >> setCollection: aKeyValueCollection [ - self subclassResponsibility -] - -{ #category : #initialization } -XMLKeyValueCache >> setMaxSize: anInteger [ - maxSize := anInteger. - mutex := XMLReentrantMutex new. - self setCollection: self collectionClass new. -] - -{ #category : #accessing } -XMLKeyValueCache >> size [ - ^ self collection size -] - -{ #category : #accessing } -XMLKeyValueCache >> values [ - ^ self critical: [self collection values] -] - -{ #category : #enumerating } -XMLKeyValueCache >> valuesDo: aBlock [ - self critical: [self collection valuesDo: aBlock] -] diff --git a/src/XML-Parser/XMLLatin1StreamConverter.class.st b/src/XML-Parser/XMLLatin1StreamConverter.class.st deleted file mode 100644 index 641900bac..000000000 --- a/src/XML-Parser/XMLLatin1StreamConverter.class.st +++ /dev/null @@ -1,41 +0,0 @@ -" -A stream converter for ISO Latin-1. -" -Class { - #name : #XMLLatin1StreamConverter, - #superclass : #XMLStatelessStreamConverter, - #category : #'XML-Parser-Streams' -} - -{ #category : #basic } -XMLLatin1StreamConverter class >> basicEncodingNames [ - ^ #('Latin-1' 'Latin1' - 'CP-819' 'CP819' - 'IBM-819' 'IBM819' - 'ISO-8859-1' 'ISO8859-1' 'ISO-88591' 'ISO88591' - 'ISO-IR-100' 'ISOIR-100' 'ISO-IR100' 'ISOIR100' - 'L1' - 'csISOLatin1') -] - -{ #category : #decoding } -XMLLatin1StreamConverter >> nextFromStream: aStream [ - | byte | - - aStream atEnd - ifTrue: [^ nil]. - (byte := aStream next asInteger) > 255 - ifTrue: [self errorBadCharacterValue: byte]. - - ^ byte asCharacter. -] - -{ #category : #encoding } -XMLLatin1StreamConverter >> nextPut: aCharacter toStream: aStream [ - | codePoint | - - (codePoint := aCharacter asInteger) > 255 - ifTrue: [self errorBadCharacterValue: codePoint]. - - aStream nextPut: codePoint. -] diff --git a/src/XML-Parser/XMLLazyAttributeDictionary.class.st b/src/XML-Parser/XMLLazyAttributeDictionary.class.st deleted file mode 100644 index d0c27d3a0..000000000 --- a/src/XML-Parser/XMLLazyAttributeDictionary.class.st +++ /dev/null @@ -1,510 +0,0 @@ -" -A lazy version of XMLAttributeDictionary that uses less memory until it's modified. -" -Class { - #name : #XMLLazyAttributeDictionary, - #superclass : #Collection, - #instVars : [ - 'attributeDictionary' - ], - #classInstVars : [ - 'emptyAttributeDictionary' - ], - #category : #'XML-Parser' -} - -{ #category : #private } -XMLLazyAttributeDictionary class >> emptyAttributeDictionary [ - ^ emptyAttributeDictionary -] - -{ #category : #private } -XMLLazyAttributeDictionary class >> emptyAttributeDictionaryClass [ - ^ XMLAttributeDictionary -] - -{ #category : #'class initialization' } -XMLLazyAttributeDictionary class >> initialize [ - "self initialize" - - self initializeEmptyAttributeDictionary -] - -{ #category : #'class initialization' } -XMLLazyAttributeDictionary class >> initializeEmptyAttributeDictionary [ - "explictly initialized class inst vars are used for the empty - dictionaries to simplify class initialization (on GS) and to - speed up lazy dictionary instance creation" - emptyAttributeDictionary := self emptyAttributeDictionaryClass new -] - -{ #category : #'instance creation' } -XMLLazyAttributeDictionary class >> new [ - ^ self basicNew setAttributeDictionary: emptyAttributeDictionary -] - -{ #category : #'instance creation' } -XMLLazyAttributeDictionary class >> new: aCapacity [ - ^ self new -] - -{ #category : #'instance creation' } -XMLLazyAttributeDictionary class >> newFrom: anAssociationCollection [ - ^ self basicNew setAttributeDictionary: - (self emptyAttributeDictionaryClass newFrom: - anAssociationCollection) -] - -{ #category : #'instance creation' } -XMLLazyAttributeDictionary class >> newFromPairs: aSequenceableCollection [ - ^ self basicNew setAttributeDictionary: - (self emptyAttributeDictionaryClass newFromPairs: - aSequenceableCollection) -] - -{ #category : #comparing } -XMLLazyAttributeDictionary >> = anObject [ - ^ attributeDictionary = anObject -] - -{ #category : #adding } -XMLLazyAttributeDictionary >> add: anAssociation [ - ^ self copiedAttributeDictionary add: anAssociation -] - -{ #category : #adding } -XMLLazyAttributeDictionary >> addAll: anAssociationCollection [ - ^ self copiedAttributeDictionary addAll: anAssociationCollection -] - -{ #category : #converting } -XMLLazyAttributeDictionary >> asXMLAttributeDictionary [ - ^ self -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> associationAt: aKey [ - ^ attributeDictionary associationAt: aKey -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> associationAt: aKey ifAbsent: aBlock [ - ^ attributeDictionary - associationAt: aKey - ifAbsent: aBlock -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> associationAt: aKey ifPresent: aBlock [ - ^ attributeDictionary - associationAt: aKey - ifPresent: aBlock -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> associationAtName: aQualifiedOrLocalName [ - ^ attributeDictionary associationAtName: aQualifiedOrLocalName -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> associationAtName: aKey ifAbsent: aBlock [ - ^ attributeDictionary - associationAtName: aKey - ifAbsent: aBlock -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> associationAtName: aQualifiedOrLocalName namespaceURI: aURI [ - ^ attributeDictionary - associationAtName: aQualifiedOrLocalName - namespaceURI: aURI -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> associationAtName: aKey namespaceURI: aURI ifAbsent: aBlock [ - ^ attributeDictionary - associationAtName: aKey - namespaceURI: aURI - ifAbsent: aBlock -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> associations [ - ^ attributeDictionary associations -] - -{ #category : #enumerating } -XMLLazyAttributeDictionary >> associationsDo: aBlock [ - attributeDictionary associationsDo: aBlock -] - -{ #category : #enumerating } -XMLLazyAttributeDictionary >> associationsSelect: aBlock [ - ^ self copyEmpty setAttributeDictionary: - (attributeDictionary associationsSelect: aBlock) -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> at: aKey [ - ^ attributeDictionary at: aKey -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> at: aKey ifAbsent: aBlock [ - ^ attributeDictionary - at: aKey - ifAbsent: aBlock -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> at: aKey ifAbsentPut: aBlock [ - ^ self copiedAttributeDictionary - at: aKey - ifAbsentPut: aBlock -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> at: aKey ifPresent: aBlock [ - ^ attributeDictionary - at: aKey - ifPresent: aBlock -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> at: aKey ifPresent: aPresentBlock ifAbsent: anAbsentBlock [ - ^ attributeDictionary - at: aKey - ifPresent: aPresentBlock - ifAbsent: anAbsentBlock -] - -{ #category : #private } -XMLLazyAttributeDictionary >> at: aKey newPut: aValue [ - "added to be consistent with XMLAttributeDictionary, - but it shouldn't be needed" - ^ self copiedAttributeDictionary - at: aKey - newPut: aValue -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> at: aKey put: aValue [ - ^ self copiedAttributeDictionary - at: aKey - put: aValue -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> atName: aQualifiedOrLocalName [ - ^ attributeDictionary atName: aQualifiedOrLocalName -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> atName: aQualifiedOrLocalName ifAbsent: aBlock [ - ^ attributeDictionary - atName: aQualifiedOrLocalName - ifAbsent: aBlock -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> atName: aQualifiedOrLocalName namespaceURI: aURI [ - ^ attributeDictionary - atName: aQualifiedOrLocalName - namespaceURI: aURI -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> atName: aQualifiedOrLocalName namespaceURI: aURI ifAbsent: aBlock [ - ^ attributeDictionary - atName: aQualifiedOrLocalName - namespaceURI: aURI - ifAbsent: aBlock -] - -{ #category : #private } -XMLLazyAttributeDictionary >> attributeDictionary [ - ^ attributeDictionary -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> capacity [ - ^ attributeDictionary capacity -] - -{ #category : #enumerating } -XMLLazyAttributeDictionary >> collect: aBlock [ - ^ self copyEmpty setAttributeDictionary: - (attributeDictionary collect: aBlock) -] - -{ #category : #private } -XMLLazyAttributeDictionary >> copiedAttributeDictionary [ - "replaces the shared, empty order-preserving dictionary with a new - mutable one ready for modification" - ^ attributeDictionary == self emptyAttributeDictionary - ifTrue: [attributeDictionary := self copyEmptyAttributeDictionary] - ifFalse: [attributeDictionary] -] - -{ #category : #copying } -XMLLazyAttributeDictionary >> copyEmpty [ - "Squeak and GS don't have Collection>>#copyEmpty, so it is - reimplemented for portability" - ^ self species new -] - -{ #category : #private } -XMLLazyAttributeDictionary >> copyEmptyAttributeDictionary [ - ^ attributeDictionary copy -] - -{ #category : #private } -XMLLazyAttributeDictionary >> dictionary [ - ^ attributeDictionary dictionary -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> dictionaryClass [ - ^ attributeDictionary dictionaryClass -] - -{ #category : #enumerating } -XMLLazyAttributeDictionary >> do: aBlock [ - attributeDictionary do: aBlock -] - -{ #category : #private } -XMLLazyAttributeDictionary >> emptyAttributeDictionary [ - ^ self class emptyAttributeDictionary -] - -{ #category : #comparing } -XMLLazyAttributeDictionary >> hash [ - ^ attributeDictionary hash -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> identityIndexOfKey: aKey [ - ^ attributeDictionary identityIndexOfKey: aKey -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> identityIndexOfKey: aKey ifAbsent: aBlock [ - ^ attributeDictionary - identityIndexOfKey: aKey - ifAbsent: aBlock -] - -{ #category : #testing } -XMLLazyAttributeDictionary >> includesAssociation: anAssociation [ - ^ attributeDictionary includesAssociation: anAssociation -] - -{ #category : #testing } -XMLLazyAttributeDictionary >> includesIdentity: anObject [ - ^ attributeDictionary includesIdentity: anObject -] - -{ #category : #testing } -XMLLazyAttributeDictionary >> includesKey: aKey [ - ^ attributeDictionary includesKey: aKey -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> indexOfKey: aKey [ - ^ attributeDictionary indexOfKey: aKey -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> indexOfKey: aKey ifAbsent: aBlock [ - ^ attributeDictionary - indexOfKey: aKey - ifAbsent: aBlock -] - -{ #category : #testing } -XMLLazyAttributeDictionary >> isDictionary [ - ^ true -] - -{ #category : #testing } -XMLLazyAttributeDictionary >> isEmpty [ - "Squeak's Collection>>#isEmpty is inefficient" - ^ attributeDictionary isEmpty -] - -{ #category : #testing } -XMLLazyAttributeDictionary >> isIdentityDictionary [ - ^ attributeDictionary isIdentityDictionary -] - -{ #category : #testing } -XMLLazyAttributeDictionary >> isOrderPreservingDictionary [ - ^ true -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> keyAtIdentityValue: aValue [ - ^ attributeDictionary keyAtIdentityValue: aValue -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> keyAtIdentityValue: aValue ifAbsent: aBlock [ - ^ attributeDictionary - keyAtIdentityValue: aValue - ifAbsent: aBlock -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> keyAtIndex: anIndex [ - ^ attributeDictionary keyAtIndex: anIndex -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> keyAtIndex: anIndex ifAbsent: aBlock [ - ^ attributeDictionary - keyAtIndex: anIndex - ifAbsent: aBlock -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> keyAtValue: anObject [ - ^ attributeDictionary keyAtValue: anObject -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> keyAtValue: anObject ifAbsent: aBlock [ - ^ attributeDictionary - keyAtValue: anObject - ifAbsent: aBlock -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> keyForIdentity: anObject [ - ^ attributeDictionary keyForIdentity: anObject -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> keys [ - ^ attributeDictionary keys -] - -{ #category : #enumerating } -XMLLazyAttributeDictionary >> keysAndValuesDo: aBlock [ - attributeDictionary keysAndValuesDo: aBlock -] - -{ #category : #removing } -XMLLazyAttributeDictionary >> keysAndValuesRemove: aTwoArgumentBlock [ - self copiedAttributeDictionary keysAndValuesRemove: aTwoArgumentBlock -] - -{ #category : #enumerating } -XMLLazyAttributeDictionary >> keysDo: aBlock [ - attributeDictionary keysDo: aBlock -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> keysSortedSafely [ - ^ attributeDictionary keysSortedSafely -] - -{ #category : #private } -XMLLazyAttributeDictionary >> namespaceScope [ - ^ attributeDictionary namespaceScope -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> namespaceURIOf: aKey [ - ^ attributeDictionary namespaceURIOf: aKey -] - -{ #category : #private } -XMLLazyAttributeDictionary >> orderedKeys [ - ^ attributeDictionary orderedKeys -] - -{ #category : #copying } -XMLLazyAttributeDictionary >> postCopy [ - attributeDictionary == self emptyAttributeDictionary - ifFalse: [attributeDictionary := attributeDictionary copy] -] - -{ #category : #printing } -XMLLazyAttributeDictionary >> printElementsOn: aStream [ - attributeDictionary printElementsOn: aStream -] - -{ #category : #removing } -XMLLazyAttributeDictionary >> remove: anObject ifAbsent: aBlock [ - self shouldNotImplement -] - -{ #category : #removing } -XMLLazyAttributeDictionary >> removeAll [ - attributeDictionary := self emptyAttributeDictionary -] - -{ #category : #removing } -XMLLazyAttributeDictionary >> removeKey: aKey [ - ^ self copiedAttributeDictionary removeKey: aKey -] - -{ #category : #removing } -XMLLazyAttributeDictionary >> removeKey: aKey ifAbsent: aBlock [ - ^ self copiedAttributeDictionary - removeKey: aKey - ifAbsent: aBlock -] - -{ #category : #removing } -XMLLazyAttributeDictionary >> removeKeys: aKeyCollection [ - self copiedAttributeDictionary removeKeys: aKeyCollection -] - -{ #category : #private } -XMLLazyAttributeDictionary >> resolvePrefix: aPrefix [ - ^ attributeDictionary resolvePrefix: aPrefix -] - -{ #category : #private } -XMLLazyAttributeDictionary >> resolvePrefix: aPrefix ifUnresolvable: aBlock [ - ^ attributeDictionary - resolvePrefix: aPrefix - ifUnresolvable: aBlock -] - -{ #category : #enumerating } -XMLLazyAttributeDictionary >> select: aBlock [ - ^ self copyEmpty setAttributeDictionary: - (attributeDictionary select: aBlock) -] - -{ #category : #initialization } -XMLLazyAttributeDictionary >> setAttributeDictionary: anAttributeDictionary [ - attributeDictionary := anAttributeDictionary -] - -{ #category : #initialization } -XMLLazyAttributeDictionary >> setNamespaceScope: aNamespaceScope [ -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> size [ - ^ attributeDictionary size -] - -{ #category : #testing } -XMLLazyAttributeDictionary >> usesNamespaces [ - ^ attributeDictionary usesNamespaces -] - -{ #category : #accessing } -XMLLazyAttributeDictionary >> values [ - ^ attributeDictionary values -] - -{ #category : #enumerating } -XMLLazyAttributeDictionary >> valuesDo: aBlock [ - attributeDictionary valuesDo: aBlock -] diff --git a/src/XML-Parser/XMLLazyNamespacedAttributeDictionary.class.st b/src/XML-Parser/XMLLazyNamespacedAttributeDictionary.class.st deleted file mode 100644 index a07c4e550..000000000 --- a/src/XML-Parser/XMLLazyNamespacedAttributeDictionary.class.st +++ /dev/null @@ -1,43 +0,0 @@ -" -A lazy version of XMLNamespacedAttributeDictionary that uses less memory until it's modified. -" -Class { - #name : #XMLLazyNamespacedAttributeDictionary, - #superclass : #XMLLazyAttributeDictionary, - #instVars : [ - 'namespaceScope' - ], - #category : #'XML-Parser' -} - -{ #category : #private } -XMLLazyNamespacedAttributeDictionary class >> emptyAttributeDictionaryClass [ - ^ XMLNamespacedAttributeDictionary -] - -{ #category : #'class initialization' } -XMLLazyNamespacedAttributeDictionary class >> initialize [ - "self initialize" - - self initializeEmptyAttributeDictionary -] - -{ #category : #private } -XMLLazyNamespacedAttributeDictionary >> copyEmptyAttributeDictionary [ - ^ super copyEmptyAttributeDictionary setNamespaceScope: self namespaceScope -] - -{ #category : #private } -XMLLazyNamespacedAttributeDictionary >> namespaceScope [ - ^ namespaceScope - ifNil: [ - namespaceScope := - attributeDictionary == self emptyAttributeDictionary - ifTrue: [XMLNamespaceScope new] - ifFalse: [attributeDictionary namespaceScope]] -] - -{ #category : #initialization } -XMLLazyNamespacedAttributeDictionary >> setNamespaceScope: aNamespaceScope [ - namespaceScope := aNamespaceScope -] diff --git a/src/XML-Parser/XMLLimitException.class.st b/src/XML-Parser/XMLLimitException.class.st deleted file mode 100644 index 3b214db87..000000000 --- a/src/XML-Parser/XMLLimitException.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -Invoked when a security limit on input is exceeded. Use the messages in XMLParserLimits and DTDExternalEntityLimits to configure these limits or the removeLimits message to remove them completely. -" -Class { - #name : #XMLLimitException, - #superclass : #XMLParserException, - #category : #'XML-Parser-Exceptions' -} diff --git a/src/XML-Parser/XMLLimitedReadStreamAdapter.class.st b/src/XML-Parser/XMLLimitedReadStreamAdapter.class.st deleted file mode 100644 index 8fe5d159f..000000000 --- a/src/XML-Parser/XMLLimitedReadStreamAdapter.class.st +++ /dev/null @@ -1,91 +0,0 @@ -" -This class is a limited read stream adapter that will not read beyond a limit. Position changes are limited so you can only move forward as many positions as the limit allows, and moving backwards increases the number of objects that can be read. -" -Class { - #name : #XMLLimitedReadStreamAdapter, - #superclass : #XMLReadStreamAdapter, - #instVars : [ - 'limit' - ], - #category : #'XML-Parser-Streams' -} - -{ #category : #accessing } -XMLLimitedReadStreamAdapter class >> defaultLimit [ - ^ 1014 -] - -{ #category : #'instance creation' } -XMLLimitedReadStreamAdapter class >> on: aStream [ - ^ self - on: aStream - limit: self defaultLimit -] - -{ #category : #'instance creation' } -XMLLimitedReadStreamAdapter class >> on: aStream limit: aLimit [ - ^ (self basicOn: aStream) - limit: aLimit -] - -{ #category : #testing } -XMLLimitedReadStreamAdapter >> atEnd [ - ^ stream atEnd - or: [limit <= 0] -] - -{ #category : #testing } -XMLLimitedReadStreamAdapter >> atLimitedEnd [ - ^ limit <= 0 - and: [stream atEnd not] -] - -{ #category : #accessing } -XMLLimitedReadStreamAdapter >> limit [ - ^ limit -] - -{ #category : #accessing } -XMLLimitedReadStreamAdapter >> limit: anInteger [ - limit := anInteger -] - -{ #category : #accessing } -XMLLimitedReadStreamAdapter >> next [ - (stream atEnd - or: [limit <= 0]) - ifTrue: [^ nil] - ifFalse: [ - limit := limit - 1. - ^ stream next] -] - -{ #category : #accessing } -XMLLimitedReadStreamAdapter >> peek [ - (stream atEnd - or: [limit <= 0]) - ifTrue: [^ nil] - ifFalse: [^ stream peek] -] - -{ #category : #positioning } -XMLLimitedReadStreamAdapter >> position: anInteger [ - | netPosition | - - (netPosition := anInteger - stream position) > limit - ifTrue: [ - "skip as far ahead as allowed" - self skip: limit] - ifFalse: [ - limit := (limit - netPosition) max: 0. - stream position: anInteger] -] - -{ #category : #positioning } -XMLLimitedReadStreamAdapter >> reset [ - | oldPosition | - - oldPosition := stream position. - stream reset. - limit := limit + (oldPosition - stream position). -] diff --git a/src/XML-Parser/XMLMixedContentElementValidator.class.st b/src/XML-Parser/XMLMixedContentElementValidator.class.st deleted file mode 100644 index 5dfcabd6b..000000000 --- a/src/XML-Parser/XMLMixedContentElementValidator.class.st +++ /dev/null @@ -1,74 +0,0 @@ -" -This class validates elements that can contain a mix of PCDATA and certain elements. -" -Class { - #name : #XMLMixedContentElementValidator, - #superclass : #XMLElementValidator, - #instVars : [ - 'allowedContent' - ], - #category : #'XML-Parser-Validation' -} - -{ #category : #'instance creation' } -XMLMixedContentElementValidator class >> element: anElement allowedContent: anAllowedContentCollection [ - ^ self new - setElement: anElement - allowedContent: anAllowedContentCollection -] - -{ #category : #accessing } -XMLMixedContentElementValidator >> allowedContent [ - ^ allowedContent -] - -{ #category : #accessing } -XMLMixedContentElementValidator >> allowedContent: anAllowedContentCollection [ - allowedContent := anAllowedContentCollection -] - -{ #category : #testing } -XMLMixedContentElementValidator >> atEnd [ - ^ true -] - -{ #category : #private } -XMLMixedContentElementValidator >> errorContentContainsDuplicates [ - XMLValidationException - formatSignal: - 'Declaration for mixed content element <{1}> contains duplicate names' - with: self element -] - -{ #category : #testing } -XMLMixedContentElementValidator >> isMixedContent [ - ^ true -] - -{ #category : #initialization } -XMLMixedContentElementValidator >> setElement: anElement allowedContent: anAllowedContentCollection [ - element := anElement. - allowedContent := anAllowedContentCollection. -] - -{ #category : #defaults } -XMLMixedContentElementValidator >> typeName [ - ^ 'mixed content' -] - -{ #category : #validating } -XMLMixedContentElementValidator >> validateElementDeclaration [ - | oldAllowedContentCollection | - - oldAllowedContentCollection := self allowedContent. - self allowedContent: oldAllowedContentCollection asSet. - (self allowedContent size < oldAllowedContentCollection size) - ifTrue: [self errorContentContainsDuplicates]. -] - -{ #category : #validating } -XMLMixedContentElementValidator >> validateStartTag: anElement [ - (self allowedContent includes: anElement) - ifFalse: [self errorUnexpectedElement: anElement] - -] diff --git a/src/XML-Parser/XMLMutatingNodeVisitor.class.st b/src/XML-Parser/XMLMutatingNodeVisitor.class.st deleted file mode 100644 index b5aad1040..000000000 --- a/src/XML-Parser/XMLMutatingNodeVisitor.class.st +++ /dev/null @@ -1,35 +0,0 @@ -" -This is a mutating node visitor that can remove nodes during enumeration by returning nil from a #visit* method, or replace a node by returning a new node other than the argument. -" -Class { - #name : #XMLMutatingNodeVisitor, - #superclass : #XMLNodeVisitor, - #category : #'XML-Parser-DOM' -} - -{ #category : #visiting } -XMLMutatingNodeVisitor >> visitNodeWithElements: aNodeWithElements [ - aNodeWithElements hasChildren - ifTrue: [| oldNodes nodeIndexesToRemove | - oldNodes := aNodeWithElements nodes. - 1 to: oldNodes size do: [:i | | oldNode newNode | - oldNode := oldNodes at: i. - (newNode := oldNode acceptNodeVisitor: self) = oldNode - ifFalse: [ - newNode - ifNil: [ - "only initialize if needed" - (nodeIndexesToRemove - ifNil: [nodeIndexesToRemove := OrderedCollection new]) - addLast: i] - ifNotNil: [ - "replace it" - oldNodes - at: i - put: newNode]]]. - nodeIndexesToRemove - ifNotNil: [ - nodeIndexesToRemove reverseDo: [:i | - oldNodes removeAt: i]]]. - ^ aNodeWithElements. -] diff --git a/src/XML-Parser/XMLNFAAcceptingState.class.st b/src/XML-Parser/XMLNFAAcceptingState.class.st deleted file mode 100644 index e676310a4..000000000 --- a/src/XML-Parser/XMLNFAAcceptingState.class.st +++ /dev/null @@ -1,22 +0,0 @@ -" -An NFA in this state is considered to accept the input. -" -Class { - #name : #XMLNFAAcceptingState, - #superclass : #XMLNFAState, - #category : #'XML-Parser-Validation-DFA' -} - -{ #category : #testing } -XMLNFAAcceptingState >> isAccepting [ - ^ true -] - -{ #category : #printing } -XMLNFAAcceptingState >> printOn: aStream [ - super printOn: aStream. - - aStream nextPut: $(. - self printLabelOn: aStream. - aStream nextPut: $). -] diff --git a/src/XML-Parser/XMLNFABranchingState.class.st b/src/XML-Parser/XMLNFABranchingState.class.st deleted file mode 100644 index d87f15954..000000000 --- a/src/XML-Parser/XMLNFABranchingState.class.st +++ /dev/null @@ -1,92 +0,0 @@ -" -This state can branch off into two different states without matching against anything. -" -Class { - #name : #XMLNFABranchingState, - #superclass : #XMLNFAState, - #instVars : [ - 'leftBranch', - 'rightBranch' - ], - #category : #'XML-Parser-Validation-DFA' -} - -{ #category : #'instance creation' } -XMLNFABranchingState class >> branch: aLeftBranch [ - ^ self new - setLeftBranch: aLeftBranch - rightBranch: nil -] - -{ #category : #'instance creation' } -XMLNFABranchingState class >> leftBranch: aLeftBranch rightBranch: aRightBranch [ - ^ self new - setLeftBranch: aLeftBranch - rightBranch: aRightBranch -] - -{ #category : #adding } -XMLNFABranchingState >> addTo: aStateSet [ - lastAddedTo == aStateSet - ifFalse: [ - "to detect and handle cycles" - lastAddedTo := aStateSet. - - "this is effectively a non-matching, non-accepting state - with epsilon transitions, so it can be skipped and its - branches can be followed (in other words, the epsilon - closure of this state, minus this state)" - leftBranch - ifNotNil: [leftBranch addTo: aStateSet]. - rightBranch - ifNotNil: [rightBranch addTo: aStateSet]] -] - -{ #category : #connecting } -XMLNFABranchingState >> connectToState: aState [ - leftBranch - ifNil: [leftBranch := aState]. - rightBranch - ifNil: [rightBranch := aState]. -] - -{ #category : #accessing } -XMLNFABranchingState >> leftBranch [ - ^ leftBranch -] - -{ #category : #enumerating } -XMLNFABranchingState >> nextStatesDo: aBlock [ - leftBranch - ifNotNil: [aBlock value: leftBranch]. - rightBranch - ifNotNil: [aBlock value: rightBranch]. -] - -{ #category : #printing } -XMLNFABranchingState >> printOn: aStream [ - super printOn: aStream. - - aStream nextPut: $(. - self printLabelOn: aStream. - aStream nextPut: $(. - leftBranch - ifNotNil: [ - leftBranch printLabelOn: aStream]. - aStream nextPut: $|. - rightBranch - ifNotNil: [ - rightBranch printLabelOn: aStream]. - aStream nextPutAll: '))'. -] - -{ #category : #accessing } -XMLNFABranchingState >> rightBranch [ - ^ rightBranch -] - -{ #category : #initialization } -XMLNFABranchingState >> setLeftBranch: aLeftBranch rightBranch: aRightBranch [ - leftBranch := aLeftBranch. - rightBranch := aRightBranch. -] diff --git a/src/XML-Parser/XMLNFABuilder.class.st b/src/XML-Parser/XMLNFABuilder.class.st deleted file mode 100644 index 95fc9f2b6..000000000 --- a/src/XML-Parser/XMLNFABuilder.class.st +++ /dev/null @@ -1,144 +0,0 @@ -" -This class builds an NFA using a stack of NFAFragments. -" -Class { - #name : #XMLNFABuilder, - #superclass : #Object, - #instVars : [ - 'fragmentStack' - ], - #category : #'XML-Parser-Validation-DFA' -} - -{ #category : #applying } -XMLNFABuilder >> applyAccepting [ - | totalFragments | - - (totalFragments := self totalFragments) > 0 - ifTrue: [ - 1 to: totalFragments - 1 do: [:i | - self applyConcatenation]. - self topFragment connectToState: - XMLNFAAcceptingState new] - ifFalse: [ - self pushFragment: - (XMLNFAFragment firstState: XMLNFAAcceptingState new)] -] - -{ #category : #applying } -XMLNFABuilder >> applyBranch [ - | leftFragment rightFragment branchState | - - leftFragment := self popFragment. - rightFragment := self popFragment. - branchState := - XMLNFABranchingState - leftBranch: leftFragment firstState - rightBranch: rightFragment firstState. - - self pushFragment: - (XMLNFAFragment - firstState: branchState - terminalStates: - (leftFragment terminalStatesWithAllFrom: rightFragment)). -] - -{ #category : #applying } -XMLNFABuilder >> applyConcatenation [ - | firstFragment secondFragment | - - secondFragment := self popFragment. - firstFragment := self popFragment. - firstFragment connectToFragment: secondFragment. - - self pushFragment: firstFragment. -] - -{ #category : #applying } -XMLNFABuilder >> applyOptional [ - | optionalFragment branchingState | - - optionalFragment := self popFragment. - branchingState := - XMLNFABranchingState branch: optionalFragment firstState. - - self pushFragment: - (XMLNFAFragment - firstState: branchingState - terminalStates: - (optionalFragment terminalStatesWith: branchingState)) -] - -{ #category : #applying } -XMLNFABuilder >> applyPlus [ - | plusFragment | - - plusFragment := self topFragment. - plusFragment connectToState: - (XMLNFABranchingState branch: plusFragment firstState). -] - -{ #category : #applying } -XMLNFABuilder >> applyStar [ - | branchState starFragment | - - starFragment := self popFragment. - branchState := XMLNFABranchingState branch: starFragment firstState. - starFragment connectToState: branchState. - - self pushFragment: - (XMLNFAFragment - firstState: branchState - terminalState: branchState). -] - -{ #category : #converting } -XMLNFABuilder >> asAcceptingNFA [ - ^ (self - applyAccepting; - popFragment) firstState -] - -{ #category : #private } -XMLNFABuilder >> fragmentStack [ - ^ fragmentStack -] - -{ #category : #testing } -XMLNFABuilder >> hasFragments [ - ^ self totalFragments > 0 -] - -{ #category : #initialization } -XMLNFABuilder >> initialize [ - super initialize. - - fragmentStack := OrderedCollection new. -] - -{ #category : #accessing } -XMLNFABuilder >> popFragment [ - ^ self fragmentStack removeLast -] - -{ #category : #accessing } -XMLNFABuilder >> pushFragment: aFragment [ - ^ self fragmentStack addLast: aFragment -] - -{ #category : #accessing } -XMLNFABuilder >> pushFragmentMatching: aMatcher [ - ^ self pushFragment: - (XMLNFAFragment firstState: - (XMLNFAMatchingState matcher: aMatcher)) -] - -{ #category : #accessing } -XMLNFABuilder >> topFragment [ - ^ self fragmentStack last -] - -{ #category : #accessing } -XMLNFABuilder >> totalFragments [ - ^ self fragmentStack size -] diff --git a/src/XML-Parser/XMLNFAFragment.class.st b/src/XML-Parser/XMLNFAFragment.class.st deleted file mode 100644 index 7393e78de..000000000 --- a/src/XML-Parser/XMLNFAFragment.class.st +++ /dev/null @@ -1,136 +0,0 @@ -" -This class implements NFA fragments for an XMLNFABuilder. It stores a first state and either a single terminal state or a collection of terminal states (using an OrderedCollection instead of an XMLNFAStateSet), and it can be connected to a state or another fragment. -" -Class { - #name : #XMLNFAFragment, - #superclass : #Object, - #instVars : [ - 'firstState', - 'terminalStateOrStates' - ], - #category : #'XML-Parser-Validation-DFA' -} - -{ #category : #'instance creation' } -XMLNFAFragment class >> firstState: aFirstState [ - ^ self new - setFirstState: aFirstState - terminalStateOrStates: aFirstState -] - -{ #category : #'instance creation' } -XMLNFAFragment class >> firstState: aFirstState terminalState: aTerminalState [ - ^ self new - setFirstState: aFirstState - terminalStateOrStates: aTerminalState -] - -{ #category : #'instance creation' } -XMLNFAFragment class >> firstState: aFirstState terminalStates: aTerminalStateCollection [ - ^ self new - setFirstState: aFirstState - terminalStateOrStates: aTerminalStateCollection -] - -{ #category : #private } -XMLNFAFragment >> connectTerminalStatesToState: aState [ - terminalStateOrStates isCollection - ifTrue: [ - "use #to:do: for speed" - 1 to: terminalStateOrStates size do: [:i | - (terminalStateOrStates at: i) connectToState: aState]] - ifFalse: [terminalStateOrStates connectToState: aState] -] - -{ #category : #connecting } -XMLNFAFragment >> connectToFragment: aFragment [ - self connectTerminalStatesToState: aFragment firstState. - terminalStateOrStates := aFragment terminalStateOrStates. -] - -{ #category : #connecting } -XMLNFAFragment >> connectToState: aState [ - self connectTerminalStatesToState: aState. - terminalStateOrStates := aState. -] - -{ #category : #accessing } -XMLNFAFragment >> firstState [ - ^ firstState -] - -{ #category : #accessing } -XMLNFAFragment >> firstState: aFirstState [ - firstState := aFirstState -] - -{ #category : #private } -XMLNFAFragment >> newTerminalStatesWith: aFirstTerminalState and: aSecondTerminalState [ - "avoid #with:with: to control the capacity" - ^ (OrderedCollection new: 4) - addLast: aFirstTerminalState; - addLast: aSecondTerminalState; - yourself -] - -{ #category : #initialization } -XMLNFAFragment >> setFirstState: aFirstState terminalStateOrStates: aTerminalStateOrStateCollection [ - firstState := aFirstState. - terminalStateOrStates := aTerminalStateOrStateCollection. -] - -{ #category : #accessing } -XMLNFAFragment >> terminalState: aTerminalState [ - terminalStateOrStates := aTerminalState -] - -{ #category : #private } -XMLNFAFragment >> terminalStateOrStates [ - ^ terminalStateOrStates -] - -{ #category : #accessing } -XMLNFAFragment >> terminalStates [ - ^ terminalStateOrStates isCollection - ifTrue: [terminalStateOrStates] - ifFalse: [OrderedCollection with: terminalStateOrStates] -] - -{ #category : #accessing } -XMLNFAFragment >> terminalStates: aTerminalStateCollection [ - terminalStateOrStates := aTerminalStateCollection -] - -{ #category : #private } -XMLNFAFragment >> terminalStatesAddedTo: aTerminalStateCollection [ - terminalStateOrStates isCollection - ifTrue: [ - "#to:do: for speed" - 1 to: terminalStateOrStates size do: [:i | - aTerminalStateCollection addLast: (terminalStateOrStates at: i)]] - ifFalse: [aTerminalStateCollection addLast: terminalStateOrStates]. - ^ aTerminalStateCollection. -] - -{ #category : #converting } -XMLNFAFragment >> terminalStatesWith: aTerminalState [ - terminalStateOrStates isCollection - ifTrue: [ - terminalStateOrStates addLast: aTerminalState. - ^ terminalStateOrStates] - ifFalse: [ - ^ self - newTerminalStatesWith: terminalStateOrStates - and: aTerminalState] -] - -{ #category : #converting } -XMLNFAFragment >> terminalStatesWithAllFrom: aFragment [ - terminalStateOrStates isCollection - ifTrue: [^ aFragment terminalStatesAddedTo: terminalStateOrStates]. - aFragment terminalStateOrStates isCollection - ifTrue: [^ self terminalStatesAddedTo: aFragment terminalStateOrStates]. - ^ self - newTerminalStatesWith: terminalStateOrStates - and: aFragment terminalStateOrStates. -] diff --git a/src/XML-Parser/XMLNFAMatchingState.class.st b/src/XML-Parser/XMLNFAMatchingState.class.st deleted file mode 100644 index e7c61a67f..000000000 --- a/src/XML-Parser/XMLNFAMatchingState.class.st +++ /dev/null @@ -1,71 +0,0 @@ -" -This state can pass to a next state if the input matches against an object. -" -Class { - #name : #XMLNFAMatchingState, - #superclass : #XMLNFAState, - #instVars : [ - 'matcher', - 'nextState' - ], - #category : #'XML-Parser-Validation-DFA' -} - -{ #category : #'instance creation' } -XMLNFAMatchingState class >> matcher: aMatcher [ - ^ self new matcher: aMatcher -] - -{ #category : #connecting } -XMLNFAMatchingState >> connectToState: aState [ - nextState - ifNil: [nextState := aState] -] - -{ #category : #accessing } -XMLNFAMatchingState >> matcher [ - ^ matcher -] - -{ #category : #accessing } -XMLNFAMatchingState >> matcher: aMatcher [ - matcher := aMatcher -] - -{ #category : #testing } -XMLNFAMatchingState >> matches: anObject [ - ^ matcher = anObject -] - -{ #category : #accessing } -XMLNFAMatchingState >> nextState [ - ^ nextState -] - -{ #category : #enumerating } -XMLNFAMatchingState >> nextStatesDo: aBlock [ - nextState - ifNotNil: [aBlock value: nextState] -] - -{ #category : #printing } -XMLNFAMatchingState >> printLabelOn: aStream [ - aStream - print: self identityHash; - nextPut: $(; - print: matcher; - nextPut: $) -] - -{ #category : #printing } -XMLNFAMatchingState >> printOn: aStream [ - super printOn: aStream. - - aStream nextPut: $(. - self printLabelOn: aStream. - aStream nextPutAll: '->'. - nextState - ifNotNil: [ - nextState printLabelOn: aStream]. - aStream nextPut: $). -] diff --git a/src/XML-Parser/XMLNFAState.class.st b/src/XML-Parser/XMLNFAState.class.st deleted file mode 100644 index edcea6c92..000000000 --- a/src/XML-Parser/XMLNFAState.class.st +++ /dev/null @@ -1,53 +0,0 @@ -" -This is a base class for NFA states. -" -Class { - #name : #XMLNFAState, - #superclass : #Object, - #instVars : [ - 'lastAddedTo' - ], - #category : #'XML-Parser-Validation-DFA' -} - -{ #category : #adding } -XMLNFAState >> addTo: aStateSet [ - lastAddedTo == aStateSet - ifFalse: [ - "to detect and handle cycles" - lastAddedTo := aStateSet. - - aStateSet add: self] -] - -{ #category : #converting } -XMLNFAState >> asDFAState [ - | nfaStates | - - nfaStates := XMLNFAStateSet new. - self addTo: nfaStates. - ^ nfaStates asDFAState. -] - -{ #category : #connecting } -XMLNFAState >> connectToState: aState [ -] - -{ #category : #testing } -XMLNFAState >> isAccepting [ - ^ false -] - -{ #category : #testing } -XMLNFAState >> matches: anObject [ - ^ false -] - -{ #category : #enumerating } -XMLNFAState >> nextStatesDo: aBlock [ -] - -{ #category : #printing } -XMLNFAState >> printLabelOn: aStream [ - aStream print: self identityHash -] diff --git a/src/XML-Parser/XMLNFAStateSet.class.st b/src/XML-Parser/XMLNFAStateSet.class.st deleted file mode 100644 index 5f0ca116f..000000000 --- a/src/XML-Parser/XMLNFAStateSet.class.st +++ /dev/null @@ -1,153 +0,0 @@ -" -This class is a set of NFA states. It wraps an IdentitySet and keeps track of if any of its states is accepting. -" -Class { - #name : #XMLNFAStateSet, - #superclass : #Collection, - #instVars : [ - 'set', - 'isAccepting' - ], - #category : #'XML-Parser-Validation-DFA' -} - -{ #category : #'instance creation' } -XMLNFAStateSet class >> new [ - ^ self new: 5 -] - -{ #category : #'instance creation' } -XMLNFAStateSet class >> new: aCapacity [ - ^ self basicNew initialize: aCapacity -] - -{ #category : #'instance creation' } -XMLNFAStateSet class >> newFrom: aCollection [ - "for GS portability" - ^ self withAll: aCollection -] - -{ #category : #copying } -XMLNFAStateSet >> , aCollection [ - "GS doesn't define #, for non-Sequenceable collections" - ^ self copy - addAll: aCollection; - yourself -] - -{ #category : #comparing } -XMLNFAStateSet >> = anObject [ - self == anObject - ifTrue: [^ true]. - - (self species == anObject species - and: [self size = anObject size]) - ifFalse: [^ false]. - - "use #do: instead of #allSatisfy: for speed" - self do: [:each | - (anObject includes: each) - ifFalse: [^ false]]. - - ^ true. -] - -{ #category : #adding } -XMLNFAStateSet >> add: aState [ - isAccepting - ifFalse: [isAccepting := aState isAccepting]. - - ^ set add: aState. -] - -{ #category : #converting } -XMLNFAStateSet >> asDFAState [ - ^ self asDFAStateWithStateCache: nil -] - -{ #category : #converting } -XMLNFAStateSet >> asDFAStateWithStateCache: aDFAStateCache [ - ^ XMLDFAState - nfaStates: self - dfaStateCache: aDFAStateCache -] - -{ #category : #accessing } -XMLNFAStateSet >> capacity [ - ^ set capacity -] - -{ #category : #enumerating } -XMLNFAStateSet >> do: aBlock [ - set do: aBlock -] - -{ #category : #comparing } -XMLNFAStateSet >> hash [ - | hash | - - hash := self species hash. - self size > 5 - ifFalse: [ - self do: [:each | - hash := hash bitXor: each hash]]. - ^ hash bitXor: self size hash. -] - -{ #category : #testing } -XMLNFAStateSet >> includes: aState [ - ^ set includes: aState -] - -{ #category : #initialization } -XMLNFAStateSet >> initialize: aCapacity [ - set := IdentitySet new: aCapacity. - isAccepting := false. -] - -{ #category : #testing } -XMLNFAStateSet >> isAccepting [ - ^ isAccepting -] - -{ #category : #testing } -XMLNFAStateSet >> isEmpty [ - "Squeak's Collection>>#isEmpty is inefficient" - ^ self size = 0 -] - -{ #category : #copying } -XMLNFAStateSet >> postCopy [ - set := set copy -] - -{ #category : #removing } -XMLNFAStateSet >> remove: aState ifAbsent: aBlock [ - set - remove: aState - ifAbsent: [^ aBlock value]. - - isAccepting - ifTrue: [isAccepting := set anySatisfy: [:each | each isAccepting]]. - - ^ aState. -] - -{ #category : #removing } -XMLNFAStateSet >> removeAll [ - "Redefined because Collection>>#removeAll assumes the collection can - be safely modified while iterating it with #do:, and 'set removeAll' - is not used because GS's Set/IdentitySet don't implement it" - - self initialize: self capacity -] - -{ #category : #private } -XMLNFAStateSet >> set [ - ^ set -] - -{ #category : #accessing } -XMLNFAStateSet >> size [ - ^ set size -] diff --git a/src/XML-Parser/XMLNamespaceException.class.st b/src/XML-Parser/XMLNamespaceException.class.st deleted file mode 100644 index c2f1f6a87..000000000 --- a/src/XML-Parser/XMLNamespaceException.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -Invoked when namespaces are used improperly and namespace checking is on. -" -Class { - #name : #XMLNamespaceException, - #superclass : #XMLParserException, - #category : #'XML-Parser-Exceptions' -} diff --git a/src/XML-Parser/XMLNamespaceScope.class.st b/src/XML-Parser/XMLNamespaceScope.class.st deleted file mode 100644 index f515af384..000000000 --- a/src/XML-Parser/XMLNamespaceScope.class.st +++ /dev/null @@ -1,546 +0,0 @@ -" -A namespace scope is a possibly empty set of mappings from namespace prefixes to URIs and an optional default namespace URI to be used for unprefixed elements. Scopes can be created from other scopes by copying. (Uses copy-on-write to reduce memory use.) -" -Class { - #name : #XMLNamespaceScope, - #superclass : #Object, - #instVars : [ - 'prefixMappings' - ], - #category : #'XML-Parser-Namespaces' -} - -{ #category : #defaults } -XMLNamespaceScope class >> xmlNamespaceURI [ - ^ 'http://www.w3.org/XML/1998/namespace' -] - -{ #category : #defaults } -XMLNamespaceScope class >> xmlnsNamespaceURI [ - ^ 'http://www.w3.org/2000/xmlns/' -] - -{ #category : #comparing } -XMLNamespaceScope >> = anObject [ - self == anObject - ifTrue: [^ true]. - - self species == anObject species - ifFalse: [^ false]. - - self hasNamespaces - ifFalse: [^ anObject hasNamespaces not]. - - "use #hasNamespaces first to avoid initializing anObject's prefixMappings" - anObject hasNamespaces - ifFalse: [^ false]. - - ^ prefixMappings = anObject prefixMappings. -] - -{ #category : #private } -XMLNamespaceScope >> copiedPrefixMappings [ - "replaces current mappings with copy for copy-on-write" - prefixMappings - ifNil: [^ self prefixMappings] - ifNotNil: [^ prefixMappings := prefixMappings copy] -] - -{ #category : #copying } -XMLNamespaceScope >> copy [ - "copy-on-write allows copies to share state so no postCopy is needed" - ^ self shallowCopy -] - -{ #category : #accessing } -XMLNamespaceScope >> defaultNamespace [ - ^ prefixMappings - ifNil: [''] - ifNotNil: [ - prefixMappings - at: '' - ifAbsent: ['']] -] - -{ #category : #accessing } -XMLNamespaceScope >> defaultNamespace: aURI [ - self - validatePrefix: '' - beforeMappingTo: aURI. - - "copy-on-write" - self copiedPrefixMappings - at: '' - put: aURI. -] - -{ #category : #private } -XMLNamespaceScope >> errorAttribute: anAttribute aliasesURI: aURI [ - XMLNamespaceException - formatSignal: 'Attribute "{1}" has alias for namespace URI "{2}"' - with: anAttribute - with: aURI -] - -{ #category : #private } -XMLNamespaceScope >> errorCannotAliasPrefix: aFirstPrefix with: aSecondPrefix [ - aSecondPrefix isEmpty - ifTrue: [ - XMLNamespaceException - formatSignal: - 'Cannot use the "{1}" namespace URI as a ', - 'default namespace URI' - with: aFirstPrefix] - ifFalse: [ - XMLNamespaceException - formatSignal: - 'Cannot alias the "{1}" namespace URI ', - 'with the "{2}" prefix' - with: aFirstPrefix - with: aSecondPrefix] -] - -{ #category : #private } -XMLNamespaceScope >> errorCannotAliasXMLNSPrefixWith: aPrefix [ - self - errorCannotAliasPrefix: 'xmlns' - with: aPrefix -] - -{ #category : #private } -XMLNamespaceScope >> errorCannotAliasXMLPrefixWith: aPrefix [ - self - errorCannotAliasPrefix: 'xml' - with: aPrefix -] - -{ #category : #private } -XMLNamespaceScope >> errorCannotMapPrefixToEmptyURI [ - XMLNamespaceException signal: 'Cannot map namespace prefixes to empty URIs' -] - -{ #category : #private } -XMLNamespaceScope >> errorCannotMapXMLNSPrefix [ - XMLNamespaceException signal: - 'Cannot map "xmlns" prefix to any namespace, even the current "xmlns" namespace' -] - -{ #category : #private } -XMLNamespaceScope >> errorCannotRemapXMLPrefix [ - XMLNamespaceException signal: 'Cannot map the "xml" prefix to a new namespace URI' -] - -{ #category : #private } -XMLNamespaceScope >> errorCannotUnmapPrefix: aPrefix [ - XMLNamespaceException - formatSignal: 'Prefix "{1}" was not mapped and cannot be unmapped' - with: aPrefix -] - -{ #category : #private } -XMLNamespaceScope >> errorInvalidPrefix: aPrefix [ - XMLNamespaceException - formatSignal: 'Prefix "{1}" contains ":" character' - with: aPrefix -] - -{ #category : #private } -XMLNamespaceScope >> errorInvalidUnprefixedAttribute: anAttribute [ - XMLNamespaceException - formatSignal: 'Unprefixed attribute "{1}" contains ":" character' - with: anAttribute -] - -{ #category : #private } -XMLNamespaceScope >> errorInvalidUnprefixedElement: anElement [ - XMLNamespaceException - formatSignal: 'Unprefixed element <{1}> contains ":" character' - with: anElement -] - -{ #category : #private } -XMLNamespaceScope >> errorUnmappedPrefix: aPrefix inAttribute: anAttribute [ - XMLNamespaceException - formatSignal: 'Unmapped namespace prefix "{1}" in "{2}" attribute' - with: aPrefix - with: anAttribute -] - -{ #category : #private } -XMLNamespaceScope >> errorUnmappedPrefix: aPrefix inElement: anElement [ - XMLNamespaceException - formatSignal: 'Unmapped namespace prefix "{1}" in <{2}> element' - with: aPrefix - with: anElement -] - -{ #category : #private } -XMLNamespaceScope >> errorXMLNSPrefixInAttribute: anAttribute [ - XMLNamespaceException - formatSignal: 'Attribute "{1}" uses reserved "xmlns" namespace prefix' - with: anAttribute -] - -{ #category : #private } -XMLNamespaceScope >> errorXMLNSPrefixInElement: anElement [ - XMLNamespaceException - formatSignal: 'Element <{1}> uses reserved "xmlns" namespace prefix' - with: anElement -] - -{ #category : #testing } -XMLNamespaceScope >> hasDefaultNamespace [ - ^ self includesPrefix: '' -] - -{ #category : #testing } -XMLNamespaceScope >> hasNamespaces [ - "optimized to avoid lazy initialization" - prefixMappings == nil - ifTrue: [^ false]. - ^ prefixMappings size > 0. -] - -{ #category : #comparing } -XMLNamespaceScope >> hash [ - self hasNamespaces - ifTrue: [^ self species hash bitXor: self prefixMappings hash] - ifFalse: [^ self species hash] -] - -{ #category : #testing } -XMLNamespaceScope >> includesPrefix: aPrefix [ - self - prefixMappingAt: aPrefix - ifAbsent: [^ false]. - ^ true. -] - -{ #category : #testing } -XMLNamespaceScope >> includesPrefix: aPrefix mappedTo: aURI [ - ^ (self - prefixMappingAt: aPrefix - ifAbsent: [^ false]) = aURI -] - -{ #category : #accessing } -XMLNamespaceScope >> inheritMappingsFrom: anEnclosingScope [ - anEnclosingScope hasNamespaces - ifFalse: [^ self]. - self hasNamespaces - ifTrue: [| copiedPrefixMappings | - anEnclosingScope prefixesAndURIsDo: [:prefix :uri | - (self includesPrefix: prefix) - ifFalse: [ - "nil test ensures we only copy the first time when needed" - (copiedPrefixMappings - ifNil: [copiedPrefixMappings := self copiedPrefixMappings]) - at: prefix - put: uri]]] - ifFalse: [ - "can safely share anEnclosingScope's prefixMappings because of - copy-on-write behavior" - prefixMappings := anEnclosingScope prefixMappings]. -] - -{ #category : #accessing } -XMLNamespaceScope >> mapPrefix: aPrefix to: aURI [ - self - validatePrefix: aPrefix - beforeMappingTo: aURI. - - "copy-on-write" - self copiedPrefixMappings - at: aPrefix - put: aURI. -] - -{ #category : #accessing } -XMLNamespaceScope >> mapPrefixesAndURIs: anAssociationCollection [ - | copiedPrefixMappings | - - anAssociationCollection associationsDo: [:each | - self - validatePrefix: each key - beforeMappingTo: each value. - "nil test ensures we only copy the first time when needed" - (copiedPrefixMappings - ifNil: [copiedPrefixMappings := self copiedPrefixMappings]) - at: each key - put: each value] -] - -{ #category : #accessing } -XMLNamespaceScope >> mappedPrefixes [ - ^ prefixMappings - ifNil: [#()] - ifNotNil: [prefixMappings keys] -] - -{ #category : #accessing } -XMLNamespaceScope >> prefixMappingAt: aPrefix [ - ^ self - prefixMappingAt: aPrefix - ifAbsent: [''] -] - -{ #category : #accessing } -XMLNamespaceScope >> prefixMappingAt: aPrefix ifAbsent: aBlock [ - ^ prefixMappings - ifNil: [aBlock value] - ifNotNil: [ - prefixMappings - at: aPrefix - ifAbsent: aBlock] -] - -{ #category : #private } -XMLNamespaceScope >> prefixMappings [ - ^ prefixMappings - ifNil: [prefixMappings := OrderPreservingStringDictionary new: 5] -] - -{ #category : #enumerating } -XMLNamespaceScope >> prefixesAndURIsDo: aTwoArgumentBlock [ - prefixMappings - ifNotNil: [prefixMappings keysAndValuesDo: aTwoArgumentBlock] -] - -{ #category : #printing } -XMLNamespaceScope >> printDeclarationsOn: aStream [ - | isFirst | - - isFirst := true. - self prefixesAndURIsDo: [:prefix :uri | - isFirst - ifTrue: [isFirst := false] - ifFalse: [aStream space]. - aStream nextPutAll: 'xmlns'. - prefix - ifNotEmpty: [ - aStream - nextPut: $:; - nextPutAll: prefix]. - aStream - nextPut: $=; - nextPut: $"; - nextPutAll: uri; - nextPut: $"]. -] - -{ #category : #printing } -XMLNamespaceScope >> printOn: aStream [ - super printOn: aStream. - - aStream nextPut: $(. - self printDeclarationsOn: aStream. - aStream nextPut: $). -] - -{ #category : #resolving } -XMLNamespaceScope >> resolvePrefix: aPrefix [ - "Resolves the namespace URI of aPrefix (the defualt namespace URI if aPrefix - is empty), including the predefined 'xml' and 'xmlns' prefixes. Returns an - empty string if aPrefix is unresolvable." - - ^ self - resolvePrefix: aPrefix - ifUnresolvable: '' -] - -{ #category : #resolving } -XMLNamespaceScope >> resolvePrefix: aPrefix ifUnresolvable: aBlock [ - "Resolves the namespace URI of aPrefix (the defualt namespace URI if aPrefix - is empty), including the predefined 'xml' and 'xmlns' prefixes. Returns the - value of aBlock if aPrefix is unresolvable." - - aPrefix size > 0 "optimization" - ifTrue: [ - (aPrefix at: 1) == $x "optimization" - ifTrue: [ - aPrefix = 'xml' - ifTrue: [^ self xmlNamespaceURI]. - aPrefix = 'xmlns' - ifTrue: [^ self xmlnsNamespaceURI]]]. - - ^ self - prefixMappingAt: aPrefix - ifAbsent: aBlock. -] - -{ #category : #resolving } -XMLNamespaceScope >> resolvePrefixesOfNamespaceURI: aURI [ - | prefixes | - - "the 'xml' and 'xmlns' namespaces URIs can't be aliased" - aURI = self xmlNamespaceURI - ifTrue: [^ Set with: 'xml']. - aURI = self xmlnsNamespaceURI - ifTrue: [^ Set with: 'xmlns']. - - prefixes := Set new. - self prefixesAndURIsDo: [:prefix :uri | - uri = aURI - ifTrue: [prefixes add: prefix]]. - ^ prefixes. -] - -{ #category : #accessing } -XMLNamespaceScope >> size [ - ^ prefixMappings - ifNil: [0] - ifNotNil: [prefixMappings size] -] - -{ #category : #unmapping } -XMLNamespaceScope >> unmapPrefix: aPrefix [ - ^ self - unmapPrefix: aPrefix - ifAbsent: [self errorCannotUnmapPrefix: aPrefix] -] - -{ #category : #unmapping } -XMLNamespaceScope >> unmapPrefix: aPrefix ifAbsent: aBlock [ - prefixMappings - ifNil: [^ aBlock value] - ifNotNil: [ - "copy-on-write" - ^ self copiedPrefixMappings - removeKey: aPrefix - ifAbsent: aBlock] -] - -{ #category : #unmapping } -XMLNamespaceScope >> unmapPrefixes [ - self hasNamespaces - ifTrue: [ - "copy-on-write" - self copiedPrefixMappings removeAll] -] - -{ #category : #validating } -XMLNamespaceScope >> validateAndResolvePrefix: aPrefix ofAttribute: anAttribute [ - "performance critical method" - aPrefix size > 0 "optimization" - ifTrue: [ - ^ self - prefixMappingAt: aPrefix - ifAbsent: [ - aPrefix = 'xml' - ifTrue: [self xmlNamespaceURI] - ifFalse: [ - aPrefix = 'xmlns' - ifTrue: [ - "this can't happen during parsing, because - 'xmlns' attributes are treated as namespace - declarations, but it can happen through DOM tree - manipulation, for example: - attributeNode prefix: 'xmlns' - " - self errorXMLNSPrefixInAttribute: anAttribute] - ifFalse: [ - self - errorUnmappedPrefix: aPrefix - inAttribute: anAttribute]]]] - ifFalse: [ - "catch names like ':name' with an empty prefix" - (anAttribute size > 0 - and: [(anAttribute at: 1) == $:]) - ifTrue: [self errorInvalidUnprefixedAttribute: anAttribute]. - ^ ''] -] - -{ #category : #validating } -XMLNamespaceScope >> validateAndResolvePrefix: aPrefix ofElement: anElement [ - aPrefix size > 0 "optimization" - ifTrue: [ - ^ self - prefixMappingAt: aPrefix - ifAbsent: [ - aPrefix = 'xml' - ifTrue: [self xmlNamespaceURI] - ifFalse: [ - aPrefix = 'xmlns' - ifTrue: [self errorXMLNSPrefixInElement: anElement] - ifFalse: [ - self - errorUnmappedPrefix: aPrefix - inElement: anElement]]]] - ifFalse: [ - "catch names like ':name' with an empty prefix" - (anElement size > 0 - and: [(anElement at: 1) == $:]) - ifTrue: [self errorInvalidUnprefixedElement: anElement]. - ^ self defaultNamespace] -] - -{ #category : #private } -XMLNamespaceScope >> validatePrefix: aPrefix beforeMappingTo: aURI [ - aPrefix size > 0 "optimization" - ifTrue: ["non-default namespace" - aPrefix = 'xml' "cannot be remapped" - ifTrue: [ - aURI = self xmlNamespaceURI - ifFalse: [self errorCannotRemapXMLPrefix]. - ^ self]. - aPrefix = 'xmlns' "cannot be mapped, even to the same URI" - ifTrue: [self errorCannotMapXMLNSPrefix]. - (aPrefix indexOf: $:) > 0 - ifTrue: [self errorInvalidPrefix: aPrefix]. - "non-default namespaces cannot be mapped to empty uris, even - to shadow an inherited namesapce" - aURI size > 0 - ifFalse: [self errorCannotMapPrefixToEmptyURI]]. - - "these URIs cannot be aliased, even by the default namespace" - aURI = self xmlNamespaceURI - ifTrue: [self errorCannotAliasXMLPrefixWith: aPrefix]. - aURI = self xmlnsNamespaceURI - ifTrue: [self errorCannotAliasXMLNSPrefixWith: aPrefix]. -] - -{ #category : #validating } -XMLNamespaceScope >> validatePrefixesOfAttributes: anAttributeCollection [ - ^ self - validatePrefixesOfAttributes: anAttributeCollection asArray - from: 1 - to: anAttributeCollection size -] - -{ #category : #validating } -XMLNamespaceScope >> validatePrefixesOfAttributes: anAttributeCollection from: aStart to: aStop [ - "performance critical method" - | attributeLocalNamesAndURIs | - - "#to:do: for speed" - aStart to: aStop do: [:i | | attribute prefix uri | - attribute := anAttributeCollection at: i. - prefix := attribute xmlPrefixBeforeLocalName. - (uri := - self - validateAndResolvePrefix: prefix - ofAttribute: attribute) size > 0 "optimization" - ifTrue: [| oldSize | - oldSize := - (attributeLocalNamesAndURIs - ifNil: [ - "not initialized unless needed" - attributeLocalNamesAndURIs := Set new]) size. - (attributeLocalNamesAndURIs - add: (attribute xmlLocalNameAfterPrefix: prefix) -> uri; - size) > oldSize - ifFalse: [ - self - errorAttribute: attribute xmlLocalNameAfterPrefix - aliasesURI: uri]]] -] - -{ #category : #defaults } -XMLNamespaceScope >> xmlNamespaceURI [ - ^ self class xmlNamespaceURI -] - -{ #category : #defaults } -XMLNamespaceScope >> xmlnsNamespaceURI [ - ^ self class xmlnsNamespaceURI -] diff --git a/src/XML-Parser/XMLNamespaceScopeAllocator.class.st b/src/XML-Parser/XMLNamespaceScopeAllocator.class.st deleted file mode 100644 index 5da660f96..000000000 --- a/src/XML-Parser/XMLNamespaceScopeAllocator.class.st +++ /dev/null @@ -1,74 +0,0 @@ -" -This class allocates namespace scopes with a stack. Sending #enterScope pushes a new scope onto the stack that inherits all mappings from the previous (enclosing) scope, and #exitScop pops it off. -" -Class { - #name : #XMLNamespaceScopeAllocator, - #superclass : #Object, - #instVars : [ - 'scopes' - ], - #category : #'XML-Parser-Namespaces' -} - -{ #category : #accessing } -XMLNamespaceScopeAllocator >> currentScope [ - | totalScopes | - - ^ (totalScopes := scopes size) > 0 - ifTrue: [scopes at: totalScopes] - ifFalse: [self newEmptyScope] -] - -{ #category : #accessing } -XMLNamespaceScopeAllocator >> currentScope: aScope [ - scopes size > 0 - ifTrue: [ - scopes - at: scopes size - put: aScope] - ifFalse: [scopes addLast: aScope] -] - -{ #category : #allocating } -XMLNamespaceScopeAllocator >> enterScope [ - ^ scopes addLast: self currentScope copy -] - -{ #category : #allocating } -XMLNamespaceScopeAllocator >> exitScope [ - ^ scopes removeLast -] - -{ #category : #testing } -XMLNamespaceScopeAllocator >> hasCurentScope [ - ^ scopes notEmpty -] - -{ #category : #initialization } -XMLNamespaceScopeAllocator >> initialize [ - super initialize. - - scopes := OrderedCollection new: 10. -] - -{ #category : #'instance creation' } -XMLNamespaceScopeAllocator >> newEmptyScope [ - ^ XMLNamespaceScope new -] - -{ #category : #printing } -XMLNamespaceScopeAllocator >> printOn: aStream [ - super printOn: aStream. - - self hasCurentScope - ifTrue: [ - aStream - nextPut: $(; - print: self currentScope; - nextPut: $)]. -] - -{ #category : #accessing } -XMLNamespaceScopeAllocator >> scopes [ - ^ scopes -] diff --git a/src/XML-Parser/XMLNamespacedAttributeDictionary.class.st b/src/XML-Parser/XMLNamespacedAttributeDictionary.class.st deleted file mode 100644 index 3f3b68837..000000000 --- a/src/XML-Parser/XMLNamespacedAttributeDictionary.class.st +++ /dev/null @@ -1,33 +0,0 @@ -" -This subclass is used when namespaces are enabled. It has an extra inst var for namespace scopes. -" -Class { - #name : #XMLNamespacedAttributeDictionary, - #superclass : #XMLAttributeDictionary, - #instVars : [ - 'namespaceScope' - ], - #category : #'XML-Parser' -} - -{ #category : #private } -XMLNamespacedAttributeDictionary >> namespaceScope [ - ^ namespaceScope ifNil: [namespaceScope := XMLNamespaceScope new] -] - -{ #category : #private } -XMLNamespacedAttributeDictionary >> resolvePrefix: aPrefix ifUnresolvable: aBlock [ - ^ self namespaceScope - resolvePrefix: aPrefix - ifUnresolvable: aBlock -] - -{ #category : #initialization } -XMLNamespacedAttributeDictionary >> setNamespaceScope: aNamespaceScope [ - namespaceScope := aNamespaceScope -] - -{ #category : #testing } -XMLNamespacedAttributeDictionary >> usesNamespaces [ - ^ true -] diff --git a/src/XML-Parser/XMLNestedStreamReader.class.st b/src/XML-Parser/XMLNestedStreamReader.class.st deleted file mode 100644 index 423818792..000000000 --- a/src/XML-Parser/XMLNestedStreamReader.class.st +++ /dev/null @@ -1,567 +0,0 @@ -" -This class represents a stream reader that implements pushBack: using nested streams. This enables subsitution/replacement to be performed without modifying the underlying collections streamed-over or having to copy them. It also performs line-ending normalization, transforming a CR or a CRLF sequence into a single LF character. - -(The code in this class is optimized; refactor with care.) -" -Class { - #name : #XMLNestedStreamReader, - #superclass : #Object, - #instVars : [ - 'stream', - 'whenPoppedDo', - 'isExternal', - 'currentPosition', - 'currentLineNumber', - 'currentLineStartPosition', - 'peekChar', - 'nestedStreams', - 'normalizedLineEndingChar', - 'readLimit' - ], - #classVars : [ - 'CRCharacter', - 'LFCharacter', - 'NullReadStream' - ], - #category : #'XML-Parser-Streams' -} - -{ #category : #'class initialization' } -XMLNestedStreamReader class >> initialize [ - "self initialize" - - "stored in class vars for faster access" - CRCharacter := Character cr. - LFCharacter := Character lf. - - "a null stream that is already #atEnd and can safely be sent - #close repeatedly and #atEnd after" - NullReadStream := XMLNullReadStream new. -] - -{ #category : #'instance creation' } -XMLNestedStreamReader class >> on: aStream [ - ^ self - on: aStream - readLimit: nil -] - -{ #category : #'instance creation' } -XMLNestedStreamReader class >> on: aStream readLimit: anInteger [ - ^ self new - setStream: aStream - readLimit: anInteger -] - -{ #category : #testing } -XMLNestedStreamReader >> atEnd [ - peekChar - ifNotNil: [^ false]. - stream atEnd - ifFalse: [^ false]. - "use #to:do: for speed" - 1 to: nestedStreams size do: [:i | - (nestedStreams at: i) stream atEnd - ifFalse: [^ false]]. - ^ true. -] - -{ #category : #testing } -XMLNestedStreamReader >> atQuote [ - ^ self peek == $" - or: [peekChar == $'] -] - -{ #category : #private } -XMLNestedStreamReader >> closeStream: aStream [ - "must use respondsTo: to support streams only implementing the basic protocol" - (aStream respondsTo: #close) - ifTrue: [aStream close]. -] - -{ #category : #closing } -XMLNestedStreamReader >> closeStreams [ - "close the streams but do not evaluate their callbacks and - set the current stream to the null stream sending #closeStreams - again won't raise an error" - self - closeStream: stream; - setStreamToNull. - [nestedStreams size > 0] - whileTrue: [self closeStream: nestedStreams removeLast stream]. -] - -{ #category : #decoding } -XMLNestedStreamReader >> convertFromEncoding: anEncodingName [ - "Encoding attributes are ignored unless the stream is a converting adapter - that has a null/implicit converter. - - This is the safest approach, because the encoding of a file can be easily - changed by a text editor or utility without automatically updating the - encoding attribute. - - The BOM and out-of-band info (like HTTP headers) should be given precedence." - - (stream isXMLConvertingStreamAdapter - and: [stream hasNullStreamConverter - or: [stream hasImplicitStreamConverter]]) - ifTrue: [| streamConverter | - (streamConverter := anEncodingName asXMLStreamConverter) isNull - ifTrue: [self errorUnsupportedEncoding: anEncodingName]. - self decodeStreamWithConverter: streamConverter] -] - -{ #category : #accessing } -XMLNestedStreamReader >> currentColumnNumber [ - "recording the start pos. of the line and subtracting it from the current - pos. is faster than an explicit column var that would need to be incremented - each time through #next/#skipSeparators" - ^ currentLineStartPosition - ifNotNil: [currentPosition - currentLineStartPosition] -] - -{ #category : #accessing } -XMLNestedStreamReader >> currentLineNumber [ - ^ currentLineNumber -] - -{ #category : #accessing } -XMLNestedStreamReader >> currentPosition [ - ^ currentPosition -] - -{ #category : #decoding } -XMLNestedStreamReader >> decodeStreamWithConverter: aStreamConverter [ - stream isXMLConvertingStreamAdapter - ifTrue: [stream streamConverter: aStreamConverter] - ifFalse: [ - stream := - XMLDecodingReadStreamAdapter - on: stream - streamConverter: aStreamConverter] -] - -{ #category : #decoding } -XMLNestedStreamReader >> detectEncoding [ - stream isXMLConvertingStreamAdapter - ifTrue: [stream detectEncoding] - ifFalse: [ - "if it's not already an XMLDecodingReadStreamAdapter, just look - for an obvious leading byte-order mark and convert it if found, - and otherwise just leave it alone" - (XMLEncodingDetector on: stream) streamConverterForEncoding - ifNotNil: [:converter | - self decodeStreamWithConverter: converter]] -] - -{ #category : #private } -XMLNestedStreamReader >> errorNestingLimitExceeded [ - XMLLimitException signal: 'Cannot further nest input streams' -] - -{ #category : #private } -XMLNestedStreamReader >> errorReadLimitExceeded [ - XMLLimitException signal: - 'Security input read limit exceeded; ', - 'use #documentReadLimit: and #externalSubsetReadLimit: ', - 'to change/disable it, or #defaultReadLimit: ', - 'to persistently change/disable it' -] - -{ #category : #private } -XMLNestedStreamReader >> errorUnsupportedEncoding: anEncodingName [ - XMLEncodingException - formatSignal: 'Encoding "{1}" is unsupported' - with: anEncodingName -] - -{ #category : #private } -XMLNestedStreamReader >> hasNextAfterPoppingStreamsAtEnd [ - "always pop at least one stream, which makes the new current stream - the null stream if there aren't any nested streams" - self popCurrentStream. - [stream atEnd] - whileTrue: [ - nestedStreams size > 0 - ifFalse: [^ false]. - self popCurrentStream]. - ^ true. -] - -{ #category : #testing } -XMLNestedStreamReader >> hasPushedBackStreams [ - ^ nestedStreams size > 0 -] - -{ #category : #testing } -XMLNestedStreamReader >> isBinary [ - ^ false -] - -{ #category : #testing } -XMLNestedStreamReader >> isStream [ - ^ true -] - -{ #category : #testing } -XMLNestedStreamReader >> isXMLBinaryOrExternalStream [ - ^ self isBinary -] - -{ #category : #private } -XMLNestedStreamReader >> maxNestedStreams [ - ^ 32 -] - -{ #category : #private } -XMLNestedStreamReader >> nestedStreamsAddLast: aPushedBackStream [ - nestedStreams size >= self maxNestedStreams - ifTrue: [self errorNestingLimitExceeded]. - nestedStreams addLast: aPushedBackStream. -] - -{ #category : #private } -XMLNestedStreamReader >> newWriteStream [ - ^ (self writeStreamCollectionClass new: 128) writeStream -] - -{ #category : #accessing } -XMLNestedStreamReader >> next [ - | nextChar | - - peekChar - ifNil: [ - stream atEnd - ifTrue: [ - self hasNextAfterPoppingStreamsAtEnd - ifFalse: [^ nil]]. - nextChar := stream next. - isExternal - ifTrue: [ - currentPosition := currentPosition + 1. - nextChar == LFCharacter - ifTrue: [ - nextChar := normalizedLineEndingChar. - currentLineNumber := currentLineNumber + 1. - currentLineStartPosition := currentPosition] - ifFalse: [ - nextChar == CRCharacter - ifTrue: [ - stream atEnd - ifFalse: [ - stream peek == LFCharacter - ifTrue: [stream next]]. - nextChar := normalizedLineEndingChar. - currentLineNumber := currentLineNumber + 1. - currentLineStartPosition := currentPosition]]]] - ifNotNil: [ - nextChar := peekChar. - peekChar := nil. - isExternal - ifTrue: [ - currentPosition := currentPosition + 1. - nextChar == normalizedLineEndingChar - ifTrue: [ - currentLineNumber := currentLineNumber + 1. - currentLineStartPosition := currentPosition]]]. - - readLimit - ifNotNil: [ - (readLimit := readLimit - 1) >= 0 - ifFalse: [self errorReadLimitExceeded]]. - - ^ nextChar. -] - -{ #category : #accessing } -XMLNestedStreamReader >> next: anInteger [ - | writeStream i | - - writeStream := self newWriteStream. - i := 0. - [self atEnd - or: [i >= anInteger]] - whileFalse: [ - writeStream nextPut: self next. - i := i + 1]. - ^ writeStream contents. -] - -{ #category : #accessing } -XMLNestedStreamReader >> normalizedLineEndingChar [ - ^ normalizedLineEndingChar -] - -{ #category : #accessing } -XMLNestedStreamReader >> normalizedLineEndingChar: aCharacter [ - normalizedLineEndingChar := aCharacter -] - -{ #category : #accessing } -XMLNestedStreamReader >> peek [ - peekChar - ifNotNil: [^ peekChar]. - - stream atEnd - ifTrue: [ - self hasNextAfterPoppingStreamsAtEnd - ifFalse: [^ nil]]. - peekChar := stream next. - isExternal - ifTrue: [ - peekChar == LFCharacter - ifTrue: [^ peekChar := normalizedLineEndingChar]. - peekChar == CRCharacter - ifTrue: [ - stream atEnd - ifFalse: [ - stream peek == LFCharacter - ifTrue: [stream next]]. - ^ peekChar := normalizedLineEndingChar]]. - ^ peekChar. -] - -{ #category : #accessing } -XMLNestedStreamReader >> peekFor: aCharacter [ - (self atEnd not - and: [self peek = aCharacter]) - ifTrue: [ - self next. - ^ true] - ifFalse: [^ false] -] - -{ #category : #private } -XMLNestedStreamReader >> popCurrentStream [ - | callbackOfPoppedStream | - - "close the stream first and pop it before evaluating the callback so any - exception it raises won't cause us to leak file streams or double close a - stream when XMLParser>>#handleParserError: sends #closeStreams" - self closeStream: stream. - callbackOfPoppedStream := whenPoppedDo. - nestedStreams size > 0 - ifTrue: [| pushedBackStream | - pushedBackStream := nestedStreams removeLast. - stream := pushedBackStream stream. - whenPoppedDo := pushedBackStream whenPoppedDo. - isExternal := pushedBackStream isExternal. - currentPosition := pushedBackStream currentPosition. - currentLineNumber := pushedBackStream currentLineNumber. - currentLineStartPosition := pushedBackStream currentLineStartPosition] - ifFalse: [self setStreamToNull]. - - "now it's safe to evaluate the callback" - callbackOfPoppedStream - ifNotNil: [callbackOfPoppedStream value]. -] - -{ #category : #printing } -XMLNestedStreamReader >> printOn: aStream [ - super printOn: aStream. - - aStream - nextPut: $(; - print: peekChar; "can be nil" - nextPutAll: '; '; - print: stream; - space; - print: nestedStreams; - nextPut: $). -] - -{ #category : #positioning } -XMLNestedStreamReader >> pushBack: aString [ - aString size > 1 - ifTrue: [^ self pushBackStream: aString readStream]. - aString size = 1 - ifTrue: [self pushBackCharacter: (aString at: 1)] -] - -{ #category : #positioning } -XMLNestedStreamReader >> pushBackCharacter: aCharacter [ - self - pushBackStream: (XMLSingleCharacterReadStream on: aCharacter) - whenPoppedDo: nil - isExternal: false -] - -{ #category : #positioning } -XMLNestedStreamReader >> pushBackStream: aStream [ - self - pushBackStream: aStream - whenPoppedDo: nil - isExternal: false -] - -{ #category : #positioning } -XMLNestedStreamReader >> pushBackStream: aStream whenPoppedDo: aBlock isExternal: aBoolean [ - self nestedStreamsAddLast: - ((isExternal - ifTrue: [XMLPushedBackExternalStream] - ifFalse: [XMLPushedBackInternalStream]) - stream: stream - whenPoppedDo: whenPoppedDo - currentPosition: currentPosition - currentLineNumber: currentLineNumber - currentLineStartPosition: currentLineStartPosition). - - peekChar - ifNotNil: [ - self nestedStreamsAddLast: - (XMLPushedBackInternalStream - stream: (XMLSingleCharacterReadStream on: peekChar) - whenPoppedDo: nil - currentPosition: currentPosition - currentLineNumber: currentLineNumber - currentLineStartPosition: currentLineStartPosition). - peekChar := nil]. - - self stream: aStream. - whenPoppedDo := aBlock. - (isExternal := aBoolean) - ifTrue: [ - currentPosition := 0. - currentLineNumber := 1. - currentLineStartPosition := 0]. -] - -{ #category : #accessing } -XMLNestedStreamReader >> readLimit [ - ^ readLimit -] - -{ #category : #initialization } -XMLNestedStreamReader >> setStream: aStream readLimit: anInteger [ - self stream: aStream. - isExternal := true. - currentPosition := 0. - currentLineNumber := 1. - currentLineStartPosition := 0. - nestedStreams := OrderedCollection new: 5. - readLimit := anInteger. - normalizedLineEndingChar := LFCharacter. -] - -{ #category : #private } -XMLNestedStreamReader >> setStreamToNull [ - stream := NullReadStream. - whenPoppedDo := nil. - "do not reset the other stream properties, including position - and line number, so error messages will be accurate" -] - -{ #category : #positioning } -XMLNestedStreamReader >> skip: anInteger [ - 1 to: anInteger do: [:i | - self atEnd - ifTrue: [^ self]. - self next] -] - -{ #category : #positioning } -XMLNestedStreamReader >> skipSeparators [ - "This code is heavily optimized." - - | isExternalNormalizedLineEnding | - - [peekChar - ifNil: [ - stream atEnd - ifTrue: [ - self hasNextAfterPoppingStreamsAtEnd - ifFalse: [^ self]]. - peekChar := stream next. - isExternal - ifTrue: [ - peekChar == LFCharacter - ifTrue: [isExternalNormalizedLineEnding := true] - ifFalse: [ - peekChar == CRCharacter - ifTrue: [ - stream atEnd - ifFalse: [ - stream peek == LFCharacter - ifTrue: [stream next]]. - isExternalNormalizedLineEnding := true] - ifFalse: [ - isExternalNormalizedLineEnding := false. - "nil understands #isXMLSeparator, so it - isn't tested for first" - peekChar isXMLSeparator]]] - ifFalse: [ - "nil understands #isXMLSeparator, so it isn't tested for first" - peekChar isXMLSeparator]] - ifNotNil: [ - isExternal - ifTrue: [ - isExternalNormalizedLineEnding := - peekChar == normalizedLineEndingChar]. - peekChar isXMLSeparator]] - whileTrue: [ - "inlined from #next" - peekChar := nil. - isExternal - ifTrue: [ - currentPosition := currentPosition + 1. - isExternalNormalizedLineEnding - ifTrue: [ - currentLineNumber := currentLineNumber + 1. - currentLineStartPosition := currentPosition]. - readLimit - ifNotNil: [ - (readLimit := readLimit - 1) >= 0 - ifFalse: [self errorReadLimitExceeded]]]] -] - -{ #category : #positioning } -XMLNestedStreamReader >> skipTo: aCharacter [ - [self atEnd] - whileFalse: [ - self next = aCharacter - ifTrue: [^ true]]. - ^ false. -] - -{ #category : #accessing } -XMLNestedStreamReader >> stream [ - ^ stream -] - -{ #category : #accessing } -XMLNestedStreamReader >> stream: aStream [ - "if the stream is not already a decoding adapter, - then only assume it needs one if it's binary" - stream := - aStream isXMLConvertingStreamAdapter - ifTrue: [aStream] - ifFalse: [ - (XMLDecodingReadStreamAdapter nonDecodingOnIfBinaryOrExternal: aStream) - ifNil: [aStream]] -] - -{ #category : #accessing } -XMLNestedStreamReader >> upTo: aCharacter [ - | writeStream nextChar | - - writeStream := self newWriteStream. - [self atEnd - or: [(nextChar := self next) = aCharacter]] - whileFalse: [writeStream nextPut: nextChar]. - ^ writeStream contents. -] - -{ #category : #accessing } -XMLNestedStreamReader >> upToEnd [ - | writeStream | - - writeStream := self newWriteStream. - [self atEnd] - whileFalse: [writeStream nextPut: self next]. - ^ writeStream contents. -] - -{ #category : #defaults } -XMLNestedStreamReader >> writeStreamCollectionClass [ - ^ String -] diff --git a/src/XML-Parser/XMLNmtokenAttributeValidator.class.st b/src/XML-Parser/XMLNmtokenAttributeValidator.class.st deleted file mode 100644 index 7a8b1d489..000000000 --- a/src/XML-Parser/XMLNmtokenAttributeValidator.class.st +++ /dev/null @@ -1,44 +0,0 @@ -" -This class validates Nmtoken name attributes. -" -Class { - #name : #XMLNmtokenAttributeValidator, - #superclass : #XMLAttributeValidator, - #category : #'XML-Parser-Validation' -} - -{ #category : #defaults } -XMLNmtokenAttributeValidator class >> standaloneExternalClass [ - ^ XMLStandaloneExternalNmtokenAttributeValidator -] - -{ #category : #private } -XMLNmtokenAttributeValidator >> errorInvalidNmtoken: aName [ - XMLValidationException - formatSignal: 'Invalid Nmtoken name "{1}" in attribute "{2}" of element <{3}>' - with: aName - with: self attribute - with: self element -] - -{ #category : #testing } -XMLNmtokenAttributeValidator >> isNmtoken [ - ^ true -] - -{ #category : #validating } -XMLNmtokenAttributeValidator >> validateAttributeDefaultValue: aDefaultValue [ - aDefaultValue isXMLNmtoken - ifFalse: [self errorInvalidDefaultAttributeValue: aDefaultValue] -] - -{ #category : #validating } -XMLNmtokenAttributeValidator >> validateAttributeValue: aValue [ - self validateNmtoken: aValue -] - -{ #category : #validating } -XMLNmtokenAttributeValidator >> validateNmtoken: aName [ - aName isXMLNmtoken - ifFalse: [self errorInvalidNmtoken: aName] -] diff --git a/src/XML-Parser/XMLNmtokensAttributeValidator.class.st b/src/XML-Parser/XMLNmtokensAttributeValidator.class.st deleted file mode 100644 index 9c1b49e33..000000000 --- a/src/XML-Parser/XMLNmtokensAttributeValidator.class.st +++ /dev/null @@ -1,34 +0,0 @@ -" -This class validates attributes with lists of Nmtoken name values separated by spaces. -" -Class { - #name : #XMLNmtokensAttributeValidator, - #superclass : #XMLNmtokenAttributeValidator, - #category : #'XML-Parser-Validation' -} - -{ #category : #defaults } -XMLNmtokensAttributeValidator class >> standaloneExternalClass [ - ^ XMLStandaloneExternalNmtokensAttributeValidator -] - -{ #category : #testing } -XMLNmtokensAttributeValidator >> isNmtokens [ - ^ true -] - -{ #category : #validating } -XMLNmtokensAttributeValidator >> validateAttributeDefaultValue: aDefaultValue [ - self - spaceSeparatedListValuesIn: aDefaultValue - do: [:each | - each isXMLNmtoken - ifFalse: [self errorInvalidDefaultAttributeValue: aDefaultValue]] -] - -{ #category : #validating } -XMLNmtokensAttributeValidator >> validateAttributeValue: aValue [ - self - spaceSeparatedListValuesIn: aValue - do: [:each | self validateNmtoken: each] -] diff --git a/src/XML-Parser/XMLNode.class.st b/src/XML-Parser/XMLNode.class.st deleted file mode 100644 index 0583b1033..000000000 --- a/src/XML-Parser/XMLNode.class.st +++ /dev/null @@ -1,669 +0,0 @@ -" -This is a base class for XML nodes. It has testing messages, messages to access the parent, sibling, and ancestor nodes, and messages to control printing. -" -Class { - #name : #XMLNode, - #superclass : #Object, - #instVars : [ - 'parent' - ], - #category : #'XML-Parser-DOM' -} - -{ #category : #visiting } -XMLNode >> acceptNodeVisitor: aNodeVisitor [ - ^ self -] - -{ #category : #deprecated } -XMLNode >> addContent: aStringOrStringNode [ - "will be deprecated" - - XMLDOMException signal: 'Node cannot contain string content' -] - -{ #category : #enumerating } -XMLNode >> allNodesDo: aBlock [ - "evaluates aBlock for the receiver and all of its descendant nodes" - - aBlock value: self -] - -{ #category : #accessing } -XMLNode >> ancestorElements [ - "returns a node list with all ancestor elements of the receiver" - | ancestorElements | - - ancestorElements := self newListForSelect. - self ancestorElementsDo: [:each | ancestorElements addLast: each]. - ^ ancestorElements. -] - -{ #category : #enumerating } -XMLNode >> ancestorElementsDo: aBlock [ - | ancestor | - - ancestor := self parent. - [ancestor notNil - and: [ancestor isElement]] - whileTrue: [ - aBlock value: ancestor. - ancestor := ancestor parent]. -] - -{ #category : #accessing } -XMLNode >> ancestorNodes [ - "returns a node list with all ancestor nodes of the receiver" - | ancestors | - - ancestors := self newListForSelect. - self ancestorNodesDo: [:each | ancestors addLast: each]. - ^ ancestors. -] - -{ #category : #enumerating } -XMLNode >> ancestorNodesDo: aBlock [ - | ancestor | - - ancestor := self parent. - [ancestor notNil] - whileTrue: [ - aBlock value: ancestor. - ancestor := ancestor parent]. -] - -{ #category : #converting } -XMLNode >> asString [ - "Returns the full, untruncated XML source string, unlike #printString, - which may truncate long printed representations" - - ^ String streamContents: [:stream | self printOn: stream] -] - -{ #category : #testing } -XMLNode >> canHaveChildren [ - "returns true if the receiver is a type of node that can have child nodes" - - ^ false -] - -{ #category : #testing } -XMLNode >> canonicallyEquals: aNode [ - "returns true if the receiver and aNode have the same canonical - representation (http://www.w3.org/TR/xml-c14n)" - - ^ self canonicallyPrinted = aNode canonicallyPrinted -] - -{ #category : #printing } -XMLNode >> canonicallyPrintOn: aStream [ - "Prints on aStream as canonical XML (http://www.w3.org/TR/xml-c14n)" - - self - printOn: aStream - beforeWritingDo: [:writer | writer isCanonical: true] -] - -{ #category : #printing } -XMLNode >> canonicallyPrintToFileNamed: aFileName [ - "Prints to the file aFileName as canonical XML (http://www.w3.org/TR/xml-c14n)" - - self - printToFileNamed: aFileName - beforeWritingDo: [:writer | writer isCanonical: true] -] - -{ #category : #printing } -XMLNode >> canonicallyPrinted [ - "Prints as canonical XML (http://www.w3.org/TR/xml-c14n)" - - ^ String streamContents: [:stream | self canonicallyPrintOn: stream] -] - -{ #category : #accessing } -XMLNode >> configuration [ - ^ self parent ifNotNil: [:node | node configuration] -] - -{ #category : #accessing } -XMLNode >> contentString [ - "Returns a combined string of all descendant string values with spaces inserted - for readability when one string has no trailing space and the next has no - leading space. - - See also #rawContentString." - - ^ String streamContents: [:stream | self printContentOn: stream] -] - -{ #category : #copying } -XMLNode >> copy [ - "returns a deep copy of the receiver, including copies of any descendant nodes, - and copies the config" - - ^ self shallowCopy postCopy postCopyConfiguration -] - -{ #category : #copying } -XMLNode >> copySharingConfiguration [ - "returns a deep copy of the receiver, including copies of any descendant nodes, - but does not copy the config" - - ^ self shallowCopy postCopy -] - -{ #category : #enumerating } -XMLNode >> descendantNodesDo: aBlock [ -] - -{ #category : #deprecated } -XMLNode >> descendentNodesDo: aBlock [ - self deprecated: 'use #descendantNodesDo: instead'. - ^ self descendantNodesDo: aBlock. -] - -{ #category : #accessing } -XMLNode >> document [ - "returns the document node that the receiver belongs to (the receiver if it's a - document) or nil if there isn't one" - - ^ self parent ifNotNil: [:node | node document] -] - -{ #category : #accessing } -XMLNode >> documentRoot [ - "returns the root of the DOM tree, a document node if there is one or the - last ancestor or self otherwise" - | documentRoot | - - documentRoot := self. - self ancestorNodesDo: [:each | documentRoot := each]. - ^ documentRoot. -] - -{ #category : #private } -XMLNode >> errorXMLWritingUnsupported [ - XMLDOMException signal: 'The XMLWriter package is required for writng DOM objects' -] - -{ #category : #private } -XMLNode >> escapesContentEntitiesWhenWriting [ - self hasParent - ifTrue: [^ self parent escapesContentEntitiesWhenWriting] - ifFalse: [^ true] "default to escaping" -] - -{ #category : #testing } -XMLNode >> hasChildren [ - "returns true if the receiver has child nodes" - - ^ false -] - -{ #category : #private } -XMLNode >> hasNodeList: aNodeList [ - ^ false -] - -{ #category : #testing } -XMLNode >> hasParent [ - "returns true if the receiver has a parent node" - - ^ parent notNil -] - -{ #category : #private } -XMLNode >> hasParentWithNodeList: aNodeList [ - "optimized" - parent == nil - ifTrue: [^ false]. - ^ parent hasNodeList: aNodeList. -] - -{ #category : #private } -XMLNode >> initializeFileWriteStream: aWriteStream [ - "This sets a stream converter on aWriteStream based on the document's encoding - attribute and writes the encoding's byte order mark." - - | document | - - aWriteStream - streamConverter: - (((document := self document) notNil - and: [document hasEncoding]) - ifTrue: [document encoding asXMLStreamConverter] - ifFalse: [XMLStreamConverter default]); - nextPutByteOrderMark -] - -{ #category : #testing } -XMLNode >> isAttribute [ - ^ false -] - -{ #category : #testing } -XMLNode >> isCData [ - ^ false -] - -{ #category : #private } -XMLNode >> isCoalescingStringNode [ - ^ false -] - -{ #category : #testing } -XMLNode >> isComment [ - ^ false -] - -{ #category : #testing } -XMLNode >> isContentNode [ - "returns true if the receiver is a content node (an element or string node)" - - ^ false -] - -{ #category : #testing } -XMLNode >> isDeclaration [ - ^ false -] - -{ #category : #testing } -XMLNode >> isDocument [ - ^ false -] - -{ #category : #testing } -XMLNode >> isElement [ - ^ false -] - -{ #category : #testing } -XMLNode >> isElementNamed: aName [ - "returns true if the receiver is an element whose qualified name or local - name matches aName" - - ^ false -] - -{ #category : #testing } -XMLNode >> isElementNamedAny: aNameCollection [ - "returns true if the receiver is an element whose qualified name or local - name matches any name in aNameCollection" - - ^ false -] - -{ #category : #testing } -XMLNode >> isInLanguage: aLanguageTag [ - "Returns true if one of the ancestor elements of the receiver has an xml:lang - attribute, and if the value is an IETF language tag, like 'en-US', that matches - aLanguageTag. Matching is case-insensitive, and aLanguageTag can be partial, - like 'en', and use wildcards, like 'en-*'" - - ^ self hasParent - and: [self parent isInLanguage: aLanguageTag] -] - -{ #category : #testing } -XMLNode >> isPI [ - "returns true if the receiver is a processing instruction node" - - ^ false -] - -{ #category : #testing } -XMLNode >> isStringNode [ - ^ false -] - -{ #category : #testing } -XMLNode >> isStringNode: aStringOrStringNode [ - ^ false -] - -{ #category : #'instance creation' } -XMLNode >> newCData: aString [ - ^ self nodeFactory newCData: aString -] - -{ #category : #'instance creation' } -XMLNode >> newComment: aString [ - ^ self nodeFactory newComment: aString -] - -{ #category : #'instance creation' } -XMLNode >> newDocument [ - ^ self nodeFactory newDocument - configuration: self configuration -] - -{ #category : #'instance creation' } -XMLNode >> newElement [ - ^ self nodeFactory newElement - configuration: self configuration -] - -{ #category : #'instance creation' } -XMLNode >> newElementNamed: aName [ - ^ (self nodeFactory classForElement: aName) new - configuration: self configuration; - name: aName -] - -{ #category : #'instance creation' } -XMLNode >> newElementNamed: aName attributes: anAssociationCollection [ - ^ (self nodeFactory - classForElement: aName - attributes: anAssociationCollection) new - configuration: self configuration; - name: aName; - setAttributes: anAssociationCollection -] - -{ #category : #'instance creation' } -XMLNode >> newElementNamed: aName namespaceURI: aURI [ - ^ (self nodeFactory - classForElement: aName - namespaceURI: aURI) new - configuration: self configuration; - name: aName namespaceURI: aURI -] - -{ #category : #'instance creation' } -XMLNode >> newElementNamed: aName namespaceURI: aURI attributes: anAssociationCollection [ - ^ (self nodeFactory - classForElement: aName - namespaceURI: aURI - attributes: anAssociationCollection) new - configuration: self configuration; - name: aName namespaceURI: aURI; - setAttributes: anAssociationCollection -] - -{ #category : #'instance creation' } -XMLNode >> newListForCollect [ - "collect can return non-nodes, so a basic ordered list is used" - ^ XMLOrderedList new: 10 -] - -{ #category : #'instance creation' } -XMLNode >> newListForSelect [ - "select returns only nodes, so a node list is used" - ^ XMLNodeList new: 10 -] - -{ #category : #'instance creation' } -XMLNode >> newPI [ - ^ self nodeFactory newPI -] - -{ #category : #'instance creation' } -XMLNode >> newPITarget: aTargetString data: aDataString [ - ^ self nodeFactory - newPITarget: aTargetString - data: aDataString -] - -{ #category : #'instance creation' } -XMLNode >> newStringNode: aString [ - ^ self nodeFactory newStringNode: aString -] - -{ #category : #accessing } -XMLNode >> nextNode [ - "returns the first node after this one that is a child of the same parent (the next - sibling) or nil if there isn't one" - - ^ self parent ifNotNil: [:node | node nodeAfter: self] -] - -{ #category : #accessing } -XMLNode >> nodeFactory [ - ^ self configuration - ifNil: [XMLNodeFactory new] - ifNotNil: [:config | config nodeFactory] -] - -{ #category : #accessing } -XMLNode >> parent [ - "returns the parent node of this node or nil if there isn't one" - - ^ parent -] - -{ #category : #private } -XMLNode >> parent: aNode [ - parent := aNode -] - -{ #category : #defaults } -XMLNode >> parserHandlerClass [ - ^ self configuration - ifNil: [XMLDOMParser] - ifNotNil: [:config | config parserHandlerClass] -] - -{ #category : #copying } -XMLNode >> postCopy [ - super postCopy. - - parent := nil. -] - -{ #category : #copying } -XMLNode >> postCopyConfiguration [ -] - -{ #category : #printing } -XMLNode >> prettyPrintOn: aStream [ - "Prints XML on aStream with whitespace formatting for readability" - - self - printOn: aStream - beforeWritingDo: [:writer | writer enablePrettyPrinting] -] - -{ #category : #printing } -XMLNode >> prettyPrintToFileNamed: aFileName [ - "Prints XML to the file aFileName with whitespace formatting for readability" - - self - printToFileNamed: aFileName - beforeWritingDo: [:writer | writer enablePrettyPrinting] -] - -{ #category : #printing } -XMLNode >> prettyPrinted [ - "Prints XML with whitespace formatting for readability" - - ^ String streamContents: [:stream | self prettyPrintOn: stream] -] - -{ #category : #accessing } -XMLNode >> previousNode [ - "returns the first node before this one that is a child of the same parent - (the preivous sibling) or nil if there isn't one" - - ^ self parent ifNotNil: [:node | node nodeBefore: self] -] - -{ #category : #printing } -XMLNode >> printContentOn: aStream [ - "Prints on aStream the combined content strings of all descendants with - space inserted when one string has no trailing space and the next has - no leading space. - - See also #printRawContentOn:" - - self printRawContentOn: (XMLNodeContentWriteStreamAdapter on: aStream) -] - -{ #category : #printing } -XMLNode >> printOn: aStream [ - "Uses XMLWriter if supported to print XML on aStream, uses the - basic Object>>printOn: otherwise" - - self - withNewXMLWriterOn: aStream - do: [:writer | - self writeXMLOn: writer. - writer write] - whenAbsent: [super printOn: aStream] -] - -{ #category : #printing } -XMLNode >> printOn: aStream beforeWritingDo: aBlock [ - "Prints XML on aStream using an XMLWriter object it creates but first - evaluates aBlock with the XMLWriter so it can be configured before writing. - - Raises an error without XMLWriter support." - - self - withNewXMLWriterOn: aStream - do: [:writer | - aBlock value: writer. - self writeXMLOn: writer. - writer write] -] - -{ #category : #printing } -XMLNode >> printRawContentOn: aStream [ - "Prints on aStream the content strings of all descendants - without spaces inserted. - - See also #printContentOn:" -] - -{ #category : #printing } -XMLNode >> printToFileNamed: aFileName [ - "Prints XML to the file aFileName. Uses the encoding specified in the - document's encoding attribute if supported or UTF-8 otherwise." - - self - withNewWriteStreamOnFileNamed: aFileName - do: [:writeStream | - self - printOn: writeStream - beforeWritingDo: [:writer | - "use the platform's line break because we're writing to a file" - writer enablePlatformSpecificLineBreak]] -] - -{ #category : #printing } -XMLNode >> printToFileNamed: aFileName beforeWritingDo: aBlock [ - "Prints XML to the file aFileName after evaluating aBlock with the XMLWriter. - Uses the encoding specified in the document's encoding attribute if - supported or UTF-8 otherwise." - - self - withNewWriteStreamOnFileNamed: aFileName - do: [:writeStream | - self - printOn: writeStream - beforeWritingDo: [:writer | - "use the platform's line break because we're writing to a file" - writer enablePlatformSpecificLineBreak. - aBlock value: writer]] -] - -{ #category : #printing } -XMLNode >> printWithoutSelfClosingTagsOn: aStream [ - "Prints XML on aStream with empty elements rendered as '' - instead of self-closing '' tags" - - self - printOn: aStream - beforeWritingDo: [:writer | writer outputsSelfClosingTags: false] -] - -{ #category : #printing } -XMLNode >> printWithoutSelfClosingTagsToFileNamed: aFileName [ - "Prints XML to the file aFileName with empty elements rendered - as '' instead of self-closing '' tags" - - self - printToFileNamed: aFileName - beforeWritingDo: [:writer | writer outputsSelfClosingTags: false] -] - -{ #category : #printing } -XMLNode >> printedWithoutSelfClosingTags [ - "Prints XML with empty elements rendered as '' instead - of self-closing '' tags" - - ^ String streamContents: [:stream | self printWithoutSelfClosingTagsOn: stream] -] - -{ #category : #accessing } -XMLNode >> rawContentString [ - "Returns a combined string of all descendant string values without any spaces - inserted for readability. - - See also #contentString" - - ^ String streamContents: [:stream | self printRawContentOn: stream] -] - -{ #category : #accessing } -XMLNode >> sortKey [ - "used to compare nodes when sorting" - - ^ self class name asString -] - -{ #category : #validating } -XMLNode >> validate [ - "revalidate against the DTD it was parsed with (if any)" - - self document ifNotNil: [:document | document validate] -] - -{ #category : #validating } -XMLNode >> validateWith: aValidator [ - "revalidate against a custom DTD or other validator" - - self document ifNotNil: [:document | document validateWith: aValidator] -] - -{ #category : #private } -XMLNode >> withNewWriteStreamOnFileNamed: aFileName do: aBlock [ - aFileName asXMLFileHandle writeStreamDo: [:writeStream | - self initializeFileWriteStream: writeStream. - aBlock value: writeStream] -] - -{ #category : #private } -XMLNode >> withNewXMLWriterOn: aStream do: aOneArgBlock [ - ^ self - withNewXMLWriterOn: aStream - do: aOneArgBlock - whenAbsent: [self errorXMLWritingUnsupported] -] - -{ #category : #private } -XMLNode >> withNewXMLWriterOn: aStream do: aOneArgBlock whenAbsent: aZeroArgBlock [ - | writer | - - writer := - (self xmlWriterClassOrNil - ifNil: [^ aZeroArgBlock value]) on: aStream. - self escapesContentEntitiesWhenWriting - ifFalse: [writer escapesContentEntityReferences: false]. - ^ aOneArgBlock value: writer. -] - -{ #category : #printing } -XMLNode >> writeXMLOn: aWriter [ - "Template method used by nodes to write themselves on XMLWriters. - - Sending with a customized XMLWriter instance as the argument can be used - to customize printing, but #printOn:beforeWritingDo: should be preferred." -] - -{ #category : #defaults } -XMLNode >> xmlWriterClassOrNil [ - "can be overridden to return a custom XMLWriter subclass" - - ^ XMLClassFinder classNamed: #XMLWriter -] diff --git a/src/XML-Parser/XMLNodeContentWriteStreamAdapter.class.st b/src/XML-Parser/XMLNodeContentWriteStreamAdapter.class.st deleted file mode 100644 index 44904245d..000000000 --- a/src/XML-Parser/XMLNodeContentWriteStreamAdapter.class.st +++ /dev/null @@ -1,36 +0,0 @@ -" -A write stream adapter for writing node content with whitespace insertion if needed between writes. -" -Class { - #name : #XMLNodeContentWriteStreamAdapter, - #superclass : #XMLWriteStreamAdapter, - #instVars : [ - 'lastChar' - ], - #category : #'XML-Parser-Streams' -} - -{ #category : #private } -XMLNodeContentWriteStreamAdapter >> insertSpaceBefore: aCharacter [ - (lastChar == nil - or: [lastChar isXMLWhitespace - or: [aCharacter isXMLWhitespace]]) - ifFalse: [stream nextPut: SpaceCharacter] -] - -{ #category : #accessing } -XMLNodeContentWriteStreamAdapter >> nextPut: aCharacter [ - self insertSpaceBefore: aCharacter. - stream nextPut: aCharacter. - ^ lastChar := aCharacter. -] - -{ #category : #accessing } -XMLNodeContentWriteStreamAdapter >> nextPutAll: aString [ - aString size > 0 "optimization" - ifTrue: [ - self insertSpaceBefore: aString first. - stream nextPutAll: aString. - lastChar := aString last]. - ^ aString. -] diff --git a/src/XML-Parser/XMLNodeFactory.class.st b/src/XML-Parser/XMLNodeFactory.class.st deleted file mode 100644 index 6def31c1f..000000000 --- a/src/XML-Parser/XMLNodeFactory.class.st +++ /dev/null @@ -1,208 +0,0 @@ -" -This class is the default node factory. Its accessor messages return the classes used by the DOM parser to build a node tree. You can override these messages to return different classes and inject an instance with the DOM parser's #nodeFactory: message before parsing. -" -Class { - #name : #XMLNodeFactory, - #superclass : #Object, - #category : #'XML-Parser-DOM' -} - -{ #category : #converting } -XMLNodeFactory >> asPluggableNodeFactory [ - ^ XMLPluggableNodeFactory new -] - -{ #category : #accessing } -XMLNodeFactory >> attributeDeclarationClass [ - ^ XMLAttributeDeclaration -] - -{ #category : #accessing } -XMLNodeFactory >> attributeListClass [ - ^ XMLCachingAttributeList -] - -{ #category : #accessing } -XMLNodeFactory >> cdataClass [ - "Can be overridden to return a custom XMLCData subclass." - - ^ XMLCData -] - -{ #category : #accessing } -XMLNodeFactory >> classForElement: aQualifiedName [ - ^ self elementClass -] - -{ #category : #accessing } -XMLNodeFactory >> classForElement: aQualifiedName attributes: anAssociationCollection [ - ^ self elementClass -] - -{ #category : #accessing } -XMLNodeFactory >> classForElement: aQualifiedName namespaceURI: aURI [ - ^ self elementClass -] - -{ #category : #accessing } -XMLNodeFactory >> classForElement: aQualifiedName namespaceURI: aURI attributes: anAssociationCollection [ - ^ self elementClass -] - -{ #category : #accessing } -XMLNodeFactory >> classForElement: aQualifiedName namespaceURI: aURI localName: aLocalName attributes: anAssociationCollection [ - ^ self elementClass -] - -{ #category : #accessing } -XMLNodeFactory >> commentClass [ - "Can be overridden to return a custom XMLComment subclass." - - ^ XMLComment -] - -{ #category : #accessing } -XMLNodeFactory >> doctypeDeclarationClass [ - ^ XMLDoctypeDeclaration -] - -{ #category : #accessing } -XMLNodeFactory >> documentClass [ - "Can be overridden to return a custom XMLDocument subclass." - - ^ XMLDocument -] - -{ #category : #accessing } -XMLNodeFactory >> elementClass [ - "Can be overridden to return a custom XMLElement subclass." - - ^ XMLElement -] - -{ #category : #accessing } -XMLNodeFactory >> elementDeclarationClass [ - ^ XMLElementDeclaration -] - -{ #category : #accessing } -XMLNodeFactory >> generalEntityDeclarationClass [ - ^ XMLGeneralEntityDeclaration -] - -{ #category : #'instance creation' } -XMLNodeFactory >> newCData: aString [ - ^ self cdataClass string: aString -] - -{ #category : #'instance creation' } -XMLNodeFactory >> newComment: aString [ - ^ self commentClass string: aString -] - -{ #category : #'instance creation' } -XMLNodeFactory >> newDocument [ - ^ self documentClass new -] - -{ #category : #'instance creation' } -XMLNodeFactory >> newElement [ - ^ self elementClass new -] - -{ #category : #'instance creation' } -XMLNodeFactory >> newElementNamed: aName [ - ^ (self classForElement: aName) - named: aName -] - -{ #category : #'instance creation' } -XMLNodeFactory >> newElementNamed: aName attributes: anAssociationCollection [ - ^ (self - classForElement: aName - attributes: anAssociationCollection) - name: aName - attributes: anAssociationCollection -] - -{ #category : #'instance creation' } -XMLNodeFactory >> newElementNamed: aName namespaceURI: aURI [ - ^ (self - classForElement: aName - namespaceURI: aURI) - name: aName - namespaceURI: aURI -] - -{ #category : #'instance creation' } -XMLNodeFactory >> newElementNamed: aName namespaceURI: aURI attributes: anAssociationCollection [ - ^ (self - classForElement: aName - namespaceURI: aURI - attributes: anAssociationCollection) - name: aName - namespaceURI: aURI - attributes: anAssociationCollection -] - -{ #category : #'instance creation' } -XMLNodeFactory >> newPI [ - ^ self piClass new -] - -{ #category : #'instance creation' } -XMLNodeFactory >> newPITarget: aTargetString data: aDataString [ - ^ self newPI - target: aTargetString; - data: aDataString -] - -{ #category : #deprecated } -XMLNodeFactory >> newString: aString [ - "will be deprecated; use #newStringNode: instead" - - ^ self newStringNode: aString -] - -{ #category : #'instance creation' } -XMLNodeFactory >> newStringNode: aString [ - ^ self stringNodeClass new string: aString -] - -{ #category : #accessing } -XMLNodeFactory >> nodeListClass [ - ^ XMLNodeList -] - -{ #category : #accessing } -XMLNodeFactory >> notationDeclarationClass [ - ^ XMLNotationDeclaration -] - -{ #category : #accessing } -XMLNodeFactory >> parameterEntityDeclarationClass [ - ^ XMLParameterEntityDeclaration -] - -{ #category : #accessing } -XMLNodeFactory >> piClass [ - "Can be overridden to return a custom XMLPI subclass." - - ^ XMLPI -] - -{ #category : #deprecated } -XMLNodeFactory >> stringClass [ - "will be deprecated; use #stringNodeClass instead" - - ^ XMLString -] - -{ #category : #accessing } -XMLNodeFactory >> stringNodeClass [ - "Can be overridden to return a custom XMLString subclass." - - "for now this delegates to the soft-deprecated #stringClass to not - break custom subclasses that override it expecting it to be sent" - ^ self stringClass -] diff --git a/src/XML-Parser/XMLNodeList.class.st b/src/XML-Parser/XMLNodeList.class.st deleted file mode 100644 index caeed71c4..000000000 --- a/src/XML-Parser/XMLNodeList.class.st +++ /dev/null @@ -1,289 +0,0 @@ -" -This class represents an ordered list of child nodes for an XML document or element. Non-modifying accessing messages like #first and #last return nil instead of raising exceptions. -" -Class { - #name : #XMLNodeList, - #superclass : #XMLObservableList, - #category : #'XML-Parser-DOM' -} - -{ #category : #'instance creation' } -XMLNodeList class >> new [ - ^ self new: 5 -] - -{ #category : #private } -XMLNodeList >> afterAdding: aNode at: anIndex [ - (aNode hasParentWithNodeList: self) - ifTrue: [ - self - removeDuplicateOf: aNode - notAt: anIndex] - ifFalse: [ - observer - ifNotNil: [observer addedNode: aNode]] -] - -{ #category : #private } -XMLNodeList >> afterAddingLast: aNode [ - (aNode hasParentWithNodeList: self) - ifTrue: [ - self - removeDuplicateOf: aNode - notAt: self size] - ifFalse: [ - observer - ifNotNil: [observer addedNode: aNode]] -] - -{ #category : #private } -XMLNodeList >> afterAddingToCopyLast: aNode [ - observer - ifNotNil: [observer addedNode: aNode] -] - -{ #category : #private } -XMLNodeList >> afterRemoving: aNode [ - observer - ifNotNil: [observer removedNode: aNode] -] - -{ #category : #accessing } -XMLNodeList >> contentNodes [ - ^ self select: [:each | each isContentNode] -] - -{ #category : #enumerating } -XMLNodeList >> contentNodesDo: aBlock [ - self do: [:each | - each isContentNode - ifTrue: [aBlock value: each]] -] - -{ #category : #accessing } -XMLNodeList >> contentStringAt: aName [ - ^ (self - elementAt: aName - ifAbsent: [^ '']) contentString -] - -{ #category : #accessing } -XMLNodeList >> elementAfter: anElement [ - | last | - - self elementsDo: [:each | - last = anElement - ifTrue: [^ each]. - last := each]. - ^ self defaultValue. -] - -{ #category : #accessing } -XMLNodeList >> elementAt: aName [ - ^ self - elementAt: aName - ifAbsent: [self defaultValue] -] - -{ #category : #accessing } -XMLNodeList >> elementAt: aName ifAbsent: aBlock [ - self elementsDo: [:each | - (each isNamed: aName) - ifTrue: [^ each]]. - ^ aBlock value. -] - -{ #category : #accessing } -XMLNodeList >> elementAt: aName namespaceURI: aURI [ - ^ self - elementAt: aName - namespaceURI: aURI - ifAbsent: [self defaultValue] -] - -{ #category : #accessing } -XMLNodeList >> elementAt: aName namespaceURI: aURI ifAbsent: aBlock [ - self - elementsAt: aName - do: [:each | - each namespaceURI = aURI - ifTrue: [^ each]]. - ^ aBlock value. -] - -{ #category : #accessing } -XMLNodeList >> elementBefore: anElement [ - | last | - - last := self defaultValue. - self elementsDo: [:each | - each = anElement - ifTrue: [^ last]. - last := each]. - ^ self defaultValue. -] - -{ #category : #accessing } -XMLNodeList >> elementNames [ - ^ self elementsCollect: [:each | each name] -] - -{ #category : #accessing } -XMLNodeList >> elements [ - ^ self select: [:each | each isElement] -] - -{ #category : #accessing } -XMLNodeList >> elementsAt: aName [ - ^ self elementsSelect: [:each | each isNamed: aName] -] - -{ #category : #enumerating } -XMLNodeList >> elementsAt: aName do: aBlock [ - self elementsDo: [:each | - (each isNamed: aName) - ifTrue: [aBlock value: each]] -] - -{ #category : #accessing } -XMLNodeList >> elementsAt: aName namespaceURI: aURI [ - ^ self elementsSelect: [:each | - (each isNamed: aName) - and: [each namespaceURI = aURI]] -] - -{ #category : #enumerating } -XMLNodeList >> elementsCollect: aBlock [ - | collectedElements | - - "implementing with #elementsDo: benefits the caching subclass because - of its fast #elementsDo: implementation" - collectedElements := self copyEmptyForCollect. - self elementsDo: [:each | - collectedElements addLast: (aBlock value: each)]. - ^ collectedElements. -] - -{ #category : #enumerating } -XMLNodeList >> elementsDetect: aBlock [ - ^ self - elementsDetect: aBlock - ifNone: [self defaultValue] -] - -{ #category : #enumerating } -XMLNodeList >> elementsDetect: aBlock ifNone: anExceptionBlock [ - "implementing with #elementsDo: benefits the caching subclass because - of its fast #elementsDo: implementation" - self elementsDo: [:each | - (aBlock value: each) - ifTrue: [^ each]]. - ^ anExceptionBlock value. -] - -{ #category : #enumerating } -XMLNodeList >> elementsDo: aBlock [ - "use #to:do: for performance, because so many methods rely on this" - 1 to: collection size do: [:i | | node | - (node := collection at: i) isElement - ifTrue: [aBlock value: node]] -] - -{ #category : #enumerating } -XMLNodeList >> elementsSelect: aBlock [ - | selectedElements | - - "implementing with #elementsDo: benefits the caching subclass because - of its fast #elementsDo: implementation" - selectedElements := self copyEmpty. - self elementsDo: [:each | - (aBlock value: each) - ifTrue: [selectedElements addToCopyLast: each]]. - ^ selectedElements. -] - -{ #category : #accessing } -XMLNodeList >> firstElement [ - self elementsDo: [:each | ^ each]. - ^ self defaultValue. -] - -{ #category : #testing } -XMLNodeList >> hasContentNodes [ - ^ self anySatisfy: [:each | each isContentNode] -] - -{ #category : #testing } -XMLNodeList >> hasElements [ - ^ self anySatisfy: [:each | each isElement] -] - -{ #category : #testing } -XMLNodeList >> hasStringNodes [ - ^ self anySatisfy: [:each | each isStringNode] -] - -{ #category : #testing } -XMLNodeList >> includesElement: aName [ - self - elementAt: aName - ifAbsent: [^ false]. - ^ true. -] - -{ #category : #testing } -XMLNodeList >> includesElement: aName namespaceURI: aURI [ - self - elementAt: aName - namespaceURI: aURI - ifAbsent: [^ false]. - ^ true. -] - -{ #category : #accessing } -XMLNodeList >> lastElement [ - self reverseDo: [:each | - each isElement - ifTrue: [^ each]]. - ^ self defaultValue. -] - -{ #category : #accessing } -XMLNodeList >> rawContentStringAt: aName [ - ^ (self - elementAt: aName - ifAbsent: [^ '']) rawContentString -] - -{ #category : #notifying } -XMLNodeList >> renamedElement: anElement from: anOldName to: aNewName [ -] - -{ #category : #sorting } -XMLNodeList >> sort [ - self sort: [:a :b | a sortKey <= b sortKey] -] - -{ #category : #accessing } -XMLNodeList >> stringNodes [ - ^ self select: [:each | each isStringNode] -] - -{ #category : #enumerating } -XMLNodeList >> stringNodesDo: aBlock [ - self do: [:each | - each isStringNode - ifTrue: [aBlock value: each]] -] - -{ #category : #accessing } -XMLNodeList >> strings [ - ^ self - select: [:each | each isStringNode] - thenCollect: [:each | each string] -] - -{ #category : #enumerating } -XMLNodeList >> stringsDo: aBlock [ - self stringNodesDo: [:each | aBlock value: each string] -] diff --git a/src/XML-Parser/XMLNodeVisitor.class.st b/src/XML-Parser/XMLNodeVisitor.class.st deleted file mode 100644 index 6e30b8af7..000000000 --- a/src/XML-Parser/XMLNodeVisitor.class.st +++ /dev/null @@ -1,52 +0,0 @@ -" -This is a base class for DOM node tree visitors. Subclasses can implement any of the ""visiting"" messages, and instances can be used by sending a node #acceptNodeVisitor: with it as the argument. -" -Class { - #name : #XMLNodeVisitor, - #superclass : #Object, - #category : #'XML-Parser-DOM' -} - -{ #category : #visiting } -XMLNodeVisitor >> visitCData: aCData [ - ^ self visitStringNode: aCData -] - -{ #category : #visiting } -XMLNodeVisitor >> visitComment: aComment [ - ^ aComment -] - -{ #category : #visiting } -XMLNodeVisitor >> visitDocument: aDocument [ - ^ self visitNodeWithElements: aDocument -] - -{ #category : #visiting } -XMLNodeVisitor >> visitElement: anElement [ - ^ self visitNodeWithElements: anElement -] - -{ #category : #visiting } -XMLNodeVisitor >> visitNode: aNode [ - ^ aNode acceptNodeVisitor: self -] - -{ #category : #visiting } -XMLNodeVisitor >> visitNodeWithElements: aNodeWithElements [ - aNodeWithElements hasChildren - ifTrue: [ - aNodeWithElements nodesDo: [:each | - each acceptNodeVisitor: self]]. - ^ aNodeWithElements. -] - -{ #category : #visiting } -XMLNodeVisitor >> visitPI: aPI [ - ^ aPI -] - -{ #category : #visiting } -XMLNodeVisitor >> visitStringNode: aStringNode [ - ^ aStringNode -] diff --git a/src/XML-Parser/XMLNodeWithChildren.class.st b/src/XML-Parser/XMLNodeWithChildren.class.st deleted file mode 100644 index 5904396da..000000000 --- a/src/XML-Parser/XMLNodeWithChildren.class.st +++ /dev/null @@ -1,467 +0,0 @@ -" -This is an abstract class for nodes that can contain child nodes. - -It has messages to access, add and remove child nodes. The nodes are stored in a kind of XMLObservableList returned by #nodes, which can be modified directly to add or remove nodes from the owner of #nodes (copy it first if that isn't what you want). - -There are three types of ""enumerating"" messages: the #nodes* messages enumerate child nodes of the receiver, the #allNode* forms enumerate (using depth-first traversal) the receiver and all descendant nodes, and the #descendantNode* forms enumerate only descendant nodes. -" -Class { - #name : #XMLNodeWithChildren, - #superclass : #XMLNode, - #instVars : [ - 'nodes' - ], - #category : #'XML-Parser-DOM' -} - -{ #category : #adding } -XMLNodeWithChildren >> addComment: aString [ - ^ self addNode: (self newComment: aString) -] - -{ #category : #adding } -XMLNodeWithChildren >> addNode: aNode [ - "Adds aNode to the end of the receiver's node list. Can be used for elements, - comments, and other types of nodes." - - ^ self nodes addLast: aNode -] - -{ #category : #adding } -XMLNodeWithChildren >> addNode: aNode after: aPreviousNode [ - "Adds aNode to the receiver's node list after aPreviousNode raising an - error if aPreviousNode is absent" - - ^ self nodes - add: aNode - after: aPreviousNode -] - -{ #category : #adding } -XMLNodeWithChildren >> addNode: aNode before: aNextNode [ - "Adds aNode to the receiver's node list before aNextNode raising an - error if aNextNode is absent" - - ^ self nodes - add: aNode - before: aNextNode -] - -{ #category : #adding } -XMLNodeWithChildren >> addNodeFirst: aNode [ - "Adds aNode to the begining of the receiver's node list. Can be used for - elements, comments, and other types of nodes." - - ^ self nodes addFirst: aNode -] - -{ #category : #adding } -XMLNodeWithChildren >> addNodes: aNodeCollection [ - ^ self nodes addAll: aNodeCollection -] - -{ #category : #adding } -XMLNodeWithChildren >> addPITarget: aTargetString data: aDataString [ - ^ self addNode: - (self - newPITarget: aTargetString - data: aDataString) -] - -{ #category : #notifying } -XMLNodeWithChildren >> addedNode: aNode [ - aNode parent - ifNotNil: [:nodeParent | - nodeParent == self - ifFalse: [nodeParent removeNode: aNode]]. - aNode parent: self. -] - -{ #category : #accessing } -XMLNodeWithChildren >> allNodes [ - "returns a node list with the receiver and all of its descendant nodes" - | allNodes | - - allNodes := self newListForSelect. - self allNodesDo: [:each | allNodes addLast: each]. - ^ allNodes. -] - -{ #category : #enumerating } -XMLNodeWithChildren >> allNodesCollect: aBlock [ - "returns an ordered list of the receiver and all of its descendant nodes - evaluated with aBlock" - | collectedObjects | - - collectedObjects := self newListForCollect. - self allNodesDo: [:each | collectedObjects addLast: (aBlock value: each)]. - ^ collectedObjects. -] - -{ #category : #enumerating } -XMLNodeWithChildren >> allNodesDetect: aBlock [ - ^ self allNodesDetect: aBlock ifNone: [nil] -] - -{ #category : #enumerating } -XMLNodeWithChildren >> allNodesDetect: aBlock ifNone: anExceptionBlock [ - self allNodesDo: [:each | - (aBlock value: each) - ifTrue: [^ each]]. - ^ anExceptionBlock value. -] - -{ #category : #enumerating } -XMLNodeWithChildren >> allNodesDo: aBlock [ - "evaluates aBlock for the receiver and all of its descendant nodes" - - aBlock value: self. - self hasChildren - ifTrue: [self nodesDo: [:each | each allNodesDo: aBlock]] -] - -{ #category : #enumerating } -XMLNodeWithChildren >> allNodesSelect: aBlock [ - | selectedNodes | - - selectedNodes := self newListForSelect. - self allNodesDo: [:each | - (aBlock value: each) - ifTrue: [selectedNodes addLast: each]]. - ^ selectedNodes. -] - -{ #category : #testing } -XMLNodeWithChildren >> canHaveChildren [ - ^ true -] - -{ #category : #accessing } -XMLNodeWithChildren >> descendantNodes [ - "returns a node list with all descendant nodes of the receiver" - | descendentNodes | - - descendentNodes := self newListForSelect. - self descendantNodesDo: [:each | descendentNodes addLast: each]. - ^ descendentNodes. -] - -{ #category : #enumerating } -XMLNodeWithChildren >> descendantNodesCollect: aBlock [ - "returns an ordered list of the values of all descendant nodes of the - receiver evaluated with aBlock" - | collectedObjects | - - collectedObjects := self newListForCollect. - self descendantNodesDo: [:each | - collectedObjects addLast: (aBlock value: each)]. - ^ collectedObjects. -] - -{ #category : #enumerating } -XMLNodeWithChildren >> descendantNodesDetect: aBlock [ - "returns the first descendant node of the receiver that aBlock evaluates - true for or nil if there isn't one" - - ^ self - descendantNodesDetect: aBlock - ifNone: [nil] -] - -{ #category : #enumerating } -XMLNodeWithChildren >> descendantNodesDetect: aBlock ifNone: anExceptionBlock [ - "returns the first descendant node of the receiver that aBlock evaluates - true for or the value of anExceptionBlock if there isn't one" - - self descendantNodesDo: [:each | - (aBlock value: each) - ifTrue: [^ each]]. - ^ anExceptionBlock value. -] - -{ #category : #enumerating } -XMLNodeWithChildren >> descendantNodesDo: aBlock [ - "evaluates aBlock for all descendant nodes of the receiver" - - self hasChildren - ifTrue: [self nodesDo: [:each | each allNodesDo: aBlock]] -] - -{ #category : #enumerating } -XMLNodeWithChildren >> descendantNodesSelect: aBlock [ - "returns a node list of all descendant nodes of the receiver that aBlock - evaluates true for" - | selectedNodes | - - selectedNodes := self newListForSelect. - self descendantNodesDo: [:each | - (aBlock value: each) - ifTrue: [selectedNodes addLast: each]]. - ^ selectedNodes. -] - -{ #category : #deprecated } -XMLNodeWithChildren >> descendentNodes [ - self deprecated: 'use #descendantNodes instead'. - ^ self descendantNodes. -] - -{ #category : #deprecated } -XMLNodeWithChildren >> descendentNodesCollect: aBlock [ - self deprecated: 'use #descendantNodesCollect: instead'. - ^ self descendantNodesCollect: aBlock. -] - -{ #category : #deprecated } -XMLNodeWithChildren >> descendentNodesDetect: aBlock [ - self deprecated: 'use #descendantNodesDetect: instead'. - ^ self descendantNodesDetect: aBlock. -] - -{ #category : #deprecated } -XMLNodeWithChildren >> descendentNodesDetect: aBlock ifNone: anExceptionBlock [ - self deprecated: 'use #descendantNodesDetect:ifNone: instead'. - ^ self - descendantNodesDetect: aBlock - ifNone: anExceptionBlock. -] - -{ #category : #deprecated } -XMLNodeWithChildren >> descendentNodesSelect: aBlock [ - self deprecated: 'use #descendantNodesSelect: instead'. - ^ self descendantNodesSelect: aBlock. -] - -{ #category : #accessing } -XMLNodeWithChildren >> firstNode [ - "returns the first child node of the receiver if it has one, nil otherwise" - - ^ self nodes first -] - -{ #category : #testing } -XMLNodeWithChildren >> hasChildren [ - "optimized with nil test and size check to avoid lazy initializing" - nodes == nil - ifTrue: [^ false]. - ^ nodes size > 0. -] - -{ #category : #private } -XMLNodeWithChildren >> hasNodeList: aNodeList [ - ^ nodes == aNodeList -] - -{ #category : #testing } -XMLNodeWithChildren >> includesNode: aNode [ - ^ self nodes includes: aNode -] - -{ #category : #accessing } -XMLNodeWithChildren >> innerXML [ - "Returns a string containing the XML source of all descendent nodes. - - See #innerXML:" - - ^ String streamContents: [:stream | self printInnerXMLOn: stream] -] - -{ #category : #accessing } -XMLNodeWithChildren >> innerXMLPrettyPrinted [ - "Pretty print version of #innerXML. - - See #innerXML:" - - ^ String streamContents: [:stream | - self - printInnerXMLOn: stream - beforeWritingDo: [:writer | writer enablePrettyPrinting]] -] - -{ #category : #accessing } -XMLNodeWithChildren >> lastNode [ - "returns the last child node of the receiver if it has one, nil otherwise" - - ^ self nodes last -] - -{ #category : #accessing } -XMLNodeWithChildren >> nodeAfter: aNode [ - "returns the first child node of the receiver after aNode or nil if there - isn't one" - - ^ self nodes after: aNode -] - -{ #category : #accessing } -XMLNodeWithChildren >> nodeAt: anIndex [ - "returns the child node at position anIndex or nil if there isn't one" - - ^ self nodes at: anIndex -] - -{ #category : #accessing } -XMLNodeWithChildren >> nodeAt: anIndex ifAbsent: aBlock [ - "returns the child node at position anIndex or the value of aBlock - if there isn't one" - - ^ self nodes - at: anIndex - ifAbsent: aBlock -] - -{ #category : #accessing } -XMLNodeWithChildren >> nodeAt: anIndex put: aNode [ - "replaces the child node at anIndex with aNode, raising an error if - anIndex is outside the current range of the node list" - - ^ self nodes - at: anIndex - put: aNode -] - -{ #category : #accessing } -XMLNodeWithChildren >> nodeBefore: aNode [ - "returns the first child node of the receiver before aNode or nil if there - isn't one" - - ^ self nodes before: aNode -] - -{ #category : #defaults } -XMLNodeWithChildren >> nodeListClass [ - ^ XMLNodeList -] - -{ #category : #accessing } -XMLNodeWithChildren >> nodes [ - "returns the internal node list; safe to modify, but adding or removing nodes - from it will have the effect of adding or removing them from the receiver" - - ^ nodes ifNil: [nodes := self nodeListClass observer: self] -] - -{ #category : #enumerating } -XMLNodeWithChildren >> nodesCollect: aBlock [ - "returns an ordered list of the values of all node children of the - receiver evaluated with aBlock" - - ^ self nodes collect: aBlock -] - -{ #category : #enumerating } -XMLNodeWithChildren >> nodesDetect: aBlock [ - ^ self nodes detect: aBlock -] - -{ #category : #enumerating } -XMLNodeWithChildren >> nodesDetect: aBlock ifNone: anExceptionBlock [ - ^ self nodes detect: aBlock ifNone: anExceptionBlock -] - -{ #category : #enumerating } -XMLNodeWithChildren >> nodesDo: aBlock [ - "evaluates aBlock for all child nodes of the receiver" - - self nodes do: aBlock -] - -{ #category : #enumerating } -XMLNodeWithChildren >> nodesSelect: aBlock [ - "returns a node list of all node children of the receiver that aBlock - evaluates true for" - - ^ self nodes select: aBlock -] - -{ #category : #copying } -XMLNodeWithChildren >> postCopy [ - super postCopy. - - nodes - ifNotNil: [| copiedNodes | - copiedNodes := nodes copyEmpty observer: self. - nodes do: [:each | - "copySharingConfiguration is used so the config is only ever copied - once when an element or doc is sent #copy and is done after all of the - descendants have been copied" - copiedNodes addLast: each copySharingConfiguration]. - nodes := copiedNodes]. -] - -{ #category : #printing } -XMLNodeWithChildren >> printInnerXMLOn: aStream [ - self hasChildren - ifTrue: [ - self - withNewXMLWriterOn: aStream - do: [:writer | - self writeInnerXMLOn: writer]] -] - -{ #category : #printing } -XMLNodeWithChildren >> printInnerXMLOn: aStream beforeWritingDo: aBlock [ - self hasChildren - ifTrue: [ - self - withNewXMLWriterOn: aStream - do: [:writer | - aBlock value: writer. - self writeInnerXMLOn: writer. - writer write]] -] - -{ #category : #removing } -XMLNodeWithChildren >> removeNode: aNode [ - ^ self nodes remove: aNode -] - -{ #category : #removing } -XMLNodeWithChildren >> removeNode: aNode ifAbsent: aBlock [ - ^ self nodes remove: aNode ifAbsent: aBlock -] - -{ #category : #removing } -XMLNodeWithChildren >> removeNodes [ - self nodes removeAll -] - -{ #category : #removing } -XMLNodeWithChildren >> removeNodes: aNodeCollection [ - ^ self nodes removeAll: aNodeCollection -] - -{ #category : #notifying } -XMLNodeWithChildren >> removedNode: aNode [ - aNode parent: nil -] - -{ #category : #accessing } -XMLNodeWithChildren >> replaceNode: aNode with: aReplacementNode [ - "replaces aNode in the receiver with aReplacementNode, or if aReplacementNode - is already a child of the receiver, just swaps their locations" - - | firstIndex secondIndex | - - firstIndex := self nodes indexOf: aNode. - (secondIndex := self nodes indexOf: aReplacementNode) > 0 - ifTrue: [ - self nodes - swap: firstIndex - with: secondIndex] - ifFalse: [ - self nodes - at: firstIndex - put: aReplacementNode]. - ^ aReplacementNode. -] - -{ #category : #printing } -XMLNodeWithChildren >> writeInnerXMLOn: aWriter [ - self nodesDo: [:each | each writeXMLOn: aWriter] -] - -{ #category : #printing } -XMLNodeWithChildren >> writeXMLOn: aWriter [ - self writeInnerXMLOn: aWriter -] diff --git a/src/XML-Parser/XMLNodeWithElements.class.st b/src/XML-Parser/XMLNodeWithElements.class.st deleted file mode 100644 index 3f278e264..000000000 --- a/src/XML-Parser/XMLNodeWithElements.class.st +++ /dev/null @@ -1,1019 +0,0 @@ -" -This is an abstract class for nodes with elements. - -Instances provide ""accessing"" messages to retrieve child elements by their name and namespace information. The #elementAt: forms return the first matching element, while the #elementsAt: forms return all matching child elements. - -There are three different modes of enumeration: the #elements* enumerating messages enumerate child elements, the #allElements* forms enumerate the receiver (if it's an element) and all descendant elements, and the #descendantElement* forms enumerate descendant elements only. - -The #findElementNamed:* forms search the receicer (if it's an element) and descendants for a specific element. - -Element name matching is done the qualified and local name, so 'prefix:element-name' will only match 'prefix:element-name' while 'element-name' will match 'element-name', 'prefix:element-name' or 'different-prefix:element-name' and so on. - -The inner XML can be accessed as a string using #innerXML and set (reparsed) using #innerXML:. -" -Class { - #name : #XMLNodeWithElements, - #superclass : #XMLNodeWithChildren, - #instVars : [ - 'configuration' - ], - #category : #'XML-Parser-DOM' -} - -{ #category : #visiting } -XMLNodeWithElements >> acceptNodeVisitor: aNodeVisitor [ - ^ aNodeVisitor visitNodeWithElements: self -] - -{ #category : #adding } -XMLNodeWithElements >> addCData: aString [ - ^ self addNode: (self newCData: aString) -] - -{ #category : #deprecated } -XMLNodeWithElements >> addContent: aStringOrStringNode [ - "will be deprecated; use #addString: instead" - - (self hasChildren - and: [self lastNode isCoalescingStringNode]) - ifTrue: [self lastNode append: aStringOrStringNode] - ifFalse: [self addNode: - (aStringOrStringNode isString - ifTrue: [self nodeFactory newStringNode: aStringOrStringNode] - ifFalse: [aStringOrStringNode])]. - "returns self for backwards compatibility" -] - -{ #category : #deprecated } -XMLNodeWithElements >> addElement: anElement [ - self deprecated: - 'Use #addNode: with an element argument or #addElementNamed: instead'. - - self addNode: anElement. - "returns self for backwards compatibility" -] - -{ #category : #adding } -XMLNodeWithElements >> addElementNamed: aName [ - "adds and returns a new element with the specified name" - - | addedElementNamespaceScope addedElementNamespaceURI addedElement | - - addedElementNamespaceScope := self newNamespaceScopeForAddedElement. - addedElementNamespaceURI := - self - namespaceURIOfAddedElementNamed: aName - withScope: addedElementNamespaceScope. - "added first to inherit the config before setting the name" - addedElement := - self addNode: - ((self nodeFactory - classForElement: aName - namespaceURI: addedElementNamespaceURI) new - setNamespaceScope: addedElementNamespaceScope). - ^ addedElement name: aName. -] - -{ #category : #adding } -XMLNodeWithElements >> addElementNamed: aName attributes: anAssociationCollection [ - "adds and returns a new element with the specified name and attributes" - - | addedElementNamespaceScope addedElementNamespaceURI addedElementAttributeDictionary addedElement | - - addedElementNamespaceScope := self newNamespaceScopeForAddedElement. - addedElementNamespaceURI := - self - namespaceURIOfAddedElementNamed: aName - withScope: addedElementNamespaceScope. - addedElementAttributeDictionary := - self - newAttributeDictionaryFrom: anAssociationCollection - forAddedElementWithScope: addedElementNamespaceScope. - "added first to inherit the config before setting the name and attributes" - addedElement := - self addNode: - ((self nodeFactory - classForElement: aName - namespaceURI: addedElementNamespaceURI - attributes: addedElementAttributeDictionary) new - setNamespaceScope: addedElementNamespaceScope). - ^ addedElement - name: aName; - setAttributes: addedElementAttributeDictionary. -] - -{ #category : #adding } -XMLNodeWithElements >> addElementNamed: aName namespaceURI: aURI [ - "adds and returns a new element with the specified name and namespace - URI" - - | addedElementNamespaceScope addedElement | - - addedElementNamespaceScope := - self - newNamespaceScopeForAddedElementNamed: aName - namespaceURI: aURI. - "added first to inherit the config before setting the name" - addedElement := - self addNode: - ((self nodeFactory - classForElement: aName - namespaceURI: aURI) new - setNamespaceScope: addedElementNamespaceScope). - ^ addedElement name: aName. -] - -{ #category : #adding } -XMLNodeWithElements >> addElementNamed: aName namespaceURI: aURI attributes: anAssociationCollection [ - "adds and returns a new element with the specified name, namespace URI, - and attributes" - - | addedElementNamespaceScope addedElementAttributeDictionary addedElement | - - addedElementNamespaceScope := - self - newNamespaceScopeForAddedElementNamed: aName - namespaceURI: aURI. - addedElementAttributeDictionary := - self - newAttributeDictionaryFrom: anAssociationCollection - forAddedElementWithScope: addedElementNamespaceScope. - "added first to inherit the config before setting the name and attributes" - addedElement := - self addNode: - ((self nodeFactory - classForElement: aName - namespaceURI: aURI - attributes: addedElementAttributeDictionary) new - setNamespaceScope: addedElementNamespaceScope). - ^ addedElement - name: aName; - setAttributes: addedElementAttributeDictionary. -] - -{ #category : #adding } -XMLNodeWithElements >> addString: aString [ - "Adds a new string node for aString or just appends aString to the - last node if it's a coalescing string node (not CDATA). - - Returns the new string node or the string node appeneded to." - - | lastNode | - - (self hasChildren - and: [(lastNode := self lastNode) isCoalescingStringNode]) - ifTrue: [^ lastNode append: aString] - ifFalse: [^ self addNode: (self nodeFactory newStringNode: aString)] -] - -{ #category : #private } -XMLNodeWithElements >> addedElement: anElement [ -] - -{ #category : #notifying } -XMLNodeWithElements >> addedNode: aNode [ - super addedNode: aNode. - aNode isElement - ifTrue: [ - aNode configuration: self configuration. - self addedElement: aNode]. -] - -{ #category : #accessing } -XMLNodeWithElements >> allElements [ - "returns a node list with all descendant elements (and the receiver if - it's an element)" - | allElements | - - allElements := self newListForSelect. - self allElementsDo: [:each | allElements addLast: each]. - ^ allElements. -] - -{ #category : #enumerating } -XMLNodeWithElements >> allElementsCollect: aBlock [ - "returns an ordered list of the values of evaluating all descendant - elements (and the receiver if it's an element) with aBlock" - | collectedObjects | - - collectedObjects := self newListForCollect. - self allElementsDo: [:each | collectedObjects addLast: (aBlock value: each)]. - ^ collectedObjects. -] - -{ #category : #enumerating } -XMLNodeWithElements >> allElementsDetect: aBlock [ - "Descend depth-first visiting each element with aBlock until one such evaluation - of aBlock with an element is true, then return that element. If no evaluation is - true, then return nil." - - ^ self allElementsDetect: aBlock ifNone: [nil] -] - -{ #category : #enumerating } -XMLNodeWithElements >> allElementsDetect: aBlock ifNone: anExceptionBlock [ - "Descend depth-first visiting each element with aBlock until one such evaluation - of aBlock with an element is true, then return that element. If no evaluation is - true, then return the value of anExceptionBlock." - - self allElementsDo: [:each | - (aBlock value: each) - ifTrue: [^ each]]. - ^ anExceptionBlock value. -] - -{ #category : #enumerating } -XMLNodeWithElements >> allElementsDo: aBlock [ - "evaluates all descendant elements (and the receiver if it's an - element) with aBlock" - - self hasChildren - ifTrue: [self elementsDo: [:each | each allElementsDo: aBlock]] -] - -{ #category : #accessing } -XMLNodeWithElements >> allElementsNamed: aName [ - "returns a node list with all descendant elements (and the receiver if - it's an element) whose qualified or local names match aName" - - ^ self allElementsSelect: [:each | each isNamed: aName] -] - -{ #category : #enumerating } -XMLNodeWithElements >> allElementsNamed: aName do: aBlock [ - "evaluates all descendant elements (and the receiver if it's an - element) whose qualified or local names match aName with aBlock" - - self allElementsDo: [:each | - (each isNamed: aName) - ifTrue: [aBlock value: each]] -] - -{ #category : #accessing } -XMLNodeWithElements >> allElementsNamed: aName namespaceURI: aURI [ - "returns a node list with all descendant elements (and the receiver if - it's an element) whose qualified or local names match aName and whose - namespace URIs matches aURI" - - ^ self allElementsSelect: [:each | - (each isNamed: aName) - and: [each namespaceURI = aURI]] -] - -{ #category : #enumerating } -XMLNodeWithElements >> allElementsSelect: aBlock [ - "returns a new node list with all descendant elements (and the receiver - if it's an element) that aBlock evaluates true for" - - | selectedElements | - - selectedElements := self newListForSelect. - self allElementsDo: [:each | - (aBlock value: each) - ifTrue: [selectedElements addLast: each]]. - ^ selectedElements. -] - -{ #category : #accessing } -XMLNodeWithElements >> configuration [ - ^ configuration ifNil: [ - self configuration: self configurationClass new. - configuration] -] - -{ #category : #accessing } -XMLNodeWithElements >> configuration: aConfiguration [ - configuration := aConfiguration. - self hasChildren - ifTrue: [ - self elementsDo: [:each | - each configuration: aConfiguration]]. -] - -{ #category : #defaults } -XMLNodeWithElements >> configurationClass [ - ^ XMLDOMConfiguration -] - -{ #category : #accessing } -XMLNodeWithElements >> contentNodes [ - "returns a node list of the receiver's element and string node children" - - ^ self nodes contentNodes -] - -{ #category : #enumerating } -XMLNodeWithElements >> contentNodesDo: aBlock [ - "evaluates aBlock for all element and string node children of the receiver" - - self nodes contentNodesDo: aBlock -] - -{ #category : #deprecated } -XMLNodeWithElements >> contentString: aString [ - "will be deprecated; use #removeNodes and #addString: instead" - - self - removeNodes; - addString: aString -] - -{ #category : #accessing } -XMLNodeWithElements >> contentStringAt: aName [ - "Returns the content string of the first element child of the receiver - whose qualified or local name matches aName or an empty string if there - isn't one. - - See also #rawContentStringAt:" - - ^ self nodes contentStringAt: aName -] - -{ #category : #accessing } -XMLNodeWithElements >> descendantElements [ - "returns a node list of all descendant elements" - | descendentElements | - - descendentElements := self newListForSelect. - self descendantElementsDo: [:each | descendentElements addLast: each]. - ^ descendentElements. -] - -{ #category : #enumerating } -XMLNodeWithElements >> descendantElementsCollect: aBlock [ - "returns an ordered list of the values of evaluating all descendant - elements with aBlock" - | collectedObjects | - - collectedObjects := self newListForCollect. - self descendantElementsDo: [:each | - collectedObjects addLast: (aBlock value: each)]. - ^ collectedObjects. -] - -{ #category : #enumerating } -XMLNodeWithElements >> descendantElementsDetect: aBlock [ - "returns the first descendant element that aBlock evaluates true for or - nil if there isn't one" - - ^ self - descendantElementsDetect: aBlock - ifNone: [nil] -] - -{ #category : #enumerating } -XMLNodeWithElements >> descendantElementsDetect: aBlock ifNone: anExceptionBlock [ - "returns the first descendant element that aBlock evaluates true for or - the value of anExceptionBlock if there isn't one" - - self descendantElementsDo: [:each | - (aBlock value: each) - ifTrue: [^ each]]. - ^ anExceptionBlock value. -] - -{ #category : #enumerating } -XMLNodeWithElements >> descendantElementsDo: aBlock [ - "evaluates all descendant elements with aBlock" - - self hasChildren - ifTrue: [self elementsDo: [:each | each allElementsDo: aBlock]] -] - -{ #category : #accessing } -XMLNodeWithElements >> descendantElementsNamed: aName [ - "returns a node list of all descendant elements whose qualified - or local names match aName" - - ^ self descendantElementsSelect: [:each | each isNamed: aName] -] - -{ #category : #enumerating } -XMLNodeWithElements >> descendantElementsNamed: aName do: aBlock [ - "evaluates all descendant elements whose qualified or local names - match aName with aBlock" - - self descendantElementsDo: [:each | - (each isNamed: aName) - ifTrue: [aBlock value: each]] -] - -{ #category : #accessing } -XMLNodeWithElements >> descendantElementsNamed: aName namespaceURI: aURI [ - "returns a node list of all descendant elements whose qualified - or local names match aName and whose namespace URIs match aURI" - - ^ self descendantElementsSelect: [:each | - (each isNamed: aName) - and: [each namespaceURI = aURI]] -] - -{ #category : #enumerating } -XMLNodeWithElements >> descendantElementsSelect: aBlock [ - "returns a new node list with all descendant elements that aBlock - evaluates true for" - | selectedElements | - - selectedElements := self newListForSelect. - self descendantElementsDo: [:each | - (aBlock value: each) - ifTrue: [selectedElements addLast: each]]. - ^ selectedElements. -] - -{ #category : #deprecated } -XMLNodeWithElements >> descendentElements [ - self deprecated: 'use #descendantElements instead'. - ^ self descendantElements. -] - -{ #category : #deprecated } -XMLNodeWithElements >> descendentElementsCollect: aBlock [ - self deprecated: 'use #descendantElementsCollect: instead'. - ^ self descendantElementsCollect: aBlock. -] - -{ #category : #deprecated } -XMLNodeWithElements >> descendentElementsDetect: aBlock [ - self deprecated: 'use #descendantElementsDetect: instead'. - ^ self descendantElementsDetect: aBlock. -] - -{ #category : #deprecated } -XMLNodeWithElements >> descendentElementsDetect: aBlock ifNone: anExceptionBlock [ - self deprecated: 'use #descendantElementsDetect:ifNone: instead'. - ^ self - descendantElementsDetect: aBlock - ifNone: anExceptionBlock. -] - -{ #category : #deprecated } -XMLNodeWithElements >> descendentElementsDo: aBlock [ - self deprecated: 'use #descendantElementsDo: instead'. - ^ self descendantElementsDo: aBlock. -] - -{ #category : #deprecated } -XMLNodeWithElements >> descendentElementsNamed: aName [ - self deprecated: 'use #descendantElementsNamed: instead"'. - ^ self descendantElementsNamed: aName. -] - -{ #category : #deprecated } -XMLNodeWithElements >> descendentElementsNamed: aName do: aBlock [ - self deprecated: 'use #descendantElementsNamed:do: instead'. - ^ self - descendantElementsNamed: aName - do: aBlock. -] - -{ #category : #deprecated } -XMLNodeWithElements >> descendentElementsNamed: aName namespaceURI: aURI [ - self deprecated: 'use #descendantElementsNamed:namespaceURI: instead'. - ^ self - descendantElementsNamed: aName - namespaceURI: aURI. -] - -{ #category : #deprecated } -XMLNodeWithElements >> descendentElementsSelect: aBlock [ - self deprecated: 'use #descendantElementsSelect: instead'. - ^ self descendantElementsSelect: aBlock. -] - -{ #category : #accessing } -XMLNodeWithElements >> elementAfter: anElement [ - "returns the first element child of the receiver after anElement or nil if - there isn't one" - - ^ self nodes elementAfter: anElement -] - -{ #category : #accessing } -XMLNodeWithElements >> elementAt: aName [ - "returns the first element child of the receiver whose qualified or - local name matches aName or nil if there isn't one" - - ^ self nodes elementAt: aName -] - -{ #category : #accessing } -XMLNodeWithElements >> elementAt: aName ifAbsent: aBlock [ - "returns the first element child of the receiver whose qualified or - local name matches aName or the value of aBlock if there isn't one" - - ^ self nodes - elementAt: aName - ifAbsent: aBlock -] - -{ #category : #accessing } -XMLNodeWithElements >> elementAt: aName namespaceURI: aURI [ - "returns the first element child of the receiver whose qualified or - local name matches aName and whose namespace URI matches aURI or nil - if there isn't one" - - ^ self nodes - elementAt: aName - namespaceURI: aURI -] - -{ #category : #accessing } -XMLNodeWithElements >> elementAt: aName namespaceURI: aURI ifAbsent: aBlock [ - "returns the first element child of the receiver whose qualified or - local name matches aName and whose namespace URI matches aURI or the - value of aBlock if there isn't one" - - ^ self nodes - elementAt: aName - namespaceURI: aURI - ifAbsent: aBlock -] - -{ #category : #accessing } -XMLNodeWithElements >> elementBefore: anElement [ - "returns the first element child of the receiver before anElement or - nil if there isn't one" - - ^ self nodes elementBefore: anElement -] - -{ #category : #accessing } -XMLNodeWithElements >> elementNames [ - ^ self nodes elementNames -] - -{ #category : #accessing } -XMLNodeWithElements >> elements [ - "returns a new node list of all of the receiver's elements" - - ^ self nodes elements -] - -{ #category : #accessing } -XMLNodeWithElements >> elementsAt: aName [ - "returns a node list of all the receiver's elements whose qualified - or local names match aName" - - ^ self nodes elementsAt: aName -] - -{ #category : #enumerating } -XMLNodeWithElements >> elementsAt: aName do: aBlock [ - "evaluates aBlock for all element children of the receiver whose - qualified or local names match aName" - - self nodes - elementsAt: aName - do: aBlock -] - -{ #category : #accessing } -XMLNodeWithElements >> elementsAt: aName namespaceURI: aURI [ - "returns a node list of all the receiver's elements whose qualified - or local names match aName and whose namespace URIs match aURI" - - ^ self nodes - elementsAt: aName - namespaceURI: aURI -] - -{ #category : #enumerating } -XMLNodeWithElements >> elementsCollect: aBlock [ - "returns an ordered list of the values of evaluating the element - children of the receiver with aBlock" - - ^ self nodes elementsCollect: aBlock -] - -{ #category : #enumerating } -XMLNodeWithElements >> elementsDetect: aBlock [ - "returns the first element child of the receiver that aBlock evaluates - true for or nil if there isn't one" - - ^ self nodes elementsDetect: aBlock -] - -{ #category : #enumerating } -XMLNodeWithElements >> elementsDetect: aBlock ifNone: anExceptionBlock [ - "returns the first element child of the receiver that aBlock evaluates - true for or the value of anExceptionBlock if there isn't one" - - ^ self nodes - elementsDetect: aBlock - ifNone: anExceptionBlock -] - -{ #category : #enumerating } -XMLNodeWithElements >> elementsDo: aBlock [ - "evaluates aBlock for all element children of the receiver" - - self nodes elementsDo: aBlock -] - -{ #category : #enumerating } -XMLNodeWithElements >> elementsSelect: aBlock [ - "returns a node list of all element children of the receiver that - aBlock evaluates true for" - - ^ self nodes elementsSelect: aBlock -] - -{ #category : #private } -XMLNodeWithElements >> ensureUsesNamespaces [ - self usesNamespaces: true -] - -{ #category : #private } -XMLNodeWithElements >> errorOuterXMLForAbsentNode [ - XMLDOMException signal: 'Cannot change outer XML for absent node' -] - -{ #category : #private } -XMLNodeWithElements >> escapesContentEntitiesWhenWriting [ - "avoid initializing config; defualt to true" - ^ configuration isNil - or: [configuration replacesContentEntityReferences] -] - -{ #category : #searching } -XMLNodeWithElements >> findElementNamed: aName [ - "searches the receiver and all descendants for the first element whose - qualified or local name matches aName" - - ^ self allElementsDetect: [:each | each isNamed: aName] -] - -{ #category : #searching } -XMLNodeWithElements >> findElementNamed: aName namespaceURI: aURI [ - "searches the receiver and all descendants for the first element whose - qualified or local name matches aName and whose namespace URI matches aURI" - - ^ self allElementsDetect: [:each | - (each isNamed: aName) - and: [each namespaceURI = aURI]] -] - -{ #category : #searching } -XMLNodeWithElements >> findElementNamed: aName namespaceURI: aURI with: aBlock [ - "searches the receiver and all descendants for the first element whose - qualified or local name matches aName and whose namespace URI matches - aURI and that aBlock evaluates true for" - - ^ self allElementsDetect: [:each | - (each isNamed: aName) - and: [each namespaceURI = aURI - and: [aBlock value: each]]] -] - -{ #category : #searching } -XMLNodeWithElements >> findElementNamed: aName with: aBlock [ - "searches the receiver and all descendants for the first element whose - qualified or local name matches aName and aBlock evaluates true for" - - ^ self allElementsDetect: [:each | - (each isNamed: aName) - and: [aBlock value: each]] -] - -{ #category : #searching } -XMLNodeWithElements >> findElementWithID: anID [ - "Works like XML DOM Level 2's getElementByID(). It will scan attributes - identified as IDs by a DTD with '' declarations or any - attribute named 'xml:id'." - - | document doctypeDefinition | - - ((document := self document) notNil - and: [(doctypeDefinition := document doctypeDefinition) notNil - and: [doctypeDefinition hasAttributeValidators]]) - ifTrue: [ - self allElementsDo: [:each | - each hasAttributes - ifTrue: [ - (doctypeDefinition attributeValidatorsAt: each name) - ifNil: [ - (each hasUndeclaredID: anID) - ifTrue: [^ each]] - ifNotNil: [:attributeValidators | - (each - hasUndeclaredOrDeclaredID: anID - declaredWith: attributeValidators) - ifTrue: [^ each]]]]] - ifFalse: [ - self allElementsDo: [:each | - (each hasAttributes - and: [each hasUndeclaredID: anID]) - ifTrue: [^ each]]]. - ^ nil. -] - -{ #category : #accessing } -XMLNodeWithElements >> firstElement [ - "returns the first child element of the receiver or nil if there - isn't one" - - ^ self nodes firstElement -] - -{ #category : #testing } -XMLNodeWithElements >> hasContentNodes [ - ^ self nodes hasContentNodes -] - -{ #category : #testing } -XMLNodeWithElements >> hasElements [ - "returns true if the receiver has element children" - - "optimized with a nil test to avoid lazy initializing nodes" - nodes == nil - ifTrue: [^ false]. - ^ nodes hasElements. -] - -{ #category : #testing } -XMLNodeWithElements >> hasStringNodes [ - ^ self nodes hasStringNodes -] - -{ #category : #testing } -XMLNodeWithElements >> includesElement: aName [ - "returns true if the receiver has a child element whose qualified or local name - matches aName" - - ^ self nodes includesElement: aName -] - -{ #category : #testing } -XMLNodeWithElements >> includesElement: aName namespaceURI: aURI [ - "returns true if the receiver has a child element whose qualified or local name - matches aName and whose namespace URI matches aURI" - - ^ self nodes - includesElement: aName - namespaceURI: aURI -] - -{ #category : #parsing } -XMLNodeWithElements >> innerXML: aStringOrStream [ - "Replaces the node children by parsing new inner XML from a string or stream - argument. By default the same parser configuration will be used to parse the - new inner XML." - - self innerXMLParsedWith: (self parserHandlerClass on: aStringOrStream) -] - -{ #category : #parsing } -XMLNodeWithElements >> innerXMLParsedWith: aParser [ - | removedNodes | - - removedNodes := self nodes asArray. - self removeNodes. - [aParser - innerXMLRootNode: self; - parseDocument] - on: Error - do: [:error | - self - removeNodes; - addNodes: removedNodes. - error pass]. -] - -{ #category : #private } -XMLNodeWithElements >> innerXMLStateClass [ - ^ XMLContentState -] - -{ #category : #testing } -XMLNodeWithElements >> isContentNode [ - ^ true -] - -{ #category : #accessing } -XMLNodeWithElements >> lastElement [ - "returns the last child element of the receiver or nil if there - isn't one" - - ^ self nodes lastElement -] - -{ #category : #private } -XMLNodeWithElements >> namespaceURIOfAddedElementNamed: aName withScope: aNamespaceScope [ - ^ self usesNamespaces - ifTrue: [aNamespaceScope resolvePrefix: aName xmlPrefixBeforeLocalName] - ifFalse: [''] -] - -{ #category : #private } -XMLNodeWithElements >> newAttributeDictionaryFrom: anAssociationCollection forAddedElementWithScope: aNamespaceScope [ - ^ self usesNamespaces - ifTrue: [ - (XMLNamespacedAttributeDictionary newFrom: anAssociationCollection) - setNamespaceScope: aNamespaceScope] - ifFalse: [XMLAttributeDictionary newFrom: anAssociationCollection] -] - -{ #category : #private } -XMLNodeWithElements >> newInnerXMLState [ - ^ self innerXMLStateClass new -] - -{ #category : #private } -XMLNodeWithElements >> newNamespaceScopeForAddedElement [ - ^ self usesNamespaces - ifTrue: [XMLNamespaceScope new] - ifFalse: [nil] -] - -{ #category : #private } -XMLNodeWithElements >> newNamespaceScopeForAddedElementNamed: aName namespaceURI: aURI [ - self ensureUsesNamespaces. - - ^ self newNamespaceScopeForAddedElement - mapPrefix: aName xmlPrefixBeforeLocalName to: aURI; - yourself. -] - -{ #category : #deprecated } -XMLNodeWithElements >> newString: aString [ - "will be deprecated; use #newStringNode: instead" - - ^ self newStringNode: aString -] - -{ #category : #accessing } -XMLNodeWithElements >> nodeFactory [ - ^ self configuration nodeFactory -] - -{ #category : #accessing } -XMLNodeWithElements >> nodeFactory: aNodeFactory [ - self configuration nodeFactory: aNodeFactory -] - -{ #category : #defaults } -XMLNodeWithElements >> nodeListClass [ - ^ self configuration nodeFactory nodeListClass -] - -{ #category : #parsing } -XMLNodeWithElements >> outerXML: aStringOrStream forNode: aNode [ - self - outerXMLForNode: aNode - parsedWith: (self parserHandlerClass on: aStringOrStream) -] - -{ #category : #parsing } -XMLNodeWithElements >> outerXMLForNode: aNode parsedWith: aParser [ - | indexOfNode removedNodes | - - indexOfNode := - self nodes - indexOf: aNode - ifAbsent: [self errorOuterXMLForAbsentNode]. - removedNodes := - self nodes - copyFrom: indexOfNode - to: self nodes size. - self removeNodes: removedNodes. - [aParser - innerXMLRootNode: self; - parseDocument] - on: Error - do: [:error | - [self nodes size >= indexOfNode] - whileTrue: [self nodes removeLast]. - self addNodes: removedNodes. - error pass]. - 2 to: removedNodes size do: [:i | - self addNode: (removedNodes at: i)]. -] - -{ #category : #defaults } -XMLNodeWithElements >> parserHandlerClass [ - ^ self configuration parserHandlerClass -] - -{ #category : #copying } -XMLNodeWithElements >> postCopyConfiguration [ - configuration - ifNotNil: [self configuration: configuration copy] -] - -{ #category : #printing } -XMLNodeWithElements >> printRawContentOn: aStream [ - self contentNodesDo: [:each | each printRawContentOn: aStream] -] - -{ #category : #accessing } -XMLNodeWithElements >> rawContentStringAt: aName [ - "Returns the raw content string (without space inserted) of the first - element child of the receiver whose qualified or local name matches aName - or an empty string if there isn't one. - - See also #contentStringAt:" - - ^ self nodes rawContentStringAt: aName -] - -{ #category : #removing } -XMLNodeWithElements >> removeAllFormattingNodes [ - "This is a convenience method to remove formatting string nodes from the - receiver and descendant elements. Empty/whitespace string nodes with - element siblings are assumed to be formatting, unless they have at least - one non-empty/non-whitespace sibling string node. - - WARNING: 'mixed content' elements that can have both string and element - children, like this: - one three - aren't properly recognized when all of the string nodes are whitespace, - so this: - - will become this: - - which might not be acceptable." - - | hasFormattingStringNodes hasElements | - - hasFormattingStringNodes := false. - hasElements := false. - self nodesDo: [:each | - each isStringNode - ifTrue: [ - (hasFormattingStringNodes := - each isWhitespace - or: [each isEmpty]) - ifFalse: [^ self]] - ifFalse: [ - hasElements - ifFalse: [hasElements := each isElement]]]. - - (hasFormattingStringNodes - and: [hasElements]) - ifTrue: [| nodeList | - nodeList := self nodes. - nodeList size to: 1 by: -1 do: [:i | | node | - ((node := nodeList at: i) isStringNode - and: [node isWhitespace - or: [node isEmpty]]) - ifTrue: [nodeList removeAt: i]]]. - hasElements - ifTrue: [ - self elementsDo: [:each | - each removeAllFormattingNodes]]. -] - -{ #category : #notifying } -XMLNodeWithElements >> renamedElement: anElement from: anOldName to: aNewName [ - self nodes - renamedElement: anElement - from: anOldName - to: aNewName -] - -{ #category : #accessing } -XMLNodeWithElements >> stringNodes [ - "returns a new node list of all string node children of the receiver" - - ^ self nodes stringNodes -] - -{ #category : #enumerating } -XMLNodeWithElements >> stringNodesDo: aBlock [ - "evaluates each string node child of the receiver with aBlock" - - self nodes stringNodesDo: aBlock -] - -{ #category : #accessing } -XMLNodeWithElements >> strings [ - "returns an ordered list of the strings of the string nodes of the receiver" - - ^ self nodes strings -] - -{ #category : #enumerating } -XMLNodeWithElements >> stringsDo: aBlock [ - "evaluates each string of each string node child of the receiver with - aBlock" - - self nodes stringsDo: aBlock -] - -{ #category : #testing } -XMLNodeWithElements >> usesNamespaces [ - "returns true if namespace checking is enabled (default)" - - "optimized to avoid lazy initializing the config" - configuration == nil - ifTrue: [^ true]. - ^ configuration usesNamespaces. -] - -{ #category : #accessing } -XMLNodeWithElements >> usesNamespaces: aBoolean [ - "can be used to disable namespace checking, which is enabled by default" - - self configuration usesNamespaces: aBoolean -] diff --git a/src/XML-Parser/XMLNotationDeclaration.class.st b/src/XML-Parser/XMLNotationDeclaration.class.st deleted file mode 100644 index 890cc3229..000000000 --- a/src/XML-Parser/XMLNotationDeclaration.class.st +++ /dev/null @@ -1,61 +0,0 @@ -" -This is class for declarations. - -" -Class { - #name : #XMLNotationDeclaration, - #superclass : #XMLDeclarationNode, - #instVars : [ - 'name', - 'publicID', - 'systemID' - ], - #category : #'XML-Parser-DOM' -} - -{ #category : #'instance creation' } -XMLNotationDeclaration class >> name: aName publicID: aPublicID systemID: aSystemID [ - ^ self new - name: aName; - publicID: aPublicID; - systemID: aSystemID -] - -{ #category : #accessing } -XMLNotationDeclaration >> name [ - ^ name ifNil: [name := ''] -] - -{ #category : #accessing } -XMLNotationDeclaration >> name: aName [ - name := aName -] - -{ #category : #accessing } -XMLNotationDeclaration >> publicID [ - ^ publicID ifNil: [publicID := ''] -] - -{ #category : #accessing } -XMLNotationDeclaration >> publicID: aPublicID [ - publicID := aPublicID -] - -{ #category : #accessing } -XMLNotationDeclaration >> systemID [ - ^ systemID ifNil: [systemID := ''] -] - -{ #category : #accessing } -XMLNotationDeclaration >> systemID: aSystemID [ - systemID := aSystemID -] - -{ #category : #printing } -XMLNotationDeclaration >> writeXMLOn: aWriter [ - aWriter notationDeclaration - name: self name; - publicID: self publicID; - systemID: self systemID; - write -] diff --git a/src/XML-Parser/XMLNotationEnumerationAttributeValidator.class.st b/src/XML-Parser/XMLNotationEnumerationAttributeValidator.class.st deleted file mode 100644 index 48a6f1135..000000000 --- a/src/XML-Parser/XMLNotationEnumerationAttributeValidator.class.st +++ /dev/null @@ -1,45 +0,0 @@ -" -This class validates attributes that can have NOTATION names from a list as values. -" -Class { - #name : #XMLNotationEnumerationAttributeValidator, - #superclass : #XMLEnumerationAttributeValidator, - #instVars : [ - 'unparedEntityValidator' - ], - #category : #'XML-Parser-Validation' -} - -{ #category : #defaults } -XMLNotationEnumerationAttributeValidator class >> standaloneExternalClass [ - ^ XMLStandaloneExternalNotationEnumerationAttributeValidator -] - -{ #category : #initialization } -XMLNotationEnumerationAttributeValidator >> initializeWithValidatorsFrom: aValidatorContainer [ - super initializeWithValidatorsFrom: aValidatorContainer. - - unparedEntityValidator := aValidatorContainer unparsedEntityValidator. -] - -{ #category : #testing } -XMLNotationEnumerationAttributeValidator >> isNotationEnumeration [ - ^ true -] - -{ #category : #accessing } -XMLNotationEnumerationAttributeValidator >> unparsedEntityValidator [ - ^ unparedEntityValidator -] - -{ #category : #validating } -XMLNotationEnumerationAttributeValidator >> validateAttributeDeclaration [ - self unparsedEntityValidator validateNotationAttributeDeclaration: self. - - super validateAttributeDeclaration. -] - -{ #category : #validating } -XMLNotationEnumerationAttributeValidator >> validateXMLSpaceAttributeDeclaration [ - self errorInvalidXMLSpaceAttributeDeclaration -] diff --git a/src/XML-Parser/XMLNullReadStream.class.st b/src/XML-Parser/XMLNullReadStream.class.st deleted file mode 100644 index 49989aaa9..000000000 --- a/src/XML-Parser/XMLNullReadStream.class.st +++ /dev/null @@ -1,65 +0,0 @@ -" -This class is a null read stream that is already #atEnd and also makes sending #atEnd after #close or sending #close more than once safe, which is needed for the XMLNestedStreamReader null stream. -" -Class { - #name : #XMLNullReadStream, - #superclass : #XMLAbstractReadStream, - #classInstVars : [ - 'instance' - ], - #category : #'XML-Parser-Streams' -} - -{ #category : #'class initialization' } -XMLNullReadStream class >> initialize [ - "self initialize" - - instance := self basicOn: nil -] - -{ #category : #'instance creation' } -XMLNullReadStream class >> new [ - ^ instance -] - -{ #category : #'instance creation' } -XMLNullReadStream class >> on: anObject [ - ^ instance -] - -{ #category : #testing } -XMLNullReadStream >> atEnd [ - ^ true -] - -{ #category : #accessing } -XMLNullReadStream >> contents [ - ^ String new -] - -{ #category : #accessing } -XMLNullReadStream >> next [ - ^ nil -] - -{ #category : #initialization } -XMLNullReadStream >> on: anObject [ -] - -{ #category : #accessing } -XMLNullReadStream >> peek [ - ^ nil -] - -{ #category : #positioning } -XMLNullReadStream >> position [ - ^ 0 -] - -{ #category : #positioning } -XMLNullReadStream >> position: anInteger [ -] - -{ #category : #positioning } -XMLNullReadStream >> reset [ -] diff --git a/src/XML-Parser/XMLNullStreamConverter.class.st b/src/XML-Parser/XMLNullStreamConverter.class.st deleted file mode 100644 index c7f485677..000000000 --- a/src/XML-Parser/XMLNullStreamConverter.class.st +++ /dev/null @@ -1,25 +0,0 @@ -" -A stream converter that does no encoding or decoding. -" -Class { - #name : #XMLNullStreamConverter, - #superclass : #XMLStatelessStreamConverter, - #category : #'XML-Parser-Streams' -} - -{ #category : #testing } -XMLNullStreamConverter >> isNull [ - ^ true -] - -{ #category : #decoding } -XMLNullStreamConverter >> nextFromStream: aStream [ - aStream atEnd - ifTrue: [^ nil] - ifFalse: [^ aStream next asCharacter] -] - -{ #category : #encoding } -XMLNullStreamConverter >> nextPut: aCharacter toStream: aStream [ - aStream nextPut: aCharacter asInteger -] diff --git a/src/XML-Parser/XMLObservableList.class.st b/src/XML-Parser/XMLObservableList.class.st deleted file mode 100644 index 6ca825c10..000000000 --- a/src/XML-Parser/XMLObservableList.class.st +++ /dev/null @@ -1,221 +0,0 @@ -" -This class is an ordered list that sends notifications to an observer when objects are added to it or removed from it. Subclasses should override the #beforeAdding:, #afterAdding:at:, #afterAddingLast: and #afterRemoving: messages to send custom notifications. -" -Class { - #name : #XMLObservableList, - #superclass : #XMLOrderedList, - #instVars : [ - 'observer' - ], - #category : #'XML-Parser-DOM' -} - -{ #category : #'instance creation' } -XMLObservableList class >> observer: anObserver [ - ^ self new observer: anObserver -] - -{ #category : #'instance creation' } -XMLObservableList class >> ofSize: aSize [ - self shouldNotImplement -] - -{ #category : #adding } -XMLObservableList >> add: anObject after: aPreviousObject [ - ^ self - add: anObject - afterIndex: - (collection - indexOf: aPreviousObject - ifAbsent: [-1]) -] - -{ #category : #adding } -XMLObservableList >> add: anObject afterIndex: anIndex [ - collection - add: anObject - afterIndex: anIndex. - self - afterAdding: anObject - at: anIndex + 1. - ^ anObject. -] - -{ #category : #adding } -XMLObservableList >> add: anObject before: aNextObject [ - ^ self - add: anObject - beforeIndex: - (collection - indexOf: aNextObject - ifAbsent: [-1]) -] - -{ #category : #adding } -XMLObservableList >> add: anObject beforeIndex: anIndex [ - collection - add: anObject - beforeIndex: anIndex. - self - afterAdding: anObject - at: anIndex. - ^ anObject. -] - -{ #category : #adding } -XMLObservableList >> addFirst: anObject [ - collection addFirst: anObject. - self afterAdding: anObject at: 1. - ^ anObject. -] - -{ #category : #adding } -XMLObservableList >> addLast: anObject [ - collection addLast: anObject. - self afterAddingLast: anObject. - ^ anObject. -] - -{ #category : #private } -XMLObservableList >> addToCopyLast: anObject [ - collection addLast: anObject. - self afterAddingToCopyLast: anObject. - ^ anObject. -] - -{ #category : #private } -XMLObservableList >> afterAdding: anObject at: anIndex [ - observer - ifNotNil: [ - observer - added: anObject - to: self] -] - -{ #category : #private } -XMLObservableList >> afterAddingLast: anObject [ - "can be used to handle appending separately and more efficiently than - insertion" - - self - afterAdding: anObject - at: self size -] - -{ #category : #private } -XMLObservableList >> afterAddingToCopyLast: anObject [ - "can be used to handle appending existing elements to a copy separately and - more efficiently than #afterAddingLast: so not as much checking needs to be - done (because no new elements are being added to the copy)" - - self afterAddingLast: anObject -] - -{ #category : #private } -XMLObservableList >> afterRemoving: anObject [ - observer - ifNotNil: [ - observer - removed: anObject - from: self] -] - -{ #category : #accessing } -XMLObservableList >> at: anIndex put: anObject [ - | oldObject | - - "Gemstone's OrderedCollection>>#at:put: allows the index to be - just after the last, treating it like addLast:, so this is needed - for compatbility" - anIndex = (self size + 1) - ifTrue: [^ self addLast: anObject]. - - "this will raise an error if the index is invalid" - oldObject := collection at: anIndex. - - "remove the old object and notify any observer" - collection at: anIndex put: nil. - oldObject - ifNotNil: [self afterRemoving: oldObject]. - - "now add the new object and notify any observer" - collection at: anIndex put: anObject. - self - afterAdding: anObject - at: anIndex. - - ^ anObject. -] - -{ #category : #private } -XMLObservableList >> duplicateIndexOf: anObject notAt: anIndex [ - "to:do: for speed because some subclasses need this to be fast" - 1 to: anIndex - 1 do: [:i | - (collection at: i) = anObject - ifTrue: [^ i]]. - - "to:do: for speed because some subclasses need this to be fast" - anIndex + 1 to: collection size do: [:i | - (collection at: i) = anObject - ifTrue: [^ i]]. - - ^ 0. -] - -{ #category : #observing } -XMLObservableList >> observer [ - ^ observer -] - -{ #category : #observing } -XMLObservableList >> observer: anObserver [ - observer := anObserver -] - -{ #category : #removing } -XMLObservableList >> remove: anObject ifAbsent: aBlock [ - collection remove: anObject ifAbsent: [^ aBlock value]. - self afterRemoving: anObject. - ^ anObject. -] - -{ #category : #removing } -XMLObservableList >> removeAt: anIndex [ - | removed | - - removed := super removeAt: anIndex. - self afterRemoving: removed. - ^ removed. -] - -{ #category : #private } -XMLObservableList >> removeDuplicateOf: anObject notAt: anIndex [ - "Removes a duplicate of anObject at any index besides anIndex and - returns the removed duplicate or nil if there isn't one." - - | duplicateIndex | - - (duplicateIndex := - self - duplicateIndexOf: anObject - notAt: anIndex) > 0 - ifTrue: [| duplicate | - (duplicate := collection removeAt: duplicateIndex) = anObject - ifFalse: [ - "subclasses may implement #duplicateIndexOf:notAt: to test - for duplicates not with #=, so 'duplicate' can be a - distinct object from 'anObject' that's been removed" - self afterRemoving: duplicate]. - ^ duplicate] - ifFalse: [^ nil] -] - -{ #category : #removing } -XMLObservableList >> reset [ - | removed | - - removed := collection copy. - collection reset. - removed reverseDo: [:each | - self afterRemoving: each]. -] diff --git a/src/XML-Parser/XMLOrderedList.class.st b/src/XML-Parser/XMLOrderedList.class.st deleted file mode 100644 index 58567686d..000000000 --- a/src/XML-Parser/XMLOrderedList.class.st +++ /dev/null @@ -1,946 +0,0 @@ -" -This class functions as an OrderedCollection that will not raise exceptions when attempts are made to access absent objects. This means messages like #at:, #after:, and #first will return nil when the requested object cannot be retrieved. Messages that modify the collection will still raise exceptions as usual. - - -" -Class { - #name : #XMLOrderedList, - #superclass : #Collection, - #instVars : [ - 'collection' - ], - #category : #'XML-Parser-DOM' -} - -{ #category : #private } -XMLOrderedList class >> collection: aCollection [ - ^ self basicNew setCollection: aCollection -] - -{ #category : #defaults } -XMLOrderedList class >> collectionClass [ - ^ OrderedCollection -] - -{ #category : #inspecting } -XMLOrderedList class >> inspectorClass [ - "for pre-GTInspector Pharo" - ^ self collectionClass inspectorClass -] - -{ #category : #'instance creation' } -XMLOrderedList class >> new [ - ^ self new: 10 -] - -{ #category : #'instance creation' } -XMLOrderedList class >> new: aCapacity [ - ^ self basicNew setCollection: (self collectionClass new: aCapacity) -] - -{ #category : #'instance creation' } -XMLOrderedList class >> new: aSize withAll: anObject [ - | newList | - - "reimplement for portability" - newList := self new: aSize. - 1 to: aSize do: [:i | newList addLast: anObject]. - ^ newList. -] - -{ #category : #'instance creation' } -XMLOrderedList class >> newFrom: aCollection [ - ^ (self new: aCollection size) - addAll: aCollection; - yourself -] - -{ #category : #'instance creation' } -XMLOrderedList class >> ofSize: aSize [ - ^ self new: aSize withAll: nil -] - -{ #category : #copying } -XMLOrderedList >> , aCollection [ - "GS doesn't define #, for non-Sequenceable collections" - ^ self copy - addAll: aCollection; - yourself -] - -{ #category : #comparing } -XMLOrderedList >> = anObject [ - "Returns true if anObject is any kind of XMLOrderedList (not just the - class of the receiver) and it and the receiver have the same items - in the same order." - - self == anObject - ifTrue: [^ true]. - - (self species == anObject species - and: [collection size = anObject size]) - ifFalse: [^ false]. - - "Test each position with #= using #to:do: for speed instead of - just 'collection = anObject collection' because that would - make equality depend on the internal collection types instead - of just their items." - 1 to: collection size do: [:i | - (collection at: i) = (anObject at: i) - ifFalse: [^ false]]. - - ^ true. -] - -{ #category : #adding } -XMLOrderedList >> add: anObject [ - ^ self addLast: anObject -] - -{ #category : #adding } -XMLOrderedList >> add: anObject after: aPreviousObject [ - ^ collection add: anObject after: aPreviousObject -] - -{ #category : #adding } -XMLOrderedList >> add: anObject afterIndex: anIndex [ - ^ collection add: anObject afterIndex: anIndex -] - -{ #category : #adding } -XMLOrderedList >> add: anObject before: aNextObject [ - ^ collection add: anObject before: aNextObject -] - -{ #category : #adding } -XMLOrderedList >> add: anObject beforeIndex: anIndex [ - ^ collection add: anObject beforeIndex: anIndex -] - -{ #category : #adding } -XMLOrderedList >> addAll: aCollection [ - ^ self addAllLast: aCollection -] - -{ #category : #adding } -XMLOrderedList >> addAllFirst: aCollection [ - aCollection reverseDo: [:each | self addFirst: each]. - ^ aCollection. -] - -{ #category : #adding } -XMLOrderedList >> addAllLast: aCollection [ - aCollection do: [:each | self addLast: each]. - ^ aCollection. -] - -{ #category : #adding } -XMLOrderedList >> addFirst: anObject [ - ^ collection addFirst: anObject -] - -{ #category : #adding } -XMLOrderedList >> addLast: anObject [ - ^ collection addLast: anObject -] - -{ #category : #private } -XMLOrderedList >> addToCopyLast: anObject [ - "this is used to efficiently append to copies for methods like #copy, - #copyWithout:, #select:, and #reject: that create copies with no new elements - (only old ones) so duplicate or other constraint checking can be skipped - by subclasses" - - ^ collection addLast: anObject -] - -{ #category : #accessing } -XMLOrderedList >> after: anObject [ - ^ self after: anObject ifAbsent: [self defaultValue] -] - -{ #category : #accessing } -XMLOrderedList >> after: anObject ifAbsent: aBlock [ - ^ collection after: anObject ifAbsent: aBlock -] - -{ #category : #accessing } -XMLOrderedList >> allButFirst [ - ^ self allButFirst: 1 -] - -{ #category : #accessing } -XMLOrderedList >> allButFirst: anInteger [ - ^ self copyFrom: anInteger + 1 to: self size -] - -{ #category : #enumerating } -XMLOrderedList >> allButFirstDo: aBlock [ - "reimplemented for portability" - 2 to: collection size do: [:i | - aBlock value: (collection at: i)] -] - -{ #category : #accessing } -XMLOrderedList >> allButLast [ - ^ self allButLast: 1 -] - -{ #category : #accessing } -XMLOrderedList >> allButLast: anInteger [ - ^ self copyFrom: 1 to: self size - anInteger -] - -{ #category : #enumerating } -XMLOrderedList >> allButLastDo: aBlock [ - "reimplemented for portability" - 1 to: collection size - 1 do: [:i | - aBlock value: (collection at: i)] -] - -{ #category : #accessing } -XMLOrderedList >> anyOne [ - ^ self first -] - -{ #category : #converting } -XMLOrderedList >> asArray [ - "use withAll: not newFrom: for portability" - ^ Array withAll: collection -] - -{ #category : #converting } -XMLOrderedList >> asOrderedCollection [ - "use withAll: not newFrom: for portability" - ^ OrderedCollection withAll: collection -] - -{ #category : #converting } -XMLOrderedList >> asString [ - "don't assume Object>>#asString is defined, for portability" - ^ self printString -] - -{ #category : #accessing } -XMLOrderedList >> at: anIndex [ - "optimized" - (anIndex > 0 and: [anIndex <= collection size]) - ifTrue: [^ collection at: anIndex] - ifFalse: [^ self defaultValue] -] - -{ #category : #accessing } -XMLOrderedList >> at: anIndex ifAbsent: aBlock [ - ^ collection at: anIndex ifAbsent: aBlock -] - -{ #category : #accessing } -XMLOrderedList >> at: anIndex put: aValue [ - "treats index = size + 1 as addLast: gemstone compatibility" - anIndex = (collection size + 1) - ifTrue: [^ collection addLast: aValue] - ifFalse: [^ collection at: anIndex put: aValue] -] - -{ #category : #accessing } -XMLOrderedList >> atLast: anIndexFromEnd [ - ^ self atLast: anIndexFromEnd ifAbsent: [self defaultValue] -] - -{ #category : #accessing } -XMLOrderedList >> atLast: anIndexFromEnd ifAbsent: aBlock [ - ^ collection atLast: anIndexFromEnd ifAbsent: aBlock -] - -{ #category : #accessing } -XMLOrderedList >> before: anObject [ - ^ self before: anObject ifAbsent: [self defaultValue] -] - -{ #category : #accessing } -XMLOrderedList >> before: anObject ifAbsent: aBlock [ - ^ collection before: anObject ifAbsent: aBlock -] - -{ #category : #testing } -XMLOrderedList >> beginsWith: aCollection [ - ^ collection beginsWith: aCollection -] - -{ #category : #accessing } -XMLOrderedList >> capacity [ - ^ collection capacity -] - -{ #category : #enumerating } -XMLOrderedList >> collect: aBlock [ - | collected | - - collected := self copyEmptyForCollect. - "use #to:do: for speed" - 1 to: collection size do: [:i | - collected addLast: (aBlock value: (collection at: i))]. - ^ collected. -] - -{ #category : #enumerating } -XMLOrderedList >> collect: aCollectBlock thenSelect: aSelectBlock [ - | selected | - - selected := self copyEmpty. - "use #to:do: for speed" - 1 to: collection size do: [:i | | item | - item := aCollectBlock value: (collection at: i). - (aSelectBlock value: item) - ifTrue: [selected addLast: item]]. - ^ selected. -] - -{ #category : #private } -XMLOrderedList >> collection [ - ^ collection -] - -{ #category : #copying } -XMLOrderedList >> copy [ - | copy | - - copy := self copyEmpty. - "use #to:do: for speed with direct access" - 1 to: collection size do: [:i | - copy addToCopyLast: (collection at: i)]. - ^ copy. -] - -{ #category : #copying } -XMLOrderedList >> copyAfter: anObject [ - | copy | - - copy := self copyEmpty. - (self - indexOf: anObject - ifAbsent: [^ copy]) + 1 - to: self size - do: [:i | copy addToCopyLast: (self at: i)]. - ^ copy. -] - -{ #category : #copying } -XMLOrderedList >> copyAfterLast: anObject [ - | copy | - - copy := self copyEmpty. - (self - lastIndexOf: anObject - ifAbsent: [^ copy]) + 1 - to: self size - do: [:i | copy addToCopyLast: (self at: i)]. - ^ copy. -] - -{ #category : #defaults } -XMLOrderedList >> copyClass [ - "the class to use for copies" - ^ self class -] - -{ #category : #copying } -XMLOrderedList >> copyEmpty [ - ^ self copyClass collection: collection copyEmpty -] - -{ #category : #private } -XMLOrderedList >> copyEmptyForCollect [ - "collect: methods return instances of the generic ordered list species class - because a collect block can return any value, which may not be appropiate to - store in copies of particular subclasses (like XMLNodeList)" - - ^ self species new: self size -] - -{ #category : #copying } -XMLOrderedList >> copyFrom: aStart to: anEnd [ - | copy | - - copy := self copyEmpty. - (aStart max: 1) - to: (anEnd min: self size) - do: [:i | copy addToCopyLast: (self at: i)]. - ^ copy. -] - -{ #category : #copying } -XMLOrderedList >> copyReplaceAll: aSearchCollection with: aReplacementCollection [ - | copy index size searchCollectionSize | - - "this implementation always returns a copy, even if it doesn't replace" - (searchCollectionSize := aSearchCollection size) > 0 - ifFalse: [^ self copy]. - - copy := self copyEmpty. - index := 1. - size := self size. - [index <= size] - whileTrue: [ - (self at: index) = (aSearchCollection at: 1) - ifTrue: [| searchCollectionIndex | - searchCollectionIndex := 2. - [searchCollectionIndex <= searchCollectionSize - and: [ - (self at: index + searchCollectionIndex - 1) = - (aSearchCollection at: searchCollectionIndex)]] - whileTrue: [searchCollectionIndex := searchCollectionIndex + 1]. - searchCollectionIndex > searchCollectionSize - ifTrue: [ - "found a match, add the replacement and skip the replaced" - copy addAll: aReplacementCollection. - index := index + searchCollectionSize] - ifFalse: [ - copy addLast: (self at: index). - index := index + 1]] - ifFalse: [ - copy addLast: (self at: index). - index := index + 1]]. - ^ copy. -] - -{ #category : #copying } -XMLOrderedList >> copyReplaceFrom: aStart to: aStop with: aReplacementCollection [ - | copy start stop | - - (self size < 1 - or: [self size < aStart]) - ifTrue: [ - ^ self copy - addAll: aReplacementCollection; - yourself]. - - copy := self copyEmpty. - start := aStart max: 1. - stop := aStop min: self size. - 1 to: self size do: [:i | - (i = start) - ifTrue: [ - copy addAll: aReplacementCollection. - start > stop - ifTrue: [copy addLast: (self at: i)]] - ifFalse: [ - (i > start and: [i <= stop]) - ifFalse: [copy addLast: (self at: i)]]]. - ^ copy. -] - -{ #category : #copying } -XMLOrderedList >> copyUpTo: anObject [ - | copy | - - copy := self copyEmpty. - 1 - to: - (self - indexOf: anObject - ifAbsent: [self size + 1]) - 1 - do: [:i | copy addToCopyLast: (self at: i)]. - ^ copy. -] - -{ #category : #copying } -XMLOrderedList >> copyUpToLast: anObject [ - | copy | - - copy := self copyEmpty. - 1 - to: - (self - lastIndexOf: anObject - ifAbsent: [collection size + 1]) - 1 - do: [:i | copy addToCopyLast: (self at: i)]. - ^ copy. -] - -{ #category : #copying } -XMLOrderedList >> copyWith: anObject [ - ^ self copy - addLast: anObject; - yourself -] - -{ #category : #copying } -XMLOrderedList >> copyWithFirst: anObject [ - ^ self copyEmpty - addLast: anObject; - addAll: self; - yourself -] - -{ #category : #copying } -XMLOrderedList >> copyWithout: anObject [ - ^ self reject: [:each | each = anObject] -] - -{ #category : #copying } -XMLOrderedList >> copyWithoutAll: aCollection [ - | rejected | - - rejected := - aCollection size > 5 - ifTrue: [aCollection asSet] - ifFalse: [aCollection]. - ^ self reject: [:each | rejected includes: each]. -] - -{ #category : #defaults } -XMLOrderedList >> defaultValue [ - ^ nil -] - -{ #category : #enumerating } -XMLOrderedList >> detect: aBlock [ - ^ self detect: aBlock ifNone: [self defaultValue] -] - -{ #category : #enumerating } -XMLOrderedList >> detect: aBlock ifNone: anExceptionBlock [ - ^ collection detect: aBlock ifNone: anExceptionBlock -] - -{ #category : #enumerating } -XMLOrderedList >> do: aBlock [ - collection do: aBlock -] - -{ #category : #enumerating } -XMLOrderedList >> doWithIndex: aBlock [ - ^ self withIndexDo: aBlock -] - -{ #category : #accessing } -XMLOrderedList >> eighth [ - ^ self at: 8 -] - -{ #category : #testing } -XMLOrderedList >> endsWith: aCollection [ - ^ collection endsWith: aCollection -] - -{ #category : #accessing } -XMLOrderedList >> fifth [ - ^ self at: 5 -] - -{ #category : #accessing } -XMLOrderedList >> first [ - "optimized implementation" - ^ collection size > 0 - ifTrue: [collection at: 1] - ifFalse: [self defaultValue] -] - -{ #category : #accessing } -XMLOrderedList >> first: anInteger [ - ^ self copyFrom: 1 to: anInteger -] - -{ #category : #accessing } -XMLOrderedList >> fourth [ - ^ self at: 4 -] - -{ #category : #comparing } -XMLOrderedList >> hash [ - | hash | - - hash := self species hash. - self size > 10 - ifFalse: [ - self do: [:each | - hash := hash bitXor: each hash]]. - ^ hash bitXor: self size hash. -] - -{ #category : #accessing } -XMLOrderedList >> identityIndexOf: anObject [ - ^ self identityIndexOf: anObject ifAbsent: [0] -] - -{ #category : #accessing } -XMLOrderedList >> identityIndexOf: anObject ifAbsent: aBlock [ - ^ collection identityIndexOf: anObject ifAbsent: aBlock -] - -{ #category : #accessing } -XMLOrderedList >> indexOf: anObject [ - ^ self indexOf: anObject ifAbsent: [0] -] - -{ #category : #accessing } -XMLOrderedList >> indexOf: anObject ifAbsent: aBlock [ - ^ collection - indexOf: anObject - ifAbsent: aBlock -] - -{ #category : #accessing } -XMLOrderedList >> indexOf: anObject startingAt: anIndex [ - ^ self - indexOf: anObject - startingAt: anIndex - ifAbsent: [0] -] - -{ #category : #accessing } -XMLOrderedList >> indexOf: anObject startingAt: anIndex ifAbsent: aBlock [ - ^ collection - indexOf: anObject - startingAt: (anIndex max: 1) - ifAbsent: aBlock -] - -{ #category : #accessing } -XMLOrderedList >> indexOfSubCollection: aSubCollection startingAt: anIndex [ - ^ self - indexOfSubCollection: aSubCollection - startingAt: anIndex - ifAbsent: [0] -] - -{ #category : #accessing } -XMLOrderedList >> indexOfSubCollection: aSubCollection startingAt: anIndex ifAbsent: aBlock [ - ^ collection - indexOfSubCollection: aSubCollection - startingAt: anIndex - ifAbsent: aBlock -] - -{ #category : #inspecting } -XMLOrderedList >> inspectorClass [ - "for Squeak" - ^ collection inspectorClass -] - -{ #category : #testing } -XMLOrderedList >> isEmpty [ - "Squeak's Collection>>#isEmpty is inefficient" - ^ self size = 0 -] - -{ #category : #testing } -XMLOrderedList >> isSequenceable [ - ^ true -] - -{ #category : #accessing } -XMLOrderedList >> last [ - | lastIndex | - - "optimized implementation" - ^ (lastIndex := collection size) > 0 - ifTrue: [collection at: lastIndex] - ifFalse: [self defaultValue] -] - -{ #category : #accessing } -XMLOrderedList >> last: anInteger [ - ^ self copyFrom: self size - anInteger + 1 to: self size -] - -{ #category : #accessing } -XMLOrderedList >> lastIndexOf: anObject [ - ^ self lastIndexOf: anObject ifAbsent: [0] -] - -{ #category : #accessing } -XMLOrderedList >> lastIndexOf: anObject ifAbsent: aBlock [ - ^ collection lastIndexOf: anObject ifAbsent: aBlock -] - -{ #category : #accessing } -XMLOrderedList >> ninth [ - ^ self at: 9 -] - -{ #category : #enumerating } -XMLOrderedList >> pairsDo: aBlock [ - collection pairsDo: aBlock -] - -{ #category : #converting } -XMLOrderedList >> readStream [ - "use #readStream to get a 0-based position stream on GS" - ^ collection readStream -] - -{ #category : #enumerating } -XMLOrderedList >> reject: aBlock [ - | selected | - - selected := self copyEmpty. - "use #to:do: for speed" - 1 to: collection size do: [:i | | item | - item := collection at: i. - (aBlock value: item) - ifFalse: [selected addToCopyLast: item]]. - ^ selected. -] - -{ #category : #enumerating } -XMLOrderedList >> reject: aRejectBlock thenCollect: aCollectBlock [ - | collected | - - collected := self copyEmptyForCollect. - "use #to:do: for speed" - 1 to: collection size do: [:i | | item | - item := collection at: i. - (aRejectBlock value: item) - ifFalse: [collected addLast: (aCollectBlock value: item)]]. - ^ collected. -] - -{ #category : #removing } -XMLOrderedList >> remove: anObject ifAbsent: aBlock [ - ^ collection remove: anObject ifAbsent: aBlock -] - -{ #category : #removing } -XMLOrderedList >> removeAll [ - "Redefined because Collection>>#removeAll assumes the collection can - be safely modified while iterating it with #do:" - - self size timesRepeat: [self removeLast] -] - -{ #category : #removing } -XMLOrderedList >> removeAt: anIndex [ - ^ collection removeAt: anIndex -] - -{ #category : #removing } -XMLOrderedList >> removeFirst [ - ^ self removeAt: 1 -] - -{ #category : #removing } -XMLOrderedList >> removeFirst: aNumber [ - | removed | - - removed := self copyFrom: 1 to: aNumber. - aNumber timesRepeat: [self removeFirst]. - ^ removed. -] - -{ #category : #removing } -XMLOrderedList >> removeLast [ - ^ self removeAt: self size -] - -{ #category : #removing } -XMLOrderedList >> removeLast: aNumber [ - | removed | - - removed := self copyFrom: self size - (aNumber - 1) to: self size. - aNumber timesRepeat: [self removeLast]. - ^ removed. -] - -{ #category : #accessing } -XMLOrderedList >> replaceFrom: aStart to: aStop with: aReplacementCollection [ - ^ self - replaceFrom: aStart - to: aStop - with: aReplacementCollection - startingAt: 1 -] - -{ #category : #accessing } -XMLOrderedList >> replaceFrom: aStart to: aStop with: aReplacementCollection startingAt: aReplacementStart [ - | offset | - - offset := 0. - [aStart + offset <= aStop] - whileTrue: [ - self - at: aStart + offset - put: (aReplacementCollection at: aReplacementStart + offset). - offset := offset + 1]. -] - -{ #category : #removing } -XMLOrderedList >> reset [ - collection reset -] - -{ #category : #converting } -XMLOrderedList >> reverse [ - "returns a copy like #reversed instead of doing in-place reversal to - be compatible with SequenceableCollection>>#reverse" - - ^ self reversed -] - -{ #category : #enumerating } -XMLOrderedList >> reverseDo: aBlock [ - collection reverseDo: aBlock -] - -{ #category : #converting } -XMLOrderedList >> reversed [ - | reversed | - - reversed := self copyEmpty. - self reverseDo: [:each | reversed addToCopyLast: each]. - ^ reversed. -] - -{ #category : #accessing } -XMLOrderedList >> second [ - ^ self at: 2 -] - -{ #category : #enumerating } -XMLOrderedList >> select: aBlock [ - | selected | - - selected := self copyEmpty. - "use #to:do: for speed" - 1 to: collection size do: [:i | | item | - item := collection at: i. - (aBlock value: item) - ifTrue: [selected addToCopyLast: item]]. - ^ selected. -] - -{ #category : #enumerating } -XMLOrderedList >> select: aSelectBlock thenCollect: aCollectBlock [ - | collected | - - collected := self copyEmptyForCollect. - "use #to:do: for speed" - 1 to: collection size do: [:i | | item | - item := collection at: i. - (aSelectBlock value: item) - ifTrue: [collected addLast: (aCollectBlock value: item)]]. - ^ collected. -] - -{ #category : #private } -XMLOrderedList >> setCollection: aCollection [ - collection := aCollection -] - -{ #category : #accessing } -XMLOrderedList >> seventh [ - ^ self at: 7 -] - -{ #category : #accessing } -XMLOrderedList >> sixth [ - ^ self at: 6 -] - -{ #category : #accessing } -XMLOrderedList >> size [ - ^ collection size -] - -{ #category : #sorting } -XMLOrderedList >> sort [ - self sort: [:a :b | a <= b] -] - -{ #category : #sorting } -XMLOrderedList >> sort: aSortBlock [ - collection sort: aSortBlock -] - -{ #category : #sorting } -XMLOrderedList >> sorted [ - ^ self copy sort -] - -{ #category : #sorting } -XMLOrderedList >> sorted: aSortBlock [ - ^ self copy sort: aSortBlock -] - -{ #category : #private } -XMLOrderedList >> species [ - "this makes instances of this class and all subclasses with the same - items in the same order be equal" - ^ XMLOrderedList -] - -{ #category : #accessing } -XMLOrderedList >> swap: aFirstIndex with: aSecondIndex [ - "swap positions of the objects at aFirstIndex and aSecondIndex, - raising an error if either index is out of bounds" - - | temp | - - temp := collection at: aFirstIndex. - collection - at: aFirstIndex - put: (collection at: aSecondIndex). - collection - at: aSecondIndex - put: temp. -] - -{ #category : #accessing } -XMLOrderedList >> third [ - ^ self at: 3 -] - -{ #category : #enumerating } -XMLOrderedList >> with: aCollection collect: aBlock [ - | collected | - - collected := self copyEmptyForCollect. - 1 to: (collection size min: aCollection size) do: [:i | - collected addLast: - (aBlock - value: (collection at: i) - value: (aCollection at: i))]. - ^ collected. -] - -{ #category : #enumerating } -XMLOrderedList >> with: aCollection do: aBlock [ - 1 to: (collection size min: aCollection size) do: [:i | - aBlock - value: (collection at: i) - value: (aCollection at: i)] -] - -{ #category : #enumerating } -XMLOrderedList >> withIndexCollect: aTwoArgumentBlock [ - | collected | - - collected := self copyEmptyForCollect. - 1 to: collection size do: [:i | - collected addLast: - (aTwoArgumentBlock - value: (collection at: i) - value: i)]. - ^ collected. -] - -{ #category : #enumerating } -XMLOrderedList >> withIndexDo: aBlock [ - collection withIndexDo: aBlock -] - -{ #category : #converting } -XMLOrderedList >> writeStream [ - "This is not supported because the collection already supports WriteStream - behavior with #addLast: and the Pharo/Squeak WriteStream works by expanding - its collection with #grownBy:, which should fill the new space with nils, - but some subclasses cannot contain nil" - - self shouldNotImplement -] - -{ #category : #accessing } -XMLOrderedList >> xmlLastOrNil [ - ^ self last -] diff --git a/src/XML-Parser/XMLPI.class.st b/src/XML-Parser/XMLPI.class.st deleted file mode 100644 index 451d69449..000000000 --- a/src/XML-Parser/XMLPI.class.st +++ /dev/null @@ -1,67 +0,0 @@ -" -This class represents a processing instruction node. -" -Class { - #name : #XMLPI, - #superclass : #XMLNode, - #instVars : [ - 'target', - 'data' - ], - #category : #'XML-Parser-DOM' -} - -{ #category : #'instance creation' } -XMLPI class >> target: aTargetString data: aDataString [ - ^ self new - target: aTargetString; - data: aDataString -] - -{ #category : #visiting } -XMLPI >> acceptNodeVisitor: aNodeVisitor [ - ^ aNodeVisitor visitPI: self -] - -{ #category : #accessing } -XMLPI >> data [ - ^ data ifNil: [data := ''] -] - -{ #category : #accessing } -XMLPI >> data: aString [ - data := aString -] - -{ #category : #testing } -XMLPI >> hasData [ - ^ self data notEmpty -] - -{ #category : #testing } -XMLPI >> isPI [ - ^ true -] - -{ #category : #accessing } -XMLPI >> sortKey [ - ^ self target -] - -{ #category : #accessing } -XMLPI >> target [ - ^ target ifNil: [target := ''] -] - -{ #category : #accessing } -XMLPI >> target: aString [ - target := aString -] - -{ #category : #printing } -XMLPI >> writeXMLOn: aWriter [ - aWriter pi - target: self target; - data: self data; - write -] diff --git a/src/XML-Parser/XMLParameterEntityDeclaration.class.st b/src/XML-Parser/XMLParameterEntityDeclaration.class.st deleted file mode 100644 index a67f4c85f..000000000 --- a/src/XML-Parser/XMLParameterEntityDeclaration.class.st +++ /dev/null @@ -1,24 +0,0 @@ -" -This is a class for parameter declarations. -" -Class { - #name : #XMLParameterEntityDeclaration, - #superclass : #XMLEntityDeclaration, - #category : #'XML-Parser-DOM' -} - -{ #category : #testing } -XMLParameterEntityDeclaration >> isParameter [ - ^ true -] - -{ #category : #printing } -XMLParameterEntityDeclaration >> writeXMLOn: aWriter [ - aWriter entityDeclaration - name: self name; - isParameter: true; - replacement: self replacement; - publicID: self publicID; - systemID: self systemID; - write -] diff --git a/src/XML-Parser/XMLParser.class.st b/src/XML-Parser/XMLParser.class.st deleted file mode 100644 index 0d62b3e31..000000000 --- a/src/XML-Parser/XMLParser.class.st +++ /dev/null @@ -1,122 +0,0 @@ -" -This class is a facade that parses XML using a driver and tokenizer. See SAXHandler and XMLDOMParser for ready-made front ends to it. -" -Class { - #name : #XMLParser, - #superclass : #Object, - #instVars : [ - 'tokenizer', - 'driver' - ], - #category : #'XML-Parser-Drivers' -} - -{ #category : #'instance creation' } -XMLParser class >> driver: aDriver on: aStringOrStream [ - ^ self new - setDriver: aDriver - tokenizer: (aDriver newTokenizerOn: aStringOrStream) -] - -{ #category : #testing } -XMLParser >> atEnd [ - ^ self tokenizer atEnd -] - -{ #category : #accessing } -XMLParser >> baseURI [ - ^ self driver baseURI -] - -{ #category : #accessing } -XMLParser >> currentColumnNumber [ - ^ self tokenizer currentColumnNumber -] - -{ #category : #accessing } -XMLParser >> currentLineNumber [ - ^ self tokenizer currentLineNumber -] - -{ #category : #accessing } -XMLParser >> currentPosition [ - ^ self tokenizer currentPosition -] - -{ #category : #accessing } -XMLParser >> driver [ - ^ driver -] - -{ #category : #private } -XMLParser >> handleParserError: anError [ - self tokenizer closeStreams. - - anError isXMLParserException - ifFalse: [anError pass]. - - (anError hasLineNumber - or: [self currentLineNumber isNil]) - ifFalse: [anError lineNumber: self currentLineNumber]. - (anError hasColumnNumber - or: [self currentColumnNumber isNil]) - ifFalse: [anError columnNumber: self currentColumnNumber]. - (anError hasBaseURI - or: [self baseURI isEmpty]) - ifFalse: [anError baseURI: self baseURI]. - - anError shouldPassOnWhenCaught - ifTrue: [anError pass]. -] - -{ #category : #parsing } -XMLParser >> parseDocument [ - [[self tokenizer atEnd] - whileFalse: [self tokenizer nextToken]] - on: Error - do: [:error | self handleParserError: error] -] - -{ #category : #parsing } -XMLParser >> parseDocumentUntil: aBlock [ - [[self tokenizer atEnd or: [aBlock value]] - whileFalse: [self tokenizer nextToken]] - on: Error - do: [:error | self handleParserError: error] -] - -{ #category : #parsing } -XMLParser >> parseDocumentWhile: aBlock [ - [[self tokenizer atEnd not and: [aBlock value]] - whileTrue: [self tokenizer nextToken]] - on: Error - do: [:error | self handleParserError: error] -] - -{ #category : #parsing } -XMLParser >> parseToken [ - ^ [self tokenizer nextToken] - on: Error - do: [:error | self handleParserError: error] -] - -{ #category : #initialization } -XMLParser >> setDriver: aDriver tokenizer: aTokenizer [ - driver := aDriver. - tokenizer := aTokenizer. -] - -{ #category : #accessing } -XMLParser >> state [ - ^ self tokenizer state -] - -{ #category : #accessing } -XMLParser >> state: aTokenState [ - self tokenizer state: aTokenState -] - -{ #category : #accessing } -XMLParser >> tokenizer [ - ^ tokenizer -] diff --git a/src/XML-Parser/XMLParserDriver.class.st b/src/XML-Parser/XMLParserDriver.class.st deleted file mode 100644 index 1f3b4c9b0..000000000 --- a/src/XML-Parser/XMLParserDriver.class.st +++ /dev/null @@ -1,193 +0,0 @@ -" -This is a base class for parser drivers. Subclasses should override any of the ""handling"" or ""handling - dtd"" messages sent by tokenizers to parse tokens. -" -Class { - #name : #XMLParserDriver, - #superclass : #Object, - #instVars : [ - 'baseURI', - 'currentEntity' - ], - #category : #'XML-Parser-Drivers' -} - -{ #category : #accessing } -XMLParserDriver >> baseURI [ - "returns a string with the current base URI at this stage of parsing" - ^ baseURI ifNil: [baseURI := self documentURI] -] - -{ #category : #accessing } -XMLParserDriver >> baseURI: aURI [ - baseURI := aURI -] - -{ #category : #accessing } -XMLParserDriver >> currentEntity [ - ^ currentEntity -] - -{ #category : #accessing } -XMLParserDriver >> currentEntity: anEntity [ - currentEntity := anEntity -] - -{ #category : #testing } -XMLParserDriver >> decodesCharacters [ - ^ true -] - -{ #category : #accessing } -XMLParserDriver >> documentURI [ - ^ nil -] - -{ #category : #accessing } -XMLParserDriver >> elementNester [ - ^ self newElementNester -] - -{ #category : #defaults } -XMLParserDriver >> elementNesterClass [ - ^ XMLElementNester -] - -{ #category : #'handling - dtd' } -XMLParserDriver >> handleAttributeDeclaration: anElement name: anAttribute type: aType defaultPragma: aDefaultPragma defaultValue: aDefaultValue [ -] - -{ #category : #handling } -XMLParserDriver >> handleCData: aString [ -] - -{ #category : #handling } -XMLParserDriver >> handleComment: aString [ -] - -{ #category : #'handling - dtd' } -XMLParserDriver >> handleElementDeclaration: aName contentModel: aContentModel [ -] - -{ #category : #handling } -XMLParserDriver >> handleEndContentEntityReplacement: aName [ - -] - -{ #category : #'handling - dtd' } -XMLParserDriver >> handleEndDTD [ -] - -{ #category : #handling } -XMLParserDriver >> handleEndDocument [ -] - -{ #category : #handling } -XMLParserDriver >> handleEndTag: anElement [ -] - -{ #category : #'handling - dtd' } -XMLParserDriver >> handleGeneralEntityDeclaration: aName publicID: aPublicID systemID: aSystemID ndata: aNotation [ -] - -{ #category : #'handling - dtd' } -XMLParserDriver >> handleGeneralEntityDeclaration: aName replacement: aReplacement [ -] - -{ #category : #handling } -XMLParserDriver >> handleGeneralEntityReference: aName [ - ^ nil -] - -{ #category : #'handling - dtd' } -XMLParserDriver >> handleNotationDeclaration: aName publicID: aPublicID systemID: aSystemID [ -] - -{ #category : #handling } -XMLParserDriver >> handlePCData: aString [ -] - -{ #category : #handling } -XMLParserDriver >> handlePI: aTargetString data: aDataString [ -] - -{ #category : #'handling - dtd' } -XMLParserDriver >> handleParameterEntityDeclaration: aName publicID: aPublicID systemID: aSystemID [ -] - -{ #category : #'handling - dtd' } -XMLParserDriver >> handleParameterEntityDeclaration: aName replacement: aReplacement [ -] - -{ #category : #'handling - dtd' } -XMLParserDriver >> handleParameterEntityReference: aName [ - ^ nil -] - -{ #category : #handling } -XMLParserDriver >> handleParseError: aString [ -] - -{ #category : #handling } -XMLParserDriver >> handleStartContent [ -] - -{ #category : #handling } -XMLParserDriver >> handleStartContentEntityReplacement: aName [ -] - -{ #category : #'handling - dtd' } -XMLParserDriver >> handleStartDTD: aRoot publicID: aPublicID systemID: aSystemID [ -] - -{ #category : #handling } -XMLParserDriver >> handleStartDocument [ -] - -{ #category : #handling } -XMLParserDriver >> handleStartTag: anElement attributes: anAttributeDictionary [ -] - -{ #category : #handling } -XMLParserDriver >> handleUnreplacedGeneralEntityReference: aName [ -] - -{ #category : #handling } -XMLParserDriver >> handleWhitespace: aString [ -] - -{ #category : #handling } -XMLParserDriver >> handleXMLVersion: aVersion encoding: anEncoding standalone: aYesOrNo [ -] - -{ #category : #defaults } -XMLParserDriver >> initialStateClass [ - ^ XMLXMLDeclarationState -] - -{ #category : #'instance creation' } -XMLParserDriver >> newElementNester [ - ^ self elementNesterClass new -] - -{ #category : #'instance creation' } -XMLParserDriver >> newInitialState [ - ^ self initialStateClass new -] - -{ #category : #'instance creation' } -XMLParserDriver >> newTokenizerOn: aStringOrStream [ - ^ self tokenizerClass - driver: self - on: aStringOrStream - readLimit: self readLimit -] - -{ #category : #accessing } -XMLParserDriver >> readLimit [ - ^ nil -] - -{ #category : #defaults } -XMLParserDriver >> tokenizerClass [ - ^ XMLWellFormedParserTokenizer -] diff --git a/src/XML-Parser/XMLParserException.class.st b/src/XML-Parser/XMLParserException.class.st deleted file mode 100644 index f32cc4ff2..000000000 --- a/src/XML-Parser/XMLParserException.class.st +++ /dev/null @@ -1,105 +0,0 @@ -" -A base class for XMLParser exceptions that supports line number error info and can be used with on:do: to catch any XMLParser-related errors. -" -Class { - #name : #XMLParserException, - #superclass : #XMLException, - #instVars : [ - 'lineNumber', - 'columnNumber', - 'baseURI' - ], - #category : #'XML-Parser-Exceptions' -} - -{ #category : #accessing } -XMLParserException >> baseURI [ - ^ baseURI ifNil: [baseURI := ''] -] - -{ #category : #accessing } -XMLParserException >> baseURI: aURIString [ - baseURI := aURIString -] - -{ #category : #accessing } -XMLParserException >> columnNumber [ - ^ columnNumber -] - -{ #category : #accessing } -XMLParserException >> columnNumber: aColumnNumber [ - columnNumber := aColumnNumber -] - -{ #category : #testing } -XMLParserException >> hasBaseURI [ - ^ self baseURI notEmpty -] - -{ #category : #testing } -XMLParserException >> hasColumnNumber [ - ^ self columnNumber notNil -] - -{ #category : #testing } -XMLParserException >> hasLineNumber [ - ^ self lineNumber notNil -] - -{ #category : #testing } -XMLParserException >> isXMLParserException [ - ^ true -] - -{ #category : #accessing } -XMLParserException >> lineNumber [ - ^ lineNumber -] - -{ #category : #accessing } -XMLParserException >> lineNumber: aLineNumber [ - lineNumber := aLineNumber -] - -{ #category : #accessing } -XMLParserException >> messageText [ - | rawMessageText messageTextStream | - - rawMessageText := super messageText. - (self hasLineNumber - or: [self hasBaseURI]) - ifFalse: [^ rawMessageText]. - - (messageTextStream := (String new: rawMessageText size * 2) writeStream) - nextPutAll: rawMessageText; - nextPutAll: ' ('. - self hasLineNumber - ifTrue: [ - messageTextStream - nextPutAll: 'near line '; - nextPutAll: self lineNumber asString. - self hasColumnNumber - ifTrue: [ - messageTextStream - nextPutAll: ', column '; - nextPutAll: self columnNumber asString]]. - - self hasBaseURI - ifTrue: [ - messageTextStream - nextPutAll: - (self hasLineNumber - ifTrue: [' in '] - ifFalse: ['in ']); - nextPutAll: self baseURI]. - - ^ messageTextStream - nextPut: $); - contents. -] - -{ #category : #testing } -XMLParserException >> shouldPassOnWhenCaught [ - ^ true -] diff --git a/src/XML-Parser/XMLParserLimits.class.st b/src/XML-Parser/XMLParserLimits.class.st deleted file mode 100644 index 39965a8b1..000000000 --- a/src/XML-Parser/XMLParserLimits.class.st +++ /dev/null @@ -1,71 +0,0 @@ -" -This class places security limits on input. Setting a limit to nil disables it, and removeAll disables all. -" -Class { - #name : #XMLParserLimits, - #superclass : #Object, - #instVars : [ - 'documentReadLimit', - 'maxEntityReplacementDepth' - ], - #classVars : [ - 'DefaultReadLimit' - ], - #category : #'XML-Parser' -} - -{ #category : #defaults } -XMLParserLimits class >> defaultDocumentReadLimit [ - ^ self defaultReadLimit -] - -{ #category : #defaults } -XMLParserLimits class >> defaultMaxEntityReplacementDepth [ - ^ 10 -] - -{ #category : #accessing } -XMLParserLimits class >> defaultReadLimit [ - ^ DefaultReadLimit - ifNil: [DefaultReadLimit := 10000000] -] - -{ #category : #accessing } -XMLParserLimits class >> defaultReadLimit: aDefaultLimit [ - "can be used to change the default read limit instances start with" - DefaultReadLimit := aDefaultLimit -] - -{ #category : #accessing } -XMLParserLimits >> documentReadLimit [ - ^ documentReadLimit -] - -{ #category : #accessing } -XMLParserLimits >> documentReadLimit: anInteger [ - documentReadLimit := anInteger -] - -{ #category : #initialization } -XMLParserLimits >> initialize [ - super initialize. - - documentReadLimit := self class defaultDocumentReadLimit. - maxEntityReplacementDepth := self class defaultMaxEntityReplacementDepth. -] - -{ #category : #accessing } -XMLParserLimits >> maxEntityReplacementDepth [ - ^ maxEntityReplacementDepth -] - -{ #category : #accessing } -XMLParserLimits >> maxEntityReplacementDepth: anInteger [ - maxEntityReplacementDepth := anInteger -] - -{ #category : #removing } -XMLParserLimits >> removeAll [ - documentReadLimit := nil. - maxEntityReplacementDepth := nil. -] diff --git a/src/XML-Parser/XMLParserTokenizer.class.st b/src/XML-Parser/XMLParserTokenizer.class.st deleted file mode 100644 index c52bab531..000000000 --- a/src/XML-Parser/XMLParserTokenizer.class.st +++ /dev/null @@ -1,642 +0,0 @@ -" -This is a base class for parser tokenizers that read tokens from a stream using an XMLNestedStreamReader and state objects. Sending #nextToken causes a token to be read and handler messages to be sent to a driver. - -Be careful changing the code in this class or subclasses because it's optimized. -" -Class { - #name : #XMLParserTokenizer, - #superclass : #Object, - #instVars : [ - 'state', - 'driver', - 'elementNester', - 'streamReader', - 'nameStream', - 'xmlDeclarationStream', - 'characterStream' - ], - #classVars : [ - 'PredefinedEntities' - ], - #category : #'XML-Parser-Drivers' -} - -{ #category : #'instance creation' } -XMLParserTokenizer class >> driver: aDriver on: aStringOrStream [ - ^self - driver: aDriver - on: aStringOrStream - readLimit: nil -] - -{ #category : #'instance creation' } -XMLParserTokenizer class >> driver: aDriver on: aStringOrStream readLimit: anInteger [ - ^self new - setDriver: aDriver - stream: - (aStringOrStream isStream - ifTrue: [aStringOrStream] - ifFalse: [aStringOrStream readStream]) - readLimit: anInteger -] - -{ #category : #'class initialization' } -XMLParserTokenizer class >> initialize [ - "self initialize" - - "assign after with #yourself to avoid possible race - conditions when reinitializing the class" - PredefinedEntities := - Dictionary new - at: 'lt' put: $<; - at: 'gt' put: $>; - at: 'amp' put: $&; - at: 'apos' put: $'; - at: 'quot' put: $"; - yourself -] - -{ #category : #accessing } -XMLParserTokenizer class >> predefinedEntities [ - ^ PredefinedEntities -] - -{ #category : #testing } -XMLParserTokenizer >> atEnd [ - ^ state isTerminatedState -] - -{ #category : #decoding } -XMLParserTokenizer >> characterFromCodePoint: aCodePoint [ - (aCodePoint notNil - and: [aCodePoint > 0 - and: [aCodePoint <= 16r10FFFF]]) - ifTrue: [ - ^ [Character value: aCodePoint] - on: Error - do: [:error | nil]] - ifFalse: [^ nil] -] - -{ #category : #closing } -XMLParserTokenizer >> closeStreams [ - streamReader closeStreams -] - -{ #category : #decoding } -XMLParserTokenizer >> convertFromEncoding: anEncodingName [ - driver decodesCharacters - ifTrue: [streamReader convertFromEncoding: anEncodingName] -] - -{ #category : #accessing } -XMLParserTokenizer >> currentColumnNumber [ - ^ streamReader currentColumnNumber -] - -{ #category : #accessing } -XMLParserTokenizer >> currentLineNumber [ - ^ streamReader currentLineNumber -] - -{ #category : #accessing } -XMLParserTokenizer >> currentPosition [ - ^ streamReader currentPosition -] - -{ #category : #accessing } -XMLParserTokenizer >> driver [ - ^ driver -] - -{ #category : #accessing } -XMLParserTokenizer >> elementNester [ - ^ elementNester -] - -{ #category : #errors } -XMLParserTokenizer >> errorExpected: aDescription [ - self parseError: 'Expected ', aDescription -] - -{ #category : #errors } -XMLParserTokenizer >> errorExpected: aDescription butGot: aCharacterOrString [ - self - formatParseError: 'Expected {1} but got "{2}" instead' - with: aDescription - with: aCharacterOrString -] - -{ #category : #errors } -XMLParserTokenizer >> errorExpectedLiteral: aCharacterOrString [ - self - errorExpectedLiteral: aCharacterOrString - butGot: nil -] - -{ #category : #errors } -XMLParserTokenizer >> errorExpectedLiteral: anExpectedCharacterOrString butGot: aReceivedCharacterOrString [ - self - formatParseError: 'Expected "{1}" but got "{2}" instead' - with: anExpectedCharacterOrString - with: aReceivedCharacterOrString -] - -{ #category : #'tokenizing - expecting' } -XMLParserTokenizer >> expectNext: aCharacter [ - self subclassResponsibility -] - -{ #category : #'tokenizing - expecting' } -XMLParserTokenizer >> expectNextAll: aString [ - self subclassResponsibility -] - -{ #category : #errors } -XMLParserTokenizer >> formatParseError: aString with: aFirstValue [ - self - formatParseError: aString - withArguments: (Array with: aFirstValue) -] - -{ #category : #errors } -XMLParserTokenizer >> formatParseError: aString with: aFirstValue with: aSecondValue [ - self - formatParseError: aString - withArguments: - (Array - with: aFirstValue - with: aSecondValue) -] - -{ #category : #errors } -XMLParserTokenizer >> formatParseError: aString with: aFirstValue with: aSecondValue with: aThirdValue [ - self - formatParseError: aString - withArguments: - (Array - with: aFirstValue - with: aSecondValue - with: aThirdValue) -] - -{ #category : #errors } -XMLParserTokenizer >> formatParseError: aString with: aFirstValue with: aSecondValue with: aThirdValue with: aFourthValue [ - self - formatParseError: aString - withArguments: - (Array - with: aFirstValue - with: aSecondValue - with: aThirdValue - with: aFourthValue) -] - -{ #category : #errors } -XMLParserTokenizer >> formatParseError: aString withArguments: aValueCollection [ - self parseError: - (aString format: - "convert nils to empty strings, so nil values are - not printed as 'nil' in error messsages" - (aValueCollection collect: [:each | - each ifNil: ['']])) -] - -{ #category : #defaults } -XMLParserTokenizer >> hexCharacterValueLiteralPrefixes [ - ^ 'x' -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextCDataSection [ - self subclassResponsibility - -] - -{ #category : #decoding } -XMLParserTokenizer >> nextCharacterValueLiteral [ - ^ self nextCharacterValueLiteralPrintedOn: nil -] - -{ #category : #decoding } -XMLParserTokenizer >> nextCharacterValueLiteralPrintedOn: aStream [ - "do not limit the number of chars read, because char values can - have an arbitrary number of leading zeros" - ^ (XMLSmallIntegerReader on: streamReader) - printStream: aStream; - nextIntegerWithBase: 16 - andPrefixes: self hexCharacterValueLiteralPrefixes - orBase: 10 -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextContentMarkupToken [ - self subclassResponsibility -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextContentToken [ - streamReader peek == $< - ifTrue: [ - streamReader next. - ^ self nextContentMarkupToken]. - elementNester isInElement - ifTrue: [^ self nextPCDataToken]. - self nextNonElementWhitespace. -] - -{ #category : #'tokenizing - dtd' } -XMLParserTokenizer >> nextDoctypeDeclaration [ - | root publicID systemID | - - state := state doctypeDeclarationState. - self - expectNextAll: 'DOCTYPE'; - nextSeparators. - - root := self nextElementName. - (streamReader peek == $[ - or: [streamReader peek == $>]) - ifFalse: [ - self nextSeparators. - streamReader peek == $P - ifTrue: [ - publicID := self nextPublicID. - self nextSeparators. - systemID := self nextSystemIDLiteral] - ifFalse: [ - streamReader peek == $S - ifTrue: [systemID := self nextSystemID]]]. - driver - handleStartDTD: root - publicID: (publicID ifNil: ['']) - systemID: (systemID ifNil: ['']). - - streamReader skipSeparators. - streamReader peek == $[ - ifTrue: [self nextStartInternalSubset] - ifFalse: [self nextEndDoctypeDeclaration]. -] - -{ #category : #'tokenizing - dtd' } -XMLParserTokenizer >> nextDoctypeDeclarationTerminator [ - self expectNext: $> -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextElementName [ - self subclassResponsibility -] - -{ #category : #'tokenizing - dtd' } -XMLParserTokenizer >> nextEndDoctypeDeclaration [ - self nextDoctypeDeclarationTerminator. - state := state postDoctypeDeclarationState. - - driver handleEndDTD. -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextEndDocument [ - state isTerminatedState - ifFalse: [ - self closeStreams. - state := state terminatedState. - driver handleEndDocument] -] - -{ #category : #'tokenizing - dtd' } -XMLParserTokenizer >> nextEndInternalSubset [ - "skip ]" - streamReader - next; - skipSeparators. - self nextEndDoctypeDeclaration. -] - -{ #category : #'tokenizing - dtd' } -XMLParserTokenizer >> nextInternalSubsetToken [ - streamReader skipSeparators. - streamReader peek == $% - ifTrue: [ - streamReader next. - ^ self nextParameterEntityReference]. - streamReader peek == $] - ifTrue: [^ self nextEndInternalSubset]. - self nextSubsetMarkupToken. -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextNonElementWhitespace [ - self subclassResponsibility -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextNonPIPrologOrContentMarkupToken [ - self subclassResponsibility -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextPCDataToken [ - self subclassResponsibility -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextPI [ - "skip ?" - streamReader next. - self nextPIWithTarget: self nextPITarget. -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextPIData [ - self subclassResponsibility -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextPITarget [ - "should return a PI target string or nil if it's the start of - an '' declaration" - self subclassResponsibility -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextPITerminator [ - self expectNext: $> -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextPIWithTarget: aTarget [ - streamReader peek == $? - ifTrue: [ - streamReader next. - self nextPITerminator. - driver - handlePI: aTarget - data: ''] - ifFalse: [ - self nextSeparators. - driver - handlePI: aTarget - data: self nextPIData]. -] - -{ #category : #'tokenizing - dtd' } -XMLParserTokenizer >> nextParameterEntityReference [ - self subclassResponsibility -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextPrologToken [ - self subclassResponsibility -] - -{ #category : #'tokenizing - dtd' } -XMLParserTokenizer >> nextPublicID [ - ^ self - expectNextAll: 'PUBLIC'; - nextSeparators; - nextPublicIDLiteral -] - -{ #category : #'tokenizing - dtd' } -XMLParserTokenizer >> nextPublicIDLiteral [ - self subclassResponsibility -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextSeparators [ - self subclassResponsibility -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextStartContent [ - state := state contentState. - elementNester := driver elementNester. - driver handleStartContent. -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextStartDocument [ - self state: driver newInitialState. - driver handleStartDocument. -] - -{ #category : #'tokenizing - dtd' } -XMLParserTokenizer >> nextStartInternalSubset [ - "skip [" - streamReader next. - state := state internalSubsetState. -] - -{ #category : #'tokenizing - dtd' } -XMLParserTokenizer >> nextSubsetMarkupToken [ - self subclassResponsibility -] - -{ #category : #'tokenizing - dtd' } -XMLParserTokenizer >> nextSystemID [ - ^ self - expectNextAll: 'SYSTEM'; - nextSeparators; - nextSystemIDLiteral -] - -{ #category : #'tokenizing - dtd' } -XMLParserTokenizer >> nextSystemIDLiteral [ - self subclassResponsibility -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextToken [ - streamReader atEnd - ifTrue: [ - state isInitializedState - ifTrue: [^ self nextEndDocument]]. - ^ state nextTokenFrom: self. -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextXMLAttributeEqualsSeparator [ - streamReader skipSeparators. - self expectNext: $=. - streamReader skipSeparators. -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextXMLAttributeName: aName [ - self expectNextAll: aName -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextXMLDeclaration [ - | version encoding | - - self nextSeparators. - version := self nextXMLVersionAttributeRequired: true. - streamReader peek == $? - ifFalse: [self nextSeparators]. - (encoding := self nextXMLEncodingAttributeRequired: false) isEmpty - ifFalse: [ - self convertFromEncoding: encoding. - streamReader peek == $? - ifFalse: [self nextSeparators]]. - driver - handleXMLVersion: version - encoding: encoding - standalone: self nextXMLStandaloneAttribute. - streamReader skipSeparators. - self nextXMLDeclarationTerminator. - - state := state prologState. -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextXMLDeclarationOrPrologToken [ - streamReader peek == $< - ifTrue: [ - streamReader next. - streamReader peek == $? - ifTrue: [ - streamReader next. - self nextPITarget - ifNil: [^ self nextXMLDeclaration] - ifNotNil: [:target | - state := state prologState. - ^ self nextPIWithTarget: target]]. - state := state prologState. - ^ self nextNonPIPrologOrContentMarkupToken]. - - "other prolog tokens can have whitespace before them, so the doc - does not need to start with an '<' for them" - state := state prologState. - self nextPrologToken. -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextXMLDeclarationTerminator [ - self expectNextAll: '?>' -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextXMLEncodingAttributeRequired: aBoolean [ - (aBoolean - or: [streamReader peek == $e]) - ifTrue: [ - ^ self - nextXMLAttributeName: 'encoding'; - nextXMLAttributeEqualsSeparator; - nextXMLEncodingAttributeValue] - ifFalse: [^ ''] -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextXMLEncodingAttributeValue [ - self subclassResponsibility -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextXMLStandaloneAttribute [ - "always optional" - (streamReader peek == $s) - ifTrue: [ - ^ self - nextXMLAttributeName: 'standalone'; - nextXMLAttributeEqualsSeparator; - nextXMLStandaloneAttributeValue] - ifFalse: [^ ''] -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextXMLStandaloneAttributeValue [ - self subclassResponsibility -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextXMLVersionAttributeRequired: aBoolean [ - (aBoolean - or: [streamReader peek == $v]) - ifTrue: [ - ^ self - nextXMLAttributeName: 'version'; - nextXMLAttributeEqualsSeparator; - nextXMLVersionAttributeValue] - ifFalse: [^ ''] -] - -{ #category : #tokenizing } -XMLParserTokenizer >> nextXMLVersionAttributeValue [ - self subclassResponsibility -] - -{ #category : #accessing } -XMLParserTokenizer >> normalizedLineEndingChar [ - ^ streamReader normalizedLineEndingChar -] - -{ #category : #accessing } -XMLParserTokenizer >> normalizedLineEndingChar: aCharacter [ - streamReader normalizedLineEndingChar: aCharacter -] - -{ #category : #errors } -XMLParserTokenizer >> parseError: aString [ - driver handleParseError: aString -] - -{ #category : #printing } -XMLParserTokenizer >> printOn: aStream [ - super printOn: aStream. - - aStream - nextPut: $(; - print: state; - nextPutAll: '; '; - print: streamReader; - nextPut: $). -] - -{ #category : #initialization } -XMLParserTokenizer >> setDriver: aDriver stream: aStream readLimit: anInteger [ - state := XMLUninitializedState new. - driver := aDriver. - streamReader := - self streamReaderClass - on: aStream - readLimit: anInteger. - - "must use #writeStream instead of 'WriteStream on:' to get 0-based - streams on Gemstone" - nameStream := (String new: 16) writeStream. - "this separate stream is needed because XML text delcarations can occur - in the replacement of external general entity references in PCDATA and - external parameter entity references within declarations in the external - subset or external entities, and characterStream would already be in use - in both cases" - xmlDeclarationStream := (String new: 8) writeStream. - characterStream := (String new: 128) writeStream. -] - -{ #category : #accessing } -XMLParserTokenizer >> state [ - ^ state -] - -{ #category : #accessing } -XMLParserTokenizer >> state: aTokenState [ - (state := aTokenState) isContentState - ifTrue: [elementNester := driver elementNester]. - (driver decodesCharacters - and: [state supportsEncodingDetection]) - ifTrue: [streamReader detectEncoding]. -] - -{ #category : #accessing } -XMLParserTokenizer >> streamReader [ - ^ streamReader -] - -{ #category : #defaults } -XMLParserTokenizer >> streamReaderClass [ - ^ XMLNestedStreamReader -] diff --git a/src/XML-Parser/XMLParsingInterruptException.class.st b/src/XML-Parser/XMLParsingInterruptException.class.st deleted file mode 100644 index e25b50041..000000000 --- a/src/XML-Parser/XMLParsingInterruptException.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -Used to interrupt parsing from a SAXHandler. Will be silently caught. -" -Class { - #name : #XMLParsingInterruptException, - #superclass : #XMLParserException, - #category : #'XML-Parser-Exceptions' -} - -{ #category : #testing } -XMLParsingInterruptException >> shouldPassOnWhenCaught [ - ^ false -] diff --git a/src/XML-Parser/XMLPercentDecodingReadStreamAdapter.class.st b/src/XML-Parser/XMLPercentDecodingReadStreamAdapter.class.st deleted file mode 100644 index 651fe3665..000000000 --- a/src/XML-Parser/XMLPercentDecodingReadStreamAdapter.class.st +++ /dev/null @@ -1,51 +0,0 @@ -" -This class percent decodes octets for URIs. -" -Class { - #name : #XMLPercentDecodingReadStreamAdapter, - #superclass : #XMLReadStreamAdapter, - #category : #'XML-Parser-Streams' -} - -{ #category : #testing } -XMLPercentDecodingReadStreamAdapter >> atEnd [ - ^ stream atEnd - or: [stream peek ~~ $%] -] - -{ #category : #testing } -XMLPercentDecodingReadStreamAdapter >> isBinary [ - "this stream is binary, because it reads percent-encoded octets - character sequences like '%HH' and returns the octet values as - SmallIntegers" - ^ true -] - -{ #category : #accessing } -XMLPercentDecodingReadStreamAdapter >> next [ - | byte | - - (stream atEnd not - and: [stream peek == $%]) - ifTrue: [ - stream next. - byte := - (XMLSmallIntegerReader - readFrom: stream - withBase: 16 - upToLimit: 2) - ifNil: [37] "$% asciiValue"]. - ^ byte. -] - -{ #category : #accessing } -XMLPercentDecodingReadStreamAdapter >> peek [ - | byte | - - stream atEnd - ifFalse: [| oldPosition | - oldPosition := stream position. - byte := self next. - stream position: oldPosition]. - ^ byte. -] diff --git a/src/XML-Parser/XMLPercentEncodingWriteStreamAdapter.class.st b/src/XML-Parser/XMLPercentEncodingWriteStreamAdapter.class.st deleted file mode 100644 index 3315048fa..000000000 --- a/src/XML-Parser/XMLPercentEncodingWriteStreamAdapter.class.st +++ /dev/null @@ -1,43 +0,0 @@ -" -A write stream adapter for percent encoding octets for URIs. -" -Class { - #name : #XMLPercentEncodingWriteStreamAdapter, - #superclass : #XMLWriteStreamAdapter, - #category : #'XML-Parser-Streams' -} - -{ #category : #testing } -XMLPercentEncodingWriteStreamAdapter >> isBinary [ - "this stream is binary, because it accepts binary octet values - and percent-encodes them as '%HH' character sequences" - ^ true -] - -{ #category : #accessing } -XMLPercentEncodingWriteStreamAdapter >> nextPut: anObject [ - | byte | - - stream nextPut: $%. - - "pad it if needed" - (byte := anObject asInteger) < 16r10 - ifTrue: [stream nextPut: $0]. - - "On GS, #printOn:base: shows the radix, so #printOn:base:showRadix: - is used instead" - byte - printOn: stream - base: 16 - showRadix: false. - ^ anObject. -] - -{ #category : #accessing } -XMLPercentEncodingWriteStreamAdapter >> nextPutAll: aCollection [ - "can't use #to:do: here because other #nextPutAll: implementations - support non-sequenceable collection arguments wtih #do:" - aCollection do: [:each | - self nextPut: each]. - ^ aCollection. -] diff --git a/src/XML-Parser/XMLPluggableAttributeSpec.class.st b/src/XML-Parser/XMLPluggableAttributeSpec.class.st deleted file mode 100644 index 82e69d792..000000000 --- a/src/XML-Parser/XMLPluggableAttributeSpec.class.st +++ /dev/null @@ -1,35 +0,0 @@ -" -A block-based pluggable attribute spec that evaluates blocks with the attribute dictionary to test matching. -" -Class { - #name : #XMLPluggableAttributeSpec, - #superclass : #XMLAttributeSpec, - #instVars : [ - 'block' - ], - #category : #'XML-Parser-Utils' -} - -{ #category : #generated } -XMLPluggableAttributeSpec class >> block: aOneArgumentBlock [ - ^ self new block: aOneArgumentBlock -] - -{ #category : #accessing } -XMLPluggableAttributeSpec >> block [ - ^ block -] - -{ #category : #accessing } -XMLPluggableAttributeSpec >> block: aOneArgumentBlock [ - block := aOneArgumentBlock -] - -{ #category : #matching } -XMLPluggableAttributeSpec >> matchesAttributes: anAttributeDictionary [ - "if there's no block, then it automatically matches, similar to an - XMLBasicAttributeSpec with no attributes" - block - ifNil: [^ true] - ifNotNil: [^ block value: anAttributeDictionary] -] diff --git a/src/XML-Parser/XMLPluggableElementFactory.class.st b/src/XML-Parser/XMLPluggableElementFactory.class.st deleted file mode 100644 index dd0ee33c9..000000000 --- a/src/XML-Parser/XMLPluggableElementFactory.class.st +++ /dev/null @@ -1,180 +0,0 @@ -" -This class is a pluggable node factory that can also map elements to different XMLElement subclasses based on the name, namespace information, and attributes of those elements. You have to create an instance, configure it to handle certain elements with certain classes, and then inject your instance into a DOM parser using #nodeFactory: before parsing. Here is an example: - - (XMLDOMParser on: anXMLStringOrStream) - nodeFactory: - (XMLPluggableElementFactory new - elementClass: GenericElement; - handleElement: 'user' withClass: UserElement; - handleElement: 'report' withClass: ReportElement; - handleElement: 'report' namespaceURI: 'urn:specialreprot' withClass: SpecialReportElement); - parseDocument. - -Instances can be saved and reused for performance and safely modified after copying. -" -Class { - #name : #XMLPluggableElementFactory, - #superclass : #XMLPluggableNodeFactory, - #instVars : [ - 'elementClassMapper' - ], - #category : #'XML-Parser-DOM' -} - -{ #category : #accessing } -XMLPluggableElementFactory >> classForElement: aQualifiedName [ - ^ elementClassMapper - classForElement: aQualifiedName - ifNone: [self elementClass] -] - -{ #category : #accessing } -XMLPluggableElementFactory >> classForElement: aQualifiedName attributes: anAssociationCollection [ - ^ elementClassMapper - classForElement: aQualifiedName - attributes: anAssociationCollection - ifNone: [self elementClass] -] - -{ #category : #accessing } -XMLPluggableElementFactory >> classForElement: aQualifiedName namespaceURI: aURI [ - ^ elementClassMapper - classForElement: aQualifiedName - namespaceURI: aURI - ifNone: [self elementClass] -] - -{ #category : #accessing } -XMLPluggableElementFactory >> classForElement: aQualifiedName namespaceURI: aURI attributes: anAssociationCollection [ - ^ elementClassMapper - classForElement: aQualifiedName - namespaceURI: aURI - attributes: anAssociationCollection - ifNone: [self elementClass] -] - -{ #category : #accessing } -XMLPluggableElementFactory >> classForElement: aQualifiedName namespaceURI: aURI localName: aLocalName attributes: anAssociationCollection [ - ^ elementClassMapper - classForElement: aQualifiedName - namespaceURI: aURI - localName: aLocalName - attributes: anAssociationCollection - ifNone: [self elementClass] -] - -{ #category : #private } -XMLPluggableElementFactory >> elementClassMapper [ - ^ elementClassMapper -] - -{ #category : #private } -XMLPluggableElementFactory >> elementClassMapper: anElementClassMapper [ - elementClassMapper := anElementClassMapper -] - -{ #category : #defaults } -XMLPluggableElementFactory >> elementClassMapperClass [ - ^ XMLBasicElementClassMapper -] - -{ #category : #handling } -XMLPluggableElementFactory >> handleElement: anElementName attributes: aCollectionOrAttributeSpec withClass: aClass [ - "aCollectionOrAttributeSpec can be some kind of XMLAttributeSpec or a - collection of associations of required attribute names and values, and the - required values can be strings, blocks, or nil meaning the attribute is - required but can take any value" - - elementClassMapper - mapElement: anElementName - attributeSpec: aCollectionOrAttributeSpec asXMLAttributeSpec - toClass: aClass -] - -{ #category : #handling } -XMLPluggableElementFactory >> handleElement: anElementName namespaceURI: aURI attributes: aCollectionOrAttributeSpec withClass: aClass [ - "aCollectionOrAttributeSpec can be some kind of XMLAttributeSpec or a - collection of associations of required attribute names and values, and the - required values can be strings, blocks, or nil meaning the attribute is - required but can take any value" - - elementClassMapper - mapElement: anElementName - namespaceURI: aURI - attributeSpec: aCollectionOrAttributeSpec asXMLAttributeSpec - toClass: aClass -] - -{ #category : #handling } -XMLPluggableElementFactory >> handleElement: anElementName namespaceURI: aURI withClass: aClass [ - elementClassMapper - mapElement: anElementName - namespaceURI: aURI - toClass: aClass -] - -{ #category : #handling } -XMLPluggableElementFactory >> handleElement: anElementName withClass: aClass [ - elementClassMapper - mapElement: anElementName - toClass: aClass -] - -{ #category : #handling } -XMLPluggableElementFactory >> handleElements: anElementNameCollection namespaceURI: aNamespaceURI withClass: aClass [ - elementClassMapper - mapElements: anElementNameCollection - namespaceURI: aNamespaceURI - toClass: aClass -] - -{ #category : #handling } -XMLPluggableElementFactory >> handleElements: anElementNameCollection withClass: aClass [ - elementClassMapper - mapElements: anElementNameCollection - toClass: aClass -] - -{ #category : #handling } -XMLPluggableElementFactory >> handleElementsMatchingClass: aClass [ - "This will handle all elements matching the name of a class with that - class, but igoring the class's prefix and any 'Element' suffix. - - For example, it will match MyUserDefinedElement to: - - - - " - - elementClassMapper - mapAllMatchingElementsToClass: aClass - ignoringSuffixes: self ignorableClassNameSuffixes -] - -{ #category : #handling } -XMLPluggableElementFactory >> handleElementsMatchingClasses: aClassCollection [ - "See the comment in #handleElementsMatchingClass:" - - elementClassMapper - mapAllMatchingElementsToClasses: aClassCollection - ignoringSuffixes: self ignorableClassNameSuffixes -] - -{ #category : #defaults } -XMLPluggableElementFactory >> ignorableClassNameSuffixes [ - ^ #('Element') -] - -{ #category : #initialization } -XMLPluggableElementFactory >> initialize [ - super initialize. - - elementClassMapper := self elementClassMapperClass new. -] - -{ #category : #copying } -XMLPluggableElementFactory >> postCopy [ - super postCopy. - - elementClassMapper := elementClassMapper copy. -] diff --git a/src/XML-Parser/XMLPluggableNodeFactory.class.st b/src/XML-Parser/XMLPluggableNodeFactory.class.st deleted file mode 100644 index 2607e63e5..000000000 --- a/src/XML-Parser/XMLPluggableNodeFactory.class.st +++ /dev/null @@ -1,141 +0,0 @@ -" -This is a pluggable node factory that can be used to change which classes the DOM parser uses to build the DOM tree. Here is an example: - - (XMLDOMParser on: anXMLStringOrStream) - nodeFactory: - (XMLPluggableNodeFactory new - documentClass: MyDocumentClass; - elementClass: MyElementClass; - stringNodeClass: MyStringNodeClass); - parseDocument. - -Instances can be saved and reused for performance and safely modified after copying. -" -Class { - #name : #XMLPluggableNodeFactory, - #superclass : #XMLNodeFactory, - #instVars : [ - 'documentClass', - 'elementClass', - 'stringNodeClass', - 'cdataClass', - 'commentClass', - 'piClass', - 'nodeListClass', - 'attributeListClass' - ], - #category : #'XML-Parser-DOM' -} - -{ #category : #converting } -XMLPluggableNodeFactory >> asPluggableNodeFactory [ - ^ self -] - -{ #category : #accessing } -XMLPluggableNodeFactory >> attributeListClass [ - ^ attributeListClass -] - -{ #category : #accessing } -XMLPluggableNodeFactory >> attributeListClass: aClass [ - attributeListClass := aClass -] - -{ #category : #accessing } -XMLPluggableNodeFactory >> cdataClass [ - ^ cdataClass -] - -{ #category : #accessing } -XMLPluggableNodeFactory >> cdataClass: aClass [ - cdataClass := aClass -] - -{ #category : #accessing } -XMLPluggableNodeFactory >> commentClass [ - ^ commentClass -] - -{ #category : #accessing } -XMLPluggableNodeFactory >> commentClass: aClass [ - commentClass := aClass -] - -{ #category : #accessing } -XMLPluggableNodeFactory >> documentClass [ - ^ documentClass -] - -{ #category : #accessing } -XMLPluggableNodeFactory >> documentClass: aClass [ - documentClass := aClass -] - -{ #category : #accessing } -XMLPluggableNodeFactory >> elementClass [ - ^ elementClass -] - -{ #category : #accessing } -XMLPluggableNodeFactory >> elementClass: aClass [ - elementClass := aClass -] - -{ #category : #initialization } -XMLPluggableNodeFactory >> initialize [ - super initialize. - - documentClass := XMLDocument. - elementClass := XMLElement. - stringNodeClass := XMLString. - cdataClass := XMLCData. - commentClass := XMLComment. - piClass := XMLPI. - nodeListClass := XMLNodeList. - attributeListClass := XMLCachingAttributeList. -] - -{ #category : #accessing } -XMLPluggableNodeFactory >> nodeListClass [ - ^ nodeListClass -] - -{ #category : #accessing } -XMLPluggableNodeFactory >> nodeListClass: aClass [ - nodeListClass := aClass -] - -{ #category : #accessing } -XMLPluggableNodeFactory >> piClass [ - ^ piClass -] - -{ #category : #accessing } -XMLPluggableNodeFactory >> piClass: aClass [ - piClass := aClass -] - -{ #category : #deprecated } -XMLPluggableNodeFactory >> stringClass [ - "will be deprecated; use #stringNodeClass instead" - - ^ stringNodeClass -] - -{ #category : #deprecated } -XMLPluggableNodeFactory >> stringClass: aClass [ - "will be deprecated; use #stringNodeClass: instead" - - stringNodeClass := aClass -] - -{ #category : #accessing } -XMLPluggableNodeFactory >> stringNodeClass [ - ^ stringNodeClass -] - -{ #category : #accessing } -XMLPluggableNodeFactory >> stringNodeClass: aClass [ - stringNodeClass := aClass -] diff --git a/src/XML-Parser/XMLPostDoctypeDeclarationState.class.st b/src/XML-Parser/XMLPostDoctypeDeclarationState.class.st deleted file mode 100644 index 93ef50a29..000000000 --- a/src/XML-Parser/XMLPostDoctypeDeclarationState.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -A state for parsing prolog tokens after declarations. -" -Class { - #name : #XMLPostDoctypeDeclarationState, - #superclass : #XMLPrologState, - #category : #'XML-Parser-Drivers' -} - -{ #category : #testing } -XMLPostDoctypeDeclarationState >> isPostDoctypeDeclarationState [ - ^ true -] diff --git a/src/XML-Parser/XMLPrologState.class.st b/src/XML-Parser/XMLPrologState.class.st deleted file mode 100644 index ae2998d68..000000000 --- a/src/XML-Parser/XMLPrologState.class.st +++ /dev/null @@ -1,23 +0,0 @@ -" -A state for prolog tokens. -" -Class { - #name : #XMLPrologState, - #superclass : #XMLTokenizerState, - #category : #'XML-Parser-Drivers' -} - -{ #category : #testing } -XMLPrologState >> canTerminateInput [ - ^ false -] - -{ #category : #testing } -XMLPrologState >> isPrologState [ - ^ true -] - -{ #category : #tokenizing } -XMLPrologState >> nextTokenFrom: aTokenizer [ - ^ aTokenizer nextPrologToken -] diff --git a/src/XML-Parser/XMLPushedBackEntity.class.st b/src/XML-Parser/XMLPushedBackEntity.class.st deleted file mode 100644 index 67f7bd89d..000000000 --- a/src/XML-Parser/XMLPushedBackEntity.class.st +++ /dev/null @@ -1,96 +0,0 @@ -" -An abstract base class for decorating pushed-back entities to keep track of the nesting of markup within entity replacements. -" -Class { - #name : #XMLPushedBackEntity, - #superclass : #Object, - #instVars : [ - 'entity' - ], - #category : #'XML-Parser-Drivers' -} - -{ #category : #'instance creation' } -XMLPushedBackEntity class >> entity: anEntity [ - ^ self new entity: anEntity -] - -{ #category : #converting } -XMLPushedBackEntity >> asPushedBackEntity [ - ^ self -] - -{ #category : #converting } -XMLPushedBackEntity >> asReference [ - ^ entity asReference -] - -{ #category : #accessing } -XMLPushedBackEntity >> entity [ - ^ entity -] - -{ #category : #accessing } -XMLPushedBackEntity >> entity: anEntity [ - entity := anEntity -] - -{ #category : #testing } -XMLPushedBackEntity >> hasReplacement [ - ^ entity hasReplacement -] - -{ #category : #testing } -XMLPushedBackEntity >> isExternal [ - ^ entity isExternal -] - -{ #category : #testing } -XMLPushedBackEntity >> isParameter [ - ^ entity isParameter -] - -{ #category : #testing } -XMLPushedBackEntity >> isStandaloneExternal [ - ^ entity isStandaloneExternal -] - -{ #category : #testing } -XMLPushedBackEntity >> isUnparsed [ - ^ entity isUnparsed -] - -{ #category : #accessing } -XMLPushedBackEntity >> name [ - ^ entity name -] - -{ #category : #nesting } -XMLPushedBackEntity >> poppedByTokenizer: aTokenizer [ - self subclassResponsibility -] - -{ #category : #printing } -XMLPushedBackEntity >> printOn: aStream [ - super printOn: aStream. - - aStream - nextPut: $(; - print: entity; - nextPut: $). -] - -{ #category : #accessing } -XMLPushedBackEntity >> replacement [ - ^ entity replacement -] - -{ #category : #accessing } -XMLPushedBackEntity >> replacementStream [ - ^ entity replacementStream -] - -{ #category : #accessing } -XMLPushedBackEntity >> uri [ - ^ entity uri -] diff --git a/src/XML-Parser/XMLPushedBackExternalStream.class.st b/src/XML-Parser/XMLPushedBackExternalStream.class.st deleted file mode 100644 index 040812724..000000000 --- a/src/XML-Parser/XMLPushedBackExternalStream.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -A class to store a nested external stream for XMLNestedStreamReader. -" -Class { - #name : #XMLPushedBackExternalStream, - #superclass : #XMLPushedBackStream, - #category : #'XML-Parser-Drivers' -} - -{ #category : #testing } -XMLPushedBackExternalStream >> isExternal [ - ^ true -] diff --git a/src/XML-Parser/XMLPushedBackGeneralEntity.class.st b/src/XML-Parser/XMLPushedBackGeneralEntity.class.st deleted file mode 100644 index 91ec25351..000000000 --- a/src/XML-Parser/XMLPushedBackGeneralEntity.class.st +++ /dev/null @@ -1,36 +0,0 @@ -" -A class to decorate pushed-back general entities to keep track of the nesting of elements within entity replacements. - -Each time a start tag is parsed from the entity's replacement, the count is incremented, and each time an end tag is parsed, it's decremented. If it goes negative, then an end tag terminated an element not started by the entity. When the entity is popped, the count should be zero. (This is more efficient than having the element nester also keep track of which entity replacement an element began in.) -" -Class { - #name : #XMLPushedBackGeneralEntity, - #superclass : #XMLPushedBackEntity, - #instVars : [ - 'totalOpenElements' - ], - #category : #'XML-Parser-Drivers' -} - -{ #category : #nesting } -XMLPushedBackGeneralEntity >> endElement [ - totalOpenElements := self totalOpenElements - 1 -] - -{ #category : #nesting } -XMLPushedBackGeneralEntity >> poppedByTokenizer: aTokenizer [ - totalOpenElements - ifNotNil: [ - totalOpenElements = 0 - ifFalse: [aTokenizer errorImproperGeneralEntityNesting]] -] - -{ #category : #nesting } -XMLPushedBackGeneralEntity >> startElement [ - totalOpenElements := self totalOpenElements + 1 -] - -{ #category : #accessing } -XMLPushedBackGeneralEntity >> totalOpenElements [ - ^ totalOpenElements ifNil: [totalOpenElements := 0] -] diff --git a/src/XML-Parser/XMLPushedBackInternalStream.class.st b/src/XML-Parser/XMLPushedBackInternalStream.class.st deleted file mode 100644 index 2397ead2d..000000000 --- a/src/XML-Parser/XMLPushedBackInternalStream.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -A class to store a nested internal stream for XMLNestedStreamReader. It reports the current position, line number, and line start position of its enclosing external stream. -" -Class { - #name : #XMLPushedBackInternalStream, - #superclass : #XMLPushedBackStream, - #category : #'XML-Parser-Drivers' -} diff --git a/src/XML-Parser/XMLPushedBackParameterEntity.class.st b/src/XML-Parser/XMLPushedBackParameterEntity.class.st deleted file mode 100644 index e7dfbc3a7..000000000 --- a/src/XML-Parser/XMLPushedBackParameterEntity.class.st +++ /dev/null @@ -1,34 +0,0 @@ -" -A class to decorate pushed-back parameter entities to keep track of the nesting of include sections within entity replacements. -" -Class { - #name : #XMLPushedBackParameterEntity, - #superclass : #XMLPushedBackEntity, - #instVars : [ - 'totalOpenIncludeSections' - ], - #category : #'XML-Parser-Drivers' -} - -{ #category : #nesting } -XMLPushedBackParameterEntity >> endIncludeSection [ - totalOpenIncludeSections := self totalOpenIncludeSections - 1 -] - -{ #category : #nesting } -XMLPushedBackParameterEntity >> poppedByTokenizer: aTokenizer [ - totalOpenIncludeSections - ifNotNil: [ - totalOpenIncludeSections = 0 - ifFalse: [aTokenizer driver handleImproperParameterEntityNesting]] -] - -{ #category : #nesting } -XMLPushedBackParameterEntity >> startIncludeSection [ - totalOpenIncludeSections := self totalOpenIncludeSections + 1 -] - -{ #category : #accessing } -XMLPushedBackParameterEntity >> totalOpenIncludeSections [ - ^ totalOpenIncludeSections ifNil: [totalOpenIncludeSections := 0] -] diff --git a/src/XML-Parser/XMLPushedBackStream.class.st b/src/XML-Parser/XMLPushedBackStream.class.st deleted file mode 100644 index 99689a68e..000000000 --- a/src/XML-Parser/XMLPushedBackStream.class.st +++ /dev/null @@ -1,74 +0,0 @@ -" -A base class to store a nested stream for XMLNestedStreamReader, along with its callback and the current position, line number, and line start position of the current external stream. -" -Class { - #name : #XMLPushedBackStream, - #superclass : #Object, - #instVars : [ - 'stream', - 'whenPoppedDo', - 'currentPosition', - 'currentLineNumber', - 'currentLineStartPosition' - ], - #category : #'XML-Parser-Drivers' -} - -{ #category : #'instance creation' } -XMLPushedBackStream class >> stream: aStream whenPoppedDo: aBlock currentPosition: aPosition currentLineNumber: aLineNumber currentLineStartPosition: aStartPosition [ - ^ self new - setStream: aStream - whenPoppedDo: aBlock - currentPosition: aPosition - currentLineNumber: aLineNumber - currentLineStartPosition: aStartPosition -] - -{ #category : #accessing } -XMLPushedBackStream >> currentLineNumber [ - ^ currentLineNumber -] - -{ #category : #accessing } -XMLPushedBackStream >> currentLineStartPosition [ - ^ currentLineStartPosition -] - -{ #category : #accessing } -XMLPushedBackStream >> currentPosition [ - ^ currentPosition -] - -{ #category : #testing } -XMLPushedBackStream >> isExternal [ - ^ false -] - -{ #category : #printing } -XMLPushedBackStream >> printOn: aStream [ - super printOn: aStream. - - aStream - nextPut: $(; - print: stream; - nextPut: $). -] - -{ #category : #initialization } -XMLPushedBackStream >> setStream: aStream whenPoppedDo: aBlock currentPosition: aPosition currentLineNumber: aLineNumber currentLineStartPosition: aStartPosition [ - stream := aStream. - whenPoppedDo := aBlock. - currentPosition := aPosition. - currentLineNumber := aLineNumber. - currentLineStartPosition := aStartPosition. -] - -{ #category : #accessing } -XMLPushedBackStream >> stream [ - ^ stream -] - -{ #category : #accessing } -XMLPushedBackStream >> whenPoppedDo [ - ^ whenPoppedDo -] diff --git a/src/XML-Parser/XMLReadStreamAdapter.class.st b/src/XML-Parser/XMLReadStreamAdapter.class.st deleted file mode 100644 index cb2acab9a..000000000 --- a/src/XML-Parser/XMLReadStreamAdapter.class.st +++ /dev/null @@ -1,144 +0,0 @@ -" -A base class for read stream adapters for basic streams that support #next, #peek, #atEnd, #position, #position:, and #reset. It adds support for skipping and reading upto a character or the end of the stream, and ensures #next and #peek return nil when the stream is #atEnd instead of raising an error. -" -Class { - #name : #XMLReadStreamAdapter, - #superclass : #XMLStreamAdapter, - #category : #'XML-Parser-Streams' -} - -{ #category : #'instance creation' } -XMLReadStreamAdapter class >> onIfBinaryOrExternal: aStream [ - ^ aStream isXMLBinaryOrExternalStream - ifTrue: [self on: aStream] - ifFalse: [nil] -] - -{ #category : #testing } -XMLReadStreamAdapter >> atEnd [ - ^ stream atEnd -] - -{ #category : #accessing } -XMLReadStreamAdapter >> contents [ - | oldPosition contents | - - oldPosition := self position. - self reset. - contents := self upToEnd. - self position: oldPosition. - ^ contents. -] - -{ #category : #private } -XMLReadStreamAdapter >> newWriteStream [ - ^ (self writeStreamCollectionClass new: 128) writeStream -] - -{ #category : #accessing } -XMLReadStreamAdapter >> next [ - stream atEnd - ifTrue: [^ nil] - ifFalse: [^ stream next] -] - -{ #category : #accessing } -XMLReadStreamAdapter >> next: anInteger [ - | writeStream i | - - writeStream := self newWriteStream. - i := 0. - [self atEnd - or: [i >= anInteger]] - whileFalse: [ - writeStream nextPut: self next. - i := i + 1]. - ^ writeStream contents. -] - -{ #category : #accessing } -XMLReadStreamAdapter >> peek [ - stream atEnd - ifTrue: [^ nil] - ifFalse: [^ stream peek] -] - -{ #category : #accessing } -XMLReadStreamAdapter >> peekFor: anObject [ - (self atEnd not - and: [self peek = anObject]) - ifTrue: [ - self next. - ^ true] - ifFalse: [^ false] -] - -{ #category : #positioning } -XMLReadStreamAdapter >> position [ - ^ stream position -] - -{ #category : #positioning } -XMLReadStreamAdapter >> position: anInteger [ - stream position: anInteger -] - -{ #category : #positioning } -XMLReadStreamAdapter >> reset [ - stream reset -] - -{ #category : #positioning } -XMLReadStreamAdapter >> skip: anInteger [ - "only supports skipping forwards" - 1 to: anInteger do: [:i | - self atEnd - ifTrue: [^ self]. - self next] -] - -{ #category : #positioning } -XMLReadStreamAdapter >> skipSeparators [ - "we use #isXMLWhitespace instead of the narrower, XML-specific - #isXMLSeparator, because this class supports non-XML input too" - [self atEnd not - and: [self peek isXMLWhitespace]] - whileTrue: [self next] -] - -{ #category : #positioning } -XMLReadStreamAdapter >> skipTo: anObject [ - [self atEnd] - whileFalse: [ - self next = anObject - ifTrue: [^ true]]. - ^ false. -] - -{ #category : #accessing } -XMLReadStreamAdapter >> upTo: anObject [ - | writeStream next | - - writeStream := self newWriteStream. - [self atEnd - or: [(next := self next) = anObject]] - whileFalse: [writeStream nextPut: next]. - ^ writeStream contents. -] - -{ #category : #accessing } -XMLReadStreamAdapter >> upToEnd [ - | writeStream | - - writeStream := self newWriteStream. - [self atEnd] - whileFalse: [writeStream nextPut: self next]. - ^ writeStream contents. -] - -{ #category : #defaults } -XMLReadStreamAdapter >> writeStreamCollectionClass [ - self isBinary - ifTrue: [^ ByteArray] - ifFalse: [^ String] -] diff --git a/src/XML-Parser/XMLReentrantMutex.class.st b/src/XML-Parser/XMLReentrantMutex.class.st deleted file mode 100644 index 345e41577..000000000 --- a/src/XML-Parser/XMLReentrantMutex.class.st +++ /dev/null @@ -1,29 +0,0 @@ -" -An abstract class for reentrant mutexes that support nested sends of #critical: by the same process without deadlocking. -" -Class { - #name : #XMLReentrantMutex, - #superclass : #XMLAbstractFactory, - #category : #'XML-Parser-Utils' -} - -{ #category : #testing } -XMLReentrantMutex class >> canBeImplemented [ - ^ true -] - -{ #category : #finding } -XMLReentrantMutex class >> noSupportedImplementationFound [ - Error signal: 'No supported reentrant mutex class available' -] - -{ #category : #defaults } -XMLReentrantMutex class >> preferredImplementation [ - "Prefer the Pharo/Squeak Mutex-based implementation" - ^ XMLStandardReentrantMutex -] - -{ #category : #'mutual exclusion' } -XMLReentrantMutex >> critical: aBlock [ - self subclassResponsibility -] diff --git a/src/XML-Parser/XMLSingleCharacterReadStream.class.st b/src/XML-Parser/XMLSingleCharacterReadStream.class.st deleted file mode 100644 index 447b0b677..000000000 --- a/src/XML-Parser/XMLSingleCharacterReadStream.class.st +++ /dev/null @@ -1,76 +0,0 @@ -" -A read stream for single characters. This is faster and uses less memory than converting a char to a string and using a read stream on it. -" -Class { - #name : #XMLSingleCharacterReadStream, - #superclass : #XMLAbstractReadStream, - #instVars : [ - 'character', - 'atEnd' - ], - #category : #'XML-Parser-Streams' -} - -{ #category : #testing } -XMLSingleCharacterReadStream >> atEnd [ - ^ atEnd -] - -{ #category : #closing } -XMLSingleCharacterReadStream >> close [ - atEnd := true -] - -{ #category : #accessing } -XMLSingleCharacterReadStream >> contents [ - ^ String with: character -] - -{ #category : #accessing } -XMLSingleCharacterReadStream >> next [ - atEnd - ifTrue: [^ nil] - ifFalse: [ - atEnd := true. - ^ character] -] - -{ #category : #initialization } -XMLSingleCharacterReadStream >> on: aCharacter [ - character := aCharacter. - atEnd := false. -] - -{ #category : #accessing } -XMLSingleCharacterReadStream >> peek [ - atEnd - ifTrue: [^ nil] - ifFalse: [^ character] -] - -{ #category : #positioning } -XMLSingleCharacterReadStream >> position [ - ^ atEnd - ifTrue: [1] - ifFalse: [0] -] - -{ #category : #positioning } -XMLSingleCharacterReadStream >> position: anInteger [ - atEnd := anInteger > 0 -] - -{ #category : #printing } -XMLSingleCharacterReadStream >> printOn: aStream [ - super printOn: aStream. - - aStream - nextPut: $(; - print: character; - nextPut: $). -] - -{ #category : #positioning } -XMLSingleCharacterReadStream >> reset [ - atEnd := false -] diff --git a/src/XML-Parser/XMLSmallIntegerReader.class.st b/src/XML-Parser/XMLSmallIntegerReader.class.st deleted file mode 100644 index aae9a394a..000000000 --- a/src/XML-Parser/XMLSmallIntegerReader.class.st +++ /dev/null @@ -1,23 +0,0 @@ -" -This class reads positive hex or decimal integers up to the maximum a SmallInteger can hold from minimal streams supporting #next, #peek, and #atEnd, handling overflow with saturation. It returns nil instead of raising errors for invalid integers. -" -Class { - #name : #XMLSmallIntegerReader, - #superclass : #XMLIntegerReader, - #classVars : [ - 'SmallIntegerMaxValue' - ], - #category : #'XML-Parser-Utils' -} - -{ #category : #'class initialization' } -XMLSmallIntegerReader class >> initialize [ - "self initialize" - - SmallIntegerMaxValue := SmallInteger maxVal -] - -{ #category : #defaults } -XMLSmallIntegerReader class >> maxIntegerValue [ - ^ SmallIntegerMaxValue -] diff --git a/src/XML-Parser/XMLStandaloneExternalAttributeFixedValueDefaultValidator.class.st b/src/XML-Parser/XMLStandaloneExternalAttributeFixedValueDefaultValidator.class.st deleted file mode 100644 index 25e5392c9..000000000 --- a/src/XML-Parser/XMLStandaloneExternalAttributeFixedValueDefaultValidator.class.st +++ /dev/null @@ -1,22 +0,0 @@ -" -This class will make sure the value of a standalone externally defined attribute is present and that it matches a fixed default value (the #FIXED constraint). -" -Class { - #name : #XMLStandaloneExternalAttributeFixedValueDefaultValidator, - #superclass : #XMLAttributeFixedValueDefaultValidator, - #category : #'XML-Parser-Validation-Standalone' -} - -{ #category : #private } -XMLStandaloneExternalAttributeFixedValueDefaultValidator >> errorStandaloneExternalAttributeDefaultFixedValueUsed [ - XMLValidationException - formatSignal: - 'Externally defined attribute "{1}" fixed default value ', - 'cannot be used by elements when standalone="yes"' - with: self attribute -] - -{ #category : #validating } -XMLStandaloneExternalAttributeFixedValueDefaultValidator >> validatedDefaultForAbsentAttributeValue [ - self errorStandaloneExternalAttributeDefaultFixedValueUsed -] diff --git a/src/XML-Parser/XMLStandaloneExternalAttributeValueDefaultValidator.class.st b/src/XML-Parser/XMLStandaloneExternalAttributeValueDefaultValidator.class.st deleted file mode 100644 index d8e8bab7d..000000000 --- a/src/XML-Parser/XMLStandaloneExternalAttributeValueDefaultValidator.class.st +++ /dev/null @@ -1,22 +0,0 @@ -" -This class will make sure the value of a standalone externally defined attribute is present (the default value is never used). -" -Class { - #name : #XMLStandaloneExternalAttributeValueDefaultValidator, - #superclass : #XMLAttributeValueDefaultValidator, - #category : #'XML-Parser-Validation-Standalone' -} - -{ #category : #private } -XMLStandaloneExternalAttributeValueDefaultValidator >> errorStandaloneExternalAttributeDefaultValueUsed [ - XMLValidationException - formatSignal: - 'Externally defined attribute "{1}" default value ', - 'cannot be used by elements when standalone="yes"' - with: self attribute -] - -{ #category : #validating } -XMLStandaloneExternalAttributeValueDefaultValidator >> validatedDefaultForAbsentAttributeValue [ - self errorStandaloneExternalAttributeDefaultValueUsed -] diff --git a/src/XML-Parser/XMLStandaloneExternalCDataAttributeValidator.class.st b/src/XML-Parser/XMLStandaloneExternalCDataAttributeValidator.class.st deleted file mode 100644 index 50265123e..000000000 --- a/src/XML-Parser/XMLStandaloneExternalCDataAttributeValidator.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -This class validates standalone externally defined CDATA attributes. It disallows attributes that need substitution with default or fixed default values. -" -Class { - #name : #XMLStandaloneExternalCDataAttributeValidator, - #superclass : #XMLCDataAttributeValidator, - #category : #'XML-Parser-Validation-Standalone' -} - -{ #category : #testing } -XMLStandaloneExternalCDataAttributeValidator >> isStandaloneExternal [ - ^ true -] diff --git a/src/XML-Parser/XMLStandaloneExternalDFAElementContentElementValidator.class.st b/src/XML-Parser/XMLStandaloneExternalDFAElementContentElementValidator.class.st deleted file mode 100644 index ba4d60dd3..000000000 --- a/src/XML-Parser/XMLStandaloneExternalDFAElementContentElementValidator.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -This class validates standalone externally defined elements with element content that cannot have whitespace between elements unlike the superclass. -" -Class { - #name : #XMLStandaloneExternalDFAElementContentElementValidator, - #superclass : #XMLDFAElementContentElementValidator, - #category : #'XML-Parser-Validation-Standalone' -} - -{ #category : #testing } -XMLStandaloneExternalDFAElementContentElementValidator >> ignoresWhitespace [ - ^ false -] diff --git a/src/XML-Parser/XMLStandaloneExternalEntitiesAttributeValidator.class.st b/src/XML-Parser/XMLStandaloneExternalEntitiesAttributeValidator.class.st deleted file mode 100644 index 7f6103fca..000000000 --- a/src/XML-Parser/XMLStandaloneExternalEntitiesAttributeValidator.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -This class validates standalone externally defined attributes with lists of unparsed entity name values (that must be declared) separated by spaces. It disallows attributes that require further value normalization or substitution with default or fixed default values. -" -Class { - #name : #XMLStandaloneExternalEntitiesAttributeValidator, - #superclass : #XMLEntitiesAttributeValidator, - #category : #'XML-Parser-Validation-Standalone' -} - -{ #category : #testing } -XMLStandaloneExternalEntitiesAttributeValidator >> isStandaloneExternal [ - ^ true -] diff --git a/src/XML-Parser/XMLStandaloneExternalEntityAttributeValidator.class.st b/src/XML-Parser/XMLStandaloneExternalEntityAttributeValidator.class.st deleted file mode 100644 index c0b3e4d54..000000000 --- a/src/XML-Parser/XMLStandaloneExternalEntityAttributeValidator.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -This class validates standalone externally defined attributes that contain unparsed entity names (that must be declared). It disallows attributes that require further value normalization or substitution with default or fixed default values. -" -Class { - #name : #XMLStandaloneExternalEntityAttributeValidator, - #superclass : #XMLEntityAttributeValidator, - #category : #'XML-Parser-Validation-Standalone' -} - -{ #category : #testing } -XMLStandaloneExternalEntityAttributeValidator >> isStandaloneExternal [ - ^ true -] diff --git a/src/XML-Parser/XMLStandaloneExternalEnumerationAttributeValidator.class.st b/src/XML-Parser/XMLStandaloneExternalEnumerationAttributeValidator.class.st deleted file mode 100644 index aaa5c412c..000000000 --- a/src/XML-Parser/XMLStandaloneExternalEnumerationAttributeValidator.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -This class validates attributes that can have any value taken from a list like ""(one|two|thee)"". It disallows attributes that require further value normalization or substitution with default or fixed default values. -" -Class { - #name : #XMLStandaloneExternalEnumerationAttributeValidator, - #superclass : #XMLEnumerationAttributeValidator, - #category : #'XML-Parser-Validation-Standalone' -} - -{ #category : #testing } -XMLStandaloneExternalEnumerationAttributeValidator >> isStandaloneExternal [ - ^ true -] diff --git a/src/XML-Parser/XMLStandaloneExternalIDAttributeValidator.class.st b/src/XML-Parser/XMLStandaloneExternalIDAttributeValidator.class.st deleted file mode 100644 index edd9c4a23..000000000 --- a/src/XML-Parser/XMLStandaloneExternalIDAttributeValidator.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -This class validates standalone externally defined ID attributes that must have unique (not repeated in the same document) values. It disallows attributes that require further value normalization. -" -Class { - #name : #XMLStandaloneExternalIDAttributeValidator, - #superclass : #XMLIDAttributeValidator, - #category : #'XML-Parser-Validation-Standalone' -} - -{ #category : #testing } -XMLStandaloneExternalIDAttributeValidator >> isStandaloneExternal [ - ^ true -] diff --git a/src/XML-Parser/XMLStandaloneExternalIDRefAttributeValidator.class.st b/src/XML-Parser/XMLStandaloneExternalIDRefAttributeValidator.class.st deleted file mode 100644 index 61ea51984..000000000 --- a/src/XML-Parser/XMLStandaloneExternalIDRefAttributeValidator.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -This class validates standalone externally defined attributes that refer to an ID of another element with an ID attribute. It disallows attributes that require further value normalization or substitution with default or fixed default values. -" -Class { - #name : #XMLStandaloneExternalIDRefAttributeValidator, - #superclass : #XMLIDRefAttributeValidator, - #category : #'XML-Parser-Validation-Standalone' -} - -{ #category : #testing } -XMLStandaloneExternalIDRefAttributeValidator >> isStandaloneExternal [ - ^ true -] diff --git a/src/XML-Parser/XMLStandaloneExternalIDRefsAttributeValidator.class.st b/src/XML-Parser/XMLStandaloneExternalIDRefsAttributeValidator.class.st deleted file mode 100644 index 901138638..000000000 --- a/src/XML-Parser/XMLStandaloneExternalIDRefsAttributeValidator.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -This class validates standalone externally defined attributes with lists of ID ref values separated by spaces. It disallows attributes that require further value normalization or substitution with default or fixed default values. -" -Class { - #name : #XMLStandaloneExternalIDRefsAttributeValidator, - #superclass : #XMLIDRefsAttributeValidator, - #category : #'XML-Parser-Validation-Standalone' -} - -{ #category : #testing } -XMLStandaloneExternalIDRefsAttributeValidator >> isStandaloneExternal [ - ^ true -] diff --git a/src/XML-Parser/XMLStandaloneExternalNmtokenAttributeValidator.class.st b/src/XML-Parser/XMLStandaloneExternalNmtokenAttributeValidator.class.st deleted file mode 100644 index 5c2e610fc..000000000 --- a/src/XML-Parser/XMLStandaloneExternalNmtokenAttributeValidator.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -This class validates standalone externally defined Nmtoken name attributes. It disallows attributes that require further value normalization or substitution with default or fixed default values. -" -Class { - #name : #XMLStandaloneExternalNmtokenAttributeValidator, - #superclass : #XMLNmtokenAttributeValidator, - #category : #'XML-Parser-Validation-Standalone' -} - -{ #category : #testing } -XMLStandaloneExternalNmtokenAttributeValidator >> isStandaloneExternal [ - ^ true -] diff --git a/src/XML-Parser/XMLStandaloneExternalNmtokensAttributeValidator.class.st b/src/XML-Parser/XMLStandaloneExternalNmtokensAttributeValidator.class.st deleted file mode 100644 index 4e9ee1d2f..000000000 --- a/src/XML-Parser/XMLStandaloneExternalNmtokensAttributeValidator.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -This class validates standalone externally defined attributes with lists of Nmtoken name values separated by spaces. It disallows attributes that require further value normalization or substitution with default or fixed default values. -" -Class { - #name : #XMLStandaloneExternalNmtokensAttributeValidator, - #superclass : #XMLNmtokensAttributeValidator, - #category : #'XML-Parser-Validation-Standalone' -} - -{ #category : #testing } -XMLStandaloneExternalNmtokensAttributeValidator >> isStandaloneExternal [ - ^ true -] diff --git a/src/XML-Parser/XMLStandaloneExternalNotationEnumerationAttributeValidator.class.st b/src/XML-Parser/XMLStandaloneExternalNotationEnumerationAttributeValidator.class.st deleted file mode 100644 index abcf26e43..000000000 --- a/src/XML-Parser/XMLStandaloneExternalNotationEnumerationAttributeValidator.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -This class validates attributes that can have NOTATION names from a list as values. It disallows attributes that require further value normalization or substitution with default or fixed default values. -" -Class { - #name : #XMLStandaloneExternalNotationEnumerationAttributeValidator, - #superclass : #XMLNotationEnumerationAttributeValidator, - #category : #'XML-Parser-Validation-Standalone' -} - -{ #category : #testing } -XMLStandaloneExternalNotationEnumerationAttributeValidator >> isStandaloneExternal [ - ^ true -] diff --git a/src/XML-Parser/XMLStandaloneExternalXMLIDAttributeValidator.class.st b/src/XML-Parser/XMLStandaloneExternalXMLIDAttributeValidator.class.st deleted file mode 100644 index 37e79d10b..000000000 --- a/src/XML-Parser/XMLStandaloneExternalXMLIDAttributeValidator.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -This class validates standalone externally defined xml:id ID attributes. It disallows attributes that require further value normalization. -" -Class { - #name : #XMLStandaloneExternalXMLIDAttributeValidator, - #superclass : #XMLXMLIDAttributeValidator, - #category : #'XML-Parser-Validation-Standalone' -} - -{ #category : #testing } -XMLStandaloneExternalXMLIDAttributeValidator >> isStandaloneExternal [ - ^ true -] diff --git a/src/XML-Parser/XMLStandardFileStreamReadStreamFactory.class.st b/src/XML-Parser/XMLStandardFileStreamReadStreamFactory.class.st deleted file mode 100644 index 701a392ec..000000000 --- a/src/XML-Parser/XMLStandardFileStreamReadStreamFactory.class.st +++ /dev/null @@ -1,21 +0,0 @@ -" -A StandardFileStream read stream factory. This stream is preferred for Squeak/Pharo because it does no decoding and returns byte characters so XMLParser can do its own decoding. -" -Class { - #name : #XMLStandardFileStreamReadStreamFactory, - #superclass : #XMLFileReadStreamFactory, - #category : #'XML-Parser-Files' -} - -{ #category : #basic } -XMLStandardFileStreamReadStreamFactory class >> basicOnPath: aPathString [ - ^ ((XMLClassFinder classNamed: #StandardFileStream) - readOnlyFileNamed: aPathString) - binary; - yourself -] - -{ #category : #testing } -XMLStandardFileStreamReadStreamFactory class >> isSupportedImplementation [ - ^ XMLClassFinder hasClassNamed: #StandardFileStream -] diff --git a/src/XML-Parser/XMLStandardFileStreamWriteStreamFactory.class.st b/src/XML-Parser/XMLStandardFileStreamWriteStreamFactory.class.st deleted file mode 100644 index d67329063..000000000 --- a/src/XML-Parser/XMLStandardFileStreamWriteStreamFactory.class.st +++ /dev/null @@ -1,22 +0,0 @@ -" -A StandardFileStream write stream factory. This stream is preferred for Pharo/Squeak because it does no encoding and accepts byte characters so XMLParser can do its own encoding. -" -Class { - #name : #XMLStandardFileStreamWriteStreamFactory, - #superclass : #XMLFileWriteStreamFactory, - #category : #'XML-Parser-Files' -} - -{ #category : #basic } -XMLStandardFileStreamWriteStreamFactory class >> basicOnPath: aPathString [ - "use forceNewFileNamed: to ensure truncation of existing files before writing" - ^ ((XMLClassFinder classNamed: #StandardFileStream) - forceNewFileNamed: aPathString) - binary; - yourself -] - -{ #category : #testing } -XMLStandardFileStreamWriteStreamFactory class >> isSupportedImplementation [ - ^ XMLClassFinder hasClassNamed: #StandardFileStream -] diff --git a/src/XML-Parser/XMLStandardKeyValueCache.class.st b/src/XML-Parser/XMLStandardKeyValueCache.class.st deleted file mode 100644 index 954749bf0..000000000 --- a/src/XML-Parser/XMLStandardKeyValueCache.class.st +++ /dev/null @@ -1,35 +0,0 @@ -" -This class is the standard key-value cache implementation used on Pharo/Squeak. -" -Class { - #name : #XMLStandardKeyValueCache, - #superclass : #XMLKeyValueCache, - #category : #'XML-Parser-Utils' -} - -{ #category : #testing } -XMLStandardKeyValueCache class >> isSupportedImplementation [ - "need some type of reentrant mutex" - XMLReentrantMutex hasSupportedImplementation - ifFalse: [^ false]. - - "MUST use the transient class on GS to avoid persisting and causing - write conflicts" - XMLClassFinder - classNamed: #XMLTransientKeyValueCache - ifPresent: [:transientKeyValueCacheClass | - transientKeyValueCacheClass isSupportedImplementation - ifTrue: [^ false]]. - - ^ true. -] - -{ #category : #accessing } -XMLStandardKeyValueCache >> collection [ - ^ collection -] - -{ #category : #initialization } -XMLStandardKeyValueCache >> setCollection: aKeyValueCollection [ - collection := aKeyValueCollection -] diff --git a/src/XML-Parser/XMLStandardReentrantMutex.class.st b/src/XML-Parser/XMLStandardReentrantMutex.class.st deleted file mode 100644 index a298e7c5c..000000000 --- a/src/XML-Parser/XMLStandardReentrantMutex.class.st +++ /dev/null @@ -1,39 +0,0 @@ -" -This class is the standard implementation that uses Pharo and Squeak's Mutex class to implement a reentrant mutex. -" -Class { - #name : #XMLStandardReentrantMutex, - #superclass : #XMLReentrantMutex, - #instVars : [ - 'mutex' - ], - #category : #'XML-Parser-Utils' -} - -{ #category : #testing } -XMLStandardReentrantMutex class >> isSupportedImplementation [ - (XMLClassFinder hasClassNamed: #Mutex) - ifFalse: [^ false]. - - "MUST use the transient class on GS to avoid persisting and causing - write conflicts" - XMLClassFinder - classNamed: #XMLTransientReentrantMutex - ifPresent: [:transientReentrantMutexClass | - transientReentrantMutexClass isSupportedImplementation - ifTrue: [^ false]]. - - ^ true. -] - -{ #category : #'mutual exclusion' } -XMLStandardReentrantMutex >> critical: aBlock [ - ^ mutex critical: aBlock -] - -{ #category : #initialization } -XMLStandardReentrantMutex >> initialize [ - super initialize. - - mutex := (XMLClassFinder classNamed: #Mutex) new. -] diff --git a/src/XML-Parser/XMLStatelessStreamConverter.class.st b/src/XML-Parser/XMLStatelessStreamConverter.class.st deleted file mode 100644 index e95fe1b0e..000000000 --- a/src/XML-Parser/XMLStatelessStreamConverter.class.st +++ /dev/null @@ -1,27 +0,0 @@ -" -This is a base class for stateless, immutable stream converter classes. Each subclass has a single instance that is shared. -" -Class { - #name : #XMLStatelessStreamConverter, - #superclass : #XMLStreamConverter, - #classInstVars : [ - 'instance' - ], - #category : #'XML-Parser-Streams' -} - -{ #category : #defaults } -XMLStatelessStreamConverter class >> abstractClass [ - ^ XMLStatelessStreamConverter -] - -{ #category : #accessing } -XMLStatelessStreamConverter class >> instance [ - ^ instance ifNil: [instance := self basicNew initialize] -] - -{ #category : #'instance creation' } -XMLStatelessStreamConverter class >> new [ - "all subclasses are stateless and have a single, immutable, shared instance" - ^ self instance -] diff --git a/src/XML-Parser/XMLStreamAdapter.class.st b/src/XML-Parser/XMLStreamAdapter.class.st deleted file mode 100644 index c8c9825a0..000000000 --- a/src/XML-Parser/XMLStreamAdapter.class.st +++ /dev/null @@ -1,92 +0,0 @@ -" -An abstract class for read and write stream adapters. -" -Class { - #name : #XMLStreamAdapter, - #superclass : #Object, - #instVars : [ - 'stream' - ], - #category : #'XML-Parser-Streams' -} - -{ #category : #basic } -XMLStreamAdapter class >> basicOn: aStream [ - ^ self basicNew initialize on: aStream -] - -{ #category : #'instance creation' } -XMLStreamAdapter class >> new [ - self shouldNotImplement -] - -{ #category : #'instance creation' } -XMLStreamAdapter class >> on: aStream [ - ^ self basicOn: aStream -] - -{ #category : #closing } -XMLStreamAdapter >> close [ - "must use respondsTo: to support streams only implementing the basic protocol" - (stream respondsTo: #close) - ifTrue: [stream close] -] - -{ #category : #accessing } -XMLStreamAdapter >> contents [ - self subclassResponsibility -] - -{ #category : #testing } -XMLStreamAdapter >> isBinary [ - ^ false -] - -{ #category : #testing } -XMLStreamAdapter >> isStream [ - ^ true -] - -{ #category : #testing } -XMLStreamAdapter >> isXMLBinaryOrExternalStream [ - ^ self isBinary -] - -{ #category : #initialization } -XMLStreamAdapter >> on: aStream [ - stream := aStream -] - -{ #category : #positioning } -XMLStreamAdapter >> position [ - self subclassResponsibility -] - -{ #category : #positioning } -XMLStreamAdapter >> position: anInteger [ - self subclassResponsibility -] - -{ #category : #printing } -XMLStreamAdapter >> printOn: aStream [ - super printOn: aStream. - - aStream nextPut: $(. - self printStreamOn: aStream. - aStream nextPut: $). -] - -{ #category : #printing } -XMLStreamAdapter >> printStreamOn: aStream [ - aStream print: stream -] - -{ #category : #positioning } -XMLStreamAdapter >> reset [ - self subclassResponsibility -] - -{ #category : #accessing } -XMLStreamAdapter >> stream [ - ^ stream -] diff --git a/src/XML-Parser/XMLStreamConverter.class.st b/src/XML-Parser/XMLStreamConverter.class.st deleted file mode 100644 index 5cf4bf3d8..000000000 --- a/src/XML-Parser/XMLStreamConverter.class.st +++ /dev/null @@ -1,358 +0,0 @@ -" -An abstract class for stream converters. - -Subclasses need to implement #nextFromStream: to use #basicNext on the argument to read byte characters and decode them, and implement #nextPut:toStream: to use #basicNextPut:/#basicNextPutByte: on the second argument to encode the first. - -The class #basicEncodingNames method should return a basic list of names for the encoding handled by the class, and #byteOrderMarkBytes can return the bytes of a BOM if the encoding has one. -" -Class { - #name : #XMLStreamConverter, - #superclass : #Object, - #classVars : [ - 'EncodingNamesAndClassesCache', - 'PreferredClasses' - ], - #classInstVars : [ - 'encodingNames' - ], - #category : #'XML-Parser-Streams' -} - -{ #category : #defaults } -XMLStreamConverter class >> abstractClass [ - ^ XMLStreamConverter -] - -{ #category : #basic } -XMLStreamConverter class >> basicByteOrderMarkBytes [ - ^ #[] -] - -{ #category : #basic } -XMLStreamConverter class >> basicCanConvertEncoding: anEncodingName [ - ^ self encodingNames includes: anEncodingName -] - -{ #category : #basic } -XMLStreamConverter class >> basicEncodingNames [ - "encodingNames will have these names + upper/lowercase versions" - ^ #() -] - -{ #category : #accessing } -XMLStreamConverter class >> byteOrderMark [ - "avoid #asString and #newFrom: for GS portability" - ^ String streamContents: [:stream | - self byteOrderMarkBytes do: [:each | - stream nextPut: each asCharacter]] -] - -{ #category : #accessing } -XMLStreamConverter class >> byteOrderMarkBytes [ - ^ self basicByteOrderMarkBytes asByteArray -] - -{ #category : #testing } -XMLStreamConverter class >> canConvertEncoding: anEncodingName [ - "Returns true if the receiver can decode the encoding anEncodingName. - Lookup is case-insensitive." - - "we could remove whitespace from anEncodingName too, but the - production rule for 'encoding' attributes disallows - whitespace, and the HTML parser removes it from charset - attributes before converting, so we just convert it to lowercase" - ^ self isAbstractClass not - and: [self basicCanConvertEncoding: anEncodingName asLowercase] -] - -{ #category : #accessing } -XMLStreamConverter class >> classForEncoding: anEncodingName [ - "avoid #at:ifAbsent: and #at:ifAbsentPut: so the cache isn't locked - during the class lookup, which could stall other processes" - self encodingNamesAndClassesCache - at: anEncodingName - ifPresent: [:classForEncoding | ^ classForEncoding]. - - "this will store the class as nil if it wasn't found to prevent future lookup" - ^ self encodingNamesAndClassesCache - at: anEncodingName - put: (self findClassForEncoding: anEncodingName). -] - -{ #category : #convenience } -XMLStreamConverter class >> decode: aStringOrByteArray [ - ^ self new decode: aStringOrByteArray -] - -{ #category : #convenience } -XMLStreamConverter class >> decodingOn: aReadStream [ - ^ self new decodingOn: aReadStream -] - -{ #category : #'instance creation' } -XMLStreamConverter class >> default [ - ^ self defaultClass new -] - -{ #category : #defaults } -XMLStreamConverter class >> defaultClass [ - ^ XMLImplicitUTF8StreamConverter -] - -{ #category : #defaults } -XMLStreamConverter class >> defaultEncoding [ - ^ self defaultClass primaryEncodingName -] - -{ #category : #convenience } -XMLStreamConverter class >> encode: aString [ - ^ self new encode: aString -] - -{ #category : #accessing } -XMLStreamConverter class >> encodingNames [ - ^ encodingNames - ifNil: [ - "assign the fully initialized object with #yourself to avoid - possible race conditions when reinitialization the class" - encodingNames := - Set new - addAll: self basicEncodingNames; - addAll: - (self basicEncodingNames collect: [:each | each asLowercase]); - addAll: - (self basicEncodingNames collect: [:each | each asUppercase]); - yourself] -] - -{ #category : #accessing } -XMLStreamConverter class >> encodingNames: aCollectionOrNil [ - encodingNames := - aCollectionOrNil - ifNotNil: [aCollectionOrNil asSet] -] - -{ #category : #private } -XMLStreamConverter class >> encodingNamesAndClassesCache [ - "a class variable so it's shared by all subclasses, but lazy initialized - so it isn't initialized unless needed" - ^ EncodingNamesAndClassesCache - ifNil: [EncodingNamesAndClassesCache := XMLKeyValueCache maxSize: 128] -] - -{ #category : #convenience } -XMLStreamConverter class >> encodingOn: aReadStream [ - ^ self new encodingOn: aReadStream -] - -{ #category : #private } -XMLStreamConverter class >> findClassForEncoding: anEncodingName [ - "check preferred classes first" - self preferredClasses do: [:each | - (each canConvertEncoding: anEncodingName) - ifTrue: [^ each]]. - - "avoid #withAllSubclassesDo: because it does not enumerate the receiver first" - (self isNonPreferredClassForEncoding: anEncodingName) - ifTrue: [^ self]. - self allSubclassesDo: [:each | - (each isNonPreferredClassForEncoding: anEncodingName) - ifTrue: [^ each]]. - - ^ nil. -] - -{ #category : #'class initialization' } -XMLStreamConverter class >> initialize [ - "self initialize" - - PreferredClasses := nil. - "reset to nil instead of just clearing to get full reinitialization" - EncodingNamesAndClassesCache := nil. -] - -{ #category : #testing } -XMLStreamConverter class >> isAbstractClass [ - ^ self == self abstractClass -] - -{ #category : #testing } -XMLStreamConverter class >> isDefaultClass [ - ^ self == self defaultClass -] - -{ #category : #testing } -XMLStreamConverter class >> isImplicit [ - ^ false -] - -{ #category : #testing } -XMLStreamConverter class >> isNonPreferredClassForEncoding: anEncoding [ - ^ self isPreferredClass not - and: [self canConvertEncoding: anEncoding] -] - -{ #category : #testing } -XMLStreamConverter class >> isPreferredClass [ - ^ self preferredClasses includes: self -] - -{ #category : #'instance creation' } -XMLStreamConverter class >> newForEncoding: anEncodingName [ - (self classForEncoding: anEncodingName) - ifNil: [^ self null] - ifNotNil: [:converterClass | - ^ converterClass new initializeForEncoding: anEncodingName] -] - -{ #category : #'instance creation' } -XMLStreamConverter class >> null [ - ^ self nullClass new -] - -{ #category : #defaults } -XMLStreamConverter class >> nullClass [ - ^ XMLNullStreamConverter -] - -{ #category : #accessing } -XMLStreamConverter class >> preferredClasses [ - "A class var because it should be shared by all subclasses. - Assign the fully initialized object with #yourself to avoid - possible race conditions when reinitialization the class." - ^ PreferredClasses - ifNil: [ - PreferredClasses := - IdentitySet new - addAll: - (XMLUTFStreamConverter allSubclasses reject: [:each | - each isAbstractClass - or: [each isImplicit]]); - add: XMLLatin1StreamConverter; - add: XMLASCIIStreamConverter; - yourself] -] - -{ #category : #accessing } -XMLStreamConverter class >> preferredClasses: aCollectionOrNil [ - PreferredClasses := - aCollectionOrNil - ifNotNil: [aCollectionOrNil asSet] -] - -{ #category : #accessing } -XMLStreamConverter class >> primaryEncodingName [ - ^ self basicEncodingNames - at: 1 - ifAbsent: [''] -] - -{ #category : #converting } -XMLStreamConverter >> asXMLStreamConverter [ - ^ self -] - -{ #category : #convenience } -XMLStreamConverter >> decode: aStringOrByteArray [ - ^ (XMLDecodingReadStreamAdapter - on: aStringOrByteArray readStream - streamConverter: self) - contents -] - -{ #category : #convenience } -XMLStreamConverter >> decodingOn: aReadStream [ - ^ XMLDecodingReadStreamAdapter - on: aReadStream - streamConverter: self -] - -{ #category : #convenience } -XMLStreamConverter >> encode: aString [ - ^ (self encodingOn: (ByteArray new: aString size) writeStream) - nextPutAll: aString; - contents -] - -{ #category : #accessing } -XMLStreamConverter >> encoding [ - ^ self class primaryEncodingName -] - -{ #category : #convenience } -XMLStreamConverter >> encodingOn: aWriteStream [ - ^ (XMLEncodingWriteStreamAdapter - on: aWriteStream - streamConverter: self) - nextPutByteOrderMark; - yourself -] - -{ #category : #private } -XMLStreamConverter >> errorBadCharacterEncoding [ - XMLEncodingException - formatSignal: 'Invalid {1} encoding for character' - with: self encoding -] - -{ #category : #private } -XMLStreamConverter >> errorBadCharacterValue: aValue [ - XMLEncodingException - formatSignal: 'Invalid character 0x{1} for {2} encoding' - with: aValue printStringHex - with: self encoding -] - -{ #category : #initialization } -XMLStreamConverter >> initializeForEncoding: anEncodingName [ -] - -{ #category : #testing } -XMLStreamConverter >> isDefault [ - ^ self class isDefaultClass -] - -{ #category : #testing } -XMLStreamConverter >> isImplicit [ - ^ self class isImplicit -] - -{ #category : #testing } -XMLStreamConverter >> isNull [ - ^ false -] - -{ #category : #decoding } -XMLStreamConverter >> nextFromStream: aStream [ - self subclassResponsibility -] - -{ #category : #encoding } -XMLStreamConverter >> nextPut: aCharacter toStream: aStream [ - self subclassResponsibility -] - -{ #category : #encoding } -XMLStreamConverter >> nextPutByteOrderMarkToStream: aStream [ - self class byteOrderMarkBytes do: [:each | - aStream nextPut: each] -] - -{ #category : #printing } -XMLStreamConverter >> printOn: aStream [ - super printOn: aStream. - - aStream - nextPut: $(; - nextPutAll: self encoding; - nextPut: $). -] - -{ #category : #printing } -XMLStreamConverter >> printWithConvertableStream: aConvertableStream on: aPrintStream [ - aPrintStream - print: self; - nextPut: $(; - print: aConvertableStream; - nextPut: $) -] diff --git a/src/XML-Parser/XMLString.class.st b/src/XML-Parser/XMLString.class.st deleted file mode 100644 index b370dcbf6..000000000 --- a/src/XML-Parser/XMLString.class.st +++ /dev/null @@ -1,238 +0,0 @@ -" -This class represents a string (character data) node. Instances are mutable, but the string is treated as immutable. String nodes can be created using the class-side #string: message or by sending a String #asXMLStringNode. - -When printing, XML-escaping of special characters is done. -" -Class { - #name : #XMLString, - #superclass : #XMLNode, - #instVars : [ - 'string' - ], - #category : #'XML-Parser-DOM' -} - -{ #category : #'instance creation' } -XMLString class >> string: aString [ - ^ self new string: aString -] - -{ #category : #visiting } -XMLString >> acceptNodeVisitor: aNodeVisitor [ - ^ aNodeVisitor visitStringNode: self -] - -{ #category : #deprecated } -XMLString >> addContent: aStringOrStringNode [ - "will be deprecated" - - self append: aStringOrStringNode -] - -{ #category : #'appending/prepending' } -XMLString >> append: aStringOrStringNode [ - string := - string - ifNil: [aStringOrStringNode asString] - ifNotNil: [string, aStringOrStringNode asString] -] - -{ #category : #converting } -XMLString >> asString [ - ^ self string -] - -{ #category : #converting } -XMLString >> asXMLEscapedString [ - ^ self string asXMLEscapedString -] - -{ #category : #deprecated } -XMLString >> asXMLString [ - "will be deprecated; use #asXMLStringNode instead" - - ^ self asXMLStringNode -] - -{ #category : #converting } -XMLString >> asXMLStringNode [ - ^ self -] - -{ #category : #testing } -XMLString >> beginsWith: aStringOrStringNode [ - ^ self string beginsWith: aStringOrStringNode asString -] - -{ #category : #deprecated } -XMLString >> contentString: aString [ - "will be deprecated; use #string: instead" - - self string: aString -] - -{ #category : #replacing } -XMLString >> deleteFrom: aStart to: anEnd [ - self replaceFrom: aStart to: anEnd with: '' -] - -{ #category : #testing } -XMLString >> endsWith: aStringOrStringNode [ - ^ self string endsWith: aStringOrStringNode asString -] - -{ #category : #testing } -XMLString >> includesSubstring: aStringOrStringNode [ - "avoid String>>includesSubstring: for backwards compatibility" - ^ aStringOrStringNode isEmpty - or: [(self indexOfSubstring: aStringOrStringNode) > 0] -] - -{ #category : #accessing } -XMLString >> indexOfSubstring: aStringOrStringNode [ - ^ self string - findString: aStringOrStringNode asString - startingAt: 1 -] - -{ #category : #private } -XMLString >> isCoalescingStringNode [ - ^ true -] - -{ #category : #testing } -XMLString >> isContentNode [ - ^ true -] - -{ #category : #testing } -XMLString >> isEmpty [ - ^ self string isEmpty -] - -{ #category : #deprecated } -XMLString >> isString: aStringOrStringNode [ - "will be deprecated; use #isStringNode: instead" - - ^ self isStringNode: aStringOrStringNode -] - -{ #category : #testing } -XMLString >> isStringNode [ - ^ true -] - -{ #category : #testing } -XMLString >> isStringNode: aStringOrStringNode [ - ^ self string = aStringOrStringNode asString -] - -{ #category : #testing } -XMLString >> isWhitespace [ - ^ self string isXMLWhitespace -] - -{ #category : #'splitting/merging' } -XMLString >> mergeAdjacent [ - "merges a string node with adjacent string nodes in parent" - | siblingNodes selfIndex adjacentNode | - - self hasParent - ifFalse: [^ self]. - - siblingNodes := self parent nodes. - selfIndex := siblingNodes indexOf: self. - [(adjacentNode := siblingNodes at: selfIndex + 1) notNil - and: [adjacentNode isStringNode]] - whileTrue: [ - self append: adjacentNode. - siblingNodes removeAt: selfIndex + 1]. - - [(adjacentNode := siblingNodes at: selfIndex - 1) notNil - and: [adjacentNode isStringNode]] - whileTrue: [ - self prepend: adjacentNode. - siblingNodes removeAt: selfIndex - 1. - selfIndex := selfIndex - 1]. -] - -{ #category : #testing } -XMLString >> notEmpty [ - ^ self string notEmpty -] - -{ #category : #'appending/prepending' } -XMLString >> prepend: aStringOrStringNode [ - string := - string - ifNil: [aStringOrStringNode asString] - ifNotNil: [aStringOrStringNode asString, string] -] - -{ #category : #printing } -XMLString >> printRawContentOn: aStream [ - aStream nextPutAll: self string -] - -{ #category : #replacing } -XMLString >> replaceAll: aSource with: aReplacement [ - "works like copyReplaceAll:with:" - self string: - (self string - copyReplaceAll: aSource asString - with: aReplacement asString) -] - -{ #category : #replacing } -XMLString >> replaceFrom: aStart to: aStop with: aReplacement [ - "works like copyReplaceFrom:to:with: and - can be used to insert, delete, and replace" - | start stop | - - start := (aStart max: 1) min: self size + 1. - stop := (aStop max: start - 1) min: self size. - self string: - (self string - copyReplaceFrom: start - to: stop - with: aReplacement asString) -] - -{ #category : #accessing } -XMLString >> size [ - ^ self string size -] - -{ #category : #accessing } -XMLString >> sortKey [ - ^ self string -] - -{ #category : #'splitting/merging' } -XMLString >> splitAt: anOffset [ - | newNode | - - newNode := self copy. - self replaceFrom: anOffset to: self size with: ''. - newNode replaceFrom: 1 to: anOffset - 1 with: ''. - - self hasParent - ifTrue: [self parent addNode: newNode after: self]. - - ^ newNode. -] - -{ #category : #accessing } -XMLString >> string [ - ^ string ifNil: [string := ''] -] - -{ #category : #accessing } -XMLString >> string: aString [ - string := aString asString -] - -{ #category : #printing } -XMLString >> writeXMLOn: aWriter [ - aWriter string: self string -] diff --git a/src/XML-Parser/XMLStringReadStreamAdapter.class.st b/src/XML-Parser/XMLStringReadStreamAdapter.class.st deleted file mode 100644 index d1dbf0784..000000000 --- a/src/XML-Parser/XMLStringReadStreamAdapter.class.st +++ /dev/null @@ -1,28 +0,0 @@ -" -A read stream adapter for string read streams that accepts character input and converts it to binary output. -" -Class { - #name : #XMLStringReadStreamAdapter, - #superclass : #XMLReadStreamAdapter, - #category : #'XML-Parser-Streams' -} - -{ #category : #testing } -XMLStringReadStreamAdapter >> isBinary [ - "this stream is binary, because it converts characters to integers" - ^ true -] - -{ #category : #accessing } -XMLStringReadStreamAdapter >> next [ - stream atEnd - ifTrue: [^ nil] - ifFalse: [^ stream next asInteger] -] - -{ #category : #accessing } -XMLStringReadStreamAdapter >> peek [ - stream atEnd - ifTrue: [^ nil] - ifFalse: [^ stream peek asInteger] -] diff --git a/src/XML-Parser/XMLStringWriteStreamAdapter.class.st b/src/XML-Parser/XMLStringWriteStreamAdapter.class.st deleted file mode 100644 index 1b58d4ee8..000000000 --- a/src/XML-Parser/XMLStringWriteStreamAdapter.class.st +++ /dev/null @@ -1,22 +0,0 @@ -" -A write stream adapter that accepts binary input and converts it to character output for string write streams. -" -Class { - #name : #XMLStringWriteStreamAdapter, - #superclass : #XMLWriteStreamAdapter, - #category : #'XML-Parser-Streams' -} - -{ #category : #accessing } -XMLStringWriteStreamAdapter >> nextPut: anObject [ - stream nextPut: anObject asCharacter -] - -{ #category : #accessing } -XMLStringWriteStreamAdapter >> nextPutAll: aCollection [ - "can't use #to:do: here because other #nextPutAll: implementations - support non-sequenceable collection arguments wtih #do:" - aCollection do: [:each | - stream nextPut: each asCharacter]. - ^ aCollection. -] diff --git a/src/XML-Parser/XMLTerminatedState.class.st b/src/XML-Parser/XMLTerminatedState.class.st deleted file mode 100644 index cf2a6797b..000000000 --- a/src/XML-Parser/XMLTerminatedState.class.st +++ /dev/null @@ -1,18 +0,0 @@ -" -A state for when tokenizing has stopped. -" -Class { - #name : #XMLTerminatedState, - #superclass : #XMLTokenizerState, - #category : #'XML-Parser-Drivers' -} - -{ #category : #testing } -XMLTerminatedState >> isTerminatedState [ - ^ true -] - -{ #category : #tokenizing } -XMLTerminatedState >> nextTokenFrom: aTokenizer [ - ^ aTokenizer nextEndDocument -] diff --git a/src/XML-Parser/XMLTokenizerState.class.st b/src/XML-Parser/XMLTokenizerState.class.st deleted file mode 100644 index f5bb450f6..000000000 --- a/src/XML-Parser/XMLTokenizerState.class.st +++ /dev/null @@ -1,118 +0,0 @@ -" -This is an abstract class for states to control tokenization. Subclasses must implement #nextTokenFrom: to send a tokenizing message to the argument tokenizer. -" -Class { - #name : #XMLTokenizerState, - #superclass : #Object, - #classInstVars : [ - 'instance' - ], - #category : #'XML-Parser-Drivers' -} - -{ #category : #accessing } -XMLTokenizerState class >> instance [ - ^ instance - ifNil: [instance := self basicNew initialize] -] - -{ #category : #'instance creation' } -XMLTokenizerState class >> new [ - "all subclasses are stateless and have a single, immutable, shared instance" - ^ self instance -] - -{ #category : #testing } -XMLTokenizerState >> canTerminateInput [ - ^ true -] - -{ #category : #changing } -XMLTokenizerState >> contentState [ - ^ XMLContentState new -] - -{ #category : #changing } -XMLTokenizerState >> doctypeDeclarationState [ - ^ XMLDoctypeDeclarationState new -] - -{ #category : #changing } -XMLTokenizerState >> externalSubsetState [ - ^ XMLExternalSubsetState new -] - -{ #category : #changing } -XMLTokenizerState >> internalSubsetState [ - ^ XMLInternalSubsetState new -] - -{ #category : #testing } -XMLTokenizerState >> isContentState [ - ^ false -] - -{ #category : #testing } -XMLTokenizerState >> isDoctypeDeclarationState [ - ^ false -] - -{ #category : #testing } -XMLTokenizerState >> isExternalSubsetState [ - ^ false -] - -{ #category : #testing } -XMLTokenizerState >> isInitializedState [ - ^ true -] - -{ #category : #testing } -XMLTokenizerState >> isInternalSubsetState [ - ^ false -] - -{ #category : #testing } -XMLTokenizerState >> isPostDoctypeDeclarationState [ - ^ false -] - -{ #category : #testing } -XMLTokenizerState >> isPrologState [ - ^ false -] - -{ #category : #testing } -XMLTokenizerState >> isTerminatedState [ - ^ false -] - -{ #category : #testing } -XMLTokenizerState >> isXMLDeclarationState [ - ^ false -] - -{ #category : #tokenizing } -XMLTokenizerState >> nextTokenFrom: aTokenizer [ - self subclassResponsibility -] - -{ #category : #changing } -XMLTokenizerState >> postDoctypeDeclarationState [ - ^ XMLPostDoctypeDeclarationState new -] - -{ #category : #changing } -XMLTokenizerState >> prologState [ - ^ XMLPrologState new -] - -{ #category : #testing } -XMLTokenizerState >> supportsEncodingDetection [ - ^ false -] - -{ #category : #changing } -XMLTokenizerState >> terminatedState [ - ^ XMLTerminatedState new -] diff --git a/src/XML-Parser/XMLURI.class.st b/src/XML-Parser/XMLURI.class.st deleted file mode 100644 index 04eccef44..000000000 --- a/src/XML-Parser/XMLURI.class.st +++ /dev/null @@ -1,1068 +0,0 @@ -" -A class for XML URIs. Instances are immutable and support combining with other XMLURIs or URI strings using / (to resolve relative URIs in the context of the receiver), accessing URI components, creating copies with replaced components, and retrieving the contents of http:// and file:// URLs using XMLHTTPRequest and XMLFileHandle. - -Uses XMLURIParser to parse URIs lazily (for example, when a URI compoenent is accessed with an ""accessing"" message) when created from a string and eagerly when created from a stream. - -URI components are stored internally in encoded form and decoded only when needed, because the XML standard requires delaying decoding for as long as possible. -" -Class { - #name : #XMLURI, - #superclass : #Object, - #instVars : [ - 'uriString', - 'scheme', - 'hasAuthorityPrefix', - 'rawUserInfo', - 'rawHost', - 'port', - 'rawPathSegments', - 'rawQuery', - 'rawFragment' - ], - #classVars : [ - 'UnreservedCharacters' - ], - #category : #'XML-Parser-URI' -} - -{ #category : #'instance creation' } -XMLURI class >> fromStream: aStream [ - "streams must be parsed eagerly (because the stream might be read from - or closed after), unlike strings" - ^ self basicNew initialize parseURIStream: aStream -] - -{ #category : #'instance creation' } -XMLURI class >> fromString: aString [ - ^ self basicNew initialize uriString: aString -] - -{ #category : #'class initialization' } -XMLURI class >> initialize [ - "self initialize" - - "Assign the fully initialized object with #yourself to avoid - possible race conditions when reinitialization the class." - UnreservedCharacters := - BitmapCharacterSet new - addRangeFrom: $a to: $z; - addRangeFrom: $A to: $Z; - addRangeFrom: $0 to: $9; - addAll: '-._~'; - yourself -] - -{ #category : #'instance creation' } -XMLURI class >> new [ - ^ self fromString: '' -] - -{ #category : #'instance creation' } -XMLURI class >> readFrom: aStringOrStream [ - aStringOrStream isStream - ifTrue: [^ self fromStream: aStringOrStream] - ifFalse: [^ self fromString: aStringOrStream] -] - -{ #category : #combining } -XMLURI >> / aURIOrURIString [ - "Returns the argument URI if it is absolute or the argument resolved in the - context of the receiver if it is relative, to do relative path resolution - or replace hosts, query strings, and other components." - - ^ self combinedWith: aURIOrURIString -] - -{ #category : #comparing } -XMLURI >> = anObject [ - self == anObject - ifTrue: [^ true]. - - self species == anObject species - ifFalse: [^ false]. - - self scheme = anObject scheme - ifFalse: [^ false]. - - "#has* tests are used as an optimization to skip direclty comparing - components unless needed when doing so would require additional - decoding of the raw components" - self hasUserInfo - ifTrue: [ - (anObject hasUserInfo - and: [self userInfo = anObject userInfo]) - ifFalse: [^ false]] - ifFalse: [ - anObject hasUserInfo - ifTrue: [^ false]]. - - self hasHost - ifTrue: [ - (anObject hasHost - and: [self host = anObject host]) - ifFalse: [^ false]] - ifFalse: [ - anObject hasHost - ifTrue: [^ false]]. - - self port = anObject port - ifFalse: [^ false]. - - self hasPath - ifTrue: [ - (anObject hasPath - and: [self pathSegments = anObject pathSegments]) - ifFalse: [^ false]] - ifFalse: [ - anObject hasPath - ifTrue: [^ false]]. - - self hasQuery - ifTrue: [ - (anObject hasQuery - and: [self query = anObject query]) - ifFalse: [^ false]] - ifFalse: [ - anObject hasQuery - ifTrue: [^ false]]. - - self hasFragment - ifTrue: [ - (anObject hasFragment - and: [self fragment = anObject fragment]) - ifFalse: [^ false]] - ifFalse: [ - anObject hasFragment - ifTrue: [^ false]]. - - ^ true. -] - -{ #category : #private } -XMLURI >> addRawDotPathSegment [ - self hasNonDirectoryPath - ifTrue: [self haveDirectoryPath] -] - -{ #category : #private } -XMLURI >> addRawDoubleDotPathSegment [ - self hasPath - ifFalse: [^ self]. - - self hasRootPath - ifTrue: [self removeRawPathSegments] - ifFalse: [| hadAbsolutePath | - hadAbsolutePath := self hasAbsolutePath. - self hasDirectoryPath - ifTrue: [self removeLastRawPathSegment]. - self hasPath - ifTrue: [ - self removeLastRawPathSegment. - (self hasPath - or: [hadAbsolutePath]) - ifTrue: [self haveDirectoryPath]]]. -] - -{ #category : #private } -XMLURI >> addRawPathSegment: aString [ - aString = '.' - ifTrue: [^ self addRawDotPathSegment]. - aString = '..' - ifTrue: [^ self addRawDoubleDotPathSegment]. - - self hasPath - ifTrue: [ - (self hasDirectoryPath - and: [self rawPathSegments size > 1]) - ifTrue: [self removeLastRawPathSegment]] - ifFalse: [ - self hasHost - ifTrue: [self rawPathSegments addLast: '']]. - - self rawPathSegments addLast: aString. -] - -{ #category : #private } -XMLURI >> addRawPathSegmentsFrom: aURI [ - "copy before modifying" - self rawPathSegments: self rawPathSegments copy. - - aURI hasAbsolutePath - ifTrue: [self removeRawPathSegments] - ifFalse: [ - self hasNonDirectoryPath - ifTrue: [ - self removeLastRawPathSegment. - self hasPath - ifTrue: [self haveDirectoryPath]]]. - - aURI rawPathSegments do: [:each | self addRawPathSegment: each]. -] - -{ #category : #converting } -XMLURI >> asRetrievableResource [ - ^ self isLocal - ifTrue: [self asXMLFileHandle] - ifFalse: [self asXMLHTTPRequest] -] - -{ #category : #converting } -XMLURI >> asString [ - "Returns the full, untruncated URI string, unlike #printString, which - may truncate" - - ^ self uriString - ifNil: [| writeStream | - writeStream := (String new: 64) writeStream. - self - printSchemeOn: writeStream; - printAuthorityPrefixOn: writeStream; - printAuthorityOn: writeStream; - printPathPrefixOn: writeStream; - printPathOn: writeStream; - printQueryOn: writeStream; - printFragmentOn: writeStream; - uriString: writeStream contents; - uriString] -] - -{ #category : #converting } -XMLURI >> asXMLFileHandle [ - self isLocal - ifFalse: [self errorCannotConvertURIToFileHandle]. - ^ self path asXMLFileHandle. -] - -{ #category : #converting } -XMLURI >> asXMLHTTPRequest [ - (self isHTTP - or: [self isHTTPS - or: [self isRelative]]) - ifFalse: [self errorCannotConvertURIToHTTPRequest]. - ^ self asString asXMLHTTPRequest. -] - -{ #category : #converting } -XMLURI >> asXMLURI [ - ^ self -] - -{ #category : #combining } -XMLURI >> combinedWith: aURIOrURIString [ - "Returns the argument URI if it is absolute or the argument resolved in the - context of the receiver if it is relative, to do relative path resolution - or replace hosts, query strings, and other components." - - | uriToCombineWith | - - (uriToCombineWith := aURIOrURIString asXMLURI) isEmpty - ifFalse: [ - (uriToCombineWith isRelative) - ifTrue: [^ self combinedWithRelativeURI: uriToCombineWith] - ifFalse: [^ uriToCombineWith]] -] - -{ #category : #private } -XMLURI >> combinedWithRelativeURI: aRelativeURI [ - | copy | - - copy := self copy. - aRelativeURI hasUserInfo - ifTrue: [ - ^ copy - rawUserInfo: aRelativeURI rawUserInfo; - rawHost: aRelativeURI rawHost; - port: aRelativeURI port; - rawPathSegments: aRelativeURI rawPathSegments; - rawQuery: aRelativeURI rawQuery; - rawFragment: aRelativeURI rawFragment]. - aRelativeURI hasHost - ifTrue: [ - ^ copy - rawHost: aRelativeURI rawHost; - port: aRelativeURI port; - rawPathSegments: aRelativeURI rawPathSegments; - rawQuery: aRelativeURI rawQuery; - rawFragment: aRelativeURI rawFragment]. - aRelativeURI hasPort - ifTrue: [ - ^ copy - port: aRelativeURI port; - rawPathSegments: aRelativeURI rawPathSegments; - rawQuery: aRelativeURI rawQuery; - rawFragment: aRelativeURI rawFragment]. - aRelativeURI hasPath - ifTrue: [ - ^ copy - addRawPathSegmentsFrom: aRelativeURI; - rawQuery: aRelativeURI rawQuery; - rawFragment: aRelativeURI rawFragment]. - aRelativeURI hasQuery - ifTrue: [ - ^ copy - rawQuery: aRelativeURI rawQuery; - rawFragment: aRelativeURI rawFragment]. - aRelativeURI hasFragment - ifTrue: [^ copy rawFragment: aRelativeURI rawFragment]. -] - -{ #category : #copying } -XMLURI >> copyWithFragment: aString [ - ^ self copy rawFragment: (self percentEncode: aString) -] - -{ #category : #copying } -XMLURI >> copyWithHost: aString [ - | copy | - - copy := self copy. - (aString size > 0 - and: [aString first == $[ - and: [aString last == $]]]) - ifTrue: [copy rawHost: aString] - ifFalse: [copy rawHost: (self percentEncode: aString)]. - ^ copy. -] - -{ #category : #copying } -XMLURI >> copyWithPath: aString [ - | newRawPathSegments | - - newRawPathSegments := self rawPathSegments copyEmpty. - $/ - xmlSplit: aString - do: [:each | - newRawPathSegments addLast: (self percentEncode: each)]. - ^ self copy rawPathSegments: newRawPathSegments. -] - -{ #category : #copying } -XMLURI >> copyWithPathSegments: aCollection [ - | newRawPathSegments | - - newRawPathSegments := self rawPathSegments copyEmpty. - aCollection do: [:each | - newRawPathSegments addLast: (self percentEncode: each)]. - ^ self copy rawPathSegments: newRawPathSegments. -] - -{ #category : #copying } -XMLURI >> copyWithPort: anInteger [ - ^ self copy port: anInteger -] - -{ #category : #copying } -XMLURI >> copyWithQuery: anAssociationCollection [ - | newRawQuery | - - newRawQuery := OrderedCollection new: anAssociationCollection size. - anAssociationCollection associationsDo: [:each | - newRawQuery addLast: - (self percentAndPlusEncode: each key) -> - (self percentAndPlusEncode: each value)]. - ^ self copy rawQuery: newRawQuery. -] - -{ #category : #copying } -XMLURI >> copyWithScheme: aString [ - ^ self copy - scheme: aString; - hasAuthorityPrefix: - (self hasAuthorityPrefix - or: [self hasScheme not]) -] - -{ #category : #copying } -XMLURI >> copyWithUserInfo: aString [ - ^ self copy rawUserInfo: (self percentEncode: aString) -] - -{ #category : #private } -XMLURI >> errorCannotConvertURIToFileHandle [ - XMLFileException - formatSignal: 'Cannot convert non-local URI to file handle: {1}' - with: self asString -] - -{ #category : #private } -XMLURI >> errorCannotConvertURIToHTTPRequest [ - XMLHTTPException - formatSignal: 'Cannot convert URI to HTTP request: {1}' - with: self asString -] - -{ #category : #accessing } -XMLURI >> fragment [ - "Returns the percent-decoded URI fragment (everything after the '#') or - an empty string if there isn't one" - - ^ self percentDecode: self rawFragment -] - -{ #category : #resolving } -XMLURI >> get [ - ^ self asRetrievableResource get -] - -{ #category : #resolving } -XMLURI >> getUpToLimit: aMaxSize decoding: aBoolean [ - ^ self asRetrievableResource - getUpToLimit: aMaxSize - decoding: aBoolean -] - -{ #category : #testing } -XMLURI >> hasAbsolutePath [ - ^ self hasPath - and: [self rawPathSegments first isEmpty] -] - -{ #category : #testing } -XMLURI >> hasAuthority [ - ^ self hasUserInfo - or: [self hasHost - or: [self hasPort]] -] - -{ #category : #testing } -XMLURI >> hasAuthorityPrefix [ - self parseURIStringIfUnparsed. - ^ hasAuthorityPrefix. -] - -{ #category : #private } -XMLURI >> hasAuthorityPrefix: aBoolean [ - hasAuthorityPrefix := aBoolean -] - -{ #category : #testing } -XMLURI >> hasDirectoryPath [ - ^ self hasPath - and: [self rawPathSegments last isEmpty] -] - -{ #category : #testing } -XMLURI >> hasFragment [ - ^ self rawFragment notEmpty -] - -{ #category : #testing } -XMLURI >> hasHost [ - ^ self rawHost notEmpty -] - -{ #category : #testing } -XMLURI >> hasIPv6Host [ - ^ self hasHost - and: [self rawHost first == $[ - and: [self rawHost last == $]]] -] - -{ #category : #testing } -XMLURI >> hasNonDirectoryPath [ - ^ self hasPath - and: [self hasDirectoryPath not] -] - -{ #category : #testing } -XMLURI >> hasPath [ - ^ self rawPathSegments notEmpty -] - -{ #category : #testing } -XMLURI >> hasPort [ - ^ self port notNil -] - -{ #category : #testing } -XMLURI >> hasQuery [ - ^ self rawQuery notEmpty -] - -{ #category : #testing } -XMLURI >> hasRootPath [ - ^ self rawPathSegments size = 2 - and: [self rawPathSegments allSatisfy: [:each | each isEmpty]] -] - -{ #category : #testing } -XMLURI >> hasScheme [ - ^ self scheme notEmpty -] - -{ #category : #testing } -XMLURI >> hasUserInfo [ - ^ self rawUserInfo notEmpty -] - -{ #category : #comparing } -XMLURI >> hash [ - "ignores user-info and ports" - ^ ((((self species hash bitXor: - self scheme hash) bitXor: - self host hash) bitXor: - self pathSegments hash) bitXor: - self query hash) bitXor: - self fragment hash -] - -{ #category : #private } -XMLURI >> haveDirectoryPath [ - self hasPath - ifFalse: [self rawPathSegments addLast: '']. - self rawPathSegments addLast: ''. -] - -{ #category : #accessing } -XMLURI >> host [ - "Returns the percent-decoded host or IPv6-style host or an empty string - if there isn't one" - - self hasIPv6Host - ifTrue: [^ self rawHost] - ifFalse: [^ (self percentDecode: self rawHost) asLowercase] -] - -{ #category : #testing } -XMLURI >> isEmpty [ - self hasScheme - ifTrue: [^ false]. - self hasAuthority - ifTrue: [^ false]. - self hasPath - ifTrue: [^ false]. - self hasQuery - ifTrue: [^ false]. - self hasFragment - ifTrue: [^ false]. - - ^ true. -] - -{ #category : #testing } -XMLURI >> isFile [ - ^ self scheme = 'file' -] - -{ #category : #deprecated } -XMLURI >> isFileURI [ - self deprecated: 'use #isFile instead'. - ^ self isFile. -] - -{ #category : #testing } -XMLURI >> isHTTP [ - ^ self scheme = 'http' -] - -{ #category : #testing } -XMLURI >> isHTTPS [ - ^ self scheme = 'https' -] - -{ #category : #testing } -XMLURI >> isLocal [ - ^ self isFile - or: [self isRelative - and: [self hasHost not]] -] - -{ #category : #deprecated } -XMLURI >> isLocalURI [ - self deprecated: 'use #isLocal instead'. - ^ self isLocal. -] - -{ #category : #testing } -XMLURI >> isRelative [ - ^ self hasScheme not -] - -{ #category : #testing } -XMLURI >> notEmpty [ - ^ self isEmpty not -] - -{ #category : #private } -XMLURI >> parseURIStream: aStream [ - | parser | - - parser := XMLURIParser on: aStream. - self - scheme: parser parseScheme; - hasAuthorityPrefix: parser parseAuthorityPrefix. - (self hasScheme - or: [self hasAuthorityPrefix]) - ifTrue: [ - self - rawUserInfo: parser parseUserInfo; - rawHost: parser parseHost; - port: parser parsePort] - ifFalse: [ - self - rawUserInfo: ''; - rawHost: '']. - self - rawPathSegments: parser parsePathSegments; - rawQuery: parser parseQuery; - rawFragment: parser parseFragment. -] - -{ #category : #private } -XMLURI >> parseURIStringIfUnparsed [ - scheme - ifNil: [self parseURIStream: self uriString readStream] -] - -{ #category : #accessing } -XMLURI >> path [ - "Returns the percent-decoded path as a string" - - self hasPath - ifTrue: [| writeStream | - writeStream := (String new: self rawPathSegments size * 10) writeStream. - self rawPathSegments - do: [:each | writeStream nextPutAll: (self percentDecode: each)] - separatedBy: [writeStream nextPut: $/]. - ^ writeStream contents] - ifFalse: [^ ''] -] - -{ #category : #accessing } -XMLURI >> pathSegments [ - "Returns a temporary OrderedCollection of percent-decoded path segments" - - ^ self rawPathSegments collect: [:each | self percentDecode: each] -] - -{ #category : #enumerating } -XMLURI >> pathSegmentsDo: aBlock [ - self rawPathSegments do: [:each | - aBlock value: (self percentDecode: each)] -] - -{ #category : #private } -XMLURI >> percentAndPlusDecode: aString [ - | readStream writeStream | - - ((aString includes: $%) - or: [aString includes: $+]) - ifFalse: [^ aString]. - - readStream := aString readStream. - writeStream := (String new: aString size) writeStream. - [readStream atEnd] - whileFalse: [ - readStream peek == $% - ifTrue: [ - self - percentDecodeNextFrom: readStream - on: writeStream] - ifFalse: [| nextChar | - (nextChar := readStream next) == $+ - ifTrue: [writeStream nextPut: Character space] - ifFalse: [writeStream nextPut: nextChar]]]. - ^ writeStream contents. -] - -{ #category : #private } -XMLURI >> percentAndPlusEncode: aString [ - | writeStream | - - writeStream := (String new: aString size) writeStream. - "use #to:do: for speed" - 1 to: aString size do: [:i | | nextChar | - (UnreservedCharacters includes: (nextChar := aString at: i)) - ifTrue: [ - nextChar asciiValue = 32 "Character space asciiValue" - ifTrue: [writeStream nextPut: $+] - ifFalse: [writeStream nextPut: nextChar]] - ifFalse: [ - (XMLEncodingWriteStreamAdapter on: - (XMLPercentEncodingWriteStreamAdapter on: writeStream)) - nextPut: nextChar]]. - ^ writeStream contents. -] - -{ #category : #private } -XMLURI >> percentDecode: aString [ - | readStream writeStream | - - (aString includes: $%) - ifFalse: [^ aString]. - - readStream := aString readStream. - writeStream := (String new: aString size) writeStream. - [readStream atEnd] - whileFalse: [ - readStream peek == $% - ifTrue: [ - self - percentDecodeNextFrom: readStream - on: writeStream] - ifFalse: [writeStream nextPut: readStream next]]. - ^ writeStream contents. -] - -{ #category : #private } -XMLURI >> percentDecodeNextFrom: aReadStream on: aWriteStream [ - | readStreamAdapter | - - readStreamAdapter := - XMLDecodingReadStreamAdapter - on: (XMLPercentDecodingReadStreamAdapter on: aReadStream). - [readStreamAdapter atEnd] - whileFalse: [aWriteStream nextPut: readStreamAdapter next]. -] - -{ #category : #private } -XMLURI >> percentEncode: aString [ - | writeStream | - - writeStream := (String new: aString size) writeStream. - "use #to:do: for speed" - 1 to: aString size do: [:i | | nextChar | - (UnreservedCharacters includes: (nextChar := aString at: i)) - ifTrue: [writeStream nextPut: nextChar] - ifFalse: [ - (XMLEncodingWriteStreamAdapter on: - (XMLPercentEncodingWriteStreamAdapter on: writeStream)) - nextPut: nextChar]]. - ^ writeStream contents. -] - -{ #category : #accessing } -XMLURI >> port [ - "Returns the integer port or nil if there isn't one" - - self parseURIStringIfUnparsed. - ^ port. -] - -{ #category : #private } -XMLURI >> port: anInteger [ - port := anInteger -] - -{ #category : #copying } -XMLURI >> postCopy [ - "the copyWith* methods modify copies, so any URI string of a copy must be parsed - if it hasn't been already and then cleared because it will be obsolete after a - URI component is changed" - self - parseURIStringIfUnparsed; - uriString: nil -] - -{ #category : #printing } -XMLURI >> printAuthorityOn: aStream [ - self hasAuthority - ifTrue: [ - self - printUserInfoOn: aStream; - printHostOn: aStream; - printPortOn: aStream] -] - -{ #category : #printing } -XMLURI >> printAuthorityPrefixOn: aStream [ - (self hasAuthorityPrefix - or: [self hasScheme not and: [self hasAuthority]]) - ifTrue: [aStream nextPutAll: '//'] -] - -{ #category : #printing } -XMLURI >> printFragmentOn: aStream [ - self hasFragment - ifTrue: [ - aStream - nextPut: $#; - nextPutAll: self rawFragment] -] - -{ #category : #printing } -XMLURI >> printHostOn: aStream [ - self hasHost - ifTrue: [aStream nextPutAll: self rawHost] -] - -{ #category : #printing } -XMLURI >> printOn: aStream [ - aStream nextPutAll: self asString -] - -{ #category : #printing } -XMLURI >> printPathOn: aStream [ - self rawPathSegments - do: [:each | aStream nextPutAll: each] - separatedBy: [aStream nextPut: $/] -] - -{ #category : #printing } -XMLURI >> printPathPrefixOn: aStream [ - (self hasPath - and: [self hasAbsolutePath not - and: [self hasScheme or: [self hasAuthority]]]) - ifTrue: [aStream nextPut: $/] -] - -{ #category : #printing } -XMLURI >> printPortOn: aStream [ - self hasPort - ifTrue: [ - aStream nextPut: $:. - port printOn: aStream] -] - -{ #category : #printing } -XMLURI >> printQueryOn: aStream [ - | atBeginning | - - self hasQuery - ifFalse: [^ self]. - - aStream nextPut: $?. - atBeginning := true. - self rawQuery do: [:each | - atBeginning - ifTrue: [atBeginning := false] - ifFalse: [aStream nextPut: $&]. - aStream - nextPutAll: each key; - nextPut: $=; - nextPutAll: each value]. -] - -{ #category : #printing } -XMLURI >> printSchemeOn: aStream [ - self hasScheme - ifTrue: [ - aStream - nextPutAll: self scheme; - nextPut: $:] -] - -{ #category : #printing } -XMLURI >> printUserInfoOn: aStream [ - self hasUserInfo - ifTrue: [ - aStream - nextPutAll: self rawUserInfo; - nextPut: $@] -] - -{ #category : #accessing } -XMLURI >> query [ - "Returns a temporary OrderedCollection of percent/plus-decoded - query string key=value pairs" - - ^ self rawQuery collect: [:each | - (self percentAndPlusDecode: each key) -> - (self percentAndPlusDecode: each value)] -] - -{ #category : #accessing } -XMLURI >> queryAt: aKey [ - "Returns the last percent/plus-decoded value of the query string - parameter aKey or an empty string if there isn't one" - - ^ self - queryAt: aKey - ifAbsent: [''] -] - -{ #category : #accessing } -XMLURI >> queryAt: aKey ifAbsent: aBlock [ - "Returns the first percent/plus-decoded value of the query string - parameter aKey or the value of aBlock if there isn't one" - - self rawQuery do: [:each | - (self percentAndPlusDecode: each key) = aKey - ifTrue: [^ self percentAndPlusDecode: each value]]. - ^ aBlock value. -] - -{ #category : #testing } -XMLURI >> queryIncludesKey: aKey [ - self - queryAt: aKey - ifAbsent: [^ false]. - ^ true. -] - -{ #category : #accessing } -XMLURI >> queryKeys [ - "Returns a SequenceableCollection of the unique percent/plus-decoded - query string parameter keys" - - | keys | - - keys := OrderedCollection new: self rawQuery size. - self queryKeysDo: [:each | - keys addLast: each]. - ^ keys. -] - -{ #category : #enumerating } -XMLURI >> queryKeysAndValuesDo: aTwoArgumentBlock [ - self rawQuery do: [:each | - aTwoArgumentBlock - value: (self percentAndPlusDecode: each key) - value: (self percentAndPlusDecode: each value)] -] - -{ #category : #enumerating } -XMLURI >> queryKeysDo: aBlock [ - self rawQuery do: [:each | - aBlock value: (self percentAndPlusDecode: each key)] -] - -{ #category : #accessing } -XMLURI >> queryValuesAt: aKey [ - "Returns the percent/plus-decoded values of the query string parameter - aKey or an empty collection if there aren't any" - - ^ self - queryValuesAt: aKey - ifAbsent: [OrderedCollection new] -] - -{ #category : #enumerating } -XMLURI >> queryValuesAt: aKey do: aBlock [ - self queryKeysAndValuesDo: [:key :value | - key = aKey - ifTrue: [aBlock value: value]] -] - -{ #category : #accessing } -XMLURI >> queryValuesAt: aKey ifAbsent: aBlock [ - "Returns the percent/plus-decoded values of the query string parameter - aKey or the value of aBlock if there aren't any" - - | values | - - self - queryValuesAt: aKey - do: [:each | - "only initialize if needed" - (values ifNil: [values := OrderedCollection new]) - addLast: each]. - ^ values ifNil: [aBlock value]. -] - -{ #category : #accessing } -XMLURI >> rawFragment [ - "Returns the raw URI fragment (everything after the '#') without - percent-decoding or an empty string if there isn't one" - - self parseURIStringIfUnparsed. - ^ rawFragment. -] - -{ #category : #private } -XMLURI >> rawFragment: aString [ - rawFragment := aString -] - -{ #category : #accessing } -XMLURI >> rawHost [ - "Returns the raw host without percent-decoding or the IPv6-style host - or an empty string if there isn't one" - - self parseURIStringIfUnparsed. - ^ rawHost. -] - -{ #category : #private } -XMLURI >> rawHost: aString [ - rawHost := aString -] - -{ #category : #accessing } -XMLURI >> rawPathSegments [ - "Returns an OrderedCollection of raw path segments without - percent-decoding" - - self parseURIStringIfUnparsed. - ^ rawPathSegments. -] - -{ #category : #private } -XMLURI >> rawPathSegments: aPathSegmentCollection [ - rawPathSegments := aPathSegmentCollection -] - -{ #category : #accessing } -XMLURI >> rawQuery [ - "Returns an OrderedCollection of raw query string key=value pairs - without percent/plus-decoding" - - self parseURIStringIfUnparsed. - ^ rawQuery. -] - -{ #category : #private } -XMLURI >> rawQuery: anOrderedCollection [ - rawQuery := anOrderedCollection -] - -{ #category : #accessing } -XMLURI >> rawUserInfo [ - self parseURIStringIfUnparsed. - ^ rawUserInfo. -] - -{ #category : #private } -XMLURI >> rawUserInfo: aString [ - rawUserInfo := aString -] - -{ #category : #private } -XMLURI >> removeLastRawPathSegment [ - ^ self rawPathSegments removeLast -] - -{ #category : #private } -XMLURI >> removeRawPathSegments [ - self rawPathSegments removeAll -] - -{ #category : #accessing } -XMLURI >> scheme [ - "Returns the URI scheme or an empty string if there isn't one" - - self parseURIStringIfUnparsed. - ^ scheme. -] - -{ #category : #private } -XMLURI >> scheme: aString [ - scheme := aString -] - -{ #category : #resolving } -XMLURI >> streamGet [ - ^ self asRetrievableResource streamGet -] - -{ #category : #resolving } -XMLURI >> streamGetUpToLimit: aMaxSize decoding: aBoolean [ - ^ self asRetrievableResource - streamGetUpToLimit: aMaxSize - decoding: aBoolean -] - -{ #category : #private } -XMLURI >> uriString [ - ^ uriString -] - -{ #category : #private } -XMLURI >> uriString: aString [ - uriString := aString -] - -{ #category : #accessing } -XMLURI >> userInfo [ - ^ self percentDecode: self rawUserInfo -] diff --git a/src/XML-Parser/XMLURIParser.class.st b/src/XML-Parser/XMLURIParser.class.st deleted file mode 100644 index 48f722f93..000000000 --- a/src/XML-Parser/XMLURIParser.class.st +++ /dev/null @@ -1,182 +0,0 @@ -" -This class is a parser that can extract the scheme, user info, host, port, path segments, query (as an OrderedCollection of associations), and fragment of a URI. It does not handle percent decoding and raises no errors. -" -Class { - #name : #XMLURIParser, - #superclass : #XMLAbstractReadStreamParser, - #classVars : [ - 'HostDelimiters', - 'PathDelimiters', - 'QueryKeyDelimiters', - 'QueryValueDelimiters', - 'SchemeDelimiters', - 'UserInfoDelimiters' - ], - #category : #'XML-Parser-URI' -} - -{ #category : #'class initialization' } -XMLURIParser class >> initialize [ - "self initialize" - - self - initializeSchemeDelimiters; - initializeUserInfoDelimiters; - initializeHostDelimiters; - initializePathDelimiters; - initializeQueryKeyDelimiters; - initializeQueryValueDelimiters -] - -{ #category : #'class initialization' } -XMLURIParser class >> initializeHostDelimiters [ - HostDelimiters := BitmapCharacterSet newFrom: ':/?#' -] - -{ #category : #'class initialization' } -XMLURIParser class >> initializePathDelimiters [ - PathDelimiters := BitmapCharacterSet newFrom: '/?#' -] - -{ #category : #'class initialization' } -XMLURIParser class >> initializeQueryKeyDelimiters [ - QueryKeyDelimiters := BitmapCharacterSet newFrom: '=&#' -] - -{ #category : #'class initialization' } -XMLURIParser class >> initializeQueryValueDelimiters [ - QueryValueDelimiters := BitmapCharacterSet newFrom: '&#' -] - -{ #category : #'class initialization' } -XMLURIParser class >> initializeSchemeDelimiters [ - "including % disallows percent encoding in schemes" - SchemeDelimiters := BitmapCharacterSet newFrom: ':@/?#%' -] - -{ #category : #'class initialization' } -XMLURIParser class >> initializeUserInfoDelimiters [ - UserInfoDelimiters := BitmapCharacterSet newFrom: '@/?#' -] - -{ #category : #parsing } -XMLURIParser >> parseAuthorityPrefix [ - | oldPosition | - - oldPosition := readStream position. - ((readStream peekFor: $/) - and: [readStream peekFor: $/]) - ifTrue: [^ true] - ifFalse: [ - readStream position: oldPosition. - ^ false]. -] - -{ #category : #parsing } -XMLURIParser >> parseFragment [ - (readStream peekFor: $#) - ifTrue: [^ readStream upToEnd] - ifFalse: [^ ''] -] - -{ #category : #parsing } -XMLURIParser >> parseHost [ - | host | - - readStream peek == $[ - ifTrue: [ - host := (self nextDelimitedBy: $]) copyWith: $]. - readStream peekFor: $]] - ifFalse: [host := self nextDelimitedByAny: HostDelimiters]. - ^ host. -] - -{ #category : #parsing } -XMLURIParser >> parsePathSegments [ - | pathSegments segment | - - pathSegments := OrderedCollection new. - - segment := self nextDelimitedByAny: PathDelimiters. - [readStream peekFor: $/] - whileTrue: [ - pathSegments addLast: segment. - segment := self nextDelimitedByAny: PathDelimiters]. - (pathSegments isEmpty - and: [segment isEmpty]) - ifFalse: [pathSegments addLast: segment]. - - ^ pathSegments. -] - -{ #category : #parsing } -XMLURIParser >> parsePort [ - | port | - - (readStream peekFor: $:) - ifTrue: [ - "do not limit the number of chars read, because port - number literals can have an arbitrary number of - leading zeros" - port := - XMLSmallIntegerReader - readFrom: readStream - withBase: 10. - [readStream atEnd - or: [PathDelimiters includes: readStream peek]] - whileFalse: [readStream next]]. - ^ port. -] - -{ #category : #parsing } -XMLURIParser >> parseQuery [ - "parse the query as an OrderedCollection of name=value associations - to handle multiple values for the same key and different encoded keys - that later percent/plus decode to the same key" - - | query key value | - - (readStream peekFor: $?) - ifFalse: [^ OrderedCollection new: 0]. - - query := OrderedCollection new. - [readStream atEnd - or: [(key := self nextDelimitedByAny: QueryKeyDelimiters) isEmpty - and: [readStream peek == $#]]] - whileFalse: [| hasValue | - (hasValue := readStream peekFor: $=) - ifTrue: [value := self nextDelimitedByAny: QueryValueDelimiters] - ifFalse: [value := '']. - (key notEmpty - or: [hasValue]) - ifTrue: [query addLast: key -> value]. - readStream peekFor: $&]. - - ^ query. -] - -{ #category : #parsing } -XMLURIParser >> parseScheme [ - | oldPosition scheme | - - oldPosition := readStream position. - scheme := self nextDelimitedByAny: SchemeDelimiters. - (readStream peekFor: $:) - ifTrue: [^ scheme asLowercase] - ifFalse: [ - readStream position: oldPosition. - ^ '']. -] - -{ #category : #parsing } -XMLURIParser >> parseUserInfo [ - | userInfo oldPosition | - - oldPosition := readStream position. - userInfo := self nextDelimitedByAny: UserInfoDelimiters. - (readStream peekFor: $@) - ifTrue: [^ userInfo] - ifFalse: [ - readStream position: oldPosition. - ^ '']. -] diff --git a/src/XML-Parser/XMLUTF16BigEndianStreamConverter.class.st b/src/XML-Parser/XMLUTF16BigEndianStreamConverter.class.st deleted file mode 100644 index 0584cd949..000000000 --- a/src/XML-Parser/XMLUTF16BigEndianStreamConverter.class.st +++ /dev/null @@ -1,42 +0,0 @@ -" -A stream converter for big endian UTF-16 streams, and the default converter class used when a UTF-16 stream converter is created with newForEncoding: or asXMLStreamConverter and no endian is specified by the encoding name. -" -Class { - #name : #XMLUTF16BigEndianStreamConverter, - #superclass : #XMLUTF16StreamConverter, - #category : #'XML-Parser-Streams' -} - -{ #category : #basic } -XMLUTF16BigEndianStreamConverter class >> basicByteOrderMarkBytes [ - ^ #[16rFE 16rFF] -] - -{ #category : #basic } -XMLUTF16BigEndianStreamConverter class >> basicEncodingNames [ - ^ #('UTF-16' 'UTF16' - 'UTF-16-BE' 'UTF16-BE' 'UTF-16BE' 'UTF16BE') -] - -{ #category : #testing } -XMLUTF16BigEndianStreamConverter >> isBigEndian [ - ^ true -] - -{ #category : #basic } -XMLUTF16BigEndianStreamConverter >> nextPutTwoBytes: anInteger toStream: aStream [ - aStream - nextPut: ((anInteger bitShift: -8) bitAnd: 16rFF); - nextPut: (anInteger bitAnd: 16rFF) -] - -{ #category : #basic } -XMLUTF16BigEndianStreamConverter >> nextTwoBytesFromStream: aStream [ - | firstByte | - - firstByte := aStream next asInteger bitShift: 8. - - aStream atEnd - ifTrue: [self errorBadCharacterEncoding]. - ^ firstByte + aStream next asInteger. -] diff --git a/src/XML-Parser/XMLUTF16LittleEndianStreamConverter.class.st b/src/XML-Parser/XMLUTF16LittleEndianStreamConverter.class.st deleted file mode 100644 index 0dbfceaa8..000000000 --- a/src/XML-Parser/XMLUTF16LittleEndianStreamConverter.class.st +++ /dev/null @@ -1,41 +0,0 @@ -" -A stream converter for little endian UTF-16 streams. -" -Class { - #name : #XMLUTF16LittleEndianStreamConverter, - #superclass : #XMLUTF16StreamConverter, - #category : #'XML-Parser-Streams' -} - -{ #category : #basic } -XMLUTF16LittleEndianStreamConverter class >> basicByteOrderMarkBytes [ - ^ #[16rFF 16rFE] -] - -{ #category : #basic } -XMLUTF16LittleEndianStreamConverter class >> basicEncodingNames [ - ^ #('UTF-16-LE' 'UTF16-LE' 'UTF-16LE' 'UTF16LE') -] - -{ #category : #testing } -XMLUTF16LittleEndianStreamConverter >> isBigEndian [ - ^ false -] - -{ #category : #basic } -XMLUTF16LittleEndianStreamConverter >> nextPutTwoBytes: anInteger toStream: aStream [ - aStream - nextPut: (anInteger bitAnd: 16rFF); - nextPut: ((anInteger bitShift: -8) bitAnd: 16rFF) -] - -{ #category : #basic } -XMLUTF16LittleEndianStreamConverter >> nextTwoBytesFromStream: aStream [ - | firstByte | - - firstByte := aStream next asInteger. - - aStream atEnd - ifTrue: [self errorBadCharacterEncoding]. - ^ firstByte + (aStream next asInteger bitShift: 8). -] diff --git a/src/XML-Parser/XMLUTF16StreamConverter.class.st b/src/XML-Parser/XMLUTF16StreamConverter.class.st deleted file mode 100644 index de93557ac..000000000 --- a/src/XML-Parser/XMLUTF16StreamConverter.class.st +++ /dev/null @@ -1,90 +0,0 @@ -" -An abstract class for UTF-16 stream converters. -" -Class { - #name : #XMLUTF16StreamConverter, - #superclass : #XMLUTFStreamConverter, - #category : #'XML-Parser-Streams' -} - -{ #category : #defaults } -XMLUTF16StreamConverter class >> abstractClass [ - ^ XMLUTF16StreamConverter -] - -{ #category : #testing } -XMLUTF16StreamConverter >> isBigEndian [ - self subclassResponsibility -] - -{ #category : #basic } -XMLUTF16StreamConverter >> nextCodePointFromStream: aStream [ - | codePoint lowSurrogate | - - aStream atEnd - ifTrue: [^ nil]. - - "code points U+10000 to U+10FFFF are encoded with surrogate pairs, - while those < U+10000 are encoded directly" - ((codePoint := self nextTwoBytesFromStream: aStream) < 16rD800 - or: [codePoint > 16rDFFF]) - ifTrue: [ - codePoint > 16r10FFFF - ifTrue: [self errorBadCharacterValue: codePoint]. - ^ codePoint]. - - codePoint > 16rDBFF "max high surrogate" - ifTrue: [self errorBadCharacterEncoding]. - - aStream atEnd - ifTrue: [self errorBadCharacterEncoding]. - (lowSurrogate := self nextTwoBytesFromStream: aStream) - ifNil: [self errorBadCharacterEncoding]. - (lowSurrogate < 16rDC00 "min low surrogate" - or: [lowSurrogate > 16rDFFF]) "max low surrogate" - ifTrue: [self errorBadCharacterEncoding]. - - "A code point > U+10FFFF isn't checked for here because it can't - be encoded with UTF-16. The maximum surrogate pairs can encode is: - (16r10000 + (16r3FF bitShift: 10) + 16r3FF) = 16r10FFFF" - ^ ((codePoint bitAnd: 16r3FF) bitShift: 10) + - (lowSurrogate bitAnd: 16r3FF) + - 16r10000. -] - -{ #category : #encoding } -XMLUTF16StreamConverter >> nextPut: aCharacter toStream: aStream [ - | codePoint | - - (codePoint := aCharacter asInteger) < 16r10000 - ifTrue: [ - "check for the reserved surrogate pair code points" - (codePoint >= 16rD800 - and: [codePoint <= 16rDFFF]) - ifTrue: [self errorBadCharacterValue: codePoint]. - self - nextPutTwoBytes: codePoint - toStream: aStream] - ifFalse: [ - codePoint > 16r10FFFF "max code point" - ifTrue: [self errorBadCharacterValue: codePoint]. - codePoint := codePoint - 16r10000. - "the 10 high-order bits" - self - nextPutTwoBytes: 16rD800 + ((codePoint bitShift: -10) bitAnd: 16r3FF) - toStream: aStream. - "the 10 low-order bits" - self - nextPutTwoBytes: 16rDC00 + (codePoint bitAnd: 16r3FF) - toStream: aStream] -] - -{ #category : #basic } -XMLUTF16StreamConverter >> nextPutTwoBytes: anInteger toStream: aStream [ - self subclassResponsibility -] - -{ #category : #basic } -XMLUTF16StreamConverter >> nextTwoBytesFromStream: aStream [ - self subclassResponsibility -] diff --git a/src/XML-Parser/XMLUTF32BigEndianStreamConverter.class.st b/src/XML-Parser/XMLUTF32BigEndianStreamConverter.class.st deleted file mode 100644 index c9feadfe2..000000000 --- a/src/XML-Parser/XMLUTF32BigEndianStreamConverter.class.st +++ /dev/null @@ -1,52 +0,0 @@ -" -A stream converter for big endian UTF-32 streams, and the default converter class used when a UTF-32 stream converter is created with newForEncoding: or asXMLStreamConverter and no endian is specified by the encoding name. -" -Class { - #name : #XMLUTF32BigEndianStreamConverter, - #superclass : #XMLUTF32StreamConverter, - #category : #'XML-Parser-Streams' -} - -{ #category : #basic } -XMLUTF32BigEndianStreamConverter class >> basicByteOrderMarkBytes [ - ^ #[16r00 16r00 16rFE 16rFF] -] - -{ #category : #basic } -XMLUTF32BigEndianStreamConverter class >> basicEncodingNames [ - ^ #('UTF-32' 'UTF32' - 'UTF-32-BE' 'UTF32-BE' 'UTF-32BE' 'UTF32BE') -] - -{ #category : #testing } -XMLUTF32BigEndianStreamConverter >> isBigEndian [ - ^ true -] - -{ #category : #basic } -XMLUTF32BigEndianStreamConverter >> nextFourBytesFromStream: aStream [ - | firstByte secondByte thirdByte | - - firstByte := aStream next asInteger bitShift: 24. - - aStream atEnd - ifTrue: [self errorBadCharacterEncoding]. - secondByte := aStream next asInteger bitShift: 16. - - aStream atEnd - ifTrue: [self errorBadCharacterEncoding]. - thirdByte := aStream next asInteger bitShift: 8. - - aStream atEnd - ifTrue: [self errorBadCharacterEncoding]. - ^ firstByte + secondByte + thirdByte + aStream next asInteger. -] - -{ #category : #basic } -XMLUTF32BigEndianStreamConverter >> nextPutFourBytes: anInteger toStream: aStream [ - aStream - nextPut: ((anInteger bitShift: -24) bitAnd: 16rFF); - nextPut: ((anInteger bitShift: -16) bitAnd: 16rFF); - nextPut: ((anInteger bitShift: -8) bitAnd: 16rFF); - nextPut: (anInteger bitAnd: 16rFF) -] diff --git a/src/XML-Parser/XMLUTF32LittleEndianStreamConverter.class.st b/src/XML-Parser/XMLUTF32LittleEndianStreamConverter.class.st deleted file mode 100644 index 617f6a40e..000000000 --- a/src/XML-Parser/XMLUTF32LittleEndianStreamConverter.class.st +++ /dev/null @@ -1,51 +0,0 @@ -" -A stream converter for little endian UTF-32 streams. -" -Class { - #name : #XMLUTF32LittleEndianStreamConverter, - #superclass : #XMLUTF32StreamConverter, - #category : #'XML-Parser-Streams' -} - -{ #category : #basic } -XMLUTF32LittleEndianStreamConverter class >> basicByteOrderMarkBytes [ - ^ #[16rFF 16rFE 16r00 16r00] -] - -{ #category : #basic } -XMLUTF32LittleEndianStreamConverter class >> basicEncodingNames [ - ^ #('UTF-32-LE' 'UTF32-LE' 'UTF-32LE' 'UTF32LE') -] - -{ #category : #testing } -XMLUTF32LittleEndianStreamConverter >> isBigEndian [ - ^ false -] - -{ #category : #basic } -XMLUTF32LittleEndianStreamConverter >> nextFourBytesFromStream: aStream [ - | firstByte secondByte thirdByte | - - firstByte := aStream next asInteger. - - aStream atEnd - ifTrue: [self errorBadCharacterEncoding]. - secondByte := aStream next asInteger bitShift: 8. - - aStream atEnd - ifTrue: [self errorBadCharacterEncoding]. - thirdByte := aStream next asInteger bitShift: 16. - - aStream atEnd - ifTrue: [self errorBadCharacterEncoding]. - ^ firstByte + secondByte + thirdByte + (aStream next asInteger bitShift: 24). -] - -{ #category : #basic } -XMLUTF32LittleEndianStreamConverter >> nextPutFourBytes: anInteger toStream: aStream [ - aStream - nextPut: (anInteger bitAnd: 16rFF); - nextPut: ((anInteger bitShift: -8) bitAnd: 16rFF); - nextPut: ((anInteger bitShift: -16) bitAnd: 16rFF); - nextPut: ((anInteger bitShift: -24) bitAnd: 16rFF) -] diff --git a/src/XML-Parser/XMLUTF32StreamConverter.class.st b/src/XML-Parser/XMLUTF32StreamConverter.class.st deleted file mode 100644 index 0fae1b3b6..000000000 --- a/src/XML-Parser/XMLUTF32StreamConverter.class.st +++ /dev/null @@ -1,62 +0,0 @@ -" -An abstract class for UTF-32 stream converters. -" -Class { - #name : #XMLUTF32StreamConverter, - #superclass : #XMLUTFStreamConverter, - #category : #'XML-Parser-Streams' -} - -{ #category : #defaults } -XMLUTF32StreamConverter class >> abstractClass [ - ^ XMLUTF32StreamConverter -] - -{ #category : #testing } -XMLUTF32StreamConverter >> isBigEndian [ - self subclassResponsibility -] - -{ #category : #basic } -XMLUTF32StreamConverter >> nextCodePointFromStream: aStream [ - | codePoint | - - aStream atEnd - ifTrue: [^ nil]. - - "check for the reserved surrogate pair code points and code points - greater than the max code point" - (codePoint := self nextFourBytesFromStream: aStream) >= 16rD800 - ifTrue: [ - (codePoint <= 16rDFFF - or: [codePoint > 16r10FFFF]) - ifTrue: [self errorBadCharacterValue: codePoint]]. - - ^ codePoint. -] - -{ #category : #basic } -XMLUTF32StreamConverter >> nextFourBytesFromStream: aStream [ - self subclassResponsibility -] - -{ #category : #encoding } -XMLUTF32StreamConverter >> nextPut: aCharacter toStream: aStream [ - | codePoint | - - codePoint := aCharacter asInteger. - "check for the reserved surrogate pair code points and code points - greater than the max code point" - (codePoint >= 16rD800 - and: [codePoint <= 16rDFFF - or: [codePoint > 16r10FFFF]]) - ifTrue: [self errorBadCharacterValue: codePoint]. - self - nextPutFourBytes: codePoint - toStream: aStream. -] - -{ #category : #basic } -XMLUTF32StreamConverter >> nextPutFourBytes: anInteger toStream: aStream [ - self subclassResponsibility -] diff --git a/src/XML-Parser/XMLUTF8StreamConverter.class.st b/src/XML-Parser/XMLUTF8StreamConverter.class.st deleted file mode 100644 index c546fe2b5..000000000 --- a/src/XML-Parser/XMLUTF8StreamConverter.class.st +++ /dev/null @@ -1,163 +0,0 @@ -" -A stream converter for UTF-8 streams. (Rejects overlong encodings.) -" -Class { - #name : #XMLUTF8StreamConverter, - #superclass : #XMLUTFStreamConverter, - #category : #'XML-Parser-Streams' -} - -{ #category : #basic } -XMLUTF8StreamConverter class >> basicByteOrderMarkBytes [ - ^ #[16rEF 16rBB 16rBF] -] - -{ #category : #basic } -XMLUTF8StreamConverter class >> basicEncodingNames [ - ^ #('UTF-8' 'UTF8') -] - -{ #category : #private } -XMLUTF8StreamConverter >> errorOverlongCodePoint: aCodePoint [ - XMLEncodingException - formatSignal: 'Illegal overlong UTF-8 encoding for U+{1} code point' - with: aCodePoint printStringHex -] - -{ #category : #basic } -XMLUTF8StreamConverter >> nextCodePointFromStream: aStream [ - self shouldNotImplement -] - -{ #category : #decoding } -XMLUTF8StreamConverter >> nextFromStream: aStream [ - "an attempt was made at porting Bjoern Hoehrmann's DFA-based decoder - (with transitions pre-multiplied by 16), but it was slightly slower - than this implementation and needed significant modification to report - errors the same way, so it was scrapped" - - | firstByte codePoint | - - aStream atEnd - ifTrue: [^ nil]. - (firstByte := aStream next asInteger) < 16r80 "single byte character" - ifTrue: [^ firstByte asCharacter]. - - codePoint := - self - nextMultiByteCodePointStartingWith: firstByte - fromStream: aStream. - [codePoint == 16rFEFF] "the BOM code point" - whileTrue: [ - aStream atEnd - ifTrue: [^ nil]. - (firstByte := aStream next asInteger) < 16r80 "single byte character" - ifTrue: [^ firstByte asCharacter]. - codePoint := - self - nextMultiByteCodePointStartingWith: firstByte - fromStream: aStream]. - - ^ codePoint asCharacter. -] - -{ #category : #basic } -XMLUTF8StreamConverter >> nextMultiByteCodePointStartingWith: aFirstByte fromStream: aStream [ - | secondByte thirdByte codePoint | - - aStream atEnd - ifTrue: [self errorBadCharacterEncoding]. - secondByte := aStream next asInteger. - (secondByte bitAnd: 16rC0) == 16r80 - ifFalse: [self errorBadCharacterEncoding]. - (aFirstByte bitAnd: 16rE0) == 16rC0 "two bytes" - ifTrue: [ - codePoint := - ((aFirstByte bitAnd: 16r1F) bitShift: 6) + - (secondByte bitAnd: 16r3F). - codePoint >= 16r80 - ifFalse: [self errorOverlongCodePoint: codePoint]. - ^ codePoint]. - - aStream atEnd - ifTrue: [self errorBadCharacterEncoding]. - thirdByte := aStream next asInteger. - (thirdByte bitAnd: 16rC0) == 16r80 - ifFalse: [self errorBadCharacterEncoding]. - (aFirstByte bitAnd: 16rF0) == 16rE0 "three bytes" - ifTrue: [ - codePoint := - ((aFirstByte bitAnd: 16r0F) bitShift: 12) + - ((secondByte bitAnd: 16r3F) bitShift: 6) + - (thirdByte bitAnd: 16r3F). - "check for the reserved surrogate pair code points" - codePoint >= 16rD800 - ifTrue: [ - codePoint <= 16rDFFF - ifTrue: [self errorBadCharacterValue: codePoint]] - ifFalse: [ - codePoint >= 16r800 - ifFalse: [self errorOverlongCodePoint: codePoint]]. - ^ codePoint]. - - (aFirstByte bitAnd: 16rF8) == 16rF0 - ifTrue: [| fourthByte | - aStream atEnd - ifTrue: [self errorBadCharacterEncoding]. - fourthByte := aStream next asInteger. - (fourthByte bitAnd: 16rC0) == 16r80 - ifFalse: [self errorBadCharacterEncoding]. - codePoint := - ((aFirstByte bitAnd: 16r07) bitShift: 18) + - ((secondByte bitAnd: 16r3F) bitShift: 12) + - ((thirdByte bitAnd: 16r3F) bitShift: 6) + - (fourthByte bitAnd: 16r3F). - codePoint > 16r10FFFF "max code point" - ifTrue: [self errorBadCharacterValue: codePoint]. - codePoint >= 16r10000 - ifFalse: [self errorOverlongCodePoint: codePoint]. - ^ codePoint]. - - "the first byte is malformed" - self errorBadCharacterEncoding. -] - -{ #category : #encoding } -XMLUTF8StreamConverter >> nextPut: aCharacter toStream: aStream [ - | codePoint | - - (codePoint := aCharacter asInteger) < 16r80 - ifTrue: [ - aStream nextPut: codePoint. - ^ self]. - - codePoint < 16r800 - ifTrue: [ - aStream - nextPut: 16rC0 + (codePoint bitShift: -6); - nextPut: 16r80 + (codePoint bitAnd: 16r003F). - ^ self]. - - codePoint < 16r10000 - ifTrue: [ - "check for the reserved surrogate pair code points" - (codePoint >= 16rD800 - and: [codePoint <= 16rDFFF]) - ifTrue: [self errorBadCharacterValue: codePoint]. - aStream - nextPut: 16rE0 + (codePoint bitShift: -12); - nextPut: 16r80 + ((codePoint bitShift: -6) bitAnd: 16r3F); - nextPut: 16r80 + (codePoint bitAnd: 16r3F). - ^ self]. - - codePoint <= 16r10FFFF "max code point" - ifTrue: [ - aStream - nextPut: 16rF0 + (codePoint bitShift: -18); - nextPut: 16r80 + ((codePoint bitShift: -12) bitAnd: 16r3F); - nextPut: 16r80 + ((codePoint bitShift: -6) bitAnd: 16r3F); - nextPut: 16r80 + (codePoint bitAnd: 16r3F). - ^ self]. - - self errorBadCharacterValue: codePoint. -] diff --git a/src/XML-Parser/XMLUTFStreamConverter.class.st b/src/XML-Parser/XMLUTFStreamConverter.class.st deleted file mode 100644 index 0dd7f8a4e..000000000 --- a/src/XML-Parser/XMLUTFStreamConverter.class.st +++ /dev/null @@ -1,40 +0,0 @@ -" -An abstract class for Unicode stream converters. -" -Class { - #name : #XMLUTFStreamConverter, - #superclass : #XMLStatelessStreamConverter, - #category : #'XML-Parser-Streams' -} - -{ #category : #defaults } -XMLUTFStreamConverter class >> abstractClass [ - ^ XMLUTFStreamConverter -] - -{ #category : #private } -XMLUTFStreamConverter >> errorBadCharacterValue: aValue [ - XMLEncodingException - formatSignal: 'Invalid {1} code point U+{1}' - with: self encoding - with: aValue printStringHex -] - -{ #category : #basic } -XMLUTFStreamConverter >> nextCodePointFromStream: aStream [ - self subclassResponsibility -] - -{ #category : #decoding } -XMLUTFStreamConverter >> nextFromStream: aStream [ - | codePoint | - - codePoint := self nextCodePointFromStream: aStream. - [codePoint == 16rFEFF] "the BOM code point" - whileTrue: [ - aStream atEnd - ifTrue: [^ nil]. - codePoint := self nextCodePointFromStream: aStream]. - ^ codePoint - ifNotNil: [codePoint asCharacter]. -] diff --git a/src/XML-Parser/XMLUninitializedState.class.st b/src/XML-Parser/XMLUninitializedState.class.st deleted file mode 100644 index cd7219444..000000000 --- a/src/XML-Parser/XMLUninitializedState.class.st +++ /dev/null @@ -1,18 +0,0 @@ -" -A state for before tokenizing has started. -" -Class { - #name : #XMLUninitializedState, - #superclass : #XMLTokenizerState, - #category : #'XML-Parser-Drivers' -} - -{ #category : #testing } -XMLUninitializedState >> isInitializedState [ - ^ false -] - -{ #category : #tokenizing } -XMLUninitializedState >> nextTokenFrom: aTokenizer [ - ^ aTokenizer nextStartDocument -] diff --git a/src/XML-Parser/XMLUnparsedEntityValidator.class.st b/src/XML-Parser/XMLUnparsedEntityValidator.class.st deleted file mode 100644 index 8b438610a..000000000 --- a/src/XML-Parser/XMLUnparsedEntityValidator.class.st +++ /dev/null @@ -1,137 +0,0 @@ -" -Used by attribute validators to validate attribute references to unparsed entities and notations. -" -Class { - #name : #XMLUnparsedEntityValidator, - #superclass : #Object, - #instVars : [ - 'unparsedEntities', - 'notations', - 'notationAttributeValidators' - ], - #category : #'XML-Parser-Validation' -} - -{ #category : #'instance creation' } -XMLUnparsedEntityValidator class >> unparsedEntities: anUnparsedEntityDictionary notations: aNotationDictionary [ - ^ self new - setUnparsedEntities: anUnparsedEntityDictionary - notations: aNotationDictionary -] - -{ #category : #private } -XMLUnparsedEntityValidator >> errorMultipleDeclarationsForNotation: aNotation [ - XMLValidationException - formatSignal: 'Multiple declarations for notation "{1}"' - with: aNotation -] - -{ #category : #private } -XMLUnparsedEntityValidator >> errorMultipleNotationAttributesForElement: anElement [ - XMLValidationException - formatSignal: 'Element <{1}> has multiple NOTATION list attributes' - with: anElement -] - -{ #category : #private } -XMLUnparsedEntityValidator >> errorUndeclaredNotation: aNotation inAttribute: anAttribute [ - XMLValidationException - formatSignal: 'Undeclared notation "{1}" in NOTATION (...) attribute "{2}"' - with: aNotation - with: anAttribute -] - -{ #category : #private } -XMLUnparsedEntityValidator >> errorUndeclaredNotation: aNotation inEntity: anEntity [ - XMLValidationException - formatSignal: 'Undeclared notation "{1}" referenced by declaration' - with: aNotation - with: anEntity -] - -{ #category : #private } -XMLUnparsedEntityValidator >> errorUndeclaredUnparsedEntityReference: anEntity inAttribute: anAttriubute [ - XMLValidationException - formatSignal: 'Undeclared unparsed entity "{1}" in "{2}" attribute' - with: anEntity - with: anAttriubute -] - -{ #category : #testing } -XMLUnparsedEntityValidator >> hasNotationAttributeValidators [ - "direct access to avoid lazy initialization" - ^ notationAttributeValidators notNil - and: [notationAttributeValidators notEmpty] -] - -{ #category : #accessing } -XMLUnparsedEntityValidator >> notationAttributeValidators [ - ^ notationAttributeValidators ifNil: [notationAttributeValidators := Dictionary new] -] - -{ #category : #accessing } -XMLUnparsedEntityValidator >> notations [ - ^ notations ifNil: [notations := Dictionary new] -] - -{ #category : #initialization } -XMLUnparsedEntityValidator >> setUnparsedEntities: anUnparsedEntityDictionary notations: aNotationDictionary [ - unparsedEntities := anUnparsedEntityDictionary. - notations := aNotationDictionary. -] - -{ #category : #accessing } -XMLUnparsedEntityValidator >> unparsedEntities [ - ^ unparsedEntities ifNil: [unparsedEntities := Dictionary new] -] - -{ #category : #validating } -XMLUnparsedEntityValidator >> validateEntityReference: anEntity inAttribute: anAttribute [ - (self unparsedEntities includesKey: anEntity) - ifFalse: [ - self - errorUndeclaredUnparsedEntityReference: anEntity - inAttribute: anAttribute] -] - -{ #category : #validating } -XMLUnparsedEntityValidator >> validateNotationAttributeDeclaration: aNotationAttributeValidator [ - | oldSize | - - "checking size after is faster than includes:" - oldSize := self notationAttributeValidators size. - (self notationAttributeValidators - at: aNotationAttributeValidator element - put: aNotationAttributeValidator; - size) > oldSize - ifFalse: [ - self errorMultipleNotationAttributesForElement: - aNotationAttributeValidator element]. -] - -{ #category : #validating } -XMLUnparsedEntityValidator >> validateNotationAttributeDeclarationDefaults [ - "this validation has to be delayed until the entire DTD - is processed so notation attributes can be declared before - the notations referenced in their enumeration list are" - self notationAttributeValidators valuesDo: [:validator | - validator allowedValues do: [:each | - (self notations includesKey: each) - ifFalse: [ - self - errorUndeclaredNotation: each - inAttribute: validator attribute]]] -] - -{ #category : #validating } -XMLUnparsedEntityValidator >> validateUnparsedEntityDeclarations [ - "this validation has to be delayed until the entire DTD - is processed so unparsed entities can be declared before - the notation they reference are" - self unparsedEntities valuesDo: [:each | - (self notations includesKey: each ndata) - ifFalse: [ - self - errorUndeclaredNotation: each ndata - inEntity: each name]] -] diff --git a/src/XML-Parser/XMLValidatingNodeVisitor.class.st b/src/XML-Parser/XMLValidatingNodeVisitor.class.st deleted file mode 100644 index 1a148f732..000000000 --- a/src/XML-Parser/XMLValidatingNodeVisitor.class.st +++ /dev/null @@ -1,77 +0,0 @@ -" -A validating node visitor that can validate DOM node trees using XMLDocumentValidators. -" -Class { - #name : #XMLValidatingNodeVisitor, - #superclass : #XMLNodeVisitor, - #instVars : [ - 'validator' - ], - #category : #'XML-Parser-DOM' -} - -{ #category : #'instance creation' } -XMLValidatingNodeVisitor class >> validator: aValidator [ - ^ self new validator: aValidator -] - -{ #category : #accessing } -XMLValidatingNodeVisitor >> validator [ - ^ validator -] - -{ #category : #accessing } -XMLValidatingNodeVisitor >> validator: aValidator [ - validator := aValidator -] - -{ #category : #visiting } -XMLValidatingNodeVisitor >> visitComment: aComment [ - self validator validateComment: aComment. - ^ aComment. -] - -{ #category : #visiting } -XMLValidatingNodeVisitor >> visitDocument: aDocument [ - aDocument root - ifNotNil: [:rootElement | - self validator validateRootElement: rootElement name]. - super visitDocument: aDocument. - self validator validateEndDocument. - ^ aDocument. -] - -{ #category : #visiting } -XMLValidatingNodeVisitor >> visitElement: anElement [ - | attributeDictionary | - - attributeDictionary := - anElement hasAttributes - ifTrue: [anElement attributeNodes asDictionary] - ifFalse: [Dictionary new]. - - self validator - validateStartTag: anElement name - attributes: attributeDictionary. - "validation can change/add attribute values" - anElement setAttributes: attributeDictionary. - - super visitElement: anElement. - - self validator validateEndTag: anElement name. - ^ anElement. -] - -{ #category : #visiting } -XMLValidatingNodeVisitor >> visitPI: aPI [ - self validator - validatePI: aPI target - data: aPI data. - ^ aPI. -] - -{ #category : #visiting } -XMLValidatingNodeVisitor >> visitStringNode: aStringNode [ - self validator validatePCData: aStringNode string. - ^ aStringNode. -] diff --git a/src/XML-Parser/XMLValidationException.class.st b/src/XML-Parser/XMLValidationException.class.st deleted file mode 100644 index 35dbc652b..000000000 --- a/src/XML-Parser/XMLValidationException.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -Invoked when invalid XML is detected and validation is on. -" -Class { - #name : #XMLValidationException, - #superclass : #XMLParserException, - #category : #'XML-Parser-Exceptions' -} diff --git a/src/XML-Parser/XMLWellFormedParserTokenizer.class.st b/src/XML-Parser/XMLWellFormedParserTokenizer.class.st deleted file mode 100644 index 3f8a7b06b..000000000 --- a/src/XML-Parser/XMLWellFormedParserTokenizer.class.st +++ /dev/null @@ -1,2570 +0,0 @@ -" -This is a tokenizer for well-formed XML documents that supports DTD subsets and entity replacement. -" -Class { - #name : #XMLWellFormedParserTokenizer, - #superclass : #XMLParserTokenizer, - #instVars : [ - 'pushedBackEntities', - 'totalOpenIncludeSections', - 'isInLiteralValue', - 'isIgnoringLiteralValueTerminator' - ], - #classVars : [ - 'EncodingNameChars', - 'EncodingNameStartChars', - 'NormalizedSpace', - 'PublicIDChars', - 'VersionNumChars' - ], - #category : #'XML-Parser-Drivers' -} - -{ #category : #'class initialization' } -XMLWellFormedParserTokenizer class >> initialize [ - "self initialize" - - self - initializeNormalizedSpace; - initializePublicIDChars; - initializeEncodingNameStartChars; - initializeEncodingNameChars; - initializeVersionNumChars -] - -{ #category : #'class initialization' } -XMLWellFormedParserTokenizer class >> initializeEncodingNameChars [ - "EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*" - - "assign the fully initialized object with #yourself to avoid - possible race conditions when reinitialization the class" - EncodingNameChars := - BitmapCharacterSet new - addRangeFrom: $a to: $z; - addRangeFrom: $A to: $Z; - addRangeFrom: $0 to: $9; - addAll: '-_.'; - yourself -] - -{ #category : #'class initialization' } -XMLWellFormedParserTokenizer class >> initializeEncodingNameStartChars [ - "Character>>isLetter is not used because it may return true for non-ASCII - letters depending on the locale. - - EncName ::= [A-Za-z] ([A-Za-z0-9._] | '-')*" - - "assign the fully initialized object with #yourself to avoid - possible race conditions when reinitialization the class" - EncodingNameStartChars := - BitmapCharacterSet new - addRangeFrom: $a to: $z; - addRangeFrom: $A to: $Z; - yourself -] - -{ #category : #'class initialization' } -XMLWellFormedParserTokenizer class >> initializeNormalizedSpace [ - "stored in a class var for faster access" - NormalizedSpace := Character space -] - -{ #category : #'class initialization' } -XMLWellFormedParserTokenizer class >> initializePublicIDChars [ - "PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]" - - "assign the fully initialized object with #yourself to avoid - possible race conditions when reinitialization the class" - PublicIDChars := - BitmapCharacterSet new - add: 16r20 asCharacter; - add: 16rD asCharacter; - add: 16rA asCharacter; - addRangeFrom: $a to: $z; - addRangeFrom: $A to: $Z; - addRangeFrom: $0 to: $9; - addAll: '-''()+,./:=?;!*#@$_%'; - yourself -] - -{ #category : #'class initialization' } -XMLWellFormedParserTokenizer class >> initializeVersionNumChars [ - "VersionNum ::= '1.' [0-9]+" - - "assign the fully initialized object with #yourself to avoid - possible race conditions when reinitialization the class" - VersionNumChars := - BitmapCharacterSet new - addRangeFrom: $0 to: $9; - add: $.; - yourself -] - -{ #category : #'entity replacing' } -XMLWellFormedParserTokenizer >> addPushedBackEntity: aPushedBackEntity [ - (self hasPushedBackEntity: aPushedBackEntity) - ifTrue: [self errorSelfReferentialEntity: aPushedBackEntity]. - - self maxEntityReplacementDepth - ifNotNil: [:maxDepth | - self pushedBackEntities size >= maxDepth - ifTrue: [self errorEntityDepthLimitExceeded]]. - - self pushedBackEntities addLast: aPushedBackEntity. - driver currentEntity: aPushedBackEntity entity. - aPushedBackEntity isExternal - ifTrue: [driver baseURI: aPushedBackEntity uri]. - - ^ aPushedBackEntity. -] - -{ #category : #decoding } -XMLWellFormedParserTokenizer >> characterFromCodePoint: aCodePoint [ - | character | - - "nil understands isXMLChar so it does not need to be tested for" - (character := super characterFromCodePoint: aCodePoint) isXMLChar - ifTrue: [^ character] - ifFalse: [^ nil]. -] - -{ #category : #'entity replacing' } -XMLWellFormedParserTokenizer >> constructLiteralReplacementForEntity: anEntity [ - | wasIgnoringLiteralValueTerminator | - - wasIgnoringLiteralValueTerminator := isIgnoringLiteralValueTerminator. - isIgnoringLiteralValueTerminator := true. - self - pushBackEntity: anEntity - whenPoppedDo: [ - isIgnoringLiteralValueTerminator := wasIgnoringLiteralValueTerminator]. -] - -{ #category : #'entity replacing' } -XMLWellFormedParserTokenizer >> constructReplacementForGeneralEntity: anEntity [ - isInLiteralValue - ifTrue: [ - anEntity isExternal - ifTrue: [self errorLiteralReferenceToExternalGeneralEntity: anEntity]. - self constructLiteralReplacementForEntity: anEntity] - ifFalse: [ - driver handleStartContentEntityReplacement: anEntity name. - self - pushBackEntity: anEntity - whenPoppedDo: [driver handleEndContentEntityReplacement: anEntity name]] -] - -{ #category : #'entity replacing' } -XMLWellFormedParserTokenizer >> constructReplacementForParameterEntity: anEntity [ - isInLiteralValue - ifTrue: [self constructLiteralReplacementForEntity: anEntity] - ifFalse: [ - "the trailing space" - streamReader pushBackCharacter: NormalizedSpace. - self - pushBackEntity: anEntity - whenPoppedDo: nil. - "the leading space" - streamReader pushBackCharacter: NormalizedSpace] -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorDuplicateAttribute: anAttribute [ - self - formatParseError: 'Duplicate attribute "{1}" in start tag' - with: anAttribute -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorEntityDepthLimitExceeded [ - XMLLimitException signal: - 'Cannot further nest entity replacements; ', - 'use #maxEntityReplacementDepth: to change or disable' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedAttributeEqualsSeparatorFor: anAttributeType butGot: aCharacter [ - self - formatParseError: - 'Expected {1} attribute name-value "=" separator but got "{2}" instead' - with: anAttributeType - with: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedAttributeName [ - self errorExpected: 'attribute name' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedAttributeValueEnd: aQuote butGot: aCharacter [ - aCharacter == $< - ifTrue: [self parseError: 'Attribute value contains illegal "<" character'] - ifFalse: [ - self - errorExpectedQuote: aQuote - ending: 'attribute value' - butGot: aCharacter] -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedAttributeValueStartButGot: aCharacter [ - self - errorExpectedQuoteStarting: 'attribute value' - butGot: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedCDataSectionTerminator [ - self errorExpected: 'end of CDATA section "]]>" terminator' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedCharacterReferenceTerminatorButGot: aCharacter [ - self - errorExpectedReferenceTerminatorFor: 'character' - butGot: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedCommentStartButGot: aCharacter [ - self - formatParseError: - 'Expected comment starting "<--" sequence but got "<-{1}" instead' - with: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedCommentTerminator [ - self errorExpected: 'comment "-->" terminator' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedCommentTerminatorButGot: aCharacter [ - self - formatParseError: - 'Comments cannot contain "--" sequences', - (aCharacter - ifNil: [''] - ifNotNil: [', like "--{1}",']), - ' and any "--" must be followed by ">" to terminate the comment' - with: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedDeclarationTerminatorButGot: aCharacter [ - self - errorExpectedMarkupTerminatorFor: 'declaration' - butGot: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedDoctypeDeclarationTerminatorButGot: aCharacter [ - self - errorExpectedMarkupTerminatorFor: 'doctype declaration' - butGot: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedElementAttributeEqualsSeparatorButGot: aCharacter [ - self - errorExpectedAttributeEqualsSeparatorFor: 'element' - butGot: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedElementName [ - self errorExpected: 'element name' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedEncodingName [ - self errorExpected: 'encoding name in encoding attribute' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedEndTag: anExpectedEndTag butGot: aCharacter at: aCharacterPosition [ - | receivedEndTag | - - "try to get the entire unexpected name" - nameStream reset. - 1 to: aCharacterPosition - 1 do: [:i | - nameStream nextPut: (anExpectedEndTag at: i)]. - "nil understands isXMLNameChar so it is not tested for" - aCharacter isXMLNameChar - ifTrue: [ - nameStream nextPut: aCharacter. - [streamReader peek isXMLNameChar] - whileTrue: [nameStream nextPut: streamReader next]]. - - (receivedEndTag := nameStream contents) size > 0 - ifTrue: [ - (elementNester hasOpenElement: receivedEndTag) - ifTrue: [self errorUnterminatedElementsInElement: receivedEndTag] - ifFalse: [self errorTerminatingUnstartedElement: receivedEndTag]] - ifFalse: [self errorExpectedElementName]. -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedEntityName [ - self errorExpected: 'entity name' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedEntityReferenceTerminatorButGot: aCharacter [ - self - errorExpectedReferenceTerminatorFor: 'entity' - butGot: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedEntityValueEnd: aQuote butGot: aCharacter [ - self - errorExpectedQuote: aQuote - ending: 'entity value' - butGot: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedIncludeSectionTerminatorButGot: aFirstCharacter followedBy: aSecondCharacter [ - self - formatParseError: - 'Expected include section "]]>" terminator ', - 'but got "]{1}{2}" instead' - with: aFirstCharacter - with: aSecondCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedIntegerCharacterReference [ - self errorExpected: - 'decimal or hex integer after "&#" character reference start' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedLiteral: aString butGot: aCharacter at: aStringPosition [ - | receivedString | - - receivedString := - (aString - copyReplaceFrom: aStringPosition - to: aString size - with: - (aCharacter ifNil: ['']) asString, - (streamReader next: aString size - aStringPosition)). - - self - errorExpectedLiteral: aString - butGot: receivedString. -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedMarkupTerminatorFor: aDescription butGot: aCharacter [ - self - formatParseError: - 'Expected ">" {1} terminator but got "{2}" instead' - with: aDescription - with: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedNmtoken [ - self errorExpected: 'an XML Nmtoken name' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedNotationName [ - self errorExpected: 'notation name' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedPITarget [ - self errorExpected: - (state isXMLDeclarationState - ifTrue: [ - '"xml" to start an declaration or a ', - 'processing instruction target'] - ifFalse: ['processing instruction target']) -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedPITerminatorButGot: aCharacter [ - self - errorExpectedMarkupTerminatorFor: 'processing instruction' - butGot: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedPublicIDLiteralEnd: aQuote butGot: aCharacter [ - self - errorExpectedQuote: aQuote - ending: 'public ID literal' - butGot: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedPublicIDLiteralStartButGot: aCharacter [ - self - errorExpectedQuoteStarting: 'public ID literal' - butGot: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedQuote: aQuote ending: aDescription butGot: aCharacter [ - self - formatParseError: - 'Expected end of {1} ({2}) quoted {3} but got "{4}" instead' - with: - (aQuote == $' - ifTrue: ['single'] - ifFalse: ['double']) - with: aQuote - with: aDescription - with: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedQuoteStarting: aDescription butGot: aCharacter [ - self - formatParseError: - 'Expected start of double (") or single ('') ', - 'quoted {1} but got "{2}" instead' - with: aDescription - with: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedReferenceTerminatorFor: aDescription butGot: aCharacter [ - self - formatParseError: - 'Expected {1} reference ";" terminator but got "{2}" instead' - with: aDescription - with: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedSeparators [ - self errorExpected: 'one or more whitespace characters' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedStartMarkupTokenButGot: aCharacter [ - self - errorExpected: '"<" start of markup' - butGot: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedSubsetDeclaration [ - self errorExpected: - 'DTD subset ELEMENT, ATTLIST, ENTITY, or NOTATION declaration' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedSystemIDLiteralEnd: aQuote butGot: aCharacter [ - self - errorExpectedQuote: aQuote - ending: 'system ID literal' - butGot: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedSystemIDLiteralStartButGot: aCharacter [ - self - errorExpectedQuoteStarting: 'system ID literal' - butGot: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedTagTerminatorButGot: aCharacter [ - self - errorExpectedMarkupTerminatorFor: 'tag' - butGot: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedXMLAttributeEqualsSeparatorButGot: aCharacter [ - self - errorExpectedAttributeEqualsSeparatorFor: '' - butGot: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedXMLDeclarationTerminatorButGot: aFirstCharacter followedBy: aSecondCharacter [ - self - formatParseError: - 'Expected "" declaration "?>" terminator ', - 'but got "{1}{2}" instead' - with: aFirstCharacter - with: aSecondCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedXMLEncodingValueEnd: aQuote butGot: aCharacter [ - self - errorExpectedQuote: aQuote - ending: ' encoding value' - butGot: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedXMLEncodingValueStartButGot: aCharacter [ - self - errorExpectedQuoteStarting: ' encoding value' - butGot: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedXMLStandaloneValueEnd: aQuote butGot: aCharacter [ - self - errorExpectedQuote: aQuote - ending: ' standalone value' - butGot: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedXMLStandaloneValueStartButGot: aCharacter [ - self - errorExpectedQuoteStarting: ' standalone value' - butGot: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedXMLVersionNumberButGot: aString [ - self - errorExpected: - ' version number "1.x" (where "x" is one or more digits)' - butGot: aString -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedXMLVersionValueEnd: aQuote butGot: aCharacter [ - self - errorExpectedQuote: aQuote - ending: ' version value' - butGot: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorExpectedXMLVersionValueStartButGot: aCharacter [ - self - errorExpectedQuoteStarting: ' version value' - butGot: aCharacter -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorImproperGeneralEntityNesting [ - self parseError: - 'Markup tokens must start and end in the same general entity replacement' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorInputTerminatedPrematurely [ - self parseError: 'Input terminated prematurely' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorInternalDeclarationParameterEntityReference [ - self parseError: 'Parameter entity reference within internal subset declaration' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorInternalSubsetConditionalSection [ - self parseError: - 'Cannot have or sections in internal subset' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorInvalidCharacterReferenceCodePoint: aCodePoint [ - self - formatParseError: 'Invalid character reference to U+{1} code point' - with: aCodePoint printStringHex -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorLiteralReferenceToExternalGeneralEntity: anEntity [ - self - formatParseError: - 'External general entity reference {1} in attribute value' - with: anEntity asReference -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorMultipleDoctypeDeclarations [ - self parseError: 'Multiple declarations' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorMultipleDocumentRootElements [ - self parseError: 'Document cannot have multiple root elements' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorNonChar: aCharacter in: aDescription [ - self - formatParseError: 'Invalid character U+{1} in {2}' - with: aCharacter asciiValue printStringHex - with: aDescription -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorNonCharInAttributeValue: aCharacter [ - self - errorNonChar: aCharacter - in: 'attribute value' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorNonCharInCDataSection: aCharacter [ - self - errorNonChar: aCharacter - in: ' section' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorNonCharInComment: aCharacter [ - self - errorNonChar: aCharacter - in: 'comment' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorNonCharInEntityValue: aCharacter [ - self - errorNonChar: aCharacter - in: 'entity value' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorNonCharInPCData: aCharacter [ - self - errorNonChar: aCharacter - in: 'PCDATA' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorNonCharInPIValue: aCharacter [ - self - errorNonChar: aCharacter - in: 'processing instruction value' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorNonCharInSystemID: aCharacter [ - self - errorNonChar: aCharacter - in: 'system ID' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorNonElementGeneralEntityOrCharacterReference [ - self parseError: - 'Unexpected "&" starting general entity or character reference after content' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorNonElementPCDataCharacter: aCharacter [ - aCharacter == $& - ifTrue: [self errorNonElementGeneralEntityOrCharacterReference] - ifFalse: [ - self - formatParseError: 'Character data "{1}" outside of element' - with: aCharacter] -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorParameterEntityTerminatingSubset [ - self parseError: - 'Parameter entity replacement cannot terminate internal subset' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorReferenceToUnparsedGeneralEntity: anEntity [ - self - formatParseError: 'Illegal unparsed general entity reference {1}' - with: anEntity asReference -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorReservedPITarget: aTarget [ - self - formatParseError: 'Processing instruction target "{1}" is reserved' - with: aTarget -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorSelfReferentialEntity: anEntity [ - self - formatParseError: 'Illegal self-referential {1} entity' - with: anEntity asReference -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorTerminatingUnstartedElement: anElement [ - self - formatParseError: 'End tag with no corresponding <{1}> start tag' - with: anElement -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorURIFragmentInSystemID [ - self parseError: 'Illegal "#" URI fragment in system ID' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorUnexpectedCDataTerminator [ - self parseError: 'Unexpected CDATA "]]>" terminator in PCDATA' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorUnexpectedEndConditionalSection [ - self parseError: 'Unexpected "]" end of conditional section in external entity' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorUnexpectedEndTag: anElement [ - self - formatParseError: 'Unexpected end tag before any start tag' - with: anElement -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorUnexpectedMarkupDeclarationInContent [ - self parseError: 'Unexpected "> errorUnterminatedElements [ - self - formatParseError: 'Unterminated elements: {1}' - with: elementNester printedElements -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorUnterminatedElementsInElement: anElement [ - self - formatParseError: '<{1}> element ended before enclosed element(s) {2}' - with: anElement - with: (elementNester printedElementsEnclosedBy: anElement) -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorUnterminatedIgnoreSections [ - self parseError: 'Unterminated section(s) in external entity' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorUnterminatedIncludeSections [ - self parseError: 'Unterminated section(s) in external entity' -] - -{ #category : #errors } -XMLWellFormedParserTokenizer >> errorXMLDeclarationNotAtStart [ - self parseError: 'XML declaration can only occur at the start of a document' -] - -{ #category : #'tokenizing - expecting' } -XMLWellFormedParserTokenizer >> expectNext: aCharacter [ - | nextChar | - - "use #= for pre-SpurVM compatibility where wide chars aren't #==" - (nextChar := streamReader next) = aCharacter - ifFalse: [ - self - errorExpectedLiteral: aCharacter - butGot: nextChar]. - ^ nextChar. -] - -{ #category : #'tokenizing - expecting' } -XMLWellFormedParserTokenizer >> expectNextAll: aString [ - "uses to:do: and not implemented in terms of #expectNextAll:startingAt: - for speed" - 1 to: aString size do: [:i | | nextChar | - "use #= for pre-SpurVM compatibility where wide chars aren't #==" - (nextChar := streamReader next) = (aString at: i) - ifFalse: [ - self - errorExpectedLiteral: aString - butGot: nextChar - at: i]]. - ^ aString. -] - -{ #category : #'tokenizing - expecting' } -XMLWellFormedParserTokenizer >> expectNextAll: aString startingAt: aPosition [ - "to:do: for speed" - aPosition to: aString size do: [:i | | nextChar | - "use #= for pre-SpurVM compatibility where wide chars aren't #==" - (nextChar := streamReader next) = (aString at: i) - ifFalse: [ - self - errorExpectedLiteral: aString - butGot: nextChar - at: i]]. - ^ aString. -] - -{ #category : #testing } -XMLWellFormedParserTokenizer >> hasOpenIncludeSections [ - totalOpenIncludeSections == nil - ifTrue: [^ false]. - ^ totalOpenIncludeSections > 0. -] - -{ #category : #testing } -XMLWellFormedParserTokenizer >> hasPushedBackEntities [ - pushedBackEntities == nil - ifTrue: [^ false]. - ^ pushedBackEntities size > 0. -] - -{ #category : #testing } -XMLWellFormedParserTokenizer >> hasPushedBackEntity: aPushedBackEntity [ - self hasPushedBackEntities - ifFalse: [^ false]. - - self pushedBackEntities do: [:each | - each entity = aPushedBackEntity entity - ifTrue: [^ true]]. - - ^ false. -] - -{ #category : #testing } -XMLWellFormedParserTokenizer >> isInExternalSubsetOrExternalEntity [ - "This is used to check for conditional sections and parameter entity - refs within declarations in the internal subset, which is disallowed. - - The way the spec is written and the way Xerces behaves, internal - entities defined in external entities DO NOT count as 'external' - for this purpose, even though they were defined externally to - the document." - - ^ state isExternalSubsetState - or: [self topPushedBackExternalEntity notNil] -] - -{ #category : #accessing } -XMLWellFormedParserTokenizer >> maxEntityReplacementDepth [ - ^ driver maxEntityReplacementDepth -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextAttlistDeclaration [ - | element defaultPragma | - - self - expectNextAll: 'ATTLIST'; - nextSeparatorsInDeclaration. - - element := self nextElementName. - [streamReader peek == $> - or: [ - self nextSeparatorsInDeclaration. - streamReader peek == $>]] - whileFalse: [ - driver - handleAttributeDeclaration: element - name: self nextAttributeName - type: self nextAttributeType - defaultPragma: - (defaultPragma := self nextAttributeDefaultPragma) - defaultValue: - (self nextAttributeDefaultValueForPragma: defaultPragma)]. - - self nextDeclarationTerminator. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextAttributeDefaultPragma [ - self nextSeparatorsInDeclaration. - streamReader peek == $# - ifFalse: [^ '']. - streamReader next. - - streamReader peek == $R - ifTrue: [^ self expectNextAll: 'REQUIRED']. - streamReader peek == $I - ifTrue: [^ self expectNextAll: 'IMPLIED']. - ^ self expectNextAll: 'FIXED'. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextAttributeDefaultValueForPragma: aPragma [ - | previousState attributeValue | - - aPragma isEmpty - ifFalse: [ - (aPragma first == $F) "FIXED" - ifFalse: [^ '']. - self nextSeparatorsInDeclaration]. - previousState := state. - state := state contentState. - attributeValue := self nextAttributeValue. - state := previousState. - ^ attributeValue. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextAttributeEntityType [ - self expectNextAll: 'ENTIT'. - streamReader peek == $Y - ifFalse: [ - ^ self - expectNextAll: 'ENTITIES' - startingAt: 6 "'ENTIT' size + 1"]. - streamReader next. - ^ 'ENTITY'. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextAttributeEnumerationType [ - characterStream - reset; - nextPut: (self expectNext: $(). - - "must have at least one value in the enumeration" - self - skipSeparatorsInDeclaration; - nextNmtokenOnCharacterStream. - [self skipSeparatorsInDeclaration. - streamReader peek == $)] - whileFalse: [ - characterStream nextPut: (self expectNext: $|). - self - skipSeparatorsInDeclaration; - nextNmtokenOnCharacterStream]. - - ^ characterStream - nextPut: streamReader next; - contents. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextAttributeIDOrIDRefType [ - self expectNextAll: 'ID'. - streamReader peek == $R - ifFalse: [^ 'ID']. - self - expectNextAll: 'IDREF' - startingAt: 3. - streamReader peek == $S - ifFalse: [^ 'IDREF']. - streamReader next. - ^ 'IDREFS'. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextAttributeName [ - | nextChar | - - "nil understands #isXMLNameStartChar so it does not need to be tested for" - (nextChar := streamReader next) isXMLNameStartChar - ifFalse: [self errorExpectedAttributeName]. - nameStream - reset; - nextPut: nextChar. - - "nil understands #isXMLNameChar so it does not need to be tested for" - [streamReader peek isXMLNameChar] - whileTrue: [nameStream nextPut: streamReader next]. - ^ nameStream contents. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextAttributeNotationEnumerationOrNmtokenType [ - "skip the N" - streamReader next. - streamReader peek == $O - ifTrue: [^ self nextAttributeNotationEnumerationType]. - self - expectNextAll: 'NMTOKEN' - startingAt: 2. - streamReader peek == $S - ifFalse: [^ 'NMTOKEN']. - streamReader next. - ^ 'NMTOKENS'. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextAttributeNotationEnumerationType [ - characterStream - reset; - nextPutAll: - (self - expectNextAll: 'NOTATION' - startingAt: 2). "the 'N' was already read" - self - nextSeparatorsInDeclaration; - expectNext: $(. - characterStream nextPutAll: ' ('. - - "must have at least one declaration name in the enumeration" - self - skipSeparatorsInDeclaration; - nextNotationNameOnCharacterStream. - [self skipSeparatorsInDeclaration. - streamReader peek == $)] - whileFalse: [ - characterStream nextPut: (self expectNext: $|). - self - skipSeparatorsInDeclaration; - nextNotationNameOnCharacterStream]. - - ^ characterStream - nextPut: streamReader next; - contents. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextAttributeType [ - | nextChar | - - self nextSeparatorsInDeclaration. - (nextChar := streamReader peek) == $C - ifTrue: [^ self expectNextAll: 'CDATA']. - nextChar == $I - ifTrue: [^ self nextAttributeIDOrIDRefType]. - nextChar == $E - ifTrue: [^ self nextAttributeEntityType]. - nextChar == $N - ifTrue: [^ self nextAttributeNotationEnumerationOrNmtokenType]. - ^ self nextAttributeEnumerationType. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextAttributeValue [ - | quote nextChar | - - ((quote := streamReader next) == $" - or: [quote == $']) - ifFalse: [self errorExpectedAttributeValueStartButGot: quote]. - - isInLiteralValue := true. - characterStream reset. - [((nextChar := streamReader next) == quote - and: [isIgnoringLiteralValueTerminator not]) - or: [nextChar == $< - or: [nextChar == nil]]] - whileFalse: [ - nextChar == $& - ifTrue: [ - "char refs should be ignored by whitespace normalization" - self nextGeneralEntityOrCharacterReferenceOnCharacterStream] - ifFalse: [ - nextChar isXMLSeparator - ifTrue: [nextChar := NormalizedSpace] - ifFalse: [ - nextChar isXMLChar - ifFalse: [self errorNonCharInAttributeValue: nextChar]]. - characterStream nextPut: nextChar]]. - isInLiteralValue := false. - - nextChar == quote - ifFalse: [ - self - errorExpectedAttributeValueEnd: quote - butGot: nextChar]. - - ^ characterStream contents. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextCDataSection [ - | closingBracketsRead nextChar | - - self expectNextAll: '[CDATA['. - characterStream reset. - closingBracketsRead := 0. - [(nextChar := streamReader next) == nil - or: [closingBracketsRead == 2 - and: [nextChar == $>]]] - whileFalse: [ - nextChar == $] - ifTrue: [ - closingBracketsRead == 2 - ifTrue: [characterStream nextPut: $]] - ifFalse: [closingBracketsRead := closingBracketsRead + 1]] - ifFalse: [ - closingBracketsRead == 0 - ifFalse: [ - characterStream nextPut: $]. - closingBracketsRead == 2 - ifTrue: [characterStream nextPut: $]]. - closingBracketsRead := 0]. - nextChar isXMLChar - ifFalse: [self errorNonCharInCDataSection: nextChar]. - characterStream nextPut: nextChar]]. - nextChar - ifNil: [self errorExpectedCDataSectionTerminator]. - driver handleCData: characterStream contents. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextCharacterReferenceOnCharacterStream [ - "returns the character written to 'characterStream' or $& if - it wasn't replaced" - | codePoint | - - "skip #" - streamReader next. - (state isContentState - and: [driver replacesContentEntityReferences not]) - ifTrue: [ - nameStream reset. - (codePoint := self nextCharacterValueLiteralPrintedOn: nameStream) - ifNil: [self errorExpectedIntegerCharacterReference]. - (self characterFromCodePoint: codePoint) - ifNil: [self errorInvalidCharacterReferenceCodePoint: codePoint]. - self nextCharacterReferenceTerminator. - characterStream - nextPutAll: '&#'; - nextPutAll: nameStream contents; - nextPut: $;. - ^ $&] - ifFalse: [| character | - (codePoint := self nextCharacterValueLiteral) - ifNil: [self errorExpectedIntegerCharacterReference]. - (character := self characterFromCodePoint: codePoint) - ifNil: [self errorInvalidCharacterReferenceCodePoint: codePoint]. - self nextCharacterReferenceTerminator. - characterStream nextPut: character. - ^ character]. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextCharacterReferenceTerminator [ - | nextChar | - - (nextChar := streamReader next) == $; - ifFalse: [self errorExpectedCharacterReferenceTerminatorButGot: nextChar] -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextComment [ - | nextChar | - - "Skip first -" - streamReader next. - (nextChar := streamReader next) == $- - ifFalse: [self errorExpectedCommentStartButGot: nextChar]. - - "xml comments can't have '--' in them; any '--' must be followed - by the terminating '>'" - characterStream reset. - [(nextChar := streamReader next) == nil - or: [nextChar == $- - and: [streamReader peek == $-]]] - whileFalse: [ - nextChar isXMLChar - ifFalse: [self errorNonCharInComment: nextChar]. - characterStream nextPut: nextChar]. - nextChar - ifNil: [self errorExpectedCommentTerminator] - ifNotNil: [ - streamReader next. "skip second $-" - (nextChar := streamReader next) == $> - ifFalse: [self errorExpectedCommentTerminatorButGot: nextChar]]. - - driver handleComment: characterStream contents. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextConditionalSectionFromEntity: aPushedBackParameterEntity [ - "skip [" - streamReader next. - self - skipSeparatorsInDeclaration; - expectNext: $I. - streamReader peek == $N - ifTrue: [self nextStartIncludeSectionFromEntity: aPushedBackParameterEntity] - ifFalse: [self nextIgnoreSectionFromEntity: aPushedBackParameterEntity]. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextContentMarkupToken [ - self topPushedBackEntity - ifNil: [ - streamReader peek == $? - ifTrue: [^ self nextPI]. - streamReader peek == $! - ifTrue: [ - streamReader next. - streamReader peek == $- - ifTrue: [^ self nextComment]. - elementNester isInElement - ifTrue: [^ self nextCDataSection]. - self errorUnexpectedMarkupDeclarationInContent]. - self nextTag] - ifNotNil: [:pushedBackGeneralEntity | - self nextContentMarkupTokenFromEntity: pushedBackGeneralEntity] -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextContentMarkupTokenFromEntity: aPushedBackGeneralEntity [ - streamReader peek == $? - ifTrue: [self nextPI] - ifFalse: [ - streamReader peek == $! - ifTrue: [ - streamReader next. - streamReader peek == $- - ifTrue: [self nextComment] - ifFalse: [ - elementNester isInElement - ifTrue: [self nextCDataSection] - ifFalse: [ - self errorUnexpectedMarkupDeclarationInContent]]] - ifFalse: [| oldTotalOpenElements newTotalOpenElements | - oldTotalOpenElements := elementNester totalOpenElements. - self nextTag. - newTotalOpenElements := elementNester totalOpenElements. - newTotalOpenElements < oldTotalOpenElements - ifTrue: [ - aPushedBackGeneralEntity endElement. - aPushedBackGeneralEntity totalOpenElements >= 0 - ifFalse: [self errorImproperGeneralEntityNesting]] - ifFalse: [ - newTotalOpenElements > oldTotalOpenElements - ifTrue: [aPushedBackGeneralEntity startElement]]]]. - - self topPushedBackEntity == aPushedBackGeneralEntity - ifFalse: [self errorImproperGeneralEntityNesting]. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextContentModel [ - | pushedBackParameterEntity | - - self nextSeparatorsInDeclaration. - streamReader peek == $A - ifTrue: [^ self expectNextAll: 'ANY']. - streamReader peek == $E - ifTrue: [^ self expectNextAll: 'EMPTY']. - - characterStream - reset; - nextPut: (self expectNext: $(). - pushedBackParameterEntity := self topPushedBackEntity. - self skipSeparatorsInDeclaration. - streamReader peek == $# - ifTrue: [ - self nextMixedContentListOnCharacterStreamFromEntity: - pushedBackParameterEntity] - ifFalse: [ - self nextContentModelChoiceOrSequenceOnCharacterStreamFromEntity: - pushedBackParameterEntity]. - - ^ characterStream contents. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextContentModelChoiceOrSequenceOnCharacterStreamFromEntity: aPushedBackParameterEntity [ - self - nextContentModelParticleOnCharacterStream; - skipSeparatorsInDeclaration. - streamReader peek == $| - ifTrue: [ - characterStream nextPut: streamReader next. - self nextContentModelParticleOnCharacterStream. - [self skipSeparatorsInDeclaration. - streamReader peek == $)] - whileFalse: [ - characterStream nextPut: (self expectNext: $|). - self nextContentModelParticleOnCharacterStream]. - characterStream nextPut: streamReader next] - ifFalse: [ - streamReader peek == $, - ifTrue: [ - characterStream nextPut: streamReader next. - self nextContentModelParticleOnCharacterStream. - [self skipSeparatorsInDeclaration. - streamReader peek == $)] - whileFalse: [ - characterStream nextPut: (self expectNext: $,). - self nextContentModelParticleOnCharacterStream]. - characterStream nextPut: streamReader next] - ifFalse: [characterStream nextPut: (self expectNext: $))]]. - - self topPushedBackEntity == aPushedBackParameterEntity - ifFalse: [driver handleImproperParameterEntityNesting]. - self nextContentModelUnaryOperatorOnCharacterStream. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextContentModelParticleOnCharacterStream [ - self skipSeparatorsInDeclaration. - streamReader peek == $( - ifTrue: [ - characterStream nextPut: streamReader next. - self nextContentModelChoiceOrSequenceOnCharacterStreamFromEntity: - self topPushedBackEntity] - ifFalse: [ - self - nextElementNameOnCharacterStream; - nextContentModelUnaryOperatorOnCharacterStream] -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextContentModelUnaryOperatorOnCharacterStream [ - | nextChar | - - ((nextChar := streamReader peek) == $? - or: [nextChar == $* - or: [nextChar == $+]]) - ifTrue: [characterStream nextPut: streamReader next] -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextDeclarationTerminator [ - | nextChar | - - (nextChar := streamReader next) == $> - ifFalse: [self errorExpectedDeclarationTerminatorButGot: nextChar] -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextDoctypeDeclarationOrComment [ - "skip !" - streamReader next. - streamReader peek == $- - ifTrue: [^ self nextComment]. - state isPostDoctypeDeclarationState - ifTrue: [self errorMultipleDoctypeDeclarations]. - self nextDoctypeDeclaration. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextDoctypeDeclarationTerminator [ - | nextChar | - - (nextChar := streamReader next) == $> - ifFalse: [self errorExpectedDoctypeDeclarationTerminatorButGot: nextChar] -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextElementDeclaration [ - self - expectNextAll: 'ELEMENT' - startingAt: 2. "the 'E' was already read" - - self nextSeparatorsInDeclaration. - driver - handleElementDeclaration: self nextElementName - contentModel: self nextContentModel. - self - skipSeparatorsInDeclaration; - nextDeclarationTerminator. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextElementName [ - | nextChar | - - "nil understands #isXMLNameStartChar so it does not need to be tested for" - (nextChar := streamReader next) isXMLNameStartChar - ifFalse: [self errorExpectedElementName]. - nameStream - reset; - nextPut: nextChar. - - "nil understands #isXMLNameChar so it does not need to be tested for" - [streamReader peek isXMLNameChar] - whileTrue: [nameStream nextPut: streamReader next]. - ^ nameStream contents. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextElementNameOnCharacterStream [ - | nextChar | - - "nil understands #isXMLNameStartChar so it does not need to be tested for" - (nextChar := streamReader next) isXMLNameStartChar - ifFalse: [self errorExpectedElementName]. - characterStream nextPut: nextChar. - - "nil understands #isXMLNameChar so it does not need to be tested for" - [streamReader peek isXMLNameChar] - whileTrue: [characterStream nextPut: streamReader next]. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextEndDocument [ - state canTerminateInput - ifFalse: [self errorInputTerminatedPrematurely]. - state isContentState - ifTrue: [ - elementNester hasOpenElements - ifTrue: [self errorUnterminatedElements]] - ifFalse: [ - self hasOpenIncludeSections - ifTrue: [self errorUnterminatedIncludeSections]]. - super nextEndDocument. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextEndIncludeSection [ - | secondChar thirdChar | - - "skip ]" - streamReader next. - secondChar := streamReader next. - thirdChar := streamReader next. - (secondChar == $] - and: [thirdChar == $>]) - ifFalse: [ - self - errorExpectedIncludeSectionTerminatorButGot: secondChar - followedBy: thirdChar]. - - totalOpenIncludeSections := self totalOpenIncludeSections - 1. - self topPushedBackEntity - ifNotNil: [:pushedBackParameterEntity | - pushedBackParameterEntity endIncludeSection. - pushedBackParameterEntity totalOpenIncludeSections >= 0 - ifFalse: [driver handleImproperParameterEntityNesting]]. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextEndInternalSubset [ - self hasOpenIncludeSections - ifTrue: [^ self nextEndIncludeSection]. - "skip ]" - streamReader next. - self hasPushedBackEntities - ifTrue: [self errorParameterEntityTerminatingSubset]. - streamReader skipSeparators. - self nextEndDoctypeDeclaration. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextEndTag [ - | tagName nextChar | - "Skip /" - streamReader next. - (tagName := elementNester currentElement) - ifNil: [self errorUnexpectedEndTag: self nextElementName]. - 1 to: tagName size do: [:i | - "can't use #== here because wide chars aren't an immediate type - in pre-Spur VMs" - (nextChar := streamReader next) = (tagName at: i) - ifFalse: [ - self - errorExpectedEndTag: tagName - butGot: nextChar - at: i]]. - elementNester endCurrentElement. - driver handleEndTag: tagName. - streamReader skipSeparators. - (nextChar := streamReader next) == $> - ifFalse: [self errorExpectedTagTerminatorButGot: nextChar]. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextEntityDeclaration [ - | isParameterEntity name | - - self - expectNextAll: 'ENTITY' - startingAt: 2. "the 'E' was already read" - - self isInExternalSubsetOrExternalEntity - ifTrue: [ - "this is to distinguish a parameter reference from declaration" - [isParameterEntity isNil] - whileTrue: [ - streamReader skipSeparators. - streamReader peek == $% - ifTrue: [ - streamReader next. - "nil understands isXMLSeparator so no nil test is needed" - streamReader peek isXMLSeparator - ifTrue: [ - isParameterEntity := true. - self nextSeparatorsInDeclaration] - ifFalse: [self nextParameterEntityReference]] - ifFalse: [isParameterEntity := false]]] - ifFalse: [ - self nextSeparators. - (isParameterEntity := (streamReader peek == $%)) - ifTrue: [ - streamReader next. - self nextSeparators]]. - - name := self nextEntityName. - self nextSeparatorsInDeclaration. - streamReader atQuote - ifTrue: [ - self - nextInternalEntityDeclaration: name - isParameterEntity: isParameterEntity] - ifFalse: [ - self - nextExternalEntityDeclaration: name - isParameterEntity: isParameterEntity]. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextEntityName [ - | nextChar | - - "nil understands #isXMLNameStartChar so it does not need to be tested for" - (nextChar := streamReader next) isXMLNameStartChar - ifFalse: [self errorExpectedEntityName]. - nameStream - reset; - nextPut: nextChar. - - "nil understands #isXMLNameChar so it does not need to be tested for" - [streamReader peek isXMLNameChar] - whileTrue: [nameStream nextPut: streamReader next]. - ^ nameStream contents. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextEntityNameOnCharacterStream [ - | nextChar | - - "nil understands #isXMLNameStartChar so it does not need to be tested for" - (nextChar := streamReader next) isXMLNameStartChar - ifFalse: [self errorExpectedEntityName]. - characterStream nextPut: nextChar. - - "nil understands #isXMLNameChar so it does not need to be tested for" - [streamReader peek isXMLNameChar] - whileTrue: [characterStream nextPut: streamReader next]. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextEntityReferenceTerminator [ - | nextChar | - - (nextChar := streamReader next) == $; - ifFalse: [self errorExpectedEntityReferenceTerminatorButGot: nextChar] -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextEntityValue [ - | quote nextChar | - - quote := streamReader next. - - isInLiteralValue := true. - characterStream reset. - [((nextChar := streamReader next) == quote - and: [isIgnoringLiteralValueTerminator not]) - or: [nextChar == nil]] - whileFalse: [ - nextChar == $& - ifTrue: [ - streamReader peek == $# - ifTrue: [ - "character refs are replaced in entity values" - self nextCharacterReferenceOnCharacterStream] - ifFalse: [ - "general entity refs aren't replaced but must be complete" - characterStream nextPut: $&. - self - nextEntityNameOnCharacterStream; - nextEntityReferenceTerminator. - characterStream nextPut: $;]] - ifFalse: [ - nextChar == $% - ifTrue: [ - self isInExternalSubsetOrExternalEntity - ifFalse: [ - self - errorInternalDeclarationParameterEntityReference]. - self nextParameterEntityReferenceOnCharacterStream] - ifFalse: [ - nextChar isXMLChar - ifFalse: [self errorNonCharInEntityValue: nextChar]. - characterStream nextPut: nextChar]]]. - isInLiteralValue := false. - - nextChar == quote - ifFalse: [ - self - errorExpectedEntityValueEnd: quote - butGot: nextChar]. - - ^ characterStream contents. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextExternalEntityDeclaration: aName isParameterEntity: aBoolean [ - | publicID systemID notation | - - streamReader peek == $P - ifTrue: [ - publicID := self nextPublicIDInDeclaration. - self nextSeparatorsInDeclaration. - systemID := self nextSystemIDLiteralWithoutURIFragment] - ifFalse: [ - publicID := ''. - systemID := self nextSystemIDInDeclarationWithoutURIFragment]. - aBoolean - ifTrue: [ - self - skipSeparatorsInDeclaration; - nextDeclarationTerminator. - driver - handleParameterEntityDeclaration: aName - publicID: publicID - systemID: systemID] - ifFalse: [ - (streamReader peek == $> - or: [ - self nextSeparatorsInDeclaration. - streamReader peek == $>]) - ifTrue: [ - streamReader next. - notation := ''] - ifFalse: [ - self - expectNextAll: 'NDATA'; - nextSeparatorsInDeclaration. - notation := self nextNotationName. - self - skipSeparatorsInDeclaration; - nextDeclarationTerminator]. - driver - handleGeneralEntityDeclaration: aName - publicID: publicID - systemID: systemID - ndata: notation]. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextExternalSubsetToken [ - streamReader skipSeparators. - streamReader atEnd - ifTrue: [^ self]. - streamReader peek == $% - ifTrue: [ - streamReader next. - ^ self nextParameterEntityReference]. - streamReader peek == $] - ifTrue: [ - self hasOpenIncludeSections - ifFalse: [self errorUnexpectedEndConditionalSection]. - ^ self nextEndIncludeSection]. - self nextSubsetMarkupToken. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextGeneralEntityOrCharacterReferenceOnCharacterStream [ - "returns the character written to 'characterStream' if any, nil otherwise" - | pushedBackGeneralEntity result | - - pushedBackGeneralEntity := self topPushedBackEntity. - result := - streamReader peek == $# - ifTrue: [self nextCharacterReferenceOnCharacterStream] - ifFalse: [self nextGeneralEntityReferenceOnCharacterStream]. - pushedBackGeneralEntity - ifNotNil: [ - (self pushedBackEntities includes: pushedBackGeneralEntity) - ifFalse: [self errorImproperGeneralEntityNesting]]. - - ^ result. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextGeneralEntityReferenceOnCharacterStream [ - "returns the (first) character written to 'characterStream' if any, - nil otherwise" - | name | - - name := self nextEntityName. - self nextEntityReferenceTerminator. - PredefinedEntities - at: name - ifPresent: [:character | - driver replacesContentEntityReferences - ifFalse: [ - ^ self nextUnreplacedGeneralEntityOnCharacterStreamNamed: name]. - characterStream nextPut: character. - ^ character]. - - (driver handleGeneralEntityReference: name) - ifNil: [ - (driver replacesContentEntityReferences not - or: [driver preservesUndeclaredEntityReferences]) - ifTrue: [ - ^ self nextUnreplacedGeneralEntityOnCharacterStreamNamed: name]. - driver handleUnreplacedGeneralEntityReference: name] - ifNotNil: [:entity | - entity isUnparsed - ifTrue: [self errorReferenceToUnparsedGeneralEntity: entity]. - driver replacesContentEntityReferences - ifFalse: [ - ^ self nextUnreplacedGeneralEntityOnCharacterStreamNamed: name]. - self constructReplacementForGeneralEntity: entity]. - ^ nil. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextIgnoreSectionFromEntity: aPushedBackParameterEntity [ - | openSections firstChar secondChar nextChar | - - self - expectNextAll: 'IGNORE' - startingAt: 2. "the 'I' was already read" - streamReader skipSeparators. - self expectNext: $[. - - "the 'IGNORE' can be in the replacement of an entity, like - in '', but after it the entity that started - the declaration must be current" - self topPushedBackEntity == aPushedBackParameterEntity - ifFalse: [driver handleImproperParameterEntityNesting]. - - "From the spec: - The contents of an ignored conditional section MUST be parsed by - ignoring all characters after the '[' following the keyword, except - conditional section starts '', until the matching - conditional section end is found. Parameter entity references MUST - NOT be recognized in this process." - openSections := 1. - [openSections == 0 - or: [(nextChar := streamReader next) == nil]] - whileFalse: [ - nextChar == $> - ifTrue: [ - (secondChar == $] - and: [firstChar == $]]) - ifTrue: [openSections := openSections - 1]] - ifFalse: [ - nextChar == $[ - ifTrue: [ - (secondChar == $! - and: [firstChar == $<]) - ifTrue: [openSections := openSections + 1]]]. - firstChar := secondChar. - secondChar := nextChar]. - - openSections == 0 - ifFalse: [self errorUnterminatedIgnoreSections]. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextInternalEntityDeclaration: aName isParameterEntity: aBoolean [ - | value | - - value := self nextEntityValue. - self - skipSeparatorsInDeclaration; - nextDeclarationTerminator. - - aBoolean - ifTrue: [ - driver - handleParameterEntityDeclaration: aName - replacement: value] - ifFalse: [ - driver - handleGeneralEntityDeclaration: aName - replacement: value]. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextMixedContentListOnCharacterStreamFromEntity: aPushedBackParameterEntity [ - | hasElements | - - hasElements := false. - characterStream nextPutAll: (self expectNextAll: '#PCDATA'). - - [self skipSeparatorsInDeclaration. - streamReader peek == $)] - whileFalse: [ - characterStream nextPut: (self expectNext: $|). - hasElements := true. - self - skipSeparatorsInDeclaration; - nextElementNameOnCharacterStream]. - characterStream nextPut: streamReader next. - self topPushedBackEntity == aPushedBackParameterEntity - ifFalse: [driver handleImproperParameterEntityNesting]. - - streamReader peek == $* - ifTrue: [characterStream nextPut: streamReader next] - ifFalse: [ - hasElements - ifTrue: [self errorExpectedLiteral: $*]]. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextNmtokenOnCharacterStream [ - "matches the Nmtoken production" - | nextChar | - - "nil understands #isXMLNameChar so it does not need to be tested for" - (nextChar := streamReader next) isXMLNameChar - ifFalse: [self errorExpectedNmtoken]. - characterStream nextPut: nextChar. - - "nil understands #isXMLNameChar so it does not need to be tested for" - [streamReader peek isXMLNameChar] - whileTrue: [characterStream nextPut: streamReader next]. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextNonElementWhitespace [ - | nextChar | - - "nil understands isXMLSeparator so it is not tested for first" - [(nextChar := streamReader peek) isXMLSeparator] - whileTrue: [streamReader next]. - (nextChar == $< - or: [nextChar == nil]) - ifFalse: [self errorNonElementPCDataCharacter: streamReader next]. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextNonPIPrologOrContentMarkupToken [ - streamReader peek == $! - ifTrue: [^ self nextDoctypeDeclarationOrComment]. - self - nextStartContent; - nextTag. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextNotationDeclaration [ - | name publicID systemID | - - self - expectNextAll: 'NOTATION'; - nextSeparatorsInDeclaration. - - name := self nextNotationName. - self nextSeparatorsInDeclaration. - streamReader peek == $P - ifTrue: [ - publicID := self nextPublicIDInDeclaration. - (streamReader peek == $> - or: [ - self nextSeparatorsInDeclaration. - streamReader peek == $>]) - ifFalse: [systemID := self nextSystemIDLiteral]] - ifFalse: [systemID := self nextSystemIDInDeclaration]. - self - skipSeparatorsInDeclaration; - nextDeclarationTerminator. - - driver - handleNotationDeclaration: name - publicID: (publicID ifNil: ['']) - systemID: (systemID ifNil: ['']). -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextNotationName [ - | nextChar | - - "nil understands #isXMLNameStartChar so it does not need to be tested for" - (nextChar := streamReader next) isXMLNameStartChar - ifFalse: [self errorExpectedNotationName]. - nameStream - reset; - nextPut: nextChar. - - "nil understands #isXMLNameChar so it does not need to be tested for" - [streamReader peek isXMLNameChar] - whileTrue: [nameStream nextPut: streamReader next]. - ^ nameStream contents. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextNotationNameOnCharacterStream [ - | nextChar | - - "nil understands #isXMLNameStartChar so it does not need to be tested for" - (nextChar := streamReader next) isXMLNameStartChar - ifFalse: [self errorExpectedNotationName]. - characterStream nextPut: nextChar. - - "nil understands #isXMLNameChar so it does not need to be tested for" - [streamReader peek isXMLNameChar] - whileTrue: [characterStream nextPut: streamReader next]. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextPCDataToken [ - | isWhitespace nextChar closingBracketsRead | - - isWhitespace := true. - characterStream reset. - closingBracketsRead := 0. - [(nextChar := streamReader peek) == $< - or: [nextChar == nil]] - whileFalse: [ - streamReader next == $& - ifTrue: [ - self nextGeneralEntityOrCharacterReferenceOnCharacterStream - ifNotNil: [:writtenChar | - isWhitespace - ifTrue: [isWhitespace := writtenChar isXMLSeparator]]] - ifFalse: [ - (isWhitespace - and: [isWhitespace := nextChar isXMLSeparator]) - ifFalse: [ - nextChar == $] - ifTrue: [ - isWhitespace := false. - closingBracketsRead := closingBracketsRead + 1] - ifFalse: [ - closingBracketsRead == 0 - ifFalse: [ - (closingBracketsRead >= 2 - and: [nextChar == $>]) - ifTrue: [ - self errorUnexpectedCDataTerminator]. - closingBracketsRead := 0]. - nextChar isXMLChar - ifFalse: [self errorNonCharInPCData: nextChar]]]. - characterStream nextPut: nextChar]]. - isWhitespace - ifTrue: [ - characterStream position == 0 - ifFalse: [driver handleWhitespace: characterStream contents]] - ifFalse: [driver handlePCData: characterStream contents]. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextPIData [ - | nextChar | - - characterStream reset. - [(nextChar := streamReader next) == nil - or: [nextChar == $? - and: [streamReader peek == $>]]] - whileFalse: [ - nextChar isXMLChar - ifFalse: [self errorNonCharInPIValue: nextChar]. - characterStream nextPut: nextChar]. - self nextPITerminator. - ^ characterStream contents. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextPITarget [ - "PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))" - | nextChar isReservedTarget isLowercaseReservedTarget length | - - nameStream reset. - (nextChar := streamReader next) == $x - ifTrue: [ - isReservedTarget := true. - isLowercaseReservedTarget := true] - ifFalse:[ - nextChar == $X - ifTrue: [isReservedTarget := true] - ifFalse: [ - "nil understands #isXMLNameStartChar so it does - not need to be tested for" - nextChar isXMLNameStartChar - ifFalse: [self errorExpectedPITarget]. - isReservedTarget := false]. - isLowercaseReservedTarget := false]. - nameStream nextPut: nextChar. - length := 1. - - "nil understands #isXMLNameChar so it does not need to be tested for" - [streamReader peek isXMLNameChar] - whileTrue: [ - nextChar := streamReader next. - length := length + 1. - isReservedTarget - ifTrue: [ - (length <= 3 - and: [ - nextChar == ('xml' at: length) - or: [ - isLowercaseReservedTarget := false. - nextChar == ('XML' at: length)]]) - ifFalse: [ - isReservedTarget := false. - isLowercaseReservedTarget := false]]. - nameStream nextPut: nextChar]. - - (isReservedTarget - and: [length = 3]) - ifTrue: [ - isLowercaseReservedTarget - ifTrue: [ - state isXMLDeclarationState - ifFalse: [self errorXMLDeclarationNotAtStart]. - "return nil to indicate it's an XML declaration, not a PI" - ^ nil]. - "a reserved target other than lowercase 'xml' for XML declarations - is never allowed" - self errorReservedPITarget: nameStream contents]. - ^ nameStream contents. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextPITerminator [ - | nextChar | - - (nextChar := streamReader next) == $> - ifFalse: [self errorExpectedPITerminatorButGot: nextChar] -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextParameterEntityReference [ - | pushedBackParameterEntity name | - - pushedBackParameterEntity := self topPushedBackEntity. - name := self nextEntityName. - self nextEntityReferenceTerminator. - self topPushedBackEntity == pushedBackParameterEntity - ifFalse: [driver handleImproperParameterEntityNesting]. - - (driver handleParameterEntityReference: name) - ifNotNil: [:entity | self constructReplacementForParameterEntity: entity]. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextParameterEntityReferenceInDeclaration [ - self isInExternalSubsetOrExternalEntity - ifFalse: [self errorInternalDeclarationParameterEntityReference]. - self nextParameterEntityReference. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextParameterEntityReferenceOnCharacterStream [ - | pushedBackParameterEntity name | - - pushedBackParameterEntity := self topPushedBackEntity. - name := self nextEntityName. - self nextEntityReferenceTerminator. - self topPushedBackEntity == pushedBackParameterEntity - ifFalse: [driver handleImproperParameterEntityNesting]. - - (driver handleParameterEntityReference: name) - ifNil: [ - driver preservesUndeclaredEntityReferences - ifTrue: [ - characterStream - nextPut: $%; - nextPutAll: name; - nextPut: $;. - ^ $%]] - ifNotNil: [:entity | - self constructReplacementForParameterEntity: entity]. - ^ nil. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextPrologToken [ - streamReader skipSeparators. - self nextStartMarkupToken. - streamReader peek == $? - ifTrue: [^ self nextPI]. - self nextNonPIPrologOrContentMarkupToken. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextPublicIDInDeclaration [ - ^ self - expectNextAll: 'PUBLIC'; - nextSeparatorsInDeclaration; - nextPublicIDLiteral -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextPublicIDLiteral [ - "this returns the pubid with leading and trailing whitespace removed - and all other whitespace sequences converted to single spaces" - | quote isInWhitespace nextChar | - - ((quote := streamReader next) == $" - or: [quote == $']) - ifFalse: [self errorExpectedPublicIDLiteralStartButGot: quote]. - - characterStream reset. - isInWhitespace := false. - "it's not enough to test for nil and PublicIDChars inclusion because - (PublicIDChars includes: $') = true (double quoted pubids can contain - single quotes), so the terminating quote must be tested for first to - handle single quoted pubids correctly" - [(nextChar := streamReader next) == nil - or: [nextChar == quote - or: [(PublicIDChars includes: nextChar) not]]] - whileFalse: [ - nextChar isXMLSeparator - ifTrue: [ - isInWhitespace - ifFalse: [isInWhitespace := true]] - ifFalse: [ - isInWhitespace - ifTrue: [ - characterStream position > 0 - ifTrue: [characterStream nextPut: NormalizedSpace]. - isInWhitespace := false]. - characterStream nextPut: nextChar]]. - - nextChar == quote - ifFalse: [ - self - errorExpectedPublicIDLiteralEnd: quote - butGot: nextChar]. - - ^ characterStream contents. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextSeparators [ - "nil understands isXMLSeparator so no nil test is needed" - streamReader next isXMLSeparator - ifTrue: [streamReader skipSeparators] - ifFalse: [self errorExpectedSeparators] -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextSeparatorsInDeclaration [ - "this can be used to replace entity references within declarations" - - [streamReader peek == $%] - whileTrue: [ - streamReader next. - self nextParameterEntityReferenceInDeclaration]. - self nextSeparators. - [streamReader peek == $%] - whileTrue: [ - streamReader next. - self nextParameterEntityReferenceInDeclaration. - streamReader skipSeparators]. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextStartExternalEntity [ - driver decodesCharacters - ifTrue: [streamReader detectEncoding]. - self nextXMLTextDeclaration. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextStartExternalSubset [ - self nextXMLTextDeclaration. - state := state externalSubsetState. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextStartIncludeSectionFromEntity: aPushedBackParameterEntity [ - self - expectNextAll: 'INCLUDE' - startingAt: 2. "the 'I' was already read" - streamReader skipSeparators. - self expectNext: $[. - - "the 'INCLUDE' can be in the replacement of an entity, like - in '', but after it the entity that started - the declaration must be current" - self topPushedBackEntity == aPushedBackParameterEntity - ifFalse: [driver handleImproperParameterEntityNesting]. - - totalOpenIncludeSections := self totalOpenIncludeSections + 1. - aPushedBackParameterEntity - ifNotNil: [aPushedBackParameterEntity startIncludeSection]. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextStartMarkupToken [ - | nextChar | - - (nextChar := streamReader next) == $< - ifFalse: [self errorExpectedStartMarkupTokenButGot: nextChar] -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextSubsetDeclaration [ - streamReader peek == $E - ifTrue: [ - streamReader next. - streamReader peek == $N - ifTrue: [^ self nextEntityDeclaration] - ifFalse: [^ self nextElementDeclaration]]. - streamReader peek == $A - ifTrue: [^ self nextAttlistDeclaration]. - streamReader peek == $N - ifTrue: [^ self nextNotationDeclaration]. - - self errorExpectedSubsetDeclaration. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextSubsetMarkupToken [ - | pushedBackParameterEntity | - - self nextStartMarkupToken. - pushedBackParameterEntity := self topPushedBackEntity. - - streamReader peek == $? - ifTrue: [self nextPI] - ifFalse: [ - self expectNext: $!. - streamReader peek == $- - ifTrue: [self nextComment] - ifFalse: [ - streamReader peek == $[ - ifTrue: [ - self isInExternalSubsetOrExternalEntity - ifFalse: [self errorInternalSubsetConditionalSection]. - self nextConditionalSectionFromEntity: - pushedBackParameterEntity] - ifFalse: [self nextSubsetDeclaration]]]. - - self topPushedBackEntity == pushedBackParameterEntity - ifFalse: [driver handleImproperParameterEntityNesting]. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextSystemIDInDeclaration [ - ^ self - expectNextAll: 'SYSTEM'; - nextSeparatorsInDeclaration; - nextSystemIDLiteral -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextSystemIDInDeclarationWithoutURIFragment [ - ^ self - expectNextAll: 'SYSTEM'; - nextSeparatorsInDeclaration; - nextSystemIDLiteralWithoutURIFragment -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextSystemIDLiteral [ - ^ self nextSystemIDLiteralWithoutURIFragment: false -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextSystemIDLiteralWithoutURIFragment [ - ^ self nextSystemIDLiteralWithoutURIFragment: true -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> nextSystemIDLiteralWithoutURIFragment: aBoolean [ - "Returns the system ID literal. - If aBoolean is true, it disallows '#' URI fragments." - - | quote nextChar | - - ((quote := streamReader next) == $" - or: [quote == $']) - ifFalse: [self errorExpectedSystemIDLiteralStartButGot: quote]. - - characterStream reset. - [(nextChar := streamReader next) == nil - or: [nextChar == quote]] - whileFalse: [ - nextChar isXMLChar - ifFalse: [self errorNonCharInSystemID: nextChar]. - aBoolean - ifTrue: [ - nextChar == $# - ifTrue: [self errorURIFragmentInSystemID]]. - characterStream nextPut: nextChar]. - - nextChar == quote - ifFalse: [ - self - errorExpectedSystemIDLiteralEnd: quote - butGot: nextChar]. - - ^ characterStream contents. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextTag [ - "performance critical method" - | tagName attributes nextChar | - - (streamReader peek == $/) - ifTrue: [^ self nextEndTag]. - tagName := self nextElementName. - - "nil understands isXMLSeparator so is not tested for" - [(nextChar := streamReader peek) isXMLSeparator - and: [ - streamReader - next; - skipSeparators. - ((nextChar := streamReader peek) == $> - or: [nextChar == $/]) not]] - whileTrue: [| attributeName | - attributeName := self nextAttributeName. - streamReader skipSeparators. - (nextChar := streamReader next) == $= - ifFalse: [ - self errorExpectedElementAttributeEqualsSeparatorButGot: nextChar]. - streamReader skipSeparators. - - "delay initializing 'attributes' until now to know for sure if it - needs a non-zero capacity, otherwise use the lazy version" - ((attributes - ifNil: [attributes := driver newAttributeDictionary]) - at: attributeName - newPut: self nextAttributeValue) - ifFalse: [self errorDuplicateAttribute: attributeName]. - - "the ordering of these tests is optimized" - (attributeName at: 1) == $x - ifTrue: [ - driver hasUnhandledReservedAttributes - ifFalse: [ - attributeName isXMLReservedAttributeName - ifTrue: [driver haveUnhandledReservedAttributes]]]]. - - elementNester wasRootElementEnded - ifTrue: [self errorMultipleDocumentRootElements]. - elementNester startElement: tagName. - driver - handleStartTag: tagName - attributes: - (attributes - ifNil: [driver newEmptyAttributeDictionary]). - - nextChar == $/ - ifTrue: [ - streamReader next. - elementNester endCurrentElement. - driver handleEndTag: tagName]. - - (nextChar := streamReader next) == $> - ifFalse: [self errorExpectedTagTerminatorButGot: nextChar]. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextUnreplacedGeneralEntityOnCharacterStreamNamed: aName [ - driver handleUnreplacedGeneralEntityReference: aName. - characterStream - nextPut: $&; - nextPutAll: aName; - nextPut: $;. - ^ $&. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextXMLAttributeEqualsSeparator [ - | nextChar | - - streamReader skipSeparators. - (nextChar := streamReader next) == $= - ifFalse: [self errorExpectedXMLAttributeEqualsSeparatorButGot: nextChar]. - streamReader skipSeparators. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextXMLDeclarationTerminator [ - | firstChar secondChar | - - firstChar := streamReader next. - secondChar := streamReader next. - (firstChar == $? - and: [secondChar == $>]) - ifFalse: [ - self - errorExpectedXMLDeclarationTerminatorButGot: firstChar - followedBy: secondChar]. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextXMLEncodingAttributeValue [ - | quote nextChar | - - ((quote := streamReader next) == $" - or: [quote == $']) - ifFalse: [self errorExpectedXMLEncodingValueStartButGot: quote]. - - ((nextChar := streamReader next) notNil - and: [EncodingNameStartChars includes: nextChar]) - ifFalse: [self errorExpectedEncodingName]. - - xmlDeclarationStream - reset; - nextPut: nextChar. - [(nextChar := streamReader next) == nil - or: [(EncodingNameChars includes: nextChar) not]] - whileFalse: [xmlDeclarationStream nextPut: nextChar]. - - nextChar == quote - ifFalse: [ - self - errorExpectedXMLEncodingValueEnd: quote - butGot: nextChar]. - - ^ xmlDeclarationStream contents. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextXMLStandaloneAttributeValue [ - | quote yesOrNo nextChar | - - ((quote := streamReader next) == $" - or: [quote == $']) - ifFalse: [self errorExpectedXMLStandaloneValueStartButGot: quote]. - - yesOrNo := - streamReader peek == $y - ifTrue: [self expectNextAll: 'yes'] - ifFalse: [self expectNextAll: 'no']. - - (nextChar := streamReader next) == quote - ifFalse: [ - self - errorExpectedXMLStandaloneValueEnd: quote - butGot: nextChar]. - - ^ yesOrNo. -] - -{ #category : #tokenizing } -XMLWellFormedParserTokenizer >> nextXMLTextDeclaration [ - | encoding | - - 1 to: 5 "' 1 - ifTrue: [ - streamReader pushBack: - ('> nextXMLVersionAttributeValue [ - | quote nextChar length isValid | - - ((quote := streamReader next) == $" - or: [quote == $']) - ifFalse: [self errorExpectedXMLVersionValueStartButGot: quote]. - - length := 0. - isValid := true. - xmlDeclarationStream reset. - [(nextChar := streamReader next) == nil - or: [(VersionNumChars includes: nextChar) not]] - whileFalse: [ - xmlDeclarationStream nextPut: nextChar. - length := length + 1. - isValid - ifTrue: [isValid := (length == 2) == (nextChar == $.)]]. - (isValid - and: [length >= 3]) - ifFalse: [ - self errorExpectedXMLVersionNumberButGot: - xmlDeclarationStream contents]. - - nextChar == quote - ifFalse: [ - self - errorExpectedXMLVersionValueEnd: quote - butGot: nextChar]. - - ^ xmlDeclarationStream contents. -] - -{ #category : #'entity replacing' } -XMLWellFormedParserTokenizer >> pushBackEntity: anEntity whenPoppedDo: aBlock [ - anEntity hasReplacement - ifTrue: [| pushedBackEntity | - pushedBackEntity := - self addPushedBackEntity: anEntity asPushedBackEntity. - streamReader - pushBackStream: pushedBackEntity replacementStream - whenPoppedDo: [ - self removePushedBackEntity: pushedBackEntity. - aBlock - ifNotNil: [aBlock value]] - isExternal: pushedBackEntity isExternal. - pushedBackEntity isExternal - ifTrue: [self nextStartExternalEntity]] - ifFalse: [ - aBlock - ifNotNil: [aBlock value]] -] - -{ #category : #accessing } -XMLWellFormedParserTokenizer >> pushedBackEntities [ - ^ pushedBackEntities - ifNil: [pushedBackEntities := OrderedCollection new: 5] -] - -{ #category : #'entity replacing' } -XMLWellFormedParserTokenizer >> removePushedBackEntity: aPushedBackEntity [ - self pushedBackEntities remove: aPushedBackEntity. - driver currentEntity: self topPushedBackEntity. - aPushedBackEntity isExternal - ifTrue: [ - self topPushedBackExternalEntity - ifNil: [ - driver baseURI: nil] - ifNotNil: [:pushedBackExternalEntity | - driver baseURI: pushedBackExternalEntity uri]]. - ^ aPushedBackEntity poppedByTokenizer: self. -] - -{ #category : #initialization } -XMLWellFormedParserTokenizer >> setDriver: aDriver stream: aStream readLimit: anInteger [ - super - setDriver: aDriver - stream: aStream - readLimit: anInteger. - - isInLiteralValue := false. - isIgnoringLiteralValueTerminator := false. -] - -{ #category : #'tokenizing - dtd' } -XMLWellFormedParserTokenizer >> skipSeparatorsInDeclaration [ - "this can be used to replace references within declarations" - - streamReader skipSeparators. - [streamReader peek == $%] - whileTrue: [ - streamReader next. - self nextParameterEntityReferenceInDeclaration. - streamReader skipSeparators]. -] - -{ #category : #accessing } -XMLWellFormedParserTokenizer >> topPushedBackEntity [ - "heavily optimized" - pushedBackEntities == nil - ifTrue: [^ nil]. - pushedBackEntities size > 0 - ifFalse: [^ nil]. - ^ pushedBackEntities at: pushedBackEntities size. -] - -{ #category : #accessing } -XMLWellFormedParserTokenizer >> topPushedBackExternalEntity [ - self pushedBackEntities reverseDo: [:each | - each isExternal - ifTrue: [^ each]]. - ^ nil. -] - -{ #category : #accessing } -XMLWellFormedParserTokenizer >> totalOpenIncludeSections [ - ^ totalOpenIncludeSections ifNil: [totalOpenIncludeSections := 0] -] diff --git a/src/XML-Parser/XMLWellFormednessException.class.st b/src/XML-Parser/XMLWellFormednessException.class.st deleted file mode 100644 index 7d267796a..000000000 --- a/src/XML-Parser/XMLWellFormednessException.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -Invoked when XML markup is not well-formed. -" -Class { - #name : #XMLWellFormednessException, - #superclass : #XMLParserException, - #category : #'XML-Parser-Exceptions' -} diff --git a/src/XML-Parser/XMLWriteStreamAdapter.class.st b/src/XML-Parser/XMLWriteStreamAdapter.class.st deleted file mode 100644 index 71f8ab75a..000000000 --- a/src/XML-Parser/XMLWriteStreamAdapter.class.st +++ /dev/null @@ -1,82 +0,0 @@ -" -A base class for write stream adapters for basic streams that support #nextPut:, #nextPutAll:, #contents, #position, #position:, and #reset. It adds support for writing characters like tabs, spaces, and line endings. -" -Class { - #name : #XMLWriteStreamAdapter, - #superclass : #XMLStreamAdapter, - #classVars : [ - 'CRCharacter', - 'LFCharacter', - 'SpaceCharacter', - 'TabCharacter' - ], - #category : #'XML-Parser-Streams' -} - -{ #category : #'class initialization' } -XMLWriteStreamAdapter class >> initialize [ - "self initialize" - - "stored in class vars for faster access" - SpaceCharacter := Character space. - TabCharacter := Character tab. - CRCharacter := Character cr. - LFCharacter := Character lf. -] - -{ #category : #basic } -XMLWriteStreamAdapter >> basicNextPut: anObject [ - ^ self nextPut: anObject -] - -{ #category : #accessing } -XMLWriteStreamAdapter >> contents [ - ^ stream contents -] - -{ #category : #'character writing' } -XMLWriteStreamAdapter >> cr [ - ^ self nextPut: CRCharacter -] - -{ #category : #'character writing' } -XMLWriteStreamAdapter >> lf [ - ^ self nextPut: LFCharacter -] - -{ #category : #accessing } -XMLWriteStreamAdapter >> nextPut: anObject [ - stream nextPut: anObject. - ^ anObject. -] - -{ #category : #accessing } -XMLWriteStreamAdapter >> nextPutAll: aCollection [ - stream nextPutAll: aCollection. - ^ aCollection. -] - -{ #category : #positioning } -XMLWriteStreamAdapter >> position [ - ^ stream position -] - -{ #category : #positioning } -XMLWriteStreamAdapter >> position: anInteger [ - stream position: anInteger -] - -{ #category : #positioning } -XMLWriteStreamAdapter >> reset [ - stream reset -] - -{ #category : #'character writing' } -XMLWriteStreamAdapter >> space [ - ^ self nextPut: SpaceCharacter -] - -{ #category : #'character writing' } -XMLWriteStreamAdapter >> tab [ - ^ self nextPut: TabCharacter -] diff --git a/src/XML-Parser/XMLXMLDeclarationState.class.st b/src/XML-Parser/XMLXMLDeclarationState.class.st deleted file mode 100644 index 54f32ec00..000000000 --- a/src/XML-Parser/XMLXMLDeclarationState.class.st +++ /dev/null @@ -1,23 +0,0 @@ -" -A state for parsing the token. -" -Class { - #name : #XMLXMLDeclarationState, - #superclass : #XMLPrologState, - #category : #'XML-Parser-Drivers' -} - -{ #category : #testing } -XMLXMLDeclarationState >> isXMLDeclarationState [ - ^ true -] - -{ #category : #tokenizing } -XMLXMLDeclarationState >> nextTokenFrom: aTokenizer [ - ^ aTokenizer nextXMLDeclarationOrPrologToken -] - -{ #category : #testing } -XMLXMLDeclarationState >> supportsEncodingDetection [ - ^ true -] diff --git a/src/XML-Parser/XMLXMLIDAttributeValidator.class.st b/src/XML-Parser/XMLXMLIDAttributeValidator.class.st deleted file mode 100644 index f3a68f656..000000000 --- a/src/XML-Parser/XMLXMLIDAttributeValidator.class.st +++ /dev/null @@ -1,28 +0,0 @@ -" -This class validates ID attributes for the xml:id spec. -" -Class { - #name : #XMLXMLIDAttributeValidator, - #superclass : #XMLIDAttributeValidator, - #category : #'XML-Parser-Validation' -} - -{ #category : #defaults } -XMLXMLIDAttributeValidator class >> standaloneExternalClass [ - ^ XMLStandaloneExternalXMLIDAttributeValidator -] - -{ #category : #testing } -XMLXMLIDAttributeValidator >> isXMLID [ - ^ true -] - -{ #category : #validating } -XMLXMLIDAttributeValidator >> validateAttributeValue: aValue [ - self elementIDValidator validateXMLID: aValue -] - -{ #category : #validating } -XMLXMLIDAttributeValidator >> validateXMLIDAttributeDeclaration [ - -] diff --git a/src/XML-Parser/XMLZincByteEncoderStreamConverter.class.st b/src/XML-Parser/XMLZincByteEncoderStreamConverter.class.st deleted file mode 100644 index 5cb86abdf..000000000 --- a/src/XML-Parser/XMLZincByteEncoderStreamConverter.class.st +++ /dev/null @@ -1,66 +0,0 @@ -" -A stream converter that wraps the ZnByteEncoder legacy byte encoder class. (Requires Zinc.) -" -Class { - #name : #XMLZincByteEncoderStreamConverter, - #superclass : #XMLStreamConverter, - #instVars : [ - 'zincByteEncoder', - 'stringReadStreamAdapter' - ], - #classVars : [ - 'NullReadStream' - ], - #category : #'XML-Parser-Streams' -} - -{ #category : #basic } -XMLZincByteEncoderStreamConverter class >> basicCanConvertEncoding: anEncodingName [ - ^ XMLClassFinder - classNamed: #ZnByteEncoder - ifPresent: [:zincByteEncoderClass | - zincByteEncoderClass handlesEncoding: anEncodingName] - ifAbsent: [false] -] - -{ #category : #'class initialization' } -XMLZincByteEncoderStreamConverter class >> initialize [ - "self initialize" - - NullReadStream := XMLNullReadStream new -] - -{ #category : #initialization } -XMLZincByteEncoderStreamConverter >> initializeForEncoding: anEncodingName [ - zincByteEncoder := - (XMLClassFinder classNamed: #ZnByteEncoder) newForEncoding: anEncodingName. - - "we use an XMLStringReadStreamAdapter to transparently handle non-binary - character streams for ZnByteEncoder, which exepcts binary streams, and - since it's only ever set to a non-null stream during #nextFromStream:, - instances can still be shared by multiple streams, just not re-entrently, - which is OK since this class is explicitly stateful and so not - automatically thread-safe." - stringReadStreamAdapter := - XMLStringReadStreamAdapter on: NullReadStream. -] - -{ #category : #decoding } -XMLZincByteEncoderStreamConverter >> nextFromStream: aStream [ - "ZnByteEncoder does not check for #atEnd before sending #next" - aStream atEnd - ifTrue: [^ nil] - ifFalse: [| nextChar | - nextChar := - zincByteEncoder nextFromStream: - (stringReadStreamAdapter on: aStream). - stringReadStreamAdapter on: NullReadStream. - ^ nextChar] -] - -{ #category : #encoding } -XMLZincByteEncoderStreamConverter >> nextPut: aCharacter toStream: aStream [ - zincByteEncoder - nextPut: aCharacter - toStream: aStream -] diff --git a/src/XML-Parser/package.st b/src/XML-Parser/package.st deleted file mode 100644 index 27d1feb50..000000000 --- a/src/XML-Parser/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'XML-Parser' } diff --git a/src/XML-Tests-Parser/BitmapCharacterSet.extension.st b/src/XML-Tests-Parser/BitmapCharacterSet.extension.st deleted file mode 100644 index 9c744a190..000000000 --- a/src/XML-Tests-Parser/BitmapCharacterSet.extension.st +++ /dev/null @@ -1,50 +0,0 @@ -Extension { #name : #BitmapCharacterSet } - -{ #category : #'*XML-Tests-Parser' } -BitmapCharacterSet class >> fromXMLBNF: aString [ - "parses a subset of the BNF syntax used by the XML spec for character classes" - | set readStream | - - set := self new. - readStream := aString readStream. - [readStream - skipSeparators; - atEnd] - whileFalse: [ - (readStream peekFor: $[) - ifTrue: [ - [readStream skipSeparators. - readStream atEnd - or: [readStream peekFor: $]]] - whileFalse: [| start | - start := self nextXMLBNFCharFrom: readStream. - readStream - skipSeparators; - peekFor: $-; - skipSeparators. - set - addRangeFrom: start - to: (self nextXMLBNFCharFrom: readStream)]] - ifFalse: [ - (self nextXMLBNFCharFrom: readStream) - ifNotNil: [:nextChar | - set add: nextChar]]]. - ^ set. -] - -{ #category : #'*XML-Tests-Parser' } -BitmapCharacterSet class >> nextXMLBNFCharFrom: aStream [ - (aStream peek == $" - or: [aStream peek == $']) - ifTrue: [^ (aStream upTo: aStream next) first]. - (aStream peekFor: $#) - ifTrue: [ - ^ (XMLSmallIntegerReader - readFrom: aStream - withBase: 16 - andPrefixes: 'xX' - orBase: 10) asCharacter]. - (aStream peekFor: $|) - ifTrue: [^ nil]. - ^ aStream next. -] diff --git a/src/XML-Tests-Parser/DTDCachingExternalEntityResolverLimitingTest.class.st b/src/XML-Tests-Parser/DTDCachingExternalEntityResolverLimitingTest.class.st deleted file mode 100644 index 820d3f956..000000000 --- a/src/XML-Tests-Parser/DTDCachingExternalEntityResolverLimitingTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #DTDCachingExternalEntityResolverLimitingTest, - #superclass : #DTDCachingExternalEntityResolverTest, - #category : #'XML-Tests-Parser-DTD' -} - -{ #category : #testing } -DTDCachingExternalEntityResolverLimitingTest >> isTestingLimiting [ - ^ true -] diff --git a/src/XML-Tests-Parser/DTDCachingExternalEntityResolverTest.class.st b/src/XML-Tests-Parser/DTDCachingExternalEntityResolverTest.class.st deleted file mode 100644 index d1bd83d7b..000000000 --- a/src/XML-Tests-Parser/DTDCachingExternalEntityResolverTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #DTDCachingExternalEntityResolverTest, - #superclass : #DTDExternalEntityResolverTest, - #category : #'XML-Tests-Parser-DTD' -} - -{ #category : #accessing } -DTDCachingExternalEntityResolverTest >> resolverClass [ - ^ DTDCachingExternalEntityResolver -] diff --git a/src/XML-Tests-Parser/DTDExternalEntityResolverLimitingTest.class.st b/src/XML-Tests-Parser/DTDExternalEntityResolverLimitingTest.class.st deleted file mode 100644 index adb94319a..000000000 --- a/src/XML-Tests-Parser/DTDExternalEntityResolverLimitingTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #DTDExternalEntityResolverLimitingTest, - #superclass : #DTDExternalEntityResolverTest, - #category : #'XML-Tests-Parser-DTD' -} - -{ #category : #testing } -DTDExternalEntityResolverLimitingTest >> isTestingLimiting [ - ^ true -] diff --git a/src/XML-Tests-Parser/DTDExternalEntityResolverTest.class.st b/src/XML-Tests-Parser/DTDExternalEntityResolverTest.class.st deleted file mode 100644 index 48d782859..000000000 --- a/src/XML-Tests-Parser/DTDExternalEntityResolverTest.class.st +++ /dev/null @@ -1,197 +0,0 @@ -Class { - #name : #DTDExternalEntityResolverTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser-DTD' -} - -{ #category : #testing } -DTDExternalEntityResolverTest class >> shouldInheritSelectors [ - ^ true -] - -{ #category : #accessing } -DTDExternalEntityResolverTest >> entityLimitsClass [ - ^ DTDExternalEntityLimits -] - -{ #category : #testing } -DTDExternalEntityResolverTest >> isTestingLimiting [ - ^ false -] - -{ #category : #'instance creation' } -DTDExternalEntityResolverTest >> newEntityLimits [ - ^ self entityLimitsClass new -] - -{ #category : #'instance creation' } -DTDExternalEntityResolverTest >> newResolver [ - ^ self isTestingLimiting - ifTrue: [self resolverClass new asLimitingExternalEntityResolver] - ifFalse: [self resolverClass new] -] - -{ #category : #accessing } -DTDExternalEntityResolverTest >> resolverClass [ - ^ DTDExternalEntityResolver -] - -{ #category : #tests } -DTDExternalEntityResolverTest >> testCopy [ - | resolver copy | - - (resolver := self newResolver) - externalSubsetReadLimit: 1000000; - maxExternalEntities: 10; - maxExternalEntitySize: 10000; - resolvesLocalFromNonLocal: true. - - copy := resolver copy. - self - deny: copy == resolver; - assert: copy externalSubsetReadLimit = 1000000; - assert: copy maxExternalEntities = 10; - assert: copy maxExternalEntitySize = 10000; - assert: copy resolvesLocalFromNonLocal. - - self isTestingLimiting - ifTrue: [ - self - assert: copy externalEntityResolver == resolver externalEntityResolver; - assert: copy externalEntityLimits == resolver externalEntityLimits] - ifFalse: [ - self deny: copy externalEntityLimits == resolver externalEntityLimits] -] - -{ #category : #tests } -DTDExternalEntityResolverTest >> testDecoratorInterfaceCompatibility [ - | resolver resolverBaseClass | - - self isTestingLimiting - ifFalse: [^ self]. - - "decorators must support the resolver base class's public interface" - resolver := self newResolver. - resolverBaseClass := DTDExternalEntityResolver. - "avoid #methodsDo: for GS compatibility" - resolverBaseClass selectorsDo: [:each | - "use #whichCategoryIncludesSelector: for backwards compatibility" - ((resolverBaseClass whichCategoryIncludesSelector: each) - asString beginsWith: 'private') - ifFalse: [ - self assert: (resolver respondsTo: each)]]. -] - -{ #category : #tests } -DTDExternalEntityResolverTest >> testExternalEntityLimits [ - | resolver newEntityLimits | - - resolver := self newResolver. - self assert: resolver externalEntityLimits class == self entityLimitsClass. - - newEntityLimits := self newEntityLimits. - self - assert: (resolver externalEntityLimits: newEntityLimits) == resolver; - assert: resolver externalEntityLimits == newEntityLimits. -] - -{ #category : #tests } -DTDExternalEntityResolverTest >> testExternalSubsetReadLimit [ - | resolver | - - resolver := self newResolver. - self assert: - resolver externalSubsetReadLimit = - DTDExternalEntityLimits defaultExternalSubsetReadLimit. - self - assert: (resolver externalSubsetReadLimit: 1000000) == resolver; - assert: resolver externalSubsetReadLimit = 1000000; - assert: (resolver externalSubsetReadLimit: nil) == resolver; - assert: resolver externalSubsetReadLimit isNil. -] - -{ #category : #tests } -DTDExternalEntityResolverTest >> testMaxExternalEntities [ - | resolver | - - resolver := self newResolver. - self - assert: resolver maxExternalEntities > 0; - assert: (resolver maxExternalEntities: 10) == resolver; - assert: resolver maxExternalEntities = 10; - assert: (resolver maxExternalEntities: nil) == resolver; - assert: resolver maxExternalEntities isNil. -] - -{ #category : #tests } -DTDExternalEntityResolverTest >> testMaxExternalEntitySize [ - | resolver | - - resolver := self newResolver. - self assert: - resolver maxExternalEntitySize = - DTDExternalEntityLimits defaultMaxExternalEntitySize. - self - assert: (resolver maxExternalEntitySize: 10000) == resolver; - assert: resolver maxExternalEntitySize = 10000; - assert: (resolver maxExternalEntitySize: nil) == resolver; - assert: resolver maxExternalEntitySize isNil. -] - -{ #category : #tests } -DTDExternalEntityResolverTest >> testRemoveLimits [ - | readLimit entityLimit entitySizeLimit resolver | - - readLimit := 100. - entityLimit := 10. - entitySizeLimit := 100. - (resolver := self newResolver) - externalSubsetReadLimit: readLimit; - maxExternalEntities: entityLimit; - maxExternalEntitySize: entitySizeLimit; - resolvesLocalFromNonLocal: true. - self - assert: resolver externalSubsetReadLimit = readLimit; - assert: resolver maxExternalEntities = entityLimit; - assert: resolver maxExternalEntitySize = entitySizeLimit; - assert: resolver resolvesLocalFromNonLocal. - - resolver removeLimits. - self - assert: resolver externalSubsetReadLimit isNil; - assert: resolver maxExternalEntities isNil; - assert: resolver maxExternalEntitySize isNil; - assert: resolver resolvesLocalFromNonLocal. -] - -{ #category : #tests } -DTDExternalEntityResolverTest >> testResolvesLocalFromNonLocal [ - | resolver | - - resolver := self newResolver. - self - deny: resolver resolvesLocalFromNonLocal; - assert: (resolver resolvesLocalFromNonLocal: false) == resolver; - deny: resolver resolvesLocalFromNonLocal; - assert: (resolver resolvesLocalFromNonLocal: true) == resolver; - assert: resolver resolvesLocalFromNonLocal. -] - -{ #category : #tests } -DTDExternalEntityResolverTest >> testTotalResolvedExternalEntities [ - | resolver | - - self isTestingLimiting - ifFalse: [^ self]. - - resolver := self newResolver. - self assert: resolver totalResolvedExternalEntities = 0. - - resolver incrementTotalResolvedExternalEntities. - self assert: resolver totalResolvedExternalEntities = 1. - - self assert: - (self newResolver - incrementTotalResolvedExternalEntities; - totalResolvedExternalEntities) = 1. -] diff --git a/src/XML-Tests-Parser/DTDStaticExternalEntityResolverLimitingTest.class.st b/src/XML-Tests-Parser/DTDStaticExternalEntityResolverLimitingTest.class.st deleted file mode 100644 index 8916cc797..000000000 --- a/src/XML-Tests-Parser/DTDStaticExternalEntityResolverLimitingTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #DTDStaticExternalEntityResolverLimitingTest, - #superclass : #DTDStaticExternalEntityResolverTest, - #category : #'XML-Tests-Parser-DTD' -} - -{ #category : #testing } -DTDStaticExternalEntityResolverLimitingTest >> isTestingLimiting [ - ^ true -] diff --git a/src/XML-Tests-Parser/DTDStaticExternalEntityResolverTest.class.st b/src/XML-Tests-Parser/DTDStaticExternalEntityResolverTest.class.st deleted file mode 100644 index f4bffed74..000000000 --- a/src/XML-Tests-Parser/DTDStaticExternalEntityResolverTest.class.st +++ /dev/null @@ -1,446 +0,0 @@ -Class { - #name : #DTDStaticExternalEntityResolverTest, - #superclass : #DTDExternalEntityResolverTest, - #category : #'XML-Tests-Parser-DTD' -} - -{ #category : #accessing } -DTDStaticExternalEntityResolverTest >> entityAssociations [ - ^ Array - with: 'extern.dtd' -> '' - with: 'extern/extern.ent' -> '' - with: 'extern/extern2.ent' -> '' -] - -{ #category : #accessing } -DTDStaticExternalEntityResolverTest >> entityDictionary [ - | entities | - - entities := Dictionary new. - self entityURIStringsAndReplacementsDo: [:uriString :replacement | - entities - at: uriString asXMLURI - put: replacement]. - ^ entities. -] - -{ #category : #enumerating } -DTDStaticExternalEntityResolverTest >> entityURIStringsAndReplacementsDo: aBlock [ - self entityAssociations do: [:each | - aBlock - value: each key - value: each value] -] - -{ #category : #accessing } -DTDStaticExternalEntityResolverTest >> newEntityReplacement [ - ^ '' -] - -{ #category : #'instance creation' } -DTDStaticExternalEntityResolverTest >> newResolverWithEntities [ - ^ self newResolver externalEntities: self entityAssociations -] - -{ #category : #accessing } -DTDStaticExternalEntityResolverTest >> resolverClass [ - ^ DTDStaticExternalEntityResolver -] - -{ #category : #tests } -DTDStaticExternalEntityResolverTest >> testCopy [ - | resolver copy | - - super testCopy. - - self isTestingLimiting - ifTrue: [^ self]. - - resolver := self newResolverWithEntities. - copy := resolver copy. - self - deny: copy == resolver; - deny: copy externalEntities == resolver externalEntities; - assert: copy externalEntities = resolver externalEntities. -] - -{ #category : #tests } -DTDStaticExternalEntityResolverTest >> testExternalEntities [ - | resolver replacementAssociation | - - self isTestingLimiting - ifTrue: [^ self]. - - resolver := self newResolver. - self - assert: resolver externalEntities class == Dictionary; - assert: resolver externalEntities isEmpty. - - resolver externalEntities: self entityAssociations. - self assert: resolver externalEntities = self entityDictionary. - - replacementAssociation := 'new.ent' asXMLURI -> self newEntityReplacement. - resolver externalEntities: (Array with: replacementAssociation). - self assert: resolver externalEntities = (Dictionary with: replacementAssociation). - - resolver := self resolverClass externalEntities: self entityAssociations. - self - assert: resolver class == self resolverClass; - assert: resolver externalEntities = self entityDictionary. -] - -{ #category : #tests } -DTDStaticExternalEntityResolverTest >> testExternalEntityAtURI [ - | resolver | - - self isTestingLimiting - ifTrue: [^ self]. - - resolver := self newResolver. - self entityURIStringsAndReplacementsDo: [:uriString :replacement | - self - assert: (resolver externalEntityAtURI: uriString) = ''; - assert: (resolver externalEntityAtURI: uriString asXMLURI) = ''. - - resolver - externalEntityAtURI: uriString - put: replacement. - self - assert: (resolver externalEntityAtURI: uriString) = replacement; - assert: (resolver externalEntityAtURI: uriString asXMLURI) = replacement]. -] - -{ #category : #tests } -DTDStaticExternalEntityResolverTest >> testExternalEntityAtURIIfAbsent [ - | resolver | - - self isTestingLimiting - ifTrue: [^ self]. - - resolver := self newResolver. - self entityURIStringsAndReplacementsDo: [:uriString :replacement | - self assert: - (resolver - externalEntityAtURI: uriString - ifAbsent: [#absent]) = #absent. - self assert: - (resolver - externalEntityAtURI: uriString asXMLURI - ifAbsent: [#absent]) = #absent. - - resolver - externalEntityAtURI: uriString - put: replacement. - self assert: - (resolver - externalEntityAtURI: uriString - ifAbsent: [self fail]) = replacement. - self assert: - (resolver - externalEntityAtURI: uriString asXMLURI - ifAbsent: [self fail]) = replacement]. -] - -{ #category : #tests } -DTDStaticExternalEntityResolverTest >> testExternalEntityAtURIIfAbsentPut [ - | resolver | - - self isTestingLimiting - ifTrue: [^ self]. - - resolver := self newResolver. - self entityURIStringsAndReplacementsDo: [:uriString :replacement | - self assert: - (resolver - externalEntityAtURI: uriString - ifAbsentPut: [replacement]) = replacement. - self assert: (resolver externalEntityAtURI: uriString) = replacement. - self assert: - (resolver - externalEntityAtURI: uriString asXMLURI - ifAbsentPut: [self fail]) = replacement. - self assert: (resolver externalEntityAtURI: uriString) = replacement]. -] - -{ #category : #tests } -DTDStaticExternalEntityResolverTest >> testExternalEntityAtURIPut [ - | resolver | - - self isTestingLimiting - ifTrue: [^ self]. - - resolver := self newResolver. - self entityURIStringsAndReplacementsDo: [:uriString :replacement | - self assert: - (resolver - externalEntityAtURI: uriString - put: replacement) = replacement. - self assert: (resolver externalEntityAtURI: uriString) = replacement. - - self assert: - (resolver - externalEntityAtURI: uriString asXMLURI - put: self newEntityReplacement) = self newEntityReplacement. - self assert: - (resolver externalEntityAtURI: uriString asXMLURI) = self newEntityReplacement]. -] - -{ #category : #tests } -DTDStaticExternalEntityResolverTest >> testHasExternalEntities [ - self isTestingLimiting - ifTrue: [^ self]. - - self - deny: self newResolver hasExternalEntities; - assert: self newResolverWithEntities hasExternalEntities -] - -{ #category : #tests } -DTDStaticExternalEntityResolverTest >> testIncludesExternalEntityURI [ - | resolver | - - self isTestingLimiting - ifTrue: [^ self]. - - resolver := self newResolver. - self entityURIStringsAndReplacementsDo: [:uriString :replacement | - self - deny: (resolver includesExternalEntityURI: uriString); - deny: (resolver includesExternalEntityURI: uriString asXMLURI). - - resolver - externalEntityAtURI: uriString - put: replacement. - self - assert: (resolver includesExternalEntityURI: uriString); - assert: (resolver includesExternalEntityURI: uriString asXMLURI)]. -] - -{ #category : #tests } -DTDStaticExternalEntityResolverTest >> testRemoveExternalEntities [ - | resolver | - - self isTestingLimiting - ifTrue: [^ self]. - - resolver := self newResolverWithEntities. - self - assert: resolver removeExternalEntities == resolver; - deny: resolver hasExternalEntities. -] - -{ #category : #tests } -DTDStaticExternalEntityResolverTest >> testRemoveExternalEntityURI [ - | resolver | - - self isTestingLimiting - ifTrue: [^ self]. - - resolver := self newResolverWithEntities. - self entityURIStringsAndReplacementsDo: [:uriString :replacement | - self - assert: (resolver removeExternalEntityURI: uriString) = replacement; - deny: (resolver includesExternalEntityURI: uriString). - self - should: [resolver removeExternalEntityURI: uriString] - raise: Error. - self - should: [resolver removeExternalEntityURI: uriString asXMLURI] - raise: Error.]. -] - -{ #category : #tests } -DTDStaticExternalEntityResolverTest >> testRemoveExternalEntityURIIfAbsent [ - | resolver | - - self isTestingLimiting - ifTrue: [^ self]. - - resolver := self newResolverWithEntities. - self entityURIStringsAndReplacementsDo: [:uriString :replacement | - self assert: - (resolver - removeExternalEntityURI: uriString - ifAbsent: [self fail]) = replacement. - self deny: (resolver includesExternalEntityURI: uriString). - self assert: - (resolver - removeExternalEntityURI: uriString - ifAbsent: [#absent]) = #absent. - self assert: - (resolver - removeExternalEntityURI: uriString asXMLURI - ifAbsent: [#absent]) = #absent]. -] - -{ #category : #tests } -DTDStaticExternalEntityResolverTest >> testResolveExternalEntityURI [ - | resolver | - - self isTestingLimiting - ifTrue: [^ self]. - - resolver := self newResolver. - self entityURIStringsAndReplacementsDo: [:uriString :replacement | - self - should: [resolver resolveExternalEntityURI: uriString] - raise: XMLParserException. - self - should: [resolver resolveExternalEntityURI: uriString asXMLURI] - raise: XMLParserException. - - resolver - maxExternalEntitySize: replacement size; - externalEntityAtURI: uriString - put: replacement. - self - assert: (resolver resolveExternalEntityURI: uriString) contents = replacement; - assert: (resolver resolveExternalEntityURI: uriString asXMLURI) contents = replacement. - - resolver maxExternalEntitySize: replacement size - 1. - self - should: [resolver resolveExternalEntityURI: uriString] - raise: XMLLimitException. - self - should: [resolver resolveExternalEntityURI: uriString asXMLURI] - raise: XMLLimitException]. -] - -{ #category : #tests } -DTDStaticExternalEntityResolverTest >> testResolveExternalEntityURIUpToLimit [ - | resolver | - - self isTestingLimiting - ifTrue: [^ self]. - - resolver := self newResolver. - self entityURIStringsAndReplacementsDo: [:uriString :replacement | - self - should: [ - resolver - resolveExternalEntityURI: uriString - upToLimit: nil] - raise: XMLParserException. - self - should: [ - resolver - resolveExternalEntityURI: uriString asXMLURI - upToLimit: nil] - raise: XMLParserException. - - resolver - externalEntityAtURI: uriString - put: replacement. - self assert: - (resolver - resolveExternalEntityURI: uriString - upToLimit: replacement size) contents = replacement. - self assert: - (resolver - resolveExternalEntityURI: uriString asXMLURI - upToLimit: replacement size) contents = replacement. - self - should: [ - resolver - resolveExternalEntityURI: uriString - upToLimit: replacement size - 1] - raise: XMLLimitException. - self - should: [ - resolver - resolveExternalEntityURI: uriString asXMLURI - upToLimit: replacement size - 1] - raise: XMLLimitException]. -] - -{ #category : #tests } -DTDStaticExternalEntityResolverTest >> testStreamResolveExternalEntityURI [ - | resolver | - - self isTestingLimiting - ifTrue: [^ self]. - - resolver := self newResolver. - self entityURIStringsAndReplacementsDo: [:uriString :replacement | | stream | - self - should: [resolver streamResolveExternalEntityURI: uriString] - raise: XMLParserException. - self - should: [resolver streamResolveExternalEntityURI: uriString asXMLURI] - raise: XMLParserException. - - resolver - maxExternalEntitySize: replacement size; - externalEntityAtURI: uriString - put: replacement. - stream := resolver streamResolveExternalEntityURI: uriString. - self - assert: (stream isKindOf: XMLDecodingReadStreamAdapter); - assert: stream contents = replacement. - stream := resolver streamResolveExternalEntityURI: uriString asXMLURI. - self - assert: (stream isKindOf: XMLDecodingReadStreamAdapter); - assert: stream contents = replacement. - - resolver maxExternalEntitySize: replacement size - 1. - self - should: [resolver streamResolveExternalEntityURI: uriString] - raise: XMLLimitException. - self - should: [resolver streamResolveExternalEntityURI: uriString asXMLURI] - raise: XMLLimitException]. -] - -{ #category : #tests } -DTDStaticExternalEntityResolverTest >> testStreamResolveExternalEntityURIUpToLimit [ - | resolver | - - self isTestingLimiting - ifTrue: [^ self]. - - resolver := self newResolver. - self entityURIStringsAndReplacementsDo: [:uriString :replacement | | stream | - self - should: [ - resolver - streamResolveExternalEntityURI: uriString - upToLimit: nil] - raise: XMLParserException. - self - should: [ - resolver - streamResolveExternalEntityURI: uriString asXMLURI - upToLimit: nil] - raise: XMLParserException. - - resolver - externalEntityAtURI: uriString - put: replacement. - stream := - resolver - streamResolveExternalEntityURI: uriString - upToLimit: replacement size. - self - assert: (stream isKindOf: XMLDecodingReadStreamAdapter); - assert: stream contents = replacement. - stream := - resolver - streamResolveExternalEntityURI: uriString asXMLURI - upToLimit: replacement size. - self - assert: (stream isKindOf: XMLDecodingReadStreamAdapter); - assert: stream contents = replacement. - - self - should: [ - resolver - streamResolveExternalEntityURI: uriString - upToLimit: replacement size - 1] - raise: XMLLimitException. - self - should: [ - resolver - streamResolveExternalEntityURI: uriString asXMLURI - upToLimit: replacement size - 1] - raise: XMLLimitException]. -] diff --git a/src/XML-Tests-Parser/SAX2ElementHandlerParserTest.class.st b/src/XML-Tests-Parser/SAX2ElementHandlerParserTest.class.st deleted file mode 100644 index 5e5218c7a..000000000 --- a/src/XML-Tests-Parser/SAX2ElementHandlerParserTest.class.st +++ /dev/null @@ -1,123 +0,0 @@ -Class { - #name : #SAX2ElementHandlerParserTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser-ElementHandlers' -} - -{ #category : #source } -SAX2ElementHandlerParserTest >> sampleBooksXML [ - ^ ' - - - Smalltalk-80: The Language and its Implementation - 0201113716 - - Adele Goldberg - David Robson - - - - Pharo By Example - 3952334146 - - Andrew P. Black - Stephane Ducasse - Oscar Nierstrasz - Damien Pollet - Damien Cassou - Marcus Denker - - - - ' -] - -{ #category : #source } -SAX2ElementHandlerParserTest >> samplePersonXML [ - ^ ' - - Tim Bray - June 21, 1955 - - - - - Vancouver, British Columbia, Canada - - ' -] - -{ #category : #tests } -SAX2ElementHandlerParserTest >> testParsingSampleBooks [ - "Basic factory-style parsing, with one factory for the entire document" - - | books | - - books := - (SAX2ElementParser on: self sampleBooksXML) - elementHandlerFactory: - (SAX2PluggableElementHandlerFactory new - handleElement: 'books' withClass: SAX2HBooksElementHandler; - handleElement: 'book' withClass: SAX2HBookElementHandler; - handleElement: 'title' withClass: SAX2HTitleElementHandler; - handleElement: 'isbn' withClass: SAX2HISBNElementHandler; - handleElement: 'author' withClass: SAX2HAuthorElementHandler); - parseDocument. - - self - assert: books class == OrderedCollection; - assert: books size = 2; - assert: books first class == SAX2SampleBook; - assert: books first title = 'Smalltalk-80: The Language and its Implementation'; - assert: books first isbn = '0201113716'; - assert: books first authors asArray = #('Adele Goldberg' 'David Robson'); - assert: books second class == SAX2SampleBook; - assert: books second title = 'Pharo By Example'; - assert: books second isbn = '3952334146'; - assert: - books second authors asArray = - #('Andrew P. Black' - 'Stephane Ducasse' - 'Oscar Nierstrasz' - 'Damien Pollet' - 'Damien Cassou' - 'Marcus Denker'). -] - -{ #category : #tests } -SAX2ElementHandlerParserTest >> testParsingSamplePerson [ - "FSM-style parsing, with element handlers being the states and - the factories mapped to them being the transitions" - - | person rootFactory personFactory contactsFactory factoryMapper | - - rootFactory := - SAX2PluggableElementHandlerFactory new - handleElement: 'person' withClass: SAX2HPersonElementHandler. - personFactory := - SAX2PluggableElementHandlerFactory new - handleElement: 'name' withClass: SAX2HNameElementHandler; - handleElement: 'date-of-birth' withClass: SAX2HDateOfBirthElementHandler; - handleElement: 'contacts' withClass: SAX2HContactsElementHandler; - handleElement: 'residence' withClass: SAX2HResidenceElementHandler. - contactsFactory := - SAX2PluggableElementHandlerFactory new - handleElement: 'email' withClass: SAX2HEmailElementHandler. - factoryMapper := - SAX2PluggableElementHandlerFactoryMapper new - mapElementHandlerClass: SAX2HPersonElementHandler toFactory: personFactory; - mapElementHandlerClass: SAX2HContactsElementHandler toFactory: contactsFactory. - - person := - (SAX2ElementParser on: self samplePersonXML) - elementHandlerFactory: rootFactory; - elementHandlerFactoryMapper: factoryMapper; - parseDocument. - - self - assert: person class == SAX2SamplePerson; - assert: person name = 'Tim Bray'; - assert: person dateOfBirth = (Date year: 1955 month: 6 day: 21); - assert: person emailAddresses asArray = #('tbray@textuality.com' 'tbray@tbray.org'); - assert: person residence = 'Vancouver, British Columbia, Canada'. -] diff --git a/src/XML-Tests-Parser/SAX2HAuthorElementHandler.class.st b/src/XML-Tests-Parser/SAX2HAuthorElementHandler.class.st deleted file mode 100644 index 12623c9eb..000000000 --- a/src/XML-Tests-Parser/SAX2HAuthorElementHandler.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -Handler for the sample element. -" -Class { - #name : #SAX2HAuthorElementHandler, - #superclass : #SAX2ElementCharacterHandler, - #category : #'XML-Tests-Parser-ElementHandlers' -} - -{ #category : #'handling - content' } -SAX2HAuthorElementHandler >> endElement: aQualifiedName prefix: aPrefix uri: aURI localName: aLocalName [ - self parser parsingResult last addAuthor: self characters -] diff --git a/src/XML-Tests-Parser/SAX2HBookElementHandler.class.st b/src/XML-Tests-Parser/SAX2HBookElementHandler.class.st deleted file mode 100644 index 9f111941b..000000000 --- a/src/XML-Tests-Parser/SAX2HBookElementHandler.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -Handler for the sample element. -" -Class { - #name : #SAX2HBookElementHandler, - #superclass : #SAX2ElementHandler, - #category : #'XML-Tests-Parser-ElementHandlers' -} - -{ #category : #'handling - content' } -SAX2HBookElementHandler >> startElement: aQualifiedName prefix: aPrefix uri: aURI localName: aLocalName attributes: anAttributeDictionary [ - self parser parsingResult addLast: SAX2SampleBook new -] diff --git a/src/XML-Tests-Parser/SAX2HBooksElementHandler.class.st b/src/XML-Tests-Parser/SAX2HBooksElementHandler.class.st deleted file mode 100644 index f364dfad8..000000000 --- a/src/XML-Tests-Parser/SAX2HBooksElementHandler.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -Handler for the sample element. -" -Class { - #name : #SAX2HBooksElementHandler, - #superclass : #SAX2ElementHandler, - #category : #'XML-Tests-Parser-ElementHandlers' -} - -{ #category : #'handling - content' } -SAX2HBooksElementHandler >> startElement: aQualifiedName prefix: aPrefix uri: aURI localName: aLocalName attributes: anAttributeDictionary [ - self parser parsingResult: OrderedCollection new -] diff --git a/src/XML-Tests-Parser/SAX2HContactsElementHandler.class.st b/src/XML-Tests-Parser/SAX2HContactsElementHandler.class.st deleted file mode 100644 index 3f65eb3ad..000000000 --- a/src/XML-Tests-Parser/SAX2HContactsElementHandler.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -Handler for the sample element. -" -Class { - #name : #SAX2HContactsElementHandler, - #superclass : #SAX2ElementHandler, - #category : #'XML-Tests-Parser-ElementHandlers' -} diff --git a/src/XML-Tests-Parser/SAX2HDateOfBirthElementHandler.class.st b/src/XML-Tests-Parser/SAX2HDateOfBirthElementHandler.class.st deleted file mode 100644 index 080b856c3..000000000 --- a/src/XML-Tests-Parser/SAX2HDateOfBirthElementHandler.class.st +++ /dev/null @@ -1,14 +0,0 @@ -" -Handler for the sample element. -" -Class { - #name : #SAX2HDateOfBirthElementHandler, - #superclass : #SAX2ElementCharacterHandler, - #category : #'XML-Tests-Parser-ElementHandlers' -} - -{ #category : #'handling - content' } -SAX2HDateOfBirthElementHandler >> endElement: aQualifiedName prefix: aPrefix uri: aURI localName: aLocalName [ - self parser parsingResult dateOfBirth: - (Date readFrom: self characters readStream) -] diff --git a/src/XML-Tests-Parser/SAX2HEmailElementHandler.class.st b/src/XML-Tests-Parser/SAX2HEmailElementHandler.class.st deleted file mode 100644 index c11fd10a8..000000000 --- a/src/XML-Tests-Parser/SAX2HEmailElementHandler.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -Handler for the sample element. -" -Class { - #name : #SAX2HEmailElementHandler, - #superclass : #SAX2ElementHandler, - #category : #'XML-Tests-Parser-ElementHandlers' -} - -{ #category : #'handling - content' } -SAX2HEmailElementHandler >> startElement: aQualifiedName prefix: aPrefix uri: aURI localName: aLocalName attributes: anAttributeDictionary [ - self parser parsingResult addEmailAddress: (anAttributeDictionary at: 'address') -] diff --git a/src/XML-Tests-Parser/SAX2HISBNElementHandler.class.st b/src/XML-Tests-Parser/SAX2HISBNElementHandler.class.st deleted file mode 100644 index a6b120c89..000000000 --- a/src/XML-Tests-Parser/SAX2HISBNElementHandler.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -Handler for the sample element. -" -Class { - #name : #SAX2HISBNElementHandler, - #superclass : #SAX2ElementCharacterHandler, - #category : #'XML-Tests-Parser-ElementHandlers' -} - -{ #category : #'handling - content' } -SAX2HISBNElementHandler >> endElement: aQualifiedName prefix: aPrefix uri: aURI localName: aLocalName [ - self parser parsingResult last isbn: self characters -] diff --git a/src/XML-Tests-Parser/SAX2HNameElementHandler.class.st b/src/XML-Tests-Parser/SAX2HNameElementHandler.class.st deleted file mode 100644 index c9fac3bd8..000000000 --- a/src/XML-Tests-Parser/SAX2HNameElementHandler.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -Handler for the sample element. -" -Class { - #name : #SAX2HNameElementHandler, - #superclass : #SAX2ElementCharacterHandler, - #category : #'XML-Tests-Parser-ElementHandlers' -} - -{ #category : #'handling - content' } -SAX2HNameElementHandler >> endElement: aQualifiedName prefix: aPrefix uri: aURI localName: aLocalName [ - self parser parsingResult name: self characters -] diff --git a/src/XML-Tests-Parser/SAX2HPersonElementHandler.class.st b/src/XML-Tests-Parser/SAX2HPersonElementHandler.class.st deleted file mode 100644 index 45977aa64..000000000 --- a/src/XML-Tests-Parser/SAX2HPersonElementHandler.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -Handler for the sample element. -" -Class { - #name : #SAX2HPersonElementHandler, - #superclass : #SAX2ElementHandler, - #category : #'XML-Tests-Parser-ElementHandlers' -} - -{ #category : #'handling - content' } -SAX2HPersonElementHandler >> startElement: aQualifiedName prefix: aPrefix uri: aURI localName: aLocalName attributes: anAttributeDictionary [ - self parser parsingResult: SAX2SamplePerson new -] diff --git a/src/XML-Tests-Parser/SAX2HResidenceElementHandler.class.st b/src/XML-Tests-Parser/SAX2HResidenceElementHandler.class.st deleted file mode 100644 index 215e7fd72..000000000 --- a/src/XML-Tests-Parser/SAX2HResidenceElementHandler.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -Handler for the sample element. -" -Class { - #name : #SAX2HResidenceElementHandler, - #superclass : #SAX2ElementCharacterHandler, - #category : #'XML-Tests-Parser-ElementHandlers' -} - -{ #category : #'handling - content' } -SAX2HResidenceElementHandler >> endElement: aQualifiedName prefix: aPrefix uri: aURI localName: aLocalName [ - self parser parsingResult residence: self characters -] diff --git a/src/XML-Tests-Parser/SAX2HTitleElementHandler.class.st b/src/XML-Tests-Parser/SAX2HTitleElementHandler.class.st deleted file mode 100644 index 2d34710cf..000000000 --- a/src/XML-Tests-Parser/SAX2HTitleElementHandler.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -Handler for the sample element. -" -Class { - #name : #SAX2HTitleElementHandler, - #superclass : #SAX2ElementCharacterHandler, - #category : #'XML-Tests-Parser-ElementHandlers' -} - -{ #category : #'handling - content' } -SAX2HTitleElementHandler >> endElement: aQualifiedName prefix: aPrefix uri: aURI localName: aLocalName [ - self parser parsingResult last title: self characters -] diff --git a/src/XML-Tests-Parser/SAX2ParserTest.class.st b/src/XML-Tests-Parser/SAX2ParserTest.class.st deleted file mode 100644 index bcf2eb685..000000000 --- a/src/XML-Tests-Parser/SAX2ParserTest.class.st +++ /dev/null @@ -1,107 +0,0 @@ -Class { - #name : #SAX2ParserTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser' -} - -{ #category : #source } -SAX2ParserTest >> addressBookXML [ - ^ XMLParserTest addressBookXML -] - -{ #category : #accessing } -SAX2ParserTest >> contentHandlerClass [ - ^ SAX2ContentHandler -] - -{ #category : #accessing } -SAX2ParserTest >> declarationHandlerClass [ - ^ SAX2DeclarationHandler -] - -{ #category : #accessing } -SAX2ParserTest >> lexicalHandlerClass [ - ^ SAX2LexicalHandler -] - -{ #category : #tests } -SAX2ParserTest >> testContentHandler [ - | parser oldContentHandler newContentHandler | - - parser := SAX2Parser on: self addressBookXML. - oldContentHandler := parser contentHandler. - self - assert: oldContentHandler class == self contentHandlerClass; - assert: oldContentHandler parser == parser. - - newContentHandler := self contentHandlerClass new. - self - assert: (parser contentHandler: newContentHandler) == parser; - assert: parser contentHandler == newContentHandler; - assert: newContentHandler parser == parser; - assert: (parser contentHandler: nil) == parser; - assert: parser contentHandler class == self contentHandlerClass; - assert: parser contentHandler parser == parser. -] - -{ #category : #tests } -SAX2ParserTest >> testDeclarationHandler [ - | parser oldDeclarationHandler newDeclarationHandler | - - parser := SAX2Parser on: self addressBookXML. - oldDeclarationHandler := parser declarationHandler. - self - assert: oldDeclarationHandler class == self declarationHandlerClass; - assert: oldDeclarationHandler parser == parser. - - newDeclarationHandler := self declarationHandlerClass new. - self - assert: (parser declarationHandler: newDeclarationHandler) == parser; - assert: parser declarationHandler == newDeclarationHandler; - assert: newDeclarationHandler parser == parser; - assert: (parser declarationHandler: nil) == parser; - assert: parser declarationHandler class == self declarationHandlerClass; - assert: parser declarationHandler parser == parser. -] - -{ #category : #tests } -SAX2ParserTest >> testLexicalHandler [ - | parser oldLexicalHandler newLexicalHandler | - - parser := SAX2Parser on: self addressBookXML. - oldLexicalHandler := parser lexicalHandler. - self - assert: oldLexicalHandler class == self lexicalHandlerClass; - assert: oldLexicalHandler parser == parser. - - newLexicalHandler := self lexicalHandlerClass new. - self - assert: (parser lexicalHandler: newLexicalHandler) == parser; - assert: parser lexicalHandler == newLexicalHandler; - assert: newLexicalHandler parser == parser; - assert: (parser lexicalHandler: nil) == parser; - assert: parser lexicalHandler class == self lexicalHandlerClass; - assert: parser lexicalHandler parser == parser. -] - -{ #category : #tests } -SAX2ParserTest >> testParseDocument [ - self - shouldnt: [ - (SAX2Parser on: self addressBookXML) - parseDocument] - raise: XMLParserException -] - -{ #category : #tests } -SAX2ParserTest >> testParsingResult [ - | parser | - - parser := SAX2Parser on: self addressBookXML. - self assert: parser parsingResult == parser. - - parser parsingResult: #result. - self - assert: parser parsingResult == #result; - assert: parser parseDocument == #result. -] diff --git a/src/XML-Tests-Parser/SAX2SampleBook.class.st b/src/XML-Tests-Parser/SAX2SampleBook.class.st deleted file mode 100644 index 34a0ec755..000000000 --- a/src/XML-Tests-Parser/SAX2SampleBook.class.st +++ /dev/null @@ -1,52 +0,0 @@ -" -The sample book object parsed by the SAX2ElementParser. -" -Class { - #name : #SAX2SampleBook, - #superclass : #Object, - #instVars : [ - 'title', - 'isbn', - 'authors' - ], - #category : #'XML-Tests-Parser-ElementHandlers' -} - -{ #category : #adding } -SAX2SampleBook >> addAuthor: aString [ - ^ self authors addLast: aString -] - -{ #category : #accessing } -SAX2SampleBook >> authors [ - ^ authors -] - -{ #category : #initialization } -SAX2SampleBook >> initialize [ - super initialize. - - title := ''. - isbn := ''. - authors := OrderedCollection new. -] - -{ #category : #accessing } -SAX2SampleBook >> isbn [ - ^ isbn -] - -{ #category : #accessing } -SAX2SampleBook >> isbn: aString [ - isbn := aString -] - -{ #category : #accessing } -SAX2SampleBook >> title [ - ^ title -] - -{ #category : #accessing } -SAX2SampleBook >> title: aString [ - title := aString -] diff --git a/src/XML-Tests-Parser/SAX2SamplePerson.class.st b/src/XML-Tests-Parser/SAX2SamplePerson.class.st deleted file mode 100644 index 0667f1695..000000000 --- a/src/XML-Tests-Parser/SAX2SamplePerson.class.st +++ /dev/null @@ -1,64 +0,0 @@ -" -The sample person object parsed by the SAX2ElementParser. -" -Class { - #name : #SAX2SamplePerson, - #superclass : #Object, - #instVars : [ - 'name', - 'dateOfBirth', - 'emailAddresses', - 'residence' - ], - #category : #'XML-Tests-Parser-ElementHandlers' -} - -{ #category : #adding } -SAX2SamplePerson >> addEmailAddress: aString [ - ^ self emailAddresses addLast: aString -] - -{ #category : #accessing } -SAX2SamplePerson >> dateOfBirth [ - ^ dateOfBirth -] - -{ #category : #accessing } -SAX2SamplePerson >> dateOfBirth: aDate [ - dateOfBirth := aDate -] - -{ #category : #accessing } -SAX2SamplePerson >> emailAddresses [ - ^ emailAddresses -] - -{ #category : #initialization } -SAX2SamplePerson >> initialize [ - super initialize. - - name := ''. - dateOfBirth := nil. - emailAddresses := OrderedCollection new. - residence := ''. -] - -{ #category : #accessing } -SAX2SamplePerson >> name [ - ^ name -] - -{ #category : #accessing } -SAX2SamplePerson >> name: aString [ - name := aString -] - -{ #category : #accessing } -SAX2SamplePerson >> residence [ - ^ residence -] - -{ #category : #accessing } -SAX2SamplePerson >> residence: aString [ - residence := aString -] diff --git a/src/XML-Tests-Parser/SAXHandlerTest.class.st b/src/XML-Tests-Parser/SAXHandlerTest.class.st deleted file mode 100644 index 59f66470d..000000000 --- a/src/XML-Tests-Parser/SAXHandlerTest.class.st +++ /dev/null @@ -1,1153 +0,0 @@ -Class { - #name : #SAXHandlerTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser' -} - -{ #category : #accessing } -SAXHandlerTest >> configurationClass [ - ^ XMLConfiguration -] - -{ #category : #accessing } -SAXHandlerTest >> externalEntityResolverClass [ - ^ DTDCachingExternalEntityResolver -] - -{ #category : #source } -SAXHandlerTest >> generalEntityXMLSource [ - ^ ' - <!DOCTYPE root [ - <!ENTITY % firstDeclaration "<!ENTITY first ' &second; '>"> - %firstDeclaration; - <!ENTITY second " replacement "> - ]> - <root name="&second;">&first;</root>' -] - -{ #category : #accessing } -SAXHandlerTest >> generalEntityXMLSourceSelectors [ - ^ #(startDocument - startDTD:publicID:systemID: - parameterEntityDeclaration:replacement: - generalEntityDeclaration:replacement: generalEntityDeclaration:replacement: - endDTD - startElement:prefix:uri:localName:attributes: - startEntity: startEntity: endEntity: endEntity: characters: - endElement:prefix:uri:localName: - endDocument) -] - -{ #category : #accessing } -SAXHandlerTest >> prefixedXMLAttributes [ - ^ (XMLNamespacedAttributeDictionary - with: 'name' -> 'value' - with: 'prefix:name' -> 'prefixValue') - setNamespaceScope: - (XMLNamespaceScope new - defaultNamespace: 'defaultNS'; - mapPrefix: 'prefix' to: 'prefixNS') -] - -{ #category : #accessing } -SAXHandlerTest >> prefixedXMLAttributesNamespacesDisabled [ - ^ XMLAttributeDictionary - with: 'xmlns:prefix' -> 'prefixNS' - with: 'xmlns' -> 'defaultNS' - with: 'name' -> 'value' - with: 'prefix:name' -> 'prefixValue' -] - -{ #category : #source } -SAXHandlerTest >> prefixedXMLSource [ - ^ '<prefix:test xmlns:prefix="prefixNS" xmlns="defaultNS" ', - 'name="value" prefix:name="prefixValue">', - 'test', - '</prefix:test>' -] - -{ #category : #accessing } -SAXHandlerTest >> prefixedXMLSourcePrefixURILocalNameSelectors [ - ^ #(startDocument - startPrefixMapping:uri: startPrefixMapping:uri: - startElement:prefix:uri:localName:attributes: - characters: - endElement:prefix:uri:localName: - endPrefixMapping: endPrefixMapping: - endDocument) -] - -{ #category : #accessing } -SAXHandlerTest >> prefixedXMLSourcePrefixURILocalNameSelectorsNamespacesDisabled [ - ^ self removeNamespaceSelectorsFrom: - self prefixedXMLSourcePrefixURILocalNameSelectors -] - -{ #category : #accessing } -SAXHandlerTest >> prefixedXMLSourcePrefixURISelectors [ - ^ #(startDocument - startPrefixMapping:uri: startPrefixMapping:uri: - startElement:prefix:uri:attributes: - characters: - endElement:prefix:uri: - endPrefixMapping: endPrefixMapping: - endDocument) -] - -{ #category : #accessing } -SAXHandlerTest >> prefixedXMLSourcePrefixURISelectorsNamespacesDisabled [ - ^ self removeNamespaceSelectorsFrom: self prefixedXMLSourcePrefixURISelectors - -] - -{ #category : #accessing } -SAXHandlerTest >> prefixedXMLSourceSelectors [ - ^ #(startDocument - startPrefixMapping:uri: startPrefixMapping:uri: - startElement:attributes: - characters: - endElement: - endPrefixMapping: endPrefixMapping: - endDocument) -] - -{ #category : #accessing } -SAXHandlerTest >> prefixedXMLSourceSelectorsNamespacesDisabled [ - ^ self removeNamespaceSelectorsFrom: self prefixedXMLSourceSelectors - -] - -{ #category : #accessing } -SAXHandlerTest >> removeNamespaceSelectorsFrom: aSelectorCollection [ - ^ aSelectorCollection reject: [:each | - #(startPrefixMapping:uri: endPrefixMapping:) includes: each] - -] - -{ #category : #tests } -SAXHandlerTest >> testCharacters [ - | xml parser | - - xml := - '<test>one<non-empty>two</non-empty>three<!--comment-->', - 'four<empty></empty>five<?pi pi?>six</test>'. - - (parser := SAXRecordingHandler on: xml) - parseDocument. - self assert: - (parser wasSentSelectors: - #(startDocument - startElement:attributes: - characters: - startElement:attributes: - characters: - endElement: - characters: - comment: - characters: - startElement:attributes: - endElement: - characters: - processingInstruction:data: - characters: - endElement: - endDocument)). - - (parser allSentMessagesNamed: #characters:) - with: - #(#('one') - #('two') - #('three') - #('four') - #('five') - #('six')) - do: [:message :arguments | - self assert: message arguments = arguments]. -] - -{ #category : #tests } -SAXHandlerTest >> testComment [ - | xml parser | - - xml := ' - <!--before DTD--> - <!DOCTYPE test [<!--in DTD-->]> - <!--before element--> - <test> - <!--in element--> - </test> - <!--after element-->'. - - (parser := SAXRecordingHandler on: xml) - parseDocument. - self assert: - (parser wasSentSelectors: - #(startDocument - comment: - startDTD:publicID:systemID: - comment: - endDTD - comment: - startElement:attributes: - characters: - comment: - characters: - endElement: - comment: - endDocument)). - - (parser allSentMessagesNamed: #comment:) - with: - #(#('before DTD') - #('in DTD') - #('before element') - #('in element') - #('after element')) - do: [:message :arguments | - self assert: message arguments = arguments]. -] - -{ #category : #tests } -SAXHandlerTest >> testConfiguration [ - | parser oldConfiguration newConfiguration | - - parser := SAXHandler on: self prefixedXMLSource. - oldConfiguration := parser configuration. - self assert: oldConfiguration class == self configurationClass. - - newConfiguration := self configurationClass new. - self - assert: (parser configuration: newConfiguration) == parser; - assert: parser configuration class == self configurationClass. -] - -{ #category : #tests } -SAXHandlerTest >> testDecodesCharacters [ - | parser | - - parser := SAXHandler on: self prefixedXMLSource. - self - assert: parser decodesCharacters; - assert: (parser decodesCharacters: false) == parser; - deny: parser decodesCharacters; - assert: (parser decodesCharacters: true) == parser; - assert: parser decodesCharacters. -] - -{ #category : #tests } -SAXHandlerTest >> testDocumentReadLimit [ - | parser | - - parser := SAXHandler on: self prefixedXMLSource. - self - assert: parser documentReadLimit = XMLParserLimits defaultDocumentReadLimit; - assert: (parser documentReadLimit: 100000) == parser; - assert: parser documentReadLimit = 100000; - assert: (parser documentReadLimit: nil) == parser; - assert: parser documentReadLimit isNil. -] - -{ #category : #tests } -SAXHandlerTest >> testDocumentURI [ - | xml uri newURI parser | - - xml := self prefixedXMLSource. - uri := 'test/test.xml'. - newURI := 'new/new.xml'. - parser := - SAXHandler - on: xml - documentURI: uri. - self - assert: parser documentURI = uri; - assert: (parser documentURI: newURI) == parser; - assert: parser documentURI = newURI. - - "reusing on: should clear it" - self assert: (SAXHandler on: xml) documentURI = ''. -] - -{ #category : #tests } -SAXHandlerTest >> testEndCData [ - | xml parser | - - xml := '<test>one<![CDATA[two]>]]]]>three</test>'. - - (parser := SAXRecordingHandler on: xml) - parseDocument. - self assert: - (parser wasSentSelectors: - #(startDocument - startElement:attributes: - characters: - startCData - characters: - endCData - characters: - endElement: - endDocument)). - - (parser allSentMessagesNamed: #characters:) - with: - #(#('one') - #('two]>]]') - #('three')) - do: [:message :arguments | - self assert: message arguments = arguments]. -] - -{ #category : #tests } -SAXHandlerTest >> testEndDTD [ - #('<!DOCTYPE test PUBLIC "publicID" "systemID" [<!--comment-->]><test/>' - '<!DOCTYPE test SYSTEM "systemID" [<!--comment-->]><test/>' - '<!DOCTYPE test [<!--comment-->]><test/>') - do: [:xml | | parser | - (parser := SAXRecordingHandler on: xml) - parseDocument. - self assert: - (parser wasSentSelectors: - #(startDocument - startDTD:publicID:systemID: - comment: - endDTD - startElement:attributes: - endElement: - endDocument))]. -] - -{ #category : #tests } -SAXHandlerTest >> testEndDocument [ - | saxHandler parser | - - saxHandler := SAXRecordingHandler on: '<test></test>'. - parser := saxHandler parser. - - 3 timesRepeat: [ - parser parseToken. - self - deny: (saxHandler wasSentSelector: #endDocument); - deny: parser atEnd]. - - parser parseToken. - self - assert: (saxHandler wasSentSelector: #endDocument); - assert: parser atEnd. -] - -{ #category : #tests } -SAXHandlerTest >> testEndElement [ - | parser | - - (parser := SAXRecordingHandler on: self prefixedXMLSource) - parseDocument. - self - assert: (parser wasSentSelectors: self prefixedXMLSourceSelectors); - assert: (parser argumentsSentWith: #endElement:) = #('prefix:test'). - - (parser := SAXRecordingHandler on: self prefixedXMLSource) - usesNamespaces: false; - parseDocument. - self assert: - (parser wasSentSelectors: - self prefixedXMLSourceSelectorsNamespacesDisabled). - self assert: (parser argumentsSentWith: #endElement:) = #('prefix:test'). -] - -{ #category : #tests } -SAXHandlerTest >> testEndElementPrefixURI [ - | parser | - - (parser := SAXRecordingPrefixURIHandler on: self prefixedXMLSource) - parseDocument. - self assert: - (parser wasSentSelectors: self prefixedXMLSourcePrefixURISelectors). - self assert: - (parser argumentsSentWith: #endElement:prefix:uri:) = - #('prefix:test' 'prefix' 'prefixNS'). - - (parser := SAXRecordingPrefixURIHandler on: self prefixedXMLSource) - usesNamespaces: false; - parseDocument. - self assert: - (parser wasSentSelectors: - self prefixedXMLSourcePrefixURISelectorsNamespacesDisabled). - self assert: - (parser argumentsSentWith: #endElement:prefix:uri:) = - #('prefix:test' 'prefix' ''). -] - -{ #category : #tests } -SAXHandlerTest >> testEndElementPrefixURILocalName [ - | parser | - - (parser := SAXRecordingPrefixURILocalNameHandler on: self prefixedXMLSource) - parseDocument. - self assert: - (parser wasSentSelectors: - self prefixedXMLSourcePrefixURILocalNameSelectors). - self assert: - (parser argumentsSentWith: #endElement:prefix:uri:localName:) = - #('prefix:test' 'prefix' 'prefixNS' 'test'). - - (parser := SAXRecordingPrefixURILocalNameHandler on: self prefixedXMLSource) - usesNamespaces: false; - parseDocument. - self assert: - (parser wasSentSelectors: - self prefixedXMLSourcePrefixURILocalNameSelectorsNamespacesDisabled). - self assert: - (parser argumentsSentWith: #endElement:prefix:uri:localName:) = - #('prefix:test' 'prefix' '' 'test'). -] - -{ #category : #tests } -SAXHandlerTest >> testEndEntity [ - | parser messages | - - (parser := SAXRecordingPrefixURILocalNameHandler on: self generalEntityXMLSource) - parseDocument. - self assert: (parser wasSentSelectors: self generalEntityXMLSourceSelectors). - messages := parser allSentMessagesNamed: #endEntity:. - self - assert: messages first arguments = #('second'); - assert: messages second arguments = #('first'). -] - -{ #category : #tests } -SAXHandlerTest >> testEndPrefixMapping [ - | parser messages | - - (parser := SAXRecordingPrefixURILocalNameHandler on: self prefixedXMLSource) - parseDocument. - self assert: - (parser wasSentSelectors: - self prefixedXMLSourcePrefixURILocalNameSelectors). - messages := parser allSentMessagesNamed: #endPrefixMapping:. - self - assert: messages size = 2; - assert: messages first arguments = #('prefix'); - assert: messages second arguments = #(''). - - (parser := - SAXRecordingPrefixURILocalNameHandler on: - '<one xmlns="defaultNS"><two xmlns="defaultNS"/></one>') - parseDocument. - messages := parser allSentMessagesNamed: #endPrefixMapping:. - self - assert: messages size = 1; - assert: messages first arguments = #(''). - - (parser := - SAXRecordingPrefixURILocalNameHandler on: - '<one xmlns="defaultNS"><two xmlns="newDefaultNS"/></one>') - parseDocument. - messages := parser allSentMessagesNamed: #endPrefixMapping:. - self - assert: messages size = 2; - assert: messages first arguments = #(''); - assert: messages second arguments = #(''). - - (parser := - SAXRecordingPrefixURILocalNameHandler on: - '<one xmlns:xml="', XMLNamespaceScope xmlNamespaceURI, '"/>') - parseDocument. - self assert: - (parser allSentMessagesNamed: #endPrefixMapping:) isEmpty. -] - -{ #category : #tests } -SAXHandlerTest >> testExternalEntityResolver [ - | parser oldResolver newResolver | - - parser := SAXHandler on: self prefixedXMLSource. - oldResolver := parser externalEntityResolver. - self assert: oldResolver class == self externalEntityResolverClass. - - newResolver := self externalEntityResolverClass new. - self - assert: (parser externalEntityResolver: newResolver) == parser; - assert: parser externalEntityResolver == newResolver. -] - -{ #category : #tests } -SAXHandlerTest >> testHasParser [ - | parser | - - parser := SAXTestingMessageRecordingHandler on: self prefixedXMLSource. - self deny: parser hasParser. - parser parseDocument. - - parser hasParserResults do: [:each | - self assert: each]. - - parser on: self prefixedXMLSource. - self deny: parser hasParser. -] - -{ #category : #tests } -SAXHandlerTest >> testIgnorableWhitespace [ - | dtd xml parser | - - dtd := ' - <!DOCTYPE one [ - <!ELEMENT one (two)> - <!ELEMENT two (#PCDATA|three)*> - <!ELEMENT three ANY> - ]>'. - xml := ' - <one> - <two> - test - <three> - test - </three> - test - </two> - </one> - '. - - (parser := SAXRecordingPrefixURILocalNameHandler on: dtd, xml) parseDocument. - self assert: - (parser wasSentSelectors: - #(startDocument - startDTD:publicID:systemID: - elementDeclaration:contentModel: - elementDeclaration:contentModel: - elementDeclaration:contentModel: - endDTD - startElement:prefix:uri:localName:attributes: - ignorableWhitespace: - startElement:prefix:uri:localName:attributes: - characters: - startElement:prefix:uri:localName:attributes: - characters: - endElement:prefix:uri:localName: - characters: - endElement:prefix:uri:localName: - ignorableWhitespace: - endElement:prefix:uri:localName: - endDocument)). - (parser allSentMessagesNamed: #ignorableWhitespace:) do: [:each | - self assert: each arguments first isXMLWhitespace]. - - (parser := SAXRecordingPrefixURILocalNameHandler on: xml) parseDocument. - self assert: - (parser wasSentSelectors: - #(startDocument - startElement:prefix:uri:localName:attributes: - characters: - startElement:prefix:uri:localName:attributes: - characters: - startElement:prefix:uri:localName:attributes: - characters: - endElement:prefix:uri:localName: - characters: - endElement:prefix:uri:localName: - characters: - endElement:prefix:uri:localName: - endDocument)). - - self assert: - (parser allSentMessagesNamed: #characters:) first arguments first isXMLWhitespace. - self assert: - (parser allSentMessagesNamed: #characters:) last arguments first isXMLWhitespace. -] - -{ #category : #tests } -SAXHandlerTest >> testInterruptParsing [ - | uniqueSelectors parser | - - uniqueSelectors := OrderedCollection new. - self prefixedXMLSourcePrefixURILocalNameSelectors do: [:each | - (uniqueSelectors includes: each) - ifFalse: [uniqueSelectors addLast: each]]. - uniqueSelectors do: [:each | - (parser := - SAXInterruptingRecordingPrefixURILocalNameHandler on: - self prefixedXMLSource) - interruptOn: each; - parseDocument. - self assert: - (parser wasSentSelectors: - ((self prefixedXMLSourcePrefixURILocalNameSelectors copyUpTo: each) copyWith: each))]. -] - -{ #category : #tests } -SAXHandlerTest >> testIsInCDataSection [ - | xml parser | - - xml := '<test>one<![CDATA[two]]>three<![CDATA[four]]></test>'. - parser := SAXTestingMessageRecordingHandler on: xml. - self deny: parser isInCDataSection. - parser parseDocument. - - parser allSentMessages - with: parser isInCDataSectionResults - do: [:message :result | - ((#(startCData #endCData) includes: message selector) - or: [message selector == #characters: - and: [#('two' 'four') includes: message arguments first]]) - ifTrue: [self assert: result] - ifFalse: [self deny: result]]. - - parser isInCDataSection: true. - self assert: parser isInCDataSection. - parser on: xml. - self deny: parser isInCDataSection. -] - -{ #category : #tests } -SAXHandlerTest >> testIsInContent [ - | xml parser seenElement | - - xml := '<?xml version="1.0"?> - <!--comment--> - <?target data?>', - self generalEntityXMLSource, - '<?target data?> - <!--comment-->'. - parser := SAXTestingMessageRecordingHandler on: xml. - self deny: parser isInContent. - parser parseDocument. - - seenElement := false. - parser allSentSelectors - with: parser isInContentResults - do: [:selector :result | - (seenElement - or: [seenElement := selector asString beginsWith: 'startElement']) - ifTrue: [self assert: result] - ifFalse: [self deny: result]]. - - self assert: parser isInContent. - parser on: xml. - self deny: parser isInContent. -] - -{ #category : #tests } -SAXHandlerTest >> testIsValidating [ - | parser | - - parser := SAXHandler on: self prefixedXMLSource. - self - assert: parser isValidating; - assert: (parser isValidating: false) == parser; - deny: parser isValidating; - assert: (parser isValidating: true) == parser; - assert: parser isValidating. -] - -{ #category : #tests } -SAXHandlerTest >> testMaxEntityReplacementDepth [ - | parser | - - parser := SAXHandler on: ''. - self assert: - parser maxEntityReplacementDepth = - XMLParserLimits defaultMaxEntityReplacementDepth. - self - assert: (parser maxEntityReplacementDepth: 20) == parser; - assert: parser maxEntityReplacementDepth = 20; - assert: (parser maxEntityReplacementDepth: nil) == parser; - assert: parser maxEntityReplacementDepth isNil. -] - -{ #category : #tests } -SAXHandlerTest >> testNew [ - self - should: [SAXHandler new] - raise: Error -] - -{ #category : #tests } -SAXHandlerTest >> testOn [ - | parser oldConfiguraiton | - - parser := - SAXHandler - on: self prefixedXMLSource - documentURI: 'oldURI'. - oldConfiguraiton := parser configuration. - parser parseDocument. - self - assert: (parser on: self generalEntityXMLSource) == parser; - assert: parser input = self generalEntityXMLSource; - deny: parser documentURI = 'oldURI'; - deny: parser configuration == oldConfiguraiton. -] - -{ #category : #tests } -SAXHandlerTest >> testOptimizeForLargeDocuments [ - | parser | - - parser := SAXHandler on: ''. - - parser optimizeForLargeDocuments. - self - deny: parser isValidating; - deny: parser usesNamespaces; - assert: parser documentReadLimit isNil. -] - -{ #category : #tests } -SAXHandlerTest >> testPreservesUndeclaredEntityReferences [ - | parser | - - parser := SAXHandler on: ''. - self deny: parser preservesUndeclaredEntityReferences. - - "enabling should disable validation" - self - assert: (parser preservesUndeclaredEntityReferences: true) == parser; - assert: parser preservesUndeclaredEntityReferences; - deny: parser isValidating. - - self - assert: (parser isValidating: true) == parser; - assert: parser isValidating; - deny: parser preservesUndeclaredEntityReferences. -] - -{ #category : #tests } -SAXHandlerTest >> testProcessingInstructionData [ - | xml parser | - - xml := ' - <?before DTD?> - <!DOCTYPE test [<?in DTD?>]> - <?before element?> - <test> - <?in element?> - </test> - <?after element?>'. - - (parser := SAXRecordingHandler on: xml) - parseDocument. - self assert: - (parser wasSentSelectors: - #(startDocument - processingInstruction:data: - startDTD:publicID:systemID: - processingInstruction:data: - endDTD - processingInstruction:data: - startElement:attributes: - characters: - processingInstruction:data: - characters: - endElement: - processingInstruction:data: - endDocument)). - - (parser allSentMessagesNamed: #processingInstruction:data:) - with: - #(#('before' 'DTD') - #('in' 'DTD') - #('before' 'element') - #('in' 'element') - #('after' 'element')) - do: [:message :arguments | - self assert: message arguments = arguments]. -] - -{ #category : #tests } -SAXHandlerTest >> testRemoveLimits [ - | parser readLimit depthLimit | - - readLimit := 100. - depthLimit := 5. - (parser := SAXHandler on: '') - documentReadLimit: readLimit; - maxEntityReplacementDepth: depthLimit. - self - assert: parser documentReadLimit = readLimit; - assert: parser maxEntityReplacementDepth = depthLimit. - - self - assert: parser removeLimits == parser; - assert: parser documentReadLimit isNil; - assert: parser maxEntityReplacementDepth isNil. -] - -{ #category : #tests } -SAXHandlerTest >> testReplacesContentEntityReferences [ - | parser | - - parser := SAXHandler on: self prefixedXMLSource. - self - assert: parser replacesContentEntityReferences; - assert: (parser replacesContentEntityReferences: false) == parser; - deny: parser replacesContentEntityReferences; - assert: (parser replacesContentEntityReferences: true) == parser; - assert: parser replacesContentEntityReferences. -] - -{ #category : #tests } -SAXHandlerTest >> testRequiresSchema [ - | parser | - - (parser := SAXHandler on: '') isValidating: false. - self deny: parser requiresSchema. - - "enabling should force validation" - self - assert: (parser requiresSchema: true) == parser; - assert: parser requiresSchema; - assert: parser isValidating. - - self - assert: (parser isValidating: false) == parser; - deny: parser isValidating; - deny: parser requiresSchema. -] - -{ #category : #tests } -SAXHandlerTest >> testResolvesExternalEntities [ - | parser | - - parser := SAXHandler on: self prefixedXMLSource. - "should not resolve external entities by default for security" - self - deny: parser resolvesExternalEntities; - assert: (parser resolvesExternalEntities: true) == parser; - assert: parser resolvesExternalEntities; - assert: (parser resolvesExternalEntities: false) == parser; - deny: parser resolvesExternalEntities. -] - -{ #category : #tests } -SAXHandlerTest >> testSkippedEntity [ - | xml parser | - - xml := '<!DOCTYPE root SYSTEM "extern.dtd"><root>&undeclared;</root>'. - (parser := SAXRecordingPrefixURILocalNameHandler on: xml) - isValidating: false; - parseDocument. - self assert: - (parser wasSentSelectors: - #(startDocument - startDTD:publicID:systemID: - endDTD - startElement:prefix:uri:localName:attributes: - skippedEntity: - endElement:prefix:uri:localName: - endDocument)). - self assert: (parser argumentsSentWith: #skippedEntity:) = #('undeclared'). -] - -{ #category : #tests } -SAXHandlerTest >> testSkippedEntityUndeclaredPreserved [ - | xml parser | - - xml := '<!DOCTYPE root SYSTEM "extern.dtd"><root>&undeclared;</root>'. - (parser := SAXRecordingPrefixURILocalNameHandler on: xml) - isValidating: false; - preservesUndeclaredEntityReferences: true; - parseDocument. - self assert: - (parser wasSentSelectors: - #(startDocument - startDTD:publicID:systemID: - endDTD - startElement:prefix:uri:localName:attributes: - skippedEntity: - characters: - endElement:prefix:uri:localName: - endDocument)). - self - assert: (parser argumentsSentWith: #skippedEntity:) = #('undeclared'); - assert: (parser argumentsSentWith: #characters:) = #('&undeclared;'). -] - -{ #category : #tests } -SAXHandlerTest >> testSkippedEntityUnreplaced [ - | xml parser | - - xml := '<!DOCTYPE root [<!ENTITY declared "replacement">]><root>&declared;</root>'. - (parser := SAXRecordingPrefixURILocalNameHandler on: xml) - isValidating: true; - replacesContentEntityReferences: false; - parseDocument. - self assert: - (parser wasSentSelectors: - #(startDocument - startDTD:publicID:systemID: - generalEntityDeclaration:replacement: - endDTD - startElement:prefix:uri:localName:attributes: - skippedEntity: - characters: - endElement:prefix:uri:localName: - endDocument)). - self - assert: (parser argumentsSentWith: #skippedEntity:) = #('declared'); - assert: (parser argumentsSentWith: #characters:) = #('&declared;'). -] - -{ #category : #tests } -SAXHandlerTest >> testStartCData [ - | xml parser | - - xml := '<test>one<![CDATA[<![CDATA[two]]>three</test>'. - - (parser := SAXRecordingHandler on: xml) - parseDocument. - self assert: - (parser wasSentSelectors: - #(startDocument - startElement:attributes: - characters: - startCData - characters: - endCData - characters: - endElement: - endDocument)). - - (parser allSentMessagesNamed: #characters:) - with: - #(#('one') - #('<![CDATA[two') - #('three')) - do: [:message :arguments | - self assert: message arguments = arguments]. -] - -{ #category : #tests } -SAXHandlerTest >> testStartDTDPublicIDSystemID [ - #('<!DOCTYPE test PUBLIC "publicID" "systemID"><test/>' - '<!DOCTYPE test SYSTEM "systemID"><test/>' - '<!DOCTYPE test><test/>') - with: - #(#('test' 'publicID' 'systemID') - #('test' '' 'systemID') - #('test' '' '')) - do: [:xml :arguments | | parser | - (parser := SAXRecordingHandler on: xml) - parseDocument. - self assert: - (parser wasSentSelectors: - #(startDocument - startDTD:publicID:systemID: - endDTD - startElement:attributes: - endElement: - endDocument)). - - self assert: - (parser argumentsSentWith: #startDTD:publicID:systemID:) = - arguments]. -] - -{ #category : #tests } -SAXHandlerTest >> testStartDocument [ - | saxHandler parser | - - saxHandler := SAXRecordingHandler on: '<test></test>'. - parser := saxHandler parser. - self deny: (saxHandler wasSentSelector: #startDocument). - parser parseToken. - self assert: (saxHandler wasSentSelector: #startDocument). -] - -{ #category : #tests } -SAXHandlerTest >> testStartElementAttributes [ - | parser arguments | - - (parser := SAXRecordingHandler on: self prefixedXMLSource) - parseDocument. - self assert: (parser wasSentSelectors: self prefixedXMLSourceSelectors). - arguments := parser argumentsSentWith: #startElement:attributes:. - self - assert: arguments size = 2; - assert: arguments first = 'prefix:test'; - assert: arguments second = self prefixedXMLAttributes. - - (parser := SAXRecordingHandler on: self prefixedXMLSource) - usesNamespaces: false; - parseDocument. - self assert: - (parser wasSentSelectors: - self prefixedXMLSourceSelectorsNamespacesDisabled). - arguments := parser argumentsSentWith: #startElement:attributes:. - self - assert: arguments size = 2; - assert: arguments first = 'prefix:test'; - assert: arguments second = self prefixedXMLAttributesNamespacesDisabled. -] - -{ #category : #tests } -SAXHandlerTest >> testStartElementPrefixURIAttributes [ - | parser arguments | - - (parser := SAXRecordingPrefixURIHandler on: self prefixedXMLSource) - parseDocument. - self assert: - (parser wasSentSelectors: self prefixedXMLSourcePrefixURISelectors). - arguments := parser argumentsSentWith: #startElement:prefix:uri:attributes:. - self - assert: arguments size = 4; - assert: arguments first = 'prefix:test'; - assert: arguments second = 'prefix'; - assert: arguments third = 'prefixNS'; - assert: arguments fourth = self prefixedXMLAttributes. - - (parser := SAXRecordingPrefixURIHandler on: self prefixedXMLSource) - usesNamespaces: false; - parseDocument. - self assert: - (parser wasSentSelectors: - self prefixedXMLSourcePrefixURISelectorsNamespacesDisabled). - arguments := parser argumentsSentWith: #startElement:prefix:uri:attributes:. - self - assert: arguments size = 4; - assert: arguments first = 'prefix:test'; - assert: arguments second = 'prefix'; - assert: arguments third = ''; - assert: arguments fourth = self prefixedXMLAttributesNamespacesDisabled. -] - -{ #category : #tests } -SAXHandlerTest >> testStartElementPrefixURILocalNameAttributes [ - | parser arguments | - - (parser := SAXRecordingPrefixURILocalNameHandler on: self prefixedXMLSource) - parseDocument. - self assert: - (parser wasSentSelectors: - self prefixedXMLSourcePrefixURILocalNameSelectors). - arguments := - parser argumentsSentWith: #startElement:prefix:uri:localName:attributes:. - self - assert: arguments size = 5; - assert: arguments first = 'prefix:test'; - assert: arguments second = 'prefix'; - assert: arguments third = 'prefixNS'; - assert: arguments fourth = 'test'; - assert: arguments fifth = self prefixedXMLAttributes. - - (parser := SAXRecordingPrefixURILocalNameHandler on: self prefixedXMLSource) - usesNamespaces: false; - parseDocument. - self assert: - (parser wasSentSelectors: - self prefixedXMLSourcePrefixURILocalNameSelectorsNamespacesDisabled). - arguments := - parser argumentsSentWith: #startElement:prefix:uri:localName:attributes:. - self - assert: arguments size = 5; - assert: arguments first = 'prefix:test'; - assert: arguments second = 'prefix'; - assert: arguments third = ''; - assert: arguments fourth = 'test'; - assert: arguments fifth = self prefixedXMLAttributesNamespacesDisabled. -] - -{ #category : #tests } -SAXHandlerTest >> testStartEntity [ - | parser messages | - - (parser := SAXRecordingPrefixURILocalNameHandler on: self generalEntityXMLSource) - parseDocument. - self assert: (parser wasSentSelectors: self generalEntityXMLSourceSelectors). - messages := parser allSentMessagesNamed: #startEntity:. - self - assert: messages first arguments = #('first'); - assert: messages second arguments = #('second'). -] - -{ #category : #tests } -SAXHandlerTest >> testStartPrefixMappingURI [ - | parser messages | - - (parser := SAXRecordingPrefixURILocalNameHandler on: self prefixedXMLSource) - parseDocument. - self assert: - (parser wasSentSelectors: - self prefixedXMLSourcePrefixURILocalNameSelectors). - messages := parser allSentMessagesNamed: #startPrefixMapping:uri:. - self - assert: messages size = 2; - assert: messages first arguments = #('prefix' 'prefixNS'); - assert: messages second arguments = #('' 'defaultNS'). - - (parser := - SAXRecordingPrefixURILocalNameHandler on: - '<one xmlns="defaultNS"><two xmlns="defaultNS"/></one>') - parseDocument. - messages := parser allSentMessagesNamed: #startPrefixMapping:uri:. - self - assert: messages size = 1; - assert: messages first arguments = #('' 'defaultNS'). - - (parser := - SAXRecordingPrefixURILocalNameHandler on: - '<one xmlns="defaultNS"><two xmlns="newDefaultNS"/></one>') - parseDocument. - messages := parser allSentMessagesNamed: #startPrefixMapping:uri:. - self - assert: messages size = 2; - assert: messages first arguments = #('' 'defaultNS'); - assert: messages second arguments = #('' 'newDefaultNS'). - - (parser := - SAXRecordingPrefixURILocalNameHandler on: - '<one xmlns:xml="', XMLNamespaceScope xmlNamespaceURI, '"/>') - parseDocument. - self assert: - (parser allSentMessagesNamed: #startPrefixMapping:uri:) isEmpty. -] - -{ #category : #tests } -SAXHandlerTest >> testUsesNamespaces [ - | parser | - - parser := SAXHandler on: self prefixedXMLSource. - self - assert: parser usesNamespaces; - assert: (parser usesNamespaces: false) == parser; - deny: parser usesNamespaces; - assert: (parser usesNamespaces: true) == parser; - assert: parser usesNamespaces. -] - -{ #category : #tests } -SAXHandlerTest >> testXMLVersionEncodingStandalone [ - | selectors | - - selectors := - #(startDocument - xmlVersion:encoding:standalone: - startElement:prefix:uri:localName:attributes: - endElement:prefix:uri:localName: - endDocument). - #('<?xml version="1.0" encoding="UTF-8"?><test/>' - '<?xml version="1.00" encoding="UTF-8"?><test/>' - '<?xml version="1.000" encoding="UTF-8"?><test/>' - '<?xml version="1.1" encoding="UTF-8"?><test/>' - '<?xml version="1.10" encoding="UTF-8"?><test/>' - '<?xml version="1.100" encoding="UTF-8"?><test/>' - '<?xml version="1.0" encoding="UTF-16"?><test/>' - '<?xml version="1.0" encoding="Latin-1"?><test/>' - '<?xml version="1.0" encoding="UTF-8" standalone="no"?><test/>' - '<?xml version="1.0" encoding="UTF-8" standalone="yes"?><test/>') - with: - #(#(1.0 'UTF-8' false) - #(1.0 'UTF-8' false) - #(1.0 'UTF-8' false) - #(1.1 'UTF-8' false) - #(1.1 'UTF-8' false) - #(1.1 'UTF-8' false) - #(1.0 'UTF-16' false) - #(1.0 'Latin-1' false) - #(1.0 'UTF-8' false) - #(1.0 'UTF-8' true)) - do: [:source :arguments | | parser | - (parser := SAXRecordingPrefixURILocalNameHandler on: source) - parseDocument. - self - assert: (parser wasSentSelectors: selectors); - assert: - (parser argumentsSentWith: #xmlVersion:encoding:standalone:) = - arguments]. -] diff --git a/src/XML-Tests-Parser/SAXInterruptingRecordingPrefixURILocalNameHandler.class.st b/src/XML-Tests-Parser/SAXInterruptingRecordingPrefixURILocalNameHandler.class.st deleted file mode 100644 index c0da2a18a..000000000 --- a/src/XML-Tests-Parser/SAXInterruptingRecordingPrefixURILocalNameHandler.class.st +++ /dev/null @@ -1,343 +0,0 @@ -" -An interrupting version to test #interruptParsing. -" -Class { - #name : #SAXInterruptingRecordingPrefixURILocalNameHandler, - #superclass : #SAXRecordingPrefixURILocalNameHandler, - #instVars : [ - 'interruptOn' - ], - #category : #'XML-Tests-Parser' -} - -{ #category : #private } -SAXInterruptingRecordingPrefixURILocalNameHandler class >> generateInterruptingRecordingHandlerMethods [ - " - self generateInterruptingRecordingHandlerMethods - " - - #(#'handling - content' - #'handling - lexical' - #'handling - declaration') - do: [:handlerCategory | - (SAXHandler selectorsInCategory: handlerCategory) do: [:handlerSelector | | parsedMethod sourceStream | - parsedMethod := RBParser parseMethod: (SAXHandler sourceCodeAt: handlerSelector). - (sourceStream := String new writeStream) - nextPutAll: parsedMethod selectorAndArgumentNames; - cr; - nextPutAll: ' super'. - 1 to: parsedMethod keywords size do: [:i | - parsedMethod keywords size > 1 - ifTrue: [ - sourceStream - cr; - nextPutAll: ' '] - ifFalse: [sourceStream space]. - sourceStream nextPutAll: (parsedMethod keywords at: i). - parsedMethod arguments - ifNotEmpty: [ - sourceStream - space; - nextPutAll: (parsedMethod argumentNames at: i)]]. - sourceStream - nextPut: $.; - cr; - cr; - nextPutAll: ' self interruptOn = #', handlerSelector asString; - cr; - nextPutAll: ' ifTrue: [self interruptParsing].'. - self - compile: sourceStream contents - classified: handlerCategory]] -] - -{ #category : #'handling - declaration' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> attributeDeclaration: anElementName name: anAttributeName type: aType defaultPragma: aDefaultPragma defaultValue: aDefaultValue [ - super - attributeDeclaration: anElementName - name: anAttributeName - type: aType - defaultPragma: aDefaultPragma - defaultValue: aDefaultValue. - - self interruptOn = #attributeDeclaration:name:type:defaultPragma:defaultValue: - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - content' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> characters: aString [ - super characters: aString. - - self interruptOn = #characters: - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - lexical' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> comment: aString [ - super comment: aString. - - self interruptOn = #comment: - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - declaration' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> elementDeclaration: anElementName contentModel: aContentModel [ - super - elementDeclaration: anElementName - contentModel: aContentModel. - - self interruptOn = #elementDeclaration:contentModel: - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - lexical' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> endCData [ - super endCData. - - self interruptOn = #endCData - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - lexical' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> endDTD [ - super endDTD. - - self interruptOn = #endDTD - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - content' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> endDocument [ - super endDocument. - - self interruptOn = #endDocument - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - content' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> endElement: aQualifiedName [ - super endElement: aQualifiedName. - - self interruptOn = #endElement: - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - content' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> endElement: aQualifiedName prefix: aPrefix uri: aURI [ - super - endElement: aQualifiedName - prefix: aPrefix - uri: aURI. - - self interruptOn = #endElement:prefix:uri: - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - content' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> endElement: aQualifiedName prefix: aPrefix uri: aURI localName: aLocalName [ - super - endElement: aQualifiedName - prefix: aPrefix - uri: aURI - localName: aLocalName. - - self interruptOn = #endElement:prefix:uri:localName: - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - lexical' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> endEntity: anEntityName [ - super endEntity: anEntityName. - - self interruptOn = #endEntity: - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - content' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> endPrefixMapping: aPrefix [ - super endPrefixMapping: aPrefix. - - self interruptOn = #endPrefixMapping: - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - declaration' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> generalEntityDeclaration: aName publicID: aPublicID systemID: aSystemID ndata: aNotationName [ - super - generalEntityDeclaration: aName - publicID: aPublicID - systemID: aSystemID - ndata: aNotationName. - - self interruptOn = #generalEntityDeclaration:publicID:systemID:ndata: - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - declaration' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> generalEntityDeclaration: aName replacement: aReplacement [ - super - generalEntityDeclaration: aName - replacement: aReplacement. - - self interruptOn = #generalEntityDeclaration:replacement: - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - content' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> ignorableWhitespace: aString [ - super ignorableWhitespace: aString. - - self interruptOn = #ignorableWhitespace: - ifTrue: [self interruptParsing]. -] - -{ #category : #accessing } -SAXInterruptingRecordingPrefixURILocalNameHandler >> interruptOn [ - ^ interruptOn -] - -{ #category : #accessing } -SAXInterruptingRecordingPrefixURILocalNameHandler >> interruptOn: aSelector [ - interruptOn := aSelector -] - -{ #category : #'handling - declaration' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> notationDeclaration: aName publicID: aPublicID systemID: aSystemID [ - super - notationDeclaration: aName - publicID: aPublicID - systemID: aSystemID. - - self interruptOn = #notationDeclaration:publicID:systemID: - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - declaration' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> parameterEntityDeclaration: aName publicID: aPublicID systemID: aSystemID [ - super - parameterEntityDeclaration: aName - publicID: aPublicID - systemID: aSystemID. - - self interruptOn = #parameterEntityDeclaration:publicID:systemID: - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - declaration' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> parameterEntityDeclaration: aName replacement: aReplacement [ - super - parameterEntityDeclaration: aName - replacement: aReplacement. - - self interruptOn = #parameterEntityDeclaration:replacement: - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - content' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> processingInstruction: aTargetString data: aDataString [ - super - processingInstruction: aTargetString - data: aDataString. - - self interruptOn = #processingInstruction:data: - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - content' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> skippedEntity: anEntityName [ - super skippedEntity: anEntityName. - - self interruptOn = #skippedEntity: - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - lexical' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> startCData [ - super startCData. - - self interruptOn = #startCData - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - lexical' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> startDTD: aRootElementName publicID: aPublicID systemID: aSystemID [ - super - startDTD: aRootElementName - publicID: aPublicID - systemID: aSystemID. - - self interruptOn = #startDTD:publicID:systemID: - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - content' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> startDocument [ - super startDocument. - - self interruptOn = #startDocument - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - content' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> startElement: aQualifiedName attributes: anAttributeDictionary [ - super - startElement: aQualifiedName - attributes: anAttributeDictionary. - - self interruptOn = #startElement:attributes: - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - content' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> startElement: aQualifiedName prefix: aPrefix uri: aURI attributes: anAttributeDictionary [ - super - startElement: aQualifiedName - prefix: aPrefix - uri: aURI - attributes: anAttributeDictionary. - - self interruptOn = #startElement:prefix:uri:attributes: - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - content' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> startElement: aQualifiedName prefix: aPrefix uri: aURI localName: aLocalName attributes: anAttributeDictionary [ - super - startElement: aQualifiedName - prefix: aPrefix - uri: aURI - localName: aLocalName - attributes: anAttributeDictionary. - - self interruptOn = #startElement:prefix:uri:localName:attributes: - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - lexical' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> startEntity: anEntityName [ - super startEntity: anEntityName. - - self interruptOn = #startEntity: - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - content' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> startPrefixMapping: aPrefix uri: aURI [ - super - startPrefixMapping: aPrefix - uri: aURI. - - self interruptOn = #startPrefixMapping:uri: - ifTrue: [self interruptParsing]. -] - -{ #category : #'handling - lexical' } -SAXInterruptingRecordingPrefixURILocalNameHandler >> xmlVersion: aVersionFloat encoding: anEncoding standalone: aBoolean [ - super - xmlVersion: aVersionFloat - encoding: anEncoding - standalone: aBoolean. - - self interruptOn = #xmlVersion:encoding:standalone: - ifTrue: [self interruptParsing]. -] diff --git a/src/XML-Tests-Parser/SAXRecordingHandler.class.st b/src/XML-Tests-Parser/SAXRecordingHandler.class.st deleted file mode 100644 index 11b15cfa0..000000000 --- a/src/XML-Tests-Parser/SAXRecordingHandler.class.st +++ /dev/null @@ -1,395 +0,0 @@ -" -This class records the final element events (startElement:attributes: and #endElement:) used when no others are defined, as well as every other non-element event. -" -Class { - #name : #SAXRecordingHandler, - #superclass : #SAXHandler, - #instVars : [ - 'messageRecorder' - ], - #category : #'XML-Tests-Parser' -} - -{ #category : #private } -SAXRecordingHandler class >> generateRecordingHandlerMethods [ - " - self generateRecordingHandlerMethods - " - - #(#'handling - content' - #'handling - lexical' - #'handling - declaration') - do: [:handlerCategory | - (SAXHandler selectorsInCategory: handlerCategory) do: [:handlerSelector | | parsedMethod sourceStream | - parsedMethod := RBParser parseMethod: (SAXHandler sourceCodeAt: handlerSelector). - (sourceStream := String new writeStream) - nextPutAll: parsedMethod selectorAndArgumentNames; - cr; - nextPutAll: ' self messageRecorder'; - cr; - nextPutAll: ' recordMessageReceiver: self'; - cr; - nextPutAll: ' selector: #', handlerSelector asString. - parsedMethod arguments - ifNotEmpty: [ - sourceStream - cr; - nextPutAll: ' arguments:'; - cr; - nextPutAll: ' (OrderedCollection new'. - parsedMethod argumentNames do: [:each | - sourceStream - cr; - nextPutAll: ' addLast: ', each, ';']. - sourceStream - cr; - nextPutAll: ' yourself)']. - - self - compile: sourceStream contents - classified: handlerCategory]] -] - -{ #category : #accessing } -SAXRecordingHandler >> allSentMessages [ - ^ self messageRecorder messages asArray -] - -{ #category : #accessing } -SAXRecordingHandler >> allSentMessagesNamed: aName [ - ^ (self messageRecorder messagesSelect: [:each | - each selector = aName asSymbol]) asArray -] - -{ #category : #accessing } -SAXRecordingHandler >> allSentSelectors [ - ^ (self messageRecorder messagesCollect: [:each | - each selector]) asArray -] - -{ #category : #accessing } -SAXRecordingHandler >> argumentsSentWith: aSelector [ - self messageRecorder messagesDo: [:each | - each selector = aSelector - ifTrue: [^ each arguments]]. - ^ #(). -] - -{ #category : #'handling - declaration' } -SAXRecordingHandler >> attributeDeclaration: anElementName name: anAttributeName type: aType defaultPragma: aDefaultPragma defaultValue: aDefaultValue [ - self - recordMessageReceiver: self - selector: #attributeDeclaration:name:type:defaultPragma:defaultValue: - arguments: - (OrderedCollection new - addLast: anElementName; - addLast: anAttributeName; - addLast: aType; - addLast: aDefaultPragma; - addLast: aDefaultValue; - yourself) -] - -{ #category : #'handling - content' } -SAXRecordingHandler >> characters: aString [ - self - recordMessageReceiver: self - selector: #characters: - arguments: - (OrderedCollection new - addLast: aString; - yourself) -] - -{ #category : #'handling - lexical' } -SAXRecordingHandler >> comment: aString [ - self - recordMessageReceiver: self - selector: #comment: - arguments: - (OrderedCollection new - addLast: aString; - yourself) -] - -{ #category : #'handling - declaration' } -SAXRecordingHandler >> elementDeclaration: anElementName contentModel: aContentModel [ - self - recordMessageReceiver: self - selector: #elementDeclaration:contentModel: - arguments: - (OrderedCollection new - addLast: anElementName; - addLast: aContentModel; - yourself) -] - -{ #category : #'handling - lexical' } -SAXRecordingHandler >> endCData [ - self - recordMessageReceiver: self - selector: #endCData -] - -{ #category : #'handling - lexical' } -SAXRecordingHandler >> endDTD [ - self - recordMessageReceiver: self - selector: #endDTD -] - -{ #category : #'handling - content' } -SAXRecordingHandler >> endDocument [ - self - recordMessageReceiver: self - selector: #endDocument -] - -{ #category : #'handling - content' } -SAXRecordingHandler >> endElement: aQualifiedName [ - self - recordMessageReceiver: self - selector: #endElement: - arguments: - (OrderedCollection new - addLast: aQualifiedName; - yourself) -] - -{ #category : #'handling - lexical' } -SAXRecordingHandler >> endEntity: anEntityName [ - self - recordMessageReceiver: self - selector: #endEntity: - arguments: - (OrderedCollection new - addLast: anEntityName; - yourself) -] - -{ #category : #'handling - content' } -SAXRecordingHandler >> endPrefixMapping: aPrefix [ - self - recordMessageReceiver: self - selector: #endPrefixMapping: - arguments: - (OrderedCollection new - addLast: aPrefix; - yourself) -] - -{ #category : #'handling - declaration' } -SAXRecordingHandler >> generalEntityDeclaration: aName publicID: aPublicID systemID: aSystemID ndata: aNotationName [ - self - recordMessageReceiver: self - selector: #generalEntityDeclaration:publicID:systemID:ndata: - arguments: - (OrderedCollection new - addLast: aName; - addLast: aPublicID; - addLast: aSystemID; - addLast: aNotationName; - yourself) -] - -{ #category : #'handling - declaration' } -SAXRecordingHandler >> generalEntityDeclaration: aName replacement: aReplacement [ - self - recordMessageReceiver: self - selector: #generalEntityDeclaration:replacement: - arguments: - (OrderedCollection new - addLast: aName; - addLast: aReplacement; - yourself) -] - -{ #category : #'handling - content' } -SAXRecordingHandler >> ignorableWhitespace: aString [ - self - recordMessageReceiver: self - selector: #ignorableWhitespace: - arguments: - (OrderedCollection new - addLast: aString; - yourself) -] - -{ #category : #accessing } -SAXRecordingHandler >> messageRecorder [ - ^ messageRecorder ifNil: [messageRecorder := XMLMessageRecorder new] -] - -{ #category : #'handling - declaration' } -SAXRecordingHandler >> notationDeclaration: aName publicID: aPublicID systemID: aSystemID [ - self - recordMessageReceiver: self - selector: #notationDeclaration:publicID:systemID: - arguments: - (OrderedCollection new - addLast: aName; - addLast: aPublicID; - addLast: aSystemID; - yourself) -] - -{ #category : #'handling - declaration' } -SAXRecordingHandler >> parameterEntityDeclaration: aName publicID: aPublicID systemID: aSystemID [ - self - recordMessageReceiver: self - selector: #parameterEntityDeclaration:publicID:systemID: - arguments: - (OrderedCollection new - addLast: aName; - addLast: aPublicID; - addLast: aSystemID; - yourself) -] - -{ #category : #'handling - declaration' } -SAXRecordingHandler >> parameterEntityDeclaration: aName replacement: aReplacement [ - self - recordMessageReceiver: self - selector: #parameterEntityDeclaration:replacement: - arguments: - (OrderedCollection new - addLast: aName; - addLast: aReplacement; - yourself) -] - -{ #category : #'handling - content' } -SAXRecordingHandler >> processingInstruction: aTargetString data: aDataString [ - self - recordMessageReceiver: self - selector: #processingInstruction:data: - arguments: - (OrderedCollection new - addLast: aTargetString; - addLast: aDataString; - yourself) -] - -{ #category : #recording } -SAXRecordingHandler >> recordMessage: aMessage [ - self messageRecorder recordMessage: aMessage -] - -{ #category : #recording } -SAXRecordingHandler >> recordMessageReceiver: anObject selector: aSelector [ - self messageRecorder - recordMessageReceiver: anObject - selector: aSelector -] - -{ #category : #recording } -SAXRecordingHandler >> recordMessageReceiver: anObject selector: aSelector argument: anArgument [ - self messageRecorder - recordMessageReceiver: anObject - selector: aSelector - argument: anArgument -] - -{ #category : #recording } -SAXRecordingHandler >> recordMessageReceiver: anObject selector: aSelector arguments: aSequenceableCollection [ - self messageRecorder - recordMessageReceiver: anObject - selector: aSelector - arguments: aSequenceableCollection -] - -{ #category : #'handling - content' } -SAXRecordingHandler >> skippedEntity: anEntityName [ - self - recordMessageReceiver: self - selector: #skippedEntity: - arguments: - (OrderedCollection new - addLast: anEntityName; - yourself) -] - -{ #category : #'handling - lexical' } -SAXRecordingHandler >> startCData [ - self - recordMessageReceiver: self - selector: #startCData -] - -{ #category : #'handling - lexical' } -SAXRecordingHandler >> startDTD: aRootElementName publicID: aPublicID systemID: aSystemID [ - self - recordMessageReceiver: self - selector: #startDTD:publicID:systemID: - arguments: - (OrderedCollection new - addLast: aRootElementName; - addLast: aPublicID; - addLast: aSystemID; - yourself) -] - -{ #category : #'handling - content' } -SAXRecordingHandler >> startDocument [ - self - recordMessageReceiver: self - selector: #startDocument -] - -{ #category : #'handling - content' } -SAXRecordingHandler >> startElement: aQualifiedName attributes: anAttributeDictionary [ - self - recordMessageReceiver: self - selector: #startElement:attributes: - arguments: - (OrderedCollection new - addLast: aQualifiedName; - addLast: anAttributeDictionary; - yourself) -] - -{ #category : #'handling - lexical' } -SAXRecordingHandler >> startEntity: anEntityName [ - self - recordMessageReceiver: self - selector: #startEntity: - arguments: - (OrderedCollection new - addLast: anEntityName; - yourself) -] - -{ #category : #'handling - content' } -SAXRecordingHandler >> startPrefixMapping: aPrefix uri: aURI [ - self - recordMessageReceiver: self - selector: #startPrefixMapping:uri: - arguments: - (OrderedCollection new - addLast: aPrefix; - addLast: aURI; - yourself) -] - -{ #category : #testing } -SAXRecordingHandler >> wasSentSelector: aSelector [ - ^ self allSentSelectors includes: aSelector asSymbol -] - -{ #category : #testing } -SAXRecordingHandler >> wasSentSelectors: aSelectorArray [ - ^ self allSentSelectors = aSelectorArray asArray -] - -{ #category : #'handling - lexical' } -SAXRecordingHandler >> xmlVersion: aVersionFloat encoding: anEncoding standalone: aBoolean [ - self - recordMessageReceiver: self - selector: #xmlVersion:encoding:standalone: - arguments: - (OrderedCollection new - addLast: aVersionFloat; - addLast: anEncoding; - addLast: aBoolean; - yourself) -] diff --git a/src/XML-Tests-Parser/SAXRecordingPrefixURIHandler.class.st b/src/XML-Tests-Parser/SAXRecordingPrefixURIHandler.class.st deleted file mode 100644 index 87d525bfa..000000000 --- a/src/XML-Tests-Parser/SAXRecordingPrefixURIHandler.class.st +++ /dev/null @@ -1,35 +0,0 @@ -" -This class records the second element events (#startElement:prefix:uri:attributes: and #endElement:prefix:uri:) used when the first aren't defined. -" -Class { - #name : #SAXRecordingPrefixURIHandler, - #superclass : #SAXRecordingHandler, - #category : #'XML-Tests-Parser' -} - -{ #category : #'handling - content' } -SAXRecordingPrefixURIHandler >> endElement: aQualifiedName prefix: aPrefix uri: aURI [ - self - recordMessageReceiver: self - selector: #endElement:prefix:uri: - arguments: - (OrderedCollection new - addLast: aQualifiedName; - addLast: aPrefix; - addLast: aURI; - yourself) -] - -{ #category : #'handling - content' } -SAXRecordingPrefixURIHandler >> startElement: aQualifiedName prefix: aPrefix uri: aURI attributes: anAttributeDictionary [ - self - recordMessageReceiver: self - selector: #startElement:prefix:uri:attributes: - arguments: - (OrderedCollection new - addLast: aQualifiedName; - addLast: aPrefix; - addLast: aURI; - addLast: anAttributeDictionary; - yourself) -] diff --git a/src/XML-Tests-Parser/SAXRecordingPrefixURILocalNameHandler.class.st b/src/XML-Tests-Parser/SAXRecordingPrefixURILocalNameHandler.class.st deleted file mode 100644 index 77b1a972d..000000000 --- a/src/XML-Tests-Parser/SAXRecordingPrefixURILocalNameHandler.class.st +++ /dev/null @@ -1,37 +0,0 @@ -" -This class records the first element events (#startElement:prefix:uri:attributes:localName: and #endElement:prefix:uri:localName:) sent before the others. -" -Class { - #name : #SAXRecordingPrefixURILocalNameHandler, - #superclass : #SAXRecordingPrefixURIHandler, - #category : #'XML-Tests-Parser' -} - -{ #category : #'handling - content' } -SAXRecordingPrefixURILocalNameHandler >> endElement: aQualifiedName prefix: aPrefix uri: aURI localName: aLocalName [ - self - recordMessageReceiver: self - selector: #endElement:prefix:uri:localName: - arguments: - (OrderedCollection new - addLast: aQualifiedName; - addLast: aPrefix; - addLast: aURI; - addLast: aLocalName; - yourself) -] - -{ #category : #'handling - content' } -SAXRecordingPrefixURILocalNameHandler >> startElement: aQualifiedName prefix: aPrefix uri: aURI localName: aLocalName attributes: anAttributeDictionary [ - self - recordMessageReceiver: self - selector: #startElement:prefix:uri:localName:attributes: - arguments: - (OrderedCollection new - addLast: aQualifiedName; - addLast: aPrefix; - addLast: aURI; - addLast: aLocalName; - addLast: anAttributeDictionary; - yourself) -] diff --git a/src/XML-Tests-Parser/SAXTestingMessageRecordingHandler.class.st b/src/XML-Tests-Parser/SAXTestingMessageRecordingHandler.class.st deleted file mode 100644 index 4d99f839a..000000000 --- a/src/XML-Tests-Parser/SAXTestingMessageRecordingHandler.class.st +++ /dev/null @@ -1,67 +0,0 @@ -" -This handler records the results of testing messages from within handlers. -" -Class { - #name : #SAXTestingMessageRecordingHandler, - #superclass : #SAXRecordingHandler, - #instVars : [ - 'isInContentResults', - 'isInCDataSectionResults', - 'hasParserResults' - ], - #category : #'XML-Tests-Parser' -} - -{ #category : #accessing } -SAXTestingMessageRecordingHandler >> hasParserResults [ - ^ hasParserResults ifNil: [hasParserResults := OrderedCollection new] -] - -{ #category : #accessing } -SAXTestingMessageRecordingHandler >> isInCDataSectionResults [ - ^ isInCDataSectionResults ifNil: [isInCDataSectionResults := OrderedCollection new] -] - -{ #category : #accessing } -SAXTestingMessageRecordingHandler >> isInContentResults [ - ^ isInContentResults ifNil: [isInContentResults := OrderedCollection new] -] - -{ #category : #recording } -SAXTestingMessageRecordingHandler >> recordMessage: aMessage [ - self recordTestingMessages. - super recordMessage: aMessage. -] - -{ #category : #recording } -SAXTestingMessageRecordingHandler >> recordMessageReceiver: anObject selector: aSelector [ - self recordTestingMessages. - super - recordMessageReceiver: anObject - selector: aSelector. -] - -{ #category : #recording } -SAXTestingMessageRecordingHandler >> recordMessageReceiver: anObject selector: aSelector argument: anArgument [ - self recordTestingMessages. - super - recordMessageReceiver: anObject - selector: aSelector - argument: anArgument. -] - -{ #category : #recording } -SAXTestingMessageRecordingHandler >> recordMessageReceiver: anObject selector: aSelector arguments: aSequenceableCollection [ - self recordTestingMessages. - super - recordMessageReceiver: anObject - selector: aSelector - arguments: aSequenceableCollection. -] - -{ #category : #recording } -SAXTestingMessageRecordingHandler >> recordTestingMessages [ - self hasParserResults addLast: self hasParser. - self isInCDataSectionResults addLast: self isInCDataSection. - self isInContentResults addLast: self isInContent. -] diff --git a/src/XML-Tests-Parser/TestCase.extension.st b/src/XML-Tests-Parser/TestCase.extension.st deleted file mode 100644 index 3063cf797..000000000 --- a/src/XML-Tests-Parser/TestCase.extension.st +++ /dev/null @@ -1,50 +0,0 @@ -Extension { #name : #TestCase } - -{ #category : #'*XML-Tests-Parser' } -TestCase >> xmlShould: aBlock enumerate: aCollection [ - | enumerated | - - enumerated := OrderedCollection new. - aBlock value: [:each | enumerated add: each]. - self assert: enumerated = aCollection asOrderedCollection. -] - -{ #category : #'*XML-Tests-Parser' } -TestCase >> xmlShould: aBlock enumerate: aFirstCollection and: aSecondCollection [ - | firstEnumerated secondEnumerated | - - firstEnumerated := OrderedCollection new. - secondEnumerated := OrderedCollection new. - aBlock value: [:first :second | - firstEnumerated addLast: first. - secondEnumerated addLast: second]. - self - assert: firstEnumerated = aFirstCollection asOrderedCollection; - assert: secondEnumerated = aSecondCollection asOrderedCollection. -] - -{ #category : #'*XML-Tests-Parser' } -TestCase >> xmlShould: aBlock unorderedEnumerate: aCollection [ - | enumerated | - - enumerated := OrderedCollection new. - aBlock value: [:each | enumerated add: each]. - self assert: enumerated sorted = aCollection asOrderedCollection sorted. -] - -{ #category : #'*XML-Tests-Parser' } -TestCase >> xmlShould: aBlock unorderedEnumerate: aFirstCollection and: aSecondCollection [ - | firstEnumerated secondEnumerated | - - firstEnumerated := OrderedCollection new. - secondEnumerated := OrderedCollection new. - aBlock value: [:first :second | - firstEnumerated addLast: first. - secondEnumerated addLast: second]. - self assert: - firstEnumerated sorted = - aFirstCollection asOrderedCollection sorted. - self assert: - secondEnumerated sorted = - aSecondCollection asOrderedCollection sorted. -] diff --git a/src/XML-Tests-Parser/XMLASCIIStreamConverterTest.class.st b/src/XML-Tests-Parser/XMLASCIIStreamConverterTest.class.st deleted file mode 100644 index 25011e45d..000000000 --- a/src/XML-Tests-Parser/XMLASCIIStreamConverterTest.class.st +++ /dev/null @@ -1,20 +0,0 @@ -Class { - #name : #XMLASCIIStreamConverterTest, - #superclass : #XMLStreamConverterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLASCIIStreamConverterTest class >> isAbstract [ - ^ false -] - -{ #category : #accessing } -XMLASCIIStreamConverterTest >> primaryEncodingName [ - ^ 'ASCII' -] - -{ #category : #accessing } -XMLASCIIStreamConverterTest >> streamConverterClass [ - ^ XMLASCIIStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLAbstractReadStreamTest.class.st b/src/XML-Tests-Parser/XMLAbstractReadStreamTest.class.st deleted file mode 100644 index 1564cefce..000000000 --- a/src/XML-Tests-Parser/XMLAbstractReadStreamTest.class.st +++ /dev/null @@ -1,263 +0,0 @@ -" -Abstract, do not run. -" -Class { - #name : #XMLAbstractReadStreamTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLAbstractReadStreamTest class >> isAbstract [ - ^ true -] - -{ #category : #testing } -XMLAbstractReadStreamTest class >> shouldInheritSelectors [ - ^ true -] - -{ #category : #accessing } -XMLAbstractReadStreamTest >> inputCollection [ - ^ #() -] - -{ #category : #'instance creation' } -XMLAbstractReadStreamTest >> newStream [ - ^ self newStreamOn: self inputCollection -] - -{ #category : #'instance creation' } -XMLAbstractReadStreamTest >> newStreamOn: aCollection [ - ^ self streamClass on: aCollection -] - -{ #category : #accessing } -XMLAbstractReadStreamTest >> outputCollection [ - ^ self inputCollection -] - -{ #category : #accessing } -XMLAbstractReadStreamTest >> streamClass [ - ^ XMLAbstractReadStream -] - -{ #category : #tests } -XMLAbstractReadStreamTest >> testAtEnd [ - | stream | - - stream := self newStream. - self outputCollection size timesRepeat: [ - self deny: stream atEnd. - stream next]. - self assert: stream atEnd. -] - -{ #category : #tests } -XMLAbstractReadStreamTest >> testClose [ - | stream | - - stream := self newStream. - self - assert: stream close == stream; - assert: stream atEnd. -] - -{ #category : #tests } -XMLAbstractReadStreamTest >> testContents [ - | stream | - - stream := self newStream. - self outputCollection do: [:each | - "use #= because wide chars aren't #== pre-Spur" - self - assert: stream peek = each; - assert: stream contents = self outputCollection; - assert: stream peek = each; - assert: stream next = each]. - self assert: stream contents = self outputCollection. -] - -{ #category : #tests } -XMLAbstractReadStreamTest >> testIsBinary [ - self deny: self newStream isBinary -] - -{ #category : #tests } -XMLAbstractReadStreamTest >> testIsStream [ - self assert: self newStream isStream -] - -{ #category : #tests } -XMLAbstractReadStreamTest >> testIsXMLBinaryOrExternalStream [ - | stream | - - stream := self newStream. - self assert: stream isXMLBinaryOrExternalStream = stream isBinary. -] - -{ #category : #tests } -XMLAbstractReadStreamTest >> testNew [ - self - should: [self streamClass new] - raise: Error -] - -{ #category : #tests } -XMLAbstractReadStreamTest >> testNext [ - | stream | - - stream := self newStream. - self outputCollection do: [:each | - "use #= because wide chars aren't #== pre-Spur" - self assert: stream next = each]. - self assert: stream next isNil. - - 0 to: self outputCollection size do: [:i | - stream := self newStream. - self assert: - (stream next: i) = - (self outputCollection copyFrom: 1 to: i)]. - - stream := self newStream. - self assert: - (stream next: self outputCollection size + 1) = - self outputCollection. - self assert: (stream next: 1) isEmpty. -] - -{ #category : #tests } -XMLAbstractReadStreamTest >> testPeek [ - | stream | - - stream := self newStream. - self outputCollection do: [:each | - "use #= because wide chars aren't #== pre-Spur" - self assert: stream peek = each. - stream next]. - self assert: stream peek isNil. -] - -{ #category : #tests } -XMLAbstractReadStreamTest >> testPeekFor [ - | stream | - - stream := self newStream. - self outputCollection do: [:each | - self - deny: (stream peekFor: #absent); - deny: (stream peekFor: nil); - assert: (stream peekFor: each); - deny: (stream peekFor: #absent); - deny: (stream peekFor: nil)]. - self - deny: (stream peekFor: #absent); - deny: (stream peekFor: nil). -] - -{ #category : #tests } -XMLAbstractReadStreamTest >> testPosition [ - | stream startPosition endPosition position | - - stream := self newStream. - startPosition := stream position. "1 or 0 depending on the stream on GS" - endPosition := - stream - upToEnd; - position. - stream := self newStream. - position := startPosition. - self outputCollection do: [:each | - self - assert: stream position = position; - "use #= because wide chars aren't #== pre-Spur" - assert: stream peek = each; - assert: stream position = position; - assert: stream next = each; - assert: stream position > position. - - stream peek. - self - assert: (stream position: position) == stream; - assert: stream peek = each; - assert: stream position = position; - assert: stream next = each; - assert: stream position > position. - position := stream position]. - self assert: position = endPosition. -] - -{ #category : #tests } -XMLAbstractReadStreamTest >> testReset [ - | stream | - - stream := self newStream. - self - assert: stream upToEnd = self outputCollection; - assert: stream upToEnd isEmpty; - assert: stream reset == stream; - assert: stream upToEnd = self outputCollection; - assert: stream upToEnd isEmpty. -] - -{ #category : #tests } -XMLAbstractReadStreamTest >> testSkip [ - | stream | - - 0 to: self outputCollection size do: [:i | - stream := self newStream. - self - assert: (stream skip: i) == stream; - assert: stream upToEnd = (self outputCollection allButFirst: i)]. - - stream := self newStream. - self - assert: (stream skip: self outputCollection size + 1) == stream; - assert: stream upToEnd isEmpty. -] - -{ #category : #tests } -XMLAbstractReadStreamTest >> testSkipTo [ - | stream | - - self outputCollection do: [:each | - stream := self newStream. - self - assert: (stream skipTo: each); - assert: stream upToEnd = (self outputCollection copyAfter: each)]. - - stream := self newStream. - self - deny: (stream skipTo: #absent); - assert: stream atEnd. -] - -{ #category : #tests } -XMLAbstractReadStreamTest >> testUpTo [ - self outputCollection do: [:each | | stream | - stream := self newStream. - self assert: - (stream upTo: each) = - (self outputCollection copyUpTo: each). - self assert: - stream upToEnd = - (self outputCollection copyAfter: each)]. - self assert: (self newStream upTo: #absent) = self outputCollection. -] - -{ #category : #tests } -XMLAbstractReadStreamTest >> testUpToEnd [ - | stream | - - self outputCollection withIndexDo: [:each :i | - stream := self newStream. - stream skip: i. - self - assert: stream upToEnd = (self outputCollection allButFirst: i); - assert: stream upToEnd = '']. - - stream := self newStream. - self - assert: stream upToEnd = self outputCollection; - assert: stream upToEnd = ''. -] diff --git a/src/XML-Tests-Parser/XMLAbstractSetTest.class.st b/src/XML-Tests-Parser/XMLAbstractSetTest.class.st deleted file mode 100644 index 1c659ef90..000000000 --- a/src/XML-Tests-Parser/XMLAbstractSetTest.class.st +++ /dev/null @@ -1,216 +0,0 @@ -" -An abstract and portable test case for sets. -" -Class { - #name : #XMLAbstractSetTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser' -} - -{ #category : #testing } -XMLAbstractSetTest class >> isAbstract [ - ^ true -] - -{ #category : #testing } -XMLAbstractSetTest class >> shouldInheritSelectors [ - ^ true -] - -{ #category : #accessing } -XMLAbstractSetTest >> absentSetElement [ - self subclassResponsibility -] - -{ #category : #asserting } -XMLAbstractSetTest >> assertSet: aFirstSet equals: aSecondSet [ - self - assert: aFirstSet = aSecondSet; - assert: aSecondSet = aFirstSet -] - -{ #category : #asserting } -XMLAbstractSetTest >> denySet: aFirstSet equals: aSecondSet [ - self - deny: aFirstSet = aSecondSet; - deny: aFirstSet == aSecondSet; - deny: aSecondSet = aFirstSet; - deny: aSecondSet == aFirstSet -] - -{ #category : #accessing } -XMLAbstractSetTest >> disjointSetElements [ - self subclassResponsibility -] - -{ #category : #accessing } -XMLAbstractSetTest >> emptySet [ - ^ self setClass new -] - -{ #category : #accessing } -XMLAbstractSetTest >> setClass [ - self subclassResponsibility -] - -{ #category : #accessing } -XMLAbstractSetTest >> setElements [ - self subclassResponsibility -] - -{ #category : #accessing } -XMLAbstractSetTest >> setWithDisjointElements [ - ^ self setClass newFrom: self disjointSetElements -] - -{ #category : #accessing } -XMLAbstractSetTest >> setWithElements [ - ^ self setClass newFrom: self setElements -] - -{ #category : #tests } -XMLAbstractSetTest >> testAdd [ - | set | - - set := self emptySet. - self setElements do: [:each | - self - assert: (set add: each) == each; - assert: (set includes: each)]. - self - assert: set = self setWithElements; - assert: (self setElements allSatisfy: [:each | (set add: each) == each]); - assert: set = self setWithElements. -] - -{ #category : #tests } -XMLAbstractSetTest >> testConcatenation [ - | firstSet secondSet | - - firstSet := self setWithElements. - self assert: (firstSet, self setWithElements) = self setWithElements. - - secondSet := self setWithDisjointElements. - self - assert: (firstSet, secondSet) = (secondSet, firstSet); - deny: (firstSet, secondSet) = firstSet; - deny: (firstSet, secondSet) = secondSet; - assert: - (firstSet, secondSet) = - (self setClass newFrom: self setElements, self disjointSetElements). -] - -{ #category : #tests } -XMLAbstractSetTest >> testCopy [ - | set copy | - - set := self setWithElements. - copy := set copy. - self - assert: set = copy; - deny: set == copy. - - set addAll: self disjointSetElements. - self deny: set = copy. - - copy addAll: self disjointSetElements. - self assert: set = copy. -] - -{ #category : #tests } -XMLAbstractSetTest >> testDo [ - | enumerated | - - enumerated := OrderedCollection new. - self emptySet do: [:each | enumerated addLast: each]. - self assert: enumerated size = 0. - - self setWithElements do: [:each | enumerated addLast: each]. - self - assert: enumerated size = self setElements size; - assert: (self setElements allSatisfy: [:each | enumerated includes: each]). -] - -{ #category : #tests } -XMLAbstractSetTest >> testEquals [ - | set | - - set := self emptySet. - self - assertSet: set equals: self emptySet; - denySet: set equals: self setWithElements; - denySet: set equals: self setWithDisjointElements. - - set := self setWithElements. - self - assertSet: set equals: self setWithElements; - denySet: set equals: self setWithDisjointElements. - - set := self setWithDisjointElements. - self assertSet: set equals: self setWithDisjointElements. -] - -{ #category : #tests } -XMLAbstractSetTest >> testIncludes [ - | set | - - set := self emptySet. - self deny: (self setElements anySatisfy: [:each | set includes: each]). - - set := self setWithElements. - self assert: (self setElements allSatisfy: [:each | set includes: each]). - self deny: (self disjointSetElements anySatisfy: [:each | set includes: each]). - - set := self setWithDisjointElements. - self assert: (self disjointSetElements allSatisfy: [:each | set includes: each]). -] - -{ #category : #tests } -XMLAbstractSetTest >> testNewFrom [ - self assert: (self setClass newFrom: self setElements) = self setWithElements -] - -{ #category : #tests } -XMLAbstractSetTest >> testRemoveAll [ - | set | - - set := self setWithElements. - self - assert: set removeAll == set; - assert: set isEmpty. -] - -{ #category : #tests } -XMLAbstractSetTest >> testRemoveIfAbsent [ - | set | - - set := self setWithElements. - self setElements do: [:each | - self assert: - (set - remove: each - ifAbsent: [self fail]) == each. - self deny: (set includes: each). - self - assert: - (set - remove: each - ifAbsent: [self absentSetElement]) == self absentSetElement. - self - should: [set remove: each] - raise: Error]. - self assert: set isEmpty. -] - -{ #category : #tests } -XMLAbstractSetTest >> testSize [ - | set size | - - set := self emptySet. - size := 0. - self assert: set size = size. - self setElements do: [:each | - set add: each. - size := size + 1. - self assert: set size = size]. -] diff --git a/src/XML-Tests-Parser/XMLAttributeDeclarationTest.class.st b/src/XML-Tests-Parser/XMLAttributeDeclarationTest.class.st deleted file mode 100644 index c8b8a0381..000000000 --- a/src/XML-Tests-Parser/XMLAttributeDeclarationTest.class.st +++ /dev/null @@ -1,115 +0,0 @@ -Class { - #name : #XMLAttributeDeclarationTest, - #superclass : #XMLDeclarationNodeTest, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #testing } -XMLAttributeDeclarationTest class >> isAbstract [ - ^ false -] - -{ #category : #accessing } -XMLAttributeDeclarationTest >> nodeClass [ - ^ XMLAttributeDeclaration -] - -{ #category : #tests } -XMLAttributeDeclarationTest >> testAttribute [ - | declaration | - - declaration := self newNode. - self - assert: declaration attribute = ''; - assert: (declaration attribute: 'test') == declaration; - assert: declaration attribute = 'test'. -] - -{ #category : #tests } -XMLAttributeDeclarationTest >> testDefaultPragma [ - | declaration | - - declaration := self newNode. - self - assert: declaration defaultPragma = ''; - assert: (declaration defaultPragma: 'REQUIRED') == declaration; - assert: declaration defaultPragma = 'REQUIRED'. -] - -{ #category : #tests } -XMLAttributeDeclarationTest >> testDefaultValue [ - | declaration | - - declaration := self newNode. - self - assert: declaration defaultValue = ''; - assert: (declaration defaultValue: 'test') == declaration; - assert: declaration defaultValue = 'test'. -] - -{ #category : #tests } -XMLAttributeDeclarationTest >> testElement [ - | declaration | - - declaration := self newNode. - self - assert: declaration element = ''; - assert: (declaration element: 'test') == declaration; - assert: declaration element = 'test'. -] - -{ #category : #tests } -XMLAttributeDeclarationTest >> testElementAttributeTypeDefaultPragmaDefaultValue [ - | declaration | - - declaration := - self nodeClass - element: 'one' - attribute: 'two' - type: 'CDATA' - defaultPragma: '#IMPLIED' - defaultValue: 'default'. - self - assert: declaration class == self nodeClass; - assert: declaration element = 'one'; - assert: declaration attribute = 'two'; - assert: declaration type = 'CDATA'; - assert: declaration defaultPragma = '#IMPLIED'; - assert: declaration defaultValue = 'default'. -] - -{ #category : #tests } -XMLAttributeDeclarationTest >> testType [ - | declaration | - - declaration := self newNode. - self - assert: declaration type = ''; - assert: (declaration type: 'CDATA') == declaration; - assert: declaration type = 'CDATA'. -] - -{ #category : #tests } -XMLAttributeDeclarationTest >> testWriteXMLOn [ - self assert: - (self nodeClass - element: 'one' - attribute: 'two' - type: 'CDATA' - defaultPragma: '' - defaultValue: 'three') printString = '<!ATTLIST one two CDATA "three">'. - self assert: - (self nodeClass - element: 'one' - attribute: 'two' - type: 'ENTITY' - defaultPragma: 'FIXED' - defaultValue: 'three') printString = '<!ATTLIST one two ENTITY #FIXED "three">'. - self assert: - (self nodeClass - element: 'one' - attribute: 'two' - type: '(three|four)' - defaultPragma: '#IMPLIED' - defaultValue: 'four') printString = '<!ATTLIST one two (three|four) #IMPLIED>'. -] diff --git a/src/XML-Tests-Parser/XMLAttributeDictionaryTest.class.st b/src/XML-Tests-Parser/XMLAttributeDictionaryTest.class.st deleted file mode 100644 index 878bc42a8..000000000 --- a/src/XML-Tests-Parser/XMLAttributeDictionaryTest.class.st +++ /dev/null @@ -1,471 +0,0 @@ -Class { - #name : #XMLAttributeDictionaryTest, - #superclass : #OrderPreservingStringDictionaryTest, - #category : #'XML-Tests-Parser' -} - -{ #category : #accessing } -XMLAttributeDictionaryTest >> dictionaryClass [ - ^ XMLAttributeDictionary -] - -{ #category : #testing } -XMLAttributeDictionaryTest >> isTestingLazyDictionary [ - ^ false -] - -{ #category : #accessing } -XMLAttributeDictionaryTest >> namespaceScope [ - ^ XMLNamespaceScope new - mapPrefix: '' to: 'defaultNS'; - mapPrefix: 'prefix' to: 'prefixNS'; - mapPrefix: 'otherPrefix' to: 'otherPrefixNS'; - yourself -] - -{ #category : #accessing } -XMLAttributeDictionaryTest >> prefixedAttributeDictionary [ - ^ (self dictionaryClass new setNamespaceScope: self namespaceScope) - at: 'name' put: 'value'; - at: 'xml:id' put: 'id'; - at: 'prefix:name' put: 'prefixValue'; - at: 'otherPrefix:name' put: 'otherPrefixValue'; - yourself -] - -{ #category : #tests } -XMLAttributeDictionaryTest >> testAsXMLAttributeDictionary [ - | dictionary | - - dictionary := self emptyDictionary. - self assert: dictionary asXMLAttributeDictionary == dictionary. -] - -{ #category : #tests } -XMLAttributeDictionaryTest >> testAssociationAtName [ - | dictionary | - - dictionary := self prefixedAttributeDictionary. - self assert: - (dictionary associationAtName: 'id') = ('xml:id' -> 'id'). - self assert: - (dictionary associationAtName: 'xml:id') = ('xml:id' -> 'id'). - self assert: - (dictionary associationAtName: 'name') = ('name' -> 'value'). - self assert: - (dictionary associationAtName: 'prefix:name') = ('prefix:name' -> 'prefixValue'). - self assert: - (dictionary associationAtName: 'otherPrefix:name') = - ('otherPrefix:name' -> 'otherPrefixValue'). - self assert: (dictionary associationAtName: self absentKey) isNil. -] - -{ #category : #tests } -XMLAttributeDictionaryTest >> testAssociationAtNameIfAbsent [ - | dictionary | - - dictionary := self prefixedAttributeDictionary. - self assert: - (dictionary - associationAtName: 'id' - ifAbsent: [self fail]) = ('xml:id' -> 'id'). - self assert: - (dictionary - associationAtName: 'xml:id' - ifAbsent: [self fail]) = ('xml:id' -> 'id'). - self assert: - (dictionary - associationAtName: 'name' - ifAbsent: [self fail]) = ('name' -> 'value'). - self assert: - (dictionary - associationAtName: 'prefix:name' - ifAbsent: [self fail]) = ('prefix:name' -> 'prefixValue'). - self assert: - (dictionary - associationAtName: 'otherPrefix:name' - ifAbsent: [self fail]) = ('otherPrefix:name' -> 'otherPrefixValue'). - self assert: - (dictionary - associationAtName: self absentKey - ifAbsent: [self absentValue]) = self absentValue. -] - -{ #category : #tests } -XMLAttributeDictionaryTest >> testAssociationAtNameNamespaceURI [ - | dictionary | - - dictionary := self prefixedAttributeDictionary. - self assert: - (dictionary - associationAtName: 'id' - namespaceURI: XMLNamespaceScope xmlNamespaceURI) isNil. - self assert: - (dictionary - associationAtName: 'id' - namespaceURI: 'defaultNS') isNil. - self assert: - (dictionary - associationAtName: 'id' - namespaceURI: '') = ('xml:id' -> 'id'). - self assert: - (dictionary - associationAtName: 'xml:id' - namespaceURI: XMLNamespaceScope xmlNamespaceURI) isNil. - self assert: - (dictionary - associationAtName: 'xml:id' - namespaceURI: 'defaultNS') isNil. - self assert: - (dictionary - associationAtName: 'xml:id' - namespaceURI: '') = ('xml:id' -> 'id'). - - self assert: - (dictionary - associationAtName: 'name' - namespaceURI: 'prefixNS') isNil. - self assert: - (dictionary - associationAtName: 'prefix:name' - namespaceURI: 'prefixNS') isNil. - self assert: - (dictionary - associationAtName: 'prefix:name' - namespaceURI: 'defaultNS') isNil. - - self assert: - (dictionary - associationAtName: 'name' - namespaceURI: 'otherPrefixNS') isNil. - self assert: - (dictionary - associationAtName: 'otherPrefix:name' - namespaceURI: 'otherPrefixNS') isNil. - self assert: - (dictionary - associationAtName: 'otherPrefix:name' - namespaceURI: 'defaultNS') isNil. - - self assert: - (dictionary - associationAtName: 'name' - namespaceURI: '') = ('name' -> 'value'). - self assert: - (dictionary - associationAtName: 'name' - namespaceURI: 'defaultNS') isNil. -] - -{ #category : #tests } -XMLAttributeDictionaryTest >> testAssociationAtNameNamespaceURIIfAbsent [ - | dictionary | - - dictionary := self prefixedAttributeDictionary. - self assert: - (dictionary - associationAtName: 'id' - namespaceURI: XMLNamespaceScope xmlNamespaceURI - ifAbsent: [self absentValue]) = self absentValue. - self assert: - (dictionary - associationAtName: 'id' - namespaceURI: 'defaultNS' - ifAbsent: [self absentValue]) = self absentValue. - self assert: - (dictionary - associationAtName: 'id' - namespaceURI: '' - ifAbsent: [self fail]) = ('xml:id' -> 'id'). - self assert: - (dictionary - associationAtName: 'xml:id' - namespaceURI: XMLNamespaceScope xmlNamespaceURI - ifAbsent: [self absentValue]) = self absentValue. - self assert: - (dictionary - associationAtName: 'xml:id' - namespaceURI: 'defaultNS' - ifAbsent: [self absentValue]) = self absentValue. - self assert: - (dictionary - associationAtName: 'xml:id' - namespaceURI: '' - ifAbsent: [self fail]) = ('xml:id' -> 'id'). - - self assert: - (dictionary - associationAtName: 'name' - namespaceURI: 'prefixNS' - ifAbsent: [self absentValue]) = self absentValue. - self assert: - (dictionary - associationAtName: 'prefix:name' - namespaceURI: 'prefixNS' - ifAbsent: [self absentValue]) = self absentValue. - self assert: - (dictionary - associationAtName: 'prefix:name' - namespaceURI: 'defaultNS' - ifAbsent: [self absentValue]) = self absentValue. - - self assert: - (dictionary - associationAtName: 'name' - namespaceURI: 'otherPrefixNS' - ifAbsent: [self absentValue]) = self absentValue. - self assert: - (dictionary - associationAtName: 'otherPrefix:name' - namespaceURI: 'otherPrefixNS' - ifAbsent: [self absentValue]) = self absentValue. - self assert: - (dictionary - associationAtName: 'otherPrefix:name' - namespaceURI: 'defaultNS' - ifAbsent: [self absentValue]) = self absentValue. - - self assert: - (dictionary - associationAtName: 'name' - namespaceURI: '' - ifAbsent: [self fail]) = ('name' -> 'value'). - self assert: - (dictionary - associationAtName: 'name' - namespaceURI: 'defaultNS' - ifAbsent: [self absentValue]) = self absentValue. -] - -{ #category : #tests } -XMLAttributeDictionaryTest >> testAtName [ - | dictionary | - - dictionary := self prefixedAttributeDictionary. - self - assert: (dictionary atName: 'id') = 'id'; - assert: (dictionary atName: 'xml:id') = 'id'; - assert: (dictionary atName: 'name') = 'value'; - assert: (dictionary atName: 'prefix:name') = 'prefixValue'; - assert: (dictionary atName: 'otherPrefix:name') = 'otherPrefixValue'; - assert: (dictionary atName: self absentKey) = ''. -] - -{ #category : #tests } -XMLAttributeDictionaryTest >> testAtNameIfAbsent [ - | dictionary | - - dictionary := self prefixedAttributeDictionary. - self assert: - (dictionary - atName: 'id' - ifAbsent: [self fail]) = 'id'. - self assert: - (dictionary - atName: 'xml:id' - ifAbsent: [self fail]) = 'id'. - self assert: - (dictionary - atName: 'name' - ifAbsent: [self fail]) = 'value'. - self assert: - (dictionary - atName: 'prefix:name' - ifAbsent: [self fail]) = 'prefixValue'. - self assert: - (dictionary - atName: 'otherPrefix:name' - ifAbsent: [self fail]) = 'otherPrefixValue'. - self assert: - (dictionary - atName: self absentKey - ifAbsent: [self absentValue]) = self absentValue. -] - -{ #category : #tests } -XMLAttributeDictionaryTest >> testAtNameNamespaceURI [ - | dictionary | - - dictionary := self prefixedAttributeDictionary. - self assert: - (dictionary - atName: 'id' - namespaceURI: XMLNamespaceScope xmlNamespaceURI) = ''. - self assert: - (dictionary - atName: 'id' - namespaceURI: 'defaultNS') = ''. - self assert: - (dictionary - atName: 'id' - namespaceURI: '') = 'id'. - self assert: - (dictionary - atName: 'xml:id' - namespaceURI: XMLNamespaceScope xmlNamespaceURI) = ''. - self assert: - (dictionary - atName: 'xml:id' - namespaceURI: 'defaultNS') = ''. - self assert: - (dictionary - atName: 'xml:id' - namespaceURI: '') = 'id'. - - self assert: - (dictionary - atName: 'name' - namespaceURI: 'prefixNS') = ''. - self assert: - (dictionary - atName: 'prefix:name' - namespaceURI: 'prefixNS') = ''. - self assert: - (dictionary - atName: 'prefix:name' - namespaceURI: 'defaultNS') = ''. - - self assert: - (dictionary - atName: 'name' - namespaceURI: 'otherPrefixNS') = ''. - self assert: - (dictionary - atName: 'otherPrefix:name' - namespaceURI: 'otherPrefixNS') = ''. - self assert: - (dictionary - atName: 'otherPrefix:name' - namespaceURI: 'defaultNS') = ''. - - self assert: - (dictionary - atName: 'name' - namespaceURI: '') = 'value'. - self assert: - (dictionary - atName: 'name' - namespaceURI: 'defaultNS') = ''. -] - -{ #category : #tests } -XMLAttributeDictionaryTest >> testAtNameNamespaceURIIfAbsent [ - | dictionary | - - dictionary := self prefixedAttributeDictionary. - self assert: - (dictionary - atName: 'id' - namespaceURI: XMLNamespaceScope xmlNamespaceURI - ifAbsent: [self absentValue]) = self absentValue. - self assert: - (dictionary - atName: 'id' - namespaceURI: 'defaultNS' - ifAbsent: [self absentValue]) = self absentValue. - self assert: - (dictionary - atName: 'id' - namespaceURI: '' - ifAbsent: [self fail]) = 'id'. - self assert: - (dictionary - atName: 'xml:id' - namespaceURI: XMLNamespaceScope xmlNamespaceURI - ifAbsent: [self absentValue]) = self absentValue. - self assert: - (dictionary - atName: 'xml:id' - namespaceURI: 'defaultNS' - ifAbsent: [self absentValue]) = self absentValue. - self assert: - (dictionary - atName: 'xml:id' - namespaceURI: '' - ifAbsent: [self fail]) = 'id'. - - self assert: - (dictionary - atName: 'name' - namespaceURI: 'prefixNS' - ifAbsent: [self absentValue]) = self absentValue. - self assert: - (dictionary - atName: 'prefix:name' - namespaceURI: 'prefixNS' - ifAbsent: [self absentValue]) = self absentValue. - self assert: - (dictionary - atName: 'prefix:name' - namespaceURI: 'defaultNS' - ifAbsent: [self absentValue]) = self absentValue. - - self assert: - (dictionary - atName: 'name' - namespaceURI: 'otherPrefixNS' - ifAbsent: [self absentValue]) = self absentValue. - self assert: - (dictionary - atName: 'otherPrefix:name' - namespaceURI: 'otherPrefixNS' - ifAbsent: [self absentValue]) = self absentValue. - self assert: - (dictionary - atName: 'otherPrefix:name' - namespaceURI: 'defaultNS' - ifAbsent: [self absentValue]) = self absentValue. - - self assert: - (dictionary - atName: 'name' - namespaceURI: '' - ifAbsent: [self fail]) = 'value'. - self assert: - (dictionary - atName: 'name' - namespaceURI: 'defaultNS' - ifAbsent: [self absentValue]) = self absentValue. -] - -{ #category : #tests } -XMLAttributeDictionaryTest >> testLazyDictionaryEmptyAttributeDictionary [ - self isTestingLazyDictionary - ifFalse: [^ self]. - - self assert: - self emptyDictionary attributeDictionary == - self dictionaryClass emptyAttributeDictionary. - self assert: - self dictionaryClass emptyAttributeDictionary isEmpty. -] - -{ #category : #tests } -XMLAttributeDictionaryTest >> testLazyDictionaryInterfaceCompatibility [ - | dictionary | - - self isTestingLazyDictionary - ifFalse: [^ self]. - - "protocols must be the same as the non-lazy dictionaries" - dictionary := self emptyDictionary. - XMLAttributeDictionary selectors do: [:each | - self assert: (dictionary respondsTo: each)]. -] - -{ #category : #tests } -XMLAttributeDictionaryTest >> testNamespaceURIOf [ - | dictionary | - - dictionary := self prefixedAttributeDictionary. - self - assert: (dictionary namespaceURIOf: 'xml:id') = ''; - assert: (dictionary namespaceURIOf: 'prefix:name') = ''; - assert: (dictionary namespaceURIOf: 'otherPrefix:name') = ''; - assert: (dictionary namespaceURIOf: 'name') = ''. -] - -{ #category : #tests } -XMLAttributeDictionaryTest >> testUsesNamespaces [ - self deny: self emptyDictionary usesNamespaces -] diff --git a/src/XML-Tests-Parser/XMLAttributeListTest.class.st b/src/XML-Tests-Parser/XMLAttributeListTest.class.st deleted file mode 100644 index 5d36bf167..000000000 --- a/src/XML-Tests-Parser/XMLAttributeListTest.class.st +++ /dev/null @@ -1,620 +0,0 @@ -Class { - #name : #XMLAttributeListTest, - #superclass : #XMLObservableListTest, - #instVars : [ - 'attributes', - 'newAttribute', - 'absentAttribute', - 'changedAttributes' - ], - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #accessing } -XMLAttributeListTest >> absentListItem [ - ^ absentAttribute - ifNil: [ - absentAttribute := - self attributeClass - name: 'absentName' - value: 'absentValue'] -] - -{ #category : #accessing } -XMLAttributeListTest >> afterAddingToNotifications [ - ^ #(addedAttribute:) -] - -{ #category : #accessing } -XMLAttributeListTest >> afterRemovingFromNotifications [ - ^ #(removedAttribute:) -] - -{ #category : #testing } -XMLAttributeListTest >> allowsDuplicates [ - ^ false -] - -{ #category : #accessing } -XMLAttributeListTest >> attributeAssociations [ - ^ self listItems collect: [:each | each name -> each value] -] - -{ #category : #accessing } -XMLAttributeListTest >> attributeClass [ - ^ XMLAttribute -] - -{ #category : #accessing } -XMLAttributeListTest >> attributeNames [ - ^ self listItems collect: [:each | each name] -] - -{ #category : #accessing } -XMLAttributeListTest >> attributeValues [ - ^ self listItems collect: [:each | each value] -] - -{ #category : #accessing } -XMLAttributeListTest >> attributesClass [ - ^ OrderPreservingStringDictionary -] - -{ #category : #accessing } -XMLAttributeListTest >> changedListItem: anAttribute [ - ^ (changedAttributes ifNil: [changedAttributes := IdentityDictionary new]) - at: anAttribute - ifAbsentPut: [ - self attributeClass - name: 'new', anAttribute name - value: 'new', anAttribute value] -] - -{ #category : #accessing } -XMLAttributeListTest >> listClass [ - ^ XMLAttributeList -] - -{ #category : #accessing } -XMLAttributeListTest >> listItems [ - attributes ifNil: [ - attributes := - Array streamContents: [:stream | - super listItems do: [:each | - "have the prefixed attributes come before the non-prefixed - versions to better test #isNamed: local name matching" - stream - nextPut: - (self attributeClass - name: 'prefix:', each - value: 'prefixed', each); - nextPut: - (self attributeClass - name: each - value: each)]]]. - ^ attributes copy. -] - -{ #category : #accessing } -XMLAttributeListTest >> newListItem [ - ^ newAttribute - ifNil: [ - newAttribute := - self attributeClass - name: 'newName' - value: 'newValue'] -] - -{ #category : #accessing } -XMLAttributeListTest >> observerClass [ - ^ XMLRecordingAttributeListObserver -] - -{ #category : #accessing } -XMLAttributeListTest >> reverseSortBlock [ - ^ [:a :b | a sortKey > b sortKey] -] - -{ #category : #accessing } -XMLAttributeListTest >> sortBlock [ - ^ [:a :b | a sortKey <= b sortKey] -] - -{ #category : #tests } -XMLAttributeListTest >> testAddAttributeAssociation [ - | list | - - list := self emptyList. - self listItems do: [:each | | attribute | - attribute := list addAttributeAssociation: each name -> each value. - self - assert: attribute class == self attributeClass; - assert: attribute name = each name; - assert: attribute value = each value; - assert: list last = attribute]. -] - -{ #category : #tests } -XMLAttributeListTest >> testAddAttributeNameValue [ - | list | - - list := self emptyList. - self listItems do: [:each | | attribute | - attribute := - list - addAttributeName: each name - value: each value. - self - assert: attribute class == self attributeClass; - assert: attribute name = each name; - assert: attribute value = each value; - assert: list last = attribute]. -] - -{ #category : #tests } -XMLAttributeListTest >> testAsDictionary [ - | list dictionary | - - list := self listWithItems. - dictionary := list asDictionary. - self - assert: dictionary class == self attributesClass; - assert: - dictionary = - (self attributesClass newFrom: self attributeAssociations). -] - -{ #category : #tests } -XMLAttributeListTest >> testAttributeAssociations [ - | list | - - list := self listWithItems. - self - assertList: list attributeAssociations - collectedFrom: list - equals: (self listSpecies newFrom: self attributeAssociations). -] - -{ #category : #tests } -XMLAttributeListTest >> testAttributeAt [ - | list | - - list := self emptyList. - 1 to: 2 do: [:i | - self listItems do: [:each | - self assert: - (list attributeAt: each name) = - (i > 1 - ifTrue: [each value] - ifFalse: ['']). - - list add: each. - self assert: (list attributeAt: each name) = each value]]. - - self listItems do: [:each | - self assert: (list attributeAt: each name) = each value]. -] - -{ #category : #tests } -XMLAttributeListTest >> testAttributeAtIfAbsent [ - | list | - - list := self emptyList. - 1 to: 2 do: [:i | - self listItems do: [:each | - self assert: - (list - attributeAt: each name - ifAbsent: [ - i > 1 - ifTrue: [self fail] - ifFalse: [self absentListItem value]]) = - (i > 1 - ifTrue: [each value] - ifFalse: [self absentListItem value]). - - list add: each. - self assert: - (list - attributeAt: each name - ifAbsent: [self fail]) = each value]]. - - self listItems do: [:each | - self assert: - (list - attributeAt: each name - ifAbsent: [self fail]) = each value]. -] - -{ #category : #tests } -XMLAttributeListTest >> testAttributeAtIfAbsentPut [ - | list | - - list := self emptyList. - 1 to: 2 do: [:i | - self listItems do: [:each | - self assert: - (list - attributeAt: each name - ifAbsentPut: [ - i > 1 - ifTrue: [self fail] - ifFalse: [each value]]) = each value. - - list add: each. - self assert: - (list - attributeAt: each name - ifAbsentPut: [self fail]) = each value]]. - - self listItems do: [:each | - self assert: - (list - attributeAt: each name - ifAbsentPut: [self fail]) = each value]. -] - -{ #category : #tests } -XMLAttributeListTest >> testAttributeAtPut [ - | list | - - list := self emptyList. - 1 to: 2 do: [:i | - self listItems do: [:each | - self assert: - (list attributeAt: each name) = - (i > 1 - ifTrue: [each value] - ifFalse: ['']). - - self assert: - (list - attributeAt: each name - put: each value) = each value. - self assert: (list attributeAt: each name) = each value]]. - - self listItems do: [:each | - self assert: (list attributeAt: each name) = each value]. -] - -{ #category : #tests } -XMLAttributeListTest >> testAttributeNames [ - | list | - - list := self listWithItems. - self - assertList: list attributeNames - collectedFrom: list - equals: (self listSpecies newFrom: self attributeNames). -] - -{ #category : #tests } -XMLAttributeListTest >> testAttributeNamesAndValuesDo [ - | list | - - list := self emptyList. - self - xmlShould: [:twoArgumentBlock | - list attributeNamesAndValuesDo: twoArgumentBlock] - enumerate: #() - and: #(). - - list := self listWithItems. - self - xmlShould: [:twoArgumentBlock | - list attributeNamesAndValuesDo: twoArgumentBlock] - enumerate: self attributeNames - and: self attributeValues. -] - -{ #category : #tests } -XMLAttributeListTest >> testAttributeNamesDo [ - | list | - - list := self emptyList. - self - xmlShould: [:block | list attributeNamesDo: block] - enumerate: #(). - - list := self listWithItems. - self - xmlShould: [:each | list attributeNamesDo: each] - enumerate: self attributeNames. -] - -{ #category : #tests } -XMLAttributeListTest >> testAttributeNodeAt [ - | list | - - list := self emptyList. - self listItems withIndexDo: [:attribute :i | | firstMatchingAttribute | - firstMatchingAttribute := - (self listItems copyFrom: 1 to: i - 1) - detect: [:each | each isNamed: attribute name] - ifNone: [nil]. - self assert: - (list attributeNodeAt: attribute name) = - (firstMatchingAttribute - ifNil: [self defaultValue]). - - list add: attribute. - self assert: - (list attributeNodeAt: attribute name) = - (firstMatchingAttribute - ifNil: [attribute])]. -] - -{ #category : #tests } -XMLAttributeListTest >> testAttributeNodeAtIfAbsent [ - | list | - - list := self emptyList. - self listItems withIndexDo: [:attribute :i | | firstMatchingAttribute | - firstMatchingAttribute := - (self listItems copyFrom: 1 to: i - 1) - detect: [:each | each isNamed: attribute name] - ifNone: [nil]. - self assert: - (list - attributeNodeAt: attribute name - ifAbsent: [ - firstMatchingAttribute - ifNil: [self absentListItem]]) = - (firstMatchingAttribute - ifNil: [self absentListItem]). - - list add: attribute. - self assert: - (list - attributeNodeAt: attribute name - ifAbsent: [self fail]) = - (firstMatchingAttribute - ifNil: [attribute])]. -] - -{ #category : #tests } -XMLAttributeListTest >> testAttributeValueAt [ - | list | - - list := self emptyList. - 1 to: 2 do: [:i | - self listItems do: [:each | - self assert: - (list attributeValueAt: each name) = - (i > 1 - ifTrue: [each value] - ifFalse: ['']). - - list add: each. - self assert: (list attributeValueAt: each name) = each value]]. - - self listItems do: [:each | - self assert: (list attributeValueAt: each name) = each value]. -] - -{ #category : #tests } -XMLAttributeListTest >> testAttributeValueAtIfAbsent [ - | list | - - list := self emptyList. - 1 to: 2 do: [:i | - self listItems do: [:each | - self assert: - (list - attributeValueAt: each name - ifAbsent: [ - i > 1 - ifTrue: [self fail] - ifFalse: [self absentListItem value]]) = - (i > 1 - ifTrue: [each value] - ifFalse: [self absentListItem value]). - - list add: each. - self assert: - (list - attributeValueAt: each name - ifAbsent: [self fail]) = each value]]. - - self listItems do: [:each | - self assert: - (list - attributeValueAt: each name - ifAbsent: [self fail]) = each value]. -] - -{ #category : #tests } -XMLAttributeListTest >> testAttributeValueAtIfAbsentPut [ - | list | - - list := self emptyList. - 1 to: 2 do: [:i | - self listItems do: [:each | - self assert: - (list - attributeValueAt: each name - ifAbsentPut: [ - i > 1 - ifTrue: [self fail] - ifFalse: [each value]]) = each value. - - list add: each. - self assert: - (list - attributeValueAt: each name - ifAbsentPut: [self fail]) = each value]]. - - self listItems do: [:each | - self assert: - (list - attributeValueAt: each name - ifAbsentPut: [self fail]) = each value]. -] - -{ #category : #tests } -XMLAttributeListTest >> testAttributeValueAtPut [ - | list | - - list := self emptyList. - 1 to: 2 do: [:i | - self listItems do: [:each | - self assert: - (list attributeValueAt: each name) = - (i > 1 - ifTrue: [each value] - ifFalse: ['']). - - self assert: - (list - attributeValueAt: each name - put: each value) = each value. - self assert: (list attributeValueAt: each name) = each value]]. - - self listItems do: [:each | - self assert: (list attributeValueAt: each name) = each value]. -] - -{ #category : #tests } -XMLAttributeListTest >> testAttributes [ - | list dictionary | - - list := self listWithItems. - dictionary := list attributes. - self - assert: dictionary class == self attributesClass; - assert: - dictionary = - (self attributesClass newFrom: self attributeAssociations). -] - -{ #category : #tests } -XMLAttributeListTest >> testIncludesAttribute [ - | list | - - list := self emptyList. - self listItems do: [:each | - self deny: (list includesAttribute: each name). - - list add: each. - self assert: (list includesAttribute: each name)]. -] - -{ #category : #tests } -XMLAttributeListTest >> testIncludesAttributeNode [ - | list | - - list := self emptyList. - self listItems withIndexDo: [:attribute :i | | included | - included := - (self listItems - copyFrom: 1 - to: i - 1) anySatisfy: [:each | - each isNamed: attribute name]. - self assert: - (list includesAttributeNode: attribute name) = - included. - - list add: attribute. - self assert: (list includesAttributeNode: attribute name)]. -] - -{ #category : #tests } -XMLAttributeListTest >> testIncludesAttributeNodeNamespaceURI [ - | list | - - list := self emptyList. - self listItems do: [:each | - self deny: - (list - includesAttributeNode: each name - namespaceURI: 'defaultNS'). - - list add: each. - self deny: - (list - includesAttributeNode: each name - namespaceURI: 'defaultNS'). - self assert: - (list - includesAttributeNode: each name - namespaceURI: '')]. -] - -{ #category : #tests } -XMLAttributeListTest >> testRemoveAttribute [ - (Array - with: self listWithItems - with: self listWithItems reversed) - do: [:list | | copy | - copy := list copy. - copy withIndexDo: [:each :i | - self - assert: (list removeAttribute: each name) = each value; - deny: (list includes: each). - self - assertList: list - equals: (copy allButFirst: i). - - self - should: [list removeAttribute: each name] - raise: Error]]. -] - -{ #category : #tests } -XMLAttributeListTest >> testRemoveAttributeIfAbsent [ - (Array - with: self listWithItems - with: self listWithItems reversed) - do: [:list | | copy | - copy := list copy. - copy withIndexDo: [:each :i | - self assert: - (list - removeAttribute: each name - ifAbsent: [self fail]) = each value; - deny: (list includes: each). - self - assertList: list - equals: (copy allButFirst: i). - - self assert: - (list - removeAttribute: each name - ifAbsent: [self absentListItem value]) = self absentListItem value]]. -] - -{ #category : #tests } -XMLAttributeListTest >> testSetAttributes [ - | list associations | - - list := self emptyList. - associations := self attributeAssociations. - self - assert: (list setAttributes: associations) == list; - assert: list attributeAssociations asArray = associations asArray. - - associations := - self changedListItems collect: [:each | each name -> each value]. - self - assert: (list setAttributes: associations) == list; - assert: list attributeAssociations asArray = associations asArray. -] - -{ #category : #tests } -XMLAttributeListTest >> testSetAttributesFromOrderPreservingDictionary [ - | element list dictionary | - - element := XMLElement new. - list := self listClass observer: element. - dictionary := OrderPreservingDictionary newFrom: self attributeAssociations. - self assert: - (list setAttributesFromOrderPreservingDictionary: dictionary) == list. - self assert: - list attributeAssociations asArray = - self attributeAssociations asArray. - list do: [:each | - self - assert: each class == self attributeClass; - assert: each parent == element; - assert: each element == element] -] diff --git a/src/XML-Tests-Parser/XMLAttributeSpecTest.class.st b/src/XML-Tests-Parser/XMLAttributeSpecTest.class.st deleted file mode 100644 index 23874d6b6..000000000 --- a/src/XML-Tests-Parser/XMLAttributeSpecTest.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #XMLAttributeSpecTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser-Utils' -} - -{ #category : #testing } -XMLAttributeSpecTest class >> shouldInheritSelectors [ - ^ true -] - -{ #category : #accessing } -XMLAttributeSpecTest >> attributeSpecClass [ - ^ XMLAttributeSpec -] - -{ #category : #'instance creation' } -XMLAttributeSpecTest >> newAttributeSpec [ - ^ self attributeSpecClass new -] - -{ #category : #tests } -XMLAttributeSpecTest >> testAsXMLAttributeSpec [ - | attributeSpec | - - attributeSpec := self newAttributeSpec. - self assert: attributeSpec asXMLAttributeSpec == attributeSpec. -] diff --git a/src/XML-Tests-Parser/XMLAttributeTest.class.st b/src/XML-Tests-Parser/XMLAttributeTest.class.st deleted file mode 100644 index ed5a21642..000000000 --- a/src/XML-Tests-Parser/XMLAttributeTest.class.st +++ /dev/null @@ -1,370 +0,0 @@ -Class { - #name : #XMLAttributeTest, - #superclass : #XMLNodeTest, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #accessing } -XMLAttributeTest >> escapedString [ - ^ '<test name="&name;">''&value;''</test>' -] - -{ #category : #accessing } -XMLAttributeTest >> nodeClass [ - ^ XMLAttribute -] - -{ #category : #tests } -XMLAttributeTest >> testCanonicallyEquals [ - super testCanonicallyEquals. - self assert: - ((self nodeClass name: 'one' value: 'two') canonicallyEquals: - (self nodeClass name: 'one' value: 'two')). - self deny: - ((self nodeClass name: 'one' value: 'two') canonicallyEquals: - self newNode). -] - -{ #category : #tests } -XMLAttributeTest >> testCopy [ - | node copy | - - (node := self newNode) - element: self newElement. - copy := node copy. - self - deny: copy == node; - assert: copy element isNil. -] - -{ #category : #tests } -XMLAttributeTest >> testElement [ - | attribute element | - - attribute := self newNode. - self assert: attribute element isNil. - - element := self newElement. - self - assert: (attribute element: element) == attribute; - assert: attribute element == element. -] - -{ #category : #tests } -XMLAttributeTest >> testExpandedName [ - | element attribute | - - element := self newElement. - attribute := self nodeClass name: 'one' value: 'two'. - element attributeNodes add: attribute. - self assert: (attribute expandedName = 'one'). - - element defaultNamespace: 'defaultNS'. - self assert: (attribute expandedName = 'one'). - - element declarePrefix: 'prefix' uri: 'prefixNS'. - attribute name: 'prefix:two'. - self assert: (attribute expandedName = 'Q{prefixNS}two'). -] - -{ #category : #tests } -XMLAttributeTest >> testHasNamespaceURI [ - | element attribute | - - attribute := self nodeClass name: 'test' value: ''. - self deny: attribute hasNamespaceURI. - - element := - self elementClass - name: 'test' - namespaceURI: 'defaultNS'. - element attributeNodes add: attribute. - self deny: attribute hasNamespaceURI. - - element - declarePrefix: 'prefix' - uri: 'prefixNS'. - attribute name: 'prefix:test'. - self assert: attribute hasNamespaceURI. - - attribute name: 'test'. - self deny: attribute hasNamespaceURI. -] - -{ #category : #tests } -XMLAttributeTest >> testHasPrefix [ - | attribute | - - attribute := self newNode. - self deny: attribute hasPrefix. - - attribute name: 'one'. - self deny: attribute hasPrefix. - - attribute name: 'prefix:two'. - self assert: attribute hasPrefix. - - attribute name: 'three'. - self deny: attribute hasPrefix. -] - -{ #category : #tests } -XMLAttributeTest >> testIsAttribute [ - self assert: self newNode isAttribute -] - -{ #category : #tests } -XMLAttributeTest >> testIsInLanguage [ - | element | - - super testIsInLanguage. - - element := self newElementWithAttributes. - self languageTagsAndFilters do: [:tagAndFilters | - | tag matchingFilters nonMatchingFilters | - - tag := tagAndFilters first. - matchingFilters := tagAndFilters second. - nonMatchingFilters := tagAndFilters third. - element attributeNodesDo: [:attributeNode | - (matchingFilters, nonMatchingFilters) do: [:each | - self deny: (attributeNode isInLanguage: each)]]. - - element - attributeAt: 'xml:lang' - put: tag. - element attributeNodesDo: [:attributeNode | - matchingFilters do: [:each | - self assert: (attributeNode isInLanguage: each)]. - nonMatchingFilters do: [:each | - self deny: (attributeNode isInLanguage: each)]]. - - element removeAttribute: 'xml:lang']. -] - -{ #category : #tests } -XMLAttributeTest >> testIsNamed [ - | attribute | - - (attribute := self newNode) - name: 'one'. - self - assert: (attribute isNamed: 'one'); - deny: (attribute isNamed: 'two'). - - attribute name: 'one:two'. - self - assert: (attribute isNamed: 'one:two'); - assert: (attribute isNamed: 'two'); - deny: (attribute isNamed: 'one'). -] - -{ #category : #tests } -XMLAttributeTest >> testIsNamedAny [ - | attribute | - - (attribute := self newNode) name: 'one'. - self - assert: (attribute isNamedAny: #('two' 'one' 'three') asSet); - deny: (attribute isNamedAny: #('two' 'three') asSet). - - attribute name: 'one:two'. - self - assert: (attribute isNamedAny: #('one' 'one:two' 'three')); - assert: (attribute isNamedAny: #('one' 'two' 'three')); - deny: (attribute isNamedAny: #('one' 'three')). -] - -{ #category : #tests } -XMLAttributeTest >> testLocalName [ - | attribute | - - attribute := self newNode. - self assert: attribute name = ''. - - attribute name: 'one'. - self assert: attribute localName = 'one'. - - attribute name: 'two'. - self assert: attribute localName = 'two'. - - attribute name: 'prefix:three'. - self assert: attribute localName = 'three'. - - attribute name: 'four'. - self assert: attribute localName = 'four'. -] - -{ #category : #tests } -XMLAttributeTest >> testMatchesLanguage [ - | attribute | - - attribute := self nodeClass named: 'xml:lang'. - self languageTagsAndFilters do: [:tagAndFilters | - | tag matchingFilters nonMatchingFilters | - - tag := tagAndFilters first. - matchingFilters := tagAndFilters second. - nonMatchingFilters := tagAndFilters third. - (matchingFilters, nonMatchingFilters) do: [:each | - self deny: (attribute matchesLanguage: each)]. - - attribute value: tag. - matchingFilters do: [:each | - self assert: (attribute matchesLanguage: each)]. - nonMatchingFilters do: [:each | - self deny: (attribute matchesLanguage: each)]. - - attribute value: '']. -] - -{ #category : #tests } -XMLAttributeTest >> testName [ - | attribute | - - "XMLAttribute class>>#name: is not tested here because it is soft-deprecated" - - attribute := self newNode. - self - assert: attribute name = ''; - assert: (attribute name: 'one') == attribute; - assert: attribute name = 'one'; - assert: (attribute name: 'prefix:two') == attribute; - assert: attribute name = 'prefix:two'. -] - -{ #category : #tests } -XMLAttributeTest >> testNameValue [ - | attribute | - - attribute := - self nodeClass - name: 'one' - value: 'two'. - self - assert: attribute class == self nodeClass; - assert: attribute name = 'one'; - assert: attribute value = 'two'. -] - -{ #category : #tests } -XMLAttributeTest >> testNamed [ - | attribute | - - attribute := self nodeClass named: 'test'. - self - assert: attribute class == self nodeClass; - assert: attribute name = 'test'. -] - -{ #category : #tests } -XMLAttributeTest >> testNamespaceURI [ - | element attribute| - - element := self newElement. - attribute := self newNode. - element attributeNodes add: attribute. - self assert: attribute namespaceURI = ''. - - element defaultNamespace: 'defaultNS'. - self assert: attribute namespaceURI = ''. - - element declarePrefix: 'prefix' uri: 'prefixNS'. - attribute name: 'prefix:test'. - self assert: attribute namespaceURI = 'prefixNS'. - - attribute name: 'test'. - self assert: attribute namespaceURI = ''. -] - -{ #category : #tests } -XMLAttributeTest >> testPrefix [ - | attribute | - - attribute := self newNode. - self assert: attribute prefix = ''. - - attribute name: 'one'. - self assert: attribute prefix = ''. - - attribute name: 'prefix:two'. - self assert: attribute prefix = 'prefix'. - - attribute name: 'three'. - self assert: attribute prefix = ''. -] - -{ #category : #tests } -XMLAttributeTest >> testResolvePrefix [ - | element attribute| - - element := self newElementWithAttributes. - attribute := element attributeNodes first. - self namespaces keysAndValuesDo: [:prefix :uri | - "no default namespace for attributes" - prefix = '' - ifTrue: [self assert: (attribute resolvePrefix: prefix) = ''] - ifFalse: [self assert: (attribute resolvePrefix: prefix) = uri]]. - - self assert: - (attribute resolvePrefix: 'xml') = XMLNamespaceScope xmlNamespaceURI. - self assert: - (attribute resolvePrefix: 'xmlns') = XMLNamespaceScope xmlnsNamespaceURI. -] - -{ #category : #tests } -XMLAttributeTest >> testResolvePrefixIfUnresolvable [ - | element attribute| - - element := self newElementWithAttributes. - attribute := element attributeNodes first. - self namespaces keysAndValuesDo: [:prefix :uri | - prefix = '' - ifTrue: [ - "no default namespace for attributes" - self assert: - (attribute - resolvePrefix: prefix - ifUnresolvable: ['unresolvable']) = 'unresolvable'] - ifFalse: [ - self assert: - (attribute - resolvePrefix: prefix - ifUnresolvable: [self fail]) = uri]]. - - self assert: - (attribute - resolvePrefix: 'xml' - ifUnresolvable: [self fail]) = XMLNamespaceScope xmlNamespaceURI. - self assert: - (attribute - resolvePrefix: 'xmlns' - ifUnresolvable: [self fail]) = XMLNamespaceScope xmlnsNamespaceURI. -] - -{ #category : #tests } -XMLAttributeTest >> testSortKey [ - self assert: (self newNode name: 'test') sortKey = 'test' -] - -{ #category : #tests } -XMLAttributeTest >> testValue [ - | attribute | - - attribute := self newNode. - self - assert: attribute value = ''; - assert: (attribute value: 'test') == attribute; - assert: attribute value = 'test'. -] - -{ #category : #tests } -XMLAttributeTest >> testWriteXMLOn [ - self - assert: (self nodeClass name: 'name' value: '') printString = 'name=""'; - assert: (self nodeClass name: 'name' value: 'value') printString = 'name="value"'; - assert: - (self nodeClass - name: 'name' - value: self markupString) printString = ('name="', self escapedString, '"') -] diff --git a/src/XML-Tests-Parser/XMLBasicAttributeSpecTest.class.st b/src/XML-Tests-Parser/XMLBasicAttributeSpecTest.class.st deleted file mode 100644 index 0cbf88527..000000000 --- a/src/XML-Tests-Parser/XMLBasicAttributeSpecTest.class.st +++ /dev/null @@ -1,69 +0,0 @@ -Class { - #name : #XMLBasicAttributeSpecTest, - #superclass : #XMLAttributeSpecTest, - #category : #'XML-Tests-Parser-Utils' -} - -{ #category : #accessing } -XMLBasicAttributeSpecTest >> attributeSpecClass [ - ^ XMLBasicAttributeSpec -] - -{ #category : #tests } -XMLBasicAttributeSpecTest >> testMatchesAttributes [ - | attributeSpec | - - attributeSpec := #() asXMLAttributeSpec. - self assert: (attributeSpec matchesAttributes: XMLAttributeDictionary new). - self assert: - (attributeSpec matchesAttributes: - (XMLAttributeDictionary with: 'name' -> 'value')). - - attributeSpec := (Array with: 'name' -> 'value') asXMLAttributeSpec. - self deny: (attributeSpec matchesAttributes: XMLAttributeDictionary new). - self deny: - (attributeSpec matchesAttributes: - (XMLAttributeDictionary with: 'name' -> 'value2')). - self deny: - (attributeSpec matchesAttributes: - (XMLAttributeDictionary with: 'name2' -> 'value')). - self assert: - (attributeSpec matchesAttributes: - (XMLAttributeDictionary with: 'name' -> 'value')). - - attributeSpec := - (Array with: 'name' -> 'value' with: 'name2') asXMLAttributeSpec. - self deny: (attributeSpec matchesAttributes: XMLAttributeDictionary new). - self deny: - (attributeSpec matchesAttributes: - (XMLAttributeDictionary with: 'name' -> 'value2')). - self deny: - (attributeSpec matchesAttributes: - (XMLAttributeDictionary with: 'name2' -> 'value')). - self deny: - (attributeSpec matchesAttributes: - (XMLAttributeDictionary - with: 'name' -> 'value2' - with: 'name2' -> 'value')). - self assert: - (attributeSpec matchesAttributes: - (XMLAttributeDictionary - with: 'name' -> 'value' - with: 'name2' -> 'value2')). - self assert: - (attributeSpec matchesAttributes: - (XMLAttributeDictionary - with: 'name' -> 'value' - with: 'name2' -> 'value2' - with: 'name3' -> 'value3')). - - attributeSpec := - (Array with: 'name3' -> [:value | value endsWith: '3']) asXMLAttributeSpec. - self deny: (attributeSpec matchesAttributes: XMLAttributeDictionary new). - self deny: - (attributeSpec matchesAttributes: - (XMLAttributeDictionary with: 'name3' -> 'value2')). - self assert: - (attributeSpec matchesAttributes: - (XMLAttributeDictionary with: 'name3' -> 'value3')). -] diff --git a/src/XML-Tests-Parser/XMLBasicElementClassMapperTest.class.st b/src/XML-Tests-Parser/XMLBasicElementClassMapperTest.class.st deleted file mode 100644 index cd02a6496..000000000 --- a/src/XML-Tests-Parser/XMLBasicElementClassMapperTest.class.st +++ /dev/null @@ -1,1041 +0,0 @@ -Class { - #name : #XMLBasicElementClassMapperTest, - #superclass : #XMLElementClassMapperTest, - #category : #'XML-Tests-Parser-Utils' -} - -{ #category : #acccessing } -XMLBasicElementClassMapperTest >> mapperClass [ - ^ XMLBasicElementClassMapper -] - -{ #category : #tests } -XMLBasicElementClassMapperTest >> testClassForElement [ - | mapper | - - mapper := self newMapper. - self - assert: (mapper classForElement: 'test') isNil; - assert: (mapper classForElement: 'prefix:test') isNil. - - mapper - mapElement: 'test' - toClass: self elementClass. - self - assert: (mapper classForElement: 'test') == self elementClass; - assert: (mapper classForElement: 'prefix:test') == self elementClass. - - mapper - mapElement: 'test' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self otherElementClass. - self - assert: (mapper classForElement: 'test') == self elementClass; - assert: (mapper classForElement: 'prefix:test') == self elementClass. - - mapper - mapElement: 'test' - namespaceURI: 'testNS' - toClass: self otherElementClass. - self - assert: (mapper classForElement: 'test') == self elementClass; - assert: (mapper classForElement: 'prefix:test') == self elementClass. - - mapper - mapElement: 'test' - namespaceURI: 'testNS' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self otherElementClass. - self - assert: (mapper classForElement: 'test') == self elementClass; - assert: (mapper classForElement: 'prefix:test') == self elementClass. - - "QName mappings should take precedence over NCName mappings" - mapper - mapElement: 'prefix:test' - toClass: self otherElementClass. - self - assert: (mapper classForElement: 'test') == self elementClass; - assert: (mapper classForElement: 'prefix:test') == self otherElementClass. -] - -{ #category : #tests } -XMLBasicElementClassMapperTest >> testClassForElementAttributes [ - | mapper | - - mapper := self newMapper. - self assert: - (mapper - classForElement: 'test' - attributes: self attributes) isNil. - self assert: - (mapper - classForElement: 'prefix:test' - attributes: self attributes) isNil. - - mapper - mapElement: 'test' - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - attributes: self attributes) == self otherElementClass. - (mapper - classForElement: 'prefix:test' - attributes: self attributes) == self otherElementClass. - - mapper - mapElement: 'test' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self elementClass. - self assert: - (mapper - classForElement: 'test' - attributes: self attributes) == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - attributes: self attributes) == self elementClass. - - mapper - mapElement: 'test' - namespaceURI: 'testNS' - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - attributes: self attributes) == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - attributes: self attributes) == self elementClass. - - mapper - mapElement: 'test' - namespaceURI: 'testNS' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - attributes: self attributes) == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - attributes: self attributes) == self elementClass. - - "QName mappings should take precedence over NCName mappings" - mapper - mapElement: 'prefix:test' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - attributes: self attributes) == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - attributes: self attributes) == self otherElementClass. -] - -{ #category : #tests } -XMLBasicElementClassMapperTest >> testClassForElementAttributesIfNone [ - | mapper | - - mapper := self newMapper. - self assert: - (mapper - classForElement: 'test' - attributes: self attributes - ifNone: [#none]) == #none. - self assert: - (mapper - classForElement: 'prefix:test' - attributes: self attributes - ifNone: [#none]) == #none. - - mapper - mapElement: 'test' - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - attributes: self attributes - ifNone: [self fail]) == self otherElementClass. - self assert: - (mapper - classForElement: 'prefix:test' - attributes: self attributes - ifNone: [self fail]) == self otherElementClass. - - mapper - mapElement: 'test' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self elementClass. - self assert: - (mapper - classForElement: 'test' - attributes: self attributes - ifNone: [self fail]) == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - attributes: self attributes - ifNone: [self fail]) == self elementClass. - - mapper - mapElement: 'test' - namespaceURI: 'testNS' - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - attributes: self attributes - ifNone: [self fail]) == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - attributes: self attributes - ifNone: [self fail]) == self elementClass. - - mapper - mapElement: 'test' - namespaceURI: 'testNS' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - attributes: self attributes - ifNone: [self fail]) == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - attributes: self attributes - ifNone: [self fail]) == self elementClass. - - "QName mappings should take precedence over NCName mappings" - mapper - mapElement: 'prefix:test' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - attributes: self attributes - ifNone: [self fail]) == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - attributes: self attributes - ifNone: [self fail]) == self otherElementClass. -] - -{ #category : #tests } -XMLBasicElementClassMapperTest >> testClassForElementIfNone [ - | mapper | - - mapper := self newMapper. - self assert: - (mapper - classForElement: 'test' - ifNone: [#none]) == #none. - self assert: - (mapper - classForElement: 'prefix:test' - ifNone: [#none]) == #none. - - mapper - mapElement: 'test' - toClass: self elementClass. - self assert: - (mapper - classForElement: 'test' - ifNone: [self fail]) == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - ifNone: [self fail]) == self elementClass. - - mapper - mapElement: 'test' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - ifNone: [self fail]) == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - ifNone: [self fail]) == self elementClass. - - mapper - mapElement: 'test' - namespaceURI: 'testNS' - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - ifNone: [self fail]) == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - ifNone: [self fail]) == self elementClass. - - mapper - mapElement: 'test' - namespaceURI: 'testNS' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - ifNone: [self fail]) == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - ifNone: [self fail]) == self elementClass. - - "QName mappings should take precedence over NCName mappings" - mapper - mapElement: 'prefix:test' - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - ifNone: [self fail]) == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - ifNone: [self fail]) == self otherElementClass. -] - -{ #category : #tests } -XMLBasicElementClassMapperTest >> testClassForElementNamespaceURI [ - | mapper | - - mapper := self newMapper. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS') isNil. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS') isNil. - - mapper - mapElement: 'test' - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS') == self otherElementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS') == self otherElementClass. - - mapper - mapElement: 'test' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS') == self otherElementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS') == self otherElementClass. - - mapper - mapElement: 'test' - namespaceURI: 'testNS' - toClass: self elementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS') == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS') == self elementClass. - - mapper - mapElement: 'test' - namespaceURI: 'testNS' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS') == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS') == self elementClass. - - "QName mappings should take precedence over NCName mappings" - mapper - mapElement: 'prefix:test' - namespaceURI: 'testNS' - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS') == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS') == self otherElementClass. -] - -{ #category : #tests } -XMLBasicElementClassMapperTest >> testClassForElementNamespaceURIAttributes [ - | mapper | - - mapper := self newMapper. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - attributes: self attributes) isNil. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - attributes: self attributes) isNil. - - mapper - mapElement: 'test' - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - attributes: self attributes) == self otherElementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - attributes: self attributes) == self otherElementClass. - - mapper - mapElement: 'test' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - attributes: self attributes) == self otherElementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - attributes: self attributes) == self otherElementClass. - - mapper - mapElement: 'test' - namespaceURI: 'testNS' - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - attributes: self attributes) == self otherElementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - attributes: self attributes) == self otherElementClass. - - mapper - mapElement: 'test' - namespaceURI: 'testNS' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self elementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - attributes: self attributes) == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - attributes: self attributes) == self elementClass. - - "QName mappings should take precedence over NCName mappings" - mapper - mapElement: 'prefix:test' - namespaceURI: 'testNS' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - attributes: self attributes) == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - attributes: self attributes) == self otherElementClass. -] - -{ #category : #tests } -XMLBasicElementClassMapperTest >> testClassForElementNamespaceURIAttributesIfNone [ - | mapper | - - mapper := self newMapper. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - attributes: self attributes - ifNone: [#none]) == #none. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - attributes: self attributes - ifNone: [#none]) == #none. - - mapper - mapElement: 'test' - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - attributes: self attributes - ifNone: [self fail]) == self otherElementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - attributes: self attributes - ifNone: [self fail]) == self otherElementClass. - - mapper - mapElement: 'test' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - attributes: self attributes - ifNone: [self fail]) == self otherElementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - attributes: self attributes - ifNone: [self fail]) == self otherElementClass. - - mapper - mapElement: 'test' - namespaceURI: 'testNS' - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - attributes: self attributes - ifNone: [self fail]) == self otherElementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - attributes: self attributes - ifNone: [self fail]) == self otherElementClass. - - mapper - mapElement: 'test' - namespaceURI: 'testNS' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self elementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - attributes: self attributes - ifNone: [self fail]) == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - attributes: self attributes - ifNone: [self fail]) == self elementClass. - - "QName mappings should take precedence over NCName mappings" - mapper - mapElement: 'prefix:test' - namespaceURI: 'testNS' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - attributes: self attributes - ifNone: [self fail]) == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - attributes: self attributes - ifNone: [self fail]) == self otherElementClass. -] - -{ #category : #tests } -XMLBasicElementClassMapperTest >> testClassForElementNamespaceURIIfNone [ - | mapper | - - mapper := self newMapper. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - ifNone: [#none]) == #none. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - ifNone: [#none]) == #none. - - mapper - mapElement: 'test' - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - ifNone: [self fail]) == self otherElementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - ifNone: [self fail]) == self otherElementClass. - - mapper - mapElement: 'test' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - ifNone: [self fail]) == self otherElementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - ifNone: [self fail]) == self otherElementClass. - - mapper - mapElement: 'test' - namespaceURI: 'testNS' - toClass: self elementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - ifNone: [self fail]) == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - ifNone: [self fail]) == self elementClass. - - mapper - mapElement: 'test' - namespaceURI: 'testNS' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - ifNone: [self fail]) == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - ifNone: [self fail]) == self elementClass. - - "QName mappings should take precedence over NCName mappings" - mapper - mapElement: 'prefix:test' - namespaceURI: 'testNS' - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - ifNone: [self fail]) == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - ifNone: [self fail]) == self otherElementClass. -] - -{ #category : #tests } -XMLBasicElementClassMapperTest >> testClassForElementNamespaceURILocalNameAttributes [ - | mapper | - - mapper := self newMapper. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - localName: 'test' - attributes: self attributes) isNil. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - localName: 'test' - attributes: self attributes) isNil. - - mapper - mapElement: 'test' - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - localName: 'test' - attributes: self attributes) == self otherElementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - localName: 'test' - attributes: self attributes) == self otherElementClass. - - mapper - mapElement: 'test' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - localName: 'test' - attributes: self attributes) == self otherElementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - localName: 'test' - attributes: self attributes) == self otherElementClass. - - mapper - mapElement: 'test' - namespaceURI: 'testNS' - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - localName: 'test' - attributes: self attributes) == self otherElementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - localName: 'test' - attributes: self attributes) == self otherElementClass. - - mapper - mapElement: 'test' - namespaceURI: 'testNS' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self elementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - localName: 'test' - attributes: self attributes) == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - localName: 'test' - attributes: self attributes) == self elementClass. - - "QName mappings should take precedence over NCName mappings" - mapper - mapElement: 'prefix:test' - namespaceURI: 'testNS' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - localName: 'test' - attributes: self attributes) == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - localName: 'test' - attributes: self attributes) == self otherElementClass. -] - -{ #category : #tests } -XMLBasicElementClassMapperTest >> testClassForElementNamespaceURILocalNameAttributesIfNone [ - | mapper | - - mapper := self newMapper. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - localName: 'test' - attributes: self attributes - ifNone: [#none]) == #none. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - localName: 'test' - attributes: self attributes - ifNone: [#none]) == #none. - - mapper - mapElement: 'test' - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - localName: 'test' - attributes: self attributes - ifNone: [self fail]) == self otherElementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - localName: 'test' - attributes: self attributes - ifNone: [self fail]) == self otherElementClass. - - mapper - mapElement: 'test' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - localName: 'test' - attributes: self attributes - ifNone: [self fail]) == self otherElementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - localName: 'test' - attributes: self attributes - ifNone: [self fail]) == self otherElementClass. - - mapper - mapElement: 'test' - namespaceURI: 'testNS' - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - localName: 'test' - attributes: self attributes - ifNone: [self fail]) == self otherElementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - localName: 'test' - attributes: self attributes - ifNone: [self fail]) == self otherElementClass. - - mapper - mapElement: 'test' - namespaceURI: 'testNS' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self elementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - localName: 'test' - attributes: self attributes - ifNone: [self fail]) == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - localName: 'test' - attributes: self attributes - ifNone: [self fail]) == self elementClass. - - "QName mappings should take precedence over NCName mappings" - mapper - mapElement: 'prefix:test' - namespaceURI: 'testNS' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self otherElementClass. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - localName: 'test' - attributes: self attributes - ifNone: [self fail]) == self elementClass. - self assert: - (mapper - classForElement: 'prefix:test' - namespaceURI: 'testNS' - localName: 'test' - attributes: self attributes - ifNone: [self fail]) == self otherElementClass. -] - -{ #category : #tests } -XMLBasicElementClassMapperTest >> testCopy [ - | mapper copy | - - mapper := self newMapperWithMappings. - copy := mapper copy. - self - deny: mapper == copy; - deny: mapper elementClassMap == copy elementClassMap; - assert: mapper elementClassMap = copy elementClassMap. - - mapper elementClassMap values - with: copy elementClassMap values - do: [:classOrCollection :classOrCollectionCopy | - "the collection values need to be copied so any new mappings - in either the copy or original don't affect the other" - classOrCollection isCollection - ifTrue: [ - self - deny: classOrCollection == classOrCollectionCopy; - assert: classOrCollection = classOrCollectionCopy] - ifFalse: [ - self deny: classOrCollection == classOrCollectionCopy]]. - - mapper - mapElement: 'test' - toClass: self otherElementClass. - self deny: mapper elementClassMap = copy elementClassMap. -] - -{ #category : #tests } -XMLBasicElementClassMapperTest >> testMapElementAttributeSpecToClass [ - | mapper | - - mapper := self newMapper. - self assert: - (mapper - mapElement: 'test' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self elementClass) == mapper. - self assert: - (mapper - classForElement: 'test' - attributes: self attributes) == self elementClass. - - self assert: - (mapper - mapElement: 'test' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self otherElementClass) == mapper. - self assert: - (mapper - classForElement: 'test' - attributes: self attributes) == self otherElementClass. -] - -{ #category : #tests } -XMLBasicElementClassMapperTest >> testMapElementNamespaceURIAttributeSpecToClass [ - | mapper | - - mapper := self newMapper. - self assert: - (mapper - mapElement: 'test' - namespaceURI: 'testNS' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self elementClass) == mapper. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - attributes: self attributes) == self elementClass. - - self assert: - (mapper - mapElement: 'test' - namespaceURI: 'testNS' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self otherElementClass) == mapper. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS' - attributes: self attributes) == self otherElementClass. -] - -{ #category : #tests } -XMLBasicElementClassMapperTest >> testMapElementNamespaceURIToClass [ - | mapper | - - mapper := self newMapper. - self assert: - (mapper - mapElement: 'test' - namespaceURI: 'testNS' - toClass: self elementClass) == mapper. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS') == self elementClass. - - self assert: - (mapper - mapElement: 'test' - namespaceURI: 'testNS' - toClass: self otherElementClass) == mapper. - self assert: - (mapper - classForElement: 'test' - namespaceURI: 'testNS') == self otherElementClass. -] - -{ #category : #tests } -XMLBasicElementClassMapperTest >> testMapElementToClass [ - | mapper | - - mapper := self newMapper. - self assert: - (mapper - mapElement: 'test' - toClass: self elementClass) == mapper. - self assert: (mapper classForElement: 'test') == self elementClass. - - self assert: - (mapper - mapElement: 'test' - toClass: self otherElementClass) == mapper. - self assert: (mapper classForElement: 'test') == self otherElementClass. -] diff --git a/src/XML-Tests-Parser/XMLCDataTest.class.st b/src/XML-Tests-Parser/XMLCDataTest.class.st deleted file mode 100644 index e34d67dd5..000000000 --- a/src/XML-Tests-Parser/XMLCDataTest.class.st +++ /dev/null @@ -1,45 +0,0 @@ -Class { - #name : #XMLCDataTest, - #superclass : #XMLStringTest, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #accessing } -XMLCDataTest >> nodeClass [ - ^ XMLCData -] - -{ #category : #tests } -XMLCDataTest >> testAcceptNodeVisitor [ - | visitor cdata message | - - visitor := XMLRecordingNodeVisitor new. - cdata := self newNode. - self - assert: (cdata acceptNodeVisitor: visitor) == cdata; - assert: visitor messageRecorder hasMessages. - - message := visitor messageRecorder nextMessage. - self - assert: message selector == #visitCData:; - assert: message arguments = (Array with: cdata); - assert: visitor messageRecorder hasMessages. - - message := visitor messageRecorder nextMessage. - self - assert: message selector == #visitStringNode:; - assert: message arguments = (Array with: cdata); - deny: visitor messageRecorder hasMessages. -] - -{ #category : #tests } -XMLCDataTest >> testIsCData [ - self assert: self newNode isCData -] - -{ #category : #tests } -XMLCDataTest >> testWriteXMLOn [ - self - assert: self newNode printString = '<![CDATA[]]>'; - assert: (self nodeClass string: self markupString) printString = ('<![CDATA[', self markupString, ']]>'). -] diff --git a/src/XML-Tests-Parser/XMLCachingAttributeListTest.class.st b/src/XML-Tests-Parser/XMLCachingAttributeListTest.class.st deleted file mode 100644 index 2b771b22c..000000000 --- a/src/XML-Tests-Parser/XMLCachingAttributeListTest.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #XMLCachingAttributeListTest, - #superclass : #XMLAttributeListTest, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #accessing } -XMLCachingAttributeListTest >> listClass [ - ^ XMLCachingAttributeList -] - -{ #category : #accessing } -XMLCachingAttributeListTest >> listCopyClass [ - ^ XMLAttributeList -] diff --git a/src/XML-Tests-Parser/XMLCachingNodeListTest.class.st b/src/XML-Tests-Parser/XMLCachingNodeListTest.class.st deleted file mode 100644 index cb413c355..000000000 --- a/src/XML-Tests-Parser/XMLCachingNodeListTest.class.st +++ /dev/null @@ -1,45 +0,0 @@ -Class { - #name : #XMLCachingNodeListTest, - #superclass : #XMLNodeListTest, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #accessing } -XMLCachingNodeListTest >> listClass [ - ^ XMLCachingNodeList -] - -{ #category : #accessing } -XMLCachingNodeListTest >> listCopyClass [ - ^ XMLNodeList -] - -{ #category : #tests } -XMLCachingNodeListTest >> testSort [ - | list cachedElements | - - super testSort. - - list := self listWithItems. - cachedElements := list elements. - list sort: self reverseSortBlock. - self assert: list elements = (cachedElements sort: self reverseSortBlock). -] - -{ #category : #tests } -XMLCachingNodeListTest >> testSwapWith [ - | list cachedElements start end | - - super testSwapWith. - - list := self listWithItems. - cachedElements := list elements. - start := 1. - end := list size. - [start < end] - whileTrue: [ - list swap: start with: end. - start := start + 1. - end := end - 1]. - self assert: list elements = cachedElements reversed. -] diff --git a/src/XML-Tests-Parser/XMLCharacterMethodsTest.class.st b/src/XML-Tests-Parser/XMLCharacterMethodsTest.class.st deleted file mode 100644 index 066aa2698..000000000 --- a/src/XML-Tests-Parser/XMLCharacterMethodsTest.class.st +++ /dev/null @@ -1,218 +0,0 @@ -Class { - #name : #XMLCharacterMethodsTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser' -} - -{ #category : #accessing } -XMLCharacterMethodsTest class >> allChars [ - "to conserve memory, do not persistently cache this" - ^ BitmapCharacterSet fromXMLBNF: - '#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]' -] - -{ #category : #accessing } -XMLCharacterMethodsTest class >> allNameChars [ - "to conserve memory, do not persistently cache this" - ^ self allNameStartChars, - (BitmapCharacterSet fromXMLBNF: - '"-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]') -] - -{ #category : #accessing } -XMLCharacterMethodsTest class >> allNameStartChars [ - "to conserve memory, do not persistently cache this" - ^ BitmapCharacterSet fromXMLBNF: - '":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | - [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | - [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | - [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]' -] - -{ #category : #accessing } -XMLCharacterMethodsTest class >> allNonChars [ - "to conserve memory, do not persistently cache this" - ^ self allChars complement -] - -{ #category : #accessing } -XMLCharacterMethodsTest class >> allNonNameChars [ - "to conserve memory, do not persistently cache this" - ^ self allNameChars complement -] - -{ #category : #accessing } -XMLCharacterMethodsTest class >> allNonNameStartCharNameChars [ - "to conserve memory, do not persistently cache this" - ^ (BitmapCharacterSet fromXMLBNF: - '"-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]') -] - -{ #category : #accessing } -XMLCharacterMethodsTest class >> allNonNameStartChars [ - "to conserve memory, do not persistently cache this" - ^ self allNameStartChars complement -] - -{ #category : #accessing } -XMLCharacterMethodsTest class >> nonChars [ - "These values are a limited selection from #allNonChars, including the - start and end of each char range (used for performance)" - ^ #(16r1 16r2 16r3 16r4 16r5 16r6 16r7 16r8 - 16rB 16rC 16rE 16rF - 16r10 16r11 16r12 16r13 16r14 16r15 16r16 16r17 16r18 16r19 - 16r1A 16r1B 16r1C 16r1D 16r1E 16r1F - 16rD800 16rDFFF - 16rFFFE 16rFFFF) - collect: [:each | each asCharacter] -] - -{ #category : #accessing } -XMLCharacterMethodsTest class >> nonNameChars [ - "These are a limited selection of values from #allNonNameChars, including - the start and end of each char range (used for performance)" - ^ #(16r01 16r0F 16r10 - 16r2C 16r2F 16r3B - 16r40 16r5B 16r5E - 16r60 16r7B 16r80 - 16rB6 16rB8 16rBF - 16rD7 16rF7 16r37E - 16r2000 16r200B 16r200E 16r206F - 16r2190 16r2BFF 16r2FFF 16r3000 - 16rD800 16rF8FF 16rFDD0 16rFDEF - 16rFFFE 16r0FFFF 16rF0000 16r10FFFF) - collect: [:each | each asCharacter] -] - -{ #category : #accessing } -XMLCharacterMethodsTest class >> nonNameStartCharNameChars [ - "These are a limited selection of values from #allNonNameStartCharNameChars, - including the start and end of each char range (used for performance)" - ^ #($- $. - $0 $1 $2 $3 $4 $5 $6 $7 $8 $9 - 16rB7 16r0300 16r036F 16r203F 16r2040) - collect: [:each | each asCharacter] -] - -{ #category : #accessing } -XMLCharacterMethodsTest >> allChars [ - ^ self class allChars -] - -{ #category : #accessing } -XMLCharacterMethodsTest >> allNameChars [ - ^ self class allNameChars -] - -{ #category : #accessing } -XMLCharacterMethodsTest >> allNameStartChars [ - ^ self class allNameStartChars -] - -{ #category : #accessing } -XMLCharacterMethodsTest >> allNonChars [ - ^ self class allNonChars -] - -{ #category : #accessing } -XMLCharacterMethodsTest >> allNonNameChars [ - ^ self class allNonNameChars -] - -{ #category : #accessing } -XMLCharacterMethodsTest >> allNonNameStartCharNameChars [ - ^ self class allNonNameStartCharNameChars -] - -{ #category : #tests } -XMLCharacterMethodsTest >> testIsXMLChar [ - self allChars do: [:each | - self assert: each isXMLChar]. - self allNonChars do: [:each | - self deny: each isXMLChar]. - self deny: nil isXMLChar. -] - -{ #category : #tests } -XMLCharacterMethodsTest >> testIsXMLNCNameChar [ - self allNameChars do: [:each | - each == $: - ifTrue: [self deny: each isXMLNCNameChar] - ifFalse: [self assert: each isXMLNCNameChar]]. - self allNonNameChars do: [:each | - self deny: each isXMLNCNameChar]. - self deny: nil isXMLNCNameChar. -] - -{ #category : #tests } -XMLCharacterMethodsTest >> testIsXMLNCNameStartChar [ - self allNameStartChars do: [:each | - each == $: - ifTrue: [self deny: each isXMLNCNameStartChar] - ifFalse: [self assert: each isXMLNCNameStartChar]]. - self allNonNameChars do: [:each | - self deny: each isXMLNCNameStartChar]. - self allNonNameStartCharNameChars do: [:each | - self deny: each isXMLNCNameStartChar]. - self deny: nil isXMLNCNameStartChar. -] - -{ #category : #tests } -XMLCharacterMethodsTest >> testIsXMLNameChar [ - self allNameChars do: [:each | - self assert: each isXMLNameChar]. - self allNonNameChars do: [:each | - self deny: each isXMLNameChar]. - self deny: nil isXMLNameChar. -] - -{ #category : #tests } -XMLCharacterMethodsTest >> testIsXMLNameStartChar [ - self allNameStartChars do: [:each | - self assert: each isXMLNameStartChar]. - self allNonNameChars do: [:each | - self deny: each isXMLNameStartChar]. - self allNonNameStartCharNameChars do: [:each | - self deny: each isXMLNameStartChar]. - self deny: nil isXMLNameStartChar. -] - -{ #category : #tests } -XMLCharacterMethodsTest >> testIsXMLSeparator [ - | separators | - - separators := BitmapCharacterSet newFrom: Character xmlSeparators. - separators do: [:each | - self assert: each isXMLSeparator]. - separators complement do: [:each | - self deny: each isXMLSeparator]. - self deny: nil isXMLSeparator. -] - -{ #category : #tests } -XMLCharacterMethodsTest >> testIsXMLWhitespace [ - | whitespace | - - whitespace := BitmapCharacterSet newFrom: Character xmlWhitespace. - whitespace do: [:each | - self assert: each isXMLWhitespace]. - whitespace complement do: [:each | - self deny: each isXMLWhitespace]. - self deny: nil isXMLWhitespace. -] - -{ #category : #tests } -XMLCharacterMethodsTest >> testXMLSplit [ - self - assert: ($: xmlSplit: '') = (OrderedCollection with: ''); - assert: ($: xmlSplit: 'abc') = (OrderedCollection with: 'abc'); - assert: ($: xmlSplit: ':') = #('' '') asOrderedCollection; - assert: ($: xmlSplit: '::') = #('' '' '') asOrderedCollection; - assert: ($: xmlSplit: 'a:bc:') = #('a' 'bc' '') asOrderedCollection; - assert: ($: xmlSplit: ':ab:c:') = #('' 'ab' 'c' '') asOrderedCollection; - assert: ($: xmlSplit: 'a:bc:') = #('a' 'bc' '') asOrderedCollection; - assert: ($: xmlSplit: 'ab::cd::ef') = #('ab' '' 'cd' '' 'ef') asOrderedCollection; - assert: - ($: xmlSplit: '::ab:::cd:::ef::') = - #('' '' 'ab' '' '' 'cd' '' '' 'ef' '' '') asOrderedCollection -] diff --git a/src/XML-Tests-Parser/XMLClassFinderTest.class.st b/src/XML-Tests-Parser/XMLClassFinderTest.class.st deleted file mode 100644 index d7315db32..000000000 --- a/src/XML-Tests-Parser/XMLClassFinderTest.class.st +++ /dev/null @@ -1,93 +0,0 @@ -Class { - #name : #XMLClassFinderTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser-Utils' -} - -{ #category : #accessing } -XMLClassFinderTest >> absentClassName [ - ^ (self presentClassName asString, 'ShouldNotBePresent') asString -] - -{ #category : #accessing } -XMLClassFinderTest >> classFinder [ - ^ XMLClassFinder -] - -{ #category : #accessing } -XMLClassFinderTest >> presentClass [ - ^ self class -] - -{ #category : #accessing } -XMLClassFinderTest >> presentClassName [ - ^ self class name asSymbol -] - -{ #category : #tests } -XMLClassFinderTest >> testClassNamed [ - self assert: - (self classFinder classNamed: self presentClassName) == - self presentClass. - self assert: (self classFinder classNamed: self absentClassName) isNil. -] - -{ #category : #tests } -XMLClassFinderTest >> testClassNamedIfAbsent [ - self assert: - (self classFinder - classNamed: self presentClassName - ifAbsent: [self fail]) == self presentClass. - self assert: - (self classFinder - classNamed: self absentClassName - ifAbsent: [#absent]) = #absent. -] - -{ #category : #tests } -XMLClassFinderTest >> testClassNamedIfPresent [ - self assert: - (self classFinder - classNamed: self presentClassName - ifPresent: [:presentClass | #present -> presentClass]) = - (#present -> self presentClass). - "ensure cull: is used" - self assert: - (self classFinder - classNamed: self presentClassName - ifPresent: [#present]) = #present. - - self assert: - (self classFinder - classNamed: self absentClassName - ifPresent: [self fail]) isNil. -] - -{ #category : #tests } -XMLClassFinderTest >> testClassNamedIfPresentIfAbsent [ - self assert: - (self classFinder - classNamed: self presentClassName - ifPresent: [:presentClass | #present -> presentClass] - ifAbsent: [self fail]) = - (#present -> self presentClass). - "ensure cull: is used" - self assert: - (self classFinder - classNamed: self presentClassName - ifPresent: [#present] - ifAbsent: [self fail]) = #present. - - self assert: - (self classFinder - classNamed: self absentClassName - ifPresent: [self fail] - ifAbsent: [#absent]) = #absent. -] - -{ #category : #tests } -XMLClassFinderTest >> testHasClassNamed [ - self - assert: (self classFinder hasClassNamed: self presentClassName); - deny: (self classFinder hasClassNamed: self absentClassName) -] diff --git a/src/XML-Tests-Parser/XMLCommentTest.class.st b/src/XML-Tests-Parser/XMLCommentTest.class.st deleted file mode 100644 index 7136ac0f0..000000000 --- a/src/XML-Tests-Parser/XMLCommentTest.class.st +++ /dev/null @@ -1,76 +0,0 @@ -Class { - #name : #XMLCommentTest, - #superclass : #XMLNodeTest, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #accessing } -XMLCommentTest >> nodeClass [ - ^ XMLComment -] - -{ #category : #tests } -XMLCommentTest >> testAcceptNodeVisitor [ - | visitor comment message | - - visitor := XMLRecordingNodeVisitor new. - comment := self newNode. - self - assert: (comment acceptNodeVisitor: visitor) == comment; - assert: visitor messageRecorder hasMessages. - - message := visitor messageRecorder nextMessage. - self - assert: message selector == #visitComment:; - assert: message arguments = (Array with: comment); - deny: visitor messageRecorder hasMessages. -] - -{ #category : #tests } -XMLCommentTest >> testCanonicallyEquals [ - super testCanonicallyEquals. - self assert: - ((self nodeClass string: 'test') canonicallyEquals: - (self nodeClass string: 'test')). - self deny: - ((self nodeClass string: 'test') canonicallyEquals: - self newNode). -] - -{ #category : #tests } -XMLCommentTest >> testIsComment [ - self assert: self newNode isComment -] - -{ #category : #tests } -XMLCommentTest >> testSortKey [ - self assert: (self nodeClass string: 'test') sortKey = 'test' -] - -{ #category : #tests } -XMLCommentTest >> testString [ - | comment | - - comment := self nodeClass string: self markupString. - self - assert: comment class == self nodeClass; - assert: comment string = self markupString. - - comment := self newNode. - self assert: comment string = ''. - - comment string: self markupString. - self assert: comment string = self markupString. - - comment string: ''. - self assert: comment string = ''. -] - -{ #category : #tests } -XMLCommentTest >> testWriteXMLOn [ - self - assert: self newNode printString = '<!---->'; - assert: - (self nodeClass string: self markupString) printString = - ('<!--', self markupString, '-->') -] diff --git a/src/XML-Tests-Parser/XMLConfigurationTest.class.st b/src/XML-Tests-Parser/XMLConfigurationTest.class.st deleted file mode 100644 index 8f239f146..000000000 --- a/src/XML-Tests-Parser/XMLConfigurationTest.class.st +++ /dev/null @@ -1,264 +0,0 @@ -Class { - #name : #XMLConfigurationTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser' -} - -{ #category : #testing } -XMLConfigurationTest class >> shouldInheritSelectors [ - ^ true -] - -{ #category : #accessing } -XMLConfigurationTest >> configurationClass [ - ^ XMLConfiguration -] - -{ #category : #accessing } -XMLConfigurationTest >> externalEntityResolverClass [ - ^ DTDCachingExternalEntityResolver -] - -{ #category : #'instance creation' } -XMLConfigurationTest >> newConfiguration [ - ^ self configurationClass new -] - -{ #category : #accessing } -XMLConfigurationTest >> otherParserHandlerClass [ - ^ SAX2Parser -] - -{ #category : #accessing } -XMLConfigurationTest >> parserHandlerClass [ - ^ SAXHandler -] - -{ #category : #tests } -XMLConfigurationTest >> testCopy [ - | configuration externalEntityResolver copy | - - externalEntityResolver := self externalEntityResolverClass new. - (configuration := self newConfiguration) - isValidating: false; - usesNamespaces: false; - decodesCharacters: false; - parserHandlerClass: self otherParserHandlerClass; - documentReadLimit: XMLParserLimits defaultDocumentReadLimit - 1; - maxEntityReplacementDepth: XMLParserLimits defaultMaxEntityReplacementDepth - 1; - preservesUndeclaredEntityReferences: true; - replacesContentEntityReferences: false; - resolvesExternalEntities: true; - externalEntityResolver: externalEntityResolver. - copy := configuration copy. - self - deny: copy == configuration; - assert: copy isValidating = configuration isValidating; - assert: copy usesNamespaces = configuration usesNamespaces; - assert: copy decodesCharacters = configuration decodesCharacters; - assert: copy requiresSchema = configuration requiresSchema; - assert: copy parserHandlerClass == configuration parserHandlerClass. - - self - deny: copy parserLimits == configuration parserLimits; - assert: copy documentReadLimit = configuration documentReadLimit; - assert: copy maxEntityReplacementDepth = configuration maxEntityReplacementDepth. - - self - deny: copy entityConfiguration == configuration entityConfiguration; - assert: copy preservesUndeclaredEntityReferences = configuration preservesUndeclaredEntityReferences; - assert: copy replacesContentEntityReferences = configuration replacesContentEntityReferences; - assert: copy resolvesExternalEntities = configuration resolvesExternalEntities; - deny: copy externalEntityResolver == configuration externalEntityResolver; - assert: copy externalEntityResolver class == configuration externalEntityResolver class. -] - -{ #category : #tests } -XMLConfigurationTest >> testDecodesCharacters [ - | configuration | - - configuration := self newConfiguration. - self - assert: configuration decodesCharacters; - assert: (configuration decodesCharacters: false) == configuration; - deny: configuration decodesCharacters; - assert: (configuration decodesCharacters: true) == configuration; - assert: configuration decodesCharacters. -] - -{ #category : #tests } -XMLConfigurationTest >> testDocumentReadLimit [ - | configuration | - - configuration := self newConfiguration. - self - assert: configuration documentReadLimit = XMLParserLimits defaultDocumentReadLimit; - assert: (configuration documentReadLimit: 100000) == configuration; - assert: configuration documentReadLimit = 100000; - assert: (configuration documentReadLimit: nil) == configuration; - assert: configuration documentReadLimit isNil. -] - -{ #category : #tests } -XMLConfigurationTest >> testEntityConfiguration [ - | configuration newEntityConfiguration | - - configuration := self newConfiguration. - self assert: configuration entityConfiguration class == DTDEntityConfiguration. - - newEntityConfiguration := DTDEntityConfiguration new. - self assert: - (configuration entityConfiguration: newEntityConfiguration) == - configuration. - self assert: configuration entityConfiguration == newEntityConfiguration. -] - -{ #category : #tests } -XMLConfigurationTest >> testExternalEntityResolver [ - | configuration oldResolver newResolver | - - configuration := self newConfiguration. - oldResolver := configuration externalEntityResolver. - self assert: oldResolver class == self externalEntityResolverClass. - - newResolver := self externalEntityResolverClass new. - self - assert: (configuration externalEntityResolver: newResolver) == configuration; - assert: configuration externalEntityResolver == newResolver. -] - -{ #category : #tests } -XMLConfigurationTest >> testIsValidating [ - | configuration | - - configuration := self newConfiguration. - self - assert: configuration isValidating; - assert: (configuration isValidating: false) == configuration; - deny: configuration isValidating; - assert: (configuration isValidating: true) == configuration; - assert: configuration isValidating. -] - -{ #category : #tests } -XMLConfigurationTest >> testMaxEntityReplacementDepth [ - | configuration | - - configuration := self newConfiguration. - self assert: - configuration maxEntityReplacementDepth = - XMLParserLimits defaultMaxEntityReplacementDepth. - self - assert: (configuration maxEntityReplacementDepth: 20) == configuration; - assert: configuration maxEntityReplacementDepth = 20; - assert: (configuration maxEntityReplacementDepth: nil) == configuration; - assert: configuration maxEntityReplacementDepth isNil. -] - -{ #category : #tests } -XMLConfigurationTest >> testParserHandlerClass [ - | configuration | - - configuration := self newConfiguration. - self assert: configuration parserHandlerClass == self parserHandlerClass. - self assert: - (configuration parserHandlerClass: self otherParserHandlerClass) == - configuration. - self assert: configuration parserHandlerClass == self otherParserHandlerClass. -] - -{ #category : #tests } -XMLConfigurationTest >> testParserLimits [ - | configuration newParserLimits | - - configuration := self newConfiguration. - self assert: configuration parserLimits class == XMLParserLimits. - - newParserLimits := XMLParserLimits new. - self - assert: (configuration parserLimits: newParserLimits) == configuration; - assert: configuration parserLimits == newParserLimits. -] - -{ #category : #tests } -XMLConfigurationTest >> testPreservesUndeclaredEntityReferences [ - | configuration | - - configuration := self newConfiguration. - self deny: configuration preservesUndeclaredEntityReferences. - - "enabling should disable validation" - self assert: - (configuration preservesUndeclaredEntityReferences: true) == - configuration. - self - assert: configuration preservesUndeclaredEntityReferences; - deny: configuration isValidating. - - self - assert: (configuration isValidating: true) == configuration; - assert: configuration isValidating; - deny: configuration preservesUndeclaredEntityReferences. -] - -{ #category : #tests } -XMLConfigurationTest >> testReplacesContentEntityReferences [ - | configuration | - - configuration := self newConfiguration. - self assert: configuration replacesContentEntityReferences. - self assert: - (configuration replacesContentEntityReferences: false) == - configuration. - self deny: configuration replacesContentEntityReferences. - self assert: - (configuration replacesContentEntityReferences: true) == - configuration. - self assert: configuration replacesContentEntityReferences. -] - -{ #category : #tests } -XMLConfigurationTest >> testRequiresSchema [ - | configuration | - - (configuration := self newConfiguration) isValidating: false. - self deny: configuration requiresSchema. - - "enabling should force validation" - self - assert: (configuration requiresSchema: true) == configuration; - assert: configuration requiresSchema; - assert: configuration isValidating. - - self - assert: (configuration isValidating: false) == configuration; - deny: configuration isValidating; - deny: configuration requiresSchema. -] - -{ #category : #tests } -XMLConfigurationTest >> testResolvesExternalEntities [ - | configuration | - - configuration := self newConfiguration. - "should not resolve external entities by default for security" - self - deny: configuration resolvesExternalEntities; - assert: (configuration resolvesExternalEntities: true) == configuration; - assert: configuration resolvesExternalEntities; - assert: (configuration resolvesExternalEntities: false) == configuration; - deny: configuration resolvesExternalEntities. -] - -{ #category : #tests } -XMLConfigurationTest >> testUsesNamespaces [ - | configuration | - - configuration := self newConfiguration. - self - assert: configuration usesNamespaces; - assert: (configuration usesNamespaces: false) == configuration; - deny: configuration usesNamespaces; - assert: (configuration usesNamespaces: true) == configuration; - assert: configuration usesNamespaces. -] diff --git a/src/XML-Tests-Parser/XMLDFALimitsTests.class.st b/src/XML-Tests-Parser/XMLDFALimitsTests.class.st deleted file mode 100644 index ccf1b814c..000000000 --- a/src/XML-Tests-Parser/XMLDFALimitsTests.class.st +++ /dev/null @@ -1,83 +0,0 @@ -Class { - #name : #XMLDFALimitsTests, - #superclass : #TestCase, - #category : #'XML-Tests-Parser-Validation-DFA' -} - -{ #category : #tests } -XMLDFALimitsTests >> testDFAStateCacheLimit [ - | names contentModel firstState currentState visitedStates | - - names := - (1 to: XMLDFAStateCache new maxCachedDFAStates) collect: [:each | - 'test', each printString]. - - contentModel := String streamContents: [:stream | - stream nextPut: $(. - names withIndexDo: [:each :i | - i > 1 - ifTrue: [stream nextPut: $,]. - stream nextPutAll: each]. - stream nextPut: $)]. - - firstState := - (DTDElementContentModelParser - element: 'test' - contentModel: contentModel) parse dfa. - currentState := firstState. - visitedStates := Set new. - names withIndexDo: [:name :i | | previousState | - visitedStates add: currentState. - previousState := currentState. - currentState := currentState nextDFAStateMatching: name. - self assert: currentState notNil. - i = names size - ifTrue: [ - visitedStates do: [:each | - "the cache clearing was triggered by the last match, which - added one transition from previousState to currentState, - but other transitions should be cleared" - each = previousState - ifTrue: [self assert: each dfaStateTransitions size = 1] - ifFalse: [self assert: each dfaStateTransitions isEmpty]]. - self - assert: firstState dfaStateTransitions isEmpty; - assert: firstState dfaStateCache cachedDFAStates size = 2; - assert: currentState isAccepting] - ifFalse: [ - visitedStates do: [:each | self deny: each dfaStateTransitions isEmpty]. - self - assert: firstState dfaStateTransitions notEmpty; - assert: firstState dfaStateCache cachedDFAStates size = (i + 1); - deny: currentState isAccepting]]. - - currentState := firstState. - names withIndexDo: [:each :i | - currentState := currentState nextDFAStateMatching: each. - self deny: currentState isNil. - i = names size - ifTrue: [self assert: currentState isAccepting] - ifFalse: [self deny: currentState isAccepting]]. -] - -{ #category : #tests } -XMLDFALimitsTests >> testDFAStateTransitionLimit [ - | dfaState elementName | - - dfaState := - (DTDElementContentModelParser - element: 'test' - contentModel: '(test)') parse dfa. - 1 to: dfaState maxDFAStateTransitions do: [:i | - elementName := 'test', i printString. - dfaState nextDFAStateMatching: elementName. - self - assert: (dfaState dfaStateTransitions includesKey: elementName); - assert: dfaState dfaStateTransitions size = i]. - - elementName := 'test', (dfaState maxDFAStateTransitions + 1) printString. - dfaState nextDFAStateMatching: elementName. - self - assert: (dfaState dfaStateTransitions includesKey: elementName); - assert: dfaState dfaStateTransitions size = 1. -] diff --git a/src/XML-Tests-Parser/XMLDOMConfigurationTest.class.st b/src/XML-Tests-Parser/XMLDOMConfigurationTest.class.st deleted file mode 100644 index 2e1be3263..000000000 --- a/src/XML-Tests-Parser/XMLDOMConfigurationTest.class.st +++ /dev/null @@ -1,101 +0,0 @@ -Class { - #name : #XMLDOMConfigurationTest, - #superclass : #XMLConfigurationTest, - #category : #'XML-Tests-Parser' -} - -{ #category : #accessing } -XMLDOMConfigurationTest >> configurationClass [ - ^ XMLDOMConfiguration -] - -{ #category : #accessing } -XMLDOMConfigurationTest >> nodeFactoryClass [ - ^ XMLNodeFactory -] - -{ #category : #accessing } -XMLDOMConfigurationTest >> parserHandlerClass [ - ^ XMLDOMParser -] - -{ #category : #tests } -XMLDOMConfigurationTest >> testCopy [ - | configuration nodeFactory copy | - - super testCopy. - - nodeFactory := self nodeFactoryClass new. - (configuration := self newConfiguration) - preservesCDataNodes: true; - preservesCommentNodes: true; - preservesIgnorableWhitespace: true; - nodeFactory: nodeFactory. - copy := configuration copy. - self - assert: copy preservesCDataNodes = configuration preservesCDataNodes; - assert: copy preservesCommentNodes = configuration preservesCommentNodes; - assert: copy preservesIgnorableWhitespace = configuration preservesIgnorableWhitespace; - deny: copy nodeFactory == configuration nodeFactory; - assert: copy nodeFactory class = configuration nodeFactory class. -] - -{ #category : #tests } -XMLDOMConfigurationTest >> testNodeFactory [ - | configuration oldNodeFactory newNodeFactory | - - configuration := self newConfiguration. - oldNodeFactory := configuration nodeFactory. - self assert: oldNodeFactory class == self nodeFactoryClass. - - newNodeFactory := self nodeFactoryClass new. - self - assert: (configuration nodeFactory: newNodeFactory) == configuration; - assert: configuration nodeFactory == newNodeFactory. -] - -{ #category : #tests } -XMLDOMConfigurationTest >> testPreservesCDataNodes [ - | configuration | - - configuration := self newConfiguration. - self - deny: configuration preservesCDataNodes; - assert: (configuration preservesCDataNodes: true) == configuration; - assert: configuration preservesCDataNodes; - assert: (configuration preservesCDataNodes: false) == configuration; - deny: configuration preservesCDataNodes. -] - -{ #category : #tests } -XMLDOMConfigurationTest >> testPreservesCommentNodes [ - | configuration | - - configuration := self newConfiguration. - self - deny: configuration preservesCommentNodes; - assert: (configuration preservesCommentNodes: true) == configuration; - assert: configuration preservesCommentNodes; - assert: (configuration preservesCommentNodes: false) == configuration; - deny: configuration preservesCommentNodes. -] - -{ #category : #tests } -XMLDOMConfigurationTest >> testPreservesIgnorableWhitespace [ - | configuration | - - configuration := self newConfiguration. - configuration isValidating: false. - "should enable validation" - self - deny: configuration preservesIgnorableWhitespace; - assert: (configuration preservesIgnorableWhitespace: true) == configuration; - assert: configuration preservesIgnorableWhitespace; - assert: configuration isValidating. - - "disabling validation should disable it" - self - assert: (configuration isValidating: false) == configuration; - deny: configuration preservesIgnorableWhitespace; - deny: configuration isValidating -] diff --git a/src/XML-Tests-Parser/XMLDOMParserTest.class.st b/src/XML-Tests-Parser/XMLDOMParserTest.class.st deleted file mode 100644 index 1f37f6e08..000000000 --- a/src/XML-Tests-Parser/XMLDOMParserTest.class.st +++ /dev/null @@ -1,1191 +0,0 @@ -Class { - #name : #XMLDOMParserTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser' -} - -{ #category : #source } -XMLDOMParserTest >> addressBookNamespacePrefixedXML [ - ^ XMLParserTest addressBookNamespacePrefixedXML -] - -{ #category : #source } -XMLDOMParserTest >> addressBookNamespacedXML [ - ^ XMLParserTest addressBookNamespacedXML -] - -{ #category : #source } -XMLDOMParserTest >> addressBookXML [ - ^ XMLParserTest addressBookXML -] - -{ #category : #source } -XMLDOMParserTest >> addressBookXMLWithDTD [ - ^ XMLParserTest addressBookXMLWithDTD -] - -{ #category : #source } -XMLDOMParserTest >> internalSubsetXMLWithDeclarations [ - ^ XMLParserTest internalSubsetXMLWithDeclarations -] - -{ #category : #accessing } -XMLDOMParserTest >> nodeFactoryClass [ - ^ XMLNodeFactory -] - -{ #category : #tests } -XMLDOMParserTest >> testAllElementsNamespaceURIs [ - | document people | - - document := XMLDOMParser parse: self addressBookNamespacedXML. - - people := - document - allElementsNamed: 'person' - namespaceURI: 'defaultNS'. - self - assert: people size = 4; - assert: - (document - allElementsNamed: 'person' - namespaceURI: 'undeclaredNS') isEmpty. -] - -{ #category : #tests } -XMLDOMParserTest >> testAttributeListClass [ - (Array - with: XMLAttributeList - with: XMLCachingAttributeList) - do: [:listClass | | document parser | - parser := XMLDOMParser on: self addressBookXML. - parser configuration attributeListClass: listClass. - document := parser parseDocument. - self assert: parser configuration attributeListClass == listClass. - document allElements do: [:each | - self assert: each attributeNodes class == listClass]] -] - -{ #category : #tests } -XMLDOMParserTest >> testAttributeNamespaces [ - | document people | - - document := XMLDOMParser parse: self addressBookNamespacePrefixedXML. - people := document allElementsNamed: 'person' namespaceURI: 'personNS'. - self assert: people notEmpty. - - people do: [:each | - self - assert: each hasAttributes; - deny: each attributeNames isEmpty; - assert: - (each attributeNames allSatisfy: [:name | - (each attributeNodeAt: name namespaceURI: 'defaultNS') isNil]); - assert: (each attributeNodeAt: 'ps:family-name' namespaceURI: 'personNS') notNil; - assert: (each attributeNodeAt: 'ps:first-name' namespaceURI: 'personNS') notNil]. -] - -{ #category : #tests } -XMLDOMParserTest >> testAttributeNamespacesDisabled [ - | document people | - - document := - XMLDOMParser - parse: self addressBookNamespacePrefixedXML - usingNamespaces: false. - people := document allElementsNamed: 'person'. - self assert: people notEmpty. - people do: [:each | - self - assert: each hasAttributes; - deny: each attributeNames isEmpty; - assert: (each attributeNodeAt: 'ps:family-name' namespaceURI: 'personNS') isNil; - assert: (each attributeNodeAt: 'ps:first-name' namespaceURI: 'personNS') isNil]. -] - -{ #category : #tests } -XMLDOMParserTest >> testAttributeParent [ - (XMLDOMParser parse: self addressBookXML) allElementsDo: [:element | - element hasAttributes - ifTrue: [ - element attributeNodesDo: [:each | - self - assert: each hasParent; - assert: each parent == element; - assert: each element == element]]] -] - -{ #category : #tests } -XMLDOMParserTest >> testAttributes [ - | document firstPerson | - - document := XMLDOMParser parse: self addressBookXML. - firstPerson := document findElementNamed: 'person'. - self - assert: (firstPerson attributeAt: 'employee-number') = 'A0000'; - assert: (firstPerson attributeAt: 'family-name') = 'Gates'; - assert: (firstPerson attributeAt: 'first-name') = 'Bob'; - assert: - firstPerson attributeNames asArray = - #('employee-number' 'family-name' 'first-name'); - assert: firstPerson attributeAssociations asArray = - {('employee-number'->'A0000'). ('family-name'->'Gates'). ('first-name'->'Bob').}. -] - -{ #category : #tests } -XMLDOMParserTest >> testAttributesExcludingDeclarations [ - | document | - - document := XMLDOMParser parse: self addressBookNamespacedXML. - self deny: document root hasAttributes. -] - -{ #category : #tests } -XMLDOMParserTest >> testAttributesIncludingDeclarations [ - | document root | - - document := - XMLDOMParser - parse: self addressBookNamespacedXML - usingNamespaces: false. - root := document root. - self - assert: root hasAttributes; - assert: (root attributeAt: 'xmlns') = 'defaultNS'; - assert: (root attributeAt: 'xmlns:book') = 'bookNS'; - assert: (root attributeAt: 'xmlns:ps') = 'personNS'. -] - -{ #category : #tests } -XMLDOMParserTest >> testCDataSection [ - #('' ']' ']]' ']]]' ']>' ']>]' ']>]>]') - with: #('' ']' ']]' ']]]' ']>' ']>]' ']>]>]') - do: [:suffix :escapedSuffix | | document element unescaped escaped xml | - unescaped := - 'this is CDATA test content 1 < 2 & 5 > 3', suffix. - escaped := - 'this is CDATA test content 1 < 2 & 5 > 3', escapedSuffix. - xml := - '<?xml version="1.0" encoding="UTF-8"?> - <test-data>test<![CDATA[', unescaped, ']]>test</test-data>'. - document := XMLDOMParser parse: xml. - element := document findElementNamed: 'test-data'. - self - assert: element nodes size = 1; - assert: element firstNode isStringNode; - assert: element firstNode printString = ('test', escaped, 'test'). - - document := - (XMLDOMParser on: xml) - preservesCDataNodes: true; - parseDocument. - element := document findElementNamed: 'test-data'. - self - assert: element nodes size = 3; - assert: element nodes second isCData; - assert: element nodes second printString = - ('<![CDATA[', unescaped, ']]>'); - assert: element strings asArray = - (Array with: 'test' with: unescaped with: 'test')]. -] - -{ #category : #tests } -XMLDOMParserTest >> testCDataSectionEntityReplacement [ - | document element unescaped escaped xml | - - unescaped := 'this is CDATA test content 1 < 2 & 5 > 3'. - escaped := 'this is CDATA test content 1 < 2 & 5 > 3'. - xml := - '<?xml version="1.0" encoding="UTF-8"?> - <!DOCTYPE test-data [ - <!ENTITY cdata "<![CDATA[this is CDATA test content 1 < 2 & 5 > 3]]>"> - ]> - <test-data>test&cdata;test</test-data>'. - document := XMLDOMParser parse: xml. - element := document findElementNamed: 'test-data'. - self - assert: element nodes size = 1; - assert: element firstNode isStringNode; - assert: element firstNode printString = ('test', escaped, 'test'). - - document := - (XMLDOMParser on: xml) - preservesCDataNodes: true; - parseDocument. - element := document findElementNamed: 'test-data'. - self - assert: element nodes size = 3; - assert: element nodes second isCData; - assert: element nodes second printString = ('<![CDATA[', unescaped, ']]>'); - assert: element strings asArray = (Array with: 'test' with: unescaped with: 'test'). -] - -{ #category : #tests } -XMLDOMParserTest >> testChangingNamespaces [ - | document people person | - - document := XMLDOMParser parse: self addressBookNamespacedXML. - - people := document allElementsNamed: 'person' namespaceURI: 'defaultNS'. - (person := people third) prefix: 'ps'. - self assert: person == (document findElementNamed: 'person' namespaceURI: 'personNS'). - self assert: - (people copyWithout: person) = - ((document findElementNamed: 'addressbook') nodesSelect: [:each | - each isElement and: [each namespaceURI = 'defaultNS']]). -] - -{ #category : #tests } -XMLDOMParserTest >> testComment [ - | xml document comments | - - xml := '<!--one--><test><!--two--></test><!--three-->'. - document := XMLDOMParser parse: xml. - comments := document allNodesSelect: [:each | each isComment]. - self assert: comments isEmpty. - - document := - (XMLDOMParser on: xml) - preservesCommentNodes: true; - parseDocument. - comments := document allNodesSelect: [:each | each isComment]. - self - assert: (comments allSatisfy: [:each | each isComment]); - assert: (comments collect: [:each | each string]) asArray = #('one' 'two' 'three'). -] - -{ #category : #tests } -XMLDOMParserTest >> testDeclaringXMLNamespace [ - | xmlNamespace elements | - - xmlNamespace :=XMLNamespaceScope xmlNamespaceURI. - self deny: - ((XMLDOMParser parse: self addressBookNamespacedXML) root - declaresPrefix: 'xml' - uri: xmlNamespace). - - elements := - (XMLDOMParser parse: - '<one><two xmlns:xml="', xmlNamespace, '"/><xml:three/></one>') allElements. - self - deny: (elements first declaresPrefix: 'xml' uri: xmlNamespace); - assert: (elements second declaresPrefix: 'xml' uri: xmlNamespace); - deny: (elements third declaresPrefix: 'xml' uri: xmlNamespace). -] - -{ #category : #tests } -XMLDOMParserTest >> testDoctypeDeclaration [ - | doctype | - - doctype := - (XMLDOMParser - parse: self internalSubsetXMLWithDeclarations - usingNamespaces: true - validation: true - externalEntities: false) doctypeDeclaration. - self - assert: doctype root = 'root'; - assert: doctype publicID = 'pubid'; - assert: doctype systemID = 'external.dtd'; - assert: doctype nodes notEmpty; - assert: (doctype nodes allSatisfy: [:each | each isDeclaration]). -] - -{ #category : #tests } -XMLDOMParserTest >> testDocument [ - | parser document root | - - parser := XMLDOMParser on: self addressBookXML. - self assert: parser document isNil. - - document := parser parseDocument. - self assert: parser document == document. - - parser on: self addressBookXML. - self assert: parser document isNil. - - document allNodesDo: [:each | - self assert: each document == document]. - - root := document root. - root innerXML: self addressBookXML. - document allNodesDo: [:each | - self assert: each document == document]. - - document removeNode: root. - root allNodesDo: [:each | - self assert: each document isNil]. -] - -{ #category : #tests } -XMLDOMParserTest >> testDocumentInternalSubset [ - | document doctypeDeclaration | - - document := XMLDOMParser parse: self internalSubsetXMLWithDeclarations. - doctypeDeclaration := document doctypeDeclaration. - doctypeDeclaration allNodesDo: [:each | - self assert: each document == document]. - - document doctypeDeclaration: nil. - doctypeDeclaration allNodesDo: [:each | - self assert: each document isNil]. -] - -{ #category : #tests } -XMLDOMParserTest >> testElementMixedContent [ - | xml mixedContent | - - xml := '<mixed-content> one <two/> <three/> four <five> </five> seven </mixed-content>'. - mixedContent := (XMLDOMParser parse: xml) root. - self - assert: mixedContent nodes size = 7; - assert: (mixedContent nodes first isStringNode: ' one '); - assert: (mixedContent nodes second isElementNamed: 'two'); - deny: mixedContent nodes second hasChildren; - assert: (mixedContent nodes third isStringNode: ' '); - assert: (mixedContent nodes fourth isElementNamed: 'three'); - deny: mixedContent nodes fourth hasChildren; - assert: (mixedContent nodes fifth isStringNode: ' four '); - assert: (mixedContent nodes sixth isElementNamed: 'five'); - assert: mixedContent nodes sixth hasChildren; - assert: mixedContent nodes sixth nodes size = 1; - assert: (mixedContent nodes sixth nodes first isStringNode: ' '); - assert: (mixedContent nodes seventh isStringNode: ' seven '). -] - -{ #category : #tests } -XMLDOMParserTest >> testElementNames [ - | document root persons | - - document := XMLDOMParser parse: self addressBookXML. - root := document root. - - persons := root allNodesSelect: [:each | - each isElement - and: [(each isNamedAny: #('notperson' 'person')) - and: [(each isNamed: 'person') - and: [(each name = 'person') and: [each localName = 'person']]]]]. - self assert: persons size = 4. - - root allElementsNamed: 'person' do: [:p | - self assert: (persons includes: p). - persons remove: p]. - self assert: persons isEmpty. -] - -{ #category : #tests } -XMLDOMParserTest >> testElementPrefixes [ - | document persons | - - document := XMLDOMParser parse: self addressBookNamespacePrefixedXML. - persons := document allElementsSelect: [:each | - (each isNamedAny: #('notperson' 'ps:person')) - and: [(each isNamedAny: #('notperson' 'person')) - and: [(each isNamed: 'person') - and: [(each isNamed: 'ps:person') - and: [(each name = 'ps:person') and: [each localName = 'person']]]]]]. - self assert: persons size = 4. -] - -{ #category : #tests } -XMLDOMParserTest >> testElementPrefixesNamespacesDisabled [ - | document persons | - - document := - XMLDOMParser - parse: self addressBookNamespacePrefixedXML - usingNamespaces: false. - persons := document allElementsSelect: [:each | - (each isNamedAny: #('notperson' 'ps:person')) - and: [(each isNamedAny: #('notperson' 'person')) - and: [(each isNamed: 'person') - and: [(each isNamed: 'ps:person') - and: [(each name = 'ps:person') and: [each localName = 'person']]]]]]. - self assert: persons size = 4. -] - -{ #category : #tests } -XMLDOMParserTest >> testFindElementNamespaceURI [ - | document people | - - document := XMLDOMParser parse: self addressBookNamespacedXML. - - people := document allElementsNamed: 'person' namespaceURI: 'defaultNS'. - self assert: - (document - findElementNamed: 'person' - namespaceURI: 'defaultNS' - with: [:each | (each attributeAt: 'employee-number') = 'A7987']) == people last. - self assert: - (document - findElementNamed: 'person' - namespaceURI: 'defaultNS' - with: [:each | (each attributeAt: 'family-name') = 'Brown']) == people second. -] - -{ #category : #tests } -XMLDOMParserTest >> testInnerXML [ - | document | - - document := XMLDOMParser parse: self addressBookXML. - document allElementsNamed: 'person' do: [:person | | contactInfo address1 address2 | - #('address' 'job-info' 'manager') do: [:each | - self assert: (person elementAt: each) innerXML = '']. - - contactInfo := person elementAt: 'contact-info'. - address1 := (person attributeAt: 'first-name'), '@example.com'. - address2 := (person attributeAt: 'first-name'), '@users.example.com'. - self - assert: (contactInfo innerXML: '<email></email><email2/>') innerXML = '<email/><email2/>'; - assert: contactInfo elements size = 2; - assert: (contactInfo elements first isNamed: 'email'); - assert: (contactInfo elements second isNamed: 'email2'); - assert: (contactInfo firstElement innerXML: address1, '<!--ignored-->') innerXML = address1; - assert: (contactInfo elements second innerXML: '<![CDATA[', address2, ']]>') innerXML = address2. - self assert: - contactInfo innerXML = - ('<email>', address1, '</email><email2>', address2, '</email2>')]. -] - -{ #category : #tests } -XMLDOMParserTest >> testInnerXMLDocument [ - | document | - - document := XMLDOMParser parse: self addressBookXMLWithDTD. - self - assert: ((document innerXML: '<new-root/>') root isNamed: 'new-root'); - assert: document innerXML = '<new-root/>'; - assert: ((document root innerXML: 'test') contentString = 'test'); - assert: document root innerXML = 'test'. - - document := XMLDOMParser parse: self addressBookXMLWithDTD. - self assert: - (document innerXML: document innerXML) printString = - (XMLDOMParser parse: self addressBookXMLWithDTD) printString. - self - should: [document innerXML: self addressBookXMLWithDTD] - raise: XMLWellFormednessException. - - document := XMLDOMParser parse: '<root/>'. - self - should: [document innerXML: '<root1/><root2/>'] - raise: XMLWellFormednessException. -] - -{ #category : #tests } -XMLDOMParserTest >> testInnerXMLEntities [ - | document | - - document := - (XMLDOMParser on: - '<!DOCTYPE test [ - <!ENTITY one "one"> - <!ENTITY two "two"> - <!ENTITY three "<!--comment-->"> - ]> - <test name="&one;">&one;</test>') - preservesCommentNodes: true; - parseDocument. - self - assert: (document root attributeAt: 'name') = 'one'; - assert: document root contentString = 'one'. - - document innerXML: '<test name="&two;">&three;</test>'. - self - assert: (document root attributeAt: 'name') = 'two'; - assert: document root hasChildren; - assert: document root nodes size = 1; - assert: document root firstNode isComment; - assert: document root firstNode string = 'comment'. - - document root innerXML: '&two;'. - self - assert: (document root attributeAt: 'name') = 'two'; - assert: document root contentString = 'two'. - - self - should: [document innerXML: '<test name="&undeclared;"></test>'] - raise: XMLWellFormednessException. - self - should: [document innerXML: '<test name="">&undeclared;</test>'] - raise: XMLWellFormednessException. - self - should: [document innerXML: '&three;<test/>'] - raise: XMLWellFormednessException. - self - should: [document innerXML: '<test/>&three;'] - raise: XMLWellFormednessException. -] - -{ #category : #tests } -XMLDOMParserTest >> testInternalAttributeDeclarations [ - | doctype firstAttribute secondAttribute | - - doctype := - (XMLDOMParser - parse: self internalSubsetXMLWithDeclarations - usingNamespaces: true - validation: true - externalEntities: false) doctypeDeclaration. - - firstAttribute := doctype nodes second. - self - assert: firstAttribute element = 'root'; - assert: firstAttribute attribute = 'name'; - assert: firstAttribute type = 'CDATA'; - assert: firstAttribute defaultPragma = 'IMPLIED'; - assert: firstAttribute defaultValue = ''. - - secondAttribute := doctype nodes third. - self - assert: secondAttribute element = 'root'; - assert: secondAttribute attribute = 'number'; - assert: secondAttribute type = '(one|two|three)'; - assert: secondAttribute defaultPragma = ''; - assert: secondAttribute defaultValue = 'three'. -] - -{ #category : #tests } -XMLDOMParserTest >> testInternalElementDeclaration [ - | doctype elementDeclaration | - - doctype := - (XMLDOMParser - parse: self internalSubsetXMLWithDeclarations - usingNamespaces: true - validation: true - externalEntities: false) doctypeDeclaration. - elementDeclaration := doctype nodes first. - self - assert: elementDeclaration element = 'root'; - assert: elementDeclaration contentModel = '(#PCDATA|one|two)*'. -] - -{ #category : #tests } -XMLDOMParserTest >> testInternalGeneralEntityDeclarations [ - | doctype firstEntity secondEntity | - - doctype := - (XMLDOMParser - parse: self internalSubsetXMLWithDeclarations - usingNamespaces: true - validation: true - externalEntities: false) doctypeDeclaration. - - firstEntity := doctype nodes fourth. - self - deny: firstEntity isParameter; - assert: firstEntity name = 'general'; - assert: firstEntity replacement = 'replacement'; - assert: firstEntity publicID = ''; - assert: firstEntity systemID = ''; - assert: firstEntity ndata = ''. - - secondEntity := doctype nodes fifth. - self - deny: secondEntity isParameter; - assert: secondEntity name = 'externalGeneral'; - assert: secondEntity replacement = ''; - assert: secondEntity publicID = 'pubid2'; - assert: secondEntity systemID = 'external1.dtd'; - assert: secondEntity ndata = ''. -] - -{ #category : #tests } -XMLDOMParserTest >> testInternalNotationDeclarations [ - | doctype notation | - - doctype := - (XMLDOMParser - parse: self internalSubsetXMLWithDeclarations - usingNamespaces: true - validation: true - externalEntities: false) doctypeDeclaration. - - notation := doctype nodes eighth. - self - assert: notation name = 'notation'; - assert: notation publicID = ''; - assert: notation systemID = 'note.doc'. -] - -{ #category : #tests } -XMLDOMParserTest >> testInternalParameterEntityDeclarations [ - | doctype firstEntity secondEntity | - - doctype := - (XMLDOMParser - parse: self internalSubsetXMLWithDeclarations - usingNamespaces: true - validation: true - externalEntities: false) doctypeDeclaration. - - firstEntity := doctype nodes sixth. - self - assert: firstEntity isParameter; - assert: firstEntity name = 'parameter'; - assert: firstEntity replacement = 'replacement'; - assert: firstEntity publicID = ''; - assert: firstEntity systemID = ''. - - secondEntity := doctype nodes seventh. - self - assert: secondEntity isParameter; - assert: secondEntity name = 'externalParameter'; - assert: secondEntity replacement = ''; - assert: secondEntity publicID = ''; - assert: secondEntity systemID = 'external2.dtd'. -] - -{ #category : #tests } -XMLDOMParserTest >> testNamespaces [ - | document | - - document := XMLDOMParser parse: self addressBookNamespacePrefixedXML. - document allElementsDo: [:each | - (each == document root or: [each isNamed: 'person']) - ifTrue: [ - self assert: each hasPrefix. - each == document root - ifTrue: [ - self - assert: each prefix = 'book'; - assert: each namespaceURI = 'bookNS'] - ifFalse: [ - self - assert: each prefix = 'ps'; - assert: each namespaceURI = 'personNS']] - ifFalse: [ - self - assert: each namespaceURI = 'defaultNS'; - deny: each hasPrefix; - assert: each prefix = '']]. -] - -{ #category : #tests } -XMLDOMParserTest >> testNamespacesCopyOnWrite [ - | xml elements | - - xml := - '<one xmlns:prefix1="ns" xmlns="defualt"> - <two xmlns:prefix2="ns2"><three /></two> - <four><five xmlns:prefix1="ns3" xmlns="defualt2" /></four> - </one>'. - elements := (XMLDOMParser parse: xml) allElements. - self assert: - (IdentitySet withAll: "avoid newFrom: for GS portability" - (elements collect: [:each | - each namespaceScope prefixMappings])) size = 3. - - elements := (XMLDOMParser parse: xml usingNamespaces: false) allElements. - self assert: - (IdentitySet withAll: "avoid newFrom: for GS portability" - (elements collect: [:each | - each namespaceScope prefixMappings])) size = elements size. -] - -{ #category : #tests } -XMLDOMParserTest >> testNamespacesDeclaring [ - | document | - - document := XMLDOMParser parse: self addressBookNamespacedXML. - document allElementsDo: [:each | - self assert: each hasNamespaces. - each == document root - ifTrue: [ - self - assert: each declaresDefaultNamespace; - assert: (each declaresPrefix: 'ps' uri: 'personNS')] - ifFalse: [ - self - deny: each declaresDefaultNamespace; - deny: (each declaresPrefix: 'ps' uri: 'personNS')]. - self - deny: (each declaresPrefix: 'undeclared' uri: 'undeclaredNS'); - deny: (each isDeclaredPrefix: 'undeclared'); - deny: (each isDeclaredPrefix: 'undeclared' uri: 'undeclaredNS'); - assert: (each isDeclaredPrefix: 'ps'); - assert: (each isDeclaredPrefix: 'ps' uri: 'personNS')]. -] - -{ #category : #tests } -XMLDOMParserTest >> testNamespacesDeclaringDisabled [ - | document | - - document := XMLDOMParser parse: self addressBookNamespacedXML usingNamespaces: false. - document allElementsDo: [:each | - self - deny: each hasNamespaces; - deny: each declaresDefaultNamespace; - deny: (each declaresPrefix: 'ps' uri: 'personNS'); - deny: (each isDeclaredPrefix: 'ps'); - deny: (each isDeclaredPrefix: 'ps' uri: 'personNS')]. -] - -{ #category : #tests } -XMLDOMParserTest >> testNamespacesDisabled [ - | document | - - document := - XMLDOMParser - parse: self addressBookNamespacePrefixedXML - usingNamespaces: false. - document allElementsDo: [:each | - self assert: each namespaceURI = ''. - (each == document root or: [each isNamed: 'person']) - ifTrue: [ - self - assert: each hasPrefix; - assert: - each prefix = - ((each == document root) ifTrue: ['book'] ifFalse: ['ps'])] - ifFalse: [ - self - deny: each hasPrefix; - assert: each prefix = '']]. -] - -{ #category : #tests } -XMLDOMParserTest >> testNamespacesDisabledAttributes [ - | document | - - document := - XMLDOMParser - parse: '<root xmlns:prefix="prefixNS" xmlns="defaultNS" name="value"/>' - usingNamespaces: false. - self - assert: document root attributeNames asArray = #('xmlns:prefix' 'xmlns' 'name'); - assert: (document root attributeAt: 'xmlns:prefix') = 'prefixNS'; - assert: (document root attributeAt: 'xmlns') = 'defaultNS'; - assert: (document root attributeAt: 'name') = 'value'. -] - -{ #category : #tests } -XMLDOMParserTest >> testNamespacesDisabledReuse [ - | parser document oldRootScope newRootScope | - - parser := XMLDOMParser on: self addressBookNamespacedXML. - document := - parser - usesNamespaces: true; - parseDocument. - oldRootScope := document root namespaceScope. - self assert: oldRootScope hasNamespaces. - - document := - parser - on: self addressBookNamespacedXML; - usesNamespaces: false; - parseDocument. - newRootScope := document root namespaceScope. - self - deny: newRootScope = oldRootScope; - deny: newRootScope hasNamespaces. - - self - should: [ - parser - on: '<test xmlns:unused="unusedNS"><used:test/></test>'; - usesNamespaces: true; - parseDocument] - raise: XMLNamespaceException. - self - shouldnt: [ - document := - parser - on: '<test xmlns:unused="unusedNS"><used:test/></test>'; - usesNamespaces: false; - parseDocument] - raise: XMLNamespaceException. - self deny: document root hasNamespaces. -] - -{ #category : #tests } -XMLDOMParserTest >> testNamespacesResolving [ - | document | - - document := XMLDOMParser parse: self addressBookNamespacedXML. - document allElementsDo: [:each | - self - assert: each defaultNamespace = 'defaultNS'; - assert: (each resolvePrefix: '') = 'defaultNS'; - assert: (each resolvePrefix: 'book') = 'bookNS'; - assert: (each resolvePrefix: 'ps') = 'personNS'; - assert: - each namespaceURI = - (each hasPrefix - ifTrue: [each resolvePrefix: each prefix] - ifFalse: [each defaultNamespace])] -] - -{ #category : #tests } -XMLDOMParserTest >> testNamespacesResolvingDisabled [ - | document | - - document := - XMLDOMParser - parse: self addressBookNamespacedXML - usingNamespaces: false. - document allElementsDo: [:each | - self - assert: each defaultNamespace = ''; - assert: (each resolvePrefix: '') = ''; - assert: (each resolvePrefix: 'book') = ''; - assert: (each resolvePrefix: 'ps') = ''; - assert: - each namespaceURI = - (each hasPrefix - ifTrue: [each resolvePrefix: each prefix] - ifFalse: [each defaultNamespace])] -] - -{ #category : #tests } -XMLDOMParserTest >> testNodeDetecting [ - | document people | - - document := XMLDOMParser parse: self addressBookXML. - people := document root elementsAt: 'person'. - self assert: - ((document findElementNamed: 'addressbook') nodesDetect: [:each | - each isElement and: [(each attributeAt: 'family-name') = 'Brown']]) == people second. - self assert: - ((document findElementNamed: 'addressbook') - nodesDetect: [:each | each isElement and: [(each attributeAt: 'unknown') = 'Brown']] - ifNone: ['not found']) = 'not found'. -] - -{ #category : #tests } -XMLDOMParserTest >> testNodeFactory [ - | parser oldNodeFactory newNodeFactory | - - parser := XMLDOMParser on: self addressBookXML. - oldNodeFactory := parser nodeFactory. - self assert: oldNodeFactory class == self nodeFactoryClass. - - newNodeFactory := self nodeFactoryClass new. - self - assert: (parser nodeFactory: newNodeFactory) == parser; - assert: parser nodeFactory == newNodeFactory. -] - -{ #category : #tests } -XMLDOMParserTest >> testNodeListClass [ - (Array - with: XMLNodeList - with: XMLCachingNodeList) - do: [:listClass | | document parser | - parser := XMLDOMParser on: self addressBookXML. - parser configuration nodeListClass: listClass. - document := parser parseDocument. - self - assert: parser configuration nodeListClass == listClass; - assert: document nodes class == listClass. - document allElements do: [:each | - self assert: each nodes class == listClass]] -] - -{ #category : #tests } -XMLDOMParserTest >> testNodeParent [ - (XMLDOMParser parse: self addressBookXML) allNodesDo: [:node | - node hasChildren - ifTrue: [ - node nodesDo: [:each | - self - assert: each hasParent; - assert: each parent == node]]] -] - -{ #category : #tests } -XMLDOMParserTest >> testNodeStack [ - | parser | - - parser := XMLDOMParser on: self addressBookXML. - self assert: parser nodeStack isEmpty. - - parser := XMLDOMParser on: self addressBookXML. - parser parser parseToken. - self deny: parser nodeStack isEmpty. - - parser on: self addressBookXML. - self assert: parser nodeStack isEmpty. -] - -{ #category : #tests } -XMLDOMParserTest >> testOptimizeForLargeDocuments [ - | parser | - - parser := XMLDOMParser on: ''. - - parser optimizeForLargeDocuments. - self - deny: parser isValidating; - deny: parser usesNamespaces; - assert: parser documentReadLimit isNil; - assert: parser nodeFactory attributeListClass == XMLAttributeList. -] - -{ #category : #tests } -XMLDOMParserTest >> testOverridingDefaultNamespace [ - | document | - - document := - XMLDOMParser parse: - '<outer xmlns="default"><inner xmlns=""/></outer>'. - self - assert: document root namespaceURI = 'default'; - assert: document root defaultNamespace = 'default'; - assert: document root firstNode namespaceURI = ''; - assert: document root firstNode defaultNamespace = ''. -] - -{ #category : #tests } -XMLDOMParserTest >> testParseDocumentUntil [ - | i document | - - self - shouldnt: [ - i := 0. - document := - (XMLDOMParser on: '<root><one>two<#malformed') - parseDocumentUntil: [(i := i + 1) > 4]] - raise: XMLWellFormednessException. - self - assert: document allNodes size = 4; - assert: (document findElementNamed: 'one') nodes size = 1; - assert: (document findElementNamed: 'one') contentString = 'two'. - self - should: [ - i := 0. - (XMLDOMParser on: '<root><one>two<#malformed') - parseDocumentUntil: [(i := i + 1) > 5]] - raise: XMLWellFormednessException. -] - -{ #category : #tests } -XMLDOMParserTest >> testParseDocumentWhile [ - | i document | - - self - shouldnt: [ - i := 0. - document := - (XMLDOMParser on: '<root><one>two<#malformed') - parseDocumentWhile: [(i := i + 1) <= 4]] - raise: XMLWellFormednessException. - self - assert: document allNodes size = 4; - assert: (document findElementNamed: 'one') nodes size = 1; - assert: (document findElementNamed: 'one') contentString = 'two'. - self - should: [ - i := 0. - (XMLDOMParser on: '<root><one>two<#malformed') - parseDocumentWhile: [(i := i + 1) <= 5]] - raise: XMLWellFormednessException. -] - -{ #category : #tests } -XMLDOMParserTest >> testParsedElementNames [ - | document | - - document := XMLDOMParser parse: self addressBookNamespacePrefixedXML. - self assert: - document elementNames = - (document elements collect: [:each | each name ]). - - document allElementsDo: [:element | - self assert: - element elementNames = - (element elements collect: [:each | each name])]. -] - -{ #category : #tests } -XMLDOMParserTest >> testPreservesCDataNodes [ - | parser | - - parser := XMLDOMParser on: self addressBookXML. - self - deny: parser preservesCDataNodes; - assert: (parser preservesCDataNodes: true) == parser; - assert: parser preservesCDataNodes; - assert: (parser preservesCDataNodes: false) == parser; - deny: parser preservesCDataNodes. -] - -{ #category : #tests } -XMLDOMParserTest >> testPreservesCommentNodes [ - | parser | - - parser := XMLDOMParser on: self addressBookXML. - self - deny: parser preservesCommentNodes; - assert: (parser preservesCommentNodes: true) == parser; - assert: parser preservesCommentNodes; - assert: (parser preservesCommentNodes: false) == parser; - deny: parser preservesCommentNodes. -] - -{ #category : #tests } -XMLDOMParserTest >> testPreservesIgnorableWhitespace [ - | parser | - - parser := XMLDOMParser on: self addressBookXML. - parser isValidating: false. - "should enable validation" - self - deny: parser preservesIgnorableWhitespace; - assert: (parser preservesIgnorableWhitespace: true) == parser; - assert: parser preservesIgnorableWhitespace; - assert: parser isValidating. - - "disabling validation should disable it" - self - assert: (parser isValidating: false) == parser; - deny: parser preservesIgnorableWhitespace; - deny: parser isValidating -] - -{ #category : #tests } -XMLDOMParserTest >> testProcessingInstruction [ - | document | - - document := - XMLDOMParser parse: - '<?xml version="1.1" standalone="yes"?><?firstTarget first>Data?>', - '<root><?secondTarget second?Data?></root> '. - - self - assert: document version = 1.1; - assert: document nodes size = 2; - assert: document firstNode isPI; - assert: document firstNode target = 'firstTarget'; - assert: document firstNode data = 'first>Data'; - assert: document root firstNode target = 'secondTarget'; - assert: document root firstNode data = 'second?Data'. -] - -{ #category : #tests } -XMLDOMParserTest >> testProcessingInstructionEntityReplacement [ - | document doctypeDeclaration root | - - document := - XMLDOMParser parse: - '<?xml version="1.1" standalone="yes"?> - <!DOCTYPE root [ - <!ENTITY % first "<?firstTarget first>Data?>"> - %first; - <!ENTITY second "<?secondTarget second?Data?>"> - ]><root>&second;</root> '. - - self - assert: document version = 1.1; - assert: document hasDoctypeDeclaration; - assert: document nodes size = 1. - - doctypeDeclaration := document doctypeDeclaration. - self - assert: doctypeDeclaration nodes size = 3; - assert: doctypeDeclaration nodes second isPI; - assert: doctypeDeclaration nodes second target = 'firstTarget'; - assert: doctypeDeclaration nodes second data = 'first>Data'. - - root := document root. - self - assert: root nodes size = 1; - assert: root firstNode isPI; - assert: root firstNode target = 'secondTarget'; - assert: root firstNode data = 'second?Data'. -] - -{ #category : #tests } -XMLDOMParserTest >> testRootElement [ - | document root | - - document := XMLDOMParser parse: self addressBookXML. - self assert: document class == XMLDocument. - root := document root. - self assert: (root class == XMLElement). - - self assert: - (root allNodesDetect: [:each | - each isElement - and: [each isNamedAny: #('AddressBook' 'addressbook')]]) == root. - self assert: (root findElementNamed: 'addressbook') == root. -] - -{ #category : #tests } -XMLDOMParserTest >> testUnreplacedEntityRererencePrinting [ - | xml | - - xml := - '<!DOCTYPE one [<!ENTITY three "three">]>', - '<one two=""&three;"">', - '<four five="&six;"/>', - '</one>'. - self assert: - ((XMLDOMParser on: xml) - isValidating: false; - replacesContentEntityReferences: false; - parseDocument) printString = xml. -] - -{ #category : #tests } -XMLDOMParserTest >> testWhitespacePreservation [ - | xml root notPreserved preserved | - - xml := ' - <!DOCTYPE root [ - <!ELEMENT root (not-preserved)> - <!ELEMENT not-preserved (preserved+)> - <!ELEMENT preserved (not-preserved?)> - <!ATTLIST root xml:space (default|preserve) #IMPLIED> - <!ATTLIST not-preserved xml:space (default|preserve) #IMPLIED> - <!ATTLIST preserved xml:space (default|preserve) "preserve"> - ]> - <root xml:space="preserve"> - <not-preserved xml:space="default"> - <preserved> - </preserved> - </not-preserved> - </root>'. - root := (XMLDOMParser parse: xml) root. - self - assert: root nodes size = 3; - assert: root nodes first isStringNode; - assert: root nodes first isWhitespace; - assert: (root nodes second isElementNamed: 'not-preserved'); - assert: root nodes third isStringNode; - assert: root nodes third isWhitespace. - - notPreserved := root nodes second. - self - assert: notPreserved nodes size = 1; - assert: (notPreserved nodes first isElementNamed: 'preserved'). - - preserved := notPreserved firstNode. - self - assert: preserved nodes size = 1; - assert: preserved nodes first isStringNode; - assert: preserved nodes first isWhitespace. -] - -{ #category : #tests } -XMLDOMParserTest >> testXMLDeclaration [ - | document | - - document := - XMLDOMParser parse: - '<?xml version="1.0" encoding="UTF-8"?><test/>'. - self - assert: document version = 1.0; - assert: document encoding = 'UTF-8'; - deny: document isStandalone. - - document := - XMLDOMParser parse: - '<?xml version="1.1" encoding="utf-8" standalone="yes"?><test/>'. - self - assert: document version = 1.1; - assert: document encoding = 'utf-8'; - assert: document isStandalone. -] diff --git a/src/XML-Tests-Parser/XMLDeclarationNodeTest.class.st b/src/XML-Tests-Parser/XMLDeclarationNodeTest.class.st deleted file mode 100644 index eb627547a..000000000 --- a/src/XML-Tests-Parser/XMLDeclarationNodeTest.class.st +++ /dev/null @@ -1,23 +0,0 @@ -" -Abstract, do not run. -" -Class { - #name : #XMLDeclarationNodeTest, - #superclass : #XMLNodeTest, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #testing } -XMLDeclarationNodeTest class >> isAbstract [ - ^ true -] - -{ #category : #accessing } -XMLDeclarationNodeTest >> nodeClass [ - ^ XMLDeclarationNode -] - -{ #category : #tests } -XMLDeclarationNodeTest >> testIsDeclaration [ - self assert: self newNode isDeclaration -] diff --git a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterASCIIStringTest.class.st b/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterASCIIStringTest.class.st deleted file mode 100644 index 560cfe78f..000000000 --- a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterASCIIStringTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLDecodingReadStreamAdapterASCIIStringTest, - #superclass : #XMLDecodingReadStreamAdapterASCIITest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLDecodingReadStreamAdapterASCIIStringTest >> expectsBinaryInput [ - ^ false -] diff --git a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterASCIITest.class.st b/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterASCIITest.class.st deleted file mode 100644 index 337ee05bb..000000000 --- a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterASCIITest.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #XMLDecodingReadStreamAdapterASCIITest, - #superclass : #XMLDecodingReadStreamAdapterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #accessing } -XMLDecodingReadStreamAdapterASCIITest >> basicInputCollection [ - ^ self encodedASCIIBinary -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapterASCIITest >> basicInvalidInputCollections [ - ^ (16r80 to: 16rFF) asArray collect: [:each | ByteArray with: each] -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapterASCIITest >> basicOutputCollection [ - ^ self decodedASCIIString -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapterASCIITest >> streamConverterClass [ - ^ XMLASCIIStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterLatin1StringTest.class.st b/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterLatin1StringTest.class.st deleted file mode 100644 index d4abb8aa9..000000000 --- a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterLatin1StringTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLDecodingReadStreamAdapterLatin1StringTest, - #superclass : #XMLDecodingReadStreamAdapterLatin1Test, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLDecodingReadStreamAdapterLatin1StringTest >> expectsBinaryInput [ - ^ false -] diff --git a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterLatin1Test.class.st b/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterLatin1Test.class.st deleted file mode 100644 index 7b5ce8d65..000000000 --- a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterLatin1Test.class.st +++ /dev/null @@ -1,20 +0,0 @@ -Class { - #name : #XMLDecodingReadStreamAdapterLatin1Test, - #superclass : #XMLDecodingReadStreamAdapterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #accessing } -XMLDecodingReadStreamAdapterLatin1Test >> basicInputCollection [ - ^ self encodedLatin1Binary -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapterLatin1Test >> basicOutputCollection [ - ^ self decodedLatin1String -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapterLatin1Test >> streamConverterClass [ - ^ XMLLatin1StreamConverter -] diff --git a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterStringTest.class.st b/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterStringTest.class.st deleted file mode 100644 index 87c05122a..000000000 --- a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterStringTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLDecodingReadStreamAdapterStringTest, - #superclass : #XMLDecodingReadStreamAdapterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLDecodingReadStreamAdapterStringTest >> expectsBinaryInput [ - ^ false -] diff --git a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterTest.class.st b/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterTest.class.st deleted file mode 100644 index 9fae060f0..000000000 --- a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterTest.class.st +++ /dev/null @@ -1,172 +0,0 @@ -Class { - #name : #XMLDecodingReadStreamAdapterTest, - #superclass : #XMLReadStreamAdapterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #accessing } -XMLDecodingReadStreamAdapterTest >> basicInvalidInputCollections [ - ^ #() -] - -{ #category : #testing } -XMLDecodingReadStreamAdapterTest >> detectsBOMs [ - ^ false -] - -{ #category : #testing } -XMLDecodingReadStreamAdapterTest >> expectsBinaryInput [ - ^ true -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapterTest >> inputCollection [ - ^ self detectsBOMs - ifTrue: [self inputCollectionByteOrderMark, super inputCollection] - ifFalse: [super inputCollection] -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapterTest >> inputCollectionByteOrderMark [ - ^ self asExpectedInput: self streamConverterClass byteOrderMarkBytes -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapterTest >> invalidInputCollections [ - ^ self basicInvalidInputCollections collect: [:each | - self detectsBOMs - ifTrue: [self inputCollectionByteOrderMark, (self asExpectedInput: each)] - ifFalse: [self asExpectedInput: each]] -] - -{ #category : #'instance creation' } -XMLDecodingReadStreamAdapterTest >> newStreamAdapterOn: aStream [ - | adapter | - - adapter := super newStreamAdapterOn: aStream. - self detectsBOMs - ifTrue: [adapter detectEncoding] - ifFalse: [adapter streamConverter: self streamConverterClass new]. - ^ adapter. -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapterTest >> streamAdapterClass [ - ^ XMLDecodingReadStreamAdapter -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapterTest >> streamConverterClass [ - ^ XMLNullStreamConverter -] - -{ #category : #tests } -XMLDecodingReadStreamAdapterTest >> testHasDefaultStreamConverter [ - | adapter | - - adapter := self newStreamAdapter. - self assert: - adapter hasDefaultStreamConverter = adapter streamConverter isDefault. -] - -{ #category : #tests } -XMLDecodingReadStreamAdapterTest >> testHasImplicitStreamConverter [ - | adapter | - - adapter := self newStreamAdapter. - self assert: - adapter hasImplicitStreamConverter = adapter streamConverter isImplicit. -] - -{ #category : #tests } -XMLDecodingReadStreamAdapterTest >> testHasNullStreamConverter [ - | adapter | - - adapter := self newStreamAdapter. - self assert: adapter hasNullStreamConverter = adapter streamConverter isNull. -] - -{ #category : #tests } -XMLDecodingReadStreamAdapterTest >> testInvalidCharacters [ - self invalidInputCollections do: [:each | | streamAdapter | - streamAdapter := self newStreamAdapterOn: (self newStreamOn: each). - [streamAdapter atEnd] - whileFalse: [ - self - should: [streamAdapter next] - raise: XMLEncodingException]. - self assert: streamAdapter atEnd] -] - -{ #category : #tests } -XMLDecodingReadStreamAdapterTest >> testIsXMLConvertingStreamAdapter [ - self assert: self newStreamAdapter isXMLConvertingStreamAdapter -] - -{ #category : #tests } -XMLDecodingReadStreamAdapterTest >> testNonDecodingOn [ - | adapter stream | - - stream := self newStream. - adapter := self streamAdapterClass nonDecodingOn: stream. - self assert: adapter hasNullStreamConverter. -] - -{ #category : #tests } -XMLDecodingReadStreamAdapterTest >> testNonDecodingOnIfBinaryOrExternal [ - | basicInputCollection adapter stream | - - basicInputCollection := self basicInputCollection. - stream := self newStreamOn: (self binaryFrom: basicInputCollection). - adapter := self streamAdapterClass nonDecodingOnIfBinaryOrExternal: stream. - self - assert: adapter class == self streamAdapterClass; - assert: adapter hasNullStreamConverter. - - stream := self newStreamOn: (self stringFrom: basicInputCollection). - adapter := self streamAdapterClass nonDecodingOnIfBinaryOrExternal: stream. - self assert: adapter isNil. -] - -{ #category : #tests } -XMLDecodingReadStreamAdapterTest >> testOn [ - | adapter stream | - - super testOn. - - stream := self newStream. - adapter := self streamAdapterClass on: stream. - self assert: adapter hasDefaultStreamConverter. -] - -{ #category : #tests } -XMLDecodingReadStreamAdapterTest >> testOnIfBinaryOrExternal [ - | adapter stream | - - super testOnIfBinaryOrExternal. - - stream := self newStreamOn: (self binaryFrom: self basicInputCollection). - adapter := self streamAdapterClass onIfBinaryOrExternal: stream. - self - assert: adapter class == self streamAdapterClass; - assert: adapter hasDefaultStreamConverter. -] - -{ #category : #tests } -XMLDecodingReadStreamAdapterTest >> testStreamConverter [ - | adapter newConverter | - - adapter := self newStreamAdapter. - self - deny: adapter streamConverter isNil; - assert: adapter streamConverter class == self streamConverterClass. - - newConverter := self streamConverterClass new. - self - assert: (adapter streamConverter: newConverter) == adapter; - assert: adapter streamConverter == newConverter. - - self - assert: (adapter streamConverter: nil) == adapter; - assert: adapter streamConverter class == XMLNullStreamConverter. -] diff --git a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF16BEBOMStringTest.class.st b/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF16BEBOMStringTest.class.st deleted file mode 100644 index 998c388e7..000000000 --- a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF16BEBOMStringTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLDecodingReadStreamAdapterUTF16BEBOMStringTest, - #superclass : #XMLDecodingReadStreamAdapterUTF16BEBOMTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLDecodingReadStreamAdapterUTF16BEBOMStringTest >> expectsBinaryInput [ - ^ false -] diff --git a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF16BEBOMTest.class.st b/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF16BEBOMTest.class.st deleted file mode 100644 index 576d8e302..000000000 --- a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF16BEBOMTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLDecodingReadStreamAdapterUTF16BEBOMTest, - #superclass : #XMLDecodingReadStreamAdapterUTF16BETest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLDecodingReadStreamAdapterUTF16BEBOMTest >> detectsBOMs [ - ^ true -] diff --git a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF16BEStringTest.class.st b/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF16BEStringTest.class.st deleted file mode 100644 index 4a1e67021..000000000 --- a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF16BEStringTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLDecodingReadStreamAdapterUTF16BEStringTest, - #superclass : #XMLDecodingReadStreamAdapterUTF16BETest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLDecodingReadStreamAdapterUTF16BEStringTest >> expectsBinaryInput [ - ^ false -] diff --git a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF16BETest.class.st b/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF16BETest.class.st deleted file mode 100644 index f49c18b16..000000000 --- a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF16BETest.class.st +++ /dev/null @@ -1,36 +0,0 @@ -Class { - #name : #XMLDecodingReadStreamAdapterUTF16BETest, - #superclass : #XMLDecodingReadStreamAdapterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #accessing } -XMLDecodingReadStreamAdapterUTF16BETest >> basicInputCollection [ - ^ self encodedUTF16BEBinary -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapterUTF16BETest >> basicInvalidInputCollections [ - "code points greater than U+10FFFF can't be encoded using UTF-16, so - they aren't tested for here" - ^ #( - #(16rDC 16r00 16rDC 16r00) "first illegal leading surrogate" - #(16rDF 16rFF 16rDC 16r00) "last illegal leading surrogate" - #(16rD8 16r00 16rD8 16r00) "first illegal trailing surrogate" - #(16rD8 16r00 16rDB 16rFF) "last illegal trailing surrogate" - #(16r00) "incomplete" - #(16rFF) "incomplete" - #(16rD8 16r00) "incomplete surrogate pair" - #(16rD8 16r00 16rDC) "incomplete surrogate pair" - ) collect: [:each | each asByteArray] -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapterUTF16BETest >> basicOutputCollection [ - ^ self decodedUTF16String -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapterUTF16BETest >> streamConverterClass [ - ^ XMLUTF16BigEndianStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF16LEBOMStringTest.class.st b/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF16LEBOMStringTest.class.st deleted file mode 100644 index 8a88e6f70..000000000 --- a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF16LEBOMStringTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLDecodingReadStreamAdapterUTF16LEBOMStringTest, - #superclass : #XMLDecodingReadStreamAdapterUTF16LEBOMTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLDecodingReadStreamAdapterUTF16LEBOMStringTest >> expectsBinaryInput [ - ^ false -] diff --git a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF16LEBOMTest.class.st b/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF16LEBOMTest.class.st deleted file mode 100644 index 7bef514d1..000000000 --- a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF16LEBOMTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLDecodingReadStreamAdapterUTF16LEBOMTest, - #superclass : #XMLDecodingReadStreamAdapterUTF16LETest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLDecodingReadStreamAdapterUTF16LEBOMTest >> detectsBOMs [ - ^ true -] diff --git a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF16LEStringTest.class.st b/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF16LEStringTest.class.st deleted file mode 100644 index cfbcc060a..000000000 --- a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF16LEStringTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLDecodingReadStreamAdapterUTF16LEStringTest, - #superclass : #XMLDecodingReadStreamAdapterUTF16LETest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLDecodingReadStreamAdapterUTF16LEStringTest >> expectsBinaryInput [ - ^ false -] diff --git a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF16LETest.class.st b/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF16LETest.class.st deleted file mode 100644 index e4b91bae4..000000000 --- a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF16LETest.class.st +++ /dev/null @@ -1,36 +0,0 @@ -Class { - #name : #XMLDecodingReadStreamAdapterUTF16LETest, - #superclass : #XMLDecodingReadStreamAdapterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #accessing } -XMLDecodingReadStreamAdapterUTF16LETest >> basicInputCollection [ - ^ self encodedUTF16LEBinary -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapterUTF16LETest >> basicInvalidInputCollections [ - "code points greater than U+10FFFF can't be encoded using UTF-16, so - they aren't tested for here" - ^ #( - #(16r00 16rDC 16r00 16rDC) "first illegal leading surrogate" - #(16rFF 16rDF 16r00 16rDC) "last illegal leading surrogate" - #(16r00 16rD8 16r00 16rD8) "first illegal trailing surrogate" - #(16r00 16rD8 16rFF 16rDB) "last illegal trailing surrogate" - #(16r00) "incomplete" - #(16rFF) "incomplete" - #(16r00 16rD8) "incomplete surrogate pair" - #(16r00 16rD8 16r00) "incomplete surrogate pair" - ) collect: [:each | each asByteArray] -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapterUTF16LETest >> basicOutputCollection [ - ^ self decodedUTF16String -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapterUTF16LETest >> streamConverterClass [ - ^ XMLUTF16LittleEndianStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF32BEBOMStringTest.class.st b/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF32BEBOMStringTest.class.st deleted file mode 100644 index 4d0da400a..000000000 --- a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF32BEBOMStringTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLDecodingReadStreamAdapterUTF32BEBOMStringTest, - #superclass : #XMLDecodingReadStreamAdapterUTF32BEBOMTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLDecodingReadStreamAdapterUTF32BEBOMStringTest >> expectsBinaryInput [ - ^ false -] diff --git a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF32BEBOMTest.class.st b/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF32BEBOMTest.class.st deleted file mode 100644 index 773f756b2..000000000 --- a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF32BEBOMTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLDecodingReadStreamAdapterUTF32BEBOMTest, - #superclass : #XMLDecodingReadStreamAdapterUTF32BETest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLDecodingReadStreamAdapterUTF32BEBOMTest >> detectsBOMs [ - ^ true -] diff --git a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF32BEStringTest.class.st b/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF32BEStringTest.class.st deleted file mode 100644 index 55c1150b3..000000000 --- a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF32BEStringTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLDecodingReadStreamAdapterUTF32BEStringTest, - #superclass : #XMLDecodingReadStreamAdapterUTF32BETest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLDecodingReadStreamAdapterUTF32BEStringTest >> expectsBinaryInput [ - ^ false -] diff --git a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF32BETest.class.st b/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF32BETest.class.st deleted file mode 100644 index f5e79fbff..000000000 --- a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF32BETest.class.st +++ /dev/null @@ -1,35 +0,0 @@ -Class { - #name : #XMLDecodingReadStreamAdapterUTF32BETest, - #superclass : #XMLDecodingReadStreamAdapterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #accessing } -XMLDecodingReadStreamAdapterUTF32BETest >> basicInputCollection [ - ^ self encodedUTF32BEBinary -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapterUTF32BETest >> basicInvalidInputCollections [ - ^ #( - #(16r00 16r00 16rD8 16r00) "first surrogate code point" - #(16r00 16r00 16rDB 16rFF) "last surrogate code point" - #(16r00 16r11 16r00 16r00) "greater than U+10FFFF" - #(16r00) "incomplete" - #(16rFF) "incomplete" - #(16r00 16r00) "incomplete" - #(16r00 16rFF) "incomplete" - #(16r00 16r00 16r00) "incomplete" - #(16r00 16r00 16rFF) "incomplete" - ) collect: [:each | each asByteArray] -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapterUTF32BETest >> basicOutputCollection [ - ^ self decodedUTF32String -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapterUTF32BETest >> streamConverterClass [ - ^ XMLUTF32BigEndianStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF32LEBOMStringTest.class.st b/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF32LEBOMStringTest.class.st deleted file mode 100644 index 299b47fed..000000000 --- a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF32LEBOMStringTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLDecodingReadStreamAdapterUTF32LEBOMStringTest, - #superclass : #XMLDecodingReadStreamAdapterUTF32LEBOMTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLDecodingReadStreamAdapterUTF32LEBOMStringTest >> expectsBinaryInput [ - ^ false -] diff --git a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF32LEBOMTest.class.st b/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF32LEBOMTest.class.st deleted file mode 100644 index 6fe62cb51..000000000 --- a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF32LEBOMTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLDecodingReadStreamAdapterUTF32LEBOMTest, - #superclass : #XMLDecodingReadStreamAdapterUTF32LETest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLDecodingReadStreamAdapterUTF32LEBOMTest >> detectsBOMs [ - ^ true -] diff --git a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF32LEStringTest.class.st b/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF32LEStringTest.class.st deleted file mode 100644 index d281c70ec..000000000 --- a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF32LEStringTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLDecodingReadStreamAdapterUTF32LEStringTest, - #superclass : #XMLDecodingReadStreamAdapterUTF32LETest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLDecodingReadStreamAdapterUTF32LEStringTest >> expectsBinaryInput [ - ^ false -] diff --git a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF32LETest.class.st b/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF32LETest.class.st deleted file mode 100644 index 47bc1adaf..000000000 --- a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF32LETest.class.st +++ /dev/null @@ -1,36 +0,0 @@ -Class { - #name : #XMLDecodingReadStreamAdapterUTF32LETest, - #superclass : #XMLDecodingReadStreamAdapterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #accessing } -XMLDecodingReadStreamAdapterUTF32LETest >> basicInputCollection [ - ^ self encodedUTF32LEBinary -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapterUTF32LETest >> basicInvalidInputCollections [ - ^ #( - #(16r00 16rD8 16r00 16r00) "first surrogate code point" - #(16rFF 16rDB 16r00 16r00) "last surrogate code point" - #(16r00 16r00 16r11 16r00) "greater than U+10FFFF" - #(16r01 16r00 16r00) "greater than U+10FFFF" - #(16r00) "incomplete" - #(16rFF) "incomplete" - #(16r00 16r00) "incomplete" - #(16rFF 16r00) "incomplete" - #(16r00 16r00 16r00) "incomplete" - #(16rFF 16r00 16r00) "incomplete" - ) collect: [:each | each asByteArray] -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapterUTF32LETest >> basicOutputCollection [ - ^ self decodedUTF32String -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapterUTF32LETest >> streamConverterClass [ - ^ XMLUTF32LittleEndianStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF8BOMStringTest.class.st b/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF8BOMStringTest.class.st deleted file mode 100644 index 589104c92..000000000 --- a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF8BOMStringTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLDecodingReadStreamAdapterUTF8BOMStringTest, - #superclass : #XMLDecodingReadStreamAdapterUTF8BOMTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLDecodingReadStreamAdapterUTF8BOMStringTest >> expectsBinaryInput [ - ^ false -] diff --git a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF8BOMTest.class.st b/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF8BOMTest.class.st deleted file mode 100644 index 39379f80f..000000000 --- a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF8BOMTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLDecodingReadStreamAdapterUTF8BOMTest, - #superclass : #XMLDecodingReadStreamAdapterUTF8Test, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLDecodingReadStreamAdapterUTF8BOMTest >> detectsBOMs [ - ^ true -] diff --git a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF8StringTest.class.st b/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF8StringTest.class.st deleted file mode 100644 index 9a69f1f77..000000000 --- a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF8StringTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLDecodingReadStreamAdapterUTF8StringTest, - #superclass : #XMLDecodingReadStreamAdapterUTF8Test, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLDecodingReadStreamAdapterUTF8StringTest >> expectsBinaryInput [ - ^ false -] diff --git a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF8Test.class.st b/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF8Test.class.st deleted file mode 100644 index 2a5670749..000000000 --- a/src/XML-Tests-Parser/XMLDecodingReadStreamAdapterUTF8Test.class.st +++ /dev/null @@ -1,55 +0,0 @@ -Class { - #name : #XMLDecodingReadStreamAdapterUTF8Test, - #superclass : #XMLDecodingReadStreamAdapterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #accessing } -XMLDecodingReadStreamAdapterUTF8Test >> basicInputCollection [ - ^ self encodedUTF8Binary -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapterUTF8Test >> basicInvalidInputCollections [ - ^ #( - #(16rC0 16r80) "first two byte overlong" - #(16rC1 16rBF) "last two byte overlong" - #(16rE0 16r80 16r80) "first three byte overlong" - #(16rE0 16r9F 16rBF) "last three byte overlong" - #(16rED 16rA0 16r80) "first surrogate" - #(16rED 16rBF 16rBF) "last surrogate" - #(16rF0 16r80 16r80 16r80) "first four byte overlong" - #(16rF0 16r8F 16rBF 16rBF) "last four byte overlong" - #(16rF4 16r9F 16rBF 16rBF) "greater than U+10FFFF" - #(16r80) "illegal lead byte" - #(16r8F) "illegal lead byte" - #(16rF8) "illegal lead byte" - #(16rF8 16r80 16r80 16r80) "illegal lead byte" - #(16rF8 16r80 16r80 16r80 16r80) "illegal lead byte" - #(16rFF) "illegal lead byte" - #(16rFF 16r80 16r80 16r80) "illegal lead byte" - #(16rFF 16r80 16r80 16r80 16r80) "illegal lead byte" - #(16rC0) "missing second byte" - #(16rC0 16r00) "illegal second byte" - #(16rC0 16rC0) "illegal second byte" - #(16rC0 16rFF) "illegal second byte" - #(16rE0 16r80) "missing third byte" - #(16rE0 16r80 16r00) "illegal third byte" - #(16rE0 16r80 16rC0) "illegal third byte" - #(16rE0 16r80 16rFF) "illegal third byte" - #(16rF0 16r80 16r80) "missing fourth byte" - #(16rF0 16r80 16r80 16r00) "illegal fourth byte" - #(16rF0 16r80 16r80 16rC0) "illegal fourth byte" - #(16rF0 16r80 16r80 16rFF) "illegal fourth byte" - ) collect: [:each | each asByteArray] -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapterUTF8Test >> basicOutputCollection [ - ^ self decodedUTF8String -] - -{ #category : #accessing } -XMLDecodingReadStreamAdapterUTF8Test >> streamConverterClass [ - ^ XMLUTF8StreamConverter -] diff --git a/src/XML-Tests-Parser/XMLDoctypeDeclarationTest.class.st b/src/XML-Tests-Parser/XMLDoctypeDeclarationTest.class.st deleted file mode 100644 index 7884e3328..000000000 --- a/src/XML-Tests-Parser/XMLDoctypeDeclarationTest.class.st +++ /dev/null @@ -1,151 +0,0 @@ -Class { - #name : #XMLDoctypeDeclarationTest, - #superclass : #XMLNodeWithChildrenTest, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #testing } -XMLDoctypeDeclarationTest class >> isAbstract [ - ^ false -] - -{ #category : #'instance creation' } -XMLDoctypeDeclarationTest >> newNodeWithNodes [ - ^ self newNode - addNode: (XMLComment string: 'before'); - addNode: (XMLGeneralEntityDeclaration name: 'one' replacement: 'two'); - addNode: (XMLParameterEntityDeclaration name: 'three' publicID: 'four' systemID: 'four'); - addNode: (XMLElementDeclaration element: 'five' contentModel: '(six|sevent|eight)'); - addNode: - (XMLAttributeDeclaration - element: 'five' - attribute: 'nine' - type: 'CDATA' - defaultPragma: '#IMPLIED' - defaultValue: 'ten'); - addNode: - (XMLNotationDeclaration - name: 'eleven' - publicID: 'twelve' - systemID: 'twelve'); - addNode: (XMLPI target: 'thirteen' data: 'fourteen'); - addNode: (XMLComment string: 'after'); - yourself -] - -{ #category : #accessing } -XMLDoctypeDeclarationTest >> nodeClass [ - ^ XMLDoctypeDeclaration -] - -{ #category : #accessing } -XMLDoctypeDeclarationTest >> nodeListClass [ - ^ XMLInternalSubsetList -] - -{ #category : #accessing } -XMLDoctypeDeclarationTest >> selectListClass [ - ^ XMLInternalSubsetList -] - -{ #category : #tests } -XMLDoctypeDeclarationTest >> testAllNodes [ - | nodeWithNodes allNodes | - - nodeWithNodes := self newNodeWithNodes. - allNodes := nodeWithNodes allNodes. - self - assert: allNodes size = 9; - assert: allNodes first == nodeWithNodes; - assert: allNodes second isComment; - assert: allNodes second string = 'before'; - assert: allNodes third class == XMLGeneralEntityDeclaration; - assert: allNodes fourth class == XMLParameterEntityDeclaration; - assert: allNodes fifth class == XMLElementDeclaration; - assert: allNodes sixth class == XMLAttributeDeclaration; - assert: allNodes seventh class == XMLNotationDeclaration; - assert: allNodes eighth isPI; - assert: allNodes ninth isComment; - assert: allNodes ninth string = 'after'. -] - -{ #category : #tests } -XMLDoctypeDeclarationTest >> testCanonicallyEquals [ - self - assert: (self newNode canonicallyEquals: self newNode); - assert: (self newNodeWithNodes canonicallyEquals: self newNodeWithNodes); - assert: (self newNodeWithNodes canonicallyEquals: self newNode) -] - -{ #category : #tests } -XMLDoctypeDeclarationTest >> testPublicID [ - | doctype | - - doctype := self newNode. - self - assert: doctype publicID = ''; - assert: (doctype publicID: 'test') == doctype; - assert: doctype publicID = 'test'. -] - -{ #category : #tests } -XMLDoctypeDeclarationTest >> testRoot [ - | doctype | - - doctype := self newNode. - self - assert: doctype root = ''; - assert: (doctype root: 'test') == doctype; - assert: doctype root = 'test'. -] - -{ #category : #tests } -XMLDoctypeDeclarationTest >> testRootPublicIDSystemID [ - | doctype | - - doctype := - self nodeClass - root: 'one' - publicID: 'two' - systemID: 'three'. - self - assert: doctype class == self nodeClass; - assert: doctype root = 'one'; - assert: doctype publicID = 'two'; - assert: doctype systemID = 'three'. -] - -{ #category : #tests } -XMLDoctypeDeclarationTest >> testSystemID [ - | doctype | - - doctype := self newNode. - self - assert: doctype systemID = ''; - assert: (doctype systemID: 'test') == doctype; - assert: doctype systemID = 'test'. -] - -{ #category : #tests } -XMLDoctypeDeclarationTest >> testWriteXMLOn [ - | doctype elementDeclaration | - - doctype := self newNode. - self assert: doctype printString = '<!DOCTYPE >'. - doctype root: 'one'. - self assert: doctype printString = '<!DOCTYPE one>'. - doctype publicID: 'two'. - self assert: doctype printString = '<!DOCTYPE one PUBLIC "two" "">'. - doctype systemID: 'three'. - self assert: doctype printString = '<!DOCTYPE one PUBLIC "two" "three">'. - - elementDeclaration := XMLElementDeclaration element: 'four' contentModel: '(five|six)'. - doctype addNode: elementDeclaration. - self assert: - doctype printString = - ('<!DOCTYPE one PUBLIC "two" "three" [', elementDeclaration printString, ']>'). - - self assert: - (self nodeClass root: 'one' publicID: '' systemID: 'two') printString = - '<!DOCTYPE one SYSTEM "two">'. -] diff --git a/src/XML-Tests-Parser/XMLDocumentTest.class.st b/src/XML-Tests-Parser/XMLDocumentTest.class.st deleted file mode 100644 index 1e728eb83..000000000 --- a/src/XML-Tests-Parser/XMLDocumentTest.class.st +++ /dev/null @@ -1,372 +0,0 @@ -Class { - #name : #XMLDocumentTest, - #superclass : #XMLNodeWithElementsTest, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #testing } -XMLDocumentTest class >> isAbstract [ - ^ false -] - -{ #category : #'instance creation' } -XMLDocumentTest >> newNodeWithElements [ - ^ super newNodeWithElements - doctypeDeclaration: (XMLDoctypeDeclaration new root: 'zero'); - yourself -] - -{ #category : #accessing } -XMLDocumentTest >> nodeClass [ - ^ XMLDocument -] - -{ #category : #tests } -XMLDocumentTest >> testAcceptNodeVisitor [ - | visitor document message | - - visitor := XMLRecordingNodeVisitor new. - document := self newNode. - self - assert: (document acceptNodeVisitor: visitor) == document; - assert: visitor messageRecorder hasMessages. - - message := visitor messageRecorder nextMessage. - self - assert: message selector == #visitDocument:; - assert: message arguments = (Array with: document); - assert: visitor messageRecorder hasMessages. - - message := visitor messageRecorder nextMessage. - self - assert: message selector == #visitNodeWithElements:; - assert: message arguments = (Array with: document); - deny: visitor messageRecorder hasMessages. - - super testAcceptNodeVisitor. -] - -{ #category : #tests } -XMLDocumentTest >> testDoctypeDeclaration [ - | document doctypeDeclaration newDocument | - - document := self newNode. - self assert: document doctypeDeclaration isNil. - - doctypeDeclaration := XMLDoctypeDeclaration new. - self - assert: (document doctypeDeclaration: doctypeDeclaration) == document; - assert: document doctypeDeclaration == doctypeDeclaration; - assert: doctypeDeclaration parent == document. - - "adding a doctypeDeclaration from another doc should remove it from the - other doc" - newDocument := self newNode. - self - assert: - (newDocument doctypeDeclaration: document doctypeDeclaration) == - newDocument; - assert: newDocument doctypeDeclaration == doctypeDeclaration; - assert: newDocument doctypeDeclaration parent == newDocument; - assert: document doctypeDeclaration isNil. - - newDocument doctypeDeclaration: nil. - self - assert: newDocument doctypeDeclaration isNil; - assert: doctypeDeclaration parent isNil. -] - -{ #category : #tests } -XMLDocumentTest >> testDoctypeDefinition [ - | document doctypeDefinition | - - document := self newNode. - self assert: document doctypeDefinition isNil. - - doctypeDefinition := DTDDoctypeDefinition new. - self - assert: (document doctypeDefinition: doctypeDefinition) == document; - assert: document doctypeDefinition == doctypeDefinition. -] - -{ #category : #tests } -XMLDocumentTest >> testDocument [ - | document | - - super testDocument. - - document := self newNode. - self assert: document document == document. - - document := self newNodeWithElements. - self assert: document document == document. -] - -{ #category : #tests } -XMLDocumentTest >> testEncoding [ - | document | - - document := self newNode. - self - assert: document encoding = ''; - assert: (document encoding: 'UTF-8') == document; - assert: document encoding = 'UTF-8'. -] - -{ #category : #tests } -XMLDocumentTest >> testHasDoctypeDeclaration [ - | document | - - document := self newNode. - self deny: document hasDoctypeDeclaration. - - document doctypeDeclaration: XMLDoctypeDeclaration new. - self assert: document hasDoctypeDeclaration. - - document doctypeDeclaration: nil. - self deny: document hasDoctypeDeclaration. -] - -{ #category : #tests } -XMLDocumentTest >> testHasDoctypeDefinition [ - | document | - - document := self newNode. - self deny: document hasDoctypeDefinition. - - document doctypeDefinition: DTDDoctypeDefinition new. - self assert: document hasDoctypeDefinition. - - document doctypeDefinition: nil. - self deny: document hasDoctypeDefinition. -] - -{ #category : #tests } -XMLDocumentTest >> testHasEncoding [ - | document | - - document := self newNode. - self deny: document hasEncoding. - - document encoding: 'UTF-8'. - self assert: document hasEncoding. - - document encoding: ''. - self deny: document hasEncoding. -] - -{ #category : #tests } -XMLDocumentTest >> testHasRoot [ - | nodeWithElements | - - self deny: self newNode hasRoot. - nodeWithElements := self newNodeWithElements. - - self assert: nodeWithElements hasRoot. - - nodeWithElements removeNode: nodeWithElements root. - self deny: nodeWithElements hasRoot. -] - -{ #category : #tests } -XMLDocumentTest >> testIsDocument [ - self assert: self newNode isDocument -] - -{ #category : #tests } -XMLDocumentTest >> testIsStandalone [ - | document | - - document := self newNode. - self - deny: document isStandalone; - assert: (document isStandalone: true) == document; - assert: document isStandalone. -] - -{ #category : #tests } -XMLDocumentTest >> testRoot [ - | document newRoot | - - newRoot := self newElementWithAttributes. - document := self nodeClass root: newRoot. - self - assert: document class == self nodeClass; - assert: document root == newRoot. - - self assert: self newNode root isNil. - - document := self newNodeWithElements. - self - assert: document root == document nodes second; - assert: document nodes size = 3; - assert: document nodes first isComment; - assert: (document nodes second isElementNamed: 'zero'); - assert: document nodes third isComment. - - newRoot := self elementClass named: 'new-root'. - self - assert: (document root: newRoot) == document; - assert: document root == newRoot; - assert: document nodes size = 3; - assert: document nodes first isComment; - assert: document nodes second == newRoot; - assert: document nodes third isComment. - - document removeNodes. - self assert: document root isNil. - - self - should: [document root: 'test' asXMLStringNode] - raise: XMLDOMException. -] - -{ #category : #tests } -XMLDocumentTest >> testValidate [ - | xml document | - - super testValidate. - - xml := ' - <!DOCTYPE one [ - <!ELEMENT one (two+, three)> - <!ATTLIST one idref IDREF #REQUIRED> - <!ELEMENT two (#PCDATA)*> - <!ATTLIST two id ID #REQUIRED> - <!ELEMENT three EMPTY>]> - <!--comment--> - <one idref="a"> - <two id="a">three</two> - <two id="b"><!--comment--></two> - <three></three> - </one> - <?target data?>'. - - document := - (XMLDOMParser on: xml) - preservesCommentNodes: true; - parseDocument. - self - shouldnt: [document validate] - raise: XMLValidationException. - self assert: - (document canonicallyEquals: - ((XMLDOMParser on: xml) - preservesCommentNodes: true; - parseDocument)). - - document - allElementsNamed: 'two' - do: [:each | each attributeAt: 'id' put: 'a']. - self - should: [document validate] - raise: XMLValidationException. - - document := XMLDOMParser parse: xml. - document root name: 'zero'. - self - should: [document validate] - raise: XMLValidationException. - - document := XMLDOMParser parse: xml. - document root attributeAt: 'idref' put: 'undeclared'. - self - should: [document validate] - raise: XMLValidationException. - - document := XMLDOMParser parse: xml. - document root addElementNamed: 'four'. - self - should: [document validate] - raise: XMLValidationException. - - document := XMLDOMParser parse: xml. - (document root elementAt: 'three') addNode: - (XMLComment string: 'comment'). - self - should: [document validate] - raise: XMLValidationException. - - document := XMLDOMParser parse: xml. - (document root elementAt: 'three') addNode: - (XMLPI - target: 'target' - data: 'data'). - self - should: [document validate] - raise: XMLValidationException. - - document := XMLDOMParser parse: xml. - (document root elementAt: 'three') addNode: (XMLCData string: 'five'). - self - should: [document validate] - raise: XMLValidationException. - - document := XMLDOMParser parse: xml. - (document root elementAt: 'three') addElementNamed: 'four'. - self - should: [document validate] - raise: XMLValidationException. - - (document := XMLDOMParser parse: xml) doctypeDefinition: nil. - document root - name: 'zero'; - attributeAt: 'idref' put: 'undeclared'; - addElementNamed: 'four'; - allElementsNamed: 'two' do: [:each | each attributeAt: 'id' put: 'same']. - (document root elementAt: 'three') - addNode: (XMLComment string: 'comment'); - addNode: - (XMLPI - target: 'target' - data: 'data'); - addNode: (XMLCData string: 'five'); - addElementNamed: 'four'. - self - shouldnt: [document validate] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLDocumentTest >> testValidateNoSubset [ - | xml document | - - xml := '<!DOCTYPE one> - <one idref="a"> - <two id="a">three</two><two id="b"><!--comment--></two> - </one>'. - - document := - (XMLDOMParser on: xml) - preservesCommentNodes: true; - parseDocument. - self - shouldnt: [document validate] - raise: XMLValidationException. - self assert: - (document canonicallyEquals: - ((XMLDOMParser on: xml) - preservesCommentNodes: true; - parseDocument)). - - document root name: 'five'. - self - should: [document validate] - raise: XMLValidationException. - - document doctypeDefinition: nil. - self - shouldnt: [document validate] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLDocumentTest >> testVersion [ - | document | - - document := self newNode. - self - assert: document version isNil; - assert: (document version: 1.0) == document; - assert: document version = 1.0. -] diff --git a/src/XML-Tests-Parser/XMLDocumentWithCachingNodeList.class.st b/src/XML-Tests-Parser/XMLDocumentWithCachingNodeList.class.st deleted file mode 100644 index 2638c37f3..000000000 --- a/src/XML-Tests-Parser/XMLDocumentWithCachingNodeList.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -A class for testing documents that use XMLCachingNodeList instead of XMLNodeList. -" -Class { - #name : #XMLDocumentWithCachingNodeList, - #superclass : #XMLDocument, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #defaults } -XMLDocumentWithCachingNodeList >> nodeListClass [ - ^ XMLCachingNodeList -] diff --git a/src/XML-Tests-Parser/XMLDocumentWithCachingNodeListTest.class.st b/src/XML-Tests-Parser/XMLDocumentWithCachingNodeListTest.class.st deleted file mode 100644 index 7891d366a..000000000 --- a/src/XML-Tests-Parser/XMLDocumentWithCachingNodeListTest.class.st +++ /dev/null @@ -1,20 +0,0 @@ -Class { - #name : #XMLDocumentWithCachingNodeListTest, - #superclass : #XMLDocumentTest, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #accessing } -XMLDocumentWithCachingNodeListTest >> elementClass [ - ^ XMLElementWithCachingNodeList -] - -{ #category : #accessing } -XMLDocumentWithCachingNodeListTest >> nodeClass [ - ^ XMLDocumentWithCachingNodeList -] - -{ #category : #accessing } -XMLDocumentWithCachingNodeListTest >> nodeListClass [ - ^ XMLCachingNodeList -] diff --git a/src/XML-Tests-Parser/XMLElementClassMapperTest.class.st b/src/XML-Tests-Parser/XMLElementClassMapperTest.class.st deleted file mode 100644 index 1b17503ff..000000000 --- a/src/XML-Tests-Parser/XMLElementClassMapperTest.class.st +++ /dev/null @@ -1,196 +0,0 @@ -Class { - #name : #XMLElementClassMapperTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser-Utils' -} - -{ #category : #acccessing } -XMLElementClassMapperTest >> attributes [ - ^ XMLAttributeDictionary - with: 'name' -> 'value' - with: 'name2' -> 'value2' -] - -{ #category : #acccessing } -XMLElementClassMapperTest >> elementClass [ - ^ XMLElement -] - -{ #category : #acccessing } -XMLElementClassMapperTest >> mapperClass [ - ^ XMLElementClassMapper -] - -{ #category : #'instance creation' } -XMLElementClassMapperTest >> newMapper [ - ^ self mapperClass new -] - -{ #category : #'instance creation' } -XMLElementClassMapperTest >> newMapperWithMappings [ - | mapper | - - mapper := XMLBasicElementClassMapper new. - mapper - mapElement: 'test' - toClass: self elementClass. - mapper - mapElement: 'test' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self elementClass. - mapper - mapElement: 'test' - namespaceURI: 'testNS' - toClass: self elementClass. - mapper - mapElement: 'test' - namespaceURI: 'testNS' - attributeSpec: self attributes asXMLAttributeSpec - toClass: self elementClass. - ^ mapper. -] - -{ #category : #acccessing } -XMLElementClassMapperTest >> otherElementClass [ - ^ XMLFElement -] - -{ #category : #tests } -XMLElementClassMapperTest >> testCamelCasedNameFromClassNameSegments [ - | mapper | - - mapper := self newMapper. - #(#('ONE' 'Two' 'Three') - #('One' 'Two' 'Three') - #('A' 'Bc' 'D') - #('Ab' 'Cd') - #('Ab') - #('AB') - #('a' 'B') - #('a' 'Ba')) - with: - #('oneTwoThree' - 'oneTwoThree' - 'aBcD' - 'abCd' - 'ab' - 'ab' - 'aB' - 'aBa') - do: [:segments :name | - self assert: - (mapper camelCasedNameFromClassNameSegments: segments) = - name]. -] - -{ #category : #tests } -XMLElementClassMapperTest >> testClassNameSegmentsFrom [ - | mapper | - - mapper := self newMapper. - #('ONETwoThree' - 'OneTwoThree' - 'ABcD' - 'AbCd' - 'Ab' - 'AB' - 'aB' - 'aBa') - with: - #(#('ONE' 'Two' 'Three') - #('One' 'Two' 'Three') - #('A' 'Bc' 'D') - #('Ab' 'Cd') - #('Ab') - #('AB') - #('a' 'B') - #('a' 'Ba')) - do: [:string :segments | - self assert: - (mapper classNameSegmentsFrom: string) = - segments asOrderedCollection]. -] - -{ #category : #tests } -XMLElementClassMapperTest >> testHyphenatedNameFromClassNameSegments [ - | mapper | - - mapper := self newMapper. - #(#('ONE' 'Two' 'Three') - #('One' 'Two' 'Three') - #('A' 'Bc' 'D') - #('Ab' 'Cd') - #('Ab') - #('AB') - #('a' 'B') - #('a' 'Ba')) - with: - #('one-two-three' - 'one-two-three' - 'a-bc-d' - 'ab-cd' - 'ab' - 'ab' - 'a-b' - 'a-ba') - do: [:segments :name | - self assert: - (mapper hyphenatedNameFromClassNameSegments: segments) = - name]. -] - -{ #category : #tests } -XMLElementClassMapperTest >> testNameFromClassNameSegments [ - | mapper | - - mapper := self newMapper. - #(#('ONE' 'Two' 'Three') - #('One' 'Two' 'Three') - #('A' 'Bc' 'D') - #('Ab' 'Cd') - #('Ab') - #('AB') - #('a' 'B') - #('a' 'Ba')) - with: - #('ONETwoThree' - 'OneTwoThree' - 'ABcD' - 'AbCd' - 'Ab' - 'AB' - 'aB' - 'aBa') - do: [:segments :name | - self assert: - (mapper nameFromClassNameSegments: segments) = - name]. -] - -{ #category : #tests } -XMLElementClassMapperTest >> testUnderscoredNameFromClassNameSegments [ - | mapper | - - mapper := self newMapper. - #(#('ONE' 'Two' 'Three') - #('One' 'Two' 'Three') - #('A' 'Bc' 'D') - #('Ab' 'Cd') - #('Ab') - #('AB') - #('a' 'B') - #('a' 'Ba')) - with: - #('one_two_three' - 'one_two_three' - 'a_bc_d' - 'ab_cd' - 'ab' - 'ab' - 'a_b' - 'a_ba') - do: [:segments :name | - self assert: - (mapper underscoredNameFromClassNameSegments: segments) = - name]. -] diff --git a/src/XML-Tests-Parser/XMLElementDeclarationTest.class.st b/src/XML-Tests-Parser/XMLElementDeclarationTest.class.st deleted file mode 100644 index 2c79771a1..000000000 --- a/src/XML-Tests-Parser/XMLElementDeclarationTest.class.st +++ /dev/null @@ -1,63 +0,0 @@ -Class { - #name : #XMLElementDeclarationTest, - #superclass : #XMLDeclarationNodeTest, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #testing } -XMLElementDeclarationTest class >> isAbstract [ - ^ false -] - -{ #category : #accessing } -XMLElementDeclarationTest >> nodeClass [ - ^ XMLElementDeclaration -] - -{ #category : #tests } -XMLElementDeclarationTest >> testContentModel [ - | declaration | - - declaration := self newNode. - self - assert: declaration contentModel = ''; - assert: (declaration contentModel: '(one|two)') == declaration; - assert: declaration contentModel = '(one|two)'. -] - -{ #category : #tests } -XMLElementDeclarationTest >> testElement [ - | declaration | - - declaration := self newNode. - self - assert: declaration element = ''; - assert: (declaration element: 'test') == declaration; - assert: declaration element = 'test'. -] - -{ #category : #tests } -XMLElementDeclarationTest >> testElementContentModel [ - | declaration | - - declaration := - self nodeClass - element: 'one' - contentModel: '(two|three)'. - self - assert: declaration class == self nodeClass; - assert: declaration element = 'one'; - assert: declaration contentModel = '(two|three)' -] - -{ #category : #assertions } -XMLElementDeclarationTest >> testWriteXMLOn [ - self assert: - (self nodeClass - element: 'one' - contentModel: '(two | three)') printString = '<!ELEMENT one (two | three)>'. - self assert: - (self nodeClass - element: 'one' - contentModel: 'EMPTY') printString = '<!ELEMENT one EMPTY>'. -] diff --git a/src/XML-Tests-Parser/XMLElementTest.class.st b/src/XML-Tests-Parser/XMLElementTest.class.st deleted file mode 100644 index 3a04e38ec..000000000 --- a/src/XML-Tests-Parser/XMLElementTest.class.st +++ /dev/null @@ -1,1844 +0,0 @@ -Class { - #name : #XMLElementTest, - #superclass : #XMLNodeWithElementsTest, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #testing } -XMLElementTest class >> isAbstract [ - ^ false -] - -{ #category : #'instance creation' } -XMLElementTest >> newNodeWithElements [ - ^ super newNodeWithElements - name: 'root'; - yourself -] - -{ #category : #accessing } -XMLElementTest >> nodeClass [ - ^ XMLElement -] - -{ #category : #tests } -XMLElementTest >> testAcceptNodeVisitor [ - | visitor element message | - - visitor := XMLRecordingNodeVisitor new. - element := self newNode. - self - assert: (element acceptNodeVisitor: visitor) == element; - assert: visitor messageRecorder hasMessages. - - message := visitor messageRecorder nextMessage. - self - assert: message selector == #visitElement:; - assert: message arguments = (Array with: element); - assert: visitor messageRecorder hasMessages. - - message := visitor messageRecorder nextMessage. - self - assert: message selector == #visitNodeWithElements:; - assert: message arguments = (Array with: element); - deny: visitor messageRecorder hasMessages. - - super testAcceptNodeVisitor. -] - -{ #category : #tests } -XMLElementTest >> testAddElementNamed [ - | element | - - super testAddElementNamed. - - element := self newNode. - element - declarePrefix: 'prefix' - uri: 'prefixNS'. - self - shouldnt: [element addElementNamed: 'prefix:test'] - raise: XMLNamespaceException. - self - assert: element nodes size = 1; - assert: element firstNode isElement; - assert: element firstNode name = 'prefix:test'; - assert: element firstNode namespaceURI = 'prefixNS'. -] - -{ #category : #tests } -XMLElementTest >> testAddElementNamedAttributes [ - | element | - - super testAddElementNamedAttributes. - - element := self newNode. - element - declarePrefix: 'prefix' - uri: 'prefixNS'. - self - shouldnt: [ - element - addElementNamed: 'prefix:test' - attributes: self attributeAssociations] - raise: XMLNamespaceException. - self - assert: element nodes size = 1; - assert: element firstNode isElement; - assert: element firstNode name = 'prefix:test'; - assert: element firstNode namespaceURI = 'prefixNS'; - assertElement: element firstNode hasAttributes: self attributes. -] - -{ #category : #tests } -XMLElementTest >> testAttributeAssociations [ - | element | - - element := self newElementWithAttributes. - self - assertList: element attributeAssociations - collects: (element attributeNodes collect: [:each | each name -> each value]). -] - -{ #category : #tests } -XMLElementTest >> testAttributeAt [ - | element | - - element := self newElementWithAttributes. - element attributeNodes do: [:each | - self assert: (element attributeAt: each name) = each value]. - self assert: (element attributeAt: 'absent') = ''. -] - -{ #category : #tests } -XMLElementTest >> testAttributeAtIfAbsent [ - | element | - - element := self newElementWithAttributes. - element attributeNodes do: [:each | - self assert: - (element - attributeAt: each name - ifAbsent: [self fail]) = each value]. - self assert: - (element - attributeAt: 'absent' - ifAbsent: [#absent]) = #absent. -] - -{ #category : #tests } -XMLElementTest >> testAttributeAtIfAbsentPut [ - | element | - - element := self newElementWithAttributes. - element attributeNodes do: [:each | - self assert: - (element - attributeAt: each name - ifAbsentPut: [self fail]) = each value]. - self assert: - (element - attributeAt: 'newName' - ifAbsentPut: ['newValue']) = 'newValue'. - self assert: (element attributeAt: 'newName') = 'newValue'. -] - -{ #category : #tests } -XMLElementTest >> testAttributeAtPut [ - | element | - - element := self newElementWithAttributes. - element attributeNodes do: [:each | | newValue | - newValue := 'new', each value. - self - assert: (element attributeAt: each name put: newValue) = newValue; - assert: (element attributeAt: each name) = newValue]. - self - assert: (element attributeAt: 'newName' put: 'newValue') = 'newValue'; - assert: (element attributeAt: 'newName') = 'newValue'. -] - -{ #category : #tests } -XMLElementTest >> testAttributeListCopying [ - | element attributeListCopy | - - element := self newElementWithAttributes. - attributeListCopy := element attributeNodes copy. - self - assert: attributeListCopy = element attributeNodes; - deny: attributeListCopy == element attributeNodes; - assert: element attributeNodes observer == element; - assert: attributeListCopy observer isNil. -] - -{ #category : #tests } -XMLElementTest >> testAttributeNames [ - | element | - - element := self newElementWithAttributes. - self - assertList: element attributeNames - collects: (element attributeNodes collect: [:each | each name]) -] - -{ #category : #tests } -XMLElementTest >> testAttributeNamesAndValuesDo [ - | element | - - element := self newNode. - self - xmlShould: [:twoArgumentBlock | - element attributeNamesAndValuesDo: twoArgumentBlock] - enumerate: #() - and: #(). - - element := self newElementWithAttributes. - self - xmlShould: [:twoArgumentBlock | - element attributeNamesAndValuesDo: twoArgumentBlock] - enumerate: self attributeNames - and: self attributeValues. -] - -{ #category : #tests } -XMLElementTest >> testAttributeNamesDo [ - | element | - - element := self newNode. - self - xmlShould: [:block | element attributeNamesDo: block] - enumerate: #(). - - element := self newElementWithAttributes. - self - xmlShould: [:block | element attributeNamesDo: block] - enumerate: element attributeNames. -] - -{ #category : #tests } -XMLElementTest >> testAttributeNodeAt [ - | element | - - element := self newElementWithAttributes. - element attributeNodes do: [:each | - self assert: (element attributeNodeAt: each name) = each]. - self assert: - (element attributeNodeAt: 'two') = element attributeNodes second. - self assert: - (element attributeNodeAt: 'absent') isNil. -] - -{ #category : #tests } -XMLElementTest >> testAttributeNodeAtIfAbsent [ - | element attributeLocalNames | - - element := self newElementWithAttributes. - element attributeNodes do: [:each | - self assert: - (element - attributeNodeAt: each name - ifAbsent: [self fail]) = each]. - attributeLocalNames := - (element attributeNodes collect: [:each | each localName]) asSet. - attributeLocalNames do: [:localName | - self assert: - (element - attributeNodeAt: localName - ifAbsent: [self fail]) = - (element attributeNodes detect: [:each | each localName = localName])]. - self assert: - (element - attributeNodeAt: 'absent' - ifAbsent: [#absent]) = #absent. -] - -{ #category : #tests } -XMLElementTest >> testAttributeNodeAtNamespaceURI [ - | element | - - element := self newElementWithAttributes. - self assert: - (element attributeNodeAt: 'prefix:two' namespaceURI: 'prefixNS') = - (element attributeNodes third). - self assert: - (element attributeNodeAt: 'two' namespaceURI: 'prefixNS') = - (element attributeNodes third). - self assert: - (element attributeNodeAt: 'prefix:two' namespaceURI: 'absent') isNil. -] - -{ #category : #tests } -XMLElementTest >> testAttributeNodeAtNamespaceURIIfAbsent [ - | element | - - element := self newElementWithAttributes. - self assert: - (element - attributeNodeAt: 'prefix:two' - namespaceURI: 'prefixNS' - ifAbsent: [self fail]) = - element attributeNodes third. - self assert: - (element - attributeNodeAt: 'two' - namespaceURI: 'prefixNS' - ifAbsent: [self fail]) = - element attributeNodes third. - self assert: - (element - attributeNodeAt: 'prefix:two' - namespaceURI: 'absent' - ifAbsent: [#absent]) = #absent. -] - -{ #category : #tests } -XMLElementTest >> testAttributeNodes [ - | element attributeNodes | - - element := self newElementWithAttributes. - attributeNodes := element attributeNodes. - self assert: attributeNodes class == self attributeListClass. - self assert: - (attributeNodes collect: [:each | each name -> each value]) asArray - = self attributeAssociations asArray. -] - -{ #category : #tests } -XMLElementTest >> testAttributeNodesAdding [ - | element attributesAdded elementWithAttributes | - - element := self newElement. - attributesAdded := element attributeNodes copyEmpty. - elementWithAttributes := self newElementWithAttributes. - - "adding from another element should remove them from the previous element" - elementWithAttributes attributeNodes copy do: [:each | - attributesAdded addLast: each. - element attributeNodes addLast: each. - self - assert: each element == element; - assert: each parent == element; - assert: element attributeNodes = attributesAdded; - deny: (elementWithAttributes attributeNodes includes: each)]. - - "adding already present nodes should move them in-place" - element attributeNodes reversed do: [:each | - attributesAdded - remove: each; - addLast: each. - element attributeNodes addLast: each. - self - assert: each element == element; - assert: each parent == element; - assert: element attributeNodes = attributesAdded] -] - -{ #category : #tests } -XMLElementTest >> testAttributeNodesDo [ - | element | - - element := self newNode. - self - xmlShould: [:block | element attributeNodesDo: block] - enumerate: #(). - - element := self newElementWithAttributes. - self - xmlShould: [:block | element attributeNodesDo: block] - enumerate: element attributeNodes. -] - -{ #category : #tests } -XMLElementTest >> testAttributePrefixAliasing [ - | element | - - (element := self newElementWithAttributes) - declarePrefix: 'alias' uri: 'prefixNS'. - self - should: [ - element attributeNodes addLast: - (self attributeClass named: 'alias:four')] - raise: XMLNamespaceException. - - (element := self newElementWithAttributes) - declarePrefix: 'alias' uri: 'prefixNS'. - self - should: [(element attributeNodeAt: 'two') name: 'alias:two'] - raise: XMLNamespaceException. - - (element := self newElementWithAttributes) - declarePrefix: 'alias' uri: 'prefixNS'; - usesNamespaces: false. - self - shouldnt: [ - element attributeNodes addLast: - (self attributeClass named: 'alias:four'). - (element attributeNodeAt: 'two') name: 'alias:two'] - raise: XMLNamespaceException. -] - -{ #category : #tests } -XMLElementTest >> testAttributePrefixUndeclared [ - | element | - - element := self newElementWithAttributes. - self - should: [ - element attributeNodes add: - (self attributeClass named: 'undeclared:newName')] - raise: XMLNamespaceException. - - element := self newElementWithAttributes. - self - should: [ - (element attributeNodeAt: 'one') name: 'undeclared:one'] - raise: XMLNamespaceException. - - element := self newElementWithAttributes. - self - shouldnt: [ - element usesNamespaces: false. - element attributeNodes add: - (self attributeClass named: 'undeclared:newName'). - (element attributeNodeAt: 'one') name: 'undeclared:one'] - raise: XMLNamespaceException. - -] - -{ #category : #tests } -XMLElementTest >> testAttributeRenaming [ - | elementWithAttributes attributeNodes attributeNode oldSize oldNames oldName | - - elementWithAttributes := self newElementWithAttributes. - attributeNodes := elementWithAttributes attributeNodes. - - attributeNode := attributeNodes first. - oldSize := attributeNodes size. - oldNames := elementWithAttributes attributeNames. - oldName := attributeNode name. - attributeNode name: 'newName'. - self - assert: attributeNodes size = oldSize; - assert: attributeNodes first == attributeNode; - assert: elementWithAttributes attributeNames = (oldNames allButFirst copyWithFirst: 'newName'); - deny: (elementWithAttributes includesAttribute: oldName); - assert: (elementWithAttributes attributeNodeAt: 'newName') == attributeNode. - - oldNames := elementWithAttributes attributeNames. - oldName := attributeNode name. - attributeNode name: oldNames last. - self - assert: attributeNodes size = (oldSize - 1); - assert: attributeNodes first == attributeNode; - assert: - elementWithAttributes attributeNames = - ((oldNames copyFrom: 2 to: oldNames size - 1) copyWithFirst: oldNames last); - deny: (elementWithAttributes includesAttribute: oldName); - assert: (elementWithAttributes attributeNodeAt: attributeNode name) == attributeNode. -] - -{ #category : #tests } -XMLElementTest >> testAttributeSorting [ - | element | - - element := - self nodeClass - name: 'sorted' - attributes: (Array with: 'c' -> '3' with: 'b' -> '2' with: 'a' -> '1'). - self assert: - (element attributeNodes sorted - collect: [:each | each name]) asArray = #('a' 'b' 'c'). - self assert: - ((element attributeNodes sorted: [:a :b | a name <= b name]) - collect: [:each | each name]) asArray = #('a' 'b' 'c'). - "sorted/sorted: should sort copies" - self assert: element attributeNames asArray = #('c' 'b' 'a'). - - element attributeNodes sort. - self assert: element attributeNames asArray = #('a' 'b' 'c'). - element attributeNodes sort: [:a :b | a name > b name]. - self assert: element attributeNames asArray = #('c' 'b' 'a'). -] - -{ #category : #tests } -XMLElementTest >> testAttributes [ - | element attributeDictionary | - - element := self newElementWithAttributes. - attributeDictionary := element attributes. - self - assert: attributeDictionary class == self attributesClass; - assert: attributeDictionary size = element attributeNodes size. - self assert: - (element attributeNodes allSatisfy: [:each | - (attributeDictionary at: each name) = each value]). -] - -{ #category : #tests } -XMLElementTest >> testCanonicalPrinting [ - | element | - - element := - self nodeClass - name: 'test' - namespaces: (Array with: 'b' -> 'ns2' with: 'a' -> 'ns1' with: '' -> 'default') - attributes: (Array with: 'c' -> '3' with: 'b' -> '2' with: 'a' -> '1'). - - self assert: - element printString = - '<test xmlns:b="ns2" xmlns:a="ns1" xmlns="default" c="3" b="2" a="1"/>'. - self assert: - element canonicallyPrinted = - '<test xmlns="default" xmlns:a="ns1" xmlns:b="ns2" a="1" b="2" c="3"></test>'. -] - -{ #category : #tests } -XMLElementTest >> testDeclareNamespaces [ - | element | - - element := self newNode. - self assert: (element declareNamespaces: self namespaces) == element. - self namespaces keysAndValuesDo: [:prefix :uri | - self assert: (element isDeclaredPrefix: prefix uri: uri)]. - - element := self newNode. - self assert: (element declareNamespaces: self namespaces associations) == element. - self namespaces keysAndValuesDo: [:prefix :uri | - self assert: (element isDeclaredPrefix: prefix uri: uri)]. - - (element := self newNode) usesNamespaces: false. - self - assert: (element declareNamespaces: #()) == element; - assert: element usesNamespaces. -] - -{ #category : #tests } -XMLElementTest >> testDeclarePrefixURI [ - | element elementsWithDeclaredPrefix | - - element := self newNodeWithElements. - self assert: - (element - declarePrefix: 'newPrefix' - uri: 'prefixNS') == element. - element allElementsDo: [:each | - self assert: - (each - isDeclaredPrefix: 'newPrefix' - uri: 'prefixNS')]. - self assert: - (element - declarePrefix: 'newPrefix' - uri: 'newPrefixNS') == element. - element allElementsDo: [:each | - self assert: - (each - isDeclaredPrefix: 'newPrefix' - uri: 'newPrefixNS')]. - - elementsWithDeclaredPrefix := - element allElementsSelect: [:each | each prefix = 'prefix']. - self assert: - (element - declarePrefix: 'prefix' - uri: 'newPrefixNS') == element. - element allElementsDo: [:each | - (elementsWithDeclaredPrefix includes: each) - ifTrue: [ - self - assert: (each isDeclaredPrefix: 'prefix'); - deny: - (each - isDeclaredPrefix: 'prefix' - uri: 'newPrefixNS')] - ifFalse: [ - self assert: - (each - isDeclaredPrefix: 'prefix' - uri: 'newPrefixNS')]]. - - self - should: [element declarePrefix: 'nonDefault' uri: ''] - raise: XMLNamespaceException. - "cannot rebind the xml prefix to a new NS" - self - should: [element declarePrefix: 'xml' uri: 'newNS'] - raise: XMLNamespaceException. - "cannot rebind the xmlns prefix, even to the same NS" - self - should: [element declarePrefix: 'xmlns' uri: XMLNamespaceScope xmlnsNamespaceURI] - raise: XMLNamespaceException. - - (element := self newNode) usesNamespaces: false. - self assert: - (element - declarePrefix: 'prefix' - uri: 'prefixNS') == element. - self assert: element usesNamespaces. -] - -{ #category : #tests } -XMLElementTest >> testDeclarePrefixURIAttributes [ - | element | - - (element := self newElement) - attributeAt: 'name' - put: 'one'. - element - attributeAt: 'prefix:name' - put: 'two'. - element - attributeAt: 'prefixTwo:name' - put: 'three'. - self - shouldnt: [ - element - declarePrefix: 'prefixTwo' - uri: element defaultNamespace] - raise: XMLNamespaceException. - self - should: [ - element - declarePrefix: 'prefixTwo' - uri: (element resolvePrefix: 'prefix')] - raise: XMLNamespaceException. -] - -{ #category : #tests } -XMLElementTest >> testDeclaredPrefixes [ - | element prefixes | - - element := self newNode. - prefixes := OrderedCollection new. - self namespaces keysAndValuesDo: [:prefix :uri | - element - declarePrefix: prefix - uri: uri. - prefixes addLast: prefix. - self assert: element declaredPrefixes = prefixes asArray]. - - (element := self newNode) usesNamespaces: false. - self - assert: element declaredPrefixes isEmpty; - deny: element usesNamespaces. -] - -{ #category : #tests } -XMLElementTest >> testDeclaresDefaultNamespace [ - | element | - - element := self newNodeWithElements. - self deny: element declaresDefaultNamespace. - - element defaultNamespace: 'defaultNS'. - self assert: element declaresDefaultNamespace. - element elementsDo: [:each | - self deny: each declaresDefaultNamespace]. - - element elementsDo: [:each | - each defaultNamespace: 'newDefaultNS'. - self assert: each declaresDefaultNamespace]. - - self assert: element declaresDefaultNamespace. - element undeclarePrefix: ''. - self deny: element declaresDefaultNamespace. - element elementsDo: [:each | - self assert: each declaresDefaultNamespace]. - - (element := self newNode) usesNamespaces: false. - self - deny: element declaresDefaultNamespace; - deny: element usesNamespaces. -] - -{ #category : #tests } -XMLElementTest >> testDeclaresPrefixURI [ - | element | - - element := self newNodeWithElements. - self deny: element declaresDefaultNamespace. - - element - declarePrefix: 'prefix' - uri: 'prefixNS'. - self assert: - (element - declaresPrefix: 'prefix' - uri: 'prefixNS'). - element elementsDo: [:each | - self deny: - (each - declaresPrefix: 'prefix' - uri: 'prefixNS')]. - - element elementsDo: [:each | - each - declarePrefix: 'prefix' - uri: 'newPrefixNS'. - self assert: - (each - declaresPrefix: 'prefix' - uri: 'newPrefixNS')]. - - self assert: - (element - declaresPrefix: 'prefix' - uri: 'prefixNS'). - element undeclarePrefix: 'prefix'. - self deny: - (element - declaresPrefix: 'prefix' - uri: 'prefixNS'). - element elementsDo: [:each | - self assert: - (each - declaresPrefix: 'prefix' - uri: 'newPrefixNS')]. - - (element := self newNode) usesNamespaces: false. - self deny: - (element - declaresPrefix: 'prefix' - uri: 'prefixNS'). - self deny: element usesNamespaces. -] - -{ #category : #tests } -XMLElementTest >> testDefaultNamespace [ - | element elementsWithDefaultNamespace | - - element := self newNodeWithElements. - elementsWithDefaultNamespace := - element allElementsSelect: [:each | - each defaultNamespace notEmpty]. - - self assert: (element defaultNamespace: 'newDefaultNS') == element. - element allElementsDo: [:each | - (elementsWithDefaultNamespace includes: each) - ifTrue: [self deny: (each defaultNamespace = 'newDefaultNS')] - ifFalse: [self assert: (each defaultNamespace = 'newDefaultNS')]]. - - self assert: (element defaultNamespace: '') == element. - element allElementsDo: [:each | - (elementsWithDefaultNamespace includes: each) - ifTrue: [self deny: each defaultNamespace = ''] - ifFalse: [self assert: each defaultNamespace = '']]. - - (element := self newNode) usesNamespaces: false. - self - assert: element defaultNamespace = ''; - deny: element usesNamespaces; - assert: (element defaultNamespace: '') == element; - assert: element usesNamespaces. -] - -{ #category : #tests } -XMLElementTest >> testElementSorting [ - | element | - - (element := self nodeClass named: 'sorted') - addElementNamed: 'c'; - addElementNamed: 'b'; - addElementNamed: 'a'. - - self assert: (element nodes sorted collect: [:each | each name]) asArray = #('a' 'b' 'c'). - self assert: - ((element nodes sorted: [:a :b | a name <= b name]) - collect: [:each | each name]) asArray = #('a' 'b' 'c'). - - self assert: (element nodesCollect: [:each | each name]) asArray = #('c' 'b' 'a'). - element nodes sort. - self assert: (element nodesCollect: [:each | each name]) asArray = #('a' 'b' 'c'). - element nodes sort: [:a :b | a name > b name]. - self assert: (element nodesCollect: [:each | each name]) asArray = #('c' 'b' 'a'). -] - -{ #category : #tests } -XMLElementTest >> testExpandedName [ - | element | - - element := self nodeClass named: 'test'. - self assert: (element expandedName = 'test'). - - element defaultNamespace: 'defaultNS'. - self assert: (element expandedName = 'Q{defaultNS}test'). - - element name: 'prefix:test' namespaceURI: 'prefixNS'. - self assert: (element expandedName = 'Q{prefixNS}test'). - - element - defaultNamespace: ''; - name: 'test'. - self assert: (element expandedName = 'test'). -] - -{ #category : #tests } -XMLElementTest >> testHasAttributes [ - self - deny: self newNode hasAttributes; - assert: self newElementWithAttributes hasAttributes; - deny: self newElementWithAttributes removeAttributes hasAttributes -] - -{ #category : #tests } -XMLElementTest >> testHasID [ - | element document | - - element := self newElementWithAttributes. - self deny: (element hasID: 'test'). - - element - attributeAt: 'xml:id' - put: 'test'. - self assert: (element hasID: 'test'). - - document := element newDocument. - document root: element. - document doctypeDefinition: DTDDoctypeDefinition new. - document doctypeDefinition - addValidatorForAttributeIn: element name - named: 'xml:id' - type: 'CDATA' - defaultPragma: 'REQUIRED' - defaultValue: ''. - self deny: (element hasID: 'test'). - - element - attributeAt: 'id' - put: 'test'. - self deny: (element hasID: 'test'). - - document doctypeDefinition - addValidatorForAttributeIn: element name - named: 'id' - type: 'ID' - defaultPragma: 'REQUIRED' - defaultValue: ''. - self assert: (element hasID: 'test'). -] - -{ #category : #tests } -XMLElementTest >> testHasNamespaceURI [ - | element | - - element := self nodeClass named: 'test'. - self deny: element hasNamespaceURI. - - element defaultNamespace: 'defaultNS'. - self assert: element hasNamespaceURI. - - element defaultNamespace: ''. - self deny: element hasNamespaceURI. - - element name: 'prefix:test' namespaceURI: 'prefixNS'. - self assert: element hasNamespaceURI. - - element name: 'test'. - self deny: element hasNamespaceURI. -] - -{ #category : #tests } -XMLElementTest >> testHasNamespaces [ - | element | - - element := self newNode. - self deny: element hasNamespaces. - - element defaultNamespace: 'defaultNS'. - self assert: element hasNamespaces. - - element undeclarePrefix: ''. - self deny: element hasNamespaces. - - element declarePrefix: 'prefix' uri: 'prefixNS'. - self assert: element hasNamespaces. - - element undeclarePrefix: 'prefix'. - self deny: element hasNamespaces. -] - -{ #category : #tests } -XMLElementTest >> testHasPrefix [ - | element | - - element := self newNode. - self deny: element hasPrefix. - - element name: 'one'. - self deny: element hasPrefix. - - element declarePrefix: 'prefix' uri: 'prefixNS'. - element name: 'prefix:two'. - self assert: element hasPrefix. - - element name: 'three'. - self deny: element hasPrefix. -] - -{ #category : #tests } -XMLElementTest >> testIncludesAttribute [ - | element | - - element := self newElementWithAttributes. - element attributeNames do: [:each | - self assert: (element includesAttribute: each). - element removeAttribute: each. - self deny: (element includesAttribute: each)]. -] - -{ #category : #tests } -XMLElementTest >> testIsDeclaredPrefix [ - | element elementsWithDeclaredPrefix | - - element := self newNodeWithElements. - elementsWithDeclaredPrefix := - element allElementsSelect: [:each | - each isDeclaredPrefix: 'prefix']. - - element allElementsDo: [:each | - (elementsWithDeclaredPrefix includes: each ) - ifFalse: [self deny: (each isDeclaredPrefix: 'prefix')]]. - - element declarePrefix: 'prefix' uri: 'newPrefixNS'. - element allElementsDo: [:each | self assert: (each isDeclaredPrefix: 'prefix')]. - - element undeclarePrefix: 'prefix'. - element allElementsDo: [:each | - (elementsWithDeclaredPrefix includes: each ) - ifTrue: [self assert: (each isDeclaredPrefix: 'prefix')] - ifFalse: [self deny: (each isDeclaredPrefix: 'prefix')]]. - - (element := self newNode) usesNamespaces: false. - self - deny: (element isDeclaredPrefix: 'prefix'); - deny: element usesNamespaces. -] - -{ #category : #tests } -XMLElementTest >> testIsDeclaredPrefixURI [ - | element elementsWithDeclaredPrefix | - - element := self newNodeWithElements. - elementsWithDeclaredPrefix := - element allElementsSelect: [:each | - each isDeclaredPrefix: 'prefix']. - - element allElementsDo: [:each | - self deny: - (each - isDeclaredPrefix: 'prefix' - uri: 'newPrefixNS')]. - - element - declarePrefix: 'prefix' - uri: 'newPrefixNS'. - element allElementsDo: [:each | - (elementsWithDeclaredPrefix includes: each ) - ifTrue: [ - self assert: (each isDeclaredPrefix: 'prefix'). - self deny: - (each - isDeclaredPrefix: 'prefix' - uri: 'newPrefixNS')] - ifFalse: [ - self assert: - (each - isDeclaredPrefix: 'prefix' - uri: 'newPrefixNS')]]. - - element undeclarePrefix: 'prefix'. - element allElementsDo: [:each | - (elementsWithDeclaredPrefix includes: each ) - ifTrue: [self assert: (each isDeclaredPrefix: 'prefix')] - ifFalse: [self deny: (each isDeclaredPrefix: 'prefix')]]. - - (element := self newNode) usesNamespaces: false. - self deny: - (element - isDeclaredPrefix: 'prefix' - uri: 'prefixNS'). - self deny: element usesNamespaces. -] - -{ #category : #tests } -XMLElementTest >> testIsElement [ - self assert: self newNode isElement -] - -{ #category : #tests } -XMLElementTest >> testIsElementNamed [ - | element | - - element := self nodeClass named: 'one'. - self - assert: (element isElementNamed: 'one'); - deny: (element isElementNamed: 'two'). - - element name: 'one:two' namespaceURI: 'testNS'. - self - assert: (element isElementNamed: 'one:two'); - assert: (element isElementNamed: 'two'); - deny: (element isElementNamed: 'one'). -] - -{ #category : #tests } -XMLElementTest >> testIsElementNamedAny [ - | element | - - element := self nodeClass named: 'one'. - self - assert: (element isElementNamedAny: #('two' 'one' 'three')); - deny: (element isElementNamedAny: #('two' 'three')). - - element name: 'one:two' namespaceURI: 'testNS'. - self - assert: (element isElementNamedAny: #('one' 'one:two' 'three')); - assert: (element isElementNamedAny: #('one' 'two' 'three')); - deny: (element isElementNamedAny: #('one' 'three')). -] - -{ #category : #tests } -XMLElementTest >> testIsInLanguage [ - | nodeWithElements | - - super testIsInLanguage. - - nodeWithElements := self newNodeWithElements. - self languageTagsAndFilters do: [:tagAndFilters | - | tag matchingFilters nonMatchingFilters | - - tag := tagAndFilters first. - matchingFilters := tagAndFilters second. - nonMatchingFilters := tagAndFilters third. - nodeWithElements allElementsDo: [:element | - (matchingFilters, nonMatchingFilters) do: [:each | - self deny: (element isInLanguage: each)]]. - - nodeWithElements - attributeAt: 'xml:lang' - put: tag. - nodeWithElements allElementsDo: [:element | - matchingFilters do: [:each | - self assert: (element isInLanguage: each)]. - nonMatchingFilters do: [:each | - self deny: (element isInLanguage: each)]. - - element = nodeWithElements - ifFalse: [ - "ensure it can be shadowed" - element - attributeAt: 'xml:lang' - put: ''. - (matchingFilters, nonMatchingFilters) do: [:each | - self deny: (element isInLanguage: each)]. - element removeAttribute: 'xml:lang']]. - - nodeWithElements removeAttribute: 'xml:lang']. -] - -{ #category : #tests } -XMLElementTest >> testIsNamed [ - | element | - - element := self nodeClass named: 'one'. - self - assert: (element isNamed: 'one'); - deny: (element isNamed: 'two'). - - element name: 'one:two' namespaceURI: 'testNS'. - self - assert: (element isNamed: 'one:two'); - assert: (element isNamed: 'two'); - deny: (element isNamed: 'one'). -] - -{ #category : #tests } -XMLElementTest >> testIsNamedAny [ - | element | - - element := self nodeClass named: 'one'. - self - assert: (element isNamedAny: #('two' 'one' 'three') asSet); - deny: (element isNamedAny: #('two' 'three') asSet). - - element name: 'one:two' namespaceURI: 'testNS'. - self - assert: (element isNamedAny: #('one' 'one:two' 'three')); - assert: (element isNamedAny: #('one' 'two' 'three')); - deny: (element isNamedAny: #('one' 'three')). -] - -{ #category : #tests } -XMLElementTest >> testIsRoot [ - | element | - - element := self newNodeWithElements. - self assert: element allElements first isRoot. - - element descendantElementsDo: [:each | - self deny: each isRoot]. - - (element removeNodes: element elements copy) do: [:each | - self assert: each isRoot]. -] - -{ #category : #tests } -XMLElementTest >> testLocalName [ - | element | - - element := self newNode. - self - assert: element localName = ''; - assert: (element name: 'one') == element; - assert: element localName = 'one'; - assert: (element name: 'two') == element; - assert: element localName = 'two'. - - element - declarePrefix: 'prefix' - uri: 'prefixNS'. - self - assert: (element name: 'prefix:three') == element; - assert: element localName = 'three'; - assert: (element name: 'four') == element; - assert: element localName = 'four'. -] - -{ #category : #tests } -XMLElementTest >> testName [ - | element | - - "XMLElement class>>#name: is not tested here because it is soft-deprecated" - - element := self newNode. - self - assert: element name = ''; - assert: (element name: 'one') == element; - assert: element name = 'one'; - assert: (element name: 'two') == element; - assert: element name = 'two'. - self - should: [element name: 'unmapped:two'] - raise: XMLNamespaceException. - - element usesNamespaces: false. - self - shouldnt: [element name: 'unmapped:three'] - raise: XMLNamespaceException. - self assert: element name = 'unmapped:three'. -] - -{ #category : #tests } -XMLElementTest >> testNameAttributes [ - | attributes unprefixedAttributes element | - - attributes := self attributes. - unprefixedAttributes := self unprefixedAttributes. - element := - self nodeClass - name: 'one' - attributes: self unprefixedAttributeAssociations. - self - assert: element class == self nodeClass; - assert: element name = 'one'; - assertElement: element hasAttributes: unprefixedAttributes. - - "attributes: should accept any collection of associations" - element := - self nodeClass - name: 'two' - attributes: unprefixedAttributes associations. - self - assert: element name = 'two'; - assert: element class == self nodeClass; - assertElement: element hasAttributes: unprefixedAttributes. - - self - should: [ - self nodeClass - name: 'undeclared:three' - attributes: unprefixedAttributes] - raise: XMLNamespaceException. - "prefixed attributes are not accepted" - self - should: [ - self nodeClass - name: 'four' - attributes: attributes] - raise: XMLNamespaceException. -] - -{ #category : #tests } -XMLElementTest >> testNameNamespaceURI [ - | element | - - element := - self nodeClass - name: 'one' - namespaceURI: 'defaultNS'. - self - assert: element class == self nodeClass; - assert: element name = 'one'; - assert: element namespaceURI = 'defaultNS'. - - element := - self nodeClass - name: 'prefix:two' - namespaceURI: 'prefixNS'. - self - assert: element class == self nodeClass; - assert: element name = 'prefix:two'; - assert: element namespaceURI = 'prefixNS'. - self - should: [ - self nodeClass - name: 'prefix:three' - namespaceURI: ''] - raise: XMLNamespaceException. - - element := self newNode. - self assert: - (element - name: 'one' - namespaceURI: 'defaultNS') == element. - self - assert: element name = 'one'; - assert: element namespaceURI = 'defaultNS'. - - self assert: - (element - name: 'prefix:two' - namespaceURI: 'prefixNS') == element. - self - assert: element name = 'prefix:two'; - assert: element namespaceURI = 'prefixNS'. - - self - should: [ - element - name: 'prefix:three' - namespaceURI: ''] - raise: XMLNamespaceException. - - (element := self newNode) usesNamespaces: false. - self assert: - (element - name: 'four' - namespaceURI: 'defaultNS') == element. - self - assert: element name = 'four'; - assert: element namespaceURI = 'defaultNS'; - assert: element usesNamespaces. -] - -{ #category : #tests } -XMLElementTest >> testNameNamespaceURIAttributes [ - | attributes unprefixedAttributes element | - - attributes := self attributes. - unprefixedAttributes := self unprefixedAttributes. - element := - self nodeClass - name: 'one' - namespaceURI: 'defaultNS' - attributes: unprefixedAttributes. - self - assert: element class == self nodeClass; - assert: element name = 'one'; - assert: element namespaceURI = 'defaultNS'; - assertElement: element hasAttributes: unprefixedAttributes. - - element := - self nodeClass - name: 'prefix:two' - namespaceURI: 'prefixNS' - attributes: attributes associations. - self - assert: element class == self nodeClass; - assert: element name = 'prefix:two'; - assert: element namespaceURI = 'prefixNS'; - assertElement: element hasAttributes: attributes. - - "if the attributes have a prefix, then the element must have the - same prefix and the namespace must be non-empty" - self - should: [ - self nodeClass - name: 'three' "no prefix" - namespaceURI: '' "no namespace" - attributes: attributes] - raise: XMLNamespaceException. - self - should: [ - self nodeClass - name: 'four' "no prefix" - namespaceURI: 'prefixNS' - attributes: attributes] - raise: XMLNamespaceException. - self - should: [ - self nodeClass - name: 'prefix:five' - namespaceURI: '' "no namespace" - attributes: unprefixedAttributes] - raise: XMLNamespaceException. -] - -{ #category : #tests } -XMLElementTest >> testNameNamespaces [ - | element | - - element := - self nodeClass - name: 'one' - namespaces: self namespaces. - self - assert: element class == self nodeClass; - assert: element name = 'one'; - assert: element namespaceURI = 'defaultNS'. - self namespaces keysAndValuesDo: [:prefix :uri | - self assert: (element isDeclaredPrefix: prefix uri: uri)]. - - "namespaces: should accept any collection of associations" - element := - self nodeClass - name: 'two' - namespaces: self namespaces associations. - self - assert: element class == self nodeClass; - assert: element name = 'two'; - assert: element namespaceURI = 'defaultNS'. - self namespaces keysAndValuesDo: [:prefix :uri | - self assert: (element isDeclaredPrefix: prefix uri: uri)]. - - element := - self nodeClass - name: 'prefix:three' - namespaces: self namespaces. - self - assert: element class == self nodeClass; - assert: element name = 'prefix:three'; - assert: element namespaceURI = 'prefixNS'. - self namespaces keysAndValuesDo: [:prefix :uri | - self assert: (element isDeclaredPrefix: prefix uri: uri)]. - - self - should: [ - self nodeClass - name: 'undeclared:three' - namespaces: self namespaces] - raise: XMLNamespaceException. -] - -{ #category : #tests } -XMLElementTest >> testNameNamespacesAttributes [ - | element | - - element := - self nodeClass - name: 'one' - namespaces: self namespaces - attributes: self attributes. - self - assert: element class == self nodeClass; - assert: element name = 'one'; - assert: element namespaceURI = 'defaultNS'; - assertElement: element hasAttributes: self attributes. - self namespaces keysAndValuesDo: [:prefix :uri | - self assert: (element isDeclaredPrefix: prefix uri: uri)]. - - element := - self nodeClass - name: 'two' - namespaces: self namespaces associations - attributes: self attributes associations. - self - assert: element class == self nodeClass; - assert: element name = 'two'; - assert: element namespaceURI = 'defaultNS'; - assertElement: element hasAttributes: self attributes. - self namespaces keysAndValuesDo: [:prefix :uri | - self assert: (element isDeclaredPrefix: prefix uri: uri)]. - - self - should: [ - self nodeClass - name: 'undeclared:three' - namespaces: self namespaces - attributes: self attributes] - raise: XMLNamespaceException. - self - should: [ - self nodeClass - name: 'four' - namespaces: #() - attributes: self attributes] - raise: XMLNamespaceException. -] - -{ #category : #tests } -XMLElementTest >> testNamed [ - | element | - - element := self nodeClass named: 'test'. - self - assert: element class == self nodeClass; - assert: element name = 'test'. - self - should: [self nodeClass named: 'undeclared:test'] - raise: XMLNamespaceException. -] - -{ #category : #tests } -XMLElementTest >> testNamespaceURI [ - | element | - - element := self newNode. - self assert: element namespaceURI = ''. - - element defaultNamespace: 'defaultNS'. - self assert: element namespaceURI = 'defaultNS'. - - element - name: 'prefix:test' - namespaceURI: 'prefixNS'. - self assert: element namespaceURI = 'prefixNS'. - - element - defaultNamespace: ''; - name: 'test'. - self assert: element namespaceURI = ''. -] - -{ #category : #tests } -XMLElementTest >> testNextElement [ - | root nextElement | - - root := self newNodeWithElements firstElement. - nextElement := nil. - root elements reverseDo: [:each | - self assert: each nextElement = nextElement. - nextElement := each]. -] - -{ #category : #tests } -XMLElementTest >> testPrefix [ - | element | - - element := self newNode. - self - assert: element prefix = ''; - assert: (element name: 'one') == element; - assert: element prefix = ''. - - element - declarePrefix: 'prefix' - uri: 'prefixNS'. - self - assert: (element prefix: 'prefix') == element; - assert: element name = 'prefix:one'; - assert: element prefix = 'prefix'; - assert: (element name: 'prefix:two') == element; - assert: element name = 'prefix:two'; - assert: element prefix = 'prefix'; - assert: (element prefix: '') == element; - assert: element name = 'two'; - assert: element prefix = ''. - - self - should: [element prefix: 'undeclared'] - raise: XMLNamespaceException. -] - -{ #category : #tests } -XMLElementTest >> testPreviousElement [ - | root previousElement | - - root := self newNodeWithElements firstElement. - previousElement := nil. - root elements do: [:each | - self assert: each previousElement = previousElement. - previousElement := each]. -] - -{ #category : #tests } -XMLElementTest >> testPrintingDefaultNamespaces [ - | element | - - element := - self nodeClass - name: 'element' - namespaceURI: 'default'. - element addNode: - ((self nodeClass - name: 'element' - namespaceURI: '') - addElementNamed: 'empty'; - yourself). - - self assert: - element printString = - ('<element xmlns="default">', - '<element xmlns=""><empty/></element>', - '</element>'). -] - -{ #category : #tests } -XMLElementTest >> testPrintingNonRootNamespaces [ - | element | - - element := - self nodeClass - name: 'element'. - element addNode: - (self nodeClass - name: 'used:empty' - namespaces: (Array with: '' -> 'defaultNS' with: 'used' -> 'usedNS')). - - self assert: - element printString = - ('<element>', - '<used:empty xmlns="defaultNS" xmlns:used="usedNS"/>', - '</element>'). -] - -{ #category : #tests } -XMLElementTest >> testPrintingRootNamespaces [ - | element | - - element := - self nodeClass - name: 'used:element' - namespaces: (Array with: '' -> 'defaultNS' with: 'used' -> 'usedNS'). - element addElementNamed: 'empty'. - - self assert: - element printString = - ('<used:element xmlns="defaultNS" xmlns:used="usedNS">', - '<empty/>', - '</used:element>'). -] - -{ #category : #tests } -XMLElementTest >> testRemoveAttribute [ - | element | - - element := self newElementWithAttributes. - element attributeNodes copy do: [:each | - self - assert: (element removeAttribute: each name) = each value; - deny: (element includesAttribute: each name). - self - should: [element removeAttribute: each name] - raise: Error]. - self assert: element attributeNodes isEmpty. -] - -{ #category : #tests } -XMLElementTest >> testRemoveAttributeIfAbsent [ - | element | - - element := self newElementWithAttributes. - element attributeNodes copy do: [:each | - self assert: - (element - removeAttribute: each name - ifAbsent: [self fail]) = each value. - self deny: (element includesAttribute: each name). - self assert: - (element - removeAttribute: each name - ifAbsent: [#absent]) = #absent]. - self assert: element attributeNodes isEmpty. -] - -{ #category : #tests } -XMLElementTest >> testRemoveAttributeNode [ - | element | - - element := self newElementWithAttributes. - element attributeNodes copy do: [:each | - self - assert: (element removeAttributeNode: each) = each ; - deny: (element attributeNodes includes: each). - self - should: [element removeAttribute: each] - raise: Error]. - self assert: element attributeNodes isEmpty. -] - -{ #category : #tests } -XMLElementTest >> testRemoveAttributeNodeIfAbsent [ - | element | - - element := self newElementWithAttributes. - element attributeNodes copy do: [:each | - self assert: - (element - removeAttributeNode: each - ifAbsent: [self fail]) = each. - self deny: (element attributeNodes includes: each). - self assert: - (element - removeAttributeNode: each - ifAbsent: [#absent]) = #absent]. - self assert: element attributeNodes isEmpty. -] - -{ #category : #tests } -XMLElementTest >> testRemoveAttributes [ - | element | - - element := self newElementWithAttributes. - self - assert: element removeAttributes == element; - assert: element attributeNodes isEmpty; - deny: element hasAttributes. -] - -{ #category : #tests } -XMLElementTest >> testResolvePrefix [ - | element | - - element := self newNode. - self namespaces keysAndValuesDo: [:prefix :uri | - self assert: (element resolvePrefix: prefix) = ''. - element declarePrefix: prefix uri: uri. - self assert: (element resolvePrefix: prefix) = uri]. - - self assert: - (element resolvePrefix: 'xml') = XMLNamespaceScope xmlNamespaceURI. - self assert: - (element resolvePrefix: 'xmlns') = XMLNamespaceScope xmlnsNamespaceURI. - - (element := self newNode) usesNamespaces: false. - self - assert: (element resolvePrefix: 'xml') = ''; - assert: (element resolvePrefix: 'xmlns') = ''; - deny: element usesNamespaces. -] - -{ #category : #tests } -XMLElementTest >> testResolvePrefixIfUnresolvable [ - | element | - - element := self newNode. - self namespaces keysAndValuesDo: [:prefix :uri | - self assert: - (element - resolvePrefix: prefix - ifUnresolvable: ['unresolvable']) = 'unresolvable'. - element declarePrefix: prefix uri: uri. - self assert: - (element - resolvePrefix: prefix - ifUnresolvable: [self fail]) = uri]. - - self assert: - (element - resolvePrefix: 'xml' - ifUnresolvable: [self fail]) = XMLNamespaceScope xmlNamespaceURI. - self assert: - (element - resolvePrefix: 'xmlns' - ifUnresolvable: [self fail]) = XMLNamespaceScope xmlnsNamespaceURI. - - (element := self newNode) usesNamespaces: false. - self assert: - (element - resolvePrefix: 'xml' - ifUnresolvable: ['unresolvable']) = 'unresolvable'. - self assert: - (element - resolvePrefix: 'xmlns' - ifUnresolvable: ['unresolvable']) = 'unresolvable'. - self deny: element usesNamespaces. -] - -{ #category : #tests } -XMLElementTest >> testResolvePrefixesOfNamespaceURI [ - | element | - - element := self newNode. - self namespaces keysAndValuesDo: [:prefix :uri | - self assert: (element resolvePrefixesOfNamespaceURI: uri) isEmpty. - - element - declarePrefix: prefix - uri: uri. - self assert: - (element resolvePrefixesOfNamespaceURI: uri) = - (Set with: prefix). - - element - declarePrefix: 'newPrefix' - uri: uri. - self assert: - (element resolvePrefixesOfNamespaceURI: uri) = - (Set with: prefix with: 'newPrefix')]. - - self assert: - (element resolvePrefixesOfNamespaceURI: - XMLNamespaceScope xmlNamespaceURI) = - (Set with: 'xml'). - self assert: - (element resolvePrefixesOfNamespaceURI: - XMLNamespaceScope xmlnsNamespaceURI) = - (Set with: 'xmlns'). - - (element := self newNode) usesNamespaces: false. - self assert: - (element resolvePrefixesOfNamespaceURI: - XMLNamespaceScope xmlNamespaceURI) isEmpty. - self assert: - (element resolvePrefixesOfNamespaceURI: - XMLNamespaceScope xmlnsNamespaceURI) isEmpty. - self deny: element usesNamespaces. -] - -{ #category : #tests } -XMLElementTest >> testSetAttributes [ - | element newAttributeAssociations | - - element := self newElementWithAttributes. - newAttributeAssociations := - Array - with: 'newName' -> 'newValue' - with: 'newName2' -> 'newValue2'. - element setAttributes: newAttributeAssociations. - - self assert: - (element attributeNodes collect: [:each | - each name -> each value]) asArray = - newAttributeAssociations. -] - -{ #category : #tests } -XMLElementTest >> testSortKey [ - self assert: (self nodeClass named: 'test') sortKey = 'test' -] - -{ #category : #tests } -XMLElementTest >> testUndeclareDefaultNamespace [ - | element oldRootDefaultNamespace elementsWithCustomDefaultNamespace | - - element := self newNodeWithElements. - oldRootDefaultNamespace := element defaultNamespace. - elementsWithCustomDefaultNamespace := - element descendantElementsSelect: [:each | - each defaultNamespace notEmpty - and: [each defaultNamespace ~= oldRootDefaultNamespace]]. - - element - defaultNamespace: 'newDefaultNS'; - undeclareDefaultNamespace; - allElementsDo: [:each | - (elementsWithCustomDefaultNamespace includes: each) - ifTrue: [ - self - assert: each defaultNamespace notEmpty; - deny: each defaultNamespace = oldRootDefaultNamespace; - deny: each defaultNamespace = 'newDefaultNS'] - ifFalse: [self assert: each defaultNamespace isEmpty]]. - - (element := self newNode) usesNamespaces: false. - self - assert: element undeclareDefaultNamespace == element; - assert: element usesNamespaces. -] - -{ #category : #tests } -XMLElementTest >> testUndeclarePrefix [ - | element | - - element := self newElementWithAttributes. - element - declarePrefix: 'unused' - uri: 'unusedNS'. - element addElementNamed: 'prefixTwo:inner'. - - self - assert: (element undeclarePrefix: '') == element; - assert: (element undeclarePrefix: 'unused') == element. - element allElementsDo: [:each | - self - deny: (each isDeclaredPrefix: ''); - deny: (each isDeclaredPrefix: 'unusused'); - assert: (each isDeclaredPrefix: 'prefixTwo')]. - - "this prefix is used by the subelement so it can't be undeclared" - self - should: [element undeclarePrefix: 'prefixTwo'] - raise: XMLNamespaceException. - - (element := self newElementWithAttributes) - attributeAt: 'prefixTwo:name' - put: 'value'. - "this prefix is used by an attribute so it can't be undeclared" - self - should: [element undeclarePrefix: 'prefixTwo'] - raise: XMLNamespaceException. - - (element := self newNode) usesNamespaces: false. - self - assert: (element undeclarePrefix: '') == element; - assert: element usesNamespaces. -] - -{ #category : #tests } -XMLElementTest >> testUndeclarePrefixes [ - | element innerElement | - - element := - self nodeClass - name: 'outer' - namespaces: self namespaces - attributes: self unprefixedAttributes. - (innerElement := element addElementNamed: 'prefixTwo:inner') - declarePrefix: 'prefixTwo' - uri: 'newNS'. - - self - assert: (element undeclarePrefixes) == element; - deny: element hasNamespaces; - assert: innerElement hasNamespaces; - assert: innerElement declaredPrefixes asArray = #('prefixTwo'); - assert: (innerElement resolvePrefix: 'prefixTwo') = 'newNS'. - - self - should: [innerElement undeclarePrefixes] - raise: XMLNamespaceException. - - (element := self newNode) usesNamespaces: false. - self - assert: element undeclarePrefixes == element; - assert: element usesNamespaces. -] - -{ #category : #tests } -XMLElementTest >> testWriteXMLOn [ - | element attributes | - - element := self nodeClass named: 'element'. - self assert: element printString = '<element/>'. - - element addString: 'test'. - self assert: element printString = '<element>test</element>'. - - "attribute order should be preserved when printing" - attributes := - self attributesClass - with: 'b' -> 'one' - with: 'a' -> 'two' - with: 'c' -> 'three' - with: 'e' -> 'four' - with: 'd' -> 'five'. - element setAttributes: attributes. - self assert: - element printString = - '<element b="one" a="two" c="three" e="four" d="five">test</element>'. - element setAttributes: attributes associations reversed. - self assert: - element printString = - '<element d="five" e="four" c="three" a="two" b="one">test</element>'. -] diff --git a/src/XML-Tests-Parser/XMLElementWithCachingNodeList.class.st b/src/XML-Tests-Parser/XMLElementWithCachingNodeList.class.st deleted file mode 100644 index c4d45ea3a..000000000 --- a/src/XML-Tests-Parser/XMLElementWithCachingNodeList.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -A class for testing elements that use XMLCachingNodeList instead of XMLNodeList. -" -Class { - #name : #XMLElementWithCachingNodeList, - #superclass : #XMLElement, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #defaults } -XMLElementWithCachingNodeList >> nodeListClass [ - ^ XMLCachingNodeList -] diff --git a/src/XML-Tests-Parser/XMLElementWithCachingNodeListTest.class.st b/src/XML-Tests-Parser/XMLElementWithCachingNodeListTest.class.st deleted file mode 100644 index 8404ebc80..000000000 --- a/src/XML-Tests-Parser/XMLElementWithCachingNodeListTest.class.st +++ /dev/null @@ -1,20 +0,0 @@ -Class { - #name : #XMLElementWithCachingNodeListTest, - #superclass : #XMLElementTest, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #accessing } -XMLElementWithCachingNodeListTest >> elementClass [ - ^ XMLElementWithCachingNodeList -] - -{ #category : #accessing } -XMLElementWithCachingNodeListTest >> nodeClass [ - ^ XMLElementWithCachingNodeList -] - -{ #category : #accessing } -XMLElementWithCachingNodeListTest >> nodeListClass [ - ^ XMLCachingNodeList -] diff --git a/src/XML-Tests-Parser/XMLElementWithoutCachingAttributeList.class.st b/src/XML-Tests-Parser/XMLElementWithoutCachingAttributeList.class.st deleted file mode 100644 index 744134f7c..000000000 --- a/src/XML-Tests-Parser/XMLElementWithoutCachingAttributeList.class.st +++ /dev/null @@ -1,13 +0,0 @@ -" -A class for testing elements that use XMLAttributeList instead of XMLCachingAttributeList. -" -Class { - #name : #XMLElementWithoutCachingAttributeList, - #superclass : #XMLElement, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #defaults } -XMLElementWithoutCachingAttributeList >> attributeListClass [ - ^ XMLAttributeList -] diff --git a/src/XML-Tests-Parser/XMLElementWithoutCachingAttributeListTest.class.st b/src/XML-Tests-Parser/XMLElementWithoutCachingAttributeListTest.class.st deleted file mode 100644 index a8b59df54..000000000 --- a/src/XML-Tests-Parser/XMLElementWithoutCachingAttributeListTest.class.st +++ /dev/null @@ -1,20 +0,0 @@ -Class { - #name : #XMLElementWithoutCachingAttributeListTest, - #superclass : #XMLElementTest, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #accessing } -XMLElementWithoutCachingAttributeListTest >> attributeListClass [ - ^ XMLAttributeList -] - -{ #category : #accessing } -XMLElementWithoutCachingAttributeListTest >> elementClass [ - ^ XMLElementWithoutCachingAttributeList -] - -{ #category : #accessing } -XMLElementWithoutCachingAttributeListTest >> nodeClass [ - ^ XMLElementWithoutCachingAttributeList -] diff --git a/src/XML-Tests-Parser/XMLEncodingDetectorTest.class.st b/src/XML-Tests-Parser/XMLEncodingDetectorTest.class.st deleted file mode 100644 index 2731af50b..000000000 --- a/src/XML-Tests-Parser/XMLEncodingDetectorTest.class.st +++ /dev/null @@ -1,157 +0,0 @@ -" -Abstract, do not run. -" -Class { - #name : #XMLEncodingDetectorTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLEncodingDetectorTest class >> isAbstract [ - ^ true -] - -{ #category : #testing } -XMLEncodingDetectorTest class >> shouldInheritSelectors [ - ^ true -] - -{ #category : #converting } -XMLEncodingDetectorTest >> asExpectedInput: anInputCollections [ - ^ self detectsBinaryInput - ifTrue: [XMLStreamAdapterTest binaryFrom: anInputCollections] - ifFalse: [XMLStreamAdapterTest stringFrom: anInputCollections] -] - -{ #category : #accessing } -XMLEncodingDetectorTest >> basicImplicitEncodedInputCollections [ - ^ #() -] - -{ #category : #accessing } -XMLEncodingDetectorTest >> basicInvalidImplicitEncodedInputCollections [ - ^ #() -] - -{ #category : #testing } -XMLEncodingDetectorTest >> detectsBinaryInput [ - ^ true -] - -{ #category : #accessing } -XMLEncodingDetectorTest >> encodingDetectorClass [ - ^ XMLEncodingDetector -] - -{ #category : #accessing } -XMLEncodingDetectorTest >> explicitEncodedInputCollections [ - ^ self implicitEncodedInputCollections collect: [:each | - self inputCollectionByteOrderMark, each] -] - -{ #category : #accessing } -XMLEncodingDetectorTest >> explicitEncodingDetectorClass [ - ^ XMLEncodingDetector -] - -{ #category : #accessing } -XMLEncodingDetectorTest >> explicitStreamConverterClass [ - ^ XMLStreamConverter -] - -{ #category : #accessing } -XMLEncodingDetectorTest >> implicitEncodedInputCollections [ - ^ self basicImplicitEncodedInputCollections collect: [:each | - self asExpectedInput: each] -] - -{ #category : #accessing } -XMLEncodingDetectorTest >> implicitEncodingDetectorClass [ - ^ XMLImplicitEncodingDetector -] - -{ #category : #accessing } -XMLEncodingDetectorTest >> implicitStreamConverterClass [ - ^ XMLStreamConverter -] - -{ #category : #accessing } -XMLEncodingDetectorTest >> inputCollectionByteOrderMark [ - ^ self asExpectedInput: self explicitStreamConverterClass byteOrderMarkBytes -] - -{ #category : #accessing } -XMLEncodingDetectorTest >> invalidImplicitEncodedInputCollections [ - ^ self basicInvalidImplicitEncodedInputCollections collect: [:each | - self asExpectedInput: each] -] - -{ #category : #'instance creation' } -XMLEncodingDetectorTest >> newExplicitEncodingDetectorOn: aStream [ - ^ self explicitEncodingDetectorClass on: aStream -] - -{ #category : #'instance creation' } -XMLEncodingDetectorTest >> newImplicitEncodingDetectorOn: aStream [ - ^ self implicitEncodingDetectorClass on: aStream -] - -{ #category : #'instance creation' } -XMLEncodingDetectorTest >> newStreamOn: aString [ - ^ aString readStream -] - -{ #category : #tests } -XMLEncodingDetectorTest >> testStreamConverterForEncoding [ - self explicitEncodedInputCollections do: [:each | - | stream startPosition streamConverter | - - stream := self newStreamOn: each. - startPosition := stream position. - streamConverter := - (self newExplicitEncodingDetectorOn: stream) - streamConverterForEncoding. - self - deny: streamConverter isNil; - assert: streamConverter class == self explicitStreamConverterClass; - deny: streamConverter isImplicit; - assert: - stream position = - (startPosition + self inputCollectionByteOrderMark size)]. - - self implicitEncodedInputCollections do: [:each | - | stream startPosition streamConverter | - - stream := self newStreamOn: each. - startPosition := stream position. - streamConverter := - (self newExplicitEncodingDetectorOn: stream) - streamConverterForEncoding. - self - assert: streamConverter isNil; - assert: stream position = startPosition. - - stream := self newStreamOn: each. - startPosition := stream position. - streamConverter := - (self newImplicitEncodingDetectorOn: stream) - streamConverterForEncoding. - self - deny: streamConverter isNil; - assert: streamConverter class == self implicitStreamConverterClass; - assert: streamConverter isImplicit; - assert: stream position = startPosition]. - - self invalidImplicitEncodedInputCollections do: [:each | - | stream startPosition streamConverter | - - stream := self newStreamOn: each. - startPosition := stream position. - streamConverter := - (self newImplicitEncodingDetectorOn: stream) - streamConverterForEncoding. - self - assert: streamConverter isNil; - assert: stream position = startPosition]. -] diff --git a/src/XML-Tests-Parser/XMLEncodingDetectorUTF16BEStringTest.class.st b/src/XML-Tests-Parser/XMLEncodingDetectorUTF16BEStringTest.class.st deleted file mode 100644 index 1cf770273..000000000 --- a/src/XML-Tests-Parser/XMLEncodingDetectorUTF16BEStringTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLEncodingDetectorUTF16BEStringTest, - #superclass : #XMLEncodingDetectorUTF16BETest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLEncodingDetectorUTF16BEStringTest >> detectsBinaryInput [ - ^ false -] diff --git a/src/XML-Tests-Parser/XMLEncodingDetectorUTF16BETest.class.st b/src/XML-Tests-Parser/XMLEncodingDetectorUTF16BETest.class.st deleted file mode 100644 index 3e26ddb72..000000000 --- a/src/XML-Tests-Parser/XMLEncodingDetectorUTF16BETest.class.st +++ /dev/null @@ -1,29 +0,0 @@ -Class { - #name : #XMLEncodingDetectorUTF16BETest, - #superclass : #XMLEncodingDetectorTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLEncodingDetectorUTF16BETest class >> isAbstract [ - ^ false -] - -{ #category : #accessing } -XMLEncodingDetectorUTF16BETest >> basicImplicitEncodedInputCollections [ - ^ #( - #(16r00 16r01) - #(16r00 16r0F) - #(16r00 16r7F) - ) collect: [:each | each asByteArray] -] - -{ #category : #accessing } -XMLEncodingDetectorUTF16BETest >> explicitStreamConverterClass [ - ^ XMLUTF16BigEndianStreamConverter -] - -{ #category : #accessing } -XMLEncodingDetectorUTF16BETest >> implicitStreamConverterClass [ - ^ XMLImplicitUTF16BigEndianStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLEncodingDetectorUTF16LEStringTest.class.st b/src/XML-Tests-Parser/XMLEncodingDetectorUTF16LEStringTest.class.st deleted file mode 100644 index 3340892b3..000000000 --- a/src/XML-Tests-Parser/XMLEncodingDetectorUTF16LEStringTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLEncodingDetectorUTF16LEStringTest, - #superclass : #XMLEncodingDetectorUTF16LETest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLEncodingDetectorUTF16LEStringTest >> detectsBinaryInput [ - ^ false -] diff --git a/src/XML-Tests-Parser/XMLEncodingDetectorUTF16LETest.class.st b/src/XML-Tests-Parser/XMLEncodingDetectorUTF16LETest.class.st deleted file mode 100644 index 4a5407ddd..000000000 --- a/src/XML-Tests-Parser/XMLEncodingDetectorUTF16LETest.class.st +++ /dev/null @@ -1,29 +0,0 @@ -Class { - #name : #XMLEncodingDetectorUTF16LETest, - #superclass : #XMLEncodingDetectorTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLEncodingDetectorUTF16LETest class >> isAbstract [ - ^ false -] - -{ #category : #accessing } -XMLEncodingDetectorUTF16LETest >> basicImplicitEncodedInputCollections [ - ^ #( - #(16r01 16r00) - #(16r0F 16r00) - #(16r7F 16r00) - ) collect: [:each | each asByteArray] -] - -{ #category : #accessing } -XMLEncodingDetectorUTF16LETest >> explicitStreamConverterClass [ - ^ XMLUTF16LittleEndianStreamConverter -] - -{ #category : #accessing } -XMLEncodingDetectorUTF16LETest >> implicitStreamConverterClass [ - ^ XMLImplicitUTF16LittleEndianStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLEncodingDetectorUTF32BEStringTest.class.st b/src/XML-Tests-Parser/XMLEncodingDetectorUTF32BEStringTest.class.st deleted file mode 100644 index 5bd49f251..000000000 --- a/src/XML-Tests-Parser/XMLEncodingDetectorUTF32BEStringTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLEncodingDetectorUTF32BEStringTest, - #superclass : #XMLEncodingDetectorUTF32BETest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLEncodingDetectorUTF32BEStringTest >> detectsBinaryInput [ - ^ false -] diff --git a/src/XML-Tests-Parser/XMLEncodingDetectorUTF32BETest.class.st b/src/XML-Tests-Parser/XMLEncodingDetectorUTF32BETest.class.st deleted file mode 100644 index 7a6380a6a..000000000 --- a/src/XML-Tests-Parser/XMLEncodingDetectorUTF32BETest.class.st +++ /dev/null @@ -1,29 +0,0 @@ -Class { - #name : #XMLEncodingDetectorUTF32BETest, - #superclass : #XMLEncodingDetectorTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLEncodingDetectorUTF32BETest class >> isAbstract [ - ^ false -] - -{ #category : #accessing } -XMLEncodingDetectorUTF32BETest >> basicImplicitEncodedInputCollections [ - ^ #( - #(16r00 16r00 16r00 16r01) - #(16r00 16r00 16r00 16r0F) - #(16r00 16r00 16r00 16r7F) - ) collect: [:each | each asByteArray] -] - -{ #category : #accessing } -XMLEncodingDetectorUTF32BETest >> explicitStreamConverterClass [ - ^ XMLUTF32BigEndianStreamConverter -] - -{ #category : #accessing } -XMLEncodingDetectorUTF32BETest >> implicitStreamConverterClass [ - ^ XMLImplicitUTF32BigEndianStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLEncodingDetectorUTF32LEStringTest.class.st b/src/XML-Tests-Parser/XMLEncodingDetectorUTF32LEStringTest.class.st deleted file mode 100644 index 6732bdcf0..000000000 --- a/src/XML-Tests-Parser/XMLEncodingDetectorUTF32LEStringTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLEncodingDetectorUTF32LEStringTest, - #superclass : #XMLEncodingDetectorUTF32LETest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLEncodingDetectorUTF32LEStringTest >> detectsBinaryInput [ - ^ false -] diff --git a/src/XML-Tests-Parser/XMLEncodingDetectorUTF32LETest.class.st b/src/XML-Tests-Parser/XMLEncodingDetectorUTF32LETest.class.st deleted file mode 100644 index 26de7b2c1..000000000 --- a/src/XML-Tests-Parser/XMLEncodingDetectorUTF32LETest.class.st +++ /dev/null @@ -1,29 +0,0 @@ -Class { - #name : #XMLEncodingDetectorUTF32LETest, - #superclass : #XMLEncodingDetectorTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLEncodingDetectorUTF32LETest class >> isAbstract [ - ^ false -] - -{ #category : #accessing } -XMLEncodingDetectorUTF32LETest >> basicImplicitEncodedInputCollections [ - ^ #( - #(16r01 16r00 16r00 16r00) - #(16r0F 16r00 16r00 16r00) - #(16r7F 16r00 16r00 16r00) - ) collect: [:each | each asByteArray] -] - -{ #category : #accessing } -XMLEncodingDetectorUTF32LETest >> explicitStreamConverterClass [ - ^ XMLUTF32LittleEndianStreamConverter -] - -{ #category : #accessing } -XMLEncodingDetectorUTF32LETest >> implicitStreamConverterClass [ - ^ XMLImplicitUTF32LittleEndianStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLEncodingDetectorUTF8StringTest.class.st b/src/XML-Tests-Parser/XMLEncodingDetectorUTF8StringTest.class.st deleted file mode 100644 index 7847ca7d7..000000000 --- a/src/XML-Tests-Parser/XMLEncodingDetectorUTF8StringTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLEncodingDetectorUTF8StringTest, - #superclass : #XMLEncodingDetectorUTF8Test, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLEncodingDetectorUTF8StringTest >> detectsBinaryInput [ - ^ false -] diff --git a/src/XML-Tests-Parser/XMLEncodingDetectorUTF8Test.class.st b/src/XML-Tests-Parser/XMLEncodingDetectorUTF8Test.class.st deleted file mode 100644 index 027a3e2a8..000000000 --- a/src/XML-Tests-Parser/XMLEncodingDetectorUTF8Test.class.st +++ /dev/null @@ -1,71 +0,0 @@ -Class { - #name : #XMLEncodingDetectorUTF8Test, - #superclass : #XMLEncodingDetectorTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLEncodingDetectorUTF8Test class >> isAbstract [ - ^ false -] - -{ #category : #accessing } -XMLEncodingDetectorUTF8Test >> basicImplicitEncodedInputCollections [ - ^ #( - #(16r01) - #(16r0F) - #(16r7F) - #(16rC2 16r80) - #(16rDF 16rBF) - #(16rE0 16rA0 16r80) - #(16rEF 16rBB 16rBE) - #(16rEF 16rBF 16rBF) - #(16rF0 16r90 16r80 16r80) - #(16rF4 16r8F 16rBF 16rBF) - #(16r0 16rC2 16r80) - #(16r0 16rDF 16rBF) - #(16r0 16rE0 16rA0 16r80) - #(16r0 16rEF 16rBB 16rBE) - #(16r0 16rEF 16rBF 16rBF) - #(16r0 16rF0 16r90 16r80 16r80) - #(16r0 16rF4 16r8F 16rBF 16rBF) - #(16r0 16r0 16rC2 16r80) - #(16r0 16r0 16rDF 16rBF) - #(16r0 16r0 16rE0 16rA0 16r80) - #(16r0 16r0 16rEF 16rBB 16rBE) - #(16r0 16r0 16rEF 16rBF 16rBF) - #(16r0 16r0 16rF0 16r90 16r80 16r80) - #(16r0 16r0 16rF4 16r8F 16rBF 16rBF) - #(16r0 16r0 16r0 16rC2 16r80) - #(16r0 16r0 16r0 16rDF 16rBF) - #(16r0 16r0 16r0 16rE0 16rA0 16r80) - #(16r0 16r0 16r0 16rEF 16rBB 16rBE) - #(16r0 16r0 16r0 16rEF 16rBF 16rBF) - #(16r0 16r0 16r0 16rF0 16r90 16r80 16r80) - #(16r0 16r0 16r0 16rF4 16r8F 16rBF 16rBF) - ) collect: [:each | each asByteArray] -] - -{ #category : #accessing } -XMLEncodingDetectorUTF8Test >> basicInvalidImplicitEncodedInputCollections [ - ^ #( - #(16r80) - #(16rBF) - #(16rF8) - #(16rFF) - #(16rEF 16rFB 16rBF) "BOM with both partiy bits in the second byte set" - #(16rEF 16r3B 16rBF) "BOM with both parity bits in the second byte unset" - #(16rEF 16rBB 16rFF) "BOM with both partiy bits in the third byte set" - #(16rEF 16rBB 16r3F) "BOM with both parity bits in the third byte unset" - ) collect: [:each | each asByteArray] -] - -{ #category : #accessing } -XMLEncodingDetectorUTF8Test >> explicitStreamConverterClass [ - ^ XMLUTF8StreamConverter -] - -{ #category : #accessing } -XMLEncodingDetectorUTF8Test >> implicitStreamConverterClass [ - ^ XMLImplicitUTF8StreamConverter -] diff --git a/src/XML-Tests-Parser/XMLEncodingTest.class.st b/src/XML-Tests-Parser/XMLEncodingTest.class.st deleted file mode 100644 index 5a8027244..000000000 --- a/src/XML-Tests-Parser/XMLEncodingTest.class.st +++ /dev/null @@ -1,983 +0,0 @@ -Class { - #name : #XMLEncodingTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser' -} - -{ #category : #converting } -XMLEncodingTest >> asciiToUTF16BE: anASCIIString [ - ^ self - encodeString: anASCIIString - with: XMLUTF16BigEndianStreamConverter new -] - -{ #category : #converting } -XMLEncodingTest >> asciiToUTF16LE: anASCIIString [ - ^ self - encodeString: anASCIIString - with: XMLUTF16LittleEndianStreamConverter new -] - -{ #category : #converting } -XMLEncodingTest >> asciiToUTF32BE: anASCIIString [ - ^ self - encodeString: anASCIIString - with: XMLUTF32BigEndianStreamConverter new -] - -{ #category : #converting } -XMLEncodingTest >> asciiToUTF32LE: anASCIIString [ - ^ self - encodeString: anASCIIString - with: XMLUTF32LittleEndianStreamConverter new -] - -{ #category : #asserting } -XMLEncodingTest >> assertIsDecodedSourceXMLDocument: aDocument [ - self assert: (self isDecodedSourceXMLDocument: aDocument) -] - -{ #category : #converting } -XMLEncodingTest >> convertableStreamOn: aString [ - ^ XMLDecodingReadStreamAdapter nonDecodingOn: aString readStream -] - -{ #category : #asserting } -XMLEncodingTest >> denyIsDecodedSourceXMLDocument: aDocument [ - self deny: (self isDecodedSourceXMLDocument: aDocument) -] - -{ #category : #converting } -XMLEncodingTest >> encodeString: anASCIIString with: aStreamConverter [ - ^ (XMLEncodingWriteStreamAdapter - on: String new writeStream - streamConverter: aStreamConverter) - nextPutAll: anASCIIString; - contents -] - -{ #category : #source } -XMLEncodingTest >> encodingDeclaration: anEncoding [ - ^ '<?xml version="1.0" encoding="', anEncoding, '"?>' -] - -{ #category : #testing } -XMLEncodingTest >> isDecodedSourceXMLDocument: aDocument [ - aDocument nodes size = 1 - ifFalse: [^ false]. - (aDocument firstNode isElementNamed: 'encoding-test') - ifFalse: [^ false]. - aDocument firstNode nodes size = 1 - ifFalse: [^ false]. - ^ aDocument firstNode firstNode isStringNode: 'encoding test'. -] - -{ #category : #source } -XMLEncodingTest >> sourceContent [ - ^ 'encoding test' -] - -{ #category : #source } -XMLEncodingTest >> sourceXML [ - ^ self sourceXMLWithContent: self sourceContent -] - -{ #category : #source } -XMLEncodingTest >> sourceXMLWithContent: aCharacterOrString [ - ^ '<encoding-test>', aCharacterOrString asString, '</encoding-test>' -] - -{ #category : #source } -XMLEncodingTest >> sourceXMLWithEncoding: anEncoding andASCIIContentAsUTF16BE: anASCIIContentString [ - ^ ((self encodingDeclaration: anEncoding) allButLast: 2), - (self asciiToUTF16BE: '?>', anASCIIContentString) -] - -{ #category : #source } -XMLEncodingTest >> sourceXMLWithEncoding: anEncoding andASCIIContentAsUTF16LE: anASCIIContentString [ - ^ ((self encodingDeclaration: anEncoding) allButLast: 2), - (self asciiToUTF16LE: '?>', anASCIIContentString) -] - -{ #category : #source } -XMLEncodingTest >> sourceXMLWithEncoding: anEncoding andASCIIContentAsUTF32BE: anASCIIContentString [ - ^ ((self encodingDeclaration: anEncoding) allButLast: 2), - (self asciiToUTF32BE: '?>', anASCIIContentString) -] - -{ #category : #source } -XMLEncodingTest >> sourceXMLWithEncoding: anEncoding andASCIIContentAsUTF32LE: anASCIIContentString [ - ^ ((self encodingDeclaration: anEncoding) allButLast: 2), - (self asciiToUTF32LE: '?>', anASCIIContentString) -] - -{ #category : #converting } -XMLEncodingTest >> stringFrom: aCollection [ - ^ XMLStreamAdapterTest stringFrom: aCollection -] - -{ #category : #tests } -XMLEncodingTest >> testDecodingBinary [ - | source binarySource parser stream | - - source := self sourceXML. - binarySource := XMLStreamAdapterTest binaryFrom: source. - parser := (SAXHandler on: binarySource) parser. - stream := parser tokenizer streamReader stream. - self - assert: stream isXMLConvertingStreamAdapter; - assert: stream hasNullStreamConverter; - assert: stream upToEnd = source. -] - -{ #category : #tests } -XMLEncodingTest >> testDecodingCharacterReferences [ - | document | - - document := - XMLDOMParser parse: - (self sourceXMLWithContent: - (String streamContents: [:stream | - self sourceContent do: [:each | - stream - nextPutAll: '&#'; - nextPutAll: each asciiValue asString; - nextPut: $;]])). - self assert: document root contentString = self sourceContent. - - document := - XMLDOMParser parse: - (self sourceXMLWithContent: - (String streamContents: [:stream | - self sourceContent do: [:each | - stream - nextPutAll: '&#x'; - nextPutAll: each asciiValue printStringHex asLowercase; - nextPut: $;]])). - self assert: document root contentString = self sourceContent. - - document := - XMLDOMParser parse: - (self sourceXMLWithContent: - (String streamContents: [:stream | - self sourceContent do: [:each | - stream - nextPutAll: '&#x'; - nextPutAll: each asciiValue printStringHex asUppercase; - nextPut: $;]])). - self assert: document root contentString = self sourceContent. - - #('�' '�' '&#-1;' ' :;' 'ÿG;') do: [:each | - self - should: [XMLDOMParser parse: (self sourceXMLWithContent: each)] - raise: XMLWellFormednessException]. - - XMLCharacterMethodsTest nonChars do: [:each | - self - should: [ - XMLDOMParser parse: - (self sourceXMLWithContent: '&#', each asciiValue asString, ';')] - raise: XMLWellFormednessException]. -] - -{ #category : #tests } -XMLEncodingTest >> testEncodingDeclarationLatin1 [ - | xml | - - xml := self sourceXMLWithContent: (self stringFrom: #(126 127 128 255)). - self - should: [ - SAXHandler parse: - (self convertableStreamOn: - self utf8BOM, (self encodingDeclaration: 'UTF-8'), xml)] - raise: XMLEncodingException. - self - should: [ - SAXHandler parse: - (self convertableStreamOn: - self utf8BOM, (self encodingDeclaration: 'latin-1'), xml)] - raise: XMLEncodingException. - self - shouldnt: [ - SAXHandler parse: - (self convertableStreamOn: - (self encodingDeclaration: 'latin-1'), xml)] - raise: XMLEncodingException. -] - -{ #category : #tests } -XMLEncodingTest >> testEncodingDeclarationUTF16BE [ - | document | - - self - should: [ - SAXHandler parse: - (self convertableStreamOn: - (self encodingDeclaration: 'UTF-16-BE'), self sourceXML)] - raise: XMLParserException. - self - should: [ - SAXHandler parse: - (self convertableStreamOn: - (self - sourceXMLWithEncoding: 'UTF-16-BE' - andASCIIContentAsUTF16LE: self sourceXML))] - raise: XMLParserException. - self - should: [ - SAXHandler parse: - (self convertableStreamOn: - (self - sourceXMLWithEncoding: 'UTF-16-BE' - andASCIIContentAsUTF32BE: self sourceXML))] - raise: XMLParserException. - self - should: [ - SAXHandler parse: - (self convertableStreamOn: - (self - sourceXMLWithEncoding: 'UTF-16-BE' - andASCIIContentAsUTF32LE: self sourceXML))] - raise: XMLParserException. - - self - shouldnt: [ - document := - XMLDOMParser parse: - (self convertableStreamOn: - (self - sourceXMLWithEncoding: 'UTF-16-BE' - andASCIIContentAsUTF16BE: self sourceXML))] - raise: XMLParserException. - self assertIsDecodedSourceXMLDocument: document. - self - should: [ - (SAXHandler on: - (self convertableStreamOn: - (self - sourceXMLWithEncoding: 'UTF-16-BE' - andASCIIContentAsUTF16BE: self sourceXML))) - decodesCharacters: false; - parseDocument] - raise: XMLParserException. -] - -{ #category : #tests } -XMLEncodingTest >> testEncodingDeclarationUTF16LE [ - | document | - - self - should: [ - SAXHandler parse: - (self convertableStreamOn: - (self encodingDeclaration: 'UTF-16-LE'), self sourceXML)] - raise: XMLParserException. - self - should: [ - SAXHandler parse: - (self convertableStreamOn: - (self - sourceXMLWithEncoding: 'UTF-16-LE' - andASCIIContentAsUTF16BE: self sourceXML))] - raise: XMLParserException. - self - should: [ - SAXHandler parse: - (self convertableStreamOn: - (self - sourceXMLWithEncoding: 'UTF-16-LE' - andASCIIContentAsUTF32BE: self sourceXML))] - raise: XMLParserException. - self - should: [ - SAXHandler parse: - (self convertableStreamOn: - (self - sourceXMLWithEncoding: 'UTF-16-LE' - andASCIIContentAsUTF32LE: self sourceXML))] - raise: XMLParserException. - - self - shouldnt: [ - document := - XMLDOMParser parse: - (self convertableStreamOn: - (self - sourceXMLWithEncoding: 'UTF-16-LE' - andASCIIContentAsUTF16LE: self sourceXML))] - raise: XMLParserException. - self assertIsDecodedSourceXMLDocument: document. - self - should: [ - (SAXHandler on: - (self convertableStreamOn: - (self - sourceXMLWithEncoding: 'UTF-16-LE' - andASCIIContentAsUTF16LE: self sourceXML))) - decodesCharacters: false; - parseDocument] - raise: XMLParserException. -] - -{ #category : #tests } -XMLEncodingTest >> testEncodingDeclarationUTF32BE [ - | document | - - self - should: [ - SAXHandler parse: - (self convertableStreamOn: - (self encodingDeclaration: 'UTF-32-BE'), self sourceXML)] - raise: XMLParserException. - self - should: [ - SAXHandler parse: - (self convertableStreamOn: - (self - sourceXMLWithEncoding: 'UTF-32-BE' - andASCIIContentAsUTF16BE: self sourceXML))] - raise: XMLParserException. - self - should: [ - SAXHandler parse: - (self convertableStreamOn: - (self - sourceXMLWithEncoding: 'UTF-32-BE' - andASCIIContentAsUTF16LE: self sourceXML))] - raise: XMLParserException. - self - should: [ - SAXHandler parse: - (self convertableStreamOn: - (self - sourceXMLWithEncoding: 'UTF-32-BE' - andASCIIContentAsUTF32LE: self sourceXML))] - raise: XMLParserException. - - self - shouldnt: [ - document := - XMLDOMParser parse: - (self convertableStreamOn: - (self - sourceXMLWithEncoding: 'UTF-32-BE' - andASCIIContentAsUTF32BE: self sourceXML))] - raise: XMLParserException. - self assertIsDecodedSourceXMLDocument: document. - self - should: [ - (SAXHandler on: - (self convertableStreamOn: - (self - sourceXMLWithEncoding: 'UTF-32-BE' - andASCIIContentAsUTF32BE: self sourceXML))) - decodesCharacters: false; - parseDocument] - raise: XMLParserException. -] - -{ #category : #tests } -XMLEncodingTest >> testEncodingDeclarationUTF32LE [ - | document | - - self - should: [ - SAXHandler parse: - (self convertableStreamOn: - (self encodingDeclaration: 'UTF-32-LE'), self sourceXML)] - raise: XMLParserException. - self - should: [ - SAXHandler parse: - (self convertableStreamOn: - (self - sourceXMLWithEncoding: 'UTF-32-LE' - andASCIIContentAsUTF16BE: self sourceXML))] - raise: XMLParserException. - self - should: [ - SAXHandler parse: - (self convertableStreamOn: - (self - sourceXMLWithEncoding: 'UTF-32-LE' - andASCIIContentAsUTF16LE: self sourceXML))] - raise: XMLParserException. - self - should: [ - SAXHandler parse: - (self convertableStreamOn: - (self - sourceXMLWithEncoding: 'UTF-32-LE' - andASCIIContentAsUTF32BE: self sourceXML))] - raise: XMLParserException. - - self - shouldnt: [ - document := - XMLDOMParser parse: - (self convertableStreamOn: - (self - sourceXMLWithEncoding: 'UTF-32-LE' - andASCIIContentAsUTF32LE: self sourceXML))] - raise: XMLParserException. - self assertIsDecodedSourceXMLDocument: document. - self - should: [ - (SAXHandler on: - (self convertableStreamOn: - (self - sourceXMLWithEncoding: 'UTF-32-LE' - andASCIIContentAsUTF32LE: self sourceXML))) - decodesCharacters: false; - parseDocument] - raise: XMLParserException. -] - -{ #category : #tests } -XMLEncodingTest >> testEncodingDeclarationUTF8 [ - | document | - - self - should: [ - SAXHandler parse: - (self convertableStreamOn: - (self - sourceXMLWithEncoding: 'UTF-8' - andASCIIContentAsUTF16BE: self sourceXML))] - raise: XMLParserException. - self - should: [ - SAXHandler parse: - (self convertableStreamOn: - (self - sourceXMLWithEncoding: 'UTF-8' - andASCIIContentAsUTF16LE: self sourceXML))] - raise: XMLParserException. - self - should: [ - SAXHandler parse: - (self convertableStreamOn: - (self - sourceXMLWithEncoding: 'UTF-8' - andASCIIContentAsUTF32BE: self sourceXML))] - raise: XMLParserException. - self - should: [ - SAXHandler parse: - (self convertableStreamOn: - (self - sourceXMLWithEncoding: 'UTF-8' - andASCIIContentAsUTF32LE: self sourceXML))] - raise: XMLParserException. - - self - shouldnt: [ - document := - XMLDOMParser parse: - (self convertableStreamOn: - (self encodingDeclaration: 'UTF-8'), self sourceXML)] - raise: XMLParserException. - self assertIsDecodedSourceXMLDocument: document. -] - -{ #category : #tests } -XMLEncodingTest >> testExternalEntityByteOrderMarkDetection [ - | content entity | - - content := - '<!DOCTYPE encoding-test [ - <!ENTITY external SYSTEM "extern.ent"> - ]>', (self sourceXMLWithContent: '&external;'). - entity := self sourceContent. - (Array - with: self utf8BOM, entity - with: self utf16BigEndianBOM, (self asciiToUTF16BE: entity) - with: self utf16LittleEndianBOM, (self asciiToUTF16LE: entity) - with: self utf32BigEndianBOM, (self asciiToUTF32BE: entity) - with: self utf32LittleEndianBOM, (self asciiToUTF32LE: entity)) - do: [:each | | resolver document | - (resolver := DTDStaticExternalEntityResolver new) - externalEntityAtURI: 'extern.ent' - put: each. - self - shouldnt: [ - document := - (XMLDOMParser on: content) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLParserException. - self assertIsDecodedSourceXMLDocument: document]. -] - -{ #category : #tests } -XMLEncodingTest >> testExternalEntityImplicitEncodingDetection [ - | content entity | - - content := - '<!DOCTYPE encoding-test [ - <!ENTITY external SYSTEM "extern.ent"> - ]>', (self sourceXMLWithContent: '&external;'). - entity := self sourceContent. - (Array - with: (self asciiToUTF16BE: entity) - with: (self asciiToUTF16LE: entity) - with: (self asciiToUTF32BE: entity) - with: (self asciiToUTF32LE: entity)) - do: [:each | | resolver document | - (resolver := DTDStaticExternalEntityResolver new) - externalEntityAtURI: 'extern.ent' - put: each. - self - shouldnt: [ - document := - (XMLDOMParser on: content) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLParserException. - self assertIsDecodedSourceXMLDocument: document. - self - should: [ - (SAXHandler on: content) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - decodesCharacters: false; - parseDocument] - raise: XMLParserException]. -] - -{ #category : #tests } -XMLEncodingTest >> testExternalEntityTextDeclaration [ - | content entity | - - content := - '<!DOCTYPE encoding-test [ - <!ENTITY external SYSTEM "extern.ent"> - ]>', (self sourceXMLWithContent: '&external;'). - entity := self sourceContent. - (Array - with: - (self - sourceXMLWithEncoding: 'UTF-16-BE' - andASCIIContentAsUTF16BE: entity) - with: - (self - sourceXMLWithEncoding: 'UTF-16-LE' - andASCIIContentAsUTF16LE: entity) - with: - (self - sourceXMLWithEncoding: 'UTF-32-BE' - andASCIIContentAsUTF32BE: entity) - with: - (self - sourceXMLWithEncoding: 'UTF-32-LE' - andASCIIContentAsUTF32LE: entity)) - do: [:each | | resolver document | - (resolver := DTDStaticExternalEntityResolver new) - externalEntityAtURI: 'extern.ent' - put: each. - self - shouldnt: [ - document := - (XMLDOMParser on: content) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLParserException. - self assertIsDecodedSourceXMLDocument: document. - self - should: [ - (SAXHandler on: content) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - decodesCharacters: false; - parseDocument] - raise: XMLParserException]. -] - -{ #category : #tests } -XMLEncodingTest >> testExternalSubsetByteOrderMarkDetection [ - | content subset | - - content := - '<!DOCTYPE encoding-test SYSTEM "extern.dtd">', - (self sourceXMLWithContent: '&external;'). - subset := '<!ENTITY external "', self sourceContent, '">'. - (Array - with: self utf8BOM, subset - with: self utf16BigEndianBOM, (self asciiToUTF16BE: subset) - with: self utf16LittleEndianBOM, (self asciiToUTF16LE: subset) - with: self utf32BigEndianBOM, (self asciiToUTF32BE: subset) - with: self utf32LittleEndianBOM, (self asciiToUTF32LE: subset)) - do: [:each | | resolver document | - (resolver := DTDStaticExternalEntityResolver new) - externalEntityAtURI: 'extern.dtd' - put: each. - self - shouldnt: [ - document := - (XMLDOMParser on: content) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLParserException. - self assertIsDecodedSourceXMLDocument: document]. -] - -{ #category : #tests } -XMLEncodingTest >> testExternalSubsetImplicitEncodingDetection [ - | content subset | - - content := - '<!DOCTYPE encoding-test SYSTEM "extern.dtd">', - (self sourceXMLWithContent: '&external;'). - subset := '<!ENTITY external "', self sourceContent, '">'. - (Array - with: (self asciiToUTF16BE: subset) - with: (self asciiToUTF16LE: subset) - with: (self asciiToUTF32BE: subset) - with: (self asciiToUTF32LE: subset)) - do: [:each | | resolver document | - (resolver := DTDStaticExternalEntityResolver new) - externalEntityAtURI: 'extern.dtd' - put: each. - self - shouldnt: [ - document := - (XMLDOMParser on: content) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLParserException. - self assertIsDecodedSourceXMLDocument: document. - self - should: [ - (SAXHandler on: content) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - decodesCharacters: false; - parseDocument] - raise: XMLParserException]. -] - -{ #category : #tests } -XMLEncodingTest >> testExternalSubsetTextDeclaration [ - | content subset | - - content := - '<!DOCTYPE encoding-test SYSTEM "extern.dtd">', - (self sourceXMLWithContent: '&external;'). - subset := '<!ENTITY external "', self sourceContent, '">'. - (Array - with: - (self - sourceXMLWithEncoding: 'UTF-16-BE' - andASCIIContentAsUTF16BE: subset) - with: - (self - sourceXMLWithEncoding: 'UTF-16-LE' - andASCIIContentAsUTF16LE: subset) - with: - (self - sourceXMLWithEncoding: 'UTF-32-BE' - andASCIIContentAsUTF32BE: subset) - with: - (self - sourceXMLWithEncoding: 'UTF-32-LE' - andASCIIContentAsUTF32LE: subset)) - do: [:each | | resolver document | - (resolver := DTDStaticExternalEntityResolver new) - externalEntityAtURI: 'extern.dtd' - put: each. - self - shouldnt: [ - document := - (XMLDOMParser on: content) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLParserException. - self assertIsDecodedSourceXMLDocument: document. - self - should: [ - (SAXHandler on: content) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - decodesCharacters: false; - parseDocument] - raise: XMLParserException]. -] - -{ #category : #tests } -XMLEncodingTest >> testImplicitUTF16BigEndianEncodingDetection [ - | document | - - self - shouldnt: [ - document := - XMLDOMParser parse: - (self convertableStreamOn: - (self asciiToUTF16BE: self sourceXML))] - raise: XMLParserException. - self assertIsDecodedSourceXMLDocument: document. - self - should: [ - (SAXHandler on: - (self convertableStreamOn: - (self asciiToUTF16BE: self sourceXML))) - decodesCharacters: false; - parseDocument] - raise: XMLParserException. -] - -{ #category : #tests } -XMLEncodingTest >> testImplicitUTF16LittleEndianEncodingDetection [ - | document | - - self - shouldnt: [ - document := - XMLDOMParser parse: - (self convertableStreamOn: - (self asciiToUTF16LE: self sourceXML))] - raise: XMLParserException. - self assertIsDecodedSourceXMLDocument: document. - self - should: [ - (SAXHandler on: - (self convertableStreamOn: - (self asciiToUTF16LE: self sourceXML))) - decodesCharacters: false; - parseDocument] - raise: XMLParserException. -] - -{ #category : #tests } -XMLEncodingTest >> testImplicitUTF32BigEndianEncodingDetection [ - | document | - - self - shouldnt: [ - document := - XMLDOMParser parse: - (self convertableStreamOn: - (self asciiToUTF32BE: self sourceXML))] - raise: XMLParserException. - self assertIsDecodedSourceXMLDocument: document. - self - should: [ - (SAXHandler on: - (self convertableStreamOn: - (self asciiToUTF32BE: self sourceXML))) - decodesCharacters: false; - parseDocument] - raise: XMLParserException. -] - -{ #category : #tests } -XMLEncodingTest >> testImplicitUTF32LittleEndianEncodingDetection [ - | document | - - self - shouldnt: [ - document := - XMLDOMParser parse: - (self convertableStreamOn: - (self asciiToUTF32LE: self sourceXML))] - raise: XMLParserException. - self assertIsDecodedSourceXMLDocument: document. - self - should: [ - (SAXHandler on: - (self convertableStreamOn: - (self asciiToUTF32LE: self sourceXML))) - decodesCharacters: false; - parseDocument] - raise: XMLParserException. -] - -{ #category : #tests } -XMLEncodingTest >> testUTF16BigEndianByteOrderMarkDetection [ - | document | - - self - should: [ - SAXHandler parse: - self utf16BigEndianBOM, self sourceXML] - raise: XMLParserException. - self - should: [ - SAXHandler parse: - self utf16BigEndianBOM, (self asciiToUTF16LE: self sourceXML)] - raise: XMLParserException. - self - should: [ - SAXHandler parse: - self utf16BigEndianBOM, (self asciiToUTF32BE: self sourceXML)] - raise: XMLParserException. - self - should: [ - SAXHandler parse: - self utf16BigEndianBOM, (self asciiToUTF32LE: self sourceXML)] - raise: XMLParserException. - self - shouldnt: [ - document := - XMLDOMParser parse: - self utf16BigEndianBOM, (self asciiToUTF16BE: self sourceXML)] - raise: XMLParserException. - self assertIsDecodedSourceXMLDocument: document. - self - should: [ - (SAXHandler on: - self utf16BigEndianBOM, (self asciiToUTF16BE: self sourceXML)) - decodesCharacters: false; - parseDocument] - raise: XMLParserException. -] - -{ #category : #tests } -XMLEncodingTest >> testUTF16LittleEndianByteOrderMarkDetection [ - | document | - - self - should: [ - SAXHandler parse: - self utf16LittleEndianBOM, self sourceXML] - raise: XMLParserException. - self - should: [ - SAXHandler parse: - self utf16LittleEndianBOM, (self asciiToUTF16BE: self sourceXML)] - raise: XMLParserException. - self - should: [ - SAXHandler parse: - self utf16LittleEndianBOM, (self asciiToUTF32BE: self sourceXML)] - raise: XMLParserException. - self - should: [ - SAXHandler parse: - self utf16LittleEndianBOM, (self asciiToUTF32LE: self sourceXML)] - raise: XMLParserException. - self - shouldnt: [ - document := - XMLDOMParser parse: - self utf16LittleEndianBOM, (self asciiToUTF16LE: self sourceXML)] - raise: XMLParserException. - self assertIsDecodedSourceXMLDocument: document. - self - should: [ - (SAXHandler on: - self utf16LittleEndianBOM, (self asciiToUTF16LE: self sourceXML)) - decodesCharacters: false; - parseDocument] - raise: XMLParserException. -] - -{ #category : #tests } -XMLEncodingTest >> testUTF8ByteOrderMarkDetection [ - | document | - - self - should: [ - SAXHandler parse: - self utf8BOM, (self asciiToUTF16BE: self sourceXML)] - raise: XMLParserException. - self - should: [ - SAXHandler parse: - self utf8BOM, (self asciiToUTF16LE: self sourceXML)] - raise: XMLParserException. - self - should: [ - SAXHandler parse: - self utf8BOM, (self asciiToUTF32BE: self sourceXML)] - raise: XMLParserException. - self - should: [ - SAXHandler parse: - self utf8BOM, (self asciiToUTF32LE: self sourceXML)] - raise: XMLParserException. - self - shouldnt: [ - document := - XMLDOMParser parse: - self utf8BOM, self sourceXML] - raise: XMLParserException. - self assertIsDecodedSourceXMLDocument: document. - self - should: [ - (SAXHandler on: - self utf8BOM, self sourceXML) - decodesCharacters: false; - parseDocument] - raise: XMLParserException. -] - -{ #category : #tests } -XMLEncodingTest >> testWideCharacterNames [ - | wideNames document | - - (wideNames := OrderedCollection new) - addLast: (self stringFrom: #(16rC0 16rD6 16rD8 16rF6 16rF8 16r2FF $- $.)); - addLast: (self stringFrom: #(16r370 16r37D 16r37F 16r1FFF 16r200C $0 $9)); - addLast: (self stringFrom: #(16r200D 16r2070 16r218F 16r2C00 16r2FEF 16rB7)); - addLast: (self stringFrom: #(16r3001 16rD7FF 16rF900 16rFDCF 16rFDF0 16r0300)); - addLast: (self stringFrom: #(16rFFFD 16r10000 16rEFFFF 16r036F 16r203F 16r2040)). - - self - shouldnt: [| source | - source := - '<!DOCTYPE {1} [ - <!ELEMENT {1} ({2}, {3}, {4})> - <!ELEMENT {2} EMPTY> - <!ELEMENT {3} (#PCDATA)*> - <!ELEMENT {4} EMPTY> - <!ATTLIST {1} {5} ({3} | {4} | {5}) #IMPLIED> - ]> - <{1} {5}="{4}"> - <{2}/> - <{3}>{5}</{3}> - <{4}/> - </{1}>' format: wideNames. - - "a char-wise copy of source is parsed because wide chars aren't immediate - types in pre-Spur Pharo/Squeak, so this can catch improper use of == on - wide chars in those images" - document := XMLDOMParser parse: (source collect: [:each | each copy])] - raise: XMLParserException. - - self - assert: document root name = wideNames first; - assert: (document root attributeAt: wideNames fifth) = wideNames fourth; - assert: (document root elementNames) asOrderedCollection = (wideNames copyFrom: 2 to: 4); - assert: document contentString = wideNames fifth. -] - -{ #category : #accessing } -XMLEncodingTest >> utf16BigEndianBOM [ - ^ XMLUTF16BigEndianStreamConverter byteOrderMark -] - -{ #category : #accessing } -XMLEncodingTest >> utf16LittleEndianBOM [ - ^ XMLUTF16LittleEndianStreamConverter byteOrderMark -] - -{ #category : #accessing } -XMLEncodingTest >> utf32BigEndianBOM [ - ^ XMLUTF32BigEndianStreamConverter byteOrderMark -] - -{ #category : #accessing } -XMLEncodingTest >> utf32LittleEndianBOM [ - ^ XMLUTF32LittleEndianStreamConverter byteOrderMark -] - -{ #category : #accessing } -XMLEncodingTest >> utf8BOM [ - ^ XMLUTF8StreamConverter byteOrderMark -] diff --git a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterASCIIStringTest.class.st b/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterASCIIStringTest.class.st deleted file mode 100644 index 84f953fe9..000000000 --- a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterASCIIStringTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLEncodingWriteStreamAdapterASCIIStringTest, - #superclass : #XMLEncodingWriteStreamAdapterASCIITest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLEncodingWriteStreamAdapterASCIIStringTest >> expectsBinaryOutput [ - ^ false -] diff --git a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterASCIITest.class.st b/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterASCIITest.class.st deleted file mode 100644 index 68dc1e920..000000000 --- a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterASCIITest.class.st +++ /dev/null @@ -1,27 +0,0 @@ -Class { - #name : #XMLEncodingWriteStreamAdapterASCIITest, - #superclass : #XMLEncodingWriteStreamAdapterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterASCIITest >> basicInputCollection [ - ^ self decodedASCIIString -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterASCIITest >> basicInvalidInputCollections [ - ^ self basicInvalidLatin1InputCollections, - ((16r80 to: 16rFF) asArray collect: [:each | - String with: each asCharacter]) -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterASCIITest >> basicOutputCollection [ - ^ self encodedASCIIBinary -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterASCIITest >> streamConverterClass [ - ^ XMLASCIIStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterLatin1StringTest.class.st b/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterLatin1StringTest.class.st deleted file mode 100644 index 9fb7375ae..000000000 --- a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterLatin1StringTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLEncodingWriteStreamAdapterLatin1StringTest, - #superclass : #XMLEncodingWriteStreamAdapterLatin1Test, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLEncodingWriteStreamAdapterLatin1StringTest >> expectsBinaryOutput [ - ^ false -] diff --git a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterLatin1Test.class.st b/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterLatin1Test.class.st deleted file mode 100644 index 09e358428..000000000 --- a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterLatin1Test.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #XMLEncodingWriteStreamAdapterLatin1Test, - #superclass : #XMLEncodingWriteStreamAdapterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterLatin1Test >> basicInputCollection [ - ^ self decodedLatin1String -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterLatin1Test >> basicInvalidInputCollections [ - ^ self basicInvalidLatin1InputCollections -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterLatin1Test >> basicOutputCollection [ - ^ self encodedLatin1Binary -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterLatin1Test >> streamConverterClass [ - ^ XMLLatin1StreamConverter -] diff --git a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterTest.class.st b/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterTest.class.st deleted file mode 100644 index 7234649ca..000000000 --- a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterTest.class.st +++ /dev/null @@ -1,160 +0,0 @@ -Class { - #name : #XMLEncodingWriteStreamAdapterTest, - #superclass : #XMLWriteStreamAdapterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterTest >> basicInvalidInputCollections [ - ^ #() -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterTest >> basicInvalidLatin1InputCollections [ - ^ self basicInvalidUTFInputCollections, - (Array - with: (String with: 16r000100 asCharacter) - with: (String with: 16r001000 asCharacter) - with: (String with: 16r010000 asCharacter) - with: (String with: 16r100000 asCharacter)) -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterTest >> basicInvalidUTFInputCollections [ - "code points greater than U+10FFFF aren't tested for because GS Characters - can only contain values in the range of U+0-10FFFF" - ^ Array - with: (String with: 16rD800 asCharacter) "first surrogate code point" - with: (String with: 16rDFFF asCharacter) "last surrogate code point" -] - -{ #category : #converting } -XMLEncodingWriteStreamAdapterTest >> contentsFromByteOrderMark [ - ^ self asExpectedOutput: self streamConverterClass byteOrderMarkBytes -] - -{ #category : #converting } -XMLEncodingWriteStreamAdapterTest >> contentsFromCharacter: aCharacter [ - ^ self asExpectedOutput: - (ByteArray streamContents: [:stream | - self streamConverterClass new - nextPut: aCharacter - toStream: stream]) -] - -{ #category : #testing } -XMLEncodingWriteStreamAdapterTest >> expectsBinaryOutput [ - ^ true -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterTest >> invalidInputCollections [ - ^ self basicInvalidInputCollections collect: [:each | - self asExpectedInput: each] -] - -{ #category : #'instance creation' } -XMLEncodingWriteStreamAdapterTest >> newStreamAdapterOn: aStream [ - ^ (super newStreamAdapterOn: aStream) - streamConverter: self streamConverterClass new -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterTest >> streamAdapterClass [ - ^ XMLEncodingWriteStreamAdapter -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterTest >> streamCollection [ - ^ self expectsBinaryOutput - ifTrue: [ByteArray new] - ifFalse: [String new] -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterTest >> streamConverterClass [ - ^ XMLNullStreamConverter -] - -{ #category : #tests } -XMLEncodingWriteStreamAdapterTest >> testHasDefaultStreamConverter [ - | adapter | - - adapter := self newStreamAdapter. - self assert: - adapter hasDefaultStreamConverter = adapter streamConverter isDefault. -] - -{ #category : #tests } -XMLEncodingWriteStreamAdapterTest >> testHasImplicitStreamConverter [ - | adapter | - - adapter := self newStreamAdapter. - self assert: - adapter hasImplicitStreamConverter = adapter streamConverter isImplicit. -] - -{ #category : #tests } -XMLEncodingWriteStreamAdapterTest >> testHasNullStreamConverter [ - | adapter | - - adapter := self newStreamAdapter. - self assert: adapter hasNullStreamConverter = adapter streamConverter isNull. -] - -{ #category : #tests } -XMLEncodingWriteStreamAdapterTest >> testInvalidCharacters [ - self invalidInputCollections do: [:each | | streamAdapter | - streamAdapter := self newStreamAdapter. - self - should: [streamAdapter nextPutAll: each] - raise: XMLEncodingException]. -] - -{ #category : #tests } -XMLEncodingWriteStreamAdapterTest >> testIsXMLConvertingStreamAdapter [ - self assert: self newStreamAdapter isXMLConvertingStreamAdapter -] - -{ #category : #tests } -XMLEncodingWriteStreamAdapterTest >> testNextPutByteOrderMark [ - | adapter | - - adapter := self newStreamAdapter. - self - assert: adapter nextPutByteOrderMark == adapter; - assert: adapter contents = self contentsFromByteOrderMark. -] - -{ #category : #tests } -XMLEncodingWriteStreamAdapterTest >> testOn [ - | stream adapter | - - stream := self newStream. - adapter := self newStreamAdapterOn: stream. - self - assert: adapter class == self streamAdapterClass; - assert: - (self expectsBinaryOutput - ifTrue: [adapter stream == stream] - ifFalse: [adapter stream stream == stream]). -] - -{ #category : #tests } -XMLEncodingWriteStreamAdapterTest >> testStreamConverter [ - | adapter newConverter | - - adapter := self newStreamAdapter. - self - deny: adapter streamConverter isNil; - assert: adapter streamConverter class == self streamConverterClass. - - newConverter := self streamConverterClass new. - self - assert: (adapter streamConverter: newConverter) == adapter; - assert: adapter streamConverter == newConverter. - - self - assert: (adapter streamConverter: nil) == adapter; - assert: adapter streamConverter class == XMLNullStreamConverter. -] diff --git a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF16BEStringTest.class.st b/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF16BEStringTest.class.st deleted file mode 100644 index 475bccbd9..000000000 --- a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF16BEStringTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLEncodingWriteStreamAdapterUTF16BEStringTest, - #superclass : #XMLEncodingWriteStreamAdapterUTF16BETest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLEncodingWriteStreamAdapterUTF16BEStringTest >> expectsBinaryOutput [ - ^ false -] diff --git a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF16BETest.class.st b/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF16BETest.class.st deleted file mode 100644 index 55ee676c0..000000000 --- a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF16BETest.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #XMLEncodingWriteStreamAdapterUTF16BETest, - #superclass : #XMLEncodingWriteStreamAdapterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterUTF16BETest >> basicInputCollection [ - ^ self decodedUTF16String -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterUTF16BETest >> basicInvalidInputCollections [ - ^ self basicInvalidUTFInputCollections -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterUTF16BETest >> basicOutputCollection [ - ^ self encodedUTF16BEBinary -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterUTF16BETest >> streamConverterClass [ - ^ XMLUTF16BigEndianStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF16LEStringTest.class.st b/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF16LEStringTest.class.st deleted file mode 100644 index 33dfd3915..000000000 --- a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF16LEStringTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLEncodingWriteStreamAdapterUTF16LEStringTest, - #superclass : #XMLEncodingWriteStreamAdapterUTF16LETest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLEncodingWriteStreamAdapterUTF16LEStringTest >> expectsBinaryOutput [ - ^ false -] diff --git a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF16LETest.class.st b/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF16LETest.class.st deleted file mode 100644 index cd1eb5f73..000000000 --- a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF16LETest.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #XMLEncodingWriteStreamAdapterUTF16LETest, - #superclass : #XMLEncodingWriteStreamAdapterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterUTF16LETest >> basicInputCollection [ - ^ self decodedUTF16String -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterUTF16LETest >> basicInvalidInputCollections [ - ^ self basicInvalidUTFInputCollections -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterUTF16LETest >> basicOutputCollection [ - ^ self encodedUTF16LEBinary -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterUTF16LETest >> streamConverterClass [ - ^ XMLUTF16LittleEndianStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF32BEStringTest.class.st b/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF32BEStringTest.class.st deleted file mode 100644 index bc4378e84..000000000 --- a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF32BEStringTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLEncodingWriteStreamAdapterUTF32BEStringTest, - #superclass : #XMLEncodingWriteStreamAdapterUTF32BETest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLEncodingWriteStreamAdapterUTF32BEStringTest >> expectsBinaryOutput [ - ^ false -] diff --git a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF32BETest.class.st b/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF32BETest.class.st deleted file mode 100644 index 77e4130b2..000000000 --- a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF32BETest.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #XMLEncodingWriteStreamAdapterUTF32BETest, - #superclass : #XMLEncodingWriteStreamAdapterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterUTF32BETest >> basicInputCollection [ - ^ self decodedUTF32String -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterUTF32BETest >> basicInvalidInputCollections [ - ^ self basicInvalidUTFInputCollections -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterUTF32BETest >> basicOutputCollection [ - ^ self encodedUTF32BEBinary -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterUTF32BETest >> streamConverterClass [ - ^ XMLUTF32BigEndianStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF32LEStringTest.class.st b/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF32LEStringTest.class.st deleted file mode 100644 index b40ac3508..000000000 --- a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF32LEStringTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLEncodingWriteStreamAdapterUTF32LEStringTest, - #superclass : #XMLEncodingWriteStreamAdapterUTF32LETest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLEncodingWriteStreamAdapterUTF32LEStringTest >> expectsBinaryOutput [ - ^ false -] diff --git a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF32LETest.class.st b/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF32LETest.class.st deleted file mode 100644 index 4bddf47d6..000000000 --- a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF32LETest.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #XMLEncodingWriteStreamAdapterUTF32LETest, - #superclass : #XMLEncodingWriteStreamAdapterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterUTF32LETest >> basicInputCollection [ - ^ self decodedUTF32String -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterUTF32LETest >> basicInvalidInputCollections [ - ^ self basicInvalidUTFInputCollections -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterUTF32LETest >> basicOutputCollection [ - ^ self encodedUTF32LEBinary -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterUTF32LETest >> streamConverterClass [ - ^ XMLUTF32LittleEndianStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF8StringTest.class.st b/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF8StringTest.class.st deleted file mode 100644 index dfbc94621..000000000 --- a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF8StringTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLEncodingWriteStreamAdapterUTF8StringTest, - #superclass : #XMLEncodingWriteStreamAdapterUTF8Test, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLEncodingWriteStreamAdapterUTF8StringTest >> expectsBinaryOutput [ - ^ false -] diff --git a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF8Test.class.st b/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF8Test.class.st deleted file mode 100644 index c04f1b61b..000000000 --- a/src/XML-Tests-Parser/XMLEncodingWriteStreamAdapterUTF8Test.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #XMLEncodingWriteStreamAdapterUTF8Test, - #superclass : #XMLEncodingWriteStreamAdapterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterUTF8Test >> basicInputCollection [ - ^ self decodedUTF8String -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterUTF8Test >> basicInvalidInputCollections [ - ^ self basicInvalidUTFInputCollections -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterUTF8Test >> basicOutputCollection [ - ^ self encodedUTF8Binary -] - -{ #category : #accessing } -XMLEncodingWriteStreamAdapterUTF8Test >> streamConverterClass [ - ^ XMLUTF8StreamConverter -] diff --git a/src/XML-Tests-Parser/XMLEntityDeclarationTest.class.st b/src/XML-Tests-Parser/XMLEntityDeclarationTest.class.st deleted file mode 100644 index 100a1317c..000000000 --- a/src/XML-Tests-Parser/XMLEntityDeclarationTest.class.st +++ /dev/null @@ -1,117 +0,0 @@ -" -Abstract, do not run. -" -Class { - #name : #XMLEntityDeclarationTest, - #superclass : #XMLDeclarationNodeTest, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #accessing } -XMLEntityDeclarationTest >> nodeClass [ - ^ XMLEntityDeclaration -] - -{ #category : #tests } -XMLEntityDeclarationTest >> testIsExternal [ - | declaration | - - declaration := self newNode. - self deny: declaration isExternal. - - declaration systemID: 'test'. - self assert: declaration isExternal. - - declaration publicID: 'test'. - self assert: declaration isExternal. - - declaration systemID: ''. - self assert: declaration isExternal. - - declaration publicID: ''. - self deny: declaration isExternal. -] - -{ #category : #tests } -XMLEntityDeclarationTest >> testIsParameter [ - self deny: self newNode isParameter -] - -{ #category : #tests } -XMLEntityDeclarationTest >> testIsUnparsed [ - self deny: self newNode isUnparsed -] - -{ #category : #tests } -XMLEntityDeclarationTest >> testName [ - | declaration | - - declaration := self newNode. - self - assert: declaration name = ''; - assert: (declaration name: 'test') == declaration; - assert: declaration name = 'test'. -] - -{ #category : #tests } -XMLEntityDeclarationTest >> testNamePublicIDSystemID [ - | declaration | - - declaration := - self nodeClass - name: 'one' - publicID: 'two' - systemID: 'three'. - self - assert: declaration class == self nodeClass; - assert: declaration name = 'one'; - assert: declaration publicID = 'two'; - assert: declaration systemID = 'three'. -] - -{ #category : #tests } -XMLEntityDeclarationTest >> testNameReplacement [ - | declaration | - - declaration := - self nodeClass - name: 'one' - replacement: 'two'. - self - assert: declaration class == self nodeClass; - assert: declaration name = 'one'; - assert: declaration replacement = 'two'. -] - -{ #category : #tests } -XMLEntityDeclarationTest >> testPublicID [ - | declaration | - - declaration := self newNode. - self - assert: declaration publicID = ''; - assert: (declaration publicID: 'test') == declaration; - assert: declaration publicID = 'test'. -] - -{ #category : #tests } -XMLEntityDeclarationTest >> testReplacement [ - | declaration | - - declaration := self newNode. - self - assert: declaration replacement = ''; - assert: (declaration replacement: 'test') == declaration; - assert: declaration replacement = 'test'. -] - -{ #category : #tests } -XMLEntityDeclarationTest >> testSystemID [ - | declaration | - - declaration := self newNode. - self - assert: declaration systemID = ''; - assert: (declaration systemID: 'test') == declaration; - assert: declaration systemID = 'test'. -] diff --git a/src/XML-Tests-Parser/XMLExceptionRaisingReadStream.class.st b/src/XML-Tests-Parser/XMLExceptionRaisingReadStream.class.st deleted file mode 100644 index f5a7257a4..000000000 --- a/src/XML-Tests-Parser/XMLExceptionRaisingReadStream.class.st +++ /dev/null @@ -1,102 +0,0 @@ -" -This is a read stream that raises errors if sent peek or next when atEnd, which streams on other platforms disallow, or if sent close multiple times or if sent atEnd, next, or peek when closed, which StandardFileStream disallows . Used to test portability. -" -Class { - #name : #XMLExceptionRaisingReadStream, - #superclass : #XMLAbstractReadStream, - #instVars : [ - 'stream', - 'wasClosed' - ], - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLExceptionRaisingReadStream >> atEnd [ - wasClosed - ifTrue: [self errorClosedStreamCannotBeSent: #atEnd]. - ^ stream atEnd -] - -{ #category : #closing } -XMLExceptionRaisingReadStream >> close [ - wasClosed - ifTrue: [self errorClosedStreamCannotBeSent: #close]. - - "must use respondsTo: to support streams only implementing the basic - protocol" - (stream respondsTo: #close) - ifTrue: [stream close]. - wasClosed := true. -] - -{ #category : #accessing } -XMLExceptionRaisingReadStream >> contents [ - stream atEnd - ifTrue: [self errorAtEndStreamCannotBeSent: #contents]. - ^ stream contents. -] - -{ #category : #private } -XMLExceptionRaisingReadStream >> errorAtEndStreamCannotBeSent: aSelector [ - Error signal: - 'Cannot send ', aSelector printString, ' on this stream when it''s atEnd' -] - -{ #category : #private } -XMLExceptionRaisingReadStream >> errorClosedStreamCannotBeSent: aSelector [ - Error signal: - 'Cannot send ', aSelector printString, ' on this stream when closed' -] - -{ #category : #testing } -XMLExceptionRaisingReadStream >> isBinary [ - ^ (stream respondsTo: #isBinary) - and: [stream isBinary] -] - -{ #category : #accessing } -XMLExceptionRaisingReadStream >> next [ - stream atEnd - ifTrue: [self errorAtEndStreamCannotBeSent: #next]. - ^ stream next. -] - -{ #category : #initialization } -XMLExceptionRaisingReadStream >> on: aCollection [ - stream := aCollection readStream. - wasClosed := false. -] - -{ #category : #accessing } -XMLExceptionRaisingReadStream >> peek [ - stream atEnd - ifTrue: [self errorAtEndStreamCannotBeSent: #peek]. - ^ stream peek. -] - -{ #category : #positioning } -XMLExceptionRaisingReadStream >> position [ - wasClosed - ifTrue: [self errorClosedStreamCannotBeSent: #position]. - ^ stream position -] - -{ #category : #positioning } -XMLExceptionRaisingReadStream >> position: anInteger [ - wasClosed - ifTrue: [self errorClosedStreamCannotBeSent: #position:]. - stream position: anInteger. -] - -{ #category : #positioning } -XMLExceptionRaisingReadStream >> reset [ - wasClosed - ifTrue: [self errorClosedStreamCannotBeSent: #reset]. - stream reset. -] - -{ #category : #testing } -XMLExceptionRaisingReadStream >> wasClosed [ - ^ wasClosed -] diff --git a/src/XML-Tests-Parser/XMLExceptionTest.class.st b/src/XML-Tests-Parser/XMLExceptionTest.class.st deleted file mode 100644 index c2b1fd17d..000000000 --- a/src/XML-Tests-Parser/XMLExceptionTest.class.st +++ /dev/null @@ -1,245 +0,0 @@ -Class { - #name : #XMLExceptionTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser-Exceptions' -} - -{ #category : #asserting } -XMLExceptionTest class >> shouldInheritSelectors [ - ^ true -] - -{ #category : #accessing } -XMLExceptionTest >> errorMessage [ - ^ 'an error occurred' -] - -{ #category : #accessing } -XMLExceptionTest >> exceptionClass [ - ^ XMLException -] - -{ #category : #'instance creation' } -XMLExceptionTest >> newException [ - ^ self exceptionClass new -] - -{ #category : #'instance creation' } -XMLExceptionTest >> newExceptionWithErrorMessage [ - ^ self newException - messageText: self errorMessage; - yourself -] - -{ #category : #'instance creation' } -XMLExceptionTest >> newOtherException [ - ^ self otherExceptionClass new -] - -{ #category : #'instance creation' } -XMLExceptionTest >> newOtherExceptionWithErrorMessage [ - ^ self newOtherException - messageText: self errorMessage; - yourself -] - -{ #category : #accessing } -XMLExceptionTest >> otherExceptionClass [ - ^ Error -] - -{ #category : #tests } -XMLExceptionTest >> testFormatMessageWith [ - | exception | - - exception := self newException. - self assert: - (exception - formatMessage: '{1}' - with: 'one') == exception. - self assert: exception messageText = 'one'. -] - -{ #category : #tests } -XMLExceptionTest >> testFormatMessageWithArguments [ - | exception | - - exception := self newException. - self assert: - (exception - formatMessage: '{1} {2} {3} {4}' - withArguments: #('one' 2 'three' 4)) == exception. - self assert: exception messageText = 'one 2 three 4'. -] - -{ #category : #tests } -XMLExceptionTest >> testFormatMessageWithWith [ - | exception | - - exception := self newException. - self assert: - (exception - formatMessage: '{1} {2}' - with: 'one' - with: 2) == exception. - self assert: exception messageText = 'one 2'. -] - -{ #category : #tests } -XMLExceptionTest >> testFormatMessageWithWithWith [ - | exception | - - exception := self newException. - self assert: - (exception - formatMessage: '{1} {2} {3}' - with: 'one' - with: 2 - with: 'three') == exception. - self assert: exception messageText = 'one 2 three'. -] - -{ #category : #tests } -XMLExceptionTest >> testFormatMessageWithWithWithWith [ - | exception | - - exception := self newException. - self assert: - (exception - formatMessage: '{1} {2} {3} {4}' - with: 'one' - with: 2 - with: 'three' - with: 4) == exception. - self assert: exception messageText = 'one 2 three 4'. -] - -{ #category : #tests } -XMLExceptionTest >> testFormatSignalWith [ - (Array - with: self exceptionClass - with: self newException) - do: [:each | | raisedException | - [each - formatSignal: '{1}' - with: 1] - on: Error - do: [:exception | raisedException := exception]. - self - assert: raisedException notNil; - assert: raisedException class == self exceptionClass; - assert: raisedException messageText = '1'] -] - -{ #category : #tests } -XMLExceptionTest >> testFormatSignalWithArguments [ - (Array - with: self exceptionClass - with: self newException) - do: [:each | | raisedException | - [each - formatSignal: '{1} {2} {3} {4}' - withArguments: #(1 'two' 3 'four')] - on: Error - do: [:exception | raisedException := exception]. - self - assert: raisedException notNil; - assert: raisedException class == self exceptionClass; - assert: raisedException messageText = '1 two 3 four'] -] - -{ #category : #tests } -XMLExceptionTest >> testFormatSignalWithWith [ - (Array - with: self exceptionClass - with: self newException) - do: [:each | | raisedException | - [each - formatSignal: '{1} {2}' - with: 1 - with: 'two'] - on: Error - do: [:exception | raisedException := exception]. - self - assert: raisedException notNil; - assert: raisedException class == self exceptionClass; - assert: raisedException messageText = '1 two'] -] - -{ #category : #tests } -XMLExceptionTest >> testFormatSignalWithWithWith [ - (Array - with: self exceptionClass - with: self newException) - do: [:each | | raisedException | - [each - formatSignal: '{1} {2} {3}' - with: 1 - with: 'two' - with: 3] - on: Error - do: [:exception | raisedException := exception]. - self - assert: raisedException notNil; - assert: raisedException class == self exceptionClass; - assert: raisedException messageText = '1 two 3'] -] - -{ #category : #tests } -XMLExceptionTest >> testFormatSignalWithWithWithWith [ - (Array - with: self exceptionClass - with: self newException) - do: [:each | | raisedException | - [each - formatSignal: '{1} {2} {3} {4}' - with: 1 - with: 'two' - with: 3 - with: 'four'] - on: Error - do: [:exception | raisedException := exception]. - self - assert: raisedException notNil; - assert: raisedException class == self exceptionClass; - assert: raisedException messageText = '1 two 3 four'] -] - -{ #category : #tests } -XMLExceptionTest >> testInheritMessageFrom [ - | exception otherException | - - exception := self newException. - otherException := self newOtherExceptionWithErrorMessage. - self - assert: (exception inheritMessageFrom: otherException) == exception; - assert: - exception messageText = - ('({1}) {2}' format: - (Array - with: self otherExceptionClass name - with: self errorMessage)). -] - -{ #category : #tests } -XMLExceptionTest >> testSignalMessageFrom [ - | otherException | - - otherException := self newOtherExceptionWithErrorMessage. - (Array - with: self exceptionClass - with: self newException) - do: [:each | | raisedException | - [each signalMessageFrom: otherException] - on: Error - do: [:exception | raisedException := exception]. - self - assert: raisedException notNil; - assert: raisedException class == self exceptionClass; - assert: - raisedException messageText = - ('({1}) {2}' format: - (Array - with: self otherExceptionClass name - with: self errorMessage))]. -] diff --git a/src/XML-Tests-Parser/XMLExternalEntityTest.class.st b/src/XML-Tests-Parser/XMLExternalEntityTest.class.st deleted file mode 100644 index 2bbb653fe..000000000 --- a/src/XML-Tests-Parser/XMLExternalEntityTest.class.st +++ /dev/null @@ -1,600 +0,0 @@ -" -These tests use HTTP and the file system and are skipped by default. This enables them: - self stopSkipping -" -Class { - #name : #XMLExternalEntityTest, - #superclass : #XMLSkippableTest, - #instVars : [ - 'tempFileManager' - ], - #category : #'XML-Tests-Parser' -} - -{ #category : #testing } -XMLExternalEntityTest class >> isAbstract [ - ^ false -] - -{ #category : #accessing } -XMLExternalEntityTest class >> skippableTests [ - ^ #(testExternalSubsetReadLimit - testOnFileNamed - testOnURL - testOnURLUpToLimit - testParsingDocBookArticle - testParsingDocBookExample - testParsingEncodedFile - testParsingEncodedFileWithBOM - testParsingEncodedFileWithEncodingAttribute - testParsingEncodedFileWithEncodingAttributeAndBOM - testParsingExternalEntities - testParsingExternalEntitiesLimit - testParsingFile - testParsingRetrievedURL - testParsingStrictXHTMLDocument - testParsingStrictXHTMLStyledDocument - testParsingURL) -] - -{ #category : #accessing } -XMLExternalEntityTest >> defaultTimeLimit [ - "this is needed for Pharo5+ to prevent it from timing out - the long-running HTTP tests when skipping is disabled" - ^ self defaultTimeout seconds -] - -{ #category : #accessing } -XMLExternalEntityTest >> defaultTimeout [ - "this is needed for Squeak to prevent it from timing out - the long-running HTTP tests when skipping is disabled" - ^ 60 * 10 -] - -{ #category : #source } -XMLExternalEntityTest >> docBookArticleSource [ - ^ '<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://docbook.org/xml/4.5/docbookx.dtd"> -<article> - <articleinfo> - <title>About Pharo - - Dr. - Stephane - Ducasse - - -
    - Mission - Pharo''s goal is to deliver a clean, innovative, free open-source environment. Here is the to be revised Pharo vision document. - By providing a stable and small core system, excellent developing tools, and maintained releases, Pharo is an attractive platform to build and deploy mission critical applications. - Pharo fosters a healthy ecosystem of both private and commercial contributors who advance and maintain the core system and its external packages. -
    -
    - Pharo features - A dynamic, pure object-oriented programming language in the tradition of Smalltalk - An IDE (integrated development environment) - A huge library and set of external packages -
    -
    - Pharo and Business - The goal of Pharo is to sustain and grow business. - Pharo is supported by the industrial Pharo consortium. - Pharo has also an association of users: Pharo association -
    -' -] - -{ #category : #source } -XMLExternalEntityTest >> docBookExampleSource [ - ^ ' - - An Example - - XMLDocument root: - ((XMLElement named: ''test'') - addNode: ''An example'' asXMLString; - yourself) - - ' -] - -{ #category : #accessing } -XMLExternalEntityTest >> encodingNames [ - ^ #('UTF-8' 'UTF-16' 'UTF-16-LE' 'UTF-32' 'UTF-32-LE') -] - -{ #category : #accessing } -XMLExternalEntityTest >> feedURL [ - ^ 'http://www.squeaksource.com/feed.rss' -] - -{ #category : #source } -XMLExternalEntityTest >> musicXMLDocument [ - ^ ' - - - - - Music - - - - - - 1 - - 0 - - - - G - 2 - - - - - C - 4 - - 4 - whole - - - - -'. -] - -{ #category : #source } -XMLExternalEntityTest >> strictXHTMLDocumentSource [ - ^ ' - - - - Virtual Library - - -

    Moved to example.org.

    - -' -] - -{ #category : #source } -XMLExternalEntityTest >> strictXHTMLStyledDocumentSource [ - ^ ' - - - - -An internal stylesheet example - - - -

    - This is text that uses our - internal stylesheet. -

    - -' -] - -{ #category : #accessing } -XMLExternalEntityTest >> tempFileManager [ - ^ tempFileManager ifNil: [tempFileManager := XMLTempFileManager new] -] - -{ #category : #tests } -XMLExternalEntityTest >> testExternalSubsetReadLimit [ - self - skipOrReturnWith: [^ self] - ifSkippable: #testExternalSubsetReadLimit. - - self tempFileManager newFileHandleDo: [:fileHandle | - | xml externalSubset parser | - - externalSubset := ''. - self tempFileManager - createFileWithContents: externalSubset - forHandle: fileHandle. - xml := ''. - - self - shouldnt: [ - (parser := SAXHandler on: xml) - externalEntityResolver externalSubsetReadLimit: - externalSubset size. - parser - resolvesExternalEntities: true; - parseDocument] - raise: XMLLimitException. - - self - should: [ - (parser := SAXHandler on: xml) - externalEntityResolver externalSubsetReadLimit: - externalSubset size - 1. - parser - resolvesExternalEntities: true; - parseDocument] - raise: XMLLimitException]. -] - -{ #category : #tests } -XMLExternalEntityTest >> testOnFileNamed [ - self - skipOrReturnWith: [^ self] - ifSkippable: #testOnFileNamed. - - self tempFileManager newFileHandleDo: [:fileHandle | | parser | - self tempFileManager - createFileWithContents: '' - forHandle: fileHandle. - self - shouldnt: [parser := SAXHandler onFileNamed: fileHandle path] - raise: XMLFileException. - self - assert: parser documentURI = fileHandle path; - assert: parser documentURI asXMLURI isLocal]. -] - -{ #category : #tests } -XMLExternalEntityTest >> testOnURL [ - | parser | - - self - skipOrReturnWith: [^ self] - ifSkippable: #testOnURL. - - self - shouldnt: [parser := SAXHandler onURL: self feedURL] - raise: XMLHTTPException. - self - assert: parser documentURI = self feedURL; - deny: parser documentURI asXMLURI isLocal. -] - -{ #category : #tests } -XMLExternalEntityTest >> testOnURLUpToLimit [ - | parser size | - - self - skipOrReturnWith: [^ self] - ifSkippable: #testOnURLUpToLimit. - - size := - (self feedURL asXMLURI - getUpToLimit: nil - decoding: false) size. - self - shouldnt: [ - parser := - SAXHandler - onURL: self feedURL - upToLimit: size] - raise: XMLLimitException. - self assert: parser documentReadLimit = size. - - self - should: [ - (SAXHandler - onURL: self feedURL - upToLimit: size - 1) - parseDocument] - raise: XMLLimitException. -] - -{ #category : #tests } -XMLExternalEntityTest >> testParsingDocBookArticle [ - "This uses HTTP so is skipped by default" - - self - skipOrReturnWith: [^ self] - ifSkippable: #testParsingDocBookArticle. - - self - shouldnt: [ - (SAXHandler on: self docBookArticleSource) - resolvesExternalEntities: true; - removeLimits; - parseDocument] - raise: XMLParserException. -] - -{ #category : #tests } -XMLExternalEntityTest >> testParsingDocBookExample [ - "This uses HTTP so is skipped by default" - - self - skipOrReturnWith: [^ self] - ifSkippable: #testParsingDocBookExample. - - self - shouldnt: [ - (SAXHandler on: self docBookExampleSource) - resolvesExternalEntities: true; - removeLimits; - parseDocument] - raise: XMLParserException. -] - -{ #category : #tests } -XMLExternalEntityTest >> testParsingEncodedFile [ - "This test creates/deletes a file so is skipped by default" - self - skipOrReturnWith: [^ self] - ifSkippable: #testParsingEncodedFile. - - self tempFileManager newFileHandleDo: [:fileHandle | - self encodingNames do: [:encoding | | document documentFromFile | - document := XMLDOMParser parse: self wideCharacterXML. - fileHandle writeStreamDo: [:stream | - stream - streamConverter: encoding asXMLStreamConverter; - nextPutAll: document printString]. - self - shouldnt: [ - documentFromFile := - XMLDOMParser parseFileNamed: fileHandle path] - raise: XMLFileException. - self - assert: documentFromFile encoding = ''; - assert: documentFromFile printString = document printString]]. -] - -{ #category : #tests } -XMLExternalEntityTest >> testParsingEncodedFileWithBOM [ - "This test creates/deletes a file so is skipped by default" - self - skipOrReturnWith: [^ self] - ifSkippable: #testParsingEncodedFileWithBOM. - - self tempFileManager newFileHandleDo: [:fileHandle | - self encodingNames do: [:encoding | | document documentFromFile | - document := XMLDOMParser parse: self wideCharacterXML. - fileHandle writeStreamDo: [:stream | - stream - streamConverter: encoding asXMLStreamConverter; - nextPutByteOrderMark; - nextPutAll: document printString]. - self - shouldnt: [ - documentFromFile := - XMLDOMParser parseFileNamed: fileHandle path] - raise: XMLFileException. - self - assert: documentFromFile encoding = ''; - assert: documentFromFile printString = document printString]]. -] - -{ #category : #tests } -XMLExternalEntityTest >> testParsingEncodedFileWithEncodingAttribute [ - "This test creates/deletes a file so is skipped by default" - self - skipOrReturnWith: [^ self] - ifSkippable: #testParsingEncodedFileWithEncodingAttribute. - - self tempFileManager newFileHandleDo: [:fileHandle | - self encodingNames do: [:encoding | | document documentFromFile | - document := XMLDOMParser parse: self wideCharacterXML. - document encoding: encoding. - fileHandle writeStreamDo: [:stream | - stream - streamConverter: encoding asXMLStreamConverter; - nextPutAll: document printString]. - self - shouldnt: [ - documentFromFile := - XMLDOMParser parseFileNamed: fileHandle path] - raise: XMLFileException. - self - assert: documentFromFile encoding = encoding; - assert: documentFromFile printString = document printString]]. -] - -{ #category : #tests } -XMLExternalEntityTest >> testParsingEncodedFileWithEncodingAttributeAndBOM [ - "This test creates/deletes a file so is skipped by default" - self - skipOrReturnWith: [^ self] - ifSkippable: #testParsingEncodedFileWithEncodingAttributeAndBOM. - - self tempFileManager newFileHandleDo: [:fileHandle | - self encodingNames do: [:encoding | | document documentFromFile | - document := XMLDOMParser parse: self wideCharacterXML. - document encoding: encoding. - fileHandle writeStreamDo: [:stream | - stream - streamConverter: encoding asXMLStreamConverter; - nextPutByteOrderMark; - nextPutAll: document printString]. - self - shouldnt: [ - documentFromFile := - XMLDOMParser parseFileNamed: fileHandle path] - raise: XMLFileException. - self - assert: documentFromFile encoding = encoding; - assert: documentFromFile printString = document printString]]. -] - -{ #category : #tests } -XMLExternalEntityTest >> testParsingExternalEntities [ - "This test uses HTTP so is skipped by default." - | entityCacheCopy | - - self - skipOrReturnWith: [^ self] - ifSkippable: #testParsingExternalEntities. - - DTDCachingExternalEntityResolver clearEntityCache. - self assert: DTDCachingExternalEntityResolver entityCache isEmpty. - - SAXHandler - parse: self musicXMLDocument - usingNamespaces: true - validation: true - externalEntities: true. - self deny: DTDCachingExternalEntityResolver entityCache isEmpty. - - "ensure there is no re-requesting of cached entities" - entityCacheCopy := DTDCachingExternalEntityResolver entityCache copy. - SAXHandler - parse: self musicXMLDocument - usingNamespaces: true - validation: true - externalEntities: true. - DTDCachingExternalEntityResolver entityCache keysAndValuesDo: [:key :value | - self assert: - (entityCacheCopy - at: key - ifAbsent: [self fail]) == value]. -] - -{ #category : #tests } -XMLExternalEntityTest >> testParsingExternalEntitiesLimit [ - "This test uses HTTP so is skipped by default." - | handler parser limitedResolver totalResolvedExternalEntities | - - self - skipOrReturnWith: [^ self] - ifSkippable: #testParsingExternalEntitiesLimit. - - DTDCachingExternalEntityResolver clearEntityCache. - - (handler := SAXHandler on: self musicXMLDocument) - resolvesExternalEntities: true. - parser := handler parser. - (limitedResolver := parser driver externalEntityResolver) - maxExternalEntities: nil. - parser parseDocument. - totalResolvedExternalEntities := limitedResolver totalResolvedExternalEntities. - self assert: totalResolvedExternalEntities > 0. - - "should report the same number of resolved entities each time, even if - they were cached, to ensure deterministic behavior regardless of which - resolver is used or the state of the cache" - (handler := SAXHandler on: self musicXMLDocument) - resolvesExternalEntities: true. - parser := handler parser. - (limitedResolver := parser driver externalEntityResolver) - maxExternalEntities: totalResolvedExternalEntities. - parser parseDocument. - self assert: - limitedResolver totalResolvedExternalEntities = - totalResolvedExternalEntities. - - (handler := SAXHandler on: self musicXMLDocument) - resolvesExternalEntities: true. - parser := handler parser. - (limitedResolver := parser driver externalEntityResolver) - maxExternalEntities: totalResolvedExternalEntities - 1. - self - should: [parser parseDocument] - raise: XMLLimitException. -] - -{ #category : #tests } -XMLExternalEntityTest >> testParsingFile [ - "This test creates/deletes a file so is skipped by default" - self - skipOrReturnWith: [^ self] - ifSkippable: #testParsingFile. - - self tempFileManager newFileHandleDo: [:fileHandle | | document | - self - should: [XMLDOMParser parseFileNamed: fileHandle path] - raise: XMLFileException. - - self tempFileManager - createFileWithContents: self musicXMLDocument - forHandle: fileHandle. - self - shouldnt: [document := XMLDOMParser parseFileNamed: fileHandle path] - raise: XMLFileException. - self assert: (document root isNamed: 'score-partwise')]. -] - -{ #category : #tests } -XMLExternalEntityTest >> testParsingStrictXHTMLDocument [ - "This uses HTTP so is skipped by default" - - self - skipOrReturnWith: [^ self] - ifSkippable: #testParsingStrictXHTMLDocument. - - self - shouldnt: [ - (SAXHandler on: self strictXHTMLDocumentSource) - resolvesExternalEntities: true; - removeLimits; - parseDocument] - raise: XMLParserException. -] - -{ #category : #tests } -XMLExternalEntityTest >> testParsingStrictXHTMLStyledDocument [ - "This uses HTTP so is skipped by default" - - self - skipOrReturnWith: [^ self] - ifSkippable: #testParsingStrictXHTMLStyledDocument. - - self - shouldnt: [ - (SAXHandler on: self strictXHTMLStyledDocumentSource) - resolvesExternalEntities: true; - removeLimits; - parseDocument] - raise: XMLParserException. -] - -{ #category : #tests } -XMLExternalEntityTest >> testParsingURL [ - "This uses HTTP so is skipped by default" - | doc | - - self - skipOrReturnWith: [^ self] - ifSkippable: #testParsingURL. - - self - shouldnt: [doc := XMLDOMParser parseURL: self feedURL] - raise: XMLHTTPException. - self assert: (doc root isNamed: 'rss'). -] - -{ #category : #source } -XMLExternalEntityTest >> wideCharacterXML [ - ^ ' - - Euro - {1} - - Cent - {2} - 100 - - ' - format: - (Array - with: 16r20AC asCharacter - with: 16rA2 asCharacter) -] diff --git a/src/XML-Tests-Parser/XMLFAttributeList.class.st b/src/XML-Tests-Parser/XMLFAttributeList.class.st deleted file mode 100644 index e410e7f84..000000000 --- a/src/XML-Tests-Parser/XMLFAttributeList.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -A dummy subclass of XMLAttributeList -" -Class { - #name : #XMLFAttributeList, - #superclass : #XMLAttributeList, - #category : #'XML-Tests-Parser-DOM-Factories' -} diff --git a/src/XML-Tests-Parser/XMLFCData.class.st b/src/XML-Tests-Parser/XMLFCData.class.st deleted file mode 100644 index b049ab997..000000000 --- a/src/XML-Tests-Parser/XMLFCData.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -A dummy subclass of XMLCData -" -Class { - #name : #XMLFCData, - #superclass : #XMLCData, - #category : #'XML-Tests-Parser-DOM-Factories' -} diff --git a/src/XML-Tests-Parser/XMLFComment.class.st b/src/XML-Tests-Parser/XMLFComment.class.st deleted file mode 100644 index 02947ee28..000000000 --- a/src/XML-Tests-Parser/XMLFComment.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -A dummy subclass of XMLComment -" -Class { - #name : #XMLFComment, - #superclass : #XMLComment, - #category : #'XML-Tests-Parser-DOM-Factories' -} diff --git a/src/XML-Tests-Parser/XMLFDateElement.class.st b/src/XML-Tests-Parser/XMLFDateElement.class.st deleted file mode 100644 index 0282bc031..000000000 --- a/src/XML-Tests-Parser/XMLFDateElement.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -A dummy subclass of XMLElement -" -Class { - #name : #XMLFDateElement, - #superclass : #XMLElement, - #category : #'XML-Tests-Parser-DOM-Factories' -} diff --git a/src/XML-Tests-Parser/XMLFDocument.class.st b/src/XML-Tests-Parser/XMLFDocument.class.st deleted file mode 100644 index 9cff004f8..000000000 --- a/src/XML-Tests-Parser/XMLFDocument.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -A dummy subclass of XMLDocument -" -Class { - #name : #XMLFDocument, - #superclass : #XMLDocument, - #category : #'XML-Tests-Parser-DOM-Factories' -} diff --git a/src/XML-Tests-Parser/XMLFElement.class.st b/src/XML-Tests-Parser/XMLFElement.class.st deleted file mode 100644 index e3f20e219..000000000 --- a/src/XML-Tests-Parser/XMLFElement.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -A dummy subclass of XMLElement -" -Class { - #name : #XMLFElement, - #superclass : #XMLElement, - #category : #'XML-Tests-Parser-DOM-Factories' -} diff --git a/src/XML-Tests-Parser/XMLFNodeList.class.st b/src/XML-Tests-Parser/XMLFNodeList.class.st deleted file mode 100644 index 2036ef998..000000000 --- a/src/XML-Tests-Parser/XMLFNodeList.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -A dummy subclass of XMLFNodeList -" -Class { - #name : #XMLFNodeList, - #superclass : #XMLNodeList, - #category : #'XML-Tests-Parser-DOM-Factories' -} diff --git a/src/XML-Tests-Parser/XMLFPI.class.st b/src/XML-Tests-Parser/XMLFPI.class.st deleted file mode 100644 index 57ef576de..000000000 --- a/src/XML-Tests-Parser/XMLFPI.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -A dummy subclass of XMLPI -" -Class { - #name : #XMLFPI, - #superclass : #XMLPI, - #category : #'XML-Tests-Parser-DOM-Factories' -} diff --git a/src/XML-Tests-Parser/XMLFRealNameElement.class.st b/src/XML-Tests-Parser/XMLFRealNameElement.class.st deleted file mode 100644 index 1e67e8278..000000000 --- a/src/XML-Tests-Parser/XMLFRealNameElement.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -A dummy subclass of XMLElement -" -Class { - #name : #XMLFRealNameElement, - #superclass : #XMLElement, - #category : #'XML-Tests-Parser-DOM-Factories' -} diff --git a/src/XML-Tests-Parser/XMLFSerializationFormatElement.class.st b/src/XML-Tests-Parser/XMLFSerializationFormatElement.class.st deleted file mode 100644 index 44bc625ae..000000000 --- a/src/XML-Tests-Parser/XMLFSerializationFormatElement.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -A dummy subclass of XMLElement -" -Class { - #name : #XMLFSerializationFormatElement, - #superclass : #XMLElement, - #category : #'XML-Tests-Parser-DOM-Factories' -} diff --git a/src/XML-Tests-Parser/XMLFString.class.st b/src/XML-Tests-Parser/XMLFString.class.st deleted file mode 100644 index ec6608524..000000000 --- a/src/XML-Tests-Parser/XMLFString.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -A dummy subclass of XMLString -" -Class { - #name : #XMLFString, - #superclass : #XMLString, - #category : #'XML-Tests-Parser-DOM-Factories' -} diff --git a/src/XML-Tests-Parser/XMLFTableElement.class.st b/src/XML-Tests-Parser/XMLFTableElement.class.st deleted file mode 100644 index 58a5b1954..000000000 --- a/src/XML-Tests-Parser/XMLFTableElement.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -A dummy subclass of XMLElement -" -Class { - #name : #XMLFTableElement, - #superclass : #XMLElement, - #category : #'XML-Tests-Parser-DOM-Factories' -} diff --git a/src/XML-Tests-Parser/XMLFUserElement.class.st b/src/XML-Tests-Parser/XMLFUserElement.class.st deleted file mode 100644 index 148ceff9d..000000000 --- a/src/XML-Tests-Parser/XMLFUserElement.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -A dummy subclass of XMLElement -" -Class { - #name : #XMLFUserElement, - #superclass : #XMLElement, - #category : #'XML-Tests-Parser-DOM-Factories' -} diff --git a/src/XML-Tests-Parser/XMLFUsernameElement.class.st b/src/XML-Tests-Parser/XMLFUsernameElement.class.st deleted file mode 100644 index ea1110f23..000000000 --- a/src/XML-Tests-Parser/XMLFUsernameElement.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -A dummy subclass of XMLElement -" -Class { - #name : #XMLFUsernameElement, - #superclass : #XMLElement, - #category : #'XML-Tests-Parser-DOM-Factories' -} diff --git a/src/XML-Tests-Parser/XMLFWrongElement.class.st b/src/XML-Tests-Parser/XMLFWrongElement.class.st deleted file mode 100644 index 4619098a3..000000000 --- a/src/XML-Tests-Parser/XMLFWrongElement.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -A dummy subclass of XMLElement -" -Class { - #name : #XMLFWrongElement, - #superclass : #XMLElement, - #category : #'XML-Tests-Parser-DOM-Factories' -} diff --git a/src/XML-Tests-Parser/XMLFileHandleTest.class.st b/src/XML-Tests-Parser/XMLFileHandleTest.class.st deleted file mode 100644 index f8d0a9775..000000000 --- a/src/XML-Tests-Parser/XMLFileHandleTest.class.st +++ /dev/null @@ -1,502 +0,0 @@ -Class { - #name : #XMLFileHandleTest, - #superclass : #XMLSkippableTest, - #instVars : [ - 'tempFileManager', - 'currentWorkingDirectoryFileHandle' - ], - #category : #'XML-Tests-Parser-Files' -} - -{ #category : #testing } -XMLFileHandleTest class >> isAbstract [ - ^ false -] - -{ #category : #testing } -XMLFileHandleTest class >> shouldInheritSelectors [ - ^ true -] - -{ #category : #accessing } -XMLFileHandleTest class >> skippableTests [ - ^ #(#testContents #testDelete - #testExists #testExtension - #testGet #testGetUpToLimitDecoding - #testIsFile #testIsXMLDocumentFile - #testRawReadStream #testRawWriteStream - #testReadStream #testReadStreamDo - #testSize #testStreamGet - #testStreamGetUpToLimitDecoding - #testWriteStream #testWriteStreamDo) -] - -{ #category : #asserting } -XMLFileHandleTest >> assertIsDecodedFileContents: aCollection [ - self - assert: aCollection isString; - assert: aCollection = self decodedFileContents -] - -{ #category : #asserting } -XMLFileHandleTest >> assertIsEncodedFileContentsWithBOM: aCollection [ - ^ self assert: - aCollection asByteArray = - self encodedFileContentsWithByteOrderMark asByteArray -] - -{ #category : #accessing } -XMLFileHandleTest >> currentWorkingDirectoryFileHandle [ - ^ currentWorkingDirectoryFileHandle - ifNil: [ - currentWorkingDirectoryFileHandle := - XMLFileHandle currentWorkingDirectory asXMLFileHandle] -] - -{ #category : #accessing } -XMLFileHandleTest >> decodedFileContents [ - ^ 'test' -] - -{ #category : #accessing } -XMLFileHandleTest >> encodedFileContents [ - ^ XMLStreamAdapterTest binaryFrom: 'test' -] - -{ #category : #accessing } -XMLFileHandleTest >> encodedFileContentsWithByteOrderMark [ - ^ (self streamConverterClass byteOrderMarkBytes, self encodedFileContents) - asByteArray -] - -{ #category : #accessing } -XMLFileHandleTest >> streamConverterClass [ - ^ XMLNullStreamConverter -] - -{ #category : #accessing } -XMLFileHandleTest >> tempFileManager [ - ^ tempFileManager - ifNil: [ - tempFileManager := - XMLTempFileManager - streamConverter: self streamConverterClass new - fileContents: self decodedFileContents - fileSuffix: '.txt'] -] - -{ #category : #tests } -XMLFileHandleTest >> testAsXMLFileHandle [ - XMLFileHandle hasSupportedImplementation - ifTrue: [| fileHandle | - fileHandle := '' asXMLFileHandle. - self - assert: fileHandle class == XMLFileHandle implementation; - assert: fileHandle asXMLFileHandle == fileHandle] -] - -{ #category : #tests } -XMLFileHandleTest >> testContents [ - self - skipOrReturnWith: [^ self] - ifSkippable: #testContents. - - self tempFileManager newFileHandleDo: [:fileHandle | - self - should: [fileHandle contents] - raise: XMLFileException. - self - should: [self currentWorkingDirectoryFileHandle contents] - raise: XMLFileException. - - self tempFileManager createFileWithContentsForHandle: fileHandle. - self assertIsDecodedFileContents: fileHandle contents]. -] - -{ #category : #tests } -XMLFileHandleTest >> testDelete [ - self - skipOrReturnWith: [^ self] - ifSkippable: #testDelete. - - self tempFileManager newFileHandleDo: [:fileHandle | - self - should: [fileHandle delete] - raise: XMLFileException. - - self tempFileManager createFileForHandle: fileHandle. - self - assert: fileHandle delete == fileHandle; - deny: fileHandle exists. - - self - should: [fileHandle delete] - raise: XMLFileException]. -] - -{ #category : #tests } -XMLFileHandleTest >> testExists [ - self - skipOrReturnWith: [^ self] - ifSkippable: #testExists. - - self tempFileManager newFileHandleDo: [:fileHandle | - self - deny: fileHandle exists; - assert: self currentWorkingDirectoryFileHandle exists. - - self tempFileManager createFileForHandle: fileHandle. - self assert: fileHandle exists]. -] - -{ #category : #tests } -XMLFileHandleTest >> testExtension [ - XMLFileHandle hasSupportedImplementation - ifFalse: [^ self]. - - self - assert: '' asXMLFileHandle extension = ''; - assert: 'one' asXMLFileHandle extension = ''; - assert: 'one.two' asXMLFileHandle extension = 'two'; - assert: 'one.two.three' asXMLFileHandle extension = 'two.three'; - assert: '/' asXMLFileHandle extension = ''; - assert: '/one' asXMLFileHandle extension = ''; - assert: '/one.two' asXMLFileHandle extension = 'two'; - assert: '/one.two.three' asXMLFileHandle extension = 'two.three'; - assert: 'one/' asXMLFileHandle extension = ''; - assert: 'one/two' asXMLFileHandle extension = ''; - assert: 'one/two.three' asXMLFileHandle extension = 'three'; - assert: 'one/two.three.four' asXMLFileHandle extension = 'three.four'; - assert: 'one/two/' asXMLFileHandle extension = ''; - assert: 'one/two.three/' asXMLFileHandle extension = ''; - assert: 'one/two.three.four/' asXMLFileHandle extension = ''. -] - -{ #category : #tests } -XMLFileHandleTest >> testGet [ - self - skipOrReturnWith: [^ self] - ifSkippable: #testGet. - - self tempFileManager newFileHandleDo: [:fileHandle | - self - should: [fileHandle get] - raise: XMLFileException. - - self tempFileManager createFileWithContentsForHandle: fileHandle. - self assertIsDecodedFileContents: fileHandle get]. -] - -{ #category : #tests } -XMLFileHandleTest >> testGetUpToLimitDecoding [ - self - skipOrReturnWith: [^ self] - ifSkippable: #testGetUpToLimitDecoding. - - self tempFileManager newFileHandleDo: [:fileHandle | - self - should: [ - fileHandle - getUpToLimit: nil - decoding: true] - raise: XMLFileException. - - self tempFileManager createFileWithContentsForHandle: fileHandle. - - self assertIsDecodedFileContents: - (fileHandle - getUpToLimit: nil - decoding: true). - self assertIsEncodedFileContentsWithBOM: - (fileHandle - getUpToLimit: nil - decoding: false). - - self assertIsDecodedFileContents: - (fileHandle - getUpToLimit: self encodedFileContentsWithByteOrderMark size - decoding: true). - self assertIsEncodedFileContentsWithBOM: - (fileHandle - getUpToLimit: self encodedFileContentsWithByteOrderMark size - decoding: false). - - self - should: [ - fileHandle - getUpToLimit: self encodedFileContentsWithByteOrderMark size - 1 - decoding: true] - raise: XMLLimitException. - self - should: [ - fileHandle - getUpToLimit: self encodedFileContentsWithByteOrderMark size - 1 - decoding: false] - raise: XMLLimitException]. -] - -{ #category : #tests } -XMLFileHandleTest >> testIsFile [ - self - skipOrReturnWith: [^ self] - ifSkippable: #testIsFile. - - self tempFileManager newFileHandleDo: [:fileHandle | - self - deny: fileHandle isFile; - deny: self currentWorkingDirectoryFileHandle isFile. - - self tempFileManager createFileForHandle: fileHandle. - self assert: fileHandle isFile]. -] - -{ #category : #tests } -XMLFileHandleTest >> testIsXMLDocumentFile [ - XMLFileHandle hasSupportedImplementation - ifFalse: [^ self]. - - #('atom' 'dbk' 'docm' 'docx' 'pptm' 'pptx' 'rdf' 'rss' 'svg' 'xbel' - 'xfd' 'xfdl' 'xhtml' 'xlsm' 'xlsx' 'xml' 'xsd' 'xspf' 'xul') - do: [:each | | file | - file := 'test.', each. - self - assert: file asXMLFileHandle isXMLDocumentFile; - assert: file asUppercase asXMLFileHandle isXMLDocumentFile]. - - #('txt' 'html' 'jpeg' 'jpg' 'gif' 'dtd' 'ent') - do: [:each | | file | - file := 'test.', each. - self - deny: file asXMLFileHandle isXMLDocumentFile; - deny: file asUppercase asXMLFileHandle isXMLDocumentFile]. -] - -{ #category : #tests } -XMLFileHandleTest >> testPath [ - XMLFileHandle hasSupportedImplementation - ifTrue: [| fileHandle | - fileHandle := XMLFileHandle implementation path: 'test'. - self - assert: fileHandle class == XMLFileHandle implementation; - assert: fileHandle path = 'test'] -] - -{ #category : #tests } -XMLFileHandleTest >> testRawReadStream [ - self - skipOrReturnWith: [^ self] - ifSkippable: #testRawReadStream. - - self tempFileManager newFileHandleDo: [:fileHandle | | readStream | - self - should: [fileHandle rawReadStream] - raise: XMLFileException. - - self tempFileManager createFileWithContentsForHandle: fileHandle. - readStream := fileHandle rawReadStream. - self - deny: readStream isXMLConvertingStreamAdapter; - assertIsEncodedFileContentsWithBOM: readStream upToEnd. - readStream close]. -] - -{ #category : #tests } -XMLFileHandleTest >> testRawWriteStream [ - self - skipOrReturnWith: [^ self] - ifSkippable: #testRawWriteStream. - - self tempFileManager newFileHandleDo: [:fileHandle | - "evaluate twice to ensure it truncates existing contents when opening" - 2 timesRepeat: [| writeStream | - writeStream := fileHandle rawWriteStream. - self deny: writeStream isXMLConvertingStreamAdapter. - - writeStream - nextPutAll: self encodedFileContentsWithByteOrderMark; - close. - self assertIsDecodedFileContents: fileHandle contents]]. -] - -{ #category : #tests } -XMLFileHandleTest >> testReadStream [ - self - skipOrReturnWith: [^ self] - ifSkippable: #testReadStream. - - self tempFileManager newFileHandleDo: [:fileHandle | | readStream | - self - should: [fileHandle readStream] - raise: XMLFileException. - - self tempFileManager createFileWithContentsForHandle: fileHandle. - readStream := fileHandle readStream. - self - assert: readStream isXMLConvertingStreamAdapter; - assertIsDecodedFileContents: readStream upToEnd. - readStream close]. -] - -{ #category : #tests } -XMLFileHandleTest >> testReadStreamDo [ - self - skipOrReturnWith: [^ self] - ifSkippable: #testReadStreamDo. - - self tempFileManager newFileHandleDo: [:fileHandle | | contents | - self - should: [fileHandle readStreamDo: [:readStream | ]] - raise: XMLFileException. - - self tempFileManager createFileWithContentsForHandle: fileHandle. - fileHandle readStreamDo: [:readStream | - self assert: readStream isXMLConvertingStreamAdapter. - "saved to a temp to ensure the block was evaluated" - contents := readStream upToEnd]. - self assertIsDecodedFileContents: contents]. -] - -{ #category : #tests } -XMLFileHandleTest >> testSize [ - self - skipOrReturnWith: [^ self] - ifSkippable: #testSize. - - self tempFileManager newFileHandleDo: [:fileHandle | - self - should: [fileHandle size] - raise: XMLFileException. - - self tempFileManager createFileWithContentsForHandle: fileHandle. - self assert: - fileHandle size >= - self encodedFileContentsWithByteOrderMark size]. -] - -{ #category : #tests } -XMLFileHandleTest >> testStreamGet [ - self - skipOrReturnWith: [^ self] - ifSkippable: #testStreamGet. - - self tempFileManager newFileHandleDo: [:fileHandle | | readStream | - self - should: [fileHandle streamGet] - raise: XMLFileException. - - self tempFileManager createFileWithContentsForHandle: fileHandle. - readStream := fileHandle streamGet. - self - assert: readStream isXMLConvertingStreamAdapter; - assertIsDecodedFileContents: readStream upToEnd. - readStream close]. -] - -{ #category : #tests } -XMLFileHandleTest >> testStreamGetUpToLimitDecoding [ - self - skipOrReturnWith: [^ self] - ifSkippable: #testStreamGetUpToLimitDecoding. - - self tempFileManager newFileHandleDo: [:fileHandle | | readStream | - self - should: [ - fileHandle - streamGetUpToLimit: nil - decoding: true] - raise: XMLFileException. - - self tempFileManager createFileWithContentsForHandle: fileHandle. - - readStream := - fileHandle - streamGetUpToLimit: nil - decoding: true. - self - assert: readStream isXMLConvertingStreamAdapter; - assertIsDecodedFileContents: readStream upToEnd. - readStream close. - readStream := - fileHandle - streamGetUpToLimit: nil - decoding: false. - self - deny: readStream isXMLConvertingStreamAdapter; - assertIsEncodedFileContentsWithBOM: readStream upToEnd. - readStream close. - - readStream := - fileHandle - streamGetUpToLimit: self encodedFileContentsWithByteOrderMark size - decoding: true. - self - assert: readStream isXMLConvertingStreamAdapter; - assertIsDecodedFileContents: readStream upToEnd. - readStream close. - readStream := - fileHandle - streamGetUpToLimit: self encodedFileContentsWithByteOrderMark size - decoding: false. - self - deny: readStream isXMLConvertingStreamAdapter; - assertIsEncodedFileContentsWithBOM: readStream upToEnd. - readStream close. - - self - should: [ - fileHandle - streamGetUpToLimit: - self encodedFileContentsWithByteOrderMark size - 1 - decoding: true] - raise: XMLLimitException. - self - should: [ - fileHandle - streamGetUpToLimit: - self encodedFileContentsWithByteOrderMark size - 1 - decoding: false] - raise: XMLLimitException]. -] - -{ #category : #tests } -XMLFileHandleTest >> testWriteStream [ - self - skipOrReturnWith: [^ self] - ifSkippable: #testWriteStream. - - self tempFileManager newFileHandleDo: [:fileHandle | - "evaluate twice to ensure it truncates existing contents when opening" - 2 timesRepeat: [| writeStream | - writeStream := fileHandle writeStream. - self - assert: writeStream isXMLConvertingStreamAdapter; - assert: writeStream hasDefaultStreamConverter. - - writeStream - streamConverter: self streamConverterClass new; - nextPutByteOrderMark; - nextPutAll: self decodedFileContents; - close. - self assertIsDecodedFileContents: fileHandle contents]]. -] - -{ #category : #tests } -XMLFileHandleTest >> testWriteStreamDo [ - self - skipOrReturnWith: [^ self] - ifSkippable: #testWriteStreamDo. - - self tempFileManager newFileHandleDo: [:fileHandle | - "evaluate twice to ensure it truncates existing contents when opening" - 2 timesRepeat: [ - fileHandle writeStreamDo: [:writeStream | - self - assert: writeStream isXMLConvertingStreamAdapter; - assert: writeStream hasDefaultStreamConverter. - - writeStream - streamConverter: self streamConverterClass new; - nextPutByteOrderMark; - nextPutAll: self decodedFileContents]. - self assertIsDecodedFileContents: fileHandle contents]]. -] diff --git a/src/XML-Tests-Parser/XMLFileHandleUTF16BETest.class.st b/src/XML-Tests-Parser/XMLFileHandleUTF16BETest.class.st deleted file mode 100644 index 6274c3a8a..000000000 --- a/src/XML-Tests-Parser/XMLFileHandleUTF16BETest.class.st +++ /dev/null @@ -1,20 +0,0 @@ -Class { - #name : #XMLFileHandleUTF16BETest, - #superclass : #XMLFileHandleTest, - #category : #'XML-Tests-Parser-Files' -} - -{ #category : #accessing } -XMLFileHandleUTF16BETest >> decodedFileContents [ - ^ XMLStreamAdapterTest decodedUTF16String -] - -{ #category : #accessing } -XMLFileHandleUTF16BETest >> encodedFileContents [ - ^ XMLStreamAdapterTest encodedUTF16BEBinary -] - -{ #category : #accessing } -XMLFileHandleUTF16BETest >> streamConverterClass [ - ^ XMLUTF16BigEndianStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLFileHandleUTF16LETest.class.st b/src/XML-Tests-Parser/XMLFileHandleUTF16LETest.class.st deleted file mode 100644 index 272fec9a4..000000000 --- a/src/XML-Tests-Parser/XMLFileHandleUTF16LETest.class.st +++ /dev/null @@ -1,20 +0,0 @@ -Class { - #name : #XMLFileHandleUTF16LETest, - #superclass : #XMLFileHandleTest, - #category : #'XML-Tests-Parser-Files' -} - -{ #category : #accessing } -XMLFileHandleUTF16LETest >> decodedFileContents [ - ^ XMLStreamAdapterTest decodedUTF16String -] - -{ #category : #accessing } -XMLFileHandleUTF16LETest >> encodedFileContents [ - ^ XMLStreamAdapterTest encodedUTF16LEBinary -] - -{ #category : #accessing } -XMLFileHandleUTF16LETest >> streamConverterClass [ - ^ XMLUTF16LittleEndianStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLFileHandleUTF32BETest.class.st b/src/XML-Tests-Parser/XMLFileHandleUTF32BETest.class.st deleted file mode 100644 index c91c8bcbd..000000000 --- a/src/XML-Tests-Parser/XMLFileHandleUTF32BETest.class.st +++ /dev/null @@ -1,20 +0,0 @@ -Class { - #name : #XMLFileHandleUTF32BETest, - #superclass : #XMLFileHandleTest, - #category : #'XML-Tests-Parser-Files' -} - -{ #category : #accessing } -XMLFileHandleUTF32BETest >> decodedFileContents [ - ^ XMLStreamAdapterTest decodedUTF32String -] - -{ #category : #accessing } -XMLFileHandleUTF32BETest >> encodedFileContents [ - ^ XMLStreamAdapterTest encodedUTF32BEBinary -] - -{ #category : #accessing } -XMLFileHandleUTF32BETest >> streamConverterClass [ - ^ XMLUTF32BigEndianStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLFileHandleUTF32LETest.class.st b/src/XML-Tests-Parser/XMLFileHandleUTF32LETest.class.st deleted file mode 100644 index df5988603..000000000 --- a/src/XML-Tests-Parser/XMLFileHandleUTF32LETest.class.st +++ /dev/null @@ -1,20 +0,0 @@ -Class { - #name : #XMLFileHandleUTF32LETest, - #superclass : #XMLFileHandleTest, - #category : #'XML-Tests-Parser-Files' -} - -{ #category : #accessing } -XMLFileHandleUTF32LETest >> decodedFileContents [ - ^ XMLStreamAdapterTest decodedUTF32String -] - -{ #category : #accessing } -XMLFileHandleUTF32LETest >> encodedFileContents [ - ^ XMLStreamAdapterTest encodedUTF32LEBinary -] - -{ #category : #accessing } -XMLFileHandleUTF32LETest >> streamConverterClass [ - ^ XMLUTF32LittleEndianStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLFileHandleUTF8Test.class.st b/src/XML-Tests-Parser/XMLFileHandleUTF8Test.class.st deleted file mode 100644 index 9503cde62..000000000 --- a/src/XML-Tests-Parser/XMLFileHandleUTF8Test.class.st +++ /dev/null @@ -1,20 +0,0 @@ -Class { - #name : #XMLFileHandleUTF8Test, - #superclass : #XMLFileHandleTest, - #category : #'XML-Tests-Parser-Files' -} - -{ #category : #accessing } -XMLFileHandleUTF8Test >> decodedFileContents [ - ^ XMLStreamAdapterTest decodedUTF8String -] - -{ #category : #accessing } -XMLFileHandleUTF8Test >> encodedFileContents [ - ^ XMLStreamAdapterTest encodedUTF8Binary -] - -{ #category : #accessing } -XMLFileHandleUTF8Test >> streamConverterClass [ - ^ XMLUTF8StreamConverter -] diff --git a/src/XML-Tests-Parser/XMLGeneralEntityDeclarationTest.class.st b/src/XML-Tests-Parser/XMLGeneralEntityDeclarationTest.class.st deleted file mode 100644 index 3b90fe535..000000000 --- a/src/XML-Tests-Parser/XMLGeneralEntityDeclarationTest.class.st +++ /dev/null @@ -1,67 +0,0 @@ -Class { - #name : #XMLGeneralEntityDeclarationTest, - #superclass : #XMLEntityDeclarationTest, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #testing } -XMLGeneralEntityDeclarationTest class >> isAbstract [ - ^ false -] - -{ #category : #accessing } -XMLGeneralEntityDeclarationTest >> nodeClass [ - ^ XMLGeneralEntityDeclaration -] - -{ #category : #tests } -XMLGeneralEntityDeclarationTest >> testIsUnparsed [ - super testIsUnparsed. - - self assert: (self newNode ndata: 'test') isUnparsed. -] - -{ #category : #tests } -XMLGeneralEntityDeclarationTest >> testNData [ - | declaration | - - declaration := self newNode. - self - assert: declaration ndata = ''; - assert: (declaration ndata: 'test') == declaration; - assert: declaration ndata = 'test'. -] - -{ #category : #tests } -XMLGeneralEntityDeclarationTest >> testNamePublicIDSystemIDNdata [ - | declaration | - - declaration := - self nodeClass - name: 'one' - publicID: 'two' - systemID: 'three' - ndata: 'four'. - self - assert: declaration class == self nodeClass; - assert: declaration name = 'one'; - assert: declaration publicID = 'two'; - assert: declaration systemID = 'three'; - assert: declaration ndata = 'four'. -] - -{ #category : #tests } -XMLGeneralEntityDeclarationTest >> testWriteXMLOn [ - self assert: - (self nodeClass name: 'one' replacement: 'two') printString = - ''. - self assert: - (self nodeClass name: 'one' publicID: 'two' systemID: 'three') printString = - ''. - self assert: - (self nodeClass name: 'one' publicID: '' systemID: 'three') printString = - ''. - self assert: - (self nodeClass name: 'one' publicID: 'two' systemID: 'three' ndata: 'four') printString = - ''. -] diff --git a/src/XML-Tests-Parser/XMLHTTPMIMETypeTest.class.st b/src/XML-Tests-Parser/XMLHTTPMIMETypeTest.class.st deleted file mode 100644 index 5bda81ffb..000000000 --- a/src/XML-Tests-Parser/XMLHTTPMIMETypeTest.class.st +++ /dev/null @@ -1,349 +0,0 @@ -Class { - #name : #XMLHTTPMIMETypeTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser-HTTP' -} - -{ #category : #asserting } -XMLHTTPMIMETypeTest >> assertMIMEType: aFirstMIMEType doesNotEqual: aSecondMIMEType [ - self - deny: aFirstMIMEType = aSecondMIMEType; - deny: aSecondMIMEType = aFirstMIMEType -] - -{ #category : #asserting } -XMLHTTPMIMETypeTest >> assertMIMEType: aFirstMIMEType equals: aSecondMIMEType [ - self - assert: aFirstMIMEType = aSecondMIMEType; - assert: aSecondMIMEType = aFirstMIMEType -] - -{ #category : #tests } -XMLHTTPMIMETypeTest >> testCharset [ - self assert: - (XMLHTTPMIMEType - mainType: 'text' - subType: 'plain') charset = XMLHTTPMIMEType defaultCharset. - self assert: - (XMLHTTPMIMEType - mainType: 'text' - subType: 'plain' - parameters: - (OrderedCollection with: 'charset' -> 'utf8')) charset = 'utf8'. - self assert: - (XMLHTTPMIMEType - mainType: 'text' - subType: 'plain' - parameters: - (OrderedCollection - with: 'charset' -> 'utf16' - with: 'charset' -> 'utf8')) charset = 'utf16'. -] - -{ #category : #tests } -XMLHTTPMIMETypeTest >> testEquals [ - self - assertMIMEType: - (XMLHTTPMIMEType - mainType: 'text' - subType: 'plain') - doesNotEqual: - (XMLHTTPMIMEType - mainType: 'text' - subType: 'html'). - self - assertMIMEType: - (XMLHTTPMIMEType - mainType: 'text' - subType: 'xml') - doesNotEqual: - (XMLHTTPMIMEType - mainType: 'application' - subType: 'xml'). - self - assertMIMEType: - (XMLHTTPMIMEType - mainType: 'text' - subType: 'plain') - equals: - (XMLHTTPMIMEType - mainType: 'Text' - subType: 'PLAIN'). - - self - assertMIMEType: - (XMLHTTPMIMEType - mainType: 'text' - subType: 'plain' - parameters: (OrderedCollection with: 'charset' -> 'utf-8')) - doesNotEqual: - (XMLHTTPMIMEType - mainType: 'text' - subType: 'plain' - parameters: (OrderedCollection with: 'charset' -> 'utf-16')). - self - assertMIMEType: - (XMLHTTPMIMEType - mainType: 'text' - subType: 'plain' - parameters: - (OrderedCollection - with: 'charset' -> 'utf-8' - with: 'name' -> 'value')) - doesNotEqual: - (XMLHTTPMIMEType - mainType: 'text' - subType: 'plain' - parameters: - (OrderedCollection - with: 'name' -> 'value' - with: 'charset' -> 'utf-16')). - self - assertMIMEType: - (XMLHTTPMIMEType - mainType: 'text' - subType: 'plain' - parameters: - (OrderedCollection - with: 'charset' -> 'utf-8' - with: 'name' -> 'value')) - equals: - (XMLHTTPMIMEType - mainType: 'Text' - subType: 'PLAIN' - parameters: - (OrderedCollection - with: 'Name' -> 'value' - with: 'CHARSET' -> 'utf-8')). - self - assertMIMEType: - (XMLHTTPMIMEType - mainType: 'text' - subType: 'plain' - parameters: - (OrderedCollection - with: 'charset' -> 'utf-8' - with: 'charset' -> 'utf-8' - with: 'name' -> 'value')) - equals: - (XMLHTTPMIMEType - mainType: 'Text' - subType: 'PLAIN' - parameters: - (OrderedCollection - with: 'Charset' -> 'utf-8' - with: 'NAME' -> 'value' - with: 'charset' -> 'utf-8')). -] - -{ #category : #tests } -XMLHTTPMIMETypeTest >> testHash [ - self assert: - (XMLHTTPMIMEType - mainType: 'text' - subType: 'plain') hash = - (XMLHTTPMIMEType - mainType: 'Text' - subType: 'PLAIN') hash. - - self assert: - (XMLHTTPMIMEType - mainType: 'text' - subType: 'plain' - parameters: - (OrderedCollection - with: 'charset' -> 'utf-8' - with: 'name' -> 'value')) hash = - (XMLHTTPMIMEType - mainType: 'Text' - subType: 'PLAIN' - parameters: - (OrderedCollection - with: 'Name' -> 'value' - with: 'CHARSET' -> 'utf-8')) hash. - - self assert: - (XMLHTTPMIMEType - mainType: 'text' - subType: 'plain' - parameters: - (OrderedCollection - with: 'charset' -> 'utf-8' - with: 'charset' -> 'utf-8' - with: 'name' -> 'value')) hash = - (XMLHTTPMIMEType - mainType: 'Text' - subType: 'PLAIN' - parameters: - (OrderedCollection - with: 'Charset' -> 'utf-8' - with: 'NAME' -> 'value' - with: 'charset' -> 'utf-8')) hash. -] - -{ #category : #tests } -XMLHTTPMIMETypeTest >> testMainType [ - #('{1}' - ' {1} ' - '{1}/' - ' {1} / ' - '{1};' - ' {1} ; ' - '{1}/xml' - ' {1} / xml ' - '{1};charset=utf8' - ' {1} ; charset=utf8 ') - do: [:template | - #(#('application') #('Application') #('APPLICATION')) - do: [:values | - self assert: - (XMLHTTPMIMEType fromString: - (template format: values)) mainType = 'application']]. - #('' - ' ' - '/' - ' / ' - ';' - ' ; ' - '/xml' - ' / xml ' - ';charset=utf8' - ' ; charset=utf8 ' - '/xml;charset=utf8' - ' / xml ; charset=utf8 ') - do: [:each | - self assert: (XMLHTTPMIMEType fromString: each) mainType = '']. -] - -{ #category : #tests } -XMLHTTPMIMETypeTest >> testParameters [ - #(';{1}={2};{3}={4}' - ' ; {1} = {2} ; {3} = {4} ' - ';{1}={2};{3}={4};' - ' ; {1} = {2} ; {3} = {4} ; ' - 'application;{1}={2};{3}={4}' - ' application ; {1} = {2} ; {3} = {4} ' - 'application;{1}={2};{3}={4};' - ' application ; {1} = {2} ; {3} = {4} ; ' - '/xml;{1}={2};{3}={4}' - ' / xml ; {1} = {2} ; {3} = {4} ' - '/xml;{1}={2};{3}={4};' - ' / xml ; {1} = {2} ; {3} = {4} ; ' - 'application/xml;{1}={2};{3}={4}' - ' application / xml ; {1} = {2} ; {3} = {4} ' - 'application/xml;{1}={2};{3}={4};' - ' application / xml ; {1} = {2} ; {3} = {4} ; ') - do: [:template | - #(#('charset' 'utf8' 'custom' 'value') - #('Charset' 'Utf8' 'Custom' 'Value') - #('CHARSET' 'UTF8' 'CUSTOM' 'VALUE') - #('charset' '' '' 'value') - #('' 'utf8' 'custom' '') - #('' '' '' '') - #('name' '" quoted value "' 'name2' '"quoted/value"') - #('name' '"quoted;value"' 'name2' '"quoted=value"') - #('name' '"quoted\"value"' 'name2' '"quotedvalue\\"') - #('duplicate' 'one' 'DUPLICATE' 'two' 'Duplicate' 'three')) - do: [:values | | mimeType parameters attributes | - mimeType := - XMLHTTPMIMEType fromString: - (template format: values). - "no GS #pairsCollect:" - parameters := OrderedCollection new. - attributes := Set new. - values pairsDo: [:key :value | | attribute | - attribute := key asLowercase. - (attributes includes: attribute) - ifFalse: [ - parameters addLast: attribute -> value. - attributes add: attribute]]. - self assert: mimeType parameters = parameters]]. - #('' - ' ' - '/' - ' / ' - ';' - ' ; ' - 'application' - ' application ' - 'application/' - ' application / ' - 'application;' - ' application ; ' - '/xml' - ' / xml ' - '/xml;' - ' / xml ; ' - 'application/xml' - ' application / xml ' - 'application/xml;' - ' application /xml ; ' - ';"invalid"=value' - ' ; "invalid" = value ' - 'application;"invalid"=value' - ' application ; "invalid" = value ' - 'application/xml;"invalid"=value' - ' application / xml ; "invalid" = value ') - do: [:each | - self assert: (XMLHTTPMIMEType fromString: each) parameters isEmpty]. -] - -{ #category : #tests } -XMLHTTPMIMETypeTest >> testPrintOn [ - self assert: - (XMLHTTPMIMEType - mainType: 'text' - subType: 'plain') printString = 'text/plain'. - self assert: - (XMLHTTPMIMEType - mainType: 'text' - subType: 'plain' - parameters: - (OrderedCollection with: 'charset' -> 'utf8')) printString = - 'text/plain; charset=utf8'. - self assert: - (XMLHTTPMIMEType - mainType: 'text' - subType: 'plain' - parameters: - (OrderedCollection - with: 'charset' -> 'utf8' - with: 'name' -> 'value')) printString = - 'text/plain; charset=utf8; name=value'. -] - -{ #category : #tests } -XMLHTTPMIMETypeTest >> testSubType [ - #('/{1}' - ' / {1} ' - 'application/{1}' - ' application / {1} ' - '/{1};' - ' / {1} ; ' - '/{1};charset=utf8' - ' / {1} ; charset=utf8 ' - 'application/{1};charset=utf8' - ' application / {1} ; charset=utf8') - do: [:template | - #(#('xml') #('Xml') #('XML')) - do: [:values | - self assert: - (XMLHTTPMIMEType fromString: - (template format: values)) subType = 'xml']]. - #('' - ' ' - '/' - ' / ' - ';' - ' ; ' - 'application' - ' application ' - 'application/' - ' application / ' - ';charset=utf8' - ' ; charset=utf8 ' - 'application/;charset=utf8' - ' application / ; charset=utf8 ') - do: [:each | - self assert: (XMLHTTPMIMEType fromString: each) subType = '']. -] diff --git a/src/XML-Tests-Parser/XMLHTTPMessageTest.class.st b/src/XML-Tests-Parser/XMLHTTPMessageTest.class.st deleted file mode 100644 index fffc901d7..000000000 --- a/src/XML-Tests-Parser/XMLHTTPMessageTest.class.st +++ /dev/null @@ -1,663 +0,0 @@ -" -Abstract; do not run. -" -Class { - #name : #XMLHTTPMessageTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser-HTTP' -} - -{ #category : #testing } -XMLHTTPMessageTest class >> isAbstract [ - ^ true -] - -{ #category : #testing } -XMLHTTPMessageTest class >> shouldInheritSelectors [ - ^ true -] - -{ #category : #asserting } -XMLHTTPMessageTest >> assertMessage: aMessage hasHeaders: anAssociationCollection [ - | addedHeaders | - - addedHeaders := OrderedCollection new. - "use #associationsDo: to support Dictionaries and SequenceableCollections" - anAssociationCollection associationsDo: [:each | - addedHeaders add: each]. - self assert: aMessage headers sorted = addedHeaders sorted. -] - -{ #category : #accessing } -XMLHTTPMessageTest >> headerDictionaryFrom: aSequenceableCollection [ - | headerDictionary | - - headerDictionary := Dictionary new. - aSequenceableCollection associationsDo: [:each | - headerDictionary add: each]. - ^ headerDictionary. -] - -{ #category : #accessing } -XMLHTTPMessageTest >> headerKeysFrom: aSequenceableCollection [ - ^ aSequenceableCollection collect: [:each | each key] -] - -{ #category : #accessing } -XMLHTTPMessageTest >> headerValuesAt: aKey from: aSequenceableCollection [ - | headerValues | - - headerValues := OrderedCollection new. - aSequenceableCollection do: [:each | - (each key = aKey) - ifTrue: [headerValues addLast: each value]]. - ^ headerValues. -] - -{ #category : #accessing } -XMLHTTPMessageTest >> headerValuesFrom: aSequenceableCollection [ - ^ aSequenceableCollection collect: [:each | each value] -] - -{ #category : #accessing } -XMLHTTPMessageTest >> headers [ - ^ OrderedCollection - with: 'X-Unique-One' -> 'zero' - with: 'X-Duplicate' -> 'one' - with: 'X-Unique-Two' -> 'two' - with: 'X-Duplicate' -> 'three' -] - -{ #category : #testing } -XMLHTTPMessageTest >> isSupported [ - ^ self messageClass hasSupportedImplementation -] - -{ #category : #accessing } -XMLHTTPMessageTest >> messageClass [ - ^ XMLHTTPMessage -] - -{ #category : #'instance creation' } -XMLHTTPMessageTest >> newMessage [ - ^ self messageClass new -] - -{ #category : #tests } -XMLHTTPMessageTest >> testAddHeader [ - | message addedHeaders | - - self isSupported - ifFalse: [^ self]. - - message := self newMessage. - addedHeaders := message headers. - self headers do: [:each | - self deny: (message headers includes: each). - - self assert: (message addHeader: each) = each. - addedHeaders addLast: each. - self - assertMessage: message - hasHeaders: addedHeaders]. - - self headers do: [:each | - self assert: (message addHeader: each) = each. - addedHeaders addLast: each. - self - assertMessage: message - hasHeaders: addedHeaders]. -] - -{ #category : #tests } -XMLHTTPMessageTest >> testContent [ - | message | - - self isSupported - ifFalse: [^ self]. - - message := self newMessage. - self - assert: message content = ''; - assert: (message content: 'test') == message; - assert: message content = 'test'. -] - -{ #category : #tests } -XMLHTTPMessageTest >> testContentCharset [ - | message firstType secondType | - - self isSupported - ifFalse: [^ self]. - - message := self newMessage. - firstType := - XMLHTTPMIMEType - mainType: 'application' - subType: 'xml' - parameters: (OrderedCollection with: 'charset' -> 'utf8'). - secondType := - XMLHTTPMIMEType - mainType: 'text' - subType: 'html'. - self - assert: message contentType isNil; - assert: (message contentType: firstType) == message; - assert: message contentCharset = firstType charset; - assert: (message contentType: secondType) == message; - assert: message contentCharset = secondType charset; - assert: (message contentType: nil) == message; - assert: message contentCharset = XMLHTTPMIMEType defaultCharset. - - message - headerAt: 'Content-Type' - put: firstType asString. - self assert: message contentCharset = firstType charset. - - message removeHeaderAt: 'Content-Type'. - self assert: message contentCharset = XMLHTTPMIMEType defaultCharset. -] - -{ #category : #tests } -XMLHTTPMessageTest >> testContentEncoding [ - | message defaultValue absentValue | - - self isSupported - ifFalse: [^ self]. - - message := self newMessage. - defaultValue := OrderedCollection new. - absentValue := defaultValue. - self - assert: message contentEncoding = defaultValue; - assert: (message contentEncoding: 'one') == message; - assert: message contentEncoding = #('one') asOrderedCollection; - assert: (message contentEncoding: ' one, identity, two') == message; - assert: message contentEncoding = #('one' 'two') asOrderedCollection; - assert: (message contentEncoding: #('one')) == message; - assert: message contentEncoding = #('one') asOrderedCollection; - assert: (message contentEncoding: #('one' 'identity' 'two')) == message; - assert: message contentEncoding = #('one' 'two') asOrderedCollection; - assert: (message contentEncoding: '') == message; - assert: message contentEncoding = absentValue; - assert: (message contentEncoding: #()) == message; - assert: message contentEncoding = absentValue. - - message - headerAt: 'Content-Encoding' - put: 'identity,one,identity,two,identity,three,identity'. - self assert: - message contentEncoding = - #('one' 'two' 'three') asOrderedCollection. - - message removeHeaderAt: 'Content-Encoding'. - self assert: message contentEncoding = absentValue. -] - -{ #category : #tests } -XMLHTTPMessageTest >> testContentLength [ - | message | - - self isSupported - ifFalse: [^ self]. - - message := self newMessage. - self - assert: message contentLength isNil; - assert: (message contentLength: 100) == message; - assert: message contentLength = 100; - assert: (message contentLength: nil) == message; - assert: message contentLength isNil; - assert: (message contentLength: nil) == message; - assert: message contentLength isNil. - - message - headerAt: 'Content-Length' - put: '200'. - self assert: message contentLength = 200. - - message removeHeaderAt: 'Content-Length'. - self assert: message contentLength isNil. -] - -{ #category : #tests } -XMLHTTPMessageTest >> testContentType [ - | message firstType secondType | - - self isSupported - ifFalse: [^ self]. - - message := self newMessage. - firstType := - XMLHTTPMIMEType - mainType: 'application' - subType: 'xml'. - secondType := - XMLHTTPMIMEType - mainType: 'text' - subType: 'html'. - self - assert: message contentType isNil; - assert: (message contentType: firstType) == message; - assert: message contentType = firstType; - deny: message contentType = secondType; - assert: (message contentType: nil) == message; - assert: message contentType isNil; - assert: (message contentType: nil) == message; - assert: message contentType isNil. - - message - headerAt: 'Content-Type' - put: secondType asString. - self - assert: message contentType = secondType; - deny: message contentType = firstType. - - message removeHeaderAt: 'Content-Type'. - self assert: message contentType isNil. -] - -{ #category : #tests } -XMLHTTPMessageTest >> testHasContent [ - | message | - - self isSupported - ifFalse: [^ self]. - - message := self newMessage. - self deny: message hasContent. - - message content: 'test'. - self assert: message hasContent. -] - -{ #category : #tests } -XMLHTTPMessageTest >> testHasHeaders [ - | message | - - self isSupported - ifFalse: [^ self]. - - message := self newMessage. - self assert: message hasHeaders = message headers notEmpty. - - message removeHeaders. - self deny: message hasHeaders. - - message addHeader: self headers first. - self assert: message hasHeaders. -] - -{ #category : #tests } -XMLHTTPMessageTest >> testHeaderAt [ - | message addedHeaderDictionary | - - self isSupported - ifFalse: [^ self]. - - message := self newMessage. - addedHeaderDictionary := self headerDictionaryFrom: message headers. - self headers do: [:each | - self assert: - (message headerAt: each key) = - (addedHeaderDictionary - at: each key - ifAbsent: ['']). - - message - headerAt: each key - put: each value. - addedHeaderDictionary add: each. - self assert: (message headerAt: each key) = each value]. - - self headers do: [:each | - message addHeader: each]. - addedHeaderDictionary keysAndValuesDo: [:key :value | - self assert: (message headerAt: key) = value]. -] - -{ #category : #tests } -XMLHTTPMessageTest >> testHeaderAtIfAbsent [ - | message addedHeaderDictionary | - - self isSupported - ifFalse: [^ self]. - - message := self newMessage. - addedHeaderDictionary := self headerDictionaryFrom: message headers. - self headers do: [:each | - self assert: - (message - headerAt: each key - ifAbsent: [#absent]) = - (addedHeaderDictionary - at: each key - ifAbsent: [#absent]). - - message - headerAt: each key - put: each value. - addedHeaderDictionary add: each. - self assert: - (message - headerAt: each key - ifAbsent: [self fail]) = each value]. - - self headers do: [:each | - message addHeader: each]. - addedHeaderDictionary keysAndValuesDo: [:key :value | - self assert: - (message - headerAt: key - ifAbsent: [self fail]) = value]. -] - -{ #category : #tests } -XMLHTTPMessageTest >> testHeaderAtIfAbsentPut [ - | message addedHeaderDictionary | - - self isSupported - ifFalse: [^ self]. - - message := self newMessage. - addedHeaderDictionary := self headerDictionaryFrom: message headers. - self headers do: [:each | - self assert: - (message - headerAt: each key - ifAbsentPut: [each value]) = - (addedHeaderDictionary - at: each key - ifAbsentPut: [each value]). - - self assert: - (message headerAt: each key) = - (addedHeaderDictionary at: each key). - self - assertMessage: message - hasHeaders: addedHeaderDictionary associations]. -] - -{ #category : #tests } -XMLHTTPMessageTest >> testHeaderAtPut [ - | message addedHeaderDictionary | - - self isSupported - ifFalse: [^ self]. - - message := self newMessage. - addedHeaderDictionary := self headerDictionaryFrom: message headers. - self headers do: [:each | - self assert: - (message - headerAt: each key - put: each value) = each value. - addedHeaderDictionary add: each. - self assert: (message headerAt: each key) = each value. - self - assertMessage: message - hasHeaders: addedHeaderDictionary associations]. -] - -{ #category : #tests } -XMLHTTPMessageTest >> testHeaderKeys [ - | message addedHeaderKeys | - - self isSupported - ifFalse: [^ self]. - - message := self newMessage. - addedHeaderKeys := self headerKeysFrom: message headers. - self headers do: [:each | - self assert: message headerKeys sorted = addedHeaderKeys sorted. - - message addHeader: each. - addedHeaderKeys add: each key. - self assert: message headerKeys sorted = addedHeaderKeys sorted]. -] - -{ #category : #tests } -XMLHTTPMessageTest >> testHeaderKeysAndValuesDo [ - | message addedHeaders | - - self isSupported - ifFalse: [^ self]. - - message := self newMessage. - addedHeaders := message headers. - self - xmlShould: [:block | message headerKeysAndValuesDo: block] - unorderedEnumerate: (self headerKeysFrom: addedHeaders) - and: (self headerValuesFrom: addedHeaders). - - self headers do: [:each | - message addHeader: each. - addedHeaders addLast: each]. - self - xmlShould: [:block | message headerKeysAndValuesDo: block] - unorderedEnumerate: (self headerKeysFrom: addedHeaders) - and: (self headerValuesFrom: addedHeaders). -] - -{ #category : #tests } -XMLHTTPMessageTest >> testHeaderKeysDo [ - | message addedHeaders | - - self isSupported - ifFalse: [^ self]. - - message := self newMessage. - addedHeaders := message headers. - self - xmlShould: [:block | message headerKeysDo: block] - unorderedEnumerate: (self headerKeysFrom: addedHeaders). - - self headers do: [:each | - message addHeader: each. - addedHeaders addLast: each]. - self - xmlShould: [:block | message headerKeysDo: block] - unorderedEnumerate: (self headerKeysFrom: addedHeaders). -] - -{ #category : #tests } -XMLHTTPMessageTest >> testHeaderValuesAt [ - | message addedHeaders | - - self isSupported - ifFalse: [^ self]. - - message := self newMessage. - addedHeaders := message headers. - self headers do: [:each | - self assert: - (message headerValuesAt: each key) sorted = - (self - headerValuesAt: each key - from: addedHeaders) sorted. - - message addHeader: each. - addedHeaders addLast: each. - self assert: - (message headerValuesAt: each key) sorted = - (self - headerValuesAt: each key - from: addedHeaders) sorted]. -] - -{ #category : #tests } -XMLHTTPMessageTest >> testHeaderValuesAtAdd [ - | message addedHeaders | - - self isSupported - ifFalse: [^ self]. - - message := self newMessage. - addedHeaders := message headers. - self headers do: [:each | - self deny: (message headers includes: each). - - self assert: - (message - headerValuesAt: each key - add: each value) = each value. - addedHeaders addLast: each. - self - assertMessage: message - hasHeaders: addedHeaders]. - - self headers do: [:each | - self assert: - (message - headerValuesAt: each key - add: each value) = each value. - addedHeaders addLast: each. - self - assertMessage: message - hasHeaders: addedHeaders]. -] - -{ #category : #tests } -XMLHTTPMessageTest >> testHeaderValuesAtDo [ - | message addedHeaders | - - self isSupported - ifFalse: [^ self]. - - message := self newMessage. - addedHeaders := message headers. - (self headerKeysFrom: addedHeaders) do: [:each | - self - xmlShould: [:block | - message - headerValuesAt: each - do: block] - unorderedEnumerate: - (self - headerValuesAt: each - from: addedHeaders)]. - - self headers do: [:each | - message addHeader: each. - addedHeaders addLast: each]. - (self headerKeysFrom: addedHeaders) do: [:each | - self - xmlShould: [:block | - message - headerValuesAt: each - do: block] - unorderedEnumerate: - (self - headerValuesAt: each - from: addedHeaders)]. -] - -{ #category : #tests } -XMLHTTPMessageTest >> testHeaders [ - | message addedHeaders | - - self isSupported - ifFalse: [^ self]. - - message := self newMessage. - addedHeaders := message headers. - self - assert: addedHeaders class == OrderedCollection; - assert: addedHeaders = message headers; - deny: addedHeaders == message headers. -] - -{ #category : #tests } -XMLHTTPMessageTest >> testIncludesHeaderAt [ - | message addedHeaderKeys | - - self isSupported - ifFalse: [^ self]. - - message := self newMessage. - addedHeaderKeys := self headerKeysFrom: message headers. - self headers do: [:each | - self assert: - (message includesHeaderAt: each key) = - (addedHeaderKeys includes: each key). - - message addHeader: each. - addedHeaderKeys add: each key. - self assert: (message includesHeaderAt: each key)]. -] - -{ #category : #tests } -XMLHTTPMessageTest >> testRemoveHeaderAt [ - | message addedHeaders addedHeaderKeys | - - self isSupported - ifFalse: [^ self]. - - message := self newMessage. - addedHeaders := message headers. - self headers do: [:each | - message addHeader: each. - addedHeaders addLast: each]. - addedHeaderKeys := (addedHeaders collect: [:each | each key]) asSet. - addedHeaderKeys do: [:each | - self assert: - (message removeHeaderAt: each) sorted = - (self - headerValuesAt: each - from: addedHeaders) sorted. - self - should: [message removeHeaderAt: each] - raise: XMLHTTPException]. -] - -{ #category : #tests } -XMLHTTPMessageTest >> testRemoveHeaderAtIfAbsent [ - | message addedHeaders addedHeaderKeys | - - self isSupported - ifFalse: [^ self]. - - message := self newMessage. - addedHeaders := message headers. - self headers do: [:each | - message addHeader: each. - addedHeaders addLast: each]. - addedHeaderKeys := (addedHeaders collect: [:each | each key]) asSet. - addedHeaderKeys do: [:each | - self assert: - (message - removeHeaderAt: each - ifAbsent: [self fail]) sorted = - (self - headerValuesAt: each - from: addedHeaders) sorted. - self assert: - (message - removeHeaderAt: each - ifAbsent: [#absent]) = #absent]. -] - -{ #category : #tests } -XMLHTTPMessageTest >> testRemoveHeaders [ - | message empty | - - self isSupported - ifFalse: [^ self]. - - message := self newMessage. - empty := OrderedCollection new. - self assert: message removeHeaders == message. - self - assertMessage: message - hasHeaders: empty. - - self headers do: [:each | - message addHeader: each]. - self - assertMessage: message - hasHeaders: self headers. - self assert: message removeHeaders == message. - self - assertMessage: message - hasHeaders: empty. -] diff --git a/src/XML-Tests-Parser/XMLHTTPRequestTest.class.st b/src/XML-Tests-Parser/XMLHTTPRequestTest.class.st deleted file mode 100644 index e7884925a..000000000 --- a/src/XML-Tests-Parser/XMLHTTPRequestTest.class.st +++ /dev/null @@ -1,137 +0,0 @@ -Class { - #name : #XMLHTTPRequestTest, - #superclass : #XMLHTTPMessageTest, - #category : #'XML-Tests-Parser-HTTP' -} - -{ #category : #testing } -XMLHTTPRequestTest class >> isAbstract [ - ^ false -] - -{ #category : #accessing } -XMLHTTPRequestTest >> defaultTimeout [ - ^ 30 -] - -{ #category : #accessing } -XMLHTTPRequestTest >> messageClass [ - ^ XMLHTTPRequest -] - -{ #category : #'instance creation' } -XMLHTTPRequestTest >> newMessage [ - ^ self newRequestWithURL -] - -{ #category : #'instance creation' } -XMLHTTPRequestTest >> newRequestWithURL [ - ^ self messageClass url: self url -] - -{ #category : #tests } -XMLHTTPRequestTest >> testAcceptEncoding [ - | request defaultValue absentValue | - - self isSupported - ifFalse: [^ self]. - - request := self newRequestWithURL. - defaultValue := request defaultAcceptEncoding asOrderedCollection. - absentValue := OrderedCollection new. - self - assert: request acceptEncoding sorted = defaultValue sorted; - assert: (request acceptEncoding: 'one') == request; - assert: request acceptEncoding = #('one') asOrderedCollection; - assert: (request acceptEncoding: ' one, identity, two') == request; - assert: request acceptEncoding = #('one' 'two') asOrderedCollection; - assert: (request acceptEncoding: #('one')) == request; - assert: request acceptEncoding = #('one') asOrderedCollection; - assert: (request acceptEncoding: #('one' 'identity' 'two')) == request; - assert: request acceptEncoding = #('one' 'two') asOrderedCollection; - assert: (request acceptEncoding: '') == request; - assert: request acceptEncoding = absentValue; - assert: (request acceptEncoding: #()) == request; - assert: request acceptEncoding = absentValue. - - request - headerAt: 'Accept-Encoding' - put: 'identity,one,identity,two,identity,three,identity'. - self assert: - request acceptEncoding = - #('one' 'two' 'three') asOrderedCollection. - - request removeHeaderAt: 'Accept-Encoding'. - self assert: request acceptEncoding = absentValue. -] - -{ #category : #tests } -XMLHTTPRequestTest >> testAsXMLHTTPRequest [ - | request | - - self isSupported - ifFalse: [^ self]. - - request := self newMessage. - self assert: request asXMLHTTPRequest == request. -] - -{ #category : #tests } -XMLHTTPRequestTest >> testEnableCompression [ - | request | - - self isSupported - ifFalse: [^ self]. - - (request := self newRequestWithURL) acceptEncoding: ''. - self - assert: request enableCompression == request; - deny: request acceptEncoding isEmpty. - request acceptEncoding do: [:each | - self assert: - (XMLHTTPDecompressingReadStreamAdapterFactory - classForCompression: each) notNil]. -] - -{ #category : #tests } -XMLHTTPRequestTest >> testMethod [ - | request | - - self isSupported - ifFalse: [^ self]. - - request := self newMessage. - self - assert: request method = 'GET'; - deny: request method isSymbol; - assert: (request method: 'POST') == request; - assert: request method = 'POST'; - deny: request method isSymbol. -] - -{ #category : #tests } -XMLHTTPRequestTest >> testTimeout [ - | request | - - self isSupported - ifFalse: [^ self]. - - request := self newMessage. - self - assert: request timeout = self defaultTimeout; - assert: (request timeout: self defaultTimeout + 1) == request; - assert: request timeout = (self defaultTimeout + 1). -] - -{ #category : #tests } -XMLHTTPRequestTest >> testURL [ - self isSupported - ifFalse: [^ self]. - - self assert: self newRequestWithURL url = self url. -] - -{ #category : #accessing } -XMLHTTPRequestTest >> url [ - ^ 'http://pharo.org' -] diff --git a/src/XML-Tests-Parser/XMLHTTPResponseTest.class.st b/src/XML-Tests-Parser/XMLHTTPResponseTest.class.st deleted file mode 100644 index 5e10bb1ff..000000000 --- a/src/XML-Tests-Parser/XMLHTTPResponseTest.class.st +++ /dev/null @@ -1,74 +0,0 @@ -Class { - #name : #XMLHTTPResponseTest, - #superclass : #XMLHTTPMessageTest, - #category : #'XML-Tests-Parser-HTTP' -} - -{ #category : #testing } -XMLHTTPResponseTest class >> isAbstract [ - ^ false -] - -{ #category : #accessing } -XMLHTTPResponseTest >> messageClass [ - ^ XMLHTTPResponse -] - -{ #category : #tests } -XMLHTTPResponseTest >> testProtocol [ - | response | - - self isSupported - ifFalse: [^ self]. - - response := self newMessage. - self - assert: response protocol = 'HTTP/1.1'; - assert: (response protocol: 'HTTP/1.0') == response; - assert: response protocol = 'HTTP/1.0'. -] - -{ #category : #tests } -XMLHTTPResponseTest >> testStatusCode [ - | response | - - self isSupported - ifFalse: [^ self]. - - response := self newMessage. - self - assert: response statusCode = 200; - assert: (response statusCode: 404) == response; - assert: response statusCode = 404. -] - -{ #category : #tests } -XMLHTTPResponseTest >> testStatusDescription [ - | response | - - self isSupported - ifFalse: [^ self]. - - response := self newMessage. - self assert: response statusDescription = 'OK'. - - response statusCode: 404. - self assert: response statusDescription = 'Not Found'. -] - -{ #category : #tests } -XMLHTTPResponseTest >> testStatusLine [ - | response | - - self isSupported - ifFalse: [^ self]. - - response := self newMessage. - self assert: response statusLine = 'HTTP/1.1 200 OK'. - - response statusCode: 404. - self assert: response statusLine = 'HTTP/1.1 404 Not Found'. - - response protocol: 'HTTP/1.0'. - self assert: response statusLine = 'HTTP/1.0 404 Not Found'. -] diff --git a/src/XML-Tests-Parser/XMLImplicitUTF16BigEndianStreamConverterTest.class.st b/src/XML-Tests-Parser/XMLImplicitUTF16BigEndianStreamConverterTest.class.st deleted file mode 100644 index f98e4f900..000000000 --- a/src/XML-Tests-Parser/XMLImplicitUTF16BigEndianStreamConverterTest.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #XMLImplicitUTF16BigEndianStreamConverterTest, - #superclass : #XMLUTF16BigEndianStreamConverterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLImplicitUTF16BigEndianStreamConverterTest >> isImplicit [ - ^ true -] - -{ #category : #accessing } -XMLImplicitUTF16BigEndianStreamConverterTest >> streamConverterClass [ - ^ XMLImplicitUTF16BigEndianStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLImplicitUTF16LittleEndianStreamConverterTest.class.st b/src/XML-Tests-Parser/XMLImplicitUTF16LittleEndianStreamConverterTest.class.st deleted file mode 100644 index 6f39526b0..000000000 --- a/src/XML-Tests-Parser/XMLImplicitUTF16LittleEndianStreamConverterTest.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #XMLImplicitUTF16LittleEndianStreamConverterTest, - #superclass : #XMLUTF16LittleEndianStreamConverterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLImplicitUTF16LittleEndianStreamConverterTest >> isImplicit [ - ^ true -] - -{ #category : #accessing } -XMLImplicitUTF16LittleEndianStreamConverterTest >> streamConverterClass [ - ^ XMLImplicitUTF16LittleEndianStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLImplicitUTF32BigEndianStreamConverterTest.class.st b/src/XML-Tests-Parser/XMLImplicitUTF32BigEndianStreamConverterTest.class.st deleted file mode 100644 index b6cd3a83e..000000000 --- a/src/XML-Tests-Parser/XMLImplicitUTF32BigEndianStreamConverterTest.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #XMLImplicitUTF32BigEndianStreamConverterTest, - #superclass : #XMLUTF32BigEndianStreamConverterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLImplicitUTF32BigEndianStreamConverterTest >> isImplicit [ - ^ true -] - -{ #category : #accessing } -XMLImplicitUTF32BigEndianStreamConverterTest >> streamConverterClass [ - ^ XMLImplicitUTF32BigEndianStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLImplicitUTF32LittleEndianStreamConverterTest.class.st b/src/XML-Tests-Parser/XMLImplicitUTF32LittleEndianStreamConverterTest.class.st deleted file mode 100644 index 777668401..000000000 --- a/src/XML-Tests-Parser/XMLImplicitUTF32LittleEndianStreamConverterTest.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #XMLImplicitUTF32LittleEndianStreamConverterTest, - #superclass : #XMLUTF32LittleEndianStreamConverterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLImplicitUTF32LittleEndianStreamConverterTest >> isImplicit [ - ^ true -] - -{ #category : #accessing } -XMLImplicitUTF32LittleEndianStreamConverterTest >> streamConverterClass [ - ^ XMLImplicitUTF32LittleEndianStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLImplicitUTF8StreamConverterTest.class.st b/src/XML-Tests-Parser/XMLImplicitUTF8StreamConverterTest.class.st deleted file mode 100644 index 4c910bca2..000000000 --- a/src/XML-Tests-Parser/XMLImplicitUTF8StreamConverterTest.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #XMLImplicitUTF8StreamConverterTest, - #superclass : #XMLUTF8StreamConverterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLImplicitUTF8StreamConverterTest >> isImplicit [ - ^ true -] - -{ #category : #accessing } -XMLImplicitUTF8StreamConverterTest >> streamConverterClass [ - ^ XMLImplicitUTF8StreamConverter -] diff --git a/src/XML-Tests-Parser/XMLIntegerReaderTest.class.st b/src/XML-Tests-Parser/XMLIntegerReaderTest.class.st deleted file mode 100644 index 3ad62b91c..000000000 --- a/src/XML-Tests-Parser/XMLIntegerReaderTest.class.st +++ /dev/null @@ -1,180 +0,0 @@ -Class { - #name : #XMLIntegerReaderTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser-Utils' -} - -{ #category : #testing } -XMLIntegerReaderTest class >> shouldInheritSelectors [ - ^ true -] - -{ #category : #accessing } -XMLIntegerReaderTest >> integerReaderClass [ - ^ XMLIntegerReader -] - -{ #category : #accessing } -XMLIntegerReaderTest >> maxBase [ - ^ self integerReaderClass maxBase -] - -{ #category : #accessing } -XMLIntegerReaderTest >> maxIntegerValue [ - ^ self integerReaderClass maxIntegerValue -] - -{ #category : #'instance creation' } -XMLIntegerReaderTest >> newIntegerReaderOn: aStream [ - ^ self integerReaderClass on: aStream -] - -{ #category : #'instance creation' } -XMLIntegerReaderTest >> newStreamOn: aCollection [ - ^ XMLExceptionRaisingReadStream on: aCollection -] - -{ #category : #tests } -XMLIntegerReaderTest >> testBaseMarker [ - 2 to: self maxBase do: [:base | | stream defaultBase | - defaultBase := (base - 1) max: 2. - stream := self newStreamOn: ((base printStringBase: base) copyWithFirst: $#). - self - assert: - (self integerReaderClass - readFrom: stream - withBase: base - andPrefixes: '@#$' - orBase: defaultBase) = base; - assert: stream atEnd. - - stream := self newStreamOn: (base printStringBase: defaultBase). - self - assert: - (self integerReaderClass - readFrom: stream - withBase: base - andPrefixes: '@#$' - orBase: defaultBase) = base; - assert: stream atEnd] -] - -{ #category : #tests } -XMLIntegerReaderTest >> testBases [ - 2 to: self maxBase do: [:base | | stream | - (0 to: base), (base + 1 to: base * 10 by: base) do: [:i | - stream := self newStreamOn: (i printStringBase: base). - self - assert: (self integerReaderClass readFrom: stream withBase: base) = i; - assert: stream atEnd]]. - self - should: [ - self integerReaderClass - readFrom: (self newStreamOn: '1') - withBase: 1] - raise: Error. - self - should: [ - self integerReaderClass - readFrom: (self newStreamOn: '1') - withBase: self maxBase + 1] - raise: Error. -] - -{ #category : #tests } -XMLIntegerReaderTest >> testMaxIntegerValue [ - | maxValue | - - (maxValue := self maxIntegerValue) - ifNil: [^ self]. - 2 to: self maxBase do: [:base | - self assert: - (self integerReaderClass - readFrom: (self newStreamOn: (maxValue printStringBase: base)) - withBase: base) = maxValue. - 1 to: base do: [:i | - self assert: - (self integerReaderClass - readFrom: (self newStreamOn: ((maxValue + i) printStringBase: base)) - withBase: base) = maxValue]]. -] - -{ #category : #tests } -XMLIntegerReaderTest >> testNonDigit [ - 2 to: self maxBase do: [:base | | digitInterval letterInterval uppercaseLetterInterval | - base > 10 - ifTrue: [ - digitInterval := $0 asciiValue to: $9 asciiValue. - letterInterval := $a asciiValue to: $a asciiValue + (base - 11). - uppercaseLetterInterval := $A asciiValue to: $A asciiValue + (base - 11)] - ifFalse: [ - digitInterval := $0 asciiValue to: $0 asciiValue + base - 1. - letterInterval := #(). - uppercaseLetterInterval := #()]. - 0 to: 256 do: [:each | | char reader | - char := each asCharacter. - reader := self newIntegerReaderOn: (self newStreamOn: char asString). - ((digitInterval includes: each) - or: [(letterInterval includes: each) - or: [uppercaseLetterInterval includes: each]]) - ifTrue: [ - self - assert: (reader nextIntegerWithBase: base) notNil; - assert: reader atEnd] - ifFalse: [ - self - assert: (reader nextIntegerWithBase: base) isNil; - deny: reader atEnd; - assert: reader next = char; - assert: reader atEnd]]] -] - -{ #category : #tests } -XMLIntegerReaderTest >> testPositioning [ - | reader string | - - string := 'test'. - reader := self newIntegerReaderOn: (self newStreamOn: string). - string do: [:each | - self - deny: reader atEnd; - assert: reader peek = each; - assert: reader next = each]. - self - assert: reader atEnd; - assert: reader peek isNil; - assert: reader next isNil. -] - -{ #category : #tests } -XMLIntegerReaderTest >> testPrintStream [ - | printStream reader | - - printStream := String new writeStream. - (reader := self newIntegerReaderOn: (self newStreamOn: '123xABChdefO11')) - printStream: printStream. - self - assert: (reader nextIntegerWithBase: 10) = 123; - assert: printStream contents = '123'; - assert: (reader nextIntegerWithBase: 16 andPrefixes: 'x' orBase: 10) = 2748; - assert: printStream contents = '123xABC'; - assert: (reader nextIntegerWithBase: 16 andPrefixes: 'h' orBase: 10) = 3567; - assert: printStream contents = '123xABChdef'. - - reader printStream: nil. - self - assert: (reader nextIntegerWithBase: 8 andPrefixes: 'oO' orBase: 10) = 9; - assert: printStream contents = '123xABChdef'; - assert: reader atEnd. -] - -{ #category : #tests } -XMLIntegerReaderTest >> testReadLimit [ - 2 to: self maxBase do: [:base | | stream | - "101 regardless of base" - stream := self newStreamOn: (base * base + 1 printStringBase: base). - self - assert: (self integerReaderClass readFrom: stream withBase: base upToLimit: 2) = base; - deny: stream atEnd; - assert: stream next == $1] -] diff --git a/src/XML-Tests-Parser/XMLKeyValueCacheTest.class.st b/src/XML-Tests-Parser/XMLKeyValueCacheTest.class.st deleted file mode 100644 index 195f5189b..000000000 --- a/src/XML-Tests-Parser/XMLKeyValueCacheTest.class.st +++ /dev/null @@ -1,516 +0,0 @@ -Class { - #name : #XMLKeyValueCacheTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser-Utils' -} - -{ #category : #accessing } -XMLKeyValueCacheTest >> associations [ - | associations | - - associations := Array new: self maxSize. - 1 to: associations size do: [:i | - associations - at: i - put: ('key', i asString) -> ('value', i asString)]. - ^ associations. -] - -{ #category : #accessing } -XMLKeyValueCacheTest >> cacheClass [ - ^ XMLKeyValueCache -] - -{ #category : #accessing } -XMLKeyValueCacheTest >> defaultMaxSize [ - ^ 32 -] - -{ #category : #accessing } -XMLKeyValueCacheTest >> keys [ - ^ self associations collect: [:each | each key] -] - -{ #category : #enumerating } -XMLKeyValueCacheTest >> keysAndValuesDo: aBlock [ - self associations do: [:each | - aBlock - value: each key - value: each value] -] - -{ #category : #accessing } -XMLKeyValueCacheTest >> maxSize [ - ^ 20 -] - -{ #category : #'instance creation' } -XMLKeyValueCacheTest >> newCache [ - ^ self cacheClass new -] - -{ #category : #'instance creation' } -XMLKeyValueCacheTest >> newCacheWithEntries [ - | cache | - - cache := self cacheClass maxSize: self maxSize. - self keysAndValuesDo: [:key :value | - cache - at: key - put: value]. - ^ cache. -] - -{ #category : #asserting } -XMLKeyValueCacheTest >> should: aBlock inAnyOrderEnumerate: aCollection [ - | enumerated | - - enumerated := OrderedCollection new. - aBlock value: [:each | enumerated addLast: each]. - self - assert: enumerated size = aCollection size; - assert: enumerated asSet = aCollection asSet. -] - -{ #category : #asserting } -XMLKeyValueCacheTest >> should: aBlock inAnyOrderEnumerateKeysAndValues: anAssociationCollection [ - | enumerated | - - enumerated := OrderedCollection new. - aBlock value: [:first :second | - enumerated addLast: first -> second]. - self - assert: enumerated size = anAssociationCollection size; - assert: enumerated asSet = anAssociationCollection asSet. -] - -{ #category : #tests } -XMLKeyValueCacheTest >> testAt [ - | cache | - - cache := self newCacheWithEntries. - self keysAndValuesDo: [:key :value | - self assert: (cache at: key) = value]. - self assert: (cache at: 'absentKey') isNil. -] - -{ #category : #tests } -XMLKeyValueCacheTest >> testAtIfAbsent [ - | cache | - - cache := self newCacheWithEntries. - self keysAndValuesDo: [:key :value | - self assert: - (cache - at: key - ifAbsent: [self fail]) = value]. - self assert: - (cache - at: 'absentKey' - ifAbsent: ['absentValue']) = 'absentValue'. - - "the ifAbsent: block can modify the cache too, so make sure - it is cleared if needed to make room" - self assert: - (cache - at: 'absentKey' - ifAbsent: [ - cache - at: 'newKey' - put: 'newValue']) = 'newValue'. - self - assert: cache size = 1; - assert: (cache at: 'newKey') = 'newValue'. -] - -{ #category : #tests } -XMLKeyValueCacheTest >> testAtIfAbsentPut [ - | cache | - - cache := self newCacheWithEntries. - self keysAndValuesDo: [:key :value | - self assert: - (cache - at: key - ifAbsentPut: [self fail]) = value. - self - assert: (cache at: key) = value; - assert: cache size = self maxSize]. - self assert: - (cache - at: 'newKey' - ifAbsentPut: ['newValue']) = 'newValue'. - self - assert: (cache at: 'newKey') = 'newValue'; - assert: cache size = 1. - - "the ifAbsentPut: block can modify the cache too, so make sure - it is cleared if needed to make room" - cache := self newCacheWithEntries. - self assert: - (cache - at: 'newKey' - ifAbsentPut: [ - cache - at: 'newKeyTwo' - put: 'newValue']) = 'newValue'. - self - assert: cache size = 2; - assert: (cache at: 'newKey') = 'newValue'; - assert: (cache at: 'newKeyTwo') = 'newValue'. -] - -{ #category : #tests } -XMLKeyValueCacheTest >> testAtIfPresent [ - | cache | - - cache := self newCacheWithEntries. - self keysAndValuesDo: [:key :value | - self assert: - (cache - at: key - ifPresent: [:each | #present -> each]) = (#present -> value). - "ensure cull: is used" - self assert: - (cache - at: key - ifPresent: [#present]) = #present]. - self assert: - (cache - at: 'absentKey' - ifPresent: [self fail]) isNil. - - "the ifPresent: block can modify the cache too, so make sure - it is cleared if needed to make room" - self assert: - (cache - at: 'absentKey' - ifAbsent: [ - cache - at: 'newKey' - put: 'newValue']) = 'newValue'. - self - assert: cache size = 1; - assert: (cache at: 'newKey') = 'newValue'. -] - -{ #category : #tests } -XMLKeyValueCacheTest >> testAtIfPresentPut [ - | cache | - - cache := self newCacheWithEntries. - self keysAndValuesDo: [:key :value | - self assert: - (cache - at: key - ifPresent: [:each | each ~= value] - put: [self fail]) = value. - self assert: (cache at: key) = value. - - "ensure cull: is used" - self assert: - (cache - at: key - ifPresent: [false] - put: [self fail]) = value. - self assert: (cache at: key) = value. - - self assert: - (cache - at: key - ifPresent: [:each | each = value] - put: ['newValue']) = 'newValue'. - self assert: (cache at: key) = 'newValue']. - - self assert: - (cache - at: 'absentKey' - ifPresent: [self fail] - put: [self fail]) isNil. - self deny: (cache includesKey: 'absentKey'). - - "the ifPresent: block can modify the cache too, so make sure - it is cleared if needed to make room" - self assert: - (cache - at: self keys first - ifPresent: [ - cache - at: 'newKey' - put: 'newValue'. - false] - put: [self fail]) = 'newValue'. - self - assert: cache size = 1; - assert: (cache at: 'newKey') = 'newValue'. - - "the put: block can modify the cache too, so make sure - it is cleared if needed to make room" - cache := self cacheClass maxSize: 1. - cache - at: self keys first - put: self values first. - self assert: - (cache - at: self keys first - ifPresent: [true] - put: [ - cache - at: 'newKey' - put: 'newValue']) = 'newValue'. - self - assert: cache size = 1; - assert: (cache at: self keys first) = 'newValue'. -] - -{ #category : #tests } -XMLKeyValueCacheTest >> testAtPut [ - | cache | - - cache := self cacheClass maxSize: self maxSize. - self associations withIndexDo: [:each :i | | key value | - key := each key. - value := each value. - self assert: - (cache - at: key - put: value) = value. - self - assert: (cache at: key) = value; - assert: cache size = i]. - self assert: - (cache - at: 'newKey' - put: 'newValue') = 'newValue'. - self - assert: (cache at: 'newKey') = 'newValue'; - assert: cache size = 1. -] - -{ #category : #tests } -XMLKeyValueCacheTest >> testCapacity [ - self - assert: self newCache capacity = self defaultMaxSize; - assert: self newCacheWithEntries capacity = self maxSize -] - -{ #category : #tests } -XMLKeyValueCacheTest >> testClear [ - | cache | - - cache := self newCacheWithEntries. - self deny: cache isEmpty. - - cache clear. - self assert: cache isEmpty. -] - -{ #category : #tests } -XMLKeyValueCacheTest >> testCopy [ - | cache copy | - - cache := self newCacheWithEntries. - copy := cache copy. - self - deny: cache == copy; - assert: cache collection = copy collection; - deny: cache collection == copy collection; - deny: cache mutex == copy mutex. -] - -{ #category : #tests } -XMLKeyValueCacheTest >> testIncludesKey [ - | cache | - - cache := self newCacheWithEntries. - self keys do: [:key | - self assert: (cache includesKey: key)]. - self deny: (cache includesKey: 'absentKey'). -] - -{ #category : #tests } -XMLKeyValueCacheTest >> testIsEmpty [ - self - assert: self newCache isEmpty; - deny: self newCacheWithEntries isEmpty -] - -{ #category : #tests } -XMLKeyValueCacheTest >> testKeys [ - self - assert: self newCache keys isEmpty; - assert: self newCacheWithEntries keys asSet = self keys asSet -] - -{ #category : #tests } -XMLKeyValueCacheTest >> testKeysAndValuesDo [ - self - should: [:block | self newCache keysAndValuesDo: block] - inAnyOrderEnumerateKeysAndValues: #(). - - self - should: [:block | self newCacheWithEntries keysAndValuesDo: block] - inAnyOrderEnumerateKeysAndValues: self associations. -] - -{ #category : #tests } -XMLKeyValueCacheTest >> testKeysDo [ - self - should: [:block | self newCache keysDo: block] - inAnyOrderEnumerate: #(). - - self - should: [:block | self newCacheWithEntries keysDo: block] - inAnyOrderEnumerate: self keys. -] - -{ #category : #tests } -XMLKeyValueCacheTest >> testMaxSize [ - | cache | - - cache := self newCache. - self - assert: cache size = 0; - assert: cache maxSize = self defaultMaxSize. - - cache := self newCacheWithEntries. - self - assert: cache size = self maxSize; - assert: cache maxSize = self maxSize. - - self - assert: (cache maxSize: self maxSize + 1) == cache; - assert: cache maxSize = (self maxSize + 1); - assert: cache size = self maxSize. - - self - assert: (cache maxSize: 0) == cache; - assert: cache maxSize = 0; - assert: cache size = 0. -] - -{ #category : #tests } -XMLKeyValueCacheTest >> testNotEmpty [ - self - deny: self newCache notEmpty; - assert: self newCacheWithEntries notEmpty -] - -{ #category : #tests } -XMLKeyValueCacheTest >> testRemoveAll [ - | cache | - - cache := self newCacheWithEntries. - self deny: cache isEmpty. - - cache removeAll. - self assert: cache isEmpty. -] - -{ #category : #tests } -XMLKeyValueCacheTest >> testRemoveKey [ - | cache | - - cache := self newCacheWithEntries. - self keysAndValuesDo: [:key :value | - self - assert: (cache removeKey: key) = value; - deny: (cache includesKey: key). - - "does not raise errors to support concurrent removal" - self assert: (cache removeKey: key) isNil]. - self assert: cache isEmpty. -] - -{ #category : #tests } -XMLKeyValueCacheTest >> testRemoveKeyIfAbsent [ - | cache | - - cache := self newCacheWithEntries. - self keysAndValuesDo: [:key :value | - self assert: - (cache - removeKey: key - ifAbsent: [self fail]) = value. - self deny: (cache includesKey: key). - self assert: - (cache - removeKey: key - ifAbsent: ['absentValue']) = 'absentValue']. - self assert: cache isEmpty. - - cache := self newCacheWithEntries. - self assert: - (cache - removeKey: 'absentKey' - ifAbsent: [ - cache - at: 'newKey' - put: 'newValue']) = 'newValue'. - self - assert: cache size = 1; - assert: (cache at: 'newKey') = 'newValue'. -] - -{ #category : #tests } -XMLKeyValueCacheTest >> testRemoveKeyIfPresent [ - | cache | - - cache := self newCacheWithEntries. - self keysAndValuesDo: [:key :value | - self assert: - (cache - removeKey: key - ifPresent: [:each | each ~= value]) = value. - self assert: (cache includesKey: key). - - "ensure cull: is used" - self assert: - (cache - removeKey: key - ifPresent: [false]) = value. - self assert: (cache includesKey: key). - - self assert: - (cache - removeKey: key - ifPresent: [:each | each = value]) = value. - self deny: (cache includesKey: key). - - self assert: - (cache - removeKey: key - ifPresent: [self fail]) isNil. - self deny: (cache includesKey: key)]. - self assert: cache isEmpty. -] - -{ #category : #tests } -XMLKeyValueCacheTest >> testSize [ - self - assert: self newCache size = 0; - assert: self newCacheWithEntries size = self maxSize -] - -{ #category : #tests } -XMLKeyValueCacheTest >> testValues [ - self - assert: self newCache values isEmpty; - assert: self newCacheWithEntries values asSet = self values asSet -] - -{ #category : #tests } -XMLKeyValueCacheTest >> testValuesDo [ - self - should: [:block | self newCache valuesDo: block] - inAnyOrderEnumerate: #(). - - self - should: [:block | self newCacheWithEntries valuesDo: block] - inAnyOrderEnumerate: self values. -] - -{ #category : #accessing } -XMLKeyValueCacheTest >> values [ - ^ self associations collect: [:each | each value] -] diff --git a/src/XML-Tests-Parser/XMLLatin1StreamConverterTest.class.st b/src/XML-Tests-Parser/XMLLatin1StreamConverterTest.class.st deleted file mode 100644 index 9b8437176..000000000 --- a/src/XML-Tests-Parser/XMLLatin1StreamConverterTest.class.st +++ /dev/null @@ -1,20 +0,0 @@ -Class { - #name : #XMLLatin1StreamConverterTest, - #superclass : #XMLStreamConverterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLLatin1StreamConverterTest class >> isAbstract [ - ^ false -] - -{ #category : #accessing } -XMLLatin1StreamConverterTest >> primaryEncodingName [ - ^ 'Latin-1' -] - -{ #category : #accessing } -XMLLatin1StreamConverterTest >> streamConverterClass [ - ^ XMLLatin1StreamConverter -] diff --git a/src/XML-Tests-Parser/XMLLazyAttributeDictionaryTest.class.st b/src/XML-Tests-Parser/XMLLazyAttributeDictionaryTest.class.st deleted file mode 100644 index 7d53888e9..000000000 --- a/src/XML-Tests-Parser/XMLLazyAttributeDictionaryTest.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #XMLLazyAttributeDictionaryTest, - #superclass : #XMLAttributeDictionaryTest, - #category : #'XML-Tests-Parser' -} - -{ #category : #accessing } -XMLLazyAttributeDictionaryTest >> dictionaryClass [ - ^ XMLLazyAttributeDictionary -] - -{ #category : #testing } -XMLLazyAttributeDictionaryTest >> isTestingLazyDictionary [ - ^ true -] diff --git a/src/XML-Tests-Parser/XMLLazyNamespacedAttributeDictionaryTest.class.st b/src/XML-Tests-Parser/XMLLazyNamespacedAttributeDictionaryTest.class.st deleted file mode 100644 index 2bbd06cb9..000000000 --- a/src/XML-Tests-Parser/XMLLazyNamespacedAttributeDictionaryTest.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #XMLLazyNamespacedAttributeDictionaryTest, - #superclass : #XMLNamespacedAttributeDictionaryTest, - #category : #'XML-Tests-Parser' -} - -{ #category : #accessing } -XMLLazyNamespacedAttributeDictionaryTest >> dictionaryClass [ - ^ XMLLazyNamespacedAttributeDictionary -] - -{ #category : #testing } -XMLLazyNamespacedAttributeDictionaryTest >> isTestingLazyDictionary [ - ^ true -] diff --git a/src/XML-Tests-Parser/XMLLimitedReadStreamAdapterTest.class.st b/src/XML-Tests-Parser/XMLLimitedReadStreamAdapterTest.class.st deleted file mode 100644 index ee603d377..000000000 --- a/src/XML-Tests-Parser/XMLLimitedReadStreamAdapterTest.class.st +++ /dev/null @@ -1,90 +0,0 @@ -Class { - #name : #XMLLimitedReadStreamAdapterTest, - #superclass : #XMLReadStreamAdapterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #accessing } -XMLLimitedReadStreamAdapterTest >> basicInputCollection [ - ^ super basicInputCollection, super basicInputCollection -] - -{ #category : #accessing } -XMLLimitedReadStreamAdapterTest >> basicOutputCollection [ - ^ self basicInputCollection - copyFrom: 1 - to: self inputCollectionLimit -] - -{ #category : #accessing } -XMLLimitedReadStreamAdapterTest >> inputCollectionLimit [ - ^ self inputCollection size / 2 -] - -{ #category : #'instance creation' } -XMLLimitedReadStreamAdapterTest >> newStreamAdapterOn: aStream [ - ^ self - newStreamAdapterOn: aStream - limit: self inputCollectionLimit -] - -{ #category : #'instance creation' } -XMLLimitedReadStreamAdapterTest >> newStreamAdapterOn: aStream limit: aLimit [ - ^ self streamAdapterClass - on: aStream - limit: aLimit -] - -{ #category : #accessing } -XMLLimitedReadStreamAdapterTest >> streamAdapterClass [ - ^ XMLLimitedReadStreamAdapter -] - -{ #category : #tests } -XMLLimitedReadStreamAdapterTest >> testAtLimitedEnd [ - | adapter unlimitedOutputCollectionSize | - - adapter := self newStreamAdapter. - self outputCollection size timesRepeat: [ - self deny: adapter atLimitedEnd. - adapter next]. - self - assert: adapter atEnd; - assert: adapter atLimitedEnd. - - unlimitedOutputCollectionSize := self outputCollection size * 2. - adapter := - self - newStreamAdapterOn: self newStream - limit: unlimitedOutputCollectionSize. - unlimitedOutputCollectionSize timesRepeat: [ - self deny: adapter atLimitedEnd. - adapter next]. - self - assert: adapter atEnd; - deny: adapter atLimitedEnd. -] - -{ #category : #tests } -XMLLimitedReadStreamAdapterTest >> testLimit [ - | adapter | - - adapter := self newStreamAdapter. - self - assert: adapter limit = self inputCollectionLimit; - assert: (adapter limit: self inputCollectionLimit + 1) == adapter; - assert: adapter limit = (self inputCollectionLimit + 1). -] - -{ #category : #tests } -XMLLimitedReadStreamAdapterTest >> testReset [ - | adapter | - - super testReset. - - adapter := self newStreamAdapter. - adapter - upToEnd; - reset. - self assert: adapter limit = self inputCollectionLimit. -] diff --git a/src/XML-Tests-Parser/XMLMessageRecorder.class.st b/src/XML-Tests-Parser/XMLMessageRecorder.class.st deleted file mode 100644 index 82bda7179..000000000 --- a/src/XML-Tests-Parser/XMLMessageRecorder.class.st +++ /dev/null @@ -1,90 +0,0 @@ -" -This class records sent messages in a queue. -" -Class { - #name : #XMLMessageRecorder, - #superclass : #Object, - #instVars : [ - 'messageQueue' - ], - #category : #'XML-Tests-Parser' -} - -{ #category : #accessing } -XMLMessageRecorder >> clearMessages [ - ^ self messageQueue removeAll -] - -{ #category : #testing } -XMLMessageRecorder >> hasMessages [ - ^ self messageQueue notEmpty -] - -{ #category : #private } -XMLMessageRecorder >> messageQueue [ - ^ messageQueue ifNil: [messageQueue := OrderedCollection new] -] - -{ #category : #accessing } -XMLMessageRecorder >> messages [ - ^ messageQueue copy -] - -{ #category : #enumerating } -XMLMessageRecorder >> messagesCollect: aBlock [ - ^ self messageQueue collect: aBlock -] - -{ #category : #enumerating } -XMLMessageRecorder >> messagesDo: aBlock [ - self messageQueue do: aBlock -] - -{ #category : #enumerating } -XMLMessageRecorder >> messagesSelect: aBlock [ - ^ self messageQueue select: aBlock -] - -{ #category : #accessing } -XMLMessageRecorder >> nextMessage [ - ^ self hasMessages - ifTrue: [self messageQueue removeFirst] - ifFalse: [nil] -] - -{ #category : #accessing } -XMLMessageRecorder >> peekMessage [ - ^ self hasMessages - ifTrue: [self messageQueue first] - ifFalse: [nil] -] - -{ #category : #recording } -XMLMessageRecorder >> recordMessage: aMessage [ - self messageQueue addLast: aMessage -] - -{ #category : #recording } -XMLMessageRecorder >> recordMessageReceiver: anObject selector: aSelector [ - self - recordMessageReceiver: anObject - selector: aSelector - arguments: Array new -] - -{ #category : #recording } -XMLMessageRecorder >> recordMessageReceiver: anObject selector: aSelector argument: anArgument [ - self - recordMessageReceiver: anObject - selector: aSelector - arguments: (Array with: anArgument) -] - -{ #category : #recording } -XMLMessageRecorder >> recordMessageReceiver: anObject selector: aSelector arguments: aSequenceableCollection [ - self recordMessage: - (MessageSend - receiver: anObject - selector: aSelector - arguments: aSequenceableCollection asArray) -] diff --git a/src/XML-Tests-Parser/XMLNFAStateSetTest.class.st b/src/XML-Tests-Parser/XMLNFAStateSetTest.class.st deleted file mode 100644 index 13322d6e7..000000000 --- a/src/XML-Tests-Parser/XMLNFAStateSetTest.class.st +++ /dev/null @@ -1,79 +0,0 @@ -Class { - #name : #XMLNFAStateSetTest, - #superclass : #XMLAbstractSetTest, - #instVars : [ - 'states', - 'disjointStates', - 'absentState' - ], - #category : #'XML-Tests-Parser-Validation-DFA' -} - -{ #category : #testing } -XMLNFAStateSetTest class >> isAbstract [ - ^ false -] - -{ #category : #accessing } -XMLNFAStateSetTest >> absentSetElement [ - ^ absentState - ifNil: [absentState := XMLNFAMatchingState matcher: 'absent'] -] - -{ #category : #accessing } -XMLNFAStateSetTest >> disjointSetElements [ - disjointStates - ifNil: [ - disjointStates := - Array - with: (XMLNFAMatchingState matcher: 'three') - with: (XMLNFAMatchingState matcher: 'four')]. - ^ disjointStates copy. -] - -{ #category : #accessing } -XMLNFAStateSetTest >> setClass [ - ^ XMLNFAStateSet -] - -{ #category : #accessing } -XMLNFAStateSetTest >> setElements [ - states - ifNil: [ - states := - Array - with: (XMLNFAMatchingState matcher: 'one') - with: XMLNFAAcceptingState new - with: (XMLNFAMatchingState matcher: 'two') - with: XMLNFAAcceptingState new]. - ^ states copy. -] - -{ #category : #tests } -XMLNFAStateSetTest >> testIsAccepting [ - | set isAccepting lastAccepting | - - set := self emptySet. - isAccepting := false. - self deny: set isAccepting. - self setElements do: [:each | - set add: each. - each isAccepting - ifTrue: [ - isAccepting := true. - lastAccepting := each]. - self assert: set isAccepting = isAccepting]. - self assert: set isAccepting. - - self setElements do: [:each | - set remove: each. - (set includes: lastAccepting) - ifTrue: [self assert: set isAccepting] - ifFalse: [self deny: set isAccepting]]. - self deny: set isAccepting. - - self deny: - (self setWithElements - removeAll; - isAccepting). -] diff --git a/src/XML-Tests-Parser/XMLNamespaceScopeTest.class.st b/src/XML-Tests-Parser/XMLNamespaceScopeTest.class.st deleted file mode 100644 index d8afc88b2..000000000 --- a/src/XML-Tests-Parser/XMLNamespaceScopeTest.class.st +++ /dev/null @@ -1,705 +0,0 @@ -Class { - #name : #XMLNamespaceScopeTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser-Namespaces' -} - -{ #category : #accessing } -XMLNamespaceScopeTest >> namespaces [ - ^ OrderPreservingStringDictionary new - at: 'prefix1' put: 'ns1'; - at: 'prefix2' put: 'ns2'; - at: '' put: 'defaultNS'; - yourself -] - -{ #category : #'instance creation' } -XMLNamespaceScopeTest >> newNamespaceScope [ - ^ XMLNamespaceScope new -] - -{ #category : #'instance creation' } -XMLNamespaceScopeTest >> newNamespaceScopeWithNamespaces [ - | scope | - - scope := self newNamespaceScope. - self namespaces keysAndValuesDo: [:prefix :uri | - scope - mapPrefix: prefix - to: uri]. - ^ scope. -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testCopy [ - | scope oldPrefixMappings copy | - - scope := self newNamespaceScopeWithNamespaces. - oldPrefixMappings := scope prefixMappings. - copy := scope copy. - self - deny: copy == scope; - assert: copy = scope; - assert: copy prefixMappings == oldPrefixMappings. -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testDefaultNamespace [ - | scope oldPrefixMappings | - - scope := self newNamespaceScope. - self assert: scope defaultNamespace = ''. - - oldPrefixMappings := scope prefixMappings. - scope defaultNamespace: 'test'. - self - assert: scope defaultNamespace = 'test'; - assert: (scope prefixMappings at: '') = 'test'; - deny: scope prefixMappings = oldPrefixMappings. - - scope unmapPrefix: ''. - self assert: scope defaultNamespace = ''. -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testEquals [ - self - assert: self newNamespaceScope = self newNamespaceScope; - assert: self newNamespaceScopeWithNamespaces = self newNamespaceScopeWithNamespaces; - deny: self newNamespaceScope = self newNamespaceScopeWithNamespaces; - deny: self newNamespaceScopeWithNamespaces = self newNamespaceScope -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testHasDefaultNamespace [ - | scope | - - scope := self newNamespaceScope. - self deny: scope hasDefaultNamespace. - - scope defaultNamespace: 'test'. - self assert: scope hasDefaultNamespace. - - scope defaultNamespace: ''. - self assert: scope hasDefaultNamespace. - - scope unmapPrefix: ''. - self deny: scope hasDefaultNamespace. -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testHasNamespaces [ - | scope | - - scope := self newNamespaceScope. - self deny: scope hasNamespaces. - - scope mapPrefixesAndURIs: self namespaces. - self assert: scope hasNamespaces. - self namespaces keysDo: [:each | - self assert: scope hasNamespaces. - scope unmapPrefix: each]. - self deny: scope hasNamespaces. -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testHash [ - "We can only safely test that equal objects have the same hash; testing - that different objects have different hashes would be unreliable - because #hash is non-cryptographic and has collisions." - self assert: - self newNamespaceScope hash = - self newNamespaceScope hash. - self assert: - self newNamespaceScopeWithNamespaces hash = - self newNamespaceScopeWithNamespaces hash. - self assert: - self newNamespaceScope hash = - (self newNamespaceScopeWithNamespaces - unmapPrefixes; - hash). -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testIncludesPrefix [ - | scope | - - scope := self newNamespaceScope. - self - deny: (scope includesPrefix: 'xml'); - deny: (scope includesPrefix: 'xmlns'). - - "cannot map xmlns prefix, but can map xml" - scope - mapPrefix: 'xml' - to: scope xmlNamespaceURI. - self assert: (scope includesPrefix: 'xml'). - - self namespaces keysAndValuesDo: [:prefix :uri | - self deny: (scope includesPrefix: prefix). - scope - mapPrefix: prefix - to: uri. - self assert: (scope includesPrefix: prefix)]. -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testIncludesPrefixMappedTo [ - | scope | - - scope := self newNamespaceScope. - "these are not mapped by default, but are still resolvable" - self deny: - (scope - includesPrefix: 'xml' - mappedTo: scope xmlNamespaceURI). - self deny: - (scope - includesPrefix: 'xmlns' - mappedTo: scope xmlnsNamespaceURI). - - "cannot map xmlns prefix, but can map xml" - scope - mapPrefix: 'xml' - to: scope xmlNamespaceURI. - self assert: - (scope - includesPrefix: 'xml' - mappedTo: scope xmlNamespaceURI). - - self namespaces keysAndValuesDo: [:prefix :uri | - self deny: - (scope - includesPrefix: prefix - mappedTo: uri). - scope - mapPrefix: prefix - to: uri. - self assert: - (scope - includesPrefix: prefix - mappedTo: uri)]. -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testInheritMappingsFrom [ - | outerScope innerScope | - - outerScope := self newNamespaceScopeWithNamespaces. - innerScope := self newNamespaceScope. - innerScope inheritMappingsFrom: outerScope. - self assert: innerScope prefixMappings == outerScope prefixMappings. - - innerScope := self newNamespaceScopeWithNamespaces. - innerScope inheritMappingsFrom: outerScope. - self - assert: innerScope prefixMappings = outerScope prefixMappings; - deny: innerScope prefixMappings == outerScope prefixMappings. -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testMapPrefixTo [ - | scope oldPrefixMappings | - - scope := self newNamespaceScope. - self namespaces keysAndValuesDo: [:prefix :uri | - "save to ensure prefixMappings is copied, even if unchanged" - oldPrefixMappings := scope prefixMappings. - scope - mapPrefix: prefix - to: uri. - self - assert: (scope prefixMappings at: prefix) = uri; - deny: scope prefixMappings = oldPrefixMappings; - deny: scope prefixMappings == oldPrefixMappings. - - "save to ensure prefixMappings is copied, even if unchanged" - oldPrefixMappings := scope prefixMappings. - scope - mapPrefix: prefix - to: uri. - self - assert: (scope prefixMappings at: prefix) = uri; - assert: scope prefixMappings = oldPrefixMappings; - deny: scope prefixMappings == oldPrefixMappings]. - self assert: - scope prefixMappings associations asArray = - self namespaces associations asArray. - - self namespaces keysDo: [:each | - "save to ensure prefixMappings is copied, even if unchanged" - oldPrefixMappings := scope prefixMappings. - scope - mapPrefix: each - to: 'newNS'. - self - assert: (scope prefixMappings at: each) = 'newNS'; - deny: scope prefixMappings = oldPrefixMappings; - deny: scope prefixMappings == oldPrefixMappings]. - - "save to ensure prefixMappings is copied, even if unchanged" - oldPrefixMappings := scope prefixMappings. - scope - mapPrefix: 'xml' - to: scope xmlNamespaceURI. - self - assert: (scope prefixMappings at: 'xml') = scope xmlNamespaceURI; - deny: scope prefixMappings = oldPrefixMappings; - deny: scope prefixMappings == oldPrefixMappings. - - "cannot rebind xmlns prefix at all, even to the same URI" - self - should: [ - scope - mapPrefix: 'xmlns' - to: scope xmlnsNamespaceURI] - raise: XMLNamespaceException. - - "cannot bind a new prefix to the xml, xmlns, or empty namespace URIs" - (Array - with: scope xmlNamespaceURI - with: scope xmlnsNamespaceURI - with: '') do: [:each | - self - should: [ - scope - mapPrefix: 'newPrefix' - to: each] - raise: XMLNamespaceException]. -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testMapPrefixesAndURIs [ - | outerScope innerScope namespaces | - - namespaces := self namespaces. - (outerScope := self newNamespaceScope) mapPrefixesAndURIs: namespaces. - self - assert: outerScope prefixMappings = namespaces; - deny: outerScope prefixMappings == namespaces. - - "copying shares dictionary until modified" - innerScope := outerScope copy. - self - assert: innerScope prefixMappings = outerScope prefixMappings; - assert: innerScope prefixMappings == outerScope prefixMappings. - - "modifying creates new dictionary" - innerScope mapPrefixesAndURIs: namespaces. - self - assert: innerScope prefixMappings = outerScope prefixMappings; - deny: innerScope prefixMappings == outerScope prefixMappings. -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testMappedPrefixes [ - | scope prefixes | - - scope := self newNamespaceScope. - prefixes := OrderedCollection new. - self namespaces keysAndValuesDo: [:prefix :uri | - scope - mapPrefix: prefix - to: uri. - prefixes addLast: prefix. - self assert: scope mappedPrefixes = prefixes asArray]. -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testPrefixMappingAt [ - | scope | - - scope := self newNamespaceScope. - self - assert: (scope prefixMappingAt: 'xml') = ''; - assert: (scope prefixMappingAt: 'xmlns') = ''. - - "cannot map xmlns prefix, but can map xml" - scope mapPrefix: 'xml' to: XMLNamespaceScope xmlNamespaceURI. - self assert: (scope prefixMappingAt: 'xml') = XMLNamespaceScope xmlNamespaceURI. - - self namespaces keysAndValuesDo: [:prefix :uri | - self assert: (scope prefixMappingAt: prefix) = ''. - scope mapPrefix: prefix to: uri. - self assert: (scope prefixMappingAt: prefix) = uri]. -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testPrefixMappingAtIfAbsent [ - | scope | - - scope := self newNamespaceScope. - self assert: - (scope - prefixMappingAt: 'xml' - ifAbsent: [#absent]) = #absent. - self assert: - (scope - prefixMappingAt: 'xmlns' - ifAbsent: [#absent]) = #absent. - - "cannot map xmlns prefix, but can map xml" - scope mapPrefix: 'xml' to: XMLNamespaceScope xmlNamespaceURI. - self assert: - (scope - prefixMappingAt: 'xml' - ifAbsent: [self fail]) = XMLNamespaceScope xmlNamespaceURI. - - self namespaces keysAndValuesDo: [:prefix :uri | - self assert: - (scope - prefixMappingAt: prefix - ifAbsent: [#absent]) = #absent. - scope mapPrefix: prefix to: uri. - self assert: - (scope - prefixMappingAt: prefix - ifAbsent: [self fail]) = uri]. -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testPrefixesAndURIsDo [ - | associations | - - associations := OrderedCollection new. - self newNamespaceScope prefixesAndURIsDo: [:prefix :uri | - associations addLast: prefix -> uri]. - self assert: associations isEmpty. - - self newNamespaceScopeWithNamespaces prefixesAndURIsDo: [:prefix :uri | - associations addLast: prefix -> uri]. - self assert: associations asArray = self namespaces associations asArray. -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testResolvePrefix [ - | scope | - - scope := self newNamespaceScope. - self namespaces keysAndValuesDo: [:prefix :uri | - self assert: (scope resolvePrefix: prefix) = ''. - scope mapPrefix: prefix to: uri. - self assert: (scope resolvePrefix: prefix) = uri]. - - self assert: - (scope resolvePrefix: 'xml') = scope xmlNamespaceURI. - self assert: - (scope resolvePrefix: 'xmlns') = scope xmlnsNamespaceURI. -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testResolvePrefixIfUnresolvable [ - | scope | - - scope := self newNamespaceScope. - self namespaces keysAndValuesDo: [:prefix :uri | - self assert: - (scope - resolvePrefix: prefix - ifUnresolvable: ['unresolvable']) = 'unresolvable'. - scope mapPrefix: prefix to: uri. - self assert: - (scope - resolvePrefix: prefix - ifUnresolvable: [self fail]) = uri]. - - self assert: - (scope - resolvePrefix: 'xml' - ifUnresolvable: [self fail]) = scope xmlNamespaceURI. - self assert: - (scope - resolvePrefix: 'xmlns' - ifUnresolvable: [self fail]) = scope xmlnsNamespaceURI. -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testResolvePrefixesOfNamespaceURI [ - | scope | - - scope := self newNamespaceScope. - - self namespaces keysAndValuesDo: [:prefix :uri | - self assert: - (scope resolvePrefixesOfNamespaceURI: uri) isEmpty. - - scope - mapPrefix: prefix - to: uri. - self assert: - (scope resolvePrefixesOfNamespaceURI: uri) = - (Set with: prefix). - - scope - mapPrefix: 'newPrefix' - to: uri. - self assert: - (scope resolvePrefixesOfNamespaceURI: uri) = - (Set with: prefix with: 'newPrefix')]. - - self assert: - (scope resolvePrefixesOfNamespaceURI: scope xmlNamespaceURI) = - (Set with: 'xml'). - self assert: - (scope resolvePrefixesOfNamespaceURI: scope xmlnsNamespaceURI) = - (Set with: 'xmlns'). - - "cannot map xmlns prefix at all, but can map xml to the same URI" - scope - mapPrefix: 'xml' - to: scope xmlNamespaceURI. - self assert: - (scope resolvePrefixesOfNamespaceURI: scope xmlNamespaceURI) = - (Set with: 'xml'). -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testSize [ - self - assert: self newNamespaceScope size = 0; - assert: self newNamespaceScopeWithNamespaces size = self namespaces size -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testUnmapPrefix [ - | scope | - - scope := self newNamespaceScope. - self namespaces keysAndValuesDo: [:prefix :uri | | oldPrefixMappings | - self - should: [scope unmapPrefix: prefix] - raise: XMLNamespaceException. - self deny: (scope includesPrefix: prefix). - scope - mapPrefix: prefix - to: uri. - - oldPrefixMappings := scope prefixMappings. - self - assert: (scope unmapPrefix: prefix) = uri; - deny: (scope includesPrefix: prefix). - - "ensure prefixMappings is copied when removing" - self - assert: (oldPrefixMappings includesKey: prefix); - deny: scope prefixMappings = oldPrefixMappings; - deny: scope prefixMappings == oldPrefixMappings. - - self - should: [scope unmapPrefix: prefix] - raise: XMLNamespaceException]. - self assert: scope prefixMappings isEmpty. -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testUnmapPrefixIfAbsent [ - | scope | - - scope := self newNamespaceScope. - self namespaces keysAndValuesDo: [:prefix :uri | | oldPrefixMappings | - self assert: - (scope - unmapPrefix: prefix - ifAbsent: [#absent]) = #absent. - self deny: (scope includesPrefix: prefix). - scope - mapPrefix: prefix - to: uri. - - oldPrefixMappings := scope prefixMappings. - self assert: - (scope - unmapPrefix: prefix - ifAbsent: [self fail]) = uri. - self deny: (scope includesPrefix: prefix). - - "ensure prefixMappings is copied when removing" - self - assert: (oldPrefixMappings includesKey: prefix); - deny: scope prefixMappings = oldPrefixMappings; - deny: scope prefixMappings == oldPrefixMappings. - - self - assert: - (scope - unmapPrefix: prefix - ifAbsent: [#absent]) = #absent]. - self assert: scope prefixMappings isEmpty. -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testUnmapPrefixes [ - | scope oldPrefixMappings | - - scope := self newNamespaceScopeWithNamespaces. - oldPrefixMappings := scope prefixMappings. - self - assert: scope unmapPrefixes == scope; - deny: scope hasNamespaces. - - "ensure prefixMappings is copied when removing" - self - assert: oldPrefixMappings = self namespaces; - deny: scope prefixMappings = oldPrefixMappings; - deny: scope prefixMappings == oldPrefixMappings. -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testValidateAndResolvePrefixOfAttribute [ - | scope | - - scope := self newNamespaceScope. - self namespaces keysAndValuesDo: [:prefix :uri | | attribute | - attribute := 'name' qualifyWithXMLPrefix: prefix. - "unprefixed attributes have no namespace URI" - prefix - ifEmpty: [ - scope - mapPrefix: prefix - to: uri. - self assert: - (scope - validateAndResolvePrefix: prefix - ofAttribute: attribute) = ''] - ifNotEmpty: [ - self - should: [ - scope - validateAndResolvePrefix: prefix - ofAttribute: attribute] - raise: XMLNamespaceException. - scope - mapPrefix: prefix - to: uri. - self assert: - (scope - validateAndResolvePrefix: prefix - ofAttribute: attribute) = uri]]. - - self assert: - (scope - validateAndResolvePrefix: 'xml' - ofAttribute: ('name' qualifyWithXMLPrefix: 'xml')) = - scope xmlNamespaceURI. - "cannot use 'xmlns' as an attribute prefix, since it is reserved for - namespace declarations" - self - should: [ - scope - validateAndResolvePrefix: 'xmlns' - ofAttribute: ('name' qualifyWithXMLPrefix: 'xmlns')] - raise: XMLNamespaceException. - self - should: [ - scope - validateAndResolvePrefix: '' - ofAttribute: ':name'] - raise: XMLNamespaceException. -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testValidateAndResolvePrefixOfElement [ - | scope | - - scope := self newNamespaceScope. - self namespaces keysAndValuesDo: [:prefix :uri | | element | - element := 'name' qualifyWithXMLPrefix: prefix. - prefix - ifNotEmpty: [ - self - should: [ - scope - validateAndResolvePrefix: prefix - ofElement: element] - raise: XMLNamespaceException]. - scope - mapPrefix: prefix - to: uri. - self assert: - (scope - validateAndResolvePrefix: prefix - ofElement: element) = uri]. - - self assert: - (scope - validateAndResolvePrefix: 'xml' - ofElement: ('name' qualifyWithXMLPrefix: 'xml')) = - scope xmlNamespaceURI. - "cannot use 'xmlns' as an element prefix either" - self - should: [ - scope - validateAndResolvePrefix: 'xmlns' - ofElement: ('name' qualifyWithXMLPrefix: 'xmlns')] - raise: XMLNamespaceException. - self - should: [ - scope - validateAndResolvePrefix: '' - ofElement: ':name'] - raise: XMLNamespaceException. -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testValidatePrefixesOfAttributes [ - | scope attributes | - - scope := self newNamespaceScopeWithNamespaces. - attributes := - self namespaces keys collect: [:each | - 'name' qualifyWithXMLPrefix: each]. - self - shouldnt: [ - scope validatePrefixesOfAttributes: attributes] - raise: XMLNamespaceException. - self - should: [ - scope validatePrefixesOfAttributes: - (attributes copyWith: ('name' qualifyWithXMLPrefix: 'undeclared'))] - raise: XMLNamespaceException. - self - should: [ - scope validatePrefixesOfAttributes: - (attributes copyWith: ':name')] - raise: XMLNamespaceException. - - self namespaces keysAndValuesDo: [:prefix :uri | | aliasPrefix attribute | - aliasPrefix := 'alias', prefix. - scope - mapPrefix: aliasPrefix - to: uri. - attribute := 'name' qualifyWithXMLPrefix: aliasPrefix. - prefix = '' - ifTrue: [ - self - shouldnt: [ - scope validatePrefixesOfAttributes: - (attributes copyWith: attribute)] - raise: XMLNamespaceException] - ifFalse: [ - self - should: [ - scope validatePrefixesOfAttributes: - (attributes copyWith: attribute)] - raise: XMLNamespaceException]]. -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testXMLNSNamespaceURI [ - | namespaceURI | - - namespaceURI := 'http://www.w3.org/2000/xmlns/'. - self - assert: self newNamespaceScope xmlnsNamespaceURI = namespaceURI; - assert: XMLNamespaceScope xmlnsNamespaceURI = namespaceURI. -] - -{ #category : #tests } -XMLNamespaceScopeTest >> testXMLNamespaceURI [ - | namespaceURI | - - namespaceURI := 'http://www.w3.org/XML/1998/namespace'. - self - assert: self newNamespaceScope xmlNamespaceURI = namespaceURI; - assert: XMLNamespaceScope xmlNamespaceURI = namespaceURI. -] diff --git a/src/XML-Tests-Parser/XMLNamespacedAttributeDictionaryTest.class.st b/src/XML-Tests-Parser/XMLNamespacedAttributeDictionaryTest.class.st deleted file mode 100644 index beb8a3fb9..000000000 --- a/src/XML-Tests-Parser/XMLNamespacedAttributeDictionaryTest.class.st +++ /dev/null @@ -1,295 +0,0 @@ -Class { - #name : #XMLNamespacedAttributeDictionaryTest, - #superclass : #XMLAttributeDictionaryTest, - #category : #'XML-Tests-Parser' -} - -{ #category : #accessing } -XMLNamespacedAttributeDictionaryTest >> dictionaryClass [ - ^ XMLNamespacedAttributeDictionary -] - -{ #category : #tests } -XMLNamespacedAttributeDictionaryTest >> testAssociationAtNameNamespaceURI [ - | dictionary | - - dictionary := self prefixedAttributeDictionary. - self assert: - (dictionary - associationAtName: 'id' - namespaceURI: XMLNamespaceScope xmlNamespaceURI) = ('xml:id' -> 'id'). - self assert: - (dictionary - associationAtName: 'id' - namespaceURI: 'defaultNS') isNil. - self assert: - (dictionary - associationAtName: 'xml:id' - namespaceURI: XMLNamespaceScope xmlNamespaceURI) = ('xml:id' -> 'id'). - self assert: - (dictionary - associationAtName: 'xml:id' - namespaceURI: 'defaultNS') isNil. - - self assert: - (dictionary - associationAtName: 'name' - namespaceURI: 'prefixNS') = ('prefix:name' -> 'prefixValue'). - self assert: - (dictionary - associationAtName: 'prefix:name' - namespaceURI: 'prefixNS') = ('prefix:name' -> 'prefixValue'). - self assert: - (dictionary - associationAtName: 'prefix:name' - namespaceURI: 'defaultNS') isNil. - - self assert: - (dictionary - associationAtName: 'name' - namespaceURI: 'otherPrefixNS') = ('otherPrefix:name' -> 'otherPrefixValue'). - self assert: - (dictionary - associationAtName: 'otherPrefix:name' - namespaceURI: 'otherPrefixNS') = ('otherPrefix:name' -> 'otherPrefixValue'). - self assert: - (dictionary - associationAtName: 'otherPrefix:name' - namespaceURI: 'defaultNS') isNil. - - self assert: - (dictionary - associationAtName: 'name' - namespaceURI: '') = ('name' -> 'value'). - self assert: - (dictionary - associationAtName: 'name' - namespaceURI: 'defaultNS') isNil. -] - -{ #category : #tests } -XMLNamespacedAttributeDictionaryTest >> testAssociationAtNameNamespaceURIIfAbsent [ - | dictionary | - - dictionary := self prefixedAttributeDictionary. - self assert: - (dictionary - associationAtName: 'id' - namespaceURI: XMLNamespaceScope xmlNamespaceURI - ifAbsent: [self fail]) = ('xml:id' -> 'id'). - self assert: - (dictionary - associationAtName: 'id' - namespaceURI: 'defaultNS' - ifAbsent: [#absent]) = #absent. - self assert: - (dictionary - associationAtName: 'xml:id' - namespaceURI: XMLNamespaceScope xmlNamespaceURI - ifAbsent: [self fail]) = ('xml:id' -> 'id'). - self assert: - (dictionary - associationAtName: 'xml:id' - namespaceURI: 'defaultNS' - ifAbsent: [#absent]) = #absent. - - self assert: - (dictionary - associationAtName: 'name' - namespaceURI: 'prefixNS' - ifAbsent: [self fail]) = ('prefix:name' -> 'prefixValue'). - self assert: - (dictionary - associationAtName: 'prefix:name' - namespaceURI: 'prefixNS' - ifAbsent: [self fail]) = ('prefix:name' -> 'prefixValue'). - self assert: - (dictionary - associationAtName: 'prefix:name' - namespaceURI: 'defaultNS' - ifAbsent: [#absent]) = #absent. - - self assert: - (dictionary - associationAtName: 'name' - namespaceURI: 'otherPrefixNS' - ifAbsent: [self fail]) = ('otherPrefix:name' -> 'otherPrefixValue'). - self assert: - (dictionary - associationAtName: 'otherPrefix:name' - namespaceURI: 'otherPrefixNS' - ifAbsent: [self fail]) = ('otherPrefix:name' -> 'otherPrefixValue'). - self assert: - (dictionary - associationAtName: 'otherPrefix:name' - namespaceURI: 'defaultNS' - ifAbsent: [#absent]) = #absent. - - self assert: - (dictionary - associationAtName: 'name' - namespaceURI: '' - ifAbsent: [self fail]) = ('name' -> 'value'). - self assert: - (dictionary - associationAtName: 'name' - namespaceURI: 'defaultNS' - ifAbsent: [#absent]) = #absent. -] - -{ #category : #tests } -XMLNamespacedAttributeDictionaryTest >> testAtNameNamespaceURI [ - | dictionary | - - dictionary := self prefixedAttributeDictionary. - self assert: - (dictionary - atName: 'id' - namespaceURI: XMLNamespaceScope xmlNamespaceURI) = 'id'. - self assert: - (dictionary - atName: 'id' - namespaceURI: 'defaultNS') = ''. - self assert: - (dictionary - atName: 'xml:id' - namespaceURI: XMLNamespaceScope xmlNamespaceURI) = 'id'. - self assert: - (dictionary - atName: 'xml:id' - namespaceURI: 'defaultNS') = ''. - - self assert: - (dictionary - atName: 'name' - namespaceURI: 'prefixNS') = 'prefixValue'. - self assert: - (dictionary - atName: 'prefix:name' - namespaceURI: 'prefixNS') = 'prefixValue'. - self assert: - (dictionary - atName: 'prefix:name' - namespaceURI: 'defaultNS') = ''. - - self assert: - (dictionary - atName: 'name' - namespaceURI: 'otherPrefixNS') = 'otherPrefixValue'. - self assert: - (dictionary - atName: 'otherPrefix:name' - namespaceURI: 'otherPrefixNS') = 'otherPrefixValue'. - self assert: - (dictionary - atName: 'otherPrefix:name' - namespaceURI: 'defaultNS') = ''. - - self assert: - (dictionary - atName: 'name' - namespaceURI: '') = 'value'. - self assert: - (dictionary - atName: 'name' - namespaceURI: 'defaultNS') = ''. -] - -{ #category : #tests } -XMLNamespacedAttributeDictionaryTest >> testAtNameNamespaceURIIfAbsent [ - | dictionary | - - dictionary := self prefixedAttributeDictionary. - self assert: - (dictionary - atName: 'id' - namespaceURI: XMLNamespaceScope xmlNamespaceURI - ifAbsent: [self fail]) = 'id'. - self assert: - (dictionary - atName: 'id' - namespaceURI: 'defaultNS' - ifAbsent: ['absent']) = 'absent'. - self assert: - (dictionary - atName: 'xml:id' - namespaceURI: XMLNamespaceScope xmlNamespaceURI - ifAbsent: [self fail]) = 'id'. - self assert: - (dictionary - atName: 'xml:id' - namespaceURI: 'defaultNS' - ifAbsent: ['absent']) = 'absent'. - - self assert: - (dictionary - atName: 'name' - namespaceURI: 'prefixNS' - ifAbsent: [self fail]) = 'prefixValue'. - self assert: - (dictionary - atName: 'prefix:name' - namespaceURI: 'prefixNS' - ifAbsent: [self fail]) = 'prefixValue'. - self assert: - (dictionary - atName: 'prefix:name' - namespaceURI: 'defaultNS' - ifAbsent: ['absent']) = 'absent'. - - self assert: - (dictionary - atName: 'name' - namespaceURI: 'otherPrefixNS' - ifAbsent: [self fail]) = 'otherPrefixValue'. - self assert: - (dictionary - atName: 'otherPrefix:name' - namespaceURI: 'otherPrefixNS' - ifAbsent: [self fail]) = 'otherPrefixValue'. - self assert: - (dictionary - atName: 'otherPrefix:name' - namespaceURI: 'defaultNS' - ifAbsent: ['absent']) = 'absent'. - - self assert: - (dictionary - atName: 'name' - namespaceURI: '' - ifAbsent: [self fail]) = 'value'. - self assert: - (dictionary - atName: 'name' - namespaceURI: 'defaultNS' - ifAbsent: ['absent']) = 'absent'. -] - -{ #category : #tests } -XMLNamespacedAttributeDictionaryTest >> testCopy [ - | dictionary copy | - - super testCopy. - dictionary := self prefixedAttributeDictionary. - copy := dictionary copy. - self assert: dictionary namespaceScope == copy namespaceScope. -] - -{ #category : #tests } -XMLNamespacedAttributeDictionaryTest >> testNamespaceURIOf [ - | dictionary | - - dictionary := self prefixedAttributeDictionary. - self assert: - (dictionary namespaceURIOf: 'xml:id') = - XMLNamespaceScope xmlNamespaceURI. - self - assert: (dictionary namespaceURIOf: 'prefix:name') = 'prefixNS'; - assert: (dictionary namespaceURIOf: 'otherPrefix:name') = 'otherPrefixNS'; - assert: (dictionary namespaceURIOf: 'name') = ''. -] - -{ #category : #tests } -XMLNamespacedAttributeDictionaryTest >> testUsesNamespaces [ - self assert: self emptyDictionary usesNamespaces -] diff --git a/src/XML-Tests-Parser/XMLNestedStreamReaderTest.class.st b/src/XML-Tests-Parser/XMLNestedStreamReaderTest.class.st deleted file mode 100644 index 622cd7f2e..000000000 --- a/src/XML-Tests-Parser/XMLNestedStreamReaderTest.class.st +++ /dev/null @@ -1,438 +0,0 @@ -Class { - #name : #XMLNestedStreamReaderTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #asserting } -XMLNestedStreamReaderTest class >> shouldInheritTests [ - ^ true -] - -{ #category : #accessing } -XMLNestedStreamReaderTest >> absentChar [ - ^ $! -] - -{ #category : #accessing } -XMLNestedStreamReaderTest >> cr [ - ^ Character cr -] - -{ #category : #accessing } -XMLNestedStreamReaderTest >> lf [ - ^ Character lf -] - -{ #category : #'instance creation' } -XMLNestedStreamReaderTest >> newStreamOn: aCollection [ - ^ XMLExceptionRaisingReadStream on: aCollection -] - -{ #category : #'instance creation' } -XMLNestedStreamReaderTest >> newStreamOnSourceXML [ - ^ self newStreamOn: self sourceXML -] - -{ #category : #'instance creation' } -XMLNestedStreamReaderTest >> newStreamReaderOn: aStream [ - ^ self streamReaderClass on: aStream -] - -{ #category : #'instance creation' } -XMLNestedStreamReaderTest >> newStreamReaderOnSourceXML [ - ^ self newStreamReaderOn: self newStreamOnSourceXML -] - -{ #category : #accessing } -XMLNestedStreamReaderTest >> nonLineEndingSeparators [ - ^ self separators reject: [:each | - each = self cr - or: [each = self lf]] -] - -{ #category : #accessing } -XMLNestedStreamReaderTest >> normalizedLineEnding [ - ^ self lf -] - -{ #category : #source } -XMLNestedStreamReaderTest >> normalizedSourceXML [ - ^ self sourceXMLNormalizedWith: self normalizedLineEnding -] - -{ #category : #accessing } -XMLNestedStreamReaderTest >> separators [ - ^ Character xmlSeparators -] - -{ #category : #source } -XMLNestedStreamReaderTest >> sourceXML [ - ^ self sourceXMLTemplate format: - (Array - with: self lf - with: (String with: self cr with: self lf) - with: (String withAll: self nonLineEndingSeparators) - with: self cr) -] - -{ #category : #source } -XMLNestedStreamReaderTest >> sourceXMLNormalizedWith: aCharacter [ - ^ self sourceXMLTemplate format: - (Array - with: aCharacter - with: aCharacter - with: (String withAll: self nonLineEndingSeparators) - with: aCharacter) -] - -{ #category : #source } -XMLNestedStreamReaderTest >> sourceXMLTemplate [ - ^ '{1} {2} test{3}test{4}' -] - -{ #category : #accessing } -XMLNestedStreamReaderTest >> streamReaderClass [ - ^ XMLNestedStreamReader -] - -{ #category : #tests } -XMLNestedStreamReaderTest >> testAtEnd [ - | streamReader | - - streamReader := self newStreamReaderOnSourceXML. - self normalizedSourceXML size timesRepeat: [ - self deny: streamReader atEnd. - streamReader next]. - self - assert: streamReader atEnd; - assert: streamReader stream atEnd. - - streamReader pushBack: self normalizedSourceXML. - self normalizedSourceXML size timesRepeat: [ - self deny: streamReader atEnd. - streamReader next]. - self - assert: streamReader atEnd; - assert: streamReader stream atEnd. - - streamReader pushBack: ''. - self - assert: streamReader atEnd; - assert: streamReader stream atEnd. -] - -{ #category : #tests } -XMLNestedStreamReaderTest >> testCloseStreams [ - | stream streamReader pushedBackStream evaluated | - - stream := self newStreamOnSourceXML. - streamReader := self newStreamReaderOn: stream. - - pushedBackStream := self newStreamOnSourceXML. - evaluated := false. - streamReader - pushBackStream: pushedBackStream - whenPoppedDo: [evaluated := true] - isExternal: true. - self - assert: streamReader stream == pushedBackStream; - assert: streamReader hasPushedBackStreams; - deny: stream wasClosed; - deny: pushedBackStream wasClosed. - - self - assert: streamReader closeStreams == streamReader; - assert: streamReader atEnd; - deny: streamReader stream == stream; - deny: streamReader stream == pushedBackStream; - deny: streamReader hasPushedBackStreams; - assert: stream wasClosed; - assert: pushedBackStream wasClosed; - deny: evaluated. - - self - shouldnt: [streamReader closeStreams] - raise: Error. -] - -{ #category : #tests } -XMLNestedStreamReaderTest >> testHasPushedBackStreams [ - | streamReader | - - streamReader := self newStreamReaderOnSourceXML. - self deny: streamReader hasPushedBackStreams. - - streamReader pushBackStream: (self newStreamOn: ''). - self assert: streamReader hasPushedBackStreams. - - streamReader next. - self deny: streamReader hasPushedBackStreams. -] - -{ #category : #tests } -XMLNestedStreamReaderTest >> testIsBinary [ - self deny: self newStreamReaderOnSourceXML isBinary -] - -{ #category : #tests } -XMLNestedStreamReaderTest >> testIsStream [ - self assert: self newStreamReaderOnSourceXML isStream -] - -{ #category : #tests } -XMLNestedStreamReaderTest >> testIsXMLBinaryOrExternalStream [ - | streamReader | - - streamReader := self newStreamReaderOnSourceXML. - self assert: streamReader isXMLBinaryOrExternalStream = streamReader isBinary. -] - -{ #category : #tests } -XMLNestedStreamReaderTest >> testLineEndingNormalizationAcrossStreams [ - | streamReader | - - streamReader := - self newStreamReaderOn: - (self newStreamOn: (String with: self lf)). - streamReader pushBackCharacter: self cr. - streamReader - pushBackStream: - (self newStreamOn: - (String with: self cr with: self lf)) - whenPoppedDo: nil - isExternal: true. - self - assert: streamReader next = self normalizedLineEnding; - deny: streamReader atEnd; - assert: streamReader next = self cr; - deny: streamReader atEnd; - assert: streamReader next = self normalizedLineEnding; - assert: streamReader atEnd. -] - -{ #category : #tests } -XMLNestedStreamReaderTest >> testNext [ - | streamReader currentLineNumber currentColumnNumber currentPosition | - - streamReader := self newStreamReaderOnSourceXML. - currentLineNumber := 1. - currentColumnNumber := currentPosition := 0. - self normalizedSourceXML do: [:each | - self assert: streamReader next = each. - each = self normalizedLineEnding - ifTrue: [ - currentLineNumber := currentLineNumber + 1. - currentColumnNumber := 0] - ifFalse: [currentColumnNumber := currentColumnNumber + 1]. - currentPosition := currentPosition + 1. - self - assert: streamReader currentLineNumber = currentLineNumber; - assert: streamReader currentColumnNumber = currentColumnNumber; - assert: streamReader currentPosition = currentPosition]. - self assert: streamReader next isNil. - - streamReader := self newStreamReaderOnSourceXML. - self - assert: (streamReader next: self normalizedSourceXML size) = self normalizedSourceXML; - assert: streamReader currentLineNumber = currentLineNumber; - assert: streamReader currentColumnNumber = currentColumnNumber; - assert: streamReader currentPosition = currentPosition; - assert: (streamReader next: self normalizedSourceXML size) = ''. -] - -{ #category : #tests } -XMLNestedStreamReaderTest >> testNormalizedLineEndingChar [ - | streamReader | - - streamReader := self newStreamReaderOnSourceXML. - self - assert: (streamReader normalizedLineEndingChar: $N) == streamReader; - assert: (streamReader normalizedLineEndingChar) == $N; - assert: streamReader upToEnd = (self sourceXMLNormalizedWith: $N). -] - -{ #category : #tests } -XMLNestedStreamReaderTest >> testPeek [ - | streamReader currentLineNumber currentColumnNumber currentPosition | - - streamReader := self newStreamReaderOnSourceXML. - currentLineNumber := 1. - currentColumnNumber := currentPosition := 0. - self normalizedSourceXML do: [:each | - self - assert: streamReader peek = each; - assert: streamReader currentLineNumber = currentLineNumber; - assert: streamReader currentColumnNumber = currentColumnNumber. - - streamReader next. - each = self normalizedLineEnding - ifTrue: [ - currentLineNumber := currentLineNumber + 1. - currentColumnNumber := 0] - ifFalse: [currentColumnNumber := currentColumnNumber + 1]. - currentPosition := currentPosition + 1. - self - assert: streamReader currentLineNumber = currentLineNumber; - assert: streamReader currentColumnNumber = currentColumnNumber; - assert: streamReader currentPosition = currentPosition]. - self assert: streamReader peek isNil. -] - -{ #category : #tests } -XMLNestedStreamReaderTest >> testPeekFor [ - | streamReader | - - streamReader := self newStreamReaderOnSourceXML. - self normalizedSourceXML do: [:each | - self - deny: (streamReader peekFor: #absent); - deny: (streamReader peekFor: nil); - assert: (streamReader peekFor: each); - deny: (streamReader peekFor: #absent); - deny: (streamReader peekFor: nil)]. - self - deny: (streamReader peekFor: #absent); - deny: (streamReader peekFor: nil). -] - -{ #category : #tests } -XMLNestedStreamReaderTest >> testPushBackStreamWhenPoppedDoIsExternal [ - | streamReader evaluated | - - streamReader := self newStreamReaderOn: (self newStreamOn: ''). - evaluated := false. - self assert: - (streamReader - pushBackStream: self newStreamReaderOnSourceXML - whenPoppedDo: [evaluated := true] - isExternal: true) == streamReader. - self normalizedSourceXML do: [:each | - self - assert: streamReader peek = each; - assert: streamReader next = each; - deny: evaluated]. - self - assert: streamReader next isNil; - assert: evaluated. -] - -{ #category : #tests } -XMLNestedStreamReaderTest >> testPushBackStreamWhenPoppedDoIsExternalException [ - "ensure that throwing an exception from the callback doesn't stop - the stream from being closed or getting popped" - - | stream streamReader evaluated | - - stream := self newStreamOnSourceXML. - streamReader := self newStreamReaderOnSourceXML. - evaluated := false. - streamReader - pushBackStream: stream - whenPoppedDo: [ - evaluated := true. - Error signal] - isExternal: true. - self - assert: streamReader stream == stream; - deny: evaluated; - deny: stream wasClosed. - - self - should: [streamReader upToEnd] - raise: Error. - self - deny: streamReader stream == stream; - assert: evaluated; - assert: stream wasClosed. -] - -{ #category : #tests } -XMLNestedStreamReaderTest >> testSkipSeparators [ - | streamReader stream currentLineNumber currentColumnNumber currentPosition | - - streamReader := self newStreamReaderOnSourceXML. - stream := self newStreamOn: self normalizedSourceXML. - currentLineNumber := 1. - currentColumnNumber := currentPosition := 0. - [stream atEnd] - whileFalse: [| totalSeparatorsSkipped | - totalSeparatorsSkipped := 0. - [self separators includes: stream peek] - whileTrue: [ - stream next = self normalizedLineEnding - ifTrue: [ - currentLineNumber := currentLineNumber + 1. - currentColumnNumber := 0] - ifFalse: [currentColumnNumber := currentColumnNumber + 1]. - currentPosition := currentPosition + 1. - totalSeparatorsSkipped := totalSeparatorsSkipped + 1]. - streamReader skipSeparators. - self - assert: streamReader currentLineNumber = currentLineNumber; - assert: streamReader currentColumnNumber = currentColumnNumber; - assert: streamReader currentPosition = currentPosition. - totalSeparatorsSkipped > 0 - ifFalse: [ - stream next. - streamReader next. - currentColumnNumber := currentColumnNumber + 1. - currentPosition := currentPosition + 1]]. -] - -{ #category : #tests } -XMLNestedStreamReaderTest >> testStreamPushbackPortability [ - | streamReader output lastPeek lastNext | - - streamReader := self newStreamReaderOn: (self newStreamOn: ''). - streamReader - pushBackStream: self newStreamOnSourceXML - whenPoppedDo: nil - isExternal: true. - output := String new writeStream. - self - shouldnt: [ - self normalizedSourceXML size timesRepeat: [ - output nextPut: - (streamReader - peek; - next)]. - lastPeek := streamReader peek. - lastNext := streamReader next] - raise: Error. - self - assert: output contents = self normalizedSourceXML; - assert: lastPeek isNil; - assert: lastNext isNil; - assert: streamReader atEnd. -] - -{ #category : #tests } -XMLNestedStreamReaderTest >> testUpTo [ - self normalizedSourceXML do: [:each | | streamReader | - streamReader := self newStreamReaderOnSourceXML. - self assert: - (streamReader upTo: each) = - (self normalizedSourceXML copyUpTo: each). - self assert: - streamReader upToEnd = - (self normalizedSourceXML copyAfter: each)]. - self assert: - (self newStreamReaderOnSourceXML upTo: self absentChar) = self normalizedSourceXML. -] - -{ #category : #tests } -XMLNestedStreamReaderTest >> testUpToEnd [ - | streamReader | - - self normalizedSourceXML withIndexDo: [:each :i | - streamReader := self newStreamReaderOnSourceXML. - streamReader next: i. - self - assert: streamReader upToEnd = (self normalizedSourceXML allButFirst: i); - assert: streamReader upToEnd = '']. - streamReader := self newStreamReaderOnSourceXML. - self - assert: streamReader upToEnd = self normalizedSourceXML; - assert: streamReader upToEnd = ''. -] diff --git a/src/XML-Tests-Parser/XMLNodeCanonicalPrintingTest.class.st b/src/XML-Tests-Parser/XMLNodeCanonicalPrintingTest.class.st deleted file mode 100644 index 5e2ea0925..000000000 --- a/src/XML-Tests-Parser/XMLNodeCanonicalPrintingTest.class.st +++ /dev/null @@ -1,210 +0,0 @@ -Class { - #name : #XMLNodeCanonicalPrintingTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #private } -XMLNodeCanonicalPrintingTest >> onCanonicalLineBreakJoin: aLineCollection [ - ^ XMLWriterTest onCanonicalLineBreakJoin: aLineCollection -] - -{ #category : #tests } -XMLNodeCanonicalPrintingTest >> testCharacterReferences [ - | xml | - - xml := ' - -]> - - First line Second line - 2 - "0" && value<"10" ?"valid":"error"]]> - "0" && value<"10" ?"valid":"error"''>valid - - - -'. - - self assert: - ((XMLDOMParser on: xml) - isValidating: false; - parseDocument) canonicallyPrinted = - (self onCanonicalLineBreakJoin: - #('' - ' First line ' - 'Second line' - ' 2' - ' value>"0" && value<"10" ?"valid":"error"' - ' valid' - ' ' - ' ' - ' ' - '')). -] - -{ #category : #tests } -XMLNodeCanonicalPrintingTest >> testEntityReferences [ - | xml resolver | - - xml := ' - - - - -]> - - &ent1;, &ent2;! - - - '. - - (resolver := DTDStaticExternalEntityResolver new) - externalEntityAtURI: 'world.txt' - put: 'world'. - self assert: - ((XMLDOMParser on: xml) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - isValidating: false; - parseDocument) canonicallyPrinted = - (self onCanonicalLineBreakJoin: - #('' - ' Hello, world!' - '')). - - self assert: - ((XMLDOMParser on: xml) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - isValidating: false; - preservesCommentNodes: true; - parseDocument) canonicallyPrinted = - (self onCanonicalLineBreakJoin: - #('' - ' Hello, world!' - '' - '')). -] - -{ #category : #tests } -XMLNodeCanonicalPrintingTest >> testPIsAndComments [ - | xml | - - xml := ' - - - - - -Hello, world! - - - - - -'. - - self assert: - (XMLDOMParser parse: xml) - canonicallyPrinted = - (self onCanonicalLineBreakJoin: - #('' - 'Hello, world!' - '')). - - self assert: - ((XMLDOMParser on: xml) - preservesCommentNodes: true; - parseDocument) canonicallyPrinted = - (self onCanonicalLineBreakJoin: - #('' - 'Hello, world!' - '' - '' - '')). -] - -{ #category : #tests } -XMLNodeCanonicalPrintingTest >> testStartAndEndTags [ - | xml | - - xml := ']> - - - - - - - - - - - - - -'. - - self assert: - ((XMLDOMParser on: xml) - isValidating: false; - parseDocument) canonicallyPrinted = - (self onCanonicalLineBreakJoin: - #('' - ' ' - ' ' - ' ' - ' ' - ' ' - ' ' - ' ' - ' ' - ' ' - ' ' - ' ' - ' ' - '')). -] - -{ #category : #tests } -XMLNodeCanonicalPrintingTest >> testWhitespace [ - | xml | - - xml := ' - - - A B - - A - - B - A B - C - - -'. - - self assert: - (XMLDOMParser parse: xml) - canonicallyPrinted = - (self onCanonicalLineBreakJoin: - #('' - ' ' - ' A B ' - ' ' - ' A' - ' ' - ' B' - ' A B ' - ' C' - ' ' - '')). -] diff --git a/src/XML-Tests-Parser/XMLNodeFactoryTest.class.st b/src/XML-Tests-Parser/XMLNodeFactoryTest.class.st deleted file mode 100644 index b07bd702e..000000000 --- a/src/XML-Tests-Parser/XMLNodeFactoryTest.class.st +++ /dev/null @@ -1,278 +0,0 @@ -Class { - #name : #XMLNodeFactoryTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser-DOM-Factories' -} - -{ #category : #testing } -XMLNodeFactoryTest class >> shouldInheritSelectors [ - ^ true -] - -{ #category : #accessing } -XMLNodeFactoryTest >> attributeAssociations [ - ^ Array - with: 'one' -> '1' - with: 'two' -> '2' -] - -{ #category : #accessing } -XMLNodeFactoryTest >> attributes [ - ^ XMLAttributeDictionary newFrom: self attributeAssociations -] - -{ #category : #accessing } -XMLNodeFactoryTest >> factoryClass [ - ^ XMLNodeFactory -] - -{ #category : #'instance creation' } -XMLNodeFactoryTest >> newFactory [ - ^ self factoryClass new -] - -{ #category : #accessing } -XMLNodeFactoryTest >> pluggableFactoryClass [ - ^ XMLPluggableNodeFactory -] - -{ #category : #source } -XMLNodeFactoryTest >> sampleUserXML [ - ^ - XMLWriter new - enablePrettyPrinting; - writeWith: [:writer | - writer pi - target: 'xml-stylesheet'; - data: 'type="text/css" href="sample.css"'. - writer comment: 'sample'. - writer tag - name: 'user:user'; - xmlnsAt: 'user' put: 'urn:user'; - with: [ - writer - tag: 'user:username' with: 'jsmith'; - tag: 'user:real-name' with: 'John Smith'; - tag: 'user:date-registered' with: [writer cdata: DateAndTime now printString]; - tag: 'user:date-last-active' with: [writer cdata: DateAndTime now printString]; - tag: 'table-name' with: 'users'; - tag: 'row-id' with: '1000'; - tag: 'serializationFormat' with: 'XML']]; - contents -] - -{ #category : #tests } -XMLNodeFactoryTest >> testAsPluggableNodeFactory [ - | factory pluggableFactory | - - factory := self factoryClass new. - pluggableFactory := factory asPluggableNodeFactory. - self assert: pluggableFactory class == self pluggableFactoryClass. - factory class == self pluggableFactoryClass - ifTrue: [self assert: pluggableFactory == factory] - ifFalse: [self deny: pluggableFactory == factory]. -] - -{ #category : #tests } -XMLNodeFactoryTest >> testAttributeDeclarationClass [ - self assert: self newFactory attributeDeclarationClass == XMLAttributeDeclaration -] - -{ #category : #tests } -XMLNodeFactoryTest >> testAttributeListClass [ - self assert: self newFactory attributeListClass == XMLCachingAttributeList -] - -{ #category : #tests } -XMLNodeFactoryTest >> testCDataClass [ - self assert: self newFactory cdataClass == XMLCData -] - -{ #category : #tests } -XMLNodeFactoryTest >> testClassForElement [ - self assert: (self newFactory classForElement: 'test') == XMLElement -] - -{ #category : #tests } -XMLNodeFactoryTest >> testClassForElementNamespaceURI [ - self assert: - (self newFactory - classForElement: 'test' - namespaceURI: '') == XMLElement. - self assert: - (self newFactory - classForElement: 'test' - namespaceURI: 'testNS') == XMLElement. -] - -{ #category : #tests } -XMLNodeFactoryTest >> testCommentClass [ - self assert: self newFactory commentClass == XMLComment -] - -{ #category : #tests } -XMLNodeFactoryTest >> testDoctypeDeclarationClass [ - self assert: self newFactory doctypeDeclarationClass == XMLDoctypeDeclaration -] - -{ #category : #tests } -XMLNodeFactoryTest >> testDocumentClass [ - self assert: self newFactory documentClass == XMLDocument -] - -{ #category : #tests } -XMLNodeFactoryTest >> testElementClass [ - self assert: self newFactory elementClass == XMLElement -] - -{ #category : #tests } -XMLNodeFactoryTest >> testElementDeclarationClass [ - self assert: self newFactory elementDeclarationClass == XMLElementDeclaration -] - -{ #category : #tests } -XMLNodeFactoryTest >> testGeneralEntityDeclarationClass [ - self assert: - self newFactory generalEntityDeclarationClass == - XMLGeneralEntityDeclaration -] - -{ #category : #tests } -XMLNodeFactoryTest >> testNewCData [ - | cdata | - - cdata := self newFactory newCData: 'test'. - self - assert: cdata class == XMLCData; - assert: cdata string = 'test'. -] - -{ #category : #tests } -XMLNodeFactoryTest >> testNewComment [ - | comment | - - comment := self newFactory newComment: 'test'. - self - assert: comment class == XMLComment; - assert: comment string = 'test'. -] - -{ #category : #tests } -XMLNodeFactoryTest >> testNewDocument [ - self assert: self newFactory newDocument class == XMLDocument -] - -{ #category : #tests } -XMLNodeFactoryTest >> testNewElement [ - self assert: self newFactory newElement class == XMLElement -] - -{ #category : #tests } -XMLNodeFactoryTest >> testNewElementNamed [ - | element | - - element := self newFactory newElementNamed: 'test'. - self - assert: element class == XMLElement; - assert: element name = 'test'. -] - -{ #category : #tests } -XMLNodeFactoryTest >> testNewElementNamedAttributes [ - | element | - - element := - self newFactory - newElementNamed: 'test' - attributes: self attributeAssociations. - self - assert: element class == XMLElement; - assert: element name = 'test'; - assert: element attributes = self attributes -] - -{ #category : #tests } -XMLNodeFactoryTest >> testNewElementNamedNamespaceURI [ - | element | - - element := - self newFactory - newElementNamed: 'prefix:test' - namespaceURI: 'prefixNS'. - self - assert: element class == XMLElement; - assert: element name = 'prefix:test'; - assert: element namespaceURI = 'prefixNS'. -] - -{ #category : #tests } -XMLNodeFactoryTest >> testNewElementNamedNamespaceURIAttributes [ - | element | - - element := - self newFactory - newElementNamed: 'prefix:test' - namespaceURI: 'prefixNS' - attributes: self attributeAssociations. - self - assert: element class == XMLElement; - assert: element name = 'prefix:test'; - assert: element namespaceURI = 'prefixNS'; - assert: element attributes = self attributes. -] - -{ #category : #tests } -XMLNodeFactoryTest >> testNewPI [ - self assert: self newFactory newPI class == XMLPI -] - -{ #category : #tests } -XMLNodeFactoryTest >> testNewPITargetData [ - | pi | - - pi := - self newFactory - newPITarget: 'target' - data: 'data'. - self - assert: pi class == XMLPI; - assert: pi target = 'target'; - assert: pi data = 'data'. -] - -{ #category : #tests } -XMLNodeFactoryTest >> testNewStringNode [ - | cdata | - - cdata := self newFactory newStringNode: 'test'. - self - assert: cdata class == XMLString; - assert: cdata string = 'test'. -] - -{ #category : #tests } -XMLNodeFactoryTest >> testNodeListClass [ - self assert: self newFactory nodeListClass == XMLNodeList -] - -{ #category : #tests } -XMLNodeFactoryTest >> testNotationDeclarationClass [ - self assert: self newFactory notationDeclarationClass == XMLNotationDeclaration -] - -{ #category : #tests } -XMLNodeFactoryTest >> testPIClass [ - self assert: self newFactory piClass == XMLPI -] - -{ #category : #tests } -XMLNodeFactoryTest >> testParameterEntityDeclarationClass [ - self assert: - self newFactory parameterEntityDeclarationClass == - XMLParameterEntityDeclaration -] - -{ #category : #tests } -XMLNodeFactoryTest >> testStringNodeClass [ - self assert: self newFactory stringNodeClass == XMLString -] diff --git a/src/XML-Tests-Parser/XMLNodeListTest.class.st b/src/XML-Tests-Parser/XMLNodeListTest.class.st deleted file mode 100644 index 74d9ecd75..000000000 --- a/src/XML-Tests-Parser/XMLNodeListTest.class.st +++ /dev/null @@ -1,422 +0,0 @@ -Class { - #name : #XMLNodeListTest, - #superclass : #XMLObservableListTest, - #instVars : [ - 'document', - 'nodes', - 'newNode', - 'absentNode', - 'changedNodes' - ], - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #accessing } -XMLNodeListTest >> absentListItem [ - ^ absentNode ifNil: [absentNode := super absentListItem asXMLStringNode] -] - -{ #category : #accessing } -XMLNodeListTest >> afterAddingToNotifications [ - ^ #(addedNode:) -] - -{ #category : #accessing } -XMLNodeListTest >> afterRemovingFromNotifications [ - ^ #(removedNode:) -] - -{ #category : #accessing } -XMLNodeListTest >> changedListItem: anObject [ - ^ (changedNodes ifNil: [changedNodes := IdentityDictionary new]) - at: anObject - ifAbsentPut: [anObject copy] -] - -{ #category : #accessing } -XMLNodeListTest >> listClass [ - ^ XMLNodeList -] - -{ #category : #accessing } -XMLNodeListTest >> listContentNodes [ - ^ self listItems select: [:each | each isContentNode] -] - -{ #category : #accessing } -XMLNodeListTest >> listElementNames [ - ^ self listElements collect: [:each | each name] -] - -{ #category : #accessing } -XMLNodeListTest >> listElements [ - ^ self listItems select: [:each | each isElement] -] - -{ #category : #accessing } -XMLNodeListTest >> listItems [ - nodes - ifNil: [ - document := XMLDocument new. - (document addElementNamed: 'root') - addElementNamed: 'one'; - addString: 'two'; - addElementNamed: 'prefix:three' namespaceURI: 'prefixNS'; - addNode: (XMLComment string: 'four'); - addElementNamed: 'three'; - addString: 'five'; - addElementNamed: 'six'; - addNode: (XMLPI target: 'seven' data: 'seven'); - addElementNamed: 'eight'; - addString: 'nine'. - nodes := document root nodes asArray]. - "return a copy of the array, but share the nodes" - ^ nodes copy. -] - -{ #category : #accessing } -XMLNodeListTest >> listStringNodes [ - ^ self listItems select: [:each | each isStringNode] -] - -{ #category : #accessing } -XMLNodeListTest >> listStrings [ - ^ self listStringNodes collect: [:each | each string] -] - -{ #category : #accessing } -XMLNodeListTest >> newListItem [ - ^ newNode ifNil: [newNode := super newListItem asXMLStringNode] -] - -{ #category : #accessing } -XMLNodeListTest >> observerClass [ - ^ XMLRecordingNodeListObserver -] - -{ #category : #accessing } -XMLNodeListTest >> reverseSortBlock [ - ^ [:a :b | a sortKey > b sortKey] -] - -{ #category : #accessing } -XMLNodeListTest >> sortBlock [ - ^ [:a :b | a sortKey <= b sortKey] -] - -{ #category : #tests } -XMLNodeListTest >> testContentNodes [ - | list | - - list := self listWithItems. - self - assertList: list contentNodes - copiedFrom: list - equals: (self listClass newFrom: self listContentNodes). -] - -{ #category : #tests } -XMLNodeListTest >> testContentNodesDo [ - | list | - - list := self emptyList. - self - xmlShould: [:block | list contentNodesDo: block ] - enumerate: #(). - - list addAll: self listItems. - self - xmlShould: [:block | list contentNodesDo: block ] - enumerate: self listContentNodes. -] - -{ #category : #tests } -XMLNodeListTest >> testContentStringAt [ - | list | - - list := self listWithItems. - self listElements do: [:each | - self assert: - (list contentStringAt: each name) = each contentString]. -] - -{ #category : #tests } -XMLNodeListTest >> testElementAfter [ - | list elementAfter | - - list := self listWithItems. - elementAfter := nil. - self listElements reverseDo: [:each | - self assert: (list elementAfter: each) = elementAfter. - elementAfter := each]. -] - -{ #category : #tests } -XMLNodeListTest >> testElementAt [ - | list | - - list := self listWithItems. - self listElements do: [:each | | changedElement | - self assert: (list elementAt: each name) = each. - - changedElement := self changedListItem: each. - list addFirst: changedElement. - self assert: (list elementAt: each name) = changedElement. - - list - remove: each; - remove: changedElement. - self assert: (list elementAt: each name) = self defaultValue]. -] - -{ #category : #tests } -XMLNodeListTest >> testElementAtIfAbsent [ - | list | - - list := self listWithItems. - self listElements do: [:each | | changedElement | - self assert: - (list - elementAt: each name - ifAbsent: [self fail]) = each. - - changedElement := self changedListItem: each. - list addFirst: changedElement. - self assert: - (list - elementAt: each name - ifAbsent: [self fail]) = changedElement. - - list - remove: each; - remove: changedElement. - self assert: - (list - elementAt: each name - ifAbsent: [self newListItem]) = self newListItem]. -] - -{ #category : #tests } -XMLNodeListTest >> testElementBefore [ - | list elementBefore | - - list := self listWithItems. - elementBefore := nil. - self listElements do: [:each | - self assert: (list elementBefore: each) = elementBefore. - elementBefore := each]. -] - -{ #category : #tests } -XMLNodeListTest >> testElementNames [ - | list | - - list := self listWithItems. - self - assertList: list elementNames - collectedFrom: list - equals: (self listSpecies newFrom: self listElementNames). -] - -{ #category : #tests } -XMLNodeListTest >> testElements [ - | list | - - list := self listWithItems. - self - assertList: list elements - copiedFrom: list - equals: (self listClass newFrom: self listElements). -] - -{ #category : #tests } -XMLNodeListTest >> testElementsAt [ - self listElements do: [:element | | list elementsAt changedElement | - list := self listWithItems. - elementsAt := - self listElements select: [:each | - each isNamed: element name]. - self assert: - (list elementsAt: element name) = - (self listClass newFrom: elementsAt). - - changedElement := self changedListItem: element. - list addFirst: changedElement. - elementsAt := elementsAt copyWithFirst: changedElement. - self assert: - (list elementsAt: element name) = - (self listClass newFrom: elementsAt). - - list remove: element. - elementsAt := elementsAt copyWithout: element. - self assert: - (list elementsAt: element name) = - (self listClass newFrom: elementsAt)]. -] - -{ #category : #tests } -XMLNodeListTest >> testElementsCollect [ - | list | - - list := self listWithItems. - self - assertList: (list elementsCollect: [:each | each name]) - collectedFrom: list - equals: (self listSpecies newFrom: self listElementNames). -] - -{ #category : #tests } -XMLNodeListTest >> testElementsDo [ - | list | - - list := self emptyList. - self - xmlShould: [:block | list elementsDo: block ] - enumerate: #(). - - list addAll: self listItems. - self - xmlShould: [:block | list elementsDo: block ] - enumerate: self listElements. -] - -{ #category : #tests } -XMLNodeListTest >> testElementsSelect [ - | list selectedElements | - - list := self listWithItems. - selectedElements := - self listElements - copyFrom: 1 - to: (self listElements size / 2) floor. - self - assertList: (list elementsSelect: [:each | selectedElements includes: each]) - copiedFrom: list - equals: (self listClass newFrom: selectedElements). -] - -{ #category : #tests } -XMLNodeListTest >> testFirstElement [ - | list | - - list := self listWithItems. - self listElements do: [:each | - self assert: list firstElement = each. - list remove: each]. - self assert: list firstElement = self defaultValue. -] - -{ #category : #tests } -XMLNodeListTest >> testHasContentNodes [ - | list | - - list := self emptyList. - self deny: list hasContentNodes. - - list addAll: self listItems. - self assert: list hasContentNodes. - - list removeAll: self listContentNodes. - self deny: list hasContentNodes. -] - -{ #category : #tests } -XMLNodeListTest >> testHasElements [ - | list | - - list := self emptyList. - self deny: list hasElements. - - list addAll: self listItems. - self assert: list hasElements. - - list removeAll: self listElements. - self deny: list hasElements. -] - -{ #category : #tests } -XMLNodeListTest >> testHasStringNodes [ - | list | - - list := self emptyList. - self deny: list hasStringNodes. - - list addAll: self listItems. - self assert: list hasStringNodes. - - list removeAll: self listStringNodes. - self deny: list hasStringNodes. -] - -{ #category : #tests } -XMLNodeListTest >> testLastElement [ - | list | - - list := self listWithItems. - self listElements reverseDo: [:each | - self assert: list lastElement = each. - list remove: each]. - self assert: list lastElement = self defaultValue. -] - -{ #category : #tests } -XMLNodeListTest >> testRawContentStringAt [ - | list | - - list := self listWithItems. - self listElements do: [:each | - self assert: - (list rawContentStringAt: each name) = each rawContentString]. -] - -{ #category : #tests } -XMLNodeListTest >> testStringNodes [ - | list | - - list := self listWithItems. - self - assertList: list stringNodes - copiedFrom: list - equals: (self listClass newFrom: self listStringNodes). -] - -{ #category : #tests } -XMLNodeListTest >> testStringNodesDo [ - | list | - - list := self emptyList. - self - xmlShould: [:block | list stringNodesDo: block ] - enumerate: #(). - - list addAll: self listItems. - self - xmlShould: [:block | list stringNodesDo: block ] - enumerate: self listStringNodes. -] - -{ #category : #tests } -XMLNodeListTest >> testStrings [ - | list | - - list := self listWithItems. - self - assertList: list strings - collectedFrom: list - equals: (self listSpecies newFrom: self listStrings). -] - -{ #category : #tests } -XMLNodeListTest >> testStringsDo [ - | list | - - list := self emptyList. - self - xmlShould: [:block | list stringsDo: block ] - enumerate: #(). - - list addAll: self listItems. - self - xmlShould: [:block | list stringsDo: block ] - enumerate: self listStrings. -] diff --git a/src/XML-Tests-Parser/XMLNodeTest.class.st b/src/XML-Tests-Parser/XMLNodeTest.class.st deleted file mode 100644 index 18fd813fd..000000000 --- a/src/XML-Tests-Parser/XMLNodeTest.class.st +++ /dev/null @@ -1,594 +0,0 @@ -" -This is a base class for node tests. -" -Class { - #name : #XMLNodeTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #testing } -XMLNodeTest class >> shouldInheritSelectors [ - ^ true -] - -{ #category : #assertions } -XMLNodeTest >> assertElement: anElement hasAttributes: anAssociationCollection [ - | attributeNodes | - - self assert: anElement attributeNodes size = anAssociationCollection size. - attributeNodes := anElement attributeNodes copy. - anAssociationCollection associationsDo: [:each | | attributeNode | - attributeNode := attributeNodes removeFirst. - self - assert: attributeNode name = each key; - assert: attributeNode value = each value]. -] - -{ #category : #assertions } -XMLNodeTest >> assertList: aList collects: aSecondList [ - self - assert: aList = aSecondList; - assert: aList class == self collectListClass. -] - -{ #category : #assertions } -XMLNodeTest >> assertList: aList selects: aSecondList [ - self - assert: aList = aSecondList; - assert: aList class == self selectListClass. -] - -{ #category : #accessing } -XMLNodeTest >> attributeAssociations [ - ^ Array - with: 'one' -> '1' - with: 'two' -> '2' - with: 'prefix:two' -> '3' "different from 'two', because of the prefix" - with: 'prefix:four' -> '4' -] - -{ #category : #accessing } -XMLNodeTest >> attributeClass [ - ^ XMLAttribute -] - -{ #category : #accessing } -XMLNodeTest >> attributeListClass [ - ^ XMLCachingAttributeList -] - -{ #category : #accessing } -XMLNodeTest >> attributeNames [ - ^ self attributeAssociations collect: [:each | each key] -] - -{ #category : #accessing } -XMLNodeTest >> attributeValues [ - ^ self attributeAssociations collect: [:each | each value] -] - -{ #category : #accessing } -XMLNodeTest >> attributes [ - ^ self attributesClass newFrom: self attributeAssociations -] - -{ #category : #accessing } -XMLNodeTest >> attributesClass [ - ^ OrderPreservingStringDictionary -] - -{ #category : #accessing } -XMLNodeTest >> collectListClass [ - ^ XMLOrderedList -] - -{ #category : #accessing } -XMLNodeTest >> elementClass [ - ^ XMLElement -] - -{ #category : #accessing } -XMLNodeTest >> escapedString [ - ^ '<test name="&name;">''&value;''</test>' -] - -{ #category : #accessing } -XMLNodeTest >> languageTagsAndFilters [ - "returns an array of triplet arrays of langauge tag, matching filters, - and non-matching filters" - ^ #( - #('' - #() - #('' 'de' 'De' 'DE' 'de' - 'en' 'En' 'EN' '*' - 'en-US' 'En-Us' 'EN-US' 'en-*' '*-US' '*-*' - 'en-GB' 'En-Gb' 'EN-GB' 'de-*' '*-GB' - 'en-US-Custom' 'EN-US-CUSTOM' - 'en-US-*' '*-US-custom' 'en-*-Custom' - 'en-*-*' '*-*-custom' '*-us-*' - '*-*-*' - 'en-US-other' 'en-GB-custom' 'de-at-custom' - 'de-US-*' '*-GB-Custom' 'de-*-custom' - 'de-*-*' '*-*-other' '*-GB-*')) - #('en' - #('en' 'En' 'EN' '*') - #('' 'de' 'De' 'DE' 'de' - 'en-US' 'En-Us' 'EN-US' 'en-*' '*-US' '*-*' - 'en-GB' 'En-Gb' 'EN-GB' 'de-*' '*-GB' - 'en-US-Custom' 'EN-US-CUSTOM' - 'en-US-*' '*-US-custom' 'en-*-Custom' - 'en-*-*' '*-*-custom' '*-us-*' - '*-*-*' - 'en-US-other' 'en-GB-custom' 'de-at-custom' - 'de-US-*' '*-GB-Custom' 'de-*-custom' - 'de-*-*' '*-*-other' '*-GB-*')) - #('en-US' - #('en' 'En' 'EN' '*' 'en-US' 'En-Us' 'EN-US' 'en-*' '*-US' '*-*') - #('' 'de' 'De' 'DE' 'de' - 'en-GB' 'En-Gb' 'EN-GB' 'de-*' '*-GB' - 'en-US-Custom' 'EN-US-CUSTOM' - 'en-US-*' '*-US-custom' 'en-*-Custom' - 'en-*-*' '*-*-custom' '*-us-*' - '*-*-*' - 'en-US-other' 'en-GB-custom' 'de-at-custom' - 'de-US-*' '*-GB-Custom' 'de-*-custom' - 'de-*-*' '*-*-other' '*-GB-*')) - #('en-US-custom' - #('en' 'En' 'EN' '*' 'en-US' 'En-Us' 'EN-US' - 'en-*' '*-US' '*-*' - 'en-US-Custom' 'EN-US-CUSTOM' - 'en-US-*' '*-US-custom' 'en-*-Custom' - 'en-*-*' '*-*-custom' '*-us-*' - '*-*-*') - #('' 'de' 'De' 'DE' 'de' - 'en-GB' 'En-Gb' 'EN-GB' 'de-*' '*-GB' - 'en-US-other' 'en-GB-custom' 'de-at-custom' - 'de-US-*' '*-GB-Custom' 'de-*-custom' - 'de-*-*' '*-*-other' '*-GB-*'))) -] - -{ #category : #accessing } -XMLNodeTest >> markupString [ - ^ '''&value;''' -] - -{ #category : #accessing } -XMLNodeTest >> namespaceAssociations [ - ^ Array - with: '' -> 'defaultNS' - with: 'prefix' -> 'prefixNS' - with: 'prefixTwo' -> 'prefixTwoNS' -] - -{ #category : #accessing } -XMLNodeTest >> namespaces [ - ^ self attributesClass newFrom: self namespaceAssociations -] - -{ #category : #'instance creation' } -XMLNodeTest >> newElement [ - ^ self elementClass - name: 'test' - namespaces: self namespaceAssociations -] - -{ #category : #'instance creation' } -XMLNodeTest >> newElementWithAttributes [ - | element | - - element := self newElement. - self attributeAssociations do: [:each | - element attributeNodes addLast: - (self attributeClass - name: each key - value: each value)]. - ^ element. -] - -{ #category : #'instance creation' } -XMLNodeTest >> newNode [ - ^ self nodeClass new -] - -{ #category : #accessing } -XMLNodeTest >> nodeClass [ - ^ XMLNode -] - -{ #category : #accessing } -XMLNodeTest >> nodeFactoryClass [ - ^ XMLNodeFactory -] - -{ #category : #accessing } -XMLNodeTest >> otherAttributeListClass [ - "must be different from attributeListClass" - ^ XMLFAttributeList -] - -{ #category : #accessing } -XMLNodeTest >> otherElementClass [ - "must be different from elementClass" - ^ XMLFElement -] - -{ #category : #accessing } -XMLNodeTest >> selectListClass [ - ^ XMLNodeList -] - -{ #category : #tests } -XMLNodeTest >> testAcceptNodeVisitor [ - | visitor node | - - visitor := XMLRecordingNodeVisitor new. - node := self newNode. - self - assert: (node acceptNodeVisitor: visitor) == node; - deny: visitor messageRecorder hasMessages. -] - -{ #category : #tests } -XMLNodeTest >> testAncestorElements [ - self assert: self newNode ancestorElements isEmpty -] - -{ #category : #tests } -XMLNodeTest >> testAncestorElementsDo [ - | node | - - node := self newNode. - self - xmlShould: [:block | node ancestorElementsDo: block] - enumerate: #(). -] - -{ #category : #tests } -XMLNodeTest >> testAncestorNodes [ - self assert: self newNode ancestorNodes isEmpty -] - -{ #category : #tests } -XMLNodeTest >> testAncestorNodesDo [ - | node | - - node := self newNode. - self - xmlShould: [:block | node ancestorNodesDo: block] - enumerate: #(). -] - -{ #category : #tests } -XMLNodeTest >> testCanHaveChildren [ - self deny: self newNode canHaveChildren -] - -{ #category : #tests } -XMLNodeTest >> testCanonicallyEquals [ - self assert: (self newNode canonicallyEquals: self newNode) -] - -{ #category : #tests } -XMLNodeTest >> testConfiguration [ - self assert: self newNode configuration isNil -] - -{ #category : #tests } -XMLNodeTest >> testContentString [ - self assert: self newNode contentString = '' -] - -{ #category : #tests } -XMLNodeTest >> testCopy [ - | node copy | - - (node := self newNode) - parent: self newNode. - copy := node copy. - self - deny: copy == node; - deny: copy hasParent. -] - -{ #category : #tests } -XMLNodeTest >> testDocument [ - self assert: self newNode document isNil -] - -{ #category : #tests } -XMLNodeTest >> testDocumentRoot [ - | node | - - node := self newNode. - self assert: node documentRoot == node. -] - -{ #category : #tests } -XMLNodeTest >> testHasChildren [ - self deny: self newNode hasChildren -] - -{ #category : #tests } -XMLNodeTest >> testHasParent [ - | node | - - node := self newNode. - self deny: node hasParent. - - node parent: self newNode. - self assert: node hasParent. -] - -{ #category : #tests } -XMLNodeTest >> testIsAttribute [ - self deny: self newNode isAttribute -] - -{ #category : #tests } -XMLNodeTest >> testIsCData [ - self deny: self newNode isCData -] - -{ #category : #tests } -XMLNodeTest >> testIsComment [ - self deny: self newNode isComment -] - -{ #category : #tests } -XMLNodeTest >> testIsContentNode [ - self deny: self newNode isContentNode -] - -{ #category : #tests } -XMLNodeTest >> testIsDeclaration [ - self deny: self newNode isDeclaration -] - -{ #category : #tests } -XMLNodeTest >> testIsDocument [ - self deny: self newNode isDocument -] - -{ #category : #tests } -XMLNodeTest >> testIsElement [ - self deny: self newNode isElement -] - -{ #category : #tests } -XMLNodeTest >> testIsElementNamed [ - self deny: (self newNode isElementNamed: '') -] - -{ #category : #tests } -XMLNodeTest >> testIsElementNamedAny [ - self deny: (self newNode isElementNamedAny: #()) -] - -{ #category : #tests } -XMLNodeTest >> testIsInLanguage [ - self deny: (self newNode isInLanguage: 'test') -] - -{ #category : #tests } -XMLNodeTest >> testIsPI [ - self deny: self newNode isPI -] - -{ #category : #tests } -XMLNodeTest >> testIsStringNode [ - self - deny: self newNode isStringNode; - deny: (self newNode isStringNode: ''). -] - -{ #category : #tests } -XMLNodeTest >> testNewCData [ - | cdata | - - cdata := self newNode newCData: 'test'. - self - assert: cdata isCData; - assert: cdata string = 'test'. -] - -{ #category : #tests } -XMLNodeTest >> testNewComment [ - | comment | - - comment := self newNode newComment: 'test'. - self - assert: comment isComment; - assert: comment string = 'test'. -] - -{ #category : #tests } -XMLNodeTest >> testNewDocument [ - | node document | - - node := self newNode. - document := node newDocument. - self assert: document isDocument. - node configuration - ifNotNil: [ - self - assert: document configuration == node configuration; - assert: document nodeFactory == node nodeFactory]. -] - -{ #category : #tests } -XMLNodeTest >> testNewElement [ - | node element | - - node := self newNode. - element := node newElement. - self assert: element isElement. - node configuration - ifNotNil: [ - self - assert: element configuration == node configuration; - assert: element nodeFactory == node nodeFactory]. -] - -{ #category : #tests } -XMLNodeTest >> testNewElementNamed [ - | node element | - - node := self newNode. - element := node newElementNamed: 'test'. - self - assert: element isElement; - assert: element name = 'test'. - node configuration - ifNotNil: [ - self - assert: element configuration == node configuration; - assert: element nodeFactory == node nodeFactory]. -] - -{ #category : #tests } -XMLNodeTest >> testNewElementNamedAttributes [ - | node element | - - node := self newNode. - element := - node - newElementNamed: 'test' - attributes: self unprefixedAttributeAssociations. - self - assert: element isElement; - assert: element name = 'test'; - assertElement: element hasAttributes: self unprefixedAttributes. - node configuration - ifNotNil: [ - self - assert: element configuration == node configuration; - assert: element nodeFactory == node nodeFactory]. -] - -{ #category : #tests } -XMLNodeTest >> testNewElementNamedNamespaceURI [ - | node element | - - node := self newNode. - element := - node - newElementNamed: 'prefix:test' - namespaceURI: 'prefixNS'. - self - assert: element isElement; - assert: element name = 'prefix:test'; - assert: element namespaceURI = 'prefixNS'. - node configuration - ifNotNil: [ - self - assert: element configuration == node configuration; - assert: element nodeFactory == node nodeFactory]. -] - -{ #category : #tests } -XMLNodeTest >> testNewElementNamedNamespaceURIAttributes [ - | node element | - - node := self newNode. - element := - node - newElementNamed: 'prefix:test' - namespaceURI: 'prefixNS' - attributes: self attributeAssociations. - self - assert: element isElement; - assert: element name = 'prefix:test'; - assert: element namespaceURI = 'prefixNS'; - assertElement: element hasAttributes: self attributes. - node configuration - ifNotNil: [ - self - assert: element configuration == node configuration; - assert: element nodeFactory == node nodeFactory]. -] - -{ #category : #tests } -XMLNodeTest >> testNewPI [ - self assert: self newNode newPI isPI. -] - -{ #category : #tests } -XMLNodeTest >> testNewPITargetData [ - | pi | - - pi := - self newNode - newPITarget: 'target' - data: 'data'. - self - assert: pi isPI; - assert: pi target = 'target'; - assert: pi data = 'data'. -] - -{ #category : #tests } -XMLNodeTest >> testNewStringNode [ - | stringNode | - - stringNode := self newNode newStringNode: 'test'. - self - assert: stringNode isStringNode; - assert: stringNode string = 'test'. -] - -{ #category : #tests } -XMLNodeTest >> testNextNode [ - self assert: self newNode nextNode isNil -] - -{ #category : #tests } -XMLNodeTest >> testNodeFactory [ - self assert: self newNode nodeFactory class == self nodeFactoryClass -] - -{ #category : #tests } -XMLNodeTest >> testParent [ - | node parent | - - node := self newNode. - self assert: node parent isNil. - - parent := self newNode. - self - assert: (node parent: parent) == node; - assert: node parent == parent. -] - -{ #category : #tests } -XMLNodeTest >> testPreviousNode [ - self assert: self newNode previousNode isNil -] - -{ #category : #tests } -XMLNodeTest >> testRawContentString [ - self assert: self newNode rawContentString = '' -] - -{ #category : #tests } -XMLNodeTest >> testSortKey [ - self assert: self newNode sortKey = self nodeClass name asString -] - -{ #category : #tests } -XMLNodeTest >> testValidate [ - self - shouldnt: [self newNode validate] - raise: XMLValidationException -] - -{ #category : #accessing } -XMLNodeTest >> unprefixedAttributeAssociations [ - ^ self attributeAssociations collect: [:each | - each key xmlLocalNameAfterPrefix -> each value] -] - -{ #category : #accessing } -XMLNodeTest >> unprefixedAttributes [ - ^ self attributesClass newFrom: self unprefixedAttributeAssociations -] diff --git a/src/XML-Tests-Parser/XMLNodeWithChildrenTest.class.st b/src/XML-Tests-Parser/XMLNodeWithChildrenTest.class.st deleted file mode 100644 index fd6cc1768..000000000 --- a/src/XML-Tests-Parser/XMLNodeWithChildrenTest.class.st +++ /dev/null @@ -1,884 +0,0 @@ -" -Abstract, do not run. -" -Class { - #name : #XMLNodeWithChildrenTest, - #superclass : #XMLNodeTest, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #testing } -XMLNodeWithChildrenTest class >> isAbstract [ - ^ true -] - -{ #category : #accessing } -XMLNodeWithChildrenTest >> copiedClasses [ - "an object that isKindOf: any of these should be copied if it's - reachable from a copied node directly or through another copied object" - - ^ #(OrderedCollection Dictionary - XMLNode XMLNamespaceScope XMLOrderedList - XMLConfiguration XMLNodeFactory) -] - -{ #category : #'instance creation' } -XMLNodeWithChildrenTest >> newNodeWithNodes [ - ^ self newNode - addNode: (XMLComment string: 'one'); - addNode: (XMLPI target: 'two' data: 'three'); - addNode: (XMLComment string: 'four'); - addNode: (XMLPI target: 'five' data: 'six'); - yourself -] - -{ #category : #accessing } -XMLNodeWithChildrenTest >> nodeClass [ - ^ XMLNodeWithChildren -] - -{ #category : #accessing } -XMLNodeWithChildrenTest >> nodeListClass [ - ^ XMLNodeList -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testAddComment [ - | nodeWithNodes comment | - - nodeWithNodes := self newNode. - comment := nodeWithNodes addComment: 'test'. - self - assert: nodeWithNodes nodes size = 1; - assert: nodeWithNodes firstNode == comment; - assert: comment isComment; - assert: comment string = 'test'. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testAddNode [ - | node nodesAdded nodeWithNodes | - - node := self newNode. - nodesAdded := node nodes copyEmpty. - nodeWithNodes := self newNodeWithNodes. - - "adding nodes from another node should remove them from the previous node" - nodeWithNodes nodes copy do: [:each | - nodesAdded addLast: each. - self - assert: (node addNode: each) == each; - assert: node nodes = nodesAdded; - assert: each parent == node; - deny: (nodeWithNodes nodes includes: each)]. - self deny: nodeWithNodes hasChildren. - - "adding already present nodes should move them in-place" - node nodes copy do: [:each | - nodesAdded - remove: each; - addLast: each. - self - assert: (node addNode: each) == each; - assert: node nodes = nodesAdded; - assert: each parent == node]. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testAddNodeAfter [ - | node nodesAdded nodeWithNodes nodeAfter | - - node := self newNode. - nodesAdded := node nodes copyEmpty. - nodeWithNodes := self newNodeWithNodes. - - "adding nodes from another node should remove them from the previous node" - nodeAfter := nodeWithNodes firstNode. - nodesAdded addLast: nodeAfter. - node addNode: nodeAfter. - nodeWithNodes nodes reversed do: [:each | - nodesAdded - add: each - after: nodeAfter. - self - assert: (node addNode: each after: nodeAfter) == each; - assert: node nodes = nodesAdded; - assert: each parent == node; - deny: (nodeWithNodes nodes includes: each)]. - self deny: nodeWithNodes hasChildren. - - "adding already present nodes should move them in-place" - nodeAfter := nodesAdded last. - node nodes allButLast reverseDo: [:each | - nodesAdded - remove: each; - add: each after: nodeAfter. - self - assert: (node addNode: each after: nodeAfter) == each; - assert: node nodes = nodesAdded; - assert: each parent == node]. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testAddNodeBefore [ - | node nodesAdded nodeWithNodes nodeBefore | - - node := self newNode. - nodesAdded := node nodes copyEmpty. - nodeWithNodes := self newNodeWithNodes. - - "adding nodes from another node should remove them from the previous node" - nodeBefore := nodeWithNodes lastNode. - nodesAdded addLast: nodeBefore. - node addNode: nodeBefore. - nodeWithNodes nodes copy do: [:each | - nodesAdded - add: each - before: nodeBefore. - self - assert: (node addNode: each before: nodeBefore) == each; - assert: node nodes = nodesAdded; - assert: each parent == node; - deny: (nodeWithNodes nodes includes: each)]. - self deny: nodeWithNodes hasChildren. - - "adding already present nodes should move them in-place" - nodeBefore := nodesAdded first. - node nodes allButFirst reverseDo: [:each | - nodesAdded - remove: each; - add: each before: nodeBefore. - self - assert: (node addNode: each before: nodeBefore) == each; - assert: node nodes = nodesAdded; - assert: each parent == node]. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testAddNodeFirst [ - | node nodesAdded nodeWithNodes | - - node := self newNode. - nodesAdded := node nodes copyEmpty. - nodeWithNodes := self newNodeWithNodes. - - "adding nodes from another node should remove them from the previous node" - nodeWithNodes nodes copy do: [:each | - nodesAdded addFirst: each. - self - assert: (node addNodeFirst: each) == each; - assert: node nodes = nodesAdded; - assert: each parent == node; - deny: (nodeWithNodes nodes includes: each)]. - self deny: nodeWithNodes hasChildren. - - "adding already present nodes should move them in-place" - node nodes reversed do: [:each | - nodesAdded - remove: each; - addFirst: each. - self - assert: (node addNodeFirst: each) == each; - assert: node nodes = nodesAdded; - assert: each parent == node]. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testAddNodes [ - | node nodesAdded nodeWithNodes | - - node := self newNode. - nodeWithNodes := self newNodeWithNodes. - - "adding nodes from another node should remove them from the previous node" - nodesAdded := nodeWithNodes nodes copy. - self - assert: (node addNodes: nodesAdded) = nodesAdded; - assert: node nodes = nodesAdded; - assert: (node nodes allSatisfy: [:each | each parent == node]); - deny: nodeWithNodes hasChildren. - - "adding already present nodes should move them in-place" - nodesAdded := nodesAdded reversed. - self - assert: (node addNodes: nodesAdded) = nodesAdded; - assert: node nodes = nodesAdded; - assert: (node nodes allSatisfy: [:each | each parent == node]). -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testAddPITargetData [ - | nodeWithNodes pi | - - nodeWithNodes := self newNode. - pi := - nodeWithNodes - addPITarget: 'target' - data: 'data'. - self - assert: nodeWithNodes nodes size = 1; - assert: nodeWithNodes firstNode == pi; - assert: pi isPI; - assert: pi target = 'target'; - assert: pi data = 'data'. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testAllNodes [ - | nodeWithNodes allNodes | - - nodeWithNodes := self newNodeWithNodes. - allNodes := nodeWithNodes allNodes. - self - assert: allNodes size = 5; - assert: allNodes first == nodeWithNodes; - assert: allNodes second isComment; - assert: allNodes second string = 'one'; - assert: allNodes third isPI; - assert: allNodes third target = 'two'; - assert: allNodes third data = 'three'; - assert: allNodes fourth isComment; - assert: allNodes fourth string = 'four'; - assert: allNodes fifth isPI; - assert: allNodes fifth target = 'five'; - assert: allNodes fifth data = 'six'. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testAllNodesCollect [ - | nodeWithNodes allNodes | - - nodeWithNodes := self newNodeWithNodes. - allNodes := nodeWithNodes allNodes. - self - assertList: (nodeWithNodes allNodesCollect: [:each | each identityHash]) - collects: (allNodes collect: [:each | each identityHash]). - - allNodes do: [:node | - node canHaveChildren - ifTrue: [ - self - assertList: (node allNodesCollect: [:each | each identityHash]) - collects: (node allNodes collect: [:each | each identityHash])]]. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testAllNodesDetect [ - | nodeWithNodes allNodes detectedNode | - - nodeWithNodes := self newNodeWithNodes. - allNodes := nodeWithNodes allNodes. - detectedNode := nodeWithNodes allNodesDetect: [:each | each isPI]. - self - assert: detectedNode notNil; - assert: detectedNode isPI; - assert: detectedNode = (allNodes detect: [:each | each isPI]); - assert: (nodeWithNodes allNodesDetect: [:each | each isElementNamed: 'absent']) isNil. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testAllNodesDetectIfNone [ - | nodeWithNodes allNodes detectedNode | - - nodeWithNodes := self newNodeWithNodes. - allNodes := nodeWithNodes allNodes. - detectedNode := - nodeWithNodes - allNodesDetect: [:each | each isPI] - ifNone: [self fail]. - self - assert: detectedNode isPI; - assert: detectedNode = (allNodes detect: [:each | each isPI] ifNone: [#absent]); - assert: - (nodeWithNodes - allNodesDetect: [:each | each isElementNamed: 'absent'] - ifNone: [#absent]) = #absent. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testAllNodesDo [ - | nodeWithNodes allNodes | - - nodeWithNodes := self newNodeWithNodes. - allNodes := nodeWithNodes allNodes. - self - xmlShould: [:block | nodeWithNodes allNodesDo: block] - enumerate: allNodes. - - allNodes do: [:node | - node canHaveChildren - ifTrue: [ - self - xmlShould: [:block | node allNodesDo: block] - enumerate: node allNodes]]. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testAllNodesSelect [ - | nodeWithNodes allNodes | - - nodeWithNodes := self newNodeWithNodes. - allNodes := nodeWithNodes allNodes. - self - assertList: (nodeWithNodes allNodesSelect: [:each | each isComment]) - selects: (allNodes select: [:each | each isComment]). - - allNodes do: [:node | - node canHaveChildren - ifTrue: [ - self - assertList: (node allNodesSelect: [:each | each isComment]) - selects: (node allNodes select: [:each | each isComment])]]. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testAncestorNodes [ - | nodeWithNodes ancestorStack | - - super testAncestorNodes. - - nodeWithNodes := self newNodeWithNodes. - ancestorStack := OrderedCollection new. - nodeWithNodes allNodesDo: [:each | - [ancestorStack isEmpty - or: [ancestorStack last == each parent]] - whileFalse: [ancestorStack removeLast]. - self assert: - each ancestorNodes asOrderedCollection = - ancestorStack reversed. - ancestorStack addLast: each]. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testAncestorNodesDo [ - | nodeWithNodes | - - super testAncestorNodesDo. - - nodeWithNodes := self newNodeWithNodes. - nodeWithNodes allNodesDo: [:each | - self - xmlShould: [:block | each ancestorNodesDo: block] - enumerate: each ancestorNodes]. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testCanHaveChildren [ - self assert: self newNode canHaveChildren -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testCanonicallyEquals [ - super testCanonicallyEquals. - self - assert: (self newNodeWithNodes canonicallyEquals: self newNodeWithNodes); - deny: (self newNodeWithNodes canonicallyEquals: self newNode). -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testCopy [ - "this traverses the object graph of each node and compares it with - its copy to make sure nodes and the inst vars that should be copied - are copied. See #copiedClasses" - | nodeWithNodes nodeWithNodesCopy unvisitedPairs visitedPairs copiedClasses | - - super testCopy. - - nodeWithNodes := self newNodeWithNodes. - "initialize the configuration (if it can have one)" - nodeWithNodes configuration - ifNotNil: [:config | config nodeFactory: XMLPluggableNodeFactory new]. - - nodeWithNodesCopy := nodeWithNodes copy. - self - assert: nodeWithNodes printString = nodeWithNodesCopy printString; - assert: nodeWithNodes allNodes size = nodeWithNodesCopy allNodes size. - - unvisitedPairs := Set new. - nodeWithNodes allNodes - with: nodeWithNodesCopy allNodes - do: [:node :nodeCopy | unvisitedPairs add: node -> nodeCopy]. - - visitedPairs := Set new. - copiedClasses := - self copiedClasses collect: [:each | - XMLClassFinder classNamed: each]. - [unvisitedPairs isEmpty] - whileFalse: [ | pair originalObject copyObject | - pair := unvisitedPairs remove: unvisitedPairs anyOne. - originalObject := pair key. - copyObject := pair value. - - self deny: originalObject == copyObject. - visitedPairs add: pair. - 1 - to: (originalObject class instSize min: copyObject class instSize) - do: [:i | | newPair | - newPair := (originalObject instVarAt: i) -> (copyObject instVarAt: i). - ((visitedPairs includes: newPair) - or: [copiedClasses noneSatisfy: [:each | newPair key isKindOf: each]]) - ifFalse: [unvisitedPairs add: newPair]]]. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testDescendantNodes [ - | nodeWithNodes descendantNodes | - - nodeWithNodes := self newNodeWithNodes. - descendantNodes := nodeWithNodes descendantNodes. - self - assertList: descendantNodes - selects: nodeWithNodes allNodes allButFirst. - - descendantNodes do: [:node | - node canHaveChildren - ifTrue: [ - self - assertList: node descendantNodes - selects: node allNodes allButFirst]]. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testDescendantNodesCollect [ - | nodeWithNodes descendantNodes | - - nodeWithNodes := self newNodeWithNodes. - descendantNodes := nodeWithNodes descendantNodes. - self - assertList: (nodeWithNodes descendantNodesCollect: [:each | each identityHash]) - collects: (descendantNodes collect: [:each | each identityHash]). - - descendantNodes do: [:node | - node canHaveChildren - ifTrue: [ - self - assertList: (node descendantNodesCollect: [:each | each identityHash]) - collects: (node descendantNodes collect: [:each | each identityHash])]]. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testDescendantNodesDetect [ - | nodeWithNodes descendantNodes detectedNode | - - nodeWithNodes := self newNodeWithNodes. - descendantNodes := nodeWithNodes descendantNodes. - detectedNode := nodeWithNodes descendantNodesDetect: [:each | each isPI]. - self - assert: detectedNode notNil; - assert: detectedNode isPI; - assert: detectedNode = (descendantNodes detect: [:each | each isPI]); - assert: (nodeWithNodes descendantNodesDetect: [:each | each isElementNamed: 'absent']) isNil. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testDescendantNodesDetectIfNone [ - | nodeWithNodes descendantNodes detectedNode | - - nodeWithNodes := self newNodeWithNodes. - descendantNodes := nodeWithNodes descendantNodes. - detectedNode := - nodeWithNodes - descendantNodesDetect: [:each | each isPI] - ifNone: [self fail]. - self - assert: detectedNode isPI; - assert: detectedNode = (descendantNodes detect: [:each | each isPI] ifNone: [#absent]); - assert: - (nodeWithNodes - descendantNodesDetect: [:each | each isElementNamed: 'absent'] - ifNone: [#absent]) = #absent. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testDescendantNodesDo [ - | nodeWithNodes descendantNodes | - - nodeWithNodes := self newNodeWithNodes. - descendantNodes := nodeWithNodes descendantNodes. - self - xmlShould: [:block | nodeWithNodes descendantNodesDo: block] - enumerate: descendantNodes. - - descendantNodes do: [:node | - node canHaveChildren - ifTrue: [ - self - xmlShould: [:block | node descendantNodesDo: block] - enumerate: node descendantNodes]]. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testDescendantNodesSelect [ - | nodeWithNodes descendantNodes | - - nodeWithNodes := self newNodeWithNodes. - descendantNodes := nodeWithNodes descendantNodes. - self - assertList: (nodeWithNodes descendantNodesSelect: [:each | each isComment]) - selects: (descendantNodes select: [:each | each isComment]). - - descendantNodes do: [:node | - node canHaveChildren - ifTrue: [ - self - assertList: (node descendantNodesSelect: [:each | each isComment]) - selects: (node descendantNodes select: [:each | each isComment])]]. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testDocument [ - | nodeWithNodes document | - - nodeWithNodes := self newNodeWithNodes. - document := nodeWithNodes document. - nodeWithNodes allNodesDo: [:each | - self assert: each document == document]. - - document - ifNotNil: [ | root | - root := document root. - document removeNodes. - root allNodesDo: [:each | - self assert: each document isNil]]. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testDocumentRoot [ - | nodeWithNodes | - - super testDocumentRoot. - - nodeWithNodes := self newNodeWithNodes. - nodeWithNodes allNodesDo: [:each | - self assert: each documentRoot == nodeWithNodes]. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testFirstNode [ - | nodeWithNodes | - - nodeWithNodes := self newNodeWithNodes. - nodeWithNodes nodes copy do: [:each | - self assert: nodeWithNodes firstNode = each. - nodeWithNodes removeNode: each]. - self assert: nodeWithNodes firstNode isNil. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testHasChildren [ - super testHasChildren. - - self assert: self newNodeWithNodes hasChildren. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testIncludesNode [ - | nodeWithNodes | - - nodeWithNodes := self newNodeWithNodes. - nodeWithNodes nodes do: [:each | - self assert: (nodeWithNodes includesNode: each)]. - self deny: (nodeWithNodes includesNode: self newNode). -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testLastNode [ - | nodeWithNodes | - - nodeWithNodes := self newNodeWithNodes. - nodeWithNodes nodes reversed do: [:each | - self assert: nodeWithNodes lastNode = each. - nodeWithNodes removeNode: each]. - - self assert: nodeWithNodes lastNode isNil. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testNextNode [ - | nodeWithNodes nextNode | - - super testNextNode. - nodeWithNodes := self newNodeWithNodes. - nextNode := nil. - nodeWithNodes nodes reverseDo: [:each | - self assert: each nextNode = nextNode. - nextNode := each]. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testNodeAfter [ - | nodeWithNodes nodeAfter | - - nodeWithNodes := self newNodeWithNodes. - nodeAfter := nil. - nodeWithNodes nodes reverseDo: [:each | - self assert: (nodeWithNodes nodeAfter: each) = nodeAfter. - nodeAfter := each]. - self assert: (nodeWithNodes nodeAfter: self newNode) isNil. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testNodeAt [ - | nodeWithNodes | - - nodeWithNodes := self newNodeWithNodes. - self assert: (nodeWithNodes nodeAt: 0) isNil. - 1 to: nodeWithNodes nodes size do: [:i | - self assert: (nodeWithNodes nodeAt: i) = (nodeWithNodes nodes at: i)]. - self assert: (nodeWithNodes nodeAt: nodeWithNodes nodes size + 1) isNil. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testNodeAtIfAbsent [ - | nodeWithNodes | - - nodeWithNodes := self newNodeWithNodes. - 1 to: nodeWithNodes nodes size do: [:i | - self assert: - (nodeWithNodes - nodeAt: i - ifAbsent: [self fail]) = (nodeWithNodes nodes at: i)]. - self assert: - (nodeWithNodes - nodeAt: 0 - ifAbsent: [#absent]) = #absent. - self assert: - (nodeWithNodes - nodeAt: nodeWithNodes nodes size + 1 - ifAbsent: [#absent]) = #absent. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testNodeAtPut [ - | nodeWithNodes newNodeClass newNode | - - nodeWithNodes := self newNodeWithNodes. - newNodeClass := nodeWithNodes firstNode class. - self - should: [nodeWithNodes nodeAt: 0 put: newNodeClass new] - raise: Error. - 1 to: nodeWithNodes nodes size do: [:i | - newNode := newNodeClass new. - self - assert: (nodeWithNodes nodeAt: i put: newNode) == newNode; - assert: (nodeWithNodes nodeAt: i) == newNode]. - - newNode := newNodeClass new. - self assert: - (nodeWithNodes - nodeAt: nodeWithNodes nodes size + 1 - put: newNode) == newNode. - self assert: (nodeWithNodes nodeAt: nodeWithNodes nodes size) == newNode. - self - should: [ - nodeWithNodes - nodeAt: nodeWithNodes nodes size + 2 - put: newNodeClass new] - raise: Error. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testNodeBefore [ - | nodeWithNodes nodeBefore | - - nodeWithNodes := self newNodeWithNodes. - nodeBefore := nil. - nodeWithNodes nodes do: [:each | - self assert: (nodeWithNodes nodeBefore: each) = nodeBefore. - nodeBefore := each]. - self assert: (nodeWithNodes nodeBefore: self newNode) isNil. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testNodeListCopying [ - | nodeWithNodes nodeListCopy | - - nodeWithNodes := self newNodeWithNodes. - nodeListCopy := nodeWithNodes nodes copy. - self - assert: nodeListCopy = nodeWithNodes nodes; - deny: nodeListCopy == nodeWithNodes nodes; - assert: nodeWithNodes nodes observer == nodeWithNodes; - assert: nodeListCopy observer isNil. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testNodes [ - self assert: self newNode nodes class == self nodeListClass -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testNodesCollect [ - | node | - - node := self newNodeWithNodes. - self - assertList: (node nodesCollect: [:each | each identityHash]) - collects: (node nodes collect: [:each | each identityHash]). -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testNodesDetect [ - | node detectedNode | - - node := self newNodeWithNodes. - detectedNode := node nodesDetect: [:each | each isComment]. - self - assert: detectedNode notNil; - assert: detectedNode = (node nodes detect: [:each | each isComment]); - assert: (node nodesDetect: [:each | each isElementNamed: 'absent']) isNil. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testNodesDetectIfNone [ - | node | - - node := self newNodeWithNodes. - self assert: - (node - nodesDetect: [:each | each isComment] - ifNone: [self fail]) = - (node nodes detect: [:each | each isComment]). - self assert: - (node - nodesDetect: [:each | each isElementNamed: 'absent'] - ifNone: [#absent]) = #absent. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testNodesDo [ - | node | - - node := self newNode. - self - xmlShould: [:block | node nodesDo: block] - enumerate: #(). - - node := self newNodeWithNodes. - self - xmlShould: [:block | node nodesDo: block] - enumerate: node nodes. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testNodesSelect [ - | node | - - node := self newNodeWithNodes. - self - assertList: (node nodesSelect: [:each | each hasChildren]) - selects: (node nodes select: [:each | each hasChildren]). -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testPreviousNode [ - | nodeWithNodes previousNode | - - super testPreviousNode. - nodeWithNodes := self newNodeWithNodes. - previousNode := nil. - nodeWithNodes nodes do: [:each | - self assert: each previousNode = previousNode. - previousNode := each]. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testRemoveNode [ - | nodeWithNodes | - - nodeWithNodes := self newNodeWithNodes. - nodeWithNodes nodes copy do: [:each | - self - assert: (nodeWithNodes includesNode: each); - assert: (nodeWithNodes removeNode: each) == each; - deny: (nodeWithNodes includesNode: each)]. - self deny: nodeWithNodes hasChildren. - self - should: [nodeWithNodes removeNode: self newNode] - raise: Error. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testRemoveNodeIfAbsent [ - | nodeWithNodes | - - nodeWithNodes := self newNodeWithNodes. - nodeWithNodes nodes copy do: [:each | - self assert: (nodeWithNodes includesNode: each). - self assert: - (nodeWithNodes - removeNode: each - ifAbsent: [self fail]) == each. - self deny: (nodeWithNodes includesNode: each)]. - self deny: nodeWithNodes hasChildren. - self assert: - (nodeWithNodes - removeNode: self newNode - ifAbsent: [#absent]) == #absent. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testRemoveNodes [ - | nodeWithNodes | - - nodeWithNodes := self newNodeWithNodes. - self - assert: nodeWithNodes hasChildren; - assert: nodeWithNodes removeNodes == nodeWithNodes; - deny: nodeWithNodes hasChildren. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testRemoveNodesAll [ - | nodeWithNodes | - - nodeWithNodes := self newNodeWithNodes. - 1 to: nodeWithNodes nodes size do: [:i | | removed | - removed := (nodeWithNodes nodes copyFrom: 1 to: i). - self - assert: (removed allSatisfy: [:each | nodeWithNodes includesNode: each]); - assert: (nodeWithNodes removeNodes: removed) == removed; - deny: (removed anySatisfy: [:each | nodeWithNodes includesNode: each]). - nodeWithNodes := self newNodeWithNodes]. -] - -{ #category : #tests } -XMLNodeWithChildrenTest >> testReplaceNodeWith [ - | nodeWithNodes replacements nodes firstIndex secondIndex | - - nodeWithNodes := self newNodeWithNodes. - replacements := OrderedCollection new. - nodeWithNodes nodes copy do: [:each | - self assert: - (nodeWithNodes - replaceNode: each - with: (replacements add: self newNode)) == replacements last]. - self assert: nodeWithNodes nodes asOrderedCollection = replacements. - - nodeWithNodes := self newNodeWithNodes. - nodes := nodeWithNodes nodes copy. - nodes do: [:each | - self assert: - (nodeWithNodes - replaceNode: each - with: each) == each]. - self assert: nodeWithNodes nodes = nodes. - - firstIndex := 1. - secondIndex := nodes size. - [firstIndex < secondIndex] - whileTrue: [ - nodeWithNodes - replaceNode: (nodes at: firstIndex) - with: (nodes at: secondIndex). - firstIndex := firstIndex + 1. - secondIndex := secondIndex - 1]. - self assert: nodeWithNodes nodes = nodes reversed. - - self - should: [ - nodeWithNodes - replaceNode: nodes anyOne copy - with: self newNode] - raise: Error. -] diff --git a/src/XML-Tests-Parser/XMLNodeWithElementsTest.class.st b/src/XML-Tests-Parser/XMLNodeWithElementsTest.class.st deleted file mode 100644 index 9836c6aab..000000000 --- a/src/XML-Tests-Parser/XMLNodeWithElementsTest.class.st +++ /dev/null @@ -1,2222 +0,0 @@ -" -Abstract, do not run. -" -Class { - #name : #XMLNodeWithElementsTest, - #superclass : #XMLNodeWithChildrenTest, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #asserting } -XMLNodeWithElementsTest >> assertElements: aPrettyPrintFormattedElementCollection werePrettyPrintFormattedFrom: anElementCollection [ - anElementCollection - with: aPrettyPrintFormattedElementCollection - do: [:element :prettyElement | - element hasChildren - ifTrue: [ - "if the first node wasn't a string node, then whitespace - formatting should have been output before it" - element firstNode isStringNode - ifFalse: [ - self - assert: prettyElement firstNode isStringNode; - assert: prettyElement firstNode isWhitespace]. - - "if there were no string nodes at all, then trailing - whitespace formatting should have been output" - element hasStringNodes - ifFalse: [ - self - assert: prettyElement lastNode isStringNode; - assert: prettyElement lastNode isWhitespace]]]. -] - -{ #category : #accessing } -XMLNodeWithElementsTest >> configurationClass [ - ^ XMLDOMConfiguration -] - -{ #category : #tests } -XMLNodeWithElementsTest >> elementBefore [ - self newNodeWithElements allNodesDo: [:node | - node canHaveChildren - ifTrue: [| elementBefore | - elementBefore := nil. - node elements do: [:each | - self assert: (node elementBefore: each) == elementBefore. - elementBefore := each]]]. -] - -{ #category : #'instance creation' } -XMLNodeWithElementsTest >> newNodeWithElements [ - ^ self newNode - addNode: (XMLComment string: 'before'); - addNode: - ((self elementClass named: 'zero') - addNode: (XMLComment string: 'during'); - addNode: - ((self elementClass named: 'one') - attributeAt: 'one' put: '1'; - addNode: (XMLString string: 'testing one'); - addNode: (self elementClass named: 'two'); - addNode: (XMLPI target: 'target' data: 'data'); - yourself); - addNode: (XMLString string: 'testing two'); - addNode: - ((self elementClass name: 'three' namespaceURI: 'testNS') - addNode: (self elementClass named: 'four'); - addNode: (XMLCData string: 'testing three'); - yourself); - addNode: - ((self elementClass name: 'prefix:four' namespaceURI: 'testNS') - attributeAt: 'four' put: '4'; - addNode: - (self elementClass name: 'prefix:five' namespaceURI: 'testNS'); - yourself); - addNode: (self elementClass named: 'four'); - yourself); - addNode: (XMLComment string: 'after'); - yourself. -] - -{ #category : #'instance creation' } -XMLNodeWithElementsTest >> newNodeWithNodes [ - ^ self newNodeWithElements -] - -{ #category : #accessing } -XMLNodeWithElementsTest >> nodeClass [ - ^ XMLNodeWithElements -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAcceptNodeVisitor [ - | visitor nodeWithElements message | - - visitor := XMLRecordingNodeVisitor new. - nodeWithElements := self newNodeWithElements. - self - assert: (nodeWithElements acceptNodeVisitor: visitor) == nodeWithElements; - assert: visitor messageRecorder hasMessages. - - "skip the messages for the nodeWithElements" - [visitor messageRecorder hasMessages - and: [ - visitor messageRecorder peekMessage arguments = - (Array with: nodeWithElements)]] - whileTrue: [visitor messageRecorder nextMessage]. - - nodeWithElements descendantNodesDo: [:node | | visitingSelectors | - visitingSelectors := - (#( - #(isElement #(visitElement: visitNodeWithElements:)) - #(isCData #(visitCData: #visitStringNode:)) - #(isStringNode #(#visitStringNode:)) - #(isComment #(visitComment:)) - #(isPI #(visitPI:))) - detect: [:each | node perform: each first] - ifNone: [#(nil #())]) second. - - self assert: visitingSelectors notEmpty. - visitingSelectors do: [:selector | - self assert: visitor messageRecorder hasMessages. - - message := visitor messageRecorder nextMessage. - self - assert: message selector = selector; - assert: message arguments = (Array with: node)]]. - - self deny: visitor messageRecorder hasMessages. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAddCData [ - | nodeWithElements cdataNode | - - nodeWithElements := self newNode. - cdataNode := nodeWithElements addCData: 'test'. - self - assert: cdataNode isCData; - assert: cdataNode string = 'test'; - assert: nodeWithElements nodes size = 1; - assert: nodeWithElements firstNode == cdataNode. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAddCDataNodeFactoryUse [ - | nodeWithElements firstCDataNode lastCDataNode | - - nodeWithElements := self newNode. - firstCDataNode := nodeWithElements addCData: 'one'. - nodeWithElements nodeFactory: - (XMLPluggableNodeFactory new - cdataClass: XMLFCData). - lastCDataNode := nodeWithElements addCData: 'two'. - self - assert: nodeWithElements nodes size = 2; - assert: firstCDataNode class == XMLCData; - assert: firstCDataNode string = 'one'; - assert: lastCDataNode class == XMLFCData; - assert: lastCDataNode string = 'two'. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAddComment [ - | nodeWithElements comment | - - super testAddComment. - - (nodeWithElements := self newNode) - nodeFactory: - (XMLPluggableNodeFactory new - commentClass: XMLFComment). - comment := nodeWithElements addComment: 'test'. - self - assert: nodeWithElements nodes size = 1; - assert: nodeWithElements firstNode == comment; - assert: comment class == XMLFComment; - assert: comment string = 'test'. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAddElementNamed [ - | nodeWithElements element | - - nodeWithElements := self newNode. - element := nodeWithElements addElementNamed: 'one'. - self - assert: nodeWithElements nodes size = 1; - assert: element isElement; - assert: element name = 'one'. - self - should: [nodeWithElements addElementNamed: 'undeclared:two'] - raise: XMLNamespaceException. - - nodeWithElements := self newNode. - nodeWithElements usesNamespaces: false. - self - shouldnt: [nodeWithElements addElementNamed: 'undeclared:three'] - raise: XMLNamespaceException. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAddElementNamedAttributes [ - | nodeWithElements element | - - nodeWithElements := self newNode. - element := - nodeWithElements - addElementNamed: 'one' - attributes: self unprefixedAttributeAssociations. - self - assert: nodeWithElements nodes size = 1; - assert: element isElement; - assert: element name = 'one'; - assertElement: element hasAttributes: self unprefixedAttributes. - self - should: [ - nodeWithElements - addElementNamed: 'undeclared:two' - attributes: self unprefixedAttributeAssociations] - raise: XMLNamespaceException. - self - should: [ - "attributes with undeclared prefixes should be caught too" - nodeWithElements - addElementNamed: 'three' - attributes: self attributeAssociations] - raise: XMLNamespaceException. - - nodeWithElements := self newNode. - nodeWithElements usesNamespaces: false. - self - shouldnt: [ - nodeWithElements - addElementNamed: 'undeclared:four' - attributes: self attributeAssociations] - raise: XMLNamespaceException. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAddElementNamedAttributesNodeFactoryUse [ - | nodeWithElements element | - - nodeWithElements := self newNode. - nodeWithElements nodeFactory: - (XMLPluggableElementFactory new - handleElement: 'test' - attributes: self unprefixedAttributeAssociations - withClass: self otherElementClass). - element := - nodeWithElements - addElementNamed: 'test' - attributes: self unprefixedAttributeAssociations. - self - assert: nodeWithElements nodes size = 1; - assert: element class == self otherElementClass; - assert: element name = 'test'; - assertElement: element hasAttributes: self unprefixedAttributes. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAddElementNamedNamespaceURI [ - | nodeWithElements element | - - nodeWithElements := self newNode. - element := - nodeWithElements - addElementNamed: 'test' - namespaceURI: 'defaultNS'. - self - assert: nodeWithElements nodes size = 1; - assert: element isElement; - assert: element name = 'test'; - assert: element namespaceURI = 'defaultNS'. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAddElementNamedNamespaceURIAttributes [ - | nodeWithElements element | - - nodeWithElements := self newNode. - element := - nodeWithElements - addElementNamed: 'prefix:one' - namespaceURI: 'prefixNS' - attributes: self attributeAssociations. - self - assert: nodeWithElements nodes size = 1; - assert: element isElement; - assert: element name = 'prefix:one'; - assert: element namespaceURI = 'prefixNS'; - assertElement: element hasAttributes: self attributes. - self - should: [ - "attributes with undeclared prefixes should be caught" - nodeWithElements - addElementNamed: 'two' - namespaceURI: 'defaultNS' - attributes: self attributeAssociations] - raise: XMLNamespaceException. - - "this forces namespace support" - nodeWithElements := self newNode. - nodeWithElements usesNamespaces: false. - self - shouldnt: [ - nodeWithElements - addElementNamed: 'three' - namespaceURI: '' - attributes: self unprefixedAttributeAssociations] - raise: XMLNamespaceException. - nodeWithElements usesNamespaces: false. - self - should: [ - nodeWithElements - addElementNamed: 'four' - namespaceURI: '' - attributes: self attributeAssociations] - raise: XMLNamespaceException. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAddElementNamedNamespaceURIAttributesNodeFactoryUse [ - | nodeWithElements element | - - nodeWithElements := self newNode. - nodeWithElements nodeFactory: - (XMLPluggableElementFactory new - handleElement: 'prefix:test' - namespaceURI: 'prefixNS' - attributes: self attributeAssociations - withClass: self otherElementClass). - element := - nodeWithElements - addElementNamed: 'prefix:test' - namespaceURI: 'prefixNS' - attributes: self attributeAssociations. - self - assert: nodeWithElements nodes size = 1; - assert: element class == self otherElementClass; - assert: element name = 'prefix:test'; - assert: element namespaceURI = 'prefixNS'; - assertElement: element hasAttributes: self attributes. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAddElementNamedNamespaceURINodeFactoryUse [ - | nodeWithElements element | - - nodeWithElements := self newNode. - nodeWithElements nodeFactory: - (XMLPluggableElementFactory new - handleElement: 'test' - namespaceURI: 'defaultNS' - withClass: self otherElementClass). - element := - nodeWithElements - addElementNamed: 'test' - namespaceURI: 'defaultNS'. - self - assert: nodeWithElements nodes size = 1; - assert: element class == self otherElementClass; - assert: element name = 'test'; - assert: element namespaceURI = 'defaultNS'. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAddElementNamedNodeFactoryUse [ - | nodeWithElements element | - - nodeWithElements := self newNode. - nodeWithElements nodeFactory: - (XMLPluggableElementFactory new - handleElement: 'test' - withClass: self otherElementClass). - element := nodeWithElements addElementNamed: 'test'. - self - assert: nodeWithElements nodes size = 1; - assert: element class == self otherElementClass; - assert: element name = 'test'. - -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAddPITargetData [ - | nodeWithElements pi | - - super testAddPITargetData. - - (nodeWithElements := self newNode) - nodeFactory: - (XMLPluggableNodeFactory new - piClass: XMLFPI). - pi := - nodeWithElements - addPITarget: 'target' - data: 'data'. - self - assert: nodeWithElements nodes size = 1; - assert: nodeWithElements firstNode == pi; - assert: pi class == XMLFPI; - assert: pi target = 'target'; - assert: pi data = 'data'. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAddString [ - | nodeWithElements firstStringNode elementNode lastStringNode | - - nodeWithElements := self newNode. - firstStringNode := nodeWithElements addString: 'one'. - self - assert: (firstStringNode isStringNode: 'one'); - assert: nodeWithElements nodes size = 1; - assert: nodeWithElements firstNode == firstStringNode. - - self - assert: (nodeWithElements addString: 'two') == firstStringNode; - assert: (firstStringNode isStringNode: 'onetwo'); - assert: nodeWithElements nodes size = 1; - assert: nodeWithElements nodes first == firstStringNode. - - elementNode := nodeWithElements addNode: (self elementClass named: 'three'). - self - assert: (elementNode isElementNamed: 'three'); - assert: nodeWithElements nodes size = 2; - assert: nodeWithElements nodes first == firstStringNode; - assert: nodeWithElements nodes second == elementNode. - - lastStringNode := nodeWithElements addString: 'four'. - self - assert: (lastStringNode isStringNode: 'four'); - assert: nodeWithElements nodes size = 3; - assert: nodeWithElements nodes first == firstStringNode; - assert: nodeWithElements nodes second == elementNode; - assert: nodeWithElements nodes third == lastStringNode. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAddStringNodeFactoryUse [ - | nodeWithElements firstStringNode elementNode lastStringNode | - - nodeWithElements := self newNode. - firstStringNode := nodeWithElements addString: 'one'. - self - assert: (firstStringNode isStringNode: 'one'); - assert: nodeWithElements nodes size = 1; - assert: nodeWithElements firstNode == firstStringNode. - - nodeWithElements nodeFactory: - (XMLPluggableNodeFactory new - stringNodeClass: XMLFString). - self - assert: (nodeWithElements addString: 'two') == firstStringNode; - assert: (firstStringNode isStringNode: 'onetwo'); - assert: nodeWithElements nodes size = 1; - assert: nodeWithElements nodes first == firstStringNode. - - elementNode := nodeWithElements addNode: (self elementClass named: 'three'). - self - assert: (elementNode isElementNamed: 'three'); - assert: nodeWithElements nodes size = 2; - assert: nodeWithElements nodes first == firstStringNode; - assert: nodeWithElements nodes second == elementNode. - - lastStringNode := nodeWithElements addString: 'four'. - self - assert: lastStringNode class == XMLFString; - assert: (lastStringNode isStringNode: 'four'); - assert: nodeWithElements nodes size = 3; - assert: nodeWithElements nodes first == firstStringNode; - assert: nodeWithElements nodes second == elementNode; - assert: nodeWithElements nodes third == lastStringNode. - - self - assert: (nodeWithElements addString: 'five') == lastStringNode; - assert: lastStringNode class == XMLFString; - assert: (lastStringNode isStringNode: 'fourfive'); - assert: nodeWithElements nodes size = 3; - assert: nodeWithElements nodes first == firstStringNode; - assert: nodeWithElements nodes second == elementNode; - assert: nodeWithElements nodes third == lastStringNode. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAllElements [ - | nodeWithElements allElements | - - nodeWithElements := self newNodeWithElements. - allElements := nodeWithElements allElements. - nodeWithElements isElement - ifTrue: [ - self assert: allElements first = nodeWithElements. - allElements removeFirst]. - self assert: - (allElements collect: [:each | each name]) asArray = - #('zero' 'one' 'two' 'three' 'four' 'prefix:four' 'prefix:five' 'four'). - self - assertList: allElements first allElements selects: (allElements copyFrom: 1 to: 8); - assertList: allElements second allElements selects: (allElements copyFrom: 2 to: 3); - assertList: allElements third allElements selects: (allElements copyFrom: 3 to: 3); - assertList: allElements fourth allElements selects: (allElements copyFrom: 4 to: 5); - assertList: allElements fifth allElements selects: (allElements copyFrom: 5 to: 5); - assertList: allElements sixth allElements selects: (allElements copyFrom: 6 to: 7); - assertList: allElements seventh allElements selects: (allElements copyFrom: 7 to: 7); - assertList: allElements eighth allElements selects: (allElements copyFrom: 8 to: 8). -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAllElementsCollect [ - | nodeWithElements allElements | - - nodeWithElements := self newNodeWithElements. - allElements := nodeWithElements allElements. - self - assertList: (nodeWithElements allElementsCollect: [:each | each identityHash]) - collects: (allElements collect: [:each | each identityHash]). - - allElements do: [:node | - self - assertList: (node allElementsCollect: [:each | each identityHash]) - collects: (node allElements collect: [:each | each identityHash])]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAllElementsDetect [ - | nodeWithElements allElements detectedElement | - - nodeWithElements := self newNodeWithElements. - allElements := nodeWithElements allElements. - detectedElement := nodeWithElements allElementsDetect: [:each | each isNamed: 'prefix:four']. - self - assert: detectedElement notNil; - assert: (detectedElement isNamed: 'prefix:four'); - assert: detectedElement = (allElements detect: [:each | each isNamed: 'prefix:four']); - assert: (nodeWithElements allElementsDetect: [:each | each isNamed: 'absent']) isNil. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAllElementsDetectIfNone [ - | nodeWithElements allElements detectedElement | - - nodeWithElements := self newNodeWithElements. - allElements := nodeWithElements allElements. - detectedElement := - nodeWithElements - allElementsDetect: [:each | each isNamed: 'prefix:four'] - ifNone: [self fail]. - self assert: (detectedElement isNamed: 'prefix:four'). - self assert: - detectedElement = - (allElements detect: [:each | each isNamed: 'prefix:four']). - self assert: - (nodeWithElements - allElementsDetect: [:each | each isNamed: 'absent'] - ifNone: [#absent]) = #absent. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAllElementsDo [ - | nodeWithElements allElements | - - nodeWithElements := self newNodeWithElements. - allElements := nodeWithElements allElements. - self - xmlShould: [:block | nodeWithElements allElementsDo: block] - enumerate: allElements. - - allElements do: [:element | - self - xmlShould: [:block | element allElementsDo: block] - enumerate: element allElements]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAllElementsNamed [ - | nodeWithElements allElements namedElements | - - nodeWithElements := self newNodeWithElements. - self assert: (nodeWithElements allElementsNamed: 'absent') isEmpty. - - allElements := nodeWithElements allElements. - namedElements := nodeWithElements allElementsNamed: 'four'. - self - assert: namedElements size = 3; - assertList: namedElements selects: (allElements select: [:each | each isNamed: 'four']). -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAllElementsNamedDo [ - | nodeWithElements allElements namedElements | - - nodeWithElements := self newNodeWithElements. - self - xmlShould: [:block | nodeWithElements allElementsNamed: 'absent' do: block] - enumerate: #(). - - allElements := nodeWithElements allElements. - namedElements := nodeWithElements allElementsNamed: 'four'. - self - xmlShould: [:block | nodeWithElements allElementsNamed: 'four' do: block] - enumerate: namedElements. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAllElementsNamedNamespaceURI [ - | nodeWithElements allElements namedElements | - - nodeWithElements := self newNodeWithElements. - self assert: (nodeWithElements allElementsNamed: 'four' namespaceURI: 'absent') isEmpty. - - allElements := nodeWithElements allElements. - namedElements := nodeWithElements allElementsNamed: 'four' namespaceURI: 'testNS'. - self - assert: namedElements size = 2; - assertList: namedElements - selects: - (allElements select: [:each | - (each isNamed: 'four') - and: [each namespaceURI = 'testNS']]). -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAllElementsSelect [ - | nodeWithElements allElements | - - nodeWithElements := self newNodeWithElements. - allElements := nodeWithElements allElements. - self - assertList: (nodeWithElements allElementsSelect: [:each | each hasChildren]) - selects: (allElements select: [:each | each hasChildren]). - - allElements do: [:node | - self - assertList: (node allElementsSelect: [:each | each hasChildren]) - selects: (node allElements select: [:each | each hasChildren])]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAllNodes [ - | nodeWithElements allNodes | - - nodeWithElements := self newNodeWithElements. - allNodes := nodeWithElements allNodes. - self - assert: allNodes size = 16; - assert: (allNodes at: 1) = nodeWithElements; - assert: (allNodes at: 2) isComment; - assert: ((allNodes at: 3) isElementNamed: 'zero'); - assert: (allNodes at: 4) isComment; - assert: ((allNodes at: 5) isElementNamed: 'one'); - assert: ((allNodes at: 6) isStringNode: 'testing one'); - assert: ((allNodes at: 7) isElementNamed: 'two'); - assert: (allNodes at: 8) isPI; - assert: ((allNodes at: 9) isStringNode: 'testing two'); - assert: ((allNodes at: 10) isElementNamed: 'three'); - assert: ((allNodes at: 11) isElementNamed: 'four'); - assert: ((allNodes at: 12) isStringNode: 'testing three'); - assert: ((allNodes at: 13) isElementNamed: 'prefix:four'); - assert: ((allNodes at: 14) isElementNamed: 'prefix:five'); - assert: ((allNodes at: 15) isElementNamed: 'four'); - assert: (allNodes at: 16) isComment. - self - assertList: (allNodes at: 3) allNodes selects: (allNodes copyFrom: 3 to: 15); - assertList: (allNodes at: 5) allNodes selects: (allNodes copyFrom: 5 to: 8); - assertList: (allNodes at: 7) allNodes selects: (allNodes copyFrom: 7 to: 7); - assertList: (allNodes at: 10) allNodes selects: (allNodes copyFrom: 10 to: 12); - assertList: (allNodes at: 11) allNodes selects: (allNodes copyFrom: 11 to: 11); - assertList: (allNodes at: 13) allNodes selects: (allNodes copyFrom: 13 to: 14); - assertList: (allNodes at: 14) allNodes selects: (allNodes copyFrom: 14 to: 14); - assertList: (allNodes at: 15) allNodes selects: (allNodes copyFrom: 15 to: 15). -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAncestorElements [ - | nodeWithElements ancestorStack | - - super testAncestorElements. - - nodeWithElements := self newNodeWithElements. - ancestorStack := OrderedCollection new. - nodeWithElements allNodesDo: [:each | - [ancestorStack isEmpty - or: [ancestorStack last = each parent]] - whileFalse: [ancestorStack removeLast]. - self assert: - each ancestorElements asOrderedCollection = - ancestorStack reversed. - each isElement - ifTrue: [ancestorStack addLast: each]]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testAncestorElementsDo [ - | nodeWithElements | - - super testAncestorElementsDo. - - nodeWithElements := self newNodeWithElements. - nodeWithElements allNodesDo: [:each | - self - xmlShould: [:block | each ancestorElementsDo: block] - enumerate: each ancestorElements]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testConfiguration [ - | nodeWithElements configuration newConfiguration | - - nodeWithElements := self newNodeWithElements. - configuration := nodeWithElements configuration. - self assert: configuration class == self configurationClass. - nodeWithElements allElementsDo: [:element | - self assert: element configuration == configuration. - element attributeNodes do: [:each | - self assert: each configuration == configuration]]. - - "ensure descendants inherit the new config when it's set" - newConfiguration := self configurationClass new. - nodeWithElements configuration: newConfiguration. - self assert: nodeWithElements configuration == newConfiguration. - nodeWithElements allElementsDo: [:element | - self assert: element configuration == newConfiguration. - element attributeNodes do: [:each | - self assert: each configuration == newConfiguration]]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testContentNodes [ - | nodeWithElements | - - nodeWithElements := self newNodeWithElements. - self - assertList: nodeWithElements contentNodes - selects: (nodeWithElements nodes select: [:each | each isContentNode]). - nodeWithElements allElementsDo: [:element | - self - assertList: element contentNodes - selects: (element nodes select: [:each | each isContentNode])]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testContentNodesDo [ - | nodeWithElements | - - nodeWithElements := self newNodeWithElements. - self - xmlShould: [:block | nodeWithElements contentNodesDo: block] - enumerate: nodeWithElements contentNodes. - nodeWithElements allElementsDo: [:each | - self - xmlShould: [:block | each contentNodesDo: block] - enumerate: each contentNodes]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testContentStringAt [ - | root | - - root := self newNodeWithElements firstElement. - root elementsDo: [:each | - self assert: (root contentStringAt: each name) = each contentString]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testDescendantElements [ - | nodeWithElements descendantElements | - - nodeWithElements := self newNodeWithElements. - descendantElements := nodeWithElements descendantElements. - self assert: - (descendantElements collect: [:each | each name]) asArray = - #('zero' 'one' 'two' 'three' 'four' 'prefix:four' 'prefix:five' 'four'). - self - assertList: descendantElements first descendantElements selects: (descendantElements copyFrom: 2 to: 8); - assertList: descendantElements second descendantElements selects: (descendantElements copyFrom: 3 to: 3); - assertList: descendantElements third descendantElements selects: descendantElements copyEmpty; - assertList: descendantElements fourth descendantElements selects: (descendantElements copyFrom: 5 to: 5); - assertList: descendantElements fifth descendantElements selects: descendantElements copyEmpty; - assertList: descendantElements sixth descendantElements selects: (descendantElements copyFrom: 7 to: 7); - assertList: descendantElements seventh descendantElements selects: descendantElements copyEmpty; - assertList: descendantElements eighth descendantElements selects: descendantElements copyEmpty. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testDescendantElementsCollect [ - | nodeWithElements descendantElements | - - nodeWithElements := self newNodeWithElements. - descendantElements := nodeWithElements descendantElements. - self - assertList: (nodeWithElements descendantElementsCollect: [:each | each identityHash]) - collects: (descendantElements collect: [:each | each identityHash]). - - descendantElements do: [:node | - self - assertList: (node descendantElementsCollect: [:each | each identityHash]) - collects: (node descendantElements collect: [:each | each identityHash])]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testDescendantElementsDetect [ - | nodeWithElements descendantElements detectedElement | - - nodeWithElements := self newNodeWithElements. - descendantElements := nodeWithElements descendantElements. - detectedElement := nodeWithElements descendantElementsDetect: [:each | each isNamed: 'prefix:four']. - self - assert: detectedElement notNil; - assert: (detectedElement isNamed: 'prefix:four'); - assert: detectedElement = (descendantElements detect: [:each | each isNamed: 'prefix:four']); - assert: (detectedElement descendantElementsDetect: [:each | each isNamed: 'prefix:four']) isNil. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testDescendantElementsDetectIfNone [ - | nodeWithElements descendantElements detectedElement | - - nodeWithElements := self newNodeWithElements. - descendantElements := nodeWithElements descendantElements. - detectedElement := - nodeWithElements - descendantElementsDetect: [:each | each isNamed: 'prefix:four'] - ifNone: [self fail]. - self assert: (detectedElement isNamed: 'prefix:four'). - self assert: - detectedElement = - (descendantElements detect: [:each | each isNamed: 'prefix:four']). - self assert: - (detectedElement - descendantElementsDetect: [:each | each isNamed: 'prefix:four'] - ifNone: [#absent]) = #absent. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testDescendantElementsDo [ - | nodeWithElements descendantElements | - - nodeWithElements := self newNodeWithElements. - descendantElements := nodeWithElements descendantElements. - self - xmlShould: [:block | nodeWithElements descendantElementsDo: block] - enumerate: descendantElements. - - descendantElements do: [:element | - self - xmlShould: [:block | element descendantElementsDo: block] - enumerate: element descendantElements]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testDescendantElementsNamed [ - | nodeWithElements descendantElements namedElements | - - nodeWithElements := self newNodeWithElements. - self assert: (nodeWithElements descendantElementsNamed: 'absent') isEmpty. - - descendantElements := nodeWithElements descendantElements. - namedElements := nodeWithElements descendantElementsNamed: 'four'. - self assert: namedElements size = 3. - self - assertList: namedElements - selects: (descendantElements select: [:each | each isNamed: 'four']). - - namedElements do: [:each | - self assert: (each descendantElementsNamed: 'four') isEmpty] -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testDescendantElementsNamedDo [ - | nodeWithElements namedElements | - - nodeWithElements := self newNodeWithElements. - self - xmlShould: [:block | nodeWithElements descendantElementsNamed: 'absent' do: block] - enumerate: #(). - - namedElements := nodeWithElements descendantElementsNamed: 'four'. - self - xmlShould: [:block | nodeWithElements descendantElementsNamed: 'four' do: block] - enumerate: namedElements. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testDescendantElementsNamedNamespaceURI [ - | nodeWithElements descendantElements namedElements | - - nodeWithElements := self newNodeWithElements. - self assert: - (nodeWithElements - descendantElementsNamed: 'four' - namespaceURI: 'absent') isEmpty. - - descendantElements := nodeWithElements descendantElements. - namedElements := - nodeWithElements - descendantElementsNamed: 'four' - namespaceURI: 'testNS'. - self - assert: namedElements size = 2; - assertList: namedElements - selects: - (descendantElements select: [:each | - (each isNamed: 'four') - and: [each namespaceURI = 'testNS']]). -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testDescendantElementsSelect [ - | nodeWithElements descendantElements | - - nodeWithElements := self newNodeWithElements. - descendantElements := nodeWithElements descendantElements. - self - assertList: (nodeWithElements descendantElementsSelect: [:each | each hasChildren]) - selects: (descendantElements select: [:each | each hasChildren]). - - descendantElements do: [:node | - self - assertList: (node descendantElementsSelect: [:each | each hasChildren]) - selects: (node descendantElements select: [:each | each hasChildren])]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testElementAfter [ - self newNodeWithElements allNodesDo: [:node | - node canHaveChildren - ifTrue: [| elementAfter | - elementAfter := nil. - node elements reverseDo: [:each | - self assert: (node elementAfter: each) = elementAfter. - elementAfter := each]]] -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testElementAt [ - self newNodeWithElements allNodesDo: [:node | - node canHaveChildren - ifTrue: [| elements localNames qualifiedNames | - elements := node elements. - localNames := (elements collect: [:each | each localName]) asSet. - qualifiedNames := - (elements - select: [:each | each hasPrefix] - thenCollect: [:each | each name]) asSet. - localNames do: [:localName | - self assert: - (node elementAt: localName) = - (elements detect: [:each | each localName = localName]). - self assert: (node elementAt: 'absent:', localName) isNil]. - qualifiedNames do: [:qualifiedName | - self assert: - (node elementAt: qualifiedName) = - (elements detect: [:each | - each hasPrefix - and: [each name = qualifiedName]])]. - self assert: (node elementAt: 'absent') isNil]] -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testElementAtAddedInPlace [ - self newNodeWithElements allNodesDo: [:node | - node canHaveChildren - ifTrue: [ - (Array - with: node elements - with: node elements reversed) do: [:elements | | localNames qualifiedNames | - localNames := (elements collect: [:each | each localName]) asSet. - qualifiedNames := - (elements - select: [:each | each hasPrefix] - thenCollect: [:each | each name]) asSet. - node addNodes: elements. - localNames do: [:localName | - self assert: - (node elementAt: localName) = - (elements detect: [:each | each localName = localName])]. - qualifiedNames do: [:qualifiedName | - self assert: - (node elementAt: qualifiedName) = - (elements detect: [:each | - each hasPrefix - and: [each name = qualifiedName]])]]]] -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testElementAtIfAbsent [ - self newNodeWithElements allNodesDo: [:node | - node canHaveChildren - ifTrue: [| elements localNames qualifiedNames | - elements := node elements. - localNames := (elements collect: [:each | each localName]) asSet. - qualifiedNames := - (elements - select: [:each | each hasPrefix] - thenCollect: [:each | each name]) asSet. - localNames do: [:localName | - self assert: - (node - elementAt: localName - ifAbsent: [self fail]) = - (elements detect: [:each | each localName = localName]). - self assert: - (node - elementAt: 'absent:', localName - ifAbsent: [#absent]) = #absent]. - qualifiedNames do: [:qualifiedName | - self assert: - (node - elementAt: qualifiedName - ifAbsent: [self fail]) = - (elements detect: [:each | - each hasPrefix - and: [each name = qualifiedName]])]. - self assert: - (node - elementAt: 'absent' - ifAbsent: [#absent]) = #absent]] -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testElementAtNamespaceURI [ - self newNodeWithElements allNodesDo: [:node | - node canHaveChildren - ifTrue: [| elements localNames qualifiedNames namespaceURIs | - elements := node elements. - localNames := (elements collect: [:each | each localName]) asSet. - qualifiedNames := - (elements - select: [:each | each hasPrefix] - thenCollect: [:each | each name]) asSet. - namespaceURIs := (elements collect: [:each | each namespaceURI]) asSet. - localNames do: [:localName | - namespaceURIs do: [:uri | - self assert: - (node - elementAt: localName - namespaceURI: uri) = - (elements detect: [:each | - each localName = localName - and: [each namespaceURI = uri]])]. - self assert: - (node - elementAt: localName - namespaceURI: 'absentNS') isNil]. - qualifiedNames do: [:qualifiedName | - namespaceURIs do: [:uri | - self assert: - (node - elementAt: qualifiedName - namespaceURI: uri) = - (elements detect: [:each | - each hasPrefix - and: [each name = qualifiedName - and: [each namespaceURI = uri]]])]. - self assert: - (node - elementAt: qualifiedName - namespaceURI: 'absentNS') isNil]]] -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testElementAtNamespaceURIIfAbsent [ - self newNodeWithElements allNodesDo: [:node | - node canHaveChildren - ifTrue: [| elements localNames qualifiedNames namespaceURIs | - elements := node elements. - localNames := (elements collect: [:each | each localName]) asSet. - qualifiedNames := - (elements - select: [:each | each hasPrefix] - thenCollect: [:each | each name]) asSet. - namespaceURIs := (elements collect: [:each | each namespaceURI]) asSet. - localNames do: [:localName | - namespaceURIs do: [:uri | - self assert: - (node - elementAt: localName - namespaceURI: uri - ifAbsent: [#absent]) = - (elements - detect: [:each | - each localName = localName - and: [each namespaceURI = uri]] - ifNone: [#absent])]. - self assert: - (node - elementAt: localName - namespaceURI: 'absentNS' - ifAbsent: [#absent]) = #absent]. - qualifiedNames do: [:qualifiedName | - namespaceURIs do: [:uri | - self assert: - (node - elementAt: qualifiedName - namespaceURI: uri - ifAbsent: [#absent]) = - (elements - detect: [:each | - each hasPrefix - and: [each name = qualifiedName - and: [each namespaceURI = uri]]] - ifNone: [#absent])]. - self assert: - (node - elementAt: qualifiedName - namespaceURI: 'absentNS' - ifAbsent: [#absent]) = #absent]]] -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testElementBefore [ - self newNodeWithElements allNodesDo: [:node | - node canHaveChildren - ifTrue: [| elementBefore | - elementBefore := nil. - node elements do: [:each | - self assert: (node elementBefore: each) = elementBefore. - elementBefore := each]]] -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testElementNames [ - | nodeWithElements | - - nodeWithElements := self newNodeWithElements. - self - assertList: nodeWithElements elementNames - collects: (nodeWithElements elements collect: [:each | each name]). - nodeWithElements allElementsDo: [:element | - self - assertList: element elementNames - collects: (element elements collect: [:each | each name])]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testElementRenamingToNext [ - self newNodeWithElements - usesNamespaces: false; - allElementsDo: [:each | | parent oldName oldLocalName nextElement | - ((parent := each parent) notNil - and: [(nextElement := each nextElement) notNil]) - ifTrue: [ - oldName := each name. - oldLocalName := each localName. - - each name: nextElement name. - each name = oldName - ifFalse: [ - self - deny: ((parent elementAt: oldName) = each); - deny: ((parent elementsAt: oldName) includes: each)]. - each localName = oldLocalName - ifFalse: [ - self - deny: ((parent elementAt: oldLocalName) = each); - deny: ((parent elementsAt: oldLocalName) includes: each)]. - self - assert: ((parent elementsAt: each name) after: each) = nextElement; - assert: ((parent elementsAt: each localName) after: each) = nextElement]]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testElementRenamingToPrevious [ - self newNodeWithElements - usesNamespaces: false; - allElementsDo: [:each | | parent oldName oldLocalName previousElement | - ((parent := each parent) notNil - and: [(previousElement := each previousElement) notNil]) - ifTrue: [ - oldName := each name. - oldLocalName := each localName. - - each name: previousElement name. - each name = oldName - ifFalse: [ - self - deny: ((parent elementAt: oldName) = each); - deny: ((parent elementsAt: oldName) includes: each)]. - each localName = oldLocalName - ifFalse: [ - self - deny: ((parent elementAt: oldLocalName) = each); - deny: ((parent elementsAt: oldLocalName) includes: each)]. - self - assert: ((parent elementsAt: each name) before: each) = previousElement; - assert: ((parent elementsAt: each localName) before: each) = previousElement]]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testElements [ - self newNodeWithElements allNodesDo: [:node | - node canHaveChildren - ifTrue: [ - self - assertList: node elements - selects: (node nodes select: [:each | each isElement])]] -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testElementsAddedInPlace [ - self newNodeWithElements allNodesDo: [:node | - node canHaveChildren - ifTrue: [ - (Array - with: node elements - with: node elements reversed) do: [:elements | - node addNodes: elements. - self - assertList: node elements - selects: elements]]] -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testElementsAt [ - self newNodeWithElements allNodesDo: [:node | - node canHaveChildren - ifTrue: [| elements localNames qualifiedNames | - elements := node elements. - localNames := (elements collect: [:each | each localName]) asSet. - qualifiedNames := - (elements - select: [:each | each hasPrefix] - thenCollect: [:each | each name]) asSet. - localNames do: [:localName | - self - assertList: (node elementsAt: localName) - selects: - (elements select: [:each | - each localName = localName]). - self - assertList: (node elementsAt: 'absent:', localName) - selects: elements copyEmpty]. - qualifiedNames do: [:qualifiedName | - self - assertList: (node elementsAt: qualifiedName) - selects: - (elements select: [:each | - each hasPrefix - and: [each name = qualifiedName]])]. - self - assertList: (node elementsAt: 'absent') - selects: elements copyEmpty]] -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testElementsAtAddedInPlace [ - self newNodeWithElements allNodesDo: [:node | - node canHaveChildren - ifTrue: [ - (Array - with: node elements - with: node elements reversed) do: [:elements | | localNames qualifiedNames | - localNames := (elements collect: [:each | each localName]) asSet. - qualifiedNames := - (elements - select: [:each | each hasPrefix] - thenCollect: [:each | each name]) asSet. - node addNodes: elements. - localNames do: [:localName | - self - assertList: (node elementsAt: localName) - selects: - (elements select: [:each | - each localName = localName])]. - qualifiedNames do: [:qualifiedName | - self - assertList: (node elementsAt: qualifiedName) - selects: - (elements select: [:each | - each hasPrefix - and: [each name = qualifiedName]])]]]] -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testElementsAtDo [ - self newNodeWithElements allNodesDo: [:node | - node canHaveChildren - ifTrue: [| elements localNames qualifiedNames | - elements := node elements. - localNames := (elements collect: [:each | each localName]) asSet. - qualifiedNames := - (elements - select: [:each | each hasPrefix] - thenCollect: [:each | each name]) asSet. - localNames do: [:localName | - self - xmlShould: [:block | node elementsAt: localName do: block] - enumerate: - (elements select: [:each | - each localName = localName]). - self - xmlShould: [:block | node elementsAt: 'absent:', localName do: block] - enumerate: #()]. - qualifiedNames do: [:qualifiedName | - self - xmlShould: [:block | node elementsAt: qualifiedName do: block] - enumerate: - (elements select: [:each | - each hasPrefix - and: [each name = qualifiedName]])]. - self - xmlShould: [:block | node elementsAt: 'absent' do: block] - enumerate: #()]] -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testElementsAtNamespaceURI [ - self newNodeWithElements allNodesDo: [:node | - node canHaveChildren - ifTrue: [| elements localNames qualifiedNames namespaceURIs | - elements := node elements. - localNames := (elements collect: [:each | each localName]) asSet. - qualifiedNames := - (elements - select: [:each | each hasPrefix] - thenCollect: [:each | each name]) asSet. - namespaceURIs := (elements collect: [:each | each namespaceURI]) asSet. - localNames do: [:localName | - namespaceURIs do: [:uri | - self - assertList: - (node - elementsAt: localName - namespaceURI: uri) - selects: - (elements select: [:each | - each localName = localName - and: [each namespaceURI = uri]])]. - self - assertList: - (node - elementsAt: localName - namespaceURI: 'absentNS') - selects: elements copyEmpty]. - qualifiedNames do: [:qualifiedName | - namespaceURIs do: [:uri | - self - assertList: - (node - elementsAt: qualifiedName - namespaceURI: uri) - selects: - (elements select: [:each | - each hasPrefix - and: [each name = qualifiedName - and: [each namespaceURI = uri]]])]. - self - assertList: - (node - elementsAt: qualifiedName - namespaceURI: 'absentNS') - selects: elements copyEmpty]]] -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testElementsCollect [ - | nodeWithElements | - - nodeWithElements := self newNodeWithElements. - self - assertList: (nodeWithElements elementsCollect: [:each | each name]) - collects: (nodeWithElements elements collect: [:each | each name]). - nodeWithElements allElementsDo: [:element | - self - assertList: (element elementsCollect: [:each | each name]) - collects: (element elements collect: [:each | each name])]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testElementsDetect [ - | root element | - - root := self newNodeWithElements firstElement. - element := - root elementsDetect: [:each | - (each isNamed: 'four') - and: [each namespaceURI = 'testNS']]. - self deny: element isNil. - self assert: - element = - (root elements detect: [:each | - (each isNamed: 'four') - and: [each namespaceURI = 'testNS']]). - self assert: - (root elementsDetect: [:each | - (each isNamed: 'four') - and: [each namespaceURI = 'absentNS']]) isNil. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testElementsDetectIfNone [ - | root | - - root := self newNodeWithElements firstElement. - self assert: - (root - elementsDetect: [:each | - (each isNamed: 'four') - and: [each namespaceURI = 'testNS']] - ifNone: [self fail]) = - (root elements - detect: [:each | - (each isNamed: 'four') - and: [each namespaceURI = 'testNS']]). - self assert: - (root - elementsDetect: [:each | - (each isNamed: 'four') - and: [each namespaceURI = 'absentNS']] - ifNone: [#absent]) = #absent. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testElementsDo [ - | nodeWithElements | - - nodeWithElements := self newNodeWithElements. - self - xmlShould: [:block | nodeWithElements elementsDo: block] - enumerate: nodeWithElements elements. - nodeWithElements allElementsDo: [:each | - self - xmlShould: [:block | each elementsDo: block] - enumerate: each elements]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testElementsSelect [ - | nodeWithElements | - - nodeWithElements := self newNodeWithElements. - self - assertList: (nodeWithElements elementsSelect: [:each | each hasChildren]) - selects: (nodeWithElements elements select: [:each | each hasChildren]). - nodeWithElements allElementsDo: [:element | - self - assertList: (element elementsSelect: [:each | each hasChildren]) - selects: (element elements select: [:each | each hasChildren])]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testFindElementNamed [ - | nodeWithElements allElements foundElement | - - nodeWithElements := self newNodeWithElements. - allElements := nodeWithElements allElements. - foundElement := nodeWithElements findElementNamed: 'four'. - self - assert: foundElement notNil; - assert: (foundElement isNamed: 'four'); - assert: foundElement == (allElements detect: [:each | each isNamed: 'four']); - assert: (foundElement findElementNamed: 'four') == foundElement; - assert: (nodeWithElements findElementNamed: 'absent') isNil. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testFindElementNamedNamespaceURI [ - | nodeWithElements allElements foundElement | - - nodeWithElements := self newNodeWithElements. - allElements := nodeWithElements allElements. - foundElement := nodeWithElements findElementNamed: 'four' namespaceURI: 'testNS'. - self - assert: foundElement notNil; - assert: (foundElement isNamed: 'four'). - self assert: - foundElement == - (allElements detect: [:each | - (each isNamed: 'four') and: [each namespaceURI = 'testNS']]). - self - assert: (foundElement findElementNamed: 'four' namespaceURI: 'testNS') == foundElement; - assert: (nodeWithElements findElementNamed: 'four' namespaceURI: 'absentNS') isNil. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testFindElementNamedNamespaceURIWith [ - | nodeWithElements allElements foundElement | - - nodeWithElements := self newNodeWithElements. - allElements := nodeWithElements allElements. - foundElement := - nodeWithElements - findElementNamed: 'four' - namespaceURI: 'testNS' - with: [:each | each hasChildren]. - self - assert: foundElement notNil; - assert: (foundElement isNamed: 'prefix:four'). - self assert: - foundElement == - (allElements detect: [:each | - (each isNamed: 'four') - and: [(each namespaceURI = 'testNS') - and: [each hasChildren]]]). - self assert: - (foundElement - findElementNamed: 'four' - namespaceURI: 'testNS' - with: [:each | each hasChildren]) == foundElement. - self assert: - (nodeWithElements - findElementNamed: 'four' - namespaceURI: 'testNS' - with: [:each | false]) isNil. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testFindElementNamedWith [ - | nodeWithElements allElements foundElement | - - nodeWithElements := self newNodeWithElements. - allElements := nodeWithElements allElements. - foundElement := nodeWithElements findElementNamed: 'four' with: [:each | each hasChildren]. - self - assert: foundElement notNil; - assert: (foundElement isNamed: 'four'). - self assert: - foundElement == - (allElements detect: [:each | (each isNamed: 'four') and: [each hasChildren]]). - self - assert: (foundElement findElementNamed: 'four' with: [:each | each hasChildren]) == foundElement; - assert: (nodeWithElements findElementNamed: 'four' with: [:each | false]) isNil. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testFindElementWithID [ - | dtd content contentWithUndeclaredAttribute document idElement xmlIDElement | - - dtd := ' - - - - - - - - - ]>'. - content := ' - - - - - - '. - contentWithUndeclaredAttribute := ' - - - - - - '. - - #(true false) do: [:isValidating | - document := - XMLDOMParser - parse: - dtd, - (isValidating - ifTrue: [content] - ifFalse: [contentWithUndeclaredAttribute]) - usingNamespaces: true - validation: isValidating. - idElement := document findElementNamed: 'c'. - xmlIDElement := document findElementNamed: 'd'. - self - assert: (document findElementWithID: 'one') = idElement; - assert: (idElement findElementWithID: 'one') = idElement; - assert: (idElement nextElement findElementWithID: 'one') isNil; - assert: (document findElementWithID: 'two') = xmlIDElement; - assert: (xmlIDElement findElementWithID: 'two') = xmlIDElement; - assert: (xmlIDElement nextElement findElementWithID: 'two') isNil; - assert: (document findElementWithID: 'three') isNil. - - "remove them so they can't access the DTD anymore" - document root - removeNode: idElement; - removeNode: xmlIDElement. - self - assert: (document findElementWithID: 'one') isNil; - assert: (idElement findElementWithID: 'one') isNil; - assert: (document findElementWithID: 'two') isNil; - "xml:id is always an ID attribute, even without a DTD declaring it" - assert: (xmlIDElement findElementWithID: 'two') = xmlIDElement]. - - #(true false) do: [:isValidating | - document := - XMLDOMParser - parse: contentWithUndeclaredAttribute - usingNamespaces: true - validation: isValidating. - xmlIDElement := document findElementNamed: 'd'. - self - assert: (document findElementWithID: 'one') isNil; - "xml:id is always an ID attribute, even without a DTD declaring it" - assert: (document findElementWithID: 'two') = xmlIDElement; - assert: (xmlIDElement findElementWithID: 'two') = xmlIDElement]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testFirstElement [ - | root | - - root := self newNodeWithElements nodeAt: 2. - root elements copy do: [:each | - self assert: root firstElement = each. - root removeNode: each]. - self assert: root firstElement isNil. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testHasContentNodes [ - | nodeWithElements | - - nodeWithElements := self newNodeWithElements. - self assert: nodeWithElements hasContentNodes. - nodeWithElements allElementsDo: [:element | - self assert: element hasContentNodes = element contentNodes notEmpty]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testHasElements [ - self - deny: self newNode hasElements; - assert: self newNodeWithElements hasElements; - deny: self newNodeWithElements removeNodes hasElements -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testHasStringNodes [ - | nodeWithElements | - - nodeWithElements := self newNodeWithElements. - self deny: nodeWithElements hasStringNodes. - nodeWithElements allElementsDo: [:element | - self assert: element hasStringNodes = element stringNodes notEmpty]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testIncludesElement [ - | root | - - root := self newNodeWithElements firstElement. - self deny: (root includesElement: 'absent'). - root elements copy do: [:each | - self assert: (root includesElement: each name). - root removeNode: each. - self deny: (root includesElement: each name)]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testInnerXML [ - | node element | - - node := self newNode. - element := - node addNode: - (self elementClass - name: 'test' - namespaces: (Array with: 'prefix'-> 'ns')). - element innerXML: ''. - element firstNode innerXML: 'test'. - self - assert: element nodes size = 1; - assert: (element firstNode isNamed: 'prefix:inner'); - assert: (element firstNode contentString = 'test'); - assert: - node innerXML = - 'test'; - assert: - element innerXML = - 'test'; - assert: element firstNode innerXML = 'test'. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testInnerXMLIsInContent [ - | node parser | - - node := self newNodeWithElements. - parser := XMLDOMParser on: ''. - self deny: parser isInContent. - - node innerXMLParsedWith: parser. - self - assert: node nodes size = 1; - assert: (node firstNode isElementNamed: 'content'); - deny: node firstNode hasChildren; - assert: parser isInContent. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testInnerXMLPrettyPrinted [ - | nodeWithElements printString prettyPrintString prettyNodeWithElements | - - nodeWithElements := self newNodeWithElements. - "remove any whitespace formatting around elements - (avoid descendantNodesDo: because we're removing)" - nodeWithElements descendantNodes do: [:each | - (each isStringNode - and: [each isWhitespace]) - ifTrue: [each parent removeNode: each]]. - - printString := nodeWithElements innerXML. - prettyPrintString := nodeWithElements innerXMLPrettyPrinted. - self deny: printString = prettyPrintString. - - prettyNodeWithElements := - (XMLDOMParser on: prettyPrintString) - preservesCommentNodes: true; - parseDocument. - self - assertElements: prettyNodeWithElements descendantElements - werePrettyPrintFormattedFrom: nodeWithElements descendantElements -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testInnerXMLResetting [ - | nodeWithElements | - - nodeWithElements := self newNodeWithElements. - self - should: [nodeWithElements firstElement innerXML: ''] - raise: XMLWellFormednessException. - self assert: nodeWithElements printString = self newNodeWithNodes printString. - - self - should: [nodeWithElements firstElement innerXML: '&invalid;'] - raise: XMLWellFormednessException. - self assert: nodeWithElements printString = self newNodeWithNodes printString. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testIsContentNode [ - self assert: self newNode isContentNode -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testLastElement [ - | root | - - root := self newNodeWithElements nodeAt: 2. - root elements reversed do: [:each | - self assert: root lastElement = each. - root removeNode: each]. - self assert: root lastElement isNil. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testNewCData [ - | nodeWithElements cdata | - - super testNewCData. - - (nodeWithElements := self newNode) - nodeFactory: - (XMLPluggableNodeFactory new - cdataClass: XMLFCData). - cdata := nodeWithElements newCData: 'test'. - self - assert: cdata class == XMLFCData; - assert: cdata string = 'test'. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testNewComment [ - | nodeWithElements comment | - - super testNewComment. - - (nodeWithElements := self newNode) - nodeFactory: - (XMLPluggableNodeFactory new - commentClass: XMLFComment). - comment := nodeWithElements newComment: 'test'. - self - assert: comment class == XMLFComment; - assert: comment string = 'test'. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testNewDocument [ - | nodeWithElements document | - - super testNewDocument. - - (nodeWithElements := self newNode) - nodeFactory: - (XMLPluggableNodeFactory new - documentClass: XMLFDocument). - document := nodeWithElements newDocument. - self - assert: document class == XMLFDocument; - assert: document configuration == nodeWithElements configuration; - assert: document nodeFactory == nodeWithElements nodeFactory. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testNewElement [ - | nodeWithElements element | - - super testNewElement. - - (nodeWithElements := self newNode) - nodeFactory: - (XMLPluggableNodeFactory new - elementClass: self otherElementClass). - element := nodeWithElements newElement. - self - assert: element class == self otherElementClass; - assert: element configuration == nodeWithElements configuration; - assert: element nodeFactory == nodeWithElements nodeFactory. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testNewElementNamed [ - | nodeWithElements element | - - super testNewElementNamed. - - (nodeWithElements := self newNode) - nodeFactory: - (XMLPluggableElementFactory new - handleElement: 'test' withClass: self otherElementClass). - element := nodeWithElements newElementNamed: 'test'. - self - assert: element class == self otherElementClass; - assert: element name = 'test'; - assert: element configuration == nodeWithElements configuration; - assert: element nodeFactory == nodeWithElements nodeFactory. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testNewElementNamedAttributes [ - | nodeWithElements element | - - super testNewElementNamedAttributes. - - (nodeWithElements := self newNode) - nodeFactory: - (XMLPluggableElementFactory new - handleElement: 'test' - attributes: self unprefixedAttributeAssociations - withClass: self otherElementClass; - attributeListClass: self otherAttributeListClass). - element := - nodeWithElements - newElementNamed: 'test' - attributes: self unprefixedAttributeAssociations. - self - assert: element class == self otherElementClass; - assert: element name = 'test'; - assert: element attributeNodes class == self otherAttributeListClass; - assertElement: element hasAttributes: self unprefixedAttributes; - assert: element configuration == nodeWithElements configuration; - assert: element nodeFactory == nodeWithElements nodeFactory. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testNewElementNamedNamespaceURI [ - | nodeWithElements element | - - super testNewElementNamedNamespaceURI. - - (nodeWithElements := self newNode) - nodeFactory: - (XMLPluggableElementFactory new - handleElement: 'prefix:test' - namespaceURI: 'prefixNS' - withClass: self otherElementClass). - element := - nodeWithElements - newElementNamed: 'prefix:test' - namespaceURI: 'prefixNS'. - self - assert: element class == self otherElementClass; - assert: element name = 'prefix:test'; - assert: element namespaceURI = 'prefixNS'; - assert: element configuration == nodeWithElements configuration; - assert: element nodeFactory == nodeWithElements nodeFactory. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testNewElementNamedNamespaceURIAttributes [ - | nodeWithElements element | - - super testNewElementNamedNamespaceURIAttributes. - - (nodeWithElements := self newNode) - nodeFactory: - (XMLPluggableElementFactory new - handleElement: 'prefix:test' - namespaceURI: 'prefixNS' - attributes: self attributeAssociations - withClass: self otherElementClass; - attributeListClass: self otherAttributeListClass). - element := - nodeWithElements - newElementNamed: 'prefix:test' - namespaceURI: 'prefixNS' - attributes: self attributeAssociations. - self - assert: element class == self otherElementClass; - assert: element name = 'prefix:test'; - assert: element namespaceURI = 'prefixNS'; - assert: element attributeNodes class == self otherAttributeListClass; - assertElement: element hasAttributes: self attributes; - assert: element configuration == nodeWithElements configuration; - assert: element nodeFactory == nodeWithElements nodeFactory. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testNewPI [ - | nodeWithElements | - - super testNewPI. - - (nodeWithElements := self newNode) - nodeFactory: - (XMLPluggableNodeFactory new - piClass: XMLFPI). - self assert: nodeWithElements newPI class == XMLFPI. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testNewPITargetData [ - | nodeWithElements pi | - - super testNewPITargetData. - - (nodeWithElements := self newNode) - nodeFactory: - (XMLPluggableNodeFactory new - piClass: XMLFPI). - pi := - nodeWithElements - newPITarget: 'target' - data: 'data'. - self - assert: pi class == XMLFPI; - assert: pi target = 'target'; - assert: pi data = 'data'. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testNewStringNode [ - | nodeWithElements stringNode | - - super testNewStringNode. - - (nodeWithElements := self newNode) - nodeFactory: - (XMLPluggableNodeFactory new - stringNodeClass: XMLFString). - stringNode := nodeWithElements newStringNode: 'test'. - self - assert: stringNode class == XMLFString; - assert: stringNode string = 'test'. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testNodeFactory [ - | nodeWithElements oldNodeFactory newNodeFactory | - - nodeWithElements := self newNodeWithElements. - oldNodeFactory := nodeWithElements nodeFactory. - self assert: oldNodeFactory class == self nodeFactoryClass. - - newNodeFactory := self nodeFactoryClass new. - self - assert: (nodeWithElements nodeFactory: newNodeFactory) == nodeWithElements; - assert: nodeWithElements nodeFactory == newNodeFactory. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testOuterXMLForNode [ - | nodeWithElements root nodes | - - nodeWithElements := self newNodeWithElements. - root := nodeWithElements firstElement. - nodes := root nodes copy. - nodes copy withIndexDo: [:each :i | | innerXML newNode | - innerXML := 'test'. - root outerXML: innerXML forNode: each. - newNode := root nodeAt: i. - self - assert: newNode printString = innerXML; - deny: root nodes = nodes. - nodes at: i put: newNode. - self assert: root nodes = nodes]. - - nodes copy do: [:each | - root outerXML: '' forNode: each. - self deny: root nodes = nodes. - nodes remove: each. - self assert: root nodes = nodes]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testOuterXMLForNodeResetting [ - | nodeWithElements root | - - nodeWithElements := self newNodeWithElements. - root := nodeWithElements firstElement. - self - should: [ - root - outerXML: '' - forNode: root firstNode] - raise: XMLWellFormednessException. - self assert: nodeWithElements printString = self newNodeWithNodes printString. - - self - should: [ - root - outerXML: '&invalid;' - forNode: root firstNode] - raise: XMLWellFormednessException. - self assert: nodeWithElements printString = self newNodeWithNodes printString. - - self - should: [ - root - outerXML: '' - forNode: self nodeClass new] - raise: XMLDOMException. - self assert: nodeWithElements printString = self newNodeWithNodes printString. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testPrettyPrinted [ - | nodeWithElements printString prettyPrintString prettyNodeWithElements | - - nodeWithElements := self newNodeWithElements. - "remove any whitespace formatting around elements - (avoid #allNodesDo: because we're removing)" - nodeWithElements allNodes do: [:each | - (each isStringNode - and: [each isWhitespace]) - ifTrue: [each parent removeNode: each]]. - - printString := nodeWithElements printString. - prettyPrintString := nodeWithElements prettyPrinted. - self deny: printString = prettyPrintString. - - prettyNodeWithElements := - (XMLDOMParser on: prettyPrintString) - preservesCommentNodes: true; - parseDocument. - self - assertElements: prettyNodeWithElements allElements - werePrettyPrintFormattedFrom: nodeWithElements allElements. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testPrintedWithoutSelfClosingTags [ - | nodeWithElements printString printStringWithoutSelfClosingTags | - - nodeWithElements := self newNodeWithElements. - printString := nodeWithElements printString. - printStringWithoutSelfClosingTags := nodeWithElements printedWithoutSelfClosingTags. - self deny: printString = printStringWithoutSelfClosingTags. - - nodeWithElements allElementsDo: [:each | - each hasChildren - ifFalse: [ - printString := - printString - copyReplaceAll: '<', each name, '/>' - with: '<', each name, '>']]. - self assert: printString = printStringWithoutSelfClosingTags. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testRawContentString [ - self assert: self newNodeWithElements rawContentString = 'testing onetesting twotesting three' -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testRawContentStringAt [ - | root | - - root := self newNodeWithElements firstElement. - root elementsDo: [:each | - self assert: (root rawContentStringAt: each name) = each rawContentString]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testRemoveAllFormattingNodes [ - | nodeWithElements nonFormattingStringNodes | - - nodeWithElements := self newNode. - nodeWithElements innerXML: - ' - - - - - - - one - - one - - - two three - - four - - '. - nonFormattingStringNodes := - nodeWithElements allNodesSelect: [:node | - node isStringNode - and: [ - node ancestorElements anySatisfy: [:each | - each isNamed: 'non-formatting']]]. - - self - assert: nodeWithElements removeAllFormattingNodes == nodeWithElements; - assert: - (nodeWithElements allNodesSelect: [ :each | each isStringNode]) = - nonFormattingStringNodes. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testStringNodes [ - | nodeWithElements | - - nodeWithElements := self newNodeWithElements. - self - assertList: nodeWithElements stringNodes - selects: (nodeWithElements nodes select: [:each | each isStringNode]). - nodeWithElements allElementsDo: [:element | - self - assertList: element stringNodes - selects: (element nodes select: [:each | each isStringNode])]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testStringNodesDo [ - | nodeWithElements | - - nodeWithElements := self newNodeWithElements. - self - xmlShould: [:block | nodeWithElements stringNodesDo: block] - enumerate: nodeWithElements stringNodes. - nodeWithElements allElementsDo: [:each | - self - xmlShould: [:block | each stringNodesDo: block] - enumerate: each stringNodes]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testStrings [ - | nodeWithElements | - - nodeWithElements := self newNodeWithElements. - self - assertList: nodeWithElements strings - collects: (nodeWithElements stringNodes collect: [:each | each string]). - nodeWithElements allElementsDo: [:element | - self - assertList: element strings - collects: (element stringNodes collect: [:each | each string]).]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testStringsDo [ - | nodeWithElements | - - nodeWithElements := self newNodeWithElements. - self - xmlShould: [:block | nodeWithElements stringsDo: block] - enumerate: nodeWithElements strings. - nodeWithElements allElementsDo: [:each | - self - xmlShould: [:block | each stringsDo: block] - enumerate: each strings]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testUsesNamespaces [ - | nodeWithElements | - - nodeWithElements := self newNodeWithElements. - self assert: nodeWithElements usesNamespaces. - nodeWithElements allElementsDo: [:each | - self assert: each usesNamespaces]. - - self - assert: (nodeWithElements usesNamespaces: false) == nodeWithElements; - deny: nodeWithElements usesNamespaces. - nodeWithElements allElementsDo: [:each | - self deny: each usesNamespaces. - self - shouldnt: [each prefix: 'undeclared'] - raise: XMLNamespaceException]. - - self - assert: (nodeWithElements usesNamespaces: true) == nodeWithElements; - assert: nodeWithElements usesNamespaces. - nodeWithElements allElementsDo: [:each | - self assert: each usesNamespaces. - self - should: [each prefix: 'undeclaredTwo'] - raise: XMLNamespaceException]. -] - -{ #category : #tests } -XMLNodeWithElementsTest >> testValidate [ - super testValidate. - self - shouldnt: [self newNodeWithNodes validate] - raise: XMLValidationException. -] diff --git a/src/XML-Tests-Parser/XMLNotationDeclarationTest.class.st b/src/XML-Tests-Parser/XMLNotationDeclarationTest.class.st deleted file mode 100644 index 4564d30cc..000000000 --- a/src/XML-Tests-Parser/XMLNotationDeclarationTest.class.st +++ /dev/null @@ -1,77 +0,0 @@ -Class { - #name : #XMLNotationDeclarationTest, - #superclass : #XMLDeclarationNodeTest, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #testing } -XMLNotationDeclarationTest class >> isAbstract [ - ^ false -] - -{ #category : #accessing } -XMLNotationDeclarationTest >> nodeClass [ - ^ XMLNotationDeclaration -] - -{ #category : #tests } -XMLNotationDeclarationTest >> testName [ - | declaration | - - declaration := self newNode. - self - assert: declaration name = ''; - assert: (declaration name: 'test') == declaration; - assert: declaration name = 'test'. -] - -{ #category : #tests } -XMLNotationDeclarationTest >> testNamePublicIDSystemID [ - | declaration | - - declaration := - self nodeClass - name: 'one' - publicID: 'two' - systemID: 'three'. - self - assert: declaration class == self nodeClass; - assert: declaration name = 'one'; - assert: declaration publicID = 'two'; - assert: declaration systemID = 'three'. -] - -{ #category : #tests } -XMLNotationDeclarationTest >> testPublicID [ - | declaration | - - declaration := self newNode. - self - assert: declaration publicID = ''; - assert: (declaration publicID: 'test') == declaration; - assert: declaration publicID = 'test'. -] - -{ #category : #tests } -XMLNotationDeclarationTest >> testSystemID [ - | declaration | - - declaration := self newNode. - self - assert: declaration systemID = ''; - assert: (declaration systemID: 'test') == declaration; - assert: declaration systemID = 'test'. -] - -{ #category : #tests } -XMLNotationDeclarationTest >> testWriteXMLOn [ - self assert: - (self nodeClass name: 'one' publicID: 'two' systemID: 'three') printString = - ''. - self assert: - (self nodeClass name: 'one' publicID: '' systemID: 'two') printString = - ''. - self assert: - (self nodeClass name: 'one' publicID: 'two' systemID: '') printString = - ''. -] diff --git a/src/XML-Tests-Parser/XMLNullReadStreamTest.class.st b/src/XML-Tests-Parser/XMLNullReadStreamTest.class.st deleted file mode 100644 index 4f30fc572..000000000 --- a/src/XML-Tests-Parser/XMLNullReadStreamTest.class.st +++ /dev/null @@ -1,25 +0,0 @@ -Class { - #name : #XMLNullReadStreamTest, - #superclass : #XMLAbstractReadStreamTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLNullReadStreamTest class >> isAbstract [ - ^ false -] - -{ #category : #accessing } -XMLNullReadStreamTest >> inputCollection [ - ^ '' -] - -{ #category : #accessing } -XMLNullReadStreamTest >> streamClass [ - ^ XMLNullReadStream -] - -{ #category : #tests } -XMLNullReadStreamTest >> testNew [ - self assert: self streamClass new class == self streamClass -] diff --git a/src/XML-Tests-Parser/XMLNullStreamConverterTest.class.st b/src/XML-Tests-Parser/XMLNullStreamConverterTest.class.st deleted file mode 100644 index f8d810175..000000000 --- a/src/XML-Tests-Parser/XMLNullStreamConverterTest.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #XMLNullStreamConverterTest, - #superclass : #XMLStreamConverterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLNullStreamConverterTest class >> isAbstract [ - ^ false -] - -{ #category : #accessing } -XMLNullStreamConverterTest >> streamConverterClass [ - ^ XMLNullStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLObservableListTest.class.st b/src/XML-Tests-Parser/XMLObservableListTest.class.st deleted file mode 100644 index b8e06aa8c..000000000 --- a/src/XML-Tests-Parser/XMLObservableListTest.class.st +++ /dev/null @@ -1,533 +0,0 @@ -Class { - #name : #XMLObservableListTest, - #superclass : #XMLOrderedListTest, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #testing } -XMLObservableListTest class >> shouldInheritSelectors [ - ^ true -] - -{ #category : #accessing } -XMLObservableListTest >> afterAddingToNotifications [ - ^ #(added:to:) -] - -{ #category : #accessing } -XMLObservableListTest >> afterRemovingFromNotifications [ - ^ #(removed:from:) -] - -{ #category : #assertions } -XMLObservableListTest >> assertList: aFirstList copiedFrom: aSecondList equals: aThirdList [ - super - assertList: aFirstList - copiedFrom: aSecondList - equals: aThirdList. - self - denyList: aFirstList - sharesObserverWith: aSecondList. -] - -{ #category : #assertions } -XMLObservableListTest >> assertList: aFirstList isCopyOf: aSecondList [ - super - assertList: aFirstList - isCopyOf: aSecondList. - self - denyList: aFirstList - sharesObserverWith: aSecondList. -] - -{ #category : #assertions } -XMLObservableListTest >> assertList: aList receivedNotificationOfAdding: anObject [ - self - assertList: aList - receivedNotificationOfAfterAdding: anObject -] - -{ #category : #assertions } -XMLObservableListTest >> assertList: aList receivedNotificationOfAfterAdding: anObject [ - self - assertNotification: aList observer nextNotification - for: anObject - withList: aList - hasType: self afterAddingToNotifications -] - -{ #category : #assertions } -XMLObservableListTest >> assertList: aList receivedNotificationOfRemoving: anObject [ - self - assertNotification: aList observer nextNotification - for: anObject - withList: aList - hasType: self afterRemovingFromNotifications -] - -{ #category : #assertions } -XMLObservableListTest >> assertList: aList receivedNotificationOfReplacing: anOldObject with: aNewObject [ - self - assertList: aList - receivedNotificationOfRemoving: anOldObject. - self - assertList: aList - receivedNotificationOfAfterAdding: aNewObject. -] - -{ #category : #assertions } -XMLObservableListTest >> assertNotification: aNotification for: anObject withList: aList hasType: aSelectorCollection [ - self - assert: aNotification notNil; - assert: (aSelectorCollection includes: aNotification selector). - self assert: - aNotification arguments = - ((Array with: anObject with: aList) - copyFrom: 1 - to: (aNotification selector asString occurrencesOf: $:)). -] - -{ #category : #assertions } -XMLObservableListTest >> denyList: aFirstList sharesObserverWith: aSecondList [ - self deny: - (aFirstList observer notNil - and: [aFirstList observer == aSecondList observer]) -] - -{ #category : #accessing } -XMLObservableListTest >> emptyList [ - | list | - - list := super emptyList. - self observerOnList: list. - ^ list. -] - -{ #category : #accessing } -XMLObservableListTest >> listClass [ - ^ XMLObservableList -] - -{ #category : #accessing } -XMLObservableListTest >> listWithItems [ - | list | - - list := super listWithItems. - self observerOnList: list. - ^ list. -] - -{ #category : #accessing } -XMLObservableListTest >> listWithSingleItem [ - | list | - - list := super listWithSingleItem. - self observerOnList: list. - ^ list. -] - -{ #category : #accessing } -XMLObservableListTest >> observerClass [ - ^ XMLRecordingListObserver -] - -{ #category : #accessing } -XMLObservableListTest >> observerOnList: aList [ - | observer | - - observer := self observerClass new. - aList observer: observer. - ^ observer. -] - -{ #category : #assertions } -XMLObservableListTest >> should: aBlock add: anObject toAndNotify: aList [ - self - should: aBlock - addAll: (Array with: anObject) - toAndNotify: aList -] - -{ #category : #assertions } -XMLObservableListTest >> should: aBlock addAll: aCollection toAndNotify: aList [ - aList observer clearNotifications. - aBlock value. - aCollection do: [:each | - self assert: (aList includes: each). - self - assertList: aList - receivedNotificationOfAdding: each]. -] - -{ #category : #assertions } -XMLObservableListTest >> should: aBlock remove: anObject fromAndNotify: aList [ - self - should: aBlock - removeAll: (Array with: anObject) - fromAndNotify: aList -] - -{ #category : #assertions } -XMLObservableListTest >> should: aBlock removeAll: aCollection fromAndNotify: aList [ - aList observer clearNotifications. - aBlock value. - aCollection do: [:each | - self deny: (aList includes: each). - self - assertList: aList - receivedNotificationOfRemoving: each]. -] - -{ #category : #tests } -XMLObservableListTest >> testAdd [ - | list | - - super testAdd. - - list := self emptyList. - self listItems do: [:each | - self - should: [list add: each] - add: each - toAndNotify: list]. -] - -{ #category : #tests } -XMLObservableListTest >> testAddAfter [ - | list | - - super testAddAfter. - - list := self listWithSingleItem. - self listItems allButFirst reverseDo: [:each | - self - should: [list add: each after: self singleListItem] - add: each - toAndNotify: list]. -] - -{ #category : #tests } -XMLObservableListTest >> testAddAfterIndex [ - | list | - - super testAddAfterIndex. - - list := self listWithSingleItem. - self listItems allButFirst reverseDo: [:each | - self - should: [list add: each afterIndex: 1] - add: each - toAndNotify: list]. -] - -{ #category : #tests } -XMLObservableListTest >> testAddAll [ - | list | - - super testAddAll. - - list := self emptyList. - self - should: [list addAll: self listItems] - addAll: self listItems - toAndNotify: list. - self - should: [list addAll: self changedListItems] - addAll: self changedListItems - toAndNotify: list. -] - -{ #category : #tests } -XMLObservableListTest >> testAddAllFirst [ - | list | - - super testAddAllFirst. - - list := self emptyList. - self - should: [list addAllFirst: self listItems] - addAll: self listItems reversed - toAndNotify: list. - self - should: [list addAllFirst: self changedListItems] - addAll: self changedListItems reversed - toAndNotify: list. -] - -{ #category : #tests } -XMLObservableListTest >> testAddAllLast [ - | list | - - super testAddAllLast. - - list := self emptyList. - self - should: [list addAllLast: self listItems] - addAll: self listItems - toAndNotify: list. - self - should: [list addAllLast: self changedListItems] - addAll: self changedListItems - toAndNotify: list. -] - -{ #category : #tests } -XMLObservableListTest >> testAddBefore [ - | list last | - - super testAddBefore. - - last := self listItems last. - (list := self emptyList) add: last. - "allButLastDo: is not portable" - self listItems allButLast do: [:each | - self - should: [list add: each before: last] - add: each - toAndNotify: list]. -] - -{ #category : #tests } -XMLObservableListTest >> testAddBeforeIndex [ - | list | - - super testAddBeforeIndex. - - (list := self emptyList) add: self listItems last. - self listItems allButLast withIndexDo: [:each :i | - self - should: [list add: each beforeIndex: i] - add: each - toAndNotify: list]. -] - -{ #category : #tests } -XMLObservableListTest >> testAddFirst [ - | list | - - super testAddFirst. - - list := self emptyList. - self listItems reverseDo: [:each | - self - should: [list addFirst: each] - add: each - toAndNotify: list]. -] - -{ #category : #tests } -XMLObservableListTest >> testAddLast [ - | list | - - super testAddLast. - - list := self emptyList. - self listItems do: [:each | - self - should: [list addLast: each] - add: each - toAndNotify: list]. -] - -{ #category : #tests } -XMLObservableListTest >> testAtPut [ - | list | - - super testAtPut. - - list := self listWithItems. - 1 to: list size do: [:i | | old new | - old := list at: i. - new := self changedListItems at: i. - list at: i put: new. - self - assertList: list - receivedNotificationOfReplacing: old - with: new]. - self - should: [list at: list size + 2 put: self newListItem] - raise: Error. - self deny: list observer hasNotifications. -] - -{ #category : #tests } -XMLObservableListTest >> testOfSize [ - self - should: [self listClass ofSize: 10] - raise: Error -] - -{ #category : #tests } -XMLObservableListTest >> testRemoveAll [ - | list | - - super testRemoveAll. - - list := self listWithItems. - self - should: [list removeAll] - removeAll: self listItems reversed - fromAndNotify: list. -] - -{ #category : #tests } -XMLObservableListTest >> testRemoveAt [ - super testRemoveAt. - - self listItems withIndexDo: [:each :i | | list | - list := self listWithItems. - self - should: [list removeAt: i] - remove: each - fromAndNotify: list. - self - should: [list removeAt: 0] raise: Error; - should: [list removeAt: list size + 1] raise: Error; - deny: list observer hasNotifications]. -] - -{ #category : #tests } -XMLObservableListTest >> testRemoveFirst [ - | list | - - super testRemoveFirst. - - list := self listWithItems. - self listItems do: [:each | - self - should: [list removeFirst] - remove: each - fromAndNotify: list]. - self - should: [list removeFirst] raise: Error; - deny: list observer hasNotifications. -] - -{ #category : #tests } -XMLObservableListTest >> testRemoveFirstFew [ - | list | - - super testRemoveFirstFew. - - 1 to: self listItems size do: [:i | - list := self listWithItems. - self - should: [list removeFirst: i] - removeAll: (self listItemsFirst: i) - fromAndNotify: list]. - list := self emptyList. - self - should: [list removeFirst: list size + 1] raise: Error; - deny: list observer hasNotifications. -] - -{ #category : #tests } -XMLObservableListTest >> testRemoveIfAbsent [ - | list | - - super testRemoveIfAbsent. - - list := self listWithItems. - self - should: [ - list - remove: self singleListItem - ifAbsent: [self absentListItem]] - remove: self singleListItem - fromAndNotify: list. - self assert: - (list - remove: self singleListItem - ifAbsent: [self absentListItem]) = self absentListItem. - self deny: list observer hasNotifications. -] - -{ #category : #tests } -XMLObservableListTest >> testRemoveLast [ - | list | - - super testRemoveLast. - - list := self listWithItems. - self listItems reverseDo: [:each | - self - should: [list removeLast] - remove: each - fromAndNotify: list]. - self - should: [list removeFirst] raise: Error; - deny: list observer hasNotifications. -] - -{ #category : #tests } -XMLObservableListTest >> testRemoveLastFew [ - | list | - - super testRemoveLastFew. - - 1 to: self listItems size do: [:i | - list := self listWithItems. - self - should: [list removeLast: i] - removeAll: (self listItemsLast: i) reversed - fromAndNotify: list]. - list := self emptyList. - self - should: [list removeFirst: list size + 1] raise: Error; - deny: list observer hasNotifications. -] - -{ #category : #tests } -XMLObservableListTest >> testReplaceFromToWith [ - super testReplaceFromToWith. - - 1 to: self listItems size do: [:start | - start to: self listItems size do: [:stop | | list old new | - list := self listWithItems. - old := self listItems copyFrom: start to: stop. - new := self changedListItems copyFrom: 1 to: stop - start + 1. - list - replaceFrom: start - to: stop - with: self changedListItems. - old with: new do: [:oldElement :newElement | - self - assertList: list - receivedNotificationOfReplacing: oldElement - with: newElement]. - self deny: list observer hasNotifications]]. -] - -{ #category : #tests } -XMLObservableListTest >> testReplaceFromToWithStartingAt [ - super testReplaceFromToWithStartingAt. - - 1 to: self listItems size do: [:start | - start to: self listItems size do: [:stop | | list old new | - list := self listWithItems. - old := self listItems copyFrom: start to: stop. - new := self changedListItems copyFrom: start to: stop. - list - replaceFrom: start - to: stop - with: self changedListItems - startingAt: start. - old with: new do: [:oldElement :newElement | - self - assertList: list - receivedNotificationOfReplacing: oldElement - with: newElement]. - self deny: list observer hasNotifications]]. -] - -{ #category : #tests } -XMLObservableListTest >> testReset [ - | list | - - super testReset. - list := self listWithItems. - self - should: [list reset] - removeAll: self listItems reversed - fromAndNotify: list. -] diff --git a/src/XML-Tests-Parser/XMLOrderedListTest.class.st b/src/XML-Tests-Parser/XMLOrderedListTest.class.st deleted file mode 100644 index 64a13051e..000000000 --- a/src/XML-Tests-Parser/XMLOrderedListTest.class.st +++ /dev/null @@ -1,1864 +0,0 @@ -Class { - #name : #XMLOrderedListTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #accessing } -XMLOrderedListTest >> absentListItem [ - ^ 'absent' -] - -{ #category : #testing } -XMLOrderedListTest >> allowsDuplicates [ - ^ true -] - -{ #category : #assertions } -XMLOrderedListTest >> assertList: aList collectedFrom: aSecondList equals: aThirdList [ - self - assert: aList = aThirdList; - assert: aList class = aSecondList species; - deny: aList == aSecondList; - deny: aList collection == aSecondList collection -] - -{ #category : #assertions } -XMLOrderedListTest >> assertList: aList copiedFrom: aSecondList equals: aThirdList [ - self - assert: aList = aThirdList; - assert: aList class == self listCopyClass; - assert: aList collection class == aSecondList collection class; - deny: aList == aSecondList; - deny: aList collection == aSecondList collection -] - -{ #category : #assertions } -XMLOrderedListTest >> assertList: aFirstList equals: aSecondList [ - self - assert: aFirstList = aFirstList; - assert: aSecondList = aSecondList; - assert: aFirstList = aSecondList; - assert: aSecondList = aFirstList -] - -{ #category : #assertions } -XMLOrderedListTest >> assertList: aList isCopyOf: aSecondList [ - self - assert: aList = aSecondList; - assert: aList class == self listCopyClass; - assert: aList collection class == aSecondList collection class; - assert: aList collection = aSecondList collection; - deny: aList == aSecondList; - deny: aList collection == aSecondList collection -] - -{ #category : #assertions } -XMLOrderedListTest >> assertList: aList replacedItems: anOldItemCollection withItems: aNewItemCollection from: aStart to: aStop [ - "items before aStart should not have been replaced" - 1 to: aStart - 1 do: [:i | - self assert: (aList at: i) = (anOldItemCollection at: i)]. - - "items within the range should be replaced" - aStart to: aStop do: [:i | - self assert: (aList at: i) = (aNewItemCollection at: i)]. - - "items after aStop should not have been replaced" - aStop + 1 to: aList size do: [:i | - self assert: (aList at: i) = (anOldItemCollection at: i)]. -] - -{ #category : #accessing } -XMLOrderedListTest >> changedListItem: anObject [ - ^ anObject asUppercase -] - -{ #category : #accessing } -XMLOrderedListTest >> changedListItems [ - ^ self listItems collect: [:each | self changedListItem: each] -] - -{ #category : #accessing } -XMLOrderedListTest >> changedSingleListItem [ - ^ self changedListItem: self singleListItem -] - -{ #category : #accessing } -XMLOrderedListTest >> customCollection [ - ^ XMLStubOrderedListCustomCollection new -] - -{ #category : #accessing } -XMLOrderedListTest >> customCollectionEmptyList [ - ^ self listClass collection: self customCollection -] - -{ #category : #accessing } -XMLOrderedListTest >> customCollectionListWithItems [ - ^ (self listClass collection: self customCollection) - addAll: self listItems; - yourself -] - -{ #category : #accessing } -XMLOrderedListTest >> customCollectionListWithSingleItem [ - ^ (self listClass collection: self customCollection) - add: self singleListItem; - yourself -] - -{ #category : #accessing } -XMLOrderedListTest >> defaultValue [ - ^ nil -] - -{ #category : #assertions } -XMLOrderedListTest >> denyList: aFirstList equals: aSecondList [ - self - deny: aFirstList = aSecondList; - deny: aSecondList = aFirstList -] - -{ #category : #accessing } -XMLOrderedListTest >> emptyList [ - ^ self listClass new -] - -{ #category : #testing } -XMLOrderedListTest >> hasCapacity [ - "for portability" - ^ self listClass collectionClass includesSelector: #capacity -] - -{ #category : #accessing } -XMLOrderedListTest >> listClass [ - ^ XMLOrderedList -] - -{ #category : #accessing } -XMLOrderedListTest >> listCopyClass [ - ^ self listClass -] - -{ #category : #accessing } -XMLOrderedListTest >> listItems [ - ^ #('one' 'two' 'three' 'four' 'five' - 'six' 'seven' 'eight' 'nine' 'ten' - 'eleven') copy -] - -{ #category : #accessing } -XMLOrderedListTest >> listItemsFirst: anInteger [ - "first: is not portable to GS" - ^ self listItems - copyFrom: 1 - to: ((anInteger max: 0) min: self listItems size) -] - -{ #category : #accessing } -XMLOrderedListTest >> listItemsLast: anInteger [ - "last: is not portable to GS" - anInteger > 0 - ifFalse: [^ #()]. - ^ self listItems - copyFrom: ((self listItems size - anInteger + 1) max: 1) - to: self listItems size. -] - -{ #category : #accessing } -XMLOrderedListTest >> listSpecies [ - ^ XMLOrderedList -] - -{ #category : #accessing } -XMLOrderedListTest >> listWithItems [ - ^ self listClass new - addAll: self listItems; - yourself -] - -{ #category : #accessing } -XMLOrderedListTest >> listWithSingleItem [ - ^ self listClass new - add: self singleListItem; - yourself -] - -{ #category : #accessing } -XMLOrderedListTest >> newListItem [ - ^ 'new' -] - -{ #category : #accessing } -XMLOrderedListTest >> reverseSortBlock [ - ^ [:a :b | a > b] -] - -{ #category : #accessing } -XMLOrderedListTest >> singleListItem [ - ^ self listItems first -] - -{ #category : #accessing } -XMLOrderedListTest >> sortBlock [ - ^ [:a :b | a <= b] -] - -{ #category : #tests } -XMLOrderedListTest >> testAdd [ - | list | - - list := self emptyList. - self - deny: list = self listWithItems; - assert: (self listItems allSatisfy: [:each | (list add: each) == each]); - assert: (list = self listWithItems). -] - -{ #category : #tests } -XMLOrderedListTest >> testAddAfter [ - | list | - - list := self listWithSingleItem. - self - assert: - (self listItems allButFirst reversed - allSatisfy: [:each | (list add: each after: self singleListItem) = each]); - assert: list = self listWithItems; - should: [list add: self newListItem after: self absentListItem] raise: Error. -] - -{ #category : #tests } -XMLOrderedListTest >> testAddAfterIndex [ - | list | - - list := self listWithSingleItem. - self - assert: - (self listItems allButFirst reversed - allSatisfy: [:each | (list add: each afterIndex: 1) = each]); - assert: list = self listWithItems; - should: [list add: self newListItem afterIndex: self listItems size + 1] raise: Error; - should: [list add: self newListItem afterIndex: -1] raise: Error. -] - -{ #category : #tests } -XMLOrderedListTest >> testAddAll [ - | list | - - list := self emptyList. - self - deny: list = self listWithItems; - assert: (list addAll: self listItems) = self listItems; - assert: list = self listWithItems; - assert: (list addAll: self changedListItems) = self changedListItems; - assert: list = (self listClass newFrom: (self listItems, self changedListItems)). -] - -{ #category : #tests } -XMLOrderedListTest >> testAddAllFirst [ - | list | - - list := self emptyList. - self - assert: (list addAllFirst: self listItems) = self listItems; - assert: list = self listWithItems; - assert: (list addAllFirst: self changedListItems) = self changedListItems; - assert: list = (self listClass newFrom: self changedListItems, self listItems). -] - -{ #category : #tests } -XMLOrderedListTest >> testAddAllLast [ - | list | - - list := self emptyList. - self - assert: (list addAllLast: self listItems) = self listItems; - assert: list = self listWithItems; - assert: (list addAllLast: self changedListItems) = self changedListItems; - assert: list = (self listClass newFrom: self listItems, self changedListItems). -] - -{ #category : #tests } -XMLOrderedListTest >> testAddBefore [ - | list last | - - last := self listItems last. - (list := self emptyList) add: last. - self - assert: - (self listItems allButLast - allSatisfy: [:each | (list add: each before: last) = each]); - assert: list = self listWithItems; - should: [list add: self newListItem before: self absentListItem] raise: Error. -] - -{ #category : #tests } -XMLOrderedListTest >> testAddBeforeIndex [ - | list | - - (list := self emptyList) add: self listItems last. - self listItems allButLast withIndexDo: [:each :i | - self assert: (list add: each beforeIndex: i) = each]. - self - assert: list = self listWithItems; - should: [list add: self newListItem beforeIndex: self listItems size + 2] raise: Error; - should: [list add: self newListItem beforeIndex: 0] raise: Error. -] - -{ #category : #tests } -XMLOrderedListTest >> testAddFirst [ - | list | - - list := self emptyList. - self - assert: (self listItems reversed allSatisfy: [:each | (list addFirst: each) = each]); - assert: list = self listWithItems. - - self assert: (self listItems allSatisfy: [:each | (list addFirst: each) = each]). - self assert: - list = - (self listClass newFrom: - (self allowsDuplicates - ifTrue: [self listItems reversed, self listItems] - ifFalse: [self listItems reversed])). -] - -{ #category : #tests } -XMLOrderedListTest >> testAddLast [ - | list | - - list := self emptyList. - self - assert: (self listItems allSatisfy: [:each | (list addLast: each) = each]); - assert: list = self listWithItems. - - self assert: (self listItems allSatisfy: [:each | (list addLast: each) = each]). - self assert: - list = - (self listClass newFrom: - (self allowsDuplicates - ifTrue: [self listItems, self listItems] - ifFalse: [self listItems])). -] - -{ #category : #tests } -XMLOrderedListTest >> testAfter [ - | list | - - list := self listWithItems. - 1 to: list size - 1 do: [:i | - self assert: - (list after: (self listItems at: i)) = - (self listItems at: i + 1)]. - self - assert: (list after: self listItems last) = self defaultValue; - assert: (list after: self absentListItem) = self defaultValue. -] - -{ #category : #tests } -XMLOrderedListTest >> testAfterIfAbsent [ - | list | - - list := self listWithItems. - 1 to: list size - 1 do: [:i | - self assert: - (list - after: (self listItems at: i) - ifAbsent: [self fail]) = (self listItems at: i + 1)]. - self assert: - (list - after: self listItems last - ifAbsent: [self newListItem]) = self newListItem. - self assert: - (list - after: self absentListItem - ifAbsent: [self newListItem]) = self newListItem. -] - -{ #category : #tests } -XMLOrderedListTest >> testAllButFirst [ - | list | - - self assert: self emptyList allButFirst = self emptyList. - - list := self listWithItems. - self - assertList: list allButFirst - copiedFrom: list - equals: (self listClass newFrom: self listItems allButFirst). -] - -{ #category : #tests } -XMLOrderedListTest >> testAllButFirstDo [ - self - xmlShould: [:block | self emptyList allButFirstDo: block] - enumerate: #(). - self - xmlShould: [:block | self listWithItems allButFirstDo: block] - enumerate: self listItems allButFirst. -] - -{ #category : #tests } -XMLOrderedListTest >> testAllButFirstFew [ - | list | - - list := self listWithItems. - 1 to: list size do: [:i | - self - assertList: (list allButFirst: i) - copiedFrom: list - equals: (self listClass newFrom: (self listItems allButFirst: i)). - self - assertList: (list allButFirst: i + list size) - copiedFrom: list - equals: self emptyList. - self - assertList: (list allButFirst: i * -1) - copiedFrom: list - equals: list. - self assert: (self emptyList allButFirst: i) = self emptyList]. - self - assertList: (list allButFirst: 0) - copiedFrom: list - equals: list. -] - -{ #category : #tests } -XMLOrderedListTest >> testAllButLast [ - | list | - - self assert: self emptyList allButLast = self emptyList. - - list := self listWithItems. - self - assertList: list allButLast - copiedFrom: list - equals: (self listClass newFrom: self listItems allButLast). -] - -{ #category : #tests } -XMLOrderedListTest >> testAllButLastDo [ - self - xmlShould: [:block | self emptyList allButLastDo: block] - enumerate: #(). - self - xmlShould: [:block | self listWithItems allButLastDo: block] - enumerate: self listItems allButLast. -] - -{ #category : #tests } -XMLOrderedListTest >> testAllButLastFew [ - | list | - - list := self listWithItems. - 1 to: list size do: [:i | - self - assertList: (list allButLast: i) - copiedFrom: list - equals: (self listClass newFrom: (self listItems allButLast: i)). - self - assertList: (list allButLast: i + list size) - copiedFrom: list - equals: self emptyList. - self - assertList: (list allButLast: i * -1) - copiedFrom: list - equals: list. - self assert: (self emptyList allButLast: i) = self emptyList]. - self - assertList: (list allButLast: 0) - copiedFrom: list - equals: list. -] - -{ #category : #tests } -XMLOrderedListTest >> testAnyOne [ - self - assert: self emptyList anyOne = self defaultValue; - assert: self listWithItems anyOne = self listItems first. -] - -{ #category : #tests } -XMLOrderedListTest >> testAsArray [ - self - assert: self emptyList asArray = #(); - assert: self listWithItems asArray = self listItems asArray -] - -{ #category : #tests } -XMLOrderedListTest >> testAsOrderedCollection [ - | list | - - list := self listWithItems. - self - assert: self emptyList asOrderedCollection = OrderedCollection new; - assert: list asOrderedCollection = self listItems asOrderedCollection; - deny: list asOrderedCollection == list collection. -] - -{ #category : #tests } -XMLOrderedListTest >> testAt [ - | list | - - list := self listWithItems. - self - assert: ((1 to: list size) allSatisfy: [:i | (list at: i) = (self listItems at: i)]); - assert: (list at: 0) = self defaultValue; - assert: (list at: list size + 1) = self defaultValue. -] - -{ #category : #tests } -XMLOrderedListTest >> testAtIfAbsent [ - | list | - - list := self listWithItems. - 1 to: list size do: [:i | - self assert: - (list - at: i - ifAbsent: [self fail]) = (self listItems at: i)]. - self - assert: (list at: 0 ifAbsent: [self newListItem]) = self newListItem; - assert: (list at: list size + 1 ifAbsent: [self newListItem]) = self newListItem. -] - -{ #category : #tests } -XMLOrderedListTest >> testAtLast [ - | list | - - list := self listWithItems. - 1 to: list size do: [:i | self assert: (list atLast: i) = (self listItems atLast: i)]. - self - assert: (list atLast: 0) = self defaultValue; - assert: (list atLast: list size + 1) = self defaultValue. -] - -{ #category : #tests } -XMLOrderedListTest >> testAtLastIfAbsent [ - | list | - - list := self listWithItems. - 1 to: list size do: [:i | - self assert: (list atLast: i ifAbsent: [self newListItem]) = (self listItems atLast: i)]. - self - assert: (list atLast: 0 ifAbsent: [self newListItem]) = self newListItem; - assert: (list atLast: list size + 1 ifAbsent: [self newListItem]) = self newListItem. -] - -{ #category : #tests } -XMLOrderedListTest >> testAtPut [ - | list | - - list := self listWithItems. - 1 to: list size do: [:i | | replacement | - replacement := list at: i. - self - assert: (list at: i put: replacement) == replacement; - assert: (list at: i) == replacement]. - self assert: list = self listWithItems. - - self assert: (list at: list size + 1 put: self newListItem) = self newListItem. - self assert: - list = - (self listClass newFrom: (self listItems copyWith: self newListItem)). - - list := self listWithItems. - 1 to: list size do: [:i | | replacement | - replacement := self changedListItems at: i. - self - assert: (list at: i put: replacement) == replacement; - assert: (list at: i) == replacement]. - self assert: list = (self listClass newFrom: self changedListItems). - - list := self listWithItems. - self listItems do: [:each | - self assert: (list at: list size + 1 put: each) == each]. - self assert: - list = - (self allowsDuplicates - ifTrue: [self listClass newFrom: self listItems, self listItems] - ifFalse: [self listWithItems]). - self - should: [list at: 0 put: self newListItem] - raise: Error. - self - should: [list at: list size + 2 put: self newListItem] - raise: Error. -] - -{ #category : #tests } -XMLOrderedListTest >> testBefore [ - | list | - - list := self listWithItems. - 2 to: list size do: [:i | - self assert: (list before: (self listItems at: i)) = (self listItems at: i - 1)]. - self - assert: (list before: self listItems first) = self defaultValue; - assert: (list before: self absentListItem) = self defaultValue. -] - -{ #category : #tests } -XMLOrderedListTest >> testBeforeIfAbsent [ - | list | - - list := self listWithItems. - 2 to: list size do: [:i | - self assert: - (list - before: (self listItems at: i) - ifAbsent: [self fail]) = (self listItems at: i - 1)]. - self assert: - (list - before: self listItems first - ifAbsent: [self newListItem]) = self newListItem. - self assert: - (list - before: self absentListItem - ifAbsent: [self newListItem]) = self newListItem. -] - -{ #category : #tests } -XMLOrderedListTest >> testBeginsWith [ - | list | - - self deny: (self emptyList beginsWith: self listItems). - list := self listWithItems. - 1 to: list size do: [:i | - self - assert: (list beginsWith: (self listItems copyFrom: 1 to: i)); - deny: (list beginsWith: ((self listItems copyFrom: 1 to: i) copyWith: self absentListItem)); - deny: (list beginsWith: ((self listItems copyFrom: 1 to: i) copyWithFirst: self absentListItem))]. -] - -{ #category : #tests } -XMLOrderedListTest >> testCapacity [ - self hasCapacity - ifTrue: [ - self - assert: self emptyList capacity >= 0; - assert: self listWithSingleItem capacity >= 1; - assert: self listWithItems capacity >= self listItems size] -] - -{ #category : #tests } -XMLOrderedListTest >> testCollect [ - | list | - - list := self listWithItems. - self - assertList: (list collect: [:each | self changedListItem: each]) - collectedFrom: list - equals: (self listSpecies newFrom: self changedListItems). -] - -{ #category : #tests } -XMLOrderedListTest >> testCollectThenSelect [ - | list | - - list := self listWithItems. - self - assertList: - (list - collect: [:each | self changedListItem: each] - thenSelect: [:each | each ~= self changedSingleListItem]) - copiedFrom: list - equals: - (self listClass newFrom: - (self changedListItems copyWithout: self changedSingleListItem)). -] - -{ #category : #tests } -XMLOrderedListTest >> testConcatenation [ - | list | - - list := self emptyList. - self - assertList: (list, self emptyList) copiedFrom: list equals: self emptyList; - assertList: (list, self listWithItems) copiedFrom: list equals: self listWithItems. - - list := self listWithItems. - self assertList: (list, self emptyList) copiedFrom: list equals: self listWithItems. - self - assertList: (list, self listWithItems) - copiedFrom: list - equals: (self listClass newFrom: (self listItems, self listItems)). -] - -{ #category : #tests } -XMLOrderedListTest >> testCopy [ - | list | - - list := self emptyList. - self assertList: list copy isCopyOf: list. - - list := self listWithSingleItem. - self assertList: list copy isCopyOf: list. - - list := self listWithItems. - self assertList: list copy isCopyOf: list. -] - -{ #category : #tests } -XMLOrderedListTest >> testCopyAfter [ - | list | - - list := self listWithItems. - list do: [:each | - self - assertList: (list copyAfter: each) - copiedFrom: list - equals: (self listClass newFrom: (self listItems copyAfter: each)). - self assert: (self emptyList copyAfter: each) = self emptyList]. -] - -{ #category : #tests } -XMLOrderedListTest >> testCopyAfterLast [ - | list | - - list := self listWithItems. - list do: [:each | - self - assertList: (list copyAfterLast: each) - copiedFrom: list - equals: (self listClass newFrom: (self listItems copyAfterLast: each)). - self assert: (self emptyList copyAfterLast: each) = self emptyList]. -] - -{ #category : #tests } -XMLOrderedListTest >> testCopyEmpty [ - | list | - - list := self emptyList. - self assertList: list copyEmpty copiedFrom: list equals: self emptyList. - - list := self listWithSingleItem. - self assertList: list copyEmpty copiedFrom: list equals: self emptyList. - - list := self listWithItems. - self assertList: list copyEmpty copiedFrom: list equals: self emptyList. -] - -{ #category : #tests } -XMLOrderedListTest >> testCopyFromTo [ - | list emptyList | - - list := self listWithItems. - emptyList := self emptyList. - -1 to: list size + 1 do: [:start | - start to: list size + 1 do: [:stop | - self - assertList: (list copyFrom: start to: stop) - copiedFrom: list - equals: (self listWithItems copyFrom: (start max: 1) to: (stop min: list size)). - self - assertList: (list copyFrom: start to: start - 1) - copiedFrom: list - equals: self emptyList. - self - assertList: (list copyFrom: start to: start - 2) - copiedFrom: list - equals: self emptyList. - self - assertList: (emptyList copyFrom: start to: stop) - copiedFrom: list - equals: self emptyList]]. -] - -{ #category : #tests } -XMLOrderedListTest >> testCopyReplaceAllWith [ - | list | - - list := self listClass newFrom: self listItems, self listItems. - 1 to: self listItems size do: [:i | | replacedElements | - replacedElements := self listItemsLast: i. - self - assertList: - (list - copyReplaceAll: replacedElements - with: (replacedElements collect: [:each | self changedListItem: each])) - copiedFrom: list - equals: - (self listClass newFrom: - ((self listItems, self listItems) - copyReplaceAll: replacedElements - with: (replacedElements collect: [:each | self changedListItem: each]))). - self - assertList: - (list - copyReplaceAll: (Array with: self absentListItem) - with: (Array with: self newListItem)) - copiedFrom: list - equals: list. - self - assertList: (list copyReplaceAll: #() with: (Array with: self newListItem)) - copiedFrom: list - equals: list. - self - assertList: (list copyReplaceAll: (self listItems copyWith: self absentListItem) with: #()) - copiedFrom: list - equals: list]. -] - -{ #category : #tests } -XMLOrderedListTest >> testCopyReplaceFromToWith [ - | list emptyList | - - list := self listWithItems. - emptyList := self emptyList. - -1 to: list size + 1 do: [:start | - start to: list size + 1 do: [:stop | - self - assertList: (list copyReplaceFrom: start to: stop with: self changedListItems) - copiedFrom: list - equals: - (self listClass newFrom: - (self listItemsFirst: start - 1), - (self changedListItems), - (self listItemsLast: list size - stop)). - self - assertList: (emptyList copyReplaceFrom: start to: stop with: self listItems) - copiedFrom: emptyList - equals: self listWithItems]]. -] - -{ #category : #tests } -XMLOrderedListTest >> testCopyUpTo [ - | list | - - list := self listWithItems. - list do: [:each | - self - assertList: (list copyUpTo: each) - copiedFrom: list - equals: (self listClass newFrom: (self listItems copyUpTo: each))]. - self - assertList: (list copyUpTo: self absentListItem) - copiedFrom: list - equals: self listWithItems. -] - -{ #category : #tests } -XMLOrderedListTest >> testCopyUpToLast [ - | list | - - list := self listClass newFrom: self listItems, self listItems. - list do: [:each | - self - assertList: (list copyUpToLast: each) - copiedFrom: list - equals: - (self listClass newFrom: - (self allowsDuplicates - ifTrue: [self listItems, self listItems copyUpToLast: each] - ifFalse: [self listItems copyUpToLast: each]))]. - self - assertList: (list copyUpToLast: self absentListItem) - copiedFrom: list - equals: - (self listClass newFrom: - (self allowsDuplicates - ifTrue: [self listItems, self listItems] - ifFalse: [self listItems])). -] - -{ #category : #tests } -XMLOrderedListTest >> testCopyWith [ - | list | - - list := self emptyList. - self - assertList: (list copyWith: self singleListItem) - copiedFrom: list - equals: self listWithSingleItem. - - list := self listWithItems. - self - assertList: (list copyWith: self newListItem) - copiedFrom: list - equals: (self listClass newFrom: (self listItems copyWith: self newListItem)). -] - -{ #category : #tests } -XMLOrderedListTest >> testCopyWithFirst [ - | list | - - list := self emptyList. - self - assertList: (list copyWithFirst: self singleListItem) - copiedFrom: list - equals: self listWithSingleItem. - - list := self listWithItems. - self - assertList: (list copyWithFirst: self newListItem) - copiedFrom: list - equals: - (self listClass newFrom: - (self listItems copyWithFirst: self newListItem)). -] - -{ #category : #tests } -XMLOrderedListTest >> testCopyWithout [ - self listItems do: [:each | | list | - list := self emptyList. - self - assertList: (list copyWithout: each) - copiedFrom: list - equals: self emptyList. - - list := self listWithItems. - self - assertList: (list copyWithout: self absentListItem) - copiedFrom: list - equals: self listWithItems. - self - assertList: (list copyWithout: each) - copiedFrom: list - equals: (self listClass newFrom: (self listItems copyWithout: each))] -] - -{ #category : #tests } -XMLOrderedListTest >> testCopyWithoutAll [ - 1 to: self listItems size do: [:i | | itemsToRemove list | - itemsToRemove := self listItems copyFrom: 1 to: i. - list := self emptyList. - self - assertList: (list copyWithoutAll: itemsToRemove) - copiedFrom: list - equals: self emptyList. - - list := self listWithItems. - self - assertList: (list copyWithoutAll: (Array with: self absentListItem)) - copiedFrom: list - equals: self listWithItems. - self - assertList: (list copyWithoutAll: itemsToRemove) - copiedFrom: list - equals: - (self listClass newFrom: - (self listItems copyWithoutAll: itemsToRemove))] -] - -{ #category : #tests } -XMLOrderedListTest >> testDefaultValue [ - self assert: self emptyList defaultValue = self defaultValue -] - -{ #category : #tests } -XMLOrderedListTest >> testDetect [ - | list | - - list := self listWithItems. - self listItems do: [:element | - self assert: (list detect: [:each | each = element]) = element]. - self assert: (list detect: [:each | each = self absentListItem]) = self defaultValue. -] - -{ #category : #tests } -XMLOrderedListTest >> testDetectIfNone [ - | list | - - list := self listWithItems. - self listItems do: [:element | - self assert: - (list - detect: [:each | each = element] - ifNone: [self newListItem]) = element]. - self assert: - (list - detect: [:each | each = self absentListItem] - ifNone: [self newListItem]) = self newListItem. -] - -{ #category : #tests } -XMLOrderedListTest >> testDo [ - self - xmlShould: [:block | self emptyList do: block] enumerate: #(); - xmlShould: [:block | self listWithItems do: block] enumerate: self listItems -] - -{ #category : #tests } -XMLOrderedListTest >> testDoWithIndex [ - | list enumerated | - - list := self listWithItems. - enumerated := OrderedCollection new. - list withIndexDo: [:each :i | enumerated addLast: each -> i]. - self assert: - enumerated = - (self listItems withIndexCollect: [:each : i | each -> i ]) - asOrderedCollection. -] - -{ #category : #tests } -XMLOrderedListTest >> testEighth [ - self - assert: self emptyList eighth = self defaultValue; - assert: self listWithItems eighth = (self listItems at: 8). -] - -{ #category : #tests } -XMLOrderedListTest >> testEndsWith [ - | list | - - self deny: (self emptyList endsWith: self listItems). - list := self listWithItems. - 1 to: list size do: [:i | - self - assert: (list endsWith: (self listItems copyFrom: i to: list size)); - deny: (list endsWith: ((self listItems copyFrom: i to: list size) copyWith: self absentListItem)); - deny: (list endsWith: ((self listItems copyFrom: i to: list size) copyWithFirst: self absentListItem))]. -] - -{ #category : #tests } -XMLOrderedListTest >> testEquals [ - self - assertList: self emptyList equals: self emptyList; - assertList: self listWithSingleItem equals: self listWithSingleItem; - assertList: self listWithItems equals: self listWithItems; - denyList: self emptyList equals: self listWithSingleItem; - denyList: self emptyList equals: self listWithItems; - denyList: self listWithSingleItem equals: self listWithItems -] - -{ #category : #tests } -XMLOrderedListTest >> testEqualsCustomCollection [ - self - assertList: self emptyList - equals: self customCollectionEmptyList. - self - assertList: self listWithSingleItem - equals: self customCollectionListWithSingleItem. - self - assertList: self listWithItems - equals: self customCollectionListWithItems. - self - denyList: self emptyList - equals: self customCollectionListWithSingleItem. - self - denyList: self emptyList - equals: self customCollectionListWithItems. - self - denyList: self listWithSingleItem - equals: self customCollectionEmptyList. - self - denyList: self listWithSingleItem - equals: self customCollectionListWithItems. - self - denyList: self listWithItems - equals: self customCollectionEmptyList. - self - denyList: self listWithItems - equals: self customCollectionListWithSingleItem. -] - -{ #category : #tests } -XMLOrderedListTest >> testEqualsSpecies [ - | emptySpeciesList speciesListWithSingleElement speciesListWithElements | - - emptySpeciesList := self listSpecies new. - speciesListWithSingleElement := self listSpecies with: self singleListItem. - speciesListWithElements := self listSpecies newFrom: self listItems. - self - assertList: self emptyList equals: emptySpeciesList; - assertList: self listWithSingleItem equals: speciesListWithSingleElement; - assertList: self listWithItems equals: speciesListWithElements; - denyList: self emptyList equals: speciesListWithSingleElement; - denyList: self emptyList equals: speciesListWithElements; - denyList: self listWithSingleItem equals: emptySpeciesList; - denyList: self listWithSingleItem equals: speciesListWithElements; - denyList: self listWithItems equals: emptySpeciesList; - denyList: self listWithItems equals: speciesListWithSingleElement. -] - -{ #category : #tests } -XMLOrderedListTest >> testFifth [ - self - assert: self emptyList fifth = self defaultValue; - assert: self listWithItems fifth = (self listItems at: 5). -] - -{ #category : #tests } -XMLOrderedListTest >> testFirst [ - self - assert: self emptyList first = self defaultValue; - assert: self listWithItems first = (self listItems at: 1). -] - -{ #category : #tests } -XMLOrderedListTest >> testFirstFew [ - | list | - - list := self listWithItems. - 1 to: list size do: [:i | - self - assertList: (list first: i) - copiedFrom: list - equals: (self listClass newFrom: (self listItemsFirst: i)). - self - assertList: (list first: list size + i) - copiedFrom: list - equals: self listWithItems. - self - assertList: (list first: (i * -1)) - copiedFrom: list - equals: self emptyList]. - self - assertList: (list first: 0) - copiedFrom: list - equals: self emptyList. -] - -{ #category : #tests } -XMLOrderedListTest >> testFourth [ - self - assert: self emptyList fourth = self defaultValue; - assert: self listWithItems fourth = (self listItems at: 4). -] - -{ #category : #tests } -XMLOrderedListTest >> testHash [ - "We can only safely test that equal objects have the same hash; testing - that different objects have different hashes would be unreliable - because #hash is non-cryptographic and has collisions." - self - assert: self emptyList hash = self emptyList hash; - assert: self listWithSingleItem hash = self listWithSingleItem hash; - assert: self listWithItems hash = self listWithItems hash; - assert: - (self listWithItems - removeAll; - hash) = self emptyList hash. -] - -{ #category : #tests } -XMLOrderedListTest >> testHashCustomCollection [ - self assert: - self emptyList hash = self customCollectionEmptyList hash. - self assert: - self listWithSingleItem hash = - self customCollectionListWithSingleItem hash. - self assert: - self listWithItems hash = - self customCollectionListWithItems hash. -] - -{ #category : #tests } -XMLOrderedListTest >> testIdentityIndexOf [ - | list | - - list := self listWithItems. - 1 to: list size do: [:i | - self - assert: (list identityIndexOf: (list at: i)) = i; - assert: (list identityIndexOf: (list at: i) copy) isZero]. -] - -{ #category : #tests } -XMLOrderedListTest >> testIdentityIndexOfIfAbsent [ - | list | - - list := self listWithItems. - 1 to: list size do: [:i | - self - assert: (list identityIndexOf: (list at: i) ifAbsent: [-1]) = i; - assert: (list identityIndexOf: (list at: i) copy ifAbsent: [-1]) = -1]. -] - -{ #category : #tests } -XMLOrderedListTest >> testIndexOf [ - | list | - - list := self listWithItems. - 1 to: list size do: [:i | - self - assert: (list indexOf: (list at: i)) = i; - assert: (list indexOf: (self listItems at: i)) = i]. - self assert: (list indexOf: self absentListItem) isZero. -] - -{ #category : #tests } -XMLOrderedListTest >> testIndexOfIfAbsent [ - | list | - - list := self listWithItems. - 1 to: list size do: [:i | - self - assert: (list indexOf: (list at: i) ifAbsent: [-1]) = i; - assert: (list indexOf: (self listItems at: i) ifAbsent: [-1]) = i]. - self assert: (list indexOf: self absentListItem ifAbsent: [-1]) = -1. -] - -{ #category : #tests } -XMLOrderedListTest >> testIndexOfStartingAt [ - | list | - - list := self listWithItems. - 1 to: list size do: [:i | - self - assert: (list indexOf: (list at: i) startingAt: i) = i; - assert: (list indexOf: (list at: i) startingAt: i + 1) isZero]. -] - -{ #category : #tests } -XMLOrderedListTest >> testIndexOfStartingAtIfAbsent [ - | list | - - list := self listWithItems. - 1 to: list size do: [:i | - self - assert: (list indexOf: (list at: i) startingAt: i ifAbsent: [-1]) = i; - assert: (list indexOf: (list at: i) startingAt: i + 1 ifAbsent: [-1]) = -1]. -] - -{ #category : #tests } -XMLOrderedListTest >> testIndexOfSubCollectionStartingAt [ - | list | - - list := self listWithItems. - 1 to: self listItems size do: [:i | - i to: self listItems size do: [:j | - self assert: - (list - indexOfSubCollection: (self listItems copyFrom: i to: j) - startingAt: 1) = i. - self assert: - (list - indexOfSubCollection: (self listItems copyFrom: i to: j) - startingAt: i) = i. - self assert: - (list - indexOfSubCollection: (self listItems copyFrom: i to: j) - startingAt: i + 1) = 0]]. -] - -{ #category : #tests } -XMLOrderedListTest >> testIndexOfSubCollectionStartingAtIfAbsent [ - | list | - - list := self listWithItems. - 1 to: self listItems size do: [:i | - i to: self listItems size do: [:j | - self assert: - (list - indexOfSubCollection: (self listItems copyFrom: i to: j) - startingAt: 1 - ifAbsent: [-1]) = i. - self assert: - (list - indexOfSubCollection: (self listItems copyFrom: i to: j) - startingAt: i - ifAbsent: [-1]) = i. - self assert: - (list - indexOfSubCollection: (self listItems copyFrom: i to: j) - startingAt: i + 1 - ifAbsent: [-1]) = -1]]. -] - -{ #category : #tests } -XMLOrderedListTest >> testIsEmpty [ - self - assert: self emptyList isEmpty; - deny: self listWithSingleItem isEmpty; - deny: self listWithItems isEmpty -] - -{ #category : #tests } -XMLOrderedListTest >> testLast [ - self - assert: self emptyList last = self defaultValue; - assert: self listWithItems last = self listItems last. -] - -{ #category : #tests } -XMLOrderedListTest >> testLastFew [ - | list | - - list := self listWithItems. - 1 to: list size do: [:i | - self - assertList: (list last: i) - copiedFrom: list - equals: (self listClass newFrom: (self listItemsLast: i)). - self - assertList: (list last: list size + i) - copiedFrom: list - equals: self listWithItems. - self - assertList: (list last: (i * -1)) - copiedFrom: list - equals: self emptyList]. - self - assertList: (list last: 0) - copiedFrom: list - equals: self emptyList. -] - -{ #category : #tests } -XMLOrderedListTest >> testLastIndexOf [ - | list | - - list := self listClass newFrom: self listItems, self listItems. - list do: [:each | - self assert: - (list lastIndexOf: each) = - (self allowsDuplicates - ifTrue: [self listItems, self listItems lastIndexOf: each] - ifFalse: [self listItems lastIndexOf: each])]. - self assert: (list lastIndexOf: self newListItem) isZero. -] - -{ #category : #tests } -XMLOrderedListTest >> testLastIndexOfIfAbsent [ - | list | - - list := self listClass newFrom: self listItems, self listItems. - list do: [:each | - self assert: - (list lastIndexOf: each ifAbsent: [-1]) = - (self allowsDuplicates - ifTrue: [self listItems, self listItems lastIndexOf: each] - ifFalse: [self listItems lastIndexOf: each])]. - self assert: (list lastIndexOf: self newListItem ifAbsent: [-1]) = -1. -] - -{ #category : #tests } -XMLOrderedListTest >> testNew [ - | list | - - list := self listClass new: 20. - self assert: list = self emptyList. - self hasCapacity - ifTrue: [self assert: list capacity >= 20]. -] - -{ #category : #tests } -XMLOrderedListTest >> testNewFrom [ - self assert: (self listClass newFrom: self listItems) = self listWithItems -] - -{ #category : #tests } -XMLOrderedListTest >> testNewWithAll [ - | list | - - list := self listClass new: 10 withAll: self singleListItem. - self allowsDuplicates - ifTrue: [self assert: list size = 10] - ifFalse: [self assert: list size = 1]. - self assert: (list allSatisfy: [:each | each = self singleListItem]). -] - -{ #category : #tests } -XMLOrderedListTest >> testNinth [ - self - assert: self emptyList ninth = self defaultValue; - assert: self listWithItems ninth = (self listItems at: 9). -] - -{ #category : #tests } -XMLOrderedListTest >> testOfSize [ - self assert: (self listClass ofSize: 10) size = 10 -] - -{ #category : #tests } -XMLOrderedListTest >> testPairsDo [ - "does not require the receiver to have an even number of items" - - 0 to: self listItems size do: [:i | | list odd even | - list := self listClass newFrom: (self listItems allButLast: i). - odd := OrderedCollection new. - even := OrderedCollection new. - list withIndexDo: [:each :oddOrEven | - oddOrEven odd - ifTrue: [ - oddOrEven < list size - ifTrue: [odd addLast: each]] - ifFalse: [even addLast: each]]. - self - xmlShould: [:twoArgumentBlock | list pairsDo: twoArgumentBlock] - enumerate: odd - and: even] -] - -{ #category : #tests } -XMLOrderedListTest >> testReadStream [ - | list stream position | - - list := self listWithItems. - stream := list readStream. - position := 0. - self - assert: stream isStream; - assert: stream position = 0. - self listItems do: [:each | - self - deny: stream atEnd; - assert: stream next = each. - position := position + 1. - self assert: stream position = position]. - self assert: stream atEnd. -] - -{ #category : #tests } -XMLOrderedListTest >> testReject [ - | list | - - list := self listWithItems. - self - assertList: (list reject: [:each | each = self singleListItem]) - copiedFrom: list - equals: - (self listClass newFrom: - (self listWithItems copyWithout: self singleListItem)). -] - -{ #category : #tests } -XMLOrderedListTest >> testRejectThenCollect [ - | list | - - list := self listWithItems. - self - assertList: - (list - reject: [:each | each = self singleListItem] - thenCollect: [:each | self changedListItem: each]) - collectedFrom: list - equals: - (self listSpecies newFrom: - (self changedListItems copyWithout: self changedSingleListItem)). -] - -{ #category : #tests } -XMLOrderedListTest >> testRemoveAll [ - | list | - - list := self listWithItems. - self - assert: list removeAll == list; - assert: list isEmpty; - assert: list removeAll == list; - assert: list isEmpty. -] - -{ #category : #tests } -XMLOrderedListTest >> testRemoveAt [ - self listItems withIndexDo: [:each :i | | list | - list := self listWithItems. - self - assert: (list removeAt: i) = each; - assert: (list = (self listClass newFrom: (self listItems copyWithout: each)))]. - self - should: [self listWithItems removeAt: 0] raise: Error; - should: [self listWithItems removeAt: self listItems size + 1] raise: Error. -] - -{ #category : #tests } -XMLOrderedListTest >> testRemoveFirst [ - | list | - - list := self listWithItems. - self listItems do: [:each | - self - assert: list removeFirst = each; - assert: list = (self listClass newFrom: (self listItems copyAfter: each))]. - self should: [list removeFirst] raise: Error. -] - -{ #category : #tests } -XMLOrderedListTest >> testRemoveFirstFew [ - 1 to: self listItems size do: [:i | | list removedElements | - list := self listWithItems. - removedElements := list removeFirst: i. - self - assert: removedElements asArray = (self listItemsFirst: i); - assert: list = (self listClass newFrom: (self listItems allButFirst: i)); - assert: (list removeFirst: 0) isEmpty; - should: [self emptyList removeFirst: i] raise: Error]. -] - -{ #category : #tests } -XMLOrderedListTest >> testRemoveIfAbsent [ - | list | - - list := self listWithItems. - self listItems do: [:each | - self assert: - (list - remove: each - ifAbsent: [self fail]) = each. - self deny: (list includes: each). - - self assert: - (list - remove: each - ifAbsent: [self absentListItem]) = self absentListItem]. -] - -{ #category : #tests } -XMLOrderedListTest >> testRemoveLast [ - | list | - - list := self listWithItems. - self listItems reverseDo: [:each | - self - assert: list removeLast = each; - assert: list = (self listClass newFrom: (self listItems copyUpTo: each))]. - self should: [list removeLast] raise: Error. -] - -{ #category : #tests } -XMLOrderedListTest >> testRemoveLastFew [ - | list removedElements | - - 1 to: self listItems size do: [:i | - list := self listWithItems. - removedElements := list removeLast: i. - self - assert: removedElements asArray = (self listItemsLast: i) asArray; - assert: list = (self listClass newFrom: (self listItems allButLast: i)); - assert: (list removeLast: 0) isEmpty; - should: [self emptyList removeLast: i] raise: Error]. -] - -{ #category : #tests } -XMLOrderedListTest >> testReplaceFromToWith [ - | list | - - 1 to: self listItems size do: [:start | - start to: self listItems size do: [:stop | - list := self listWithItems. - self assert: - (list - replaceFrom: start - to: stop - with: (self changedListItems allButFirst: start - 1)) == list. - - self - assertList: list - replacedItems: self listItems - withItems: self changedListItems - from: start - to: stop. - - start > 1 - ifTrue: [ - self - should: [ - self emptyList - replaceFrom: start - to: stop - with: self listItems] - raise: Error] - ifFalse: [ - self assert: - (self emptyList - replaceFrom: start - to: stop - with: self listItems) = - (self listClass newFrom: (self listItemsFirst: stop))]]] -] - -{ #category : #tests } -XMLOrderedListTest >> testReplaceFromToWithStartingAt [ - 1 to: self listItems size do: [:start | - start to: self listItems size do: [:stop | | list | - list := self listWithItems. - self assert: - (list - replaceFrom: start - to: stop - with: self changedListItems - startingAt: start) == list. - - self - assertList: list - replacedItems: self listItems - withItems: self changedListItems - from: start - to: stop. - - start > 1 - ifTrue: [ - self - should: [ - self emptyList - replaceFrom: start - to: stop - with: self listItems - startingAt: start] - raise: Error] - ifFalse: [ - self assert: - (self emptyList - replaceFrom: start - to: stop - with: self listItems - startingAt: start) = - (self listClass newFrom: (self listItemsFirst: stop))]]] -] - -{ #category : #tests } -XMLOrderedListTest >> testReset [ - | list oldCapacity | - - list := self listWithItems. - self hasCapacity - ifTrue: [oldCapacity := list capacity]. - list reset. - self assert: list isEmpty. - oldCapacity - ifNotNil: [self assert: list capacity >= oldCapacity]. -] - -{ #category : #tests } -XMLOrderedListTest >> testReverse [ - | list | - - list := self listWithItems. - self - assertList: list reverse - copiedFrom: list - equals: (self listClass newFrom: self listItems reverse). -] - -{ #category : #tests } -XMLOrderedListTest >> testReverseDo [ - self - xmlShould: [:block | self emptyList reverseDo: block] enumerate: #(); - xmlShould: [:block | self listWithItems reverseDo: block] enumerate: self listItems reversed. -] - -{ #category : #tests } -XMLOrderedListTest >> testReversed [ - | list | - - list := self listWithItems. - self - assertList: list reversed - copiedFrom: list - equals: (self listClass newFrom: self listItems reversed). -] - -{ #category : #tests } -XMLOrderedListTest >> testSecond [ - self - assert: self emptyList second = self defaultValue; - assert: self listWithItems second = (self listItems at: 2). -] - -{ #category : #tests } -XMLOrderedListTest >> testSelect [ - | list | - - list := self listWithItems. - self - assertList: (list select: [:each | each ~= self singleListItem]) - copiedFrom: list - equals: - (self listClass newFrom: - (self listWithItems copyWithout: self singleListItem)). -] - -{ #category : #tests } -XMLOrderedListTest >> testSelectThenCollect [ - | list | - - list := self listWithItems. - self - assertList: - (list - select: [:each | each ~= self singleListItem] - thenCollect: [:each | self changedListItem: each]) - collectedFrom: list - equals: - (self listSpecies newFrom: - (self changedListItems copyWithout: self changedSingleListItem)). -] - -{ #category : #tests } -XMLOrderedListTest >> testSeventh [ - self - assert: self emptyList seventh = self defaultValue; - assert: self listWithItems seventh = (self listItems at: 7). -] - -{ #category : #tests } -XMLOrderedListTest >> testSixth [ - self - assert: self emptyList sixth = self defaultValue; - assert: self listWithItems sixth = (self listItems at: 6). -] - -{ #category : #tests } -XMLOrderedListTest >> testSize [ - self - assert: self emptyList size isZero; - assert: self listWithSingleItem size = 1; - assert: self listWithItems size = self listItems size -] - -{ #category : #tests } -XMLOrderedListTest >> testSort [ - | list | - - list := self listWithItems. - self - assert: list sort == list; - assert: list = (self listClass newFrom: (self listItems copy sort: self sortBlock)); - assert: (list sort: self reverseSortBlock) == list; - assert: list = (self listClass newFrom: (self listItems copy sort: self reverseSortBlock)). -] - -{ #category : #tests } -XMLOrderedListTest >> testSorted [ - | list | - - list := self listWithItems. - self - assertList: list sorted - copiedFrom: list - equals: (self listClass newFrom: (self listItems copy sorted: self sortBlock)). - self - assertList: (list sorted: self reverseSortBlock) - copiedFrom: list - equals: (self listClass newFrom: (self listItems copy sorted: self reverseSortBlock)). -] - -{ #category : #tests } -XMLOrderedListTest >> testSpecies [ - self - assert: self emptyList species = self listSpecies -] - -{ #category : #tests } -XMLOrderedListTest >> testSwapWith [ - | list start end | - - list := self listWithItems. - - start := 1. - end := list size. - [start < end] - whileTrue: [ - list swap: start with: end. - start := start + 1. - end := end - 1]. - self assert: list = (self listClass newFrom: self listItems reversed). - - start := 1. - end := list size. - [start < end] - whileTrue: [ - list swap: end with: start. - start := start + 1. - end := end - 1]. - self assert: list = self listWithItems. - - 1 to: list size do: [:i | list swap: i with: i]. - self assert: list = self listWithItems. - - self - should: [list swap: 0 with: 1] - raise: Error. - self - should: [list swap: 1 with: 0] - raise: Error. - self - should: [list swap: list size + 1 with: list size] - raise: Error. - self - should: [list swap: list size with: list size + 1] - raise: Error. - self assert: list = self listWithItems. -] - -{ #category : #tests } -XMLOrderedListTest >> testThird [ - self - assert: self emptyList third = self defaultValue; - assert: self listWithItems third = (self listItems at: 3). -] - -{ #category : #tests } -XMLOrderedListTest >> testWithCollect [ - | list | - - list := self listWithItems. - self - assertList: (list with: (1 to: list size + 1) collect: [:each :i | each -> i]) - collectedFrom: list - equals: - (self listSpecies newFrom: - (self listItems withIndexCollect: [:each :i | each -> i])). - self - assertList: (list with: (1 to: list size - 1) collect: [:each :i | each -> i]) - collectedFrom: list - equals: - (self listSpecies newFrom: - (self listItems allButLast - withIndexCollect: [:each :i | each -> i])). -] - -{ #category : #tests } -XMLOrderedListTest >> testWithDo [ - | list enumerated | - - list := self listWithItems. - enumerated := OrderedCollection new. - list with: (1 to: list size + 1) do: [:each :i | enumerated addLast: each -> i]. - self assert: - enumerated = - (self listItems withIndexCollect: [:each : i | each -> i ]) - asOrderedCollection. - - enumerated removeAll. - list with: (1 to: list size - 1) do: [:each :i | enumerated addLast: each -> i]. - self assert: - enumerated = - (self listItems allButLast - withIndexCollect: [:each : i | each -> i ]) - asOrderedCollection. -] - -{ #category : #tests } -XMLOrderedListTest >> testWithIndexCollect [ - | list | - - list := self listWithItems. - self - assertList: (list withIndexCollect: [:each :i | each -> i]) - collectedFrom: list - equals: - (self listSpecies newFrom: - (self listItems withIndexCollect: [:each :i | each -> i])). -] - -{ #category : #tests } -XMLOrderedListTest >> testWithIndexDo [ - | enumerated | - - enumerated := OrderedCollection new. - self listWithItems withIndexDo: [:each :i | enumerated addLast: each -> i]. - self assert: - enumerated = - (self listItems withIndexCollect: [:each : i | each -> i ]) asOrderedCollection. -] - -{ #category : #tests } -XMLOrderedListTest >> testWriteStream [ - self - should: [self emptyList writeStream] - raise: Error -] - -{ #category : #tests } -XMLOrderedListTest >> testXMLLastOrNil [ - self - assert: self emptyList xmlLastOrNil = self defaultValue; - assert: self listWithSingleItem xmlLastOrNil = self singleListItem; - assert: self listWithItems xmlLastOrNil = self listItems last -] diff --git a/src/XML-Tests-Parser/XMLPITest.class.st b/src/XML-Tests-Parser/XMLPITest.class.st deleted file mode 100644 index b02fb1e12..000000000 --- a/src/XML-Tests-Parser/XMLPITest.class.st +++ /dev/null @@ -1,116 +0,0 @@ -Class { - #name : #XMLPITest, - #superclass : #XMLNodeTest, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #'instance creation' } -XMLPITest >> newPIWithTargetAndData [ - ^ self nodeClass - target: 'target' - data: 'data' -] - -{ #category : #accessing } -XMLPITest >> nodeClass [ - ^ XMLPI -] - -{ #category : #tests } -XMLPITest >> testAcceptNodeVisitor [ - | visitor pi message | - - visitor := XMLRecordingNodeVisitor new. - pi := self newNode. - self - assert: (pi acceptNodeVisitor: visitor) == pi; - assert: visitor messageRecorder hasMessages. - - message := visitor messageRecorder nextMessage. - self - assert: message selector == #visitPI:; - assert: message arguments = (Array with: pi); - deny: visitor messageRecorder hasMessages. -] - -{ #category : #tests } -XMLPITest >> testCanonicallyEquals [ - super testCanonicallyEquals. - self assert: - (self newPIWithTargetAndData canonicallyEquals: - self newPIWithTargetAndData). - self deny: - (self newPIWithTargetAndData canonicallyEquals: - self newNode). -] - -{ #category : #tests } -XMLPITest >> testData [ - | pi | - - pi := self newNode. - self - assert: pi data = ''; - assert: (pi data: 'test') == pi; - assert: pi data = 'test'. -] - -{ #category : #tests } -XMLPITest >> testHasData [ - | pi | - - pi := self newNode. - self deny: pi hasData. - - pi data: 'data'. - self assert: pi hasData. - - pi data: ''. - self deny: pi hasData. -] - -{ #category : #tests } -XMLPITest >> testIsPI [ - self assert: self newNode isPI -] - -{ #category : #tests } -XMLPITest >> testSortKey [ - self assert: self newPIWithTargetAndData sortKey = 'target' -] - -{ #category : #tests } -XMLPITest >> testTarget [ - | pi | - - pi := self newNode. - self - assert: pi target = ''; - assert: (pi target: 'test') == pi; - assert: pi target = 'test'. -] - -{ #category : #tests } -XMLPITest >> testTargetData [ - | pi | - - pi := - self nodeClass - target: 'target' - data: 'data'. - self - assert: pi class == self nodeClass; - assert: pi target = 'target'; - assert: pi data = 'data'. -] - -{ #category : #tests } -XMLPITest >> testWriteXMLOn [ - | pi | - - pi := self newPIWithTargetAndData. - self assert: pi printString = ''. - - pi data: ' ', pi data. - self assert: pi printString = ''. -] diff --git a/src/XML-Tests-Parser/XMLParameterEntityDeclarationTest.class.st b/src/XML-Tests-Parser/XMLParameterEntityDeclarationTest.class.st deleted file mode 100644 index c17a4de4b..000000000 --- a/src/XML-Tests-Parser/XMLParameterEntityDeclarationTest.class.st +++ /dev/null @@ -1,33 +0,0 @@ -Class { - #name : #XMLParameterEntityDeclarationTest, - #superclass : #XMLEntityDeclarationTest, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #testing } -XMLParameterEntityDeclarationTest class >> isAbstract [ - ^ false -] - -{ #category : #accessing } -XMLParameterEntityDeclarationTest >> nodeClass [ - ^ XMLParameterEntityDeclaration -] - -{ #category : #tests } -XMLParameterEntityDeclarationTest >> testIsParameter [ - self assert: self newNode isParameter -] - -{ #category : #tests } -XMLParameterEntityDeclarationTest >> testWriteXMLOn [ - self assert: - (self nodeClass name: 'one' replacement: 'two') printString = - ''. - self assert: - (self nodeClass name: 'one' publicID: 'two' systemID: 'three') printString = - ''. - self assert: - (self nodeClass name: 'one' publicID: '' systemID: 'three') printString = - ''. -] diff --git a/src/XML-Tests-Parser/XMLParserExceptionTest.class.st b/src/XML-Tests-Parser/XMLParserExceptionTest.class.st deleted file mode 100644 index 3ba59aa59..000000000 --- a/src/XML-Tests-Parser/XMLParserExceptionTest.class.st +++ /dev/null @@ -1,189 +0,0 @@ -Class { - #name : #XMLParserExceptionTest, - #superclass : #XMLExceptionTest, - #category : #'XML-Tests-Parser-Exceptions' -} - -{ #category : #accessing } -XMLParserExceptionTest >> baseURI [ - ^ 'test.xml' -] - -{ #category : #accessing } -XMLParserExceptionTest >> columnNumber [ - ^ 10 -] - -{ #category : #accessing } -XMLParserExceptionTest >> errorMessageWithBaseURI [ - ^ '{1} (in {2})' format: - (Array - with: self errorMessage - with: self baseURI) -] - -{ #category : #accessing } -XMLParserExceptionTest >> errorMessageWithLineAndColumnNumber [ - ^ '{1} (near line {2}, column {3})' format: - (Array - with: self errorMessage - with: self lineNumber - with: self columnNumber) -] - -{ #category : #accessing } -XMLParserExceptionTest >> errorMessageWithLineAndColumnNumberAndBaseURI [ - ^ '{1} (near line {2}, column {3} in {4})' format: - (Array - with: self errorMessage - with: self lineNumber - with: self columnNumber - with: self baseURI) -] - -{ #category : #accessing } -XMLParserExceptionTest >> errorMessageWithLineNumber [ - ^ '{1} (near line {2})' format: - (Array - with: self errorMessage - with: self lineNumber) -] - -{ #category : #accessing } -XMLParserExceptionTest >> errorMessageWithLineNumberAndBaseURI [ - ^ '{1} (near line {2} in {3})' format: - (Array - with: self errorMessage - with: self lineNumber - with: self baseURI) -] - -{ #category : #accessing } -XMLParserExceptionTest >> exceptionClass [ - ^ XMLParserException -] - -{ #category : #accessing } -XMLParserExceptionTest >> lineNumber [ - ^ 100 -] - -{ #category : #tests } -XMLParserExceptionTest >> testBaseURI [ - | exception | - - exception := self newException. - self - assert: exception baseURI = ''; - assert: (exception baseURI: self baseURI) == exception; - assert: exception baseURI = self baseURI. -] - -{ #category : #tests } -XMLParserExceptionTest >> testColumnNumber [ - | exception | - - exception := self newException. - self - assert: exception columnNumber isNil; - assert: (exception columnNumber: self columnNumber) == exception; - assert: exception columnNumber = self columnNumber. -] - -{ #category : #tests } -XMLParserExceptionTest >> testHasBaseURI [ - | exception | - - exception := self newException. - self deny: exception hasBaseURI. - - exception baseURI: self baseURI. - self assert: exception hasBaseURI. - - exception baseURI: ''. - self deny: exception hasBaseURI. -] - -{ #category : #tests } -XMLParserExceptionTest >> testHasColumnNumber [ - | exception | - - exception := self newException. - self deny: exception hasColumnNumber. - - exception columnNumber: self columnNumber. - self assert: exception hasColumnNumber. - - exception columnNumber: nil. - self deny: exception hasColumnNumber. -] - -{ #category : #tests } -XMLParserExceptionTest >> testHasLineNumber [ - | exception | - - exception := self newException. - self deny: exception hasLineNumber. - - exception lineNumber: self lineNumber. - self assert: exception hasLineNumber. - - exception lineNumber: nil. - self deny: exception hasLineNumber. -] - -{ #category : #tests } -XMLParserExceptionTest >> testLineNumber [ - | exception | - - exception := self newException. - self - assert: exception lineNumber isNil; - assert: (exception lineNumber: self lineNumber) == exception; - assert: exception lineNumber = self lineNumber. -] - -{ #category : #tests } -XMLParserExceptionTest >> testMessageText [ - | exception | - - exception := self newExceptionWithErrorMessage. - self assert: exception messageText = self errorMessage. - - "column numbers without line numbers are ignored" - (exception := self newExceptionWithErrorMessage) - columnNumber: self columnNumber. - self assert: exception messageText = self errorMessage. - - (exception := self newExceptionWithErrorMessage) - lineNumber: self lineNumber. - self assert: exception messageText = self errorMessageWithLineNumber. - - (exception := self newExceptionWithErrorMessage) - baseURI: self baseURI. - self assert: exception messageText = self errorMessageWithBaseURI. - - (exception := self newExceptionWithErrorMessage) - lineNumber: self lineNumber; - columnNumber: self columnNumber. - self assert: exception messageText = self errorMessageWithLineAndColumnNumber. - - (exception := self newExceptionWithErrorMessage) - lineNumber: self lineNumber; - baseURI: self baseURI. - self assert: exception messageText = self errorMessageWithLineNumberAndBaseURI. - - "column numbers without line numbers are ignored" - (exception := self newExceptionWithErrorMessage) - columnNumber: self columnNumber; - baseURI: self baseURI. - self assert: exception messageText = self errorMessageWithBaseURI. - - (exception := self newExceptionWithErrorMessage) - lineNumber: self lineNumber; - columnNumber: self columnNumber; - baseURI: self baseURI. - self assert: - exception messageText = - self errorMessageWithLineAndColumnNumberAndBaseURI. -] diff --git a/src/XML-Tests-Parser/XMLParserLimitsTest.class.st b/src/XML-Tests-Parser/XMLParserLimitsTest.class.st deleted file mode 100644 index 0c85223f1..000000000 --- a/src/XML-Tests-Parser/XMLParserLimitsTest.class.st +++ /dev/null @@ -1,192 +0,0 @@ -Class { - #name : #XMLParserLimitsTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser' -} - -{ #category : #source } -XMLParserLimitsTest >> recursiveEntitiesNamed: aName depth: aLimit isParameter: aBoolean [ - | xml | - - xml := String new writeStream. - 1 to: aLimit do: [:i | - xml - cr; - nextPutAll: ''] - ifFalse: [ - aBoolean - ifTrue: [xml nextPutAll: '%'] - ifFalse: [xml nextPut: $&]. - xml - nextPutAll: aName, (i + 1) printString; - nextPut: $;]. - xml nextPutAll: '">']. - ^ xml contents. -] - -{ #category : #tests } -XMLParserLimitsTest >> testDocumentReadLimit [ - | xml replacement | - - replacement := 'entity replacement'. - xml := ']>&entity;'. - self - shouldnt: [ - (SAXHandler on: xml) - documentReadLimit: xml size + replacement size; - parseDocument] - raise: XMLLimitException. - self - should: [ - (SAXHandler on: xml) - documentReadLimit: xml size + replacement size - 1; - parseDocument] - raise: XMLLimitException. - self - shouldnt: [ - (SAXHandler on: xml) - documentReadLimit: nil; - parseDocument] - raise: XMLLimitException. -] - -{ #category : #tests } -XMLParserLimitsTest >> testRecursiveGeneralEntityReplacement [ - | limit xml | - - limit := 3. - xml := - self - xmlWithRecursiveEntitiesNamed: 'entity' - depth: limit - isParameter: false. - self - shouldnt: [ - (SAXHandler on: xml) - maxEntityReplacementDepth: limit; - parseDocument] - raise: XMLLimitException. -] - -{ #category : #tests } -XMLParserLimitsTest >> testRecursiveGeneralEntityReplacementPastLimit [ - | limit xml | - - limit := 3. - xml := - self - xmlWithRecursiveEntitiesNamed: 'entity' - depth: limit + 1 - isParameter: false. - self - should: [ - (SAXHandler on: xml) - maxEntityReplacementDepth: limit; - parseDocument] - raise: XMLLimitException. - self - shouldnt: [ - (SAXHandler on: xml) - maxEntityReplacementDepth: nil; - parseDocument] - raise: XMLLimitException. -] - -{ #category : #tests } -XMLParserLimitsTest >> testRecursiveParameterEntityReplacement [ - | limit xml | - - limit := 3. - xml := - self - xmlWithRecursiveEntitiesNamed: 'entity' - depth: limit - isParameter: true. - self - shouldnt: [ - (SAXHandler on: xml) - maxEntityReplacementDepth: limit; - parseDocument] - raise: XMLLimitException. -] - -{ #category : #tests } -XMLParserLimitsTest >> testRecursiveParameterEntityReplacementPastLimit [ - | limit xml | - - limit := 3. - xml := - self - xmlWithRecursiveEntitiesNamed: 'entity' - depth: limit + 1 - isParameter: true. - self - should: [ - (SAXHandler on: xml) - maxEntityReplacementDepth: limit; - parseDocument] - raise: XMLLimitException. - self - shouldnt: [ - (SAXHandler on: xml) - maxEntityReplacementDepth: nil; - parseDocument] - raise: XMLLimitException. -] - -{ #category : #tests } -XMLParserLimitsTest >> testResolvingLocalFromNonLocal [ - | parser | - - self - should: [ - (parser := - SAXHandler - on: '' - documentURI: 'http://www.example.com') - externalEntityResolver resolvesLocalFromNonLocal: false. - parser - resolvesExternalEntities: true; - parseDocument] - raise: XMLLimitException. -] - -{ #category : #tests } -XMLParserLimitsTest >> testStreamReaderMaxPushBack [ - | streamReader | - - streamReader := XMLNestedStreamReader on: '' readStream. - self - shouldnt: [ - streamReader maxNestedStreams - timesRepeat: [streamReader pushBack: 'test']] - raise: XMLLimitException. - self - should: [streamReader pushBack: 'test'] - raise: XMLLimitException. -] - -{ #category : #source } -XMLParserLimitsTest >> xmlWithRecursiveEntitiesNamed: aName depth: aLimit isParameter: aBoolean [ - | xml | - - (xml := String new writeStream) - nextPutAll: ''] - ifFalse: [xml nextPutAll: ']>&', aName, '1;']. - - ^ xml contents. -] diff --git a/src/XML-Tests-Parser/XMLParserTest.class.st b/src/XML-Tests-Parser/XMLParserTest.class.st deleted file mode 100644 index f9ccb8861..000000000 --- a/src/XML-Tests-Parser/XMLParserTest.class.st +++ /dev/null @@ -1,6629 +0,0 @@ -Class { - #name : #XMLParserTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser' -} - -{ #category : #source } -XMLParserTest class >> addressBookNamespacePrefixedXML [ - " - | xmlWithPrefixes | - - xmlWithPrefixes := self addressBookNamespacedXML. - #(' - - -
    - - - - - - - - -
    - - - - - -
    - - - One of the most talented actresses on Daytime. Kassie - plays the devious and beautiful Blair Cramer on ABC's - "One Life To Live." - - - - - - - - -
    - - - - -' -] - -{ #category : #source } -XMLParserTest class >> addressBookNamespacedXML [ - " - ^ '', - (self addressBookXML copyAfter: $>) - " - - ^ ' - - -
    - - - - - - - - -
    - - - - - -
    - - - One of the most talented actresses on Daytime. Kassie - plays the devious and beautiful Blair Cramer on ABC's - "One Life To Live." - - - - - - - - -
    - - - - -' -] - -{ #category : #source } -XMLParserTest class >> addressBookXML [ - ^' - - -
    - - - - - - - - -
    - - - - - -
    - - - One of the most talented actresses on Daytime. Kassie - plays the devious and beautiful Blair Cramer on ABC's - "One Life To Live." - - - - - - - - -
    - - - - -' -] - -{ #category : #source } -XMLParserTest class >> addressBookXMLWithDTD [ - ^' - - - - - -
    - - - - - - - - -
    - - - - - -
    - - - One of the most talented actresses on Daytime. Kassie - plays the devious and beautiful Blair Cramer on ABC's - "One Life To Live." - - - - - - - - -
    - - - - -' -] - -{ #category : #source } -XMLParserTest class >> internalSubsetXMLWithDeclarations [ - ^ ' - - - - - - - ]> - test' -] - -{ #category : #source } -XMLParserTest >> addressBookNamespacePrefixedXML [ - ^ self class addressBookNamespacePrefixedXML -] - -{ #category : #source } -XMLParserTest >> addressBookNamespacedXML [ - ^ self class addressBookNamespacedXML -] - -{ #category : #source } -XMLParserTest >> addressBookXML [ - ^ self class addressBookXML -] - -{ #category : #source } -XMLParserTest >> addressBookXMLWithDTD [ - ^ self class addressBookXMLWithDTD -] - -{ #category : #accessing } -XMLParserTest >> badNameAttributeListValues [ - ^ self badNameAttributeValues reject: [:badNameAttributeValue | - badNameAttributeValue allSatisfy: [:each | each isXMLWhitespace]] -] - -{ #category : #accessing } -XMLParserTest >> badNameAttributeValues [ - ^ self badNames reject: [:badName | - (badName includes: $<) - or: [badName anySatisfy: [:each | each isXMLChar not]]] -] - -{ #category : #accessing } -XMLParserTest >> badNames [ - ^ XMLStringMethodsTest badNames -] - -{ #category : #accessing } -XMLParserTest >> badNmtokenAttributeListValues [ - ^ self badNmtokenAttributeValues reject: [:badNmtokenAttributeValue | - badNmtokenAttributeValue allSatisfy: [:each | each isXMLWhitespace]] -] - -{ #category : #accessing } -XMLParserTest >> badNmtokenAttributeValues [ - ^ self badNmtokens reject: [:badName | - (badName includes: $<) - or: [badName anySatisfy: [:each | each isXMLChar not]]] -] - -{ #category : #accessing } -XMLParserTest >> badNmtokens [ - ^ XMLStringMethodsTest badNmtokens -] - -{ #category : #benchmark } -XMLParserTest >> benchmark1 [ - " - XMLParserTest new benchmark1 - 600 timesRepeat => 2131 (Alexandre Bergel 3/29/2010 09:09) - " - Smalltalk garbageCollect. - ^ [4000 timesRepeat: [SAXHandler parse: self addressBookXML]] timeToRun -] - -{ #category : #benchmark } -XMLParserTest >> benchmark2 [ - " - XMLParserTest new benchmark2 - " - Smalltalk garbageCollect. - ^ [4000 timesRepeat: [XMLDOMParser parse: self addressBookXML]] timeToRun -] - -{ #category : #benchmark } -XMLParserTest >> benchmark3 [ - " - XMLParserTest new benchmark3 - " - Smalltalk garbageCollect. - ^ [4000 timesRepeat: [XMLDOMParser parse: self addressBookXMLWithDTD]] timeToRun -] - -{ #category : #benchmark } -XMLParserTest >> benchmark4 [ - | doc | - " - XMLParserTest new benchmark4 - " - doc := XMLDOMParser - parse: self addressBookXML readStream - usingNamespaces: false. - ^ [500000 timesRepeat: [ - doc root firstElement - elementAt: 'contact-info'; - elementAt: 'address'; - elementAt: 'job-info'; - elementAt: 'manager']] timeToRun. -] - -{ #category : #benchmark } -XMLParserTest >> benchmark5 [ - " - XMLParserTest new benchmark5 - " - Smalltalk garbageCollect. - ^ [4000 timesRepeat: [XMLDOMParser parse: self addressBookNamespacedXML]] timeToRun -] - -{ #category : #benchmark } -XMLParserTest >> benchmark6 [ - " - XMLParserTest new benchmark6 - " - Smalltalk garbageCollect. - ^ [4000 timesRepeat: [XMLDOMParser parse: self addressBookNamespacePrefixedXML]] timeToRun -] - -{ #category : #benchmark } -XMLParserTest >> benchmark7 [ - " - XMLParserTest new benchmark7 - " - Smalltalk garbageCollect. - ^ [4000 timesRepeat: [SAX2Parser parse: self addressBookXML]] timeToRun -] - -{ #category : #benchmark } -XMLParserTest >> benchmark8 [ - " - XMLParserTest new benchmark8 - " - Smalltalk garbageCollect. - ^ [4000 timesRepeat: [SAX2ElementParser parse: self addressBookXML]] timeToRun -] - -{ #category : #source } -XMLParserTest >> elementDeclarationsNamed: aNameCollection [ - | stream | - - stream := String new writeStream. - aNameCollection do: [:each | - stream - nextPutAll: ''; - cr]. - ^ stream contents. -] - -{ #category : #source } -XMLParserTest >> internalSubsetXMLWithDeclarations [ - ^ self class internalSubsetXMLWithDeclarations -] - -{ #category : #accessing } -XMLParserTest >> nonChars [ - ^ XMLCharacterMethodsTest nonChars -] - -{ #category : #tests } -XMLParserTest >> testAttributeBadName [ - self badNames do: [:each | - self - should: [SAXHandler parse: ''] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testAttributeDeclarationEntities [ - | dtd | - - dtd := ' - - - - - - - ]>'. - #('' - '' - '' - '') - do: [:each | - self - shouldnt: [SAXHandler parse: dtd, each] - raise: XMLValidationException]. - - #('' - '' - '') - do: [:each | - self - should: [SAXHandler parse: dtd, each] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: dtd, each) - isValidating: false; - parseDocument] - raise: XMLValidationException]. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDeclarationEntity [ - | dtd | - - dtd := ' - - - - - - - ]>'. - #('' - '') - do: [:each | - self - shouldnt: [SAXHandler parse: dtd, each] - raise: XMLValidationException]. - - #('' - '') - do: [:each | - self - should: [SAXHandler parse: dtd, each] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: dtd, each) - isValidating: false; - parseDocument] - raise: XMLValidationException]. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDeclarationEnumeration [ - | dtd | - - dtd := ' - - - ]>'. - #('one' - 'two' - 'three' - ' one ' - ' two ' - ' - three - ') do: [:each | - self - shouldnt: [SAXHandler parse: dtd, ''] - raise: XMLValidationException]. - - #('' - '') - do: [:each | - self - should: [SAXHandler parse: dtd, each] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: dtd, each) - isValidating: false; - parseDocument] - raise: XMLValidationException]. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDeclarationEnumerationValueRedundance [ - | xml | - - xml := ' - - - ]>'. - self - should: [SAXHandler parse: xml] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: xml) - isValidating: false; - parseDocument] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDeclarationID [ - | dtd | - - dtd := ' - - - - - - ]>'. - self - shouldnt: [ - SAXHandler parse: - dtd, - ' - - - '] - raise: XMLValidationException. - - #('' - '') - do: [:each | - self - should: [SAXHandler parse: dtd, each] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: dtd, each) - isValidating: false; - parseDocument] - raise: XMLValidationException]. - - "ID attributes can't have defaults values or #FIXED defaults - and must be #REQUIRED or #IMPLIED" - self - should: [ - SAXHandler parse: - ' - - ]> - '] - raise: XMLValidationException. - self - should: [ - SAXHandler parse: - ' - - ]> - '] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDeclarationIDRef [ - | dtd | - - dtd := ' - - - - - - - ]>'. - self - shouldnt: [ - SAXHandler parse: - dtd, ' - - - - '] - raise: XMLValidationException. - - #('' - '') - do: [:each | - self - should: [SAXHandler parse: dtd, each] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: dtd, each) - isValidating: false; - parseDocument] - raise: XMLValidationException]. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDeclarationIDRefs [ - | dtd | - - dtd := ' - - - - - - - ]>'. - self - shouldnt: [ - SAXHandler parse: - dtd, ' - - - - - '] - raise: XMLValidationException. - - #('' - '') - do: [:each | - self - should: [SAXHandler parse: dtd, each] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: dtd, each) - isValidating: false; - parseDocument] - raise: XMLValidationException]. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDeclarationNmtoken [ - | dtd | - - dtd := ' - - - ]>'. - #('' - '') - do: [:each | - self - shouldnt: [SAXHandler parse: dtd, each] - raise: XMLValidationException]. - - #('' - '' - '' - '') - do: [:each | - self - should: [SAXHandler parse: dtd, each] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: dtd, each) - isValidating: false; - parseDocument] - raise: XMLValidationException]. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDeclarationNmtokens [ - | dtd | - - dtd := ' - - - ]>'. - #('' - '' - '' - '') - do: [:each | - self - shouldnt: [SAXHandler parse: dtd, each] - raise: XMLValidationException]. - - #('' - '' - '' - '') - do: [:each | - self - should: [SAXHandler parse: dtd, each] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: dtd, each) - isValidating: false; - parseDocument] - raise: XMLValidationException]. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDeclarationNotation [ - | dtd | - - dtd := ' - - - - - ]>'. - #('txtFile' 'confFile' ' txtFile ' ' - confFile ') - do: [:each | - self - shouldnt: [SAXHandler parse: dtd, ''] - raise: XMLValidationException]. - - #('' - '') - do: [:each | - self - should: [SAXHandler parse: dtd, each] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: dtd, each) - isValidating: false; - parseDocument] - raise: XMLValidationException]. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDeclarationNotationDeclared [ - | xmlTemplate | - - xmlTemplate := ' - - - - - ]>'. - - "event if the value used in the attribute is declared, all values - in the NOTATION enumeration list must be declared too" - #('(txtFile | htmlFile)' '(zipFile)' '(htmlFile | confFile)') - do: [:each | | xml | - xml := xmlTemplate format: (Array with: each). - self - should: [SAXHandler parse: xml] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: xml) - isValidating: false; - parseDocument] - raise: XMLValidationException]. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDeclarationNotationRedundance [ - "only one notation attribute is allowed per element" - | xml | - - xml := ' - - - - - - - ]>'. - self - should: [SAXHandler parse: xml] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: xml) - isValidating: false; - parseDocument] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDeclarationNotationValueRedundance [ - | xml | - - xml := ' - - - - - ]>'. - self - should: [SAXHandler parse: xml] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: xml) - isValidating: false; - parseDocument] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDeclarationPrefixed [ - | dtd | - - dtd := ' - - ]>'. - - #('' - '' - '' - '') - do: [:each | - self - shouldnt: [SAXHandler parse: dtd, each] - raise: XMLValidationException]. - - "valid, but a namespace exception" - self - should: [SAXHandler parse: dtd, ''] - raise: XMLNamespaceException. - self - shouldnt: [ - (SAXHandler on: dtd, '') - usesNamespaces: false; - parseDocument] - raise: XMLNamespaceException. - - #('' - '') - do: [:each | - self - should: [SAXHandler parse: dtd, each] - raise: XMLValidationException]. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDeclarationPrefixedDefault [ - | dtd | - - dtd := ' - - ]>'. - - #('' - '' - '' - '' - '' - '') - do: [:each | - self - shouldnt: [SAXHandler parse: dtd, each] - raise: XMLValidationException]. - - #('' - '' - '') - do: [:each | - self - should: [SAXHandler parse: dtd, each] - raise: XMLValidationException]. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDeclarationRedundance [ - "additional declarations for the same attribute are ignored" - - | dtd resolver | - - dtd := ' - - - - ]>'. - (resolver := DTDStaticExternalEntityResolver new) - externalEntityAtURI: 'extern.dtd' - put: ''. - #('' - '') - do: [:each | - self - shouldnt: [ - (SAXHandler on: dtd, each) - externalEntityResolver: resolver; - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException]. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDeclarationWhitespace [ - #(' - ]>' - ' - ]>' - ' - ]>' - ' - ]>' - ' - ]>') - do: [:each | - self - should: [SAXHandler parse: each, ''] - raise: XMLWellFormednessException]. - #(' - ]>' - ' - ]>' - ' - ]>') - do: [:each | - self - shouldnt: [SAXHandler parse: each, ''] - raise: XMLWellFormednessException]. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDefaultFixedValue [ - | dtd document root | - - dtd := ' - - - ]>'. - - #(true false) do: [:isValidating | - document := - (XMLDOMParser on: - dtd, - '') - isValidating: isValidating; - parseDocument. - root := document root. - self - assert: (root attributeAt: 'one') = 'fixedDefault'; - assert: (root attributeAt: 'two') = 'fixedDefaultTwo'; - assert: (root includesAttribute: 'three'); - assert: (root attributeAt: 'three') = ''; - assert: (root attributeAt: 'four') = 'fixedDefaultTwo'. - - "attributes with fixed defaults are set automatically if not present" - document := - (XMLDOMParser on: dtd, '') - isValidating: isValidating; - parseDocument. - root := document root. - self - assert: (root attributeAt: 'one') = 'fixedDefault'; - assert: (root attributeAt: 'two') = 'fixedDefaultTwo'; - assert: (root includesAttribute: 'three'); - assert: (root attributeAt: 'three') = '']. - - "but if present cannot have non-default values" - #('one' 'two' 'three') - with: #('fixedDefault' 'fixedDefaultTwo' '') - do: [:name :fixedDefault | | xml | - xml := dtd, ''. - self - should: [SAXHandler parse: xml] - raise: XMLValidationException. - self - shouldnt: [ - document := - (XMLDOMParser on: xml) - isValidating: false; - parseDocument] - raise: XMLValidationException. - root := document root. - self - assert: (root attributeAt: 'one') = 'fixedDefault'; - assert: (root attributeAt: 'two') = 'fixedDefaultTwo'; - assert: (root includesAttribute: 'three'); - assert: (root attributeAt: 'three') = '']. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDefaultFixedValueEntityReference [ - "tests that general entities referenced in attribute declaration #FIXED - default values were declared before the declaration is parsed" - - #(' - - - - ' - "no ID test because they can't have default values, but IDREF/IDREFS can" - ' - - - - ' - ' - - - - ' - ' - - - - - - ' - ' - - - - - - ' - ' - - - - ' - ' - - - - ' - ' - - - - ' - ' - - - - - ') - do: [:each | | badSubset goodSubset badContent goodContent document| - "the 'undeclared' entity declaration must come before - the rest of the subset for it to be OK" - badSubset := each, ''. - goodSubset := '', each. - badContent := - ' - - - '. - goodContent := - ' - - - '. - - self - should: [ - SAXHandler parse: '', goodContent] - raise: XMLWellFormednessException. - self - should: [ - (SAXHandler on: '', goodContent) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> badSubset)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - - self - shouldnt: [ - document := - (XMLDOMParser on: - '', goodContent) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> badSubset)); - resolvesExternalEntities: true; - isValidating: false; - parseDocument] - raise: XMLValidationException. - self - assert: ((document root elementAt: 'one') attributeAt: 'one') = ''; - assert: ((document root elementAt: 'two') attributeAt: 'two') = 'value'. - - self - shouldnt: [ - document := - XMLDOMParser parse: - '', goodContent] - raise: XMLValidationException. - self - assert: ((document root elementAt: 'one') attributeAt: 'one') = 'value'; - assert: ((document root elementAt: 'two') attributeAt: 'two') = 'value'. - - self - shouldnt: [ - document := - (XMLDOMParser on: - '', goodContent) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> goodSubset)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - self - assert: ((document root elementAt: 'one') attributeAt: 'one') = 'value'; - assert: ((document root elementAt: 'two') attributeAt: 'two') = 'value'. - - "#FIXED default values cannot be changed" - self - should: [SAXHandler parse: '', badContent] - raise: XMLValidationException. - self - should: [ - (SAXHandler on: '', badContent) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> goodSubset)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - - "...unless validation is off" - self - shouldnt: [ - (SAXHandler on: '', badContent) - isValidating: false; - parseDocument] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: '', badContent) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> goodSubset)); - resolvesExternalEntities: true; - isValidating: false; - parseDocument] - raise: XMLValidationException]. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDefaultImplied [ - | dtd document root | - - dtd := ' - - - ]>'. - - document := - XMLDOMParser parse: - dtd, ''. - root := document root. - self - assert: (root attributeAt: 'one') = 'nonDefault'; - assert: (root attributeAt: 'two') = 'nonDefaultTwo'. - - document := XMLDOMParser parse: dtd, ''. - root := document root. - self - assert: (root includesAttribute: 'one'); - assert: (root attributeAt: 'one') = ''; - assert: (root includesAttribute: 'two'); - assert: (root attributeAt: 'two') = ''. - - "implied makes them optional" - document := XMLDOMParser parse: dtd, ''. - root := document root. - self - deny: (root includesAttribute: 'one'); - deny: (root includesAttribute: 'two'). -] - -{ #category : #tests } -XMLParserTest >> testAttributeDefaultRequired [ - | dtd document root | - - dtd := ' - - - ]>'. - - document := - XMLDOMParser parse: - dtd, ''. - root := document root. - self - assert: (root attributeAt: 'one') = 'nonDefault'; - assert: (root attributeAt: 'two') = 'nonDefaultTwo'. - - "empty values still count as being present" - document := XMLDOMParser parse: dtd, ''. - root := document root. - self - assert: (root includesAttribute: 'one'); - assert: (root attributeAt: 'one') = ''; - assert: (root includesAttribute: 'two'); - assert: (root attributeAt: 'two') = ''. - - "all required attributes must be present" - #('' - '') do: [:each | - self - should: [SAXHandler parse: dtd, each] - raise: XMLValidationException]. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDefaultValue [ - | dtd | - - dtd := ' - - - ]>'. - - #(true false) do: [:isValidating | | document root | - document := - (XMLDOMParser on: - dtd, - '') - isValidating: isValidating; - parseDocument. - root := document root. - self - assert: (root attributeAt: 'one') = 'nonDefault'; - assert: (root attributeAt: 'two') = 'nonDefaultTwo'; - assert: (root attributeAt: 'three') = 'nonDefaultThree'. - - "empty but present attributes shouldn't get the default value" - document := XMLDOMParser parse: dtd, ''. - root := document root. - self - assert: (root includesAttribute: 'one'); - assert: (root attributeAt: 'one') = ''; - assert: (root includesAttribute: 'two'); - assert: (root attributeAt: 'two') = ''; - assert: (root attributeAt: 'three') = 'defaultThree'. - - "attributes with defaults are set automatically if not present" - document := XMLDOMParser parse: dtd, ''. - root := document root. - self - assert: (root attributeAt: 'one') = 'default'; - assert: (root includesAttribute: 'two'); - assert: (root attributeAt: 'two') = ''; - assert: (root attributeAt: 'three') = 'defaultThree']. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDefaultValueEntities [ - | xmlTemplate | - - xmlTemplate := ' - - - - - ]>'. - - self badNameAttributeListValues do: [:each | - self - should: [ - SAXHandler parse: - (xmlTemplate format: (Array with: each))] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: - (xmlTemplate format: (Array with: each))) - isValidating: false; - parseDocument] - raise: XMLValidationException.]. - self - shouldnt: [ - SAXHandler parse: - (xmlTemplate format: (Array with: 'two'))] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDefaultValueEntity [ - | xmlTemplate | - - xmlTemplate := ' - - - - - ]>'. - - self badNameAttributeValues do: [:each | - self - should: [ - SAXHandler parse: - (xmlTemplate format: (Array with: each))] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: - (xmlTemplate format: (Array with: each))) - isValidating: false; - parseDocument] - raise: XMLValidationException.]. - self - shouldnt: [ - SAXHandler parse: - (xmlTemplate format: (Array with: 'one'))] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDefaultValueEntityReference [ - "tests that general entities referenced in attribute declaration default - values were declared before the declaration is parsed" - - #(' - - - - ' - "no ID test because they can't have default values, but IDREF/IDREFS can" - ' - - - - ' - ' - - - - ' - ' - - - - - - ' - ' - - - - - - ' - ' - - - - ' - ' - - - - ' - ' - - - - ' - ' - - - - - ') - do: [:each | | badSubset goodSubset content document| - "the 'undeclared' entity declaration must come before - the rest of the subset for it to be OK" - badSubset := each, ''. - goodSubset := '', each. - content := - ' - - - '. - - self - should: [SAXHandler parse: '', content] - raise: XMLWellFormednessException. - self - should: [ - (SAXHandler on: '', content) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> badSubset)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - - self - shouldnt: [ - document := - (XMLDOMParser on: '', content) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> badSubset)); - resolvesExternalEntities: true; - isValidating: false; - parseDocument] - raise: XMLValidationException. - self - assert: ((document root elementAt: 'one') attributeAt: 'one') = ''; - assert: ((document root elementAt: 'two') attributeAt: 'two') = 'value'. - - self - shouldnt: [ - document := - XMLDOMParser parse: '', content] - raise: XMLValidationException. - self - assert: ((document root elementAt: 'one') attributeAt: 'one') = 'value'; - assert: ((document root elementAt: 'two') attributeAt: 'two') = 'value'. - - self - shouldnt: [ - document := - (XMLDOMParser on: '', content) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> goodSubset)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - self - assert: ((document root elementAt: 'one') attributeAt: 'one') = 'value'; - assert: ((document root elementAt: 'two') attributeAt: 'two') = 'value'] -] - -{ #category : #tests } -XMLParserTest >> testAttributeDefaultValueEnumeration [ - | xmlTemplate | - - xmlTemplate := ' - - - ]>'. - - self - should: [ - SAXHandler parse: - (xmlTemplate format: (Array with: 'four'))] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: - (xmlTemplate format: (Array with: 'four'))) - isValidating: false; - parseDocument] - raise: XMLValidationException. - self - shouldnt: [ - SAXHandler parse: - (xmlTemplate format: (Array with: 'one'))] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDefaultValueIDRef [ - | xmlTemplate | - - xmlTemplate := ' - - - ]>'. - - self badNameAttributeValues do: [:each | - self - should: [ - SAXHandler parse: - (xmlTemplate format: (Array with: each))] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: - (xmlTemplate format: (Array with: each))) - isValidating: false; - parseDocument] - raise: XMLValidationException.]. - self - shouldnt: [ - SAXHandler parse: - (xmlTemplate format: (Array with: 'one'))] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDefaultValueIDRefs [ - | xmlTemplate | - - xmlTemplate := ' - - - ]>'. - - self badNameAttributeListValues do: [:each | - self - should: [ - SAXHandler parse: - (xmlTemplate format: (Array with: each))] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: - (xmlTemplate format: (Array with: each))) - isValidating: false; - parseDocument] - raise: XMLValidationException.]. - self - shouldnt: [ - SAXHandler parse: - (xmlTemplate format: (Array with: 'two'))] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDefaultValueNmtoken [ - | xmlTemplate | - - xmlTemplate := ' - - - ]>'. - - self badNmtokenAttributeValues do: [:each | - self - should: [ - SAXHandler parse: - (xmlTemplate format: (Array with: each))] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: - (xmlTemplate format: (Array with: each))) - isValidating: false; - parseDocument] - raise: XMLValidationException.]. - self - shouldnt: [ - SAXHandler parse: - (xmlTemplate format: (Array with: 'one'))] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDefaultValueNmtokens [ - | xmlTemplate | - - xmlTemplate := ' - - - ]>'. - - self badNmtokenAttributeListValues do: [:each | - self - should: [ - SAXHandler parse: - (xmlTemplate format: (Array with: each))] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: - (xmlTemplate format: (Array with: each))) - isValidating: false; - parseDocument] - raise: XMLValidationException.]. - self - shouldnt: [ - SAXHandler parse: - (xmlTemplate format: (Array with: 'two'))] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDefaultValueNonProcessing [ - | dtd document root | - - dtd := ' - - - %undeclared; - - ]>'. - - document := - (XMLDOMParser on: dtd, '') - isValidating: false; - parseDocument. - root := document root. - self - assert: root attributeNodes size = 1; - assert: (root attributeAt: 'one') = 'default'. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDefaultValueNonProcessingStandalone [ - | dtd document root | - - dtd := ' - - - %undeclared; - - ]>'. - - document := - (XMLDOMParser on: dtd, '') - isValidating: false; - parseDocument. - root := document root. - self - assert: root attributeNodes size = 2; - assert: (root attributeAt: 'one') = 'default'; - assert: (root attributeAt: 'two') = 'defaultTwo'. -] - -{ #category : #tests } -XMLParserTest >> testAttributeDefaultValueNotation [ - | xmlTemplate | - - xmlTemplate := ' - - - - - - ]>'. - - self - should: [ - SAXHandler parse: - (xmlTemplate format: (Array with: 'four'))] - raise: XMLValidationException. - self - shouldnt: [ - SAXHandler parse: - (xmlTemplate format: (Array with: 'one'))] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: - (xmlTemplate format: (Array with: 'four'))) - isValidating: false; - parseDocument] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testAttributeRedundance [ - #('' - '' - '') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testAttributeUndeclared [ - self - shouldnt: [ - SAXHandler - parse: ']>' - usingNamespaces:true - validation: true] - raise: XMLValidationException. - self - shouldnt: [ - SAXHandler parse: - ' - ]>'] - raise: XMLValidationException. - self - should: [ - SAXHandler parse: - ']>'] - raise: XMLValidationException. - self - should: [ - SAXHandler parse: - ' - ]>'] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testAttributeValueBadChar [ - self nonChars do: [:each | - self - should: [SAXHandler parse: ''] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testAttributeValueExternalEntityReference [ - | xmlTemplate entities xml | - - xmlTemplate := ' - - - - - ]> - '. - entities := Array with: 'extern.ent' -> 'value'. - - self - shouldnt: [ - xml := xmlTemplate format: (Array with: 'internal'). - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: entities); - resolvesExternalEntities: true; - parseDocument] - raise: XMLWellFormednessException. - - #('external' 'interalReferencingExternal' - 'interalReferencinginteralReferencingExternal') - do: [:each | - xml := xmlTemplate format: (Array with: each). - self - should: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: entities); - resolvesExternalEntities: true; - parseDocument] - raise: XMLWellFormednessException]. -] - -{ #category : #tests } -XMLParserTest >> testAttributeValueNormalization [ - | separators unnormalized normalized document | - - separators := - String - with: Character space - with: Character tab - with: Character lf. - unnormalized := separators, 'nonspace', separators. - normalized := ' nonspace '. - document := - (XMLDOMParser parse: - '', unnormalized, ''). - self - assert: (document root attributeAt: 'name') = normalized; - assert: (document root contentString) = unnormalized. -] - -{ #category : #tests } -XMLParserTest >> testAttributeValueWithAngleBrackets [ - self - should: [SAXHandler parse: ''] - raise: XMLWellFormednessException. - self - shouldnt: [SAXHandler parse: ''] - raise: XMLWellFormednessException. - self - shouldnt: [SAXHandler parse: '''/>'] - raise: XMLWellFormednessException. -] - -{ #category : #tests } -XMLParserTest >> testAttributeXMLBase [ - | document | - - document := - XMLDOMParser parse: ' - - - test - - - - - '. - self assert: - (document allElementsCollect: [:each | each attributeAt: 'xml:base']) asArray = - #('a/b' 'a/c/d' '/e/f' 'a/c/d' ''). - - "resolution should not cause decoding/encoding" - document := - XMLDOMParser parse: ' - - - test - - '. - self assert: - (document allElementsCollect: [:each | each attributeAt: 'xml:base']) asArray = - #('[%61]/{%62}' '[%61]/{%63}/(%64)' '/!%65!/|%66|'). - - document := - XMLDOMParser - parse: - ' - - ' - documentURI: 'doc.xml'. - self assert: (document root attributeAt: 'xml:base') = 'doc.xml'. -] - -{ #category : #tests } -XMLParserTest >> testAttributeXMLIDDTDValidation [ - self - shouldnt: [ - SAXHandler parse: - ' - - - ]> - - - '] - raise: XMLValidationException. - - #(' - ]> - ' - ' - ]> - ' - ' - ]> - ' - ' - ]> - ' - ' - - - ]> - - - ') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: each) - isValidating: false; - parseDocument] - raise: XMLValidationException]. -] - -{ #category : #tests } -XMLParserTest >> testAttributeXMLIDValidation [ - | xml xmlWithDuplicateID | - - xml := ''. - xmlWithDuplicateID := ''. - self - shouldnt: [SAXHandler parse: xml] - raise: XMLValidationException. - self - should: [SAXHandler parse: xmlWithDuplicateID] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: xmlWithDuplicateID) - isValidating: false; - parseDocument] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testAttributeXMLReserved [ - | xml document element | - - xml := ''. - document := XMLDOMParser parse: xml usingNamespaces: true. - element := document root. - self - assert: element attributes size = 4; - assert: (element attributeAt: 'xml') = 'one'; - assert: (element attributeAt: 'xmll') = 'two'; - assert: (element attributeAt: 'xml:') = 'three'; - assert: (element attributeAt: 'xmlnss') = 'four'. -] - -{ #category : #tests } -XMLParserTest >> testAttributeXMLReservedNamespaces [ - | xml xmlWithDuplicateID document element | - - xml := - ''. - document := XMLDOMParser parse: xml. - element := document root. - self - assert: element namespaceScope mappedPrefixes size = 2; - assert: element namespaceURI = 'defaultNS'; - assert: (element declaresPrefix: '' uri: 'defaultNS'); - assert: (element declaresPrefix: 'test' uri: 'testNS'); - assert: element attributes size = 2; - assert: (element attributeAt: 'xml:id') = 'test'; - assert: (element attributeAt: 'xname') = 'xvalue'. - - document := - XMLDOMParser - parse: xml - usingNamespaces: false. - element := document root. - self - deny: element hasNamespaces; - assert: element attributes size = 4; - assert: (element attributeAt: 'xml:id') = 'test'; - assert: (element attributeAt: 'xmlns') = 'defaultNS'; - assert: (element attributeAt: 'xmlns:test') = 'testNS'; - assert: (element attributeAt: 'xname') = 'xvalue'. - - "test that reserved attributes are still processed when namespaces - are present by triggering an xml:id duplicate validation exception" - xmlWithDuplicateID := '', xml, ''. - self - should: [SAXHandler parse: xmlWithDuplicateID] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testAttributeXMLSpaceValidation [ - "xml:space must be declared an enumeration type with only 'default' and - 'preserve' as allowed values" - | xmlTemplate xml | - - xmlTemplate := ' - - - ]> - '. - #('CDATA' - 'ID' - 'IDREF' - 'IDREFS' - 'ENTITY' - 'ENTITIES' - '(default|preserve|other)' - '(default|preserve|default)' - 'NOTATION (default|preserve)') - do: [:each | - xml := xmlTemplate format: (Array with: each). - self - should: [SAXHandler parse: xml] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: xml) - isValidating: false; - parseDocument] - raise: XMLValidationException]. - - #('(default|preserve)' '(preserve|default)' '(default)' '(preserve)') - do: [:each | - xml := xmlTemplate format: (Array with: each). - self - shouldnt: [SAXHandler parse: xml] - raise: XMLValidationException]. -] - -{ #category : #tests } -XMLParserTest >> testCDataBadChar [ - self nonChars do: [:each | - self - should: [SAXHandler parse: ''] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testCDataOutsideElement [ - #(' ]>' - '' - ' ' - '' - ' ') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testCDataSectionUnterminated [ - #('' - '' - '' - '' - '') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testCharacterReferenceUnexpected [ - #('' - ' ' - ' ') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLWellFormednessException. - self - should: [ - (SAXHandler on: each) - replacesContentEntityReferences: false; - parseDocument] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testCharacterReferenceUnterminated [ - #('&#' - '&#' - '&#x' - '&#x' - '"' - '"' - '"' - '"' - '&#;' - '&#;' - '&#x;' - '&#x;') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLWellFormednessException. - self - should: [ - (SAXHandler on: each) - replacesContentEntityReferences: false; - parseDocument] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testComment [ - self - shouldnt: [SAXHandler parse: ''] - raise: XMLWellFormednessException. - "can't contain --" - self - should: [SAXHandler parse: ''] - raise: XMLWellFormednessException. -] - -{ #category : #tests } -XMLParserTest >> testCommentBadChar [ - self nonChars do: [:each | - self - should: [SAXHandler parse: ''] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testCommentUnterminated [ - #(' ]]>' - ' ]]>' - ' ]]>' - ' ]]>' - ) do: [:each | - self - should: [SAXHandler parse:''] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testConditionalSectionInInternalSubsetExternallyDefined [ - | conditionalSections | - - conditionalSections := ' - ]]> - ]]>'. - self - shouldnt: [ - "the rule against internal subset include/ignore sections - shouldn't apply to external entities included in the subset" - (SAXHandler on: ' - - %extern; - - ]> - test') - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.ent' -> conditionalSections)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLWellFormednessException. - self - should: [| entityReplacementMixedSections | - "the rule against internal subset include/ignore sections - should apply to internal entities included in the subset - if they're internal even to an external entity" - entityReplacementMixedSections := - ''. - (SAXHandler on: ' - - %extern; - %extern2; - - ]> - test') - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.ent' -> entityReplacementMixedSections)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLWellFormednessException. -] - -{ #category : #tests } -XMLParserTest >> testConditionalSectionLabelReplacementIgnore [ - | xml dtd | - - xml := ''. - - #(' ]]>' - ' ]]>') - do: [:each | - self - should: [ - dtd := each format: (Array with: 'INCLUDE'). - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> dtd)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLWellFormednessException. - self - shouldnt: [ - dtd := each format: (Array with: 'IGNORE'). - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> dtd)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLWellFormednessException]. -] - -{ #category : #tests } -XMLParserTest >> testConditionalSectionLabelReplacementInclude [ - | xml dtd | - - xml := ''. - #(' - "> - ]]> %comment;' - ' - "> - ]]> %comment;') - do: [:each | - self - shouldnt: [ - dtd := each format: (Array with: 'INCLUDE'). - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> dtd)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - self - should: [ - dtd := each format: (Array with: 'IGNORE'). - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> dtd)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException]. -] - -{ #category : #tests } -XMLParserTest >> testConditionalSectionMixedIncludeIgnore [ - | xml dtd | - - xml := ''. - dtd := ' - - -->"> - - -->"> - %commentTwo; - ]]> - %comment; - %commentTwo; - ]]> - %comment; - %commentTwo;'. - self - shouldnt: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> dtd)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLWellFormednessException. -] - -{ #category : #tests } -XMLParserTest >> testConditionalSectionNestedIgnore [ - | xml dtdTemplate dtd | - - xml := ''. - dtdTemplate := ' - - "> - %comment; - ]]> - %comment; - ]]>'. - self - shouldnt: [ - dtd := dtdTemplate format: (Array with: ']]'). - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> dtd)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLWellFormednessException. - self - should: [ - dtd := dtdTemplate format: (Array with: ']]>'). - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> dtd)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLWellFormednessException. -] - -{ #category : #tests } -XMLParserTest >> testConditionalSectionNestedInclude [ - | xml dtd | - - xml := ''. - dtd := ' - --> - -->"> - %comment; - ]]> - %comment; - ]]> - %comment;'. - self - shouldnt: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> dtd)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLWellFormednessException. -] - -{ #category : #tests } -XMLParserTest >> testConditionalSectionUnterminatedIgnore [ - | xml | - - xml := ''. - #('' - '') - do: [:each | - self - should: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> each)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testConditionalSectionUnterminatedInclude [ - | xml | - - xml := ''. - #('' - '') - do: [:each | - self - should: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> each)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testContentlessDocument [ - #('' - ' ' - '' - ' ' - ' ]>' - ' ' - ' ' - '' - '' - '') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLWellFormednessException. - self - shouldnt: [SAXHandler parse: each, ''] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testContentlessSubset [ - #('' - '' - '' - '' - '' - '') - do: [:each | - self - shouldnt: [ - ((SAXHandler on: '') parser driver - externalSubsetParserOn: each - documentURI: 'extern.dtd') parseDocument] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testDoctypeDeclarationBadPublicIDChar [ - | validChars | - - validChars := - '!#$%''()*+,-./0123456789:;=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz', - (Character xmlSeparators copyWithout: Character tab). - 0 to: 255 do: [:each | | char charString | - char := each asCharacter. - (validChars includes: char) - ifFalse: [ - charString := char asString. - self - should: [ - SAXHandler parse: - ''] - raise: XMLWellFormednessException]]. - self - shouldnt: [ - SAXHandler parse: - ''] - raise: XMLWellFormednessException. -] - -{ #category : #tests } -XMLParserTest >> testDoctypeDeclarationInContent [ - self - should: [SAXHandler parse: ''] - raise: XMLWellFormednessException. - self - shouldnt: [SAXHandler parse: ''] - raise: XMLWellFormednessException. -] - -{ #category : #tests } -XMLParserTest >> testDoctypeDeclarationRedundance [ - #('' - '' - '' - ']>' - '') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLWellFormednessException]. -] - -{ #category : #tests } -XMLParserTest >> testDoctypeDeclarationRoot [ - | xmlWithInvalidRoot xmlWithValidRoot | - - xmlWithInvalidRoot := ''. - xmlWithValidRoot := ''. - self - should: [SAXHandler parse: xmlWithInvalidRoot] - raise: XMLValidationException. - self - shouldnt: [ - SAXHandler - parse: xmlWithInvalidRoot - usingNamespaces: false - validation: false] - raise: XMLValidationException. - self - shouldnt: [SAXHandler parse: xmlWithValidRoot] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testDoctypeDeclarationUnterminated [ - #('' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - ''] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testDoctypeDeclarationWhitespace [ - "whitespace is mandatory after the 'DOCTYPE', before and within any external id, - but is optional before the '[' and after the ']' of the interal subset" - #('' - '' - '' - '' - '' - '') - do: [:each | - self - should: [SAXHandler parse: each, ''] - raise: XMLWellFormednessException]. - - #('' - '' - '' - '' - '' - '' - '') - do: [:each | - self - shouldnt: [SAXHandler parse: each, ''] - raise: XMLWellFormednessException]. -] - -{ #category : #tests } -XMLParserTest >> testElementAnyDeclaration [ - self - shouldnt: [ - SAXHandler parse: - ' - ]> - onethree'] - raise: XMLValidationException. - self - shouldnt: [ - SAXHandler parse: - ' - ]> - '] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testElementBadName [ - self badNames do: [:each | - self - should: [SAXHandler parse: '<', each, '/>'] - raise: XMLWellFormednessException]. -] - -{ #category : #tests } -XMLParserTest >> testElementContentModelBadBinaryOperator [ - #(']>' - ']>' - ']>' - ']>' - ']>' - ']>' - ']>' - ']>' - ']>' - ']>') - do: [:each | - self - should: [ - (SAXHandler on: each, '') - isValidating: false; - parseDocument] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testElementContentModelBadParenthesis [ - #(']>' - ']>' - ']>' - ']>' - ']>') - do: [:each | - self - should: [ - (SAXHandler on: each, '') - isValidating: false; - parseDocument] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testElementContentModelBadUnaryOperator [ - #(']>' - ']>' - ']>' - ']>' - ']>' - ']>' - ']>' - ']>' - ']>' - ']>' - ']>' - ']>') - do: [:each | - self - should: [ - (SAXHandler on: each, '') - isValidating: false; - parseDocument] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testElementContentModelBranching [ - | dtd | - - dtd := ']>'. - - #('' - '' - '' - '' - '' - '') - do: [:each | - self - shouldnt: [SAXHandler parse: dtd, each] - raise: XMLValidationException]. - - #('' - '' - '' - '') - do: [:each | - self - should: [SAXHandler parse: dtd, each] - raise: XMLValidationException]. -] - -{ #category : #tests } -XMLParserTest >> testElementContentModelCycles [ - | dtd | - - "this content model produces an NFA with cycles, to ensure - they're handled correctly" - dtd := ']>'. - - #('' - '' - '' - '' - '' - '' - '') - do: [:each | - self - shouldnt: [SAXHandler parse: dtd, each] - raise: XMLValidationException]. - - #('' - '' - '') - do: [:each | - self - should: [SAXHandler parse: dtd, each] - raise: XMLValidationException]. -] - -{ #category : #tests } -XMLParserTest >> testElementContentModelManyBranches [ - | dtd names | - - names := (1 to: 50) collect: [:each | 'element', each printString]. - dtd := String streamContents: [:stream | - stream - nextPutAll: ']>']. - - names do: [:each | - self - shouldnt: [SAXHandler parse: dtd, '<', each, '/>'] - raise: XMLValidationException]. - self - should: [ - SAXHandler parse: - dtd, ''] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testElementContentModelNonDeterministic [ - | template | - - template := - ' - - - - ]>{2}'. - - #(#('((b,c)|(b,d))' '(b,(c|d))' '') - #('(b?,b*)' '(b,b*)' '') - #('(b+,b?)' '(b,b+)' '') - ) do: [:each | | nonDeterministic deterministic source | - nonDeterministic := each first. - deterministic := each second. - source := each third. - self - should: [ - SAXHandler parse: - (template format: (Array with: nonDeterministic with: source))] - raise: XMLValidationException. - self - shouldnt: [ - SAXHandler parse: - (template format: (Array with: deterministic with: source))] - raise: XMLValidationException]. -] - -{ #category : #tests } -XMLParserTest >> testElementContentModelOptional [ - | dtd | - - dtd := ']>'. - - #('' - '' - '' - '' - '') - do: [:each | - self - shouldnt: [SAXHandler parse: dtd, each] - raise: XMLValidationException]. - - #('' - '' - '') - do: [:each | - self - should: [SAXHandler parse: dtd, each] - raise: XMLValidationException]. -] - -{ #category : #tests } -XMLParserTest >> testElementContentModelOptionalBranching [ - | dtd | - - dtd := ']>'. - - self - shouldnt: [ - SAXHandler - parse: dtd, ''; - parse: dtd, ''; - parse: dtd, ''; - parse: dtd, ''] - raise: XMLValidationException. - - self - should: [SAXHandler parse: dtd, ''] - raise: XMLValidationException. - self - should: [SAXHandler parse: dtd, ''] - raise: XMLValidationException. - self - should: [SAXHandler parse: dtd, ''] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testElementContentModelOptionalEmpty [ - | dtd | - - dtd := ']>'. - - self - shouldnt: [ - SAXHandler - parse: dtd, ''; - parse: dtd, ''; - parse: dtd, ''] - raise: XMLValidationException. - - self - should: [SAXHandler parse: dtd, ''] - raise: XMLValidationException. - self - should: [SAXHandler parse: dtd, ''] - raise: XMLValidationException. - self - should: [SAXHandler parse: dtd, ''] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testElementContentModelPlus [ - | dtd | - - dtd := ']>'. - - self - shouldnt: [ - SAXHandler - parse: dtd, ''; - parse: dtd, ''; - parse: dtd, ''; - parse: dtd, ''] - raise: XMLValidationException. - - self - should: [SAXHandler parse: dtd, ''] - raise: XMLValidationException. - self - should: [SAXHandler parse: dtd, ''] - raise: XMLValidationException. - self - should: [SAXHandler parse: dtd, ''] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testElementContentModelStar [ - | dtd | - - dtd := ']>'. - - self - shouldnt: [ - SAXHandler - parse: dtd, ''; - parse: dtd, ''; - parse: dtd, ''; - parse: dtd, ''; - parse: dtd, ''] - raise: XMLValidationException. - - self - should: [SAXHandler parse: dtd, ''] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testElementContentModelStarEmpty [ - | dtd | - - dtd := ']>'. - - self - shouldnt: [ - SAXHandler - parse: dtd, ''; - parse: dtd, ''; - parse: dtd, ''; - parse: dtd, ''] - raise: XMLValidationException. - - self - should: [SAXHandler parse: dtd, ''] - raise: XMLValidationException. - self - should: [SAXHandler parse: dtd, ''] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testElementContentWhitespace [ - | xmlTemplate | - - "LibXML2 and Xerces allow general entity refs with empty and whitespace - replacements and char refs to whitespace chars inbetween elements in - elements with DTD-valited 'element content'. This tests for that behavior." - xmlTemplate := ' - - - - - - - ]> - {1}{1}{1}'. - (Array - with: (String withAll: Character xmlSeparators) - with: '∅' - with: '&whitespace;' - with: '') - do: [:each | - self - shouldnt: [SAXHandler parse: (xmlTemplate format: (Array with: each))] - raise: XMLValidationException]. - Character xmlSeparators do: [:each | - self - shouldnt: [ - SAXHandler parse: - (xmlTemplate format: - (Array with: '&#', each asciiValue asString, ';'))] - raise: XMLValidationException]. - - (Array - with: 'one' - with: '2' - with: '&non-empty;' - with: '"') - do: [:each | | xml | - xml := xmlTemplate format: (Array with: each). - self - should: [SAXHandler parse: xml] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: xml) - isValidating: false; - parseDocument] - raise: XMLValidationException]. -] - -{ #category : #tests } -XMLParserTest >> testElementDeclarationMixedContent [ - | dtd | - - dtd := ' - - - - - ]>'. - self - shouldnt: [ - SAXHandler parse: - dtd, 'text'] - raise: XMLValidationException. - self - shouldnt: [ - SAXHandler parse: - dtd, 'text'] - raise: XMLValidationException. - self - should: [SAXHandler parse: dtd, ''] - raise: XMLValidationException. - self - should: [SAXHandler parse: dtd, ''] - raise: XMLValidationException. - self - should: [ - SAXHandler parse: "missing *" - ']>'] - raise: XMLWellFormednessException. - '+*?,' do: [:each | - self - should: [ - SAXHandler parse: - ']>'] - raise: XMLWellFormednessException]. -] - -{ #category : #tests } -XMLParserTest >> testElementDeclarationMixedContentRedundance [ - | dtd | - - dtd := ' - - - ]>'. - self - should: [SAXHandler parse: dtd, ''] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testElementDeclarationPrefixed [ - | dtd | - - dtd := ' - - ]>'. - self - shouldnt: [SAXHandler parse: dtd, ''] - raise: XMLValidationException. - self - should: [SAXHandler parse: dtd, ''] - raise: XMLValidationException. - self - should: [SAXHandler parse: dtd, ''] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testElementDeclarationRedundance [ - #(']>' - ']>') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLValidationException] -] - -{ #category : #tests } -XMLParserTest >> testElementDeclarationWhitespace [ - self - should: [ - SAXHandler parse: - ']>'] - raise: XMLWellFormednessException. - self - should: [ - SAXHandler parse: - ']>'] - raise: XMLWellFormednessException. - self - shouldnt: [ - SAXHandler parse: - ']>'] - raise: XMLWellFormednessException. -] - -{ #category : #tests } -XMLParserTest >> testElementEmptyDeclaration [ - | dtd | - - dtd := ']>'. - - #('' - '') - do: [:each | - self - shouldnt: [SAXHandler parse: dtd, each] - raise: XMLValidationException]. - - "the spec says EMPTY elements can't have any content, even whitespace, - comments or PIs" - #('' - 'non-empty' - ' ' - ' ' - ' -' - ' ' "Character space asciiValue" - ' ' "Character tab asciiValue" - ' ' "Character lf asciiValue" - ' ' "Character cr asciiValue" - '' - '' - '') - do: [:each | - self - should: [SAXHandler parse: dtd, each] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: dtd, each) - isValidating: false; - parseDocument] - raise: XMLValidationException]. -] - -{ #category : #tests } -XMLParserTest >> testElementNesting [ - #('' - '' - '' - '' - '' - '' - '' - '' - '' - '') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testElementUnmatchedEndTag [ - #('' - '' - '' - '' - '' - '') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testElementUnterminatedEndTag [ - #('<' - '<' - '' - '' - '' - '' - '') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testElementUnterminatedStartTag [ - #('<' - '<>' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testElementWhitespace [ - self - should: [SAXHandler parse: ''] - raise: XMLWellFormednessException. - self - should: [SAXHandler parse: ''] - raise: XMLWellFormednessException. - self - shouldnt: [SAXHandler parse: ''] - raise: XMLWellFormednessException. - self - shouldnt: [ - SAXHandler parse: ' - '] - raise: XMLWellFormednessException. -] - -{ #category : #tests } -XMLParserTest >> testElementsUndeclared [ - self - shouldnt: [ - "entity and notation declarations aren't enough to trigger - DTD validation; at least one element or attlist declaration - is needed" - SAXHandler - parse: ' - - - ]> - ' - usingNamespaces:true - validation: true] - raise:XMLValidationException. - self - should: [ - SAXHandler parse: - ']>'] - raise: XMLValidationException. - self - should: [ - SAXHandler parse: - ']>'] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testEntityDeclarationBadName [ - self badNames do: [:each | - self - should: [ - SAXHandler parse: - ' - ]>'] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testEntityDeclarationUnterminated [ - #('' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '') - do: [:each | - self - should: [ - SAXHandler parse: - '', - each] - raise: XMLWellFormednessException. - self - should: [ - SAXHandler parse: - '', - each, - ']>'] - raise: XMLWellFormednessException]. -] - -{ #category : #tests } -XMLParserTest >> testEntityDeclarationValueBadChar [ - self nonChars do: [:each | - self - should: [ - SAXHandler parse: - ' - ]>'] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testEntityDeclarationWhitespace [ - #('' - '' - '' - '' - '' - '' - '' - '' - '') - do: [:each | - self - should: [SAXHandler parse: ''] - raise: XMLWellFormednessException]. - - #('' - '' - '' - '') - do: [:each | - self - shouldnt: [SAXHandler parse: ''] - raise: XMLWellFormednessException]. -] - -{ #category : #tests } -XMLParserTest >> testEntityExternalResolutionGeneral [ - | xml entities document | - - xml := ' - - - - ]> - &extern;&extern2;&extern3;'. - entities := - Array - with: - '/base/extern.ent' -> - 'one' - with: - '/base/extern2.ent' -> - 'two' - with: '/base/extern3.ent' -> 'three'. - 1 to: entities size - 1 do: [:i | - self - should: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (entities copyFrom: 1 to: i)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLParserException]. - self - should: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: entities); - resolvesExternalEntities: false; - parseDocument] - raise: XMLParserException. - self - shouldnt: [ - document := - (XMLDOMParser on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: entities); - resolvesExternalEntities: true; - parseDocument] - raise: XMLParserException. - self assert: document root contentString = 'onetwothree'. -] - -{ #category : #tests } -XMLParserTest >> testEntityExternalResolutionParameter [ - | xml entities document | - - xml := ' - - %extern; - %extern2; - %extern3; - ]> - &extern4;'. - entities := - Array - with: - '/base/extern.ent' -> - ' - ' - with: - '/base/sub/extern2.ent' -> - ' - ' - with: - '/base/sub/extern3.ent' -> - ' - ' - with: - '/base/sub/extern5.ent' -> - 'test'. - 1 to: entities size - 1 do: [:i | - self - should: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (entities copyFrom: 1 to: i)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLParserException]. - self - should: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: entities); - resolvesExternalEntities: false; - parseDocument] - raise: XMLParserException. - self - shouldnt: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: entities); - resolvesExternalEntities: false; - isValidating: false; - parseDocument] - raise: XMLParserException. - self - shouldnt: [ - document := - (XMLDOMParser on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: entities); - resolvesExternalEntities: true; - parseDocument] - raise: XMLParserException. - self assert: document root contentString = 'test'. -] - -{ #category : #tests } -XMLParserTest >> testEntityExternalResolutionParameterInDeclaration [ - "test the handling of external parameter entity references in declarations" - | invalidXML validXML resolver | - - invalidXML := ' - - '. - validXML := ' - - '. - (resolver := DTDStaticExternalEntityResolver new) - externalEntityAtURI: 'extern.dtd' - put: - ' - - - - - - '. - resolver - externalEntityAtURI: 'two.ent' - put: - ' - two'. - resolver - externalEntityAtURI: 'three.ent' - put: 'three'. - resolver - externalEntityAtURI: 'four.ent' - put: 'four'. - self - should: [ - (SAXHandler on: invalidXML) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: validXML) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testEntityExternalSubsetResolution [ - | xml entities | - - xml := '&extern4;'. - entities := - Array - with: - '/base/extern.ent' -> - ' - %extern2; - %extern3;' - with: '/base/sub/extern2.ent' -> '' - with: '/base/sub/extern3.ent' -> ''. - 1 to: entities size - 1 do: [:i | - self - should: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (entities copyFrom: 1 to: i)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLParserException]. - self - should: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: entities); - resolvesExternalEntities: false; - parseDocument] - raise: XMLParserException. - self - shouldnt: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: entities); - resolvesExternalEntities: true; - parseDocument] - raise: XMLParserException. -] - -{ #category : #tests } -XMLParserTest >> testEntityLiteralContextNesting [ - | xml inner outer document | - - xml := ' - "> - %inner; - - ]> - &outer;&inner;'. - inner := ' '' inner '' '. - outer := ' '' " ', inner, ' '' " '. - - self - shouldnt: [document := XMLDOMParser parse: xml] - raise: XMLWellFormednessException. - self - assert: (document root attributeAt: 'one') = outer; - assert: (document root attributeAt: 'two') = inner; - assert: (document root attributeAt: 'three') = outer; - assert: (document root attributeAt: 'four') = inner; - assert: (document root contentString) = (outer, inner). -] - -{ #category : #tests } -XMLParserTest >> testEntityNestingAttributeDeclaration [ - | xml | - - xml := ''. - - "these are wellformedness exceptions because the replacement is surrounded with - spaces which interrupt the ' - - %partial;!ATTLIST test name CDATA #IMPLIED>' - ' - - %partial;ATTLIST test name CDATA #IMPLIED') - do: [:each | - self - should: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> each)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLWellFormednessException]. - - "these are validity exceptions" - #(' - - %partial; test name CDATA #IMPLIED>' - ' - - %partial; name CDATA #IMPLIED>' - ' - - %partial; CDATA #IMPLIED>' - ' - - %partial; #IMPLIED>' - ' - - %partial;>' - ' - "> - - "> - - "> - - "> - - "> - each)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> each)); - isValidating: false; - resolvesExternalEntities: true; - parseDocument] - raise: XMLException]. - self - shouldnt: [| dtd | - dtd := ' - - "> - %total;'. - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> dtd)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLException. -] - -{ #category : #tests } -XMLParserTest >> testEntityNestingCharacterReference [ - "even though general entity refs are bypassed in entity values, they are still - checked for well formedness (they must be complete), so the only way to have an - entity value containing part of a general ref is to use a char escape for the &" - #(' - ]>&partial;#64;' - ' - ]>&partial;64;' - ' - ]>&partial;;' - ' - ]>&&partial;' - ' - ]>&#&partial;' - ' - ]>@&partial;' - ' - ]>' - ' - ]>' - ' - ]>' - ' - ]>' - ' - ]>' - ' - ]>') - do: [:each | - self - should: [ - (SAXHandler on: each) - isValidating: false; - parseDocument] - raise: XMLWellFormednessException]. - self - shouldnt: [ - (SAXHandler on: - ' - ]>&total;') - isValidating: false; - parseDocument] - raise: XMLWellFormednessException. -] - -{ #category : #tests } -XMLParserTest >> testEntityNestingComment [ - #(' - ]>&partial;!--ignored-->' - ' - ]>&partial;--ignored-->' - ' - ]>&partial;-ignored-->' - ' - ]>&partial;ignored-->' - ' - ]>&partial;-->' - ' - ]>&partial;->' - ' - ]>&partial;>') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLWellFormednessException]. - - self - shouldnt: [ - SAXHandler parse: - '"> - ]>&total;'] - raise: XMLWellFormednessException. -] - -{ #category : #tests } -XMLParserTest >> testEntityNestingElement [ - self - shouldnt: [ - SAXHandler parse: - '"> - &total1;"> - &total1;&total2;"> - ]>&total1;&total2;&total3;'] - raise: XMLWellFormednessException. -] - -{ #category : #tests } -XMLParserTest >> testEntityNestingElementDeclaration [ - | xml | - - xml := ''. - - "these are wellformedness exceptions because the replacement is surrounded - with spaces which interrupt the '%partial;!ELEMENT test EMPTY>' - '%partial;ELEMENT test EMPTY') - do: [:each | - self - should: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> each)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLWellFormednessException]. - - "these are validity exceptions" - #('%partial;test EMPTY>' - '%partial;EMPTY>' - '%partial;>' - '">">">' - '' - '' - '' - '' - '' - '' - '' - '' - '') - do: [:each | - self - should: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> each)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> each)); - isValidating: false; - resolvesExternalEntities: true; - parseDocument] - raise: XMLException]. - - #(' - - - "> - %total;' - ' - - - "> - %total;') - do: [:each | - self - shouldnt: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> each)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLException]. -] - -{ #category : #tests } -XMLParserTest >> testEntityNestingElementPartialEndTag [ - #(' - ]>&partial;/a>' - ' - ]>&partial;a>' - ' - ]>&partial;>' - '"> - ]>&partial;') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLWellFormednessException]. -] - -{ #category : #tests } -XMLParserTest >> testEntityNestingElementPartialSelfClosingTag [ - #(' - ]>&partial;a name=''value''/>' - ' - ]>&partial;name=''value''/>' - ' - ]>&partial;=''value''/>' - ' - ]>&partial;''value''/>' - ' - ]>&partial;value''/>' - ' - ]>&partial;''/>' - ' - ]>&partial;/>' - ' - ]>&partial;>') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLWellFormednessException]. -] - -{ #category : #tests } -XMLParserTest >> testEntityNestingElementPartialStartTag [ - #(' - ]>&partial;a name=''value''>' - ' - ]>&partial;name=''value''>' - ' - ]>&partial;=''value''>' - ' - ]>&partial;''value''>' - ' - ]>&partial;value''>' - ' - ]>&partial;''>' - ' - ]>&partial;>' - '"> - ]>&partial;') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLWellFormednessException]. -] - -{ #category : #tests } -XMLParserTest >> testEntityNestingGeneralEntityReference [ - "even though general entity refs are bypassed in entity values, they are still - checked for well formedness (they must be complete), so the only way to declare - an entity with a replacement containing a '&' is to escape it as char ref" - #(' - - ]>&partial;name;' - ' - - ]>&partial;;' - ' - - ]>&&partial;' - ' - - ]>&name&partial;' - ' - - ]>' - ' - - ]>' - ' - - ]>' - ' - - ]>') - do: [:each | - self - should: [ - (SAXHandler on: each) - isValidating: false; - parseDocument] - raise: XMLWellFormednessException]. - self - shouldnt: [ - (SAXHandler on: - ' - - ]>&total;') - isValidating: false; - parseDocument] - raise: XMLWellFormednessException. -] - -{ #category : #tests } -XMLParserTest >> testEntityNestingIgnoreSection [ - "If any of the '' of a conditional section is contained - in the replacement text for a parameter-entity reference, all of them - MUST be contained in the same replacement text." - | xml | - - xml := ''. - - "these are wellformedness exceptions because the replacement is surrounded - with spaces which interrupt the '' sequences" - #('%partial;![IGNORE[]]>' - '%partial;[IGNORE[]]>' - ']">%partial;]>' - ']]">%partial;>') - do: [:each | - self - should: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> each)); - isValidating: false; - resolvesExternalEntities: true; - parseDocument] - raise: XMLWellFormednessException]. - - "these are validity exceptions" - #('%partial;IGNORE[]]>' - '%partial;[]]>' - '%partial;]]>' - '">%partial;]]>' - ']]>' - '">' - ']]>"> each)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> each)); - isValidating: false; - resolvesExternalEntities: true; - parseDocument] - raise: XMLException]. - self - shouldnt: [| dtd | - dtd := ' - - ]]]]]>"> - %total;'. - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> dtd)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLException. -] - -{ #category : #tests } -XMLParserTest >> testEntityNestingIncludeSection [ - "If any of the '' of a conditional section is contained - in the replacement text for a parameter-entity reference, all of them - MUST be contained in the same replacement text." - | xml | - - xml := ''. - - "these are wellformedness exceptions because the replacement is surrounded - with spaces which interrupt the '' sequences" - #('%partial;![INCLUDE[]]>' - '%partial;[INCLUDE[]]>' - ']">%partial;]>' - ']]">%partial;>' - '%partial;]>' - '%partial;>') - do: [:each | - self - should: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> each)); - isValidating: false; - resolvesExternalEntities: true; - parseDocument] - raise: XMLWellFormednessException]. - - "these are validity exceptions" - #('%partial;INCLUDE[]]>' - '%partial;[]]>' - '%partial;]]>' - '">%partial;]]>' - ']]>' - '">' - ']]>">">%partial;') - do: [:each | - self - should: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> each)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> each)); - isValidating: false; - resolvesExternalEntities: true; - parseDocument] - raise: XMLException]. - self - shouldnt: [| dtd | - dtd := ' - - "> - "> - %total;'. - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> dtd)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLException. -] - -{ #category : #tests } -XMLParserTest >> testEntityNestingProcessingInstruction [ - #(' - ]>&partial;?name value?>' - ' - ]>&partial;name value?>' - ' - ]>&partial; value?>' - ' - ]>&partial;?>' - ' - ]>&partial;>') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLWellFormednessException]. - - self - shouldnt: [ - SAXHandler parse: - '"> - ]>&total;'] - raise: XMLWellFormednessException. -] - -{ #category : #tests } -XMLParserTest >> testEntityNestingSubsetComment [ - | xml | - - xml := ''. - - "these are wellformedness exceptions because the replacement is surrounded - with spaces which interrupt the '' sequences" - #('%partial;!--ignore-->' - '%partial;--ignore-->' - '%partial;-ignore-->' - '%partial;->' - '%partial;>') - do: [:each | - self - should: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> each)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLWellFormednessException]. - - #('%partial;ignore-->' - '%partial;-->') - do: [:each | - self - should: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> each)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> each)); - isValidating: false; - resolvesExternalEntities: true; - parseDocument] - raise: XMLException]. - self - shouldnt: [| dtd | - dtd := ' - "> - %total;'. - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> dtd)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLException. -] - -{ #category : #tests } -XMLParserTest >> testEntityNestingSubsetProcessingInstruction [ - | xml | - - xml := ''. - - "these are wellformedness exceptions because the replacement is surrounded - with spaces which interrupt the '' sequences" - #('%partial;?name value?>' - '%partial;name value?>' - '%partial;>') - do: [:each | - self - should: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> each)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLWellFormednessException]. - - #('%partial; value?>' - '%partial;?>') - do: [:each | - self - should: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> each)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> each)); - isValidating: false; - resolvesExternalEntities: true; - parseDocument] - raise: XMLException]. - self - shouldnt: [| dtd | - dtd := ' - "> - %total;'. - (SAXHandler on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> dtd)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLException. -] - -{ #category : #tests } -XMLParserTest >> testEntityReferenceInternalDeclaration [ - #(' - - - ]>' - ' - - ]>' - ' - - ]>') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLWellFormednessException]. - self - shouldnt: [ - SAXHandler parse: - '"> - %element; - ]>'] - raise: XMLWellFormednessException. -] - -{ #category : #tests } -XMLParserTest >> testEntityReferenceInternalDeclarationExternallyDefined [ - | declarations | - - self - shouldnt: [ - "the rule against param entity refs in internal declarations - shouldn't apply to declarations in external entities included - in the subset" - declarations := ' - - - '. - (SAXHandler on: ' - - %extern; - - ]> - test') - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.ent' -> declarations)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLWellFormednessException. - self - should: [ - "the rule against param entity refs in internal declarations - should apply to declarations in internal entities included - in the subset even if they're internal to an external entity" - declarations := - ' - - - ">'. - (SAXHandler on: ' - - %extern; - %extern2; - - ]> - test') - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.ent' -> declarations)); - resolvesExternalEntities: true; - parseDocument] - raise: XMLWellFormednessException. -] - -{ #category : #tests } -XMLParserTest >> testEntityReferencePredefined [ - | document references replacements | - - references := String new writeStream. - replacements := String new writeStream. - XMLWellFormedParserTokenizer predefinedEntities keysAndValuesDo: [:name :char | - references - nextPut: $&; - nextPutAll: name; - nextPut: $;. - replacements nextPut: char]. - - document := - XMLDOMParser parse: - (']> - - {1} - &nonRecursive; - ' format: (Array with: references contents)). - self - assert: (document root attributeAt: 'name') = replacements contents; - assert: (document root contentStringAt: 'one') = replacements contents; - assert: (document root contentStringAt: 'two') = '&nonRecursive;'. -] - -{ #category : #tests } -XMLParserTest >> testEntityReferenceUndeclared [ - "it's a WFC if there's no DTD or an internal-only DTD that - contains no param entity refs or if it's standalone" - #('&undeclared;' - '' - ' - ]> - &undeclared;' - ' - - ]> - ' - ' - - &undeclared;' - ' - - ') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLWellFormednessException]. - - "otherwise it's a validity constraint only" - #(' - &undeclared;' - ' - ' - ' - &undeclared;' - ' - ') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: each) - isValidating: false; - parseDocument] - raise: XMLWellFormednessException]. -] - -{ #category : #tests } -XMLParserTest >> testEntityReferenceUndeclaredInEntityValue [ - | resolver | - - (resolver := DTDStaticExternalEntityResolver new) - externalEntityAtURI: 'extern.dtd' - put: ''. - self - should: [ - (SAXHandler on: '') - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: '') - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - isValidating: false; - parseDocument] - raise: XMLWellFormednessException. - - "the spec only requires general entity refs in replacements to be - well-formed, not declared, unless it's referenced too" - self - shouldnt: [ - SAXHandler parse: - ' - ]>'] - raise: XMLWellFormednessException. - self - should: [ - SAXHandler parse: - ' - ]>&unreferenced;'] - raise: XMLWellFormednessException. -] - -{ #category : #tests } -XMLParserTest >> testEntityReferenceUndeclaredPreserved [ - | xml parser document | - - xml := ' - - %undeclaredOne; - ]> - <&undeclaredTwo;>'. - (parser := XMLDOMParser on: xml) - isValidating: false; - preservesUndeclaredEntityReferences: true. - document := parser parseDocument. - - self - assert: document doctypeDeclaration nodes size = 1; - assert: document doctypeDeclaration firstNode replacement = '&undeclaredOne;'; - assert: (document root attributeAt: 'name') = '"&undeclaredOne;"'; - assert: (document root contentString) = '<&undeclaredTwo;>'. -] - -{ #category : #tests } -XMLParserTest >> testEntityReferenceUnexpected [ - #('"> - &entity;]> - ' - '"> - ]> - &entity; - ' - '"> - ]> - - &entity;') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLWellFormednessException. - "should still raise errors even when replacement is disabled" - self - should: [ - (SAXHandler on: each) - replacesContentEntityReferences: false; - parseDocument] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testEntityReferenceUnreplaced [ - | beforeSubset subset afterSubset xml document | - - beforeSubset := ' "> - %first;'. - afterSubset := ']>&second;'. - xml := beforeSubset, subset, afterSubset. - self assert: (XMLDOMParser parse: xml) root contentString = 'replacement'. - - document := - (XMLDOMParser on: xml) - replacesContentEntityReferences: false; - parseDocument. - self assert: document root contentString = '&second;'. - self - should: [ - (SAXHandler on: (beforeSubset, '%first;]>')) - replacesContentEntityReferences: false; - parseDocument] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testEntityReferenceUnreplacedInContent [ - | xml document | - - xml := ' - ]> - <&declared;/>'. - document := - (XMLDOMParser on: xml) - replacesContentEntityReferences: false; - parseDocument. - self - assert: (document root attributeAt: 'two') = '"&declared;"'; - assert: document root contentString = '<&declared;/>'. -] - -{ #category : #tests } -XMLParserTest >> testEntityReferenceUnreplacedInContentUndeclared [ - | xml document | - - xml := ' - - ]> - <&undeclared;>'. - self - should: [ - (SAXHandler on: xml) - replacesContentEntityReferences: false; - parseDocument] - raise: XMLValidationException. - self - shouldnt: [ - document := - (XMLDOMParser on: xml) - replacesContentEntityReferences: false; - isValidating: false; - parseDocument] - raise: XMLValidationException. - self - assert: (document root attributeAt: 'two') = '"&undeclared;"'; - assert: document root contentString = '<&undeclared;>'. -] - -{ #category : #tests } -XMLParserTest >> testEntityReferenceUnterminated [ - #('"> - %]>' - '"> - %;]>' - '"> - %entity]>' - '&' - '&' - '&' - '&' - '&;' - '&;') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLWellFormednessException. - "should still raise errors even when replacement is disabled" - self - should: [ - (SAXHandler on: each) - replacesContentEntityReferences: false; - parseDocument] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testEntityReferenceUnterminatedInEntityValue [ - #(' - - ]>' - ' - - ]>') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLWellFormednessException]. - - self - shouldnt: [ - SAXHandler parse: - ' - - ]>'] - raise: XMLWellFormednessException. -] - -{ #category : #tests } -XMLParserTest >> testEntityReplacement [ - | document | - - document := XMLDOMParser parse: ' - "> - %name1Declaration; - - - - ]> - &name1; &name2; &name3; ', - '%name1Declaration;'. - self assert: - document root contentString = - ('replacement1 ', - 'replacement2 replacement1 ', - 'replacement3 replacement2 replacement1 ', - '%name1Declaration;'). - self assert: - (document root attributeAt: 'name') = - (('quoted "value"' copyWithFirst: $') copyWith: $'). -] - -{ #category : #tests } -XMLParserTest >> testEntityReplacementEmpty [ - | xml document | - - xml := ' - - %inner; - - ]> - &outer;&inner;'. - - self - shouldnt: [document := XMLDOMParser parse: xml] - raise: XMLWellFormednessException. - self - assert: (document root attributeAt: 'one') = ''; - assert: (document root attributeAt: 'two') = ''; - assert: (document root attributeAt: 'three') = ''; - assert: (document root attributeAt: 'four') = ''; - assert: document root contentString = ''. -] - -{ #category : #tests } -XMLParserTest >> testEntityReplacementSelfReferential [ - self - should: [ - SAXHandler parse: - ']>&first;'] - raise: XMLWellFormednessException. - self - should: [ - SAXHandler parse: - '%first;]>'] - raise: XMLWellFormednessException. - self - should: [ - SAXHandler parse: - ' - ]>&first;'] - raise: XMLWellFormednessException. - self - should: [ - SAXHandler parse: - ' - - %first;]>'] - raise: XMLWellFormednessException. - self - shouldnt: [ - SAXHandler parse: - ' - ">]>&first;'] - raise: XMLWellFormednessException. - self - shouldnt: [ - SAXHandler parse: - ' - "> - %first;]>'] - raise: XMLWellFormednessException. -] - -{ #category : #tests } -XMLParserTest >> testEntityReplacementStandard [ - "this test comes from the XML spec" - | dtd xml doc | - - dtd := ' - - - '. - xml := ' - - &book;'. - doc := - (XMLDOMParser on: xml) - externalEntityResolver: - (DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> dtd)); - resolvesExternalEntities: true; - parseDocument. - self assert: - doc root contentString = - ('La Peste: Albert Camus, ', 16rA9 asCharacter asString, ' 1947 ', - 16rC9 asCharacter asString, 'ditions Gallimard. All rights reserved'). -] - -{ #category : #tests } -XMLParserTest >> testEntityReplacementStandardLiteral [ - "this test comes from the XML spec" - | dtd xml resolver doc | - - dtd := ' - - '. - xml := ' - - '. - (resolver := DTDStaticExternalEntityResolver new) - externalEntityAtURI: 'extern.dtd' - put: dtd. - doc := - (XMLDOMParser on: xml) - externalEntityResolver: resolver; - resolvesExternalEntities: true; - parseDocument. - self assert: (doc root attributeAt: 'attribute') = 'He said "Yes"'. - - dtd := ''. - xml := ' - - '. - (resolver := DTDStaticExternalEntityResolver new) - externalEntityAtURI: 'extern.dtd' - put: dtd. - self - should: [ - (SAXHandler on: xml) - externalEntityResolver: resolver; - resolvesExternalEntities: true; - parseDocument] - raise: XMLWellFormednessException. -] - -{ #category : #tests } -XMLParserTest >> testEntityReplacementTerminatingInternalSubset [ - #('">%end;' - '%end;>') - do: [:each | - self - should: [SAXHandler parse: each, ''] - raise: XMLWellFormednessException]. - #('%end;]>' - '-->">%end;]>') - do: [:each | - self - shouldnt: [SAXHandler parse: each, ''] - raise: XMLWellFormednessException]. -] - -{ #category : #tests } -XMLParserTest >> testEntityURIInheritance [ - | xml parser driver | - - xml := '&second;'. - parser := - (SAXHandler - on: xml - documentURI: 'test.xml') parser. - (driver := parser driver) - doctypeDefinition parameterEntities - at: 'first' - put: - ((DTDExternalParameterParsedEntity name: 'first') - resolvedReplacement: - (DTDDecodedResolvedExternalParsedEntityReplacement contents: - '">'); - uri: 'test.ent'). - - self assert: driver baseURI = 'test.xml'. - - 3 timesRepeat: [parser parseToken]. - self assert: driver baseURI = 'test.ent'. - - 2 timesRepeat: [parser parseToken]. - self assert: driver baseURI = 'test.xml'. - - "internal entities (declared in the internal subset or in an external DTD) - can't change abase URI according to the xml:base spec" - 2 timesRepeat: [parser parseToken]. - self assert: driver baseURI = '/new/xml'. - - 3 timesRepeat: [parser parseToken]. - self - assert: driver baseURI = 'test.xml'; - assert: parser atEnd. -] - -{ #category : #tests } -XMLParserTest >> testIsInContent [ - | xml handler parser | - - xml := ' - - - ]> - - - '. - handler := SAXHandler on: xml. - parser := handler parser. - 9 timesRepeat: [ - parser parseToken. - self deny: handler isInContent]. - parser parseToken. - self assert: handler isInContent. -] - -{ #category : #tests } -XMLParserTest >> testLineEndingsDoNotMatter [ - | source docFromSourceWithCRs docFromSourceWithLFs docFromSourceWithCRLFs | - - source := '{1}one{1}two{1}'. - docFromSourceWithCRs := XMLDOMParser parse: (source format: (Array with: String cr)). - docFromSourceWithLFs := XMLDOMParser parse: (source format: (Array with: String lf)). - docFromSourceWithCRLFs := XMLDOMParser parse: (source format: (Array with: String crlf)). - self - assert: (docFromSourceWithCRs root contentString) = (docFromSourceWithLFs root contentString); - assert: (docFromSourceWithLFs root contentString) = (docFromSourceWithCRLFs root contentString). -] - -{ #category : #tests } -XMLParserTest >> testNamespaceAttributePrefixAliasing [ - | xmlns | - - xmlns := 'xmlns:prefix1="ns" xmlns:prefix2="ns"'. - self - shouldnt: [ - SAXHandler - parse: '' - usingNamespaces: true] - raise: XMLNamespaceException. - - (Array - with: '' - with: "ensure it checks inherited namespaces" - ' - - ' - with: "and default attributes" - ' - - - - ]> - - - ') - do: [:each | - self - should: [ - SAXHandler - parse: each - usingNamespaces: true] - raise: XMLNamespaceException. - self - shouldnt: [ - SAXHandler - parse: each - usingNamespaces: false] - raise: XMLNamespaceException]. -] - -{ #category : #tests } -XMLParserTest >> testNamespaceDeclaration [ - self - shouldnt: [SAXHandler parse: ''] - raise: XMLNamespaceException. - self - shouldnt: [SAXHandler parse: ''] - raise: XMLNamespaceException. - self - shouldnt: [SAXHandler parse: '' usingNamespaces: true] - raise: XMLNamespaceException. -] - -{ #category : #tests } -XMLParserTest >> testNamespaceDeclarationBadPrefix [ - self - should: [SAXHandler parse: ''] - raise: XMLNamespaceException. - self - should: [SAXHandler parse: ''] - raise: XMLNamespaceException. - self - should: [SAXHandler parse: ''] - raise: XMLNamespaceException. - self - should: [SAXHandler parse: '<:invalidname />'] - raise: XMLNamespaceException. - self - should: [SAXHandler parse: ''] - raise: XMLNamespaceException. - self - should: [SAXHandler parse: ''] - raise: XMLNamespaceException. - self - should: [SAXHandler parse: ''] - raise: XMLNamespaceException. -] - -{ #category : #tests } -XMLParserTest >> testNamespaceDeclarationBadURI [ - self - should: [SAXHandler parse: '' usingNamespaces: true] - raise: XMLNamespaceException. - - "Cannot change xmlns or xml prefixes" - self - should: [SAXHandler parse: '' usingNamespaces: true] - raise: XMLNamespaceException. - self - should: [SAXHandler parse: '' usingNamespaces: true] - raise: XMLNamespaceException. - - "Redundant xml prefix mapping is ok, but xmlns is not" - self - shouldnt: [ - SAXHandler - parse: '' - usingNamespaces: true] - raise: XMLNamespaceException. - self - should: [ - SAXHandler - parse: '' - usingNamespaces: true] - raise: XMLNamespaceException. -] - -{ #category : #tests } -XMLParserTest >> testNamespaceDeclarationRedundance [ - #('' - '' - '' - '') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testNamespaceParsing [ - self - shouldnt: [SAXHandler parse: self addressBookNamespacedXML] - raise: XMLException. - self - shouldnt: [ - SAXHandler - parse: self addressBookNamespacedXML - usingNamespaces: false] - raise: XMLException. - - self - shouldnt: [SAXHandler parse: self addressBookNamespacePrefixedXML] - raise: XMLException. - self - shouldnt: [ - SAXHandler - parse: self addressBookNamespacePrefixedXML - usingNamespaces: false] - raise: XMLException. -] - -{ #category : #tests } -XMLParserTest >> testNamespacePrefixInheritance [ - self - shouldnt: [ - SAXHandler - parse: - ' - - - - ' - usingNamespaces: true] - raise: XMLNamespaceException. - - #(' - - - ' - ' - - - - - ') - do: [:each | - self - should: [ - SAXHandler - parse: each - usingNamespaces: true] - raise: XMLNamespaceException. - self - shouldnt: [ - SAXHandler - parse: each - usingNamespaces: false] - raise: XMLNamespaceException]. -] - -{ #category : #tests } -XMLParserTest >> testNamespaceUndeclared [ - self - shouldnt: [SAXHandler parse: '' usingNamespaces: false] - raise: XMLNamespaceException. - self - should: [SAXHandler parse: ''] - raise: XMLNamespaceException. - self - should: [SAXHandler parse: ''] - raise: XMLNamespaceException. - - "xml is OK as a prefix, xmlns is not" - self - shouldnt: [SAXHandler parse: ''] - raise: XMLNamespaceException. - self - should: [SAXHandler parse: ''] - raise: XMLNamespaceException. -] - -{ #category : #tests } -XMLParserTest >> testNotationDeclarationRedundance [ - #(' - - ]>' - ' - - ]>' - ' - - ]>') - do: [:each | - self - should: [SAXHandler parse: each, ''] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: each, '') - isValidating: false; - parseDocument] - raise: XMLValidationException] -] - -{ #category : #tests } -XMLParserTest >> testNotationDeclarationUnterminated [ - #('' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '') - do: [:each | - self - should: [SAXHandler parse: ''] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testNotationDeclarationWhitespace [ - #(']>' - ']>' - ']>' - ']>') - do: [:each | - self - should: [SAXHandler parse: each, ''] - raise: XMLWellFormednessException]. - - #(']>' - ']>' - ']>') - do: [:each | - self - shouldnt: [SAXHandler parse: each, ''] - raise: XMLWellFormednessException]. -] - -{ #category : #tests } -XMLParserTest >> testPCDataBadChar [ - self nonChars do: [:each | - self - should: [SAXHandler parse: '', each asString, ''] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testPCDataOutsideElement [ - #('' - 'test' - ' test' - 'test' - ' test') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testPCDataWithCDataTerminator [ - self - should: [SAXHandler parse: 'test]]>test'] - raise: XMLWellFormednessException. - - #('test]] >test' - 'test] ]>test' - 'test ] ] > test' - '') - do: [:each | - self - shouldnt: [SAXHandler parse: each] - raise: XMLWellFormednessException]. -] - -{ #category : #tests } -XMLParserTest >> testParserLittleDocument [ - - | doc | - doc := XMLDOMParser parse: -' - - - jsmith - John Smith - 25 - 101 -' readStream. -] - -{ #category : #tests } -XMLParserTest >> testProcessingInstructionBadChar [ - self nonChars do: [:each | - self - should: [SAXHandler parse: ''] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testProcessingInstructionBadTarget [ - self badNames, #('xml' 'XML' 'Xml' 'xML' 'XMl' 'xmL' 'XmL' 'xMl') - do: [:each | - self - should: [SAXHandler parse: ''] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testProcessingInstructionUnterminated [ - #('' - '') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLWellFormednessException. - self - should: [SAXHandler parse: each, ''] - raise: XMLWellFormednessException. - self - should: [SAXHandler parse: '', each] - raise: XMLWellFormednessException. - self - should: [SAXHandler parse: '', each, ''] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testProcessingInstructionWhitespace [ - self - should: [SAXHandler parse: ''] - raise: XMLWellFormednessException. - self - shouldnt: [SAXHandler parse: ''] - raise: XMLWellFormednessException. -] - -{ #category : #tests } -XMLParserTest >> testSchemaRequired [ - self - shouldnt: [ - (SAXHandler on: ']>') - requiresSchema: true; - parseDocument] - raise: XMLValidationException. - self - should: [ - (SAXHandler on: '') - requiresSchema: true; - parseDocument] - raise: XMLValidationException. - self - should: [ - (SAXHandler on: ' - - - - ]> - ') - requiresSchema: true; - parseDocument] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testStandalone [ - | xmlWithDTD standaloneXMLWithDTD resolver | - - xmlWithDTD := self addressBookXMLWithDTD. - standaloneXMLWithDTD := - xmlWithDTD - copyReplaceAll: '?>' - with: ' standalone="yes" ?>'. - "an empty static resolver that won't be able to resolve the DTD system ID" - resolver := DTDStaticExternalEntityResolver new. - self - shouldnt: [ - (SAXHandler on: xmlWithDTD) - externalEntityResolver: resolver copy; - parseDocument] - raise: XMLParserException. - self - should: [ - (SAXHandler on: xmlWithDTD) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLParserException. - self - should: [ - (SAXHandler on: xmlWithDTD) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - isValidating: false; - parseDocument] - raise: XMLParserException. - - self - shouldnt: [ - (SAXHandler on: standaloneXMLWithDTD) - externalEntityResolver: resolver copy; - parseDocument] - raise: XMLParserException. - "with validation, standlone external subsets must be retrieved" - self - should: [ - (SAXHandler on: standaloneXMLWithDTD) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLParserException. - "but without validation, they are ignored" - self - shouldnt: [ - (SAXHandler on: standaloneXMLWithDTD) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - isValidating: false; - parseDocument] - raise: XMLParserException. -] - -{ #category : #tests } -XMLParserTest >> testStandaloneExternalAttributeDefaultValue [ - | standalone notStandalone dtdTemplate defaultValueStandaloneContent nonDefaultValueStandaloneContent | - - standalone := ''. - notStandalone := ''. - dtdTemplate := ' - - - - - %extern; - {2} - ]>'. - "the attributes defined internally can rely on default values, but - the standalone externally defined ones can't" - defaultValueStandaloneContent := - ''. - nonDefaultValueStandaloneContent := - ''. - #( - #('' - ' - - ') - "ID attributes cannot have default values so are not tested" - #('' - ' - - ') - #('' - ' - - ') - #('' - ' - - - - ') - #('' - ' - - - - ') - #('' - ' - - ') - #('' - ' - - ') - #('' - ' - - ') - #('' - ' - - - ')) - do: [:each | | dtd | - dtd := dtdTemplate format: each. - self - should: [SAXHandler parse: standalone, dtd, defaultValueStandaloneContent] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: standalone, dtd, defaultValueStandaloneContent) - isValidating: false; - parseDocument] - raise: XMLValidationException. - self - shouldnt: [SAXHandler parse: standalone, dtd, nonDefaultValueStandaloneContent] - raise: XMLValidationException. - - self - shouldnt: [SAXHandler parse: notStandalone, dtd, defaultValueStandaloneContent] - raise: XMLValidationException]. -] - -{ #category : #tests } -XMLParserTest >> testStandaloneExternalAttributeDefaultValueExternalSubset [ - | standalone notStandalone dtdTemplate defaultValueStandaloneContent nonDefaultValueStandaloneContent | - - standalone := ''. - notStandalone := ''. - dtdTemplate := - ' - - - {1} - ]>'. - "the attributes defined internally can rely on default values, but - the standalone externally defined ones can't" - defaultValueStandaloneContent := - ''. - nonDefaultValueStandaloneContent := - ''. - #( - #('' - ' - - ') - "ID attributes cannot have default values so are not tested" - #('' - ' - - ') - #('' - ' - - ') - #('' - ' - - - - ') - #('' - ' - - - - ') - #('' - ' - - ') - #('' - ' - - ') - #('' - ' - - ') - #('' - ' - - - ')) - do: [:each | | resolver dtd | - (resolver := DTDStaticExternalEntityResolver new) - externalEntityAtURI: 'extern.dtd' - put: each first. - dtd := dtdTemplate format: (Array with: each second). - self - should: [ - (SAXHandler on: standalone, dtd, defaultValueStandaloneContent) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: standalone, dtd, defaultValueStandaloneContent) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - isValidating: false; - parseDocument] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: standalone, dtd, nonDefaultValueStandaloneContent) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - - self - shouldnt: [ - (SAXHandler on: notStandalone, dtd, defaultValueStandaloneContent) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException]. -] - -{ #category : #tests } -XMLParserTest >> testStandaloneExternalAttributeNormalization [ - | standalone notStandalone dtdTemplate dtd unnormalizedStandaloneContent normalizedStandaloneContent | - - standalone := ''. - notStandalone := ''. - dtdTemplate := ' - - - - - %extern; - {2} - ]>'. - "the attributes defined internally can require further normalization, but - the standalone externally defined ones can't" - unnormalizedStandaloneContent := - ''. - normalizedStandaloneContent := - ''. - #( - #('' - ' - - ') - #('' - ' - - ') - #('' - ' - - ') - #('' - ' - - - - ') - #('' - ' - - - - ') - #('' - ' - - ') - #('' - ' - - ') - #('' - ' - - ') - #('' - ' - - - ')) - do: [:each | - dtd := dtdTemplate format: each. - self - should: [SAXHandler parse: standalone, dtd, unnormalizedStandaloneContent] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: standalone, dtd, unnormalizedStandaloneContent) - isValidating: false; - parseDocument] - raise: XMLValidationException. - self - shouldnt: [SAXHandler parse: standalone, dtd, normalizedStandaloneContent] - raise: XMLValidationException. - - self - shouldnt: [SAXHandler parse: notStandalone, dtd, unnormalizedStandaloneContent] - raise: XMLValidationException]. - - "CDATA is never further normalized, so standalone external doesn't affect it" - dtd := - dtdTemplate format: - #('' - ' - - '). - self - shouldnt: [SAXHandler parse: standalone, dtd, unnormalizedStandaloneContent] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testStandaloneExternalAttributeNormalizationExternalSubset [ - | standalone notStandalone dtdTemplate dtd unnormalizedStandaloneContent normalizedStandaloneContent resolver | - - standalone := ''. - notStandalone := ''. - dtdTemplate := ' - - - - {1} - ]>'. - "the attributes defined internally can require further normalization, but - the standalone externally defined ones can't" - unnormalizedStandaloneContent := - ''. - normalizedStandaloneContent := - ''. - resolver := DTDStaticExternalEntityResolver new. - #( - #('' - ' - - ') - #('' - ' - - ') - #('' - ' - - ') - #('' - ' - - - - ') - #('' - ' - - - - ') - #('' - ' - - ') - #('' - ' - - ') - #('' - ' - - ') - #('' - ' - - - ')) - do: [:each | - (resolver := resolver copy) - externalEntityAtURI: 'extern.dtd' - put: each first. - dtd := dtdTemplate format: (Array with: each second). - self - should: [ - (SAXHandler on: standalone, dtd, unnormalizedStandaloneContent) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: standalone, dtd, unnormalizedStandaloneContent) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - isValidating: false; - parseDocument] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: standalone, dtd, normalizedStandaloneContent) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - - self - shouldnt: [ - (SAXHandler on: notStandalone, dtd, unnormalizedStandaloneContent) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException]. - - "CDATA is never further normalized, so standalone external doesn't affect it" - (resolver := resolver copy) - externalEntityAtURI: 'extern.dtd' - put: - ' - - '. - dtd := dtdTemplate format: #(''). - self - shouldnt: [ - (SAXHandler on: standalone, dtd, unnormalizedStandaloneContent) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testStandaloneExternalElementDeclarartion [ - | standalone notStandalone dtd | - - standalone := ''. - notStandalone := ''. - dtd := ' - - "> - %extern; - ]>'. - "the externally defined element can't have whitespace around its element - ontent, but the internally defined one (test) can" - self - should: [ - SAXHandler parse: - standalone, dtd, ' '] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: - standalone, dtd, ' ') - isValidating: false; - parseDocument] - raise: XMLValidationException. - self - shouldnt: [ - SAXHandler parse: - standalone, dtd, ' '] - raise: XMLValidationException. - - self - shouldnt: [ - SAXHandler parse: - notStandalone, dtd, ' '] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testStandaloneExternalElementDeclarartionExternalSubset [ - | standalone notStandalone dtd resolver | - - standalone := ''. - notStandalone := ''. - dtd := ' - - ]>'. - resolver := - DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> ''). - "the externally defined element can't have whitespace around its element - ontent, but the internally defined one (test) can" - self - should: [ - (SAXHandler on: - standalone, dtd, ' ') - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: - standalone, dtd, ' ') - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - isValidating: false; - parseDocument] - raise: XMLValidationException. - self - shouldnt: [ - (SAXHandler on: - standalone, dtd, ' ') - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - - self - shouldnt: [ - (SAXHandler on: - notStandalone, dtd, ' ') - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testStandaloneExternalExternalEntity [ - | standalone notStandalone dtd resolver document | - - standalone := ''. - notStandalone := ''. - dtd := ' - - - %extern; - - ]>'. - resolver := - DTDStaticExternalEntityResolver externalEntities: - (Array - with: 'extern.ent' -> '' - with: 'name.ent' -> 'value' - with: 'otherName.ent' -> 'otherValue'). - self - should: [ - (SAXHandler on: standalone, dtd, '&name;') - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - self - shouldnt: [ - document := - (XMLDOMParser on: standalone, dtd, '&name;') - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - isValidating: false; - parseDocument] - raise: XMLParserException. - self assert: document contentString = 'value'. - "external entities only count as 'external markup declarations' in standalone - docs if they were defined in the external DTD subset or in a parameter entity" - self - shouldnt: [ - document := - (XMLDOMParser on: standalone, dtd, '&otherName;') - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - self assert: document contentString = 'otherValue'. - - self - shouldnt: [ - document := - (XMLDOMParser on: notStandalone, dtd, '&name;') - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - self assert: document contentString = 'value'. -] - -{ #category : #tests } -XMLParserTest >> testStandaloneExternalExternalEntityExternalSubset [ - | standalone notStandalone dtd subset resolver document | - - standalone := ''. - notStandalone := ''. - dtd := ' - - ]>'. - subset := ' - - - '. - resolver := - DTDStaticExternalEntityResolver externalEntities: - (Array - with: 'extern.dtd' -> subset - with: 'name.ent' -> 'value' - with: 'otherName.ent' -> 'otherValue'). - self - should: [ - (SAXHandler on: standalone, dtd, '&name;') - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - self - should: [ - (SAXHandler on: standalone, dtd, '&name;') - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - isValidating: false; - parseDocument] - raise: XMLWellFormednessException. - self - shouldnt: [ - (SAXHandler on: standalone, dtd, '') - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - - self - shouldnt: [ - document := - (XMLDOMParser on: notStandalone, dtd, '&name;') - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - self assert: document contentString = 'value'. -] - -{ #category : #tests } -XMLParserTest >> testStandaloneExternalExternalEntityRedundance [ - | standaloneXML resolver document | - - standaloneXML := - ' - - - - - %extern; - ]> - &name;'. - resolver := - DTDStaticExternalEntityResolver externalEntities: - (Array - with: 'extern.ent' -> '' - with: 'name.ent' -> 'otherValue'). - self - shouldnt: [ - document := - (XMLDOMParser on: standaloneXML) - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - self assert: document contentString = 'value'. -] - -{ #category : #tests } -XMLParserTest >> testStandaloneExternalInternalEntity [ - | standalone notStandalone dtd document | - - standalone := ''. - notStandalone := ''. - dtd := ' - - ''> - %entity; - - ]>'. - self - should: [SAXHandler parse: standalone, dtd, '&name;'] - raise: XMLValidationException. - self - shouldnt: [ - document := - (XMLDOMParser on: standalone, dtd, '&name;') - isValidating: false; - parseDocument] - raise: XMLValidationException. - self assert: document contentString = 'value'. - self - shouldnt: [SAXHandler parse: standalone, dtd, '&otherName;'] - raise: XMLValidationException. - - self - shouldnt: [ - document := - XMLDOMParser parse: notStandalone, dtd, '&name;'] - raise: XMLValidationException. - self assert: document contentString = 'value'. -] - -{ #category : #tests } -XMLParserTest >> testStandaloneExternalInternalEntityAttributeDefaultValue [ - | standaloneDTD document | - - standaloneDTD := - ' - - ''> - %entity; - - - ]>'. - self - should: [SAXHandler parse: standaloneDTD, ''] - raise: XMLValidationException. - self - shouldnt: [ - document := - (XMLDOMParser on: standaloneDTD, '') - isValidating: false; - parseDocument] - raise: XMLValidationException. - self assert: (document root attributeAt: 'name') = 'value'. - - "Xerces doesn't flag this because the reference is only in the default - value declaration, but it probably should count because it's still an - internal (to the document) reference to an external standalone entity" - self - should: [XMLDOMParser parse: standaloneDTD, ''] - raise: XMLValidationException. - self - shouldnt: [ - document := - (XMLDOMParser on: standaloneDTD, '') - isValidating: false; - parseDocument] - raise: XMLValidationException. - self assert: (document root attributeAt: 'name') = 'value'. -] - -{ #category : #tests } -XMLParserTest >> testStandaloneExternalInternalEntityExternalSubset [ - | standalone notStandalone dtd subset resolver document | - - standalone := ''. - notStandalone := ''. - dtd := ''. - subset := ' - - - '. - resolver := - DTDStaticExternalEntityResolver externalEntities: - (Array with: 'extern.dtd' -> subset). - self - should: [ - (SAXHandler on: standalone, dtd, '&name;') - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - self - should: [ - (SAXHandler on: standalone, dtd, '&name;') - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - isValidating: false; - parseDocument] - raise: XMLWellFormednessException. - self - shouldnt: [ - (SAXHandler on: standalone, dtd, '') - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - - self - shouldnt: [ - document := - (XMLDOMParser on: notStandalone, dtd, '&name;') - externalEntityResolver: resolver copy; - resolvesExternalEntities: true; - parseDocument] - raise: XMLValidationException. - self assert: document contentString = 'value'. -] - -{ #category : #tests } -XMLParserTest >> testStandaloneExternalInternalEntityRedundance [ - | standaloneXML document | - - standaloneXML := - ' - - - - ''> - %entity; - ]> - &name;'. - self - shouldnt: [document := XMLDOMParser parse: standaloneXML] - raise: XMLValidationException. - self assert: document contentString = 'value'. -] - -{ #category : #tests } -XMLParserTest >> testSystemIDBadChar [ - self nonChars do: [:each | - self - should: [ - SAXHandler parse: - ''] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testSystemIDFragment [ - #(' - ]>' - ' - ]>' - ' - - ]>') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLParserException]. - - "DOCTYPE and NOTATION system IDs with fragments are OK" - self - shouldnt: [ - SAXHandler parse: - ' - - - - ]>'] - raise: XMLParserException. -] - -{ #category : #tests } -XMLParserTest >> testUnparsedEntity [ - | dtd | - - dtd := ' - - - - - ]>'. - self - shouldnt: [SAXHandler parse: dtd, ''] - raise: XMLValidationException. - self - should: [SAXHandler parse: dtd, ''] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testUnparsedEntityDeclarationRedundance [ - | dtd | - - dtd := - ' - - - - - ]>'. - #('&external-ent;' '') - do: [:each | - self - should: [SAXHandler parse: dtd, each] - raise: XMLWellFormednessException]. -] - -{ #category : #tests } -XMLParserTest >> testUnparsedEntityDeclarationUnterminated [ - #('' - '' - '', - each] - raise: XMLWellFormednessException. - self - should: [ - SAXHandler parse: - '', - each, - ']>'] - raise: XMLWellFormednessException]. -] - -{ #category : #tests } -XMLParserTest >> testUnparsedEntityReference [ - | dtd | - - dtd := - ' - - - - ]>'. - #('&external-ent;' '') - do: [:each | - self - should: [SAXHandler parse: dtd, each] - raise: XMLWellFormednessException]. -] - -{ #category : #tests } -XMLParserTest >> testUnparsedEntityUndeclaredNotations [ - | beforeNotation afterNotation | - - beforeNotation := ' - - '. - afterNotation := ']>'. - self - should: [SAXHandler parse: beforeNotation, afterNotation] - raise: XMLValidationException. - self - shouldnt: [ - SAXHandler - parse: beforeNotation, afterNotation - usingNamespaces: true - validation: false] - raise: XMLValidationException. - self - shouldnt: [ - SAXHandler parse: - beforeNotation, '', afterNotation] - raise: XMLValidationException. -] - -{ #category : #tests } -XMLParserTest >> testXMLDeclarationEncodingNameBadChar [ - | validChars | - - validChars := '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_.-'. - 0 to: 255 do: [:each | | char charString | - char := each asCharacter. - (validChars includes: char) - ifFalse: [ - charString := char asString. - self - should: [SAXHandler parse: ''] - raise: XMLWellFormednessException]]. -] - -{ #category : #tests } -XMLParserTest >> testXMLDeclarationRedundance [ - #(' -' - ' ' - ' ' - '' - '' - ']>' - '' - '') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLWellFormednessException]. -] - -{ #category : #tests } -XMLParserTest >> testXMLDeclarationStandaloneAttribute [ - #('' - '' - '' - '' - '' - '' - '') - do: [:each | - self - should: [SAXHandler parse: each, ''] - raise: XMLWellFormednessException]. - - #('' - '') - do: [:each | - self - shouldnt: [SAXHandler parse: each, ''] - raise: XMLWellFormednessException]. -] - -{ #category : #tests } -XMLParserTest >> testXMLDeclarationUnterminated [ - #('' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '' - '') - do: [:each | - self - should: [SAXHandler parse: each] - raise: XMLWellFormednessException. - self - should: [SAXHandler parse: each, ''] - raise: XMLWellFormednessException] -] - -{ #category : #tests } -XMLParserTest >> testXMLDeclarationVersionAttribute [ - #('' - '1' - '1.' - '1.0.' - '1.0.1' - '1..' - '1..0' - '1..0..' - '1..0..1' - '.1' - '.1.' - '.1.0' - '.1.0.' - '.1.0.1' - ' 1 ' - ' 1. ' - ' 1.0 ' - ' 1.0. ' - ' 1.0.1 ' - '10' - '10.' - '10.00' - '10.00.' - '10.00.10' - 'one' - 'one.' - 'one.zero' - 'one.zero.' - 'one.zero.one') - do: [:each | - self - should: [SAXHandler parse: ''] - raise: XMLWellFormednessException]. - - #('1.0' - '1.1' - '1.00' - '1.10' - '1.000' - '1.100') - do: [:each | - self - shouldnt: [SAXHandler parse: ''] - raise: XMLWellFormednessException]. -] - -{ #category : #tests } -XMLParserTest >> testXMLDeclarationWhitespace [ - #('' - '' - '' - '') - do: [:each | - self - should: [SAXHandler parse: each, ''] - raise: XMLWellFormednessException]. - self - shouldnt: [ - SAXHandler parse: - ' - '] - raise: XMLWellFormednessException. -] diff --git a/src/XML-Tests-Parser/XMLPercentDecodingReadStreamAdapterTest.class.st b/src/XML-Tests-Parser/XMLPercentDecodingReadStreamAdapterTest.class.st deleted file mode 100644 index 75a6cc9d7..000000000 --- a/src/XML-Tests-Parser/XMLPercentDecodingReadStreamAdapterTest.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #XMLPercentDecodingReadStreamAdapterTest, - #superclass : #XMLReadStreamAdapterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #accessing } -XMLPercentDecodingReadStreamAdapterTest >> basicInputCollection [ - ^ String streamContents: [:stream | - super basicInputCollection do: [:each | - stream nextPutAll: - (self class percentEncodeCharacter: each)]] -] - -{ #category : #accessing } -XMLPercentDecodingReadStreamAdapterTest >> basicOutputCollection [ - ^ 'test' -] - -{ #category : #testing } -XMLPercentDecodingReadStreamAdapterTest >> expectsBinaryOutput [ - ^ true -] - -{ #category : #accessing } -XMLPercentDecodingReadStreamAdapterTest >> streamAdapterClass [ - ^ XMLPercentDecodingReadStreamAdapter -] diff --git a/src/XML-Tests-Parser/XMLPercentEncodingWriteStreamAdapterTest.class.st b/src/XML-Tests-Parser/XMLPercentEncodingWriteStreamAdapterTest.class.st deleted file mode 100644 index 2388c1bcc..000000000 --- a/src/XML-Tests-Parser/XMLPercentEncodingWriteStreamAdapterTest.class.st +++ /dev/null @@ -1,28 +0,0 @@ -Class { - #name : #XMLPercentEncodingWriteStreamAdapterTest, - #superclass : #XMLWriteStreamAdapterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #accessing } -XMLPercentEncodingWriteStreamAdapterTest >> basicOutputCollection [ - ^ String streamContents: [:stream | - super basicOutputCollection do: [:each | - stream nextPutAll: - (self class percentEncodeCharacter: each)]] -] - -{ #category : #converting } -XMLPercentEncodingWriteStreamAdapterTest >> contentsFromCharacter: aCharacter [ - ^ self class percentEncodeCharacter: aCharacter -] - -{ #category : #testing } -XMLPercentEncodingWriteStreamAdapterTest >> expectsBinaryInput [ - ^ true -] - -{ #category : #accessing } -XMLPercentEncodingWriteStreamAdapterTest >> streamAdapterClass [ - ^ XMLPercentEncodingWriteStreamAdapter -] diff --git a/src/XML-Tests-Parser/XMLPluggableAttributeSpecTest.class.st b/src/XML-Tests-Parser/XMLPluggableAttributeSpecTest.class.st deleted file mode 100644 index 19ae60c3e..000000000 --- a/src/XML-Tests-Parser/XMLPluggableAttributeSpecTest.class.st +++ /dev/null @@ -1,61 +0,0 @@ -Class { - #name : #XMLPluggableAttributeSpecTest, - #superclass : #XMLAttributeSpecTest, - #category : #'XML-Tests-Parser-Utils' -} - -{ #category : #accessing } -XMLPluggableAttributeSpecTest >> attributeSpecClass [ - ^ XMLPluggableAttributeSpec -] - -{ #category : #tests } -XMLPluggableAttributeSpecTest >> testMatchesAttributes [ - | attributeSpec | - - attributeSpec := self newAttributeSpec. - self assert: (attributeSpec matchesAttributes: XMLAttributeDictionary new). - self assert: - (attributeSpec matchesAttributes: - (XMLAttributeDictionary with: 'name' -> 'value')). - - attributeSpec block: [:attributes | - (attributes at: 'name') = 'value']. - self deny: (attributeSpec matchesAttributes: XMLAttributeDictionary new). - self deny: - (attributeSpec matchesAttributes: - (XMLAttributeDictionary with: 'name' -> 'value2')). - self deny: - (attributeSpec matchesAttributes: - (XMLAttributeDictionary with: 'name2' -> 'value')). - self assert: - (attributeSpec matchesAttributes: - (XMLAttributeDictionary with: 'name' -> 'value')). - - attributeSpec block: [:attributes | - (attributes at: 'name') = 'value' - and: [attributes includesKey: 'name2']]. - self deny: (attributeSpec matchesAttributes: XMLAttributeDictionary new). - self deny: - (attributeSpec matchesAttributes: - (XMLAttributeDictionary with: 'name' -> 'value2')). - self deny: - (attributeSpec matchesAttributes: - (XMLAttributeDictionary with: 'name2' -> 'value')). - self deny: - (attributeSpec matchesAttributes: - (XMLAttributeDictionary - with: 'name' -> 'value2' - with: 'name2' -> 'value')). - self assert: - (attributeSpec matchesAttributes: - (XMLAttributeDictionary - with: 'name' -> 'value' - with: 'name2' -> 'value2')). - self assert: - (attributeSpec matchesAttributes: - (XMLAttributeDictionary - with: 'name' -> 'value' - with: 'name2' -> 'value2' - with: 'name3' -> 'value3')). -] diff --git a/src/XML-Tests-Parser/XMLPluggableElementFactoryTest.class.st b/src/XML-Tests-Parser/XMLPluggableElementFactoryTest.class.st deleted file mode 100644 index d8add2b6c..000000000 --- a/src/XML-Tests-Parser/XMLPluggableElementFactoryTest.class.st +++ /dev/null @@ -1,340 +0,0 @@ -Class { - #name : #XMLPluggableElementFactoryTest, - #superclass : #XMLPluggableNodeFactoryTest, - #category : #'XML-Tests-Parser-DOM-Factories' -} - -{ #category : #accessing } -XMLPluggableElementFactoryTest >> dateElementClass [ - ^ XMLFDateElement -] - -{ #category : #accessing } -XMLPluggableElementFactoryTest >> defaultElementClass [ - ^ self elementClass -] - -{ #category : #accessing } -XMLPluggableElementFactoryTest >> elementClassMapperClass [ - ^ XMLBasicElementClassMapper -] - -{ #category : #accessing } -XMLPluggableElementFactoryTest >> factoryClass [ - ^ XMLPluggableElementFactory -] - -{ #category : #accessing } -XMLPluggableElementFactoryTest >> realNameElementClass [ - ^ XMLFRealNameElement -] - -{ #category : #source } -XMLPluggableElementFactoryTest >> sampleUsersXML [ - ^ - ' - - jsmith - John Smith - - - msmith - Michael Smith - - - jsmith2 - James Smith - - - rsmith - Robert Smith - - '. -] - -{ #category : #accessing } -XMLPluggableElementFactoryTest >> serializationFormatElementClass [ - ^ XMLFSerializationFormatElement -] - -{ #category : #accessing } -XMLPluggableElementFactoryTest >> tableElementClass [ - ^ XMLFTableElement -] - -{ #category : #tests } -XMLPluggableElementFactoryTest >> testAddElementNamed [ - | element userElement dataElement | - - element := XMLElement name: 'root'. - element - defaultNamespace: 'dataNS'; - declarePrefix: 'prefix' uri: 'prefixNS'. - element nodeFactory: - (XMLPluggableElementFactory new - handleElement: 'data' - namespaceURI: 'dataNS' - withClass: XMLFElement; - handleElement: 'user' - namespaceURI: 'prefixNS' - withClass: XMLFUserElement). - - userElement := element addElementNamed: 'prefix:user'. - self - assert: userElement class == XMLFUserElement; - assert: (userElement isNamed: 'prefix:user'); - assert: userElement namespaceURI = 'prefixNS'. - - dataElement := element addElementNamed: 'data'. - self - assert: dataElement class == XMLFElement; - assert: (dataElement isNamed: 'data'); - assert: dataElement namespaceURI = 'dataNS'. - - self assert: (element addElementNamed: 'default') class == XMLElement. -] - -{ #category : #tests } -XMLPluggableElementFactoryTest >> testClassForElement [ - | factory | - - (factory := self newFactoryWithClasses) - handleElement: 'user' - withClass: self userElementClass. - self - assert: (factory classForElement: 'user') == self userElementClass; - assert: (factory classForElement: 'prefix:user') == self userElementClass; - assert: (factory classForElement: 'absent') == self elementClass. - - factory - handleElement: 'prefix:user' - withClass: self usernameElementClass. - self - assert: (factory classForElement: 'user') == self userElementClass; - assert: (factory classForElement: 'prefix:user') == self usernameElementClass; - assert: (factory classForElement: 'prefix:absent') == self elementClass. -] - -{ #category : #tests } -XMLPluggableElementFactoryTest >> testClassForElementNamespaceURI [ - | factory | - - (factory := self newFactoryWithClasses) - handleElement: 'user' - namespaceURI: 'userNS' - withClass: self userElementClass. - self assert: - (factory - classForElement: 'user' - namespaceURI: 'userNS') == self userElementClass. - self assert: - (factory - classForElement: 'prefix:user' - namespaceURI: 'userNS') == self userElementClass. - self assert: - (factory - classForElement: 'user' - namespaceURI: 'absentNS') == self elementClass. - - factory - handleElement: 'prefix:user' - namespaceURI: 'userNS' - withClass: self usernameElementClass. - self assert: - (factory - classForElement: 'user' - namespaceURI: 'userNS') == self userElementClass. - self assert: - (factory - classForElement: 'prefix:user' - namespaceURI: 'userNS') == self usernameElementClass. - self assert: - (factory - classForElement: 'prefix:user' - namespaceURI: 'absentNS') == self elementClass. -] - -{ #category : #tests } -XMLPluggableElementFactoryTest >> testCopy [ - | factory copy | - - factory := self newFactoryWithClasses. - factory handleElement: 'user' withClass: XMLFUserElement. - copy := factory copy. - self - deny: copy == factory; - deny: copy elementClassMapper == factory elementClassMapper. -] - -{ #category : #tests } -XMLPluggableElementFactoryTest >> testElementClassAccessor [ - | document | - - document := - (XMLDOMParser on: self sampleUserXML) - nodeFactory: XMLPluggableElementFactory new; - parseDocument. - self assert: (document allElementsDetect: [:each | (each isMemberOf: XMLElement) not]) isNil. - - document := - (XMLDOMParser on: self sampleUserXML) - nodeFactory: (XMLPluggableElementFactory new elementClass: self defaultElementClass); - parseDocument. - self assert: (document allElementsDetect: [:each | (each isMemberOf: self defaultElementClass) not]) isNil. -] - -{ #category : #tests } -XMLPluggableElementFactoryTest >> testElementClassMapper [ - | factory oldMapper newMapper | - - factory := self newFactoryWithClasses. - oldMapper := factory elementClassMapper. - self assert: oldMapper class == self elementClassMapperClass. - - newMapper := self elementClassMapperClass new. - self - assert: (factory elementClassMapper: newMapper) == factory; - assert: factory elementClassMapper == newMapper. -] - -{ #category : #tests } -XMLPluggableElementFactoryTest >> testElementClassNameMatching [ - | document | - - document := - (XMLDOMParser on: self sampleUserXML) - nodeFactory: - (self newFactoryWithClasses - handleElementsMatchingClass: self userElementClass; - handleElementsMatchingClasses: - (Array - with: self realNameElementClass - with: self serializationFormatElementClass)); - parseDocument. - - self - assert: ((document root) isMemberOf: self userElementClass); - assert: ((document root elementAt: 'real-name') isMemberOf: self realNameElementClass); - assert: - ((document root elementAt: 'serializationFormat') - isMemberOf: self serializationFormatElementClass). -] - -{ #category : #tests } -XMLPluggableElementFactoryTest >> testElementNameAndNamespaceMatching [ - | factory document root | - - (factory := self newFactoryWithClasses) - elementClass: self defaultElementClass; - handleElement: 'user:user' namespaceURI: 'urn:user' withClass: self userElementClass; - handleElement: 'user:user' withClass: self wrongElementClass; - handleElement: 'user' namespaceURI: 'urn:user' withClass: self wrongElementClass; - handleElement: 'user' withClass: self wrongElementClass; - handleElement: 'user:username' withClass: self usernameElementClass; - handleElement: 'username' namespaceURI: 'urn:user' withClass: self wrongElementClass; - handleElement: 'username' withClass: self wrongElementClass; - handleElement: 'real-name' namespaceURI: 'urn:user' withClass: self realNameElementClass; - handleElement: 'real-name' withClass: self wrongElementClass; - handleElement: 'date-registered' withClass: self dateElementClass; - handleElement: 'user:date-last-active' namespaceURI: 'urn:notuser' withClass: self wrongElementClass; - handleElement: 'notuser:date-last-active' namespaceURI: 'urn:user' withClass: self wrongElementClass; - handleElement: 'date-last-active' namespaceURI: 'urn:notuser' withClass: self wrongElementClass; - handleElement: 'notuser:date-last-active' withClass: self wrongElementClass. - - document := - (XMLDOMParser on: self sampleUserXML) - nodeFactory: factory; - parseDocument. - self - assert: ((root := document root) isMemberOf: self userElementClass); - assert: ((root elementAt: 'username') isMemberOf: self usernameElementClass); - assert: ((root elementAt: 'real-name') isMemberOf: self realNameElementClass); - assert: ((root elementAt: 'date-registered') isMemberOf: self dateElementClass); - assert: - ((root elements copyAfter: (root elementAt: 'date-registered')) - allSatisfy: [:each | each isMemberOf: self defaultElementClass]). -] - -{ #category : #tests } -XMLPluggableElementFactoryTest >> testElementsNameAndNamespaceMatching [ - | factory document root | - - factory := self newFactoryWithClasses. - factory - handleElements: #('date-registered' 'date-last-active') - namespaceURI: 'urn:user' - withClass: self dateElementClass. - factory - handleElements: #('date-registered' 'date-last-active') - withClass: self wrongElementClass. - factory - handleElements: #('table-name' 'not-table-name') - withClass: self tableElementClass. - - document := - (XMLDOMParser on: self sampleUserXML) - nodeFactory: factory; - parseDocument. - root := document root. - self - assert: ((root elementAt: 'date-registered') isMemberOf: self dateElementClass); - assert: ((root elementAt: 'date-last-active') isMemberOf: self dateElementClass); - assert: ((root elementAt: 'table-name') isMemberOf: self tableElementClass). -] - -{ #category : #tests } -XMLPluggableElementFactoryTest >> testHandleElementsMatchingClass [ - | document | - - document := - (XMLDOMParser on: self sampleUsersXML) - nodeFactory: - (XMLPluggableElementFactory new - handleElementsMatchingClass: XMLFUserElement; - handleElementsMatchingClass: XMLFUsernameElement; - handleElementsMatchingClass: XMLFRealNameElement); - parseDocument. - - document root elementsDo: [:element | - self - assert: (element class == XMLFUserElement); - assert: (element elements first class == XMLFUsernameElement); - assert: (element elements second class == XMLFRealNameElement)]. -] - -{ #category : #tests } -XMLPluggableElementFactoryTest >> testHandleElementsMatchingClasses [ - | document | - - document := - (XMLDOMParser on: self sampleUsersXML) - nodeFactory: - (XMLPluggableElementFactory new - handleElementsMatchingClasses: - (Array - with: XMLFUserElement - with: XMLFUsernameElement - with: XMLFRealNameElement)); - parseDocument. - - document root elementsDo: [:element | - self - assert: (element class == XMLFUserElement); - assert: (element elements first class == XMLFUsernameElement); - assert: (element elements second class == XMLFRealNameElement)]. -] - -{ #category : #accessing } -XMLPluggableElementFactoryTest >> userElementClass [ - ^ XMLFUserElement -] - -{ #category : #accessing } -XMLPluggableElementFactoryTest >> usernameElementClass [ - ^ XMLFUsernameElement -] - -{ #category : #accessing } -XMLPluggableElementFactoryTest >> wrongElementClass [ - ^ XMLFWrongElement -] diff --git a/src/XML-Tests-Parser/XMLPluggableNodeFactoryTest.class.st b/src/XML-Tests-Parser/XMLPluggableNodeFactoryTest.class.st deleted file mode 100644 index d2c62fa06..000000000 --- a/src/XML-Tests-Parser/XMLPluggableNodeFactoryTest.class.st +++ /dev/null @@ -1,288 +0,0 @@ -Class { - #name : #XMLPluggableNodeFactoryTest, - #superclass : #XMLNodeFactoryTest, - #category : #'XML-Tests-Parser-DOM-Factories' -} - -{ #category : #accessing } -XMLPluggableNodeFactoryTest >> attributeListClass [ - ^ XMLFAttributeList -] - -{ #category : #accessing } -XMLPluggableNodeFactoryTest >> cdataClass [ - ^ XMLFCData -] - -{ #category : #accessing } -XMLPluggableNodeFactoryTest >> commentClass [ - ^ XMLFComment -] - -{ #category : #accessing } -XMLPluggableNodeFactoryTest >> documentClass [ - ^ XMLFDocument -] - -{ #category : #accessing } -XMLPluggableNodeFactoryTest >> elementClass [ - ^ XMLFElement -] - -{ #category : #accessing } -XMLPluggableNodeFactoryTest >> factoryClass [ - ^ XMLPluggableNodeFactory -] - -{ #category : #'instance creation' } -XMLPluggableNodeFactoryTest >> newFactoryWithClasses [ - ^ self newFactory - documentClass: self documentClass; - elementClass: self elementClass; - stringNodeClass: self stringNodeClass; - cdataClass: self cdataClass; - commentClass: self commentClass; - piClass: self piClass -] - -{ #category : #accessing } -XMLPluggableNodeFactoryTest >> nodeListClass [ - ^ XMLFNodeList -] - -{ #category : #accessing } -XMLPluggableNodeFactoryTest >> piClass [ - ^ XMLFPI -] - -{ #category : #accessing } -XMLPluggableNodeFactoryTest >> pluggableFactoryClass [ - ^ self factoryClass -] - -{ #category : #accessing } -XMLPluggableNodeFactoryTest >> stringNodeClass [ - ^ XMLFString -] - -{ #category : #tests } -XMLPluggableNodeFactoryTest >> testAttributeListClass [ - | factory | - - super testAttributeListClass. - - factory := self newFactoryWithClasses. - self - assert: (factory attributeListClass: self attributeListClass) == factory; - assert: factory attributeListClass == self attributeListClass. -] - -{ #category : #tests } -XMLPluggableNodeFactoryTest >> testCDataClass [ - super testCDataClass. - - self assert: self newFactoryWithClasses cdataClass == self cdataClass. -] - -{ #category : #tests } -XMLPluggableNodeFactoryTest >> testClassForElement [ - super testClassForElement. - - self assert: (self newFactoryWithClasses classForElement: 'test') == self elementClass. -] - -{ #category : #tests } -XMLPluggableNodeFactoryTest >> testClassForElementNamespaceURI [ - super testClassForElementNamespaceURI. - - self assert: - (self newFactoryWithClasses - classForElement: 'test' - namespaceURI: '') == self elementClass. - self assert: - (self newFactoryWithClasses - classForElement: 'test' - namespaceURI: 'testNS') == self elementClass. -] - -{ #category : #tests } -XMLPluggableNodeFactoryTest >> testCommentClass [ - super testCommentClass. - - self assert: self newFactoryWithClasses commentClass == self commentClass. -] - -{ #category : #tests } -XMLPluggableNodeFactoryTest >> testDocumentClass [ - super testDocumentClass. - - self assert: self newFactoryWithClasses documentClass == self documentClass. -] - -{ #category : #tests } -XMLPluggableNodeFactoryTest >> testElementClass [ - super testElementClass. - - self assert: self newFactoryWithClasses elementClass == self elementClass. -] - -{ #category : #tests } -XMLPluggableNodeFactoryTest >> testNewCData [ - | cdata | - - super testNewCData. - - cdata := self newFactoryWithClasses newCData: 'test'. - self - assert: cdata class == self cdataClass; - assert: cdata string = 'test'. -] - -{ #category : #tests } -XMLPluggableNodeFactoryTest >> testNewComment [ - | comment | - - super testNewComment. - - comment := self newFactoryWithClasses newComment: 'test'. - self - assert: comment class == self commentClass; - assert: comment string = 'test'. -] - -{ #category : #tests } -XMLPluggableNodeFactoryTest >> testNewDocument [ - super testNewDocument. - - self assert: self newFactoryWithClasses newDocument class == self documentClass. -] - -{ #category : #tests } -XMLPluggableNodeFactoryTest >> testNewElement [ - super testNewElement. - - self assert: self newFactoryWithClasses newElement class == self elementClass. -] - -{ #category : #tests } -XMLPluggableNodeFactoryTest >> testNewElementNamed [ - | element | - - super testNewElementNamed. - - element := self newFactoryWithClasses newElementNamed: 'test'. - self - assert: element class == self elementClass; - assert: element name = 'test'. -] - -{ #category : #tests } -XMLPluggableNodeFactoryTest >> testNewElementNamedNamespaceURI [ - | element | - - super testNewElementNamedNamespaceURI. - - element := - self newFactoryWithClasses - newElementNamed: 'prefix:test' - namespaceURI: 'prefixNS'. - self - assert: element class == self elementClass; - assert: element name = 'prefix:test'; - assert: element namespaceURI = 'prefixNS'. -] - -{ #category : #tests } -XMLPluggableNodeFactoryTest >> testNewPI [ - super testNewPI. - - self assert: self newFactoryWithClasses newPI class == self piClass. -] - -{ #category : #tests } -XMLPluggableNodeFactoryTest >> testNewPITargetData [ - | pi | - - super testNewPITargetData. - - pi := - self newFactoryWithClasses - newPITarget: 'target' - data: 'data'. - self - assert: pi class == self piClass; - assert: pi target = 'target'; - assert: pi data = 'data'. -] - -{ #category : #tests } -XMLPluggableNodeFactoryTest >> testNewStringNode [ - | string | - - super testNewStringNode. - - string := self newFactoryWithClasses newStringNode: 'test'. - self - assert: string class == self stringNodeClass; - assert: string string = 'test'. -] - -{ #category : #tests } -XMLPluggableNodeFactoryTest >> testNodeListClass [ - | factory | - - super testNodeListClass. - - factory := self newFactoryWithClasses. - self - assert: (factory nodeListClass: self nodeListClass) == factory; - assert: factory nodeListClass == self nodeListClass. -] - -{ #category : #tests } -XMLPluggableNodeFactoryTest >> testPIClass [ - super testPIClass. - - self assert: self newFactoryWithClasses piClass == self piClass. -] - -{ #category : #tests } -XMLPluggableNodeFactoryTest >> testParsingSample [ - | document factory | - - factory := self newFactoryWithClasses. - document := - (XMLDOMParser on: self sampleUserXML) - nodeFactory: factory; - preservesCDataNodes: true; - preservesCommentNodes: true; - parseDocument. - self - assert: document class == self documentClass; - assert: document nodeFactory == factory. - - document allElementsDo: [:each | - self - assert: each class == self elementClass; - assert: each nodeFactory == factory]. - - document allNodesDo: [:each | - each isStringNode - ifTrue: [ - self assert: - each class == - (each isCData - ifTrue: [self cdataClass] - ifFalse: [self stringNodeClass])]. - each isComment - ifTrue: [self assert: each class == self commentClass]. - each isPI - ifTrue: [self assert: each class == self piClass]]. -] - -{ #category : #tests } -XMLPluggableNodeFactoryTest >> testStringNodeClass [ - super testStringNodeClass. - - self assert: self newFactoryWithClasses stringNodeClass == self stringNodeClass. -] diff --git a/src/XML-Tests-Parser/XMLReadStreamAdapterTest.class.st b/src/XML-Tests-Parser/XMLReadStreamAdapterTest.class.st deleted file mode 100644 index 0754b91ac..000000000 --- a/src/XML-Tests-Parser/XMLReadStreamAdapterTest.class.st +++ /dev/null @@ -1,233 +0,0 @@ -Class { - #name : #XMLReadStreamAdapterTest, - #superclass : #XMLStreamAdapterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLReadStreamAdapterTest class >> isAbstract [ - ^ false -] - -{ #category : #testing } -XMLReadStreamAdapterTest >> isBinary [ - ^ self expectsBinaryOutput -] - -{ #category : #accessing } -XMLReadStreamAdapterTest >> streamAdapterClass [ - ^ XMLReadStreamAdapter -] - -{ #category : #accessing } -XMLReadStreamAdapterTest >> streamClass [ - ^ XMLExceptionRaisingReadStream -] - -{ #category : #accessing } -XMLReadStreamAdapterTest >> streamCollection [ - ^ self inputCollection -] - -{ #category : #tests } -XMLReadStreamAdapterTest >> testAtEnd [ - | adapter | - - adapter := self newStreamAdapter. - self outputCollection size timesRepeat: [ - self deny: adapter atEnd. - adapter next]. - self assert: adapter atEnd. -] - -{ #category : #tests } -XMLReadStreamAdapterTest >> testContents [ - | adapter | - - adapter := self newStreamAdapter. - self outputCollection do: [:each | - "use #= because wide chars aren't #== pre-Spur" - self - assert: adapter peek = each; - assert: adapter contents = self outputCollection; - assert: adapter peek = each; - assert: adapter next = each]. - self assert: adapter contents = self outputCollection. -] - -{ #category : #tests } -XMLReadStreamAdapterTest >> testNext [ - | adapter | - - adapter := self newStreamAdapter. - self outputCollection do: [:each | - "use #= because wide chars aren't #== pre-Spur" - self assert: adapter next = each]. - self assert: adapter next isNil. - - 0 to: self outputCollection size do: [:i | - adapter := self newStreamAdapter. - self assert: - (adapter next: i) = - (self outputCollection copyFrom: 1 to: i)]. - - adapter := self newStreamAdapter. - self assert: - (adapter next: self outputCollection size + 1) = - self outputCollection. - self assert: (adapter next: 1) isEmpty. -] - -{ #category : #tests } -XMLReadStreamAdapterTest >> testOnIfBinaryOrExternal [ - | basicInputCollection stream adapter | - - basicInputCollection := self basicInputCollection. - stream := self newStreamOn: (self binaryFrom: basicInputCollection). - adapter := self streamAdapterClass onIfBinaryOrExternal: stream. - self assert: adapter class == self streamAdapterClass. - - stream := self newStreamOn: (self stringFrom: basicInputCollection). - self assert: (self streamAdapterClass onIfBinaryOrExternal: stream) isNil. - [stream atEnd] - whileFalse: [ - stream next. - self assert: - (self streamAdapterClass onIfBinaryOrExternal: stream) isNil]. -] - -{ #category : #tests } -XMLReadStreamAdapterTest >> testPeek [ - | adapter | - - adapter := self newStreamAdapter. - self outputCollection do: [:each | - "use #= because wide chars aren't #== pre-Spur" - self assert: adapter peek = each. - adapter next]. - self assert: adapter peek isNil. -] - -{ #category : #tests } -XMLReadStreamAdapterTest >> testPeekFor [ - | adapter | - - adapter := self newStreamAdapter. - self outputCollection do: [:each | - self - deny: (adapter peekFor: #absent); - deny: (adapter peekFor: nil); - assert: (adapter peekFor: each); - deny: (adapter peekFor: #absent); - deny: (adapter peekFor: nil)]. - self - deny: (adapter peekFor: #absent); - deny: (adapter peekFor: nil). -] - -{ #category : #tests } -XMLReadStreamAdapterTest >> testPosition [ - | adapter startPosition endPosition position | - - adapter := self newStreamAdapter. - startPosition := adapter position. "1 or 0 depending on the stream on GS" - endPosition := - adapter - upToEnd; - position. - adapter := self newStreamAdapter. - position := startPosition. - self outputCollection do: [:each | - self - assert: adapter position = position; - "use #= because wide chars aren't #== pre-Spur" - assert: adapter peek = each; - assert: adapter position = position; - assert: adapter next = each; - assert: adapter position > position. - - adapter peek. - self - assert: (adapter position: position) == adapter; - assert: adapter peek = each; - assert: adapter position = position; - assert: adapter next = each; - assert: adapter position > position. - position := adapter position]. - self assert: position = endPosition. -] - -{ #category : #tests } -XMLReadStreamAdapterTest >> testReset [ - | adapter | - - adapter := self newStreamAdapter. - self - assert: adapter upToEnd = self outputCollection; - assert: adapter upToEnd isEmpty; - assert: adapter reset == adapter; - assert: adapter upToEnd = self outputCollection; - assert: adapter upToEnd isEmpty. -] - -{ #category : #tests } -XMLReadStreamAdapterTest >> testSkip [ - | adapter | - - 0 to: self outputCollection size do: [:i | - adapter := self newStreamAdapter. - self - assert: (adapter skip: i) == adapter; - assert: adapter upToEnd = (self outputCollection allButFirst: i)]. - - adapter := self newStreamAdapter. - self - assert: (adapter skip: self outputCollection size + 1) == adapter; - assert: adapter upToEnd isEmpty. -] - -{ #category : #tests } -XMLReadStreamAdapterTest >> testSkipTo [ - | adapter | - - self outputCollection do: [:each | - adapter := self newStreamAdapter. - self - assert: (adapter skipTo: each); - assert: adapter upToEnd = (self outputCollection copyAfter: each)]. - - adapter := self newStreamAdapter. - self - deny: (adapter skipTo: #absent); - assert: adapter atEnd. -] - -{ #category : #tests } -XMLReadStreamAdapterTest >> testUpTo [ - self outputCollection do: [:each | | adapter | - adapter := self newStreamAdapter. - self assert: - (adapter upTo: each) = - (self outputCollection copyUpTo: each). - self assert: - adapter upToEnd = - (self outputCollection copyAfter: each)]. - self assert: (self newStreamAdapter upTo: #absent) = self outputCollection. -] - -{ #category : #tests } -XMLReadStreamAdapterTest >> testUpToEnd [ - | adapter | - - self outputCollection withIndexDo: [:each :i | - adapter := self newStreamAdapter. - adapter skip: i. - self - assert: adapter upToEnd = (self outputCollection allButFirst: i); - assert: adapter upToEnd = self emptyOutputCollection]. - - adapter := self newStreamAdapter. - self - assert: adapter upToEnd = self outputCollection; - assert: adapter upToEnd = self emptyOutputCollection. -] diff --git a/src/XML-Tests-Parser/XMLRecordingAttributeListObserver.class.st b/src/XML-Tests-Parser/XMLRecordingAttributeListObserver.class.st deleted file mode 100644 index 5e59ec041..000000000 --- a/src/XML-Tests-Parser/XMLRecordingAttributeListObserver.class.st +++ /dev/null @@ -1,24 +0,0 @@ -" -This observer records notifications from XMLAttributeLists. -" -Class { - #name : #XMLRecordingAttributeListObserver, - #superclass : #XMLRecordingListObserver, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #notifying } -XMLRecordingAttributeListObserver >> addedAttribute: anAttribute [ - self messageRecorder - recordMessageReceiver: self - selector: #addedAttribute: - arguments: (Array with: anAttribute) -] - -{ #category : #notifying } -XMLRecordingAttributeListObserver >> removedAttribute: anAttribute [ - self messageRecorder - recordMessageReceiver: self - selector: #removedAttribute: - arguments: (Array with: anAttribute) -] diff --git a/src/XML-Tests-Parser/XMLRecordingListObserver.class.st b/src/XML-Tests-Parser/XMLRecordingListObserver.class.st deleted file mode 100644 index 2bb34174e..000000000 --- a/src/XML-Tests-Parser/XMLRecordingListObserver.class.st +++ /dev/null @@ -1,47 +0,0 @@ -" -This observer records notifications using an XMLMessageRecorder. -" -Class { - #name : #XMLRecordingListObserver, - #superclass : #Object, - #instVars : [ - 'messageRecorder' - ], - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #notifying } -XMLRecordingListObserver >> added: anObject to: aList [ - self messageRecorder - recordMessageReceiver: self - selector: #added:to: - arguments: (Array with: anObject with: aList) -] - -{ #category : #accesing } -XMLRecordingListObserver >> clearNotifications [ - self messageRecorder clearMessages -] - -{ #category : #testing } -XMLRecordingListObserver >> hasNotifications [ - ^ self messageRecorder hasMessages -] - -{ #category : #accesing } -XMLRecordingListObserver >> messageRecorder [ - ^ messageRecorder ifNil: [messageRecorder := XMLMessageRecorder new] -] - -{ #category : #accesing } -XMLRecordingListObserver >> nextNotification [ - ^ self messageRecorder nextMessage -] - -{ #category : #notifying } -XMLRecordingListObserver >> removed: anObject from: aList [ - self messageRecorder - recordMessageReceiver: self - selector: #removed:from: - arguments: (Array with: anObject with: aList) -] diff --git a/src/XML-Tests-Parser/XMLRecordingNodeListObserver.class.st b/src/XML-Tests-Parser/XMLRecordingNodeListObserver.class.st deleted file mode 100644 index 0786d349f..000000000 --- a/src/XML-Tests-Parser/XMLRecordingNodeListObserver.class.st +++ /dev/null @@ -1,24 +0,0 @@ -" -This observer records notifications from XMLNodeLists. -" -Class { - #name : #XMLRecordingNodeListObserver, - #superclass : #XMLRecordingListObserver, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #notifying } -XMLRecordingNodeListObserver >> addedNode: aNode [ - self messageRecorder - recordMessageReceiver: self - selector: #addedNode: - arguments: (Array with: aNode) -] - -{ #category : #notifying } -XMLRecordingNodeListObserver >> removedNode: aNode [ - self messageRecorder - recordMessageReceiver: self - selector: #removedNode: - arguments: (Array with: aNode) -] diff --git a/src/XML-Tests-Parser/XMLRecordingNodeVisitor.class.st b/src/XML-Tests-Parser/XMLRecordingNodeVisitor.class.st deleted file mode 100644 index 29a4af4a7..000000000 --- a/src/XML-Tests-Parser/XMLRecordingNodeVisitor.class.st +++ /dev/null @@ -1,86 +0,0 @@ -" -This node visitor records vititing messages sent by node accept methods using an XMLMessageRecorder. -" -Class { - #name : #XMLRecordingNodeVisitor, - #superclass : #XMLNodeVisitor, - #instVars : [ - 'messageRecorder' - ], - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #accessing } -XMLRecordingNodeVisitor >> messageRecorder [ - ^ messageRecorder ifNil: [messageRecorder := XMLMessageRecorder new] -] - -{ #category : #visiting } -XMLRecordingNodeVisitor >> visitCData: aCData [ - self messageRecorder - recordMessageReceiver: self - selector: #visitCData: - argument: aCData. - - ^ super visitCData: aCData. -] - -{ #category : #visiting } -XMLRecordingNodeVisitor >> visitComment: aComment [ - self messageRecorder - recordMessageReceiver: self - selector: #visitComment: - argument: aComment. - - ^ super visitComment: aComment. -] - -{ #category : #visiting } -XMLRecordingNodeVisitor >> visitDocument: aDocument [ - self messageRecorder - recordMessageReceiver: self - selector: #visitDocument: - argument: aDocument. - - ^ super visitDocument: aDocument. -] - -{ #category : #visiting } -XMLRecordingNodeVisitor >> visitElement: anElement [ - self messageRecorder - recordMessageReceiver: self - selector: #visitElement: - argument: anElement. - - ^ super visitElement: anElement. -] - -{ #category : #visiting } -XMLRecordingNodeVisitor >> visitNodeWithElements: aNodeWithElements [ - self messageRecorder - recordMessageReceiver: self - selector: #visitNodeWithElements: - argument: aNodeWithElements. - - ^ super visitNodeWithElements: aNodeWithElements. -] - -{ #category : #visiting } -XMLRecordingNodeVisitor >> visitPI: aPI [ - self messageRecorder - recordMessageReceiver: self - selector: #visitPI: - argument: aPI. - - ^ super visitPI: aPI. -] - -{ #category : #visiting } -XMLRecordingNodeVisitor >> visitStringNode: aStringNode [ - self messageRecorder - recordMessageReceiver: self - selector: #visitStringNode: - argument: aStringNode. - - ^ super visitStringNode: aStringNode. -] diff --git a/src/XML-Tests-Parser/XMLSingleCharacterReadStreamTest.class.st b/src/XML-Tests-Parser/XMLSingleCharacterReadStreamTest.class.st deleted file mode 100644 index 5d8bd2a33..000000000 --- a/src/XML-Tests-Parser/XMLSingleCharacterReadStreamTest.class.st +++ /dev/null @@ -1,30 +0,0 @@ -Class { - #name : #XMLSingleCharacterReadStreamTest, - #superclass : #XMLAbstractReadStreamTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLSingleCharacterReadStreamTest class >> isAbstract [ - ^ false -] - -{ #category : #accessing } -XMLSingleCharacterReadStreamTest >> character [ - ^ $! -] - -{ #category : #accessing } -XMLSingleCharacterReadStreamTest >> inputCollection [ - ^ self character asString -] - -{ #category : #'instance creation' } -XMLSingleCharacterReadStreamTest >> newStreamOn: aCollection [ - ^ self streamClass on: aCollection first -] - -{ #category : #accessing } -XMLSingleCharacterReadStreamTest >> streamClass [ - ^ XMLSingleCharacterReadStream -] diff --git a/src/XML-Tests-Parser/XMLSkippableTest.class.st b/src/XML-Tests-Parser/XMLSkippableTest.class.st deleted file mode 100644 index 16cb96133..000000000 --- a/src/XML-Tests-Parser/XMLSkippableTest.class.st +++ /dev/null @@ -1,84 +0,0 @@ -" -An abstract class for TestCases with skippable tests, which are usually skipped by default but can be selectively enabled. -" -Class { - #name : #XMLSkippableTest, - #superclass : #TestCase, - #instVars : [ - 'skippableTests' - ], - #classInstVars : [ - 'isSkipping' - ], - #category : #'XML-Tests-Parser' -} - -{ #category : #testing } -XMLSkippableTest class >> isAbstract [ - ^ true -] - -{ #category : #testing } -XMLSkippableTest class >> isSkipping [ - ^ isSkipping ifNil: [isSkipping := true] -] - -{ #category : #accessing } -XMLSkippableTest class >> isSkipping: aBoolean [ - isSkipping := aBoolean -] - -{ #category : #accessing } -XMLSkippableTest class >> skippableTests [ - "subclasses should override to return a collection of skippable test selectors" - ^ #() -] - -{ #category : #skipping } -XMLSkippableTest class >> startSkipping [ - self isSkipping: true -] - -{ #category : #skipping } -XMLSkippableTest class >> startSkippingAll [ - self startSkipping. - self allSubclassesDo: [:each | each startSkipping] -] - -{ #category : #skipping } -XMLSkippableTest class >> stopSkipping [ - self isSkipping: false -] - -{ #category : #skipping } -XMLSkippableTest class >> stopSkippingAll [ - self stopSkipping. - self allSubclassesDo: [:each | each stopSkipping] -] - -{ #category : #testing } -XMLSkippableTest >> isSkipping [ - ^ self class isSkipping -] - -{ #category : #private } -XMLSkippableTest >> skipOrReturnWith: aBlock [ - "skip is not portable to Squeak, so a return block is used as a backup" - (self respondsTo: #skip) - ifTrue: [self skip] - ifFalse: [aBlock value] -] - -{ #category : #private } -XMLSkippableTest >> skipOrReturnWith: aBlock ifSkippable: aSelector [ - "skip is not portable to Squeak, so a return block is used as a backup" - (self isSkipping - and: [self skippableTests includes: aSelector]) - ifTrue: [self skipOrReturnWith: aBlock] -] - -{ #category : #accessing } -XMLSkippableTest >> skippableTests [ - "make it a set for faster lookup" - ^ skippableTests ifNil: [skippableTests := self class skippableTests asSet] -] diff --git a/src/XML-Tests-Parser/XMLSmallIntegerReaderTest.class.st b/src/XML-Tests-Parser/XMLSmallIntegerReaderTest.class.st deleted file mode 100644 index 6812f4b31..000000000 --- a/src/XML-Tests-Parser/XMLSmallIntegerReaderTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLSmallIntegerReaderTest, - #superclass : #XMLIntegerReaderTest, - #category : #'XML-Tests-Parser-Utils' -} - -{ #category : #accessing } -XMLSmallIntegerReaderTest >> integerReaderClass [ - ^ XMLSmallIntegerReader -] diff --git a/src/XML-Tests-Parser/XMLStreamAdapterTest.class.st b/src/XML-Tests-Parser/XMLStreamAdapterTest.class.st deleted file mode 100644 index 73ac4b99c..000000000 --- a/src/XML-Tests-Parser/XMLStreamAdapterTest.class.st +++ /dev/null @@ -1,354 +0,0 @@ -" -Abstract, do not run. -" -Class { - #name : #XMLStreamAdapterTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #converting } -XMLStreamAdapterTest class >> binaryFrom: aCollection [ - aCollection class == ByteArray - ifTrue: [^ aCollection] - ifFalse: [ - ^ ByteArray streamContents: [:stream | - aCollection do: [:each | - stream nextPut: each asInteger]]] -] - -{ #category : #accessing } -XMLStreamAdapterTest class >> decodedASCIIString [ - ^ self stringFrom: self encodedASCIIBinary -] - -{ #category : #accessing } -XMLStreamAdapterTest class >> decodedLatin1String [ - ^ self stringFrom: self encodedLatin1Binary -] - -{ #category : #accessing } -XMLStreamAdapterTest class >> decodedUTF16String [ - ^ self stringFrom: - #(16rFF 16r0100 16rD7FF 16rE000 16rFFFF 16r10000 16r10437 16r24B62 16r10FFFF) -] - -{ #category : #accessing } -XMLStreamAdapterTest class >> decodedUTF32String [ - ^ self stringFrom: #(16rFE 16rD7FE 16r10FFFF) -] - -{ #category : #accessing } -XMLStreamAdapterTest class >> decodedUTF8String [ - ^ self stringFrom: - #(16r01 16r0F 16r7F 16r80 16r7FF 16r800 16rFEFE 16rFFFF 16r10000 16r10FFFF) -] - -{ #category : #accessing } -XMLStreamAdapterTest class >> encodedASCIIBinary [ - ^ (16r01 to: 16r7F) asByteArray -] - -{ #category : #accessing } -XMLStreamAdapterTest class >> encodedLatin1Binary [ - ^ (16r01 to: 16rFF) asByteArray -] - -{ #category : #accessing } -XMLStreamAdapterTest class >> encodedUTF16BEBinary [ - ^ #[16r00 16rFF - 16r01 16r00 - 16rD7 16rFF - 16rE0 16r00 - 16rFF 16rFF - 16rD8 16r00 16rDC 16r00 "first surrogate pair" - 16rD8 16r01 16rDC 16r37 - 16rD8 16r52 16rDF 16r62 - 16rDB 16rFF 16rDF 16rFF] "last surrogate pair" -] - -{ #category : #accessing } -XMLStreamAdapterTest class >> encodedUTF16LEBinary [ - ^ #[16rFF 16r00 - 16r00 16r01 - 16rFF 16rD7 - 16r00 16rE0 - 16rFF 16rFF - 16r00 16rD8 16r00 16rDC "first surrogate pair" - 16r01 16rD8 16r37 16rDC - 16r52 16rD8 16r62 16rDF - 16rFF 16rDB 16rFF 16rDF] "last surrogate pair" -] - -{ #category : #accessing } -XMLStreamAdapterTest class >> encodedUTF32BEBinary [ - ^ #[16r00 16r00 16r00 16rFE - 16r00 16r00 16rD7 16rFE - 16r00 16r10 16rFF 16rFF] -] - -{ #category : #accessing } -XMLStreamAdapterTest class >> encodedUTF32LEBinary [ - ^ #[16rFE 16r00 16r00 16r00 - 16rFE 16rD7 16r00 16r00 - 16rFF 16rFF 16r10 16r00] -] - -{ #category : #accessing } -XMLStreamAdapterTest class >> encodedUTF8Binary [ - ^ #[16r01 - 16r0F - 16r7F - 16rC2 16r80 - 16rDF 16rBF - 16rE0 16rA0 16r80 - 16rEF 16rBB 16rBE - 16rEF 16rBF 16rBF - 16rF0 16r90 16r80 16r80 - 16rF4 16r8F 16rBF 16rBF] -] - -{ #category : #testing } -XMLStreamAdapterTest class >> isAbstract [ - ^ true -] - -{ #category : #converting } -XMLStreamAdapterTest class >> percentEncodeCharacter: aCharacter [ - | hexString | - - (hexString := aCharacter asInteger printStringHex asUppercase) size > 1 - ifTrue: [^ '%', hexString] - ifFalse: [^ '%0', hexString] -] - -{ #category : #converting } -XMLStreamAdapterTest class >> percentEncodeCharacters: aCharacterCollection [ - ^ String streamContents: [:stream | - aCharacterCollection do: [:each | - stream nextPutAll: - (self percentEncodeCharacter: each)]] -] - -{ #category : #testing } -XMLStreamAdapterTest class >> shouldInheritSelectors [ - ^ true -] - -{ #category : #converting } -XMLStreamAdapterTest class >> stringFrom: aCollection [ - aCollection isString - ifTrue: [^ aCollection] - ifFalse: [ - "avoid #asString for GS portability" - ^ String streamContents: [:stream | - aCollection do: [:each | - stream nextPut: each asCharacter]]] -] - -{ #category : #converting } -XMLStreamAdapterTest >> asExpectedInput: aCollection [ - ^ self expectsBinaryInput - ifTrue: [self binaryFrom: aCollection] - ifFalse: [self stringFrom: aCollection] -] - -{ #category : #converting } -XMLStreamAdapterTest >> asExpectedOutput: aCollection [ - ^ self expectsBinaryOutput - ifTrue: [self binaryFrom: aCollection] - ifFalse: [self stringFrom: aCollection] -] - -{ #category : #accessing } -XMLStreamAdapterTest >> basicInputCollection [ - ^ 'test' -] - -{ #category : #accessing } -XMLStreamAdapterTest >> basicOutputCollection [ - ^ self basicInputCollection -] - -{ #category : #converting } -XMLStreamAdapterTest >> binaryFrom: aCollection [ - ^ self class binaryFrom: aCollection -] - -{ #category : #accessing } -XMLStreamAdapterTest >> decodedASCIIString [ - ^ self class decodedASCIIString -] - -{ #category : #accessing } -XMLStreamAdapterTest >> decodedLatin1String [ - ^ self class decodedLatin1String -] - -{ #category : #accessing } -XMLStreamAdapterTest >> decodedUTF16String [ - ^ self class decodedUTF16String -] - -{ #category : #accessing } -XMLStreamAdapterTest >> decodedUTF32String [ - ^ self class decodedUTF32String -] - -{ #category : #accessing } -XMLStreamAdapterTest >> decodedUTF8String [ - ^ self class decodedUTF8String -] - -{ #category : #accessing } -XMLStreamAdapterTest >> emptyOutputCollection [ - ^ self outputCollection copyEmpty -] - -{ #category : #accessing } -XMLStreamAdapterTest >> encodedASCIIBinary [ - ^ self class encodedASCIIBinary -] - -{ #category : #accessing } -XMLStreamAdapterTest >> encodedLatin1Binary [ - ^ self class encodedLatin1Binary -] - -{ #category : #accessing } -XMLStreamAdapterTest >> encodedUTF16BEBinary [ - ^ self class encodedUTF16BEBinary -] - -{ #category : #accessing } -XMLStreamAdapterTest >> encodedUTF16LEBinary [ - ^ self class encodedUTF16LEBinary -] - -{ #category : #accessing } -XMLStreamAdapterTest >> encodedUTF32BEBinary [ - ^ self class encodedUTF32BEBinary -] - -{ #category : #accessing } -XMLStreamAdapterTest >> encodedUTF32LEBinary [ - ^ self class encodedUTF32LEBinary -] - -{ #category : #accessing } -XMLStreamAdapterTest >> encodedUTF8Binary [ - ^ self class encodedUTF8Binary -] - -{ #category : #testing } -XMLStreamAdapterTest >> expectsBinaryInput [ - ^ false -] - -{ #category : #testing } -XMLStreamAdapterTest >> expectsBinaryOutput [ - ^ false -] - -{ #category : #accessing } -XMLStreamAdapterTest >> inputCollection [ - ^ self asExpectedInput: self basicInputCollection -] - -{ #category : #testing } -XMLStreamAdapterTest >> isBinary [ - ^ false -] - -{ #category : #'instance creation' } -XMLStreamAdapterTest >> newStream [ - ^ self newStreamOn: self streamCollection -] - -{ #category : #'instance creation' } -XMLStreamAdapterTest >> newStreamAdapter [ - ^ self newStreamAdapterOn: self newStream -] - -{ #category : #'instance creation' } -XMLStreamAdapterTest >> newStreamAdapterOn: aStream [ - ^ self streamAdapterClass on: aStream -] - -{ #category : #'instance creation' } -XMLStreamAdapterTest >> newStreamOn: aCollection [ - ^ self streamClass on: aCollection -] - -{ #category : #accessing } -XMLStreamAdapterTest >> outputCollection [ - ^ self asExpectedOutput: self basicOutputCollection -] - -{ #category : #accessing } -XMLStreamAdapterTest >> streamAdapterClass [ - ^ XMLStreamAdapter -] - -{ #category : #accessing } -XMLStreamAdapterTest >> streamClass [ - ^ ReadStream -] - -{ #category : #accessing } -XMLStreamAdapterTest >> streamCollection [ - ^ String new -] - -{ #category : #converting } -XMLStreamAdapterTest >> stringFrom: aCollection [ - ^ self class stringFrom: aCollection -] - -{ #category : #tests } -XMLStreamAdapterTest >> testClose [ - self - shouldnt: [self newStreamAdapter close] - raise: Error -] - -{ #category : #tests } -XMLStreamAdapterTest >> testIsBinary [ - self assert: self newStreamAdapter isBinary = self isBinary -] - -{ #category : #tests } -XMLStreamAdapterTest >> testIsStream [ - self assert: self newStreamAdapter isStream -] - -{ #category : #tests } -XMLStreamAdapterTest >> testIsXMLBinaryOrExternalStream [ - | streamAdapter | - - streamAdapter := self newStreamAdapter. - self assert: streamAdapter isXMLBinaryOrExternalStream = streamAdapter isBinary. -] - -{ #category : #tests } -XMLStreamAdapterTest >> testIsXMLConvertingStreamAdapter [ - self deny: self newStreamAdapter isXMLConvertingStreamAdapter -] - -{ #category : #tests } -XMLStreamAdapterTest >> testNew [ - self - should: [self streamClass new] - raise: Error -] - -{ #category : #tests } -XMLStreamAdapterTest >> testOn [ - | stream adapter | - - stream := self newStream. - adapter := self newStreamAdapterOn: stream. - self - assert: adapter class == self streamAdapterClass; - assert: adapter stream == stream. -] diff --git a/src/XML-Tests-Parser/XMLStreamConverterTest.class.st b/src/XML-Tests-Parser/XMLStreamConverterTest.class.st deleted file mode 100644 index c21cfca9c..000000000 --- a/src/XML-Tests-Parser/XMLStreamConverterTest.class.st +++ /dev/null @@ -1,211 +0,0 @@ -" -Abstract, do not run. -" -Class { - #name : #XMLStreamConverterTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLStreamConverterTest class >> isAbstract [ - ^ true -] - -{ #category : #testing } -XMLStreamConverterTest class >> shouldInheritSelectors [ - ^ true -] - -{ #category : #accessing } -XMLStreamConverterTest >> caseInvertedEncodingNameFrom: anEncodingName [ - | shouldUppercase | - - ^ anEncodingName collect: [:each | - (shouldUppercase ifNil: [shouldUppercase := each isLowercase]) - ifTrue: [ - shouldUppercase := false. - each asUppercase] - ifFalse: [ - shouldUppercase := true. - each asLowercase]] -] - -{ #category : #accessing } -XMLStreamConverterTest >> defaultClass [ - ^ XMLImplicitUTF8StreamConverter -] - -{ #category : #accessing } -XMLStreamConverterTest >> encodingNames [ - ^ self streamConverterClass encodingNames -] - -{ #category : #accessing } -XMLStreamConverterTest >> encodingNamesWithCaseInversions [ - | encodingNamesWithCaseInversions | - - encodingNamesWithCaseInversions := self encodingNames copy. - self encodingNames do: [:each | - "add the case inversion, as well as its inversion" - encodingNamesWithCaseInversions add: - (self caseInvertedEncodingNameFrom: - (encodingNamesWithCaseInversions add: - (self caseInvertedEncodingNameFrom: each)))]. - ^ encodingNamesWithCaseInversions. -] - -{ #category : #testing } -XMLStreamConverterTest >> isImplicit [ - ^ false -] - -{ #category : #'instance creation' } -XMLStreamConverterTest >> newStreamConverter [ - ^ self streamConverterClass new -] - -{ #category : #accessing } -XMLStreamConverterTest >> nullClass [ - ^ XMLNullStreamConverter -] - -{ #category : #accessing } -XMLStreamConverterTest >> primaryEncodingName [ - ^ '' -] - -{ #category : #accessing } -XMLStreamConverterTest >> streamConverterClass [ - ^ XMLStreamConverter -] - -{ #category : #tests } -XMLStreamConverterTest >> testAbstractClass [ - | streamConverterClass | - - streamConverterClass := self streamConverterClass. - self assert: - streamConverterClass abstractClass == - (self isImplicit - ifTrue: [streamConverterClass superclass superclass] - ifFalse: [streamConverterClass superclass]) -] - -{ #category : #tests } -XMLStreamConverterTest >> testAsXMLStreamConverter [ - | streamConverter | - - streamConverter := self newStreamConverter. - self assert: streamConverter asXMLStreamConverter == streamConverter. -] - -{ #category : #tests } -XMLStreamConverterTest >> testCanConvertEncoding [ - self encodingNamesWithCaseInversions do: [:each | - self assert: (self streamConverterClass canConvertEncoding: each)]. - self unconvertableEncodingNames do: [:each | - self deny: (self streamConverterClass canConvertEncoding: each)]. -] - -{ #category : #tests } -XMLStreamConverterTest >> testDefault [ - | streamConverter | - - streamConverter := self streamConverterClass default. - self - assert: streamConverter class == self defaultClass; - assert: streamConverter isDefault; - assert: streamConverter isImplicit. -] - -{ #category : #tests } -XMLStreamConverterTest >> testDefaultClass [ - self assert: self streamConverterClass defaultClass == self defaultClass -] - -{ #category : #tests } -XMLStreamConverterTest >> testDefaultEncoding [ - self assert: - self streamConverterClass defaultEncoding = - self defaultClass primaryEncodingName -] - -{ #category : #tests } -XMLStreamConverterTest >> testEncoding [ - self encodingNamesWithCaseInversions do: [:each | - self assert: - (XMLStreamConverter newForEncoding: each) encoding = - self primaryEncodingName] -] - -{ #category : #tests } -XMLStreamConverterTest >> testIsAbstractClass [ - | streamConverterClass | - - streamConverterClass := self streamConverterClass. - self deny: streamConverterClass isAbstractClass. - self isImplicit - ifTrue: [streamConverterClass := streamConverterClass superclass]. - [streamConverterClass == XMLStreamConverter] - whileFalse: [ - streamConverterClass := streamConverterClass superclass. - self assert: streamConverterClass isAbstractClass]. -] - -{ #category : #tests } -XMLStreamConverterTest >> testIsDefault [ - self streamConverterClass == self defaultClass - ifTrue: [self assert: self newStreamConverter isDefault] - ifFalse: [self deny: self newStreamConverter isDefault] -] - -{ #category : #tests } -XMLStreamConverterTest >> testIsDefaultClass [ - self streamConverterClass == self defaultClass - ifTrue: [self assert: self streamConverterClass isDefaultClass] - ifFalse: [self deny: self streamConverterClass isDefaultClass] -] - -{ #category : #tests } -XMLStreamConverterTest >> testIsImplicit [ - self isImplicit - ifTrue: [self assert: self newStreamConverter isImplicit] - ifFalse: [self deny: self newStreamConverter isImplicit] -] - -{ #category : #tests } -XMLStreamConverterTest >> testIsNull [ - self streamConverterClass == self nullClass - ifTrue: [self assert: self newStreamConverter isNull] - ifFalse: [self deny: self newStreamConverter isNull] -] - -{ #category : #tests } -XMLStreamConverterTest >> testNewForEncoding [ - self encodingNamesWithCaseInversions do: [:each | - (XMLStreamConverter newForEncoding: each) class == - self streamConverterClass] -] - -{ #category : #tests } -XMLStreamConverterTest >> testNull [ - self assert: self streamConverterClass null class == self nullClass -] - -{ #category : #tests } -XMLStreamConverterTest >> testNullClass [ - self assert: self streamConverterClass nullClass == self nullClass -] - -{ #category : #tests } -XMLStreamConverterTest >> testPrimaryEncodingName [ - self assert: - self streamConverterClass primaryEncodingName = - self primaryEncodingName -] - -{ #category : #accessing } -XMLStreamConverterTest >> unconvertableEncodingNames [ - ^ #('unconvertableEncodingName') -] diff --git a/src/XML-Tests-Parser/XMLStringMethodsTest.class.st b/src/XML-Tests-Parser/XMLStringMethodsTest.class.st deleted file mode 100644 index 6c5d99315..000000000 --- a/src/XML-Tests-Parser/XMLStringMethodsTest.class.st +++ /dev/null @@ -1,217 +0,0 @@ -Class { - #name : #XMLStringMethodsTest, - #superclass : #TestCase, - #category : #'XML-Tests-Parser' -} - -{ #category : #accessing } -XMLStringMethodsTest class >> badNCNames [ - "all NC (non-qualified) names are names, but not all names are NC names" - ^ self badNames, self nonNCNameNames -] - -{ #category : #accessing } -XMLStringMethodsTest class >> badNames [ - "all names are Nmtokens, but not all Nmtokens are names" - ^ self badNmtokens, self nonNameNmtokens -] - -{ #category : #accessing } -XMLStringMethodsTest class >> badNmtokens [ - ^ #('' ' ' ' '), - (XMLCharacterMethodsTest nonNameChars collect: [:each | - 'test' copyWith: each]) -] - -{ #category : #accessing } -XMLStringMethodsTest class >> nonNCNameNames [ - ^ #(':' 'test:test' 'test:' ':test') -] - -{ #category : #accessing } -XMLStringMethodsTest class >> nonNameNmtokens [ - ^ XMLCharacterMethodsTest nonNameStartCharNameChars collect: [:each | - 'test' copyWithFirst: each] -] - -{ #category : #accessing } -XMLStringMethodsTest >> badNCNames [ - ^ self class badNCNames -] - -{ #category : #accessing } -XMLStringMethodsTest >> badNames [ - ^ self class badNames -] - -{ #category : #accessing } -XMLStringMethodsTest >> badNmtokens [ - ^ self class badNmtokens -] - -{ #category : #accessing } -XMLStringMethodsTest >> nonNCNameNames [ - ^ self class nonNCNameNames -] - -{ #category : #accessing } -XMLStringMethodsTest >> nonNameNmtokens [ - ^ self class nonNameNmtokens -] - -{ #category : #tests } -XMLStringMethodsTest >> testAsXMLEscapedString [ - self assert: - '''&value;''' asXMLEscapedString = - '<test name="&name;">''&value;''</test>' -] - -{ #category : #tests } -XMLStringMethodsTest >> testAsXMLFileHandle [ - XMLFileHandle hasSupportedImplementation - ifTrue: [| path fileHandle | - path := 'test.xml'. - fileHandle := path asXMLFileHandle. - self - assert: fileHandle class == XMLFileHandle implementation; - assert: fileHandle path = path] -] - -{ #category : #tests } -XMLStringMethodsTest >> testAsXMLHTTPRequest [ - XMLHTTPRequest hasSupportedImplementation - ifTrue: [| url request | - url := 'test.xml'. - request := url asXMLHTTPRequest. - self - assert: request class == XMLHTTPRequest implementation; - assert: request url = url] -] - -{ #category : #tests } -XMLStringMethodsTest >> testAsXMLStreamConverter [ - XMLStreamConverter allSubclassesDo: [:class | - (class class includesSelector: #encodingNames) - ifTrue: [ - class encodingNames do: [:each | - self assert: each asXMLStreamConverter class == class]]] -] - -{ #category : #tests } -XMLStringMethodsTest >> testAsXMLStringNode [ - | node | - - node := 'test' asXMLStringNode. - self - assert: node class == XMLString; - assert: node string = 'test'. -] - -{ #category : #tests } -XMLStringMethodsTest >> testIsXMLNCName [ - self badNCNames do: [:each | - self deny: each isXMLNCName] -] - -{ #category : #tests } -XMLStringMethodsTest >> testIsXMLNSAttributeName [ - self - deny: '' isXMLNSAttributeName; - deny: 'name' isXMLNSAttributeName; - deny: 'name:xml' isXMLNSAttributeName; - deny: 'name:xmlns' isXMLNSAttributeName; - deny: 'xml:base' isXMLNSAttributeName; - deny: 'xml:space' isXMLNSAttributeName; - assert: 'xmlns' isXMLNSAttributeName; - assert: 'xmlns:' isXMLNSAttributeName; - assert: 'xmlns:name' isXMLNSAttributeName -] - -{ #category : #tests } -XMLStringMethodsTest >> testIsXMLName [ - self nonNCNameNames do: [:each | - self assert: each isXMLName]. - self badNames do: [:each | - self deny: each isXMLName]. -] - -{ #category : #tests } -XMLStringMethodsTest >> testIsXMLNmtoken [ - self nonNCNameNames do: [:each | - self assert: each isXMLNmtoken]. - self nonNameNmtokens do: [:each | - self assert: each isXMLNmtoken]. - self badNmtokens do: [:each | - self deny: each isXMLNmtoken]. -] - -{ #category : #tests } -XMLStringMethodsTest >> testIsXMLQualifiedOrLocalName [ - self - deny: ('' isXMLQualifiedOrLocalName: 'name'); - deny: ('' isXMLQualifiedOrLocalName: 'prefix:name'); - assert: ('name' isXMLQualifiedOrLocalName: 'name'); - assert: ('prefix:name' isXMLQualifiedOrLocalName: 'name'); - assert: ('prefix:name' isXMLQualifiedOrLocalName: 'prefix:name'); - deny: ('name' isXMLQualifiedOrLocalName: 'different'); - deny: ('name' isXMLQualifiedOrLocalName: 'prefix:name'); - deny: ('prefix:name' isXMLQualifiedOrLocalName: 'prefix:different'); - deny: ('prefix:name' isXMLQualifiedOrLocalName: 'different:name'). - - "test wide char equality (redundant on Spur, but should remain as long - as Cog and older VMs are supported)" - self assert: - ((String with: 256 asCharacter) - isXMLQualifiedOrLocalName: - (String with: 256 asCharacter)). - self assert: - ((String with: 16r039A asCharacter with: $: with: 16r039B asCharacter) - isXMLQualifiedOrLocalName: - (String with: 16r039B asCharacter)). -] - -{ #category : #tests } -XMLStringMethodsTest >> testIsXMLReservedAttributeName [ - self - deny: '' isXMLReservedAttributeName; - deny: 'name' isXMLReservedAttributeName; - deny: 'name:xml' isXMLReservedAttributeName; - deny: 'name:xmlns' isXMLReservedAttributeName; - assert: 'xml:base' isXMLReservedAttributeName; - assert: 'xml:space' isXMLReservedAttributeName; - assert: 'xmlns' isXMLReservedAttributeName; - assert: 'xmlns:' isXMLReservedAttributeName; - assert: 'xmlns:name' isXMLReservedAttributeName -] - -{ #category : #tests } -XMLStringMethodsTest >> testParseXML [ - | xml | - - xml := XMLParserTest addressBookXML. - self assert: xml parseXML printString = (XMLDOMParser parse: xml) printString. -] - -{ #category : #tests } -XMLStringMethodsTest >> testXMLLocalNameAfterPrefix [ - self - assert: 'name' xmlLocalNameAfterPrefix = 'name'; - assert: ':name' xmlLocalNameAfterPrefix = ':name'; - assert: 'prefix:name' xmlLocalNameAfterPrefix = 'name'; - assert: '::name' xmlLocalNameAfterPrefix = 'name'; - assert: 'invalid:prefix:name' xmlLocalNameAfterPrefix = 'name'; - assert: ':::name' xmlLocalNameAfterPrefix = 'name'; - assert: ':invalid:prefix:name' xmlLocalNameAfterPrefix = 'name'. -] - -{ #category : #tests } -XMLStringMethodsTest >> testXMLPrefixBeforeLocalName [ - self - assert: 'name' xmlPrefixBeforeLocalName = ''; - assert: ':name' xmlPrefixBeforeLocalName = ''; - assert: 'prefix:name' xmlPrefixBeforeLocalName = 'prefix'; - assert: '::name' xmlPrefixBeforeLocalName = ':'; - assert: 'invalid:prefix:name' xmlPrefixBeforeLocalName = 'invalid:prefix'; - assert: ':::name' xmlPrefixBeforeLocalName = '::'; - assert: ':invalid:prefix:name' xmlPrefixBeforeLocalName = ':invalid:prefix'. -] diff --git a/src/XML-Tests-Parser/XMLStringReadStreamAdapterBinaryTest.class.st b/src/XML-Tests-Parser/XMLStringReadStreamAdapterBinaryTest.class.st deleted file mode 100644 index ddc4e0a79..000000000 --- a/src/XML-Tests-Parser/XMLStringReadStreamAdapterBinaryTest.class.st +++ /dev/null @@ -1,10 +0,0 @@ -Class { - #name : #XMLStringReadStreamAdapterBinaryTest, - #superclass : #XMLStringReadStreamAdapterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLStringReadStreamAdapterBinaryTest >> expectsBinaryInput [ - ^ true -] diff --git a/src/XML-Tests-Parser/XMLStringReadStreamAdapterTest.class.st b/src/XML-Tests-Parser/XMLStringReadStreamAdapterTest.class.st deleted file mode 100644 index 0aae7090a..000000000 --- a/src/XML-Tests-Parser/XMLStringReadStreamAdapterTest.class.st +++ /dev/null @@ -1,15 +0,0 @@ -Class { - #name : #XMLStringReadStreamAdapterTest, - #superclass : #XMLReadStreamAdapterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLStringReadStreamAdapterTest >> expectsBinaryOutput [ - ^ true -] - -{ #category : #accessing } -XMLStringReadStreamAdapterTest >> streamAdapterClass [ - ^ XMLStringReadStreamAdapter -] diff --git a/src/XML-Tests-Parser/XMLStringTest.class.st b/src/XML-Tests-Parser/XMLStringTest.class.st deleted file mode 100644 index 3743b09f9..000000000 --- a/src/XML-Tests-Parser/XMLStringTest.class.st +++ /dev/null @@ -1,411 +0,0 @@ -Class { - #name : #XMLStringTest, - #superclass : #XMLNodeTest, - #category : #'XML-Tests-Parser-DOM' -} - -{ #category : #accessing } -XMLStringTest >> nodeClass [ - ^ XMLString -] - -{ #category : #tests } -XMLStringTest >> testAcceptNodeVisitor [ - | visitor stringNode message | - - visitor := XMLRecordingNodeVisitor new. - stringNode := self newNode. - self - assert: (stringNode acceptNodeVisitor: visitor) == stringNode; - assert: visitor messageRecorder hasMessages. - - message := visitor messageRecorder nextMessage. - self - assert: message selector == #visitStringNode:; - assert: message arguments = (Array with: stringNode); - deny: visitor messageRecorder hasMessages. -] - -{ #category : #tests } -XMLStringTest >> testAppend [ - | stringNode | - - stringNode := self newNode. - stringNode append: 'one'. - self assert: stringNode string = 'one'. - - stringNode append: (self nodeClass string: 'two'). - self assert: stringNode string = 'onetwo'. - - stringNode append: 'three'. - self assert: stringNode string = 'onetwothree'. -] - -{ #category : #tests } -XMLStringTest >> testAsString [ - self - assert: self newNode asString = ''; - assert: (self nodeClass string: 'test') asString = 'test' -] - -{ #category : #tests } -XMLStringTest >> testAsXMLEscapedString [ - | stringNode | - - stringNode := self nodeClass string: self markupString. - self - assert: stringNode string = self markupString; - deny: stringNode string = self escapedString; - assert: stringNode asXMLEscapedString = self escapedString. -] - -{ #category : #tests } -XMLStringTest >> testAsXMLStringNode [ - | stringNode | - - stringNode := self newNode. - self assert: stringNode asXMLStringNode == stringNode. -] - -{ #category : #tests } -XMLStringTest >> testBeginsWith [ - | stringNode | - - stringNode := self nodeClass string: 'test'. - 0 to: stringNode string size - 1 do: [:i | | prefix | - prefix := stringNode string allButLast: i. - self - assert: (stringNode beginsWith: prefix); - assert: (stringNode beginsWith: (self nodeClass string: prefix)); - deny: (stringNode beginsWith: (prefix copyWith: $.)); - deny: (stringNode beginsWith: (self nodeClass string: (prefix copyWith: $.)))]. -] - -{ #category : #tests } -XMLStringTest >> testCanonicallyEquals [ - super testCanonicallyEquals. - self assert: - ((self nodeClass string: 'test') canonicallyEquals: - (self nodeClass string: 'test')). - self deny: - ((self nodeClass string: 'test') canonicallyEquals: - self newNode). -] - -{ #category : #tests } -XMLStringTest >> testDeleteFromTo [ - | stringNode | - - stringNode := self newNode. - stringNode deleteFrom: 1 to: 0. - self assert: stringNode string = ''. - - stringNode append: 'onetwothree'. - stringNode deleteFrom: 0 to: -1. - stringNode deleteFrom: 12 to: 13. - self assert: stringNode string = 'onetwothree'. - - stringNode deleteFrom: 4 to: 6. - self assert: stringNode string = 'onethree'. - - stringNode deleteFrom: 4 to: 8. - self assert: stringNode string = 'one'. - - stringNode deleteFrom: 1 to: 3. - self assert: stringNode string = ''. -] - -{ #category : #tests } -XMLStringTest >> testEndsWith [ - | stringNode | - - stringNode := self nodeClass string: 'test'. - 0 to: stringNode string size - 1 do: [:i | | suffix | - suffix := stringNode string allButFirst: i. - self - assert: (stringNode endsWith: suffix); - assert: (stringNode endsWith: (self nodeClass string: suffix)); - deny: (stringNode endsWith: (suffix copyWithFirst: $.)); - deny: (stringNode endsWith: (self nodeClass string: (suffix copyWithFirst: $.)))]. -] - -{ #category : #tests } -XMLStringTest >> testIncludesSubstring [ - | stringNode | - - stringNode := self newNode. - self - assert: (stringNode includesSubstring: ''); - assert: (stringNode includesSubstring: (self nodeClass string: '')); - deny: (stringNode includesSubstring: 'one'); - deny: (stringNode includesSubstring: (self nodeClass string: 'one')). - stringNode prepend: 'one'. - self - assert: (stringNode includesSubstring: 'one'); - assert: (stringNode includesSubstring: (self nodeClass string: 'one')). - - self - deny: (stringNode includesSubstring: 'three'); - deny: (stringNode includesSubstring: (self nodeClass string: 'three')). - stringNode append: 'three'. - self - assert: (stringNode includesSubstring: 'three'); - assert: (stringNode includesSubstring: (self nodeClass string: 'three')). - - self - deny: (stringNode includesSubstring: 'two'); - deny: (stringNode includesSubstring: (self nodeClass string: 'two')). - stringNode replaceFrom: 4 to: 3 with: 'two'. - self - assert: (stringNode includesSubstring: 'two'); - assert: (stringNode includesSubstring: (self nodeClass string: 'two')). - - self - assert: (stringNode includesSubstring: ''); - assert: (stringNode includesSubstring: (self nodeClass string: '')). -] - -{ #category : #tests } -XMLStringTest >> testIndexOfSubstring [ - | stringNode | - - stringNode := self newNode. - self - assert: (stringNode indexOfSubstring: 'one') isZero; - assert: (stringNode indexOfSubstring: (self nodeClass string: 'one')) isZero. - stringNode prepend: 'one'. - self - assert: (stringNode indexOfSubstring: 'one') = 1; - assert: (stringNode indexOfSubstring: (self nodeClass string: 'one')) = 1. - - self - assert: (stringNode indexOfSubstring: 'two') isZero; - assert: (stringNode indexOfSubstring: (self nodeClass string: 'two')) isZero. - stringNode append: 'two'. - self - assert: (stringNode indexOfSubstring: 'two') = 4; - assert: (stringNode indexOfSubstring: (self nodeClass string: 'two')) = 4. -] - -{ #category : #tests } -XMLStringTest >> testIsContentNode [ - self assert: self newNode isContentNode -] - -{ #category : #tests } -XMLStringTest >> testIsEmpty [ - | node | - - node := self newNode. - self assert: node isEmpty. - - node string: ' '. - self deny: node isEmpty. - - node string: ''. - self assert: node isEmpty. -] - -{ #category : #tests } -XMLStringTest >> testIsStringNode [ - | stringNode | - - self assert: self newNode isStringNode. - - stringNode := self newNode. - self - assert: (stringNode isStringNode: ''); - assert: (stringNode isStringNode: self newNode); - deny: (stringNode isStringNode: 'test'); - deny: (stringNode isStringNode: (self nodeClass string: 'test')). - - stringNode string: 'test'. - self - assert: (stringNode isStringNode: 'test'); - assert: (stringNode isStringNode: (self nodeClass string: 'test')); - deny: (stringNode isStringNode: ''); - deny: (stringNode isStringNode: self newNode). -] - -{ #category : #tests } -XMLStringTest >> testIsWhitespace [ - | stringNode | - - stringNode := self newNode. - self deny: stringNode isWhitespace. - - stringNode string: Character xmlWhitespace. - self assert: stringNode isWhitespace. - - stringNode append: 'non-space'. - self deny: stringNode isWhitespace. -] - -{ #category : #tests } -XMLStringTest >> testMergeAdjacent [ - | element nodes | - - (element := self newElement) - addNode: (self nodeClass string: 'one'); - addNode: (self nodeClass string: 'two'); - addNode: (self nodeClass string: 'three'); - addNode: XMLComment new; - addNode: (self nodeClass string: 'four'); - addNode: (self nodeClass string: 'five'); - addNode: XMLComment new; - addNode: (self nodeClass string: 'six'). - - element nodes second mergeAdjacent. - nodes := element nodes. - self - assert: nodes size = 6; - assert: (nodes first isStringNode and: [nodes first string = 'onetwothree']); - assert: nodes second isComment; - assert: (nodes third isStringNode and: [nodes third string = 'four']); - assert: (nodes fourth isStringNode and: [nodes fourth string = 'five']); - assert: nodes fifth isComment; - assert: (nodes sixth isStringNode and: [nodes sixth string = 'six']). - - nodes fourth mergeAdjacent. - nodes fifth mergeAdjacent. - self - assert: nodes size = 5; - assert: (nodes first isStringNode and: [nodes first string = 'onetwothree']); - assert: nodes second isComment; - assert: (nodes third isStringNode and: [nodes third string = 'fourfive']); - assert: nodes fourth isComment; - assert: (nodes fifth isStringNode and: [nodes fifth string = 'six']). -] - -{ #category : #tests } -XMLStringTest >> testNotEmpty [ - | node | - - node := self newNode. - self deny: node notEmpty. - - node string: ' '. - self assert: node notEmpty. - - node string: ''. - self deny: node notEmpty. -] - -{ #category : #tests } -XMLStringTest >> testPrepend [ - | stringNode | - - stringNode := self newNode. - stringNode prepend: 'three'. - self assert: stringNode string = 'three'. - - stringNode prepend: (self nodeClass string: 'two'). - self assert: stringNode string = 'twothree'. - - stringNode prepend: 'one'. - self assert: stringNode string = 'onetwothree'. -] - -{ #category : #tests } -XMLStringTest >> testReplaceAllWith [ - | stringNode | - - (stringNode := self newNode) replaceAll: 'old' with: 'new'. - self assert: stringNode string = ''. - - stringNode string: 'one old two old three old'. - stringNode replaceAll: 'old' with: (self nodeClass string: 'new'). - self assert: stringNode string = 'one new two new three new'. - - stringNode replaceAll: 'new' with: ''. - self assert: stringNode string = 'one two three '. -] - -{ #category : #tests } -XMLStringTest >> testReplaceFromToWith [ - | stringNode | - - (stringNode := self newNode) replaceFrom: -1 to: -3 with: 'one'. - self assert: stringNode string = 'one'. - - stringNode replaceFrom: 1 to: 0 with: 'zero'. - self assert: stringNode string = 'zeroone'. - - stringNode replaceFrom: 9 to: 7 with: (self nodeClass string: 'fourthree'). - self assert: stringNode string = 'zeroonefourthree'. - - stringNode replaceFrom: 8 to: 11 with: ' two '. - self assert: stringNode string = 'zeroone two three'. - - stringNode replaceFrom: 0 to: 4 with: ''. - self assert: stringNode string = 'one two three'. - - stringNode replaceFrom: 14 to: 13 with: (self nodeClass string: ' four'). - self assert: stringNode string = 'one two three four'. -] - -{ #category : #tests } -XMLStringTest >> testSize [ - self - assert: self newNode size = 0; - assert: (self nodeClass string: 'test') size = 4 -] - -{ #category : #tests } -XMLStringTest >> testSortKey [ - self assert: (self nodeClass string: 'test') sortKey = 'test' -] - -{ #category : #tests } -XMLStringTest >> testSplitAt [ - | stringNode newStringNode element | - - stringNode := self nodeClass string: 'onetwo'. - newStringNode := stringNode splitAt: 0. - self - deny: stringNode == newStringNode; - assert: stringNode string = ''; - assert: newStringNode string = 'onetwo'. - - stringNode := self nodeClass string: 'onetwo'. - newStringNode := stringNode splitAt: 7. - self - deny: stringNode == newStringNode; - assert: stringNode string = 'onetwo'; - assert: newStringNode string = ''. - - (element := self newElement) addNode: stringNode. - newStringNode := stringNode splitAt: 4. - self - deny: stringNode == newStringNode; - assert: stringNode string = 'one'; - assert: newStringNode string = 'two'; - assert: (element nodeAfter: stringNode) == newStringNode. -] - -{ #category : #tests } -XMLStringTest >> testString [ - | stringNode | - - stringNode := self nodeClass string: self markupString. - self - assert: stringNode class == self nodeClass; - assert: stringNode string = self markupString. - - stringNode := self newNode. - self assert: stringNode string = ''. - - stringNode string: self markupString. - self assert: stringNode string = self markupString. - - stringNode string: ''. - self assert: stringNode string = ''. -] - -{ #category : #tests } -XMLStringTest >> testWriteXMLOn [ - self assert: self newNode printString = ''. - self assert: - (self nodeClass string: self markupString) printString = - self escapedString. -] diff --git a/src/XML-Tests-Parser/XMLStubOrderedListCustomCollection.class.st b/src/XML-Tests-Parser/XMLStubOrderedListCustomCollection.class.st deleted file mode 100644 index a7e75df2f..000000000 --- a/src/XML-Tests-Parser/XMLStubOrderedListCustomCollection.class.st +++ /dev/null @@ -1,8 +0,0 @@ -" -This is a stub custom collection for XMLOrderedLists to test that #= and #hash do not depend on the type of the internal collection used. -" -Class { - #name : #XMLStubOrderedListCustomCollection, - #superclass : #OrderedCollection, - #category : #'XML-Tests-Parser-DOM' -} diff --git a/src/XML-Tests-Parser/XMLTempFileManager.class.st b/src/XML-Tests-Parser/XMLTempFileManager.class.st deleted file mode 100644 index 9424b934a..000000000 --- a/src/XML-Tests-Parser/XMLTempFileManager.class.st +++ /dev/null @@ -1,140 +0,0 @@ -" -A class for managing temp files using XMLFileHandles. This has race conditions in it and could leak temp files, so it is only to be used for testing in tests that are normally skipped. -" -Class { - #name : #XMLTempFileManager, - #superclass : #Object, - #instVars : [ - 'uniqueFileNames', - 'streamConverter', - 'fileContents', - 'fileSuffix' - ], - #category : #'XML-Tests-Parser' -} - -{ #category : #'instance creation' } -XMLTempFileManager class >> streamConverter: aStreamConverter fileContents: aString fileSuffix: aSuffix [ - ^ self new - setStreamConverter: aStreamConverter - fileContents: aString - fileSuffix: aSuffix -] - -{ #category : #'file creation' } -XMLTempFileManager >> createFileForHandle: aFileHandle [ - self - createFileWithContents: '' - forHandle: aFileHandle -] - -{ #category : #'file creation' } -XMLTempFileManager >> createFileWithContents: aString forHandle: aFileHandle [ - aFileHandle writeStream - streamConverter: self streamConverter; - nextPutByteOrderMark; - nextPutAll: aString; - close -] - -{ #category : #'file creation' } -XMLTempFileManager >> createFileWithContentsForHandle: aFileHandle [ - self - createFileWithContents: self fileContents - forHandle: aFileHandle -] - -{ #category : #accessing } -XMLTempFileManager >> fileContents [ - ^ fileContents ifNil: [fileContents := ''] -] - -{ #category : #accessing } -XMLTempFileManager >> fileSuffix [ - ^ fileSuffix ifNil: [fileSuffix := '.temp'] -] - -{ #category : #'instance creation' } -XMLTempFileManager >> newFileHandle [ - ^ self newFileHandleWithSuffix: self fileSuffix -] - -{ #category : #'instance creation' } -XMLTempFileManager >> newFileHandleDo: aBlock [ - ^ self - newFileHandleWithSuffix: self fileSuffix - do: aBlock -] - -{ #category : #'instance creation' } -XMLTempFileManager >> newFileHandleWithSuffix: aSuffix [ - | fileHandle | - - "This is an obvious race condition and may also leak temp files, - but it's good enough for tests that are skipped by default. - (must avoid doWhileTrue: for GS compatibility)" - [fileHandle isNil - or: [fileHandle exists]] - whileTrue: [ - fileHandle := - (self newUniqueFileNameWithSuffix: aSuffix) asXMLFileHandle]. - ^ fileHandle. -] - -{ #category : #'instance creation' } -XMLTempFileManager >> newFileHandleWithSuffix: aSuffix do: aBlock [ - | fileHandle | - - "This is an obvious race condition and may also leak temp files, - but it's good enough for tests that are skipped by default." - fileHandle := self newFileHandleWithSuffix: aSuffix. - [aBlock value: fileHandle] - ensure: [ - fileHandle exists - ifTrue: [fileHandle delete]] -] - -{ #category : #'instance creation' } -XMLTempFileManager >> newUniqueFileName [ - ^ self newUniqueFileNameWithSuffix: self fileSuffix -] - -{ #category : #'instance creation' } -XMLTempFileManager >> newUniqueFileNameWithSuffix: aSuffix [ - | uniqueFileName oldSize | - - "Try to come up with a unique file name. - This is good enough for tests that are skipped by default. - (must avoid doWhileTrue: for GS compatibility)" - [uniqueFileName isNil - or: [ - oldSize := self uniqueFileNames size. - (self uniqueFileNames - add: uniqueFileName; - size) = oldSize]] - whileTrue: [ - uniqueFileName := - 'XMLTempFile{1}-{2}{3}' format: - (Array - with: self identityHash asString - with: (0 to: 100000) atRandom asString - with: aSuffix)]. - ^ uniqueFileName. -] - -{ #category : #initialization } -XMLTempFileManager >> setStreamConverter: aStreamConverter fileContents: aString fileSuffix: aSuffix [ - streamConverter := aStreamConverter. - fileContents := aString. - fileSuffix := aSuffix. -] - -{ #category : #accessing } -XMLTempFileManager >> streamConverter [ - ^ streamConverter ifNil: [streamConverter := XMLStreamConverter default] -] - -{ #category : #private } -XMLTempFileManager >> uniqueFileNames [ - ^ uniqueFileNames ifNil: [uniqueFileNames := Set new] -] diff --git a/src/XML-Tests-Parser/XMLURITest.class.st b/src/XML-Tests-Parser/XMLURITest.class.st deleted file mode 100644 index 893b37cde..000000000 --- a/src/XML-Tests-Parser/XMLURITest.class.st +++ /dev/null @@ -1,2183 +0,0 @@ -Class { - #name : #XMLURITest, - #superclass : #TestCase, - #instVars : [ - 'asciiCharacters', - 'reservedCharacters', - 'unreservedCharacters', - 'percentEncodedASCIICharacters', - 'percentEncodedReservedCharacters', - 'percentEncodedAlphaNumericCharacters' - ], - #category : #'XML-Tests-Parser-URI' -} - -{ #category : #private } -XMLURITest class >> generateStandardURICombiningTest [ - "self generateStandardURICombiningTest" - | readStream isFirstTest source | - - readStream := self standardURICombiningTestTemplate readStream. - isFirstTest := true. - source := - String streamContents: [:writeStream | - writeStream nextPutAll: 'testStandardURICombining - | baseURI | - - baseURI := ''', self standardURICombiningTestBaseURI, ''' asXMLURI. - self'. - [readStream atEnd] - whileFalse: [| argument result | - readStream skipTo: $". - argument := readStream upTo: $". - readStream skipTo: $". - result := readStream upTo: $". - (argument isEmpty and: [result isEmpty]) - ifFalse: [ - isFirstTest - ifTrue: [isFirstTest := false] - ifFalse: [writeStream nextPut: $;]. - writeStream nextPutAll: ' - assert: (baseURI / ''', argument, ''' asXMLURI) = ''', result, ''' asXMLURI']]]. - - self - compile: source - classified: 'tests'. -] - -{ #category : #private } -XMLURITest class >> standardURICombiningTestBaseURI [ - ^ 'http://a/b/c/d;p?q' -] - -{ #category : #private } -XMLURITest class >> standardURICombiningTestTemplate [ - ^ ' - "g:h" = "g:h" - "g" = "http://a/b/c/g" - "./g" = "http://a/b/c/g" - "g/" = "http://a/b/c/g/" - "/g" = "http://a/g" - "//g" = "http://g" - "?y" = "http://a/b/c/d;p?y" - "g?y" = "http://a/b/c/g?y" - "#s" = "http://a/b/c/d;p?q#s" - "g#s" = "http://a/b/c/g#s" - "g?y#s" = "http://a/b/c/g?y#s" - ";x" = "http://a/b/c/;x" - "g;x" = "http://a/b/c/g;x" - "g;x?y#s" = "http://a/b/c/g;x?y#s" - "" = "http://a/b/c/d;p?q" - "." = "http://a/b/c/" - "./" = "http://a/b/c/" - ".." = "http://a/b/" - "../" = "http://a/b/" - "../g" = "http://a/b/g" - "../.." = "http://a/" - "../../" = "http://a/" - "../../g" = "http://a/g" - - "../../../g" = "http://a/g" - "../../../../g" = "http://a/g" - - - "/./g" = "http://a/g" - "/../g" = "http://a/g" - "g." = "http://a/b/c/g." - ".g" = "http://a/b/c/.g" - "g.." = "http://a/b/c/g.." - "..g" = "http://a/b/c/..g" - - "./../g" = "http://a/b/g" - "./g/." = "http://a/b/c/g/" - "g/./h" = "http://a/b/c/g/h" - "g/../h" = "http://a/b/c/h" - "g;x=1/./y" = "http://a/b/c/g;x=1/y" - "g;x=1/../y" = "http://a/b/c/y" - - "g?y/./x" = "http://a/b/c/g?y/./x" - "g?y/../x" = "http://a/b/c/g?y/../x" - "g#s/./x" = "http://a/b/c/g#s/./x" - "g#s/../x" = "http://a/b/c/g#s/../x" - - "http:g" = "http:g" -' -] - -{ #category : #accessing } -XMLURITest >> absolute [ - ^ '/absolute/path' -] - -{ #category : #accessing } -XMLURITest >> absoluteDir [ - ^ '/absolute/path/' -] - -{ #category : #accessing } -XMLURITest >> absoluteDirRelativeCombined [ - ^ '/absolute/path/relative/path' -] - -{ #category : #accessing } -XMLURITest >> absoluteDirRelativeCombinedSegments [ - ^ #('' 'absolute' 'path' 'relative' 'path') asOrderedCollection -] - -{ #category : #accessing } -XMLURITest >> absoluteDirSegments [ - ^ #('' 'absolute' 'path' '') asOrderedCollection -] - -{ #category : #accessing } -XMLURITest >> absoluteRelativeCombined [ - ^ '/absolute/relative/path' -] - -{ #category : #accessing } -XMLURITest >> absoluteRelativeCombinedSegments [ - ^ #('' 'absolute' 'relative' 'path') asOrderedCollection -] - -{ #category : #accessing } -XMLURITest >> absoluteSegments [ - ^ #('' 'absolute' 'path') asOrderedCollection -] - -{ #category : #enumerating } -XMLURITest >> allURIStringsDo: aBlock [ - aBlock - value: ''; - value: '/'; - value: self absolute; - value: self absoluteDir; - value: self absoluteDirRelativeCombined; - value: self absoluteRelativeCombined; - value: self domainURIString; - value: self domainURIWithPortString; - value: self emailURIString; - value: self fileURIWithHostString; - value: self fileURIString; - value: self fragmentURIString; - value: self fullURIString; - value: self fullURIWithPortString; - value: self queryURIString; - value: self relative; - value: self relativeAbsoluteCombined; - value: self schemelessURIString; - value: self schemelessURIWithPortString -] - -{ #category : #accessing } -XMLURITest >> alphaNumericCharacters [ - ^ 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789' -] - -{ #category : #accessing } -XMLURITest >> asciiCharacters [ - asciiCharacters ifNil: [ - asciiCharacters := - String streamContents: [:stream | - "0 is ignored for GS compatibility, because it uses it as a string - terminator" - 1 to: 127 do: [:i | - stream nextPut: i asCharacter]]]. - ^ asciiCharacters. -] - -{ #category : #asserting } -XMLURITest >> assertURI: aFirstURI atHostEquals: aSecondURI [ - self assert: aFirstURI host = aSecondURI host. - self - assertURI: aFirstURI - atPortEquals: aSecondURI. -] - -{ #category : #asserting } -XMLURITest >> assertURI: aFirstURI atPathEquals: aSecondURI [ - self assert: aFirstURI pathSegments = aSecondURI pathSegments. - self - assertURI: aFirstURI - atQueryEquals: aSecondURI. -] - -{ #category : #asserting } -XMLURITest >> assertURI: aFirstURI atPortEquals: aSecondURI [ - self assert: aFirstURI port = aSecondURI port. - self - assertURI: aFirstURI - atPathEquals: aSecondURI. -] - -{ #category : #asserting } -XMLURITest >> assertURI: aFirstURI atQueryEquals: aSecondURI [ - self - assert: aFirstURI query = aSecondURI query; - assert: aFirstURI fragment = aSecondURI fragment -] - -{ #category : #asserting } -XMLURITest >> assertURI: aFirstURI atUserInfoEquals: aSecondURI [ - self assert: aFirstURI userInfo = aSecondURI userInfo. - self - assertURI: aFirstURI - atHostEquals: aSecondURI. -] - -{ #category : #accessing } -XMLURITest >> domainURIString [ - ^ 'http://www.example.com' -] - -{ #category : #accessing } -XMLURITest >> domainURIWithPortString [ - ^ self domainURIString, ':80' -] - -{ #category : #accessing } -XMLURITest >> emailURIString [ - ^ 'mailto:userName@', self host -] - -{ #category : #accessing } -XMLURITest >> fileURIString [ - ^ 'file://', self absolute -] - -{ #category : #accessing } -XMLURITest >> fileURIWithHostString [ - ^ 'file://', self host, self absolute -] - -{ #category : #accessing } -XMLURITest >> fragment [ - ^ self fragmentURIString allButFirst -] - -{ #category : #accessing } -XMLURITest >> fragmentURIString [ - ^ '#fragmentID' -] - -{ #category : #accessing } -XMLURITest >> fullURIString [ - ^ self domainURIString, self absolute, self queryURIString, self fragmentURIString -] - -{ #category : #accessing } -XMLURITest >> fullURIWithPortString [ - ^ self domainURIWithPortString, self absolute, self queryURIString, self fragmentURIString -] - -{ #category : #accessing } -XMLURITest >> host [ - ^ self domainURIString copyAfterLast: $/ -] - -{ #category : #accessing } -XMLURITest >> nonPercentEncodedPathCharacters [ - ^ self unreservedCharacters, self subDelimiterCharacters, ':@' -] - -{ #category : #converting } -XMLURITest >> percentEncodeCharacter: aCharacter [ - ^ XMLStreamAdapterTest percentEncodeCharacter: aCharacter -] - -{ #category : #converting } -XMLURITest >> percentEncodeCharacters: aCharacterCollection [ - ^ XMLStreamAdapterTest percentEncodeCharacters: aCharacterCollection -] - -{ #category : #accessing } -XMLURITest >> percentEncodedASCIICharacters [ - ^ percentEncodedASCIICharacters - ifNil: [ - percentEncodedASCIICharacters := - self percentEncodeCharacters: self asciiCharacters] -] - -{ #category : #accessing } -XMLURITest >> percentEncodedAlphaNumericCharacters [ - ^ percentEncodedAlphaNumericCharacters - ifNil: [ - percentEncodedAlphaNumericCharacters := - self percentEncodeCharacters: self alphaNumericCharacters] -] - -{ #category : #accessing } -XMLURITest >> percentEncodedReservedCharacters [ - percentEncodedReservedCharacters ifNil: [ - percentEncodedReservedCharacters := - String streamContents: [:stream | - self reservedCharacters do: [:each | - stream nextPutAll: (self percentEncodeCharacter: each)]]]. - ^ percentEncodedReservedCharacters. -] - -{ #category : #accessing } -XMLURITest >> query [ - ^ OrderedCollection - with: 'name1' -> 'value1' - with: 'name2' -> 'value2' - with: 'name1' -> 'value3' -] - -{ #category : #accessing } -XMLURITest >> queryURIString [ - ^ '?name1=value1&name2=value2&name1=value3' -] - -{ #category : #accessing } -XMLURITest >> relative [ - ^ 'relative/path' -] - -{ #category : #accessing } -XMLURITest >> relativeAbsoluteCombined [ - ^ 'relative/absolute/path' -] - -{ #category : #accessing } -XMLURITest >> relativeAbsoluteCombinedSegments [ - ^ #('relative' 'absolute' 'path') asOrderedCollection -] - -{ #category : #accessing } -XMLURITest >> relativeSegments [ - ^ #('relative' 'path') asOrderedCollection -] - -{ #category : #accessing } -XMLURITest >> reservedCharacters [ - reservedCharacters - ifNil: [ - reservedCharacters := - String streamContents: [:stream | - self asciiCharacters do: [:each | - (self unreservedCharacters includes: each) - ifFalse: [stream nextPut: each]]]]. - ^ reservedCharacters. -] - -{ #category : #accessing } -XMLURITest >> schemelessURIString [ - ^ (self domainURIString copyAfter: $:), self absolute, self queryURIString, self fragmentURIString -] - -{ #category : #accessing } -XMLURITest >> schemelessURIWithPortString [ - ^ (self domainURIWithPortString copyAfter: $:), self absolute, self queryURIString, self fragmentURIString -] - -{ #category : #accessing } -XMLURITest >> subDelimiterCharacters [ - ^ '!$&''()*+,;=' -] - -{ #category : #tests } -XMLURITest >> testAsRetrievableResource [ - (XMLFileHandle hasSupportedImplementation - and: [XMLHTTPRequest hasSupportedImplementation]) - ifFalse: [^ self]. - - self allURIStringsDo: [:each | | uri retrievableResource | - uri := each asXMLURI. - "other types of URIs may not be retrievable" - (uri isLocal - or: [uri isHTTP]) - ifTrue: [ - retrievableResource := uri asRetrievableResource. - uri isLocal - ifTrue: [ - self assert: - retrievableResource class == - XMLFileHandle implementation. - self assert: retrievableResource path = uri path] - ifFalse: [ - self assert: - retrievableResource class == - XMLHTTPRequest implementation. - self assert: retrievableResource url = uri printString]]]. -] - -{ #category : #tests } -XMLURITest >> testAsString [ - self allURIStringsDo: [:each | | uri | - uri := each asXMLURI. - self assert: uri asString = uri printString] -] - -{ #category : #tests } -XMLURITest >> testAsXMLFileHandle [ - XMLFileHandle hasSupportedImplementation - ifFalse: [^ self]. - - self allURIStringsDo: [:each | | uri fileHandle | - uri := each asXMLURI. - uri isLocal - ifTrue: [ - fileHandle := uri asXMLFileHandle. - self - assert: fileHandle class == XMLFileHandle implementation; - assert: fileHandle path = uri path] - ifFalse: [ - self - should: [uri asXMLFileHandle] - raise: XMLFileException]]. -] - -{ #category : #tests } -XMLURITest >> testAsXMLHTTPRequest [ - XMLHTTPRequest hasSupportedImplementation - ifFalse: [^ self]. - - self allURIStringsDo: [:each | | uri request | - uri := each asXMLURI. - (uri isRelative - or: [uri isHTTP]) - ifTrue: [ - request := uri asXMLHTTPRequest. - self - assert: request class == XMLHTTPRequest implementation; - assert: request url = uri printString] - ifFalse: [ - "do not assume HTTPS is supported even if HTTP is" - uri isHTTPS - ifFalse: [ - self - should: [uri asXMLHTTPRequest] - raise: XMLHTTPException]]]. -] - -{ #category : #tests } -XMLURITest >> testAsXMLURI [ - self allURIStringsDo: [:each | | uri | - uri := XMLURI fromString: each. - self - assert: uri class == XMLURI; - assert: uri uriString = each; - assert: uri asXMLURI == uri] -] - -{ #category : #tests } -XMLURITest >> testCombining [ - self allURIStringsDo: [:uriString | | uri | - uri := uriString asXMLURI. - self allURIStringsDo: [:uriStringToCombineWith | | uriToCombineWith combinedURI | - uriToCombineWith := uriStringToCombineWith asXMLURI. - combinedURI := uri / uriToCombineWith. - uriToCombineWith isRelative - ifTrue: [ - self assert: combinedURI scheme = uri scheme. - uriToCombineWith hasUserInfo - ifTrue: [ - self - assertURI: combinedURI - atUserInfoEquals: uriToCombineWith] - ifFalse: [ - self assert: combinedURI userInfo = uri userInfo. - uriToCombineWith hasHost - ifTrue: [ - self - assertURI: combinedURI - atHostEquals: uriToCombineWith] - ifFalse: [ - self assert: combinedURI host = uri host. - uriToCombineWith hasPort - ifTrue: [ - self - assertURI: combinedURI - atPortEquals: uriToCombineWith] - ifFalse: [ - self assert: combinedURI port = uri port. - uriToCombineWith hasPath - ifTrue: [ - uriToCombineWith hasAbsolutePath - ifTrue: [ - self - assertURI: combinedURI - atPathEquals: uriToCombineWith] - ifFalse: [self deny: combinedURI = uri path]] - ifFalse: [ - self assert: combinedURI pathSegments = uri pathSegments. - uriToCombineWith hasQuery - ifTrue: [ - self - assertURI: combinedURI - atQueryEquals: uriToCombineWith] - ifFalse: [ - self assert: combinedURI query = uri query. - uriToCombineWith hasFragment - ifTrue: [ - self assert: - combinedURI fragment = - uriToCombineWith fragment] - ifFalse: [ - self assert: - combinedURI fragment = - uri fragment]]]]]]. - uriToCombineWith isEmpty - ifTrue: [self assert: combinedURI == uri] - ifFalse: [self deny: combinedURI == uri]] - ifFalse: [ - "if the arg was an absolute URI, it should have been returned" - self assert: combinedURI == uriToCombineWith]. - "receiver and arg should be unchanged by combining" - self - assert: uri = uriString asXMLURI; - assert: uriToCombineWith = uriStringToCombineWith asXMLURI]] -] - -{ #category : #tests } -XMLURITest >> testCombiningAbsoluteURIs [ - | domainURI fullURI fileURI | - - domainURI := self domainURIString asXMLURI. - fullURI := self fullURIString asXMLURI. - fileURI := self fileURIString asXMLURI. - self - assert: domainURI / self fullURIString = fullURI; - assert: domainURI / self domainURIString = domainURI; - assert: domainURI / self fileURIString = fileURI; - assert: fullURI / self fullURIString = fullURI; - assert: fullURI / self domainURIString = domainURI; - assert: fullURI / self fileURIString = fileURI; - assert: fileURI / self fullURIString = fullURI; - assert: fileURI / self domainURIString = domainURI; - assert: fileURI / self fileURIString = fileURI. -] - -{ #category : #tests } -XMLURITest >> testCombiningDotPathURIs [ - | relativePathURI absolutePathURI fullURI | - - relativePathURI := self relative asXMLURI. - self - assert: relativePathURI / '.' = 'relative/' asXMLURI; - assert: relativePathURI / './.' = 'relative/' asXMLURI; - assert: relativePathURI / './path' = relativePathURI; - assert: relativePathURI / ('.' , self absolute) = self relativeAbsoluteCombined asXMLURI. - - absolutePathURI := self absolute asXMLURI. - self - assert: absolutePathURI / '.' = '/absolute/' asXMLURI; - assert: absolutePathURI / './.' = '/absolute/' asXMLURI; - assert: absolutePathURI / './path' = absolutePathURI; - assert: absolutePathURI / ('./' , self relative) = self absoluteRelativeCombined asXMLURI. - - fullURI := self fullURIString asXMLURI. - self - assert: fullURI / '.' = (self domainURIString , '/absolute/') asXMLURI; - assert: fullURI / './.' = (self domainURIString , '/absolute/') asXMLURI; - assert: fullURI / './path' = (self domainURIString , self absolute) asXMLURI; - assert: fullURI / ('./' , self relative) = (self domainURIString , self absoluteRelativeCombined) asXMLURI. -] - -{ #category : #tests } -XMLURITest >> testCombiningDoubleDotPathURIs [ - | relativePathURI absolutePathURI fullURI | - - relativePathURI := self relative asXMLURI. - self - assert: (relativePathURI / '..') isEmpty; - assert: (relativePathURI / '../..') isEmpty; - assert: relativePathURI / ('..' , self absolute) = 'absolute/path' asXMLURI; - assert: relativePathURI / ('../..' , self absolute) = 'absolute/path' asXMLURI; - assert: relativePathURI / ('../..' , self absolute , '/..') = 'absolute/' asXMLURI; - assert: (relativePathURI / ('../..' , self absolute , '/../..')) isEmpty. - - absolutePathURI := self absolute asXMLURI. - self - assert: (absolutePathURI / '..') hasRootPath; - assert: (absolutePathURI / '../..') isEmpty; - assert: absolutePathURI / ('..' , self absolute) = absolutePathURI; - assert: absolutePathURI / ('../..' , self absolute) = 'absolute/path' asXMLURI; - assert: absolutePathURI / ('../..' , self absolute , '/..') = 'absolute/' asXMLURI; - assert: (absolutePathURI / ('../..' , self absolute , '/../..')) isEmpty. - - fullURI := self fullURIString asXMLURI. - self - assert: (fullURI / '..') hasRootPath; - deny: (fullURI / '../..') hasPath; - assert: fullURI / ('..' , self absolute) = (self domainURIString , self absolute) asXMLURI; - assert: fullURI / ('../..' , self absolute) = (self domainURIString , self absolute) asXMLURI; - assert: fullURI / ('../..' , self absolute , '/..') = (self domainURIString , '/absolute/') asXMLURI; - assert: fullURI / ('../..' , self absolute , '/../') = (self domainURIString , '/absolute/') asXMLURI. -] - -{ #category : #tests } -XMLURITest >> testCombiningRelativeURIs [ - | domainURI domainURIWithPort absolutePathURI absoluteDirPathURI | - - domainURI := self domainURIString asXMLURI. - domainURIWithPort := self domainURIWithPortString asXMLURI. - absolutePathURI := (self domainURIString , self absolute) asXMLURI. - absoluteDirPathURI := (self domainURIString , self absoluteDir) asXMLURI. - self - assert: domainURI / self relative = (self domainURIString , '/' , self relative) asXMLURI; - assert: domainURI / self absolute = (self domainURIString , self absolute) asXMLURI; - assert: domainURI / self absoluteDir = (self domainURIString , self absoluteDir) asXMLURI; - assert: domainURIWithPort / self relative = (self domainURIWithPortString , '/' , self relative) asXMLURI; - assert: domainURIWithPort / self absolute = (self domainURIWithPortString , self absolute) asXMLURI; - assert: domainURIWithPort / self absoluteDir = (self domainURIWithPortString , self absoluteDir) asXMLURI; - assert: absolutePathURI / self relative = (self domainURIString , self absoluteRelativeCombined) asXMLURI; - assert: absoluteDirPathURI / self relative = (self domainURIString , self absoluteDirRelativeCombined) asXMLURI; - assert: absolutePathURI / self queryURIString = (self domainURIString , self absolute , self queryURIString) asXMLURI; - assert: absolutePathURI / self fragmentURIString = (self domainURIString , self absolute , self fragmentURIString) asXMLURI; - assert: domainURI / self schemelessURIString = self fullURIString asXMLURI. -] - -{ #category : #tests } -XMLURITest >> testCopy [ - self allURIStringsDo: [:each | | uri copy | - uri := each asXMLURI. - copy := uri copy. - self - assert: uri uriString = each; - assert: copy uriString isNil; - assert: uri = each asXMLURI; - deny: uri == copy; - assert: uri = copy; - assert: uri scheme = copy scheme; - assert: uri hasAuthorityPrefix = copy hasAuthorityPrefix; - assert: uri userInfo = copy userInfo; - assert: uri host = copy host; - assert: uri port = copy port; - assert: uri pathSegments = copy pathSegments; - assert: uri query = copy query; - assert: uri fragment = copy fragment] -] - -{ #category : #tests } -XMLURITest >> testCopyWithFragment [ - self allURIStringsDo: [:each | | uri oldFragment newFragment copy | - uri := each asXMLURI. - oldFragment := uri fragment. - newFragment := oldFragment, 'new'. - copy := uri copyWithFragment: newFragment. - self - assert: uri = each asXMLURI; - assert: uri uriString = each; - assert: copy uriString isNil; - deny: uri == copy; - deny: uri = copy; - assert: uri scheme = copy scheme; - assert: uri hasAuthorityPrefix = copy hasAuthorityPrefix; - assert: uri userInfo = copy userInfo; - assert: uri host = copy host; - assert: uri port = copy port; - assert: uri pathSegments = copy pathSegments; - assert: uri query = copy query; - deny: uri fragment = copy fragment; - assert: uri fragment = oldFragment; - assert: copy fragment = newFragment] -] - -{ #category : #tests } -XMLURITest >> testCopyWithHost [ - self allURIStringsDo: [:each | | uri oldHost newHost copy | - uri := each asXMLURI. - oldHost := uri host. - newHost := oldHost, 'new'. - copy := uri copyWithHost: newHost. - self - assert: uri = each asXMLURI; - assert: uri uriString = each; - assert: copy uriString isNil; - deny: uri == copy; - deny: uri = copy; - assert: uri scheme = copy scheme; - assert: uri hasAuthorityPrefix = copy hasAuthorityPrefix; - assert: uri userInfo = copy userInfo; - deny: uri host = copy host; - assert: uri host = oldHost; - assert: copy host = newHost; - assert: uri port = copy port; - assert: uri pathSegments = copy pathSegments; - assert: uri query = copy query; - assert: uri fragment = copy fragment] -] - -{ #category : #tests } -XMLURITest >> testCopyWithPath [ - self allURIStringsDo: [:each | | uri oldPath newPath copy | - uri := each asXMLURI. - oldPath := uri path. - newPath := oldPath, '/new'. - copy := uri copyWithPath: newPath. - self - assert: uri = each asXMLURI; - assert: uri uriString = each; - assert: copy uriString isNil; - deny: uri == copy; - deny: uri = copy; - assert: uri scheme = copy scheme; - assert: uri hasAuthorityPrefix = copy hasAuthorityPrefix; - assert: uri userInfo = copy userInfo; - assert: uri host = copy host; - assert: uri port = copy port; - deny: uri path = copy path; - assert: uri path = oldPath; - assert: copy path = newPath; - assert: uri query = copy query; - assert: uri fragment = copy fragment] -] - -{ #category : #tests } -XMLURITest >> testCopyWithPathSegments [ - self allURIStringsDo: [:each | | uri oldPathSegments oldRawPathSegments newPathSegments newRawPathSegments copy | - uri := each asXMLURI. - oldPathSegments := uri pathSegments. - oldRawPathSegments := uri rawPathSegments. - newPathSegments := oldPathSegments copyWith: 'new', self reservedCharacters. - newRawPathSegments := - oldRawPathSegments copyWith: 'new', self percentEncodedReservedCharacters. - copy := uri copyWithPathSegments: newPathSegments. - self - assert: uri = each asXMLURI; - assert: uri uriString = each; - assert: copy uriString isNil; - deny: uri == copy; - deny: uri = copy; - assert: uri scheme = copy scheme; - assert: uri hasAuthorityPrefix = copy hasAuthorityPrefix; - assert: uri userInfo = copy userInfo; - assert: uri host = copy host; - assert: uri port = copy port; - deny: uri pathSegments = copy pathSegments; - deny: uri rawPathSegments = copy rawPathSegments; - assert: uri pathSegments = oldPathSegments; - assert: uri rawPathSegments = oldRawPathSegments; - assert: copy pathSegments = newPathSegments; - assert: copy rawPathSegments = newRawPathSegments; - assert: uri query = copy query; - assert: uri fragment = copy fragment] -] - -{ #category : #tests } -XMLURITest >> testCopyWithPort [ - self allURIStringsDo: [:each | | uri oldPort newPort copy | - uri := each asXMLURI. - oldPort := uri port. - newPort := (oldPort ifNil: [0]) + 1. - copy := uri copyWithPort: newPort. - self - assert: uri = each asXMLURI; - assert: uri uriString = each; - assert: copy uriString isNil; - deny: uri == copy; - deny: uri = copy; - assert: uri scheme = copy scheme; - assert: uri hasAuthorityPrefix = copy hasAuthorityPrefix; - assert: uri userInfo = copy userInfo; - assert: uri host = copy host; - deny: uri port = copy port; - assert: uri port = oldPort; - assert: copy port = newPort; - assert: uri pathSegments = copy pathSegments; - assert: uri query = copy query; - assert: uri fragment = copy fragment] -] - -{ #category : #tests } -XMLURITest >> testCopyWithQuery [ - self allURIStringsDo: [:each | - | uri oldQuery oldRawQuery newQuery newRawQuery copy | - uri := each asXMLURI. - oldQuery := uri query. - oldRawQuery := uri rawQuery. - newQuery := - oldQuery copyWith: - ('newKey', self reservedCharacters) -> - ('newValue', self reservedCharacters). - newRawQuery := - oldRawQuery copyWith: - ('newKey', self percentEncodedReservedCharacters) -> - ('newValue', self percentEncodedReservedCharacters). - copy := uri copyWithQuery: newQuery. - self - assert: uri = each asXMLURI; - assert: uri uriString = each; - assert: copy uriString isNil; - deny: uri == copy; - deny: uri = copy; - assert: uri scheme = copy scheme; - assert: uri hasAuthorityPrefix = copy hasAuthorityPrefix; - assert: uri userInfo = copy userInfo; - assert: uri host = copy host; - assert: uri port = copy port; - assert: uri pathSegments = copy pathSegments; - deny: uri query = copy query; - deny: uri rawQuery = copy rawQuery; - assert: uri query = oldQuery; - assert: uri rawQuery = oldRawQuery; - assert: copy query = newQuery; - assert: copy rawQuery = newRawQuery; - assert: uri fragment = copy fragment] -] - -{ #category : #tests } -XMLURITest >> testCopyWithScheme [ - self allURIStringsDo: [:each | | uri oldScheme oldHasAuthorityPrefix newScheme copy | - uri := each asXMLURI. - oldScheme := uri scheme. - oldHasAuthorityPrefix := uri hasAuthorityPrefix. - newScheme := oldScheme, 'new'. - copy := uri copyWithScheme: newScheme. - self - assert: uri = each asXMLURI; - assert: uri uriString = each; - assert: copy uriString isNil; - deny: uri == copy; - deny: uri = copy; - deny: uri scheme = copy scheme; - assert: uri scheme = oldScheme; - assert: copy scheme = newScheme; - assert: uri hasAuthorityPrefix = oldHasAuthorityPrefix. - "If the original had no scheme and no // prefix, then the copy should - gain one. Otherwise it should only have one if the original did." - (oldScheme = '' - and: [oldHasAuthorityPrefix not]) - ifTrue: [self assert: copy hasAuthorityPrefix] - ifFalse: [self assert: copy hasAuthorityPrefix = oldHasAuthorityPrefix]. - self - assert: uri userInfo = copy userInfo; - assert: uri host = copy host; - assert: uri port = copy port; - assert: uri pathSegments = copy pathSegments; - assert: uri query = copy query; - assert: uri fragment = copy fragment] -] - -{ #category : #tests } -XMLURITest >> testCopyWithUserInfo [ - self allURIStringsDo: [:each | | uri oldUserInfo oldRawUserInfo newUserInfo newRawUserInfo copy | - uri := each asXMLURI. - oldUserInfo := uri userInfo. - oldRawUserInfo := uri rawUserInfo. - newUserInfo := oldUserInfo, 'new', self reservedCharacters. - newRawUserInfo := oldUserInfo, 'new', self percentEncodedReservedCharacters. - copy := uri copyWithUserInfo: newUserInfo. - self - assert: uri = each asXMLURI; - assert: uri uriString = each; - assert: copy uriString isNil; - deny: uri == copy; - deny: uri = copy; - assert: uri scheme = copy scheme; - assert: uri hasAuthorityPrefix = copy hasAuthorityPrefix; - deny: uri userInfo = copy userInfo; - deny: uri rawUserInfo = copy rawUserInfo; - assert: uri userInfo = oldUserInfo; - assert: uri rawUserInfo = oldRawUserInfo; - assert: copy userInfo = newUserInfo; - assert: copy rawUserInfo = newRawUserInfo; - assert: uri host = copy host; - assert: uri port = copy port; - assert: uri pathSegments = copy pathSegments; - assert: uri query = copy query; - assert: uri fragment = copy fragment] -] - -{ #category : #tests } -XMLURITest >> testDefaultAuthorityPrefixPrinting [ - | uri copy | - - uri := '' asXMLURI. - - copy := uri copyWithUserInfo: 'userInfo'. - self assert: copy printString = ('//userInfo@'). - - copy := uri copyWithHost: self host. - self assert: copy printString = ('//', self host). - - copy := uri copyWithPort: 80. - self assert: copy printString = '//:80'. - - copy := uri copyWithPath: self relative. - self assert: copy printString = self relative. - - copy := uri copyWithPath: self absolute. - self assert: copy printString = self absolute. - - copy := uri copyWithQuery: self query. - self assert: copy printString = self queryURIString. - - copy := uri copyWithFragment: self fragment. - self assert: copy printString = self fragmentURIString. -] - -{ #category : #tests } -XMLURITest >> testDefaultPathPrefixPrinting [ - | uri copy | - - uri := self relative asXMLURI. - - copy := uri copyWithUserInfo: 'userInfo'. - self assert: copy printString = ('//userInfo@/', self relative). - - copy := uri copyWithHost: self host. - self assert: copy printString = ('//', self host, '/', self relative). - - copy := uri copyWithPort: 80. - self assert: copy printString = ('//:80/', self relative). - - copy := uri copyWithScheme: 'http'. - self assert: copy printString = ('http:///', self relative). - - copy := uri copyWithQuery: self query. - self assert: copy printString = (self relative, self queryURIString). - - copy := uri copyWithFragment: self fragment. - self assert: copy printString = (self relative, self fragmentURIString). -] - -{ #category : #tests } -XMLURITest >> testEquals [ - self allURIStringsDo: [:each | | uri otherURI | - uri := each asXMLURI. - - otherURI := each asXMLURI. - self - assert: uri = otherURI; - assert: otherURI = uri. - otherURI scheme: uri scheme, 'new'. - self - deny: uri = otherURI; - deny: otherURI = uri. - - otherURI := each asXMLURI. - self - assert: uri = otherURI; - assert: otherURI = uri. - otherURI rawUserInfo: uri userInfo, 'new'. - self - deny: uri = otherURI; - deny: otherURI = uri. - - otherURI := each asXMLURI. - self - assert: uri = otherURI; - assert: otherURI = uri. - otherURI rawHost: uri host, 'new'. - self - deny: uri = otherURI; - deny: otherURI = uri. - - otherURI := each asXMLURI. - self - assert: uri = otherURI; - assert: otherURI = uri. - otherURI rawPathSegments: (uri pathSegments copyWith: 'new'). - self - deny: uri = otherURI; - deny: otherURI = uri. - - otherURI := each asXMLURI. - self - assert: uri = otherURI; - assert: otherURI = uri. - otherURI rawQuery: - (uri query copy - add: 'new' -> ''; - yourself). - self - deny: uri = otherURI; - deny: otherURI = uri. - - otherURI := each asXMLURI. - self - assert: uri = otherURI; - assert: otherURI = uri. - otherURI rawFragment: uri fragment, 'new'. - self - deny: uri = otherURI; - deny: otherURI = uri] -] - -{ #category : #tests } -XMLURITest >> testFragment [ - self - assert: '' asXMLURI fragment = ''; - assert: '/' asXMLURI fragment = ''; - assert: self absolute asXMLURI fragment = ''; - assert: self absoluteDir asXMLURI fragment = ''; - assert: self absoluteDirRelativeCombined asXMLURI fragment = ''; - assert: self absoluteRelativeCombined asXMLURI fragment = ''; - assert: self domainURIString asXMLURI fragment = ''; - assert: self domainURIWithPortString asXMLURI fragment = ''; - assert: self emailURIString asXMLURI fragment = ''; - assert: self fileURIWithHostString asXMLURI fragment = ''; - assert: self fileURIString asXMLURI fragment = ''; - assert: self fragmentURIString asXMLURI fragment = self fragment; - assert: self fullURIString asXMLURI fragment = self fragment; - assert: self fullURIWithPortString asXMLURI fragment = self fragment; - assert: self queryURIString asXMLURI fragment = ''; - assert: self relative asXMLURI fragment = ''; - assert: self relativeAbsoluteCombined asXMLURI fragment = ''; - assert: self schemelessURIString asXMLURI fragment = self fragment; - assert: self schemelessURIWithPortString asXMLURI fragment = self fragment -] - -{ #category : #tests } -XMLURITest >> testFragmentNonPercentEncodedCharacters [ - | fragment uriString uri | - - fragment := self nonPercentEncodedPathCharacters , '/?'. - uriString := '#', fragment. - uri := uriString asXMLURI. - self - assert: uri fragment = fragment; - assert: uri rawFragment = fragment. - - uri uriString: nil. - self assert: uri printString = uriString. -] - -{ #category : #tests } -XMLURITest >> testFragmentPercentEncodedCharacters [ - | encoded decoded encodedURIString uri | - - encoded := self percentEncodedASCIICharacters, '+'. - decoded := self asciiCharacters, '+'. - encodedURIString := '#', encoded. - uri := encodedURIString asXMLURI. - self - assert: uri fragment = decoded; - assert: uri rawFragment = encoded. - - uri uriString: nil. - self assert: uri printString = encodedURIString. -] - -{ #category : #tests } -XMLURITest >> testFromStream [ - self allURIStringsDo: [:each | | stream uri | - stream := each readStream. - uri := XMLURI fromStream: stream. - self - assert: uri class == XMLURI; - assert: uri uriString isNil; - assert: uri = each asXMLURI; - assert: stream atEnd] -] - -{ #category : #tests } -XMLURITest >> testFromString [ - self allURIStringsDo: [:each | | uri | - uri := XMLURI fromString: each. - self - assert: uri class == XMLURI; - assert: uri uriString = each; - assert: uri = each asXMLURI] -] - -{ #category : #tests } -XMLURITest >> testHasAbsolutePath [ - self - deny: '' asXMLURI hasAbsolutePath; - assert: '/' asXMLURI hasAbsolutePath; - assert: self absolute asXMLURI hasAbsolutePath; - assert: self absoluteDir asXMLURI hasAbsolutePath; - assert: self absoluteDirRelativeCombined asXMLURI hasAbsolutePath; - assert: self absoluteRelativeCombined asXMLURI hasAbsolutePath; - deny: self domainURIString asXMLURI hasAbsolutePath; - deny: self domainURIWithPortString asXMLURI hasAbsolutePath; - deny: self emailURIString asXMLURI hasAbsolutePath; - assert: self fileURIWithHostString asXMLURI hasAbsolutePath; - assert: self fileURIString asXMLURI hasAbsolutePath; - deny: self fragmentURIString asXMLURI hasAbsolutePath; - assert: self fullURIString asXMLURI hasAbsolutePath; - assert: self fullURIWithPortString asXMLURI hasAbsolutePath; - deny: self queryURIString asXMLURI hasAbsolutePath; - deny: self relative asXMLURI hasAbsolutePath; - deny: self relativeAbsoluteCombined asXMLURI hasAbsolutePath; - assert: self schemelessURIString asXMLURI hasAbsolutePath; - assert: self schemelessURIWithPortString asXMLURI hasAbsolutePath -] - -{ #category : #tests } -XMLURITest >> testHasAuthority [ - self - deny: '' asXMLURI hasAuthority; - deny: '/' asXMLURI hasAuthority; - deny: self absolute asXMLURI hasAuthority; - deny: self absoluteDir asXMLURI hasAuthority; - deny: self absoluteDirRelativeCombined asXMLURI hasAuthority; - deny: self absoluteRelativeCombined asXMLURI hasAuthority; - assert: self domainURIString asXMLURI hasAuthority; - assert: self domainURIWithPortString asXMLURI hasAuthority; - assert: self emailURIString asXMLURI hasAuthority; - assert: self fileURIWithHostString asXMLURI hasAuthority; - deny: self fileURIString asXMLURI hasAuthority; - deny: self fragmentURIString asXMLURI hasAuthority; - assert: self fullURIString asXMLURI hasAuthority; - assert: self fullURIWithPortString asXMLURI hasAuthority; - deny: self queryURIString asXMLURI hasAuthority; - deny: self relative asXMLURI hasAuthority; - deny: self relativeAbsoluteCombined asXMLURI hasAuthority; - assert: self schemelessURIString asXMLURI hasAuthority; - assert: self schemelessURIWithPortString asXMLURI hasAuthority -] - -{ #category : #tests } -XMLURITest >> testHasAuthorityPrefix [ - self - deny: '' asXMLURI hasAuthorityPrefix; - deny: '/' asXMLURI hasAuthorityPrefix; - deny: self absolute asXMLURI hasAuthorityPrefix; - deny: self absoluteDir asXMLURI hasAuthorityPrefix; - deny: self absoluteDirRelativeCombined asXMLURI hasAuthorityPrefix; - deny: self absoluteRelativeCombined asXMLURI hasAuthorityPrefix; - assert: self domainURIString asXMLURI hasAuthorityPrefix; - assert: self domainURIWithPortString asXMLURI hasAuthorityPrefix; - deny: self emailURIString asXMLURI hasAuthorityPrefix; - assert: self fileURIWithHostString asXMLURI hasAuthorityPrefix; - assert: self fileURIString asXMLURI hasAuthorityPrefix; - deny: self fragmentURIString asXMLURI hasAuthorityPrefix; - assert: self fullURIString asXMLURI hasAuthorityPrefix; - assert: self fullURIWithPortString asXMLURI hasAuthorityPrefix; - deny: self queryURIString asXMLURI hasAuthorityPrefix; - deny: self relative asXMLURI hasAuthorityPrefix; - deny: self relativeAbsoluteCombined asXMLURI hasAuthorityPrefix; - assert: self schemelessURIString asXMLURI hasAuthorityPrefix; - assert: self schemelessURIWithPortString asXMLURI hasAuthorityPrefix -] - -{ #category : #tests } -XMLURITest >> testHasDirectoryPath [ - self - deny: '' asXMLURI hasDirectoryPath; - assert: '/' asXMLURI hasDirectoryPath; - deny: self absolute asXMLURI hasDirectoryPath; - assert: self absoluteDir asXMLURI hasDirectoryPath; - deny: self absoluteDirRelativeCombined asXMLURI hasDirectoryPath; - deny: self absoluteRelativeCombined asXMLURI hasDirectoryPath; - deny: self domainURIString asXMLURI hasDirectoryPath; - deny: self domainURIWithPortString asXMLURI hasDirectoryPath; - deny: self emailURIString asXMLURI hasDirectoryPath; - deny: self fileURIWithHostString asXMLURI hasDirectoryPath; - deny: self fileURIString asXMLURI hasDirectoryPath; - deny: self fragmentURIString asXMLURI hasDirectoryPath; - deny: self fullURIString asXMLURI hasDirectoryPath; - deny: self fullURIWithPortString asXMLURI hasDirectoryPath; - deny: self queryURIString asXMLURI hasDirectoryPath; - deny: self relative asXMLURI hasDirectoryPath; - deny: self relativeAbsoluteCombined asXMLURI hasDirectoryPath; - deny: self schemelessURIString asXMLURI hasDirectoryPath; - deny: self schemelessURIWithPortString asXMLURI hasDirectoryPath -] - -{ #category : #tests } -XMLURITest >> testHasFragment [ - self allURIStringsDo: [:each | | uri | - uri := each asXMLURI. - (each includes: $#) - ifTrue: [self assert: uri hasFragment] - ifFalse: [self deny: uri hasFragment]] -] - -{ #category : #tests } -XMLURITest >> testHasHost [ - self - deny: '' asXMLURI hasHost; - deny: '/' asXMLURI hasHost; - deny: self absolute asXMLURI hasHost; - deny: self absoluteDir asXMLURI hasHost; - deny: self absoluteDirRelativeCombined asXMLURI hasHost; - deny: self absoluteRelativeCombined asXMLURI hasHost; - assert: self domainURIString asXMLURI hasHost; - assert: self domainURIWithPortString asXMLURI hasHost; - assert: self emailURIString asXMLURI hasHost; - assert: self fileURIWithHostString asXMLURI hasHost; - deny: self fileURIString asXMLURI hasHost; - deny: self fragmentURIString asXMLURI hasHost; - assert: self fullURIString asXMLURI hasHost; - assert: self fullURIWithPortString asXMLURI hasHost; - deny: self queryURIString asXMLURI hasHost; - deny: self relative asXMLURI hasHost; - deny: self relativeAbsoluteCombined asXMLURI hasHost; - assert: self schemelessURIString asXMLURI hasHost; - assert: self schemelessURIWithPortString asXMLURI hasHost -] - -{ #category : #tests } -XMLURITest >> testHasNonDirectoryPath [ - self - deny: '' asXMLURI hasNonDirectoryPath; - deny: '/' asXMLURI hasNonDirectoryPath; - assert: self absolute asXMLURI hasNonDirectoryPath; - deny: self absoluteDir asXMLURI hasNonDirectoryPath; - assert: self absoluteDirRelativeCombined asXMLURI hasNonDirectoryPath; - assert: self absoluteRelativeCombined asXMLURI hasNonDirectoryPath; - deny: self domainURIString asXMLURI hasNonDirectoryPath; - deny: self domainURIWithPortString asXMLURI hasNonDirectoryPath; - deny: self emailURIString asXMLURI hasNonDirectoryPath; - assert: self fileURIWithHostString asXMLURI hasNonDirectoryPath; - assert: self fileURIString asXMLURI hasNonDirectoryPath; - deny: self fragmentURIString asXMLURI hasNonDirectoryPath; - assert: self fullURIString asXMLURI hasNonDirectoryPath; - assert: self fullURIWithPortString asXMLURI hasNonDirectoryPath; - deny: self queryURIString asXMLURI hasNonDirectoryPath; - assert: self relative asXMLURI hasNonDirectoryPath; - assert: self relativeAbsoluteCombined asXMLURI hasNonDirectoryPath; - assert: self schemelessURIString asXMLURI hasNonDirectoryPath; - assert: self schemelessURIWithPortString asXMLURI hasNonDirectoryPath -] - -{ #category : #tests } -XMLURITest >> testHasPath [ - self - deny: '' asXMLURI hasPath; - assert: '/' asXMLURI hasPath; - assert: self absolute asXMLURI hasPath; - assert: self absoluteDir asXMLURI hasPath; - assert: self absoluteDirRelativeCombined asXMLURI hasPath; - assert: self absoluteRelativeCombined asXMLURI hasPath; - deny: self domainURIString asXMLURI hasPath; - deny: self domainURIWithPortString asXMLURI hasPath; - deny: self emailURIString asXMLURI hasPath; - assert: self fileURIWithHostString asXMLURI hasPath; - assert: self fileURIString asXMLURI hasPath; - deny: self fragmentURIString asXMLURI hasPath; - assert: self fullURIString asXMLURI hasPath; - assert: self fullURIWithPortString asXMLURI hasPath; - deny: self queryURIString asXMLURI hasPath; - assert: self relative asXMLURI hasPath; - assert: self relativeAbsoluteCombined asXMLURI hasPath; - assert: self schemelessURIString asXMLURI hasPath; - assert: self schemelessURIWithPortString asXMLURI hasPath -] - -{ #category : #tests } -XMLURITest >> testHasPort [ - self - deny: '' asXMLURI hasPort; - deny: '/' asXMLURI hasPort; - deny: self absolute asXMLURI hasPort; - deny: self absoluteDir asXMLURI hasPort; - deny: self absoluteDirRelativeCombined asXMLURI hasPort; - deny: self absoluteRelativeCombined asXMLURI hasPort; - deny: self domainURIString asXMLURI hasPort; - assert: self domainURIWithPortString asXMLURI hasPort; - deny: self emailURIString asXMLURI hasPort; - deny: self fileURIWithHostString asXMLURI hasPort; - deny: self fileURIString asXMLURI hasPort; - deny: self fragmentURIString asXMLURI hasPort; - deny: self fullURIString asXMLURI hasPort; - assert: self fullURIWithPortString asXMLURI hasPort; - deny: self queryURIString asXMLURI hasPort; - deny: self relative asXMLURI hasPort; - deny: self relativeAbsoluteCombined asXMLURI hasPort; - deny: self schemelessURIString asXMLURI hasPort; - assert: self schemelessURIWithPortString asXMLURI hasPort -] - -{ #category : #tests } -XMLURITest >> testHasQuery [ - self allURIStringsDo: [:each | | uri | - uri := each asXMLURI. - (each includes: $?) - ifTrue: [self assert: uri hasQuery] - ifFalse: [self deny: uri hasQuery]] -] - -{ #category : #tests } -XMLURITest >> testHasRootPath [ - self allURIStringsDo: [:each | | uri | - uri := each asXMLURI. - each = '/' - ifTrue: [self assert: uri hasRootPath] - ifFalse: [self deny: uri hasRootPath]] -] - -{ #category : #tests } -XMLURITest >> testHasScheme [ - self - deny: '' asXMLURI hasScheme; - deny: '/' asXMLURI hasScheme; - deny: self absolute asXMLURI hasScheme; - deny: self absoluteDir asXMLURI hasScheme; - deny: self absoluteDirRelativeCombined asXMLURI hasScheme; - deny: self absoluteRelativeCombined asXMLURI hasScheme; - assert: self domainURIString asXMLURI hasScheme; - assert: self domainURIWithPortString asXMLURI hasScheme; - assert: self emailURIString asXMLURI hasScheme; - assert: self fileURIWithHostString asXMLURI hasScheme; - assert: self fileURIString asXMLURI hasScheme; - deny: self fragmentURIString asXMLURI hasScheme; - assert: self fullURIString asXMLURI hasScheme; - assert: self fullURIWithPortString asXMLURI hasScheme; - deny: self queryURIString asXMLURI hasScheme; - deny: self relative asXMLURI hasScheme; - deny: self relativeAbsoluteCombined asXMLURI hasScheme; - deny: self schemelessURIString asXMLURI hasScheme; - deny: self schemelessURIWithPortString asXMLURI hasScheme -] - -{ #category : #tests } -XMLURITest >> testHasUserInfo [ - self allURIStringsDo: [:each | | uri | - uri := each asXMLURI. - uri scheme = 'mailto' - ifTrue: [self assert: uri hasUserInfo] - ifFalse: [self deny: uri hasUserInfo]] -] - -{ #category : #tests } -XMLURITest >> testHash [ - "We can only safely test that equal objects have the same hash; testing - that different objects have different hashes would be unreliable - because #hash is non-cryptographic and has collisions." - self allURIStringsDo: [:each | - self assert: each asXMLURI hash = each asXMLURI hash] -] - -{ #category : #tests } -XMLURITest >> testHashPercentEncoding [ - | uriTemplate unencodedURI encodedURI | - - uriTemplate := - 'http://{1}@{1}:80/{1}/{1}?{1}={1}&{1}={1}#{1}'. - unencodedURI := - (uriTemplate format: - (Array with: self alphaNumericCharacters)) asXMLURI. - encodedURI := - (uriTemplate format: - (Array with: self percentEncodedAlphaNumericCharacters)) asXMLURI. - self assert: unencodedURI hash = unencodedURI hash. -] - -{ #category : #tests } -XMLURITest >> testHost [ - self - assert: '' asXMLURI host = ''; - assert: '/' asXMLURI host = ''; - assert: self absolute asXMLURI host = ''; - assert: self absoluteDir asXMLURI host = ''; - assert: self absoluteDirRelativeCombined asXMLURI host = ''; - assert: self absoluteRelativeCombined asXMLURI host = ''; - assert: self domainURIString asXMLURI host = self host; - assert: self domainURIWithPortString asXMLURI host = self host; - assert: self emailURIString asXMLURI host = self host; - assert: self fileURIWithHostString asXMLURI host = self host; - assert: self fileURIString asXMLURI host = ''; - assert: self fragmentURIString asXMLURI host = ''; - assert: self fullURIString asXMLURI host = self host; - assert: self fullURIWithPortString asXMLURI host = self host; - assert: self queryURIString asXMLURI host = ''; - assert: self relative asXMLURI host = ''; - assert: self relativeAbsoluteCombined asXMLURI host = ''; - assert: self schemelessURIString asXMLURI host = self host; - assert: self schemelessURIWithPortString asXMLURI host = self host -] - -{ #category : #tests } -XMLURITest >> testHostNonPercentEncodedCharacters [ - | host uriString uri | - - host := self unreservedCharacters, self subDelimiterCharacters. - uriString := 'http://', host. - uri := uriString asXMLURI. - self - assert: uri scheme = 'http'; - assert: uri host = host asLowercase; - assert: uri rawHost = host. - - uri uriString: nil. - self assert: uri printString = uriString. -] - -{ #category : #tests } -XMLURITest >> testHostPercentEncodedCharacters [ - | prefix encoded decoded encodedURIString uri | - - prefix := 'http://'. - encoded := self percentEncodedASCIICharacters, '+'. - decoded := self asciiCharacters, '+'. - encodedURIString := prefix, encoded. - uri := encodedURIString asXMLURI. - self - assert: uri scheme = 'http'; - assert: uri host = decoded asLowercase; - assert: uri rawHost = encoded. - - uri uriString: nil. - self assert: uri printString = encodedURIString. -] - -{ #category : #tests } -XMLURITest >> testIPv6Hosts [ - | ipv6Host uriString uri | - - ipv6Host := '[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]'. - uriString := 'http://', ipv6Host, ':80', self absolute. - uri := uriString asXMLURI. - self - assert: uri scheme = 'http'; - assert: uri host = ipv6Host; - assert: uri port = 80; - assert: uri path = self absolute; - assert: uri query isEmpty; - assert: uri fragment = ''. - uri uriString: nil. - self assert: uri printString = uriString. - - uriString := 'http://', ipv6Host, self absolute. - uri := uriString asXMLURI. - self - assert: uri scheme = 'http'; - assert: uri host = ipv6Host; - assert: uri port isNil; - assert: uri path = self absolute; - assert: uri query isEmpty; - assert: uri fragment = ''. - uri uriString: nil. - self assert: uri printString = uriString. -] - -{ #category : #tests } -XMLURITest >> testInvalidPort [ - | uri | - - uri := (self domainURIString, ':invalid', self absolute) asXMLURI. - self - assert: uri host = self host; - assert: uri port isNil; - assert: uri path = self absolute. - - uri := (self domainURIString, ':invalid', self queryURIString) asXMLURI. - self - assert: uri host = self host; - assert: uri port isNil; - assert: uri pathSegments isEmpty. - - uri := (self domainURIString, ':invalid', self fragmentURIString) asXMLURI. - self - assert: uri host = self host; - assert: uri port isNil; - assert: uri pathSegments isEmpty. -] - -{ #category : #tests } -XMLURITest >> testInvalidPortSuffix [ - | uri | - - uri := (self domainURIWithPortString, 'invalid', self absolute) asXMLURI. - self - assert: uri host = self host; - assert: uri port = 80; - assert: uri path = self absolute. - - uri := (self domainURIWithPortString, 'invalid', self queryURIString) asXMLURI. - self - assert: uri host = self host; - assert: uri port = 80; - assert: uri pathSegments isEmpty. - - uri := (self domainURIWithPortString, 'invalid', self fragmentURIString) asXMLURI. - self - assert: uri host = self host; - assert: uri port = 80; - assert: uri pathSegments isEmpty. -] - -{ #category : #tests } -XMLURITest >> testIsEmpty [ - | uri | - - self allURIStringsDo: [:each | - uri := each asXMLURI. - each = '' - ifTrue: [self assert: uri isEmpty] - ifFalse: [self deny: uri isEmpty]. - - uri - parseURIStringIfUnparsed; - uriString: nil. - each isEmpty - ifTrue: [self assert: uri isEmpty] - ifFalse: [self deny: uri isEmpty]]. - - uri := '//:?#' asXMLURI. - self assert: uri isEmpty. - uri - parseURIStringIfUnparsed; - uriString: nil. - self assert: uri isEmpty. -] - -{ #category : #tests } -XMLURITest >> testIsFile [ - self allURIStringsDo: [:each | | uri | - uri := each asXMLURI. - uri scheme = 'file' - ifTrue: [self assert: uri isFile] - ifFalse: [self deny: uri isFile]] -] - -{ #category : #tests } -XMLURITest >> testIsHTTP [ - self allURIStringsDo: [:each | | uri | - uri := each asXMLURI. - uri scheme = 'http' - ifTrue: [self assert: uri isHTTP] - ifFalse: [self deny: uri isHTTP]] -] - -{ #category : #tests } -XMLURITest >> testIsHTTPS [ - self allURIStringsDo: [:each | | uri | - uri := each asXMLURI. - uri scheme = 'https' - ifTrue: [self assert: uri isHTTPS] - ifFalse: [self deny: uri isHTTPS]] -] - -{ #category : #tests } -XMLURITest >> testIsLocal [ - self - assert: '' asXMLURI isLocal; - assert: '/' asXMLURI isLocal; - assert: self absolute asXMLURI isLocal; - assert: self absoluteDir asXMLURI isLocal; - assert: self absoluteDirRelativeCombined asXMLURI isLocal; - assert: self absoluteRelativeCombined asXMLURI isLocal; - deny: self domainURIString asXMLURI isLocal; - deny: self domainURIWithPortString asXMLURI isLocal; - deny: self emailURIString asXMLURI isLocal; - assert: self fileURIWithHostString asXMLURI isLocal; - assert: self fileURIString asXMLURI isLocal; - assert: self fragmentURIString asXMLURI isLocal; - deny: self fullURIString asXMLURI isLocal; - deny: self fullURIWithPortString asXMLURI isLocal; - assert: self queryURIString asXMLURI isLocal; - assert: self relative asXMLURI isLocal; - assert: self relativeAbsoluteCombined asXMLURI isLocal; - deny: self schemelessURIString asXMLURI isLocal; - deny: self schemelessURIWithPortString asXMLURI isLocal -] - -{ #category : #tests } -XMLURITest >> testIsRelative [ - self - assert: '' asXMLURI isRelative; - assert: '/' asXMLURI isRelative; - assert: self absolute asXMLURI isRelative; - assert: self absoluteDir asXMLURI isRelative; - assert: self absoluteDirRelativeCombined asXMLURI isRelative; - assert: self absoluteRelativeCombined asXMLURI isRelative; - deny: self domainURIString asXMLURI isRelative; - deny: self domainURIWithPortString asXMLURI isRelative; - deny: self emailURIString asXMLURI isRelative; - deny: self fileURIWithHostString asXMLURI isRelative; - deny: self fileURIString asXMLURI isRelative; - assert: self fragmentURIString asXMLURI isRelative; - deny: self fullURIString asXMLURI isRelative; - deny: self fullURIWithPortString asXMLURI isRelative; - assert: self queryURIString asXMLURI isRelative; - assert: self relative asXMLURI isRelative; - assert: self relativeAbsoluteCombined asXMLURI isRelative; - assert: self schemelessURIString asXMLURI isRelative; - assert: self schemelessURIWithPortString asXMLURI isRelative -] - -{ #category : #tests } -XMLURITest >> testNew [ - | uri | - - uri := XMLURI new. - self - assert: uri uriString = ''; - assert: uri isEmpty. -] - -{ #category : #tests } -XMLURITest >> testNotEmpty [ - | uri | - - self allURIStringsDo: [:each | - uri := each asXMLURI. - each notEmpty - ifTrue: [self assert: uri notEmpty] - ifFalse: [self deny: uri notEmpty]. - - uri - parseURIStringIfUnparsed; - uriString: nil. - each notEmpty - ifTrue: [self assert: uri notEmpty] - ifFalse: [self deny: uri notEmpty]]. - - uri := '//:?#' asXMLURI. - self deny: uri notEmpty. - uri - parseURIStringIfUnparsed; - uriString: nil. - self deny: uri notEmpty. -] - -{ #category : #tests } -XMLURITest >> testParsingQueryString [ - #('' '?' '?&' '?&&') do: [:each | - self assert: - each asXMLURI query = - OrderedCollection new]. - - #('?a=b' '?&a=b&' '?&&a=b&&') do: [:each | - self assert: - each asXMLURI query = - (OrderedCollection with: 'a' -> 'b')]. - - #('?=&a=b' '?&=&a=b' '?&&=&&a=b') do: [:each | - self assert: - each asXMLURI query = - (OrderedCollection - with: '' -> '' - with: 'a' -> 'b')]. - - #('?a=b&=' '?a=b&=&' '?a=b&&=&&') do: [:each | - self assert: - each asXMLURI query = - (OrderedCollection - with: 'a' -> 'b' - with: '' -> '')]. - - #('?c=&a=b' '?&c=&a=b' '?&&c=&&a=b') do: [:each | - self assert: - each asXMLURI query = - (OrderedCollection - with: 'c' -> '' - with: 'a' -> 'b')]. - - #('?a=b&c=' '?a=b&c=&' '?a=b&&c=&&') do: [:each | - self assert: - each asXMLURI query = - (OrderedCollection - with: 'a' -> 'b' - with: 'c' -> '')]. -] - -{ #category : #tests } -XMLURITest >> testPath [ - self - assert: '' asXMLURI path = ''; - assert: '/' asXMLURI path = '/'; - assert: self absolute asXMLURI path = self absolute; - assert: self absoluteDir asXMLURI path = self absoluteDir; - assert: self absoluteDirRelativeCombined asXMLURI path = self absoluteDirRelativeCombined; - assert: self absoluteRelativeCombined asXMLURI path = self absoluteRelativeCombined; - assert: self domainURIString asXMLURI path = ''; - assert: self domainURIWithPortString asXMLURI path = ''; - assert: self emailURIString asXMLURI path = ''; - assert: self fileURIWithHostString asXMLURI path = self absolute; - assert: self fileURIString asXMLURI path = self absolute; - assert: self fragmentURIString asXMLURI path = ''; - assert: self fullURIString asXMLURI path = self absolute; - assert: self fullURIWithPortString asXMLURI path = self absolute; - assert: self queryURIString asXMLURI path = ''; - assert: self relative asXMLURI path = self relative; - assert: self relativeAbsoluteCombined asXMLURI path = self relativeAbsoluteCombined; - assert: self schemelessURIString asXMLURI path = self absolute; - assert: self schemelessURIWithPortString asXMLURI path = self absolute -] - -{ #category : #tests } -XMLURITest >> testPathNonPercentEncodedCharacters [ - | firstSegment secondSegment uriString uri | - - firstSegment := self nonPercentEncodedPathCharacters copyWithout: $:. - secondSegment := self nonPercentEncodedPathCharacters. - uriString := firstSegment, '/', secondSegment. - uri := uriString asXMLURI. - self assert: uri path = (firstSegment, '/', secondSegment). - self assert: - uri pathSegments = - (OrderedCollection with: firstSegment with: secondSegment). - self assert: - uri rawPathSegments = - (OrderedCollection with: firstSegment with: secondSegment). - - uri uriString: nil. - self assert: uri printString = uriString. -] - -{ #category : #tests } -XMLURITest >> testPathPercentEncodedCharacters [ - | encoded decoded encodedURIString uri | - - encoded := self percentEncodedASCIICharacters, '+'. - decoded := self asciiCharacters, '+'. - encodedURIString := encoded, '/', encoded. - uri := encodedURIString asXMLURI. - self assert: uri path = (decoded, '/', decoded). - self assert: - uri pathSegments = (OrderedCollection with: decoded with: decoded). - self assert: - uri rawPathSegments = (OrderedCollection with: encoded with: encoded). - - uri uriString: nil. - self assert: uri printString = encodedURIString. -] - -{ #category : #tests } -XMLURITest >> testPathSegments [ - self - assert: '' asXMLURI pathSegments isEmpty; - assert: '/' asXMLURI pathSegments = #('' '') asOrderedCollection; - assert: self absolute asXMLURI pathSegments = self absoluteSegments; - assert: self absoluteDir asXMLURI pathSegments = self absoluteDirSegments; - assert: self absoluteDirRelativeCombined asXMLURI pathSegments = self absoluteDirRelativeCombinedSegments; - assert: self absoluteRelativeCombined asXMLURI pathSegments = self absoluteRelativeCombinedSegments; - assert: self domainURIString asXMLURI pathSegments isEmpty; - assert: self domainURIWithPortString asXMLURI pathSegments isEmpty; - assert: self emailURIString asXMLURI pathSegments isEmpty; - assert: self fileURIWithHostString asXMLURI pathSegments = self absoluteSegments; - assert: self fileURIString asXMLURI pathSegments = self absoluteSegments; - assert: self fragmentURIString asXMLURI pathSegments isEmpty; - assert: self fullURIString asXMLURI pathSegments = self absoluteSegments; - assert: self fullURIWithPortString asXMLURI pathSegments = self absoluteSegments; - assert: self queryURIString asXMLURI pathSegments isEmpty; - assert: self relative asXMLURI pathSegments = self relativeSegments; - assert: self relativeAbsoluteCombined asXMLURI pathSegments = self relativeAbsoluteCombinedSegments; - assert: self schemelessURIString asXMLURI pathSegments = self absoluteSegments; - assert: self schemelessURIWithPortString asXMLURI pathSegments = self absoluteSegments -] - -{ #category : #tests } -XMLURITest >> testPathSegmentsDo [ - self allURIStringsDo: [:uriString | | uri visited | - uri := uriString asXMLURI. - visited := OrderedCollection new. - uri pathSegmentsDo: [:each | visited addLast: each]. - self assert: visited = uri pathSegments] -] - -{ #category : #tests } -XMLURITest >> testPort [ - self - assert: '' asXMLURI port isNil; - assert: '/' asXMLURI port isNil; - assert: self absolute asXMLURI port isNil; - assert: self absoluteDir asXMLURI port isNil; - assert: self absoluteDirRelativeCombined asXMLURI port isNil; - assert: self absoluteRelativeCombined asXMLURI port isNil; - assert: self domainURIString asXMLURI port isNil; - assert: self domainURIWithPortString asXMLURI port = 80; - assert: self emailURIString asXMLURI port isNil; - assert: self fileURIWithHostString asXMLURI port isNil; - assert: self fileURIString asXMLURI port isNil; - assert: self fragmentURIString asXMLURI port isNil; - assert: self fullURIString asXMLURI port isNil; - assert: self fullURIWithPortString asXMLURI port = 80; - assert: self queryURIString asXMLURI port isNil; - assert: self relative asXMLURI port isNil; - assert: self relativeAbsoluteCombined asXMLURI port isNil; - assert: self schemelessURIString asXMLURI port isNil; - assert: self schemelessURIWithPortString asXMLURI port = 80 -] - -{ #category : #tests } -XMLURITest >> testPrintOn [ - self allURIStringsDo: [:each | | uri | - uri := each asXMLURI. - self assert: uri printString = each. - - uri - parseURIStringIfUnparsed; - uriString: nil. - self - assert: uri uriString isNil; - assert: uri printString = each; - assert: uri uriString = each] -] - -{ #category : #tests } -XMLURITest >> testQuery [ - self - assert: '' asXMLURI query isEmpty; - assert: '/' asXMLURI query isEmpty; - assert: self absolute asXMLURI query isEmpty; - assert: self absoluteDir asXMLURI query isEmpty; - assert: self absoluteDirRelativeCombined asXMLURI query isEmpty; - assert: self absoluteRelativeCombined asXMLURI query isEmpty; - assert: self domainURIString asXMLURI query isEmpty; - assert: self domainURIWithPortString asXMLURI query isEmpty; - assert: self emailURIString asXMLURI query isEmpty; - assert: self fileURIWithHostString asXMLURI query isEmpty; - assert: self fileURIString asXMLURI query isEmpty; - assert: self fragmentURIString asXMLURI query isEmpty; - assert: self fullURIString asXMLURI query = self query; - assert: self fullURIWithPortString asXMLURI query = self query; - assert: self queryURIString asXMLURI query = self query; - assert: self relative asXMLURI query isEmpty; - assert: self relativeAbsoluteCombined asXMLURI query isEmpty; - assert: self schemelessURIString asXMLURI query = self query; - assert: self schemelessURIWithPortString asXMLURI query = self query -] - -{ #category : #tests } -XMLURITest >> testQueryAt [ - self allURIStringsDo: [:uriString | | uri visitedKeys | - uri := uriString asXMLURI. - visitedKeys := Set new. - uri query do: [:each | - (visitedKeys includes: each key) - ifFalse: [ - self assert: - (uri queryAt: each key) = each value. - visitedKeys add: each key]]. - self assert: (uri queryAt: 'absent') = ''] -] - -{ #category : #tests } -XMLURITest >> testQueryAtIfAbsent [ - self allURIStringsDo: [:uriString | | uri visitedKeys | - uri := uriString asXMLURI. - visitedKeys := Set new. - uri query do: [:each | - (visitedKeys includes: each key) - ifFalse: [ - self assert: - (uri - queryAt: each key - ifAbsent: [self fail]) = each value. - visitedKeys add: each key]]. - self assert: - (uri - queryAt: 'absentKey' - ifAbsent: ['absentValue']) = 'absentValue'] -] - -{ #category : #tests } -XMLURITest >> testQueryIncludesKey [ - self allURIStringsDo: [:uriString | | uri | - uri := uriString asXMLURI. - uri query do: [:each | - self assert: (uri queryIncludesKey: each key)]. - self deny: (uri queryIncludesKey: 'absent')] -] - -{ #category : #tests } -XMLURITest >> testQueryKeys [ - self allURIStringsDo: [:uriString | | uri | - uri := uriString asXMLURI. - self assert: - uri queryKeys = - (uri query collect: [:each | each key])] -] - -{ #category : #tests } -XMLURITest >> testQueryKeysAndValuesDo [ - self allURIStringsDo: [:each | | uri visited | - uri := each asXMLURI. - visited := OrderedCollection new. - self assert: - (uri queryKeysAndValuesDo: [:key :value | - visited addLast: key -> value]) == uri. - self assert: visited = uri query] -] - -{ #category : #tests } -XMLURITest >> testQueryKeysDo [ - self allURIStringsDo: [:uriString | | uri visited | - uri := uriString asXMLURI. - visited := OrderedCollection new. - self assert: - (uri queryKeysDo: [:each | - visited addLast: each]) == uri. - self assert: visited = uri queryKeys] -] - -{ #category : #tests } -XMLURITest >> testQueryNonPercentOrPlusEncodedCharacters [ - | queryKey queryValue uriString uri | - - queryKey := - (self nonPercentEncodedPathCharacters copyWithoutAll: '=&+'), '/?'. - queryValue := - (self nonPercentEncodedPathCharacters copyWithoutAll: '&+'), '/?'. - uriString := '?', queryKey, '=', queryValue. - uri := uriString asXMLURI. - self - assert: uri query = (OrderedCollection with: queryKey -> queryValue); - assert: (uri queryAt: queryKey) = queryValue; - assert: - (uri - queryAt: queryKey - ifAbsent: ['absent']) = queryValue; - assert: - (uri queryValuesAt: queryKey) = (OrderedCollection with: queryValue); - assert: - (uri - queryValuesAt: queryKey - ifAbsent: [#('absent')]) = (OrderedCollection with: queryValue); - assert: uri queryKeys = (OrderedCollection with: queryKey); - assert: (uri queryIncludesKey: queryKey); - assert: uri rawQuery = (OrderedCollection with: queryKey -> queryValue). - - uri uriString: nil. - self assert: uri printString = uriString. -] - -{ #category : #tests } -XMLURITest >> testQueryPercentOrPlusEncodedCharacters [ - | encoded decoded encodedURIString uri | - - encoded := self percentEncodedASCIICharacters, '+'. - decoded := self asciiCharacters, ' '. - encodedURIString := '?', encoded, '=', encoded. - uri := encodedURIString asXMLURI. - self - assert: uri query = (OrderedCollection with: decoded -> decoded); - assert: (uri queryAt: decoded) = decoded; - assert: - (uri - queryAt: decoded - ifAbsent: ['absent']) = decoded; - assert: (uri queryValuesAt: decoded) = (OrderedCollection with: decoded); - assert: - (uri - queryValuesAt: decoded - ifAbsent: [#()]) = (OrderedCollection with: decoded); - assert: uri queryKeys = (OrderedCollection with: decoded); - assert: (uri queryIncludesKey: decoded); - assert: uri rawQuery = (OrderedCollection with: encoded -> encoded). - - uri uriString: nil. - self assert: uri printString = encodedURIString. -] - -{ #category : #tests } -XMLURITest >> testQueryValuesAt [ - self allURIStringsDo: [:uriString | | uri valuesForKeys | - uri := uriString asXMLURI. - valuesForKeys := Dictionary new. - uri query do: [:each | - (valuesForKeys - at: each key - ifAbsentPut: [OrderedCollection new]) - addLast: each value]. - valuesForKeys keysAndValuesDo: [:key :values | - self assert: (uri queryValuesAt: key) = values]. - self assert: - (uri queryValuesAt: 'absent') = OrderedCollection new] -] - -{ #category : #tests } -XMLURITest >> testQueryValuesAtDo [ - self allURIStringsDo: [:uriString | | uri valuesForKeys | - uri := uriString asXMLURI. - valuesForKeys := Dictionary new. - uri query do: [:each | - (valuesForKeys - at: each key - ifAbsentPut: [OrderedCollection new]) - addLast: each value]. - valuesForKeys keysAndValuesDo: [:key :values | | enumerated | - enumerated := OrderedCollection new. - self assert: - (uri - queryValuesAt: key - do: [:each | enumerated addLast: each]) == uri. - self assert: enumerated = values]] -] - -{ #category : #tests } -XMLURITest >> testQueryValuesAtIfAbsent [ - self allURIStringsDo: [:uriString | | uri valuesForKeys | - uri := uriString asXMLURI. - valuesForKeys := Dictionary new. - uri query do: [:each | - (valuesForKeys - at: each key - ifAbsentPut: [OrderedCollection new]) - addLast: each value]. - valuesForKeys keysAndValuesDo: [:key :values | - self assert: - (uri - queryValuesAt: key - ifAbsent: [self fail]) = values]. - self assert: - (uri - queryValuesAt: 'absent' - ifAbsent: [#absent]) = #absent] -] - -{ #category : #tests } -XMLURITest >> testReadFrom [ - self allURIStringsDo: [:each | | stream uri | - stream := each readStream. - uri := XMLURI readFrom: stream. - self - assert: uri class == XMLURI; - assert: uri uriString isNil; - assert: uri = each asXMLURI; - assert: stream atEnd. - - uri := XMLURI readFrom: each. - self - assert: uri class == XMLURI; - assert: uri uriString = each; - assert: uri = each asXMLURI] -] - -{ #category : #tests } -XMLURITest >> testScheme [ - self - assert: '' asXMLURI scheme = ''; - assert: '/' asXMLURI scheme = ''; - assert: self absolute asXMLURI scheme = ''; - assert: self absoluteDir asXMLURI scheme = ''; - assert: self absoluteDirRelativeCombined asXMLURI scheme = ''; - assert: self absoluteRelativeCombined asXMLURI scheme = ''; - assert: self domainURIString asXMLURI scheme = 'http'; - assert: self domainURIWithPortString asXMLURI scheme = 'http'; - assert: self emailURIString asXMLURI scheme = 'mailto'; - assert: self fileURIWithHostString asXMLURI scheme = 'file'; - assert: self fileURIString asXMLURI scheme = 'file'; - assert: self fragmentURIString asXMLURI scheme = ''; - assert: self fullURIString asXMLURI scheme = 'http'; - assert: self fullURIWithPortString asXMLURI scheme = 'http'; - assert: self queryURIString asXMLURI scheme = ''; - assert: self relative asXMLURI scheme = ''; - assert: self relativeAbsoluteCombined asXMLURI scheme = ''; - assert: self schemelessURIString asXMLURI scheme = ''; - assert: self schemelessURIWithPortString asXMLURI scheme = '' -] - -{ #category : #tests } -XMLURITest >> testSchemeAndHostCaseInsensitivity [ - self allURIStringsDo: [:each | | uri uppercaseURI | - uri := each asXMLURI. - uppercaseURI := each asUppercase asXMLURI. - self - assert: uri scheme = uppercaseURI scheme; - assert: uri hasAuthorityPrefix = uppercaseURI hasAuthorityPrefix. - uri hasUserInfo - ifTrue: [self deny: uri userInfo = uppercaseURI userInfo]. - self - assert: uri host = uppercaseURI host; - assert: uri port = uppercaseURI port. - (uri hasPath - and: [uri hasRootPath not]) - ifTrue: [self deny: uri pathSegments = uppercaseURI pathSegments]. - uri hasQuery - ifTrue: [self deny: uri query = uppercaseURI query]. - uri hasFragment - ifTrue: [self deny: uri fragment = uppercaseURI fragment]] -] - -{ #category : #tests } -XMLURITest >> testSchemeCharacters [ - | scheme uri | - - scheme := self alphaNumericCharacters, '+-.'. - uri := (scheme, '://', self host) asXMLURI. - self - assert: uri scheme = scheme asLowercase; - assert: uri host = self host. -] - -{ #category : #tests } -XMLURITest >> testStandardURICombining [ - "Generated from RFC 3986, page 34-36" - - | baseURI | - - baseURI := 'http://a/b/c/d;p?q' asXMLURI. - self - assert: (baseURI / 'g:h' asXMLURI) = 'g:h' asXMLURI; - assert: (baseURI / 'g' asXMLURI) = 'http://a/b/c/g' asXMLURI; - assert: (baseURI / './g' asXMLURI) = 'http://a/b/c/g' asXMLURI; - assert: (baseURI / 'g/' asXMLURI) = 'http://a/b/c/g/' asXMLURI; - assert: (baseURI / '/g' asXMLURI) = 'http://a/g' asXMLURI; - assert: (baseURI / '//g' asXMLURI) = 'http://g' asXMLURI; - assert: (baseURI / '?y' asXMLURI) = 'http://a/b/c/d;p?y' asXMLURI; - assert: (baseURI / 'g?y' asXMLURI) = 'http://a/b/c/g?y' asXMLURI; - assert: (baseURI / '#s' asXMLURI) = 'http://a/b/c/d;p?q#s' asXMLURI; - assert: (baseURI / 'g#s' asXMLURI) = 'http://a/b/c/g#s' asXMLURI; - assert: (baseURI / 'g?y#s' asXMLURI) = 'http://a/b/c/g?y#s' asXMLURI; - assert: (baseURI / ';x' asXMLURI) = 'http://a/b/c/;x' asXMLURI; - assert: (baseURI / 'g;x' asXMLURI) = 'http://a/b/c/g;x' asXMLURI; - assert: (baseURI / 'g;x?y#s' asXMLURI) = 'http://a/b/c/g;x?y#s' asXMLURI; - assert: (baseURI / '' asXMLURI) = 'http://a/b/c/d;p?q' asXMLURI; - assert: (baseURI / '.' asXMLURI) = 'http://a/b/c/' asXMLURI; - assert: (baseURI / './' asXMLURI) = 'http://a/b/c/' asXMLURI; - assert: (baseURI / '..' asXMLURI) = 'http://a/b/' asXMLURI; - assert: (baseURI / '../' asXMLURI) = 'http://a/b/' asXMLURI; - assert: (baseURI / '../g' asXMLURI) = 'http://a/b/g' asXMLURI; - assert: (baseURI / '../..' asXMLURI) = 'http://a/' asXMLURI; - assert: (baseURI / '../../' asXMLURI) = 'http://a/' asXMLURI; - assert: (baseURI / '../../g' asXMLURI) = 'http://a/g' asXMLURI; - assert: (baseURI / '../../../g' asXMLURI) = 'http://a/g' asXMLURI; - assert: (baseURI / '../../../../g' asXMLURI) = 'http://a/g' asXMLURI; - assert: (baseURI / '/./g' asXMLURI) = 'http://a/g' asXMLURI; - assert: (baseURI / '/../g' asXMLURI) = 'http://a/g' asXMLURI; - assert: (baseURI / 'g.' asXMLURI) = 'http://a/b/c/g.' asXMLURI; - assert: (baseURI / '.g' asXMLURI) = 'http://a/b/c/.g' asXMLURI; - assert: (baseURI / 'g..' asXMLURI) = 'http://a/b/c/g..' asXMLURI; - assert: (baseURI / '..g' asXMLURI) = 'http://a/b/c/..g' asXMLURI; - assert: (baseURI / './../g' asXMLURI) = 'http://a/b/g' asXMLURI; - assert: (baseURI / './g/.' asXMLURI) = 'http://a/b/c/g/' asXMLURI; - assert: (baseURI / 'g/./h' asXMLURI) = 'http://a/b/c/g/h' asXMLURI; - assert: (baseURI / 'g/../h' asXMLURI) = 'http://a/b/c/h' asXMLURI; - assert: (baseURI / 'g;x=1/./y' asXMLURI) = 'http://a/b/c/g;x=1/y' asXMLURI; - assert: (baseURI / 'g;x=1/../y' asXMLURI) = 'http://a/b/c/y' asXMLURI; - assert: (baseURI / 'g?y/./x' asXMLURI) = 'http://a/b/c/g?y/./x' asXMLURI; - assert: (baseURI / 'g?y/../x' asXMLURI) = 'http://a/b/c/g?y/../x' asXMLURI; - assert: (baseURI / 'g#s/./x' asXMLURI) = 'http://a/b/c/g#s/./x' asXMLURI; - assert: (baseURI / 'g#s/../x' asXMLURI) = 'http://a/b/c/g#s/../x' asXMLURI; - assert: (baseURI / 'http:g' asXMLURI) = 'http:g' asXMLURI -] - -{ #category : #tests } -XMLURITest >> testUserInfo [ - self allURIStringsDo: [:each | | uri | - uri := each asXMLURI. - uri scheme = 'mailto' - ifTrue: [self assert: uri userInfo = 'userName'] - ifFalse: [self assert: uri userInfo = '']] -] - -{ #category : #tests } -XMLURITest >> testUserInfoNonPercentEncodedCharacters [ - | userInfo uriString uri | - - userInfo := self unreservedCharacters, self subDelimiterCharacters, ':'. - uriString := 'mailto:', userInfo, '@', self host. - uri := uriString asXMLURI. - self - assert: uri scheme = 'mailto'; - assert: uri userInfo = userInfo; - assert: uri host = self host. - - uri uriString: nil. - self assert: uri printString = uriString. -] - -{ #category : #tests } -XMLURITest >> testUserInfoPercentEncodedCharacters [ - | prefix encoded decoded suffix encodedURIString uri | - - prefix := 'mailto:'. - encoded := self percentEncodedASCIICharacters, '+'. - decoded := self asciiCharacters, '+'. - suffix := '@', self host. - encodedURIString := prefix, encoded, suffix. - uri := encodedURIString asXMLURI. - self - assert: uri scheme = 'mailto'; - assert: uri userInfo = decoded; - assert: uri rawUserInfo = encoded. - - uri uriString: nil. - self assert: uri printString = encodedURIString. -] - -{ #category : #accessing } -XMLURITest >> unreservedCharacters [ - ^ unreservedCharacters - ifNil: [unreservedCharacters := self alphaNumericCharacters, '-._~'] -] diff --git a/src/XML-Tests-Parser/XMLUTF16BigEndianStreamConverterTest.class.st b/src/XML-Tests-Parser/XMLUTF16BigEndianStreamConverterTest.class.st deleted file mode 100644 index 0758fbbd5..000000000 --- a/src/XML-Tests-Parser/XMLUTF16BigEndianStreamConverterTest.class.st +++ /dev/null @@ -1,20 +0,0 @@ -Class { - #name : #XMLUTF16BigEndianStreamConverterTest, - #superclass : #XMLStreamConverterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLUTF16BigEndianStreamConverterTest class >> isAbstract [ - ^ false -] - -{ #category : #accessing } -XMLUTF16BigEndianStreamConverterTest >> primaryEncodingName [ - ^ 'UTF-16' -] - -{ #category : #accessing } -XMLUTF16BigEndianStreamConverterTest >> streamConverterClass [ - ^ XMLUTF16BigEndianStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLUTF16LittleEndianStreamConverterTest.class.st b/src/XML-Tests-Parser/XMLUTF16LittleEndianStreamConverterTest.class.st deleted file mode 100644 index 6b78f9482..000000000 --- a/src/XML-Tests-Parser/XMLUTF16LittleEndianStreamConverterTest.class.st +++ /dev/null @@ -1,20 +0,0 @@ -Class { - #name : #XMLUTF16LittleEndianStreamConverterTest, - #superclass : #XMLStreamConverterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLUTF16LittleEndianStreamConverterTest class >> isAbstract [ - ^ false -] - -{ #category : #accessing } -XMLUTF16LittleEndianStreamConverterTest >> primaryEncodingName [ - ^ 'UTF-16-LE' -] - -{ #category : #accessing } -XMLUTF16LittleEndianStreamConverterTest >> streamConverterClass [ - ^ XMLUTF16LittleEndianStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLUTF32BigEndianStreamConverterTest.class.st b/src/XML-Tests-Parser/XMLUTF32BigEndianStreamConverterTest.class.st deleted file mode 100644 index 393b23d62..000000000 --- a/src/XML-Tests-Parser/XMLUTF32BigEndianStreamConverterTest.class.st +++ /dev/null @@ -1,20 +0,0 @@ -Class { - #name : #XMLUTF32BigEndianStreamConverterTest, - #superclass : #XMLStreamConverterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLUTF32BigEndianStreamConverterTest class >> isAbstract [ - ^ false -] - -{ #category : #accessing } -XMLUTF32BigEndianStreamConverterTest >> primaryEncodingName [ - ^ 'UTF-32' -] - -{ #category : #accessing } -XMLUTF32BigEndianStreamConverterTest >> streamConverterClass [ - ^ XMLUTF32BigEndianStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLUTF32LittleEndianStreamConverterTest.class.st b/src/XML-Tests-Parser/XMLUTF32LittleEndianStreamConverterTest.class.st deleted file mode 100644 index 2da5ce3c2..000000000 --- a/src/XML-Tests-Parser/XMLUTF32LittleEndianStreamConverterTest.class.st +++ /dev/null @@ -1,20 +0,0 @@ -Class { - #name : #XMLUTF32LittleEndianStreamConverterTest, - #superclass : #XMLStreamConverterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLUTF32LittleEndianStreamConverterTest class >> isAbstract [ - ^ false -] - -{ #category : #accessing } -XMLUTF32LittleEndianStreamConverterTest >> primaryEncodingName [ - ^ 'UTF-32-LE' -] - -{ #category : #accessing } -XMLUTF32LittleEndianStreamConverterTest >> streamConverterClass [ - ^ XMLUTF32LittleEndianStreamConverter -] diff --git a/src/XML-Tests-Parser/XMLUTF8StreamConverterTest.class.st b/src/XML-Tests-Parser/XMLUTF8StreamConverterTest.class.st deleted file mode 100644 index 4192ac56e..000000000 --- a/src/XML-Tests-Parser/XMLUTF8StreamConverterTest.class.st +++ /dev/null @@ -1,20 +0,0 @@ -Class { - #name : #XMLUTF8StreamConverterTest, - #superclass : #XMLStreamConverterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLUTF8StreamConverterTest class >> isAbstract [ - ^ false -] - -{ #category : #accessing } -XMLUTF8StreamConverterTest >> primaryEncodingName [ - ^ 'UTF-8' -] - -{ #category : #accessing } -XMLUTF8StreamConverterTest >> streamConverterClass [ - ^ XMLUTF8StreamConverter -] diff --git a/src/XML-Tests-Parser/XMLWriteStreamAdapterTest.class.st b/src/XML-Tests-Parser/XMLWriteStreamAdapterTest.class.st deleted file mode 100644 index d76397492..000000000 --- a/src/XML-Tests-Parser/XMLWriteStreamAdapterTest.class.st +++ /dev/null @@ -1,119 +0,0 @@ -Class { - #name : #XMLWriteStreamAdapterTest, - #superclass : #XMLStreamAdapterTest, - #category : #'XML-Tests-Parser-Streams' -} - -{ #category : #testing } -XMLWriteStreamAdapterTest class >> isAbstract [ - ^ false -] - -{ #category : #converting } -XMLWriteStreamAdapterTest >> contentsFromCharacter: aCharacter [ - ^ aCharacter asString -] - -{ #category : #testing } -XMLWriteStreamAdapterTest >> isBinary [ - ^ self expectsBinaryInput -] - -{ #category : #accessing } -XMLWriteStreamAdapterTest >> streamAdapterClass [ - ^ XMLWriteStreamAdapter -] - -{ #category : #accessing } -XMLWriteStreamAdapterTest >> streamClass [ - ^ WriteStream -] - -{ #category : #tests } -XMLWriteStreamAdapterTest >> testCR [ - | adapter | - - adapter := self newStreamAdapter. - self - assert: adapter cr = Character cr; - assert: adapter contents = (self contentsFromCharacter: Character cr). -] - -{ #category : #tests } -XMLWriteStreamAdapterTest >> testLF [ - | adapter | - - adapter := self newStreamAdapter. - self - assert: adapter lf = Character lf; - assert: adapter contents = (self contentsFromCharacter: Character lf). -] - -{ #category : #tests } -XMLWriteStreamAdapterTest >> testNextPut [ - | adapter | - - adapter := self newStreamAdapter. - self inputCollection do: [:each | - "use #= because wide chars aren't #== pre-Spur" - self assert: (adapter nextPut: each) = each]. - self assert: adapter contents = self outputCollection. -] - -{ #category : #tests } -XMLWriteStreamAdapterTest >> testNextPutAll [ - | adapter | - - adapter := self newStreamAdapter. - self - assert: (adapter nextPutAll: self inputCollection) = self inputCollection; - assert: adapter contents = self outputCollection. -] - -{ #category : #tests } -XMLWriteStreamAdapterTest >> testPosition [ - | adapter startPosition position | - - adapter := self newStreamAdapter. - startPosition := adapter position. "1 or 0 depending on the stream on GS" - position := startPosition. - self inputCollection do: [:each | - adapter nextPut: each. - self assert: adapter position > position. - position := adapter position]. - - adapter position: startPosition. - self assert: adapter position = startPosition. -] - -{ #category : #tests } -XMLWriteStreamAdapterTest >> testReset [ - | adapter startPosition | - - adapter := self newStreamAdapter. - startPosition := adapter position. "1 or 0 depending on the stream on GS" - adapter nextPutAll: self inputCollection. - self - assert: adapter reset == adapter; - assert: adapter position = startPosition. -] - -{ #category : #tests } -XMLWriteStreamAdapterTest >> testSpace [ - | adapter | - - adapter := self newStreamAdapter. - self - assert: adapter space = Character space; - assert: adapter contents = (self contentsFromCharacter: Character space). -] - -{ #category : #tests } -XMLWriteStreamAdapterTest >> testTab [ - | adapter | - - adapter := self newStreamAdapter. - self - assert: adapter tab = Character tab; - assert: adapter contents = (self contentsFromCharacter: Character tab). -] diff --git a/src/XML-Tests-Parser/package.st b/src/XML-Tests-Parser/package.st deleted file mode 100644 index 45e78ca55..000000000 --- a/src/XML-Tests-Parser/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'XML-Tests-Parser' } diff --git a/src/XML-Writer-Core/BlockClosure.extension.st b/src/XML-Writer-Core/BlockClosure.extension.st deleted file mode 100644 index 725cfda0a..000000000 --- a/src/XML-Writer-Core/BlockClosure.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #BlockClosure } - -{ #category : #'*XML-Writer-Core' } -BlockClosure >> embedInXMLMarkupWriter: aMarkupWriter [ - self cull: aMarkupWriter writer -] diff --git a/src/XML-Writer-Core/Character.extension.st b/src/XML-Writer-Core/Character.extension.st deleted file mode 100644 index 8c02efe76..000000000 --- a/src/XML-Writer-Core/Character.extension.st +++ /dev/null @@ -1,167 +0,0 @@ -Extension { #name : #Character } - -{ #category : #'*XML-Writer-Core' } -Character >> embedInXMLMarkupWriter: aMarkupWriter [ - self asString embedInXMLMarkupWriter: aMarkupWriter -] - -{ #category : #'*XML-Writer-Core' } -Character >> isXMLWriterNameChar [ - "Range tests are faster and use less memory than a BitmapCharacterSet, and - a temp is used because Character in newer SpurVM images has no 'value' - inst var. - - NameStartChar ::= - ':' | [A-Z] | '_' | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | - [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | - [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | - [#x10000-#xEFFFF] - NameChar ::= - NameStartChar | '-' | '.' | [0-9] | #xB7 | [#x0300-#x036F] | - [#x203F-#x2040]" - - | tempValue | - - (tempValue := self asciiValue) <= 16r7A "$z asciiValue hex" - ifTrue: [ - tempValue >= 16r61 "$a asciiValue hex" - ifTrue: [^ true]. - - tempValue >= 16r41 "$A asciiValue hex" - ifTrue: [ - tempValue <= 16r5A "$Z asciiValue hex" - ifTrue: [^ true]. - ^ tempValue == 16r5F]. "$_ asciiValue hex" - - tempValue >= 16r30 "$0 asciiValue hex" - ifTrue: [ - tempValue <= 16r39 "$9 asciiValue hex" - ifTrue: [^ true]. - ^ tempValue == 16r3A]. "$: asciiValue hex" - - tempValue == 16r2D "$- asciiValue hex" - ifTrue: [^ true]. - ^ tempValue == 16r2E]. "$. asciiValue hex" - - tempValue <= 16r2040 - ifTrue: [ - tempValue <= 16r36F - ifTrue: [ - tempValue <= 16rF6 - ifTrue: [ - tempValue <= 16rD6 - ifFalse: [^ tempValue >= 16rD8]. - tempValue >= 16rC0 - ifTrue: [^ true]. - ^ tempValue == 16rB7] - ifFalse: [ - tempValue <= 16r2FF - ifTrue: [^ tempValue >= 16rF8]. - ^ tempValue >= 16r300]] - ifFalse: [ - tempValue <= 16r1FFF - ifTrue: [ - tempValue <= 16r37D - ifFalse: [^ tempValue >= 16r37F]. - ^ tempValue >= 16r370] - ifFalse: [ - tempValue <= 16r200D - ifTrue: [^ tempValue >= 16r200C]. - ^ tempValue >= 16r203F]]] - ifFalse: [ - tempValue <= 16rD7FF - ifTrue: [ - tempValue >= 16r2C00 - ifTrue: [ - tempValue >= 16r3001 - ifTrue: [^ true]. - ^ tempValue <= 16r2FEF] - ifFalse: [ - tempValue <= 16r218F - ifFalse: [^ false]. - ^ tempValue >= 16r2070]] - ifFalse: [ - tempValue <= 16rFFFD - ifTrue: [ - tempValue <= 16rFDCF - ifTrue: [^ tempValue >= 16rF900]. - ^ tempValue >= 16rFDF0] - ifFalse: [ - tempValue >= 16r10000 - ifFalse: [^ false]. - ^ tempValue <= 16rEFFFF]]]. -] - -{ #category : #'*XML-Writer-Core' } -Character >> isXMLWriterNameStartChar [ - "Range tests are faster and use less memory than a BitmapCharacterSet, and - a temp is used because Character in newer SpurVM images has no 'value' - inst var. - - NameStartChar ::= - ':' | [A-Z] | '_' | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | - [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | - [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | - [#x10000-#xEFFFF]" - - | tempValue | - - (tempValue := self asciiValue) <= 16r7A "$z asciiValue hex" - ifTrue: [ - tempValue >= 16r61 "$a asciiValue hex" - ifTrue: [^ true]. - - tempValue >= 16r41 "$A asciiValue hex" - ifTrue: [ - tempValue <= 16r5A "$Z asciiValue hex" - ifTrue: [^ true]. - ^ tempValue == 16r5F]. "$_ asciiValue hex" - - ^ tempValue == 16r3A]. "$: asciiValue hex" - - tempValue <= 16r200D - ifTrue: [ - tempValue <= 16r2FF - ifTrue: [ - tempValue >= 16rD8 - ifTrue: [ - tempValue >= 16rF8 - ifTrue: [^ true]. - ^ tempValue <= 16rF6] - ifFalse: [ - tempValue >= 16rC0 - ifFalse: [^ false]. - ^ tempValue <= 16rD6]] - ifFalse: [ - tempValue >= 16r37F - ifTrue: [ - tempValue >= 16r200C - ifTrue: [^ true]. - ^ tempValue <= 16r1FFF] - ifFalse: [ - tempValue <= 16r37D - ifFalse: [^ false]. - ^ tempValue >= 16r370]]] - ifFalse: [ - tempValue <= 16rD7FF - ifTrue: [ - tempValue >= 16r2C00 - ifTrue: [ - tempValue >= 16r3001 - ifTrue: [^ true]. - ^ tempValue <= 16r2FEF] - ifFalse: [ - tempValue <= 16r218F - ifFalse: [^ false]. - ^ tempValue >= 16r2070]] - ifFalse: [ - tempValue >= 16rFDF0 - ifTrue: [ - tempValue >= 16r10000 - ifTrue: [^ tempValue <= 16rEFFFF]. - ^ tempValue <= 16rFFFD] - ifFalse: [ - tempValue <= 16rFDCF - ifFalse: [^ false]. - ^ tempValue >= 16rF900]]]. -] diff --git a/src/XML-Writer-Core/Collection.extension.st b/src/XML-Writer-Core/Collection.extension.st deleted file mode 100644 index 5b3a90799..000000000 --- a/src/XML-Writer-Core/Collection.extension.st +++ /dev/null @@ -1,6 +0,0 @@ -Extension { #name : #Collection } - -{ #category : #'*XML-Writer-Core' } -Collection >> embedInXMLMarkupWriter: aMarkupWriter [ - self do: [:each | each embedInXMLMarkupWriter: aMarkupWriter] -] diff --git a/src/XML-Writer-Core/StandardOrderedDictionary.extension.st b/src/XML-Writer-Core/StandardOrderedDictionary.extension.st deleted file mode 100644 index 94eb913a6..000000000 --- a/src/XML-Writer-Core/StandardOrderedDictionary.extension.st +++ /dev/null @@ -1,43 +0,0 @@ -Extension { #name : #StandardOrderedDictionary } - -{ #category : #'*XML-Writer-Core' } -StandardOrderedDictionary >> writeAttributesOn: aWriter [ - self keysDo: [:attributeName | - aWriter - writeAttributeName: attributeName - value: (self at: attributeName ifAbsent: '')] -] - -{ #category : #'*XML-Writer-Core' } -StandardOrderedDictionary >> writeCanonicalAttributesOn: aWriter [ - | sortedAttributeNames | - - (sortedAttributeNames := self keys) sort: [:a :b | | prefixOfA prefixOfB | - prefixOfA := a xmlWriterPrefixBeforeLocalName. - prefixOfB := b xmlWriterPrefixBeforeLocalName. - prefixOfA = prefixOfB - ifTrue: [ - "if the prefixes are the same, no need to lookup the namespace" - (a xmlWriterLocalNameAfterPrefix: prefixOfA) - <= (b xmlWriterLocalNameAfterPrefix: prefixOfB)] - ifFalse: [| uriOfA uriOfB | - "the namespace URI is the primary key and - the local name is the secondary key" - uriOfA := - aWriter resolveActiveTagWriterAttributePrefix: prefixOfA. - uriOfB := - aWriter resolveActiveTagWriterAttributePrefix: prefixOfB. - uriOfA < uriOfB - or: [ - uriOfA = uriOfB - and: [ - (a xmlWriterLocalNameAfterPrefix: prefixOfA) - <= (b xmlWriterLocalNameAfterPrefix: prefixOfB)]]]]. - - "use to:do: for fast writing" - 1 to: sortedAttributeNames size do: [:i | | attributeName | - attributeName := sortedAttributeNames at: i. - aWriter - writeAttributeName: attributeName - value: (self at: attributeName)]. -] diff --git a/src/XML-Writer-Core/String.extension.st b/src/XML-Writer-Core/String.extension.st deleted file mode 100644 index ed2253838..000000000 --- a/src/XML-Writer-Core/String.extension.st +++ /dev/null @@ -1,30 +0,0 @@ -Extension { #name : #String } - -{ #category : #'*XML-Writer-Core' } -String >> embedInXMLMarkupWriter: aMarkupWriter [ - aMarkupWriter writer string: self -] - -{ #category : #'*XML-Writer-Core' } -String >> xmlWriterLocalNameAfterPrefix: aPrefix [ - "optimized" - | prefixSize | - - (prefixSize := aPrefix size) == 0 - ifTrue: [^ self] - ifFalse: [^ self copyFrom: prefixSize + 2 to: self size] -] - -{ #category : #'*XML-Writer-Core' } -String >> xmlWriterPrefixBeforeLocalName [ - "optimized" - | i | - - i := self size. - [i == 0] - whileFalse: [ - ((self at: i) == $:) - ifTrue: [^ (self copyFrom: 1 to: i - 1)]. - i := i - 1]. - ^ ''. -] diff --git a/src/XML-Writer-Core/UndefinedObject.extension.st b/src/XML-Writer-Core/UndefinedObject.extension.st deleted file mode 100644 index 0c2ab515a..000000000 --- a/src/XML-Writer-Core/UndefinedObject.extension.st +++ /dev/null @@ -1,5 +0,0 @@ -Extension { #name : #UndefinedObject } - -{ #category : #'*XML-Writer-Core' } -UndefinedObject >> embedInXMLMarkupWriter: aMarkupWriter [ -] diff --git a/src/XML-Writer-Core/XMLAttributeDeclarationWriter.class.st b/src/XML-Writer-Core/XMLAttributeDeclarationWriter.class.st deleted file mode 100644 index b7f9e6b16..000000000 --- a/src/XML-Writer-Core/XMLAttributeDeclarationWriter.class.st +++ /dev/null @@ -1,150 +0,0 @@ -" -This class writes attribute declarations for DTD internal subsets, but not if canonical XML is enabled. -" -Class { - #name : #XMLAttributeDeclarationWriter, - #superclass : #XMLMarkupDeclarationWriter, - #instVars : [ - 'attribute', - 'type', - 'defaultPragma', - 'defaultValue' - ], - #category : #'XML-Writer-Core' -} - -{ #category : #accessing } -XMLAttributeDeclarationWriter >> attribute [ - ^ attribute ifNil: [attribute := ''] -] - -{ #category : #accessing } -XMLAttributeDeclarationWriter >> attribute: aName [ - attribute := aName -] - -{ #category : #accessing } -XMLAttributeDeclarationWriter >> declarationType [ - ^ 'ATTLIST' -] - -{ #category : #accessing } -XMLAttributeDeclarationWriter >> defaultPragma [ - ^ defaultPragma ifNil: [defaultPragma := ''] -] - -{ #category : #accessing } -XMLAttributeDeclarationWriter >> defaultPragma: aDefaultPragma [ - defaultPragma := - (aDefaultPragma notNil - and: [aDefaultPragma notEmpty - and: [aDefaultPragma first == $#]]) - ifTrue: [aDefaultPragma allButFirst] - ifFalse: [aDefaultPragma] -] - -{ #category : #accessing } -XMLAttributeDeclarationWriter >> defaultValue [ - ^ defaultValue ifNil: [defaultValue := ''] -] - -{ #category : #accessing } -XMLAttributeDeclarationWriter >> defaultValue: aDefaultValue [ - defaultValue := aDefaultValue -] - -{ #category : #accessing } -XMLAttributeDeclarationWriter >> element [ - ^ self name -] - -{ #category : #accessing } -XMLAttributeDeclarationWriter >> element: aName [ - self name: aName -] - -{ #category : #accessing } -XMLAttributeDeclarationWriter >> type [ - ^ type ifNil: [type := 'CDATA'] -] - -{ #category : #accessing } -XMLAttributeDeclarationWriter >> type: aType [ - type := aType -] - -{ #category : #private } -XMLAttributeDeclarationWriter >> writeAttribute [ - self writer - space; - writeName: self attribute -] - -{ #category : #private } -XMLAttributeDeclarationWriter >> writeBody [ - self isOmittable - ifFalse: [ - self - writeAttribute; - writeType; - writeDefaultPragma; - writeDefaultValue] -] - -{ #category : #writing } -XMLAttributeDeclarationWriter >> writeDefaultPragma [ - self defaultPragma notEmpty - ifTrue: [ - self writer - space; - nextPut: $#; - nextPutAll: self defaultPragma] -] - -{ #category : #writing } -XMLAttributeDeclarationWriter >> writeDefaultValue [ - (self defaultPragma isEmpty - or: [self defaultPragma = 'FIXED']) - ifTrue: [ - self writer - space; - writeEscapedContentString: self defaultValue] -] - -{ #category : #private } -XMLAttributeDeclarationWriter >> writeType [ - | typeString typeStringSize isEnumeration nameStart | - - self writer space. - typeString := self type. - typeStringSize := typeString size. - isEnumeration := false. - 1 to: typeStringSize do: [:i | | nextChar | - nextChar := typeString at: i. - isEnumeration - ifTrue: [ - nameStart - ifNil: [ - nextChar isXMLWriterNameStartChar - ifTrue: [nameStart := i] - ifFalse: [self writer nextPut: nextChar]] - ifNotNil: [ - nextChar isXMLWriterNameChar - ifFalse: [ - self writer writeName: - (typeString - copyFrom: nameStart - to: i - 1). - nameStart := nil. - self writer nextPut: nextChar]]] - ifFalse: [ - isEnumeration := nextChar == $(. - self writer nextPut: nextChar]]. - - nameStart - ifNotNil: [ - self writer writeName: - (typeString - copyFrom: nameStart - to: typeStringSize)]. -] diff --git a/src/XML-Writer-Core/XMLCDataWriter.class.st b/src/XML-Writer-Core/XMLCDataWriter.class.st deleted file mode 100644 index 83ac4e21a..000000000 --- a/src/XML-Writer-Core/XMLCDataWriter.class.st +++ /dev/null @@ -1,49 +0,0 @@ -" -This class writes sections. If canonical XML is enabled, it writes its contents as a regular XML-escaped string instead. -" -Class { - #name : #XMLCDataWriter, - #superclass : #XMLMarkupWriter, - #instVars : [ - 'string' - ], - #category : #'XML-Writer-Core' -} - -{ #category : #accessing } -XMLCDataWriter >> string [ - ^ string ifNil: [string := ''] -] - -{ #category : #accessing } -XMLCDataWriter >> string: aString [ - string := aString -] - -{ #category : #private } -XMLCDataWriter >> writeBody [ - self writer isCanonical - ifTrue: [ - self parent - ifNotNil: [:parent | parent newStringMarkupBeingWritten]. - self writer writeEscapedContent: self string] - ifFalse: [self writer nextPutAll: self string] -] - -{ #category : #private } -XMLCDataWriter >> writeEpilogue [ - self isCanonical - ifFalse: [ - self writer - nextPutAll: ']]>'; - formatAfterCData: self] -] - -{ #category : #private } -XMLCDataWriter >> writePrologue [ - self isCanonical - ifFalse: [ - self writer - formatBeforeCData: self; - nextPutAll: '> formatAfterComment: aCommentWriter [ - self writer hadActiveTagWriter - ifFalse: [self writeLineBreak] -] - -{ #category : #formatting } -XMLCanonicalWriterFormatter >> formatAfterPI: aPIWriter [ - self writer hadActiveTagWriter - ifFalse: [self writeLineBreak] -] - -{ #category : #formatting } -XMLCanonicalWriterFormatter >> formatBeforeComment: aCommentWriter [ - (self writer hadActiveTagWriter - and: [self writer hasActiveTagWriter not]) - ifTrue: [self writeLineBreak] -] - -{ #category : #formatting } -XMLCanonicalWriterFormatter >> formatBeforePI: aPIWriter [ - (self writer hadActiveTagWriter - and: [self writer hasActiveTagWriter not]) - ifTrue: [self writeLineBreak] -] diff --git a/src/XML-Writer-Core/XMLCommentWriter.class.st b/src/XML-Writer-Core/XMLCommentWriter.class.st deleted file mode 100644 index 9efc31067..000000000 --- a/src/XML-Writer-Core/XMLCommentWriter.class.st +++ /dev/null @@ -1,51 +0,0 @@ -" -This class writes XML comments, but not in DTD internal subsets if canonical XML is enabled. -" -Class { - #name : #XMLCommentWriter, - #superclass : #XMLMarkupWriter, - #instVars : [ - 'string' - ], - #category : #'XML-Writer-Core' -} - -{ #category : #testing } -XMLCommentWriter >> isOmittable [ - ^ self isCanonical - and: [self isEmbeddedInDoctypeDeclaration] -] - -{ #category : #accessing } -XMLCommentWriter >> string [ - ^ string ifNil: [string := ''] -] - -{ #category : #accessing } -XMLCommentWriter >> string: aString [ - string := aString -] - -{ #category : #private } -XMLCommentWriter >> writeBody [ - self isOmittable - ifFalse: [self writer nextPutAll: self string] -] - -{ #category : #private } -XMLCommentWriter >> writeEpilogue [ - self isOmittable - ifFalse: [ - self writer - nextPutAll: '-->'; - formatAfterComment: self] -] - -{ #category : #private } -XMLCommentWriter >> writePrologue [ - self isOmittable - ifFalse: [ - self writer - formatBeforeComment: self; - nextPutAll: '' - '' - '' - '' - '')). -] - -{ #category : #tests } -XMLWriterTest >> testCanonicalDTDs [ - | writer | - - (writer := XMLWriter new) - isCanonical: true; - comment: 'before dtd'. - writer doctype - root: 'element'; - systemID: 'doc.dtd'; - with: [ - writer comment: 'ignored'. - writer elementDeclaration - name: 'ignored'; - contentModel: 'EMPTY'. - writer entityDeclaration - name: 'ignored'; - replacement: 'ignored'. - writer attributeDeclaration - element: 'ignored'; - attribute: 'ignored'; - type: 'CDATA'; - defaultPragma: '#REQUIRED'. - writer notationDeclaration - name: 'external'; - systemID: 'external.txt'. - writer pi - target: 'ignored'; - data: 'ignored']. - writer - comment: 'after dtd'; - tag: 'empty'. - - self assert: - writer contents = - (self onCanonicalLineBreakJoin: - #('' - '' - '')). -] - -{ #category : #tests } -XMLWriterTest >> testCanonicalEscaping [ - | writer tag | - - "Attributes are changed 'by replacing all ampersands (&) with - &, all open angle brackets (<) with <, all quotation mark - characters with "...' - - PCDATA is changed so 'all ampersands are replaced by &, - all open angle brackets (<) are replaced by <, all closing - angle brackets (>) are replaced by >...'" - (writer := XMLWriter new) - isCanonical: true. - (tag := writer tag: 'canonical') - attributeAt: 'escaping' - put: '<>"''&'. - tag with: '<>"''&'. - self assert: - writer contents = - '<>"''&'. -] - -{ #category : #tests } -XMLWriterTest >> testCanonicalEscapingWhitespace [ - | whitespace writer tag | - - "Attributes are changed by replacing 'the whitespace characters - #x9, #xA, and #xD, with character references...' - - PCDATA is changed so 'all #xD characters are replaced by ...'" - whitespace := - String - with: 16r9 asCharacter "tab" - with: 16rA asCharacter "lf" - with: 16rD asCharacter "cr" - with: 16r20 asCharacter. "space" - (writer := XMLWriter new) - isCanonical: true. - (tag := writer tag: 'canonical') - attributeAt: 'whitespace' - put: whitespace. - tag with: whitespace. - self assert: - writer contents = - ('{1}{2} {4}' - format: whitespace). -] - -{ #category : #tests } -XMLWriterTest >> testCanonicalNonRedundantXMLNSDeclarations [ - | withBlock | - - withBlock := [:writer | - (writer tag: 'one') - xmlns: 'defaultNS'; - xmlnsAt: 'prefix' put: 'prefixNS'; - with: [ - (writer tag: 'two') - xmlns: 'newDefaultNS'; - xmlnsAt: 'prefix' put: 'newPrefixNS'; - with: [ - "skip one tag" - writer - tag: 'three' - with: [ - "then add more non-reundant xmlns declarations" - (writer tag: 'four') - xmlns: ''; - xmlnsAt: 'prefix' put: 'prefixNS']]]]. - self assert: - (XMLWriter new - isCanonical: true; - writeWith: withBlock; - contents) = - ('', - '', - '', - '', - '', - '', - ''). -] - -{ #category : #tests } -XMLWriterTest >> testCanonicalPIs [ - | writer | - - (writer := XMLWriter new) - isCanonical: true. - writer pi - target: 'one'; - data: 'one'. - writer pi target: 'two'. - writer - tag: 'three' - with: [ - writer pi - target: 'four'; - data: 'four'. - writer pi target: 'five'. - writer tag: 'six'. - writer pi target: 'seven'. - writer pi - target: 'eight'; - data: 'eight']. - writer pi target: 'nine'. - writer pi - target: 'ten'; - data: 'ten'. - - self assert: - writer contents = - (self onCanonicalLineBreakJoin: - #('' - '' - '' - '' - '')). -] - -{ #category : #tests } -XMLWriterTest >> testCanonicalRedundantXMLNSDeclarations [ - | withBlock | - - withBlock := [:writer | - (writer tag: 'one') - xmlns: 'defaultNS'; - xmlnsAt: 'prefix' put: 'prefixNS'; - with: [ - (writer tag: 'two') - xmlns: 'defaultNS'; - xmlnsAt: 'prefix' put: 'prefixNS'; - with: [ - "skip one tag" - writer - tag: 'three' - with: [ - "then add more reundant xmlns declarations" - (writer tag: 'four') - xmlns: 'defaultNS'; - xmlnsAt: 'prefix' put: 'prefixNS']]]]. - self assert: - (XMLWriter new - isCanonical: true; - writeWith: withBlock; - contents) = - ('', - '', - ''). - - self assert: - (XMLWriter new - isCanonical: true; - writeWith: [:writer | (writer tag: 'empty') xmlns: '']; - contents) = ''. -] - -{ #category : #tests } -XMLWriterTest >> testCanonicalTags [ - | writer | - - (writer := XMLWriter new) - isCanonical: true. - (writer tag: 'tags') - attributeAt: 'b:d' put: '5'; - attributeAt: 'b:c' put: '4'; - attributeAt: 'a' put: '1'; - attributeAt: 'a:b' put: '3'; - attributeAt: 'xml:d' put: '2'; - xmlnsAt: 'b' put: 'ns2'; - xmlnsAt: 'a' put: 'ns1'; - xmlns: 'default'; - with: [ - (writer tag: 'cdata') - attributeAt: 'a:a' put: '2'; - attributeAt: 'undeclared:a' put: '1'; - with: [writer cdata: '']. - writer - tag: 'empty' - with: nil]. - - self assert: - writer contents = - ('', - '<escaped name="&value;" />', - '', - ''). -] - -{ #category : #tests } -XMLWriterTest >> testCanonicalXMLDeclarationsAndPIs [ - | writer | - - (writer := XMLWriter new) - isCanonical: true; - xml; - comment: 'start of pi'. - writer pi - target: 'pi'; - data: 'preserved'. - writer - comment: 'end of pi'; - tag: 'empty'. - - self assert: - writer contents = - (self onCanonicalLineBreakJoin: - #('' - '' - '' - '')). -] - -{ #category : #tests } -XMLWriterTest >> testClose [ - self assert: - (String streamContents: [:stream | - (XMLWriter on: stream) - tag: 'one'; - tag: 'two'; - close]) = ''. - self assert: - (String streamContents: [:stream | - ((XMLWriter on: stream) - tag: 'one'; - tag: 'two') close]) = ''. -] - -{ #category : #tests } -XMLWriterTest >> testContentEntityReferenceEscaping [ - self assert: - (XMLWriter writeWith: [:writer | - (writer - escapesContentEntityReferences: false; - tag: 'one') - attributeAt: 'two' put: '<"&three;">'; - with: '<"&four;">']) = - '<"&four;">'. - - self assert: - (XMLWriter writeWith: [:writer | - (writer - escapesContentEntityReferences: true; - tag: 'one') - attributeAt: 'two' put: '<"&three;">'; - with: '<"&four;">']) = - '<"&four;">'. -] - -{ #category : #tests } -XMLWriterTest >> testContentEscaping [ - | writer | - - (writer := XMLWriter new) - tag - name: 'test'; - attributeAt: 'escaped' put: '& " < >'; - xmlns: '& " < >'; - with: '& " < >'. - self assert: - writer contents = - '& " < >'. - - ((writer := XMLWriter new) - isEscaping: false; - tag) - name: 'test'; - xmlns: '& " < >'; - attributeAt: 'unescaped' put: '& " < >'; - with: '& " < >'. - self assert: writer contents = '" unescaped="& " < >">& " < >'. -] - -{ #category : #tests } -XMLWriterTest >> testContents [ - self assert: - (XMLWriter new - tag: 'one'; - tag: 'two'; - contents) = ''. - self assert: - (XMLWriter new - tag: 'one'; - tag: 'two') contents = ''. -] - -{ #category : #tests } -XMLWriterTest >> testEmbedInMarkupWriter [ - (Array - with: 'onethree' - with: #('one' nil '' 'three') - with: #($o $n $e $< $t $w $o $/ $> nil $t $h $r $e $e) - with: - (Array - with: [:w | w string: 'one'] - with: [:w | w string: ''] - with: [:w | w string: 'three'] - with: nil)) - do: [:each | - self assert: - (XMLWriter writeWith: [:writer | - writer - tag: 'test' - with: each]) = 'one<two/>three']. - - self assert: - (XMLWriter writeWith: [:writer | - writer - tag: 'test' - with: $<]) = '<'. - - (Array with: nil with: '' with: #() with: []) do: [:each | - self assert: - (XMLWriter writeWith: [:writer | - writer - tag: 'test' - with: each]) = '']. -] - -{ #category : #tests } -XMLWriterTest >> testEnablePlatformSpecificLineBreak [ - | writer | - - writer := XMLWriter new. - self - assert: writer enablePlatformSpecificLineBreak == writer; - assert: writer lineBreak = writer platformSpecificLineBreak. -] - -{ #category : #tests } -XMLWriterTest >> testEnablePrettyPrinting [ - | writer | - - (writer := XMLWriter new) - enablePrettyPrinting; - comment: 'an example'. - writer tag - name: 'example:user'; - xmlnsAt: 'example' put: 'urn://example'; - with: [ - writer - tag: 'username' with: [ - writer - comment: 'id'; - string: 'jsmith']; - tag: 'real-name' with: [ - writer tag: 'last-name' with: 'Smith'. - writer string: ', '. - writer pi - target: 'type'; - data: 'string'. - writer - comment: 'first name'; - string: 'John']; - tag: 'age' with: [ - writer pi - target: 'type'; - data: 'integer'. - writer comment: 'not supplied']; - tag: 'id' with: [ - writer - string: '101'; - comment: '']; - tag: 'contact' with: [ - writer - tag: 'email'; - string: 'alternate']]. - - self assert: - writer contents = - (self prettyPrintedLines: #( - #(0 '' - '') - #(1 '') - #(2 'jsmith') - #(1 '') - #(2 'Smith, John') - #(1 '') - #(2 '' - '') - #(1 '' - '101' - '') - #(2 'alternate') - #(0 ''))). -] - -{ #category : #tests } -XMLWriterTest >> testEnablePrettyPrintingDTD [ - | writer | - - (writer := XMLWriter new) - enablePrettyPrinting; - xml. - writer doctype - root: 'pretty'; - with: [ - writer comment: 'element'. - writer elementDeclaration - name: 'pretty'; - contentModel: 'EMPTY'. - writer comment: 'entity'. - writer entityDeclaration - isParameter: true; - name: 'comment'; - replacement: ''. - writer % 'comment'. - writer comment: 'attribute'. - writer attributeDeclaration - element: 'pretty'; - attribute: 'name'; - type: 'CDATA'; - defaultPragma: '#IMPLIED'. - writer comment: 'notation'. - writer notationDeclaration - name: 'external'; - systemID: 'external.txt'. - writer pi - target: 'target'; - data: 'data']. - - self assert: - writer contents = - (self prettyPrintedLines: #( - #(0 '' - '' - '' - '' - '">' - '%comment;' - '' - '' - '' - '' - '') - #(0 ']>' - ''))). -] - -{ #category : #tests } -XMLWriterTest >> testEnablePrologPrettyPrinting [ - | writer | - - (writer := XMLWriter new) - enablePrologPrettyPrinting; - xml. - writer doctype - root: 'pretty'; - with: [ - writer comment: 'element'. - writer elementDeclaration - name: 'pretty'; - contentModel: 'ANY'. - writer elementDeclaration - name: 'ugly'; - contentModel: 'ANY'. - writer comment: 'entity'. - writer entityDeclaration - isParameter: true; - name: 'comment'; - replacement: ''. - writer % 'comment'. - writer comment: 'attribute'. - writer attributeDeclaration - element: 'pretty'; - attribute: 'name'; - type: 'CDATA'; - defaultPragma: '#IMPLIED'. - writer comment: 'notation'. - writer notationDeclaration - name: 'external'; - systemID: 'external.txt'. - writer pi - target: 'target'; - data: 'data']. - writer comment: 'before'. - writer pi - target: 'beforeTarget'; - data: 'beforeData'. - "content should be unformatted" - writer - tag: 'pretty' - with: [ - writer comment: 'ugly'. - writer pi - target: 'uglyTarget'; - data: 'uglyData'. - writer - tag: 'ugly' - with: 'test']. - writer comment: 'after'. - writer pi - target: 'afterTarget'; - data: 'afterData'. - - self assert: - writer contents = - (self prettyPrintedLines: #( - #(0 '' - '' - '' - '' - '' - '">' - '%comment;' - '' - '' - '' - '' - '') - #(0 ']>' - '' - '' - 'test' - '' - ''))). -] - -{ #category : #tests } -XMLWriterTest >> testEntityDeclaration [ - | writer | - - (writer := XMLWriter new) - doctypeDeclaration - root: 'test'; - with: [ - writer entityDeclaration - name: 'internal'; - replacement: 'replacement'. - writer entityDeclaration name: 'emptyInternal'. - writer entityDeclaration - name: 'publicExternal'; - publicID: 'publicID'; - systemID: 'systemID'. - writer entityDeclaration - name: 'publicExternal'; - publicID: 'publicID'. - writer entityDeclaration - name: 'systemExternal'; - systemID: 'systemID'. - writer entityDeclaration - name: 'unparsed'; - systemID: 'systemID'; - ndata: 'notation']. - - self assert: - writer contents = - ('', - '', - '', - '', - '', - '', - ']>'). -] - -{ #category : #tests } -XMLWriterTest >> testEntityReference [ - | writer | - - (writer := XMLWriter new) - tag: 'entities' - with: [ - writer & 'one'. - writer string: 'two'. - writer & 'three']. - - self assert: writer contents = '&one;two&three;'. -] - -{ #category : #tests } -XMLWriterTest >> testEntityValueEscaping [ - | writer | - - (writer := XMLWriter new) - entityDeclaration - name: 'test'; - replacement: '% " < >'; - write. - self assert: writer contents = '">'. - - ((writer := XMLWriter new) - isEscaping: false; - entityDeclaration) - name: 'test'; - replacement: '% " < >'; - write. - self assert: writer contents = '">'. - -] - -{ #category : #tests } -XMLWriterTest >> testEscapesContentEntityReferences [ - | writer | - - writer := XMLWriter new. - self - assert: (writer escapesContentEntityReferences: true) == writer; - assert: writer escapesContentEntityReferences; - assert: writer isEscaping; - assert: writer contentEscapes = writer contentDefaultEscapes; - assert: writer contentStringEscapes = writer contentStringDefaultEscapes. - - self - assert: (writer escapesContentEntityReferences: false) == writer; - deny: writer escapesContentEntityReferences; - assert: writer isEscaping; - assert: writer contentEscapes = writer contentNonEntityEscapes; - assert: writer contentStringEscapes = writer contentStringNonEntityEscapes. - - writer isEscaping: false. - self - deny: writer escapesContentEntityReferences; - assert: (writer escapesContentEntityReferences: true) == writer; - assert: writer escapesContentEntityReferences; - assert: writer isEscaping; - assert: writer contentEscapes = writer contentDefaultEscapes; - assert: writer contentStringEscapes = writer contentStringDefaultEscapes. -] - -{ #category : #tests } -XMLWriterTest >> testFormatter [ - | writer formatter | - - writer := XMLWriter new. - self assert: writer formatter isNil. - - formatter := XMLPrettyPrintingWriterFormatter new. - self - assert: (writer formatter: formatter) == writer; - assert: writer formatter == formatter; - assert: formatter writer == writer. - - self - assert: (writer formatter: nil) == writer; - assert: writer formatter isNil. -] - -{ #category : #tests } -XMLWriterTest >> testFormattingAttributeDeclarations [ - | formatter writer doctypeWriter firstDeclarationWriter secondDeclarationWriter thirdDeclarationWriter | - - formatter := XMLWriterRecordingFormatterProxy new. - (writer := XMLWriter new) formatter: formatter. - (doctypeWriter := writer doctype) - root: 'one'; - with: [ - (firstDeclarationWriter := writer attributeDeclaration) - element: 'one'; - attribute: 'one'; - type: 'CDATA'; - defaultPragma: '#FIXED'; - defaultValue: 'default'. - (secondDeclarationWriter := writer attributeDeclaration) - element: 'one'; - attribute: 'two'; - type: '(four | five)'; - defaultPragma: '#IMPLIED'. - (thirdDeclarationWriter := writer attributeDeclaration) - element: 'one'; - attribute: 'three'; - type: 'NOTATION (six | seven)'; - defaultPragma: '#IMPLIED'.]. - self assert: - (formatter - receivedNext: #formatBeforeDoctypeDeclaration: - with: doctypeWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'one'). - self assert: - (formatter - receivedNext: #formatBeforeInternalSubset: - with: doctypeWriter). - - self assert: - (formatter - receivedNext: #formatBeforeDeclaration: - with: firstDeclarationWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'one'). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'one'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringValue: formatAfterQuotedStringValue:) - with: 'default'). - self assert: - (formatter - receivedNext: #formatAfterDeclaration: - with: firstDeclarationWriter). - - self assert: - (formatter - receivedNext: #formatBeforeDeclaration: - with: secondDeclarationWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'one'). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'two'). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'four'). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'five'). - self assert: - (formatter - receivedNext: #formatAfterDeclaration: - with: secondDeclarationWriter). - - self assert: - (formatter - receivedNext: #formatBeforeDeclaration: - with: thirdDeclarationWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'one'). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'three'). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'six'). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'seven'). - self assert: - (formatter - receivedNext: #formatAfterDeclaration: - with: thirdDeclarationWriter). - - self assert: - (formatter - receivedNextAll: #(formatAfterInternalSubset: formatAfterDoctypeDeclaration:) - with: doctypeWriter). - - self assert: - writer contents = - ('', - '', - '', - ']>'). -] - -{ #category : #tests } -XMLWriterTest >> testFormattingContent [ - | formatter writer tagWriter commentWriter entityRefWriter | - - formatter := XMLWriterRecordingFormatterProxy new. - (writer := XMLWriter new) formatter: formatter. - (tagWriter := writer tag: 'empty') write. - self assert: - (formatter - receivedNext: #formatBeforeStartTag: - with: tagWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'empty'). - self assert: - (formatter - receivedNext: #formatAfterEndTag: - with: tagWriter). - - (tagWriter := writer tag: 'not-empty') - xmlns: 'defaultNS'; - attributeAt: 'name' put: 'value'; - with: [ - writer string: 'one'. - (commentWriter := writer comment) string: 'two'. - (entityRefWriter := writer entityRef) name: 'three'. - writer string: 'four']. - self assert: - (formatter - receivedNext: #formatBeforeStartTag: - with: tagWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'not-empty'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringName: formatAfterQuotedStringName:) - with: 'xmlns'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringValue: formatAfterQuotedStringValue:) - with: 'defaultNS'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringName: formatAfterQuotedStringName:) - with: 'name'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringValue: formatAfterQuotedStringValue:) - with: 'value'). - self assert: - (formatter - receivedNext: #formatAfterStartTag: - with: tagWriter). - - self assert: - (formatter - receivedNextAll: #(formatBeforeComment: formatAfterComment:) - with: commentWriter). - - self assert: - (formatter - receivedNextAll: #(formatBeforeEntityReference: formatAfterEntityReference:) - with: entityRefWriter). - - self assert: - (formatter - receivedNext: #formatBeforeEndTag: - with: tagWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'not-empty'). - self assert: - (formatter - receivedNext: #formatAfterEndTag: - with: tagWriter). - - writer outputsSelfClosingTags: false. - (tagWriter := writer tag: 'empty') write. - self assert: - (formatter - receivedNext: #formatBeforeStartTag: - with: tagWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'empty'). - self assert: - (formatter - receivedNext: #formatAfterStartTag: - with: tagWriter). - self assert: - (formatter - receivedNext: #formatBeforeEndTag: - with: tagWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'empty'). - self assert: - (formatter - receivedNext: #formatAfterEndTag: - with: tagWriter). - - self assert: - writer contents = - ('', - '', - 'one&three;four', - '', - ''). -] - -{ #category : #tests } -XMLWriterTest >> testFormattingElementDeclarations [ - | formatter writer doctypeWriter firstDeclarationWriter secondDeclarationWriter thirdDeclarationWriter fourthDeclarationWriter | - - formatter := XMLWriterRecordingFormatterProxy new. - (writer := XMLWriter new) formatter: formatter. - (doctypeWriter := writer doctype) - root: 'one'; - with: [ - (firstDeclarationWriter := writer elementDeclaration) - name: 'one'; - contentModel: '(two, three)'. - (secondDeclarationWriter := writer elementDeclaration) - name: 'two'; - contentModel: '(#PCDATA | four)*'. - (thirdDeclarationWriter := writer elementDeclaration) - name: 'three'; - contentModel: 'ANY'. - (fourthDeclarationWriter := writer elementDeclaration) - name: 'four'; - contentModel: 'EMPTY']. - self assert: - (formatter - receivedNext: #formatBeforeDoctypeDeclaration: - with: doctypeWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'one'). - self assert: - (formatter - receivedNext: #formatBeforeInternalSubset: - with: doctypeWriter). - - self assert: - (formatter - receivedNext: #formatBeforeDeclaration: - with: firstDeclarationWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'one'). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'two'). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'three'). - self assert: - (formatter - receivedNext: #formatAfterDeclaration: - with: firstDeclarationWriter). - - self assert: - (formatter - receivedNext: #formatBeforeDeclaration: - with: secondDeclarationWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'two'). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'four'). - self assert: - (formatter - receivedNext: #formatAfterDeclaration: - with: secondDeclarationWriter). - - self assert: - (formatter - receivedNext: #formatBeforeDeclaration: - with: thirdDeclarationWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'three'). - self assert: - (formatter - receivedNext: #formatAfterDeclaration: - with: thirdDeclarationWriter). - - self assert: - (formatter - receivedNext: #formatBeforeDeclaration: - with: fourthDeclarationWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'four'). - self assert: - (formatter - receivedNext: #formatAfterDeclaration: - with: fourthDeclarationWriter). - - self assert: - (formatter - receivedNextAll: #(formatAfterInternalSubset: formatAfterDoctypeDeclaration:) - with: doctypeWriter). - - self assert: - writer contents = - ('', - '', - '', - '', - ']>'). -] - -{ #category : #tests } -XMLWriterTest >> testFormattingEntityDelcarations [ - | formatter writer doctypeWriter firstDeclarationWriter secondDeclarationWriter thirdDeclarationWriter fourthDeclarationWriter | - - formatter := XMLWriterRecordingFormatterProxy new. - (writer := XMLWriter new) formatter: formatter. - (doctypeWriter := writer doctype) - root: 'test'; - with: [ - (firstDeclarationWriter := writer entityDeclaration) - isParameter: true; - name: 'one'; - replacement: 'replacement'. - (secondDeclarationWriter := writer entityDeclaration) - name: 'two'; - publicID: 'second'; - systemID: 'two.ent'. - (thirdDeclarationWriter := writer entityDeclaration) - name: 'three'; - systemID: 'three.ent'. - (fourthDeclarationWriter := writer entityDeclaration) - name: 'four'; - publicID: 'fourth'; - systemID: 'four.ent'; - ndata: 'notation']. - self assert: - (formatter - receivedNext: #formatBeforeDoctypeDeclaration: - with: doctypeWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'test'). - self assert: - (formatter - receivedNext: #formatBeforeInternalSubset: - with: doctypeWriter). - - self assert: - (formatter - receivedNext: #formatBeforeDeclaration: - with: firstDeclarationWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'one'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringValue: formatAfterQuotedStringValue:) - with: 'replacement'). - self assert: - (formatter - receivedNext: #formatAfterDeclaration: - with: firstDeclarationWriter). - - self assert: - (formatter - receivedNext: #formatBeforeDeclaration: - with: secondDeclarationWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'two'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringValue: formatAfterQuotedStringValue:) - with: 'second'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringValue: formatAfterQuotedStringValue:) - with: 'two.ent'). - self assert: - (formatter - receivedNext: #formatAfterDeclaration: - with: secondDeclarationWriter). - - self assert: - (formatter - receivedNext: #formatBeforeDeclaration: - with: thirdDeclarationWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'three'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringValue: formatAfterQuotedStringValue:) - with: 'three.ent'). - self assert: - (formatter - receivedNext: #formatAfterDeclaration: - with: thirdDeclarationWriter). - - self assert: - (formatter - receivedNext: #formatBeforeDeclaration: - with: fourthDeclarationWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'four'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringValue: formatAfterQuotedStringValue:) - with: 'fourth'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringValue: formatAfterQuotedStringValue:) - with: 'four.ent'). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'notation'). - self assert: - (formatter - receivedNext: #formatAfterDeclaration: - with: fourthDeclarationWriter). - - self assert: - (formatter - receivedNextAll: #(formatAfterInternalSubset: formatAfterDoctypeDeclaration:) - with: doctypeWriter). - - self assert: - writer contents = - ('', - '', - '', - '', - ']>'). -] - -{ #category : #tests } -XMLWriterTest >> testFormattingPIs [ - | formatter writer piWriter | - - formatter := XMLWriterRecordingFormatterProxy new. - (writer := XMLWriter new) formatter: formatter. - - (piWriter := writer pi) - target: 'xml-xsl'; - data: 'type="text/xsl" href=''demo.xsl'''; - write. - self assert: - (formatter - receivedNext: #formatBeforePI: - with: piWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringName: formatAfterQuotedStringName:) - with: 'type'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringValue: formatAfterQuotedStringValue:) - with: 'text/xsl'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringName: formatAfterQuotedStringName:) - with: 'href'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringValue: formatAfterQuotedStringValue:) - with: 'demo.xsl'). - self assert: - (formatter - receivedNext: #formatAfterPI: - with: piWriter). - - (piWriter := writer pi) - target: 'xml-xsl'; - data: 'type href'; - write. - self assert: - (formatter - receivedNext: #formatBeforePI: - with: piWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringName: formatAfterQuotedStringName:) - with: 'type'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringName: formatAfterQuotedStringName:) - with: 'href'). - self assert: - (formatter - receivedNext: #formatAfterPI: - with: piWriter). - - (piWriter := writer pi) - target: 'xml-xsl'; - data: '"text/xsl" ''demo.xsl'''; - write. - self assert: - (formatter - receivedNext: #formatBeforePI: - with: piWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringValue: formatAfterQuotedStringValue:) - with: 'text/xsl'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringValue: formatAfterQuotedStringValue:) - with: 'demo.xsl'). - self assert: - (formatter - receivedNext: #formatAfterPI: - with: piWriter). - - (piWriter := writer pi) - target: 'xml-xsl'; - data: '"text/xsl" "demo.xsl'; - write. - self assert: - (formatter - receivedNext: #formatBeforePI: - with: piWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringValue: formatAfterQuotedStringValue:) - with: 'text/xsl'). - self assert: - (formatter - receivedNext: #formatAfterPI: - with: piWriter). - - (piWriter := writer pi) - target: 'xml-xsl'; - data: '"text/xsl" ''demo.xsl'; - write. - self assert: - (formatter - receivedNext: #formatBeforePI: - with: piWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringValue: formatAfterQuotedStringValue:) - with: 'text/xsl'). - self assert: - (formatter - receivedNext: #formatAfterPI: - with: piWriter). - - self assert: - writer contents = - ('', - '', - '', - '', - ''). -] - -{ #category : #tests } -XMLWriterTest >> testFormattingProlog [ - | formatter writer xmlDeclarationWriter doctypeWriter | - - formatter := XMLWriterRecordingFormatterProxy new. - (writer := XMLWriter new) formatter: formatter. - (xmlDeclarationWriter := writer xml) - version: '1.0'; - encoding: 'UTF-16'; - standalone: 'yes'; - write. - self assert: - (formatter - receivedNext: #formatBeforeXMLDeclaration: - with: xmlDeclarationWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringName: formatAfterQuotedStringName:) - with: 'version'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringValue: formatAfterQuotedStringValue:) - with: '1.0'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringName: formatAfterQuotedStringName:) - with: 'encoding'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringValue: formatAfterQuotedStringValue:) - with: 'UTF-16'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringName: formatAfterQuotedStringName:) - with: 'standalone'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringValue: formatAfterQuotedStringValue:) - with: 'yes'). - self assert: - (formatter - receivedNext: #formatAfterXMLDeclaration: - with: xmlDeclarationWriter). - - (doctypeWriter := writer doctype) - root: 'test'; - publicID: 'public'; - systemID: 'system'; - write. - self assert: - (formatter - receivedNext: #formatBeforeDoctypeDeclaration: - with: doctypeWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'test'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringValue: formatAfterQuotedStringValue:) - with: 'public'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringValue: formatAfterQuotedStringValue:) - with: 'system'). - self assert: - (formatter - receivedNext: #formatAfterDoctypeDeclaration: - with: doctypeWriter). - - (doctypeWriter := writer doctype) - root: 'test'; - systemID: 'system'; - write. - self assert: - (formatter - receivedNext: #formatBeforeDoctypeDeclaration: - with: doctypeWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'test'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringValue: formatAfterQuotedStringValue:) - with: 'system'). - self assert: - (formatter - receivedNext: #formatAfterDoctypeDeclaration: - with: doctypeWriter). - - self assert: - writer contents = - ('', - '', - ''). -] - -{ #category : #tests } -XMLWriterTest >> testFormattingUnsafeTagWriters [ - | formatter writer tagWriter | - - formatter := XMLWriterRecordingFormatterProxy new. - (writer := XMLWriter new) formatter: formatter. - (tagWriter := writer startTag: 'test') - xmlns: 'defaultNS'; - attributeAt: 'name' put: 'value'; - write. - self assert: - (formatter - receivedNext: #formatBeforeStartTag: - with: tagWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'test'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringName: formatAfterQuotedStringName:) - with: 'xmlns'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringValue: formatAfterQuotedStringValue:) - with: 'defaultNS'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringName: formatAfterQuotedStringName:) - with: 'name'). - self assert: - (formatter - receivedNextAll: #(formatBeforeQuotedStringValue: formatAfterQuotedStringValue:) - with: 'value'). - self assert: - (formatter - receivedNext: #formatAfterStartTag: - with: tagWriter). - - (tagWriter := writer endTag: 'test') write. - self assert: - (formatter - receivedNext: #formatBeforeEndTag: - with: tagWriter). - self assert: - (formatter - receivedNextAll: #(formatBeforeName: formatAfterName:) - with: 'test'). - self assert: - (formatter - receivedNext: #formatAfterEndTag: - with: tagWriter). - - self assert: - writer contents = - ''. -] - -{ #category : #tests } -XMLWriterTest >> testHadActiveTagWriter [ - | writer tagWriter | - - writer := XMLWriter new. - self deny: writer hadActiveTagWriter. - - writer xml. - self deny: writer hadActiveTagWriter. - - tagWriter := writer tag: 'one'. - self assert: writer hadActiveTagWriter. - - tagWriter write. - self assert: writer hadActiveTagWriter. -] - -{ #category : #tests } -XMLWriterTest >> testHasActiveTagWriter [ - | writer tagWriter | - - writer := XMLWriter new. - self deny: writer hasActiveTagWriter. - - writer xml. - self deny: writer hasActiveTagWriter. - - tagWriter := writer tag: 'one'. - self assert: writer hasActiveTagWriter. - - tagWriter write. - self deny: writer hasActiveTagWriter. - - tagWriter := writer startTag: 'two'. - self assert: writer hasActiveTagWriter. - - tagWriter write. - self deny: writer hasActiveTagWriter. - - tagWriter := writer endTag: 'two'. - self assert: writer hasActiveTagWriter. - - tagWriter write. - self deny: writer hasActiveTagWriter. -] - -{ #category : #tests } -XMLWriterTest >> testHasFormatter [ - | writer | - - writer := XMLWriter new. - self deny: writer hasFormatter. - - writer formatter: XMLPrettyPrintingWriterFormatter new. - self assert: writer hasFormatter. - - writer formatter: nil. - self deny: writer hasFormatter. -] - -{ #category : #tests } -XMLWriterTest >> testIsCanonical [ - | writer | - - (writer := XMLWriter new) - enablePrettyPrinting; - lineBreak: Character cr; - isEscaping: false; - escapesContentEntityReferences: false; - omitsRedundantXMLNSDeclarations: false. - self - assert: (writer isCanonical: false) == writer; - assert: (writer formatter isKindOf: XMLPrettyPrintingWriterFormatter); - assert: writer lineBreak = String cr; - deny: writer isEscaping; - deny: writer escapesContentEntityReferences; - deny: writer omitsRedundantXMLNSDeclarations. - - self - assert: (writer isCanonical: true) == writer; - assert: (writer formatter isKindOf: XMLCanonicalWriterFormatter); - assert: writer lineBreak = writer canonicalLineBreak; - assert: writer contentEscapes = writer contentCanonicalEscapes; - assert: writer contentStringEscapes = writer contentStringCanonicalEscapes; - assert: writer isEscaping; - assert: writer escapesContentEntityReferences; - assert: writer omitsRedundantXMLNSDeclarations. - - self - assert: (writer isCanonical: false) == writer; - assert: writer formatter isNil; - assert: writer lineBreak = writer defaultLineBreak; - assert: writer contentEscapes = writer contentDefaultEscapes; - assert: writer contentStringEscapes = writer contentStringDefaultEscapes; - assert: writer isEscaping; - assert: writer escapesContentEntityReferences; - assert: writer omitsRedundantXMLNSDeclarations. -] - -{ #category : #tests } -XMLWriterTest >> testLineBreak [ - (Array - with: String crlf - with: $N - with: '') - do: [:each | | writer | - (writer := XMLWriter new) - enablePrettyPrinting; - lineBreak: each. - writer - xml; - tag: 'test'. - self assert: - writer contents = - (self - onLineBreak: each - join: - #('' - ''))] -] - -{ #category : #tests } -XMLWriterTest >> testNonRedundantXMLNSDeclarations [ - | withBlock | - - withBlock := [:writer | - (writer tag: 'one') - xmlns: 'defaultNS'; - xmlnsAt: 'prefix' put: 'prefixNS'; - with: [ - (writer tag: 'two') - xmlns: 'newDefaultNS'; - xmlnsAt: 'prefix' put: 'newPrefixNS'; - with: [ - "skip one tag" - writer - tag: 'three' - with: [ - "then add more non-reundant xmlns declarations" - (writer tag: 'four') - xmlns: ''; - xmlnsAt: 'prefix' put: 'prefixNS']]]]. - self assert: - (XMLWriter new - writeWith: withBlock; - contents) = - ('', - '', - '', - '', - '', - '', - ''). -] - -{ #category : #tests } -XMLWriterTest >> testOmitsRedundantXMLNSDeclarations [ - | withBlock | - - withBlock := [:writer | - (writer tag: 'one') - xmlns: 'defaultNS'; - xmlnsAt: 'prefix' put: 'prefixNS'; - with: [ - (writer tag: 'two') - xmlns: 'defaultNS'; - xmlnsAt: 'prefix' put: 'prefixNS'; - with: [ - "skip one tag" - writer - tag: 'three' - with: [ - "then add more reundant xmlns declarations" - (writer tag: 'four') - xmlns: 'defaultNS'; - xmlnsAt: 'prefix' put: 'prefixNS']]]]. - self assert: - (XMLWriter new - writeWith: withBlock; - contents) = - ('', - '', - ''). - self assert: - (XMLWriter new - omitsRedundantXMLNSDeclarations: false; - writeWith: withBlock; - contents) = - ('', - '', - '', - '', - '', - '', - ''). - - self assert: - (XMLWriter writeWith: [:writer | (writer tag: 'empty') xmlns: '']) = - ''. - - self assert: - (XMLWriter writeWith: [:writer | - (writer - omitsRedundantXMLNSDeclarations: false; - tag: 'empty') xmlns: '']) = - ''. -] - -{ #category : #tests } -XMLWriterTest >> testOnFormatter [ - | stream formatter writer | - - stream := String new writeStream. - formatter := XMLWriterRecordingFormatterProxy new. - writer := XMLWriter on: stream formatter: formatter. - self - assert: writer stream == stream; - assert: writer formatter == formatter. -] - -{ #category : #tests } -XMLWriterTest >> testOutputsSelfClosingTags [ - | writer | - - (writer := XMLWriter new) - tag: 'tags' with: [ - writer - tag: 'self-closing' with: nil; - outputsSelfClosingTags: false; - tag: 'not-self-closing' with: nil; - outputsSelfClosingTags: true; - tag: 'self-closing' with: nil]. - - self assert: - writer printString = - ''. -] - -{ #category : #tests } -XMLWriterTest >> testPIsWithStringValues [ - | writer | - - writer := XMLWriter new. - writer pi - target: 'xml-xsl'; - data: 'type="text/xsl" href=''demo.xsl'''. - writer pi - target: 'xml-xsl'; - data: 'type="''text''/xsl" href=''"demo".xsl'''. - writer pi - target: 'xml-xsl'; - data: 'type="text/xsl" href=''demo.xsl'. - writer pi - target: 'xml-xsl'; - data: 'type="text/xsl" href="demo.xsl'. - writer tag: 'test'. - - "it should print PI data as-is, preserving the quotes exactly" - self assert: - writer contents = - ('', - '', - '', - '', - ''). -] - -{ #category : #tests } -XMLWriterTest >> testRaw [ - self assert: - (XMLWriter writeWith: [:writer | - writer - tag: 'test' - with: [writer raw: '']]) = - ''. - self assert: - (XMLWriter writeWith: [:writer | - writer - tag: 'test' - with: [writer raw: '']]) = ''. -] - -{ #category : #tests } -XMLWriterTest >> testRedundantWrites [ - self assert: - (XMLWriter writeWith: [:writer | - writer - tag: 'report' - with: [ - (writer tag: 'name') - with: 'TestName - Report'; - write. - writer write. - writer writeWith: [:writer2 | - (writer2 tag: 'finality') - with: [ - writer2 comment - string: 'status'; - write; - write. - writer2 string: 'succeed']; - write. - writer2 write]. - writer write]. - writer write]) = - ('', - 'TestName - Report', - 'succeed', - '') -] - -{ #category : #tests } -XMLWriterTest >> testSimpleExample [ - - | writer | - writer := XMLWriter new. - writer tag - name: 'emptyTag'; - attributeAt: 'a' put: 'one'; - write. - - self assert: writer contents = '' -] - -{ #category : #tests } -XMLWriterTest >> testSimpleExampleWithWriteWith [ - | block contents | - - block := - [:writer | - writer tag - name: 'emptyTag'; - attributeAt: 'a' put: 'value']. - contents := ''. - self - assert: (XMLWriter new writeWith: block) contents = contents; - assert: (XMLWriter writeWith: block) = contents. -] - -{ #category : #tests } -XMLWriterTest >> testStartingAndFinishing [ - | writer outer inner | - - writer := XMLWriter new. - - (outer := writer tag) - name: 'outer'; - attributeAt: 'test' put: 'value'; - xmlns: 'default'; - startWriting. - - (inner := writer tag: 'inner') - startWriting. - writer string: 'test'. - (writer tag: 'empty') - startWriting; - finishWriting. - inner finishWriting. - outer finishWriting. - - self assert: - writer contents = - 'test'. -] - -{ #category : #tests } -XMLWriterTest >> testString [ - self assert: - (XMLWriter writeWith: [:writer | - writer - tag: 'test' - with: [writer string: '']]) = - '<escaped name="&value;"/>'. - self assert: - (XMLWriter writeWith: [:writer | - writer - tag: 'test' - with: [writer string: '']]) = ''. -] - -{ #category : #tests } -XMLWriterTest >> testSystemAndPublicIDs [ - | writer | - - (writer := XMLWriter new) - doctype - root: 'test'; - publicID: 'public"ID'; - systemID: 'system"ID'''. "contains double and single quote" - - "IDs are single quoted because they contain a double quote" - self assert: writer contents = '' -] - -{ #category : #tests } -XMLWriterTest >> testUnsafeTagWriters [ - self assert: - (XMLWriter writeWith: [:writer | - writer startTag name: 'one'. - writer - startTag: 'two' - attributes: (Array with: 'name' -> 'value'); - startTag: 'three']) = ''. - - self assert: - (XMLWriter writeWith: [:writer | - writer endTag name: 'three'. - writer - endTag: 'two'; - endTag: 'one']) = ''. -] - -{ #category : #tests } -XMLWriterTest >> testUnsafeTagWritersAttributes [ - | writer tag | - - writer := XMLWriter new. - tag := writer startTag: 'outer' attributes: (Array with: 'first' -> 'one'). - self - assert: tag hasAttributes; - assert: (tag attributeAt: 'first') = 'one'; - assert: (tag attributeAt: 'second' put: 'two') = 'two'; - assert: (tag attributeAt: 'third' ifAbsentPut: ['three']) = 'three'; - assert: (tag attributeAt: 'fourth' ifAbsent: [nil]) isNil; - assert: (tag attributeAt: 'fourth') isEmpty; - assert: (tag attributes at: 'fourth') isEmpty; - deny: (tag includesAttribute: 'fourth'). - - writer - startTag: 'inner' - attributes: (Dictionary with: 'fourth' -> 'four'). - self assert: - writer contents = - ''. -] - -{ #category : #tests } -XMLWriterTest >> testUnsafeTagWritersXMLNSDeclarations [ - | writer tag | - - writer := XMLWriter new. - tag := writer startTag: 'test'. - self - deny: tag hasXMLNSDeclarations; - deny: (tag includesXMLNS: ''); - deny: (tag includesXMLNS: 'ns1'). - - tag xmlnsDeclarations: (Array with: '' -> 'default1' with: 'ns1' -> 'first'). - self - assert: tag hasXMLNSDeclarations; - assert: (tag includesXMLNS: ''); - assert: (tag includesXMLNS: 'ns1'); - assert: tag xmlns = 'default1'; - assert: (tag xmlnsAt: '') = 'default1'; - assert: (tag xmlns: 'default2') = tag; - assert: tag xmlns = 'default2'; - assert: (tag xmlnsAt: 'ns1') = 'first'; - assert: (tag xmlnsAt: 'ns2' put: 'second') = 'second'; - assert: (tag xmlnsAt: 'ns3' ifAbsentPut: ['third']) = 'third'; - assert: (tag xmlnsAt: 'ns4' ifAbsent: [nil]) isNil; - assert: (tag xmlnsAt: 'ns4') isEmpty; - assert: (tag xmlnsDeclarations at: 'ns4') isEmpty. - - self assert: - writer contents = - ''. -] - -{ #category : #tests } -XMLWriterTest >> testWideStringContent [ - | wideStringContent writer | - - wideStringContent := - String - with: 0 asCharacter "the low bound of the escape lookup tables" - with: 255 asCharacter "the high bound of the escape lookup tables" - with: 256 asCharacter - with: 1000 asCharacter. - - writer := XMLWriter new. - writer doctype - root: 'test'; - with: [ - writer entityDeclaration - name: 'test'; - replacement: wideStringContent]. - writer tag - name: 'test'; - attributeAt: 'test' put: wideStringContent; - with: wideStringContent. - - self assert: - writer contents = - (']>{1}' - format: (Array with: wideStringContent)). -] - -{ #category : #tests } -XMLWriterTest >> testXMLDeclarations [ - | writer | - - (writer := XMLWriter new) - xml. - writer xml - version: '1.0'. - writer xml - version: 1.0. - writer xml - version: '1.101'; - encoding: 'UTF-16'; - standalone: false. - writer xml - version: '1.01'; - standalone: true. - writer xml - version: 1.101; - encoding: 'UTF-16LE'; - standalone: 'yes'. - writer xml - version: 1.01; - standalone: 'no'. - writer xml - version: ''; - encoding: ''; - standalone: ''. - - self assert: - writer printString = - ('', - '', - '', - '', - '', - '', - '', - ''). -] - -{ #category : #tests } -XMLWriterTest >> testXMLNSDeclarations [ - | writer tag | - - writer := XMLWriter new. - tag := writer tag: 'test'. - self - deny: tag hasXMLNSDeclarations; - deny: (tag includesXMLNS: ''); - deny: (tag includesXMLNS: 'ns1'). - - tag xmlnsDeclarations: (Array with: '' -> 'default1' with: 'ns1' -> 'first'). - self - assert: tag hasXMLNSDeclarations; - assert: (tag includesXMLNS: ''); - assert: (tag includesXMLNS: 'ns1'); - assert: tag xmlns = 'default1'; - assert: (tag xmlnsAt: '') = 'default1'; - assert: (tag xmlns: 'default2') = tag; - assert: tag xmlns = 'default2'; - assert: (tag xmlnsAt: 'ns1') = 'first'; - assert: (tag xmlnsAt: 'ns2' put: 'second') = 'second'; - assert: (tag xmlnsAt: 'ns3' ifAbsentPut: ['third']) = 'third'; - assert: (tag xmlnsAt: 'ns4' ifAbsent: [nil]) isNil; - assert: (tag xmlnsAt: 'ns4') isEmpty; - assert: (tag xmlnsDeclarations at: 'ns4') isEmpty. - - self assert: - writer contents = - ''. -] diff --git a/src/XML-Writer-Tests/package.st b/src/XML-Writer-Tests/package.st deleted file mode 100644 index f5b0839d9..000000000 --- a/src/XML-Writer-Tests/package.st +++ /dev/null @@ -1 +0,0 @@ -Package { #name : #'XML-Writer-Tests' }